Content-Type: multipart/related; start=; boundary=----------nCJOUr6ZQo8RzugzPUZTVa
Content-Location: https://e.mail.ru/attaches-viewer/?id=13730392450000000353&_av=13730392450000000353%3B0%3B8&x-email=viva-zas%40mail.ru
Subject: =?utf-8?Q?Musijezdov.pdf=20-=20Re:=20-=20viva-zas@mail.ru=20-=20=D0=9F=D0=BE=D1=87=D1=82=D0=B0=20Mail.Ru?=
MIME-Version: 1.0
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=default.htm
Content-Type: text/html; charset=utf-8; name=default.htm
Content-ID:
Content-Location: https://e.mail.ru/attaches-viewer/?id=13730392450000000353&_av=13730392450000000353%3B0%3B8&x-email=viva-zas%40mail.ru
Content-Transfer-Encoding: 8bit
Загрузка... - viva-zas@mail.ru - Почта Mail.Ru
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=ajs.min.js
Content-Type: application/x-javascript; name=ajs.min.js
Content-Location: https://img.imgsmail.ru/p/0.13.3b/js/ajs.min.js?v=1377502689
Content-Transfer-Encoding: Base64
dm9pZCBmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1KFope3ZhciBh
PW51bGwsZixjLGg9Wi5sZW5ndGgsZCxnPVtdO2ZvcihmPTA7ZjxoOysrZilpZigo
ZD1aW2ZdKSYmZC5hanMmJmQgaW5zdGFuY2VvZiBzKWZvcihhPTAsYz1kLmxlbmd0
aDthPGM7KythKWcucHVzaChkW2FdKTtlbHNlInN0cmluZyI9PT10eXBlb2YgZCYm
KGQ9Yi5jcmVhdGVUZXh0Tm9kZShkKSksZC5ub2RlVHlwZSYmZy5wdXNoKGQpO2lm
KDE9PT0oaD1nLmxlbmd0aCkpYT1nWzBdO2Vsc2UgZm9yKGE9Yi5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCksZj0wO2Y8aDsrK2YpYS5hcHBlbmRDaGlsZChnW2ZdKTty
ZXR1cm4gYX1mdW5jdGlvbiBuKGEsYixmLGMsaCl7aWYoKGg9U3RyaW5nKGh8fCIi
KSkmJmEudGVzdChoKSlmb3IoYT03O2EtLTspfmguaW5kZXhPZih0aGlzW2ErYl0p
JiYoaD1oLnJlcGxhY2UodGhpc1thK2ZdLHRoaXNbYStjXSkpO3JldHVybiBofWZ1
bmN0aW9uIHAoYSxiKXt2YXIgZj0wLGg9Imxlbmd0aCJpbgp0aGlzJiYhKCJub2Rl
VHlwZSJpbiB0aGlzKSYmdGhpcy5sZW5ndGh8fDAsYz1oJiZ0aGlzWzBdfHx0aGlz
LGQsZyxrO2I9Yi5yZXBsYWNlKHgsIiAiKS5zcGxpdCh6KTtrPUwmJigyPT09THx8
MT09PWIubGVuZ3RoPzI6MSk7ZG8gYyYmKG0oYykmJmsmJiJzdHJpbmciPT10eXBl
b2YgYT8oYz1jLmNsYXNzTGlzdCwyPT09az9jW2FdLmFwcGx5KGMsYik6QXJyYXku
Zm9yRWFjaChiLGNbYV0uYmluZChjKSkpOiJzdHJpbmciPT09dHlwZW9mKGQ9Y1t0
XSkmJigoZz1kLmxlbmd0aCk/KGQ9KCIgIitkKyIgIikucmVwbGFjZSh4KSxnPWQu
bGVuZ3RoLGQ9QXJyYXkucmVkdWNlKGIsYSxkKSsiIik6ZD1iLmpvaW4oIiAiKSxn
IT09ZC5sZW5ndGgmJihjW3RdPWQudHJpbSgpKSkpLGM9ZisrPGg/dGhpc1tmXTpu
dWxsO3doaWxlKGMpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEEoYSxiKXtyZXR1cm4g
bShiKSYmQXJyYXkuZXZlcnkoYSxMP2IuY2xhc3NMaXN0LmNvbnRhaW5zLmJpbmQo
Yi5jbGFzc0xpc3QpOgpnYS5iaW5kKG51bGwsKCIgIitiW3RdKyIgIikucmVwbGFj
ZSh4LCIgIikpKX1mdW5jdGlvbiBtKGEpe3JldHVybiBhJiYxPT09YS5ub2RlVHlw
ZX1mdW5jdGlvbiBlKCl7dGhpcy5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gcigp
e3RoaXMucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gRShhLEQpe2EuX19maXhlZHx8
KGEudGFyZ2V0fHwoYS50YXJnZXQ9YS5zcmNFbGVtZW50fHxiKSwzPT09YS50YXJn
ZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLmN1
cnJlbnRUYXJnZXR8fChhLmN1cnJlbnRUYXJnZXQ9RCksIWEucmVsYXRlZFRhcmdl
dCYmYS5mcm9tRWxlbWVudCYmKGEucmVsYXRlZFRhcmdldD1hLmZyb21FbGVtZW50
PT09YS50YXJnZXQ/YS50b0VsZW1lbnQ6YS5mcm9tRWxlbWVudCksYS5zdG9wUHJv
cGFnYXRpb258fChhLnN0b3BQcm9wYWdhdGlvbj1lKSxhLnByZXZlbnREZWZhdWx0
fHwoYS5wcmV2ZW50RGVmYXVsdD1yKSwhYS53aGljaCYmImJ1dHRvbiJpbgphJiYo
YS53aGljaD1hLmJ1dHRvbiYxPzE6YS5idXR0b24mMj8zOmEuYnV0dG9uJjQ/Mjow
KSxhLl9fZml4ZWQ9ITApO3JldHVybiBhfWZ1bmN0aW9uIHEoYSl7dmFyIEQ9dGhp
cy5jdCxmLGM9dlt0aGlzLmtdLGgsZD0wLGs9YyYmYy5sZW5ndGg7ITA9PT1EP0Q9
ZzohMT09PUQ/RD1iOiJzdHJpbmciPT09dHlwZW9mIEQmJihEPWIuYWxsW0RdKTtp
ZihrKWZvcihhPUUuY2FsbChudWxsLGF8fGcuZXZlbnQsRCk7ZDxrO2QrKylpZiho
PWNbZF0pIm9iamVjdCI9PT10eXBlb2YgaCYmKGY9aCxoPXMuX19wcm9jZXNzSGFu
ZGxlcihoKSksITE9PT1oLmNhbGwoZnx8RCxhKSYmKGEucmV0dXJuVmFsdWU9ITEp
O3JldHVybiBhLnJldHVyblZhbHVlfWZ1bmN0aW9uIGMoYSxELGYsYyl7Zj1mLnNw
bGl0KHopO3ZhciBoPTAsZCxrPSJsZW5ndGgiaW4gYSYmISgibm9kZVR5cGUiaW4g
YSkmJmEubGVuZ3RofHwwLGw9ayYmYVswXXx8YSxDPWYubGVuZ3RoLHgsdCxlLHks
Qj1jO2lmKGwpe2Rve2lmKE9iamVjdC5pc09iamVjdChsKSYmCmxbJF0pZm9yKGQ9
MDtkPEM7ZCsrKXt4PWZbZF07aWYoIVApaWYoYz1CLGNbR118fChjW0ddPSJfIitz
LmdpZCsrKSx4PSJvbiIreCx0PWwhPT1nJiZsIT09YiYmInVuaXF1ZUlEImluIGw/
bC51bmlxdWVJRDpsW0ddfHwobFtHXT0iXyIrcy5naWQrKyksdD10KyJfIit4LHk9
dlt0XSxEKWU9InVuaXF1ZUlEImluIGwmJmwhPT1iP2wudW5pcXVlSUQ6bD09PWc/
ITA6bD09PWI/ITE6bCxlPXtjdDplLGs6dH0seT8odm9pZCAwPT09eVtjW0ddXSYm
KHlbY1tHXV09bnVsbCx5LnB1c2goYykpLGM9bnVsbCk6KHk9dlt0XT1bY10seVtj
W0ddXT1udWxsLGM9dlt0KyJfIl09cS5iaW5kKGUpKTtlbHNlIGlmKHkpe2Zvcihl
PXkubGVuZ3RoOzA8PS0tZSYmeVtlXSE9PWM7KTstMSE9PWUmJnkuc3BsaWNlKGUs
MSk7KGU9Y1tHXSkmJmRlbGV0ZSB5W2VdO3kubGVuZ3RoP2M9bnVsbDooYz12W3Qr
Il8iXSxkZWxldGUgdlt0KyJfIl0sZGVsZXRlIHZbdF0pfWlmKGMpbFtEPyQ6d10o
eCxjLCExKX1sPQpoKys8az9hW2hdOm51bGx9d2hpbGUobCl9cmV0dXJuIGF9ZnVu
Y3Rpb24gbChhLGIpe2lmKHZvaWQgMCE9PWIpe3ZhciBmPXt9O2ZbYV09YjtyZXR1
cm4gZn1yZXR1cm4gYX1mdW5jdGlvbiB5KGEsRCl7Zm9yKHZhciBmLGM9W10sZD0w
LGc9YS5sZW5ndGgsbD1ELmluZGV4T2YoIiAiKSxDPSh+bD9ELnN1YnN0cigwLGwp
OkQpLnJlcGxhY2UoeiksdCx4O2Q8ZztkKyspZj1hW2RdLH5sJiZhYT9mPWYucXVl
cnlTZWxlY3RvckFsbChEKTooeD1DLnN1YnN0cigxKSx0PUMuY2hhckF0KDApLCIj
Ij09PXQ/Zj0oZj1iW2hhXSh4KSk/W2ZdOltdOiIuIj09PXQ/Zj1pYSh4LnJlcGxh
Y2UoaCwiICIpLGYpOih0PUMuc3BsaXQoIi4iKSxmPWZbQl0odFswXSksZj1JKEMs
Ii4iKT9rKGYsbnVsbCx0LnNsaWNlKDEpKTpBcnJheS5mcm9tKGYpKSksZi5sZW5n
dGgmJih+bCYmIWFhJiYoZj15KGYsRC5zdWJzdHIobCsxKSkpLGM9Yy5jb25jYXQo
Ri5jYWxsKGYsMCkpKTtyZXR1cm4gY31mdW5jdGlvbiBrKGEsCmIsZil7dmFyIGM9
W10sZD0wLGc9YS5sZW5ndGgsaztiJiYoYj1iLnRvVXBwZXJDYXNlKCkpO2Zvcihm
JiYic3RyaW5nIj09dHlwZW9mIGYmJihmPWYucmVwbGFjZShoLCIgIikuc3BsaXQo
eikpO2Q8ZztkKyspaz1hW2RdLCFtKGspfHwoYiYmYiE9ay50YWdOYW1lLnRvVXBw
ZXJDYXNlKCl8fGYmJiFBKGYsaykpfHxjLnB1c2goayk7cmV0dXJuIGN9dmFyIGc9
dGhpcyxkPXt9LGE7YT0iMC4xMy40IjtwYXJzZUZsb2F0KGEpfHwoYT0iMC4xMy4w
Iik7ZC52ZXJzaW9uPWE7Z1siYWpzIitkLnZlcnNpb25dPWQ7Zy5hanN8fChnLmFq
cz1kKTtGdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlw
ZS5iaW5kPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYoMTxhcmd1bWVudHMubGVu
Z3RoKXt2YXIgZj1GLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigp
e3JldHVybiBiLmFwcGx5KGEsZi5jb25jYXQoRi5jYWxsKGFyZ3VtZW50cywwKSkp
fX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYi5hcHBseShhLAphcmd1bWVudHMp
fX0pO3ZhciBiPWcuZG9jdW1lbnQsZj0iYXR0YWNoRXZlbnQiaW4gYiYmImFsbCJp
biBiJiYidW5pcXVlSUQiaW4gYi5kb2N1bWVudEVsZW1lbnQmJisoKC9tc2llIChc
ZCspL2kuZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KXx8W10pWzFdfHwwKXx8bnVs
bCxoPS9cLi9nLEM9L15cZCsvLHo9L1xzKy8seD0vW1xyXG5cdF0vZyx0PSJjbGFz
c05hbWUiLGhhPSJnZXRFbGVtZW50QnlJZCIsQj0iZ2V0RWxlbWVudHNCeVRhZ05h
bWUiLFA9ImFkZEV2ZW50TGlzdGVuZXIiaW4gYix2PSFQJiZ7fSwkPVA/ImFkZEV2
ZW50TGlzdGVuZXIiOiJhdHRhY2hFdmVudCIsdz1QPyJyZW1vdmVFdmVudExpc3Rl
bmVyIjoiZGV0YWNoRXZlbnQiLGFhPSEhYi5xdWVyeVNlbGVjdG9yQWxsLGphPXtm
aWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0
eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sRj0o
YT1BcnJheS5wcm90b3R5cGUpLnNsaWNlLApNPWEuZm9yRWFjaCxKPWEuZmlsdGVy
LE49YS5yZWR1Y2UsVT1hLmV2ZXJ5LGJhPWEuc29tZSxrYT0vXlxzKy8sbGE9L1xz
LyxtYT0iYSIhPU9iamVjdCgiYSIpWzBdfHwhKDAgaW4gT2JqZWN0KCJhIikpLFE9
ZnVuY3Rpb24oYSxiKXtpZihudWxsPT1hJiYhYil0aHJvdyBuZXcgVHlwZUVycm9y
O3JldHVybiBtYSYmInN0cmluZyI9PXR5cGVvZiBhJiZhP1N0cmluZy5wcm90b3R5
cGUuc3BsaXQuY2FsbChhLCIiKTpPYmplY3QoYSl9LG5hPVN0cmluZy5wcm90b3R5
cGUudHJpbXx8ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5yZXBsYWNlKGthLCIi
KSxiPWEubGVuZ3RoO2xhLnRlc3QoYS5jaGFyQXQoLS1iKSk7KTtyZXR1cm4gYS5z
bGljZSgwLGIrMSl9LEk7YT0iXHRcblx4MEJcZlxyIFx1MDBhMFx1MTY4MFx1MTgw
ZVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAw
N1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAyZlx1MjA1Zlx1MzAwMFx1MjAyOFx1MjAy
OVx1ZmVmZiI7CnZhciBjYSxkYSxvYT1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHks
Vj1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxXPWZ1bmN0aW9uKGEsYixmKXtyZXR1
cm4gb2EuY2FsbChhLGIsRi5jYWxsKGFyZ3VtZW50cywyKSl9LEs9Vi5iaW5kKE9i
amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLEw9ImNsYXNzTGlzdCJpbiBi
LmRvY3VtZW50RWxlbWVudCYmZnVuY3Rpb24oYSl7YS5jbGFzc0xpc3QuYWRkKDEs
Mik7cmV0dXJuIGEuY2xhc3NMaXN0LmNvbnRhaW5zKDIpPzI6MX0oYi5jcmVhdGVF
bGVtZW50KCJiIikpLGVhLGZhLFI9KCJfIitNYXRoLnJhbmRvbSgpKS5zdWJzdHIo
Myw2KSxHPSJ1dWlkIitSLE89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxILFg7
U3RyaW5nLnByb3RvdHlwZS5jb250YWluc3x8KFN0cmluZy5wcm90b3R5cGUuY29u
dGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4hIX5TdHJpbmcodGhpcykuaW5kZXhP
ZihhLGJ8MCl9KTtJPVYuYmluZChTdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zKTsK
U3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRofHwoU3RyaW5nLnByb3RvdHlwZS5z
dGFydHNXaXRoPWZ1bmN0aW9uKGEsYil7YT1TdHJpbmcoYSk7aWYoIWEubGVuZ3Ro
KXJldHVybiEwO2J8PTA7MD5iJiYoYj0wKTtyZXR1cm4gdGhpcy5jaGFyQ29kZUF0
KGIpPT09YS5jaGFyQ29kZUF0KDApJiZ0aGlzLmluZGV4T2YoYSxiKT09PWJ9KTtT
dHJpbmcucHJvdG90eXBlLmVuZHNXaXRofHwoU3RyaW5nLnByb3RvdHlwZS5lbmRz
V2l0aD1mdW5jdGlvbihhLGIpe2E9U3RyaW5nKGEpO3ZhciBmPWEubGVuZ3RofDA7
aWYoIWYpcmV0dXJuITA7dmFyIGM9dGhpcy5sZW5ndGg7Yj12b2lkIDA9PT1iP2M6
YnwwO2lmKDE+YilyZXR1cm4hMTtjPShjPGI/YzpiKS1mO3JldHVybigwPD1jfHxm
PT09LWMpJiYoMD09PWJ8fHRoaXMuY2hhckNvZGVBdChjKT09PWEuY2hhckNvZGVB
dCgwKSkmJnRoaXMuaW5kZXhPZihhLGMpPT09Y30pO09iamVjdC5jcmVhdGV8fChP
YmplY3QuY3JlYXRlPWZ1bmN0aW9uKGEpe3ZhciBiOwpudWxsPT09YT9iPXtfX3By
b3RvX186bnVsbH06KGI9ZnVuY3Rpb24oKXt9LGIucHJvdG90eXBlPWEsYj1uZXcg
YixiLl9fcHJvdG9fXz1hKTtyZXR1cm4gYn0pO09iamVjdC5rZXlzfHwoT2JqZWN0
LmtleXM9ZnVuY3Rpb24oYSl7dmFyIGIsZixjPSF7dG9TdHJpbmc6bnVsbH0ucHJv
cGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksaCxkO2MmJihiPSJ0b1N0cmlu
ZyB0b0xvY2FsZVN0cmluZyB2YWx1ZU9mIGhhc093blByb3BlcnR5IGlzUHJvdG90
eXBlT2YgcHJvcGVydHlJc0VudW1lcmFibGUgY29uc3RydWN0b3IiLnNwbGl0KCIg
IiksZj1iLmxlbmd0aCk7Zm9yKGEgaW4gYXJndW1lbnRzKXthPSExO2JyZWFrfSEx
IT09YSYmKGE9ITAsIltvYmplY3QgQXJndW1lbnRzXSIhPT0oZD1PLmNhbGwoYXJn
dW1lbnRzKSkmJihkPSExLGg9ImNhbGxlciJpbiBhcmd1bWVudHMpKTtyZXR1cm4g
ZnVuY3Rpb24oZyl7aWYoIm9iamVjdCIhPT10eXBlb2YgZyYmImZ1bmN0aW9uIiE9
PXR5cGVvZiBnfHwKbnVsbD09PWcpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0
LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciBrPVtdLGw7Zm9yKGwg
aW4gZylLKGcsbCkmJmsucHVzaChsKTtpZihjKWZvcihsPTA7bDxmO2wrKylLKGcs
YltsXSkmJmsucHVzaChiW2xdKTt2YXIgQztpZihhJiYoZD9PLmNhbGwoZyk9PT1k
OiJvYmplY3QiPT09dHlwZW9mIGcmJiJjYWxsZWUiaW4gZyYmKCFofHwiY2FsbGVy
ImluIGcpJiYibnVtYmVyIj09PXR5cGVvZihDPWcubGVuZ3RoKSkpZm9yKGw9MDts
PEM7bCsrKUsoZyxsKSYmay5wdXNoKGwpO3JldHVybiBrfX0obnVsbCkpO09iamVj
dC5pc09iamVjdD1mdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4hIWEmJigib2JqZWN0
Ij09PShiPXR5cGVvZiBhKXx8ImZ1bmN0aW9uIj09PWIpfTtPYmplY3QuaXNQbGFp
bk9iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4hIWEmJiJbb2JqZWN0IE9iamVjdF0i
PT09Ty5jYWxsKGEpJiYoImZ1bmN0aW9uIj09PXR5cGVvZiBhLmNvbnN0cnVjdG9y
JiYKIltvYmplY3QgRnVuY3Rpb25dIj09PU8uY2FsbChhLmNvbnN0cnVjdG9yKXx8
bnVsbD09PWEuX19wcm90b19fKSYmIUsoYSwiY2FsbGVlIil9O09iamVjdC5mb3JF
YWNofHwoT2JqZWN0LmZvckVhY2g9ZnVuY3Rpb24oYSxiLGYpe2lmKCJmdW5jdGlv
biIhPT10eXBlb2YgYil0aHJvdyBuZXcgVHlwZUVycm9yKGIrIiBpcyBub3QgYSBm
dW5jdGlvbiIpO3ZhciBjO2lmKGEpZm9yKGMgaW4gYSlpZihLKGEsYykmJiExPT09
Yi5jYWxsKGYsYVtjXSxjLGEpKWJyZWFrfSk7aWYoIVN0cmluZy5wcm90b3R5cGUu
dHJpbXx8YS50cmltKCkpYT0iWyIrYSsiXSIsY2E9UmVnRXhwKCJeIithK2ErIioi
KSxkYT1SZWdFeHAoYSthKyIqJCIpLFN0cmluZy5wcm90b3R5cGUudHJpbT1mdW5j
dGlvbigpe3JldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShjYSwiIikucmVwbGFj
ZShkYSwiIil9O0Z1bmN0aW9uLnByb3RvdHlwZS50aHJvdHRsZXx8KEZ1bmN0aW9u
LnByb3RvdHlwZS50aHJvdHRsZT1mdW5jdGlvbihhLApiKXt2YXIgZj10aGlzLGMs
aDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZDtoPWFyZ3VtZW50cztjfHwoZD1mdW5j
dGlvbigpe2M9bnVsbDtoJiYoZi5hcHBseSh0aGlzLGgpLGg9bnVsbCxjPXNldFRp
bWVvdXQoZCxhKSl9LmJpbmQoYnx8dGhpcyksZCgpKX19KTtGdW5jdGlvbi5wcm90
b3R5cGUuZGVib3VuY2V8fChGdW5jdGlvbi5wcm90b3R5cGUuZGVib3VuY2U9ZnVu
Y3Rpb24oYSxiKXt2YXIgZj10aGlzLGM7cmV0dXJuIGZ1bmN0aW9uKCl7Y2xlYXJU
aW1lb3V0KGMpO2M9c2V0VGltZW91dChmdW5jdGlvbihhKXtmLmFwcGx5KHRoaXMs
YSl9LmJpbmQoYnx8dGhpcyxhcmd1bWVudHMpLGEpfX0pO051bWJlci5pc051bWJl
cnx8KE51bWJlci5pc051bWJlcj1mdW5jdGlvbihhKXtyZXR1cm4hZy5pc05hTihn
LnBhcnNlRmxvYXQoYSkpJiZnLmlzRmluaXRlKGEpfSk7TnVtYmVyLmlzTnVtZXJp
Yz1mdW5jdGlvbihhKXtyZXR1cm4hZy5pc05hTihnLnBhcnNlRmxvYXQoYSkpJiZn
LmlzRmluaXRlKGEpfTsKTnVtYmVyLmlzRmluaXRlfHwoTnVtYmVyLmlzRmluaXRl
PWZ1bmN0aW9uKGEpe3JldHVybiJudW1iZXIiPT09dHlwZW9mIGEmJmcuaXNGaW5p
dGUoYSl9KTtOdW1iZXIuaXNJbnRlZ2VyfHwoTnVtYmVyLmlzSW50ZWdlcj1mdW5j
dGlvbihhKXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKGEpJiYtOTAwNzE5OTI1NDc0
MDk5Mjw9YSYmOTAwNzE5OTI1NDc0MDk5Mj49YSYmTWF0aC5mbG9vcihhKT09PWF9
KTt2YXIgcz1mdW5jdGlvbihhLGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHMpKXJl
dHVybiBuZXcgcyhhLGYpO2lmKGEmJmEuYWpzPT09UiYmYSBpbnN0YW5jZW9mIHMp
cmV0dXJuIGE7dGhpcy5sZW5ndGg9MDt0aGlzLnNlbGVjdG9yPSJzdHJpbmciPT10
eXBlb2YgYT9hOiIiO2lmKGEpaWYoImJvZHkiPT09YSl0aGlzWzBdPWIuYm9keSx0
aGlzLmxlbmd0aD0xO2Vsc2UgaWYoYT09PWcpdGhpc1swXT1nLHRoaXMubGVuZ3Ro
PTE7ZWxzZSBpZigic3RyaW5nIj09PXR5cGVvZiBhKWlmKHRoaXMuY29udGV4dD0K
Zj1mfHxiLCI8Ij09YS5jaGFyQXQoMCkpe3ZhciBjPWIuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7Yy5pbm5lckhUTUw9YTt0aGlzLnB1c2goYy5jaGlsZE5vZGVzKX1lbHNl
IHRoaXMucHVzaCh5KHMoZiksYSkpO2Vsc2UgYSYmKDE9PWEubm9kZVR5cGV8fDk9
PWEubm9kZVR5cGU/KHRoaXNbMF09YSx0aGlzLmxlbmd0aD0xKTp0aGlzLnB1c2go
YSkpO3JldHVybiB0aGlzfTtBcnJheS5mb3JFYWNofHwoQXJyYXkuZm9yRWFjaD1N
P2Z1bmN0aW9uKGEsYixmKXtyZXR1cm4gTS5hcHBseShhLEYuY2FsbChhcmd1bWVu
dHMsMSkpfTpmdW5jdGlvbihhLGIsZil7Zm9yKHZhciBjPVEoYSksaD1jLmxlbmd0
aD4+PjAsZD0tMTsrK2Q8aDspZCBpbiBjJiZXKGIsZixjW2RdLGQsYSl9KTtBcnJh
eS5maWx0ZXJ8fChBcnJheS5maWx0ZXI9Sj9mdW5jdGlvbihhLGIsZil7cmV0dXJu
IEouYXBwbHkoYSxGLmNhbGwoYXJndW1lbnRzLDEpKX06ZnVuY3Rpb24oYSxiLGYp
e2E9UShhKTtmb3IodmFyIGM9YS5sZW5ndGg+Pj4KMCxoPVtdLGQsZz0wO2c8Yztn
KyspZyBpbiBhJiYoZD1hW2ddLFcoYixmLGQsZyxhKSYmaC5wdXNoKGQpKTtyZXR1
cm4gaH0pO0FycmF5LnJlZHVjZXx8KEFycmF5LnJlZHVjZT1OP2Z1bmN0aW9uKGEs
YixmKXtyZXR1cm4gTi5hcHBseShhLEYuY2FsbChhcmd1bWVudHMsMSkpfTpmdW5j
dGlvbihhLGIsZil7dmFyIGM9UShhKSxkPWMubGVuZ3RoPj4+MCxoPTA7aWYoMD09
PWQmJjE+PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJy
YXkgbGVuZ3RoIGlzIDAgYW5kIG5vIHNlY29uZCBhcmd1bWVudCIpO2Zvcih2b2lk
IDA9PT1mJiYoZj0oKytoLGNbMF0pKTtoPGQ7KytoKWggaW4gYyYmKGY9Yi5jYWxs
KHZvaWQgMCxmLGNbaF0saCxjKSk7cmV0dXJuIGZ9KTtYPVU/bnVsbDpmdW5jdGlv
bihhLGIsZixjKXt2b2lkIDA9PT1jJiYoYz0hMCk7dmFyIGg9YztBcnJheS5mb3JF
YWNoKGEsZnVuY3Rpb24oYSxkKXtoPT1jJiYoaD0hIVcoYixmLGEsZCx0aGlzKSl9
LGEpOwpyZXR1cm4gaH07QXJyYXkuZXZlcnl8fChBcnJheS5ldmVyeT1VP2Z1bmN0
aW9uKGEpe3JldHVybiBVLmFwcGx5KGEsRi5jYWxsKGFyZ3VtZW50cywxKSl9OmZ1
bmN0aW9uKGEsYixmKXtyZXR1cm4gWChhLGIsZil9KTtBcnJheS5zb21lfHwoQXJy
YXkuc29tZT1iYT9mdW5jdGlvbihhKXtyZXR1cm4gYmEuYXBwbHkoYSxGLmNhbGwo
YXJndW1lbnRzLDEpKX06ZnVuY3Rpb24oYSxiLGYpe3JldHVybiBYKGEsYixmLCEx
KX0pO3MuZm9yRWFjaD1BcnJheS5mb3JFYWNoO3MuZmlsdGVyPUFycmF5LmZpbHRl
cjtzLnJlZHVjZT1BcnJheS5yZWR1Y2U7cy5ldmVyeT1BcnJheS5ldmVyeTtzLnNv
bWU9QXJyYXkuc29tZTtBcnJheS5pc0FycmF5fHwoQXJyYXkuaXNBcnJheT1mdW5j
dGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09Ty5jYWxsKGEpfSk7QXJy
YXkuZnJvbXx8KEFycmF5LmZyb209ZnVuY3Rpb24oYSl7aWYoYS50b0FycmF5KXJl
dHVybiBhLnRvQXJyYXkoKTthPVEoYSwhMCk7CnZhciBiPWEubGVuZ3RoPj4+MCxm
O3RyeXtmPUYuY2FsbChhKX1jYXRjaChjKXt9aWYoZiYmZi5sZW5ndGg9PT1iKXJl
dHVybiBmO2Y9W107Zm9yKHZhciBoPTA7aDxiO2grKyloIGluIGEmJihmW2hdPWFb
aF0pO3JldHVybiBmfSk7QXJyYXkub2Z8fChBcnJheS5vZj1mdW5jdGlvbigpe3Jl
dHVybiBGLmNhbGwoYXJndW1lbnRzKX0pO3MuZXh0ZW5kPWZ1bmN0aW9uKGEpe3Zh
ciBiPTEsZj1hcmd1bWVudHMubGVuZ3RoLGMsaCxkO2lmKGYpe2Zvcig7YjxmO2Ir
KylpZihkPWFyZ3VtZW50c1tiXSlmb3IoaCBpbiBkKUsoZCxoKSYmKG51bGwhPT0o
Yz1kW2hdKSYmdm9pZCAwIT09YykmJihhW2hdPWMpO3JldHVybiBhfXMuZXhwYW5k
KHMuZm4sYSk7cmV0dXJuIHRoaXN9O3MudHJpbT1mdW5jdGlvbihhKXtyZXR1cm4g
bnVsbD09YT8iIjpuYS5jYWxsKGEpfTtzLmdpZD0xO3MuZWFjaD1BcnJheS5mb3JF
YWNoO3Mubm9vcD1mdW5jdGlvbihhKXtyZXR1cm4gYX07cy5xdW90ZT1mdW5jdGlv
bihhKXtyZXR1cm4oYSsKIiIpLnJlcGxhY2UoL1tcXCInXS9nLCJcXCQmIikucmVw
bGFjZSgvXHUwMDAwL2csIlxcMCIpfTtzLmNhbGxBc3luYz1mdW5jdGlvbihhLGIs
ZixjKXtjJiZjbGVhclRpbWVvdXQoYyk7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rp
b24oKXthLmFwcGx5KGJ8fG51bGwsZnx8W10pfSl9O0g9IiYjMDM5OyAmYXBvczsg
JiMzOTsgJnF1b3Q7ICZsdDsgJmd0OyAmYW1wOyAnICcgJyBcIiA8ID4gJiIuc3Bs
aXQoIiAiKTtmb3IoYT0wOzE0PmE7KythKUhbYSsxNF09UmVnRXhwKEhbYV0sImci
KTtkLkh0bWx8fChkLkh0bWw9e30sZC5IVE1MPWQuSHRtbCk7ZC5IdG1sLmVzY2Fw
ZT1uLmJpbmQoSCxSZWdFeHAoSC5zbGljZSg5LDE0KS5qb2luKCJ8IikpLDcsMjEs
MCk7ZC5IdG1sLnVuZXNjYXBlPW4uYmluZChILFJlZ0V4cChILnNsaWNlKDAsNyku
am9pbigifCIpKSwwLDE0LDcpO3MuaW5oZXJpdHM9ZnVuY3Rpb24oYSxiLGYpe2Eu
cHJvdG90eXBlPU9iamVjdC5jcmVhdGUoKGEuc3VwZXJjbGFzcz0KYikucHJvdG90
eXBlKTthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hO09iamVjdC5pc09iamVjdChm
KSYmcy5leHRlbmQoYS5wcm90b3R5cGUsZik7cmV0dXJuIGF9O2VhPUw/ImFkZCI6
ZnVuY3Rpb24oYSxiKXtiPSIgIitiO3JldHVybiBJKGEsYisiICIpP2E6YStifTtm
YT1MPyJyZW1vdmUiOmZ1bmN0aW9uKGEsYil7Yj0iICIrYisiICI7cmV0dXJuIEko
YSxiKT9hLnJlcGxhY2UoYiwiICIpOmF9O3MucHJvdG90eXBlPXMuZm49e2NvbnN0
cnVjdG9yOnMsYWpzOlIsYXR0cjpmdW5jdGlvbihhLGIpe3ZhciBmPXRoaXNbMF0s
YyxoLGQ7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZ2b2lkIDA9PT1iKXJldHVybiBm
JiYoYz1hIGluIGZ8fCEoImdldEF0dHJpYnV0ZSJpbiBmKT9mW2FdOmYuZ2V0QXR0
cmlidXRlKGEpKSxjO2E9bChhLGIpO2M9MDtmb3IoaD10aGlzLmxlbmd0aDtjPGg7
YysrKWlmKGY9dGhpc1tjXSlmb3IoZCBpbiBhKWI9YVtkXSxkIGluIGZ8fCEoInNl
dEF0dHJpYnV0ZSJpbgpmKT9mW2RdPWI6Zi5zZXRBdHRyaWJ1dGUoZCxiKTtyZXR1
cm4gdGhpc30sY3VycmVudFN0eWxlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzWzBdKXJl
dHVybiIiO3ZhciBiLGYsYzsiZ2V0Q29tcHV0ZWRTdHlsZSJpbiBnP2I9Zy5nZXRD
b21wdXRlZFN0eWxlKHRoaXNbMF0pW2FdOihmPXRoaXNbMF0uY3VycmVudFN0eWxl
LHZvaWQgMD09PShiPWZbYV0pJiYoImZvbnQiPT1hPyhiPSIiK2ZbYSsiU3R5bGUi
XSxjPWZbYSsiVmFyaWFudCJdLGIrPWM/IiAiK2M6IiIsYz1mW2ErIldlaWdodCJd
LGIrPWM/IiAiK2M6IiIsYz1mW2ErIlNpemUiXSxiKz1jPyIgIitjOiIiLGM9Zi5s
aW5lSGVpZ2h0LGIrPWM/Ii8iK2M6IiIsYz1mW2ErIkZhbWlseSJdLGIrPWM/IiAi
K2M6IiIpOiJib3JkZXIiPT1hJiYoYj1mW2ErIldpZHRoIl0rIiAiK2ZbYSsiU3R5
bGUiXSsiICIrZlthKyJDb2xvciJdKSkpO3JldHVybiBifSxjc3M6ZnVuY3Rpb24o
YSxiKXt2YXIgZj10aGlzWzBdLGMsaCxkO2lmKCJzdHJpbmciPT0KdHlwZW9mIGEm
JnZvaWQgMD09PWIpcmV0dXJuKGY9ZiYmZi5zdHlsZSYmZi5zdHlsZVthXXx8dm9p
ZCAwKSYmQy50ZXN0KGYpJiYoZj1wYXJzZUZsb2F0KGYpKSxmO2E9bChhLGIpO2M9
MDtmb3IoaD10aGlzLmxlbmd0aDtjPGg7KytjKWlmKChmPXRoaXNbY10pJiYoZj1m
LnN0eWxlKSlmb3IoZCBpbiBhKWI9YVtkXSwiIj09PWJ8fChpc05hTihiKXx8amFb
ZF0pfHwoYis9InB4IiksZltkXT1iO3JldHVybiB0aGlzfSxzaXplOmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMubGVuZ3RofSxwdXNoOmZ1bmN0aW9uKGEsYil7aWYoYil7
dmFyIGY9cyhhKTtmLnByZXZPYmplY3Q9dGhpcztyZXR1cm4gZn1mb3IodmFyIGY9
dGhpcy5sZW5ndGg9MCxjPWEubGVuZ3RoO2Y8YzsrK2YpdGhpc1tmXT1hW2ZdLHRo
aXMubGVuZ3RoKys7cmV0dXJuIHRoaXN9LGVhY2g6ZnVuY3Rpb24oYSl7Zm9yKHZh
ciBiPTAsZj10aGlzLmxlbmd0aCxjO2I8ZjsrK2IpYS5jYWxsKGM9dGhpc1tiXSxi
LGMsdGhpcyk7cmV0dXJuIHRoaXN9LAplcTpmdW5jdGlvbihhKXtyZXR1cm4gdGhp
cy5wdXNoKHRoaXNbYV0sMSl9LGZpbHRlcjpmdW5jdGlvbihhKXthPWEuc3BsaXQo
Ii4iKTtyZXR1cm4gdGhpcy5wdXNoKGsodGhpcyxhWzBdLGFbMV0pLDEpfSxmaW5k
OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2goeSh0aGlzLGEpLDEpfSxjaGls
ZHJlbjpmdW5jdGlvbihhKXtpZih0aGlzWzBdKXt2YXIgYj10aGlzWzBdLmNoaWxk
Tm9kZXM7cmV0dXJuIHRoaXMucHVzaCh2b2lkIDA9PT1hP2I6YlthXSwxKX1yZXR1
cm4gdGhpcy5wdXNoKDAsMSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBy
ZXZPYmplY3R8fHMoKX0scGFyZW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1swXSxi
PWEmJmEucGFyZW50RWxlbWVudHx8bnVsbDtpZihhJiYhKCJwYXJlbnRFbGVtZW50
ImluIGEpJiYhYilmb3IoYj1hJiZhLnBhcmVudE5vZGU7YiYmMSE9Yi5ub2RlVHlw
ZTspYj1iLnBhcmVudE5vZGU7cmV0dXJuIHRoaXMucHVzaChiLDEpfSxodG1sOmZ1
bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT0KYT90aGlzWzBdJiZ0aGlzWzBdLmlu
bmVySFRNTDp0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1hfSl9
LHZhbDpmdW5jdGlvbihhKXtpZih2b2lkIDA9PT1hKXJldHVybiB0aGlzWzBdJiZ0
aGlzWzBdLnZhbHVlfHwiIjtmb3IodmFyIGI9dGhpcy5sZW5ndGgsZjtiLS07KWlm
KGY9dGhpc1tiXSlmLnZhbHVlPWEsZi5zZXRBdHRyaWJ1dGUoInZhbHVlIixhKTty
ZXR1cm4gdGhpc30sYXBwZW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07YiYm
Yi5hcHBlbmRDaGlsZCh1KGFyZ3VtZW50cykpO3JldHVybiB0aGlzfSxwcmVwZW5k
OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07YiYmYi5pbnNlcnRCZWZvcmUodShh
cmd1bWVudHMpLGIuZmlyc3RDaGlsZCk7cmV0dXJuIHRoaXN9LGFmdGVyOmZ1bmN0
aW9uKGEpe3ZhciBiPXRoaXNbdGhpcy5sZW5ndGgtMV07YiYmYi5wYXJlbnROb2Rl
JiZiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHUoYXJndW1lbnRzKSxiLm5leHRT
aWJsaW5nKTsKcmV0dXJuIHRoaXN9LGJlZm9yZTpmdW5jdGlvbihhKXt2YXIgYj10
aGlzWzBdO2ImJmIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLmluc2VydEJlZm9y
ZSh1KGFyZ3VtZW50cyksYik7cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigp
e3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLnBhcmVudE5vZGUmJnRo
aXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX0pfSxiaW5kOmZ1bmN0aW9u
KGEsYil7cmV0dXJuIGModGhpcywxLGEsYil9LHVuYmluZDpmdW5jdGlvbihhLGIp
e3JldHVybiBjKHRoaXMsMCxhLGIpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEpe3JldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXSgpfWNhdGNoKGIpe2Nv
bnNvbGUubG9nJiZjb25zb2xlLmxvZyh0aGlzLGEpfX0pfSxvbmU6ZnVuY3Rpb24o
YSxiKXtyZXR1cm4gdGhpcy5iaW5kKGEsZnVuY3Rpb24gVCgpe3ModGhpcykudW5i
aW5kKGEsVCk7cmV0dXJuIGIuYXBwbHkodGhpcyxhcmd1bWVudHMpfS5iaW5kKHRo
aXMpKX0sCmhhc0NsYXNzOmZ1bmN0aW9uKGEpe2E9QS5iaW5kKG51bGwsYS5yZXBs
YWNlKHgsIiAiKS5zcGxpdCh6KSk7cmV0dXJuImxlbmd0aCJpbiB0aGlzP0FycmF5
LnNvbWUodGhpcyxhKTphKHRoaXMpfSxhZGRDbGFzczpmdW5jdGlvbihhKXtyZXR1
cm4gcC5jYWxsKHRoaXMsZWEsYSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3Jl
dHVybiBwLmNhbGwodGhpcyxmYSxhKX0sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxi
KXt2YXIgZj0ibGVuZ3RoImluIHRoaXMmJiEoIm5vZGVUeXBlImluIHRoaXMpP3Ro
aXM6W3RoaXNdO3JldHVybigodm9pZCAwPT09Yj8hcy5mbi5oYXNDbGFzcy5jYWxs
KGYsYSk6Yik/cy5mbi5hZGRDbGFzczpzLmZuLnJlbW92ZUNsYXNzKS5jYWxsKGYs
YSl9LGhhc01vZDpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4hMTthPWZ1bmN0aW9u
KGEpe3JldHVybiBhLmNsYXNzTmFtZSYmdGhpcy50ZXN0KGEuY2xhc3NOYW1lKX0u
YmluZChSZWdFeHAoIihfIithLnRyaW0oKS5yZXBsYWNlKC9ccy9nLAoiIF8iKSsi
KFxcc3wkKSkiLCJnIikpO3JldHVybiJsZW5ndGgiaW4gdGhpcyYmIW0odGhpcyk/
QXJyYXkuc29tZSh0aGlzLGEpOmEodGhpcyl9LGFkZE1vZDpmdW5jdGlvbihhKXty
ZXR1cm4gcC5jYWxsKHRoaXMsZnVuY3Rpb24oYSxiKXthJiYhSShhLGIpJiYoYT1h
LnRyaW0oKSxhKz0iICIrYS5yZXBsYWNlKC8oXHN8JCkvZyxiKyIkMSIpKTtyZXR1
cm4gYX0sIl8iK2EudHJpbSgpLnJlcGxhY2UoL1xzL2csIiBfIikpfSxyZW1vdmVN
b2Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHAuY2FsbCh0aGlzLGZ1bmN0aW9uKGEsYil7
YSYmSShhLGIpJiYoYT1hLnRyaW0oKSxhPSIgIithLnJlcGxhY2UoUmVnRXhwKCIo
XFxzfF4pW1xcdy1fXSsiK2IrIig/PVxcc3wkKSIsImciKSwiIikpO3JldHVybiBh
LnRyaW0oKX0sIl8iK2EudHJpbSgpLnJlcGxhY2UoL1xzL2csIiBfIikpfSx0b2dn
bGVNb2Q6ZnVuY3Rpb24oYSxiKXt2YXIgZj0ibGVuZ3RoImluIHRoaXMmJiEoIm5v
ZGVUeXBlImluIHRoaXMpPwp0aGlzOlt0aGlzXTtyZXR1cm4oKHZvaWQgMD09PWI/
IXMuZm4uaGFzTW9kLmNhbGwoZixhKTpiKT9zLmZuLmFkZE1vZDpzLmZuLnJlbW92
ZU1vZCkuY2FsbChmLGEpfSxjbG9zZXN0OmZ1bmN0aW9uKGEsZil7dmFyIGM9dGhp
c1swXSxoO2YmJiFtKGYpJiYoZj1udWxsKTtpZihjKXthPWEuc3BsaXQoIi4iKTto
PWFbMF0/YVswXS50b1VwcGVyQ2FzZSgpOiExO2E9YVsxXT9hLnNsaWNlKDEpOiEx
O2RvIGlmKG0oYykmJiEoaCYmYy50YWdOYW1lLnRvVXBwZXJDYXNlKCkhPWh8fGEm
JiFBKGEsYykpKXJldHVybiB0aGlzLnB1c2goYywxKTt3aGlsZShjJiYoIWZ8fGYh
PWMpJiYoYz1jLnBhcmVudE5vZGUpJiZjIT09Yi5ib2R5KX1yZXR1cm4gdGhpcy5w
dXNoKHZvaWQgMCwxKX0sc2hvdzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3NzKCJk
aXNwbGF5Iik7cmV0dXJuIm5vbmUiPT1hP3RoaXMuY3NzKCJkaXNwbGF5IiwiIik6
YX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsCiJu
b25lIil9LHRvZ2dsZTpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0ibm9uZSI9
PXRoaXMuY3NzKCJkaXNwbGF5IikpO3JldHVybiB0aGlzW2E/InNob3ciOiJoaWRl
Il0oKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGY9cyhhKSxjPTAsaD10aGlzLmxl
bmd0aCxkO2ImJihmPWYuZmlsdGVyKGIpKTtmb3IoZD1mLmxlbmd0aDtjPGQ7Kytj
KXRoaXNbYytoXT1mW2NdO3RoaXMubGVuZ3RoKz1kfX07QXJyYXkuZm9yRWFjaChb
ImFkZCIsInJlbW92ZSIsImhhcyIsInRvZ2dsZSJdLGZ1bmN0aW9uIEQoYSxiLGYs
Yyl7dmFyIGg9YSsoY3x8IkNsYXNzIik7aCBpbiB0aGlzLmZuJiYodGhpc1toXT1W
LmJpbmQocy5mbltoXSkpO2N8fEQuY2FsbCh0aGlzLGEsYixmLCJNb2QiKX0scyk7
cy5nZXQ9ZnVuY3Rpb24gUyhhLGYpe1MuXyRfaGVhZHx8KFMuXyRfaGVhZD1zKCJo
ZWFkIikpO3ZhciBjPSJhanNfX2pzb25wX18iK3MuZ2lkKyssaD1iLmNyZWF0ZUVs
ZW1lbnQoInNjcmlwdCIpO2gudHlwZT0KInRleHQvamF2YXNjcmlwdCI7aC5zcmM9
YSsiJmNhbGxiYWNrPSIrYztnW2NdPWZ1bmN0aW9uKGEpe2YoYSk7Z1tjXT1udWxs
O3RyeXtkZWxldGUgZ1tjXX1jYXRjaChiKXt9c2V0VGltZW91dChzLmZuLnJlbW92
ZS5iaW5kKHMoaCkpKX07c2V0VGltZW91dChzLmZuLmFwcGVuZC5iaW5kKFMuXyRf
aGVhZCxoKSl9O3MuZ2V0Q2FyZXRQb3NpdGlvbj1mdW5jdGlvbihhLGYpe2lmKCFm
fHxhPT1iLmFjdGl2ZUVsZW1lbnQpe3ZhciBjPShhLm5vZGVOYW1lfHwiIikudG9V
cHBlckNhc2UoKSxoLGQsZyxrO2lmKCJJTlBVVCI9PWN8fCJURVhUQVJFQSI9PWMp
e2lmKCJzZWxlY3Rpb25TdGFydCJpbiBhKXJldHVybntzdGFydDorYS5zZWxlY3Rp
b25TdGFydHx8MCxlbmQ6K2Euc2VsZWN0aW9uRW5kfHwwfTtpZihiLnNlbGVjdGlv
bilyZXR1cm4oYz1iLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpKSYmYy5wYXJlbnRF
bGVtZW50KCk9PWEmJihoPWEudmFsdWUsZz1oLmxlbmd0aCxrPWgucmVwbGFjZSgv
XHJcbi9nLAoiXG4iKSxkPWEuY3JlYXRlVGV4dFJhbmdlKCksZC5tb3ZlVG9Cb29r
bWFyayhjLmdldEJvb2ttYXJrKCkpLGM9YS5jcmVhdGVUZXh0UmFuZ2UoKSxjLmNv
bGxhcHNlKCExKSwtMTxkLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGMp
P2g9ZzooaD0tZC5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLWcpLGgrPWsuc2xpY2Uo
MCxoKS5zcGxpdCgiXG4iKS5sZW5ndGgtMSwtMTxkLmNvbXBhcmVFbmRQb2ludHMo
IkVuZFRvRW5kIixjKXx8KGc9LWQubW92ZUVuZCgiY2hhcmFjdGVyIiwtZyksZys9
ay5zbGljZSgwLGcpLnNwbGl0KCJcbiIpLmxlbmd0aC0xKSkpLHtzdGFydDpoLGVu
ZDpnfX19fTtzLnNldENhcmV0UG9zaXRpb249ZnVuY3Rpb24gVChhLGIsZil7aWYo
IW0oYSkmJmEmJiJsZW5ndGgiaW4gYSlBcnJheS5mb3JFYWNoKGEsZnVuY3Rpb24o
YSl7VChhLGIsZil9KTtlbHNlIGlmKGE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQp
aWYoMT09YXJndW1lbnRzLmxlbmd0aD8oYj0wLGY9CmEudmFsdWUubGVuZ3RoKToy
PT1hcmd1bWVudHMubGVuZ3RoJiYoZj1iKSxhLnNldFNlbGVjdGlvblJhbmdlKWEu
c2V0U2VsZWN0aW9uUmFuZ2UoYixmKTtlbHNlIGlmKGEuY3JlYXRlVGV4dFJhbmdl
KXt2YXIgYz1hLmNyZWF0ZVRleHRSYW5nZSgpO2MuY29sbGFwc2UoITApO2MubW92
ZUVuZCgiY2hhcmFjdGVyIixmKTtjLm1vdmVTdGFydCgiY2hhcmFjdGVyIixiKTtj
LnNlbGVjdCgpfX07dmFyIGdhPUw/bnVsbDpmdW5jdGlvbihhLGIpe3JldHVybiBJ
KGEsIiAiK2IrIiAiKX07cy5fX3Byb2Nlc3NIYW5kbGVyPWZ1bmN0aW9uKGEpe3Jl
dHVybiJvYmplY3QiPT09dHlwZW9mIGE/YS5oYW5kbGVFdmVudDphfTt2YXIgaWE9
L1xbbmF0aXZlXHMrY29kZVxdL2kudGVzdChiLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUpP2Z1bmN0aW9uKGEsYil7cmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZShhKX06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gayhiW0JdKCIqIiksbnVsbCxhKX07
cy5zdXBwb3J0PQp7b25pbnB1dDoib25pbnB1dCJpbiBifTtzLl9yYW5kb21fc3Ry
aW5nXz1SO3Mub3duPUs7InVpImluIGR8fChkLnVpPXt9KTtkLmJyb3dzZXJ8fChk
LmJyb3dzZXI9e30pO2Y/ZC5icm93c2VyLm1zaWU9ZjooYT1nLm9wZXJhKSYmImZ1
bmN0aW9uIj09dHlwZW9mKGE9YS52ZXJzaW9uKSYmKGQuYnJvd3Nlci5vcGVyYT0r
YSgpKTtkLiQ9cztpZighZy5DU1N8fCFnLkNTUy5zdXBwb3J0cylpZihnLkNTU3x8
KGcuQ1NTPXt9KSwhZy5DU1Muc3VwcG9ydHMmJmcuc3VwcG9ydHNDU1MpZy5DU1Mu
c3VwcG9ydHM9Zy5zdXBwb3J0c0NTUy5iaW5kKGcpO2Vsc2V7dmFyIFk9e307Zy5D
U1Muc3VwcG9ydHM9ZnVuY3Rpb24oYSxiLGYsYyxoKXt2YXIgZD1jKyJcXC8iK2g7
aWYoZCBpbiBZKXJldHVybiBZW2RdO2lmKDU+YXJndW1lbnRzLmxlbmd0aCl0aHJv
dyBFcnJvcigiV1JPTkdfQVJHVU1FTlRTX0VSUiIpO3ZhciBnPShjKyIiKS5yZXBs
YWNlKHRoaXMsZiksaz1jJiZoJiZnIGluIGIuc3R5bGU7CmlmKGspaWYoYSlpZigv
XCh8XHMvLnRlc3QoaCkpdHJ5e2Iuc3R5bGVbZ109aCxrPSEhYi5zdHlsZVtnXX1j
YXRjaChsKXtrPSExfWVsc2UgYi5zdHlsZS5jc3NUZXh0PSJkaXNwbGF5Om5vbmU7
aGVpZ2h0OjA7d2lkdGg6MDt2aXNpYmlsaXR5OmhpZGRlbjtwb3NpdGlvbjphYnNv
bHV0ZTtwb3NpdGlvbjpmaXhlZDsiK2MrIjoiK2gsZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LmFwcGVuZENoaWxkKGIpLGs9Yi5jdXJyZW50U3R5bGVbZ109PWgsZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKGIpO2Vsc2UgYi5zdHls
ZS5jc3NUZXh0PWMrIjoiK2gsaz1iLnN0eWxlW2ddPT1oO2Iuc3R5bGUuY3NzVGV4
dD0iIjtyZXR1cm4gWVtkXT1rfS5iaW5kKC8oLSkoW2Etel0pL2csZiYmMTA+Zixn
LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIl8iKSxmdW5jdGlvbihhLGIsZil7cmV0
dXJuIGYudG9VcHBlckNhc2UoKX0pfWY9YT1IPW49bnVsbH0uY2FsbCh0aGlzKTsK
dm9pZCBmdW5jdGlvbih1LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKCl7dGhp
cy5fYXN5bmNoTWFya2Vycz17fX12YXIgQT0xLG09bi5fcmFuZG9tX3N0cmluZ18s
ZT0idXVpZCIrbSxyPW4ub3duLEU9Im5vcHJvcF8iK2UscT1bInRhcmdldCIsInBy
ZXZlbnREZWZhdWx0IiwiaXNEZWZhdWx0UHJldmVudGVkIiwic3RvcEltbWVkaWF0
ZVByb3BhZ2F0aW9uIl0sYz1PYmplY3QuaXNQbGFpbk9iamVjdCxsPW4uZXh0ZW5k
LHk9bi5fX3Byb2Nlc3NIYW5kbGVyO2wocC5wcm90b3R5cGUse2NvbnN0cnVjdG9y
OnAsYnVpbGRDbGFzc05hbWU6ZnVuY3Rpb24oYyxnKXtnPWd8fHRoaXMuJEVsbTt2
YXIgZCxhLGI7LTEhPShiPWMuaW5kZXhPZigiJiIpKSYmKGM9IShkPWcuc2VsZWN0
b3IpfHwiLiIhPT0oYT1kLmNoYXJBdCgwKSkmJiIjIiE9PWE/IiI6KDA8Yj9jLnN1
YnN0cigwLGIpOiIiKStkLnN1YnN0cigxKStjLnN1YnN0cihiKzEpKTtyZXR1cm4g
Y30sZmluZFN1YjpmdW5jdGlvbihjKXt2YXIgZz10aGlzLiRFbG0sCmQ7InN0cmlu
ZyI9PT10eXBlb2YgYyYmKChkPWMuY2hhckF0KDApKSYmKCIuIiE9PWQmJiIjIiE9
PWQmJiJbIiE9PWQpJiYoYz0iLiIrYyksYz10aGlzLmJ1aWxkQ2xhc3NOYW1lKGMp
KTtyZXR1cm4gbmV3IG4oYyxnKX0saGFzVHJpZ2dlcjpmdW5jdGlvbihjKXt2YXIg
Zz10aGlzLl8sZDtpZihnJiYoZD1nLl9fZXZlbnRzX18pKWZvcihjPWMudG9VcHBl
ckNhc2UoKS5zcGxpdCgiICIpO2c9Yy5wb3AoKTspaWYoZyBpbiBkKXJldHVybiEw
O3JldHVybiExfSxhZGRUcmlnZ2VyOmZ1bmN0aW9uKGMsZyl7dmFyIGQ9dGhpcy5f
LGE7aWYoZylmb3IoZHx8KGQ9dGhpcy5fPXt9KSxjPWMudG9VcHBlckNhc2UoKS5z
cGxpdCgiICIpLChhPWQuX19ldmVudHNfXyl8fChhPWQuX19ldmVudHNfXz17fSk7
ZD1jLnBvcCgpOylkPWFbZF0/YVtkXTphW2RdPXt9LChnW2VdfHwhKGdbZV09bSsg
KytBKSkmJmdbZV1pbiBkfHwoZFtnW2VdXT1nKTtyZXR1cm4gdGhpc30scmVtb3Zl
VHJpZ2dlcjpmdW5jdGlvbihjLApnKXt2YXIgZD10aGlzLl8sYTtpZighKGQmJmcm
JmdbZV0mJihhPWQuX19ldmVudHNfXykpKXJldHVybiB0aGlzO2ZvcihjPWMudG9V
cHBlckNhc2UoKS5zcGxpdCgiICIpO2Q9Yy5wb3AoKTspKGE9YVtkXSkmJmdbZV1p
biBhJiZkZWxldGUgYVtnW2VdXTtyZXR1cm4gdGhpc30sZmlyZVRyaWdnZXI6ZnVu
Y3Rpb24oayl7dmFyIGc9dGhpcyxkPWcuXyxhLGIsZixoPShmPWsmJiJvYmplY3Qi
PT10eXBlb2YgaykmJmsudHlwZXx8ayxDLHo9ITEseD0hMSx0LGU9ITAsZD0hZHx8
IShhPWQuX19ldmVudHNfXyl8fCFofHwhKGE9YVtoLnRvVXBwZXJDYXNlKCldKTso
dD10aGlzLl9uZXh0VHJpZ2dlck9wdGlvbnMpJiZoIGluIHQmJihmJiZsKGssdFto
XSksZGVsZXRlIHRbaF0pO2lmKGQpcmV0dXJuIGU7Znx8KGs9e3R5cGU6a30pO2lm
KHZvaWQgMD09PWsubmFtZXx8dm9pZCAwPT09ay5uYW1lc3BhY2UpdD1oLnNwbGl0
KCI6Iiksay5uYW1lfHwoay5uYW1lPXRbMV18fHRbMF0pLGsubmFtZXNwYWNlfHwK
KGsubmFtZXNwYWNlPXQubGVuZ3RoP3RbMF06IiIpO3Q9QXJyYXkucmVkdWNlKHEs
ZnVuY3Rpb24oYSxiKXthW2JdPWIgaW4gaz9rW2JdOkU7cmV0dXJuIGF9LHt9KTtr
LmN1cnJlbnRUYXJnZXQ9ay50YXJnZXQ9dGhpcztDPWsucHJldmVudERlZmF1bHQ7
ay5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe0MmJkMuYXBwbHkodGhpcy5jb250
ZXh0LGFyZ3VtZW50cyk7ej0hMH07ay5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rp
b24oKXtyZXR1cm4gen07ay5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rp
b24oKXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj90LnN0b3BJbW1lZGlhdGVQ
cm9wYWdhdGlvbi5hcHBseSh0aGlzLmNvbnRleHQsYXJndW1lbnRzKTp0aGlzLnN0
b3BQcm9wYWdhdGlvbiYmdGhpcy5zdG9wUHJvcGFnYXRpb24oKTt4PSEwfTtmb3Io
YiBpbiBhKWlmKHIoYSxiKSYmKGY9YVtiXSwib2JqZWN0Ij09PXR5cGVvZiBmJiYo
Zz1mKSwoZj15KGYpKSYmITE9PT0oZT0KZi5jYWxsKGcsaykpJiZrLnByZXZlbnRE
ZWZhdWx0KCkseCkpYnJlYWs7ITEhPT1lJiZrLmlzRGVmYXVsdFByZXZlbnRlZCgp
JiYoZT0hMSk7QXJyYXkucmVkdWNlKHEsZnVuY3Rpb24oYSxiKXthW2JdPT09RT9k
ZWxldGUga1tiXTprW2JdPWFbYl07cmV0dXJuIGF9LHQpO2lmKGMoZD1rLm5leHRU
cmlnZ2VyT3B0aW9ucykpZm9yKGIgaW4odD10aGlzLl9uZXh0VHJpZ2dlck9wdGlv
bnMpfHwodD10aGlzLl9uZXh0VHJpZ2dlck9wdGlvbnM9e30pLGQpcihkLGIpJiZj
KGc9ZFtiXSkmJih0W2JdfHwodFtiXT17fSksbCh0W2JdLGcpKTt0PWs9Zj1nPXg9
ej1oPWY9YT1kPW51bGw7cmV0dXJuITEhPT1lfSxfY2FsbEFmdGVyVHJpZ2dlcjpm
dW5jdGlvbihjKXtyZXR1cm4gdGhpcy5maXJlVHJpZ2dlcihjLGMudHlwZSsiOkFG
VEVSIil9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLl9fZGlzYWJsZWQ9ITB9LGVu
YWJsZTpmdW5jdGlvbigpe3RoaXMuX19kaXNhYmxlZD0hMX0sX2NhbGxUcmlnZ2Vy
RnVuY3Rpb25Bc3luYzpmdW5jdGlvbigpe3ZhciBjPQp0aGlzLmN1cnJlbnRUYXJn
ZXQ7aWYoITEhPT10aGlzLnJlc3VsdCYmKCEwPT09dGhpcy5hc3luYyYmYy5fYXN5
bmNoTWFya2VycyYmdGhpcy5fYXN5bmNoTWFya2VyPT09Yy5fYXN5bmNoTWFya2Vy
c1t0aGlzLnR5cGVdKSYmYyBpbnN0YW5jZW9mIHAmJihjLl9hc3luY2hNYXJrZXJz
W3RoaXMudHlwZV09bnVsbCx0aGlzLnR5cGUgaW4gYykpY1t0aGlzLnR5cGVdKHRo
aXMpfX0pO3UudWl8fCh1LnVpPXt9KTt1LnVpLmFqc1VJQ29tcG9uZW50PXB9LmNh
bGwobnVsbCx0aGlzLmFqcyx0aGlzLmFqcy4kKTsKdm9pZCBmdW5jdGlvbih1LG4s
cCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEEoZSxyKXtpZighKHRoaXMgaW5zdGFu
Y2VvZiBBKSlyZXR1cm4gbmV3IEEoZSxyKTtlPXAoZSk7aWYoMTxlLnNpemUoKSly
ZXR1cm4gQXJyYXkucmVkdWNlKGUsZnVuY3Rpb24oZSxxLGMpe2MmJmUucHVzaChu
ZXcgQShxLHIpKTtyZXR1cm4gZX0sW3RoaXNdKTt0aGlzLm9wdHM9cj1wLmV4dGVu
ZCh7Y25MaW5rOiJqcy1saW5rIixjbk1lbnU6ImpzLW1lbnUiLGNuU2VjdGlvbjoi
anMtc2VjdGlvbiIsY25FeHBhbmQ6ImpzLWV4cGFuZCIsY25Ib3ZlcjoianMtaG92
ZXIiLGNuSW5kZXg6MCxvbnNlbGVjdDpwLm5vb3AsdGltZW91dDoxNTAwLGhpZGVC
eUNsaWNrOiEwLGF1dG9Qb3M6ITF9LHIpO3RoaXMuJEVsbT1lO3RoaXMuJExpbms9
dGhpcy5maW5kU3ViKHIuY25MaW5rKS5iaW5kKCJjbGljayBtb3VzZW91dCBtb3Vz
ZW92ZXIgYmx1ciBrZXl1cCIsdGhpcykuYXR0cigidW5zZWxlY3RhYmxlIiwib2Zm
IikuY3NzKHt1c2VyU2VsZWN0OiJub25lIiwKTW96VXNlclNlbGVjdDoibm9uZSIs
V2ViS2l0VXNlclNlbGVjdDoibm9uZSIsT1VzZXJTZWxlY3Q6Im5vbmUiLE1TVXNl
clNlbGVjdDoibm9uZSJ9KTshMSE9PXIudGFiSW5kZXgmJnRoaXMuJExpbmsuYXR0
cigidGFiSW5kZXgiLG4udWkudGFiSW5kZXgrKyk7dGhpcy4kTGluay5maW5kKCIq
IikuYXR0cih7dW5zZWxlY3RhYmxlOiJvZmYifSk7dGhpcy4kTWVudT10aGlzLmZp
bmRTdWIoci5jbk1lbnUpLmJpbmQoImNsaWNrIG1vdXNlb3V0IG1vdXNlb3ZlciBt
b3VzZWRvd24gbW91c2V1cCIsdGhpcyk7dGhpcy4kTWVudS5fX1NlY3Rpb25zPXRo
aXMuZmluZFN1YihyLmNuU2VjdGlvbik7MDw9ci5jbkluZGV4JiZ0aGlzLl9vblNl
bGVjdCh7fSx0aGlzLiRNZW51Ll9fU2VjdGlvbnNbci5jbkluZGV4XSk7QXJyYXku
Zm9yRWFjaChbImNuU2VjdGlvbkhvdmVyIiwiY25TZWN0aW9uRXhwYW5kIl0sZnVu
Y3Rpb24oZSl7dmFyIHE9dGhpcy5vcHRzW2VdO3EmJih0aGlzLm9wdHNbZV09dGhp
cy5idWlsZENsYXNzTmFtZShxKSl9LAp0aGlzKX12YXIgbT1wKHUpO3AuaW5oZXJp
dHMoQSxuLnVpLmFqc1VJQ29tcG9uZW50LHtoYW5kbGVFdmVudDpmdW5jdGlvbihl
LHIpe2lmKCF0aGlzLl9fZGlzYWJsZWQpe3ZhciBtPXRoaXMub3B0cyxxPWUuY3Vy
cmVudFRhcmdldCxjPXRoaXMuJE1lbnVbMF0sbD10aGlzLiRMaW5rWzBdLHk7Y2xl
YXJUaW1lb3V0KHRoaXMuX3RpZCk7cj1yfHxlLnR5cGU7c3dpdGNoKHIpe2Nhc2Ug
ImtleXVwIjpxPT09bCYmKG09ZS5rZXlDb2RlLDQwPT1tfHwzOD09bXx8MTM9PW0p
JiYodGhpcy5leHBhbmRlZCgpPzEzPT1tPyh0aGlzLl9vblNlbGVjdChlKSx0aGlz
Ll9leHBhbmQoITEpKTp0aGlzLl9tb3ZlKDQwPT1tPzE6LTEpOjEzPT1tJiZ0aGlz
LmhhbmRsZUV2ZW50KGUsImtleXVwLmNsaWNrIikpO2JyZWFrO2Nhc2UgImJsdXIi
OnRoaXMuX19kb3dufHwocT1lLmV4cGxpY2l0T3JpZ2luYWxUYXJnZXR8fHUuYWN0
aXZlRWxlbWVudCwxIT1xLm5vZGVUeXBlJiYocT1xLnBhcmVudE5vZGUpLHRoaXMu
X2hpdFRlc3QocSl8fAp0aGlzLl9leHBhbmQoITEpKTticmVhaztjYXNlICJjbGlj
ayI6aWYocSE9PWRvY3VtZW50KXtpZih2b2lkIDAhPWUuZGV0YWlsJiYwPT1lLmRl
dGFpbCl7ZS5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrfWlmKDE8ZS53aGljaCl7eT0h
MDticmVha319Y2FzZSAia2V5dXAuY2xpY2siOnE9PT1sP2UucHJldmVudERlZmF1
bHQoKTpxIT09ZG9jdW1lbnQmJnRoaXMuX29uU2VsZWN0KGUpO2lmKG0uaGlkZUJ5
Q2xpY2t8fCF0aGlzLl9oaXRUZXN0KGUpKXRoaXMuX2V4cGFuZCghdGhpcy5leHBh
bmRlZCgpKSx5PSEwO2JyZWFrO2Nhc2UgIm1vdXNldXAiOmNhc2UgIm1vdXNlZG93
biI6dGhpcy5fX2Rvd249Im1vdXNlZG93biI9PT1yO3k9ITA7YnJlYWs7Y2FzZSAi
bW91c2VvdmVyIjpxPWUudGFyZ2V0O2RvIGlmKHAuZm4uaGFzQ2xhc3MuY2FsbChx
LCJqcy1zZWN0aW9uIikpe3RoaXMuX21vdmUocSk7YnJlYWt9d2hpbGUocSE9PWMm
JnEhPT1sJiYocT1xLnBhcmVudE5vZGUpKTt5PSEwO2JyZWFrOwpjYXNlICJtb3Vz
ZW91dCI6MDxtLnRpbWVvdXQmJih0aGlzLl90aWQ9c2V0VGltZW91dCh0aGlzLl9l
eHBhbmQuYmluZCh0aGlzLCExKSxtLnRpbWVvdXQpKX15fHxlLnN0b3BQcm9wYWdh
dGlvbigpfX0sX29uU2VsZWN0OmZ1bmN0aW9uKGUscCl7KHB8fChwPXRoaXMuJE1l
bnUuZmluZCgiLiIrdGhpcy5vcHRzLmNuSG92ZXIpWzBdKSkmJnRoaXMub3B0cy5v
bnNlbGVjdC5jYWxsKHRoaXMsZSxwKX0sX21vdmU6ZnVuY3Rpb24oZSl7dmFyIG09
dGhpcy4kTWVudS5fX1NlY3Rpb25zLG49dGhpcy5vcHRzLmNuSG92ZXIscT0tMTtt
JiZtLmxlbmd0aCYmKG0uZWFjaChmdW5jdGlvbihjLGwpe2w9cChsKTtsLmhhc0Ns
YXNzKG4pJiYocT1jLGwucmVtb3ZlQ2xhc3MobikpfSksZSYmKGUudGFnTmFtZT9w
KGUpLmFkZENsYXNzKG4pOigtMSE9cSYmKHErPWUpLG1bcV18fChxPX5lPzA6bS5s
ZW5ndGgtMSksbS5lcShxKS5hZGRDbGFzcyhuKSkpKX0sX2hpdFRlc3Q6ZnVuY3Rp
b24oZSl7cmV0dXJuISFwKGUudGFyZ2V0fHwKZSkuY2xvc2VzdCgiLiIrdGhpcy5v
cHRzLmNuTWVudSkuc2l6ZSgpfSxfZXhwYW5kOmZ1bmN0aW9uKGUpe3RoaXMuJEVs
bS50b2dnbGVDbGFzcyh0aGlzLm9wdHMuY25FeHBhbmQsZSk7dmFyIHA9dGhpcy4k
TWVudSxuLHEsYztwLnRvZ2dsZShlKTt0aGlzLm9wdHMuYXV0b1BvcyYmKHRoaXMu
JExpbmtbMF0mJnBbMF0pJiYoZSYmKG49dGhpcy4kTGlua1swXS5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKSxxPXBbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1u
LmhlaWdodHx8bi5ib3R0b20tbi50b3ApLHAuY3NzKHttYXJnaW5MZWZ0OmU/bi5s
ZWZ0LXEubGVmdCsicHgiOjAsbWFyZ2luVG9wOmU/bi50b3ArYy1xLnRvcCsicHgi
OjB9KSk7bS51bmJpbmQoImNsaWNrIix0aGlzKTtlJiYodGhpcy5fbW92ZSgpLHNl
dFRpbWVvdXQoZnVuY3Rpb24oKXttLmJpbmQoImNsaWNrIix0aGlzKX0uYmluZCh0
aGlzKSwwKSl9LGV4cGFuZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJEVsbS5o
YXNDbGFzcyh0aGlzLm9wdHMuY25FeHBhbmQpfX0pOwpuLnVpLnRhYkluZGV4PW4u
dWkudGFiSW5kZXh8fDE7bi51aS5kcm9wZG93bj1BfS5jYWxsKG51bGwsdGhpcy5k
b2N1bWVudCx0aGlzLmFqcyx0aGlzLmFqcy4kKTsKdm9pZCBmdW5jdGlvbih1LG4s
cCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEEoYyl7ZG9jdW1lbnQuYWN0aXZlRWxl
bWVudCE9dGhpcyYmKHRoaXMuc2V0QXR0cmlidXRlKCJkYXRhLXByZXZlbnQtZXZl
bnQtZm9jdXMiLDEpLHRoaXMuZm9jdXMoKSk7dm9pZCAwIT1jJiZuLiQuc2V0Q2Fy
ZXRQb3NpdGlvbih0aGlzLHRoaXMudmFsdWUubGVuZ3RoKX1mdW5jdGlvbiBtKGMs
bCxlKXt2b2lkIDA9PT1FJiYoRT1DU1Muc3VwcG9ydHMoImNsaXAiLCJhdXRvIik/
ImF1dG8iOiJyZWN0KGF1dG8sYXV0byxhdXRvLGF1dG8pIik7aWYoIWwuaXRlbXMp
cmV0dXJuIG51bGw7aWYoISh0aGlzIGluc3RhbmNlb2YgbSkpcmV0dXJuIG5ldyBt
KGMsbCk7Yz1wKGMpO2lmKDE8Yy5zaXplKCkpcmV0dXJuIEFycmF5LnJlZHVjZShj
LGZ1bmN0aW9uKGMsZCxhKXthJiZjLnB1c2gobmV3IG0oZCxsKSk7cmV0dXJuIGN9
LFt0aGlzXSk7dGhpcy5vcHRzPWw9cC5leHRlbmQoe2NuRm9ybToianMtZm9ybSIs
ZGVsZXRlTmFtZTohMCxvcGVyYW5kQ2xhc3NXcmFwcGVyTWVudToidy1wb3J0YWwt
bWVudV9fc2VhcmNoX19vcGVyYW5kc19fbWVudSIsCm9wZXJhbmRDbGFzc1dyYXBw
ZXJJbnB1dDoidy1wb3J0YWwtbWVudV9fc2VhcmNoX19vcGVyYW5kc19faW5wdXQi
fSxsKTt0aGlzLiRFbG09YztjLmJpbmQoInNjcm9sbCIsdGhpcyk7Yy5maW5kKCIu
dy1wb3J0YWwtbWVudV9fc2VhcmNoX19vcGVyYW5kc19fd2lkdGhfb3V0ZXIiKS5i
aW5kKCJzY3JvbGwiLHRoaXMpO2MuZmluZCgiLnctcG9ydGFsLW1lbnVfX3NlYXJj
aF9fb3BlcmFuZHNfX3dpZHRoX2lubmVyIikuYmluZCgic2Nyb2xsIix0aGlzKTt0
aGlzLiRJbnB1dD10aGlzLiRvcmlnaW5hbF9JbnB1dD1lO3RoaXMuJElucHV0LmJp
bmQocix0aGlzKTt0aGlzLm9wZXJhbmRzS2V5c1N0cmluZz0iIjt0aGlzLm9wZXJh
bmRzS2V5cz17fTt0aGlzLm9wZXJhbmRzTmFtZXM9e307dGhpcy5vcGVyYW5kcz17
fTt0aGlzLm9wZXJhbmRzVGFiSW5kZXg9e307dmFyIGs9IXRoaXMub3B0cy5vcmRl
cjtrJiYoaz10aGlzLm9wdHMub3JkZXI9e30pO0FycmF5LmZvckVhY2goT2JqZWN0
LmtleXModGhpcy5vcHRzLml0ZW1zKSwKZnVuY3Rpb24oYyxkKXt2YXIgYT10aGlz
Lm9wdHMuaXRlbXNbY107Yz1jLnRvVXBwZXJDYXNlKCk7dGhpcy5vcGVyYW5kc0tl
eXNbY109YTt0aGlzLm9wZXJhbmRzTmFtZXNbYV09Yzt0aGlzLm9wZXJhbmRzW2Fd
PXZvaWQgMDt0aGlzLm9wZXJhbmRzVGFiSW5kZXhbYV09bi51aS50YWJJbmRleCsr
O3RoaXMub3BlcmFuZHNLZXlzU3RyaW5nKz0ifCIrYysifCI7ayYmKGtbY109ZCl9
LHRoaXMpO3RoaXMub3BlcmFuZHNLZXlzU3RyaW5nPXRoaXMub3BlcmFuZHNLZXlz
U3RyaW5nLnRvVXBwZXJDYXNlKCk7dGhpcy5vcGVyYW5kc0tleXNPcmRlcj17fTt0
aGlzLm9wZXJhbmRzTmFtZXNPcmRlcj17fTtBcnJheS5mb3JFYWNoKE9iamVjdC5r
ZXlzKHRoaXMub3B0cy5vcmRlciksZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5vcHRz
Lm9yZGVyW2NdO2M9Yy50b1VwcGVyQ2FzZSgpO3RoaXMub3BlcmFuZHNOYW1lc09y
ZGVyW3RoaXMub3BlcmFuZHNLZXlzW2NdXT10aGlzLm9wZXJhbmRzS2V5c09yZGVy
W2NdPQpkfSx0aGlzKX12YXIgZT1uLmJyb3dzZXIubXNpZSxyPXAuc3VwcG9ydC5v
bmlucHV0JiYoIWV8fDk8ZSk/ImlucHV0IjoiaW5wdXQga2V5cHJlc3Mga2V5dXAi
LEUscT1wLm93bjtwLmluaGVyaXRzKG0sbi51aS5hanNVSUNvbXBvbmVudCx7aGFu
ZGxlRXZlbnQ6ZnVuY3Rpb24oYyl7aWYoIXRoaXMuX19kaXNhYmxlZCl7dmFyIGw9
Yy50eXBlO2lmKHIuY29udGFpbnMobCkpcmV0dXJuIGw9Yy5rZXlDb2RlLDg9PWx8
fDQ2PT1sfHwzNz09bHx8Mzk9PWw/dm9pZCAwOnRoaXMuX29wZXJhbmRzSW5wdXQo
Yyk7aWYoImNsaWNrIj09bCYmIkxBQkVMIj09KGMuY3VycmVudFRhcmdldC5ub2Rl
TmFtZSsiIikudG9VcHBlckNhc2UoKSlyZXR1cm4gdGhpcy5fb3BlcmFuZExhYmVs
Q2xpY2soYyk7aWYoInNjcm9sbCI9PWwpcmV0dXJuIHRoaXMuaG9yaXNvbnRhbFNj
cm9sbChjKSx0aGlzLl9jaGVja0xhYmVsc1Bvc2l0aW9uKGMpLCExO3ZhciBlLGs9
cChjLnRhcmdldCksZyxkLGE9ImRhdGEtcHJldi1vcGVyYW5kIjsKaWYoImtleWRv
d24iPT1sKXtnPWsuYXR0cigiZGF0YS1vcGVyYW5kIik7ZD10aGlzLm9wZXJhbmRz
W2ddO2w9Yy5rZXlDb2RlO2lmKCFkfHwhbClyZXR1cm47ZT1wLmdldENhcmV0UG9z
aXRpb24oYy50YXJnZXQsITApO2lmKDM3PT1sJiYwPT09ZS5lbmR8fDM5PT1sJiZl
LnN0YXJ0PT09a1swXS52YWx1ZS5sZW5ndGgmJihhPSJkYXRhLW5leHQtb3BlcmFu
ZCIpKXtpZihrPWsuYXR0cihhKSxrPXRoaXMub3BlcmFuZHNba10pdGhpcy5fY3Vy
cmVudE9wZXJhbmRPYmplY3Q9ZCxjLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZWxl
Y3RPcGVyYW5kKGssImRhdGEtbmV4dC1vcGVyYW5kIiE9YT8tMTowKSxkPWt9ZWxz
ZSA4PT1sJiYwPT09ZS5zdGFydCYmMD09PWUuZW5kPyh0aGlzLl9jdXJyZW50T3Bl
cmFuZE9iamVjdD1kLGMucHJldmVudERlZmF1bHQoKSx0aGlzLmRlYWN0aXZhdGVP
cGVyYW5kKGcpLGQ9bnVsbCk6OCE9bCYmNDYhPWx8fCghMSE9PWQuc3RhYmxlfHwh
KDA9PT1lLnN0YXJ0JiYKZS5lbmQ9PT1jLnRhcmdldC52YWx1ZS5sZW5ndGh8fDg9
PWwmJjE9PT1lLnN0YXJ0JiYxPT09ZS5lbmQpKXx8KGMudGFyZ2V0LnZhbHVlPSIi
LHRoaXMuX2N1cnJlbnRPcGVyYW5kT2JqZWN0PWQsYy5wcmV2ZW50RGVmYXVsdCgp
LHRoaXMuZGVhY3RpdmF0ZU9wZXJhbmQoZyksZD1udWxsKX1lbHNlImtleXVwIj09
bCYmKGc9ay5hdHRyKCJkYXRhLW9wZXJhbmQiKSxkPXRoaXMub3BlcmFuZHNbZ10p
O2QmJnRoaXMuX2NoZWNrT3BlcmFuZENhcmV0UG9zaXRpb24oZCl9fSxzZXRBY3Rp
dmVJbnB1dDpmdW5jdGlvbihjLGwpe3RoaXMuJElucHV0IT09YyYmdGhpcy5maXJl
VHJpZ2dlcih7dHlwZToib3BlcmFuZHM6YWN0aXZlSW5wdXRDaGFuZ2UiLG9sZElu
cHV0OnRoaXMuJElucHV0LG5ld0lucHV0OmMsaXNPcGVyYW5kSW5wdXQ6ISFjLmF0
dHIoImRhdGEtb3BlcmFuZCIpLGlzTmV3T3BlcmFuZDpsfHwhMX0pJiYodGhpcy4k
SW5wdXQ9Yyl9LGdldEN1cnJlbnRPcGVyYW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuX2N1cnJlbnRPcGVyYW5kT2JqZWN0fSwKY3JlYXRlT3BlcmFuZHM6ZnVuY3Rp
b24oYyxsLHksayxnKXtrPXZvaWQgMD09az8xOms7Yz1jLnRvVXBwZXJDYXNlKCk7
dmFyIGQ9dGhpcy5vcHRzLGE9dGhpcy4kRWxtLGI9ZC5vcGVyYW5kQ2xhc3NXcmFw
cGVyTWVudSxmPWQub3BlcmFuZENsYXNzV3JhcHBlcklucHV0LGgsQyx6LHg9dGhp
cy5vcGVyYW5kc0tleXNbY10sdD10aGlzLm9wZXJhbmRzTmFtZXNPcmRlclt4XSxt
PXRoaXMuJElucHV0WzBdLmdldEF0dHJpYnV0ZSgiZGF0YS1vcGVyYW5kIik7aWYo
eCl7ej10aGlzLiRJbnB1dDsoZD10aGlzLm9wZXJhbmRzW3hdKT8oZj1kLiRJbnB1
dCxhLmNzcygiZGlzcGxheSIsIiIpKTooQz1hLmZpbmQoIi4iK2YrIl8iK3gpLGY9
Qy5maW5kKCIucG9ydGFsLW1lbnVfX3NlYXJjaF9fb3BlcmFuZHNfX2lucHV0X19m
aWVsZCIpLmF0dHIoe3RhYkluZGV4OnRoaXMub3BlcmFuZHNUYWJJbmRleFt4XX0p
LGEuY3NzKCJkaXNwbGF5IiwiIiksYT1hLmZpbmQoIi4iK2IrIl8iK3gpLmNzcygi
ZGlzcGxheSIsCiIiKSxkPXRoaXMub3BlcmFuZHNbeF09bmV3IG4udWkuZHJvcGRv
d24oYS5maW5kKCIucG9ydGFsLW1lbnVfX3NlYXJjaF9fb3BlcmFuZHNfX21lbnUi
KSx7Y25MaW5rOiJwb3J0YWwtbWVudV9fc2VhcmNoX19vcGVyYW5kc19fbWVudV9f
YnV0dG9uIixjbk1lbnU6InBvcnRhbC1tZW51X19zZWFyY2hfX29wZXJhbmRzX19t
ZW51X19kcm9wZG93biIsY25FeHBhbmQ6InBvcnRhbC1tZW51X19idXR0b25zX19p
dGVtX29wZW4iLGNuSG92ZXI6InBvcnRhbC1tZW51X19idXR0b25zX19pdGVtX2hv
dmVyIixjbkluZGV4OnQsdGltZW91dDowLHRhYkluZGV4OiExLGF1dG9Qb3M6ITAs
b25zZWxlY3Q6ZnVuY3Rpb24oYSxiLGMpeyhiPWMmJmMuZ2V0QXR0cmlidXRlKCJk
YXRhLW9wZXJhbmQtbmFtZSIpKSYmYiE9PWEmJihjPXRoaXMub3BlcmFuZHNbYV0s
KChhPXRoaXMub3BlcmFuZHNbYl0pJiYhYS5pc0FjdGl2ZXx8IWEmJmIgaW4gdGhp
cy5vcGVyYW5kcykmJnRoaXMuY3JlYXRlT3BlcmFuZHModGhpcy5vcGVyYW5kc05h
bWVzW2JdLAoiIix2b2lkIDAsMCksdGhpcy5kZWFjdGl2YXRlT3BlcmFuZChjLm9w
ZXJhbmROYW1lLHZvaWQgMCxhKSl9LmJpbmQodGhpcyx4KX0pLHAuYmluZCgibGFi
ZWxzImluIGZbMF0/ZlswXS5sYWJlbHNbMF06Zi5jbG9zZXN0KCJsYWJlbCIpWzBd
LCJjbGljayIsdGhpcyksZi5iaW5kKCJmb2N1cyIsdGhpcy5vcGVyYW5kc0ZvY3Vz
LmJpbmQodGhpcyxmLGQpKS5iaW5kKHIsdGhpcy51cGRhdGVPcGVyYW5kV2lkdGgu
YmluZCh0aGlzLGQsbnVsbCkpLGI9cisoci5jb250YWlucygia2V5ZG93biIpPyIi
OiIga2V5ZG93biIpLGIrPWIuY29udGFpbnMoImtleXVwIik/IiI6IiBrZXl1cCIs
Zi5iaW5kKGIsdGhpcyksZC5vcGVyYW5kTmFtZT14LGQub3BlcmFuZEtleT1jLGQu
SW5wdXRXcmFwcGVyPUMsZC5NZW51V3JhcHBlcj1hLGQuJElucHV0PWYsZC4kSW5w
dXQuYXR0cigiZGF0YS1vcGVyYW5kIix4KSxkLkVsZW1lbnRGb3JIZWlnaHQ9cCgi
PHNwYW4+PC9zcGFuPiIpLmNzcyh7cG9zaXRpb246ImZpeGVkIiwKdG9wOiItMTAw
MDBweCIsbGVmdDoiLTEwMDAwcHgiLHZpc2liaWxpdHk6ImhpZGRlbiIsZm9udDpk
LiRJbnB1dC5jdXJyZW50U3R5bGUoImZvbnQiKSxwYWRkaW5nOmQuJElucHV0LmN1
cnJlbnRTdHlsZSgicGFkZGluZyIpLGJvcmRlcjpkLiRJbnB1dC5jdXJyZW50U3R5
bGUoImJvcmRlciIpfSkscCh1LmJvZHkpLmFwcGVuZChkLkVsZW1lbnRGb3JIZWln
aHQpKTtmWzBdLm5hbWU9Zi5hdHRyKCJkYXRhLWlucHV0LW5hbWUiKTtkLmlzQWN0
aXZlPSEwO2Quc3RhYmxlPSEwIT09Zzt6LmF0dHIoImRhdGEtb3BlcmFuZCIpP3Zv
aWQgMCE9eSYmKHpbMF0udmFsdWU9eSk6KHRoaXMub3B0cy5kZWxldGVOYW1lJiYo
dGhpcy4kb3JpZ2luYWxfSW5wdXQuX19uYW1lPXRoaXMuJG9yaWdpbmFsX0lucHV0
WzBdLm5hbWUpLHRoaXMuJG9yaWdpbmFsX0lucHV0Ll9fdmFsdWU9dGhpcy4kb3Jp
Z2luYWxfSW5wdXRbMF0udmFsdWUsdGhpcy5vcHRzLmRlbGV0ZU5hbWUmJih0aGlz
LiRvcmlnaW5hbF9JbnB1dFswXS5uYW1lPQoiIiksdGhpcy4kb3JpZ2luYWxfSW5w
dXRbMF0udmFsdWU9IiIsdGhpcy4kb3JpZ2luYWxfSW5wdXQuYXR0cigicmVhZG9u
bHkiLCJ0cnVlIiksdGhpcy4kb3JpZ2luYWxfSW5wdXQuY3NzKCJ2aXNpYmlsaXR5
IiwiaGlkZGVuIiksdGhpcy4kb3JpZ2luYWxfSW5wdXQuYXR0cigiZGF0YS1hbGxv
dy1lbXB0eS12YWx1ZSIsInRydWUiKSk7aWYoeiE9ZC4kSW5wdXQpe2lmKGM9elsw
XS5nZXRBdHRyaWJ1dGUoImRhdGEtbmV4dC1vcGVyYW5kIikpaD10aGlzLm9wZXJh
bmRzW2NdLGguJElucHV0LmF0dHIoImRhdGEtcHJldi1vcGVyYW5kIix4KTt6IT10
aGlzLiRvcmlnaW5hbF9JbnB1dCYmei5hdHRyKCJkYXRhLW5leHQtb3BlcmFuZCIs
eCk7bSYmKGg9dGhpcy5vcGVyYW5kc1ttXSkhPWQmJihmLmF0dHIoImRhdGEtcHJl
di1vcGVyYW5kIixtKSxoLklucHV0V3JhcHBlci5hZnRlcihkLk1lbnVXcmFwcGVy
WzBdKSxkLk1lbnVXcmFwcGVyLmFmdGVyKGQuSW5wdXRXcmFwcGVyWzBdKSxjP2Yu
YXR0cigiZGF0YS1uZXh0LW9wZXJhbmQiLApjKTpmWzBdLnJlbW92ZUF0dHJpYnV0
ZSgiZGF0YS1uZXh0LW9wZXJhbmQiKSl9ZC5NZW51V3JhcHBlci5jc3MoImRpc3Bs
YXkiLCIiKTtkLklucHV0V3JhcHBlci5jc3MoImRpc3BsYXkiLCIiKTs4PmUmJihi
PWQuTWVudVdyYXBwZXJbMF0uY2xhc3NOYW1lLGQuTWVudVdyYXBwZXJbMF0uY2xh
c3NOYW1lPSIiLGQuTWVudVdyYXBwZXJbMF0uY2xhc3NOYW1lPWIpO3ZvaWQgMCE9
bCYmKGZbMF0udmFsdWU9bCk7KGg9dGhpcy5vcGVyYW5kc1t6WzBdLmdldEF0dHJp
YnV0ZSgiZGF0YS1vcGVyYW5kIildKSYmdGhpcy51cGRhdGVPcGVyYW5kV2lkdGgo
aCk7dGhpcy51cGRhdGVPcGVyYW5kV2lkdGgoZCk7dGhpcy5fY2hlY2tMYWJlbHNQ
b3NpdGlvbigpO3RoaXMuc2V0QWN0aXZlSW5wdXQoZiwhMCk7MDxrJiYoMj09ayYm
Zi5hdHRyKCJkYXRhLXByZXZlbnQtZXZlbnQtZm9jdXMiLDEpLGZbMF0uZm9jdXMo
KSxlfHxuLmJyb3dzZXIub3BlcmE/dm9pZCAwIT1sJiZuLiQuc2V0Q2FyZXRQb3Np
dGlvbihmWzBdLApsLmxlbmd0aCk6dGhpcy5fX2FzeW5jRm9jdXNIYW5kbGVyPXAu
Y2FsbEFzeW5jKEEsZlswXSxbbF0sdGhpcy5fX2FzeW5jRm9jdXNIYW5kbGVyKSk7
cmV0dXJuIHRoaXMuX2N1cnJlbnRPcGVyYW5kT2JqZWN0PWR9fSxkZWFjdGl2YXRl
T3BlcmFuZDpmdW5jdGlvbihjLGwsZSl7bD12b2lkIDA9PWw/MTpsO3ZhciBrLGcs
ZCxhLGI7aWYoYz10aGlzLm9wZXJhbmRzW2NdKXRoaXMuX3Jlc2V0TGFiZWxzUG9z
aXRpb24oYyksdGhpcy5fY3VycmVudE9wZXJhbmRPYmplY3Q9bnVsbCxiPWMuJElu
cHV0PT10aGlzLiRJbnB1dCxhPWMuJElucHV0LnZhbCgpLGc9Yy4kSW5wdXRbMF0u
Z2V0QXR0cmlidXRlKCJkYXRhLW5leHQtb3BlcmFuZCIpLGQ9Yy4kSW5wdXRbMF0u
Z2V0QXR0cmlidXRlKCJkYXRhLXByZXYtb3BlcmFuZCIpLHRoaXMub3B0cy5kZWxl
dGVOYW1lJiYoYy4kSW5wdXRbMF0ubmFtZT0iIiksYy4kSW5wdXRbMF0ucmVtb3Zl
QXR0cmlidXRlKCJkYXRhLW5leHQtb3BlcmFuZCIpLGMuJElucHV0WzBdLnJlbW92
ZUF0dHJpYnV0ZSgiZGF0YS1wcmV2LW9wZXJhbmQiKSwKYy4kSW5wdXRbMF0ubmFt
ZT0iIixjLiRJbnB1dC52YWwoIiIpLGd8fGR8fGU/KGcmJihrPXRoaXMub3BlcmFu
ZHNbZ10pJiYoZD9rLiRJbnB1dFswXS5zZXRBdHRyaWJ1dGUoImRhdGEtcHJldi1v
cGVyYW5kIixkKTprLiRJbnB1dFswXS5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtcHJl
di1vcGVyYW5kIikpLGQmJihrPXRoaXMub3BlcmFuZHNbZF0pPyhnP2suJElucHV0
WzBdLnNldEF0dHJpYnV0ZSgiZGF0YS1uZXh0LW9wZXJhbmQiLGcpOmsuJElucHV0
WzBdLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1uZXh0LW9wZXJhbmQiKSxiJiYoZXx8
KGU9aykpKTpiJiYoZXx8KGU9dGhpcy5vcGVyYW5kc1tnXSkpLGUmJnRoaXMuc2V0
QWN0aXZlSW5wdXQoZS4kSW5wdXQpKToodGhpcy4kRWxtLmNzcygiZGlzcGxheSIs
Im5vbmUiKSxiJiZ0aGlzLnNldEFjdGl2ZUlucHV0KHRoaXMuJG9yaWdpbmFsX0lu
cHV0KSx0aGlzLm9wdHMuZGVsZXRlTmFtZSYmKHRoaXMuJElucHV0WzBdLm5hbWU9
dGhpcy4kb3JpZ2luYWxfSW5wdXQuX19uYW1lKSwKdGhpcy4kSW5wdXRbMF0ucmVt
b3ZlQXR0cmlidXRlKCJyZWFkb25seSIpLHRoaXMuJElucHV0LmNzcygidmlzaWJp
bGl0eSIsIiIpLHRoaXMuJG9yaWdpbmFsX0lucHV0WzBdLnJlbW92ZUF0dHJpYnV0
ZSgiZGF0YS1hbGxvdy1lbXB0eS12YWx1ZSIpLHRoaXMuU3VnZ2VzdCYmdGhpcy5T
dWdnZXN0LmFwcGx5VG9JbnB1dCh0aGlzLiRJbnB1dCkpLHRoaXMuJElucHV0WzBd
LnZhbHVlPWEmJnRoaXMuJElucHV0WzBdLnZhbHVlP3RoaXMuJElucHV0WzBdLnZh
bHVlKyIgIithOnRoaXMuJElucHV0WzBdLnZhbHVlfHxhfHwiIiwwPGwmJigyPT1s
JiZ0aGlzLiRJbnB1dC5hdHRyKCJkYXRhLXByZXZlbnQtZXZlbnQtZm9jdXMiLDEp
LHRoaXMuX19hc3luY0ZvY3VzSGFuZGxlcj1wLmNhbGxBc3luYyh0aGlzLiRJbnB1
dFswXS5mb2N1cyx0aGlzLiRJbnB1dFswXSxudWxsLHRoaXMuX19hc3luY0ZvY3Vz
SGFuZGxlcikscC5zZXRDYXJldFBvc2l0aW9uKHRoaXMuJElucHV0WzBdLHRoaXMu
JElucHV0WzBdLnZhbHVlLmxlbmd0aCkpLApjLk1lbnVXcmFwcGVyLmNzcygiZGlz
cGxheSIsIm5vbmUiKSxjLklucHV0V3JhcHBlci5jc3Moe2Rpc3BsYXk6Im5vbmUi
LHdpZHRoOiIiLCJtaW4td2lkdGgiOiIifSksZSYmKGUuaXNBY3RpdmV8fHRoaXMu
Y3JlYXRlT3BlcmFuZHMoZS5vcGVyYW5kS2V5KSx0aGlzLnVwZGF0ZU9wZXJhbmRX
aWR0aChlKSx0aGlzLnNlbGVjdE9wZXJhbmQoZSxlLm9wZXJhbmROYW1lPT1kPy0x
OjAsMD09bCkpLGMuc3RhYmxlPWMuaXNBY3RpdmU9ITF9LGdldE9wZXJhbmRCeUtl
eU9yTmFtZTpmdW5jdGlvbihjKXt2YXIgbD1jO3JldHVybiJvYmplY3QiPT10eXBl
b2YgbCYmbHx8KChsPXRoaXMub3BlcmFuZHNbY10pfHwobD10aGlzLm9wZXJhbmRz
W3RoaXMub3BlcmFuZHNLZXlzW2NdXSkpJiZsfSxnZXRPcGVyYW5kS2V5QnlLZXlP
ck5hbWU6ZnVuY3Rpb24oYyl7cmV0dXJuIGMgaW4gdGhpcy5vcGVyYW5kc05hbWVz
P3RoaXMub3BlcmFuZHNOYW1lc1tjXTpjIGluIHRoaXMub3BlcmFuZHNLZXlzP2M6
Cm51bGx9LGdldE9wZXJhbmRWYWx1ZTpmdW5jdGlvbihjKXtyZXR1cm4oYz10aGlz
LmdldE9wZXJhbmRCeUtleU9yTmFtZShjKSkmJmMuJElucHV0LnZhbCgpfSxzZXRP
cGVyYW5kVmFsdWU6ZnVuY3Rpb24oYyxsLGUsayl7bnVsbD09bCYmKGw9IiIpO3Zh
ciBnPXRoaXMuZ2V0T3BlcmFuZEJ5S2V5T3JOYW1lKGMpO2lmKGcpaWYoIiI9PT1s
KXtpZighZSYmZy5pc0FjdGl2ZSlyZXR1cm4gZy4kSW5wdXQudmFsKGwpLHRoaXMu
ZGVhY3RpdmF0ZU9wZXJhbmQoZy5vcGVyYW5kTmFtZSwwKSxsfWVsc2Uibm9uZSIh
PWcuTWVudVdyYXBwZXIuY3NzKCJkaXNwbGF5Iil8fGt8fChnPXRoaXMuY3JlYXRl
T3BlcmFuZHMoZy5vcGVyYW5kS2V5LHZvaWQgMCx2b2lkIDAsMCkpO2Vsc2UgaWYo
IWcpe2lmKCEoYz10aGlzLmdldE9wZXJhbmRLZXlCeUtleU9yTmFtZShjKSkpcmV0
dXJuO2lmKCIiIT09bHx8ZSlnPXRoaXMuY3JlYXRlT3BlcmFuZHMoYyxsLHZvaWQg
MCwwKX1nJiYoZy4kSW5wdXQudmFsKGwpLAp0aGlzLnVwZGF0ZU9wZXJhbmRXaWR0
aChnKSk7cmV0dXJuIGx9LG9wZXJhbmRzRm9jdXM6ZnVuY3Rpb24oYyxsKXt0aGlz
Ll9jdXJyZW50T3BlcmFuZE9iamVjdD1sO3RoaXMuc2V0QWN0aXZlSW5wdXQoYyl9
LHVwZGF0ZU9wZXJhbmRXaWR0aDpmdW5jdGlvbihjLGwpe3ZhciBlPSJpbnB1dCI9
PXI/MTA6MjAsayxnLGQsYTtpZihjfHwoYz10aGlzLl9jdXJyZW50T3BlcmFuZE9i
amVjdCkpZz1jLiRJbnB1dCxsPWx8fGdbMF0udmFsdWUsZD1nWzBdLmdldEF0dHJp
YnV0ZSgiZGF0YS1uZXh0LW9wZXJhbmQiKSxjLkVsZW1lbnRGb3JIZWlnaHQuaHRt
bChuLkh0bWwuZXNjYXBlKGwpKSxrPWMuRWxlbWVudEZvckhlaWdodFswXS5jbGll
bnRXaWR0aCwyMj5rJiYoaz0yMiksays9ZSxkPyhlPSJ3aWR0aCIsZD0ibWluV2lk
dGgiKTooZT0ibWluV2lkdGgiLGQ9IndpZHRoIiksYy5JbnB1dFdyYXBwZXIuY3Nz
KGUpIT1rJiYoays9InB4IixjLklucHV0V3JhcHBlci5jc3MoZSxrKSxnLmNzcyhl
LAprKSxhPSEwKSxjLklucHV0V3JhcHBlci5jc3MoZCkmJihjLklucHV0V3JhcHBl
ci5jc3MoZCwiIiksZy5jc3MoZCwiIiksYT0hMCksYSYmdGhpcy5fY2hlY2tMYWJl
bHNQb3NpdGlvbigpfSxzZWxlY3RPcGVyYW5kOmZ1bmN0aW9uKGMsbCxlKXtlfHwo
Yy4kSW5wdXRbMF0uZm9jdXMoKSx0aGlzLlN1Z2dlc3QmJnRoaXMuU3VnZ2VzdC5h
cHBseVRvSW5wdXQoYy4kSW5wdXQpKTt2b2lkIDAhPT1sJiYoMD5sJiYobD1jLiRJ
bnB1dC52YWwoKS5sZW5ndGgpLHAuc2V0Q2FyZXRQb3NpdGlvbihjLiRJbnB1dFsw
XSxsKSk7dGhpcy5fY2hlY2tMYWJlbHNQb3NpdGlvbigpO3RoaXMuX2N1cnJlbnRP
cGVyYW5kT2JqZWN0PWN9LF9vcGVyYW5kTGFiZWxDbGljazpmdW5jdGlvbihjKXt0
aGlzLl9fZGlzYWJsZWR8fCh0aGlzLiRJbnB1dFswXS5mb2N1cygpLGMucHJldmVu
dERlZmF1bHQoKSl9LF9vcGVyYW5kc0lucHV0OmZ1bmN0aW9uKCl7aWYoIXRoaXMu
X19kaXNhYmxlZCl7dmFyIGM9dGhpcy4kSW5wdXRbMF0udmFsdWUsCmwsZT1jLmxh
c3RJbmRleE9mKCI6IiksayxnLGQ9MCxhLGIsZixoLEMsejtoPXt0eXBlOiJvcGVy
YW5kczpmaW5kIixpbnB1dDp0aGlzLiRJbnB1dFswXSxpbnB1dFZhbHVlOmMsbmV3
T3BlcmFuZDpudWxsLGxhc3RQcmVmaXhJbmRleDplLGN1cnJlbnRPcGVyYW5kOnRo
aXMuJElucHV0LmF0dHIoImRhdGEtb3BlcmFuZCIpfHxudWxsfTtpZighMSE9PXRo
aXMuZmlyZVRyaWdnZXIoaCkpe2M9aC5pbnB1dFZhbHVlO2s9ZT1oLmxhc3RQcmVm
aXhJbmRleDtpZihhPWgubmV3T3BlcmFuZCliPWEsYT10aGlzLm9wZXJhbmRzTmFt
ZXNbYV07aC5jdXJyZW50T3BlcmFuZCYmdGhpcy4kSW5wdXQub2xkVmFsdWUhPT1j
JiYoZj0hMCx0aGlzLiRJbnB1dC5vbGRWYWx1ZT1jKTtpZighYSYmMDw9ayl7bD1j
LnRvVXBwZXJDYXNlKCk7Zm9yKHo9dGhpcy5vcGVyYW5kc0tleXNTdHJpbmc7fihn
PXouaW5kZXhPZihsLnN1YnN0cigtLWUsay1lKSxkKSk7KWlmKDEyND09PXouY2hh
ckNvZGVBdChnKyhrLQplKSkpaWYoYT1sLnN1YnN0cihlLGstZSksMTI0PT09ei5j
aGFyQ29kZUF0KGcrKGstZSktYS5sZW5ndGgtMSkpezE+ZXx8L1xzLy50ZXN0KGwu
Y2hhckF0KGUtMSkpfHwoYT0iIik7YnJlYWt9ZWxzZSBhPSIiO2Vsc2UgZD1nO2gu
bmV3T3BlcmFuZD1hfWlmKGEmJihifHwoYj10aGlzLm9wZXJhbmRzS2V5c1thXSks
YiYmKGIgaW4gdGhpcy5vcGVyYW5kcyYmKCF0aGlzLm9wZXJhbmRzW2JdfHwhdGhp
cy5vcGVyYW5kc1tiXS5pc0FjdGl2ZSkpJiYoaC50eXBlPSJvcGVyYW5kczphY3Rp
dmF0ZSIsaC5sZWZ0UGFydD1jLnN1YnN0cmluZygwLGUpLnRyaW0oKSxoLnJpZ2h0
UGFydD1jLnN1YnN0cmluZyhrKzEpLnRyaW0oKSwhMSE9PXRoaXMuZmlyZVRyaWdn
ZXIoaCkpKSlyZXR1cm4iIj09aC5sZWZ0UGFydCtoLnJpZ2h0UGFydCYmdGhpcy5f
Y3VycmVudE9wZXJhbmRPYmplY3QmJihDPXRoaXMuX2N1cnJlbnRPcGVyYW5kT2Jq
ZWN0Lm9wZXJhbmROYW1lKSxjPXRoaXMuY3JlYXRlT3BlcmFuZHMoYSwKaC5yaWdo
dFBhcnQsaC5sZWZ0UGFydCksQyYmdGhpcy5kZWFjdGl2YXRlT3BlcmFuZChDKSxj
O2YmJnRoaXMuX2NoZWNrTGFiZWxzUG9zaXRpb24oKX19fSxob3Jpc29udGFsU2Ny
b2xsOmZ1bmN0aW9uKGMpe2lmKCF0aGlzLl9fZGlzYWJsZWQpe3ZhciBlPWMudGFy
Z2V0O3RoaXMuX19zY3JvbGxDb250YWluZXJ8fCh0aGlzLl9fc2Nyb2xsQ29udGFp
bmVyPWUpO2Uuc2Nyb2xsVG9wPTA7Yy5wcmV2ZW50RGVmYXVsdCgpO2Muc3RvcFBy
b3BhZ2F0aW9uKCk7cmV0dXJuITF9fSxfcmVzZXRMYWJlbHNQb3NpdGlvbjpmdW5j
dGlvbihjKXtjJiYoYy4kRWxtLmNzcyh7d2lkdGg6IiIsaGVpZ2h0OiIifSksYy4k
TGluay5jc3Moe3Bvc2l0aW9uOiIiLHRvcDoiYXV0byIsbGVmdDoiYXV0byIsY2xp
cDpFfSkpfSxfY2hlY2tMYWJlbHNQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlz
Ll9fZGlzYWJsZWQpe3ZhciBjLGUscCxrPXRoaXMub3BlcmFuZHMsZz10aGlzLiRF
bG1bMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCmQsYSxiLGYsaCxDPUUsejtm
b3IoZSBpbiBrKWlmKHEoayxlKSYmKHA9a1tlXSkmJnAuaXNBY3RpdmUmJnAuJElu
cHV0KXtpZihjPXAuJElucHV0WzBdKXtoPXAuJExpbmtbMF07ej1jO3ZhciB4PSEw
O2Y9dm9pZCAwO2Y9cC4kRWxtWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Yu
bGVmdD5nLmxlZnQmJih4PSExKTt4PyhkfHwoZD16LmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpKSxkLnJpZ2h0PD1nLmxlZnQ/ZD0hMTooYnx8KGI9aC5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKSksej1iLndpZHRofHxiLnJpZ2h0LWIubGVmdCxmPWQucmln
aHQtMzAtKGcubGVmdCt6KSxkPXg9MD5mPy1mOjApKTpkPSExO2lmKCExIT09KGg9
ZCkpYnJlYWs7ZWxzZSBkPWI9bnVsbH1jPXZvaWQgMH10aGlzLl9fcHJldlBvc2l0
aW9uZWRfb3BlcmFuZE9iamVjdCYmdm9pZCAwIT09YyYmdGhpcy5fX3ByZXZQb3Np
dGlvbmVkX29wZXJhbmRPYmplY3QuJElucHV0WzBdIT1jJiZ0aGlzLl9yZXNldExh
YmVsc1Bvc2l0aW9uKHRoaXMuX19wcmV2UG9zaXRpb25lZF9vcGVyYW5kT2JqZWN0
KTsKYyYmKGE9cC4kRWxtKSYmKCFofHwwPmg/aD0wOih6PWIud2lkdGh8fGIucmln
aHQtYi5sZWZ0LEM9Yi5oZWlnaHR8fGIuYm90dG9tLWIudG9wLEM9WyIwcHgiLHor
InB4IixDKyJweCIsaCsicHgiXSxDPSJyZWN0KCIrQy5qb2luKCIsIikrIikiKSxl
PXAuJExpbmssYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhLmNzcyh7d2lkdGg6
ZVswXS5jbGllbnRXaWR0aCxoZWlnaHQ6ZVswXS5jbGllbnRIZWlnaHR9KSxlLmNz
cyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAtaCxjbGlwOkN9KSx0
aGlzLl9fcHJldlBvc2l0aW9uZWRfb3BlcmFuZE9iamVjdD1wKX19LF9jaGVja09w
ZXJhbmRDYXJldFBvc2l0aW9uOmZ1bmN0aW9uKGMpe2lmKGMmJnRoaXMuX19zY3Jv
bGxDb250YWluZXIpe3ZhciBlPXRoaXMuX19zY3JvbGxDb250YWluZXIsbT1jLiRJ
bnB1dFswXSxrPW0udmFsdWU7aWYoayl7dmFyIGc9bS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKSxkPWMuJExpbmtbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Cmcu
bGVmdD49ZC5yaWdodHx8KG09cC5nZXRDYXJldFBvc2l0aW9uKG0pLGs9ay5zdWJz
dHIoMCxtLmVuZCksYy5FbGVtZW50Rm9ySGVpZ2h0Lmh0bWwobi5IdG1sLmVzY2Fw
ZShrKSksYz1jLkVsZW1lbnRGb3JIZWlnaHRbMF0uY2xpZW50V2lkdGgrZy5sZWZ0
LShrPzEwOjApLGM8ZC5yaWdodCYmKGc9ZC53aWR0aHx8ZC5yaWdodC1kLmxlZnQs
ZD1jLShkLmxlZnQrZyksMD5kJiYoZS5zY3JvbGxMZWZ0Kz1kKSkpfX19fSk7bi51
aS50YWJJbmRleD1uLnVpLnRhYkluZGV4fHwxO24udWkub3BlcmFuZHM9bX0uY2Fs
bChudWxsLHRoaXMuZG9jdW1lbnQsdGhpcy5hanMsdGhpcy5hanMuJCk7CnZvaWQg
ZnVuY3Rpb24odSxuLHApeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBBKG0sZSl7aWYo
ISh0aGlzIGluc3RhbmNlb2YgQSkpcmV0dXJuIG5ldyBBKG0sZSk7bT1wKG0pO2lm
KDE8bS5zaXplKCkpcmV0dXJuIEFycmF5LnJlZHVjZShtLGZ1bmN0aW9uKHAsYyxs
KXtsJiZwLnB1c2gobmV3IEEoYyxlKSk7cmV0dXJuIHB9LFt0aGlzXSk7dGhpcy5v
cHRzPWU9cC5leHRlbmQoe2NuRm9ybToianMtZm9ybSIsY25JbnB1dDoianMtaW5w
dXQiLGNuQmx1cjoianMtYmx1ciIsY25QbGFjZWhvbGRlcjoianMtcGxhY2Vob2xk
ZXIiLGNuU2VjdGlvbjoianMtc2VjdGlvbiIsY25TZWN0aW9uVHh0OiJqcy1zZWN0
aW9uLXRleHQiLGNuU2VjdGlvbkxpbms6ImpzLXNlY3Rpb24tbGluayIsY25TZWN0
aW9uTWVudToianMtc2VjdGlvbi1tZW51IixjblNlY3Rpb25Ib3ZlcjoianMtc2Vj
dGlvbi1ob3ZlciIsY25TZWN0aW9uRXhwYW5kOiJqcy1zZWN0aW9uLWV4cGFuZCIs
Y25TZWN0aW9uU2VsZWN0ZWQ6ImpzLXNlY3Rpb24tc2VsZWN0ZWQiLApwYWRkaW5n
UmlnaHQ6MzUsc2VhcmNoSW5wdXRSZXNpemU6ITAsdXNlT3BlcmFuZHM6ITEsYXV0
b1RhYkluZGV4OiEwfSxlKTt0aGlzLiRFbG09bTt0aGlzLiRGb3JtPXRoaXMuZmlu
ZFN1YihlLmNuRm9ybSkuYmluZCgic3VibWl0Iix0aGlzKTt0aGlzLiRQbGFjZWhv
bGRlcj10aGlzLmZpbmRTdWIoZS5jblBsYWNlaG9sZGVyKTt0aGlzLiRJbnB1dD10
aGlzLmZpbmRTdWIoZS5jbklucHV0KS5iaW5kKCJmb2N1cyBibHVyIix0aGlzKTtl
LmF1dG9UYWJJbmRleCYmdGhpcy4kSW5wdXQuYXR0cih7dGFiSW5kZXg6bi51aS50
YWJJbmRleCsrfSk7dGhpcy4kU2VjdGlvbj10aGlzLmZpbmRTdWIoZS5jblNlY3Rp
b25UeHQpO3ZhciByPXRoaXMuZmluZFN1YihlLmNuU2VjdGlvbkxpbmspLEU9ZS5u
ZXdTdWJFbGVtZW50c0xvZ2ljP3I6dGhpcy4kRWxtO3Iuc2l6ZSgpJiYodGhpcy5T
ZWN0aW9ucz1uZXcgbi51aS5kcm9wZG93bihFLHtjbkxpbms6cixjbk1lbnU6ZS5j
blNlY3Rpb25NZW51LGNuSG92ZXI6ZS5jblNlY3Rpb25Ib3ZlciwKY25FeHBhbmQ6
ZS5jblNlY3Rpb25FeHBhbmQsY25JbmRleDplLmNuU2VjdGlvbkluZGV4LG9uc2Vs
ZWN0OnRoaXMuX3NlY3Rpb24uYmluZCh0aGlzKX0pKTttLmZpbmQoImlucHV0Iiku
ZWFjaChmdW5jdGlvbigpeyJzdWJtaXQiPT10aGlzLnR5cGUmJih0aGlzLnRhYklu
ZGV4PW4udWkudGFiSW5kZXgrKyl9KTtlLnN1Z2dlc3QmJih0aGlzLlN1Z2dlc3Q9
bi51aS5zdWdnZXN0KG0sZS5zdWdnZXN0KSk7ZS5vcGVyYW5kcyYmKCh0aGlzLiRP
cGVyYW5kcz1uZXcgbi51aS5vcGVyYW5kcyh0aGlzLiRFbG0uZmluZCgiLnctcG9y
dGFsLW1lbnVfX3NlYXJjaF9fb3BlcmFuZHMiKSxlLm9wZXJhbmRzLHRoaXMuJElu
cHV0KSkuYWRkVHJpZ2dlcigib3BlcmFuZHM6YWN0aXZlSW5wdXRDaGFuZ2UiLGZ1
bmN0aW9uKGUpe3RoaXMuJElucHV0PWUubmV3SW5wdXQ7dGhpcy5TdWdnZXN0JiZ0
aGlzLlN1Z2dlc3QuYXBwbHlUb0lucHV0KHRoaXMuJElucHV0LGUuaXNOZXdPcGVy
YW5kKTt0aGlzLmlzUGxhY2Vob2xkZXI9CiFlLmlzT3BlcmFuZElucHV0O3RoaXMu
X3BsYWNlaG9sZGVyQ2hlY2soKX0uYmluZCh0aGlzKSksdGhpcy5TdWdnZXN0JiZ0
aGlzLlN1Z2dlc3QuYWRkVHJpZ2dlcigic3VnZ2VzdHM6bWFyayIsZnVuY3Rpb24o
ZSl7aWYoZS51cGRhdGVJbnB1dFZhbHVlKXt2YXIgYz1lLm5ld1N1Z2dlc3ROb2Rl
LGw9ZS5vbGRTdWdnZXN0Tm9kZSxwPWUubmV3U3VnZ2VzdCxjPWMmJmMuZ2V0QXR0
cmlidXRlKCJkYXRhLXNlYXJjaC1uYW1lIiksayxnPXRoaXMuZ2V0Q3VycmVudE9w
ZXJhbmQoKTtnJiZnLnN0YWJsZXx8KGwmJmMhPShrPWwuZ2V0QXR0cmlidXRlKCJk
YXRhLXNlYXJjaC1uYW1lIikpJiZrJiZ0aGlzLmRlYWN0aXZhdGVPcGVyYW5kKGss
ITApLGMmJih0aGlzLmNyZWF0ZU9wZXJhbmRzKHRoaXMuZ2V0T3BlcmFuZEtleUJ5
S2V5T3JOYW1lKGMpLCIiLCIiLDIsITApLGc9dGhpcy5nZXRDdXJyZW50T3BlcmFu
ZCgpLGcuX19vbmJsdWV8fChnLl9fb25ibHVlPWZ1bmN0aW9uKCl7Zy5zdGFibGU9
CiEwfSxnLiRJbnB1dC5iaW5kKCJibHVyIixnLl9fb25ibHVlKSkpKTt0aGlzLl9j
aGVja0xhYmVsc1Bvc2l0aW9uKCk7dGhpcy51cGRhdGVPcGVyYW5kV2lkdGgodm9p
ZCAwLGUudXBkYXRlSW5wdXRWYWx1ZT9wOnZvaWQgMCl9fS5iaW5kKHRoaXMuJE9w
ZXJhbmRzKSkuYWRkVHJpZ2dlcigic3VnZ2VzdHM6c2VsZWN0IixmdW5jdGlvbihl
KXt2YXIgYz10aGlzLmdldEN1cnJlbnRPcGVyYW5kKCk7YyYmYy5zdGFibGV8fChj
LnN0YWJsZT0hMCk7dGhpcy5fY2hlY2tMYWJlbHNQb3NpdGlvbigpO3RoaXMudXBk
YXRlT3BlcmFuZFdpZHRoKHZvaWQgMCxlLnVwZGF0ZUlucHV0VmFsdWU/bmV3U3Vn
Z2VzdDp2b2lkIDApfS5iaW5kKHRoaXMuJE9wZXJhbmRzKSkpO3RoaXMuX3BsYWNl
aG9sZGVyQ2hlY2s9dGhpcy5fcGxhY2Vob2xkZXJDaGVjay5iaW5kKHRoaXMpO3Nl
dFRpbWVvdXQodGhpcy5fcGxhY2Vob2xkZXJDaGVjayk7cCh1KS5iaW5kKCJET01D
b250ZW50TG9hZGVkIix0aGlzLl9wbGFjZWhvbGRlckNoZWNrKTsKcCh3aW5kb3cp
LmJpbmQoImxvYWQiLHRoaXMuX3BsYWNlaG9sZGVyQ2hlY2spO3RoaXMuaXNQbGFj
ZWhvbGRlcj0hMDt0aGlzLl9zZWN0aW9uKHt9KTt0aGlzLmlzUmVhZHk9ITA7QXJy
YXkuZm9yRWFjaChbImNuQmx1ciIsImNuU2VjdGlvbiJdLGZ1bmN0aW9uKGUpe3Zh
ciBjPXRoaXMub3B0c1tlXTtjJiYodGhpcy5vcHRzW2VdPXRoaXMuYnVpbGRDbGFz
c05hbWUoYykpfSx0aGlzKX1wLmluaGVyaXRzKEEsbi51aS5hanNVSUNvbXBvbmVu
dCx7aGFuZGxlRXZlbnQ6ZnVuY3Rpb24ocCxlKXt2YXIgbj10aGlzLmlzRW1wdHko
KSx1O3N3aXRjaChlfHxwLnR5cGUpe2Nhc2UgInN1Ym1pdCI6biYmKHRoaXMuJElu
cHV0LnRyaWdnZXIoImZvY3VzIikscC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztj
YXNlICJibHVyIjp1PW47ZGVmYXVsdDp0aGlzLiRFbG0udG9nZ2xlQ2xhc3ModGhp
cy5vcHRzLmNuQmx1ciwhKCF1fHwhdGhpcy5pc1BsYWNlaG9sZGVyKSksdSYmdGhp
cy52YWwoIiIpfX0sCl9wbGFjZWhvbGRlckNoZWNrOmZ1bmN0aW9uKG0pe209bSYm
bS50eXBlOyJET01Db250ZW50TG9hZGVkIj09PW0/KHAodSkudW5iaW5kKCJET01D
b250ZW50TG9hZGVkIix0aGlzLl9wbGFjZWhvbGRlckNoZWNrKSxzZXRUaW1lb3V0
KHRoaXMuX3BsYWNlaG9sZGVyQ2hlY2ssMjApKToibG9hZCI9PT1tPyhwKHdpbmRv
dykudW5iaW5kKCJsb2FkIix0aGlzLl9wbGFjZWhvbGRlckNoZWNrKSxzZXRUaW1l
b3V0KHRoaXMuX3BsYWNlaG9sZGVyQ2hlY2ssMjApKToidW5rbm93biIhPXR5cGVv
ZiB1LmFjdGl2ZUVsZW1lbnQmJnRoaXMuJElucHV0WzBdPT09dS5hY3RpdmVFbGVt
ZW50fHx0aGlzLmhhbmRsZUV2ZW50KHt0eXBlOiJibHVyIn0pfSxfc2VjdGlvbjpm
dW5jdGlvbihtLGUpe3ZhciBuPXRoaXMub3B0cyx1PWV8fG0udGFyZ2V0LHE9bi5j
blNlY3Rpb25TZWxlY3RlZCxjPXAodSkuY2xvc2VzdCgiLiIrbi5jblNlY3Rpb24p
LG49dGhpcy5maW5kU3ViKG4uY25TZWN0aW9uKTt1JiYobi5maWx0ZXIoIi4iKwpx
KS5yZW1vdmVDbGFzcyhxKSxjLmFkZENsYXNzKHEpKTsoYz1uLmZpbHRlcigiLiIr
cSkpWzBdJiYodGhpcy4kRm9ybS5hdHRyKHthY3Rpb246Yy5hdHRyKCJkYXRhLWFj
dGlvbiIpLHRhcmdldDpjLmF0dHIoImRhdGEtdGFyZ2V0Iil8fCJfc2VsZiJ9KSx0
aGlzLiRJbnB1dC5hdHRyKCJuYW1lIixjLmF0dHIoImRhdGEtaW5wdXQtbmFtZSIp
KSx0aGlzLiRTZWN0aW9uLmh0bWwoYy5odG1sKCkpLHRoaXMuU3VnZ2VzdCYmdGhp
cy5TdWdnZXN0LnNldCgiYWpheFVybCIsYy5hdHRyKCJkYXRhLXN1Z2dlc3QtdXJs
IiksIXRoaXMuaXNSZWFkeSkpO20mJm0ucHJldmVudERlZmF1bHQmJigiY2xpY2si
IT1tLnR5cGUmJjEzIT1tLmtleUNvZGV8fHRoaXMuJElucHV0LnRyaWdnZXIoImZv
Y3VzIiksbS5wcmV2ZW50RGVmYXVsdCgpKX0saXNFbXB0eTpmdW5jdGlvbigpe3Jl
dHVybiIiPT10aGlzLnZhbCgpfSx2YWw6ZnVuY3Rpb24obSl7dmFyIGU7cmV0dXJu
IHZvaWQgMCE9PW0/KGU9dGhpcy5fX3ZhbCE9Cm0sdGhpcy4kSW5wdXQudmFsKG0p
LHRoaXMuX192YWw9bSxlJiZ0aGlzLl9wbGFjZWhvbGRlckNoZWNrKCksdGhpcyk6
cC50cmltKHRoaXMuJElucHV0LnZhbCgpKX0sZ2V0U3VnZ2VzdDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLlN1Z2dlc3R9LHNldFBsYWNlaG9sZGVyOmZ1bmN0aW9uKHAp
e3RoaXMuJFBsYWNlaG9sZGVyLmh0bWwocCl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0
aGlzLiRPcGVyYW5kcyYmdGhpcy4kT3BlcmFuZHMuZGlzYWJsZSgpO3RoaXMuU3Vn
Z2VzdCYmdGhpcy5TdWdnZXN0LmRpc2FibGUoKTt0aGlzLl9wbGFjZWhvbGRlckNo
ZWNrKCl9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuJE9wZXJhbmRzJiZ0aGlzLiRP
cGVyYW5kcy5lbmFibGUoKTt0aGlzLlN1Z2dlc3QmJnRoaXMuU3VnZ2VzdC5lbmFi
bGUoKTt0aGlzLl9wbGFjZWhvbGRlckNoZWNrKCl9fSk7bi51aS50YWJJbmRleD1u
LnVpLnRhYkluZGV4fHwxO24udWkuc2VhcmNoPUF9LmNhbGwobnVsbCxkb2N1bWVu
dCwKdGhpcy5hanMsdGhpcy5hanMuJCk7CnZvaWQgZnVuY3Rpb24odSxuLHApeyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiBBKGEpe3JldHVybiBTdHJpbmcoYXx8IiIpLnJl
cGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIil9ZnVuY3Rpb24g
bSgpe31mdW5jdGlvbiBlKGEsYil7Yi5kYXRhPWEuY2FsbCh0aGlzLGIuZGF0YSxi
LmZpbmRWYWx1ZSxiKX1mdW5jdGlvbiByKGEsYixjKXt2YXIgaD1jLmZpbmRMYXN0
V29yZDtyZXR1cm4gYy5zZWFyY2hMYXN0P2E9ImZ1bmN0aW9uIj09PXR5cGVvZiBo
JiYhaC50ZXN0JiZoLmNhbGw/aC5jYWxsKHRoaXMsYix0aGlzKTpiLnJlcGxhY2Uo
aCwiIik6YX1mdW5jdGlvbiBFKGEsYixjKXtpZighYy5zZWFyY2hMYXN0KXJldHVy
biBiO2M9dGhpcy5fX3ByZXZTdWdnZXN0O2I9cC50cmltKGIucmVwbGFjZShSZWdF
eHAoQShjJiZjLnZhbHx8IiIpKyIkIiksIiIpK3RoaXMuX192YWwpLnJlcGxhY2Uo
L1xTKyQvLCIiKSsiIisoYy52YWw9YSk7IiIhPWImJihiKz0iIik7cmV0dXJuIGJ9
ZnVuY3Rpb24gcShhLApiKXtpZighKHRoaXMgaW5zdGFuY2VvZiBxKSlyZXR1cm4g
bmV3IHEoYSxiKTtxLnN1cGVyY2xhc3MuYXBwbHkodGhpcyk7YT1wKGEsdm9pZCAw
KTsxPGEuc2l6ZSgpJiYodGhpcy5fX290aGVycz1BcnJheS5yZWR1Y2UoYSxmdW5j
dGlvbihhLGMsZil7ZiYmYS5wdXNoKG5ldyBxKGMsYikpO3JldHVybiBhfSxbdGhp
c10pKTt0aGlzLl9fcHJldlN1Z2dlc3Q9e307dGhpcy5fX2V4cGFuZGVkU3RhdGU9
ITE7dmFyIGM9Yi5zdWdnZXN0U2VwYXJhdG9yLGg9Yi5tdWx0aVN1Z2dlc3RzLGQ9
Yi5zdWdnZXN0RXNjYXBlU3RhcnQsZz1iLnN1Z2dlc3RFc2NhcGVFbmQ7bnVsbCE9
YyYmKGM9Yi5zdWdnZXN0U2VwYXJhdG9yPVJlZ0V4cChjIGluc3RhbmNlb2YgUmVn
RXhwP2Muc291cmNlOmMrIiIsKGMuaWdub3JlQ2FzZT8iaWciOiJnIikrKGMubXVs
dGlsaW5lPyJtIjoiIikpKTt2b2lkIDA9PT1oJiZiLnNlYXJjaExhc3QmJihiLmdl
dFN1Z2dlc3Q9cixiLnNldFN1Z2dlc3Q9RSk7ZCYmZz8oZCBpbnN0YW5jZW9mClJl
Z0V4cHx8KGIuc3VnZ2VzdEVzY2FwZVN0YXJ0PVJlZ0V4cCgiKD86W15cXFxcXXxe
KSIrZCkpLGcgaW5zdGFuY2VvZiBSZWdFeHB8fChiLnN1Z2dlc3RFc2NhcGVFbmQ9
UmVnRXhwKCIoPzpbXlxcXFxdfF4pIitnKSkpOmIuc3VnZ2VzdEVzY2FwZVN0YXJ0
PWIuc3VnZ2VzdEVzY2FwZUVuZD1udWxsO2IuZ2V0RGF0YSYmdGhpcy5hZGRUcmln
Z2VyKCJzdWdnZXN0czpnZXREYXRhIixlLmJpbmQodGhpcyxiLmdldERhdGEpKTti
LmFmdGVyR2V0RGF0YSYmdGhpcy5hZGRUcmlnZ2VyKCJzdWdnZXN0czpnZXREYXRh
OmFmdGVyIixiLmFmdGVyR2V0RGF0YSk7Yi5tdWx0aVN1Z2dlc3RzJiYhYi5zZXRT
dWdnZXN0JiYoYi5zZXRTdWdnZXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ9KTt0
aGlzLm9wdHM9Yj1wLmV4dGVuZChuZXcgbSxiKTt0aGlzLl9jYWNoZT17fTt0aGlz
LiRFbG09YTt0aGlzLiRJbnB1dD1udWxsO3RoaXMuYXBwbHlUb0lucHV0KHRoaXMu
ZmluZFN1YihiLmNuSW5wdXQpKTsKdGhpcy4kU3VnZ2VzdD10aGlzLmZpbmRTdWIo
Yi5jblN1Z2dlc3QpLmJpbmQoImNsaWNrIG1vdXNlZG93biIsZnVuY3Rpb24oYSl7
aWYodGhpcy5fZG93bj0ibW91c2Vkb3duIj09YS50eXBlKXRoaXMuX19ibHVyZWRD
YXJldD1wLmdldENhcmV0UG9zaXRpb24odGhpcy4kSW5wdXRbMF0pO3RoaXMuX2Rl
bGF5ZWRIaWRlU3RhcnQoKX0uYmluZCh0aGlzKSk7dGhpcy4kSW50ZXJuZXRDb250
PXRoaXMuZmluZFN1YihiLmNuSW50ZXJuZXRDb250KS5iaW5kKCJjbGljayIsdGhp
cy5oaWRlLmJpbmQodGhpcykpO3RoaXMuJEludGVybmV0PXRoaXMuZmluZFN1Yihi
LmNuSW50ZXJuZXQpO3RoaXMuJExpc3Q9dGhpcy5maW5kU3ViKGIuY25MaXN0KS5i
aW5kKCJjbGljayIsdGhpcy5fc2VsZWN0QnlDbGljay5iaW5kKHRoaXMpKS5iaW5k
KCJzY3JvbGwiLHRoaXMuX29uU2Nyb2xsLmJpbmQodGhpcykpLmJpbmQoIm1vdXNl
d2hlZWwgRE9NTW91c2VTY3JvbGwiLHRoaXMuX29uTW91c2VXaGVlbCk7CmIubWFy
a0J5TW91c2VPdmVyJiZ0aGlzLiRMaXN0LmJpbmQoIm1vdXNlb3ZlciIsdGhpcy5f
c3VnZ2VzdE5vZGVNb3VzZW92ZXIudGhyb3R0bGUoMTAwLHRoaXMpKTtiLmZldGNo
aW5nJiYodGhpcy5fZmV0Y2hPblNjcm9sbD10aGlzLl9mZXRjaE9uU2Nyb2xsLnRo
cm90dGxlKDI1MCx0aGlzKSx0aGlzLiRMaXN0LmJpbmQoInNjcm9sbCIsZnVuY3Rp
b24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO2Euc3RvcFByb3BhZ2F0aW9uKCk7dGhp
cy5fZmV0Y2hPblNjcm9sbCgpfS5iaW5kKHRoaXMpKSk7Yi5leHBpcmUmJih0aGlz
Ll9fcHJldlJlcXVlc3RUaW1lPStuZXcgRGF0ZSk7cCh3aW5kb3cpLmJpbmQoImhh
c2hjaGFuZ2UgcG9wc3RhdGUiLHRoaXMpO0FycmF5LmZvckVhY2goWyJjbkl0ZW0i
LCJjbkl0ZW1UaWNrIiwiY25TZWxlY3RlZCIsImNkR3JvdXBIZWFkZXIiLCJjZFN1
Z2dlc3RIaW50Il0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5vcHRzW2FdO2ImJih0
aGlzLm9wdHNbYV09dGhpcy5idWlsZENsYXNzTmFtZShiKSl9LAp0aGlzKTt0aGlz
Ll90aW1lb3V0SGFuZGxlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RpbWVvdXRG
dW5jdGlvbixiPXRoaXMuX3RpbWVvdXRBcmd1bWVudHM7dGhpcy5fdGltZW91dEZ1
bmN0aW9uPXRoaXMuX3RpbWVvdXRBcmd1bWVudHM9bnVsbDthJiYoQXJyYXkuaXNB
cnJheShiKT9hLmFwcGx5KHRoaXMsYik6bnVsbCE9Yj9hLmNhbGwodGhpcyxiKTph
LmNhbGwodGhpcykpfS5iaW5kKHRoaXMpO2I9bnVsbH12YXIgYz1lbmNvZGVVUklD
b21wb25lbnQsbD1TdHJpbmcucHJvdG90eXBlLnNwbGl0LHk9MyE9IjFfMSIuc3Bs
aXQoLyhfKS8pLmxlbmd0aD9mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7aWYoIShh
IGluc3RhbmNlb2YgUmVnRXhwKSlyZXR1cm4gdm9pZCAwPT09YSYmMD09PWI/W106
bC5jYWxsKGMsYSxiKTt2YXIgaD1bXSxkPTAsZSxnLGs7YT1SZWdFeHAoYS5zb3Vy
Y2UsKGEuaWdub3JlQ2FzZT8iaSI6IiIpKyhhLm11bHRpbGluZT8ibSI6IiIpKyhh
LmV4dGVuZGVkPyJ4IjoKIiIpKyhhLnN0aWNreT8ieSI6IiIpKyJnIik7Yys9IiI7
Yj12b2lkIDA9PT1iPzQyOTQ5NjcyOTU6Yj4+PjA7aWYoIWIpcmV0dXJuW107Zm9y
KDtlPWEuZXhlYyhjKTspe2c9ZS5pbmRleCtlWzBdLmxlbmd0aDtpZihnPmQmJiho
LnB1c2goYy5zbGljZShkLGUuaW5kZXgpKSwxPGUubGVuZ3RoJiZlLmluZGV4PGMu
bGVuZ3RoJiZoLnB1c2guYXBwbHkoaCxlLnNsaWNlKDEpKSxrPWVbMF0ubGVuZ3Ro
LGQ9ZyxoLmxlbmd0aD49YikpYnJlYWs7YS5sYXN0SW5kZXg9PT1lLmluZGV4JiZh
Lmxhc3RJbmRleCsrfWQ9PT1jLmxlbmd0aD8hayYmYS50ZXN0KCIiKXx8aC5wdXNo
KCIiKTpoLnB1c2goYy5zbGljZShkKSk7cmV0dXJuIGgubGVuZ3RoPmI/aC5zbGlj
ZSgwLGIpOmh9Omwsaz1uLkhUTUwuZXNjYXBlLGc9bi51aS5hanNVSUNvbXBvbmVu
dCxkPU9iamVjdC5pc09iamVjdDttLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bSxj
bklucHV0OiJqcy1pbnB1dCIsY25TdWdnZXN0OiJqcy1zdWdnZXN0IiwKY25MaXN0
OiImX19zdWdnZXN0X19pbm5lciIsY25JdGVtOiImX19zdWdnZXN0X19pdGVtIixj
bkl0ZW1UaWNrOiImX19zdWdnZXN0X19pdGVtX190aWNrIixjblNlbGVjdGVkOiIm
X19zdWdnZXN0X19pdGVtX3NlbGVjdGVkIixjbkludGVybmV0Q29udDoiJl9fc3Vn
Z2VzdF9faXRlbV9pbnRlcm5ldCIsY25JbnRlcm5ldDoiJl9fc3VnZ2VzdF9faXRl
bV9pbnRlcm5ldC1saW5rIixjZEdyb3VwSGVhZGVyOiImX19zdWdnZXN0X19ncm91
cC1oZWFkZXIiLGNkU3VnZ2VzdEhpbnQ6IiZfX3N1Z2dlc3RfX2l0ZW1fX2hpbnQi
LGdldERhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YSYmYS5kYXRhfHxhKSYmIk9L
Ij09YVsxXSYmYVsyXX0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0oZChi
KSYmKGIuc3VnZ2VzdHx8Yi50ZXh0fHxiLndvcmQpfHxifHwiIikrIiIsaD0oZChi
KSYmKGIudGV4dHx8Yi53b3JkKXx8Ynx8IiIpKyIiLGg9ayhoKSxjPWsoYyk7YT1r
KGEpO2g9aC5yZXBsYWNlKFJlZ0V4cChhLAoiaSIpLCc8YiBjbGFzcz0iJyt0aGlz
Lm9wdHMuY25JdGVtVGljaysnIj4kJjwvYj4nKTtyZXR1cm4nPGRpdiBkYXRhLXN1
Z2dlc3Q9IicrYysnIiBjbGFzcz0iJyt0aGlzLm9wdHMuY25JdGVtKyciPicraCsi
PC9kaXY+In0sZ3JvdXBIZWFkZXJUZW1wbGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4n
PGRpdiBjbGFzcz0iJyt0aGlzLm9wdHMuY2RHcm91cEhlYWRlcisnIj4nK2ErIjwv
ZGl2PiJ9LHRlbXBsYXRlSW50ZXJuZXRWYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGso
YSl9LHJlcXVlc3Q6ZnVuY3Rpb24oYSxiLGMpe3AuZ2V0KGEsYil9LG11bHRpU3Vn
Z2VzdHM6ITEsc3VnZ2VzdFNlcGFyYXRvcjovXHMvZyxzdWdnZXN0RXNjYXBlU3Rh
cnQ6bnVsbCxzdWdnZXN0RXNjYXBlRW5kOm51bGwsZ2V0U3VnZ2VzdDpmdW5jdGlv
bihhKXtyZXR1cm4gYS50cmltKCl9LHNldFN1Z2dlc3Q6cC5ub29wLG1pbkxlbmd0
aDoxLG1heExlbmd0aDowLHRpbWVvdXQ6MzAwLGV4cGlyZTowLGF1dG9zdWJtaXQ6
ITAsCmFqYXhVcmw6dm9pZCAwLHNlYXJjaFVybDoiaHR0cDovL2dvLm1haWwucnUv
c2VhcmNoP3E9I3F1ZXJ5IyIsZW5jb2RlQmVmb3JlU2VuZDohMCxzaG93SW50ZXJu
ZXQ6ITAsb25kcmF3OnAubm9vcCxncm91cGluZzohMSxmZXRjaGluZzohMSxmZXRj
aENvdW50OjMwLG1hcmtCeU1vdXNlT3ZlcjohMCxhdXRvTWFya2VkOi0xLHVuZGV0
ZXJtaW5lZFN0YWdlOiEwLHNlbGVjdElucHV0RGlmZjohMSxzZWxlY3RCeVRhYjoh
MSxoaWRlSW5hY3RpdmU6ITAsdXNlQ2FjaGU6ITAsc2VhcmNoTGFzdDohMSxmaW5k
TGFzdFdvcmQ6L14uKlxzKy8sb25kYXRhOnAubm9vcCxvbnByaW50Om51bGwsb25l
eHBhbmQ6cC5ub29wLG9uc2VhcmNoOnAubm9vcCxvbnNlbGVjdDpwLm5vb3B9O3Au
aW5oZXJpdHMocSxnLHtoYW5kbGVFdmVudDpmdW5jdGlvbihhLGIpe2lmKCF0aGlz
Ll9fZGlzYWJsZWQpe3ZhciBjPWEua2V5Q29kZSxoPXRoaXMub3B0cyxkPWguaGlk
ZUluYWN0aXZlLGUsZyxrLGw9ITA7dm9pZCAwPT09CmImJihiPWJ8fGEudHlwZSk7
aWYoZT0rdGhpcy4kSW5wdXQuYXR0cigiZGF0YS1wcmV2ZW50LWV2ZW50LSIrYikp
LS1lLGU/dGhpcy4kSW5wdXQuYXR0cigiZGF0YS1wcmV2ZW50LWV2ZW50LSIrYixl
KTp0aGlzLiRJbnB1dFswXS5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtcHJldmVudC1l
dmVudC0iK2IpO2Vsc2UgaWYodGhpcy5ibHVycmVkPXUuYWN0aXZlRWxlbWVudCE9
dGhpcy4kSW5wdXRbMF0sIXRoaXMuYmx1cnJlZHx8ImJsdXIiPT09Yil7c3dpdGNo
KGIpe2Nhc2UgImhhc2hjaGFuZ2UiOmNhc2UgInBvcHN0YXRlIjpjYXNlICJibHVy
Ijp0aGlzLl9kb3duJiYiYmx1ciI9PT1iP3RoaXMuX2Rvd24mJih0aGlzLl9kb3du
PWw9ITEsdS5hY3RpdmVFbGVtZW50IT09dGhpcy4kSW5wdXRbMF0mJih0aGlzLiRJ
bnB1dC5hdHRyKCJkYXRhLXByZXZlbnQtZXZlbnQtZm9jdXMiLDEpLHRoaXMuJElu
cHV0WzBdLmZvY3VzKCksKGc9dGhpcy5fX2JsdXJlZENhcmV0KSYmbi4kLnNldENh
cmV0UG9zaXRpb24odGhpcy4kSW5wdXRbMF0sCmcuc3RhcnQsZy5lbmQpLHRoaXMu
X2ZpbmRWYWx1ZSgpKSk6ITEhPT10aGlzLl9maXJlQWN0aXZlRXZlbnQoITEpJiYo
dGhpcy5ibHVycmVkPSEwLGQmJihnPXRoaXMuX19jdXJyZW50TWFya2VkQ2hhbmdl
VmFsdWUsITEhPT10aGlzLmhpZGUoKSYmKGcmJnRoaXMuX29uc2VsZWN0KGEsZyks
az0hMCkpKTticmVhaztjYXNlICJrZXl1cCI6Y2FzZSAia2V5ZG93biI6ZD10aGlz
LmlzRXhwYW5kZWQoKTtpZigzOCE9YyYmNDAhPWN8fCFkKWlmKDM5PT1jJiZ0aGlz
Ll9fY3VycmVudE1hcmtlZENoYW5nZVZhbHVlKXRoaXMuX29uc2VsZWN0KGEsdGhp
cy5fX2N1cnJlbnRNYXJrZWRDaGFuZ2VWYWx1ZSk7ZWxzZSBpZigxMz09Y3x8OT09
YyYmaC5zZWxlY3RCeVRhYil7aWYoOT09YyYmYSYmYS5jdHJsS2V5KXJldHVybjsi
a2V5ZG93biI9PWImJmQmJih0aGlzLl9fY3VycmVudE1hcmtlZD90aGlzLl9vbnNl
bGVjdChhLHRoaXMuX19jdXJyZW50TWFya2VkLCEwLGguYXV0b3N1Ym1pdCwhMSw5
PT0KY3x8Mzk9PWMpOnRoaXMuaGlkZSgpKX1lbHNlIGlmKDI3PT1jKSJrZXl1cCI9
PWImJiExIT09dGhpcy5oaWRlKGEpJiYodGhpcy5fZmluZFZhbHVlKG51bGwpLGEu
cHJldmVudERlZmF1bHQoKSxrPSEwKTtlbHNle3RoaXMuaGFuZGxlRXZlbnQoYSwi
a2V5dXAiPT1iPyJvbnByaW50IjpudWxsKTtyZXR1cm59ZWxzZSJrZXlkb3duIj09
YiYmdGhpcy5fbWFyaygzOD09Yz8tMTowKSxhLnByZXZlbnREZWZhdWx0KCksYS5z
dG9wUHJvcGFnYXRpb24oKTticmVhaztkZWZhdWx0OmlmKCJmb2N1cyI9PT1iJiYh
MT09PXRoaXMuX2ZpcmVBY3RpdmVFdmVudCghMCkpcmV0dXJuO2s9dGhpcy5fZG93
bj0hMTtpZighMSE9PShjPXRoaXMuX2NoZWNrU29tZXRoaW5nSXNDaGFuZ2VzKCkp
JiYodGhpcy5fX2N1cnJlbnRNYXJrZWRDaGFuZ2VWYWx1ZT10aGlzLl9fY3VycmVu
dE1hcmtlZD1udWxsLGgudXNlQ2FjaGU/ZD10aGlzLl9jYWNoZVtjXXx8bnVsbDoo
dGhpcy5fY2FjaGU9e30sZD1udWxsKSxlPQpoLmV4cGlyZSYmdGhpcy5fX3ByZXZS
ZXF1ZXN0VGltZT4rbmV3IERhdGUrMUUzKmguZXhwaXJlLGU9e3R5cGU6InN1Z2dl
c3RzOmZpbmQiLG9yaWdpbmFsRXZlbnQ6YSxmaW5kVmFsdWU6MDxoLm1heExlbmd0
aD9jLnN1YnN0cigwLGgubWF4TGVuZ3RoKTpjLGRhdGE6ZCxleHBpcmU6ZX0sZS52
YWw9ZS5maW5kVmFsdWUsITEhPT10aGlzLmZpcmVUcmlnZ2VyKGUpKSl7dGhpcy5f
bG9hZFZhbD1udWxsO3RoaXMuX2ludGVybmV0VmFsKGMpO2M9YyE9ZS52YWw/ZS52
YWw6ZS5maW5kVmFsdWU7aWYoZD1lLmRhdGEpdGhpcy5fY2FjaGVbY109ZDsib25w
cmludCI9PWImJmgub25wcmludCYmaC5vbnByaW50LmNhbGwodGhpcyxjLHRoaXMp
O2UuZXhwaXJlJiYodGhpcy5yZXNldCgpLGQ9bnVsbCk7dGhpcy5fdGlkJiYoY2xl
YXJUaW1lb3V0KHRoaXMuX3RpZCksdGhpcy5fdGlkPXRoaXMuX3RpbWVvdXRGdW5j
dGlvbj10aGlzLl90aW1lb3V0QXJndW1lbnRzPW51bGwpO2Q/KGRlbGV0ZSBlLmV4
cGlyZSwKdGhpcy5fdGltZW91dEZ1bmN0aW9uPXRoaXMuX3JlYnVpbGQsdGhpcy5f
dGltZW91dEFyZ3VtZW50cz1lLHRoaXMuX3RpZD1zZXRUaW1lb3V0KHRoaXMuX3Rp
bWVvdXRIYW5kbGVyKSk6dGhpcy5fY2hlY2tQcmV2UmVzdWx0SXNOb3RFbXB0eShj
LGgpJiYodGhpcy5fdGltZW91dEZ1bmN0aW9uPXRoaXMuZmluZCx0aGlzLl90aW1l
b3V0QXJndW1lbnRzPWMsdGhpcy5fdGlkPXNldFRpbWVvdXQodGhpcy5fdGltZW91
dEhhbmRsZXIsaC50aW1lb3V0KSl9fWsmJnRoaXMuX3RpZCYmKGNsZWFyVGltZW91
dCh0aGlzLl90aWQpLHRoaXMuX3RpZD10aGlzLl90aW1lb3V0RnVuY3Rpb249dGhp
cy5fdGltZW91dEFyZ3VtZW50cz1udWxsKTtsJiZ0aGlzLl9kZWxheWVkSGlkZUVu
ZCgpfX19LGFwcGx5VG9JbnB1dDpmdW5jdGlvbihhLGIpe3RoaXMuJElucHV0JiZ0
aGlzLiRJbnB1dC51bmJpbmQoImJsdXIgZm9jdXMgY2xpY2sga2V5dXAga2V5ZG93
biIsdGhpcyk7dGhpcy4kSW5wdXQ9cChhKS5hdHRyKCJhdXRvY29tcGxldGUiLAoi
b2ZmIikuYmluZCgiYmx1ciBmb2N1cyBjbGljayBrZXl1cCBrZXlkb3duIix0aGlz
KTshYiYmKHRoaXMuJFN1Z2dlc3QmJnRoaXMuaXNFeHBhbmRlZCgpKSYmdGhpcy5f
cmVidWlsZCh0aGlzLl9fdmFsKX0sX2NoZWNrU29tZXRoaW5nSXNDaGFuZ2VzOmZ1
bmN0aW9uKCl7dmFyIGE9dGhpcy5fZmluZFZhbHVlKCksYjtpZihiPXRoaXMuX19j
dXJyZW50TWFya2VkQ2hhbmdlVmFsdWUpaWYoYj1iLmdldEF0dHJpYnV0ZSgiZGF0
YS1zdWdnZXN0IiksYj09YSlyZXR1cm4hMTt0aGlzLl9fcHJldlN1Z2dlc3QuY2Fy
ZXQ9dGhpcy5fX3ByZXZTdWdnZXN0LnZhbD1udWxsO3JldHVybiB0aGlzLl9maW5k
VmFsdWUoKX0sX2NoZWNrUHJldlJlc3VsdElzTm90RW1wdHk6ZnVuY3Rpb24oYSxi
KXtpZighYi51c2VDYWNoZSlyZXR1cm4hMDtmb3IodmFyIGM9YS5sZW5ndGgtMSxo
LGQ9dGhpcy5fY2FjaGU7Yz49Yi5taW5MZW5ndGg7Yy0tKWlmKGg9YS5zdWJzdHIo
MCxjKSx2b2lkIDAhPT1kW2hdKXJldHVybihoPQpkW2hdKSYmMDxoLmxlbmd0aDty
ZXR1cm4hMH0sX2Nsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLiRMaXN0
WzBdO2RvIGlmKDE9PWEubm9kZVR5cGUmJiJnZXRBdHRyaWJ1dGUiaW4gYSYmKGI9
YS5nZXRBdHRyaWJ1dGUoImRhdGEtc3VnZ2VzdC1pZHgiKSwwPGIpKXJldHVybiBh
O3doaWxlKGEmJihhPWEucGFyZW50Tm9kZSkmJmEhPT1jKX0sX3N1Z2dlc3ROb2Rl
TW91c2VvdmVyOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9fZGlzYWJsZWQpe3ZhciBi
O2EudGFyZ2V0LnBhcmVudE5vZGUmJihiPXRoaXMuX2Nsb3Nlc3QoYS50YXJnZXQp
KTtiJiZ0aGlzLl9tYXJrKHZvaWQgMCxiLHZvaWQgMCwhMSxhKX19LF9zZWxlY3RC
eUNsaWNrOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9fZGlzYWJsZWQpe3ZhciBiPXRo
aXMub3B0cyxjPXRoaXMuX2Nsb3Nlc3QoYS50YXJnZXQpO2MmJiExIT09dGhpcy5f
bWFyayhudWxsLGMsITAsdm9pZCAwLGEpJiZ0aGlzLl9vbnNlbGVjdChhLGMsITAs
Yi5hdXRvc3VibWl0KTsKcmV0dXJuITF9fSxfbWFyazpmdW5jdGlvbihhLGIsYyxk
LGUpe2lmKCEodm9pZCAwIT09YiYmdGhpcy5fX2N1cnJlbnRNYXJrZWQ9PT1iJiYh
IXRoaXMuX19jdXJyZW50TWFya2VkQ2hhbmdlVmFsdWU9PWR8fHRoaXMuX19pbkZl
dGNoaW5nKSl7dmFyIGc9dGhpcy5vcHRzLGs9dGhpcy4kTGlzdCxsPXRoaXMuX19j
dXJyZW50TWFya2VkfHx0aGlzLl9fY3VycmVudE1hcmtlZENoYW5nZVZhbHVlLG0s
QixuLHY9dGhpcy5fX0xpc3RJdGVtcyxxLHcscjt2b2lkIDA9PT1kJiYoZD0hMCk7
aWYodil7Yz1sJiZsLmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iil8fG51bGw7
cT12LnNpemUoKTttPUI9KGwmJn5+bC5nZXRBdHRyaWJ1dGUoImRhdGEtc3VnZ2Vz
dC1pZHgiKXx8MCktMTtpZihiKUI9fn5iLmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdn
ZXN0LWlkeCIpLTE7ZWxzZXtCPWw/QisoMD5hPy0xOjEpOjA+YT9xLTE6MDtmb3Io
Qj1CPj1xPy0xOkI7IWImJkI8cSYmMDw9QjspYj12W0JdLGImJgoibm9uZSIhPWIu
c3R5bGUuZGlzcGxheXx8KGI9bnVsbCwwPmE/Qi0tOkIrKyk7aWYoIWJ8fDA+QilC
PS0xLGI9bnVsbH1yPXRoaXMuX192YWw7bj1udWxsIT1yJiZ0aGlzLl9jYWNoZVty
XTtpZighYiYmKC0xPGEmJi0xPG0mJmcuZmV0Y2hpbmcmJiFuLkVPRikmJiExIT09
dGhpcy5fZmV0Y2hNb3JlKGEsdGhpcy5fbWFyay5iaW5kKHRoaXMsYSkpKXJldHVy
bjsoQj49cXx8MD5CKSYmIWcudW5kZXRlcm1pbmVkU3RhZ2UmJihCPTA+YT9xLTE6
MCxiPXZbQl0pO2ImJihhPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1rWzBd
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLDA9PUI/a1swXS5zY3JvbGxUb3A9MDph
LnRvcDx2LnRvcD9rWzBdLnNjcm9sbFRvcCs9YS50b3Atdi50b3A6YS5ib3R0b20+
di5ib3R0b20mJihrWzBdLnNjcm9sbFRvcCs9YS5ib3R0b20tdi5ib3R0b20pKTtl
PXt0eXBlOiJzdWdnZXN0czptYXJrIixvbGRTdWdnZXN0SW5kZXg6bSxvbGRTdWdn
ZXN0RGF0YTowPD0KbSYmbiYmblttXXx8bnVsbCxvbGRTdWdnZXN0Tm9kZTpsLG9s
ZFN1Z2dlc3Q6YyxuZXdTdWdnZXN0SW5kZXg6QixuZXdTdWdnZXN0RGF0YTowPD1C
JiZuJiZuW0JdfHxudWxsLG5ld1N1Z2dlc3ROb2RlOmIsbmV3U3VnZ2VzdDpjPWIm
JmIuZ2V0QXR0cmlidXRlKCJkYXRhLXN1Z2dlc3QiKXx8bnVsbCx1cGRhdGVJbnB1
dFZhbHVlOmQsZmluZFZhbHVlOnIsb3JpZ2luYWxFdmVudDplfHxudWxsfTtnPWcu
c2VsZWN0SW5wdXREaWZmO2QmJmc/KHc9KHc9dGhpcy5fX3ByZXZTdWdnZXN0LmNh
cmV0KT93LmVuZDpyLmxlbmd0aCxtPXcrKGN8fCIiKS5sZW5ndGgpOm09dz0tMTtl
LmNhcmV0UG9zaXRpb25TdGFydD13O2UuY2FyZXRQb3NpdGlvbkVuZD1tO2lmKCEx
IT09dGhpcy5maXJlVHJpZ2dlcihlKSlpZihjPWUubmV3U3VnZ2VzdCxtPWUuY2Fy
ZXRQb3NpdGlvbkVuZCx3PWUuY2FyZXRQb3NpdGlvblN0YXJ0LHZvaWQgdGhpcy5f
Y2FuY2VsTWFyaygpLGIpe2lmKHAuYWRkQ2xhc3MoYix0aGlzLm9wdHMuY25TZWxl
Y3RlZCksCnRoaXMuX19jdXJyZW50TWFya2VkPWIsZCE9KGQ9ZS51cGRhdGVJbnB1
dFZhbHVlKSYmKGQmJmcmJi0xPT09bSYmdz09PW0pJiYodz0odz10aGlzLl9fcHJl
dlN1Z2dlc3QuY2FyZXQpP3cuZW5kOnIubGVuZ3RoLG09dysoY3x8IiIpLmxlbmd0
aCksZD1lLnVwZGF0ZUlucHV0VmFsdWUpdGhpcy5fX2N1cnJlbnRNYXJrZWRDaGFu
Z2VWYWx1ZT10aGlzLl9fY3VycmVudE1hcmtlZH1lbHNlIHRoaXMuX19jdXJyZW50
TWFya2VkQ2hhbmdlVmFsdWU9dGhpcy5fX2N1cnJlbnRNYXJrZWQ9bnVsbDtlbHNl
IHJldHVybiExfWVsc2UgYz1sLmF0dHIoImRhdGEtc3VnZ2VzdCIpO2QmJnRoaXMu
X2ZpbmRWYWx1ZShjLG51bGwsZCYmLTE8dz93OnZvaWQgMCxkJiYtMTxtP206dm9p
ZCAwKX19LF9vbnNlbGVjdDpmdW5jdGlvbihhLGIsYyxkLGUsZyl7dmFyIGs9dGhp
cy5vcHRzLGw9Yi5nZXRBdHRyaWJ1dGUoImRhdGEtc3VnZ2VzdCIpLG09Yi5nZXRB
dHRyaWJ1dGUoImRhdGEtc3VnZ2VzdC1pZHgiKS0KMSxCPXRoaXMuX2NhY2hlW3Ro
aXMuX192YWxdLG49dGhpcy4kSW5wdXQscT10aGlzLl9nZXRTdWdnZXN0UmVwbGFj
ZW1lbnQoKSxyPXE/cS5pbnB1dFZhbHVlOm4udmFsKCk7ZT17dHlwZToic3VnZ2Vz
dHM6c2VsZWN0IixuZXdTdWdnZXN0OmwsbmV3U3VnZ2VzdERhdGE6QiYmQlttXSxu
ZXdTdWdnZXN0SW5kZXg6bSxuZXdTdWdnZXN0Tm9kZTpiLGZpbmRWYWx1ZTp0aGlz
Ll9fdmFsLGlucHV0VmFsdWU6cixpbnB1dFZhbHVlTGVmdFBhcnQ6cT9xLmxlZnRQ
YXJ0OiIiLGlucHV0VmFsdWVSaWdodFBhcnQ6cT9xLnJpZ2h0UGFydDoiIixpbnB1
dFNlbGVjdGlvblN0YXJ0Oi0xLGlucHV0U2VsZWN0aW9uRW5kOi0xLGNoYW5nZUlu
cHV0VmFsdWU6IWUsb3JpZ2luYWxFdmVudDphfHxudWxsLHN1Ym1pdEZvcm06ZHx8
ITF9O3ZhciB3O2MmJmR8fHAucmVtb3ZlQ2xhc3MoYixrLmNuU2VsZWN0ZWQpO2I9
ay5vbnNlbGVjdC5jYWxsKHRoaXMsZSx0aGlzKTtpZighMSE9PWIpe2lmKCExIT09
KGI9CnRoaXMuZmlyZVRyaWdnZXIoZSkpKXt0aGlzLl9fY3VycmVudE1hcmtlZENo
YW5nZVZhbHVlPXRoaXMuX19jdXJyZW50TWFya2VkPW51bGw7ZS5jaGFuZ2VJbnB1
dFZhbHVlJiZ0aGlzLl9maW5kVmFsdWUoZS5uZXdTdWdnZXN0LHEsLTEhPShtPWUu
aW5wdXRTZWxlY3Rpb25TdGFydCk/bTp2b2lkIDAsLTEhPShtPWUuaW5wdXRTZWxl
Y3Rpb25FbmQpP206dm9pZCAwKTthJiYhZyYmKGEuc3RvcFByb3BhZ2F0aW9uKCks
YS5wcmV2ZW50RGVmYXVsdCgpKTtpZihlLnN1Ym1pdEZvcm0mJihhPW4uY2xvc2Vz
dCgiZm9ybSIpWzBdKSlmb3IodmFyIG09YS5sZW5ndGgseTttLS07KWlmKCh5PWFb
bV0pJiYic3VibWl0Ij09eS50eXBlKXt5LmNsaWNrKCk7YnJlYWt9dz0hMH1nfHx0
aGlzLiRJbnB1dFswXS5mb2N1cygpO3cmJnRoaXMuaGlkZSgpfXRoaXMuX19wcmV2
U3VnZ2VzdC5jYXJldD10aGlzLl9fcHJldlN1Z2dlc3QudmFsPW51bGw7cmV0dXJu
IGJ9LF9jYW5jZWxNYXJrOmZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMub3B0cy5jblNl
bGVjdGVkLGI9dGhpcy4kTGlzdC5maW5kKCIuIithKTtiLmxlbmd0aCYmYi5yZW1v
dmVDbGFzcyhhKTtyZXR1cm4gYn0sX2xvYWRlZDpmdW5jdGlvbihhLGIsYyl7aWYo
Ynx8dS5hY3RpdmVFbGVtZW50PT10aGlzLiRJbnB1dFswXSl7dmFyIGQ9dGhpcy5v
cHRzLGU9ZC5oaWRlSW5hY3RpdmU7Yz17ZGF0YTpjLGZpbmRWYWx1ZTphLHR5cGU6
InN1Z2dlc3RzOmdldERhdGEifTtjLnN1Z2dlc3RWYWx1ZT1hOyExIT09dGhpcy5m
aXJlVHJpZ2dlcihjKSYmKGMudHlwZSs9IjphZnRlciIsdGhpcy5maXJlVHJpZ2dl
cihjKSx0aGlzLl9jYWNoZVthXT1jPWMuZGF0YSxkLm9uZGF0YS5jYWxsKHRoaXMs
YSxjLHRoaXMpLCFiJiYodGhpcy5fbG9hZFZhbCE9YXx8ZSYmdGhpcy5ibHVycmVk
KXx8dGhpcy5fcmVidWlsZChhLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCEwPT09Yikp
fX0sX3JlYnVpbGQ6ZnVuY3Rpb24oYSxiLGMsaCxlKXtudWxsPT1iJiYoYj0tMSk7
dmFyIGc9dGhpcy5vcHRzLAprPWQoYSksbD1rP2EuZmluZFZhbHVlOmEsbT1udWxs
IT1sJiYic3RyaW5nIj09dHlwZW9mIGwsbj1tJiZ0aGlzLl9jYWNoZVtsXXx8W10s
cT1uJiYhKCFuLmxlbmd0aCYmIW4udG9BcnJheSksdj0tMTxiP2IrKHZvaWQgMCE9
Yz9jOmcuZmV0Y2hDb3VudCk6LTEscix3PWcuZ3JvdXBpbmcsbj17dHlwZToic3Vn
Z2VzdHM6cmVidWlsZCIsc2hvd0NvbnRhaW5lcjplfHxxJiZtLHNob3dMaXN0OnEs
c2hvd0ludGVybmV0Omcuc2hvd0ludGVybmV0LGRhdGE6bixmaW5kVmFsdWU6bCxk
YXRhRnJvbTpiLGRhdGFUbzp2LG1hcmtlZEl0ZW06Zy5hdXRvTWFya2VkfTthPWs/
cC5leHRlbmQoYSxuKTpuO2Euc3VnZ2VzdD1sO249YS5kYXRhOyFBcnJheS5pc0Fy
cmF5KG4pJiZuLnRvQXJyYXkmJihuPW4udG9BcnJheSgpKTthLnNob3dMaXN0PXE7
YS5zaG93Q29udGFpbmVyPWEuc2hvd0NvbnRhaW5lciYmKGEuc2hvd0xpc3R8fGEu
c2hvd0ludGVybmV0KTtpZihhLnNob3dDb250YWluZXImJiExIT09CnRoaXMuZmly
ZVRyaWdnZXIoYSkmJihiPWEuZGF0YUZyb20sLTEhPT1iJiYoSW5maW5pdHk9PT1i
JiYoYj10aGlzLl9fTGlzdEl0ZW1zJiZ0aGlzLl9fTGlzdEl0ZW1zLmxlbmd0aC0x
KSxofHwoaD10aGlzLl9fTGlzdEl0ZW1zJiZ0aGlzLl9fTGlzdEl0ZW1zW2JdKSks
dj1hLmRhdGFUbywtMT09PXYmJi0xIT09YiYmKHY9LTE8Yj9iKyh2b2lkIDAhPWM/
YzpnLmZldGNoQ291bnQpOi0xKSxofHx0aGlzLl9fdmFsIT09KGw9YS5maW5kVmFs
dWUhPWw/YS5maW5kVmFsdWU6YS5zdWdnZXN0KSkpe3RoaXMuX19pbkZldGNoaW5n
PSExO3RoaXMuX19jdXJyZW50TWFya2VkPWh8fG51bGw7dGhpcy5fX3ZhbD1sO2lm
KGEuc2hvd0xpc3Qpe2M9LTE8Yj9iKzE6MDtxPS0xPHYmJm4ubGVuZ3RoPnY/disx
Om4ubGVuZ3RoO3Y9W107Zm9yKGs9QShsKTtjPHE7YysrKWlmKGU9bltjXSl3JiYo
ZChlKSYmZS5ncm91cEhlYWRlcikmJnYucHVzaChwLnRyaW0oZy5ncm91cEhlYWRl
clRlbXBsYXRlLmNhbGwodGhpcywKZS5ncm91cEhlYWRlcixrLGUpKSksdi5wdXNo
KHAudHJpbShnLnRlbXBsYXRlLmNhbGwodGhpcyxrLGUsYyxuLGwpKSk7aWYodi5s
ZW5ndGgpaWYoLTE8YiYmaCl2PXAodi5qb2luKCIiKSkscChoKS5hZnRlcih2KSx2
PXYuZmlsdGVyKCIuIitnLmNuSXRlbSksdGhpcy5fX0xpc3RJdGVtcy5hZGQodiks
QXJyYXkuZm9yRWFjaCh2LGZ1bmN0aW9uKGEsYyl7YS5zZXRBdHRyaWJ1dGUoImRh
dGEtc3VnZ2VzdC1pZHgiLGMrYisyKX0pO2Vsc2UgaWYodGhpcy5fX0xpc3RJdGVt
cz10aGlzLiRMaXN0Lmh0bWwodi5qb2luKCIiKSkuZmluZCgiLiIrZy5jbkl0ZW0p
LmVhY2goZnVuY3Rpb24oYSxiKXtiLnNldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0
LWlkeCIsYSsxKX0pLHY9dGhpcy4kTGlzdFswXSl2LnNjcm9sbFRvcD0wfWcub25k
cmF3LmNhbGwodGhpcyxsLG4sdGhpcyl9ZGVsZXRlIGEuZGF0YUZyb207ZGVsZXRl
IGEuZGF0YVRvOyExIT09dGhpcy5fb25FeHBhbmQoYS5zaG93Q29udGFpbmVyLAph
KSYmKHRoaXMuJExpc3QudG9nZ2xlKGEuc2hvd0xpc3QpLHRoaXMuJFN1Z2dlc3Qu
dG9nZ2xlKGEuc2hvd0NvbnRhaW5lciksdGhpcy4kSW50ZXJuZXRDb250LnRvZ2ds
ZShhLnNob3dJbnRlcm5ldCkpOyF0aGlzLl9fY3VycmVudE1hcmtlZCYmKGEuc2hv
d0NvbnRhaW5lciYmYS5zaG93TGlzdCYmTnVtYmVyLmlzSW50ZWdlcihyPWEubWFy
a2VkSXRlbSkmJjA8PXIpJiZ0aGlzLl9tYXJrKHIsdm9pZCAwLHZvaWQgMCwhMSk7
YS50eXBlPSJzdWdnZXN0czphZnRlclJlYnVpbGQiO3RoaXMuZmlyZVRyaWdnZXIo
YSk7YS5kYXRhPW51bGx9LF9yZXF1ZXN0OmZ1bmN0aW9uKGEsYixjKXt0aGlzLm9w
dHMucmVxdWVzdChhLGIsYyl9LF9pbnRlcm5ldFZhbDpmdW5jdGlvbihhKXt2YXIg
Yj10aGlzLm9wdHM7YT1rKGEpO2Iuc2hvd0ludGVybmV0JiYodGhpcy4kSW50ZXJu
ZXRDb250LmF0dHIoImhyZWYiLGIuc2VhcmNoVXJsLnJlcGxhY2UoIiNxdWVyeSMi
LGIuZW5jb2RlQmVmb3JlU2VuZD8KYyhhKTphKSksITEhPT0oYT1iLnRlbXBsYXRl
SW50ZXJuZXRWYWwuY2FsbCh0aGlzLGEsdGhpcy4kSW50ZXJuZXRDb250LHRoaXMu
JEludGVybmV0KSkmJihiPXRoaXMuJEludGVybmV0LGIuc2l6ZSgpJiYoYi5hdHRy
KCJpbm5lckhUTUwiLCIiKVswXS5pbm5lckhUTUw9YSkpKX0sX29uRXhwYW5kOmZ1
bmN0aW9uKGEsYixjKXtpZih0aGlzLl9fZXhwYW5kZWRTdGF0ZSE9PWEpe3RoaXMu
b3B0cy5vbmV4cGFuZC5jYWxsKHRoaXMsYSx0aGlzKTtiPWJ8fHt9O2IudHlwZT0i
c3VnZ2VzdHM6IisoYT8ic2hvdyI6ImhpZGUiKTtjJiYoYi5vcmlnaW5hbEV2ZW50
PWMpO2lmKCExPT09dGhpcy5maXJlVHJpZ2dlcihiKSlyZXR1cm4hMTt0aGlzLl9f
ZXhwYW5kZWRTdGF0ZT1hfWVsc2UgcmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXty
ZXR1cm4gdm9pZCAwIT09YT8odGhpcy5faW50ZXJuZXRWYWwoYSksdGhpcy4kSW5w
dXQudmFsKGEpLCIiIT1hfHx0aGlzLl9jYWNoZVthXXx8dGhpcy5oaWRlKCksCnRo
aXMpOnRoaXMuX2ZpbmRWYWx1ZSgpfSxnZXRGaW5kV29yZHM6ZnVuY3Rpb24oKXt2
YXIgYT10aGlzLm9wdHMsYj1hLm11bHRpU3VnZ2VzdHMsYz1hLnN1Z2dlc3RTZXBh
cmF0b3IsZD10aGlzLiRJbnB1dFswXSxlPWQudmFsdWUsZyxsLGssbSxwPW51bGws
bixxPWEuc3VnZ2VzdEVzY2FwZVN0YXJ0LHI9cSYmYS5zdWdnZXN0RXNjYXBlRW5k
LHc7aWYoYT10aGlzLmhhc1RyaWdnZXIoInN1Z2dlc3RzOmdldFN1Z2dlc3RXb3Jk
cyBzdWdnZXN0czpnZXRTdWdnZXN0V29yZHM6QUZURVIiKSl7dz17dHlwZToic3Vn
Z2VzdHM6Z2V0U3VnZ2VzdFdvcmRzIixpbnB1dDpkLGlucHV0VmFsdWU6ZSxkYXRh
Om51bGx9O2lmKCExPT09dGhpcy5maXJlVHJpZ2dlcih3KSlyZXR1cm5bXTtlPXcu
aW5wdXRWYWx1ZX1pZihiKXtiPXkuY2FsbChlLGMpO2Q9W107Yz1SZWdFeHAoYy5z
b3VyY2UsKGMuZ2xvYmFsPyJnIjoiIikrKGMuaWdub3JlQ2FzZT8iaSI6IiIpKyhj
Lm11bHRpbGluZT8ibSI6IiIpKTsKZz1iLmxlbmd0aDtmb3IobD0wO2w8ZzsrK2wp
e2s9YltsXTsobT1jLmV4ZWMoZSkpJiYobT1tWzBdKTtpZihxJiZrKWlmKG51bGwh
PXApe2lmKC0xIT09KG49ay5zZWFyY2gocikpKXtiW3BdPWQuc2xpY2UocCxsKS5q
b2luKCIiKStrO2ZvcihwKys7cDw9bDtwKyspYltwXT1udWxsO3A9bnVsbH19ZWxz
ZS0xIT09KG49ay5zZWFyY2gocSkpJiYobj1rLnN1YnN0cihuKzEpLnNlYXJjaChy
KSwtMT09PW4mJihwPWwpKTtxJiYoZFtsXT1iW2xdKyhtfHwiIikpfWM9QXJyYXku
ZmlsdGVyKGIsZnVuY3Rpb24oYSl7cmV0dXJuISFhfSl9ZWxzZSBjPVtlXTthJiYo
dy5kYXRhPWMsdy50eXBlPSJzdWdnZXN0czpnZXRTdWdnZXN0V29yZHM6QUZURVIi
LCExIT09dGhpcy5maXJlVHJpZ2dlcih3KSYmKGM9dy5kYXRhKSk7cmV0dXJuIGN9
LF9nZXRTdWdnZXN0UmVwbGFjZW1lbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5v
cHRzLGM9Yi5tdWx0aVN1Z2dlc3RzLGQsZSxnO2Q9dGhpcy4kSW5wdXQ7CnZhciBs
PWQudmFsKCksayxtLG4scSxyLHUsdyxBPW51bGwsRSxGLE0sSixOO2lmKGMpe2Q9
dGhpcy5fX3ByZXZTdWdnZXN0LmNhcmV0fHxwLmdldENhcmV0UG9zaXRpb24oZFsw
XSk7aWYoIWQpcmV0dXJuO2U9ZC5zdGFydDtnPWQuZW5kO2lmKCF0aGlzLl9fcHJl
dlN1Z2dlc3QuY2FyZXQpe2M9Yi5zdWdnZXN0U2VwYXJhdG9yO249MDtNPShGPWIu
c3VnZ2VzdEVzY2FwZVN0YXJ0KSYmYi5zdWdnZXN0RXNjYXBlRW5kO2I9eS5jYWxs
KGwsYyk7Yz1SZWdFeHAoYy5zb3VyY2UsKGMuZ2xvYmFsPyJnIjoiIikrKGMuaWdu
b3JlQ2FzZT8iaSI6IiIpKyhjLm11bHRpbGluZT8ibSI6IiIpKTtxPWIubGVuZ3Ro
O2ZvcihyPTA7cjxxOysrcil7dT1iW3JdOyh3PWMuZXhlYyhsKSkmJih3PXdbMF0p
O0YmJnUmJihudWxsIT09QT8tMSE9PXUuc2VhcmNoKE0pJiYobj1iLnNsaWNlKDAs
QSkuam9pbigiIikubGVuZ3RoLHU9Yi5zbGljZShBLHIrMSkuam9pbigiIiksQT1u
dWxsKTotMSE9PShFPXUuc2VhcmNoKEYpKSYmCihFPXUuc3Vic3RyKEUrMSkuc2Vh
cmNoKE0pLC0xPT09RSYmKEE9cikpKTt1PXUubGVuZ3RoO2lmKChuKz11KT49ZSlp
ZihudWxsPT09QSl7ZT1uLXU7Zz1uO2JyZWFrfWVsc2Ugdm9pZCAwPT09SiYmKEo9
bi11LE49bik7dyYmKG4rPXcubGVuZ3RoKTtGJiZ3JiYoYltyXSs9dyl9bnVsbCE9
PUEmJnZvaWQgMCE9PUomJihlPUosZz1OKTtkLnN0YXJ0PWU7ZC5lbmQ9Zzt0aGlz
Ll9fcHJldlN1Z2dlc3QuY2FyZXQ9ZH1hP2Q9bnVsbDooaz1sLnN1YnN0cmluZygw
LGUpLG09bC5zdWJzdHJpbmcoZyxsLmxlbmd0aCkpO3JldHVybntwb3NpdGlvbjpk
LHN0YXJ0OmUsZW5kOmcsdmFsdWU6bCxsZWZ0UGFydDprLHJpZ2h0UGFydDptfX1y
ZXR1cm4gbnVsbH0sX2ZpbmRWYWx1ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT12
b2lkIDA9PT1hLGc9dGhpcy5vcHRzLGw9dGhpcy4kSW5wdXQsayxtLG4scTtifHwo
Yj10aGlzLl9nZXRTdWdnZXN0UmVwbGFjZW1lbnQoZSkpO2lmKG51bGw9PT1hJiYo
YT0KdGhpcy5fX3ZhbCxudWxsPT1hKSlyZXR1cm47Yj8oaz1iLnZhbHVlLG09Yi5w
b3NpdGlvbixuPWIuc3RhcnQscT1iLmVuZCxlP2E9ay5zdWJzdHJpbmcobixxKToo
az1iLmxlZnRQYXJ0LGI9Yi5yaWdodFBhcnQsaz1rK2ErYixxPW0uZW5kPW0uc3Rh
cnQrYS5sZW5ndGgpKTplP2E9bC52YWwoKTpnLnNlYXJjaExhc3R8fChrPWEpO2s9
Z1tlPyJnZXRTdWdnZXN0Ijoic2V0U3VnZ2VzdCJdLmNhbGwodGhpcyxhLGssZyxu
LHEpO2lmKGUpcmV0dXJuIHRoaXMuX19wcmV2U3VnZ2VzdC52YWw9azt0aGlzLnZh
bChrKTt2b2lkIDA9PXEmJihxPWsubGVuZ3RoKTtJbmZpbml0eT09YyYmKGM9ay5s
ZW5ndGgpO0luZmluaXR5PT1kJiYoZD1rLmxlbmd0aCk7cC5zZXRDYXJldFBvc2l0
aW9uKGxbMF0sdm9pZCAwIT1jP2M6cSx2b2lkIDAhPWQ/ZDpxKX0sZmluZDpmdW5j
dGlvbihhLGIpe3ZhciBkPXRoaXMub3B0cyxlPWQuYWpheFVybDtkLm5lZWRVcGRh
dGVWYWx1ZSYmKGQubmVlZFVwZGF0ZVZhbHVlPQohMSxhPXRoaXMuX2ZpbmRWYWx1
ZSgpKTtpZighYiYmKCFlfHwhYSYmMDxkLm1pbkxlbmd0aCkpdGhpcy5oaWRlKCk7
ZWxzZSBpZih0aGlzLl9sb2FkVmFsIT1hfHx0aGlzLl9sb2FkVXJsIT1lKXRoaXMu
X2xvYWRVcmw9ZSx0aGlzLl9sb2FkVmFsPWEsZC5vbnNlYXJjaC5jYWxsKHRoaXMs
YSx0aGlzKSx0aGlzLl9yZXF1ZXN0KGUucmVwbGFjZSgiI3F1ZXJ5IyIsZC5lbmNv
ZGVCZWZvcmVTZW5kP2MoYSk6YSkrIiYiK01hdGgucmFuZG9tKCksdGhpcy5fbG9h
ZGVkLmJpbmQodGhpcyxhLGIpLGEpfSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMu
b3B0c1thXT1iOyJhamF4VXJsIj09YSYmKHRoaXMuX2NhY2hlPVtdLHRoaXMuX192
YWw9IiIpO2N8fHRoaXMuZmluZCh0aGlzLnZhbCgpKTtyZXR1cm4gdGhpc30sZ2V0
OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9wdHNbYV19LHJlc2V0OmZ1bmN0aW9u
KCl7dmFyIGE9dGhpcy5fbG9hZFZhbCxiPXRoaXMuX2NhY2hlW2FdO3RoaXMuX192
YWw9CnRoaXMuX2xvYWRWYWw9dm9pZCAwO3RoaXMuX2NhY2hlPXt9O3RoaXMuaXNF
eHBhbmRlZCgpJiZiJiYodGhpcy5fY2FjaGVbYV09Yil9LHNob3c6ZnVuY3Rpb24o
YSl7dGhpcy5fcmVidWlsZChhfHx0aGlzLnZhbCgpKX0saGlkZTpmdW5jdGlvbihh
KXt0aGlzLl9kb3duPSExO2lmKCExPT09dGhpcy5fb25FeHBhbmQoITEsbnVsbCxh
KSlyZXR1cm4hMTt0aGlzLl9fY3VycmVudE1hcmtlZENoYW5nZVZhbHVlPW51bGw7
dGhpcy4kU3VnZ2VzdC5oaWRlKCk7dGhpcy5fZGVsYXllZEhpZGVFbmQoKTtjbGVh
clRpbWVvdXQodGhpcy5fdGlkKX0sc2hvd1N1Z2dlc3RzOmZ1bmN0aW9uKGEsYixj
LGQpe2ImJnZvaWQgMCE9YSYmdGhpcy52YWwoYSk7dm9pZCAwPT09YSYmKGE9dGhp
cy52YWwoKSk7dm9pZCAwPT09YyYmKGM9dGhpcy5fY2FjaGVbYV0pO2QmJih0aGlz
LiRJbnB1dC5hdHRyKCJkYXRhLXByZXZlbnQtZXZlbnQtZm9jdXMiLDEpLHRoaXMu
JElucHV0WzBdLmZvY3VzKCksdGhpcy52YWwoKSwKdGhpcy5ibHVycmVkPSExKTtj
bGVhclRpbWVvdXQodGhpcy5fdGlkKTtjP3RoaXMuX2xvYWRlZChhLCEwLGMpOnRo
aXMuX3RpZD1zZXRUaW1lb3V0KHRoaXMuZmluZC5iaW5kKHRoaXMsYSwhMCksdGhp
cy5vcHRzLnRpbWVvdXQpfSxpc0V4cGFuZGVkOmZ1bmN0aW9uKCl7cmV0dXJuITA9
PT10aGlzLl9fZXhwYW5kZWRTdGF0ZX0sX2ZldGNoTW9yZTpmdW5jdGlvbihhLGIp
e2lmKCF0aGlzLm9wdHMuZmV0Y2hpbmcpcmV0dXJuITE7dm9pZCAwPT09YSYmKGE9
MSk7dmFyIGM9dGhpcy5fX3ZhbCxkPXRoaXMuX2NhY2hlW2NdLGU9KGQmJmQubGVu
Z3RofHwwKS0xLGc9MDw9ZT90aGlzLl9fTGlzdEl0ZW1zW2VdOm51bGw7aWYoIWd8
fCFkfHxkLkVPRilyZXR1cm4hMTtkPXt0eXBlOiJzdWdnZXN0czpmZXRjaCIsZmV0
Y2hGcm9tOmUsZmV0Y2hDb3VudDp0aGlzLm9wdHMuZmV0Y2hDb3VudCxmZXRjaERp
cmVjdGlvbjowPmE/IlVQIjoiRE9XTiIsZGF0YTpkLGZpbmRWYWx1ZTpjLEVPRjoh
MSxhc3luYzohMSwKY3VycmVudERhdGFMZW5ndGg6ZC5sZW5ndGgsaW5zZXJ0QWZ0
ZXI6Z307ZC52YWw9YztkLnN1Z2dlc3RWYWx1ZT1jOyExIT0oYz10aGlzLmZpcmVU
cmlnZ2VyKGQpKSYmKCEwIT09ZC5hc3luYz8odGhpc1tkLnR5cGVdKGQsYiksdGhp
cy5fX2luRmV0Y2hpbmc9ITEpOnRoaXMuX2FzeW5jaE1hcmtlcnNbZC50eXBlXT9k
LmFzeW5jPSExOih0aGlzLl9hc3luY2hNYXJrZXJzfHwodGhpcy5fYXN5bmNoTWFy
a2Vycz17fSksZC5fYXN5bmNoTWFya2VyPXRoaXMuX2FzeW5jaE1hcmtlcnNbZC50
eXBlXT0rbmV3IERhdGUsZC5fbmV4dF9jYWxsYmFjaz1iLGQubmV4dD10aGlzLl9j
YWxsVHJpZ2dlckZ1bmN0aW9uQXN5bmMsdGhpcy5fX2luRmV0Y2hpbmc9IWQuRU9G
KSk7cmV0dXJuIGN9LF9mZXRjaE9uU2Nyb2xsOmZ1bmN0aW9uKCl7aWYodGhpcy5p
c0V4cGFuZGVkKCkmJiF0aGlzLl9faW5GZXRjaGluZyl7dmFyIGE9dGhpcy4kTGlz
dFswXTthLm9mZnNldEhlaWdodCthLnNjcm9sbFRvcCsyMD4KYS5zY3JvbGxIZWln
aHQmJnRoaXMuX2ZldGNoTW9yZSgpfX0sInN1Z2dlc3RzOmZldGNoIjpmdW5jdGlv
bihhLGIpe3ZhciBjPWEuY3VycmVudERhdGFMZW5ndGgsZD1hLmluc2VydEFmdGVy
LGU9YS5zdWdnZXN0VmFsdWUsZyxrO2I9Ynx8YS5fbmV4dF9jYWxsYmFjaztnPXRo
aXMuX2NhY2hlW2VdPWEuZGF0YTtpZihnLmxlbmd0aD09Y3x8YS5FT0YpYS5FT0Y9
Zy5FT0Y9ITA7aWYoZy5FT0Z8fCFkJiYhKGQ9dGhpcy5fX0xpc3RJdGVtc1thLmZl
dGNoRnJvbV0pKWs9YS5yZXN1bHQ9ITE7ITEhPT1rJiYodGhpcy5fcmVidWlsZChl
LGEuZmV0Y2hGcm9tLGEuZmV0Y2hDb3VudCxkKSxiJiZiKCkpO3RoaXMuX19pbkZl
dGNoaW5nPSExO3JldHVybiBrfSxnZXRDdXJyZW50RmluZFZhbHVlOmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuX192YWx9LF9oaWRlSWZOb3RBY3RpdmVJbnB1dDpmdW5j
dGlvbigpe3RoaXMuX2Rvd249ITE7dS5hY3RpdmVFbGVtZW50IT10aGlzLiRJbnB1
dFswXSYmdGhpcy5oaWRlKCl9LApfZGVsYXllZEhpZGVTdGFydDpmdW5jdGlvbigp
e3RoaXMuX19kZWxheWVkSGlkZT1zZXRUaW1lb3V0KHRoaXMuX2hpZGVJZk5vdEFj
dGl2ZUlucHV0LmJpbmQodGhpcyksNTAwKX0sX2RlbGF5ZWRIaWRlRW5kOmZ1bmN0
aW9uKCl7dGhpcy5fX2RlbGF5ZWRIaWRlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX19k
ZWxheWVkSGlkZSksdGhpcy5fX2RlbGF5ZWRIaWRlPW51bGwpfSxfb25Nb3VzZVdo
ZWVsOmZ1bmN0aW9uKGEpe3ZhciBiPWEud2hlZWxEZWx0YXx8LTEqYS5kZXRhaWw7
aWYoYil7dmFyIGM9YS5jdXJyZW50VGFyZ2V0LGQ9Yy5zY3JvbGxUb3AsZT1jLnNj
cm9sbEhlaWdodCxjPWMuY2xpZW50SGVpZ2h0O2lmKDA8Yj8wPT1kOmU8PWMrZClh
LnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKX19LF9vblNjcm9s
bDpmdW5jdGlvbigpe3RoaXMuX2Rvd249ITE7dGhpcy5fZGVsYXllZEhpZGVFbmQo
KX0sX2ZpcmVBY3RpdmVFdmVudDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5maXJl
VHJpZ2dlcih7dHlwZToic3VnZ2VzdHM6YWN0aXZlIisKKGE/IkluIjoiT3V0Iil9
KX19KTtxLnByb3RvdHlwZS5nZXRTdWdnZXN0V29yZHM9cS5wcm90b3R5cGUuZ2V0
RmluZFdvcmRzO24udWkuc3VnZ2VzdD1xfShkb2N1bWVudCx0aGlzLmFqcyx0aGlz
LmFqcy4kKTsK
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=cookie.js
Content-Type: application/x-javascript; name=cookie.js
Content-Location: https://img.imgsmail.ru/p/js/cookie.js
Content-Transfer-Encoding: Base64
Ly8gPT1DbG9zdXJlQ29tcGlsZXI9PQ0KLy8gQGNvbXBpbGF0aW9uX2xldmVsIFNJ
TVBMRV9PUFRJTUlaQVRJT05TDQovLyBAd2FybmluZ19sZXZlbCBWRVJCT1NFDQov
LyBAanNjb21wX3dhcm5pbmcgbWlzc2luZ1Byb3BlcnRpZXMNCi8vIEBvdXRwdXRf
ZmlsZV9uYW1lIGNvb2tpZS5taW4uanMNCi8vIEBjaGVja190eXBlcw0KLy8gPT0v
Q2xvc3VyZUNvbXBpbGVyPT0NCg0KLyoqDQogKiBNYWlsLlJ1IFMtY29va2llIHBh
cnNlciBwbHVnaW4NCiAqIENvcHlyaWdodCAoYykgMjAxMiBNYWlsLlJ1DQogKi8N
CihmdW5jdGlvbihnbG9iYWwpIHsNCg0KLyoqDQogKiBAcGFyYW0ge3N0cmluZ30g
bmFtZSBjb29raWUgbmFtZQ0KICogQHBhcmFtIHsoc3RyaW5nfCopPX0gdmFsdWUg
Y29va2llIHZhbHVlDQogKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgT3B0aW9u
cw0KICogQHJldHVybiB7KHN0cmluZ3x1bmRlZmluZWQpfQ0KICovDQpmdW5jdGlv
biBjb29raWUobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHsNCglpZih2YWx1ZSAhPT0g
dm9pZCAwKSB7DQoJCXZhciBkYXRlOw0KCQkNCgkJb3B0aW9ucyA9IG9wdGlvbnMg
fHwge307DQoJCWlmICh2YWx1ZSA9PT0gbnVsbCkgew0KCQkJdmFsdWUgPSAnJzsN
CgkJCW9wdGlvbnMuZXhwaXJlcyA9IC0xOw0KCQl9DQoJCQ0KCQl2YWx1ZSA9IHZh
bHVlICsgIiI7DQoJCS8vdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUg
KyAiIik7DQoJCQ0KCQlkb2N1bWVudC5jb29raWUgPSANCgkJCW5hbWUgKyAnPScg
KyB2YWx1ZSArIA0KCQkJKG9wdGlvbnMuZXhwaXJlcyAmJg0KCQkJCShkYXRlID0N
CgkJCQkJdHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PSAnbnVtYmVyJyAmJg0KCQkJ
CQkJKGRhdGUgPSBuZXcgRGF0ZSgpKSwNCgkJCQkJCWRhdGUuc2V0VGltZShkYXRl
LmdldFRpbWUoKSArIChvcHRpb25zLmV4cGlyZXMgKiAyNCAqIDYwICogNjAgKiAx
MDAwKSksDQoJCQkJCQlkYXRlDQoJCQkJCXx8DQoJCQkJCSJ0b1VUQ1N0cmluZyIg
aW4gb3B0aW9ucy5leHBpcmVzICYmDQoJCQkJCQlvcHRpb25zLmV4cGlyZXMNCgkJ
CQkpICYmICgnOyBleHBpcmVzPScgKyBkYXRlLnRvVVRDU3RyaW5nKCkpIHx8ICIi
KSArDQoJCQkob3B0aW9ucy5wYXRoID8gKCc7IHBhdGg9JyArIG9wdGlvbnMucGF0
aCkgOiAiIikgKw0KCQkJKG9wdGlvbnMuZG9tYWluID8gKCc7IGRvbWFpbj0nICsg
b3B0aW9ucy5kb21haW4pIDogIiIpICsNCgkJCShvcHRpb25zLnNlY3VyZSA/ICc7
IHNlY3VyZScgOiAnJyk7DQoJCQkNCgkJcmV0dXJuIHZhbHVlOw0KCX0NCgllbHNl
IHsNCgkJaWYgKChkb2N1bWVudC5jb29raWUgfHwgIiIpICE9PSAiIikgew0KCQkJ
dmFsdWUgPSAoZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58
ICkiICsgbmFtZSArICJcXD0oXFxTKikoPzo7IHwkKSIpKSB8fCBbXSlbMV07DQoJ
CQlyZXR1cm4gdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlIC8qZGVj
b2RlVVJJQ29tcG9uZW50KHZhbHVlKSovOw0KCQl9DQoJfQ0KDQp9DQoNCi8vZXhw
b3J0DQp2YXIgbWFpbF9nbG9iYWxfbmFtZXNwYWNlID0gZ2xvYmFsWyJtJHBvcnRh
bCJdOw0KaWYoIW1haWxfZ2xvYmFsX25hbWVzcGFjZSltYWlsX2dsb2JhbF9uYW1l
c3BhY2UgPSBnbG9iYWxbIm0kcG9ydGFsIl0gPSB7fTsNCg0KbWFpbF9nbG9iYWxf
bmFtZXNwYWNlWyJjb29raWUiXSA9IGNvb2tpZTsNCg0KDQp9KSh3aW5kb3cpOw0K
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=s_cookie.js
Content-Type: application/x-javascript; name=s_cookie.js
Content-Location: https://img.imgsmail.ru/p/js/s_cookie.js
Content-Transfer-Encoding: Base64
Ly8gPT1DbG9zdXJlQ29tcGlsZXI9PQ0KLy8gQGNvbXBpbGF0aW9uX2xldmVsIFNJ
TVBMRV9PUFRJTUlaQVRJT05TDQovLyBAd2FybmluZ19sZXZlbCBWRVJCT1NFDQov
LyBAanNjb21wX3dhcm5pbmcgbWlzc2luZ1Byb3BlcnRpZXMNCi8vIEBvdXRwdXRf
ZmlsZV9uYW1lIHNfY29va2llLm1pbi5qcw0KLy8gQGNoZWNrX3R5cGVzDQovLyA9
PS9DbG9zdXJlQ29tcGlsZXI9PQ0KDQovKioNCiAqIE1haWwuUnUgUy1jb29raWUg
cGFyc2VyIHBsdWdpbg0KICogQ29weXJpZ2h0IChjKSAyMDEyIE1haWwuUnUNCiAq
Lw0KKGZ1bmN0aW9uKGdsb2JhbCkgew0KDQovKioNCiAqIEBwcml2YXRlDQogKiBA
cGFyYW0ge3N0cmluZ30gZmllbGQgRmllbGQgbmFtZSBpbiAnUycgY29va2llDQog
KiBAcGFyYW0geyhzdHJpbmd8Kik9fSB2YWx1ZSBpZiB2YWx1ZSA9PT0gbnVsbCAt
IHJlbW92ZSBjb29raWUgZmllbGQsIGlmIHZhbHVlID09PSB1bmRlZmluZWQgLSBn
ZXQgZmllbGQgdmFsdWUNCiAqIEByZXR1cm4geyhzdHJpbmd8dW5kZWZpbmVkfCop
fQ0KICovDQpmdW5jdGlvbiBTX2Nvb2tpZV9zZXRfZ2V0X3JlbW92ZShmaWVsZCwg
dmFsdWUpIHsNCgl2YXIgY29va2llID0gZ2xvYmFsLm0kcG9ydGFsLmNvb2tpZSwN
CgkJY3VycmVudENvb2tpZQ0KCSAgLCBjdXJyZW50Q29va2llVmFsdWUNCgkgICwg
ZCA9ICIubWFpbC5ydSIvL3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZQ0KCSAgLCBw
ID0gIi8iDQoJICAsIFJFX2Nvb2tpZUZpZWxkX2ZpbmQgPSBuZXcgUmVnRXhwKCIo
XnxcXHwpKCIgKyBmaWVsZCArICI9KSguKj8pKFxcfHwkKSIpDQoJOw0KDQoJaWYg
KGZpZWxkKSB7DQoJCWN1cnJlbnRDb29raWUgPSBjb29raWUoInMiKSB8fCAnJzsN
CgkJY3VycmVudENvb2tpZVZhbHVlID0gKGN1cnJlbnRDb29raWUubWF0Y2goUkVf
Y29va2llRmllbGRfZmluZCkgfHwgW10pWzNdOw0KDQoJCWlmKHZhbHVlICE9PSB2
b2lkIDApIHsNCgkJCS8vIFdyaXRlDQoJCQljb29raWUoDQoJCQkJInMiLA0KCQkJ
CWN1cnJlbnRDb29raWVWYWx1ZSB8fCB2YWx1ZSA9PT0gbnVsbCA/DQoJCQkJCWN1
cnJlbnRDb29raWUucmVwbGFjZShSRV9jb29raWVGaWVsZF9maW5kLA0KCQkJCQkJ
dmFsdWUgPT09IG51bGwgPw0KCQkJCQkJCWZ1bmN0aW9uKCkge3JldHVybiBhcmd1
bWVudHNbNl0uaW5kZXhPZihhcmd1bWVudHNbMF0pID09PSAwID8gJycgOiBhcmd1
bWVudHNbNF07fSA6IC8vcmVtb3ZlIGZpZWxkDQoJCQkJCQkJIiQxJDIiICsgdmFs
dWUgKyAiJDQiCQkJCS8vcmV3cml0ZSBmaWVsZA0KCQkJCQkpDQoJCQkJCToNCgkJ
CQkJKGN1cnJlbnRDb29raWUgPw0KCQkJCQkJY3VycmVudENvb2tpZSArICJ8IiA6
DQoJCQkJCQkiIikgKw0KCQkJCQlmaWVsZCArICI9IiArIHZhbHVlLA0KCQkJCXsN
CgkJCQkJZG9tYWluIDogZCwvLyIubWFpbC5ydSIgbW9zdCBvZiB0aGUgdGltZQ0K
CQkJCQlleHBpcmVzIDogMzY1LA0KCQkJCQlwYXRoIDogcA0KCQkJCX0NCgkJCSk7
DQoJCX0NCgkJZWxzZSB7DQoJCQkvLyBSZWFkDQoJCQl2YWx1ZSA9IGN1cnJlbnRD
b29raWVWYWx1ZTsNCgkJfQ0KDQoJCS8vIFJldHVybg0KCQlyZXR1cm4gdmFsdWU7
DQoJfQ0KCXJldHVybjsNCn0NCg0KLyoqDQogKiBAY29uc3QNCiAqIEBlbnVtKHN0
cmluZykNCiAqLw0KdmFyIFBST0pFQ1RTX01BUCA9IHsNCgkic3BsYXNoIiA6ICJz
IiwJLy/Qk9C70LDQstC90LDRjw0KCSJuZXdzIiA6ICJuIiwJLy/QndC+0LLQvtGB
0YLQuA0KCSJhZmlzaGEiIDogImEiLAkvL9CQ0YTQuNGI0LANCgkiYXV0byIgOiAi
YXYiLAkvL9CQ0LLRgtC+DQoJImxhZHkiIDogImwiLAkvL9Cb0LXQtNC4DQoJImhv
cm8iIDogImgiLAkvL9CT0L7RgNC+0YHQutC+0L/Riw0KCSJwb2dvZGEiIDogInAi
LAkvL9Cf0L7Qs9C+0LTQsA0KCSJtYWlsIiA6ICJtIiwJLy/Qn9C+0YfRgtCwDQoJ
InByb21haWwiIDogInBtIiwvL9Cf0YDQvi3Qv9C+0YfRgtCwDQoJImJsb2dzIiA6
ICJiIiwJLy/QkdC70L7Qs9C4DQoJImZvdG8iIDogImYiLAkvL9Ck0L7RgtC+DQoJ
InZpZGVvIiA6ICJ2IiwJLy/QktC40LTQtdC+DQoJIm15IiA6ICJteSIsCS8v0JzQ
vtC5INC80LjRgA0KCSJhZ2VudCIgOiAiYWciLAkvL9CQ0LPQtdC90YINCgkidG9y
ZyIgOiAidCIsCS8v0KLQvtGA0LMNCgkibG92ZSIgOiAibHYiLAkvL9CX0L3QsNC6
0L7QvNGB0YLQstCwDQoJImdhbWUiIDogImciLAkvL9CY0LPRgNGLDQoJImhpLXRl
Y2giIDogImh0IiwvL0hpLXRlY2gNCgkibWFwcyIgOiAibWFwIgkvL9Ca0LDRgNGC
0YsNCn07DQoNCnZhciBpbnN0YW5jZTsNCg0KZnVuY3Rpb24gU19Db29raWUocHJv
amVjdE5hbWUpIHsNCglpZighaW5zdGFuY2UpIHsNCgkJcHJvamVjdE5hbWUgPSBQ
Uk9KRUNUU19NQVBbcHJvamVjdE5hbWVdOw0KDQoJCWluc3RhbmNlID0gbmV3IC8q
KiBAY29uc3RydWN0b3IgKi9mdW5jdGlvbigpIHsNCgkJCWZ1bmN0aW9uIF90aHJv
d19ub1Byb2plY3RfRXJyb3IoKSB7DQoJCQkJdGhyb3cgbmV3IEVycm9yKCJwcm9q
ZWN0IG11c3QgYmUgc2V0Iik7DQoJCQl9DQoNCgkJCWZ1bmN0aW9uIF90aHJvd19u
b1ZhbHVlX0Vycm9yKCkgew0KCQkJCXRocm93IG5ldyBFcnJvcigibmVlZCB2YWx1
ZSIpOw0KCQkJfQ0KDQoJCQlmdW5jdGlvbiBfZ2V0TG9jYWwoZmllbGROYW1lKSB7
DQoJCQkJaWYoIXByb2plY3ROYW1lKV90aHJvd19ub1Byb2plY3RfRXJyb3IoKTsN
Cg0KCQkJCXJldHVybiBTX2Nvb2tpZV9zZXRfZ2V0X3JlbW92ZShwcm9qZWN0TmFt
ZSArICJfIiArIGZpZWxkTmFtZSk7DQoJCQl9DQoJCQl0aGlzWyJnZXRMb2NhbCJd
ID0gX2dldExvY2FsOw0KDQoJCQl0aGlzWyJzZXRMb2NhbCJdID0gZnVuY3Rpb24o
ZmllbGROYW1lLCBmaWVsZFZhbHVlKSB7DQoJCQkJaWYoIXByb2plY3ROYW1lKV90
aHJvd19ub1Byb2plY3RfRXJyb3IoKTsNCgkJCQlpZihmaWVsZFZhbHVlID09IHZv
aWQgMClfdGhyb3dfbm9WYWx1ZV9FcnJvcigpOw0KDQoJCQkJU19jb29raWVfc2V0
X2dldF9yZW1vdmUocHJvamVjdE5hbWUgKyAiXyIgKyBmaWVsZE5hbWUsIGZpZWxk
VmFsdWUpOw0KDQoJCQkJcmV0dXJuIF9nZXRMb2NhbChmaWVsZE5hbWUpOw0KCQkJ
fTsNCg0KCQkJdGhpc1sicmVtb3ZlTG9jYWwiXSA9IGZ1bmN0aW9uKGZpZWxkTmFt
ZSkgew0KCQkJCWlmKCFwcm9qZWN0TmFtZSlfdGhyb3dfbm9Qcm9qZWN0X0Vycm9y
KCk7DQoNCgkJCQl2YXIgcmVzdWx0ID0gX2dldExvY2FsKGZpZWxkTmFtZSk7DQoN
CgkJCQlTX2Nvb2tpZV9zZXRfZ2V0X3JlbW92ZShwcm9qZWN0TmFtZSArICJfIiAr
IGZpZWxkTmFtZSwgbnVsbCk7DQoNCgkJCQlyZXR1cm4gcmVzdWx0Ow0KCQkJfTsN
Cg0KCQkJZnVuY3Rpb24gX2dldEdsb2JhbChmaWVsZE5hbWUpIHsNCgkJCQlyZXR1
cm4gU19jb29raWVfc2V0X2dldF9yZW1vdmUoZmllbGROYW1lKTsNCgkJCX0NCgkJ
CXRoaXNbImdldEdsb2JhbCJdID0gX2dldEdsb2JhbDsNCg0KCQkJdGhpc1sic2V0
R2xvYmFsIl0gPSBmdW5jdGlvbihmaWVsZE5hbWUsIGZpZWxkVmFsdWUpIHsNCgkJ
CQlpZihmaWVsZFZhbHVlID09IHZvaWQgMClfdGhyb3dfbm9WYWx1ZV9FcnJvcigp
Ow0KDQoJCQkJU19jb29raWVfc2V0X2dldF9yZW1vdmUoZmllbGROYW1lLCBmaWVs
ZFZhbHVlKTsNCg0KCQkJCXJldHVybiBfZ2V0R2xvYmFsKGZpZWxkTmFtZSk7DQoJ
CQl9Ow0KDQoJCQl0aGlzWyJyZW1vdmVHbG9iYWwiXSA9IGZ1bmN0aW9uKGZpZWxk
TmFtZSkgew0KCQkJCXZhciByZXN1bHQgPSBfZ2V0R2xvYmFsKGZpZWxkTmFtZSk7
DQoNCgkJCQlTX2Nvb2tpZV9zZXRfZ2V0X3JlbW92ZShmaWVsZE5hbWUsIG51bGwp
Ow0KDQoJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCX07DQoJCX07DQoJfQ0KDQoJcmV0
dXJuIGluc3RhbmNlOw0KfQ0KDQovL2V4cG9ydA0KdmFyIG1haWxfZ2xvYmFsX25h
bWVzcGFjZSA9IGdsb2JhbFsibSRwb3J0YWwiXTsNCmlmKCFtYWlsX2dsb2JhbF9u
YW1lc3BhY2UpbWFpbF9nbG9iYWxfbmFtZXNwYWNlID0gZ2xvYmFsWyJtJHBvcnRh
bCJdID0ge307DQoNCm1haWxfZ2xvYmFsX25hbWVzcGFjZVsiU19Db29raWUiXSA9
IFNfQ29va2llOw0KDQoNCn0pKHdpbmRvdyk7DQo=
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=core.js
Content-Type: application/x-javascript; name=core.js
Content-Location: https://js.imgsmail.ru/ts/1377502689/images/js/ru/build/core.js
Content-Transfer-Encoding: Base64
LyogMjAxMy0wOC0yNiAxMTozODo0NSAqLwoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pz
L3J1L2J1aWxkL2NvcmUuanMgc3RhcnQKCi8vIEBidWlsZAovLyBAYnVpbGQtbWlu
aWZ5Ci8vIEBkZXBsb3ktd2FpdC1mb3I6IGh0dHA6Ly9qcy5pbWdzbWFpbC5ydS91
L2pzL3J1L2J1aWxkL2NvcmUuanMKCmlmKCB0eXBlb2Ygd2luZG93Lm1haWxydSAh
PT0gJ29iamVjdCcgKXsKCS8vIENyZWF0ZSBnbG9iYWwgbmFtZXNwYWNlCgl3aW5k
b3cubWFpbHJ1ID0geyB1aToge30gfTsKfQoKCi8vIC4vZGF0YS9jb21tb24vanMv
YWpzL0FycmF5LmpzIHN0YXJ0CgovKioKICogQGF1dGhvcgkJCQlFZ29yIEhhbGlt
b25lbmtvIDx0ZXJtaTF1YzFAZ21haWwuY29tPgogKiBAY29tcGF0aWJpbGl0eQkJ
SmF2YVNjcmlwdCAxLjUrCiAqIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcv
ZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZTpHbG9iYWxfT2Jq
ZWN0czpBcnJheQogKiBQb2x5ZmlsbHMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20v
dGVybWkvRVM1LURPTS1TSElNCiAqLwoKdm9pZCBmdW5jdGlvbigpewoKInVzZSBz
dHJpY3QiOwoKdmFyIE5FRURfUFJFUEFSRV9TVFJJTkcgPSAoZnVuY3Rpb24oc3Ry
T2JqKSB7CgkJLy8gQ2hlY2sgZmFpbHVyZSBvZiBieS1pbmRleCBhY2Nlc3Mgb2Yg
c3RyaW5nIGNoYXJhY3RlcnMgKElFIDwgOSkKCQkvLyBhbmQgZmFpbHVyZSBvZiBg
MCBpbiBzdHJPYmpgIChSaGlubykKCQlyZXR1cm4gc3RyT2JqWzBdICE9ICJhIiB8
fCAhKDAgaW4gc3RyT2JqKTsKCX0pKE9iamVjdCgiYSIpKQoKCS8qKgoJICogQGNv
bnN0CgkgKiBAcGFyYW0ge09iamVjdH0gb2JqCgkgKi8KCSwgX3RvT2JqZWN0ID0g
ZnVuY3Rpb24ob2JqKSB7CgkJaWYgKG9iaiA9PSBudWxsKSAvLyB0aGlzIG1hdGNo
ZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQKCQkJdGhyb3cgbmV3IFR5cGVFcnJv
cigiTm90IGFuIG9iamVjdCIpOwoKCQkvLyBJZiB0aGUgaW1wbGVtZW50YXRpb24g
ZG9lc24ndCBzdXBwb3J0IGJ5LWluZGV4IGFjY2VzcyBvZgoJCS8vIHN0cmluZyBj
aGFyYWN0ZXJzIChleC4gSUUgPCA5KSwgc3BsaXQgdGhlIHN0cmluZwoJCWlmIChO
RUVEX1BSRVBBUkVfU1RSSU5HICYmIHR5cGVvZiBvYmogPT0gInN0cmluZyIgJiYg
b2JqKQoJCQlyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5zcGxpdC5jYWxsKG9iaiwg
IiIpOwoKCQlyZXR1cm4gT2JqZWN0KG9iaik7Cgl9CgoJLyoqIEBjb25zdCAqLwoJ
LCBfRnVuY3Rpb25fYXBwbHlfID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5Cgkv
KiogQGNvbnN0ICovCgksIF9BcnJheV9zbGljZV8gPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UKCgkvKioKCSAqIENhbGwgX2Z1bmN0aW9uCgkgKiBAY29uc3QKCSAqIEBw
YXJhbSB7RnVuY3Rpb259IF9mdW5jdGlvbiBmdW5jdGlvbiB0byBjYWxsCgkgKiBA
cGFyYW0geyp9IGNvbnRleHQKCSAqIEBwYXJhbSB7Li4ufSB2YXJfYXJncwoJICog
QHJldHVybiB7Kn0gbWl4ZWQKCSAqIEB2ZXJzaW9uIDIKCSAqLwoJLCBfY2FsbF9m
dW5jdGlvbiA9IGZ1bmN0aW9uKF9mdW5jdGlvbiwgY29udGV4dCwgdmFyX2FyZ3Mp
IHsKCQkvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBp
cyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgoJCS8vIGl0IHdpbGwgdGhyb3cgVHlw
ZUVycm9yCgkJcmV0dXJuIF9GdW5jdGlvbl9hcHBseV8uY2FsbChfZnVuY3Rpb24s
IGNvbnRleHQsIF9BcnJheV9zbGljZV8uY2FsbChhcmd1bWVudHMsIDIpKQoJfQoK
CSwgX0FycmF5X2luZGV4T2ZfID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YKCgks
IF9BcnJheV9sYXN0SW5kZXhPZl8gPSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4
T2YKCgksIF9BcnJheV9mb3JFYWNoXyA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNo
CgoJLCBfQXJyYXlfZXZlcnlfID0gQXJyYXkucHJvdG90eXBlLmV2ZXJ5CgoJLCBf
QXJyYXlfc29tZV8gPSBBcnJheS5wcm90b3R5cGUuc29tZQoKCSwgX0FycmF5X2Zp
bHRlcl8gPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyCgoJLCBfQXJyYXlfbWFwXyA9
IEFycmF5LnByb3RvdHlwZS5tYXAKCgksIF9BcnJheV9yZWR1Y2VfID0gQXJyYXku
cHJvdG90eXBlLnJlZHVjZQoKCSwgX0FycmF5X3JlZHVjZVJpZ2h0XyA9IEFycmF5
LnByb3RvdHlwZS5yZWR1Y2VSaWdodAoKCSwgX0FycmF5X2NvbnRhaW5zXyA9IEFy
cmF5LnByb3RvdHlwZVsiY29udGFpbnMiXQoKCSwgYXJyYXlfc29tZV9vcl9ldmVy
eQo7CgovKioKICogQXJyYXkucHJvdG90eXBlLmluZGV4T2YKICogRVM1IDE1LjQu
NC4xNAogKiBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTQKICogaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVu
Y2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaW5kZXhPZgogKgogKiBodHRwczovL2dp
c3QuZ2l0aHViLmNvbS8xMDM0NDI1CiAqCiAqIFJldHVybnMgdGhlIGZpcnN0IGlu
ZGV4IGF0IHdoaWNoIGEgZ2l2ZW4gZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhl
IGFycmF5LCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC4KICoKICogQHBhcmFt
IHtPYmplY3R9IGFycmF5CiAqIEBwYXJhbSB7Kn0gc2VhcmNoRWxlbWVudCBFbGVt
ZW50IHRvIGxvY2F0ZSBpbiB0aGUgYXJyYXkuCiAqIEBwYXJhbSB7bnVtYmVyfSBm
cm9tSW5kZXggVGhlIGluZGV4IGF0IHdoaWNoIHRvIGJlZ2luIHRoZSBzZWFyY2gu
IERlZmF1bHRzIHRvIDAsIGkuZS4gdGhlIHdob2xlIGFycmF5IHdpbGwgYmUgc2Vh
cmNoZWQuIElmIHRoZSBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8g
dGhlIGxlbmd0aCBvZiB0aGUgYXJyYXksIC0xIGlzIHJldHVybmVkLCBpLmUuIHRo
ZSBhcnJheSB3aWxsIG5vdCBiZSBzZWFyY2hlZC4gSWYgbmVnYXRpdmUsIGl0IGlz
IHRha2VuIGFzIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheS4g
Tm90ZSB0aGF0IGV2ZW4gd2hlbiB0aGUgaW5kZXggaXMgbmVnYXRpdmUsIHRoZSBh
cnJheSBpcyBzdGlsbCBzZWFyY2hlZCBmcm9tIGZyb250IHRvIGJhY2suIElmIHRo
ZSBjYWxjdWxhdGVkIGluZGV4IGlzIGxlc3MgdGhhbiAwLCB0aGUgd2hvbGUgYXJy
YXkgd2lsbCBiZSBzZWFyY2hlZC4KICogQHJldHVybiB7bnVtYmVyfQogKi8KaWYo
IUFycmF5WyJpbmRleE9mIl0pIHsKCUFycmF5WyJpbmRleE9mIl0gPSBfQXJyYXlf
aW5kZXhPZl8gPwoJCWZ1bmN0aW9uKGFycmF5LCBzZWFyY2hFbGVtZW50LCBmcm9t
SW5kZXgpIHsKCQkJcmV0dXJuIF9BcnJheV9pbmRleE9mXy5hcHBseShhcnJheSwg
X0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50cywgMSkpOwoJCX0KCQk6CgkJZnVu
Y3Rpb24oYXJyYXksIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkgewoJCQl2YXIg
dGhpc0FycmF5ID0gX3RvT2JqZWN0KGFycmF5KQoJCQkJLCBsZW5ndGggPSB0aGlz
QXJyYXkubGVuZ3RoID4+PiAwCgkJCTsKCgkJCWlmKCFsZW5ndGggfHwgKGZyb21J
bmRleCA9IH5+ZnJvbUluZGV4KSA+PSBsZW5ndGgpcmV0dXJuIC0xOwoKCQkJZm9y
ICgKCQkJCS8vIGluaXRpYWxpemUgY291bnRlciAoYWxsb3cgZm9yIG5lZ2F0aXZl
IHN0YXJ0SW5kZXgpCgkJCQlmcm9tSW5kZXggPSAobGVuZ3RoICsgZnJvbUluZGV4
KSAlIGxlbmd0aCA7CgkJCQkvLyBsb29wIGlmIGluZGV4IGlzIHNtYWxsZXIgdGhh
biBsZW5ndGgsCgkJCQkvLyBpbmRleCBpcyBzZXQgaW4gKHBvc3NpYmx5IHNwYXJz
ZSkgYXJyYXkKCQkJCS8vIGFuZCBpdGVtIGF0IGluZGV4IGlzIG5vdCBpZGVudGlj
YWwgdG8gdGhlIHNlYXJjaGVkIG9uZQoJCQkJZnJvbUluZGV4IDwgbGVuZ3RoICYm
ICghKGZyb21JbmRleCBpbiB0aGlzQXJyYXkpIHx8IHRoaXNBcnJheVtmcm9tSW5k
ZXhdICE9PSBzZWFyY2hFbGVtZW50KSA7CgkJCQkvLyBpbmNyZW1lbnQgY291bnRl
cgoJCQkJZnJvbUluZGV4KysKCQkJCSl7fQoKCQkJLy8gaWYgY291bnRlciBlcXVh
bHMgbGVuZ3RoIChub3QgZm91bmQpLCByZXR1cm4gLTEsIG90aGVyd2lzZSBjb3Vu
dGVyCgkJCXJldHVybiBmcm9tSW5kZXggXiBsZW5ndGggPyBmcm9tSW5kZXggOiAt
MTsKCQl9Cgk7Cn0KCi8qKgogKiBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YK
ICogRVM1IDE1LjQuNC4xNQogKiBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40
LjQuMTUKICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNj
cmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvbGFzdEluZGV4T2YK
ICogUmV0dXJucyB0aGUgbGFzdCBpbmRleCBhdCB3aGljaCBhIGdpdmVuIGVsZW1l
bnQgY2FuIGJlIGZvdW5kIGluIHRoZSBhcnJheSwgb3IgLTEgaWYgaXQgaXMgbm90
IHByZXNlbnQuIFRoZSBhcnJheSBpcyBzZWFyY2hlZCBiYWNrd2FyZHMsIHN0YXJ0
aW5nIGF0IGZyb21JbmRleC4KICogQHBhcmFtIHtPYmplY3R9IGFycmF5CiAqIEBw
YXJhbSB7Kn0gc2VhcmNoRWxlbWVudCBFbGVtZW50IHRvIGxvY2F0ZSBpbiB0aGUg
YXJyYXkuCiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IGF0
IHdoaWNoIHRvIHN0YXJ0IHNlYXJjaGluZyBiYWNrd2FyZHMuIERlZmF1bHRzIHRv
IHRoZSBhcnJheSdzIGxlbmd0aCwgaS5lLiB0aGUgd2hvbGUgYXJyYXkgd2lsbCBi
ZSBzZWFyY2hlZC4gSWYgdGhlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIHdob2xlIGFycmF5IHdp
bGwgYmUgc2VhcmNoZWQuIElmIG5lZ2F0aXZlLCBpdCBpcyB0YWtlbiBhcyB0aGUg
b2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIE5vdGUgdGhhdCBldmVu
IHdoZW4gdGhlIGluZGV4IGlzIG5lZ2F0aXZlLCB0aGUgYXJyYXkgaXMgc3RpbGwg
c2VhcmNoZWQgZnJvbSBiYWNrIHRvIGZyb250LiBJZiB0aGUgY2FsY3VsYXRlZCBp
bmRleCBpcyBsZXNzIHRoYW4gMCwgLTEgaXMgcmV0dXJuZWQsIGkuZS4gdGhlIGFy
cmF5IHdpbGwgbm90IGJlIHNlYXJjaGVkLgogKiBAcmV0dXJuIHtudW1iZXJ9CiAq
LwppZighQXJyYXlbImxhc3RJbmRleE9mIl0pIHsKCUFycmF5WyJsYXN0SW5kZXhP
ZiJdID0gX0FycmF5X2xhc3RJbmRleE9mXyA/CgkJZnVuY3Rpb24oYXJyYXksIHNl
YXJjaEVsZW1lbnQsIGZyb21JbmRleCkgewoJCQlyZXR1cm4gX0FycmF5X2xhc3RJ
bmRleE9mXy5hcHBseShhcnJheSwgX0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50
cywgMSkpOwoJCX0KCQk6CgkJZnVuY3Rpb24oYXJyYXksIHNlYXJjaEVsZW1lbnQs
IGZyb21JbmRleCkgewoJCQl2YXIgdGhpc0FycmF5ID0gX3RvT2JqZWN0KGFycmF5
KQoJCQkJLCBsZW5ndGggPSB0aGlzQXJyYXkubGVuZ3RoID4+PiAwCgkJCQksIGkK
CQkJOwoKCQkJaWYoIWxlbmd0aClyZXR1cm4gLTE7CgoJCQlpID0gbGVuZ3RoIC0g
MTsKCQkJaWYoZnJvbUluZGV4ICE9PSB2b2lkIDApaSA9IE1hdGgubWluKGksICtm
cm9tSW5kZXgpOwoKCQkJLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMKCQkJaSA9
IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKCgkJCWZvciAoOyBp
ID49IDA7IGktLSkgewoJCQkJaWYgKGkgaW4gdGhpc0FycmF5ICYmIHRoaXNBcnJh
eVtpXSA9PT0gc2VhcmNoRWxlbWVudCkgewoJCQkJCXJldHVybiBpOwoJCQkJfQoJ
CQl9CgkJCXJldHVybiAtMTsKCQl9Cgk7Cn0KCi8qKgogKiBBcnJheS5wcm90b3R5
cGUuZm9yRWFjaAogKiBFUzUgMTUuNC40LjE4CiAqIGh0dHA6Ly9lczUuZ2l0aHVi
LmNvbS8jeDE1LjQuNC4xOAogKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9hcnJheS9m
b3JFYWNoCiAqIEV4ZWN1dGVzIGEgcHJvdmlkZWQgZnVuY3Rpb24gb25jZSBwZXIg
YXJyYXkgZWxlbWVudC4KICogQHBhcmFtIHtPYmplY3R9IGFycmF5CiAqIEBwYXJh
bSB7RnVuY3Rpb259IGl0ZXJhdG9yIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgZm9yIGVh
Y2ggZWxlbWVudC4KICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgT2JqZWN0IHRv
IHVzZSBhcyB0aGlzIHdoZW4gZXhlY3V0aW5nIGNhbGxiYWNrLgogKi8KaWYoIUFy
cmF5WyJmb3JFYWNoIl0pIHsKCUFycmF5WyJmb3JFYWNoIl0gPSBfQXJyYXlfZm9y
RWFjaF8gPwoJCWZ1bmN0aW9uKGFycmF5LCBpdGVyYXRvciwgY29udGV4dCkgewoJ
CQlyZXR1cm4gX0FycmF5X2ZvckVhY2hfLmFwcGx5KGFycmF5LCBfQXJyYXlfc2xp
Y2VfLmNhbGwoYXJndW1lbnRzLCAxKSk7CgkJfQoJCToKCQlmdW5jdGlvbihhcnJh
eSwgaXRlcmF0b3IsIGNvbnRleHQpIHsKCQkJdmFyIHRoaXNBcnJheSA9IF90b09i
amVjdChhcnJheSkKCQkJCSwgbGVuZ3RoID0gdGhpc0FycmF5Lmxlbmd0aCA+Pj4g
MAoJCQkJLCBpID0gLTEKCQkJOwoKCQkJd2hpbGUgKCsraSA8IGxlbmd0aCkgewoJ
CQkJaWYgKGkgaW4gdGhpc0FycmF5KSB7CgkJCQkJX2NhbGxfZnVuY3Rpb24oaXRl
cmF0b3IsIGNvbnRleHQsIHRoaXNBcnJheVtpXSwgaSwgdGhpc0FycmF5KTsKCQkJ
CX0KCQkJfQoJCX0KCTsKfQoKYXJyYXlfc29tZV9vcl9ldmVyeSA9IF9BcnJheV9l
dmVyeV8gPwoJbnVsbAoJOgoJZnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrLCB0aGlz
T2JqZWN0LCBfb3B0aW9uX2lzQWxsKSB7CgkJaWYoX29wdGlvbl9pc0FsbCA9PT0g
dm9pZCAwKV9vcHRpb25faXNBbGwgPSB0cnVlOy8vRGVmYXVsdCB2YWx1ZSA9IHRy
dWUKCgkJdmFyIHJlc3VsdCA9IF9vcHRpb25faXNBbGw7CgoJCUFycmF5WyJmb3JF
YWNoIl0oYXJyYXksIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewoJCQlpZihyZXN1
bHQgPT0gX29wdGlvbl9pc0FsbCkgewoJCQkJcmVzdWx0ID0gISFfY2FsbF9mdW5j
dGlvbihjYWxsYmFjaywgdGhpc09iamVjdCwgdmFsdWUsIGluZGV4LCB0aGlzKTsK
CQkJfQoJCX0sIGFycmF5KTsKCgkJcmV0dXJuIHJlc3VsdDsKCX0KOwoKLyoqCiAq
IEFycmF5LnByb3RvdHlwZS5ldmVyeQogKiBFUzUgMTUuNC40LjE2CiAqIGh0dHA6
Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNgogKiBodHRwczovL2RldmVsb3Bl
ci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2Jq
ZWN0cy9BcnJheS9ldmVyeQogKiBUZXN0cyB3aGV0aGVyIGFsbCBlbGVtZW50cyBp
biB0aGUgYXJyYXkgcGFzcyB0aGUgdGVzdCBpbXBsZW1lbnRlZCBieSB0aGUgcHJv
dmlkZWQgZnVuY3Rpb24uCiAqIEBwYXJhbSB7T2JqZWN0fSBhcnJheQogKiBAcGFy
YW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBGdW5jdGlvbiB0byB0ZXN0IGZvciBlYWNo
IGVsZW1lbnQuCiAqIEBwYXJhbSB7T2JqZWN0PX0gdGhpc09iamVjdCBPYmplY3Qg
dG8gdXNlIGFzIHRoaXMgd2hlbiBleGVjdXRpbmcgY2FsbGJhY2suCiAqIEByZXR1
cm4ge2Jvb2xlYW59CiAqLwppZighQXJyYXlbImV2ZXJ5Il0pIHsKCUFycmF5WyJl
dmVyeSJdID0gX0FycmF5X2V2ZXJ5XyA/CgkJZnVuY3Rpb24oYXJyYXksIGNhbGxi
YWNrLCB0aGlzT2JqZWN0KSB7CgkJCXJldHVybiBfQXJyYXlfZXZlcnlfLmFwcGx5
KGFycmF5LCBfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzLCAxKSk7CgkJfQoJ
CToKCQlmdW5jdGlvbihhcnJheSwgY2FsbGJhY2ssIHRoaXNPYmplY3QpIHsKCQkJ
cmV0dXJuIGFycmF5X3NvbWVfb3JfZXZlcnkoYXJyYXksIGNhbGxiYWNrLCB0aGlz
T2JqZWN0KTsKCQl9Cgk7Cn0KLyoqCiAqIEFycmF5LnByb3RvdHlwZS5zb21lCiAq
IEVTNSAxNS40LjQuMTcKICogaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40
LjE3CiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3Jp
cHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L3NvbWUKICogVGVzdHMg
d2hldGhlciBzb21lIGVsZW1lbnQgaW4gdGhlIGFycmF5IHBhc3NlcyB0aGUgdGVz
dCBpbXBsZW1lbnRlZCBieSB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uCiAqIEBwYXJh
bSB7RnVuY3Rpb259IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIHRlc3QgZm9yIGVhY2gg
ZWxlbWVudC4KICogQHBhcmFtIHtPYmplY3Q9fSB0aGlzT2JqZWN0IE9iamVjdCB0
byB1c2UgYXMgdGhpcyB3aGVuIGV4ZWN1dGluZyBjYWxsYmFjay4KICogQHJldHVy
biB7Ym9vbGVhbn0KICovCmlmKCFBcnJheVsic29tZSJdKSB7CglBcnJheVsic29t
ZSJdID0gX0FycmF5X3NvbWVfID8KCQlmdW5jdGlvbihhcnJheSwgY2FsbGJhY2ss
IHRoaXNPYmplY3QpIHsKCQkJcmV0dXJuIF9BcnJheV9zb21lXy5hcHBseShhcnJh
eSwgX0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50cywgMSkpOwoJCX0KCQk6CgkJ
ZnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrLCB0aGlzT2JqZWN0KSB7CgkJCXJldHVy
biBhcnJheV9zb21lX29yX2V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgdGhpc09iamVj
dCwgZmFsc2UpOwoJCX0KCTsKfQoKLyoqCiAqIEFycmF5LnByb3RvdHlwZS5maWx0
ZXIKICogaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE3CiAqIGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNl
L2dsb2JhbF9PYmplY3RzL0FycmF5L2ZpbHRlcgogKiBDcmVhdGVzIGEgbmV3IGFy
cmF5IHdpdGggYWxsIGVsZW1lbnRzIHRoYXQgcGFzcyB0aGUgdGVzdCBpbXBsZW1l
bnRlZCBieSB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uCiAqIEBwYXJhbSB7RnVuY3Rp
b259IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBlbGVtZW50IG9mIHRo
ZSBhcnJheS4KICogQHBhcmFtIHtPYmplY3Q9fSB0aGlzT2JqZWN0IE9iamVjdCB0
byB1c2UgYXMgdGhpcyB3aGVuIGV4ZWN1dGluZyBjYWxsYmFjay4KICogQHJldHVy
biB7Ym9vbGVhbn0KICovCmlmKCFBcnJheVsiZmlsdGVyIl0pIHsKCUFycmF5WyJm
aWx0ZXIiXSA9IF9BcnJheV9maWx0ZXJfID8KCQlmdW5jdGlvbihhcnJheSwgY2Fs
bGJhY2ssIHRoaXNPYmplY3QpIHsKCQkJcmV0dXJuIF9BcnJheV9maWx0ZXJfLmFw
cGx5KGFycmF5LCBfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzLCAxKSk7CgkJ
fQoJCToKCQlmdW5jdGlvbihhcnJheSwgY2FsbGJhY2ssIHRoaXNPYmplY3QpIHsK
CQkJdmFyIHRoaXNBcnJheSA9IF90b09iamVjdChhcnJheSkKCQkJCSwgbGVuID0g
dGhpc0FycmF5Lmxlbmd0aCA+Pj4gMAoJCQkJLCByZXN1bHQgPSBbXQoJCQkJLCB2
YWwKCQkJOwoKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykKCQkJCWlm
IChpIGluIHRoaXNBcnJheSkgewoJCQkJCXZhbCA9IHRoaXNBcnJheVtpXTsvLyBp
biBjYXNlIGNhbGxiYWNrIG11dGF0ZXMgdGhpcwoJCQkJCWlmKF9jYWxsX2Z1bmN0
aW9uKGNhbGxiYWNrLCB0aGlzT2JqZWN0LCB2YWwsIGksIHRoaXNBcnJheSkpcmVz
dWx0LnB1c2godmFsKTsKCQkJCX0KCgkJCXJldHVybiByZXN1bHQ7CgkJfQoJOwp9
Ci8qKgogKiBBcnJheS5wcm90b3R5cGUubWFwCiAqIGh0dHA6Ly9lczUuZ2l0aHVi
LmNvbS8jeDE1LjQuNC4xOQogKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9t
YXAKICogQ3JlYXRlcyBhIG5ldyBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIGNh
bGxpbmcgYSBwcm92aWRlZCBmdW5jdGlvbiBvbiBldmVyeSBlbGVtZW50IGluIHRo
aXMgYXJyYXkuCiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEZ1bmN0aW9u
IHRoYXQgcHJvZHVjZXMgYW4gZWxlbWVudCBvZiB0aGUgbmV3IEFycmF5IGZyb20g
YW4gZWxlbWVudCBvZiB0aGUgY3VycmVudCBvbmUuCiAqIEBwYXJhbSB7T2JqZWN0
P30gdGhpc0FyZyBPYmplY3QgdG8gdXNlIGFzIHRoaXMgd2hlbiBleGVjdXRpbmcg
Y2FsbGJhY2suCiAqIEByZXR1cm4ge0FycmF5fQogKi8KaWYoIUFycmF5WyJtYXAi
XSkgewoJQXJyYXlbIm1hcCJdID0gX0FycmF5X21hcF8gPwoJCWZ1bmN0aW9uKGFy
cmF5LCBjYWxsYmFjaywgdGhpc0FyZykgewoJCQlyZXR1cm4gX0FycmF5X21hcF8u
YXBwbHkoYXJyYXksIF9BcnJheV9zbGljZV8uY2FsbChhcmd1bWVudHMsIDEpKTsK
CQl9CgkJOgoJCWZ1bmN0aW9uKGFycmF5LCBjYWxsYmFjaywgdGhpc0FyZykgewoJ
CQl2YXIgdGhpc0FycmF5ID0gX3RvT2JqZWN0KGFycmF5KQoJCQkJLCBsZW4gPSB0
aGlzQXJyYXkubGVuZ3RoID4+PiAwCgkJCQksIHJlc3VsdCA9IFtdCgkJCTsKCgkJ
CWZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspCgkJCQlpZiAoaSBpbiB0aGlz
QXJyYXkpIHsKCQkJCQlyZXN1bHRbaV0gPSBfY2FsbF9mdW5jdGlvbihjYWxsYmFj
aywgdGhpc0FyZywgdGhpc0FycmF5W2ldLCBpLCB0aGlzKTsKCQkJCX0KCgkJCXJl
dHVybiByZXN1bHQ7CgkJfQoJOwp9CgovKioKICogQXJyYXkucHJvdG90eXBlLnJl
ZHVjZQogKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2Ny
aXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9SZWR1Y2UKICoKICog
QXBwbHkgYSBmdW5jdGlvbiBhZ2FpbnN0IGFuIGFjY3VtdWxhdG9yIGFuZCBlYWNo
IHZhbHVlIG9mIHRoZSBhcnJheSAoZnJvbSBsZWZ0LXRvLXJpZ2h0KSBhcyB0byBy
ZWR1Y2UgaXQgdG8gYSBzaW5nbGUgdmFsdWUuCiAqIEBwYXJhbSB7T2JqZWN0fSBh
cnJheQogKiBAcGFyYW0ge0Z1bmN0aW9ufSBhY2N1bXVsYXRvciBGdW5jdGlvbiB0
byBleGVjdXRlIG9uIGVhY2ggdmFsdWUgaW4gdGhlIGFycmF5LCB0YWtpbmcgZm91
ciBhcmd1bWVudHM6CiAqCXByZXZpb3VzVmFsdWUgVGhlIHZhbHVlIHByZXZpb3Vz
bHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvbiBvZiB0aGUgY2FsbGJh
Y2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuIChTZWUgYmVsb3cuKQog
KgljdXJyZW50VmFsdWUgVGhlIGN1cnJlbnQgZWxlbWVudCBiZWluZyBwcm9jZXNz
ZWQgaW4gdGhlIGFycmF5LgogKglpbmRleCBUaGUgaW5kZXggb2YgdGhlIGN1cnJl
bnQgZWxlbWVudCBiZWluZyBwcm9jZXNzZWQgaW4gdGhlIGFycmF5LgogKglhcnJh
eSBUaGUgYXJyYXkgcmVkdWNlIHdhcyBjYWxsZWQgdXBvbi4KICogQHBhcmFtIHsq
PX0gaW5pdGlhbFZhbHVlIE9iamVjdCB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay4KICogQHJldHVy
biB7Kn0gc2luZ2xlIHZhbHVlCiAqLwppZighQXJyYXlbInJlZHVjZSJdKSB7CglB
cnJheVsicmVkdWNlIl0gPSBfQXJyYXlfcmVkdWNlXyA/CgkJZnVuY3Rpb24oYXJy
YXksIGFjY3VtdWxhdG9yLCBpbml0aWFsVmFsdWUpIHsKCQkJcmV0dXJuIF9BcnJh
eV9yZWR1Y2VfLmFwcGx5KGFycmF5LCBfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1l
bnRzLCAxKSk7CgkJfQoJCToKCQlmdW5jdGlvbihhcnJheSwgYWNjdW11bGF0b3Is
IGluaXRpYWxWYWx1ZSkgewoJCQl2YXIgdGhpc0FycmF5ID0gX3RvT2JqZWN0KGFy
cmF5KQoJCQkJLCBsID0gdGhpc0FycmF5Lmxlbmd0aCA+Pj4gMAoJCQkJLCBpID0g
MAoJCQk7CgoJCQlpZihsID09PSAwICYmIGFyZ3VtZW50cy5sZW5ndGggPD0gMSkg
ey8vID09IG9uIHB1cnBvc2UgdG8gdGVzdCAwIGFuZCBmYWxzZS4vLyBubyB2YWx1
ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkKCQkJ
CXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IGxlbmd0aCBpcyAwIGFuZCBubyBz
ZWNvbmQgYXJndW1lbnQiKTsKCQkJfQoKCQkJaWYoaW5pdGlhbFZhbHVlID09PSB2
b2lkIDApIHsKCQkJCWluaXRpYWxWYWx1ZSA9ICgrK2ksIHRoaXNBcnJheVswXSk7
CgkJCX0KCgkJCWZvciggOyBpIDwgbCA7ICsraSApIHsKCQkJCWlmKGkgaW4gdGhp
c0FycmF5KSB7CgkJCQkJaW5pdGlhbFZhbHVlID0gYWNjdW11bGF0b3IuY2FsbCh2
b2lkIDAsIGluaXRpYWxWYWx1ZSwgdGhpc0FycmF5W2ldLCBpLCB0aGlzQXJyYXkp
OwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gaW5pdGlhbFZhbHVlOwoJCX0KCTsKfQoK
LyoqCiAqIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodAogKiBodHRwczovL2Rl
dmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9i
YWxfT2JqZWN0cy9BcnJheS9yZWR1Y2VSaWdodAogKgogQXBwbHkgYSBmdW5jdGlv
biBzaW11bHRhbmVvdXNseSBhZ2FpbnN0IHR3byB2YWx1ZXMgb2YgdGhlIGFycmF5
IChmcm9tIHJpZ2h0LXRvLWxlZnQpIGFzIHRvIHJlZHVjZSBpdCB0byBhIHNpbmds
ZSB2YWx1ZS4KIHJlZHVjZVJpZ2h0IGV4ZWN1dGVzIHRoZSBjYWxsYmFjayBmdW5j
dGlvbiBvbmNlIGZvciBlYWNoIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXks
IGV4Y2x1ZGluZyBob2xlcyBpbiB0aGUgYXJyYXksIHJlY2VpdmluZyBmb3VyIGFy
Z3VtZW50czogdGhlIGluaXRpYWwgdmFsdWUgKG9yIHZhbHVlIGZyb20gdGhlIHBy
ZXZpb3VzIGNhbGxiYWNrIGNhbGwpLCB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQg
ZWxlbWVudCwgdGhlIGN1cnJlbnQgaW5kZXgsIGFuZCB0aGUgYXJyYXkgb3ZlciB3
aGljaCBpdGVyYXRpb24gaXMgb2NjdXJyaW5nLgoKIFRoZSBjYWxsIHRvIHRoZSBy
ZWR1Y2VSaWdodCBjYWxsYmFjayB3b3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIHRo
aXM6CiBhcnJheS5yZWR1Y2VSaWdodChmdW5jdGlvbihwcmV2aW91c1ZhbHVlLCBj
dXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgewogLy8gLi4uCiB9KTsKCiBUaGUg
Zmlyc3QgdGltZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgcHJldmlvdXNW
YWx1ZSBhbmQgY3VycmVudFZhbHVlIGNhbiBiZSBvbmUgb2YgdHdvIHZhbHVlcy4g
SWYgYW4gaW5pdGlhbFZhbHVlIHdhcyBwcm92aWRlZCBpbiB0aGUgY2FsbCB0byBy
ZWR1Y2VSaWdodCwgdGhlbiBwcmV2aW91c1ZhbHVlIHdpbGwgYmUgZXF1YWwgdG8g
aW5pdGlhbFZhbHVlIGFuZCBjdXJyZW50VmFsdWUgd2lsbCBiZSBlcXVhbCB0byB0
aGUgbGFzdCB2YWx1ZSBpbiB0aGUgYXJyYXkuIElmIG5vIGluaXRpYWxWYWx1ZSB3
YXMgcHJvdmlkZWQsIHRoZW4gcHJldmlvdXNWYWx1ZSB3aWxsIGJlIGVxdWFsIHRv
IHRoZSBsYXN0IHZhbHVlIGluIHRoZSBhcnJheSBhbmQgY3VycmVudFZhbHVlIHdp
bGwgYmUgZXF1YWwgdG8gdGhlIHNlY29uZC10by1sYXN0IHZhbHVlLgoKICogQHBh
cmFtIHtPYmplY3R9IGFycmF5CiAqIEBwYXJhbSB7RnVuY3Rpb259IGFjY3VtdWxh
dG9yIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZWFjaCB2YWx1ZSBpbiB0aGUgYXJy
YXkuCiAqIEBwYXJhbSB7Kj19IGluaXRpYWxWYWx1ZSBPYmplY3QgdG8gdXNlIGFz
IHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2Fs
bGJhY2suCiAqLwppZighQXJyYXlbInJlZHVjZVJpZ2h0Il0pIHsKCUFycmF5WyJy
ZWR1Y2VSaWdodCJdID0gX0FycmF5X3JlZHVjZVJpZ2h0XyA/CgkJZnVuY3Rpb24o
YXJyYXksIGFjY3VtdWxhdG9yLCBpbml0aWFsVmFsdWUpIHsKCQkJcmV0dXJuIF9B
cnJheV9yZWR1Y2VSaWdodF8uYXBwbHkoYXJyYXksIF9BcnJheV9zbGljZV8uY2Fs
bChhcmd1bWVudHMsIDEpKTsKCQl9CgkJOgoJCWZ1bmN0aW9uKGFycmF5LCBhY2N1
bXVsYXRvciwgaW5pdGlhbFZhbHVlKSB7CgkJCXZhciB0aGlzQXJyYXkgPSBfdG9P
YmplY3QoYXJyYXkpCgkJCQksIGwgPSB0aGlzQXJyYXkubGVuZ3RoID4+PiAwCgkJ
CTsKCgkJCWlmKGwgPT09IDAgJiYgYXJndW1lbnRzLmxlbmd0aCA8PSAxKSB7Ly8g
PT0gb24gcHVycG9zZSB0byB0ZXN0IDAgYW5kIGZhbHNlLi8vIG5vIHZhbHVlIHRv
IHJldHVybiBpZiBubyBpbml0aWFsIHZhbHVlLCBlbXB0eSBhcnJheQoJCQkJdGhy
b3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgbGVuZ3RoIGlzIDAgYW5kIG5vIHNlY29u
ZCBhcmd1bWVudCIpOwoJCQl9CgoJCQktLWw7CgkJCWlmKGluaXRpYWxWYWx1ZSA9
PT0gdm9pZCAwKSB7CgkJCQlpbml0aWFsVmFsdWUgPSAoLS1sLCB0aGlzQXJyYXlb
bCArIDFdKTsKCQkJfQoKCQkJZm9yKCA7IGwgPj0gMCA7IC0tbCkgewoJCQkJaWYo
bCBpbiB0aGlzQXJyYXkpIHsKCQkJCQlpbml0aWFsVmFsdWUgPSBfY2FsbF9mdW5j
dGlvbihhY2N1bXVsYXRvciwgdm9pZCAwLCBpbml0aWFsVmFsdWUsIHRoaXNBcnJh
eVtsXSwgbCwgdGhpc0FycmF5KTsKCQkJCX0KCQkJfQoKCQkJcmV0dXJuIGluaXRp
YWxWYWx1ZTsKCQl9Cgk7Cn0KCmlmKCFBcnJheVsiY29udGFpbnMiXSkgewoJQXJy
YXlbImNvbnRhaW5zIl0gPSBfQXJyYXlfY29udGFpbnNfID8KCQlmdW5jdGlvbihh
cnJheSwgaXRlbSkgewoJCQlyZXR1cm4gX0FycmF5X2NvbnRhaW5zXy5jYWxsKGFy
cmF5LCBpdGVtKTsKCQl9CgkJOgoJCWZ1bmN0aW9uKGFycmF5LCBpdGVtKSB7CgkJ
CXJldHVybiAhIX5BcnJheVsiaW5kZXhPZiJdKGFycmF5LCBpdGVtKTsKCQl9Cgk7
Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PT09PT09PT09PT0gTm9u
LXN0YW5kYXJkID09PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLS0K
Ci8qKgogKiDQpNGD0L3QutGG0LjRjyDQstC+0LfQstGA0LDRidCw0Y7RidCw0Y8g
0L/QtdGA0LXRgdC10YfQtdC90LjQtSDQvNC90L7QttC10YHRgtCyICjQsiDQutCw
0YfQtdGB0YLQstC1INC80L3QvtC20LXRgdGC0LLQsCDQstGL0YHRgtGD0L/QsNC1
0YIg0LzQsNGB0YHQuNCyKS4KICog0K3RgtC+INC90LXRgdGC0LDQvdC00LDRgNGC
0L3QsNGPINGE0YPQvdC60YbQuNGPINC4INC10LUg0YDQtdCw0LvQuNC30LDRhtC4
0Y8g0L3QtSDQv9C+0LvQuNGE0LjQuy4KICog0JIg0YTRg9C90LrRhtC40Y4g0LzQ
vtC20L3QviDQv9C10YDQtdC00LDRgtGMINC/0YDQvtC40LfQstC+0LvRjNC90L7Q
tSDQutC+0LvQuNGH0LXRgdGC0LLQviDQsNGA0LPRg9C80LXQvdGC0L7QsiDigJQg
0LzRiyDRgNC10LrRg9GA0YHQuNCy0L3QviDRgdGC0YDQvtC40Lwg0L/QtdGA0LXR
gdC10YfQtdC90LjQtSDQv9C+0L/QsNGA0L3QviDQv9C+INC/0LXRgNCy0YvQvCDQ
tNCy0YPQvAogKiBAcGFyYW0ge0FycmF5fSBsZWZ0CiAqIEBwYXJhbSB7Li4uQXJy
YXk9fSB2YXJfYXJncwoqLwppZighQXJyYXlbImludGVyc2VjdCJdKSB7CglBcnJh
eVsiaW50ZXJzZWN0Il0gPSBmdW5jdGlvbihsZWZ0LCB2YXJfYXJncykgewoJCXZh
ciByaWdodHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs
IDEpCgkJCSwgaW50ZXJzZWN0aW9uCgkJCSwgcmlnaHQKCQkJLCBsZWZ0TGVuZ3Ro
CgkJCSwgcmlnaHRMZW5ndGgKCQkJLCBpCgkJCSwgagoJCTsKCgkJLy8g0L/QtdGA
0LXRgdC10YfQtdC90LjQtSDQuNC80LXQtdGCINGB0LzRi9GB0Lsg0YHRgtGA0L7Q
uNGC0Ywg0YLQvtC70YzQutC+INC10YHQu9C4INGB0LvQtdCy0LAg0L3QtSDQv9GD
0YHRgtC+0LUg0LzQvdC+0LbQtdGB0YLQstC+CgkJLy8g0Lgg0YHQv9GA0LDQstCw
INC10YHRgtGMINC80L3QvtC20LXRgdGC0LLQsC4uLgoJCWlmKGxlZnQubGVuZ3Ro
ICYmIHJpZ2h0cy5sZW5ndGgpIHsKCQkJaW50ZXJzZWN0aW9uID0gW107CgkJCXJp
Z2h0ID0gcmlnaHRzWzBdOwoKCQkJLy8gLi4uINC/0LXRgNCy0L7QtSDQuNC3INC6
0L7RgtC+0YDRi9GFINC90LUg0L/Rg9GB0YLQvgoJCQlpZihyaWdodC5sZW5ndGgp
IHsKCQkJCWxlZnRMZW5ndGggPSBsZWZ0Lmxlbmd0aDsKCQkJCXJpZ2h0TGVuZ3Ro
ID0gcmlnaHQubGVuZ3RoOwoJCQkJaSA9IDA7CgoJCQkJd2hpbGUoIGkgPCBsZWZ0
TGVuZ3RoICkgewoJCQkJCWogPSAwOwoKCQkJCQl3aGlsZSggaiA8IHJpZ2h0TGVu
Z3RoICkgewoJCQkJCQlpZiggbGVmdFtpXSA9PSByaWdodFtqXSApIHsKCQkJCQkJ
CWludGVyc2VjdGlvbi5wdXNoKGxlZnRbaV0pOwoJCQkJCQl9CgoJCQkJCQlqKys7
CgkJCQkJfQoKCQkJCQlpKys7CgkJCQl9CgoJCQkJLy8g0YDQtdC60YPRgNGB0LjQ
stC90L7QtSDQv9C10YDQtdGB0LXRh9C10L3QuNC1INGBINC+0YHRgtCw0LvRjNC9
0YvQvNC4INC80L3QvtC20LXRgdGC0LLQsNC80LgKCQkJCXJldHVybiBBcnJheVsi
aW50ZXJzZWN0Il0uYXBwbHkoIG51bGwsIFtpbnRlcnNlY3Rpb25dLmNvbmNhdCgg
cmlnaHRzLnNsaWNlKCAxICkgKSApOwoKCQkJfQoJCQllbHNlIHsKCQkJCXJldHVy
biBbXTsKCQkJfQoKCQl9CgkJZWxzZSB7CgkJCXJldHVybiBsZWZ0OwoJCX0KCX0K
fQoKLyoqCiAqINCk0YPQvdC60YbQuNGPINC00L7QsdCw0LLQu9GP0Y7RidCw0Y8g
0L/QtdGA0LXQtNCw0L3QvdGL0LUg0Y3Qu9C10LzQtdC90YLRiyDQsiDQutC+0L3Q
tdGGINC80LDRgdGB0LjQstCwLiDQkNGA0LPRg9C80LXQvdGC0Ysg0YDQsNCx0L7R
gtCw0Y7RgiDQsNC90LDQu9C+0LPQuNGH0L3QviDRhNGD0L3QutGG0LjQuCBbXS5j
b25jYXQKICog0K3RgtC+INC90LXRgdGC0LDQvdC00LDRgNGC0L3QsNGPINGE0YPQ
vdC60YbQuNGPINC4INC10LUg0YDQtdCw0LvQuNC30LDRhtC40Y8g0L3QtSDQv9C+
0LvQuNGE0LjQuy4KICog0J7RgiBBcnJheS5wcm90b3R5cGUuY29uY2F0INC+0YLQ
u9C40YfQsNC10YLRgdGPINGC0LXQvCwg0YfRgtC+INC40LfQvNC10L3Rj9C10YIg
0L/QtdGA0LLRi9C5INC80LDRgdGB0LjQsiwg0Lgg0L3QtSDRgdC+0LfQtNCw0LXR
giDQvdC+0LLRi9C5CiAqINCe0YIgQXJyYXkucHJvdG90eXBlLnB1c2gg0L7RgtC7
0LjRh9Cw0LXRgtGB0Y8g0YLQtdC8LCDRh9GC0L4g0LzQvtC20LXRgiDQv9C+0LvR
g9GH0LDRgtGMINC90LAg0LLRhdC+0LQg0LrQsNC6INC80LDRgdGB0LjQstGLINGC
0LDQuiDQuCDRjdC70LXQvNC10L3RgtGLCiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5
CiAqIEBwYXJhbSB7Li4ue0FycmF5fCp9fSB2YXJfYXJncwogKiBAcmV0dXJuIHtB
cnJheX0gYXJyYXkKKi8KaWYoIUFycmF5WyJhcHBlbmQiXSkgewoJQXJyYXlbImFw
cGVuZCJdID0gZnVuY3Rpb24oYXJyYXksIHZhcl9hcmdzKSB7CgkJaWYoIGFyZ3Vt
ZW50cy5sZW5ndGggPiAyICkgewoJCQl2YXJfYXJncyA9IGFycmF5LmNvbmNhdC5h
cHBseShbXSwgX0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50cywgMSkpOwoJCX0K
CQlhcnJheS5wdXNoLmFwcGx5KGFycmF5LCB2YXJfYXJncyk7CgkJcmV0dXJuIGFy
cmF5OwoJfQp9CgovKioKICog0KTRg9C90LrRhtC40Y8g0LTQvtCx0LDQstC70Y/R
jtGJ0LDRjyDQv9C10YDQtdC00LDQvdC90YvQtSDRjdC70LXQvNC10L3RgtGLINCy
INC90LDRh9Cw0LvQviDQvNCw0YHRgdC40LLQsC4g0JDRgNCz0YPQvNC10L3RgtGL
INGA0LDQsdC+0YLQsNGO0YIg0LDQvdCw0LvQvtCz0LjRh9C90L4g0YTRg9C90LrR
htC40LggW10uY29uY2F0CiAqINCt0YLQviDQvdC10YHRgtCw0L3QtNCw0YDRgtC9
0LDRjyDRhNGD0L3QutGG0LjRjyDQuCDQtdC1INGA0LXQsNC70LjQt9Cw0YbQuNGP
INC90LUg0L/QvtC70LjRhNC40LsuCiAqINCe0YIgQXJyYXkucHJvdG90eXBlLnVu
c2hpZnQg0L7RgtC70LjRh9Cw0LXRgtGB0Y8g0YLQtdC8LCDRh9GC0L4g0LzQvtC2
0LXRgiDQv9C+0LvRg9GH0LDRgtGMINC90LAg0LLRhdC+0LQg0LrQsNC6INC80LDR
gdGB0LjQstGLINGC0LDQuiDQuCDRjdC70LXQvNC10L3RgtGLCiAqIEBwYXJhbSB7
QXJyYXl9IGFycmF5CiAqIEBwYXJhbSB7Li4ue0FycmF5fCp9fSB2YXJfYXJncwog
KiBAcmV0dXJuIHtBcnJheX0gYXJyYXkKKi8KaWYoIUFycmF5WyJwcmVwZW5kIl0p
IHsKCUFycmF5WyJwcmVwZW5kIl0gPSBmdW5jdGlvbihhcnJheSwgdmFyX2FyZ3Mp
IHsKCQlpZiggYXJndW1lbnRzLmxlbmd0aCA+IDIgKSB7CgkJCXZhcl9hcmdzID0g
YXJyYXkuY29uY2F0LmFwcGx5KFtdLCBfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1l
bnRzLCAxKSk7CgkJfQoJCWFycmF5LnVuc2hpZnQuYXBwbHkoYXJyYXksIHZhcl9h
cmdzKTsKCQlyZXR1cm4gYXJyYXk7Cgl9Cn0KCi8qKgogKiDQpNGD0L3QutGG0LjR
jyDQstC+0LfQstGA0LDRidCw0Y7RidCw0Y8g0YPQvdC40LrQsNC70YzQvdGL0LUg
0Y3Qu9C10LzQtdC90YLRiyDQsiDQvNCw0YHRgdC40LLQtQogKiDQrdGC0L4g0L3Q
tdGB0YLQsNC90LTQsNGA0YLQvdCw0Y8g0YTRg9C90LrRhtC40Y8g0Lgg0LXQtSDR
gNC10LDQu9C40LfQsNGG0LjRjyDQvdC1INC/0L7Qu9C40YTQuNC7LgogKgogKiDQ
p9GC0L7QsdGLINGE0YPQvdC60YbQuNGPINCx0YvRgdGC0YDQviDRgNCw0LHQvtGC
0LDQu9CwINGB0L4g0YHQv9C40YHQutCw0LzQuCDQvtCx0YrQtdC60YLQvtCyINC9
0YPQttC90L4KICog0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QviDRgNCw0LfQ
vNC10YLQuNGC0Ywg0L7QsdGK0LXQutGC0Ysg0YPQvdC40LrQsNC70YzQvdGL0LzQ
uCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCw0LzQuCwKICog0LjRgdC/0L7Q
u9GM0LfRg9GPINGB0LLQvtC50YHRgtCy0L4gX191bmlxdWVJZCDQvtCx0YrQtdC6
0YLQsAogKgogKiBAcGFyYW0ge0FycmF5fSBhcnJheQogKiBAcmV0dXJuIHtBcnJh
eX0gYXJyYXkgd2l0aCB1bmlxdWUgaXRlbXMKKi8KQXJyYXlbInVuaXF1ZSJdID0g
ZnVuY3Rpb24oYXJyYXkpIHsKCXZhciByZXN1bHQgPSBbXQoJCSwgdXNlZCA9IHt9
CgkJLCBpdGVtCgkJLCBpID0gMAoJCSwgbCA9IGFycmF5Lmxlbmd0aAoJCSwgaXRl
bUtleQoJOwoKCWZvciggOyBpIDwgbCA7ICsraSApIGlmKCBpIGluIGFycmF5ICkg
ewoJCWl0ZW0gPSBhcnJheVtpXTsKCgkJaWYoIHR5cGVvZiBpdGVtID09PSAib2Jq
ZWN0IiApIHsKCQkJLy8g0YfRgtC+0LHRiyDQsdGL0YHRgtGA0L4g0LjRgdC60LDR
gtGMINGD0L3QuNC60LDQu9GM0L3Ri9C1INC30L3QsNGH0LXQvdC40Y8g0YHRgNC1
0LTQuCDQvtCx0YrQtdC60YLQvtCyLAoJCQkvLyDRjdGC0Lgg0L7QsdGK0LXQutGC
0Ysg0L3Rg9C20L3QviDQv9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdC+INGA0LDQ
t9C80LXRgtC40YLRjCDRg9C90LjQutCw0LvRjNC90YvQvNC4INC40LTQtdC90YLQ
uNGE0LjQutCw0YLQvtGA0LDQvNC4CgoJCQlpZiggKGl0ZW1LZXkgPSBpdGVtWyJf
X3VuaXF1ZUlkIl0pID09PSB2b2lkIDAgKSB7IC8vINCjINC+0LHRitC10LrRgtCw
INC90LXRgtGDINGB0LLQvtC50YHRgtCy0LAgX191bmlxdWVJZCAtINCx0YvRgdGC
0YDRi9C5INC/0L7QuNGB0Log0L3QtSDQstC+0LfQvNC+0LbQtdC9IC0g0LjRgdC/
0L7Qu9GM0LfRg9C10LwgaW5kZXhPZgoJCQkJaWYoIEFycmF5WyJpbmRleE9mIl0o
YXJyYXksIGl0ZW0sIGkgKyAxKSA8IDAgKSB7CgkJCQkJcmVzdWx0LnB1c2goaXRl
bSk7CgkJCQl9CgkJCQljb250aW51ZTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJaXRl
bUtleSA9IGl0ZW07CgkJfQoKCQlpZih1c2VkW2l0ZW1LZXldICE9PSB2b2lkIDAp
IHsKCQkJY29udGludWU7CgkJfQoKCQl1c2VkW2l0ZW1LZXldID0gbnVsbDsKCQly
ZXN1bHQucHVzaChpdGVtKTsKCX0KCglyZXR1cm4gcmVzdWx0Owp9OwpBcnJheVsi
dW5pcSJdID0gQXJyYXlbInVuaXF1ZSJdOy8vYWxpYXMKCi8qKgogKiDQpNGD0L3Q
utGG0LjRjyDRg9C00LDQu9GP0LXRgiDRjdC70LXQvNC10L3RgtGLINC80LDRgdGB
0LjQstCwINCyINC00LjQsNC/0LDQt9Cw0L3QtSDQvtGCIHN0YXJ0INC00L4gc3Rh
cnQgKyBjb3VudCwg0LLQutC70Y7Rh9C40YLQtdC70YzQvdC+LgogKiBlbmQg0LzQ
vtC20L3QviDQvdC1INGD0LrQsNC30YvQstCw0YLRjCwg0YLQvtCz0LTQsCDRg9C0
0LDQu9C40YLRgdGPINGC0L7Qu9GM0LrQviDRjdC70LXQvNC10L3RgiDQv9C+0LQg
0LjQvdC00LXQutGB0L7QvCBzdGFydAogKiDQrdGC0L4g0L3QtdGB0YLQsNC90LTQ
sNGA0YLQvdCw0Y8g0YTRg9C90LrRhtC40Y8g0Lgg0LXQtSDRgNC10LDQu9C40LfQ
sNGG0LjRjyDQvdC1INC/0L7Qu9C40YTQuNC7LgogKiBAcGFyYW0ge0FycmF5fSBh
cnJheQogKiBAcGFyYW0ge251bWJlcn0gc3RhcnQKICogQHBhcmFtIHtudW1iZXI9
fSBjb3VudCDQn9C+LdGD0LzQvtC70YfQsNC90LjRjiAxCiAqIEByZXR1cm4ge0Fy
cmF5fSBhcnJheSDQstC10YDQvdGR0YIg0LjQt9C80LXQvdGR0L3QvdGL0Lkg0LzQ
sNGB0YHQuNCyCiAqLwppZighQXJyYXlbInJlbW92ZUF0Il0pIHsKCUFycmF5WyJy
ZW1vdmVBdCJdID0gZnVuY3Rpb24oYXJyYXksIHN0YXJ0LCBjb3VudCkgewoJCWlm
KCBzdGFydCA+PSAwICkgewoJCQlhcnJheS5zcGxpY2Uoc3RhcnQsIGNvdW50ID09
PSB2b2lkIDAgPyAxIDogY291bnQgfCAwKTsKCQl9CgoJCXJldHVybiBhcnJheTsK
CX07Cn0KLyoqCiAqINCk0YPQvdC60YbQuNGPINC90LDRhdC+0LTQuNGCINC4INGD
0LTQsNC70Y/QtdGCINC/0LXRgNC10LTQsNC90L3Ri9C1INGN0LvQtdC80LXQvdGC
0Ysg0LzQsNGB0YHQuNCy0LAKICog0K3RgtC+INC90LXRgdGC0LDQvdC00LDRgNGC
0L3QsNGPINGE0YPQvdC60YbQuNGPINC4INC10LUg0YDQtdCw0LvQuNC30LDRhtC4
0Y8g0L3QtSDQv9C+0LvQuNGE0LjQuy4KICogQHBhcmFtIHtBcnJheX0gYXJyYXkK
ICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncwogKiBAcmV0dXJuIHtBcnJheX0gYXJy
YXkg0LLQtdGA0L3RkdGCINC40LfQvNC10L3RkdC90L3Ri9C5INC80LDRgdGB0LjQ
sgogKi8KaWYoIUFycmF5WyJyZW1vdmUiXSkgewoJQXJyYXlbInJlbW92ZSJdID0g
ZnVuY3Rpb24oYXJyYXksIHZhcl9hcmdzKSB7CgkJdmFyIGxlbmd0aCA9IGFyZ3Vt
ZW50cy5sZW5ndGgKCQkJLCBpbmRleAoJCTsKCgkJd2hpbGUoIC0tbGVuZ3RoICkg
ewoJCQl3aGlsZSggKGluZGV4ID0gQXJyYXlbImluZGV4T2YiXShhcnJheSwgYXJn
dW1lbnRzW2xlbmd0aF0pKSAhPSAtMSApIHsKCQkJCWFycmF5LnNwbGljZShpbmRl
eCwgMSk7CgkJCX0KCQl9CgoJCXJldHVybiBhcnJheTsKCX07Cn0KCgoKLy8gTEVH
QUNZIHwgVE9ETzog0LLRi9C/0LjQu9C40YLRjApBcnJheVsic2VhcmNoIl0gPSBm
dW5jdGlvbiAoZXIsIGZuLCBjdHgpewoJZm9yKCB2YXIgaSA9IDAsIG4gPSBlci5s
ZW5ndGg7IGkgPCBuOyBpKysgKQoJCWlmKCBmbi5hcHBseShjdHgsIFtlcltpXSwg
aV0pICkKCQkJcmV0dXJuIGk7CglyZXR1cm4gLTE7Cn07Cgp9KCk7CgovLyAuL2Rh
dGEvY29tbW9uL2pzL2Fqcy9BcnJheS5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2Vz
L2pzL3J1L2pzQ29yZS9qcXVlcnkvanF1ZXJ5LmpzIHN0YXJ0CgovKiEKICogalF1
ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS41LjEKICogaHR0cDovL2pxdWVyeS5j
b20vCiAqCiAqIENvcHlyaWdodCAyMDExLCBKb2huIFJlc2lnCiAqIER1YWwgbGlj
ZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgog
KiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCiAqCiAqIEluY2x1ZGVzIFNpenps
ZS5qcwogKiBodHRwOi8vc2l6emxlanMuY29tLwogKiBDb3B5cmlnaHQgMjAxMSwg
VGhlIERvam8gRm91bmRhdGlvbgogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBC
U0QsIGFuZCBHUEwgTGljZW5zZXMuCiAqCiAqIERhdGU6IFdlZCBGZWIgMjMgMTM6
NTU6MjkgMjAxMSAtMDUwMAogKi8KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY2co
YSl7cmV0dXJuIGQuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1
bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjZChhKXtpZighYlpb
YV0pe3ZhciBiPWQoIjwiK2ErIj4iKS5hcHBlbmRUbygiYm9keSIpLGM9Yi5jc3Mo
ImRpc3BsYXkiKTtiLnJlbW92ZSgpO2lmKGM9PT0ibm9uZSJ8fGM9PT0iIiljPSJi
bG9jayI7YlpbYV09Y31yZXR1cm4gYlpbYV19ZnVuY3Rpb24gY2MoYSxiKXt2YXIg
Yz17fTtkLmVhY2goY2IuY29uY2F0LmFwcGx5KFtdLGNiLnNsaWNlKDAsYikpLGZ1
bmN0aW9uKCl7Y1t0aGlzXT1hfSk7cmV0dXJuIGN9ZnVuY3Rpb24gYlkoKXt0cnl7
cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9
Y2F0Y2goYil7fX1mdW5jdGlvbiBiWCgpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0
cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBiVygpe2QoYSkudW5sb2FkKGZ1
bmN0aW9uKCl7Zm9yKHZhciBhIGluIGJVKWJVW2FdKDAsMSl9KX1mdW5jdGlvbiBi
UShhLGMpe2EuZGF0YUZpbHRlciYmKGM9YS5kYXRhRmlsdGVyKGMsYS5kYXRhVHlw
ZSkpO3ZhciBlPWEuZGF0YVR5cGVzLGY9e30sZyxoLGk9ZS5sZW5ndGgsaixrPWVb
MF0sbCxtLG4sbyxwO2ZvcihnPTE7ZzxpO2crKyl7aWYoZz09PTEpZm9yKGggaW4g
YS5jb252ZXJ0ZXJzKXR5cGVvZiBoPT09InN0cmluZyImJihmW2gudG9Mb3dlckNh
c2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1lW2ddO2lmKGs9PT0iKiIpaz1s
O2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWZbbV18fGZbIiog
IitrXTtpZighbil7cD1iO2ZvcihvIGluIGYpe2o9by5zcGxpdCgiICIpO2lmKGpb
MF09PT1sfHxqWzBdPT09IioiKXtwPWZbalsxXSsiICIra107aWYocCl7bz1mW29d
LG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmQuZXJy
b3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSks
biE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGJQ
KGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3Bv
bnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRb
aV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVU
eXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClm
b3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2Jy
ZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBd
fHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1q
PWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19
ZnVuY3Rpb24gYk8oYSxiLGMsZSl7aWYoZC5pc0FycmF5KGIpJiZiLmxlbmd0aClk
LmVhY2goYixmdW5jdGlvbihiLGYpe2N8fGJxLnRlc3QoYSk/ZShhLGYpOmJPKGEr
IlsiKyh0eXBlb2YgZj09PSJvYmplY3QifHxkLmlzQXJyYXkoZik/YjoiIikrIl0i
LGYsYyxlKX0pO2Vsc2UgaWYoY3x8Yj09bnVsbHx8dHlwZW9mIGIhPT0ib2JqZWN0
IillKGEsYik7ZWxzZSBpZihkLmlzQXJyYXkoYil8fGQuaXNFbXB0eU9iamVjdChi
KSllKGEsIiIpO2Vsc2UgZm9yKHZhciBmIGluIGIpYk8oYSsiWyIrZisiXSIsYltm
XSxjLGUpfWZ1bmN0aW9uIGJOKGEsYyxkLGUsZixnKXtmPWZ8fGMuZGF0YVR5cGVz
WzBdLGc9Z3x8e30sZ1tmXT0hMDt2YXIgaD1hW2ZdLGk9MCxqPWg/aC5sZW5ndGg6
MCxrPWE9PT1iSCxsO2Zvcig7aTxqJiYoa3x8IWwpO2krKylsPWhbaV0oYyxkLGUp
LHR5cGVvZiBsPT09InN0cmluZyImJigha3x8Z1tsXT9sPWI6KGMuZGF0YVR5cGVz
LnVuc2hpZnQobCksbD1iTihhLGMsZCxlLGwsZykpKTsoa3x8IWwpJiYhZ1siKiJd
JiYobD1iTihhLGMsZCxlLCIqIixnKSk7cmV0dXJuIGx9ZnVuY3Rpb24gYk0oYSl7
cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dHlwZW9mIGIhPT0ic3RyaW5nIiYmKGM9Yixi
PSIqIik7aWYoZC5pc0Z1bmN0aW9uKGMpKXt2YXIgZT1iLnRvTG93ZXJDYXNlKCku
c3BsaXQoYkIpLGY9MCxnPWUubGVuZ3RoLGgsaSxqO2Zvcig7ZjxnO2YrKyloPWVb
Zl0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVto
XT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBi
byhhLGIsYyl7dmFyIGU9Yj09PSJ3aWR0aCI/Ymk6YmosZj1iPT09IndpZHRoIj9h
Lm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0O2lmKGM9PT0iYm9yZGVyIilyZXR1
cm4gZjtkLmVhY2goZSxmdW5jdGlvbigpe2N8fChmLT1wYXJzZUZsb2F0KGQuY3Nz
KGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2YrPXBhcnNlRmxv
YXQoZC5jc3MoYSwibWFyZ2luIit0aGlzKSl8fDA6Zi09cGFyc2VGbG9hdChkLmNz
cyhhLCJib3JkZXIiK3RoaXMrIldpZHRoIikpfHwwfSk7cmV0dXJuIGZ9ZnVuY3Rp
b24gYmEoYSxiKXtiLnNyYz9kLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRh
VHlwZToic2NyaXB0In0pOmQuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250
ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoL15ccyo8ISg/OlxbQ0RBVEFc
W3xcLVwtKS8sIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBfKGEpe3JldHVybiJnZXRFbGVtZW50c0J5
VGFnTmFtZSJpbiBhP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKToicXVlcnlT
ZWxlY3RvckFsbCJpbiBhP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0
aW9uICQoYSxiKXtpZihiLm5vZGVUeXBlPT09MSl7dmFyIGM9Yi5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpO2IuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJnZUF0dHJpYnV0
ZXMoYSk7aWYoYz09PSJvYmplY3QiKWIub3V0ZXJIVE1MPWEub3V0ZXJIVE1MO2Vs
c2UgaWYoYyE9PSJpbnB1dCJ8fGEudHlwZSE9PSJjaGVja2JveCImJmEudHlwZSE9
PSJyYWRpbyIpe2lmKGM9PT0ib3B0aW9uIiliLnNlbGVjdGVkPWEuZGVmYXVsdFNl
bGVjdGVkO2Vsc2UgaWYoYz09PSJpbnB1dCJ8fGM9PT0idGV4dGFyZWEiKWIuZGVm
YXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlfWVsc2UgYS5jaGVja2VkJiYoYi5kZWZh
dWx0Q2hlY2tlZD1iLmNoZWNrZWQ9YS5jaGVja2VkKSxiLnZhbHVlIT09YS52YWx1
ZSYmKGIudmFsdWU9YS52YWx1ZSk7Yi5yZW1vdmVBdHRyaWJ1dGUoZC5leHBhbmRv
KX19ZnVuY3Rpb24gWihhLGIpe2lmKGIubm9kZVR5cGU9PT0xJiZkLmhhc0RhdGEo
YSkpe3ZhciBjPWQuZXhwYW5kbyxlPWQuZGF0YShhKSxmPWQuZGF0YShiLGUpO2lm
KGU9ZVtjXSl7dmFyIGc9ZS5ldmVudHM7Zj1mW2NdPWQuZXh0ZW5kKHt9LGUpO2lm
KGcpe2RlbGV0ZSBmLmhhbmRsZSxmLmV2ZW50cz17fTtmb3IodmFyIGggaW4gZylm
b3IodmFyIGk9MCxqPWdbaF0ubGVuZ3RoO2k8ajtpKyspZC5ldmVudC5hZGQoYixo
KyhnW2hdW2ldLm5hbWVzcGFjZT8iLiI6IiIpK2dbaF1baV0ubmFtZXNwYWNlLGdb
aF1baV0sZ1toXVtpXS5kYXRhKX19fX1mdW5jdGlvbiBZKGEsYil7cmV0dXJuIGQu
bm9kZU5hbWUoYSwidGFibGUiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9k
eSIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJ0Ym9keSIpKTphfWZ1bmN0aW9uIE8oYSxiLGMpe2lmKGQuaXNGdW5jdGlv
bihiKSlyZXR1cm4gZC5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2Fs
bChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gZC5n
cmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9m
IGI9PT0ic3RyaW5nIil7dmFyIGU9ZC5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJu
IGEubm9kZVR5cGU9PT0xfSk7aWYoSi50ZXN0KGIpKXJldHVybiBkLmZpbHRlcihi
LGUsIWMpO2I9ZC5maWx0ZXIoYixlKX1yZXR1cm4gZC5ncmVwKGEsZnVuY3Rpb24o
YSxlKXtyZXR1cm4gZC5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gTihh
KXtyZXR1cm4hYXx8IWEucGFyZW50Tm9kZXx8YS5wYXJlbnROb2RlLm5vZGVUeXBl
PT09MTF9ZnVuY3Rpb24gRihhLGIpe3JldHVybihhJiZhIT09IioiP2ErIi4iOiIi
KStiLnJlcGxhY2UociwiYCIpLnJlcGxhY2UocywiJiIpfWZ1bmN0aW9uIEUoYSl7
dmFyIGIsYyxlLGYsZyxoLGksaixrLGwsbSxuLG8scT1bXSxyPVtdLHM9ZC5fZGF0
YSh0aGlzLCJldmVudHMiKTtpZihhLmxpdmVGaXJlZCE9PXRoaXMmJnMmJnMubGl2
ZSYmIWEudGFyZ2V0LmRpc2FibGVkJiYoIWEuYnV0dG9ufHxhLnR5cGUhPT0iY2xp
Y2siKSl7YS5uYW1lc3BhY2UmJihuPW5ldyBSZWdFeHAoIihefFxcLikiK2EubmFt
ZXNwYWNlLnNwbGl0KCIuIikuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQp
IikpLGEubGl2ZUZpcmVkPXRoaXM7dmFyIHQ9cy5saXZlLnNsaWNlKDApO2Zvcihp
PTA7aTx0Lmxlbmd0aDtpKyspZz10W2ldLGcub3JpZ1R5cGUucmVwbGFjZShwLCIi
KT09PWEudHlwZT9yLnB1c2goZy5zZWxlY3Rvcik6dC5zcGxpY2UoaS0tLDEpO2Y9
ZChhLnRhcmdldCkuY2xvc2VzdChyLGEuY3VycmVudFRhcmdldCk7Zm9yKGo9MCxr
PWYubGVuZ3RoO2o8aztqKyspe209ZltqXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsr
KXtnPXRbaV07aWYobS5zZWxlY3Rvcj09PWcuc2VsZWN0b3ImJighbnx8bi50ZXN0
KGcubmFtZXNwYWNlKSkmJiFtLmVsZW0uZGlzYWJsZWQpe2g9bS5lbGVtLGU9bnVs
bDtpZihnLnByZVR5cGU9PT0ibW91c2VlbnRlciJ8fGcucHJlVHlwZT09PSJtb3Vz
ZWxlYXZlIilhLnR5cGU9Zy5wcmVUeXBlLGU9ZChhLnJlbGF0ZWRUYXJnZXQpLmNs
b3Nlc3QoZy5zZWxlY3RvcilbMF07KCFlfHxlIT09aCkmJnEucHVzaCh7ZWxlbTpo
LGhhbmRsZU9iajpnLGxldmVsOm0ubGV2ZWx9KX19fWZvcihqPTAsaz1xLmxlbmd0
aDtqPGs7aisrKXtmPXFbal07aWYoYyYmZi5sZXZlbD5jKWJyZWFrO2EuY3VycmVu
dFRhcmdldD1mLmVsZW0sYS5kYXRhPWYuaGFuZGxlT2JqLmRhdGEsYS5oYW5kbGVP
Ymo9Zi5oYW5kbGVPYmosbz1mLmhhbmRsZU9iai5vcmlnSGFuZGxlci5hcHBseShm
LmVsZW0sYXJndW1lbnRzKTtpZihvPT09ITF8fGEuaXNQcm9wYWdhdGlvblN0b3Bw
ZWQoKSl7Yz1mLmxldmVsLG89PT0hMSYmKGI9ITEpO2lmKGEuaXNJbW1lZGlhdGVQ
cm9wYWdhdGlvblN0b3BwZWQoKSlicmVha319cmV0dXJuIGJ9fWZ1bmN0aW9uIEMo
YSxjLGUpe3ZhciBmPWQuZXh0ZW5kKHt9LGVbMF0pO2YudHlwZT1hLGYub3JpZ2lu
YWxFdmVudD17fSxmLmxpdmVGaXJlZD1iLGQuZXZlbnQuaGFuZGxlLmNhbGwoYyxm
KSxmLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZlWzBdLnByZXZlbnREZWZhdWx0KCl9
ZnVuY3Rpb24gdygpe3JldHVybiEwfWZ1bmN0aW9uIHYoKXtyZXR1cm4hMX1mdW5j
dGlvbiBnKGEpe2Zvcih2YXIgYiBpbiBhKWlmKGIhPT0idG9KU09OIilyZXR1cm4h
MTtyZXR1cm4hMH1mdW5jdGlvbiBmKGEsYyxmKXtpZihmPT09YiYmYS5ub2RlVHlw
ZT09PTEpe2Y9YS5nZXRBdHRyaWJ1dGUoImRhdGEtIitjKTtpZih0eXBlb2YgZj09
PSJzdHJpbmciKXt0cnl7Zj1mPT09InRydWUiPyEwOmY9PT0iZmFsc2UiPyExOmY9
PT0ibnVsbCI/bnVsbDpkLmlzTmFOKGYpP2UudGVzdChmKT9kLnBhcnNlSlNPTihm
KTpmOnBhcnNlRmxvYXQoZil9Y2F0Y2goZyl7fWQuZGF0YShhLGMsZil9ZWxzZSBm
PWJ9cmV0dXJuIGZ9dmFyIGM9YS5kb2N1bWVudCxkPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gSSgpe2lmKCFkLmlzUmVhZHkpe3RyeXtjLmRvY3VtZW50RWxlbWVudC5kb1Nj
cm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoSSwxKTtyZXR1cm59ZC5y
ZWFkeSgpfX12YXIgZD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZC5mbi5pbml0
KGEsYixnKX0sZT1hLmpRdWVyeSxmPWEuJCxnLGg9L14oPzpbXjxdKig8W1x3XFdd
Kz4pW14+XSokfCMoW1x3XC1dKykkKS8saT0vXFMvLGo9L15ccysvLGs9L1xzKyQv
LGw9L1xkLyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sbj0vXltcXSw6
e31cc10qJC8sbz0vXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9n
LHA9LyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCop
Pyg/OltlRV1bK1wtXT9cZCspPy9nLHE9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxy
PS8od2Via2l0KVsgXC9dKFtcdy5dKykvLHM9LyhvcGVyYSkoPzouKnZlcnNpb24p
P1sgXC9dKFtcdy5dKykvLHQ9Lyhtc2llKSAoW1x3Ll0rKS8sdT0vKG1vemlsbGEp
KD86Lio/IHJ2OihbXHcuXSspKT8vLHY9bmF2aWdhdG9yLnVzZXJBZ2VudCx3LHg9
ITEseSx6PSJ0aGVuIGRvbmUgZmFpbCBpc1Jlc29sdmVkIGlzUmVqZWN0ZWQgcHJv
bWlzZSIuc3BsaXQoIiAiKSxBLEI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxD
PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksRD1BcnJheS5wcm90b3R5
cGUucHVzaCxFPUFycmF5LnByb3RvdHlwZS5zbGljZSxGPVN0cmluZy5wcm90b3R5
cGUudHJpbSxHPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLEg9e307ZC5mbj1kLnBy
b3RvdHlwZT17Y29uc3RydWN0b3I6ZCxpbml0OmZ1bmN0aW9uKGEsZSxmKXt2YXIg
ZyxpLGosaztpZighYSlyZXR1cm4gdGhpcztpZihhLm5vZGVUeXBlKXt0aGlzLmNv
bnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYoYT09
PSJib2R5IiYmIWUmJmMuYm9keSl7dGhpcy5jb250ZXh0PWMsdGhpc1swXT1jLmJv
ZHksdGhpcy5zZWxlY3Rvcj0iYm9keSIsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhp
c31pZih0eXBlb2YgYT09PSJzdHJpbmciKXtnPWguZXhlYyhhKTtpZighZ3x8IWdb
MV0mJmUpcmV0dXJuIWV8fGUuanF1ZXJ5PyhlfHxmKS5maW5kKGEpOnRoaXMuY29u
c3RydWN0b3IoZSkuZmluZChhKTtpZihnWzFdKXtlPWUgaW5zdGFuY2VvZiBkP2Vb
MF06ZSxrPWU/ZS5vd25lckRvY3VtZW50fHxlOmMsaj1tLmV4ZWMoYSksaj9kLmlz
UGxhaW5PYmplY3QoZSk/KGE9W2MuY3JlYXRlRWxlbWVudChqWzFdKV0sZC5mbi5h
dHRyLmNhbGwoYSxlLCEwKSk6YT1bay5jcmVhdGVFbGVtZW50KGpbMV0pXTooaj1k
LmJ1aWxkRnJhZ21lbnQoW2dbMV1dLFtrXSksYT0oai5jYWNoZWFibGU/ZC5jbG9u
ZShqLmZyYWdtZW50KTpqLmZyYWdtZW50KS5jaGlsZE5vZGVzKTtyZXR1cm4gZC5t
ZXJnZSh0aGlzLGEpfWk9Yy5nZXRFbGVtZW50QnlJZChnWzJdKTtpZihpJiZpLnBh
cmVudE5vZGUpe2lmKGkuaWQhPT1nWzJdKXJldHVybiBmLmZpbmQoYSk7dGhpcy5s
ZW5ndGg9MSx0aGlzWzBdPWl9dGhpcy5jb250ZXh0PWMsdGhpcy5zZWxlY3Rvcj1h
O3JldHVybiB0aGlzfWlmKGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gZi5yZWFkeShh
KTthLnNlbGVjdG9yIT09YiYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlz
LmNvbnRleHQ9YS5jb250ZXh0KTtyZXR1cm4gZC5tYWtlQXJyYXkoYSx0aGlzKX0s
c2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjUuMSIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlv
bigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVy
biBFLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxs
P3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19
LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGU9dGhpcy5jb25zdHJ1Y3Rv
cigpO2QuaXNBcnJheShhKT9ELmFwcGx5KGUsYSk6ZC5tZXJnZShlLGEpLGUucHJl
dk9iamVjdD10aGlzLGUuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9l
LnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStj
OmImJihlLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTty
ZXR1cm4gZX0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBkLmVhY2godGhpcyxh
LGIpfSxyZWFkeTpmdW5jdGlvbihhKXtkLmJpbmRSZWFkeSgpLHkuZG9uZShhKTty
ZXR1cm4gdGhpc30sZXE6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0tMT90aGlzLnNs
aWNlKGEpOnRoaXMuc2xpY2UoYSwrYSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0x
KX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRS5hcHBs
eSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixFLmNhbGwoYXJndW1lbnRzKS5qb2lu
KCIsIikpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQu
bWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0s
ZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25z
dHJ1Y3RvcihudWxsKX0scHVzaDpELHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3Bs
aWNlfSxkLmZuLmluaXQucHJvdG90eXBlPWQuZm4sZC5leHRlbmQ9ZC5mbi5leHRl
bmQ9ZnVuY3Rpb24oKXt2YXIgYSxjLGUsZixnLGgsaT1hcmd1bWVudHNbMF18fHt9
LGo9MSxrPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgaT09PSJib29sZWFu
IiYmKGw9aSxpPWFyZ3VtZW50c1sxXXx8e30saj0yKSx0eXBlb2YgaSE9PSJvYmpl
Y3QiJiYhZC5pc0Z1bmN0aW9uKGkpJiYoaT17fSksaz09PWomJihpPXRoaXMsLS1q
KTtmb3IoO2o8aztqKyspaWYoKGE9YXJndW1lbnRzW2pdKSE9bnVsbClmb3IoYyBp
biBhKXtlPWlbY10sZj1hW2NdO2lmKGk9PT1mKWNvbnRpbnVlO2wmJmYmJihkLmlz
UGxhaW5PYmplY3QoZil8fChnPWQuaXNBcnJheShmKSkpPyhnPyhnPSExLGg9ZSYm
ZC5pc0FycmF5KGUpP2U6W10pOmg9ZSYmZC5pc1BsYWluT2JqZWN0KGUpP2U6e30s
aVtjXT1kLmV4dGVuZChsLGgsZikpOmYhPT1iJiYoaVtjXT1mKX1yZXR1cm4gaX0s
ZC5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYil7YS4kPWYsYiYmKGEualF1
ZXJ5PWUpO3JldHVybiBkfSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1
bmN0aW9uKGEpe2E9PT0hMCYmZC5yZWFkeVdhaXQtLTtpZighZC5yZWFkeVdhaXR8
fGEhPT0hMCYmIWQuaXNSZWFkeSl7aWYoIWMuYm9keSlyZXR1cm4gc2V0VGltZW91
dChkLnJlYWR5LDEpO2QuaXNSZWFkeT0hMDtpZihhIT09ITAmJi0tZC5yZWFkeVdh
aXQ+MClyZXR1cm47eS5yZXNvbHZlV2l0aChjLFtkXSksZC5mbi50cmlnZ2VyJiZk
KGMpLnRyaWdnZXIoInJlYWR5IikudW5iaW5kKCJyZWFkeSIpfX0sYmluZFJlYWR5
OmZ1bmN0aW9uKCl7aWYoIXgpe3g9ITA7aWYoYy5yZWFkeVN0YXRlPT09ImNvbXBs
ZXRlIilyZXR1cm4gc2V0VGltZW91dChkLnJlYWR5LDEpO2lmKGMuYWRkRXZlbnRM
aXN0ZW5lciljLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEEs
ITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZC5yZWFkeSwhMSk7ZWxzZSBp
ZihjLmF0dGFjaEV2ZW50KXtjLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFu
Z2UiLEEpLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsZC5yZWFkeSk7dmFyIGI9ITE7
dHJ5e2I9YS5mcmFtZUVsZW1lbnQ9PW51bGx9Y2F0Y2goZSl7fWMuZG9jdW1lbnRF
bGVtZW50LmRvU2Nyb2xsJiZiJiZJKCl9fX0saXNGdW5jdGlvbjpmdW5jdGlvbihh
KXtyZXR1cm4gZC50eXBlKGEpPT09ImZ1bmN0aW9uIn0saXNBcnJheTpBcnJheS5p
c0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4gZC50eXBlKGEpPT09ImFycmF5In0s
aXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnR5cGVvZiBhPT09Im9iamVj
dCImJiJzZXRJbnRlcnZhbCJpbiBhfSxpc05hTjpmdW5jdGlvbihhKXtyZXR1cm4g
YT09bnVsbHx8IWwudGVzdChhKXx8aXNOYU4oYSl9LHR5cGU6ZnVuY3Rpb24oYSl7
cmV0dXJuIGE9PW51bGw/U3RyaW5nKGEpOkhbQi5jYWxsKGEpXXx8Im9iamVjdCJ9
LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7aWYoIWF8fGQudHlwZShhKSE9PSJv
YmplY3QifHxhLm5vZGVUeXBlfHxkLmlzV2luZG93KGEpKXJldHVybiExO2lmKGEu
Y29uc3RydWN0b3ImJiFDLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIUMuY2FsbChh
LmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiEx
O3ZhciBjO2ZvcihjIGluIGEpe31yZXR1cm4gYz09PWJ8fEMuY2FsbChhLGMpfSxp
c0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXJldHVybiEx
O3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBhfSxwYXJzZUpTT046
ZnVuY3Rpb24oYil7aWYodHlwZW9mIGIhPSJzdHJpbmcifHwhYilyZXR1cm4gbnVs
bDtiPWQudHJpbShiKTtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5K
U09OLnBhcnNlKGIpO2lmKG4udGVzdChiLnJlcGxhY2UobywiQCIpLnJlcGxhY2Uo
cCwiXSIpLnJlcGxhY2UocSwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVy
biAiK2IpKSgpO2QuZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0scGFyc2VYTUw6
ZnVuY3Rpb24oYixjLGUpe2EuRE9NUGFyc2VyPyhlPW5ldyBET01QYXJzZXIsYz1l
LnBhcnNlRnJvbVN0cmluZyhiLCJ0ZXh0L3htbCIpKTooYz1uZXcgQWN0aXZlWE9i
amVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGMuYXN5bmM9ImZhbHNlIixjLmxvYWRY
TUwoYikpLGU9Yy5kb2N1bWVudEVsZW1lbnQsKCFlfHwhZS5ub2RlTmFtZXx8ZS5u
b2RlTmFtZT09PSJwYXJzZXJlcnJvciIpJiZkLmVycm9yKCJJbnZhbGlkIFhNTDog
IitiKTtyZXR1cm4gY30sbm9vcDpmdW5jdGlvbigpe30KLGdsb2JhbEV2YWw6ZnVu
Y3Rpb24oZCl7Cgl0cnkgewoJCWlmKGQmJmkudGVzdChkKSl7CgkJCSh3aW5kb3cu
ZXhlY1NjcmlwdHx8ZnVuY3Rpb24oZCl7d2luZG93WyAiZXZhbCIgXS5jYWxsKHdp
bmRvdywgZCk7fSkoZCk7CgkJfQoJfSBjYXRjaCggZXJyICl7CgkJaWYoIHdpbmRv
dy5tYWlscnUgJiYgbWFpbHJ1LnNhdmVFcnJvciApewoJCQltYWlscnUuc2F2ZUVy
cm9yKCdqczcnLCBbJ0pRVUVSWS5FVkFMJywgZW5jb2RlVVJJQ29tcG9uZW50KGVy
ci5tZXNzYWdlIHx8IGVycildKTsKCQl9Cgl9Cn0sbm9kZU5hbWU6ZnVuY3Rpb24o
YSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgp
PT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYyxlKXt2YXIgZixn
PTAsaD1hLmxlbmd0aCxpPWg9PT1ifHxkLmlzRnVuY3Rpb24oYSk7aWYoZSl7aWYo
aSl7Zm9yKGYgaW4gYSlpZihjLmFwcGx5KGFbZl0sZSk9PT0hMSlicmVha31lbHNl
IGZvcig7ZzxoOylpZihjLmFwcGx5KGFbZysrXSxlKT09PSExKWJyZWFrfWVsc2Ug
aWYoaSl7Zm9yKGYgaW4gYSlpZihjLmNhbGwoYVtmXSxmLGFbZl0pPT09ITEpYnJl
YWt9ZWxzZSBmb3IodmFyIGo9YVswXTtnPGgmJmMuY2FsbChqLGcsaikhPT0hMTtq
PWFbKytnXSl7fXJldHVybiBhfSx0cmltOkY/ZnVuY3Rpb24oYSl7cmV0dXJuIGE9
PW51bGw/IiI6Ri5jYWxsKGEpfTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8i
IjooYSsiIikucmVwbGFjZShqLCIiKS5yZXBsYWNlKGssIiIpfSxtYWtlQXJyYXk6
ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxbXTtpZihhIT1udWxsKXt2YXIgZT1kLnR5
cGUoYSk7YS5sZW5ndGg9PW51bGx8fGU9PT0ic3RyaW5nInx8ZT09PSJmdW5jdGlv
biJ8fGU9PT0icmVnZXhwInx8ZC5pc1dpbmRvdyhhKT9ELmNhbGwoYyxhKTpkLm1l
cmdlKGMsYSl9cmV0dXJuIGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiKXtpZihiLmlu
ZGV4T2YpcmV0dXJuIGIuaW5kZXhPZihhKTtmb3IodmFyIGM9MCxkPWIubGVuZ3Ro
O2M8ZDtjKyspaWYoYltjXT09PWEpcmV0dXJuIGM7cmV0dXJuLTF9LG1lcmdlOmZ1
bmN0aW9uKGEsYyl7dmFyIGQ9YS5sZW5ndGgsZT0wO2lmKHR5cGVvZiBjLmxlbmd0
aD09PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1j
W2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1k
O3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFj
O2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMh
PT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGIsYyl7
dmFyIGQ9W10sZTtmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspZT1iKGFb
Zl0sZixjKSxlIT1udWxsJiYoZFtkLmxlbmd0aF09ZSk7cmV0dXJuIGQuY29uY2F0
LmFwcGx5KFtdLGQpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxjLGUpe2FyZ3Vt
ZW50cy5sZW5ndGg9PT0yJiYodHlwZW9mIGM9PT0ic3RyaW5nIj8oZT1hLGE9ZVtj
XSxjPWIpOmMmJiFkLmlzRnVuY3Rpb24oYykmJihlPWMsYz1iKSksIWMmJmEmJihj
PWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoZXx8dGhpcyxhcmd1bWVudHMpfSks
YSYmKGMuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxjLmd1aWR8fGQuZ3VpZCsrKTtyZXR1
cm4gY30sYWNjZXNzOmZ1bmN0aW9uKGEsYyxlLGYsZyxoKXt2YXIgaT1hLmxlbmd0
aDtpZih0eXBlb2YgYz09PSJvYmplY3QiKXtmb3IodmFyIGogaW4gYylkLmFjY2Vz
cyhhLGosY1tqXSxmLGcsZSk7cmV0dXJuIGF9aWYoZSE9PWIpe2Y9IWgmJmYmJmQu
aXNGdW5jdGlvbihlKTtmb3IodmFyIGs9MDtrPGk7aysrKWcoYVtrXSxjLGY/ZS5j
YWxsKGFba10sayxnKGFba10sYykpOmUsaCk7cmV0dXJuIGF9cmV0dXJuIGk/Zyhh
WzBdLGMpOmJ9LG5vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGlt
ZSgpfSxfRGVmZXJyZWQ6ZnVuY3Rpb24oKXt2YXIgYT1bXSxiLGMsZSxmPXtkb25l
OmZ1bmN0aW9uKCl7aWYoIWUpe3ZhciBjPWFyZ3VtZW50cyxnLGgsaSxqLGs7YiYm
KGs9YixiPTApO2ZvcihnPTAsaD1jLmxlbmd0aDtnPGg7ZysrKWk9Y1tnXSxqPWQu
dHlwZShpKSxqPT09ImFycmF5Ij9mLmRvbmUuYXBwbHkoZixpKTpqPT09ImZ1bmN0
aW9uIiYmYS5wdXNoKGkpO2smJmYucmVzb2x2ZVdpdGgoa1swXSxrWzFdKX1yZXR1
cm4gdGhpc30scmVzb2x2ZVdpdGg6ZnVuY3Rpb24oZCxmKXtpZighZSYmIWImJiFj
KXtjPTE7dHJ5e3doaWxlKGFbMF0pYS5zaGlmdCgpLmFwcGx5KGQsZil9Y2F0Y2go
Zyl7dGhyb3cgZ31maW5hbGx5e2I9W2QsZl0sYz0wfX1yZXR1cm4gdGhpc30scmVz
b2x2ZTpmdW5jdGlvbigpe2YucmVzb2x2ZVdpdGgoZC5pc0Z1bmN0aW9uKHRoaXMu
cHJvbWlzZSk/dGhpcy5wcm9taXNlKCk6dGhpcyxhcmd1bWVudHMpO3JldHVybiB0
aGlzfSxpc1Jlc29sdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIGN8fGJ9LGNhbmNlbDpm
dW5jdGlvbigpe2U9MSxhPVtdO3JldHVybiB0aGlzfX07cmV0dXJuIGZ9LERlZmVy
cmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWQuX0RlZmVycmVkKCksYz1kLl9EZWZlcnJl
ZCgpLGU7ZC5leHRlbmQoYix7dGhlbjpmdW5jdGlvbihhLGMpe2IuZG9uZShhKS5m
YWlsKGMpO3JldHVybiB0aGlzfSxmYWlsOmMuZG9uZSxyZWplY3RXaXRoOmMucmVz
b2x2ZVdpdGgscmVqZWN0OmMucmVzb2x2ZSxpc1JlamVjdGVkOmMuaXNSZXNvbHZl
ZCxwcm9taXNlOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpe2lmKGUpcmV0dXJuIGU7
ZT1hPXt9fXZhciBjPXoubGVuZ3RoO3doaWxlKGMtLSlhW3pbY11dPWJbeltjXV07
cmV0dXJuIGF9fSksYi5kb25lKGMuY2FuY2VsKS5mYWlsKGIuY2FuY2VsKSxkZWxl
dGUgYi5jYW5jZWwsYSYmYS5jYWxsKGIsYik7cmV0dXJuIGJ9LHdoZW46ZnVuY3Rp
b24oYSl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aCxjPWI8PTEmJmEmJmQuaXNGdW5j
dGlvbihhLnByb21pc2UpP2E6ZC5EZWZlcnJlZCgpLGU9Yy5wcm9taXNlKCk7aWYo
Yj4xKXt2YXIgZj1FLmNhbGwoYXJndW1lbnRzLDApLGc9YixoPWZ1bmN0aW9uKGEp
e3JldHVybiBmdW5jdGlvbihiKXtmW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9FLmNh
bGwoYXJndW1lbnRzLDApOmIsLS1nfHxjLnJlc29sdmVXaXRoKGUsZil9fTt3aGls
ZShiLS0pYT1mW2JdLGEmJmQuaXNGdW5jdGlvbihhLnByb21pc2UpP2EucHJvbWlz
ZSgpLnRoZW4oaChiKSxjLnJlamVjdCk6LS1nO2d8fGMucmVzb2x2ZVdpdGgoZSxm
KX1lbHNlIGMhPT1hJiZjLnJlc29sdmUoYSk7cmV0dXJuIGV9LHVhTWF0Y2g6ZnVu
Y3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7dmFyIGI9ci5leGVjKGEpfHxzLmV4
ZWMoYSl8fHQuZXhlYyhhKXx8YS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmdS5l
eGVjKGEpfHxbXTtyZXR1cm57YnJvd3NlcjpiWzFdfHwiIix2ZXJzaW9uOmJbMl18
fCIwIn19LHN1YjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtyZXR1cm4gbmV3
IGEuZm4uaW5pdChiLGMpfWQuZXh0ZW5kKCEwLGEsdGhpcyksYS5zdXBlcmNsYXNz
PXRoaXMsYS5mbj1hLnByb3RvdHlwZT10aGlzKCksYS5mbi5jb25zdHJ1Y3Rvcj1h
LGEuc3ViY2xhc3M9dGhpcy5zdWJjbGFzcyxhLmZuLmluaXQ9ZnVuY3Rpb24gYihi
LGMpe2MmJmMgaW5zdGFuY2VvZiBkJiYhKGMgaW5zdGFuY2VvZiBhKSYmKGM9YShj
KSk7cmV0dXJuIGQuZm4uaW5pdC5jYWxsKHRoaXMsYixjLGUpfSxhLmZuLmluaXQu
cHJvdG90eXBlPWEuZm47dmFyIGU9YShjKTtyZXR1cm4gYX0sYnJvd3Nlcjp7fX0p
LHk9ZC5fRGVmZXJyZWQoKSxkLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBG
dW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksZnVu
Y3Rpb24oYSxiKXtIWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0p
LHc9ZC51YU1hdGNoKHYpLHcuYnJvd3NlciYmKGQuYnJvd3Nlclt3LmJyb3dzZXJd
PSEwLGQuYnJvd3Nlci52ZXJzaW9uPXcudmVyc2lvbiksZC5icm93c2VyLndlYmtp
dCYmKGQuYnJvd3Nlci5zYWZhcmk9ITApLEcmJihkLmluQXJyYXk9ZnVuY3Rpb24o
YSxiKXtyZXR1cm4gRy5jYWxsKGIsYSl9KSxpLnRlc3QoIiAiKSYmKGo9L15bXHNc
eEEwXSsvLGs9L1tcc1x4QTBdKyQvKSxnPWQoYyksYy5hZGRFdmVudExpc3RlbmVy
P0E9ZnVuY3Rpb24oKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRM
b2FkZWQiLEEsITEpLGQucmVhZHkoKX06Yy5hdHRhY2hFdmVudCYmKEE9ZnVuY3Rp
b24oKXtjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiJiYoYy5kZXRhY2hFdmVudCgi
b25yZWFkeXN0YXRlY2hhbmdlIixBKSxkLnJlYWR5KCkpfSk7cmV0dXJuIGR9KCk7
KGZ1bmN0aW9uKCl7ZC5zdXBwb3J0PXt9O3ZhciBiPWMuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7Yi5zdHlsZS5kaXNwbGF5PSJub25lIixiLmlubmVySFRNTD0iICAgPGxp
bmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0nY29sb3I6cmVk
O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVj
a2JveCcvPiI7dmFyIGU9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLGY9Yi5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGc9Yy5jcmVhdGVFbGVtZW50KCJz
ZWxlY3QiKSxoPWcuYXBwZW5kQ2hpbGQoYy5jcmVhdGVFbGVtZW50KCJvcHRpb24i
KSksaT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdO2lmKGUmJmUu
bGVuZ3RoJiZmKXtkLnN1cHBvcnQ9e2xlYWRpbmdXaGl0ZXNwYWNlOmIuZmlyc3RD
aGlsZC5ub2RlVHlwZT09PTMsdGJvZHk6IWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
InRib2R5IikubGVuZ3RoLGh0bWxTZXJpYWxpemU6ISFiLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJsaW5rIikubGVuZ3RoLHN0eWxlOi9yZWQvLnRlc3QoZi5nZXRBdHRy
aWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOmYuZ2V0QXR0cmlidXRlKCJo
cmVmIik9PT0iL2EiLG9wYWNpdHk6L14wLjU1JC8udGVzdChmLnN0eWxlLm9wYWNp
dHkpLGNzc0Zsb2F0OiEhZi5zdHlsZS5jc3NGbG9hdCxjaGVja09uOmkudmFsdWU9
PT0ib24iLG9wdFNlbGVjdGVkOmguc2VsZWN0ZWQsZGVsZXRlRXhwYW5kbzohMCxv
cHREaXNhYmxlZDohMSxjaGVja0Nsb25lOiExLG5vQ2xvbmVFdmVudDohMCxub0Ns
b25lQ2hlY2tlZDohMCxib3hNb2RlbDpudWxsLGlubGluZUJsb2NrTmVlZHNMYXlv
dXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZUhpZGRlbk9mZnNldHM6
ITB9LGkuY2hlY2tlZD0hMCxkLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQ9aS5jbG9u
ZU5vZGUoITApLmNoZWNrZWQsZy5kaXNhYmxlZD0hMCxkLnN1cHBvcnQub3B0RGlz
YWJsZWQ9IWguZGlzYWJsZWQ7dmFyIGo9bnVsbDtkLnN1cHBvcnQuc2NyaXB0RXZh
bD1mdW5jdGlvbigpe2lmKGo9PT1udWxsKXt2YXIgYj1jLmRvY3VtZW50RWxlbWVu
dCxlPWMuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksZj0ic2NyaXB0IitkLm5vdygp
O3RyeXtlLmFwcGVuZENoaWxkKGMuY3JlYXRlVGV4dE5vZGUoIndpbmRvdy4iK2Yr
Ij0xOyIpKX1jYXRjaChnKXt9Yi5pbnNlcnRCZWZvcmUoZSxiLmZpcnN0Q2hpbGQp
LGFbZl0/KGo9ITAsZGVsZXRlIGFbZl0pOmo9ITEsYi5yZW1vdmVDaGlsZChlKSxi
PWU9Zj1udWxsfXJldHVybiBqfTt0cnl7ZGVsZXRlIGIudGVzdH1jYXRjaChrKXtk
LnN1cHBvcnQuZGVsZXRlRXhwYW5kbz0hMX0hYi5hZGRFdmVudExpc3RlbmVyJiZi
LmF0dGFjaEV2ZW50JiZiLmZpcmVFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xp
Y2siLGZ1bmN0aW9uIGwoKXtkLnN1cHBvcnQubm9DbG9uZUV2ZW50PSExLGIuZGV0
YWNoRXZlbnQoIm9uY2xpY2siLGwpfSksYi5jbG9uZU5vZGUoITApLmZpcmVFdmVu
dCgib25jbGljayIpKSxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5pbm5lckhU
TUw9IjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0ncmFkaW90ZXN0JyBjaGVja2Vk
PSdjaGVja2VkJy8+Ijt2YXIgbT1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtt
LmFwcGVuZENoaWxkKGIuZmlyc3RDaGlsZCksZC5zdXBwb3J0LmNoZWNrQ2xvbmU9
bS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQs
ZChmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1jLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYil7YS5zdHlsZS53aWR0
aD1hLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiLGIuYXBwZW5kQ2hpbGQoYSksZC5i
b3hNb2RlbD1kLnN1cHBvcnQuYm94TW9kZWw9YS5vZmZzZXRXaWR0aD09PTIsInpv
b20iaW4gYS5zdHlsZSYmKGEuc3R5bGUuZGlzcGxheT0iaW5saW5lIixhLnN0eWxl
Lnpvb209MSxkLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dD1hLm9mZnNl
dFdpZHRoPT09MixhLnN0eWxlLmRpc3BsYXk9IiIsYS5pbm5lckhUTUw9IjxkaXYg
c3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiIsZC5zdXBwb3J0LnNocmlua1dyYXBC
bG9ja3M9YS5vZmZzZXRXaWR0aCE9PTIpLGEuaW5uZXJIVE1MPSI8dGFibGU+PHRy
Pjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90
ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7dmFyIGU9YS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgidGQiKTtkLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzPWVb
MF0ub2Zmc2V0SGVpZ2h0PT09MCxlWzBdLnN0eWxlLmRpc3BsYXk9IiIsZVsxXS5z
dHlsZS5kaXNwbGF5PSJub25lIixkLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZz
ZXRzPWQuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJmVbMF0ub2Zmc2V0
SGVpZ2h0PT09MCxhLmlubmVySFRNTD0iIixiLnJlbW92ZUNoaWxkKGEpLnN0eWxl
LmRpc3BsYXk9Im5vbmUiLGE9ZT1udWxsfX0pO3ZhciBuPWZ1bmN0aW9uKGEpe3Zh
ciBiPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YT0ib24iK2E7aWYoIWIuYXR0YWNo
RXZlbnQpcmV0dXJuITA7dmFyIGQ9YSBpbiBiO2R8fChiLnNldEF0dHJpYnV0ZShh
LCJyZXR1cm47IiksZD10eXBlb2YgYlthXT09PSJmdW5jdGlvbiIpLGI9bnVsbDty
ZXR1cm4gZH07ZC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXM9bigic3VibWl0IiksZC5z
dXBwb3J0LmNoYW5nZUJ1YmJsZXM9bigiY2hhbmdlIiksYj1lPWY9bnVsbH19KSgp
O3ZhciBlPS9eKD86XHsuKlx9fFxbLipcXSkkLztkLmV4dGVuZCh7Y2FjaGU6e30s
dXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKGQuZm4uanF1ZXJ5K01hdGgucmFuZG9t
KCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJj
bHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxl
dDohMH0saGFzRGF0YTpmdW5jdGlvbihhKXthPWEubm9kZVR5cGU/ZC5jYWNoZVth
W2QuZXhwYW5kb11dOmFbZC5leHBhbmRvXTtyZXR1cm4hIWEmJiFnKGEpfSxkYXRh
OmZ1bmN0aW9uKGEsYyxlLGYpe2lmKGQuYWNjZXB0RGF0YShhKSl7dmFyIGc9ZC5l
eHBhbmRvLGg9dHlwZW9mIGM9PT0ic3RyaW5nIixpLGo9YS5ub2RlVHlwZSxrPWo/
ZC5jYWNoZTphLGw9aj9hW2QuZXhwYW5kb106YVtkLmV4cGFuZG9dJiZkLmV4cGFu
ZG87aWYoKCFsfHxmJiZsJiYha1tsXVtnXSkmJmgmJmU9PT1iKXJldHVybjtsfHwo
aj9hW2QuZXhwYW5kb109bD0rK2QudXVpZDpsPWQuZXhwYW5kbyksa1tsXXx8KGtb
bF09e30sanx8KGtbbF0udG9KU09OPWQubm9vcCkpO2lmKHR5cGVvZiBjPT09Im9i
amVjdCJ8fHR5cGVvZiBjPT09ImZ1bmN0aW9uIilmP2tbbF1bZ109ZC5leHRlbmQo
a1tsXVtnXSxjKTprW2xdPWQuZXh0ZW5kKGtbbF0sYyk7aT1rW2xdLGYmJihpW2dd
fHwoaVtnXT17fSksaT1pW2ddKSxlIT09YiYmKGlbY109ZSk7aWYoYz09PSJldmVu
dHMiJiYhaVtjXSlyZXR1cm4gaVtnXSYmaVtnXS5ldmVudHM7cmV0dXJuIGg/aVtj
XTppfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihiLGMsZSl7aWYoZC5hY2NlcHREYXRh
KGIpKXt2YXIgZj1kLmV4cGFuZG8saD1iLm5vZGVUeXBlLGk9aD9kLmNhY2hlOmIs
aj1oP2JbZC5leHBhbmRvXTpkLmV4cGFuZG87aWYoIWlbal0pcmV0dXJuO2lmKGMp
e3ZhciBrPWU/aVtqXVtmXTppW2pdO2lmKGspe2RlbGV0ZSBrW2NdO2lmKCFnKGsp
KXJldHVybn19aWYoZSl7ZGVsZXRlIGlbal1bZl07aWYoIWcoaVtqXSkpcmV0dXJu
fXZhciBsPWlbal1bZl07ZC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fGkhPWE/ZGVs
ZXRlIGlbal06aVtqXT1udWxsLGw/KGlbal09e30saHx8KGlbal0udG9KU09OPWQu
bm9vcCksaVtqXVtmXT1sKTpoJiYoZC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8/ZGVs
ZXRlIGJbZC5leHBhbmRvXTpiLnJlbW92ZUF0dHJpYnV0ZT9iLnJlbW92ZUF0dHJp
YnV0ZShkLmV4cGFuZG8pOmJbZC5leHBhbmRvXT1udWxsKX19LF9kYXRhOmZ1bmN0
aW9uKGEsYixjKXtyZXR1cm4gZC5kYXRhKGEsYixjLCEwKX0sYWNjZXB0RGF0YTpm
dW5jdGlvbihhKXtpZihhLm5vZGVOYW1lKXt2YXIgYj1kLm5vRGF0YVthLm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCldO2lmKGIpcmV0dXJuIGIhPT0hMCYmYS5nZXRBdHRy
aWJ1dGUoImNsYXNzaWQiKT09PWJ9cmV0dXJuITB9fSksZC5mbi5leHRlbmQoe2Rh
dGE6ZnVuY3Rpb24oYSxjKXt2YXIgZT1udWxsO2lmKHR5cGVvZiBhPT09InVuZGVm
aW5lZCIpe2lmKHRoaXMubGVuZ3RoKXtlPWQuZGF0YSh0aGlzWzBdKTtpZih0aGlz
WzBdLm5vZGVUeXBlPT09MSl7dmFyIGc9dGhpc1swXS5hdHRyaWJ1dGVzLGg7Zm9y
KHZhciBpPTAsaj1nLmxlbmd0aDtpPGo7aSsrKWg9Z1tpXS5uYW1lLGguaW5kZXhP
ZigiZGF0YS0iKT09PTAmJihoPWguc3Vic3RyKDUpLGYodGhpc1swXSxoLGVbaF0p
KX19cmV0dXJuIGV9aWYodHlwZW9mIGE9PT0ib2JqZWN0IilyZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCl7ZC5kYXRhKHRoaXMsYSl9KTt2YXIgaz1hLnNwbGl0KCIu
Iik7a1sxXT1rWzFdPyIuIitrWzFdOiIiO2lmKGM9PT1iKXtlPXRoaXMudHJpZ2dl
ckhhbmRsZXIoImdldERhdGEiK2tbMV0rIiEiLFtrWzBdXSksZT09PWImJnRoaXMu
bGVuZ3RoJiYoZT1kLmRhdGEodGhpc1swXSxhKSxlPWYodGhpc1swXSxhLGUpKTty
ZXR1cm4gZT09PWImJmtbMV0/dGhpcy5kYXRhKGtbMF0pOmV9cmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpe3ZhciBiPWQodGhpcyksZT1ba1swXSxjXTtiLnRyaWdn
ZXJIYW5kbGVyKCJzZXREYXRhIitrWzFdKyIhIixlKSxkLmRhdGEodGhpcyxhLGMp
LGIudHJpZ2dlckhhbmRsZXIoImNoYW5nZURhdGEiK2tbMV0rIiEiLGUpfSl9LHJl
bW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
e2QucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSksZC5leHRlbmQoe3F1ZXVlOmZ1bmN0
aW9uKGEsYixjKXtpZihhKXtiPShifHwiZngiKSsicXVldWUiO3ZhciBlPWQuX2Rh
dGEoYSxiKTtpZighYylyZXR1cm4gZXx8W107IWV8fGQuaXNBcnJheShjKT9lPWQu
X2RhdGEoYSxiLGQubWFrZUFycmF5KGMpKTplLnB1c2goYyk7cmV0dXJuIGV9fSxk
ZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWQucXVldWUoYSxi
KSxlPWMuc2hpZnQoKTtlPT09ImlucHJvZ3Jlc3MiJiYoZT1jLnNoaWZ0KCkpLGUm
JihiPT09ImZ4IiYmYy51bnNoaWZ0KCJpbnByb2dyZXNzIiksZS5jYWxsKGEsZnVu
Y3Rpb24oKXtkLmRlcXVldWUoYSxiKX0pKSxjLmxlbmd0aHx8ZC5yZW1vdmVEYXRh
KGEsYisicXVldWUiLCEwKX19KSxkLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24o
YSxjKXt0eXBlb2YgYSE9PSJzdHJpbmciJiYoYz1hLGE9ImZ4Iik7aWYoYz09PWIp
cmV0dXJuIGQucXVldWUodGhpc1swXSxhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKGIpe3ZhciBlPWQucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZlWzBdIT09
ImlucHJvZ3Jlc3MiJiZkLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0
aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkLmRlcXVldWUodGhp
cyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9ZC5meD9kLmZ4LnNwZWVkc1th
XXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKCl7
dmFyIGM9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5kZXF1ZXVlKGMsYil9
LGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUo
YXx8ImZ4IixbXSl9fSk7dmFyIGg9L1tcblx0XHJdL2csaT0vXHMrLyxqPS9cci9n
LGs9L14oPzpocmVmfHNyY3xzdHlsZSkkLyxsPS9eKD86YnV0dG9ufGlucHV0KSQv
aSxtPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9p
LG49L15hKD86cmVhKT8kL2ksbz0vXig/OnJhZGlvfGNoZWNrYm94KSQvaTtkLnBy
b3BzPXsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixyZWFkb25s
eToicmVhZE9ubHkiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoi
Y2VsbFNwYWNpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4i
LHRhYmluZGV4OiJ0YWJJbmRleCIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVy
OiJmcmFtZUJvcmRlciJ9LGQuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7
cmV0dXJuIGQuYWNjZXNzKHRoaXMsYSxiLCEwLGQuYXR0cil9LHJlbW92ZUF0dHI6
ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZC5hdHRy
KHRoaXMsYSwiIiksdGhpcy5ub2RlVHlwZT09PTEmJnRoaXMucmVtb3ZlQXR0cmli
dXRlKGEpfSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe2lmKGQuaXNGdW5jdGlvbihh
KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWQodGhpcyk7Yy5h
ZGRDbGFzcyhhLmNhbGwodGhpcyxiLGMuYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYm
dHlwZW9mIGE9PT0ic3RyaW5nIil7dmFyIGI9KGF8fCIiKS5zcGxpdChpKTtmb3Io
dmFyIGM9MCxlPXRoaXMubGVuZ3RoO2M8ZTtjKyspe3ZhciBmPXRoaXNbY107aWYo
Zi5ub2RlVHlwZT09PTEpaWYoZi5jbGFzc05hbWUpe3ZhciBnPSIgIitmLmNsYXNz
TmFtZSsiICIsaD1mLmNsYXNzTmFtZTtmb3IodmFyIGo9MCxrPWIubGVuZ3RoO2o8
aztqKyspZy5pbmRleE9mKCIgIitiW2pdKyIgIik8MCYmKGgrPSIgIitiW2pdKTtm
LmNsYXNzTmFtZT1kLnRyaW0oaCl9ZWxzZSBmLmNsYXNzTmFtZT1hfX1yZXR1cm4g
dGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7aWYoZC5pc0Z1bmN0aW9uKGEp
KXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9ZCh0aGlzKTtjLnJl
bW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsYy5hdHRyKCJjbGFzcyIpKSl9KTtpZihh
JiZ0eXBlb2YgYT09PSJzdHJpbmcifHxhPT09Yil7dmFyIGM9KGF8fCIiKS5zcGxp
dChpKTtmb3IodmFyIGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspe3ZhciBnPXRo
aXNbZV07aWYoZy5ub2RlVHlwZT09PTEmJmcuY2xhc3NOYW1lKWlmKGEpe3ZhciBq
PSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKGgsIiAiKTtmb3IodmFyIGs9
MCxsPWMubGVuZ3RoO2s8bDtrKyspaj1qLnJlcGxhY2UoIiAiK2Nba10rIiAiLCIg
Iik7Zy5jbGFzc05hbWU9ZC50cmltKGopfWVsc2UgZy5jbGFzc05hbWU9IiJ9fXJl
dHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVv
ZiBhLGU9dHlwZW9mIGI9PT0iYm9vbGVhbiI7aWYoZC5pc0Z1bmN0aW9uKGEpKXJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU9ZCh0aGlzKTtlLnRvZ2ds
ZUNsYXNzKGEuY2FsbCh0aGlzLGMsZS5hdHRyKCJjbGFzcyIpLGIpLGIpfSk7cmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGM9PT0ic3RyaW5nIil7dmFyIGYs
Zz0wLGg9ZCh0aGlzKSxqPWIsaz1hLnNwbGl0KGkpO3doaWxlKGY9a1tnKytdKWo9
ZT9qOiFoLmhhc0NsYXNzKGYpLGhbaj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJd
KGYpfWVsc2UgaWYoYz09PSJ1bmRlZmluZWQifHxjPT09ImJvb2xlYW4iKXRoaXMu
Y2xhc3NOYW1lJiZkLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xh
c3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIi
OmQuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn0pfSxoYXNDbGFzczpm
dW5jdGlvbihhKXt2YXIgYj0iICIrYSsiICI7Zm9yKHZhciBjPTAsZD10aGlzLmxl
bmd0aDtjPGQ7YysrKWlmKCgiICIrdGhpc1tjXS5jbGFzc05hbWUrIiAiKS5yZXBs
YWNlKGgsIiAiKS5pbmRleE9mKGIpPi0xKXJldHVybiEwO3JldHVybiExfSx2YWw6
ZnVuY3Rpb24oYSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBjPXRoaXNbMF07
aWYoYyl7aWYoZC5ub2RlTmFtZShjLCJvcHRpb24iKSl7dmFyIGU9Yy5hdHRyaWJ1
dGVzLnZhbHVlO3JldHVybiFlfHxlLnNwZWNpZmllZD9jLnZhbHVlOmMudGV4dH1p
ZihkLm5vZGVOYW1lKGMsInNlbGVjdCIpKXt2YXIgZj1jLnNlbGVjdGVkSW5kZXgs
Zz1bXSxoPWMub3B0aW9ucyxpPWMudHlwZT09PSJzZWxlY3Qtb25lIjtpZihmPDAp
cmV0dXJuIG51bGw7Zm9yKHZhciBrPWk/ZjowLGw9aT9mKzE6aC5sZW5ndGg7azxs
O2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkJiYoZC5zdXBwb3J0Lm9wdERp
c2FibGVkPyFtLmRpc2FibGVkOm0uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09
bnVsbCkmJighbS5wYXJlbnROb2RlLmRpc2FibGVkfHwhZC5ub2RlTmFtZShtLnBh
cmVudE5vZGUsIm9wdGdyb3VwIikpKXthPWQobSkudmFsKCk7aWYoaSlyZXR1cm4g
YTtnLnB1c2goYSl9fWlmKGkmJiFnLmxlbmd0aCYmaC5sZW5ndGgpcmV0dXJuIGQo
aFtmXSkudmFsKCk7cmV0dXJuIGd9aWYoby50ZXN0KGMudHlwZSkmJiFkLnN1cHBv
cnQuY2hlY2tPbilyZXR1cm4gYy5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxs
PyJvbiI6Yy52YWx1ZTtyZXR1cm4oYy52YWx1ZXx8IiIpLnJlcGxhY2UoaiwiIil9
cmV0dXJuIGJ9dmFyIG49ZC5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oYil7dmFyIGM9ZCh0aGlzKSxlPWE7aWYodGhpcy5ub2RlVHlwZT09
PTEpe24mJihlPWEuY2FsbCh0aGlzLGIsYy52YWwoKSkpLGU9PW51bGw/ZT0iIjp0
eXBlb2YgZT09PSJudW1iZXIiP2UrPSIiOmQuaXNBcnJheShlKSYmKGU9ZC5tYXAo
ZSxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpO2lmKGQuaXNB
cnJheShlKSYmby50ZXN0KHRoaXMudHlwZSkpdGhpcy5jaGVja2VkPWQuaW5BcnJh
eShjLnZhbCgpLGUpPj0wO2Vsc2UgaWYoZC5ub2RlTmFtZSh0aGlzLCJzZWxlY3Qi
KSl7dmFyIGY9ZC5tYWtlQXJyYXkoZSk7ZCgib3B0aW9uIix0aGlzKS5lYWNoKGZ1
bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1kLmluQXJyYXkoZCh0aGlzKS52YWwoKSxm
KT49MH0pLGYubGVuZ3RofHwodGhpcy5zZWxlY3RlZEluZGV4PS0xKX1lbHNlIHRo
aXMudmFsdWU9ZX19KX19KSxkLmV4dGVuZCh7YXR0ckZuOnt2YWw6ITAsY3NzOiEw
LGh0bWw6ITAsdGV4dDohMCxkYXRhOiEwLHdpZHRoOiEwLGhlaWdodDohMCxvZmZz
ZXQ6ITB9LGF0dHI6ZnVuY3Rpb24oYSxjLGUsZil7aWYoIWF8fGEubm9kZVR5cGU9
PT0zfHxhLm5vZGVUeXBlPT09OHx8YS5ub2RlVHlwZT09PTIpcmV0dXJuIGI7aWYo
ZiYmYyBpbiBkLmF0dHJGbilyZXR1cm4gZChhKVtjXShlKTt2YXIgZz1hLm5vZGVU
eXBlIT09MXx8IWQuaXNYTUxEb2MoYSksaD1lIT09YjtjPWcmJmQucHJvcHNbY118
fGM7aWYoYS5ub2RlVHlwZT09PTEpe3ZhciBpPWsudGVzdChjKTtpZihjPT09InNl
bGVjdGVkIiYmIWQuc3VwcG9ydC5vcHRTZWxlY3RlZCl7dmFyIGo9YS5wYXJlbnRO
b2RlO2omJihqLnNlbGVjdGVkSW5kZXgsai5wYXJlbnROb2RlJiZqLnBhcmVudE5v
ZGUuc2VsZWN0ZWRJbmRleCl9aWYoKGMgaW4gYXx8YVtjXSE9PWIpJiZnJiYhaSl7
aCYmKGM9PT0idHlwZSImJmwudGVzdChhLm5vZGVOYW1lKSYmYS5wYXJlbnROb2Rl
JiZkLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKSxlPT09
bnVsbD9hLm5vZGVUeXBlPT09MSYmYS5yZW1vdmVBdHRyaWJ1dGUoYyk6YVtjXT1l
KTtpZihkLm5vZGVOYW1lKGEsImZvcm0iKSYmYS5nZXRBdHRyaWJ1dGVOb2RlKGMp
KXJldHVybiBhLmdldEF0dHJpYnV0ZU5vZGUoYykubm9kZVZhbHVlO2lmKGM9PT0i
dGFiSW5kZXgiKXt2YXIgbz1hLmdldEF0dHJpYnV0ZU5vZGUoInRhYkluZGV4Iik7
cmV0dXJuIG8mJm8uc3BlY2lmaWVkP28udmFsdWU6bS50ZXN0KGEubm9kZU5hbWUp
fHxuLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9cmV0dXJuIGFbY119aWYo
IWQuc3VwcG9ydC5zdHlsZSYmZyYmYz09PSJzdHlsZSIpe2gmJihhLnN0eWxlLmNz
c1RleHQ9IiIrZSk7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dH1oJiZhLnNldEF0dHJp
YnV0ZShjLCIiK2UpO2lmKCFhLmF0dHJpYnV0ZXNbY10mJihhLmhhc0F0dHJpYnV0
ZSYmIWEuaGFzQXR0cmlidXRlKGMpKSlyZXR1cm4gYjt2YXIgcD0hZC5zdXBwb3J0
LmhyZWZOb3JtYWxpemVkJiZnJiZpP2EuZ2V0QXR0cmlidXRlKGMsMik6YS5nZXRB
dHRyaWJ1dGUoYyk7cmV0dXJuIHA9PT1udWxsP2I6cH1oJiYoYVtjXT1lKTtyZXR1
cm4gYVtjXX19KTt2YXIgcD0vXC4oLiopJC8scT0vXig/OnRleHRhcmVhfGlucHV0
fHNlbGVjdCkkL2kscj0vXC4vZyxzPS8gL2csdD0vW15cd1xzLnxgXS9nLHU9ZnVu
Y3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSh0LCJcXCQmIil9O2QuZXZlbnQ9e2Fk
ZDpmdW5jdGlvbihjLGUsZixnKXtpZihjLm5vZGVUeXBlIT09MyYmYy5ub2RlVHlw
ZSE9PTgpe3RyeXtkLmlzV2luZG93KGMpJiYoYyE9PWEmJiFjLmZyYW1lRWxlbWVu
dCkmJihjPWEpfWNhdGNoKGgpe31pZihmPT09ITEpZj12O2Vsc2UgaWYoIWYpcmV0
dXJuO3ZhciBpLGo7Zi5oYW5kbGVyJiYoaT1mLGY9aS5oYW5kbGVyKSxmLmd1aWR8
fChmLmd1aWQ9ZC5ndWlkKyspO3ZhciBrPWQuX2RhdGEoYyk7aWYoIWspcmV0dXJu
O3ZhciBsPWsuZXZlbnRzLG09ay5oYW5kbGU7bHx8KGsuZXZlbnRzPWw9e30pLG18
fChrLmhhbmRsZT1tPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBkIT09InVuZGVm
aW5lZCImJiFkLmV2ZW50LnRyaWdnZXJlZD9kLmV2ZW50LmhhbmRsZS5hcHBseSht
LmVsZW0sYXJndW1lbnRzKTpifSksbS5lbGVtPWMsZT1lLnNwbGl0KCIgIik7dmFy
IG4sbz0wLHA7d2hpbGUobj1lW28rK10pe2o9aT9kLmV4dGVuZCh7fSxpKTp7aGFu
ZGxlcjpmLGRhdGE6Z30sbi5pbmRleE9mKCIuIik+LTE/KHA9bi5zcGxpdCgiLiIp
LG49cC5zaGlmdCgpLGoubmFtZXNwYWNlPXAuc2xpY2UoMCkuc29ydCgpLmpvaW4o
Ii4iKSk6KHA9W10sai5uYW1lc3BhY2U9IiIpLGoudHlwZT1uLGouZ3VpZHx8KGou
Z3VpZD1mLmd1aWQpO3ZhciBxPWxbbl0scj1kLmV2ZW50LnNwZWNpYWxbbl18fHt9
O2lmKCFxKXtxPWxbbl09W107aWYoIXIuc2V0dXB8fHIuc2V0dXAuY2FsbChjLGcs
cCxtKT09PSExKWMuYWRkRXZlbnRMaXN0ZW5lcj9jLmFkZEV2ZW50TGlzdGVuZXIo
bixtLCExKTpjLmF0dGFjaEV2ZW50JiZjLmF0dGFjaEV2ZW50KCJvbiIrbixtKX1y
LmFkZCYmKHIuYWRkLmNhbGwoYyxqKSxqLmhhbmRsZXIuZ3VpZHx8KGouaGFuZGxl
ci5ndWlkPWYuZ3VpZCkpLHEucHVzaChqKSxkLmV2ZW50Lmdsb2JhbFtuXT0hMH1j
PW51bGx9fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYyxlLGYpe2lmKGEu
bm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCl7ZT09PSExJiYoZT12KTt2YXIg
ZyxoLGksaixrPTAsbCxtLG4sbyxwLHEscixzPWQuaGFzRGF0YShhKSYmZC5fZGF0
YShhKSx0PXMmJnMuZXZlbnRzO2lmKCFzfHwhdClyZXR1cm47YyYmYy50eXBlJiYo
ZT1jLmhhbmRsZXIsYz1jLnR5cGUpO2lmKCFjfHx0eXBlb2YgYz09PSJzdHJpbmci
JiZjLmNoYXJBdCgwKT09PSIuIil7Yz1jfHwiIjtmb3IoaCBpbiB0KWQuZXZlbnQu
cmVtb3ZlKGEsaCtjKTtyZXR1cm59Yz1jLnNwbGl0KCIgIik7d2hpbGUoaD1jW2sr
K10pe3I9aCxxPW51bGwsbD1oLmluZGV4T2YoIi4iKTwwLG09W10sbHx8KG09aC5z
cGxpdCgiLiIpLGg9bS5zaGlmdCgpLG49bmV3IFJlZ0V4cCgiKF58XFwuKSIrZC5t
YXAobS5zbGljZSgwKS5zb3J0KCksdSkuam9pbigiXFwuKD86LipcXC4pPyIpKyIo
XFwufCQpIikpLHA9dFtoXTtpZighcCljb250aW51ZTtpZighZSl7Zm9yKGo9MDtq
PHAubGVuZ3RoO2orKyl7cT1wW2pdO2lmKGx8fG4udGVzdChxLm5hbWVzcGFjZSkp
ZC5ldmVudC5yZW1vdmUoYSxyLHEuaGFuZGxlcixqKSxwLnNwbGljZShqLS0sMSl9
Y29udGludWV9bz1kLmV2ZW50LnNwZWNpYWxbaF18fHt9O2ZvcihqPWZ8fDA7ajxw
Lmxlbmd0aDtqKyspe3E9cFtqXTtpZihlLmd1aWQ9PT1xLmd1aWQpe2lmKGx8fG4u
dGVzdChxLm5hbWVzcGFjZSkpZj09bnVsbCYmcC5zcGxpY2Uoai0tLDEpLG8ucmVt
b3ZlJiZvLnJlbW92ZS5jYWxsKGEscSk7aWYoZiE9bnVsbClicmVha319aWYocC5s
ZW5ndGg9PT0wfHxmIT1udWxsJiZwLmxlbmd0aD09PTEpKCFvLnRlYXJkb3dufHxv
LnRlYXJkb3duLmNhbGwoYSxtKT09PSExKSYmZC5yZW1vdmVFdmVudChhLGgscy5o
YW5kbGUpLGc9bnVsbCxkZWxldGUgdFtoXX1pZihkLmlzRW1wdHlPYmplY3QodCkp
e3ZhciB3PXMuaGFuZGxlO3cmJih3LmVsZW09bnVsbCksZGVsZXRlIHMuZXZlbnRz
LGRlbGV0ZSBzLmhhbmRsZSxkLmlzRW1wdHlPYmplY3QocykmJmQucmVtb3ZlRGF0
YShhLGIsITApfX19LHRyaWdnZXI6ZnVuY3Rpb24oYSxjLGUpe3ZhciBmPWEudHlw
ZXx8YSxnPWFyZ3VtZW50c1szXTtpZighZyl7YT10eXBlb2YgYT09PSJvYmplY3Qi
P2FbZC5leHBhbmRvXT9hOmQuZXh0ZW5kKGQuRXZlbnQoZiksYSk6ZC5FdmVudChm
KSxmLmluZGV4T2YoIiEiKT49MCYmKGEudHlwZT1mPWYuc2xpY2UoMCwtMSksYS5l
eGNsdXNpdmU9ITApLGV8fChhLnN0b3BQcm9wYWdhdGlvbigpLGQuZXZlbnQuZ2xv
YmFsW2ZdJiZkLmVhY2goZC5jYWNoZSxmdW5jdGlvbigpe3ZhciBiPWQuZXhwYW5k
byxlPXRoaXNbYl07ZSYmZS5ldmVudHMmJmUuZXZlbnRzW2ZdJiZkLmV2ZW50LnRy
aWdnZXIoYSxjLGUuaGFuZGxlLmVsZW0pfSkpO2lmKCFlfHxlLm5vZGVUeXBlPT09
M3x8ZS5ub2RlVHlwZT09PTgpcmV0dXJuIGI7YS5yZXN1bHQ9YixhLnRhcmdldD1l
LGM9ZC5tYWtlQXJyYXkoYyksYy51bnNoaWZ0KGEpfWEuY3VycmVudFRhcmdldD1l
O3ZhciBoPWQuX2RhdGEoZSwiaGFuZGxlIik7aCYmaC5hcHBseShlLGMpO3ZhciBp
PWUucGFyZW50Tm9kZXx8ZS5vd25lckRvY3VtZW50O3RyeXtlJiZlLm5vZGVOYW1l
JiZkLm5vRGF0YVtlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxlWyJvbiIrZl0m
JmVbIm9uIitmXS5hcHBseShlLGMpPT09ITEmJihhLnJlc3VsdD0hMSxhLnByZXZl
bnREZWZhdWx0KCkpfWNhdGNoKGope31pZighYS5pc1Byb3BhZ2F0aW9uU3RvcHBl
ZCgpJiZpKWQuZXZlbnQudHJpZ2dlcihhLGMsaSwhMCk7ZWxzZSBpZighYS5pc0Rl
ZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGssbD1hLnRhcmdldCxtPWYucmVwbGFjZShw
LCIiKSxuPWQubm9kZU5hbWUobCwiYSIpJiZtPT09ImNsaWNrIixvPWQuZXZlbnQu
c3BlY2lhbFttXXx8e307aWYoKCFvLl9kZWZhdWx0fHxvLl9kZWZhdWx0LmNhbGwo
ZSxhKT09PSExKSYmIW4mJiEobCYmbC5ub2RlTmFtZSYmZC5ub0RhdGFbbC5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpXSkpe3RyeXtsW21dJiYoaz1sWyJvbiIrbV0sayYm
KGxbIm9uIittXT1udWxsKSxkLmV2ZW50LnRyaWdnZXJlZD0hMCxsW21dKCkpfWNh
dGNoKHEpe31rJiYobFsib24iK21dPWspLGQuZXZlbnQudHJpZ2dlcmVkPSExfX19
LGhhbmRsZTpmdW5jdGlvbihjKXt2YXIgZSxmLGcsaCxpLGo9W10saz1kLm1ha2VB
cnJheShhcmd1bWVudHMpO2M9a1swXT1kLmV2ZW50LmZpeChjfHxhLmV2ZW50KSxj
LmN1cnJlbnRUYXJnZXQ9dGhpcyxlPWMudHlwZS5pbmRleE9mKCIuIik8MCYmIWMu
ZXhjbHVzaXZlLGV8fChnPWMudHlwZS5zcGxpdCgiLiIpLGMudHlwZT1nLnNoaWZ0
KCksaj1nLnNsaWNlKDApLnNvcnQoKSxoPW5ldyBSZWdFeHAoIihefFxcLikiK2ou
am9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIikpLGMubmFtZXNwYWNlPWMu
bmFtZXNwYWNlfHxqLmpvaW4oIi4iKSxpPWQuX2RhdGEodGhpcywiZXZlbnRzIiks
Zj0oaXx8e30pW2MudHlwZV07aWYoaSYmZil7Zj1mLnNsaWNlKDApO2Zvcih2YXIg
bD0wLG09Zi5sZW5ndGg7bDxtO2wrKyl7dmFyIG49ZltsXTtpZihlfHxoLnRlc3Qo
bi5uYW1lc3BhY2UpKXtjLmhhbmRsZXI9bi5oYW5kbGVyLGMuZGF0YT1uLmRhdGEs
Yy5oYW5kbGVPYmo9bjt2YXIgbz1uLmhhbmRsZXIuYXBwbHkodGhpcyxrKTtvIT09
YiYmKGMucmVzdWx0PW8sbz09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3Rv
cFByb3BhZ2F0aW9uKCkpKTtpZihjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9w
cGVkKCkpYnJlYWt9fX1yZXR1cm4gYy5yZXN1bHR9LHByb3BzOiJhbHRLZXkgYXR0
ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBjYW5jZWxhYmxlIGNoYXJD
b2RlIGNsaWVudFggY2xpZW50WSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGF0YSBk
ZXRhaWwgZXZlbnRQaGFzZSBmcm9tRWxlbWVudCBoYW5kbGVyIGtleUNvZGUgbGF5
ZXJYIGxheWVyWSBtZXRhS2V5IG5ld1ZhbHVlIG9mZnNldFggb2Zmc2V0WSBwYWdl
WCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRlZFRhcmdldCBzY3Jl
ZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdG9FbGVtZW50
IHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAiKSxmaXg6ZnVuY3Rpb24o
YSl7aWYoYVtkLmV4cGFuZG9dKXJldHVybiBhO3ZhciBlPWE7YT1kLkV2ZW50KGUp
O2Zvcih2YXIgZj10aGlzLnByb3BzLmxlbmd0aCxnO2Y7KWc9dGhpcy5wcm9wc1st
LWZdLGFbZ109ZVtnXTthLnRhcmdldHx8KGEudGFyZ2V0PWEuc3JjRWxlbWVudHx8
YyksYS50YXJnZXQubm9kZVR5cGU9PT0zJiYoYS50YXJnZXQ9YS50YXJnZXQucGFy
ZW50Tm9kZSksIWEucmVsYXRlZFRhcmdldCYmYS5mcm9tRWxlbWVudCYmKGEucmVs
YXRlZFRhcmdldD1hLmZyb21FbGVtZW50PT09YS50YXJnZXQ/YS50b0VsZW1lbnQ6
YS5mcm9tRWxlbWVudCk7aWYoYS5wYWdlWD09bnVsbCYmYS5jbGllbnRYIT1udWxs
KXt2YXIgaD1jLmRvY3VtZW50RWxlbWVudCxpPWMuYm9keTthLnBhZ2VYPWEuY2xp
ZW50WCsoaCYmaC5zY3JvbGxMZWZ0fHxpJiZpLnNjcm9sbExlZnR8fDApLShoJiZo
LmNsaWVudExlZnR8fGkmJmkuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1hLmNsaWVu
dFkrKGgmJmguc2Nyb2xsVG9wfHxpJiZpLnNjcm9sbFRvcHx8MCktKGgmJmguY2xp
ZW50VG9wfHxpJiZpLmNsaWVudFRvcHx8MCl9YS53aGljaD09bnVsbCYmKGEuY2hh
ckNvZGUhPW51bGx8fGEua2V5Q29kZSE9bnVsbCkmJihhLndoaWNoPWEuY2hhckNv
ZGUhPW51bGw/YS5jaGFyQ29kZTphLmtleUNvZGUpLCFhLm1ldGFLZXkmJmEuY3Ry
bEtleSYmKGEubWV0YUtleT1hLmN0cmxLZXkpLCFhLndoaWNoJiZhLmJ1dHRvbiE9
PWImJihhLndoaWNoPWEuYnV0dG9uJjE/MTphLmJ1dHRvbiYyPzM6YS5idXR0b24m
ND8yOjApO3JldHVybiBhfSxndWlkOjFlOCxwcm94eTpkLnByb3h5LHNwZWNpYWw6
e3JlYWR5OntzZXR1cDpkLmJpbmRSZWFkeSx0ZWFyZG93bjpkLm5vb3B9LGxpdmU6
e2FkZDpmdW5jdGlvbihhKXtkLmV2ZW50LmFkZCh0aGlzLEYoYS5vcmlnVHlwZSxh
LnNlbGVjdG9yKSxkLmV4dGVuZCh7fSxhLHtoYW5kbGVyOkUsZ3VpZDphLmhhbmRs
ZXIuZ3VpZH0pKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe2QuZXZlbnQucmVtb3ZlKHRo
aXMsRihhLm9yaWdUeXBlLGEuc2VsZWN0b3IpLGEpfX0sYmVmb3JldW5sb2FkOntz
ZXR1cDpmdW5jdGlvbihhLGIsYyl7ZC5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25i
ZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJl
Zm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19fSxk
LnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIs
Yyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIo
YixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNo
RXZlbnQoIm9uIitiLGMpfSxkLkV2ZW50PWZ1bmN0aW9uKGEpe2lmKCF0aGlzLnBy
ZXZlbnREZWZhdWx0KXJldHVybiBuZXcgZC5FdmVudChhKTthJiZhLnR5cGU/KHRo
aXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1
bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHxhLnJldHVyblZhbHVlPT09
ITF8fGEuZ2V0UHJldmVudERlZmF1bHQmJmEuZ2V0UHJldmVudERlZmF1bHQoKT93
OnYpOnRoaXMudHlwZT1hLHRoaXMudGltZVN0YW1wPWQubm93KCksdGhpc1tkLmV4
cGFuZG9dPSEwfSxkLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVu
Y3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD13O3ZhciBhPXRoaXMub3Jp
Z2luYWxFdmVudDthJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0
KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigp
e3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dzt2YXIgYT10aGlzLm9yaWdpbmFs
RXZlbnQ7YSYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigp
LGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1
bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD13LHRo
aXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDp2LGlzUHJv
cGFnYXRpb25TdG9wcGVkOnYsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6
dn07dmFyIHg9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZWxhdGVkVGFyZ2V0O3RyeXtp
ZihiIT09YyYmIWIucGFyZW50Tm9kZSlyZXR1cm47d2hpbGUoYiYmYiE9PXRoaXMp
Yj1iLnBhcmVudE5vZGU7YiE9PXRoaXMmJihhLnR5cGU9YS5kYXRhLGQuZXZlbnQu
aGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9Y2F0Y2goZSl7fX0seT1mdW5j
dGlvbihhKXthLnR5cGU9YS5kYXRhLGQuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMs
YXJndW1lbnRzKX07ZC5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNl
bGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oYSxiKXtkLmV2ZW50LnNwZWNpYWxb
YV09e3NldHVwOmZ1bmN0aW9uKGMpe2QuZXZlbnQuYWRkKHRoaXMsYixjJiZjLnNl
bGVjdG9yP3k6eCxhKX0sdGVhcmRvd246ZnVuY3Rpb24oYSl7ZC5ldmVudC5yZW1v
dmUodGhpcyxiLGEmJmEuc2VsZWN0b3I/eTp4KX19fSksZC5zdXBwb3J0LnN1Ym1p
dEJ1YmJsZXN8fChkLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlv
bihhLGIpe2lmKHRoaXMubm9kZU5hbWUmJnRoaXMubm9kZU5hbWUudG9Mb3dlckNh
c2UoKSE9PSJmb3JtIilkLmV2ZW50LmFkZCh0aGlzLCJjbGljay5zcGVjaWFsU3Vi
bWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPWIudHlwZTsoYz09PSJz
dWJtaXQifHxjPT09ImltYWdlIikmJmQoYikuY2xvc2VzdCgiZm9ybSIpLmxlbmd0
aCYmQygic3VibWl0Iix0aGlzLGFyZ3VtZW50cyl9KSxkLmV2ZW50LmFkZCh0aGlz
LCJrZXlwcmVzcy5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRh
cmdldCxjPWIudHlwZTsoYz09PSJ0ZXh0Inx8Yz09PSJwYXNzd29yZCIpJiZkKGIp
LmNsb3Nlc3QoImZvcm0iKS5sZW5ndGgmJmEua2V5Q29kZT09PTEzJiZDKCJzdWJt
aXQiLHRoaXMsYXJndW1lbnRzKX0pO2Vsc2UgcmV0dXJuITF9LHRlYXJkb3duOmZ1
bmN0aW9uKGEpe2QuZXZlbnQucmVtb3ZlKHRoaXMsIi5zcGVjaWFsU3VibWl0Iil9
fSk7aWYoIWQuc3VwcG9ydC5jaGFuZ2VCdWJibGVzKXt2YXIgeixBPWZ1bmN0aW9u
KGEpe3ZhciBiPWEudHlwZSxjPWEudmFsdWU7Yj09PSJyYWRpbyJ8fGI9PT0iY2hl
Y2tib3giP2M9YS5jaGVja2VkOmI9PT0ic2VsZWN0LW11bHRpcGxlIj9jPWEuc2Vs
ZWN0ZWRJbmRleD4tMT9kLm1hcChhLm9wdGlvbnMsZnVuY3Rpb24oYSl7cmV0dXJu
IGEuc2VsZWN0ZWR9KS5qb2luKCItIik6IiI6YS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpPT09InNlbGVjdCImJihjPWEuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIGN9LEI9
ZnVuY3Rpb24gQihhKXt2YXIgYz1hLnRhcmdldCxlLGY7aWYocS50ZXN0KGMubm9k
ZU5hbWUpJiYhYy5yZWFkT25seSl7ZT1kLl9kYXRhKGMsIl9jaGFuZ2VfZGF0YSIp
LGY9QShjKSwoYS50eXBlIT09ImZvY3Vzb3V0Inx8Yy50eXBlIT09InJhZGlvIikm
JmQuX2RhdGEoYywiX2NoYW5nZV9kYXRhIixmKTtpZihlPT09Ynx8Zj09PWUpcmV0
dXJuO2lmKGUhPW51bGx8fGYpYS50eXBlPSJjaGFuZ2UiLGEubGl2ZUZpcmVkPWIs
ZC5ldmVudC50cmlnZ2VyKGEsYXJndW1lbnRzWzFdLGMpfX07ZC5ldmVudC5zcGVj
aWFsLmNoYW5nZT17ZmlsdGVyczp7Zm9jdXNvdXQ6QixiZWZvcmVkZWFjdGl2YXRl
OkIsY2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1iLnR5cGU7KGM9
PT0icmFkaW8ifHxjPT09ImNoZWNrYm94Inx8Yi5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpPT09InNlbGVjdCIpJiZCLmNhbGwodGhpcyxhKX0sa2V5ZG93bjpmdW5jdGlv
bihhKXt2YXIgYj1hLnRhcmdldCxjPWIudHlwZTsoYS5rZXlDb2RlPT09MTMmJmIu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJ0ZXh0YXJlYSJ8fGEua2V5Q29kZT09
PTMyJiYoYz09PSJjaGVja2JveCJ8fGM9PT0icmFkaW8iKXx8Yz09PSJzZWxlY3Qt
bXVsdGlwbGUiKSYmQi5jYWxsKHRoaXMsYSl9LGJlZm9yZWFjdGl2YXRlOmZ1bmN0
aW9uKGEpe3ZhciBiPWEudGFyZ2V0O2QuX2RhdGEoYiwiX2NoYW5nZV9kYXRhIixB
KGIpKX19LHNldHVwOmZ1bmN0aW9uKGEsYil7aWYodGhpcy50eXBlPT09ImZpbGUi
KXJldHVybiExO2Zvcih2YXIgYyBpbiB6KWQuZXZlbnQuYWRkKHRoaXMsYysiLnNw
ZWNpYWxDaGFuZ2UiLHpbY10pO3JldHVybiBxLnRlc3QodGhpcy5ub2RlTmFtZSl9
LHRlYXJkb3duOmZ1bmN0aW9uKGEpe2QuZXZlbnQucmVtb3ZlKHRoaXMsIi5zcGVj
aWFsQ2hhbmdlIik7cmV0dXJuIHEudGVzdCh0aGlzLm5vZGVOYW1lKX19LHo9ZC5l
dmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzLHouZm9jdXM9ei5iZWZvcmVhY3Rp
dmF0ZX1jLmFkZEV2ZW50TGlzdGVuZXImJmQuZWFjaCh7Zm9jdXM6ImZvY3VzaW4i
LGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2E9
ZC5ldmVudC5maXgoYSksYS50eXBlPWI7cmV0dXJuIGQuZXZlbnQuaGFuZGxlLmNh
bGwodGhpcyxhKX1kLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7
dGhpcy5hZGRFdmVudExpc3RlbmVyKGEsYywhMCl9LHRlYXJkb3duOmZ1bmN0aW9u
KCl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMCl9fX0pLGQuZWFjaChb
ImJpbmQiLCJvbmUiXSxmdW5jdGlvbihhLGMpe2QuZm5bY109ZnVuY3Rpb24oYSxl
LGYpe2lmKHR5cGVvZiBhPT09Im9iamVjdCIpe2Zvcih2YXIgZyBpbiBhKXRoaXNb
Y10oZyxlLGFbZ10sZik7cmV0dXJuIHRoaXN9aWYoZC5pc0Z1bmN0aW9uKGUpfHxl
PT09ITEpZj1lLGU9Yjt2YXIgaD1jPT09Im9uZSI/ZC5wcm94eShmLGZ1bmN0aW9u
KGEpe2QodGhpcykudW5iaW5kKGEsaCk7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1
bWVudHMpfSk6ZjtpZihhPT09InVubG9hZCImJmMhPT0ib25lIil0aGlzLm9uZShh
LGUsZik7ZWxzZSBmb3IodmFyIGk9MCxqPXRoaXMubGVuZ3RoO2k8ajtpKyspZC5l
dmVudC5hZGQodGhpc1tpXSxhLGgsZSk7cmV0dXJuIHRoaXN9fSksZC5mbi5leHRl
bmQoe3VuYmluZDpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhIT09Im9iamVjdCJ8
fGEucHJldmVudERlZmF1bHQpZm9yKHZhciBlPTAsZj10aGlzLmxlbmd0aDtlPGY7
ZSsrKWQuZXZlbnQucmVtb3ZlKHRoaXNbZV0sYSxiKTtlbHNlIGZvcih2YXIgYyBp
biBhKXRoaXMudW5iaW5kKGMsYVtjXSk7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1
bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmxpdmUoYixjLGQsYSl9LHVuZGVs
ZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09
MD90aGlzLnVuYmluZCgibGl2ZSIpOnRoaXMuZGllKGIsbnVsbCxjLGEpfSx0cmln
Z2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2Qu
ZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rp
b24oYSxiKXtpZih0aGlzWzBdKXt2YXIgYz1kLkV2ZW50KGEpO2MucHJldmVudERl
ZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLGQuZXZlbnQudHJpZ2dlcihjLGIs
dGhpc1swXSk7cmV0dXJuIGMucmVzdWx0fX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3Zh
ciBiPWFyZ3VtZW50cyxjPTE7d2hpbGUoYzxiLmxlbmd0aClkLnByb3h5KGEsYltj
KytdKTtyZXR1cm4gdGhpcy5jbGljayhkLnByb3h5KGEsZnVuY3Rpb24oZSl7dmFy
IGY9KGQuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklYztkLl9k
YXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxmKzEpLGUucHJldmVudERlZmF1
bHQoKTtyZXR1cm4gYltmXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfSkpfSxo
b3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91
c2VsZWF2ZShifHxhKX19KTt2YXIgRD17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZv
Y3Vzb3V0Iixtb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNl
b3V0In07ZC5lYWNoKFsibGl2ZSIsImRpZSJdLGZ1bmN0aW9uKGEsYyl7ZC5mbltj
XT1mdW5jdGlvbihhLGUsZixnKXt2YXIgaCxpPTAsaixrLGwsbT1nfHx0aGlzLnNl
bGVjdG9yLG49Zz90aGlzOmQodGhpcy5jb250ZXh0KTtpZih0eXBlb2YgYT09PSJv
YmplY3QiJiYhYS5wcmV2ZW50RGVmYXVsdCl7Zm9yKHZhciBvIGluIGEpbltjXShv
LGUsYVtvXSxtKTtyZXR1cm4gdGhpc31kLmlzRnVuY3Rpb24oZSkmJihmPWUsZT1i
KSxhPShhfHwiIikuc3BsaXQoIiAiKTt3aGlsZSgoaD1hW2krK10pIT1udWxsKXtq
PXAuZXhlYyhoKSxrPSIiLGomJihrPWpbMF0saD1oLnJlcGxhY2UocCwiIikpO2lm
KGg9PT0iaG92ZXIiKXthLnB1c2goIm1vdXNlZW50ZXIiK2ssIm1vdXNlbGVhdmUi
K2spO2NvbnRpbnVlfWw9aCxoPT09ImZvY3VzInx8aD09PSJibHVyIj8oYS5wdXNo
KERbaF0rayksaD1oK2spOmg9KERbaF18fGgpK2s7aWYoYz09PSJsaXZlIilmb3Io
dmFyIHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspZC5ldmVudC5hZGQobltxXSwibGl2
ZS4iK0YoaCxtKSx7ZGF0YTplLHNlbGVjdG9yOm0saGFuZGxlcjpmLG9yaWdUeXBl
Omgsb3JpZ0hhbmRsZXI6ZixwcmVUeXBlOmx9KTtlbHNlIG4udW5iaW5kKCJsaXZl
LiIrRihoLG0pLGYpfXJldHVybiB0aGlzfX0pLGQuZWFjaCgiYmx1ciBmb2N1cyBm
b2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sg
ZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBt
b3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJt
aXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciIuc3BsaXQoIiAiKSxmdW5j
dGlvbihhLGIpe2QuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9
bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLmJpbmQoYixhLGMp
OnRoaXMudHJpZ2dlcihiKX0sZC5hdHRyRm4mJihkLmF0dHJGbltiXT0hMCl9KSxm
dW5jdGlvbigpe2Z1bmN0aW9uIHUoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wLGg9
ZC5sZW5ndGg7ZzxoO2crKyl7dmFyIGk9ZFtnXTtpZihpKXt2YXIgaj0hMTtpPWlb
YV07d2hpbGUoaSl7aWYoaS5zaXpjYWNoZT09PWMpe2o9ZFtpLnNpenNldF07YnJl
YWt9aWYoaS5ub2RlVHlwZT09PTEpe2Z8fChpLnNpemNhY2hlPWMsaS5zaXpzZXQ9
Zyk7aWYodHlwZW9mIGIhPT0ic3RyaW5nIil7aWYoaT09PWIpe2o9ITA7YnJlYWt9
fWVsc2UgaWYoay5maWx0ZXIoYixbaV0pLmxlbmd0aD4wKXtqPWk7YnJlYWt9fWk9
aVthXX1kW2ddPWp9fX1mdW5jdGlvbiB0KGEsYixjLGQsZSxmKXtmb3IodmFyIGc9
MCxoPWQubGVuZ3RoO2c8aDtnKyspe3ZhciBpPWRbZ107aWYoaSl7dmFyIGo9ITE7
aT1pW2FdO3doaWxlKGkpe2lmKGkuc2l6Y2FjaGU9PT1jKXtqPWRbaS5zaXpzZXRd
O2JyZWFrfWkubm9kZVR5cGU9PT0xJiYhZiYmKGkuc2l6Y2FjaGU9YyxpLnNpenNl
dD1nKTtpZihpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iKXtqPWk7YnJlYWt9
aT1pW2FdfWRbZ109an19fXZhciBhPS8oKD86XCgoPzpcKFteKCldK1wpfFteKCld
KykrXCl8XFsoPzpcW1teXFtcXV0qXF18WyciXVteJyJdKlsnIl18W15cW1xdJyJd
KykrXF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzou
fFxyfFxuKSopL2csZT0wLGY9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxnPSEx
LGg9ITAsaT0vXFwvZyxqPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2g9ITE7
cmV0dXJuIDB9KTt2YXIgaz1mdW5jdGlvbihiLGQsZSxnKXtlPWV8fFtdLGQ9ZHx8
Yzt2YXIgaD1kO2lmKGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1
cm5bXTtpZighYnx8dHlwZW9mIGIhPT0ic3RyaW5nIilyZXR1cm4gZTt2YXIgaSxq
LG4sbyxxLHIscyx0LHU9ITAsdz1rLmlzWE1MKGQpLHg9W10seT1iO2Rve2EuZXhl
YygiIiksaT1hLmV4ZWMoeSk7aWYoaSl7eT1pWzNdLHgucHVzaChpWzFdKTtpZihp
WzJdKXtvPWlbM107YnJlYWt9fX13aGlsZShpKTtpZih4Lmxlbmd0aD4xJiZtLmV4
ZWMoYikpaWYoeC5sZW5ndGg9PT0yJiZsLnJlbGF0aXZlW3hbMF1dKWo9dih4WzBd
K3hbMV0sZCk7ZWxzZXtqPWwucmVsYXRpdmVbeFswXV0/W2RdOmsoeC5zaGlmdCgp
LGQpO3doaWxlKHgubGVuZ3RoKWI9eC5zaGlmdCgpLGwucmVsYXRpdmVbYl0mJihi
Kz14LnNoaWZ0KCkpLGo9dihiLGopfWVsc2V7IWcmJngubGVuZ3RoPjEmJmQubm9k
ZVR5cGU9PT05JiYhdyYmbC5tYXRjaC5JRC50ZXN0KHhbMF0pJiYhbC5tYXRjaC5J
RC50ZXN0KHhbeC5sZW5ndGgtMV0pJiYocT1rLmZpbmQoeC5zaGlmdCgpLGQsdyks
ZD1xLmV4cHI/ay5maWx0ZXIocS5leHByLHEuc2V0KVswXTpxLnNldFswXSk7aWYo
ZCl7cT1nP3tleHByOngucG9wKCksc2V0OnAoZyl9OmsuZmluZCh4LnBvcCgpLHgu
bGVuZ3RoPT09MSYmKHhbMF09PT0ifiJ8fHhbMF09PT0iKyIpJiZkLnBhcmVudE5v
ZGU/ZC5wYXJlbnROb2RlOmQsdyksaj1xLmV4cHI/ay5maWx0ZXIocS5leHByLHEu
c2V0KTpxLnNldCx4Lmxlbmd0aD4wP249cChqKTp1PSExO3doaWxlKHgubGVuZ3Ro
KXI9eC5wb3AoKSxzPXIsbC5yZWxhdGl2ZVtyXT9zPXgucG9wKCk6cj0iIixzPT1u
dWxsJiYocz1kKSxsLnJlbGF0aXZlW3JdKG4scyx3KX1lbHNlIG49eD1bXX1ufHwo
bj1qKSxufHxrLmVycm9yKHJ8fGIpO2lmKGYuY2FsbChuKT09PSJbb2JqZWN0IEFy
cmF5XSIpaWYodSlpZihkJiZkLm5vZGVUeXBlPT09MSlmb3IodD0wO25bdF0hPW51
bGw7dCsrKW5bdF0mJihuW3RdPT09ITB8fG5bdF0ubm9kZVR5cGU9PT0xJiZrLmNv
bnRhaW5zKGQsblt0XSkpJiZlLnB1c2goalt0XSk7ZWxzZSBmb3IodD0wO25bdF0h
PW51bGw7dCsrKW5bdF0mJm5bdF0ubm9kZVR5cGU9PT0xJiZlLnB1c2goalt0XSk7
ZWxzZSBlLnB1c2guYXBwbHkoZSxuKTtlbHNlIHAobixlKTtvJiYoayhvLGgsZSxn
KSxrLnVuaXF1ZVNvcnQoZSkpO3JldHVybiBlfTtrLnVuaXF1ZVNvcnQ9ZnVuY3Rp
b24oYSl7aWYocil7Zz1oLGEuc29ydChyKTtpZihnKWZvcih2YXIgYj0xO2I8YS5s
ZW5ndGg7YisrKWFbYl09PT1hW2ItMV0mJmEuc3BsaWNlKGItLSwxKX1yZXR1cm4g
YX0say5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGsoYSxudWxsLG51bGws
Yil9LGsubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGsoYixu
dWxsLG51bGwsW2FdKS5sZW5ndGg+MH0say5maW5kPWZ1bmN0aW9uKGEsYixjKXt2
YXIgZDtpZighYSlyZXR1cm5bXTtmb3IodmFyIGU9MCxmPWwub3JkZXIubGVuZ3Ro
O2U8ZjtlKyspe3ZhciBnLGg9bC5vcmRlcltlXTtpZihnPWwubGVmdE1hdGNoW2hd
LmV4ZWMoYSkpe3ZhciBqPWdbMV07Zy5zcGxpY2UoMSwxKTtpZihqLnN1YnN0cihq
Lmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGksIiIp
LGQ9bC5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShsLm1h
dGNoW2hdLCIiKTticmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5
VGFnTmFtZSE9PSJ1bmRlZmluZWQiP2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioi
KTpbXSk7cmV0dXJue3NldDpkLGV4cHI6YX19LGsuZmlsdGVyPWZ1bmN0aW9uKGEs
YyxkLGUpe3ZhciBmLGcsaD1hLGk9W10saj1jLG09YyYmY1swXSYmay5pc1hNTChj
WzBdKTt3aGlsZShhJiZjLmxlbmd0aCl7Zm9yKHZhciBuIGluIGwuZmlsdGVyKWlm
KChmPWwubGVmdE1hdGNoW25dLmV4ZWMoYSkpIT1udWxsJiZmWzJdKXt2YXIgbyxw
LHE9bC5maWx0ZXJbbl0scj1mWzFdO2c9ITEsZi5zcGxpY2UoMSwxKTtpZihyLnN1
YnN0cihyLmxlbmd0aC0xKT09PSJcXCIpY29udGludWU7aj09PWkmJihpPVtdKTtp
ZihsLnByZUZpbHRlcltuXSl7Zj1sLnByZUZpbHRlcltuXShmLGosZCxpLGUsbSk7
aWYoZil7aWYoZj09PSEwKWNvbnRpbnVlfWVsc2UgZz1vPSEwfWlmKGYpZm9yKHZh
ciBzPTA7KHA9altzXSkhPW51bGw7cysrKWlmKHApe289cShwLGYscyxqKTt2YXIg
dD1lXiEhbztkJiZvIT1udWxsP3Q/Zz0hMDpqW3NdPSExOnQmJihpLnB1c2gocCks
Zz0hMCl9aWYobyE9PWIpe2R8fChqPWkpLGE9YS5yZXBsYWNlKGwubWF0Y2hbbl0s
IiIpO2lmKCFnKXJldHVybltdO2JyZWFrfX1pZihhPT09aClpZihnPT1udWxsKWsu
ZXJyb3IoYSk7ZWxzZSBicmVhaztoPWF9cmV0dXJuIGp9LGsuZXJyb3I9ZnVuY3Rp
b24oYSl7dGhyb3ciU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lv
bjogIithfTt2YXIgbD1rLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJU
QUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykv
LENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTov
XFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpc
XS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyoo
PzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZG
RkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZG
RlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hp
bGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9u
XHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxs
dHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkv
LFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsn
Il0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNo
Ont9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3Ii
fSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJp
YnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJp
YnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBj
PXR5cGVvZiBiPT09InN0cmluZyIsZD1jJiYhai50ZXN0KGIpLGU9YyYmIWQ7ZCYm
KGI9Yi50b0xvd2VyQ2FzZSgpKTtmb3IodmFyIGY9MCxnPWEubGVuZ3RoLGg7Zjxn
O2YrKylpZihoPWFbZl0pe3doaWxlKChoPWgucHJldmlvdXNTaWJsaW5nKSYmaC5u
b2RlVHlwZSE9PTEpe31hW2ZdPWV8fGgmJmgubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KT09PWI/aHx8ITE6aD09PWJ9ZSYmay5maWx0ZXIoYixhLCEwKX0sIj4iOmZ1bmN0
aW9uKGEsYil7dmFyIGMsZD10eXBlb2YgYj09PSJzdHJpbmciLGU9MCxmPWEubGVu
Z3RoO2lmKGQmJiFqLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxm
O2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsr
KWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1i
KTtkJiZrLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBk
LGY9ZSsrLGc9dTt0eXBlb2YgYj09PSJzdHJpbmciJiYhai50ZXN0KGIpJiYoYj1i
LnRvTG93ZXJDYXNlKCksZD1iLGc9dCksZygicGFyZW50Tm9kZSIsYixmLGEsZCxj
KX0sIn4iOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxmPWUrKyxnPXU7dHlwZW9mIGI9
PT0ic3RyaW5nIiYmIWoudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGQ9Yixn
PXQpLGcoInByZXZpb3VzU2libGluZyIsYixmLGEsZCxjKX19LGZpbmQ6e0lEOmZ1
bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCE9PSJ1bmRl
ZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4g
ZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0
eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9PSJ1bmRlZmluZWQiKXt2YXIgYz1b
XSxkPWIuZ2V0RWxlbWVudHNCeU5hbWUoYVsxXSk7Zm9yKHZhciBlPTAsZj1kLmxl
bmd0aDtlPGY7ZSsrKWRbZV0uZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1hWzFdJiZj
LnB1c2goZFtlXSk7cmV0dXJuIGMubGVuZ3RoPT09MD9udWxsOmN9fSxUQUc6ZnVu
Y3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PSJ1
bmRlZmluZWQiKXJldHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pfX0s
cHJlRmlsdGVyOntDTEFTUzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT0iICIrYVsx
XS5yZXBsYWNlKGksIiIpKyIgIjtpZihmKXJldHVybiBhO2Zvcih2YXIgZz0wLGg7
KGg9YltnXSkhPW51bGw7ZysrKWgmJihlXihoLmNsYXNzTmFtZSYmKCIgIitoLmNs
YXNzTmFtZSsiICIpLnJlcGxhY2UoL1tcdFxuXHJdL2csIiAiKS5pbmRleE9mKGEp
Pj0wKT9jfHxkLnB1c2goaCk6YyYmKGJbZ109ITEpKTtyZXR1cm4hMX0sSUQ6ZnVu
Y3Rpb24oYSl7cmV0dXJuIGFbMV0ucmVwbGFjZShpLCIiKX0sVEFHOmZ1bmN0aW9u
KGEsYil7cmV0dXJuIGFbMV0ucmVwbGFjZShpLCIiKS50b0xvd2VyQ2FzZSgpfSxD
SElMRDpmdW5jdGlvbihhKXtpZihhWzFdPT09Im50aCIpe2FbMl18fGsuZXJyb3Io
YVswXSksYVsyXT1hWzJdLnJlcGxhY2UoL15cK3xccyovZywiIik7dmFyIGI9Lygt
PykoXGQqKSg/Om4oWytcLV0/XGQqKSk/Ly5leGVjKGFbMl09PT0iZXZlbiImJiIy
biJ8fGFbMl09PT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KGFbMl0pJiYiMG4r
IithWzJdfHxhWzJdKTthWzJdPWJbMV0rKGJbMl18fDEpLTAsYVszXT1iWzNdLTB9
ZWxzZSBhWzJdJiZrLmVycm9yKGFbMF0pO2FbMF09ZSsrO3JldHVybiBhfSxBVFRS
OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hWzFdPWFbMV0ucmVwbGFjZShp
LCIiKTshZiYmbC5hdHRyTWFwW2ddJiYoYVsxXT1sLmF0dHJNYXBbZ10pLGFbNF09
KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGksIiIpLGFbMl09PT0ifj0iJiYoYVs0
XT0iICIrYVs0XSsiICIpO3JldHVybiBhfSxQU0VVRE86ZnVuY3Rpb24oYixjLGQs
ZSxmKXtpZihiWzFdPT09Im5vdCIpaWYoKGEuZXhlYyhiWzNdKXx8IiIpLmxlbmd0
aD4xfHwvXlx3Ly50ZXN0KGJbM10pKWJbM109ayhiWzNdLG51bGwsbnVsbCxjKTtl
bHNle3ZhciBnPWsuZmlsdGVyKGJbM10sYyxkLCEwXmYpO2R8fGUucHVzaC5hcHBs
eShlLGcpO3JldHVybiExfWVsc2UgaWYobC5tYXRjaC5QT1MudGVzdChiWzBdKXx8
bC5tYXRjaC5DSElMRC50ZXN0KGJbMF0pKXJldHVybiEwO3JldHVybiBifSxQT1M6
ZnVuY3Rpb24oYSl7YS51bnNoaWZ0KCEwKTtyZXR1cm4gYX19LGZpbHRlcnM6e2Vu
YWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMSYmYS50eXBl
IT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2Fi
bGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hlY2tlZD09
PSEwfSxzZWxlY3RlZDpmdW5jdGlvbihhKXthLnBhcmVudE5vZGUmJmEucGFyZW50
Tm9kZS5zZWxlY3RlZEluZGV4O3JldHVybiBhLnNlbGVjdGVkPT09ITB9LHBhcmVu
dDpmdW5jdGlvbihhKXtyZXR1cm4hIWEuZmlyc3RDaGlsZH0sZW1wdHk6ZnVuY3Rp
b24oYSl7cmV0dXJuIWEuZmlyc3RDaGlsZH0saGFzOmZ1bmN0aW9uKGEsYixjKXty
ZXR1cm4hIWsoY1szXSxhKS5sZW5ndGh9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1
cm4vaFxkL2kudGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXtyZXR1
cm4idGV4dCI9PT1hLmdldEF0dHJpYnV0ZSgidHlwZSIpfSxyYWRpbzpmdW5jdGlv
bihhKXtyZXR1cm4icmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihh
KXtyZXR1cm4iY2hlY2tib3giPT09YS50eXBlfSxmaWxlOmZ1bmN0aW9uKGEpe3Jl
dHVybiJmaWxlIj09PWEudHlwZX0scGFzc3dvcmQ6ZnVuY3Rpb24oYSl7cmV0dXJu
InBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3JldHVybiJz
dWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4iaW1hZ2Ui
PT09YS50eXBlfSxyZXNldDpmdW5jdGlvbihhKXtyZXR1cm4icmVzZXQiPT09YS50
eXBlfSxidXR0b246ZnVuY3Rpb24oYSl7cmV0dXJuImJ1dHRvbiI9PT1hLnR5cGV8
fGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJidXR0b24ifSxpbnB1dDpmdW5j
dGlvbihhKXtyZXR1cm4vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRl
c3QoYS5ub2RlTmFtZSl9fSxzZXRGaWx0ZXJzOntmaXJzdDpmdW5jdGlvbihhLGIp
e3JldHVybiBiPT09MH0sbGFzdDpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYj09
PWQubGVuZ3RoLTF9LGV2ZW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MH0s
b2RkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTF9LGx0OmZ1bmN0aW9uKGEs
YixjKXtyZXR1cm4gYjxjWzNdLTB9LGd0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4g
Yj5jWzNdLTB9LG50aDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9
LGVxOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn19LGZpbHRlcjp7
UFNFVURPOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWJbMV0sZj1sLmZpbHRlcnNb
ZV07aWYoZilyZXR1cm4gZihhLGMsYixkKTtpZihlPT09ImNvbnRhaW5zIilyZXR1
cm4oYS50ZXh0Q29udGVudHx8YS5pbm5lclRleHR8fGsuZ2V0VGV4dChbYV0pfHwi
IikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9y
KHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiEx
O3JldHVybiEwfWsuZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGM9
YlsxXSxkPWE7c3dpdGNoKGMpe2Nhc2Uib25seSI6Y2FzZSJmaXJzdCI6d2hpbGUo
ZD1kLnByZXZpb3VzU2libGluZylpZihkLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtp
ZihjPT09ImZpcnN0IilyZXR1cm4hMDtkPWE7Y2FzZSJsYXN0Ijp3aGlsZShkPWQu
bmV4dFNpYmxpbmcpaWYoZC5ub2RlVHlwZT09PTEpcmV0dXJuITE7cmV0dXJuITA7
Y2FzZSJudGgiOnZhciBlPWJbMl0sZj1iWzNdO2lmKGU9PT0xJiZmPT09MClyZXR1
cm4hMDt2YXIgZz1iWzBdLGg9YS5wYXJlbnROb2RlO2lmKGgmJihoLnNpemNhY2hl
IT09Z3x8IWEubm9kZUluZGV4KSl7dmFyIGk9MDtmb3IoZD1oLmZpcnN0Q2hpbGQ7
ZDtkPWQubmV4dFNpYmxpbmcpZC5ub2RlVHlwZT09PTEmJihkLm5vZGVJbmRleD0r
K2kpO2guc2l6Y2FjaGU9Z312YXIgaj1hLm5vZGVJbmRleC1mO3JldHVybiBlPT09
MD9qPT09MDpqJWU9PT0wJiZqL2U+PTB9fSxJRDpmdW5jdGlvbihhLGIpe3JldHVy
biBhLm5vZGVUeXBlPT09MSYmYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifSxUQUc6
ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PSIqIiYmYS5ub2RlVHlwZT09PTF8fGEu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7
cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIp
KSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1i
WzFdLGQ9bC5hdHRySGFuZGxlW2NdP2wuYXR0ckhhbmRsZVtjXShhKTphW2NdIT1u
dWxsP2FbY106YS5nZXRBdHRyaWJ1dGUoYyksZT1kKyIiLGY9YlsyXSxnPWJbNF07
cmV0dXJuIGQ9PW51bGw/Zj09PSIhPSI6Zj09PSI9Ij9lPT09ZzpmPT09Iio9Ij9l
LmluZGV4T2YoZyk+PTA6Zj09PSJ+PSI/KCIgIitlKyIgIikuaW5kZXhPZihnKT49
MDpnP2Y9PT0iIT0iP2UhPT1nOmY9PT0iXj0iP2UuaW5kZXhPZihnKT09PTA6Zj09
PSIkPSI/ZS5zdWJzdHIoZS5sZW5ndGgtZy5sZW5ndGgpPT09ZzpmPT09Inw9Ij9l
PT09Z3x8ZS5zdWJzdHIoMCxnLmxlbmd0aCsxKT09PWcrIi0iOiExOmUmJmQhPT0h
MX0sUE9TOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWJbMl0sZj1sLnNldEZpbHRl
cnNbZV07aWYoZilyZXR1cm4gZihhLGMsYixkKX19fSxtPWwubWF0Y2guUE9TLG49
ZnVuY3Rpb24oYSxiKXtyZXR1cm4iXFwiKyhiLTArMSl9O2Zvcih2YXIgbyBpbiBs
Lm1hdGNoKWwubWF0Y2hbb109bmV3IFJlZ0V4cChsLm1hdGNoW29dLnNvdXJjZSsv
KD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpLGwubGVmdE1hdGNoW29d
PW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStsLm1hdGNoW29d
LnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csbikpO3ZhciBwPWZ1bmN0aW9uKGEs
Yil7YT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLDApO2lmKGIpe2IucHVz
aC5hcHBseShiLGEpO3JldHVybiBifXJldHVybiBhfTt0cnl7QXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKVsw
XS5ub2RlVHlwZX1jYXRjaChxKXtwPWZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWJ8
fFtdO2lmKGYuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSIpQXJyYXkucHJvdG90
eXBlLnB1c2guYXBwbHkoZCxhKTtlbHNlIGlmKHR5cGVvZiBhLmxlbmd0aD09PSJu
dW1iZXIiKWZvcih2YXIgZT1hLmxlbmd0aDtjPGU7YysrKWQucHVzaChhW2NdKTtl
bHNlIGZvcig7YVtjXTtjKyspZC5wdXNoKGFbY10pO3JldHVybiBkfX12YXIgcixz
O2MuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP3I9ZnVu
Y3Rpb24oYSxiKXtpZihhPT09Yil7Zz0hMDtyZXR1cm4gMH1pZighYS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbnx8IWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pcmV0
dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MTtyZXR1cm4gYS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0Py0xOjF9OihyPWZ1bmN0aW9uKGEsYil7
dmFyIGMsZCxlPVtdLGY9W10saD1hLnBhcmVudE5vZGUsaT1iLnBhcmVudE5vZGUs
aj1oO2lmKGE9PT1iKXtnPSEwO3JldHVybiAwfWlmKGg9PT1pKXJldHVybiBzKGEs
Yik7aWYoIWgpcmV0dXJuLTE7aWYoIWkpcmV0dXJuIDE7d2hpbGUoaillLnVuc2hp
ZnQoaiksaj1qLnBhcmVudE5vZGU7aj1pO3doaWxlKGopZi51bnNoaWZ0KGopLGo9
ai5wYXJlbnROb2RlO2M9ZS5sZW5ndGgsZD1mLmxlbmd0aDtmb3IodmFyIGs9MDtr
PGMmJms8ZDtrKyspaWYoZVtrXSE9PWZba10pcmV0dXJuIHMoZVtrXSxmW2tdKTty
ZXR1cm4gaz09PWM/cyhhLGZba10sLTEpOnMoZVtrXSxiLDEpfSxzPWZ1bmN0aW9u
KGEsYixjKXtpZihhPT09YilyZXR1cm4gYzt2YXIgZD1hLm5leHRTaWJsaW5nO3do
aWxlKGQpe2lmKGQ9PT1iKXJldHVybi0xO2Q9ZC5uZXh0U2libGluZ31yZXR1cm4g
MX0pLGsuZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYj0iIixjO2Zvcih2YXIgZD0w
O2FbZF07ZCsrKWM9YVtkXSxjLm5vZGVUeXBlPT09M3x8Yy5ub2RlVHlwZT09PTQ/
Yis9Yy5ub2RlVmFsdWU6Yy5ub2RlVHlwZSE9PTgmJihiKz1rLmdldFRleHQoYy5j
aGlsZE5vZGVzKSk7cmV0dXJuIGJ9LGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVF
bGVtZW50KCJkaXYiKSxkPSJzY3JpcHQiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpLGU9
Yy5kb2N1bWVudEVsZW1lbnQ7YS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrZCsiJy8+
IixlLmluc2VydEJlZm9yZShhLGUuZmlyc3RDaGlsZCksYy5nZXRFbGVtZW50QnlJ
ZChkKSYmKGwuZmluZC5JRD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0
RWxlbWVudEJ5SWQhPT0idW5kZWZpbmVkIiYmIWQpe3ZhciBlPWMuZ2V0RWxlbWVu
dEJ5SWQoYVsxXSk7cmV0dXJuIGU/ZS5pZD09PWFbMV18fHR5cGVvZiBlLmdldEF0
dHJpYnV0ZU5vZGUhPT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJp
ZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxsLmZpbHRlci5JRD1mdW5j
dGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPT0idW5k
ZWZpbmVkIiYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBhLm5vZGVU
eXBlPT09MSYmYyYmYy5ub2RlVmFsdWU9PT1ifSksZS5yZW1vdmVDaGlsZChhKSxl
PWE9bnVsbH0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2
Iik7YS5hcHBlbmRDaGlsZChjLmNyZWF0ZUNvbW1lbnQoIiIpKSxhLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoPjAmJihsLmZpbmQuVEFHPWZ1bmN0aW9u
KGEsYil7dmFyIGM9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKTtpZihhWzFd
PT09IioiKXt2YXIgZD1bXTtmb3IodmFyIGU9MDtjW2VdO2UrKyljW2VdLm5vZGVU
eXBlPT09MSYmZC5wdXNoKGNbZV0pO2M9ZH1yZXR1cm4gY30pLGEuaW5uZXJIVE1M
PSI8YSBocmVmPScjJz48L2E+IixhLmZpcnN0Q2hpbGQmJnR5cGVvZiBhLmZpcnN0
Q2hpbGQuZ2V0QXR0cmlidXRlIT09InVuZGVmaW5lZCImJmEuZmlyc3RDaGlsZC5n
ZXRBdHRyaWJ1dGUoImhyZWYiKSE9PSIjIiYmKGwuYXR0ckhhbmRsZS5ocmVmPWZ1
bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9KSxhPW51
bGx9KCksYy5xdWVyeVNlbGVjdG9yQWxsJiZmdW5jdGlvbigpe3ZhciBhPWssYj1j
LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9Il9fc2l6emxlX18iO2IuaW5uZXJIVE1M
PSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoIWIucXVlcnlTZWxlY3RvckFsbHx8
Yi5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCE9PTApe2s9ZnVuY3Rp
b24oYixlLGYsZyl7ZT1lfHxjO2lmKCFnJiYhay5pc1hNTChlKSl7dmFyIGg9L14o
XHcrJCl8XlwuKFtcd1wtXSskKXxeIyhbXHdcLV0rJCkvLmV4ZWMoYik7aWYoaCYm
KGUubm9kZVR5cGU9PT0xfHxlLm5vZGVUeXBlPT09OSkpe2lmKGhbMV0pcmV0dXJu
IHAoZS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKSxmKTtpZihoWzJdJiZsLmZpbmQu
Q0xBU1MmJmUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gcChlLmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoaFsyXSksZil9aWYoZS5ub2RlVHlwZT09PTkpe2lm
KGI9PT0iYm9keSImJmUuYm9keSlyZXR1cm4gcChbZS5ib2R5XSxmKTtpZihoJiZo
WzNdKXt2YXIgaT1lLmdldEVsZW1lbnRCeUlkKGhbM10pO2lmKCFpfHwhaS5wYXJl
bnROb2RlKXJldHVybiBwKFtdLGYpO2lmKGkuaWQ9PT1oWzNdKXJldHVybiBwKFtp
XSxmKX10cnl7cmV0dXJuIHAoZS5xdWVyeVNlbGVjdG9yQWxsKGIpLGYpfWNhdGNo
KGope319ZWxzZSBpZihlLm5vZGVUeXBlPT09MSYmZS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpIT09Im9iamVjdCIpe3ZhciBtPWUsbj1lLmdldEF0dHJpYnV0ZSgiaWQi
KSxvPW58fGQscT1lLnBhcmVudE5vZGUscj0vXlxzKlsrfl0vLnRlc3QoYik7bj9v
PW8ucmVwbGFjZSgvJy9nLCJcXCQmIik6ZS5zZXRBdHRyaWJ1dGUoImlkIixvKSxy
JiZxJiYoZT1lLnBhcmVudE5vZGUpO3RyeXtpZighcnx8cSlyZXR1cm4gcChlLnF1
ZXJ5U2VsZWN0b3JBbGwoIltpZD0nIitvKyInXSAiK2IpLGYpfWNhdGNoKHMpe31m
aW5hbGx5e258fG0ucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGEoYixl
LGYsZyl9O2Zvcih2YXIgZSBpbiBhKWtbZV09YVtlXTtiPW51bGx9fSgpLGZ1bmN0
aW9uKCl7dmFyIGE9Yy5kb2N1bWVudEVsZW1lbnQsYj1hLm1hdGNoZXNTZWxlY3Rv
cnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9y
fHxhLm1zTWF0Y2hlc1NlbGVjdG9yLGQ9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50
RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChlKXtkPSEwfWImJihr
Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGMpe2M9Yy5yZXBsYWNlKC9cPVxz
KihbXiciXF1dKilccypcXS9nLCI9JyQxJ10iKTtpZighay5pc1hNTChhKSl0cnl7
aWYoZHx8IWwubWF0Y2guUFNFVURPLnRlc3QoYykmJiEvIT0vLnRlc3QoYykpcmV0
dXJuIGIuY2FsbChhLGMpfWNhdGNoKGUpe31yZXR1cm4gayhjLG51bGwsbnVsbCxb
YV0pLmxlbmd0aD4wfSl9KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1l
bnQoImRpdiIpO2EuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2
PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7aWYoYS5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lJiZhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGghPT0w
KXthLmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO2lmKGEuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSgiZSIpLmxlbmd0aD09PTEpcmV0dXJuO2wub3JkZXIuc3BsaWNlKDEs
MCwiQ0xBU1MiKSxsLmZpbmQuQ0xBU1M9ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVv
ZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT0idW5kZWZpbmVkIiYmIWMpcmV0
dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxj
LmRvY3VtZW50RWxlbWVudC5jb250YWlucz9rLmNvbnRhaW5zPWZ1bmN0aW9uKGEs
Yil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06
Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ay5jb250
YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9z
aXRpb24oYikmMTYpfTprLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGsu
aXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjAp
LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiEx
fTt2YXIgdj1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT0iIixmPWIubm9kZVR5
cGU/W2JdOmI7d2hpbGUoYz1sLm1hdGNoLlBTRVVETy5leGVjKGEpKWUrPWNbMF0s
YT1hLnJlcGxhY2UobC5tYXRjaC5QU0VVRE8sIiIpO2E9bC5yZWxhdGl2ZVthXT9h
KyIqIjphO2Zvcih2YXIgZz0wLGg9Zi5sZW5ndGg7ZzxoO2crKylrKGEsZltnXSxk
KTtyZXR1cm4gay5maWx0ZXIoZSxkKX07ZC5maW5kPWssZC5leHByPWsuc2VsZWN0
b3JzLGQuZXhwclsiOiJdPWQuZXhwci5maWx0ZXJzLGQudW5pcXVlPWsudW5pcXVl
U29ydCxkLnRleHQ9ay5nZXRUZXh0LGQuaXNYTUxEb2M9ay5pc1hNTCxkLmNvbnRh
aW5zPWsuY29udGFpbnN9KCk7dmFyIEc9L1VudGlsJC8sSD0vXig/OnBhcmVudHN8
cHJldlVudGlsfHByZXZBbGwpLyxJPS8sLyxKPS9eLlteOiNcW1wuLF0qJC8sSz1B
cnJheS5wcm90b3R5cGUuc2xpY2UsTD1kLmV4cHIubWF0Y2guUE9TLE09e2NoaWxk
cmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07ZC5mbi5leHRlbmQo
e2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQi
LGEpLGM9MDtmb3IodmFyIGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspe2M9Yi5s
ZW5ndGgsZC5maW5kKGEsdGhpc1tlXSxiKTtpZihlPjApZm9yKHZhciBnPWM7Zzxi
Lmxlbmd0aDtnKyspZm9yKHZhciBoPTA7aDxjO2grKylpZihiW2hdPT09YltnXSl7
Yi5zcGxpY2UoZy0tLDEpO2JyZWFrfX1yZXR1cm4gYn0saGFzOmZ1bmN0aW9uKGEp
e3ZhciBiPWQoYSk7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZh
ciBhPTAsYz1iLmxlbmd0aDthPGM7YSsrKWlmKGQuY29udGFpbnModGhpcyxiW2Fd
KSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0
YWNrKE8odGhpcyxhLCExKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3Jl
dHVybiB0aGlzLnB1c2hTdGFjayhPKHRoaXMsYSwhMCksImZpbHRlciIsYSl9LGlz
OmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmZC5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+
MH0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGUsZixnPXRoaXNbMF07
aWYoZC5pc0FycmF5KGEpKXt2YXIgaCxpLGo9e30saz0xO2lmKGcmJmEubGVuZ3Ro
KXtmb3IoZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKylpPWFbZV0saltpXXx8KGpbaV09
ZC5leHByLm1hdGNoLlBPUy50ZXN0KGkpP2QoaSxifHx0aGlzLmNvbnRleHQpOmkp
O3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihpIGluIGopaD1q
W2ldLChoLmpxdWVyeT9oLmluZGV4KGcpPi0xOmQoZykuaXMoaCkpJiZjLnB1c2go
e3NlbGVjdG9yOmksZWxlbTpnLGxldmVsOmt9KTtnPWcucGFyZW50Tm9kZSxrKyt9
fXJldHVybiBjfXZhciBsPUwudGVzdChhKT9kKGEsYnx8dGhpcy5jb250ZXh0KTpu
dWxsO2ZvcihlPTAsZj10aGlzLmxlbmd0aDtlPGY7ZSsrKXtnPXRoaXNbZV07d2hp
bGUoZyl7aWYobD9sLmluZGV4KGcpPi0xOmQuZmluZC5tYXRjaGVzU2VsZWN0b3Io
ZyxhKSl7Yy5wdXNoKGcpO2JyZWFrfWc9Zy5wYXJlbnROb2RlO2lmKCFnfHwhZy5v
d25lckRvY3VtZW50fHxnPT09YilicmVha319Yz1jLmxlbmd0aD4xP2QudW5pcXVl
KGMpOmM7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGMsImNsb3Nlc3QiLGEpfSxpbmRl
eDpmdW5jdGlvbihhKXtpZighYXx8dHlwZW9mIGE9PT0ic3RyaW5nIilyZXR1cm4g
ZC5pbkFycmF5KHRoaXNbMF0sYT9kKGEpOnRoaXMucGFyZW50KCkuY2hpbGRyZW4o
KSk7cmV0dXJuIGQuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFkZDpm
dW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhPT09InN0cmluZyI/ZChhLGIpOmQu
bWFrZUFycmF5KGEpLGU9ZC5tZXJnZSh0aGlzLmdldCgpLGMpO3JldHVybiB0aGlz
LnB1c2hTdGFjayhOKGNbMF0pfHxOKGVbMF0pP2U6ZC51bmlxdWUoZSkpfSxhbmRT
ZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9
fSksZC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2Rl
O3JldHVybiBiJiZiLm5vZGVUeXBlIT09MTE/YjpudWxsfSxwYXJlbnRzOmZ1bmN0
aW9uKGEpe3JldHVybiBkLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRp
bDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuZGlyKGEsInBhcmVudE5vZGUiLGMp
fSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBkLm50aChhLDIsIm5leHRTaWJsaW5n
Iil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIGQubnRoKGEsMiwicHJldmlvdXNT
aWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZGlyKGEsIm5l
eHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZGlyKGEs
InByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3Jl
dHVybiBkLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlv
bihhLGIsYyl7cmV0dXJuIGQuZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNp
YmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBkLnNpYmxpbmcoYS5wYXJlbnROb2Rl
LmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBkLnNp
YmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJu
IGQubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29u
dGVudFdpbmRvdy5kb2N1bWVudDpkLm1ha2VBcnJheShhLmNoaWxkTm9kZXMpfX0s
ZnVuY3Rpb24oYSxiKXtkLmZuW2FdPWZ1bmN0aW9uKGMsZSl7dmFyIGY9ZC5tYXAo
dGhpcyxiLGMpLGc9Sy5jYWxsKGFyZ3VtZW50cyk7Ry50ZXN0KGEpfHwoZT1jKSxl
JiZ0eXBlb2YgZT09PSJzdHJpbmciJiYoZj1kLmZpbHRlcihlLGYpKSxmPXRoaXMu
bGVuZ3RoPjEmJiFNW2FdP2QudW5pcXVlKGYpOmYsKHRoaXMubGVuZ3RoPjF8fEku
dGVzdChlKSkmJkgudGVzdChhKSYmKGY9Zi5yZXZlcnNlKCkpO3JldHVybiB0aGlz
LnB1c2hTdGFjayhmLGEsZy5qb2luKCIsIikpfX0pLGQuZXh0ZW5kKHtmaWx0ZXI6
ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6bm90KCIrYSsiKSIpO3JldHVybiBiLmxl
bmd0aD09PTE/ZC5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBdLGEpP1tiWzBdXTpb
XTpkLmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGUpe3ZhciBm
PVtdLGc9YVtjXTt3aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGU9PT1ifHxnLm5v
ZGVUeXBlIT09MXx8IWQoZykuaXMoZSkpKWcubm9kZVR5cGU9PT0xJiZmLnB1c2go
ZyksZz1nW2NdO3JldHVybiBmfSxudGg6ZnVuY3Rpb24oYSxiLGMsZCl7Yj1ifHwx
O3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09
YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtd
O2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZj
LnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIFA9LyBqUXVlcnlcZCs9Iig/OlxkK3xu
dWxsKSIvZyxRPS9eXHMrLyxSPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1n
fGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsUz0v
PChbXHc6XSspLyxUPS88dGJvZHkvaSxVPS88fCYjP1x3KzsvLFY9LzwoPzpzY3Jp
cHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxXPS9jaGVja2VkXHMqKD86
W149XXw9XHMqLmNoZWNrZWQuKS9pLFg9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0
aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxk
c2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxl
PiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0
ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+
Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwv
Y29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9k
ZWZhdWx0OlswLCIiLCIiXX07WC5vcHRncm91cD1YLm9wdGlvbixYLnRib2R5PVgu
dGZvb3Q9WC5jb2xncm91cD1YLmNhcHRpb249WC50aGVhZCxYLnRoPVgudGQsZC5z
dXBwb3J0Lmh0bWxTZXJpYWxpemV8fChYLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIs
IjwvZGl2PiJdKSxkLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihkLmlz
RnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1k
KHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBl
b2YgYSE9PSJvYmplY3QiJiZhIT09YilyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVu
ZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxjKS5jcmVhdGVUZXh0
Tm9kZShhKSk7cmV0dXJuIGQudGV4dCh0aGlzKX0sd3JhcEFsbDpmdW5jdGlvbihh
KXtpZihkLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihi
KXtkKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7
dmFyIGI9ZChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITAp
O3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5t
YXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5m
aXJzdENoaWxkLm5vZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0p
LmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEp
e2lmKGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIp
e2QodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pO3JldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oKXt2YXIgYj1kKHRoaXMpLGM9Yi5jb250ZW50cygpO2Mu
bGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9u
KGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkKHRoaXMpLndyYXBBbGwo
YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFj
aChmdW5jdGlvbigpe2Qubm9kZU5hbWUodGhpcywiYm9keSIpfHxkKHRoaXMpLnJl
cGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9u
KGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LHBy
ZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMs
ITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVm
b3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0
aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAo
YXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRC
ZWZvcmUoYSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWQoYXJn
dW1lbnRzWzBdKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJu
IHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1
bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0
aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVu
dE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1
bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIs
YXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxkKGFyZ3VtZW50c1swXSkudG9BcnJh
eSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0w
LGU7KGU9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxkLmZpbHRlcihhLFtlXSku
bGVuZ3RoKSFiJiZlLm5vZGVUeXBlPT09MSYmKGQuY2xlYW5EYXRhKGUuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIioiKSksZC5jbGVhbkRhdGEoW2VdKSksZS5wYXJlbnRO
b2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk7cmV0dXJuIHRoaXN9LGVt
cHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDth
Kyspe2Iubm9kZVR5cGU9PT0xJiZkLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIu
Zmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1h
PT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rp
b24oKXtyZXR1cm4gZC5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihh
KXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/
dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShQLCIiKTpudWxsO2lmKHR5cGVvZiBh
IT09InN0cmluZyJ8fFYudGVzdChhKXx8IWQuc3VwcG9ydC5sZWFkaW5nV2hpdGVz
cGFjZSYmUS50ZXN0KGEpfHxYWyhTLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93
ZXJDYXNlKCldKWQuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7
dmFyIGM9ZCh0aGlzKTtjLmh0bWwoYS5jYWxsKHRoaXMsYixjLmh0bWwoKSkpfSk6
dGhpcy5lbXB0eSgpLmFwcGVuZChhKTtlbHNle2E9YS5yZXBsYWNlKFIsIjwkMT48
LyQyPiIpO3RyeXtmb3IodmFyIGM9MCxlPXRoaXMubGVuZ3RoO2M8ZTtjKyspdGhp
c1tjXS5ub2RlVHlwZT09PTEmJihkLmNsZWFuRGF0YSh0aGlzW2NdLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCIqIikpLHRoaXNbY10uaW5uZXJIVE1MPWEpfWNhdGNoKGYp
e3RoaXMuZW1wdHkoKS5hcHBlbmQoYSl9fXJldHVybiB0aGlzfSxyZXBsYWNlV2l0
aDpmdW5jdGlvbihhKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpe2lm
KGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3Zh
ciBjPWQodGhpcyksZT1jLmh0bWwoKTtjLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlz
LGIsZSkpfSk7dHlwZW9mIGEhPT0ic3RyaW5nIiYmKGE9ZChhKS5kZXRhY2goKSk7
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxp
bmcsYz10aGlzLnBhcmVudE5vZGU7ZCh0aGlzKS5yZW1vdmUoKSxiP2QoYikuYmVm
b3JlKGEpOmQoYykuYXBwZW5kKGEpfSl9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQo
ZC5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpfSxkZXRhY2g6
ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpm
dW5jdGlvbihhLGMsZSl7dmFyIGYsZyxoLGksaj1hWzBdLGs9W107aWYoIWQuc3Vw
cG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGo9
PT0ic3RyaW5nIiYmVy50ZXN0KGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KXtkKHRoaXMpLmRvbU1hbmlwKGEsYyxlLCEwKX0pO2lmKGQuaXNGdW5jdGlvbihq
KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGYpe3ZhciBnPWQodGhpcyk7YVsw
XT1qLmNhbGwodGhpcyxmLGM/Zy5odG1sKCk6YiksZy5kb21NYW5pcChhLGMsZSl9
KTtpZih0aGlzWzBdKXtpPWomJmoucGFyZW50Tm9kZSxkLnN1cHBvcnQucGFyZW50
Tm9kZSYmaSYmaS5ub2RlVHlwZT09PTExJiZpLmNoaWxkTm9kZXMubGVuZ3RoPT09
dGhpcy5sZW5ndGg/Zj17ZnJhZ21lbnQ6aX06Zj1kLmJ1aWxkRnJhZ21lbnQoYSx0
aGlzLGspLGg9Zi5mcmFnbWVudCxoLmNoaWxkTm9kZXMubGVuZ3RoPT09MT9nPWg9
aC5maXJzdENoaWxkOmc9aC5maXJzdENoaWxkO2lmKGcpe2M9YyYmZC5ub2RlTmFt
ZShnLCJ0ciIpO2Zvcih2YXIgbD0wLG09dGhpcy5sZW5ndGgsbj1tLTE7bDxtO2wr
KyllLmNhbGwoYz9ZKHRoaXNbbF0sZyk6dGhpc1tsXSxmLmNhY2hlYWJsZXx8bT4x
JiZsPG4/ZC5jbG9uZShoLCEwLCEwKTpoKX1rLmxlbmd0aCYmZC5lYWNoKGssYmEp
fXJldHVybiB0aGlzfX0pLGQuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGIsZSl7
dmFyIGYsZyxoLGk9YiYmYlswXT9iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF06Yzth
Lmxlbmd0aD09PTEmJnR5cGVvZiBhWzBdPT09InN0cmluZyImJmFbMF0ubGVuZ3Ro
PDUxMiYmaT09PWMmJmFbMF0uY2hhckF0KDApPT09IjwiJiYhVi50ZXN0KGFbMF0p
JiYoZC5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFXLnRlc3QoYVswXSkpJiYoZz0hMCxo
PWQuZnJhZ21lbnRzW2FbMF1dLGgmJihoIT09MSYmKGY9aCkpKSxmfHwoZj1pLmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxkLmNsZWFuKGEsaSxmLGUpKSxnJiYoZC5m
cmFnbWVudHNbYVswXV09aD9mOjEpO3JldHVybntmcmFnbWVudDpmLGNhY2hlYWJs
ZTpnfX0sZC5mcmFnbWVudHM9e30sZC5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixw
cmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRB
ZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24o
YSxiKXtkLmZuW2FdPWZ1bmN0aW9uKGMpe3ZhciBlPVtdLGY9ZChjKSxnPXRoaXMu
bGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGcmJmcubm9kZVR5cGU9
PT0xMSYmZy5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmYubGVuZ3RoPT09MSl7Zlti
XSh0aGlzWzBdKTtyZXR1cm4gdGhpc31mb3IodmFyIGg9MCxpPWYubGVuZ3RoO2g8
aTtoKyspe3ZhciBqPShoPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCk7ZChm
W2hdKVtiXShqKSxlPWUuY29uY2F0KGopfXJldHVybiB0aGlzLnB1c2hTdGFjayhl
LGEsZi5zZWxlY3Rvcil9fSksZC5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixj
KXt2YXIgZT1hLmNsb25lTm9kZSghMCksZixnLGg7aWYoKCFkLnN1cHBvcnQubm9D
bG9uZUV2ZW50fHwhZC5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5
cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZC5pc1hNTERvYyhhKSl7JChhLGUp
LGY9XyhhKSxnPV8oZSk7Zm9yKGg9MDtmW2hdOysraCkkKGZbaF0sZ1toXSl9aWYo
Yil7WihhLGUpO2lmKGMpe2Y9XyhhKSxnPV8oZSk7Zm9yKGg9MDtmW2hdOysraCla
KGZbaF0sZ1toXSl9fXJldHVybiBlfSxjbGVhbjpmdW5jdGlvbihhLGIsZSxmKXti
PWJ8fGMsdHlwZW9mIGIuY3JlYXRlRWxlbWVudD09PSJ1bmRlZmluZWQiJiYoYj1i
Lm93bmVyRG9jdW1lbnR8fGJbMF0mJmJbMF0ub3duZXJEb2N1bWVudHx8Yyk7dmFy
IGc9W107Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe3R5cGVvZiBp
PT09Im51bWJlciImJihpKz0iIik7aWYoIWkpY29udGludWU7aWYodHlwZW9mIGkh
PT0ic3RyaW5nInx8VS50ZXN0KGkpKXtpZih0eXBlb2YgaT09PSJzdHJpbmciKXtp
PWkucmVwbGFjZShSLCI8JDE+PC8kMj4iKTt2YXIgaj0oUy5leGVjKGkpfHxbIiIs
IiJdKVsxXS50b0xvd2VyQ2FzZSgpLGs9WFtqXXx8WC5fZGVmYXVsdCxsPWtbMF0s
bT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO20uaW5uZXJIVE1MPWtbMV0raStrWzJd
O3doaWxlKGwtLSltPW0ubGFzdENoaWxkO2lmKCFkLnN1cHBvcnQudGJvZHkpe3Zh
ciBuPVQudGVzdChpKSxvPWo9PT0idGFibGUiJiYhbj9tLmZpcnN0Q2hpbGQmJm0u
Zmlyc3RDaGlsZC5jaGlsZE5vZGVzOmtbMV09PT0iPHRhYmxlPiImJiFuP20uY2hp
bGROb2RlczpbXTtmb3IodmFyIHA9by5sZW5ndGgtMTtwPj0wOy0tcClkLm5vZGVO
YW1lKG9bcF0sInRib2R5IikmJiFvW3BdLmNoaWxkTm9kZXMubGVuZ3RoJiZvW3Bd
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob1twXSl9IWQuc3VwcG9ydC5sZWFkaW5n
V2hpdGVzcGFjZSYmUS50ZXN0KGkpJiZtLmluc2VydEJlZm9yZShiLmNyZWF0ZVRl
eHROb2RlKFEuZXhlYyhpKVswXSksbS5maXJzdENoaWxkKSxpPW0uY2hpbGROb2Rl
c319ZWxzZSBpPWIuY3JlYXRlVGV4dE5vZGUoaSk7aS5ub2RlVHlwZT9nLnB1c2go
aSk6Zz1kLm1lcmdlKGcsaSl9aWYoZSlmb3IoaD0wO2dbaF07aCsrKSFmfHwhZC5u
b2RlTmFtZShnW2hdLCJzY3JpcHQiKXx8Z1toXS50eXBlJiZnW2hdLnR5cGUudG9M
b3dlckNhc2UoKSE9PSJ0ZXh0L2phdmFzY3JpcHQiPyhnW2hdLm5vZGVUeXBlPT09
MSYmZy5zcGxpY2UuYXBwbHkoZyxbaCsxLDBdLmNvbmNhdChkLm1ha2VBcnJheShn
W2hdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSkpKSxlLmFwcGVuZENo
aWxkKGdbaF0pKTpmLnB1c2goZ1toXS5wYXJlbnROb2RlP2dbaF0ucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChnW2hdKTpnW2hdKTtyZXR1cm4gZ30sY2xlYW5EYXRhOmZ1
bmN0aW9uKGEpe3ZhciBiLGMsZT1kLmNhY2hlLGY9ZC5leHBhbmRvLGc9ZC5ldmVu
dC5zcGVjaWFsLGg9ZC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBpPTAs
ajsoaj1hW2ldKSE9bnVsbDtpKyspe2lmKGoubm9kZU5hbWUmJmQubm9EYXRhW2ou
bm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1qW2QuZXhwYW5kb107
aWYoYyl7Yj1lW2NdJiZlW2NdW2ZdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGsg
aW4gYi5ldmVudHMpZ1trXT9kLmV2ZW50LnJlbW92ZShqLGspOmQucmVtb3ZlRXZl
bnQoaixrLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9
aD9kZWxldGUgaltkLmV4cGFuZG9dOmoucmVtb3ZlQXR0cmlidXRlJiZqLnJlbW92
ZUF0dHJpYnV0ZShkLmV4cGFuZG8pLGRlbGV0ZSBlW2NdfX19fSk7dmFyIGJiPS9h
bHBoYVwoW14pXSpcKS9pLGJjPS9vcGFjaXR5PShbXildKikvLGJkPS8tKFthLXpd
KS9pZyxiZT0vKFtBLVpdKS9nLGJmPS9eLT9cZCsoPzpweCk/JC9pLGJnPS9eLT9c
ZC8sYmg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixk
aXNwbGF5OiJibG9jayJ9LGJpPVsiTGVmdCIsIlJpZ2h0Il0sYmo9WyJUb3AiLCJC
b3R0b20iXSxiayxibCxibSxibj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBw
ZXJDYXNlKCl9O2QuZm4uY3NzPWZ1bmN0aW9uKGEsYyl7aWYoYXJndW1lbnRzLmxl
bmd0aD09PTImJmM9PT1iKXJldHVybiB0aGlzO3JldHVybiBkLmFjY2Vzcyh0aGlz
LGEsYywhMCxmdW5jdGlvbihhLGMsZSl7cmV0dXJuIGUhPT1iP2Quc3R5bGUoYSxj
LGUpOmQuY3NzKGEsYyl9KX0sZC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5Ontn
ZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1iayhhLCJvcGFjaXR5Iiwib3Bh
Y2l0eSIpO3JldHVybiBjPT09IiI/IjEiOmN9cmV0dXJuIGEuc3R5bGUub3BhY2l0
eX19fSxjc3NOdW1iZXI6e3pJbmRleDohMCxmb250V2VpZ2h0OiEwLG9wYWNpdHk6
ITAsem9vbTohMCxsaW5lSGVpZ2h0OiEwfSxjc3NQcm9wczp7ImZsb2F0IjpkLnN1
cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1
bmN0aW9uKGEsYyxlLGYpe2lmKGEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBl
IT09OCYmYS5zdHlsZSl7dmFyIGcsaD1kLmNhbWVsQ2FzZShjKSxpPWEuc3R5bGUs
aj1kLmNzc0hvb2tzW2hdO2M9ZC5jc3NQcm9wc1toXXx8aDtpZihlPT09Yil7aWYo
aiYmImdldCJpbiBqJiYoZz1qLmdldChhLCExLGYpKSE9PWIpcmV0dXJuIGc7cmV0
dXJuIGlbY119aWYodHlwZW9mIGU9PT0ibnVtYmVyIiYmaXNOYU4oZSl8fGU9PW51
bGwpcmV0dXJuO3R5cGVvZiBlPT09Im51bWJlciImJiFkLmNzc051bWJlcltoXSYm
KGUrPSJweCIpO2lmKCFqfHwhKCJzZXQiaW4gail8fChlPWouc2V0KGEsZSkpIT09
Yil0cnl7aVtjXT1lfWNhdGNoKGspe319fSxjc3M6ZnVuY3Rpb24oYSxjLGUpe3Zh
ciBmLGc9ZC5jYW1lbENhc2UoYyksaD1kLmNzc0hvb2tzW2ddO2M9ZC5jc3NQcm9w
c1tnXXx8ZztpZihoJiYiZ2V0ImluIGgmJihmPWguZ2V0KGEsITAsZSkpIT09Yily
ZXR1cm4gZjtpZihiaylyZXR1cm4gYmsoYSxjLGcpfSxzd2FwOmZ1bmN0aW9uKGEs
YixjKXt2YXIgZD17fTtmb3IodmFyIGUgaW4gYilkW2VdPWEuc3R5bGVbZV0sYS5z
dHlsZVtlXT1iW2VdO2MuY2FsbChhKTtmb3IoZSBpbiBiKWEuc3R5bGVbZV09ZFtl
XX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoYmQsYm4p
fX0pLGQuY3VyQ1NTPWQuY3NzLGQuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVu
Y3Rpb24oYSxiKXtkLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGUpe3Zh
ciBmO2lmKGMpe2Eub2Zmc2V0V2lkdGghPT0wP2Y9Ym8oYSxiLGUpOmQuc3dhcChh
LGJoLGZ1bmN0aW9uKCl7Zj1ibyhhLGIsZSl9KTtpZihmPD0wKXtmPWJrKGEsYixi
KSxmPT09IjBweCImJmJtJiYoZj1ibShhLGIsYikpO2lmKGYhPW51bGwpcmV0dXJu
IGY9PT0iInx8Zj09PSJhdXRvIj8iMHB4IjpmfWlmKGY8MHx8Zj09bnVsbCl7Zj1h
LnN0eWxlW2JdO3JldHVybiBmPT09IiJ8fGY9PT0iYXV0byI/IjBweCI6Zn1yZXR1
cm4gdHlwZW9mIGY9PT0ic3RyaW5nIj9mOmYrInB4In19LHNldDpmdW5jdGlvbihh
LGIpe2lmKCFiZi50ZXN0KGIpKXJldHVybiBiO2I9cGFyc2VGbG9hdChiKTtpZihi
Pj0wKXJldHVybiBiKyJweCJ9fX0pLGQuc3VwcG9ydC5vcGFjaXR5fHwoZC5jc3NI
b29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYmMudGVzdCgo
YiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUu
ZmlsdGVyKXx8IiIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDArIiI6Yj8iMSI6
IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGU7Yy56b29tPTE7dmFy
IGU9ZC5pc05hTihiKT8iIjoiYWxwaGEob3BhY2l0eT0iK2IqMTAwKyIpIixmPWMu
ZmlsdGVyfHwiIjtjLmZpbHRlcj1iYi50ZXN0KGYpP2YucmVwbGFjZShiYixlKTpj
LmZpbHRlcisiICIrZX19KSxjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3Lmdl
dENvbXB1dGVkU3R5bGUmJihibD1mdW5jdGlvbihhLGMsZSl7dmFyIGYsZyxoO2U9
ZS5yZXBsYWNlKGJlLCItJDEiKS50b0xvd2VyQ2FzZSgpO2lmKCEoZz1hLm93bmVy
RG9jdW1lbnQuZGVmYXVsdFZpZXcpKXJldHVybiBiO2lmKGg9Zy5nZXRDb21wdXRl
ZFN0eWxlKGEsbnVsbCkpZj1oLmdldFByb3BlcnR5VmFsdWUoZSksZj09PSIiJiYh
ZC5jb250YWlucyhhLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGEpJiYo
Zj1kLnN0eWxlKGEsZSkpO3JldHVybiBmfSksYy5kb2N1bWVudEVsZW1lbnQuY3Vy
cmVudFN0eWxlJiYoYm09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWEuY3VycmVudFN0
eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxlPWEucnVudGltZVN0eWxlJiZhLnJ1bnRp
bWVTdHlsZVtiXSxmPWEuc3R5bGU7IWJmLnRlc3QoZCkmJmJnLnRlc3QoZCkmJihj
PWYubGVmdCxlJiYoYS5ydW50aW1lU3R5bGUubGVmdD1hLmN1cnJlbnRTdHlsZS5s
ZWZ0KSxmLmxlZnQ9Yj09PSJmb250U2l6ZSI/IjFlbSI6ZHx8MCxkPWYucGl4ZWxM
ZWZ0KyJweCIsZi5sZWZ0PWMsZSYmKGEucnVudGltZVN0eWxlLmxlZnQ9ZSkpO3Jl
dHVybiBkPT09IiI/ImF1dG8iOmR9KSxiaz1ibHx8Ym0sZC5leHByJiZkLmV4cHIu
ZmlsdGVycyYmKGQuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXt2YXIg
Yj1hLm9mZnNldFdpZHRoLGM9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGI9PT0wJiZj
PT09MHx8IWQuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJihhLnN0eWxl
LmRpc3BsYXl8fGQuY3NzKGEsImRpc3BsYXkiKSk9PT0ibm9uZSJ9LGQuZXhwci5m
aWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIWQuZXhwci5maWx0ZXJz
LmhpZGRlbihhKX0pO3ZhciBicD0vJTIwL2csYnE9L1xbXF0kLyxicj0vXHI/XG4v
Zyxicz0vIy4qJC8sYnQ9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxi
dT0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8aGlkZGVufG1vbnRofG51
bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2Vl
aykkL2ksYnY9Lyg/Ol5maWxlfF53aWRnZXR8XC1leHRlbnNpb24pOiQvLGJ3PS9e
KD86R0VUfEhFQUQpJC8sYng9L15cL1wvLyxieT0vXD8vLGJ6PS88c2NyaXB0XGJb
XjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLGJBPS9e
KD86c2VsZWN0fHRleHRhcmVhKS9pLGJCPS9ccysvLGJDPS8oWz8mXSlfPVteJl0q
LyxiRD0vKF58XC0pKFthLXpdKS9nLGJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4g
YitjLnRvVXBwZXJDYXNlKCl9LGJGPS9eKFtcd1wrXC5cLV0rOilcL1wvKFteXC8/
IzpdKikoPzo6KFxkKykpPy8sYkc9ZC5mbi5sb2FkLGJIPXt9LGJJPXt9LGJKLGJL
O3RyeXtiSj1jLmxvY2F0aW9uLmhyZWZ9Y2F0Y2goYkwpe2JKPWMuY3JlYXRlRWxl
bWVudCgiYSIpLGJKLmhyZWY9IiIsYko9YkouaHJlZn1iSz1iRi5leGVjKGJKLnRv
TG93ZXJDYXNlKCkpLGQuZm4uZXh0ZW5kKHtsb2FkOmZ1bmN0aW9uKGEsYyxlKXtp
Zih0eXBlb2YgYSE9PSJzdHJpbmciJiZiRylyZXR1cm4gYkcuYXBwbHkodGhpcyxh
cmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZj1hLmlu
ZGV4T2YoIiAiKTtpZihmPj0wKXt2YXIgZz1hLnNsaWNlKGYsYS5sZW5ndGgpO2E9
YS5zbGljZSgwLGYpfXZhciBoPSJHRVQiO2MmJihkLmlzRnVuY3Rpb24oYyk/KGU9
YyxjPWIpOnR5cGVvZiBjPT09Im9iamVjdCImJihjPWQucGFyYW0oYyxkLmFqYXhT
ZXR0aW5ncy50cmFkaXRpb25hbCksaD0iUE9TVCIpKTt2YXIgaT10aGlzO2QuYWph
eCh7dXJsOmEsdHlwZTpoLGRhdGFUeXBlOiJodG1sIixkYXRhOmMsY29tcGxldGU6
ZnVuY3Rpb24oYSxiLGMpe2M9YS5yZXNwb25zZVRleHQsYS5pc1Jlc29sdmVkKCkm
JihhLmRvbmUoZnVuY3Rpb24oYSl7Yz1hfSksaS5odG1sKGc/ZCgiPGRpdj4iKS5h
cHBlbmQoYy5yZXBsYWNlKGJ6LCIiKSkuZmluZChnKTpjKSksZSYmaS5lYWNoKGUs
W2MsYixhXSl9fSk7cmV0dXJuIHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3Jl
dHVybiBkLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFy
cmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuZWxlbWVudHM/ZC5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30p
LmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJiF0aGlzLmRpc2Fi
bGVkJiYodGhpcy5jaGVja2VkfHxiQS50ZXN0KHRoaXMubm9kZU5hbWUpfHxidS50
ZXN0KHRoaXMudHlwZSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9ZCh0aGlz
KS52YWwoKTtyZXR1cm4gYz09bnVsbD9udWxsOmQuaXNBcnJheShjKT9kLm1hcChj
LGZ1bmN0aW9uKGEsYyl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFj
ZShiciwiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoYnIs
IlxyXG4iKX19KS5nZXQoKX19KSxkLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBh
amF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxp
dCgiICIpLGZ1bmN0aW9uKGEsYil7ZC5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4g
dGhpcy5iaW5kKGIsYSl9fSksZC5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9u
KGEsYyl7ZFtjXT1mdW5jdGlvbihhLGUsZixnKXtkLmlzRnVuY3Rpb24oZSkmJihn
PWd8fGYsZj1lLGU9Yik7cmV0dXJuIGQuYWpheCh7dHlwZTpjLHVybDphLGRhdGE6
ZSxzdWNjZXNzOmYsZGF0YVR5cGU6Z30pfX0pLGQuZXh0ZW5kKHtnZXRTY3JpcHQ6
ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZC5nZXQoYSxiLGMsInNjcmlwdCIpfSxnZXRK
U09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5nZXQoYSxiLGMsImpzb24iKX0s
YWpheFNldHVwOmZ1bmN0aW9uKGEsYil7Yj9kLmV4dGVuZCghMCxhLGQuYWpheFNl
dHRpbmdzLGIpOihiPWEsYT1kLmV4dGVuZCghMCxkLmFqYXhTZXR0aW5ncyxiKSk7
Zm9yKHZhciBjIGluIHtjb250ZXh0OjEsdXJsOjF9KWMgaW4gYj9hW2NdPWJbY106
YyBpbiBkLmFqYXhTZXR0aW5ncyYmKGFbY109ZC5hamF4U2V0dGluZ3NbY10pO3Jl
dHVybiBhfSxhamF4U2V0dGluZ3M6e3VybDpiSixpc0xvY2FsOmJ2LnRlc3QoYktb
MV0pLGdsb2JhbDohMCx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlv
bi94LXd3dy1mb3JtLXVybGVuY29kZWQiLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEw
LGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoi
dGV4dC9odG1sIix0ZXh0OiJ0ZXh0L3BsYWluIixqc29uOiJhcHBsaWNhdGlvbi9q
c29uLCB0ZXh0L2phdmFzY3JpcHQiLCIqIjoiKi8qIn0sY29udGVudHM6e3htbDov
eG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3ht
bDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCJ9LGNvbnZlcnRlcnM6
eyIqIHRleHQiOmEuU3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOmQu
cGFyc2VKU09OLCJ0ZXh0IHhtbCI6ZC5wYXJzZVhNTH19LGFqYXhQcmVmaWx0ZXI6
Yk0oYkgpLGFqYXhUcmFuc3BvcnQ6Yk0oYkkpLGFqYXg6ZnVuY3Rpb24oYSxjKXtm
dW5jdGlvbiB2KGEsYyxsLG4pe2lmKHIhPT0yKXtyPTIscCYmY2xlYXJUaW1lb3V0
KHApLG89YixtPW58fCIiLHUucmVhZHlTdGF0ZT1hPzQ6MDt2YXIgcSx0LHYsdz1s
P2JQKGUsdSxsKTpiLHgseTtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihl
LmlmTW9kaWZpZWQpe2lmKHg9dS5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2Rp
ZmllZCIpKWQubGFzdE1vZGlmaWVkW2tdPXg7aWYoeT11LmdldFJlc3BvbnNlSGVh
ZGVyKCJFdGFnIikpZC5ldGFnW2tdPXl9aWYoYT09PTMwNCljPSJub3Rtb2RpZmll
ZCIscT0hMDtlbHNlIHRyeXt0PWJRKGUsdyksYz0ic3VjY2VzcyIscT0hMH1jYXRj
aCh6KXtjPSJwYXJzZXJlcnJvciIsdj16fX1lbHNle3Y9YztpZighY3x8YSljPSJl
cnJvciIsYTwwJiYoYT0wKX11LnN0YXR1cz1hLHUuc3RhdHVzVGV4dD1jLHE/aC5y
ZXNvbHZlV2l0aChmLFt0LGMsdV0pOmgucmVqZWN0V2l0aChmLFt1LGMsdl0pLHUu
c3RhdHVzQ29kZShqKSxqPWIscyYmZy50cmlnZ2VyKCJhamF4IisocT8iU3VjY2Vz
cyI6IkVycm9yIiksW3UsZSxxP3Q6dl0pLGkucmVzb2x2ZVdpdGgoZixbdSxjXSks
cyYmKGcudHJpZ2dlcigiYWpheENvbXBsZXRlIixbdSxlXSksLS1kLmFjdGl2ZXx8
ZC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX19dHlwZW9mIGE9PT0ib2JqZWN0
IiYmKGM9YSxhPWIpLGM9Y3x8e307dmFyIGU9ZC5hamF4U2V0dXAoe30sYyksZj1l
LmNvbnRleHR8fGUsZz1mIT09ZSYmKGYubm9kZVR5cGV8fGYgaW5zdGFuY2VvZiBk
KT9kKGYpOmQuZXZlbnQsaD1kLkRlZmVycmVkKCksaT1kLl9EZWZlcnJlZCgpLGo9
ZS5zdGF0dXNDb2RlfHx7fSxrLGw9e30sbSxuLG8scCxxLHI9MCxzLHQsdT17cmVh
ZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYSxiKXtyfHwobFth
LnRvTG93ZXJDYXNlKCkucmVwbGFjZShiRCxiRSldPWIpO3JldHVybiB0aGlzfSxn
ZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gcj09PTI/bTpu
dWxsfSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYztpZihyPT09
Mil7aWYoIW4pe249e307d2hpbGUoYz1idC5leGVjKG0pKW5bY1sxXS50b0xvd2Vy
Q2FzZSgpXT1jWzJdfWM9blthLnRvTG93ZXJDYXNlKCldfXJldHVybiBjPT09Yj9u
dWxsOmN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7cnx8KGUubWltZVR5
cGU9YSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe2E9YXx8ImFib3J0
IixvJiZvLmFib3J0KGEpLHYoMCxhKTtyZXR1cm4gdGhpc319O2gucHJvbWlzZSh1
KSx1LnN1Y2Nlc3M9dS5kb25lLHUuZXJyb3I9dS5mYWlsLHUuY29tcGxldGU9aS5k
b25lLHUuc3RhdHVzQ29kZT1mdW5jdGlvbihhKXtpZihhKXt2YXIgYjtpZihyPDIp
Zm9yKGIgaW4gYSlqW2JdPVtqW2JdLGFbYl1dO2Vsc2UgYj1hW3Uuc3RhdHVzXSx1
LnRoZW4oYixiKX1yZXR1cm4gdGhpc30sZS51cmw9KChhfHxlLnVybCkrIiIpLnJl
cGxhY2UoYnMsIiIpLnJlcGxhY2UoYngsYktbMV0rIi8vIiksZS5kYXRhVHlwZXM9
ZC50cmltKGUuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5zcGxpdChiQiks
ZS5jcm9zc0RvbWFpbnx8KHE9YkYuZXhlYyhlLnVybC50b0xvd2VyQ2FzZSgpKSxl
LmNyb3NzRG9tYWluPXEmJihxWzFdIT1iS1sxXXx8cVsyXSE9YktbMl18fChxWzNd
fHwocVsxXT09PSJodHRwOiI/ODA6NDQzKSkhPShiS1szXXx8KGJLWzFdPT09Imh0
dHA6Ij84MDo0NDMpKSkpLGUuZGF0YSYmZS5wcm9jZXNzRGF0YSYmdHlwZW9mIGUu
ZGF0YSE9PSJzdHJpbmciJiYoZS5kYXRhPWQucGFyYW0oZS5kYXRhLGUudHJhZGl0
aW9uYWwpKSxiTihiSCxlLGMsdSk7aWYocj09PTIpcmV0dXJuITE7cz1lLmdsb2Jh
bCxlLnR5cGU9ZS50eXBlLnRvVXBwZXJDYXNlKCksZS5oYXNDb250ZW50PSFidy50
ZXN0KGUudHlwZSkscyYmZC5hY3RpdmUrKz09PTAmJmQuZXZlbnQudHJpZ2dlcigi
YWpheFN0YXJ0Iik7aWYoIWUuaGFzQ29udGVudCl7ZS5kYXRhJiYoZS51cmwrPShi
eS50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmRhdGEpLGs9ZS51cmw7aWYoZS5jYWNo
ZT09PSExKXt2YXIgdz1kLm5vdygpLHg9ZS51cmwucmVwbGFjZShiQywiJDFfPSIr
dyk7ZS51cmw9eCsoeD09PWUudXJsPyhieS50ZXN0KGUudXJsKT8iJiI6Ij8iKSsi
Xz0iK3c6IiIpfX1pZihlLmRhdGEmJmUuaGFzQ29udGVudCYmZS5jb250ZW50VHlw
ZSE9PSExfHxjLmNvbnRlbnRUeXBlKWxbIkNvbnRlbnQtVHlwZSJdPWUuY29udGVu
dFR5cGU7ZS5pZk1vZGlmaWVkJiYoaz1rfHxlLnVybCxkLmxhc3RNb2RpZmllZFtr
XSYmKGxbIklmLU1vZGlmaWVkLVNpbmNlIl09ZC5sYXN0TW9kaWZpZWRba10pLGQu
ZXRhZ1trXSYmKGxbIklmLU5vbmUtTWF0Y2giXT1kLmV0YWdba10pKSxsLkFjY2Vw
dD1lLmRhdGFUeXBlc1swXSYmZS5hY2NlcHRzW2UuZGF0YVR5cGVzWzBdXT9lLmFj
Y2VwdHNbZS5kYXRhVHlwZXNbMF1dKyhlLmRhdGFUeXBlc1swXSE9PSIqIj8iLCAq
Lyo7IHE9MC4wMSI6IiIpOmUuYWNjZXB0c1siKiJdO2Zvcih0IGluIGUuaGVhZGVy
cyl1LnNldFJlcXVlc3RIZWFkZXIodCxlLmhlYWRlcnNbdF0pO2lmKGUuYmVmb3Jl
U2VuZCYmKGUuYmVmb3JlU2VuZC5jYWxsKGYsdSxlKT09PSExfHxyPT09Mikpe3Uu
YWJvcnQoKTtyZXR1cm4hMX1mb3IodCBpbiB7c3VjY2VzczoxLGVycm9yOjEsY29t
cGxldGU6MX0pdVt0XShlW3RdKTtvPWJOKGJJLGUsYyx1KTtpZihvKXt1LnJlYWR5
U3RhdGU9MSxzJiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdSxlXSksZS5hc3luYyYm
ZS50aW1lb3V0PjAmJihwPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt1LmFib3J0KCJ0
aW1lb3V0Iil9LGUudGltZW91dCkpO3RyeXtyPTEsby5zZW5kKGwsdil9Y2F0Y2go
eSl7c3RhdHVzPDI/digtMSx5KTpkLmVycm9yKHkpfX1lbHNlIHYoLTEsIk5vIFRy
YW5zcG9ydCIpO3JldHVybiB1fSxwYXJhbTpmdW5jdGlvbihhLGMpe3ZhciBlPVtd
LGY9ZnVuY3Rpb24oYSxiKXtiPWQuaXNGdW5jdGlvbihiKT9iKCk6YixlW2UubGVu
Z3RoXT1lbmNvZGVVUklDb21wb25lbnQoYSkrIj0iK2VuY29kZVVSSUNvbXBvbmVu
dChiKX07Yz09PWImJihjPWQuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKTtpZihk
LmlzQXJyYXkoYSl8fGEuanF1ZXJ5JiYhZC5pc1BsYWluT2JqZWN0KGEpKWQuZWFj
aChhLGZ1bmN0aW9uKCl7Zih0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZv
cih2YXIgZyBpbiBhKWJPKGcsYVtnXSxjLGYpO3JldHVybiBlLmpvaW4oIiYiKS5y
ZXBsYWNlKGJwLCIrIil9fSksZC5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmll
ZDp7fSxldGFnOnt9fSk7dmFyIGJSPWQubm93KCksYlM9LyhcPSlcPygmfCQpfCgp
XD9cPygpL2k7ZC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxs
YmFjazpmdW5jdGlvbigpe3JldHVybiBkLmV4cGFuZG8rIl8iK2JSKyt9fSksZC5h
amF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZSl7dmFyIGY9
dHlwZW9mIGIuZGF0YT09PSJzdHJpbmciO2lmKGIuZGF0YVR5cGVzWzBdPT09Impz
b25wInx8Yy5qc29ucENhbGxiYWNrfHxjLmpzb25wIT1udWxsfHxiLmpzb25wIT09
ITEmJihiUy50ZXN0KGIudXJsKXx8ZiYmYlMudGVzdChiLmRhdGEpKSl7dmFyIGcs
aD1iLmpzb25wQ2FsbGJhY2s9ZC5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/
Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJs
LGs9Yi5kYXRhLGw9IiQxIitoKyIkMiIsbT1mdW5jdGlvbigpe2FbaF09aSxnJiZk
LmlzRnVuY3Rpb24oaSkmJmFbaF0oZ1swXSl9O2IuanNvbnAhPT0hMSYmKGo9ai5y
ZXBsYWNlKGJTLGwpLGIudXJsPT09aiYmKGYmJihrPWsucmVwbGFjZShiUyxsKSks
Yi5kYXRhPT09ayYmKGorPSgvXD8vLnRlc3Qoaik/IiYiOiI/IikrYi5qc29ucCsi
PSIraCkpKSxiLnVybD1qLGIuZGF0YT1rLGFbaF09ZnVuY3Rpb24oYSl7Zz1bYV19
LGUudGhlbihtLG0pLGIuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlv
bigpe2d8fGQuZXJyb3IoaCsiIHdhcyBub3QgY2FsbGVkIik7cmV0dXJuIGdbMF19
LGIuZGF0YVR5cGVzWzBdPSJqc29uIjtyZXR1cm4ic2NyaXB0In19KSxkLmFqYXhT
ZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0
aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0
aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L2phdmFzY3JpcHR8
ZWNtYXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24o
YSl7ZC5nbG9iYWxFdmFsKGEpO3JldHVybiBhfX19KSxkLmFqYXhQcmVmaWx0ZXIo
InNjcmlwdCIsZnVuY3Rpb24oYSl7YS5jYWNoZT09PWImJihhLmNhY2hlPSExKSxh
LmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLGQuYWph
eFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWlu
KXt2YXIgZCxlPWMuaGVhZHx8Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIp
WzBdfHxjLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihmLGcp
e2Q9Yy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkLmFzeW5jPSJhc3luYyIsYS5z
Y3JpcHRDaGFyc2V0JiYoZC5jaGFyc2V0PWEuc2NyaXB0Q2hhcnNldCksZC5zcmM9
YS51cmwsZC5vbmxvYWQ9ZC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oYSxj
KXtpZighZC5yZWFkeVN0YXRlfHwvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGQucmVh
ZHlTdGF0ZSkpZC5vbmxvYWQ9ZC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxlJiZk
LnBhcmVudE5vZGUmJmUucmVtb3ZlQ2hpbGQoZCksZD1iLGN8fGcoMjAwLCJzdWNj
ZXNzIil9LGUuaW5zZXJ0QmVmb3JlKGQsZS5maXJzdENoaWxkKX0sYWJvcnQ6ZnVu
Y3Rpb24oKXtkJiZkLm9ubG9hZCgwLDEpfX19fSk7dmFyIGJUPWQubm93KCksYlUs
YlY7ZC5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigp
e3JldHVybiF0aGlzLmlzTG9jYWwmJmJYKCl8fGJZKCl9OmJYLGJWPWQuYWpheFNl
dHRpbmdzLnhocigpLGQuc3VwcG9ydC5hamF4PSEhYlYsZC5zdXBwb3J0LmNvcnM9
YlYmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYlYsYlY9YixkLnN1cHBvcnQuYWpheCYm
ZC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxk
LnN1cHBvcnQuY29ycyl7dmFyIGM7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxmKXt2
YXIgZz1hLnhocigpLGgsaTthLnVzZXJuYW1lP2cub3BlbihhLnR5cGUsYS51cmws
YS5hc3luYyxhLnVzZXJuYW1lLGEucGFzc3dvcmQpOmcub3BlbihhLnR5cGUsYS51
cmwsYS5hc3luYyk7aWYoYS54aHJGaWVsZHMpZm9yKGkgaW4gYS54aHJGaWVsZHMp
Z1tpXT1hLnhockZpZWxkc1tpXTthLm1pbWVUeXBlJiZnLm92ZXJyaWRlTWltZVR5
cGUmJmcub3ZlcnJpZGVNaW1lVHlwZShhLm1pbWVUeXBlKSwoIWEuY3Jvc3NEb21h
aW58fGEuaGFzQ29udGVudCkmJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJY
LVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihpIGlu
IGUpZy5zZXRSZXF1ZXN0SGVhZGVyKGksZVtpXSl9Y2F0Y2goail7fWcuc2VuZChh
Lmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYz1mdW5jdGlvbihlLGkpe3ZhciBq
LGssbCxtLG47dHJ5e2lmKGMmJihpfHxnLnJlYWR5U3RhdGU9PT00KSl7Yz1iLGgm
JihnLm9ucmVhZHlzdGF0ZWNoYW5nZT1kLm5vb3AsZGVsZXRlIGJVW2hdKTtpZihp
KWcucmVhZHlTdGF0ZSE9PTQmJmcuYWJvcnQoKTtlbHNle2o9Zy5zdGF0dXMsbD1n
LmdldEFsbFJlc3BvbnNlSGVhZGVycygpLG09e30sbj1nLnJlc3BvbnNlWE1MLG4m
Jm4uZG9jdW1lbnRFbGVtZW50JiYobS54bWw9biksbS50ZXh0PWcucmVzcG9uc2VU
ZXh0O3RyeXtrPWcuc3RhdHVzVGV4dH1jYXRjaChvKXtrPSIifWp8fCFhLmlzTG9j
YWx8fGEuY3Jvc3NEb21haW4/aj09PTEyMjMmJihqPTIwNCk6aj1tLnRleHQ/MjAw
OjQwNH19fWNhdGNoKHApe2l8fGYoLTEscCl9bSYmZihqLGssbSxsKX0sYS5hc3lu
YyYmZy5yZWFkeVN0YXRlIT09ND8oYlV8fChiVT17fSxiVygpKSxoPWJUKyssZy5v
bnJlYWR5c3RhdGVjaGFuZ2U9YlVbaF09Yyk6YygpfSxhYm9ydDpmdW5jdGlvbigp
e2MmJmMoMCwxKX19fX0pO3ZhciBiWj17fSxiJD0vXig/OnRvZ2dsZXxzaG93fGhp
ZGUpJC8sYl89L14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16JV0qKSQvaSxjYSxj
Yj1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5n
VG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFy
Z2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0
eSJdXTtkLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIsYyl7dmFyIGUsZjtp
ZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGNjKCJzaG93IiwzKSxhLGIs
Yyk7Zm9yKHZhciBnPTAsaD10aGlzLmxlbmd0aDtnPGg7ZysrKWU9dGhpc1tnXSxm
PWUuc3R5bGUuZGlzcGxheSwhZC5fZGF0YShlLCJvbGRkaXNwbGF5IikmJmY9PT0i
bm9uZSImJihmPWUuc3R5bGUuZGlzcGxheT0iIiksZj09PSIiJiZkLmNzcyhlLCJk
aXNwbGF5Iik9PT0ibm9uZSImJmQuX2RhdGEoZSwib2xkZGlzcGxheSIsY2QoZS5u
b2RlTmFtZSkpO2ZvcihnPTA7ZzxoO2crKyl7ZT10aGlzW2ddLGY9ZS5zdHlsZS5k
aXNwbGF5O2lmKGY9PT0iInx8Zj09PSJub25lIillLnN0eWxlLmRpc3BsYXk9ZC5f
ZGF0YShlLCJvbGRkaXNwbGF5Iil8fCIifXJldHVybiB0aGlzfSxoaWRlOmZ1bmN0
aW9uKGEsYixjKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGNjKCJo
aWRlIiwzKSxhLGIsYyk7Zm9yKHZhciBlPTAsZj10aGlzLmxlbmd0aDtlPGY7ZSsr
KXt2YXIgZz1kLmNzcyh0aGlzW2VdLCJkaXNwbGF5Iik7ZyE9PSJub25lIiYmIWQu
X2RhdGEodGhpc1tlXSwib2xkZGlzcGxheSIpJiZkLl9kYXRhKHRoaXNbZV0sIm9s
ZGRpc3BsYXkiLGcpfWZvcihlPTA7ZTxmO2UrKyl0aGlzW2VdLnN0eWxlLmRpc3Bs
YXk9Im5vbmUiO3JldHVybiB0aGlzfSxfdG9nZ2xlOmQuZm4udG9nZ2xlLHRvZ2ds
ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGU9dHlwZW9mIGE9PT0iYm9vbGVhbiI7ZC5p
c0Z1bmN0aW9uKGEpJiZkLmlzRnVuY3Rpb24oYik/dGhpcy5fdG9nZ2xlLmFwcGx5
KHRoaXMsYXJndW1lbnRzKTphPT1udWxsfHxlP3RoaXMuZWFjaChmdW5jdGlvbigp
e3ZhciBiPWU/YTpkKHRoaXMpLmlzKCI6aGlkZGVuIik7ZCh0aGlzKVtiPyJzaG93
IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoY2MoInRvZ2dsZSIsMyksYSxiLGMp
O3JldHVybiB0aGlzfSxmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRo
aXMuZmlsdGVyKCI6aGlkZGVuIikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5k
KCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24o
YSxiLGMsZSl7dmFyIGY9ZC5zcGVlZChiLGMsZSk7aWYoZC5pc0VtcHR5T2JqZWN0
KGEpKXJldHVybiB0aGlzLmVhY2goZi5jb21wbGV0ZSk7cmV0dXJuIHRoaXNbZi5x
dWV1ZT09PSExPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe3ZhciBiPWQuZXh0
ZW5kKHt9LGYpLGMsZT10aGlzLm5vZGVUeXBlPT09MSxnPWUmJmQodGhpcykuaXMo
IjpoaWRkZW4iKSxoPXRoaXM7Zm9yKGMgaW4gYSl7dmFyIGk9ZC5jYW1lbENhc2Uo
Yyk7YyE9PWkmJihhW2ldPWFbY10sZGVsZXRlIGFbY10sYz1pKTtpZihhW2NdPT09
ImhpZGUiJiZnfHxhW2NdPT09InNob3ciJiYhZylyZXR1cm4gYi5jb21wbGV0ZS5j
YWxsKHRoaXMpO2lmKGUmJihjPT09ImhlaWdodCJ8fGM9PT0id2lkdGgiKSl7Yi5v
dmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93
WCx0aGlzLnN0eWxlLm92ZXJmbG93WV07aWYoZC5jc3ModGhpcywiZGlzcGxheSIp
PT09ImlubGluZSImJmQuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSIpaWYoZC5z
dXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQpe3ZhciBqPWNkKHRoaXMubm9k
ZU5hbWUpO2o9PT0iaW5saW5lIj90aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1i
bG9jayI6KHRoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lIix0aGlzLnN0eWxlLnpv
b209MSl9ZWxzZSB0aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayJ9ZC5p
c0FycmF5KGFbY10pJiYoKGIuc3BlY2lhbEVhc2luZz1iLnNwZWNpYWxFYXNpbmd8
fHt9KVtjXT1hW2NdWzFdLGFbY109YVtjXVswXSl9Yi5vdmVyZmxvdyE9bnVsbCYm
KHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpLGIuY3VyQW5pbT1kLmV4dGVu
ZCh7fSxhKSxkLmVhY2goYSxmdW5jdGlvbihjLGUpe3ZhciBmPW5ldyBkLmZ4KGgs
YixjKTtpZihiJC50ZXN0KGUpKWZbZT09PSJ0b2dnbGUiP2c/InNob3ciOiJoaWRl
IjplXShhKTtlbHNle3ZhciBpPWJfLmV4ZWMoZSksaj1mLmN1cigpO2lmKGkpe3Zh
ciBrPXBhcnNlRmxvYXQoaVsyXSksbD1pWzNdfHwoZC5jc3NOdW1iZXJbY10/IiI6
InB4Iik7bCE9PSJweCImJihkLnN0eWxlKGgsYywoa3x8MSkrbCksaj0oa3x8MSkv
Zi5jdXIoKSpqLGQuc3R5bGUoaCxjLGorbCkpLGlbMV0mJihrPShpWzFdPT09Ii09
Ij8tMToxKSprK2opLGYuY3VzdG9tKGosayxsKX1lbHNlIGYuY3VzdG9tKGosZSwi
Iil9fSk7cmV0dXJuITB9KX0sc3RvcDpmdW5jdGlvbihhLGIpe3ZhciBjPWQudGlt
ZXJzO2EmJnRoaXMucXVldWUoW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe2Zvcih2
YXIgYT1jLmxlbmd0aC0xO2E+PTA7YS0tKWNbYV0uZWxlbT09PXRoaXMmJihiJiZj
W2FdKCEwKSxjLnNwbGljZShhLDEpKX0pLGJ8fHRoaXMuZGVxdWV1ZSgpO3JldHVy
biB0aGlzfX0pLGQuZWFjaCh7c2xpZGVEb3duOmNjKCJzaG93IiwxKSxzbGlkZVVw
OmNjKCJoaWRlIiwxKSxzbGlkZVRvZ2dsZTpjYygidG9nZ2xlIiwxKSxmYWRlSW46
e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRv
Z2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7ZC5mblthXT1m
dW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxk
LmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWEmJnR5cGVvZiBh
PT09Im9iamVjdCI/ZC5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxk
LmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIWQu
aXNGdW5jdGlvbihiKSYmYn07ZS5kdXJhdGlvbj1kLmZ4Lm9mZj8wOnR5cGVvZiBl
LmR1cmF0aW9uPT09Im51bWJlciI/ZS5kdXJhdGlvbjplLmR1cmF0aW9uIGluIGQu
Znguc3BlZWRzP2QuZnguc3BlZWRzW2UuZHVyYXRpb25dOmQuZnguc3BlZWRzLl9k
ZWZhdWx0LGUub2xkPWUuY29tcGxldGUsZS5jb21wbGV0ZT1mdW5jdGlvbigpe2Uu
cXVldWUhPT0hMSYmZCh0aGlzKS5kZXF1ZXVlKCksZC5pc0Z1bmN0aW9uKGUub2xk
KSYmZS5vbGQuY2FsbCh0aGlzKX07cmV0dXJuIGV9LGVhc2luZzp7bGluZWFyOmZ1
bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxi
LGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRp
bWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5l
bGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnfHwoYi5vcmlnPXt9KX19KSxkLmZ4LnBy
b3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnN0ZXAmJnRo
aXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLChk
LmZ4LnN0ZXBbdGhpcy5wcm9wXXx8ZC5meC5zdGVwLl9kZWZhdWx0KSh0aGlzKX0s
Y3VyOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJigh
dGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVs
bCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciBhLGI9ZC5jc3ModGhp
cy5lbGVtLHRoaXMucHJvcCk7cmV0dXJuIGlzTmFOKGE9cGFyc2VGbG9hdChiKSk/
IWJ8fGI9PT0iYXV0byI/MDpiOmF9LGN1c3RvbTpmdW5jdGlvbihhLGIsYyl7ZnVu
Y3Rpb24gZyhhKXtyZXR1cm4gZS5zdGVwKGEpfXZhciBlPXRoaXMsZj1kLmZ4O3Ro
aXMuc3RhcnRUaW1lPWQubm93KCksdGhpcy5zdGFydD1hLHRoaXMuZW5kPWIsdGhp
cy51bml0PWN8fHRoaXMudW5pdHx8KGQuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6
InB4IiksdGhpcy5ub3c9dGhpcy5zdGFydCx0aGlzLnBvcz10aGlzLnN0YXRlPTAs
Zy5lbGVtPXRoaXMuZWxlbSxnKCkmJmQudGltZXJzLnB1c2goZykmJiFjYSYmKGNh
PXNldEludGVydmFsKGYudGljayxmLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24o
KXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWQuc3R5bGUodGhpcy5lbGVt
LHRoaXMucHJvcCksdGhpcy5vcHRpb25zLnNob3c9ITAsdGhpcy5jdXN0b20odGhp
cy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMu
Y3VyKCkpLGQodGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlz
Lm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWQuc3R5bGUodGhpcy5lbGVtLHRoaXMu
cHJvcCksdGhpcy5vcHRpb25zLmhpZGU9ITAsdGhpcy5jdXN0b20odGhpcy5jdXIo
KSwwKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgYj1kLm5vdygpLGM9ITA7aWYoYXx8
Yj49dGhpcy5vcHRpb25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5v
dz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSx0
aGlzLm9wdGlvbnMuY3VyQW5pbVt0aGlzLnByb3BdPSEwO2Zvcih2YXIgZSBpbiB0
aGlzLm9wdGlvbnMuY3VyQW5pbSl0aGlzLm9wdGlvbnMuY3VyQW5pbVtlXSE9PSEw
JiYoYz0hMSk7aWYoYyl7aWYodGhpcy5vcHRpb25zLm92ZXJmbG93IT1udWxsJiYh
ZC5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3Mpe3ZhciBmPXRoaXMuZWxlbSxnPXRo
aXMub3B0aW9ucztkLmVhY2goWyIiLCJYIiwiWSJdLGZ1bmN0aW9uKGEsYil7Zi5z
dHlsZVsib3ZlcmZsb3ciK2JdPWcub3ZlcmZsb3dbYV19KX10aGlzLm9wdGlvbnMu
aGlkZSYmZCh0aGlzLmVsZW0pLmhpZGUoKTtpZih0aGlzLm9wdGlvbnMuaGlkZXx8
dGhpcy5vcHRpb25zLnNob3cpZm9yKHZhciBoIGluIHRoaXMub3B0aW9ucy5jdXJB
bmltKWQuc3R5bGUodGhpcy5lbGVtLGgsdGhpcy5vcHRpb25zLm9yaWdbaF0pO3Ro
aXMub3B0aW9ucy5jb21wbGV0ZS5jYWxsKHRoaXMuZWxlbSl9cmV0dXJuITF9dmFy
IGk9Yi10aGlzLnN0YXJ0VGltZTt0aGlzLnN0YXRlPWkvdGhpcy5vcHRpb25zLmR1
cmF0aW9uO3ZhciBqPXRoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5nJiZ0aGlzLm9w
dGlvbnMuc3BlY2lhbEVhc2luZ1t0aGlzLnByb3BdLGs9dGhpcy5vcHRpb25zLmVh
c2luZ3x8KGQuZWFzaW5nLnN3aW5nPyJzd2luZyI6ImxpbmVhciIpO3RoaXMucG9z
PWQuZWFzaW5nW2p8fGtdKHRoaXMuc3RhdGUsaSwwLDEsdGhpcy5vcHRpb25zLmR1
cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0
KSp0aGlzLnBvcyx0aGlzLnVwZGF0ZSgpO3JldHVybiEwfX0sZC5leHRlbmQoZC5m
eCx7dGljazpmdW5jdGlvbigpe3ZhciBhPWQudGltZXJzO2Zvcih2YXIgYj0wO2I8
YS5sZW5ndGg7YisrKWFbYl0oKXx8YS5zcGxpY2UoYi0tLDEpO2EubGVuZ3RofHxk
LmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50
ZXJ2YWwoY2EpLGNhPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2Rl
ZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Quc3R5bGUoYS5l
bGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxl
bS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxl
W2EucHJvcF09KGEucHJvcD09PSJ3aWR0aCJ8fGEucHJvcD09PSJoZWlnaHQiP01h
dGgubWF4KDAsYS5ub3cpOmEubm93KSthLnVuaXQ6YS5lbGVtW2EucHJvcF09YS5u
b3d9fX0pLGQuZXhwciYmZC5leHByLmZpbHRlcnMmJihkLmV4cHIuZmlsdGVycy5h
bmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZC5ncmVwKGQudGltZXJzLGZ1bmN0
aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGNlPS9edCg/
OmFibGV8ZHxoKSQvaSxjZj0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5n
Q2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9kLmZuLm9mZnNldD1mdW5j
dGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKGIpe2Qub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8
IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3Vt
ZW50LmJvZHkpcmV0dXJuIGQub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChlKXt9dmFyIGY9Yi5vd25lckRv
Y3VtZW50LGc9Zi5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFkLmNvbnRhaW5zKGcs
YikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6
MH07dmFyIGg9Zi5ib2R5LGk9Y2coZiksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRU
b3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlP
ZmZzZXR8fGQuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xs
VG9wLG09aS5wYWdlWE9mZnNldHx8ZC5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9s
bExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0
dXJue3RvcDpuLGxlZnQ6b319OmQuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBi
PXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Qub2Zm
c2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVu
dClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJu
IGQub2Zmc2V0LmJvZHlPZmZzZXQoYik7ZC5vZmZzZXQuaW5pdGlhbGl6ZSgpO3Zh
ciBjLGU9Yi5vZmZzZXRQYXJlbnQsZj1iLGc9Yi5vd25lckRvY3VtZW50LGg9Zy5k
b2N1bWVudEVsZW1lbnQsaT1nLmJvZHksaj1nLmRlZmF1bHRWaWV3LGs9aj9qLmdl
dENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZSxsPWIub2Zmc2V0
VG9wLG09Yi5vZmZzZXRMZWZ0O3doaWxlKChiPWIucGFyZW50Tm9kZSkmJmIhPT1p
JiZiIT09aCl7aWYoZC5vZmZzZXQuc3VwcG9ydHNGaXhlZFBvc2l0aW9uJiZrLnBv
c2l0aW9uPT09ImZpeGVkIilicmVhaztjPWo/ai5nZXRDb21wdXRlZFN0eWxlKGIs
bnVsbCk6Yi5jdXJyZW50U3R5bGUsbC09Yi5zY3JvbGxUb3AsbS09Yi5zY3JvbGxM
ZWZ0LGI9PT1lJiYobCs9Yi5vZmZzZXRUb3AsbSs9Yi5vZmZzZXRMZWZ0LGQub2Zm
c2V0LmRvZXNOb3RBZGRCb3JkZXImJighZC5vZmZzZXQuZG9lc0FkZEJvcmRlckZv
clRhYmxlQW5kQ2VsbHN8fCFjZS50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNl
RmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRl
ckxlZnRXaWR0aCl8fDApLGY9ZSxlPWIub2Zmc2V0UGFyZW50KSxkLm9mZnNldC5z
dWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUmJmMub3ZlcmZsb3ch
PT0idmlzaWJsZSImJihsKz1wYXJzZUZsb2F0KGMuYm9yZGVyVG9wV2lkdGgpfHww
LG0rPXBhcnNlRmxvYXQoYy5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxrPWN9aWYoay5w
b3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGsucG9zaXRpb249PT0ic3RhdGljIilsKz1p
Lm9mZnNldFRvcCxtKz1pLm9mZnNldExlZnQ7ZC5vZmZzZXQuc3VwcG9ydHNGaXhl
ZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGgu
c2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQs
aS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGQub2Zmc2V0PXtp
bml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9Yy5ib2R5LGI9Yy5jcmVhdGVFbGVt
ZW50KCJkaXYiKSxlLGYsZyxoLGk9cGFyc2VGbG9hdChkLmNzcyhhLCJtYXJnaW5U
b3AiKSl8fDAsaj0iPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7
bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7
d2lkdGg6MXB4O2hlaWdodDoxcHg7Jz48ZGl2PjwvZGl2PjwvZGl2Pjx0YWJsZSBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2Jv
cmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDox
cHg7JyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+PC90
ZD48L3RyPjwvdGFibGU+IjtkLmV4dGVuZChiLnN0eWxlLHtwb3NpdGlvbjoiYWJz
b2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxib3JkZXI6MCx3aWR0aDoiMXB4
IixoZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pLGIuaW5uZXJIVE1M
PWosYS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpLGU9Yi5maXJzdENoaWxk
LGY9ZS5maXJzdENoaWxkLGg9ZS5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0
Q2hpbGQsdGhpcy5kb2VzTm90QWRkQm9yZGVyPWYub2Zmc2V0VG9wIT09NSx0aGlz
LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPWgub2Zmc2V0VG9wPT09NSxm
LnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZi5zdHlsZS50b3A9IjIwcHgiLHRoaXMu
c3VwcG9ydHNGaXhlZFBvc2l0aW9uPWYub2Zmc2V0VG9wPT09MjB8fGYub2Zmc2V0
VG9wPT09MTUsZi5zdHlsZS5wb3NpdGlvbj1mLnN0eWxlLnRvcD0iIixlLnN0eWxl
Lm92ZXJmbG93PSJoaWRkZW4iLGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix0
aGlzLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1mLm9mZnNl
dFRvcD09PS01LHRoaXMuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9
YS5vZmZzZXRUb3AhPT1pLGEucmVtb3ZlQ2hpbGQoYiksYT1iPWU9Zj1nPWg9bnVs
bCxkLm9mZnNldC5pbml0aWFsaXplPWQubm9vcH0sYm9keU9mZnNldDpmdW5jdGlv
bihhKXt2YXIgYj1hLm9mZnNldFRvcCxjPWEub2Zmc2V0TGVmdDtkLm9mZnNldC5p
bml0aWFsaXplKCksZC5vZmZzZXQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlP
ZmZzZXQmJihiKz1wYXJzZUZsb2F0KGQuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxj
Kz1wYXJzZUZsb2F0KGQuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDApO3JldHVybnt0
b3A6YixsZWZ0OmN9fSxzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWQu
Y3NzKGEsInBvc2l0aW9uIik7ZT09PSJzdGF0aWMiJiYoYS5zdHlsZS5wb3NpdGlv
bj0icmVsYXRpdmUiKTt2YXIgZj1kKGEpLGc9Zi5vZmZzZXQoKSxoPWQuY3NzKGEs
InRvcCIpLGk9ZC5jc3MoYSwibGVmdCIpLGo9ZT09PSJhYnNvbHV0ZSImJmQuaW5B
cnJheSgiYXV0byIsW2gsaV0pPi0xLGs9e30sbD17fSxtLG47aiYmKGw9Zi5wb3Np
dGlvbigpKSxtPWo/bC50b3A6cGFyc2VJbnQoaCwxMCl8fDAsbj1qP2wubGVmdDpw
YXJzZUludChpLDEwKXx8MCxkLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMs
ZykpLGIudG9wIT1udWxsJiYoay50b3A9Yi50b3AtZy50b3ArbSksYi5sZWZ0IT1u
dWxsJiYoay5sZWZ0PWIubGVmdC1nLmxlZnQrbiksInVzaW5nImluIGI/Yi51c2lu
Zy5jYWxsKGEsayk6Zi5jc3Moayl9fSxkLmZuLmV4dGVuZCh7cG9zaXRpb246ZnVu
Y3Rpb24oKXtpZighdGhpc1swXSlyZXR1cm4gbnVsbDt2YXIgYT10aGlzWzBdLGI9
dGhpcy5vZmZzZXRQYXJlbnQoKSxjPXRoaXMub2Zmc2V0KCksZT1jZi50ZXN0KGJb
MF0ubm9kZU5hbWUpP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCk7Yy50b3AtPXBh
cnNlRmxvYXQoZC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMubGVmdC09cGFyc2VG
bG9hdChkLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwLGUudG9wKz1wYXJzZUZsb2F0
KGQuY3NzKGJbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLGUubGVmdCs9cGFyc2VG
bG9hdChkLmNzcyhiWzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDA7cmV0dXJue3Rv
cDpjLnRvcC1lLnRvcCxsZWZ0OmMubGVmdC1lLmxlZnR9fSxvZmZzZXRQYXJlbnQ6
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlz
Lm9mZnNldFBhcmVudHx8Yy5ib2R5O3doaWxlKGEmJighY2YudGVzdChhLm5vZGVO
YW1lKSYmZC5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKSlhPWEub2Zmc2V0
UGFyZW50O3JldHVybiBhfSl9fSksZC5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0
aW9uKGEsYyl7dmFyIGU9InNjcm9sbCIrYztkLmZuW2VdPWZ1bmN0aW9uKGMpe3Zh
ciBmPXRoaXNbMF0sZztpZighZilyZXR1cm4gbnVsbDtpZihjIT09YilyZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zz1jZyh0aGlzKSxnP2cuc2Nyb2xsVG8oYT9k
KGcpLnNjcm9sbExlZnQoKTpjLGE/YzpkKGcpLnNjcm9sbFRvcCgpKTp0aGlzW2Vd
PWN9KTtnPWNnKGYpO3JldHVybiBnPyJwYWdlWE9mZnNldCJpbiBnP2dbYT8icGFn
ZVlPZmZzZXQiOiJwYWdlWE9mZnNldCJdOmQuc3VwcG9ydC5ib3hNb2RlbCYmZy5k
b2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZV18fGcuZG9jdW1lbnQuYm9keVtlXTpm
W2VdfX0pLGQuZWFjaChbIkhlaWdodCIsIldpZHRoIl0sZnVuY3Rpb24oYSxjKXt2
YXIgZT1jLnRvTG93ZXJDYXNlKCk7ZC5mblsiaW5uZXIiK2NdPWZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXNbMF0/cGFyc2VGbG9hdChkLmNzcyh0aGlzWzBdLGUsInBhZGRp
bmciKSk6bnVsbH0sZC5mblsib3V0ZXIiK2NdPWZ1bmN0aW9uKGEpe3JldHVybiB0
aGlzWzBdP3BhcnNlRmxvYXQoZC5jc3ModGhpc1swXSxlLGE/Im1hcmdpbiI6ImJv
cmRlciIpKTpudWxsfSxkLmZuW2VdPWZ1bmN0aW9uKGEpe3ZhciBmPXRoaXNbMF07
aWYoIWYpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGQuaXNGdW5jdGlvbihh
KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWQodGhpcyk7Y1tl
XShhLmNhbGwodGhpcyxiLGNbZV0oKSkpfSk7aWYoZC5pc1dpbmRvdyhmKSl7dmFy
IGc9Zi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY107cmV0dXJu
IGYuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8Zi5kb2N1
bWVudC5ib2R5WyJjbGllbnQiK2NdfHxnfWlmKGYubm9kZVR5cGU9PT05KXJldHVy
biBNYXRoLm1heChmLmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitjXSxmLmJvZHlb
InNjcm9sbCIrY10sZi5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIrY10sZi5ib2R5
WyJvZmZzZXQiK2NdLGYuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK2NdKTtpZihh
PT09Yil7dmFyIGg9ZC5jc3MoZixlKSxpPXBhcnNlRmxvYXQoaCk7cmV0dXJuIGQu
aXNOYU4oaSk/aDppfXJldHVybiB0aGlzLmNzcyhlLHR5cGVvZiBhPT09InN0cmlu
ZyI/YTphKyJweCIpfX0pLGEualF1ZXJ5PWEuJD1kfSkod2luZG93KTsKCgp2YXIK
CSAgJEhUTUwJPSBqUXVlcnkoICdIVE1MJyApCgksICRXSU4JPSBqUXVlcnkoIHdp
bmRvdyApCgksICRET0MJPSBqUXVlcnkoIGRvY3VtZW50ICkKCSwgJEhFQUQJPSBq
UXVlcnkoICdIRUFEJyApCgksICRCT0RZCT0galF1ZXJ5KCBkb2N1bWVudC5ib2R5
ICkKOwoKKGZ1bmN0aW9uICh1bmRlZikKewoJdmFyIHJsID0gL15ccysvLCBycyA9
IC9cUy87CgoJLy8gRmFzdGVyIHRyaW0KCWpRdWVyeS50cmltID0gZnVuY3Rpb24g
KHN0cikKCXsKCQlpZiggc3RyID09PSB1bmRlZiB8fCBzdHIgPT09IG51bGwgKSBy
ZXR1cm4gJyc7CgoJCXN0ciA9IChzdHIrJycpLnJlcGxhY2UocmwsICcnKTsKCgkJ
Zm9yKCB2YXIgaSA9IHN0ci5sZW5ndGggLSAxOyBpID49IDA7IGktLSApCgkJewoJ
CQlpZiggcnMudGVzdChzdHIuY2hhckF0KGkpKSApCgkJCXsKCQkJCXN0cgk9IHN0
ci5zdWJzdHJpbmcoMCwgaSArIDEpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgoJCXJl
dHVybiBzdHI7Cgl9Owp9KSgpOwogCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9q
c0NvcmUvanF1ZXJ5L2pxdWVyeS5qcyBlbmQKCi8vIEBidWlsZC1za2lwCgovKioK
ICogQGF1dGhvcglSdWJhWGEJCTx0cmFzaEBydWJheGEub3JnPgogKiBAY3JlYXRl
ZAkyMDA3LTExLTA3IDIwOjQ1CiAqLwoKLypnbG9iYWwganNQbHVnaW5zKi8KdmFy
CgkgIFJ1YmFYYQkJPSB7fQkvLyB1bmlxIG5hbWVzcGFjZQoJLCBqc0NvcmUJCT0g
eyB2ZXJzaW9uOiAzLCBidWlsZDogd2luZG93LmpzQnVpbGQgfQkvLyB0bXAgT2Jq
ZWN0CgksIHJldHVyblRydWUJPSBmdW5jdGlvbigpeyByZXR1cm4gdHJ1ZTsgfQoJ
LCByZXR1cm5GYWxzZQk9IGZ1bmN0aW9uKCl7IHJldHVybiBmYWxzZTsgfQoJLCBf
YXJyYXlfCQk9IEFycmF5LnByb3RvdHlwZQoJLCBfam9pbl8JCT0gX2FycmF5Xy5q
b2luCgksIF9zbGljZV8JCT0gX2FycmF5Xy5zbGljZQo7CgooZnVuY3Rpb24gKHJv
b3QpewoJdmFyIERSID0gW107CgoJcm9vdC4kUgkJCT0gZnVuY3Rpb24oci8qUmVx
dWlyZUZpbGVzKi8sIGMvKkNhbGxiYWNrKi8peyByb290LmRvbVJlYWR5KGZ1bmN0
aW9uKCl7anNMb2FkZXIucmVxdWlyZShyLCBjKTt9KTsgfTsKCXJvb3QuaXNEb21S
ZWFkeQk9IGZhbHNlOwoJcm9vdC5kb21SZWFkeQk9IGZ1bmN0aW9uKGYvKkZ1bmN0
aW9uKi8pe2lmKCBmICl7cm9vdC5pc0RvbVJlYWR5P2YoKTpyb290Ll9kckxlbmd0
aD1EUi5wdXNoKGYpO31lbHNle2pzQ29yZS5yZWFkeSgpO3Jvb3QuaXNEb21SZWFk
eT10cnVlO2Zvcih2YXIgaT0wO0RSW2ldO2krKylEUltpXSgpO319Owp9KSh3aW5k
b3cpOwoKCihmdW5jdGlvbiAoX3NsaWNlLCBfZm4pewoJaWYoICFfZm4uYmluZCAp
IF9mbi5iaW5kID0gZnVuY3Rpb24gKFQpewoJCXZhciBhID0gX3NsaWNlLmNhbGwo
YXJndW1lbnRzLCAxKSwgUyA9IHRoaXM7CgkJcmV0dXJuIGZ1bmN0aW9uICgpeyBy
ZXR1cm4gUy5hcHBseShULCBhLmNvbmNhdChfc2xpY2UuY2FsbChhcmd1bWVudHMp
KSk7IH07Cgl9Owp9KShBcnJheS5wcm90b3R5cGUuc2xpY2UsIEZ1bmN0aW9uLnBy
b3RvdHlwZSk7CgoKCnZhcgoJICBIVE1MCT0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ0hUTUwnKVswXQoJLCBIRUFECT0gSFRNTC5maXJzdENoaWxkCgks
IEJPRFkJPSBudWxsCgksIHVuZGVmLCB1bmRlZmluZWQKCSwgZGVmaW5lZCA9IGZ1
bmN0aW9uICh2YWwsIGRlZil7CgkJCQkJcmV0dXJuCSh0eXBlb2YgZGVmID09ICd1
bmRlZmluZWQnKQoJCQkJCQkJCT8gKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcp
CgkJCQkJCQkJOiAodHlwZW9mIHZhbCA9PSAndW5kZWZpbmVkJyA/IGRlZiA6IHZh
bCkKCQkJCQkJCTsKCQkJCX0KOwoKCi8vIEpTT04udW5zZXJpYWxpemUKdmFyIHVu
c2VyaWFsaXplCT0gZnVuY3Rpb24odi8qbWl4ZWQqLywgZC8qZGVjb2RlKi8pewoJ
aWYoIHR5cGVvZiB2ID09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB2ICE9ICdzdHJp
bmcnIHx8ICF2ICkgcmV0dXJuCXY7CgllbHNlIGlmKCBkICkgdiA9IGRlY29kZVVS
SUNvbXBvbmVudCh2KTsKCglpZiggd2luZG93LkpTT04gJiYgMCApCXJldHVybglK
U09OLnBhcnNlKCB2ICk7CgllbHNlIGlmKCAkQi5nZWNrbyApCXJldHVybgluZXcg
RnVuY3Rpb24oICJyZXR1cm4gIiArIHYgKSgpOwoJZWxzZQkJCQlyZXR1cm4JZXZh
bCgiKCIgKyB2ICsgIikiKTsKfTsKCgovLyBAYWxpYXMgdXNlckFnZW50CndpbmRv
dy51c2VyQWdlbnQJPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7
CnZhciBiVmVyCQkJPSAodXNlckFnZW50Lm1hdGNoKC8uKyg/OnJ2fGl0fHJhfGll
KVtcLzogXShbXGQuXSspLykgfHwgW10pWzFdOwoKCi8qKiBAbmFtZXNwYWNlIHdp
bmRvdy5JU19MT0NBTCAqLwoKLyoqCiAqIGpzQ29yZQogKi8KdmFyIGpzQ29yZSA9
IHsKCgkvLyA8IEJyb3dzZXJzCglicm93c2VyOiB7CgkJICB1c2VyQWdlbnQ6CXVz
ZXJBZ2VudAoJCSwgdmVyOgkJCXBhcnNlSW50KGJWZXIpCgkJLCB2ZXJzaW9uOgkJ
YlZlcgoJCSwgc2FmYXJpOgkJL3dlYmtpdC8udGVzdCh1c2VyQWdlbnQpCgkJLCB3
ZWJraXQ6CQkvd2Via2l0Ly50ZXN0KHVzZXJBZ2VudCkKCQksIG9wZXJhOgkJL29w
ZXJhLy50ZXN0KHVzZXJBZ2VudCkKCQksIG1zaWU6CQkJL21zaWUvaS50ZXN0KHVz
ZXJBZ2VudCkKCQksIG1vemlsbGE6CQkvbW96aWxsYS8udGVzdCh1c2VyQWdlbnQp
ICYmICEvKGNvbXBhdGlibGV8d2Via2l0KS8udGVzdCh1c2VyQWdlbnQpCgkJLCBn
ZWNrbzoJCS9HZWNrb1wvLy50ZXN0KHVzZXJBZ2VudCkKCX0sCgkvLyBCcm93c2Vy
cyA+CgoKCS8vIDwgcHJvcGVydGllcwoJRjoJCQkJZnVuY3Rpb24gKGEpeyByZXR1
cm4gYTsgfSwKCXJhbmRvbToJCQlNYXRoLnJhbmRvbSgpLAoJdGltZToJCQkrbmV3
IERhdGUoKSwKCXZlcnNpb246CQkyLAoJbG9jYWw6CQkJISF3aW5kb3cuSVNfTE9D
QUwsCglsb2FkZWQ6CQkJZmFsc2UsCglkaXNhYmxlZDoJCWZhbHNlLAoJYnVpbGQ6
CQkJanNDb3JlLmJ1aWxkLAoJY3VycmVudElkOgkJMCwKCXVubG9hZENvbmZpcm06
CTAsCglfd0xpc3Q6CQkJe30sCgllbWFpbFJlZ0V4cDoJL14uK0AuK1wuLnsyLDR9
JC9pLAoJc2F2ZU1vZGU6CQlmYWxzZSwKCS8vIHByb3BlcnRpZXMgPgoKCglnZXRO
ZXh0SWQ6CWZ1bmN0aW9uICgpewlyZXR1cm4JanNDb3JlLmdldENvdW50ZXIoKTsg
fSwKCWdldENvdW50ZXI6CWZ1bmN0aW9uICgpewlyZXR1cm4JanNDb3JlLmN1cnJl
bnRJZCsrOyB9LAoJZ2V0VW5pcUlkOglmdW5jdGlvbiAobyl7CXJldHVybglvID8g
KG8udW5pcUlkID8gby51bmlxSWQgOiAoby51bmlxSWQgPSB0aGlzLmdldFVuaXFJ
ZCgpKSkgOiB0aGlzLnRpbWUgKyB0aGlzLmdldENvdW50ZXIoKTsgfSwKCWdldFRp
bWVyOglmdW5jdGlvbiAoKXsJcmV0dXJuCShuZXcgRGF0ZSgpKS5nZXRUaW1lKCkg
LSB0aGlzLnRpbWU7IH0sCgoKCSQ6IGZ1bmN0aW9uIChpZCl7CgkJdmFyCXIgPSB0
eXBlb2YgaWQgPT0gJ3N0cmluZycgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChp
ZC5yZXBsYWNlKC9eIy8sICcnKSkgOiAoKGlkICYmIGlkLmpxdWVyeSkgPyBpZFsw
XSA6IGlkKTsKCQlyZXR1cm4JanNDb3JlLnNhdmVNb2RlICYmIChyID09PSBudWxs
IHx8IHIgPT09IHVuZGVmaW5lZCkgPyB7fSA6IHI7Cgl9LAoKCglhcHBseTogZnVu
Y3Rpb24gKGN0eCwgZm4sIGEpewoJCXZhciByOwoKCQlzd2l0Y2goIGEubGVuZ3Ro
ICl7CgkJCWNhc2UgMToJciA9IGN0eFtmbl0oYVswXSk7IGJyZWFrOwoJCQljYXNl
IDI6CXIgPSBjdHhbZm5dKGFbMF0sIGFbMV0pOyBicmVhazsKCQkJY2FzZSAzOgly
ID0gY3R4W2ZuXShhWzBdLCBhWzFdLCBhWzJdKTsgYnJlYWs7CgkJCWNhc2UgNDoJ
ciA9IGN0eFtmbl0oYVswXSwgYVsxXSwgYVsyXSwgYVszXSk7IGJyZWFrOwoJCQlj
YXNlIDU6CXIgPSBjdHhbZm5dKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0p
OyBicmVhazsKCQkJY2FzZSA2OglyID0gY3R4W2ZuXShhWzBdLCBhWzFdLCBhWzJd
LCBhWzNdLCBhWzRdLCBhWzVdKTsgYnJlYWs7CgkJCWNhc2UgNzoJciA9IGN0eFtm
bl0oYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSk7IGJy
ZWFrOwoJCQlkZWZhdWx0OiByID0gY3R4W2ZuXSgpOwoJCX0KCgkJcmV0dXJuCXI7
Cgl9LAoKCgljcmMzMjogZnVuY3Rpb24gKHN0ci8qU3RyaW5nKi8sIGMvKkludCov
KXsKCQl2YXIgeCA9IDAsIHkgPSAwLCBjcmMgPSAwIF4gKC0xKSwgdGFibGUgPSAi
MDAwMDAwMDAgNzcwNzMwOTYgRUUwRTYxMkMgOTkwOTUxQkEgMDc2REM0MTkgNzA2
QUY0OEYgRTk2M0E1MzUgOUU2NDk1QTMgMEVEQjg4MzIgNzlEQ0I4QTQgRTBENUU5
MUUgOTdEMkQ5ODggMDlCNjRDMkIgN0VCMTdDQkQgRTdCODJEMDcgOTBCRjFEOTEg
MURCNzEwNjQgNkFCMDIwRjIgRjNCOTcxNDggODRCRTQxREUgMUFEQUQ0N0QgNkRE
REU0RUIgRjRENEI1NTEgODNEMzg1QzcgMTM2Qzk4NTYgNjQ2QkE4QzAgRkQ2MkY5
N0EgOEE2NUM5RUMgMTQwMTVDNEYgNjMwNjZDRDkgRkEwRjNENjMgOEQwODBERjUg
M0I2RTIwQzggNEM2OTEwNUUgRDU2MDQxRTQgQTI2NzcxNzIgM0MwM0U0RDEgNEIw
NEQ0NDcgRDIwRDg1RkQgQTUwQUI1NkIgMzVCNUE4RkEgNDJCMjk4NkMgREJCQkM5
RDYgQUNCQ0Y5NDAgMzJEODZDRTMgNDVERjVDNzUgRENENjBEQ0YgQUJEMTNENTkg
MjZEOTMwQUMgNTFERTAwM0EgQzhENzUxODAgQkZEMDYxMTYgMjFCNEY0QjUgNTZC
M0M0MjMgQ0ZCQTk1OTkgQjhCREE1MEYgMjgwMkI4OUUgNUYwNTg4MDggQzYwQ0Q5
QjIgQjEwQkU5MjQgMkY2RjdDODcgNTg2ODRDMTEgQzE2MTFEQUIgQjY2NjJEM0Qg
NzZEQzQxOTAgMDFEQjcxMDYgOThEMjIwQkMgRUZENTEwMkEgNzFCMTg1ODkgMDZC
NkI1MUYgOUZCRkU0QTUgRThCOEQ0MzMgNzgwN0M5QTIgMEYwMEY5MzQgOTYwOUE4
OEUgRTEwRTk4MTggN0Y2QTBEQkIgMDg2RDNEMkQgOTE2NDZDOTcgRTY2MzVDMDEg
NkI2QjUxRjQgMUM2QzYxNjIgODU2NTMwRDggRjI2MjAwNEUgNkMwNjk1RUQgMUIw
MUE1N0IgODIwOEY0QzEgRjUwRkM0NTcgNjVCMEQ5QzYgMTJCN0U5NTAgOEJCRUI4
RUEgRkNCOTg4N0MgNjJERDFEREYgMTVEQTJENDkgOENEMzdDRjMgRkJENDRDNjUg
NERCMjYxNTggM0FCNTUxQ0UgQTNCQzAwNzQgRDRCQjMwRTIgNEFERkE1NDEgM0RE
ODk1RDcgQTREMUM0NkQgRDNENkY0RkIgNDM2OUU5NkEgMzQ2RUQ5RkMgQUQ2Nzg4
NDYgREE2MEI4RDAgNDQwNDJENzMgMzMwMzFERTUgQUEwQTRDNUYgREQwRDdDQzkg
NTAwNTcxM0MgMjcwMjQxQUEgQkUwQjEwMTAgQzkwQzIwODYgNTc2OEI1MjUgMjA2
Rjg1QjMgQjk2NkQ0MDkgQ0U2MUU0OUYgNUVERUY5MEUgMjlEOUM5OTggQjBEMDk4
MjIgQzdEN0E4QjQgNTlCMzNEMTcgMkVCNDBEODEgQjdCRDVDM0IgQzBCQTZDQUQg
RURCODgzMjAgOUFCRkIzQjYgMDNCNkUyMEMgNzRCMUQyOUEgRUFENTQ3MzkgOURE
Mjc3QUYgMDREQjI2MTUgNzNEQzE2ODMgRTM2MzBCMTIgOTQ2NDNCODQgMEQ2RDZB
M0UgN0E2QTVBQTggRTQwRUNGMEIgOTMwOUZGOUQgMEEwMEFFMjcgN0QwNzlFQjEg
RjAwRjkzNDQgODcwOEEzRDIgMUUwMUYyNjggNjkwNkMyRkUgRjc2MjU3NUQgODA2
NTY3Q0IgMTk2QzM2NzEgNkU2QjA2RTcgRkVENDFCNzYgODlEMzJCRTAgMTBEQTdB
NUEgNjdERDRBQ0MgRjlCOURGNkYgOEVCRUVGRjkgMTdCN0JFNDMgNjBCMDhFRDUg
RDZENkEzRTggQTFEMTkzN0UgMzhEOEMyQzQgNEZERkYyNTIgRDFCQjY3RjEgQTZC
QzU3NjcgM0ZCNTA2REQgNDhCMjM2NEIgRDgwRDJCREEgQUYwQTFCNEMgMzYwMzRB
RjYgNDEwNDdBNjAgREY2MEVGQzMgQTg2N0RGNTUgMzE2RThFRUYgNDY2OUJFNzkg
Q0I2MUIzOEMgQkM2NjgzMUEgMjU2RkQyQTAgNTI2OEUyMzYgQ0MwQzc3OTUgQkIw
QjQ3MDMgMjIwMjE2QjkgNTUwNTI2MkYgQzVCQTNCQkUgQjJCRDBCMjggMkJCNDVB
OTIgNUNCMzZBMDQgQzJEN0ZGQTcgQjVEMENGMzEgMkNEOTlFOEIgNUJERUFFMUQg
OUI2NEMyQjAgRUM2M0YyMjYgNzU2QUEzOUMgMDI2RDkzMEEgOUMwOTA2QTkgRUIw
RTM2M0YgNzIwNzY3ODUgMDUwMDU3MTMgOTVCRjRBODIgRTJCODdBMTQgN0JCMTJC
QUUgMENCNjFCMzggOTJEMjhFOUIgRTVENUJFMEQgN0NEQ0VGQjcgMEJEQkRGMjEg
ODZEM0QyRDQgRjFENEUyNDIgNjhEREIzRjggMUZEQTgzNkUgODFCRTE2Q0QgRjZC
OTI2NUIgNkZCMDc3RTEgMThCNzQ3NzcgODgwODVBRTYgRkYwRjZBNzAgNjYwNjNC
Q0EgMTEwMTBCNUMgOEY2NTlFRkYgRjg2MkFFNjkgNjE2QkZGRDMgMTY2Q0NGNDUg
QTAwQUUyNzggRDcwREQyRUUgNEUwNDgzNTQgMzkwM0IzQzIgQTc2NzI2NjEgRDA2
MDE2RjcgNDk2OTQ3NEQgM0U2RTc3REIgQUVEMTZBNEEgRDlENjVBREMgNDBERjBC
NjYgMzdEODNCRjAgQTlCQ0FFNTMgREVCQjlFQzUgNDdCMkNGN0YgMzBCNUZGRTkg
QkRCREYyMUMgQ0FCQUMyOEEgNTNCMzkzMzAgMjRCNEEzQTYgQkFEMDM2MDUgQ0RE
NzA2OTMgNTRERTU3MjkgMjNEOTY3QkYgQjM2NjdBMkUgQzQ2MTRBQjggNUQ2ODFC
MDIgMkE2RjJCOTQgQjQwQkJFMzcgQzMwQzhFQTEgNUEwNURGMUIgMkQwMkVGOEQi
OwoKCQlmb3IoIHZhciBpID0gMCwgaVRvcCA9IHN0ci5sZW5ndGg7IGkgPCBpVG9w
OyBpKysgKXsKCQkJeQk9ICggY3JjIF4gc3RyLmNoYXJDb2RlQXQoIGkgKSApICYg
MHhGRjsKCQkJeAk9ICIweCIgKyB0YWJsZS5zdWJzdHIoIHkgKiA5LCA4ICk7CgkJ
CWNyYwk9ICggY3JjID4+PiA4ICkgXiB4OwoJCX0KCgkJcmV0dXJuIGNyYyBeICgt
MSkgKyAnJzsKCgl9LAoKCgllYWNoOiBmdW5jdGlvbiAoby8qT2JqZWN0Ki8sIGZu
LypGdW5jdGlvbiovLCBhLyppc0FycmF5Ki8pewoJCWlmKCBvICl7CgkJCWlmKCAo
by5jb25zdHJ1Y3RvciA9PSBBcnJheSkgfHwgYSApCgkJCQlmb3IoIHZhciBpID0g
MCwgbiA9IG8ubGVuZ3RoOyBpIDwgbjsgaSs9MSApIGZuKGksIG9baV0sIG8pOwoJ
CQllbHNlCgkJCQlmb3IoIHZhciBpIGluIG8gKSBmbihpLCBvW2ldLCBvKTsKCQl9
Cgl9LAoKCglleHRlbmQ6IGZ1bmN0aW9uIChkLypkc3RPYmplY3QqLywgcy8qc3Jj
T2JqZWN0Ki8pewoJCXZhciB2LCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGgs
IHAsIGE7CgkJZm9yKCA7IGkgPCBuOyBpKysgKSBpZiggYSA9IGFyZ3VtZW50c1tp
XSApCgkJCWZvciggcCBpbiBhICl7CgkJCQlpZiggKCh2ID0gYVtwXSkgIT0gbnVs
bCkgJiYgKHR5cGVvZiB2ICE9ICd1bmRlZmluZWQnKSApewoJCQkJCWRbcF0JPSB2
OwoJCQkJfQoJCQl9CgkJdgk9IGEgPSBudWxsOwoJCXJldHVybglkOwoJfSwKCglj
bG9uZU9iamVjdDogZnVuY3Rpb24gKG8vKk9iamVjdCovKXsKCQl2YXIgYwk9IHt9
OwoKCQlmb3IoIHZhciBrIGluIG8gKXsKCQkJY1trXQk9IG9ba107CgkJfQoKCQly
ZXR1cm4JYzsKCX0sCgoJZGVsZWdhdGU6IGZ1bmN0aW9uIChjdHgvKk9iamVjdCov
LCBmbi8qTWV0aG9kKi8pewoJCXZhciBjYSA9IF9zbGljZV8uY2FsbChhcmd1bWVu
dHMsIDIpOwoJCWlmKCB0eXBlb2YoZm4pID09ICdzdHJpbmcnICkgZm4gPSBjdHhb
Zm5dOwoKCQlyZXR1cm4JZnVuY3Rpb24gKCl7IHJldHVybglmbi5hcHBseShjdHgs
IGNhLmNvbmNhdCggX3NsaWNlXy5jYWxsKGFyZ3VtZW50cywgMCkgKSk7IH0KCX0s
CgoKCWVsbTogZnVuY3Rpb24gKGUvKk5vZGUqLywgYS8qQXR0cmlidXRlKi8sIHYv
KlZhbHVlKi8pLypOb2RlIE9SIEZhbHNlKi97CgkJaWYoIGUgKXsKCQkJaWYoIGUu
anF1ZXJ5ICkgCQkJCQllCT0gZVswXTsJLy8gaXMgalF1ZXJ5CgkJCWlmKCBlLnRh
cmdldCB8fCBlLnNyY0VsZW1lbnQgKQllCT0gKGUudGFyZ2V0IHx8IGUuc3JjRWxl
bWVudCk7CS8vIGlzIEV2ZW50CgkJCWlmKCAhYSB8fCAoZSA9PSBkb2N1bWVudC5i
b2R5KSB8fCAhZSApCXJldHVybgllOwkvLyBpcyBCb2R5CgoJCQl2YXIgX2EsIF92
LCBfciA9IHYgJiYgdi50ZXN0LyppcyByZWdleHAqLzsKCgkJCWRvCgkJCXsKCQkJ
CV92CT0gdHlwZW9mIHYgIT0gJ3VuZGVmaW5lZCc7CgkJCQlfYQk9IGVbYV0gfHwg
KCgnZ2V0QXR0cmlidXRlJyBpbiBlKSAmJiBlLmdldEF0dHJpYnV0ZShhKSkgfHwg
Jyc7CgoJCQkJaWYoCgkJCQkJICAgKF92ICYmICgoX2EgPT0gdikgfHwgKF9hID09
IHYpIHx8IChfciAmJiB2LnRlc3QoX2EpKSkpCgkJCQkJfHwgKCFfdiAmJiAoKF9h
ICE9PSAnJykgJiYgKF9hICE9PSBudWxsKSkpCgkJCQkpCgkJCQl7CgkJCQkJcmV0
dXJuCWU7CgkJCQl9CgkJCX0KCQkJd2hpbGUoIGUgJiYgKGUgPSBlLnBhcmVudE5v
ZGUpICYmIChlICE9PSBkb2N1bWVudC5ib2R5KSApOwoJCX0KCgkJcmV0dXJuCWZh
bHNlOwoJfSwKCgloaXRUZXN0OiBmdW5jdGlvbiAoeC8qRmxvYXQqLywgeS8qRmxv
YXQqLywgYy8qT2JqZWN0Ki8pCgl7CgkJcmV0dXJuICh4ID49IGMueDEpICYmIChj
LnkxIDw9IHkpICYmICh4IDw9IGMueDIpICYmIChjLnkyID49IHkpOwoJfSwKCgl3
YWl0OiBmdW5jdGlvbiAody8qQXJyYXkqLywgYy8qQ2FsbGJhY2sqLyl7CgkJaWYo
ICFjIHx8IGMuY29uc3RydWN0b3IgIT0gRnVuY3Rpb24gKSB0aHJvdyBuZXcgRXJy
b3IoJ1NlY29uZCBhcmd1bWVudCBtdXN0IGJlIGZ1bmN0aW9uIGluIGpzQ29yZS53
YWl0IG9yIGpzQ29yZS5yZXF1aXJlJyk7CgkJaWYoIHR5cGVvZiB3ICA9PSAnc3Ry
aW5nJyApCXcgPSB3LnNwbGl0KCcsJyk7CgoJCXZhcgoJCQkgIHcJPSBBcnJheS5m
aWx0ZXIodywgZnVuY3Rpb24gKHYpCgkJCSAgCQl7CgkJCQkJCWlmKCAhdGhpcy5f
d0xpc3Rbdj12LnRvTG93ZXJDYXNlKCldICkgdGhpcy5fd0xpc3Rbdl0gPSB7IHI6
IDAsIGw6IFtdIH07CgkJCQkJCXJldHVybgkhdGhpcy5fd0xpc3Rbdl0ucjsKCQkJ
CQl9LCB0aGlzKQoJCQksIGkJCT0gMAoJCQksIF9pCT0gMAoJCQksIF9jCT0gdy5s
ZW5ndGgKCQkJLCBuICwgcCwgd2MKCQk7CgoJCS8vdmFyIHMgPSB3LmpvaW4oJywn
KTsKCQkvL2RlYnVnLmxvZyhzKTsKCgkJaWYoICFfYyApCgkJewoJCQljKCk7CgkJ
CXJldHVybjsKCQl9CgkJZWxzZSB3YyA9IGZ1bmN0aW9uKG8pCgkJewoJCQlpZigg
KytfaSA+PSBfYyApCgkJCXsKCQkJCWMobyk7CgkJCX0KCQl9OwoKCgkJZm9yKCA7
IHdbaV07IGkrKyApewoJCQlwCT0gd1tpXS5zcGxpdCgnOicpOwoJCQluCT0gd1tp
XS50b0xvd2VyQ2FzZSgpOwoKCQkJdGhpcy5fd0xpc3Rbbl0ubC5wdXNoKHdjKTsK
CgkJCWlmKCAocFswXSA9PSAnZmlsZScpIHx8IChwWzBdID09ICdpbmNsdWRlJykg
fHwgKHBbMF0gPT0gJ3JlcXVpcmUnKSApCgkJCXsKCQkJCWpzTG9hZGVyLnJlcXVp
cmUocFsxXSwgd2MpOwoJCQl9CgkJfQoJfSwKCgoJbm90aWZ5OiBmdW5jdGlvbiAo
dywgbyl7CgkJaWYoIHR5cGVvZiB3ID09ICdzdHJpbmcnICkgdyA9IHcuc3BsaXQo
JywnKTsKCgkJdmFyIGogPSAwLCBwLCBuLCBqID0gdy5sZW5ndGgsIF93TGlzdCA9
IHRoaXMuX3dMaXN0OwoKCQl3aGlsZSggai0tICl7CgkJCXAJPSB3W2pdLnNwbGl0
KCc6Jyk7CgkJCW4gCT0gd1tqXS50b0xvd2VyQ2FzZSgpOwoKCQkJaWYoICEobiBp
biBfd0xpc3QpICl7CgkJCQlfd0xpc3Rbbl0gPSB7IHI6IGZhbHNlLCBsOiBbXSB9
OwoJCQl9CgoJCQlpZiggcFswXSAhPSAnZXZlbnQnICl7CgkJCQlfd0xpc3Rbbl0u
ciA9IHRydWU7CgkJCX0KCgkJCWlmKCBfd0xpc3Rbbl0ubCApewoJCQkJZm9yKCB2
YXIgaSA9IDAsIG5pID0gdGhpcy5fd0xpc3Rbbl0ubC5sZW5ndGg7IGkgPCBuaTsg
aSsrICl7CgkJCQkJX3dMaXN0W25dLmxbaV0obyk7CgkJCQl9CgkJCX0KCQl9Cgl9
LAoKCgljb25maXJtVW5sb2FkOiBmdW5jdGlvbiAoeS8qeWVzOkJvb2wqLywgdC8q
dGV4dDpTdHJpbmcqLykKCXsKCQlpZiggZGVmaW5lZCh5KSApCgkJewoJCQl0aGlz
LnVubG9hZENvbmZpcm0JPSB5OwoJCQl3aW5kb3cub25iZWZvcmV1bmxvYWQJPSB5
ID8gZnVuY3Rpb24gKCl7IHJldHVybgkodCB8fCBmYWxzZSk7IH0gOiBudWxsOwoJ
CQlqc0NvcmUubm90aWZ5KCdldmVudDpjb25maXJtVW5sb2FkJywgeSk7CgkJfQoK
CQlyZXR1cm4JdGhpcy51bmxvYWRDb25maXJtOwoJfSwKCgoJZXJyb3I6IGZ1bmN0
aW9uIChtLypTdHJpbmcqLywgdS8qVXJsKi8sIGwvKk51bWJlciovKQoJewoJCWRl
YnVnLmxvZygnPGIgc3R5bGU9ImNvbG9yOiByZWQ7Ij4nLCBtLCB1LCBsLCAnPC9i
PicpOwoJfSwKCgoJcmVhZHk6IGZ1bmN0aW9uIChmKQoJewoJCWlmKCBmICYmIGYu
Y29uc3RydWN0b3IgPT0gRnVuY3Rpb24gKQoJCXsKCQkJanNDb3JlLmxvYWRlZAoJ
CQkJPyBmKCkKCQkJCToganNDb3JlLndhaXQoJ2pzQ29yZTpyZWFkeScsIGYpCgkJ
CTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYoIGpzQ29yZS5sb2FkZWQgKQlyZXR1cm4J
dHJ1ZTsKCQkJaWYoICFkb2N1bWVudC5ib2R5ICkgcmV0dXJuIHNldFRpbWVvdXQo
anNDb3JlLnJlYWR5LCAxMyk7CgoJCQlCT0RZCQkJID0gZG9jdW1lbnQuYm9keTsK
CQkJanNDb3JlLmlzUmVhZHkJID0ganNDb3JlLmxvYWRlZCA9IHRydWU7CgkJCUhU
TUwuaWQJCQkgPSAnanNIdG1sJzsKCQkJSFRNTC5jbGFzc05hbWUJKz0gJyBqc0h0
bWwnOwoKCQkJanNDb3JlLm5vdGlmeSgnanNDb3JlOnJlYWR5LGpzQ29yZTpsb2Fk
ZWQsZG9jdW1lbnQ6bG9hZGVkJy5zcGxpdCgnLCcpKTsKCQl9Cgl9LAoKCgl1bmxv
YWQ6IGZ1bmN0aW9uIChmKQoJewoJCWlmKCBmICYmIGYuY29uc3RydWN0b3IgPT0g
RnVuY3Rpb24gKQoJCXsKCQkJanNDb3JlLndhaXQoJ2pzQ29yZTp1bmxvYWQnLCBm
KTsKCQl9CgkJZWxzZQoJCXsKCQkJdHJ5CgkJCXsKCQkJCWpzQ29yZS5ub3RpZnko
J2pzQ29yZTp1bmxvYWQnKTsKCgkJCQkvL25vaW5zcGVjdGlvbiBKU1VuZGVjbGFy
ZWRWYXJpYWJsZQoJCQkJd2luZG93Lm9uZXJyb3IgPSB0aGlzLmxvYWRlZCA9IEhU
TUwgPSBIRUFEID0gJEhFQUQgPSBCT0RZID0gJEJPRFkgPSBudWxsOwoKCQkJCWpz
RXZlbnQucmVtb3ZlKHdpbmRvdywgJ3VubG9hZCcsIGpzQ29yZS51bmxvYWQpOwoJ
CQkJLy9JbnRlcnZhbC5kZXN0cm95KCk7CgkJCQlqc0NvcmUuZGVzdHJveShqc0xv
YWRlcik7CgkJCQlqc0NvcmUuZGVzdHJveShSZWdpc3RyeSk7CgkJCQlqc0NvcmUu
ZGVzdHJveSgpOwoJCQl9CgkJCWNhdGNoKCBlICkKCQkJewoJCQkJLy8gLi4uCgkJ
CX0KCQl9Cgl9LAoKCglkZXN0cm95OiBmdW5jdGlvbiAoby8qTWl4ZWQqLykKCXsK
CQlpZiggdHlwZW9mIG8gPT0gdW5kZWZpbmVkICkKCQl7CgkJCXdpbmRvd1snanNM
b2FkZXInXQk9IG51bGw7CgkJCXdpbmRvd1snanNDbGFzcyddCT0gbnVsbDsKCQkJ
d2luZG93Wydqc0NvcmUnXQk9IG51bGw7CgkJfQoJCWVsc2UKCQl7CgkJCWZvcigg
dmFyIGsgaW4gbyApCgkJCXsKCQkJCW9ba10JPSBudWxsOyBkZWxldGUJb1trXTsK
CQkJfQoJCQlrCT0gbnVsbDsgZGVsZXRlCWs7CgkJCW8JPSBudWxsOyBkZWxldGUJ
bzsKCQl9Cgl9LAoKCglpc0VtYWlsOiBmdW5jdGlvbiAocy8qU3RyaW5nKi8pCgl7
CgkJcmV0dXJuCXRoaXMuZW1haWxSZWdFeHAudGVzdChzKTsKCX0sCgoKCXJlcXVl
c3Q6IGZ1bmN0aW9uIChvKQoJewoJCW8uZGF0YQk9IFN0cmluZy50b1F1ZXJ5KG8u
ZGF0YSk7CgkJby5waWQJCT0gby5waWQgfHwgKG8uY2FjaGUgPyB0aGlzLmNyYzMy
KG8uZGF0YSkgOiBqc0NvcmUuZ2V0VW5pcUlkKCkpOwoJCXZhciByCQk9ICdyZXF1
ZXN0Oicrby5waWQ7CgoKCQlpZiggIW8uY2FjaGUgKSB0aGlzLl93TGlzdFtyXQk9
IHsgcjogMCwgbDogW10gfTsKCQlpZiggby5zdWNjZXNzICkKCQl7CgkJCWpzQ29y
ZS53YWl0KHIsICREKG51bGwsIGZ1bmN0aW9uIChSKQoJCQl7CgkJCQlpZiggIW8u
Y2FjaGUgfHwgKG8uY2FjaGUgJiYgZGVmaW5lZChSKSkgKSBqc0NvcmVbby5waWRd
CT0gUjsKCQkJCShvLnN1Y2Nlc3MpKGpzQ29yZVtvLnBpZF0pOwoJCQl9KSk7CgkJ
fQoJCWlmKCAhdGhpcy5fd0xpc3Rbcl0gfHwgIXRoaXMuX3dMaXN0W3JdLnIgKQoJ
CXsKCQkJanNMb2FkZXIuZmlsZShvLnVybCsoL1w/Ly50ZXN0KG8udXJsKSA/ICcm
JyA6ICc/JykrJ3BpZD0nK28ucGlkKycmJytvLmRhdGErJyZfc3JfPVknKyhvLmNh
Y2hlID8gJycgOiAnJl89Jytqc0NvcmUuZ2V0VW5pcUlkKCkpKTsKCQl9Cgl9LAoK
CW5hbWVzcGFjZToJZnVuY3Rpb24gKG5hbWUvKlN0cmluZyovKS8qT2JqZWN0Ki8K
CXsKCQluYW1lCT0gbmFtZS5zcGxpdCgnLicpOwoJCXZhciBvCT0gd2luZG93LCBp
ID0gMCwgbiA9IG5hbWUubGVuZ3RoOwoKCQlmb3IoIGkgPSAwOyBpIDwgbjsgaSsr
ICkKCQl7CgkJCWlmKCBvW25hbWVbaV1dID09PSB1bmRlZiApCgkJCQlvW25hbWVb
aV1dCT0ge307CgkJCW8JPSBvW25hbWVbaV1dOwoJCX0KCgkJcmV0dXJuCW87Cgl9
LAoKCWZpbGU6IGZ1bmN0aW9uIChmaWxlLCByZXF1aXJlLCBmdW5jKQoJewoJCWlm
KCBhcmd1bWVudHMubGVuZ3RoID09PSAyICkKCQl7CgkJCXJlcXVpcmUoKTsKCQkJ
anNMb2FkZXIubG9hZGVkKGZpbGUpOwoJCX0KCQllbHNlCgkJewoJCQlqc0xvYWRl
ci5yZXF1aXJlKHJlcXVpcmUsIGZ1bmN0aW9uICgpCgkJCXsKCQkJCWZ1bmMoKTsK
CQkJCWpzTG9hZGVyLmxvYWRlZChmaWxlKTsKCQkJfSk7CgkJfQoJfQoKCn07IC8v
IGpzQ29yZTsKCihmdW5jdGlvbiAoKSB7CgoJdmFyIG51bWJlckNoYXJzID0gIjAx
MjM0NTY3ODkiLAoJCWxvd2VyQ2hhcnMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXoiLAoJCXVwcGVyQ2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldY
WVoiLAoJCW90aGVyQ2hhcnMgPSAiYH4hQCMkJV4mKigpLV89K1t7XX1cXHw7Oidc
Iiw8Lj4vPyAiOwoKCWZ1bmN0aW9uIGdldFJhbmRvbU51bSAobGJvdW5kLCB1Ym91
bmQpIHsKCQlyZXR1cm4gKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICh1Ym91
bmQgLSBsYm91bmQpKSArIGxib3VuZCk7Cgl9CgoJZnVuY3Rpb24gZ2V0UmFuZG9t
Q2hhciAobnVtYmVyLCBsb3dlciwgdXBwZXIsIG90aGVyKSB7CgkJdmFyIGNoYXJT
ZXQgPSAnJzsKCQlpZiAobnVtYmVyKSBjaGFyU2V0ICs9IG51bWJlckNoYXJzOwoJ
CWlmIChsb3dlcikgY2hhclNldCArPSBsb3dlckNoYXJzOwoJCWlmICh1cHBlcikg
Y2hhclNldCArPSB1cHBlckNoYXJzOwoJCWlmIChvdGhlcikgY2hhclNldCArPSBv
dGhlckNoYXJzOwoJCXJldHVybiBjaGFyU2V0LmNoYXJBdChnZXRSYW5kb21OdW0o
MCwgY2hhclNldC5sZW5ndGgpKTsKCX0KCglqc0NvcmUuZ2V0UmFuZG9tSGFzaCA9
IGZ1bmN0aW9uIChsZW5ndGgsIG51bWJlciwgbG93ZXIsIHVwcGVyLCBvdGhlcikg
ewoJCWZvciAodmFyIGw9MCwgcz0nJzsgbDxsZW5ndGg7ICsrbCkgcyArPSBnZXRS
YW5kb21DaGFyKG51bWJlciwgbG93ZXIsIHVwcGVyLCBvdGhlcik7CgkJcmV0dXJu
IHM7Cgl9OwoKfSkoKTsKCi8qKgogKiBAYWxpYXNlcwogKi8KdmFyCgkgICRFCQkJ
PSBqc0NvcmUuZXh0ZW5kCgksICRECQkJPSBqc0NvcmUuZGVsZWdhdGUKCSwgJEIJ
CQk9IGpzQ29yZS5icm93c2VyCgksICRHCQkJPSBqc0NvcmUuZWxtCgksICRTQQkJ
CT0gZnVuY3Rpb24gKE4sIGEsIHYpeyBOW2FdID0gdjsgYSAhPSAnY2xhc3NOYW1l
JyAmJiBOLnNldEF0dHJpYnV0ZSA/IE4uc2V0QXR0cmlidXRlKGEsIHYpIDogMDsg
cmV0dXJuIE47IH0KCSwgJEFBCQkJPSBmdW5jdGlvbiAoTiwgYSwgdil7IHJldHVy
biAkU0EoTiwgYSwgJEdBKE4sIGEpICsgdik7IH0KCSwgJFJBCQkJPSBmdW5jdGlv
biAoTiwgYSwgciwgdil7IHJldHVybiAkU0EoTiwgYSwgJEdBKE4sIGEpLnJlcGxh
Y2UociwgdikpOyB9CgksICREQQkJCT0gZnVuY3Rpb24gKE4sIGEpeyBOW2FdID0g
bnVsbDsgaWYoICFOLm5vZGVUeXBlICkgZGVsZXRlIE5bYV07IChOLnJlbW92ZUF0
dHJpYnV0ZSA/IE4ucmVtb3ZlQXR0cmlidXRlKGEpIDogMCk7IHJldHVybiBOOyB9
CS8vIGRyb3AgYXR0cnVidXRlCgksICRHQQkJCT0gZnVuY3Rpb24gKGUsIGEpeyBp
ZiggZSAhPT0gdW5kZWYgKSByZXR1cm4gKHR5cGVvZiBlW2FdID09ICd1bmRlZmlu
ZWQnKSA/IGUuZ2V0QXR0cmlidXRlICYmIGUuZ2V0QXR0cmlidXRlKGEpIDogZVth
XTsgfQoJLCAkRgkJCT0ganNDb3JlLiQKCSwgJEZTCQkJPSBmdW5jdGlvbiAoaWQp
eyByZXR1cm4gJEYoaWQpLnN0eWxlIHx8IHt9OyB9CgksICRjbG9uZQkJPSBqc0Nv
cmUuY2xvbmVPYmplY3QKCSwgX2FwcGx5XwkJPSBqc0NvcmUuYXBwbHkKCSwgJG9u
Q2xpY2sJCT0gZnVuY3Rpb24gKE5vZGUsIHNhdmUpeyBOb2RlID0gJEYoTm9kZSk7
IHZhciB2YWx1ZSA9IE5vZGUub25jbGljayAmJiBOb2RlLm9uY2xpY2soKTsgaWYo
ICFzYXZlICkgJERBKE5vZGUsICdvbmNsaWNrJyk7IHJldHVybiB2YWx1ZTsgfQo7
CgpmdW5jdGlvbiAkRFMob2JqLCBtZXRob2QpCnsKCXZhciBpZCA9IGpzQ29yZS5n
ZXRVbmlxSWQodHlwZW9mIG1ldGhvZCA9PT0gJ3N0cmluZycgPyBvYmpbbWV0aG9k
XSA6IG1ldGhvZCk7CglpZiggIWRlZmluZWQob2JqW2lkXSkgKSBvYmpbaWRdID0g
JEQuYXBwbHkoJEQsIGFyZ3VtZW50cyk7CglyZXR1cm4Jb2JqW2lkXTsKfQoKCmpz
Q29yZS51bmlxSWQJPSBqc0NvcmUuZ2V0VW5pcUlkKCk7Ck9iamVjdC5leHRlbmQJ
PSAkRTsKT2JqZWN0LmNsb25lCT0gJGNsb25lOwoKLyoqCiAqIEBleHBvc2UKICov
Ck9iamVjdC5mb3JFYWNoID0gZnVuY3Rpb24ob2JqZWN0LCBjYWxsYmFjaywgY29u
dGV4dCkgewoJaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgewoJ
CXRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0
aW9uJyk7Cgl9CgoJdmFyIF9fb3duX18gPSBPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5CgkJLCBrZXkKCTsKCglpZiggb2JqZWN0ICkgewoJCWZvcigga2V5
IGluIG9iamVjdCApIHsKCQkJaWYoIF9fb3duX18uY2FsbChvYmplY3QsIGtleSkg
KSB7CgkJCQlpZiggY2FsbGJhY2suY2FsbChjb250ZXh0LCBvYmplY3Rba2V5XSwg
a2V5LCBvYmplY3QpID09PSBmYWxzZSApIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJ
fQoJCX0KCX0KfTsKCi8vIEVORDoganNDb3JlIHt9OwoKCnZhciBqc0NsYXNzCT0g
ewoKCWNsYXNzZXM6CXt9LAoJX19tOgkJe30sCgltZXRob2RzOgl7fSwKCWRlcGVu
ZGVuY2U6CXt9LAoJaW5zdGFuY2U6CXt9LAoJY29sbGVjdG9yOglbXSwKCgoJLyoq
CgkgKiBDcmVhdGUgY2xhc3MKCSAqCgkgKiBAYWNjZXNzCXB1YmxpYwoJICogQHBh
cmFtCXtTdHJpbmd9CW5hbWUKCSAqIEBvYXJhbXMJe0Jvb2xlYW59CXNpbmdsZXRv
bgoJICogQHJldHVybgl7anNDbGFzcy5CYXNlfQoJICovCgljcmVhdGU6IGZ1bmN0
aW9uIChuLCBzaW5nbGV0b24pCgl7CgkJdmFyIGNsYXNzVW5pcUlkCQk9IGpzQ29y
ZS5nZXRVbmlxSWQoKTsKCQl2YXIgTmV3Q2xhc3MgCQk9IGZ1bmN0aW9uKCkKCQl7
CgkJCXZhciBzZWxmID0gdGhpcy5jb25zdHJ1Y3RvcjsKCgkJCWlmKCBzaW5nbGV0
b24gJiYgKHNlbGYuaW5zdGFuY2UgIT09IHVuZGVmKSApCgkJCXsKCQkJCXJldHVy
bglzZWxmLmluc3RhbmNlOwoJCQl9CgoJCQl0aGlzLnVuaXFJZAkJCQk9IGpzQ29y
ZS5nZXRVbmlxSWQoKTsKCQkJdGhpcy51bmlxTmFtZQkJCT0gKG58fCcnKS5zdWJz
dHIoNyk7CgkJCXRoaXMucGFyZW50Q2xhc3NVbmlxSWQJPSAwOwoKCQkJaWYoIHRo
aXMuX19jb25zdHJ1Y3QgKQoJCQkJdGhpcy5fX2NvbnN0cnVjdC5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOwoKCQkJaWYoIHNpbmdsZXRvbiApCgkJCQlzZWxmLmluc3Rh
bmNlCT0gdGhpczsKCQl9OwoKCQlqc0NvcmUuZWFjaChqc0NsYXNzLkJhc2UsIGZ1
bmN0aW9uIChrLCBtKQoJCXsKCQkJaWYoIGsgIT0gJ3Byb3RvdHlwZScgKXsgTmV3
Q2xhc3Nba10JPSBtOyB9CgkJfSk7CgoKCQlOZXdDbGFzcy51bmlxTmFtZQkJCQk9
IG47CgkJTmV3Q2xhc3MuY2xhc3NVbmlxSWQJCQk9CgkJTmV3Q2xhc3MucHJvdG90
eXBlLmNsYXNzVW5pcUlkCT0gY2xhc3NVbmlxSWQ7CgoKCQlqc0NsYXNzLmNsYXNz
ZXNbY2xhc3NVbmlxSWRdCT0gTmV3Q2xhc3M7CgkJanNDbGFzcy5fX21bY2xhc3NV
bmlxSWRdCQk9IHt9OwoJCWpzQ2xhc3MubWV0aG9kc1tjbGFzc1VuaXFJZF0JPSB7
fTsKCQlqc0NsYXNzLmRlcGVuZGVuY2VbY2xhc3NVbmlxSWRdCT0gW107CgoKCQlO
ZXdDbGFzcy5leHRlbmQoanNDbGFzcy5CYXNlKTsKCgkJTmV3Q2xhc3MucHJvdG90
eXBlLmluaGVyaXQJCT0gZnVuY3Rpb24gKEssIG0sIGFyZ3MpeyByZXR1cm4JSy5w
cm90b3R5cGVbbV0uYXBwbHkodGhpcywgYXJncyk7IH07CgkJTmV3Q2xhc3MucHJv
dG90eXBlLmNvbnN0cnVjdG9yCT0gTmV3Q2xhc3M7CgkJTmV3Q2xhc3MucHJvdG90
eXBlLnBhcmVudAkJPSBqc0NsYXNzLkJhc2UucHJvdG90eXBlLnBhcmVudDsKCgoJ
CWlmKCBuICl7CgkJCW4gPSAnd2luZG93LicrbjsKCQkJanNDb3JlLm5hbWVzcGFj
ZShuLnN1YnN0cigwLCBuLmxhc3RJbmRleE9mKCcuJykpKVtuLnN1YnN0cihuLmxh
c3RJbmRleE9mKCcuJykrMSldID0ganNDbGFzcy5jbGFzc2VzW2NsYXNzVW5pcUlk
XTsKCQl9CgoJCXJldHVybglqc0NsYXNzLmNsYXNzZXNbY2xhc3NVbmlxSWRdOwoJ
fSwKCgoJaW5oZXJpdDogZnVuY3Rpb24gKEYvKkZyb206anNDbGFzcyovLCBULypU
bzpqc0NsYXNzKi8sIG0vKm1ldGhvZDpTdHJpbmcqLykvKjpNaXhlZCovCgl7CgkJ
cmV0dXJuCUYucHJvdG90eXBlW21dLmFwcGx5KFQsIChfc2xpY2VfLmNhbGwoYXJn
dW1lbnRzLCAzKXx8W10pKTsKCX0sCgoKCWRlc3Ryb3k6IGZ1bmN0aW9uICgpCgl7
CgkJd2hpbGUoIHRoaXMuY29sbGVjdG9yLmxlbmd0aCApCgkJewoJCQl0cnkKCQkJ
ewoJCQkJdGhpcy5jb2xsZWN0b3Iuc2hpZnQoKSgpOwoJCQl9IGNhdGNoKGUpIHt9
CgkJfQoJCXRoaXMuY29sbGVjdG9yCT0gbnVsbDsKCX0KCn07Ci8vIEVORDoganND
bGFzc3t9OwoKCi8qKgogKiBAY2xhc3MJanNDbGFzcy5CYXNlCiAqIEB2ZXJzaW9u
CTEuMAogKi8KanNDbGFzcy5CYXNlCQkJCT0gZnVuY3Rpb24gKCl7IH07CmpzQ2xh
c3MuQmFzZS5jbGFzc1VuaXFJZAk9IGpzQ29yZS5nZXRVbmlxSWQoKTsKanNDbGFz
cy5CYXNlLnByb3RvdHlwZQkJPSB7CgoKCS8qKgoJICogQ29uc3RydWN0b3IKCSAq
CgkgKiBAYWNjZXNzCXB1YmxpYwoJICogQHJldHVybgl7Vm9pZH0KCSAqLwoJLy9f
X2NvbnN0cnVjdDogZnVuY3Rpb24gKCl7IC8qIC4uLiAqLyB9LAoKCgkvKioKCSAq
IEBhY2Nlc3MJcHVibGljCgkgKiBAcGFyYW0Je1N0cmluZ30gbmFtZQoJICogQHJl
dHVybgl7TWl4ZWR9CgkgKi8KCXBhcmVudDogZnVuY3Rpb24gKG5hbWUvKjpTdHJp
bmcqLykKCXsKCQl2YXIgaSA9IC0tanNDbGFzcy5fX21bdGhpcy5jbGFzc1VuaXFJ
ZF1bbmFtZV0KCQksIHIgPSBqc0NsYXNzCgkJCQkJLmNsYXNzZXNbIGpzQ2xhc3Mu
bWV0aG9kc1t0aGlzLmNsYXNzVW5pcUlkXVtuYW1lXVsgaSA8IDAgPyBqc0NsYXNz
Lm1ldGhvZHNbdGhpcy5jbGFzc1VuaXFJZF1bbmFtZV0ubGVuZ3RoLTEgOiBpIF0g
XQoJCQkJCQkucHJvdG90eXBlW25hbWVdCgkJCQkJCS5hcHBseSggdGhpcywgX3Ns
aWNlXy5jYWxsKGFyZ3VtZW50cywgMSkgKQoJCQkJOwoJCWpzQ2xhc3MuX19tW3Ro
aXMuY2xhc3NVbmlxSWRdW25hbWVdKys7CgkJcmV0dXJuCXI7Cgl9LAoKCgkvKioK
CSAqIENhbGwgbWV0aG9kCgkgKgoJICogQHBhcmFtCXtTdHJpbmd9IG4KCSAqIEBy
ZXR1cm4Je0Jvb2xlYW59CgkgKi8KCWNhbGxNZXRob2Q6IGZ1bmN0aW9uIChuKQoJ
ewoJCWlmKCB0eXBlb2YgdGhpc1tuXSAhPSAndW5kZWZpbmVkJyApCXJldHVybgl0
aGlzW25dLmFwcGx5KHRoaXMsIF9zbGljZV8uY2FsbChhcmd1bWVudHMsIDEpKTsK
CX0sCgoKCS8qKgoJICogRGVzdG9yeQoJICoKCSAqIEBhY2Nlc3MJcHVibGljCgkg
KiBAcmV0dXJuCXtWb2lkfQoJICovCglkZXN0cm95OiBmdW5jdGlvbiAoKXsgIGpz
Q29yZS5kZXN0cm95KHRoaXMpOyAgfQoKCn07Ci8vIEVORDoganNDbGFzcy5CYXNl
LnByb3RvdHlwZTsKCgovLyBqc0NsYXNzLkJhc2UKJEUoanNDbGFzcy5CYXNlLCB7
CgoJLy8gU2luZ2xldG9uCglnZXRJbnN0YW5jZTogZnVuY3Rpb24gKCkKCXsKCQlp
ZiggIWpzQ2xhc3MuaW5zdGFuY2VbdGhpcy5jbGFzc1VuaXFJZF0gKQoJCXsKCQkJ
anNDbGFzcy5pbnN0YW5jZVt0aGlzLmNsYXNzVW5pcUlkXQk9IG5ldyB0aGlzOwoJ
CX0KCQlyZXR1cm4JanNDbGFzcy5pbnN0YW5jZVt0aGlzLmNsYXNzVW5pcUlkXTsK
CX0sCgoKCWV4dGVuZDogZnVuY3Rpb24gKEUvKmpzQ2xhc3MuQmFzZSovKQoJewoJ
CXZhciBjID0gMCwgY0lkLCBlSywgZVAsIFAgPSB0aGlzLnByb3RvdHlwZTsKCgkJ
Zm9yKCA7IGVLID0gYXJndW1lbnRzW2NdOyBjKysgKQoJCXsKCQkJY0lkCT0gZUsu
Y2xhc3NVbmlxSWQ7CgkJCWVQCT0gZUsucHJvdG90eXBlOwoKCQkJZm9yKCB2YXIg
bSBpbiBlUCApCgkJCXsKCQkJCWlmKCAobSAhPSAnY2xhc3NVbmlxSWQnKSAmJiAo
bSAhPSAndW5pcUlkJykgJiYgKG0gIT0gJ3BhcmVudCcpICYmIChtICE9ICdpbmhl
cml0JykgJiYgKG0gIT0gJ2NvbnN0cnVjdG9yJykgKQoJCQkJewoJCQkJCVBbbV0J
PSBlUFttXTsKCgoJCQkJCWlmKCAhanNDbGFzcy5tZXRob2RzW3RoaXMuY2xhc3NV
bmlxSWRdW21dIHx8IGpzQ2xhc3MubWV0aG9kc1t0aGlzLmNsYXNzVW5pcUlkXVtt
XS5jb25zdHJ1Y3RvciAhPSBBcnJheSApCgkJCQkJewoJCQkJCQlqc0NsYXNzLm1l
dGhvZHNbdGhpcy5jbGFzc1VuaXFJZF1bbV0gPSBbXTsKCQkJCQl9CgoJCQkJCWlm
KCBqc0NsYXNzLm1ldGhvZHNbY0lkXSAmJiBqc0NsYXNzLm1ldGhvZHNbY0lkXVtt
XSApCgkJCQkJewoJCQkJCQlqc0NsYXNzLm1ldGhvZHNbdGhpcy5jbGFzc1VuaXFJ
ZF1bbV0gPSBBcnJheS51bmlxKCBqc0NsYXNzLm1ldGhvZHNbdGhpcy5jbGFzc1Vu
aXFJZF1bbV0uY29uY2F0KCBqc0NsYXNzLm1ldGhvZHNbY0lkXVttXSApICk7CgkJ
CQkJfQoKCQkJCQlpZiggQXJyYXkuaW5kZXhPZihqc0NsYXNzLm1ldGhvZHNbdGhp
cy5jbGFzc1VuaXFJZF1bbV0sIGNJZCkgPT0gLTEgICkKCQkJCQl7CgkJCQkJCWpz
Q2xhc3MubWV0aG9kc1t0aGlzLmNsYXNzVW5pcUlkXVttXS5wdXNoKCBjSWQgKTsK
CQkJCQl9CgoJCQkJCWpzQ2xhc3MuX19tW3RoaXMuY2xhc3NVbmlxSWRdW21dCT0g
anNDbGFzcy5tZXRob2RzW3RoaXMuY2xhc3NVbmlxSWRdW21dLmxlbmd0aDsKCQkJ
CX0KCQkJfQoKCQkJdGhpcy5TdXBlciA9IGVQOwoJCQlQLnBhcmVudENsYXNzVW5p
cUlkCT0gY0lkOwoJIAl9CgoJCXJldHVybgl0aGlzOwoJfSwKCglzdGF0aWNzOiBm
dW5jdGlvbiAobSkKCXsKCQkkRSggdGhpcywgbSApOwoJCXJldHVybgl0aGlzOwoJ
fSwKCgoJbWV0aG9kczogZnVuY3Rpb24gKG0pCgl7CgkJJEUodGhpcy5wcm90b3R5
cGUsIG0uY29uc3RydWN0b3IgPT09IE9iamVjdCA/IG0gOiBtKHRoaXMpKTsKCQly
ZXR1cm4JdGhpczsKCX0KCn0pOwovLyBFTkQ6IGpzQ2xhc3MuQmFzZSgpOwoKCgoK
LyoqCiAqIEBleHRlbnNpb24JanNDdXN0b21FdmVudHMKICogQHZlcnNpb24JCTIK
ICovCnZhciBqc0NFdmVudHMJPQp7Cglwb29sOgl7fSwKCW5hbWU6CWZ1bmN0aW9u
IChuKXsJcmV0dXJuCSdvbicgKyBuLnN1YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkg
KyBuLnN1YnN0cigxKTsgfQp9OwoKCmpzQ2xhc3MuQmFzZS5tZXRob2RzKHsKCgoJ
LyoqCgkgKiBAYWNjZXNzCXB1YmxpYwoJICogQHBhcmFtCXtTdHJpbmd9CW4KCSAq
IEBwYXJhbQl7RnVuY3Rpb259CWgKCSAqIEByZXR1cm4Je1RoaXN9CgkgKi8KCWFk
ZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIChuLCBoKQoJewoJCW4JPSBuLnRvTG93
ZXJDYXNlKCk7CgoJCWlmKCAhdGhpcy5fX2NlX3VuaXFJZCApCQkJCQkJdGhpcy5f
X2NlX3VuaXFJZAkJCQkJPSBqc0NvcmUuZ2V0VW5pcUlkKCk7CgkJaWYoICFqc0NF
dmVudHMucG9vbFt0aGlzLl9fY2VfdW5pcUlkXSApCQlqc0NFdmVudHMucG9vbFt0
aGlzLl9fY2VfdW5pcUlkXQk9IHt9OwoJCWlmKCAhanNDRXZlbnRzLnBvb2xbdGhp
cy5fX2NlX3VuaXFJZF1bbl0gKQlqc0NFdmVudHMucG9vbFt0aGlzLl9fY2VfdW5p
cUlkXVtuXQk9IFtdOwoKCQlqc0NFdmVudHMucG9vbFt0aGlzLl9fY2VfdW5pcUlk
XVtuXS5wdXNoKGgpOwoKCQlyZXR1cm4JdGhpczsKCX0sCgoKCS8qKgoJICogQGFj
Y2VzcwlwdWJsaWMKCSAqIEBwYXJhbQl7U3RyaW5nfQluYW1lCgkgKiBAcGFyYW0J
e0Z1bmN0aW9ufQloYW5kbGVyCgkgKiBAcmV0dXJuCXtUaGlzfQoJICovCglyZW1v
dmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAobiwgaCkKCXsJbgk9IG4udG9Mb3dl
ckNhc2UoKTsKCgkJaWYoICAganNDRXZlbnRzLnBvb2xbdGhpcy5fX2NlX3VuaXFJ
ZF0KCQkJJiYganNDRXZlbnRzLnBvb2xbdGhpcy5fX2NlX3VuaXFJZF1bbl0KCQkp
ewoJCQlqc0NFdmVudHMucG9vbFt0aGlzLl9fY2VfdW5pcUlkXVtuXQk9IEFycmF5
LnJlbW92ZShqc0NFdmVudHMucG9vbFt0aGlzLl9fY2VfdW5pcUlkXVtuXSwgaCwg
MSk7CgkJfQoKCQlyZXR1cm4JdGhpczsKCX0sCgoKCS8qKgoJICogQGFjY2Vzcwlw
cml2YXRlCgkgKiBAcGFyYW0Je1N0cmluZ30JCW4KCSAqIEByZXR1cm4Je0Jvb2x9
CgkgKi8KCWRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uIChuKQoJewoJCXZhciByID0g
MSwgcE4gPSBqc0NFdmVudHMubmFtZShuKSwgYTsKCgkJaWYoIHRoaXNbcE5dICYm
ICh0aGlzW3BOXS5hcHBseSh0aGlzLCBhID0gX3NsaWNlXy5jYWxsKGFyZ3VtZW50
cywgMSkpID09PSBmYWxzZSkgKQoJCXsKCQkJciA9IDA7CgkJfQoJCWVsc2UgaWYo
IHRoaXMuX19jZV91bmlxSWQgJiYganNDRXZlbnRzLnBvb2xbdGhpcy5fX2NlX3Vu
aXFJZF1bbiA9IG4udG9Mb3dlckNhc2UoKV0gKQoJCXsKCQkJdmFyIGkgPSAwLCBo
ID0ganNDRXZlbnRzLnBvb2xbdGhpcy5fX2NlX3VuaXFJZF1bbl0sIGlsID0gaC5s
ZW5ndGgsIGEgPSBhIHx8IF9zbGljZV8uY2FsbChhcmd1bWVudHMsIDEpOwoJCQl0
cnkKCQkJewoJCQkJZm9yKCA7IGkgPCBpbDsgaSsrICkgaWYoIGhbaV0gJiYgaFtp
XS5hcHBseSh0aGlzLCBhKSA9PT0gZmFsc2UgKQoJCQkJCXIJPSAwOwoJCQl9CgkJ
CWNhdGNoIChlKQoJCQl7CgkJCQloW2ldID0gbnVsbDsKCQkJCWRlYnVnLmxvZygn
Q0UtPmRpc3BhdGNoRXZlbnQ6JywgcE4sIGEsIGUpOwoJCQl9CgkJfQoKCQlyZXR1
cm4JISFyOwoJfQoKfSk7Ci8vIGpzQ3VzdG9tRXZlbnRzID4KCgoKCnZhciBqc0xv
YWRlciA9IHsKCgkvKiBAcHVibGljICAqLyBjYWNoZToJCXRydWUsCgkvKiBAcHJp
dmF0ZSAqLyBzY3JpcHQ6CQl7fSwKCS8qIEBwcml2YXRlICovIGFsaWFzZXM6CQl7
fSwKCS8qIEBwcml2YXRlICovIGNzczoJCQl7fSwKCglmTDoJCXt9LAoJZmlsZXM6
CXt9LAoKCglmaWxlOiBmdW5jdGlvbiAodS8qVXJsU3RyaW5nKi8sIHQvKnRhZ05h
bWUqLywgYS8qQXR0cmlidXRlcyovKS8qVm9pZCovewoJCWlmKCAhdGhpcy5maWxl
c1t1XSApewoJCQl2YXIJTgk9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodD10fHwn
U0NSSVBUJyk7CgoJCQl0cnkgewoJCQkJYQk9IGF8fHt9OwoKCQkJCWlmKCB0ID09
ICdMSU5LJyApIGEucmVsID0gJ3N0eWxlc2hlZXQnOwoKCQkJCWlmICh0ICE9ICdM
SU5LJyAmJiAvd2luXGQrLmRldi8udGVzdChsb2NhdGlvbi5ob3N0KSkgewoJCQkJ
CWEuY2hhcnNldCA9ICd3aW5kb3dzLTEyNTEnOwoJCQkJfQoKCQkJCWEudHlwZQkJ
CQkJCT0gdD09J0xJTksnID8gJ3RleHQvY3NzJyA6ICd0ZXh0L2phdmFzY3JpcHQn
OwoJCQkJYVt0PT0nTElOSyc/J2hyZWYnOidzcmMnXQk9IHUgKyh1LmluZGV4T2Yo
Jz8nKSA9PSAtMSA/ICc/JyA6ICcmJykrICd2PScranNDb3JlLmJ1aWxkICsgKHRo
aXMuY2FjaGUgPyAnJyA6ICcmcj0nK2pzQ29yZS5nZXRVbmlxSWQoKSk7CgoJCQkJ
Zm9yKCB2YXIgayBpbiBhICkgJFNBKE4sIGssIGFba10pOwoKCQkJCUhFQUQuaW5z
ZXJ0QmVmb3JlKE4sIEhFQUQuZmlyc3RDaGlsZCk7CgkJCQl0aGlzLmZpbGVzW3Vd
CT0gMTsKCQkJfQoJCQljYXRjaCggZSApeyB9CgoJCQlOID0gbnVsbDsKCQl9Cgl9
LAoKCglpbmNsdWRlQ1NTOiBmdW5jdGlvbiAobi8qU3RyaW5nKi8pewoJCXRoaXMu
ZmlsZSh0aGlzLmdldEZpbGVVcmwobikgKyAnLmNzcycsICdMSU5LJyk7Cgl9LAoK
CglnZXRGaWxlVXJsOiBmdW5jdGlvbiAobi8qU3RyaW5nKi8pewoJCXJldHVybgl0
aGlzLmFsaWFzZXNbdGhpcy5nZXRBbGlhcyhuKV0gKyB0aGlzLmdldE5hbWUobik7
Cgl9LAoKCglhZGRBbGlhczogZnVuY3Rpb24gKG4vKlN0cmluZyovLCBwLypQYXRo
U3RyaW5nKi8sIG5vdGlmeSl7CgkJaWYoICF0aGlzLmFsaWFzZXNbbl0gKXsKCQkJ
dGhpcy5hbGlhc2VzW25dCT0gKG4gPT0gJ2pzQ29yZScgfHwgKC9eKGh0dHA6XC9c
L3xcLykvLnRlc3QocCkpID8gcCA6IHRoaXMuYWxpYXNlc1snanNDb3JlJ10gKyBw
KTsKCQkJaWYoIG5vdGlmeSApIGpzQ29yZS5ub3RpZnkoJ2FsaWFzOicgKyBuKTsK
CQl9Cgl9LAoKCglnZXRBbGlhczogZnVuY3Rpb24gKG4vKlN0cmluZyovLCBkLypE
ZWZBbGlhcyovKXsKCQlpZiggdGhpcy5hbGlhc2VzW25dICl7CgkJCXJldHVybglu
OwoJCX0KCQllbHNlIHsKCQkJbiA9IG4ubWF0Y2goL1x7KFtcd18uXC8tXSspXH1c
Lj8vaSk7CgkJCXJldHVybgkobiA/IG5bMV0gOiBkZWZpbmVkKGQsICdqc0NvcmUn
KSk7CgkJfQoJfSwKCgoJZ2V0TmFtZTogZnVuY3Rpb24gKG5hbWUvKlJlcXVpcmVT
dHJpbmcqLyl7CgkJcmV0dXJuCW5hbWUucmVwbGFjZSgvXHtbXHcuX1wvLV0rXH0v
aWcsICcnKTsKCX0sCgoKCV9yZXF1aXJlOiBmdW5jdGlvbiAoKXsgLyouLi4qLyB9
LAoKCXJlcXVpcmU6IGZ1bmN0aW9uIChsaXN0LypBcnJheSovLCBmbi8qRnVuY3Rp
b24qLywgcmVhZHkvKkJvb2wqLyl7CgkJaWYoIHR5cGVvZiBsaXN0ID09PSAnc3Ry
aW5nJyApCWxpc3QgPSBsaXN0LnNwbGl0KCcsJyk7CgoJCWxpc3QgPSBBcnJheS5m
aWx0ZXIobGlzdCwgZnVuY3Rpb24gKG5hbWUpewoJCQlpZiggIXRoaXMuZkxbbmFt
ZV0gKXsKCQkJCXRoaXMuZkxbbmFtZV0gPSAxOwoJCQkJdGhpcy5maWxlKGpzTG9h
ZGVyRmlsZXNbbmFtZV0gfHwgKHRoaXMuZ2V0RmlsZVVybChuYW1lKSArICcuanMn
KSk7CgkJCX0KCQkJcmV0dXJuCSF0aGlzLmlzTG9hZGVkKG5hbWUpOwoJCX0sIHRo
aXMpOwoKCQlpZiggIWpzQ29yZS5sb2FkZWQgJiYgcmVhZHkgKXsKCQkJaWYoIHJl
YWR5ICE9ICdhbmQnICl7CgkJCQlqc0NvcmUucmVhZHkoZnVuY3Rpb24gKCl7CgkJ
CQkJanNMb2FkZXIucmVxdWlyZShsaXN0LCBmbik7CgkJCQl9KTsKCQkJCXJldHVy
bjsKCQkJfQoJCQllbHNlIHsKCQkJCWxpc3QucHVzaCgnanNDb3JlOnJlYWR5Jyk7
CgkJCX0KCQl9CgoJCWlmKCBmbiApewoJCQlsaXN0Lmxlbmd0aCA/IGpzQ29yZS53
YWl0KGxpc3QsIGZuKSA6IGZuKCk7CgkJfQoJfSwKCglpc0xvYWRlZDogZnVuY3Rp
b24gKG5hbWUpewoJCXJldHVybiB0aGlzLmZMW25hbWVdID09PSAyOwoJfSwKCgls
b2FkZWQ6IGZ1bmN0aW9uIChuYW1lKXsKCQl0aGlzLmZMW25hbWVdID0gMjsKCQlq
c0NvcmUubm90aWZ5KG5hbWUpOwoJfSwKCgl1c2U6IGZ1bmN0aW9uIChmbil7CgkJ
Zm4oKTsKCX0KCn07CgpmdW5jdGlvbiBkZWZpbmUobmFtZSwgbGlzdCwgZm4pIHsK
CWZ1bmN0aW9uIF9jb252ZXJ0KHN0cikgewoJCXJldHVybiBzdHIucmVwbGFjZSgv
XihbXi9dKylcLyguKykkLywgJ3skMX0kMicpCgl9CgoJaWYodHlwZW9mIGZuID09
PSAndW5kZWZpbmVkJykgewoJCWZuID0gbGlzdDsKCgkJaWYobmFtZSBpbnN0YW5j
ZW9mIEFycmF5KSB7CgkJCWxpc3QgPSBuYW1lOwoJCQluYW1lID0gbnVsbDsKCgkJ
fSBlbHNlIHsKCQkJbGlzdCA9IFtdOwoJCX0KCX0KCglsaXN0ID0gQXJyYXkubWFw
KGxpc3QsIF9jb252ZXJ0KTsKCW5hbWUgPSBfY29udmVydChuYW1lKTsKCgl2YXIg
c3VjY2VzcyA9IGZ1bmN0aW9uKCkgewoJCWZuKCk7CgoJCWlmKG5hbWUpIHsKCQkJ
anNMb2FkZXIubG9hZGVkKG5hbWUpOwoJCX0KCX0KCglpZihsaXN0Lmxlbmd0aCkg
ewoJCWpzTG9hZGVyLnJlcXVpcmUobGlzdCwgc3VjY2Vzcyk7Cgl9IGVsc2UgewoJ
CXN1Y2Nlc3MoKTsKCX0KCn0KCmlmKCAhd2luZG93LmpzTG9hZGVyRmlsZXMgKXsK
CXdpbmRvdy5qc0xvYWRlckZpbGVzCT0ge307Cn0KLy8gRU5EOiBqc0xvYWRlcnt9
OwoKCgovKioKICogQG9iamVjdAlqc0Nvb2tpZQogKiBAYXV0aG9yCVJ1YmFYYQkJ
PHRyYXNoQHJ1YmF4YS5vcmc+CiAqLwp2YXIganNDb29raWUgID0gewoKCURBWToJ
ODY0MDAsCglXRUVLOgk4NjQwMCAqIDcsCglNT05USDoJODY0MDAgKiAzMCwKCVlF
QVI6CTg2NDAwICogMzY1LAoKCXNldDogZnVuY3Rpb24gKGssIHYvKj1udWxsKi8s
IGUvKj0wKi8sIHAvKj0nLycqLykKCXsKCQlpZiggIXYgKSB2ID0gMDsKCQlpZigg
KHR5cGVvZiBlICE9ICd1bmRlZmluZWQnKSAmJiAoZSAhPT0gdHJ1ZSkgKSBlID0g
J2V4cGlyZXM9JyArIChuZXcgRGF0ZSgobmV3IERhdGUpLmdldFRpbWUoKSArIChl
ICogMTAwMCkpKS50b0dNVFN0cmluZygpICsnOyc7CgkJZWxzZSBlID0gJyc7CgoJ
CXRoaXMucmVtb3ZlKGspOwoJCWRvY3VtZW50LmNvb2tpZSA9IGsrJz0nK3YrJzsg
cGF0aD0nKyhwfHwnLycpKyc7ICcrZTsKCQlyZXR1cm4JdGhpczsKCX0sCgoKCWdl
dDogZnVuY3Rpb24oaywgZCkKCXsKCQlpZiggIWsgKQlyZXR1cm4JZG9jdW1lbnQu
Y29va2llOwoJCXZhciByZSA9IG5ldyBSZWdFeHAoayArICc9JyksIGMgPSBqc0Nv
b2tpZS5nZXQoKS5zcGxpdCgvO1xzKy8pOwoJCWZvciggdmFyIGkgPSBjLmxlbmd0
aDsgaSAtLTsgKSBpZiggcmUudGVzdChjW2ldKSApIHJldHVybiBjW2ldLnNwbGl0
KCc9JylbMV07CgkJcmV0dXJuCWQ7Cgl9LAoKCgloYXM6IGZ1bmN0aW9uIChrKQoJ
ewoJCXZhciB2ID0gdGhpcy5nZXQoayk7CgkJcmV0dXJuCSh2ICYmICEoKHYgPT0g
J2ZhbHNlJykgfHwgKHYgPT0gJ251bGwnKSB8fCAodiA9PSAnJykpKTsKCX0sCgoK
CXJlbW92ZTogZnVuY3Rpb24gKGspCgl7CgkJdmFyIGUgPSAobmV3IERhdGUoMSkp
LnRvR01UU3RyaW5nKCk7CgkJZG9jdW1lbnQuY29va2llCT0gayArICc9bnVsbDsg
ZXhwaXJlcz0nICsgZTsKCQlkb2N1bWVudC5jb29raWUJPSBrICsgJz1udWxsOyBw
YXRoPS87IGV4cGlyZXM9JyArIGU7CgkJcmV0dXJuCXRoaXM7Cgl9Cgp9OwovLyBF
TkQ6IGpzQ29va2llCgoKCgovLyA8IERlYnVnCi8qKiBAbmFtZXNwYWNlIG9wZXJh
LnBvc3RFcnJvciAqLwovKiogQG5hbWVzcGFjZSB3aW5kb3cuQ09OU09MRV9PTiAq
LwooZnVuY3Rpb24gKHdpbiwgZGVidWcsIGVuYWJsZWQpewoJdHJ5IHsKCQlpZigg
L2RlYnVnLy50ZXN0KGxvY2F0aW9uKSApewoJCQllbmFibGVkID0gIS9kZWJ1Zz1u
Ly50ZXN0KGxvY2F0aW9uKTsKCQkJaWYoIHdpbi5sb2NhbFN0b3JhZ2UgKXsKCQkJ
CWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhanMuZGVidWcnLCArZW5hYmxlZCk7CgkJ
CX0KCQl9CgoJCWlmKCAhZW5hYmxlZCAmJiB3aW4ubG9jYWxTdG9yYWdlICl7CgkJ
CWVuYWJsZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYWpzLmRlYnVnJykgPT0g
MTsKCQl9Cgl9CgljYXRjaCAoZXIpe30KCgl2YXIKCQkgIF9qb2luID0gW10uam9p
bgoJCSwgX2NvbnNvbGUgPSBlbmFibGVkICYmICh3aW4uY29uc29sZSB8fCB3aW4u
b3BlcmEpCgkJLCBtc2llID0gX2NvbnNvbGUgJiYgKHR5cGVvZiBfY29uc29sZS5s
b2cgPT0gJ29iamVjdCcpCgk7CgoJanNDb3JlLmRlYnVnTW9kZSA9IGVuYWJsZWQ7
CgoJanNDb3JlLmVhY2goJ2xvZyxpbmZvLHdhcm4sZXJyb3IsZGlyLGFzc2VydCxw
cm9maWxlLHByb2ZpbGVFbmQsY2xlYXIsZ3JvdXAsZ3JvdXBFbmQsZ3JvdXBDb2xs
YXBzZWQnLnNwbGl0KCcsJyksIGZ1bmN0aW9uIChpLCBtZXRob2QpewoJCWlmKCBf
Y29uc29sZSApewoJCQlpZiggX2NvbnNvbGVbbWV0aG9kXSApewoJCQkJZGVidWdb
bWV0aG9kXQk9IG1zaWUKCQkJCQkJCQk/IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxs
LmJpbmQoX2NvbnNvbGVbbWV0aG9kXSwgX2NvbnNvbGUpCgkJCQkJCQkJOiBmdW5j
dGlvbiAoKXsgX2NvbnNvbGVbbWV0aG9kXS5hcHBseShfY29uc29sZSwgYXJndW1l
bnRzKTsgfQoJCQkJCQkJOwoJCQl9CgkJCWVsc2UgaWYoIG1ldGhvZCA9PSAnbG9n
JyApewoJCQkJaWYoIF9jb25zb2xlLnBvc3RFcnJvciApewoJCQkJCWRlYnVnLmxv
ZyA9IGZ1bmN0aW9uICgpewoJCQkJCQlfY29uc29sZS5wb3N0RXJyb3IoX2pvaW4u
Y2FsbChhcmd1bWVudHMsICcgJykpOwoJCQkJCX07CgkJCQl9CgkJCQllbHNlIHsK
CQkJCQlkZWJ1Zy5sb2cJPSBqc0NvcmUuRjsKCQkJCX0KCQkJfQoJCQllbHNlIHsK
CQkJCWRlYnVnW21ldGhvZF0JPSBmdW5jdGlvbiAoKXsKCQkJCQlkZWJ1Zy5sb2cu
YXBwbHkoYWpzLCBhcmd1bWVudHMpOwoJCQkJfTsKCQkJfQoJCX0KCQllbHNlIHsK
CQkJZGVidWdbbWV0aG9kXQk9IGpzQ29yZS5GOwoJCX0KCX0pOwp9KSh3aW5kb3cs
IHdpbmRvdy5kZWJ1ZyA9IHt9LCBqc0NvcmUubG9jYWwgfHwgd2luZG93LkNPTlNP
TEVfT04pOwovLyBEZWJ1ZyA+CgoKCi8qKgogKiBqc0NvcmUuUmVnaXN0cnkKICov
CnZhciBSZWdpc3RyeQk9IHsKCglfZGF0YToJCQl7fSwKCgloYXM6CWZ1bmN0aW9u
KGtleSl7IHJldHVybgl0eXBlb2YodGhpcy5fZGF0YVtrZXldKSAhPSAndW5kZWZp
bmVkJzsgfSwKCWdldDoJZnVuY3Rpb24oa2V5KXsgcmV0dXJuCXRoaXMuX2RhdGFb
a2V5XTsgfSwKCXB1dDoJZnVuY3Rpb24oa2V5LCB2YWx1ZSl7IHRoaXMuX2RhdGFb
a2V5XSA9IHZhbHVlOyByZXR1cm4gdGhpczsgfSwKCXJlbW92ZToJZnVuY3Rpb24o
a2V5KXsgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTsgcmV0dXJuIHRoaXM7IH0sCgoJ
aW5jOgkJZnVuY3Rpb24gKGtleSwgbmFtZSwgY291bnQpeyB0aGlzLl9kYXRhW2tl
eV1bbmFtZV0gPSB0aGlzLl9kYXRhW2tleV1bbmFtZV0gKiAxICsgKGNvdW50IHx8
IDEpICogMTsgcmV0dXJuIHRoaXM7IH0sCglkZWM6CQlmdW5jdGlvbiAoa2V5LCBu
YW1lLCBjb3VudCl7IHRoaXMuX2RhdGFba2V5XVtuYW1lXSA9IHRoaXMuaW5jKGtl
eSwgbmFtZSwgY291bnQgfHwgLTEpOyByZXR1cm4gdGhpczsgfSwKCglkZXN0cm95
OiBmdW5jdGlvbiAoKXsganNDb3JlLmRlc3Ryb3kodGhpcy5fZGF0YSk7IGpzQ29y
ZS5kZXN0cm95KHRoaXMpOyB9Cgp9OwovLyBFTkQ6IFJlZ2lzdHJ5e307CgoKKGZ1
bmN0aW9uICh3KQp7Cgl2YXIgaWRzID0ge30sIG5hbWVzID0ge307CgoJdy5UaW1l
b3V0CT0gewoJCWNvdW50OiAwLAoKCQlzZXQ6IGZ1bmN0aW9uIChuYW1lLCBmdW5j
LCBtU2VjLCBsb29wKQoJCXsKCQkJdmFyIGlkOwoKCQkJaWYoIHR5cGVvZiBuYW1l
ID09PSAnZnVuY3Rpb24nKQoJCQl7CgkJCQlpZiggbVNlYyApIGxvb3AgPSBtU2Vj
OwoJCQkJbVNlYwk9IGZ1bmM7CgkJCQlmdW5jCT0gbmFtZTsKCQkJCW5hbWUJPSB1
bmRlZmluZWQ7CgkJCX0KCQkJZWxzZQoJCQkJdGhpcy5jbGVhcihuYW1lKTsKCgkJ
CWlmKCB0eXBlb2YgbG9vcCA9PT0gJ251bWJlcicgKQoJCQl7CgkJCQl2YXIgY291
bnRlciA9IDA7CgkJCQlpZCA9IHcuc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkKCQkJ
CXsKCQkJCQlpZiggbG9vcCApeyBmdW5jKCsrY291bnRlcik7IGxvb3AtLTsgfQoJ
CQkJCWlmKCAhbG9vcCApIFRpbWVvdXQuY2xlYXIoIG5hbWUgfHwgaWQgKTsKCQkJ
CX0sIG1TZWN8fDApOwoJCQl9CgkJCWVsc2UKCQkJCWlkID0gd1tsb29wID8gJ3Nl
dEludGVydmFsJyA6ICdzZXRUaW1lb3V0J10oZnVuYywgbVNlY3x8MCk7CgoJCQl3
W2xvb3AgPyAnSW50ZXJ2YWwnIDogJ1RpbWVvdXQnXS5jb3VudCsrOwoKCQkJbmFt
ZXNbaWRdCT0gbmFtZSB8fCBpZDsKCQkJbmFtZQkJPSBuYW1lc1tpZF0gKycnKyAr
Qm9vbGVhbihsb29wKTsKCQkJaWRzW25hbWVdCT0gaWQ7CgoJCQlyZXR1cm4JaWQ7
CgkJfSwKCgkJY2xlYXI6IGZ1bmN0aW9uIChuYW1lKQoJCXsKCQkJaWYoIG5hbWUg
aW4gbmFtZXMgKSBuYW1lID0gbmFtZXNbbmFtZV07CgkJCXZhciBuID0gbmFtZSsn
MCcsIGlkOwoJCQlpZiggaWRzW25dICkKCQkJewoJCQkJVGltZW91dC5jb3VudC0t
OwoJCQkJdy5jbGVhclRpbWVvdXQoIGlkID0gaWRzW25dICk7CgkJCQlkZWxldGUJ
aWRzW25dOwoJCQl9CgkJCWVsc2UgaWYoIGlkc1tuID0gbmFtZSsnMSddICkKCQkJ
ewoJCQkJSW50ZXJ2YWwuY291bnQtLTsKCQkJCXcuY2xlYXJJbnRlcnZhbCggaWQg
PSBpZHNbbl0gKTsKCQkJCWRlbGV0ZQlpZHNbbl07CgkJCX0KCQkJaWYoIGlkIGlu
IG5hbWVzICkgZGVsZXRlIG5hbWVzW2lkXTsKCQl9Cgl9OwoKCXcuSW50ZXJ2YWwg
PSB7CgkJICBzZXQ6CQlmdW5jdGlvbiAobmFtZSwgZnVuYywgbVNlYywgY291bnQp
eyByZXR1cm4gVGltZW91dC5zZXQobmFtZSwgZnVuYywgbVNlYywgY291bnQgfHwg
dHJ1ZSk7IH0KCQksIGNsZWFyOglUaW1lb3V0LmNsZWFyCgkJLCBjb3VudDoJMAoJ
fTsKCn0pKHdpbmRvdyk7CgoKLyoqCiAqIEBvYmplY3QJanNFdmVudAogKi8KdmFy
IGpzRXZlbnQJPSB7CgoJaW52ZXJ0OiB7CgkJCQkgIGZvY3VzOgkJJ2JsdXInCgkJ
CQksIGtleWRvd246CQkna2V5dXAnCgkJCQksIG1vdXNlb3ZlcjoJJ21vdXNlb3V0
JwoJCQkJLCBtb3VzZWVudGVyOgknbW91c2VsZWF2ZScKCQkJfSwKCglLZXk6CXsK
CQkJCSAgJ3VwJzoJCQkzOAoJCQkJLCAnZG93bic6CQk0MAoJCQkJLCAnbGVmdCc6
CQkzNwoJCQkJLCAncmlnaHQnOgkJMzkKCQkJCSwgJ2VzYyc6CQkyNwoJCQkJLCAn
aG9tZSc6CQkzNgoJCQkJLCAnZW5kJzoJCTM1CgkJCQksICdwYWdldXAnOgkJMzMK
CQkJCSwgJ3BhZ2Vkb3duJzoJMzQKCQkJCSwgJ2lucyc6CQk0NQoJCQkJLCAnZGVs
JzoJCTQ2CgkJCQksICdpbnNlcnQnOgkJNDUKCQkJCSwgJ2RlbGV0ZSc6CQk0NgoJ
CQkJLCAnYmFjayc6CQk4CgkJCQksICdiYWNrc3BhY2UnOgk4CgkJCQksICdzcGFj
ZSc6CQkzMgoJCQkJLCAnYmFyJzoJCTMyCgkJCQksICdzcGFjZWJhcic6CTMyCgkJ
CQksICdlbnRlcic6CQkxMwoJCQkJLCAnY21kJzoJCTIyNAoJCQkJLCAncGF1c2Un
OgkJMTkKCQkJCSwgJ2JyZWFrJzoJCTMKCQkJCSwgJ2FsdCc6CQkxOAoJCQkJLCAn
Y3RybCc6CQkxNwoJCQkJLCAnc2hpZnQnOgkJMTYKCQkJCSwgJ3RhYic6CQk5CgkJ
CQksICdjYXBzJzoJCTIwCgkJCQksICdjYXBzbG9jayc6CTIwCgkJCQksICdwbHVz
JzoJCTEwNwoJCQkJLCAnbWludXMnOgkJMTA5CgkJCQksIGlzQ29udHJvbDoJZnVu
Y3Rpb24gKGMvKkludCovKS8qQm9vbCoveyByZXR1cm4gYyA8IDQ3OyB9CgkJCX0s
CgoJTW91c2U6ICB7CgkJICBpc0xlZnQ6IAlmdW5jdGlvbiAoZSl7IHJldHVybiBl
LndoaWNoIDwgMjsgfQoJCSwgaXNNaWRkbGU6CWZ1bmN0aW9uIChlKXsgcmV0dXJu
IGUud2hpY2ggPT0gMjsgfQoJCSwgaXNSaWdodDoJZnVuY3Rpb24gKGUpeyByZXR1
cm4gZS53aGljaCA+IDI7IH0KCX0sCgoKCWFkZDogZnVuY3Rpb24gKG8sIG5hbWUs
IGxpc3RlbmVyLCBjYXB0dXJlcyl7CgkJaWYoIG8gKXsKCQkJY2FwdHVyZXMJPSAo
Y2FwdHVyZXMgPyB0cnVlIDogZmFsc2UpOwoJCQlvLmF0dGFjaEV2ZW50CgkJCQk/
IG8uYXR0YWNoRXZlbnQoJ29uJyArIG5hbWUsIGxpc3RlbmVyLCBjYXB0dXJlcykK
CQkJCTogby5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyLCBjYXB0dXJl
cyk7CgkJfQoJfSwKCgoJcmVtb3ZlOiBmdW5jdGlvbiAobywgbmFtZSwgbGlzdGVu
ZXIsIGNhcHR1cmVzKXsKCQlpZiggbyApewoJCQljYXB0dXJlcwk9IChjYXB0dXJl
cyA/IHRydWUgOiBmYWxzZSk7CgkJCW8uZGV0YWNoRXZlbnQKCQkJCT8gby5kZXRh
Y2hFdmVudCgnb24nICsgbmFtZSwgbGlzdGVuZXIsIGNhcHR1cmVzKQoJCQkJOiBv
LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIGNhcHR1cmVzKTsK
CQl9Cgl9LAoKCWZpcmU6IGZ1bmN0aW9uIChlLCBuKQoJewoJCWRvCgkJewoJCQlq
UXVlcnkoZSkudHJpZ2dlcihuKTsKCQl9CgkJd2hpbGUoIChlID0gZS5wYXJlbnRO
b2RlKSAmJiAoZS5wYXJlbnROb2RlICE9IGRvY3VtZW50KSApOwoJfQoKfTsKT2Jq
ZWN0LmZvckVhY2goanNFdmVudC5pbnZlcnQsIGZ1bmN0aW9uICh2LCBrKSB7IGpz
RXZlbnQuaW52ZXJ0W3ZdID0gazsgfSk7Ci8vIEVORDoganNFdmVudHt9OwoKCi8v
IDwgYWxpYXM6IGpzQ29yZQppZiggdHlwZW9mIHdpbmRvdy5qc0NvcmVBbGlhcyAh
PT0gJ3VuZGVmaW5lZCcgKQp7CglpZiggdHlwZW9mIGpzQ29yZUFsaWFzID09PSAn
c3RyaW5nJyApCWpzQ29yZUFsaWFzCT0geyBqc0NvcmU6IGpzQ29yZUFsaWFzIH07
Cglmb3IoIHZhciBhIGluIGpzQ29yZUFsaWFzICkJanNMb2FkZXIuYWRkQWxpYXMo
YSwganNDb3JlQWxpYXNbYV0pOwp9CmVsc2UganNMb2FkZXIuYWRkQWxpYXMoJ2pz
Q29yZScsICdodHRwOi8vcnViYXhhLm9yZy8uanNDb3JlLycpOwovLyBhbGlhczog
anNDb3JlID4KCi8vIEZhc3QgaW5pdCBqc0xvYWRlcgpqc0NvcmUuZWFjaCh3aW5k
b3cuanNMb2FkZXJMb2FkZWQsIGZ1bmN0aW9uIChpLCB2KXsganNMb2FkZXIubG9h
ZGVkKHYsICEwKTsgfSk7CgoKalF1ZXJ5KGZ1bmN0aW9uICgpIHsKCWpzQ29yZS5y
ZWFkeSgpOwp9KTsKCgovLwovLyBNYXRoCi8vCiRFKE1hdGgsIHsKCglLQjogMTAy
NCwKCU1COiBNYXRoLnBvdygxMDI0LCAyKSwKCUdCOiBNYXRoLnBvdygxMDI0LCAz
KSwKCVRCOiBNYXRoLnBvdygxMDI0LCA0KSwKCglzaWduOiBmdW5jdGlvbiAoYSkK
CXsKCQlyZXR1cm4JKGEgPj0gMCkgPyAxIDogLTE7Cgl9LAoKCV9yb3VuZDogTWF0
aC5yb3VuZCwKCXJvdW5kOiBmdW5jdGlvbiAodiwgeikKCXsKCQlyZXR1cm4gKHog
JiYgKHogPSBNYXRoLnBvdygxMCwgeikpID8gTWF0aC5fcm91bmQodip6KS96IDog
TWF0aC5fcm91bmQodikpOwoJfSwKCglyYW5kOiBmdW5jdGlvbiAobWluLCBtYXgp
Cgl7CgkJaWYoIGRlZmluZWQobWluKSApCgkJewoJCQlyZXR1cm4JZGVmaW5lZCht
YXgpID8gbWluICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogKG1heCAtIG1p
bikpIDogTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogbWluKTsKCQl9CgkJcmV0
dXJuCU1hdGgucmFuZG9tKCk7Cgl9LAoKCW1pbl9tYXg6IGZ1bmN0aW9uICh2LCBt
LCBNKQoJewoJCXJldHVybglNYXRoLm1heChtLCBNYXRoLm1pbih2LCBNKSk7Cgl9
Cgp9KTsKCgovKioKICogV2luZG93CiAqLwokRSh3aW5kb3csCnsKCW5vdzogZnVu
Y3Rpb24gKCl7IHJldHVybiAobmV3IERhdGUpLmdldFRpbWUoKTsgfSwKCglyZWxv
YWQ6IGZ1bmN0aW9uICgpeyBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZi5z
cGxpdCgnIycpWzBdOyB9Cgp9KTsKCgpqc0xvYWRlci5sb2FkZWQoJ3tqUXVlcnl9
anF1ZXJ5Jyk7CgovKioKICogQGV4cG9zZQogKi8KaWYgKCFPYmplY3QuaXNPYmpl
Y3QpIHsKCU9iamVjdC5pc09iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCkgewoJCXJl
dHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0g
IltvYmplY3QgT2JqZWN0XSI7Cgl9Owp9CgovLyAuL2RhdGEvY29tbW9uL2pzL2Fq
cy9TdHJpbmcuanMgc3RhcnQKCmRlZmluZSgnYWpzL1N0cmluZycsIGZ1bmN0aW9u
KCkgewovKioKICogRXh0ZW5zaW9ucyBmb3IgIlN0cmluZyIgb2JqZWN0CiAqCiAq
IEBhdXRob3IJUnViYVhhCTx0cmFzaEBydWJheGEub3JnPgogKiBAdmVyc2lvbgkx
LjAKICovCgooZnVuY3Rpb24gKHVuZGVmKQp7CgoJU3RyaW5nLl9hcwk9IHsKCQkJ
CQkgICInIjoJbmV3IFJlZ0V4cCgnKF58W15cXFxcXSkoKFxcXFwpKilcJycsICdn
JykKCQkJCQksICciJzoJbmV3IFJlZ0V4cCgnKF58W15cXFxcXSkoKFxcXFwpKiki
JywgJ2cnKQoJCQkJfTsKCgoKCSQuZXh0ZW5kKFN0cmluZywgewoKCQlfaGV4OiBm
dW5jdGlvbiAoaCl7IHJldHVybiBoLmxlbmd0aCA8IDIgPyBoKycnK2ggOiBoOyB9
LAoJCXJnYjJoZXg6IGZ1bmN0aW9uIChjLypTdHJpbmd8QXJyYXl8b2JqZWN0Ki8p
CgkJewoJCQlpZiggdHlwZW9mIGMgPT0gJ3N0cmluZycgKQoJCQl7CgkJCQlpZigg
Yy5pbmRleE9mKCcsJykgPCAwICkJcmV0dXJuCScjJysgYy5yZXBsYWNlKCcjJywn
JykucmVwbGFjZSgvXihcdykoXHcpKFx3KSQvZ2ksICckMSQxJDIkMiQzJDMnKTsK
CQkJCWMgPSBjLnJlcGxhY2UoLyhyZ2JcKHxcKXxccyspL2lnLCcnKS5zcGxpdCgn
LCcpOwoJCQl9CgkJCWVsc2UgaWYoIGMucmVkICkgeyBjWzBdID0gYy5yZWQ7IGNb
MV0gPSBjLmdyZWVuOyBjWzJdID0gYy5ibHVlOyB9CgkJCWMgPSBTdHJpbmcuX2hl
eCgoY1swXSoxKS50b1N0cmluZygxNikpICsgU3RyaW5nLl9oZXgoKGNbMV0qMSku
dG9TdHJpbmcoMTYpKSArIFN0cmluZy5faGV4KChjWzJdKjEpLnRvU3RyaW5nKDE2
KSk7CgkJCXJldHVybiAnIycrIGM7CgkJfSwKCgkJYWRkU2xhc2hlczogZnVuY3Rp
b24gKHMsIHEpCgkJewoJCQlyZXR1cm4JU3RyaW5nKHMpLnJlcGxhY2UoU3RyaW5n
Ll9hc1txPShxfHwiJyIpXSwgIiQxJDJcXCIgKyBxKTsKCQl9LAoKCQlwYWRaZXJv
OiBmdW5jdGlvbihuLCBsKQoJCXsKCQkJdmFyIHMgPSAnJyArIG47CgkJCXdoaWxl
IChzLmxlbmd0aCA8IGwpIHMgPSAnMCcgKyBzOwoJCQlyZXR1cm4gczsKCQl9LAoK
CQl0cmltOiBmdW5jdGlvbiAocykKCQl7CgkJCXJldHVybglTdHJpbmcocykucmVw
bGFjZSgvXihbXHNcclxuXSspfChbXHNcclxuXSspJC9nLCAnJyk7CgkJfSwKCgkJ
bnVtOglmdW5jdGlvbiAobiwgTCwgaSkKCQl7CgkJICBpZiggTCA9PSBudWxsICkg
cmV0dXJuICcnOwoKCQkJdmFyIHgJPSAoKG4lMTAwIDw9IDEwKSB8fCAobiUxMDAg
Pj0gMjApKSA/IG4gJSAxMCA6IDA7CgkJCXZhciBsCT0gTC5sZW5ndGg7CgoJCQlp
ZiggbCA9PSAyICYmIHggPT0gMSApCXggPSAwOwoJCQllbHNlIGlmKCBsID09IDMg
JiYgeCA+IDEgKQoJCQl7CgkJCQl4ID0geCA8IDUgPyAyIDogMDsKCQkJfQoKCQkg
IHJldHVybiAgIChpID8gbiArIChpICYmIChpIT0xKSA/IGkgOiAnJykgOiAnJykg
KwoJCQkJCQkJKHR5cGVvZihMKSAhPSAnc3RyaW5nJwoJCQkJCQkJCT8gKExbeF0g
fHwgIExbKHggPiAxICYmIHggPCA1KSA/IHggOiAwXSB8fCBMW3ggPiAxPzE6MF0p
CgkJCQkJCQkJOiBMCgkJCQkJCQkpCgkJCQkJCTsKCQl9LAoKCQl1Y2ZpcnN0OiBm
dW5jdGlvbiAocykKCQl7CgkJCXJldHVybglzLmNoYXJBdCgwKS50b1VwcGVyQ2Fz
ZSgpICsgcy5zdWJzdHIoMSk7CgkJfSwKCgoJCXJlcGVhdDogZnVuY3Rpb24gKHMs
IG4pCgkJewoJCQl2YXIgciA9ICcnLCBpID0gMDsKCQkJZm9yKCA7IGkgPCBuOyBp
KysgKSByICs9IHM7CgkJCXJldHVybglyOwoJCX0sCgoJCXRvUXVlcnk6IGZ1bmN0
aW9uIChvKQoJCXsKCQkJdmFyIHMJPSAnJywgaSA9IDAsIGssIGtuLCB2OwoKCQkJ
aWYoIG8gKQoJCQl7CgkJCQlpZiggdHlwZW9mIG8gIT0gJ3N0cmluZycgKQoJCQkJ
ewoJCQkJCXMJPSBbXTsKCQkJCQlmb3IoIHZhciBwIGluIG8gKSBpZiggcCAhPSAn
JyApCgkJCQkJewoJCQkJCQl2ID0gZGVmaW5lZChvW3BdLCAnJyk7CgkJCQkJCWlm
KCB2ICYmIHYuY29uc3RydWN0b3IgPT09IEFycmF5ICl7CgkJCQkJCQlmb3IoIGsg
PSAwLCBrbiA9IHYubGVuZ3RoOyBrIDwga247IGsrKyApewoJCQkJCQkJCXNbaSsr
XSA9IHAgKyc9JysgZW5jb2RlVVJJQ29tcG9uZW50KCBkZWZpbmVkKHZba10sICcn
KSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJc1tpKytd
ID0gcCArICh2ICE9IG51bGwgJiYgdiAhPT0gJycgPyAnPScrIGVuY29kZVVSSUNv
bXBvbmVudCggdiApIDogJycpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCXMJPSBzLmpv
aW4oJyYnKTsKCQkJCX0KCQkJCWVsc2UgcyA9IG87CgkJCX0KCgkJCXJldHVybglz
OwoJCX0sCgoKCQl0b09iamVjdDogZnVuY3Rpb24gKHMpewoJCQl2YXIgbyA9IHt9
OwoJCQlpZiggdHlwZW9mIHMgPT09ICdvYmplY3QnICl7CgkJCQlvID0gcyB8fCBv
OwoJCQl9CgkJCWVsc2UgaWYoIHMgPSBTdHJpbmcocykgKQoJCQl7CgkJCQlpZigg
cy5pbmRleE9mKCc/JykgPiAtMSB8fCAvXmh0dHA6Ly50ZXN0KHMpKSBzID0gcy5z
cGxpdCgnPycpWzFdIHx8ICcnOwoKCQkJCXMJPSBzLnNwbGl0KCcmJyk7CgkJCQlm
b3IoIHZhciBpID0gMCwgbiA9IHMubGVuZ3RoLCB2OyBpIDwgbjsgaSsrICkgaWYo
IHNbaV0gIT0gJycgKQoJCQkJewoJCQkJCXNbaV0JPSBzW2ldLnNwbGl0KCc9Jyk7
CgkJCQkJdiAJCT0gc1tpXVsxXTsKCgkJCQkJaWYoIHR5cGVvZiB2ID09ICdzdHJp
bmcnICkKCQkJCQkJdHJ5eyB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHYpOyB9IGNh
dGNoIChlKSB7IHYgPSB1bmVzY2FwZSh2KTsgfQoJCQkJCWVsc2UKCQkJCQkJdgk9
ICcnOwoKCQkJCQlvW3NbaV1bMF1dCT0gdjsKCQkJCX0KCQkJCXJldHVybglvOwoJ
CQl9CgoJCQlyZXR1cm4JbzsKCQl9LAoKCgkJaHRtbDJ0ZXh0OiBmdW5jdGlvbiAo
aC8qOmh0bWwqLykKCQl7CgkJCXJldHVybglTdHJpbmcoaCkKCQkJCQkJCS5yZXBs
YWNlKC8mL2csICcmYW1wOycpCgkJCQkJCQkucmVwbGFjZSgvPC9nLCAnJmx0Oycp
CgkJCQkJCQkucmVwbGFjZSgvPi9nLCAnJmd0OycpCgkJCQkJCQkucmVwbGFjZSgv
Ii9nLCAnJnF1b3Q7JykKCQkJOwoJCX0sCgoKCQlubDJicjogZnVuY3Rpb24gKHQp
CgkJewoJCQlyZXR1cm4JU3RyaW5nKHQpLnJlcGxhY2UoL1tcclxuXS9nLCAnPGJy
IC8+Jyk7CgkJfSwKCgoJCXdvcmRXcmFwOiBmdW5jdGlvbiAodC8qOlRleHQqLywg
bS8qOk1heFdvcmQqLywgbC8qOk1heExlbmd0aCovLCBlLyo6RW5kKi8sIHNwYWNl
QWZ0ZXJNYXhMZW5ndGgpCgkJewoJCQl0CT0gU3RyaW5nKHQpLnJlcGxhY2UobmV3
IFJlZ0V4cCgnKFxcU3snKyhtfHwyMCkrJ30pJywgJ2lnJyksICckMSAnKTsKCgkJ
CWlmKCBsICYmIHQubGVuZ3RoID4gbCApewoJCQkJaWYgKHNwYWNlQWZ0ZXJNYXhM
ZW5ndGgpIHsKCQkJCQlmb3IoIGwtLTsgbDx0Lmxlbmd0aDsgbCsrKSBpZiggL1xz
Ly50ZXN0KHQuY2hhckF0KGwpKSApeyBicmVhazsgfQoJCQkJfSBlbHNlIHsKCQkJ
CQlmb3IoIGwrKzsgbC0tOyApIGlmKCAvXHMvLnRlc3QodC5jaGFyQXQobCkpICl7
IGJyZWFrOyB9CgkJCQl9CgkJCQl0CT0gdC5zdWJzdHIoMCwgbCkgKyBlOwoJCQl9
CgoJCQlyZXR1cm4JdDsKCQl9LAoKCQlzdXBwbGFudDogZnVuY3Rpb24oc3RyLCBv
KQoJCXsKCQkJcmV0dXJuIHN0ci5yZXBsYWNlKC8jXHsoW15ce1x9XSopXH0vZywK
CQkJCWZ1bmN0aW9uKGEsIGIpIHsKCQkJCQl2YXIgciA9IG9bYl07CgkJCQkJcmV0
dXJuIHR5cGVvZiByID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgciA9PT0gJ251bWJl
cicgPyByIDogYTsKCQkJCX0KCQkJKTsKCQl9LAoKCQludW1iZXJGb3JtYXQ6IGZ1
bmN0aW9uIChuLypOdW1iZXIqLywgZC8qSW50Ki8sIGYvKlN0cmluZyovLCBzLypT
dHJpbmcqLykKCQl7CgkJCXZhciBuID0gTWF0aC5yb3VuZChuLCBkKS50b1N0cmlu
ZygpLnNwbGl0KCcuJyk7CgkJCWlmKCBzICkgZm9yKCB2YXIgaSA9IG5bMF0ubGVu
Z3RoLTM7IGkgPj0gMDsgaSAtPSAzICkgblswXSA9IG5bMF0uc3Vic3RyKDAsIGkp
ICsgcyArIG5bMF0uc3Vic3RyKGkpOwoJCQlyZXR1cm4JblswXSArIChuWzFdID8g
ZiArIG5bMV0gOiAnJyk7CgkJfSwKCgkJc2l6ZUZvcm1hdDogZnVuY3Rpb24oZmls
ZXNpemUpewoJCQlpZiAoZmlsZXNpemUgPj0gTWF0aC5HQil7CgkJCQlmaWxlc2l6
ZSA9IFN0cmluZy5udW1iZXJGb3JtYXQoZmlsZXNpemUgLyBNYXRoLkdCLCAyLCAn
LicsICcnKSArICcgJyArIExhbmcuZ2V0KCdTaXplJykuZ2I7CgkJCX0gZWxzZSB7
CgkJCQlpZiAoZmlsZXNpemUgPj0gTWF0aC5NQil7CgkJCQkJZmlsZXNpemUgPSBT
dHJpbmcubnVtYmVyRm9ybWF0KGZpbGVzaXplIC8gTWF0aC5NQiwgMiwgJy4nLCAn
JykgKyAnICcgKyBMYW5nLmdldCgnU2l6ZScpLm1iOwoJCQkJfSBlbHNlIHsKCQkJ
CQlpZiAoZmlsZXNpemUgPj0gTWF0aC5LQil7CgkJCQkJCWZpbGVzaXplID0gU3Ry
aW5nLm51bWJlckZvcm1hdChmaWxlc2l6ZSAvIE1hdGguS0IsIDApICsgJyAnICsg
TGFuZy5nZXQoJ1NpemUnKS5rYjsKCQkJCQl9IGVsc2UgewoJCQkJCQlmaWxlc2l6
ZSA9IFN0cmluZy5udW1iZXJGb3JtYXQoZmlsZXNpemUsIDApICsgJyAnICsgTGFu
Zy5nZXQoJ1NpemUnKS5ieXRlczsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJcmV0dXJu
IGZpbGVzaXplOwoJCX0sCgoJCXNwcmludGY6IGZ1bmN0aW9uICh0eHQvKlssIGFy
Z3NdKi8pewoJCQlpZiggdHlwZW9mIHR4dCA9PT0gJ3N0cmluZycgKXsKCQkJCWZv
ciggdmFyIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKyAp
CgkJCQkJdHh0ID0gdHh0LnJlcGxhY2UoJyVzJywgYXJndW1lbnRzW2ldKTsKCQkJ
fQoJCQlyZXR1cm4JdHh0OwoJCX0sCgoJCWNvbmNhdDogZnVuY3Rpb24gKCkKCQl7
CgkJCXJldHVybglBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywg
JycpOwoJCX0sCgoJCXByZWdfcXVvdGU6IGZ1bmN0aW9uKHN0cikKCQl7CgkJCXJl
dHVybiAoc3RyIHx8ICcnKS5yZXBsYWNlKC8oW1xcXC5cK1wqXD9cW1xeXF1cJFwo
XClce1x9XD1cITw+XHxcOl0pL2csICdcXCQxJyk7CgkJfQoJfSk7CgoJdmFyIF9T
dHJpbmdfc3BsaXRfID0gU3RyaW5nLnByb3RvdHlwZS5zcGxpdAoJCSwgX1N0cmlu
Z19zcGxpdF9zaGltX2lzbm9ucGFydGljaXBhdGluZwoJOwoKCS8qCgkgW0JVR0ZJ
WCwgSUUgbHQgOSwgb2xkIHNhZmFyaV0gaHR0cDovL2Jsb2cuc3RldmVubGV2aXRo
YW4uY29tL2FyY2hpdmVzL2Nyb3NzLWJyb3dzZXItc3BsaXQKCSBNb3JlIGJldHRl
ciBzb2x1dGlvbjo6IGh0dHA6Ly94cmVnZXhwLmNvbS8KCSBTcGVlZCB0ZXN0OiBo
dHRwOi8vanNwZXJmLmNvbS9qcy1zcGxpdAoJICovCglpZigndGUnLnNwbGl0KC8o
cykqLylbMV0gIT0gdm9pZCAwIHx8CgkJJzFfMScuc3BsaXQoLyhfKS8pLmxlbmd0
aCAhPSAzKSB7CgkJX1N0cmluZ19zcGxpdF9zaGltX2lzbm9ucGFydGljaXBhdGlu
ZyA9IC8oKT8/Ly5leGVjKCIiKVsxXSA9PT0gdm9pZCAwOyAvLyBOUENHOiBub25w
YXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cAoKCQlTdHJpbmcucHJvdG90eXBl
LnNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHsKCQkJdmFyIHN0
ciA9IHRoaXM7CgkJCS8vIGlmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1
c2UgdGhlIG5hdGl2ZSBgc3BsaXRgCgkJCWlmKCEoc2VwYXJhdG9yIGluc3RhbmNl
b2YgUmVnRXhwKSkgey8vaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2Fs
bChzZXBhcmF0b3IpICE9PSAiW29iamVjdCBSZWdFeHBdIikgewoJCQkJLy9odHRw
Oi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMTQKCQkJCS8vSWYgc2VwYXJhdG9y
IGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgcmVzdWx0IGFycmF5IGNvbnRhaW5zIGp1
c3Qgb25lIFN0cmluZywgd2hpY2ggaXMgdGhlIHRoaXMgdmFsdWUgKGNvbnZlcnRl
ZCB0byBhIFN0cmluZykuIElmIGxpbWl0IGlzIG5vdCB1bmRlZmluZWQsIHRoZW4g
dGhlIG91dHB1dCBhcnJheSBpcyB0cnVuY2F0ZWQgc28gdGhhdCBpdCBjb250YWlu
cyBubyBtb3JlIHRoYW4gbGltaXQgZWxlbWVudHMuCgkJCQlpZihzZXBhcmF0b3Ig
PT09IHZvaWQgMCAmJiBsaW1pdCA9PT0gMClyZXR1cm4gW107CgoJCQkJcmV0dXJu
IF9TdHJpbmdfc3BsaXRfLmNhbGwoc3RyLCBzZXBhcmF0b3IsIGxpbWl0KTsKCQkJ
fQoKCQkJdmFyIG91dHB1dCA9IFtdCgkJCQksIGZsYWdzID0gKHNlcGFyYXRvclsi
aWdub3JlQ2FzZSJdID8gImkiIDogIiIpICsKCQkJCQkoc2VwYXJhdG9yWyJtdWx0
aWxpbmUiXSA/ICJtIiA6ICIiKSArCgkJCQkJKHNlcGFyYXRvclsiZXh0ZW5kZWQi
XSA/ICJ4IiA6ICIiKSArIC8vIFByb3Bvc2VkIGZvciBFUzYKCQkJCQkoc2VwYXJh
dG9yWyJzdGlja3kiXSAgID8gInkiIDogIiIpIC8vIEZpcmVmb3ggMysKCQkJCSwg
bGFzdExhc3RJbmRleCA9IDAKCQkJLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQg
YGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHkKCQkJCSwg
c2VwYXJhdG9yMgoJCQkJLCBtYXRjaAoJCQkJLCBsYXN0SW5kZXgKCQkJCSwgbGFz
dExlbmd0aAoJCQk7CgoJCQlzZXBhcmF0b3IgPSBuZXcgUmVnRXhwKHNlcGFyYXRv
ci5zb3VyY2UsIGZsYWdzICsgImciKTsKCgkJCXN0ciArPSAiIjsgLy8gVHlwZS1j
b252ZXJ0CgkJCWlmICghX1N0cmluZ19zcGxpdF9zaGltX2lzbm9ucGFydGljaXBh
dGluZykgewoJCQkJLy8gRG9lc24ndCBuZWVkIGZsYWdzIGd5LCBidXQgdGhleSBk
b24ndCBodXJ0CgkJCQlzZXBhcmF0b3IyID0gbmV3IFJlZ0V4cCgiXiIgKyBzZXBh
cmF0b3Iuc291cmNlICsgIiQoPyFcXHMpIiwgZmxhZ3MpOwoJCQl9CgoJCQkvKiBW
YWx1ZXMgZm9yIGBsaW1pdGAsIHBlciB0aGUgc3BlYzoKCQkJICogSWYgdW5kZWZp
bmVkOiA0Mjk0OTY3Mjk1IC8vIE1hdGgucG93KDIsIDMyKSAtIDEKCQkJICogSWYg
MCwgSW5maW5pdHksIG9yIE5hTjogMAoJCQkgKiBJZiBwb3NpdGl2ZSBudW1iZXI6
IGxpbWl0ID0gTWF0aC5mbG9vcihsaW1pdCk7IGlmIChsaW1pdCA+IDQyOTQ5Njcy
OTUpIGxpbWl0IC09IDQyOTQ5NjcyOTY7CgkJCSAqIElmIG5lZ2F0aXZlIG51bWJl
cjogNDI5NDk2NzI5NiAtIE1hdGguZmxvb3IoTWF0aC5hYnMobGltaXQpKQoJCQkg
KiBJZiBvdGhlcjogVHlwZS1jb252ZXJ0LCB0aGVuIHVzZSB0aGUgYWJvdmUgcnVs
ZXMKCQkJICovCgkJCWxpbWl0ID0gbGltaXQgPT09IHZvaWQgMCA/CgkJCQktMSA+
Pj4gMCA6IC8vIE1hdGgucG93KDIsIDMyKSAtIDEKCQkJCWxpbWl0ID4+PiAwIC8v
IFRvVWludDMyKGxpbWl0KQoJCQk7CgoJCQlpZiAoIWxpbWl0KSB7CgkJCQlyZXR1
cm4gW107CgkJCX0KCgkJCXdoaWxlIChtYXRjaCA9IHNlcGFyYXRvci5leGVjKHN0
cikpIHsKCQkJCS8vIGBzZXBhcmF0b3IubGFzdEluZGV4YCBpcyBub3QgcmVsaWFi
bGUgY3Jvc3MtYnJvd3NlcgoJCQkJbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBt
YXRjaFswXS5sZW5ndGg7CgoJCQkJaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5k
ZXgpIHsKCQkJCQlvdXRwdXQucHVzaChzdHIuc2xpY2UobGFzdExhc3RJbmRleCwg
bWF0Y2guaW5kZXgpKTsKCgkJCQkJLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVj
YCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGAg
Zm9yCgkJCQkJLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzCgkJ
CQkJLy8gX18gTk9UIFdPUktJTkcgX18gISEhIQoJCQkJCWlmICghX1N0cmluZ19z
cGxpdF9zaGltX2lzbm9ucGFydGljaXBhdGluZyAmJiBtYXRjaC5sZW5ndGggPiAx
KSB7CgkJCQkJCW1hdGNoWzBdLnJlcGxhY2Uoc2VwYXJhdG9yMiwgZnVuY3Rpb24o
KSB7CgkJCQkJCQlmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGgg
LSAyOyBpIDwgbDsgaSsrKSB7CgkJCQkJCQkJaWYgKGFyZ3VtZW50c1tpXSA9PT0g
dm9pZCAwKSB7CgkJCQkJCQkJCW1hdGNoW2ldID0gdm9pZCAwOwoJCQkJCQkJCX0K
CQkJCQkJCX0KCQkJCQkJfSk7CgkJCQkJfQoKCQkJCQlpZiAobWF0Y2gubGVuZ3Ro
ID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0ci5sZW5ndGgpIHsKCQkJCQkJb3V0cHV0
LnB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7CgkJCQkJfQoKCQkJ
CQlsYXN0TGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoOwoJCQkJCWxhc3RMYXN0SW5k
ZXggPSBsYXN0SW5kZXg7CgoJCQkJCWlmIChvdXRwdXQubGVuZ3RoID49IGxpbWl0
KSB7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCgkJCQlpZiAoc2VwYXJhdG9y
Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHsKCQkJCQlzZXBhcmF0b3IubGFz
dEluZGV4Kys7IC8vLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wCgkJCQl9CgkJCX0K
CgkJCWlmIChsYXN0TGFzdEluZGV4ID09PSBzdHIubGVuZ3RoKSB7CgkJCQlpZiAo
bGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yLnRlc3QoIiIpKSB7CgkJCQkJb3V0cHV0
LnB1c2goIiIpOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJb3V0cHV0LnB1c2goc3Ry
LnNsaWNlKGxhc3RMYXN0SW5kZXgpKTsKCQkJfQoKCQkJcmV0dXJuIG91dHB1dC5s
ZW5ndGggPiBsaW1pdCA/IG91dHB1dC5zbGljZSgwLCBsaW1pdCkgOiBvdXRwdXQ7
CgkJfQoJfQoKfSkoKTsKIAp9KTsKCi8vIC4vZGF0YS9jb21tb24vanMvYWpzL1N0
cmluZy5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9EYXRl
LmpzIHN0YXJ0CgovKioKICog0KDQsNGB0YjQuNGA0LXQvdC40LUg0LrQu9Cw0YHR
gdCwIERhdGUKICogQGF1dGhvcgkiUnViYVhhIgkJPHRyYXNoQHJ1YmF4YS5vcmc+
CiAqLwoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS91dGlscy9MYW5n
LmpzIHN0YXJ0CgovKioKICogQG9iamVjdAlMYW5nCiAqIEBhdXRob3IJUnViYVhh
CTx0cmFzaEBydWJheGEub3JnPgogKiBAdmVyc2lvbgkxLjAKICog0J7QsdGK0LXQ
utGCINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0YDQsNC30L3Ri9C80Lgg0Y/Qt9GL
0LrQsNC80LguCiAqLwoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9K
U09OLmpzIHN0YXJ0CgovKgogICAgaHR0cDovL3d3dy5KU09OLm9yZy9qc29uMi5q
cwogICAgMjAwOS0wOS0yOQoKICAgIFB1YmxpYyBEb21haW4uCgogICAgTk8gV0FS
UkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNL
LgoKICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWwKCiAgICBUaGlz
IGZpbGUgY3JlYXRlcyBhIGdsb2JhbCBKU09OIG9iamVjdCBjb250YWluaW5nIHR3
byBtZXRob2RzOiBzdHJpbmdpZnkKICAgIGFuZCBwYXJzZS4KCiAgICAgICAgSlNP
Ti5zdHJpbmdpZnkodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkKICAgICAgICAgICAg
dmFsdWUgICAgICAgYW55IEphdmFTY3JpcHQgdmFsdWUsIHVzdWFsbHkgYW4gb2Jq
ZWN0IG9yIGFycmF5LgoKICAgICAgICAgICAgcmVwbGFjZXIgICAgYW4gb3B0aW9u
YWwgcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyBob3cgb2JqZWN0CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQgZm9yIG9iamVj
dHMuIEl0IGNhbiBiZSBhCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuCgogICAgICAgICAgICBzcGFjZSAgICAg
ICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIG9mIG5lc3RlZCBzdHJ1Y3R1
cmVzLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUgdGV4dCB3aWxsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGJlIHBhY2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2Uu
IElmIGl0IGlzIGEgbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICBpdCB3
aWxsIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IGF0IGVh
Y2gKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuIElmIGl0IGlzIGEgc3Ry
aW5nIChzdWNoIGFzICdcdCcgb3IgJyZuYnNwOycpLAogICAgICAgICAgICAgICAg
ICAgICAgICBpdCBjb250YWlucyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGVu
dCBhdCBlYWNoIGxldmVsLgoKICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvZHVj
ZXMgYSBKU09OIHRleHQgZnJvbSBhIEphdmFTY3JpcHQgdmFsdWUuCgogICAgICAg
ICAgICBXaGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBmb3VuZCwgaWYgdGhlIG9iamVj
dCBjb250YWlucyBhIHRvSlNPTgogICAgICAgICAgICBtZXRob2QsIGl0cyB0b0pT
T04gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmUK
ICAgICAgICAgICAgc3RyaW5naWZpZWQuIEEgdG9KU09OIG1ldGhvZCBkb2VzIG5v
dCBzZXJpYWxpemU6IGl0IHJldHVybnMgdGhlCiAgICAgICAgICAgIHZhbHVlIHJl
cHJlc2VudGVkIGJ5IHRoZSBuYW1lL3ZhbHVlIHBhaXIgdGhhdCBzaG91bGQgYmUg
c2VyaWFsaXplZCwKICAgICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vdGhpbmcg
c2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSB0b0pTT04gbWV0aG9kCiAgICAgICAg
ICAgIHdpbGwgYmUgcGFzc2VkIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2
YWx1ZSwgYW5kIHRoaXMgd2lsbCBiZQogICAgICAgICAgICBib3VuZCB0byB0aGUg
dmFsdWUKCiAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHdvdWxkIHNlcmlh
bGl6ZSBEYXRlcyBhcyBJU08gc3RyaW5ncy4KCiAgICAgICAgICAgICAgICBEYXRl
LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gZihuKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMu
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBu
IDogbjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArCiAgICAgICAg
ICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0n
ICsKICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENEYXRlKCkp
ICAgICAgKyAnVCcgKwogICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdl
dFVUQ0hvdXJzKCkpICAgICArICc6JyArCiAgICAgICAgICAgICAgICAgICAgICAg
ICBmKHRoaXMuZ2V0VVRDTWludXRlcygpKSAgICsgJzonICsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWic7CiAg
ICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIGFu
IG9wdGlvbmFsIHJlcGxhY2VyIG1ldGhvZC4gSXQgd2lsbCBiZSBwYXNzZWQgdGhl
CiAgICAgICAgICAgIGtleSBhbmQgdmFsdWUgb2YgZWFjaCBtZW1iZXIsIHdpdGgg
dGhpcyBib3VuZCB0byB0aGUgY29udGFpbmluZwogICAgICAgICAgICBvYmplY3Qu
IFRoZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZyb20geW91ciBtZXRob2Qgd2ls
bCBiZQogICAgICAgICAgICBzZXJpYWxpemVkLiBJZiB5b3VyIG1ldGhvZCByZXR1
cm5zIHVuZGVmaW5lZCwgdGhlbiB0aGUgbWVtYmVyIHdpbGwKICAgICAgICAgICAg
YmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VyaWFsaXphdGlvbi4KCiAgICAgICAgICAg
IElmIHRoZSByZXBsYWNlciBwYXJhbWV0ZXIgaXMgYW4gYXJyYXkgb2Ygc3RyaW5n
cywgdGhlbiBpdCB3aWxsIGJlCiAgICAgICAgICAgIHVzZWQgdG8gc2VsZWN0IHRo
ZSBtZW1iZXJzIHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3Vs
dHMKICAgICAgICAgICAgc3VjaCB0aGF0IG9ubHkgbWVtYmVycyB3aXRoIGtleXMg
bGlzdGVkIGluIHRoZSByZXBsYWNlciBhcnJheSBhcmUKICAgICAgICAgICAgc3Ry
aW5naWZpZWQuCgogICAgICAgICAgICBWYWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSBK
U09OIHJlcHJlc2VudGF0aW9ucywgc3VjaCBhcyB1bmRlZmluZWQgb3IKICAgICAg
ICAgICAgZnVuY3Rpb25zLCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkLiBTdWNoIHZh
bHVlcyBpbiBvYmplY3RzIHdpbGwgYmUKICAgICAgICAgICAgZHJvcHBlZDsgaW4g
YXJyYXlzIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4g
dXNlCiAgICAgICAgICAgIGEgcmVwbGFjZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSB0
aG9zZSB3aXRoIEpTT04gdmFsdWVzLgogICAgICAgICAgICBKU09OLnN0cmluZ2lm
eSh1bmRlZmluZWQpIHJldHVybnMgdW5kZWZpbmVkLgoKICAgICAgICAgICAgVGhl
IG9wdGlvbmFsIHNwYWNlIHBhcmFtZXRlciBwcm9kdWNlcyBhIHN0cmluZ2lmaWNh
dGlvbiBvZiB0aGUKICAgICAgICAgICAgdmFsdWUgdGhhdCBpcyBmaWxsZWQgd2l0
aCBsaW5lIGJyZWFrcyBhbmQgaW5kZW50YXRpb24gdG8gbWFrZSBpdAogICAgICAg
ICAgICBlYXNpZXIgdG8gcmVhZC4KCiAgICAgICAgICAgIElmIHRoZSBzcGFjZSBw
YXJhbWV0ZXIgaXMgYSBub24tZW1wdHkgc3RyaW5nLCB0aGVuIHRoYXQgc3RyaW5n
IHdpbGwKICAgICAgICAgICAgYmUgdXNlZCBmb3IgaW5kZW50YXRpb24uIElmIHRo
ZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRoZW4KICAgICAgICAgICAg
dGhlIGluZGVudGF0aW9uIHdpbGwgYmUgdGhhdCBtYW55IHNwYWNlcy4KCiAgICAg
ICAgICAgIEV4YW1wbGU6CgogICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdp
ZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSk7CiAgICAgICAgICAgIC8vIHRl
eHQgaXMgJ1siZSIseyJwbHVyaWJ1cyI6InVudW0ifV0nCgoKICAgICAgICAgICAg
dGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0s
IG51bGwsICdcdCcpOwogICAgICAgICAgICAvLyB0ZXh0IGlzICdbXG5cdCJlIixc
blx0e1xuXHRcdCJwbHVyaWJ1cyI6ICJ1bnVtIlxuXHR9XG5dJwoKICAgICAgICAg
ICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFtuZXcgRGF0ZSgpXSwgZnVuY3Rpb24g
KGtleSwgdmFsdWUpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV0g
aW5zdGFuY2VvZiBEYXRlID8KICAgICAgICAgICAgICAgICAgICAnRGF0ZSgnICsg
dGhpc1trZXldICsgJyknIDogdmFsdWU7CiAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAvLyB0ZXh0IGlzICdbIkRhdGUoLS0tY3VycmVudCB0aW1lLS0tKSJdJwoK
CiAgICAgICAgSlNPTi5wYXJzZSh0ZXh0LCByZXZpdmVyKQogICAgICAgICAgICBU
aGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmpl
Y3Qgb3IgYXJyYXkuCiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVy
cm9yIGV4Y2VwdGlvbi4KCiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVy
IHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmQKICAg
ICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNo
IG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsCiAgICAgICAgICAgIGFuZCBpdHMgcmV0
dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUu
CiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhl
biB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC4KICAgICAgICAgICAgSWYg
aXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQu
CgogICAgICAgICAgICBFeGFtcGxlOgoKICAgICAgICAgICAgLy8gUGFyc2UgdGhl
IHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdp
bGwKICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy4K
CiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UodGV4dCwgZnVuY3Rpb24g
KGtleSwgdmFsdWUpIHsKICAgICAgICAgICAgICAgIHZhciBhOwogICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsKICAgICAgICAg
ICAgICAgICAgICBhID0KL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KVQoXGR7Mn0p
OihcZHsyfSk6KFxkezJ9KD86XC5cZCopPylaJC8uZXhlYyh2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgaWYgKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNd
LCArYVs0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2
XSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgICAgfSk7CgogICAg
ICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKCdbIkRhdGUoMDkvMDkvMjAwMSki
XScsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CiAgICAgICAgICAgICAgICB2YXIg
ZDsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcn
ICYmCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIDUpID09
PSAnRGF0ZSgnICYmCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNl
KC0xKSA9PT0gJyknKSB7CiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRl
KHZhbHVlLnNsaWNlKDUsIC0xKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGQp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlOwogICAgICAgICAgICB9KTsKCgogICAgVGhpcyBpcyBhIHJlZmVy
ZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlm
eSwgb3IKICAgIHJlZGlzdHJpYnV0ZS4KCiAgICBUaGlzIGNvZGUgc2hvdWxkIGJl
IG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LgogICAgU2VlIGh0dHA6Ly9qYXZh
c2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbAoKICAgIFVTRSBZT1VSIE9X
TiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9N
IFNFUlZFUlMgWU9VIERPCiAgICBOT1QgQ09OVFJPTC4KKi8KCi8qanNsaW50IGV2
aWw6IHRydWUsIHN0cmljdDogZmFsc2UgKi8KCi8qbWVtYmVycyAiIiwgIlxiIiwg
Ilx0IiwgIlxuIiwgIlxmIiwgIlxyIiwgIlwiIiwgSlNPTiwgIlxcIiwgYXBwbHks
CiAgICBjYWxsLCBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxsWWVh
ciwgZ2V0VVRDSG91cnMsCiAgICBnZXRVVENNaW51dGVzLCBnZXRVVENNb250aCwg
Z2V0VVRDU2Vjb25kcywgaGFzT3duUHJvcGVydHksIGpvaW4sCiAgICBsYXN0SW5k
ZXgsIGxlbmd0aCwgcGFyc2UsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xp
Y2UsIHN0cmluZ2lmeSwKICAgIHRlc3QsIHRvSlNPTiwgdG9TdHJpbmcsIHZhbHVl
T2YKKi8KCgovLyBDcmVhdGUgYSBKU09OIG9iamVjdCBvbmx5IGlmIG9uZSBkb2Vz
IG5vdCBhbHJlYWR5IGV4aXN0LiBXZSBjcmVhdGUgdGhlCi8vIG1ldGhvZHMgaW4g
YSBjbG9zdXJlIHRvIGF2b2lkIGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuCgpp
ZiAoIXRoaXMuSlNPTikgewogICAgdGhpcy5KU09OID0ge307Cn0KCihmdW5jdGlv
biAoKSB7CgogICAgZnVuY3Rpb24gZihuKSB7CiAgICAgICAgLy8gRm9ybWF0IGlu
dGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy4KICAgICAgICByZXR1
cm4gbiA8IDEwID8gJzAnICsgbiA6IG47CiAgICB9CgogICAgaWYgKHR5cGVvZiBE
YXRlLnByb3RvdHlwZS50b0pTT04gIT09ICdmdW5jdGlvbicpIHsKCiAgICAgICAg
RGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkgewoKICAgICAg
ICAgICAgcmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKSA/CiAgICAgICAg
ICAgICAgICAgICB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArCiAgICAg
ICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArCiAg
ICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyAr
CiAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6
JyArCiAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICAr
ICc6JyArCiAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkg
ICArICdaJyA6IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgU3RyaW5nLnByb3Rv
dHlwZS50b0pTT04gPQogICAgICAgIE51bWJlci5wcm90b3R5cGUudG9KU09OID0K
ICAgICAgICBCb29sZWFuLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5
KSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTsKICAgICAgICB9
OwogICAgfQoKLy8JYmVya2VsIE9wZXJhIDkuMjYg0L3QsCDQutC+0YDQvtGC0LrQ
uNC5INGB0LjQvdGC0LDQutGB0LjRgSDRgNGD0LPQsNC10YLRgdGPCi8vCXZhciBj
eCA9IC9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdi
NVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1
ZmZmMC1cdWZmZmZdL2c7Ci8vCXZhciBlc2NhcGFibGUgPSAvW1xcXCJceDAwLVx4
MWZceDdmLVx4OWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1
XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVm
ZmYwLVx1ZmZmZl0vZzsKCgl2YXIgY3ggPSBuZXcgUmVnRXhwKCdbXHUwMDAwXHUw
MGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZc
dTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdJywg
J2cnKTsKCXZhciBlc2NhcGFibGUgPSBuZXcgUmVnRXhwKCdbXFxcIlx4MDAtXHgx
Zlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVc
dTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZm
ZjAtXHVmZmZmXScsICdnJyk7CgogICAgdmFyIGdhcCwKICAgICAgICBpbmRlbnQs
CiAgICAgICAgbWV0YSA9IHsgICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0
aXR1dGlvbnMKICAgICAgICAgICAgJ1xiJzogJ1xcYicsCiAgICAgICAgICAgICdc
dCc6ICdcXHQnLAogICAgICAgICAgICAnXG4nOiAnXFxuJywKICAgICAgICAgICAg
J1xmJzogJ1xcZicsCiAgICAgICAgICAgICdccic6ICdcXHInLAogICAgICAgICAg
ICAnIicgOiAnXFwiJywKICAgICAgICAgICAgJ1xcJzogJ1xcXFwnCiAgICAgICAg
fSwKICAgICAgICByZXA7CgoKICAgIGZ1bmN0aW9uIHF1b3RlKHN0cmluZykgewoK
Ly8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMs
IG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBubwovLyBiYWNrc2xhc2ggY2hhcmFj
dGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5k
IGl0LgovLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVu
ZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGUKLy8gc2VxdWVuY2VzLgoK
ICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDsKICAgICAgICByZXR1cm4g
ZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/CiAgICAgICAgICAgICciJyArIHN0cmlu
Zy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAg
ICAgIHZhciBjID0gbWV0YVthXTsKICAgICAgICAgICAgICAgIHJldHVybiB0eXBl
b2YgYyA9PT0gJ3N0cmluZycgPyBjIDoKICAgICAgICAgICAgICAgICAgICAnXFx1
JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGlj
ZSgtNCk7CiAgICAgICAgICAgIH0pICsgJyInIDoKICAgICAgICAgICAgJyInICsg
c3RyaW5nICsgJyInOwogICAgfQoKCiAgICBmdW5jdGlvbiBzdHIoa2V5LCBob2xk
ZXIpIHsKCi8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS4KCiAg
ICAgICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBsb29wIGNvdW50ZXIuCiAgICAg
ICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LgogICAgICAgICAg
ICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLgogICAgICAgICAgICBs
ZW5ndGgsCiAgICAgICAgICAgIG1pbmQgPSBnYXAsCiAgICAgICAgICAgIHBhcnRp
YWwsCiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07CgovLyBJZiB0aGUg
dmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSBy
ZXBsYWNlbWVudCB2YWx1ZS4KCiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2
YWx1ZSA9PT0gJ29iamVjdCcgJiYKICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1
ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZS50b0pTT04oa2V5KTsKICAgICAgICB9CgovLyBJZiB3ZSB3ZXJlIGNhbGxl
ZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFj
ZXIgdG8KLy8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuCgogICAgICAgIGlm
ICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgIHZhbHVl
ID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTsKICAgICAgICB9CgovLyBX
aGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSdzIHR5cGUuCgog
ICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CiAgICAgICAgY2FzZSAnc3Ry
aW5nJzoKICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTsKCiAgICAgICAg
Y2FzZSAnbnVtYmVyJzoKCi8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4g
RW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLgoKICAgICAgICAgICAg
cmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7
CgogICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgIGNhc2UgJ251bGwnOgoK
Ly8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0
IHRvIGEgc3RyaW5nLiBOb3RlOgovLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9k
dWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpbgovLyB0aGUg
cmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMgZ2V0cyBmaXhlZCBzb21lZGF5LgoKICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7CgovLyBJZiB0aGUgdHlwZSBp
cyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBv
ciBhbiBhcnJheSBvcgovLyBudWxsLgoKICAgICAgICBjYXNlICdvYmplY3QnOgoK
Ly8gRHVlIHRvIGEgc3BlY2lmaWNhdGlvbiBibHVuZGVyIGluIEVDTUFTY3JpcHQs
IHR5cGVvZiBudWxsIGlzICdvYmplY3QnLAovLyBzbyB3YXRjaCBvdXQgZm9yIHRo
YXQgY2FzZS4KCiAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiAnbnVsbCc7CiAgICAgICAgICAgIH0KCi8vIE1ha2UgYW4gYXJy
YXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWluZyB0
aGlzIG9iamVjdCB2YWx1ZS4KCiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7CiAg
ICAgICAgICAgIHBhcnRpYWwgPSBbXTsKCi8vIElzIHRoZSB2YWx1ZSBhbiBhcnJh
eT8KCiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFw
cGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykgewoKLy8gVGhlIHZhbHVl
IGlzIGFuIGFycmF5LiBTdHJpbmdpZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwg
YXMgYSBwbGFjZWhvbGRlcgovLyBmb3Igbm9uLUpTT04gdmFsdWVzLgoKICAgICAg
ICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAg
ICAgICAgIHBhcnRpYWxbaV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJzsKICAg
ICAgICAgICAgICAgIH0KCi8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dl
dGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLCBhbmQgd3JhcCB0aGVtIGluCi8v
IGJyYWNrZXRzLgoKICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9
PT0gMCA/ICdbXScgOgogICAgICAgICAgICAgICAgICAgIGdhcCA/ICdbXG4nICsg
Z2FwICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwuam9pbign
LFxuJyArIGdhcCkgKyAnXG4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtaW5kICsgJ10nIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAnWycg
KyBwYXJ0aWFsLmpvaW4oJywnKSArICddJzsKICAgICAgICAgICAgICAgIGdhcCA9
IG1pbmQ7CiAgICAgICAgICAgICAgICByZXR1cm4gdjsKICAgICAgICAgICAgfQoK
Ly8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0
IHRoZSBtZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLgoKICAgICAgICAgICAgaWYg
KHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0JykgewogICAgICAgICAgICAg
ICAgbGVuZ3RoID0gcmVwLmxlbmd0aDsKICAgICAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgICAgIGsg
PSByZXBbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrID09PSAn
c3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAg
PyAnOiAnIDogJzonKSArIHYpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9IGVsc2UgewoKLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9m
IHRoZSBrZXlzIGluIHRoZSBvYmplY3QuCgogICAgICAgICAgICAgICAgZm9yIChr
IGluIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNP
d25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICB2ID0gc3RyKGssIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVz
aChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CgovLyBKb2luIGFsbCBvZiB0aGUgbWVtYmVy
IHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsCi8vIGFuZCB3
cmFwIHRoZW0gaW4gYnJhY2VzLgoKICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVu
Z3RoID09PSAwID8gJ3t9JyA6CiAgICAgICAgICAgICAgICBnYXAgPyAne1xuJyAr
IGdhcCArIHBhcnRpYWwuam9pbignLFxuJyArIGdhcCkgKyAnXG4nICsKICAgICAg
ICAgICAgICAgICAgICAgICAgbWluZCArICd9JyA6ICd7JyArIHBhcnRpYWwuam9p
bignLCcpICsgJ30nOwogICAgICAgICAgICBnYXAgPSBtaW5kOwogICAgICAgICAg
ICByZXR1cm4gdjsKICAgICAgICB9CiAgICB9CgovLyBJZiB0aGUgSlNPTiBvYmpl
Y3QgZG9lcyBub3QgeWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0
IG9uZS4KCiAgICBpZiAodHlwZW9mIEpTT04uc3RyaW5naWZ5ICE9PSAnZnVuY3Rp
b24nKSB7CiAgICAgICAgSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbiAodmFsdWUs
IHJlcGxhY2VyLCBzcGFjZSkgewoKLy8gVGhlIHN0cmluZ2lmeSBtZXRob2QgdGFr
ZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFjZXIsIGFuZCBhbiBvcHRp
b25hbAovLyBzcGFjZSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgSlNPTiB0ZXh0
LiBUaGUgcmVwbGFjZXIgY2FuIGJlIGEgZnVuY3Rpb24KLy8gdGhhdCBjYW4gcmVw
bGFjZSB2YWx1ZXMsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCB3aWxsIHNl
bGVjdCB0aGUga2V5cy4KLy8gQSBkZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4g
YmUgcHJvdmlkZWQuIFVzZSBvZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGNhbgovLyBw
cm9kdWNlIHRleHQgdGhhdCBpcyBtb3JlIGVhc2lseSByZWFkYWJsZS4KCiAgICAg
ICAgICAgIHZhciBpOwogICAgICAgICAgICBnYXAgPSAnJzsKICAgICAgICAgICAg
aW5kZW50ID0gJyc7CgovLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVt
YmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0Ci8vIG1h
bnkgc3BhY2VzLgoKICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251
bWJlcicpIHsKICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsg
aSArPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICcgJzsKICAg
ICAgICAgICAgICAgIH0KCi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBz
dHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy4KCiAg
ICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykg
ewogICAgICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7CiAgICAgICAgICAgIH0K
Ci8vIElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlv
biBvciBhbiBhcnJheS4KLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci4KCiAg
ICAgICAgICAgIHJlcCA9IHJlcGxhY2VyOwogICAgICAgICAgICBpZiAocmVwbGFj
ZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nICYmCiAgICAgICAg
ICAgICAgICAgICAgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHwKICAg
ICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251
bWJlcicpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04u
c3RyaW5naWZ5Jyk7CiAgICAgICAgICAgIH0KCi8vIE1ha2UgYSBmYWtlIHJvb3Qg
b2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycu
Ci8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUu
CgogICAgICAgICAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7CiAgICAg
ICAgfTsKICAgIH0KCgovLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3QgeWV0
IGhhdmUgYSBwYXJzZSBtZXRob2QsIGdpdmUgaXQgb25lLgoKICAgIGlmICh0eXBl
b2YgSlNPTi5wYXJzZSAhPT0gJ2Z1bmN0aW9uJykgewogICAgICAgIEpTT04ucGFy
c2UgPSBmdW5jdGlvbiAodGV4dCwgcmV2aXZlcikgewoKLy8gVGhlIHBhcnNlIG1l
dGhvZCB0YWtlcyBhIHRleHQgYW5kIGFuIG9wdGlvbmFsIHJldml2ZXIgZnVuY3Rp
b24sIGFuZCByZXR1cm5zCi8vIGEgSmF2YVNjcmlwdCB2YWx1ZSBpZiB0aGUgdGV4
dCBpcyBhIHZhbGlkIEpTT04gdGV4dC4KCiAgICAgICAgICAgIHZhciBqOwoKICAg
ICAgICAgICAgZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkgewoKLy8gVGhlIHdh
bGsgbWV0aG9kIGlzIHVzZWQgdG8gcmVjdXJzaXZlbHkgd2FsayB0aGUgcmVzdWx0
aW5nIHN0cnVjdHVyZSBzbwovLyB0aGF0IG1vZGlmaWNhdGlvbnMgY2FuIGJlIG1h
ZGUuCgogICAgICAgICAgICAgICAgdmFyIGssIHYsIHZhbHVlID0gaG9sZGVyW2tl
eV07CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09
PSAnb2JqZWN0JykgewogICAgICAgICAgICAgICAgICAgIGZvciAoayBpbiB2YWx1
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blBy
b3BlcnR5LmNhbGwodmFsdWUsIGspKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVba10gPSB2OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgdmFsdWVba107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gcmV2aXZlci5j
YWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCgovLyBQYXJz
aW5nIGhhcHBlbnMgaW4gZm91ciBzdGFnZXMuIEluIHRoZSBmaXJzdCBzdGFnZSwg
d2UgcmVwbGFjZSBjZXJ0YWluCi8vIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoIGVz
Y2FwZSBzZXF1ZW5jZXMuIEphdmFTY3JpcHQgaGFuZGxlcyBtYW55IGNoYXJhY3Rl
cnMKLy8gaW5jb3JyZWN0bHksIGVpdGhlciBzaWxlbnRseSBkZWxldGluZyB0aGVt
LCBvciB0cmVhdGluZyB0aGVtIGFzIGxpbmUgZW5kaW5ncy4KCiAgICAgICAgICAg
IGN4Lmxhc3RJbmRleCA9IDA7CiAgICAgICAgICAgIGlmIChjeC50ZXN0KHRleHQp
KSB7CiAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGN4LCBmdW5j
dGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFx1JyArCiAg
ICAgICAgICAgICAgICAgICAgICAgICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCku
dG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7CiAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgfQoKLy8gSW4gdGhlIHNlY29uZCBzdGFnZSwgd2UgcnVuIHRoZSB0
ZXh0IGFnYWluc3QgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGxvb2sKLy8gZm9y
IG5vbi1KU09OIHBhdHRlcm5zLiBXZSBhcmUgZXNwZWNpYWxseSBjb25jZXJuZWQg
d2l0aCAnKCknIGFuZCAnbmV3JwovLyBiZWNhdXNlIHRoZXkgY2FuIGNhdXNlIGlu
dm9jYXRpb24sIGFuZCAnPScgYmVjYXVzZSBpdCBjYW4gY2F1c2UgbXV0YXRpb24u
Ci8vIEJ1dCBqdXN0IHRvIGJlIHNhZmUsIHdlIHdhbnQgdG8gcmVqZWN0IGFsbCB1
bmV4cGVjdGVkIGZvcm1zLgoKLy8gV2Ugc3BsaXQgdGhlIHNlY29uZCBzdGFnZSBp
bnRvIDQgcmVnZXhwIG9wZXJhdGlvbnMgaW4gb3JkZXIgdG8gd29yayBhcm91bmQK
Ly8gY3JpcHBsaW5nIGluZWZmaWNpZW5jaWVzIGluIElFJ3MgYW5kIFNhZmFyaSdz
IHJlZ2V4cCBlbmdpbmVzLiBGaXJzdCB3ZQovLyByZXBsYWNlIHRoZSBKU09OIGJh
Y2tzbGFzaCBwYWlycyB3aXRoICdAJyAoYSBub24tSlNPTiBjaGFyYWN0ZXIpLiBT
ZWNvbmQsIHdlCi8vIHJlcGxhY2UgYWxsIHNpbXBsZSB2YWx1ZSB0b2tlbnMgd2l0
aCAnXScgY2hhcmFjdGVycy4gVGhpcmQsIHdlIGRlbGV0ZSBhbGwKLy8gb3BlbiBi
cmFja2V0cyB0aGF0IGZvbGxvdyBhIGNvbG9uIG9yIGNvbW1hIG9yIHRoYXQgYmVn
aW4gdGhlIHRleHQuIEZpbmFsbHksCi8vIHdlIGxvb2sgdG8gc2VlIHRoYXQgdGhl
IHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBvbmx5IHdoaXRlc3BhY2Ugb3IgJ10n
IG9yCi8vICcsJyBvciAnOicgb3IgJ3snIG9yICd9Jy4gSWYgdGhhdCBpcyBzbywg
dGhlbiB0aGUgdGV4dCBpcyBzYWZlIGZvciBldmFsLgoKCQkJdHJ5IHsKLy8gICAg
ICAgICAgICBpZiAoL15bXF0sOnt9XHNdKiQvLgovL3Rlc3QodGV4dC5yZXBsYWNl
KC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csICdAJykuCi8v
cmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpc
LlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csICddJykuCi8vcmVwbGFjZSgvKD86
Xnw6fCwpKD86XHMqXFspKy9nLCAnJykpKSB7CgovLyBJbiB0aGUgdGhpcmQgc3Rh
Z2Ugd2UgdXNlIHRoZSBldmFsIGZ1bmN0aW9uIHRvIGNvbXBpbGUgdGhlIHRleHQg
aW50byBhCi8vIEphdmFTY3JpcHQgc3RydWN0dXJlLiBUaGUgJ3snIG9wZXJhdG9y
IGlzIHN1YmplY3QgdG8gYSBzeW50YWN0aWMgYW1iaWd1aXR5Ci8vIGluIEphdmFT
Y3JpcHQ6IGl0IGNhbiBiZWdpbiBhIGJsb2NrIG9yIGFuIG9iamVjdCBsaXRlcmFs
LiBXZSB3cmFwIHRoZSB0ZXh0Ci8vIGluIHBhcmVucyB0byBlbGltaW5hdGUgdGhl
IGFtYmlndWl0eS4KCiAgICAgICAgICAgICAgICBqID0gZXZhbCgnKCcgKyB0ZXh0
ICsgJyknKTsKCi8vIEluIHRoZSBvcHRpb25hbCBmb3VydGggc3RhZ2UsIHdlIHJl
Y3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsIHBhc3NpbmcKLy8gZWFj
aCBuYW1lL3ZhbHVlIHBhaXIgdG8gYSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3Nz
aWJsZSB0cmFuc2Zvcm1hdGlvbi4KCiAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPwogICAgICAgICAgICAgICAgICAg
IHdhbGsoeycnOiBqfSwgJycpIDogajsKLy8gICAgICAgICAgICB9CgkJCX0gY2F0
Y2ggKGVyKXt9OwoKLy8gSWYgdGhlIHRleHQgaXMgbm90IEpTT04gcGFyc2VhYmxl
LCB0aGVuIGEgU3ludGF4RXJyb3IgaXMgdGhyb3duLgoKICAgICAgICAgICAgdGhy
b3cgbmV3IFN5bnRheEVycm9yKCdKU09OLnBhcnNlJyk7CiAgICAgICAgfTsKICAg
IH0KCn0oKSk7CgoKd2luZG93LnNlcmlhbGl6ZQk9IEpTT04uc3RyaW5naWZ5Owp3
aW5kb3cudW5zZXJpYWxpemUJPSBKU09OLnBhcnNlOwoKanNMb2FkZXIubG9hZGVk
KCd7anNDb3JlfUpTT04nLCAxKTsKCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9q
c0NvcmUvSlNPTi5qcyBlbmQKCndpbmRvdy5MYW5nCT0gKHsKCgkJZGF0YToJe30s
CgkJdmFyczoJe30sCgkJbG9jYWxzOglbXSwKCQlkZWY6CScnLAoJCXBhdGg6CScn
LAoKCgkJaW5pdDogZnVuY3Rpb24gKCkKCQl7CgkJCS8vdGhpcy5zZXREYXRhUGF0
aChqc0xvYWRlci5hbGlhc2VzWydsYW5nLmRhdGEnXXx8JycpOwoJCQl0aGlzLnNl
dExvY2FsKHdpbmRvd1snTEFOR19ERUZBVUxUJ10gfHwgJ1JVJyk7CS8vINGD0YHR
gtCw0L3QvtCy0LrQsCDQtNGN0LLQsNC70YLQvdC+0Lkg0LvQvtC60LDQu9C4CgkJ
CXJldHVybgl0aGlzOwoJCX0sCgoKCQlzZXREYXRhUGF0aDogZnVuY3Rpb24gKHAp
eyB0aGlzLnBhdGgJPSBwOyB9LAoKCgkJYWRkTG9jYWw6IGZ1bmN0aW9uIChsLCBu
bCkJLy8g0LTQvtCx0LDQstC40YLRjCDQu9C+0LrQsNC70YwKCQl7CgkJCWlmKCB0
eXBlb2YobCkgPT0gJ3N0cmluZycgKQlsCT0gbC5zcGxpdCgnLCcpOwoKCQkJZm9y
KCB2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrICkKCQkJewoJCQkJaWYoICF0
aGlzLmRhdGFbbFtpXSA9IGxbaV0udG9VcHBlckNhc2UoKV0gKQoJCQkJewoJCQkJ
CXRoaXMubG9jYWxzLnB1c2gobFtpXSk7CgkJCQkJdGhpcy5kYXRhW2xbaV1dCT0g
e307CgkJCQl9CgkJCX0KCgkJCWlmKCBubCA9IGRlZmluZWQobmwsIHRydWUpICkg
dGhpcy5sb2FkKGZhbHNlLCBubC5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb24gPyBu
bCA6IDApOwoJCQlyZXR1cm4JdGhpczsKCQl9LAoKCgkJc2V0TG9jYWw6IGZ1bmN0
aW9uIChsKQkvLyBkZWZhdWx0CgkJewoJCQl0aGlzLmRlZgk9IGwudG9VcHBlckNh
c2UoKTsKCQkJdGhpcy5hZGRMb2NhbChsKTsKCQkJcmV0dXJuCXRoaXM7CgkJfSwK
CgoJCWxvYWQ6IGZ1bmN0aW9uICh2LCBzKQkvLyDQt9Cw0LPRgNGD0LfQuNGC0Ywg
0Y/Qt9GL0LrQvtCy0YvQtSDQsdC70L7QutC4CgkJewoJCQlpZiggdiApCgkJCXsJ
Ly8g0LHQu9C+0LrQuAoJCQkJaWYoIHR5cGVvZih2KSA9PSAnc3RyaW5nJyApCXYJ
PSB2LnNwbGl0KCcsJyk7CgkJCQlmb3IoIHZhciBpID0gMCwgbiA9IHYubGVuZ3Ro
OyBpIDwgbjsgaSsrICkKCQkJCXsKCQkJCQlpZiggIXRoaXMudmFyc1t2W2ldXSAp
CgkJCQkJewkvLyDQvtGC0LzQtdGC0LjQvCwg0YfRgtC+INCx0LvQvtC6INGF0L7R
h9C10YIg0LPRgNGD0LfQuNC00YbQvgoJCQkJCQl0aGlzLnZhcnNbdltpXV0JPSAx
OwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJdmFyIHIJPSAwLCB3ID0gJyc7CgkJCWZv
ciggdmFyIHYgaW4gdGhpcy52YXJzICkKCQkJewoJCQkJZm9yKCB2YXIgaiA9IDAs
IG5sID0gdGhpcy5sb2NhbHMubGVuZ3RoOyBqIDwgbmw7IGorKyApCgkJCQl7CgkJ
CQkJaWYoICF0aGlzLmRhdGFbdGhpcy5sb2NhbHNbal1dW3ZdICkKCQkJCQl7CgkJ
CQkJCXRoaXMuZGF0YVt0aGlzLmxvY2Fsc1tqXV1bdl0JPSAxOwoJCQkJCQlpZigg
IXIgKQlyID0ge307CgkJCQkJCWlmKCAhclt0aGlzLmxvY2Fsc1tqXV0gKQlyW3Ro
aXMubG9jYWxzW2pdXQk9IFtdOwoJCQkJCQlyW3RoaXMubG9jYWxzW2pdXS5wdXNo
KHYpOwovLwkJCQkJCXdJZAk9ICcsbGFuZzonK3RoaXMubG9jYWxzW2pdKyctJyt2
OwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJaWYoIDAgJiYgciApCgkJCXsKCQkJCWpz
Q29yZS5yZXF1ZXN0KHsKCQkJCQkgIHVybDoJCXRoaXMucGF0aAoJCQkJCSwgZGF0
YToJCSdsPScgKyBzZXJpYWxpemUocikKCQkJCQksIGNhY2hlOgkxCgkJCQkJLCBz
dWNjZXNzOgkkRCh0aGlzLCAnYWRkJykKCQkJCX0pOwovLwkJCQlpZiggcyApIGpz
Q29yZS53YWl0KHdJZC5zdWJzdHIoMSksIHMpOwoJCQl9CgkJCWVsc2UgaWYoIHMg
KQoJCQl7CgkJCQlzKCk7CgkJCX0KCQl9LAoKCgkJYWRkOiBmdW5jdGlvbiAoZCkK
CQl7CgkJCXZhciBuID0gW107CgkJCWZvciggdmFyIGwgaW4gZCApCgkJCXsKCQkJ
CWZvciggdmFyIHYgaW4gZFtsXSApCgkJCQl7CgkJCQkJdGhpcy5kYXRhW2xdW3Zd
CT0gZFtsXVt2XTsKCQkJCQluLnB1c2goJ2xhbmc6JytsKyctJyt2KTsKCQkJCX0K
CQkJfQoJCQlqc0NvcmUubm90aWZ5KG4pOwoJCQlyZXR1cm4JdGhpczsKCQl9LAoK
CgkJZ2V0OiBmdW5jdGlvbiAodiwgbCkKCQl7CgkJCWlmKCB2LmluZGV4T2YoJy8n
KSA+IC0xICkKCQkJewoJCQkJdiA9IHYuc3BsaXQoJy8nKTsKCQkJCWwgPSB2WzBd
OwoJCQkJdiA9IHZbMV0KCQkJfQoJCQlyZXR1cm4JZGVmaW5lZCh0aGlzLmRhdGFb
bHx8dGhpcy5kZWZdW3ZdLCB7fSk7CgkJfSwKCgoJCXN0cjogZnVuY3Rpb24gKGtl
eSwgZGVmKXsKCQkJdmFyIHZhbAk9IExhbmcuZGF0YVtMYW5nLmRlZl1ba2V5XTsK
CQkJcmV0dXJuCXR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnCgkJCQkJCT8gKHR5
cGVvZiBkZWYgPT09ICd1bmRlZmluZWQnID8gJycgOiBMYW5nLnN0cihkZWYpKQoJ
CQkJCQk6ICh2YWwgKyAnJykKCQkJCQk7CgkJfSwKCgoJCWZpbGVTaXplOiBmdW5j
dGlvbiAocywgTCkKCQl7CgkJCXZhciB4CT0gTWF0aC5mbG9vcihNYXRoLmxvZyhz
fHwxKSAvIE1hdGgubG9nKDEwMjQpKTsKCQkJcmV0dXJuCUwgPyBTdHJpbmcubnVt
KE1hdGgucm91bmQocy9NYXRoLnBvdygxMDI0LCB4KSksIExbeF0sICcgJykgOiB4
OwoJCX0KCgoJfSkuaW5pdCgpOwoKCglqc0xvYWRlci5sb2FkZWQoJ3t1dGlsc31M
YW5nJywgMSk7CgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvdXRpbHMv
TGFuZy5qcyBlbmQKCi8qKiBAbmFtZXNwYWNlIG1haWxydS5MQU5HICovCgkvKiog
QG5hbWVzcGFjZSB3aW5kb3cudGltZVpvbmUgKi8KCS8qKiBAbmFtZXNwYWNlIHdp
bmRvdy5USU1FWk9ORSAqLwoKCSRFKERhdGUsIHsKCgkJaXM6IGZ1bmN0aW9uIChk
KQoJCXsKCQkJaWYoIGQgKQoJCQl7CgkJCQlyZXR1cm4JZC5zZXRUaW1lIHx8IC8o
XlxkKyR8XigoXGR7MSw0fVstOlxzXC9dPykrKSQpLy50ZXN0KGQrJycpOwoJCQl9
CgkJCXJldHVybgkhMTsKCQl9LAoKCgoJCV90aW1lcjoJCShuZXcgRGF0ZSgpKS5n
ZXRUaW1lKCksCgkJdGltZVpvbmU6CSh3aW5kb3cudGltZVpvbmUgfHwgd2luZG93
LlRJTUVaT05FIHx8IDQpLAoKCQlnZXRUaW1lOiBmdW5jdGlvbiAoKQoJCXsKCQkJ
cmV0dXJuCXRoaXMuY2hhbmdlTm93KCkuZ2V0Tm93KCkuZ2V0VGltZSgpOwoJCX0s
CgoJCWdldFVuaXh0aW1lOiBmdW5jdGlvbiAoKQoJCXsKCQkJcmV0dXJuCU1hdGgu
cm91bmQodGhpcy5nZXRUaW1lKCkgLyAxMDAwKTsKCQl9LAoKCgkJc2V0Tm93OiBm
dW5jdGlvbiAodGltZSkKCQl7CgkJCXRoaXMuX25vd18JCQk9IG5ldyBEYXRlKHRp
bWUpOwoJCQl0aGlzLl90b2RheV8JCT0gbmV3IERhdGUodGltZSk7CgkJCXRoaXMu
X3llc3RlcmRheV8JPSBuZXcgRGF0ZSh0aW1lKTsKCgkJCXRoaXMuX3RvZGF5Xy5z
ZXRIb3VycygwKTsKCQkJdGhpcy5fdG9kYXlfLnNldE1pbnV0ZXMoMCk7CgoJCQl0
aGlzLl95ZXN0ZXJkYXlfLnNldFRpbWUodGhpcy5fdG9kYXlfLmdldFRpbWUoKSk7
CgkJCXRoaXMuX3llc3RlcmRheV8uc2V0RGF0ZSh0aGlzLl95ZXN0ZXJkYXlfLmdl
dERhdGUoKS0xKTsKCgkJCXJldHVybgl0aGlzOwoJCX0sCgoJCWdldE5vdzogZnVu
Y3Rpb24gKCkKCQl7CgkJCXJldHVybgl0aGlzLmNoYW5nZU5vdygpLl9ub3dfOwoJ
CX0sCgoJCWNoYW5nZU5vdzogZnVuY3Rpb24gKCkKCQl7CgkJCXZhciBuID0gbm93
KCk7CgkJCURhdGUuc2V0Tm93KERhdGUuX25vd18uZ2V0VGltZSgpICsgKG4gLSBE
YXRlLl90aW1lcikpOwoJCQlEYXRlLl90aW1lcgk9IG47CgoJCQlyZXR1cm4JdGhp
czsKCQl9LAoKCQlfZjoJZnVuY3Rpb24gKG4peyByZXR1cm4JKChuID4gOSkgPyBu
IDogJzAnICsgbik7IH0sCgoKCQlfcGFyc2U6IERhdGUucGFyc2UsCgkJcGFyc2U6
IGZ1bmN0aW9uIChzLypTdHJpbmdPckludCovKS8qRGF0ZSovCgkJewoJCQlpZigg
cyAmJiBzLnNldFRpbWUgKQlyZXR1cm4JczsKCgkJCXRyeQoJCQl7CgkJCQl2YXIg
RCA9IC9eXGQrJC8udGVzdChzKSA/IG5ldyBEYXRlKHMpIDogRGF0ZS5fcGFyc2Uo
IHMgKTsKCQkJCWlmKCBELmNvbnN0cnVjdG9yICE9IERhdGUgKSBEID0gbmV3IERh
dGUoU3RyaW5nKHMpLnJlcGxhY2UoL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KS8s
ICckMi8kMy8kMScpKTsKCQkJfQoJCQljYXRjaCggZSApCgkJCXsKCQkJCWRlYnVn
LmxvZygnRGF0ZScsIGUpOwoJCQl9CgoJCQlyZXR1cm4JRDsKCQl9CgoJfSk7CgoJ
aWYoICFEYXRlLm5vdyApIHsKCQlEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgewoJCQly
ZXR1cm4gRGF0ZS5nZXRUaW1lKCk7CgkJfQoJfQoKCgkkRShEYXRlLnByb3RvdHlw
ZSwgewoKCgkJdGltZVpvbmU6CURhdGUudGltZVpvbmUsCgoJCWdldExvY2FsVG9k
YXk6IGZ1bmN0aW9uICgpIHsKCQkJdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwoJCQlk
YXRlLnNldEhvdXJzKDApOwoJCQlkYXRlLnNldE1pbnV0ZXMoMCk7CgkJCWRhdGUu
c2V0U2Vjb25kcygwKTsKCQkJcmV0dXJuIGRhdGU7CgkJfSwKCgkJZ2V0TG9jYWxZ
ZXN0ZXJkYXk6IGZ1bmN0aW9uICgpIHsKCQkJdmFyIGRhdGUgPSB0aGlzLmdldExv
Y2FsVG9kYXkoKTsKCQkJZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7
CgkJCXJldHVybiBkYXRlOwoJCX0sCgoJCWlzTm93OiBmdW5jdGlvbiAoaW50ZXJ2
YWwpCgkJewoJCQlEYXRlLmNoYW5nZU5vdygpOwoJCQlyZXR1cm4JKERhdGUuX25v
d18uZ2V0VGltZSgpIC0gdGhpcy5nZXRUaW1lKCkpIDw9IGludGVydmFsOwoJCX0s
CgoJCWlzVG9kYXk6IGZ1bmN0aW9uICgpIHsKCQkJcmV0dXJuIHRoaXMudG9EYXRl
U3RyaW5nKCkgPT09IHRoaXMuZ2V0TG9jYWxUb2RheSgpLnRvRGF0ZVN0cmluZygp
OwoJCX0sCgoJCWlzWWVzdGVyZGF5OiBmdW5jdGlvbiAoKSB7CgkJCXJldHVybiB0
aGlzLnRvRGF0ZVN0cmluZygpID09PSB0aGlzLmdldExvY2FsWWVzdGVyZGF5KCku
dG9EYXRlU3RyaW5nKCk7CgkJfSwKCgkJaXNUaGlzWWVhcjogZnVuY3Rpb24gKCkg
ewoJCQlyZXR1cm4gdGhpcy5nZXRGdWxsWWVhcigpID09PSB0aGlzLmdldExvY2Fs
VG9kYXkoKS5nZXRGdWxsWWVhcigpOwoJCX0sCgoJCXNldFRpbWVab25lOiBmdW5j
dGlvbiAoeikKCQl7CgkJCXRoaXMudGltZVpvbmUJPSB6ICogMTsKCQkJcmV0dXJu
CXRoaXM7CgkJfSwKCgkJZm9ybWF0OiBmdW5jdGlvbiAoZikKCQl7CgkJCXZhciB0
ID0gdGhpcy5nZXRUaW1lKCksIHIgPSAnJywgZiA9IGYuc3BsaXQoJycpOwoKCQkJ
LyogTUFJTC03ODA0CgkJCXRoaXMuc2V0VGltZSggdCArICh0aGlzLmdldFRpbWV6
b25lT2Zmc2V0KCkgKyB0aGlzLnRpbWVab25lKjYwKSAqIDYwMDAwKTsKCQkJKi8K
CgkJCWZvciggdmFyIGkgPSAwLCBuID0gZi5sZW5ndGg7IGkgPCBuOyBpKysgKQoJ
CQl7CgkJCQlzd2l0Y2goIGZbaV0gKQoJCQkJewoJCQkJCWNhc2UgJ1knOglyICs9
IHRoaXMuZ2V0RnVsbFllYXIoKTsgYnJlYWs7CgkJCQkJY2FzZSAneSc6CXIgKz0g
RGF0ZS5fZih0aGlzLmdldEZ1bGxZZWFyKCkgJSAxMDApOyBicmVhazsKCgkJCQkJ
Y2FzZSAnTic6CXIgKz0gU3RyaW5nLnVjZmlyc3QoTGFuZy5nZXQoJ0RhdGUnKS5t
b250aHNbMV1bdGhpcy5nZXRNb250aCgpXSk7IGJyZWFrOwoJCQkJCWNhc2UgJ24n
OglyICs9IExhbmcuZ2V0KCdEYXRlJykubW9udGhzWzFdW3RoaXMuZ2V0TW9udGgo
KV07IGJyZWFrOwoKCQkJCQljYXNlICdNJzoJciArPSBEYXRlLl9mKHRoaXMuZ2V0
TW9udGgoKSsxKTsgYnJlYWs7CgkJCQkJY2FzZSAnbSc6CXIgKz0gdGhpcy5nZXRN
b250aCgpKzE7IGJyZWFrOwoKCQkJCQljYXNlICdEJzoJciArPSBEYXRlLl9mKHRo
aXMuZ2V0RGF0ZSgpKTsgYnJlYWs7CgkJCQkJY2FzZSAnZCc6CXIgKz0gdGhpcy5n
ZXREYXRlKCk7IGJyZWFrOwoKCQkJCQljYXNlICdIJzoJciArPSBEYXRlLl9mKHRo
aXMuZ2V0SG91cnMoKSk7IGJyZWFrOwoJCQkJCWNhc2UgJ2gnOglyICs9IHRoaXMu
Z2V0SG91cnMoKTsgYnJlYWs7CgoJCQkJCWNhc2UgJ0knOglyICs9IERhdGUuX2Yo
dGhpcy5nZXRNaW51dGVzKCkpOyBicmVhazsKCQkJCQljYXNlICdpJzoJciArPSB0
aGlzLmdldE1pbnV0ZXMoKTsgYnJlYWs7CgoJCQkJCWNhc2UgJ1MnOglyICs9IERh
dGUuX2YodGhpcy5nZXRTZWNvbmRzKCkpOyBicmVhazsKCQkJCQljYXNlICdzJzoJ
ciArPSB0aGlzLmdldFNlY29uZHMoKTsgYnJlYWs7CgoJCQkJCWRlZmF1bHQ6CQly
ICs9IGZbaV07IGJyZWFrOwoJCQkJfQoJCQl9CgoJCQl0aGlzLnNldFRpbWUodCk7
CgoJCQlyZXR1cm4JcjsKCQl9LAoKCQlnZXRMb2NhbGVEYXRlU2hvcnQ6IGZ1bmN0
aW9uICgpIHsKCQkJdmFyIHN0ciA9ICcnOwoJCQlpZiAodGhpcy5pc1RvZGF5KCkp
IHsKCQkJCXN0ciA9IHRoaXMuZ2V0TG9jYWxlVGltZSgpOwoJCQl9IGVsc2UgaWYg
KHRoaXMuaXNUaGlzWWVhcigpKSB7CgkJCQlzdHIgPSB0aGlzLmdldExvY2FsZVNo
b3J0RGF5TW9udGgoKTsKCQkJfSBlbHNlIHsKCQkJCXN0ciA9IHRoaXMuZ2V0TG9j
YWxlU2hvcnREYXlNb250aFllYXIoKTsKCQkJfQoJCQlyZXR1cm4gc3RyOwoJCX0s
CgoJCWdldExvY2FsZURhdGVGdWxsOiBmdW5jdGlvbiAoKSB7CgkJCXZhciBzdHIg
PSAnJzsKCQkJaWYgKHRoaXMuaXNUb2RheSgpKSB7CgkJCQlzdHIgPSB0aGlzLmdl
dExvY2FsZVRvZGF5VGltZSgpOwoJCQl9IGVsc2UgaWYgKHRoaXMuaXNZZXN0ZXJk
YXkoKSkgewoJCQkJc3RyID0gdGhpcy5nZXRMb2NhbGVZZXN0ZXJkYXlUaW1lKCk7
CgkJCX0gZWxzZSBpZiAodGhpcy5pc1RoaXNZZWFyKCkpIHsKCQkJCXN0ciA9IHRo
aXMuZ2V0TG9jYWxlRGF5TW9udGhUaW1lKCk7CgkJCX0gZWxzZSB7CgkJCQlzdHIg
PSB0aGlzLmdldExvY2FsZURheU1vbnRoWWVhclRpbWUoKTsKCQkJfQoJCQlyZXR1
cm4gc3RyOwoJCX0sCgoJCWdldExvY2FsZUZ1bGxEYXRlOiBmdW5jdGlvbiAoKSB7
CgkJCXZhciBkYXkgPSBTdHJpbmcudWNmaXJzdChMYW5nLmdldCgnRGF0ZScpLndl
ZWtkYXlzX2Z1bGxbdGhpcy5nZXREYXkoKV0pOwoJCQl2YXIgdGltZXpvbmVPZmZz
ZXQgPSAtdGhpcy5nZXRUaW1lem9uZU9mZnNldCgpLCBnbXRTdHIgPSAnJzsKCgkJ
CWlmICh0aW1lem9uZU9mZnNldCA+IDApIHsKCQkJCWdtdFN0ciArPSAnKyc7CgkJ
CX0gZWxzZSBpZiAodGltZXpvbmVPZmZzZXQgPCAwKSB7CgkJCQlnbXRTdHIgKz0g
Jy0nOwoJCQl9CgoJCQlnbXRTdHIgKz0gRGF0ZS5fZih0aW1lem9uZU9mZnNldCAv
IDYwKSArICc6JyArIERhdGUuX2YodGltZXpvbmVPZmZzZXQgJSA2MCk7CgoJCQlp
ZiAobWFpbHJ1LkxBTkcgPT0gJ2VuX1VTJykgewoJCQkJcmV0dXJuIGRheSArICcs
ICcgKyB0aGlzLmZvcm1hdCgnbiBkLCBZJykgKyAnICcgKyB0aGlzLmdldExvY2Fs
ZVRpbWUoKSArICcgJyArIGdtdFN0cjsKCQkJfQoJCQlyZXR1cm4gZGF5ICsgJywg
JyArIHRoaXMuZm9ybWF0KCdkIG4gWScpICsgJywgJyArIHRoaXMuZ2V0TG9jYWxl
VGltZSgpICsgJyAnICsgZ210U3RyOwoJCX0sCgoJCWdldExvY2FsZVRvZGF5VGlt
ZTogZnVuY3Rpb24gKCkgewoJCQlyZXR1cm4gU3RyaW5nLnVjZmlyc3QoTGFuZy5n
ZXQoJ0RhdGUnKS50b2RheSkgKyAnLCAnICsgdGhpcy5nZXRMb2NhbGVUaW1lKCk7
CgkJfSwKCgkJZ2V0TG9jYWxlWWVzdGVyZGF5VGltZTogZnVuY3Rpb24gKCkgewoJ
CQlyZXR1cm4gU3RyaW5nLnVjZmlyc3QoTGFuZy5nZXQoJ0RhdGUnKS55ZXN0ZXJk
YXkpICsgJywgJyArIHRoaXMuZ2V0TG9jYWxlVGltZSgpOwoJCX0sCgoJCWdldExv
Y2FsZURheU1vbnRoVGltZTogZnVuY3Rpb24gKCkgewoJCQlpZiAobWFpbHJ1LkxB
TkcgPT0gJ2VuX1VTJykgewoJCQkJcmV0dXJuIHRoaXMuZm9ybWF0KCdOIGQnKSAr
ICcsICcgKyB0aGlzLmdldExvY2FsZVRpbWUoKTsKCQkJfQoJCQlyZXR1cm4gdGhp
cy5mb3JtYXQoJ2QgbicpICsgJywgJyArIHRoaXMuZ2V0TG9jYWxlVGltZSgpOwoJ
CX0sCgoJCWdldExvY2FsZURheU1vbnRoWWVhclRpbWU6IGZ1bmN0aW9uICgpIHsK
CQkJaWYgKG1haWxydS5MQU5HID09ICdlbl9VUycpIHsKCQkJCXJldHVybiB0aGlz
LmZvcm1hdCgnTiBkLCBZJykgKyAnICcgKyB0aGlzLmdldExvY2FsZVRpbWUoKTsK
CQkJfQoJCQlyZXR1cm4gdGhpcy5mb3JtYXQoJ2QgbiBZJykgKyAnLCAnICsgdGhp
cy5nZXRMb2NhbGVUaW1lKCk7CgkJfSwKCgkJZ2V0TG9jYWxlVGltZTogZnVuY3Rp
b24gKCkgewoJCQlpZiAobWFpbHJ1LkxBTkcgPT0gJ2VuX1VTJykgewoJCQkJcmV0
dXJuICh0aGlzLmdldEhvdXJzKCkgJSAxMiB8fCAxMikgKyAnOicgKyB0aGlzLmZv
cm1hdCgnSScpICsgJyAnICsgKHRoaXMuZ2V0SG91cnMoKSA8IDEyID8gJ0FNJyA6
ICdQTScpOwoJCQl9CgkJCXJldHVybiB0aGlzLmZvcm1hdCgnaDpJJyk7CgkJfSwK
CgkJZ2V0TG9jYWxlU2hvcnREYXlNb250aDogZnVuY3Rpb24gKCkgewoJCQl2YXIg
bW9udGggPSBMYW5nLmdldCgnRGF0ZScpLm1vbnRoc1syXVt0aGlzLmdldE1vbnRo
KCldOwoJCQlpZiAobWFpbHJ1LkxBTkcgPT0gJ2VuX1VTJykgewoJCQkJcmV0dXJu
IG1vbnRoICsgJyAnICsgdGhpcy5mb3JtYXQoJ2QnKTsKCQkJfQoJCQlyZXR1cm4g
dGhpcy5mb3JtYXQoJ2QnKSArICcgJyArIG1vbnRoOwoJCX0sCgoJCWdldExvY2Fs
ZVNob3J0RGF5TW9udGhZZWFyOiBmdW5jdGlvbiAoKSB7CgkJCWlmIChtYWlscnUu
TEFORyA9PSAnZW5fVVMnKSB7CgkJCQlyZXR1cm4gdGhpcy5mb3JtYXQoJ00vRC95
Jyk7CgkJCX0KCQkJcmV0dXJuIHRoaXMuZm9ybWF0KCdELk0ueScpOwoJCX0sCgoJ
CWRpZmZZZWFyczogZnVuY3Rpb24gKFksIE0sIEQpCgkJewoJCQlpZiggaXNOYU4o
WSkgKQoJCQl7CgkJCQlZCT0gRGF0ZS5wYXJzZShZKTsKCQkJCUQJPSBZLmdldERh
dGUoKTsKCQkJCU0JPSBZLmdldE1vbnRoKCkgKyAxOwoJCQkJWQk9IFkuZ2V0RnVs
bFllYXIoKTsKCQkJfQoJCQl2YXIgY00JPSB0aGlzLmdldE1vbnRoKCkrMTsKCgkJ
CVkJPSB0aGlzLmdldEZ1bGxZZWFyKCkgLSBZOwoKCQkJaWYoIChNID4gY00pIHx8
IChEID4gdGhpcy5nZXREYXRlKCkgJiYgTSA9PSBjTSkgKSBZLS07CgoJCQlyZXR1
cm4JWTsKCQl9CgoJfSk7CgkvLyBFTkQ6IERhdGUoKTsKCglEYXRlLnNldE5vdyh3
aW5kb3cudGltZSB8fCB3aW5kb3cuVElNRSB8fCBub3coKSk7CgoJc2V0SW50ZXJ2
YWwoZnVuY3Rpb24gKCl7CgkJRGF0ZS5jaGFuZ2VOb3coKTsKCX0sIDYwMDAwKTsK
Cglqc0xvYWRlci5sb2FkZWQoJ3tqc0NvcmV9RGF0ZScsIDEpOwoKLy8gZGF0YS9y
dS9pbWFnZXMvanMvcnUvanNDb3JlL0RhdGUuanMgZW5kCgovLyBkYXRhL3J1L2lt
YWdlcy9qcy9ydS9qc0NvcmUvanNDb3JlLmFqcy5qcyBzdGFydAoKKGZ1bmN0aW9u
IChnbG9iYWwsIF9kb2N1bWVudCwganNDb3JlKXsKCXZhcgoJICBfdG9TdHJpbmcJ
PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nCgksIF9GdW5jCQk9IEZ1bmN0aW9u
LnByb3RvdHlwZQoJLCBpc0NTUzEJPSBfZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0g
IkNTUzFDb21wYXQiCgksIGRvY0VsCQk9IF9kb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQKCgkvLyBhanMgb2JqZWN0CgksIGFqcyA9IGpzQ29yZS5leHRlbmQoZ2xvYmFs
WyJhanMiXSB8fCB7fSwgewoJCSAgX2NsaWNrRm46IHt9CgoJCSwgRjoJCQlqc0Nv
cmUuRgoJCSwgRXZlbnQ6CQlqc0V2ZW50CgkJLCBNb3VzZToJCWpzRXZlbnQuTW91
c2UKCgkJLCBub3c6CQkJZnVuY3Rpb24gKCl7IHJldHVybiArbmV3IERhdGU7IH0K
CQksIHVuaXFJZDoJCWZ1bmN0aW9uICgpeyByZXR1cm4ganNDb3JlLmdldFVuaXFJ
ZC5hcHBseShqc0NvcmUsIGFyZ3VtZW50cyk7IH0KCQksIHdhaXQ6CQkJZnVuY3Rp
b24gKCl7IGpzQ29yZS53YWl0LmFwcGx5KGpzQ29yZSwgYXJndW1lbnRzKTsgfQoJ
CSwgbm90aWZ5OgkJZnVuY3Rpb24gKCl7IGpzQ29yZS5ub3RpZnkuYXBwbHkoanND
b3JlLCBhcmd1bWVudHMpOyB9CgkJLCBleHRlbmQ6CQlqc0NvcmUuZXh0ZW5kCgkJ
LCBjbG9uZToJCWZ1bmN0aW9uIF9jbG9uZShvYmopewoJCQkJCQkJdmFyIHJlcyA9
IHt9LCBrZXksIHZhbDsKCQkJCQkJCWZvcigga2V5IGluIG9iaiApIGlmKCBvYmou
aGFzT3duUHJvcGVydHkoa2V5KSApewoJCQkJCQkJCXZhbCA9IG9ialtrZXldOwoJ
CQkJCQkJCXJlc1trZXldID0gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09
ICdvYmplY3QnID8gX2Nsb25lKHZhbCkgOiB2YWw7CgkJCQkJCQl9CgkJCQkJCQly
ZXR1cm4JcmVzOwoJCQkJCQl9CgoJCSwgZW5jb2RlOgkJZnVuY3Rpb24gKHMpeyBy
ZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHMpOyB9CgkJLCByZXRGYWxzZToJCWZ1
bmN0aW9uKCl7IHJldHVybiBmYWxzZSB9CgkJLCByZXRUcnVlOgkJZnVuY3Rpb24o
KXsgcmV0dXJuIHRydWUgfQoJCSwgaXNzZXQ6CQlkZWZpbmVkCgkJLCB1bnNldDoJ
CWZ1bmN0aW9uIChvYmosIGtleSl7CgkJCQkJCQlvYmpba2V5XSA9IHZvaWQgMDsK
CQkJCQkJCXJldHVybiBkZWxldGUgb2JqW2tleV07CgkJCQkJCX0KCQksIGNzczoJ
CQlmdW5jdGlvbiAobm9kZSwgY3NzKXsgbm9kZSAmJiBhanMuZXh0ZW5kKG5vZGUu
c3R5bGUgfHwge30sIGNzcyk7IH0KCgkJLCBtYXA6CQkJQXJyYXkubWFwCgkJLCBl
YWNoOgkJCWZ1bmN0aW9uIChvLypPYmplY3QqLywgSS8qRnVuY3Rpb24qLywgYS8q
aXNBcnJheSovKQoJCQkJCQl7CgkJCQkJCQlpZiggbyApCgkJCQkJCQl7CgkJCQkJ
CQkJaWYoIChvLmNvbnN0cnVjdG9yID09PSBBcnJheSkgfHwgYSA9PT0gdHJ1ZSB8
fCBhID09PSAxICkKCQkJCQkJCQkJZm9yKCB2YXIgaSA9IDAsIG4gPSBvLmxlbmd0
aDsgaSA8IG47IGkrKyApIEkuY2FsbChhLCBvW2ldLCBpLCBvKTsKCQkJCQkJCQll
bHNlCgkJCQkJCQkJCWZvciggdmFyIGkgaW4gbyApIEkuY2FsbChhLCBvW2ldLCBp
LCBvKTsKCQkJCQkJCX0KCQkJCQkJfQoJCSwgZmlsdGVyOgkJQXJyYXkuZmlsdGVy
CgkJLCByZW1vdmU6CQlBcnJheS5yZW1vdmUKCQksIGluZGV4T2Y6CQlBcnJheS5p
bmRleE9mCgoJCSwgZmlsZToJCQlqc0NvcmUuZmlsZQoJCSwgcmVxdWlyZToJCWZ1
bmN0aW9uICgpeyBqc0xvYWRlclsncmVxdWlyZSddLmFwcGx5KGpzTG9hZGVyLCBh
cmd1bWVudHMpOyB9CgkJLCBsb2FkZWQ6CQlmdW5jdGlvbiAoKXsganNMb2FkZXJb
J2xvYWRlZCddLmFwcGx5KGpzTG9hZGVyLCBhcmd1bWVudHMpOyB9CgkJLCBsb2c6
CQkJZGVidWcubG9nCgkJLCBwbHVyYWw6CQlmdW5jdGlvbiAobnVtLCBsYW5nLCBn
bHVlKXsKCQkJaWYoIHR5cGVvZiBsYW5nID09ICdzdHJpbmcnICkgbGFuZyA9IExh
bmcuZ2V0KGxhbmcpOwoJCQlyZXR1cm4JU3RyaW5nLm51bShudW0sIGxhbmcsIGds
dWUpOwoJCX0KCgkJLCBodG1sRW5jb2RlOglmdW5jdGlvbihzdHIpeyByZXR1cm4g
YWpzLkh0bWwuZXNjYXBlKHN0cikgfSAvLyBjb21wYXRpYmlsaXR5LCBUT0RPOjog
cmVwbGFjZSB3aXRoIGh0bWxFbmNvZGU6YWpzLkh0bWwuZXNjYXBlIGFmdGVyIE1B
SUwtMTI5NzcKCgkJLCB0b09iamVjdDoJCVN0cmluZy50b09iamVjdAoJCSwgdG9R
dWVyeToJCVN0cmluZy50b1F1ZXJ5CgoJCSwgc2xlZXA6CQlUaW1lb3V0LnNldAoJ
CSwgY2xlYXJTbGVlcDoJVGltZW91dC5jbGVhcgoJCSwgbG9vcDoJCQlJbnRlcnZh
bC5zZXQKCQksIGNsZWFyTG9vcDoJSW50ZXJ2YWwuY2xlYXIKCgkJLCBjcmVhdGVD
bGFzczoJZnVuY3Rpb24gKG5hbWUsIEV4dCwgbWV0aG9kcykgewoJCQl2YXIgTmV3
Q2xhc3M7CgoJCQlpZiggYWpzLmlzT2JqZWN0KG5hbWUpIHx8IGFqcy5pc0Z1bmN0
aW9uKG5hbWUpICkKCQkJewoJCQkJaWYoICFuYW1lLmNsYXNzVW5pcUlkICYmIChu
YW1lLnN0YXRpY3MgfHwgbmFtZS5tZXRob2RzKSApCgkJCQl7CS8vIGpzQ2xhc3Mo
eyBuYW1lOiAnQ2xhc3MgbmFtZScsIGV4dGVuZDogW10sIHN0YXRpY3M6IHt9LCBt
ZXRob2RzOiB7fSB9KQoJCQkJCU5ld0NsYXNzCT0ganNDbGFzcy5jcmVhdGUobmFt
ZS5uYW1lLCBuYW1lKTsKCQkJCX0KCQkJCWVsc2UgaWYoIGFqcy5pc0Z1bmN0aW9u
KG5hbWUpIHx8IEFycmF5LmlzQXJyYXkobmFtZSkgKQoJCQkJewkvLyBqc0NsYXNz
KFtFeHRlbmRdLCB7IG1ldGhvZHMgfSkKCQkJCQlOZXdDbGFzcwk9IGpzQ2xhc3Mu
Y3JlYXRlKCkuZXh0ZW5kKCBuYW1lICkubWV0aG9kcyggRXh0ICk7CgkJCQl9CgkJ
CQllbHNlCgkJCQl7CS8vIGpzQ2xhc3MoeyBtZXRob2RzIH0pCgkJCQkJTmV3Q2xh
c3MJPSBqc0NsYXNzLmNyZWF0ZSgpLm1ldGhvZHMoIG5hbWUgKTsKCQkJCX0KCQkJ
fQoJCQllbHNlCgkJCXsJLy8ganNDbGFzcygnQ2xhc3MgbmFtZScsIFtFeHRlbmRd
LCB7IG1ldGhvZHMgfSkKCQkJCU5ld0NsYXNzCT0gQXJyYXkuaXNBcnJheShuYW1l
KSA/IGpzQ2xhc3MuY3JlYXRlKG5hbWVbMF0sIG5hbWVbMV0pIDoganNDbGFzcy5j
cmVhdGUobmFtZSk7CgoJCQkJaWYoIG1ldGhvZHMgKSBOZXdDbGFzcy5leHRlbmQu
YXBwbHkoTmV3Q2xhc3MsIEV4dCkubWV0aG9kcyhtZXRob2RzKTsKCQkJCWVsc2Ug
aWYoIEV4dCApIE5ld0NsYXNzLm1ldGhvZHMoIEV4dCApOwoJCQl9CgoJCQlyZXR1
cm4JTmV3Q2xhc3M7CgkJfQoKCgkJLCBzdGFja3RyYWNlOiBmdW5jdGlvbiAoKXsK
CQkJdmFyIGhhbHQsIHN0YWNrID0gW107CgoJCQl0cnkgeyBoYWx0KCk7IH0gY2F0
Y2goIGVycm9yICl7CgkJCQlhanMuZWFjaChlcnJvci5zdGFjay5zcGxpdCgnXG4n
KS5zbGljZSgyKSwgZnVuY3Rpb24gKHJvdywgaSl7CgkJCQkJdmFyIG1hdGNoID0g
cm93Lm1hdGNoKC9hdFxzKyhbXlxzXSspXHMrXCgoLispOihcZCspOi8pOwoKCQkJ
CQlpZiggbWF0Y2ggPT09IG51bGwgKXsKCQkJCQkJbWF0Y2ggPSByb3cubWF0Y2go
L14oW15AXSspQCguKik6KFxkKykkLyk7CgkJCQkJfQoKCQkJCQlpZiggbWF0Y2gg
IT0gbnVsbCApewoJCQkJCQlzdGFjay5wdXNoKChpID8gJyAgJyA6ICcnKSArICci
JyttYXRjaFsxXSsnIjogbGluZSAnK21hdGNoWzNdKycgaW4gJyttYXRjaFsyXSk7
CgkJCQkJfQoJCQkJfSk7CgkJCX0KCgkJCXJldHVybglzdGFjay5qb2luKCdcbicp
OwoJCX0KCgl9KTsKCgoJaWYoIF9GdW5jLmdhcCA9PT0gdm9pZCAwICkgX0Z1bmMu
Z2FwID0gZnVuY3Rpb24gKGNvbnRleHQsIGRlbGF5KQoJewoJCWlmKCBjb250ZXh0
ID49IDAgKQoJCXsKCQkJZGVsYXkJPSBjb250ZXh0OwoJCQljb250ZXh0CT0ge307
CgkJfQoKCQl2YXIgc2VsZiA9IHRoaXM7CgkJcmV0dXJuCWZ1bmN0aW9uICgpCgkJ
ewoJCQl2YXIgYSA9IGFyZ3VtZW50czsKCQkJc2V0VGltZW91dChmdW5jdGlvbiAo
KXsgc2VsZi5hcHBseShjb250ZXh0LCBhKTsgfSwgZGVsYXl8fDApOwoJCX07Cgl9
OwoKCglBcnJheS5mb3JFYWNoKFsnU3RyaW5nJywgJ051bWJlcicsICdBcnJheScs
ICdPYmplY3QnLCAnRnVuY3Rpb24nXSwgZnVuY3Rpb24gKHR5cGUpewoJCWlmKCAh
YWpzWydpcycrdHlwZV0gKSBhanNbJ2lzJyt0eXBlXSA9IGZ1bmN0aW9uKGFyZyl7
CgkJCXJldHVybglfdG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCAnK3R5
cGUrJ10nOwoJCX07Cgl9KTsKCglhanMud2luZG93V2lkdGggPSBmdW5jdGlvbiAo
KS8qKk51bWJlciovewoJCXJldHVybglnbG9iYWwuaW5uZXJXaWR0aAoJCQkJCT8g
Z2xvYmFsLmlubmVyV2lkdGgKCQkJCQk6IChkb2NFbAoJCQkJCQk/IChkb2NFbC5j
bGllbnRXaWR0aCB8fCBfZG9jdW1lbnQuYm9keSAmJiBfZG9jdW1lbnQuYm9keS5j
bGllbnRXaWR0aCB8fCAwKQoJCQkJCQk6IDApCgkJCTsKCX07CgoJYWpzLndpbmRv
d0hlaWdodCA9IGZ1bmN0aW9uICgpLyoqTnVtYmVyKi97CgkJcmV0dXJuCWdsb2Jh
bC5pbm5lckhlaWdodAoJCQkJCT8gZ2xvYmFsLmlubmVySGVpZ2h0CgkJCQkJOiAo
ZG9jRWwKCQkJCQkJPyAoZG9jRWwuY2xpZW50SGVpZ2h0IHx8IF9kb2N1bWVudC5i
b2R5ICYmIF9kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCB8fCAwKQoJCQkJCQk6
IDApCgkJCQk7Cgl9OwoKCWFqcy5zY3JvbGxUb3AgPSBmdW5jdGlvbiAoKXsKLy8J
CXJldHVybglpc0NTUzEgJiYgJC5icm93c2VyLm1zaWUgPyBkb2NFbC5zY3JvbGxU
b3AgOiBfZG9jdW1lbnQuYm9keSAmJiBfZG9jdW1lbnQuYm9keS5zY3JvbGxUb3Ag
fHwgMDsKCQlyZXR1cm4gdHlwZW9mIHBhZ2VZT2Zmc2V0ICE9PSAndW5kZWZpbmVk
JyA/CgkJCXBhZ2VZT2Zmc2V0IDoKCQkJKGRvY0VsLmNsaWVudEhlaWdodCA/IGRv
Y0VsIDogX2RvY3VtZW50LmJvZHkpLnNjcm9sbFRvcDsKCX07CgoJYWpzLnNjcm9s
bExlZnQgPSBmdW5jdGlvbiAoKXsKLy8JCXJldHVybglpc0NTUzEgJiYgJC5icm93
c2VyLm1zaWUgPyBkb2NFbC5zY3JvbGxMZWZ0IDogX2RvY3VtZW50LmJvZHkgJiYg
X2RvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCB8fCAwOwoJCXJldHVybiB0eXBlb2Yg
cGFnZVhPZmZzZXQgIT09ICd1bmRlZmluZWQnID8KCQkJcGFnZVhPZmZzZXQgOgoJ
CQkoZG9jRWwuY2xpZW50SGVpZ2h0ID8gZG9jRWwgOiBfZG9jdW1lbnQuYm9keSku
c2Nyb2xsTGVmdDsKCX07CgoKCWFqcy51dWlkID0gZnVuY3Rpb24oKXsKCQl2YXIg
UzQgPSBmdW5jdGlvbiAoKXsKCQkJcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5k
b20oKSAqIDB4MTAwMDAgLyogNjU1MzYgKi8pLnRvU3RyaW5nKDE2KTsKCQl9OwoK
CQlyZXR1cm4gKFM0KCkgKyBTNCgpICsgIi0iICsgUzQoKSArICItIiArIFM0KCkg
KyAiLSIgKyBTNCgpICsgIi0iICsgUzQoKSArIFM0KCkgKyBTNCgpKTsKCX07CgoK
CWFqcy5vcGVuV2luZG93ID0gZnVuY3Rpb24gKHVybCwgb3B0cyl7CgkJb3B0cyA9
IGFqcy5leHRlbmQoewoJCQkgIG5hbWU6CQkJJ3dpbmRvdycrYWpzLm5vdygpCgkJ
CSwgZnVsbHNjcmVlbjoJMAoJCQksIGxvY2F0aW9uOgkJMQoJCQksIG1lbnViYXI6
CQkxCgkJCSwgcmVzaXphYmxlOgkxCgkJCSwgc2Nyb2xsYmFyczoJMQoJCQksIHN0
YXR1czoJCTEKCQkJLCB0aXRsZWJhcjoJCTEKCQkJLCB0b29sYmFyOgkJMQoJCQks
IGxlZnQ6CQkJJycKCQkJLCB0b3A6CQkJJycKCQkJLCB3aWR0aDoJCScnCgkJCSwg
aGVpZ2h0OgkJJycKCQl9LCBvcHRzKTsKCgkJaWYoIChvcHRzLmxlZnQgPT0gJycp
ICYmIChvcHRzLndpZHRoID4gMCkgKQlvcHRzLmxlZnQJPSBNYXRoLm1heCgwLCAo
c2NyZWVuLndpZHRoIC0gb3B0cy53aWR0aCkvMik7CgkJaWYoIChvcHRzLnRvcCA9
PSAnJykgJiYgKG9wdHMuaGVpZ2h0ID4gMCkgKQlvcHRzLnRvcAk9IE1hdGgubWF4
KDAsIChzY3JlZW4uaGVpZ2h0IC0gb3B0cy5oZWlnaHQpLzIpOwoKCQl2YXIgX3Ag
PSBbXTsKCQlhanMuZWFjaChvcHRzLCBmdW5jdGlvbiAodiwgayl7IGlmKCB2ICE9
PSAnJyApIF9wLnB1c2goaysnPScrdik7IH0pOwoKCQlyZXR1cm4Jd2luZG93Lm9w
ZW4odXJsLCBvcHRzLm5hbWUsIF9wLmpvaW4oJywnKSk7Cgl9OwoKCglhanMub3Bl
blBvcFVwID0gZnVuY3Rpb24gKHVybCwgb3B0cyl7CgkJcmV0dXJuCWFqcy5vcGVu
V2luZG93KHVybCwgYWpzLmV4dGVuZCh7CgkJCSAgbG9jYXRpb246CQkwCgkJCSwg
bWVudWJhcjoJCTAKCQkJLCByZXNpemFibGU6CTAKCQkJLCB0b29sYmFyOgkJMAoJ
CX0sIG9wdHMpKTsKCX07CgoKCWFqcy5jbGljayA9IGZ1bmN0aW9uIChuYW1lLCBm
bil7CgkJaWYoICFmbiApewoJCQlmbiAgID0gbmFtZTsKCQkJbmFtZSA9ICdkZWZh
dWx0JzsKCQl9CgoJCWlmKCAhYWpzLl9jbGlja0ZuW25hbWVdICkgYWpzLl9jbGlj
a0ZuW25hbWVdID0gW107CgkJYWpzLl9jbGlja0ZuW25hbWVdLnB1c2goZm4pOwoJ
fTsKCgoJJChkb2N1bWVudCkuY2xpY2soZnVuY3Rpb24gKGV2dCl7CgkJdmFyIG5v
ZGUgPSBldnQudGFyZ2V0LCBuYW1lLCBjbGlja0ZuLCByZXM7CgoJCWlmKCBub2Rl
ICkgZG8gewoJCQlpZiggbm9kZS5ub2RlVHlwZSA9PSAxICl7CgkJCQluYW1lID0g
bm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xpY2snKTsKCQkJCWV2dC5jdXJyZW50
VGFyZ2V0ID0gbm9kZTsKCgkJCQlpZiggbmFtZSA9PT0gbnVsbCAmJiBub2RlLnRh
Z05hbWUgPT0gJ0EnICl7CgkJCQkJbmFtZSA9ICdkZWZhdWx0JzsKCQkJCX0KCgkJ
CQljbGlja0ZuID0gYWpzLl9jbGlja0ZuW25hbWVdOwoKCQkJCWlmKCB0eXBlb2Yg
Y2xpY2tGbiAhPT0gJ3VuZGVmaW5lZCcgKXsKCQkJCQlmb3IoIHZhciBpID0gMCwg
biA9IGNsaWNrRm4ubGVuZ3RoOyBpIDwgbjsgaSsrICl7CgkJCQkJCXJlcyA9IGNs
aWNrRm5baV0uY2FsbChub2RlLCBldnQpOwoKCQkJCQkJaWYoIGV2dC5pc0ltbWVk
aWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICl7CgkJCQkJCQlyZXR1cm47CgkJCQkJ
CX0KCQkJCQl9CgoJCQkJCWlmKCBldnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAp
ewoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCXdoaWxlKCAo
bm9kZSA9IG5vZGUucGFyZW50Tm9kZSkgJiYgKG5vZGUgIT09IGRvY3VtZW50LmJv
ZHkpICk7Cgl9KTsKCgoJLyoqCgkgKiBFeHBlcmltZW50YWwgZXhwb3J0cwoJICoK
CSAqIEBwYXJhbQl7U3RyaW5nfQlmaWxlbmFtZSAtLSB3aGljaCBhbGlhcwoJICog
QHBhcmFtCXtPYmplY3R9CW9iamVjdAoJICovCglhanMuZXhwb3J0cyA9IGZ1bmN0
aW9uIChmaWxlbmFtZSwgb2JqZWN0KXsKCQl2YXIgbmFtZXNwYWNlID0gZmlsZW5h
bWUucmVwbGFjZSgvXi4rXH0oLitcLyk/LywgJycpLnNwbGl0KCcuJyk7CgoJCWlm
KCBuYW1lc3BhY2UubGVuZ3RoID4gMSApewoJCQl2YXIgbmFtZSA9IG5hbWVzcGFj
ZS5wb3AoKTsKCQkJanNDb3JlLm5hbWVzcGFjZShuYW1lc3BhY2Uuam9pbignLicp
KVtuYW1lXSA9IG9iamVjdDsKCQl9IGVsc2UgewoJCQl3aW5kb3dbbmFtZXNwYWNl
WzBdXSA9IG9iamVjdDsKCQl9CgoJCWFqcy5sb2FkZWQoZmlsZW5hbWUpOwoJfTsK
CgoJLy8gQGV4cG9ydAoJZ2xvYmFsWyJhanMiXSA9IGFqczsKfSkod2luZG93LCBk
b2N1bWVudCwganNDb3JlKTsKCmpzTG9hZGVyLmxvYWRlZCgne2pzQ29yZX1qc0Nv
cmUuYWpzJywgMSk7CgoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvanNDb3JlL2pz
Q29yZS5hanMuanMgZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUv
c3dmb2JqZWN0LmpzIHN0YXJ0CgovKglTV0ZPYmplY3QgdjIuMiA8aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL3N3Zm9iamVjdC8+CglpcyByZWxlYXNlZCB1bmRlciB0
aGUgTUlUIExpY2Vuc2UgPGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5z
ZXMvbWl0LWxpY2Vuc2UucGhwPgoqLwoKaWYgKCF3aW5kb3cuc3dmb2JqZWN0KQp7
Cgl2YXIgc3dmb2JqZWN0ID0gZnVuY3Rpb24oKSB7CgoJCXZhciBVTkRFRiA9ICJ1
bmRlZmluZWQiLAoJCQlPQkpFQ1QgPSAib2JqZWN0IiwKCQkJU0hPQ0tXQVZFX0ZM
QVNIID0gIlNob2Nrd2F2ZSBGbGFzaCIsCgkJCVNIT0NLV0FWRV9GTEFTSF9BWCA9
ICJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIsCgkJCUZMQVNIX01JTUVf
VFlQRSA9ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsCgkJCUVYUFJF
U1NfSU5TVEFMTF9JRCA9ICJTV0ZPYmplY3RFeHBySW5zdCIsCgkJCU9OX1JFQURZ
X1NUQVRFX0NIQU5HRSA9ICJvbnJlYWR5c3RhdGVjaGFuZ2UiLAoKCQkJd2luID0g
d2luZG93LAoJCQlkb2MgPSBkb2N1bWVudCwKCQkJbmF2ID0gbmF2aWdhdG9yLAoK
CQkJcGx1Z2luID0gZmFsc2UsCgkJCWRvbUxvYWRGbkFyciA9IFttYWluXSwKCQkJ
cmVnT2JqQXJyID0gW10sCgkJCW9iaklkQXJyID0gW10sCgkJCWxpc3RlbmVyc0Fy
ciA9IFtdLAoJCQlzdG9yZWRBbHRDb250ZW50LAoJCQlzdG9yZWRBbHRDb250ZW50
SWQsCgkJCXN0b3JlZENhbGxiYWNrRm4sCgkJCXN0b3JlZENhbGxiYWNrT2JqLAoJ
CQlpc0RvbUxvYWRlZCA9IGZhbHNlLAoJCQlpc0V4cHJlc3NJbnN0YWxsQWN0aXZl
ID0gZmFsc2UsCgkJCWR5bmFtaWNTdHlsZXNoZWV0LAoJCQlkeW5hbWljU3R5bGVz
aGVldE1lZGlhLAoJCQlhdXRvSGlkZVNob3cgPSB0cnVlLAoKCQkvKiBDZW50cmFs
aXplZCBmdW5jdGlvbiBmb3IgYnJvd3NlciBmZWF0dXJlIGRldGVjdGlvbgoJCQkt
IFVzZXIgYWdlbnQgc3RyaW5nIGRldGVjdGlvbiBpcyBvbmx5IHVzZWQgd2hlbiBu
byBnb29kIGFsdGVybmF0aXZlIGlzIHBvc3NpYmxlCgkJCS0gSXMgZXhlY3V0ZWQg
ZGlyZWN0bHkgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UKCQkqLwoJCXVhID0gZnVu
Y3Rpb24oKSB7CgkJCXZhciB3M2Nkb20gPSB0eXBlb2YgZG9jLmdldEVsZW1lbnRC
eUlkICE9IFVOREVGICYmIHR5cGVvZiBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUg
IT0gVU5ERUYgJiYgdHlwZW9mIGRvYy5jcmVhdGVFbGVtZW50ICE9IFVOREVGLAoJ
CQkJdSA9IG5hdi51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSwKCQkJCXAgPSBuYXYu
cGxhdGZvcm0udG9Mb3dlckNhc2UoKSwKCQkJCXdpbmRvd3MgPSBwID8gL3dpbi8u
dGVzdChwKSA6IC93aW4vLnRlc3QodSksCgkJCQltYWMgPSBwID8gL21hYy8udGVz
dChwKSA6IC9tYWMvLnRlc3QodSksCgkJCQl3ZWJraXQgPSAvd2Via2l0Ly50ZXN0
KHUpID8gcGFyc2VGbG9hdCh1LnJlcGxhY2UoL14uKndlYmtpdFwvKFxkKyhcLlxk
Kyk/KS4qJC8sICIkMSIpKSA6IGZhbHNlLCAvLyByZXR1cm5zIGVpdGhlciB0aGUg
d2Via2l0IHZlcnNpb24gb3IgZmFsc2UgaWYgbm90IHdlYmtpdAoJCQkJaWUgPSAh
KyJcdjEiLCAvLyBmZWF0dXJlIGRldGVjdGlvbiBiYXNlZCBvbiBBbmRyZWEgR2lh
bW1hcmNoaSdzIHNvbHV0aW9uOiBodHRwOi8vd2VicmVmbGVjdGlvbi5ibG9nc3Bv
dC5jb20vMjAwOS8wMS8zMi1ieXRlcy10by1rbm93LWlmLXlvdXItYnJvd3Nlci1p
cy1pZS5odG1sCgkJCQlwbGF5ZXJWZXJzaW9uID0gWzAsMCwwXSwKCQkJCWQgPSBu
dWxsOwoJCQlpZiAodHlwZW9mIG5hdi5wbHVnaW5zICE9IFVOREVGICYmIHR5cGVv
ZiBuYXYucGx1Z2luc1tTSE9DS1dBVkVfRkxBU0hdID09IE9CSkVDVCkgewoJCQkJ
ZCA9IG5hdi5wbHVnaW5zW1NIT0NLV0FWRV9GTEFTSF0uZGVzY3JpcHRpb247CgkJ
CQlpZiAoZCAmJiAhKHR5cGVvZiBuYXYubWltZVR5cGVzICE9IFVOREVGICYmIG5h
di5taW1lVHlwZXNbRkxBU0hfTUlNRV9UWVBFXSAmJiAhbmF2Lm1pbWVUeXBlc1tG
TEFTSF9NSU1FX1RZUEVdLmVuYWJsZWRQbHVnaW4pKSB7IC8vIG5hdmlnYXRvci5t
aW1lVHlwZXNbImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIl0uZW5hYmxl
ZFBsdWdpbiBpbmRpY2F0ZXMgd2hldGhlciBwbHVnLWlucyBhcmUgZW5hYmxlZCBv
ciBkaXNhYmxlZCBpbiBTYWZhcmkgMysKCQkJCQlwbHVnaW4gPSB0cnVlOwoJCQkJ
CWllID0gZmFsc2U7IC8vIGNhc2NhZGVkIGZlYXR1cmUgZGV0ZWN0aW9uIGZvciBJ
bnRlcm5ldCBFeHBsb3JlcgoJCQkJCWQgPSBkLnJlcGxhY2UoL14uKlxzKyhcUytc
cytcUyskKS8sICIkMSIpOwoJCQkJCXBsYXllclZlcnNpb25bMF0gPSBwYXJzZUlu
dChkLnJlcGxhY2UoL14oLiopXC4uKiQvLCAiJDEiKSwgMTApOwoJCQkJCXBsYXll
clZlcnNpb25bMV0gPSBwYXJzZUludChkLnJlcGxhY2UoL14uKlwuKC4qKVxzLiok
LywgIiQxIiksIDEwKTsKCQkJCQlwbGF5ZXJWZXJzaW9uWzJdID0gL1thLXpBLVpd
Ly50ZXN0KGQpID8gcGFyc2VJbnQoZC5yZXBsYWNlKC9eLipbYS16QS1aXSsoLiop
JC8sICIkMSIpLCAxMCkgOiAwOwoJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKHR5cGVv
ZiB3aW4uQWN0aXZlWE9iamVjdCAhPSBVTkRFRikgewoJCQkJdHJ5IHsKCQkJCQl2
YXIgYSA9IG5ldyBBY3RpdmVYT2JqZWN0KFNIT0NLV0FWRV9GTEFTSF9BWCk7CgkJ
CQkJaWYgKGEpIHsgLy8gYSB3aWxsIHJldHVybiBudWxsIHdoZW4gQWN0aXZlWCBp
cyBkaXNhYmxlZAoJCQkJCQlkID0gYS5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTsK
CQkJCQkJaWYgKGQpIHsKCQkJCQkJCWllID0gdHJ1ZTsgLy8gY2FzY2FkZWQgZmVh
dHVyZSBkZXRlY3Rpb24gZm9yIEludGVybmV0IEV4cGxvcmVyCgkJCQkJCQlkID0g
ZC5zcGxpdCgiICIpWzFdLnNwbGl0KCIsIik7CgkJCQkJCQlwbGF5ZXJWZXJzaW9u
ID0gW3BhcnNlSW50KGRbMF0sIDEwKSwgcGFyc2VJbnQoZFsxXSwgMTApLCBwYXJz
ZUludChkWzJdLCAxMCldOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJY2F0Y2go
ZSkge30KCQkJfQoJCQlyZXR1cm4geyB3Mzp3M2Nkb20sIHB2OnBsYXllclZlcnNp
b24sIHdrOndlYmtpdCwgaWU6aWUsIHdpbjp3aW5kb3dzLCBtYWM6bWFjIH07CgkJ
fSgpLAoKCQkvKiBDcm9zcy1icm93c2VyIG9uRG9tTG9hZAoJCQktIFdpbGwgZmly
ZSBhbiBldmVudCBhcyBzb29uIGFzIHRoZSBET00gb2YgYSB3ZWIgcGFnZSBpcyBs
b2FkZWQKCQkJLSBJbnRlcm5ldCBFeHBsb3JlciB3b3JrYXJvdW5kIGJhc2VkIG9u
IERpZWdvIFBlcmluaSdzIHNvbHV0aW9uOiBodHRwOi8vamF2YXNjcmlwdC5ud2Jv
eC5jb20vSUVDb250ZW50TG9hZGVkLwoJCQktIFJlZ3VsYXIgb25sb2FkIHNlcnZl
cyBhcyBmYWxsYmFjawoJCSovCgkJb25Eb21Mb2FkID0gZnVuY3Rpb24oKSB7CgkJ
CWlmICghdWEudzMpIHsgcmV0dXJuOyB9CgkJCWlmICgodHlwZW9mIGRvYy5yZWFk
eVN0YXRlICE9IFVOREVGICYmIGRvYy5yZWFkeVN0YXRlID09ICJjb21wbGV0ZSIp
IHx8ICh0eXBlb2YgZG9jLnJlYWR5U3RhdGUgPT0gVU5ERUYgJiYgKGRvYy5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdIHx8IGRvYy5ib2R5KSkpIHsgLy8g
ZnVuY3Rpb24gaXMgZmlyZWQgYWZ0ZXIgb25sb2FkLCBlLmcuIHdoZW4gc2NyaXB0
IGlzIGluc2VydGVkIGR5bmFtaWNhbGx5CgkJCQljYWxsRG9tTG9hZEZ1bmN0aW9u
cygpOwoJCQl9CgkJCWlmICghaXNEb21Mb2FkZWQpIHsKCQkJCWlmICh0eXBlb2Yg
ZG9jLmFkZEV2ZW50TGlzdGVuZXIgIT0gVU5ERUYpIHsKCQkJCQlkb2MuYWRkRXZl
bnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGNhbGxEb21Mb2FkRnVuY3Rp
b25zLCBmYWxzZSk7CgkJCQl9CgkJCQlpZiAodWEuaWUgJiYgdWEud2luKSB7CgkJ
CQkJZG9jLmF0dGFjaEV2ZW50KE9OX1JFQURZX1NUQVRFX0NIQU5HRSwgZnVuY3Rp
b24oKSB7CgkJCQkJCWlmIChkb2MucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSB7
CgkJCQkJCQlkb2MuZGV0YWNoRXZlbnQoT05fUkVBRFlfU1RBVEVfQ0hBTkdFLCBh
cmd1bWVudHMuY2FsbGVlKTsKCQkJCQkJCWNhbGxEb21Mb2FkRnVuY3Rpb25zKCk7
CgkJCQkJCX0KCQkJCQl9KTsKCQkJCQlpZiAod2luID09IHRvcCkgeyAvLyBpZiBu
b3QgaW5zaWRlIGFuIGlmcmFtZQoJCQkJCQkoZnVuY3Rpb24oKXsKCQkJCQkJCWlm
IChpc0RvbUxvYWRlZCkgeyByZXR1cm47IH0KCQkJCQkJCXRyeSB7CgkJCQkJCQkJ
ZG9jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpOwoJCQkJCQkJfQoJ
CQkJCQkJY2F0Y2goZSkgewoJCQkJCQkJCXNldFRpbWVvdXQoYXJndW1lbnRzLmNh
bGxlZSwgMCk7CgkJCQkJCQkJcmV0dXJuOwoJCQkJCQkJfQoJCQkJCQkJY2FsbERv
bUxvYWRGdW5jdGlvbnMoKTsKCQkJCQkJfSkoKTsKCQkJCQl9CgkJCQl9CgkJCQlp
ZiAodWEud2spIHsKCQkJCQkoZnVuY3Rpb24oKXsKCQkJCQkJaWYgKGlzRG9tTG9h
ZGVkKSB7IHJldHVybjsgfQoJCQkJCQlpZiAoIS9sb2FkZWR8Y29tcGxldGUvLnRl
c3QoZG9jLnJlYWR5U3RhdGUpKSB7CgkJCQkJCQlzZXRUaW1lb3V0KGFyZ3VtZW50
cy5jYWxsZWUsIDApOwoJCQkJCQkJcmV0dXJuOwoJCQkJCQl9CgkJCQkJCWNhbGxE
b21Mb2FkRnVuY3Rpb25zKCk7CgkJCQkJfSkoKTsKCQkJCX0KCQkJCWFkZExvYWRF
dmVudChjYWxsRG9tTG9hZEZ1bmN0aW9ucyk7CgkJCX0KCQl9KCk7CgoJCWZ1bmN0
aW9uIGNhbGxEb21Mb2FkRnVuY3Rpb25zKCkgewoJCQlpZiAoaXNEb21Mb2FkZWQp
IHsgcmV0dXJuOyB9CgkJCXRyeSB7IC8vIHRlc3QgaWYgd2UgY2FuIHJlYWxseSBh
ZGQvcmVtb3ZlIGVsZW1lbnRzIHRvL2Zyb20gdGhlIERPTTsgd2UgZG9uJ3Qgd2Fu
dCB0byBmaXJlIGl0IHRvbyBlYXJseQoJCQkJdmFyIHQgPSBkb2MuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoImJvZHkiKVswXS5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50
KCJzcGFuIikpOwoJCQkJdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpOwoJCQl9
CgkJCWNhdGNoIChlKSB7IHJldHVybjsgfQoJCQlpc0RvbUxvYWRlZCA9IHRydWU7
CgkJCXZhciBkbCA9IGRvbUxvYWRGbkFyci5sZW5ndGg7CgkJCWZvciAodmFyIGkg
PSAwOyBpIDwgZGw7IGkrKykgewoJCQkJZG9tTG9hZEZuQXJyW2ldKCk7CgkJCX0K
CQl9CgoJCWZ1bmN0aW9uIGFkZERvbUxvYWRFdmVudChmbikgewoJCQlpZiAoaXNE
b21Mb2FkZWQpIHsKCQkJCWZuKCk7CgkJCX0KCQkJZWxzZSB7CgkJCQlkb21Mb2Fk
Rm5BcnJbZG9tTG9hZEZuQXJyLmxlbmd0aF0gPSBmbjsgLy8gQXJyYXkucHVzaCgp
IGlzIG9ubHkgYXZhaWxhYmxlIGluIElFNS41KwoJCQl9CgkJfQoKCQkvKiBDcm9z
cy1icm93c2VyIG9ubG9hZAoJCQktIEJhc2VkIG9uIEphbWVzIEVkd2FyZHMnIHNv
bHV0aW9uOiBodHRwOi8vYnJvdGhlcmNha2UuY29tL3NpdGUvcmVzb3VyY2VzL3Nj
cmlwdHMvb25sb2FkLwoJCQktIFdpbGwgZmlyZSBhbiBldmVudCBhcyBzb29uIGFz
IGEgd2ViIHBhZ2UgaW5jbHVkaW5nIGFsbCBvZiBpdHMgYXNzZXRzIGFyZSBsb2Fk
ZWQKCQkgKi8KCQlmdW5jdGlvbiBhZGRMb2FkRXZlbnQoZm4pIHsKCQkJaWYgKHR5
cGVvZiB3aW4uYWRkRXZlbnRMaXN0ZW5lciAhPSBVTkRFRikgewoJCQkJd2luLmFk
ZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmbiwgZmFsc2UpOwoJCQl9CgkJCWVsc2Ug
aWYgKHR5cGVvZiBkb2MuYWRkRXZlbnRMaXN0ZW5lciAhPSBVTkRFRikgewoJCQkJ
ZG9jLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmbiwgZmFsc2UpOwoJCQl9CgkJ
CWVsc2UgaWYgKHR5cGVvZiB3aW4uYXR0YWNoRXZlbnQgIT0gVU5ERUYpIHsKCQkJ
CWFkZExpc3RlbmVyKHdpbiwgIm9ubG9hZCIsIGZuKTsKCQkJfQoJCQllbHNlIGlm
ICh0eXBlb2Ygd2luLm9ubG9hZCA9PSAiZnVuY3Rpb24iKSB7CgkJCQl2YXIgZm5P
bGQgPSB3aW4ub25sb2FkOwoJCQkJd2luLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewoJ
CQkJCWZuT2xkKCk7CgkJCQkJZm4oKTsKCQkJCX07CgkJCX0KCQkJZWxzZSB7CgkJ
CQl3aW4ub25sb2FkID0gZm47CgkJCX0KCQl9CgoJCS8qIE1haW4gZnVuY3Rpb24K
CQkJLSBXaWxsIHByZWZlcmFibHkgZXhlY3V0ZSBvbkRvbUxvYWQsIG90aGVyd2lz
ZSBvbmxvYWQgKGFzIGEgZmFsbGJhY2spCgkJKi8KCQlmdW5jdGlvbiBtYWluKCkg
ewoJCQlpZiAocGx1Z2luKSB7CgkJCQl0ZXN0UGxheWVyVmVyc2lvbigpOwoJCQl9
CgkJCWVsc2UgewoJCQkJbWF0Y2hWZXJzaW9ucygpOwoJCQl9CgkJfQoKCQkvKiBE
ZXRlY3QgdGhlIEZsYXNoIFBsYXllciB2ZXJzaW9uIGZvciBub24tSW50ZXJuZXQg
RXhwbG9yZXIgYnJvd3NlcnMKCQkJLSBEZXRlY3RpbmcgdGhlIHBsdWctaW4gdmVy
c2lvbiB2aWEgdGhlIG9iamVjdCBlbGVtZW50IGlzIG1vcmUgcHJlY2lzZSB0aGFu
IHVzaW5nIHRoZSBwbHVnaW5zIGNvbGxlY3Rpb24gaXRlbSdzIGRlc2NyaXB0aW9u
OgoJCQkgIGEuIEJvdGggcmVsZWFzZSBhbmQgYnVpbGQgbnVtYmVycyBjYW4gYmUg
ZGV0ZWN0ZWQKCQkJICBiLiBBdm9pZCB3cm9uZyBkZXNjcmlwdGlvbnMgYnkgY29y
cnVwdCBpbnN0YWxsZXJzIHByb3ZpZGVkIGJ5IEFkb2JlCgkJCSAgYy4gQXZvaWQg
d3JvbmcgZGVzY3JpcHRpb25zIGJ5IG11bHRpcGxlIEZsYXNoIFBsYXllciBlbnRy
aWVzIGluIHRoZSBwbHVnaW4gQXJyYXksIGNhdXNlZCBieSBpbmNvcnJlY3QgYnJv
d3NlciBpbXBvcnRzCgkJCS0gRGlzYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIGlz
IHRoYXQgaXQgZGVwZW5kcyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBET00s
IHdoaWxlIHRoZSBwbHVnaW5zIGNvbGxlY3Rpb24gaXMgaW1tZWRpYXRlbHkgYXZh
aWxhYmxlCgkJKi8KCQlmdW5jdGlvbiB0ZXN0UGxheWVyVmVyc2lvbigpIHsKCQkJ
dmFyIGIgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKCQkJ
dmFyIG8gPSBjcmVhdGVFbGVtZW50KE9CSkVDVCk7CgkJCW8uc2V0QXR0cmlidXRl
KCJ0eXBlIiwgRkxBU0hfTUlNRV9UWVBFKTsKCQkJdmFyIHQgPSBiLmFwcGVuZENo
aWxkKG8pOwoJCQlpZiAodCkgewoJCQkJdmFyIGNvdW50ZXIgPSAwOwoJCQkJKGZ1
bmN0aW9uKCl7CgkJCQkJaWYgKHR5cGVvZiB0LkdldFZhcmlhYmxlICE9IFVOREVG
KSB7CgkJCQkJCXZhciBkID0gdC5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTsKCQkJ
CQkJaWYgKGQpIHsKCQkJCQkJCWQgPSBkLnNwbGl0KCIgIilbMV0uc3BsaXQoIiwi
KTsKCQkJCQkJCXVhLnB2ID0gW3BhcnNlSW50KGRbMF0sIDEwKSwgcGFyc2VJbnQo
ZFsxXSwgMTApLCBwYXJzZUludChkWzJdLCAxMCldOwoJCQkJCQl9CgkJCQkJfQoJ
CQkJCWVsc2UgaWYgKGNvdW50ZXIgPCAxMCkgewoJCQkJCQljb3VudGVyKys7CgkJ
CQkJCXNldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwgMTApOwoJCQkJCQlyZXR1
cm47CgkJCQkJfQoJCQkJCWIucmVtb3ZlQ2hpbGQobyk7CgkJCQkJdCA9IG51bGw7
CgkJCQkJbWF0Y2hWZXJzaW9ucygpOwoJCQkJfSkoKTsKCQkJfQoJCQllbHNlIHsK
CQkJCW1hdGNoVmVyc2lvbnMoKTsKCQkJfQoJCX0KCgkJLyogUGVyZm9ybSBGbGFz
aCBQbGF5ZXIgYW5kIFNXRiB2ZXJzaW9uIG1hdGNoaW5nOyBzdGF0aWMgcHVibGlz
aGluZyBvbmx5CgkJKi8KCQlmdW5jdGlvbiBtYXRjaFZlcnNpb25zKCkgewoJCQl2
YXIgcmwgPSByZWdPYmpBcnIubGVuZ3RoOwoJCQlpZiAocmwgPiAwKSB7CgkJCQlm
b3IgKHZhciBpID0gMDsgaSA8IHJsOyBpKyspIHsgLy8gZm9yIGVhY2ggcmVnaXN0
ZXJlZCBvYmplY3QgZWxlbWVudAoJCQkJCXZhciBpZCA9IHJlZ09iakFycltpXS5p
ZDsKCQkJCQl2YXIgY2IgPSByZWdPYmpBcnJbaV0uY2FsbGJhY2tGbjsKCQkJCQl2
YXIgY2JPYmogPSB7c3VjY2VzczpmYWxzZSwgaWQ6aWR9OwoJCQkJCWlmICh1YS5w
dlswXSA+IDApIHsKCQkJCQkJdmFyIG9iaiA9IGdldEVsZW1lbnRCeUlkKGlkKTsK
CQkJCQkJaWYgKG9iaikgewoJCQkJCQkJaWYgKGhhc1BsYXllclZlcnNpb24ocmVn
T2JqQXJyW2ldLnN3ZlZlcnNpb24pICYmICEodWEud2sgJiYgdWEud2sgPCAzMTIp
KSB7IC8vIEZsYXNoIFBsYXllciB2ZXJzaW9uID49IHB1Ymxpc2hlZCBTV0YgdmVy
c2lvbjogSG91c3Rvbiwgd2UgaGF2ZSBhIG1hdGNoIQoJCQkJCQkJCXNldFZpc2li
aWxpdHkoaWQsIHRydWUpOwoJCQkJCQkJCWlmIChjYikgewoJCQkJCQkJCQljYk9i
ai5zdWNjZXNzID0gdHJ1ZTsKCQkJCQkJCQkJY2JPYmoucmVmID0gZ2V0T2JqZWN0
QnlJZChpZCk7CgkJCQkJCQkJCWNiKGNiT2JqKTsKCQkJCQkJCQl9CgkJCQkJCQl9
CgkJCQkJCQllbHNlIGlmIChyZWdPYmpBcnJbaV0uZXhwcmVzc0luc3RhbGwgJiYg
Y2FuRXhwcmVzc0luc3RhbGwoKSkgeyAvLyBzaG93IHRoZSBBZG9iZSBFeHByZXNz
IEluc3RhbGwgZGlhbG9nIGlmIHNldCBieSB0aGUgd2ViIHBhZ2UgYXV0aG9yIGFu
ZCBpZiBzdXBwb3J0ZWQKCQkJCQkJCQl2YXIgYXR0ID0ge307CgkJCQkJCQkJYXR0
LmRhdGEgPSByZWdPYmpBcnJbaV0uZXhwcmVzc0luc3RhbGw7CgkJCQkJCQkJYXR0
LndpZHRoID0gb2JqLmdldEF0dHJpYnV0ZSgid2lkdGgiKSB8fCAiMCI7CgkJCQkJ
CQkJYXR0LmhlaWdodCA9IG9iai5nZXRBdHRyaWJ1dGUoImhlaWdodCIpIHx8ICIw
IjsKCQkJCQkJCQlpZiAob2JqLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSkgeyBhdHQu
c3R5bGVjbGFzcyA9IG9iai5nZXRBdHRyaWJ1dGUoImNsYXNzIik7IH0KCQkJCQkJ
CQlpZiAob2JqLmdldEF0dHJpYnV0ZSgiYWxpZ24iKSkgeyBhdHQuYWxpZ24gPSBv
YmouZ2V0QXR0cmlidXRlKCJhbGlnbiIpOyB9CgkJCQkJCQkJLy8gcGFyc2UgSFRN
TCBvYmplY3QgcGFyYW0gZWxlbWVudCdzIG5hbWUtdmFsdWUgcGFpcnMKCQkJCQkJ
CQl2YXIgcGFyID0ge307CgkJCQkJCQkJdmFyIHAgPSBvYmouZ2V0RWxlbWVudHNC
eVRhZ05hbWUoInBhcmFtIik7CgkJCQkJCQkJdmFyIHBsID0gcC5sZW5ndGg7CgkJ
CQkJCQkJZm9yICh2YXIgaiA9IDA7IGogPCBwbDsgaisrKSB7CgkJCQkJCQkJCWlm
IChwW2pdLmdldEF0dHJpYnV0ZSgibmFtZSIpLnRvTG93ZXJDYXNlKCkgIT0gIm1v
dmllIikgewoJCQkJCQkJCQkJcGFyW3Bbal0uZ2V0QXR0cmlidXRlKCJuYW1lIild
ID0gcFtqXS5nZXRBdHRyaWJ1dGUoInZhbHVlIik7CgkJCQkJCQkJCX0KCQkJCQkJ
CQl9CgkJCQkJCQkJc2hvd0V4cHJlc3NJbnN0YWxsKGF0dCwgcGFyLCBpZCwgY2Ip
OwoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7IC8vIEZsYXNoIFBsYXllciBhbmQgU1dG
IHZlcnNpb24gbWlzbWF0Y2ggb3IgYW4gb2xkZXIgV2Via2l0IGVuZ2luZSB0aGF0
IGlnbm9yZXMgdGhlIEhUTUwgb2JqZWN0IGVsZW1lbnQncyBuZXN0ZWQgcGFyYW0g
ZWxlbWVudHM6IGRpc3BsYXkgYWx0ZXJuYXRpdmUgY29udGVudCBpbnN0ZWFkIG9m
IFNXRgoJCQkJCQkJCWRpc3BsYXlBbHRDb250ZW50KG9iaik7CgkJCQkJCQkJaWYg
KGNiKSB7IGNiKGNiT2JqKTsgfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJ
CWVsc2UgewkvLyBpZiBubyBGbGFzaCBQbGF5ZXIgaXMgaW5zdGFsbGVkIG9yIHRo
ZSBmcCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlY3RlZCB3ZSBsZXQgdGhlIEhUTUwg
b2JqZWN0IGVsZW1lbnQgZG8gaXRzIGpvYiAoZWl0aGVyIHNob3cgYSBTV0Ygb3Ig
YWx0ZXJuYXRpdmUgY29udGVudCkKCQkJCQkJc2V0VmlzaWJpbGl0eShpZCwgdHJ1
ZSk7CgkJCQkJCWlmIChjYikgewoJCQkJCQkJdmFyIG8gPSBnZXRPYmplY3RCeUlk
KGlkKTsgLy8gdGVzdCB3aGV0aGVyIHRoZXJlIGlzIGFuIEhUTUwgb2JqZWN0IGVs
ZW1lbnQgb3Igbm90CgkJCQkJCQlpZiAobyAmJiB0eXBlb2Ygby5TZXRWYXJpYWJs
ZSAhPSBVTkRFRikgewoJCQkJCQkJCWNiT2JqLnN1Y2Nlc3MgPSB0cnVlOwoJCQkJ
CQkJCWNiT2JqLnJlZiA9IG87CgkJCQkJCQl9CgkJCQkJCQljYihjYk9iaik7CgkJ
CQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCWZ1bmN0aW9uIGdldE9iamVj
dEJ5SWQob2JqZWN0SWRTdHIpIHsKCQkJdmFyIHIgPSBudWxsOwoJCQl2YXIgbyA9
IGdldEVsZW1lbnRCeUlkKG9iamVjdElkU3RyKTsKCQkJaWYgKG8gJiYgby5ub2Rl
TmFtZSA9PSAiT0JKRUNUIikgewoJCQkJaWYgKHR5cGVvZiBvLlNldFZhcmlhYmxl
ICE9IFVOREVGKSB7CgkJCQkJciA9IG87CgkJCQl9CgkJCQllbHNlIHsKCQkJCQl2
YXIgbiA9IG8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoT0JKRUNUKVswXTsKCQkJCQlp
ZiAobikgewoJCQkJCQlyID0gbjsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJcmV0dXJu
IHI7CgkJfQoKCQkvKiBSZXF1aXJlbWVudHMgZm9yIEFkb2JlIEV4cHJlc3MgSW5z
dGFsbAoJCQktIG9ubHkgb25lIGluc3RhbmNlIGNhbiBiZSBhY3RpdmUgYXQgYSB0
aW1lCgkJCS0gZnAgNi4wLjY1IG9yIGhpZ2hlcgoJCQktIFdpbi9NYWMgT1Mgb25s
eQoJCQktIG5vIFdlYmtpdCBlbmdpbmVzIG9sZGVyIHRoYW4gdmVyc2lvbiAzMTIK
CQkqLwoJCWZ1bmN0aW9uIGNhbkV4cHJlc3NJbnN0YWxsKCkgewoJCQlyZXR1cm4g
IWlzRXhwcmVzc0luc3RhbGxBY3RpdmUgJiYgaGFzUGxheWVyVmVyc2lvbigiNi4w
LjY1IikgJiYgKHVhLndpbiB8fCB1YS5tYWMpICYmICEodWEud2sgJiYgdWEud2sg
PCAzMTIpOwoJCX0KCgkJLyogU2hvdyB0aGUgQWRvYmUgRXhwcmVzcyBJbnN0YWxs
IGRpYWxvZwoJCQktIFJlZmVyZW5jZTogaHR0cDovL3d3dy5hZG9iZS5jb20vY2Z1
c2lvbi9rbm93bGVkZ2ViYXNlL2luZGV4LmNmbT9pZD02YTI1M2I3NQoJCSovCgkJ
ZnVuY3Rpb24gc2hvd0V4cHJlc3NJbnN0YWxsKGF0dCwgcGFyLCByZXBsYWNlRWxl
bUlkU3RyLCBjYWxsYmFja0ZuKSB7CgkJCWlzRXhwcmVzc0luc3RhbGxBY3RpdmUg
PSB0cnVlOwoJCQlzdG9yZWRDYWxsYmFja0ZuID0gY2FsbGJhY2tGbiB8fCBudWxs
OwoJCQlzdG9yZWRDYWxsYmFja09iaiA9IHtzdWNjZXNzOmZhbHNlLCBpZDpyZXBs
YWNlRWxlbUlkU3RyfTsKCQkJdmFyIG9iaiA9IGdldEVsZW1lbnRCeUlkKHJlcGxh
Y2VFbGVtSWRTdHIpOwoJCQlpZiAob2JqKSB7CgkJCQlpZiAob2JqLm5vZGVOYW1l
ID09ICJPQkpFQ1QiKSB7IC8vIHN0YXRpYyBwdWJsaXNoaW5nCgkJCQkJc3RvcmVk
QWx0Q29udGVudCA9IGFic3RyYWN0QWx0Q29udGVudChvYmopOwoJCQkJCXN0b3Jl
ZEFsdENvbnRlbnRJZCA9IG51bGw7CgkJCQl9CgkJCQllbHNlIHsgLy8gZHluYW1p
YyBwdWJsaXNoaW5nCgkJCQkJc3RvcmVkQWx0Q29udGVudCA9IG9iajsKCQkJCQlz
dG9yZWRBbHRDb250ZW50SWQgPSByZXBsYWNlRWxlbUlkU3RyOwoJCQkJfQoJCQkJ
YXR0LmlkID0gRVhQUkVTU19JTlNUQUxMX0lEOwoJCQkJaWYgKHR5cGVvZiBhdHQu
d2lkdGggPT0gVU5ERUYgfHwgKCEvJSQvLnRlc3QoYXR0LndpZHRoKSAmJiBwYXJz
ZUludChhdHQud2lkdGgsIDEwKSA8IDMxMCkpIHsgYXR0LndpZHRoID0gIjMxMCI7
IH0KCQkJCWlmICh0eXBlb2YgYXR0LmhlaWdodCA9PSBVTkRFRiB8fCAoIS8lJC8u
dGVzdChhdHQuaGVpZ2h0KSAmJiBwYXJzZUludChhdHQuaGVpZ2h0LCAxMCkgPCAx
MzcpKSB7IGF0dC5oZWlnaHQgPSAiMTM3IjsgfQoJCQkJZG9jLnRpdGxlID0gZG9j
LnRpdGxlLnNsaWNlKDAsIDQ3KSArICIgLSBGbGFzaCBQbGF5ZXIgSW5zdGFsbGF0
aW9uIjsKCQkJCXZhciBwdCA9IHVhLmllICYmIHVhLndpbiA/ICJBY3RpdmVYIiA6
ICJQbHVnSW4iLAoJCQkJCWZ2ID0gIk1NcmVkaXJlY3RVUkw9IiArIHdpbi5sb2Nh
dGlvbi50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJTI2IikgKyAiJk1NcGxheWVy
VHlwZT0iICsgcHQgKyAiJk1NZG9jdGl0bGU9IiArIGRvYy50aXRsZTsKCQkJCWlm
ICh0eXBlb2YgcGFyLmZsYXNodmFycyAhPSBVTkRFRikgewoJCQkJCXBhci5mbGFz
aHZhcnMgKz0gIiYiICsgZnY7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlwYXIuZmxh
c2h2YXJzID0gZnY7CgkJCQl9CgkJCQkvLyBJRSBvbmx5OiB3aGVuIGEgU1dGIGlz
IGxvYWRpbmcgKEFORDogbm90IGF2YWlsYWJsZSBpbiBjYWNoZSkgd2FpdCBmb3Ig
dGhlIHJlYWR5U3RhdGUgb2YgdGhlIG9iamVjdCBlbGVtZW50IHRvIGJlY29tZSA0
IGJlZm9yZSByZW1vdmluZyBpdCwKCQkJCS8vIGJlY2F1c2UgeW91IGNhbm5vdCBw
cm9wZXJseSBjYW5jZWwgYSBsb2FkaW5nIFNXRiBmaWxlIHdpdGhvdXQgYnJlYWtp
bmcgYnJvd3NlciBsb2FkIHJlZmVyZW5jZXMsIGFsc28gb2JqLm9ucmVhZHlzdGF0
ZWNoYW5nZSBkb2Vzbid0IHdvcmsKCQkJCWlmICh1YS5pZSAmJiB1YS53aW4gJiYg
b2JqLnJlYWR5U3RhdGUgIT0gNCkgewoJCQkJCXZhciBuZXdPYmogPSBjcmVhdGVF
bGVtZW50KCJkaXYiKTsKCQkJCQlyZXBsYWNlRWxlbUlkU3RyICs9ICJTV0ZPYmpl
Y3ROZXciOwoJCQkJCW5ld09iai5zZXRBdHRyaWJ1dGUoImlkIiwgcmVwbGFjZUVs
ZW1JZFN0cik7CgkJCQkJb2JqLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld09i
aiwgb2JqKTsgLy8gaW5zZXJ0IHBsYWNlaG9sZGVyIGRpdiB0aGF0IHdpbGwgYmUg
cmVwbGFjZWQgYnkgdGhlIG9iamVjdCBlbGVtZW50IHRoYXQgbG9hZHMgZXhwcmVz
c2luc3RhbGwuc3dmCgkJCQkJb2JqLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CgkJ
CQkJKGZ1bmN0aW9uKCl7CgkJCQkJCWlmIChvYmoucmVhZHlTdGF0ZSA9PSA0KSB7
CgkJCQkJCQlvYmoucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvYmopOwoJCQkJCQl9
CgkJCQkJCWVsc2UgewoJCQkJCQkJc2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVl
LCAxMCk7CgkJCQkJCX0KCQkJCQl9KSgpOwoJCQkJfQoJCQkJY3JlYXRlU1dGKGF0
dCwgcGFyLCByZXBsYWNlRWxlbUlkU3RyKTsKCQkJfQoJCX0KCgkJLyogRnVuY3Rp
b25zIHRvIGFic3RyYWN0IGFuZCBkaXNwbGF5IGFsdGVybmF0aXZlIGNvbnRlbnQK
CQkqLwoJCWZ1bmN0aW9uIGRpc3BsYXlBbHRDb250ZW50KG9iaikgewoJCQlpZiAo
dWEuaWUgJiYgdWEud2luICYmIG9iai5yZWFkeVN0YXRlICE9IDQpIHsKCQkJCS8v
IElFIG9ubHk6IHdoZW4gYSBTV0YgaXMgbG9hZGluZyAoQU5EOiBub3QgYXZhaWxh
YmxlIGluIGNhY2hlKSB3YWl0IGZvciB0aGUgcmVhZHlTdGF0ZSBvZiB0aGUgb2Jq
ZWN0IGVsZW1lbnQgdG8gYmVjb21lIDQgYmVmb3JlIHJlbW92aW5nIGl0LAoJCQkJ
Ly8gYmVjYXVzZSB5b3UgY2Fubm90IHByb3Blcmx5IGNhbmNlbCBhIGxvYWRpbmcg
U1dGIGZpbGUgd2l0aG91dCBicmVha2luZyBicm93c2VyIGxvYWQgcmVmZXJlbmNl
cywgYWxzbyBvYmoub25yZWFkeXN0YXRlY2hhbmdlIGRvZXNuJ3Qgd29yawoJCQkJ
dmFyIGVsID0gY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJCQlvYmoucGFyZW50Tm9k
ZS5pbnNlcnRCZWZvcmUoZWwsIG9iaik7IC8vIGluc2VydCBwbGFjZWhvbGRlciBk
aXYgdGhhdCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZSBjb250
ZW50CgkJCQllbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChhYnN0cmFjdEFsdENv
bnRlbnQob2JqKSwgZWwpOwoJCQkJb2JqLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CgkJCQkoZnVuY3Rpb24oKXsKCQkJCQlpZiAob2JqLnJlYWR5U3RhdGUgPT0gNCkg
ewoJCQkJCQlvYmoucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvYmopOwoJCQkJCX0K
CQkJCQllbHNlIHsKCQkJCQkJc2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLCAx
MCk7CgkJCQkJfQoJCQkJfSkoKTsKCQkJfQoJCQllbHNlIHsKCQkJCW9iai5wYXJl
bnROb2RlLnJlcGxhY2VDaGlsZChhYnN0cmFjdEFsdENvbnRlbnQob2JqKSwgb2Jq
KTsKCQkJfQoJCX0KCgkJZnVuY3Rpb24gYWJzdHJhY3RBbHRDb250ZW50KG9iaikg
ewoJCQl2YXIgYWMgPSBjcmVhdGVFbGVtZW50KCJkaXYiKTsKCQkJaWYgKHVhLndp
biAmJiB1YS5pZSkgewoJCQkJYWMuaW5uZXJIVE1MID0gb2JqLmlubmVySFRNTDsK
CQkJfQoJCQllbHNlIHsKCQkJCXZhciBuZXN0ZWRPYmogPSBvYmouZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoT0JKRUNUKVswXTsKCQkJCWlmIChuZXN0ZWRPYmopIHsKCQkJ
CQl2YXIgYyA9IG5lc3RlZE9iai5jaGlsZE5vZGVzOwoJCQkJCWlmIChjKSB7CgkJ
CQkJCXZhciBjbCA9IGMubGVuZ3RoOwoJCQkJCQlmb3IgKHZhciBpID0gMDsgaSA8
IGNsOyBpKyspIHsKCQkJCQkJCWlmICghKGNbaV0ubm9kZVR5cGUgPT0gMSAmJiBj
W2ldLm5vZGVOYW1lID09ICJQQVJBTSIpICYmICEoY1tpXS5ub2RlVHlwZSA9PSA4
KSkgewoJCQkJCQkJCWFjLmFwcGVuZENoaWxkKGNbaV0uY2xvbmVOb2RlKHRydWUp
KTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm4g
YWM7CgkJfQoKCQkvKiBDcm9zcy1icm93c2VyIGR5bmFtaWMgU1dGIGNyZWF0aW9u
CgkJKi8KCQlmdW5jdGlvbiBjcmVhdGVTV0YoYXR0T2JqLCBwYXJPYmosIGlkKSB7
CgkJCXZhciByLCBlbCA9IGdldEVsZW1lbnRCeUlkKGlkKTsKCQkJaWYgKHVhLndr
ICYmIHVhLndrIDwgMzEyKSB7IHJldHVybiByOyB9CgkJCWlmIChlbCkgewoJCQkJ
aWYgKHR5cGVvZiBhdHRPYmouaWQgPT0gVU5ERUYpIHsgLy8gaWYgbm8gJ2lkJyBp
cyBkZWZpbmVkIGZvciB0aGUgb2JqZWN0IGVsZW1lbnQsIGl0IHdpbGwgaW5oZXJp
dCB0aGUgJ2lkJyBmcm9tIHRoZSBhbHRlcm5hdGl2ZSBjb250ZW50CgkJCQkJYXR0
T2JqLmlkID0gaWQ7CgkJCQl9CgkJCQlpZiAodWEuaWUgJiYgdWEud2luKSB7IC8v
IEludGVybmV0IEV4cGxvcmVyICsgdGhlIEhUTUwgb2JqZWN0IGVsZW1lbnQgKyBX
M0MgRE9NIG1ldGhvZHMgZG8gbm90IGNvbWJpbmU6IGZhbGwgYmFjayB0byBvdXRl
ckhUTUwKCQkJCQl2YXIgYXR0ID0gIiI7CgkJCQkJZm9yICh2YXIgaSBpbiBhdHRP
YmopIHsKCQkJCQkJaWYgKGF0dE9ialtpXSAhPSBPYmplY3QucHJvdG90eXBlW2ld
KSB7IC8vIGZpbHRlciBvdXQgcHJvdG90eXBlIGFkZGl0aW9ucyBmcm9tIG90aGVy
IHBvdGVudGlhbCBsaWJyYXJpZXMKCQkJCQkJCWlmIChpLnRvTG93ZXJDYXNlKCkg
PT0gImRhdGEiKSB7CgkJCQkJCQkJcGFyT2JqLm1vdmllID0gYXR0T2JqW2ldOwoJ
CQkJCQkJfQoJCQkJCQkJZWxzZSBpZiAoaS50b0xvd2VyQ2FzZSgpID09ICJzdHls
ZWNsYXNzIikgeyAvLyAnY2xhc3MnIGlzIGFuIEVDTUE0IHJlc2VydmVkIGtleXdv
cmQKCQkJCQkJCQlhdHQgKz0gJyBjbGFzcz0iJyArIGF0dE9ialtpXSArICciJzsK
CQkJCQkJCX0KCQkJCQkJCWVsc2UgaWYgKGkudG9Mb3dlckNhc2UoKSAhPSAiY2xh
c3NpZCIpIHsKCQkJCQkJCQlhdHQgKz0gJyAnICsgaSArICc9IicgKyBhdHRPYmpb
aV0gKyAnIic7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJdmFyIHBhciA9
ICIiOwoJCQkJCWZvciAodmFyIGogaW4gcGFyT2JqKSB7CgkJCQkJCWlmIChwYXJP
Ympbal0gIT0gT2JqZWN0LnByb3RvdHlwZVtqXSkgeyAvLyBmaWx0ZXIgb3V0IHBy
b3RvdHlwZSBhZGRpdGlvbnMgZnJvbSBvdGhlciBwb3RlbnRpYWwgbGlicmFyaWVz
CgkJCQkJCQlwYXIgKz0gJzxwYXJhbSBuYW1lPSInICsgaiArICciIHZhbHVlPSIn
ICsgcGFyT2JqW2pdICsgJyIgLz4nOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsLm91
dGVySFRNTCA9ICc8b2JqZWN0IGNsYXNzaWQ9ImNsc2lkOkQyN0NEQjZFLUFFNkQt
MTFjZi05NkI4LTQ0NDU1MzU0MDAwMCInICsgYXR0ICsgJz4nICsgcGFyICsgJzwv
b2JqZWN0Pic7CgkJCQkJb2JqSWRBcnJbb2JqSWRBcnIubGVuZ3RoXSA9IGF0dE9i
ai5pZDsgLy8gc3RvcmVkIHRvIGZpeCBvYmplY3QgJ2xlYWtzJyBvbiB1bmxvYWQg
KGR5bmFtaWMgcHVibGlzaGluZyBvbmx5KQoJCQkJCXIgPSBnZXRFbGVtZW50QnlJ
ZChhdHRPYmouaWQpOwoJCQkJfQoJCQkJZWxzZSB7IC8vIHdlbGwtYmVoYXZpbmcg
YnJvd3NlcnMKCQkJCQl2YXIgbyA9IGNyZWF0ZUVsZW1lbnQoT0JKRUNUKTsKCQkJ
CQlvLnNldEF0dHJpYnV0ZSgidHlwZSIsIEZMQVNIX01JTUVfVFlQRSk7CgkJCQkJ
Zm9yICh2YXIgbSBpbiBhdHRPYmopIHsKCQkJCQkJaWYgKGF0dE9ialttXSAhPSBP
YmplY3QucHJvdG90eXBlW21dKSB7IC8vIGZpbHRlciBvdXQgcHJvdG90eXBlIGFk
ZGl0aW9ucyBmcm9tIG90aGVyIHBvdGVudGlhbCBsaWJyYXJpZXMKCQkJCQkJCWlm
IChtLnRvTG93ZXJDYXNlKCkgPT0gInN0eWxlY2xhc3MiKSB7IC8vICdjbGFzcycg
aXMgYW4gRUNNQTQgcmVzZXJ2ZWQga2V5d29yZAoJCQkJCQkJCW8uc2V0QXR0cmli
dXRlKCJjbGFzcyIsIGF0dE9ialttXSk7CgkJCQkJCQl9CgkJCQkJCQllbHNlIGlm
IChtLnRvTG93ZXJDYXNlKCkgIT0gImNsYXNzaWQiKSB7IC8vIGZpbHRlciBvdXQg
SUUgc3BlY2lmaWMgYXR0cmlidXRlCgkJCQkJCQkJby5zZXRBdHRyaWJ1dGUobSwg
YXR0T2JqW21dKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQlmb3IgKHZh
ciBuIGluIHBhck9iaikgewoJCQkJCQlpZiAocGFyT2JqW25dICE9IE9iamVjdC5w
cm90b3R5cGVbbl0gJiYgbi50b0xvd2VyQ2FzZSgpICE9ICJtb3ZpZSIpIHsgLy8g
ZmlsdGVyIG91dCBwcm90b3R5cGUgYWRkaXRpb25zIGZyb20gb3RoZXIgcG90ZW50
aWFsIGxpYnJhcmllcyBhbmQgSUUgc3BlY2lmaWMgcGFyYW0gZWxlbWVudAoJCQkJ
CQkJY3JlYXRlT2JqUGFyYW0obywgbiwgcGFyT2JqW25dKTsKCQkJCQkJfQoJCQkJ
CX0KCQkJCQllbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChvLCBlbCk7CgkJCQkJ
ciA9IG87CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHI7CgkJfQoKCQlmdW5jdGlvbiBj
cmVhdGVPYmpQYXJhbShlbCwgcE5hbWUsIHBWYWx1ZSkgewoJCQl2YXIgcCA9IGNy
ZWF0ZUVsZW1lbnQoInBhcmFtIik7CgkJCXAuc2V0QXR0cmlidXRlKCJuYW1lIiwg
cE5hbWUpOwoJCQlwLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBwVmFsdWUpOwoJCQll
bC5hcHBlbmRDaGlsZChwKTsKCQl9CgoJCS8qIENyb3NzLWJyb3dzZXIgU1dGIHJl
bW92YWwKCQkJLSBFc3BlY2lhbGx5IG5lZWRlZCB0byBzYWZlbHkgYW5kIGNvbXBs
ZXRlbHkgcmVtb3ZlIGEgU1dGIGluIEludGVybmV0IEV4cGxvcmVyCgkJKi8KCQlm
dW5jdGlvbiByZW1vdmVTV0YoaWQpIHsKCQkJdmFyIG9iaiA9IGdldEVsZW1lbnRC
eUlkKGlkKTsKCQkJaWYgKG9iaiAmJiBvYmoubm9kZU5hbWUgPT0gIk9CSkVDVCIp
IHsKCQkJCWlmICh1YS5pZSAmJiB1YS53aW4pIHsKCQkJCQlvYmouc3R5bGUuZGlz
cGxheSA9ICJub25lIjsKCQkJCQkoZnVuY3Rpb24oKXsKCQkJCQkJaWYgKG9iai5y
ZWFkeVN0YXRlID09IDQpIHsKCQkJCQkJCXJlbW92ZU9iamVjdEluSUUoaWQpOwoJ
CQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJc2V0VGltZW91dChhcmd1bWVudHMu
Y2FsbGVlLCAxMCk7CgkJCQkJCX0KCQkJCQl9KSgpOwoJCQkJfQoJCQkJZWxzZSB7
CgkJCQkJb2JqLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2JqKTsKCQkJCX0KCQkJ
fQoJCX0KCgkJZnVuY3Rpb24gcmVtb3ZlT2JqZWN0SW5JRShpZCkgewoJCQl2YXIg
b2JqID0gZ2V0RWxlbWVudEJ5SWQoaWQpOwoJCQlpZiAob2JqKSB7CgkJCQlmb3Ig
KHZhciBpIGluIG9iaikgewoJCQkJCWlmICh0eXBlb2Ygb2JqW2ldID09ICJmdW5j
dGlvbiIpIHsKCQkJCQkJb2JqW2ldID0gbnVsbDsKCQkJCQl9CgkJCQl9CgkJCQlv
YmoucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvYmopOwoJCQl9CgkJfQoKCQkvKiBG
dW5jdGlvbnMgdG8gb3B0aW1pemUgSmF2YVNjcmlwdCBjb21wcmVzc2lvbgoJCSov
CgkJZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQoaWQpIHsKCQkJdmFyIGVsID0gbnVs
bDsKCQkJdHJ5IHsKCQkJCWVsID0gZG9jLmdldEVsZW1lbnRCeUlkKGlkKTsKCQkJ
fQoJCQljYXRjaCAoZSkge30KCQkJcmV0dXJuIGVsOwoJCX0KCgkJZnVuY3Rpb24g
Y3JlYXRlRWxlbWVudChlbCkgewoJCQlyZXR1cm4gZG9jLmNyZWF0ZUVsZW1lbnQo
ZWwpOwoJCX0KCgkJLyogVXBkYXRlZCBhdHRhY2hFdmVudCBmdW5jdGlvbiBmb3Ig
SW50ZXJuZXQgRXhwbG9yZXIKCQkJLSBTdG9yZXMgYXR0YWNoRXZlbnQgaW5mb3Jt
YXRpb24gaW4gYW4gQXJyYXksIHNvIG9uIHVubG9hZCB0aGUgZGV0YWNoRXZlbnQg
ZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzCgkJ
Ki8KCQlmdW5jdGlvbiBhZGRMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgZm4p
IHsKCQkJdGFyZ2V0LmF0dGFjaEV2ZW50KGV2ZW50VHlwZSwgZm4pOwoJCQlsaXN0
ZW5lcnNBcnJbbGlzdGVuZXJzQXJyLmxlbmd0aF0gPSBbdGFyZ2V0LCBldmVudFR5
cGUsIGZuXTsKCQl9CgoJCS8qIEZsYXNoIFBsYXllciBhbmQgU1dGIGNvbnRlbnQg
dmVyc2lvbiBtYXRjaGluZwoJCSovCgkJZnVuY3Rpb24gaGFzUGxheWVyVmVyc2lv
bihydikgewoJCQl2YXIgcHYgPSB1YS5wdiwgdiA9IHJ2LnNwbGl0KCIuIik7CgkJ
CXZbMF0gPSBwYXJzZUludCh2WzBdLCAxMCk7CgkJCXZbMV0gPSBwYXJzZUludCh2
WzFdLCAxMCkgfHwgMDsgLy8gc3VwcG9ydHMgc2hvcnQgbm90YXRpb24sIGUuZy4g
IjkiIGluc3RlYWQgb2YgIjkuMC4wIgoJCQl2WzJdID0gcGFyc2VJbnQodlsyXSwg
MTApIHx8IDA7CgkJCXJldHVybiAocHZbMF0gPiB2WzBdIHx8IChwdlswXSA9PSB2
WzBdICYmIHB2WzFdID4gdlsxXSkgfHwgKHB2WzBdID09IHZbMF0gJiYgcHZbMV0g
PT0gdlsxXSAmJiBwdlsyXSA+PSB2WzJdKSkgPyB0cnVlIDogZmFsc2U7CgkJfQoK
CQkvKiBDcm9zcy1icm93c2VyIGR5bmFtaWMgQ1NTIGNyZWF0aW9uCgkJCS0gQmFz
ZWQgb24gQm9iYnkgdmFuIGRlciBTbHVpcycgc29sdXRpb246IGh0dHA6Ly93d3cu
Ym9iYnl2YW5kZXJzbHVpcy5jb20vYXJ0aWNsZXMvZHluYW1pY0NTUy5waHAKCQkq
LwoJCWZ1bmN0aW9uIGNyZWF0ZUNTUyhzZWwsIGRlY2wsIG1lZGlhLCBuZXdTdHls
ZSkgewoJCQlpZiAodWEuaWUgJiYgdWEubWFjKSB7IHJldHVybjsgfQoJCQl2YXIg
aCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwoJCQlpZiAo
IWgpIHsgcmV0dXJuOyB9IC8vIHRvIGFsc28gc3VwcG9ydCBiYWRseSBhdXRob3Jl
ZCBIVE1MIHBhZ2VzIHRoYXQgbGFjayBhIGhlYWQgZWxlbWVudAoJCQl2YXIgbSA9
IChtZWRpYSAmJiB0eXBlb2YgbWVkaWEgPT0gInN0cmluZyIpID8gbWVkaWEgOiAi
c2NyZWVuIjsKCQkJaWYgKG5ld1N0eWxlKSB7CgkJCQlkeW5hbWljU3R5bGVzaGVl
dCA9IG51bGw7CgkJCQlkeW5hbWljU3R5bGVzaGVldE1lZGlhID0gbnVsbDsKCQkJ
fQoJCQlpZiAoIWR5bmFtaWNTdHlsZXNoZWV0IHx8IGR5bmFtaWNTdHlsZXNoZWV0
TWVkaWEgIT0gbSkgewoJCQkJLy8gY3JlYXRlIGR5bmFtaWMgc3R5bGVzaGVldCAr
IGdldCBhIGdsb2JhbCByZWZlcmVuY2UgdG8gaXQKCQkJCXZhciBzID0gY3JlYXRl
RWxlbWVudCgic3R5bGUiKTsKCQkJCXMuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRl
eHQvY3NzIik7CgkJCQlzLnNldEF0dHJpYnV0ZSgibWVkaWEiLCBtKTsKCQkJCWR5
bmFtaWNTdHlsZXNoZWV0ID0gaC5hcHBlbmRDaGlsZChzKTsKCQkJCWlmICh1YS5p
ZSAmJiB1YS53aW4gJiYgdHlwZW9mIGRvYy5zdHlsZVNoZWV0cyAhPSBVTkRFRiAm
JiBkb2Muc3R5bGVTaGVldHMubGVuZ3RoID4gMCkgewoJCQkJCWR5bmFtaWNTdHls
ZXNoZWV0ID0gZG9jLnN0eWxlU2hlZXRzW2RvYy5zdHlsZVNoZWV0cy5sZW5ndGgg
LSAxXTsKCQkJCX0KCQkJCWR5bmFtaWNTdHlsZXNoZWV0TWVkaWEgPSBtOwoJCQl9
CgkJCS8vIGFkZCBzdHlsZSBydWxlCgkJCWlmICh1YS5pZSAmJiB1YS53aW4pIHsK
CQkJCWlmIChkeW5hbWljU3R5bGVzaGVldCAmJiB0eXBlb2YgZHluYW1pY1N0eWxl
c2hlZXQuYWRkUnVsZSA9PSBPQkpFQ1QpIHsKCQkJCQlkeW5hbWljU3R5bGVzaGVl
dC5hZGRSdWxlKHNlbCwgZGVjbCk7CgkJCQl9CgkJCX0KCQkJZWxzZSB7CgkJCQlp
ZiAoZHluYW1pY1N0eWxlc2hlZXQgJiYgdHlwZW9mIGRvYy5jcmVhdGVUZXh0Tm9k
ZSAhPSBVTkRFRikgewoJCQkJCWR5bmFtaWNTdHlsZXNoZWV0LmFwcGVuZENoaWxk
KGRvYy5jcmVhdGVUZXh0Tm9kZShzZWwgKyAiIHsiICsgZGVjbCArICJ9IikpOwoJ
CQkJfQoJCQl9CgkJfQoKCQlmdW5jdGlvbiBzZXRWaXNpYmlsaXR5KGlkLCBpc1Zp
c2libGUpIHsKCQkJaWYgKCFhdXRvSGlkZVNob3cpIHsgcmV0dXJuOyB9CgkJCXZh
ciB2ID0gaXNWaXNpYmxlID8gInZpc2libGUiIDogImhpZGRlbiI7CgkJCWlmIChp
c0RvbUxvYWRlZCAmJiBnZXRFbGVtZW50QnlJZChpZCkpIHsKCQkJCWdldEVsZW1l
bnRCeUlkKGlkKS5zdHlsZS52aXNpYmlsaXR5ID0gdjsKCQkJfQoJCQllbHNlIHsK
CQkJCWNyZWF0ZUNTUygiIyIgKyBpZCwgInZpc2liaWxpdHk6IiArIHYpOwoJCQl9
CgkJfQoKCQkvKiBGaWx0ZXIgdG8gYXZvaWQgWFNTIGF0dGFja3MKCQkqLwoJCWZ1
bmN0aW9uIHVybEVuY29kZUlmTmVjZXNzYXJ5KHMpIHsKCQkJdmFyIHJlZ2V4ID0g
L1tcXFwiPD5cLjtdLzsKCQkJdmFyIGhhc0JhZENoYXJzID0gcmVnZXguZXhlYyhz
KSAhPSBudWxsOwoJCQlyZXR1cm4gaGFzQmFkQ2hhcnMgJiYgdHlwZW9mIGVuY29k
ZVVSSUNvbXBvbmVudCAhPSBVTkRFRiA/IGVuY29kZVVSSUNvbXBvbmVudChzKSA6
IHM7CgkJfQoKCQkvKiBSZWxlYXNlIG1lbW9yeSB0byBhdm9pZCBtZW1vcnkgbGVh
a3MgY2F1c2VkIGJ5IGNsb3N1cmVzLCBmaXggaGFuZ2luZyBhdWRpby92aWRlbyB0
aHJlYWRzIGFuZCBmb3JjZSBvcGVuIHNvY2tldHMvTmV0Q29ubmVjdGlvbnMgdG8g
ZGlzY29ubmVjdCAoSW50ZXJuZXQgRXhwbG9yZXIgb25seSkKCQkqLwoJCXZhciBj
bGVhbnVwID0gZnVuY3Rpb24oKSB7CgkJCWlmICh1YS5pZSAmJiB1YS53aW4pIHsK
CQkJCXdpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLCBmdW5jdGlvbigpIHsK
CQkJCQl0cnkgewoJCQkJCQkvLyByZW1vdmUgbGlzdGVuZXJzIHRvIGF2b2lkIG1l
bW9yeSBsZWFrcwoJCQkJCQl2YXIgbGwgPSBsaXN0ZW5lcnNBcnIubGVuZ3RoOwoJ
CQkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGxsOyBpKyspIHsKCQkJCQkJCWxpc3Rl
bmVyc0FycltpXVswXS5kZXRhY2hFdmVudChsaXN0ZW5lcnNBcnJbaV1bMV0sIGxp
c3RlbmVyc0FycltpXVsyXSk7CgkJCQkJCX0KCQkJCQkJLy8gY2xlYW51cCBkeW5h
bWljYWxseSBlbWJlZGRlZCBvYmplY3RzIHRvIGZpeCBhdWRpby92aWRlbyB0aHJl
YWRzIGFuZCBmb3JjZSBvcGVuIHNvY2tldHMgYW5kIE5ldENvbm5lY3Rpb25zIHRv
IGRpc2Nvbm5lY3QKCQkJCQkJdmFyIGlsID0gb2JqSWRBcnIubGVuZ3RoOwoJCQkJ
CQlmb3IgKHZhciBqID0gMDsgaiA8IGlsOyBqKyspIHsKCQkJCQkJCXJlbW92ZVNX
RihvYmpJZEFycltqXSk7CgkJCQkJCX0KCQkJCQkJLy8gY2xlYW51cCBsaWJyYXJ5
J3MgbWFpbiBjbG9zdXJlcyB0byBhdm9pZCBtZW1vcnkgbGVha3MKCQkJCQkJZm9y
ICh2YXIgayBpbiB1YSkgewoJCQkJCQkJdWFba10gPSBudWxsOwoJCQkJCQl9CgkJ
CQkJCXVhID0gbnVsbDsKCQkJCQkJZm9yICh2YXIgbCBpbiBzd2ZvYmplY3QpIHsK
CQkJCQkJCXN3Zm9iamVjdFtsXSA9IG51bGw7CgkJCQkJCX0KCQkJCQl9CgkJCQkJ
Y2F0Y2ggKGVyKXt9CgkJCQkJCgkJCQkJc3dmb2JqZWN0ID0gbnVsbDsKCQkJCX0p
OwoJCQl9CgkJfSgpOwoKCQlyZXR1cm4gewoJCQkvKiBQdWJsaWMgQVBJCgkJCQkt
IFJlZmVyZW5jZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3N3Zm9iamVjdC93
aWtpL2RvY3VtZW50YXRpb24KCQkJKi8KCQkJcmVnaXN0ZXJPYmplY3Q6IGZ1bmN0
aW9uKG9iamVjdElkU3RyLCBzd2ZWZXJzaW9uU3RyLCB4aVN3ZlVybFN0ciwgY2Fs
bGJhY2tGbikgewoJCQkJaWYgKHVhLnczICYmIG9iamVjdElkU3RyICYmIHN3ZlZl
cnNpb25TdHIpIHsKCQkJCQl2YXIgcmVnT2JqID0ge307CgkJCQkJcmVnT2JqLmlk
ID0gb2JqZWN0SWRTdHI7CgkJCQkJcmVnT2JqLnN3ZlZlcnNpb24gPSBzd2ZWZXJz
aW9uU3RyOwoJCQkJCXJlZ09iai5leHByZXNzSW5zdGFsbCA9IHhpU3dmVXJsU3Ry
OwoJCQkJCXJlZ09iai5jYWxsYmFja0ZuID0gY2FsbGJhY2tGbjsKCQkJCQlyZWdP
YmpBcnJbcmVnT2JqQXJyLmxlbmd0aF0gPSByZWdPYmo7CgkJCQkJc2V0VmlzaWJp
bGl0eShvYmplY3RJZFN0ciwgZmFsc2UpOwoJCQkJfQoJCQkJZWxzZSBpZiAoY2Fs
bGJhY2tGbikgewoJCQkJCWNhbGxiYWNrRm4oe3N1Y2Nlc3M6ZmFsc2UsIGlkOm9i
amVjdElkU3RyfSk7CgkJCQl9CgkJCX0sCgoJCQlnZXRPYmplY3RCeUlkOiBmdW5j
dGlvbihvYmplY3RJZFN0cikgewoJCQkJaWYgKHVhLnczKSB7CgkJCQkJcmV0dXJu
IGdldE9iamVjdEJ5SWQob2JqZWN0SWRTdHIpOwoJCQkJfQoJCQl9LAoKCQkJZW1i
ZWRTV0Y6IGZ1bmN0aW9uKHN3ZlVybFN0ciwgcmVwbGFjZUVsZW1JZFN0ciwgd2lk
dGhTdHIsIGhlaWdodFN0ciwgc3dmVmVyc2lvblN0ciwgeGlTd2ZVcmxTdHIsIGZs
YXNodmFyc09iaiwgcGFyT2JqLCBhdHRPYmosIGNhbGxiYWNrRm4pIHsKCQkJCXZh
ciBjYWxsYmFja09iaiA9IHtzdWNjZXNzOmZhbHNlLCBpZDpyZXBsYWNlRWxlbUlk
U3RyfTsKCQkJCWlmICh1YS53MyAmJiAhKHVhLndrICYmIHVhLndrIDwgMzEyKSAm
JiBzd2ZVcmxTdHIgJiYgcmVwbGFjZUVsZW1JZFN0ciAmJiB3aWR0aFN0ciAmJiBo
ZWlnaHRTdHIgJiYgc3dmVmVyc2lvblN0cikgewoJCQkJCXNldFZpc2liaWxpdHko
cmVwbGFjZUVsZW1JZFN0ciwgZmFsc2UpOwoJCQkJCWFkZERvbUxvYWRFdmVudChm
dW5jdGlvbigpIHsKCQkJCQkJd2lkdGhTdHIgKz0gIiI7IC8vIGF1dG8tY29udmVy
dCB0byBzdHJpbmcKCQkJCQkJaGVpZ2h0U3RyICs9ICIiOwoJCQkJCQl2YXIgYXR0
ID0ge307CgkJCQkJCWlmIChhdHRPYmogJiYgdHlwZW9mIGF0dE9iaiA9PT0gT0JK
RUNUKSB7CgkJCQkJCQlmb3IgKHZhciBpIGluIGF0dE9iaikgeyAvLyBjb3B5IG9i
amVjdCB0byBhdm9pZCB0aGUgdXNlIG9mIHJlZmVyZW5jZXMsIGJlY2F1c2Ugd2Vi
IGF1dGhvcnMgb2Z0ZW4gcmV1c2UgYXR0T2JqIGZvciBtdWx0aXBsZSBTV0ZzCgkJ
CQkJCQkJYXR0W2ldID0gYXR0T2JqW2ldOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJ
CWF0dC5kYXRhID0gc3dmVXJsU3RyOwoJCQkJCQlhdHQud2lkdGggPSB3aWR0aFN0
cjsKCQkJCQkJYXR0LmhlaWdodCA9IGhlaWdodFN0cjsKCQkJCQkJdmFyIHBhciA9
IHt9OwoJCQkJCQlpZiAocGFyT2JqICYmIHR5cGVvZiBwYXJPYmogPT09IE9CSkVD
VCkgewoJCQkJCQkJZm9yICh2YXIgaiBpbiBwYXJPYmopIHsgLy8gY29weSBvYmpl
Y3QgdG8gYXZvaWQgdGhlIHVzZSBvZiByZWZlcmVuY2VzLCBiZWNhdXNlIHdlYiBh
dXRob3JzIG9mdGVuIHJldXNlIHBhck9iaiBmb3IgbXVsdGlwbGUgU1dGcwoJCQkJ
CQkJCXBhcltqXSA9IHBhck9ialtqXTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlp
ZiAoZmxhc2h2YXJzT2JqICYmIHR5cGVvZiBmbGFzaHZhcnNPYmogPT09IE9CSkVD
VCkgewoJCQkJCQkJZm9yICh2YXIgayBpbiBmbGFzaHZhcnNPYmopIHsgLy8gY29w
eSBvYmplY3QgdG8gYXZvaWQgdGhlIHVzZSBvZiByZWZlcmVuY2VzLCBiZWNhdXNl
IHdlYiBhdXRob3JzIG9mdGVuIHJldXNlIGZsYXNodmFyc09iaiBmb3IgbXVsdGlw
bGUgU1dGcwoJCQkJCQkJCWlmICh0eXBlb2YgcGFyLmZsYXNodmFycyAhPSBVTkRF
RikgewoJCQkJCQkJCQlwYXIuZmxhc2h2YXJzICs9ICImIiArIGsgKyAiPSIgKyBm
bGFzaHZhcnNPYmpba107CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UgewoJCQkJCQkJ
CQlwYXIuZmxhc2h2YXJzID0gayArICI9IiArIGZsYXNodmFyc09ialtrXTsKCQkJ
CQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJaWYgKGhhc1BsYXllclZlcnNp
b24oc3dmVmVyc2lvblN0cikpIHsgLy8gY3JlYXRlIFNXRgoJCQkJCQkJdmFyIG9i
aiA9IGNyZWF0ZVNXRihhdHQsIHBhciwgcmVwbGFjZUVsZW1JZFN0cik7CgkJCQkJ
CQlpZiAoYXR0LmlkID09IHJlcGxhY2VFbGVtSWRTdHIpIHsKCQkJCQkJCQlzZXRW
aXNpYmlsaXR5KHJlcGxhY2VFbGVtSWRTdHIsIHRydWUpOwoJCQkJCQkJfQoJCQkJ
CQkJY2FsbGJhY2tPYmouc3VjY2VzcyA9IHRydWU7CgkJCQkJCQljYWxsYmFja09i
ai5yZWYgPSBvYmo7CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiAoeGlTd2ZVcmxTdHIg
JiYgY2FuRXhwcmVzc0luc3RhbGwoKSkgeyAvLyBzaG93IEFkb2JlIEV4cHJlc3Mg
SW5zdGFsbAoJCQkJCQkJYXR0LmRhdGEgPSB4aVN3ZlVybFN0cjsKCQkJCQkJCXNo
b3dFeHByZXNzSW5zdGFsbChhdHQsIHBhciwgcmVwbGFjZUVsZW1JZFN0ciwgY2Fs
bGJhY2tGbik7CgkJCQkJCQlyZXR1cm47CgkJCQkJCX0KCQkJCQkJZWxzZSB7IC8v
IHNob3cgYWx0ZXJuYXRpdmUgY29udGVudAoJCQkJCQkJc2V0VmlzaWJpbGl0eShy
ZXBsYWNlRWxlbUlkU3RyLCB0cnVlKTsKCQkJCQkJfQoJCQkJCQlpZiAoY2FsbGJh
Y2tGbikgeyBjYWxsYmFja0ZuKGNhbGxiYWNrT2JqKTsgfQoJCQkJCX0pOwoJCQkJ
fQoJCQkJZWxzZSBpZiAoY2FsbGJhY2tGbikgeyBjYWxsYmFja0ZuKGNhbGxiYWNr
T2JqKTsJfQoJCQl9LAoKCQkJc3dpdGNoT2ZmQXV0b0hpZGVTaG93OiBmdW5jdGlv
bigpIHsKCQkJCWF1dG9IaWRlU2hvdyA9IGZhbHNlOwoJCQl9LAoKCQkJdWE6IHVh
LAoKCQkJZ2V0Rmxhc2hQbGF5ZXJWZXJzaW9uOiBmdW5jdGlvbigpIHsKCQkJCXJl
dHVybiB7IG1ham9yOnVhLnB2WzBdLCBtaW5vcjp1YS5wdlsxXSwgcmVsZWFzZTp1
YS5wdlsyXSB9OwoJCQl9LAoKCQkJaGFzRmxhc2hQbGF5ZXJWZXJzaW9uOiBoYXNQ
bGF5ZXJWZXJzaW9uLAoKCQkJY3JlYXRlU1dGOiBmdW5jdGlvbihhdHRPYmosIHBh
ck9iaiwgcmVwbGFjZUVsZW1JZFN0cikgewoJCQkJaWYgKHVhLnczKSB7CgkJCQkJ
cmV0dXJuIGNyZWF0ZVNXRihhdHRPYmosIHBhck9iaiwgcmVwbGFjZUVsZW1JZFN0
cik7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlyZXR1cm4gdW5kZWZpbmVkOwoJCQkJ
fQoJCQl9LAoKCQkJc2hvd0V4cHJlc3NJbnN0YWxsOiBmdW5jdGlvbihhdHQsIHBh
ciwgcmVwbGFjZUVsZW1JZFN0ciwgY2FsbGJhY2tGbikgewoJCQkJaWYgKHVhLncz
ICYmIGNhbkV4cHJlc3NJbnN0YWxsKCkpIHsKCQkJCQlzaG93RXhwcmVzc0luc3Rh
bGwoYXR0LCBwYXIsIHJlcGxhY2VFbGVtSWRTdHIsIGNhbGxiYWNrRm4pOwoJCQkJ
fQoJCQl9LAoKCQkJcmVtb3ZlU1dGOiBmdW5jdGlvbihvYmpFbGVtSWRTdHIpIHsK
CQkJCWlmICh1YS53MykgewoJCQkJCXJlbW92ZVNXRihvYmpFbGVtSWRTdHIpOwoJ
CQkJfQoJCQl9LAoKCQkJY3JlYXRlQ1NTOiBmdW5jdGlvbihzZWxTdHIsIGRlY2xT
dHIsIG1lZGlhU3RyLCBuZXdTdHlsZUJvb2xlYW4pIHsKCQkJCWlmICh1YS53Mykg
ewoJCQkJCWNyZWF0ZUNTUyhzZWxTdHIsIGRlY2xTdHIsIG1lZGlhU3RyLCBuZXdT
dHlsZUJvb2xlYW4pOwoJCQkJfQoJCQl9LAoKCQkJYWRkRG9tTG9hZEV2ZW50OiBh
ZGREb21Mb2FkRXZlbnQsCgoJCQlhZGRMb2FkRXZlbnQ6IGFkZExvYWRFdmVudCwK
CgkJCWdldFF1ZXJ5UGFyYW1WYWx1ZTogZnVuY3Rpb24ocGFyYW0pIHsKCQkJCXZh
ciBxID0gZG9jLmxvY2F0aW9uLnNlYXJjaCB8fCBkb2MubG9jYXRpb24uaGFzaDsK
CQkJCWlmIChxKSB7CgkJCQkJaWYgKC9cPy8udGVzdChxKSkgeyBxID0gcS5zcGxp
dCgiPyIpWzFdOyB9IC8vIHN0cmlwIHF1ZXN0aW9uIG1hcmsKCQkJCQlpZiAocGFy
YW0gPT0gbnVsbCkgewoJCQkJCQlyZXR1cm4gdXJsRW5jb2RlSWZOZWNlc3Nhcnko
cSk7CgkJCQkJfQoJCQkJCXZhciBwYWlycyA9IHEuc3BsaXQoIiYiKTsKCQkJCQlm
b3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCWlm
IChwYWlyc1tpXS5zdWJzdHJpbmcoMCwgcGFpcnNbaV0uaW5kZXhPZigiPSIpKSA9
PSBwYXJhbSkgewoJCQkJCQkJcmV0dXJuIHVybEVuY29kZUlmTmVjZXNzYXJ5KHBh
aXJzW2ldLnN1YnN0cmluZygocGFpcnNbaV0uaW5kZXhPZigiPSIpICsgMSkpKTsK
CQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiAiIjsKCQkJfSwKCgkJCS8v
IEZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CgkJCWV4cHJlc3NJbnN0YWxsQ2FsbGJh
Y2s6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKGlzRXhwcmVzc0luc3RhbGxBY3RpdmUp
IHsKCQkJCQl2YXIgb2JqID0gZ2V0RWxlbWVudEJ5SWQoRVhQUkVTU19JTlNUQUxM
X0lEKTsKCQkJCQlpZiAob2JqICYmIHN0b3JlZEFsdENvbnRlbnQpIHsKCQkJCQkJ
b2JqLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHN0b3JlZEFsdENvbnRlbnQsIG9i
aik7CgkJCQkJCWlmIChzdG9yZWRBbHRDb250ZW50SWQpIHsKCQkJCQkJCXNldFZp
c2liaWxpdHkoc3RvcmVkQWx0Q29udGVudElkLCB0cnVlKTsKCQkJCQkJCWlmICh1
YS5pZSAmJiB1YS53aW4pIHsgc3RvcmVkQWx0Q29udGVudC5zdHlsZS5kaXNwbGF5
ID0gImJsb2NrIjsgfQoJCQkJCQl9CgkJCQkJCWlmIChzdG9yZWRDYWxsYmFja0Zu
KSB7IHN0b3JlZENhbGxiYWNrRm4oc3RvcmVkQ2FsbGJhY2tPYmopOyB9CgkJCQkJ
fQoJCQkJCWlzRXhwcmVzc0luc3RhbGxBY3RpdmUgPSBmYWxzZTsKCQkJCX0KCQkJ
fSwKCgkJCWNhbGxEb21Mb2FkRnVuY3Rpb25zOiBjYWxsRG9tTG9hZEZ1bmN0aW9u
cwoJCX07Cgl9KCk7CgoJdmFyIFNXRgk9IHsKCgkJZGVmUGFyYW1zOiB7IGFsbG93
U2NyaXB0QWNjZXNzOiAnYWx3YXlzJywgbWVudTogZmFsc2UgfSwKCgkJYnVpbGQ6
IGZ1bmN0aW9uIChFbG0vKlN0cmluZyovLCBwLypPYmplY3QqLykvKlNXRk5vZGUq
LwoJCXsKCQkJaWYoIHR5cGVvZiBFbG0gPT0gJ3N0cmluZycgKUVsbSA9ICRGKCBF
bG0gKTsJLy8gYnkgaWQKCQkJZWxzZSBpZiggRWxtLmFwcGVuZCApCQlFbG0gPSBF
bG1bMF07CQkvLyBqUXVlcnkKCgkJCXZhcgoJCQkJICBtCQk9IHAubW92aWUvKk1v
dmllUGFyYW1zKi8KCQkJCSwgdgkJPSBwLnZhcnMgfHwge30vKkZsYXNoVmFycyov
CgkJCQksIHAJCT0gJEUodGhpcy5kZWZQYXJhbXMsIHAucGFyYW1zKS8qUGFyYW1z
Ki8KCQkJCSwgZklkCT0gbS5uYW1lIHx8IGpzQ29yZS5nZXRVbmlxSWQoKQoJCQkJ
Ly8sIEgJCT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQicpCgkJCTsKCQkJRWxt
LmlkCQkJPSBqc0NvcmUuZ2V0VW5pcUlkKCk7CgkJCS8vRWxtLmlubmVySFRNTAk9
ICcnOwoJCQkvL0VsbS5hcHBlbmRDaGlsZCggSCApOwoKLy8JCQl2ID0gJEUodiwg
U3RyaW5nLnRvT2JqZWN0KG0udXJsLnNwbGl0KCc/JylbMV0pICk7Ci8vCQkJT2Jq
ZWN0LmZvckVhY2godiwgZnVuY3Rpb24gKHgsIGspeyB2W2tdID0gZW5jb2RlVVJJ
Q29tcG9uZW50KHgpOyB9KTsKCgkJCXN3Zm9iamVjdC5lbWJlZFNXRigKCQkJCSAg
bS51cmwKCQkJCSwgRWxtLmlkCgkJCQksIG0ud2lkdGggfHwgJzEwMCUnCgkJCQks
IG0uaGVpZ2h0IHx8ICcxMDAlJwoJCQkJLCBtLnZlciB8fCBtLnZlcnNpb24gfHwg
JzkuMC4wJwoJCQkJLCAiZXhwcmVzc0luc3RhbGwuc3dmIgoJCQkJLCB2CgkJCQks
IHAKCQkJCSwgeyBpZDogZklkLCBuYW1lOiBmSWQsIGJnY29sb3I6IG0uYmcgfHwg
bS5iZ0NvbG9yIHx8IG0uYmFja2dyb3VuZCB9CgkJCSk7CgoJCQlyZXR1cm4JJEYo
JyMnK2ZJZCk7CgkJfQoJfTsKfQoKanNMb2FkZXIubG9hZGVkKCd7anNDb3JlfXN3
Zm9iamVjdCcsIDEpOwoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9z
d2ZvYmplY3QuanMgZW5kCgppZiggJ2pRdWVyeScgaW4gd2luZG93ICkgKGZ1bmN0
aW9uIChqUXVlcnksICQpIHsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29y
ZS91dGlscy9qc0hpc3RvcnkuanMgc3RhcnQKCgooZnVuY3Rpb24gKHcsIGQsIGws
ICQpCgl7CgkJdmFyIFJFX05PUk1BTElaRV9VUkwgPSBuZXcgUmVnRXhwKCdeKGh0
dHBzPzovL1teL10rKT8vKC4rPycrd2luZG93LmxvY2F0aW9uLmhvc3QrJy8pPyhj
Z2ktYmluLyk/JywgJ2cnKTsKCgkJdmFyCgkJCSAgcGlkCgkJCSwgaGFzaAkJPSBf
aGFzaCgpCgkJCSwgaUZyYW1lCT0gJC5icm93c2VyLm1zaWUgJiYgKGQuZG9jdW1l
bnRNb2RlIDwgOCB8fCAhZC5kb2N1bWVudE1vZGUpCgkJCSwgc2VsZgkJPSB7fQoJ
CQksIHVybAkJPSAobC5wYXRobmFtZSArIGwuc2VhcmNoKS5yZXBsYWNlKC8jLiov
LCAnJykKCQkJLCAkd2luCQk9ICQodykKCQkJLCBldnQJCT0gZmFsc2UKCQkJLCBl
dnROYW1lCT0gJ2hhc2hjaGFuZ2UnCgkJCSwgX2xpc3RlbmVyCT0gW10KCQkJLCBf
dXJsRGF0YQk9IHt9CgkJCSwgX3VybExvY2FsRGF0YQk9IHt9CgkJCSwgX3VzZUhp
c3RvcnlBUEkgPSBtYWlscnUudjIgJiYgaGlzdG9yeS5wdXNoU3RhdGUKCQkJLCBf
aGNmCgkJOwoKCgkJZnVuY3Rpb24gbm9ybWFsaXplVXJsKGhhc2gpewoJCQloYXNo
ID0gaGFzaC5yZXBsYWNlKFJFX05PUk1BTElaRV9VUkwsICcnKTsKCQkJaWYoICEv
XlwvLy50ZXN0KGhhc2gpICl7CgkJCQloYXNoID0gJy8nICsgaGFzaDsKCQkJfQoJ
CQlyZXR1cm4gaGFzaDsKCQl9CgoKCS8vIEBwcml2YXRlCgkJaWYoIF91c2VIaXN0
b3J5QVBJICl7CgkJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScs
IF9oY2YgPSBmdW5jdGlvbiAoKXsKCQkJCV9jaGFuZ2VkKCBsLnRvU3RyaW5nKCkg
KTsKCQkJfSwgZmFsc2UpOwoJCX0KCQllbHNlIGlmKCAoJ29uJytldnROYW1lIGlu
IHcpICYmICFpRnJhbWUgKXsKCQkvLyBzdXBwb3J0IGV2ZW50CgkJCWV2dAk9IHRy
dWU7CgoJCQlfaGNmID0gZnVuY3Rpb24gKCl7CgkJCQlfY2hhbmdlZChfaGFzaCgg
bC50b1N0cmluZygpICkpOwoJCQl9OwoKCQkJanNFdmVudC5hZGQodywgZXZ0TmFt
ZSwgX2hjZiwgZmFsc2UpOwoJCQlqc0NvcmUudW5sb2FkKGZ1bmN0aW9uICgpeyBq
c0V2ZW50LnJlbW92ZSh3LCBldnROYW1lLCBfaGNmLCBmYWxzZSk7IH0pOwoJCX0K
CQllbHNlCgkJewlpZiggJEIub3BlcmEgfHwgaUZyYW1lICkKCQkJLy8gU3R1cGlk
CgkJCQlqc0NvcmUucmVhZHkoZnVuY3Rpb24gKCkKCQkJCXsKCQkJCQlpRnJhbWUJ
PSBpRnJhbWUgPyAkKCc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDowOyIgLz4nKS5p
bnNlcnRBZnRlcignQk9EWScpWzBdLmNvbnRlbnRXaW5kb3cgOiBmYWxzZTsKCQkJ
CQlpZiggaUZyYW1lICkgX2ZpeElFKGhhc2gsIHRydWUpOwoJCQkJCWlmKCAkQi5v
cGVyYSApCgkJCQkJewoJCQkJCQloaXN0b3J5Lm5hdmlnYXRpb25Nb2RlCT0gJ2Nv
bXBhdGlibGUnOwoJCQkJCQl3Ll9fanNIaXN0b3J5X18JPSBmdW5jdGlvbiAoKQoJ
CQkJCQl7CgkJCQkJCQlfY2hlY2soKTsKCQkJCQkJCUludGVydmFsLmNsZWFyKHBp
ZCk7CgkJCQkJCQlwaWQJPSBJbnRlcnZhbC5zZXQoX2NoZWNrLCAxMDApOwoJCQkJ
CQl9OwoJCQkJCQkkKCc8aW1nIHNyYz0iamF2YXNjcmlwdDpsb2NhdGlvbi5ocmVm
PVwnamF2YXNjcmlwdDp3aW5kb3cuX19qc0hpc3RvcnlfXygpO1wnOyIgLz4nKQoJ
CQkJCQkJLmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB3aWR0aDogMSwgaGVp
Z2h0OiAxIH0pCgkJCQkJCQkuYXBwZW5kVG8oJ0JPRFknKQoJCQkJCQk7CgkJCQkJ
fQoJCQkJCXBpZAk9IEludGVydmFsLnNldChfY2hlY2ssIDEwMCk7CgkJCQl9KTsK
CQkJZWxzZQoJCQkvLyBOb3JtYWwgYnJvd3NlcnMKCQkJCXBpZAk9IEludGVydmFs
LnNldChfY2hlY2ssIDEwMCk7CgkJfQoKCgkJZnVuY3Rpb24gX2hhc2goaCl7CgkJ
CWlmKCBfdXNlSGlzdG9yeUFQSSApewoJCQkJaCA9IGggfHwgbm9ybWFsaXplVXJs
KGwudG9TdHJpbmcoKSk7CgkJCX0KCQkJZWxzZSB7CgkJCQloID0gKCcjJyArICho
IHx8IG5vcm1hbGl6ZVVybChsLnRvU3RyaW5nKCkpKS5yZXBsYWNlKC9eW14jXSoj
LywgJycpLnRvU3RyaW5nKCkpLnNwbGl0KCc/Jyk7CgoJCQkJaWYoIGhbMV0gKXsK
CQkJCQloID0gaFswXSsnPycrYWpzLnRvUXVlcnkoYWpzLnRvT2JqZWN0KGhbMV0p
KTsKCgkJCQl9IGVsc2UgewoJCQkJCWggPSBoWzBdOwoJCQkJfQoJCQl9CgoJCQly
ZXR1cm4JaDsKCQl9CgoKCQlmdW5jdGlvbiBfdW5sb2FkKCkKCQl7CgkJCXZhciB0
eHQJPSAkd2luLnRyaWdnZXJIYW5kbGVyKCdiZWZvcmV1bmxvYWQnKTsKCQkJcmV0
dXJuCSF0eHQgfHwgY29uZmlybSh0eHQpOwoJCX0KCgoJCWZ1bmN0aW9uIF9jaGFu
Z2VkKGgsIGYpCgkJewoJCQl2YXIgbG9jYWwgPSBfdXJsTG9jYWxEYXRhW3NlbGYu
Z2V0KCldOwoKCQkJaWYoIGYgfHwgaCAhPT0gaGFzaCApCgkJCXsKCQkJCWlmKCBm
IHx8IGxvY2FsIHx8IF91bmxvYWQoKSApCgkJCQl7CgkJCQkJaWYoICFmICkgc2Vs
Zi5wcmV2aW91cwk9IHNlbGYuZ2V0KCk7CgkJCQkJaWYoIGggIT09IHVuZGVmaW5l
ZCApIGhhc2ggPSBoOwoKCQkJCQloID0gc2VsZi5nZXQoKTsKCgkJCQkJZm9yKCB2
YXIgaSA9IF9saXN0ZW5lci5sZW5ndGg7IGktLTsgKQoJCQkJCQlfbGlzdGVuZXJb
aV0oaCwgZiwgX3VybERhdGFbaF0sIGxvY2FsKTsKCgkJCQkJaWYoICFldnQgKSAk
d2luLnRyaWdnZXJIYW5kbGVyKGV2dE5hbWUpOwoJCQkJfQoJCQkJZWxzZQoJCQkJ
ewkvLyBSZXN0b3JlIEhhc2gKCQkJCQlzZWxmLnNldCggaGFzaCApOwoJCQkJfQoJ
CQl9CgkJfQoKCgkJZnVuY3Rpb24gX2NoZWNrKCkKCQl7CgkJCXZhciBoID0gX2hh
c2goKTsKCQkJaWYoIGggIT09IGhhc2ggKQoJCQl7CgkJCQlfY2hhbmdlZChoKTsK
CQkJCWlmKCBpRnJhbWUgKSBfZml4SUUoaCwgdHJ1ZSk7CgkJCX0KCQkJZWxzZSBp
ZiggaUZyYW1lICYmIGlGcmFtZS5kb2N1bWVudCApCgkJCXsKCQkJCWgJPSBfaGFz
aCggaUZyYW1lLmRvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkgKTsKCQkJCWlm
KCBoICE9PSBoYXNoICkKCQkJCXsKCQkJCQlsLmhhc2ggPSBoOwoJCQkJCV9jaGFu
Z2VkKGgpOwoJCQkJfQoJCQl9CgkJfQoKCgkJZnVuY3Rpb24gX2ZpeElFKGgsIHdy
aXRlKQoJCXsKCQkJdHJ5CgkJCXsKCQkJCXZhciBkb2MgPSBpRnJhbWUuZG9jdW1l
bnQ7CgkJCQlpZiggd3JpdGUgKSBkb2Mub3BlbigpLmNsb3NlKCk7CgkJCQlkb2Mu
bG9jYXRpb24uaGFzaAk9IF9oYXNoKGgpOwoJCQl9CgkJCWNhdGNoKCBlcnIgKQoJ
CQl7CgkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IF9maXhJRShoLCB3cml0ZSk7
IH0sIDEwKTsKCQkJfQoJCX0KCgkvLyBAcHVibGljCgkJJEUoc2VsZiwgewoKCQkJ
dHJ1c3Q6IHsgdGVzdDogYWpzLnJldFRydWUgfSwKCQkJc2V0TW9kaWZpZXI6IG5v
cm1hbGl6ZVVybCwKCQkJbm9ybWFsaXplVXJsOiBub3JtYWxpemVVcmwsCgoJCQlk
ZXN0cm95OiBmdW5jdGlvbigpIHsKCQkJCV9jaGVjayA9ICQubm9vcDsKCQkJCWpz
RXZlbnQucmVtb3ZlKHcsIGV2dE5hbWUsIF9oY2YsIGZhbHNlKTsKCQkJfSwKCgkJ
CWdldDogZnVuY3Rpb24gKCl7CgkJCQl2YXIgaCA9IGhhc2gucmVwbGFjZSgvXiMv
LCAnJyk7CgkJCQlyZXR1cm4gaCAhPSAnJyAmJiBzZWxmLnRydXN0LnRlc3QoaCkg
PyBoIDogdXJsOwoJCQl9LAoKCQkJc2V0SGFyZDogZnVuY3Rpb24gKG5IYXNoLCBk
YXRhLCBsb2NhbCl7CgkJCQlzZWxmLnByZXZpb3VzID0gKHNlbGYucHJldmlvdXMg
PT09IHZvaWQgMCkgPyAnJyA6IHNlbGYuZ2V0KCk7CgkJCQlpZiggaUZyYW1lICkg
X2ZpeElFKG5IYXNoLCB0cnVlKTsKCQkJCWhhc2ggPSBuSGFzaDsKCQkJCXZhciBz
ID0gbkhhc2gucmVwbGFjZSgvXiMvLCAnJyk7CgkJCQlpZiAoZGF0YSkgewoJCQkJ
CV91cmxEYXRhW3NdID0gZGF0YTsKCQkJCX0KCQkJCWlmIChsb2NhbCkgewoJCQkJ
CV91cmxMb2NhbERhdGFbc10gPSAxOwoJCQkJfQoKCQkJCV9jaGFuZ2VkKG5IYXNo
LCB0cnVlKTsKCgkJCQlpZiggX3VzZUhpc3RvcnlBUEkgKXsKCQkJCQloaXN0b3J5
LnB1c2hTdGF0ZShudWxsLCBudWxsLCBoYXNoKTsKCQkJCX0KCQkJCWVsc2UgewoJ
CQkJCWwuaGFzaCA9IGhhc2g7CgkJCQl9CgkJCX0sCgoJCQlnZXREYXRhOiBmdW5j
dGlvbiAoaGFzaCl7CgkJCQlyZXR1cm4JX3VybERhdGFbX2hhc2gobm9ybWFsaXpl
VXJsKGhhc2gpKV07CgkJCX0sCgoJCQlzZXQ6IGZ1bmN0aW9uIChuSGFzaCwgZGF0
YSwgbG9jYWwpewoJCQkJaWYoIHNlbGYuZGlzYWJsZWQgKXsKCQkJCQlsLmhyZWYg
PSBuSGFzaDsKCQkJCQlyZXR1cm4JZmFsc2U7CgkJCQl9CgoJCQkJbkhhc2gJPSBf
aGFzaChub3JtYWxpemVVcmwobkhhc2gpKTsKCgkJCQlpZiggaGFzaCA9PSBuSGFz
aCApewoJCQkJCXJldHVybiB0cnVlOwoJCQkJfQoJCQkJZWxzZSBpZiggbG9jYWwg
fHwgX3VubG9hZCgpICl7CgkJCQkJc2VsZi5zZXRIYXJkKG5IYXNoLCBkYXRhLCBs
b2NhbCk7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgoJCQkJcmV0dXJuCWZhbHNl
OwoJCQl9LAoKCgkJCXJlYWxVcmw6IGZ1bmN0aW9uICgpCgkJCXsKCQkJCXJldHVy
biB1cmw7CgkJCX0sCgoKCQkJY2hhbmdlOiBmdW5jdGlvbiAoZnVuYywgZm9yY2Up
CgkJCXsKCQkJCWlmKCAhZm9yY2UgKSBmdW5jKCB0aGlzLmdldCgpICk7CgkJCQlf
bGlzdGVuZXIudW5zaGlmdChmdW5jKTsKCQkJCXJldHVybgl0aGlzOwoJCQl9LAoK
CgkJCXVuYmluZDogZnVuY3Rpb24gKGZ1bmMpCgkJCXsKCQkJCV9saXN0ZW5lcgk9
IEFycmF5LnJlbW92ZShfbGlzdGVuZXIsIGZ1bmMpOwoJCQkJcmV0dXJuCXRoaXM7
CgkJCX0sCgoJCQlvbmU6IGZ1bmN0aW9uIChmdW5jKQoJCQl7CgkJCQlyZXR1cm4J
dGhpcy5jaGFuZ2UoZnVuY3Rpb24gKGhhc2gpCgkJCQl7CgkJCQkJZnVuYyhoYXNo
KTsKCQkJCQlzZWxmLnVuYmluZChhcmd1bWVudHMuY2FsbGVlKTsKCQkJCX0sIHRy
dWUpOwoJCQl9LAoKCQkJY2hhbmdlVG9wOiBmdW5jdGlvbiAoZnVuYywgZm9yY2Up
IHsKCQkJCWlmKCAhZm9yY2UgKSBmdW5jKCB0aGlzLmdldCgpICk7CgkJCQlfbGlz
dGVuZXIucHVzaChmdW5jKTsKCQkJCXJldHVybgl0aGlzOwoJCQl9LAoKCQkJb25l
VG9wOiBmdW5jdGlvbiAoZnVuYykKCQkJewoJCQkJcmV0dXJuCXRoaXMuY2hhbmdl
VG9wKGZ1bmN0aW9uIChoYXNoKQoJCQkJewoJCQkJCWZ1bmMoaGFzaCk7CgkJCQkJ
c2VsZi51bmJpbmQoYXJndW1lbnRzLmNhbGxlZSk7CgkJCQl9LCB0cnVlKTsKCQkJ
fSwKCgkJCWJ1aWxkUGFyYW1zOiBmdW5jdGlvbiAoYWRkLCByZW1vdmUpewoJCQkJ
dmFyIHBhcmFtcyA9IGFqcy50b09iamVjdCh0aGlzLmdldCgpLnNwbGl0KCc/Jylb
MV0gfHwgJycpOwoJCQkJaWYoIHJlbW92ZSApIGFqcy5lYWNoKHJlbW92ZSwgZnVu
Y3Rpb24gKGtleSl7IGRlbGV0ZSBwYXJhbXNba2V5XTsgfSk7CgkJCQlyZXR1cm4J
YWpzLnRvUXVlcnkoYWpzLmV4dGVuZChwYXJhbXMsIGFkZCkpOwoJCQl9LAoKCQkJ
YnVpbGRVcmw6IGZ1bmN0aW9uIChhZGQsIHJlbW92ZSwgdXJsKXsKCQkJCXJldHVy
bgkodXJsIHx8IHRoaXMuZ2V0KCkuc3BsaXQoJz8nKVswXSkgKyc/Jysgc2VsZi5i
dWlsZFBhcmFtcyhhZGQsIHJlbW92ZSk7CgkJCX0sCgoJCQlidWlsZDogZnVuY3Rp
b24gKGFkZCwgcmVtb3ZlLCB1cmwpewoJCQkJdGhpcy5zZXQoc2VsZi5idWlsZFVy
bChhZGQsIHJlbW92ZSwgdXJsKSk7CgkJCX0sCgoJCQl1c2VIaXN0b3J5QVBJOiBf
dXNlSGlzdG9yeUFQSQoJCX0pOwoKCgkJLy8gSGlzdG9yeSBtZXRob2RzCgkJQXJy
YXkuZm9yRWFjaChbJ2dvJywgJ2JhY2snLCAnZm9yd2FyZCddLCBmdW5jdGlvbiAo
bikKCQl7CgkJCXNlbGZbbl0gPSBmdW5jdGlvbiAoeCkKCQkJewoJCQkJdy5oaXN0
b3J5W25dKHgpOwoJCQkJcmV0dXJuCXNlbGY7CgkJCX07CgkJfSk7CgoKCQkvLyBH
TE9CQUxTCgkJdy5qc0hpc3RvcnkJCT0gc2VsZjsKCX0pKHdpbmRvdywgZG9jdW1l
bnQsIGxvY2F0aW9uLCBqUXVlcnkpOwoKCWpzTG9hZGVyLmxvYWRlZCgne3V0aWxz
fWpzSGlzdG9yeScsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvanNDb3Jl
L3V0aWxzL2pzSGlzdG9yeS5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1
L2pzQ29yZS91dGlscy9Db3VudGVyLmpzIHN0YXJ0CgovKioKICogQGNsYXNzCUNv
dW50ZXIKICovCmpzQ2xhc3MKCS5jcmVhdGUoJ0NvdW50ZXInKQoJLnN0YXRpY3Mo
ewoKCQkvLyBzaG93CgkJZDogZnVuY3Rpb24oaSl7CgkJCXRoaXMuY291bnQoJy8v
cnMuJyArIG1haWxydS5TaW5nbGVEb21haW5OYW1lICsgJy9kJyArIGkgKyAnLmdp
Zj9ybmQ9JyArIE1hdGgucmFuZG9tKCkpOwoJCX0sCgoJCS8vIGNsaWNrCgkJc2I6
IGZ1bmN0aW9uKGkpewoJCQl0aGlzLmNvdW50KCcvL3JzLicgKyBtYWlscnUuU2lu
Z2xlRG9tYWluTmFtZSArICcvc2InICsgaSArICcuZ2lmP3JuZD0nICsgTWF0aC5y
YW5kb20oKSk7CgkJfSwKCgkJZ3N0YXQ6IGZ1bmN0aW9uKHN0cil7CgkJCXRoaXMu
Y291bnQoJy8vZ3N0YXQuJyArIG1haWxydS5zdGF0aWNEb21haW5OYW1lICsgJy9n
c3RhdD8nICsgc3RyICsgJyZybmQ9JyArIE1hdGgucmFuZG9tKCkpOwoJCX0sCgoJ
CWNvdW50OiBmdW5jdGlvbihzcmMpewoJCQluZXcgSW1hZ2UoKS5zcmMgPSBzcmM7
CgkJfQoJfSkKOwoKanNMb2FkZXIubG9hZGVkKCd7dXRpbHN9Q291bnRlcicsIDEp
OwogCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvdXRpbHMvQ291bnRl
ci5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS91dGlscy9I
b3RLZXlzLmpzIHN0YXJ0CgovKioKICogQGF1dGhvcglSdWJhWGEJPHRyYXNoQHJ1
YmF4YS5vcmc+CiAqIEBkZXNjcmlwdGlvbgogKgogKiAJCSQuaG90a2V5cwogKiAJ
CQkuYmluZCgiY3RybCtsZWZ0IGVzYyBCIHNoaWZ0K04iLCBsaXN0ZW5lcik7CiAq
CiAqIAkJJC5ob3RrZXlzCiAqIAkJCS51bmJpbmQoImVzYyIsIGxpc3RlbmVyKTsK
ICovCgoKCihmdW5jdGlvbiAoJCl7CgkJdmFyIF9ycGx1cyA9IC9ccypcK1xzKi8s
IGtleUNvZGUgPSB3aW5kb3cuanNFdmVudCAmJiBqc0V2ZW50LktleSB8fCB7fTsK
CgkJLy8gbmFtZXNwYWNlCgkJdmFyIEhLID0gJC5ob3RrZXlzID0ge307CgoJCWZ1
bmN0aW9uIF90b0hvdEtleShzdHIpewoJCQl2YXIgdG1wID0gc3RyLnNwbGl0KCBf
cnBsdXMgKTsKCQkJdmFyIGtleQk9ICh0bXBbdG1wLmxlbmd0aC0xXSsnJykudG9M
b3dlckNhc2UoKTsKCQkJdmFyIHJlcyA9IHsKCQkJCQkJICAnbmFtZSc6CWtleQoJ
CQkJCQksICdtZXRhJzoJKHRtcFt0bXAubGVuZ3RoLTJdIHx8ICcnKQoJCQkJCQks
ICdjb2RlJzoJKGtleUNvZGVba2V5XSB8fCBrZXkudG9VcHBlckNhc2UoKS5jaGFy
Q29kZUF0KDApKQoJCQkJCX07CgkJCXJlcy5jb21ibyA9IChyZXMubWV0YSA/IHJl
cy5tZXRhICsnKycrIGtleSA6IGtleSk7CgkJCXJlcy5tbmVtbyA9IChyZXMubWV0
YSA/IHJlcy5tZXRhICsnKycrIHJlcy5jb2RlIDogcmVzLmNvZGUpOwoJCQlyZXR1
cm4JcmVzOwoJCX0KCgoJCSQuaG90a2V5cy5vbiA9ICQuaG90a2V5cy5iaW5kID0g
ZnVuY3Rpb24gKGtleXMsIGZ1bmMpewoJCQlBcnJheS5mb3JFYWNoKCQudHJpbShr
ZXlzKS5zcGxpdCgvXHMrLyksIGZ1bmN0aW9uIChrZXkpewoJCQkJLy8gQ29udmVy
dCBzdHJpbmcgdG8gb2JqZWN0CgkJCQlrZXkJPSBfdG9Ib3RLZXkoIGtleSApOwoJ
CQkJaWYoICFIS1trZXkubW5lbW9dICl7CgkJCQkJSEtba2V5Lm1uZW1vXQk9IFtd
OwoJCQkJfQoJCQkJSEtba2V5Lm1uZW1vXS5wdXNoKFtrZXksIGZ1bmNdKTsKCQkJ
fSk7CgkJfTsKCgoJCSQuaG90a2V5cy5vZmYgPSAkLmhvdGtleXMudW5iaW5kID0g
ZnVuY3Rpb24gKGtleXMsIGZ1bmMpewoJCQlBcnJheS5mb3JFYWNoKCQudHJpbShr
ZXlzKS5zcGxpdCgvXHMrLyksIGZ1bmN0aW9uIChrZXkpewoJCQkJa2V5CT0gX3Rv
SG90S2V5KCBrZXkgKTsKCQkJCXZhciBpZHggPSBBcnJheS5zZWFyY2goSEtba2V5
Lm1uZW1vXSB8fCBbXSwgZnVuY3Rpb24gKFgpeyByZXR1cm4gWCAmJiBYWzFdID09
PSBmdW5jOyB9KTsKCQkJCWlmKCBpZHggPiAtMSApewoJCQkJCUhLW2tleS5tbmVt
b10gPSBBcnJheS5yZW1vdmVBdChIS1trZXkubW5lbW9dLCBpZHgpOwoJCQkJfQoJ
CQl9KTsKCQl9OwoKCgkJLy8gTGlzdGVuIGdsb2JhbCBrZXkgZG93bgoJCSQoZG9j
dW1lbnQpLmtleWRvd24oZnVuY3Rpb24gKGV2dCl7CgkJCXZhcgoJCQkJICBjb2Rl
CT0gZXZ0LmtleUNvZGUKCQkJCSwgbWV0YQk9ICcnCgkJCQksIEhLCT0gJC5ob3Rr
ZXlzCgkJCQksIGZpcmUJPSBbY29kZV0KCQkJCSwgcmV0CT0gdHJ1ZQoJCQk7CgoJ
CQlpZiggZXZ0LmN0cmxLZXkgKQkJbWV0YSA9ICdjdHJsJzsKCQkJZWxzZSBpZigg
ZXZ0LnNoaWZ0S2V5ICkJbWV0YSA9ICdzaGlmdCc7CgkJCWVsc2UgaWYoIGV2dC5h
bHRLZXkgKQltZXRhID0gJ2FsdCc7CgkJCWVsc2UgaWYoIGV2dC5tZXRhS2V5ICkJ
bWV0YSA9ICdtZXRhJzsKCgkJCWlmKCBtZXRhICkgZmlyZS5wdXNoKG1ldGEsIG1l
dGErJysnK2NvZGUpOwoKCQkJQXJyYXkuZm9yRWFjaChmaXJlLCBmdW5jdGlvbiAo
a2V5KXsKCQkJCS8vIEJyb2FkY2F0cwoJCQkJaWYoIEhLW2tleV0gKSBmb3IoIHZh
ciBpID0gMCwgbiA9IEhLW2tleV0ubGVuZ3RoLCBYOyBpIDwgbjsgaSsrICl7CgkJ
CQkJLy8gWFswXSDigJQga2V5IG9iamVjdAoJCQkJCS8vIFhbMV0g4oCUIGxpc3Rl
bmVyCgkJCQkJWCA9IEhLW2tleV1baV07CgkJCQkJdHJ5IHsKCQkJCQkJaWYoIFhb
MV0oZXZ0LCBYWzBdKSA9PT0gZmFsc2UgKXsKCQkJCQkJCXJldAk9IGZhbHNlOwoJ
CQkJCQl9CgkJCQkJfQoJCQkJCWNhdGNoKCBlcnIgKXt9CgkJCQl9CgkJCX0pOwoK
CQkJaWYoICFyZXQgKXsKCQkJCXJldHVybglmYWxzZTsKCQkJfQoJCX0pOwoKCgkJ
LyoqCgkJICogQGRlcHJlY2F0ZWQKCQkgKiBAcGFyYW0Je1N0cmluZ30Ja2V5cwoJ
CSAqIEBwYXJhbQl7RnVuY3Rpb259CWZuCgkJICovCgkJJC5mbi5zZXRIb3RLZXkJ
PSBmdW5jdGlvbiAoa2V5cywgZm4pewoJCQkkLmhvdGtleXMuYmluZChrZXlzLCBm
bik7CgkJCXJldHVybgl0aGlzOwoJCX07CgoKCQkkLmZuLmhvdEtleQk9IGZ1bmN0
aW9uIChrZXlzLCBmbil7CgkJCXZhciB0eXBlOwoKCQkJdGhpcy5iaW5kKCdmb2N1
cyBibHVyJywgZnVuY3Rpb24gKGV2dCl7CgkJCQlpZiggdHlwZSAhPT0gZXZ0LnR5
cGUgKXsKCQkJCQl0eXBlID0gZXZ0LnR5cGU7CgkJCQkJJC5ob3RrZXlzW2V2dC50
eXBlID09ICdmb2N1cycgPyAnb24nIDogJ29mZiddKGtleXMsIGZuKTsKCQkJCX0K
CQkJfSk7CgoJCQlyZXR1cm4JdGhpczsKCQl9OwoJfSkoalF1ZXJ5KTsKCglqc0xv
YWRlci5sb2FkZWQoJ3t1dGlsc31Ib3RLZXlzJywgMSk7CgovLyBkYXRhL3J1L2lt
YWdlcy9qcy9ydS9qc0NvcmUvdXRpbHMvSG90S2V5cy5qcyBlbmQKCi8vIC4vZGF0
YS9jb21tb24vanMvYWpzL2Fqcy5Sb3V0ZXIubWluLmpzIHN0YXJ0CgovKiohCiAq
IEFwcGxpY2F0aW9uIHJvdXRlcgogKiBAYXV0aG9yCVJ1YmFYYQk8dHJhc2hAcnVi
YXhhLm9yZz4KICoKICogQGV4YW1wbGUKICogCXZhciBSb3V0ZXIgPSBuZXcgYWpz
LlJvdXRlcjsKICoKICogCVJvdXRlci5jcmVhdGVHcm91cCgnLycsIHsgaWQ6ICdo
b21lJyB9KQogKiAJCS5yb3V0ZSgnKicsIGFwcC5MZWZ0Q29sKQogKiAJCS5yb3V0
ZSgnLicsIGFwcC5JbmRleCkKICogCQkuY3JlYXRlR3JvdXAoJ2Jsb2cvJywgeyBp
ZDogJ2Jsb2cnIH0gKQogKiAJCQkucm91dGUoJy4nLCBhcHAuQmxvZ1Bvc3RzKQog
KiAJCQkucm91dGUoJ3Bvc3QvOmlkJywgYXBwLkJsb2dQb3N0LCB7IGlkOiAnYmxv
Zy1wb3N0JyB9KQogKiAJCQkuY2xvc2VHcm91cCgpCiAqIAkJLnJvdXRlKCdhYm91
dCcsIHsgaWQ6ICdhYm91dCcgfSkKICogCTsKICoKICogCVJvdXRlci5uYXYoJy9i
bG9nLycpOwogKiAJLy8gT1IKICogCVJvdXRlci5nbygnYmxvZy1wb3N0JywgeyBp
ZDogMiB9KTsKICoKICogCUB0b2RvCiAqIAkJ0KDQvtGD0YLQuNC90LMg0L3QsCDQ
vdC10YHRg9GJ0LXRgdCy0YPRjtGJ0LjQuSDRg9GA0LsuCiAqLwooZnVuY3Rpb24o
cSxlKXtmdW5jdGlvbiBmKGEsYixkKXtpZihhKXt2YXIgYz0wLGg9YS5sZW5ndGg7
aWYoYyBpbiBhJiZoIT09bClmb3IoO2M8aDtjKyspYi5jYWxsKGQsYVtjXSxjLGEp
O2Vsc2UgZm9yKGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiZiLmNhbGwoZCxh
W2NdLGMsYSl9fWZ1bmN0aW9uIGooYSxiKXt2YXIgZD1hcmd1bWVudHMsYz0xLGg9
ZC5sZW5ndGgsZztmb3IoYT1hfHx7fTtjPGg7YysrKWlmKChiPWRbY10pJiYib2Jq
ZWN0Ij09dHlwZW9mIGIpZm9yKGcgaW4gYiliLmhhc093blByb3BlcnR5KGcpJiYo
YVtnXT1iW2ddKTtyZXR1cm4gYX1mdW5jdGlvbiB3KGEsYixkLGMpe2lmKGEgaW5z
dGFuY2VvZiBSZWdFeHApcmV0dXJuIGE7ZS5pc0FycmF5KGEpJiYoYT0iKCIrYS5q
b2luKCJ8IikrIikiKTthPWEuY29uY2F0KGM/IiI6Ii8/IikucmVwbGFjZSgvKFwv
XCh8XChcLykvZywiKD86LyIpLnJlcGxhY2UoLyhcLyk/KFwuKT86KFx3KykoPzoo
XChbXj9dLio/XCkpKT8oXD8pPyhcKik/L2csCmZ1bmN0aW9uKGEsYyxkLGUsayxu
LGYpe2IucHVzaCh7bmFtZTplLG9wdGlvbmFsOiEhbn0pO2M9Y3x8IiI7cmV0dXJu
IiIrKG4/IiI6YykrIig/OiIrKG4/YzoiIikrKGR8fCIiKSsoa3x8ZCYmIihbXi8u
XSs/KSJ8fCIoW14vXSs/KSIpKyIpIisobnx8IiIpKyhmPyIoLyopPyI6IiIpfSku
cmVwbGFjZSgvKFtcLy5dKS9nLCJcXCQxIikucmVwbGFjZSgvXCovZywiKC4qKSIp
O3JldHVybiBSZWdFeHAoIl4iK2ErIiQiLGQ/IiI6ImkiKX1mdW5jdGlvbiBzKGEs
YixkLGMpe2lmKGQpe3ZhciBoPTEsZyxlPWIuZXhlYyhhKTtpZighZSlyZXR1cm4h
MTtmb3IoYT1lLmxlbmd0aDtoPGE7KytoKWI9ZFtoLTFdLGc9InN0cmluZyI9PXR5
cGVvZiBlW2hdP2RlY29kZVVSSUNvbXBvbmVudChlW2hdKTplW2hdLGI/Y1tiLm5h
bWVdPWc6Yy5wdXNoKGcpO3JldHVybiEwfXJldHVybiBiLnRlc3QoYSl9dmFyIHg9
MCxsPXZvaWQgMCxtPWZ1bmN0aW9uKCl7fSx0PS9eaHR0cHM/L2ksdT1mdW5jdGlv
bihhKXt2YXIgYj0KZnVuY3Rpb24oKXtpZihiLmZuLnNpbmdsZXRvbil7aWYoYi5f
X2luc3RfXylyZXR1cm4gYi5fX2luc3RfXztiLl9faW5zdF9fPXRoaXN9dGhpcy51
bmlxSWQ9Kyt4O3RoaXMuX19sZWdvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Yi5m
bj1iLnByb3RvdHlwZT1hfHx7fTtiLmZuLl9fc2VsZj1iLmZuLmNvbnN0cnVjdG9y
PWI7Yi5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGM9dSgpO20ucHJvdG90eXBlPXRo
aXMuZm47Yy5wcm90b3R5cGU9bmV3IG07aihjLHRoaXMpO2ooYy5mbj1jLnByb3Rv
dHlwZSxhKTtyZXR1cm4gYy5mbi5fX3NlbGY9Yi5mbi5jb25zdHJ1Y3Rvcj1jfTty
ZXR1cm4gYn0scD11KHtfX2xlZ286ZnVuY3Rpb24oKXt2YXIgYT1lKHRoaXMpO2Yo
e29uOiJiaW5kIixvZmY6InVuYmluZCIsZmlyZToidHJpZ2dlckhhbmRsZXIifSxm
dW5jdGlvbihiLGQpe3RoaXNbZF09ZnVuY3Rpb24oKXthW2JdLmFwcGx5KGEsYXJn
dW1lbnRzKTtyZXR1cm4gdGhpc319LHRoaXMpfSxlbWl0OmZ1bmN0aW9uKGEsCmIp
e3ZhciBkPSgib24tIithKS5yZXBsYWNlKC8tKC4pL2csZnVuY3Rpb24oYSxiKXty
ZXR1cm4gYi50b1VwcGVyQ2FzZSgpfSksYz1lLkV2ZW50KGEucmVwbGFjZSgvLS9n
LCIiKSk7Yy50YXJnZXQ9dGhpcztpZigodGhpc1tkXT09PWx8fCExIT09dGhpc1tk
XS5hcHBseSh0aGlzLFtjXS5jb25jYXQoYikpKSYmIWMuaXNJbW1lZGlhdGVQcm9w
YWdhdGlvblN0b3BwZWQoKSlyZXR1cm4gdGhpcy5maXJlKGMsYil9fSksaz1wLmV4
dGVuZCh7X19sZWdvOmZ1bmN0aW9uKGEpe3AuZm4uX19sZWdvLmNhbGwodGhpcyk7
dGhpcy5wYXRoPWF8fCIvIjt0aGlzLml0ZW1zPVtdO3RoaXMuaXRlbXNJZHg9e307
dGhpcy5yZXF1ZXN0PXRoaXMucmVmZXJyZXI9dGhpcy5fX3NlbGYucGFyc2VVUkwo
bG9jYXRpb24udG9TdHJpbmcoKSk7dGhpcy5oaXN0b3J5PVtdO3RoaXMuaGlzdG9y
eUlkeD0wfSxyb3V0ZTpmdW5jdGlvbihhLGIsZCxjLGgpe2E9dGhpcy5hZGRSb3V0
ZShhLGIsZCxjLGgpO3JldHVybiBoPwphOnRoaXN9LGFkZFJvdXRlOmZ1bmN0aW9u
KGEsYixkLGMsaCl7fiJzdHJpbmcgcmVnZXhwIi5pbmRleE9mKGUudHlwZShiKSl8
fChjPWQsZD1iLGI9YSxhPWwpO2lmKGQmJiFkLmZuKXt2YXIgZz1kO2Q9ay5Vbml0
LmV4dGVuZCgiZnVuY3Rpb24iIT10eXBlb2YgZz9nOntpbml0OmZ1bmN0aW9uKCl7
dGhpcy5vbigicm91dGVzdGFydCByb3V0ZWNoYW5nZSIrKCEwPT09Yz8iIHJvdXRl
ZW5kIjoiIiksZyl9fSl9InJlZ2V4cCIhPWUudHlwZShiKSYmKGI9KHRoaXMucGF0
aCsoIi4iPT1iPyIiOmIpKS5yZXBsYWNlKC9cL1wvLywiLyIpKTt2YXIgcj1bXSxm
PXRoaXMsajtoJiYoZj1uZXcgayhiKSxmLml0ZW1zPXRoaXMuaXRlbXMsZi5pdGVt
c0lkeD10aGlzLml0ZW1zSWR4LGYucGFyZW50Um91dGVyPXRoaXMsYis9IioiKTtk
JiYoaj10aGlzLml0ZW1zLnB1c2goe2lkOmEscGF0aDpiLGtleXM6cixyZWdleHA6
dyhiLHIpLHVuaXQ6ZHx8ay5WaWV3LG9wdGlvbnM6Y30pLGEmJih0aGlzLml0ZW1z
SWR4W2FdPQpqLTEpKTtyZXR1cm4gaD9mOmp9LHJlbW92ZVJvdXRlOmZ1bmN0aW9u
KGEpe2E9dGhpcy5pdGVtc0lkeFthXXx8YTt0aGlzLml0ZW1zLnNwbGljZShhLDEp
fSxjcmVhdGVHcm91cDpmdW5jdGlvbihhLGIsZCxjKXtyZXR1cm4gdGhpcy5yb3V0
ZShhLGIsZCxjLCEwKX0sY2xvc2VHcm91cDpmdW5jdGlvbigpe3JldHVybiB0aGlz
LnBhcmVudFJvdXRlcnx8dGhpc30sX2dldFVuaXRzOmZ1bmN0aW9uKGEsYil7dmFy
IGQ9W10sYz1bXTtmKGIsZnVuY3Rpb24oYil7dmFyIGc9Yi51bml0O3MoYS5wYXRo
LGIucmVnZXhwLGIua2V5cyxjKSYmKGcuX19zZWxmPT09bCYmKGIudW5pdD1nPW5l
dyBnKGooe2lkOmIuaWQsaW5pdGVkOiExfSxiLm9wdGlvbnMpKSksZy5yZXF1ZXN0
UGFyYW1zPWMsZC5wdXNoKGcpKX0sdGhpcyk7cmV0dXJuIGR9LF9sb2FkVW5pdHM6
ZnVuY3Rpb24oYSxiKXt2YXIgZD1bXSxjO2ZvcihiPWIuY29uY2F0KCk7Yz1iLnNo
aWZ0KCk7KWMmJmMuaXNBY3RpdmUoKSYmKGYoYy51bml0cywKZnVuY3Rpb24oYSl7
Yi5wdXNoKGEpfSksYy5sb2FkRGF0YSYmKGEucGFyYW1zPWMucmVxdWVzdFBhcmFt
cyxjPWMubG9hZERhdGEoYSksZGVsZXRlIGEucGFyYW1zKSxlLmlzQXJyYXkoYyk/
Yi5wdXNoLmFwcGx5KGIsYyk6YyYmZC5wdXNoKGMpKTtyZXR1cm4gZS53aGVuLmFw
cGx5KGUsZCl9LF9kb1JvdXRlVW5pdHM6ZnVuY3Rpb24oYSxiKXtmKGIsZnVuY3Rp
b24oYil7dmFyIGM9Yi51bml0LGg9ITAsZz1bXSxmPWooe30sYSk7Zi5wYXJhbXM9
ZztzKGYucGF0aCxiLnJlZ2V4cCxiLmtleXMsZyk/KGMucmVxdWVzdD1mLCEwIT09
Yy5pbml0ZWQmJmMuX19pbml0KCksITAhPT1jLmFjdGl2ZSYmKGg9ITEsYy5hY3Rp
dmU9ITAsYy5lbWl0KCJyb3V0ZS1zdGFydCIsZikpLGMuZW1pdCgicm91dGUiLGYp
LGgmJmMuZW1pdCgicm91dGUtY2hhbmdlIixmKSk6ITA9PT1jLmFjdGl2ZSYmIX5l
LmluQXJyYXkoYyx0aGlzLmFjdGl2ZVVuaXRzKSYmKGMuYWN0aXZlPSExLGMucmVx
dWVzdD1mLGMuZW1pdCgicm91dGUtZW5kIiwKZikpfSx0aGlzKX0sX2RvUm91dGVE
b25lOmZ1bmN0aW9uKGEpe2lmKHRoaXMuYWN0aXZlUmVxdWVzdD09PWEpe3RoaXMu
cmVxdWVzdC51cmwhPWEudXJsJiYodGhpcy5yZWZlcnJlcj10aGlzLnJlcXVlc3Qp
O3RoaXMucmVxdWVzdD1hO3RoaXMuX25hdkJ5SGlzdG9yeXx8KHRoaXMuaGlzdG9y
eT10aGlzLmhpc3Rvcnkuc2xpY2UoMCx0aGlzLmhpc3RvcnlJZHgrMSksdGhpcy5o
aXN0b3J5SWR4PXRoaXMuaGlzdG9yeS5wdXNoKGEudXJsKS0xKTt0aGlzLml0ZW1z
Lmxlbmd0aCYmdGhpcy5fZG9Sb3V0ZVVuaXRzKGEsdGhpcy5pdGVtcyk7dmFyIGI9
bmV3IERhdGUtdGhpcy5fX3RzO3RoaXMuZW1pdCgicm91dGUiLFthLGJdKTt0aGlz
LmxvZygiUm91dGVyLm5hdjoiLGIrIm1zIiwiKCIrYS51cmwrIikiKX19LF9kb1Jv
dXRlRmFpbDpmdW5jdGlvbihhKXt0aGlzLmFjdGl2ZVJlcXVlc3Q9PT1hJiYodGhp
cy5hY3RpdmVSZXF1ZXN0PW51bGwsdGhpcy5lbWl0KCJyb3V0ZS1mYWlsIixhKSl9
LApsb2c6ZnVuY3Rpb24oKXthanMubG9nJiZhanMubG9nLmFwcGx5KGFqcyxhcmd1
bWVudHMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlbXNbdGhpcy5p
dGVtc0lkeFthXV19LGdldFVybDpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZ2V0
KGEpLGMsZSxnPTA7ZCYmKGI9Ynx8e30sYz1kLmtleXMsZT1kLnBhdGgucmVwbGFj
ZSgvOihcdyspXD8/KFwvPykvZyxmdW5jdGlvbihhLGQsZSxmKXtyZXR1cm4oZj0o
ZD1jW2crK10pJiZiW2QubmFtZV0pP2YrKGV8fCIiKToiKCIrYSsiKSJ9KS5yZXBs
YWNlKC9cKC4qPzpbXildK1wpK1w/Py9nLCIiKS5yZXBsYWNlKC9cKHxcKVw/Py9n
LCIiKS5yZXBsYWNlKC9cLysvZywiLyIpKTtyZXR1cm4gZX0sbmF2OmZ1bmN0aW9u
KGEsYixkKXtlLmlzRnVuY3Rpb24oYikmJihkPWIsYj0hMSk7YT10aGlzLl9fc2Vs
Zi5wYXJzZVVSTChhLmhyZWZ8fGEudXJsfHxhKTtpZihifHwhdGhpcy5hY3RpdmVS
ZXF1ZXN0fHx0aGlzLmFjdGl2ZVJlcXVlc3QudXJsIT0KYS51cmwpdGhpcy5fX3Rz
PStuZXcgRGF0ZSx0aGlzLmVtaXQoImJlZm9yZS1yb3V0ZSIsW2EsdGhpcy5fX3Rz
XSksYj10aGlzLl9nZXRVbml0cyhhLHRoaXMuaXRlbXMpLGEucmVmZXJyZXI9dGhp
cy5yZXF1ZXN0LnVybCx0aGlzLmFjdGl2ZVVuaXRzPWIsdGhpcy5hY3RpdmVSZXF1
ZXN0PWEsYi5sZW5ndGg/dGhpcy5fbG9hZFVuaXRzKGEsYikuZG9uZSh0aGlzLl9k
b1JvdXRlRG9uZS5iaW5kKHRoaXMsYSkpLmZhaWwodGhpcy5fZG9Sb3V0ZUZhaWwu
YmluZCh0aGlzLGEpKS50aGVuKGQsZCk6KHRoaXMuX2RvUm91dGVEb25lKGEpLHRo
aXMuZW1pdCgiNDA0IixhKSksdGhpcy5fbmF2QnlIaXN0b3J5PSExfSxnbzpmdW5j
dGlvbihhLGIpe3ZhciBkPXRoaXMuZ2V0VXJsKGEsYik7ZCYmdGhpcy5uYXYoZCl9
LGhhc0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLmhpc3RvcnlJZHh9LGJh
Y2s6ZnVuY3Rpb24oKXt0aGlzLmhhc0JhY2soKSYmKHRoaXMuX25hdkJ5SGlzdG9y
eT0hMCx0aGlzLm5hdih0aGlzLmhpc3RvcnlbLS10aGlzLmhpc3RvcnlJZHhdKSl9
LApoYXNGb3J3YXJkOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmhpc3RvcnlbdGhp
cy5oaXN0b3J5SWR4KzFdfSxmb3J3YXJkOmZ1bmN0aW9uKCl7dGhpcy5oYXNGb3J3
YXJkKCkmJih0aGlzLl9uYXZCeUhpc3Rvcnk9ITAsdGhpcy5uYXYodGhpcy5oaXN0
b3J5WysrdGhpcy5oaXN0b3J5SWR4XSkpfX0pO2sucGFyc2VVUkw9ZnVuY3Rpb24o
YSl7dC50ZXN0KGEpfHwoYT0iLyI9PWEuY2hhckF0KDApPyIvLyIrbG9jYXRpb24u
aG9zdG5hbWUrYTpsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHIoMCxsb2NhdGlvbi5w
YXRobmFtZS5sYXN0SW5kZXhPZigiLyIpKzEpK2EsYT0iLy8iPT1hLnN1YnN0cigw
LDIpP2xvY2F0aW9uLnByb3RvY29sK2E6bG9jYXRpb24uaG9zdG5hbWUrYSx0LnRl
c3QoYSl8fChhPWxvY2F0aW9uLnByb3RvY29sKyIvLyIrYSkpO2E9YS5zdWJzdHIo
MCw3KSthLnN1YnN0cig3KS5yZXBsYWNlKC9cLysvZywgJy8nKTt2YXIgYj0oYS5z
cGxpdCgiPyIpWzFdfHwiIikucmVwbGFjZSgvIy4qLywiIiksZD17fSxjPWEuc3Vi
c3RyKGEuaW5kZXhPZigiLyIsCjgpKS5yZXBsYWNlKC9cPy4qLywiIik7YiYmZihi
LnNwbGl0KCImIiksZnVuY3Rpb24oYSxiKXtiPWEuc3BsaXQoIj0iKTtkW2JbMF1d
PWRlY29kZVVSSUNvbXBvbmVudCgidW5kZWZpbmVkIj09PXR5cGVvZiBiWzFdPyIi
OmJbMV0pfSk7cmV0dXJue3VybDphLHF1ZXJ5OmQsc2VhcmNoOmIscGF0aDpjLHBh
dGhuYW1lOmMsaGFzaDphLnJlcGxhY2UoL15bXiNdKyMvLCIiKX19O3ZhciB2PXAu
ZXh0ZW5kKHt1bml0czp7fSxib3VuZEFsbDpbXSxfX2xlZ286ZnVuY3Rpb24oYSl7
cC5mbi5fX2xlZ28uY2FsbCh0aGlzKTtqKHRoaXMsYSk7Zih0aGlzLmJvdW5kQWxs
LGZ1bmN0aW9uKGEpe3RoaXNbYV09dGhpcy5ib3VuZChhKX0sdGhpcyk7ITEhPT10
aGlzLmluaXRlZCYmdGhpcy5fX2luaXQoKX0sX19pbml0OmZ1bmN0aW9uKCl7dGhp
cy5pbml0ZWQ9ITA7dGhpcy5pbml0KCk7dGhpcy5lbWl0KCJpbml0Iil9LF9leGNl
cHRpb246ZnVuY3Rpb24oYSxiKXt0aHJvdyJbIit0aGlzLnVuaXFJZCsKIi4iK2Er
Il06ICIrYjt9LGlzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGJvdW5kOmZ1
bmN0aW9uKGEpeyJzdHJpbmciPT09dHlwZW9mIGEmJih0aGlzW2FdPT09bCYmdGhp
cy5fZXhjZXB0aW9uKCJib3VuZCIsYSsiIC0tIG1ldGhvZCBub3QgZm91bmQiKSxh
PXRoaXNbYV0pO3JldHVybiBhLmJpbmQodGhpcyl9LGFkZFVuaXQ6ZnVuY3Rpb24o
YSxiKXthIGluIHRoaXMudW5pdHMmJnRoaXMuX2V4Y2VwdGlvbigiYWRkVW5pdCIs
YSsiIC0tIGV4aXN0cyIpO3RoaXMudW5pdHNbYV09Yn0sZ2V0VW5pdDpmdW5jdGlv
bihhKXtyZXR1cm4gdGhpcy51bml0c1thXX0sZGVsVW5pdDpmdW5jdGlvbihhKXth
IGluIHRoaXMudW5pdHMmJih0aGlzLnVuaXRzW2FdLmRlc3Ryb3koKSxkZWxldGUg
dGhpcy51bml0c1thXSl9LGluaXQ6bSxsb2FkRGF0YTptLGRlc3Ryb3k6bX0pLHk9
di5leHRlbmQoe2VsOm51bGwsJGVsOmUoIiMiK01hdGgucm91bmQoMUU4Kk1hdGgu
cmFuZG9tKCkpKSx0YWdOYW1lOm51bGwsCmNsYXNzTmFtZToiIixwYXJlbnROb2Rl
Om51bGwsY2FjaGVkOiExLHRlbXBsYXRlOm51bGwsX19pbml0OmZ1bmN0aW9uKCl7
dGhpcy5pbml0ZWQ9ITA7dGhpcy5lbD90aGlzLnNldEVsZW1lbnQoZSh0aGlzLmVs
LHRoaXMucGFyZW50Tm9kZSkpOnRoaXMudGFnTmFtZSYmKHRoaXMuZWw9ZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCh0aGlzLnRhZ05hbWUpLHRoaXMuJGVsPWUodGhpcy5l
bCksdGhpcy5jbGFzc05hbWUmJnRoaXMuJGVsLmFkZENsYXNzKHRoaXMuY2xhc3NO
YW1lKSx0aGlzLnBhcmVudE5vZGUmJihlLmlzUmVhZHk/dGhpcy4kZWwuYXBwZW5k
VG8odGhpcy5wYXJlbnROb2RlKTplKGZ1bmN0aW9uKCl7dGhpcy4kZWwuYXBwZW5k
VG8odGhpcy5wYXJlbnROb2RlKX0uYmluZCh0aGlzKSkpKTt0aGlzLm9uKCJyb3V0
ZXN0YXJ0LnZpZXcgcm91dGVlbmQudmlldyIsdGhpcy5ib3VuZChmdW5jdGlvbihh
KXt0aGlzLl90b2dnbGVWaWV3KCJyb3V0ZWVuZCIhPWEudHlwZSl9KSk7dGhpcy5p
bml0KCk7CnRoaXMuZW1pdCgiaW5pdCIpfSxfdG9nZ2xlVmlldzpmdW5jdGlvbihh
KXt0aGlzLiRlbCYmdGhpcy4kZWwuY3NzKCJkaXNwbGF5IixhPyIiOiJub25lIil9
LHNldEVsZW1lbnQ6ZnVuY3Rpb24oYSl7YT90aGlzLiRlbD1hPWUoYSk6KHRoaXMu
JGVsPWE9ZSgpLHRoaXMuJGVsWzBdPWwsdGhpcy4kZWwubGVuZ3RoPTApO3RoaXMu
ZWw9YVswXX0sJDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLiRlbDt2b2lkIDAhPT1h
JiYoYj0ic3RyaW5nIj09dHlwZW9mIGE/Yi5maW5kKGEpOmUoYSkpO3JldHVybiBi
fSxnZXRUcGxEYXRhOm0sZ2V0SHRtbDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJl
cXVlc3R8fHt9O3JldHVybiB0aGlzLnRlbXBsYXRlKGooeyRVUkw6Yi51cmwsJEdF
VDpiLnF1ZXJ5LHdpZGdldDp0aGlzfSxhfHx0aGlzLmdldFRwbERhdGEoKSkpfSxy
ZW5kZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEh0bWwoKTsic3RyaW5nIj09
PXR5cGVvZiBhJiYodGhpcy5lbWl0KCJiZWZvcmUtcmVuZGVyIiksCnRoaXMuJGVs
LnByb3AoImlubmVySFRNTCIsYSksdGhpcy5lbWl0KCJyZW5kZXIiKSl9fSk7ay5V
bml0PXY7ay5WaWV3PXk7cS5hanN8fChxLmFqcz17fSk7cS5hanMuUm91dGVyPWt9
KSh3aW5kb3csalF1ZXJ5KTsKCmFqcy5sb2FkZWQoJ3thanN9YWpzLlJvdXRlci5t
aW4nKTsKCi8vIC4vZGF0YS9jb21tb24vanMvYWpzL2Fqcy5Sb3V0ZXIubWluLmpz
IGVuZAoKLy8gLi9kYXRhL2NvbW1vbi9qcy9zdG9yZS9zdG9yZS5taW4uanMgc3Rh
cnQKCmRlZmluZSgnc3RvcmUvc3RvcmUubWluJywgZnVuY3Rpb24oKSB7Cgp2YXIg
ZGVmaW5lID0gbnVsbDsgLy8gRklYTUUKCi8qIENvcHlyaWdodCAoYykgMjAxMC0y
MDEyIE1hcmN1cyBXZXN0aW4gKi8KKGZ1bmN0aW9uKCl7dmFyIGE9e30sZD13aW5k
b3csaT1kLmRvY3VtZW50LGM7YS5kaXNhYmxlZD0hMTthLnNldD1mdW5jdGlvbigp
e307YS5nZXQ9ZnVuY3Rpb24oKXt9O2EucmVtb3ZlPWZ1bmN0aW9uKCl7fTthLmNs
ZWFyPWZ1bmN0aW9uKCl7fTthLnRyYW5zYWN0PWZ1bmN0aW9uKGIsZSxjKXt2YXIg
ZD1hLmdldChiKTtudWxsPT1jJiYoYz1lLGU9bnVsbCk7InVuZGVmaW5lZCI9PXR5
cGVvZiBkJiYoZD1lfHx7fSk7YyhkKTthLnNldChiLGQpfTthLmdldEFsbD1mdW5j
dGlvbigpe307YS5zZXJpYWxpemU9ZnVuY3Rpb24oYil7cmV0dXJuIEpTT04uc3Ry
aW5naWZ5KGIpfTthLmRlc2VyaWFsaXplPWZ1bmN0aW9uKGIpe3JldHVybiJzdHJp
bmciIT10eXBlb2YgYj92b2lkIDA6SlNPTi5wYXJzZShiKX07dmFyIGo7dHJ5e2o9
ImxvY2FsU3RvcmFnZSJpbiBkJiZkLmxvY2FsU3RvcmFnZX1jYXRjaChtKXtqPSEx
fWlmKGopYz1kLmxvY2FsU3RvcmFnZSxhLnNldD1mdW5jdGlvbihiLGUpe2lmKHZv
aWQgMD09PQplKXJldHVybiBhLnJlbW92ZShiKTtjLnNldEl0ZW0oYixhLnNlcmlh
bGl6ZShlKSl9LGEuZ2V0PWZ1bmN0aW9uKGIpe3JldHVybiBhLmRlc2VyaWFsaXpl
KGMuZ2V0SXRlbShiKSl9LGEucmVtb3ZlPWZ1bmN0aW9uKGIpe2MucmVtb3ZlSXRl
bShiKX0sYS5jbGVhcj1mdW5jdGlvbigpe2MuY2xlYXIoKX0sYS5nZXRBbGw9ZnVu
Y3Rpb24oKXtmb3IodmFyIGI9e30sZT0wO2U8Yy5sZW5ndGg7KytlKXt2YXIgZD1j
LmtleShlKTtiW2RdPWEuZ2V0KGQpfXJldHVybiBifTtlbHNle3ZhciBrO3RyeXtr
PSJnbG9iYWxTdG9yYWdlImluIGQmJmQuZ2xvYmFsU3RvcmFnZSYmZC5nbG9iYWxT
dG9yYWdlW2QubG9jYXRpb24uaG9zdG5hbWVdfWNhdGNoKG4pe2s9ITF9aWYoaylj
PWQuZ2xvYmFsU3RvcmFnZVtkLmxvY2F0aW9uLmhvc3RuYW1lXSxhLnNldD1mdW5j
dGlvbihiLGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIGEucmVtb3ZlKGIpO2NbYl09
YS5zZXJpYWxpemUoZSl9LGEuZ2V0PWZ1bmN0aW9uKGIpe3JldHVybiBhLmRlc2Vy
aWFsaXplKGNbYl0mJgpjW2JdLnZhbHVlKX0sYS5yZW1vdmU9ZnVuY3Rpb24oYil7
ZGVsZXRlIGNbYl19LGEuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIGIgaW4gYylk
ZWxldGUgY1tiXX0sYS5nZXRBbGw9ZnVuY3Rpb24oKXtmb3IodmFyIGI9e30sZT0w
O2U8Yy5sZW5ndGg7KytlKXt2YXIgZD1jLmtleShlKTtiW2RdPWEuZ2V0KGQpfXJl
dHVybiBifTtlbHNlIGlmKGkuZG9jdW1lbnRFbGVtZW50LmFkZEJlaGF2aW9yKXt2
YXIgZyxoO3RyeXtoPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpLGgub3Bl
bigpLGgud3JpdGUoJzxzY3JpcHQ+ZG9jdW1lbnQudz13aW5kb3c8XC9zY3JpcHQ+
PGlmcmFtZSBzcmM9Ii9mYXZpY29uLmljbyI+PC9mcmFtZT4nKSxoLmNsb3NlKCks
Zz1oLncuZnJhbWVzWzBdLmRvY3VtZW50LGM9Zy5jcmVhdGVFbGVtZW50KCJkaXYi
KX1jYXRjaChvKXtjPWkuY3JlYXRlRWxlbWVudCgiZGl2IiksZz1pLmJvZHl9dmFy
IGQ9ZnVuY3Rpb24oYil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9CkFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtlLnVuc2hpZnQoYyk7Zy5h
cHBlbmRDaGlsZChjKTtjLmFkZEJlaGF2aW9yKCIjZGVmYXVsdCN1c2VyRGF0YSIp
O2MubG9hZCgibG9jYWxTdG9yYWdlIik7ZT1iLmFwcGx5KGEsZSk7Zy5yZW1vdmVD
aGlsZChjKTtyZXR1cm4gZX19LGw9UmVnRXhwKCJbIVwiIyQlJicoKSorLC9cXFxc
Ojs8PT4/QFtcXF1eYHt8fX5dIiwiZyIpO2Euc2V0PWQoZnVuY3Rpb24oYixlLGMp
e2U9ZS5yZXBsYWNlKGwsIl9fXyIpO2lmKHZvaWQgMD09PWMpcmV0dXJuIGEucmVt
b3ZlKGUpO2Iuc2V0QXR0cmlidXRlKGUsYS5zZXJpYWxpemUoYykpO2Iuc2F2ZSgi
bG9jYWxTdG9yYWdlIil9KTthLmdldD1kKGZ1bmN0aW9uKGIsZSl7ZT1lLnJlcGxh
Y2UobCwiX19fIik7cmV0dXJuIGEuZGVzZXJpYWxpemUoYi5nZXRBdHRyaWJ1dGUo
ZSkpfSk7YS5yZW1vdmU9ZChmdW5jdGlvbihiLGEpe2E9YS5yZXBsYWNlKGwsIl9f
XyIpO2IucmVtb3ZlQXR0cmlidXRlKGEpOwpiLnNhdmUoImxvY2FsU3RvcmFnZSIp
fSk7YS5jbGVhcj1kKGZ1bmN0aW9uKGEpe3ZhciBjPWEuWE1MRG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmF0dHJpYnV0ZXM7YS5sb2FkKCJsb2NhbFN0b3JhZ2UiKTtm
b3IodmFyIGQ9MCxmO2Y9Y1tkXTtkKyspYS5yZW1vdmVBdHRyaWJ1dGUoZi5uYW1l
KTthLnNhdmUoImxvY2FsU3RvcmFnZSIpfSk7YS5nZXRBbGw9ZChmdW5jdGlvbihi
KXt2YXIgYz1iLlhNTERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRyaWJ1dGVz
O2IubG9hZCgibG9jYWxTdG9yYWdlIik7Zm9yKHZhciBiPXt9LGQ9MCxmO2Y9Y1tk
XTsrK2QpYltmXT1hLmdldChmKTtyZXR1cm4gYn0pfX10cnl7YS5zZXQoIl9fc3Rv
cmVqc19fIiwiX19zdG9yZWpzX18iKSwiX19zdG9yZWpzX18iIT1hLmdldCgiX19z
dG9yZWpzX18iKSYmKGEuZGlzYWJsZWQ9ITApLGEucmVtb3ZlKCJfX3N0b3JlanNf
XyIpfWNhdGNoKHApe2M9e30sYS5kaXNhYmxlZD0hMCxhLmdldD1mdW5jdGlvbihh
KXtyZXR1cm4gY1thXX0sCmEuc2V0PWZ1bmN0aW9uKGEsZCl7Y1thXT1kfSxhLnJl
bW92ZT1mdW5jdGlvbihhKXtkZWxldGUgY1thXX0sYS5nZXRBbGw9ZnVuY3Rpb24o
KXtyZXR1cm4gY30sYy5jbGVhcj1mdW5jdGlvbigpe2M9e319fWEuZW5hYmxlZD0h
YS5kaXNhYmxlZDsidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmImZ1bmN0aW9u
IiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1hOiJmdW5jdGlvbiI9PT10
eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShhKTp0aGlzLnN0b3JlPWF9
KSgpOwoKfSk7Ci8vIC4vZGF0YS9jb21tb24vanMvc3RvcmUvc3RvcmUubWluLmpz
IGVuZAoKLy8gLi9kYXRhL2NvbW1vbi9qcy9KaW5uL0ppbm4ubWluLmpzIHN0YXJ0
CgovKiohCiAqIEppbm4gLS0gTm90aWZpY2F0aW9ucyBjZW50ZXIKICogaHR0cHM6
Ly9naXRodWIuY29tL1J1YmFYYS9KaW5uI3JlYWRtZQogKgogKiBAYXV0aG9yCVJ1
YmFYYQk8dHJhc2hAcnViYXhhLm9yZz4KICogQGJ1aWxkCUppbm4uT1MsIEppbm4u
YnViYmxlCiAqIEBleGFtcGxlCiAqCiAqIAlKaW5uCiAqIAkJLmJ1YmJsZSgxMCkK
ICogCQkuc2NvcGUoJ21lbnUnKQogKiAJCQkuYnViYmxlKDUpCiAqIAkJCS5zYXko
eyAuLi4gfSkKICogCQkuc3RvcmUoJ2tleScsICcuLi4nKSAvLyBzZXQKICogCTsK
ICoKICogIC8vIEppbm4uYWNjZXNzIC0tIHNob3VsZCBiZSBpbnZva2VkIG9uIHVz
ZXIgYWN0aW9uCiAqIAlKaW5uLmFjY2VzcyhmdW5jdGlvbiAoKXsKICogCQl2YXIg
bm90aWZ5ID0gSmlubi5zYXkoeyBpY29uOiAnLi4nLCB0aXRsZTogJy4uLicsIHRl
eHQ6ICcuLi4nIH0pOwogKiAJCW5vdGlmeS5vbmNsaWNrID0gZnVuY3Rpb24gKCl7
ICAgfTsKICogCX0pOwogKgogKiAJdmFyIHZhbCA9IEppbm4uc3RvcmUoJ2tleScp
OyAvLyBnZXQKICogCUppbm4uc3RvcmUoJ2tleScsIG51bGwpOyAvLyByZW1vdmUK
ICovCjsoZnVuY3Rpb24ocCxmLGgpe3ZhciBsPWZ1bmN0aW9uKCl7fSxnPWZ1bmN0
aW9uKGIpe3RoaXMuX2FwaT1ifTtmPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dl
ckNhc2UoKTt2YXIgaj17c2NvcGU6Ik9TIn0sbj17fSxhPXt9LGUscSxrPWZ1bmN0
aW9uKCl7cXx8KHE9MSxjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KHQsMTAp
KX0sdD1mdW5jdGlvbigpe3ZhciBiLGMscjtmb3IoYiBpbiBhKXtjPWQuc3RvcmUo
Il9fZXZlbnQuIitiKTtmb3Iocj1hW2JdLmxlbmd0aDtyLS07KWFbYl1bcl0oYyl9
cT0wfTtnLmV4dD1mdW5jdGlvbihiKXt2YXIgYz1mdW5jdGlvbigpe3RoaXMuX19s
ZWdvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYTtsLnByb3RvdHlwZT10aGlzLmZu
O2MucHJvdG90eXBlPWMuZm49bmV3IGw7Yy5leHQ9Zy5leHQ7Yy5tZXRob2RzPWcu
bWV0aG9kcztmb3IoYSBpbiBiKWMuZm5bYV09YlthXTtyZXR1cm4gY307Zy5tZXRo
b2RzPWZ1bmN0aW9uKGIpe2Zvcih2YXIgYyBpbiBiKXRoaXMuZm5bY109CmJbY107
cmV0dXJuIHRoaXN9O2cucHJvdG90eXBlPWcuZm49e0FMTE9XRUQ6MCxOT1RfQUxM
T1dFRDoxLERFTklFRDoyLF9vcHRzOnt9LF9fbGVnbzpsLF9jaGVjazpmdW5jdGlv
bigpe3JldHVybiB0aGlzLkFMTE9XRUR9LF9yZXF1ZXN0OmZ1bmN0aW9uKGIpe2Io
KX0sX2V4dDpmdW5jdGlvbihiKXtmb3IodmFyIGMgaW4gdGhpcy5fb3B0cyliW2Nd
PT09aCYmKGJbY109dGhpcy5fb3B0c1tjXSk7cmV0dXJuIGJ9LG9wdDpmdW5jdGlv
bihiLGMpe3ZhciBhPXRoaXM7aWYoYyE9PWgpYS5fb3B0c1tiXT1jO2Vsc2UgaWYo
Im9iamVjdCI9PXR5cGVvZiBiKWZvcihjIGluIGIpYS5fb3B0c1tjXT1iW2NdO2Vs
c2UgYT1hLl9vcHRzW2JdO3JldHVybiBhfSxhY2Nlc3M6ZnVuY3Rpb24oYil7aWYo
Yil7aWYoIWIuail7dmFyIGM9dGhpcztiLmo9ZnVuY3Rpb24oKXtiLmNhbGwoYyl9
fXRoaXMuaGFzUmlnaHQoKT9iLmooKTp0aGlzLl9yZXF1ZXN0KGIuail9ZWxzZSBy
ZXR1cm4gdGhpcy5fY2hlY2soKX0sCmhhc1JpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuYWNjZXNzKCk9PXRoaXMuQUxMT1dFRH0saGFzQWNjZXNzRGVuaWVkOmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWNjZXNzKCk9PXRoaXMuREVOSUVEfSxhZGQ6
bCxzYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZGQuYXBwbHkodGhpcyxhcmd1
bWVudHMpfSxidWJibGU6ZnVuY3Rpb24oKXt9LGVuZDpmdW5jdGlvbigpe3JldHVy
biBkfX07dmFyIGQ9e0FQSTpnLG9wdDpmdW5jdGlvbihiLGMpe2lmKGM9PT1oKXJl
dHVybiBqW2JdO2pbYl09YztyZXR1cm4gZH0sb246ZnVuY3Rpb24oYixjKXthW2Jd
fHwoYVtiXT1bXSk7YVtiXS5wdXNoKGMpO3JldHVybiBkfSxvZmY6ZnVuY3Rpb24o
YixjKXtpZihiIGluIGEpZm9yKHZhciByPWFbYl0sZT1yLmxlbmd0aDtlLS07KWlm
KHJbZV09PT1jKXtyLnNwbGljZShlLDEpO2JyZWFrfXJldHVybiBkfSxlbWl0OmZ1
bmN0aW9uKGIsYyl7ZC5zdG9yZSgiX19ldmVudC4iK2IsYyk7aygpfSxzY29wZTpm
dW5jdGlvbihiLApjKXt2YXIgYT1kO2lmKGI9PWgpYT1kLnNjb3BlKGouc2NvcGUp
O2Vsc2UgaWYoYyE9PWgpbltiXT1jO2Vsc2UgaWYoYiBpbiBuKWE9bltiXTtlbHNl
IHRocm93J0ppbm46IHNjb3BlICInK2IrJyIgaXMgdW5kZWZpbmVkJztyZXR1cm4g
YX0sYWRkRXZlbnQ6ZnVuY3Rpb24oYixjLGEpe2lmKGIpe3ZhciBkPWIuYWRkRXZl
bnRMaXN0ZW5lcj8iIjoib24iO2JbZD8iYXR0YWNoRXZlbnQiOiJhZGRFdmVudExp
c3RlbmVyIl0oZCtjLGEsITEpfX19LHU9Imhhc1JpZ2h0IGhhc0FjY2Vzc0Rlbmll
ZCBhY2Nlc3MgYnViYmxlIGFkZCBzYXkiLnNwbGl0KCIgIiksdj11Lmxlbmd0aDtm
b3IoO3YtLTspKGZ1bmN0aW9uKGIpe2RbYl09ZnVuY3Rpb24oKXt2YXIgYz1kLnNj
b3BlKCksYT1jW2JdLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gYT09PWM/ZDph
fX0pKHVbdl0pO2Quc3RvcmU9ZnVuY3Rpb24oYixjKXt2YXIgYT1kLGU9ZC5zY29w
ZSgiX19zdG9yZSIpO251bGw9PT1jP2UucmVtb3ZlKCJfX2ppbm4uIisKYik6Yz09
PWg/YT1lLmdldCgiX19qaW5uLiIrYik6ZS5zZXQoIl9famlubi4iK2IsYyk7cmV0
dXJuIGF9O3ZhciBtLHM9e307dHJ5e209cC5sb2NhbFN0b3JhZ2V9Y2F0Y2godyl7
fWQuc2NvcGUoIl9fc3RvcmUiLHtnZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIG0/bS5n
ZXRJdGVtKGIpOnNbYl19LHNldDpmdW5jdGlvbihiLGMpe20/bS5zZXRJdGVtKGIs
Yyk6c1tiXT1jfSxyZW1vdmU6ZnVuY3Rpb24oYil7ZGVsZXRlIHNbYl07bSYmbS5y
ZW1vdmVJdGVtKGIpfX0pO2RbKGYubWF0Y2goL3dlYmtpdC8pfHxmLm1hdGNoKC9v
cGVyYS8pfHxmLm1hdGNoKC9tc2llLyl8fDA+Zi5pbmRleE9mKCJjb21wYXRpYmxl
IikmJmYubWF0Y2goL21vemlsbGEvKXx8W10pWzBdXT0hMDtkLndlYmtpdCYmKGRb
KGYubWF0Y2goL2Nocm9tZS8pfHxmLm1hdGNoKC9zYWZhcmkvKXx8W10pWzBdXT0h
MCk7ZC5hZGRFdmVudChwLCJzdG9yYWdlIixrKTtwLkppbm49ZH0pKHdpbmRvdyxk
b2N1bWVudCk7CihmdW5jdGlvbihwLGYsaCxsKXtwPWguQVBJLmV4dCh7X3RwbDoi
I0ppbm5PU1RwbCIsX29wdHM6e3RpdGxlOiIiLHRleHQ6IiIsZGVsYXk6NjB9LHRw
bDpmdW5jdGlvbihhKXt0aGlzLl90cGw9YTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0
aW9uKGEpeyJzdHJpbmciPT10eXBlb2YgYSYmKGE9e3RpdGxlOmF9KTt0aGlzLl9l
eHQoYSk7dmFyIGU9dGhpcy5fY3JlYXRlKGEpO2Uuc2hvdygpO2EuZGVsYXkmJnNl
dFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNhbmNlbCgpfSwxRTMqYS5kZWxheSk7cmV0
dXJuIGV9fSk7aWYobClwLm1ldGhvZHMoe19jaGVjazpmdW5jdGlvbigpe3JldHVy
biBsLmNoZWNrUGVybWlzc2lvbigpfSxfcmVxdWVzdDpmdW5jdGlvbihhKXtsLnJl
cXVlc3RQZXJtaXNzaW9uKGEpfSxfY3JlYXRlOmZ1bmN0aW9uKGEpe3RyeXthPWwu
Y3JlYXRlTm90aWZpY2F0aW9uKGEuaWNvbixhLnRpdGxlLGEudGV4dCl9Y2F0Y2go
ZSl7dGhyb3ciTm90aWZpY2F0aW9ucy5jcmVhdGVOb3RpZmljYXRpb24gXHUyMDE0
IGFjY2VzcyBkZW5pZWQiOwp9cmV0dXJuIGF9fSk7ZWxzZXt2YXIgZz0vXHtceygu
Kj8pXH1cfS9nLGo9W10sbj1mdW5jdGlvbihhLGUpe2lmKC9eIy8udGVzdChhKSYm
KGE9Zi5nZXRFbGVtZW50QnlJZChhLnN1YnN0cigxKSkpKWE9YS5pbm5lckhUTUw7
YSYmKHRoaXMuZWw9Zi5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsLmlubmVy
SFRNTD1hLnJlcGxhY2UoZyxmdW5jdGlvbihhLGYpe3JldHVybihuZXcgRnVuY3Rp
b24oIm5vdGlmeSx2LHUiLCJ0cnl7dj0iK2YrJ31jYXRjaChlKXt9IHJldHVybiB2
PT09dT8iIjp2JykpKGUpfSksZi5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZWwpKX07
bi5yZWRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIGE9NSxlPTAsZj1qLmxlbmd0aDtl
PGY7ZSsrKWpbZV0uZWwuc3R5bGUudG9wPWErInB4IixhKz1qW2VdLmVsLm9mZnNl
dEhlaWdodCs1fTtuLnByb3RvdHlwZT17c2hvdzpmdW5jdGlvbigpe2lmKHRoaXMu
ZWwpe3ZhciBhPXRoaXMsZT1hLmVsLnN0eWxlO2oucHVzaChhKTsKZS5yaWdodD0i
NXB4IjtlLnBvc2l0aW9uPSJmaXhlZCI7ZS5kaXNwbGF5PSJibG9jayI7bi5yZWRy
YXcoKTthLmVsLm9uY2xpY2s9ZnVuY3Rpb24oKXthLm9uY2xpY2suY2FsbChhLHt0
eXBlOiJjbGljayIsdGFyZ2V0OmEsY3VycmVudFRhcmdldDphfSl9fX0sY2FuY2Vs
OmZ1bmN0aW9uKCl7aWYodGhpcy5lbCl7Zm9yKHZhciBhPTAsZT1qLmxlbmd0aDth
PGU7YSsrKWpbYV09PT10aGlzJiYoai5zcGxpY2UoYSwxKSxuLnJlZHJhdygpKTt0
aGlzLmVsLm9uY2xpY2s9bnVsbDt0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQodGhpcy5lbCk7dGhpcy5lbD1udWxsfX0sb25jbGljazpmdW5jdGlvbigpe319
O3AubWV0aG9kcyh7aGFzUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Rw
bH0sX2NyZWF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IG4odGhpcy5fdHBsLGEp
fX0pfWguc2NvcGUoIk9TIixuZXcgKGguT1M9cCkpfSkod2luZG93LGRvY3VtZW50
LEppbm4sd2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMpOwooZnVuY3Rpb24ocCxm
LGgsbCl7dmFyIGc9ZnVuY3Rpb24oKXt9LGo9LyhefFxzKWljb24oXHN8JCkvLG49
L15kYXRhLyxhLGUscT1udWxsLGs9bmV3IEltYWdlLHQ9MCxkPXt2YWw6cSxmcHM6
MixpY29uWDowLGljb25ZOjAsaWNvblc6MTYsaWNvbkg6MTZ9LHU9ZnVuY3Rpb24o
Yil7Zm9yKHZhciBhPWYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxkPWEu
bGVuZ3RoO2QtLTspaWYoai50ZXN0KGFbZF0uZ2V0QXR0cmlidXRlKCJyZWwiKSkm
JiEwPT09YihhW2RdKSlyZXR1cm4gYVtkXX0sdj1mdW5jdGlvbihjKXtiLmluaXQo
KTt1KGZ1bmN0aW9uKGIpe2IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX0pO3Zh
ciBhPWYuY3JlYXRlRWxlbWVudCgibGluayIpO2EucmVsPSJpY29uIjthLnR5cGU9
ImltYWdlL3BuZyI7YS5ocmVmPWM7Zi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVh
ZCIpWzBdLmFwcGVuZENoaWxkKGEpfSxtPWYuY3JlYXRlRWxlbWVudCgiY2FudmFz
IiksczthOnt0cnl7cz0KISF+bS50b0RhdGFVUkwoImltYWdlL3BuZyIpLmluZGV4
T2YoImRhdGE6aW1hZ2UvcG5nIik7YnJlYWsgYX1jYXRjaCh3KXt9cz12b2lkIDB9
ZC5zaGFwZT1mdW5jdGlvbihiLGEsZCl7dmFyIGU9MTUuNTthPTk5PGE/KGUrPTAu
NSwiOTkrIik6YTtiLmZvbnQ9KGgud2Via2l0PyJib2xkICI6IiIpKyI5cHggYXJp
YWwiO2Iuc2hhZG93T2Zmc2V0WD0wO2Iuc2hhZG93T2Zmc2V0WT0wO2Iuc2hhZG93
Qmx1cj0yO2Iuc2hhZG93Q29sb3I9InJnYmEoMCwwLDAsLjUpIjtiLmZpbGxTdHls
ZT1kPyIjZmMzIjoiI2ZmZiI7Yi50ZXh0QWxpZ249InJpZ2h0IjtiLmZpbGxUZXh0
KGEsZSwxNSk7Yi5maWxsVGV4dChhLGUsMTUpO2IuZmlsbFRleHQoYSxlLDE1KX07
dmFyIGI9e2luaXQ6ZnVuY3Rpb24oKXtiLmluaXQ9ZztiLnJlYWR5PTE7dmFyIGE9
dShmdW5jdGlvbigpe3JldHVybiEwfSk7YSYmKGU9YS5ocmVmLGIub3B0KCJzcmMi
LGQuc3JjfHxlKSl9LHNyYzpmdW5jdGlvbihhKXtyZXR1cm4gYi5vcHQoInNyYyIs
CmEpfSxzaGFwZTpmdW5jdGlvbihhKXtiLm9wdCgic2hhcGUiLGEpO3JldHVybiB0
aGlzfSxvcHQ6ZnVuY3Rpb24oYyxlKXt2YXIgZj1iLnJlYWR5fHxkLnZhbHx8InNo
YXBlIj09YztpZigic3RyaW5nIj09dHlwZW9mIGMpe2lmKGU9PT1sKXJldHVybiBk
W2NdO2RbY109ZX1lbHNlIGZvcih2YXIgaiBpbiBjKWRbal09Y1tqXSxmPWZ8fCJz
aGFwZSI9PWo7ZT1kLnZhbDtpZihmKXt2YXIgZz1lO2lmKHMmJihrLnNyYyE9ZC5z
cmN8fHEhPWcpKWlmKGIuaW5pdCgpLG0ud2lkdGg9bS5oZWlnaHQ9MTYsay5zcmM9
ZC5zcmMsay5vbmxvYWQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dmFyIGE9bS5n
ZXRDb250ZXh0KCIyZCIpO2EuY2xlYXJSZWN0KDAsMCwxNiwxNik7YS5kcmF3SW1h
Z2UoaywwLDAsay53aWR0aCxrLmhlaWdodCxkLmljb25YLGQuaWNvblksZC5pY29u
VyxkLmljb25IKTtkLnNoYXBlKGEsZyx0LGQpO3YobS50b0RhdGFVUkwoKSk7ZC5m
cHM8PSsrdCYmKHQ9MCl9Y2xlYXJJbnRlcnZhbChhKTsKbnVsbD09PWd8fGc9PT1s
fHwhZC5mcHM/dD0wOmE9c2V0SW50ZXJ2YWwoYix+figxRTMvZC5mcHMrMC41KSk7
bnVsbD09PWd8fGc9PT1sP3YoZC5zcmMpOmIoKX0sbi50ZXN0KGsuc3JjKT8oay5j
cm9zc09yaWdpbj1udWxsLGsucmVtb3ZlQXR0cmlidXRlKCJjcm9zc09yaWdpbiIp
KTprLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLGsud2lkdGgpay5vbmxvYWQoKX1l
IT09cSYmaC5lbWl0KCJidWJibGU6dmFsIixlKTtxPWV9LHNldDpmdW5jdGlvbihh
KXtiLmluaXQoKTtiLm9wdCgidmFsIixhKX0scmV2ZXJ0OmZ1bmN0aW9uKCl7Yi5v
cHQoInNyYyIsZSl9LHJlc2V0OmZ1bmN0aW9uKCl7Yi5vcHQoe3NyYzplLHZhbDpu
dWxsfSl9LGNsZWFyOmZ1bmN0aW9uKCl7Yi5vcHQoInZhbCIsbnVsbCl9fTtoLk9T
LkJ1YmJsZT1iO2guc2NvcGUoIk9TIikuYnViYmxlPWZ1bmN0aW9uKGEsZCl7aWYo
Im9iamVjdCI9PXR5cGVvZiBhJiZudWxsIT09YSliLm9wdChhKTtlbHNlIGlmKGEg
aW4gYiliW2FdKGQpOwplbHNlIGIuc2V0KGEpO3JldHVybiBofTtoLm9uKCJidWJi
bGU6dmFsIixmdW5jdGlvbihhKXtiLnNldChhKX0pfSkod2luZG93LGRvY3VtZW50
LEppbm4pOyJ1bmRlZmluZWQiIT09dHlwZW9mIGFqcyYmYWpzLmxvYWRlZCYmYWpz
LmxvYWRlZCgie2ppbm59Smlubi5taW4iKTsiZnVuY3Rpb24iPT09dHlwZW9mIGRl
ZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJKaW5uIixbXSxmdW5jdGlvbigpe3Jl
dHVybiB3aW5kb3cuSmlubnx8e319KTsKCi8vIC4vZGF0YS9jb21tb24vanMvSmlu
bi9KaW5uLm1pbi5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29y
ZS9wbHVnaW5zL2pzUGx1Z2lucy5qcyBzdGFydAoKCi8vIGRhdGEvcnUvaW1hZ2Vz
L2pzL3J1L2pzQ29yZS9qcXVlcnkvZXh0ZW5zaW9ucy5qcyBzdGFydAoKLyoqCiAq
INCd0LXQvtCx0YXQvtC00LjQvNGL0LUg0YDQsNGB0YjQuNGA0LXQvdC40Y8g0LTQ
u9GPIGpRdWVyeQogKiBAYXV0aG9yCSJSdWJhWGEiIDx0cmFzaEBydWJheGEub3Jn
PgogKi8KCgovLyAuL2RhdGEvY29tbW9uL2pzL2pxdWVyeS9qcXVlcnkuZm4uZXh0
LmpzIHN0YXJ0CgovKioKICogalF1ZXJ5IEV4dGVuc2lvbnMKCiAqIEBhdXRob3Ig
QWxleGFuZGVyIEFiYXNoa2luIDxhLmFiYXNoa2luQGNvcnAubWFpbC5ydT4KICog
QGRhdGU6IDEzOjAxIDIzLjEwLjEyCiAqLwoKCihmdW5jdGlvbigpIHsKCS8qKgoJ
ICogJC5mbi50b2dnbGVDbGFzc1NpYmxpbmdzKCkKCSAqIEFkZHMgYSBjbGFzcyBm
b3IgZWFjaCBlbGVtZW50IGluIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cwoJ
ICogYW5kIHJlbW92ZXMgYWxsIHNpYmxpbmdzIChleGNlcHQgYWN0aXZlKQoJICoK
CSAqIFVzZToKCSAqICQoJ2RpdicpLmNsaWNrKGZ1bmN0aW9uKCkgewoJICogIAly
ZXR1cm4gJCh0aGlzKS50b2dnbGVDbGFzc1NpYmxpbmdzKCdmb28nKTsKCSAqIH0p
OwoJICoKCSAqIEBhdXRob3I6IEFsZXhhbmRlciBHdWlubmVzcwoJICogQHBhcmFt
IHtTdHJpbmd9IG5hbWUgLSBjbGFzcyBuYW1lCgkgKiBAcGFyYW0ge09iamVjdCB8
IFN0cmluZ30gc2VsZWN0b3IKCSAqIEBsaWNlbnNlIE1JVAoJICogQHRoaXM6IHtq
UXVlcnl9CgkgKiBAcmV0dXJuOiB7alF1ZXJ5fQoJICogQGRhdGU6IEZyaSBBdWcg
MDUgMTQ6MDI6MDAgMjAxMQoJICoqLwoJJC5mbi50b2dnbGVDbGFzc1NpYmxpbmdz
ID0gZnVuY3Rpb24gKG5hbWUsIHNlbGVjdG9yKSB7CgkJaWYgKG5hbWUpCgkJCXRo
aXMuYWRkQ2xhc3MobmFtZSkuc2libGluZ3Moc2VsZWN0b3IpLnJlbW92ZUNsYXNz
KG5hbWUpOwoJCXJldHVybiB0aGlzOwoJfTsKfSgpKTsKCndpbmRvdy5qc0xvYWRl
ciAmJiBqc0xvYWRlci5sb2FkZWQoJ3tqcXVlcnl9anF1ZXJ5LmZuLmV4dCcsIDEp
OwoKLy8gLi9kYXRhL2NvbW1vbi9qcy9qcXVlcnkvanF1ZXJ5LmZuLmV4dC5qcyBl
bmQKCi8vIC4vZGF0YS9jb21tb24vanMvanF1ZXJ5L2pxdWVyeS5ldmVudC5zcGVj
aWFsLmlucHV0LmpzIHN0YXJ0CgpkZWZpbmUoJ2pxdWVyeS9qcXVlcnkuZXZlbnQu
c3BlY2lhbC5pbnB1dCcsIGZ1bmN0aW9uKCkgewoKLyoqCiAqIGpRdWVyeSBgaW5w
dXRgIHNwZWNpYWwgZXZlbnQgdjEuMQogKgogKiBodHRwOi8vd2hhdHRoZWhlYWRz
YWlkLmNvbS9wcm9qZWN0cy9pbnB1dC1zcGVjaWFsLWV2ZW50CiAqIAogKiAoYykg
MjAxMC0yMDExIEFuZHkgRWFybnNoYXcKICogTUlUIGxpY2Vuc2UKICogd3d3Lm9w
ZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKgogKiBAZWRp
dG9yOiBBbGV4YW5kZXIgQWJhc2hraW4gPGEuYWJhc2hraW5AY29ycC5tYWlsLnJ1
PgoqLwoKKGZ1bmN0aW9uKCQpIHsKCWlmICgnb25pbnB1dCcgaW4gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50KQoJCXJldHVybiAwOwoKCXZhciBpbnB1dCA9ICdpbnB1
dCcsCgoJbnMgPSAnLmlucHV0RXZlbnQgJywKCgkvLyBBIGJ1bmNoIG9mIGRhdGEg
c3RyaW5ncyB0aGF0IHdlIHVzZSByZWd1bGFybHkKCWRhdGFCbmQgPSAnYm91bmQu
aW5wdXRFdmVudCcsCglkYXRhVmFsID0gJ3ZhbHVlLmlucHV0RXZlbnQnLAoJZGF0
YURsZyA9ICdkZWxlZ2F0ZWQuaW5wdXRFdmVudCcsCgoJLy8gU2V0IHVwIG91ciBs
aXN0IG9mIGV2ZW50cwoJYmluZFRvID0gWyd0ZXh0SW5wdXQnLCAncHJvcGVydHlj
aGFuZ2UnLCAncGFzdGUnLCAnY3V0JywgJ2tleWRvd24nLCAnZHJvcCcsICcnXS5q
b2luKG5zKSwKCgkvLyBFdmVudHMgcmVxdWlyZWQgZm9yIGRlbGVnYXRlLCBtb3N0
bHkgZm9yIElFIHN1cHBvcnQKCWRsZ3RUbyA9IFsgJ2ZvY3VzaW4nLCAnbW91c2Vv
dmVyJywgJ2RyYWdzdGFydCcsICcnIF0uam9pbihucyksCgoJLy8gRWxlbWVudHMg
c3VwcG9ydGluZyB0ZXh0IGlucHV0LCBub3QgaW5jbHVkaW5nIGNvbnRlbnRFZGl0
YWJsZQoJc3VwcG9ydGVkID0gewoJCVRFWFRBUkVBOiBudWxsLAoJCUlOUFVUOiAg
ICBudWxsCgl9LAoKCS8vIEV2ZW50cyB0aGF0IGZpcmUgYmVmb3JlIGlucHV0IHZh
bHVlIGlzIHVwZGF0ZWQKCWRlbGF5ID0gewoJCXBhc3RlOiAgICAgbnVsbCwKCQlj
dXQ6ICAgICAgIG51bGwsCgkJa2V5ZG93bjogICBudWxsLAoJCWRyb3A6ICAgICAg
bnVsbCwKCQl0ZXh0SW5wdXQ6IG51bGwKCX0sCgoJdGltZXIgPSBudWxsOwoKCSQu
ZXZlbnQuc3BlY2lhbFtpbnB1dF0gPSB7CgkJc2V0dXA6IGZ1bmN0aW9uKGRhdGEs
IG5hbWVzcGFjZXMsIGhhbmRsZXIpIHsKCQkJdmFyIGJuZENvdW50LAoJCQkJZWxl
bSAgPSB0aGlzLAoJCQkJJGVsZW0gPSAkKHRoaXMpLAoJCQkJdHJpZ2dlcmVkID0g
ZmFsc2U7CgoJCQlpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpCgkJ
CQlyZXR1cm4gLTE7CgoJCQlpZiAoc3VwcG9ydGVkW2VsZW0udGFnTmFtZV0gIT09
IHZvaWQgMCkgewoJCQkJYm5kQ291bnQgPSAkLmRhdGEoZWxlbSwgZGF0YUJuZCkg
fHwgMDsKCgkJCQlpZiAoIWJuZENvdW50KQoJCQkJCSRlbGVtLmJpbmQoYmluZFRv
LCBoYW5kbGVyKTsKCgkJCQkkLmRhdGEoZWxlbSwgZGF0YUJuZCwgKytibmRDb3Vu
dCk7CgkJCQkkLmRhdGEoZWxlbSwgZGF0YVZhbCwgZWxlbS52YWx1ZSk7CgkJCX0K
CQkJZWxzZSB7CgkJCQkkZWxlbS5iaW5kKGRsZ3RUbywgZnVuY3Rpb24gKGUpIHsK
CQkJCQl2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7CgoJCQkJCWlmIChzdXBwb3J0ZWRb
dGFyZ2V0LnRhZ05hbWVdICE9PSB2b2lkIDAgJiYgISQuZGF0YShlbGVtLCBkYXRh
RGxnKSkgewoJCQkJCQlibmRDb3VudCA9ICQuZGF0YSh0YXJnZXQsIGRhdGFCbmQp
IHx8IDA7CgoJCQkJCQlpZiAoIWJuZENvdW50KQoJCQkJCQkJJCh0YXJnZXQpLmJp
bmQoYmluZFRvLCBoYW5kbGVyKTsKCgkJCQkJCS8vIG1ha2Ugc3VyZSB3ZSBpbmNy
ZWFzZSB0aGUgY291bnQgb25seSBvbmNlIGZvciBlYWNoIGJvdW5kIGFuY2VzdG9y
CgkJCQkJCSQuZGF0YShlbGVtLCAgIGRhdGFEbGcsIHRydWUpOwoJCQkJCQkkLmRh
dGEodGFyZ2V0LCBkYXRhQm5kLCArK2JuZENvdW50KTsKCQkJCQkJJC5kYXRhKHRh
cmdldCwgZGF0YVZhbCwgdGFyZ2V0LnZhbHVlKTsKCQkJCQl9CgkJCQl9KTsKCQkJ
fQoJCQlmdW5jdGlvbiBoYW5kbGVyIChlKSB7CgoJCQkJdmFyIGVsZW0gPSBlLnRh
cmdldDsKCgkJCQkvLyBDbGVhciBwcmV2aW91cyB0aW1lcnMgYmVjYXVzZSB3ZSBv
bmx5IG5lZWQgdG8ga25vdyBhYm91dCAxIGNoYW5nZQoJCQkJd2luZG93LmNsZWFy
VGltZW91dCh0aW1lciksIHRpbWVyID0gbnVsbDsKCgkJCQkvLyBSZXR1cm4gaWYg
d2UndmUgYWxyZWFkeSB0cmlnZ2VyZWQgdGhlIGV2ZW50CgkJCQlpZiAodHJpZ2dl
cmVkKQoJCQkJCXJldHVybjsKCgkJCQkvLyBwYXN0ZSwgY3V0LCBrZXlkb3duIGFu
ZCBkcm9wIGFsbCBmaXJlIGJlZm9yZSB0aGUgdmFsdWUgaXMgdXBkYXRlZAoJCQkJ
aWYgKGRlbGF5W2UudHlwZV0gIT09IHZvaWQgMCAmJiAhdGltZXIpIHsKCQkJCQkv
LyAuLi5zbyB3ZSBuZWVkIHRvIGRlbGF5IHRoZW0gdW50aWwgYWZ0ZXIgdGhlIGV2
ZW50IGhhcyBmaXJlZAoJCQkJCXRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVu
Y3Rpb24gKCkgewoJCQkJCQlpZiAoZWxlbS52YWx1ZSAhPT0gJC5kYXRhKGVsZW0s
IGRhdGFWYWwpKSB7CgkJCQkJCQkkKGVsZW0pLnRyaWdnZXIoaW5wdXQpOwoJCQkJ
CQkJJC5kYXRhKGVsZW0sIGRhdGFWYWwsIGVsZW0udmFsdWUpOwoJCQkJCQl9CgkJ
CQkJfSwgMCk7CgkJCQl9CgkJCQllbHNlIGlmIChlLnR5cGUgPT0gJ3Byb3BlcnR5
Y2hhbmdlJykgewoJCQkJCWlmIChlLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1l
ID09ICd2YWx1ZScpIHsKCQkJCQkJJChlbGVtKS50cmlnZ2VyKGlucHV0KTsKCQkJ
CQkJJC5kYXRhKGVsZW0sIGRhdGFWYWwsIGVsZW0udmFsdWUpOwoJCQkJCQl0cmln
Z2VyZWQgPSB0cnVlOwoKCQkJCQkJd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24g
KCkgewoJCQkJCQkJdHJpZ2dlcmVkID0gZmFsc2U7CgkJCQkJCX0sIDApOwoJCQkJ
CX0KCQkJCX0KCQkJCWVsc2UgewoJCQkJCSQoZWxlbSkudHJpZ2dlcihpbnB1dCk7
CgkJCQkJJC5kYXRhKGVsZW0sIGRhdGFWYWwsIGVsZW0udmFsdWUpOwoJCQkJCXRy
aWdnZXJlZCA9IHRydWU7CgoJCQkJCXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9u
ICgpIHsKCQkJCQkJdHJpZ2dlcmVkID0gZmFsc2U7CgkJCQkJfSwgMCk7CgkJCQl9
CgkJCX0KCQl9LAoJCXRlYXJkb3duOiBmdW5jdGlvbiAoKSB7CgkJCXZhciBlbGVt
ID0gJCh0aGlzKSwgYm5kQ291bnQ7CgoJCQllbGVtLnVuYmluZChkbGd0VG8pOwoK
CQkJZWxlbS5maW5kKCdpbnB1dCwgdGV4dGFyZWEnKS5hbmRTZWxmKCkuZWFjaChm
dW5jdGlvbiAoKSB7CgkJCQlibmRDb3VudCA9ICQuZGF0YSh0aGlzLCBkYXRhQm5k
LCAoJC5kYXRhKHRoaXMsIGRhdGFCbmQpIHx8IDEpIC0gMSk7CgoJCQkJaWYgKCFi
bmRDb3VudCkKCQkJCQllbGVtLnVuYmluZChiaW5kVG8pOwoJCQl9KTsKCQl9Cgl9
Owp9KShqUXVlcnkpOwoKfSk7Ci8vIC4vZGF0YS9jb21tb24vanMvanF1ZXJ5L2px
dWVyeS5ldmVudC5zcGVjaWFsLmlucHV0LmpzIGVuZAoKLy8gLi9kYXRhL2NvbW1v
bi9qcy9qcXVlcnkvanF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMgc3RhcnQKCmRl
ZmluZSgnanF1ZXJ5L2pxdWVyeS5pZnJhbWUtdHJhbnNwb3J0JywgZnVuY3Rpb24o
KSB7CgovKgogKiBqUXVlcnkgSWZyYW1lIFRyYW5zcG9ydCBQbHVnaW4gMS41CiAq
IGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZAog
KgogKiBDb3B5cmlnaHQgMjAxMSwgU2ViYXN0aWFuIFRzY2hhbgogKiBodHRwczov
L2JsdWVpbXAubmV0CiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5z
ZToKICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKICov
CgovKmpzbGludCB1bnBhcmFtOiB0cnVlLCBub21lbjogdHJ1ZSAqLwovKmdsb2Jh
bCBkZWZpbmUsIHdpbmRvdywgZG9jdW1lbnQgKi8KCihmdW5jdGlvbiAoJCkgewoJ
J3VzZSBzdHJpY3QnOwoKCS8vIEhlbHBlciB2YXJpYWJsZSB0byBjcmVhdGUgdW5p
cXVlIG5hbWVzIGZvciB0aGUgdHJhbnNwb3J0IGlmcmFtZXM6Cgl2YXIgY291bnRl
ciA9IDA7CgoJLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgYWNjZXB0cyB0aHJlZSBh
ZGRpdGlvbmFsIG9wdGlvbnM6CgkvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVl
cnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkcwoJLy8gb3B0aW9ucy5w
YXJhbU5hbWU6IHRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBk
YXRhLAoJLy8gIG92ZXJyaWRlcyB0aGUgbmFtZSBwcm9wZXJ0eSBvZiB0aGUgZmls
ZSBpbnB1dCBmaWVsZChzKSwKCS8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJy
YXkgb2Ygc3RyaW5ncy4KCS8vIG9wdGlvbnMuZm9ybURhdGE6IGFuIGFycmF5IG9m
IG9iamVjdHMgd2l0aCBuYW1lIGFuZCB2YWx1ZSBwcm9wZXJ0aWVzLAoJLy8gIGVx
dWl2YWxlbnQgdG8gdGhlIHJldHVybiBkYXRhIG9mIC5zZXJpYWxpemVBcnJheSgp
LCBlLmcuOgoJLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYics
IHZhbHVlOiAyfV0KCSQuYWpheFRyYW5zcG9ydCgnaWZyYW1lJywgZnVuY3Rpb24g
KG9wdGlvbnMpIHsKCQlpZiAob3B0aW9ucy5hc3luYyAmJiAob3B0aW9ucy50eXBl
ID09PSAnUE9TVCcgfHwgb3B0aW9ucy50eXBlID09PSAnR0VUJykpCgkJewoJCQl2
YXIgZm9ybSwgaWZyYW1lOwoKCQkJcmV0dXJuIHsKCQkJCXNlbmQ6IGZ1bmN0aW9u
IChfLCBjb21wbGV0ZUNhbGxiYWNrKSB7CgkJCQkJZm9ybSA9ICQoJzxmb3JtIHN0
eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2Zvcm0+Jyk7CgkJCQkJZm9ybS5hdHRyKCdh
Y2NlcHQtY2hhcnNldCcsIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQpOwoJCQkJ
CS8vIGphdmFzY3JpcHQ6ZmFsc2UgYXMgaW5pdGlhbCBpZnJhbWUgc3JjCgkJCQkJ
Ly8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LgoJCQkJ
CS8vIElFIHZlcnNpb25zIGJlbG93IElFOCBjYW5ub3Qgc2V0IHRoZSBuYW1lIHBy
b3BlcnR5IG9mCgkJCQkJLy8gZWxlbWVudHMgdGhhdCBoYXZlIGFscmVhZHkgYmVl
biBhZGRlZCB0byB0aGUgRE9NLAoJCQkJCS8vIHNvIHdlIHNldCB0aGUgbmFtZSBh
bG9uZyB3aXRoIHRoZSBpZnJhbWUgSFRNTCBtYXJrdXA6CgkJCQkJaWZyYW1lID0g
JCgKCQkJCQkJJzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OmZhbHNlOyIgbmFtZT0i
aWZyYW1lLXRyYW5zcG9ydC0nICsKCQkJCQkJCShjb3VudGVyICs9IDEpICsgJyI+
PC9pZnJhbWU+JwoJCQkJCSk7CgoJCQkJCWlmcmFtZS5iaW5kKCdsb2FkJywgZnVu
Y3Rpb24gKCkgewoKLyoKCQkJCQkJaWZyYW1lLmJpbmQoJ3JlYWR5c3RhdGVjaGFu
Z2UnLCBmdW5jdGlvbigpIHsKCQkJCQkJCXZhciBzdGF0ZSA9IGlmcmFtZVswXS5y
ZWFkeVN0YXRlOwoKCQkJCQkJCS8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5v
cmcvc2hvd19idWcuY2dpP2lkPTc3NjUyOQoJCQkJCQkJaWYgKHN0YXRlID09ICds
b2FkZWQnIHx8IHN0YXRlID09ICdjb21wbGV0ZScgfHwgc3RhdGUgPT0gJ2ludGVy
YWN0aXZlJykgewoKCQkJCQkJCQlhbGVydChpZnJhbWUuY29udGVudHMoKS5maW5k
KCdib2R5JykudGV4dCgpKTsKCgkJCQkJCQkJLy9pZnJhbWVbMF0ub25yZWFkeXN0
YXRlY2hhbmdlID0gbnVsbDsKCQkJCQkJCSB9CgkJCQkJCX0pOwoqLwoKCgkJCQkJ
CXZhciBmaWxlSW5wdXRDbG9uZXMsCgkJCQkJCQlwYXJhbU5hbWVzID0gJC5pc0Fy
cmF5KG9wdGlvbnMucGFyYW1OYW1lKSA/IG9wdGlvbnMucGFyYW1OYW1lIDogW29w
dGlvbnMucGFyYW1OYW1lXTsKCgkJCQkJCWlmcmFtZQoJCQkJCQkJLnVuYmluZCgn
bG9hZCcpCgkJCQkJCQkuYmluZCgnbG9hZCcsIGZ1bmN0aW9uICgpIHsKCQkJCQkJ
CQkvL2lmcmFtZVswXS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgIT0gJ2Fi
b3V0OmJsYW5rCgoJCQkJCQkJCXZhciByZXNwb25zZTsKCQkJCQkJCQkvLyBXcmFw
IGluIGEgdHJ5L2NhdGNoIGJsb2NrIHRvIGNhdGNoIGV4Y2VwdGlvbnMgdGhyb3du
CgkJCQkJCQkJLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBp
ZnJhbWUgY29udGVudHM6CgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJcmVzcG9uc2Ug
PSBpZnJhbWUuY29udGVudHMoKTsKCQkJCQkJCQkJLy8gR29vZ2xlIENocm9tZSBh
bmQgRmlyZWZveCBkbyBub3QgdGhyb3cgYW4KCQkJCQkJCQkJLy8gZXhjZXB0aW9u
IHdoZW4gY2FsbGluZyBpZnJhbWUuY29udGVudHMoKSBvbgoJCQkJCQkJCQkvLyBj
cm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZToK
CQkJCQkJCQkJaWYgKCFyZXNwb25zZS5sZW5ndGggfHwgIXJlc3BvbnNlWzBdLmZp
cnN0Q2hpbGQpIHsKCQkJCQkJCQkJCXRocm93IG5ldyBFcnJvcigpOwoJCQkJCQkJ
CQl9CgkJCQkJCQkJfSBjYXRjaCAoZSkgewoJCQkJCQkJCQlyZXNwb25zZSA9IHVu
ZGVmaW5lZDsKCQkJCQkJCQl9CgoJCQkJCQkJCS8vIFRoZSBjb21wbGV0ZSBjYWxs
YmFjayByZXR1cm5zIHRoZQoJCQkJCQkJCS8vIGlmcmFtZSBjb250ZW50IGRvY3Vt
ZW50IGFzIHJlc3BvbnNlIG9iamVjdDoKCQkJCQkJCQljb21wbGV0ZUNhbGxiYWNr
KDIwMCwgJ3N1Y2Nlc3MnLCB7J2lmcmFtZSc6IHJlc3BvbnNlfSk7CgoJCQkJCQkJ
CS8vIEZpeCBmb3IgSUUgZW5kbGVzcyBwcm9ncmVzcyBiYXIgYWN0aXZpdHkgYnVn
CgkJCQkJCQkJLy8gKGhhcHBlbnMgb24gZm9ybSBzdWJtaXRzIHRvIGlmcmFtZSB0
YXJnZXRzKToKCQkJCQkJCQkkKCc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDpmYWxz
ZTsiPjwvaWZyYW1lPicpLmFwcGVuZFRvKGZvcm0pOwoJCQkJCQkJCWZvcm0ucmVt
b3ZlKCk7CgkJCQkJCQl9KTsKCgkJCQkJCWZvcm0KCQkJCQkJCS5hdHRyKHsKCQkJ
CQkJCQl0YXJnZXQ6IGlmcmFtZS5hdHRyKCduYW1lJyksCgkJCQkJCQkJYWN0aW9u
OiBvcHRpb25zLnVybCwKCQkJCQkJCQltZXRob2Q6IG9wdGlvbnMudHlwZQoJCQkJ
CQkJfSkKCgkJCQkJCWlmIChvcHRpb25zLmZvcm1EYXRhKSB7CgkJCQkJCQl2YXIg
aW5wdXRzID0gJyc7CgoJCQkJCQkJLy8gU2V0IHBhcmFtcwoJCQkJCQkJJC5lYWNo
KG9wdGlvbnMuZm9ybURhdGEgfHwge30sIGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7
CgkJCQkJCQkJaW5wdXRzICs9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIn
ICsgbmFtZSArICciICB2YWx1ZT0iJyArIHZhbHVlICsgJyIgLz4nOwoJCQkJCQkJ
fSk7CgoJCQkJCQkJJChpbnB1dHMpLmFwcGVuZFRvKGZvcm0pOwoJCQkJCQl9CgoJ
CQkJCQlpZiAob3B0aW9ucy5maWxlSW5wdXQgJiYgb3B0aW9ucy5maWxlSW5wdXQu
bGVuZ3RoICYmIG9wdGlvbnMudHlwZSA9PT0gJ1BPU1QnKQoJCQkJCQl7CgkJCQkJ
CQlmaWxlSW5wdXRDbG9uZXMgPSBvcHRpb25zLmZpbGVJbnB1dC5jbG9uZSgpOwoJ
CQkJCQkJLy8gSW5zZXJ0IGEgY2xvbmUgZm9yIGVhY2ggZmlsZSBpbnB1dCBmaWVs
ZDoKCQkJCQkJCW9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRl
eCkgewoJCQkJCQkJCXJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdOwoJCQkJ
CQkJfSk7CgoJCQkJCQkJaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7CgkJCQkJCQkJ
b3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHsKCQkJCQkJ
CQkJJCh0aGlzKS5hdHRyKCduYW1lJywgcGFyYW1OYW1lc1tpbmRleF0gfHwgb3B0
aW9ucy5wYXJhbU5hbWUpOwoJCQkJCQkJCX0pOwoJCQkJCQkJfQoJCQkJCQkJLy8g
QXBwZW5kaW5nIHRoZSBmaWxlIGlucHV0IGZpZWxkcyB0byB0aGUgaGlkZGVuIGZv
cm0KCQkJCQkJCS8vIHJlbW92ZXMgdGhlbSBmcm9tIHRoZWlyIG9yaWdpbmFsIGxv
Y2F0aW9uOgoJCQkJCQkJZm9ybQoJCQkJCQkJCS5hcHBlbmQob3B0aW9ucy5maWxl
SW5wdXQpCgkJCQkJCQkJLmF0dHIoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0t
ZGF0YScpCgkJCQkJCQkJLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGlu
ZyBmb3IgSUU6CgkJCQkJCQkJLmF0dHIoJ2VuY29kaW5nJywgJ211bHRpcGFydC9m
b3JtLWRhdGEnKTsKCQkJCQkJfQoJCQkJCQlmb3JtLnN1Ym1pdCgpOwoJCQkJCQkv
LyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFs
IGxvY2F0aW9uCgkJCQkJCS8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGgg
dGhlIG9yaWdpbmFsczoKCQkJCQkJaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxl
SW5wdXRDbG9uZXMubGVuZ3RoKSB7CgkJCQkJCQlvcHRpb25zLmZpbGVJbnB1dC5l
YWNoKGZ1bmN0aW9uIChpbmRleCwgaW5wdXQpIHsKCQkJCQkJCQl2YXIgY2xvbmUg
PSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pOwoJCQkJCQkJCSQoaW5wdXQpLmF0
dHIoJ25hbWUnLCBjbG9uZS5hdHRyKCduYW1lJykpOwoJCQkJCQkJCWNsb25lLnJl
cGxhY2VXaXRoKGlucHV0KTsKCQkJCQkJCX0pOwoJCQkJCQl9CgkJCQkJfSk7CgkJ
CQkJZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTsK
CQkJCX0sCgkJCQlhYm9ydDogZnVuY3Rpb24gKCkgewoJCQkJCWlmIChpZnJhbWUp
IHsKCQkJCQkJLy8gamF2YXNjcmlwdDpmYWxzZSBhcyBpZnJhbWUgc3JjIGFib3J0
cyB0aGUgcmVxdWVzdAoJCQkJCQkvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1
cHMgb24gSFRUUFMgaW4gSUU2LgoJCQkJCQkvLyBjb25jYXQgaXMgdXNlZCB0byBh
dm9pZCB0aGUgIlNjcmlwdCBVUkwiIEpTTGludCBlcnJvcjoKCQkJCQkJaWZyYW1l
CgkJCQkJCQkudW5iaW5kKCdsb2FkJykKCQkJCQkJCS5hdHRyKCdzcmMnLCAnamF2
YXNjcmlwdCcuY29uY2F0KCc6ZmFsc2U7JykpOwoJCQkJCX0KCQkJCQlpZiAoZm9y
bSkgewoJCQkJCQlmb3JtLnJlbW92ZSgpOwoJCQkJCX0KCQkJCX0KCQkJfTsKCQl9
Cgl9KTsKCgkvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJh
bWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS4KCS8vIFRoZSBmb2xsb3dp
bmcgYWRkcyBjb252ZXJ0ZXJzIGZyb20gaWZyYW1lIHRvIHRleHQsIGpzb24sIGh0
bWwsIGFuZCBzY3JpcHQ6CgkkLmFqYXhTZXR1cCh7CgkJY29udmVydGVyczogewoJ
CQknaWZyYW1lIHRleHQnOiBmdW5jdGlvbiAoaWZyYW1lKSB7CgkJCQlyZXR1cm4g
JChpZnJhbWVbMF0uYm9keSkudGV4dCgpOwoJCQl9LAoJCQknaWZyYW1lIGpzb24n
OiBmdW5jdGlvbiAoaWZyYW1lKSB7CgkJCQlyZXR1cm4gJC5wYXJzZUpTT04oJChp
ZnJhbWVbMF0uYm9keSkudGV4dCgpKTsKCQkJfSwKCgkJCS8vIENvbnRlbnQtVHlw
ZTogdGV4dC9qYXZhc3JpcHQKCQkJJ2lmcmFtZSBqc29ucCc6IGZ1bmN0aW9uIChp
ZnJhbWUpIHsKCQkJCXZhciBtYXRjaCA9ICQoaWZyYW1lWzBdLmJvZHkpLnRleHQo
KS5tYXRjaCgvXltcd1xkLV0qXCgoXHsuKlx9KVwpJC8pOwoKCQkJCWlmIChtYXRj
aCkKCQkJCQlyZXR1cm4gJC5wYXJzZUpTT04obWF0Y2hbMV0pOwoJCQl9LAoJCQkn
aWZyYW1lIGh0bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7CgkJCQlyZXR1cm4gJChp
ZnJhbWVbMF0uYm9keSkuaHRtbCgpOwoJCQl9LAoJCQknaWZyYW1lIHNjcmlwdCc6
IGZ1bmN0aW9uIChpZnJhbWUpIHsKCQkJCXJldHVybiAkLmdsb2JhbEV2YWwoJChp
ZnJhbWVbMF0uYm9keSkudGV4dCgpKTsKCQkJfQoJCX0KCX0pOwp9KGpRdWVyeSkp
OwoKfSk7CgovLyAuL2RhdGEvY29tbW9uL2pzL2pxdWVyeS9qcXVlcnkuaWZyYW1l
LXRyYW5zcG9ydC5qcyBlbmQKCi8vIC4vZGF0YS9jb21tb24vanMvanF1ZXJ5L2px
dWVyeS5wbGFjZWhvbGRlci5qcyBzdGFydAoKZGVmaW5lKCdqcXVlcnkvanF1ZXJ5
LnBsYWNlaG9sZGVyJywgZnVuY3Rpb24oKQp7CgkvKgoJKiBQbGFjZWhvbGRlciBw
bHVnaW4gZm9yIGpRdWVyeQoJKiAtLS0KCSogQ29weXJpZ2h0IDIwMTAsIERhbmll
bCBTdG9ja3MgKGh0dHA6Ly93ZWJjbG91ZC5zZSkKCSogUmVsZWFzZWQgdW5kZXIg
dGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgoJKi8KCShmdW5jdGlvbigk
KSB7CgkJZnVuY3Rpb24gUGxhY2Vob2xkZXIoaW5wdXQpIHsKCQkJdGhpcy5pbnB1
dCA9IGlucHV0OwoJCQlpZiAoaW5wdXQuYXR0cigndHlwZScpID09ICdwYXNzd29y
ZCcpIHsKCQkJCXRoaXMuaGFuZGxlUGFzc3dvcmQoKTsKCQkJfQoJCQkvLyBQcmV2
ZW50IHBsYWNlaG9sZGVyIHZhbHVlcyBmcm9tIHN1Ym1pdHRpbmcKCQkJJChpbnB1
dFswXS5mb3JtKS5zdWJtaXQoZnVuY3Rpb24oKSB7CgkJCQlpZiAoaW5wdXQuaGFz
Q2xhc3MoJ3BsYWNlaG9sZGVyJykgJiYgaW5wdXRbMF0udmFsdWUgPT0gaW5wdXQu
YXR0cigncGxhY2Vob2xkZXInKSkgewoJCQkJCWlucHV0WzBdLnZhbHVlID0gJyc7
CgkJCQl9CgkJCX0pOwoJCX0KCgkJUGxhY2Vob2xkZXIucHJvdG90eXBlID0gewoJ
CQlzaG93IDogZnVuY3Rpb24obG9hZGluZykgewoJCQkJLy8gRkYgYW5kIElFIHNh
dmVzIHZhbHVlcyB3aGVuIHlvdSByZWZyZXNoIHRoZSBwYWdlLiBJZiB0aGUgdXNl
ciByZWZyZXNoZXMgdGhlIHBhZ2Ugd2l0aAoJCQkJLy8gdGhlIHBsYWNlaG9sZGVy
cyBzaG93aW5nIHRoZXkgd2lsbCBiZSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHRo
ZSBpbnB1dCBmaWVsZHMgd29uJ3QgYmUgZW1wdHkuCgkJCQlpZiAodGhpcy5pbnB1
dFswXS52YWx1ZSA9PT0gJycgfHwgKGxvYWRpbmcgJiYgdGhpcy52YWx1ZUlzUGxh
Y2Vob2xkZXIoKSkpIHsKCQkJCQlpZiAodGhpcy5pc1Bhc3N3b3JkKSB7CgkJCQkJ
CXRyeSB7CgkJCQkJCQl0aGlzLmlucHV0WzBdLnNldEF0dHJpYnV0ZSgndHlwZScs
ICd0ZXh0Jyk7CgkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCXRoaXMuaW5wdXQu
YmVmb3JlKHRoaXMuZmFrZVBhc3N3b3JkLnNob3coKSkuaGlkZSgpOwoJCQkJCQl9
CgkJCQkJfQoJCQkJCXRoaXMuaW5wdXQuYWRkQ2xhc3MoJ3BsYWNlaG9sZGVyJyk7
CgkJCQkJdGhpcy5pbnB1dFswXS52YWx1ZSA9IHRoaXMuaW5wdXQuYXR0cigncGxh
Y2Vob2xkZXInKTsKCQkJCX0KCQkJfSwKCgkJCWhpZGUgOiBmdW5jdGlvbigpIHsK
CQkJCWlmICh0aGlzLnZhbHVlSXNQbGFjZWhvbGRlcigpICYmIHRoaXMuaW5wdXQu
aGFzQ2xhc3MoJ3BsYWNlaG9sZGVyJykpIHsKCQkJCQl0aGlzLmlucHV0LnJlbW92
ZUNsYXNzKCdwbGFjZWhvbGRlcicpOwoJCQkJCXRoaXMuaW5wdXRbMF0udmFsdWUg
PSAnJzsKCQkJCQlpZiAodGhpcy5pc1Bhc3N3b3JkKSB7CgkJCQkJCXRyeSB7CgkJ
CQkJCQl0aGlzLmlucHV0WzBdLnNldEF0dHJpYnV0ZSgndHlwZScsICdwYXNzd29y
ZCcpOwoJCQkJCQl9IGNhdGNoIChlKSB7IH0KCQkJCQkJLy8gUmVzdG9yZSBmb2N1
cyBmb3IgT3BlcmEgYW5kIElFCgkJCQkJCXRoaXMuaW5wdXQuc2hvdygpOwoJCQkJ
CQl0aGlzLmlucHV0WzBdLmZvY3VzKCk7CgkJCQkJfQoJCQkJfQoJCQl9LAoKCQkJ
dmFsdWVJc1BsYWNlaG9sZGVyIDogZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gdGhp
cy5pbnB1dFswXS52YWx1ZSA9PSB0aGlzLmlucHV0LmF0dHIoJ3BsYWNlaG9sZGVy
Jyk7CgkJCX0sCgoJCQloYW5kbGVQYXNzd29yZDogZnVuY3Rpb24oKSB7CgkJCQl2
YXIgaW5wdXQgPSB0aGlzLmlucHV0OwoJCQkJaW5wdXQuYXR0cigncmVhbFR5cGUn
LCAncGFzc3dvcmQnKTsKCQkJCXRoaXMuaXNQYXNzd29yZCA9IHRydWU7CgkJCQkv
LyBJRSA8IDkgZG9lc24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgdHlwZSBvZiBwYXNz
d29yZCBpbnB1dHMKCQkJCWlmICgkLmJyb3dzZXIubXNpZSAmJiBpbnB1dFswXS5v
dXRlckhUTUwpIHsKCQkJCQl2YXIgZmFrZUhUTUwgPSAkKGlucHV0WzBdLm91dGVy
SFRNTC5yZXBsYWNlKC90eXBlPShbJyJdKT9wYXNzd29yZFwxL2dpLCAndHlwZT0k
MXRleHQkMScpKTsKCQkJCQl0aGlzLmZha2VQYXNzd29yZCA9IGZha2VIVE1MLnZh
bChpbnB1dC5hdHRyKCdwbGFjZWhvbGRlcicpKS5hZGRDbGFzcygncGxhY2Vob2xk
ZXInKS5mb2N1cyhmdW5jdGlvbigpIHsKCQkJCQkJaW5wdXQudHJpZ2dlcignZm9j
dXMnKTsKCQkJCQkJJCh0aGlzKS5oaWRlKCk7CgkJCQkJfSk7CgkJCQkJJChpbnB1
dFswXS5mb3JtKS5zdWJtaXQoZnVuY3Rpb24oKSB7CgkJCQkJCWZha2VIVE1MLnJl
bW92ZSgpOwoJCQkJCQlpbnB1dC5zaG93KCkKCQkJCQl9KTsKCQkJCX0KCQkJfQoJ
CX07CgoJCXZhciBOQVRJVkVfU1VQUE9SVCA9ICEhKCJwbGFjZWhvbGRlciIgaW4g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlucHV0IiApKTsKCgkJJC5mbi5wbGFj
ZWhvbGRlciA9IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gTkFUSVZFX1NVUFBPUlQg
PyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdmFyIGlucHV0ID0g
JCh0aGlzKTsKCQkJCXZhciBwbGFjZWhvbGRlciA9IG5ldyBQbGFjZWhvbGRlcihp
bnB1dCk7CgkJCQlwbGFjZWhvbGRlci5zaG93KHRydWUpOwoJCQkJaW5wdXQuZm9j
dXMoZnVuY3Rpb24oKSB7CgkJCQkJcGxhY2Vob2xkZXIuaGlkZSgpOwoJCQkJfSk7
CgkJCQlpbnB1dC5ibHVyKGZ1bmN0aW9uKCkgewoJCQkJCXBsYWNlaG9sZGVyLnNo
b3coZmFsc2UpOwoJCQkJfSk7CgoJCQkJLy8gT24gcGFnZSByZWZyZXNoLCBJRSBk
b2Vzbid0IHJlLXBvcHVsYXRlIHVzZXIgaW5wdXQKCQkJCS8vIHVudGlsIHRoZSB3
aW5kb3cub25sb2FkIGV2ZW50IGlzIGZpcmVkLgoJCQkJaWYgKCQuYnJvd3Nlci5t
c2llKSB7CgkJCQkJJCh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7CgkJCQkJCWlm
KGlucHV0LnZhbCgpKSB7CgkJCQkJCQlpbnB1dC5yZW1vdmVDbGFzcygicGxhY2Vo
b2xkZXIiKTsKCQkJCQkJfQoJCQkJCQlwbGFjZWhvbGRlci5zaG93KHRydWUpOwoJ
CQkJCX0pOwoJCQkJCS8vIFdoYXQncyBldmVuIHdvcnNlLCB0aGUgdGV4dCBjdXJz
b3IgZGlzYXBwZWFycwoJCQkJCS8vIHdoZW4gdGFiYmluZyBiZXR3ZWVuIHRleHQg
aW5wdXRzLCBoZXJlJ3MgYSBmaXgKCQkJCQlpbnB1dC5mb2N1cyhmdW5jdGlvbigp
IHsKCQkJCQkJaWYodGhpcy52YWx1ZSA9PSAiIikgewoJCQkJCQkJdmFyIHJhbmdl
ID0gdGhpcy5jcmVhdGVUZXh0UmFuZ2UoKTsKCQkJCQkJCXJhbmdlLmNvbGxhcHNl
KHRydWUpOwoJCQkJCQkJcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCAwKTsK
CQkJCQkJCXJhbmdlLnNlbGVjdCgpOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQl9CgkJ
CX0pOwoJCX0KCX0pKGpRdWVyeSk7Cn0pOwoKLy8gLi9kYXRhL2NvbW1vbi9qcy9q
cXVlcnkvanF1ZXJ5LnBsYWNlaG9sZGVyLmpzIGVuZAoKKGZ1bmN0aW9uICgkKSB7
CgkJJC5icm93c2VyLmludFZlcnNpb24gPSBwYXJzZUludCgkLmJyb3dzZXIudmVy
c2lvbiwgMTApOwoKCQkkLmVhY2goJC5icm93c2VyLCBmdW5jdGlvbiAobmFtZSwg
dmFsKSB7CgkJCWlmICh+J3dlYmtpdCBvcGVyYSBtb3ppbGxhIG1zaWUnLmluZGV4
T2YobmFtZSkgJiYgdmFsICkgewoJCQkJJC5icm93c2VyLm5hbWUgPSBuYW1lOwoJ
CQl9CgkJfSk7CgoJCWlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVy
YSAoTWluaXxNb2JpKVteO10qLykpIHsKCQkJJC5icm93c2VyWydvcGVyYScgKyBS
ZWdFeHAuJDEudG9Mb3dlckNhc2UoKV0gPSB0cnVlOwoJCX0KCgkJaWYgKG5hdmln
YXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUG9kfGlQYWR8aU9TL2kpKSB7
CgkJCSQuYnJvd3NlclsnaU9TJ10gPSB0cnVlOwoJCX0KCgkJJC5ldmVudC5wcm9w
cy5wdXNoKCdkYXRhVHJhbnNmZXInKTsKCgkJJC5zdXBwb3J0LmNzc1ByZWZpeAk9
ICgkLmJyb3dzZXIud2Via2l0ID8gJ1dlYmtpdCcgOgoJCQkJCQkJCSgkLmJyb3dz
ZXIubW96aWxsYSA/ICdNb3onIDoKCQkJCQkJCQkoJC5icm93c2VyLm9wZXJhID8g
J08nIDoKCQkJCQkJCQkoJC5icm93c2VyLm1zaWUgPyAnbXMnIDogJycpCgkJCQkJ
CQkpKSk7CgoJCSQuc3VwcG9ydC5kbmQgPSAoZnVuY3Rpb24gKCl7CgkJCXZhciBk
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJaWYoICgnZHJh
Z2dhYmxlJyBpbiBkaXYpIHx8ICgnb25kcmFnc3RhcnQnIGluIGRpdiAmJiAnb25k
cm9wJyBpbiBkaXYpICl7CgkJCQkkKCdodG1sJykuYWRkQ2xhc3MoJ2RyYWdhbmRk
cm9wJyk7CgkJCQlyZXR1cm4JdHJ1ZTsKCQkJfQoJCX0pKCk7CgoKCQlmdW5jdGlv
biBtYWtlVW5zZWxlY3RhYmxlKG9uLCBub2RlKXsKCQkJaWYoIG5vZGUubm9kZVR5
cGUgPT0gMSApewoJCQkJdmFyIHN0eWxlID0gbm9kZS5zdHlsZTsKCQkJCXN0eWxl
Wyd1c2VyU2VsZWN0J10gPSBzdHlsZVskLnN1cHBvcnQuY3NzUHJlZml4ICsnVXNl
clNlbGVjdCddID0gb24gPyAnbm9uZScgOiAnJzsKCQkJCW5vZGUuc2V0QXR0cmli
dXRlKCd1bnNlbGVjdGFibGUnLCBvbiA/ICdvbicgOiAnb2ZmJyk7CgkJCX0KCgkJ
CWlmKCAkLmJyb3dzZXIubXNpZSApewoJCQkJbm9kZSA9IG5vZGUuZmlyc3RDaGls
ZDsKCgkJCQl3aGlsZSggbm9kZSApewoJCQkJCW1ha2VVbnNlbGVjdGFibGUob24s
IG5vZGUpOwoJCQkJCW5vZGUgPSBub2RlLm5leHRTaWJsaW5nOwoJCQkJfQoJCQl9
CgkJfQoKCQkvLyDQtNC+0LHQsNCy0LjQvCDQvdC+0LLRi9C1INC80LXRgtC+0LTR
iwoJCSQuZm4uZXh0ZW5kKHsKCgkJCUY6CQlmdW5jdGlvbiAoKXsgcmV0dXJuCXRo
aXM7IH0sCgkJCWVsbToJZnVuY3Rpb24gKG4peyByZXR1cm4gJCggdGhpc1swXS5l
bGVtZW50c1tuXSApOyB9LAoKCQkJY3NzMzogZnVuY3Rpb24gKHByb3BzKXsKCQkJ
CXRoaXMuY3NzKHByb3BzKTsKCgkJCQlpZiggJC5zdXBwb3J0LmNzc1ByZWZpeCAp
ewoJCQkJCXRoaXMuZWFjaChmdW5jdGlvbiAoKXsKCQkJCQkJZm9yKCB2YXIga2V5
IGluIHByb3BzICl7CgkJCQkJCQl0aGlzLnN0eWxlWyQuY2FtZWxDYXNlKCQuc3Vw
cG9ydC5jc3NQcmVmaXggKyctJysga2V5KV0gPSBpc05hTihwcm9wc1trZXldKSA/
IHByb3BzW2tleV0gOiBwcm9wc1trZXldKydweCc7CgkJCQkJCX0KCQkJCQl9KTsK
CQkJCX0KCgkJCQlyZXR1cm4JdGhpczsKCQkJfSwKCgkJCWdldFNpemU6IGZ1bmN0
aW9uIChyZWFsKXsKCQkJCXZhciBydywgcmg7CgkJCQlpZiggcmVhbCApewoJCQkJ
CXJ3ID0gdGhpcy53aWR0aCgpOwoJCQkJCXJoID0gdGhpcy5oZWlnaHQoKTsKCQkJ
CQl0aGlzLmNzcyh7IHdpZHRoOiAnJywgaGVpZ2h0OiAnJyB9KTsKCQkJCX0KCQkJ
CXZhciB3ID0gdGhpcy5vdXRlcldpZHRoKCksIGggPSB0aGlzLm91dGVySGVpZ2h0
KCk7CgkJCQlpZiggcmVhbCAmJiAocncgfHwgcmgpICkKCQkJCQl0aGlzLmNzcyh7
IHdpZHRoOiBydywgaGVpZ2h0OiByaCB9KTsKCQkJCXJldHVybgl7IHdpZHRoOiB3
LCBoZWlnaHQ6IGggfTsKCQkJfSwKCgkJCXJlcGxhY2VDbGFzczogZnVuY3Rpb24g
KHMvKlJlZ0V4cHxTdHJpbmcqLywgci8qU3RyaW5nKi8pewoJCQkJZm9yKCB2YXIg
aSA9IDAsIG4gPSB0aGlzLmxlbmd0aDsgaSA8IG47IGkrKyApCgkJCQkJdGhpc1tp
XS5jbGFzc05hbWUgPSB0aGlzW2ldLmNsYXNzTmFtZS5yZXBsYWNlKHMsIHIpOwoJ
CQkJcmV0dXJuCXRoaXM7CgkJCX0sCgoKCQkJaXRlbTogJC5mbi5lcSwKCgkJCXVu
c2VsZWN0YWJsZTogZnVuY3Rpb24gKG9uLypCb29sKi8pewoJCQkJaWYoIG9uICE9
PSB1bmRlZiApewoJCQkJCXJldHVybgl0aGlzLmVhY2goZnVuY3Rpb24gKCl7IG1h
a2VVbnNlbGVjdGFibGUob24sIHRoaXMpOyB9KTsKCQkJCX0KCQkJCWVsc2UgewoJ
CQkJCXJldHVybgkodGhpcy5hdHRyKCd1bnNlbGVjdGFibGUnKXx8JycpLnRvTG93
ZXJDYXNlKCkgPT0gJ29uJzsKCQkJCX0KCQkJfSwKCgoJCQloaXRUZXN0OiBmdW5j
dGlvbiAoZWwvKkV2ZW50LGpRdWVyeSxDU1NSdWxlKi8pLypCb29sKi97CgkJCQlp
ZiggdHlwZW9mIGVsID09ICdzdHJpbmcnICkJZWwgPSAkKGVsKVswXTsKCQkJCWVs
c2UgaWYoIGVsWzBdICkgZWwgPSBlbFswXTsKCQkJCWVsc2UgaWYoIGVsLnRhcmdl
dCApIGVsID0gZWwudGFyZ2V0OwoKCQkJCWZvciggdmFyIGkgPSAwLCBhLCB4OyBp
IDwgdGhpcy5sZW5ndGg7IGkrKyApewoJCQkJCWEgPSB0aGlzW2ldOwoJCQkJCXgg
PSBlbDsKCQkJCQlkbyB7CgkJCQkJCWlmKCBhID09IHggKXsKCQkJCQkJCXJldHVy
bgl0cnVlOwoJCQkJCQl9CgkJCQkJfQoJCQkJCXdoaWxlKCB4ID0geC5wYXJlbnRO
b2RlICk7CgkJCQl9CgoJCQkJcmV0dXJuCWZhbHNlOwoJCQl9LAoKCgkJCWluc2Vy
dEZpcnN0OiAkLmZuLnByZXBlbmRUbywKCgkJCXRvT2JqZWN0OiBmdW5jdGlvbiAo
Zi8qOkJvb2wqLykvKk9iamVjdCovewoJCQkJdmFyIGRhdGEJPSB7fTsKCgkJCQl0
aGlzLmZpbmQoJ0lOUFVULFRFWFRBUkVBLFNFTEVDVCcpLmVhY2goZnVuY3Rpb24g
KCl7CgkJCQkJdHJ5ewoJCQkJCQlpZiggdGhpcy5uYW1lICYmICghdGhpcy5kaXNh
YmxlZCB8fCBmKSApewoJCQkJCQkJc3dpdGNoKCB0aGlzLnRhZ05hbWUgKXsKCQkJ
CQkJCQljYXNlICdJTlBVVCc6CgkJCQkJCQkJY2FzZSAnVEVYVEFSRUEnOgoJCQkJ
CQkJCXsKCQkJCQkJCQkJaWYoIHRoaXMudHlwZSA9PSAnY2hlY2tib3gnICkKCQkJ
CQkJCQkJewoJCQkJCQkJCQkJaWYoIGYgfHwgdGhpcy5jaGVja2VkICkKCQkJCQkJ
CQkJCXsKCQkJCQkJCQkJCQlpZiggdGhpcy5uYW1lLmluZGV4T2YoJ1tdJykgPiAw
ICkKCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJCWlmKCAhZGF0YVt0aGlzLm5hbWVd
ICkJZGF0YVt0aGlzLm5hbWVdID0gW107CgkJCQkJCQkJCQkJCWRhdGFbdGhpcy5u
YW1lXS5wdXNoKHRoaXMuY2hlY2tlZCA/IHRoaXMudmFsdWUgOiAnJyk7CgkJCQkJ
CQkJCQkJfQoJCQkJCQkJCQkJCWVsc2UgZGF0YVt0aGlzLm5hbWVdID0gdGhpcy5j
aGVja2VkID8gdGhpcy52YWx1ZSA6ICcnOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9
CgkJCQkJCQkJCWVsc2UgaWYoIHRoaXMudHlwZSA9PSAncmFkaW8nICkKCQkJCQkJ
CQkJewoJCQkJCQkJCQkJaWYoIHRoaXMuY2hlY2tlZCApCWRhdGFbdGhpcy5uYW1l
XQk9IHRoaXMudmFsdWU7CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZQoJCQkJCQkJ
CQl7CgkJCQkJCQkJCQlkYXRhW3RoaXMubmFtZV0JPSAoKHdpbmRvdy5JbnB1dFZh
bGlkYXRvciA/IElucHV0VmFsaWRhdG9yLmdldCh0aGlzKSA6IDApIHx8IHRoaXMp
LnZhbHVlOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCWJyZWFrOwoKCQkJ
CQkJCQljYXNlICdTRUxFQ1QnOgkJZGF0YVt0aGlzLm5hbWVdCT0gdGhpcy5vcHRp
b25zW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWU7IGJyZWFrOwoJCQkJCQkJfQoJ
CQkJCQl9CgkJCQkJfQoJCQkJCWNhdGNoKCBlICl7IGRlYnVnLmxvZyhlKTsgfQoJ
CQkJfSk7CgoJCQkJcmV0dXJuCWRhdGE7CgkJCX0sCgoKCQkJc2Nyb2xsV2lkdGg6
CWZ1bmN0aW9uICgpeyByZXR1cm4JKCh0aGlzWzBdICYmIHRoaXNbMF0uc2Nyb2xs
V2lkdGgpID8gdGhpc1swXS5zY3JvbGxXaWR0aCA6IDApOyB9LAoJCQlzY3JvbGxI
ZWlnaHQ6CWZ1bmN0aW9uICgpeyByZXR1cm4JKCh0aGlzWzBdICYmIHRoaXNbMF0u
c2Nyb2xsSGVpZ2h0KSA/IHRoaXNbMF0uc2Nyb2xsSGVpZ2h0IDogMCk7IH0sCgoK
CQkJc2V0UG9zaXRpb25GaXhlZDogZnVuY3Rpb24gKHgsIHkpCgkJCXsKCQkJCWlm
KCAoJC5icm93c2VyLm1zaWUgJiYgJC5icm93c2VyLnZlcnNpb24gPCA5KSAmJiAo
ISQuYm94TW9kZWwgfHwgKCQuYnJvd3Nlci52ZXJzaW9uIDwgNykpICkJLy8g0YLQ
viDQv9C+0LXRhdCw0LvQuAoJCQkJewoJCQkJCXZhciBjCT0gKCdJRVBvc2l0aW9u
Rml4ZWQnK3grJ3gnK3kpLnJlcGxhY2UoLyUvZywgJ3ByJyk7CgoJCQkJCWlmKCAh
d2luZG93W2NdICkKCQkJCQl7CgkJCQkJCSQuaWVQb3NpdGlvbkZpeGVkID0gdHJ1
ZTsKCQkJCQkJdmFyIHByWCA9IHRydWUsIHByWSA9IHRydWU7CgoJCQkJCQlpZigg
KHR5cGVvZiB4ICE9ICdudW1iZXInKSAmJiAoeC5pbmRleE9mKCclJykgPiAwKSAp
IHggPSAocGFyc2VGbG9hdCh4KS8xMDApOyBlbHNlIHsgeCA9IHBhcnNlRmxvYXQo
eCk7IHByWCA9IGZhbHNlOyB9CgkJCQkJCWlmKCAodHlwZW9mIHkgIT0gJ251bWJl
cicpICYmICh5LmluZGV4T2YoJyUnKSA+IDApICkgeSA9IChwYXJzZUZsb2F0KHkp
LzEwMCk7IGVsc2UgeyB5ID0gcGFyc2VGbG9hdCh5KTsgcHJZID0gZmFsc2U7IH0K
CgkJCQkJCXdpbmRvd1tjXSA9IGZ1bmN0aW9uIChlbG0pCgkJCQkJCXsKCQkJCQkJ
CXZhciBTID0gZWxtLnN0eWxlOwoJCQkJCQkJUy5wb3NpdGlvbiA9ICdhYnNvbHV0
ZSc7CgkJCQkJCQlTLmxlZnQJPSBNYXRoLm1heCgoKHByWCA/IGFqcy53aW5kb3dX
aWR0aCgpIDogMSkgKiB4ICsgYWpzLnNjcm9sbExlZnQoKSksIDApICsgJ3B4JzsK
CQkJCQkJCVMudG9wCT0gTWF0aC5tYXgoKChwclkgPyBhanMud2luZG93SGVpZ2h0
KCkgOiAxKSAqIHkgKyBhanMuc2Nyb2xsVG9wKCkpLCAwKSArICdweCc7CgkJCQkJ
CX07CgkJCQkJfQoKCQkJCQl0aGlzLnJlbW92ZVBvc2l0aW9uRml4ZWQoKS5lYWNo
KGZ1bmN0aW9uICgpeyB0aGlzLmllRml4ZWQgPSAxOyB0aGlzLnN0eWxlLnNldEV4
cHJlc3Npb24oJ3dvcmRXcmFwJywgYysiKHRoaXMpIik7IH0pOwoJCQkJfQoJCQkJ
ZWxzZQoJCQkJewoJCQkJCXRoaXMuY3NzKHsKCQkJCQkJICBwb3NpdGlvbjoJJ2Zp
eGVkJwoJCQkJCQksIHRvcDoJCXkKCQkJCQkJLCBsZWZ0OgkJeAoJCQkJCX0pOwoJ
CQkJfQoJCQkJcmV0dXJuCXRoaXM7CgkJCX0sCgoKCQkJcmVtb3ZlUG9zaXRpb25G
aXhlZDogZnVuY3Rpb24gKCkKCQkJewoJCQkJcmV0dXJuCXRoaXMuZWFjaChmdW5j
dGlvbiAoKXsgaWYoIHRoaXMuaWVGaXhlZCApIHRoaXMuc3R5bGUucmVtb3ZlRXhw
cmVzc2lvbignd29yZFdyYXAnKTsgdGhpcy5pZUZpeGVkID0gMDsgfSk7CgkJCX0s
CgoKCQkJaW5uZXJIVE1MOiBmdW5jdGlvbiAoaCkKCQkJewoJCQkJaWYoIGggPT09
IHVuZGVmICkKCQkJCQlyZXR1cm4JdGhpcy5hdHRyKCdpbm5lckhUTUwnKTsKCQkJ
CWVsc2UKCQkJCQlyZXR1cm4JdGhpcy5lYWNoKGZ1bmN0aW9uICgpeyB0aGlzLmlu
bmVySFRNTCA9IGg7IH0pOwoJCQl9LAoKCQkJZGlzcGxheTogZnVuY3Rpb24gKHR5
cGUpCgkJCXsKCQkJCWlmICgodHlwZSAhPT0gdW5kZWYpICYmICh0eXBlb2YgdHlw
ZSAhPT0gJ3N0cmluZycpKSB7CgkJCQkJdHlwZSA9ICF0eXBlID8gJ25vbmUnIDog
Jyc7CgkJCQl9CgoJCQkJcmV0dXJuCXRoaXMuY3NzKCdkaXNwbGF5JywgdHlwZSk7
CgkJCX0sCgoJCQlmaW5kV2l0aFJvb3Q6IGZ1bmN0aW9uKHNlbGVjdG9yKQoJCQl7
CgkJCQlyZXR1cm4gdGhpcy5maWx0ZXIoc2VsZWN0b3IpLmFkZCh0aGlzLmZpbmQo
c2VsZWN0b3IpKTsKCQkJfSwKCgkJCWZvcm1fX3NlbGVjdDogZnVuY3Rpb24gKCkK
CQkJewoJCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJdmFy
IGNvbnRhaW5lciA9ICQodGhpcyk7CgkJCQkJaWYgKGNvbnRhaW5lci5kYXRhKCdp
bml0ZWQnKSkgcmV0dXJuOwoKCQkJCQl2YXIgc2VsZWN0ID0gY29udGFpbmVyLmZp
bmQoJ3NlbGVjdCcpLAoJCQkJCQl0ZXh0ID0gY29udGFpbmVyLmZpbmQoJy5qcy10
ZXh0Jyk7CgoJCQkJCXNlbGVjdC5iaW5kKCdjaGFuZ2Uga2V5dXAnLCBmdW5jdGlv
biAoKSB7CgkJCQkJCXZhciBvcHRpb24gPSBzZWxlY3QuY2hpbGRyZW4oJzpzZWxl
Y3RlZCcpOwoJCQkJCQl0ZXh0LnRleHQob3B0aW9uLmF0dHIoJ2RhdGEtbmFtZScp
IHx8IG9wdGlvbi50ZXh0KCkpOwoJCQkJCX0pOwoJCQkJCXNlbGVjdC50cmlnZ2Vy
KCdjaGFuZ2UnKTsKCgkJCQkJc2VsZWN0LmJpbmQoJ2ZvY3VzJywgZnVuY3Rpb24g
KCkgewoJCQkJCQljb250YWluZXIuYWRkQ2xhc3MoJ2Zvcm1fX3NlbGVjdF9mb2N1
cycpOwoJCQkJCX0pOwoJCQkJCXNlbGVjdC5iaW5kKCdibHVyJywgZnVuY3Rpb24g
KCkgewoJCQkJCQljb250YWluZXIucmVtb3ZlQ2xhc3MoJ2Zvcm1fX3NlbGVjdF9m
b2N1cycpOwoJCQkJCX0pOwoKCQkJCQljb250YWluZXIuZGF0YSgnaW5pdGVkJywg
dHJ1ZSk7CgkJCQl9KTsKCQkJfSwKCgkJCWZvcm1fX3N3aXRjaGVyOiBmdW5jdGlv
biAoKSB7CgkJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQl2
YXIgc3dpdGNoZXIgPSAkKHRoaXMpLAoJCQkJCQlpbnB1dHMgPSBzd2l0Y2hlci5m
aW5kKCdpbnB1dCcpOwoKCQkJCQlpbnB1dHMuY2xpY2soZnVuY3Rpb24gKCkgewoJ
CQkJCQlzd2l0Y2hlcgoJCQkJCQkJLmZpbmQoJy5mb3JtX19zd2l0Y2hlcicpCgkJ
CQkJCQkucmVwbGFjZUNsYXNzKC9mb3JtX19zd2l0Y2hlcl9cdytfc2VsZWN0ZWQv
LCAnJyk7CgoJCQkJCQlpZiAoaW5wdXRzLmZpbHRlcignOmNoZWNrZWQnKS52YWwo
KSA9PT0gJ29uJykgewoJCQkJCQkJc3dpdGNoZXIKCQkJCQkJCQkuZmluZCgnLmZv
cm1fX3N3aXRjaGVyX29wdGlvbnNfcG9zaXRpdmUnKQoJCQkJCQkJCS5hZGRDbGFz
cygnZm9ybV9fc3dpdGNoZXJfb3B0aW9uc19wb3NpdGl2ZV9zZWxlY3RlZCcpOwoJ
CQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJc3dpdGNoZXIKCQkJCQkJCQkuZmlu
ZCgnLmZvcm1fX3N3aXRjaGVyX29wdGlvbnNfbmVnYXRpdmUnKQoJCQkJCQkJCS5h
ZGRDbGFzcygnZm9ybV9fc3dpdGNoZXJfb3B0aW9uc19uZWdhdGl2ZV9zZWxlY3Rl
ZCcpOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQl9KTsKCQkJfSwKCgkJCWZvcm1fX3Rp
bWU6IGZ1bmN0aW9uICgpIHsKCQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24g
KCkgewoJCQkJCSQodGhpcykuZmluZCgnLmZvcm1fX3NwaW5ib3gnKS5mb3JtX19z
cGluYm94KCk7CgkJCQl9KTsKCQkJfSwKCgkJCWZvcm1fX3NwaW5ib3g6IGZ1bmN0
aW9uICgpIHsKCQkJCXZhciByZXBlYXRJbnRlcnZhbCA9IDI1MDsKCgkJCQlyZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQlmdW5jdGlvbiBwYWQodmFs
dWUpIHsKCQkJCQkJaWYgKHplcm9wYWQpIHsKCQkJCQkJCXJldHVybiAoJzAwMDAw
MCcgKyB2YWx1ZSkuc2xpY2UoLXplcm9wYWQpOwoJCQkJCQl9CgkJCQkJCWVsc2Ug
ewoJCQkJCQkJcmV0dXJuIHZhbHVlOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWZ1bmN0
aW9uIGluY3JlYXNlKCkgewoJCQkJCQl2YXIgdmFsdWUgPSBOdW1iZXIoaW5wdXQu
dmFsKCkpICsgc3RlcDsKCQkJCQkJaWYgKHZhbHVlIDw9IG1heCkKCQkJCQkJCWlu
cHV0LnZhbChwYWQodmFsdWUpKTsKCQkJCQl9CgkJCQkJZnVuY3Rpb24gZGVjcmVh
c2UoKSB7CgkJCQkJCXZhciB2YWx1ZSA9IE51bWJlcihpbnB1dC52YWwoKSkgLSBz
dGVwOwoJCQkJCQlpZiAodmFsdWUgPj0gbWluKQoJCQkJCQkJaW5wdXQudmFsKHBh
ZCh2YWx1ZSkpOwoJCQkJCX0KCQkJCQlmdW5jdGlvbiBzdG9wKCkgewoJCQkJCQlj
bGVhckludGVydmFsKHRpbWVyKTsKCQkJCQkJdGltZXIgPSBudWxsOwoJCQkJCX0K
CgkJCQkJdmFyIGNvbnRhaW5lciA9ICQodGhpcyksCgkJCQkJCWlucHV0ID0gY29u
dGFpbmVyLmZpbmQoJy5qcy1udW1iZXInKSwKCQkJCQkJbWluID0gaW5wdXQuZGF0
YSgnbWluJykgIT09ICd1bmRlZmluZWQnID8gTnVtYmVyKGlucHV0LmRhdGEoJ21p
bicpKSA6IC1JbmZpbml0eSwKCQkJCQkJbWF4ID0gaW5wdXQuZGF0YSgnbWF4Jykg
IT09ICd1bmRlZmluZWQnID8gTnVtYmVyKGlucHV0LmRhdGEoJ21heCcpKSA6IElu
ZmluaXR5LAoJCQkJCQlzdGVwID0gTnVtYmVyKGlucHV0LmRhdGEoJ3N0ZXAnKSB8
fCAxKSwKCQkJCQkJemVyb3BhZCA9IE51bWJlcihpbnB1dC5kYXRhKCd6ZXJvcGFk
JykpLAoJCQkJCQlpbmMgPSBjb250YWluZXIuZmluZCgnLmpzLWluYycpLAoJCQkJ
CQlkZWMgPSBjb250YWluZXIuZmluZCgnLmpzLWRlYycpLAoJCQkJCQl0aW1lcjsK
CgkJCQkJaW5jLmJpbmQoJ21vdXNlZG93bicsIGZ1bmN0aW9uICgpIHsKCQkJCQkJ
aWYgKCQodGhpcykuYXR0cignZGlzYWJsZWQnKSkgcmV0dXJuOwoJCQkJCQlpbmNy
ZWFzZSgpOwoJCQkJCQl0aW1lciA9IHNldEludGVydmFsKGluY3JlYXNlLCByZXBl
YXRJbnRlcnZhbCk7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9KTsKCQkJCQlp
bmMuYmluZCgnbW91c2V1cCcsIHN0b3ApOwoJCQkJCWRlYy5iaW5kKCdtb3VzZWRv
d24nLCBmdW5jdGlvbiAoKSB7CgkJCQkJCWlmICgkKHRoaXMpLmF0dHIoJ2Rpc2Fi
bGVkJykpIHJldHVybjsKCQkJCQkJZGVjcmVhc2UoKTsKCQkJCQkJdGltZXIgPSBz
ZXRJbnRlcnZhbChkZWNyZWFzZSwgcmVwZWF0SW50ZXJ2YWwpOwoJCQkJCQlyZXR1
cm4gZmFsc2U7CgkJCQkJfSk7CgkJCQkJZGVjLmJpbmQoJ21vdXNldXAnLCBzdG9w
KTsKCQkJCQlpbnB1dC5iaW5kKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHsKCQkJ
CQkJaWYgKGUua2V5Q29kZSA9PT0gMzgpCgkJCQkJCQlpbmNyZWFzZSgpOwoJCQkJ
CQllbHNlIGlmIChlLmtleUNvZGUgPT09IDQwKQoJCQkJCQkJZGVjcmVhc2UoKTsK
CQkJCQl9KTsKCQkJCX0pOwoJCQl9LAoKCQkJZm9ybV9fZGlzYWJsZTogZnVuY3Rp
b24gKCkgewoJCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJ
dmFyIGNvbnRhaW5lciA9ICQodGhpcyk7CgkJCQkJY29udGFpbmVyLmFkZENsYXNz
KCdmb3JtX2Rpc2FibGVkJyk7CgkJCQkJY29udGFpbmVyLmZpbmRXaXRoUm9vdCgn
aW5wdXQsdGV4dGFyZWEsc2VsZWN0LGEnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNh
YmxlZCcpOwoJCQkJCWNvbnRhaW5lci5maW5kV2l0aFJvb3QoJy5mb3JtX19maWVs
ZCcpLmFkZENsYXNzKCdmb3JtX19maWVsZF9kaXNhYmxlZCcpOwoJCQkJCWNvbnRh
aW5lci5maW5kV2l0aFJvb3QoJy5mb3JtX19maWVsZF9fd3JhcHBlcicpLmFkZENs
YXNzKCdmb3JtX19maWVsZF9fd3JhcHBlcl9kaXNhYmxlZCcpOwoJCQkJCWNvbnRh
aW5lci5maW5kV2l0aFJvb3QoJy5mb3JtX19zZWxlY3QnKS5hZGRDbGFzcygnZm9y
bV9fc2VsZWN0X2Rpc2FibGVkJyk7CgkJCQkJY29udGFpbmVyLmZpbmRXaXRoUm9v
dCgnLmZvcm1fX3NwaW5ib3gnKS5hZGRDbGFzcygnZm9ybV9fc3BpbmJveF9kaXNh
YmxlZCcpOwoJCQkJCWNvbnRhaW5lci5maW5kV2l0aFJvb3QoJy5mb3JtX19idXR0
b24nKS5hZGRDbGFzcygnZm9ybV9fYnV0dG9uX2Rpc2FibGVkJyk7CgkJCQkJY29u
dGFpbmVyLmRlbGVnYXRlKCdhJywgJ2NsaWNrLmZvcm1fX2Rpc2FibGUnLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9KTsKCQkJCX0pOwoJCQl9LAoKCQkJZm9y
bV9fZW5hYmxlOiBmdW5jdGlvbiAoKSB7CgkJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uICgpIHsKCQkJCQl2YXIgY29udGFpbmVyID0gJCh0aGlzKTsKCQkJCQlj
b250YWluZXIucmVtb3ZlQ2xhc3MoJ2Zvcm1fZGlzYWJsZWQnKTsKCQkJCQljb250
YWluZXIuZmluZFdpdGhSb290KCdpbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYScpLnJl
bW92ZUF0dHIoJ2Rpc2FibGVkJyk7CgkJCQkJY29udGFpbmVyLmZpbmRXaXRoUm9v
dCgnLmZvcm1fX2ZpZWxkJykucmVtb3ZlQ2xhc3MoJ2Zvcm1fX2ZpZWxkX2Rpc2Fi
bGVkJyk7CgkJCQkJY29udGFpbmVyLmZpbmRXaXRoUm9vdCgnLmZvcm1fX2ZpZWxk
X193cmFwcGVyJykucmVtb3ZlQ2xhc3MoJ2Zvcm1fX2ZpZWxkX193cmFwcGVyX2Rp
c2FibGVkJyk7CgkJCQkJY29udGFpbmVyLmZpbmRXaXRoUm9vdCgnLmZvcm1fX3Nl
bGVjdCcpLnJlbW92ZUNsYXNzKCdmb3JtX19zZWxlY3RfZGlzYWJsZWQnKTsKCQkJ
CQljb250YWluZXIuZmluZFdpdGhSb290KCcuZm9ybV9fc3BpbmJveCcpLnJlbW92
ZUNsYXNzKCdmb3JtX19zcGluYm94X2Rpc2FibGVkJyk7CgkJCQkJY29udGFpbmVy
LmZpbmRXaXRoUm9vdCgnLmZvcm1fX2J1dHRvbicpLnJlbW92ZUNsYXNzKCdmb3Jt
X19idXR0b25fZGlzYWJsZWQnKTsKCQkJCQljb250YWluZXIudW5kZWxlZ2F0ZSgn
YScsICdjbGljay5mb3JtX19kaXNhYmxlJyk7CgkJCQl9KTsKCQkJfSwKCgkJCWZv
cm1fX3RvZ2dsZTogZnVuY3Rpb24gKGNvbmRpdGlvbikgewoJCQkJdmFyIGFjdGlv
biA9ICdmb3JtX18nICsgKCBjb25kaXRpb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxl
JyApOwoJCQkJcmV0dXJuIHRoaXNbYWN0aW9uXSgpOwoJCQl9CgkJfSk7CgoKCQl2
YXIgX2JpbmQgPSAkLmZuLmJpbmQsIHFOYW1lID0gJ2V2ZW50UXVldWUnKyAkLmV4
cGFuZG8gKydfJzsKCgkJZnVuY3Rpb24gX2NoZWNrKCRlbCwgdHlwZSwgZnVuYyl7
CgkJCXZhciBxdWV1ZQk9ICRlbC5kYXRhKHFOYW1lICsgdHlwZSk7CgkJCWlmKCBx
dWV1ZSApewoJCQkJdmFyIGV2dCA9ICQuRXZlbnQoIHF1ZXVlWzBdICk7CgkJCQll
dnQucHJldmVudERlZmF1bHQoKTsKCQkJCWV2dC5zdG9wUHJvcGFnYXRpb24oKTsK
CQkJCWZ1bmMuY2FsbCgkZWxbMF0sIGV2dCwgcXVldWVbMV0pOwoJCQl9CgkJfQoK
CQkkLmZuLmRpc3BhdGNoID0gZnVuY3Rpb24gKGV2dCwgZGF0YSwgcXVldWUpewoJ
CQl2YXIga2V5ID0gcU5hbWUgKyAoJC50eXBlKGV2dCkgPT09ICdzdHJpbmcnID8g
ZXZ0IDogZXZ0LnR5cGUpOwoKCQkJaWYoIHF1ZXVlICl7CgkJCQl0aGlzLmRhdGEo
a2V5LCBbZXZ0LCBkYXRhXSk7CgkJCX0KCQkJZWxzZSBpZiggdGhpcy5kYXRhKGtl
eSkgKXsKCQkJCXRoaXMucmVtb3ZlRGF0YShrZXkpOwoJCQl9CgoJCQlyZXR1cm4J
dGhpcy50cmlnZ2VySGFuZGxlcihldnQsIGRhdGEpOwoJCX07CgoJCSQuZm4uYmlu
ZCA9IGZ1bmN0aW9uIChldmVudHMsIGRhdGEsIGZ1bmMpewoJCQlpZiggdGhpc1sw
XSApewoJCQkJaWYoICQuaXNGdW5jdGlvbihkYXRhKSApewoJCQkJCWZ1bmMJPSBk
YXRhOwoJCQkJCWRhdGEJPSB1bmRlZjsKCQkJCX0KCgkJCQlpZiggJC50eXBlKGV2
ZW50cykgIT09ICdvYmplY3QnICl7CgkJCQkJdmFyIG5hbWVzID0gZXZlbnRzLnNw
bGl0KC9ccysvKSwgaSA9IDAsIG4gPSBuYW1lcy5sZW5ndGg7CgkJCQkJZm9yKCA7
IGkgPCBuOyBpKysgKSBfY2hlY2sodGhpcywgbmFtZXNbaV0sIGZ1bmMpOwoJCQkJ
fQoJCQl9CgoJCQlyZXR1cm4gX2JpbmQuY2FsbCh0aGlzLCBldmVudHMsIGRhdGEs
IGZ1bmMpOwoJCX07CgoJCWFqcy5vZmZsaW5lID0gISFtYWlscnVbJ09mZmxpbmVN
b2RlJ107CgkJaWYgKCFtYWlscnVbJ0ZvcmNlT2ZmbGluZU1vZGUnXSkgewoJCQkk
KHdpbmRvdykuYmluZCgnb25saW5lIG9mZmxpbmUnLCBmdW5jdGlvbiAoZXZ0KSB7
CgkJCQl2YXIgb2ZmbGluZSA9IGV2dC50eXBlID09ICdvZmZsaW5lJzsKCQkJCWlm
IChhanMub2ZmbGluZSAhPSBvZmZsaW5lKSB7CgkJCQkJJCh3aW5kb3cpLnRyaWdn
ZXJIYW5kbGVyKCdvZmZsaW5lY2hhbmdlJywgW2Fqcy5vZmZsaW5lID0gb2ZmbGlu
ZV0pOwoJCQkJfQoJCQl9KTsKCQl9CgoJCS8qKgoJCSAqIFN1cHBvcnQgdmlzaWJp
bGl0eWNoYW5nZSBldmVudCAoUGFnZSBWaXNpYmlsaXR5IEFQSSkKCQkgKi8KCQko
ZnVuY3Rpb24oKSB7CgkJCXZhciBwcm9wLCBldmVudE5hbWUsIHZpcyA9IHsKCQkJ
CQloaWRkZW46ICJ2aXNpYmlsaXR5Y2hhbmdlIiwKCQkJCQltb3pIaWRkZW46ICJt
b3p2aXNpYmlsaXR5Y2hhbmdlIiwKCQkJCQl3ZWJraXRIaWRkZW46ICJ3ZWJraXR2
aXNpYmlsaXR5Y2hhbmdlIiwKCQkJCQltc0hpZGRlbjogIm1zdmlzaWJpbGl0eWNo
YW5nZSIsCgkJCQkJb0hpZGRlbjogIm92aXNpYmlsaXR5Y2hhbmdlIiAvKiBub3Qg
Y3VycmVudGx5IHN1cHBvcnRlZCAqLwoJCQkJfTsKCgkJCWZvciAocHJvcCBpbiB2
aXMpIHsKCQkJCWlmICh2aXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcHJvcCBp
biBkb2N1bWVudCkgewoJCQkJCWV2ZW50TmFtZSA9IHZpc1twcm9wXTsKCQkJCQli
cmVhazsKCQkJCX0KCQkJfQoKCQkJaWYgKGV2ZW50TmFtZSkgewoJCQkJZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG9uY2hhbmdlKTsKCQkJfQoJ
CQllbHNlIGlmICgvKkBjY19vbiFAKi9mYWxzZSkgeyAvLyBJRSA5IGFuZCBsb3dl
cgoJCQkJJChkb2N1bWVudCkuYmluZCgnZm9jdXNpbiBmb2N1c291dCcsIG9uY2hh
bmdlKTsKCgkJCX0KCQkJZWxzZSB7CgkJCQkkKHdpbmRvdykuYmluZCgnZm9jdXMg
Ymx1cicsIG9uY2hhbmdlKTsKCQkJfQoKCQkJZnVuY3Rpb24gb25jaGFuZ2UgKGV2
dCkgewoJCQkJdmFyIGhpZGRlbjsKCgkJCQlpZiggZXZ0LnR5cGUgPT0gImZvY3Vz
IiB8fCBldnQudHlwZSA9PSAiZm9jdXNpbiIgKXsKCQkJCQloaWRkZW4gPSBmYWxz
ZTsKCQkJCX0KCQkJCWVsc2UgaWYoIGV2dC50eXBlID09ICJibHVyIiB8fCBldnQu
dHlwZSA9PSAiZm9jdXNvdXQiICl7CgkJCQkJaGlkZGVuID0gdHJ1ZTsKCQkJCX0K
CQkJCWVsc2UgewoJCQkJCWhpZGRlbiA9ICEhZG9jdW1lbnRbcHJvcF07CgkJCQl9
CgoJCQkJaWYoIGFqcy5ibHVycmVkICE9PSBoaWRkZW4gKXsKCQkJCQlhanMuYmx1
cnJlZCA9IGhpZGRlbjsKCQkJCQkkKHdpbmRvdykudHJpZ2dlckhhbmRsZXIoJ3Zp
c2liaWxpdHljaGFuZ2UnLCBbaGlkZGVuXSk7CgkJCQl9CgkJCX0KCQl9KSgpOwoK
CX0pKGpRdWVyeSk7CgoJanNMb2FkZXIubG9hZGVkKCd7alF1ZXJ5fWV4dGVuc2lv
bnMnLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9qcXVlcnkv
ZXh0ZW5zaW9ucy5qcyBlbmQKCmpzQ2xhc3MKCQkuY3JlYXRlKCdqc1BsdWdpbnMn
KQoJCS5zdGF0aWNzKHsKCgkJZWxtczoJCXt9LAoKCQlwcm9jZXNzaW5nOiBmdW5j
dGlvbiAoZSkKCQl7CgkJCWpRdWVyeShlKS5maW5kKCcuanMtcGx1Z2luJykKCQkJ
CS5yZW1vdmVDbGFzcygnanMtcGx1Z2luJykKCQkJCS5lYWNoKGZ1bmN0aW9uICgp
eyBqc1BsdWdpbnMuc2V0KHRoaXMsICdwbHVnaW4nKTsgfSkKCQkJOwoJCX0sCgoK
CQlzZXQ6IGZ1bmN0aW9uIChlLCBuYW1lLCBvKQoJCXsKCQkJaWYoICFlICkgcmV0
dXJuCSB0aGlzOwoKCQkJdmFyIHVJZAk9IGpzQ29yZS5nZXRVbmlxSWQoZSA9ICRG
KCBlICkpOwoKCQkJaWYoICF0aGlzLmVsbXNbdUlkXSApCXRoaXMuZWxtc1t1SWRd
CT0ge307CgoJCQl2YXIgeAk9IGUub25jbGljayA/IGUub25jbGljaygpIDogMDsK
CgkJCW8JPSBvfHx7fTsKCQkJaWYoIHR5cGVvZiB4ID09ICdzdHJpbmcnICkgbmFt
ZQk9IHg7CgkJCWVsc2UJbwk9ICRFKHggfHwge30sIG8pOwoKCQkJZS5yZW1vdmVB
dHRyaWJ1dGUoJ2NsaWNrJyk7CgkJCWUub25jbGljawk9IG51bGw7CgoJCQlpZigg
bmFtZSA9PSAncGx1Z2luJyApCgkJCXsKCQkJCWlmKCBvLnBsdWdpbiApCgkJCQl7
CS8vIHJldHVybgl7IHBsdWdpbjogJ1RvZ2dsZScsIG9wdGlvbnM6IHt9IH0gT1Ig
cmV0dXJuIHsgIHBsdWdpbjogJ1RvZ2dsZScsIC4uLiB9CgkJCQkJdGhpcy5zZXQo
ZSwgby5wbHVnaW4sIChvLm9wdGlvbnMgfHwgbykpOwoJCQkJfQoJCQkJZWxzZSBp
Ziggb1swXSApCgkJCQl7CS8vIHJldHVybglbeyBwbHVnaW46ICdUb2dnbGUnLCBv
cHRpb25zOiB7fSB9XQoJCQkJCWZvciggdmFyIGkgPSAwOyBvW2ldOyBpKysgKQoJ
CQkJCXsKCQkJCQkJdGhpcy5zZXQoZSwgb1tpXS5wbHVnaW4sIG9baV0ub3B0aW9u
cyk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewkvLyByZXR1cm4JeyAnVG9n
Z2xlJzogeyB9IH0KCQkJCQlmb3IoIHZhciBuIGluIG8gKSB0aGlzLnNldChlLCBu
LCBvW25dKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCXZhcgoJCQkJCSAg
YWxpYXMJCT0gby5fX3BBbGlhcyB8fCBqc0xvYWRlci5nZXRBbGlhcyhuYW1lLCAn
cGx1Z2lucycpCgkJCQkJLCBuYW1lCQk9IGpzTG9hZGVyLmdldE5hbWUobmFtZSkK
CQkJCQksIHJlcXVpcmUJPSAneycrYWxpYXMrJ30nK25hbWUKCQkJCQksIGkJCQk9
IDAKCQkJCQksIG4JCQk9IG5hbWUuc3BsaXQoJy4nKQoJCQkJCSwgS2xhc3MJCT0g
d2luZG93CgkJCQk7CgoJCQkJZm9yKCA7IG5baV0gJiYgKEtsYXNzID0gS2xhc3Nb
bltpXV0pOyBpKysgKXsgLypkZWJ1Zy5sb2cobltpXSk7Ki8gfQoKCQkJCWlmKCBL
bGFzcyAmJiAoS2xhc3MuY29uc3RydWN0b3IgPT0gRnVuY3Rpb24pICkKCQkJCXsK
CQkJCQlqc1BsdWdpbnMuZWxtc1t1SWRdW25hbWVdCT0gbmV3IEtsYXNzKGpRdWVy
eShlKSwgbyk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CS8vINC30LDQv9C+0LzQvdC4
0Lwg0LDQu9C40LDRgQoJCQkJCW8uX19wQWxpYXMJPSBhbGlhczsKCQkJCQkkUihy
ZXF1aXJlLCBmdW5jdGlvbiAoKXsganNQbHVnaW5zLnNldChlLCBuYW1lLCBvKTsg
fSk7CgkJCQl9CgkJCX0KCgkJCXJldHVybgl0aGlzOwoJCX0sCgoKCQlnZXQ6IGZ1
bmN0aW9uIChlLCBuKQoJCXsKCQkJdmFyIHVJZAk9IGpzQ29yZS5nZXRVbmlxSWQo
IGUgJiYgJEYoZSkgKTsKCQkJcmV0dXJuCXRoaXMuZWxtc1t1SWRdICYmIHRoaXMu
ZWxtc1t1SWRdW25dOwoJCX0KCgl9KTsKCgoJalF1ZXJ5LmZuLmV4dGVuZCh7CgoJ
CXNldFBsdWdpbjogZnVuY3Rpb24gKG4sIG8sIGUvKmV4aXN0czpCb29sKi8sIHIv
KnJldHVyblBsdWdpbjpCb29sKi8pCgkJewoJCQlpZiggIWUgfHwgIXRoaXMuaGFz
UGx1Z2luKG4pICkganNQbHVnaW5zLnNldCh0aGlzWzBdLCBuLCBvKTsKCQkJcmV0
dXJuCXIgPyB0aGlzLmdldFBsdWdpbihuKSA6IHRoaXM7CgkJfSwKCgkJZ2V0UGx1
Z2luOiBmdW5jdGlvbiAobikKCQl7CgkJCXJldHVybglqc1BsdWdpbnMuZ2V0KHRo
aXNbMF0sIGpzTG9hZGVyLmdldE5hbWUobikpOwoJCX0sCgoJCWhhc1BsdWdpbjog
ZnVuY3Rpb24gKG4pCgkJewoJCQlyZXR1cm4JISFqc1BsdWdpbnMuZ2V0KHRoaXNb
MF0sIG4pOwoJCX0sCgoJCXByb2Nlc3NQbHVnaW5zOiBmdW5jdGlvbiAoKQoJCXsK
CQkJZm9yKCB2YXIgaSA9IDA7IHRoaXNbaV07IGkrKyApCgkJCQlpZiggdGhpc1tp
XS5pbm5lckhUTUwuaW5kZXhPZignanMtcGx1Z2luJykgIT0gLTEgKQoJCQkJCWpz
UGx1Z2lucy5wcm9jZXNzaW5nKHRoaXMpOwoJCQlyZXR1cm4JdGhpczsKCQl9CgoJ
fSk7CgoJanNMb2FkZXIubG9hZGVkKCd7cGx1Z2luc31qc1BsdWdpbnMnLCAxKTsK
Ci8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9wbHVnaW5zL2pzUGx1Z2lu
cy5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9qcXVlcnkv
anF1ZXJ5LmdldENTUy5qcyBzdGFydAoKLyoqCiAqIGpRdWVyeS5nZXRDU1MgcGx1
Z2luCiAqIGh0dHA6Ly9naXRodWIuY29tL2Z1cmYvanF1ZXJ5LWdldENTUwogKgog
KiBDb3B5cmlnaHQgMjAxMCwgRGF2ZSBGdXJmZXJvCiAqIER1YWwgbGljZW5zZWQg
dW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgogKgogKiBJ
bnNwaXJlZCBieSBKdWxpYW4gQXVib3VyZydzIERvbWlub2VzCiAqIGh0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC9qYXZhc2NyaXB0LWRvbWlub2VzLwogKi8KCgooZnVu
Y3Rpb24gKHdpbmRvdywgZG9jdW1lbnQsIGpRdWVyeSl7CgoJCXZhciBoZWFkID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSwKCQkJbG9h
ZGVkQ29tcGxldGVSZWdFeHAgPSAvbG9hZGVkfGNvbXBsZXRlLywKCQkJY2FsbGJh
Y2tzID0ge30sCgkJCWNhbGxiYWNrc05iID0gMCwKCQkJdGltZXIsCgkJCWNhY2hl
ID0ge307CgoKCQl2YXIgX2luaXQgPSBmdW5jdGlvbiAoKXsKCQkJX2luaXQgPSBq
UXVlcnkubm9vcDsKCQkJdmFyIHMgPSBkb2N1bWVudC5zdHlsZVNoZWV0cywgaSA9
IHMubGVuZ3RoLCBoOwoJCQlmb3IoIDsgaS0tOyApIGlmKCBoID0gc1tpXS5ocmVm
ICkgY2FjaGVbaC5zcGxpdCgnPycpWzBdXSA9IHRydWU7CgkJfTsKCgoJCWpRdWVy
eS5nZXRDU1MgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zLCBjYWxsYmFjayl7CgoJ
CQlfaW5pdCgpOwoKCQkJaWYoIGpRdWVyeS5pc0Z1bmN0aW9uKG9wdGlvbnMpICl7
CgkJCQljYWxsYmFjayA9IG9wdGlvbnM7CgkJCQlvcHRpb25zID0ge307CgkJCX0K
CgkJCWlmKCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyApewoJCQkJdmFyIGkgPSAw
LCBjID0gdXJsLmxlbmd0aCwgdCA9IDAsIGZ1bmMgPSBmdW5jdGlvbiAoKXsKCQkJ
CQlpZiggKyt0ID09IGMgKSBjYWxsYmFjaygpOwoJCQkJfTsKCQkJCWZvciggOyBp
IDwgYzsgaSsrICkgalF1ZXJ5LmdldENTUyh1cmxbaV0sIG9wdGlvbnMsIGZ1bmMp
OwoJCQkJcmV0dXJuOwoJCQl9CgoJCQl2YXIgaHJlZiA9IHVybC5zcGxpdCgnPycp
WzBdOwoJCQlpZiggIW9wdGlvbnMubm9DYWNoZSAmJiBjYWNoZVtocmVmXSApewoJ
CQkJY2FsbGJhY2soKTsKCQkJCXJldHVybjsKCQkJfQoKCQkJdmFyIGxpbms7CgkJ
CWNhY2hlW2hyZWZdID0gdHJ1ZTsKCgkJCWlmKCBkb2N1bWVudC5jcmVhdGVTdHls
ZVNoZWV0ICl7CgkJCQlsaW5rCT0gZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldCh1
cmwpOwoJCQkJaWYoIG9wdGlvbnMuY2hlY2sgKXsKCQkJCQkvLyBAdG9kbzog0KHQ
tNC10LvQsNC7INC90LAg0LHRi9GB0YLRgNGD0Y4g0YDRg9C60YMgLS0g0YIu0LUu
INC+0YfQtdC90Ywg0L/Qu9C+0YXQviwg0L3Rg9C20L3QviDQv9C10YDQtdC00LXQ
u9GL0LLQsNGC0Ywg0LLQtdGB0Ywg0Y3RgtC+0YIg0L/Qu9Cw0LPQuNC9CgkJCQkJ
dmFyIHBpZEZhaWwsIHBpZERvbmUgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKXsK
CQkJCQkJaWYoIG9wdGlvbnMuY2hlY2soKSApewoJCQkJCQkJY2xlYXJUaW1lb3V0
KHBpZEZhaWwpOwoJCQkJCQkJY2xlYXJJbnRlcnZhbChwaWREb25lKTsKCQkJCQkJ
CWNhbGxiYWNrKGxpbmssICJzdWNjZXNzIik7CgkJCQkJCX0KCQkJCQl9LCAzMCk7
CgoJCQkJCXBpZEZhaWwgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpewoJCQkJCQlj
YWxsYmFjayhsaW5rLCAiZXJyb3IiKTsKCQkJCQkJY2xlYXJJbnRlcnZhbChwaWRE
b25lKTsKCQkJCQl9LCAxMDAwMCk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQljYWxs
YmFjayhsaW5rLCAic3VjY2VzcyIpOwoJCQkJfQoJCQkJcmV0dXJuOwoJCQl9IGVs
c2UgewoJCQkJbGluawk9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTsK
CQkJfQoKCQkJbGluay5yZWwgPSAnc3R5bGVzaGVldCc7CgkJCWxpbmsudHlwZSA9
ICd0ZXh0L2Nzcyc7CgkJCWxpbmsubWVkaWEgPSBvcHRpb25zLm1lZGlhIHx8ICdz
Y3JlZW4nOwoJCQlsaW5rLmhyZWYgPSB1cmw7CgoKCQkJaWYoIG9wdGlvbnMuY2hh
cnNldCApewoJCQkJbGluay5jaGFyc2V0ID0gb3B0aW9ucy5jaGFyc2V0OwoJCQl9
CgoJCQlpZiggb3B0aW9ucy50aXRsZSApewoJCQkJY2FsbGJhY2sgPSAoZnVuY3Rp
b24gKGNhbGxiYWNrKXsKCQkJCQlyZXR1cm4gZnVuY3Rpb24gKCl7CgkJCQkJCWxp
bmsudGl0bGUgPSBvcHRpb25zLnRpdGxlOwoJCQkJCQljYWxsYmFjayhsaW5rLCAi
c3VjY2VzcyIpOwoJCQkJCX07CgkJCQl9KShjYWxsYmFjayk7CgkJCX0KCgkJCS8v
IG9ucmVhZHlzdGF0ZWNoYW5nZQoJCQlpZiggbGluay5yZWFkeVN0YXRlICl7CgkJ
CQlsaW5rLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpewoJCQkJCWlm
KCBsb2FkZWRDb21wbGV0ZVJlZ0V4cC50ZXN0KGxpbmsucmVhZHlTdGF0ZSkgKXsK
CQkJCQkJbGluay5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOwoJCQkJCQljYWxs
YmFjayhsaW5rLCAic3VjY2VzcyIpOwoJCQkJCX0KCQkJCX07CgoJCQkJLy8gSWYg
b25sb2FkIGlzIGF2YWlsYWJsZSwgdXNlIGl0CgkJCX0gZWxzZSBpZiggbGluay5v
bmxvYWQgPT09IG51bGwgLyogZXhjbHVkZSBXZWJraXQgPT4gKi8gJiYgbGluay5h
bGwgKXsKCQkJCWxpbmsub25sb2FkID0gZnVuY3Rpb24gKCl7CgkJCQkJbGluay5v
bmxvYWQgPSBudWxsOwoJCQkJCWNhbGxiYWNrKGxpbmssICJzdWNjZXNzIik7CgkJ
CQl9OwoKCQkJCS8vIEluIGFueSBvdGhlciBicm93c2VyLCB3ZSBwb2xsCgkJCX0g
ZWxzZSB7CgkJCQljYWxsYmFja3NbbGluay5ocmVmXSA9IGZ1bmN0aW9uICgpewoJ
CQkJCWNhbGxiYWNrKGxpbmssICJzdWNjZXNzIik7CgkJCQl9OwoKCQkJCWlmKCAh
Y2FsbGJhY2tzTmIrKyApewoJCQkJCS8vIHBvbGwoY3NzUG9sbEZ1bmN0aW9uKTsK
CgkJCQkJdGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCl7CgoJ
CQkJCQl2YXIgY2FsbGJhY2ssCgkJCQkJCQlzdHlsZXNoZWV0LAoJCQkJCQkJc3R5
bGVzaGVldHMgPSBkb2N1bWVudC5zdHlsZVNoZWV0cywKCQkJCQkJCWhyZWYsCgkJ
CQkJCQlpID0gc3R5bGVzaGVldHMubGVuZ3RoOwoKCQkJCQkJd2hpbGUoIGktLSAp
ewoJCQkJCQkJc3R5bGVzaGVldCA9IHN0eWxlc2hlZXRzW2ldOwoJCQkJCQkJaWYo
IChocmVmID0gc3R5bGVzaGVldC5ocmVmKSAmJiAoY2FsbGJhY2sgPSBjYWxsYmFj
a3NbaHJlZl0pICl7CgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJLy8gV2Ugc3RvcmUg
c28gdGhhdCBtaW5pZmllcnMgZG9uJ3QgcmVtb3ZlIHRoZSBjb2RlCgkJCQkJCQkJ
CWNhbGxiYWNrLnIgPSBzdHlsZXNoZWV0LmNzc1J1bGVzOwoJCQkJCQkJCQkvLyBX
ZWJraXQ6CgkJCQkJCQkJCS8vIFdlYmtpdCBicm93c2VycyBkb24ndCBjcmVhdGUg
dGhlIHN0eWxlc2hlZXQgb2JqZWN0CgkJCQkJCQkJCS8vIGJlZm9yZSB0aGUgbGlu
ayBoYXMgYmVlbiBsb2FkZWQuCgkJCQkJCQkJCS8vIFdoZW4gcmVxdWVzdGluZyBy
dWxlcyBmb3IgY3Jvc3NEb21haW4gbGlua3MKCQkJCQkJCQkJLy8gdGhleSBzaW1w
bHkgcmV0dXJuIG5vdGhpbmcgKG5vIGV4Y2VwdGlvbiB0aHJvd24pCgkJCQkJCQkJ
CS8vIEdlY2tvOgoJCQkJCQkJCQkvLyBOU19FUlJPUl9ET01fSU5WQUxJRF9BQ0NF
U1NfRVJSIHRocm93biBpZiB0aGUgc3R5bGVzaGVldCBpcyBub3QgbG9hZGVkCgkJ
CQkJCQkJCS8vIElmIHRoZSBzdHlsZXNoZWV0IGlzIGxvYWRlZDoKCQkJCQkJCQkJ
Ly8gICogbm8gZXJyb3IgdGhyb3duIGZvciBzYW1lLWRvbWFpbgoJCQkJCQkJCQkv
LyAgKiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSIHRocm93biBmb3IgY3Jvc3Mt
ZG9tYWluCgkJCQkJCQkJCXRocm93ICdTRUNVUklUWSc7CgkJCQkJCQkJfSBjYXRj
aCAoZSkgewoJCQkJCQkJCQkvLyBHZWNrbzogY2F0Y2ggTlNfRVJST1JfRE9NX1NF
Q1VSSVRZX0VSUiB8IFNlY3VyaXR5RXJyb3IKCQkJCQkJCQkJLy8gV2Via2l0OiBj
YXRjaCBTRUNVUklUWQoJCQkJCQkJCQlpZiggL1NFQ1VSSVRZL2kudGVzdChlKSAp
ewoKCQkJCQkJCQkJCS8vIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApOwoJCQkJCQkJ
CQkJY2FsbGJhY2sobGluaywgInN1Y2Nlc3MiKTsKCgkJCQkJCQkJCQlkZWxldGUg
Y2FsbGJhY2tzW2hyZWZdOwoKCQkJCQkJCQkJCWlmKCAhLS1jYWxsYmFja3NOYiAp
ewoJCQkJCQkJCQkJCXRpbWVyID0gd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIp
OwoJCQkJCQkJCQkJfQoKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJ
CQkJfQoJCQkJCX0sIDEzKTsKCQkJCX0KCQkJfQoKCQkJdHJ5IHsKCQkJCWhlYWQu
YXBwZW5kQ2hpbGQobGluayk7CgkJCX0gY2F0Y2ggKGVyKXt9CgkJfTsKCgl9KSh0
aGlzLCB0aGlzLmRvY3VtZW50LCB0aGlzLmpRdWVyeSk7CgoJanNMb2FkZXIubG9h
ZGVkKCd7alF1ZXJ5fWpxdWVyeS5nZXRDU1MnLCAxKTsKCi8vIGRhdGEvcnUvaW1h
Z2VzL2pzL3J1L2pzQ29yZS9qcXVlcnkvanF1ZXJ5LmdldENTUy5qcyBlbmQKCi8v
IGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9qcXVlcnkvanF1ZXJ5Lnhkci10
cmFuc3BvcnQuanMgc3RhcnQKCi8qCiAqIGpRdWVyeSBYRG9tYWluUmVxdWVzdCBU
cmFuc3BvcnQgUGx1Z2luIDEuMS4xCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVl
aW1wL2pRdWVyeS1GaWxlLVVwbG9hZAogKgogKiBDb3B5cmlnaHQgMjAxMSwgU2Vi
YXN0aWFuIFRzY2hhbgogKiBodHRwczovL2JsdWVpbXAubmV0CiAqCiAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZToKICogaHR0cDovL3d3dy5vcGVuc291
cmNlLm9yZy9saWNlbnNlcy9NSVQKICoKICogQmFzZWQgb24gSnVsaWFuIEF1Ym91
cmcncyBhamF4SG9va3MgeGRyLmpzOgogKiBodHRwczovL2dpdGh1Yi5jb20vamF1
Ym91cmcvYWpheEhvb2tzLwogKi8KCi8qanNsaW50IHVucGFyYW06IHRydWUgKi8K
LypnbG9iYWwgZGVmaW5lLCB3aW5kb3csIFhEb21haW5SZXF1ZXN0ICovCgooZnVu
Y3Rpb24gKGZhY3RvcnkpIHsKICAgICd1c2Ugc3RyaWN0JzsKCS8qKiBAbmFtZXNw
YWNlIGRlZmluZS5hbWQgKi8KCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rp
b24nICYmIGRlZmluZS5hbWQpIHsKICAgICAgICAvLyBSZWdpc3RlciBhcyBhbiBh
bm9ueW1vdXMgQU1EIG1vZHVsZToKICAgICAgICBkZWZpbmUoWydqcXVlcnknXSwg
ZmFjdG9yeSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFs
czoKICAgICAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpOwoJICAgIGpzTG9hZGVy
LmxvYWRlZCgne2pRdWVyeX1qcXVlcnkueGRyLXRyYW5zcG9ydCcpOwogICAgfQp9
KGZ1bmN0aW9uICgkKSB7CiAgICAndXNlIHN0cmljdCc7CiAgICBpZiAod2luZG93
LlhEb21haW5SZXF1ZXN0ICYmICQuYWpheFNldHRpbmdzLnhocigpLndpdGhDcmVk
ZW50aWFscyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgJC5hamF4VHJhbnNwb3J0
KGZ1bmN0aW9uIChzKSB7CiAgICAgICAgICAgIGlmIChzLmNyb3NzRG9tYWluICYm
IHMuYXN5bmMpIHsKICAgICAgICAgICAgICAgIGlmIChzLnRpbWVvdXQpIHsKICAg
ICAgICAgICAgICAgICAgICBzLnhkclRpbWVvdXQgPSBzLnRpbWVvdXQ7CiAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIHMudGltZW91dDsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHZhciB4ZHI7CiAgICAgICAgICAgICAgICByZXR1
cm4gewogICAgICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uIChoZWFkZXJz
LCBjb21wbGV0ZUNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIGNhbGxiYWNrKHN0YXR1cywgc3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBy
ZXNwb25zZUhlYWRlcnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhk
ci5vbmxvYWQgPSB4ZHIub25lcnJvciA9IHhkci5vbnRpbWVvdXQgPSAkLm5vb3A7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZHIgPSBudWxsOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjayhzdGF0dXMsIHN0
YXR1c1RleHQsIHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB4ZHIgPSBu
ZXcgWERvbWFpblJlcXVlc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
WERvbWFpblJlcXVlc3Qgb25seSBzdXBwb3J0cyBHRVQgYW5kIFBPU1Q6CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzLnR5cGUgPT09ICdERUxFVEUnKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzLnVybCA9IHMudXJsICsgKC9cPy8u
dGVzdChzLnVybCkgPyAnJicgOiAnPycpICsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnX21ldGhvZD1ERUxFVEUnOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcy50eXBlID0gJ1BPU1QnOwogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHMudHlwZSA9PT0gJ1BVVCcpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHMudXJsID0gcy51cmwgKyAoL1w/Ly50ZXN0KHMudXJsKSA/
ICcmJyA6ICc/JykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdf
bWV0aG9kPVBVVCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnR5cGUg
PSAnUE9TVCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgeGRyLm9wZW4ocy50eXBlLCBzLnVybCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHhkci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ09LJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGV4dDog
eGRyLnJlc3BvbnNlVGV4dH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ0NvbnRlbnQtVHlwZTogJyArIHhkci5jb250ZW50VHlwZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgICAgICAgICAgICAgeGRyLm9uZXJyb3IgPSBmdW5jdGlvbiAo
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayg0MDQsICdO
b3QgRm91bmQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHMueGRyVGltZW91dCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeGRyLm9udGltZW91dCA9IGZ1bmN0aW9uICgpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygwLCAndGltZW91
dCcsIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHhkci50aW1lb3V0ID0gcy54ZHJUaW1lb3V0Owog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IHhkci5zZW5kKChzLmhhc0NvbnRlbnQgJiYgcy5kYXRhKSB8fCBudWxsKTsKICAg
ICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGFib3J0OiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ZHIpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhkci5vbmVycm9yID0gJC5ub29w
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZHIuYWJvcnQoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0K
fSkpOwogCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvanF1ZXJ5L2px
dWVyeS54ZHItdHJhbnNwb3J0LmpzIGVuZAoKLy8gZGF0YS9ydS9pbWFnZXMvanMv
cnUvanNDb3JlL2pxdWVyeS9qcXVlcnkudHBsLmpzIHN0YXJ0CgoKLy8gU2ltcGxl
IEphdmFTY3JpcHQgVGVtcGxhdGluZwoJLy8gSm9obiBSZXNpZyAtIGh0dHA6Ly9l
am9obi5vcmcvIC0gTUlUIExpY2Vuc2VkCgkoZnVuY3Rpb24gKCQpewoJCXZhciBf
ZnVuYyA9IHt9LCBfcmEgPSAvJy9nLCBfcnR4dCA9IC8oKF58JT4pLio/KDwlfCQp
KS9nOwoKCQlmdW5jdGlvbiB0bXBsKHN0ciwgaWQpewoJCQl2YXIgc291cmNlID0g
IndpdGgoY3R4KXtfX2J1Zi5wdXNoKCciICsgc3RyCgkJCQkucmVwbGFjZSgvW1xy
XHRcbl0vZywgIiAiKQoJCQkJLnJlcGxhY2UoX3J0eHQsIGZ1bmN0aW9uIChhKXsg
cmV0dXJuIGEucmVwbGFjZShfcmEsICdcXFwnJyk7IH0pCgkJCQkuc3BsaXQoIjwl
Iikuam9pbigiXHQiKQoJCQkJLnJlcGxhY2UoL1x0PSguKj8pJT4vZywgIicsICQx
LCciKQoJCQkJLnNwbGl0KCJcdCIpLmpvaW4oIicpOyIpCgkJCQkuc3BsaXQoIiU+
Iikuam9pbigiX19idWYucHVzaCgnIikKCQkJCSsgIicpO30iCgkJCTsKCgkJCXJl
dHVybgluZXcgRnVuY3Rpb24oImN0eCIsCgkJCQkgICd2YXIgX19idWY9W107IHRy
eXsnCgkJCQkrIHNvdXJjZQoJCQkJKyAnfWNhdGNoKGVycil7IGFqcy5sb2coXCdb
dHBsLmVycm9yXSAiJytpZCsnIiAtLSBydW50aW1lXCcpOyBhanMubG9nKGVycik7
IH0gJwoJCQkJKyAncmV0dXJuIF9fYnVmLmpvaW4oIiIpJwoJCQkpOwoJCX0KCgoJ
CSQucHJlbG9hZFRwbCA9IGZ1bmN0aW9uIChpZCwgaHRtbCl7CgkJCWlmKCAhKGlk
IGluIF9mdW5jKSApewoJCQkJX2Z1bmNbaWRdCT0gJC5ub29wOwoKCQkJCWlmKCAh
aHRtbCApewoJCQkJCWh0bWwgPSAkKGlkKS5yZW1vdmUoKS5hdHRyKCdpbm5lckhU
TUwnKTsKCQkJCX0KCQkJCWVsc2UgaWYoIGh0bWwuanF1ZXJ5ICkgewoJCQkJCWh0
bWwgPSBodG1sLmF0dHIoJ2lubmVySFRNTCcpIHx8IGh0bWwudmFsKCk7CgkJCQl9
CgoJCQkJaWYoIGh0bWwgKXsKCQkJCQl0cnkgewoJCQkJCQlfZnVuY1tpZF0gPSB0
bXBsKCBodG1sLCBpZCApOwoJCQkJCX0gY2F0Y2ggKGVycil7CgkJCQkJCWFqcy5s
b2coJ1t0cGwuZXJyb3JdOiAiJysgaWQgKyciIC0tIGNvbXBpbGUgZmFpbCcpOwoJ
CQkJCQlhanMubG9nKGVycik7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQlhanMu
bG9nKCdbdHBsLmVycm9yXTogIicrIGlkICsnIiAtLSBub3QgZm91bmQnKTsKCQkJ
CX0KCQkJfQoJCX07CgoKCQkkLnRwbCA9IGZ1bmN0aW9uIChpZCwgZGF0YSl7CgkJ
CSQucHJlbG9hZFRwbChpZCk7CgkJCXJldHVybiBfZnVuY1tpZF0oZGF0YSk7CgkJ
fTsKCgoJCSQuZm4udHBsID0gZnVuY3Rpb24gKGlkLCBkYXRhKXsKCQkJcmV0dXJu
CXRoaXMuaW5uZXJIVE1MKCAkLnRwbChpZCwgZGF0YSkgKTsKCQl9OwoJfSkoalF1
ZXJ5KTsKCgoJd2luZG93LlRQTAk9IHsKCQlkZWY6IHt9LAoKCQlkYXRlOiBmdW5j
dGlvbiAoZGF0ZSwgZm9ybWF0KXsKCQkJcmV0dXJuCURhdGUucGFyc2UoZGF0ZSku
Zm9ybWF0KGZvcm1hdCk7CgkJfSwKCgkJb3I6IGZ1bmN0aW9uICh4LCB0LCBmKXsK
CQkJcmV0dXJuCSEheCA/IHQgOiBmCgkJfSwKCgkJZ2V0RGVmOiBmdW5jdGlvbiAo
a2V5LCBvcHRzKXsKCQkJcmV0dXJuCWFqcy5leHRlbmQoVFBMLmRlZltrZXldIHx8
IHt9LCBvcHRzKTsKCQl9Cgl9OwoKCglqc0xvYWRlci5sb2FkZWQoJ3tqUXVlcnl9
anF1ZXJ5LnRwbCcsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvanNDb3Jl
L2pxdWVyeS9qcXVlcnkudHBsLmpzIGVuZAoKLy8gZGF0YS9ydS9pbWFnZXMvanMv
cnUvanNDb3JlL2pxdWVyeS9qcXVlcnkuZmVzdC14LmpzIHN0YXJ0CgoKLy8gLi9k
YXRhL2NvbW1vbi9qcy9qcXVlcnkvanF1ZXJ5LmZlc3QuanMgc3RhcnQKCmRlZmlu
ZSgnanF1ZXJ5L2pxdWVyeS5mZXN0JywgZnVuY3Rpb24oKSB7CgkvLyBhc3luYyAm
IHN5bmMKCSQuZmVzdCA9IGZ1bmN0aW9uICh1cmwsIGRhdGEsIGNhbGxiYWNrKXsK
CQl2YXIgc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewoJCQl2YXIgaHRtbDsKCgkJCWlm
KCB3aW5kb3cuZmVzdFt1cmxdICl7CgkJCQkgaHRtbCA9IHdpbmRvdy5mZXN0W3Vy
bF0oZGF0YSk7CgkJCX0KCQkJZWxzZSB7CgkJCQkkKHdpbmRvdykudHJpZ2dlckhh
bmRsZXIoJ2Zlc3Qubm90RGVmaW5lZFRlbXBsYXRlTWV0aG9kJywgW3VybF0pOwoJ
CQl9CgoJCQlpZiggdHlwZW9mIGNhbGxiYWNrICE9PSAndW5kZWZpbmVkJyApewoJ
CQkJY2FsbGJhY2soaHRtbCk7CgkJCX0KCgkJCXJldHVybglodG1sOwoJCX07CgoJ
CWlmKHdpbmRvdy5mZXN0ICYmIHdpbmRvdy5mZXN0W3VybF0gIT09IHVuZGVmaW5l
ZCkgewoJCQlyZXR1cm4Jc3VjY2VzcygpOwoJCX0gZWxzZSB7CgkJCXZhciBzY3Jp
cHRVcmwgPSAnL2Zlc3QvJyArIHVybCArICcuanMnOwoKCQkJdmFyIGFqYXhPcHRp
b25zID0gewoJCQkJdXJsOiBzY3JpcHRVcmwsCgkJCQlsb2FkaW5nOiB0cnVlLAoJ
CQkJZGF0YVR5cGU6ICdzY3JpcHQnCgkJCX07CgoJCQkkKHdpbmRvdykudHJpZ2dl
ckhhbmRsZXIoJ2FqYXguYmVmb3JlU2VuZCcsIFthamF4T3B0aW9uc10pOwoKCQkJ
JC5nZXRTY3JpcHQoc2NyaXB0VXJsKS5kb25lKGZ1bmN0aW9uKHNjcmlwdCwgdGV4
dFN0YXR1cywganFYSFIpIHsKCQkJCSQod2luZG93KS50cmlnZ2VySGFuZGxlcign
ZmVzdC5zdWNjZXNzTG9hZCcsIFthamF4T3B0aW9ucywgc2NyaXB0LCB0ZXh0U3Rh
dHVzLCBqcVhIUl0pOwoKCQkJCXN1Y2Nlc3MoKTsKCgkJCX0pLmZhaWwoZnVuY3Rp
b24oanFYSFIsIHNldHRpbmdzLCBleGNlcHRpb24pIHsKCQkJCSQod2luZG93KS50
cmlnZ2VySGFuZGxlcignZmVzdC5mYWlsTG9hZCcsIFthamF4T3B0aW9ucywganFY
SFIsIHNldHRpbmdzLCBleGNlcHRpb25dKTsKCQkJfSkKCQl9Cgl9OwoKCS8vIGFz
eW5jCgkkLmZuLmZlc3QgPSBmdW5jdGlvbiAodXJsLCBkYXRhLCBjYWxsYmFjayl7
CgkJJC5mZXN0KHVybCwgZGF0YSwgZnVuY3Rpb24oaHRtbCkgewoJCQl0aGlzLnRy
aWdnZXIoJ2Rlc3Ryb3kudmlldycpOwoKCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKCkg
ewoJCQkJd2hpbGUodGhpcy5maXJzdENoaWxkKSB7CgkJCQkJdGhpcy5yZW1vdmVD
aGlsZCh0aGlzLmZpcnN0Q2hpbGQpOwoJCQkJfQoKCQkJCXRoaXMuaW5uZXJIVE1M
ID0gaHRtbDsKCQkJfSk7CgoJCQlpZihjYWxsYmFjayAmJiBjYWxsYmFjayBpbnN0
YW5jZW9mIEZ1bmN0aW9uKSB7CgkJCQljYWxsYmFjay5jYWxsKCk7CgkJCX0KCgkJ
fS5iaW5kKHRoaXMpKTsKCgkJcmV0dXJuCXRoaXM7Cgl9Owp9KTsKLy8gLi9kYXRh
L2NvbW1vbi9qcy9qcXVlcnkvanF1ZXJ5LmZlc3QuanMgZW5kCgokKHdpbmRvdyku
YmluZCgnZmVzdC5ub3REZWZpbmVkVGVtcGxhdGVNZXRob2QnLCBmdW5jdGlvbih1
cmwpIHsKCQlhanMubG9nKCdqUXVlcnkuZmVzdC5lcnJvcjogJysgdXJsKycgbm90
IGZvdW5kJyk7Cgl9KTsKCgkkKHdpbmRvdykuYmluZCgnZmVzdC5zdWNjZXNzTG9h
ZCcsIGZ1bmN0aW9uKGFqYXhPcHRpb25zLCBzY3JpcHQsIHRleHRTdGF0dXMsIGpx
WEhSKSB7CgkJYWpzLnJlcXVpcmUoJ3ttYWlscnV9bWFpbHJ1LkFqYXgnLCBmdW5j
dGlvbigpIHsKCQkJJCh3aW5kb3cpLnRyaWdnZXJIYW5kbGVyKCdhamF4LmNvbXBs
ZXRlJywgW25ldyBtYWlscnUuQWpheC5SZXN1bHQoJ3N1Y2Nlc3MnLCBhamF4T3B0
aW9ucywganFYSFIsIHRleHRTdGF0dXMpXSk7CgkJfSk7Cgl9KTsKCgkkKHdpbmRv
dykuYmluZCgnZmVzdC5mYWlsTG9hZCcsIGZ1bmN0aW9uKGFqYXhPcHRpb25zLCBq
cVhIUiwgc2V0dGluZ3MsIGV4Y2VwdGlvbikgewoJCWFqcy5yZXF1aXJlKCd7bWFp
bHJ1fW1haWxydS5BamF4JywgZnVuY3Rpb24oKSB7CgkJCSQod2luZG93KS50cmln
Z2VySGFuZGxlcignYWpheC5jb21wbGV0ZScsIFtuZXcgbWFpbHJ1LkFqYXguUmVz
dWx0KCdlcnJvcicsIGFqYXhPcHRpb25zLCBqcVhIUiwgZXhjZXB0aW9uKV0pOwoJ
CX0pOwoKCQlhanMucmVxdWlyZSgne21haWxydX1tYWlscnUuTm90aWZ5JywgZnVu
Y3Rpb24oKSB7CgkJCW1haWxydS5Ob3RpZnkuYWRkKCdlcnJvcicsIHsgdGV4dDog
ZXhjZXB0aW9uLnRvU3RyaW5nKCkgfSkKCQl9KTsKCX0pOwoKCWpzTG9hZGVyLmxv
YWRlZCgne2pRdWVyeX1qcXVlcnkuZmVzdC14JywgMSk7CgovLyBkYXRhL3J1L2lt
YWdlcy9qcy9ydS9qc0NvcmUvanF1ZXJ5L2pxdWVyeS5mZXN0LXguanMgZW5kCgov
LyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvanF1ZXJ5L2F1dG9jb21wbGV0
ZS5qcyBzdGFydAoKLyoKICogQXV0b2NvbXBsZXRlIC0galF1ZXJ5IHBsdWdpbiAx
LjFwcmUKICoKICogQ29weXJpZ2h0IChjKSAyMDA3IER5bGFuIFZlcmhldWwsIERh
biBHLiBTd2l0emVyLCBBbmplc2ggVHVsYWRoYXIsIEo/cm4gWmFlZmZlcmVyCiAq
CiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2Vz
OgogKgkgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGlj
ZW5zZS5waHAKICoJIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRt
bAogKgogKiBSZXZpc2lvbjogJElkOiBqcXVlcnkuYXV0b2NvbXBsZXRlLmpzIDU3
ODUgMjAwOC0wNy0xMiAxMDozNzozM1ogam9lcm4uemFlZmZlcmVyICQKICoKICov
CgoKKGZ1bmN0aW9uKCQpIHsKCiQuZm4uZXh0ZW5kKHsKCWF1dG9jb21wbGV0ZTog
ZnVuY3Rpb24odXJsT3JEYXRhLCBvcHRpb25zKSB7CgkJdmFyIGlzVXJsID0gdHlw
ZW9mIHVybE9yRGF0YSA9PSAic3RyaW5nIjsKCQlvcHRpb25zID0gJC5leHRlbmQo
e30sICQuQXV0b2NvbXBsZXRlci5kZWZhdWx0cywgewoJCQl1cmw6IGlzVXJsID8g
dXJsT3JEYXRhIDogbnVsbCwKCQkJZGF0YTogaXNVcmwgPyBudWxsIDogdXJsT3JE
YXRhLAoJCQlkZWxheTogaXNVcmwgPyAkLkF1dG9jb21wbGV0ZXIuZGVmYXVsdHMu
ZGVsYXkgOiAxMCwKCQkJbWF4OiBvcHRpb25zICYmICFvcHRpb25zLnNjcm9sbCA/
IDEwIDogMTUwCgkJfSwgb3B0aW9ucyk7CgoJCS8vIGlmIGhpZ2hsaWdodCBpcyBz
ZXQgdG8gZmFsc2UsIHJlcGxhY2UgaXQgd2l0aCBhIGRvLW5vdGhpbmcgZnVuY3Rp
b24KCQlvcHRpb25zLmhpZ2hsaWdodCA9IG9wdGlvbnMuaGlnaGxpZ2h0IHx8IGZ1
bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTsKCgkJLy8gaWYgdGhlIGZv
cm1hdE1hdGNoIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHVzZSBmb3Jt
YXRJdGVtIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQoJCW9wdGlvbnMuZm9y
bWF0TWF0Y2ggPSBvcHRpb25zLmZvcm1hdE1hdGNoIHx8IG9wdGlvbnMuZm9ybWF0
SXRlbTsKCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJbmV3ICQu
QXV0b2NvbXBsZXRlcih0aGlzLCBvcHRpb25zKTsKCQl9KTsKCX0sCglyZXN1bHQ6
IGZ1bmN0aW9uKGhhbmRsZXIpIHsKCQlyZXR1cm4gdGhpcy5iaW5kKCJyZXN1bHQi
LCBoYW5kbGVyKTsKCX0sCglzZWFyY2g6IGZ1bmN0aW9uKGhhbmRsZXIpIHsKCQly
ZXR1cm4gdGhpcy50cmlnZ2VyKCJzZWFyY2giLCBbaGFuZGxlcl0pOwoJfSwKCWZs
dXNoQ2FjaGU6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLnRyaWdnZXIoImZs
dXNoQ2FjaGUiKTsKCX0sCglzZXRPcHRpb25zOiBmdW5jdGlvbihvcHRpb25zKXsK
CQlyZXR1cm4gdGhpcy50cmlnZ2VyKCJzZXRPcHRpb25zIiwgW29wdGlvbnNdKTsK
CX0sCglzZXREYXRhOiBmdW5jdGlvbihkYXRhKSB7CgkJcmV0dXJuIHRoaXMudHJp
Z2dlcigic2V0RGF0YSIsIFtkYXRhXSk7Cgl9LAoJdW5hdXRvY29tcGxldGU6IGZ1
bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLnRyaWdnZXIoInVuYXV0b2NvbXBsZXRl
Iik7Cgl9Cn0pOwoKJC5BdXRvY29tcGxldGVyID0gZnVuY3Rpb24oaW5wdXQsIG9w
dGlvbnMpIHsKCgl2YXIgS0VZID0gewoJCVVQOiAzOCwKCQlET1dOOiA0MCwKCQlE
RUw6IDQ2LAoJCVRBQjogOSwKCQlSRVRVUk46IDEzLAoJCUVTQzogMjcsCgkJQ09N
TUE6IDE4OCwKCQlQQUdFVVA6IDMzLAoJCVBBR0VET1dOOiAzNCwKCQlCQUNLU1BB
Q0U6IDgKCX07CgoJLy8gQ3JlYXRlICQgb2JqZWN0IGZvciBpbnB1dCBlbGVtZW50
Cgl2YXIgJGlucHV0ID0gJChpbnB1dCkuYXR0cigiYXV0b2NvbXBsZXRlIiwgIm9m
ZiIpLmFkZENsYXNzKG9wdGlvbnMuaW5wdXRDbGFzcyk7CgoJdmFyIHRpbWVvdXQ7
Cgl2YXIgcHJldmlvdXNWYWx1ZSA9ICIiOwoJdmFyIGNhY2hlID0gJC5BdXRvY29t
cGxldGVyLkNhY2hlKG9wdGlvbnMpOwoJdmFyIGhhc0ZvY3VzID0gMDsKCXZhciBj
YXJldFBvcyA9IHtzdGFydDogMCwgZW5kOiAwfTsKCXZhciBsYXN0S2V5UHJlc3ND
b2RlOwoJdmFyIGNvbmZpZyA9IHsKCQltb3VzZURvd25PblNlbGVjdDogZmFsc2UK
CX07Cgl2YXIgc2VsZWN0ID0gJC5BdXRvY29tcGxldGVyLlNlbGVjdChvcHRpb25z
LCBpbnB1dCwgc2VsZWN0Q3VycmVudCwgY29uZmlnKTsKCgkvLyBvbmx5IG9wZXJh
IGRvZXNuJ3QgdHJpZ2dlciBrZXlkb3duIG11bHRpcGxlIHRpbWVzIHdoaWxlIHBy
ZXNzZWQsIG90aGVycyBkb24ndCB3b3JrIHdpdGgga2V5cHJlc3MgYXQgYWxsCgkk
aW5wdXQuYmluZCgia2V5ZG93bi5hdXRvY29tcGxldGUiLCBmdW5jdGlvbihldmVu
dCkgewoJCS8vIHRyYWNrIGxhc3Qga2V5IHByZXNzZWQKCQlsYXN0S2V5UHJlc3ND
b2RlID0gZXZlbnQua2V5Q29kZTsKCgkJc3dpdGNoKGV2ZW50LmtleUNvZGUpIHsK
CgkJCWNhc2UgS0VZLlVQOgoJCQkJaWYgKCBzZWxlY3QudmlzaWJsZSgpICkgewoJ
CQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJc2VsZWN0LnByZXYoKTsK
CQkJCX0gZWxzZSB7CgkJCQkJb25DaGFuZ2UoMCwgdHJ1ZSk7CgkJCQl9CgkJCQli
cmVhazsKCgkJCWNhc2UgS0VZLkRPV046CgkJCQlpZiAoIHNlbGVjdC52aXNpYmxl
KCkgKSB7CgkJCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJCQlzZWxlY3Qu
bmV4dCgpOwoJCQkJfSBlbHNlIHsKCQkJCQlvbkNoYW5nZSgwLCB0cnVlKTsKCQkJ
CX0KCQkJCWJyZWFrOwoKCQkJY2FzZSBLRVkuUEFHRVVQOgoJCQkJaWYgKCBzZWxl
Y3QudmlzaWJsZSgpICkgewoJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJ
CQkJc2VsZWN0LnBhZ2VVcCgpOwoJCQkJfSBlbHNlIHsKCQkJCQlvbkNoYW5nZSgw
LCB0cnVlKTsKCQkJCX0KCQkJCWJyZWFrOwoKCQkJY2FzZSBLRVkuUEFHRURPV046
CgkJCQlpZiAoIHNlbGVjdC52aXNpYmxlKCkgKSB7CgkJCQkJZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKCQkJCQlzZWxlY3QucGFnZURvd24oKTsKCQkJCX0gZWxzZSB7
CgkJCQkJb25DaGFuZ2UoMCwgdHJ1ZSk7CgkJCQl9CgkJCQlicmVhazsKCgkJCS8v
IG1hdGNoZXMgYWxzbyBzZW1pY29sb24KLy8JCQljYXNlIG9wdGlvbnMubXVsdGlw
bGUgJiYgJC50cmltKG9wdGlvbnMubXVsdGlwbGVTZXBhcmF0b3IpID09ICIsIiAm
JiBLRVkuQ09NTUE6CgkJCWNhc2UgS0VZLlRBQjoKCQkJY2FzZSBLRVkuUkVUVVJO
OgoJCQkJaWYoIHNlbGVjdEN1cnJlbnQoZXZlbnQpICkgewoJCQkJCS8vIHN0b3Ag
ZGVmYXVsdCB0byBwcmV2ZW50IGEgZm9ybSBzdWJtaXQsIE9wZXJhIG5lZWRzIHNw
ZWNpYWwgaGFuZGxpbmcKCQkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJ
CXJldHVybiBmYWxzZTsKCQkJCX0KCQkJCWJyZWFrOwoKCQkJY2FzZSBLRVkuRVND
OgoJCQkJc2VsZWN0LmhpZGUoKTsKCQkJCWJyZWFrOwoKCQkJZGVmYXVsdDoKCQkJ
CWNhcmV0UG9zID0gJC5BdXRvY29tcGxldGVyLmdldENhcmV0UG9zaXRpb24oaW5w
dXQpOwoJCQkJY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwoJCQkJdGltZW91dCA9IHNl
dFRpbWVvdXQob25DaGFuZ2UsIG9wdGlvbnMuZGVsYXkpOwoJCQkJYnJlYWs7CgkJ
fQoJfSkuZm9jdXMoZnVuY3Rpb24oKXsKCQljYXJldFBvcyA9ICQuQXV0b2NvbXBs
ZXRlci5nZXRDYXJldFBvc2l0aW9uKGlucHV0KTsKCQkvLyB0cmFjayB3aGV0aGVy
IHRoZSBmaWVsZCBoYXMgZm9jdXMsIHdlIHNob3VsZG4ndCBwcm9jZXNzIGFueQoJ
CS8vIHJlc3VsdHMgaWYgdGhlIGZpZWxkIG5vIGxvbmdlciBoYXMgZm9jdXMKCQlo
YXNGb2N1cysrOwoJCWlmIChvcHRpb25zLm11bHRpcGxlKSB7CgkJCXZhciBsaXN0
ID0gJC5ncmVwKHRyaW1Xb3JkcygkaW5wdXQudmFsKCkpLCAkLnRyaW0pOwoJCQlp
ZiAobGlzdC5sZW5ndGgpIHsKCQkJCXZhciB2YWx1ZSA9IGxpc3Quam9pbihvcHRp
b25zLm11bHRpcGxlU2VwYXJhdG9yKTsKCQkJCSRpbnB1dC52YWwodmFsdWUgKyBv
cHRpb25zLm11bHRpcGxlU2VwYXJhdG9yKTsKCQkJCWlmIChjYXJldFBvcy5zdGFy
dCA9PSBjYXJldFBvcy5lbmQgJiYgY2FyZXRQb3Muc3RhcnQgPT0gdmFsdWUubGVu
Z3RoKSB7CgkJCQkJY2FyZXRQb3Muc3RhcnQgPSBjYXJldFBvcy5lbmQgPSBjYXJl
dFBvcy5zdGFydCArIG9wdGlvbnMubXVsdGlwbGVTZXBhcmF0b3IubGVuZ3RoOwoJ
CQkJfQoJCQkJJC5BdXRvY29tcGxldGVyLlNlbGVjdGlvbihpbnB1dCwgY2FyZXRQ
b3Muc3RhcnQsIGNhcmV0UG9zLmVuZCk7CgkJCQkkaW5wdXQuY2hhbmdlKCk7CgkJ
CX0KCQl9Cgl9KS5ibHVyKGZ1bmN0aW9uKCkgewoJCWhhc0ZvY3VzID0gMDsKCQlp
ZiAoIWNvbmZpZy5tb3VzZURvd25PblNlbGVjdCkgewoJCQloaWRlUmVzdWx0cygp
OwoJCX0KCQlpZiAob3B0aW9ucy5tdWx0aXBsZSkKCQl7CgkJCXZhciBsaXN0ID0g
JC5ncmVwKHRyaW1Xb3JkcygkaW5wdXQudmFsKCkpLCAkLnRyaW0pOwoJCQkkaW5w
dXQudmFsKGxpc3Quam9pbihvcHRpb25zLm11bHRpcGxlU2VwYXJhdG9yKSkuY2hh
bmdlKCk7CgkJfQoJfSkuY2xpY2soZnVuY3Rpb24oKSB7CgkJY2FyZXRQb3MgPSAk
LkF1dG9jb21wbGV0ZXIuZ2V0Q2FyZXRQb3NpdGlvbihpbnB1dCk7CgkJLy8gc2hv
dyBzZWxlY3Qgd2hlbiBjbGlja2luZyBpbiBhIGZvY3VzZWQgZmllbGQKCQlpZiAo
IGhhc0ZvY3VzKysgPiAxICYmICFzZWxlY3QudmlzaWJsZSgpICkgewoJCQlvbkNo
YW5nZSgwLCB0cnVlKTsKCQl9Cgl9KS5iaW5kKCJzZWFyY2giLCBmdW5jdGlvbigp
IHsKCQkvLyBUT0RPIHdoeSBub3QganVzdCBzcGVjaWZ5aW5nIGJvdGggYXJndW1l
bnRzPwoJCXZhciBmbiA9IChhcmd1bWVudHMubGVuZ3RoID4gMSkgPyBhcmd1bWVu
dHNbMV0gOiBudWxsOwoJCWZ1bmN0aW9uIGZpbmRWYWx1ZUNhbGxiYWNrKHEsIGRh
dGEpIHsKCQkJdmFyIHJlc3VsdDsKCQkJaWYoIGRhdGEgJiYgZGF0YS5sZW5ndGgg
KSB7CgkJCQlmb3IgKHZhciBpPTA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CgkJ
CQkJaWYoIGRhdGFbaV0ucmVzdWx0LnRvTG93ZXJDYXNlKCkgPT0gcS50b0xvd2Vy
Q2FzZSgpICkgewoJCQkJCQlyZXN1bHQgPSBkYXRhW2ldOwoJCQkJCQlicmVhazsK
CQkJCQl9CgkJCQl9CgkJCX0KCQkJaWYoIHR5cGVvZiBmbiA9PSAiZnVuY3Rpb24i
ICkgZm4ocmVzdWx0KTsKCQkJZWxzZSAkaW5wdXQudHJpZ2dlcigicmVzdWx0Iiwg
cmVzdWx0ICYmIFtyZXN1bHQuZGF0YSwgcmVzdWx0LnZhbHVlXSk7CgkJfQoJCSQu
ZWFjaCh0cmltV29yZHMoJGlucHV0LnZhbCgpKSwgZnVuY3Rpb24oaSwgdmFsdWUp
IHsKCQkJcmVxdWVzdCh2YWx1ZSwgZmluZFZhbHVlQ2FsbGJhY2ssIGZpbmRWYWx1
ZUNhbGxiYWNrKTsKCQl9KTsKCX0pLmJpbmQoImNsZWFyUHJldmlvdXNWYWx1ZSIs
IGZ1bmN0aW9uKCkgewoJCXByZXZpb3VzVmFsdWUgPSAiIjsKCX0pLmJpbmQoImZs
dXNoQ2FjaGUiLCBmdW5jdGlvbigpIHsKCQljYWNoZS5mbHVzaCgpOwoJfSkuYmlu
ZCgic2V0T3B0aW9ucyIsIGZ1bmN0aW9uKCkgewoJCSQuZXh0ZW5kKG9wdGlvbnMs
IGFyZ3VtZW50c1sxXSk7CgkJLy8gaWYgd2UndmUgdXBkYXRlZCB0aGUgZGF0YSwg
cmVwb3B1bGF0ZQoJCWlmICggImRhdGEiIGluIGFyZ3VtZW50c1sxXSApCgkJCWNh
Y2hlLnBvcHVsYXRlKCk7CgkJaWYgKGhhc0ZvY3VzKQoJCQkkaW5wdXQuY2xpY2so
KTsKCX0pLmJpbmQoInNldERhdGEiLCBmdW5jdGlvbigpIHsKCQlvcHRpb25zLmRh
dGEgPSBhcmd1bWVudHNbMV07CgoJCWlmKG9wdGlvbnMuZGF0YS5sZW5ndGgpIHsK
CQkJY2FjaGUucG9wdWxhdGUoKTsKCQl9IGVsc2UgewoJCQljYWNoZS5mbHVzaCgp
OwoJCX0KCgl9KS5iaW5kKCJ1bmF1dG9jb21wbGV0ZSIsIGZ1bmN0aW9uKCkgewoJ
CXNlbGVjdC51bmJpbmQoKTsKCQkkaW5wdXQudW5iaW5kKCk7CgkJJChpbnB1dC5m
b3JtKS51bmJpbmQoIi5hdXRvY29tcGxldGUiKTsKCX0pCgk7CgoJZnVuY3Rpb24g
c2VsZWN0Q3VycmVudChldmVudCkgewoJCXZhciBjdXJyZW50ID0gc2VsZWN0LmN1
cnJlbnQoKTsKCQl2YXIgc2VsZWN0ZWQgPSBzZWxlY3Quc2VsZWN0ZWQoKTsKCgkJ
aWYoICFzZWxlY3RlZCApCgkJCXJldHVybiBmYWxzZTsKCgkJdmFyIHYgPSBzZWxl
Y3RlZC5yZXN1bHQ7CgkJcHJldmlvdXNWYWx1ZSA9IHY7CgoJCXZhciBpbnB1dFZh
bHVlID0gJGlucHV0LnZhbCgpOwoKCQlpZiAob3B0aW9ucy5tdWx0aXBsZSkKCQl7
CgkJCXZhciB2YWx1ZSA9ICRpbnB1dC52YWwoKTsKCQkJdmFyIGEgPSAkLmdyZXAo
dHJpbVdvcmRzKHZhbHVlLnN1YnN0cigwLCBjYXJldFBvcy5zdGFydCkpLCAkLnRy
aW0pOwoJCQl2YXIgYiA9ICQuZ3JlcCh0cmltV29yZHModmFsdWUuc3Vic3RyKGNh
cmV0UG9zLmVuZCkpLCAkLnRyaW0pOwoJCQlhW2EubGVuZ3RoIC0gMV0gPSB2OwoJ
CQl2YXIgYyA9IGEuY29uY2F0KGIpOwoJCQl2ID0gYy5qb2luKG9wdGlvbnMubXVs
dGlwbGVTZXBhcmF0b3IpICsgb3B0aW9ucy5tdWx0aXBsZVNlcGFyYXRvcjsKCQl9
CgoJCSRpbnB1dC50cmlnZ2VySGFuZGxlcignc2VsZWN0dmFsdWUnLCBbdiwgY3Vy
cmVudF0pOwoJCSRpbnB1dC52YWwodik7CgoJCSQuQXV0b2NvbXBsZXRlci5TZWxl
Y3Rpb24oaW5wdXQsIGlucHV0LnZhbHVlLmxlbmd0aCwgaW5wdXQudmFsdWUubGVu
Z3RoKTsKCQloaWRlUmVzdWx0c05vdygpOwoJCSRpbnB1dC50cmlnZ2VyKCJyZXN1
bHQiLCBbc2VsZWN0ZWQuZGF0YSwgc2VsZWN0ZWQudmFsdWUsIGV2ZW50LCBpbnB1
dFZhbHVlXSk7CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gb25DaGFuZ2Uo
Y3JhcCwgc2tpcFByZXZDaGVjaykgewoKCQlpZiggbGFzdEtleVByZXNzQ29kZSA9
PSBLRVkuREVMICkgewoJCQlzZWxlY3QuaGlkZSgpOwoJCQlyZXR1cm47CgkJfQoK
CQl2YXIgY3VycmVudFZhbHVlID0gJGlucHV0LnZhbCgpOwoKCQlpZiAoICFza2lw
UHJldkNoZWNrICYmIGN1cnJlbnRWYWx1ZSA9PSBwcmV2aW91c1ZhbHVlICkKCQkJ
cmV0dXJuOwoKCQlwcmV2aW91c1ZhbHVlID0gY3VycmVudFZhbHVlOwoKCQlpZiAo
b3B0aW9ucy5tdWx0aXBsZSkKCQl7CgkJCWN1cnJlbnRWYWx1ZSA9IGxhc3RXb3Jk
QnlDYXJldFBvc2l0aW9uKGN1cnJlbnRWYWx1ZSk7CgkJfQoJCWVsc2UKCQl7CgkJ
CWN1cnJlbnRWYWx1ZSA9IGxhc3RXb3JkKGN1cnJlbnRWYWx1ZSk7CgkJfQoKCQlp
ZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS5sZW5ndGggPj0gb3B0aW9u
cy5taW5DaGFycykgewoJCQkkaW5wdXQuYWRkQ2xhc3Mob3B0aW9ucy5sb2FkaW5n
Q2xhc3MpOwoJCQlpZiAoIW9wdGlvbnMubWF0Y2hDYXNlKQoJCQkJY3VycmVudFZh
bHVlID0gY3VycmVudFZhbHVlLnRvTG93ZXJDYXNlKCk7CgkJCXJlcXVlc3QoY3Vy
cmVudFZhbHVlLCByZWNlaXZlRGF0YSwgaGlkZVJlc3VsdHNOb3cpOwoKCQl9IGVs
c2UgewoJCQlzdG9wTG9hZGluZygpOwoJCQlzZWxlY3QuaGlkZSgpOwoJCX0KCX07
CgoJZnVuY3Rpb24gdHJpbVdvcmRzKHZhbHVlKSB7CgoJCXZhciBhID0gdmFsdWUu
bWF0Y2goLyIuKj8iL2cpIHx8IFtdOwoJCXZhciByID0gW107CgkJdmFyIG8sIGks
IGw7CgoJCWZvciAoaT0wLCBsPWEubGVuZ3RoOyBpPGw7IGkrKykKCQl7CgkJCW8g
PSB7J2Zyb20nOiBhW2ldLCAndG8nOiBhW2ldLnJlcGxhY2Uob3B0aW9ucy5tdWx0
aXBsZVNlcGFyYXRvclBhdHRlcm4sICdfJyl9OwoJCQl2YWx1ZSA9IHZhbHVlLnJl
cGxhY2Uoby5mcm9tLCBvLnRvKTsKCQkJci5wdXNoKG8pOwoJCX0KCgkJdmFyIHIy
ID0gdmFsdWUuc3BsaXQob3B0aW9ucy5tdWx0aXBsZVNlcGFyYXRvclBhdHRlcm4p
OwoKCQlmb3IgKGk9MCwgbD1yMi5sZW5ndGg7IGk8bDsgaSsrKQoJCXsKCQkJZm9y
ICh2YXIgaTI9MCwgbDI9ci5sZW5ndGg7IGkyPGwyOyBpMisrKQoJCQl7CgkJCQly
MltpXSA9IHIyW2ldLnJlcGxhY2UocltpMl0udG8sIHJbaTJdLmZyb20pOwoJCQl9
CgoJCQlyMltpXSA9ICQudHJpbShyMltpXSk7CgkJfQoKCQlyZXR1cm4gcjI7Cgl9
CgoJJC5BdXRvY29tcGxldGVyLnRyaW1Xb3JkcyA9IHRyaW1Xb3JkczsKCglmdW5j
dGlvbiBsYXN0V29yZEJ5Q2FyZXRQb3NpdGlvbih2YWx1ZSkKCXsKCQljYXJldFBv
cyA9ICQuQXV0b2NvbXBsZXRlci5nZXRDYXJldFBvc2l0aW9uKGlucHV0KTsKCQly
ZXR1cm4gbGFzdFdvcmQodmFsdWUuc3Vic3RyKDAsIGNhcmV0UG9zLnN0YXJ0KSk7
Cgl9CgoJZnVuY3Rpb24gbGFzdFdvcmQodmFsdWUpIHsKCQlpZiAoICFvcHRpb25z
Lm11bHRpcGxlICkKCQkJcmV0dXJuIHZhbHVlOwoJCXZhciB3b3JkcyA9IHRyaW1X
b3Jkcyh2YWx1ZSk7CgkJcmV0dXJuIHdvcmRzW3dvcmRzLmxlbmd0aCAtIDFdOwoJ
fQoKCS8vIGZpbGxzIGluIHRoZSBpbnB1dCBib3ggdy90aGUgZmlyc3QgbWF0Y2gg
KGFzc3VtZWQgdG8gYmUgdGhlIGJlc3QgbWF0Y2gpCgkvLyBxOiB0aGUgdGVybSBl
bnRlcmVkCgkvLyBzVmFsdWU6IHRoZSBmaXJzdCBtYXRjaGluZyByZXN1bHQKCWZ1
bmN0aW9uIGF1dG9GaWxsKHEsIHNWYWx1ZSl7CgkJLy8gYXV0b2ZpbGwgaW4gdGhl
IGNvbXBsZXRlIGJveCB3L3RoZSBmaXJzdCBtYXRjaCBhcyBsb25nIGFzIHRoZSB1
c2VyIGhhc24ndCBlbnRlcmVkIGluIG1vcmUgZGF0YQoJCS8vIGlmIHRoZSBsYXN0
IHVzZXIga2V5IHByZXNzZWQgd2FzIGJhY2tzcGFjZSwgZG9uJ3QgYXV0b2ZpbGwK
CQlpZiggb3B0aW9ucy5hdXRvRmlsbCAmJiAobGFzdFdvcmQoJGlucHV0LnZhbCgp
KS50b0xvd2VyQ2FzZSgpID09IHEudG9Mb3dlckNhc2UoKSkgJiYgbGFzdEtleVBy
ZXNzQ29kZSAhPSBLRVkuQkFDS1NQQUNFICkgewoJCQkvLyBmaWxsIGluIHRoZSB2
YWx1ZSAoa2VlcCB0aGUgY2FzZSB0aGUgdXNlciBoYXMgdHlwZWQpCgkJCSRpbnB1
dC52YWwoJGlucHV0LnZhbCgpICsgc1ZhbHVlLnN1YnN0cmluZyhsYXN0V29yZChw
cmV2aW91c1ZhbHVlKS5sZW5ndGgpKTsKCQkJLy8gc2VsZWN0IHRoZSBwb3J0aW9u
IG9mIHRoZSB2YWx1ZSBub3QgdHlwZWQgYnkgdGhlIHVzZXIgKHNvIHRoZSBuZXh0
IGNoYXJhY3RlciB3aWxsIGVyYXNlKQoJCQkkLkF1dG9jb21wbGV0ZXIuU2VsZWN0
aW9uKGlucHV0LCBwcmV2aW91c1ZhbHVlLmxlbmd0aCwgcHJldmlvdXNWYWx1ZS5s
ZW5ndGggKyBzVmFsdWUubGVuZ3RoKTsKCQl9Cgl9OwoKCWZ1bmN0aW9uIGhpZGVS
ZXN1bHRzKCkgewoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0g
c2V0VGltZW91dChoaWRlUmVzdWx0c05vdywgMjAwKTsKCX07CgoJZnVuY3Rpb24g
aGlkZVJlc3VsdHNOb3coKSB7CgkJdmFyIHdhc1Zpc2libGUgPSBzZWxlY3Qudmlz
aWJsZSgpOwoJCXNlbGVjdC5oaWRlKCk7CgkJY2xlYXJUaW1lb3V0KHRpbWVvdXQp
OwoJCXN0b3BMb2FkaW5nKCk7CgkJaWYgKG9wdGlvbnMubXVzdE1hdGNoKSB7CgkJ
CS8vIGNhbGwgc2VhcmNoIGFuZCBydW4gY2FsbGJhY2sKCQkJJGlucHV0LnNlYXJj
aCgKCQkJCWZ1bmN0aW9uIChyZXN1bHQpewoJCQkJCS8vIGlmIG5vIHZhbHVlIGZv
dW5kLCBjbGVhciB0aGUgaW5wdXQgYm94CgkJCQkJaWYoICFyZXN1bHQgKSB7CgkJ
CQkJCWlmIChvcHRpb25zLm11bHRpcGxlKSB7CgkJCQkJCQl2YXIgd29yZHMgPSB0
cmltV29yZHMoJGlucHV0LnZhbCgpKS5zbGljZSgwLCAtMSk7CgkJCQkJCQkkaW5w
dXQudmFsKCB3b3Jkcy5qb2luKG9wdGlvbnMubXVsdGlwbGVTZXBhcmF0b3IpICsg
KHdvcmRzLmxlbmd0aCA/IG9wdGlvbnMubXVsdGlwbGVTZXBhcmF0b3IgOiAiIikg
KTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCQkkaW5wdXQudmFsKCAiIiApOwoJ
CQkJCX0KCQkJCX0KCQkJKTsKCQl9CgoJCWlmIChoYXNGb2N1cyAmJiB3YXNWaXNp
YmxlKQoJCXsKCQkJLy8gcG9zaXRpb24gY3Vyc29yIGF0IGVuZCBvZiBpbnB1dCBm
aWVsZAovLwkJCSQuQXV0b2NvbXBsZXRlci5TZWxlY3Rpb24oaW5wdXQsIGlucHV0
LnZhbHVlLmxlbmd0aCwgaW5wdXQudmFsdWUubGVuZ3RoKTsKCQl9Cgl9OwoKCWZ1
bmN0aW9uIHJlY2VpdmVEYXRhKHEsIGRhdGEpIHsKCQlpZiAoZGF0YSkKCQl7CgkJ
CWlmIChvcHRpb25zLmZpbHRlcikKCQkJCWRhdGEgPSAkLmdyZXAoZGF0YSwgb3B0
aW9ucy5maWx0ZXIsIGZhbHNlKTsKCQkJaWYgKGRhdGEubGVuZ3RoICYmIGhhc0Zv
Y3VzICkgewoJCQkJc3RvcExvYWRpbmcoKTsKCQkJCXNlbGVjdC5kaXNwbGF5KGRh
dGEsIHEpOwoJCQkJYXV0b0ZpbGwocSwgZGF0YVswXS52YWx1ZSk7CgkJCQlzZWxl
Y3Quc2hvdygpOwoJCQl9IGVsc2UgewoJCQkJaGlkZVJlc3VsdHNOb3coKTsKCQkJ
fQoJCX0KCQllbHNlCgkJewoJCQloaWRlUmVzdWx0c05vdygpOwoJCX0KCX07CgoJ
ZnVuY3Rpb24gcmVxdWVzdCh0ZXJtLCBzdWNjZXNzLCBmYWlsdXJlKSB7CgoJCWlm
ICghb3B0aW9ucy5tYXRjaENhc2UpCgkJCXRlcm0gPSB0ZXJtLnRvTG93ZXJDYXNl
KCk7CgkJdmFyIGRhdGEgPSBjYWNoZS5sb2FkKHRlcm0pOwoKCQkkaW5wdXQudHJp
Z2dlckhhbmRsZXIoJ2JlZm9yZXNlYXJjaCcsIFt0ZXJtLCBkYXRhXSk7CgoJCS8v
IHJlY2lldmUgdGhlIGNhY2hlZCBkYXRhCgkJaWYgKCQuaXNBcnJheShkYXRhKSkg
ewoJCQlzdWNjZXNzKHRlcm0sIGRhdGEpOwoJCS8vIGlmIGFuIEFKQVggdXJsIGhh
cyBiZWVuIHN1cHBsaWVkLCB0cnkgbG9hZGluZyB0aGUgZGF0YSBub3cKCQl9IGVs
c2UgaWYoICh0eXBlb2Ygb3B0aW9ucy51cmwgPT0gInN0cmluZyIpICYmIChvcHRp
b25zLnVybC5sZW5ndGggPiAwKSApewoKCQkJdmFyIGV4dHJhUGFyYW1zID0gewoJ
CQkJdGltZXN0YW1wOiArbmV3IERhdGUoKQoJCQl9OwoJCQkkLmVhY2gob3B0aW9u
cy5leHRyYVBhcmFtcywgZnVuY3Rpb24oa2V5LCBwYXJhbSkgewoJCQkJZXh0cmFQ
YXJhbXNba2V5XSA9IHR5cGVvZiBwYXJhbSA9PSAiZnVuY3Rpb24iID8gcGFyYW0o
KSA6IHBhcmFtOwoJCQl9KTsKCgkJCXZhciBwYXJhbXMgPSB7CgkJCQkvLyB0cnkg
dG8gbGV2ZXJhZ2UgYWpheFF1ZXVlIHBsdWdpbiB0byBhYm9ydCBwcmV2aW91cyBy
ZXF1ZXN0cwoJCQkJbW9kZTogImFib3J0IiwKCQkJCS8vIGxpbWl0IGFib3J0aW9u
IHRvIHRoaXMgaW5wdXQKCQkJCXBvcnQ6ICJhdXRvY29tcGxldGUiICsgaW5wdXQu
bmFtZSwKCQkJCWRhdGFUeXBlOiBvcHRpb25zLmRhdGFUeXBlLAoJCQkJdXJsOiBv
cHRpb25zLnVybCwKCQkJCWRhdGE6ICQuZXh0ZW5kKHsKCQkJCQlsaW1pdDogb3B0
aW9ucy5tYXgKCQkJCX0sIGV4dHJhUGFyYW1zKSwKCQkJCXN1Y2Nlc3M6IGZ1bmN0
aW9uKGRhdGEpIHsKCQkJCQl2YXIgcGFyc2VkID0gb3B0aW9ucy5wYXJzZSAmJiBv
cHRpb25zLnBhcnNlKGRhdGEpIHx8IHBhcnNlKGRhdGEpOwoJCQkJCWNhY2hlLmFk
ZCh0ZXJtLCBwYXJzZWQpOwoJCQkJCXN1Y2Nlc3ModGVybSwgcGFyc2VkKTsKCQkJ
CX0KCQkJfTsKCgkJCXBhcmFtcy5kYXRhW29wdGlvbnMucXVlcnlWYXJOYW1lXSA9
IG9wdGlvbnMucHJlcGFyZVF1ZXJ5KGxhc3RXb3JkKHRlcm0pKTsKCgkJCSQuYWph
eChwYXJhbXMpOwoJCX0gZWxzZSB7CgkJCS8vIGlmIHdlIGhhdmUgYSBmYWlsdXJl
LCB3ZSBuZWVkIHRvIGVtcHR5IHRoZSBsaXN0IC0tIHRoaXMgcHJldmVudHMgdGhl
IHRoZSBbVEFCXSBrZXkgZnJvbSBzZWxlY3RpbmcgdGhlIGxhc3Qgc3VjY2Vzc2Z1
bCBtYXRjaAoJCQlzZWxlY3QuZW1wdHlMaXN0KCk7CgkJCSRpbnB1dC50cmlnZ2Vy
SGFuZGxlcignZmFpbHNlYXJjaCcsIFt0ZXJtXSk7CgkJCWZhaWx1cmUodGVybSk7
CgkJfQoJfQoKCWZ1bmN0aW9uIHBhcnNlKGRhdGEpIHsKCQl2YXIgcGFyc2VkID0g
W107CgkJdmFyIHJvd3MgPSBkYXRhLnNwbGl0KCJcbiIpOwoJCWZvciAodmFyIGk9
MDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKCQkJdmFyIHJvdyA9ICQudHJpbShy
b3dzW2ldKTsKCQkJaWYgKHJvdykgewoJCQkJcm93ID0gcm93LnNwbGl0KCJ8Iik7
CgkJCQlwYXJzZWRbcGFyc2VkLmxlbmd0aF0gPSB7CgkJCQkJZGF0YTogcm93LAoJ
CQkJCXZhbHVlOiByb3dbMF0sCgkJCQkJcmVzdWx0OiBvcHRpb25zLmZvcm1hdFJl
c3VsdCAmJiBvcHRpb25zLmZvcm1hdFJlc3VsdChyb3csIHJvd1swXSkgfHwgcm93
WzBdCgkJCQl9OwoJCQl9CgkJfQoJCXJldHVybiBwYXJzZWQ7Cgl9OwoKCWZ1bmN0
aW9uIHN0b3BMb2FkaW5nKCkgewoJCSRpbnB1dC5yZW1vdmVDbGFzcyhvcHRpb25z
LmxvYWRpbmdDbGFzcyk7Cgl9OwoKfTsKCiQuQXV0b2NvbXBsZXRlci5kZWZhdWx0
cyA9IHsKCXByZXBhcmVRdWVyeTogZnVuY3Rpb24odGVybSkgeyByZXR1cm4gdGVy
bTsgfSwKCXF1ZXJ5VmFyTmFtZTogJ3EnLAoJcGFyZW50OiAkKGRvY3VtZW50LmJv
ZHkpLAoJaW5wdXRDbGFzczogImFjX2lucHV0IiwKCXJlc3VsdHNDbGFzczogImFj
X3Jlc3VsdHMiLAoJcmVzdWx0TGlzdENsYXNzOiAnJywKCXJlc3VsdExpc3RJdGVt
OiAnJywKCXJlc3VsdHNBY3RpdmVDbGFzczogImFjX292ZXIiLAoJbG9hZGluZ0Ns
YXNzOiAiYWNfbG9hZGluZyIsCgltaW5DaGFyczogMSwKCWRlbGF5OiA0MDAsCglt
YXRjaENhc2U6IGZhbHNlLAoJbWF0Y2hTdWJzZXQ6IHRydWUsCgltYXRjaENvbnRh
aW5zOiBmYWxzZSwKCWNhY2hlTGVuZ3RoOiAxMCwKCW1heDogMTAwLAoJbXVzdE1h
dGNoOiBmYWxzZSwKCWV4dHJhUGFyYW1zOiB7fSwKCXNlbGVjdEZpcnN0OiB0cnVl
LAoJZm9ybWF0SXRlbTogZnVuY3Rpb24ocm93KSB7IHJldHVybiByb3dbMF07IH0s
Cglmb3JtYXRNYXRjaDogbnVsbCwKCWF1dG9GaWxsOiBmYWxzZSwKCXdpZHRoOiAw
LAoJbXVsdGlwbGU6IGZhbHNlLAoJbXVsdGlwbGVTZXBhcmF0b3I6ICIsICIsCglo
aWdobGlnaHQ6IGZ1bmN0aW9uKHZhbHVlLCB0ZXJtKSB7CgkJcmV0dXJuIHZhbHVl
LnJlcGxhY2UobmV3IFJlZ0V4cCgiKD8hW14mO10rOykoPyE8W148Pl0qKSgiICsg
U3RyaW5nLnByZWdfcXVvdGUodGVybSkgKyAiKSg/IVtePD5dKj4pKD8hW14mO10r
OykiLCAiZ2kiKSwgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKCX0sCglzY3JvbGw6
IHRydWUsCglzY3JvbGxIZWlnaHQ6IDE4MAp9OwoKJC5BdXRvY29tcGxldGVyLkNh
Y2hlID0gZnVuY3Rpb24ob3B0aW9ucykgewoKCXZhciBkYXRhID0ge30sIGxlbmd0
aCA9IDA7CgoJZnVuY3Rpb24gbWF0Y2hTdWJzZXQocywgc3ViKSB7CgoJCWlmICgh
b3B0aW9ucy5tYXRjaENhc2UpIHsKCQkJcyA9IHMudG9Mb3dlckNhc2UoKTsKCQkJ
c3ViID0gc3ViLnRvTG93ZXJDYXNlKCk7CgkJfQoKCQl2YXIgaSA9IHMuaW5kZXhP
ZihzdWIpOwoKCQlpZiAob3B0aW9ucy5tYXRjaENvbnRhaW5zID09ICd3b3JkJykg
ewoJCQlzLnJlcGxhY2UoL14iPyguKj8pIj9ccys8KC4qPyk+JC8sIGZ1bmN0aW9u
KG0wLCBtMSwgbTIpIHsKCQkJCXZhciBwID0gL1tcLlxzXS8sIGEgPSBtMS5zcGxp
dChwKS5jb25jYXQobTIuc3BsaXQoL0AvKVswXS5zcGxpdChwKSkuY29uY2F0KFtt
MSwgbTJdKTsKCQkJCWZvciAodmFyIGw9YS5sZW5ndGg7IGwtLTsgKSB7CgkJCQkJ
aWYgKChpID0gYVtsXS5pbmRleE9mKHN1YikpID09PSAwKSB7CgkJCQkJCWJyZWFr
OwoJCQkJCX0KCQkJCX0KCQkJfSkKCQl9CgoJCXJldHVybiBpID09PSAwOwoJfQoK
CWZ1bmN0aW9uIGFkZChxLCB2YWx1ZSkgewoJCWlmIChsZW5ndGggPiBvcHRpb25z
LmNhY2hlTGVuZ3RoKXsKCQkJZmx1c2goKTsKCQl9CgkJaWYgKCFkYXRhW3FdKXsK
CQkJbGVuZ3RoKys7CgkJfQoJCWRhdGFbcV0gPSB2YWx1ZTsKCX0KCglmdW5jdGlv
biBwb3B1bGF0ZSgpewoJCWlmKCAhb3B0aW9ucy5kYXRhICkgcmV0dXJuIGZhbHNl
OwoKCQkvLyB0cmFjayB0aGUgbWF0Y2hlcwoJCXZhciBzdE1hdGNoU2V0cyA9IHt9
LAoJCQludWxsRGF0YSA9IDA7CgoJCS8vIG5vIHVybCB3YXMgc3BlY2lmaWVkLCB3
ZSBuZWVkIHRvIGFkanVzdCB0aGUgY2FjaGUgbGVuZ3RoIHRvIG1ha2Ugc3VyZSBp
dCBmaXRzIHRoZSBsb2NhbCBkYXRhIHN0b3JlCgkJaWYoICFvcHRpb25zLnVybCAp
IG9wdGlvbnMuY2FjaGVMZW5ndGggPSAxOwoKCQkvLyB0cmFjayBhbGwgb3B0aW9u
cyBmb3IgbWluQ2hhcnMgPSAwCgkJc3RNYXRjaFNldHNbIiJdID0gW107CgoJCS8v
IGxvb3AgdGhyb3VnaCB0aGUgYXJyYXkgYW5kIGNyZWF0ZSBhIGxvb2t1cCBzdHJ1
Y3R1cmUKCQlmb3IgKCB2YXIgaSA9IDAsIG9sID0gb3B0aW9ucy5kYXRhLmxlbmd0
aDsgaSA8IG9sOyBpKysgKSB7CgkJCXZhciByYXdWYWx1ZSA9IG9wdGlvbnMuZGF0
YVtpXTsKCQkJLy8gaWYgcmF3VmFsdWUgaXMgYSBzdHJpbmcsIG1ha2UgYW4gYXJy
YXkgb3RoZXJ3aXNlIGp1c3QgcmVmZXJlbmNlIHRoZSBhcnJheQoJCQlyYXdWYWx1
ZSA9ICh0eXBlb2YgcmF3VmFsdWUgPT0gInN0cmluZyIpID8gW3Jhd1ZhbHVlXSA6
IHJhd1ZhbHVlOwoKCQkJdmFyIHZhbHVlID0gb3B0aW9ucy5mb3JtYXRNYXRjaChy
YXdWYWx1ZSwgaSsxLCBvcHRpb25zLmRhdGEubGVuZ3RoKTsKCQkJaWYgKCB2YWx1
ZSA9PT0gZmFsc2UgKQoJCQkJY29udGludWU7CgoJCQl2YXIgZmlyc3RDaGFyID0g
dmFsdWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7CgoJCQlpZiAob3B0aW9ucy5y
YXdMaXN0KSB7CgkJCQlmaXJzdENoYXIgPSAiXyI7CgkJCX0KCgkJCS8vIGlmIG5v
IGxvb2t1cCBhcnJheSBmb3IgdGhpcyBjaGFyYWN0ZXIgZXhpc3RzLCBsb29rIGl0
IHVwIG5vdwoJCQlpZiggIXN0TWF0Y2hTZXRzW2ZpcnN0Q2hhcl0gKQoJCQkJc3RN
YXRjaFNldHNbZmlyc3RDaGFyXSA9IFtdOwoKCQkJLy8gaWYgdGhlIG1hdGNoIGlz
IGEgc3RyaW5nCgkJCXZhciByb3cgPSB7CgkJCQl2YWx1ZTogdmFsdWUsCgkJCQlk
YXRhOiByYXdWYWx1ZSwKCQkJCXJlc3VsdDogb3B0aW9ucy5mb3JtYXRSZXN1bHQg
JiYgb3B0aW9ucy5mb3JtYXRSZXN1bHQocmF3VmFsdWUpIHx8IHZhbHVlCgkJCX07
CgoJCQkvLyBwdXNoIHRoZSBjdXJyZW50IG1hdGNoIGludG8gdGhlIHNldCBsaXN0
CgkJCXN0TWF0Y2hTZXRzW2ZpcnN0Q2hhcl0ucHVzaChyb3cpOwoKCQkJLy8ga2Vl
cCB0cmFjayBvZiBtaW5DaGFycyB6ZXJvIGl0ZW1zCgkJCWlmICggbnVsbERhdGEr
KyA8IG9wdGlvbnMubWF4ICkgewoJCQkJc3RNYXRjaFNldHNbIiJdLnB1c2gocm93
KTsKCQkJfQoJCX07CgoJCS8vIGFkZCB0aGUgZGF0YSBpdGVtcyB0byB0aGUgY2Fj
aGUKCQkkLmVhY2goc3RNYXRjaFNldHMsIGZ1bmN0aW9uKGksIHZhbHVlKSB7CgkJ
CS8vIGluY3JlYXNlIHRoZSBjYWNoZSBzaXplCgkJCW9wdGlvbnMuY2FjaGVMZW5n
dGgrKzsKCQkJLy8gYWRkIHRvIHRoZSBjYWNoZQoJCQlhZGQoaSwgdmFsdWUpOwoJ
CX0pOwoJfQoKCS8vIHBvcHVsYXRlIGFueSBleGlzdGluZyBkYXRhCglzZXRUaW1l
b3V0KHBvcHVsYXRlLCAyNSk7CgoJZnVuY3Rpb24gZmx1c2goKXsKCQlkYXRhID0g
e307CgkJbGVuZ3RoID0gMDsKCX0KCglyZXR1cm4gewoJCWZsdXNoOiBmbHVzaCwK
CQlhZGQ6IGFkZCwKCQlwb3B1bGF0ZTogcG9wdWxhdGUsCgkJbG9hZDogZnVuY3Rp
b24ocSkgewoKCQkJdmFyIHJlc3VsdCA9IFtdLCBjLCBrLCBpLCByZWdleHAgPSAk
LkF1dG9jb21wbGV0ZXIuQ3JlYXRlRmluZFJlZ0V4cChxKTsKCgkJCWlmICghb3B0
aW9ucy5jYWNoZUxlbmd0aCB8fCAhbGVuZ3RoKSB7CgkJCQlyZXR1cm4gcmVzdWx0
OwoJCQl9CgoJCQkvKgoJCQkgKiBpZiBkZWFsaW5nIHcvbG9jYWwgZGF0YSBhbmQg
bWF0Y2hDb250YWlucyB0aGFuIHdlIG11c3QgbWFrZSBzdXJlCgkJCSAqIHRvIGxv
b3AgdGhyb3VnaCBhbGwgdGhlIGRhdGEgY29sbGVjdGlvbnMgbG9va2luZyBmb3Ig
bWF0Y2hlcwoJCQkgKi8KCQkJaWYgKCFvcHRpb25zLnVybCAmJiBvcHRpb25zLm1h
dGNoQ29udGFpbnMgKSB7CgkJCQkvLyBsb29wIHRocm91Z2ggYWxsIHRoZSBkYXRh
IGdyaWRzIGZvciBtYXRjaGVzCgkJCQlmb3IgKGsgaW4gZGF0YSApIHsKCQkJCQkv
LyBkb24ndCBzZWFyY2ggdGhyb3VnaCB0aGUgc3RNYXRjaFNldHNbIiJdIChtaW5D
aGFyczogMCkgY2FjaGUKCQkJCQkvLyB0aGlzIHByZXZlbnRzIGR1cGxpY2F0ZXMK
CQkJCQlpZiAoay5sZW5ndGggPiAwKSB7CgkJCQkJCWMgPSBkYXRhW2tdOwoJCQkJ
CQlpID0gMDsKCQkJCQkJZm9yKCB2YXIgbGVuID0gYy5sZW5ndGgsIHggOyBpIDwg
bGVuIDsgaSsrICkgewoJCQkJCQkJeCA9IGNbaV07CgkJCQkJCQlpZiAoJC5BdXRv
Y29tcGxldGVyLk1hdGNoU3Vic2V0QnlSZWdFeHAoeC52YWx1ZSwgcmVnZXhwKSkg
ewoJCQkJCQkJCXJlc3VsdC5wdXNoKHgpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJ
fQoJCQkJfQoJCQl9IGVsc2UgaWYgKGRhdGFbcV0pIHsgLy8gaWYgdGhlIGV4YWN0
IGl0ZW0gZXhpc3RzLCB1c2UgaXQKCQkJCXJlc3VsdCA9IGRhdGFbcV07CgkJCX0g
ZWxzZSBpZiAob3B0aW9ucy5tYXRjaFN1YnNldCkgewoJCQkJZm9yIChpID0gcS5s
ZW5ndGggLSAxOyBpID49IG9wdGlvbnMubWluQ2hhcnM7IGktLSkgewoJCQkJCWMg
PSBkYXRhW3Euc3Vic3RyKDAsIGkpXTsKCQkJCQlpZiAoYykgewoJCQkJCQlyZXN1
bHQgPSBbXTsKCQkJCQkJJC5lYWNoKGMsIGZ1bmN0aW9uKGksIHgpIHsKCQkJCQkJ
CWlmIChtYXRjaFN1YnNldCh4LnZhbHVlLCBxKSkgewoJCQkJCQkJCXJlc3VsdFty
ZXN1bHQubGVuZ3RoXSA9IHg7CgkJCQkJCQl9CgkJCQkJCX0pOwoJCQkJCX0KCQkJ
CX0KCQkJfQoKCQkJcmV0dXJuIHJlc3VsdDsKCQl9Cgl9Owp9OwoKJC5BdXRvY29t
cGxldGVyLlNlbGVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBpbnB1dCwgc2VsZWN0
LCBjb25maWcpIHsKCXZhciBsaXN0SXRlbXMsCgkJYWN0aXZlID0gLTEsCgkJZGF0
YSwKCQl0ZXJtID0gIiIsCgkJbmVlZHNJbml0ID0gdHJ1ZSwKCQllbGVtZW50LAoJ
CWxpc3Q7CgoJLy8gQ3JlYXRlIHJlc3VsdHMKCWZ1bmN0aW9uIGluaXQoKSB7CgkJ
aWYgKCFuZWVkc0luaXQpIHsKCQkJcmV0dXJuOwoJCX0KCgkJZWxlbWVudCA9ICQo
IjxkaXYvPiIpLmFkZENsYXNzKG9wdGlvbnMucmVzdWx0c0NsYXNzKS5hcHBlbmRU
byhvcHRpb25zLnBhcmVudCk7CgoJCWlmIChvcHRpb25zLnBhcmVudC5pcygnQk9E
WScpKSB7CgkJCWVsZW1lbnQuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpLmhp
ZGUoKTsKCQl9IGVsc2UgewoJCQlvcHRpb25zLnBhcmVudC5oaWRlKCk7CgkJfQoK
CQlsaXN0ID0gJCgnPHVsIGNsYXNzPSInK29wdGlvbnMucmVzdWx0TGlzdENsYXNz
KyciPjwvdWw+Jyk7CgkJbGlzdC5hcHBlbmRUbyhlbGVtZW50KTsKCgkJbGlzdC5t
b3VzZW92ZXIoIGZ1bmN0aW9uKGV2ZW50KSB7CgkJCWlmKHRhcmdldChldmVudCku
bm9kZU5hbWUgJiYgdGFyZ2V0KGV2ZW50KS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgp
ID09ICdMSScpIHsKCQkJCWFjdGl2ZSA9ICQoImxpIiwgbGlzdCkucmVtb3ZlQ2xh
c3Mob3B0aW9ucy5yZXN1bHRzQWN0aXZlQ2xhc3MpLmluZGV4KHRhcmdldChldmVu
dCkpOwoJCQkJJCh0YXJnZXQoZXZlbnQpKS5hZGRDbGFzcyhvcHRpb25zLnJlc3Vs
dHNBY3RpdmVDbGFzcyk7CgkJCX0KCgkJfSkuY2xpY2soZnVuY3Rpb24oZXZlbnQp
IHsKCQkJJCh0YXJnZXQoZXZlbnQpKS5hZGRDbGFzcyhvcHRpb25zLnJlc3VsdHNB
Y3RpdmVDbGFzcyk7CgkJCXNlbGVjdChldmVudCk7CgkJCS8vIFRPRE8gcHJvdmlk
ZSBvcHRpb24gdG8gYXZvaWQgc2V0dGluZyBmb2N1cyBhZ2FpbiBhZnRlciBzZWxl
Y3Rpb24/IHVzZWZ1bCBmb3IgY2xlYW51cC1vbi1mb2N1cwoJCQlpbnB1dC5mb2N1
cygpOwoJCQlyZXR1cm4gZmFsc2U7CgoJCX0pLm1vdXNlZG93bihmdW5jdGlvbigp
IHsKCQkJY29uZmlnLm1vdXNlRG93bk9uU2VsZWN0ID0gdHJ1ZTsKCgkJfSkubW91
c2V1cChmdW5jdGlvbigpIHsKCQkJY29uZmlnLm1vdXNlRG93bk9uU2VsZWN0ID0g
ZmFsc2U7CgkJfSk7CgoJCWlmKCBvcHRpb25zLndpZHRoID4gMCApIHsKCQkJZWxl
bWVudC5jc3MoIndpZHRoIiwgb3B0aW9ucy53aWR0aCk7CgkJfQoKCQluZWVkc0lu
aXQgPSBmYWxzZTsKCX0KCglmdW5jdGlvbiB0YXJnZXQoZXZlbnQpIHsKCQl2YXIg
ZWxlbWVudCA9IGV2ZW50LnRhcmdldDsKCQl3aGlsZShlbGVtZW50ICYmIGVsZW1l
bnQudGFnTmFtZSAhPSAiTEkiKQoJCQllbGVtZW50ID0gZWxlbWVudC5wYXJlbnRO
b2RlOwoJCS8vIG1vcmUgZnVuIHdpdGggSUUsIHNvbWV0aW1lcyBldmVudC50YXJn
ZXQgaXMgZW1wdHksIGp1c3QgaWdub3JlIGl0IHRoZW4KCQlpZighZWxlbWVudCkK
CQkJcmV0dXJuIFtdOwoJCXJldHVybiBlbGVtZW50OwoJfQoKCWZ1bmN0aW9uIG1v
dmVTZWxlY3Qoc3RlcCkgewoJCWxpc3RJdGVtcy5zbGljZShhY3RpdmUsIGFjdGl2
ZSArIDEpLnJlbW92ZUNsYXNzKG9wdGlvbnMucmVzdWx0c0FjdGl2ZUNsYXNzKTsK
CQltb3ZlUG9zaXRpb24oc3RlcCk7CgkJdmFyIGFjdGl2ZUl0ZW0gPSBsaXN0SXRl
bXMuc2xpY2UoYWN0aXZlLCBhY3RpdmUgKyAxKS5hZGRDbGFzcyhvcHRpb25zLnJl
c3VsdHNBY3RpdmVDbGFzcyk7CgkJaWYob3B0aW9ucy5zY3JvbGwpIHsKCQkJdmFy
IG9mZnNldCA9IDA7CgkJCWxpc3RJdGVtcy5zbGljZSgwLCBhY3RpdmUpLmVhY2go
ZnVuY3Rpb24oKSB7CgkJCQlvZmZzZXQgKz0gdGhpcy5vZmZzZXRIZWlnaHQ7CgkJ
CX0pOwoJCQlpZigob2Zmc2V0ICsgYWN0aXZlSXRlbVswXS5vZmZzZXRIZWlnaHQg
LSBsaXN0LnNjcm9sbFRvcCgpKSA+IGxpc3RbMF0uY2xpZW50SGVpZ2h0KSB7CgkJ
CQlsaXN0LnNjcm9sbFRvcChvZmZzZXQgKyBhY3RpdmVJdGVtWzBdLm9mZnNldEhl
aWdodCAtIGxpc3QuaW5uZXJIZWlnaHQoKSk7CgkJCX0gZWxzZSBpZihvZmZzZXQg
PCBsaXN0LnNjcm9sbFRvcCgpKSB7CgkJCQlsaXN0LnNjcm9sbFRvcChvZmZzZXQp
OwoJCQl9CgkJfQoJfTsKCglmdW5jdGlvbiBtb3ZlUG9zaXRpb24oc3RlcCkgewoJ
CWFjdGl2ZSArPSBzdGVwOwoJCWlmIChhY3RpdmUgPCAwKSB7CgkJCWFjdGl2ZSA9
IGxpc3RJdGVtcy5zaXplKCkgLSAxOwoJCX0gZWxzZSBpZiAoYWN0aXZlID49IGxp
c3RJdGVtcy5zaXplKCkpIHsKCQkJYWN0aXZlID0gMDsKCQl9Cgl9CgoJZnVuY3Rp
b24gbGltaXROdW1iZXJPZkl0ZW1zKGF2YWlsYWJsZSkgewoJCXJldHVybiBvcHRp
b25zLm1heCAmJiBvcHRpb25zLm1heCA8IGF2YWlsYWJsZQoJCQk/IG9wdGlvbnMu
bWF4CgkJCTogYXZhaWxhYmxlOwoJfQoKCWZ1bmN0aW9uIGZpbGxMaXN0KCkgewoJ
CWxpc3QuZW1wdHkoKTsKCgkJdmFyIG1heCA9IGxpbWl0TnVtYmVyT2ZJdGVtcyhk
YXRhLmxlbmd0aCk7CgkJZm9yICh2YXIgaT0wOyBpIDwgbWF4OyBpKyspIHsKCQkJ
aWYgKCFkYXRhW2ldKSB7CgkJCQljb250aW51ZTsKCQkJfQoKCQkJdmFyIGZvcm1h
dHRlZCA9IG9wdGlvbnMuZm9ybWF0SXRlbShkYXRhW2ldLmRhdGEsIGkrMSwgbWF4
LCBkYXRhW2ldLnZhbHVlLCB0ZXJtKTsKCQkJaWYgKCBmb3JtYXR0ZWQgPT09IGZh
bHNlICkgewoJCQkJY29udGludWU7CgkJCX0KCgkJCXZhciBsaSA9ICQoJzxsaSBj
bGFzcz0iJytvcHRpb25zLnJlc3VsdExpc3RJdGVtICsgJyAnICsgKGklMiA9PSAw
ID8gImFjX2V2ZW4iIDogImFjX29kZCIpICsgJyI+JyArIG9wdGlvbnMuaGlnaGxp
Z2h0KGZvcm1hdHRlZCwgdGVybSkgKyAnPC9saT4nKTsKCQkJbGlzdC5hcHBlbmQo
bGkpOwoKCQkJJC5kYXRhKGxpWzBdLCAiYWNfZGF0YSIsIGRhdGFbaV0pOwoJCX0K
CgkJbGlzdEl0ZW1zID0gbGlzdC5maW5kKCJsaSIpOwoJCWlmICggb3B0aW9ucy5z
ZWxlY3RGaXJzdCApIHsKCQkJbGlzdEl0ZW1zLnNsaWNlKDAsIDEpLmFkZENsYXNz
KG9wdGlvbnMucmVzdWx0c0FjdGl2ZUNsYXNzKTsKCQkJYWN0aXZlID0gMDsKCQl9
CgkJLy8gYXBwbHkgYmdpZnJhbWUgaWYgYXZhaWxhYmxlCgkJaWYgKCAkLmZuLmJn
aWZyYW1lICkgewoJCQlsaXN0LmJnaWZyYW1lKCk7CgkJfQoJfQoKCXJldHVybiB7
CgkJZGlzcGxheTogZnVuY3Rpb24oZCwgcSkgewoJCQlpbml0KCk7CgkJCWRhdGEg
PSBkOwoJCQl0ZXJtID0gcTsKCQkJZmlsbExpc3QoKTsKCQl9LAoJCW5leHQ6IGZ1
bmN0aW9uKCkgewoJCQltb3ZlU2VsZWN0KDEpOwoJCX0sCgkJcHJldjogZnVuY3Rp
b24oKSB7CgkJCW1vdmVTZWxlY3QoLTEpOwoJCX0sCgkJcGFnZVVwOiBmdW5jdGlv
bigpIHsKCQkJaWYgKGFjdGl2ZSAhPSAwICYmIGFjdGl2ZSAtIDggPCAwKSB7CgkJ
CQltb3ZlU2VsZWN0KCAtYWN0aXZlICk7CgkJCX0gZWxzZSB7CgkJCQltb3ZlU2Vs
ZWN0KC04KTsKCQkJfQoJCX0sCgkJcGFnZURvd246IGZ1bmN0aW9uKCkgewoJCQlp
ZiAoYWN0aXZlICE9IGxpc3RJdGVtcy5zaXplKCkgLSAxICYmIGFjdGl2ZSArIDgg
PiBsaXN0SXRlbXMuc2l6ZSgpKSB7CgkJCQltb3ZlU2VsZWN0KCBsaXN0SXRlbXMu
c2l6ZSgpIC0gMSAtIGFjdGl2ZSApOwoJCQl9IGVsc2UgewoJCQkJbW92ZVNlbGVj
dCg4KTsKCQkJfQoJCX0sCgkJaGlkZTogZnVuY3Rpb24oKSB7CgkJCWlmIChvcHRp
b25zLnBhcmVudC5pcygnQk9EWScpKQoJCQkJZWxlbWVudCAmJiBlbGVtZW50Lmhp
ZGUoKTsKCQkJZWxzZQoJCQkJb3B0aW9ucy5wYXJlbnQuaGlkZSgpOwoJCQlsaXN0
SXRlbXMgJiYgbGlzdEl0ZW1zLnJlbW92ZUNsYXNzKG9wdGlvbnMucmVzdWx0c0Fj
dGl2ZUNsYXNzKTsKCQkJb3B0aW9ucy5wYXJlbnQucGFyZW50KCkuYW5kU2VsZigp
LmNzcygnekluZGV4JywgJycpOwoJCQlhY3RpdmUgPSAtMTsKCQl9LAoJCXZpc2li
bGUgOiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5p
cygiOnZpc2libGUiKTsKCQl9LAoJCWN1cnJlbnQ6IGZ1bmN0aW9uKCkgewoJCQly
ZXR1cm4gdGhpcy52aXNpYmxlKCkgJiYgKGxpc3RJdGVtcy5maWx0ZXIoIi4iICsg
b3B0aW9ucy5yZXN1bHRzQWN0aXZlQ2xhc3MpWzBdIHx8IG9wdGlvbnMuc2VsZWN0
Rmlyc3QgJiYgbGlzdEl0ZW1zWzBdKTsKCQl9LAoJCXNob3c6IGZ1bmN0aW9uKCkg
ewoJCQl2YXIgb2Zmc2V0ID0gJChpbnB1dCkub2Zmc2V0KCk7CgkJCWlmIChvcHRp
b25zLnBhcmVudC5pcygnQk9EWScpKQoJCQl7CgkJCQllbGVtZW50LmNzcyh7CgkJ
CQkJd2lkdGg6IHR5cGVvZiBvcHRpb25zLndpZHRoID09ICJzdHJpbmciIHx8IG9w
dGlvbnMud2lkdGggPiAwID8gb3B0aW9ucy53aWR0aCA6ICQoaW5wdXQpLndpZHRo
KCksCgkJCQkJdG9wOiBvZmZzZXQudG9wICsgaW5wdXQub2Zmc2V0SGVpZ2h0LAoJ
CQkJCWxlZnQ6IG9mZnNldC5sZWZ0CgkJCQl9KS5zaG93KCk7CgkJCX0KCQkJZWxz
ZQoJCQkJb3B0aW9ucy5wYXJlbnQuc2hvdygpOwoKCQkJb3B0aW9ucy5wYXJlbnQu
cGFyZW50KCkuYW5kU2VsZigpLmNzcygnekluZGV4JywgMzAwMDApOwoKCQkJaWYo
b3B0aW9ucy5zY3JvbGwpIHsKCQkJCWxpc3Quc2Nyb2xsVG9wKDApOwoJCQkJbGlz
dC5jc3MoewoJCQkJCW1heEhlaWdodDogb3B0aW9ucy5zY3JvbGxIZWlnaHQsCgkJ
CQkJb3ZlcmZsb3c6ICdhdXRvJwoJCQkJfSk7CgoJCQkJaWYoJC5icm93c2VyLm1z
aWUgJiYgdHlwZW9mIGRvY3VtZW50LmJvZHkuc3R5bGUubWF4SGVpZ2h0ID09PSAi
dW5kZWZpbmVkIikgewoJCQkJCXZhciBsaXN0SGVpZ2h0ID0gMDsKCQkJCQlsaXN0
SXRlbXMuZWFjaChmdW5jdGlvbigpIHsKCQkJCQkJbGlzdEhlaWdodCArPSB0aGlz
Lm9mZnNldEhlaWdodDsKCQkJCQl9KTsKCQkJCQl2YXIgc2Nyb2xsYmFyc1Zpc2li
bGUgPSBsaXN0SGVpZ2h0ID4gb3B0aW9ucy5zY3JvbGxIZWlnaHQ7CgkJCQkJbGlz
dC5jc3MoJ2hlaWdodCcsIHNjcm9sbGJhcnNWaXNpYmxlID8gb3B0aW9ucy5zY3Jv
bGxIZWlnaHQgOiBsaXN0SGVpZ2h0ICk7CgkJCQkJaWYgKCFzY3JvbGxiYXJzVmlz
aWJsZSkgewoJCQkJCQkvLyBJRSBkb2Vzbid0IHJlY2FsY3VsYXRlIHdpZHRoIHdo
ZW4gc2Nyb2xsYmFyIGRpc2FwcGVhcnMKCQkJCQkJbGlzdEl0ZW1zLndpZHRoKCBs
aXN0LndpZHRoKCkgLSBwYXJzZUludChsaXN0SXRlbXMuY3NzKCJwYWRkaW5nLWxl
ZnQiKSkgLSBwYXJzZUludChsaXN0SXRlbXMuY3NzKCJwYWRkaW5nLXJpZ2h0Iikp
ICk7CgkJCQkJfQoJCQkJfQoKCQkJfQoJCX0sCgkJc2VsZWN0ZWQ6IGZ1bmN0aW9u
KCkgewoJCQl2YXIgc2VsZWN0ZWQgPSBsaXN0SXRlbXMgJiYgbGlzdEl0ZW1zLmZp
bHRlcigiLiIgKyBvcHRpb25zLnJlc3VsdHNBY3RpdmVDbGFzcykucmVtb3ZlQ2xh
c3Mob3B0aW9ucy5yZXN1bHRzQWN0aXZlQ2xhc3MpOwoJCQlyZXR1cm4gc2VsZWN0
ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoICYmICQuZGF0YShzZWxlY3RlZFswXSwgImFj
X2RhdGEiKTsKCQl9LAoJCWVtcHR5TGlzdDogZnVuY3Rpb24gKCl7CgkJCWxpc3Qg
JiYgbGlzdC5lbXB0eSgpOwoJCX0sCgkJdW5iaW5kOiBmdW5jdGlvbigpIHsKCQkJ
ZWxlbWVudCAmJiBlbGVtZW50LnJlbW92ZSgpOwoJCX0KCX07Cn07CgokLkF1dG9j
b21wbGV0ZXIuU2VsZWN0aW9uID0gZnVuY3Rpb24oZmllbGQsIHN0YXJ0LCBlbmQp
IHsKCWlmKCBlbmQgPT09IHVuZGVmICl7CgkJZW5kID0gc3RhcnQ7Cgl9Cgl0cnkg
ewoJCWlmKCBmaWVsZC5jcmVhdGVUZXh0UmFuZ2UgKXsKCQkJdmFyIHNlbFJhbmdl
ID0gZmllbGQuY3JlYXRlVGV4dFJhbmdlKCk7CgkJCXNlbFJhbmdlLmNvbGxhcHNl
KHRydWUpOwoJCQlzZWxSYW5nZS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIHN0YXJ0
KTsKCQkJc2VsUmFuZ2UubW92ZUVuZCgiY2hhcmFjdGVyIiwgZW5kIC0gc3RhcnQp
OwoJCQlzZWxSYW5nZS5zZWxlY3QoKTsKCQl9IGVsc2UgaWYoIGZpZWxkLnNldFNl
bGVjdGlvblJhbmdlICl7CgkJCWZpZWxkLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0
LCBlbmQpOwoJCX0gZWxzZSB7CgkJCWlmKCBmaWVsZC5zZWxlY3Rpb25TdGFydCAp
ewoJCQkJZmllbGQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDsKCQkJCWZpZWxkLnNl
bGVjdGlvbkVuZCA9IGVuZDsKCQkJfQoJCX0KCQlmaWVsZC5mb2N1cygpOwoJfQoJ
Y2F0Y2ggKGUpe30KfTsKCiQuQXV0b2NvbXBsZXRlci5nZXRDYXJldFBvc2l0aW9u
ID0gZnVuY3Rpb24oZmllbGQpewoKCXZhciBzdGFydCA9IDAsIGVuZCA9IDA7Cglp
ZiAoZG9jdW1lbnQuZ2V0U2VsZWN0aW9uIHx8IHdpbmRvdy5nZXRTZWxlY3Rpb24p
Cgl7CgkJc3RhcnQgPSBmaWVsZC5zZWxlY3Rpb25TdGFydDsKCQllbmQgPSBmaWVs
ZC5zZWxlY3Rpb25FbmQ7Cgl9CgllbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24p
Cgl7CgkJdHJ5CgkJewoJCQlmaWVsZC5mb2N1cygpOwoKCQkJdmFyIHNlbCA9IGRv
Y3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwoJCQl2YXIgY2xvbmUgPSBz
ZWwuZHVwbGljYXRlKCk7CgkJCXNlbC5jb2xsYXBzZSh0cnVlKTsKCQkJY2xvbmUu
bW92ZVRvRWxlbWVudFRleHQoZmllbGQpOwoJCQljbG9uZS5zZXRFbmRQb2ludCgi
RW5kVG9FbmQiLCBzZWwpOwoJCQlzdGFydCA9IGNsb25lLnRleHQubGVuZ3RoOwoJ
CQlzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKCQkJY2xv
bmUgPSBzZWwuZHVwbGljYXRlKCk7CgkJCXNlbC5jb2xsYXBzZShmYWxzZSk7CgkJ
CWNsb25lLm1vdmVUb0VsZW1lbnRUZXh0KGZpZWxkKTsKCQkJY2xvbmUuc2V0RW5k
UG9pbnQoIkVuZFRvRW5kIiwgc2VsKTsKCQkJZW5kID0gY2xvbmUudGV4dC5sZW5n
dGg7CgkJfQoJCWNhdGNoKCBlciApIHt9Cgl9CglyZXR1cm4ge3N0YXJ0OiBzdGFy
dCwgZW5kOiBlbmR9Owp9OwoKdmFyIF9tYXA7CgokLkF1dG9jb21wbGV0ZXIuVHJh
bnNsaXQgPSBmdW5jdGlvbihzdHIpIHsKCWlmICghX21hcCkgewoJCV9tYXAgPSB7
fTsKCQl2YXIgZGF0YSA9IExhbmcuZ2V0KCd0cmFuc2xpdCcpOwoJCSQuZWFjaCAo
ZGF0YSwgZnVuY3Rpb24gKGssIHYpIHsKCQkJaWYgKCQuaXNBcnJheSh2KSkgewoJ
CQkJJC5lYWNoICh2LCBmdW5jdGlvbiAoazIsIHYyKSB7CgkJCQkJX21hcFt2Ml0g
PSBrOwoJCQkJfSk7CgkJCX0gZWxzZSB7CgkJCQlfbWFwW3ZdID0gX21hcFtrXSA9
IHY7CgkJCX0KCQl9KTsKCX0KCXZhciBhID0gc3RyLnNwbGl0KCcnKTsKCWZvciAo
dmFyIGk9YS5sZW5ndGg7IGktLTspIHsKCQlhW2ldID0gX21hcFthW2ldXSB8fCBh
W2ldOwoJfQoJcmV0dXJuIGEuam9pbignJyk7Cn07Cgp2YXIgUmVnRXhwRmluZGVy
ID0gZnVuY3Rpb24gKCkgewoKCXZhciBfdHJhbnNsaXRfcnUsIF90cmFuc2xpdF9l
biwgX3NwbGl0ZXIgPSAvW1wuXHNdLywgX2VtYWlsX3NwbGl0ZXIgPSAvQC87CgoJ
ZnVuY3Rpb24gZ2V0U3Vic3RyVmFsdWVzIChzdHIpIHsKCQl2YXIgaXNVcHBlckNh
c2VkCgkJCSwgdmFsdWUgPSBfdHJhbnNsaXRfZW5bc3RyXSB8fCBfdHJhbnNsaXRf
cnVbc3RyXSB8fCAoc3RyID0gc3RyLnRvTG9jYWxlTG93ZXJDYXNlKCksIGlzVXBw
ZXJDYXNlZCA9IHRydWUpICYmIChfdHJhbnNsaXRfZW5bc3RyXSB8fCBfdHJhbnNs
aXRfcnVbc3RyXSkKCQkJLCByZXN1bHQgPSBbXQoJCQksIGxlbgoJCTsKCgkJaWYg
KHZhbHVlKSB7CgkJCXJlc3VsdCA9IHJlc3VsdC5jb25jYXQodmFsdWUsIHN0cik7
CgkJfQoJCWVsc2UgaWYgKHN0ci5sZW5ndGggPT0gMSkgewoJCQlyZXN1bHQucHVz
aChzdHIpOwoJCX0KCgkJZm9yICggbGVuID0gcmVzdWx0Lmxlbmd0aCA7IGxlbi0t
IDsgKSB7CgkJCXN0ciA9IHJlc3VsdFtsZW5dOwoJCQlpZiAoJC50cmltKHN0cikp
IHsKCQkJCXN0ciA9IHJlc3VsdFtsZW5dID0gU3RyaW5nLnByZWdfcXVvdGUoc3Ry
KTsKCQkJCWlmKGlzVXBwZXJDYXNlZCkgewoJCQkJCXN0ciA9IHN0ci5jaGFyQXQo
MCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCk7CgkJ
CQkJcmVzdWx0W2xlbl0gPSBzdHI7CgkJCQl9CgkJCX0KCQkJZWxzZSB7CgkJCQly
ZXN1bHRbbGVuXSA9ICdcXHMrJzsKCQkJfQoJCX0KCgkJcmV0dXJuIHJlc3VsdDsK
CX0KCglmdW5jdGlvbiBjcmVhdGVDb25kaXRpb24gKHBhcnRzLCBhbmQpIHsKCQl2
YXIgcmVzdWx0ID0gcGFydHMuam9pbihhbmQgPyAnJyA6ICd8Jyk7CgkJaWYgKHBh
cnRzLmxlbmd0aCA+IDEpIHsKCQkJcmVzdWx0ID0gJygnICsgcmVzdWx0ICsgJykn
OwoJCX0KCQlyZXR1cm4gcmVzdWx0OwoJfQoKCWZ1bmN0aW9uIGNyZWF0ZVJlZ0V4
cChzdHIpIHsKCgkJc3RyID0gKHN0ciA9PT0gdW5kZWYgfHwgc3RyID09PSBudWxs
KSA/ICcnIDogc3RyICsgJyc7CgoJCWlmICghX3RyYW5zbGl0X3J1ICYmICFfdHJh
bnNsaXRfZW4pIHsKCQkJdmFyIGRhdGEgPSBMYW5nLmdldCgndHJhbnNsaXRfc21h
cnQnKTsKCQkJX3RyYW5zbGl0X3J1ID0gZGF0YS5ydTsKCQkJX3RyYW5zbGl0X2Vu
ID0gZGF0YS5lbjsKCQl9CgoJCXZhciByZXN1bHQgPSAnJzsKCQlmb3IgKHZhciBp
PTAsIGw9c3RyLmxlbmd0aDsgaTxsOyBpKyspIHsKCQkJZm9yICh2YXIgbj1sOyBu
Pmk7IG4tLSkgewoJCQkJdmFyIHBhcnRzID0gW107CgkJCQl2YXIgdmFsdWVzID0g
Z2V0U3Vic3RyVmFsdWVzKHN0ci5zdWJzdHJpbmcoaSwgbikpOwoJCQkJaWYgKHZh
bHVlcy5sZW5ndGgpIHsKCQkJCQlwYXJ0cy5wdXNoKGNyZWF0ZUNvbmRpdGlvbih2
YWx1ZXMsIDApKTsKCQkJCQlpZiAobiAtIGkgPiAxKSB7CgkJCQkJCXZhciBsZXR0
ZXJzX3BhcnRzID0gW107CgkJCQkJCWZvciAodmFyIHg9aTsgeDxuOyB4KyspIHsK
CQkJCQkJCWxldHRlcnNfcGFydHMucHVzaChjcmVhdGVDb25kaXRpb24oZ2V0U3Vi
c3RyVmFsdWVzKHN0ci5jaGFyQXQoeCkpLCAwKSk7CgkJCQkJCX0KCQkJCQkJcGFy
dHMucHVzaChjcmVhdGVDb25kaXRpb24obGV0dGVyc19wYXJ0cywgMSkpOwoJCQkJ
CQlpICs9IG4gLSBpIC0gMTsKCQkJCQl9CgkJCQkJcmVzdWx0ICs9IGNyZWF0ZUNv
bmRpdGlvbihwYXJ0cywgMCk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIHJlc3Vs
dDsKCX0KCglmdW5jdGlvbiBjcmVhdGVGaW5kUmVnRXhwIChzdHIpIHsKCQlyZXR1
cm4gbmV3IFJlZ0V4cCgnXicgKyBjcmVhdGVSZWdFeHAoc3RyKSwgJ2knKTsKCX0K
CglmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHRSZWdFeHAgKHN0cikgewoJCXJldHVy
biBuZXcgUmVnRXhwKCcoXnwifCZsdDt8XFxzfFxcLikoJyArIGNyZWF0ZVJlZ0V4
cChzdHIpICsgJyknLCAnaScpOwoJfQoKCWZ1bmN0aW9uIG1hdGNoU3Vic2V0QnlS
ZWdFeHAoc3RyLCByZWdleHApIHsKCQl2YXIgcmVzdWx0ID0gZmFsc2U7CgoJCXZh
ciBtYXRjaGVzID0gc3RyLm1hdGNoKC9eKD86Ij8oLio/KSI/XHMrPCk/KC4qPyk+
PyQvKQoJCQksIG5hbWUKCQkJLCBlbWFpbAoJCQksIGluZGV4CgkJOwoKCQlpZigg
bWF0Y2hlcyApIHsKCQkJbmFtZSA9IG1hdGNoZXNbMV07CgkJCWVtYWlsID0gbWF0
Y2hlc1syXTsKCgkJCXZhciBwYXJ0cyA9IFtdOwoJCQlpZiggbmFtZSApIHsKCQkJ
CWlmKCAhKHJlc3VsdCA9IHJlZ2V4cC50ZXN0KG5hbWUpKSApIHsKCQkJCQlwYXJ0
cy5wdXNoLmFwcGx5KHBhcnRzLCBuYW1lLnNwbGl0KF9zcGxpdGVyKSk7CgkJCQl9
CgkJCX0KCgkJCWlmKCAhcmVzdWx0ICYmIGVtYWlsICkgewoJCQkJaWYoICEocmVz
dWx0ID0gcmVnZXhwLnRlc3QoZW1haWwpKSApIHsKCQkJCQllbWFpbCA9IGVtYWls
LnNwbGl0KF9lbWFpbF9zcGxpdGVyKTsKCQkJCQlwYXJ0cy5wdXNoLmFwcGx5KHBh
cnRzLCBlbWFpbFswXS5zcGxpdChfc3BsaXRlcikpOwoKCQkJCQlpZiggZW1haWwg
PSBlbWFpbFsxXSApIHsKCQkJCQkJcmVzdWx0ID0gcmVnZXhwLnRlc3QoZW1haWwp
OwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJaWYoICFyZXN1bHQgKSB7CgkJCQlmb3Io
IGluZGV4ID0gcGFydHMubGVuZ3RoIDsgaW5kZXgtLSA7ICkgewoJCQkJCWlmKCBy
ZXN1bHQgPSByZWdleHAudGVzdChwYXJ0c1tpbmRleF0pICkgewoJCQkJCQlicmVh
azsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiByZXN1bHQ7Cgl9CgoJ
cmV0dXJuIHsKCQljcmVhdGVSZWdFeHA6IGNyZWF0ZVJlZ0V4cCwKCQljcmVhdGVG
aW5kUmVnRXhwOiBjcmVhdGVGaW5kUmVnRXhwLAoJCWNyZWF0ZUhpZ2hsaWdodFJl
Z0V4cDogY3JlYXRlSGlnaGxpZ2h0UmVnRXhwLAoJCW1hdGNoU3Vic2V0QnlSZWdF
eHA6IG1hdGNoU3Vic2V0QnlSZWdFeHAKCX07Cn0oKTsKCiQuQXV0b2NvbXBsZXRl
ci5DcmVhdGVSZWdFeHBTdHIgPSBmdW5jdGlvbiAoc3RyKSB7CglyZXR1cm4gUmVn
RXhwRmluZGVyLmNyZWF0ZVJlZ0V4cChzdHIpOwp9OwoKJC5BdXRvY29tcGxldGVy
LkNyZWF0ZUZpbmRSZWdFeHAgPSBmdW5jdGlvbihzdHIpIHsKCXJldHVybiBSZWdF
eHBGaW5kZXIuY3JlYXRlRmluZFJlZ0V4cChzdHIpOwp9OwoKJC5BdXRvY29tcGxl
dGVyLkNyZWF0ZUhpZ2hsaWdodFJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewoJcmV0
dXJuIFJlZ0V4cEZpbmRlci5jcmVhdGVIaWdobGlnaHRSZWdFeHAoc3RyKTsKfTsK
CiQuQXV0b2NvbXBsZXRlci5NYXRjaFN1YnNldEJ5UmVnRXhwID0gZnVuY3Rpb24o
c3RyLCByZWdleHApIHsKCXJldHVybiBSZWdFeHBGaW5kZXIubWF0Y2hTdWJzZXRC
eVJlZ0V4cChzdHIsIHJlZ2V4cCk7Cn07Cgp2YXIgZmllbGRzID0gW107CgokLkF1
dG9jb21wbGV0ZXIuYWJqcyA9IGZ1bmN0aW9uIChmaWVsZCkgewoJZmllbGRzLnB1
c2goZmllbGQpOwoJJFIoJ3ttYWlscnUudXRpbHN9JyArICdtYWlscnUuVXRpbHMn
LCBmdW5jdGlvbigpIHsKCQltYWlscnUuVXRpbHMuZ2V0QWRkcmVzc0Jvb2soKTsK
CX0pOwp9OwoKJCh3aW5kb3cpLmJpbmQoJ3N1Y2Nlc3MuYWJqcycsIGZ1bmN0aW9u
IChldnQsIGRhdGEpIHsKCSQuZWFjaChmaWVsZHMsIGZ1bmN0aW9uIChrLCB2KSB7
CgkJJCh2KS5zZXRPcHRpb25zKHtkYXRhOiBkYXRhfSk7Cgl9KTsKfSk7CgokLkF1
dG9jb21wbGV0ZXIuYWRkcmVzc2Jvb2sgPSBmdW5jdGlvbiAobm9kZSwgbG9hZEFi
anMpIHsKCXZhciAkaW5wdXQgPSAkKG5vZGUpOwoJdmFyIG9wdGlvbnMgPSB7CgkJ
J3BhcmVudCc6ICQoJy5hYy1sYXllcicsICRpbnB1dC5wYXJlbnQoKSksCgkJJ211
bHRpcGxlJzogdHJ1ZSwKCQknbWF0Y2hDb250YWlucyc6ICd3b3JkJywKCQknY2Fj
aGVMZW5ndGgnOiAxMDAwLAoJCSdkZWxheSc6IDEwMCwKCQkncmF3TGlzdCc6IHRy
dWUsCgkJJ21heCc6IDEwMCwKCQknbXVsdGlwbGVTZXBhcmF0b3JQYXR0ZXJuJzog
Lyg/OlxzKT9bLDtdKD86XHMpPy9nLAoJCSdoaWdobGlnaHQnOiBmdW5jdGlvbihz
dHIsIHN1YikgewoJCQlzdHIgPSBzdHIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5y
ZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpOwoJCQlz
dWIgPSBzdWIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcm
bHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpOwoJCQlyZXR1cm4gc3RyLnJlcGxh
Y2UoJC5BdXRvY29tcGxldGVyLkNyZWF0ZUhpZ2hsaWdodFJlZ0V4cChzdWIpLCAn
JDE8c3Ryb25nPiQyPC9zdHJvbmc+Jyk7CgkJfSwKCQknZmlsdGVyJzogZnVuY3Rp
b24oZGF0YSkgewoJCQl2YXIgaXRlbXMgPSAkLkF1dG9jb21wbGV0ZXIudHJpbVdv
cmRzKCRpbnB1dC52YWwoKSk7CgkJCXJldHVybiAkLmluQXJyYXkoZGF0YS52YWx1
ZSwgJC5tYXAoaXRlbXMsICQudHJpbSkpID09PSAtMTsKCQl9Cgl9OwoKCS8vIGh0
dHBzOi8vamlyYS5tYWlsLnJ1L2Jyb3dzZS9NQUlMLTY5MzcKCXZhciBfc3RhcnRU
UyA9IDAsIF9zZWxUUywgX3NlbF9waWQsIF92YWwgPSAnJywgX2RhdGEsIF9mYWls
X3BpZCwgX2FianM7CgoJJGlucHV0CgkJLmF1dG9jb21wbGV0ZShudWxsLCBvcHRp
b25zKQoJCS5iaW5kKCdrZXlkb3duJywgZnVuY3Rpb24gKCl7CgkJCWNsZWFyVGlt
ZW91dChfc2VsX3BpZCk7CgkJCWlmKCAhX3N0YXJ0VFMgKXsKCQkJCV9zdGFydFRT
ID0gYWpzLm5vdygpOwoJCQl9CgkJfSkKCQkuYmluZCgncmVzdWx0JywgZnVuY3Rp
b24oKSB7CgkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJCQkkKHRoaXMpLmNo
YW5nZSgpOwoJCQkJdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbEhlaWdodDsK
CQkJfS5iaW5kKHRoaXMpLCAxMCk7CgkJfSkKCQkuYmluZCgnYmVmb3Jlc2VhcmNo
JywgZnVuY3Rpb24gKGV2dCwgdmFsLCByZXMpewoJCQlfdmFsCT0gdmFsOwoJCQlf
ZGF0YQk9IHJlczsKCQkJX2FianMJPSAkLmlzQXJyYXkobWFpbHJ1LmFianNEYXRh
KSA/IG1haWxydS5hYmpzRGF0YS5sZW5ndGggOiAwOwoKCQkJY2xlYXJUaW1lb3V0
KF9zZWxfcGlkKTsKCQkJY2xlYXJUaW1lb3V0KF9mYWlsX3BpZCk7CgoJCQlpZigg
cmVzLmxlbmd0aCA9PSAwICl7CgkJCQlfZmFpbF9waWQJPSBzZXRUaW1lb3V0KF9h
dXRvTG9nLCA1MDApOwoJCQl9IGVsc2UgewoJCQkJX3NlbFRTCQk9IGFqcy5ub3co
KTsKCQkJCV9zZWxfcGlkCT0gc2V0VGltZW91dChfYXV0b0xvZywgMTUwMDApOwoJ
CQl9CgkJfSkKCQkuYmluZCgnc2VsZWN0dmFsdWUnLCBmdW5jdGlvbiAoZXZ0LCB2
YWwsIG5vZGUpewoJCQlfc3VnZ2VzdExvZyh2YWwsICQobm9kZSkuaW5kZXgoKSk7
CgkJfSkKCTsKCgoJZnVuY3Rpb24gX3N1Z2dlc3RMb2codmFsLCBpZHgpewoJCWlm
KCBfc3RhcnRUUyApewoJCQljbGVhclRpbWVvdXQoX3NlbF9waWQpOwoJCQljbGVh
clRpbWVvdXQoX2ZhaWxfcGlkKTsKCgkJCW1haWxydS5VdGlscy5zdWdnZXN0TG9n
KCdlbWFpbCcsIHsKCQkJCSAgc3RhcnRfdHM6IF9zdGFydFRTCgkJCQksIHNlbF90
czoJX3NlbFRTCgkJCQksIHZhbDoJX3ZhbAoJCQkJLCBzZWw6CXZhbAoJCQkJLCBk
YXRhOiBfZGF0YSB8fCBbXQoJCQkJLCBpZHg6CWlkeAoJCQkJLCBhYmpzOiBfYWJq
cwoJCQl9KTsKCgkJCV92YWwgPSBfc3RhcnRUUyA9IF9zZWxUUyA9IF9kYXRhID0g
MDsKCQl9Cgl9CgoKCWZ1bmN0aW9uIF9hdXRvTG9nKCl7CgkJX3N1Z2dlc3RMb2co
JycpOwoJfQoKCglpZiggbG9hZEFianMgKXsKCQl0aGlzLmFianMoJGlucHV0KTsK
CX0KCglyZXR1cm4gJGlucHV0Owp9OwoKfSkoalF1ZXJ5KTsKCmpzTG9hZGVyLmxv
YWRlZCgne2pRdWVyeX1hdXRvY29tcGxldGUnLCAxKTsKCgovLyBkYXRhL3J1L2lt
YWdlcy9qcy9ydS9qc0NvcmUvanF1ZXJ5L2F1dG9jb21wbGV0ZS5qcyBlbmQKCi8v
IC4vZGF0YS9jb21tb24vanMvanF1ZXJ5L2pxdWVyeS5ldmVudC5maXguanMgc3Rh
cnQKCi8vIGh0dHA6Ly9iaXRvdmkuY29tL2Jsb2cvMjAxMi8wNC9mYXN0ZXItanF1
ZXJ5LWV2ZW50LWZpeC5odG1sCi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzI5
NTQ0MzQgKG9yaWdpbmFsOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8yMzc3MTk2
KQoKLy8gSUUgOCBoYXMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGJ1dCBpdCBvbmx5
IGRlZmluZXMgRE9NIE5vZGVzLiBBY2NvcmRpbmcgdG8KLy8gaHR0cDovL2thbmdh
eC5naXRodWIuY29tL2VzNS1jb21wYXQtdGFibGUvI2RlZmluZS1wcm9wZXJ0eS1p
ZS1ub3RlCi8vIEFsbCBicm93c2VyIHRoYXQgaGF2ZSBPYmplY3QuZGVmaW5lUHJv
cGVydGllcyBhbHNvIHN1cHBvcnQgT2JqZWN0LmRlZmluZVByb3BlcnR5IHByb3Bl
cmx5CgpPYmplY3QuZGVmaW5lUHJvcGVydGllcyAmJiAoZnVuY3Rpb24gKGRvY3Vt
ZW50LCAkKXsKCXZhcgoJCS8vIFVzZSBkZWZpbmVQcm9wZXJ0eSBvbiBhbiBvYmpl
Y3QgdG8gc2V0IHRoZSB2YWx1ZSBhbmQgcmV0dXJuIGl0CgkJc2V0ID0gZnVuY3Rp
b24gKG9iaiwgcHJvcCwgdmFsKSB7CgkJCWlmKCB2YWwgIT09IHVuZGVmaW5lZCAp
ewoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgewoJCQkJCXZh
bHVlIDogdmFsCgkJCQl9KTsKCQkJfQoJCQlyZXR1cm4gdmFsOwoJCX0sCgoJCS8v
IHNwZWNpYWwgY29udmVydGVycwoJCXNwZWNpYWwgPSB7CgkJCXBhZ2VYIDogZnVu
Y3Rpb24gKGV2dCkgewoJCQkJdmFyCgkJCQkJICBldmVudERvYyA9IHRoaXMudGFy
Z2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQKCQkJCQksIGRvYwk9IGV2ZW50
RG9jLmRvY3VtZW50RWxlbWVudAoJCQkJCSwgYm9keQk9IGV2ZW50RG9jLmJvZHkK
CQkJCTsKCQkJCXJldHVybiBldnQgPT09IHZvaWQgMCA/IDAgOiBldnQuY2xpZW50
WCArIChkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9s
bExlZnQgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAm
JiBib2R5LmNsaWVudExlZnQgfHwgMCk7CgkJCX0sCgoJCQlwYWdlWSA6IGZ1bmN0
aW9uIChldnQpIHsKCQkJCXZhcgoJCQkJCSAgZXZlbnREb2MgPSB0aGlzLnRhcmdl
dC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50CgkJCQkJLCBkb2MJPSBldmVudERv
Yy5kb2N1bWVudEVsZW1lbnQKCQkJCQksIGJvZHkJPSBldmVudERvYy5ib2R5CgkJ
CQk7CgkJCQlyZXR1cm4gZXZ0ID09PSB2b2lkIDAgPyAwIDogZXZ0LmNsaWVudFkg
KyAoZG9jICYmIGRvYy5zY3JvbGxUb3AgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRv
cCB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50VG9wIHx8IGJvZHkgJiYgYm9k
eS5jbGllbnRUb3AgfHwgMCk7CgkJCX0sCgoJCQlyZWxhdGVkVGFyZ2V0IDogZnVu
Y3Rpb24gKGV2dCkgewoJCQkJaWYoIWV2dCkgewoJCQkJCXJldHVybjsKCQkJCX0K
CQkJCXJldHVybiBldnQuZnJvbUVsZW1lbnQgPT09IHRoaXMudGFyZ2V0ID8gZXZ0
LnRvRWxlbWVudCA6IGV2dC5mcm9tRWxlbWVudDsKCQkJfSwKCgkJCW1ldGFLZXkg
OiBmdW5jdGlvbiAoZXZ0KSB7CgkJCQlyZXR1cm4gZXZ0ICYmIGV2dC5jdHJsS2V5
OwoJCQl9LAoKCQkJd2hpY2ggOiBmdW5jdGlvbiAoZXZ0KSB7CgkJCQlyZXR1cm4g
ZXZ0ICYmIChldnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2dC5jaGFyQ29kZSA6IGV2
dC5rZXlDb2RlKTsKCQkJfQoJCX0KCTsKCgoJLy8gc3VwcG9ydCBqUXVlcnkgPCAx
LjcKCWlmKCAhJC5ldmVudC5rZXlIb29rcyApCQkkLmV2ZW50LmtleUhvb2tzCT0g
eyBwcm9wczogW10gfTsKCWlmKCAhJC5ldmVudC5tb3VzZUhvb2tzICkJJC5ldmVu
dC5tb3VzZUhvb2tzCT0geyBwcm9wczogW10gfTsKCgoJLy8gR2V0IGFsbCBwcm9w
ZXJ0aWVzIHRoYXQgc2hvdWxkIGJlIG1hcHBlZAoJJC5lYWNoKCQuZXZlbnQua2V5
SG9va3MucHJvcHMuY29uY2F0KCQuZXZlbnQubW91c2VIb29rcy5wcm9wcywgJC5l
dmVudC5wcm9wcyksIGZ1bmN0aW9uIChpLCBwcm9wKSB7CgkJaWYoIHByb3AgIT09
ICJ0YXJnZXQiICl7CgkJCShmdW5jdGlvbiAoKXsKCQkJCU9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSgkLkV2ZW50LnByb3RvdHlwZSwgcHJvcCwgewoJCQkJCWdldCA6IGZ1
bmN0aW9uICgpIHsKCQkJCQkJLy8gZ2V0IHRoZSBvcmlnaW5hbCB2YWx1ZSwgdW5k
ZWZpbmVkIHdoZW4gdGhlcmUgaXMgbm8gb3JpZ2luYWwgZXZlbnQKCQkJCQkJdmFy
IG9yaWdpbmFsVmFsdWUgPSB0aGlzLm9yaWdpbmFsRXZlbnQgJiYgdGhpcy5vcmln
aW5hbEV2ZW50W3Byb3BdOwoKCQkJCQkJLy8gb3ZlcndyaXRlIGdldHRlciBsb29r
dXAKCQkJCQkJcmV0dXJuIHRoaXNbJ18nICsgcHJvcF0gIT09IHVuZGVmaW5lZCA/
IHRoaXNbJ18nICsgcHJvcF0gOiBzZXQodGhpcywgcHJvcCwKCQkJCQkJCS8vIGlm
IHdlIGhhdmUgYSBzcGVjaWFsIGZ1bmN0aW9uIGFuZCBubyB2YWx1ZQoJCQkJCQkJ
c3BlY2lhbFtwcm9wXSAmJiBvcmlnaW5hbFZhbHVlID09PSB1bmRlZmluZWQgPwoJ
CQkJCQkJCS8vIGNhbGwgdGhlIHNwZWNpYWwgZnVuY3Rpb24KCQkJCQkJCQlzcGVj
aWFsW3Byb3BdLmNhbGwodGhpcywgdGhpcy5vcmlnaW5hbEV2ZW50KSA6CgkJCQkJ
CQkJLy8gdXNlIHRoZSBvcmlnaW5hbCB2YWx1ZQoJCQkJCQkJCW9yaWdpbmFsVmFs
dWUpCgkJCQkJfSwKCgkJCQkJc2V0IDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7CgkJ
CQkJCS8vIFNldCB0aGUgcHJvcGVydHkgd2l0aCB1bmRlcnNjb3JlIHByZWZpeAoJ
CQkJCQl0aGlzWydfJyArIHByb3BdID0gbmV3VmFsdWU7CgkJCQkJfQoJCQkJfSk7
CgkJCX0pKCk7CgkJfQoJfSk7CgoKCSQuZXZlbnQuZml4ID0gZnVuY3Rpb24gKGV2
dCkgewoJCWlmKCBldnRbICQuZXhwYW5kbyBdICl7CgkJCXJldHVybglldnQ7CgkJ
fQoKCQkvLyBDcmVhdGUgYSBqUXVlcnkgZXZlbnQgd2l0aCBhdCBtaW5pbXVtIGEg
dGFyZ2V0IGFuZCB0eXBlIHNldAoJCXZhciBvcmlnaW5hbCA9IGV2dCwgdGFyZ2V0
ID0gb3JpZ2luYWwudGFyZ2V0OwoKCQlldnQgPSAkLkV2ZW50KG9yaWdpbmFsKTsK
CgkJLy8gRml4IHRhcmdldCBwcm9wZXJ0eSwgaWYgbmVjZXNzYXJ5ICgjMTkyNSwg
SUUgNi83LzggJiBTYWZhcmkyKQoJCWlmKCAhdGFyZ2V0ICl7CgkJCXRhcmdldCA9
IG9yaWdpbmFsLnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7CgkJfQoKCQkvLyBUYXJn
ZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgU2FmYXJpKQoJCWlm
KCB0YXJnZXQubm9kZVR5cGUgPT09IDMgKXsKCQkJdGFyZ2V0ID0gdGFyZ2V0LnBh
cmVudE5vZGU7CgkJfQoKCQlldnQudGFyZ2V0ID0gdGFyZ2V0OwoKCQlyZXR1cm4J
ZXZ0OwoJfQp9KShkb2N1bWVudCwgalF1ZXJ5KTsKCmRlZmluZSgnanF1ZXJ5L2px
dWVyeS5ldmVudC5maXgnLCBqUXVlcnkubm9vcCk7CgovLyAuL2RhdGEvY29tbW9u
L2pzL2pxdWVyeS9qcXVlcnkuZXZlbnQuZml4LmpzIGVuZAoKLy8gLi9kYXRhL2Nv
bW1vbi9qcy9qcXVlcnkvanF1ZXJ5LmV2ZW50LnNjcm9sbC5qcyBzdGFydAoKLyoq
CiAqIGpRdWVyeSBleHRlbnNpb24sIGFkZCBzdXBwb3J0IGBzY3JvbGxzdGFydGAg
YW5kIGBzY3JvbGxlbmRgIGV2ZW50cy4KICoKICogQGF1dGhvcglSdWJhWGEJPHRy
YXNoQHJ1YmF4YS5vcmc+CiAqIEBnaXRodWIJaHR0cHM6Ly9naXN0LmdpdGh1Yi5j
b20vUnViYVhhLzU1Njg5NjQKICogQGxpY2Vuc2UJTUlUCiAqCiAqCiAqIEBzZXR0
aW5ncwogKiAJCSQuc3BlY2lhbC5zY3JvbGxlbmQuZGVsYXkgPSAzMDA7IC8vIGRl
ZmF1bHQgbXMKICoKICogQGZsYWdzCiAqIAkJJC5pc1Njcm9sbGVkOyAvLyBib29s
ZWFuCiAqCiAqIEBiaW5kaW5nCiAqIAkJJCh3aW5kb3cpLmJpbmQoJ3Njcm9sbHN0
YXJ0IHNjcm9sbGVuZCcsIGZ1bmN0aW9uIChldnQpewogKiAJCQlpZiggZXZ0LnR5
cGUgPT0gJ3Njcm9sbHN0YXJ0JyApewogKiAJCQkJLy8gbG9naWMKICogCQkJfQog
KiAJCX0pOwogKgogKi8KKGZ1bmN0aW9uICgkKXsKCXZhcgoJCSAgbnMJCT0gKG5l
dyBEYXRlKS5nZXRUaW1lKCkKCQksIHNwZWNpYWwJPSAkLmV2ZW50LnNwZWNpYWwK
CQksIGRpc3BhdGNoCT0gJC5ldmVudC5oYW5kbGUgfHwgJC5ldmVudC5kaXNwYXRj
aAoKCQksIHNjcm9sbAkJPSAnc2Nyb2xsJwoJCSwgc2Nyb2xsU3RhcnQJPSBzY3Jv
bGwgKyAnc3RhcnQnCgkJLCBzY3JvbGxFbmQJCT0gc2Nyb2xsICsgJ2VuZCcKCQks
IG5zU2Nyb2xsU3RhcnQJPSBzY3JvbGwgKycuJysgc2Nyb2xsU3RhcnQgKyBucwoJ
CSwgbnNTY3JvbGxFbmQJPSBzY3JvbGwgKycuJysgc2Nyb2xsRW5kICsgbnMKCTsK
CglzcGVjaWFsLnNjcm9sbHN0YXJ0ID0gewoJCXNldHVwOiBmdW5jdGlvbiAoKXsK
CQkJdmFyIHBpZCwgaGFuZGxlciA9IGZ1bmN0aW9uIChldnQvKiokLkV2ZW50Ki8p
ewoJCQkJaWYoIHBpZCA9PSBudWxsICl7CgkJCQkJZXZ0LnR5cGUgPSBzY3JvbGxT
dGFydDsKCQkJCQlkaXNwYXRjaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJCQkJ
fQoJCQkJZWxzZSB7CgkJCQkJY2xlYXJUaW1lb3V0KHBpZCk7CgkJCQl9CgoJCQkJ
cGlkID0gc2V0VGltZW91dChmdW5jdGlvbigpewoJCQkJCXBpZCA9IG51bGw7CgkJ
CQl9LCBzcGVjaWFsLnNjcm9sbGVuZC5kZWxheSk7CgoJCQl9OwoKCQkJJCh0aGlz
KS5iaW5kKG5zU2Nyb2xsU3RhcnQsIGhhbmRsZXIpOwoJCX0sCgoJCXRlYXJkb3du
OiBmdW5jdGlvbiAoKXsKCQkJJCh0aGlzKS51bmJpbmQobnNTY3JvbGxTdGFydCk7
CgkJfQoJfTsKCglzcGVjaWFsLnNjcm9sbGVuZCA9IHsKCQlkZWxheTogMzAwLAoK
CQlzZXR1cDogZnVuY3Rpb24gKCl7CgkJCXZhciBwaWQsIGhhbmRsZXIgPSBmdW5j
dGlvbiAoZXZ0LyoqJC5FdmVudCovKXsKCQkJCXZhciBfdGhpcyA9IHRoaXMsIGFy
Z3MgPSBhcmd1bWVudHM7CgoJCQkJY2xlYXJUaW1lb3V0KHBpZCk7CgkJCQlwaWQg
PSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CgkJCQkJZXZ0LnR5cGUgPSBzY3JvbGxF
bmQ7CgkJCQkJZGlzcGF0Y2guYXBwbHkoX3RoaXMsIGFyZ3MpOwoJCQkJfSwgc3Bl
Y2lhbC5zY3JvbGxlbmQuZGVsYXkpOwoKCQkJfTsKCgkJCSQodGhpcykuYmluZChu
c1Njcm9sbEVuZCwgaGFuZGxlcik7CgoJCX0sCgoJCXRlYXJkb3duOiBmdW5jdGlv
biAoKXsKCQkJJCh0aGlzKS51bmJpbmQobnNTY3JvbGxFbmQpOwoJCX0KCX07CgoK
CSQuaXNTY3JvbGxlZCA9IGZhbHNlOwoJJCh3aW5kb3cpLmJpbmQoc2Nyb2xsU3Rh
cnQrJyAnK3Njcm9sbEVuZCwgZnVuY3Rpb24gKGV2dC8qKkV2ZW50Ki8pewoJCSQu
aXNTY3JvbGxlZCA9IChldnQudHlwZSA9PSBzY3JvbGxTdGFydCk7CgkJJCgnYm9k
eScpWyQuaXNTY3JvbGxlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSgn
aXMtc2Nyb2xsZWQnKTsKCX0pOwp9KShqUXVlcnkpOwoKZGVmaW5lKCdqcXVlcnkv
anF1ZXJ5LmV2ZW50LnNjcm9sbCcsIGpRdWVyeS5ub29wKTsKCi8vIC4vZGF0YS9j
b21tb24vanMvanF1ZXJ5L2pxdWVyeS5ldmVudC5zY3JvbGwuanMgZW5kCgovLyAu
L2RhdGEvY29tbW9uL2pzL2pxdWVyeS9qcXVlcnkuY2xhc3NMaXN0LmpzIHN0YXJ0
CgovKioKICogalF1ZXJ5IGV4dGVuc2lvbiwgYWRkIHN1cHBvcnQgYGNsYXNzTGlz
dGAuCiAqCiAqIEBhdXRob3IJUnViYVhhCTx0cmFzaEBydWJheGEub3JnPgogKiBA
bGljZW5zZQlNSVQKICovCgooZnVuY3Rpb24gKCQpewoJdmFyCgkJICBfcnNwYWNl
ID0gL1xzKy8KCQksIF8kY2FjaGUgPSAkKCc8ZGl2Lz4nKQoKCQksIF9kaXYgPSBf
JGNhY2hlWzBdCgkJLCBfY2xhc3NMaXN0ID0gX2Rpdi5jbGFzc0xpc3QKCQksIF9z
dXBwb3J0c0FyZ3MKCTsKCgoJaWYoIF9jbGFzc0xpc3QgKXsKCQlfY2xhc3NMaXN0
LmFkZCgnLWEnLCAnYi0nKTsKCQlfc3VwcG9ydHNBcmdzID0gLy1hLy50ZXN0KF9k
aXYuY2xhc3NOYW1lKSAmJiAvYi0vLnRlc3QoX2Rpdi5jbGFzc05hbWUpOwoKCgkJ
LyoqCgkJICogSGFzIGNsYXNzCgkJICoKCQkgKiBAcGFyYW0ge3N0cmluZ30gY2xh
c3NOYW1lCgkJICogQHJldHVybnMge2Jvb2xlYW59CgkJICovCgkJJC5mbi5oYXND
bGFzcyA9IGZ1bmN0aW9uIChjbGFzc05hbWUpewoJCQljbGFzc05hbWUgPSAkLnRy
aW0oY2xhc3NOYW1lKTsKCQkJdmFyIGkgPSB0aGlzLmxlbmd0aDsKCgkJCXdoaWxl
KCBpLS0gKXsKCQkJCWlmKCB0aGlzW2ldLmNsYXNzTGlzdC5jb250YWlucyhjbGFz
c05hbWUpICl7CgkJCQkJcmV0dXJuCXRydWU7CgkJCQl9CgkJCX0KCgkJCXJldHVy
bglmYWxzZTsKCQl9OwoKCgkJLyoqCgkJICogQWRkIGNsYXNzCgkJICoKCQkgKiBA
cGFyYW0Je3N0cmluZ3xmdW5jdGlvbn0gIHZhbHVlCgkJICogQHJldHVybnMJe2pR
dWVyeX0KCQkgKi8KCQkkLmZuLmFkZENsYXNzID0gX2ZhY3RvcnkoJ2FkZCcpOwoK
CgkJLyoqCgkJICogUmVtb3ZlIGNsYXNzCgkJICoKCQkgKiBAcGFyYW0Je3N0cmlu
Z3xmdW5jdGlvbn0gIHZhbHVlCgkJICogQHJldHVybnMJe2pRdWVyeX0KCQkgKi8K
CQkkLmZuLnJlbW92ZUNsYXNzID0gX2ZhY3RvcnkoJ3JlbW92ZScpOwoJfQoKCglm
dW5jdGlvbiBfZmFjdG9yeShtZXRob2QpewoJCXJldHVybiBmdW5jdGlvbiAodmFs
dWUpewoJCQl2YXIgdHlwZU9mID0gdHlwZW9mIHZhbHVlLCBpID0gdGhpcy5sZW5n
dGg7CgoJCQlpZiggJ3N0cmluZycgPT09IHR5cGVPZiApewoJCQkJdmFsdWUgPSAk
LnRyaW0odmFsdWUpOwoKCQkJCWlmKCAiIiAhPT0gdmFsdWUgKXsKCQkJCQl2YWx1
ZSA9IHZhbHVlLnNwbGl0KF9yc3BhY2UpOwoKCQkJCQl2YXIgaiwgbiA9IHZhbHVl
Lmxlbmd0aCwgbGlzdDsKCgkJCQkJd2hpbGUoIGktLSApewoJCQkJCQlsaXN0ID0g
dGhpc1tpXS5jbGFzc0xpc3Q7CgoJCQkJCQlpZiggMSA9PT0gbiApewoJCQkJCQkJ
bGlzdFttZXRob2RdKHZhbHVlWzBdKTsKCQkJCQkJfQoJCQkJCQllbHNlIGlmKCBf
c3VwcG9ydHNBcmdzICl7CgkJCQkJCQlsaXN0W21ldGhvZF0uYXBwbHkobGlzdCwg
dmFsdWUpOwoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJZm9yKCBqID0gMDsg
aiA8IG47IGorKyApewoJCQkJCQkJCWxpc3RbbWV0aG9kXSh2YWx1ZVtqXSk7CgkJ
CQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiggKHZv
aWQgMCA9PT0gdmFsdWUpICYmICgncmVtb3ZlJyA9PT0gbWV0aG9kKSApewoJCQkJ
d2hpbGUoIGktLSApewoJCQkJCXRoaXNbaV0uY2xhc3NOYW1lID0gJyc7CgkJCQl9
CgkJCX0KCQkJZWxzZSBpZiggJ2Z1bmN0aW9uJyA9PT0gdHlwZU9mICl7CgkJCQlf
ZWFjaCh0aGlzLCBtZXRob2QgKyAnQ2xhc3MnLCB2YWx1ZSk7CgkJCX0KCgkJCXJl
dHVybgl0aGlzOwoJCX0KCX0KCgoJZnVuY3Rpb24gX2VhY2goJGVsLCBtZXRob2Qs
IGNhbGxiYWNrKXsKCQkkZWwuZWFjaChmdW5jdGlvbiAoaSl7CgkJCV8kY2FjaGVb
MF0gPSB0aGlzOwoJCQlfJGNhY2hlW21ldGhvZF0oIGNhbGxiYWNrLmNhbGwodGhp
cywgaSwgXyRjYWNoZS5hdHRyKCdjbGFzcycpKSApOwoJCX0pOwoJfQoKCgkvLyBD
bGVhbnVwCglfJGNhY2hlWzBdID0gX2RpdiA9IF9jbGFzc0xpc3QgPSBudWxsOwp9
KShqUXVlcnkpOwoKZGVmaW5lKCdqcXVlcnkvanF1ZXJ5LmNsYXNzTGlzdCcsIGpR
dWVyeS5ub29wKTsKCi8vIC4vZGF0YS9jb21tb24vanMvanF1ZXJ5L2pxdWVyeS5j
bGFzc0xpc3QuanMgZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUv
cGx1Z2lucy9MaWdodEJveC5qcyBzdGFydAoKLyoqCiAqIEBjbGFzcyAgIExpZ2h0
Qm94CiAqIEBhdXRob3IgIFJ1YmFYYSAJPHRyYXNoQHJ1YmF4YS5vcmc+CiAqLwoK
CmpzQ2xhc3MKCQkuY3JlYXRlKCdMaWdodEJveCcpCgkJLnN0YXRpY3MoewoJCQkg
IGxhc3Q6CQkwCgkJCSwgb3BlbjoJCVtdCgkJCSwgY291bnQ6CTAKCQkJLCBhY3Rp
dmU6CTAKCQkJLCBoaWRlQWxsOglmdW5jdGlvbiAoKXsgQXJyYXkuZm9yRWFjaCh0
aGlzLm9wZW4sIGZ1bmN0aW9uIChMKSB7IEwuaXNWaXNpYmxlKCkgJiYgTC5oaWRl
KCk7IH0pOyB9CgkJfSkKCQkubWV0aG9kcyh7CgoJCS8vIExFR08KCQlfX2NvbnN0
cnVjdDogZnVuY3Rpb24gKCRCb3gsIG9wdHMpLypWb2lkKi8KCQl7CgkJCUxpZ2h0
Qm94LmNvdW50Kys7CgoJCQkkRSh0aGlzLCB7CgoJCQkJLy8g77+977+977+977+9
77+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQoJCQkJICBw
b3NpdGlvbjoJCQknZml4ZWQnCgkJCQksIHBUb3A6CQkJCSc1MCUnCgkJCQksIHBM
ZWZ0OgkJCSc1MCUnCgkJCQksIHpJbmRleDoJCQkzMDAwMAoKCQkJCS8vIO+/ve+/
ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQoJCQkJLCBmYWRlTm9kZToJCQkwCQkJLy8g
77+977+977+977+977+977+977+977+977+977+9IO+/ve+/ve+/vSDvv73vv73v
v73vv73vv73vv73vv73vv73vv70g77+977+977+9IENTUyBSdWxlcywKCQkJCQkJ
CQkJCQkJCS8vIO+/ve+/ve+/vSDvv73vv70g77+977+977+977+977+977+977+9
IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSBmYWRlQ29sb3IsIGZhZGVPcGFjaXR5
IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQoJCQkJLCBmYWRl
Q29sb3I6CQknIzAwMCcJLy8g77+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/
ve+/ve+/ve+/ve+/ve+/vQoJCQkJLCBmYWRlT3BhY2l0eToJCTAuNgkJLy8g77+9
77+977+977+977+977+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/
ve+/ve+/ve+/ve+/ve+/vQoKCQkJCSwgc2Nyb2xsV2lkdGg6CQkwCgoJCQkJLCBo
aWRlU2VsZWN0czoJCTEJCQkvLyDvv73vv73vv73vv73vv73vv73vv73vv70g77+9
77+977+9IFNFTEVDVCfvv70g77+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/ve+/
ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv70KCQkJCSwgaGlkZU9iamVjdHM6
CQkwCQkJLy8g77+977+977+977+977+977+977+977+9IO+/ve+/ve+/vSBPQkpF
Q1Qn77+9IO+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73v
v73vv70g77+977+977+977+977+9CgoJCQkJLCB2aXNpYmxlOgkJCTAJCQkvLyDv
v73vv73vv73vv73vv73vv73vv73vv70g77+977+9IO+/ve+/ve+/ve+/ve+/ve+/
ve+/ve+/vSwgMCAtIO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/
vSwgMSAtIO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQoJCQkJLCBkaXNh
YmxlZEhpZGU6CQkwCQkJLy8g77+977+977+977+977+977+977+977+977+9IO+/
ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73v
v73vv70g77+977+977+977+977+977+977+977+977+9CgkJCQksIGRpc2FibGVk
U2hvdzoJCTAJCQkvLyDvv73vv73vv73vv73vv73vv73vv73vv73vv70g77+977+9
77+977+977+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/ve+/
ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73vv73vv73vv70KCQkJCSwg
ZGlzYWJsZToJCQkwCQkJLy8g77+977+977+977+977+977+977+977+9L++/ve+/
ve+/ve+/ve+/ve+/ve+/ve+/vQoJCQkJLCBjb250cm9sczoJCQkwCQkJLy8g77+9
77+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73v
v70g77+977+977+977+977+977+977+977+977+977+9IChDU1MgUnVsZXMpCgkJ
CQksIGxiQ29udHJvbHM6CQknLmxiLWNvbnRyb2xzJwoJCQl9LCBvcHRzKTsKCgkJ
CXRoaXMudG9wCT0gdGhpcy5wVG9wOwoJCQl0aGlzLmxlZnQJPSB0aGlzLnBMZWZ0
OwoJCQl0aGlzLl9kRmlyZQk9ICREKHRoaXMsICdmaXJlQ29udHJvbCcpOwoKCgkJ
CS8vIO+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73vv73vv73vv73vv70KCQkJ
dGhpcy4kRmFkZQk9IHRoaXMuZmFkZU5vZGUKCQkJCQkJCQkJPyAkKHRoaXMuZmFk
ZU5vZGUpCgkJCQkJCQkJCTogJCgnPGRpdj48L2Rpdj4nKS5jc3MoewoJCQkJCQkJ
CQkJCSAgb3BhY2l0eToJCQl0aGlzLmZhZGVPcGFjaXR5CgkJCQkJCQkJCQkJLCBi
YWNrZ3JvdW5kQ29sb3I6CXRoaXMuZmFkZUNvbG9yCgkJCQkJCQkJCQkJLCB3aWR0
aDoJCQknMTAwJScKCQkJCQkJCQkJCQksIGhlaWdodDoJCQknMTAwJScKCQkJCQkJ
CQkJCQksIG1hcmdpbkxlZnQ6CQktdGhpcy5zY3JvbGxXaWR0aAoJCQkJCQkJCQkJ
CSwgZGlzcGxheToJCQknbm9uZScKCQkJCQkJCQkJCX0pCgkJCQkJCQkJCQkuc2V0
UG9zaXRpb25GaXhlZCgwLCAwKQoJCQkJCQkJCQkJLmFwcGVuZFRvKCQodGhpcy5C
T0RZKVswXSB8fCAnQk9EWScpCgkJCQkJCQk7CgoKCQkJLy8g77+977+977+9IO+/
ve+/ve+/ve+/ve+/ve+/vQoJCQl0aGlzLiRCb3gJPSBqUXVlcnkoICRCb3ggKS5w
cm9jZXNzUGx1Z2lucygpOwoKCQkJaWYoIHRoaXMucG9zaXRpb24gPT0gJ2ZpeGVk
JyApCgkJCXsKCQkJCXRoaXMuJEJveC5zZXRQb3NpdGlvbkZpeGVkKHRoaXMubGVm
dCwgdGhpcy50b3ApOwoJCQl9CgkJCWVsc2UgaWYoIHRoaXMucG9zaXRpb24gKQoJ
CQl7CgkJCQl0aGlzLiRCb3guY3NzKHsgcG9zaXRpb246IHRoaXMucG9zaXRpb24s
IGxlZnQ6IHRoaXMubGVmdCwgdG9wOiB0aGlzLnRvcCB9KTsKCQkJfQoKCgkJCWlm
KCB0aGlzLmNvbnRyb2xzICkJdGhpcy5pbml0Q29udHJvbHModGhpcy5jb250cm9s
cy5jb25zdHJ1Y3RvciA9PSBBcnJheSA/IHRoaXMuY29udHJvbHMgOiBqUXVlcnko
dGhpcy5jb250cm9scykpOwoJCQl0aGlzLmluaXRDb250cm9scyh0aGlzLiRCb3gp
OwoKCQkJaWYoICRCLm1zaWUgKQl0aGlzLiRCT0RZCT0galF1ZXJ5KCdCT0RZJyk7
CgoJCQlpZiggdGhpcy5zaG93QnkgKSBqUXVlcnkodGhpcy5zaG93QnkpLmNsaWNr
KCREKHRoaXMsIGZ1bmN0aW9uICgpeyB0aGlzLnNob3coKTsgcmV0dXJuIGZhbHNl
OyB9KSk7CgkJCWlmKCB0aGlzLmhpZGVCeSApIGpRdWVyeSh0aGlzLmhpZGVCeSku
Y2xpY2soJEQodGhpcywgZnVuY3Rpb24gKCl7IHRoaXMuaGlkZSgpOyByZXR1cm4g
ZmFsc2U7IH0pKTsKCQkJaWYoIHRoaXMuaGlkZUJ5RmFkZSApIHRoaXMuJEZhZGUu
YmluZCh0aGlzLmhpZGVCeUZhZGUsICREKHRoaXMsIGZ1bmN0aW9uICgpeyB0aGlz
LmhpZGUoKTsgcmV0dXJuIGZhbHNlOyB9KSk7CgoJCQl0aGlzLmNhbGxNZXRob2Qo
J2luaXQnKTsKCQkJaWYoIHRoaXMudmlzaWJsZSApIHRoaXMuc2hvdyh0cnVlKTsK
CQl9LAoKCS8qKgoJICogQHByaXZhdGUKCSAqLwoJCWN1c3RvbTogZnVuY3Rpb24g
KCkKCQl7CgkJCXZhciBwCT0gWydjdXN0b21GdW5jJ107CgkJCUFycmF5LnByb3Rv
dHlwZS5wdXNoLmFwcGx5KHAsIGFyZ3VtZW50cyk7CgkJCXJldHVybgkhKHRoaXMu
Y2FsbE1ldGhvZC5hcHBseSh0aGlzLCBwKSAhPT0gZmFsc2UpOwoJCX0sCgoKCQlp
bml0Q29udHJvbHM6IGZ1bmN0aW9uICgkWCwgcykKCQl7CgkJCWZvciggdmFyIGkg
PSAwOyAkWFtpXTsgaSsrICkKCQkJewoJCQkJaWYoICRYW2ldICYmICRYW2ldLmdl
dEF0dHJpYnV0ZSAmJiAoYyA9ICRHQSgkWFtpXSwgJ2xpZ2h0Qm94JykpICkKCQkJ
CXsKCQkJCQljCT0gYy5pbmRleE9mKCd7JykgPiAtMSA/IGV2YWwoIigiICsgKGN8
fCd7fScpICsgIikiKSA6IHsgbTogYyB9OwoJCQkJCWlmKCBjICYmIGMubSAmJiB0
aGlzW2MubV0gKQoJCQkJCXsKCQkJCQkJJFhbaV0uX19fYwk9IGM7CgkJCQkJCWpR
dWVyeSgkWFtpXSkuYmluZCgkWFtpXS50YWdOYW1lPT0nRk9STSc/J3N1Ym1pdCc6
J2NsaWNrJywgJEQodGhpcywgdGhpcy5maXJlQ29udHJvbCkpOwoJCQkJCX0KCQkJ
CQkkWFtpXS5yZW1vdmVBdHRyaWJ1dGUoJ2xpZ2h0Qm94Jyk7CgkJCQkJJFhbaV0u
bGlnaHRCb3gJPSBudWxsOwoJCQkJfQoJCQl9CgkJCWlmKCAhcyAmJiAhdGhpcy5s
YkZhc3QgJiYgJFguZmluZCApIHRoaXMuaW5pdENvbnRyb2xzKCRYLmZpbmQoJy5s
Yi1jb250cm9sLEEnKSwgdHJ1ZSk7CgkJfSwKCgoJCWZpcmVDb250cm9sOiBmdW5j
dGlvbiAoZSkKCQl7CgkJCXRoaXMuX19lCT0gZTsKCQkJdGhpcy5fX2MJPSBqc0Nv
cmUuZWxtKGUsICdfX19jJyk7CgoJCQlpZigKCQkJCSAgICEodGhpcy5fY0Rpc2Fi
bGUgfHwgZS5kaXNhYmxlZCkKCQkJCSYmICh0aGlzLl9fYy5fX19jICYmIHRoaXMu
X19jLl9fX2MubSAmJiB0aGlzW3RoaXMuX19jLl9fX2MubV0pCgkJCSl7CgkJCQly
ZXR1cm4JKHRoaXNbdGhpcy5fX2MuX19fYy5tXS5hcHBseSh0aGlzLCAodGhpcy5f
X2MuX19fYy5wfHxbXSkvKi5jb25jYXQoZSkqLykgPT09IHRydWUpOwoJCQl9CgkJ
fSwKCgoJLyoqCgkgKiBAcHVibGljCgkgKi8KCQlnZXRFdmVudDoJZnVuY3Rpb24g
KCl7CXJldHVybgl0aGlzLl9fZTsgfSwKCQlnZXRDb250cm9sOiBmdW5jdGlvbiAo
KXsJcmV0dXJuCXRoaXMuX19jOyB9LAoKCQlyZXNpemU6IGZ1bmN0aW9uICh3LCBo
LCBmLCBzcGVlZCkKCQl7CgkJCXZhciBzID0gdGhpcy4kQm94LmdldFNpemUodHJ1
ZSk7CgkJCXRoaXMuZml4UG9zKCk7CgkJCXRoaXMuZml4UG9zKCFmLCBkZWZpbmVk
KHcsIHMud2lkdGgpLCBkZWZpbmVkKGgsIHMuaGVpZ2h0KSwgc3BlZWQpOwoJCQly
ZXR1cm4JdGhpczsKCQl9LAoKCQlmaXhQb3M6IGZ1bmN0aW9uIChhbmltLCB3LCBo
LCBzcGVlZCkKCQl7CgkJCXZhciBzID0ge307CgoJCQkkRSh0aGlzLCB0aGlzLiRC
b3guZ2V0U2l6ZSgpKTsKCgkJCWlmKCB3IHx8IGggKQoJCQl7CgkJCQl0aGlzLiRC
b3guY3NzKHsgd2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHQg
fSk7CgkJCQkkRShzLCB7IHdpZHRoOiB3LCBoZWlnaHQ6IGggfSk7CgkJCQkkRSh0
aGlzLCBzKTsKCQkJfQoKCQkJdGhpcy5kdwkJPSB0aGlzLndpZHRoIC8gMjsKCQkJ
dGhpcy5kaAkJPSB0aGlzLmhlaWdodCAvIDI7CgkJCXMubWFyZ2luTGVmdAk9IC10
aGlzLmR3CgkJCXMubWFyZ2luVG9wCQk9IC10aGlzLmRoOwoKCQkJdmFyCgkJCQkg
IHhICT0gdGhpcy5oZWlnaHQgPiBhanMud2luZG93SGVpZ2h0KCkKCQkJCSwgeFcJ
PSB0aGlzLndpZHRoID4gYWpzLndpbmRvd1dpZHRoKCkKCQkJCSwgeAkJPSB4VyB8
fCB4SAoJCQk7CgoJCQlpZiggalF1ZXJ5LmllUG9zaXRpb25GaXhlZCA9PT0gdW5k
ZWYgKQkvLyBleHRlbnNpb25zLmpzCgkJCXsKCQkJCXRoaXMubGVmdAk9IHMubGVm
dCA9IHggPyAoTWF0aC5tYXgodGhpcy5kdywgYWpzLndpbmRvd1dpZHRoKCkvMikg
KyBhanMuc2Nyb2xsTGVmdCgpKSA6IGFqcy53aW5kb3dXaWR0aCgpLzI7CgkJCQl0
aGlzLnRvcCAJPSBzLnRvcCAgPSB4ID8gKE1hdGgubWF4KHRoaXMuZGgsIGFqcy53
aW5kb3dIZWlnaHQoKS8yKSArIGFqcy5zY3JvbGxUb3AoKSkgOiBhanMud2luZG93
SGVpZ2h0KCkvMjsKCQkJCXRoaXMuYWJzCT0geDsKCQkJCXMucG9zaXRpb24JPSB4
ID8gJ2Fic29sdXRlJyA6IHRoaXMucG9zaXRpb247CgkJCX0KCgkJCWlmKCBhbmlt
ICYmIHRoaXMuaXNWaXNpYmxlKCkgKQoJCQl7CgkJCQl0aGlzLiRCb3guY3NzKCdw
b3NpdGlvbicsIHMucG9zaXRpb24pOwoJCQkJdGhpcy4kQm94LmFuaW1hdGUocywg
c3BlZWQgfHwgJ3Nsb3cnLCAkRCh0aGlzLCAnZml4UG9zJykpOwoJCQl9CgkJCWVs
c2UKCQkJCXRoaXMuJEJveC5jc3Mocyk7CgoJCQlyZXR1cm4JdGhpczsKCQl9LAoK
CgkJY29udHJvbERpc2FibGU6IGZ1bmN0aW9uIChzLyo6Qm9vbCovKQoJCXsKCQkJ
dGhpcy5fY0Rpc2FibGUJPSAhIXM7CgkJCXJldHVybgl0aGlzOwoJCX0sCgoJCWlz
RGlzYWJsZWQ6IGZ1bmN0aW9uICgpLypCb29sKi8KCQl7CgkJCXJldHVybgl0aGlz
Ll9jRGlzYWJsZTsKCQl9LAoKCQlodG1sOiBmdW5jdGlvbiAoaHRtbCkKCQl7CgkJ
CSRGUyh0aGlzLiRCb3hbMF0pLnZpc2liaWxpdHkJPSAnaGlkZGVuJzsKCgkJCXRo
aXMuJEJveAoJCQkJCS5odG1sKGh0bWwpCgkJCQkJLnByb2Nlc3NQbHVnaW5zKCkK
CQkJOwoKCQkJdGhpcy5pbml0Q29udHJvbHModGhpcy4kQm94KTsKCQkJdGhpcy5m
aXhQb3MoKTsKCgkJCSRGUyh0aGlzLiRCb3hbMF0pLnZpc2liaWxpdHkJPSAnJzsK
CgkJCXJldHVybgl0aGlzOwoJCX0sCgoKCQlpc1Zpc2libGU6IGZ1bmN0aW9uICgp
eyByZXR1cm4gdGhpcy52aXNpYmxlOyB9LAoKCgkJdG9nZ2xlOiBmdW5jdGlvbiAo
Zi8qZm9yY2U6Qm9vbCA9IHVuZGVmaW5lZCovLCBzLypzaG93OkJvb2wgPSB1bmRl
ZmluZWQqLykKCQl7CgkJCXZhcgoJCQkJICBkCT0gZGVmaW5lZChzLCAhdGhpcy52
aXNpYmxlKSA/ICcnIDogJ25vbmUnCgkJCQksIGUgPSAhZCA/ICdzaG93JyA6ICdo
aWRlJwoJCQk7CgoJCQlpZiggdGhpcy5kaXNwYXRjaEV2ZW50KCdiZWZvcmUnICsg
U3RyaW5nLnVjZmlyc3QoZSksIHRoaXMpICE9PSBmYWxzZSApCgkJCXsKCQkJCS8q
KgoJCQkJICogQHRvZG8KCQkJCSAqIO+/ve+/ve+/ve+/vSDvv73vv73vv70g77+9
77+977+977+977+977+977+977+9LCDvv70g77+977+977+977+977+977+977+9
77+9IGYob3JjZSkg77+977+977+977+977+9CgkJCQkgKiDvv73vv73vv70g77+9
77+977+977+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/ve+/
ve+/vSDvv73vv73vv70g77+977+977+977+977+977+977+977+9CgkJCQkgKi8K
CQkJCSRGUyh0aGlzLiRCb3hbMF0pLnpJbmRleAk9IHRoaXMuekluZGV4ICsgKExp
Z2h0Qm94LmFjdGl2ZSArIDEwMSk7CgoJCQkJaWYoICF0aGlzLiRGYWRlWzBdLl9f
bGIgfHwgKHRoaXMuJEZhZGVbMF0uX19sYiA9PSB0aGlzLnVuaXFJZCkgKQoJCQkJ
ewoJCQkJCXRoaXMuJEZhZGVbMF0uX19sYiA9ICFkID8gdGhpcy51bmlxSWQgOiAw
OwoJCQkJCXRoaXMuJEZhZGUuY3NzKHsgekluZGV4OiB0aGlzLnpJbmRleCArIExp
Z2h0Qm94LmFjdGl2ZSArIDEsIGRpc3BsYXk6IGQgfSk7CgkJCQl9CgoJCQkJTGln
aHRCb3guYWN0aXZlCSs9ICFkID8gMSA6IC0xOwovLwkJCQl2YXIgdG9wID0gdGhp
cy5hYnMgPyB3aW5kb3cuc2Nyb2xsVG9wKCkgOiAwOwoKCQkJCWlmKCAhZCApCgkJ
CQl7CgkJCQkJLy90aGlzLiRCb3guY3NzKHsgZGlzcGxheTogJycsIHZpc2liaWxp
dHk6ICdoaWRkZW4nIH0pOwoJCQkJCXRoaXMuZml4UG9zKCk7CgkJCQkJLy90aGlz
LiRCb3gKCQkJCQkvLwkuY3NzKHsgdG9wOiB0b3AtdGhpcy5kaCwgdmlzaWJpbGl0
eTogJycgfSkKCQkJCQkvLwkuYW5pbWF0ZSh7IHRvcDogdGhpcy5hYnMgPyB0aGlz
LnRvcCA6IGFqcy53aW5kb3dIZWlnaHQoKS8yIH0sIDUwMCwgJ2Vhc2VPdXRCYWNr
JywgJEQodGhpcywgJ2ZpeFBvcycpKQoJCQkJCS8vOwoJCQkJCSRGUyh0aGlzLiRC
b3hbMF0pLmRpc3BsYXkgPSAnJzsKCQkJCQlMaWdodEJveC5sYXN0ID0gdGhpczsK
CQkJCQlMaWdodEJveC5vcGVuLnB1c2godGhpcyk7CgoJCQkJCWlmICh0aGlzLiR3
cmFwcGVyKSB7CgkJCQkJCWlmICggIXRoaXMuc3R5bGVPdmVyZmxvdyApIHRoaXMu
c3R5bGVPdmVyZmxvdyA9IHRoaXMuJHdyYXBwZXIuY3NzKCdvdmVyZmxvdycpOwoJ
CQkJCQl0aGlzLiR3cmFwcGVyLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7CgkJ
CQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vaWYoICF0aGlzLmFicyAp
IHRoaXMuJEJveC5jc3MoeyB0b3A6IGFqcy53aW5kb3dIZWlnaHQoKS8yIH0pOwoJ
CQkJCS8vdGhpcy4kQm94LmFuaW1hdGUoeyB0b3A6IHRvcCArIGFqcy53aW5kb3dI
ZWlnaHQoKSArIHRoaXMuZGggfSwgNTAwLCAnZWFzZUluT3V0QmFjaycsIGZ1bmN0
aW9uICgpeyAkRlModGhpcykuZGlzcGxheSA9ICdub25lJzsgfSk7CgkJCQkJJEZT
KHRoaXMuJEJveFswXSkuZGlzcGxheSA9ICdub25lJzsKCQkJCQlpZiggTGlnaHRC
b3gub3BlbiApIExpZ2h0Qm94Lm9wZW4JPSBBcnJheS5yZW1vdmUoTGlnaHRCb3gu
b3BlbiwgdGhpcyk7CgkJCQkJTGlnaHRCb3gubGFzdAk9IExpZ2h0Qm94Lm9wZW5b
TGlnaHRCb3guYWN0aXZlIC0gMV07CgoJCQkJCWlmICh0aGlzLiR3cmFwcGVyKSB7
CgkJCQkJCXRoaXMuJHdyYXBwZXIuY3NzKCdvdmVyZmxvdycsIHRoaXMuc3R5bGVP
dmVyZmxvdyk7CgkJCQkJCXRoaXMuc3R5bGVPdmVyZmxvdyA9IG51bGw7CgkJCQkJ
fQoJCQkJfQoKCQkJCXRoaXMuX3Zpc2libGUJPSB0aGlzLnZpc2libGU7CS8vIO+/
ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73vv73v
v70KCQkJCXRoaXMudmlzaWJsZQk9ICFkOwkvLyDvv73vv73vv73vv73vv70g77+9
77+977+977+977+977+977+977+9CgoJCQkJaWYoIHRoaXMuJEJPRFkgKQoJCQkJ
ewoJCQkJCWlmKCB0aGlzLmhpZGVTZWxlY3RzICkgdGhpcy4kQk9EWVt0aGlzLnZp
c2libGU/J2FkZENsYXNzJzoncmVtb3ZlQ2xhc3MnXSgnaGlkZGVuLWFsbC1zZWxl
Y3RzJyk7CgkJCQkJaWYoIHRoaXMuaGlkZU9iamVjdHMgKSB0aGlzLiRCT0RZW3Ro
aXMudmlzaWJsZT8nYWRkQ2xhc3MnOidyZW1vdmVDbGFzcyddKCdoaWRkZW4tYWxs
LW9iamVjdHMnKTsKCQkJCX0KCgoJCQkJdGhpcy5kaXNwYXRjaEV2ZW50KGUsIHRo
aXMpOwoJCQl9CgoJCQlyZXR1cm4JdGhpczsKCQl9LAoKCgkJaGlkZTogZnVuY3Rp
b24gKGYpeyByZXR1cm4JdGhpcy5kaXNhYmxlZEhpZGUgPyB0aGlzIDogdGhpcy50
b2dnbGUoZiwgZmFsc2UpOyB9LAoJCXNob3c6IGZ1bmN0aW9uIChmKXsgcmV0dXJu
CXRoaXMuZGlzYWJsZWRTaG93ID8gdGhpcyA6IHRoaXMudG9nZ2xlKGYsIHRydWUp
OyB9LAoKCgkJZGVzdHJveTogZnVuY3Rpb24gKCkKCQl7CgkJCUxpZ2h0Qm94LmNv
dW50LS07CgkJCUxpZ2h0Qm94Lm9wZW4JPSBBcnJheS5yZW1vdmUoTGlnaHRCb3gu
b3BlbiwgdGhpcywgMSk7CgkJCWlmKCB0aGlzLmlzVmlzaWJsZSApCgkJCQl0aGlz
LmhpZGUoKTsKCQl9CgoJfSk7CgoKCWpRdWVyeS5ob3RrZXlzLm9uKCdlc2MnLCBm
dW5jdGlvbiAoKXsKCQlpZiggTGlnaHRCb3guYWN0aXZlICYmIExpZ2h0Qm94Lmxh
c3QgJiYgIUxpZ2h0Qm94Lmxhc3QuaXNEaXNhYmxlZCgpICl7CgkJCUxpZ2h0Qm94
Lmxhc3QuaGlkZSgpOwoJCX0KCX0pOwoKCglqUXVlcnkod2luZG93KS5yZXNpemUo
ZnVuY3Rpb24gKCl7CgkJaWYoIExpZ2h0Qm94LmFjdGl2ZSAmJiBMaWdodEJveC5s
YXN0ICYmIExpZ2h0Qm94Lmxhc3QuaXNWaXNpYmxlKCkgKXsKCQkJQXJyYXkuZm9y
RWFjaChMaWdodEJveC5vcGVuLCBmdW5jdGlvbiAoTCkgeyBMLmlzVmlzaWJsZSgp
ICYmIEwuZml4UG9zKCk7IH0pOwoJCX0KCX0pOwoKCWpzTG9hZGVyLmxvYWRlZCgn
e3BsdWdpbnN9TGlnaHRCb3gnLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1
L2pzQ29yZS9wbHVnaW5zL0xpZ2h0Qm94LmpzIGVuZAoKLy8gZGF0YS9ydS9pbWFn
ZXMvanMvcnUvanNDb3JlL3BsdWdpbnMvRHJvcGRvd24uanMgc3RhcnQKCi8qKgog
KiBAZnVuY3Rpb24gJC5mbi5Ecm9wZG93bgogKiBAb2JqZWN0ICAgRHJvcGRvd24K
ICogQGF1dGhvciAgU3RhbmlzbGF2IFR1Z292aWtvdiAgPHMudHVnb3Zpa292QGNv
cnAubWFpbC5ydT4KICogQGVkaXRvciAgQWJhc2hraW4gQWxleGFuZGVyIDxhLmFi
YXNoa2luQGNvcnAubWFpbC5ydT4KICovCgoKLy8gLi9kYXRhL2NvbW1vbi9qcy9w
cm9maWxlci9wcm9maWxlci5qcyBzdGFydAoKZGVmaW5lKCdwcm9maWxlci9wcm9m
aWxlcicsIGZ1bmN0aW9uKCkgewoKCS8qIEpTIFBST0ZJTEVSCgkgKgoJICovCgko
ZnVuY3Rpb24gKCl7CgkJLyoqIEBuYW1lc3BhY2Ugd2luZG93LnBlcmZvcm1hbmNl
ICovCgkJLyoqIEBuYW1lc3BhY2Ugd2luZG93LnBlcmZvcm1hbmNlLm5vdyAgLS0g
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJ
L3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cgKi8KCQkvKiogQG5hbWVzcGFjZSB3aW5k
b3cucGVyZm9ybWFuY2UubW96Tm93ICovCgkJLyoqIEBuYW1lc3BhY2Ugd2luZG93
LnBlcmZvcm1hbmNlLm1zTm93ICovCgkJLyoqIEBuYW1lc3BhY2Ugd2luZG93LnBl
cmZvcm1hbmNlLm9Ob3cgKi8KCQkvKiogQG5hbWVzcGFjZSB3aW5kb3cucGVyZm9y
bWFuY2Uud2Via2l0Tm93ICovCgoJCXZhciBwZXJmb3JtYW5jZSA9IHdpbmRvdy5w
ZXJmb3JtYW5jZSB8fCB7fTsKCQlwZXJmb3JtYW5jZS5ub3cgPSAoZnVuY3Rpb24o
KSB7CgkJCXJldHVybiAoCgkJCQkgICBwZXJmb3JtYW5jZS5ub3cKCQkJCXx8IHBl
cmZvcm1hbmNlLm1vek5vdwoJCQkJfHwgcGVyZm9ybWFuY2UubXNOb3cKCQkJCXx8
IHBlcmZvcm1hbmNlLm9Ob3cKCQkJCXx8IHBlcmZvcm1hbmNlLndlYmtpdE5vdwoJ
CQkJfHwgZnVuY3Rpb24oKSB7cmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9
CgkJCSk7CgkJfSkoKTsKCgoJCXZhciBzdGFydDsKCQl2YXIgcmVzdWx0ID0gW107
CgkJdmFyIGRpc2FibGVkID0gdHJ1ZTsKCgkJZnVuY3Rpb24gYWRkKHN0YXRlLCBz
dHIpIHsKCQkJdmFyIGZpbmlzaCA9IHBlcmZvcm1hbmNlLm5vdygpOwoKCQkJaWYo
IXN0YXJ0KSB7CgkJCQlzdGFydCA9IGZpbmlzaDsKCQkJfQoKCQkJcmVzdWx0LnB1
c2goewoJCQkJc3RhdGU6IHN0YXRlLAoJCQkJc3RyOnN0ciwKCQkJCWR1cmF0aW9u
OiAoZmluaXNoIC0gc3RhcnQpCgkJCX0pOwoKCQkJc3RhcnQgPSBmaW5pc2g7CgkJ
fQoKCQlmdW5jdGlvbiBjbGVhcigpIHsKCQkJc3RhcnQgPSBudWxsOwoJCQlyZXN1
bHQgPSBbXTsKCQl9CgoJCS8qCgkJdmFyIF9yZXRyeSA9IDA7CgkJZnVuY3Rpb24g
b25yZWFkeShjYWxsYmFjaykgewoJCQl2YXIgZmlyc3RDb3JyZWN0Q2hpbGQgPSBk
b2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZDsKCgkJCWlm
KCBmaXJzdENvcnJlY3RDaGlsZCApewoJCQkJZG8gewoJCQkJCWlmKCBmaXJzdENv
cnJlY3RDaGlsZC5ub2RlVHlwZSA9PSAxICl7CgkJCQkJCWNhbGxiYWNrKGNoaWxk
KTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCgkJCQl9IHdoaWxlKCBmaXJzdENvcnJl
Y3RDaGlsZCA9IGZpcnN0Q29ycmVjdENoaWxkLm5leHRTaWJsaW5nICkKCQkJfQoK
CQkJaWYoIF9yZXRyeSA8IDEwICl7CgkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
ewoJCQkJCW9ucmVhZHkoY2FsbGJhY2spOwoKCQkJCX0sICsrX3JldHJ5KjUwKTsK
CQkJfQoJCX0KCQkqLwoKCQl2YXIgUHJvZmlsZXIgPSB7CgkJCWNsZWFyOiBjbGVh
ciwKCgkJCWVuYWJsZTogZnVuY3Rpb24oKSB7CgkJCQlkaXNhYmxlZCA9IGZhbHNl
OwoJCQl9LAoKCQkJZGlzYWJsZTogZnVuY3Rpb24oKSB7CgkJCQlkaXNhYmxlZCA9
IHRydWU7CgkJCX0sCgoJCQlzcHk6IGZ1bmN0aW9uIChuYW1lLCBvYmplY3QsIG1l
dGhvZE5hbWUpewoJCQkJaWYoZGlzYWJsZWQpIHsKCQkJCQlyZXR1cm47CgkJCQl9
CgoJCQkJaWYoIG1ldGhvZE5hbWUgaW5zdGFuY2VvZiBBcnJheSApewoJCQkJCXZh
ciBpID0gbWV0aG9kTmFtZS5sZW5ndGg7CgkJCQkJd2hpbGUoIGktLSApewoJCQkJ
CQlQcm9maWxlci5zcHkobmFtZSwgb2JqZWN0LCBtZXRob2ROYW1lW2ldKTsKCQkJ
CQl9CgkJCQl9CgkJCQllbHNlIGlmKCBtZXRob2ROYW1lICl7CgkJCQkJdmFyIG9y
aWdpbiA9IG9iamVjdFttZXRob2ROYW1lXTsKCgkJCQkJb2JqZWN0W21ldGhvZE5h
bWVdID0gZnVuY3Rpb24gKCl7CgkJCQkJCXZhciBsYWJlbCA9IG5hbWUrJy5mbi4n
K21ldGhvZE5hbWU7CgkJCQkJCVByb2ZpbGVyLnN0YXJ0KGxhYmVsKTsKCQkJCQkJ
dmFyIHJldCA9IG9yaWdpbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJCQkJCQlQ
cm9maWxlci5lbmQobGFiZWwpOwoJCQkJCQlyZXR1cm4JcmV0OwoJCQkJCX07CgkJ
CQl9CgkJCQllbHNlIHsKCQkJCQlvYmplY3QgPSBvYmplY3QuZm4gfHwgb2JqZWN0
OwoJCQkJCWZvciggbWV0aG9kTmFtZSBpbiBvYmplY3QgKXsKCQkJCQkJaWYoIG9i
amVjdC5oYXNPd25Qcm9wZXJ0eShtZXRob2ROYW1lKSApewoJCQkJCQkJaWYoIHR5
cGVvZiBvYmplY3RbbWV0aG9kTmFtZV0gPT09ICdmdW5jdGlvbicgKXsKCQkJCQkJ
CQlQcm9maWxlci5zcHkobmFtZSwgb2JqZWN0LCBtZXRob2ROYW1lKTsKCQkJCQkJ
CX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfSwKCgkJCXN0YXJ0OiBmdW5jdGlv
bihzdHIpIHsKCQkJCWlmKGRpc2FibGVkKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoK
CQkJCWFkZCgnc3RhcnQnLCBzdHIpOwoJCQl9LAoKCQkJZW5kOiBmdW5jdGlvbihz
dHIpIHsKCQkJCWlmKGRpc2FibGVkKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJ
CWFkZCgnZW5kJywgc3RyKTsKCQkJfSwKCgkJCXJlbmRlclJlc3VsdDogZnVuY3Rp
b24ob3B0cykgewoJCQkJaWYoZGlzYWJsZWQpIHsKCQkJCQlyZXR1cm47CgkJCQl9
CgoJCQkJb3B0cyA9IG9wdHMgfHwgeyBtaW46IDAgfTsKCgkJCQl2YXIgdHJlZSAg
ICA9IFtdOwoJCQkJdmFyIHBhcmVudHMgPSBbXTsKCgkJCQlmdW5jdGlvbiBjcmVh
dGVSb3coc3RyLCBkdXJhdGlvbikgewoJCQkJCXZhciByb3cgPSB7CgkJCQkJCXN0
cjogc3RyLAoJCQkJCQlkdXJhdGlvbjogZHVyYXRpb24gfHwgMCwKCQkJCQkJcGFy
ZW50OiBsYXN0UGFyZW50KCksCgkJCQkJCWRlcHRoOiBwYXJlbnRzLmxlbmd0aCwK
CQkJCQkJY2hpbGRzOiBbXQoJCQkJCX07CgoJCQkJCXRyZWUucHVzaChyb3cpOwoK
CQkJCQl2YXIgcGFyZW50ID0gbGFzdFBhcmVudCgpOwoJCQkJCWlmKHBhcmVudCkg
ewoJCQkJCQlwYXJlbnQuY2hpbGRzLnB1c2gocm93KTsKCQkJCQl9CgkJCQkJcmV0
dXJuIHJvdzsKCQkJCX0KCgkJCQlmdW5jdGlvbiBjcmVhdGVBbm9uaW0oZHVyYXRp
b24pIHsKCQkJCQlyZXR1cm4gY3JlYXRlUm93KCcmbHQ7YW5vbmltb3VzJmd0Oycs
IGR1cmF0aW9uKQoJCQkJfQoKCQkJCWZ1bmN0aW9uIGxhc3RQYXJlbnQoKSB7CgkJ
CQkJcmV0dXJuIHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXSB8fCBudWxsOwoJ
CQkJfQoKCQkJCWZ1bmN0aW9uIGxhc3RSb3coKSB7CgkJCQkJcmV0dXJuIHRyZWVb
dHJlZS5sZW5ndGggLSAxXTsKCQkJCX0KCgkJCQlBcnJheS5mb3JFYWNoKHJlc3Vs
dCwgZnVuY3Rpb24ocmVzKSB7CgkJCQkJaWYocmVzLnN0YXRlID09ICdzdGFydCcp
IHsKCQkJCQkJaWYocmVzLmR1cmF0aW9uKSB7CgkJCQkJCQljcmVhdGVBbm9uaW0o
cmVzLmR1cmF0aW9uKTsKCQkJCQkJfQoKCQkJCQkJdmFyIHJvdyA9IGNyZWF0ZVJv
dyhyZXMuc3RyKTsKCQkJCQkJcGFyZW50cy5wdXNoKHJvdyk7CgkJCQkJfQoKCQkJ
CQlpZihyZXMuc3RhdGUgPT0gJ2VuZCcpIHsKCQkJCQkJdmFyIGxhc3QgPSBsYXN0
Um93KCk7CgoJCQkJCQlpZihyZXMuZHVyYXRpb24pIHsKCQkJCQkJCWlmKGxhc3Qg
JiYgbGFzdC5zdHIgPT0gcmVzLnN0cikgewoJCQkJCQkJCWxhc3QuZHVyYXRpb24g
Kz0gcmVzLmR1cmF0aW9uOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQljcmVhdGVB
bm9uaW0ocmVzLmR1cmF0aW9uKTsKCQkJCQkJCX0KCQkJCQkJfQoKCQkJCQkJcGFy
ZW50cy5wb3AoKTsKCQkJCQl9CgkJCQl9KTsKCgkJCQlmdW5jdGlvbiBnZXRUeXBl
KGR1cmF0aW9uKSB7CgkJCQkJCSAgIGlmIChkdXJhdGlvbiA8ICAgMSkgeyByZXR1
cm4gJzEnOwoJCQkJCX0gZWxzZSBpZiAoZHVyYXRpb24gPCAgMTApIHsgcmV0dXJu
ICcyJzsKCQkJCQl9IGVsc2UgaWYgKGR1cmF0aW9uIDwgIDMwKSB7IHJldHVybiAn
Myc7CgkJCQkJfSBlbHNlIGlmIChkdXJhdGlvbiA8ICA1MCkgeyByZXR1cm4gJzQn
OwoJCQkJCX0gZWxzZSBpZiAoZHVyYXRpb24gPCAxMDApIHsgcmV0dXJuICc1JzsK
CQkJCQl9IGVsc2UgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAnNic7CgkJ
CQkJfQoJCQkJfQoKCQkJCXZhciBodG1sID0gWwoJCQkJCSc8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPicsCgkJCQkJCScjcHJvZmlsZXIge2JhY2tncm91bmQ6IHdoaXRl
OyBib3JkZXI6IDFweCBzb2xpZCByZWQ7fScsCgoJCQkJCQknI3Byb2ZpbGVyIC5w
cm9maWxlcl9fcm93IHttYXJnaW4tbGVmdDogMWVtfScsCgoJCQkJCQknI3Byb2Zp
bGVyIC5wcm9maWxlcl9fcm93X190aXRsZSB7cGFkZGluZzogMC41ZW07fSAnLAoJ
CQkJCQknI3Byb2ZpbGVyIC5wcm9maWxlcl9fcm93X190aXRsZTpob3ZlciB7YmFj
a2dyb3VuZC1jb2xvcjogeWVsbG93O30gJywKCQkJCQkJJyNwcm9maWxlciAucHJv
ZmlsZXJfX3Jvd19fdGl0bGVfcGFyZW50IHsgY3Vyc29yOnBvaW50ZXI7fScsCgoJ
CQkJCQknI3Byb2ZpbGVyIC5wcm9maWxlcl9fcm93X190aXRsZV8xIHtjb2xvcjoj
Y2NjfSAnLAoJCQkJCQknI3Byb2ZpbGVyIC5wcm9maWxlcl9fcm93X190aXRsZV8y
IHtjb2xvcjojOTk5fSAnLAoJCQkJCQknI3Byb2ZpbGVyIC5wcm9maWxlcl9fcm93
X190aXRsZV8zIHtjb2xvcjojNjY2fSAnLAoJCQkJCQknI3Byb2ZpbGVyIC5wcm9m
aWxlcl9fcm93X190aXRsZV80IHtjb2xvcjojMDAwfSAnLAoJCQkJCQknI3Byb2Zp
bGVyIC5wcm9maWxlcl9fcm93X190aXRsZV81IHtjb2xvcjojZjAwfSAnLAoJCQkJ
CQknI3Byb2ZpbGVyIC5wcm9maWxlcl9fcm93X190aXRsZV82IHtjb2xvcjojZjAw
OyBmb250LXdlaWdodDogYm9sZH0gJywKCgoJCQkJCQknI3Byb2ZpbGVyIC5wcm9m
aWxlcl9fcm93X2NvbGxhcHNlID4gLnByb2ZpbGVyX19yb3dfX2NoaWxkcyB7ZGlz
cGxheTogbm9uZX0gJywKCQkJCQkJJyNwcm9maWxlciAucHJvZmlsZXJfX3Jvd19j
b2xsYXBzZSA+IC5wcm9maWxlcl9fcm93X190aXRsZV9zZWxmIHtkaXNwbGF5OiBu
b25lfSAnLAoKCQkJCQkJJyNwcm9maWxlciAucHJvZmlsZXJfX3Jvd19leHBhbmQg
ICA+IC5wcm9maWxlcl9fcm93X190aXRsZV9kZXB0aCB7ZGlzcGxheTogbm9uZX0g
JywKCgkJCQkJCScjcHJvZmlsZXIgLnByb2ZpbGVyX19yb3dfX2R1cmF0aW9uIHtm
bG9hdDpyaWdodDsgcGFkZGluZy1sZWZ0OiAwLjVlbX0gJywKCgkJCQkJCScjcHJv
ZmlsZXIgLnByb2ZpbGVyX19jb2xsYXBzZV9jb250cm9sIHtwb3NpdGlvbjogYWJz
b2x1dGU7IG1hcmdpbi1sZWZ0OiAtMWVtO30nLAoJCQkJCQknI3Byb2ZpbGVyIC5w
cm9maWxlcl9fY2xvc2UgeyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiA1cHg7IGN1
cnNvcjogcG9pbnRlcjt9JywKCgkJCQkJJzwvc3R5bGU+JywKCQkJCQknPGRpdiBp
ZD0icHJvZmlsZXIiPicsCgkJCQkJCSc8c3BhbiBjbGFzcz0icHJvZmlsZXJfX2Ns
b3NlIiB0aXRsZT0iY2xvc2UiPlsgY2xvc2UgXTwvc3Bhbj4nCgkJCQldOwoKCQkJ
CWZ1bmN0aW9uIHJhc3Rlcml6ZVJvd1RpdGxlKHN0ciwgZHVyYXRpb24sIGhhc0No
aWxkcywgZGVwdGgpIHsKCQkJCQlpZiggIWR1cmF0aW9uIHx8IGR1cmF0aW9uID49
IG9wdHMubWluICl7CgkJCQkJCWh0bWwucHVzaCgnPGRpdiBjbGFzcz0iJyk7CgkJ
CQkJCQkJaHRtbC5wdXNoKCcgcHJvZmlsZXJfX3Jvd19fdGl0bGUnKTsKCQkJCQkJ
CQlodG1sLnB1c2goJyBwcm9maWxlcl9fcm93X190aXRsZV8nK2dldFR5cGUoZHVy
YXRpb24pKTsKCgkJCQkJCQkJaHRtbC5wdXNoKGhhc0NoaWxkcyA/ICcgcHJvZmls
ZXJfX3Jvd19fdGl0bGVfcGFyZW50JyA6ICcnKTsKCQkJCQkJCQlodG1sLnB1c2go
ZGVwdGggICAgID8gJyBwcm9maWxlcl9fcm93X190aXRsZV9kZXB0aCcgIDogJyBw
cm9maWxlcl9fcm93X190aXRsZV9zZWxmJyk7CgkJCQkJCQlodG1sLnB1c2goJyI+
Jyk7CgoJCQkJCQkJaWYoZHVyYXRpb24pIHsKCQkJCQkJCQlodG1sLnB1c2goJzxz
cGFuIGNsYXNzPSJwcm9maWxlcl9fcm93X19kdXJhdGlvbiI+JyArIGR1cmF0aW9u
LnRvRml4ZWQoMykgKyAnPC9zcGFuPicpOwoJCQkJCQkJfQoKCQkJCQkJCWlmKGhh
c0NoaWxkcykgewoJCQkJCQkJCWlmKGRlcHRoKSB7CgkJCQkJCQkJCWh0bWwucHVz
aCgnPGIgY2xhc3M9InByb2ZpbGVyX19jb2xsYXBzZV9jb250cm9sIHByb2ZpbGVy
X19jb2xsYXBzZV9wbHVzIj4rPC9iPicpOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJ
CQkJCWh0bWwucHVzaCgnPGIgY2xhc3M9InByb2ZpbGVyX19jb2xsYXBzZV9jb250
cm9sIHByb2ZpbGVyX19jb2xsYXBzZV9taW51cyI+LTwvYj4nKTsKCQkJCQkJCQl9
CgkJCQkJCQl9CgoJCQkJCQkJaHRtbC5wdXNoKHN0cik7CgkJCQkJCWh0bWwucHVz
aCgnPC9kaXY+Jyk7CgkJCQkJfQoJCQkJfQoKCQkJCWZ1bmN0aW9uIGRlcHRoRHVy
YXRpb24ocmVzKSB7CgkJCQkJdmFyIGR1cmF0aW9uID0gcmVzLmR1cmF0aW9uOwoK
CQkJCQlBcnJheS5mb3JFYWNoKHJlcy5jaGlsZHMsIGZ1bmN0aW9uKGNoaWxkKSB7
CgkJCQkJCWR1cmF0aW9uICs9IGRlcHRoRHVyYXRpb24oY2hpbGQpOwoJCQkJCX0p
OwoKCQkJCQlyZXR1cm4gZHVyYXRpb247CgkJCQl9CgoJCQkJZnVuY3Rpb24gcmFz
dGVyaXplUm93KHJlcykgewoJCQkJCWh0bWwucHVzaCgnPGRpdiBjbGFzcz0icHJv
ZmlsZXJfX3JvdyAgcHJvZmlsZXJfX3Jvd18nKyhyZXMuZGVwdGggPCAyID8gJ2V4
cGFuZCcgOiAnY29sbGFwc2UnKSsnIj4nKTsKCQkJCQkJcmFzdGVyaXplUm93VGl0
bGUocmVzLnN0ciwgcmVzLmR1cmF0aW9uLCByZXMuY2hpbGRzLmxlbmd0aCwgZmFs
c2UpOwoKCQkJCQkJcmFzdGVyaXplUm93VGl0bGUocmVzLnN0ciwgZGVwdGhEdXJh
dGlvbihyZXMpLCByZXMuY2hpbGRzLmxlbmd0aCwgdHJ1ZSk7CgoJCQkJCQlpZihy
ZXMuY2hpbGRzLmxlbmd0aCkgewoJCQkJCQkJaHRtbC5wdXNoKCc8ZGl2IGNsYXNz
PSJwcm9maWxlcl9fcm93X19jaGlsZHMiPicpOwoJCQkJCQkJCUFycmF5LmZvckVh
Y2gocmVzLmNoaWxkcywgZnVuY3Rpb24oY2hpbGQpIHsKCQkJCQkJCQkJcmFzdGVy
aXplUm93KGNoaWxkKTsKCQkJCQkJCQl9KTsKCgkJCQkJCQlodG1sLnB1c2goJzwv
ZGl2PicpOwoJCQkJCQl9CgoJCQkJCWh0bWwucHVzaCgnPC9kaXY+Jyk7CgkJCQl9
CgoJCQkJQXJyYXkuZm9yRWFjaChBcnJheS5maWx0ZXIodHJlZSwgZnVuY3Rpb24o
cmVzKSB7CgkJCQkJcmV0dXJuIHJlcy5wYXJlbnQgPT0gbnVsbDsKCQkJCX0pLCBm
dW5jdGlvbihyZXMpIHsKCQkJCQlyYXN0ZXJpemVSb3cocmVzKTsKCQkJCX0pOwoK
CQkJCWh0bWwucHVzaCgnPC9kaXY+Jyk7CgoJCQkJLy8g0L3Rg9C20L3QviDRg9Cx
0LXQtNC40YLRjNGB0Y8g0YfRgtC+IGRvbSDQt9Cw0LPRgNGD0LfQuNC70YHRjwoJ
CQkJJChmdW5jdGlvbigpIHsKCQkJCQkkKGRvY3VtZW50LmJvZHkpLnByZXBlbmQo
aHRtbC5qb2luKCcnKSk7CgoJCQkJCSQoJyNwcm9maWxlcicpLmVhY2goZnVuY3Rp
b24oKSB7CgkJCQkJCXZhciBwcm9maWxlciA9ICQodGhpcyk7CgoJCQkJCQlwcm9m
aWxlci5maW5kKCcucHJvZmlsZXJfX3Jvd19fdGl0bGVfcGFyZW50JykuY2xpY2so
ZnVuY3Rpb24oKSB7CgkJCQkJCQkkKHRoaXMucGFyZW50Tm9kZSkudG9nZ2xlQ2xh
c3MoJ3Byb2ZpbGVyX19yb3dfZXhwYW5kIHByb2ZpbGVyX19yb3dfY29sbGFwc2Un
KTsKCQkJCQkJfSk7CgoJCQkJCQlwcm9maWxlci5maW5kKCcucHJvZmlsZXJfX2Ns
b3NlJykuY2xpY2soZnVuY3Rpb24oKSB7CgkJCQkJCQlwcm9maWxlci5yZW1vdmUo
KTsKCQkJCQkJfSk7CgkJCQkJfSk7CgkJCQl9KTsKCgkJCQljbGVhcigpOwoJCQl9
CgkJfTsKCgkJLy8gYWxpYXNlcwoJCVByb2ZpbGVyLnMgPSBQcm9maWxlci5zdGFy
dDsKCQlQcm9maWxlci5lID0gUHJvZmlsZXIuZW5kOwoKCQl3aW5kb3cucHJvZmls
ZXIgPSBQcm9maWxlcgoJfSkoKTsKCn0pOwoKLy8gLi9kYXRhL2NvbW1vbi9qcy9w
cm9maWxlci9wcm9maWxlci5qcyBlbmQKCnZhciAkUCA9IHByb2ZpbGVyOwoKCShm
dW5jdGlvbigkKQoJewoJCXZhciBuYW1lc3BhY2UgPSAnZHJvcGRvd24uJyArICQu
ZXhwYW5kbzsKCgkJLyoqCgkJICogQGNsYXNzIERyb3Bkb3duCgkJICovCgkJanND
bGFzcwoJCS5jcmVhdGUoJ0Ryb3Bkb3duJykKCQkuc3RhdGljcyh7CgkJCWFkZDog
ZnVuY3Rpb24gKEQpCgkJCXsKCQkJCXZhciBnID0gRC5vcHRpb25zLmdyb3VwOwoK
CQkJCWlmICghdGhpc1tnXSkgewoJCQkJCXRoaXNbZ10gPSBbXTsKCQkJCX0KCgkJ
CQl0aGlzW2ddLnB1c2goRCk7CgkJCX0sCgoJCQlyZW1vdmU6IGZ1bmN0aW9uKEQp
CgkJCXsKCQkJCXZhciBnID0gRC5vcHRpb25zLmdyb3VwOwoKCQkJCWlmICh0aGlz
W2ddICYmIHRoaXNbZ10gaW5zdGFuY2VvZiBBcnJheSkgewoJCQkJCXRoaXNbZ10g
PSBBcnJheS5maWx0ZXIodGhpc1tnXSwgZnVuY3Rpb24oZCkgewoJCQkJCQlyZXR1
cm4gRCAhPT0gZDsKCQkJCQl9KQoJCQkJfQoJCQl9LAoKCQkJaGlkZTogZnVuY3Rp
b24gKG5hbWUsIHVuaXFJZCkKCQkJewoJCQkJaWYgKG5hbWUgaW4gdGhpcykgewoJ
CQkJCUFycmF5LmZvckVhY2godGhpc1tuYW1lXSwgZnVuY3Rpb24gKEQpewoJCQkJ
CQkodW5pcUlkICE9IEQudW5pcUlkKSAmJiBELmhpZGUoKTsKCQkJCQl9KTsKCQkJ
CX0KCQkJfSwKCgkJCWRlc3Ryb3k6IGZ1bmN0aW9uKG5hbWUpCgkJCXsKCQkJCWlm
IChuYW1lIGluIHRoaXMpIHsKCQkJCQlBcnJheS5mb3JFYWNoKHRoaXNbbmFtZV0s
IGZ1bmN0aW9uIChEKXsKCQkJCQkJRC5kZXN0cm95KCkKCQkJCQl9KTsKCgkJCQkJ
ZGVsZXRlIHRoaXNbbmFtZV07CgkJCQl9CgkJCX0sCgoJCQlkZWZhdWx0T3B0aW9u
czogewoJCQkJICBncm91cDogICAgICAgICAgJ2Ryb3Bkb3duJwoJCQkJLCB0aW1l
b3V0OiAgICAgICAgNTAwCgkJCQksIG9uQ2xpY2s6ICAgICAgICAkLm5vb3AKCQkJ
CSwgb25Ub2dnbGU6ICAgICAgICQubm9vcAoJCQkJLCBvbkNsb3NlZDogICAgICAg
JC5ub29wCgkJCQksIG9yaWVudGF0aW9uOiAgICBmYWxzZQoJCQkJLCBvcGVuSW5z
aWRlQm9keTogZmFsc2UKCQkJCSwgbGF6eTogICAgICAgICAgIGZhbHNlCgkJCQks
IGhpZGVCeU1vdXNlZG93bjogZmFsc2UKCQkJCSwgaGlkZUJ5Qmx1cjoJICAgZmFs
c2UKCQkJCSwgd3JhcHBlcldpZHRoOiBmdW5jdGlvbiAoKSB7IHJldHVybiBhanMu
d2luZG93V2lkdGgoKTsgfQoJCQl9CgkJfSkKCQkubWV0aG9kcyh7CgoJCQlfYmVm
b3JlQWNjZXNzOiBmdW5jdGlvbigpIHsKCQkJCWlmKCF0aGlzLl9pc1RvdWNoZWQp
IHsKCQkJCQl0aGlzLl9pc1RvdWNoZWQgPSB0cnVlOwoKCQkJCQl0aGlzLiRsaW5r
LmJpbmQoJ21vdXNlZW50ZXIuJyArIG5hbWVzcGFjZSwgdGhpcy5fY2FuY2VsVGlt
ZXIuYmluZCh0aGlzKSk7CgkJCQkJdGhpcy4kbGluay5iaW5kKCdtb3VzZWxlYXZl
LicgKyBuYW1lc3BhY2UsIHRoaXMuX2luaXRUaW1lci5iaW5kKHRoaXMpKTsKCgkJ
CQkJJFAucygnYmluZCBjb250YWluZXInKTsKCQkJCQkJJFAucygnZmluZCBjb250
YWluZXInKTsKCQkJCQkJCXRoaXMuJGNvbnRhaW5lciA9IHR5cGVvZiB0aGlzLl9j
b250YWluZXIgPT09ICdzdHJpbmcnID8gdGhpcy5fbm9kZS5maW5kKHRoaXMuX2Nv
bnRhaW5lcikgOiB0aGlzLl9jb250YWluZXI7CgkJCQkJCSRQLmUoJ2ZpbmQgY29u
dGFpbmVyJyk7CgoJCQkJCQkkUC5zKCdjbGljaycpOwoJCQkJCQkJdGhpcy4kY29u
dGFpbmVyLmJpbmQoJ2NsaWNrLicgICAgICArIG5hbWVzcGFjZSwgdGhpcy5fY2xp
Y2suYmluZCh0aGlzKSk7CgkJCQkJCSRQLmUoJ2NsaWNrJyk7CgoJCQkJCQkkUC5z
KCdtb3VzZWVudGVyJyk7CgkJCQkJCQl0aGlzLiRjb250YWluZXIuYmluZCgnbW91
c2VlbnRlci4nICsgbmFtZXNwYWNlLCB0aGlzLl9jYW5jZWxUaW1lci5iaW5kKHRo
aXMpKTsKCQkJCQkJJFAuZSgnbW91c2VlbnRlcicpOwoKCQkJCQkJJFAucygnbW91
c2VsZWF2ZScpOwoJCQkJCQkJdGhpcy4kY29udGFpbmVyLmJpbmQoJ21vdXNlbGVh
dmUuJyArIG5hbWVzcGFjZSwgdGhpcy5faW5pdFRpbWVyLmJpbmQodGhpcykpOwoJ
CQkJCQkkUC5lKCdtb3VzZWxlYXZlJyk7CgkJCQkJJFAuZSgnYmluZCBjb250YWlu
ZXInKTsKCQkJCX0KCQkJfSwKCgkJCV9fY29uc3RydWN0OiBmdW5jdGlvbiAobGlu
aywgY29udGFpbmVyLCBvcHRpb25zLCBub2RlKSB7CgkJCQl0aGlzLm9wdGlvbnMg
PSAkLmV4dGVuZCh7fSwgRHJvcGRvd24uZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMp
OwoJCQkJRHJvcGRvd24uYWRkKHRoaXMpOwoKCQkJCXRoaXMuX25vZGUgPSBub2Rl
OwoJCQkJdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyOwoKCQkJCWlmICh0aGlz
Lm9wdGlvbnMuaGlkZUJ5TW91c2Vkb3duKSB7CgkJCQkJdGhpcy5fZG9jdW1lbnRN
b3VzZURvd25PYnNlcnZlciA9IHRoaXMuX2RvY3VtZW50TW91c2VEb3duLmJpbmQo
dGhpcyk7CgkJCQl9CgkJCQlpZiAodGhpcy5vcHRpb25zLmhpZGVCeUJsdXIpIHsK
CQkJCQl0aGlzLl93aW5kb3dCbHVyT2JzZXJ2ZXIgPSB0aGlzLl93aW5kb3dCbHVy
LmJpbmQodGhpcyk7CgkJCQl9CgoJCQkJJFAucygnYmluZCBsaW5rJyk7CgkJCQkJ
JFAucygnZmluZCBsaW5rJyk7CgkJCQkJCXRoaXMuJGxpbmsgPSB0eXBlb2YgbGlu
ayA9PT0gJ3N0cmluZycgPyBub2RlLmZpbmQobGluaykgOiBsaW5rOwoJCQkJCSRQ
LmUoJ2ZpbmQgbGluaycpOwoKCQkJCQkkUC5zKCdjbGljaycpOwoJCQkJCQl0aGlz
LiRsaW5rLmJpbmQoJ2NsaWNrLicgKyBuYW1lc3BhY2UsIChmdW5jdGlvbiAoKSB7
CgkJCQkJCQlpZih0aGlzLm9wdGlvbnMubGF6eSkgewoJCQkJCQkJCXRoaXMuX2Jl
Zm9yZUFjY2VzcygpOwoJCQkJCQkJfQoKCQkJCQkJCWlmICghdGhpcy4kbGluay5j
bG9zZXN0KCcuZm9ybV9kaXNhYmxlZCcpLmxlbmd0aCkgewoJCQkJCQkJCXRoaXMu
c2hvdygpOwoJCQkJCQkJfQoJCQkJCQl9KS5iaW5kKHRoaXMpKTsKCQkJCQkkUC5l
KCdjbGljaycpOwoKCQkJCQlpZighdGhpcy5vcHRpb25zLmxhenkpIHsKCQkJCQkJ
dGhpcy5fYmVmb3JlQWNjZXNzKCk7CgkJCQkJfQoKCQkJCSRQLmUoJ2JpbmQgbGlu
aycpOwoJCQl9LAoKCQkJX2RvY3VtZW50TW91c2VEb3duOiBmdW5jdGlvbiAoZXZ0
KSB7CgkJCQlpZiAoIXRoaXMuJGNvbnRhaW5lci5oYXMoZXZ0LnRhcmdldCkubGVu
Z3RoKSB7CgkJCQkJdGhpcy5oaWRlKCk7CgkJCQl9CgkJCX0sCgoJCQlfd2luZG93
Qmx1cjogZnVuY3Rpb24gKGV2dCkgewoJCQkJdGhpcy5oaWRlKCk7CgkJCX0sCgoJ
CQlkZXN0cm95OiBmdW5jdGlvbigpCgkJCXsKCQkJCWlmKHRoaXMuX19yZW1vdmVk
KSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCXRoaXMuX2NhbmNlbFRpbWVyKCk7
CgoJCQkJdGhpcy5oaWRlKCk7CgkJCQlpZih0aGlzLiRjb250YWluZXIpIHsKCQkJ
CQl0aGlzLiRjb250YWluZXIudW5iaW5kKCcuJyArIG5hbWVzcGFjZSk7CgkJCQl9
CgkJCQl0aGlzLiRsaW5rLnVuYmluZCgnLicgKyBuYW1lc3BhY2UpOwoKCQkJCWlm
ICh0aGlzLm9wdGlvbnMub3Blbkluc2lkZUJvZHkpIHsKCQkJCQl0aGlzLiRjb250
YWluZXIucmVtb3ZlKCk7CgkJCQl9CgoJCQkJZGVsZXRlIHRoaXMuJGNvbnRhaW5l
cjsKCQkJCWRlbGV0ZSB0aGlzLiRsaW5rOwoJCQkJZGVsZXRlIHRoaXMuJHBhcmVu
dDsKCgkJCQlEcm9wZG93bi5yZW1vdmUodGhpcyk7CgkJCQl0aGlzLl9fcmVtb3Zl
ZCA9IHRydWU7CgkJCX0sCgoJCQlfY2xpY2s6IGZ1bmN0aW9uIChldnQpIHsKCQkJ
CXJldHVybgl0aGlzLm9wdGlvbnMub25DbGljayhldnQsIHRoaXMpOwoJCQl9LAoK
CQkJX3Jlc2l6ZTogZnVuY3Rpb24gKCkKCQkJewoJCQkJdmFyIG8gPSB0aGlzLm9w
dGlvbnMsIG9yID0gby5vcmllbnRhdGlvbiwgJEJveCA9IHRoaXMuJGNvbnRhaW5l
cjsKCgkJCQlpZiAob3IpCgkJCQl7CgkJCQkJJEJveC5yZXBsYWNlQ2xhc3MoL1xz
K2RkLW9yaWVudGF0aW9uLVx3Ky8sICcnKTsKCgkJCQkJaWYgKG9yID09ICdhdXRv
Jyl7CgkJCQkJCW9yCT0gKG8ud3JhcHBlcldpZHRoKCkgLSAoJEJveC5vZmZzZXQo
KS5sZWZ0ICsgJEJveC5vdXRlcldpZHRoKCkpIDwgNTApID8gJ2xlZnQnIDogJ3Jp
Z2h0JzsKCQkJCQl9CgoJCQkJCSRCb3guYWRkQ2xhc3MoJ2RkLW9yaWVudGF0aW9u
LScrb3IpOwoJCQkJfQoJCQl9LAoKCQkJc2hvdzogZnVuY3Rpb24oKQoJCQl7CgkJ
CQl0aGlzLl9jYW5jZWxUaW1lcigpOwoKCQkJCWlmICh0aGlzLiRjb250YWluZXIu
aXMoJzp2aXNpYmxlJykpCgkJCQl7CgkJCQkJdGhpcy5vcHRpb25zLm9uVG9nZ2xl
KGZhbHNlLCB0aGlzKTsKCQkJCQl0aGlzLmhpZGUoKTsKCQkJCX0KCQkJCWVsc2UK
CQkJCXsKCQkJCQlpZiAodGhpcy5vcHRpb25zLm9uVG9nZ2xlKHRydWUsIHRoaXMp
ICE9PSBmYWxzZSkgewoJCQkJCQlEcm9wZG93bi5oaWRlKCB0aGlzLm9wdGlvbnMu
Z3JvdXAsIHRoaXMudW5pcUlkICk7CgoJCQkJCQlpZiAodGhpcy5vcHRpb25zLm9w
ZW5JbnNpZGVCb2R5KQoJCQkJCQl7CgkJCQkJCQlpZiAoIXRoaXMuJHBhcmVudCkK
CQkJCQkJCXsKCQkJCQkJCQl0aGlzLiRwYXJlbnQgPSB0aGlzLiRjb250YWluZXIu
cGFyZW50KCk7CgoJCQkJCQkJCS8vINGH0YLQvtCx0Ysg0LrQvtGA0YDQtdC60YLQ
vdC+INGA0LDQsdC+0YLQsNC70L4g0LTRg9Cx0LvQuNGA0L7QstCw0L3QuNC1INC6
0L7QvdGC0YDQvtC70L7QsgoJCQkJCQkJCXRoaXMuJHBhcmVudC5hcHBlbmQodGhp
cy4kY29udGFpbmVyLmNsb25lKCkpOwoJCQkJCQkJCSQoJ2JvZHknKS5hcHBlbmQo
dGhpcy4kY29udGFpbmVyKTsKCQkJCQkJCX0KCgkJCQkJCQl2YXIgcG9zID0gdGhp
cy4kcGFyZW50Lm9mZnNldCgpOwoKCQkJCQkJCXRoaXMuJGNvbnRhaW5lci5jc3Mo
ewoJCQkJCQkJCSdsZWZ0JzogcG9zLmxlZnQsCgkJCQkJCQkJJ3RvcCc6IHBvcy50
b3AgKyB0aGlzLiRwYXJlbnQuaGVpZ2h0KCksCgkJCQkJCQkJJ21pbi13aWR0aCc6
IHRoaXMuJHBhcmVudC53aWR0aCgpCgkJCQkJCQl9KTsKCQkJCQkJfQoKCQkJCQkJ
aWYgKHRoaXMub3B0aW9ucy5oaWRlQnlNb3VzZWRvd24pIHsKCQkJCQkJCSQoZG9j
dW1lbnQpLm9uZSgnbW91c2Vkb3duJywgdGhpcy5fZG9jdW1lbnRNb3VzZURvd25P
YnNlcnZlcik7CgkJCQkJCX0KCQkJCQkJaWYgKHRoaXMub3B0aW9ucy5oaWRlQnlC
bHVyKSB7CgkJCQkJCQkkKHdpbmRvdykub25lKCdibHVyJywgdGhpcy5fd2luZG93
Qmx1ck9ic2VydmVyKTsKCQkJCQkJfQoKCQkJCQkJdGhpcy4kY29udGFpbmVyLnNo
b3coKQoJCQkJCQkJLm9mZnNldFBhcmVudCgpCgkJCQkJCQkuYW5kU2VsZigpCgkJ
CQkJCQkJLmNzcyh7IHpJbmRleDogNjUwMDIgfSkKCQkJCQkJOwoKCQkJCQkJJCh3
aW5kb3cpLmJpbmQoJ3Jlc2l6ZScsICREUyh0aGlzLCAnX3Jlc2l6ZScpKTsKCQkJ
CQkJdGhpcy5fcmVzaXplKCk7CgkJCQkJfQoJCQkJfQoJCQl9LAoKCQkJaGlkZTog
ZnVuY3Rpb24oY2FsbGJhY2spIHsKCQkJCSQod2luZG93KS51bmJpbmQoJ3Jlc2l6
ZScsICREUyh0aGlzLCAnX3Jlc2l6ZScpKTsKCgkJCQlpZih0aGlzLiRjb250YWlu
ZXIgJiYgKHRoaXMub3B0aW9ucy5vblRvZ2dsZShmYWxzZSwgdGhpcykgIT09IGZh
bHNlKSApIHsKCQkJCQl0aGlzLiRjb250YWluZXIKCQkJCQkJLm9mZnNldFBhcmVu
dCgpCgkJCQkJCS5hbmRTZWxmKCkKCQkJCQkJCS5jc3MoeyB6SW5kZXg6ICcnIH0p
CgkJCQkJOwoJCQkJCXRoaXMuJGNvbnRhaW5lci5oaWRlKCk7CgoJCQkJCWlmICh0
aGlzLm9wdGlvbnMuaGlkZUJ5TW91c2Vkb3duKSB7CgkJCQkJCSQoZG9jdW1lbnQp
LnVuYmluZCgnbW91c2Vkb3duJywgdGhpcy5fZG9jdW1lbnRNb3VzZURvd25PYnNl
cnZlcik7CgkJCQkJfQoJCQkJCWlmICh0aGlzLm9wdGlvbnMuaGlkZUJ5Qmx1cikg
ewoJCQkJCQkkKHdpbmRvdykudW5iaW5kKCdibHVyJywgdGhpcy5fd2luZG93Qmx1
ck9ic2VydmVyKTsKCQkJCQl9CgoJCQkJCWlmIChjYWxsYmFjaykgewoJCQkJCQlj
YWxsYmFjaygpOwoJCQkJCX0KCQkJCX0KCQkJfSwKCgkJCV9jYW5jZWxUaW1lcjog
ZnVuY3Rpb24oKSB7CgkJCQlUaW1lb3V0LmNsZWFyKHRoaXMudW5pcUlkKTsKCQkJ
fSwKCgkJCV9pbml0VGltZXI6IGZ1bmN0aW9uKCkKCQkJewoJCQkJaWYgKHRoaXMu
b3B0aW9ucy50aW1lb3V0KSB7CgkJCQkJVGltZW91dC5zZXQodGhpcy51bmlxSWQs
IChmdW5jdGlvbiAoKSB7CgkJCQkJCXRoaXMub3B0aW9ucy5vblRvZ2dsZShmYWxz
ZSwgdGhpcyk7CgkJCQkJCXRoaXMuaGlkZSgpOwoKCQkJCQkJdGhpcy5vcHRpb25z
Lm9uQ2xvc2VkKCk7CgoJCQkJCX0pLmJpbmQodGhpcyksIHRoaXMub3B0aW9ucy50
aW1lb3V0KTsKCQkJCX0KCQkJfQoJCX0pOwoKCQkkLmZuLmRyb3Bkb3duID0gZnVu
Y3Rpb24gKG9iamVjdCkKCQl7CgkJCWlmICghdGhpcy5sZW5ndGgpIHsKCQkJCXJl
dHVybiB0aGlzOwoJCQl9CgoJCQlpZiAodHlwZW9mIG9iamVjdCA9PSAnc3RyaW5n
JykgewoJCQkJdmFyIHdpZGdldCA9IHRoaXMuZGF0YShuYW1lc3BhY2UpOwoJCQkJ
aWYod2lkZ2V0KSB7CgkJCQkJd2lkZ2V0Ll9iZWZvcmVBY2Nlc3MoKTsKCQkJCX0K
CgkJCQlyZXR1cm4gb2JqZWN0LnRvTG93ZXJDYXNlKCkgPT0gJ3dpZGdldCcgPyB3
aWRnZXQgOiB0aGlzOwoJCQl9CgoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewoJCQkJdmFyIHNlbGYgPSAkKHRoaXMpOwoKCQkJCSRQLnMoJ3NldCBkYXRh
Jyk7CgkJCQkJc2VsZi5kYXRhKG5hbWVzcGFjZSwgbmV3IERyb3Bkb3duKG9iamVj
dC5saW5rLCBvYmplY3QuY29udGFpbmVyLCBvYmplY3QsIHNlbGYpKTsKCQkJCSRQ
LmUoJ3NldCBkYXRhJyk7CgkJCX0pOwoJCX07CgoJfSkoalF1ZXJ5KTsKCglqc0xv
YWRlci5sb2FkZWQoJ3twbHVnaW5zfURyb3Bkb3duJywgMSk7CgovLyBkYXRhL3J1
L2ltYWdlcy9qcy9ydS9qc0NvcmUvcGx1Z2lucy9Ecm9wZG93bi5qcyBlbmQKCi8v
IGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9wbHVnaW5zL0xheWVyTWFuYWdl
ci5qcyBzdGFydAoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L21haWxydS5Ob3Rp
ZnkuanMgc3RhcnQKCgooZnVuY3Rpb24gKCl7CgkJdmFyCgkJCSAgX3N5ID0gMjQK
CQkJLCBfeSA9IF9zeQoJCQksIF9pZHggPSAzMDAwMAoJCQksIF9xdWV1ZSA9IFtd
CgkJCSwgX2dyb3VwcyA9IHt9CgkJOwoKCQkvKioKCQkgKiBAY2xhc3MgICBtYWls
cnUuTm90aWZ5CgkJICovCgkJdmFyIE5vdGlmeSA9IGZ1bmN0aW9uICgpeyB0aGlz
Ll9fY29uc3RydWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07CgkJTm90aWZ5
LnByb3RvdHlwZSA9IHsKCQkJY29uc3RydWN0b3I6IE5vdGlmeSwKCgkJCS8qKgoJ
CQkgKiBAY29uc3RydWN0b3IKCQkJICovCgkJCV9fY29uc3RydWN0OiBmdW5jdGlv
biAoKXsKCQkJCXRoaXMuJEVsbSA9ICQoJyNOb3RpZnknKS5jbG9uZSgpLnByZXBl
bmRUbygnYm9keScpOwoJCQkJX3F1ZXVlLnB1c2godGhpcyk7CgkJCX0sCgoJCQkv
LyBAcHJpdmF0ZQoJCQlfdHlwZTogZnVuY3Rpb24gKHR5cGUpIHsKCQkJCXN3aXRj
aCAodHlwZSkgewoJCQkJCWNhc2UgJ2xvYWQnOgoJCQkJCWNhc2UgJ3NlbmQnOgoJ
CQkJCWNhc2UgJ21vdmUnOgoJCQkJCWNhc2UgJ2xvYWQuc3RpbGwnOgoJCQkJCWNh
c2UgJ3NlbmQuc3RpbGwnOgoJCQkJCWNhc2UgJ21vdmUuc3RpbGwnOgoJCQkJCQkJ
dHlwZSA9ICdsb2FkJzsKCQkJCQkJYnJlYWs7CgoJCQkJCWNhc2UgJ2Vycm9yJzoK
CQkJCQljYXNlICdjb25uZWN0aW9uLmVycm9yJzoKCQkJCQljYXNlICdjb25uZWN0
aW9uLnN0aWxsLmVycm9yJzoKCQkJCQkJCXR5cGUgPSAnZXJyb3InOwoJCQkJCQli
cmVhazsKCQkJCX0KCgkJCQlyZXR1cm4JdHlwZTsKCQkJfSwKCgkJCS8vIEBwdWJs
aWMKCQkJc2V0OiBmdW5jdGlvbiAobyl7CgkJCQlpZiggIXRoaXMuX2V4aXN0cyAp
ewoJCQkJCXRoaXMuX2V4aXN0cyA9IHRydWU7CgkJCQkJdGhpcy4kRWxtLmNzcyh7
IHRvcDogX3kgKyA1LCBvcGFjaXR5OiAwLCB6SW5kZXg6IF9pZHgrKyB9KQoJCQkJ
fQoKCQkJCXZhciB0eHQgPSBvLnRleHQgfHwgTGFuZy5zdHIoJ25vdGlmeS4nKyBv
LnR5cGUgKyAoby5zdWJ0eXBlID8gJy4nK28uc3VidHlwZSA6ICcnKSk7CgoJCQkJ
aWYoICF0eHQgfHwgJC50eXBlKHR4dCkgIT0gJ3N0cmluZycgKXsKCQkJCQlhanMu
bG9nKCdub3RpZnkuZXJyb3IuZW1wdHkudGV4dDonLCBvKTsKCQkJCQlyZXR1cm47
CgkJCQl9CgoJCQkJdGhpcy4kRWxtCgkJCQkJLnVuYmluZCgpCgkJCQkJLmNsaWNr
KHRoaXMuZGVzdHJveS5iaW5kKHRoaXMpKQoJCQkJCS5kaXNwbGF5KDEpCgkJCQkJ
LmNoaWxkcmVuKCkuZGlzcGxheSgwKQoJCQkJCS5maWx0ZXIoJy5qcy0nK3RoaXMu
X3R5cGUoby50eXBlKSkKCQkJCQkJLmRpc3BsYXkoMSkKCQkJCQkJLmZpbmQoJy5q
cy10eHQnKS5odG1sKHR4dCkKCQkJCTsKCgkJCQlpZiggby5ncm91cCApewoJCQkJ
CV9ncm91cHNbby5ncm91cF0gPSB0aGlzOwoJCQkJfQoKCQkJCWFqcy5jbGVhclNs
ZWVwKHRoaXMuX3BpZCk7CgkJCQlpZiggby5kZWxheSApewoJCQkJCXRoaXMuX3Bp
ZCA9IGFqcy5zbGVlcCh0aGlzLmRlc3Ryb3kuYmluZCh0aGlzKSwgby5kZWxheSAq
IDEwMDApOwoJCQkJfQoKCQkJCXRoaXMuX2RhdGEgPSBvOwoJCQkJX3JlZHJhdygp
OwoJCQl9LAoKCQkJZGVzdHJveTogZnVuY3Rpb24gKCl7CgkJCQlfcXVldWUgPSBh
anMucmVtb3ZlKF9xdWV1ZSwgdGhpcywgdHJ1ZSk7CgkJCQlkZWxldGUgX2dyb3Vw
c1t0aGlzLl9kYXRhLmdyb3VwXTsKCgkJCQlhanMuY2xlYXJTbGVlcCh0aGlzLl9w
aWQpOwoKCQkJCXRoaXMuJEVsbS5kZWxheSgyMDApLmFuaW1hdGUoewoJCQkJCXRv
cDogJy09NScsCgkJCQkJb3BhY2l0eTogMAoJCQkJfSwKCQkJCSdmYXN0JywgZnVu
Y3Rpb24gKCkgewoJCQkJCSQodGhpcykucmVtb3ZlKCk7CgkJCQl9KTsKCgkJCQlf
cmVkcmF3KCk7CgkJCX0KCQl9OwoKCQkvKioKCQkgKiBAc3RhdGljIG1ldGhvZHMK
CQkgKi8KCQlhanMuZXh0ZW5kKE5vdGlmeSwgewoKCQkJYWRkOiBmdW5jdGlvbiAo
dHlwZSwgb3B0cyl7CgkJCQlpZiggdHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnICl7
CgkJCQkJb3B0cyA9IHsgdGV4dDogb3B0cyB9OwoJCQkJfQoKCQkJCS8qKiBAbmFt
ZXNwYWNlIG1haWxydS5pc04gKi8KCQkJCW9wdHMgPSBhanMuZXh0ZW5kKHsgdHlw
ZTogdHlwZSwgZGVsYXk6IDMgfSwgb3B0cyk7CgkJCQl0aGlzLmZpbmQob3B0cyAm
JiBvcHRzLmdyb3VwKS5zZXQob3B0cyk7CgkJCX0sCgoJCQloaWRlOiBmdW5jdGlv
biAoaWQpewoJCQkJaWYoIGlkIGluIF9ncm91cHMgKXsKCQkJCQlfZ3JvdXBzW2lk
XS5kZXN0cm95KCk7CgkJCQl9CgkJCX0sCgoJCQlmaW5kOiBmdW5jdGlvbiAoaWQp
ewoJCQkJcmV0dXJuCV9ncm91cHNbaWRdIHx8IG5ldyB0aGlzOwoJCQl9CgoJCX0p
OwoKCgkJLyoqCgkJICogUmVkcmF3IGFsbCBub3RpZnkKCQkgKi8KCQlmdW5jdGlv
biBfcmVkcmF3KCl7CgkJCV95ID0gX3N5OwoJCQlhanMuZWFjaChfcXVldWUsIGZ1
bmN0aW9uIChub3RpZnkpewoJCQkJaWYoIG5vdGlmeS5fX3kgIT09IF95ICl7CgkJ
CQkJbm90aWZ5Ll9feSA9IF95OwoJCQkJCW5vdGlmeS4kRWxtLmFuaW1hdGUoeyB0
b3A6IF95LCBvcGFjaXR5OiAxIH0sICdmYXN0Jyk7CgkJCQl9CgkJCQlfeSArPSBu
b3RpZnkuJEVsbS5vdXRlckhlaWdodCgpICsgMjsKCQkJfSk7CgkJfQoKCgkJLyoq
CgkJICogQnJvd3NlciBhbGVydAoJCSAqCgkJICogQHBhcmFtCXtTdHJpbmd8Qm9v
bGVhbn0JbmFtZQkic3RyaW5nIiAtLSBzaG93LCBmYWxzZSAtLSBoaWRlCgkJICov
CgkJTm90aWZ5LmJyb3dzZXJBbGVydCA9IGZ1bmN0aW9uIChuYW1lKXsKCQkJdmFy
ICRlbCA9ICQoJyNicm93c2VyLWFsZXJ0Jyk7CgkJCWlmKCBuYW1lICl7CgkJCQkk
ZWwuZmluZCgnLmpzLWFsZXJ0JykuaGlkZSgpLmZpbHRlcignLmpzLScrbmFtZSku
c2hvdygpOwoJCQkJJGVsLnNsaWRlRG93bigxMDApLmRlbGVnYXRlKCcuanMtY2xv
c2UnLCAnY2xpY2snLCBOb3RpZnkuYnJvd3NlckFsZXJ0LmJpbmQodGhpcywgZmFs
c2UpKTsKCQkJfQoJCQllbHNlIHsKCQkJCSRlbC5zbGlkZVVwKDEwMCk7CgkJCX0K
CQl9OwoKCQlOb3RpZnkuY29sbGVjdG9yRXJyb3JBbGVydCA9IGZ1bmN0aW9uIChj
b2xsZWN0b3IpIHsKCQkJaWYgKHN0b3JlLmVuYWJsZWQpIHsKCgkJCQl2YXIgaGVs
cGVyc19kYXRhID0gewoJCQkJCWJsb2NrZWQ6IHsKCQkJCQkJbmFtZTogJ2F0dGFj
aEV4Y2VsJwoJCQkJCX0sCgkJCQkJbm9hdXRoOiB7CgkJCQkJCW5hbWU6ICdhdHRh
Y2hQb3dlclBvaW50JwoJCQkJCX0KCQkJCX0sIHR5cGU7CgoJCQkJJC5lYWNoKGhl
bHBlcnNfZGF0YSwgZnVuY3Rpb24gKGssIHYpIHsKCQkJCQloZWxwZXJzX2RhdGFb
a10uaW5kZXggPSBtYWlscnVbJ0hlbHBlckluZGV4J11bdi5uYW1lXTsKCQkJCQlo
ZWxwZXJzX2RhdGFba10udGltZXN0YW1wID0gbWFpbHJ1WydIZWxwZXJUaW1lc3Rh
bXAnXVtoZWxwZXJzX2RhdGFba10uaW5kZXhdOwoJCQkJfSk7CgoJCQkJc3dpdGNo
IChjb2xsZWN0b3IuZXJyb3IpIHsKCQkJCQljYXNlICdibG9ja2VkJzoKCQkJCQkJ
dHlwZSA9IGNvbGxlY3Rvci5lcnJvcjsKCQkJCQkJYnJlYWs7CgoJCQkJCS8vIGV4
dHJhX2F1dGggLSBtb3JlIHRoYW4gMyBsb2dpbiBhdHRlbXB0cwoJCQkJCWNhc2Ug
J2V4dHJhX2F1dGgnOgoJCQkJCQl0eXBlID0gJ25vYXV0aCc7CgkJCQkJCWJyZWFr
OwoJCQkJfQoKCQkJCWlmICh0eXBlKSB7CgkJCQkJdmFyIGhlbHBlcl9kYXRhID0g
aGVscGVyc19kYXRhW3R5cGVdOwoJCQkJCWlmIChoZWxwZXJfZGF0YSkgewoJCQkJ
CQlpZiAoaGVscGVyX2RhdGEudGltZXN0YW1wIDwgMTM1Njk4NDAwMCkgewoJCQkJ
CQkJbWFpbHJ1LkhlbHBlclN0YXR1cyAmPSB+KDEgPDwgaGVscGVyX2RhdGEuaW5k
ZXgpOwoJCQkJCQl9CgkJCQkJCU5vdGlmeS5jb2xsZWN0b3JFcnJvckFsZXJ0QnlU
eXBlKHR5cGUsIGhlbHBlcl9kYXRhLCBjb2xsZWN0b3IpOwoJCQkJCX0KCQkJCX0K
CQkJfQoJCX07CgoJCU5vdGlmeS5jb2xsZWN0b3JFcnJvckFsZXJ0QnlUeXBlID0g
ZnVuY3Rpb24gKHR5cGUsIGhlbHBlcl9kYXRhLCBjb2xsZWN0b3IpIHsKCgkJCXZh
ciBlbWFpbCA9IG1haWxydS51c2VyZW1haWwsCgoJCQkJbm90aWZ5X2lkID0gJ2Nv
bGxlY3Rvci0nICsgdHlwZSwKCgkJCQlvbGRfc3RvcmVfZ29fdG9fc2V0dGluZ19r
ZXkgPSAnY29sbGVjdG9yLicgKyB0eXBlICsgJy5hbGVydC5nb190b19zZXR0aW5n
JywKCQkJCW9sZF9zdG9yZV9sYXN0X2hpZGVfa2V5ID0gJ2NvbGxlY3Rvci4nICsg
dHlwZSArICcuYWxlcnQubGFzdF9oaWRlJywKCQkJCW9sZF9zdG9yZV9jb3VudF9r
ZXkgPSAnY29sbGVjdG9yLicgKyB0eXBlICsgJy5hbGVydC5jb3VudCcsCgkJCQlv
bGRfc3RvcmVfaGlkZV9rZXkgPSAnY29sbGVjdG9yLicgKyB0eXBlICsgJy5hbGVy
dC5oaWRlJywKCgkJCQlzdG9yZV9nb190b19zZXR0aW5nX2tleSA9IGVtYWlsICsg
Jy4nICsgb2xkX3N0b3JlX2dvX3RvX3NldHRpbmdfa2V5LAoJCQkJc3RvcmVfY291
bnRfa2V5ID0gZW1haWwgKyAnLicgKyBvbGRfc3RvcmVfbGFzdF9oaWRlX2tleSwK
CgkJCQlub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAw
MCksCgkJCQlsYXN0X2hpZGVfZXhwaXJlID0gODY0MDAsCgkJCQlnb190b19zZXR0
aW5nX2V4cGlyZSA9IDM2MDAsCgkJCQltYXhfdHJ5X2NvdW50X2hpZGUgPSAzLAoK
CQkJCXRzX2dvX3RvX3NldHRpbmcgPSBzdG9yZS5nZXQoc3RvcmVfZ29fdG9fc2V0
dGluZ19rZXkpIHx8IHN0b3JlLmdldChvbGRfc3RvcmVfZ29fdG9fc2V0dGluZ19r
ZXkpIHx8IDAsCgkJCQl0c19sYXN0X2hpZGUgPSBNYXRoLm1heChzdG9yZS5nZXQo
b2xkX3N0b3JlX2xhc3RfaGlkZV9rZXkpIHx8IDAsIGhlbHBlcl9kYXRhLnRpbWVz
dGFtcCksCgkJCQljb3VudF9oaWRlID0gc3RvcmUuZ2V0KHN0b3JlX2NvdW50X2tl
eSkgfHwgc3RvcmUuZ2V0KG9sZF9zdG9yZV9jb3VudF9rZXkpIHx8IDAsCgkJCQlo
aWRlID0gc3RvcmUuZ2V0KG9sZF9zdG9yZV9oaWRlX2tleSkgfHwgbWFpbHJ1LkJh
bGxvb24uaXNDbG9zZWQoaGVscGVyX2RhdGEuaW5kZXgpCgkJCTsKCgkJCWlmICh0
c19sYXN0X2hpZGUgKyBsYXN0X2hpZGVfZXhwaXJlID4gbm93KSB7CgkJCQloaWRl
ID0gdHJ1ZTsKCQkJfQoKCQkJaWYgKHR5cGUgPT0gJ2Jsb2NrZWQnKSB7CgkJCQlp
ZiAodHNfZ29fdG9fc2V0dGluZyArIGdvX3RvX3NldHRpbmdfZXhwaXJlID4gbm93
KSB7CgkJCQkJaGlkZSA9IHRydWU7CgkJCQl9CgkJCX0KCgkJCWlmICghaGlkZSkg
ewoJCQkJdGhpcy5hZGQobm90aWZ5X2lkLCB7CgkJCQkJZGVsYXk6IDAsCgkJCQkJ
dGV4dDogTGFuZy5zdHIoJ25vdGlmeS5jb2xsZWN0b3Iubm9hdXRoJykKCQkJCQkJ
LnJlcGxhY2UoJyVzJywgY29sbGVjdG9yLmVtYWlsKSwKCQkJCQlncm91cDogbm90
aWZ5X2lkCgkJCQl9KTsKCgkJCQlpZiAodHlwZSA9PSAnbm9hdXRoJykgewoJCQkJ
CW5ldyBJbWFnZSgpLnNyYyA9ICcvL3JzLicgKyBtYWlscnUuU2luZ2xlRG9tYWlu
TmFtZSArICcvZDE1NDQ4NzMuZ2lmPycgKyBNYXRoLnJhbmRvbSgpOwoJCQkJCW5l
dyBJbWFnZSgpLnNyYyA9ICcvL3JzLicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFt
ZSArICcvZDE1NDQ5NTEuZ2lmPycgKyBNYXRoLnJhbmRvbSgpOwoJCQkJCW5ldyBJ
bWFnZSgpLnNyYyA9ICcvL3JzLicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSAr
ICcvZDE1NTk5NzkuZ2lmPycgKyBNYXRoLnJhbmRvbSgpOwoJCQkJfSBlbHNlIGlm
ICh0eXBlID09ICdibG9ja2VkJykgewoJCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcv
L3JzLicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvZDE1NDc5OTkuZ2lm
PycgKyBNYXRoLnJhbmRvbSgpOwoJCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcvL3Jz
LicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvZDE1NTk5ODEuZ2lmPycg
KyBNYXRoLnJhbmRvbSgpOwoJCQkJfQoKCQkJCXZhciAkY29udGFpbmVyID0gJCgn
LmpzLScgKyBub3RpZnlfaWQsICcjTm90aWZ5Jyk7CgoJCQkJJCgnLmpzLWRvbnQt
c2hvdycsICRjb250YWluZXIpLnRvZ2dsZShjb3VudF9oaWRlID4gbWF4X3RyeV9j
b3VudF9oaWRlIC0gMSk7CgkJCQkkKCcuanMtcmVtZW1iZXItbGV0ZXInLCAkY29u
dGFpbmVyKS50b2dnbGUoY291bnRfaGlkZSA8IG1heF90cnlfY291bnRfaGlkZSk7
CgoJCQkJJGNvbnRhaW5lci5kZWxlZ2F0ZSgKCQkJCQknLmpzLWNoYW5nZS1wYXNz
d29yZCwnICsKCQkJCQknLmpzLWRvbnQtc2hvdywnICsKCQkJCQknLmpzLXJlbWVt
YmVyLWxldGVyLCcgKwoJCQkJCScuanMtY2xvc2UsJyArCgkJCQkJJy5qcy1zZXR0
aW5ncycsICdjbGljaycsIGZ1bmN0aW9uIChldnQpIHsKCgkJCQkJdmFyIHN0b3Bf
ZXZlbnQgPSB0cnVlOwoJCQkJCXZhciAkdGFyZ2V0ID0gJChldnQuY3VycmVudFRh
cmdldCk7CgoJCQkJCWlmICgkdGFyZ2V0Lmhhc0NsYXNzKCdqcy1jaGFuZ2UtcGFz
c3dvcmQnKSkgewoJCQkJCQlhanMucmVxdWlyZSgne3BsdWdpbnN9JyArICdMYXll
ck1hbmFnZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJCQlMYXllck1hbmFnZXIuc2hv
dygnY29sbGVjdG9yX2VkaXQnLCB7CgkJCQkJCQkJaWQ6IGNvbGxlY3Rvci5pZCwK
CQkJCQkJCQljb21wbGV0ZTogZnVuY3Rpb24gKGxheWVyLCByZXNwb25zZSkgewoJ
CQkJCQkJCQlpZiAocmVzcG9uc2UuaXNPaygpKSB7CgkJCQkJCQkJCQltYWlscnUu
QWpheCh7CgkJCQkJCQkJCQkJdXJsOiAnL3NldHRpbmdzL2NvbGxlY3Rvcj9hamF4
X2NhbGw9MSZmdW5jX25hbWU9c2F2ZScsCgkJCQkJCQkJCQkJdHlwZTogJ1BPU1Qn
LAoJCQkJCQkJCQkJCWRhdGE6IHsKCQkJCQkJCQkJCQkJSUQ6ICAgICAgICAgIGNv
bGxlY3Rvci5pZCwKCQkJCQkJCQkJCQkJSU1BUDogICAgICAgIGNvbGxlY3Rvci50
eXBlID09ICdpbWFwJyA/IDEgOiAwLAoJCQkJCQkJCQkJCQlQT1BEaXNhYmxlZDog
MCwKCQkJCQkJCQkJCQkJYWN0aW9uOiAgICAgICdzdGF0dXMnCgkJCQkJCQkJCQkJ
fSwKCQkJCQkJCQkJCQljb21wbGV0ZTogZnVuY3Rpb24gKCkgewoJCQkJCQkJCQkJ
CQltYWlscnUuTm90aWZ5LmFkZCgnb2snLCB7CgkJCQkJCQkJCQkJCQl0ZXh0OiBM
YW5nLnN0cignbm90aWZ5LmNvbGxlY3Rvci5ub2F1dGguc3VjY2VzcycpCgkJCQkJ
CQkJCQkJCQkJLnJlcGxhY2UoJyVzJywgY29sbGVjdG9yLmVtYWlsKQoJCQkJCQkJ
CQkJCQl9KTsKCQkJCQkJCQkJCQkJbWFpbHJ1Lk5vdGlmeS5oaWRlKG5vdGlmeV9p
ZCk7CgkJCQkJCQkJCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcvL3JzLicgKyBtYWls
cnUuU2luZ2xlRG9tYWluTmFtZSArICcvc2IxNTQ0OTUxLmdpZj8nICsgTWF0aC5y
YW5kb20oKTsKCQkJCQkJCQkJCQkJbmV3IEltYWdlKCkuc3JjID0gJy8vcnMuJyAr
IG1haWxydS5TaW5nbGVEb21haW5OYW1lICsgJy9zYjE1NTk5NzkuZ2lmPycgKyBN
YXRoLnJhbmRvbSgpOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCX0pOwoKCQkJCQkJ
CQkJCWxheWVyLmhpZGUoKTsKCgkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCQlu
ZXcgSW1hZ2UoKS5zcmMgPSAnLy9ycy4nICsgbWFpbHJ1LlNpbmdsZURvbWFpbk5h
bWUgKyAnL3NiMTU0NDk1NC5naWY/JyArIE1hdGgucmFuZG9tKCk7CgkJCQkJCQkJ
CX0KCQkJCQkJCQl9CgkJCQkJCQl9KTsKCQkJCQkJfSk7CgoJCQkJCQluZXcgSW1h
Z2UoKS5zcmMgPSAnLy9ycy4nICsgbWFpbHJ1LlNpbmdsZURvbWFpbk5hbWUgKyAn
L3NiMTU0NDg3My5naWY/JyArIE1hdGgucmFuZG9tKCk7CgkJCQkJCW5ldyBJbWFn
ZSgpLnNyYyA9ICcvL3JzLicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcv
ZDE1NDQ5NTQuZ2lmPycgKyBNYXRoLnJhbmRvbSgpOwoKCQkJCQl9IGVsc2UgaWYg
KCR0YXJnZXQuaGFzQ2xhc3MoJ2pzLXNldHRpbmdzJykpIHsKCgkJCQkJCXN0b3Jl
LnNldChzdG9yZV9nb190b19zZXR0aW5nX2tleSwgbm93KTsKCgkJCQkJCXN0b3Bf
ZXZlbnQgPSBmYWxzZTsKCgkJCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcvL3JzLicg
KyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvc2IxNTQ3OTk5LmdpZj8nICsg
TWF0aC5yYW5kb20oKTsKCQkJCQkJbmV3IEltYWdlKCkuc3JjID0gJy8vcnMuJyAr
IG1haWxydS5TaW5nbGVEb21haW5OYW1lICsgJy9zYjE1NTk5ODEuZ2lmPycgKyBN
YXRoLnJhbmRvbSgpOwoKCQkJCQl9IGVsc2UgewoKCQkJCQkJaWYgKCR0YXJnZXQu
aGFzQ2xhc3MoJ2pzLXJlbWVtYmVyLWxldGVyJykpIHsKCgkJCQkJCQlzdG9yZS5z
ZXQoc3RvcmVfY291bnRfa2V5LCArK2NvdW50X2hpZGUpOwoKCQkJCQkJCUxheWVy
TWFuYWdlci5zYXZlSGVscGVyKGhlbHBlcl9kYXRhLm5hbWUpOwoKCQkJCQkJCWlm
ICh0eXBlID09ICdub2F1dGgnKSB7CgkJCQkJCQkJbmV3IEltYWdlKCkuc3JjID0g
Jy8vcnMuJyArIG1haWxydS5TaW5nbGVEb21haW5OYW1lICsgJy9zYjE1NDgwMjEu
Z2lmPycgKyBNYXRoLnJhbmRvbSgpOwoJCQkJCQkJfSBlbHNlIGlmICh0eXBlID09
ICdibG9ja2VkJykgewoJCQkJCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcvL3JzLicg
KyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvc2IxNTQ4MDA4LmdpZj8nICsg
TWF0aC5yYW5kb20oKTsKCQkJCQkJCX0KCgkJCQkJCX0gZWxzZSBpZiAoJHRhcmdl
dC5oYXNDbGFzcygnanMtZG9udC1zaG93JykgfHwgJHRhcmdldC5oYXNDbGFzcygn
anMtY2xvc2UnKSkgewoKCQkJCQkJCW1haWxydS5CYWxsb29uLm1ha2VBc0Nsb3Nl
ZChoZWxwZXJfZGF0YS5pbmRleCk7CgoJCQkJCQkJaWYgKHR5cGUgPT0gJ25vYXV0
aCcpIHsKCQkJCQkJCQluZXcgSW1hZ2UoKS5zcmMgPSAnLy9ycy4nICsgbWFpbHJ1
LlNpbmdsZURvbWFpbk5hbWUgKyAnL3NiMTU0ODAyOC5naWY/JyArIE1hdGgucmFu
ZG9tKCk7CgkJCQkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ2Jsb2NrZWQnKSB7CgkJ
CQkJCQkJbmV3IEltYWdlKCkuc3JjID0gJy8vcnMuJyArIG1haWxydS5TaW5nbGVE
b21haW5OYW1lICsgJy9zYjE1NDgwMTEuZ2lmPycgKyBNYXRoLnJhbmRvbSgpOwoJ
CQkJCQkJfQoJCQkJCQl9CgoJCQkJCQltYWlscnUuTm90aWZ5LmhpZGUobm90aWZ5
X2lkKTsKCQkJCQl9CgoJCQkJCWlmIChzdG9wX2V2ZW50KSB7CgkJCQkJCWV2dC5z
dG9wUHJvcGFnYXRpb24oKTsKCQkJCQkJZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJ
CQkJfQoJCQkJfSk7CgkJCX0KCQl9OwoKCQkvLyBAZXhwb3J0CgkJbWFpbHJ1Lk5v
dGlmeQk9IE5vdGlmeTsKCX0pKCk7CgoJanNMb2FkZXIubG9hZGVkKCd7bWFpbHJ1
fW1haWxydS5Ob3RpZnknLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L21h
aWxydS5Ob3RpZnkuanMgZW5kCgooZnVuY3Rpb24oJCkgewoJCWZ1bmN0aW9uIHNl
bGVjdEF1dGgoZW1haWwpIHsKCQkJJC5hamF4KHsKCQkJCXVybDogJy8vc3dhLicg
KyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvY2dpLWJpbi9hdXRoP21hYz0x
JywKCQkJCWRhdGE6IHtMb2dpbjogZW1haWx9LAoJCQkJZGF0YVR5cGU6ICdqc29u
cCcsCgkJCQlqc29ucDogJ0pTT05QX2NhbGwnLAoJCQkJdGltZW91dDogNTAwMCwK
CQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CgkJCQkJaWYgKHJlc3Bv
bnNlLnN0YXR1cyA9PSAnb2snKSB7CgkJCQkJCWxvY2F0aW9uLmhyZWYgPSAnL21l
c3NhZ2VzL2luYm94JzsKCQkJCQl9CgkJCQl9CgkJCX0pOwoJCX0KCgkJLy88IS0t
SUYgMC0tPmh0dHBzOi8vamlyYS5tYWlsLnJ1L2Jyb3dzZS9NQUlMLTg1NjE8IS0t
IC9JRi0tPgoJCWZ1bmN0aW9uIGZvcm1TdWJtaXRSYWRhckxvZyhyYWRhck5hbWUs
IHJhZGFyU2VjdGlvbiwgb25SYWRhckRvbmUpIHsKCQkJdmFyIHJhZGFyT2JqID0g
bWFpbHJ1LnJhZGFyKHJhZGFyTmFtZSwgcmFkYXJTZWN0aW9uICE9IHZvaWQgMCA/
IHJhZGFyU2VjdGlvbiA6IDEsIHJhZGFyU2VjdGlvbiAhPSB2b2lkIDAgPyB2b2lk
IDAgOiAxKQoJCQkgICwgY2hlY2tSYWRhck9iaiA9IGZ1bmN0aW9uIGNoZWNrUmFk
YXJPYmoob25Eb25lLCBmb3JzZU9uRG9uZSkgewoJCQkJCWlmKCFyYWRhck9iaily
ZXR1cm47CgoJCQkJCWlmKHJhZGFyT2JqLmNvbXBsZXRlIHx8IGZvcnNlT25Eb25l
KSB7CgkJCQkJCW9uRG9uZSgpOwoJCQkJCQlyYWRhck9iai5vbmxvYWQgPSByYWRh
ck9iai5vbmVycm9yID0gcmFkYXJPYmoub25hYm9ydCA9IG51bGw7CgkJCQkJCXJh
ZGFyT2JqID0gbnVsbDsKCQkJCQl9CgkJCQkJZWxzZSBpZigodGhpcy50aW1lb3V0
IC09IHRoaXMuc3RlcCkgPiAwKSB7CgkJCQkJCXNldFRpbWVvdXQoY2hlY2tSYWRh
ck9iai5iaW5kKHRoaXMsIG9uRG9uZSksIHRoaXMuc3RlcCk7CgkJCQkJfQoJCQkJ
CWVsc2UgewoJCQkJCQljaGVja1JhZGFyT2JqKG9uRG9uZSwgdHJ1ZSk7CgkJCQkJ
fQoJCQkJfQoJCQk7CgoJCQlzZXRUaW1lb3V0KAoJCQkJcmFkYXJPYmoub25sb2Fk
ID0gcmFkYXJPYmoub25lcnJvciA9IHJhZGFyT2JqLm9uYWJvcnQgPSBjaGVja1Jh
ZGFyT2JqLmJpbmQoeyB0aW1lb3V0IDogMTAwLAlzdGVwIDogMTB9LCBvblJhZGFy
RG9uZSwgZmFsc2UpCgkJCQksIDEwCgkJCSk7CgkJfS8vPCEtLUlGIDAtLT5odHRw
czovL2ppcmEubWFpbC5ydS9icm93c2UvTUFJTC04NTYxPCEtLSAvSUYtLT4KCgkJ
LyoqCgkJICogQGNsYXNzIExheWVyTWFuYWdlcgoJCSAqLwoJCWpzQ2xhc3MKCQku
Y3JlYXRlKCdMYXllck1hbmFnZXInKQoJCS5zdGF0aWNzKHsKCgkJCXNob3c6IGZ1
bmN0aW9uIChuYW1lLCB2YXJzKSB7CgkJCQlpZiAoJC5pc0Z1bmN0aW9uKHRoaXNb
bmFtZV0pKSB7CgkJCQkJdGhpc1tuYW1lXShuYW1lLCB2YXJzIHx8IHt9KTsKCQkJ
CX0KCQkJfSwKCgkJCWlzRXhwaXJlOiBmdW5jdGlvbiAobmFtZSwgZXhwaXJlKXsK
CQkJCXZhciBpbmRleCA9IG1haWxydS5IZWxwZXJJbmRleFtuYW1lXSwgbGFzdFRT
ID0gbWFpbHJ1LkhlbHBlclRpbWVzdGFtcFtpbmRleF07CgkJCQlyZXR1cm4gbWFp
bHJ1LkN1cnJlbnRUaW1lc3RhbXAgLSBsYXN0VFMgPj0gZXhwaXJlOwoJCQl9LAoK
CQkJc2F2ZUhlbHBlcjogZnVuY3Rpb24gKG5hbWUpewoJCQkJdmFyIGluZGV4ID0g
bWFpbHJ1LkhlbHBlckluZGV4W25hbWVdLCB0cyA9IG1haWxydS5IZWxwZXJUaW1l
c3RhbXBbaW5kZXhdID0gbWFpbHJ1LkN1cnJlbnRUaW1lc3RhbXA7CgkJCQkkLnBv
c3QoJy9jZ2ktYmluL2FqYXhfaGVscGVyP2FqYXhfY2FsbD0xJmZ1bmNfbmFtZT1z
ZXRfaGVscGVyX3RpbWVzdGFtcCcsIHsgaGVscGVyOiBpbmRleCwgaGVscGVyX3Rp
bWVzdGFtcDogdHMgfSk7CgkJCX0sCgoJCQlnZXRNYXhUaW1lc3RhbXA6IGZ1bmN0
aW9uICgpIHsKCQkJCXZhciB0cyA9IDAsIG5hbWU7CgkJCQlmb3IgKHZhciBpID0g
YXJndW1lbnRzLmxlbmd0aDsgaS0tIDsgKSB7CgkJCQkJbmFtZSA9IGFyZ3VtZW50
c1tpXTsKCQkJCQlpZiAobmFtZSBpbiBtYWlscnUuSGVscGVySW5kZXgpIHsKCQkJ
CQkJdHMgPSBNYXRoLm1heCh0cywgbWFpbHJ1LkhlbHBlclRpbWVzdGFtcFttYWls
cnUuSGVscGVySW5kZXhbbmFtZV1dKTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4g
dHM7CgkJCX0sCgoJCQl2ZXJpZnlQaG9uZU5vdGlmeTogZnVuY3Rpb24gKGlkKXsK
CQkJCSRSKCd7dXRpbHN9JysnQ291bnRlcicsIGZ1bmN0aW9uICgpewoJCQkJCUNv
dW50ZXIuZCg2MDYzMTcpOwoJCQkJCSQoaWQpLnNob3coKS5maW5kKCcuanMtYWN0
JykuY2xpY2soZnVuY3Rpb24gKGV2dCl7CgkJCQkJCXZhciAkbm9kZSA9ICQoZXZ0
LmN1cnJlbnRUYXJnZXQpOwoKCQkJCQkJaWYoICEkbm9kZS5oYXNDbGFzcygnanMt
Y2xvc2UnKSApewoJCQkJCQkJQ291bnRlci5zYig2MDYzMjApOwoJCQkJCQkJYWpz
LnJlcXVpcmUoJ3ttYWlscnV9bWFpbHJ1LlBob25lTWFuYWdlcicsIGZ1bmN0aW9u
ICgpewoJCQkJCQkJCXZhciBNYW5hZ2VyID0gbmV3IG1haWxydS5QaG9uZU1hbmFn
ZXIoewoJCQkJCQkJCQkndXNlcic6IHsKCQkJCQkJCQkJCSduYW1lJzogbWFpbHJ1
LnVzZXJuYW1lLAoJCQkJCQkJCQkJJ2RvbWFpbic6IG1haWxydS51c2VyZG9tYWlu
CgkJCQkJCQkJCX0KCQkJCQkJCQl9KTsKCgkJCQkJCQkJTWFuYWdlci5iaW5kKCd2
ZXJpZnlTdWNjZXNzJywgZnVuY3Rpb24gKCl7CgkJCQkJCQkJCUNvdW50ZXIuZCg2
MDYzMjIpOwoJCQkJCQkJCQlpZiggbWFpbHJ1LmlzTWFpbGJveFBhZ2UoKSApewoJ
CQkJCQkJCQkJTGF5ZXJNYWluRGl2LmdldEluc3RhbmNlKCkuaGlkZSgpOwoJCQkJ
CQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJbG9jYXRpb24ucmVsb2FkKCk7CgkJCQkJ
CQkJCX0KCQkJCQkJCQl9KTsKCQkJCQkJCQlNYW5hZ2VyLmFkZFBob25lKCk7CgkJ
CQkJCQl9KTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCUNvdW50ZXIuc2IoNjA2MzE4
KTsKCQkJCQkJCXRoaXMuc2F2ZUhlbHBlcignVmVyaWZ5UGhvbmVOb3RpZnknKTsK
CQkJCQkJfQoKCQkJCQkJJG5vZGUuY2xvc2VzdCgnLmpzLXBhcmVudCcpLnNsaWRl
VXAoJ2Zhc3QnKTsKCQkJCQl9LmJpbmQodGhpcykpOwoJCQkJfS5iaW5kKHRoaXMp
KTsKCQkJfSwKCgkJCW5vQXV0aDogZnVuY3Rpb24gKG5hbWUsIHZhcnMpIHsKCQkJ
CXZhcnMgPSB2YXJzIHx8IHt9OwoKCQkJCXZhciBfbG9nX3BhcmFtcyA9IHsKCQkJ
CQkgIHN0YXR1czogJ25vYXV0aCcKCQkJCQksIHVzZXJuYW1lOiBtYWlscnUudXNl
cm5hbWUKCQkJCQksIHVzZXJkb21haW46IG1haWxydS51c2VyZG9tYWluCgkJCQkJ
LCB1c2VyZW1haWw6IG1haWxydS51c2VyZW1haWwKCQkJCX07CgoJCQkJdmFyIGlz
Q2hhbmdlQWNjb3VudCA9ICEhdmFycy5jaGFuZ2VBY2NvdW50OwoKCQkJCWlmKCB2
YXJzLmNoZWNrTGF5ZXJNYWluRGl2ID09PSB0cnVlICkgewoJCQkJCWRlbGV0ZSB2
YXJzLmNoZWNrTGF5ZXJNYWluRGl2OwoJCQkJCWFqcy5yZXF1aXJlKCd7cGx1Z2lu
c30nICsgJ0xheWVyJywgZnVuY3Rpb24oKSB7CgkJCQkJCWlmICghTGF5ZXJNYWlu
RGl2LmdldEluc3RhbmNlKCkudmlzaWJsZSkgey8vRklYTUU6IG5lZWRzIGNvbW1l
bnQKCQkJCQkJCUxheWVyTWFuYWdlci5zaG93KCdub0F1dGgnLCB2YXJzKTsKCQkJ
CQkJfQoJCQkJCX0pOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQlpZiggbWFpbHJ1
LnBoQXV0aEZvcm1FbmFibGVkICkgey8vTUFJTC0xNTA3NwoJCQkJCV9fUEguYXV0
aEZvcm0uc2hvdyh2YXJzKTsKCgkJCQkJaWYoICFpc0NoYW5nZUFjY291bnQgKSB7
CgkJCQkJCS8vIE1BSUwtNDA5NwoJCQkJCQl2YXIgdGltZXIgPSBzZXRJbnRlcnZh
bChmdW5jdGlvbiAoKSB7CgkJCQkJCQkkLmFqYXgoewoJCQkJCQkJCXVybDogJy8v
c3dhLicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvY2dpLWJpbi9jb3Vu
dGVycz9tYWM9MScsCgkJCQkJCQkJZGF0YVR5cGU6ICdqc29ucCcsCgkJCQkJCQkJ
anNvbnA6ICdKU09OUF9jYWxsJywKCQkJCQkJCQlzdWNjZXNzOiBmdW5jdGlvbihy
ZXNwb25zZSkgewoJCQkJCQkJCQlpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdvaycp
IHsKCQkJCQkJCQkJCXZhciBkYXRhID0gcmVzcG9uc2UuZGF0YTsKCQkJCQkJCQkJ
CWlmIChkYXRhICYmIGRhdGEuZW1haWwgPT0gbWFpbHJ1LnVzZXJlbWFpbCkgewoJ
CQkJCQkJCQkJCWNsZWFySW50ZXJ2YWwodGltZXIpOwoKCQkJCQkJCQkJCQl2YXIg
aG9zdCA9IGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3Q7
CgkJCQkJCQkJCQkJdmFyIGN1cnJlbnRVcmwgPSBqc0hpc3RvcnkuZ2V0KCkucmVw
bGFjZShuZXcgUmVnRXhwKCdeJyArIFN0cmluZy5wcmVnX3F1b3RlKGhvc3QpKSwg
JycpOwoJCQkJCQkJCQkJCWlmIChjdXJyZW50VXJsLmluZGV4T2YoJy8nKSA9PT0g
MCkgewoJCQkJCQkJCQkJCQljdXJyZW50VXJsID0gaG9zdCArIGN1cnJlbnRVcmw7
CgkJCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCQkJY3VycmVudFVybCA9IGhv
c3QgKyAnLycgKyBjdXJyZW50VXJsOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQls
b2NhdGlvbi5ocmVmID0gY3VycmVudFVybDsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJ
fQoJCQkJCQkJCX0KCQkJCQkJCX0pOwoJCQkJCQl9LCAyMDAwMCk7CgkJCQkJfQoK
CQkJCQkkKHdpbmRvdykudW5iaW5kKCdiZWZvcmV1bmxvYWQnKTsKCgkJCQkJbmV3
IEltYWdlKCkuc3JjID0gJy8vZ3N0YXQuJyArIG1haWxydS5zdGF0aWNEb21haW5O
YW1lICsgJy9nc3RhdD9waF9ub2F1dGg9MSZsb2dtZT0nICsgZW5jb2RlVVJJQ29t
cG9uZW50KCQucGFyYW0oX2xvZ19wYXJhbXMpKTsKCgkJCQkJcmV0dXJuOwoJCQkJ
fQoKCQkJCSRSKCd7cGx1Z2luc30nICsgJ0xheWVyJywgZnVuY3Rpb24gKCkgewoJ
CQkJCUxheWVyLmdldChuYW1lLCBmdW5jdGlvbiAobGF5ZXIpIHsKCgkJCQkJCXZh
ciBob3N0ID0gbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9z
dDsKCQkJCQkJdmFyIGN1cnJlbnRVcmwgPSBqc0hpc3RvcnkuZ2V0KCkucmVwbGFj
ZShuZXcgUmVnRXhwKCdeJyArIFN0cmluZy5wcmVnX3F1b3RlKGhvc3QpKSwgJycp
OwoJCQkJCQlpZiAoY3VycmVudFVybC5pbmRleE9mKCcvJykgPT09IDApIHsKCQkJ
CQkJCWN1cnJlbnRVcmwgPSBob3N0ICsgY3VycmVudFVybDsKCQkJCQkJfSBlbHNl
IHsKCQkJCQkJCWN1cnJlbnRVcmwgPSBob3N0ICsgJy8nICsgY3VycmVudFVybDsK
CQkJCQkJfQoKCQkJCQkJdmFyIGRlZmF1bHRVcmwgPSBob3N0ICsgJy9tZXNzYWdl
cy9pbmJveCc7CgoJCQkJCQl2YXIgJGZvcm0gPSAkKCdmb3JtJywgbGF5ZXIuJGRp
dikudW5iaW5kKCdzdWJtaXQnKTsKCgkJCQkJCXZhciAkbmV3T25lRW1haWxDb250
YWluZXIgPSAkKCcuanMtbmV3T25lRW1haWxDb250YWluZXInLCBsYXllci4kZGl2
KS5oaWRlKCk7CgkJCQkJCXZhciAkbmV3T25lRW1haWxMaW5rID0gJCgnLmpzLW5l
d0VtYWlsJywgJG5ld09uZUVtYWlsQ29udGFpbmVyKTsKCQkJCQkJdmFyICRuZXdN
dWx0aUVtYWlsQ29udGFpbmVyID0gJCgnLmpzLW5ld011bHRpRW1haWxDb250YWlu
ZXInLCBsYXllci4kZGl2KS5oaWRlKCk7CgkJCQkJCXZhciAkcmVnaXN0ZXJOZXdF
bWFpbCA9ICQoJy5qcy1yZWdpc3Rlck5ld0VtYWlsJywgbGF5ZXIuJGRpdik7IC8v
IE1BSUwtMTAyNTIKCQkJCQkJdmFyICRuZXdNdWx0aUVtYWlsU2VsZWN0ID0gJCgn
c2VsZWN0JywgJG5ld011bHRpRW1haWxDb250YWluZXIpLmVtcHR5KCk7CgoJCQkJ
CQl2YXIgJGRvbWFpblNlbGVjdCA9ICQoJ3NlbGVjdFtuYW1lPSJEb21haW4iXScs
IGxheWVyLiRkaXYpOwoJCQkJCQl2YXIgJGRvbWFpblNlbGVjdE9wdGlvbjsKCQkJ
CQkJdmFyICRsb2dpbiA9ICQoJy5qcy1maWVsZC1sb2dpbicsIGxheWVyLiRkaXYp
OwoKCQkJCQkJJCgnLmpzLW1lc3NhZ2VOb0F1dGgnLCBsYXllci4kZGl2KS50b2dn
bGUoIWlzQ2hhbmdlQWNjb3VudCk7CgkJCQkJCSQoJy5qcy1tZXNzYWdlQ2hhbmdl
QWNjb3VudCcsIGxheWVyLiRkaXYpLnRvZ2dsZShpc0NoYW5nZUFjY291bnQpOwoK
CQkJCQkJbGF5ZXIub25lKCdzaG93JywgZnVuY3Rpb24gKCkgewoJCQkJCQkJJG5l
d09uZUVtYWlsQ29udGFpbmVyLmJpbmQoJ2NsaWNrLmxheWVyJywgZnVuY3Rpb24g
KGV2dCkgewoJCQkJCQkJCXNlbGVjdEF1dGgoJG5ld09uZUVtYWlsTGluay50ZXh0
KCkpOwoJCQkJCQkJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCQkJfSk7CgkJ
CQkJCQkkbmV3TXVsdGlFbWFpbFNlbGVjdC5iaW5kKCdjaGFuZ2UubGF5ZXInLCBm
dW5jdGlvbiAoKSB7CgkJCQkJCQkJdmFyIHZhbHVlID0gJG5ld011bHRpRW1haWxT
ZWxlY3QudmFsKCk7CgkJCQkJCQkJaWYgKHZhbHVlKSB7CgkJCQkJCQkJCXNlbGVj
dEF1dGgodmFsdWUpOwoJCQkJCQkJCX0KCQkJCQkJCX0pOwoJCQkJCQkJJGZvcm0u
YmluZCgnc3VibWl0LmxheWVyJywgZnVuY3Rpb24gKCkgewoJCQkJCQkJCXZhciBl
bWFpbCA9ICRsb2dpbi52YWwoKTsKCgkJCQkJCQkJaWYgKGVtYWlsLmluZGV4T2Yo
J0AnKSA9PT0gLTEpIHsKCQkJCQkJCQkJaWYoISRkb21haW5TZWxlY3QubGVuZ3Ro
KSB7CgkJCQkJCQkJCQllbWFpbCArPSAnQCcgKyBtYWlscnUudXNlcmRvbWFpbjsK
CQkJCQkJCQkJCSRsb2dpbi52YWwoZW1haWwpOwoJCQkJCQkJCQl9IGVsc2UgewoJ
CQkJCQkJCQkJZW1haWwgKz0gJ0AnICsgJGRvbWFpblNlbGVjdC52YWwoKTsKCQkJ
CQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCQlpZiAobWFpbHJ1LklTX1BSRVZJRVcp
IHsKCQkJCQkJCQkJZGVmYXVsdFVybCArPSAoZGVmYXVsdFVybC5pbmRleE9mKCc/
JykgPT09IC0xID8gJz8nIDogJyYnKSArICdobHByZXZpZXc9MSZwcmV2aWV3PTIn
OwoJCQkJCQkJCX0gZWxzZSBpZiAoZW1haWwgPT0gbWFpbHJ1LnVzZXJlbWFpbCkg
ewoJCQkJCQkJCQlkZWZhdWx0VXJsID0gY3VycmVudFVybDsKCQkJCQkJCQl9CgoJ
CQkJCQkJCSQoJy5qcy1maWVsZC1wYWdlJywgdGhpcykudmFsKGRlZmF1bHRVcmwp
OwoJCQkJCQkJfSk7CgkJCQkJCX0pOwoKCQkJCQkJbGF5ZXIub25lKCdoaWRlJywg
ZnVuY3Rpb24gKCkgewoJCQkJCQkJJG5ld09uZUVtYWlsQ29udGFpbmVyLnVuYmlu
ZCgnLmxheWVyJyk7CgkJCQkJCQkkbmV3TXVsdGlFbWFpbFNlbGVjdC51bmJpbmQo
Jy5sYXllcicpOwoJCQkJCQkJJGZvcm0udW5iaW5kKCcubGF5ZXInKTsKCQkJCQkJ
fSk7CgoKCQkJCQkJLy9NQUlMLTEyNzgzCgkJCQkJCWZ1bmN0aW9uIGNoYW5nZURv
bWFpblNlbGVjdE9wdGlvbigpewoJCQkJCQkJJGRvbWFpblNlbGVjdE9wdGlvbiA9
ICQoJ29wdGlvblt2YWx1ZT0iJyArIG1haWxydS51c2VyZG9tYWluICsgJyJdJywg
JGRvbWFpblNlbGVjdCk7CgoJCQkJCQkJaWYgKCEkZG9tYWluU2VsZWN0T3B0aW9u
Lmxlbmd0aCkgewoJCQkJCQkJCSRkb21haW5TZWxlY3QuYXBwZW5kKCc8b3B0aW9u
IHZhbHVlPSInICsgbWFpbHJ1LnVzZXJkb21haW4gKyAnIj5AJyArIG1haWxydS51
c2VyZG9tYWluICsgJzwvb3B0aW9uPicpOwoJCQkJCQkJfQoKCQkJCQkJCSRkb21h
aW5TZWxlY3QudmFsKG1haWxydS51c2VyZG9tYWluKS50cmlnZ2VySGFuZGxlcign
Y2hhbmdlJyk7CgkJCQkJCX0KCgkJCQkJCSQuYWpheCh7CgkJCQkJCQl1cmw6ICcv
L3N3YS5tYWlsLnJ1L2RvbWFpbnMnLAoJCQkJCQkJZGF0YVR5cGU6ICdqc29ucCcs
CgkJCQkJCQlqc29ucDogJ0pTT05QX2NhbGwnLAoJCQkJCQkJc3VjY2VzczogZnVu
Y3Rpb24oZGF0YSkgewoJCQkJCQkJCSRkb21haW5TZWxlY3QuZW1wdHkoKTsKCQkJ
CQkJCQlBcnJheS5mb3JFYWNoKGRhdGEuRG9tYWluLCBmdW5jdGlvbiAoZG9tYWlu
LCBrKXsKCQkJCQkJCQkJJGRvbWFpblNlbGVjdC5hcHBlbmQoJzxvcHRpb24gdmFs
dWU9IicgKyBkb21haW4gKyAnIicrKGsgPT0gMCA/ICcgc2VsZWN0ZWQnOicnKSsn
PkAnICsgZG9tYWluICsgJzwvb3B0aW9uPicpOwoJCQkJCQkJCX0pOwoKCQkJCQkJ
CQljaGFuZ2VEb21haW5TZWxlY3RPcHRpb24oKTsKCQkJCQkJCX0KCQkJCQkJfSk7
CgoJCQkJCQlpZiAoaXNDaGFuZ2VBY2NvdW50KSB7CgkJCQkJCQlsYXllci5zaG93
KCk7CgkJCQkJCX0gZWxzZSB7CgoJCQkJCQkJJGxvZ2luLnZhbChtYWlscnUudXNl
cm5hbWUpOwoKCQkJCQkJCWNoYW5nZURvbWFpblNlbGVjdE9wdGlvbigpOwoKCQkJ
CQkJCWlmIChtYWlscnUuT2xkTXVsdGlBdXRoTGF5ZXJMb2dpYyB8fCBtYWlscnUu
bmV3TXVsdGlBdXRoTG9naWMpIHsKCQkJCQkJCQkkLmFqYXgoewoJCQkJCQkJCQl1
cmw6ICcvL3N3YS4nICsgbWFpbHJ1LlNpbmdsZURvbWFpbk5hbWUgKyAnL2NnaS1i
aW4vY291bnRlcnM/bWFjPTEnLAoJCQkJCQkJCQlkYXRhVHlwZTogJ2pzb25wJywK
CQkJCQkJCQkJanNvbnA6ICdKU09OUF9jYWxsJywKCQkJCQkJCQkJc3VjY2Vzczog
ZnVuY3Rpb24obGF5ZXIsIHJlc3BvbnNlKSB7CgkJCQkJCQkJCQlpZiAocmVzcG9u
c2Uuc3RhdHVzID09ICdvaycpIHsKCQkJCQkJCQkJCQl2YXIgZGF0YSA9IHJlc3Bv
bnNlLmRhdGE7CgkJCQkJCQkJCQkJaWYgKGRhdGEgJiYgZGF0YS5saXN0ICYmIGRh
dGEubGlzdC5sZW5ndGgpIHsKCQkJCQkJCQkJCQkJaWYgKGRhdGEubGlzdC5sZW5n
dGggPiAxKSB7CgkJCQkJCQkJCQkJCQkkbmV3TXVsdGlFbWFpbFNlbGVjdC5hcHBl
bmQoJzxvcHRpb24gdmFsdWU9IiI+JyArIExhbmcuZ2V0KCdsYXllcnMuY2hvaXNl
JykgKyAnPC9vcHRpb24+Jyk7CgkJCQkJCQkJCQkJCQkkLmVhY2goZGF0YS5saXN0
LCBmdW5jdGlvbiAoaywgdikgewoJCQkJCQkJCQkJCQkJCSRuZXdNdWx0aUVtYWls
U2VsZWN0LmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT0iJyArIHYgKyAnIj4nICsgdiAr
ICc8L29wdGlvbj4nKTsKCQkJCQkJCQkJCQkJCX0pOwoJCQkJCQkJCQkJCQkJJG5l
d011bHRpRW1haWxTZWxlY3QudHJpZ2dlcignY2hhbmdlJyk7CgkJCQkJCQkJCQkJ
CQkkbmV3TXVsdGlFbWFpbENvbnRhaW5lci5zaG93KCk7CgkJCQkJCQkJCQkJCQkk
cmVnaXN0ZXJOZXdFbWFpbC5oaWRlKCk7Ly8gTUFJTC0xMDI1MgoJCQkJCQkJCQkJ
CQl9IGVsc2UgewoJCQkJCQkJCQkJCQkJJG5ld09uZUVtYWlsTGluay50ZXh0KGRh
dGEubGlzdFswXSk7CgkJCQkJCQkJCQkJCQkkbmV3T25lRW1haWxDb250YWluZXIu
c2hvdygpOwoJCQkJCQkJCQkJCQkJJHJlZ2lzdGVyTmV3RW1haWwuaGlkZSgpOy8v
IE1BSUwtMTAyNTIKCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJ
CX0KCQkJCQkJCQkJfS5iaW5kKHRoaXMsIGxheWVyKQoJCQkJCQkJCX0pOwoJCQkJ
CQkJfQoKCQkJCQkJCWxheWVyLmRpc2FibGVIaWRlKCkuc2hvdygpOwoKCQkJCQkJ
CS8vIE1BSUwtNDA5NwoJCQkJCQkJdmFyIHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVu
Y3Rpb24gKCkgewoJCQkJCQkJCSQuYWpheCh7CgkJCQkJCQkJCXVybDogJy8vc3dh
LicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvY2dpLWJpbi9jb3VudGVy
cz9tYWM9MScsCgkJCQkJCQkJCWRhdGFUeXBlOiAnanNvbnAnLAoJCQkJCQkJCQlq
c29ucDogJ0pTT05QX2NhbGwnLAoJCQkJCQkJCQlzdWNjZXNzOiBmdW5jdGlvbihy
ZXNwb25zZSkgewoJCQkJCQkJCQkJaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnb2sn
KSB7CgkJCQkJCQkJCQkJdmFyIGRhdGEgPSByZXNwb25zZS5kYXRhOwoJCQkJCQkJ
CQkJCWlmIChkYXRhICYmIGRhdGEuZW1haWwgPT0gbWFpbHJ1LnVzZXJlbWFpbCkg
ewoJCQkJCQkJCQkJCQljbGVhckludGVydmFsKHRpbWVyKTsKCQkJCQkJCQkJCQkJ
bG9jYXRpb24uaHJlZiA9IGN1cnJlbnRVcmw7CgkJCQkJCQkJCQkJfQoJCQkJCQkJ
CQkJfQoJCQkJCQkJCQl9CgkJCQkJCQkJfSk7CgkJCQkJCQl9LCAyMDAwMCk7CgkJ
CQkJCX0KCgkJCQkJCSQod2luZG93KS51bmJpbmQoJ2JlZm9yZXVubG9hZCcpOwoK
CQkJCQkJbmV3IEltYWdlKCkuc3JjID0gJy8vZ3N0YXQuJyArIG1haWxydS5zdGF0
aWNEb21haW5OYW1lICsgJy9nc3RhdD9zaG93X25vYXV0aD0xJmxvZ21lPScgKyBl
bmNvZGVVUklDb21wb25lbnQoJC5wYXJhbShfbG9nX3BhcmFtcykpOwoJCQkJCX0p
OwoJCQkJfSk7CgkJCX0sCgoJCQljaGFuZ2VBY2NvdW50OiBmdW5jdGlvbiAobmFt
ZSwgdmFycykgewoKCQkJCXZhciBfbG9nX3BhcmFtcyA9IHsKCQkJCQkgIGVtYWls
OiB2YXJzLmVtYWlsCgkJCQkJLCB1c2VybmFtZTogbWFpbHJ1LnVzZXJuYW1lCgkJ
CQkJLCB1c2VyZG9tYWluOiBtYWlscnUudXNlcmRvbWFpbgoJCQkJCSwgdXNlcmVt
YWlsOiBtYWlscnUudXNlcmVtYWlsCgkJCQl9OwoKCQkJCWlmKCBtYWlscnUucGhB
dXRoRm9ybUVuYWJsZWQgKSB7Ly9NQUlMLTE1MDc3CgkJCQkJdmFycy5mb3JtVHlw
ZSA9ICJyZXN0b3JlIjsKCQkJCQlfX1BILmF1dGhGb3JtLnNob3codmFycyk7CgoJ
CQkJCS8vIE1BSUwtNDA5NwoJCQkJCXZhciB0aW1lciA9IHNldEludGVydmFsKGZ1
bmN0aW9uICgpIHsKCQkJCQkJJC5hamF4KHsKCQkJCQkJCXVybDogJy8vc3dhLicg
KyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvY2dpLWJpbi9jb3VudGVycz9t
YWM9MScsCgkJCQkJCQlkYXRhVHlwZTogJ2pzb25wJywKCQkJCQkJCWpzb25wOiAn
SlNPTlBfY2FsbCcsCgkJCQkJCQlzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkg
ewoJCQkJCQkJCWlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ29rJykgewoJCQkJCQkJ
CQl2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGE7CgkJCQkJCQkJCWlmIChkYXRhICYm
IGRhdGEuZW1haWwgPT0gbWFpbHJ1LnVzZXJlbWFpbCkgewoJCQkJCQkJCQkJY2xl
YXJJbnRlcnZhbCh0aW1lcik7CgoJCQkJCQkJCQkJdmFyIGhvc3QgPSBsb2NhdGlv
bi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0OwoJCQkJCQkJCQkJdmFy
IGN1cnJlbnRVcmwgPSBqc0hpc3RvcnkuZ2V0KCkucmVwbGFjZShuZXcgUmVnRXhw
KCdeJyArIFN0cmluZy5wcmVnX3F1b3RlKGhvc3QpKSwgJycpOwoJCQkJCQkJCQkJ
aWYgKGN1cnJlbnRVcmwuaW5kZXhPZignLycpID09PSAwKSB7CgkJCQkJCQkJCQkJ
Y3VycmVudFVybCA9IGhvc3QgKyBjdXJyZW50VXJsOwoJCQkJCQkJCQkJfSBlbHNl
IHsKCQkJCQkJCQkJCQljdXJyZW50VXJsID0gaG9zdCArICcvJyArIGN1cnJlbnRV
cmw7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQlsb2NhdGlvbi5ocmVmID0gY3VycmVu
dFVybDsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSk7CgkJ
CQkJfSwgMzAwMDApOwoKCQkJCQkkKHdpbmRvdykudW5iaW5kKCdiZWZvcmV1bmxv
YWQnKTsKCgkJCQkJbmV3IEltYWdlKCkuc3JjID0gJy8vZ3N0YXQuJyArIG1haWxy
dS5zdGF0aWNEb21haW5OYW1lICsgJy9nc3RhdD9waF9jaGFuZ2VfYWNjb3VudD0x
JmxvZ21lPScgKyBlbmNvZGVVUklDb21wb25lbnQoJC5wYXJhbShfbG9nX3BhcmFt
cykpOwoKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJJFIoJ3twbHVnaW5zfScgKyAn
TGF5ZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1bmN0
aW9uIChsYXllcikgewoJCQkJCQl2YXIgaG9zdCA9IGxvY2F0aW9uLnByb3RvY29s
ICsgJy8vJyArIGxvY2F0aW9uLmhvc3Q7CgkJCQkJCXZhciBjdXJyZW50VXJsID0g
anNIaXN0b3J5LmdldCgpLnJlcGxhY2UobmV3IFJlZ0V4cCgnXicgKyBTdHJpbmcu
cHJlZ19xdW90ZShob3N0KSksICcnKTsKCQkJCQkJaWYgKGN1cnJlbnRVcmwuaW5k
ZXhPZignLycpID09PSAwKSB7CgkJCQkJCQljdXJyZW50VXJsID0gaG9zdCArIGN1
cnJlbnRVcmw7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQljdXJyZW50VXJsID0gaG9z
dCArICcvJyArIGN1cnJlbnRVcmw7CgkJCQkJCX0KCQkJCQkJJCgnLmpzLWZpZWxk
LWxvZ2luJywgbGF5ZXIuJGRpdikudmFsKG1haWxydS51c2VyZW1haWwpOwoJCQkJ
CQkkKCcuanMtZmllbGQtcGFnZScsIGxheWVyLiRkaXYpLnZhbChjdXJyZW50VXJs
KTsKCQkJCQkJJCgnLmpzLW9sZEVtYWlsJywgbGF5ZXIuJGRpdikudGV4dChtYWls
cnUudXNlcmVtYWlsKTsKCgkJCQkJCSQoJy5qcy1uZXdFbWFpbCcsIGxheWVyLiRk
aXYpLnRleHQodmFycy5lbWFpbCk7CgoJCQkJCQkkKCdmb3JtJywgbGF5ZXIuJGRp
dikudW5iaW5kKCdzdWJtaXQnKTsKCQkJCQkJbGF5ZXIuZGlzYWJsZUhpZGUoKS5z
aG93KCk7CgoJCQkJCQkvLyBNQUlMLTQ0ODEKCQkJCQkJdmFyIHRpbWVyID0gc2V0
SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewoJCQkJCQkJJC5hamF4KHsKCQkJCQkJCQl1
cmw6ICcvL3N3YS4nICsgbWFpbHJ1LlNpbmdsZURvbWFpbk5hbWUgKyAnL2NnaS1i
aW4vY291bnRlcnM/bWFjPTEnLAoJCQkJCQkJCWRhdGFUeXBlOiAnanNvbnAnLAoJ
CQkJCQkJCWpzb25wOiAnSlNPTlBfY2FsbCcsCgkJCQkJCQkJc3VjY2VzczogZnVu
Y3Rpb24ocmVzcG9uc2UpIHsKCQkJCQkJCQkJaWYgKHJlc3BvbnNlLnN0YXR1cyA9
PSAnb2snKSB7CgkJCQkJCQkJCQl2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGE7CgkJ
CQkJCQkJCQlpZiAoZGF0YSAmJiBkYXRhLmVtYWlsID09IG1haWxydS51c2VyZW1h
aWwpIHsKCQkJCQkJCQkJCQljbGVhckludGVydmFsKHRpbWVyKTsKCQkJCQkJCQkJ
CQlsb2NhdGlvbi5ocmVmID0gY3VycmVudFVybDsKCQkJCQkJCQkJCX0KCQkJCQkJ
CQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0pOwoJCQkJCQl9LCAzMDAwMCk7CgoJCQkJ
CQkkKHdpbmRvdykudW5iaW5kKCdiZWZvcmV1bmxvYWQnKTsKCgkJCQkJCW5ldyBJ
bWFnZSgpLnNyYyA9ICcvL2dzdGF0LicgKyBtYWlscnUuc3RhdGljRG9tYWluTmFt
ZSArICcvZ3N0YXQ/c2hvd19jaGFuZ2VfYWNjb3VudD0xJmxvZ21lPScgKyBlbmNv
ZGVVUklDb21wb25lbnQoJC5wYXJhbShfbG9nX3BhcmFtcykpOwoJCQkJCX0pOwoJ
CQkJfSk7CgkJCX0sCgoJCQlwYXNzZXhwaXJlOiBmdW5jdGlvbiAobmFtZSwgdmFy
cykgewoKCQkJCXZhciBjdXJyZW50VGltZSA9IG1haWxydS5DdXJyZW50VGltZXN0
YW1wLAoJCQkJCXRzID0gbWFpbHJ1LkhlbHBlclRpbWVzdGFtcCwKCQkJCQlpbmRl
eCA9IG1haWxydS5IZWxwZXJJbmRleC5wYXNzRXhwaXJlLAoJCQkJCWxhc3RTaG93
VGltZSA9IHRzW2luZGV4XSwKCQkJCQlsYXN0U2hvd1RpbWVMaW1pdCA9IDYwICog
NjAgKiAyNCwKCQkJCQlleHBUaW1lID0gbWFpbHJ1LlBhc3N3b3JkRXhwaXJlRGF0
ZSwKCQkJCQlleHBUaW1lTGltaXQgPSA2MCAqIDYwICogMjQgKiA3LAoJCQkJCWZv
cmNlID0gdmFyc1swXTsKCgkJCQlpZiAoZm9yY2UgfHwgKChsYXN0U2hvd1RpbWUg
PCBjdXJyZW50VGltZSAtIGxhc3RTaG93VGltZUxpbWl0KSAmJiAoZXhwVGltZSAm
JiBleHBUaW1lIDwgY3VycmVudFRpbWUgKyBleHBUaW1lTGltaXQpKSkgewoJCQkJ
CSRSKCd7cGx1Z2luc30nICsgJ0xheWVyJywgZnVuY3Rpb24gKCkgewoJCQkJCQlM
YXllci5nZXQobmFtZSwgZnVuY3Rpb24gKGxheWVyKSB7CgkJCQkJCQl2YXIgZGF0
ZSA9IERhdGUucGFyc2UoZXhwVGltZSAqIDEwMDApLCBkYXRlRm9ybWF0ID0gZGF0
ZS5mb3JtYXQoJ2QgbicpOwoJCQkJCQkJJCgnLmpzLVBhc3N3b3JkRXhwaXJlRGF0
ZScsIGxheWVyLiRkaXYpLmh0bWwoZGF0ZUZvcm1hdCk7CgkJCQkJCQlsYXllci5v
bmUoJ2NhbGxiYWNrJywgZnVuY3Rpb24oZXZ0LCBzdGF0dXMpIHsKCQkJCQkJCQlp
ZiAoc3RhdHVzKSB7CgkJCQkJCQkJCWxvY2F0aW9uLmhyZWYgPSBtYWlscnUuU2V0
dGluZ3NPbiA/ICcvc2V0dGluZ3Mvc2VjdXJpdHk/Y2hhbmdlcGFzcycgOiAnL2Nn
aS1iaW4vZWRpdHBhc3MnOwoJCQkJCQkJCX0KCQkJCQkJCX0pWzBdLnNob3coKTsK
CQkJCQkJCXRoaXMuc2F2ZUhlbHBlcigncGFzc0V4cGlyZScpOwoJCQkJCQl9LmJp
bmQodGhpcykpOwoJCQkJCX0uYmluZCh0aGlzKSk7CgkJCQl9CgkJCX0sCgoJCQlw
aG9uZXN5bmM6IGZ1bmN0aW9uIChuYW1lLCB2YXJzKSB7CgoJCQkJdmFyIGN1cnJl
bnRUaW1lID0gbWFpbHJ1LkN1cnJlbnRUaW1lc3RhbXAsCgkJCQkJdHMgPSBtYWls
cnUuSGVscGVyVGltZXN0YW1wLAoJCQkJCWluZGV4ID0gbWFpbHJ1LkhlbHBlcklu
ZGV4LnBob25lU3luYywKCQkJCQlsYXN0U2hvd1RpbWUgPSB0c1tpbmRleF0sCgkJ
CQkJbGFzdFNob3dUaW1lTGltaXQgPSA2MCAqIDYwICogMjQgKiA1LAoJCQkJCWZv
cmNlID0gdmFyc1swXTsKCgkJCQlpZiAoZm9yY2UgfHwgKGxhc3RTaG93VGltZSA8
IGN1cnJlbnRUaW1lIC0gbGFzdFNob3dUaW1lTGltaXQpKSB7CgoJCQkJCSRSKFsn
e3BsdWdpbnN9JyArICdMYXllcicsJ3ttYWlscnV9JyArICdtYWlscnUuUGhvbmVN
YW5hZ2VyJ10sIGZ1bmN0aW9uICgpIHsKCgkJCQkJCUxheWVyLmdldChuYW1lLCBm
dW5jdGlvbiAobGF5ZXIpIHsKCgkJCQkJCQl2YXIgcGhvbmVNYW5hZ2VyID0gbmV3
IG1haWxydS5QaG9uZU1hbmFnZXIoewoJCQkJCQkJCXVzZXI6IHsKCQkJCQkJCQkJ
bmFtZTogbWFpbHJ1LnVzZXJuYW1lLAoJCQkJCQkJCQlkb21haW46IG1haWxydS51
c2VyZG9tYWluCgkJCQkJCQkJfQoJCQkJCQkJfSk7CgoJCQkJCQkJcGhvbmVNYW5h
Z2VyLmJpbmQoewoJCQkJCQkJCXZlcmlmeVN1Y2Nlc3M6IGZ1bmN0aW9uKGV2dCwg
ZGF0YSkgewoJCQkJCQkJCQlMYXllci5nZXQoJ3Bob25lYWRkc3VjY2VzcycsIGZ1
bmN0aW9uIChsYXllcikgewoJCQkJCQkJCQkJJCgnLmpzLVJlbWluZFBob25lJywg
bGF5ZXIuJGRpdikuaHRtbChkYXRhLnJlYWRhYmxlX3Bob25lKTsKCQkJCQkJCQkJ
CWxheWVyLnVuYmluZCgnLmNvdW50ZXJzJylbMF0uc2hvdygpOwoJCQkJCQkJCQkJ
bmV3IEltYWdlKCkuc3JjID0gJy8vcnMuJyArIG1haWxydS5TaW5nbGVEb21haW5O
YW1lICsgJy9kNTQ0OTQ0LmdpZj8nICsgTWF0aC5yYW5kb20oKTsKCQkJCQkJCQkJ
fSk7CgkJCQkJCQkJfQoJCQkJCQkJfSk7CgoJCQkJCQkJJCgnLmpzLVJlbWluZFBo
b25lJywgbGF5ZXIuJGRpdikudGV4dCh2YXJzWzFdKTsKCgkJCQkJCQlsYXllci5v
bmUoJ2NhbGxiYWNrJywgZnVuY3Rpb24oZXZ0LCBzdGF0dXMpIHsKCQkJCQkJCQlp
ZiAoc3RhdHVzID09PSB0cnVlKSB7CgkJCQkJCQkJCXBob25lTWFuYWdlci5jaGVj
aygnJywgdmFyc1sxXSk7CgkJCQkJCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcvL3Jz
LicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvc2I1NDQ5NDYuZ2lmPycg
KyBNYXRoLnJhbmRvbSgpOwoJCQkJCQkJCX0gZWxzZSBpZiAoc3RhdHVzID09PSBm
YWxzZSkgewoJCQkJCQkJCQlMYXllci5nZXQoJ3Bob25lRGVsZXRlU3VjY2Vzcycs
IGZ1bmN0aW9uIChsYXllcikgewoJCQkJCQkJCQkJJCgnLmpzLXBob25lJywgbGF5
ZXIuJGRpdikudGV4dCh2YXJzWzFdKTsKCQkJCQkJCQkJCWxheWVyLmJpbmQoJ2Nh
bGxiYWNrJywgZnVuY3Rpb24gKGV2dCwgc3RhdHVzKSB7CgkJCQkJCQkJCQkJaWYg
KHN0YXR1cykgewoJCQkJCQkJCQkJCQlwaG9uZU1hbmFnZXIuYWRkUGhvbmUoKTsK
CQkJCQkJCQkJCQkJbmV3IEltYWdlKCkuc3JjID0gJy8vcnMuJyArIG1haWxydS5T
aW5nbGVEb21haW5OYW1lICsgJy9zYjU0NDk0Ny5naWY/JyArIE1hdGgucmFuZG9t
KCk7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJfSlbMF0uc2hvdygpOwoJCQkJCQkJ
CQkJcGhvbmVNYW5hZ2VyLmRlbGV0ZVJlbWluZFBob25lKHZhcnNbMV0pOwoJCQkJ
CQkJCQl9KTsKCQkJCQkJCQl9CgkJCQkJCQl9KTsKCgkJCQkJCQlsYXllci5iaW5k
KCdjYWxsYmFjay5jb3VudGVycycsIGZ1bmN0aW9uIChldnQsIHN0YXR1cykgewoJ
CQkJCQkJCWlmIChzdGF0dXMgPT09IG51bGwgJiYgZXZ0LnRhcmdldC50eXBlICE9
ICdpcy1waG9uZWFkZHN1Y2Nlc3MnKSB7CgkJCQkJCQkJCWxheWVyLnVuYmluZCgn
LmNvdW50ZXJzJyk7CgkJCQkJCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcvL3JzLicg
KyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvc2I1NDQ5NDUuZ2lmPycgKyBN
YXRoLnJhbmRvbSgpOwoJCQkJCQkJCX0KCQkJCQkJCX0pOwoKCQkJCQkJCWxheWVy
LnNob3coKTsKCQkJCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcvL3JzLicgKyBtYWls
cnUuU2luZ2xlRG9tYWluTmFtZSArICcvZDU0NDk0My5naWY/JyArIE1hdGgucmFu
ZG9tKCk7CgoJCQkJCQkJdGhpcy5zYXZlSGVscGVyKCdwaG9uZVN5bmMnKTsKCQkJ
CQkJfS5iaW5kKHRoaXMpKTsKCQkJCQl9LmJpbmQodGhpcykpOwoJCQkJfQoJCQl9
LAoKCQkJbm9BdXRoT2ZmbGluZTogZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMpIHsK
CQkJCSRSKCd7cGx1Z2luc30nICsgJ0xheWVyJywgZnVuY3Rpb24gKCkgewoJCQkJ
CUxheWVyLmdldChuYW1lLCBmdW5jdGlvbiAobGF5ZXIpIHsKCQkJCQkJdmFyICRm
b3JtID0gJCgnZm9ybScsIGxheWVyLiRkaXYpLnVuYmluZCgnc3VibWl0Jyk7CgoJ
CQkJCQl2YXIgJGVycm9yID0gJCgnLmpzLWZvcm1FcnJvcicsICRmb3JtKTsKCQkJ
CQkJdmFyICRsb2dpbiA9ICQoJy5qcy1sb2dpbicsICRmb3JtKTsKCQkJCQkJdmFy
ICRkb21haW4gPSAkKCcuanMtZG9tYWluJywgJGZvcm0pOwoJCQkJCQl2YXIgJHBh
c3N3b3JkID0gJCgnLmpzLXBhc3N3b3JkJywgJGZvcm0pOwoKCQkJCQkJbGF5ZXIu
b25lKCdzaG93JywgZnVuY3Rpb24gKCkgewoJCQkJCQkJdmFyIGVtYWlsID0gb3B0
aW9ucy5hY3RpdmVfZW1haWw7CgkJCQkJCQlpZiAoJC50eXBlKGVtYWlsKSA9PSAn
c3RyaW5nJykgewoJCQkJCQkJCXZhciBwYXJ0cyA9IGVtYWlsLnNwbGl0KCdAJyk7
CgkJCQkJCQkJaWYgKHBhcnRzLmxlbmd0aCA9PSAyKSB7CgkJCQkJCQkJCSRsb2dp
bi52YWwocGFydHNbMF0pOwoJCQkJCQkJCQl2YXIgJGRvbWFpblNlbGVjdE9wdGlv
biA9ICQoJ29wdGlvblt2YWx1ZT0iJyArIHBhcnRzWzFdICsgJyJdJywgJGRvbWFp
bik7CgkJCQkJCQkJCWlmICghJGRvbWFpblNlbGVjdE9wdGlvbi5sZW5ndGgpIHsK
CQkJCQkJCQkJCSRkb21haW4uYXBwZW5kKCc8b3B0aW9uIHZhbHVlPSInICsgcGFy
dHNbMV0gKyAnIj5AJyArIHBhcnRzWzFdICsgJzwvb3B0aW9uPicpOwoJCQkJCQkJ
CQl9CgkJCQkJCQkJCSRkb21haW4udmFsKHBhcnRzWzFdKS50cmlnZ2VySGFuZGxl
cignY2hhbmdlJyk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJJGVycm9yLmhp
ZGUoKTsKCQkJCQkJCSRwYXNzd29yZC52YWwoJycpOwoJCQkJCQl9KTsKCgkJCQkJ
CWxheWVyLmZ1bmMgPSBmdW5jdGlvbihzdGF0dXMpIHsKCQkJCQkJCWlmIChzdGF0
dXMpIHsKCQkJCQkJCQl2YXIgbG9naW4gPSAkbG9naW4udmFsKCk7CgkJCQkJCQkJ
dmFyIGRvbWFpbiA9ICRkb21haW4udmFsKCk7CgkJCQkJCQkJdmFyIHBhc3N3b3Jk
ID0gJHBhc3N3b3JkLnZhbCgpOwoJCQkJCQkJCXZhciBlbWFpbCA9IGxvZ2luOwoK
CQkJCQkJCQlpZiAoIX5lbWFpbC5pbmRleE9mKCdAJykpIHsKCQkJCQkJCQkJZW1h
aWwgKz0gJ0AnICsgZG9tYWluOwoJCQkJCQkJCX0KCgkJCQkJCQkJcmV0dXJuIG9w
dGlvbnMuc3VjY2VzcyhsYXllciwgZW1haWwsIHBhc3N3b3JkKTsKCQkJCQkJCX0K
CQkJCQkJfTsKCgkJCQkJCWxheWVyLmRpc2FibGVIaWRlKCkuc2hvdyhvcHRpb25z
LmxheWVyX29wdGlvbnMpOwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0sCgoJCQllbmFi
bGVPZmZsaW5lOiBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucykgewoJCQkJJFIoJ3tw
bHVnaW5zfScgKyAnTGF5ZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0
KG5hbWUsIGZ1bmN0aW9uIChsYXllcikgewoKCQkJCQkJdmFyICRmb3JtID0gJCgn
Zm9ybScsIGxheWVyLiRkaXYpLnVuYmluZCgnc3VibWl0Jyk7CgoJCQkJCQl2YXIg
JGVycm9yID0gJCgnLmpzLWZvcm1FcnJvcicsICRmb3JtKTsKCQkJCQkJdmFyICRw
YXNzd29yZCA9ICQoJy5qcy1wYXNzd29yZCcsICRmb3JtKTsKCgkJCQkJCWxheWVy
Lm9uZSgnc2hvdycsIGZ1bmN0aW9uICgpIHsKCQkJCQkJCSRwYXNzd29yZC52YWwo
JycpOwoJCQkJCQkJJGVycm9yLmhpZGUoKTsKCQkJCQkJfSk7CgoJCQkJCQlsYXll
ci5mdW5jID0gZnVuY3Rpb24oc3RhdHVzKSB7CgkJCQkJCQlpZiAoc3RhdHVzKSB7
CgkJCQkJCQkJdmFyIHBhc3N3b3JkID0gJHBhc3N3b3JkLnZhbCgpOwoJCQkJCQkJ
CWlmICgkLnRyaW0ocGFzc3dvcmQpKSB7CgkJCQkJCQkJCW9wdGlvbnMuc3VjY2Vz
cyhwYXNzd29yZCk7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJJGVycm9yLnRl
eHQoTGFuZy5nZXQoJ3Bhc3N3b3JkLndyb25nJykpLnNob3coKTsKCQkJCQkJCQkJ
cmV0dXJuIGZhbHNlOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfTsKCQkJCQkJ
bGF5ZXIuc2hvdygpOwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0sCgoJCQlkaXNhYmxl
T2ZmbGluZTogZnVuY3Rpb24gKG5hbWUsIG9wdHMpIHsKCQkJCSRSKCd7cGx1Z2lu
c30nICsgJ0xheWVyJywgZnVuY3Rpb24gKCkgewoJCQkJCUxheWVyLmdldChuYW1l
LCBmdW5jdGlvbiAobGF5ZXIpIHsKCQkJCQkJbGF5ZXIuZnVuYyA9IGZ1bmN0aW9u
KHN0YXR1cykgewoJCQkJCQkJaWYgKHN0YXR1cykgewoJCQkJCQkJCWlmIChvcHRz
LnN1Y2Nlc3MpIHsKCQkJCQkJCQkJb3B0cy5zdWNjZXNzKCk7CgkJCQkJCQkJfQoJ
CQkJCQkJfQoJCQkJCQl9OwoJCQkJCQlsYXllci5zaG93KCk7CgkJCQkJfSk7CgkJ
CQl9KTsKCQkJfSwKCgkJCXJlbW92ZU1yaW1EaXNhYmxlZDogZnVuY3Rpb24gKG5h
bWUpIHsKCQkJCSRSKCd7cGx1Z2luc30nICsgJ0xheWVyJywgZnVuY3Rpb24gKCkg
ewoJCQkJCUxheWVyLmdldChuYW1lLCBmdW5jdGlvbiAobGF5ZXIpIHsKCQkJCQkJ
bGF5ZXIuc2hvdygpOwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0sCgoJCQljaGFuZ2VM
YW5nOiBmdW5jdGlvbiAobmFtZSwgb3B0cykgewoJCQkJJFIoJ3twbHVnaW5zfScg
KyAnTGF5ZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1
bmN0aW9uIChsYXllcikgewoJCQkJCQl2YXIgJGxhbmcgPSAkKCcuanMtbGFuZ1Nl
bGVjdCcsIGxheWVyLiRkaXYpLnZhbChvcHRzLmxhbmcgfHwgbWFpbHJ1LkxBTkcp
OwoJCQkJCQkkbGFuZy50cmlnZ2VyKCdjaGFuZ2UnKTsKCQkJCQkJbGF5ZXIuZnVu
YyA9IGZ1bmN0aW9uKHN0YXR1cykgewoJCQkJCQkJaWYgKHN0YXR1cykgewoJCQkJ
CQkJCXZhciBsYW5nID0gJGxhbmcudmFsKCk7CgkJCQkJCQkJaWYgKG9wdHMubW9k
aWZ5cHJvZmlsZSkgewoJCQkJCQkJCQkkUigne21haWxydX0nICsgJ21haWxydS5B
amF4JywgZnVuY3Rpb24gKCkgewoJCQkJCQkJCQkJbWFpbHJ1LkFqYXgoewoJCQkJ
CQkJCQkJCXR5cGU6ICdQT1NUJywKCQkJCQkJCQkJCQl1cmw6ICcvY2dpLWJpbi9h
amF4X21vZGlmeXByb2ZpbGU/YWpheF9jYWxsPTEmZnVuY19uYW1lPXNldF9sYW5n
JywKCQkJCQkJCQkJCQlkYXRhOiB7bGFuZzogbGFuZ30sCgkJCQkJCQkJCQkJY29t
cGxldGU6IGZ1bmN0aW9uICgpIHsKCQkJCQkJCQkJCQkJbG9jYXRpb24uaHJlZiA9
IGpzSGlzdG9yeS5nZXQoKS5yZXBsYWNlKC8oXnwoXD8pfCYpPyhzZXRMYW5nfGxh
bmcpPVteJl0qL2csICckMicpOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCX0pOwoJ
CQkJCQkJCQl9KTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQl2YXIgdXJsID0g
anNIaXN0b3J5LmdldCgpLnJlcGxhY2UoLyhefChcPyl8Jik/KHNldExhbmd8bGFu
Zyk9W14mXSovZywgJyQyJyk7CgkJCQkJCQkJCXVybCArPSAodXJsLmluZGV4T2Yo
Jz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgJ2xhbmc9JyArIGxhbmc7CgkJCQkJ
CQkJCWxvY2F0aW9uLmhyZWYgPSB1cmw7CgkJCQkJCQkJfQoJCQkJCQkJCSQod2lu
ZG93KS50cmlnZ2VySGFuZGxlcignbGFuZ0NoYW5nZS5sYW5nJywgW2xhbmddKTsK
CQkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCQl9CgkJCQkJCX07CgkJCQkJCWlm
IChvcHRzLnNldExhbmcpIHsKCQkJCQkJCWxheWVyLm9uZSgnaGlkZScsIGZ1bmN0
aW9uICgpIHsKCQkJCQkJCQlsb2NhdGlvbi5ocmVmID0ganNIaXN0b3J5LmdldCgp
LnJlcGxhY2UoLyhefChcPyl8Jik/KHNldExhbmd8bGFuZyk9W14mXSovZywgJyQy
Jyk7CgkJCQkJCQl9KTsKCQkJCQkJfQoJCQkJCQlsYXllci5zaG93KCk7CgkJCQkJ
fSk7CgkJCQl9KTsKCQkJfSwKCgkJCXNldHRpbmdzX19mb2xkZXJzX19lZGl0OiBm
dW5jdGlvbiAobmFtZSwgb3B0cykgewoJCQkJJFIoJ3twbHVnaW5zfScgKyAnTGF5
ZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1bmN0aW9u
IChsYXllcikgewoJCQkJCQl2YXIgbmV3Rm9sZGVyID0gdHlwZW9mIG9wdHMuZm9s
ZGVyTmFtZSAhPT0gJ3N0cmluZyc7CgkJCQkJCW9wdHMucGFyZW50SWQgPSBwYXJz
ZUludChvcHRzLnBhcmVudElkLCAxMCk7CgkJCQkJCW9wdHMuaXNTZWNyZXQgPSBv
cHRzLmlzU2VjcmV0IHx8IGZhbHNlOwoKCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCdp
bnB1dFtuYW1lPSJOYW1lIl0nKS5mb3JtX19lbmFibGUoKTsKCQkJCQkJaWYgKG9w
dHMuZm9sZGVySWQgPT0gMCB8fCBvcHRzLmZvbGRlcklkID09IDk1MCB8fCBvcHRz
LmZvbGRlcklkID09IDUwMDAwMCB8fCBvcHRzLmZvbGRlcklkID09IDUwMDAwMSB8
fCBvcHRzLmZvbGRlcklkID09IDUwMDAwMikgewoJCQkJCQkJbGF5ZXIuJGRpdi5m
aW5kKCdpbnB1dFtuYW1lPSJOYW1lIl0nKS5mb3JtX19kaXNhYmxlKCk7CgkJCQkJ
CX0KCgoJCQkJCQlmdW5jdGlvbiB0b2dnbGVQb3BDaGVja2JveChjb25kaXRpb24p
IHsKCQkJCQkJCWlmIChjb25kaXRpb24pIHsKCQkJCQkJCQkvLyBtYWlsLTg5MDIg
YWx3YXlzIGNoZWNrIHBvcDMgY2hlY2tib3ggd2l0aCBwcm90ZWN0ZWQKCQkJCQkJ
CQlwb3BVc2VyVmFsdWUgPSBwb3BDaGVja2JveC5hdHRyKCdjaGVja2VkJyk7CgkJ
CQkJCQkJcG9wV3JhcHBlci5mb3JtX19kaXNhYmxlKCk7CgkJCQkJCQkJcG9wQ2hl
Y2tib3guYXR0cignY2hlY2tlZCcsICdjaGVja2VkJyk7CgkJCQkJCQl9CgkJCQkJ
CQllbHNlIHsKCQkJCQkJCQlwb3BXcmFwcGVyLmZvcm1fX2VuYWJsZSgpOwoJCQkJ
CQkJCXBvcENoZWNrYm94LmF0dHIoJ2NoZWNrZWQnLCBwb3BVc2VyVmFsdWUpOwoJ
CQkJCQkJfQoJCQkJCQl9CgoJCQkJCQl2YXIgcHJvdGVjdGVkQ2hlY2tib3ggPSBs
YXllci4kZGl2LmZpbmQoJ2lucHV0W25hbWU9InNlY3JldCJdJykKCQkJCQkJCSxw
b3BXcmFwcGVyID0gbGF5ZXIuJGRpdi5maW5kKCcuanMtcG9wJykKCQkJCQkJCSxw
b3BDaGVja2JveCA9IHBvcFdyYXBwZXIuZmluZCgnaW5wdXRbbmFtZT0icG9wIl0n
KQoJCQkJCQkJLHBvcFVzZXJWYWx1ZTsKCQkJCQkJdmFyIGNhbkhpZGVQYXNzd29y
ZCA9ICFvcHRzLmlzU2VjcmV0OyAvLyBtYWlsLTg1MzAKCgkJCQkJCS8vIENsZWFu
IGZvcm0KCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCdpbnB1dFt0eXBlPSJ0ZXh0Il0s
aW5wdXRbdHlwZT0icGFzc3dvcmQiXScpLnZhbCgnJyk7CgkJCQkJCWxheWVyLiRk
aXYuZmluZCgnaW5wdXRbdHlwZT0iY2hlY2tib3giXScpLnJlbW92ZUF0dHIoJ2No
ZWNrZWQnKTsKCgkJCQkJCS8vIERhdGEKCQkJCQkJaWYgKCFuZXdGb2xkZXIpIHsK
CQkJCQkJCWxheWVyLiRkaXYuZmluZCgnLmpzLWZvbGRlcicpLnRleHQob3B0cy5m
b2xkZXJOYW1lKTsKCQkJCQkJCWxheWVyLiRkaXYuZmluZCgnaW5wdXRbbmFtZT0i
TmFtZSJdJykudmFsKG9wdHMuZm9sZGVyTmFtZSk7CgkJCQkJCQlwb3BDaGVja2Jv
eC5hdHRyKCdjaGVja2VkJywgb3B0cy5pc1BvcCA/ICcnIDogJ2NoZWNrZWQnKTsK
CQkJCQkJCXByb3RlY3RlZENoZWNrYm94LmF0dHIoJ2NoZWNrZWQnLCBvcHRzLmlz
U2VjcmV0ID8gJ2NoZWNrZWQnIDogJycpOwoJCQkJCQl9CgkJCQkJCWxheWVyLiRk
aXYuZmluZCgnaW5wdXRbbmFtZT0ibmV3Il0nKS52YWwobmV3Rm9sZGVyID8gJzEn
IDogJycpOwoJCQkJCQlsYXllci4kZGl2LmZpbmQoJ2lucHV0W25hbWU9ImZvbGRl
ciJdJykudmFsKG9wdHMuZm9sZGVySWQpOwoKCQkJCQkJdmFyIHBhcmVudFNlbGVj
dCA9IGxheWVyLiRkaXYuZmluZCgnc2VsZWN0W25hbWU9InBhcmVudGlkIl0nKSwK
CQkJCQkJCWZvbGRlcnNMaXN0ID0gb3B0cy5mb2xkZXJzTGlzdDsKCgoJCQkJCQlp
ZiAoJC5pc0FycmF5KGZvbGRlcnNMaXN0KSkgewoJCQkJCQkJZm9sZGVyc0xpc3Qg
PQoJCQkJCQkJCSc8b3B0aW9uPicrIExhbmcuZ2V0KCdvcHRpb25zLmZvbGRlcnMu
dG9wZm9sZGVyJykgKyc8L29wdGlvbj4nICsKCgkJCQkJCQlhanMubWFwKGZvbGRl
cnNMaXN0LCBmdW5jdGlvbiAoZm9sZGVyKSB7CgkJCQkJCQkJcmV0dXJuICc8b3B0
aW9uIHZhbHVlPSInICsgKGZvbGRlci5pZCB8fCBmb2xkZXIuSWQpICsgJyI+JyAr
CgkJCQkJCQkJCWFqcy5IdG1sLmVzY2FwZShmb2xkZXIubmFtZSB8fCBmb2xkZXIu
TmFtZSkgKyc8L29wdGlvbj4nOwoJCQkJCQkJfSkuam9pbignJyk7CgkJCQkJCX0K
CgkJCQkJCXBhcmVudFNlbGVjdC5odG1sKGZvbGRlcnNMaXN0KTsKCgkJCQkJCXBh
cmVudFNlbGVjdC52YWwoaXNOYU4ob3B0cy5wYXJlbnRJZCkgPyAnJyA6IG9wdHMu
cGFyZW50SWQpOwoJCQkJCQlwYXJlbnRTZWxlY3QudHJpZ2dlckhhbmRsZXIoJ2No
YW5nZScpOwoJCQkJCQlwYXJlbnRTZWxlY3QuY2xvc2VzdCgnLmZvcm1fX3Jvdycp
LnRvZ2dsZSghb3B0cy5pc1BhcmVudCAmJiBvcHRzLmNhbkJlU3ViZm9sZGVyKTsK
CgkJCQkJCWlmIChvcHRzLnNlY3JldFF1ZXN0aW9uKSB7CgkJCQkJCQlsYXllci4k
ZGl2LmZpbmQoJ2lucHV0W25hbWU9InNlY3JldF9xdWVzdGlvbiJdJykudmFsKG9w
dHMuc2VjcmV0UXVlc3Rpb24pOwoJCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCdpbnB1
dFtuYW1lPSJzZWNyZXRfYW5zd2VyIl0nKS52YWwoJyoqKioqKioqKionKTsKCQkJ
CQkJfQoKCQkJCQkJaWYgKG5ld0ZvbGRlcikgewoJCQkJCQkJbGF5ZXIuJGRpdi5m
aW5kKCcuanMtbmV3Jykuc2hvdygpOwoJCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCcu
anMtZWRpdCcpLmhpZGUoKTsKCQkJCQkJCWxheWVyLiRkaXYuZmluZCgnaW5wdXRb
dHlwZT0ic3VibWl0Il0nKS52YWwoTGFuZy5nZXQoJ29wdGlvbnMuZm9sZGVycy5h
ZGQnKSk7CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQlsYXllci4kZGl2LmZp
bmQoJy5qcy1lZGl0Jykuc2hvdygpOwoJCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCcu
anMtbmV3JykuaGlkZSgpOwoJCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCdpbnB1dFt0
eXBlPSJzdWJtaXQiXScpLnZhbChMYW5nLmdldCgnb3B0aW9ucy5mb2xkZXJzLmVk
aXQnKSk7CgkJCQkJCX0KCgkJCQkJCXZhciBwYXNzd29yZENvbnRhaW5lciA9IGNh
bkhpZGVQYXNzd29yZD8gbGF5ZXIuJGRpdi5maW5kKCcuanMtcGFzc3dvcmQtY29u
dGFpbmVyJykgOiBsYXllci4kZGl2LmZpbmQoJy5qcy1mb2xkZXItcGFzc3dvcmQt
cXVlc3Rpb24nKTsKCQkJCQkJcHJvdGVjdGVkQ2hlY2tib3gudW5iaW5kKCcuc2V0
dGluZ3NfX2ZvbGRlcnNfX2VkaXQnKS5iaW5kKCdjaGFuZ2Uuc2V0dGluZ3NfX2Zv
bGRlcnNfX2VkaXQnLCBmdW5jdGlvbiAoKSB7CgkJCQkJCQl2YXIgaXNQYXNzd29y
ZFByb3RlY3RlZCA9IHByb3RlY3RlZENoZWNrYm94LmF0dHIoJ2NoZWNrZWQnKTsK
CgkJCQkJCQlpZiAoaXNQYXNzd29yZFByb3RlY3RlZCkgewoJCQkJCQkJCXBhc3N3
b3JkQ29udGFpbmVyLmZvcm1fX2VuYWJsZSgpOwoJCQkJCQkJCWxheWVyLiRkaXYu
ZmluZCgnLmpzLWZvbGRlci1wYXNzd29yZC1xdWVzdGlvbicpLnRvZ2dsZSh0cnVl
KTsKCQkJCQkJCQlsYXllci4kZGl2LmZpbmQoJy5qcy1mb2xkZXItcGFzc3dvcmQt
cXVlc3Rpb24nKS5mb3JtX190b2dnbGUodHJ1ZSk7CgkJCQkJCQkJcGFzc3dvcmRD
b250YWluZXIuc2xpZGVEb3duKCdmYXN0JywgZnVuY3Rpb24oKSB7CgkJCQkJCQkJ
CWxheWVyLnNpemVDaGFuZ2VkKCk7CgkJCQkJCQkJfSk7CgoJCQkJCQkJCXRvZ2ds
ZVBvcENoZWNrYm94KHRydWUpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJ
CQkJcGFzc3dvcmRDb250YWluZXIuc2xpZGVVcCgnZmFzdCcsIGZ1bmN0aW9uKCkg
ewoJCQkJCQkJCQlwYXNzd29yZENvbnRhaW5lci5mb3JtX19kaXNhYmxlKCk7CgkJ
CQkJCQkJfSk7CgkJCQkJCQkJaWYob3B0cy5pc1BvcEVkaXRhYmxlICE9PSBmYWxz
ZSkgewoJCQkJCQkJCQl0b2dnbGVQb3BDaGVja2JveChmYWxzZSk7CgkJCQkJCQkJ
fQoJCQkJCQkJfQoJCQkJCQl9KTsKCgkJCQkJCXBhc3N3b3JkQ29udGFpbmVyLnRv
Z2dsZShvcHRzLmlzU2VjcmV0KTsKCQkJCQkJcGFzc3dvcmRDb250YWluZXIuZm9y
bV9fdG9nZ2xlKG9wdHMuaXNTZWNyZXQpOwoJCQkJCQl0b2dnbGVQb3BDaGVja2Jv
eChvcHRzLmlzUG9wRWRpdGFibGUgIT09IGZhbHNlPyBvcHRzLmlzU2VjcmV0IDog
dHJ1ZSk7IC8vbWFpbC0xMzQxOAoKCQkJCQkJbGF5ZXIuZnVuYyA9IGZ1bmN0aW9u
IChzdGF0dXMpIHsKCQkJCQkJCWlmICghc3RhdHVzKSB7CgkJCQkJCQkJaWYgKCQu
aXNGdW5jdGlvbihvcHRzLmNhbmNlbCkpCgkJCQkJCQkJCW9wdHMuY2FuY2VsKGZv
cm0pOwoJCQkJCQkJCXJldHVybiB0cnVlOwoJCQkJCQkJfQoKCQkJCQkJCXZhciBy
ZXF1aXJlZEZpZWxkcyA9IFt7CgkJCQkJCQkJCW5hbWU6ICdOYW1lJywKCQkJCQkJ
CQkJcHJvbXB0OiBMYW5nLmdldCgnb3B0aW9ucy5mb2xkZXJzLmVycm9yLnJlcXVp
cmVkJykKCQkJCQkJCQl9CgkJCQkJCQldOwoJCQkJCQkJdmFyIHBhdHRlcm5GaWVs
ZHMgPSBbXTsKCgkJCQkJCQlpZiAocHJvdGVjdGVkQ2hlY2tib3guYXR0cignY2hl
Y2tlZCcpKSB7CgkJCQkJCQkJcmVxdWlyZWRGaWVsZHMucHVzaCgKCQkJCQkJCQkJ
ewoJCQkJCQkJCQkJbmFtZTogJ3NlY3JldF9xdWVzdGlvbicsCgkJCQkJCQkJCQlw
cm9tcHQ6IExhbmcuZ2V0KCdvcHRpb25zLmZvbGRlcnMuZXJyb3IucmVxdWlyZWQn
KQoJCQkJCQkJCQl9LAoJCQkJCQkJCQl7CgkJCQkJCQkJCQluYW1lOiAnc2VjcmV0
X2Fuc3dlcicsCgkJCQkJCQkJCQlwcm9tcHQ6IExhbmcuZ2V0KCdvcHRpb25zLmZv
bGRlcnMuZXJyb3IucmVxdWlyZWQnKQoJCQkJCQkJCQl9LAoJCQkJCQkJCQl7CgkJ
CQkJCQkJCQluYW1lOiAnUGFzc3dvcmQnLAoJCQkJCQkJCQkJcHJvbXB0OiBMYW5n
LmdldCgnb3B0aW9ucy5mb2xkZXJzLmVycm9yLnJlcXVpcmVkJykKCQkJCQkJCQkJ
fQoJCQkJCQkJCSk7CgoJCQkJCQkJCXZhciBwYXNzd29yZCA9IGxheWVyLiRkaXYu
ZmluZCgnaW5wdXRbbmFtZT0ic2VjcmV0X3Bhc3N3b3JkX25ldyJdJykudmFsKCk7
CgkJCQkJCQkJaWYgKG5ld0ZvbGRlciB8fCBjYW5IaWRlUGFzc3dvcmQpIHsKCQkJ
CQkJCQkJcmVxdWlyZWRGaWVsZHMucHVzaCgKCQkJCQkJCQkJCXsKCQkJCQkJCQkJ
CQluYW1lOiAnc2VjcmV0X3Bhc3N3b3JkX25ldycsCgkJCQkJCQkJCQkJcHJvbXB0
OiBMYW5nLmdldCgnb3B0aW9ucy5mb2xkZXJzLmVycm9yLnJlcXVpcmVkJykKCQkJ
CQkJCQkJCX0sCgkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJbmFtZTogJ3NlY3JldF9w
YXNzd29yZF9yZXR5cGUnLAoJCQkJCQkJCQkJCXByb21wdDogTGFuZy5nZXQoJ29w
dGlvbnMuZm9sZGVycy5lcnJvci5yZXF1aXJlZCcpCgkJCQkJCQkJCQl9CgkJCQkJ
CQkJCSk7CgkJCQkJCQkJCXBhdHRlcm5GaWVsZHMucHVzaCh7CgkJCQkJCQkJCQlu
YW1lOiAnc2VjcmV0X3Bhc3N3b3JkX25ldycsCgkJCQkJCQkJCQltaW5MZW46IDQs
CgkJCQkJCQkJCQllcnJvcjogTGFuZy5nZXQoJ29wdGlvbnMuZm9sZGVycy5lcnJv
ci5zaG9ydHBhc3N3b3JkJykKCQkJCQkJCQkJCX0sCgkJCQkJCQkJCQl7CgkJCQkJ
CQkJCQkJbmFtZTogJ3NlY3JldF9wYXNzd29yZF9yZXR5cGUnLAoJCQkJCQkJCQkJ
CXRlc3Q6IGZ1bmN0aW9uKHBhc3N3b3JkMikgewoJCQkJCQkJCQkJCQlyZXR1cm4g
cGFzc3dvcmQgPT09IHBhc3N3b3JkMjsKCQkJCQkJCQkJCQl9LAoJCQkJCQkJCQkJ
CWVycm9yOiBMYW5nLmdldCgnb3B0aW9ucy5mb2xkZXJzLmVycm9yLnBhc3N3b3Jk
c2RvbnRtYXRjaCcpCgkJCQkJCQkJCQl9KTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJ
CQkJCQllbHNlIGlmICghY2FuSGlkZVBhc3N3b3JkKSB7CgkJCQkJCQkJcmVxdWly
ZWRGaWVsZHMucHVzaCgKCQkJCQkJCQkJewoJCQkJCQkJCQkJbmFtZTogJ1Bhc3N3
b3JkJywKCQkJCQkJCQkJCXByb21wdDogTGFuZy5nZXQoJ29wdGlvbnMuZm9sZGVy
cy5lcnJvci5yZXF1aXJlZCcpCgkJCQkJCQkJCX0KCQkJCQkJCQkpOwoJCQkJCQkJ
fQoKCQkJCQkJCXZhciBmb3JtID0gbGF5ZXIuJGRpdi5maW5kKCdmb3JtJyk7CgkJ
CQkJCQlpZiAoQ2hlY2tGb3JtKGZvcm1bMF0sIHJlcXVpcmVkRmllbGRzLCBwYXR0
ZXJuRmllbGRzKSkKCQkJCQkJCXsKCQkJCQkJCQkvLyBtYWlsLTg5MDIgZW5hYmxl
IGNoZWNrYm94IGJlZm9yZSBzdWJtaXQKCQkJCQkJCQlwb3BXcmFwcGVyLmZpbmQo
J1tkaXNhYmxlZF0nKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOwoKCQkJCQkJCQl2
YXIgdG9rZW4gPSBvcHRzLnRva2VuczsKCgkJCQkJCQkJaWYgKCQuaXNBcnJheSh0
b2tlbikpCgkJCQkJCQkJewoJCQkJCQkJCQlsYXllci4kZGl2LmZpbmQoJ2lucHV0
W25hbWU9ImZvcm1fc2lnbiJdJykgLnZhbCh0b2tlblswXSk7CgkJCQkJCQkJCWxh
eWVyLiRkaXYuZmluZCgnaW5wdXRbbmFtZT0iZm9ybV90b2tlbiJdJykudmFsKHRv
a2VuWzFdKTsKCQkJCQkJCQl9CgoJCQkJCQkJCSRSKCd7bWFpbHJ1fScgKyAnbWFp
bHJ1LkFqYXgnLCBmdW5jdGlvbigpIHsKCQkJCQkJCQkJbWFpbHJ1LkFqYXgoewoJ
CQkJCQkJCQkJdHlwZTogJ1BPU1QnLAoJCQkJCQkJCQkJdXJsOiBvcHRzLnVybCB8
fCAnYWpheF9zZXR0aW5ncz9hamF4X2NhbGw9MSZmdW5jX25hbWU9ZWRpdCcsCgkJ
CQkJCQkJCQlkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpLAoJCQkJCQkJCQkJY29tcGxl
dGU6IGZ1bmN0aW9uKGRhdGEpIHsKCQkJCQkJCQkJCQl2YXIgcmVzcG9uc2VEYXRh
ID0gZGF0YS5nZXREYXRhKCk7CgkJCQkJCQkJCQkJaWYgKHJlc3BvbnNlRGF0YSAm
JiByZXNwb25zZURhdGEuRXJyb3IpIHsKCQkJCQkJCQkJCQkJdG9nZ2xlUG9wQ2hl
Y2tib3gocHJvdGVjdGVkQ2hlY2tib3guYXR0cignY2hlY2tlZCcpKTsKCQkJCQkJ
CQkJCQkJbGF5ZXIuc2hvd0Vycm9yKHJlc3BvbnNlRGF0YS5FcnJvcik7CgkJCQkJ
CQkJCQkJfQoJCQkJCQkJCQkJCWVsc2UgewoJCQkJCQkJCQkJCQlpZiAoJC5pc0Z1
bmN0aW9uKG9wdHMuc3VjY2VzcykpCgkJCQkJCQkJCQkJCQlvcHRzLnN1Y2Nlc3Mo
Zm9ybSwgKHJlc3BvbnNlRGF0YT8gcmVzcG9uc2VEYXRhLm5ld2ZvbGRlcmlkIDog
bnVsbCkpOwoJCQkJCQkJCQkJCQlsYXllci5oaWRlKCk7CgkJCQkJCQkJCQkJfQoJ
CQkJCQkJCQkJfQoJCQkJCQkJCQl9KTsKCQkJCQkJCQl9KTsKCQkJCQkJCX0KCQkJ
CQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfTsKCgkJCQkJCWxheWVyLnNob3coKTsK
CQkJCQl9KTsKCQkJCX0pOwoJCQl9LAoKCQkJc2V0dGluZ3NfX2ZvbGRlcnNfX2Rl
bGV0ZV9pbWFwOiBmdW5jdGlvbigpIHsKCQkJCSRSKCd7cGx1Z2luc30nICsgJ0xh
eWVyJywgZnVuY3Rpb24oKSB7CgkJCQkJTGF5ZXIuZ2V0KCdzZXR0aW5nc19fZm9s
ZGVyc19fZGVsZXRlX2ltYXAnLCBmdW5jdGlvbihsYXllcikgewoJCQkJCQlsYXll
ci5mdW5jID0gZnVuY3Rpb24oc3RhdHVzKSB7CgkJCQkJCQlpZiAoIXN0YXR1cykK
CQkJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJfTsKCQkJCQkJbGF5ZXIuc2hvdygp
OwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0sCgoJCQlzZXR0aW5nc19fZm9sZGVyc19f
ZGVsZXRlOiBmdW5jdGlvbiAobmFtZSwgb3B0cykgewoJCQkJLy8gTUFJTC0xMzQ1
OQoJCQkJaWYgKG1haWxydS5FbmFibGVJTUFQKSB7CgkJCQkJdmFyIGNvbGxlY3Rv
ciA9IG1haWxydS5pc0NvbGxlY3RvckZvbGRlcihvcHRzLmZvbGRlcklkKTsKCgkJ
CQkJaWYgKGNvbGxlY3RvcikgewoJCQkJCQlyZXR1cm4gdGhpcy5zZXR0aW5nc19f
Zm9sZGVyc19fZGVsZXRlX2ltYXAoKTsKCQkJCQl9CgkJCQl9CgoJCQkJZnVuY3Rp
b24gZGVsZXRlRm9sZGVyKCkgewoJCQkJCSRSKCd7bWFpbHJ1fScgKyAnbWFpbHJ1
LkFqYXgnLCBmdW5jdGlvbigpIHsKCQkJCQkJbWFpbHJ1LkFqYXgoewoJCQkJCQkJ
dHlwZTogJ1BPU1QnLAoJCQkJCQkJdXJsOiAnYWpheF9zZXR0aW5ncz9hamF4X2Nh
bGw9MSZmdW5jX25hbWU9ZGVsZXRlJywKCQkJCQkJCWRhdGE6IHsKCQkJCQkJCQlm
b2xkZXI6IG9wdHMuZm9sZGVySWQKCQkJCQkJCX0sCgkJCQkJCQljb21wbGV0ZTog
ZnVuY3Rpb24oZGF0YSkgewoJCQkJCQkJCWlmICgkLmlzRnVuY3Rpb24ob3B0cy5z
dWNjZXNzKSkKCQkJCQkJCQkJb3B0cy5zdWNjZXNzKCk7CgkJCQkJCQl9CgkJCQkJ
CX0pOwoJCQkJCX0pOwoJCQkJfQoKCQkJCSRSKCd7cGx1Z2luc30nICsgJ0xheWVy
JywgZnVuY3Rpb24oKSB7CgkJCQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1bmN0aW9uKGxh
eWVyKSB7CgkJCQkJCWxheWVyLmZ1bmMgPSBmdW5jdGlvbihzdGF0dXMpIHsKCQkJ
CQkJCWlmICghc3RhdHVzKQoJCQkJCQkJCXJldHVybiB0cnVlOwoKCQkJCQkJCXZh
ciBGID0gbWFpbHJ1LkZvbGRlcnMuZ2V0U2FmZShwYXJzZUludChvcHRzLmZvbGRl
cklkLCAxMCkpOwoKCQkJCQkJCWlmICghRi5pc1NlY3VyZU9wZW4oKSkgewoJCQkJ
CQkJCWxheWVyLmhpZGUoKTsKCgkJCQkJCQkJbWFpbHJ1LkxheWVycy5zZWN1cmUo
b3B0cy5mb2xkZXJJZCwgZnVuY3Rpb24oc3RhdHVzKSB7CgkJCQkJCQkJCWlmIChz
dGF0dXMpIGRlbGV0ZUZvbGRlcigpOwoJCQkJCQkJCX0pOwoKCQkJCQkJCQlyZXR1
cm4gZmFsc2U7CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQlkZWxldGVG
b2xkZXIoKTsKCQkJCQkJCX0KCQkJCQkJCXJldHVybiB0cnVlOwoJCQkJCQl9OwoK
CQkJCQkJbGF5ZXIuJGRpdi5maW5kKCcuanMtZm9sZGVyJykKCQkJCQkJCS50ZXh0
KG9wdHMuZm9sZGVyTmFtZSk7CgoJCQkJCQlsYXllci5zaG93KCk7CgkJCQkJfSk7
CgkJCQl9KTsKCQkJfSwKCgkJCXNldHRpbmdzX19mb2xkZXJzX19jbGVhcjogZnVu
Y3Rpb24gKG5hbWUsIG9wdHMpIHsKCQkJCWZ1bmN0aW9uIGNsZWFyRm9sZGVyKCkg
ewoJCQkJCW1haWxydS5BamF4KHsKCQkJCQkJdXJsOiAnL2NnaS1iaW4vY2xlYXJm
b2xkZXInLAoJCQkJCQl0eXBlOiAnUE9TVCcsCgkJCQkJCWRhdGE6IHsKCQkJCQkJ
CWFqYXhfY2FsbDogMSwKCQkJCQkJCWZ1bmNfbmFtZTogJ2NsZWFyX2ZvbGRlcics
CgkJCQkJCQlmb2xkZXI6IG9wdHMuZm9sZGVySWQKCQkJCQkJfSwKCQkJCQkJaXNV
c2VyOiB0cnVlLAoJCQkJCQljb21wbGV0ZTogZnVuY3Rpb24gKCkgewoJCQkJCQkJ
aWYgKCQuaXNGdW5jdGlvbihvcHRzLnN1Y2Nlc3MpKSB7CgkJCQkJCQkJb3B0cy5z
dWNjZXNzKCk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9KTsKCQkJCX0KCgkJCQkk
Uigne3BsdWdpbnN9JyArICdMYXllcicsIGZ1bmN0aW9uICgpIHsKCQkJCQlMYXll
ci5nZXQobmFtZSwgZnVuY3Rpb24gKGxheWVyKSB7CgkJCQkJCXZhciBpc1RyYXNo
Rm9sZGVyID0gKG9wdHMuZm9sZGVySWQgPT0gNTAwMDAyKTsKCgkJCQkJCWxheWVy
LiRkaXYKCQkJCQkJCS5maW5kKCcuanMtZGVmYXVsdC1tZXNzYWdlJykKCQkJCQkJ
CS50b2dnbGUoIWlzVHJhc2hGb2xkZXIpCgkJCQkJCQkuZW5kKCkKCQkJCQkJCS5m
aW5kKCcuanMtdHJhc2gtbWVzc2FnZScpCgkJCQkJCQkudG9nZ2xlKGlzVHJhc2hG
b2xkZXIpOwoKCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCcuanMtZm9sZGVyJykudGV4
dChvcHRzLmZvbGRlck5hbWUpOwoKCQkJCQkJbGF5ZXIuZnVuYyA9IGZ1bmN0aW9u
IChzdGF0dXMpIHsKCQkJCQkJCWlmICghc3RhdHVzKSByZXR1cm4gdHJ1ZTsKCgkJ
CQkJCQl2YXIgRiA9IG1haWxydS5Gb2xkZXJzLmdldFNhZmUob3B0cy5mb2xkZXJJ
ZCk7CgkJCQkJCQlpZiAoIUYuaXNTZWN1cmVPcGVuKCkpIHsKCQkJCQkJCQlsYXll
ci5oaWRlKCk7CgkJCQkJCQkJbWFpbHJ1LkxheWVycy5zZWN1cmUob3B0cy5mb2xk
ZXJJZCwgZnVuY3Rpb24oc3RhdHVzKSB7CgkJCQkJCQkJCWlmIChzdGF0dXMpIGNs
ZWFyRm9sZGVyKCk7CgkJCQkJCQkJfSk7CgkJCQkJCQkJcmV0dXJuIGZhbHNlOwoJ
CQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJY2xlYXJGb2xkZXIoKTsKCQkJ
CQkJCX0KCQkJCQkJCXJldHVybiB0cnVlOwoJCQkJCQl9OwoKCQkJCQkJbGF5ZXIu
c2hvdygpOwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0sCgoJCQlzZXR0aW5nc19fZmls
dGVyc19fZGVsZXRlOiBmdW5jdGlvbiAobmFtZSwgb3B0cykgewoJCQkJJFIoJ3tw
bHVnaW5zfScgKyAnTGF5ZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0
KG5hbWUsIGZ1bmN0aW9uIChsYXllcikgewoJCQkJCQlsYXllci4kZGl2LmZpbmQo
Jy5qcy1maWx0ZXInKS5odG1sKG9wdHMuZmlsdGVyVGV4dCk7CgoJCQkJCQkvLyBN
QUlMLTk2NDEKCQkJCQkJdmFyIGlzRndkID0gKCEhb3B0cy5pc0Z3ZCAmJiBvcHRz
LmlzRndkID09ICIxIik7CgkJCQkJCWxheWVyLiRkaXYuZmluZCgnLmpzLXRpdGxl
LWZpbHRlcicpLnRvZ2dsZSghaXNGd2QpOwoJCQkJCQlsYXllci4kZGl2LmZpbmQo
Jy5qcy10ZXh0LWZpbHRlcicpLnRvZ2dsZSghaXNGd2QpOwoJCQkJCQlsYXllci4k
ZGl2LmZpbmQoJy5qcy10aXRsZS1md2QnKS50b2dnbGUoaXNGd2QpOwoJCQkJCQls
YXllci4kZGl2LmZpbmQoJy5qcy10ZXh0LWZ3ZCcpLnRvZ2dsZShpc0Z3ZCk7CgoJ
CQkJCQlsYXllci5mdW5jID0gZnVuY3Rpb24gKHN0YXR1cykgewoJCQkJCQkJaWYg
KCFzdGF0dXMpCgkJCQkJCQkJcmV0dXJuIHRydWU7CgoJCQkJCQkJbWFpbHJ1LkFq
YXgoewoJCQkJCQkJCXR5cGU6ICdQT1NUJywKCQkJCQkJCQl1cmw6ICdhamF4X3Nl
dHRpbmdzP2FqYXhfY2FsbD0xJmZ1bmNfbmFtZT1kZWxldGVfZmlsdGVyJywKCQkJ
CQkJCQlkYXRhOiAgewoJCQkJCQkJCQlpZDogb3B0cy5maWx0ZXJJZAoJCQkJCQkJ
CX0sCgkJCQkJCQkJY29tcGxldGU6IGZ1bmN0aW9uIChkYXRhKSB7CgkJCQkJCQkJ
CXZhciByZXNwb25zZURhdGEgPSBkYXRhLmdldERhdGEoKTsKCQkJCQkJCQkJaWYg
KHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEuRXJyb3IpewoJCQkJCQkJCQkJ
bGF5ZXIuc2hvd0Vycm9yKHJlc3BvbnNlRGF0YS5FcnJvcik7CgkJCQkJCQkJCX0K
CQkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJCQlpZiAoJC5pc0Z1bmN0aW9uKG9wdHMu
c3VjY2VzcykpCgkJCQkJCQkJCQkJb3B0cy5zdWNjZXNzKCk7CgkJCQkJCQkJCQls
YXllci5oaWRlKCk7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQl9KTsKCgkJ
CQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJfTsKCgkJCQkJCWxheWVyLnNob3coKTsK
CQkJCQl9KTsKCQkJCX0pOwoJCQl9LAoKCQkJc2V0dGluZ3NfX2ZpbHRlcnNfX2Nv
bmZpcm1FbWFpbDogZnVuY3Rpb24gKG5hbWUsIG9wdHMpIHsKCQkJCSRSKCd7cGx1
Z2luc30nICsgJ0xheWVyJywgZnVuY3Rpb24gKCkgewoKCQkJCQlMYXllci5nZXQo
bmFtZSwgZnVuY3Rpb24gKGxheWVyKSB7CgoJCQkJCQlmdW5jdGlvbiByZWZyZXNo
Q2FwdGNoYSgkY2FwdGNoYUZyYW1lKSB7CgkJCQkJCQlpZigkY2FwdGNoYUZyYW1l
KQoJCQkJCQkJCSRjYXB0Y2hhRnJhbWUuYXR0cignc3JjJywgbWFpbHJ1LmNhcHRj
aGFVUkwxICsgJz8nICsgTWF0aC5yYW5kb20oKSk7CgkJCQkJCX0KCgkJCQkJCXZh
ciBmb3JtID0gbGF5ZXIuJGRpdi5maW5kKCdmb3JtJylbMF0sCgkJCQkJCQkkY29k
ZUlucHV0ID0gbGF5ZXIuJGRpdi5maW5kKCdpbnB1dFtuYW1lPSJjb2RlIl0nKSwK
CQkJCQkJCSRjb2RlQ29udGFpbmVyID0gbGF5ZXIuJGRpdi5maW5kKCcuanMtY29u
ZmlybUNvZGUnKSwKCQkJCQkJCSRwYXNzSW5wdXQgPSBsYXllci4kZGl2LmZpbmQo
J2lucHV0W25hbWU9InBhc3N3b3JkIl0nKSwKCQkJCQkJCSRjYXB0Y2hhQ29udGFp
bmVyID0gbGF5ZXIuJGRpdi5maW5kKCcuanMtY2FwdGNoYVJvdycpLAoJCQkJCQkJ
JGNhcHRjaGFJbnB1dCA9IGxheWVyLiRkaXYuZmluZCgnaW5wdXRbbmFtZT0ic2Vj
dXJpdHlfaW1hZ2VfYW5zd2VyIl0nKSwKCQkJCQkJCSRyZXNlbmRMaW5rID0gbGF5
ZXIuJGRpdi5maW5kKCcuanMtcmVzZW5kJyksCgkJCQkJCQkkcmVzZW5kTGlua09r
ID0gJHJlc2VuZExpbmsucGFyZW50KCkuZmluZCgnLmpzLXJlc2VuZC1vaycpOwoK
CQkJCQkJdmFyIHVzZUNhcHRjaGEgPSBvcHRzLnVzZUNhcHRjaGE7CgoJCQkJCQls
YXllci4kZGl2LmZpbmQoJy5qcy1lbWFpbCcpLmh0bWwob3B0cy5lbWFpbCk7CgoJ
CQkJCQkkY29kZUlucHV0LnZhbCgnJyk7CgkJCQkJCSRwYXNzSW5wdXQudmFsKCcn
KTsKCQkJCQkJJGNhcHRjaGFJbnB1dC52YWwoJycpOwoKCQkJCQkJJHJlc2VuZExp
bmtPay5oaWRlKCk7CgkJCQkJCSRyZXNlbmRMaW5rLnNob3coKTsKCgkJCQkJCWlm
KG9wdHMuY29kZSkgewoJCQkJCQkJJGNvZGVJbnB1dC52YWwob3B0cy5jb2RlKTsK
CQkJCQkJCSRjb2RlQ29udGFpbmVyLmhpZGUoKTsKCQkJCQkJCWxheWVyLiRkaXYu
ZmluZCgnLmpzLWRlc2MnKS5oaWRlKCk7CgkJCQkJCQlsYXllci4kZGl2LmZpbmQo
Jy5qcy1jb25maXJtQ29kZS1kZXNjJykuc2hvdygpOwoJCQkJCQkJc2V0VGltZW91
dChmdW5jdGlvbigpewoJCQkJCQkJCS8vIGxheWVyIHdpbGwgc2V0IGZvY3VzIGlu
IGZpcnN0IGVsZW1lbnQsIHdlIGhhdmUgdG8gcmVzZXQgaXQKCQkJCQkJCQkkcGFz
c0lucHV0LmZpcnN0KCkuZm9jdXMoKTsKCQkJCQkJCX0sMTAwKTsKCQkJCQkJfQoJ
CQkJCQllbHNlIHsKCQkJCQkJCSRjb2RlQ29udGFpbmVyLnNob3coKTsKCQkJCQkJ
CWxheWVyLiRkaXYuZmluZCgnLmpzLWRlc2MnKS5zaG93KCk7CgkJCQkJCQlsYXll
ci4kZGl2LmZpbmQoJy5qcy1jb25maXJtQ29kZS1kZXNjJykuaGlkZSgpOwoJCQkJ
CQl9CgoJCQkJCQkkY2FwdGNoYUNvbnRhaW5lci5kaXNwbGF5KHVzZUNhcHRjaGEp
OwoKCQkJCQkJbGF5ZXIuJGRpdi5kZWxlZ2F0ZSgnLmpzLXJlZnJlc2gtY2FwdGNo
YScsICdjbGljaycsIGZ1bmN0aW9uKGV2dCkgewoJCQkJCQkJcmVmcmVzaENhcHRj
aGEobGF5ZXIuJGRpdi5maW5kKCcjY2FwdGNoYV9mcmFtZScpKTsKCQkJCQkJCWV2
dC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCQl9KTsKCgkJCQkJCWxheWVyLmZ1bmMg
PSBmdW5jdGlvbiAoc3RhdHVzKSB7CgkJCQkJCQlpZiAoIXN0YXR1cykgcmV0dXJu
IHRydWU7CgoJCQkJCQkJdmFyIHJlcXVpcmVkRmllbGRzID0gWwoJCQkJCQkJCXsK
CQkJCQkJCQkJbmFtZTogJ2NvZGUnLAoJCQkJCQkJCQlwcm9tcHQ6IExhbmcuZ2V0
KCdvcHRpb25zLmZvbGRlcnMuZXJyb3IucmVxdWlyZWQnKQoJCQkJCQkJCX0sCgkJ
CQkJCQkJewoJCQkJCQkJCQluYW1lOiAncGFzc3dvcmQnLAoJCQkJCQkJCQlwcm9t
cHQ6IExhbmcuZ2V0KCdvcHRpb25zLmZvbGRlcnMuZXJyb3IucmVxdWlyZWQnKQoJ
CQkJCQkJCX0KCQkJCQkJCV07CgkJCQkJCQlpZih1c2VDYXB0Y2hhKSB7CgkJCQkJ
CQkJcmVxdWlyZWRGaWVsZHMucHVzaCgKCQkJCQkJCQkJewoJCQkJCQkJCQkJbmFt
ZTogJ3NlY3VyaXR5X2ltYWdlX2Fuc3dlcicsCgkJCQkJCQkJCQlwcm9tcHQ6IExh
bmcuZ2V0KCdvcHRpb25zLmZvbGRlcnMuZXJyb3IucmVxdWlyZWQnKQoJCQkJCQkJ
CQl9CgkJCQkJCQkJKTsKCQkJCQkJCX0KCQkJCQkJCWlmICghQ2hlY2tGb3JtKGZv
cm0sIHJlcXVpcmVkRmllbGRzKSkKCQkJCQkJCQlyZXR1cm4gZmFsc2U7CgoJCQkJ
CQkJdmFyIGRhdGEgPSB7CgkJCQkJCQkJaWQ6IG9wdHMuZW1haWxJZCwKCQkJCQkJ
CQljb2RlOiAkY29kZUlucHV0LnZhbCgpLAoJCQkJCQkJCXBhc3N3b3JkOiAkcGFz
c0lucHV0LnZhbCgpCgkJCQkJCQl9OwoJCQkJCQkJaWYodXNlQ2FwdGNoYSkgewoJ
CQkJCQkJCS8vIHN1Ym1pdCBjYXB0Y2hhCgkJCQkJCQkJZGF0YS5zZWN1cml0eV9p
bWFnZV9hbnN3ZXIgPSAkY2FwdGNoYUlucHV0LnZhbCgpOwoJCQkJCQkJfQoKCQkJ
CQkJCW1haWxydS5BamF4KHsKCQkJCQkJCQl0eXBlOiAnUE9TVCcsCgkJCQkJCQkJ
dXJsOiAnYWpheF9zZXR0aW5ncz9hamF4X2NhbGw9MSZmdW5jX25hbWU9Y29uZmly
bV9maWx0ZXJfZW1haWwnLAoJCQkJCQkJCWRhdGE6IGRhdGEgLAoJCQkJCQkJCWNv
bXBsZXRlOiBmdW5jdGlvbiAoZGF0YSkgewoJCQkJCQkJCQl2YXIgcmVzcG9uc2VE
YXRhID0gZGF0YS5nZXREYXRhKCk7CgoJCQkJCQkJCQlpZiAocmVzcG9uc2VEYXRh
ICYmIHJlc3BvbnNlRGF0YS5FcnJvcil7CgkJCQkJCQkJCQlsYXllci5zaG93RXJy
b3IocmVzcG9uc2VEYXRhLkVycm9yKTsKCgkJCQkJCQkJCQl2YXIgcGF0dGVybkZp
ZWxkcyA9IFsKCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJCW5hbWU6ICdjb2RlJywK
CQkJCQkJCQkJCQkJdGVzdDogZnVuY3Rpb24odmFsKSB7IHJldHVybiByZXNwb25z
ZURhdGEuV2hhdCAhPT0gJ2NvZGUnOyB9LAoJCQkJCQkJCQkJCQllcnJvcjogTGFu
Zy5nZXQoJ29wdGlvbnMuZmlsdGVycy5lcnJvcnMuYmFkX2NvZGUnKQoJCQkJCQkJ
CQkJCX0sCgkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQluYW1lOiAncGFzc3dvcmQn
LAoJCQkJCQkJCQkJCQl0ZXN0OiBmdW5jdGlvbih2YWwpIHsgcmV0dXJuIHJlc3Bv
bnNlRGF0YS5XaGF0ICE9PSAncHdkJzsgfSwKCQkJCQkJCQkJCQkJZXJyb3I6IExh
bmcuZ2V0KCdvcHRpb25zLmZpbHRlcnMuZXJyb3JzLmJhZF9wYXNzd29yZCcpCgkJ
CQkJCQkJCQkJfQoJCQkJCQkJCQkJXTsKCQkJCQkJCQkJCUNoZWNrRm9ybShmb3Jt
LCBbXSwgcGF0dGVybkZpZWxkcyk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZSB7
CgkJCQkJCQkJCQlpZiAoJC5pc0Z1bmN0aW9uKG9wdHMuc3VjY2VzcykpCgkJCQkJ
CQkJCQkJb3B0cy5zdWNjZXNzKCk7CgoJCQkJCQkJCQkJbGF5ZXIuaGlkZSgpOwoJ
CQkJCQkJCQl9CgoJCQkJCQkJCQlpZiAodXNlQ2FwdGNoYSl7CgkJCQkJCQkJCQkk
Y2FwdGNoYUlucHV0LnZhbCgnJyk7CgkJCQkJCQkJCQlyZWZyZXNoQ2FwdGNoYSgg
bGF5ZXIuJGRpdi5maW5kKCcjY2FwdGNoYV9mcmFtZScpICk7CgkJCQkJCQkJCX0K
CQkJCQkJCQl9CgkJCQkJCQl9KTsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJ
fTsKCgkJCQkJCWxheWVyLiRkaXYuZmluZCgnLmpzLXJlc2VuZCcpLnVuYmluZCgn
Y2xpY2snKS5jbGljayhmdW5jdGlvbihlKSB7CgkJCQkJCQl2YXIgbGluayA9ICQo
ZS50YXJnZXQpOwoKCQkJCQkJCW1haWxydS5BamF4KHsKCQkJCQkJCQl0eXBlOiAn
UE9TVCcsCgkJCQkJCQkJdXJsOiAnYWpheF9zZXR0aW5ncz9hamF4X2NhbGw9MSZm
dW5jX25hbWU9Y29uZmlybV9maWx0ZXJfZW1haWxfcmVzZW5kJywKCQkJCQkJCQlk
YXRhOiAgewoJCQkJCQkJCQlpZDogb3B0cy5lbWFpbElkCgkJCQkJCQkJfSwKCQkJ
CQkJCQljb21wbGV0ZTogZnVuY3Rpb24gKGRhdGEpIHsKCQkJCQkJCQkJdmFyIHJl
c3BvbnNlRGF0YSA9IGRhdGEuZ2V0RGF0YSgpOwoJCQkJCQkJCQlpZiAocmVzcG9u
c2VEYXRhICYmIHJlc3BvbnNlRGF0YS5FcnJvcil7CgkJCQkJCQkJCQlsYXllci5z
aG93RXJyb3IocmVzcG9uc2VEYXRhLkVycm9yKTsKCQkJCQkJCQkJfQoJCQkJCQkJ
CQllbHNlIHsKCQkJCQkJCQkJCWxpbmsuaGlkZSgpOwoJCQkJCQkJCQkJbGluay5w
YXJlbnQoKS5maW5kKCcuanMtcmVzZW5kLW9rJykuc2hvdygpOwoJCQkJCQkJCQl9
CgkJCQkJCQkJfQoJCQkJCQkJfSk7CgoJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJ
CQl9KTsKCgkJCQkJCWxheWVyLnNob3coKTsKCQkJCQl9KTsKCQkJCX0pOwoJCQl9
LAoKCQkJc2V0dGluZ3NfX2ZpbHRlcnNfX2ZvcmNlRmlsdGVyOiBmdW5jdGlvbiAo
bmFtZSwgb3B0cykgewoJCQkJJFIoJ3twbHVnaW5zfScgKyAnTGF5ZXInLCBmdW5j
dGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1bmN0aW9uIChsYXllcikg
ewoJCQkJCQlsYXllci4kZGl2LmZpbmQoJy5qcy1maWx0ZXInKS5odG1sKG9wdHMu
ZmlsdGVyVGV4dCk7CgkJCQkJCWxheWVyLiRkaXYuZmluZCgnLmpzLWZvbGRlcnMn
KS5odG1sKG9wdHMuZm9sZGVyc0xpc3QpOwoJCQkJCQltYWlscnUudWkuT3B0aW9u
cy5jaGVja2VkRHJvcGRvd24oewoJCQkJCQkJY29udGFpbmVyOiBsYXllci4kZGl2
LmZpbmQoJy5qcy1jaGVja2VkLWRyb3Bkb3duJyksCgkJCQkJCQlhbGxUZXh0OiBM
YW5nLmdldCgnb3B0aW9ucy5maWx0ZXJzLmFsbF9mb2xkZXJzJykKCQkJCQkJfSk7
CgoJCQkJCQlsYXllci5mdW5jID0gZnVuY3Rpb24gKHN0YXR1cykgewoJCQkJCQkJ
aWYgKCFzdGF0dXMpIHJldHVybiB0cnVlOwoKCQkJCQkJCW1haWxydS5BamF4KHsK
CQkJCQkJCQl0eXBlOiAnUE9TVCcsCgkJCQkJCQkJdXJsOiAnYWpheF9zZXR0aW5n
cz9hamF4X2NhbGw9MSZmdW5jX25hbWU9Zm9yY2VfZmlsdGVyJywKCQkJCQkJCQlk
YXRhOiAgewoJCQkJCQkJCQlpZDogb3B0cy5maWx0ZXJJZCwKCQkJCQkJCQkJZm9s
ZGVyczogbGF5ZXIuJGRpdi5maW5kKCdpbnB1dFtuYW1lPSJmaWx0ZXJzIl0nKS52
YWwoKQoJCQkJCQkJCX0sCgkJCQkJCQkJY29tcGxldGU6IGZ1bmN0aW9uIChkYXRh
KSB7CgkJCQkJCQkJCXZhciByZXNwb25zZURhdGEgPSBkYXRhLmdldERhdGEoKTsK
CQkJCQkJCQkJaWYgKHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEuRXJyb3Ip
ewoJCQkJCQkJCQkJbGF5ZXIuc2hvd0Vycm9yKHJlc3BvbnNlRGF0YS5FcnJvcik7
CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQl9KTsKCgkJCQkJCQlpZiAoJC5p
c0Z1bmN0aW9uKG9wdHMuc3VjY2VzcykpCgkJCQkJCQkJb3B0cy5zdWNjZXNzKCk7
CgkJCQkJCQlsYXllci5oaWRlKCk7CgoJCQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJ
CX07CgoJCQkJCQlsYXllci5zaG93KCk7CgkJCQkJfSk7CgkJCQl9KTsKCQkJfSwK
CgkJCXNlY3VyZVJlc3RvcmU6IGZ1bmN0aW9uIChuYW1lKSB7CgkJCQkkUigne3Bs
dWdpbnN9JyArICdMYXllcicsIGZ1bmN0aW9uICgpIHsKCQkJCQlMYXllci5nZXQo
bmFtZSwgZnVuY3Rpb24gKGxheWVyKSB7CgkJCQkJCXZhciBzdGVwID0gMTsKCQkJ
CQkJbGF5ZXIuZnVuYyA9IGZ1bmN0aW9uIChzdGF0dXMpIHsKCQkJCQkJCWlmICgh
c3RhdHVzKSByZXR1cm4gdHJ1ZTsKCgkJCQkJCQlpZiAoc3RlcCA9PT0gMSkgewoJ
CQkJCQkJCWxheWVyLiRkaXYuZmluZCgnLmpzLXN0ZXAxJykuc2hvdygpOwoJCQkJ
CQkJCWxheWVyLiRkaXYuZmluZCgnLmpzLXN0ZXAyJykuaGlkZSgpOwoKCQkJCQkJ
CQl2YXIgb2sgPSB0cnVlOyAgLy8gQHRvZG8gY2hlY2sgcXVlc3Rpb24KCQkJCQkJ
CQlpZiAob2spIHsKCQkJCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCdpbnB1dFt0eXBl
PSJzdWJtaXQiXScpLnZhbChMYW5nLmdldCgnbGF5ZXJzLmNoYW5nZScpKTsKCQkJ
CQkJCQkJbGF5ZXIuJGRpdi5maW5kKCcuanMtc3RlcDEnKS5oaWRlKCk7CgkJCQkJ
CQkJCWxheWVyLiRkaXYuZmluZCgnLmpzLXN0ZXAyJykuc2hvdygpOwoJCQkJCQkJ
CQlsYXllci4kZGl2LmZpbmQoJ2lucHV0W25hbWU9InBhc3N3b3JkIl0nKS5mb2N1
cygpOwoJCQkJCQkJCQlzdGVwID0gMjsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZSB7
CgkJCQkJCQkJCWxheWVyLiRkaXYuZmluZCgnaW5wdXRbbmFtZT0ic2VjcmV0X2Fu
c3dlciJdJykKCQkJCQkJCQkJCS5hZGRDbGFzcygnZm9ybV9fZmllbGRfZXJyb3In
KQoJCQkJCQkJCQkJLmZvY3VzKCk7CgkJCQkJCQkJCWxheWVyLiRkaXYuZmluZCgn
LmpzLWVycm9yLWNvbnRhaW5lcicpLnNob3coKTsKCQkJCQkJCQl9CgkJCQkJCQkJ
cmV0dXJuIGZhbHNlOwoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJLy8g
QHRvZG8gU2F2ZQoKCQkJCQkJCQl2YXIgcmVxdWlyZWRGaWVsZHMgPSBbCgkJCQkJ
CQkJCXsKCQkJCQkJCQkJCW5hbWU6ICdwYXNzd29yZCcsCgkJCQkJCQkJCQlwcm9t
cHQ6IExhbmcuZ2V0KCdvcHRpb25zLmZvbGRlcnMuZXJyb3IucmVxdWlyZWQnKQoJ
CQkJCQkJCQl9LAoJCQkJCQkJCQl7CgkJCQkJCQkJCQluYW1lOiAncGFzc3dvcmQy
JywKCQkJCQkJCQkJCXByb21wdDogTGFuZy5nZXQoJ29wdGlvbnMuZm9sZGVycy5l
cnJvci5yZXF1aXJlZCcpCgkJCQkJCQkJCX0sCgkJCQkJCQkJCXsKCQkJCQkJCQkJ
CW5hbWU6ICdzZWNyZXRfcXVlc3Rpb24nLAoJCQkJCQkJCQkJcHJvbXB0OiBMYW5n
LmdldCgnb3B0aW9ucy5mb2xkZXJzLmVycm9yLnJlcXVpcmVkJykKCQkJCQkJCQkJ
fSwKCQkJCQkJCQkJewoJCQkJCQkJCQkJbmFtZTogJ3NlY3JldF9hbnN3ZXInLAoJ
CQkJCQkJCQkJcHJvbXB0OiBMYW5nLmdldCgnb3B0aW9ucy5mb2xkZXJzLmVycm9y
LnJlcXVpcmVkJykKCQkJCQkJCQkJfSwKCQkJCQkJCQkJewoJCQkJCQkJCQkJbmFt
ZTogJ1Bhc3N3b3JkJywKCQkJCQkJCQkJCXByb21wdDogTGFuZy5nZXQoJ29wdGlv
bnMuZm9sZGVycy5lcnJvci5yZXF1aXJlZCcpCgkJCQkJCQkJCX0KCQkJCQkJCQld
OwoJCQkJCQkJCXZhciBwYXR0ZXJuRmllbGRzID0gWwoJCQkJCQkJCQl7CgkJCQkJ
CQkJCQluYW1lOiAncGFzc3dvcmQnLAoJCQkJCQkJCQkJbWluTGVuOiA0LAoJCQkJ
CQkJCQkJZXJyb3I6IExhbmcuZ2V0KCdvcHRpb25zLmZvbGRlcnMuZXJyb3Iuc2hv
cnRwYXNzd29yZCcpCgkJCQkJCQkJCX0sCgkJCQkJCQkJCXsKCQkJCQkJCQkJCW5h
bWU6ICdwYXNzd29yZDInLAoJCQkJCQkJCQkJdGVzdDogZnVuY3Rpb24ocGFzc3dv
cmQyKSB7CgkJCQkJCQkJCQkJdmFyIHBhc3N3b3JkID0gbGF5ZXIuJGRpdi5maW5k
KCdpbnB1dFt0eXBlPSJwYXNzd29yZCJdJykudmFsKCk7CgkJCQkJCQkJCQkJcmV0
dXJuIHBhc3N3b3JkID09PSBwYXNzd29yZDI7CgkJCQkJCQkJCQl9LAoJCQkJCQkJ
CQkJZXJyb3I6IExhbmcuZ2V0KCdvcHRpb25zLmZvbGRlcnMuZXJyb3IucGFzc3dv
cmRzZG9udG1hdGNoJykKCQkJCQkJCQkJfQoJCQkJCQkJCV07CgkJCQkJCQkJcmV0
dXJuIENoZWNrRm9ybShsYXllci4kZGl2LmZpbmQoJ2Zvcm0nKVswXSwgcmVxdWly
ZWRGaWVsZHMsIHBhdHRlcm5GaWVsZHMpOwoJCQkJCQkJfQoJCQkJCQl9OwoKCQkJ
CQkJbGF5ZXIuc2hvdygpOwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0sCgoJCQlzZXR0
aW5nc19fc2VjdXJpdHlfX3Bhc3N3b3JkOiBmdW5jdGlvbiAobmFtZSwgb3B0cykg
ewoJCQkJJFIoJ3twbHVnaW5zfScgKyAnTGF5ZXInLCBmdW5jdGlvbiAoKSB7CgkJ
CQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1bmN0aW9uIChsYXllcikgewoKCQkJCQkJZnVu
Y3Rpb24gcmVmcmVzaENhcHRjaGEoJGNhcHRjaGFGcmFtZSkgewoJCQkJCQkJaWYo
JGNhcHRjaGFGcmFtZSkKCQkJCQkJCQkkY2FwdGNoYUZyYW1lLmF0dHIoJ3NyYycs
IG1haWxydS5jYXB0Y2hhVVJMMSArICc/JyArIE1hdGgucmFuZG9tKCkpOwoJCQkJ
CQl9CgoJCQkJCQl2YXIgJGZvcm0gPSBsYXllci4kZGl2LmZpbmQoJ2Zvcm0nKSwK
CQkJCQkJCWZvcm1FcnJvciA9IGxheWVyLiRkaXYuZmluZCgnLmpzLWZvcm1FcnJv
cicpLAoJCQkJCQkJcGFzcyA9IGxheWVyLiRkaXYuZmluZCgnaW5wdXRbbmFtZT0i
UGFzc3dvcmQiXScpLAoJCQkJCQkJcm93ID0gcGFzcy5jbG9zZXN0KCcuZm9ybV9f
cm93JyksCgkJCQkJCQlpbnB1dCA9IGxheWVyLiRkaXYuZmluZCgnaW5wdXRbbmFt
ZT0ic2VjdXJpdHlfaW1hZ2VfYW5zd2VyIl0nKTsKCgkJCQkJCS8vIENsZWFuIGZv
cm0KCQkJCQkJcGFzcy52YWwoJycpOwoJCQkJCQlpZihpbnB1dCkKCQkJCQkJCWlu
cHV0LnZhbCgnJyk7CgkJCQkJCWxheWVyLiRkaXYuZmluZCgnaW5wdXRbbmFtZT0i
b2xkUHN3ZCJdJykudmFsKCcnKTsKCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCdpbnB1
dFtuYW1lPSJQYXNzd29yZF9WZXJpZnkiXScpLnZhbCgnJyk7CgoKCQkJCQkJbGF5
ZXIuJGRpdi5maW5kKCcuanMtbXJpbURpc2FibGVkJykuZGlzcGxheShvcHRzLm1y
aW1EaXNhYmxlZCAmJiBvcHRzLm1yaW1EaXNhYmxlZCAhPSAwKTsKCgkJCQkJCXBh
c3MuYmluZCgnYmx1cicsIGZ1bmN0aW9uKCkgewoJCQkJCQkJdmFyIGJhZCA9IGZh
bHNlOwoJCQkJCQkJdmFyIHZhbHVlID0gcGFzcy52YWwoKTsKCQkJCQkJCWlmICh2
YWx1ZSA9PSAnKioqKioqKioqKicpIHJldHVybjsKCQkJCQkJCWlmICh2YWx1ZSA9
PSAnJykgcmV0dXJuOwoJCQkJCQkJaWYgKHZhbHVlLmxlbmd0aCA8IDYpIGJhZCA9
IHRydWU7CgkJCQkJCQlpZiAoIWJhZCl7CgkJCQkJCQkJdmFyIGNoYXJzID0gbmV3
IEFycmF5KCk7CgkJCQkJCQkJdmFyIGk7CgkJCQkJCQkJZm9yIChpID0gMDsgaSA8
IHZhbHVlLmxlbmd0aDsgaSsrKXsKCQkJCQkJCQkJdmFyIGMgPSB2YWx1ZS5jaGFy
QXQoaSk7CgkJCQkJCQkJCXZhciBqOwoJCQkJCQkJCQlmb3IgKGogPSAwOyBqIDwg
Y2hhcnMubGVuZ3RoOyBqKyspewoJCQkJCQkJCQkJaWYgKGNoYXJzW2pdID09IGMp
IGJyZWFrOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmIChqID49IGNoYXJzLmxlbmd0
aCkgY2hhcnNbY2hhcnMubGVuZ3RoXSA9IGM7CgkJCQkJCQkJfQoJCQkJCQkJCWlm
IChjaGFycy5sZW5ndGggPCAzKSBiYWQgPSB0cnVlOwoJCQkJCQkJfQoKCQkJCQkJ
CWlmIChiYWQpewoJCQkJCQkJCWlmIChyb3cubGVuZ3RoKSB7CgkJCQkJCQkJCWlm
IChwYXNzLmhhc0NsYXNzKCdmb3JtX19maWVsZCcpKSB7CgkJCQkJCQkJCQlwYXNz
LmFkZENsYXNzKCdmb3JtX19maWVsZF9lcnJvcicpOwoJCQkJCQkJCQl9CgoJCQkJ
CQkJCQl2YXIgbWVzc2FnZSA9IHJvdy5maW5kKCcuZm9ybV9fbWVzc2FnZScpOwoJ
CQkJCQkJCQlpZiAobWVzc2FnZS5sZW5ndGgpIHsKCQkJCQkJCQkJCWlmICghbWVz
c2FnZS5oYXNDbGFzcygnZm9ybV9fbWVzc2FnZV9lcnJvcicpKSB7CgkJCQkJCQkJ
CQkJbWVzc2FnZS5kYXRhKCdvcmlnaW5hbC10ZXh0JywgbWVzc2FnZS50ZXh0KCkp
OwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJbWVzc2FnZS5odG1sKExhbmcuZ2V0KCdz
ZXR0aW5ncy5zZWN1cml0eS5lcnJvci53ZWFrUGFzc3dvcmQnKSk7CgkJCQkJCQkJ
CQkvL21lc3NhZ2UuYWRkQ2xhc3MoJ2Zvcm1fX21lc3NhZ2VfZXJyb3InKTsKCQkJ
CQkJCQkJCW1lc3NhZ2UuY3NzKCdwYWRkaW5nLWJvdHRvbScsJzRweCcpOwoJCQkJ
CQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJ
aWYgKHJvdy5sZW5ndGgpIHsKCQkJCQkJCQkJcm93LmZpbmQoJy5mb3JtX19maWVs
ZCcpLnJlbW92ZUNsYXNzKCdmb3JtX19maWVsZF9lcnJvcicpOwoJCQkJCQkJCQly
b3cuZmluZCgnLmZvcm1fX3NlbGVjdCcpLnJlbW92ZUNsYXNzKCdmb3JtX19zZWxl
Y3RfZXJyb3InKTsKCgkJCQkJCQkJCXZhciBtZXNzYWdlID0gcm93LmZpbmQoJy5m
b3JtX19tZXNzYWdlJyk7CgkJCQkJCQkJCWlmIChtZXNzYWdlLmxlbmd0aCkgewoJ
CQkJCQkJCQkJdmFyIHRleHQgPSBtZXNzYWdlLmRhdGEoJ29yaWdpbmFsLXRleHQn
KTsKCQkJCQkJCQkJCWlmICh0ZXh0ICE9PSB1bmRlZmluZWQpIHsKCQkJCQkJCQkJ
CQltZXNzYWdlLmh0bWwodGV4dCk7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQkvL21l
c3NhZ2UucmVtb3ZlQ2xhc3MoJ2Zvcm1fX21lc3NhZ2VfZXJyb3InKTsKCQkJCQkJ
CQkJCW1lc3NhZ2UuY3NzKCdwYWRkaW5nLWJvdHRvbScsJycpOwoJCQkJCQkJCQl9
CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9KTsKCgkJCQkJCWxheWVyLiRkaXYu
ZmluZCgnLmpzLXJlZnJlc2gtY2FwdGNoYScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rp
b24oKSB7CgkJCQkJCQlyZWZyZXNoQ2FwdGNoYShsYXllci4kZGl2LmZpbmQoJyNj
YXB0Y2hhX2ZyYW1lJykpOwoJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQl9KTsK
CgkJCQkJCWxheWVyLmZ1bmMgPSBmdW5jdGlvbiAoc3RhdHVzKSB7CgkJCQkJCQlp
ZiAoIXN0YXR1cykgcmV0dXJuIHRydWU7CgoJCQkJCQkJdmFyIHJlcXVpcmVkRmll
bGRzID0gW3sKCQkJCQkJCQluYW1lOiAnb2xkUHN3ZCcsCgkJCQkJCQkJcHJvbXB0
OiBMYW5nLmdldCgnc2V0dGluZ3Muc2VjdXJpdHkuZXJyb3IucmVxdWlyZWQnKQoJ
CQkJCQkJfSwKCgkJCQkJCQl7CgkJCQkJCQkJbmFtZTogJ1Bhc3N3b3JkJywKCQkJ
CQkJCQlwcm9tcHQ6IExhbmcuZ2V0KCdzZXR0aW5ncy5zZWN1cml0eS5lcnJvci5y
ZXF1aXJlZCcpCgkJCQkJCQl9LAoKCQkJCQkJCXsKCQkJCQkJCQluYW1lOiAnUGFz
c3dvcmRfVmVyaWZ5JywKCQkJCQkJCQlwcm9tcHQ6IExhbmcuZ2V0KCdzZXR0aW5n
cy5zZWN1cml0eS5lcnJvci5yZXF1aXJlZCcpCgkJCQkJCQl9CgkJCQkJCQldOwoK
CQkJCQkJCWlmIChpbnB1dCkgewoJCQkJCQkJCXJlcXVpcmVkRmllbGRzLnB1c2go
ewoJCQkJCQkJCQluYW1lOiAnc2VjdXJpdHlfaW1hZ2VfYW5zd2VyJywKCQkJCQkJ
CQkJcHJvbXB0OiBMYW5nLmdldCgnb3B0aW9ucy5mb2xkZXJzLmVycm9yLnJlcXVp
cmVkJykKCQkJCQkJCQl9KTsKCQkJCQkJCX0KCgkJCQkJCQlsYXllci5oaWRlRXJy
b3IoKTsKCgkJCQkJCQlpZiAoQ2hlY2tGb3JtKCRmb3JtWzBdLCByZXF1aXJlZEZp
ZWxkcywgW10pKSB7CgkJCQkJCQkJaWYgKENoZWNrUGFzc3dvcmQoJGZvcm1bMF0s
IHRydWUpKSB7CgoJCQkJCQkJCQlpZiAoICQuaXNGdW5jdGlvbihvcHRzLnN1Ym1p
dCkgKSB7CgkJCQkJCQkJCQlpZiAoICFvcHRzLnN1Ym1pdChsYXllcikgKQoJCQkJ
CQkJCQkJCXJldHVybjsKCQkJCQkJCQkJfQoKCQkJCQkJCQkJdmFyIGRhdGEgPSAk
Zm9ybS50b09iamVjdCgpOwoKCQkJCQkJCQkJaWYgKG1haWxydS5KU1RyYXBDaGFu
Z2VQYXNzd29yZCkgewoJCQkJCQkJCQkJaWYgKG1haWxydS50b2tlbnNbJ2FqYXhf
c2V0dGluZ3MnXSkgewoJCQkJCQkJCQkJCWRhdGFbJ2Zvcm1fc2lnbiddID0gbWFp
bHJ1LnRva2Vuc1snYWpheF9zZXR0aW5ncyddWydmb3JtX3NpZ24nXTsKCQkJCQkJ
CQkJCQlkYXRhWydmb3JtX3Rva2VuJ10gPSBtYWlscnUudG9rZW5zWydhamF4X3Nl
dHRpbmdzJ11bJ2Zvcm1fdG9rZW4nXTsKCQkJCQkJCQkJCX0KCgkJCQkJCQkJCQlt
YWlscnUuSlNUcmFwQ2hhbmdlUGFzc3dvcmQoZGF0YSk7CgkJCQkJCQkJCX0KCgkJ
CQkJCQkJCS8vPCEtLUlGIDAgLS0+InZhciBvblJhZGFyRG9uZSA9ICRSLmJpbmQo
bnVsbCwgIiBpbnN0ZWFkIG9mICIkUigiIC0gaHR0cHM6Ly9qaXJhLm1haWwucnUv
YnJvd3NlL01BSUwtODU2MTwhLS0gL0lGIC0tPgoKCQkJCQkJCQkJdmFyIG9uUmFk
YXJEb25lID0gJFIuYmluZChudWxsLCAne21haWxydX0nICsgJ21haWxydS5BamF4
JywgZnVuY3Rpb24gKCkgewoJCQkJCQkJCQkJbWFpbHJ1LkFqYXgoewoJCQkJCQkJ
CQkJCXR5cGU6ICdQT1NUJywKCQkJCQkJCQkJCQl1cmw6ICdhamF4X3NldHRpbmdz
P2FqYXhfY2FsbD0xJmZ1bmNfbmFtZT1jaGFuZ2VfcGFzc3dvcmQnLAoJCQkJCQkJ
CQkJCWRhdGE6ICBkYXRhLAoJCQkJCQkJCQkJCXNhdmVUb2tlbnM6ICEhbWFpbHJ1
LkpTVHJhcENoYW5nZVBhc3N3b3JkLAoJCQkJCQkJCQkJCWNvbXBsZXRlOiBmdW5j
dGlvbiAoZGF0YSkgewoJCQkJCQkJCQkJCQlpZiAoZGF0YS5pc09LKCkpIHsKCQkJ
CQkJCQkJCQkJCXZhciByZXNwb25zZURhdGEgPSBkYXRhLmdldERhdGEoKTsKCQkJ
CQkJCQkJCQkJCWlmIChyZXNwb25zZURhdGEgJiYgcmVzcG9uc2VEYXRhLkVycm9y
ICkgewoJCQkJCQkJCQkJCQkJCWlmICggJC5pc0Z1bmN0aW9uKG9wdHMuZXJyb3Ip
ICkKCQkJCQkJCQkJCQkJCQkJb3B0cy5lcnJvcihsYXllcik7CgkJCQkJCQkJCQkJ
CQkJbGF5ZXIuc2hvd0Vycm9yKHJlc3BvbnNlRGF0YS5FcnJvcik7CgkJCQkJCQkJ
CQkJCQl9CgkJCQkJCQkJCQkJCQllbHNlIGlmIChyZXNwb25zZURhdGEgJiYgcmVz
cG9uc2VEYXRhLkVycm9yID09PSBudWxsKSB7CgkJCQkJCQkJCQkJCQkJLy8gaGFz
IGVycm9yIGJ1dCBubyBlcnJvciB0ZXh0CgkJCQkJCQkJCQkJCQkJaWYgKCAkLmlz
RnVuY3Rpb24ob3B0cy5lcnJvcikgKQoJCQkJCQkJCQkJCQkJCQlvcHRzLmVycm9y
KGxheWVyKTsKCQkJCQkJCQkJCQkJCQlsYXllci5zaG93RXJyb3IoTGFuZy5nZXQo
J3NldHRpbmdzLnNlY3VyaXR5LmVycm9yLmFqYXhEZWZhdWx0RXJyb3InKSk7CgkJ
CQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQllbHNlIGlmIChyZXNwb25zZURhdGEg
JiYgcmVzcG9uc2VEYXRhLlJlZGlyZWN0KSB7CgkJCQkJCQkJCQkJCQkJbG9jYXRp
b24uaHJlZiA9IHJlc3BvbnNlRGF0YS5SZWRpcmVjdCArICc/cmVzdWx0PXBhc3N3
b3JkJzsKCQkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJCWVsc2UgewoJCQkJCQkJ
CQkJCQkJCWxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5wYXRobmFtZQoJCQkJCQkJ
CQkJCQkJCQkrIChsb2NhdGlvbi5zZWFyY2gubWF0Y2goL3Jlc3VsdD1cdypcYi8p
CgkJCQkJCQkJCQkJCQkJCT8gbG9jYXRpb24uc2VhcmNoLnJlcGxhY2UoL3Jlc3Vs
dD1cdypcYi8sJ3Jlc3VsdD1wYXNzd29yZCcpCgkJCQkJCQkJCQkJCQkJCTogKChs
b2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDAsMSkgPT0gIj8iKSA/ICImIiA6ICI/
IikgKyAncmVzdWx0PXBhc3N3b3JkJyApCgkJCQkJCQkJCQkJCQkJCSsgbG9jYXRp
b24uaGFzaDsKCQkJCQkJCQkJCQkJCQlsYXllci5oaWRlKCk7CgkJCQkJCQkJCQkJ
CQl9CgkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJCQkJ
CQlpZiAoICQuaXNGdW5jdGlvbihvcHRzLmVycm9yKSApCgkJCQkJCQkJCQkJCQkJ
b3B0cy5lcnJvcihsYXllcik7CgkJCQkJCQkJCQkJCQlsYXllci5zaG93RXJyb3Io
TGFuZy5nZXQoJ3NldHRpbmdzLnNlY3VyaXR5LmVycm9yLmFqYXhEZWZhdWx0RXJy
b3InKSk7CgkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJaWYgKGlucHV0KXsKCQkJ
CQkJCQkJCQkJCWlucHV0LnZhbCgnJyk7CgkJCQkJCQkJCQkJCQlyZWZyZXNoQ2Fw
dGNoYSggbGF5ZXIuJGRpdi5maW5kKCcjY2FwdGNoYV9mcmFtZScpICk7CgkJCQkJ
CQkJCQkJCX0KCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQl9KTsKCQkJCQkJCQkJfSk7
CgoJCQkJCQkJCQkvLzwhLS1JRiAwIC0tPmh0dHBzOi8vamlyYS5tYWlsLnJ1L2Jy
b3dzZS9NQUlMLTg1NjE8IS0tIC9JRi0tPgoJCQkJCQkJCQlmb3JtU3VibWl0UmFk
YXJMb2coInN1Ym1pdCIsICJjaGFuZ2VfcGFzcz0xIiwgb25SYWRhckRvbmUpOwoJ
CQkJCQkJCX0KCQkJCQkJCX0KCgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX07
CgoJCQkJCQlsYXllci5zaG93KCk7CgkJCQkJfSk7CgkJCQl9KTsKCQkJfSwKCgkJ
CXNldHRpbmdzX19zZWN1cml0eV9fYWRkaXRpb25hbEVtYWlsOiBmdW5jdGlvbiAo
bmFtZSwgb3B0cykgewoJCQkJJFIoJ3twbHVnaW5zfScgKyAnTGF5ZXInLCBmdW5j
dGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1bmN0aW9uIChsYXllcikg
ewoKCQkJCQkJZnVuY3Rpb24gcmVmcmVzaENhcHRjaGEoJGNhcHRjaGFGcmFtZSkg
ewoJCQkJCQkJaWYoJGNhcHRjaGFGcmFtZSkKCQkJCQkJCQkkY2FwdGNoYUZyYW1l
LmF0dHIoJ3NyYycsICBtYWlscnUuY2FwdGNoYVVSTDEgKyAnPycgKyBNYXRoLnJh
bmRvbSgpKTsKCQkJCQkJfQoKCQkJCQkJdmFyICRmb3JtID0gbGF5ZXIuJGRpdi5m
aW5kKCdmb3JtJyksCgkJCQkJCQllbWFpbCA9ICBsYXllci4kZGl2LmZpbmQoJ2lu
cHV0W25hbWU9IkVtYWlsIl0nKSwKCQkJCQkJCWlucHV0ID0gbGF5ZXIuJGRpdi5m
aW5kKCdpbnB1dFtuYW1lPSJzZWN1cml0eV9pbWFnZV9hbnN3ZXIiXScpOwoKCQkJ
CQkJZW1haWwudmFsKG9wdHMuZW1haWwpOwoJCQkJCQlpZihpbnB1dCkKCQkJCQkJ
CWlucHV0LnZhbCgnJyk7CgkJCQkJCWxheWVyLiRkaXYuZmluZCgnaW5wdXRbbmFt
ZT0ib2xkUHN3ZCJdJykudmFsKCcnKTsKCgkJCQkJCWxheWVyLiRkaXYuZmluZCgn
LmpzLXJlZnJlc2gtY2FwdGNoYScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7
CgkJCQkJCQlyZWZyZXNoQ2FwdGNoYShsYXllci4kZGl2LmZpbmQoJyNjYXB0Y2hh
X2ZyYW1lJykpOwoJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQl9KTsKCgkJCQkJ
CWxheWVyLmZ1bmMgPSBmdW5jdGlvbiAoc3RhdHVzKSB7CgkJCQkJCQlpZiAoIXN0
YXR1cykgcmV0dXJuIHRydWU7CgoJCQkJCQkJdmFyIHJlcXVpcmVkRmllbGRzID0g
WwoJCQkJCQkJCQl7CgkJCQkJCQkJCQluYW1lOiAncHN3ZCcsCgkJCQkJCQkJCQlw
cm9tcHQ6IExhbmcuZ2V0KCdzZXR0aW5ncy5zZWN1cml0eS5lcnJvci5yZXF1aXJl
ZCcpCgkJCQkJCQkJCX0KCQkJCQkJCQldLAoJCQkJCQkJCXBhdHRlcm5GaWVsZHMg
PSBbCgkJCQkJCQkJCXsKCQkJCQkJCQkJCW5hbWU6ICdlbWFpbCcsCgkJCQkJCQkJ
CQltYXhMZW46IDY0LAoJCQkJCQkJCQkJcGF0dGVybjogIl4oWy1hLXpBLVowLTku
XytdK0BbLV9hLXpBLVowLTldK1wuWy1fYS16QS1aMC05Ll0rKT8kIiwKCQkJCQkJ
CQkJCWVycm9yOiBMYW5nLmdldCgnc2V0dGluZ3Muc2VjdXJpdHkuZXJyb3IuaW52
YWxpZEVtYWlsJykKCQkJCQkJCQkJfSwKCgkJCQkJCQkJCXsKCQkJCQkJCQkJCW5h
bWU6ICdwc3dkJywKCQkJCQkJCQkJCW1heExlbjogNTAsCgkJCQkJCQkJCQllcnJv
cjogTGFuZy5nZXQoJ3NldHRpbmdzLnNlY3VyaXR5LmVycm9yLnBzd2QnKQoJCQkJ
CQkJCQl9CgkJCQkJCQkJXTsKCgkJCQkJCQlpZiAoaW5wdXQpIHsKCQkJCQkJCQly
ZXF1aXJlZEZpZWxkcy5wdXNoKHsKCQkJCQkJCQkJbmFtZTogJ3NlY3VyaXR5X2lt
YWdlX2Fuc3dlcicsCgkJCQkJCQkJCXByb21wdDogTGFuZy5nZXQoJ29wdGlvbnMu
Zm9sZGVycy5lcnJvci5yZXF1aXJlZCcpCgkJCQkJCQkJfSk7CgkJCQkJCQl9CgoK
CQkJCQkJCWlmIChDaGVja0Zvcm0oJGZvcm1bMF0sIHJlcXVpcmVkRmllbGRzLCBw
YXR0ZXJuRmllbGRzKSkKCQkJCQkJCXsKCQkJCQkJCQkkUigne21haWxydX0nICsg
J21haWxydS5BamF4JywgZnVuY3Rpb24gKCkgewoJCQkJCQkJCQltYWlscnUuQWph
eCh7CgkJCQkJCQkJCQl0eXBlOiAnUE9TVCcsCgkJCQkJCQkJCQl1cmw6ICdhamF4
X3NldHRpbmdzP2FqYXhfY2FsbD0xJmZ1bmNfbmFtZT1jaGFuZ2VfYWRkaXRpb25h
bF9lbWFpbCcsCgkJCQkJCQkJCQlkYXRhOiAgJGZvcm0uc2VyaWFsaXplKCksCgkJ
CQkJCQkJCQljb21wbGV0ZTogZnVuY3Rpb24gKGRhdGEpIHsKCQkJCQkJCQkJCQlp
ZiAoZGF0YS5pc09LKCkpIHsKCQkJCQkJCQkJCQkJdmFyIHJlc3BvbnNlRGF0YSA9
IGRhdGEuZ2V0RGF0YSgpOwoJCQkJCQkJCQkJCQlpZiAocmVzcG9uc2VEYXRhICYm
IHJlc3BvbnNlRGF0YS5FcnJvcil7CgkJCQkJCQkJCQkJCQlsYXllci5zaG93RXJy
b3IocmVzcG9uc2VEYXRhLkVycm9yKTsKCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJ
CQllbHNlIGlmIChyZXNwb25zZURhdGEgJiYgcmVzcG9uc2VEYXRhLkVycm9yID09
PSBudWxsKSB7CgkJCQkJCQkJCQkJCQkvLyBoYXMgZXJyb3IgYnV0IG5vIGVycm9y
IHRleHQKCQkJCQkJCQkJCQkJCWxheWVyLnNob3dFcnJvcihMYW5nLmdldCgnc2V0
dGluZ3Muc2VjdXJpdHkuZXJyb3IuYWpheERlZmF1bHRFcnJvcicpKTsKCQkJCQkJ
CQkJCQkJfQoJCQkJCQkJCQkJCQllbHNlIHsKCQkJCQkJCQkJCQkJCW9wdHMuZW1h
aWwgPSBlbWFpbC52YWwoKTsKCQkJCQkJCQkJCQkJCW9wdHMuc3VjY2VzcyhlbWFp
bC52YWwoKSk7CgkJCQkJCQkJCQkJCQlpZiAoaW5wdXQpewoJCQkJCQkJCQkJCQkJ
CWlucHV0LnZhbCgnJyk7CgkJCQkJCQkJCQkJCQkJcmVmcmVzaENhcHRjaGEoIGxh
eWVyLiRkaXYuZmluZCgnI2NhcHRjaGFfZnJhbWUnKSApOwoJCQkJCQkJCQkJCQkJ
fQoJCQkJCQkJCQkJCQkJbGF5ZXIuaGlkZSgpOwoJCQkJCQkJCQkJCQl9CgkJCQkJ
CQkJCQkJfQoJCQkJCQkJCQkJCWVsc2UgewoJCQkJCQkJCQkJCQlsYXllci5zaG93
RXJyb3IoTGFuZy5nZXQoJ3NldHRpbmdzLnNlY3VyaXR5LmVycm9yLmFqYXhEZWZh
dWx0RXJyb3InKSk7CgkJCQkJCQkJCQkJfQoKCQkJCQkJCQkJCQlpZiAoaW5wdXQp
ewoJCQkJCQkJCQkJCQlpbnB1dC52YWwoJycpOwoJCQkJCQkJCQkJCQlyZWZyZXNo
Q2FwdGNoYSggbGF5ZXIuJGRpdi5maW5kKCcjY2FwdGNoYV9mcmFtZScpICk7CgkJ
CQkJCQkJCQkJfQoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9KTsKCQkJCQkJCQl9KTsK
CQkJCQkJCX0KCgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX07CgoJCQkJCQls
YXllci5zaG93KCk7CgkJCQkJfSk7CgkJCQl9KTsKCQkJfSwKCgkJCXNldHRpbmdz
X19zZWN1cml0eV9fYWRkUGFzc3dvcmRRdWVzdGlvbjogZnVuY3Rpb24gKG5hbWUs
IG9wdHMpIHsKCQkJCSRSKCd7cGx1Z2luc30nICsgJ0xheWVyJywgZnVuY3Rpb24g
KCkgewoJCQkJCUxheWVyLmdldChuYW1lLCBmdW5jdGlvbiAobGF5ZXIpIHsKCgkJ
CQkJCWZ1bmN0aW9uIHJlZnJlc2hDYXB0Y2hhKCRjYXB0Y2hhRnJhbWUpIHsKCQkJ
CQkJCWlmKCRjYXB0Y2hhRnJhbWUpCgkJCQkJCQkJJGNhcHRjaGFGcmFtZS5hdHRy
KCdzcmMnLCAgbWFpbHJ1LmNhcHRjaGFVUkwxICsgJz8nICsgTWF0aC5yYW5kb20o
KSk7CgkJCQkJCX0KCgkJCQkJCWZ1bmN0aW9uIHVwZGF0ZU9wdHMoKSB7CgkJCQkJ
CQlvcHRzLnF1ZXN0aW9uID0gc2VsZWN0Lmh0bWwoKTsKCQkJCQkJCW9wdHMucXVl
c3Rpb25WYWwgPSBzZWxlY3QudmFsKCk7CgkJCQkJCQlvcHRzLmN1c3RvbVF1ZXN0
aW9uID0gY3VzdG9tUXVlc3Rpb24udmFsKCk7CgkJCQkJCQlvcHRzLmFuc3dlciA9
IGFuc3dlci52YWwoKTsKCQkJCQkJfQoKCQkJCQkJZnVuY3Rpb24gdXBkYXRlRm9y
bSgpIHsKCQkJCQkJCXNlbGVjdC5odG1sKG9wdHMucXVlc3Rpb24pLmNoYW5nZSgp
OwoJCQkJCQkJaWYgKG9wdHMucXVlc3Rpb25WYWwpCgkJCQkJCQkJc2VsZWN0LnZh
bChvcHRzLnF1ZXN0aW9uVmFsKTsKCQkJCQkJCXNlbGVjdC50cmlnZ2VySGFuZGxl
cignY2hhbmdlJyk7CgkJCQkJCQljdXN0b21RdWVzdGlvbi52YWwob3B0cy5jdXN0
b21RdWVzdGlvbik7CgkJCQkJCQlhbnN3ZXIudmFsKG9wdHMuYW5zd2VyKTsKCQkJ
CQkJfQoKCQkJCQkJZnVuY3Rpb24gZ2V0Q3VycmVudFF1ZXN0aW9uKCkgewoJCQkJ
CQkJaWYgKHNlbGVjdC52YWwoKSAhPSAnQ3VzdG9tJyAmJiBzZWxlY3QudmFsKCkg
IT0gJycpewoJCQkJCQkJCS8vIHByZXNldCBxdWVzdGlvbgoJCQkJCQkJCXJldHVy
biBzZWxlY3QudmFsKCk7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCS8vIGN1c3Rv
bSBxdWVzdGlvbgoJCQkJCQkJCXJldHVybiBjdXN0b21RdWVzdGlvbi52YWwoKTsK
CQkJCQkJCX0KCQkJCQkJfQoKCQkJCQkJZnVuY3Rpb24gY2hlY2tRdWVzdGlvbnMo
KSB7CgkJCQkJCQlsYXllci5oaWRlRXJyb3IoKTsKCQkJCQkJCWlmICggYW5zd2Vy
LnZhbCgpICYmIGFuc3dlci52YWwoKSAhPSAnJyAmJiBnZXRDdXJyZW50UXVlc3Rp
b24oKSA9PSAnJyApIHsKCQkJCQkJCQkvLyB3ZSBoYXZlIGFuIGFuc3dlciwgYnV0
IG5vIHF1ZXN0aW9uIHRvIGFuc3dlciB0by4KCQkJCQkJCQlsYXllci5zaG93RXJy
b3IoTGFuZy5nZXQoJ3NldHRpbmdzLnNlY3VyaXR5LmVycm9yLm5vUXVlc3Rpb24n
KSk7CgkJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQkJfQoJCQkJCQkJcmV0dXJu
IHRydWU7CgkJCQkJCX0KCgkJCQkJCXZhciAkZm9ybSA9IGxheWVyLiRkaXYuZmlu
ZCgnZm9ybScpLAoJCQkJCQkJc2VsZWN0ID0gbGF5ZXIuJGRpdi5maW5kKCcjcGFz
c3dvcmRRdWVzdGlvblNlbGVjdCcpLAoJCQkJCQkJY3VzdG9tUXVlc3Rpb24gPSBs
YXllci4kZGl2LmZpbmQoJyNwYXNzd29yZEN1c3RvbVF1ZXN0aW9uJyksCgkJCQkJ
CQlhbnN3ZXIgPSBsYXllci4kZGl2LmZpbmQoJyNwYXNzd29yZEFuc3dlcicpLAoJ
CQkJCQkJaW5wdXQgPSBsYXllci4kZGl2LmZpbmQoJ2lucHV0W25hbWU9InNlY3Vy
aXR5X2ltYWdlX2Fuc3dlciJdJyk7CgoJCQkJCQlsYXllci4kZGl2LmZpbmQoJ2lu
cHV0W25hbWU9Im9sZFBzd2QiXScpLnZhbCgnJyk7CgkJCQkJCWlmKGlucHV0KQoJ
CQkJCQkJaW5wdXQudmFsKCcnKTsKCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCcuZm9y
bV9fc2VsZWN0JykuZm9ybV9fc2VsZWN0KCk7CgkJCQkJCXVwZGF0ZUZvcm0oKTsK
CgkJCQkJCXNlbGVjdC5jaGFuZ2UoZnVuY3Rpb24oKSB7CgkJCQkJCQlpZiAoc2Vs
ZWN0LnZhbCgpICE9ICdDdXN0b20nKSB7CgkJCQkJCQkJY3VzdG9tUXVlc3Rpb24u
dmFsKCcnKTsKCQkJCQkJCQlpZiAoc2VsZWN0LnZhbCgpID09ICcnKSB7CgkJCQkJ
CQkJCS8vIGNsZWFyIGFuc3dlcgoJCQkJCQkJCQlhbnN3ZXIudmFsKCcnKTsKCQkJ
CQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0pOwoKCQkJCQkJY3VzdG9tUXVlc3Rpb24u
YmluZCgnaW5wdXQga2V5dXAnLCBmdW5jdGlvbigpIHsKCQkJCQkJCWlmIChjdXN0
b21RdWVzdGlvbi52YWwoKSAhPSAnJykgewoJCQkJCQkJCXNlbGVjdC52YWwoJ0N1
c3RvbScpOwoJCQkJCQkJCXNlbGVjdC50cmlnZ2VySGFuZGxlcignY2hhbmdlJyk7
CgkJCQkJCQl9CgkJCQkJCX0pOwoKCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCcuanMt
cmVmcmVzaC1jYXB0Y2hhJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbigpIHsKCQkJ
CQkJCXJlZnJlc2hDYXB0Y2hhKGxheWVyLiRkaXYuZmluZCgnI2NhcHRjaGFfZnJh
bWUnKSk7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0pOwoKCQkJCQkJbGF5
ZXIuZnVuYyA9IGZ1bmN0aW9uIChzdGF0dXMpIHsKCQkJCQkJCWlmICghc3RhdHVz
KSByZXR1cm4gdHJ1ZTsKCgkJCQkJCQl2YXIgcmVxdWlyZWRGaWVsZHMgPSBbCgkJ
CQkJCQkJCXsKCQkJCQkJCQkJCW5hbWU6ICdwc3dkJywKCQkJCQkJCQkJCXByb21w
dDogTGFuZy5nZXQoJ3NldHRpbmdzLnNlY3VyaXR5LmVycm9yLnJlcXVpcmVkJykK
CQkJCQkJCQkJfQoJCQkJCQkJCV0sCgkJCQkJCQkJcGF0dGVybkZpZWxkcyA9IFsK
CQkJCQkJCQkJewoJCQkJCQkJCQkJbmFtZTogJ1Bhc3N3b3JkX0N1c3RvbVF1ZXN0
aW9uJywKCQkJCQkJCQkJCW1heExlbjogNjQsCgkJCQkJCQkJCQllcnJvcjogTGFu
Zy5nZXQoJ3NldHRpbmdzLnNlY3VyaXR5LmVycm9yLmN1c3RvbVF1ZXN0aW9uJykK
CQkJCQkJCQkJfSwKCgkJCQkJCQkJCXsKCQkJCQkJCQkJCW5hbWU6ICdQYXNzd29y
ZF9BbnN3ZXInLAoJCQkJCQkJCQkJbWF4TGVuOiA2NCwKCQkJCQkJCQkJCWVycm9y
OiBMYW5nLmdldCgnc2V0dGluZ3Muc2VjdXJpdHkuZXJyb3IucGFzc3dvcmRBbnN3
ZXInKQoJCQkJCQkJCQl9CgkJCQkJCQkJXTsKCgkJCQkJCQlpZiAoaW5wdXQpIHsK
CQkJCQkJCQlyZXF1aXJlZEZpZWxkcy5wdXNoKHsKCQkJCQkJCQkJbmFtZTogJ3Nl
Y3VyaXR5X2ltYWdlX2Fuc3dlcicsCgkJCQkJCQkJCXByb21wdDogTGFuZy5nZXQo
J29wdGlvbnMuZm9sZGVycy5lcnJvci5yZXF1aXJlZCcpCgkJCQkJCQkJfSk7CgkJ
CQkJCQl9CgoJCQkJCQkJaWYgKENoZWNrRm9ybSgkZm9ybVswXSwgcmVxdWlyZWRG
aWVsZHMsIHBhdHRlcm5GaWVsZHMpICYmIGNoZWNrUXVlc3Rpb25zKCkpIHsKCgkJ
CQkJCQkJaWYoZ2V0Q3VycmVudFF1ZXN0aW9uKCkgPT0gY3VzdG9tUXVlc3Rpb24u
dmFsKCkpIHsKCQkJCQkJCQkJc2VsZWN0LnZhbCgnQ3VzdG9tJyk7CgkJCQkJCQkJ
fQoKCQkJCQkJCQl2YXIgZGF0YSA9ICRmb3JtLnRvT2JqZWN0KCk7CgoJCQkJCQkJ
CWlmIChtYWlscnUuSlNUcmFwQ2hhbmdlUGFzc3dvcmRRdWVzdGlvbikgewoKCQkJ
CQkJCQkJaWYgKG1haWxydS50b2tlbnNbJ2FqYXhfc2V0dGluZ3MnXSkgewoJCQkJ
CQkJCQkJZGF0YVsnZm9ybV9zaWduJ10gPSBtYWlscnUudG9rZW5zWydhamF4X3Nl
dHRpbmdzJ11bJ2Zvcm1fc2lnbiddOwoJCQkJCQkJCQkJZGF0YVsnZm9ybV90b2tl
biddID0gbWFpbHJ1LnRva2Vuc1snYWpheF9zZXR0aW5ncyddWydmb3JtX3Rva2Vu
J107CgkJCQkJCQkJCX0KCgkJCQkJCQkJCW1haWxydS5KU1RyYXBDaGFuZ2VQYXNz
d29yZFF1ZXN0aW9uKGRhdGEpOwoJCQkJCQkJCX0KCgkJCQkJCQkJLy88IS0tSUYg
MCAtLT4idmFyIG9uUmFkYXJEb25lID0gJFIuYmluZChudWxsLCAiIGluc3RlYWQg
b2YgIiRSKCIgLSBodHRwczovL2ppcmEubWFpbC5ydS9icm93c2UvTUFJTC04NTYx
PCEtLSAvSUYtLT4KCQkJCQkJCQl2YXIgb25SYWRhckRvbmUgPSAkUi5iaW5kKG51
bGwsICd7bWFpbHJ1fScgKyAnbWFpbHJ1LkFqYXgnLCBmdW5jdGlvbiAoKSB7CgkJ
CQkJCQkJCW1haWxydS5BamF4KHsKCQkJCQkJCQkJCXR5cGU6ICdQT1NUJywKCQkJ
CQkJCQkJCXVybDogJ2FqYXhfc2V0dGluZ3M/YWpheF9jYWxsPTEmZnVuY19uYW1l
PWNoYW5nZV9wYXNzd29yZF9xdWVzdGlvbicsCgkJCQkJCQkJCQlkYXRhOiBkYXRh
LAoJCQkJCQkJCQkJc2F2ZVRva2VuczogISFtYWlscnUuSlNUcmFwQ2hhbmdlUGFz
c3dvcmRRdWVzdGlvbiwKCQkJCQkJCQkJCWNvbXBsZXRlOiBmdW5jdGlvbiAoZGF0
YSkgewoJCQkJCQkJCQkJCWlmIChkYXRhLmlzT0soKSkgewoJCQkJCQkJCQkJCQl2
YXIgcmVzcG9uc2VEYXRhID0gZGF0YS5nZXREYXRhKCk7CgkJCQkJCQkJCQkJCWlm
IChyZXNwb25zZURhdGEgJiYgcmVzcG9uc2VEYXRhLkVycm9yKXsKCQkJCQkJCQkJ
CQkJCWxheWVyLnNob3dFcnJvcihyZXNwb25zZURhdGEuRXJyb3IpOwoJCQkJCQkJ
CQkJCQl9CgkJCQkJCQkJCQkJCWVsc2UgaWYgKHJlc3BvbnNlRGF0YSAmJiByZXNw
b25zZURhdGEuRXJyb3IgPT09IG51bGwpIHsKCQkJCQkJCQkJCQkJCS8vIGhhcyBl
cnJvciBidXQgbm8gZXJyb3IgdGV4dAoJCQkJCQkJCQkJCQkJbGF5ZXIuc2hvd0Vy
cm9yKExhbmcuZ2V0KCdzZXR0aW5ncy5zZWN1cml0eS5lcnJvci5hamF4RGVmYXVs
dEVycm9yJykpOwoJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCWVsc2UgewoJCQkJ
CQkJCQkJCQkJdXBkYXRlT3B0cygpOwoJCQkJCQkJCQkJCQkJb3B0cy5zdWNjZXNz
KGdldEN1cnJlbnRRdWVzdGlvbigpKTsKCQkJCQkJCQkJCQkJCWlmIChpbnB1dCl7
CgkJCQkJCQkJCQkJCQkJaW5wdXQudmFsKCcnKTsKCQkJCQkJCQkJCQkJCQlyZWZy
ZXNoQ2FwdGNoYSggbGF5ZXIuJGRpdi5maW5kKCcjY2FwdGNoYV9mcmFtZScpICk7
CgkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQlsYXllci5oaWRlKCk7CgkJCQkJ
CQkJCQkJCX0KCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJ
CQkJCWxheWVyLnNob3dFcnJvcihMYW5nLmdldCgnc2V0dGluZ3Muc2VjdXJpdHku
ZXJyb3IuYWpheERlZmF1bHRFcnJvcicpKTsKCQkJCQkJCQkJCQl9CgoJCQkJCQkJ
CQkJCWlmIChpbnB1dCl7CgkJCQkJCQkJCQkJCWlucHV0LnZhbCgnJyk7CgkJCQkJ
CQkJCQkJCXJlZnJlc2hDYXB0Y2hhKCBsYXllci4kZGl2LmZpbmQoJyNjYXB0Y2hh
X2ZyYW1lJykgKTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0p
OwoJCQkJCQkJCX0pOwoKCQkJCQkJCQkvLzwhLS1JRiAwLS0+aHR0cHM6Ly9qaXJh
Lm1haWwucnUvYnJvd3NlL01BSUwtODU2MTwhLS0gL0lGLS0+CgkJCQkJCQkJZm9y
bVN1Ym1pdFJhZGFyTG9nKCJzdWJtaXQiLCAiY2hhbmdlX3NlY3JldD0xIiwgb25S
YWRhckRvbmUpOwoJCQkJCQkJfQoKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJ
fTsKCgkJCQkJCWxheWVyLnNob3coKTsKCQkJCQl9KTsKCQkJCX0pOwoJCQl9LAoK
CQkJc2V0dGluZ3NfX3NlY3VyaXR5X19hY2NhOiBmdW5jdGlvbiAobmFtZSwgb3B0
cykgewoJCQkJJFIoJ3twbHVnaW5zfScgKyAnTGF5ZXInLCBmdW5jdGlvbiAoKSB7
CgkJCQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1bmN0aW9uIChsYXllcikgewoKCQkJCQkJ
ZnVuY3Rpb24gcmVmcmVzaENhcHRjaGEoJGNhcHRjaGFGcmFtZSkgewoJCQkJCQkJ
aWYoJGNhcHRjaGFGcmFtZSkKCQkJCQkJCQkkY2FwdGNoYUZyYW1lLmF0dHIoJ3Ny
YycsICBtYWlscnUuY2FwdGNoYVVSTDEgKyAnPycgKyBNYXRoLnJhbmRvbSgpKTsK
CQkJCQkJfQoKCQkJCQkJdmFyICRmb3JtID0gbGF5ZXIuJGRpdi5maW5kKCdmb3Jt
JyksCgkJCQkJCQlwYXNzd29yZCA9ICBsYXllci4kZGl2LmZpbmQoJ2lucHV0W25h
bWU9InBzd2QiXScpLAoJCQkJCQkJaW5wdXQgPSBsYXllci4kZGl2LmZpbmQoJ2lu
cHV0W25hbWU9InNlY3VyaXR5X2ltYWdlX2Fuc3dlciJdJyk7CgoJCQkJCQlpZihp
bnB1dCkKCQkJCQkJCWlucHV0LnZhbCgnJyk7CgkJCQkJCXBhc3N3b3JkLnZhbCgn
Jyk7CgoJCQkJCQkvLyBzaG93IHRleHQKCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCcu
anMtaXMtJysob3B0cy5pc09uPyAnb24nIDogJ29mZicpKS5zaG93KCk7CgkJCQkJ
CWxheWVyLiRkaXYuZmluZCgnLmpzLWlzLScrKG9wdHMuaXNPbj8gJ29mZicgOiAn
b24nKSkuaGlkZSgpOwoJCQkJCQlpZiAob3B0cy5lcnJvcikgewoJCQkJCQkJbGF5
ZXIuJGRpdi5maW5kKCcuanMtZXJyb3InKS5odG1sKG9wdHMuZXJyb3IpLnNob3co
KTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWxheWVyLiRkaXYuZmluZCgnLmpzLWVy
cm9yJykuaGlkZSgpOwoJCQkJCQl9CgoJCQkJCQlsYXllci4kZGl2LmZpbmQoJy5q
cy1yZWZyZXNoLWNhcHRjaGEnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCkgewoJ
CQkJCQkJcmVmcmVzaENhcHRjaGEobGF5ZXIuJGRpdi5maW5kKCcjY2FwdGNoYV9m
cmFtZScpKTsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfSk7CgoJCQkJCQls
YXllci5mdW5jID0gZnVuY3Rpb24gKHN0YXR1cykgewoJCQkJCQkJaWYgKCFzdGF0
dXMpIHJldHVybiB0cnVlOwoKCQkJCQkJCXZhciByZXF1aXJlZEZpZWxkcyA9IFsK
CQkJCQkJCQkJewoJCQkJCQkJCQkJbmFtZTogJ3Bzd2QnLAoJCQkJCQkJCQkJcHJv
bXB0OiBMYW5nLmdldCgnc2V0dGluZ3Muc2VjdXJpdHkuZXJyb3IucmVxdWlyZWQn
KQoJCQkJCQkJCQl9CgkJCQkJCQkJXSwKCQkJCQkJCQlwYXR0ZXJuRmllbGRzID0g
WwoJCQkJCQkJCQl7CgkJCQkJCQkJCQluYW1lOiAncHN3ZCcsCgkJCQkJCQkJCQlt
YXhMZW46IDUwLAoJCQkJCQkJCQkJZXJyb3I6IExhbmcuZ2V0KCdzZXR0aW5ncy5z
ZWN1cml0eS5lcnJvci5wc3dkJykKCQkJCQkJCQkJfQoJCQkJCQkJCV07CgoJCQkJ
CQkJaWYgKGlucHV0KSB7CgkJCQkJCQkJcmVxdWlyZWRGaWVsZHMucHVzaCh7CgkJ
CQkJCQkJCW5hbWU6ICdzZWN1cml0eV9pbWFnZV9hbnN3ZXInLAoJCQkJCQkJCQlw
cm9tcHQ6IExhbmcuZ2V0KCdvcHRpb25zLmZvbGRlcnMuZXJyb3IucmVxdWlyZWQn
KQoJCQkJCQkJCX0pOwoJCQkJCQkJfQoKCgkJCQkJCQlpZiAoQ2hlY2tGb3JtKCRm
b3JtWzBdLCByZXF1aXJlZEZpZWxkcywgcGF0dGVybkZpZWxkcykpCgkJCQkJCQl7
CgkJCQkJCQkJb3B0cy5zdWNjZXNzKGxheWVyKTsKCQkJCQkJCX0KCgkJCQkJCQly
ZXR1cm4gZmFsc2U7CgkJCQkJCX07CgoJCQkJCQlsYXllci5zaG93KCk7CgkJCQkJ
fSk7CgkJCQl9KTsKCQkJfSwKCgkJCWNvbmZpcm1TcGFtOiBmdW5jdGlvbihuYW1l
LCBvcHRzKSB7CgkJCQkkUigne3BsdWdpbnN9JyArICdMYXllcicsIGZ1bmN0aW9u
ICgpIHsKCQkJCQlMYXllci5nZXQobmFtZSwgZnVuY3Rpb24gKGxheWVyKSB7CgkJ
CQkJCXZhciAkdXNlcnMgPSBsYXllci4kZGl2LmZpbmQoJy5qcy11c2VycycpLAoJ
CQkJCQkJJG1vcmV1c2VycyA9IGxheWVyLiRkaXYuZmluZCgnLmpzLW1vcmV1c2Vy
cycpOwoJCQkJCQl2YXIgdXNlcnNWaXNpYmxlID0gMTA7CgoJCQkJCQlpZihvcHRz
LnVzZXJzICYmIG9wdHMudXNlcnMubGVuZ3RoID4gMCkgewoJCQkJCQkJaWYob3B0
cy51c2Vycy5sZW5ndGggPT0gMSkgewoJCQkJCQkJCSR1c2Vycy5odG1sKCcmbmJz
cDsnK29wdHMudXNlcnMuam9pbignLCAnKSk7CgkJCQkJCQl9CgkJCQkJCQllbHNl
IGlmIChvcHRzLnVzZXJzLmxlbmd0aCA8PSB1c2Vyc1Zpc2libGUpIHsKCQkJCQkJ
CQkkdXNlcnMuaHRtbCgnOjxicj4nK29wdHMudXNlcnMuam9pbignPGJyPicpKTsK
CQkJCQkJCX0KCQkJCQkJCWVsc2UgeyAvLyB0b28gbWFueSB1c2Vycywgc2hvdyBv
bmx5IGZpcnN0IDEwCgkJCQkJCQkJdmFyIG51bUhpZGRlbiA9IG9wdHMudXNlcnMu
bGVuZ3RoIC0gdXNlcnNWaXNpYmxlOwoJCQkJCQkJCSR1c2Vycy5odG1sKCc6PGJy
Picrb3B0cy51c2Vycy5zbGljZSgwLHVzZXJzVmlzaWJsZSkuam9pbignPGJyPicp
KTsKCQkJCQkJCQkkKCcuanMtbnVtJywgJG1vcmV1c2VycykudGV4dChudW1IaWRk
ZW4pOwoJCQkJCQkJCSQoJy5qcy1zZW5kZXJzJywgJG1vcmV1c2VycykudGV4dCgg
YWpzLnBsdXJhbChudW1IaWRkZW4sIExhbmcuZ2V0KCdjaGVja3NwYW0uc2VuZGVy
cy5wbHVyYWwnKSwgJycpICk7CgkJCQkJCQkJJG1vcmV1c2Vycy5zaG93KCk7CgkJ
CQkJCQl9CgkJCQkJCX0KCgkJCQkJCWxheWVyLmZ1bmMgPSBmdW5jdGlvbiAoc3Rh
dHVzKSB7CgkJCQkJCQlpZiAoJC5pc0Z1bmN0aW9uKG9wdHMuc3VjY2VzcykpCgkJ
CQkJCQkJb3B0cy5zdWNjZXNzKHN0YXR1cyk7CgkJCQkJCQlsYXllci5oaWRlKCk7
CgoJCQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJCX07CgoJCQkJCQlsYXllci5zaG93
KCk7CgkJCQkJfSk7CgkJCQl9KTsKCQkJfSwKCgkJCWxpc3RVbnN1YnNjcmliZTog
ZnVuY3Rpb24obmFtZSwgb3B0aW9ucykgewoJCQkJJFIoJ3twbHVnaW5zfScgKyAn
TGF5ZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0KG5hbWUsIGZ1bmN0
aW9uIChsYXllcikgewoJCQkJCQl2YXIgZnJvbSA9IGFqcy5IdG1sLnVuZXNjYXBl
KG9wdGlvbnMuZnJvbSk7CgoJCQkJCQlsYXllci4kZGl2LmZpbmQoJy5qcy1mcm9t
JykKCQkJCQkJCS50ZXh0KGZyb20gfHwgJycpCgkJCQkJCTsKCgkJCQkJCWxheWVy
LmZ1bmMgPSBmdW5jdGlvbiAoc3RhdHVzKSB7CgkJCQkJCQlpZiAoJC5pc0Z1bmN0
aW9uKG9wdGlvbnMuc3VjY2VzcykpCgkJCQkJCQkJb3B0aW9ucy5zdWNjZXNzKHN0
YXR1cyk7CgoJCQkJCQkJbGF5ZXIuaGlkZSgpOwoKCQkJCQkJCXJldHVybiB0cnVl
OwoJCQkJCQl9OwoKCQkJCQkJbGF5ZXIuc2hvdygpOwoJCQkJCX0pOwoJCQkJfSk7
CgkJCX0sCgoJCQljb2xsZWN0b3JfZWRpdDogZnVuY3Rpb24obmFtZSwgb3B0aW9u
cykgewoJCQkJJFIoJ3twbHVnaW5zfScgKyAnTGF5ZXInLCBmdW5jdGlvbigpIHsK
CQkJCQlMYXllci5nZXQobmFtZSwgZnVuY3Rpb24obGF5ZXIpIHsKCQkJCQkJdmFy
IGxhbmcgPSBMYW5nLmdldCgnQ29sbGVjdG9yJykuZWRpdDsKCgkJCQkJCXZhciB0
b2dnbGUgPSB7CgkJCQkJCQlub3RpZnk6IGZ1bmN0aW9uKG5hbWUpIHsKCQkJCQkJ
CQlyZXR1cm4gaW5mb1shbmFtZSA/ICdoaWRlJzogJ3Nob3cnXSgpCgkJCQkJCQkJ
CS5maW5kKCcuanMtY29sZWN0b3JfX2Vycm9yLWluZm8nKS50ZXh0KGxhbmcuZXJy
b3JbbmFtZV0pOwoJCQkJCQkJfSwKCgkJCQkJCQlzdGF0ZTogZnVuY3Rpb24oKSB7
CgkJCQkJCQkJdGhpcy50b2dnbGVDbGFzcygnZm9ybV9fYnV0dG9uX2Rpc2FibGVk
Jyk7CgoJCQkJCQkJCWxheWVyLiRkaXYuZmluZCgnLnBvcHVwLXNldHRpbmdzX19j
b250cm9sc19sb2FkaW5nJykKCQkJCQkJCQkJLnRvZ2dsZUNsYXNzKCdkbicpOwoJ
CQkJCQkJfSwKCgkJCQkJCQl2aWV3OiBmdW5jdGlvbih0ZXh0KSB7CgkJCQkJCQkJ
bGF5ZXIuJGRpdi5maW5kKCcuanMtY29sbGVjdG9yX19mb3JtX2VkaXRfX2ludGVy
bmFsLWVycm9yJykKCQkJCQkJCQkJLnJlbW92ZUNsYXNzKCdkbicpCgkJCQkJCQkJ
CS5maW5kKCcuanMtY29sbGVjdG9yX19mb3JtX2VkaXRfX2ludGVybmFsLWluZm8n
KS5odG1sKHRleHQpOwoKCQkJCQkJCQlsYXllci4kZGl2LmZpbmQoJy5qcy1jb2xs
ZWN0b3JfX2Zvcm1fZWRpdF9fYXV0aC1lcnJvcicpLmFkZENsYXNzKCdkbicpOwoJ
CQkJCQkJfSwKCgkJCQkJCQlpY29uOiBmdW5jdGlvbihzdGF0ZSkgewoJCQkJCQkJ
CWxheWVyLiRkaXYuZmluZCgnLmljb24nKQoJCQkJCQkJCQkudG9nZ2xlQ2xhc3Mo
J2ljb25fdGlwLW9rJywgc3RhdGUgPT0gJ29rJyk7CgkJCQkJCQl9LAoKCQkJCQkJ
CXRpdGxlOiBmdW5jdGlvbih0aXRsZSkgewoJCQkJCQkJCWxheWVyLiRkaXYuZmlu
ZCgnLmpzLWNvbGVjdG9yX19lcnJvci10aXRsZScpLnRleHQodGl0bGUpOwoJCQkJ
CQkJfSwKCgkJCQkJCQllbWFpbDogZnVuY3Rpb24oZW1haWwpIHsKCQkJCQkJCQls
YXllci4kZGl2LmZpbmQoJy5qcy1jb2xsZWN0b3JfX2NoYW5nZS1lbWFpbCcpLnZh
bChlbWFpbCk7CgkJCQkJCQl9CgkJCQkJCX07CgoJCQkJCQkvLyBTaG93IGxheWVy
CgkJCQkJCWxheWVyLnNob3coKTsKCQkJCQkJQ291bnRlci5kKDE2NzI1OTIpOwoK
CQkJCQkJdmFyIGNvbGxlY3RvciA9IG1haWxydS5nZXRDb2xsZWN0b3JJbmZvQnlJ
ZChvcHRpb25zLmlkKTsKCgkJCQkJCS8vIFNldCBsYXllciB0aXRsZQoJCQkJCQl0
b2dnbGUudGl0bGUobGFuZy50aXRsZVtjb2xsZWN0b3IuZXJyb3JdKTsKCQkJCQkJ
dG9nZ2xlLmVtYWlsKGNvbGxlY3Rvci5lbWFpbCk7CgkJCQkJCXRvZ2dsZS5pY29u
KCdlcnJvcicpOwoKCQkJCQkJaWYgKGNvbGxlY3Rvci5lcnJvciA9PSAnaW50ZXJu
YWwnKSB7CgkJCQkJCQl0b2dnbGUudmlldyhsYW5nLmluZm8uZmFpbCk7CgoJCQkJ
CQkJbGF5ZXIuJGRpdi5maW5kKCcuanMtY29sbGVjdG9yX19wb3B1cC1zdGF0dXMn
KQoJCQkJCQkJCS5hZGRDbGFzcygncG9wdXAtc2V0dGluZ3NfX2NvbGxlY3Rvcl9i
b3hfZXJyb3InKTsKCQkJCQkJfQoKCQkJCQkJbGF5ZXIuJGRpdi5maW5kKCdmb3Jt
JykudW5iaW5kKCdzdWJtaXQnKTsKCgkJCQkJCXZhciBwYXNzd29yZCA9IGxheWVy
LiRkaXYuZmluZCgnLmpzLWNvbGxlY3Rvcl9fY2hhbmdlLXBhc3N3b3JkJyk7CgkJ
CQkJCXZhciBpbmZvICAgICA9IGxheWVyLiRkaXYuZmluZCgnLmZvcm1fX3RvcC1t
ZXNzYWdlX2Vycm9yJyk7CgoJCQkJCQkvLyBDbG9zZSBsYXllcgoJCQkJCQlsYXll
ci4kZGl2LmRlbGVnYXRlKCcuZm9ybV9fYnV0dG9uX3Jlc2V0LCAuanMtY29sbGVj
dG9yX19lZGl0LWNsb3NlJywKCQkJCQkJCSdjbGljaycsIGZ1bmN0aW9uKGV2ZW50
KSB7CgkJCQkJCQkJbGF5ZXIuaGlkZSgpOwoJCQkJCQkJCWV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CgkJCQkJCQl9CgkJCQkJCSk7CgoJCQkJCQkvLyBTdWJtaXQKCQkJ
CQkJbGF5ZXIuJGRpdi5kZWxlZ2F0ZSgnLmpzLWNvbGxlY3Rvcl9fZWRpdC1zdWJt
aXQnLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkKCQkJCQkJewoJCQkJCQkJZXZl
bnQucHJldmVudERlZmF1bHQoKTsKCgkJCQkJCQl2YXIgJHRoaXMgPSAkKHRoaXMp
OwoKCQkJCQkJCWlmICghcGFzc3dvcmQudmFsKCkudHJpbSgpKSB7CgkJCQkJCQkJ
cmV0dXJuIHRvZ2dsZS5ub3RpZnkoJ3Bhc3N3b3JkJyk7CgkJCQkJCQl9CgoJCQkJ
CQkJaWYgKCR0aGlzLmhhc0NsYXNzKCdmb3JtX19idXR0b25fZGlzYWJsZWQnKSkK
CQkJCQkJCQlyZXR1cm4gMDsKCgkJCQkJCQl0b2dnbGUuc3RhdGUuY2FsbCgkdGhp
cyk7CgoJCQkJCQkJbWFpbHJ1LkFQSS5wb3N0KCdjb2xsZWN0b3JzL2VkaXQnLCB7
CgkJCQkJCQkJY29sbGVjdCA6IFsKCQkJCQkJCQkJewoJCQkJCQkJCQkJaWQ6ICAg
ICAgIGNvbGxlY3Rvci5pZCwKCQkJCQkJCQkJCWVtYWlsOiAgICBjb2xsZWN0b3Iu
ZW1haWwsCgkJCQkJCQkJCQlwYXNzd29yZDogcGFzc3dvcmQudmFsKCksCgkJCQkJ
CQkJCQl0eXBlOiAgICAgY29sbGVjdG9yLnR5cGUKCQkJCQkJCQkJfQoJCQkJCQkJ
CV0KCQkJCQkJCX0sCgkJCQkJCQlmdW5jdGlvbihyZXNwb25zZSkgewoJCQkJCQkJ
CXRvZ2dsZS5zdGF0ZS5jYWxsKCR0aGlzKTsKCgkJCQkJCQkJaWYgKHJlc3BvbnNl
LmlzT2soKSkKCQkJCQkJCQl7CgkJCQkJCQkJCS8vIFVwZGF0ZSBjb2xsZWN0b3Jz
IGFuZCBzdGF0CgkJCQkJCQkJCW1haWxydS5VcGRhdGVyLmN0cyA9IHt9OwoJCQkJ
CQkJCQltYWlscnUuVXBkYXRlci5yZWxvYWQodHJ1ZSwgewoJCQkJCQkJCQkJY29t
cGxldGU6IGZ1bmN0aW9uKCkgewoJCQkJCQkJCQkJCWlmIChvcHRpb25zLmNvbXBs
ZXRlKQoJCQkJCQkJCQkJCQlvcHRpb25zLmNvbXBsZXRlKGxheWVyLCByZXNwb25z
ZSk7CgoJCQkJCQkJCQkJCUNvdW50ZXIuc2IoMTY3MjU5Mik7CgkJCQkJCQkJCQl9
CgkJCQkJCQkJCX0pOwoKCQkJCQkJCQkJaWYgKG9wdGlvbnMubm90aWZ5KSB7CgkJ
CQkJCQkJCQl0b2dnbGUuaWNvbignb2snKTsKCQkJCQkJCQkJCXRvZ2dsZS52aWV3
KGxhbmcuaW5mby5jb21wbGV0ZSk7CgkJCQkJCQkJCQl0b2dnbGUudGl0bGUobGFu
Zy50aXRsZS5jb21wbGV0ZSk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZSB7CgkJ
CQkJCQkJCQlsYXllci5oaWRlKCk7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJ
CQkJZWxzZSB7CgkJCQkJCQkJCXZhciBkYXRhID0gcmVzcG9uc2UuZ2V0RGF0YSgp
OwoJCQkJCQkJCQl2YXIgZXJyb3IgPSAnc3lzdGVtJzsKCgkJCQkJCQkJCWlmICgh
ZGF0YSkKCQkJCQkJCQkJCXJldHVybiB0b2dnbGUubm90aWZ5KGVycm9yKTsKCgkJ
CQkJCQkJCU9iamVjdC5mb3JFYWNoKGRhdGEsIGZ1bmN0aW9uKHZhbHVlLCBrZXkp
IHsKCQkJCQkJCQkJCWlmICh2YWx1ZS5lcnJvciA9PSAnaW52YWxpZCcpIHsKCQkJ
CQkJCQkJCQllcnJvciA9IGtleTsKCQkJCQkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJ
CQkJCQkJCQl9CgkJCQkJCQkJCX0pOwoKCQkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJ
CXN3aXRjaChlcnJvci5zcGxpdCgnLicpWzFdKSB7CgkJCQkJCQkJCQkJY2FzZSAn
ZW1haWwnIDoKCQkJCQkJCQkJCQljYXNlICdwYXNzd29yZCcgOgoJCQkJCQkJCQkJ
CQllcnJvciA9ICdhdXRoJzsKCQkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQkJ
ZGVmYXVsdDoKCQkJCQkJCQkJCQkJZXJyb3IgPSAnc3lzdGVtJzsKCQkJCQkJCQkJ
CQlicmVhazsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfQoJCQkJCQkJCQljYXRjaCAo
ZXJyb3IpIHt9OwoKCQkJCQkJCQkJcmV0dXJuIHRvZ2dsZS5ub3RpZnkoZXJyb3Ip
OwoJCQkJCQkJCX0KCQkJCQkJCX0pOwoKCQkJCQkJCXRvZ2dsZS5ub3RpZnkoKTsK
CQkJCQkJfSk7CgkJCQkJfSwKCQkJCQl7CgkJCQkJCWlzUmVmcmVzaDogMSwKCQkJ
CQkJcGFyYW1zOiB7CgkJCQkJCQljb2xsZWN0b3JQb3B1cDogMSwKCQkJCQkJCWNo
YW5nZTogb3B0aW9ucy5jaGFuZ2UKCQkJCQkJfQoJCQkJCX0pOwoJCQkJfSk7CgkJ
CX0sCgoJCQkvLyBNQUlMLTE0Mzc4LCBNQUlMLTE2MDQ0CgkJCWV4dGVybmFsX2Fj
Y291bnRfc2FsdXRlOiBmdW5jdGlvbiAobmFtZSkgewoJCQkJdmFyIGNvdW50ZXIg
PSB7CgkJCQkJJ3lhbmRleC5ydSc6ICAgMTcwMjcyMCwKCQkJCQknZ21haWwuY29t
JzogICAxNzAzMjk5LAoJCQkJCSdpbmJveC5ydSc6ICAgIDE3MDMzMjcsCgkJCQkJ
J2xpc3QucnUnOiAgICAgMTcwMzMyOCwKCQkJCQknYmsucnUnOiAgICAgICAxNzAz
MzcwLAoJCQkJCSdyYW1ibGVyLnJ1JzogIDE3MDMzNzQsCgkJCQkJJ3FpcC5ydSc6
ICAgICAgMTcwMzM3NiwKCQkJCQkneWFob28uY29tJzogICAxNzAzMzgwLAoJCQkJ
CSdob3RtYWlsLmNvbSc6IDE3MDMzODEKCQkJCX1bbWFpbHJ1LnVzZXJkb21haW5d
OwoKCQkJCSRSKCd7cGx1Z2luc30nICsgJ0xheWVyJywgZnVuY3Rpb24gKCkgewoJ
CQkJCUxheWVyLmdldChuYW1lLCBmdW5jdGlvbihsYXllcikgewoJCQkJCQlsYXll
ci4kZGl2LmRlbGVnYXRlKCcuanMtZXh0ZXJuYWxfYWNjb3VudF9fbGF5ZXJfc3Vi
bWl0JywgJ2NsaWNrJywgZnVuY3Rpb24oKSB7CgkJCQkJCQkkLnBvc3QoJy9jZ2kt
YmluL2FqYXhfaGVscGVyJywgewoJCQkJCQkJCSd4LWVtYWlsJzogbWFpbHJ1LnVz
ZXJlbWFpbCwKCQkJCQkJCQlmdW5jX25hbWU6ICd1c2VyX2xpY2Vuc2VfYWNjZXB0
ZWQnCgkJCQkJCQl9LAoJCQkJCQkJZnVuY3Rpb24oKSB7CgkJCQkJCQkJbGF5ZXIu
ZW5hYmxlSGlkZSgpLmhpZGUoewoJCQkJCQkJCQljb21wbGV0ZTogZnVuY3Rpb24o
KSB7CgkJCQkJCQkJCQlpZiAoY291bnRlcikgewoJCQkJCQkJCQkJCUNvdW50ZXIu
c2IoY291bnRlcik7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQlDb3VudGVyLnNiKDE3
MDMzMTUpOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSk7CgkJCQkJCQl9KTsKCQkJCQkJ
fSk7CgoJCQkJCQlsYXllci5kaXNhYmxlSGlkZSgpLnNob3coewoJCQkJCQkJY29t
cGxldGU6IGZ1bmN0aW9uKCkgewoJCQkJCQkJCWlmIChjb3VudGVyKSB7CgkJCQkJ
CQkJCUNvdW50ZXIuZChjb3VudGVyKTsKCQkJCQkJCQl9CgkJCQkJCQkJQ291bnRl
ci5kKDE3MDMzMTUpOwoJCQkJCQkJfQoJCQkJCQl9KTsKCQkJCQl9LAoJCQkJCXsK
CQkJCQkJdHlwZTogJ2V4dGVybmFsJwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0sCgoJ
CQljb2xsZWN0b3JfYWRkOiBmdW5jdGlvbiAobmFtZSkgewoJCQkJJFIoJ3twbHVn
aW5zfScgKyAnTGF5ZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJTGF5ZXIuZ2V0KG5h
bWUsIGZ1bmN0aW9uKGxheWVyKSB7CgkJCQkJCXZhciBfJCA9IGZ1bmN0aW9uKG5h
bWUpIHsKCQkJCQkJCXJldHVybiAkKCcuanMtcG9wdXBfX2NvbGxlY3Rvcl9fYWRk
XycgKyBuYW1lLCBsYXllci4kZGl2KTsKCQkJCQkJfTsKCgkJCQkJCXZhciBjb2xs
ZWN0b3IgPSB7CgkJCQkJCQlhZGQ6IGZ1bmN0aW9uKGRhdGEsIGNhbGxiYWNrKSB7
CgkJCQkJCQkJbWFpbHJ1LkFQSS5wb3N0KCdjb2xsZWN0b3JzL2FkZCcsCgkJCQkJ
CQkJewoJCQkJCQkJCQljb2xsZWN0IDogWwoJCQkJCQkJCQkJewoJCQkJCQkJCQkJ
CWVtYWlsOiAgICBkYXRhLmVtYWlsLAoJCQkJCQkJCQkJCXBhc3N3b3JkOiBkYXRh
LnBhc3N3b3JkLAoJCQkJCQkJCQkJCXR5cGU6ICAgICBkYXRhLnR5cGUKCQkJCQkJ
CQkJCX0KCQkJCQkJCQkJXQoJCQkJCQkJCX0sIGZ1bmN0aW9uKHJlc3BvbnNlKSB7
CgkJCQkJCQkJCWlmIChyZXNwb25zZS5pc09rKCkpIHsKCQkJCQkJCQkJCW1haWxy
dS5Ob3RpZnkuYWRkKCdvaycsIHsKCQkJCQkJCQkJCQl0ZXh0OiBMYW5nLmdldCgn
Q29sbGVjdG9yJykuYWRkLnN1Y2Nlc3MKCQkJCQkJCQkJCX0pOwoKCQkJCQkJCQkJ
CUNvdW50ZXIuc2IoMTY4NTQzMik7CgkJCQkJCQkJCQlsYXllci5oaWRlKCk7CgkJ
CQkJCQkJCX0KCQkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJCQl2YXIgZXJyb3IgPSB0
aGlzLmVycm9yKHJlc3BvbnNlKTsKCgkJCQkJCQkJCQlpZiAoZXJyb3IuaXMoJ3N5
c3RlbScpKSB7CgkJCQkJCQkJCQkJdGhpcy5ub3RpZnkoJ3N5c3RlbScpOwoJCQkJ
CQkJCQkJfQoJCQkJCQkJCQkJZWxzZSBpZiAoZXJyb3IuaXMoJ292ZXJfbGltaXQn
KSkgewoJCQkJCQkJCQkJCXRoaXMubm90aWZ5KCdsaW1pdCcpOwoJCQkJCQkJCQkJ
fQoJCQkJCQkJCQkJZWxzZSBpZiAoZXJyb3IuaXMoJ3JlcXVpcmVkJykpIHsKCQkJ
CQkJCQkJCQl0aGlzLm5vdGlmeSgncmVxdWlyZWQnKTsKCQkJCQkJCQkJCX0KCQkJ
CQkJCQkJCWVsc2UgaWYgKGVycm9yLmlzKCdleGlzdHMnKSkgewoJCQkJCQkJCQkJ
CXRoaXMubm90aWZ5KCdleGlzdHMnKTsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCWVs
c2UgaWYgKGVycm9yLmlzKCdpbnZhbGlkJykpIHsKCQkJCQkJCQkJCQl0aGlzLm5v
dGlmeSgnYXV0aCcpOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJZWxzZSBpZiAoZXJy
b3IuaXMoJ3Vuc3VwcG9ydGVkJykpIHsKCQkJCQkJCQkJCQl0aGlzLm5vdGlmeSgn
dHlwZScpOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJZWxzZSBpZiAoZXJyb3IuaXMo
J2ludGVybmFsJykpIHsKCQkJCQkJCQkJCQl0aGlzLm5vdGlmeSgnaW50ZXJuYWwn
KTsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCWVsc2UgewoJCQkJCQkJCQkJCXRoaXMu
bm90aWZ5KCdzeXN0ZW0nKTsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfQoKCQkJCQkJ
CQkJY2FsbGJhY2socmVzcG9uc2UpOwoJCQkJCQkJCX0KCQkJCQkJCQkuYmluZCh0
aGlzKSk7CgkJCQkJCQl9LAoKCQkJCQkJCWVycm9yOiBmdW5jdGlvbihyZXNwb25z
ZSkgewoJCQkJCQkJCXZhciBkYXRhID0gcmVzcG9uc2UuZ2V0Qm9keSgpOwoKCQkJ
CQkJCQlyZXR1cm4gewoJCQkJCQkJCQlpczogZnVuY3Rpb24oZXJyb3IpIHsKCQkJ
CQkJCQkJCXZhciBzdGF0dXMgPSBmYWxzZTsKCgkJCQkJCQkJCQlpZiAoZXJyb3Ig
PT0gJ2ludGVybmFsJyAmJiByZXNwb25zZS5zdGF0dXMgIT09IDQwMCB8fAoJCQkJ
CQkJCQkJCSFPYmplY3QuaXNPYmplY3QoZGF0YSkgfHwgZGF0YSA9PSBlcnJvcikK
CQkJCQkJCQkJCXsKCQkJCQkJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJCQkJCX0K
CgkJCQkJCQkJCQlPYmplY3QuZm9yRWFjaChkYXRhLCBmdW5jdGlvbih2YWx1ZSkg
ewoJCQkJCQkJCQkJCWlmICh2YWx1ZS5lcnJvciA9PSBlcnJvcikKCQkJCQkJCQkJ
CQkJcmV0dXJuIHN0YXR1cyA9IHRydWU7CgkJCQkJCQkJCQl9KTsKCgkJCQkJCQkJ
CQlyZXR1cm4gc3RhdHVzOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfSwK
CgkJCQkJCQlub3RpZnk6IGZ1bmN0aW9uKGVycm9yKSB7CgkJCQkJCQkJdmFyIG1l
c3NhZ2UgPSBMYW5nLmdldCgnQ29sbGVjdG9yJykuZWRpdC5lcnJvcltlcnJvcl07
CgkJCQkJCQkJXyQoJ2Vycm9yJykudGV4dChtZXNzYWdlIHx8ICcnKTsKCgkJCQkJ
CQkJcmV0dXJuIGZhbHNlOwoJCQkJCQkJfSwKCgkJCQkJCQl2YWx1ZTogZnVuY3Rp
b24odmFsdWUpIHsKCQkJCQkJCQlyZXR1cm4gXyQoJ2lucHV0XycgKyB2YWx1ZSku
dmFsKCk7CgkJCQkJCQl9LAoKCQkJCQkJCXN1Ym1pdDogZnVuY3Rpb24oc3RhdGUp
IHsKCQkJCQkJCQkvLyBEaXNhYmxlIHN1Ym1pdCBidXR0b24KCQkJCQkJCQlfJCgn
c3VibWl0JykKCQkJCQkJCQkJLnRvZ2dsZUNsYXNzKCdmb3JtX19idXR0b25fZGlz
YWJsZWQnLCBzdGF0ZSk7CgoJCQkJCQkJCV8kKCdsb2FkaW5nJykKCQkJCQkJCQkJ
LnRvZ2dsZUNsYXNzKCdkbicsICFzdGF0ZSk7CgoJCQkJCQkJCS8vIERpc2FibGUg
aW5wdXQgZmllbGRzCgkJCQkJCQkJXyQoJ2lucHV0X2xvZ2luJykKCQkJCQkJCQkJ
LmF0dHIoJ2Rpc2FibGVkJywgc3RhdGUpOwoKCQkJCQkJCQlfJCgnaW5wdXRfcGFz
c3dvcmQnKQoJCQkJCQkJCQkuYXR0cignZGlzYWJsZWQnLCBzdGF0ZSk7CgkJCQkJ
CQl9LAoKCQkJCQkJCWRvbWFpbnM6IGZ1bmN0aW9uKCkgewoJCQkJCQkJCXdpbmRv
dy5fX01BSUxfRE9NQUlOUyA9IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CgkJCQkJCQkJ
CWlmIChPYmplY3QuaXNPYmplY3QocmVzcG9uc2UpKSB7CgkJCQkJCQkJCQl2YXIg
ZG9tYWlucyA9Jyc7CgoJCQkJCQkJCQkJT2JqZWN0LmZvckVhY2gocmVzcG9uc2Uu
RG9tYWlucywgZnVuY3Rpb24oZGF0YSwgZG9tYWluKSB7CgkJCQkJCQkJCQkJZG9t
YWlucyArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIGRvbWFpbiArICciPkAnICsgZG9t
YWluICsgJzwvb3B0aW9uPicKCQkJCQkJCQkJCX0pOwoKCQkJCQkJCQkJCWlmIChk
b21haW5zKSB7CgkJCQkJCQkJCQkJXyQoJ2lucHV0X2RvbWFpbicpLmh0bWwoZG9t
YWlucyk7CgkJCQkJCQkJCQl9CgoJCQkJCQkJCQkJbWFpbHJ1LmNvbGxlY3Rvcl9k
b21haW5zID0gcmVzcG9uc2UuRG9tYWluczsKCQkJCQkJCQkJfQoJCQkJCQkJCX07
CgoJCQkJCQkJCSQuYWpheCh7CgkJCQkJCQkJCXVybDogJ2h0dHBzOi8vc3dhLm1h
aWwucnUvZG9tYWlucycsCgkJCQkJCQkJCWRhdGE6IHsKCQkJCQkJCQkJCXYyOiAx
LAoJCQkJCQkJCQkJSlNPTlBfY2FsbDogJ19fTUFJTF9ET01BSU5TJwoJCQkJCQkJ
CQl9LAoJCQkJCQkJCQlkYXRhVHlwZTogJ3NjcmlwdCcKCQkJCQkJCQl9KTsKCQkJ
CQkJCX0sCgoJCQkJCQkJaW1hcDoge30KCQkJCQkJfTsKCgkJCQkJCWlmICghbWFp
bHJ1LmNvbGxlY3Rvcl9kb21haW5zKSB7CgkJCQkJCQljb2xsZWN0b3IuZG9tYWlu
cygpOwoJCQkJCQl9CgoJCQkJCQkvLyBSZXNldCBtZXNzYWdlIGVycm9ycwoJCQkJ
CQljb2xsZWN0b3Iubm90aWZ5KG51bGwpOwoKCQkJCQkJbGF5ZXIuJGRpdgoJCQkJ
CQkJLnVuYmluZCgnLmxheWVyLWNvbGxlY3Rvcl9fYWRkJykKCQkJCQkJCS5kZWxl
Z2F0ZSgnLnBvcHVwX19jb2xsZWN0b3JfX2FkZF9kb21haW5zX19saXN0JywgJ2Ns
aWNrLmxheWVyLWNvbGxlY3Rvcl9fYWRkJywgZnVuY3Rpb24oZXZlbnQpIHsKCQkJ
CQkJCQl2YXIgZG9tYWluID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKCdk
b21haW4nKTsKCgkJCQkJCQkJXyQoJ3NlbGVjdCcpLmRpc3BsYXkoZG9tYWluICE9
ICdvdGhlcicpOwoKCQkJCQkJCQlfJCgnaW5wdXRfZG9tYWluJykudmFsKGRvbWFp
bikKCQkJCQkJCQkJLmNoYW5nZSgpOwoJCQkJCQkJfSkKCQkJCQkJOwoKCQkJCQkJ
bGF5ZXIuZnVuYyA9IGZ1bmN0aW9uKHN0YXR1cykgewoJCQkJCQkJdmFyIGVtYWls
ICAgID0gY29sbGVjdG9yLnZhbHVlKCdsb2dpbicpLAoJCQkJCQkJCXBhc3N3b3Jk
ID0gY29sbGVjdG9yLnZhbHVlKCdwYXNzd29yZCcpLAoJCQkJCQkJCWRvbWFpbiAg
ID0gY29sbGVjdG9yLnZhbHVlKCdkb21haW4nKTsKCgkJCQkJCQlpZiAoIWVtYWls
KSB7CgkJCQkJCQkJcmV0dXJuIGNvbGxlY3Rvci5ub3RpZnkoJ2xvZ2luJyk7CgkJ
CQkJCQl9CgkJCQkJCQllbHNlIGlmICghcGFzc3dvcmQpIHsKCQkJCQkJCQlyZXR1
cm4gY29sbGVjdG9yLm5vdGlmeSgncGFzc3dvcmQnKTsKCQkJCQkJCX0KCQkJCQkJ
CWVsc2UgaWYgKF8kKCdzZWxlY3QnKS5pcygnOmhpZGRlbicpKSB7CgkJCQkJCQkJ
aWYgKGRvbWFpbiA9IGVtYWlsLm1hdGNoKC9AKC57NCx9KSQvKSkgewoJCQkJCQkJ
CQlkb21haW4gPSBkb21haW5bMV07CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UgewoJ
CQkJCQkJCQlyZXR1cm4gY29sbGVjdG9yLm5vdGlmeSgnZG9tYWluJyk7CgkJCQkJ
CQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJZW1haWwgKz0gJ0An
ICsgZG9tYWluOwoJCQkJCQkJfQoKCQkJCQkJCWNvbGxlY3Rvci5zdWJtaXQodHJ1
ZSk7CgoJCQkJCQkJdmFyIGF1dGhfZGF0YSA9IHsKCQkJCQkJCQllbWFpbDogICAg
ZW1haWwsCgkJCQkJCQkJcGFzc3dvcmQ6IHBhc3N3b3JkCgkJCQkJCQl9OwoKCQkJ
CQkJCXZhciB0eXBlID0gY29sbGVjdG9yLmltYXBbZG9tYWluXTsKCgkJCQkJCQlp
ZiAodHlwZSkgewoJCQkJCQkJCWF1dGhfZGF0YS50eXBlID0gdHlwZTsKCgkJCQkJ
CQkJY29sbGVjdG9yLmFkZChhdXRoX2RhdGEsIGZ1bmN0aW9uKCkgewoJCQkJCQkJ
CQljb2xsZWN0b3Iuc3VibWl0KGZhbHNlKTsKCQkJCQkJCQl9KTsKCQkJCQkJCX0K
CQkJCQkJCWVsc2UgewoJCQkJCQkJCW1haWxydS5BUEkucG9zdCgnY29sbGVjdG9y
cy9kb21haW4nLCB7CgkJCQkJCQkJCWRvbWFpbjogZG9tYWluCgkJCQkJCQkJfSwK
CQkJCQkJCQlmdW5jdGlvbihyZXNwb25zZSkgewoJCQkJCQkJCQlpZiAocmVzcG9u
c2UuaXNPaygpKSB7CgkJCQkJCQkJCQl2YXIgdHlwZSA9IHJlc3BvbnNlLmdldEJv
ZHkoKS5pbWFwID09IHRydWUgPyAnaW1hcCcgOiAncG9wMyc7CgoJCQkJCQkJCQkJ
Ly8gQ2FjaGUgZGF0YSB0byBhdm9pZCB0aGUgbm9uIHVuaXF1ZSByZXF1ZXN0cwoJ
CQkJCQkJCQkJY29sbGVjdG9yLmltYXBbZG9tYWluXSA9IGF1dGhfZGF0YS50eXBl
ID0gdHlwZTsKCgkJCQkJCQkJCQljb2xsZWN0b3IuYWRkKGF1dGhfZGF0YSwgZnVu
Y3Rpb24oKSB7CgkJCQkJCQkJCQkJY29sbGVjdG9yLnN1Ym1pdChmYWxzZSk7CgkJ
CQkJCQkJCQl9KTsKCQkJCQkJCQkJfQoJCQkJCQkJCQllbHNlIHsKCQkJCQkJCQkJ
CWNvbGxlY3Rvci5ub3RpZnkoJ3N5c3RlbScpOwoJCQkJCQkJCQkJY29sbGVjdG9y
LnN1Ym1pdChmYWxzZSk7CgkJCQkJCQkJCX0KCQkJCQkJCQl9KTsKCQkJCQkJCX0K
CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX07CgoJCQkJCQlDb3VudGVyLmQo
MTY4NTQzMik7CgkJCQkJCWxheWVyLnNob3coKTsKCQkJCQl9LAoJCQkJCXsKCQkJ
CQkJY2xhc3NOYW1lOiAncG9wdXBfX2NvbGxlY3Rvcl9fYWRkJwoJCQkJCX0pOwoJ
CQkJfSk7CgkJCX0sCgoJCQlpbmNyZWFzZVNwYWNlOiBmdW5jdGlvbigpIHsKCQkJ
CSRSKFsKCQkJCQkne3BsdWdpbnN9JyArICdMYXllcicsCgkJCQkJJ3ttYWlscnV9
JyArICdtYWlscnUuQVBJJwoJCQkJXSwgZnVuY3Rpb24oKSB7CgkJCQkJTGF5ZXIu
Z2V0KCdpbmNyZWFzZVNwYWNlJywgZnVuY3Rpb24obGF5ZXIpIHsKCQkJCQkJdmFy
ICR0ZW1wbGF0ZSA9IGxheWVyLiRkaXYuZmluZCgnI2pzLWluY3JlYXNlU3BhY2Un
KSwKCQkJCQkJCXRlbXBsYXRlSWQgPSAnI2pzLWluY3JlYXNlU3BhY2UtdG1wbCc7
CgoJCQkJCQlmdW5jdGlvbiByZW5kZXIoZGF0YSkgewoJCQkJCQkJdmFyIGRhdGEg
PSBkYXRhIHx8IHt9OwoKCQkJCQkJCWlmICghZGF0YS5kb25lKSBkYXRhLmRvbmUg
PSBudWxsOwoJCQkJCQkJaWYgKCFkYXRhLmVycm9yKSBkYXRhLmVycm9yID0gbnVs
bDsKCgkJCQkJCQkkdGVtcGxhdGUudHBsKHRlbXBsYXRlSWQsIGRhdGEpOwoJCQkJ
CQl9CgoJCQkJCQlsYXllci4kZGl2CgkJCQkJCQkudW5kZWxlZ2F0ZSgnLmpzLXJl
ZnJlc2gtY2FwdGNoYScsICdjbGljaycpCgkJCQkJCQkuZGVsZWdhdGUoJy5qcy1y
ZWZyZXNoLWNhcHRjaGEnLCAnY2xpY2snLCBmdW5jdGlvbigpIHsKCQkJCQkJCQls
YXllci4kZGl2LmZpbmQoJyNjYXB0Y2hhX2ZyYW1lJykuYXR0cignc3JjJywgbWFp
bHJ1LmNhcHRjaGFVUkwxICsgJz8nICsgTWF0aC5yYW5kb20oKSk7CgkJCQkJCQkJ
cmV0dXJuIGZhbHNlOwoJCQkJCQkJfSk7CgoJCQkJCQlsYXllci4kZGl2CgkJCQkJ
CQkudW5kZWxlZ2F0ZSgnLmNvbmZpcm0tY2FuY2VsJywgJ2NsaWNrJykKCQkJCQkJ
CS5kZWxlZ2F0ZSgnLmNvbmZpcm0tY2FuY2VsJywgJ2NsaWNrJywgZnVuY3Rpb24o
KSB7CgkJCQkJCQkJbGF5ZXIuaGlkZSgpOwoJCQkJCQkJCXJldHVybiBmYWxzZTsK
CQkJCQkJCX0pOwoKCQkJCQkJbGF5ZXIuJGRpdgoJCQkJCQkJLnVuZGVsZWdhdGUo
Jy5jb25maXJtLW9rJywgJ2NsaWNrJykKCQkJCQkJCS5kZWxlZ2F0ZSgnLmNvbmZp
cm0tb2snLCAnY2xpY2snLCBmdW5jdGlvbigpIHsKCQkJCQkJCQltYWlscnUuQVBJ
LnBvc3QoCgkJCQkJCQkJCSd1c2VyL2JveC9pbmNyZWFzZScsCgkJCQkJCQkJCXsK
CQkJCQkJCQkJCWNhcGNoYTogbGF5ZXIuJGRpdi5maW5kKCcjY2FwdGNoYScpLnZh
bCgpCgkJCQkJCQkJCX0sCgkJCQkJCQkJCWZ1bmN0aW9uKHJlc3BvbnNlKSB7CgkJ
CQkJCQkJCQl2YXIgYm9keSA9IHJlc3BvbnNlLmdldEJvZHkoKSwKCQkJCQkJCQkJ
CQkkZXJyb3IgPSBsYXllci4kZGl2LmZpbmQoJy5qcy1mb3JtRXJyb3InKTsKCgkJ
CQkJCQkJCQlpZiAocmVzcG9uc2UuaXNPaygpKSB7CgkJCQkJCQkJCQkJcmVuZGVy
KHsKCQkJCQkJCQkJCQkJZG9uZTogewoJCQkJCQkJCQkJCQkJc3BhY2U6IDIKCQkJ
CQkJCQkJCQkJfQoJCQkJCQkJCQkJCX0pOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJ
ZWxzZSB7CgkJCQkJCQkJCQkJaWYgKGJvZHkuY2FwY2hhICYmIGJvZHkuY2FwY2hh
LmVycm9yID09ICdpbnZhbGlkJykgewoJCQkJCQkJCQkJCQkkZXJyb3IKCQkJCQkJ
CQkJCQkJCS50ZXh0KCfQndC10LLQtdGA0L3QviDRg9C60LDQt9Cw0L0g0LrQvtC0
JykKCQkJCQkJCQkJCQkJCS5zaG93KCk7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJ
CWVsc2UgaWYgKGJvZHkuY2FwY2hhICYmIGJvZHkuY2FwY2hhLmVycm9yID09ICdy
ZXF1aXJlZCcpIHsKCQkJCQkJCQkJCQkJJGVycm9yCgkJCQkJCQkJCQkJCQkudGV4
dCgn0KPQutCw0LbQuNGC0LUg0LrQvtC0INGBINC60LDRgNGC0LjQvdC60LgnKQoJ
CQkJCQkJCQkJCQkJLnNob3coKTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJZWxz
ZSBpZiAoYm9keSA9PSAnbm90X25lZWRlZCcpIHsKCQkJCQkJCQkJCQkJcmVuZGVy
KHsKCQkJCQkJCQkJCQkJCWVycm9yOiB7CgkJCQkJCQkJCQkJCQkJbXNnOiAn0KDQ
sNC30LzQtdGAINCy0LDRiNC10LPQviDRj9GJ0LjQutCwINC90LAg0LTQsNC90L3R
i9C5INC80L7QvNC10L3RgiDQvtC/0YLQuNC80LDQu9C10L0nCgkJCQkJCQkJCQkJ
CQl9CgkJCQkJCQkJCQkJCX0pOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQllbHNl
IGlmIChib2R5ID09ICd0b29fYmlnJykgewoJCQkJCQkJCQkJCQlyZW5kZXIoewoJ
CQkJCQkJCQkJCQkJZXJyb3I6IHsKCQkJCQkJCQkJCQkJCQltc2c6ICfQktCw0Ygg
0L/QvtGH0YLQvtCy0YvQuSDRj9GJ0LjQuiDQtNC+0YHRgtC40LMg0LzQsNC60YHQ
uNC80LDQu9GM0L3QvtCz0L4g0YDQsNC30LzQtdGA0LAuINCaINGB0L7QttCw0LvQ
tdC90LjRjiwg0YPQstC10LvQuNGH0LjRgtGMINGA0LDQt9C80LXRgCDQv9C+0YfR
gtC+0LLQvtCz0L4g0Y/RidC40LrQsCDQvdC10LLQvtC30LzQvtC20L3QvicKCQkJ
CQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJfSk7CgkJCQkJCQkJCQkJfQoJCQkJCQkJ
CQkJCWVsc2UgewoJCQkJCQkJCQkJCQkkZXJyb3IKCQkJCQkJCQkJCQkJCS50ZXh0
KCfQndC10LjQt9Cy0LXRgdGC0L3QsNGPINC+0YjQuNCx0LrQsCwg0L/QvtCy0YLQ
vtGA0LjRgtC1INC30LDQv9GA0L7RgSDQv9C+0LfQtNC90LXQtScpCgkJCQkJCQkJ
CQkJCQkuc2hvdygpOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCX0KCQkJCQkJCQkJ
fQoJCQkJCQkJCSk7CgoJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCX0pOwoK
CQkJCQkJcmVuZGVyKCk7CgoJCQkJCQlsYXllci5zaG93KCk7CgkJCQkJfSk7CgkJ
CQl9KTsKCQkJfQoJCX0pOwoKCX0pKGpRdWVyeSk7CgoJanNMb2FkZXIubG9hZGVk
KCd7cGx1Z2luc31MYXllck1hbmFnZXInLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2Vz
L2pzL3J1L2pzQ29yZS9wbHVnaW5zL0xheWVyTWFuYWdlci5qcyBlbmQKCi8vIGRh
dGEvcnUvaW1hZ2VzL2pzL3J1L3V0aWxzL21haWxydS5VdGlscy5qcyBzdGFydAoK
Ci8vIEdMT0JBTElaQVRJT04KCWlmKCAhbWFpbHJ1LlV0aWxzICkgbWFpbHJ1LlV0
aWxzID0ge307CgoJKGZ1bmN0aW9uICh3aW4sIFV0aWxzKXsKCQl2YXIgUkVfRU1B
SUwgPSAvKFtcdy7QsC3Rj9GRXC0rXSspQChbXHcu0LAt0Y/RkVwtXSspXC5bXHfQ
sC3Rj9GRXSsvCgkJCSwgUkVfRU1BSUxTID0gL1tcdy7QsC3Rj9GRXC0rXStAW1x3
LtCwLdGP0ZFcLV0rXC5bXHfQsC3Rj9GRXSsvZ2kKCQkJLCBSRV9OQU1FX0FORF9F
TUFJTF9JTl9MVEdUID0gbmV3IFJlZ0V4cCgiW1wiJ10/KC4qPylbXCInXT9cXHMr
KD86PHwmbHQ7KSgiICsgUkVfRU1BSUwuc291cmNlICsgIikoPzo+fCZndDspIikK
CQkJLCBfcmViYWNrZ3JvdW5kaW1hZ2UgPSAvdXJsXChbIiddPyguKj8pWyInXT9c
KS8KCQkJLCBfcmVfZW1haWxfbWF0Y2hlciA9IC8oLio/KVxzPCguKj8pPiQvCgkJ
CSwgX2FianNUUyA9IDAKCQk7CgoJCVV0aWxzLmFianNDb3VudFN1Y2Nlc3MgPSBV
dGlscy5hYmpzQ291bnRFcnJvciA9IFV0aWxzLmFianNUaW1lID0gMDsKCgkJVXRp
bHMuZXh0cmFjdEVtYWlscyA9IGZ1bmN0aW9uIChzdHIpewoJCQlyZXR1cm4JKHN0
cisnJykubWF0Y2goUkVfRU1BSUxTKSB8fCBbXTsKCQl9OwoKCQkvKioKCQkgKiBH
ZXQgYWRkcmVzcyBib29rIGZvciBzdWdnZXN0CgkJICoKCQkgKiBAcHVibGljCgkJ
ICogQHBhcmFtcwl7RnVuY3Rpb259CVtmbl0gIGZuKGVycm9yLCBkYXRhKQoJCSAq
LwoJCVV0aWxzLmdldEFkZHJlc3NCb29rID0gKGZ1bmN0aW9uICgpewoJCQl2YXIg
X3JldHJ5Q291bnQgPSAxLCBfeGhyOwoKCQkJcmV0dXJuIGZ1bmN0aW9uIChmbil7
CgkJCQlmbiA9IGZuIHx8IGFqcy5GOwoKCQkJCWlmKCAhX2FianNUUyApIF9hYmpz
VFMgPSBEYXRlLm5vdygpOwoKCQkJCWlmKCBtYWlscnUuYWJqc0RhdGEgKXsKCQkJ
CQlmbihudWxsLCBtYWlscnUuYWJqc0RhdGEpOwoJCQkJCSQod2luKS50cmlnZ2Vy
SGFuZGxlcignc3VjY2Vzcy5hYmpzJywgW21haWxydS5hYmpzRGF0YV0pOwoJCQkJ
fQoJCQkJZWxzZSBpZiggIV94aHIgKXsKCQkJCQkvLyBXQVJOSU5HOiBEb24ndCB1
c2UgbWFpbHJ1LkFqYXgKCQkJCQlfeGhyID0gJC5hamF4KHsKCQkJCQkJdXJsOiAn
L2NnaS1iaW4vYWJqcycsCgkJCQkJCXR5cGU6ICdHRVQnLAoJCQkJCQlkYXRhOiB7
IG5vanM6IDEsIGlkOiBtYWlscnUuQWJqc0hhc2gsIHI6IE1hdGgucmFuZG9tKCks
IHNob3dfdmVyc2lvbjogdHJ1ZX0sCgkJCQkJCWRhdGFUeXBlOiAndGV4dCcsCgkJ
CQkJCXRpbWVvdXQ6IDEwMDAwLAoJCQkJCQljb21wbGV0ZTogZnVuY3Rpb24oalhI
UikgewoJCQkJCQkJdmFyIHJlc3BvbnNlLCBkYXRhLCBuZXdoYXNoLCByZXRyeSwg
dmVyc2lvbiA9IDA7CgoJCQkJCQkJdHJ5IHsKCQkJCQkJCQlyZXNwb25zZSA9ICQu
cGFyc2VKU09OKGpYSFIucmVzcG9uc2VUZXh0KTsKCQkJCQkJCX0gY2F0Y2ggKGUp
IHt9CgoJCQkJCQkJaWYoIHJlc3BvbnNlICl7CgkJCQkJCQkJaWYoIHJlc3BvbnNl
LnZlcnNpb24gKSB7CgkJCQkJCQkJCWRhdGEgPSByZXNwb25zZS5jb250YWN0czsK
CQkJCQkJCQkJbWFpbHJ1LmFianNWZXJzaW9uID0gcmVzcG9uc2UudmVyc2lvbjsK
CgkJCQkJCQkJfSBlbHNlIGlmKCByZXNwb25zZS5BYmpzSGFzaCApewoJCQkJCQkJ
CQluZXdoYXNoID0gcmVzcG9uc2UuQWJqc0hhc2g7CgoJCQkJCQkJCX0gZWxzZSBp
ZiggQXJyYXkuaXNBcnJheShyZXNwb25zZSkgKXsKCQkJCQkJCQkJZGF0YSA9IHJl
c3BvbnNlOwoJCQkJCQkJCX0KCQkJCQkJCX0KCgkJCQkJCQlfeGhyID0gbnVsbDsK
CQkJCQkJCVV0aWxzLmFianNUaW1lID0gRGF0ZS5ub3coKSAtIF9hYmpzVFM7CgoJ
CQkJCQkJaWYoIGRhdGEgKXsKCQkJCQkJCQlVdGlscy5hYmpzQ291bnRTdWNjZXNz
Kys7CgkJCQkJCQkJZm4oZmFsc2UsIGRhdGEpOwoJCQkJCQkJCSQod2luKS50cmln
Z2VySGFuZGxlcignc3VjY2Vzcy5hYmpzJywgW21haWxydS5hYmpzRGF0YSA9IGRh
dGFdKTsKCQkJCQkJCQlhanMubm90aWZ5KCdhYmpzOmxvYWRlZCcpOwoKCQkJCQkJ
CX0gZWxzZSBpZiggbmV3aGFzaCApewoJCQkJCQkJCVV0aWxzLmFianNDb3VudFN1
Y2Nlc3MrKzsKCQkJCQkJCQltYWlscnUuQWJqc0hhc2ggPSBuZXdoYXNoOwoKCQkJ
CQkJCX0gZWxzZSB7CgkJCQkJCQkJVXRpbHMuYWJqc0NvdW50RXJyb3IrKzsKCQkJ
CQkJCX0KCgkJCQkJCQlpZiggIWRhdGEgKXsKCQkJCQkJCQlpZiggcmV0cnkgPSBf
cmV0cnlDb3VudC0tID4gMCApewoJCQkJCQkJCQlVdGlscy5nZXRBZGRyZXNzQm9v
ayhmbik7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UgewoJCQkJCQkJCQlmbih0cnVl
KTsKCQkJCQkJCQkJJCh3aW4pLnRyaWdnZXJIYW5kbGVyKCdlcnJvci5hYmpzJyk7
CgkJCQkJCQkJfQoJCQkJCQkJfQoKCQkJCQkJCWlmKCAhcmV0cnkgKXsKCQkJCQkJ
CQlfcmV0cnlDb3VudCA9IDE7CgkJCQkJCQl9CgoJCQkJCQkJYWpzLm5vdGlmeSgn
YWJqczpjb21wbGV0ZScpOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQl9CgkJCX0KCQl9
KSgpOwoKCQkvKioKCQkgKiBDaGVjayBpZiBlbWFpbCBpcyBpbiBhZGRyZXNzYm9v
awoJCSAqCgkJICogQHB1YmxpYwoJCSAqIEBwYXJhbSB7U3RyaW5nfSBlbWFpbAoJ
CSAqLwoJCVV0aWxzLmlzSW5BZGRyZXNzQm9vayA9IGZ1bmN0aW9uKGVtYWlsLCBj
YWxsYmFjaykgewoJCQkkKHdpbmRvdykub25lKCdzdWNjZXNzLmFianMgZXJyb3Iu
YWJqcycsIGZ1bmN0aW9uIChldnQsIGRhdGEpIHsKCQkJCWlmICghQXJyYXkuaXNB
cnJheShkYXRhKSkgZGF0YSA9IFtdOwoKCQkJCWlmIChVdGlscy5pbkFycmF5KGVt
YWlsLCBkYXRhKSkgewoJCQkJCWNhbGxiYWNrKHRydWUpOwoJCQkJfSBlbHNlIHsK
CQkJCQljYWxsYmFjayhmYWxzZSk7CgkJCQl9CgkJCX0pOwoJCQlVdGlscy5nZXRB
ZGRyZXNzQm9vaygpOwoJCX07CgoJCS8qKgoJCSAqIENoZWNrIGlmIHNvbWUgZWxl
bWVudCBvZiBkYXRhIGFycmF5IGNvbnRhaW5zIGdpdmVuIHN0cmluZwoJCSAqCgkJ
ICogQHB1YmxpYwoJCSAqIEBwYXJhbSB7U3RyaW5nfSBzdHIKCQkgKiBAcGFyYW0g
e0FycmF5fSBkYXRhCgkJICovCgkJVXRpbHMuaW5BcnJheSA9IGZ1bmN0aW9uKHN0
ciwgZGF0YSkgewoJCQlmb3IgKHZhciBpPWRhdGEubGVuZ3RoOyBpLS07ICkgewoJ
CQkJaWYgKGRhdGFbaV0uaW5kZXhPZihzdHIpICE9PSAtMSkKCQkJCQlyZXR1cm4g
dHJ1ZTsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfTsKCgoJCS8qKgoJCSAqIEFk
ZCBlbWFpbCBsaXN0IGluIGFkZHJlc3MgYm9vayBzdWdnZXN0CgkJICoKCQkgKiBA
cHVibGljCgkJICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGxpc3QKCQkgKi8KCQlV
dGlscy5hZGRUb0FkZHJlc3NCb29rID0gZnVuY3Rpb24gKGxpc3QpewoJCQlVdGls
cy5nZXRBZGRyZXNzQm9vayhmdW5jdGlvbiAoZXJyLCBkYXRhKXsKCQkJCWlmKCAh
ZXJyICl7CgkJCQkJaWYoIHR5cGVvZiBsaXN0ID09ICdzdHJpbmcnICkKCQkJCQkJ
Ly9ub2luc3BlY3Rpb24gSlNVbnJlc29sdmVkRnVuY3Rpb24KCQkJCQkJbGlzdCA9
IGxpc3Quc3BsaXQoJywnKTsKCgkJCQkJdmFyIHVwZGF0ZWQgPSBmYWxzZTsKCgkJ
CQkJLy9ub2luc3BlY3Rpb24gSlNVbnJlc29sdmVkRnVuY3Rpb24KCQkJCQlsaXN0
LnJldmVyc2UoKTsKCgkJCQkJQXJyYXkuZm9yRWFjaChsaXN0LCBmdW5jdGlvbiAo
bmFtZUFuZEVtYWlsKSB7CgkJCQkJCXZhciBlbWFpbCwgbmFtZTsKCgkJCQkJCWlm
KCBlbWFpbCA9IG5hbWVBbmRFbWFpbC5tYXRjaChSRV9OQU1FX0FORF9FTUFJTF9J
Tl9MVEdUKSApIHsKCQkJCQkJCW5hbWUgPSBlbWFpbFsxXTsKCQkJCQkJCWVtYWls
ID0gZW1haWxbMl07CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiggZW1haWwgPSBuYW1l
QW5kRW1haWwubWF0Y2goUkVfRU1BSUwpICkgewoJCQkJCQkJbmFtZSA9IGVtYWls
ID0gZW1haWxbMF07CgkJCQkJCX0KCgkJCQkJCWlmKCBlbWFpbCApewoJCQkJCQkJ
dmFyIGksIGYgPSAxOwoKCQkJCQkJCWVtYWlsID0gZW1haWwudG9Mb3dlckNhc2Uo
KTsKCQkJCQkJCWZvciggaSA9IGRhdGEubGVuZ3RoOyBpLS07ICkgaWYoIH5kYXRh
W2ldLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihlbWFpbCkgKXsKCQkJCQkJCQlmID0g
MDsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCgkJCQkJCQlpZiggZiApewoJCQkJ
CQkJCXVwZGF0ZWQgPSB0cnVlOwoJCQkJCQkJCWRhdGEudW5zaGlmdChuYW1lICsn
IDwnKyBlbWFpbCArJz4nKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0pOwoKCQkJ
CQlpZiggdXBkYXRlZCApewoJCQkJCQkkKHdpbmRvdykudHJpZ2dlcignYWJqczp1
cGRhdGVkJyk7CgkJCQkJfQoJCQkJfQoJCQl9KTsKCQl9OwoKCgkJVXRpbHMub3Bl
bkFkZHJlc3Nib29rUG9wdXAgPSBmdW5jdGlvbihhZGR0bykgewoJCQl2YXIgdCA9
IHRoaXMsIHBvc1ggPSAoc2NyZWVuLndpZHRoIC0gNzAwKSAvIDIsIHBvc1kgPSAo
c2NyZWVuLmhlaWdodCAtIDUwMCkgLyAyOwoKCQkJdmFyIHVybCA9IG1haWxydS5h
YmpzVmVyc2lvbiA8IDIgPyAnL2NnaS1iaW4vYWRkcmVzc2Jvb2s/dGVtcGxhdGU9
cXVpY2tsaXN0LnRtcGwmZnJvbV9zZW50bXNnPTEmYWRkdG89JyArIGFkZHRvIDog
Jy9hZGRyZXNzYm9vay9xdWlja2xpc3QvJyArIGFkZHRvOwoKCQkJdmFyIHcgPSB3
aW5kb3cub3Blbih1cmwsICdzd193aW5kb3cnLCAnd2lkdGg9NzAwLGhlaWdodD01
MDAscmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcyx0b3A9JyArIHBvc1kgKyAn
LGxlZnQ9JyArIHBvc1gpOwoJCQl3LmZvY3VzKCk7CgkJfTsKCgkJLy8gaHR0cHM6
Ly9qaXJhLm1haWwucnUvYnJvd3NlL01BSUwtNjkzNwoJCVV0aWxzLnN1Z2dlc3RM
b2cgPSBmdW5jdGlvbiAodHlwZSwgb3B0cyl7CgkJCWlmKCAhJC5pc0FycmF5KG9w
dHMuZGF0YSkgKXsKCQkJCW9wdHMuZGF0YSA9IGFqcy5tYXAob3B0cy5kYXRhLCBm
dW5jdGlvbihYKXsKCQkJCQkvKiogQG5hbWVzcGFjZSBYLndvcmQgKi8KCQkJCQly
ZXR1cm4gWC53b3JkOwoJCQkJfSk7CgkJCX0KCgkJCW1haWxydS5nc3RhdCh7CgkJ
CQkgIHRpbWU6CQlvcHRzLnN0YXJ0X3RzID8gYWpzLm5vdygpIC0gb3B0cy5zdGFy
dF90cyA6IDAKCQkJCSwgc2VsX3RzOglvcHRzLnNlbF90cyA/IGFqcy5ub3coKSAt
IG9wdHMuc2VsX3RzIDogMAoJCQkJLCBlbWFpbDoJbWFpbHJ1LnVzZXJlbWFpbAoJ
CQkJLCB2YWx1ZToJb3B0cy52YWwKCQkJCSwgc2VsZWN0ZWQ6CW9wdHMuc2VsCgkJ
CQksIGl0ZW1zOglNYXRoLnJhbmRvbSgpIDw9IC4wMSA/IG9wdHMuZGF0YS5qb2lu
KCdcdCcpIDogJycKCQkJCSwgY291bnQ6CW9wdHMuZGF0YS5sZW5ndGgKCQkJCSwg
aW5kZXg6CW9wdHMuaWR4ID4gLTEgPyBvcHRzLmlkeCsxIDogLTEKCgkJCQksIGFi
anNfdGltZToJVXRpbHMuYWJqc1RpbWUKCQkJCSwgYWJqc19lcnJvcjoJbWFpbHJ1
LlV0aWxzLmFianNDb3VudEVycm9yCgkJCQksIGFianNfc3VjY2VzczoJbWFpbHJ1
LlV0aWxzLmFianNDb3VudFN1Y2Nlc3MKCQkJCSwgYWJqc19sZW5ndGg6CW9wdHMu
YWJqcwoJCQkJLCBwcmVzc19lbnRlcjoJKyEhb3B0cy5lbnRlcgoKCQkJCSwgc3Vn
Z2VzdDogdHlwZQoJCQl9LCB0cnVlKTsKCQl9OwoKCgkJLyoqCgkJICogQWpheCBl
cnJvciBoYW5kbGVyCgkJICoKCQkgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBqUXVl
cnkuRXZlbnQKCQkgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSBqcVhIUgoJCSAq
IEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCgkJICogQHBhcmFtIHtFcnJvcn0gdGhy
b3duRXJyb3IKCQkgKi8KCQlVdGlscy5jYXRjaEFqYXhFcnJvciA9IGZ1bmN0aW9u
IChldmVudCwganFYSFIsIG9wdGlvbnMsIHRocm93bkVycm9yKXsKCQkJaWYgKHRo
cm93bkVycm9yICYmIChvcHRpb25zICYmIG9wdGlvbnMudXJsICYmIG9wdGlvbnMu
ZGF0YVR5cGUgPT0gJ2pzb24nKSAmJiAoanFYSFIgJiYganFYSFIuc3RhdHVzID09
IDIwMCAmJiBqcVhIUi5yZWFkeVN0YXRlID09IDQpKSB7CgkJCQlpZiAoLyhefFwv
KWFianMoXD98JCkvLnRlc3Qob3B0aW9ucy51cmwpKSB7CgkJCQkJdmFyIHR4dCA9
ICdhamF4Q29udmVydDogJywgaGRycyA9ICcnOwoJCQkJCXR4dCArPSBvcHRpb25z
LnVybCArIChvcHRpb25zLmRhdGEgPyAoL1w/Ly50ZXN0KG9wdGlvbnMudXJsKSA/
ICcmJyA6ICc/JykgKyBvcHRpb25zLmRhdGEgOiAnJyk7CgoJCQkJCWlmICgoJ21h
aWxydScgaW4gd2luZG93KSkgewoJCQkJCQl0eHQgKz0gJyB+ICcgKyAobWFpbHJ1
LnVzZXJlbWFpbCB8fCAnTm90QXV0aCcpOwoJCQkJCX0KCgkJCQkJdHh0ICs9ICcg
fiAnICsgbmF2aWdhdG9yLnVzZXJBZ2VudDsKCgkJCQkJaWYgKGpxWEhSLmdldEFs
bFJlc3BvbnNlSGVhZGVycykgewoJCQkJCQloZHJzID0gJzxoPicgKyBqcVhIUi5n
ZXRBbGxSZXNwb25zZUhlYWRlcnMoKSArICc8L2g+JzsKCQkJCQl9CgoJCQkJCWlm
ICh3aW5kb3cubWFpbHJ1ICYmIG1haWxydS5zYXZlRXJyb3IpIHsKCQkJCQkJbWFp
bHJ1LnNhdmVFcnJvcignanNvbjInLCB0eHQpOwoJCQkJCX0KCgkJCQkJdHh0ID0g
JzxxPicgKyB0eHQgKyAnPC9xPicgKyBoZHJzICsgJzxyPicgKyBqcVhIUi5yZXNw
b25zZVRleHQgKyAnPC9yPic7CgoJCQkJCSQuYWpheCh7CgkJCQkJCXVybDogJy9j
Z2ktYmluL2xvZ3RoaXMnLAoJCQkJCQl0eXBlOiAnUE9TVCcsCgkJCQkJCWRhdGE6
IHsnalEuZXJyJzogdHh0LnJlcGxhY2UoL1tcclxuXS9nLCAnXFxuJyl9LAoJCQkJ
CQlkYXRhVHlwZTogJ3RleHQnCgkJCQkJfSk7CgkJCQl9CgkJCQllbHNlIGlmIChv
cHRpb25zLnNlbnRtc2cpIHsKCQkJCQl2YXIgbG9nID0gewoJCQkJCQlsb2c6ICdz
ZW50bXNncGFyc2VlcnJvcjUnLAoJCQkJCQlyZWFkeVN0YXRlOiBqcVhIUi5yZWFk
eVN0YXRlLAoJCQkJCQlzdGF0dXM6IGpxWEhSLnN0YXR1cywKCQkJCQkJc3RhdHVz
VGV4dDoganFYSFIuc3RhdHVzVGV4dCwKCQkJCQkJZXJyb3I6IHRocm93bkVycm9y
LnRvU3RyaW5nKCksCgkJCQkJCWVtYWlsOiB3aW5kb3cubWFpbHJ1ICYmIG1haWxy
dS51c2VyZW1haWwgPyBtYWlscnUudXNlcmVtYWlsIDogJycsCgkJCQkJCXJlc3Bv
bnNlVGV4dDoganFYSFIucmVzcG9uc2VUZXh0CgkJCQkJfTsKCQkJCQkobmV3IElt
YWdlKS5zcmMgPSAnLy9nc3RhdC4nICsgbWFpbHJ1LnN0YXRpY0RvbWFpbk5hbWUg
KyAnL2dzdGF0P3VhPTEmbG9nbWU9JyArIGVuY29kZVVSSUNvbXBvbmVudCgkLnBh
cmFtKGxvZykpOwoJCQkJfQoJCQl9CgkJfTsKCgkJLyoqCgkJICoKCQkgKiBAcGFy
YW0ge2Jvb2xlYW59IHN1cHBvcnRNdWx0aUNoYXJTZWFyY2ggW2JvdW5kZWRdICJz
aCIsICJzaGgiLCBldGMgc3VwcG9ydAoJCSAqIEBwYXJhbSB7c3RyaW5nfSBzb3Vy
Y2UgaW5wdXQgc3RyaW5nCgkJICogQHBhcmFtIHtib29sZWFufSByZXR1cm5NdWx0
aXBseSByZXR1cm4ge3N0cmluZ30gaWYgcmV0dXJuTXVsdGlwbHkgPT0gZmFsc2Ug
YW5kIHtBcnJheS48QXJyYXkuPHN0cmluZz58c3RyaW5nPn0gaWYgcmV0dXJuTXVs
dGlwbHkgPT0gdHJ1ZQoJCSAqICBGb3IgZXhhbXBsZTogaW5wdXQgPSAidW5pdCIg
fCBvdXRwdXQgPSByZXR1cm5NdWx0aXBseSA/IFsgItGO0L3QuNGCIiwgItGD0L3Q
uNGCIiBdIDogItGD0L3QuNGCIgoJCSAqIEB0aGlzIHtPYmplY3QuPHN0cmluZywg
KHN0cmluZ3xBcnJheS48c3RyaW5nPik+fSBjaGFyYWN0ZXJzIG1hcCAtIEFuIG9i
amVjdCBpbiB3aGljaCB0aGUga2V5cyBhcmUgc3RyaW5ncyBhbmQgdGhlIHZhbHVl
cyBhcmUgc3RyaW5nIG9yIHN0cmluZyBhcnJheS4KCQkgKgoJCSAqIEByZXR1cm4g
eyhzdHJpbmd8QXJyYXkuPEFycmF5LjxzdHJpbmc+fHN0cmluZz4pfQoJCSAqIEBw
cml2YXRlCgkJICovCgkJdmFyIF9fY29udmVydFRleHQgPSBmdW5jdGlvbihzdXBw
b3J0TXVsdGlDaGFyU2VhcmNoLCBzb3VyY2UsIHJldHVybk11bHRpcGx5KSB7CgkJ
CXZhciAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLCAoc3RyaW5nfEFycmF5Ljxz
dHJpbmc+KT59Ki90YWJsZSA9IHRoaXM7CgkJCXZhciBhcnJheVJlc3VsdCA9IHJl
dHVybk11bHRpcGx5ID8gW10gOiBudWxsCgkJCQksIHN0cmluZ1Jlc3VsdCA9ICIi
CgkJCTsKCgkJCXZhciBsZXR0ZXJzID0gU3RyaW5nKHNvdXJjZSkudG9Mb3dlckNh
c2UoKS5zcGxpdCgnJyk7CgkJCXZhciBsZXR0ZXIsIG5leHRMZXR0ZXI7CgoJCQlm
b3IoIHZhciBpID0gMCAsIGwgPSBsZXR0ZXJzLmxlbmd0aCA7IGkgPCBsIDsgaSsr
ICkgewoJCQkJbGV0dGVyID0gbGV0dGVyc1tpXTsKCgkJCQlpZiggc3VwcG9ydE11
bHRpQ2hhclNlYXJjaCApIHsKCQkJCQkvLyAic2giLCAic2hoIiwgZXRjIHN1cHBv
cnQKCQkJCQl3aGlsZSggKG5leHRMZXR0ZXIgPSBsZXR0ZXJzW2kgKyAxXSkKCQkJ
CQkJJiYgdGFibGVbbmV4dExldHRlciA9IGxldHRlciArIG5leHRMZXR0ZXJdICE9
PSB2b2lkIDAKCQkJCQkpIHsKCQkJCQkJbGV0dGVyID0gbmV4dExldHRlcjsKCQkJ
CQkJaSsrOwoJCQkJCX0KCQkJCQlpZiggdGFibGVbbGV0dGVyXSA9PT0gbnVsbCAp
IHsKCQkJCQkJaSAtPSAobGV0dGVyLmxlbmd0aCAtIDEpOwoJCQkJCQlsZXR0ZXIg
PSBsZXR0ZXIuY2hhckF0KDApOwoJCQkJCX0KCQkJCX0KCgkJCQlpZiggdGFibGVb
bGV0dGVyXSAhPT0gdm9pZCAwICkgey8vbGV0dGVyIGZvdW5kIGluIGNoYXJhY3Rl
cnMgbWFwCgkJCQkJbGV0dGVyID0gdGFibGVbbGV0dGVyXTsKCgkJCQkJaWYoIHR5
cGVvZiBsZXR0ZXIgIT09ICJzdHJpbmciICkgey8vbGV0dGVyIGlzIEFycmF5CgkJ
CQkJCWlmKCAhcmV0dXJuTXVsdGlwbHkgKSB7CgkJCQkJCQlzdHJpbmdSZXN1bHQg
Kz0gbGV0dGVyWzBdOwoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJaWYoIHN0
cmluZ1Jlc3VsdCApIHsKCQkJCQkJCQlhcnJheVJlc3VsdC5wdXNoKHN0cmluZ1Jl
c3VsdCk7CgkJCQkJCQl9CgkJCQkJCQlzdHJpbmdSZXN1bHQgPSAiIjsKCQkJCQkJ
CWFycmF5UmVzdWx0LnB1c2gobGV0dGVyKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQll
bHNlIHsvL2xldHRlciBpcyBzdHJpbmcKCQkJCQkJc3RyaW5nUmVzdWx0ICs9IGxl
dHRlcjsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsvL2xldHRlciBpcyBvcmlnaW5h
bCBsZXR0ZXIKCQkJCQlzdHJpbmdSZXN1bHQgKz0gbGV0dGVyOwoJCQkJfQoJCQl9
CgoJCQlpZiggcmV0dXJuTXVsdGlwbHkgKSB7Ly9sYXN0IHBhcnQgb2YgcmVzdWx0
CgkJCQlpZiggc3RyaW5nUmVzdWx0ICkgewoJCQkJCWFycmF5UmVzdWx0LnB1c2go
c3RyaW5nUmVzdWx0KTsKCQkJCX0KCQkJfQoKCQkJcmV0dXJuIHJldHVybk11bHRp
cGx5ID8gYXJyYXlSZXN1bHQgOiBzdHJpbmdSZXN1bHQ7CgkJfTsKCgkJdmFyIF9j
aGFyLCBfdmFsdWU7CgoJCS8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIHN0cmlu
Zz59IEFuIG9iamVjdCBpbiB3aGljaCB0aGUga2V5cyBhcmUgc3RyaW5ncyBhbmQg
dGhlIHZhbHVlcyBhcmUgc3RyaW5nIHRvbyAqLwoJCXZhciBfcHVudG8gPSB7CgkJ
CSJgIjogIlx1MDQ1MSIsLy8i0ZEiCgkJCSJxIjogIlx1MDQzOSIsLy8i0LkiCgkJ
CSJ3IjogIlx1MDQ0NiIsLy8i0YYiCgkJCSJlIjogIlx1MDQ0MyIsLy8i0YMiCgkJ
CSJyIjogIlx1MDQzYSIsLy8i0LoiCgkJCSJ0IjogIlx1MDQzNSIsLy8i0LUiCgkJ
CSJ5IjogIlx1MDQzZCIsLy8i0L0iCgkJCSJ1IjogIlx1MDQzMyIsLy8i0LMiCgkJ
CSJpIjogIlx1MDQ0OCIsLy8i0YoiCgkJCSJvIjogIlx1MDQ0OSIsLy8i0YkiCgkJ
CSJwIjogIlx1MDQzNyIsLy8i0LciCgkJCSJbIjogIlx1MDQ0NSIsLy8i0YUiCgkJ
CSJdIjogIlx1MDQ0YSIsLy8i0YoiCgkJCSJhIjogIlx1MDQ0NCIsLy8i0YQiCgkJ
CSJzIjogIlx1MDQ0YiIsLy8i0YsiCgkJCSJkIjogIlx1MDQzMiIsLy8i0LIiCgkJ
CSJmIjogIlx1MDQzMCIsLy8i0LAiCgkJCSJnIjogIlx1MDQzZiIsLy8i0L8iCgkJ
CSJoIjogIlx1MDQ0MCIsLy8i0YAiCgkJCSJqIjogIlx1MDQzZSIsLy8i0L4iCgkJ
CSJrIjogIlx1MDQzYiIsLy8i0LsiCgkJCSJsIjogIlx1MDQzNCIsLy8i0LQiCgkJ
CSI7IjogIlx1MDQzNiIsLy8i0LYiCgkJCSInIjogIlx1MDQ0ZCIsLy8i0Y0iCgkJ
CSJ6IjogIlx1MDQ0ZiIsLy8i0Y8iCgkJCSJ4IjogIlx1MDQ0NyIsLy8i0YciCgkJ
CSJjIjogIlx1MDQ0MSIsLy8i0YEiCgkJCSJ2IjogIlx1MDQzYyIsLy8i0LwiCgkJ
CSJiIjogIlx1MDQzOCIsLy8i0LgiCgkJCSJuIjogIlx1MDQ0MiIsLy8i0YIiCgkJ
CSJtIjogIlx1MDQ0YyIsLy8i0YwiCgkJCSIsIjogIlx1MDQzMSIsLy8i0LEiCgkJ
CSIuIjogIlx1MDQ0ZSIvLyfRjicKCQl9OwoJCWZvciggX2NoYXIgaW4gX3B1bnRv
ICkgaWYoX3B1bnRvLmhhc093blByb3BlcnR5KF9jaGFyKSkgewoJCQlfdmFsdWUg
PSBfcHVudG9bX2NoYXJdOwoJCQlpZiggIShfdmFsdWUgaW4gX3B1bnRvKSApIHsK
CQkJCV9wdW50b1tfdmFsdWVdID0gX2NoYXI7CgkJCX0KCQl9CgkJVXRpbHMucHVu
dG8gPSBfX2NvbnZlcnRUZXh0LmJpbmQoX3B1bnRvLCBmYWxzZSk7CgoJCS8qKiBA
dHlwZSB7T2JqZWN0LjxzdHJpbmcsIChzdHJpbmd8QXJyYXkuPHN0cmluZz4pPn0g
QW4gb2JqZWN0IGluIHdoaWNoIHRoZSBrZXlzIGFyZSBzdHJpbmdzIGFuZCB0aGUg
dmFsdWVzIGFyZSBzdHJpbmcgb3Igc3RyaW5nIGFycmF5LiAqLwoJCXZhciBfdHJh
bnNsaXQgPSB7CgkJCSciJzogIlx1MDQ0YSIsLy8i0YoiCgkJCSInIjogIlx1MDQ0
YyIsLy8i0YwiCgkJCSIuIjogIjoiLAoJCQkiYSI6ICJcdTA0MzAiLC8vItCwIgoJ
CQkiYiI6ICJcdTA0MzEiLC8vItCxIgoJCQkiYyI6IFsiXHUwNDQ2IiwgIlx1MDQz
YSJdLC8vItGGIiwgItC6IgoJCQkidHMiOiAiXHUwNDQ2IiwvLyLRhiIKCQkJImNo
IjogIlx1MDQ0NyIsLy8i0YciCgkJCSJkIjogIlx1MDQzNCIsLy8i0LQiCgkJCSJl
IjogIlx1MDQzNSIsLy8i0LUiCgkJCSJqZSI6ICJcdTA0MzUiLC8vItC1IgoJCQki
eWUiOiBbIlx1MDQzNSIsICJcdTA0MzlcdTA0MzUiXSwvLyLQtSIsICLQudC1IgoJ
CQkiZWgiOiAiXHUwNDRkIiwvLyLRjSIKCQkJImYiOiAiXHUwNDQ0IiwvLyLRhCIK
CQkJInBoIjogIlx1MDQ0NCIsLy8i0YQiCgkJCSJnIjogIlx1MDQzMyIsLy8i0LMi
Ly9UT0RPOjog0LIg0L/QvtC40YHQutC1INCy0YDQvtC00LUg0LrQsNC6IFsi0LMi
LCAi0LkiXSAtINC/0YDQvtCy0LXRgNC40YLRjAoJCQkiaCI6ICJcdTA0NDUiLC8v
ItGFIgoJCQkiaSI6IFsiXHUwNDM4IiwgIlx1MDQzOSIsICJcdTA0NGIiXSwvLyLQ
uCIsICLQuSIsICLRiyIKCQkJImoiOiBbIlx1MDQzNiIsICJcdTA0MzkiXSwvLyLQ
tiIsICLQuSIKCQkJImphIjogWyJcdTA0NGYiLCAiXHUwNDM5XHUwNDRmIl0sLy8i
0Y8iLCAi0LnRjyIKCQkJInlhIjogWyJcdTA0NGYiLCAiXHUwNDM5XHUwNDRmIl0s
Ly8i0Y8iLCAi0LnRjyIKCQkJImpqIjogIlx1MDQzOSIsLy8i0LkiCgkJCSJqbyI6
ICJcdTA0NTEiLC8vItGRIgoJCQkieW8iOiBbIlx1MDQ1MSIsICJcdTA0MzlcdTA0
M2UiXSwvLyLRkSIsICLQudC+IgoJCQkianUiOiAiXHUwNDRlIiwvLyLRjiIKCQkJ
Inl1IjogWyJcdTA0NGUiLCAiXHUwNDM5XHUwNDQzIl0sLy8i0Y4iLCAi0LnRgyIK
CQkJImsiOiAiXHUwNDNhIiwvLyLQuiIKCQkJImtoIjogIlx1MDQ0NSIsLy8i0YUi
CgkJCSJsIjogIlx1MDQzYiIsLy8i0LsiCgkJCSJtIjogIlx1MDQzYyIsLy8i0Lwi
CgkJCSJuIjogIlx1MDQzZCIsLy8i0L0iCgkJCSJvIjogIlx1MDQzZSIsLy8i0L4i
CgkJCSJwIjogIlx1MDQzZiIsLy8i0L8iCgkJCSJxIjogIlx1MDQzYSIsLy8i0Loi
CgkJCSJyIjogIlx1MDQ0MCIsLy8i0YAiCgkJCSJzIjogWyJcdTA0NDEiLCAiXHUw
NDM3Il0sLy8i0YEiLCAi0LciCgkJCSJzYyI6IG51bGwsLy8gbmVlZHMgZm9yICJz
Y2giIGZpbmQKCQkJInNjaCI6IFsiXHUwNDQ4IiwgIlx1MDQ0OSJdLC8vItGIIiwg
ItGJIgoJCQkic2giOiAiXHUwNDQ4IiwvLyLRiCIKCQkJInNoaCI6ICJcdTA0NDki
LC8vItGJIgoJCQkic2hjIjogbnVsbCwvLyBuZWVkcyBmb3IgInNjaCIgZmluZAoJ
CQkic2hjaCI6ICJcdTA0NDkiLC8vItGJIgoJCQkidCI6ICJcdTA0NDIiLC8vItGC
IgoJCQkidSI6IFsiXHUwNDQzIiwgIlx1MDQ0ZSJdLC8vItGDIiwgItGOIgoJCQki
diI6ICJcdTA0MzIiLC8vItCyIgoJCQkiXHUwNDMyIjogInYiLC8vItCyIgoJCQki
dyI6ICJcdTA0MzIiLC8vItCyIgoJCQkieCI6ICJcdTA0M2FcdTA0NDEiLC8vItC6
0YEiCgkJCSJ5IjogWyJcdTA0NGIiLCAiXHUwNDM5IiwgIlx1MDQ0ZiIsICJcdTA0
MzhcdTA0MzkiXSwvLyLRiyIsICLQuSIsICLRjyIsICLQuNC5IgoJCQkiXHUwNDM4
XHUwNDM5IjogWyJpeSJdLC8vItC40LkiINCn0YLQvtCx0YsgItC40LkiLT4ieSIg
0L3QtSDQv9C10YDQtdC60YDRi9Cy0LDQu9CwICLQuNC5Ii0+Iml5IiAoItCU0LzQ
uNGC0YDQuNC5IiAtPiAiRG1pdHJpeSIpCgkJCSJ6IjogIlx1MDQzNyIsLy8i0Lci
CgkJCSJ6aCI6ICJcdTA0MzYiLC8vItC2IgoJCQkiXHUwNDM2IjogInpoIi8vItC2
IgoJCX07CgkJZm9yKCBfY2hhciBpbiBfdHJhbnNsaXQgKSBpZiggX3RyYW5zbGl0
Lmhhc093blByb3BlcnR5KF9jaGFyKSApIHsKCQkJX3ZhbHVlID0gX3RyYW5zbGl0
W19jaGFyXTsKCgkJCWlmKCBBcnJheS5pc0FycmF5KF92YWx1ZSkgKSB7CgkJCQlB
cnJheS5mb3JFYWNoKF92YWx1ZSwgZnVuY3Rpb24oX3ZhbHVlKSB7CgkJCQkJdmFy
IGNoYXJzOwoKCQkJCQljaGFycyA9IHRoaXNbX3ZhbHVlXTsKCgkJCQkJaWYoIGNo
YXJzID09PSB2b2lkIDAgKSB7CgkJCQkJCXRoaXNbX3ZhbHVlXSA9IF9jaGFyOwoJ
CQkJCX0KCQkJCQllbHNlIGlmKCBBcnJheS5pc0FycmF5KGNoYXJzKSApIHsKCQkJ
CQkJaWYoICFBcnJheS5jb250YWlucyhjaGFycywgX2NoYXIpICkgewoJCQkJCQkJ
Y2hhcnMucHVzaChfY2hhcik7CgkJCQkJCX0KCQkJCQl9CgkJCQkJZWxzZSBpZigg
Y2hhcnMgIT09IF9jaGFyICkgewoJCQkJCQl0aGlzW192YWx1ZV0gPSBbY2hhcnMs
IF9jaGFyXTsKCQkJCQl9CgkJCQl9LCBfdHJhbnNsaXQpOwoJCQl9CgkJCWVsc2Ug
aWYoIF90cmFuc2xpdFtfdmFsdWVdICkgewoJCQkJX3ZhbHVlID0gX3RyYW5zbGl0
W192YWx1ZV07CgoJCQkJaWYoIEFycmF5LmlzQXJyYXkoX3ZhbHVlKSApIHsKCQkJ
CQlpZiggIUFycmF5LmNvbnRhaW5zKF92YWx1ZSwgX2NoYXIpICkgewoJCQkJCQlf
dmFsdWUucHVzaChfY2hhcik7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSBpZiggX3Zh
bHVlICE9PSBfY2hhciApIHsKCQkJCQlfdHJhbnNsaXRbX3RyYW5zbGl0W19jaGFy
XV0gPSBbX3ZhbHVlLCBfY2hhcl07CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiggX3Zh
bHVlICkgewoJCQkJX3RyYW5zbGl0W192YWx1ZV0gPSBfY2hhcjsKCQkJfQoJCX0K
CQlVdGlscy50cmFuc2xpdCA9IF9fY29udmVydFRleHQuYmluZChfdHJhbnNsaXQs
IHRydWUpOwoKCQlfY2hhciA9IF92YWx1ZSA9IF90cmFuc2xpdCA9IF9wdW50byA9
IF9fY29udmVydFRleHQgPSBudWxsOy8vY2xlYW51cAoKCQkvKioKCQkgKiBHZXQg
YXZhdGFyIHNyYyBieSBlbWFpbCBhbmQgZGltZW5zaW9ucwoJCSAqCgkJICogQHBh
cmFtIHtTdHJpbmd9IGVtYWlsCgkJICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgaXQg
Y2FuIGVtcHR5IHN0cmluZyBvciBudWxsCgkJICogQHBhcmFtIHtOdW1iZXI9fSB3
aWR0aAoJCSAqIEBwYXJhbSB7TnVtYmVyPX0gaGVpZ2h0CgkJICogQHJldHVybiB7
U3RyaW5nfQoJCSAqLwoJCVV0aWxzLmdldEF2YXRhclNyYyA9IGZ1bmN0aW9uIChl
bWFpbCwgbmFtZSwgd2lkdGgsIGhlaWdodCkgewoJCQl2YXIgc3JjOwoKCQkJZW1h
aWwgPSBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpOwoKCQkJaWYoIG1haWxydS5J
c1JldGluYSAmJiB3aWR0aCA9PSAzMiApIHsKCQkJCXdpZHRoID0gNDU7CgkJCQlo
ZWlnaHQgPSA0NTsKCQkJfQoJCQkvKiogQG5hbWVzcGFjZSBtYWlscnUuYXZhSG9z
dCAqLwoJCQlzcmMgPSAnLy8nICsgbWFpbHJ1LmF2YUhvc3QgKyAnL3BpYz93aWR0
aD0nICsgKHdpZHRoKSArICcmaGVpZ2h0PScgKyAoaGVpZ2h0IHx8IHdpZHRoKSAr
ICcmZW1haWw9JyArIGVtYWlsOwoKCQkJaWYoIG5hbWUgKSB7CgkJCQluYW1lID0g
ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpOwoJCQkJc3JjICs9ICgnJm5hbWU9JyAr
IG5hbWUpOwoJCQl9CgoJCQlzcmMgKz0gKCcmdmVyc2lvbj0nICsgbWFpbHJ1WydB
dmF0YXJWZXJzaW9uJ10gKyAnJmJ1aWxkPScgKyBtYWlscnVbJ0F2YXRhckJ1aWxk
J10pOwoKCQkJcmV0dXJuIHNyYzsKCQl9OwoKCQlVdGlscy5nZXRBdmF0YXJFbWFp
bEJ5TWVzc2FnZSA9IGZ1bmN0aW9uIChNZXNzYWdlLCBvbmx5RnJvbSkgewoJCQl2
YXIgc3JjID0gIiIsIEZvbGRlciwgdG1wOwoKCQkJaWYoIE1lc3NhZ2UgKSB7CgkJ
CQlGb2xkZXIgPSBtYWlscnUuRm9sZGVycy5nZXRTYWZlKE1lc3NhZ2UuRm9sZGVy
SWQpOwoJCQkJaWYoICFvbmx5RnJvbSAmJiAoRm9sZGVyLmlzU2VudCgpIHx8IEZv
bGRlci5pc0RyYWZ0cygpKSApIHsKCQkJCQlpZiggTWVzc2FnZS5DYyB8fCBNZXNz
YWdlLlRvLmNvbnRhaW5zKCcsJykgKSB7CgkJCQkJCXNyYyA9ICdtdWx0aWNjQG11
bHRpY2MubWFpbC5ydSc7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQlzcmMgPSBh
anMuSHRtbC51bmVzY2FwZShNZXNzYWdlLlRvKTsKCQkJCQkJaWYoIHRtcCA9IHNy
Yy5tYXRjaChfcmVfZW1haWxfbWF0Y2hlcikgKSB7CgkJCQkJCQlzcmMgPSB0bXBb
Ml07CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlzcmMgPSBN
ZXNzYWdlLkZyb207CgkJCQl9CgkJCX0KCgkJCXJldHVybiBzcmM7CgkJfTsKCgkJ
LyoqCgkJICoKCQkgKiBAcGFyYW0ge09iamVjdH0gTWVzc2FnZQoJCSAqIEBwYXJh
bSB7bnVtYmVyfSB3aWR0aAoJCSAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQKCQkg
KiBAcGFyYW0ge2Jvb2xlYW49fSBvbmx5RnJvbQoJCSAqIEByZXR1cm4ge1N0cmlu
Z30KCQkgKi8KCQlVdGlscy5nZXRBdmF0YXJTcmNCeU1lc3NhZ2UgPSBmdW5jdGlv
biAoTWVzc2FnZSwgd2lkdGgsIGhlaWdodCwgb25seUZyb20pIHsKCQkJdmFyIHNy
YyA9ICIiCgkJCQksIHRtcAoJCQkJLCBlbWFpbAoJCQkJLCBuYW1lCgkJCQksIEZv
bGRlcgoJCQk7CgoJCQlpZiggT2JqZWN0LmlzT2JqZWN0KE1lc3NhZ2UpICkgewoJ
CQkJZW1haWwgPSBVdGlscy5nZXRBdmF0YXJFbWFpbEJ5TWVzc2FnZShNZXNzYWdl
LCBvbmx5RnJvbSk7CgoJCQkJRm9sZGVyID0gbWFpbHJ1LkZvbGRlcnMuZ2V0U2Fm
ZShNZXNzYWdlLkZvbGRlcklkKTsKCQkJCWlmKCAhb25seUZyb20gJiYgKEZvbGRl
ci5pc1NlbnQoKSB8fCBGb2xkZXIuaXNEcmFmdHMoKSkgKSB7CgkJCQkJaWYoICEo
TWVzc2FnZS5DYyB8fCBNZXNzYWdlLlRvLmNvbnRhaW5zKCcsJykpICkgewoJCQkJ
CQluYW1lID0gTWVzc2FnZS5Ub0xpc3Q7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSB7
CgkJCQkJbmFtZSA9IE1lc3NhZ2UuRnJvbVNob3J0OwoJCQkJCWlmKCBuYW1lICkg
ewoJCQkJCQluYW1lID0gYWpzLkh0bWwudW5lc2NhcGUoJC50cmltKG5hbWUpKTsK
CQkJCQl9IGVsc2UgewoJCQkJCQluYW1lID0gTWVzc2FnZS5Gcm9tTGlzdDsKCQkJ
CQkJaWYoIG5hbWUgKSB7CgkJCQkJCQluYW1lID0gYWpzLkh0bWwudW5lc2NhcGUo
JC50cmltKG5hbWUpKTsKCQkJCQkJCWlmKCB0bXAgPSBuYW1lLm1hdGNoKF9yZV9l
bWFpbF9tYXRjaGVyKSApIHsKCQkJCQkJCQluYW1lID0gdG1wWzFdOwoJCQkJCQkJ
fQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCXNyYyA9IFV0aWxzLmdldEF2YXRh
clNyYyhlbWFpbCwgbmFtZSwgd2lkdGgsIGhlaWdodCk7CgoJCQkJaWYoICFNZXNz
YWdlLlNQRiApIHsKCQkJCQlzcmMgKz0gJyZ0cnVzdD1mYWxzZSc7CgkJCQl9CgoJ
CQkJaWYoIG1haWxydS5BdmF0YXJOb0NhY2hlICkgewoJCQkJCXNyYyArPSAoJyZ1
aWQ9JyArIE1lc3NhZ2UuSWQgKyBtYWlscnUuQ3VycmVudFRpbWVzdGFtcCk7CgkJ
CQl9CgkJCX0KCgkJCXJldHVybiBzcmM7CgkJfTsKCgkJLyoqCgkJICoKCQkgKiBA
cGFyYW0ge09iamVjdH0gTWVzc2FnZQoJCSAqIEBwYXJhbSB7Ym9vbGVhbj19IG9u
bHlGcm9tCgkJICogQHJldHVybiB7U3RyaW5nfQoJCSAqLwoJCVV0aWxzLmdldEF2
YXRhclVybEJ5TWVzc2FnZSA9IGZ1bmN0aW9uIChNZXNzYWdlLCBvbmx5RnJvbSkg
ewoJCQl2YXIgdXJsID0gJycsIGVtYWlsOwoJCQlpZiAoT2JqZWN0LmlzT2JqZWN0
KE1lc3NhZ2UpKSB7CgkJCQllbWFpbCA9IFV0aWxzLmdldEF2YXRhckVtYWlsQnlN
ZXNzYWdlKE1lc3NhZ2UsIG9ubHlGcm9tKTsKCQkJCWlmIChlbWFpbCAhPSAnbXVs
dGljY0BtdWx0aWNjLm1haWwucnUnKSB7CgkJCQkJdXJsID0gbWFpbHJ1LmdldFVz
ZXJVcmwoZW1haWwsICdhdmF0YXInKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gdXJs
OwoJCX07CgoJCVV0aWxzLnVwZGF0ZU1lc3NhZ2VsaW5lQXZhdGFyID0gZnVuY3Rp
b24gKE1lc3NhZ2UsIGlkLCBvbmx5RnJvbSkgewoJCQl2YXIgbmV3U3JjID0gVXRp
bHMuZ2V0QXZhdGFyU3JjQnlNZXNzYWdlKE1lc3NhZ2UsIDMyLCBudWxsLCBvbmx5
RnJvbSksIGltYWdlOwoJCQlpbWFnZSA9IG5ldyBJbWFnZSgpOwoJCQlpbWFnZS5v
bmxvYWQgPSBmdW5jdGlvbiAoKSB7CgkJCQkkKCcjJyArIGlkKS5jc3MoJ2JhY2tn
cm91bmRJbWFnZScsICd1cmwoIicgKyBuZXdTcmMgKyAnIiknKTsKCQkJCWltYWdl
ID0gaW1hZ2Uub25sb2FkID0gbnVsbDsKCQkJfTsKCQkJaW1hZ2Uuc3JjID0gbmV3
U3JjOwoJCX07CgoJCS8qKgoJCSAqIEdldCBhdmF0YXIgc3JjIGZvciBtZXNzYWdl
bGluZSB3aXRoIHByZWxvYWQKCQkgKgoJCSAqIEBwYXJhbSB7T2JqZWN0fSBNZXNz
YWdlCgkJICogQHBhcmFtIHtTdHJpbmd9IGlkCgkJICogQHJldHVybiB7U3RyaW5n
fQoJCSAqLwoJCVV0aWxzLmdldE1lc3NhZ2VsaW5lQXZhdGFyID0gZnVuY3Rpb24g
KE1lc3NhZ2UsIGlkLCBvbmx5RnJvbSkgewoJCQl2YXIgbmV3U3JjID0gVXRpbHMu
Z2V0QXZhdGFyU3JjQnlNZXNzYWdlKE1lc3NhZ2UsIDMyLCBudWxsLCBvbmx5RnJv
bSksIGltYWdlOwoJCQl2YXIgYmFja2dyb3VuZEltYWdlID0gJCgnIycgKyBpZCku
Y3NzKCdiYWNrZ3JvdW5kSW1hZ2UnKSwgc3JjID0gbmV3U3JjOwoJCQlpZiAoYmFj
a2dyb3VuZEltYWdlKSB7CgkJCQlVdGlscy51cGRhdGVNZXNzYWdlbGluZUF2YXRh
cihNZXNzYWdlLCBpZCwgb25seUZyb20pOwoJCQkJc3JjID0gYmFja2dyb3VuZElt
YWdlLnJlcGxhY2UoX3JlYmFja2dyb3VuZGltYWdlLCAnJDEnKTsKCQkJfSBlbHNl
IHsKCQkJCS8vIE1BSUwtMTA0NTcKCQkJCWlmIChtYWlscnUgJiYgbWFpbHJ1LnVz
ZXJuYW1lICYmIG1haWxydS51c2VyZG9tYWluICYmIG1haWxydS5OZXdNc2dsaXN0
QXZhdGFyU3RhdGlzdGljKSB7CgkJCQkJaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKCQkJ
CQlpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CgkJCQkJCXZhciBmaWxlU2l6
ZSwgX2xvZzsKCQkJCQkJdHJ5IHsKCQkJCQkJCWZpbGVTaXplID0gaW1hZ2UuZmls
ZVNpemU7CgkJCQkJCX0gY2F0Y2ggKGUpIHt9CgkJCQkJCWlmIChmaWxlU2l6ZSkg
ewoJCQkJCQkJX2xvZyA9IHsKCQkJCQkJCQlsb2c6ICdNQUlMXzEzMjM4X3VzZXJf
YXZhdGFyXycsCgkJCQkJCQkJdXNlcmVtYWlsOiBtYWlscnUudXNlcmVtYWlsLAoJ
CQkJCQkJCWZyb206IFV0aWxzLmdldEF2YXRhckVtYWlsQnlNZXNzYWdlKE1lc3Nh
Z2UsIG9ubHlGcm9tKSwKCQkJCQkJCQltZXNzYWdlaWQ6IE1lc3NhZ2UuSWQKCQkJ
CQkJCX07CgkJCQkJCQlpZiAoZmlsZVNpemUgPD0gNjUwKSB7CgkJCQkJCQkJX2xv
Zy5sb2cgKz0gJ2RlZmF1bHQnOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQlfbG9n
LmxvZyArPSAnY3VzdG9tJzsKCQkJCQkJCX0KCQkJCQkJCW1haWxydS5nc3RhdChf
bG9nLCAndWE9MScpOwoJCQkJCQl9CgkJCQkJCWltYWdlID0gaW1hZ2Uub25sb2Fk
ID0gbnVsbDsKCQkJCQl9OwoJCQkJCWltYWdlLnNyYyA9IG5ld1NyYzsKCQkJCX0K
CQkJfQoJCQlyZXR1cm4gc3JjOwoJCX07CgoJCS8vIE1BSUwtMTY2NTQsIE1BSUwt
MTY2ODQsIE1BSUwtMTY3OTIKCQlVdGlscy5zcGlubmVyID0gbmV3IGZ1bmN0aW9u
KCkgewoJCQl2YXIga2V5ID0gbWFpbHJ1LnVzZXJlbWFpbCArICd8Y29sbGVjdG9y
LnNwaW5uZXInOwoKCQkJcmV0dXJuIHsKCQkJCXNob3c6IGZ1bmN0aW9uKCkgewoJ
CQkJCXZhciBpZCA9IG1haWxydS5nZXRGb2xkZXJJZCgpLAoJCQkJCQllbXB0eSA9
IGZhbHNlOwoKCQkJCQkvLyAxLiBFbXB0eSBmb2xkZXJzIGFyZSBub3QgaW1wb3J0
ZWQhCgkJCQkJLy8gMi4gU3lzdGVtIGZvbGRlcnMgYXJlIGNvbWJpbmVkCgkJCQkJ
Ly8gMy4gVGhlIHN0YXRlICdjcmVhdGUnIG9yICd3b3JrJyArIGFueSBlcnJvciBh
cmUgY29uc2lkZXJlZCBhcyAnY3JlYXRlJyBzdGF0ZQoJCQkJCXZhciBjb2xsZWN0
b3IgPSBtYWlscnUuZ2V0Q29sbGVjdG9ySW5mb0J5Rm9sZGVySWQoaWQpOwoJCQkJ
CXZhciBmb2xkZXIgPSBtYWlscnUuRm9sZGVycy5NYXBbaWRdOwoKCQkJCQlpZiAo
Zm9sZGVyKSB7CgkJCQkJCS8vIDQuIFNob3cgdGhlIHNwaW5uZXIgb25seSBvbmNl
IChvbmUgY3ljbGUgY29sbGVjdG9yKQoJCQkJCQlpZiAodGhpcy5nZXQoY29sbGVj
dG9yLmlkKSkgewoJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQl9CgkJCQkJCWVs
c2UgaWYgKCFjb2xsZWN0b3IuZXJyb3IgJiYgY29sbGVjdG9yLnN0YXRlID09ICd3
b3JrJykgewoJCQkJCQkJdGhpcy5zZXQoY29sbGVjdG9yLmlkKTsKCQkJCQkJCXJl
dHVybiBmYWxzZTsKCQkJCQkJfQoJCQkJCQllbHNlIGlmICghZm9sZGVyLk1lc3Nh
Z2VzKSB7CgkJCQkJCQkvLyA1LiBUaGVyZSBpcyBvbmx5IG9uZSBjb2xsZWN0b3Ig
YW5kIG9uZSBmb2xkZXIgKGluaXRpYWxseSkKCQkJCQkJCWlmIChtYWlscnUuSXNF
eHRlcm5hbEFjY291bnQgJiYgaWQgPT0gbWFpbHJ1LkZvbGRlci5JTkJPWCkgewoJ
CQkJCQkJCU9iamVjdC5mb3JFYWNoKG1haWxydS5jb2xsZWN0b3JzLCBmdW5jdGlv
bihjb2xsZWN0b3IpIHsKCQkJCQkJCQkJaWYgKGNvbGxlY3Rvci5zdGF0ZSA9PSAn
Y3JlYXRlJyB8fAoJCQkJCQkJCQkJKGNvbGxlY3Rvci5lcnJvciAmJiBjb2xsZWN0
b3Iuc3RhdGUgPT0gJ3dvcmsnKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJZW1wdHkg
PSB0cnVlOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSk7CgkJCQkJCQl9CgkJCQkJCQkv
LyA2LiBTeXN0ZW0gZm9sZGVyIDxJbmJveD4gaW5pdGlhbGx5IGlzIG5vdCBlbXB0
eQoJCQkJCQkJZWxzZSBpZiAoY29sbGVjdG9yLnN0YXRlID09ICdjcmVhdGUnIHx8
CgkJCQkJCQkJKGNvbGxlY3Rvci5lcnJvciAmJiBjb2xsZWN0b3Iuc3RhdGUgPT0g
J3dvcmsnKSkKCQkJCQkJCXsKCQkJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJCX0K
CQkJCQkJfQoJCQkJCX0KCgkJCQkJcmV0dXJuIGVtcHR5OwoJCQkJfSwKCgkJCQkn
c2V0JzogZnVuY3Rpb24oaWQpIHsKCQkJCQlpZiAoaWQpIHsKCQkJCQkJdHJ5IHsK
CQkJCQkJCXZhciBzcGlubmVyID0gc3RvcmUuZ2V0KGtleSkgfHwge307CgkJCQkJ
CQlzcGlubmVyW2lkXSA9IHRydWU7CgkJCQkJCQlzdG9yZS5zZXQoa2V5LCBzcGlu
bmVyKTsKCQkJCQkJfQoJCQkJCQljYXRjaChlKSB7fQoJCQkJCX0KCQkJCX0sCgoJ
CQkJJ2dldCc6IGZ1bmN0aW9uKGlkKSB7CgkJCQkJdmFyIGRhdGEgPSB7fTsKCQkJ
CQl0cnkgewoJCQkJCQlkYXRhID0gc3RvcmUuZ2V0KGtleSkgfHwge307CgkJCQkJ
fQoJCQkJCWNhdGNoKGUpIHt9CgkJCQkJcmV0dXJuIGRhdGFbaWRdOwoJCQkJfQoJ
CQl9CgkJfTsKCX0pKHdpbmRvdywgbWFpbHJ1LlV0aWxzKTsKCglqc0xvYWRlci5s
b2FkZWQoJ3ttYWlscnUudXRpbHN9bWFpbHJ1LlV0aWxzJywgMSk7CgovLyBkYXRh
L3J1L2ltYWdlcy9qcy9ydS91dGlscy9tYWlscnUuVXRpbHMuanMgZW5kCgovLyBk
YXRhL3J1L2ltYWdlcy9qcy9ydS9tYWlscnUuQVBJLmpzIHN0YXJ0CgoKLy8gZGF0
YS9ydS9pbWFnZXMvanMvcnUvbWFpbHJ1LmNvcmUuanMgc3RhcnQKCi8qZ2xvYmFs
IGNyZWF0ZVJhZGFyKi8KCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L21haWxydS5G
b2xkZXJzLmpzIHN0YXJ0CgoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvbW9kZWwv
bWFpbHJ1LkZvbGRlci5qcyBzdGFydAoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1
L21vZGVsL21haWxydS5Nb2RlbC5qcyBzdGFydAoKCihmdW5jdGlvbiAoc2NvcGUs
IF9zbGljZSwgdW5kZWYpewoJCS8qKgoJCSAqIEBjbGFzcwltYWlscnUuTW9kZWwK
CQkgKi8KCQl2YXIgTW9kZWwgPSBmdW5jdGlvbiAoKXsgdGhpcy5fX2NvbnN0cnVj
dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9OwoKCgkJTW9kZWwucHJvdG90eXBl
ID0gewoJCQljb25zdHJ1Y3RvcjogTW9kZWwsCgoJCQlfX3NlbGY6IE1vZGVsLAoK
CgkJCS8qKgoJCQkgKiBJZCBhdHRyaWJ1dGUgbmFtZQoJCQkgKiBAcGFyYW0ge1N0
cmluZ30KCQkJICovCgkJCWlkQXR0cjogJ2lkJywKCgoJCQkvKioKCQkJICogRGVm
YXVsdCBhdHRyaWJ1dGVzCgkJCSAqIEBwYXJhbSB7T2JqZWN0fQoJCQkgKi8KCQkJ
ZGVmYXVsdHM6IHt9LAoKCgkJCS8qKgoJCQkgKiBAY29uc3RydWN0b3IKCQkJICog
QHBhcmFtCXtPYmplY3R9CVtkYXRhXQoJCQkgKiBAcGFyYW0Je09iamVjdH0JW29w
dGlvbnNdCgkJCSAqLwoJCQlfX2NvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEsIG9w
dGlvbnMpewoJCQkJb3B0aW9ucwkJCT0gb3B0aW9ucyB8fCB7fTsKCgkJCQl0aGlz
Ll9mbnMJCT0ge307CS8vIGV2ZW50IGxpc3RlbmVycwoKCQkJCXRoaXMudWlkCQk9
IHRoaXMudW5pcUlkOwoJCQkJdGhpcy5hdHRycwkJPSBhanMuY2xvbmUodGhpcy5k
ZWZhdWx0cyk7CgkJCQl0aGlzLmNoYW5nZWQJPSB7fTsKCQkJCXRoaXMucHJldkF0
dHJzCT0ge307CgoJCQkJaWYoIGRhdGEgKXsKCQkJCQl0aGlzLnNldChkYXRhLCBv
cHRpb25zLnNpbGVudCk7CgkJCQl9CgoJCQkJdGhpcy5fX2xlZ28oKTsKCQkJfSwK
CgoJCQkvKioKCQkJICogQHByb3RlY3RlZAoJCQkgKi8KCQkJX19sZWdvOiBhanMu
RiwKCgoJCQkvKioKCQkJICogR2V0IG1vZGVsIGlkCgkJCSAqCgkJCSAqIEBwdWJs
aWMKCQkJICogQHJldHVybgl7U3RyaW5nfQoJCQkgKi8KCQkJZ2V0SWQ6IGZ1bmN0
aW9uICgpewoJCQkJcmV0dXJuCXRoaXMuaWQ7CgkJCX0sCgoKCQkJLyoqCgkJCSAq
IEJpbmQgZXZlbnQgbGlzdGVuZXIKCQkJICoKCQkJICogQHB1YmxpYwoJCQkgKiBA
cGFyYW0Je1N0cmluZ30JbmFtZQoJCQkgKiBAcGFyYW0Je0Z1bmN0aW9ufQlmbgoJ
CQkgKiBAcmV0dXJuCXttYWlscnUuTW9kZWx9CgkJCSAqLwoJCQlvbjogZnVuY3Rp
b24gKG5hbWUsIGZuKXsKCQkJCWlmKCAhdGhpcy5fZm5zW25hbWVdICkgdGhpcy5f
Zm5zW25hbWVdID0gW107CgkJCQl0aGlzLl9mbnNbbmFtZV0ucHVzaChmbik7CgkJ
CQlyZXR1cm4JdGhpczsKCQkJfSwKCgoJCQkvKioKCQkJICogVW5iaW5kIGV2ZW50
IGxpc3RlbmVyCgkJCSAqCgkJCSAqIEBwdWJsaWMKCQkJICogQHBhcmFtCXtTdHJp
bmd9CW5hbWUKCQkJICogQHBhcmFtCXtGdW5jdGlvbn0JZm4KCQkJICogQHJldHVy
bgl7bWFpbHJ1Lk1vZGVsfQoJCQkgKi8KCQkJb2ZmOiBmdW5jdGlvbiAobmFtZSwg
Zm4pewoJCQkJaWYoIG5hbWUgaW4gdGhpcy5fZm5zICl7CgkJCQkJdGhpcy5fZm5z
W25hbWVdCT0gYWpzLnJlbW92ZSh0aGlzLl9mbnNbbmFtZV0sIGZuLCB0cnVlKTsK
CQkJCX0KCQkJCXJldHVybgl0aGlzOwoJCQl9LAoKCgkJCS8qKgoJCQkgKiBEaXNw
YXRjaCBldmVudAoJCQkgKgoJCQkgKiBAcHVibGljCgkJCSAqIEBwYXJhbQl7U3Ry
aW5nfQluYW1lCgkJCSAqIEBwYXJhbQl7QXJyYXl9CQlbYXJnc10KCQkJICogQHJl
dHVybgl7dm9pZH0KCQkJICovCgkJCWVtaXQ6IGZ1bmN0aW9uIChuYW1lLCBhcmdz
KXsKCQkJCWlmKCBuYW1lIGluIHRoaXMuX2ZucyApewoJCQkJCXZhciBmbnMgPSB0
aGlzLl9mbnNbbmFtZV0sIGkgPSAwLCBuID0gZm5zLmxlbmd0aDsKCQkJCQlmb3Io
IDsgaSA8IG47IGkrKyApewoJCQkJCQlmbnNbaV0uYXBwbHkodGhpcywgYXJncyk7
CgkJCQkJfQoJCQkJfQoJCQl9LAoKCgkJCS8qKgoJCQkgKiBUcmlnZ2VyIGV2ZW50
CgkJCSAqCgkJCSAqIEBwdWJsaWMKCQkJICogQHBhcmFtCXtTdHJpbmd9CW5hbWUK
CQkJICogQHJldHVybgl7bWFpbHJ1Lk1vZGVsfQoJCQkgKi8KCQkJdHJpZ2dlcjog
ZnVuY3Rpb24gKG5hbWUvKiwgYXJncyovKXsKCQkJCXRoaXMuZW1pdChuYW1lLCBf
c2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKCQkJCXJldHVybgl0aGlzOwoJCQl9
LAoKCgkJCS8qKgoJCQkgKiBIYXMgYXR0cmlidXRlIGJ5IG5hbWUKCQkJICoKCQkJ
ICogQHB1YmxpYwoJCQkgKiBAcGFyYW0Je1N0cmluZ30JbmFtZQoJCQkgKiBAcmV0
dXJuCXtCb29sZWFufQoJCQkgKi8KCQkJaGFzOiBmdW5jdGlvbiAobmFtZSl7CgkJ
CQlyZXR1cm4JdGhpcy5hdHRyc1tuYW1lXSAhPT0gdW5kZWY7CgkJCX0sCgoKCQkJ
LyoqCgkJCSAqIEdldCBhdHRyaWJ1dGUgdmFsdWUgYnkgbmFtZQoJCQkgKgoJCQkg
KiBAcHVibGljCgkJCSAqIEBwYXJhbQl7U3RyaW5nfQluYW1lCgkJCSAqIEBwYXJh
bQl7Kn0JW2RlZl0KCQkJICogQHJldHVybgl7Kn0KCQkJICovCgkJCWdldDogZnVu
Y3Rpb24gKG5hbWUsIGRlZil7CgkJCQl2YXIgYXR0cnMgPSB0aGlzLmF0dHJzOwoJ
CQkJcmV0dXJuCWF0dHJzW25hbWVdID09PSB1bmRlZiA/IGRlZiA6IGF0dHJzW25h
bWVdCgkJCX0sCgoKCQkJLyoqCgkJCSAqIFNldCBhdHRyaWJ1dGVzCgkJCSAqCgkJ
CSAqIEBwdWJsaWMKCQkJICogQHBhcmFtcwl7Kn0JbmFtZQoJCQkgKiBAcGFyYW1z
CXsqfQlbdmFsXQoJCQkgKiBAcGFyYW0Je0Jvb2xlYW59CVtzaWxlbnRdCgkJCSAq
IEByZXR1cm4Je21haWxydS5Nb2RlbH0KCQkJICovCgkJCXNldDogZnVuY3Rpb24g
KG5hbWUsIHZhbCwgc2lsZW50KXsKCQkJCXZhciBhdHRyczsKCgkJCQlpZiggdHlw
ZW9mIG5hbWUgPT09ICdzdHJpbmcnICl7CgkJCQkJYXR0cnMgPSB7fTsKCQkJCQlh
dHRyc1tuYW1lXQk9IHZhbDsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCWF0dHJzCT0g
bmFtZTsKCQkJCQlzaWxlbnQJPSB2YWw7CgkJCQl9CgoJCQkJaWYoIHRoaXMuX3Nl
dChhdHRycywgc2lsZW50KSApewoJCQkJCXRoaXMuaWQJPSB0aGlzLmdldCh0aGlz
LmlkQXR0cik7CgkJCQkJIXNpbGVudCAmJiB0aGlzLmVtaXQoJ2NoYW5nZScsIFt0
aGlzLCB0aGlzLmNoYW5nZWRdKTsKCQkJCX0KCgkJCQlyZXR1cm4JdGhpczsKCQkJ
fSwKCgoJCQkvKioKCQkJICogR2V0IHByZXZpb3VzIGF0dHJpYnV0ZQoJCQkgKgoJ
CQkgKiBAcHVibGljCgkJCSAqIEBwYXJhbQl7U3RyaW5nfQluYW1lCgkJCSAqIEBy
ZXR1cm4Jeyp9CgkJCSAqLwoJCQlwcmV2OiBmdW5jdGlvbiAobmFtZSl7CgkJCQly
ZXR1cm4JdGhpcy5wcmV2QXR0cnNbbmFtZV07CgkJCX0sCgoKCQkJLyoqCgkJCSAq
IEBwcm90ZWN0ZWQKCQkJICogQHBhcmFtCXtPYmplY3R9CWF0dHJzCgkJCSAqIEBw
YXJhbQl7Qm9vbGVhbn0JW3NpbGVudF0KCQkJICogQHJldHVybgl7Qm9vbGVhbn0K
CQkJICovCgkJCV9zZXQ6IGZ1bmN0aW9uIChhdHRycywgc2lsZW50KXsKCQkJCXJl
dHVybgl0aGlzLl9zZXR0ZXIodGhpcy5hdHRycywgYXR0cnMsIHRoaXMuY2hhbmdl
ZCA9IHt9LCB0aGlzLnByZXZBdHRycyA9IHt9KTsKCQkJfSwKCgoJCQkvKioKCQkJ
ICogQWJzdHJhY3Qgc2V0dGVyCgkJCSAqCgkJCSAqIEBwcm90ZWN0ZWQKCQkJICog
QHBhcmFtIHtPYmplY3R9IGRzdAl0YXJnZXQgb2JqZWN0CgkJCSAqIEBwYXJhbSB7
T2JqZWN0fSBzcmMJc291cmNlIG9iamVjdAoJCQkgKiBAcGFyYW0ge09iamVjdH0g
Y2hhbmdlZAljaGFuZ2VkIGF0dHJpYnV0ZXMKCQkJICogQHBhcmFtIHtPYmplY3R9
IHByZXZBdHRycyAgcHJldmlvdXMgYXR0cmlidXRlcwoJCQkgKiBAcmV0dXJuIHtC
b29sZWFufQoJCQkgKi8KCQkJX3NldHRlcjogZnVuY3Rpb24oZHN0LCBzcmMsIGNo
YW5nZWQsIHByZXZBdHRycyl7CgkJCQl2YXIKCQkJCQkgIGtleQoJCQkJCSwgcmVz
ID0gZmFsc2UKCQkJCQksIG5WYWwKCQkJCQksIG9WYWwKCQkJCTsKCgkJCQlmb3Io
IGtleSBpbiBzcmMgKSBpZiggc3JjLmhhc093blByb3BlcnR5KGtleSkgKXsKCQkJ
CQlvVmFsCT0gZHN0W2tleV07CgkJCQkJblZhbAk9IHNyY1trZXldOwoKCQkJCQlp
ZiggX25vdEVxdWFsKG9WYWwsIG5WYWwpICl7CgkJCQkJCXJlcyA9IHRydWU7CgkJ
CQkJCWRzdFtrZXldID0gblZhbDsKCQkJCQkJY2hhbmdlZFtrZXldID0gblZhbDsK
CQkJCQkJcHJldkF0dHJzW2tleV0gPSBvVmFsOwoJCQkJCX0KCQkJCX0KCgkJCQly
ZXR1cm4JcmVzOwoJCQl9LAoKCgkJCS8qKgoJCQkgKiBDb252ZXJ0IG1vZGVsIHRv
IEpTT04KCQkJICoKCQkJICogQHB1YmxpYwoJCQkgKiBAcmV0dXJuCXtPYmplY3R9
CgkJCSAqLwoJCQl0b0pTT046IGZ1bmN0aW9uICgpewoJCQkJcmV0dXJuCWFqcy5j
bG9uZSh0aGlzLmF0dHJzKTsKCQkJfQoKCQl9OwoKCgoJCU1vZGVsLmV4dGVuZCA9
IGZ1bmN0aW9uIChtZXRob2RzKXsKCQkJdmFyCgkJCQkgIEV4dCA9IGZ1bmN0aW9u
ICgpeyB0aGlzLl9fY29uc3RydWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0K
CQkJCSwgRiA9IGZ1bmN0aW9uICgpe30KCQkJOwoKCQkJRi5wcm90b3R5cGUgPSB0
aGlzLnByb3RvdHlwZTsKCQkJRXh0LnByb3RvdHlwZSA9IG5ldyBGOwoJCQlFeHQu
ZXh0ZW5kID0gdGhpcy5leHRlbmQ7CgoJCQlpZiggbWV0aG9kcyApewoJCQkJZm9y
KCB2YXIga2V5IGluIG1ldGhvZHMgKSBpZiggbWV0aG9kcy5oYXNPd25Qcm9wZXJ0
eShrZXkpICl7CgkJCQkJRXh0LnByb3RvdHlwZVtrZXldID0gbWV0aG9kc1trZXld
OwoJCQkJfQoJCQl9CgoJCQlFeHQucHJvdG90eXBlLl9fc2VsZiA9IEV4dDsKCgkJ
CXJldHVybglFeHQ7CgkJfTsKCgoJCWZ1bmN0aW9uIF9ub3RFcXVhbChhY3R1YWws
IGV4cGVjdGVkKXsKCQkJdmFyCgkJCQkgIGtleQoJCQkJLCByZXMJPSBmYWxzZQoJ
CQkJLCBlVHlwZSA9IHR5cGVvZiBleHBlY3RlZAoJCQk7CgoJCQlpZiggdHlwZW9m
IGFjdHVhbCAhPT0gZVR5cGUgJiYgZVR5cGUgPT09ICdvYmplY3QnICl7CgkJCQly
ZXMJPSB0cnVlOwoJCQl9CgkJCWVsc2UgaWYoIGVUeXBlID09PSAnb2JqZWN0JyAp
ewoJCQkJZm9yKCBrZXkgaW4gZXhwZWN0ZWQgKSBpZiggZXhwZWN0ZWQuaGFzT3du
UHJvcGVydHkoa2V5KSApewoJCQkJCWlmKCBfbm90RXF1YWwoYWN0dWFsW2tleV0s
IGV4cGVjdGVkW2tleV0pICl7CgkJCQkJCXJlcwk9IHRydWU7CgkJCQkJCWJyZWFr
OwoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlIHsKCQkJCXJlcwk9IGFjdHVhbCAh
PSBleHBlY3RlZDsKCQkJfQoKCQkJcmV0dXJuCXJlczsKCQl9CgoKCQkvLyBAZXhw
b3J0CgkJc2NvcGUuTW9kZWwgPSBNb2RlbDsKCgoJCS8qKgoJCSAqIEBjbGFzcwlt
YWlscnUuT2xkTW9kZWwKCQkgKiBAZXhwb3J0CgkJICovCgkJc2NvcGUuT2xkTW9k
ZWwgPSBNb2RlbC5leHRlbmQoewoJCQlpZEF0dHI6ICdJZCcsCgoJCQlnZXQ6IGZ1
bmN0aW9uIChrZXkpewoJCQkJcmV0dXJuCXRoaXNba2V5XTsKCQkJfSwKCgkJCWdl
dENoYW5nZXM6IGZ1bmN0aW9uICgpewoJCQkJcmV0dXJuCXRoaXMuY2hhbmdlZDsK
CQkJfSwKCgkJCWluYzogZnVuY3Rpb24gKGtleSwgbnVtKXsKCQkJCXJldHVybgl0
aGlzLnNldChrZXksIE1hdGgubWF4KH5+dGhpcy5nZXQoa2V5KSArIG51bSwgMCkp
OwoJCQl9LAoKCQkJX3NldDogZnVuY3Rpb24gKGF0dHJzKXsKCQkJCXJldHVybgl0
aGlzLl9zZXR0ZXIodGhpcywgYXR0cnMsIHRoaXMuY2hhbmdlZCA9IHt9LCB0aGlz
LnByZXZBdHRycyA9IHt9KTsKCQkJfSwKCQkJCgkJCXRvSlNPTjogZnVuY3Rpb24g
KCl7CgkJCQlyZXR1cm4JdGhpczsKCQkJfQoJCX0pOwoJfSkobWFpbHJ1LCBbXS5z
bGljZSk7CgoKCWpzTG9hZGVyLmxvYWRlZCgne21haWxydS5tb2RlbH1tYWlscnUu
TW9kZWwnLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L21vZGVsL21haWxy
dS5Nb2RlbC5qcyBlbmQKCihmdW5jdGlvbiAoKXsKCQkvKioKCQkgKiBAY2xhc3MJ
bWFpbHJ1LkZvbGRlcgoJCSAqIEBhdXRob3IJUnViYVhhCTx0cmFzaEBydWJheGEu
b3JnPgoJCSAqIEBjb250cmlidXRvciBBbGV4YW5kZXIgQWJhc2hraW4gPGEuYWJh
c2hraW5AY29ycC5tYWlsLnJ1PgoJCSAqLwoJCXZhciBGb2xkZXIJPSBtYWlscnUu
T2xkTW9kZWwuZXh0ZW5kKHsKCQkJX19sZWdvOiBmdW5jdGlvbiAoKXsKCQkJCXRo
aXMuTmFtZSAgID0gdGhpcy5OYW1lIHx8IExhbmcuc3RyKCdmb2xkZXIubmFtZS4n
K3RoaXMuaWQpOwoJCQl9LAoKCQkJdHJhbnNhY3Rpb246IGZ1bmN0aW9uIChzdGFy
dCl7CgkJCQlpZiggc3RhcnQgKXsKCQkJCQl0aGlzLl9fY29weQk9IHt9OwoJCQkJ
CWFqcy5lYWNoKCdOYW1lIFVucmVhZCBNZXNzYWdlcyBTZWN1cmUnLnNwbGl0KCcg
JyksIGZ1bmN0aW9uIChrZXkpewoJCQkJCQl0aGlzLl9fY29weVtrZXldID0gdGhp
cy5nZXQoa2V5KTsKCQkJCQl9LCB0aGlzKTsKCQkJCX0gZWxzZSB7CgkJCQkJZGVs
ZXRlIHRoaXMuX19jb3B5OwoJCQkJfQoJCQkJcmV0dXJuIHRoaXM7CgkJCX0sCgoJ
CQlyb2xsYmFjazogZnVuY3Rpb24gKCkgewoJCQkJaWYoIHRoaXMuX19jb3B5ICl7
CgkJCQkJdGhpcy5zZXQodGhpcy5fX2NvcHkpOwoJCQkJfQoJCQkJcmV0dXJuCXRo
aXMudHJhbnNhY3Rpb24oZmFsc2UpOwoJCQl9LAoKCQkJZ2V0Um9vdDogZnVuY3Rp
b24gKCkgewoJCQkJLyoqIEBuYW1lc3BhY2UgdGhpcy5QYXJlbnRJZCAqLwoJCQkJ
cmV0dXJuIG1haWxydS5Gb2xkZXJzLmdldCh0aGlzLlBhcmVudElkKTsKCQkJfSwK
CgkJCWlzUm9vdDogZnVuY3Rpb24gKCkgewoJCQkJLyoqIEBuYW1lc3BhY2UgdGhp
cy5Jc1N1YmZvbGRlciAqLwoJCQkJcmV0dXJuICF0aGlzLklzU3ViZm9sZGVyOwoJ
CQl9LAoKCQkJaXNFbXB0eTogZnVuY3Rpb24gKCkgewoJCQkJcmV0dXJuICF0aGlz
Lk1lc3NhZ2VzOwoJCQl9LAoKCQkJaW5Gb2xkZXI6IGZ1bmN0aW9uIChpZCl7CgkJ
CQlyZXR1cm4JdGhpcy5pc1Jvb3QoKQoJCQkJCQkJPyB0aGlzLklkID09IGlkCgkJ
CQkJCQk6ICgodGhpcy5QYXJlbnRJZCA9PSBpZCkgfHwgbWFpbHJ1LkZvbGRlcnMu
Z2V0U2FmZSh0aGlzLlBhcmVudElkKS5pbkZvbGRlcihpZCkpCgkJCQkJCTsKCQkJ
fSwKCgkJCWlzU2VjdXJlOiBmdW5jdGlvbiAoKXsKCQkJCS8qKiBAbmFtZXNwYWNl
IHRoaXMuU2VjdXJlICovCgkJCQlyZXR1cm4gdGhpcy5TZWN1cmUgPj0gRm9sZGVy
LlNFQ1VSRTsKCQkJfSwKCgkJCWlzU2VjdXJlT3BlbjogZnVuY3Rpb24gKCl7CgkJ
CQlyZXR1cm4gIXRoaXMuaXNTZWN1cmUoKSB8fCAodGhpcy5TZWN1cmUgPT0gRm9s
ZGVyLlNFQ1VSRV9PUEVOKTsKCQkJfSwKCgkJCWlzSW5ib3g6IGZ1bmN0aW9uICgp
ewoJCQkJcmV0dXJuIHRoaXMuaW5Gb2xkZXIoRm9sZGVyLklOQk9YKTsKCQkJfSwK
CgkJCWlzQnVsazogZnVuY3Rpb24gKCl7CgkJCQlyZXR1cm4gdGhpcy5pbkZvbGRl
cihGb2xkZXIuQlVMSyk7CgkJCX0sCgoJCQlpc1NwYW06IGZ1bmN0aW9uICgpewoJ
CQkJcmV0dXJuCXRoaXMuaXNCdWxrKCk7CgkJCX0sCgoJCQlpc1NlbnQ6IGZ1bmN0
aW9uICgpewoJCQkJcmV0dXJuIHRoaXMuaW5Gb2xkZXIoRm9sZGVyLlNFTlQpOwoJ
CQl9LAoKCQkJaXNEcmFmdHM6IGZ1bmN0aW9uICgpewoJCQkJcmV0dXJuIHRoaXMu
aW5Gb2xkZXIoRm9sZGVyLkRSQUZUUyk7CgkJCX0sCgoJCQlpc1RyYXNoOiBmdW5j
dGlvbiAoKXsKCQkJCXJldHVybiB0aGlzLmluRm9sZGVyKEZvbGRlci5UUkFTSCk7
CgkJCX0sCgoJCQlpc01SSU06IGZ1bmN0aW9uICgpewoJCQkJcmV0dXJuIHRoaXMu
aW5Gb2xkZXIoRm9sZGVyLk1SSU0pOwoJCQl9LAoKCQkJZ2V0VHlwZTogZnVuY3Rp
b24gKCl7CgkJCQlyZXR1cm4gRm9sZGVyLlRZUEVTW3RoaXMuSWRdIHx8IEZvbGRl
ci5UWVBFUy5VU0VSOwoJCQl9LAoKCQkJZ2V0SGFzaDogZnVuY3Rpb24gKCl7CgkJ
CQlyZXR1cm4gW3RoaXMuSWQsIHRoaXMuTmFtZSwgdGhpcy5TZWN1cmUsIHRoaXMu
VW5yZWFkLCB0aGlzLk1lc3NhZ2VzLCB0aGlzLlBhcmVudElkXS5qb2luKCcnKTsK
CQkJfSwKCgkJCV9zZXQ6IGZ1bmN0aW9uIChhdHRycywgc2lsZW50KXsKCQkJCXZh
ciByZXMgPSB0aGlzLl9zZXR0ZXIodGhpcywgYXR0cnMsIHRoaXMuY2hhbmdlZCA9
IHt9LCB0aGlzLnByZXZBdHRycyA9IHt9KTsKCgkJCQlpZiggcmVzICl7CgkJCQkJ
dGhpcy5pZCA9IHRoaXMuSWQ7IC8vIGZvcmNlIHNldAoKCQkJCQlpZiggdGhpcy5p
ZCA+PSAwICYmICFzaWxlbnQgKXsKCQkJCQkJKG1haWxydS5FdmVudHMgIT09IHVu
ZGVmKSAmJiBtYWlscnUuRXZlbnRzLmZpcmUoJ3VwZGF0ZWQuZm9sZGVyJywgdGhp
cyk7CgkJCQkJCW1haWxydS5Gb2xkZXJzLnJlY2FsY0NvdW50ZXJzKCk7CgkJCQkJ
fQoJCQkJfQoKCQkJCXJldHVybglyZXM7CgkJCX0sCgoJCQl0b0pTT046IGZ1bmN0
aW9uICgpewoJCQkJcmV0dXJuCXRoaXM7CgkJCX0sCgoJCQljbGVhcjogZnVuY3Rp
b24gKCl7CgkJCQl2YXIgZGYgPSAkLkRlZmVycmVkKCk7CgoJCQkJdGhpcy5lbWl0
KCdjbGVhcicsIHRoaXMpOwoJCQkJJC5ldmVudC50cmlnZ2VyKHsgdHlwZTogJ2Jl
Zm9yZWZvbGRlcmNsZWFyJywgZm9sZGVyOiB0aGlzIH0pOwoJCQkJbWFpbHJ1Lmxv
ZygnZm9sZGVyLmNsZWFyJywgdGhpcy5pZCk7CgoJCQkJaWYoICF0aGlzLl9fY2xl
YXJEZWZlciApewoJCQkJCXRoaXMuX19jbGVhckRlZmVyID0gZGY7CgoJCQkJCWlm
KCAhdGhpcy5pZCApewoJCQkJCQlkZi5yZWplY3QoKTsKCQkJCQkJbWFpbHJ1Lmxv
ZygnZm9sZGVyLmNsZWFyLmZhaWwnLCB0aGlzLmlkKTsKCQkJCQl9CgkJCQkJZWxz
ZSB7CgkJCQkJCW1haWxydS5BamF4KHsKCQkJCQkJCXVybDogIi9jZ2ktYmluL2Ns
ZWFyZm9sZGVyIiwKCQkJCQkJCXR5cGU6ICJQT1NUIiwKCQkJCQkJCWRhdGE6IHsg
YWpheF9jYWxsOiAxLCBmdW5jX25hbWU6ICdjbGVhcl9mb2xkZXInLCBmb2xkZXI6
IHRoaXMuaWQgfSwKCQkJCQkJCWlzVXNlcjogdHJ1ZSwKCQkJCQkJCWNvbXBsZXRl
OiBmdW5jdGlvbiAoUil7CgkJCQkJCQkJdGhpcy5fX2NsZWFyRGVmZXIgPSBudWxs
OwoJCQkJCQkJCWRmW1IuaXNPSygpID8gJ3Jlc29sdmUnIDogJ3JlamVjdCddKFIp
OwoKCQkJCQkJCQlpZiggUi5pc09LKCkgKXsKCQkJCQkJCQkJdGhpcy5zZXQoeyBV
bnJlYWQ6IDAsIE1lc3NhZ2VzOiAwIH0pOwoJCQkJCQkJCQltYWlscnUuTWVzc2Fn
ZXMuc2V0KHRoaXMuaWQsIFtdLCBhanMubm93KCkpOwoJCQkJCQkJCQltYWlscnUu
bG9nKCdmb2xkZXIuY2xlYXIuZG9uZScsIHRoaXMuaWQpOwoJCQkJCQkJCX0KCQkJ
CQkJCQllbHNlIHsKCQkJCQkJCQkJbWFpbHJ1LmxvZygnZm9sZGVyLmNsZWFyLmZh
aWwnLCB0aGlzLmlkKTsKCQkJCQkJCQl9CgoJCQkJCQkJCSQuZXZlbnQudHJpZ2dl
cih7IHR5cGU6ICdmb2xkZXJjbGVhcicsIGZvbGRlcjogdGhpcyB9LCBSKTsKCQkJ
CQkJCX0uYmluZCh0aGlzKQoJCQkJCQl9KTsKCQkJCQl9CgkJCQl9CgoJCQkJcmV0
dXJuCXRoaXMuX19jbGVhckRlZmVyOwoJCQl9LAoKCQkJZ2V0VXJsOiBmdW5jdGlv
biAoKXsKCQkJCXZhciB0eXBlID0gRm9sZGVyLlRZUEVTW3RoaXMuaWRdOwoJCQkJ
cmV0dXJuCScvbWVzc2FnZXMvJyArICh0eXBlID8gdHlwZS50b0xvd2VyQ2FzZSgp
IDogJ2ZvbGRlci8nICsgdGhpcy5pZCkgKyAnLyc7CgkJCX0KCQl9KTsKCgkJYWpz
LmV4dGVuZChGb2xkZXIsIHsKCQkJICBJTkJPWDoJCTAKCQkJLCBCVUxLOgkJCTk1
MAoJCQksIFNQQU06CQkJOTUwCgkJCSwgU0VOVDoJCQk1MDAwMDAKCQkJLCBEUkFG
VFM6CQk1MDAwMDEKCQkJLCBUUkFTSDoJCTUwMDAwMgoJCQksIE1SSU06CQkJNTAw
MDAzCgkJCSwgTVJJTV9BUkNIOgk1MDAwMDUKCgkJCSwgVU5SRUFEOgkJNTAwMDA2
CgkJCSwgRkxBR0dFRDoJCTUwMDAwNwoJCQksIEFUVEFDSDoJCTUwMDAwOAoKCQkJ
LCBTRUNVUkU6CQkxCgkJCSwgU0VDVVJFX09QRU46CTIKCgkJCSwgRklMRVNFQVJD
SDoJLTIKCgkJCSwgVFlQRVM6CQl7CgkJCQkgIDA6CQknSW5ib3gnCgkJCQksIDk1
MDoJCSdTcGFtJwoJCQkJLCA1MDAwMDA6CSdTZW50JwoJCQkJLCA1MDAwMDE6CSdE
cmFmdHMnCgkJCQksIDUwMDAwMjoJJ1RyYXNoJwoJCQkJLCA1MDAwMDM6CSdNUklN
JwoJCQkJLCBVU0VSOgkJJ3VzZXInCgkJCX0KCQl9KTsKCgkJLy8gQGV4cG9ydAoJ
CW1haWxydS5Gb2xkZXIgPSBGb2xkZXI7Cgl9KSgpOwoKCWpzTG9hZGVyLmxvYWRl
ZCgne21haWxydS5tb2RlbH1tYWlscnUuRm9sZGVyJywgMSk7CgovLyBkYXRhL3J1
L2ltYWdlcy9qcy9ydS9tb2RlbC9tYWlscnUuRm9sZGVyLmpzIGVuZAoKLyoqCgkg
KiBAY2xhc3MJbWFpbHJ1LkZvbGRlcnMKCSAqIEBhdXRob3IJUnViYVhhCTx0cmFz
aEBydWJheGEub3JnPgoJICovCgoJanNDbGFzcwoJCS5jcmVhdGUoJ21haWxydS5G
b2xkZXJzJykKCQkuc3RhdGljcyh7CgkJCSAgSUQ6CQkwCgkJCSwgTGlzdDoJCVtd
CgkJCSwgTWFwOgkJe30KCQkJLCBVTlJFQUQ6CTAKCQkJLCBNRVNTQUdFUzoJMAoJ
CX0pCgkJLnN0YXRpY3MoewoKCQlzZXRJZDogZnVuY3Rpb24gKGlkLCBhKXsKCQkJ
aWYoICF0aGlzLmlzUmVhZHkgfHwgKGlkICE9PSB2b2lkIDApICYmICh0aGlzLklE
ICE9IGlkKSB8fCBhICl7CgkJCQltYWlscnUuRXZlbnRzLmZpcmUoJ3NlbGVjdC5m
b2xkZXInLCBbdGhpcy5JRCwgdGhpcy5JRCA9IGlkXSk7CgkJCQlyZXR1cm4JdHJ1
ZTsKCQkJfQoJCQlyZXR1cm4JZmFsc2U7CgkJfSwKCgkJdXBkOiBmdW5jdGlvbiAo
aWQsIERhdGEsIGZvcmNlKXsKCQkJaWYgKCEoaWQgaW4gdGhpcy5NYXApKSB7CgkJ
CQl0aGlzLk1hcFtpZF0gPSBuZXcgbWFpbHJ1LkZvbGRlcih7CgkJCQkJSWQ6IGlk
LAoJCQkJCVVucmVhZDogMCwKCQkJCQlNZXNzYWdlczogMAoJCQkJfSwKCQkJCXsK
CQkJCQlzaWxlbnQ6IGZvcmNlCgkJCQl9KTsKCQkJfQoKCQkJdGhpcy5NYXBbaWRd
LnNldChEYXRhLCBmb3JjZSk7CgkJCXJldHVybiB0aGlzLk1hcFtpZF07CgkJfSwK
CgkJc2V0OiBmdW5jdGlvbiAoZm9sZGVycywgaGFzaCwgZm9yY2UpIHsKCQkJdmFy
IGxpc3QgPSBbXTsKCgkJCXRoaXMuaGFzaAk9IGhhc2g7CgkJCXRoaXMuQ09VTlQJ
PSBmb2xkZXJzLmxlbmd0aDsKCgkJCUFycmF5LmZvckVhY2goZm9sZGVycywgZnVu
Y3Rpb24gKGZvbGRlcikgewoJCQkJbGlzdC5wdXNoKG1haWxydS5Gb2xkZXJzLnVw
ZChmb2xkZXIuSWQsIGZvbGRlciwgZm9yY2UpKTsKCQkJfSwgdGhpcyk7CgoJCQl0
aGlzLkxpc3QgPSBsaXN0OwoKCQkJaWYgKGZvcmNlICE9PSAxKSB7CgkJCQltYWls
cnUuRXZlbnRzLmZpcmUoJ3VwZGF0ZS5mb2xkZXJzJywgdGhpcy5MaXN0KTsKCQkJ
fQoJCX0sCgoJCWdldDogZnVuY3Rpb24gKGlkLCBkZWYpIHsKCQkJcmV0dXJuIHRo
aXMuTWFwW2lkID0gZGVmaW5lZChpZCwgbWFpbHJ1LmdldEZvbGRlcklkKCkpXSB8
fCAoZGVmICE9PSAgdm9pZCAwID8gdGhpcy5tYWtlKGRlZiwgaWQpIDogZGVmKTsK
CQl9LAoKCQlnZXRTYWZlOiBmdW5jdGlvbiAoaWQpIHsKCQkJcmV0dXJuIHRoaXMu
Z2V0KGlkLCB0cnVlKTsKCQl9LAoKCQlnZXRBbGw6IGZ1bmN0aW9uICgpIHsKCQkJ
cmV0dXJuIHRoaXMuTGlzdDsKCQl9LAoKCQlnZXRIYXNoOiBmdW5jdGlvbiAoKSB7
CgkJCXJldHVybiB0aGlzLmhhc2g7CgkJfSwKCgkJZ2V0U2VhcmNoOiBmdW5jdGlv
biAoaWQpIHsKCQkJaWYoIGlkID09PSAgdm9pZCAwICkgaWQgPSB+fkdFVC5xX2Zv
bGRlcjsKCQkJcmV0dXJuIHRoaXMuZ2V0U2FmZSgtMSAtIChpZCA+PSAwID8gaWQg
OiAwKSk7CgkJfSwKCgkJaGFzQ2FjaGU6CWZ1bmN0aW9uIChpZCwgcGFnZSl7CgkJ
CS8vINCd0LUg0LzQtdGC0L7QtCwg0LAg0LHRgNC10LQhCgkJCWlkCQk9IE1hdGgu
bWF4KHBhcnNlSW50KGlkIHx8IDApLCAwKTsKCQkJcGFnZQk9IE1hdGgubWF4KHBh
cnNlSW50KHBhZ2UgfHwgMCksIDEpOwoKCQkJdmFyIEYgPSBtYWlscnUuRm9sZGVy
cy5nZXQoIGlkICksIGFyTSA9IG1haWxydS5NZXNzYWdlcy5nZXRCeUZvbGRlcihp
ZCwgcGFnZSk7CgkJCXJldHVybglGICYmICghRlttYWlscnUudGhyZWFkcyA/ICdU
aHJlYWRzJyA6ICdNZXNzYWdlcyddIHx8ICEhYXJNLmxlbmd0aCk7CgkJfSwKCgkJ
bWFrZTogZnVuY3Rpb24gKHByb3BzLCBpZCl7CgkJCWlmKCBwcm9wcyA9PT0gdHJ1
ZSApIHByb3BzID0ge307CgkJCWlmKCBwcm9wcy5JZCA9PT0gdm9pZCAwICkgcHJv
cHMuSWQgPSBpZDsKCgkJCXJldHVybgluZXcgbWFpbHJ1LkZvbGRlcihwcm9wcywg
eyBzaWxlbnQ6IHRydWUgfSk7CgkJfSwKCgkJcmVjYWxjQ291bnRlcnM6IGZ1bmN0
aW9uICgpewoJCQl2YXIgdW5yZWFkID0gMAoJCQkJLCBtZXNzYWdlcyA9IDAKCQkJ
OwoKCQkJT2JqZWN0LmZvckVhY2godGhpcy5NYXAsIGZ1bmN0aW9uIChmb2xkZXIp
ewoJCQkJaWYgKCFmb2xkZXIuaXNCdWxrKCkgJiYgIWZvbGRlci5pc1RyYXNoKCkp
IHsKCQkJCQl1bnJlYWQgKz0gZm9sZGVyLlVucmVhZDsKCQkJCX0KCgkJCQltZXNz
YWdlcyArPSBmb2xkZXIuTWVzc2FnZXM7CgkJCX0pOwoKCQkJbWFpbHJ1LkZvbGRl
cnMuVU5SRUFEID0gdW5yZWFkOwoJCQltYWlscnUuRm9sZGVycy5NRVNTQUdFUyA9
IG1lc3NhZ2VzOwoKCQkJJCh3aW5kb3cpLnRyaWdnZXJIYW5kbGVyKCd1cGRhdGVt
ZXNzYWdlc2NvdW50JywgWyB1bnJlYWQgXSk7CgkJfSwKCgkJY29udmVydFRocmVh
ZHM6IGZ1bmN0aW9uIChmb2xkZXJzKXsKCQkJcmV0dXJuIEFycmF5Lm1hcChmb2xk
ZXJzLCBmdW5jdGlvbiAoZm9sZGVyKSB7CgkJCQkvKiogQG5hbWVzcGFjZSBmb2xk
ZXIuc2VjdXJpdHkgKi8KCQkJCS8qKiBAbmFtZXNwYWNlIGZvbGRlci50aHJlYWRz
X3RvdGFsICovCgkJCQkvKiogQG5hbWVzcGFjZSBmb2xkZXIudGhyZWFkc191bnJl
YWQgKi8KCgkJCQlyZXR1cm4gewoJCQkJCUlkOiBmb2xkZXIuaWQsCgkJCQkJTmFt
ZTogZm9sZGVyLm5hbWUgfHwgTGFuZy5zdHIoJ2ZvbGRlci5uYW1lLicrZm9sZGVy
LmlkKSwKCQkJCQlVbnJlYWQ6IGZvbGRlci5tZXNzYWdlc191bnJlYWQsCgkJCQkJ
TWVzc2FnZXM6IGZvbGRlci5tZXNzYWdlc190b3RhbCwKCQkJCQlUaHJlYWRzOiBm
b2xkZXIudGhyZWFkc190b3RhbCwKCQkJCQlUaHJlYWRzVW5yZWFkOiBmb2xkZXIu
dGhyZWFkc191bnJlYWQsCgkJCQkJU2VjdXJlOiArZm9sZGVyLnNlY3VyaXR5LAoJ
CQkJCVBhcmVudElkOiBmb2xkZXIucGFyZW50LAoJCQkJCUlzU3ViZm9sZGVyOiBm
b2xkZXIucGFyZW50ICE9IC0xCgkJCQl9OwoJCQl9KTsKCQl9Cgl9KTsKCglBcnJh
eS5mb3JFYWNoKCd0cmFuc2FjdGlvbiByb2xsYmFjaycuc3BsaXQoJyAnKSwgZnVu
Y3Rpb24gKG5hbWUpIHsKCQltYWlscnUuRm9sZGVyc1tuYW1lXSA9IGZ1bmN0aW9u
ICgpewoJCQl2YXIgYXJncyA9IGFyZ3VtZW50czsKCgkJCUFycmF5LmZvckVhY2go
dGhpcy5nZXRBbGwoKSwgZnVuY3Rpb24gKGZvbGRlcikgewoJCQkJZm9sZGVyW25h
bWVdLmFwcGx5KGZvbGRlciwgYXJncyk7CgkJCX0pOwoJCX0KCX0pOwoKCgkvKiB+
fn4gTUFJTFJVICAtVjItICBNRVRIT0RTIH5+fiAqLwoJbWFpbHJ1LkZvbGRlcnMu
ZmluZCA9IGZ1bmN0aW9uIChkYXRhKXsKCQl2YXIgZGVmZXIgPSBuZXcgJC5EZWZl
cnJlZDsKCQltYWlscnUuRm9sZGVycy5maW5kQWxsKCkuZmFpbChkZWZlci5yZWpl
Y3QpLmRvbmUoZnVuY3Rpb24gKCl7CgkJCXZhciBmb2xkZXIgPSBtYWlscnUuRm9s
ZGVycy5nZXRTYWZlKCBNYXRoLm1heChkYXRhLmlkfDAsIDApICk7CgkJCWRlZmVy
LnJlc29sdmUoZm9sZGVyKTsKCQl9KTsKCQlyZXR1cm4JZGVmZXIucHJvbWlzZSgp
OwoJfTsKCgoJbWFpbHJ1LkZvbGRlcnMuZmluZEFsbCA9IGZ1bmN0aW9uICgpewoJ
CXZhciBkZWZlciA9IHRoaXMuX2RlZmVyQWxsLCBmb2xkZXJzID0gbWFpbHJ1LkZv
bGRlcnMuZ2V0QWxsKCk7CgoJCWlmKCAhZGVmZXIgKXsKCQkJZGVmZXIgPSB0aGlz
Ll9kZWZlckFsbCA9ICQuRGVmZXJyZWQoKTsKCgkJCWlmKCBmb2xkZXJzLmxlbmd0
aCApewoJCQkJZGVmZXIucmVzb2x2ZShmb2xkZXJzKTsKCQkJfQoJCQllbHNlIHsK
CQkJCW1haWxydS5FdmVudHMub25lKCdzdG9wLnVwZGF0ZXInLCBmdW5jdGlvbiAo
KXsKCQkJCQlkZWZlci5yZXNvbHZlKG1haWxydS5Gb2xkZXJzLmdldEFsbCgpKTsK
CQkJCX0pOwoJCQl9CgkJfQoKCQlyZXR1cm4JZGVmZXIucHJvbWlzZSgpOwoJfTsK
CgoJbWFpbHJ1LkZvbGRlcnMuZmluZEJ5TXNnSWQgPSBmdW5jdGlvbiAoaWQsIHJl
YWQpewoJCXZhciBkZiA9ICQuRGVmZXJyZWQoKTsKCgkJbWFpbHJ1Lk1lc3NhZ2Vz
CgkJCS5maW5kKHsgaWQ6IGlkLCBzbTogR0VULnNtLCByZWFkOiArISFyZWFkIH0p
CgkJCQkuZmFpbChkZi5yZWplY3QpCgkJCQkuZG9uZShmdW5jdGlvbiAoKXsKCQkJ
CQl2YXIgbXNnID0gbWFpbHJ1Lk1lc3NhZ2VzLmdldFNhZmUoaWQpOwoJCQkJCW1h
aWxydS5Gb2xkZXJzCgkJCQkJCS5maW5kKHsgaWQ6IG1zZy5mb2xkZXIgfHwgbXNn
LkZvbGRlcklkIH0pCgkJCQkJCQkuZG9uZShkZi5yZXNvbHZlKQoJCQkJCQkJLmZh
aWwoZGYucmVqZWN0KQoJCQkJCTsKCQkJCX0pCgkJOwoKCQlyZXR1cm4JZGYucHJv
bWlzZSgpOwoJfTsKCgltYWlscnUuRm9sZGVycy5maW5kQnlUaHJlYWRJZCA9IGZ1
bmN0aW9uIChpZCl7CgkJdmFyIGRmID0gJC5EZWZlcnJlZCgpOwoKCQltYWlscnUu
VGhyZWFkcwoJCQkuZmluZCh7IGlkOiBpZCB9KQoJCQkJLmZhaWwoZGYucmVqZWN0
KQoJCQkJLmRvbmUoZnVuY3Rpb24gKHRocmVhZCl7CgkJCQkJbWFpbHJ1LkZvbGRl
cnMKCQkJCQkJLmZpbmQoeyBpZDogdGhyZWFkLmdldCgnZm9sZGVyJykgfSkKCQkJ
CQkJCS5kb25lKGRmLnJlc29sdmUpCgkJCQkJCQkuZmFpbChkZi5yZWplY3QpCgkJ
CQkJOwoJCQkJfSkKCQk7CgoJCXJldHVybglkZi5wcm9taXNlKCk7Cgl9OwoKCWpz
TG9hZGVyLmxvYWRlZCgne21haWxydX1tYWlscnUuRm9sZGVycycsIDEpOwoKLy8g
ZGF0YS9ydS9pbWFnZXMvanMvcnUvbWFpbHJ1LkZvbGRlcnMuanMgZW5kCgovLyBk
YXRhL3J1L2ltYWdlcy9qcy9ydS9tYWlscnUuTWVzc2FnZXMuanMgc3RhcnQKCi8q
KgogKiBAb2JqZWN0CW1haWxydS5NZXNzYWdlcwogKiBAYXV0aG9yCVJ1YmFYYQk8
dHJhc2hAcnViYXhhLm9yZz4KICovCgoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUv
bW9kZWwvbWFpbHJ1Lk1lc3NhZ2UuanMgc3RhcnQKCgooZnVuY3Rpb24gKCl7CgkJ
dmFyIE1lc3NhZ2UJPSBtYWlscnUuT2xkTW9kZWwuZXh0ZW5kKHsKCgkJCWdldEZv
bGRlcjogZnVuY3Rpb24gKCl7CgkJCQlyZXR1cm4JbWFpbHJ1LkZvbGRlcnMuZ2V0
KHRoaXMuRm9sZGVySWQpOwoJCQl9LAoKCQkJaW5Gb2xkZXI6IGZ1bmN0aW9uIChp
ZCl7CgkJCQl2YXIgRiA9IHRoaXMuZ2V0Rm9sZGVyKCk7CgkJCQlyZXR1cm4JRiAm
JiBGLmluRm9sZGVyKGlkKTsKCQkJfSwKCgkJCWdldEljb246IGZ1bmN0aW9uICgp
ewoJCQkJdmFyIGkgPSAwOwoJCQkJaWYoIHRoaXMuaXNGb3J3YXJkKCkgJiYgdGhp
cy5pc1JlcGx5KCkgKSBpID0gMjExOwoJCQkJZWxzZSBpZiggdGhpcy5pc0Zvcndh
cmQoKSApIGkgPSA1MDE7CgkJCQllbHNlIGlmKCB0aGlzLmlzUmVwbHkoKSApIGkg
PSA1MTA7CgkJCQllbHNlIGlmKCB0aGlzLmlzVW5yZWFkKCkgKSBpID0gNTAwOwoJ
CQkJcmV0dXJuCWk7CgkJCX0sCgoJCQlpc0xvYWRlZDogZnVuY3Rpb24gKCl7CgkJ
CQlyZXR1cm4gIHRoaXMuSWQgJiYgISEodGhpcy5fbG9hZGVkIHx8IHRoaXMuX3N0
YXRpYyk7CgkJCX0sCgoJCQlpc0xvdzogZnVuY3Rpb24gKCl7CgkJCQlyZXR1cm4J
TWVzc2FnZS5MT1cgPT0gdGhpcy5Qcmlvcml0eTsKCQkJfSwKCgkJCWlzSGlnaDog
ZnVuY3Rpb24gKCl7CgkJCQlyZXR1cm4gTWVzc2FnZS5ISUdIID09IHRoaXMuUHJp
b3JpdHk7CgkJCX0sCgoJCQlpc05vcm1hbDogZnVuY3Rpb24gKCl7CgkJCQlyZXR1
cm4JTWVzc2FnZS5OT1JNQUwgPT0gdGhpcy5Qcmlvcml0eTsKCQkJfSwKCgkJCWlz
UmVhZFNldDogZnVuY3Rpb24gKCl7CgkJCQkvKiogQG5hbWVzcGFjZSB0aGlzLlJl
YWRTZXQgLS0g0YTQu9Cw0LMsINCz0L7QstC+0YDRj9GJ0LjQuSDQviDRgtC+0Lws
INGH0YLQviDQvdGD0LbQvdC+INC/0L7QvNC10L3QuNGC0Ywg0Y3RgtC+INC/0LjR
gdGM0LzQviDQv9GA0L7Rh9C40YLQsNC90L3Ri9C8ICovCgkJCQlyZXR1cm4JMSA9
PSB0aGlzLlJlYWRTZXQ7CgkJCX0sCgoJCQlpc1VucmVhZDogZnVuY3Rpb24gKCl7
CgkJCQlyZXR1cm4JMSA9PSB0aGlzLlVucmVhZDsKCQkJfSwKCgkJCWlzUmVwbHk6
IGZ1bmN0aW9uICgpewoJCQkJcmV0dXJuIDEgPT0gdGhpcy5SZXBseTsKCQkJfSwK
CgkJCWlzRm9yd2FyZDogZnVuY3Rpb24gKCl7CgkJCQlyZXR1cm4JMSA9PSB0aGlz
LkZvcndhcmQ7CgkJCX0sCgoJCQlpc0ZsYWdnZWQ6IGZ1bmN0aW9uICgpewoJCQkJ
cmV0dXJuCTEgPT0gdGhpcy5GbGFnZ2VkOwoJCQl9LAoKCQkJZ2V0U3ViamVjdDog
ZnVuY3Rpb24gKCl7CgkJCQlyZXR1cm4JdGhpcy5TdWJqZWN0ID09ICcnID8gKCcm
bHQ7JyArIExhbmcuc3RyKCdtZXNzYWdlLmVtYWlsLnVudGl0bGVkJykgKyAnJmd0
OycpIDogdGhpcy5TdWJqZWN0OwoJCQl9LAoKCQkJZ2V0V2JyU3ViamVjdDogZnVu
Y3Rpb24gKCl7CgkJCQkvKiogQG5hbWVzcGFjZSB0aGlzLldiclN1YmplY3QgKi8K
CQkJCXJldHVybgl0aGlzLldiclN1YmplY3QgPT0gJycgPyAoJyZsdDsnICsgTGFu
Zy5zdHIoJ21lc3NhZ2UuZW1haWwudW50aXRsZWQnKSArICcmZ3Q7JykgOiB0aGlz
LldiclN1YmplY3Q7CgkJCX0sCgoJCQlnZXRTbmlwbGV0VGV4dDogZnVuY3Rpb24g
KCl7CgkJCQkvKiogQG5hbWVzcGFjZSB0aGlzLlNuaXBsZXRUZXh0ICovCgkJCQly
ZXR1cm4JdGhpcy5TbmlwbGV0VGV4dCA9PSAnJyA/ICcnIDogdGhpcy5TbmlwbGV0
VGV4dDsKCQkJfSwKCgkJCWdldFNlYXJjaFNuaXBsZXQ6IGZ1bmN0aW9uICgpewoJ
CQkJLyoqIEBuYW1lc3BhY2UgdGhpcy5TZWFyY2hTbmlwcGV0ICovCgkJCQlyZXR1
cm4gdGhpcy5TZWFyY2hTbmlwcGV0ID8gdGhpcy5TZWFyY2hTbmlwcGV0IDogbWFp
bHJ1Lk1pY3JvRm9ybWF0LnRleHQodGhpcyk7CgkJCX0sCgoJCQlnZXRTZWFyY2hT
dWJqZWN0OiBmdW5jdGlvbiAoKXsKCQkJCS8qKiBAbmFtZXNwYWNlIHRoaXMuU2Vh
cmNoU3ViamVjdCAqLwoJCQkJcmV0dXJuCXRoaXMuU2VhcmNoU3ViamVjdCA/IHRo
aXMuU2VhcmNoU3ViamVjdCA6ICgnJmx0OycgKyBMYW5nLnN0cignbWVzc2FnZS5l
bWFpbC51bnRpdGxlZCcpICsgJyZndDsnKTsKCQkJfSwKCgkJCWdldFNlYXJjaEZy
b206IGZ1bmN0aW9uICgpewoJCQkJLyoqIEBuYW1lc3BhY2UgdGhpcy5TZWFyY2hG
cm9tICovCgkJCQlyZXR1cm4JdGhpcy5TZWFyY2hGcm9tID8gdGhpcy5TZWFyY2hG
cm9tIDogKCcmbHQ7JyArIExhbmcuc3RyKCdtZXNzYWdlLmVtYWlsLnVua25vd24n
KSArICcmZ3Q7Jyk7CgkJCX0sCgoJCQlzZXRCb2R5OiBmdW5jdGlvbiAoaHRtbCwg
dGV4dCl7CgkJCQl0aGlzLmxldF9ib2R5CQk9IGh0bWw7CgkJCQl0aGlzLmxldF9i
b2R5X3BsYWluCT0gdGV4dDsKCQkJfSwKCgkJCWdldEJvZHk6IGZ1bmN0aW9uICh0
eXBlKXsKCQkJCXZhciBib2R5ID0gKCF0eXBlIHx8IHR5cGUgPT0gJ2h0bWwnKSA/
IHRoaXMubGV0X2JvZHkgOiB0aGlzLmxldF9ib2R5X3BsYWluOwoJCQkJcmV0dXJu
CWJvZHkgPT0gbnVsbCA/ICIiIDogYm9keTsKCQkJfSwKCgkJCV9zZXQ6IGZ1bmN0
aW9uIChhdHRycywgc2lsZW50KXsKCQkJCXZhciByZXMgPSB0aGlzLl9zZXR0ZXIo
dGhpcywgYXR0cnMsIHRoaXMuY2hhbmdlZCA9IHt9LCB0aGlzLnByZXZBdHRycyA9
IHt9KTsKCgkJCQlpZiggcmVzICYmICFzaWxlbnQgKXsKCQkJCQkobWFpbHJ1LkV2
ZW50cyAhPT0gdW5kZWYpICYmIG1haWxydS5FdmVudHMuZmlyZSgndXBkYXRlZC5t
ZXNzYWdlJywgdGhpcyk7CgkJCQl9CgoJCQkJcmV0dXJuCXJlczsKCQkJfSwKCgkJ
CXNhdmU6IGZ1bmN0aW9uICgpewoJCQkJdmFyIGNoYW5nZWQgPSB0aGlzLmNoYW5n
ZWQ7CgoJCQkJaWYoICdGbGFnZ2VkJyBpbiBjaGFuZ2VkICl7CgkJCQkJbWFpbHJ1
Lk1lc3NhZ2VzLmVkaXQoJ21hcmsnLCB0aGlzLmlkLCBtYWlscnUuTWVzc2FnZVtj
aGFuZ2VkLkZsYWdnZWQgPyAnRkxBRycgOiAnTk9GTEFHJ10pOwoJCQkJfQoJCQkJ
ZWxzZSBpZiggJ1VucmVhZCcgaW4gY2hhbmdlZCApewoJCQkJCW1haWxydS5NZXNz
YWdlcy5lZGl0KCdtYXJrJywgdGhpcy5pZCwgbWFpbHJ1Lk1lc3NhZ2VbY2hhbmdl
ZC5VbnJlYWQgPyAnVU5SRUFEJyA6ICdSRUFEJ10pOwoJCQkJfQoKCQkJCXRoaXMu
Y2hhbmdlZCA9IHt9OwoJCQl9CgkJfSk7CgoKCQlhanMuZXh0ZW5kKE1lc3NhZ2Us
IHsKCQkJICBSRUFEOgkJMgoJCQksIFVOUkVBRDoJMQoKCQkJLCBGTEFHOgkJNgoJ
CQksIE5PRkxBRzoJNwoKCQkJLCBMT1c6CQk1CgkJCSwgSElHSDoJCTEKCQkJLCBO
T1JNQUw6CTMKCQl9KTsKCgoJCS8vIEBleHBvcnQKCQltYWlscnUuTWVzc2FnZQk9
IE1lc3NhZ2U7CgoKCQkvLyBFbXB0eSBNZXNzYWdlCgkJbWFpbHJ1Lk1lc3NhZ2Uu
RW1wdHkJPSBuZXcgbWFpbHJ1Lk1lc3NhZ2UoeyBJZDogbnVsbCB9LCB7IHNpbGVu
dDogdHJ1ZSB9KTsKCX0pKCk7CgoKCWpzTG9hZGVyLmxvYWRlZCgne21haWxydS5t
b2RlbH1tYWlscnUuTWVzc2FnZScsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMv
cnUvbW9kZWwvbWFpbHJ1Lk1lc3NhZ2UuanMgZW5kCgovLyBkYXRhL3J1L2ltYWdl
cy9qcy9ydS9tYWlscnUuQWpheC5qcyBzdGFydAoKLyoqCiAqIEBvYmplY3QJbWFp
bHJ1LkFqYXgKICogQGFsaWFzCUFqYXgKICogQGF1dGhvcglSdWJhWGEJPHRyYXNo
QHJ1YmF4YS5vcmc+CiAqCiAqIAltYWlscnUuQWpheCh7IC4uLiB9KQogKiAgbWFp
bHJ1LkFqYXguZ2V0KCkKICogCW1haWxydS5BamF4LnBvc3QKICoKICogbWFpbHJ1
LkFqYXguUmVzdWx0CiAqIAlnZXRYSFIoKQogKiAJZ2V0T3B0cygpCiAqICBpc1N1
Y2Nlc3MoKQogKiAJaXNPSygpCiAqIAlpc05PUCgpCiAqIAlpc05vQXV0aCgpCiAq
IAlpc0dFVCgpCiAqIAlpc1BPU1QoKQogKiAJaXNKU09OKCkKICogCWdldFN0YXR1
cygpCiAqIAlnZXREYXRhKCkKICogCWlzTm9TREMoKQogKi8KCgoKLy8gZGF0YS9y
dS9pbWFnZXMvanMvcnUvanNDb3JlL1Byb2plY3RzL21haWwucnUvT2ZmbGluZS9t
YWlscnUuT2ZmbGluZUNhY2hlLmpzIHN0YXJ0CgoKLy8gZGF0YS9ydS9pbWFnZXMv
anMvcnUvanNDb3JlL3V0aWxzL01ENS5qcyBzdGFydAoKaWYgKCEoJ2FqcycgaW4g
d2luZG93KSkgewoJYWpzID0ge307Cn0KCi8qKgogKiBmcm9tIGh0dHA6Ly9tZDV4
LnJ1LwogKiBAY2xhc3MgYWpzLk1ENQogKi8KKGZ1bmN0aW9uIChhanMpIHsKCgkv
KgoJICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0
YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZQoJICogRGlnZXN0IEFsZ29yaXRo
bSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS4KCSAqIENvcHlyaWdodCAoQykgUGF1
bCBKb2huc3RvbiAxOTk5IC0gMjAwMC4KCSAqIFVwZGF0ZWQgYnkgR3JlZyBIb2x0
IDIwMDAgLSAyMDAxLgoJICogU2VlIGh0dHA6Ly9wYWpob21lLm9yZy51ay9zaXRl
L2xlZ2FsLmh0bWwgZm9yIGRldGFpbHMuCgkgKi8KCgkvKgoJICogQ29udmVydCBh
IDMyLWJpdCBudW1iZXIgdG8gYSBoZXggc3RyaW5nIHdpdGggbHMtYnl0ZSBmaXJz
dAoJICovCgl2YXIgaGV4X2NociA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKCglmdW5j
dGlvbiByaGV4IChudW0pIHsKCQl2YXIgc3RyID0gIiIsIGo7CgkJZm9yIChqID0g
MDsgaiA8PSAzOyBqKyspCgkJCXN0ciArPSBoZXhfY2hyLmNoYXJBdCgobnVtID4+
IChqICogOCArIDQpKSAmIDB4MEYpICsKCQkJaGV4X2Noci5jaGFyQXQoKG51bSA+
PiAoaiAqIDgpKSAmIDB4MEYpOwoJCXJldHVybiBzdHI7Cgl9CgoJLyoKCSAqIENv
bnZlcnQgYSBzdHJpbmcgdG8gYSBzZXF1ZW5jZSBvZiAxNi13b3JkIGJsb2Nrcywg
c3RvcmVkIGFzIGFuIGFycmF5LgoJICogQXBwZW5kIHBhZGRpbmcgYml0cyBhbmQg
dGhlIGxlbmd0aCwgYXMgZGVzY3JpYmVkIGluIHRoZSBNRDUgc3RhbmRhcmQuCgkg
Ki8KCWZ1bmN0aW9uIHN0cjJibGtzX01ENSAoc3RyKSB7CgkJdmFyIG5ibGsgPSAo
KHN0ci5sZW5ndGggKyA4KSA+PiA2KSArIDEsIGJsa3MgPSBuZXcgQXJyYXkobmJs
ayAqIDE2KSwgaTsKCQlmb3IgKGkgPSAwOyBpIDwgbmJsayAqIDE2OyBpKyspIGJs
a3NbaV0gPSAwOwoJCWZvciAoaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIGJs
a3NbaSA+PiAyXSB8PSBzdHIuY2hhckNvZGVBdChpKSA8PCAoKGkgJSA0KSAqIDgp
OwoJCWJsa3NbaSA+PiAyXSB8PSAweDgwIDw8ICgoaSAlIDQpICogOCk7CgkJYmxr
c1tuYmxrICogMTYgLSAyXSA9IHN0ci5sZW5ndGggKiA4OwoJCXJldHVybiBibGtz
OwoJfQoKCS8qCgkgKiBBZGQgaW50ZWdlcnMsIHdyYXBwaW5nIGF0IDJeMzIuIFRo
aXMgdXNlcyAxNi1iaXQgb3BlcmF0aW9ucyBpbnRlcm5hbGx5CgkgKiB0byB3b3Jr
IGFyb3VuZCBidWdzIGluIHNvbWUgSlMgaW50ZXJwcmV0ZXJzLgoJICovCglmdW5j
dGlvbiBhZGQgKHgsIHkpIHsKCQl2YXIgbHN3ID0gKHggJiAweEZGRkYpICsgKHkg
JiAweEZGRkYpOwoJCXZhciBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAo
bHN3ID4+IDE2KTsKCQlyZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhGRkZG
KTsKCX0KCgkvKgoJICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRv
IHRoZSBsZWZ0CgkgKi8KCWZ1bmN0aW9uIHJvbCAobnVtLCBjbnQpIHsKCQlyZXR1
cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSk7Cgl9CgoJLyoK
CSAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGJhc2ljIG9wZXJhdGlv
biBmb3IgZWFjaCByb3VuZCBvZiB0aGUKCSAqIGFsZ29yaXRobS4KCSAqLwoJZnVu
Y3Rpb24gY21uIChxLCBhLCBiLCB4LCBzLCB0KSB7CgkJcmV0dXJuIGFkZChyb2wo
YWRkKGFkZChhLCBxKSwgYWRkKHgsIHQpKSwgcyksIGIpOwoJfQoKCWZ1bmN0aW9u
IGZmIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7CgkJcmV0dXJuIGNtbigoYiAmIGMp
IHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7Cgl9CgoJZnVuY3Rpb24gZ2cg
KGEsIGIsIGMsIGQsIHgsIHMsIHQpIHsKCQlyZXR1cm4gY21uKChiICYgZCkgfCAo
YyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTsKCX0KCglmdW5jdGlvbiBoaCAoYSwg
YiwgYywgZCwgeCwgcywgdCkgewoJCXJldHVybiBjbW4oYiBeIGMgXiBkLCBhLCBi
LCB4LCBzLCB0KTsKCX0KCglmdW5jdGlvbiBpaSAoYSwgYiwgYywgZCwgeCwgcywg
dCkgewoJCXJldHVybiBjbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQp
OwoJfQoKCS8qCgkgKiBUYWtlIGEgc3RyaW5nIGFuZCByZXR1cm4gdGhlIGhleCBy
ZXByZXNlbnRhdGlvbiBvZiBpdHMgTUQ1LgoJICovCglmdW5jdGlvbiBjYWxjTUQ1
IChzdHIpIHsKCgkJdmFyIHggPSBzdHIyYmxrc19NRDUoc3RyKSwKCQkJYSA9IDE3
MzI1ODQxOTMsCgkJCWIgPSAtMjcxNzMzODc5LAoJCQljID0gLTE3MzI1ODQxOTQs
CgkJCWQgPSAyNzE3MzM4NzgsCgkJCWksIG9sZGEsIG9sZGIsIG9sZGMsIG9sZGQ7
CgoJCWZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikgewoKCQkJb2xk
YSA9IGE7CgkJCW9sZGIgPSBiOwoJCQlvbGRjID0gYzsKCQkJb2xkZCA9IGQ7CgoJ
CQlhID0gZmYoYSwgYiwgYywgZCwgeFtpKyAwXSwgNyAsIC02ODA4NzY5MzYpOwoJ
CQlkID0gZmYoZCwgYSwgYiwgYywgeFtpKyAxXSwgMTIsIC0zODk1NjQ1ODYpOwoJ
CQljID0gZmYoYywgZCwgYSwgYiwgeFtpKyAyXSwgMTcsICA2MDYxMDU4MTkpOwoJ
CQliID0gZmYoYiwgYywgZCwgYSwgeFtpKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTsK
CQkJYSA9IGZmKGEsIGIsIGMsIGQsIHhbaSsgNF0sIDcgLCAtMTc2NDE4ODk3KTsK
CQkJZCA9IGZmKGQsIGEsIGIsIGMsIHhbaSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7
CgkJCWMgPSBmZihjLCBkLCBhLCBiLCB4W2krIDZdLCAxNywgLTE0NzMyMzEzNDEp
OwoJCQliID0gZmYoYiwgYywgZCwgYSwgeFtpKyA3XSwgMjIsIC00NTcwNTk4Myk7
CgkJCWEgPSBmZihhLCBiLCBjLCBkLCB4W2krIDhdLCA3ICwgIDE3NzAwMzU0MTYp
OwoJCQlkID0gZmYoZCwgYSwgYiwgYywgeFtpKyA5XSwgMTIsIC0xOTU4NDE0NDE3
KTsKCQkJYyA9IGZmKGMsIGQsIGEsIGIsIHhbaSsxMF0sIDE3LCAtNDIwNjMpOwoJ
CQliID0gZmYoYiwgYywgZCwgYSwgeFtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTsK
CQkJYSA9IGZmKGEsIGIsIGMsIGQsIHhbaSsxMl0sIDcgLCAgMTgwNDYwMzY4Mik7
CgkJCWQgPSBmZihkLCBhLCBiLCBjLCB4W2krMTNdLCAxMiwgLTQwMzQxMTAxKTsK
CQkJYyA9IGZmKGMsIGQsIGEsIGIsIHhbaSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7
CgkJCWIgPSBmZihiLCBjLCBkLCBhLCB4W2krMTVdLCAyMiwgIDEyMzY1MzUzMjkp
OwoKCQkJYSA9IGdnKGEsIGIsIGMsIGQsIHhbaSsgMV0sIDUgLCAtMTY1Nzk2NTEw
KTsKCQkJZCA9IGdnKGQsIGEsIGIsIGMsIHhbaSsgNl0sIDkgLCAtMTA2OTUwMTYz
Mik7CgkJCWMgPSBnZyhjLCBkLCBhLCBiLCB4W2krMTFdLCAxNCwgIDY0MzcxNzcx
Myk7CgkJCWIgPSBnZyhiLCBjLCBkLCBhLCB4W2krIDBdLCAyMCwgLTM3Mzg5NzMw
Mik7CgkJCWEgPSBnZyhhLCBiLCBjLCBkLCB4W2krIDVdLCA1ICwgLTcwMTU1ODY5
MSk7CgkJCWQgPSBnZyhkLCBhLCBiLCBjLCB4W2krMTBdLCA5ICwgIDM4MDE2MDgz
KTsKCQkJYyA9IGdnKGMsIGQsIGEsIGIsIHhbaSsxNV0sIDE0LCAtNjYwNDc4MzM1
KTsKCQkJYiA9IGdnKGIsIGMsIGQsIGEsIHhbaSsgNF0sIDIwLCAtNDA1NTM3ODQ4
KTsKCQkJYSA9IGdnKGEsIGIsIGMsIGQsIHhbaSsgOV0sIDUgLCAgNTY4NDQ2NDM4
KTsKCQkJZCA9IGdnKGQsIGEsIGIsIGMsIHhbaSsxNF0sIDkgLCAtMTAxOTgwMzY5
MCk7CgkJCWMgPSBnZyhjLCBkLCBhLCBiLCB4W2krIDNdLCAxNCwgLTE4NzM2Mzk2
MSk7CgkJCWIgPSBnZyhiLCBjLCBkLCBhLCB4W2krIDhdLCAyMCwgIDExNjM1MzE1
MDEpOwoJCQlhID0gZ2coYSwgYiwgYywgZCwgeFtpKzEzXSwgNSAsIC0xNDQ0Njgx
NDY3KTsKCQkJZCA9IGdnKGQsIGEsIGIsIGMsIHhbaSsgMl0sIDkgLCAtNTE0MDM3
ODQpOwoJCQljID0gZ2coYywgZCwgYSwgYiwgeFtpKyA3XSwgMTQsICAxNzM1MzI4
NDczKTsKCQkJYiA9IGdnKGIsIGMsIGQsIGEsIHhbaSsxMl0sIDIwLCAtMTkyNjYw
NzczNCk7CgoJCQlhID0gaGgoYSwgYiwgYywgZCwgeFtpKyA1XSwgNCAsIC0zNzg1
NTgpOwoJCQlkID0gaGgoZCwgYSwgYiwgYywgeFtpKyA4XSwgMTEsIC0yMDIyNTc0
NDYzKTsKCQkJYyA9IGhoKGMsIGQsIGEsIGIsIHhbaSsxMV0sIDE2LCAgMTgzOTAz
MDU2Mik7CgkJCWIgPSBoaChiLCBjLCBkLCBhLCB4W2krMTRdLCAyMywgLTM1MzA5
NTU2KTsKCQkJYSA9IGhoKGEsIGIsIGMsIGQsIHhbaSsgMV0sIDQgLCAtMTUzMDk5
MjA2MCk7CgkJCWQgPSBoaChkLCBhLCBiLCBjLCB4W2krIDRdLCAxMSwgIDEyNzI4
OTMzNTMpOwoJCQljID0gaGgoYywgZCwgYSwgYiwgeFtpKyA3XSwgMTYsIC0xNTU0
OTc2MzIpOwoJCQliID0gaGgoYiwgYywgZCwgYSwgeFtpKzEwXSwgMjMsIC0xMDk0
NzMwNjQwKTsKCQkJYSA9IGhoKGEsIGIsIGMsIGQsIHhbaSsxM10sIDQgLCAgNjgx
Mjc5MTc0KTsKCQkJZCA9IGhoKGQsIGEsIGIsIGMsIHhbaSsgMF0sIDExLCAtMzU4
NTM3MjIyKTsKCQkJYyA9IGhoKGMsIGQsIGEsIGIsIHhbaSsgM10sIDE2LCAtNzIy
NTIxOTc5KTsKCQkJYiA9IGhoKGIsIGMsIGQsIGEsIHhbaSsgNl0sIDIzLCAgNzYw
MjkxODkpOwoJCQlhID0gaGgoYSwgYiwgYywgZCwgeFtpKyA5XSwgNCAsIC02NDAz
NjQ0ODcpOwoJCQlkID0gaGgoZCwgYSwgYiwgYywgeFtpKzEyXSwgMTEsIC00MjE4
MTU4MzUpOwoJCQljID0gaGgoYywgZCwgYSwgYiwgeFtpKzE1XSwgMTYsICA1MzA3
NDI1MjApOwoJCQliID0gaGgoYiwgYywgZCwgYSwgeFtpKyAyXSwgMjMsIC05OTUz
Mzg2NTEpOwoKCQkJYSA9IGlpKGEsIGIsIGMsIGQsIHhbaSsgMF0sIDYgLCAtMTk4
NjMwODQ0KTsKCQkJZCA9IGlpKGQsIGEsIGIsIGMsIHhbaSsgN10sIDEwLCAgMTEy
Njg5MTQxNSk7CgkJCWMgPSBpaShjLCBkLCBhLCBiLCB4W2krMTRdLCAxNSwgLTE0
MTYzNTQ5MDUpOwoJCQliID0gaWkoYiwgYywgZCwgYSwgeFtpKyA1XSwgMjEsIC01
NzQzNDA1NSk7CgkJCWEgPSBpaShhLCBiLCBjLCBkLCB4W2krMTJdLCA2ICwgIDE3
MDA0ODU1NzEpOwoJCQlkID0gaWkoZCwgYSwgYiwgYywgeFtpKyAzXSwgMTAsIC0x
ODk0OTg2NjA2KTsKCQkJYyA9IGlpKGMsIGQsIGEsIGIsIHhbaSsxMF0sIDE1LCAt
MTA1MTUyMyk7CgkJCWIgPSBpaShiLCBjLCBkLCBhLCB4W2krIDFdLCAyMSwgLTIw
NTQ5MjI3OTkpOwoJCQlhID0gaWkoYSwgYiwgYywgZCwgeFtpKyA4XSwgNiAsICAx
ODczMzEzMzU5KTsKCQkJZCA9IGlpKGQsIGEsIGIsIGMsIHhbaSsxNV0sIDEwLCAt
MzA2MTE3NDQpOwoJCQljID0gaWkoYywgZCwgYSwgYiwgeFtpKyA2XSwgMTUsIC0x
NTYwMTk4MzgwKTsKCQkJYiA9IGlpKGIsIGMsIGQsIGEsIHhbaSsxM10sIDIxLCAg
MTMwOTE1MTY0OSk7CgkJCWEgPSBpaShhLCBiLCBjLCBkLCB4W2krIDRdLCA2ICwg
LTE0NTUyMzA3MCk7CgkJCWQgPSBpaShkLCBhLCBiLCBjLCB4W2krMTFdLCAxMCwg
LTExMjAyMTAzNzkpOwoJCQljID0gaWkoYywgZCwgYSwgYiwgeFtpKyAyXSwgMTUs
ICA3MTg3ODcyNTkpOwoJCQliID0gaWkoYiwgYywgZCwgYSwgeFtpKyA5XSwgMjEs
IC0zNDM0ODU1NTEpOwoKCQkJYSA9IGFkZChhLCBvbGRhKTsKCQkJYiA9IGFkZChi
LCBvbGRiKTsKCQkJYyA9IGFkZChjLCBvbGRjKTsKCQkJZCA9IGFkZChkLCBvbGRk
KTsKCQl9CgkJcmV0dXJuIHJoZXgoYSkgKyByaGV4KGIpICsgcmhleChjKSArIHJo
ZXgoZCk7Cgl9CgoJYWpzLk1ENSA9IGNhbGNNRDU7Cgp9KShhanMpOwoKanNMb2Fk
ZXIubG9hZGVkKCd7dXRpbHN9TUQ1JywgMSk7CgovLyBkYXRhL3J1L2ltYWdlcy9q
cy9ydS9qc0NvcmUvdXRpbHMvTUQ1LmpzIGVuZAoKLy8gZGF0YS9ydS9pbWFnZXMv
anMvcnUvanNDb3JlL3BsdWdpbnMvalF1ZXJ5RXZlbnQuanMgc3RhcnQKCgooZnVu
Y3Rpb24oJCkKCXsKCQkvKioKCQkgKiBAY2xhc3MgalF1ZXJ5RXZlbnQKCQkgKi8K
CQlqc0NsYXNzCgkJLmNyZWF0ZSgnalF1ZXJ5RXZlbnQnKQoJCS5tZXRob2RzKHsK
CgkJCW9uZTogZnVuY3Rpb24odHlwZSwgZGF0YSwgZm4pCgkJCXsKCQkJCXJldHVy
biAkKHRoaXMpLm9uZSh0eXBlLCBkYXRhLCBmbik7CgkJCX0sCgoJCQliaW5kOiBm
dW5jdGlvbih0eXBlLCBkYXRhLCBmbikKCQkJewoJCQkJcmV0dXJuICQodGhpcyku
YmluZCh0eXBlLCBkYXRhLCBmbik7CgkJCX0sCgoJCQl1bmJpbmQ6IGZ1bmN0aW9u
KHR5cGUsIGZuKQoJCQl7CgkJCQlyZXR1cm4gJCh0aGlzKS51bmJpbmQodHlwZSwg
Zm4pOwoJCQl9LAoKCQkJdHJpZ2dlcjogZnVuY3Rpb24gKHR5cGUsIGRhdGEpewoJ
CQkJdGhpcy50cmlnZ2VySGFuZGxlcih0eXBlLCBkYXRhKTsKCQkJCXJldHVybiAg
dGhpczsKCQkJfSwKCgkJCXRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbih0eXBlLCBk
YXRhKQoJCQl7CgkJCQlyZXR1cm4gJCh0aGlzKS50cmlnZ2VySGFuZGxlcih0eXBl
LCBkYXRhKTsKCQkJfSwKCgkJCXJlbW92ZUV2ZW50TGlzdGVuZXI6ICQubm9vcCwK
CQkJZGV0YWNoRXZlbnQ6ICQubm9vcAoJCX0pOwoKCX0pKGpRdWVyeSk7CgoJanNM
b2FkZXIubG9hZGVkKCd7cGx1Z2luc31qUXVlcnlFdmVudCcsIDEpOwoKLy8gZGF0
YS9ydS9pbWFnZXMvanMvcnUvanNDb3JlL3BsdWdpbnMvalF1ZXJ5RXZlbnQuanMg
ZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9WaWV3cy9tYWlscnUuVmlldy5D
b21wb3NlLmpzIHN0YXJ0CgoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvanNDb3Jl
L2xhYnMvanNWaWV3LmpzIHN0YXJ0CgovKioKICogQGNsYXNzCWpzVmlldwogKiBA
YXV0aG9yCVJ1YmFYYQk8dHJhc2hAcnViYXhhLm9yZz4KICogQHZlcnNpb24JMC4x
CiAqCiAqIFJvb3QgVmlldwogKiAJCWpzVmlldy5yb290CiAqIAkJZG9jdW1lbnRW
aWV3CiAqLwoKKGZ1bmN0aW9uICh3KQp7Cgl2YXIgVklFVyA9IHt9LCB0aW1lcnMg
PSB7fSwgX2xvZyA9IFtdLCBfaW5kZW50ID0gMDsKCglqc0NsYXNzCgkJLmNyZWF0
ZSgnanNWaWV3JykKCQkubWV0aG9kcyh7CgoJCV9fY29uc3RydWN0OiBmdW5jdGlv
biAob3B0cykKCQl7CgkJCU9iamVjdC5leHRlbmQodGhpcywgeyBpZDogdGhpcy51
bmlxSWQsIHRhZzogJ3ZpZXcnLCBfJFA6IGZhbHNlLCBvbkJlZm9yZVJlZHJhdzog
YWpzLnJldFRydWUsIG9uUmVkcmF3OiBhanMucmV0VHJ1ZSB9LCBvcHRzKTsKCgkJ
CWlmKCBWSUVXW3RoaXMuaWRdICE9PSB1bmRlZiApCgkJCQl0aHJvdyh0aGlzLmlk
ICsnIC0ganNWaWV3LklEIG11c3QgYnkgdW5pcS4nKTsKCQkJZWxzZQoJCQkJVklF
V1t0aGlzLmlkXQk9IHRoaXM7CgoJCQl0aGlzLl9faW5pdAkJPSB7fTsKCQkJdGhp
cy5fY2hhbmdlcwk9IHt9OwoJCQl0aGlzLl9fY2hhbmdlcwk9IHt9OwoKCQkJdGhp
cy50YWcJCT0gdGhpcy50YWcudG9VcHBlckNhc2UoKTsKCQkJdGhpcy5zdWJ2aWV3
cwk9IFtdOwoJCQl0aGlzLmNoYW5nZWQJPSBmYWxzZTsKCgkJCWlmKCAhdGhpcy5p
ZFZpZXcgKQoJCQkJdGhpcy5pZFZpZXcJPSAnIycrdGhpcy5pZDsKCgkJCXRoaXMu
JFAoJ19sZWdvJyk7CgkJCXRoaXMuX2xlZ28oKTsKCQkJdGhpcy5fZmlyc3QoKTsK
CQkJJCh0aGlzLl9vblJlYWR5LmJpbmQodGhpcykpOwoJCQl0aGlzLiRQKCdfbGVn
bycsIDEpOwoKCQkJaWYoIHRoaXMuZXZlbnRzICkgdGhpcy5saXN0ZW4odGhpcy5l
dmVudHMpOwoJCX0sCgoJLy8gQHByaXZhdGUKCQlfaW5pdDoJCWZ1bmN0aW9uIChu
YW1lLCBmdW5jKQoJCQkJCXsKCQkJCQkJaWYoICEobmFtZSBpbiB0aGlzLl9faW5p
dCkgJiYgKGZ1bmMgIT09IHVuZGVmKSApCgkJCQkJCXsKCQkJCQkJCXRoaXMuJFAo
J19pbml0LicrbmFtZSk7CgkJCQkJCQlmdW5jLmNhbGwodGhpcyk7CgkJCQkJCQl0
aGlzLl9faW5pdFtuYW1lXQk9IDE7CgkJCQkJCQl0aGlzLiRQKCdfaW5pdC4nK25h
bWUsIDEpOwoJCQkJCQl9CgkJCQkJCXJldHVybgkobmFtZSBpbiB0aGlzLl9faW5p
dCk7CgkJCQkJfSwKCgoJCV9vbmU6CQkkLm5vb3AsCgkJX2xlZ286CQkkLm5vb3As
CgkJX2ZpcnN0OgkJJC5ub29wLAoJCV9yZWRyYXc6CWZ1bmN0aW9uIChyLCBhKXt9
LAoJCV9vblJlYWR5OgkkLm5vb3AsCgoJCV9jaGFuZ2VkOglyZXR1cm5UcnVlLAoJ
CV9hY3RpdmU6CXJldHVyblRydWUsCgoJCV9fcmVkcmF3OglmdW5jdGlvbiAociwg
YSkKCQl7CgkJCWlmKCB0aGlzLl9vbmUgIT09IG51bGwgKQoJCQl7CgkJCQl0aGlz
LiRQKCdfb25lJyk7CgkJCQl0aGlzLl9vbmUoKTsKCQkJCXRoaXMuX29uZSA9IG51
bGw7CgkJCQl0aGlzLiRQKCdfb25lJywgMSk7CgkJCX0KCQkJdGhpcy5fcmVkcmF3
KHIsIGEpOwoJCX0sCgoKCQkkUDogZnVuY3Rpb24gKG5hbWUpewoJCQlpZiggdGhp
cy5fJFAgKXsKCQkJCW5hbWUgPSAnWycrdGhpcy5pZCsnXS4nK25hbWU7CgoJCQkJ
aWYoIGFyZ3VtZW50cy5sZW5ndGggPT0gMiApewoJCQkJCV9pbmRlbnQtLTsKCQkJ
CQlyZXR1cm4JKHRpbWVyc1tuYW1lXSA9IGFqcy5ub3coKSAtIHRpbWVyc1tuYW1l
XSk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQl0aW1lcnNbbmFtZV0gPSBhanMubm93
KCk7CgkJCQkJX2xvZy5wdXNoKHsgbmFtZTogbmFtZSwgaW5kZW50OiBfaW5kZW50
KysgfSk7CgkJCQl9CgkJCX0KCQl9LAoKCS8vIEBwdWJsaWMKCQlpc0NoYW5nZWQ6
CWZ1bmN0aW9uICgpeyByZXR1cm4gdGhpcy5jaGFuZ2VkOyB9LAoJCWlzQWN0aXZl
OglmdW5jdGlvbiAoKXsgcmV0dXJuIHRoaXMuX2FjdGl2ZSgpICYmICgodGhpcy5p
ZCA9PT0gJ3Jvb3QnKSB8fCAhdGhpcy5wYXJlbnRWaWV3SWQgfHwgdGhpcy5wYXJl
bnRWaWV3KCkuaXNBY3RpdmUoKSk7IH0sCgkJZ2V0TWFwcGVyOglmdW5jdGlvbiAo
KXsKCQkJLyoqIEBuYW1lc3BhY2UgdGhpcy5tYXBwZXIgKi8KCQkJcmV0dXJuIHRo
aXMubWFwcGVyOwoJCX0sCgoJCWlzQ2hhbmdlOiBmdW5jdGlvbiAobmFtZSwgdmFs
dWUsIG5vU2V0KQoJCXsKCQkJaWYoIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgKQoJ
CQl7CgkJCQlyZXR1cm4JISF0aGlzLl9fY2hhbmdlc1tuYW1lXTsKCQkJfQoKCQkJ
aWYoIEFycmF5LmlzQXJyYXkodmFsdWUpICkgdmFsdWUgPSB2YWx1ZS5qb2luKCcs
Jyk7CgoJCQl2YXIgciA9IHRoaXMuX2NoYW5nZXNbbmFtZV0gIT09IHZhbHVlOwoJ
CQlpZiggIW5vU2V0ICkKCQkJewoJCQkJdGhpcy5fX2NoYW5nZXNbbmFtZV0JPSBy
OwoJCQkJdGhpcy5fY2hhbmdlc1tuYW1lXSAJPSB2YWx1ZTsKCQkJfQoKCQkJcmV0
dXJuCXI7CgkJfSwKCgkJcmVkcmF3OiBmdW5jdGlvbiAoKXsKCQkJaWYoIHRoaXMu
b25CZWZvcmVSZWRyYXcoKSApewoJCQkJdGhpcy5jaGFuZ2VkCT0gZmFsc2U7IC8v
IFJlc2V0IGNoYW5nZXMKCgkJCQlpZiggdGhpcy5pZCA9PT0gJ3Jvb3QnICl7Ci8v
CQkJCQljb25zb2xlLnByb2ZpbGUoKTsKCQkJCQl0aGlzLiRQKCdUT1RBTCcpOwoJ
CQkJfQoKCQkJCXZhciBhID0gdGhpcy5pc0FjdGl2ZSgpLCBzdWJ2aWV3cyA9IGE7
CgoJCQkJaWYoICEodGhpcy5hY3RpdmUgPT09IHVuZGVmICYmICFhKSApewoJCQkJ
CWlmKCB0aGlzLmFjdGl2ZSAhPT0gYSApewoJCQkJCQl0aGlzLiRQKCdhY3RpdmUn
KTsKCQkJCQkJc3Vidmlld3MJCT0gdHJ1ZTsKCQkJCQkJdGhpcy5hY3RpdmUJCT0g
YTsKCQkJCQkJdGhpcy5fX3JlZHJhdyhmYWxzZSwgYSk7CgkJCQkJCXRoaXMuJFAo
J2FjdGl2ZScsIDEpOwoJCQkJCX0KCgkJCQkJaWYoIGEgJiYgdGhpcy5fY2hhbmdl
ZCgpICl7CgkJCQkJCXRoaXMuJFAoJ3JlZHJhdycpOwoJCQkJCQl0aGlzLmNoYW5n
ZWQJPSB0cnVlOwoJCQkJCQl0aGlzLl9fcmVkcmF3KHRydWUsIGEpOwoJCQkJCQl0
aGlzLiRQKCdyZWRyYXcnLCAxKTsKCQkJCQl9CgoJCQkJCWlmKCBzdWJ2aWV3cyl7
CgkJCQkJCWZvciggdmFyIGkgPSAwLCB2aWV3cyA9IHRoaXMuc3Vidmlld3MsIG4g
PSB2aWV3cy5sZW5ndGg7IGkgPCBuOyBpKysgKXsKCQkJCQkJCXZpZXdzW2ldLnJl
ZHJhdygpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCWlmKCB0aGlzLmlkID09
PSAncm9vdCcgKXsKLy8JCQkJCWNvbnNvbGUucHJvZmlsZUVuZCgpOwoJCQkJCWlm
KCB0aGlzLiRQKCdUT1RBTCcsIDEpID4gNSApewoJCQkJCQlhanMuZWFjaChfbG9n
LCBmdW5jdGlvbiAobG9nKXsKCQkJCQkJCXZhciBuYW1lID0gbG9nLm5hbWUsIHRz
ID0gdGltZXJzW25hbWVdOwoJCQkJCQkJaWYoIHRzID49IDEgKXsKCQkJCQkJCQlh
anMubG9nKChuZXcgQXJyYXkobG9nLmluZGVudCkpLmpvaW4oJyAgJykgKyBuYW1l
ICsnOiAnKyB0cyArJ21zJyk7CgkJCQkJCQkJZGVsZXRlIHRpbWVyc1tuYW1lXTsK
CQkJCQkJCX0KCQkJCQkJfSk7CgkJCQkJfQoJCQkJCV9sb2cgPSBbXTsKCQkJCX0K
CgkJCQl0aGlzLm9uUmVkcmF3KCk7CgkJCQlyZXR1cm4JdHJ1ZTsKCQkJfQoKCQkJ
cmV0dXJuCWZhbHNlOwoJCX0sCgoJCWFkZFN1YlZpZXc6IGZ1bmN0aW9uIChWaWV3
KQoJCXsKCQkJVmlldy5wYXJlbnRWaWV3SWQJPSB0aGlzLmlkOwoJCQl0aGlzLnN1
YnZpZXdzLnB1c2goVmlldyk7CgkJCXJldHVybgl0aGlzOwoJCX0sCgoJCXJlbW92
ZVN1YlZpZXc6IGZ1bmN0aW9uIChWaWV3KQoJCXsKCQkJZGVsZXRlCVZpZXcucGFy
ZW50Vmlld0lkOwoJCQl0aGlzLnN1YnZpZXdzCT0gQXJyYXkucmVtb3ZlKHRoaXMu
c3Vidmlld3MsIFZpZXcpOwoJCQlyZXR1cm4JdGhpczsKCQl9LAoKCQlwYXJlbnRW
aWV3OiBmdW5jdGlvbiAoKQoJCXsKCQkJcmV0dXJuCVZJRVdbdGhpcy5wYXJlbnRW
aWV3SWRdOwoJCX0sCgoJCWdldFZpZXdzQnlUYWc6IGZ1bmN0aW9uICh0YWcpCgkJ
ewoJCQl2YXIgcmVzdWx0CT0gW107CgkJCXRhZyA9IHRhZy50b1VwcGVyQ2FzZSgp
OwoKCQkJQXJyYXkuZm9yRWFjaCh0aGlzLnN1YnZpZXdzLCBmdW5jdGlvbiAoVmll
dykgewoJCQkJaWYoICh0YWcgPT09ICcqJykgfHwgKFZpZXcudGFnLnRvVXBwZXJD
YXNlKCkgPT0gdGFnKSApCgkJCQkJcmVzdWx0LnB1c2goVmlldyk7CgkJCQlyZXN1
bHQgPSByZXN1bHQuY29uY2F0KFZpZXcuZ2V0Vmlld3NCeVRhZyh0YWcpKTsKCQkJ
fSk7CgoJCQlyZXR1cm4JcmVzdWx0OwoJCX0sCgoJCWdldFZpZXdCeUlkOiBmdW5j
dGlvbiAoaWQpCgkJewoJCQlyZXR1cm4JVklFV1tpZF07CgkJfSwKCgkJbGlzdGVu
OiBmdW5jdGlvbiAoZXZlbnRzKQoJCXsKCQkJbWFpbHJ1LkV2ZW50cy5iaW5kKGV2
ZW50cywgJEQodGhpcywgZnVuY3Rpb24gKCkKCQkJewoJCQkJdGhpcy5yZWRyYXco
KQoJCQl9KSk7CgkJCXJldHVybgl0aGlzOwoJCX0sCgoJCWdyb3VwOiBmdW5jdGlv
biAob3B0cywgZnVuYykKCQl7CgkJCXZhciBWaWV3ID0gKCdnZXRWaWV3QnlJZCcg
aW4gb3B0cykgPyBvcHRzIDogbmV3IGpzVmlldyhvcHRzKTsKCQkJaWYoIGZ1bmMg
IT09IHVuZGVmICkgZnVuYy5jYWxsKFZpZXcsIFZpZXcpOwoJCQlyZXR1cm4JdGhp
cy5hZGRTdWJWaWV3KFZpZXcpOwoJCX0sCgoJCWdldFZpZXc6IGZ1bmN0aW9uIChz
ZWxlY3RvcikKCQl7CgkJCWlmKCAhdGhpcy4kVmlldyApCgkJCXsKCQkJCXZhciBp
ZCA9IHRoaXMuaWRWaWV3OwoJCQkJdGhpcy4kVmlldyA9ICQoIGlkLCAhYWpzLmlz
U3RyaW5nKGlkKSB8fCAvXiMvLnRlc3QoaWQpID8gdW5kZWYgOiB0aGlzLnBhcmVu
dFZpZXcoKS5nZXRWaWV3KCkgKTsKCQkJfQoKCQkJaWYoIHNlbGVjdG9yICkKCQkJ
ewoJCQkJcmV0dXJuCS9eIy8udGVzdChzZWxlY3RvcikgPyAkKHNlbGVjdG9yKSA6
IHRoaXMuJFZpZXcuZmluZChzZWxlY3Rvcik7CgkJCX0KCgkJCXJldHVybgl0aGlz
LiRWaWV3OwoJCX0KCgl9KTsKCgoJLy8gUk9PVCBWSUVXCglqc1ZpZXcucm9vdAkJ
PQoJdy5kb2N1bWVudFZpZXcJPSBuZXcganNWaWV3KHsgaWQ6ICdyb290JywgdGFn
OiAncm9vdCcsIF8kUDogdHJ1ZSB9KTsKCgkvLyBDcmVhdGUgVmlldyBjbGFzcwoJ
anNWaWV3LmdldAkJPSBqc1ZpZXcucm9vdC5nZXRWaWV3QnlJZDsKCWpzVmlldy5j
cmVhdGUJPSBmdW5jdGlvbiAobmFtZSl7IHJldHVybiBqc0NsYXNzLmNyZWF0ZShu
YW1lKS5leHRlbmQoanNWaWV3KTsgfTsKCWpzVmlldy5nZXRWaWV3c0J5VGFnCT0g
ZnVuY3Rpb24gKG5hbWUpeyByZXR1cm4ganNWaWV3LnJvb3QuZ2V0Vmlld3NCeVRh
ZyhuYW1lKTsgfTsKfSkod2luZG93KTsKCmpzTG9hZGVyLmxvYWRlZCgne2xhYnN9
anNWaWV3JywgMSk7CiAKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9s
YWJzL2pzVmlldy5qcyBlbmQKCi8qKgoJICogQGNsYXNzIG1haWxydS5WaWV3LkNv
bXBvc2UKCSAqLwoJanNWaWV3CgkJLmNyZWF0ZSgnbWFpbHJ1LlZpZXcuQ29tcG9z
ZScpCgkJLnN0YXRpY3MoewoKCQkJc3RhdHVzOgkJLTEsCgkJCWF0dGVtcHRzOgky
LAoKCQkJaXNMb2FkZWQ6IGZ1bmN0aW9uICgpewoJCQkJdmFyIGhyZWYgPSBsb2Nh
dGlvbi5ocmVmLnNwbGl0KCc/Jyk7CgkJCQlocmVmID0gaHJlZlswXSArIChocmVm
WzFdID8gJz8nK2pzSGlzdG9yeS5idWlsZFBhcmFtcygpIDogJycpOwoJCQkJcmV0
dXJuCW1haWxydS5pc0NvbXBvc2VQYWdlKCkgJiYgKGhyZWYgPT0ganNIaXN0b3J5
LmdldCgpKSB8fCB0aGlzLnN0YXR1cyA9PSAyOwoJCQl9LAoKCQkJbG9hZEZvcm1I
dG1sOiBmdW5jdGlvbiAoZm9ybU5hbWUsIGZ1bmMpewoJCQkJaWYoIHRoaXMuc3Rh
dHVzID09IC0xICl7CgkJCQkJJFIoJ3ttYWlscnUnKycuYnVpbGR9Q29tcG9zZScp
OyAvLyAiKyIgLS0gbmVlZCB0byBnZXQgdGhlIGpzLWJ1aWxkZXIgc2tpcCB0aGlz
IGZpbGUKCQkJCX0KCgoJCQkJaWYoIGZ1bmMgKSBqc0NvcmUud2FpdCh0aGlzLmNs
YXNzVW5pcUlkKydfSFRNTCcsIGZ1bmN0aW9uICgpewoJCQkJCXZhciBodG1sID0g
dGhpcy5fX2h0bWwucmVwbGFjZSgvQ09NUE9TRV9GT1JNX05BTUUvZywgZm9ybU5h
bWUpOwoJCQkJCWZ1bmMoZmFsc2UsIGh0bWwpOwoJCQkJfS5iaW5kKHRoaXMpKTsK
CgoJCQkJaWYoIHRoaXMuc3RhdHVzIDw9IDAgKXsKCQkJCQl0aGlzLnN0YXR1cwk9
IDE7CgoJCQkJCW1haWxydS5BamF4KHsKCQkJCQkJICB1cmw6ICAgICAgJy9jZ2kt
YmluL2xzdGF0aWM/Z2V0PWNvbXBvc2UnCgkJCQkJCSwgZGF0YTogewoJCQkJCQkJ
ICBjb21wb3NlX25hbWU6ICdDT01QT1NFX0ZPUk1fTkFNRScKCQkJCQkJCSwgbW9k
ZXJuOiBtYWlscnVbJ0lzTmV3Q29tcG9zZURlc2lnbiddID8gMSA6IDAKCQkJCQkJ
fQoJCQkJCQksIGRhdGFUeXBlOiAndGV4dCcKCQkJCQkJLCB0eXBlOiAgICAgJ0dF
VCcKCQkJCQkJLCBjb21wbGV0ZTogZnVuY3Rpb24gKFIpewoJCQkJCQkJaWYoIFIu
aXNPSygpICl7CgoJCQkJCQkJCXZhciBodG1sID0gUi5nZXREYXRhKCk7CgoJCQkJ
CQkJCXRoaXMuc3RhdHVzCT0gMjsgLy8gbG9hZGVkCgkJCQkJCQkJdGhpcy5fX2h0
bWwJPSBodG1sOwoKCQkJCQkJCQkkKHdpbmRvdykudHJpZ2dlcignY29tcG9zZWZv
cm1sb2FkZWQnKTsKCgkJCQkJCQkJaWYoIGh0bWwubWF0Y2goL21haWxydV9idWls
ZD0oXGQrKS8pICl7CgkJCQkJCQkJCW1haWxydS5uZWVkUmVsb2FkUGFnZSgnYnVp
bGQnLCBSZWdFeHAuJDEgKiAxKTsKCQkJCQkJCQkJaWYoIG1haWxydS5pc1NlbnRN
c2cgJiYgbWFpbHJ1Lm5lZWRSZWxvYWRQYWdlKCdjb21wb3NlJykgKXsKCQkJCQkJ
CQkJCXJldHVybjsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCgkJCQkJCQkJanNDb3Jl
Lm5vdGlmeSh0aGlzLmNsYXNzVW5pcUlkICsgJ19IVE1MJyk7CgkJCQkJCQl9CgkJ
CQkJCQllbHNlIGlmKCB0aGlzLmF0dGVtcHRzID4gMCApewoJCQkJCQkJCXRoaXMu
c3RhdHVzCT0gMDsKCQkJCQkJCQl0aGlzLmF0dGVtcHRzLS07CgoJCQkJCQkJCXNl
dFRpbWVvdXQobWFpbHJ1LlZpZXcuQ29tcG9zZS5sb2FkRm9ybUh0bWwuYmluZCh0
aGlzKSwgNTAwMCk7CgkJCQkJCQkJZGVidWcubG9nKCdtYWlscnUuVmlldy5Db21w
b3NlICglcyk6IGludGVybmFsIGVycm9yJy5yZXBsYWNlKCclcycsIGZvcm1OYW1l
KSk7Ci8qCgkJCQkJCQkJdmFyIGpxWEhSID0gUi5nZXRYSFIoKTsKCgkJCQkJCQkJ
dmFyIGxvZyA9IHsKCQkJCQkJCQkJbG9nOiAnc2VudG1zZ2Vycm9yJywKCQkJCQkJ
CQkJcmVhZHlTdGF0ZToganFYSFIucmVhZHlTdGF0ZSwKCQkJCQkJCQkJc3RhdHVz
OiBqcVhIUi5zdGF0dXMsCgkJCQkJCQkJCXN0YXR1c1RleHQ6IGpxWEhSLnN0YXR1
c1RleHQsCgkJCQkJCQkJCWVtYWlsOiB3aW5kb3cubWFpbHJ1ICYmIG1haWxydS51
c2VyZW1haWwgPyBtYWlscnUudXNlcmVtYWlsIDogJycsCgkJCQkJCQkJCXJlc3Bv
bnNlVGV4dDoganFYSFIucmVzcG9uc2VUZXh0CgkJCQkJCQkJfTsKCQkJCQkJCQlu
ZXcgSW1hZ2UoKS5zcmMgPSAnLy9nc3RhdC4nICsgbWFpbHJ1LnN0YXRpY0RvbWFp
bk5hbWUgKyAnL2dzdGF0P3VhPTEmbG9nbWU9JyArIGVuY29kZVVSSUNvbXBvbmVu
dCgkLnBhcmFtKGxvZykpOwoqLwoJCQkJCQkJfQoJCQkJCQl9LmJpbmQodGhpcykK
CQkJCQl9KTsKCQkJCX0KCQkJfSwKCgoJCQlyZW5kZXJUbzogZnVuY3Rpb24gKCRl
bCwgZm4sIGZhc3QpewoJCQkJdmFyIGRmID0gJGVsLmRhdGEoJ2NvbXBvc2UnKTsK
CgkJCQlpZiggIWRmICl7CgkJCQkJJGVsLmRhdGEoJ2NvbXBvc2UnLCBkZiA9ICQu
RGVmZXJyZWQoKSk7CgoJCQkJCXZhciBuYW1lID0gJ2NvbXBvc2VfJysgKCQuZ3Vp
ZCsrKSArJ18nOwoJCQkJCXZhciBWaWV3ID0gbmV3IG1haWxydS5WaWV3LkNvbXBv
c2UoewoJCQkJCQkgIGlkOgkJbmFtZQoJCQkJCQksIGlkVmlldzoJJGVsCgkJCQkJ
CSwgaXNGYXN0OglmYXN0CgkJCQkJCSwgX2FjdGl2ZToJcmV0dXJuVHJ1ZQoJCQkJ
CX0pOwoKCgkJCQkJJCh3aW5kb3cpLmJpbmQoJ2luaXQuJytuYW1lLCBmdW5jdGlv
biAoKXsKCQkJCQkJanNDb3JlLndhaXQobmFtZSsnLmluaXQnLCBmdW5jdGlvbiAo
KXsKCQkJCQkJCVZpZXcuZ2V0Rm9ybSgpLmJpbmQoJ2NhbmNlbCcsIGZ1bmN0aW9u
ICgpIHsKCQkJCQkJCQkkZWwudHJpZ2dlcignY29tcG9zZWNhbmNlbCcpOwoJCQkJ
CQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCX0pOwoKCgkJCQkJCQlWaWV3LmdldEZv
cm0oKS5wYXJlbnRIZWlnaHQoZnVuY3Rpb24gKCkgewovLwkJCQkJCQkJLy8gU2V0
IGZ1bmN0aW9uIGZvciBjYWxjIGF2YWlsYWJsZUhlaWdodAovLwkJCQkJCQkJLy8g
ZGVidWcubG9nKCdIRUlHSFQ6JywgdGhpcy5vcHRpb25zLnJlc2l6ZURpc2FibGVk
LCAkKCcjTGVmdENvbEVuZEFuY2hvcicpLm9mZnNldCgpLnRvcCAtIHRoaXMuZ2V0
TWFpbkZyYW1lKCkub2Zmc2V0KCkudG9wKTsKCQkJCQkJCQlyZXR1cm4gYWpzLndp
bmRvd0hlaWdodCgpIC0gMjYwOwovLwkJCQkJCQkJcmV0dXJuCSQoJyNMZWZ0Q29s
RW5kQW5jaG9yJykub2Zmc2V0KCkudG9wIC0gb2Zmc2V0ICYmIG9mZnNldC50b3A7
CgkJCQkJCQl9KTsKCi8vCQkJCQkJCVZpZXcuZ2V0Rm9ybSgpLmJpbmQoJ2luaXRl
ZCcsIGZ1bmN0aW9uICgpewoJCQkJCQkJCWRmLnJlc29sdmUoVmlldyk7Ci8vCQkJ
CQkJCX0pOwoJCQkJCQl9KTsKCQkJCQl9KTsKCgoJCQkJCVZpZXcucmVkcmF3KCk7
CgkJCQl9CgoJCQkJcmV0dXJuCWRmLmRvbmUoZm4pLnByb21pc2UoKTsKCQkJfQoK
CQl9KQoJCS5tZXRob2RzKHsKCgkJX2ZpcnN0OiBmdW5jdGlvbiAoKXsKCQkJdGhp
cy5zdGF0dXMJCT0gdGhpcy5hY3RpdmUgPyAyIDogMDsKCQkJdGhpcy5fX0dFVAkJ
PSB7fTsJLy8geyAia2V5IjogInF1ZXJ5U3RyaW5nIiB9CgkJCXRoaXMuX19odG1s
CQk9IDA7CgkJCXRoaXMuX3NpZ25hdHVyZQk9ICcnOwoKCQkJdGhpcy5hY3RpdmUJ
CT0gZmFsc2U7CS8vIGFsd2F5cyB1bmFjdGl2ZSBmb3IgY2FsbCByZWRyYXcKCgkJ
CXRoaXMuaXNDaGFuZ2UoJ2hhc2gnLCBqc0hpc3RvcnkuZ2V0KCkpOwoJCX0sCgoJ
CV9vbmU6IGZ1bmN0aW9uICgpewoJCQl0aGlzLiRWaWV3CQk9ICQoIHRoaXMuaWRW
aWV3ICk7CgkJCXRoaXMuJExvYWRlcgk9ICQoKTsKCQl9LAoKCQlfcmVkcmF3OiBm
dW5jdGlvbiAociwgYSl7CgkJCWlmKCAhciApewoJCQkJaWYoICFhICl7CgkJCQkJ
Ly8gc2V0dGluZyB0aGlzIHZhcmlhYmxlIG9jY3VycyAiZ2V0U2lnbiIKCQkJCQl0
aGlzLl9fc2lnbmF0dXJlTG9hZGVkID0gZmFsc2U7CgkJCQkJdGhpcy5pc0NoYW5n
ZSgnaGFzaCcsIG51bGwpOwoJCQkJfQoKCQkJCWlmKCAyID09PSB0aGlzLnN0YXR1
cyApewovLwkJCQkJdGhpcy4kVmlldy5kaXNwbGF5KGEpOwoKCQkJCQlpZiggYSAm
JiAoMCAhPT0gdGhpcy5fX2h0bWwpICl7CgkJCQkJCXRoaXMuJFZpZXcuaW5uZXJI
VE1MKCB0aGlzLl9faHRtbCApOwoJCQkJCQl0aGlzLl9faHRtbAk9IDA7CgkJCQkJ
CSQuZ2xvYmFsRXZhbCggJCgnI1NDUklQVF8nK3RoaXMuaWQpLnJlbW92ZSgpLmlu
bmVySFRNTCgpICk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSBpZiggMCA9PT0gdGhp
cy5zdGF0dXMgKXsKCQkJCQl0aGlzLnN0YXR1cwk9IDE7IC8vIGxvYWRpbmcKCQkJ
CQltYWlscnUuVmlldy5Db21wb3NlLmxvYWRGb3JtSHRtbCh0aGlzLmlkLCBmdW5j
dGlvbiAoZXJyb3IsIGh0bWwpewoJCQkJCQlpZiggIWVycm9yICl7CgkJCQkJCQl2
YXIgbW9kZSA9IHRoaXMuaXNGYXN0ID8gJ05PUk1BTCcgOiAnRkFTVCc7CgkJCQkJ
CQl0aGlzLl9faHRtbAk9IGh0bWwucmVwbGFjZShuZXcgUmVnRXhwKCc8IS0tQkVH
SU46Jyttb2RlKyctLT5bXFxzXFxTXSs8IS0tRU5EOicrbW9kZSsnLS0+JyksICcn
KTsKCQkJCQkJCXRoaXMuc3RhdHVzCT0gMjsKCQkJCQkJCXRoaXMuX3JlZHJhdygw
LCB0aGlzLmlzQWN0aXZlKCkpOwoJCQkJCQl9CgkJCQkJfS5iaW5kKHRoaXMpKTsK
CQkJCX0KCQkJCWVsc2UgaWYoIHRoaXMuc3RhdHVzID09PSAxICApewoJCQkJCS8v
IHRyeSBhZ2FpbgoJCQkJCW1haWxydS5WaWV3LkNvbXBvc2UubG9hZEZvcm1IdG1s
KCk7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiggYSApewoJCQkJdmFyIHVybCA9IGpz
SGlzdG9yeS5nZXQoKTsKCQkJCWlmKCB+dXJsLmluZGV4T2YoJ2FjdGlvbj0nKSB8
fCAodGhpcy5hdXRvbG9hZCAmJiB0aGlzLmlzQ2hhbmdlKCdoYXNoJywgdXJsKSkg
KXsKCQkJCQl0aGlzLmxvYWQoIHVybCApOwoJCQkJfQoJCQl9CgkJfSwKCgkJX2xl
dEJvZHk6IGZ1bmN0aW9uICh0ZXh0LCBtb2RlLCBNc2cpIHsKCgkJCXZhciBsZXRf
Ym9keSA9IE1zZy5sZXRfYm9keSA9PSBudWxsID8gJycgOiBNc2cubGV0X2JvZHku
dG9TdHJpbmcoKTsKCQkJdmFyIGxldF9ib2R5X3BsYWluID0gTXNnLmxldF9ib2R5
X3BsYWluID09IG51bGwgPyAnJyA6IE1zZy5sZXRfYm9keV9wbGFpbi50b1N0cmlu
ZygpOwoJCQl2YXIgcXVvdGVfc3RyaW5nID0gTXNnLnF1b3RlX3N0cmluZyA9PSBu
dWxsID8gJycgOiBNc2cucXVvdGVfc3RyaW5nLnRvU3RyaW5nKCk7CgkJCXZhciBp
bmRleCA9IChtb2RlID09ICdmb3J3YXJkJyA/ICdsZXRfYm9keV9md2QnIDogJ2xl
dF9ib2R5X3JlJykgKyAodGV4dCA9PSAncGxhaW4nID8gJ19wbGFpbicgOiAnJyk7
CgoJCQlyZXR1cm4JKE1zZ1tpbmRleF0pLnJlcGxhY2UoL19fTEVUX0JPRFlfKFFV
T1RFX1BMQUlOfFBMQUlOfEhUTUwpX18vLCBmdW5jdGlvbiAoYm9keSwgdHlwZSkg
ewoJCQkJaWYgKHR5cGUgPT0gJ0hUTUwnKSB7CgkJCQkJYm9keSA9IGxldF9ib2R5
OwoJCQkJfSBlbHNlIGlmICh0eXBlID09ICdQTEFJTicpIHsKCQkJCQlib2R5ID0g
bGV0X2JvZHlfcGxhaW47CgkJCQl9IGVsc2UgewoJCQkJCWJvZHkgPSBxdW90ZV9z
dHJpbmcgKyBsZXRfYm9keV9wbGFpbi5yZXBsYWNlKC9bXHJcbl0vZywgJ1xuJyAr
IHF1b3RlX3N0cmluZyk7CgkJCQl9CgkJCQlyZXR1cm4JYm9keTsKCQkJfSk7CgkJ
fSwKCgkJX2ZpeDogZnVuY3Rpb24gKCl7CgkJCWlmKCAkLmJyb3dzZXIud2Via2l0
ICl7CgkJCQlmb3IoIHZhciBpID0gMCwgJFYgPSB0aGlzLiRWaWV3LCAkUyA9ICQo
JzxiPi48L2I+Jyk7IGkgPCAzOyBpKysgKXsKCQkJCQkkUy5jbG9uZSgpLmFwcGVu
ZFRvKCRWKS5yZW1vdmUoKTsKCQkJCQkkViA9ICRWLnBhcmVudCgpOwoJCQkJfQoJ
CQl9CgkJfSwKCgoJCS8vIEBwdWJsaWMKCQlnZXRGb3JtOiBmdW5jdGlvbiAoKQoJ
CXsKCQkJcmV0dXJuCW1haWxydS5Db21wb3NlICYmIG1haWxydS5Db21wb3NlLkZv
cm0gJiYgbWFpbHJ1LkNvbXBvc2UuRm9ybVt0aGlzLmlkXTsKCQl9LAoKCQlzd2l0
Y2hNb2RlOiBmdW5jdGlvbiAobW9kZSwgZm9yY2UpIHsKCgkJCXZhciBkYXRhID0g
U3RyaW5nLnRvT2JqZWN0KHRoaXMuX3F1ZXJ5KTsKCgkJCWlmICgncmVwbHlhbGwn
IGluIGRhdGEpIHsKCQkJCWRlbGV0ZSBkYXRhWydyZXBseSddOwoJCQl9CgoJCQlp
ZiAoIShtb2RlIGluIGRhdGEpIHx8IGZvcmNlKSB7CgoJCQkJZGVsZXRlIGRhdGFb
J3JlcGx5J107CgkJCQlkZWxldGUgZGF0YVsncmVwbHlhbGwnXTsKCQkJCWRlbGV0
ZSBkYXRhWydmb3J3YXJkJ107CgkJCQlkZWxldGUgZGF0YVsnbmV3J107CgoJCQkJ
dmFyIE1zZwk9IG1haWxydS5NZXNzYWdlcy5nZXQoZGF0YS5pZCk7CgkJCQl2YXIg
ZHJhZnRJZCA9IHRoaXMuX2dldERyYWZ0SWQoTXNnLCBtb2RlKTsKCgkJCQlpZigg
IU1zZyB8fCBkcmFmdElkIHx8IC9mb3J3YXJkfGRyYWZ0cy8udGVzdChtb2RlICsg
dGhpcy5tb2RlKSApCgkJCQl7CgkJCQkJdGhpcy5sb2FkKFN0cmluZy50b1F1ZXJ5
KGRhdGEpLCBtb2RlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlkYXRhW21v
ZGVdID0gMTsKCgkJCQkJdGhpcy5fcXVlcnkgPSBTdHJpbmcudG9RdWVyeShkYXRh
KTsKCgkJCQkJdGhpcy5nZXRGb3JtKCkKCQkJCQkJLnNldE1vZGUobW9kZSwgTXNn
LklkKQoJCQkJCQkuZm9jdXMoKQoJCQkJCTsKCQkJCX0KCQkJfQoJCX0sCgoJCWxv
YWQ6IGZ1bmN0aW9uIChkYXRhLCBtb2RlLCBmb3JjZSl7CgkJCXZhciBvcHRpb25z
ID0gW2RhdGEsIG1vZGUsIGZvcmNlXSwgYWN0aW9uSWQ7CgoJCQlkYXRhID0gU3Ry
aW5nLnRvT2JqZWN0KHRoaXMuX3RvT2xkRm9ybWF0KGRhdGEpKTsKCgkJCWlmICht
YWlscnUuSXNOZXdDb21wb3NlRGVzaWduICYmIChtYWlscnUuRW5hYmxlSU1BUCB8
fCAobWFpbHJ1LklzRXh0ZXJuYWxBY2NvdW50ICYmIG1haWxydS5OZWVkTW9yZUlu
Zm9Gb3JDb21wb3NlKSkpIHsKCQkJCXRoaXMuc2V0RnJvbSgpOwoJCQl9CgoJCQlp
ZiggL15cZCsoO1xkKztcZCspPyQvLnRlc3QoZGF0YS5pZCkgKQoJCQl7CS8vIENo
ZWNrIG1lc3NhZ2VzIGlkCgkJCQlpZiggJ2ZvcndhcmQnIGluIGRhdGEgKSBtb2Rl
ID0gJ2ZvcndhcmQnOwoJCQkJZWxzZSBpZiggJ2RyYWZ0cycgaW4gZGF0YSApICBt
b2RlID0gJ2RyYWZ0cyc7CgkJCQllbHNlIGlmKCAncmVwbHlhbGwnIGluIGRhdGEg
KSAgbW9kZSA9ICdyZXBseWFsbCc7CgkJCQllbHNlIGlmKCAncmVwbHknIGluIGRh
dGEgKSAgbW9kZSA9ICdyZXBseSc7CgkJCX0KCQkJZWxzZSBpZiAobWFpbHJ1Lk9m
ZmxpbmVDYWNoZS5pc0FsbG93ZWQoKSAmJiBkYXRhLmFjdGlvbikgewoJCQkJYWN0
aW9uSWQgPSBkYXRhLmFjdGlvbjsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCW1vZGUJ
PSAnbmV3JzsKCQkJfQoKCQkJaWYoIGRhdGEuX2tleV8gKQoJCQl7CS8vIFJlc3Rv
cmUgR0VUIHBhcmFtcyBieSBrZXkKCQkJCWRhdGEJPSB0aGlzLl9fR0VUW2RhdGEu
X2tleV9dIHx8ICcnOwoJCQkJZm9yY2UJPSB0cnVlOwoKCQkJCWlmKCAvZm9yd2Fy
ZC8udGVzdChkYXRhKSApCQkJbW9kZSA9ICdmb3J3YXJkJzsKCQkJCWVsc2UgaWYo
IC9yZXBseWFsbC8udGVzdChkYXRhKSApCW1vZGUgPSAncmVwbHlhbGwnOwoJCQkJ
ZWxzZSBpZiggL3JlcGx5Ly50ZXN0KGRhdGEpICkJCW1vZGUgPSAncmVwbHknOwoJ
CQkJZWxzZSBtb2RlID0gJ25ldyc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlkYXRh
CQk9IFN0cmluZy50b1F1ZXJ5KGRhdGEpLnJlcGxhY2UoLyhyZXBseXxyZXBseWFs
bHxkcmFmdHN8Zm9yd2FyZClbPSZcZF0qL2dpLCAnJykrJyYnOwoJCQkJdGhpcy5t
b2RlCT0gbW9kZTsKCgkJCQlzd2l0Y2goIG1vZGUgKQoJCQkJewoJCQkJCWNhc2Ug
J3JlcGx5YWxsJzogZGF0YSArPSAncmVwbHkmcmVwbHlhbGw9MSc7IGJyZWFrOwoJ
CQkJCWNhc2UgJ2ZvcndhcmQnOiBkYXRhICs9ICdmb3J3YXJkJzsgYnJlYWs7CgkJ
CQkJZGVmYXVsdDogZGF0YSArPSBtb2RlID8gbW9kZSsnPTEnIDogJyc7CgkJCQl9
CgkJCX0KCgkJCXRoaXMuYWJvcnQoKTsKCgkJCS8vIHNhdmUgdXJsCgkJCXRoaXMu
X3VybAk9ICcvY29tcG9zZS8/JytkYXRhOwoJCQl0aGlzLl9xdWVyeQk9IGRhdGE7
CgoJCQkvLyBHZXQgY3VycmVudCBtZXNzYWdlCgkJCXZhciBNc2cJPSBtYWlscnUu
TWVzc2FnZXMuZ2V0KCBTdHJpbmcudG9PYmplY3QodGhpcy5fdXJsKS5pZCksIGRy
YWZ0SWQ7CgoJCQlpZiAoTXNnKSB7CgkJCQlpZiAoTXNnLm1hcF9pbmxpbmVfaW1n
KSB7CgkJCQkJZm9yY2UgPSAxOwoJCQkJLy8gcmVhZG1zZyBieSBBSkFYIG9yIHN0
YXRpYyBsaW5rIHJldHVybiBBdHRhY2hmaWxlc19JdGVtcywgbm90IEF0dGFjaG1l
bnQKCQkJCX0gZWxzZSBpZiAoTXNnLkF0dGFjaG1lbnQgfHwgTXNnLkF0dGFjaGZp
bGVzX0l0ZW1zIHx8IE1zZy5BdHRhY2hsaW5rc19JdGVtcykgewoJCQkJCWlmICgh
KG1vZGUgPT0gJ3JlcGx5JyB8fCBtb2RlID09ICdyZXBseWFsbCcpKSB7CgkJCQkJ
CWZvcmNlID0gMTsKCQkJCQl9CgkJCQl9CgoJCQkJZHJhZnRJZCA9IHRoaXMuX2dl
dERyYWZ0SWQoTXNnLCBtb2RlKTsKCQkJCWlmIChkcmFmdElkKSB7CgkJCQkJdGhp
cy5tb2RlID0gbW9kZSA9ICdkcmFmdHMnOwoJCQkJCWRhdGEgPSAnaWQ9JyArIGRy
YWZ0SWQgKyAnJicgKyBtb2RlICsgJz0xJzsKCQkJCX0KCQkJfQoKCQkJbWFpbHJ1
LmxvZygnY29tcG9zZS5tc2c6JywgdGhpcy5fdXJsKTsKLy8JCQlhanMubG9nKCdj
b21wb3NlLm1zZzonLCBNc2cpOwovLwkJCWFqcy5sb2coJ2NvbXBvc2UuZGF0YTon
LCBkYXRhKTsKLy8JCQlhanMubG9nKCdjb21wb3NlLm1vZGU6JywgbW9kZSk7Ci8v
CQkJYWpzLmxvZygnY29tcG9zZS51cmw6JywgdGhpcy5fdXJsKTsKCgkJCWlmKCAh
Zm9yY2UgJiYgKG1vZGUgIT0gJ25ldycgJiYgbW9kZSAhPSAnZHJhZnRzJykgJiYg
TXNnICYmICgnbGV0X2JvZHlfcmUnIGluIE1zZykgKXsKCgkJCQlqc0NvcmUud2Fp
dCh0aGlzLmlkKycuaW5pdCcsIGZ1bmN0aW9uICgpewoJCQkJCXZhciBGb3JtID0g
dGhpcy5nZXRGb3JtKCksIGRhdGEgPSBGb3JtLmdldERhdGEoeyBhdHRhY2htZW50
czogZmFsc2UgfSk7CgoJCQkJCSQuZXh0ZW5kKGRhdGEsIHsKCQkJCQkJICBtb2Rl
OgkJCQltb2RlCgkJCQkJCSwgTWVzc2FnZUlkOgkJanNDb3JlLmdldFJhbmRvbUhh
c2goOCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkKCQkJCQkJLCBIVE1MQ29tcG9zZToJCU1z
Zy5IVE1MQ29tcG9zZQoJCQkJCQksIGxldGJvZHlfaHRtbDoJCXRoaXMuX2xldEJv
ZHkoJ2h0bWwnLCBtb2RlLCBNc2cpCgkJCQkJCSwgbGV0Ym9keV9wbGFpbjoJdGhp
cy5fbGV0Qm9keSgncGxhaW4nLCBtb2RlLCBNc2cpCgkJCQkJCSwgZmlsZXNfaWQ6
CQkJJycKCQkJCQkJLCBmaWxlc19pZHM6CQknJwoJCQkJCQksIGNsb3VkX2ZpbGVz
X2lkczoJJycKCQkJCQkJLCBhY3Rpb25JZDoJCQknJwoJCQkJCQksIHRlbXBsYXRl
X2lkOgkJJycKCQkJCQkJLCBIaWdoUHJpb3JpdHk6CQknJwoJCQkJCQksIE5lZWRS
Y3B0OgkJCScnCgkJCQkJCSwgcmVtaW5kOgkJCScnCgkJCQkJCSwgTGVmdE1haWxT
aXplOgkJbWFpbHJ1LkNvbXBvc2UuZmlsZVVwbG9hZGVyU2V0dGluZ3MuTWF4QXR0
YWNobWVudFNpemUKCQkJCQkJLCBtYXBfaW5saW5lX2ltZzoJTXNnLm1hcF9pbmxp
bmVfaW1nCgkJCQkJfSwgRm9ybS5nZXRGaWVsZHNCeVR5cGUobW9kZSwgTXNnKSk7
CgoJCQkJCUZvcm0KCQkJCQkJLnJlc2V0KCkKCQkJCQkJLnJlZHJhdyggZGF0YSAp
CgkJCQkJOwoKCQkJCQl0aGlzLl9maXgoKTsKCQkJCX0uYmluZCh0aGlzKSkKCQkJ
fQoJCQllbHNlIGlmIChhY3Rpb25JZCkgewoJCQkJanNDb3JlLndhaXQodGhpcy5p
ZCsnLmluaXQnLCBmdW5jdGlvbiAoKSB7CgkJCQkJbWFpbHJ1Lk9mZmxpbmVDYWNo
ZS5nZXRBY3Rpb24oYWN0aW9uSWQpLmRvbmUoZnVuY3Rpb24gKGFjdGlvbikgewoJ
CQkJCQlpZiAoYWN0aW9uKSB7CgkJCQkJCQl2YXIgYWN0aW9uUGFyYW1zID0gYWN0
aW9uLmRhdGEuZGF0YTsKCgkJCQkJCQl2YXIgRm9ybSA9IHRoaXMuZ2V0Rm9ybSgp
LCBkYXRhID0gRm9ybS5nZXREYXRhKHsgYXR0YWNobWVudHM6IGZhbHNlIH0pOwoK
CQkJCQkJCSQuZXh0ZW5kKGRhdGEsIHsKCQkJCQkJCQkgIGxldGJvZHlfaHRtbDoJ
CX5+YWN0aW9uUGFyYW1zLkhUTUxNZXNzYWdlID8gYWN0aW9uUGFyYW1zLkJvZHkg
OiAnJwoJCQkJCQkJCSwgbGV0Ym9keV9wbGFpbjoJfn5hY3Rpb25QYXJhbXMuSFRN
TE1lc3NhZ2UgPyAnJyA6IGFjdGlvblBhcmFtcy5Cb2R5CgkJCQkJCQkJLCBIVE1M
Q29tcG9zZToJCX5+YWN0aW9uUGFyYW1zLkhUTUxNZXNzYWdlCgkJCQkJCQkJLCBU
bzoJCQkJJycKCQkJCQkJCQksIENDOgkJCQknJwoJCQkJCQkJCSwgQkNDOgkJCQkn
JwoJCQkJCQkJCSwgU3ViamVjdDoJCQknJwoJCQkJCQkJCSwgZHJhZnRfbXNnOgkJ
JycKCQkJCQkJCQksIHJlX21zZzoJCQknJwoJCQkJCQkJCSwgZndkX21zZzoJCQkn
JwoJCQkJCQkJCSwgZmlsZXNfaWQ6CQkJJycKCQkJCQkJCQksIHRlbXBsYXRlX2lk
OgkJJycKCQkJCQkJCQksIEhpZ2hQcmlvcml0eToJCScnCgkJCQkJCQkJLCBOZWVk
UmNwdDoJCQknJwoJCQkJCQkJCSwgTGVmdE1haWxTaXplOgkJbWFpbHJ1LkNvbXBv
c2UuZmlsZVVwbG9hZGVyU2V0dGluZ3MuTWF4QXR0YWNobWVudFNpemUKCQkJCQkJ
CQksIE1lc3NhZ2VJZDoJCWFjdGlvblBhcmFtcy5tZXNzYWdlCgkJCQkJCQl9LCBh
Y3Rpb25QYXJhbXMsIHsKCQkJCQkJCQkgIGFjdGlvbklkOgkJCWFjdGlvbi50aW1l
CgkJCQkJCQl9KTsKCgkJCQkJCQl0aGlzLmdldEZvcm0oKQoJCQkJCQkJCS5yZXNl
dCgpCgkJCQkJCQkJLnJlZHJhdyhkYXRhKQoJCQkJCQkJOwoKCQkJCQkJCXRoaXMu
X2ZpeCgpOwoJCQkJCQl9CgkJCQkJfS5iaW5kKHRoaXMpKTsKCQkJCX0uYmluZCh0
aGlzKSk7CgkJCX0KCQkJZWxzZSBpZiggbW9kZSA9PSAnbmV3JyApewoJCQkJanND
b3JlLndhaXQodGhpcy5pZCsnLmluaXQnLCBmdW5jdGlvbiAoKXsKCQkJCQl2YXIg
Rm9ybSA9IHRoaXMuZ2V0Rm9ybSgpLCBkYXRhID0gRm9ybS5nZXREYXRhKHsgYXR0
YWNobWVudHM6IGZhbHNlIH0pOwoKCQkJCQl2YXIgZXh0cmFfZmllbGRzID0ge307
CgoJCQkJCWlmIChtYWlscnUudjIpIHsKCQkJCQkJLy8gaHR0cHM6Ly9qaXJhLm1h
aWwucnUvYnJvd3NlL01BSUwtMTU2MTIKCQkJCQkJaWYgKEdFVC5UbykgewoJCQkJ
CQkJZXh0cmFfZmllbGRzLlRvID0gR0VULlRvOwoJCQkJCQl9IGVsc2UgaWYgKEdF
VC5tYWlsdG8pIHsKCQkJCQkJCXZhciBtYWlsdG8gPSBHRVQubWFpbHRvLm1hdGNo
KC8oXm1haWx0bzopKC4qKS8pOwoJCQkJCQkJZXh0cmFfZmllbGRzLlRvID0gbWFp
bHRvICYmIG1haWx0b1syXTsKCQkJCQkJfSBlbHNlIGlmIChHRVQuQ0MpIHsKCQkJ
CQkJCWV4dHJhX2ZpZWxkcy5DQyA9IEdFVC5DQzsKCQkJCQkJfSBlbHNlIGlmIChH
RVQuQkNDKSB7CgkJCQkJCQlleHRyYV9maWVsZHMuQkNDID0gR0VULkJDQzsKCQkJ
CQkJfQoJCQkJCX0KCgkJCQkJJC5leHRlbmQoZGF0YSwgewoJCQkJCQkgIGxldGJv
ZHlfaHRtbDoJCXRoaXMuZ2V0U2lnbignaHRtbCcpCgkJCQkJCSwgbGV0Ym9keV9w
bGFpbjoJdGhpcy5nZXRTaWduKCd0ZXh0JykKCQkJCQkJLCBIVE1MQ29tcG9zZToJ
CW1haWxydS5IVE1MQ29tcG9zZQoJCQkJCQksIFRvOgkJCQknJwoJCQkJCQksIEND
OgkJCQknJwoJCQkJCQksIEJDQzoJCQkJJycKCQkJCQkJLCBTdWJqZWN0OgkJCScn
CgkJCQkJCSwgZHJhZnRfbXNnOgkJJycKCQkJCQkJLCByZV9tc2c6CQkJJycKCQkJ
CQkJLCBmd2RfbXNnOgkJCScnCgkJCQkJCSwgZmlsZXNfaWQ6CQkJJycKCQkJCQkJ
LCBmaWxlc19pZHM6CQknJwoJCQkJCQksIGNsb3VkX2ZpbGVzX2lkczoJJycKCQkJ
CQkJLCBhY3Rpb25JZDoJCQknJwoJCQkJCQksIHRlbXBsYXRlX2lkOgkJJycKCQkJ
CQkJLCBIaWdoUHJpb3JpdHk6CQknJwoJCQkJCQksIHJlbWluZDoJCQknJwoJCQkJ
CQksIE5lZWRSY3B0OgkJCScnCgkJCQkJCSwgTGVmdE1haWxTaXplOgkJbWFpbHJ1
LkNvbXBvc2UuZmlsZVVwbG9hZGVyU2V0dGluZ3MuTWF4QXR0YWNobWVudFNpemUK
CQkJCQkJLCBNZXNzYWdlSWQ6CQlqc0NvcmUuZ2V0UmFuZG9tSGFzaCg4LCB0cnVl
LCB0cnVlLCB0cnVlKQoJCQkJCX0sIGV4dHJhX2ZpZWxkcyk7CgoJCQkJCXRoaXMu
Z2V0Rm9ybSgpCgkJCQkJCS5yZXNldCgpCgkJCQkJCS5yZWRyYXcoZGF0YSkKCQkJ
CQk7CgoJCQkJCXRoaXMuX2ZpeCgpOwoJCQkJfS5iaW5kKHRoaXMpKTsKCQkJfQoJ
CQllbHNlIHsKCQkJCWlmKCB0aGlzLmdldEZvcm0oKSApewoJCQkJCS8vIElmIGZv
cm0gZXhpc3RzLCBkaXNhYmxlZCBpdAoJCQkJCXRoaXMuZ2V0Rm9ybSgpCgkJCQkJ
CS5yZXNldCgpCgkJCQkJCS5kaXNhYmxlRWRpdCgpCgkJCQkJOwoJCQkJfQoKCQkJ
CW1haWxydS5BamF4LmdldCgnL2NvbXBvc2UvP2FqYXhfY2FsbD0xJmZ1bmNfbmFt
ZT1nZXRfcGFyYW1zJywgZGF0YSwgZnVuY3Rpb24gKHVybCwgcmVzdWx0KSB7CgoJ
CQkJCWlmIChyZXN1bHQuaXNPSygpICYmIHRoaXMuaXNBY3RpdmUoKSAmJiB1cmwg
PT0gdGhpcy5fdXJsKSB7CgoJCQkJCQlqc0NvcmUud2FpdCh0aGlzLmlkKycuaW5p
dCcsIGZ1bmN0aW9uICgpIHsKCgkJCQkJCQl2YXIgZGF0YSA9IHJlc3VsdC5nZXRE
YXRhKCksIGRyYWZ0TW9kZSA9IHRoaXMuZ2V0Rm9ybSgpLl9nZXRNZXNzYWdlTW9k
ZSgpOwoKCQkJCQkJCWlmIChkcmFmdE1vZGUgJiYgZHJhZnRJZCAmJiBkYXRhLk5v
TVNHICYmIE1zZykgewoKCQkJCQkJCQlNc2dbZHJhZnRNb2RlICsgJ19kcmFmdCdd
ID0gTXNnLmxhc3RfZHJhZnQgPSBNc2cubGFzdF9kcmFmdF90eXBlID0gbnVsbDsK
CgkJCQkJCQkJJC5lYWNoKFsncmVwbHknLCdyZXBseWFsbCcsJ2ZvcndhcmQnXSwg
ZnVuY3Rpb24gKGssIHYpIHsKCQkJCQkJCQkJaWYgKE1zZ1t2ICsgJ19kcmFmdCdd
KSB7CgkJCQkJCQkJCQlNc2cubGFzdF9kcmFmdCA9IE1zZ1t2ICsgJ19kcmFmdCdd
OwoJCQkJCQkJCQkJTXNnLmxhc3RfZHJhZnRfdHlwZSA9IHY7CgkJCQkJCQkJCX0K
CQkJCQkJCQl9KTsKCgkJCQkJCQkJdGhpcy5zd2l0Y2hNb2RlKGRyYWZ0TW9kZSwg
dHJ1ZSk7CgoJCQkJCQkJfSBlbHNlIHsKCgkJCQkJCQkJdGhpcy5nZXRGb3JtKCku
ZW5hYmxlRWRpdCgpLnJlZHJhdyhkYXRhKTsKCQkJCQkJCX0KCgkJCQkJCQl0aGlz
Ll9maXgoKTsKCgkJCQkJCX0uYmluZCh0aGlzKSk7CgkJCQkJfQoKCQkJCX0uYmlu
ZCh0aGlzLCB0aGlzLl91cmwpKTsKCQkJfQoJCX0sCgoJCXNldEZyb206IGZ1bmN0
aW9uKCkgewoJCQl2YXIgZW1haWwgPSBtYWlscnUuZ2V0Q29sbGVjdG9ySW5mb0J5
TWVzc2FnZUlkKEdFVC5pZCkuZW1haWw7CgoJCQlpZiAoIWVtYWlsKSB7CgkJCQll
bWFpbCA9IG1haWxydS51c2VyZW1haWw7CgkJCX0KCgkJCWlmIChtYWlscnUuaGFz
Q29sbGVjdG9ycygpKSB7CgkJCQl2YXIgYml0ID0gJCgnLmpzLWRyb3Bkb3duX19s
aXN0X19pdGVtX2Zyb20nKS5kYXRhKCdiaXQnKSB8fCA0OwoKCQkJCXRoaXMuJFZp
ZXcuZmluZCgnLmpzLWNvbXBvc2VfX2Ryb3Bkb3duX2VtYWlsJykKCQkJCQkudGV4
dChlbWFpbCk7CgoJCQkJbWFpbHJ1LkVkaXRvckZsYWdzIHw9IGJpdDsKCQkJfQoK
CQkJcmV0dXJuIGVtYWlsOwoJCX0sCgoJCV9nZXREcmFmdElkOiBmdW5jdGlvbiAo
TXNnLCBtb2RlKSB7CgkJCXZhciBpZDsKCQkJaWYgKG1haWxydS5NZXNzYWdlRnJv
bURyYWZ0ICYmIG1vZGUgJiYgTXNnICYmIE1zZy5sYXN0X2RyYWZ0KSB7CgkJCQlp
ZCA9IE1zZ1ttb2RlICsgJ19kcmFmdCddOwoJCQl9CgkJCXJldHVybiBpZDsKCQl9
LAoKCQlhYm9ydDogZnVuY3Rpb24gKCkKCQl7CS8vIEFib3J0aW5nICJsb2FkIiBt
c2cgcGFyYW1zCgkJCWlmKCB0aGlzLl94aHIgKSB0cnkKCQkJewoJCQkJdGhpcy5f
eGhyLmFib3J0KCk7CgkJCX0KCQkJY2F0Y2ggKGVyKXt9CgkJfSwKCgkJZ2V0VXJs
OiBmdW5jdGlvbiAoKQoJCXsKCQkJcmV0dXJuCXRoaXMuX3VybDsKCQl9LAoKCQln
ZXRTaWduOiBmdW5jdGlvbiAodHlwZS8qdGV4dCBPUiBodG1sKi8pCgkJewkvLyBH
ZXQgc2lnbmF0dXJlIGZvciBuZXcgbWVzc2FnZQoJCQl2YXIgdCA9IHRoaXMuX3Np
Z25hdHVyZSwgcyA9IG1haWxydS5Vc2VyU2lnbmF0dXJlLCBkUyA9IG1haWxydS5E
ZWZhdWx0U2lnbmF0dXJlOwoKCQkJaWYoICF0aGlzLl9fc2lnbmF0dXJlTG9hZGVk
ICkKCQkJewoJCQkJdGhpcy5fX3NpZ25hdHVyZUxvYWRlZAk9IHRydWU7IC8vIHJl
c2V0IHRoZSB2YXJpYWJsZSBpbiAiX3JlZHJhdyIKCgkJCQlpZiggJC50cmltKHMp
ID09ICcnICYmICFtYWlscnUuRGlzYWJsZVJla2xhbWEgKQoJCQkJewkvLyBObyBz
aWduYXR1cmUgYW5kIG5vdCBkaXNhYmxlZCBhZHZlcnRpc2luZywgd2UgZ2V0IGEg
YWQKCQkJCQlpZiggIW1haWxydS5Vc2VySGFzTXkgKQoJCQkJCXsJLy8gSWYgdGhl
IHdvcmxkIHdhcyBub3QgY3JlYXRlZCwgdGhlbiB3ZSBnZXQgYSBkZWZhdWx0U2xv
dAoJCQkJCQlpZiggZFMgKSB0ID0gQWpheC5nZXRTeW5jRGF0YSgnL3RtcGwvc3Rh
dGljJywgeyBnZXRTbG90QnlJZDogZFMgfSkgfHwgJyc7CgkJCQkJfQoJCQkJCWVs
c2UKCQkJCQl7CgkJCQkJCXQJPSBBamF4LmdldFN5bmNEYXRhKCcvdG1wbC9zdGF0
aWMnLCB7IGdldFNsb3RCeUlkOiA1NjMgfSkgfHwgJyc7CgkJCQkJfQoKCQkJCQl0
CT0gJC50cmltKHQpICE9ICcnID8gJy0tXG4nK3QgOiAnJzsKCQkJCX0KCQkJCWVs
c2UKCQkJCXsJLy8gVXNlIHNpZ25hdHVyZSB1c2VyCgkJCQkJdAk9IHM7CgkJCQl9
CgoJCQkJLy8gSWYgc2lnbmF0dXJlIG5vdCBlbXB0eSwgdXNlIGl0CgkJCQl0CT0g
JC50cmltKHQpICE9ICcnID8gJ1xuXG5cbicgKyB0IDogJyc7CgkJCX0KCgkJCS8v
IFNhdmUgc2lnbmF0dXJlIGluICJ0ZXh0IiBtb2RlCgkJCXRoaXMuX3NpZ25hdHVy
ZQk9IHQ7CgoJCQlpZiggdCAhPSAnJykKCQkJewoJCQkJaWYgKHR5cGUgPT0gJ2h0
bWwnKSB7CgkJCQkJdCA9IHQucmVwbGFjZSgvXHI/XG4vZywgJzxici8+Jyk7CgkJ
CQl9IGVsc2UgewoJCQkJCXQgPSB3aW5kb3cucmVwbGFjZUVudGl0eSh0KTsKCQkJ
CX0KCQkJfQoKCQkJcmV0dXJuCXQ7CgkJfSwKCgoJCW9wZW46IGZ1bmN0aW9uIChw
YXJhbXMsIGxvYWQsIGRpc2FibGVIaXN0b3J5KXsKCQkJcGFyYW1zCT0gdGhpcy5f
dG9PbGRGb3JtYXQocGFyYW1zKTsKCgkJCS8vINCf0JjQl9CU0JXQpiEKCQkJdmFy
IGlkcyA9IHBhcmFtcy5tYXRjaCgvaWQ9L2cpLCBrZXksIHVybDsKCgkJCWlmKCAv
cmVwbHlhbGwvLnRlc3QocGFyYW1zKSAmJiAhL3JlcGx5WyY9XS8udGVzdChwYXJh
bXMpICl7CgkJCQlwYXJhbXMgKz0gJyZyZXBseSc7CgkJCX0KCgkJCWlmKCBpZHMg
JiYgaWRzLmxlbmd0aCA+IDEgfHwgL2ZvcndhcmQ9YXR0YWNofGZpbGVzZWFyY2gv
LnRlc3QocGFyYW1zKSApewoJCQkJa2V5CT0gYWpzLm5vdygpOwoJCQkJdGhpcy5f
X0dFVFtrZXldCT0gcGFyYW1zOwoJCQkJaWYoIGRpc2FibGVIaXN0b3J5ICl7CgkJ
CQkJcGFyYW1zID0gJ19rZXlfPScra2V5OwoJCQkJfSBlbHNlIHsKCQkJCQlqc0hp
c3Rvcnkuc2V0KCcvY29tcG9zZS8/X2tleV89JytrZXkpOwoJCQkJfQoJCQl9CgoJ
CQlsb2FkICYmIHRoaXMubG9hZChwYXJhbXMpCgkJfSwKCgoJCV90b09sZEZvcm1h
dDogZnVuY3Rpb24gKHBhcmFtcyl7CgkJCWlmKCAhfnBhcmFtcy5pbmRleE9mKCdp
ZD0nKSApewoJCQkJdmFyIG1hdGNoID0gcGFyYW1zLm1hdGNoKC9cLyhbXGQsO10r
KVwvKFteXC9dKykvKTsKCQkJCWlmKCBtYXRjaCApewoJCQkJCWlmKCBtYXRjaFsy
XSA9PSAnZHJhZnQnICl7CgkJCQkJCW1hdGNoWzJdID0gJ2RyYWZ0cyc7CgkJCQkJ
fQoJCQkJCXBhcmFtcyA9IG1hdGNoWzJdLnJlcGxhY2UoLy0vZywgJz0nKSArJyZp
ZD0nKyBtYXRjaFsxXS5zcGxpdCgnLCcpLmpvaW4oJyZpZD0nKTsKCQkJCX0KCQkJ
fQoKCQkJcmV0dXJuCXBhcmFtczsKCQl9CgoJfSk7CgoKCWpzTG9hZGVyLmxvYWRl
ZCgne21haWxydS52aWV3fW1haWxydS5WaWV3LkNvbXBvc2UnLCAxKTsKCi8vIGRh
dGEvcnUvaW1hZ2VzL2pzL3J1L1ZpZXdzL21haWxydS5WaWV3LkNvbXBvc2UuanMg
ZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvUHJvamVjdHMvbWFp
bC5ydS9PZmZsaW5lL21haWxydS5PZmZsaW5lTG9nZ2VyLmpzIHN0YXJ0CgoKdmFy
IF9wZXJmb3JtYW5jZSA9IHdpbmRvd1sncGVyZm9ybWFuY2UnXSB8fCB7fTsKCV9w
ZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbigpIHsKCQlyZXR1cm4gX3BlcmZvcm1h
bmNlWydub3cnXSB8fCBfcGVyZm9ybWFuY2VbJ21vek5vdyddIHx8IF9wZXJmb3Jt
YW5jZVsnbXNOb3cnXSB8fCBfcGVyZm9ybWFuY2VbJ29Ob3cnXSB8fCBfcGVyZm9y
bWFuY2VbJ3dlYmtpdE5vdyddIHx8IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gbmV3
IERhdGUoKS5nZXRUaW1lKCk7CgkJfTsKCX0oKTsKCgl2YXIgTG9nZ2VySXRlbUxp
c3QgPSBbXTsKCXZhciBMb2dnZXJJdGVtTGlzdFRvQ29uc29sZSA9IFtdOwoKCXZh
ciBMb2dnZXJJdGVtID0gZnVuY3Rpb24gKG5hbWUsIG1lc3NhZ2UsIHN0YXJ0X3Rp
bWUsIGFyZ3MpIHsKCQl0aGlzLm5hbWUgPSBuYW1lOwoJCXRoaXMubWVzc2FnZSA9
IG1lc3NhZ2U7CgkJdGhpcy5zdGFydF9kYXRhID0gYXJncy5sZW5ndGggPiAxID8g
YXJncyA6IGFyZ3NbMF07CgkJdGhpcy5zdGFydF9kYXRlID0gbmV3IERhdGUoKTsK
CQl0aGlzLnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOwoJfTsKCglMb2dnZXJJdGVt
LnByb3RvdHlwZSA9IHsKCgkJZG9uZTogZnVuY3Rpb24gKGVuZF90aW1lLCBhcmdz
KSB7CgkJCXRoaXMudGltZSA9IGVuZF90aW1lIC0gdGhpcy5zdGFydF90aW1lOwoJ
CQl0aGlzLmVuZF9kYXRhID0gYXJncy5sZW5ndGggPiAxID8gYXJncyA6IGFyZ3Nb
MF07CgkJfSwKCgkJdG9Db25zb2xlOiBmdW5jdGlvbiAoKSB7CgoJCQl2YXIgYXJn
cyA9IFt0aGlzLnRvU3RyaW5nKCldOwoKCQkJaWYgKHRoaXMuc3RhcnRfZGF0YSAh
PT0gdW5kZWZpbmVkKSB7CgkJCQlhcmdzLnB1c2goJ1tzdGFydCBkYXRhXSAtPics
IHRoaXMuc3RhcnRfZGF0YSk7CgkJCX0KCgkJCWlmICh0aGlzLmVuZF9kYXRhICE9
PSB1bmRlZmluZWQpIHsKCQkJCWFyZ3MucHVzaCgnW2VuZCBkYXRhXSAtPicsIHRo
aXMuZW5kX2RhdGEpOwoJCQl9CgoJCQlhanMubG9nLmFwcGx5KGFqcy5sb2csIGFy
Z3MpOwoJCX0sCgoJCXRvQ29uc29sZUpTT046IGZ1bmN0aW9uICgpIHsKCgkJCWZ1
bmN0aW9uIGNlbnNvciAoa2V5LCB2YWx1ZSkgewoJCQkJaWYgKHZhbHVlKSB7CgkJ
CQkJaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JykgewoJCQkJCQlpZiAodmFs
dWUubm9kZU5hbWUpIHsKCQkJCQkJCXJldHVybiAnRE9NRWxlbWVudCAnICsgdmFs
dWUubm9kZU5hbWU7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gdmFs
dWU7CgkJCX0KCgkJCXZhciBhcmdzID0gW3RoaXMudG9TdHJpbmcoKV07CgoJCQlp
ZiAodGhpcy5zdGFydF9kYXRhICE9PSB1bmRlZmluZWQpIHsKCQkJCWFyZ3MucHVz
aCgnW3N0YXJ0IGRhdGFdIC0+JywgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGFydF9k
YXRhLCBjZW5zb3IpKTsKCQkJfQoKCQkJaWYgKHRoaXMuZW5kX2RhdGEgIT09IHVu
ZGVmaW5lZCkgewoJCQkJYXJncy5wdXNoKCdbZW5kIGRhdGFdIC0+JywgSlNPTi5z
dHJpbmdpZnkodGhpcy5lbmRfZGF0YSwgY2Vuc29yKSk7CgkJCX0KCgkJCWFqcy5s
b2cuYXBwbHkoYWpzLmxvZywgYXJncyk7CgkJfSwKCgkJdG9TdHJpbmc6IGZ1bmN0
aW9uICgpIHsKCQkJcmV0dXJuICcgICAtLS0+IFsnICsgdGhpcy5uYW1lICsgJzog
JyArIHRoaXMuc3RhcnRfZGF0ZS5mb3JtYXQoJ0g6STpTJykgKyAnXSAnICsgdGhp
cy5tZXNzYWdlICsgJzogJyArIHRoaXMudGltZS50b0ZpeGVkKDMpOwoJCX0KCX07
CgoJdmFyIExvZ2dlckludGVyZmFjZSA9ICQubm9vcDsKCglBcnJheS5mb3JFYWNo
KFsnc3RhcnQnLCAnc3RhcnRBdCcsICdlbmQnLCAnZW5kQXQnLCAncHVzaCddLCBm
dW5jdGlvbiAobmFtZSkgewoJCUxvZ2dlckludGVyZmFjZS5wcm90b3R5cGVbbmFt
ZV0gPSAkLm5vb3A7Cgl9KTsKCglBcnJheS5mb3JFYWNoKFsndG9Db25zb2xlJywg
J3RvQ29uc29sZUpTT04nXSwgZnVuY3Rpb24gKG5hbWUpIHsKCQlMb2dnZXJJbnRl
cmZhY2VbbmFtZV0gPSAkLm5vb3A7Cgl9KTsKCgkvKioKCSAqIEBjbGFzcyBtYWls
cnUuT2ZmbGluZUxvZ2dlcgoJICovCgl2YXIgTG9nZ2VyID0gZnVuY3Rpb24gKG5h
bWUpIHsKCQl0aGlzLmlucHV0VG9Db25zb2xlID0gd2luZG93WydzdG9yZSddLmdl
dCgnb2ZmbGluZS5sb2dfdG9fY29uc29sZScpOwoJCXRoaXMubmFtZSA9IG5hbWU7
CgkJdGhpcy5tYXAgPSBbXTsKCQl0aGlzLmxlbmd0aCA9IDA7Cgl9OwoKCUxvZ2dl
ci5wcm90b3R5cGUgPSB7CgoJCXN0YXJ0OiBmdW5jdGlvbiAobWVzc2FnZSkgewoJ
CQl2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50
cywgMSk7CgkJCXZhciBpdGVtID0gbmV3IExvZ2dlckl0ZW0odGhpcy5uYW1lLCBt
ZXNzYWdlLCBfcGVyZm9ybWFuY2Uubm93KCksIGFyZ3MpOwoJCQl0aGlzLnB1c2go
aXRlbSk7CgkJCXJldHVybiBpdGVtOwoJCX0sCgoJCXN0YXJ0QXQ6IGZ1bmN0aW9u
IChrZXksIG1lc3NhZ2UpIHsKCQkJcmV0dXJuIHRoaXMubWFwW2tleV0gPSB0aGlz
LnN0YXJ0KG1lc3NhZ2UpOwoJCX0sCgoJCWVuZDogZnVuY3Rpb24gKGl0ZW0pIHsK
CQkJdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDEpOwoJCQlpdGVtLmRvbmUoX3BlcmZvcm1hbmNlLm5vdygpLCBhcmdzKTsK
CQkJaWYgKHRoaXMuaW5wdXRUb0NvbnNvbGUpIHsKCQkJCWZvciAodmFyIGl0ZW1U
b0NvbnNvbGUsIGkgPSAwLCBsID0gTG9nZ2VySXRlbUxpc3RUb0NvbnNvbGUubGVu
Z3RoOyBpPGw7IGkrKykgewoJCQkJCWl0ZW1Ub0NvbnNvbGUgPSBMb2dnZXJJdGVt
TGlzdFRvQ29uc29sZVtpXTsKCQkJCQlpZiAoJ3RpbWUnIGluIGl0ZW1Ub0NvbnNv
bGUpIHsKCQkJCQkJaXRlbVRvQ29uc29sZS50b0NvbnNvbGUoKTsKCQkJCQkJTG9n
Z2VySXRlbUxpc3RUb0NvbnNvbGUuc3BsaWNlKGksIDEpOwoJCQkJCQlsLS07CgkJ
CQkJCWktLTsKCQkJCQl9IGVsc2UgewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9
CgkJCX0KCQl9LAoKCQllbmRBdDogZnVuY3Rpb24gKGtleSkgewoJCQl2YXIgaXRl
bSA9IHRoaXMubWFwW2tleV07CgkJCWlmIChpdGVtKSB7CgkJCQl0aGlzLmVuZChp
dGVtKTsKCQkJfQoJCX0sCgoJCXB1c2g6IGZ1bmN0aW9uIChpdGVtKSB7CgkJCWlm
IChMb2dnZXJJdGVtTGlzdC5sZW5ndGggPiA1MDApIHsKCQkJCUxvZ2dlckl0ZW1M
aXN0LnNoaWZ0KCk7CgkJCX0KCQkJTG9nZ2VySXRlbUxpc3QucHVzaChpdGVtKTsK
CgkJCWlmICh0aGlzLmlucHV0VG9Db25zb2xlKSB7CgkJCQlMb2dnZXJJdGVtTGlz
dFRvQ29uc29sZS5wdXNoKGl0ZW0pOwoJCQl9CgkJfQoJfTsKCglMb2dnZXIudG9D
b25zb2xlID0gZnVuY3Rpb24gKCkgewoJCWFqcy5sb2coJ1xuLS0tLS0tLS0tLS8v
LS0tLS0tLS0tLS8vLS0tLS0tLS0tLS8vLS0tLS0tLS0tLS8vLS0tLS0tLS0tLS8v
LS0tLS0tLS0tLS8vLS0tLS0tLS0tLS8vLS0tLS0tLS0tLVxuJyk7CgkJZm9yICh2
YXIgaSA9IDAsIGwgPSBMb2dnZXJJdGVtTGlzdC5sZW5ndGg7IGk8bDsgaSsrKSB7
CgkJCUxvZ2dlckl0ZW1MaXN0W2ldLnRvQ29uc29sZSgpOwoJCX0KCX07CgoJTG9n
Z2VyLnRvQ29uc29sZUpTT04gPSBmdW5jdGlvbiAoKSB7CgkJYWpzLmxvZygnXG4t
LS0tLS0tLS0tLy8tLS0tLS0tLS0tLy8tLS0tLS0tLS0tLy8tLS0tLS0tLS0tLy8t
LS0tLS0tLS0tLy8tLS0tLS0tLS0tLy8tLS0tLS0tLS0tLy8tLS0tLS0tLS0tXG4n
KTsKCQlmb3IgKHZhciBpID0gMCwgbCA9IExvZ2dlckl0ZW1MaXN0Lmxlbmd0aDsg
aTxsOyBpKyspIHsKCQkJTG9nZ2VySXRlbUxpc3RbaV0udG9Db25zb2xlSlNPTigp
OwoJCX0KCX07CgoJaWYgKG1haWxydVsnaXNDJ10pIHsKCQltYWlscnUuT2ZmbGlu
ZUxvZ2dlciA9IExvZ2dlcjsKCX0gZWxzZSB7CgkJbWFpbHJ1Lk9mZmxpbmVMb2dn
ZXIgPSBMb2dnZXJJbnRlcmZhY2U7Cgl9CgoJanNMb2FkZXIubG9hZGVkKCd7bWFp
bHJ1Lm9mZmxpbmV9bWFpbHJ1Lk9mZmxpbmVMb2dnZXInLCAxKTsKCi8vIGRhdGEv
cnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9Qcm9qZWN0cy9tYWlsLnJ1L09mZmxpbmUv
bWFpbHJ1Lk9mZmxpbmVMb2dnZXIuanMgZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9q
cy9ydS9qc0NvcmUvUHJvamVjdHMvbWFpbC5ydS9PZmZsaW5lL21haWxydS5PZmZs
aW5lVHJhbnNwb3J0LmpzIHN0YXJ0CgoKdmFyIF9sb2cgPSBuZXcgbWFpbHJ1Lk9m
ZmxpbmVMb2dnZXIoJ09mZmxpbmVXZWJzdG9yZVRyYW5zcG9ydCcpOwoKCS8qKgoJ
ICogQGNsYXNzIG1haWxydS5PZmZsaW5lV2Vic3RvcmVUcmFuc3BvcnQKCSAqLwoJ
anNDbGFzcwoJLmNyZWF0ZSgnbWFpbHJ1Lk9mZmxpbmVXZWJzdG9yZVRyYW5zcG9y
dCcpCgkuc3RhdGljcyh7CgkJZGVmYXVsdE9wdGlvbnM6IHsKCQkJdGltZW91dDog
MTAwMDAKCQl9Cgl9KQoJLm1ldGhvZHMoewoKCQlfX2NvbnN0cnVjdDogZnVuY3Rp
b24gKG9wdGlvbnMpIHsKCgkJCXRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBt
YWlscnUuT2ZmbGluZVdlYnN0b3JlVHJhbnNwb3J0LmRlZmF1bHRPcHRpb25zLCBv
cHRpb25zKTsKCgkJCXRoaXMudHlwZSA9ICd3ZWJzdG9yZSc7CgoJCQl2YXIgd2Vi
c3RvcmVIb3N0ID0gbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgdGhpcy5vcHRp
b25zLnVzZXJNRDUgKyAnLndlYnN0b3JlLm1haWwucnUnOwoKCQkJaWYgKC8oKG9t
ZWdhfGFscGhhKVwudGVzdHx3aW5cZCtcLmRldilcLm1haWxcLnJ1JC8udGVzdChs
b2NhdGlvbi5ob3N0KSkgewoJCQkJd2Vic3RvcmVIb3N0ID0gJ2h0dHA6Ly8nICsg
dGhpcy5vcHRpb25zLnVzZXJNRDUgKyAnLndlYnN0b3JlLicgKyBsb2NhdGlvbi5o
b3N0OwoJCQl9CgoJCQl0aGlzLnJlYWR5VGltZXJJZCA9IHNldFRpbWVvdXQodGhp
cy5fY29tcGxldGUuYmluZCh0aGlzLCAnZXJyb3InKSwgdGhpcy5vcHRpb25zLnRp
bWVvdXQpOwoKCQkJdmFyIFJwY0NvbmZpZyA9IHsKCQkJCWNoYW5uZWw6ICd3ZWJz
dG9yZScsCgkJCQlyZW1vdGU6IHdlYnN0b3JlSG9zdCArICcvY2dpLWJpbi9sc3Rh
dGljPycgKyAkLnBhcmFtKHsKCQkJCQlnZXQ6ICd3ZWJzdG9yZScsCgkJCQkJb2Zm
bGluZV9kYXRhX3ZlcnNpb246IG1haWxydVsnT2ZmbGluZURhdGFWZXJzaW9uJ10s
CgkJCQkJb2ZmbGluZV9zdG9yYWdlX3ZlcnNpb246IG1haWxydVsnT2ZmbGluZVN0
b3JhZ2VWZXJzaW9uJ10sCgkJCQkJbWVzc2FnZXNfcGVyX3BhZ2U6IG1haWxydVsn
bWVzc2FnZXNQZXJQYWdlJ10sCgkJCQkJbm9tYW5pZmVzdDogKyFtYWlscnVbJ09m
ZmxpbmVNYW5pZmVzdCddCgkJCQl9KSwKCQkJCXByb3BzOiB7CgkJCQkJc3R5bGU6
IHsKCQkJCQkJZGlzcGxheTogJ25vbmUnCgkJCQkJfQoJCQkJfQoJCQl9OwoKCQkJ
dmFyIFJwY0pzb25ScGNDb25maWcgPSB7CgkJCQlsb2NhbDogewoJCQkJCXN0b3Jh
Z2VTdGF0dXM6IHRoaXMuX2NvbXBsZXRlLmJpbmQodGhpcykKCQkJCX0sCgkJCQly
ZW1vdGU6IHsKCQkJCQlwb3N0OiB7fSwKCQkJCQlkcm9wQXBwQ2FjaGU6IHt9LAoJ
CQkJCXJlbW92ZVN0b3JhZ2U6IHt9CgkJCQl9CgkJCX07CgoJCQlfbG9nLnN0YXJ0
QXQoJ3RyYW5zcG9ydCcsICdpbml0IHN0b3JhZ2VUcmFuc3BvcnQnLCBScGNDb25m
aWcsIFJwY0pzb25ScGNDb25maWcpOwoKCQkJdGhpcy50cmFuc3BvcnQgPSBuZXcg
bWFpbHJ1Lk9mZmxpbmVDYWNoZS5lYXN5WERNLlJwYyhScGNDb25maWcsIFJwY0pz
b25ScGNDb25maWcpOwoJCX0sCgoJCV9jb21wbGV0ZTogZnVuY3Rpb24gKHRleHRT
dGF0dXMpIHsKCgkJCV9sb2cuZW5kQXQoJ3RyYW5zcG9ydCcsIHRleHRTdGF0dXMp
OwoKCQkJaWYgKHRleHRTdGF0dXMgPT0gJ3N1Y2Nlc3MnKSB7CgkJCQljbGVhclRp
bWVvdXQodGhpcy5yZWFkeVRpbWVySWQpOwoJCQl9CgkJCXRoaXMub3B0aW9ucy5j
b21wbGV0ZSh0ZXh0U3RhdHVzKTsKCQl9LAoKCQlwb3N0OiBmdW5jdGlvbiAodXJs
LCBkYXRhLCBjb21wbGV0ZSkgewoKCQkJdmFyIF9saSA9IF9sb2cuc3RhcnQoJ3Bv
c3QnLCB1cmwsIGRhdGEpOwoKCQkJY29tcGxldGUgPSBjb21wbGV0ZSB8fCAkLm5v
b3A7CgovLwkJCXZhciBzdWNjZXNzID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7Ci8v
CQkJCV9sb2cuZW5kKF9saSwgJ3N1Y2Nlc3MnLCByZXNwb25zZSk7Ci8vCQkJCWNv
bXBsZXRlKHJlc3BvbnNlKTsKLy8JCQl9OwovLwovLwkJCXZhciBlcnJvciA9IGZ1
bmN0aW9uIChyZXNwb25zZSkgewovLwkJCQlpZiAocmVzcG9uc2UpIHsKLy8JCQkJ
CV9sb2cuZW5kKF9saSwgJ2Vycm9yJywgcmVzcG9uc2UpOwovLwkJCQl9Ci8vCQkJ
CWNvbXBsZXRlKCk7Ci8vCQkJfTsKCgkJCXZhciBzdWNjZXNzID0gZnVuY3Rpb24g
KHJlc3BvbnNlKSB7CgkJCQlfbG9nLmVuZChfbGksICdzdWNjZXNzJywgcmVzcG9u
c2VbMF0sIHJlc3BvbnNlWzFdKTsKCQkJCWNvbXBsZXRlKHJlc3BvbnNlWzFdKTsK
CQkJfTsKCgkJCXZhciBlcnJvciA9IGZ1bmN0aW9uIChyZXNwb25zZSkgewoJCQkJ
X2xvZy5lbmQoX2xpLCAnZXJyb3InLCByZXNwb25zZVswXSwgcmVzcG9uc2VbMV0p
OwoJCQkJY29tcGxldGUoKTsKCQkJfTsKCgkJCWlmICh0aGlzLnRyYW5zcG9ydC5w
b3N0KSB7CgkJCQl2YXIgcGFydHMgPSB1cmwuc3BsaXQoJy8nKTsKCQkJCXRoaXMu
dHJhbnNwb3J0LnBvc3QoewoJCQkJCW9iamVjdDogcGFydHMuc2hpZnQoKSwKCQkJ
CQltZXRob2Q6IHBhcnRzLmpvaW4oJy8nKSwKCQkJCQlkYXRhOiBkYXRhCgkJCQl9
LCBzdWNjZXNzLCBlcnJvcik7CgkJCX0gZWxzZSB7CgkJCQllcnJvcigpOwoJCQl9
CgkJfSwKCgkJZHJvcEFwcENhY2hlOiBmdW5jdGlvbiAoc3VjY2Vzc0ZuLCBlcnJv
ckZuKSB7CgkJCXRoaXMudHJhbnNwb3J0LmRyb3BBcHBDYWNoZShzdWNjZXNzRm4s
IGVycm9yRm4pOwoJCX0sCgoJCXJlbW92ZVN0b3JhZ2U6IGZ1bmN0aW9uIChzdWNj
ZXNzRm4sIGVycm9yRm4pIHsKCQkJdGhpcy50cmFuc3BvcnQucmVtb3ZlU3RvcmFn
ZShzdWNjZXNzRm4sIGVycm9yRm4pOwoJCX0sCgoJCWRlc3Ryb3k6IGZ1bmN0aW9u
ICgpIHsKCQkJdGhpcy50cmFuc3BvcnQuZGVzdHJveSgpOwoJCX0KCX0pOwoKCS8q
KgoJICogQGNsYXNzIG1haWxydS5PZmZsaW5lUGx1Z2luVHJhbnNwb3J0CgkgKi8K
CWpzQ2xhc3MKCS5jcmVhdGUoJ21haWxydS5PZmZsaW5lUGx1Z2luVHJhbnNwb3J0
JykKCS5tZXRob2RzKHsKCgkJX19jb25zdHJ1Y3Q6IGZ1bmN0aW9uIChvcHRpb25z
KSB7CgkJCXRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBtYWlscnUuT2ZmbGlu
ZVBsdWdpblRyYW5zcG9ydC5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7CgkJCXNl
dFRpbWVvdXQoZnVuY3Rpb24gKCkgewoJCQkJdGhpcy5fY29tcGxldGUoJ3N1Y2Nl
c3MnKTsKCQkJfS5iaW5kKHRoaXMpLCAwKTsKCQl9LAoKCQlfY29tcGxldGU6IGZ1
bmN0aW9uICh0ZXh0U3RhdHVzKSB7CgkJCXRoaXMub3B0aW9ucy5jb21wbGV0ZSh0
ZXh0U3RhdHVzKTsKCQl9LAoKCQlwb3N0OiBmdW5jdGlvbiAodXJsLCBkYXRhLCBj
b21wbGV0ZSkgewoJCQljb21wbGV0ZSgpOwoJCX0sCgoJCWRyb3BBcHBDYWNoZTog
ZnVuY3Rpb24gKHN1Y2Nlc3NGbikgewoJCQlpZiAoc3VjY2Vzc0ZuKSB7CgkJCQlz
dWNjZXNzRm4oKTsKCQkJfQoJCX0sCgoJCXJlbW92ZVN0b3JhZ2U6IGZ1bmN0aW9u
IChzdWNjZXNzRm4pIHsKCQkJaWYgKHN1Y2Nlc3NGbikgewoJCQkJc3VjY2Vzc0Zu
KCk7CgkJCX0KCQl9LAoKCQlkZXN0cm95OiBmdW5jdGlvbiAoKSB7CgkJfQoJfSk7
CgoJLyoqCgkgKiBAY2xhc3MgbWFpbHJ1Lk9mZmxpbmVUcmFuc3BvcnQKCSAqLwoJ
anNDbGFzcwoJLmNyZWF0ZSgnbWFpbHJ1Lk9mZmxpbmVUcmFuc3BvcnQnKQoJLm1l
dGhvZHMoewoKCQlfX2NvbnN0cnVjdDogZnVuY3Rpb24gKG9wdGlvbnMpIHsKCQkJ
aWYgKDApIHsKCQkJCXRoaXMudHJhbnNwb3J0ID0gbmV3IG1haWxydS5PZmZsaW5l
UGx1Z2luVHJhbnNwb3J0KG9wdGlvbnMpOwoJCQl9IGVsc2UgewoJCQkJdGhpcy50
cmFuc3BvcnQgPSBuZXcgbWFpbHJ1Lk9mZmxpbmVXZWJzdG9yZVRyYW5zcG9ydChv
cHRpb25zKTsKCQkJfQoJCX0sCgoJCWdldFR5cGU6IGZ1bmN0aW9uICgpIHsKCQkJ
cmV0dXJuIHRoaXMudHJhbnNwb3J0LnR5cGU7CgkJfSwKCgkJcG9zdDogZnVuY3Rp
b24gKHVybCwgZGF0YSwgY29tcGxldGUpIHsKCgkJCWlmICgkLmlzRnVuY3Rpb24o
ZGF0YSkpIHsKCQkJCWNvbXBsZXRlID0gZGF0YTsKCQkJCWRhdGEgPSBudWxsOwoJ
CQl9CgovLwkJCXZhciBfY29tcGxldGUgPSBjb21wbGV0ZTsKLy8KLy8JCQljb21w
bGV0ZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkgewovLwovLwkJCQlhanMubG9nKCdf
X1JFUVVFU1QnLCB1cmwsIGRhdGEpOwovLwkJCQlhanMubG9nKCdfX1JFU1BPTlNF
JywgcmVzcG9uc2UpOwovLwovLwkJCQlpZiAoX2NvbXBsZXRlKSB7Ci8vCQkJCQlf
Y29tcGxldGUocmVzcG9uc2UpOwovLwkJCQl9Ci8vCQkJfTsKCgkJCXRoaXMudHJh
bnNwb3J0LnBvc3QodXJsLCBkYXRhLCBjb21wbGV0ZSk7CgkJfSwKCgkJZHJvcEFw
cENhY2hlOiBmdW5jdGlvbiAoY29tcGxldGUpIHsKCQkJdGhpcy50cmFuc3BvcnQu
ZHJvcEFwcENhY2hlKGNvbXBsZXRlLCBjb21wbGV0ZSk7CgkJfSwKCgkJcmVtb3Zl
U3RvcmFnZTogZnVuY3Rpb24gKGNvbXBsZXRlKSB7CgkJCXRoaXMudHJhbnNwb3J0
LnJlbW92ZVN0b3JhZ2UoY29tcGxldGUsIGNvbXBsZXRlKTsKCQl9LAoKCQlkZXN0
cm95OiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMudHJhbnNwb3J0LmRlc3Ryb3koKTsK
CQl9Cgl9KTsKCglqc0xvYWRlci5sb2FkZWQoJ3ttYWlscnUub2ZmbGluZX1tYWls
cnUuT2ZmbGluZVRyYW5zcG9ydCcsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMv
cnUvanNDb3JlL1Byb2plY3RzL21haWwucnUvT2ZmbGluZS9tYWlscnUuT2ZmbGlu
ZVRyYW5zcG9ydC5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29y
ZS9Qcm9qZWN0cy9tYWlsLnJ1L09mZmxpbmUvbWFpbHJ1Lk9mZmxpbmVBY3Rpb25N
YW5hZ2VyLmpzIHN0YXJ0CgoKdmFyIF9sb2cgPSBuZXcgbWFpbHJ1Lk9mZmxpbmVM
b2dnZXIoJ09mZmxpbmVBY3Rpb25NYW5hZ2VyJyk7CgoJLyoqCgkgKiBAY2xhc3Mg
bWFpbHJ1Lk9mZmxpbmVBY3Rpb25NYW5hZ2VyCgkgKi8KCWpzQ2xhc3MKCS5jcmVh
dGUoJ21haWxydS5PZmZsaW5lQWN0aW9uTWFuYWdlcicpCgkuc3RhdGljcyh7CgkJ
ZGVmYXVsdE9wdGlvbnM6IHsKCQkJYWN0aW9uc1RlbXBsYXRlSWQ6ICcjb2ZmbGlu
ZV9fYWN0aW9uc19lanMnLAoJCQlhY3Rpb25zQ29udGFpbmVyU2VsZWN0b3I6ICcj
YW5ub3VuY2VtZW50c19fb2ZmbGluZS1hY3Rpb25zJwoJCX0KCX0pCgkubWV0aG9k
cyh7CgoJCV9fY29uc3RydWN0OiBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25z
KSB7CgkJCXZhciBzZWxmID0gdGhpczsKCQkJdGhpcy5UcmFuc3BvcnQgPSBUcmFu
c3BvcnQ7CgkJCXRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBtYWlscnUuT2Zm
bGluZUFjdGlvbk1hbmFnZXIuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpOwoJCQl0
aGlzLmFjdGlvbnMgPSBbXTsKCgkJCXRoaXMuY29udHJvbENsaWNrT2JzZXJ2ZXIg
PSB0aGlzLl9jb250cm9sQ2xpY2suYmluZCh0aGlzKTsKCgkJCXRoaXMuJGNvbnRh
aW5lciA9ICQodGhpcy5vcHRpb25zLmFjdGlvbnNDb250YWluZXJTZWxlY3Rvcik7
CgkJCXRoaXMuJGNvbnRhaW5lci5kZWxlZ2F0ZSgnLmpzLWNvbnRyb2wnLCAnY2xp
Y2snLCB0aGlzLmNvbnRyb2xDbGlja09ic2VydmVyKTsKCgkJCSQod2luZG93KS5i
aW5kKCd1cGRhdGUub2ZmbGluZUFjdGlvbnMnLCBmdW5jdGlvbiAoKSB7CgkJCQlz
ZWxmLl91cGRhdGVBY3Rpb25zKCk7CgkJCX0pOwoJCX0sCgoJCWdldEFjdGlvbnM6
IGZ1bmN0aW9uICgpIHsKCgkJCXZhciBfbGkgPSBfbG9nLnN0YXJ0KCdnZXRBY3Rp
b25zJyk7CgoJCQl2YXIgc2VsZiA9IHRoaXMsIGRlZmZlcmVkID0gJC5EZWZlcnJl
ZCgpOwoJCQlpZiAodGhpcy5sb2FkZWQpIHsKCgkJCQlfbG9nLmVuZChfbGksICds
b2FkZWQnLCB0aGlzLmFjdGlvbnMpOwoKCQkJCWRlZmZlcmVkLnJlc29sdmUodGhp
cy5hY3Rpb25zKTsKCQkJfSBlbHNlIHsKCQkJCWlmICh0aGlzLmdldEFjdGlvbnNE
ZWZlcnJlZCkgewoJCQkJCWRlZmZlcmVkID0gdGhpcy5nZXRBY3Rpb25zRGVmZXJy
ZWQ7CgkJCQl9IGVsc2UgewoJCQkJCXRoaXMuZ2V0QWN0aW9uc0RlZmVycmVkID0g
ZGVmZmVyZWQ7CgkJCQkJdGhpcy5UcmFuc3BvcnQucG9zdCgnbWVzc2FnZXMvZ2V0
QWN0aW9ucycsIG51bGwsIGZ1bmN0aW9uIChyZXNwb25zZSkgewoJCQkJCQlzZWxm
LmxvYWRlZCA9IHRydWU7CgkJCQkJCWlmICgkLmlzQXJyYXkocmVzcG9uc2UpKSB7
CgoJCQkJCQkJX2xvZy5lbmQoX2xpLCAnZG9uZScsIHJlc3BvbnNlKTsKCgkJCQkJ
CQlkZWZmZXJlZC5yZXNvbHZlKHNlbGYuYWN0aW9ucyA9IHJlc3BvbnNlKTsKCQkJ
CQkJfSBlbHNlIHsKCgkJCQkJCQlfbG9nLmVuZChfbGksICdmYWlsJywgcmVzcG9u
c2UpOwoKCQkJCQkJCWRlZmZlcmVkLnJlamVjdCgpOwoJCQkJCQl9CgkJCQkJfSk7
CgkJCQl9CgkJCX0KCQkJcmV0dXJuIGRlZmZlcmVkLnByb21pc2UoKTsKCQl9LAoK
CQlleGVjQWN0aW9uczogZnVuY3Rpb24gKCkgewoKCQkJdmFyIF9saSA9IF9sb2cu
c3RhcnQoJ2V4ZWNBY3Rpb25zJyk7CgoJCQl2YXIgc2VsZiA9IHRoaXMsIGRlZmZl
cmVkID0gJC5EZWZlcnJlZCgpOwoJCQlpZiAodGhpcy5leGVjQWN0aW9uRGVmZXJy
ZWQpIHsKCQkJCWRlZmZlcmVkID0gdGhpcy5leGVjQWN0aW9uRGVmZXJyZWQ7CgkJ
CX0gZWxzZSB7CgkJCQl0aGlzLmV4ZWNBY3Rpb25EZWZlcnJlZCA9IGRlZmZlcmVk
OwoJCQkJJC53aGVuKGRlZmZlcmVkLnByb21pc2UoKSkudGhlbihmdW5jdGlvbiAo
KSB7CgoJCQkJCV9sb2cuZW5kKF9saSwgJ2RvbmUnKTsKCgkJCQkJZGVsZXRlIHNl
bGYuZXhlY0FjdGlvbkRlZmVycmVkOwoJCQkJfSwgZnVuY3Rpb24gKCkgewoKCQkJ
CQlfbG9nLmVuZChfbGksICdmYWlsJyk7CgoJCQkJCWRlbGV0ZSBzZWxmLmV4ZWNB
Y3Rpb25EZWZlcnJlZDsKCQkJCX0pOwoKCQkJCXRoaXMuZ2V0QWN0aW9ucygpLnRo
ZW4oZnVuY3Rpb24gKGFjdGlvbnMpIHsKCQkJCQlzZWxmLl9leGVjQWN0aW9ucyhB
cnJheS5wcm90b3R5cGUuY29uY2F0KGFjdGlvbnMpKS5kb25lKGZ1bmN0aW9uICgp
IHsKCQkJCQkJaWYgKG1haWxydS5VcGRhdGVyKSB7CgkJCQkJCQltYWlscnUuVXBk
YXRlci5jdHMgPSB7fTsKCQkJCQkJfQoJCQkJCQlkZWZmZXJlZC5yZXNvbHZlKCk7
CgkJCQkJfSk7CgkJCQl9LCBmdW5jdGlvbiAoKSB7CgkJCQkJZGVmZmVyZWQucmVq
ZWN0KCk7CgkJCQl9KTsKCQkJfQoJCQlyZXR1cm4gZGVmZmVyZWQucHJvbWlzZSgp
OwoJCX0sCgoJCV91cGRhdGVBY3Rpb25zOiBmdW5jdGlvbiAoKSB7CgkJCXZhciBz
ZW5kbXNnQWN0aW9ucyA9IFtdOwoJCQkkLmVhY2godGhpcy5hY3Rpb25zLCBmdW5j
dGlvbiAoaywgYWN0aW9uKSB7CgkJCQlpZiAoYWN0aW9uLmNtZCA9PSAnc2VudG1z
ZycpIHsKCQkJCQlzZW5kbXNnQWN0aW9ucy5wdXNoKGFjdGlvbik7CgkJCQl9CgkJ
CX0pOwoJCQl0aGlzLiRjb250YWluZXIudHBsKHRoaXMub3B0aW9ucy5hY3Rpb25z
VGVtcGxhdGVJZCwgewoJCQkJQWN0aW9uczogc2VuZG1zZ0FjdGlvbnMKCQkJfSk7
CgkJCXRoaXMuJGNvbnRhaW5lci50b2dnbGUoc2VuZG1zZ0FjdGlvbnMubGVuZ3Ro
ID4gMCk7CgkJfSwKCgkJX2NvbnRyb2xDbGljazogZnVuY3Rpb24gKGV2dCkgewoJ
CQl2YXIgJGNvbnRyb2wgPSAkKGV2dC50YXJnZXQpLmNsb3Nlc3QoJy5qcy1jb250
cm9sJywgdGhpcy4kY29udGFpbmVyKTsKCQkJaWYgKCRjb250cm9sLmxlbmd0aCkg
ewoJCQkJaWYgKCRjb250cm9sLmhhc0NsYXNzKCdqcy1jbG9zZScpKSB7CgkJCQkJ
dmFyIGlkID0gJGNvbnRyb2wuZGF0YSgnaWQnKTsKCQkJCQl0aGlzLmRlbGV0ZUFj
dGlvbihwYXJzZUludChpZCkpOwoJCQkJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoJ
CQkJfQoJCQl9CgkJfSwKCgkJZ2V0QWN0aW9uQ291bnQ6IGZ1bmN0aW9uICgpIHsK
CQkJcmV0dXJuIHRoaXMuYWN0aW9ucy5sZW5ndGg7CgkJfSwKCgkJZ2V0QWN0aW9u
OiBmdW5jdGlvbiAoaWQpIHsKCQkJdmFyIGRlZmZlcmVkID0gJC5EZWZlcnJlZCgp
OwoJCQl0aGlzLmdldEFjdGlvbnMoKS5kb25lKGZ1bmN0aW9uIChhY3Rpb25zKSB7
CgkJCQl2YXIgYWN0aW9uLCBpID0gYWN0aW9ucy5sZW5ndGg7CgkJCQlmb3IgKCA7
IGktLTsgKSB7CgkJCQkJaWYgKGFjdGlvbnNbaV0udGltZSA9PSBpZCkgewoJCQkJ
CQlhY3Rpb24gPSBhY3Rpb25zW2ldOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9
CgkJCQlkZWZmZXJlZC5yZXNvbHZlKGFjdGlvbik7CgkJCX0pOwoJCQlyZXR1cm4g
ZGVmZmVyZWQucHJvbWlzZSgpOwoJCX0sCgoJCXB1dEFjdGlvbjogZnVuY3Rpb24g
KGNtZCwgZGF0YSwgaWQpIHsKCQkJdmFyIGFjdGlvbiA9IHsKCQkJCWNtZDogY21k
LAoJCQkJZGF0YTogZGF0YSwKCQkJCXRpbWU6IGlkIHx8IGFqcy5ub3coKQoJCQl9
OwoJCQl2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucywgaSA9IGFjdGlvbnMubGVu
Z3RoLCBmaW5kOwoJCQlmb3IgKCA7IGktLTsgKSB7CgkJCQlpZiAoYWN0aW9uc1tp
XS50aW1lID09IGFjdGlvbi50aW1lKSB7CgkJCQkJZmluZCA9IDE7CgkJCQkJYnJl
YWs7CgkJCQl9CgkJCX0KCQkJaWYgKGZpbmQpIHsKCQkJCWFjdGlvbnMuc3BsaWNl
KGksIDEsIGFjdGlvbik7CgkJCX0gZWxzZSB7CgkJCQlhY3Rpb25zLnB1c2goYWN0
aW9uKTsKCQkJfQoJCQkkKHdpbmRvdykudHJpZ2dlckhhbmRsZXIoJ3VwZGF0ZS5v
ZmZsaW5lQWN0aW9ucycsIFt0aGlzLmFjdGlvbnNdKTsKCQkJdGhpcy5UcmFuc3Bv
cnQucG9zdCgnbWVzc2FnZXMvcHV0QWN0aW9ucycsIFthY3Rpb25dKTsKCQl9LAoK
CQlkZWxldGVBY3Rpb246IGZ1bmN0aW9uIChpZCkgewoJCQl2YXIgYWN0aW9ucyA9
IHRoaXMuYWN0aW9ucywgaSA9IGFjdGlvbnMubGVuZ3RoOwoJCQlmb3IgKCA7IGkt
LTsgKSB7CgkJCQlpZiAoYWN0aW9uc1tpXS50aW1lID09IGlkKSB7CgkJCQkJYWN0
aW9ucy5zcGxpY2UoaSwgMSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJJCh3
aW5kb3cpLnRyaWdnZXJIYW5kbGVyKCd1cGRhdGUub2ZmbGluZUFjdGlvbnMnLCBb
dGhpcy5hY3Rpb25zXSk7CgkJCXRoaXMuVHJhbnNwb3J0LnBvc3QoJ21lc3NhZ2Vz
L2RlbGV0ZUFjdGlvbnMnLCBbaWRdKTsKCQl9LAoKCQlfZXhlY0FjdGlvbnM6IGZ1
bmN0aW9uIChhY3Rpb25zKSB7CgovLwkJCWFqcy5sb2coJ19fT0ZGTElORSBfZXhl
Y0FjdGlvbnMnLCBhY3Rpb25zLCBhY3Rpb25zLmxlbmd0aCk7CgoJCQl2YXIgc2Vs
ZiA9IHRoaXMsIGRlZmVycmVkID0gJC5EZWZlcnJlZCgpLCBsZW5ndGggPSBhY3Rp
b25zLmxlbmd0aCwgY291bnQgPSAwOwoKCQkJZnVuY3Rpb24gY29tcGxldGUoKSB7
CgkJCQlpZiAoKytjb3VudCA+PSBsZW5ndGgpIHsKCQkJCQlkZWZlcnJlZC5yZXNv
bHZlKCk7CgkJCQl9CgkJCX0KCgkJCWZ1bmN0aW9uIGRvTmV4dCAoKSAgewoJCQkJ
dmFyIGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKTsKCQkJCWlmIChhY3Rpb24pIHsK
CQkJCQlzZWxmLl9leGVjQWN0aW9uKGFjdGlvbikudGhlbihmdW5jdGlvbiAoKSB7
CgkJCQkJCXNlbGYuZGVsZXRlQWN0aW9uKGFjdGlvbi50aW1lKTsKCQkJCQkJY29t
cGxldGUoKTsKCQkJCQkJZG9OZXh0KCk7CgkJCQkJfSwgZnVuY3Rpb24gKCkgewoJ
CQkJCQlkZWZlcnJlZC5yZXNvbHZlKCk7CgkJCQkJfSk7CgkJCQl9CgkJCX0KCgkJ
CWlmIChsZW5ndGggPiAwKSB7CgkJCQlkb05leHQoKTsKCQkJfSBlbHNlIHsKCQkJ
CWRlZmVycmVkLnJlc29sdmUoKTsKCQkJfQoKCQkJcmV0dXJuIGRlZmVycmVkLnBy
b21pc2UoKTsKCQl9LAoKCQlfZXhlY0FjdGlvbjogZnVuY3Rpb24gKGFjdGlvbikg
ewoKCQkJdmFyIGRlZmVycmVkID0gJC5EZWZlcnJlZCgpOwoKCQkJbWFpbHJ1LkFQ
SS5hamF4KHsKCQkJCXVybDogYWN0aW9uLmRhdGEudXJsLAoJCQkJdHlwZTogJ1BP
U1QnLAoJCQkJY2FjaGVSdW5uaW5nOiAxLAoJCQkJZGF0YTogYWN0aW9uLmRhdGEu
ZGF0YSwKCQkJCWNvbXBsZXRlOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVz
KSB7CgkJCQkJaWYgKHRleHRTdGF0dXMgPT0gJ3N1Y2Nlc3MnKSB7CgkJCQkJCWRl
ZmVycmVkLnJlc29sdmUoKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlkZWZlcnJlZC5y
ZWplY3QoKTsKCQkJCQl9CgkJCQl9CgkJCX0pOwoKCQkJcmV0dXJuIGRlZmVycmVk
LnByb21pc2UoKTsKCQl9Cgl9KTsKCglqc0xvYWRlci5sb2FkZWQoJ3ttYWlscnUu
b2ZmbGluZX1tYWlscnUuT2ZmbGluZUFjdGlvbk1hbmFnZXInLCAxKTsKCi8vIGRh
dGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9Qcm9qZWN0cy9tYWlsLnJ1L09mZmxp
bmUvbWFpbHJ1Lk9mZmxpbmVBY3Rpb25NYW5hZ2VyLmpzIGVuZAoKdmFyIF9sb2cg
PSBuZXcgbWFpbHJ1Lk9mZmxpbmVMb2dnZXIoJ09mZmxpbmVDYWNoZU1hbmFnZXIn
KTsKCgl2YXIgQWNjb3VudE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7CgkJdGhpcy5h
Y3RpdmVfdXNlcl9lbWFpbCA9IG1haWxydVsnT2ZmbGluZU1vZGUnXSA/IHN0b3Jl
LmdldCgndXNlcl9hY3RpdmUnKSA6IG1haWxydS51c2VyZW1haWw7CgkJdGhpcy5t
YXAgPSB7CgkJCXVzZXJzX2F1dGhvcml6ZWQ6IHN0b3JlLmdldCgndXNlcnNfYXV0
aG9yaXplZCcpCgkJfTsKCQl0aGlzLm1hcFsndXNlcnNfJyArIHRoaXMuYWN0aXZl
X3VzZXJfZW1haWxdID0gc3RvcmUuZ2V0KCd1c2Vyc18nICsgdGhpcy5hY3RpdmVf
dXNlcl9lbWFpbCk7Cgl9OwoKCUFjY291bnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
CgkJaXNBdXRoOiBmdW5jdGlvbiAoKSB7CgkJCXZhciB1c2Vyc19hdXRob3JpemVk
ID0gdGhpcy5tYXBbJ3VzZXJzX2F1dGhvcml6ZWQnXTsKCQkJdmFyIHVzZXJfYWN0
aXZlID0gdGhpcy5hY3RpdmVfdXNlcl9lbWFpbDsKCQkJaWYgKHVzZXJfYWN0aXZl
ICYmICQuaXNBcnJheSh1c2Vyc19hdXRob3JpemVkKSkgewoJCQkJZm9yICh2YXIg
aSA9IHVzZXJzX2F1dGhvcml6ZWQubGVuZ3RoOyBpLS07ICkgewoJCQkJCWlmICh1
c2Vyc19hdXRob3JpemVkW2ldID09PSB1c2VyX2FjdGl2ZSkgewoJCQkJCQlyZXR1
cm4gdHJ1ZTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0s
CgoJCWlzRW5hYmxlT2ZmbGluZU1vZGU6IGZ1bmN0aW9uICgpIHsKCQkJdmFyIHVz
ZXJfZGF0YSA9IHRoaXMuX2dldFVzZXJEYXRhKCk7CgkJCXJldHVybiB1c2VyX2Rh
dGEgJiYgdXNlcl9kYXRhLm9mZmxpbmUgJiYgdXNlcl9kYXRhLm9mZmxpbmUuZW5h
YmxlZCAmJiB1c2VyX2RhdGEub2ZmbGluZS5hdXRoX2tleTsKCQl9LAoKCQlzZXRP
ZmZsaW5lTW9kZVN0YXR1czogZnVuY3Rpb24gKGVuYWJsZWQsIHBhc3N3b3JkKSB7
CgoJCQl2YXIgdXNlcl9kYXRhID0gdGhpcy5fZ2V0VXNlckRhdGEoKTsKCgkJCWlm
IChlbmFibGVkKSB7CgoJCQkJdXNlcl9kYXRhID0gJC5leHRlbmQodHJ1ZSwgdXNl
cl9kYXRhLCB7CgkJCQkJb2ZmbGluZTogewoJCQkJCQllbmFibGVkOiB0cnVlLAoJ
CQkJCQlhdXRoX2tleTogYWpzLk1ENSh0aGlzLmFjdGl2ZV91c2VyX2VtYWlsICsg
cGFzc3dvcmQpCgkJCQkJfQoJCQkJfSk7CgoJCQl9IGVsc2UgewoKCQkJCWlmICh1
c2VyX2RhdGEpIHsKCQkJCQlkZWxldGUgdXNlcl9kYXRhWydvZmZsaW5lJ107CgkJ
CQl9CgkJCX0KCgkJCXRoaXMuc2F2ZSgndXNlcnNfJyArIHRoaXMuYWN0aXZlX3Vz
ZXJfZW1haWwsIHVzZXJfZGF0YSk7CgkJfSwKCgkJYXV0aDogZnVuY3Rpb24gKGVt
YWlsLCBwYXNzd29yZCkgewoJCQl2YXIgdXNlcnNfYXV0aG9yaXplZCA9IHRoaXMu
bWFwWyd1c2Vyc19hdXRob3JpemVkJ107CgkJCXZhciB1c2VyX2RhdGEgPSB0aGlz
Ll9nZXRVc2VyRGF0YSgpOwoJCQl2YXIgaXNBdXRoID0gdXNlcl9kYXRhICYmIHVz
ZXJfZGF0YS5vZmZsaW5lICYmIHVzZXJfZGF0YS5vZmZsaW5lLmF1dGhfa2V5ID09
IGFqcy5NRDUoZW1haWwgKyBwYXNzd29yZCk7CgoJCQlpZiAoaXNBdXRoKSB7CgkJ
CQl1c2Vyc19hdXRob3JpemVkLnB1c2goZW1haWwpOwoJCQkJdGhpcy5zYXZlKCd1
c2Vyc19hdXRob3JpemVkJywgdXNlcnNfYXV0aG9yaXplZCk7CgkJCX0KCgkJCXJl
dHVybiBpc0F1dGg7CgkJfSwKCgkJbG9nb3V0OiBmdW5jdGlvbiAoKSB7CgkJCXRo
aXMuc2F2ZSgndXNlcnNfYXV0aG9yaXplZCcsIFtdKTsKCQl9LAoKCQlzYXZlOiBm
dW5jdGlvbiAoa2V5LCBkYXRhKSB7CgkJCXN0b3JlLnNldChrZXksIHRoaXMubWFw
W2tleV0gPSBkYXRhKTsKCQl9LAoKCQlnZXRBY3RpdmVFbWFpbDogZnVuY3Rpb24g
KCkgewoJCQlyZXR1cm4gdGhpcy5hY3RpdmVfdXNlcl9lbWFpbDsKCQl9LAoKCQlf
Z2V0VXNlckRhdGE6IGZ1bmN0aW9uICgpIHsKCQkJcmV0dXJuIHRoaXMubWFwWyd1
c2Vyc18nICsgdGhpcy5hY3RpdmVfdXNlcl9lbWFpbF07CgkJfQoJfTsKCgl2YXIg
UHJlbG9hZE1hbmFnZXIgPSBmdW5jdGlvbiAoVHJhbnNwb3J0KSB7CgoJCXRoaXMu
VHJhbnNwb3J0ID0gVHJhbnNwb3J0OwoKCQl0aGlzLm1lc3NhZ2VzRGF0YSA9IFtd
OwoJCXRoaXMuZm9sZGVyc0RhdGEgPSBbXTsKCgkJdGhpcy5jdXJyZW50Q291bnQg
PSB0aGlzLmFsbENvdW50ID0gMDsKCQl0aGlzLmNhY2hlRm9sZGVycyA9IHt9OwoK
CQl0aGlzLiRpbmRpY2F0b3IgPSAkKCcjT2ZmbGluZVByZWxvYWRJbmRpY2F0b3In
KS5zaG93KCk7CgkJdGhpcy4kaW5kaWNhdG9yUGVyY2VudENvbnRhaW5lciA9IHRo
aXMuJGluZGljYXRvci5maW5kKCcuanMtcGVyY2VudC1jb250YWluZXInKTsKCQl0
aGlzLiRpbmRpY2F0b3JQZXJjZW50ID0gdGhpcy4kaW5kaWNhdG9yUGVyY2VudENv
bnRhaW5lci5maW5kKCcuanMtcGVyY2VudCcpOwoKCQlpZiAoJC5pc0FycmF5KHdp
bmRvdy5hck1haWxSdUZvbGRlcnMpKSB7CgkJCUFycmF5LmZvckVhY2goYXJNYWls
UnVGb2xkZXJzLCBmdW5jdGlvbiAoZm9sZGVyKSB7CgkJCQl0aGlzLmNhY2hlRm9s
ZGVyc1tmb2xkZXIuSWRdID0gZm9sZGVyOwoJCQl9LCB0aGlzKTsKCQl9Cgl9OwoK
CVByZWxvYWRNYW5hZ2VyLk1BWF9DQUNIRV9QQUdFX0NPVU5UID0gMjsKCglQcmVs
b2FkTWFuYWdlci5wcm90b3R5cGUgPSB7CgoJCXByZWxvYWREYXRhOiBmdW5jdGlv
biAoKSB7CgoJCQlpZiAoJC5pc0FycmF5KHdpbmRvdy5hck1haWxSdUZvbGRlcnMp
KSB7CgoJCQkJQXJyYXkuZm9yRWFjaChhck1haWxSdUZvbGRlcnMsIGZ1bmN0aW9u
IChmb2xkZXIsIGluZGV4KSB7CgkJCQkJZm9sZGVyLlNvcnQgPSBpbmRleDsKCQkJ
CX0pOwoKCQkJCXRoaXMuVHJhbnNwb3J0LnBvc3QoJ21lc3NhZ2VzL2NsZWFyQW5k
UHV0Rm9sZGVycycsIGFyTWFpbFJ1Rm9sZGVycyk7CgoJCQkJaWYgKG1haWxydVsn
T2ZmbGluZVByZWxvYWQnXSkgewoJCQkJCXRoaXMubG9hZEZvbGRlcnNCeUxpc3Qo
YXJNYWlsUnVGb2xkZXJzKTsKCQkJCX0KCQkJfQoJCX0sCgoJCXByZWxvYWRGb2xk
ZXJzOiBmdW5jdGlvbiAocGFyYW1zLCBmb2xkZXJzKSB7CgovLwkJCWFqcy5sb2co
J3ByZWxvYWRGb2xkZXJzJywgcGFyYW1zLCBmb2xkZXJzKTsKCgkJCXZhciBsaXN0
ID0gW107CgkJCWlmICgkLmlzQXJyYXkoZm9sZGVycykpIHsKCQkJCUFycmF5LmZv
ckVhY2goZm9sZGVycywgZnVuY3Rpb24gKGZvbGRlcikgewoJCQkJCWlmIChmb2xk
ZXIuSWQgIT0gcGFyYW1zLmZvbGRlcikgewoJCQkJCQl2YXIgY2FjaGVGb2xkZXIg
PSB0aGlzLmNhY2hlRm9sZGVyc1tmb2xkZXIuSWRdOwoJCQkJCQlpZiAoY2FjaGVG
b2xkZXIpIHsKCQkJCQkJCWlmIChjYWNoZUZvbGRlci5VbnJlYWQgIT0gZm9sZGVy
LlVucmVhZCB8fCBjYWNoZUZvbGRlci5NZXNzYWdlcyAhPSBmb2xkZXIuTWVzc2Fn
ZXMpIHsKCQkJCQkJCQlsaXN0LnB1c2goZm9sZGVyKTsKCQkJCQkJCX0KCQkJCQkJ
fQoJCQkJCX0KCQkJCQl0aGlzLmNhY2hlRm9sZGVyc1tmb2xkZXIuSWRdID0gZm9s
ZGVyOwoJCQkJfSwgdGhpcyk7CgkJCX0KCgkJCXRoaXMubG9hZEZvbGRlcnNCeUxp
c3QobGlzdCk7CgkJfSwKCgkJcHJlbG9hZE1lc3NhZ2VzOiBmdW5jdGlvbiAocGFy
YW1zLCBtZXNzYWdlcykgewoKLy8JCQlhanMubG9nKCdwcmVsb2FkTWVzc2FnZXMn
LCBwYXJhbXMsIG1lc3NhZ2VzKTsKCgkJCWlmICgkLmlzQXJyYXkobWVzc2FnZXMp
ICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDApIHsKCgkJCQl0aGlzLlRyYW5zcG9ydC5w
b3N0KCdtZXNzYWdlcy9wdXRNZXNzYWdlc1ByZXZpZXcnLCB7CgkJCQkJZm9sZGVy
OiBwYXJhbXMuZm9sZGVyLAoJCQkJCWxpbWl0OiBwYXJhbXMubGltaXQsCgkJCQkJ
b2Zmc2V0OiBwYXJhbXMub2Zmc2V0LAoJCQkJCW1lc3NhZ2VzOiBtZXNzYWdlcwoJ
CQkJfSk7CgoJCQkJaWYgKHBhcmFtcy5wYWdlIDwgUHJlbG9hZE1hbmFnZXIuTUFY
X0NBQ0hFX1BBR0VfQ09VTlQpIHsKCQkJCQl0aGlzLmN1cnJlbnRDb3VudCArPSBt
YWlscnUubWVzc2FnZXNQZXJQYWdlOwoJCQkJCXRoaXMuYWxsQ291bnQgKz0gbWFp
bHJ1Lm1lc3NhZ2VzUGVyUGFnZTsKCQkJCQl0aGlzLmNoZWNrTWVzc2FnZXMobWVz
c2FnZXMpOwoJCQkJfQoJCQl9CgkJfSwKCgkJbG9hZEZvbGRlcnNCeUxpc3Q6IGZ1
bmN0aW9uIChmb2xkZXJzKSB7CgovLwkJCWFqcy5sb2coJ2xvYWRGb2xkZXJzQnlM
aXN0JywgZm9sZGVycyk7CgoJCQl2YXIgZm9sZGVyc0RhdGEgPSBbXTsKCQkJZm9y
ICh2YXIgcT0wLCBuPWZvbGRlcnMubGVuZ3RoOyBxPG47IHErKykgewoJCQkJZm9y
ICh2YXIgaT0wLCBsPVByZWxvYWRNYW5hZ2VyLk1BWF9DQUNIRV9QQUdFX0NPVU5U
OyBpPGw7IGkrKykgewoJCQkJCXRoaXMuY3VycmVudENvdW50ICs9IG1haWxydS5t
ZXNzYWdlc1BlclBhZ2U7CgkJCQkJdGhpcy5hbGxDb3VudCArPSBtYWlscnUubWVz
c2FnZXNQZXJQYWdlOwoJCQkJCWZvbGRlcnNEYXRhW2kgKiBuICsgcV0gPSBbZm9s
ZGVyc1txXS5JZCwgaSArIDFdOwoJCQkJfQoJCQl9CgkJCXRoaXMudXBkYXRlUHJl
bG9hZEluZm8oKTsKCQkJdGhpcy5sb2FkRm9sZGVycyhmb2xkZXJzRGF0YSk7CgkJ
fSwKCgkJdXBkYXRlUHJlbG9hZEluZm86IGZ1bmN0aW9uICgpIHsKLy8JCQlhanMu
bG9nKCd1cGRhdGVQcmVsb2FkSW5mbycsIHRoaXMuY3VycmVudENvdW50LCB0aGlz
LmFsbENvdW50KTsKCQkJaWYgKHRoaXMuY3VycmVudENvdW50ID4gMCAmJiB0aGlz
LmN1cnJlbnRDb3VudCA8IHRoaXMuYWxsQ291bnQpIHsKCQkJCXZhciBwZXJjZW50
ID0gTWF0aC5jZWlsKDEwMCAtICgxMDAgLyB0aGlzLmFsbENvdW50ICogdGhpcy5j
dXJyZW50Q291bnQpKTsKCQkJCXRoaXMuJGluZGljYXRvclBlcmNlbnRDb250YWlu
ZXIuc2hvdygpOwoJCQkJdGhpcy4kaW5kaWNhdG9yUGVyY2VudC50ZXh0KHBlcmNl
bnQpOwoJCQl9IGVsc2UgewoJCQkJdGhpcy4kaW5kaWNhdG9yUGVyY2VudENvbnRh
aW5lci5oaWRlKCk7CgkJCX0KCgkJCWlmICh0aGlzLmN1cnJlbnRDb3VudCA8PSAw
KSB7CgkJCQl0aGlzLmN1cnJlbnRDb3VudCA9IHRoaXMuYWxsQ291bnQgPSAwOwoJ
CQl9CgkJfSwKCgkJbG9hZE5leHRGb2xkZXI6IGZ1bmN0aW9uICgpIHsKCQkJdmFy
IHNlbGYgPXRoaXM7CgkJCXZhciBkYXRhID0gdGhpcy5mb2xkZXJzRGF0YS5zaGlm
dCgpOwoJCQlpZiAoZGF0YSkgewoJCQkJdGhpcy5kb0xvYWRGb2xkZXIoZGF0YVsw
XSwgZGF0YVsxXSwgZnVuY3Rpb24gKHJlc3VsdCkgewoKCQkJCQl2YXIgaGFzTWVz
c2FnZXM7CgoJCQkJCWlmIChyZXN1bHQuaXNPSygpKSB7CgkJCQkJCXZhciByZXN1
bHREYXRhID0gcmVzdWx0LmdldERhdGEoKSwgb3B0aW9ucyA9IHJlc3VsdC5nZXRP
cHRzKCkuZGF0YTsKCQkJCQkJaWYgKHJlc3VsdERhdGEpIHsKCQkJCQkJCWlmICgk
LmlzQXJyYXkocmVzdWx0RGF0YS5tZXNzYWdlcykgJiYgcmVzdWx0RGF0YS5tZXNz
YWdlcy5sZW5ndGggPiAwKSB7CgkJCQkJCQkJaGFzTWVzc2FnZXMgPSAxOwoJCQkJ
CQkJCXNlbGYuVHJhbnNwb3J0LnBvc3QoJ21lc3NhZ2VzL3B1dE1lc3NhZ2VzUHJl
dmlldycsIHsKCQkJCQkJCQkJZm9sZGVyOiBvcHRpb25zLmZvbGRlciwKCQkJCQkJ
CQkJbGltaXQ6IG9wdGlvbnMubGltaXQsCgkJCQkJCQkJCW9mZnNldDogb3B0aW9u
cy5vZmZzZXQsCgkJCQkJCQkJCW1lc3NhZ2VzOiByZXN1bHREYXRhLm1lc3NhZ2Vz
CgkJCQkJCQkJfSwgZnVuY3Rpb24gKCkgewoJCQkJCQkJCQlzZXRUaW1lb3V0KGZ1
bmN0aW9uICgpIHsKCQkJCQkJCQkJCXNlbGYubG9hZE5leHRGb2xkZXIoKTsKCQkJ
CQkJCQkJfSwgNTAwKTsKCQkJCQkJCQl9KTsKCQkJCQkJCQlzZWxmLmNoZWNrTWVz
c2FnZXMocmVzdWx0RGF0YS5tZXNzYWdlcyk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJ
CQl9CgoJCQkJCWlmICghaGFzTWVzc2FnZXMpIHsKCQkJCQkJc2VsZi5jdXJyZW50
Q291bnQgLT0gbWFpbHJ1Lm1lc3NhZ2VzUGVyUGFnZTsKCQkJCQkJc2VsZi51cGRh
dGVQcmVsb2FkSW5mbygpOwoKCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbiAoKSB7
CgkJCQkJCQlzZWxmLmxvYWROZXh0Rm9sZGVyKCk7CgkJCQkJCX0sIDUwMCk7CgkJ
CQkJfQoJCQkJfSk7CgkJCX0gZWxzZSB7CgkJCQl0aGlzLnByZWxvYWRJc0xvYWRl
ZERhdGEgPSBmYWxzZTsKCQkJfQoJCX0sCgoJCWxvYWRGb2xkZXJzOiBmdW5jdGlv
biAoZm9sZGVyc0RhdGEpIHsKCQkJdGhpcy5mb2xkZXJzRGF0YSA9IHRoaXMuZm9s
ZGVyc0RhdGEuY29uY2F0KGZvbGRlcnNEYXRhKTsKCQkJaWYgKCF0aGlzLnByZWxv
YWRJc0xvYWRlZERhdGEpIHsKCQkJCXRoaXMucHJlbG9hZElzTG9hZGVkRGF0YSA9
IHRydWU7CgkJCQl0aGlzLmxvYWROZXh0Rm9sZGVyKCk7CgkJCX0KCQl9LAoKCQls
b2FkTmV4dE1lc3NhZ2U6IGZ1bmN0aW9uICgpIHsKCQkJdmFyIHNlbGYgPSB0aGlz
OwoJCQl2YXIgZGF0YSA9IHRoaXMubWVzc2FnZXNEYXRhLnNoaWZ0KCk7CgkJCWlm
IChkYXRhKSB7CgkJCQl0aGlzLmRvTG9hZE1lc3NhZ2UoZGF0YSwgZnVuY3Rpb24g
KHJlc3VsdCkgewoKCQkJCQl2YXIgaGFzTWVzc2FnZTsKCgkJCQkJaWYgKHJlc3Vs
dC5pc09LKCkpIHsKCQkJCQkJdmFyIHJlc3VsdERhdGEgPSByZXN1bHQuZ2V0RGF0
YSgpOwoJCQkJCQlpZiAocmVzdWx0RGF0YSAmJiByZXN1bHREYXRhWzBdKSB7CgkJ
CQkJCQl2YXIgbWVzc2FnZSA9IHJlc3VsdERhdGFbMF07CgkJCQkJCQlpZiAobWVz
c2FnZSAmJiAhbWVzc2FnZVsnTm9NU0cnXSkgewoJCQkJCQkJCWhhc01lc3NhZ2Ug
PSAxOwoJCQkJCQkJCXNlbGYuVHJhbnNwb3J0LnBvc3QoJ21lc3NhZ2VzL3B1dE1l
c3NhZ2VzJywgW21lc3NhZ2VdLCBmdW5jdGlvbiAoKSB7CgkJCQkJCQkJCXNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgewoJCQkJCQkJCQkJc2VsZi5sb2FkTmV4dE1lc3Nh
Z2UoKTsKCQkJCQkJCQkJfSwgNTAwKTsKCQkJCQkJCQl9KTsKCQkJCQkJCX0KCQkJ
CQkJfQoJCQkJCX0KCgkJCQkJc2VsZi5jdXJyZW50Q291bnQtLTsKCQkJCQlzZWxm
LnVwZGF0ZVByZWxvYWRJbmZvKCk7CgoJCQkJCWlmICghaGFzTWVzc2FnZSkgewoJ
CQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKCQkJCQkJCXNlbGYubG9hZE5l
eHRNZXNzYWdlKCk7CgkJCQkJCX0sIDUwMCk7CgkJCQkJfQoJCQkJfSk7CgkJCX0g
ZWxzZSB7CgkJCQl0aGlzLnByZWxvYWRJc0xvYWRlZE1lc3NhZ2UgPSBmYWxzZTsK
CQkJfQoJCX0sCgoJCWxvYWRNZXNzYWdlczogZnVuY3Rpb24gKG1lc3NhZ2VzRGF0
YSkgewoJCQl0aGlzLm1lc3NhZ2VzRGF0YSA9IHRoaXMubWVzc2FnZXNEYXRhLmNv
bmNhdChtZXNzYWdlc0RhdGEpOwoJCQlpZiAoIXRoaXMucHJlbG9hZElzTG9hZGVk
TWVzc2FnZSkgewoJCQkJdGhpcy5wcmVsb2FkSXNMb2FkZWRNZXNzYWdlID0gdHJ1
ZTsKCQkJCXRoaXMubG9hZE5leHRNZXNzYWdlKCk7CgkJCX0KCQl9LAoKCQljaGVj
a01lc3NhZ2VzOiBmdW5jdGlvbiAobWVzc2FnZXMpIHsKCgkJCXZhciBzZWxmID0g
dGhpcywgaWRzID0gW107CgoJCQkkLmVhY2gobWVzc2FnZXMsIGZ1bmN0aW9uIChr
LCBtZXNzYWdlKSB7CgkJCQlpZHMucHVzaChtZXNzYWdlLklkKTsKCQkJfSk7CgoJ
CQl0aGlzLlRyYW5zcG9ydC5wb3N0KCdtZXNzYWdlcy9oYXNNZXNzYWdlcycsIGlk
cywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CgkJCQlpZiAocmVzcG9uc2UpIHsKCQkJ
CQl2YXIgcHJlc2VudElkcyA9IHJlc3BvbnNlWzBdLCB1bnByZXNlbnRJZHMgPSBy
ZXNwb25zZVsxXTsKCQkJCQlzZWxmLmN1cnJlbnRDb3VudCAtPSAocHJlc2VudElk
cy5sZW5ndGggKyAobWFpbHJ1Lm1lc3NhZ2VzUGVyUGFnZSAtIChwcmVzZW50SWRz
Lmxlbmd0aCArIHVucHJlc2VudElkcy5sZW5ndGgpKSk7CgkJCQkJc2VsZi51cGRh
dGVQcmVsb2FkSW5mbygpOwoJCQkJCWlmICgkLmlzQXJyYXkodW5wcmVzZW50SWRz
KSkgewoJCQkJCQlzZWxmLmxvYWRNZXNzYWdlcyh1bnByZXNlbnRJZHMpOwoJCQkJ
CX0KCQkJCX0KCQkJfSk7CgkJfSwKCgkJZG9Mb2FkTWVzc2FnZTogZnVuY3Rpb24g
KG1lc3NhZ2VJZCwgY29tcGxldGUpIHsKCQkJbWFpbHJ1LkFQSS5hamF4KHsKCQkJ
CXVybDogJy9tZXNzYWdlLz9mdW5jX25hbWU9Z2V0X21lc3NhZ2VzX2J5X2lkJywK
CQkJCWNhY2hlUnVubmluZzogMSwKCQkJCWRhdGE6IHsKCQkJCQlpZDogbWVzc2Fn
ZUlkCgkJCQl9LAoJCQkJY29tcGxldGU6IGNvbXBsZXRlCgkJCX0pOwoJCX0sCgoJ
CWRvTG9hZEZvbGRlcjogZnVuY3Rpb24gKGZvbGRlcklkLCBwYWdlLCBjb21wbGV0
ZSkgewoJCQlpZiAobWFpbHJ1WydJc0NoZWNrbmV3VG9TdGF0dXMnXSkgewoJCQkJ
bWFpbHJ1LkFQSSh7CgkJCQkJdXJsOiAnbWVzc2FnZXMvc3RhdHVzJywKCQkJCQlj
b252ZXJ0UmVzdWx0VG9PbGRBcGk6IHRydWUsCgkJCQkJY2FjaGVSdW5uaW5nOiAx
LAoJCQkJCWRhdGE6IHsKCQkJCQkJLy8gb2xkIHBhcmFtcwoJCQkJCQljdHM6IGFq
cy5ub3coKSwKCQkJCQkJZm9yY2U6IDEsCgkJCQkJCW5vdzogYWpzLm5vdygpLAoJ
CQkJCQlzb3J0Ynk6ICdEJywKCQkJCQkJcGFnZTogcGFnZSwKCgkJCQkJCS8vIG5l
dyBwYXJhbXMKCQkJCQkJc29ydDogewoJCQkJCQkJdHlwZTogJ2RhdGUnLAoJCQkJ
CQkJb3JkZXI6ICdkZXNjJwoJCQkJCQl9LAoJCQkJCQlmb2xkZXI6IGZvbGRlcklk
LAoJCQkJCQlvZmZzZXQ6IG1haWxydS5tZXNzYWdlc1BlclBhZ2UgKiAocGFnZSAt
IDEpLAoJCQkJCQlsaW1pdDogbWFpbHJ1Lm1lc3NhZ2VzUGVyUGFnZSwKCQkJCQkJ
bGFzdF9tb2RpZmllZDogYWpzLm5vdygpLAoJCQkJCQlodG1sZW5jb2RlZDogZmFs
c2UKCQkJCQl9LAoJCQkJCWNvbXBsZXRlOiBjb21wbGV0ZQoJCQkJfSk7CgkJCX0g
ZWxzZSB7CgkJCQltYWlscnUuQVBJLmFqYXgoewoJCQkJCXVybDogJy9jZ2ktYmlu
L2NoZWNrbmV3JywKCQkJCQljYWNoZVJ1bm5pbmc6IDEsCgkJCQkJZGF0YTogewoJ
CQkJCQlub0Y6IDEsCgkJCQkJCW5vbG9nOiAxLAoJCQkJCQlmb3JjZTogMSwKCQkJ
CQkJZm9sZGVyOiBmb2xkZXJJZCwKCQkJCQkJc29ydGJ5OiAnRCcsCgkJCQkJCXBh
Z2U6IHBhZ2UsCgkJCQkJCWxpbWl0OiBtYWlscnUubWVzc2FnZXNQZXJQYWdlLAoJ
CQkJCQlvZmZzZXQ6IG1haWxydS5tZXNzYWdlc1BlclBhZ2UgKiAocGFnZSAtIDEp
CgkJCQkJfSwKCQkJCQljb21wbGV0ZTogY29tcGxldGUKCQkJCX0pOwoJCQl9CgkJ
fQoJfTsKCgoJLyoqCgkgKiBAY2xhc3MgbWFpbHJ1Lk9mZmxpbmVDYWNoZU1hbmFn
ZXIKCSAqLwoJanNDbGFzcwoJLmNyZWF0ZSgnbWFpbHJ1Lk9mZmxpbmVDYWNoZU1h
bmFnZXInKQoJLmV4dGVuZChqUXVlcnlFdmVudCkKCS5zdGF0aWNzKHsKCQlkZWZh
dWx0T3B0aW9uczogewoJCQlvZmZsaW5lTW9kZU5vQXV0aENsYXNzOiAnR2xvYmFs
T2ZmbGluZU1vZGVOb0F1dGgnLAoJCQlvZmZsaW5lTW9kZUNsYXNzOiAnR2xvYmFs
T2ZmbGluZU1vZGUnLAoJCQlvbmxpbmVNb2RlQ2xhc3M6ICdHbG9iYWxPbmxpbmVN
b2RlJywKCQkJdXJsVHlwZVBhdHRlcm46IC9eKD86aHR0cHM/OlwvXC9bXi9dKyk/
XC8/KD86Y2dpLWJpblwvKT8oW14/XSspL2kKCQl9Cgl9KQoJLm1ldGhvZHMoewoK
CQlfX2NvbnN0cnVjdDogZnVuY3Rpb24gKG9wdGlvbnMpIHsKCgkJCXZhciBfbGkg
PSBfbG9nLnN0YXJ0KCdfX2NvbnN0cnVjdCcpOwoKCQkJdGhpcy5vcHRpb25zID0g
JC5leHRlbmQoe30sIG1haWxydS5PZmZsaW5lQ2FjaGVNYW5hZ2VyLmRlZmF1bHRP
cHRpb25zLCBvcHRpb25zKTsKCgkJCXRoaXMuQWNjb3VudE1hbmFnZXIgPSBuZXcg
QWNjb3VudE1hbmFnZXIoKTsKCgkJCXRoaXMudXNlck1ENSA9IGFqcy5NRDUodGhp
cy5BY2NvdW50TWFuYWdlci5nZXRBY3RpdmVFbWFpbCgpKTsKCgkJCXRoaXMub25G
aXJzdEFjdGlvbnNFeGVjdXRlT2JzZXJ2ZXIgPSB0aGlzLl9vbkZpcnN0QWN0aW9u
c0V4ZWN1dGUuYmluZCh0aGlzKTsKCQkJdGhpcy5vbkNoYW5nZU9mZmxpbmVNb2Rl
T2JzZXJ2ZXIgPSB0aGlzLl9vbkNoYW5nZU9mZmxpbmVNb2RlLmJpbmQodGhpcyk7
CgoJCQlfbG9nLmVuZChfbGkpOwoJCX0sCgoJCW9uRE9NUmVhZHk6IGZ1bmN0aW9u
ICgpIHsKCgkJCXZhciBzZWxmID0gdGhpczsKCgkJCXRoaXMuJGxvZ291dExpbmsg
PSAkKCcjUEhfbG9nb3V0TGluaycpOwoKCQkJaWYgKHRoaXMuaXNFbmFibGVkKCkp
IHsKCgkJCQl0aGlzLiRsb2dvdXRMaW5rLmJpbmQoJ2NsaWNrJywge3Njb3BlOiB0
aGlzfSwgZnVuY3Rpb24gKGV2dCkgewoJCQkJCWV2dC5kYXRhLnNjb3BlLkFjY291
bnRNYW5hZ2VyLmxvZ291dCgpOwoJCQkJCWlmIChtYWlscnVbJ09mZmxpbmVNb2Rl
J10pIHsKCQkJCQkJZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCWxvY2F0aW9u
LmhyZWYgPSAnLyc7CgkJCQkJfQoJCQkJfSk7CgkJCX0KCgkJCWlmIChtYWlscnVb
J09mZmxpbmVNb2RlJ10pIHsKCgkJCQlpZiAodGhpcy5pc0F1dGgoKSAmJiB0aGlz
LmlzRW5hYmxlZCgpKSB7CgoJCQkJCSQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xh
c3ModGhpcy5vcHRpb25zLm9mZmxpbmVNb2RlTm9BdXRoQ2xhc3MpOwoKCQkJCQl0
aGlzLnNldEFjdGl2YXRlKHRydWUpOwoKCQkJCX0gZWxzZSB7CgoJCQkJCXRoaXMu
X2NvbXBsZXRlKCdlcnJvcicpOwoKCQkJCQlhanMucmVxdWlyZSgne3BsdWdpbnN9
JyArICdMYXllck1hbmFnZXInLCBmdW5jdGlvbigpIHsKCQkJCQkJTGF5ZXJNYW5h
Z2VyLnNob3coJ25vQXV0aE9mZmxpbmUnLCB7CgkJCQkJCQlhY3RpdmVfZW1haWw6
IHNlbGYuQWNjb3VudE1hbmFnZXIuZ2V0QWN0aXZlRW1haWwoKSwKCQkJCQkJCXN1
Y2Nlc3M6IGZ1bmN0aW9uIChsYXllciwgZW1haWwsIHBhc3N3b3JkKSB7CgkJCQkJ
CQkJaWYgKHNlbGYuQWNjb3VudE1hbmFnZXIuYXV0aChlbWFpbCwgcGFzc3dvcmQp
KSB7CgkJCQkJCQkJCWxvY2F0aW9uLmhyZWYgPSAnLyc7CgkJCQkJCQkJfSBlbHNl
IHsKCQkJCQkJCQkJJCgnLmpzLWZvcm1FcnJvcicsIGxheWVyLiRkaXYpLnRleHQo
TGFuZy5nZXQoJ3Bhc3N3b3JkLndyb25nJykpLnNob3coKTsKCQkJCQkJCQl9CgkJ
CQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQkJfQoJCQkJCQl9KTsKCQkJCQl9KTsK
CgkJCQkJdGhpcy5fY29tcGxldGUoJ2Vycm9yJyk7CgkJCQl9CgoJCQl9IGVsc2Ug
ewoKCQkJCWlmICh0aGlzLmlzRW5hYmxlZCgpKSB7CgoJCQkJCXRoaXMuc2V0QWN0
aXZhdGUodHJ1ZSk7CgkJCQl9CgkJCX0KCgkJCV9sb2cuZW5kQXQoJ29uRE9NUmVh
ZHknKTsKCQl9LAoKCQlfaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkgewoKCQkJdmFy
IF9saV9pbml0ID0gX2xvZy5zdGFydCgnX2luaXRpYWxpemUnKTsKCgkJCV9sb2cu
c3RhcnRBdCgnY29tcGxldGUnLCAnaW5pdCBvZmZsaW5lQ2FjaGVDb21wbGV0ZScp
OwoKCQkJdmFyIHNlbGYgPSB0aGlzOwoKCQkJaWYgKCFtYWlscnVbJ09mZmxpbmVN
b2RlJ10pIHsKCgkJCQl0aGlzLkFjY291bnRNYW5hZ2VyLnNhdmUoJ3VzZXJfYWN0
aXZlJywgbWFpbHJ1LnVzZXJlbWFpbCk7CgoJCQkJaWYgKC93aW5cZCtcLmRldlwu
bWFpbFwucnUkLy50ZXN0KGxvY2F0aW9uLmhvc3QpKSB7CgkJCQkJdGhpcy5BY2Nv
dW50TWFuYWdlci5zYXZlKCd1c2Vyc19hdXRob3JpemVkJywgW21haWxydS51c2Vy
ZW1haWxdKTsKCQkJCX0gZWxzZSB7CgkJCQkJX19QSC5sb2FkQWNjb3VudHNMaXN0
KGZ1bmN0aW9uIChsaXN0KSB7CgkJCQkJCWlmIChsaXN0ICYmICQuaXNBcnJheShs
aXN0LmFjY291bnRzKSkgewoJCQkJCQkJZm9yICh2YXIgYWNjb3VudHMgPSBbXSwg
aSA9IGxpc3QuYWNjb3VudHMubGVuZ3RoOyBpLS07ICkgewoJCQkJCQkJCWlmIChs
aXN0LmFjY291bnRzW2ldICYmIGxpc3QuYWNjb3VudHNbaV0uZW1haWwpIHsKCQkJ
CQkJCQkJYWNjb3VudHMucHVzaChsaXN0LmFjY291bnRzW2ldLmVtYWlsKTsKCQkJ
CQkJCQl9CgkJCQkJCQl9CgkJCQkJCQl0aGlzLkFjY291bnRNYW5hZ2VyLnNhdmUo
J3VzZXJzX2F1dGhvcml6ZWQnLCBhY2NvdW50cyk7CgkJCQkJCX0KCQkJCQl9LmJp
bmQodGhpcykpOwoJCQkJfQoJCQl9CgoJCQl2YXIgUnBjQ29uZmlnID0gewoJCQkJ
Y2hhbm5lbDogJ2FwcGNhY2hlJywKCQkJCXJlbW90ZTogJy9jZ2ktYmluL2xzdGF0
aWM/JyArICQucGFyYW0oewoJCQkJCWdldDogJ2FwcGNhY2hlJywKCQkJCQlvZmZs
aW5lX2RhdGFfdmVyc2lvbjogbWFpbHJ1WydPZmZsaW5lRGF0YVZlcnNpb24nXSwK
CQkJCQlvZmZsaW5lX3N0b3JhZ2VfdmVyc2lvbjogbWFpbHJ1WydPZmZsaW5lU3Rv
cmFnZVZlcnNpb24nXSwKCQkJCQltZXNzYWdlc19wZXJfcGFnZTogbWFpbHJ1Wydt
ZXNzYWdlc1BlclBhZ2UnXSwKCQkJCQlub21hbmlmZXN0OiArIW1haWxydVsnT2Zm
bGluZU1hbmlmZXN0J10KCQkJCX0pLAoJCQkJb25SZWFkeTogZnVuY3Rpb24gKCkg
ewoJCQkJCV9sb2cuZW5kKF9saV9hcHBjYWNoZVRyYW5zcG9ydCk7CgkJCQl9LAoJ
CQkJcHJvcHM6IHsKCQkJCQlzdHlsZTogewoJCQkJCQlkaXNwbGF5OiAnbm9uZScK
CQkJCQl9CgkJCQl9CgkJCX07CgoJCQl2YXIgUnBjSnNvblJwY0NvbmZpZyA9IHsK
CQkJCXJlbW90ZTogewoJCQkJCWRyb3BBcHBDYWNoZToge30KCQkJCX0KCQkJfTsK
CgkJCXZhciBfbGlfYXBwY2FjaGVUcmFuc3BvcnQgPSBfbG9nLnN0YXJ0KCdhcHBj
YWNoZVRyYW5zcG9ydCcsIFJwY0NvbmZpZywgUnBjSnNvblJwY0NvbmZpZyk7CgoJ
CQl0aGlzLmFwcGNhY2hlVHJhbnNwb3J0ID0gbmV3IG1haWxydS5PZmZsaW5lQ2Fj
aGUuZWFzeVhETS5ScGMoUnBjQ29uZmlnLCBScGNKc29uUnBjQ29uZmlnKTsKCgkJ
CXZhciB0cmFuc3BvcnRDb25maWcgPSB7CgkJCQl1c2VyTUQ1OiB0aGlzLnVzZXJN
RDUsCgkJCQljb21wbGV0ZTogZnVuY3Rpb24gKHRleHRTdGF0dXMpIHsKCgkJCQkJ
X2xvZy5lbmRBdCgnc3RvcmFnZVRyYW5zcG9ydCcsIHRleHRTdGF0dXMpOwoKCQkJ
CQlpZiAodGV4dFN0YXR1cyA9PSAnc3VjY2VzcycpIHsKCQkJCQkJc2VsZi5leGVj
QWN0aW9ucygpLnRoZW4oc2VsZi5vbkZpcnN0QWN0aW9uc0V4ZWN1dGVPYnNlcnZl
ciwgc2VsZi5vbkZpcnN0QWN0aW9uc0V4ZWN1dGVPYnNlcnZlcik7CgkJCQkJfSBl
bHNlIHsKCQkJCQkJc2VsZi5fY29tcGxldGUoJ2Vycm9yJyk7CgkJCQkJfQoJCQkJ
fQoJCQl9OwoKCQkJX2xvZy5zdGFydEF0KCdzdG9yYWdlVHJhbnNwb3J0JywgJ3N0
b3JhZ2VUcmFuc3BvcnQgY29tcGxldGUnLCB0cmFuc3BvcnRDb25maWcpOwoKCQkJ
dGhpcy5UcmFuc3BvcnQgPSBuZXcgbWFpbHJ1Lk9mZmxpbmVUcmFuc3BvcnQodHJh
bnNwb3J0Q29uZmlnKTsKCgkJCXRoaXMuUHJlbG9hZE1hbmFnZXIgPSBuZXcgUHJl
bG9hZE1hbmFnZXIodGhpcy5UcmFuc3BvcnQpOwoJCQl0aGlzLk9mZmxpbmVBY3Rp
b25NYW5hZ2VyID0gbmV3IG1haWxydS5PZmZsaW5lQWN0aW9uTWFuYWdlcih0aGlz
LlRyYW5zcG9ydCk7CgoJCQlfbG9nLmVuZChfbGlfaW5pdCk7CgkJfSwKCgkJX2Nv
bXBsZXRlOiBmdW5jdGlvbiAodGV4dFN0YXR1cykgewoKCQkJX2xvZy5lbmRBdCgn
Y29tcGxldGUnLCB0ZXh0U3RhdHVzKTsKCgkJCXRoaXMuaXNDb21wbGV0ZSA9IHRy
dWU7CgoJCQlpZiAodGV4dFN0YXR1cyA9PSAnc3VjY2VzcycpIHsKCQkJCSQod2lu
ZG93KS5iaW5kKCdvZmZsaW5lY2hhbmdlLm9mZmxpbmUnLCB0aGlzLm9uQ2hhbmdl
T2ZmbGluZU1vZGVPYnNlcnZlcik7CgkJCQkkKHdpbmRvdykudHJpZ2dlckhhbmRs
ZXIoJ29mZmxpbmVjaGFuZ2UnLCBbYWpzLm9mZmxpbmVdKTsKCQkJfQoKCQkJdGhp
cy50cmlnZ2VySGFuZGxlcignY29tcGxldGUnKTsKCQl9LAoKCQlfb25GaXJzdEFj
dGlvbnNFeGVjdXRlOiBmdW5jdGlvbiAoKSB7CgoJCQlpZiAobWFpbHJ1LlVwZGF0
ZXIpIHsKCQkJCW1haWxydS5VcGRhdGVyLnJlbG9hZCgpOwoJCQl9CgoJCQlpZiAo
IWFqcy5vZmZsaW5lKSB7CgkJCQl0aGlzLlByZWxvYWRNYW5hZ2VyLnByZWxvYWRE
YXRhKCk7CgkJCX0KCgkJCSQod2luZG93KS50cmlnZ2VySGFuZGxlcigndXBkYXRl
Lm9mZmxpbmVBY3Rpb25zJyk7CgoJCQl0aGlzLl9jb21wbGV0ZSgnc3VjY2Vzcycp
OwoJCX0sCgoJCWFqYXg6IGZ1bmN0aW9uIChvLCBhamF4RGF0YSwgY2FsbGJhY2sp
IHsKCgkJCXZhciBzZWxmID0gdGhpczsKCgkJCWlmICghby5jYWNoZVJ1bm5pbmcg
JiYgdGhpcy5pc0FsbG93ZWQoKSkgewoKCQkJCWlmICghdGhpcy5pc0NvbXBsZXRl
KSB7CgoJCQkJCXZhciBfbGlfY29tcGxldGUgPSBfbG9nLnN0YXJ0KCdhamF4IG9m
ZmxpbmVDYWNoZUNvbXBsZXRlJyk7CgoJCQkJCXRoaXMub25lKCdjb21wbGV0ZScs
IGZ1bmN0aW9uICgpIHsKCQkJCQkJX2xvZy5lbmQoX2xpX2NvbXBsZXRlKTsKCgkJ
CQkJCXNlbGYuYWpheChvLCBhamF4RGF0YSwgY2FsbGJhY2spOwoJCQkJCX0pOwoK
CQkJCX0gZWxzZSBpZiAoIW8uaXNFeGVjQWN0aW9ucyAmJiB0aGlzLmdldEFjdGlv
bkNvdW50KCkpIHsKCgkJCQkJby5pc0V4ZWNBY3Rpb25zID0gdHJ1ZTsKCgkJCQkJ
dmFyIF9saV9leGVjQWN0aW9ucyA9IF9sb2cuc3RhcnQoJ2FqYXggZXhlY0FjdGlv
bnMnKTsKCgkJCQkJdGhpcy5leGVjQWN0aW9ucygpLnRoZW4oZnVuY3Rpb24gKCkg
ewoJCQkJCQlfbG9nLmVuZChfbGlfZXhlY0FjdGlvbnMsICdkb25lJyk7CgkJCQkJ
CXNlbGYuYWpheChvLCBhamF4RGF0YSwgY2FsbGJhY2spOwoJCQkJCX0sIGZ1bmN0
aW9uICgpIHsKCQkJCQkJX2xvZy5lbmQoX2xpX2V4ZWNBY3Rpb25zLCAnZmFpbCcp
OwoJCQkJCQlzZWxmLmFqYXgobywgYWpheERhdGEsIGNhbGxiYWNrKTsKCQkJCQl9
KTsKCgkJCQl9IGVsc2UgewoKCQkJCQlpZiAobWFpbHJ1WydGb3JjZU9mZmxpbmVN
b2RlJ10pIHsKCQkJCQkJdGhpcy5nZXRDYWNoZShvLCAhbWFpbHJ1WydGb3JjZU9m
ZmxpbmVNb2RlJ10sIGZ1bmN0aW9uIChyZXNwb25zZSwgb2xkX2Fuc3dlcikgewoJ
CQkJCQkJY2FsbGJhY2socmVzcG9uc2UsIG8sIHtzdGF0dXM6IDIwMCwgcmVhZHlT
dGF0ZTogNH0sICdzdWNjZXNzJywgMjAwLCAnJywgb2xkX2Fuc3dlcik7CgkJCQkJ
CX0pOwoJCQkJCX0gZWxzZSBpZiAobWFpbHJ1WydFbmFibGVPZmZsaW5lTW9kZUxv
YWRGcm9tQ2FjaGUnXSkgewoJCQkJCQl0aGlzLmdldENhY2hlKG8sICFtYWlscnVb
J0ZvcmNlT2ZmbGluZU1vZGUnXSwgZnVuY3Rpb24gKHJlc3BvbnNlLCBvbGRfYW5z
d2VyKSB7CgkJCQkJCQlpZiAocmVzcG9uc2UpIHsKCQkJCQkJCQljYWxsYmFjayhy
ZXNwb25zZSwgbywge3N0YXR1czogMjAwLCByZWFkeVN0YXRlOiA0fSwgJ3N1Y2Nl
c3MnLCAyMDAsICcnLCBvbGRfYW5zd2VyKTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJ
CQkJJC5hamF4KGFqYXhEYXRhKTsKCQkJCQkJCX0KCQkJCQkJfSk7CgkJCQkJfSBl
bHNlIHsKCQkJCQkJJC5hamF4KGFqYXhEYXRhKTsKCQkJCQl9CgkJCQl9CgoJCQl9
IGVsc2UgewoJCQkJJC5hamF4KGFqYXhEYXRhKTsKCQkJfQoJCX0sCgoJCXBhcnNl
OiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIG8sIGNhbGxiYWNrKSB7CgoJ
CQlpZiAodHlwZW9mIGpxWEhSID09ICdzdHJpbmcnIHx8IGpxWEhSID09PSB1bmRl
ZikgewoJCQkJanFYSFIgPSB7c3RhdHVzOiAyMDAsIHJlc3BvbnNlVGV4dDoganFY
SFIsIHJlYWR5U3RhdGU6IDR9OwoJCQl9CgoJCQl2YXIgc3RhdHVzLCByZXNwb25z
ZSwgZXJyb3IgPSAnJzsgdHJ5IHsgc3RhdHVzID0ganFYSFIuc3RhdHVzOyB9IGNh
dGNoIChlcil7IHN0YXR1cyA9IDQwMzsgdGV4dFN0YXR1cyA9ICd4aHJfZXJyb3In
OyB9CgoJCQl2YXIgdXNlT2ZmbGluZVN0b3JhZ2UgPSB0aGlzLmlzQWxsb3dlZCgp
ICYmICEobyAmJiBvLmNhY2hlUnVubmluZyk7CgoJCQlvID0gbyB8fCB7IGRhdGFU
eXBlOiAnanNvbicsIHR5cGU6ICdHRVQnIH07CgoJCQlpZiAoc3RhdHVzID09IDIw
MCkgewoJCQkJcmVzcG9uc2UgPSBqcVhIUi5yZXNwb25zZVRleHQ7CgkJCQlpZiAo
dGV4dFN0YXR1cyA9PSAnc3VjY2VzcycgJiYgKG8uZGF0YVR5cGUgPT0gJ2pzb24n
IHx8IG8uZGF0YVR5cGUgPT0gJ3RleHQnKSkgewoJCQkJCWlmIChvLmRhdGFUeXBl
ID09ICdqc29uJykgewoJCQkJCQl0cnkgewoJCQkJCQkJcmVzcG9uc2UgPSBqUXVl
cnkucGFyc2VKU09OKHJlc3BvbnNlLCBvKTsKCQkJCQkJCWlmICh1c2VPZmZsaW5l
U3RvcmFnZSkgewoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCXRoaXMuc2V0Q2FjaGUo
bywgcmVzcG9uc2UpOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHt9CgkJCQkJCQl9CgkJ
CQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCWlmICh1c2VPZmZsaW5lU3RvcmFnZSAm
JiB+cmVzcG9uc2UuaW5kZXhPZignX19PRkZMSU5FX01PREVfXycpKSB7CgkJCQkJ
CQkJcmV0dXJuIHRoaXMuZ2V0Q2FjaGUobywgZmFsc2UsIGZ1bmN0aW9uIChyZXNw
b25zZSwgb2xkX2Fuc3dlcikgewoJCQkJCQkJCQlpZiAocmVzcG9uc2UpIHsKCQkJ
CQkJCQkJCWNhbGxiYWNrKHJlc3BvbnNlLCBvLCB7c3RhdHVzOiAyMDAsIHJlYWR5
U3RhdGU6IDR9LCAnc3VjY2VzcycsIDIwMCwgZXJyb3IsIG9sZF9hbnN3ZXIpOwoJ
CQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJY2FsbGJhY2socmVzcG9uc2UsIG8s
IGpxWEhSLCAncGFyc2VyZXJyb3InLCBzdGF0dXMsIGUpOwoJCQkJCQkJCQl9CgkJ
CQkJCQkJfSk7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCXJldHVybiBjYWxsYmFj
ayhyZXNwb25zZSwgbywganFYSFIsICdwYXJzZXJlcnJvcicsIHN0YXR1cywgZSk7
CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9IGVsc2UgewoJCQkJCQlpZiAodXNlT2Zm
bGluZVN0b3JhZ2UpIHsKCQkJCQkJCWlmICh+cmVzcG9uc2UuaW5kZXhPZignX19P
RkZMSU5FX01PREVfXycpKSB7CgkJCQkJCQkJcmV0dXJuIHRoaXMuZ2V0Q2FjaGUo
bywgZmFsc2UsIGZ1bmN0aW9uIChyZXNwb25zZSwgb2xkX2Fuc3dlcikgewoJCQkJ
CQkJCQlpZiAocmVzcG9uc2UpIHsKCQkJCQkJCQkJCWNhbGxiYWNrKHJlc3BvbnNl
LCBvLCB7c3RhdHVzOiAyMDAsIHJlYWR5U3RhdGU6IDR9LCAnc3VjY2VzcycsIDIw
MCwgZXJyb3IsIG9sZF9hbnN3ZXIpOwoJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJ
CQkJY2FsbGJhY2socmVzcG9uc2UsIG8sIGpxWEhSLCAnZXJyb3InLCBzdGF0dXMs
IGVycm9yKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0pOwoJCQkJCQkJfSBlbHNlIHsK
CQkJCQkJCQl0aGlzLnNldENhY2hlKG8sIHJlc3BvbnNlKTsKCQkJCQkJCX0KCQkJ
CQkJfQoJCQkJCX0KCQkJCX0KCQkJfSBlbHNlIGlmIChzdGF0dXMgPT0gMzAyKSB7
CgkJCQlyZXNwb25zZSA9IHtzdGF0dXM6ICdyZWRpcmVjdCcsIGRhdGE6IGpxWEhS
LmdldFJlc3BvbnNlSGVhZGVyKCdMb2NhdGlvbicpfTsKCQkJfSBlbHNlIGlmICh1
c2VPZmZsaW5lU3RvcmFnZSAmJiBqcVhIUi5zdGF0dXMgPT0gMCAmJiB0ZXh0U3Rh
dHVzID09ICdlcnJvcicgJiYganFYSFIucmVhZHlTdGF0ZSA9PSAwICYmICFqcVhI
Ui5yZXNwb25zZVRleHQpIHsKCQkJCXJldHVybiB0aGlzLmdldENhY2hlKG8sIGZh
bHNlLCBmdW5jdGlvbiAocmVzcG9uc2UsIG9sZF9hbnN3ZXIpIHsKCQkJCQlpZiAo
cmVzcG9uc2UpIHsKCQkJCQkJY2FsbGJhY2socmVzcG9uc2UsIG8sIHtzdGF0dXM6
IDIwMCwgcmVhZHlTdGF0ZTogNH0sICdzdWNjZXNzJywgMjAwLCBlcnJvciwgb2xk
X2Fuc3dlcik7CgkJCQkJfSBlbHNlIHsKCQkJCQkJY2FsbGJhY2soe3N0YXR1czog
J2Vycm9yJywgZGF0YTogc3RhdHVzfSwgbywganFYSFIsICdlcnJvcicsIHN0YXR1
cywgZXJyb3IpOwoJCQkJCX0KCQkJCX0pOwoJCQl9IGVsc2UgewoJCQkJcmVzcG9u
c2UgPSB7c3RhdHVzOiAnZXJyb3InLCBkYXRhOiBzdGF0dXN9OwoJCQl9CgoJCQly
ZXR1cm4gY2FsbGJhY2socmVzcG9uc2UsIG8sIGpxWEhSLCB0ZXh0U3RhdHVzLCBz
dGF0dXMsIGVycm9yKTsKCQl9LAoKCQlzZXRBY3RpdmF0ZTogZnVuY3Rpb24gKGFj
dGl2ZSkgewoKCQkJdmFyIHNlbGYgPSB0aGlzOwoKCQkJaWYgKGFjdGl2ZSkgewoK
CQkJCSRSKCd7ZWFzeVhETX0nICsgJ2Vhc3lYRE0ubWluJywgZnVuY3Rpb24oKSB7
CgkJCQkJc2VsZi5lYXN5WERNID0gc2VsZi5lYXN5WERNIHx8IGVhc3lYRE0ubm9D
b25mbGljdCgnbWFpbHJ1Lk9mZmxpbmVDYWNoZScpOwoJCQkJCXNlbGYuX2luaXRp
YWxpemUoKTsKCQkJCX0pOwoKCQkJfSBlbHNlIHsKCgkJCQkkKHdpbmRvdykudW5i
aW5kKCcub2ZmbGluZScsIHRoaXMub25DaGFuZ2VPZmZsaW5lTW9kZU9ic2VydmVy
KTsKCgkJCQl0aGlzLlRyYW5zcG9ydC5yZW1vdmVTdG9yYWdlKGZ1bmN0aW9uICgp
IHsKCQkJCQlzZWxmLlRyYW5zcG9ydC5kcm9wQXBwQ2FjaGUoZnVuY3Rpb24gKCkg
ewoJCQkJCQlzZWxmLlRyYW5zcG9ydC5kZXN0cm95KCk7CgkJCQkJfSk7CgkJCQl9
KTsKCgkJCQl0aGlzLmFwcGNhY2hlVHJhbnNwb3J0LmRyb3BBcHBDYWNoZShmdW5j
dGlvbiAoKSB7CgkJCQkJc2VsZi5hcHBjYWNoZVRyYW5zcG9ydC5kZXN0cm95KCk7
CgkJCQl9KTsKCQkJfQoJCX0sCgoJCXNldEVuYWJsZTogZnVuY3Rpb24gKGVuYWJs
ZSwgcGFzc3dvcmQpIHsKCQkJdGhpcy5BY2NvdW50TWFuYWdlci5zZXRPZmZsaW5l
TW9kZVN0YXR1cyhlbmFibGUsIHBhc3N3b3JkKTsKCQkJdGhpcy5zZXRBY3RpdmF0
ZShlbmFibGUpOwoJCX0sCgoJCXNldENhY2hlOiBmdW5jdGlvbiAoYWpheERhdGEs
IHJlc3BvbnNlKSB7CgkJCXRoaXMuX3N5bmNEYXRhKGFqYXhEYXRhKTsKCQkJdGhp
cy5fc2V0Q2FjaGUoYWpheERhdGEsIHJlc3BvbnNlKTsKCQkJaWYgKCFtYWlscnVb
J0ZvcmNlT2ZmbGluZU1vZGUnXSkgewoJCQkJaWYgKGFqcy5vZmZsaW5lKSB7CgkJ
CQkJJCh3aW5kb3cpLnRyaWdnZXJIYW5kbGVyKCdvZmZsaW5lY2hhbmdlJywgW2Fq
cy5vZmZsaW5lID0gZmFsc2VdKTsKCQkJCX0KCQkJfQoJCX0sCgoJCWdldENhY2hl
OiBmdW5jdGlvbiAoYWpheERhdGEsIGJlZm9yZUFqYXgsIHN1Y2Nlc3NGbikgewoK
CQkJdmFyIF9saSA9IF9sb2cuc3RhcnQoJ2dldENhY2hlJywgYWpheERhdGEsIGJl
Zm9yZUFqYXgpOwoKCQkJdmFyIF9zdWNjZXNzRm4gPSBmdW5jdGlvbiAocmVzcG9u
c2UsIG9sZEFQSUZvcm1hdCkgewoKCQkJCV9sb2cuZW5kKF9saSwgcmVzcG9uc2Us
IG9sZEFQSUZvcm1hdCk7CgoJCQkJc3VjY2Vzc0ZuKHJlc3BvbnNlLCBvbGRBUElG
b3JtYXQpOwoJCQl9OwoKCQkJYWpheERhdGEgPSAkLmV4dGVuZCh0cnVlLCB7CgkJ
CQl1cmw6ICcnLAoJCQkJZGF0YToge30KCQkJfSwgYWpheERhdGEpOwoKCQkJdmFy
IHNlbGYgPSB0aGlzOwoJCQl2YXIgdHlwZSA9IHRoaXMuX2dldFVybFR5cGUoYWph
eERhdGEudXJsKSwgcXVlcnlEYXRhID0gYWpzLnRvT2JqZWN0KGFqYXhEYXRhLnVy
bCk7CgoJCQl2YXIgc3RhdHVzUGFyYW1zID0gewoJCQkJc29ydDogewoJCQkJCXR5
cGU6ICdkYXRlJywKCQkJCQlvcmRlcjogJ2Rlc2MnCgkJCQl9LAoJCQkJdXNlcm5h
bWU6IG1haWxydS51c2VybmFtZSwKCQkJCXVzZXJkb21haW46IG1haWxydS51c2Vy
ZG9tYWluLAoJCQkJZm9sZGVyOiBhamF4RGF0YS5kYXRhLmZvbGRlciwKCQkJCW9m
ZnNldDogYWpheERhdGEuZGF0YS5vZmZzZXQsCgkJCQlsaW1pdDogYWpheERhdGEu
ZGF0YS5saW1pdCwKCQkJCWJlZm9yZV9hamF4OiBiZWZvcmVBamF4CgkJCX07CgoJ
CQl2YXIgbWVzc2FnZVBhcmFtcyA9IHsKCQkJCWlkOiBhamF4RGF0YS5kYXRhLmlk
LAoJCQkJYmVmb3JlX2FqYXg6IGJlZm9yZUFqYXgKCQkJfTsKCgkJCWlmIChiZWZv
cmVBamF4KSB7CgoJCQkJaWYgKHR5cGUgPT0gJ3JlYWRtc2cnICYmIHF1ZXJ5RGF0
YS5mdW5jX25hbWUgPT0gJ2dldF9tZXNzYWdlc19ieV9pZCcgJiYgYWpheERhdGEu
ZGF0YS5pZCkgewoJCQkJCXRoaXMuVHJhbnNwb3J0LnBvc3QoJ21lc3NhZ2VzL21l
c3NhZ2UnLCBtZXNzYWdlUGFyYW1zLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKCQkJ
CQkJX3N1Y2Nlc3NGbihyZXNwb25zZSwgc2VsZi5UcmFuc3BvcnQuZ2V0VHlwZSgp
ID09ICd3ZWJzdG9yZScpOwoJCQkJCX0pOwoJCQkJfSBlbHNlIHsKCQkJCQlfc3Vj
Y2Vzc0ZuKCk7CgkJCQl9CgoJCQl9IGVsc2UgewoKCQkJCWlmICh0eXBlID09ICdy
ZWFkbXNnJyAmJiBxdWVyeURhdGEuZnVuY19uYW1lID09ICdnZXRfbWVzc2FnZXNf
YnlfaWQnICYmIGFqYXhEYXRhLmRhdGEuaWQpIHsKCgkJCQkJdGhpcy5UcmFuc3Bv
cnQucG9zdCgnbWVzc2FnZXMvbWVzc2FnZScsIG1lc3NhZ2VQYXJhbXMsIGZ1bmN0
aW9uIChyZXNwb25zZSkgewoJCQkJCQlpZiAocmVzcG9uc2UpIHsKCQkJCQkJCXZh
ciBtZXNzYWdlID0gcmVzcG9uc2VbMl07CgkJCQkJCQlpZiAobWVzc2FnZS5VbnJl
YWQgJiYgYWpheERhdGEuZGF0YS5yZWFkKSB7CgkJCQkJCQkJbWVzc2FnZS5VbnJl
YWQgPSAwOwoJCQkJCQkJCXNlbGYuT2ZmbGluZUFjdGlvbk1hbmFnZXIucHV0QWN0
aW9uKCdtYXJrJywgewoJCQkJCQkJCQl1cmw6ICcvY2dpLWJpbi9tb3ZlbXNnJywK
CQkJCQkJCQkJZGF0YTogewoJCQkJCQkJCQkJaWQ6IFttZXNzYWdlLklkXSwKCQkJ
CQkJCQkJCW1hcmttZXNzYWdlOiBtYWlscnUuTWVzc2FnZS5SRUFELAoJCQkJCQkJ
CQkJbWFyazogMSwKCQkJCQkJCQkJCWFqYXhtb2RlOiAxCgkJCQkJCQkJCX0KCQkJ
CQkJCQl9KTsKCQkJCQkJCQlzZWxmLlRyYW5zcG9ydC5wb3N0KCdtZXNzYWdlcy9w
dXRNZXNzYWdlcycsIFttZXNzYWdlXSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJ
X3N1Y2Nlc3NGbihyZXNwb25zZSwgc2VsZi5UcmFuc3BvcnQuZ2V0VHlwZSgpID09
ICd3ZWJzdG9yZScpOwoJCQkJCX0pOwoKCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAn
YXBpL3YxL21lc3NhZ2VzL3N0YXR1cycgfHwgdHlwZSA9PSAnY2hlY2tuZXcnKSB7
CgoJCQkJCXRoaXMuVHJhbnNwb3J0LnBvc3QoJ21lc3NhZ2VzL3N0YXR1cycsIHN0
YXR1c1BhcmFtcywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CgkJCQkJCV9zdWNjZXNz
Rm4ocmVzcG9uc2UsIHR5cGUgPT0gJ2FwaS92MS9tZXNzYWdlcy9zdGF0dXMnICYm
IHNlbGYuVHJhbnNwb3J0LmdldFR5cGUoKSA9PSAnd2Vic3RvcmUnKTsKCQkJCQl9
KTsKCgkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ21vdmVtc2cnIHx8IHR5cGUgPT0g
J3NwYW1hYnVzZScgfHwgdHlwZSA9PSAnY2xlYXJmb2xkZXInKSB7CgoJCQkJCXRo
aXMuX3N5bmNEYXRhKGFqYXhEYXRhKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkg
ewoKCQkJCQkJX3N1Y2Nlc3NGbihyZXNwb25zZSk7CgoJCQkJCQlpZiAodHlwZSA9
PSAnY2xlYXJmb2xkZXInKSB7CgkJCQkJCQlzZWxmLk9mZmxpbmVBY3Rpb25NYW5h
Z2VyLnB1dEFjdGlvbignY2xlYXJfZm9sZGVyJywgewoJCQkJCQkJCXVybDogYWph
eERhdGEudXJsLAoJCQkJCQkJCWRhdGE6IGFqYXhEYXRhLmRhdGEKCQkJCQkJCX0p
OwoJCQkJCQl9IGVsc2UgaWYgKGFqYXhEYXRhLmRhdGEubWFyaykgewoJCQkJCQkJ
c2VsZi5PZmZsaW5lQWN0aW9uTWFuYWdlci5wdXRBY3Rpb24oJ21hcmsnLCB7CgkJ
CQkJCQkJdXJsOiBhamF4RGF0YS51cmwsCgkJCQkJCQkJZGF0YTogYWpheERhdGEu
ZGF0YQoJCQkJCQkJfSk7CgkJCQkJCX0gZWxzZSBpZiAoYWpheERhdGEuZGF0YS5t
b3ZlKSB7CgkJCQkJCQlzZWxmLk9mZmxpbmVBY3Rpb25NYW5hZ2VyLnB1dEFjdGlv
bignbW92ZScsIHsKCQkJCQkJCQl1cmw6IGFqYXhEYXRhLnVybCwKCQkJCQkJCQlk
YXRhOiBhamF4RGF0YS5kYXRhCgkJCQkJCQl9KTsKCQkJCQkJfSBlbHNlIGlmIChh
amF4RGF0YS5kYXRhLnNwYW0pIHsKCQkJCQkJCXNlbGYuT2ZmbGluZUFjdGlvbk1h
bmFnZXIucHV0QWN0aW9uKCdzcGFtYWJ1c2UnLCB7CgkJCQkJCQkJdXJsOiBhamF4
RGF0YS51cmwsCgkJCQkJCQkJZGF0YTogYWpheERhdGEuZGF0YQoJCQkJCQkJfSk7
CgkJCQkJCX0KCgkJCQkJfSwgZnVuY3Rpb24gKCkgewoJCQkJCQlfc3VjY2Vzc0Zu
KCk7CgkJCQkJfSk7CgoJCQkJfSBlbHNlIGlmICh0eXBlID09ICdzZW50bXNnJykg
ewoKCQkJCQlpZiAoMCAmJiBxdWVyeURhdGEuZnVuY19uYW1lID09ICdtZXNzYWdl
X3RvX2RyYWZ0JykgewoKCQkJCQkJdGhpcy5PZmZsaW5lQWN0aW9uTWFuYWdlci5w
dXRBY3Rpb24oJ21lc3NhZ2VfdG9fZHJhZnQnLCB7CgkJCQkJCQl1cmw6IGFqYXhE
YXRhLnVybCwKCQkJCQkJCWRhdGE6IGFqYXhEYXRhLmRhdGEKCQkJCQkJfSk7CgoJ
CQkJCQlfc3VjY2Vzc0ZuKFsnQWpheFJlc3BvbnNlJywgJ09LJywgewoJCQkJCQkJ
SWQ6IGFqcy5ub3coKQoJCQkJCQl9XSk7CgoJCQkJCX0gZWxzZSBpZiAocXVlcnlE
YXRhLmZ1bmNfbmFtZSA9PSAnc2VuZCcpIHsKCgkJCQkJCXRoaXMuT2ZmbGluZUFj
dGlvbk1hbmFnZXIucHV0QWN0aW9uKCdzZW50bXNnJywgewoJCQkJCQkJdXJsOiBh
amF4RGF0YS51cmwsCgkJCQkJCQlkYXRhOiBhamF4RGF0YS5kYXRhCgkJCQkJCX0s
IHBhcnNlSW50KGFqYXhEYXRhLmRhdGEuYWN0aW9uSWQpKTsKCgkJCQkJCV9zdWNj
ZXNzRm4oWydBamF4UmVzcG9uc2UnLCAnT0snLCB7CgkJCQkJCQlyZWRpcl91cmw6
ICdtc2dsaXN0JywKCQkJCQkJCU9rOiAnMScKCQkJCQkJfV0pOwoKCQkJCQl9IGVs
c2UgewoJCQkJCQlfc3VjY2Vzc0ZuKCk7CgkJCQkJfQoKCQkJCX0gZWxzZSBpZiAo
dHlwZSA9PSAnbHN0YXRpYycpIHsKCgkJCQkJaWYgKHF1ZXJ5RGF0YS5nZXQgPT0g
J2NvbXBvc2UnKSB7CgkJCQkJCW1haWxydS5BUEkuYWpheCh7CgkJCQkJCQl1cmw6
ICcvb2ZmbGluZS9jb21wb3NlJywKCQkJCQkJCXR5cGU6ICdHRVQnLAoJCQkJCQkJ
ZGF0YVR5cGU6ICd0ZXh0JywKCQkJCQkJCWNhY2hlUnVubmluZzogMSwKCQkJCQkJ
CWNvbXBsZXRlOiBmdW5jdGlvbiAocmVzdWx0KSB7CgkJCQkJCQkJaWYgKHJlc3Vs
dC5pc09LKCkpIHsKCQkJCQkJCQkJX3N1Y2Nlc3NGbihyZXN1bHQuZ2V0RGF0YSgp
KTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQlfc3VjY2Vzc0ZuKCk7CgkJCQkJ
CQkJfQoJCQkJCQkJfQoJCQkJCQl9KTsKCQkJCQl9IGVsc2UgewoJCQkJCQlfc3Vj
Y2Vzc0ZuKCk7CgkJCQkJfQoKCQkJCX0gZWxzZSB7CgkJCQkJX3N1Y2Nlc3NGbigp
OwoJCQkJfQoKCQkJCWlmICghbWFpbHJ1WydGb3JjZU9mZmxpbmVNb2RlJ10pIHsK
CQkJCQlpZiAoIWFqcy5vZmZsaW5lKSB7CgkJCQkJCSQod2luZG93KS50cmlnZ2Vy
SGFuZGxlcignb2ZmbGluZWNoYW5nZScsIFthanMub2ZmbGluZSA9IHRydWVdKTsK
CQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoKCQlnZXRBY3Rpb246IGZ1bmN0aW9uIChp
ZCkgewoJCQlyZXR1cm4gdGhpcy5PZmZsaW5lQWN0aW9uTWFuYWdlci5nZXRBY3Rp
b24oaWQpOwoJCX0sCgoJCWdldEFjdGlvbkNvdW50OiBmdW5jdGlvbiAoKSB7CgkJ
CXJldHVybiB0aGlzLk9mZmxpbmVBY3Rpb25NYW5hZ2VyLmdldEFjdGlvbkNvdW50
KCk7CgkJfSwKCgkJZXhlY0FjdGlvbnM6IGZ1bmN0aW9uICgpIHsKCQkJcmV0dXJu
IHRoaXMuT2ZmbGluZUFjdGlvbk1hbmFnZXIuZXhlY0FjdGlvbnMoKTsKCQl9LAoK
CQlfc2V0Q2FjaGU6IGZ1bmN0aW9uIChvLCByZXNwb25zZSkgewoKCQkJdmFyIHR5
cGUgPSB0aGlzLl9nZXRVcmxUeXBlKG8udXJsKTsKCgkJCWlmICh0eXBlICE9ICdj
aGVja25ldycgfHwgcmVzcG9uc2Uuc3RhdHVzID09ICdPSycpIHsKCgkJCQlpZiAo
dHlwZSA9PSAncmVhZG1zZycpIHsKCgkJCQkJaWYgKHJlc3BvbnNlICYmIHJlc3Bv
bnNlWzJdICYmIHJlc3BvbnNlWzJdWzBdKSB7CgkJCQkJCXZhciBtZXNzYWdlID0g
cmVzcG9uc2VbMl1bMF07CgkJCQkJCWlmIChtZXNzYWdlKSB7CgkJCQkJCQl0aGlz
LlRyYW5zcG9ydC5wb3N0KCdtZXNzYWdlcy9wdXRNZXNzYWdlcycsIFttZXNzYWdl
XSk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJfSBlbHNlIGlmICh0eXBlID09ICdhcGkv
djEvbWVzc2FnZXMvc3RhdHVzJyB8fCB0eXBlID09ICdjaGVja25ldycpIHsKCgkJ
CQkJaWYgKHJlc3BvbnNlKSB7CgoJCQkJCQlpZiAodHlwZSA9PSAnYXBpL3YxL21l
c3NhZ2VzL3N0YXR1cycpIHsKCQkJCQkJCXJlc3BvbnNlID0gbWFpbHJ1LlV0aWxz
LkFqYXhDb252ZXJ0ZXIuc3RhdHVzVG9DaGVja25ldyhyZXNwb25zZSwgbyk7CgkJ
CQkJCX0KCgkJCQkJCWlmIChyZXNwb25zZS5kYXRhKSB7CgkJCQkJCQl0aGlzLlBy
ZWxvYWRNYW5hZ2VyLnByZWxvYWRNZXNzYWdlcyhvLmRhdGEsIHJlc3BvbnNlLmRh
dGEubWVzc2FnZXMpOwoJCQkJCQkJdGhpcy5QcmVsb2FkTWFuYWdlci5wcmVsb2Fk
Rm9sZGVycyhvLmRhdGEsIHJlc3BvbnNlLmRhdGEuZm9sZGVycyk7CgkJCQkJCX0K
CQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoKCQlfc3luY0RhdGE6IGZ1bmN0aW9uIChv
KSB7CgoJCQl2YXIgc2VsZiA9IHRoaXM7CgkJCXZhciBkZWZlcnJlZCA9ICQuRGVm
ZXJyZWQoKTsKCQkJdmFyIHRyeVNldENvbW1hbmQgPSBmYWxzZTsKCQkJdmFyIHR5
cGUgPSB0aGlzLl9nZXRVcmxUeXBlKG8udXJsKTsKCgkJCWlmICh0eXBlID09ICdt
b3ZlbXNnJyB8fCB0eXBlID09ICdzcGFtYWJ1c2UnIHx8IHR5cGUgPT0gJ2NsZWFy
Zm9sZGVyJykgewoJCQkJaWYgKG8uZGF0YSkgewoJCQkJCWlmICh0eXBlID09ICdj
bGVhcmZvbGRlcicpIHsKCQkJCQkJdHJ5U2V0Q29tbWFuZCA9IHRydWU7CgkJCQkJ
CXRoaXMuVHJhbnNwb3J0LnBvc3QoJ21lc3NhZ2VzL2NsZWFyRm9sZGVyJywgby5k
YXRhLmZvbGRlciwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CgkJCQkJCQlkZWZlcnJl
ZC5yZXNvbHZlKHJlc3BvbnNlKTsKCQkJCQkJfSk7CgkJCQkJfSBlbHNlIGlmIChv
LmRhdGEubWFyaykgewoJCQkJCQl0cnlTZXRDb21tYW5kID0gdHJ1ZTsKCQkJCQkJ
dGhpcy5UcmFuc3BvcnQucG9zdCgnbWVzc2FnZXMvbWFya01lc3NhZ2VzJywge2lk
OiBvLmRhdGEuaWQsIHN0YXRlOiBvLmRhdGEubWFya21lc3NhZ2V9LCBmdW5jdGlv
biAocmVzcG9uc2UpIHsKCQkJCQkJCWRlZmVycmVkLnJlc29sdmUocmVzcG9uc2Up
OwoJCQkJCQl9KTsKCQkJCQl9IGVsc2UgaWYgKG8uZGF0YS5tb3ZlIHx8IG8uZGF0
YS5zcGFtKSB7CgkJCQkJCXRyeVNldENvbW1hbmQgPSB0cnVlOwoJCQkJCQl0aGlz
LlRyYW5zcG9ydC5wb3N0KCdtZXNzYWdlcy9tb3ZlTWVzc2FnZXMnLCB7aWQ6IG8u
ZGF0YS5pZCwgZm9sZGVyOiBvLmRhdGEuZm9sZGVyfSwgZnVuY3Rpb24gKHJlc3Bv
bnNlKSB7CgkJCQkJCQlpZiAoby5kYXRhLmZvbGRlciA9PSBtYWlscnUuRm9sZGVy
LlRSQVNIKSB7CgkJCQkJCQkJc2VsZi5UcmFuc3BvcnQucG9zdCgnbWVzc2FnZXMv
bWFya01lc3NhZ2VzJywge2lkOiBvLmRhdGEuaWQsIHN0YXRlOiBtYWlscnUuTWVz
c2FnZS5SRUFEfSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CgkJCQkJCQkJCWRlZmVy
cmVkLnJlc29sdmUocmVzcG9uc2UpOwoJCQkJCQkJCX0pOwoJCQkJCQkJfSBlbHNl
IHsKCQkJCQkJCQlkZWZlcnJlZC5yZXNvbHZlKHJlc3BvbnNlKTsKCQkJCQkJCX0K
CQkJCQkJfSk7CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQlpZiAoIXRyeVNldENvbW1h
bmQpIHsKCQkJCWRlZmVycmVkLnJlamVjdCgpOwoJCQl9CgoJCQlyZXR1cm4gZGVm
ZXJyZWQucHJvbWlzZSgpOwoJCX0sCgoJCV9nZXRVcmxUeXBlOiBmdW5jdGlvbiAo
dXJsKSB7CgkJCXZhciByZXN1bHQ7CgkJCWlmICh0eXBlb2YgdXJsID09ICdzdHJp
bmcnKSB7CgkJCQl2YXIgbWF0Y2hlcyA9IHVybC5tYXRjaCh0aGlzLm9wdGlvbnMu
dXJsVHlwZVBhdHRlcm4pOwoJCQkJaWYgKG1hdGNoZXMpIHsKCQkJCQlyZXN1bHQg
PSBtYXRjaGVzWzFdOwoJCQkJfQoJCQl9CgkJCXJldHVybiByZXN1bHQ7CgkJfSwK
CgkJX29uQ2hhbmdlT2ZmbGluZU1vZGU6IGZ1bmN0aW9uIChldnQsIG9mZmxpbmUp
IHsKCgkJCXZhciAkYm9keSA9ICQoZG9jdW1lbnQuYm9keSk7CgoJCQlpZiAob2Zm
bGluZSkgewoJCQkJJGJvZHkucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLm9ubGlu
ZU1vZGVDbGFzcykuYWRkQ2xhc3ModGhpcy5vcHRpb25zLm9mZmxpbmVNb2RlQ2xh
c3MpOwoJCQl9IGVsc2UgewoJCQkJJGJvZHkucmVtb3ZlQ2xhc3ModGhpcy5vcHRp
b25zLm9mZmxpbmVNb2RlQ2xhc3MpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5vbmxp
bmVNb2RlQ2xhc3MpOwoJCQl9CgoJCQlpZiAobWFpbHJ1LnVpKSB7CgkJCQl2YXIg
c2VhcmNoID0gbWFpbHJ1LnVpWydQb3J0YWxTZWFyY2hTdWdnZXN0J107CgkJCQlp
ZiAoc2VhcmNoKSB7CgkJCQkJaWYgKG9mZmxpbmUpIHsKCQkJCQkJJChzZWFyY2gu
U2VhcmNoLiRJbnB1dFswXSkuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsK
CQkJCQkJJCgnLicgKyBzZWFyY2guU2VhcmNoLm9wdHMuY25TZWN0aW9uTGluaywg
c2VhcmNoLlNlYXJjaC4kRm9ybSkuaGlkZSgpOwoJCQkJCX0gZWxzZSB7CgkJCQkJ
CSQoc2VhcmNoLlNlYXJjaC4kSW5wdXRbMF0pLnJlbW92ZUF0dHIoJ2Rpc2FibGVk
Jyk7CgkJCQkJCSQoJy4nICsgc2VhcmNoLlNlYXJjaC5vcHRzLmNuU2VjdGlvbkxp
bmssIHNlYXJjaC5TZWFyY2guJEZvcm0pLnNob3coKTsKCQkJCQl9CgkJCQl9CgkJ
CX0KCgkJCWlmIChtYWlscnUuVXBkYXRlcikgewoJCQkJbWFpbHJ1LlVwZGF0ZXIu
Y3RzID0ge307CgkJCX0KCQl9LAoKCQlpc1N1cHBvcnRlZDogZnVuY3Rpb24gKCkg
ewoJCQlyZXR1cm4gISEod2luZG93Wydwb3N0TWVzc2FnZSddCgkJCQkmJiB3aW5k
b3dbJ2FwcGxpY2F0aW9uQ2FjaGUnXQoJCQkJJiYgKAoJCQkJCSh3aW5kb3dbJ2lu
ZGV4ZWREQiddIHx8IHdpbmRvd1snd2Via2l0SW5kZXhlZERCJ10gfHwgd2luZG93
Wydtb3pJbmRleGVkREInXSB8fCB3aW5kb3dbJ21zSW5kZXhlZERCJ10pCgkJCQkJ
fHwgKCQuYnJvd3Nlci53ZWJraXQgJiYgd2luZG93WydvcGVuRGF0YWJhc2UnXSkp
CgkJCQkpOwoJCX0sCgoJCWlzQXV0aDogZnVuY3Rpb24gKCkgewoJCQlyZXR1cm4g
IW1haWxydVsnT2ZmbGluZU1vZGUnXSB8fCB0aGlzLkFjY291bnRNYW5hZ2VyLmlz
QXV0aCgpOwoJCX0sCgoJCWlzRW5hYmxlZDogZnVuY3Rpb24gKCkgewoJCQlyZXR1
cm4gISEobWFpbHJ1LnVzZXJuYW1lICYmIG1haWxydS51c2VyZG9tYWluICYmIG1h
aWxydVsnRW5hYmxlT2ZmbGluZU1vZGVTd2l0Y2hlciddICYmIHRoaXMuQWNjb3Vu
dE1hbmFnZXIuaXNFbmFibGVPZmZsaW5lTW9kZSgpKTsKCQl9LAoKCQlpc0FsbG93
ZWQ6IGZ1bmN0aW9uICgpIHsKCQkJcmV0dXJuIHRoaXMuaXNFbmFibGVkKCkgJiYg
dGhpcy5pc1N1cHBvcnRlZCgpICYmIHRoaXMuaXNBdXRoKCk7CgkJfQoJfSk7CgoJ
LyoqCgkgKiBAY2xhc3MgbWFpbHJ1Lk9mZmxpbmVDYWNoZQoJICovCgltYWlscnUu
T2ZmbGluZUNhY2hlID0gbmV3IG1haWxydS5PZmZsaW5lQ2FjaGVNYW5hZ2VyKCk7
CgoJaWYgKG1haWxydS5PZmZsaW5lQ2FjaGUuaXNTdXBwb3J0ZWQoKSkgewoJCV9s
b2cuc3RhcnRBdCgnb25ET01SZWFkeScsICdvbkRPTVJlYWR5Jyk7CgoJCSQuaXNS
ZWFkeSA/IG1haWxydS5PZmZsaW5lQ2FjaGUub25ET01SZWFkeSgpIDogJChmdW5j
dGlvbiAoKSB7CgkJCW1haWxydS5PZmZsaW5lQ2FjaGUub25ET01SZWFkeSgpOwoJ
CX0pOwoJfQoKCWpzTG9hZGVyLmxvYWRlZCgne21haWxydS5vZmZsaW5lfW1haWxy
dS5PZmZsaW5lQ2FjaGUnLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pz
Q29yZS9Qcm9qZWN0cy9tYWlsLnJ1L09mZmxpbmUvbWFpbHJ1Lk9mZmxpbmVDYWNo
ZS5qcyBlbmQKCi8qKiBAbmFtZXNwYWNlCXRoaXMuaXNOT1AoKSAqLwoJLyoqIEBu
YW1lc3BhY2UJdGhpcy5pc05vU0RDKCkgKi8KCS8qKiBAbmFtZXNwYWNlCXRoaXMu
aXNOb0F1dGgoKSAqLwoJLyoqIEBuYW1lc3BhY2UJdGhpcy5pc05vVG9rZW4oKSAq
LwoJLyoqIEBuYW1lc3BhY2UJdGhpcy5pc0JhZFRva2VuKCkgKi8KCS8qKiBAbmFt
ZXNwYWNlCXRoaXMuaXNSZWRpcmVjdCgpICovCgkvKiogQG5hbWVzcGFjZQl0aGlz
LmlzQWNjZXNzRGVuaWVkKCkgKi8KCS8qKiBAbmFtZXNwYWNlCXRoaXMuaXNJbnZh
bGlkUGFzc3dvcmQoKSAqLwoKCWZ1bmN0aW9uIGdldE1haWxGcm9tQ29va2llKCkg
ewoJCXZhciByZXN1bHQsIE1wb3AgPSBqc0Nvb2tpZS5nZXQoJ01wb3AnKTsKCQlp
ZiAoTXBvcCkgewoJCQlyZXN1bHQgPSBNcG9wLnNwbGl0KCc6JylbMl07CgkJfQoJ
CXJldHVybiByZXN1bHQ7Cgl9CgoJZnVuY3Rpb24gYXV0aFVzZXIoKSB7CgkJJC5h
amF4KHsKCQkJdXJsOiAnLy9zd2EuJyArIG1haWxydS5TaW5nbGVEb21haW5OYW1l
ICsgJy9jZ2ktYmluL2F1dGg/bWFjPTEnLAoJCQlkYXRhVHlwZTogJ2pzb25wJywK
CQkJdGltZW91dDogNTAwMCwKCQkJZGF0YToge0xvZ2luOiBtYWlscnUudXNlcmVt
YWlsfSwKCQkJanNvbnA6ICdKU09OUF9jYWxsJywKCQkJc3VjY2VzczogZnVuY3Rp
b24gKHJlc3BvbnNlKSB7CgkJCQkkKHdpbmRvdykudHJpZ2dlckhhbmRsZXIoJ2F1
dGhVc2VyLnN1Y2Nlc3MnLCBbcmVzcG9uc2VdKTsKCQkJfSwKCQkJY29tcGxldGU6
IGZ1bmN0aW9uICgpIHsKCQkJCSQod2luZG93KS50cmlnZ2VySGFuZGxlcignYXV0
aFVzZXIuY29tcGxldGUnKTsKCQkJfQoJCX0pOwoJfQoKCSQuYWpheFNldHVwKHsK
CQlkYXRhOiB7CgkJCWFqYXhfY2FsbDogMSwKCQkJJ3gtZW1haWwnOiBmdW5jdGlv
biAoKSB7CgkJCQlyZXR1cm4gbWFpbHJ1LnVzZXJkb21haW4gJiYgbWFpbHJ1LnVz
ZXJuYW1lICYmIG1haWxydS51c2VyZW1haWwgPyBtYWlscnUudXNlcmVtYWlsIDog
Jyc7CgkJCX0KCQl9LAoJCXRyYWRpdGlvbmFsOiB0cnVlCgl9KTsKCgkvKioKCSAq
IEBjbGFzcwltYWlscnUuQWpheAoJICogQHBhcmFtCXtPYmplY3R9CW8KCSAqLwoJ
bWFpbHJ1LkFqYXggPSBmdW5jdGlvbiAobykgewoKCQl2YXIgZW1haWwgPSBnZXRN
YWlsRnJvbUNvb2tpZSgpOwoKCQlpZiAoIW8udHJ5QXV0aCAmJiAobWFpbHJ1Lk9s
ZE11bHRpQXV0aExheWVyTG9naWMgfHwgbWFpbHJ1Lm5ld011bHRpQXV0aExvZ2lj
KSAmJiAhYWpzLmJsdXJyZWQgJiYgZW1haWwgJiYgbWFpbHJ1LnVzZXJuYW1lICYm
IG1haWxydS51c2VyZG9tYWluICYmIGVtYWlsICE9IG1haWxydS51c2VyZW1haWwp
IHsKCgkJCSQod2luZG93KS5vbmUoJ2F1dGhVc2VyLmNvbXBsZXRlJywgZnVuY3Rp
b24gKG8sIGV2dCkgewoJCQkJby50cnlBdXRoID0gMTsKCQkJCW1haWxydS5BamF4
KG8pOwoJCQl9LmJpbmQodGhpcywgbykpOwoKCQkJYXV0aFVzZXIoKTsKCQl9CgkJ
ZWxzZSB7CgoJCQlvLnR5cGUJCQk9IChvLnR5cGUgfHwgJ0dFVCcpLnRvVXBwZXJD
YXNlKCk7CgkJCW8uZGF0YVR5cGUJCT0gKG8uZGF0YVR5cGUgfHwgJ2pzb24nKS50
b0xvd2VyQ2FzZSgpOwoJCQlvLnRpbWVvdXQJCT0gYWpzLmlzc2V0KG8udGltZW91
dCwgMCk7CgkJCW8uYXN5bmMJCQk9IGFqcy5pc3NldChvLmFzeW5jLCB0cnVlKTsK
CQkJby50b2tlblJldHJ5CT0gYWpzLmlzc2V0KG8udG9rZW5SZXRyeSwgMSk7CgoJ
CQkkKHdpbmRvdykudHJpZ2dlckhhbmRsZXIoJ2FqYXguYmVmb3JlU2VuZCcsIFtv
XSk7CgoJCQltYWlscnUuT2ZmbGluZUNhY2hlLmFqYXgobywgewoJCQkJdXJsOgkJ
by51cmwsCgkJCQl0eXBlOgkJby50eXBlLAoJCQkJZGF0YToJCW8uZGF0YSwKCQkJ
CWRhdGFUeXBlOgkndGV4dCcsCgkJCQl0aW1lb3V0OglvLnRpbWVvdXQsCgkJCQlh
c3luYzoJCW8uYXN5bmMsCgkJCQljb21wbGV0ZToJZnVuY3Rpb24gKGpxWEhSLCB0
ZXh0U3RhdHVzKSB7CgkJCQkJbWFpbHJ1LkFqYXgucGFyc2UoanFYSFIsIHRleHRT
dGF0dXMsIG8pOwoJCQkJfQoJCQl9LCBkb1Jlc3VsdCk7CgkJfQoJfTsKCgltYWls
cnUuQWpheC5nZXRTeW5jRGF0YSA9IGZ1bmN0aW9uICh1cmwsIGRhdGEpewoJCXRy
eSB7CgkJCXZhcgoJCQkJICB4aHIJPSAkLmFqYXgoeyAndXJsJzogdXJsLCAnZGF0
YSc6IGRhdGEsICdhc3luYyc6IGZhbHNlLCAnZGF0YVR5cGUnOiAndGV4dCcgfSkK
CQkJCSwgcmVzCT0gJC5wYXJzZUpTT04oeGhyLnJlc3BvbnNlVGV4dCkKCQkJOwoJ
CQlpZiggcmVzICYmIHJlcy5zdGF0dXMgPT0gIk9LIiApewoJCQkJcmV0dXJuCXJl
cy5kYXRhOwoJCQl9CgkJfQoJCWNhdGNoKCBlICl7fQoJfTsKCgoJbWFpbHJ1LkFq
YXguYnlUeXBlCT0gZnVuY3Rpb24gKHQsIHUsIGQsIHMsIGUpewoJCXZhciBvID0g
eyB1cmw6IHUsIGRhdGE6IGQsIHR5cGU6IHQgfTsKCQlpZiggZSAhPT0gdHJ1ZSAp
eyBvLnN1Y2Nlc3MgPSBzOyBvLmVycm9yID0gZTsgfSBlbHNlIHsgby5jb21wbGV0
ZSA9IHM7IH0KCQlyZXR1cm4JbWFpbHJ1LkFqYXgobyk7Cgl9OwoKCUFycmF5LmZv
ckVhY2goWydnZXQnLCAncG9zdCddLCBmdW5jdGlvbiAodHlwZSl7CgkJbWFpbHJ1
LkFqYXhbdHlwZV0gPSBmdW5jdGlvbiAodXJsLCBkYXRhLCBzdWNjZXNzLCBlcnJv
cil7CgkJCWlmKCAkLmlzRnVuY3Rpb24oZGF0YSkgKXsKCQkJCXN1Y2Nlc3MJPSBk
YXRhOwoJCQkJZXJyb3IJPSBzdWNjZXNzOwoJCQkJZGF0YQk9IHt9OwoJCQl9CgoJ
CQlyZXR1cm4gbWFpbHJ1LkFqYXguYnlUeXBlKHR5cGUsIHVybCwgZGF0YSwgc3Vj
Y2VzcywgZXJyb3IpOwoJCX07Cgl9KTsKCgoJLyoqCgkgKiBAY2xhc3MJbWFpbHJ1
LkFqYXguUmVzdWx0CgkgKi8KCW1haWxydS5BamF4LlJlc3VsdCA9IGZ1bmN0aW9u
KHJlcywgb3B0aW9ucywgeGhyLCB4aHJTdGF0dXMsIHhockVycm9yKXsKCQl0aGlz
Ll94aHIJCQk9IHhocjsKCQl0aGlzLl9vcHRpb25zCQk9IG9wdGlvbnMgfHwge307
CgoJCXRoaXMueGhyRXJyb3IJCT0geGhyRXJyb3I7CgkJdGhpcy54aHJTdGF0dXMJ
CT0geGhyICYmIHhoci5zdGF0dXM7CgkJdGhpcy54aHJTdGF0dXNUZXh0CT0gdGhp
cy5zdGF0dXMgPSB4aHJTdGF0dXMgKyAnJzsKCgkJaWYoIHRoaXMuaXNTdWNjZXNz
KCkgKXsKCQkJaWYoIHRoaXMuaXNKU09OKCkgKXsKCQkJCWlmKCByZXMgJiYgcmVz
WzBdID09ICdBamF4UmVzcG9uc2UnICl7CgkJCQkJcmVzID0geyBzdGF0dXM6IHJl
c1sxXSwgZGF0YTogcmVzWzJdIH07CgkJCQl9CgkJCQllbHNlIGlmKCAkLmlzQXJy
YXkocmVzKSApewoJCQkJCXJlcyA9IHsgc3RhdHVzOiAnb2snLCBkYXRhOiByZXMg
fTsKCQkJCX0KCQkJCWVsc2UgaWYoICFyZXMgKXsKCQkJCQlyZXMgPSB7IHN0YXR1
czogJ3Vua25vd24nIH07CgkJCQl9CgoKCQkJCXJlcy5zdGF0dXMgPSBTdHJpbmco
cmVzLnN0YXR1cykudG9Mb3dlckNhc2UoKQoJCQl9CgkJCWVsc2UgewoJCQkJcmVz
ID0geyBzdGF0dXM6ICdvaycsIGRhdGE6IHJlcyB9OwoJCQl9CgoJCQlpZiggeGhy
ICYmIHhoci5nZXRSZXNwb25zZUhlYWRlciAmJiB4aHIuZ2V0UmVzcG9uc2VIZWFk
ZXIoJ1gtTm9TREMnKSA9PSAxICl7CgkJCQlyZXMuc3RhdHVzID0gJ05vU0RDJzsK
CQkJfQoKCQkJaWYoIHJlcyAmJiByZXMuc3RhdHVzID09ICdyZWRpcmVjdCcgJiYg
cmVzLmRhdGEuaW5kZXhPZignL2NnaS1iaW4vbG9naW4nKSA9PT0gMCApewoJCQkJ
cmVzLnN0YXR1cyA9ICdub2F1dGgnOwoJCQl9CgoJCQlhanMuZXh0ZW5kKHRoaXMs
IHJlcyk7CgkJfQoJfTsKCgltYWlscnUuQWpheC5SZXN1bHQuZm4gPQoJbWFpbHJ1
LkFqYXguUmVzdWx0LnByb3RvdHlwZSA9IHsKCQljb25zdHJ1Y3RvcjogbWFpbHJ1
LkFqYXguUmVzdWx0LAoKCQlnZXRYSFI6IGZ1bmN0aW9uICgpewoJCQlyZXR1cm4g
dGhpcy5feGhyOwoJCX0sCgoJCWdldFJlc3BvbnNlVGV4dDogZnVuY3Rpb24gKCl7
CgkJCXJldHVybgl0aGlzLl94aHIgJiYgdGhpcy5feGhyLnJlc3BvbnNlVGV4dDsK
CQl9LAoKCQlnZXRPcHRzOiBmdW5jdGlvbiAoKXsKCQkJcmV0dXJuCXRoaXMuX29w
dGlvbnM7CgkJfSwKCgkJaXNPSzogZnVuY3Rpb24gKCl7CgkJCXJldHVybiB0aGlz
LnN0YXR1cyA9PSAnb2snIHx8IHRoaXMuc3RhdHVzID09IDIwMDsKCQl9LAoKCQlp
c1N1Y2Nlc3M6IGZ1bmN0aW9uICgpewoJCQlyZXR1cm4JdGhpcy54aHJTdGF0dXNU
ZXh0ID09ICdzdWNjZXNzJyAmJiB0aGlzLnN0YXR1cyAhPSAnZXJyb3InOwoJCX0s
CgoJCWlzRXJyb3I6IGZ1bmN0aW9uICgpewoJCQlyZXR1cm4gdGhpcy5oYXNOZXQo
KQoJCQkJJiYgISgKCQkJCQkJdGhpcy5pc09LKCkKCQkJCQl8fCB0aGlzLmlzTk9Q
KCkKCQkJCQl8fCB0aGlzLmlzTm9TREMoKQoJCQkJCXx8IHRoaXMuaXNOb0F1dGgo
KQoJCQkJCXx8IHRoaXMuaXNOb1Rva2VuKCkKCQkJCQl8fCB0aGlzLmlzQmFkVG9r
ZW4oKQoJCQkJCXx8IHRoaXMuaXNSZWRpcmVjdCgpCgkJCQkJfHwgdGhpcy5pc0Fj
Y2Vzc0RlbmllZCgpCgkJCQkJfHwgdGhpcy5pc0Fib3J0KCkKCQkJCQl8fCB0aGlz
LmlzSW52YWxpZFBhc3N3b3JkKCkKCQkJCSkKCQkJOwoJCX0sCgoJCWhhc05ldDog
ZnVuY3Rpb24gKCl7CgkJCXZhciB4aHIgPSB0aGlzLmdldFhIUigpOwoJCQlyZXR1
cm4gdGhpcy5pc1N1Y2Nlc3MoKSB8fCB4aHIgJiYgKHhoci5yZWFkeVN0YXRlID09
IDQgJiYgKHhoci5zdGF0dXMgPiA5OSAmJiB4aHIuc3RhdHVzIDwgNjAwKSk7CgkJ
fSwKCgkJaXNHRVQ6IGZ1bmN0aW9uICgpewoJCQlyZXR1cm4gU3RyaW5nKHRoaXMu
X29wdGlvbnMudHlwZSB8fCAnR0VUJykudG9VcHBlckNhc2UoKSA9PSAnR0VUJzsK
CQl9LAoKCQlpc1BPU1Q6IGZ1bmN0aW9uICgpewoJCQlyZXR1cm4JU3RyaW5nKHRo
aXMuX29wdGlvbnMudHlwZSkudG9VcHBlckNhc2UoKSA9PSAnUE9TVCc7CgkJfSwK
CgkJaXNKU09OOiBmdW5jdGlvbiAoKXsKCQkJcmV0dXJuCVN0cmluZyh0aGlzLl9v
cHRpb25zLmRhdGFUeXBlIHx8ICdqc29uJykudG9Mb3dlckNhc2UoKSA9PSAnanNv
bic7CgkJfSwKCgkJZ2V0U3RhdHVzOiBmdW5jdGlvbiAoKXsKCQkJcmV0dXJuIHRo
aXMuc3RhdHVzOwoJCX0sCgoJCWdldEVycm9yOiBmdW5jdGlvbiAoKXsKCQkJcmV0
dXJuIHRoaXMueGhyRXJyb3I7CgkJfSwKCgkJc2V0RGF0YTogZnVuY3Rpb24gKGRh
dGEpewoJCQl0aGlzLmRhdGEgPSBkYXRhOwoJCQlyZXR1cm4JdGhpczsKCQl9LAoK
CQlnZXREYXRhOiBmdW5jdGlvbiAoKXsKCQkJcmV0dXJuCXRoaXMuZGF0YTsKCQl9
LAoKCQlnZXRCb2R5OiBmdW5jdGlvbiAoKXsKCQkJcmV0dXJuCXRoaXMuZ2V0RGF0
YSgpOwoJCX0KCX07CgoKCUFycmF5LmZvckVhY2goJ05PUCBiYWQtdG9rZW4gbm8t
YXV0aCBuby1TREMgbm8tdG9rZW4gcmVkaXJlY3QgYWNjZXNzLWRlbmllZCBpbnZh
bGlkLXBhc3N3b3JkIGFib3J0Jy5zcGxpdCgnICcpLCBmdW5jdGlvbiAobmFtZSwg
c3RhdHVzKXsKCQlzdGF0dXMgPSBuYW1lLnJlcGxhY2UoLy0vZywgJycpLnRvTG93
ZXJDYXNlKCk7CgkJbWFpbHJ1LkFqYXguUmVzdWx0LmZuWyQuY2FtZWxDYXNlKCdp
cy0nK25hbWUpXSA9IGZ1bmN0aW9uICgpewoJCQlyZXR1cm4gKHRoaXMuc3RhdHVz
IHx8ICcnKS50b0xvd2VyQ2FzZSgpID09IHN0YXR1czsKCQl9OwoJfSk7CgoKCWZ1
bmN0aW9uIGRvUmVzdWx0IChyZXNwb25zZSwgb3B0cywgeGhyLCBzLCBzdGF0dXMs
IGVycm9yLCBvbGRfYW5zd2VyKSB7CgoJCXZhciBjb252ZXJ0X3Jlc3BvbnNlID0g
cmVzcG9uc2U7CgoJCWlmIChzID09ICdzdWNjZXNzJyAmJiBvcHRzLmNvbnZlcnRS
ZXN1bHRUb09sZEFwaSAmJiAhb2xkX2Fuc3dlcikgewoJCQlpZiggbWFpbHJ1LnYy
ICYmIHJlc3BvbnNlICYmIHJlc3BvbnNlLmJ1aWxkICl7CgkJCQltYWlscnUubmVl
ZFJlbG9hZFBhZ2UoJ2J1aWxkJywgcmVzcG9uc2UuYnVpbGQpOwoJCQl9CgoJCQlj
b252ZXJ0X3Jlc3BvbnNlID0gbWFpbHJ1LlV0aWxzLkFqYXhDb252ZXJ0ZXIuY29u
dmVydChyZXNwb25zZSwgb3B0cyk7CgkJfQoKCQl2YXIgcmVzdWx0ID0gbmV3IG1h
aWxydS5BamF4LlJlc3VsdChjb252ZXJ0X3Jlc3BvbnNlLCBvcHRzLCB4aHIsIHMs
IGVycm9yKTsKCgkJaWYoIG1haWxydVsnVXNlVG9rZW5BUElWMSddICYmIHJlc3Vs
dC5pc0JhZFRva2VuKCkgJiYgb3B0cy50b2tlblJldHJ5LS0gPiAwICl7CgkJCW1h
aWxydS5BUEkucG9zdCgndG9rZW5zJywgZnVuY3Rpb24gKFJlc3VsdCl7CgkJCQlp
ZiAoUmVzdWx0LmlzT2soKSkgewoJCQkJCXZhciB0b2tlbiA9IFJlc3VsdC5nZXRC
b2R5KCkudG9rZW47CgkJCQkJaWYgKHRva2VuKSB7CgkJCQkJCW1haWxydS51cGRh
dGVUb2tlbih0b2tlbik7CgkJCQkJfQoJCQkJfQoJCQkJbWFpbHJ1LkFqYXgob3B0
cyk7CgkJCX0pOwoJCX0KCQllbHNlIGlmKCBtYWlscnVbJ1VzZVNEQyddICYmIHJl
c3VsdC5pc05vU0RDKCkgJiYgKG9wdHMuU0RDID09PSB2b2lkIDApICl7CgkJCXZh
ciBkb1NEQyA9IGZ1bmN0aW9uIChzdGF0ZSl7CgkJCQlvcHRzLlNEQyA9IHN0YXRl
OwoKCQkJCWlmKCBzdGF0ZSApewoJCQkJCW1haWxydS5BamF4KG9wdHMpOwoJCQkJ
fQoJCQkJZWxzZSB7CgkJCQkJcmVzdWx0LnN0YXR1cyA9ICdub2F1dGgnOwoJCQkJ
CShvcHRzLmVycm9yIHx8IGFqcy5GKShyZXN1bHQsIHMpOwoJCQkJCShvcHRzLmNv
bXBsZXRlIHx8IGFqcy5GKShyZXN1bHQsIHMpOwoJCQkJfQoJCQl9OwoKCQkJJC5h
amF4KHsKCQkJCXVybDogJ2h0dHBzOi8vJysgbWFpbHJ1WydVc2VTREMnXSArJy9z
ZGM/SlNPTlBfY2FsbD0/JmZyb209JyArIGFqcy5lbmNvZGUoYWpzLlJvdXRlci5w
YXJzZVVSTChqc0hpc3RvcnkuZ2V0KCkpLnVybCksCgkJCQl0eXBlOiAnZ2V0JywK
CQkJCWRhdGFUeXBlOiAnanNvbnAnLAoJCQkJdGltZW91dDogMzAwMCwKCQkJCWVy
cm9yOiBmdW5jdGlvbiAoKXsgZG9TREMoZmFsc2UpOyB9LAoJCQkJc3VjY2Vzczog
ZnVuY3Rpb24gKHN0YXRlKXsgZG9TREMoc3RhdGUpOyB9CgkJCX0pOwoJCX0KCQll
bHNlIHsKCQkJKChyZXN1bHQuaXNTdWNjZXNzKCkgPyBvcHRzLnN1Y2Nlc3MgOiBv
cHRzLmVycm9yKSB8fCBhanMuRikocmVzdWx0LCBzKTsKCQkJKG9wdHMuY29tcGxl
dGUgfHwganNDb3JlLkYpKHJlc3VsdCwgcyk7CgoJCQlpZiAocyA9PSAncGFyc2Vy
ZXJyb3InICYmIGVycm9yKSB7CgkJCQkkLmV2ZW50LnRyaWdnZXIoJ2FqYXhFcnJv
cicsIFt4aHIsIG9wdHMsIGVycm9yXSk7CgkJCX0KCgkJCWlmIChtYWlscnUuRXZl
bnRzKSB7CgkJCQlpZiAocmVzdWx0LmlzUmVkaXJlY3QoKSkgewoJCQkJCW1haWxy
dS5FdmVudHMuZmlyZSgncmVkaXJlY3QuYWpheCcsIHJlc3VsdCk7CgkJCQl9IGVs
c2UgaWYgKHMgIT09ICdzdWNjZXNzJykgewoJCQkJCS8qKiBAbmFtZXNwYWNlCW1h
aWxydS5zYXZlRXJyb3IgKi8KCQkJCQltYWlscnUuc2F2ZUVycm9yKHMsIFtzdGF0
dXNdKTsKCQkJCQltYWlscnUuRXZlbnRzLmZpcmUoJ2Vycm9yLmFqYXgnLCByZXN1
bHQpOwoJCQkJfQoJCQl9CgkJfQoKCQkkKHdpbmRvdykudHJpZ2dlckhhbmRsZXIo
J2FqYXguY29tcGxldGUnLCBbcmVzdWx0XSk7CgoJCS8vIE1BSUwtMTcxODcKCQlp
ZiAocyA9PT0gJ3N1Y2Nlc3MnICYmICFvbGRfYW5zd2VyICYmIG9wdHMuaXNBUElW
MSAmJiByZXNwb25zZSAmJiByZXNwb25zZS5zdGF0dXMpIHsKCQkJdmFyIGFwaV9r
ZXlfcmUgPSAvXlwvYXBpXC92XGQrXC8oW15cP10rKS4qLzsKCQkJaWYgKGFwaV9r
ZXlfcmUudGVzdChvcHRzLnVybCkpIHsKCQkJCXZhciBhcGlfa2V5ID0gb3B0cy51
cmwucmVwbGFjZShhcGlfa2V5X3JlLCAnJDEnKS5yZXBsYWNlKC9cLy9nLCAnXycp
LCByYWRhcl9wYXJ0czsKCQkJCWlmIChyZXNwb25zZS5zdGF0dXMgPT0gNDAzKSB7
CgkJCQkJcmFkYXJfcGFydHMgPSBbCgkJCQkJCSAgYXBpX2tleSArICdfJyArIHJl
c3BvbnNlLnN0YXR1cyArICc9MScKCQkJCQkJLCBhcGlfa2V5ICsgJ18nICsgcmVz
cG9uc2Uuc3RhdHVzICsgJ18nICsgcmVzcG9uc2UuYm9keSArICc9MScKCQkJCQkJ
LCByZXNwb25zZS5zdGF0dXMgKyAnPTEnCgkJCQkJXTsKCQkJCX0gZWxzZSBpZiAo
YXBpX2tleSAhPT0gJ21lc3NhZ2VzX3N0YXR1cycgfHwgcmVzcG9uc2Uuc3RhdHVz
ICE9IDMwNCkgewoJCQkJCXJhZGFyX3BhcnRzID0gWwoJCQkJCQkgIGFwaV9rZXkg
KyAnXycgKyByZXNwb25zZS5zdGF0dXMgKyAnPTEnCgkJCQkJCSwgcmVzcG9uc2Uu
c3RhdHVzICsgJz0xJwoJCQkJCV07CgkJCQl9CgkJCQlpZiAocmFkYXJfcGFydHMp
IHsKCQkJCQltYWlscnUucmFkYXIoJ0FQSVMnLCByYWRhcl9wYXJ0cy5qb2luKCcm
JykpOwoJCQkJfQoJCQl9CgkJfQoJfQoKCW1haWxydS5BamF4LnBhcnNlID0gZnVu
Y3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBvKSB7CgkJbWFpbHJ1Lk9mZmxpbmVD
YWNoZS5wYXJzZShqcVhIUiwgdGV4dFN0YXR1cywgbywgZG9SZXN1bHQpOwoJfTsK
CgkvLyBAc2hvcnQKCXdpbmRvdy5BamF4CT0gbWFpbHJ1LkFqYXg7CgoKCgoJKGZ1
bmN0aW9uICgpIHsKCQl2YXIKCQkJICBfcnR5cGUgPSAvXig/Omh0dHBzPzpcL1wv
W14vXSspP1wvPyg/OmNnaS1iaW5cLyk/KFx3KykvaQoJCQksIF9sb2cgPSBmdW5j
dGlvbiAodHh0KXsgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5sb2cgJiYgY29u
c29sZS5sb2codHh0KSB9CgkJOwoKCQlmdW5jdGlvbiBfcmVsUGF0aCh1cmwpIHsK
CQkJdmFyIHJlc3VsdCA9IHVybC5tYXRjaChfcnR5cGUpOwoJCQlyZXR1cm4gcmVz
dWx0ID8gcmVzdWx0WzFdIDogZmFsc2U7CgkJfQoKCQkkKHdpbmRvdykuYmluZCh7
CgoJCQknYWpheC5iZWZvcmVTZW5kJzogZnVuY3Rpb24oZXZ0LCBvcHRpb25zLCB0
eXBlKSB7CgkJCQl0cnkgeyBfc3RhcnQob3B0aW9ucyk7IH0gY2F0Y2ggKGVyKXsg
fQoKCQkJCWlmICgkLnR5cGUob3B0aW9ucy5kYXRhKSA9PSAnc3RyaW5nJykgewoJ
CQkJCW9wdGlvbnMudXJsICs9ICh+b3B0aW9ucy51cmwuaW5kZXhPZignPycpID8g
JyYnIDogJz8nKSArICd4LWVtYWlsPScgKyBtYWlscnUudXNlcmVtYWlsOwoJCQkJ
fQoKCQkJCWlmICghKG9wdGlvbnMuaXNBUElWMSB8fCBvcHRpb25zLnNhdmVUb2tl
bnMpICYmIG1haWxydS50b2tlbnMgJiYgKHR5cGUgPSBvcHRpb25zLnJlZikpIHsK
CQkJCQl2YXIgdG9rZW5fcGFydHMgPSBtYWlscnUudG9rZW5zW3R5cGVdIHx8IHdp
bmRvd1snbWFpbHJ1X2FwaV90b2tlbl9wYXJ0cyddOwoJCQkJCWlmIChtYWlscnVb
J1VzZVRva2VuQVBJVjEnXSkgewoJCQkJCQl0b2tlbl9wYXJ0cyA9IHdpbmRvd1sn
bWFpbHJ1X2FwaV90b2tlbl9wYXJ0cyddIHx8IHRva2VuX3BhcnRzOwoJCQkJCX0K
CQkJCQlpZiAodG9rZW5fcGFydHMpIHsKCQkJCQkJaWYgKG9wdGlvbnMuZGF0YSkg
ewoJCQkJCQkJaWYgKCQudHlwZShvcHRpb25zLmRhdGEpID09ICdzdHJpbmcnKSB7
CgkJCQkJCQkJb3B0aW9ucy5kYXRhID0gJC5wYXJhbSh0b2tlbl9wYXJ0cykgKyAn
JicgKyBvcHRpb25zLmRhdGEucmVwbGFjZSgvKF58JikoZm9ybV9zaWdufGZvcm1f
dG9rZW4pPVteJl0qL2csICcnKTsKCQkJCQkJCX0gZWxzZSBpZiAoJC50eXBlKG9w
dGlvbnMuZGF0YSkgPT0gJ29iamVjdCcpIHsKCQkJCQkJCQlvcHRpb25zLmRhdGEg
PSAkLmV4dGVuZCh7fSwgb3B0aW9ucy5kYXRhLCB0b2tlbl9wYXJ0cyk7CgkJCQkJ
CQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlvcHRpb25zLmRhdGEgPSB0b2tlbl9w
YXJ0czsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfSwKCgoJCQknYWpheC5jb21w
bGV0ZSc6IGZ1bmN0aW9uKGV2dCwgcmVzcG9uc2UpIHsKCQkJCXZhciBkYXRhID0g
cmVzcG9uc2UuZ2V0RGF0YSgpOwoJCQkJdmFyIG9wdGlvbnMgPSByZXNwb25zZS5n
ZXRPcHRzKCk7CgkJCQl2YXIgdHlwZSA9IG9wdGlvbnMucmVmOwoKCQkJCXRyeSB7
IF9zdG9wKG9wdGlvbnMsIHJlc3BvbnNlKTsgfSBjYXRjaCAoZXIpeyB9CgoJCQkJ
aWYgKHJlc3BvbnNlLmlzT0soKSkgewoKCQkJCQlpZiAoJC50eXBlKGRhdGEpID09
ICdhcnJheScpIHsKCQkJCQkJZGF0YSA9IGRhdGFbMF07CgkJCQkJfQoKCQkJCQlp
ZiAoJC50eXBlKGRhdGEpID09ICdvYmplY3QnKSB7CgoJCQkJCQltYWlscnUudG9r
ZW5zID0gbWFpbHJ1LnRva2VucyB8fCB7fTsKCgkJCQkJCS8qKiBAbmFtZXNwYWNl
IGRhdGEuZm9ybV9zaWduX21vdmVtc2cgKi8KCQkJCQkJLyoqIEBuYW1lc3BhY2Ug
ZGF0YS5mb3JtX3Rva2VuX21vdmVtc2cgKi8KCQkJCQkJLyoqIEBuYW1lc3BhY2Ug
ZGF0YS5mb3JtX3NpZ25fc2VudG1zZyAqLwoJCQkJCQkvKiogQG5hbWVzcGFjZSBk
YXRhLmZvcm1fdG9rZW5fc2VudG1zZyAqLwoJCQkJCQkvKiogQG5hbWVzcGFjZSBk
YXRhLmZvcm1fc2lnbl9ib3VuY2Vtc2cgKi8KCQkJCQkJLyoqIEBuYW1lc3BhY2Ug
ZGF0YS5mb3JtX3Rva2VuX2JvdW5jZW1zZyAqLwoJCQkJCQkvKiogQG5hbWVzcGFj
ZSBkYXRhLmZvcm1fc2lnbl9zbXN2ZXJpZmljYXRvciAqLwoJCQkJCQkvKiogQG5h
bWVzcGFjZSBkYXRhLmZvcm1fdG9rZW5fc21zdmVyaWZpY2F0b3IgKi8KCQkJCQkJ
aWYgKHR5cGUgPT0gJ21vdmVtc2cnICYmIGRhdGEuZm9ybV9zaWduICYmIGRhdGEu
Zm9ybV90b2tlbikgewoJCQkJCQkJbWFpbHJ1LnRva2Vuc1snbW92ZW1zZyddID0g
e2Zvcm1fc2lnbjogZGF0YS5mb3JtX3NpZ24sIGZvcm1fdG9rZW46IGRhdGEuZm9y
bV90b2tlbn07CgkJCQkJCX0gZWxzZSBpZiAoZGF0YS5mb3JtX3NpZ25fbW92ZW1z
ZyAmJiBkYXRhLmZvcm1fdG9rZW5fbW92ZW1zZykgewoJCQkJCQkJbWFpbHJ1LnRv
a2Vuc1snbW92ZW1zZyddID0ge2Zvcm1fc2lnbjogZGF0YS5mb3JtX3NpZ25fbW92
ZW1zZywgZm9ybV90b2tlbjogZGF0YS5mb3JtX3Rva2VuX21vdmVtc2d9OwoJCQkJ
CQl9CgoJCQkJCQlpZiAodHlwZSA9PSAnc2VudG1zZycgJiYgZGF0YS5mb3JtX3Np
Z24gJiYgZGF0YS5mb3JtX3Rva2VuKSB7CgkJCQkJCQltYWlscnUudG9rZW5zWydz
ZW50bXNnJ10gPSB7Zm9ybV9zaWduOiBkYXRhLmZvcm1fc2lnbiwgZm9ybV90b2tl
bjogZGF0YS5mb3JtX3Rva2VufTsKCQkJCQkJfSBlbHNlIGlmIChkYXRhLmZvcm1f
c2lnbl9zZW50bXNnICYmIGRhdGEuZm9ybV90b2tlbl9zZW50bXNnKSB7CgkJCQkJ
CQltYWlscnUudG9rZW5zWydzZW50bXNnJ10gPSB7Zm9ybV9zaWduOiBkYXRhLmZv
cm1fc2lnbl9zZW50bXNnLCBmb3JtX3Rva2VuOiBkYXRhLmZvcm1fdG9rZW5fc2Vu
dG1zZ307CgkJCQkJCX0KCgkJCQkJCWlmICh0eXBlID09ICdib3VuY2Vtc2cnICYm
IGRhdGEuZm9ybV9zaWduICYmIGRhdGEuZm9ybV90b2tlbikgewoJCQkJCQkJbWFp
bHJ1LnRva2Vuc1snYm91bmNlbXNnJ10gPSB7Zm9ybV9zaWduOiBkYXRhLmZvcm1f
c2lnbiwgZm9ybV90b2tlbjogZGF0YS5mb3JtX3Rva2VufTsKCQkJCQkJfSBlbHNl
IGlmIChkYXRhLmZvcm1fc2lnbl9ib3VuY2Vtc2cgJiYgZGF0YS5mb3JtX3Rva2Vu
X2JvdW5jZW1zZykgewoJCQkJCQkJbWFpbHJ1LnRva2Vuc1snYm91bmNlbXNnJ10g
PSB7Zm9ybV9zaWduOiBkYXRhLmZvcm1fc2lnbl9ib3VuY2Vtc2csIGZvcm1fdG9r
ZW46IGRhdGEuZm9ybV90b2tlbl9ib3VuY2Vtc2d9OwoJCQkJCQl9CgoJCQkJCQlp
ZiAoZGF0YS5mb3JtX3NpZ25fc21zdmVyaWZpY2F0b3IgJiYgZGF0YS5mb3JtX3Rv
a2VuX3Ntc3ZlcmlmaWNhdG9yKSB7CgkJCQkJCQltYWlscnUudG9rZW5zWydzbXN2
ZXJpZmljYXRvciddID0ge2Zvcm1fc2lnbjogZGF0YS5mb3JtX3NpZ25fc21zdmVy
aWZpY2F0b3IsIGZvcm1fdG9rZW46IGRhdGEuZm9ybV90b2tlbl9zbXN2ZXJpZmlj
YXRvcn07CgkJCQkJCX0KCgkJCQkJCWlmIChkYXRhLmZvcm1fc2lnbl9hcGlfdjEg
JiYgZGF0YS5mb3JtX3Rva2VuX2FwaV92MSkgewoJCQkJCQkJbWFpbHJ1LnVwZGF0
ZVRva2VuKGRhdGEuZm9ybV9zaWduX2FwaV92MSArICc6JyArIGRhdGEuZm9ybV90
b2tlbl9hcGlfdjEpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCWNoZWNrQWN0
aXZlQWNjb3VudChyZXNwb25zZSk7CgkJCX0KCQl9KTsKCgkJZnVuY3Rpb24gY2hl
Y2tMYXllciAobmFtZSwgdmFycykgewoKCQkJaWYgKG1haWxydS5EaXNhYmxlZE5v
QXV0aExheWVyKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCWFqcy5yZXF1aXJlKCd7
cGx1Z2luc30nICsgJ0xheWVyTWFuYWdlcix7cGx1Z2luc30nICsgJ0xheWVyJywg
ZnVuY3Rpb24gKG5hbWUsIHZhcnMpIHsKCQkJCWlmICggIUxheWVyTWFpbkRpdi5n
ZXRJbnN0YW5jZSgpLnZpc2libGUKCQkJCQkgJiYgKAoJCQkJCQkhbWFpbHJ1LnBo
QXV0aEZvcm1FbmFibGVkCgkJCQkJCXx8ICFfX1BILmF1dGhGb3JtLmlzVmlzaWJs
ZSgpCgkJCQkJKQoJCQkJKSB7CgkJCQkJaWYgKG1haWxydS5PbGRNdWx0aUF1dGhM
YXllckxvZ2ljIHx8IG1haWxydS5uZXdNdWx0aUF1dGhMb2dpYykgewoJCQkJCQlp
ZiAoIWFqcy5ibHVycmVkKSB7CgkJCQkJCQkkKHdpbmRvdykub25lKCdhdXRoVXNl
ci5zdWNjZXNzJywgZnVuY3Rpb24gKG5hbWUsIHZhcnMsIGV2dCwgcmVzcG9uc2Up
IHsKCQkJCQkJCQlpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdvaycpIHsKCQkJCQkJ
CQkJZGVidWcubG9nKCdhY2NvdW50IEVYSVNUUycpOwoJCQkJCQkJCX0gZWxzZSB7
CgkJCQkJCQkJCXZhciBkYXRhID0gcmVzcG9uc2UuZGF0YSwgbGlzdDsKCQkJCQkJ
CQkJaWYgKGRhdGEpIHsKCQkJCQkJCQkJCWxpc3QgPSBkYXRhLmxpc3Q7CgkJCQkJ
CQkJCX0KCQkJCQkJCQkJaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHsKCQkJCQkJ
CQkJCWlmIChsaXN0Lmxlbmd0aCA9PSAxKSB7CgkJCQkJCQkJCQkJbmFtZSA9ICdj
aGFuZ2VBY2NvdW50JzsKCQkJCQkJCQkJCQlpZiggIW1haWxydS5waEF1dGhGb3Jt
RW5hYmxlZCApIHsvL01BSUwtMTUwNzcKCQkJCQkJCQkJCQkJLy8gb25seSBmb3Ig
b2xkIGNoYW5nZUFjY291bnQgTGF5ZXIKCQkJCQkJCQkJCQkJdmFycyA9IHsKCQkJ
CQkJCQkJCQkJCWVtYWlsOiBsaXN0WzBdCgkJCQkJCQkJCQkJCX07CgkJCQkJCQkJ
CQkJfQoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJZWxzZSBpZiggbWFpbHJ1LnBoQXV0
aEZvcm1FbmFibGVkICkgey8vTUFJTC0xNjY0MgoJCQkJCQkJCQkJCXZhcnMuZm9y
bVR5cGUgPSAicmVsb2dpbiI7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0KCQkJCQkJ
CQkJZWxzZSBpZiggbWFpbHJ1LnBoQXV0aEZvcm1FbmFibGVkICkgey8vTUFJTC0x
NjY0MgoJCQkJCQkJCQkJdmFycy5mb3JtVHlwZSA9ICJyZWxvZ2luIjsKCQkJCQkJ
CQkJfQoJCQkJCQkJCQlMYXllck1hbmFnZXIuc2hvdyhuYW1lLCB2YXJzKTsKCQkJ
CQkJCQkJZGVidWcubG9nKCdhY2NvdW50IE5PVCBFWElTVFMnKTsKCQkJCQkJCQl9
CgkJCQkJCQl9LmJpbmQodGhpcywgbmFtZSwgdmFycykpOwoJCQkJCQkJYXV0aFVz
ZXIoKTsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJCUxheWVyTWFuYWdlci5z
aG93KG5hbWUsIHZhcnMpOwoJCQkJCX0KCQkJCX0KCQkJfS5iaW5kKHRoaXMsIG5h
bWUsIHZhcnMpKTsKCQl9CgoJCWZ1bmN0aW9uIGNoZWNrQWN0aXZlQWNjb3VudCAo
cmVzcG9uc2UpIHsKCQkJdmFyIGRhdGEgPSByZXNwb25zZS5nZXREYXRhKCk7CgkJ
CXZhciBvcHRpb25zID0gcmVzcG9uc2UuZ2V0T3B0cygpOwoJCQl2YXIgdHlwZSA9
IG9wdGlvbnMucmVmLCBlbWFpbDsKCQkJaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNl
LmlzTm9BdXRoKCkpIHsKCQkJCWNoZWNrTGF5ZXIoJ25vQXV0aCcpOwoJCQl9IGVs
c2UgewoJCQkJaWYgKHR5cGUgPT0gJ2NoZWNrbmV3JykgewoJCQkJCWlmIChkYXRh
ICYmIGRhdGEudXNlcm5hbWUgJiYgZGF0YS51c2VyZG9tYWluKSB7CgkJCQkJCWVt
YWlsID0gZGF0YS51c2VybmFtZSArICdAJyArIGRhdGEudXNlcmRvbWFpbjsKCQkJ
CQl9CgkJCQl9IGVsc2UgewoJCQkJCWVtYWlsID0gZ2V0TWFpbEZyb21Db29raWUo
KTsKCQkJCX0KCQkJCWlmIChlbWFpbCAmJiBlbWFpbCAhPSBtYWlscnUudXNlcmVt
YWlsKSB7CgkJCQkJY2hlY2tMYXllcignY2hhbmdlQWNjb3VudCcsIHtlbWFpbDog
ZW1haWx9KTsKCQkJCX0KCQkJfQoJCX0KCgoJCXZhciBfcmVxID0ge30sIF9pc0Nv
bm4gPSB0cnVlOwoKCQlmdW5jdGlvbiBfc3RhcnQobyl7CgkJCW8ucGlkCQk9IGFq
cy51bmlxSWQoKTsKCQkJby5yZWYJCT0gX3JlbFBhdGgoby51cmwpOwoJCQlvLl9f
dHMJCT0gYWpzLm5vdygpOwoJCQlvLmxvYWRQYWdlCT0gby5sb2FkUGFnZSAmJiBt
YWlscnUuX2xvYWRQYWdlVXJsOwoKCQkJaWYoIG8uaXNVc2VyIHx8IG8ubG9hZGlu
ZyApewoJCQkJX3JlcVtvLnBpZF0gPSBhanMuc2xlZXAoZnVuY3Rpb24gKCl7CgkJ
CQkJX25vdGlmeUxvZyhvLCAnbm90aWZ5LmxvYWRpbmcnKTsKCQkJCQlpZiggby5s
b2FkaW5nICl7CgkJCQkJCW1haWxydS5Ob3RpZnkuYWRkKHR5cGVvZiBvLmxvYWRp
bmcgPT0gJ3N0cmluZycgPyBvLmxvYWRpbmcgOiAnbG9hZCcsIHsgZGVsYXk6IDAs
IGdyb3VwOiAnYWpheCcgfSk7CgkJCQkJfQoKCQkJCQlfcmVxW28ucGlkXSA9IGFq
cy5zbGVlcChmdW5jdGlvbiAoKXsKCQkJCQkJX3Bpbmcobyk7CgkJCQkJCV9ub3Rp
ZnlMb2cobywgJ25vdGlmeS5jb25uZWN0aW9uLnN0aWxsJyk7CgkJCQkJCWlmKCBv
LmxvYWRpbmcgKXsKCQkJCQkJCW1haWxydS5Ob3RpZnkuYWRkKCh0eXBlb2Ygby5s
b2FkaW5nID09ICdzdHJpbmcnID8gby5sb2FkaW5nIDogJ2xvYWQnKSArICcuc3Rp
bGwnLCB7IGRlbGF5OiAwLCBncm91cDogJ2FqYXgnIH0pOwoJCQkJCQl9CgoJCQkJ
CQlfcmVxW28ucGlkXSA9IGFqcy5zbGVlcChmdW5jdGlvbiAoKXsKCQkJCQkJCV9w
aW5nKG8pOwoJCQkJCQkJX3JlcVtvLnBpZF0gPSBhanMuc2xlZXAoZnVuY3Rpb24g
KCl7CgkJCQkJCQkJX25vdGlmeUxvZyhvLCAnbm90aWZ5LmNvbm5lY3Rpb24uc3Rp
bGwuZXJyb3InKTsKCQkJCQkJCQltYWlscnUuTm90aWZ5LmFkZCgnY29ubmVjdGlv
bi5zdGlsbC5lcnJvcicsIHsgZGVsYXk6IDAsIGdyb3VwOiAnYWpheCcgfSk7CgkJ
CQkJCQl9LCA1KjYwKjEwMDApOwoJCQkJCQl9LCA1KjEwMDApOwoJCQkJCX0sIDUq
MTAwMCk7CgkJCQl9LCAxKjEwMDApOwoJCQl9IGVsc2UgewoJCQkJX3JlcVtvLnBp
ZF0gPSBhanMuc2xlZXAoZnVuY3Rpb24gKCl7CgkJCQkJX3Bpbmcobyk7CgkJCQl9
LCA4KjEwMDApOwoJCQl9CgkJfQoKCgkJZnVuY3Rpb24gX3N0b3AobywgUil7CgkJ
CWFqcy5jbGVhclNsZWVwKF9yZXFbby5waWRdKTsKCQkJZGVsZXRlIF9yZXFbby5w
aWRdOwoKCQkJdmFyIHMgPSBSLmdldFN0YXR1cygpLCBkdCA9IGFqcy5ub3coKSAt
IG8uX190cywgX3JhZGFyOwoKCgkJCS8vIEFqYXggdGltaW5nCgkJCWlmKCBNYXRo
LnJhbmRvbSgpIDwgLjEgJiYgby5yZWYgJiYgL21lc3NhZ2VzP3xjb21wb3NlfG9z
ZWFyY2h8cmVhZG1zZ3xmaWxlc2VhcmNoLy50ZXN0KG8ucmVmKSApewoJCQkJbWFp
bHJ1LnJhZGFyKCdhamF4Jywgby5yZWYucmVwbGFjZSgvW15hLXpdKy9nLCAnLScp
Kyc9JytkdCk7CgkJCX0KCgoJCQlpZiggUi54aHJTdGF0dXMgPT0gMjAwICl7CgkJ
CQlpZiggfidlcnJvciBwYXJzZWVycm9yIHJlZGlyZWN0IHVua25vd24nLmluZGV4
T2YocykgKXsKCQkJCQlfcmFkYXIJPSAnMjAwXycgKyBzLnN1YnN0cigwLCA1KTsK
CQkJCX0KCQkJfQoJCQllbHNlIGlmKCBSLmhhc05ldCgpICl7CgkJCQlfcmFkYXIJ
PSBSLnhoclN0YXR1czsKCQkJfQoKCQkJaWYoIF9yYWRhciApewoKCQkJCW1haWxy
dS5yYWRhcignQWpheF9lcnJvcicsIF9yYWRhcisnPTEnLCAxKTsKCgkJCQkvLyBN
QUlMLTgyNDYKCQkJCXZhciBfeGhyID0gUi5nZXRYSFIoKSwgX29wdHMgPSBSLmdl
dE9wdHMoKTsKCQkJCXZhciBfbG9nID0gewoJCQkJCWxvZzogJ2FqYXhfeGhyU3Rh
dHVzXycgKyBfcmFkYXIsCgkJCQkJdXJsOiBfb3B0cy51cmwsCgkJCQkJZGF0YTog
SlNPTi5zdHJpbmdpZnkoX29wdHMuZGF0YSksCgkJCQkJZGF0YVR5cGU6IF9vcHRz
LmRhdGFUeXBlLAoJCQkJCXR5cGU6IF9vcHRzLnR5cGUsCgkJCQkJeHN0YXR1czog
X3hoci5zdGF0dXMsCgkJCQkJeHN0YXRlOiBfeGhyLnhzdGF0ZSwKCQkJCQllbWFp
bDogbWFpbHJ1LnVzZXJlbWFpbAoJCQkJfTsKCgkJCQlpZiAobWFpbHJ1Lmlwcykg
ewoJCQkJCV9sb2cuaXBzID0gbWFpbHJ1Lmlwcy5qb2luKCcsJyk7CgkJCQl9CgoJ
CQkJaWYgKF9yYWRhciA9PSA1MDMpIHsKCQkJCQlpZiAoTWF0aC5yYW5kKDEsIDEw
MCkgPT0gMSkgewoJCQkJCQlfbG9nLmFqYXhfeGhyU3RhdHVzXzUwM19ib2R5ID0g
X3hoci5yZXNwb25zZVRleHQ7CgkJCQkJfQoJCQkJfSBlbHNlIGlmIChfcmFkYXIg
PT0gJzIwMF9lcnJvcicpIHsKCQkJCQlpZiAoTWF0aC5yYW5kKDEsIDEwMCkgPT0g
MSkgewoJCQkJCQlfbG9nLmFqYXhfeGhyU3RhdHVzXzIwMF9lcnJvcl9ib2R5ID0g
X3hoci5yZXNwb25zZVRleHQ7CgkJCQkJfQoJCQkJfQoKCQkJCWlmIChfeGhyLmdl
dEFsbFJlc3BvbnNlSGVhZGVycykgewoJCQkJCV9sb2cuaGVhZGVycyA9IF94aHIu
Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CgkJCQl9CgoJCQkJbmV3IEltYWdlKCku
c3JjID0gJy8vZ3N0YXQuJyArIG1haWxydS5zdGF0aWNEb21haW5OYW1lICsgJy9n
c3RhdD91YT0xJmxvZ21lPScgKyBlbmNvZGVVUklDb21wb25lbnQoJC5wYXJhbShf
bG9nKSkgKyAnJnI9JyArIE1hdGgucmFuZG9tKCk7CgkJCX0KCgkJCWFqcy5sb2co
J1thamF4LmNvbXBsZXRlXSBlcnJvcjonLCBSLmlzRXJyb3IoKSwgJywgbmV0Oics
IFIuaGFzTmV0KCksICcsIGlzVXNlcjonLCBvLmlzVXNlciB8fCBvLmxvYWRpbmcp
OwoKCQkJaWYoIG8ubG9hZFBhZ2UgJiYgIVIuaXNPSygpICl7CgkJCQkkKHdpbmRv
dykudHJpZ2dlckhhbmRsZXIoJ2Vycm9ybG9hZHBhZ2UnLCBbby5sb2FkUGFnZV0p
OwoJCQl9CgoJCQlpZiggIVIuaXNFcnJvcigpICYmIFIuaGFzTmV0KCkgJiYgKG8u
aXNVc2VyIHx8IG8ubG9hZGluZyB8fCAhX2lzQ29ubikgKXsKCQkJCV9pc0Nvbm4g
PSB0cnVlOwoJCQkJbWFpbHJ1Lk5vdGlmeS5oaWRlKCdhamF4Jyk7CgkJCQlpZigg
IXN0b3JlLmRpc2FibGVkICl7CgkJCQkJdmFyIGRmID0gc3RvcmUuZ2V0KCdkaXNj
b25uZWN0Tm90aWZ5Jyk7CgkJCQkJaWYoIGRmID4gMCApIChuZXcgSW1hZ2UpLnNy
YyA9ICcvL3JzLicgKyBtYWlscnUuU2luZ2xlRG9tYWluTmFtZSArICcvZDc5ODE4
NyZyPScrYWpzLm5vdygpOwoJCQkJCXN0b3JlLnJlbW92ZSgnZGlzY29ubmVjdE5v
dGlmeScpOwoJCQkJfQoJCQl9IGVsc2UgaWYoIG8uaXNVc2VyIHx8IG8ubG9hZGlu
ZyApewoJCQkJaWYoICFSLmhhc05ldCgpIHx8IHMgPT0gJ3RpbWVvdXQnICl7CgkJ
CQkJbWFpbHJ1Lk5vdGlmeS5oaWRlKCdhamF4Jyk7CgkJCQkJX3Bpbmcobyk7CgoJ
CQkJfSBlbHNlIGlmKCBSLmlzRXJyb3IoKSAmJiAhby5oaWRlQXV0b0Vycm9ycyl7
CgkJCQkJX25vdGlmeUxvZyhvLCAnbm90aWZ5LmVycm9yJyk7CgkJCQkJbWFpbHJ1
Lk5vdGlmeS5hZGQoJ2Vycm9yJywgeyBkZWxheTogMTAsIGdyb3VwOiAnYWpheCcg
fSk7CgkJCQl9CgkJCX0KCgkJCS8vIE1BSUwtODY0NQoJCQlpZiggTWF0aC5yYW5k
b20oKSA8IC4wMSApewoJCQkJbWFpbHJ1LmdzdGF0KFsKCQkJCQkgICdBSkFYX1JF
UVVFU1QnCgkJCQkJLCBsb2NhdGlvbi5wcm90b2NvbC5yZXBsYWNlKCc6JywgJycp
CgkJCQkJLCBtYWlscnUucmVhbElQIHx8ICcwLjAuMC4wJwoJCQkJCSwgby5yZWYK
CQkJCQksIHMKCQkJCQksIGR0KydtcycKCQkJCV0uam9pbignLScpLCAndWE9MScp
OwoJCQl9CgoJCQkvLyBNQUlMLTQ3MDMKCQkJaWYgKFIuaXNPSygpICYmIC9zZW50
bXNnfGNvbXBvc2UvLnRlc3Qoby5yZWYpICYmIG8udXJsLmluZGV4T2YoJ2Z1bmNf
bmFtZT1zZW5kJykgIT09IC0xKSB7CgkJCQl2YXIgbG9nID0gewoJCQkJCWxvZzog
J3NlbnRtc2d0aW1lJywKCQkJCQl0aW1lOiBkdCwKCQkJCQllbWFpbDogbWFpbHJ1
LnVzZXJlbWFpbAoJCQkJfTsKCQkJCW5ldyBJbWFnZSgpLnNyYyA9ICcvL2dzdGF0
LicgKyBtYWlscnUuc3RhdGljRG9tYWluTmFtZSArICcvZ3N0YXQ/bG9nbWU9JyAr
IGVuY29kZVVSSUNvbXBvbmVudCgkLnBhcmFtKGxvZykpICsgJyZyPScgKyBNYXRo
LnJhbmRvbSgpOwoJCQl9CgkJfQoKCgkJZnVuY3Rpb24gX3Bpbmcobyl7CgkJCWlm
KCBvLmxvYWRpbmcgfHwgby5pc1VzZXIgKXsKCQkJCSQobmV3IEltYWdlKQoJCQkJ
CS5hdHRyKCdzcmMnLCAnLy9pbWcuJyArIG1haWxydS5zdGF0aWNEb21haW5OYW1l
ICsgJy8wLmdpZj8nK01hdGgucmFuZG9tKCkpCgkJCQkJLmJpbmQoJ2Vycm9yIGxv
YWQnLCBmdW5jdGlvbiAoZXZ0KXsKCQkJCQkJX2lzQ29ubiA9IGV2dC50eXBlID09
ICdsb2FkJzsKCQkJCQkJYWpzLmxvZygncGluZy5zdGF0dXM6JywgX2lzQ29ubiA/
ICdvaycgOiAnZmFpbCcpOwoKCQkJCQkJaWYoICFfaXNDb25uICl7CgkJCQkJCQlh
anMuY2xlYXJTbGVlcChvLnBpZCk7CgoJCQkJCQkJX25vdGlmeUxvZyhvLCAnbm90
aWZ5LmNvbm5lY3Rpb24uZXJyb3InKTsKCQkJCQkJCW1haWxydS5Ob3RpZnkuYWRk
KCdjb25uZWN0aW9uLmVycm9yJywgeyBkZWxheTogMCwgZ3JvdXA6ICdhamF4JyB9
KTsKCQkJCQkJCV9zdG9yZShvKTsKCQkJCQkJCWlmKCAhc3RvcmUuZGlzYWJsZWQg
KSBzdG9yZS5zZXQoJ2Rpc2Nvbm5lY3ROb3RpZnknLCAxKTsKCQkJCQkJfQoKCQkJ
CQkJJCh0aGlzKS51bmJpbmQoKTsKCQkJCQl9KQoJCQkJOwoJCQl9CgkJfQoKCgkJ
ZnVuY3Rpb24gX3N0b3JlKG8pewoJCQkvLyA8IGh0dHBzOi8vamlyYS5tYWlsLnJ1
L2Jyb3dzZS9NQUlMLTUzMzcKCQkJaWYoICFzdG9yZS5kaXNhYmxlZCAmJiBvLnN0
b3JlTWUgJiYgKG8ubG9hZGluZyB8fCBvLmlzVXNlcikgJiYgIW8uX19zdG9yZSAp
ewoJCQkJdmFyIGtleSA9IG8uc3RvcmVNZSsnX2ZhaWxfY250JywgY250ID0gc3Rv
cmUuZ2V0KGtleSl8MDsKCQkJCW8uX19zdG9yZSA9IHRydWU7CgkJCQlzdG9yZS5z
ZXQoa2V5LCArK2NudCk7CgkJCQlhanMubG9nKCdpbmMuJytrZXkrJzonLCBjbnQp
OwoJCQl9CgkJCS8vIGh0dHBzOi8vamlyYS5tYWlsLnJ1L2Jyb3dzZS9NQUlMLTUz
MzcgPgoJCX0KCgoJCWZ1bmN0aW9uIF9ub3RpZnlMb2cobywgbmFtZSl7CgkJCXZh
ciB0ID0gbmV3IERhdGU7CgkJCXQuc2V0VGltZShhanMubm93KCkgLSBvLl9fdHMp
OwoJCQlfbG9nKG5hbWUrJzogJyt0LmZvcm1hdCgnSTpTLicpK3QuZ2V0TWlsbGlz
ZWNvbmRzKCkrJywgJytvLnBpZCsnLCAnK28udXJsKTsKCQl9CgoKCQlqc0NvcmUu
cmVhZHkoZnVuY3Rpb24gKCkgewoKCQkJaWYgKG1haWxydS5PbGRNdWx0aUF1dGhM
YXllckxvZ2ljKSB7CgkJCQkkKHdpbmRvdykuYmluZCgndmlzaWJpbGl0eWNoYW5n
ZScsIGZ1bmN0aW9uIChldnQsIGhpZGRlbikgewoJCQkJCWlmICghaGlkZGVuKSB7
CgkJCQkJCWNoZWNrTGF5ZXIoJ25vQXV0aCcpOwoJCQkJCX0KCQkJCX0pOwoJCQl9
CgkJCS8vIDwgaHR0cHM6Ly9qaXJhLm1haWwucnUvYnJvd3NlL01BSUwtOTQ3NAoJ
CQllbHNlIGlmIChtYWlscnUubmV3TXVsdGlBdXRoTG9naWMgJiYgd2luZG93Ll9f
UEgpIHsKCQkJCV9fUEgub24oJ2F1dGhMb3N0JywgZnVuY3Rpb24oLyplLCBuZXh0
Ki8pewoJCQkJCWNoZWNrTGF5ZXIoJ25vQXV0aCcsIHsKCQkJCQkJY2xvc2FibGU6
IGZhbHNlLAoJCQkJCQlsb2dpbjogbWFpbHJ1LnVzZXJuYW1lLAoJCQkJCQlkb21h
aW46IG1haWxydS51c2VyZG9tYWluLAoJCQkJCQlmb2N1czogJ3Bhc3N3b3JkJwoJ
CQkJCX0pOwoJCQkJfSk7CgoJCQkJX19QSC5vbignbG9naW5SZXF1ZXN0JywgZnVu
Y3Rpb24oLyplLCBuZXh0Ki8pewoJCQkJCUxheWVyTWFuYWdlci5zaG93KCdub0F1
dGgnLCB7CgkJCQkJCWNoYW5nZUFjY291bnQ6IHRydWUKCQkJCQkJLCBjaGVja0xh
eWVyTWFpbkRpdjogdHJ1ZQoJCQkJCX0pOwoJCQkJfSk7CgoJCQkJX19QSC5vbign
YXV0aENoYW5nZScsIGZ1bmN0aW9uKCl7CgkJCQkJbG9jYXRpb24uaHJlZiA9ICcv
bWVzc2FnZXMvaW5ib3gnOwoJCQkJfSk7CgkJCX0KCQkJLy8gaHR0cHM6Ly9qaXJh
Lm1haWwucnUvYnJvd3NlL01BSUwtOTQ3NCA+CgkJfSk7CgoJCS8vIGFsaWFzCgkJ
d2luZG93LkFqYXgJPSBtYWlscnUuQWpheDsKCX0pKCk7CgoJanNMb2FkZXIubG9h
ZGVkKCd7bWFpbHJ1fW1haWxydS5BamF4JywgMSk7CgovLyBkYXRhL3J1L2ltYWdl
cy9qcy9ydS9tYWlscnUuQWpheC5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pz
L3J1L3V0aWxzL21haWxydS5VdGlscy5GaWxlU2VhcmNoLmpzIHN0YXJ0CgoKKGZ1
bmN0aW9uICgpewoJCS8qKgoJCSAqIEBjbGFzcyAgICBtYWlscnUuVXRpbHMuRmls
ZVNlYXJjaAoJCSAqLwoJCXZhciBVdGlscyA9IHsKCQkJZ2V0VGltZTogZnVuY3Rp
b24gKGZpbGUpewoJCQkJcmV0dXJuCW1haWxydS5GaWxlc1NlYXJjaERhdGEudmVy
c2lvbiA/IGZpbGUuRGF0ZVNob3J0IDogRGF0ZS5wYXJzZShmaWxlLnRpbWUgKiAx
MDAwKS5mb3JtYXQoJ0g6SScpCgkJCX0sCgoKCQkJZ2V0U3ViamVjdDogZnVuY3Rp
b24gKGZpbGUpewoJCQkJcmV0dXJuCWZpbGUuc3ViamVjdCB8fCAnPCcrIExhbmcu
Z2V0KCdtZXNzYWdlLmVtYWlsLnVudGl0bGVkJykgKyc+JzsKCQkJfSwKCgoJCQlj
YW5QcmV2aWV3OiBmdW5jdGlvbiAoZmlsZSl7CgkJCQlyZXR1cm4JZmlsZS5jb250
ZW50X3R5cGVfaWQgPT0gMSAmJiAhL150aWZmPyQvaS50ZXN0KHRoaXMuZ2V0Rmls
ZUV4dGVudGlvbihmaWxlKSk7CgkJCX0sCgoJCQlpc0dyYXBoaWNQcmV2aWV3OiBm
dW5jdGlvbiAoZmlsZSkgewoJCQkJdmFyIGV4dCA9IHRoaXMuZ2V0RmlsZUV4dGVu
dGlvbihmaWxlKTsKCQkJCXJldHVybiAobWFpbHJ1WydJc01SVkdyYXBoaWNQcmV2
aWV3RW5hYmxlZCddICYmIChleHQgPT0gInBzZCIgfHwgZXh0ID09ICJ0Z2EiIHx8
IGV4dCA9PSAiYWkiIHx8IGV4dCA9PSAidGlmIiB8fCBleHQgPT0gInRpZmYiIHx8
IGV4dCA9PSAiZXBzIikpOwoJCQl9LAoKCQkJaXNPZmZpY2VQcmV2aWV3OiBmdW5j
dGlvbihmaWxlKSB7CgkJCQl2YXIgZXh0ID0gdGhpcy5nZXRGaWxlRXh0ZW50aW9u
KGZpbGUpOwoKCQkJCXJldHVybiAoCgkJCQkJICAgKG1haWxydVsnSXNDb3JwVXNl
ciddKQoJCQkJCSYmIChtYWlscnVbJ0lzTVJWTVNEb2NQcmV2aWV3RW5hYmxlZCdd
IHx8IG1haWxydVsnSXNNUlZNU1BwdFByZXZpZXdFbmFibGVkJ10gfHwgbWFpbHJ1
WydJc01SVk1TRXhjZWxQcmV2aWV3RW5hYmxlZCddKQoJCQkJCSYmIChleHQgPT0g
J2RvYycgfHwgZXh0ID09ICdkb2N4JyB8fCBleHQgPT0gJ3hscycgfHwgZXh0ID09
ICd4bHN4JyB8fCBleHQgPT0gJ3BwdCcgfHwgZXh0ID09ICdwcHR4JykKCQkJCSk7
CgkJCX0sCgoJCQlnZXRUaHVtYm5haWxTcmM6IGZ1bmN0aW9uIChmaWxlKXsKCQkJ
CXZhciB1cmwgPSAnJzsKCgkJCQlpZiAodGhpcy5pc0dyYXBoaWNQcmV2aWV3KGZp
bGUpIHx8IHRoaXMuaXNPZmZpY2VQcmV2aWV3KGZpbGUpKSB7CgoJCQkJCXVybCA9
ICcvL2RvY3MuJyArIChtYWlscnUuU2luZ2xlRG9tYWluTmFtZSB8fCAnbWFpbC5y
dScpICsgJy9wcmV2aWV3LzE2MHgxMjAvPycgKyBhanMudG9RdWVyeSh7CgkJCQkJ
CXNyYzogdGhpcy5nZXREb3dubG9hZFVybChmaWxlLklkLCBmaWxlLm5hbWUpCgkJ
CQkJfSk7CgoJCQkJfSBlbHNlIGlmICh0aGlzLmNhblByZXZpZXcoZmlsZSkpIHsK
CgkJCQkJdmFyIHBhcmFtcyA9IHsKCQkJCQkJICBpZDoJCWZpbGUuSWQKCQkJCQkJ
LCBmeDoJCTE2MAoJCQkJCQksIGZ5OgkJMTIwCgkJCQkJCSwgbW9kZToJCSdhdHRh
Y2htZW50JwoJCQkJCQksIGNoYW5uZWw6CScnCgkJCQkJCSwgcHJldmlldzoJMQoJ
CQkJCX07CgoJCQkJCWlmIChtYWlscnUuZXhpZikgewoJCQkJCQlwYXJhbXMuZXhp
ZiA9IDE7CgkJCQkJfQoKCQkJCQl1cmwgPSAnLy9hcGYuJysgKG1haWxydS5TaW5n
bGVEb21haW5OYW1lIHx8ICdtYWlsLnJ1JykgKycvY2dpLWJpbi9yZWFkbXNnLycr
IGVuY29kZVVSSUNvbXBvbmVudChmaWxlLm5hbWUpICsnPycrICQucGFyYW0ocGFy
YW1zKTsKCQkJCX0KCgkJCQlyZXR1cm4JdXJsOwoJCQl9LAoKCgkJCWdldEZpbGVF
eHRlbnRpb246IGZ1bmN0aW9uKGZpbGUpIHsKCQkJCXJldHVybiAoZmlsZS5uYW1l
IHx8ICcnKS5yZXBsYWNlKC9eKC4qKVwuLywgJycpLnRvTG93ZXJDYXNlKCk7CgkJ
CX0sCgoKCQkJZ2V0UHJldmlld0hyZWY6IGZ1bmN0aW9uIChmaWxlKXsKCQkJCXZh
ciByZXN1bHQgPSAnJywgcGFyYW1zOwoKCQkJCS8qKiBAbmFtZXNwYWNlIG1haWxy
dS5OZXdBdHRhY2hWaWV3ZXJQb3B1cCAgLS0gINC+0YLQutGA0YvRgtGMINCyINC/
0L7Qv9Cw0L/QtSAqLwoJCQkJaWYoIG1haWxydS5OZXdBdHRhY2hWaWV3ZXIgJiYg
bWFpbHJ1Lk5ld0F0dGFjaFZpZXdlclBvcHVwICl7CgkJCQkJaWYoIGZpbGUgKXsK
CQkJCQkJaWYoIGZpbGUuSWQgKXsKCQkJCQkJCXBhcmFtcyA9IHsKCQkJCQkJCQkg
IGlkOglmaWxlLklkLnJlcGxhY2UoLztcZCs7XGQrJC8sICcnKQoJCQkJCQkJCSwg
X2F2OglmaWxlLklkCgkJCQkJCQkJLCBmaWxlOglmaWxlLm5hbWUKCQkJCQkJCX07
CgkJCQkJCQlyZXN1bHQgPSAnL2F0dGFjaGVzLXZpZXdlci8/JyArICQucGFyYW0o
cGFyYW1zKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgewoJCQkJCXZh
ciBleHQgPSB0aGlzLmdldEZpbGVFeHRlbnRpb24oZmlsZSksIHR5cGUgPSAnJywg
bW9kZSA9ICcnOwoKCQkJCQlpZiggZXh0ID09ICdkb2MnIHx8IGV4dCA9PSAnZG9j
eCcgfHwgZXh0ID09ICd3cGQnIHx8IGV4dCA9PSAnd3BzJyB8fCBleHQgPT0gJ3J0
ZicgKXsKCQkJCQkJdHlwZSA9ICdkb2MnOwoJCQkJCX0KCQkJCQllbHNlIGlmKCBl
eHQgPT0gJ3hscycgfHwgZXh0ID09ICd4bHN4JyApewoJCQkJCQl0eXBlID0gJ2V4
Y2VsJzsKCQkJCQl9CgkJCQkJZWxzZSBpZiggZXh0ID09ICdwcHQnIHx8IGV4dCA9
PSAncHB0eCcgfHwgZXh0ID09ICdwcHMnICl7CgkJCQkJCXR5cGUgPSAncHAnOwoJ
CQkJCX0KCgkJCQkJaWYoIHR5cGUgPT0gJ2RvYycgfHwgdHlwZSA9PSAnZXhjZWwn
IHx8IHR5cGUgPT0gJ3BwJyApewoJCQkJCQltb2RlID0gKG1haWxydS5Jc015Q29t
KSA/ICdtc28nIDogJ21zdic7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQltb2Rl
ID0gJ2F0dGFjaG1lbnQnOwoJCQkJCX0KCgkJCQkJaWYoIG1vZGUgKXsKCQkJCQkJ
cGFyYW1zID0gewoJCQkJCQkJICBpZDoJCWZpbGUuSWQKCQkJCQkJCSwgdHlwZToJ
CXR5cGUKCQkJCQkJCSwgZmlsZToJCWZpbGUubmFtZQoJCQkJCQkJLCBtb2RlOgkJ
bW9kZQoJCQkJCQkJLCBjaGFubmVsOgknJwoJCQkJCQl9OwoJCQkJCQlyZXN1bHQg
PSAnL2NnaS1iaW4vZ2V0YXR0YWNoPycgKyAkLnBhcmFtKHBhcmFtcyk7CgkJCQkJ
fQoJCQkJfQoKCQkJCXJldHVybiByZXN1bHQ7CgkJCX0sCgoKCQkJZ2V0RmlsZXNT
aXplOiBmdW5jdGlvbiAoZmlsZXMpewoJCQkJdmFyIHNpemUgPSAwOwoJCQkJYWpz
LmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpdGVtKXsgc2l6ZSArPSBpdGVtLnNpemU7
IH0pOwoJCQkJcmV0dXJuCXNpemU7CgkJCX0sCgoKCQkJZ2V0RG93bmxvYWRVcmw6
IGZ1bmN0aW9uIChpZCwgbmFtZSl7CgkJCQlyZXR1cm4gbG9jYXRpb24ucHJvdG9j
b2wgKyAnLy8nICsgbWFpbHJ1Lk1haW5NYWlsSG9zdCArICcvY2dpLWJpbi9nZXRh
dHRhY2g/JyArICQucGFyYW0oewoJCQkJCSAgaWQ6CQlpZAoJCQkJCSwgZmlsZToJ
CW5hbWUKCQkJCQksIG1vZGU6CQknYXR0YWNobWVudCcKCQkJCQksIGNoYW5uZWw6
CScnCgkJCQkJLCBub3R5cGU6CTEKCQkJCX0pOwoJCQl9LAoKCgkJCWRvd25sb2Fk
OiBmdW5jdGlvbiAoZmlsZXMpewoJCQkJLyoqIEBuYW1lc3BhY2UgbWFpbHJ1LkZp
bGVzU2VhcmNoRGF0YS5hdHRhY2hfaG9zdCAqLwoJCQkJaWYgKGZpbGVzLmxlbmd0
aCkgewoJCQkJCXZhciBzaXplID0gdGhpcy5nZXRGaWxlc1NpemUoZmlsZXMpOwoK
CQkJCQlpZiggc2l6ZSA+IG1haWxydVsnTWF4QXR0YWNobWVudFNpemUnXSApewoJ
CQkJCQl2YXIgZXJyb3IgPSBMYW5nLmdldCgnRmlsZVNlYXJjaERvd25sb2FkU2l6
ZUxpbWl0Jyk7CgkJCQkJCW1haWxydS5Ob3RpZnkuYWRkKCdlcnJvcicsIHsgdGV4
dDogZXJyb3IgfSk7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQl2YXIgcGFyYW1z
ID0gewoJCQkJCQkJICBwYXJ0aWRzOglhanMubWFwKGZpbGVzLCBmdW5jdGlvbiAo
ZmlsZSl7IHJldHVybiBmaWxlLmlkIH0pLmpvaW4oJ18nKQoJCQkJCQkJLCBtb2Rl
OgkJJ2F0dGFjaG1lbnQnCgkJCQkJCQksIGZuYW1lOgknYXR0YWNobWVudHNfJyAr
IChuZXcgRGF0ZSkuZm9ybWF0KCdELU0tWV9ILUktUycpCgkJCQkJCX07CgkJCQkJ
CXZhciB1cmwgPSAnLy8nICsgbWFpbHJ1LkZpbGVzU2VhcmNoRGF0YS5hdHRhY2hf
aG9zdCArICcvY2dpLWJpbi9nZXRhdHRhY2htZW50PycgKyAkLnBhcmFtKHBhcmFt
cyk7CgkJCQkJCXdpbmRvdy5vcGVuKHVybCk7CgkJCQkJfQoJCQkJfQoJCQl9LAoK
CgkJCWZvcndhcmQ6IGZ1bmN0aW9uIChmaWxlcyl7CgkJCQkvKiogQG5hbWVzcGFj
ZSBtYWlscnUudjIgKi8KCQkJCWlmIChmaWxlcy5sZW5ndGgpIHsKCQkJCQl2YXIg
aWRzID0gYWpzLm1hcChmaWxlcywgZnVuY3Rpb24gKGZpbGUpeyByZXR1cm4gZmls
ZS5pZCB9KTsKCQkJCQl2YXIgdXJsID0gbWFpbHJ1LmdldFBhZ2VVUkwoJ2NvbXBv
c2UnLCB7IGlkOiBpZHMsIG1vZGU6ICdmb3J3YXJkJyB9KTsKCQkJCQl2YXIgc2l6
ZSA9IHRoaXMuZ2V0RmlsZXNTaXplKGZpbGVzKTsKCQkJCQlpZiggc2l6ZSA+IG1h
aWxydVsnTWF4QXR0YWNobWVudFNpemUnXSApewoJCQkJCQl2YXIgZXJyb3IgPSBM
YW5nLmdldCgnRmlsZVNlYXJjaEZvcndhcmRTaXplTGltaXQnKTsKCQkJCQkJbWFp
bHJ1Lk5vdGlmeS5hZGQoJ2Vycm9yJywgeyB0ZXh0OiBlcnJvciB9KTsKCQkJCQl9
CgkJCQkJZWxzZSBpZiggbWFpbHJ1LnYyICl7CgkJCQkJCWpzSGlzdG9yeS5zZXQo
dXJsKQoJCQkJCX0KCQkJCX0KCQkJfSwKCgoJCQlvcGVuVmlld2VyOiBmdW5jdGlv
biAoZmlsZUlkKXsKCQkJCXZhcgoJCQkJCXVybCA9ICcvYXR0YWNoZXMtdmlld2Vy
Lz8nICsgJC5wYXJhbSh7CgkJCQkJCSAgaWQ6IGZpbGVJZC5yZXBsYWNlKC87XGQr
O1xkKyQvLCAnJykKCQkJCQkJLCBfYXY6IGZpbGVJZAoJCQkJCQksICd4LWVtYWls
JzogbWFpbHJ1LnVzZXJlbWFpbAoJCQkJCX0pCgkJCQk7CgoJCQkJdHJ5IHsKCQkJ
CQl2YXIgdyA9IG9wZW4odXJsKTsKCQkJCQl3LmZvY3VzKCk7CgkJCQl9CgkJCQlj
YXRjaChlKXt9CgkJCX0KCQl9OwoKCgkJLy8gQGV4cG9ydAoJCW1haWxydS5VdGls
cy5GaWxlU2VhcmNoID0gVXRpbHM7Cgl9KSgpOwoKCWpzTG9hZGVyLmxvYWRlZCgn
e21haWxydS51dGlsc31tYWlscnUuVXRpbHMuRmlsZVNlYXJjaCcsIDEpOwoKLy8g
ZGF0YS9ydS9pbWFnZXMvanMvcnUvdXRpbHMvbWFpbHJ1LlV0aWxzLkZpbGVTZWFy
Y2guanMgZW5kCgpqc0NsYXNzCgkJLmNyZWF0ZSgnbWFpbHJ1Lk1lc3NhZ2VzJykK
CQkuc3RhdGljcyh7CgoJCWhhc2g6CXt9LAoJCXBhZ2U6CXt9LAoJCWRhdGE6CXt9
LAoJCXJlZHJhdzoJe30sCgkJb25QYWdlOgl7fSwKCQlmb2xkZXI6IHt9LAoJCXJh
ZGFyOgljcmVhdGVSYWRhcignbWFpbHJ1X01lc3NhZ2VzJyksCgkJX3NlYXJjaDp7
fSwKCQlfZmlsZVNlYXJjaDp7fSwKCgkvLyBAcHJpdmF0ZQoJCV9jbGVhbk1lbW9y
eTogZnVuY3Rpb24gKCkKCQl7CgkJCWlmKCBtYWlscnUuaXNNc2dMaXN0ICYmIDAg
KQoJCQl7CgkJCQl2YXIgbUlkLCBmSWQsIGlkczsKCQkJCWZvciggbUlkIGluIHRo
aXMuZGF0YSApCgkJCQl7CgkJCQkJZklkCT0gdGhpcy5kYXRhW21JZF0uRm9sZGVy
SWQ7CgkJCQkJaWRzCT0gdGhpcy5vblBhZ2VbZklkXTsKCgkJCQkJaWYoIChpZHMg
PT09IHVuZGVmKSB8fCBBcnJheS5pbmRleE9mKGlkcywgbUlkKSA9PSAtMSApCgkJ
CQkJewoJCQkJCQkkKCcjTVNHJyttSWQpLnJlbW92ZSgpOwoJCQkJCQlkZWxldGUJ
dGhpcy5kYXRhW21JZF07CgkJCQkJfQoJCQkJfQoJCQl9CgkJfSwKCgoJLy8gQHB1
YmxpYwoJCXNldDogZnVuY3Rpb24gKGZJZCwgTGlzdCwgaGFzaCwgZm9yY2UsIGZp
ZWxkcyl7CgkJCXZhciBvblBhZ2UJPSAodGhpcy5mb2xkZXJbZklkXSB8fCBbXSku
bGVuZ3RoOwoKCQkJaWYoICFmb3JjZSApewoJCQkJaWYoIG9uUGFnZSAhPSBMaXN0
Lmxlbmd0aCApewoJCQkJCWZvcmNlID0gdHJ1ZTsKCQkJCX0KCQkJCWVsc2UgewoJ
CQkJCW9uUGFnZSA9IHRoaXMub25QYWdlW2ZJZF07CgkJCQkJZm9yKCB2YXIgaSA9
IDAsIG4gPSBMaXN0Lmxlbmd0aCwgTTsgaSA8IG47IGkrKyApewoJCQkJCQlNCT0g
dGhpcy5nZXQob25QYWdlW2ldKTsKCQkJCQkJaWYoIE0gPT09IHVuZGVmIHx8IExp
c3RbaV0uSWQgIT0gTS5JZCB8fCBMaXN0W2ldLkZvbGRlcklkICE9IE0uRm9sZGVy
SWQgKXsKCQkJCQkJCWZvcmNlCT0gdHJ1ZTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9
CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQl0aGlzLmhhc2hbZklkXQk9IGhhc2g7CgkJ
CXRoaXMucGFnZVtmSWRdCT0gTWF0aC5tYXgocGFyc2VJbnQoR0VULnBhZ2UgfHwg
MSksIDEpOwoJCQl0aGlzLmZvbGRlcltmSWRdID0gW107CgkJCXRoaXMub25QYWdl
W2ZJZF0gPSBbXTsgLy8gaWQgbWVzc2FnZSBvbiBwYWdlIGZvciBnYXJiYWdlIGNv
bGxlY3RvcgoKCgkJCUFycmF5LmZvckVhY2goTGlzdCwgZnVuY3Rpb24gKFgsIGkp
ewoJCQkJdGhpcy5mb2xkZXJbZklkXVtpXSA9IFggPSB0aGlzLnVwZChYLklkLCBY
LCBudWxsLCBmaWVsZHMpOwoJCQkJdGhpcy5vblBhZ2VbZklkXVtpXQk9IFguSWQ7
CgoJCQkJZGVsZXRlCVguX3RjcmM7Ci8vCQkJCWlmKCBHRVQuaWQgPT0gWC5JZCAp
IG1haWxydS5FdmVudHMuZmlyZSgndXBkYXRlLm1lc3NhZ2UnLCBbWC5JZCwgWCwg
R0VUXSk7CgkJCX0sIHRoaXMpOwoKCi8vCQkJVGltZW91dC5zZXQodGhpcy5jbGFz
c1VuaXFJZCsnY2xlYW5NZW1vcnknLCAkRFModGhpcywgJ19jbGVhbk1lbW9yeScp
LCAxMDAwKTsKCgkJCWlmKCBmb3JjZSAmJiAoZm9yY2UgIT09IDEpICkgLy8gMSAt
LSBvbmx5U2V0CgkJCXsKCQkJCW1haWxydS5FdmVudHMuZmlyZSgndXBkYXRlLm1l
c3NhZ2VzJywgdGhpcy5mb2xkZXJbZklkXSwgeyBGT0xERVJfSUQ6IGZJZCB9KTsK
CQkJCXJldHVybgl0cnVlOwoJCQl9CgoJCQlyZXR1cm4JZmFsc2U7CgkJfSwKCgkJ
c2V0RmlsZXNTZWFyY2g6IGZ1bmN0aW9uIChmSWQsIExpc3QsIGhhc2gsIGZvcmNl
KSB7CgkJCXRoaXMuZm9sZGVyW2ZJZF0gPSBbXTsKCQkJdGhpcy5oYXNoW2ZJZF0J
PSBoYXNoOwoJCQlBcnJheS5mb3JFYWNoKExpc3QsIGZ1bmN0aW9uIChYLCBpKSB7
CgkJCQl0aGlzLmZvbGRlcltmSWRdW2ldID0gdGhpcy51cGQoWC5JZCwgWCk7CgkJ
CX0sIHRoaXMpOwoJCQltYWlscnUuRXZlbnRzLmZpcmUoJ3VwZGF0ZS5tZXNzYWdl
cycsIHRoaXMuZm9sZGVyW2ZJZF0sIHsgRk9MREVSX0lEOiBmSWQgfSk7CgkJfSwK
CgkJZ2V0QnlGb2xkZXI6IGZ1bmN0aW9uIChpZCwgcGFnZSl7CgkJCWlmKCAhKGlk
IGluIHRoaXMuZm9sZGVyKSApIHRoaXMuZm9sZGVyW2lkXSA9IFtdOwoJCQlpZigg
cGFnZSAmJiBwYWdlICE9IHRoaXMucGFnZVtpZF0gKSByZXR1cm4gW107CgkJCXJl
dHVybglbXS5jb25jYXQodGhpcy5mb2xkZXJbaWRdKTsKCQl9LAoKCgkJY2xlYXJG
b2xkZXJDYWNoZTogZnVuY3Rpb24gKGlkKXsKCQkJZGVsZXRlIHRoaXMucGFnZVtp
ZF07CgkJCWRlbGV0ZSB0aGlzLmZvbGRlcltpZF07CgkJfSwKCgkJZ2V0OiBmdW5j
dGlvbiAoaWQsIGRlZikKCQl7CgkJCWlmKCBpZCAmJiAodHlwZW9mIGlkICE9PSAn
c3RyaW5nJykgKQoJCQl7CgkJCQl2YXIgbW9kZWxzID0gQXJyYXkubWFwKGlkLCBm
dW5jdGlvbiAoWCl7IHJldHVybiB0aGlzLmRhdGFbWF07IH0sIHRoaXMpOwoJCQkJ
cmV0dXJuCUFycmF5LmZpbHRlcihtb2RlbHMsIGZ1bmN0aW9uIChYKXsgcmV0dXJu
IChYICYmIFguSWQpOyB9KTsKCQkJfQoJCQlyZXR1cm4JdGhpcy5kYXRhW2lkXSB8
fCBkZWY7CgkJfSwKCgkJZ2V0U2FmZTogZnVuY3Rpb24gKGlkKXsKCQkJcmV0dXJu
ICB0aGlzLmdldChpZCwgeyBJZDogaWQgfSk7CgkJfSwKCgkJdXBkOiBmdW5jdGlv
biAoaWQsIGRhdGEsIHNhZmUsIGZpZWxkcyl7CgkJCXZhciBNID0gdGhpcy5nZXQo
aWQpLCByYWRhciA9IE1hdGgucmFuZG9tKCkgPCAuMiwgZXh0cmFfZGF0YSA9IHt9
OwoKCQkJaWYoIGRhdGEuUHJldklkID09PSAiIiAmJiByYWRhciApIG1haWxydS5y
YWRhcignbXNnZmFpbCcsICdQcmV2SWRfZW1wdHk9MScpOwoJCQllbHNlIGlmKCBk
YXRhLlByZXZJZCA9PT0gdm9pZCAwICYmIHJhZGFyICkgbWFpbHJ1LnJhZGFyKCdt
c2dmYWlsJywgJ1ByZXZJZF91bmRlZj0xJyk7CgoJCQlpZiggZGF0YS5OZXh0SWQg
PT09ICIiICYmIHJhZGFyICkgbWFpbHJ1LnJhZGFyKCdtc2dmYWlsJywgJ05leHRJ
ZF9lbXB0eT0xJyk7CgkJCWVsc2UgaWYoIGRhdGEuTmV4dElkID09PSB2b2lkIDAg
JiYgcmFkYXIgKSBtYWlscnUucmFkYXIoJ21zZ2ZhaWwnLCAnTmV4dElkX3VuZGVm
PTEnKTsKCgkJCWlmIChNKSB7CgkJCQkvLyBNQUlMLTE1Mzg5CgkJCQlpZiAoZmll
bGRzKSB7CgkJCQkJQXJyYXkuZm9yRWFjaChmaWVsZHMsIGZ1bmN0aW9uIChuYW1l
KSB7CgkJCQkJCWV4dHJhX2RhdGFbbmFtZV0gPSBkYXRhW25hbWVdOwoJCQkJCX0p
OwoJCQkJCWRhdGEgPSBleHRyYV9kYXRhOwoJCQkJfSBlbHNlIGlmIChNLl9sb2Fk
X2J5X21lc3NhZ2UpIHsKCQkJCQl2YXIgZmllbGRzX3RvX3VwZGF0ZSA9IFsnRmxh
Z2dlZCcsICdGb3J3YXJkJywgJ1JlcGx5JywgJ1VucmVhZCcsICdOZXh0SWQnLCAn
UHJldklkJ107CgkJCQkJT2JqZWN0LmZvckVhY2goZGF0YSwgZnVuY3Rpb24gKHZh
bHVlLCBuYW1lKSB7CgkJCQkJCWlmIChBcnJheS5pbmRleE9mKGZpZWxkc190b191
cGRhdGUsIG5hbWUpICE9PSAtMSkgewoJCQkJCQkJZXh0cmFfZGF0YVtuYW1lXSA9
IHZhbHVlOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQkJZGF0YSA9IGV4dHJhX2RhdGE7
CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlNID0gbmV3IG1haWxydS5NZXNzYWdlKHsg
SWQ6IGlkIH0sIHsgc2lsZW50OiB0cnVlIH0pOwoJCQl9CgoJCQl0aGlzLmRhdGFb
aWRdID0gTTsKCgkJCU0uc2V0KGRhdGEsIGZhbHNlLCBzYWZlKTsKCgkJCXJldHVy
bglNOwoJCX0sCgoKCQlnZXRIYXNoOiBmdW5jdGlvbiAoZklkKXsKCQkJcmV0dXJu
CXRoaXMuaGFzaFtmSWRdOwoJCX0sCgoKCQlsb2FkOiBmdW5jdGlvbiAocGFyYW1z
LCBwcmVsb2FkLCByZWFkKXsKCQkJLy8gQHRvZG86IFJlZmFjdG9yaW5nIHRoaXMg
bWV0aG9kCgoJCQlpZiggIShwYXJhbXMgJiYgcGFyYW1zLmlkKSApIHJldHVybjsK
CQkJaWYoIHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnICkgcGFyYW1zID0geyBp
ZDogcGFyYW1zIH07CgoJCQl2YXIgTXNnID0gdGhpcy5nZXQocGFyYW1zLmlkKSB8
fCBtYWlscnUuTWVzc2FnZS5FbXB0eTsKCQkJdmFyIGtleSA9IHBhcmFtcy5idWxr
X3Nob3dfaW1hZ2VzKycnOwoJCQl2YXIgZG9uZUZuID0gYWpzLkY7CgoJCQlpZigg
JC5pc0Z1bmN0aW9uKHByZWxvYWQpICl7CgkJCQlkb25lRm4gPSBwcmVsb2FkOwoJ
CQkJcHJlbG9hZCA9IHZvaWQgMDsKCQkJCWlmKCBNc2cuX2xvYWRlZCApewoJCQkJ
CWRvbmVGbihudWxsLCBNc2cpOwoJCQkJfQoJCQl9CgoKCQkJLyoKCQkJaWYoIE1z
Zy50aHJlYWQgJiYgIW1haWxydS5UaHJlYWRzLmdldChNc2cudGhyZWFkKSApewoJ
CQkJbWFpbHJ1LlRocmVhZHMuZmluZCh7IGlkOiBNc2cudGhyZWFkIH0sIGZ1bmN0
aW9uICgpewoJCQkJCW1haWxydS5NZXNzYWdlcy5sb2FkKHBhcmFtcywgcHJlbG9h
ZCwgcmVhZCk7CgkJCQl9KTsKCQkJCXJldHVybjsKCQkJfQoJCQkqLwoKCQkJaWYo
IHBhcmFtcy5mb3JjZSB8fCAoTXNnLl9rZXkgIT0ga2V5KSApewoJCQkJaWYoIE1z
Zy5fbG9hZGVkICkgcHJlbG9hZCA9IDA7CgkJCQlNc2cuX2tleQk9IGtleTsKCQkJ
CU1zZy5fY3JjCT0gbnVsbDsKCQkJCU1zZy5fbG9hZGVkCT0gMDsKCQkJfQoKCgkJ
CWlmKCAhKE1zZy5fbG9hZGluZyB8fCBNc2cuX2xvYWRlZCkgfHwgKCFwcmVsb2Fk
ICYmIChwcmVsb2FkICE9PSB2b2lkIDApKSApewoJCQkJbWFpbHJ1LmxvZygnbWVz
c2FnZS5sb2FkJywgewoJCQkJCWlkOiBNc2cuSWQsCgkJCQkJZm9yY2U6ICghcHJl
bG9hZCAmJiAocHJlbG9hZCAhPT0gdm9pZCAwKSksCgkJCQkJcHJlbG9hZDogcHJl
bG9hZAoJCQkJfSk7CgkJCQltYWlscnUuUmVhZE1zZy5yYWRhcigncmVxdWVzdCcp
OwoKCQkJCXRoaXMudXBkKHBhcmFtcy5pZCwgeyBfbG9hZGluZzogMSwgX3ByZWxv
YWQ6IHRydWUgfSk7CgoJCQkJdmFyIGFqYXhEYXRhID0gewoJCQkJCSAgdXJsOgkJ
Jy9tZXNzYWdlLz9hamF4X2NhbGw9MSZmdW5jX25hbWU9Z2V0X21lc3NhZ2VzX2J5
X2lkJm5vX3JuYj1ZJm5vdz0nKyBub3coKQoJCQkJCSwgZGF0YToJCWFqcy5leHRl
bmQoewoJCQkJCQkJCQkgIG11bHRpX21zZ19wcmV2OgkwCgkJCQkJCQkJCSwgbXVs
dGlfbXNnX3Bhc3Q6CTAKCQkJCQkJCQkJLCBzb3J0Ynk6CQkJbWFpbHJ1Lm1lc3Nh
Z2VzU29ydAoJCQkJCQkJCQksIE5ld0F0dGFjaFZpZXdlcjoJK21haWxydS5OZXdB
dHRhY2hWaWV3ZXIKCQkJCQkJCQkJLCBBdlN0YXR1c0JhcjoJCSttYWlscnUuQXZT
dGF0dXNCYXIKCQkJCQkJCQkJLCBsZXRfYm9keV90eXBlOgknbGV0X2JvZHlfcGxh
aW4nCgkJCQkJCQkJCSwgbG9nOgkJCQkrKHBhcmFtcy5pZCA9PSBHRVQuaWQpCgkJ
CQkJCQkJCSwgYnVsa19zaG93X2ltYWdlczoJfn5wYXJhbXMuYnVsa19zaG93X2lt
YWdlcwoJCQkJCQkJCQksIGZvbGRlcjoJCQltYWlscnUuZ2V0Rm9sZGVySWQoKQoJ
CQkJCQkJCX0sIHBhcmFtcywgeyByZWFkOiByZWFkID8gcGFyYW1zLmlkIDogMCwg
bWFya19yZWFkOiAhIXJlYWQgfSkKCQkJCQksIHN0b3JlTWU6ICAncmVhZG1zZycK
CQkJCQksIGxvYWRpbmc6CShwYXJhbXMubG9hZGluZyB8fCBwYXJhbXMuaWQgPT0g
R0VULmlkKSAmJiAnbG9hZCcKCQkJCQksIGxvYWRQYWdlOgkocGFyYW1zLmlkID09
IEdFVC5pZCkKCQkJCQksIGNvbXBsZXRlOgl0aGlzLl9tZXNzYWdlc0xvYWRlZC5i
aW5kKHRoaXMsIGtleSwgZG9uZUZuKQoJCQkJfTsKCgkJCQlpZiAobWFpbHJ1Lklz
UmVhZG1zZ1RvTWVzc2FnZSkgewoJCQkJCW1haWxydS5BUEkoJC5leHRlbmQodHJ1
ZSwgYWpheERhdGEsIHsKCQkJCQkJdXJsOiAnbWVzc2FnZXMvbWVzc2FnZScsCgkJ
CQkJCWNvbnZlcnRSZXN1bHRUb09sZEFwaTogdHJ1ZSwKCQkJCQkJZGF0YTogewoJ
CQkJCQkJaHRtbGVuY29kZWQ6IGZhbHNlCgkJCQkJCX0KCQkJCQl9KSk7CgkJCQl9
IGVsc2UgewoJCQkJCW1haWxydS5BamF4KGFqYXhEYXRhKTsKCQkJCX0KCQkJfQoJ
CQllbHNlIGlmKCBNc2cuX2xvYWRlZCAmJiBwcmVsb2FkICl7CgkJCQkvLyBEaXNh
YmxlZCBwcmVsb2FkCgkJCQlmb3IoIHZhciBpID0gMCwgaWQ7IGkgPCBwcmVsb2Fk
OyBpKysgKXsKCQkJCQlNc2cJPSB0aGlzLmdldChpZCA9IE1zZ1ttYWlscnUuaXND
bGlja09uUHJldiA/ICdQcmV2SWQnIDogJ05leHRJZCddKSB8fCBtYWlscnUuTWVz
c2FnZS5FbXB0eTsKCQkJCQlpZiggTXNnLklkICYmICFNc2cuX2xvYWRlZCB8fCAo
IU1zZy5JZCAmJiBpZCkgKXsKCQkJCQkJdGhpcy5sb2FkKCRFKHt9LCBwYXJhbXMs
IHsgaWQ6IE1zZy5JZCB8fCBpZCwgc206IDAgfSksIHByZWxvYWQgLSAoaSArIDEp
KTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgoKCQkJcmV0dXJuCXRo
aXMuZ2V0KHBhcmFtcy5pZCk7CgkJfSwKCgkJX21lc3NhZ2VzTG9hZGVkOiBmdW5j
dGlvbiAoa2V5LCBkb25lRm4sIFIpewoJCQl2YXIgb3B0cyA9IFIuZ2V0T3B0cygp
LmRhdGE7CgoJCQltYWlscnUuUmVhZE1zZy5yYWRhcigncmVxdWVzdCcsIDEpOwoK
CQkJaWYoIFIuaXNPSygpICl7CgkJCQl2YXIgTWVzc2FnZXMgPSBSLmdldERhdGEo
KSB8fCBbXSwgWCA9IE1lc3NhZ2VzWzBdOwoKCQkJCWlmKCBYICl7CgkJCQkJaWYo
IFguQWNjb3VudFZlcmlmaWVkID09IDAgJiYgIXRoaXMuX192ZXJpZnlQaG9uZU5v
dGlmeSAmJiBtYWlscnUuVmVyaWZ5UGhvbmVOb3RpZnkgKXsKCQkJCQkJLy8gaHR0
cHM6Ly9qaXJhLm1haWwucnUvYnJvd3NlL01BSUwtNDUyNwoJCQkJCQl0aGlzLl9f
dmVyaWZ5UGhvbmVOb3RpZnkgPSAxOwoJCQkJCQlhanMucmVxdWlyZSgne3BsdWdp
bnN9TGF5ZXJNYW5hZ2VyJywgZnVuY3Rpb24oKXsKCQkJCQkJCUxheWVyTWFuYWdl
ci52ZXJpZnlQaG9uZU5vdGlmeSgnI1ZlcmlmeVBob25lTm90aWZ5Jyk7CgkJCQkJ
CX0pOwoJCQkJCX0KCgkJCQkJaWYoIFguTm9NU0cgPT0gMSApewoJCQkJCQltYWls
cnUubG9nKCdtZXNzYWdlLmxvYWQuTm9NU0cnLCB7IGlkOiBvcHRzLmlkLCB4aHI6
IFIuZ2V0UmVzcG9uc2VUZXh0KCkgfSk7CgkJCQkJCW1haWxydS5Ob3RpZnkuYWRk
KCdlcnJvcicsIHsgc3VidHlwZTogJ25vbXNnJyB9KTsKCQkJCQkJZG9uZUZuKCdu
b21zZycsIG51bGwsIFIpOwoJCQkJCX0KCQkJCQllbHNlIGlmKCBYLklkICl7CgkJ
CQkJCUFycmF5LmZvckVhY2goTWVzc2FnZXMsIGZ1bmN0aW9uIChkYXRhKSB7CgoJ
CQkJCQkJZGF0YS5Gcm9tTGlzdCA9IGRhdGEuRnJvbUZ1bGw7CgoJCQkJCQkJdmFy
IG1zZyA9IHRoaXMudXBkKGRhdGEuSWQsIGRhdGEsIEdFVC5pZCAhPSBkYXRhLklk
KTsKCgkJCQkJCQlpZiAoLypNQUlMLTYxOTUqL29wdHMuc20gfHwgLypNQUlMLTQx
NzAqL29wdHMuaWQuaW5kZXhPZignZicpID09PSAwKSB7CgkJCQkJCQkJdGhpcy51
cGQob3B0cy5pZCwgJC5leHRlbmQobXNnLCB7IF9sb2FkZWQ6IDEgfSkpOwoJCQkJ
CQkJfQoKCQkJCQkJCW1zZy5fa2V5CQk9IGtleTsKCQkJCQkJCW1zZy5fbG9hZGlu
Zwk9IDA7CgkJCQkJCQltc2cuX2xvYWRfYnlfbWVzc2FnZSA9IDE7CgkJCQkJCQlt
c2cuX2xvYWRlZAkJPSAxOwoKCQkJCQkJCW1haWxydS5sb2coJ21lc3NhZ2UubG9h
ZC5zdWNjZXNzJywgb3B0cy5pZCk7CgkJCQkJCQltYWlscnUuRXZlbnRzLmZpcmUo
J3VwZGF0ZS5tZXNzYWdlJywgW21zZy5JZCwgbXNnLCBvcHRzXSk7CgoJCQkJCQkJ
ZG9uZUZuKG51bGwsIG1zZywgUik7CgkJCQkJCX0sIHRoaXMpOwoJCQkJCX0KCQkJ
CQllbHNlIHsKCQkJCQkJdGhpcy51cGQob3B0cy5pZCwgeyBfbG9hZGVkOiAwIH0p
OwoJCQkJCQltYWlscnUubG9nKCdtZXNzYWdlLmxvYWQudW5rbm93bicsIHsgaWQ6
IG9wdHMuaWQsIHhocjogUi5nZXRSZXNwb25zZVRleHQoKSB9KTsKCQkJCQkJbWFp
bHJ1Lk5vdGlmeS5hZGQoJ2Vycm9yJyk7CgkJCQkJCWRvbmVGbignZXJyb3InLCBu
dWxsLCBSKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZSB7CgkJCQltYWlscnUu
bG9nKCdtZXNzYWdlLmxvYWQuZXJyb3InLCB7IGlkOiBvcHRzLmlkLCB4aHI6IFIu
Z2V0UmVzcG9uc2VUZXh0KCkgfSk7CgkJCQlkb25lRm4oJ3NlcnZlcl9lcnJvcics
IG51bGwsIFIpOwoJCQkJdGhpcy51cGQob3B0cy5pZCwgeyBfbG9hZGVkOiAwIH0p
OwoJCQl9CgoJCQl0aGlzLmlzTG9hZGluZwk9IGZhbHNlOwoJCQl0aGlzLnVwZChv
cHRzLmlkLCB7IF9sb2FkaW5nOiAwIH0pOwoJCQltYWlscnUuRXZlbnRzLmZpcmUo
J2xvYWRlZC5tZXNzYWdlcycpOwoJCX0sCgoKCQlnZXRTZWFyY2hDYWNoZUtleTog
ZnVuY3Rpb24gKGRhdGEpewoJCQlyZXR1cm4JYWpzLnRvUXVlcnkoZGF0YSk7CgkJ
fSwKCgkJaGFzU2VhcmNoQ2FjaGU6IGZ1bmN0aW9uIChkYXRhKXsKCQkJcmV0dXJu
CSEhdGhpcy5nZXRTZWFyY2hDYWNoZShkYXRhKTsKCQl9LAoKCQlnZXRTZWFyY2hD
YWNoZTogZnVuY3Rpb24gKGRhdGEpewoJCQlyZXR1cm4JdGhpcy5fc2VhcmNoW3Ro
aXMuZ2V0U2VhcmNoQ2FjaGVLZXkoZGF0YSldOwoJCX0sCgoJCWFkZFNlYXJjaENh
Y2hlOiBmdW5jdGlvbiAoZGF0YSwgRGF0YSl7CgkJCXRoaXMuX3NlYXJjaFt0aGlz
LmdldFNlYXJjaENhY2hlS2V5KGRhdGEpXQk9IERhdGE7CgkJfSwKCgkJcmVzZXRT
ZWFyY2hDYWNoZTogZnVuY3Rpb24gKCl7CgkJCXRoaXMuX3NlYXJjaCA9IHt9OwoJ
CX0sCgoJCWxvYWRTZWFyY2g6IGZ1bmN0aW9uIChwYXJhbXMsIG5vQ2FjaGUsIG5v
TG9hZGluZykgewoJCQkvLyBodHRwczovL2ppcmEubWFpbC5ydS9icm93c2UvTUFJ
TC05NjI5P2ZvY3VzZWRDb21tZW50SWQ9NTIzNzg5JnBhZ2U9Y29tLmF0bGFzc2lh
bi5qaXJhLnBsdWdpbi5zeXN0ZW0uaXNzdWV0YWJwYW5lbHM6Y29tbWVudC10YWJw
YW5lbCNjb21tZW50LTUyMzc4OQoJCQkvLyBNQUlMLTk2Mjk6IHFfcXVlcnk6ICcq
JyAtPiBxX3F1ZXJ5OiAnJwoKCQkJdmFyIGRmID0gJC5EZWZlcnJlZCgpOwoJCQl2
YXIgcXVlcnkgPSBhanMudG9RdWVyeShhanMuZXh0ZW5kKHsgcV9xdWVyeTogJycg
fSwgcGFyYW1zKSk7CgoJCQlpZiggdGhpcy5fc2VhcmNoUSA9PSBxdWVyeSApewoJ
CQkJcmV0dXJuIHRoaXMuX3NlYXJjaERlZmVyOwoJCQl9CgoJCQl0aGlzLl9zZWFy
Y2hRID0gcXVlcnk7CgkJCXRoaXMuX3NlYXJjaERlZmVyID0gZGY7CgoJCQl2YXIg
bG9hZGVkID0gZnVuY3Rpb24gKFIpewoJCQkJaWYoIFIgKXsKCQkJCQl0aGlzLl9z
ZWFyY2hRID0gbnVsbDsKCQkJCQltYWlscnUuRXZlbnRzLmZpcmUoJ2JlZm9yZWxv
YWRlZC5zZWFyY2gnLCBSKTsKCgkJCQkJaWYoIFIuaXNPSygpICl7CgkJCQkJCXZh
ciBEYXRhID0gbWFpbHJ1LlNlYXJjaERhdGEgPSBSLmdldERhdGEoKQoJCQkJCQkJ
LCBmSWQgPSBtYWlscnUuRm9sZGVycy5nZXRTZWFyY2gocGFyYW1zLnFfZm9sZGVy
KS5JZAoJCQkJCQk7CgoJCQkJCQl0aGlzLmFkZFNlYXJjaENhY2hlKHBhcmFtcywg
Uik7CgkJCQkJCXRoaXMuc2V0KGZJZCwgRGF0YS5tZXNzYWdlcywgYWpzLm5vdygp
LCB0cnVlLCBbIlNlYXJjaEZyb20iLCAiU2VhcmNoU3ViamVjdCIsICJTZWFyY2hT
bmlwcGV0Il0pOwoKCQkJCQkJaWYoIG1haWxydS5pc0ZpbHRlckZvbGRlcihmSWQp
ICl7CgkJCQkJCQltYWlscnUuRm9sZGVycy51cGQoZklkLCB7IE1lc3NhZ2VzOiBE
YXRhLnNlYXJjaC5jb3VudCB9KTsKCQkJCQkJfQoKCQkJCQkJZGYucmVzb2x2ZSh7
IGRhdGE6IERhdGEsIG1vZGVsczogdGhpcy5nZXRCeUZvbGRlcihmSWQpIH0pOwoJ
CQkJCQlkb2N1bWVudFZpZXcucmVkcmF3KCk7CgkJCQkJfQoKCQkJCQltYWlscnUu
RXZlbnRzLmZpcmUoJ2xvYWRlZC5zZWFyY2gnLCBSKTsKCQkJCX0KCQkJfS5iaW5k
KHRoaXMpOwoKCgkJCWlmKCB0aGlzLl9zZWFyY2hYSFIgKXsKCQkJCXRoaXMuX3Nl
YXJjaFhIUi5hYm9ydCgpOwoJCQl9CgoJCQl0aGlzLl9zZWFyY2hYSFIJPSBtYWls
cnUuQWpheCh7CgkJCQkgIHVybDogJy9zZWFyY2gvP2pzb249WScKCQkJCSwgZGF0
YTogYWpzLnRvT2JqZWN0KHF1ZXJ5KQoJCQkJLCBjb21wbGV0ZTogbG9hZGVkCgkJ
CQksIHNhdmVUb2tlbnM6IHRydWUKCQkJCSwgbG9hZGluZzogIW5vTG9hZGluZyAm
JiAhdGhpcy5oYXNTZWFyY2hDYWNoZShwYXJhbXMpICYmICdsb2FkJwoJCQl9KTsK
CgkJCWlmKCAhbm9DYWNoZSApewoJCQkJbG9hZGVkKHRoaXMuZ2V0U2VhcmNoQ2Fj
aGUocGFyYW1zKSk7CgkJCX0KCgkJCXJldHVybglkZjsKCQl9LAoKCQlwcmVwYXJl
RmlsZVNlYXJjaFBhcmFtczogZnVuY3Rpb24gKGRhdGEpIHsKCQkJdmFyIHBhcmFt
cyA9IHsKCQkJCWZvbGRlcl9pZDogMCwKCQkJCWNvbnRlbnRfdHlwZV9pZDogLTEs
CgkJCQlvZmZzZXQ6IG1haWxydS5maWxlc1BlclBhZ2UgKiAoKGRhdGEucGFnZSB8
fCAxKSAtIDEpLAoJCQkJbGltaXQ6IG1haWxydS5maWxlc1BlclBhZ2UsCgkJCQlu
YW1lX25lZWRsZTogZGF0YS5xX3F1ZXJ5IHx8ICcnCgkJCX07CgoJCQlpZiAoZGF0
YS5vbmx5X2hpZGRlbiAhPSAxKSB7CgkJCQlkZWxldGUgZGF0YVsnb25seV9oaWRk
ZW4nXTsKCQkJfQoKCQkJaWYgKCFkZWZpbmVkKGRhdGEub25seV9oaWRkZW4pICYm
ICFkZWZpbmVkKGRhdGEucV9xdWVyeSkpIHsKCQkJCXBhcmFtcy5mb2xkZXJfaWQg
PSAwOwoJCQl9CgoJCQlyZXR1cm4gJC5leHRlbmQocGFyYW1zLCBkYXRhKTsKCQl9
LAoKCQlnZXRGaWxlc1NlYXJjaENhY2hlS2V5OiBmdW5jdGlvbiAoZGF0YSl7CgkJ
CXJldHVybiBhanMudG9RdWVyeSh0aGlzLnByZXBhcmVGaWxlU2VhcmNoUGFyYW1z
KGRhdGEpKTsKCQl9LAoKCQloYXNGaWxlc1NlYXJjaENhY2hlOiBmdW5jdGlvbiAo
ZGF0YSl7CgkJCXJldHVybiAhIXRoaXMuZ2V0RmlsZXNTZWFyY2hDYWNoZShkYXRh
KTsKCQl9LAoKCQlnZXRGaWxlc1NlYXJjaENhY2hlOiBmdW5jdGlvbiAoZGF0YSl7
CgkJCXJldHVybiB0aGlzLl9maWxlU2VhcmNoW3RoaXMuZ2V0RmlsZXNTZWFyY2hD
YWNoZUtleShkYXRhKV07CgkJfSwKCgkJYWRkRmlsZXNTZWFyY2hDYWNoZTogZnVu
Y3Rpb24gKGRhdGEsIERhdGEpewoJCQl0aGlzLl9maWxlU2VhcmNoW3RoaXMuZ2V0
RmlsZXNTZWFyY2hDYWNoZUtleShkYXRhKV0JPSBEYXRhOwoJCX0sCgoJCWxvYWRG
aWxlc1NlYXJjaDogZnVuY3Rpb24gKHBhcmFtcywgbm9DYWNoZSwgbm9Mb2FkaW5n
KSB7CgkJCXBhcmFtcyA9IHRoaXMucHJlcGFyZUZpbGVTZWFyY2hQYXJhbXMocGFy
YW1zKTsKCgkJCXZhciBkZiA9ICQuRGVmZXJyZWQoKTsKCQkJdmFyIHF1ZXJ5ID0g
YWpzLnRvUXVlcnkocGFyYW1zKTsKCgkJCWlmKCB0aGlzLl9maWxlc1NlYXJjaFEg
PT0gcXVlcnkgKXsKCQkJCXJldHVybgl0aGlzLl9maWxlc1NlYXJjaERlZmVyOwoJ
CQl9IGVsc2UgewoJCQkJdGhpcy5fZmlsZXNTZWFyY2hRID0gcXVlcnk7CgkJCQl0
aGlzLl9maWxlc1NlYXJjaERlZmVyID0gZGY7CgkJCX0KCgkJCXZhciBsb2FkZWQg
PSBmdW5jdGlvbiAoUil7CgkJCQlpZiggUiApewoJCQkJCXRoaXMuX2ZpbGVzU2Vh
cmNoUSA9IG51bGw7CgkJCQkJbWFpbHJ1LkV2ZW50cy5maXJlKCdiZWZvcmVsb2Fk
ZWQuZmlsZVNlYXJjaCcsIFIpOwoKCQkJCQlpZiggUi5pc09LKCkgKXsKCgkJCQkJ
CXZhciBmb2xkZXJJZCA9IG1haWxydS5Gb2xkZXIuRklMRVNFQVJDSCwKCQkJCQkJ
CURhdGEgPSBtYWlscnUuRmlsZXNTZWFyY2hEYXRhID0gJC5leHRlbmQoewoJCQkJ
CQkJCXRvdGFsOiAwLAoJCQkJCQkJCWNudDogMCwKCQkJCQkJCQlsaXN0OiBbXQoJ
CQkJCQkJfSwgUi5nZXREYXRhKCkgfHwge30pOwoKCQkJCQkJYWpzLmVhY2goRGF0
YS5saXN0LCBmdW5jdGlvbiAoZmlsZSkgewoJCQkJCQkJZmlsZS5JZCA9IFtmaWxl
LmlkXS5jb25jYXQoZmlsZS5uKS5qb2luKCc7Jyk7CgkJCQkJCQlmaWxlLkZvbGRl
cklkID0gZm9sZGVySWQ7CgkJCQkJCX0pOwoKCQkJCQkJdGhpcy5hZGRGaWxlc1Nl
YXJjaENhY2hlKHBhcmFtcywgUik7CgkJCQkJCXRoaXMuc2V0RmlsZXNTZWFyY2go
Zm9sZGVySWQsIERhdGEubGlzdCwgbm93KCksIHRydWUpOwoKCQkJCQkJZGYucmVz
b2x2ZSh7IGRhdGE6IERhdGEsIG1vZGVsczogdGhpcy5nZXRCeUZvbGRlcihmb2xk
ZXJJZCkgfSk7CgkJCQkJCWRvY3VtZW50Vmlldy5yZWRyYXcoKTsKCQkJCQl9CgoJ
CQkJCW1haWxydS5FdmVudHMuZmlyZSgnbG9hZGVkLmZpbGVTZWFyY2gnLCBSKTsK
CQkJCX0KCQkJfS5iaW5kKHRoaXMpOwoKCQkJaWYgKHRoaXMuX2ZpbGVTZWFyY2hY
SFIpIHsKCQkJCXRoaXMuX2ZpbGVTZWFyY2hYSFIuYWJvcnQoKTsKCQkJfQoKCQkJ
dGhpcy5fZmlsZVNlYXJjaFhIUiA9IG1haWxydS5BamF4KHsKCQkJCSAgdXJsOgkJ
Jy9jZ2ktYmluL2ZpbGVzZWFyY2hfYWpheD9hamF4X2NhbGw9MSZmdW5jX25hbWU9
YWpheF9zZWFyY2gnCgkJCQksIGRhdGE6CQlwYXJhbXMKCQkJCSwgbG9hZGluZzoJ
IW5vTG9hZGluZyAmJiAhdGhpcy5oYXNGaWxlc1NlYXJjaENhY2hlKHBhcmFtcykg
JiYgJ2xvYWQnCgkJCQksIGNvbXBsZXRlOglsb2FkZWQKCQkJfSk7CgoJCQlpZigg
IW5vQ2FjaGUgKXsKCQkJCWxvYWRlZCh0aGlzLmdldEZpbGVzU2VhcmNoQ2FjaGUo
cGFyYW1zKSk7CgkJCX0KCgkJCXJldHVybglkZjsKCQl9LAoKCQlfbW92ZVRvOiBm
dW5jdGlvbih0bywgbW9kZWxzLCBjb21wbGV0ZSkgewoJCQl2YXIgJEZvcm0gPSBt
YWlscnUuVmlldy5NZXNzYWdlcy5nZXRBY3RpdmUoKS5nZXRGb3JtKCk7CgoJCQlp
ZiAobWFpbHJ1LmlzUmVhZE1zZykKCQkJCSRGb3JtLmFwcGVuZCgnPGlucHV0IHZh
bHVlPSInICsgbW9kZWxzWzBdLklkICsgJyIgbmFtZT0iaWQiIHR5cGU9ImhpZGRl
biIgLz4nKTsKCgkJCWlmICggdG8gPT0gJ25ldycgKQoJCQl7CgkJCQkvLyBNQUlM
LTk4MDMKCQkJCWlmIChtYWlscnUuU2V0dGluZ3NPbikKCQkJCXsKCQkJCQltYWls
cnUuQVBJLnBvc3QoJ3Rva2VucycsIGZ1bmN0aW9uIChSKQoJCQkJCXsKCQkJCQkJ
dmFyIHRva2VuID0gU3RyaW5nKFIuZ2V0Qm9keSgpLnRva2VuKS5zcGxpdCgnOicp
OwoKCQkJCQkJTGF5ZXJNYW5hZ2VyLnNob3coJ3NldHRpbmdzX19mb2xkZXJzX19l
ZGl0JywgewoJCQkJCQkJdXJsOiAnL2NnaS1iaW4vc2V0dGluZ3MvYWpheF9zZXR0
aW5ncz9hamF4X2NhbGw9MSZmdW5jX25hbWU9ZWRpdCcsCgkJCQkJCQl0b2tlbnM6
IHRva2VuLAoKCQkJCQkJCWZvbGRlcnNMaXN0OiBhanMuZmlsdGVyKG1haWxydS5G
b2xkZXJzLmdldEFsbCgpLCBmdW5jdGlvbiAoZm9sZGVyKSB7CgkJCQkJCQkJcmV0
dXJuICFmb2xkZXIuSXNTdWJmb2xkZXI7CgkJCQkJCQl9KSwKCgkJCQkJCQljYW5j
ZWw6IGZ1bmN0aW9uICgpewoJCQkJCQkJCShjb21wbGV0ZSB8fCBhanMuRikobmV3
IG1haWxydS5BamF4LlJlc3VsdCk7CgkJCQkJCQl9LAoKCQkJCQkJCXN1Y2Nlc3M6
IGZ1bmN0aW9uKCRmb3JtLCB0b0ZvbGRlcklkKXsKCQkJCQkJCQltYWlscnUuRm9s
ZGVycy51cGQodG9Gb2xkZXJJZCwgeyBOYW1lOiAkZm9ybS50b09iamVjdCgpLk5h
bWUgfSk7CgkJCQkJCQkJbWFpbHJ1Lk1lc3NhZ2VzLmVkaXQoJ21vdmUnLCBtb2Rl
bHMsIHRvRm9sZGVySWQsIGNvbXBsZXRlKTsKCQkJCQkJCX0KCQkJCQkJfSk7CgkJ
CQkJfSk7CgkJCQl9CgoJCQkJLy8kRm9ybS5maW5kKCcuanMtSW5wVG9Gb2xkZXJJ
ZCcpLnZhbCh0byk7CgkJCQkvLyRGb3JtLmZpbmQoJy5qcy1NYWluTW92ZUJ0bjpm
aXJzdCcpLmNsaWNrKCk7CgkJCX0KCQkJZWxzZSB7CgkJCQkkRm9ybS5maW5kKCcu
anMtSW5wTW92ZVRvJykudmFsKHRvKTsKCQkJCSRGb3JtLmZpbmQoJy5qcy1NYWlu
Qm9va2ZpbHRlckJ0bjpmaXJzdCcpLmNsaWNrKCk7CgkJCX0KCgkJCXJldHVybgl0
cnVlOwoJCX0sCgoJCWNvbmZpcm1TcGFtOiBmdW5jdGlvbiAoaWQsIGRhdGEpewoJ
CQkvLyBNQUlMLTEwNzA1IGZvciBlbWFpbHMgZnJvbSBhYiwgc2hvdyBwb3B1cCBm
b3IgY29uZmlybWF0aW9uCgkJCXZhciBpc0luQWIgPSBmYWxzZTsKCQkJdmFyIE0g
PSB0aGlzLmdldChpZCk7IC8vIGdldCBtZXNzYWdlcwoJCQl2YXIgZGVmZXIgPSAk
LkRlZmVycmVkKCk7CgoJCQlpZiAobWFpbHJ1LmlzUmVhZE1zZyAmJiBtYWlscnUu
TGlzdFVuc3Vic2NyaWJlRW5hYmxlZCAmJiBNWzBdLkxpc3RVbnN1YnNjcmliZSkg
ewoJCQkJLy8gc2hvdyBwb3B1cCB1bnN1YnNjcmlwZSBvciBhZGQgdG8gc3BhbQoJ
CQkJTGF5ZXJNYW5hZ2VyLnNob3coJ2xpc3RVbnN1YnNjcmliZScsIHsgLy8gYXNr
IGZvciBjb25maXJtYXRpb24KCQkJCQlmcm9tOiAoTVswXS5Gcm9tTmFtZSB8fCBN
WzBdLkZyb20pLAoJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKHN0YXR1cykKCQkJCQl7
CgkJCQkJCWlmIChzdGF0dXMgPT0gdHJ1ZSkgeyAvLyDQutC70LjQuiDQvdCwICLQ
vtGC0L/QuNGB0LDRgtGM0YHRjyIKCQkJCQkJCW1haWxydS5NZXNzYWdlcy5lZGl0
KCd1bnN1YnNjcmliZScsIGlkLCBkYXRhKTsKCQkJCQkJCUNvdW50ZXIuc2IoMTYx
MTIzMSk7CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiAoc3RhdHVzID09PSBmYWxzZSkg
eyAvLyDQutC70LjQuiDQvdCwICLRgdC/0LDQvCIKCQkJCQkJCW1haWxydS5NZXNz
YWdlcy5lZGl0KCdzcGFtJywgaWQsIGRhdGEpOwoJCQkJCQkJQ291bnRlci5zYigx
Njc4Mjg5KTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0pOwoJCQkJQ291bnRlci5kKDE2
MTEyMzEpOwoJCQkJQ291bnRlci5kKDE2NzgyODkpOwoJCQl9CgkJCWVsc2UgewoJ
CQkJLy8gY2hlY2sgaWYgc29tZSBlbWFpbHMgYXJlIGluIGFkZHJlc3Nib29rIGFu
ZCBzaG93IGNvbmZpcm0gcG9wdXAgZm9yIHRoZW0KCQkJCS8vIGdldCBhZGRyZXNz
Ym9vawoJCQkJJFIoJ3ttYWlscnV9JyArICdtYWlscnUuQmFsbG9vbicsIGZ1bmN0
aW9uKCkgewoJCQkJCW1haWxydS5CYWxsb29uLmdldEFkZHJlc3NCb29rRGF0YShm
dW5jdGlvbihhYmRhdGEpIHsKCQkJCQkJdmFyIGVtYWlsOwoJCQkJCQl2YXIgdXNl
cnMgPSBbXTsKCgkJCQkJCXZhciBpZFRvU3BhbSA9IFtdLAoJCQkJCQkJaWRDb25m
aXJtID0gW107CgoJCQkJCQlBcnJheS5mb3JFYWNoKE0sIGZ1bmN0aW9uIChYKSB7
IC8vIGNoZWNrIGZyb20gZW1haWwKCQkJCQkJCWVtYWlsID0gWC5Gcm9tOwoJCQkJ
CQkJaWYgKGVtYWlsICE9ICcnICYmIG1haWxydS5CYWxsb29uLmluQXJyYXkoZW1h
aWwsIGFiZGF0YSkpIHsKCQkJCQkJCQlpc0luQWIgPSB0cnVlOyAvLyBlbWFpbCBp
cyBpbiBhZHJlc3Nib29rCgkJCQkJCQkJaWRDb25maXJtLnB1c2goWC5JZCk7CgkJ
CQkJCQkJdmFyIGlzVW5pcXVlID0gdHJ1ZTsKCQkJCQkJCQlBcnJheS5mb3JFYWNo
KHVzZXJzLCBmdW5jdGlvbiAoWCkgeyBpZihlbWFpbCA9PSBYLkZyb20peyBpc1Vu
aXF1ZSA9IGZhbHNlOyByZXR1cm47IH0gfSk7CgkJCQkJCQkJaWYgKGlzVW5pcXVl
KQoJCQkJCQkJCQl1c2Vycy5wdXNoKFgpOyAvLyBzdG9yZSB1bmlxdWUgZW1haWxz
CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQkvLyBtb3ZlIHRvIHNwYW0g
aW1tZWRpYXRlbHkKCQkJCQkJCQlpZFRvU3BhbS5wdXNoKFguSWQpOwoJCQkJCQkJ
fQoKCQkJCQkJfSk7CgoJCQkJCQlpZiAoaXNJbkFiKSB7IC8vIHNvbWUgZW1haWwg
YXJlIGluIGFkcmVzc2Jvb2sKCQkJCQkJCUxheWVyTWFuYWdlci5zaG93KCdjb25m
aXJtU3BhbScsIHsgLy8gYXNrIGZvciBjb25maXJtYXRpb24KCQkJCQkJCQl1c2Vy
czogQXJyYXkubWFwKHVzZXJzLCBmdW5jdGlvbiAoWCl7IHJldHVybiBYLkZyb21G
dWxsIHx8IFguRnJvbUxpc3Q7IH0pLAoJCQkJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9u
KHN0YXR1cykKCQkJCQkJCQl7CgkJCQkJCQkJCWlmIChzdGF0dXMgPT09IGZhbHNl
KSB7IC8vIG1hcmsgYXMgc3BhbQoJCQkJCQkJCQkJbWFpbHJ1Lk1lc3NhZ2VzLmVk
aXQoJ3NwYW0nLCBpZENvbmZpcm0sIGRhdGEpOwoJCQkJCQkJCQkJQ291bnRlci5z
YigxMzQ1ODg0KTsgLy8g0LrQu9C40Log0L3QsCAi0LTQsCIKCQkJCQkJCQkJfQoJ
CQkJCQkJCQllbHNlIGlmIChzdGF0dXMgPT0gdHJ1ZSkgewoJCQkJCQkJCQkJQ291
bnRlci5zYigxMzQ1ODg1KTsgLy8g0LrQu9C40Log0L3QsCAi0L3QtdGCIgoJCQkJ
CQkJCQl9CgkJCQkJCQkJCWVsc2UgewoJCQkJCQkJCQkJQ291bnRlci5zYigxMzQ1
ODgzKTsgLy8g0LfQsNC60YDRi9GC0LjQtSDQv9C+0L/QsNC/0LAKCQkJCQkJCQkJ
fQoJCQkJCQkJCX0KCQkJCQkJCX0pOwoJCQkJCQkJQ291bnRlci5kKDEzNDU4ODEp
OyAvLyDQv9C+0LrQsNC3INC/0L7Qv9Cw0L/QsAoJCQkJCQkJaWYoaWRUb1NwYW0u
bGVuZ3RoID4gMCkgewoJCQkJCQkJCW1haWxydS5NZXNzYWdlcy5lZGl0KCdzcGFt
JywgaWRUb1NwYW0sIGRhdGEsIGRlZmVyLnJlc29sdmUpOwoJCQkJCQkJfQoJCQkJ
CQl9CgkJCQkJCWVsc2UgeyAvLyBtYXJrIGFzIHNwYW0gaW1tZWRpYXRlbHkKCQkJ
CQkJCW1haWxydS5NZXNzYWdlcy5lZGl0KCdzcGFtJywgaWQsIGRhdGEsIGRlZmVy
LnJlc29sdmUpOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQl9KTsKCQkJfQoKCgkJCXJl
dHVybiBkZWZlcjsKCQl9LAoKCQllZGl0OiBmdW5jdGlvbiAodHlwZSwgaWQsIGRh
dGEsIGNvbXBsZXRlKXsKCQkJaWYoIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgKSBp
ZCA9IFtpZF07CgoJCQlpZiggaWRbMF0gJiYgaWRbMF0uaWQgKXsKCQkJCWlkID0g
QXJyYXkubWFwKGlkLCBmdW5jdGlvbiAoeCl7IHJldHVybiB4LmlkIH0pOwoJCQl9
CgoJCQl2YXIKCQkJCSAgdSAvKiB1cmwgKi8KCQkJCSwgZAkJPSB7fSAvKiBkYXRh
ICovCgkJCQksIHIJCT0gZmFsc2UgLyogVXBkYXRlci5yZWxvYWQgKi8KCQkJCSwg
TQkJPSB0aGlzLmdldChpZCkgLyogZ2V0IG1lc3NhZ2VzICovCgkJCQksIF9hcmdz
CT0gYXJndW1lbnRzCgkJCQksIHNsID0gMCAvKiBzdGF0dXNMaW5lICovCgkJCQks
IFZpZXcgPSBtYWlscnUuVmlldy5NZXNzYWdlcy5nZXRBY3RpdmUoKQoJCQkJLCBp
c1VzZXIgPSB0cnVlIC8vIGlzIHVzZXIgYWN0aW9uCgkJCQksIHJlbG9hZEJhbm5l
cnMgPSBmYWxzZQoJCQk7CgoJCQl2YXIgY291bnRQcm9jZXNzaW5nID0gTSAmJiBN
Lmxlbmd0aDsKCgkJCWlmKCAhY291bnRQcm9jZXNzaW5nICl7CgkJCQlpZiggJC5p
c0Z1bmN0aW9uKGNvbXBsZXRlKSApewoJCQkJCWNvbXBsZXRlKG5ldyBtYWlscnUu
QWpheC5SZXN1bHQpOwoJCQkJfQoJCQkJcmV0dXJuOwoJCQl9CgoJCQltYWlscnUu
Rm9sZGVycy50cmFuc2FjdGlvbih0cnVlKTsKCgkJCXN3aXRjaCggdHlwZSApCgkJ
CXsKCQkJCWNhc2UgJ3JlZGlyZWN0JzoKCQkJCXsKCQkJCQl1CT0gJy9jZ2ktYmlu
L2JvdW5jZW1zZz9mdW5jX25hbWU9YWpheF9ib3VuY2VfbXNnJzsKCQkJCQlkCT0g
ZGF0YTsKCQkJCX0KCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ2Jvb2tmaWx0ZXInOgoJ
CQkJewoJCQkJCWlmKCBkYXRhID09ICdibGlzdCcgKSByZXR1cm4gdGhpcy5fbW92
ZVRvKGRhdGEsIE0sIGNvbXBsZXRlKTsKCgkJCQkJdQkJCQk9ICcvY2dpLWJpbi9t
b3ZlbXNnJzsKCQkJCQlzbAkJCQk9IDE7CgkJCQkJZC5pZAkJCT0gaWQ7CgkJCQkJ
ZC5tb3ZldG8JCT0gc2wgPSAnYWJvb2snOwoJCQkJCWQuYm9va2ZpbHRlcgk9IDE7
CgkJCQl9CgkJCQlicmVhazsKCgkJCQljYXNlICdtYXJrJzoKCQkJCWNhc2UgJ21v
dmUnOgoJCQkJY2FzZSAnc3BhbSc6CgkJCQljYXNlICd1bnN1YnNjcmliZSc6CgkJ
CQljYXNlICdyZWFkJzoKCQkJCWNhc2UgJ3JlbW92ZSc6CgkJCQl7CgkJCQkJdmFy
IEYJPSBtYWlscnUuRm9sZGVycy5nZXRTYWZlKCk7CgoJCQkJCWlmKCB0eXBlID09
ICdyZWFkJyApewoJCQkJCQkvLyBNYXJrIGFzIHJlYWRlZAoJCQkJCQlkYXRhCT0g
bWFpbHJ1Lk1lc3NhZ2UuUkVBRDsKCQkJCQkJaXNVc2VyICA9IGZhbHNlOwoJCQkJ
CX0gZWxzZSB7CgkJCQkJCQlyZWxvYWRCYW5uZXJzCT0gdHJ1ZTsKCQkJCQl9CgoJ
CQkJCXIJPSB0cnVlOyAvLyBVcGRhdGVyLnJlbG9hZAoJCQkJCXNsCT0gdHlwZTsg
Ly8gU2V0IHN0YXR1cyBsaW5lIGJ5IGFjdGlvbgoKCQkJCQlpZiggIU0ubGVuZ3Ro
ICkgcmV0dXJuOwoJCQkJCWlmKCBkYXRhID09ICduZXcnICkgcmV0dXJuIHRoaXMu
X21vdmVUbyhkYXRhLCBNLCBjb21wbGV0ZSk7CgoJCQkJCWlmKCB0eXBlID09ICdy
ZWFkJyApewoJCQkJCQlzbAkJPSAwOwoJCQkJCQl0eXBlCT0gJ21hcmsnOwoJCQkJ
CX0KCgkJCQkJaWYoIHR5cGUgPT0gJ21hcmsnICl7CgkJCQkJCXZhciBhID0gMCwg
dW0gPSAwLCBmbGFnLCB1bnJlYWQsIHVmID0gMDsKCQkJCQkJZC5tYXJrbWVzc2Fn
ZSA9IGRhdGE7CgoJCQkJCQlBcnJheS5mb3JFYWNoKE0sIGZ1bmN0aW9uIChYKQoJ
CQkJCQl7CgkJCQkJCQlzd2l0Y2goIGRhdGEgKQoJCQkJCQkJewoJCQkJCQkJCWNh
c2UgbWFpbHJ1Lk1lc3NhZ2UuRkxBRzoJaWYoICFYLkZsYWdnZWQgKXsgdWYrKzsg
WC5zZXQoJ0ZsYWdnZWQnLCAxKTsgZmxhZyA9IDE7IH0gYnJlYWs7CgkJCQkJCQkJ
Y2FzZSBtYWlscnUuTWVzc2FnZS5OT0ZMQUc6CWlmKCBYLkZsYWdnZWQgKXsgdWYr
KzsgWC5zZXQoJ0ZsYWdnZWQnLCAwKTsgZmxhZyA9IDA7IH0gYnJlYWs7CgoJCQkJ
CQkJCWNhc2UgbWFpbHJ1Lk1lc3NhZ2UuUkVBRDoKCQkJCQkJCQkJaWYoIFguaXNV
bnJlYWQoKSApewoJCQkJCQkJCQkJbWFpbHJ1LmxvZygnbWVzc2FnZS5zZXQucmVh
ZCcsIHsgaWQ6IFguaWQgfSk7CgkJCQkJCQkJCQl1bS0tOwoJCQkJCQkJCQkJWC5z
ZXQoJ1VucmVhZCcsIDApOwoJCQkJCQkJCQkJdW5yZWFkID0gMDsKCQkJCQkJCQkJ
CWlmKCBtYWlscnUuRm9sZGVycy5nZXRTYWZlKCkuaWQgPT0gOTUwKQoJCQkJCQkJ
CQkJCUNvdW50ZXIuc2IobWFpbHJ1LkhpZGVTcGFtQ291bnRlck9uVGhlTGVmdENv
bCA/IDE1NjM2NjcgOiAxNTYzNjY0KTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlicmVh
azsKCQkJCQkJCQljYXNlIG1haWxydS5NZXNzYWdlLlVOUkVBRDoJaWYoICFYLmlz
VW5yZWFkKCkgKXsgdW0rKzsgWC5zZXQoJ1VucmVhZCcsIDEpOyB1bnJlYWQgPSAx
OyB9IGJyZWFrOwoJCQkJCQkJfQoJCQkJCQl9KTsKCgkJCQkJCWNvdW50UHJvY2Vz
c2luZwk9IE1hdGguYWJzKHVtIHx8IHVmKTsKCQkJCQkJRi5zZXQoJ1VucmVhZCcs
IE1hdGgubWF4KEYuVW5yZWFkICsgdW0sIDApKTsKCgkJCQkJCS8vIFJlbG9hZCBt
ZXNzYWdlcwoJCQkJCQlpZiggY291bnRQcm9jZXNzaW5nID4gMCApCgkJCQkJCXsK
CQkJCQkJCS8vdGhpcy5yZWxvYWQoRi5JZCwgdHJ1ZSk7CgkJCQkJCX0KCQkJCQkJ
ZWxzZSBpZiggIW1haWxydS5pc1JlYWRNc2cgKQoJCQkJCQl7CgkJCQkJCQlyZXR1
cm47CgkJCQkJCX0KCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJVmlldyAm
JiAoVmlldy5fY2xlYXJDQlggPSB0cnVlKTsKCgkJCQkJCWlmKCB0eXBlID09ICdz
cGFtJyB8fCB0eXBlID09ICd1bnN1YnNjcmliZScgKQoJCQkJCQl7CgkJCQkJCQlp
ZiggZGF0YSA9PT0gZmFsc2UgKQoJCQkJCQkJewkvLyBJcyBub3Qgc3BhbQoJCQkJ
CQkJCXR5cGUJCT0gJ21vdmUnOwoJCQkJCQkJCWQubm9zcGFtCT0gMTsKCQkJCQkJ
CQlkLmZvbGRlcgk9IG1haWxydS5Gb2xkZXIuSU5CT1g7CgkJCQkJCQkJaWYgKG1h
aWxydS5pc1JlYWRNc2cgJiYgbWFpbHJ1Lkxpc3RVbnN1YnNjcmliZUVuYWJsZWQg
JiYgTVswXS5MaXN0U3Vic2NyaWJlKQoJCQkJCQkJCQlkLnN1YnNjcmliZSA9IDE7
CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CS8vIElzIHNwYW0KCQkJCQkJ
CQkkRShkLCBkYXRhKTsKCQkJCQkJCQlkLmVtYWlsCQk9ICdbIicrIEFycmF5Lm1h
cChNLCBmdW5jdGlvbiAoWCl7IHJldHVybiBYLkZyb207IH0pLmpvaW4oJyIsIicp
ICsnIl0nOwoJCQkJCQkJCWQuY29uZmlybQk9ICdvbic7CgkJCQkJCQkJZC5mb2xk
ZXIJPSBGLmlzVHJhc2goKSA/ICcnIDogKChkLmRlbG9yaWcgPT0gJ29uJykgPyBt
YWlscnUuRm9sZGVyLkJVTEsgOiBNWzBdLkZvbGRlcklkKTsKCQkJCQkJCQlkLnNw
YW1hYnVzZQk9IDE7CgkJCQkJCQkJaWYgKHR5cGUgPT0gJ3Vuc3Vic2NyaWJlJykK
CQkJCQkJCQkJZC51bnN1YnNjcmliZSA9IDE7CgkJCQkJCQl9CgkJCQkJCX0KCQkJ
CQkJZWxzZSBpZiggRi5pc1RyYXNoKCkgJiYgKGRhdGEgPT0gRi5nZXRJZCgpKSAp
CgkJCQkJCXsJLy8gUmVtb3ZlIG1zZyBmcm9tIFRyYXNoIG9yIFNwYW0gZm9sZGVy
CgkJCQkJCQlkLnJlbW92ZQk9IDE7CgkJCQkJCQlkLmZvbGRlcgk9IC0xOwoJCQkJ
CQl9CgkJCQkJCWVsc2UgaWYgKCB0eXBlID09ICdyZW1vdmUnICkKCQkJCQkJewoJ
CQkJCQkJdHlwZSA9ICdtb3ZlJzsKCQkJCQkJCWQucmVtb3ZlID0gMTsgLy8gTUFJ
TC0xODY3PwoJCQkJCQkJZC5mb2xkZXIgPSBtYWlscnUuRm9sZGVyLlRSQVNICgkJ
CQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQlkLmZvbGRlcgk9IGRhdGE7
CgkJCQkJCX0KCgkJCQkJCS8vIE1BSUwtMTg2NwoJCQkJCQlpZiAodHlwZSA9PSAn
bW92ZScgJiYgZGF0YSA9PSBtYWlscnUuRm9sZGVyLlRSQVNIKSB7CgkJCQkJCQlk
LnJlbW92ZSA9IDE7CgkJCQkJCX0KCgkJCQkJCWlmKCBGLmlzVHJhc2goKSApIGQu
Y29uZmlybSA9ICdvbic7CgoJCQkJCQl2YXIgY20JPSBNLmxlbmd0aDsKCQkJCQkJ
dmFyIHVtCT0gMDsKCgkJCQkJCS8vIENoYW5nZSBmb2xkZXJJZCBhbmQgY2FsYyB1
bnJlYWQgbWVzc2FnZXMKCQkJCQkJQXJyYXkuZm9yRWFjaChNLCBmdW5jdGlvbiAo
WCl7CgkJCQkJCQlpZiggZC5mb2xkZXIgIT09ICcnICl7CgkJCQkJCQkJWC5Gb2xk
ZXJJZAk9ICh0eXBlID09ICdyZW1vdmUnICYmIGQuY29uZmlybSA9PSAnb24nKSA/
IC0xIDogZC5mb2xkZXI7CgkJCQkJCQkJdW0JKz0gWC5pc1VucmVhZCgpOwoJCQkJ
CQkJfQoJCQkJCQkJVmlldy5fc2NieCAmJiAoVmlldy5fc2NieFtYLklkXSA9IGZh
bHNlKTsgLy8gQEZpeE1lIHJlbW92ZSBzZWxlY3RlZCBzdGF0ZQoJCQkJCQl9KTsK
CgoJCQkJCQkvLyBSZWJ1aWxkIG1zZyBsaXN0IGJ5IGZvbGRlcklkCgkJCQkJCXZh
ciBhcnIgPSBbXSwgaSA9IDAsIGRlbGV0ZWQgPSAwOwoJCQkJCQlpZiggdGhpcy5m
b2xkZXJbRi5JZF0gJiYgKG1haWxydS5pc01zZ0xpc3RQYWdlKCkgfHwgbWFpbHJ1
LmlzUmVhZE1zZ1BhZ2UoKSkgKXsKCQkJCQkJCUFycmF5LmZvckVhY2godGhpcy5m
b2xkZXJbRi5JZF0sIGZ1bmN0aW9uIChYKXsKCQkJCQkJCQlpZiggWC5Gb2xkZXJJ
ZCA9PSBGLklkICl7CgkJCQkJCQkJCWFyci5wdXNoKFgpOwoJCQkJCQkJCQlpZigg
aSApewoJCQkJCQkJCQkJWC5QcmV2SWQgPSBhcnJbaS0xXS5JZDsKCQkJCQkJCQkJ
CWFycltpLTFdLk5leHRJZCA9IFguSWQ7CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxz
ZSB7CgkJCQkJCQkJCQlYLlByZXZJZCA9IFguTmV4SWQgPSAwOwoJCQkJCQkJCQl9
CgkJCQkJCQkJCWkrKzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJ
CWRlbGV0ZWQrKzsKCQkJCQkJCQl9CgkJCQkJCQl9KTsKCgkJCQkJCQlpZiggIW1h
aWxydS52MiAmJiBmYWxzZSApewoJCQkJCQkJCS8vIGZhbHNlIC0tIGh0dHBzOi8v
amlyYS5tYWlsLnJ1L2Jyb3dzZS9NQUlMLTE1NDMwCgkJCQkJCQkJLy8g0Y3RgtC+
0YIg0L/QsNGA0LDQvNC10YLRgCDQtNC+0LvQttC10L0g0L7QsdC90L7QstC70Y/R
gtGMIGNoZWNrbmV3CgkJCQkJCQkJdGhpcy5mb2xkZXJbRi5JZF0gPSBhcnI7CgkJ
CQkJCQl9CgkJCQkJCX0KCgkJCQkJCS8vINCe0YLQutGD0LTQsAoJCQkJCQlGLnNl
dCh7CgkJCQkJCQkgICdVbnJlYWQnOgkJTWF0aC5tYXgoRi5VbnJlYWQgLSB1bSwg
MCkKCQkJCQkJCSwgJ01lc3NhZ2VzJzoJTWF0aC5tYXgoRi5NZXNzYWdlcyAtIGNt
LCAwKQoJCQkJCQl9KTsKCgoJCQkJCQkvLyDQmtGD0LTQsAoJCQkJCQl2YXIgVCA9
IG1haWxydS5Gb2xkZXJzLmdldCggZC5mb2xkZXIgKTsKCQkJCQkJaWYoIFQgJiYg
KFQuSWQgPT0gTVswXS5Gb2xkZXJJZCkgKXsKCQkJCQkJCWlmKCBULmlzQnVsaygp
IHx8IChtYWlscnUucmVhZE1zZ0FmdGVyRGVsZXRlICYmIFQuaXNUcmFzaCgpKSAp
CgkJCQkJCQkgCXVtID0gMDsKCgkJCQkJCQlULnNldCh7CgkJCQkJCQkJICAnVW5y
ZWFkJzoJCU1hdGgubWF4KFQuVW5yZWFkICsgdW0sIDApCgkJCQkJCQkJLCAnTWVz
c2FnZXMnOglNYXRoLm1heChULk1lc3NhZ2VzICsgY20sIDApCgkJCQkJCQl9KTsK
CQkJCQkJfQoKCgkJCQkJCS8vIFJlbW92ZSBtZXNzYWdlcwoJCQkJCQlpZiggZGVs
ZXRlZCApewoJCQkJCQkJaWYgKG1haWxydS5pc1JlYWRNc2dQYWdlKCkpIHsgLy8g
TUFJTC0xMjE5NQoJCQkJCQkJCUFycmF5LmZvckVhY2goTSwgZnVuY3Rpb24gKE0p
IHsKCQkJCQkJCQkJJCgnIycrVmlldy5pZE1zZ1ByZWZpeCArIE0uSWQucmVwbGFj
ZSgvKDp8O3xcLikvZywgJ1xcJDEnKSkucmVtb3ZlKCk7CgkJCQkJCQkJfSk7CgkJ
CQkJCQl9IGVsc2UgewoJCQkJCQkJCWlmKCBWaWV3LiRDdXJTZWxDQlggKSBBcnJh
eS5mb3JFYWNoKFZpZXcuJEN1clNlbENCWCwgZnVuY3Rpb24gKGNieCl7CgkJCQkJ
CQkJCSQoJyMnK1ZpZXcuaWRNc2dQcmVmaXggKyBjYngudmFsdWUucmVwbGFjZSgv
KDp8O3xcLikvZywgJ1xcJDEnKSkuYWRkQ2xhc3MoJ21lc3NhZ2VsaW5lX2Rpc2Fi
bGVkJyk7CgkJCQkJCQkJfSk7CgkJCQkJCQl9CgkJCQkJCQlWaWV3LnNob3coW0Yu
SWQsIEYuSWRdKTsKCQkJCQkJfQoKCQkJCQkJLy8gU2V0IGFjdGl2ZSBmb2xkZXIK
CQkJCQkJbWFpbHJ1LkZvbGRlcnMuc2V0SWQoIEYuSWQsIHRydWUgKTsKCgkJCQkJ
CWlmKCBtYWlscnUuaXNSZWFkTXNnUGFnZSgpICl7CgkJCQkJCQl2YXIgbklkID0g
TVswXS5nZXQoJ05leHRJZCcpLCBmSWQgPSBtYWlscnUuZ2V0Rm9sZGVySWQoKTsK
CgkJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uICgpewoJCQkJCQkJCW1haWxydS5V
cGRhdGVyLnN0b3AoKTsKCgkJCQkJCQkJdmFyIHVybCA9ICcvbWVzc2FnZXMnLCBp
ZCA9IGZJZDsKCQkJCQkJCQlzd2l0Y2ggKHBhcnNlSW50KGlkLDEwKSkgewoJCQkJ
CQkJCQljYXNlIDAJICAgIDogdXJsICs9ICcvaW5ib3gnOyBicmVhazsKCQkJCQkJ
CQkJY2FzZSA5NTAgICAgOiB1cmwgKz0gJy9zcGFtJzsgYnJlYWs7CgkJCQkJCQkJ
CWNhc2UgNTAwMDAwIDogdXJsICs9ICcvc2VudCc7IGJyZWFrOwoJCQkJCQkJCQlj
YXNlIDUwMDAwMSA6IHVybCArPSAnL2RyYWZ0cyc7IGJyZWFrOwoJCQkJCQkJCQlj
YXNlIDUwMDAwMiA6IHVybCArPSAnL3RyYXNoJzsgYnJlYWs7CgkJCQkJCQkJCWNh
c2UgNTAwMDAzIDoKCQkJCQkJCQkJY2FzZSA1MDAwMDUgOiB1cmwgPSAnL2FnZW50
L2FyY2hpdmUnOyBicmVhazsKCQkJCQkJCQkJZGVmYXVsdCAgICAgOiB1cmwgKz0g
Jy9mb2xkZXIvJyArIGlkOwoJCQkJCQkJCX0KCgkJCQkJCQkJLyoqIEBuYW1lc3Bh
Y2UgbWFpbHJ1Lm1zZ0xpc3RBZnRlckRlbGV0ZSAtLSByZXR1cm4gdG8gY3VycmVu
dCBmb2xkZXIgKi8KCQkJCQkJCQlpZiggKHR5cGUgPT0gJ3NwYW0nIHx8IHR5cGUg
PT0gJ3Vuc3Vic2NyaWJlJykgJiYgKG1haWxydS5tc2dMaXN0QWZ0ZXJEZWxldGUg
fHwgIW5JZCkgKXsKCQkJCQkJCQkJanNIaXN0b3J5LnNldCh1cmwpOwoJCQkJCQkJ
CX0KCQkJCQkJCQllbHNlIGlmKCAhbklkIHx8ICh0eXBlID09ICdtb3ZlJyAmJiBU
ICYmIFQuaXNUcmFzaCgpICYmIG1haWxydS5tc2dMaXN0QWZ0ZXJEZWxldGUpICl7
CgkJCQkJCQkJCWpzSGlzdG9yeS5zZXQodXJsKTsKCQkJCQkJCQl9CgkJCQkJCQkJ
ZWxzZSB7CgkJCQkJCQkJCWpzSGlzdG9yeS5zZXQobWFpbHJ1LmdldFBhZ2VVUkwo
J3JlYWRtc2cnLCB7IGlkOiBuSWQgfSkpOwoJCQkJCQkJCX0KCgkJCQkJCQkJbWFp
bHJ1LlVwZGF0ZXIuc3RhcnQoKTsKCQkJCQkJCX0sIDUpOwoJCQkJCQl9CgkJCQkJ
fQoKCQkJCQlpZiAoZGF0YSA9PSAnZmlsZUluQXJjaGl2ZScpIHsKCQkJCQkJdSA9
ICcvY2dpLWJpbi9maWxlc2VhcmNoX2FqYXg/ZnVuY19uYW1lPWFqYXhfaGlkZSc7
CgkJCQkJfSBlbHNlIGlmIChkYXRhID09ICdmaWxlRnJvbUFyY2hpdmUnKSB7CgkJ
CQkJCXUgPSAnL2NnaS1iaW4vZmlsZXNlYXJjaF9hamF4P2Z1bmNfbmFtZT1hamF4
X3VuaGlkZSc7CgkJCQkJfSBlbHNlIHsKCQkJCQkJdSA9ICh0eXBlICE9ICdzcGFt
JyAmJiB0eXBlICE9ICd1bnN1YnNjcmliZScpID8gJy9jZ2ktYmluL21vdmVtc2cn
IDogJy9jZ2ktYmluL3NwYW1hYnVzZSc7CgkJCQkJfQoKCQkJCQlkLmlkCT0gaWQ7
CgkJCQkJZFt0eXBlXQk9IDE7CgkJCQl9CgkJCQlicmVhazsKCgkJCQljYXNlICdF
eHBhbmRNb2RlJzoKCQkJCQl1CT0gJy9jZ2ktYmluL2FqYXhfYXZhdGFyc3RhdC8/
ZnVuY19uYW1lPXNldF9leHBhbmRlZF9tc2dsaXN0JmRhdGE9WyInKyArZGF0YSAr
JyJdJzsKCQkJCQlzbAk9IDA7CgkJCQkJcgk9IHRydWU7CgkJCQlicmVhazsKCQkJ
fQoKCQkJaWYoIHUgKXsKCQkJCS8vIFNlbmQgYWpheCBhY3Rpb24KCQkJCWlmKCBz
bCA9PSAnbW92ZScgKXsKCQkJCQlpZiggTVswXS5Gb2xkZXJJZCA9PSBtYWlscnUu
Rm9sZGVyLlRSQVNIICkgc2wgPSAnbW92ZTJUcmFzaCc7CgkJCQkJZWxzZSBpZigg
TVswXS5Gb2xkZXJJZCA9PSAtMSApIHNsID0gJ3JlbW92ZSc7CgkJCQl9IGVsc2Ug
aWYoIHNsID09ICdtYXJrJyAmJiBjb3VudFByb2Nlc3NpbmcgPCAyICl7CgkJCQkJ
c2wJPSAwOwoJCQkJfQoKCQkJCXZhciB0eHQgPSBjb3VudFByb2Nlc3NpbmcgPyBM
YW5nLmdldCgnTWVzc2FnZXMnKS5BY3Rpb25zW3NsXSA6IDA7CgoJCQkJaWYoIHR4
dCAmJiBjb3VudFByb2Nlc3NpbmcgKXsKCQkJCQlpZiggc2wgPT0gJ21hcmsnICl7
CgkJCQkJCXR4dCA9IHR4dC5yZXBsYWNlKCclcycsIFN0cmluZy5udW0oY291bnRQ
cm9jZXNzaW5nLCBMYW5nLmdldCgnTWVzc2FnZXMnKS5sZXR0ZXIsICcgJykpOwoJ
CQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJaWYgKGRhdGEgPT0gJ2ZpbGVJbkFyY2hp
dmUnIHx8IGRhdGEgPT0gJ2ZpbGVGcm9tQXJjaGl2ZScpIHsKCQkJCQkJCXR4dCA9
IFN0cmluZy5udW0oY291bnRQcm9jZXNzaW5nLCBMYW5nLmdldCgnRmlsZXMnKS5m
aWxlLCAnICcpICsgJyAnICsKCQkJCQkJCQkgIFN0cmluZy5udW0oY291bnRQcm9j
ZXNzaW5nLCBMYW5nLmdldCgnRmlsZXMnKS5BY3Rpb25zW2RhdGFdKTsKCQkJCQkJ
fQoJCQkJCQllbHNlIGlmICggc2wgIT0gJ3Vuc3Vic2NyaWJlJyApIHsKCQkJCQkJ
CXZhciBsZXR0ZXJzID0gU3RyaW5nLm51bShjb3VudFByb2Nlc3NpbmcsIExhbmcu
Z2V0KCdNZXNzYWdlcycpLmxldHRlciwgKHNsICE9ICdyZW1vdmUnICYmIGNvdW50
UHJvY2Vzc2luZyA9PSAxKSA/IGZhbHNlIDogJyAnKTsKCgkJCQkJCQl0eHQgPSB0
eHQucmVwbGFjZSgnJXMnLCBTdHJpbmcudWNmaXJzdChsZXR0ZXJzKSk7CgoJCQkJ
CQkJaWYgKCBzbCA9PSAnbW92ZScgfHwgc2wgPT0gJ3NwYW0nICkgewoJCQkJCQkJ
CXZhciBmb2xkZXIgPSBtYWlscnUuRm9sZGVycy5nZXQoTVswXS5Gb2xkZXJJZCwg
ewoJCQkJCQkJCQlOYW1lOiBMYW5nLmdldCgnZm9sZGVycy5uYW1lcycpW3NsXQoJ
CQkJCQkJCX0pOwoKCQkJCQkJCQl0eHQgPSB0eHQucmVwbGFjZSgnJXMnLCBhanMu
SHRtbC5lc2NhcGUoZm9sZGVyLk5hbWUpKTsKCQkJCQkJCX0KCQkJCQkJfQoKCQkJ
CQkJVmlldy5zdGF0dXNMaW5lKCdhbGVydCcsIHR4dCk7CgkJCQkJfQoJCQkJfQoK
CQkJCWQubm9yZWRpcgk9CgkJCQlkLmFqYXhtb2RlCT0KCQkJCWQuYWpheF9jYWxs
CT0gMTsKCgkJCQlpZiggciAmJiBtYWlscnUuVXBkYXRlciApewoJCQkJCS8vIFN0
b3AgdXBkYXRlcgoJCQkJCS8vIE1BSUwtMTA3NTUgKGRpc2FibGVkKSAtLSBtYWls
cnUuVXBkYXRlci5zdG9wKCk7CgkJCQl9CgoJCQkJLy8gQWJvcnQgIlVwZGF0ZXIi
IGlmIGhpbSBydW5uaW5nCgkJCQltYWlscnUuVXBkYXRlci5hYm9ydCgpOwoKCQkJ
CW1haWxydS5BUEkuYWpheCh7CgkJCQkJICB1cmw6IHUKCQkJCQksIHR5cGU6ICdQ
T1NUJwoJCQkJCSwgZGF0YTogZAoJCQkJCSwgaXNVc2VyOiBpc1VzZXIKCQkJCQks
IGNvbXBsZXRlOiB0aGlzLl9lZGl0Q29tcGxldGUuYmluZCh0aGlzLCB7CgkJCQkJ
CQkJCSAgaWRzOiBpZAoJCQkJCQkJCQksIHJlbG9hZDogcgoJCQkJCQkJCQksIHRl
eHQ6IHR4dAoJCQkJCQkJCQksIHR5cGU6IHR5cGUKCQkJCQkJCQkJLCBhcmdzOiBf
YXJncwoJCQkJCQkJCQksIGJucnM6IHJlbG9hZEJhbm5lcnMKCQkJCQkJCQkJLCBj
b21wbGV0ZTogY29tcGxldGUKCQkJCQkJCQl9KQoJCQkJfSk7CgkJCX0KCgkJCXJl
dHVybgljb3VudFByb2Nlc3Npbmc7CgkJfSwKCgkJX2VkaXRDb21wbGV0ZTogZnVu
Y3Rpb24gKG9wdHMsIFIpewoJCQlpZiggb3B0cy5yZWxvYWQgJiYgbWFpbHJ1LlVw
ZGF0ZXIgKXsKCQkJCWlmKCBtYWlscnUuaXNNc2dMaXN0UGFnZSgpICl7CgkJCQkJ
Ly8gU3RhcnQgdXBkYXRlcgoJCQkJCWNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVy
SWQpOwoJCQkJCXRoaXMuX3VwZGF0ZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24g
KCl7CgkJCQkJCWlmKCB+J21hcmsgcmVhZCcuaW5kZXhPZihvcHRzLnR5cGUpICl7
CgkJCQkJCQltYWlscnUuQmFubmVycy5WaWV3LnJlbG9hZCgpOwoJCQkJCQl9IGVs
c2UgewoJCQkJCQkJbWFpbHJ1LlVwZGF0ZXIuc3RhcnQobWFpbHJ1LmlzTXNnTGlz
dFBhZ2UoKSwgeyBibnJzOiBvcHRzLmJucnMgPyAnWScgOiAnTicgfSk7CgkJCQkJ
CX0KCQkJCQl9LCA1MDApOwoJCQkJfQoKCQkJCWlmKCBtYWlscnUuaXNSZWFkTXNn
UGFnZSgpICl7CgkJCQkJaWYoICFtYWlscnUudGhyZWFkcyAmJiB+J21vdmUgcmVt
b3ZlIHNwYW0nLmluZGV4T2Yob3B0cy50eXBlKSApewoJCQkJCQl0aGlzLmxvYWQo
YWpzLmV4dGVuZCh7IGZvcmNlOiB0cnVlIH0sIEdFVCkpOwoJCQkJCX0KCQkJCX0K
CQkJCWVsc2UgaWYoIChtYWlscnUuaXNTZWFyY2hQYWdlKCkgfHwgbWFpbHJ1Lmlz
RmlsdGVyRm9sZGVyKCkpICYmICFtYWlscnUudjIgKXsKCQkJCQl0aGlzLmxvYWRT
ZWFyY2goR0VULCB0cnVlLCB0cnVlKTsKCQkJCX0KCQkJCWVsc2UgaWYgKG1haWxy
dS5pc0ZpbGVTZWFyY2hQYWdlKCkpIHsKCQkJCQl0aGlzLmxvYWRGaWxlc1NlYXJj
aChHRVQsIHRydWUsIHRydWUpOwoJCQkJfQoJCQl9CgoJCQlpZiggUi5pc0FjY2Vz
c0RlbmllZCgpICl7CgkJCQltYWlscnUuTGF5ZXJzLnNlY3VyZShSLmdldERhdGEo
KS5Gb2xkZXIsIGZ1bmN0aW9uIChhY2Nlc3MpewoJCQkJCXZhciAkTGlzdCA9IG1h
aWxydS5WaWV3Lk1lc3NhZ2VzLmdldEFjdGl2ZSgpLmdldFZpZXcoKS5maW5kKCcu
bWVzc2FnZWxpbmVfZGlzYWJsZWQnKTsKCQkJCQlpZiggYWNjZXNzICl7CgkJCQkJ
CS8vIFJldHJ5IHJlcXVlc3QKCQkJCQkJdGhpcy5lZGl0LmFwcGx5KHRoaXMsIG9w
dHMuYXJncyk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJExpc3QucmVtb3ZlQ2xhc3Mo
J21lc3NhZ2VsaW5lX2Rpc2FibGVkJyk7CgkJCQkJfQoJCQkJfS5iaW5kKHRoaXMp
KTsKCQkJfQoJCQllbHNlIGlmKCBSLmlzT0soKSApIHsKCQkJCW1haWxydS5Gb2xk
ZXJzLnRyYW5zYWN0aW9uKGZhbHNlKTsKCgkJCQlpZiggb3B0cy50ZXh0ICl7CgkJ
CQkJbWFpbHJ1Lk5vdGlmeS5hZGQoJ29rJywgeyB0ZXh0OiBvcHRzLnRleHQsIGdy
b3VwOiAnbW92ZScgfSk7CgkJCQl9CgkJCX0KCgkJCW1haWxydS5Gb2xkZXJzLnJv
bGxiYWNrKCk7CgoJCQkob3B0cy5jb21wbGV0ZSB8fCBhanMuRikuY2FsbCh0aGlz
LCBSKTsKCQkJJCh3aW5kb3cpLnRyaWdnZXIoJ2NvbXBsZXRlLW1vdmVtc2cubWFp
bHJ1JywgW1IsIG9wdHNdKTsKCQl9LAoKCgkJZm9yRWFjaDogZnVuY3Rpb24gKGlk
cywgZnVuYywgVGhpcyl7CgkJCXZhciBpID0gMCwgbiA9IGlkcy5sZW5ndGgsIE07
CgkJCWZvciggOyBpIDwgbjsgaSsrICkgaWYoIE0gPSBtYWlscnUuTWVzc2FnZXMu
Z2V0KGlkc1tpXSkgKXsKCQkJCWZ1bmMuY2FsbChUaGlzLCBNLCBpKTsKCQkJfQoJ
CX0sCgoJCW1hcDogZnVuY3Rpb24gKGlkcywgZnVuYywgVGhpcyl7CgkJCXZhciBy
ZXN1bHQgPSBbXTsKCQkJdGhpcy5mb3JFYWNoKGlkcywgZnVuY3Rpb24gKE0peyBy
ZXN1bHQucHVzaCggZnVuYy5jYWxsKFRoaXMsIE0pICk7IH0pOwoJCQlyZXR1cm4J
cmVzdWx0OwoJCX0sCgoJCWhhc0NhY2hlOiBmdW5jdGlvbiAocGFyYW1zKXsKCQkJ
dmFyIE0gPSB0aGlzLmdldChwYXJhbXMuaWQpOwoJCQlyZXR1cm4JTSAmJiBNLmlz
TG9hZGVkKCk7CgkJfSwKCgkJY29udmVydFRocmVhZHM6IGZ1bmN0aW9uIChhcnJh
eSl7CgkJCXZhciByZXQgPSBbXSwgaSA9IDAsIG4gPSBhcnJheS5sZW5ndGgsIG1z
ZywgZGF0ZSwgZW1haWxzLCBmbGFnczsKCgkJCWZvciggOyBpIDwgbjsgaSArPSAx
ICl7CgkJCQltc2cJCT0gYXJyYXlbaV07CgkJCQlkYXRlCT0gRGF0ZS5wYXJzZSht
c2cuZGF0ZSAqIDEwMDApOwoJCQkJZmxhZ3MJPSBtc2cuZmxhZ3M7CgkJCQllbWFp
bHMJPSBtc2cuY29ycmVzcG9uZGVudHM7CgoJCQkJcmV0W2ldID0gewoJCQkJCSAg
SWQ6CQkJbXNnLmlkCgkJCQkJLCBTUEY6CQkJYWpzLmlzc2V0KGZsYWdzLnNwZiwg
dHJ1ZSkKCQkJCQksIEZvbGRlcklkOgkJbXNnLmZvbGRlcgoJCQkJCSwgUHJldklk
OgkJbXNnLnByZXYKCQkJCQksIE5leHRJZDoJCW1zZy5uZXh0CgkJCQkJLCBVbnJl
YWQ6CQlmbGFncy51bnJlYWQKCQkJCQksIEZsYWdnZWQ6CQlmbGFncy5mbGFnZ2Vk
CgkJCQkJLCBQcmlvcml0eToJCW1zZy5wcmlvcml0eSB8fCAzCgkJCQkJLCBSZXBs
eToJCWZsYWdzLnJlcGx5CgkJCQkJLCBGb3J3YXJkOgkJZmxhZ3MuZm9yd2FyZAoJ
CQkJCSwgQXR0YWNobWVudDoJZmxhZ3MuYXR0YWNoCgkJCQkJLCBGcm9tOgkJCWVt
YWlscy5mcm9tWzBdICYmIGVtYWlscy5mcm9tWzBdLmVtYWlsCgkJCQkJLCBGcm9t
TGlzdDoJCWFqcy5tYXAoZW1haWxzLmZyb20sIGZ1bmN0aW9uIChpdGVtKXsgcmV0
dXJuIGl0ZW0ubmFtZSsnIDwnK2l0ZW0uZW1haWwrJz4nOyB9KS5qb2luKCcsICcp
CgkJCQkJLCBGcm9tU2hvcnQ6CWFqcy5tYXAoZW1haWxzLmZyb20sIGZ1bmN0aW9u
IChpdGVtKXsgcmV0dXJuIGl0ZW0ubmFtZSB8fCBpdGVtLmVtYWlsOyB9KS5qb2lu
KCcsICcpCgkJCQkJLCBUbzoJCQllbWFpbHMudG9bMF0gJiYgZW1haWxzLnRvWzBd
LmVtYWlsCgkJCQkJLCBUb0xpc3Q6CQlhanMubWFwKGVtYWlscy50bywgZnVuY3Rp
b24gKGl0ZW0peyByZXR1cm4gaXRlbS5uYW1lKycgPCcraXRlbS5lbWFpbCsnPic7
IH0pLmpvaW4oJywgJykKCQkJCQksIFRvU2hvcnQ6CQlhanMubWFwKGVtYWlscy50
bywgZnVuY3Rpb24gKGl0ZW0peyByZXR1cm4gaXRlbS5uYW1lIHx8IGl0ZW0uZW1h
aWw7IH0pLmpvaW4oJywgJykKCQkJCQksIENjOgkJCWFqcy5tYXAoZW1haWxzLmNj
LCBmdW5jdGlvbiAoaXRlbSl7IHJldHVybiBpdGVtLm5hbWUrJyA8JytpdGVtLmVt
YWlsKyc+JzsgfSkuam9pbignLCAnKQoJCQkJCSwgRGF0ZToJCQlkYXRlLmZvcm1h
dCgnZCBuIFksIEg6SScpCgkJCQkJLCBEYXRlU2hvcnQ6CWRhdGUuaXNUb2RheSgp
ID8gZGF0ZS5mb3JtYXQoJ0g6SScpIDogZGF0ZS5mb3JtYXQoJ2QgbicpCgkJCQkJ
LCBEYXRlVVRTOgkJbXNnLmRhdGUKCQkJCQksIFN1YmplY3Q6CQltc2cuc3ViamVj
dAoJCQkJCSwgUmVTZW50VG86CQkiIgoJCQkJCSwgUmVTZW50RnJvbToJIiIKCQkJ
CQksIFJlU2VudERhdGU6CSIiCgkJCQkJLCBSZVNlbmRDb21tZW50OiIiCgkJCQkJ
LCBJY29Gcm9tV2hvOgkiIgoJCQkJCSwgU2l6ZToJCQltc2cuc2l6ZQoJCQkJCSwg
RmlsaW5OOgkJMAoJCQkJCSwgRmlsaW5FTToJCTAKCQkJCQksIE1pY3JvZm9ybWF0
Ogl7IHRleHQ6IG1zZy5zbmlwcGV0IH0KCQkJCQksIEF2YXRhclVybDoJZW1haWxz
WzBdICYmIGVtYWlsc1swXS5hdmF0YXJzICYmIGVtYWlsc1swXS5hdmF0YXJzWydk
ZWZhdWx0J10KCgkJCQkJLCB0aHJlYWQ6CQltc2cuaWQKCQkJCQksIHRocmVhZExl
bmd0aDoJbXNnLmxlbmd0aAoJCQkJfTsKCQkJfQoKCQkJcmV0dXJuCXJldDsKCQl9
CgoJfSk7CgkvLyBtYWlscnUuTWVzc2FnZXMKCgoKCW1haWxydS5NZXNzYWdlcy5z
YXZlQ29tcGFjdFZpZXdTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSl7CgkJZnVuY3Rp
b24gc2F2ZUNvbXBhY3RNb2RlKG1vZGUsIGZvcm1fc2lnbiwgZm9ybV90b2tlbikg
ewoJCQltYWlscnUuQWpheCh7CgkJCQl1cmw6ICcvc2V0dGluZ3MvYWpheF9zZXR0
aW5ncz9hamF4X2NhbGw9MSZmdW5jX25hbWU9c2V0X21zZ2xpc3RmbGFncyZmbGFn
PWNvbXBhY3RfbXNnbGlzdCZ2YWw9JyArIG1vZGUsCgkJCQl0eXBlOiAnR0VUJywK
CQkJCWRhdGE6IHsgZm9ybV9zaWduOiAgZm9ybV9zaWduLCBmb3JtX3Rva2VuOiBm
b3JtX3Rva2VuIH0KCQkJfSk7CgkJfQoKCQl2YXIgdG9rZW5zID0gbWFpbHJ1LnRv
a2Vuc1snYWpheF9zZXR0aW5ncyddOwoJCWlmKCB0b2tlbnMgJiYgdG9rZW5zWydm
b3JtX3NpZ24nXSAmJiB0b2tlbnNbJ2Zvcm1fdG9rZW4nXSApewoJCQlzYXZlQ29t
cGFjdE1vZGUoKyEhc3RhdGUsIHRva2Vuc1snZm9ybV9zaWduJ10sIHRva2Vuc1sn
Zm9ybV90b2tlbiddKTsKCQl9CgkJZWxzZSB7CgkJCW1haWxydS5BUEkucG9zdCgn
dG9rZW5zJywgZnVuY3Rpb24gKHJlc3VsdCl7CgkJCQlpZiggcmVzdWx0LmlzT0so
KSApewoJCQkJCXZhciB0b2tlbnMgPSBTdHJpbmcocmVzdWx0LmdldEJvZHkoKS50
b2tlbikuc3BsaXQoJzonKTsKCQkJCQltYWlscnUudG9rZW5zWydhamF4X3NldHRp
bmdzJ10gPSB7IGZvcm1fc2lnbjogdG9rZW5zWzBdLCBmb3JtX3Rva2VuOiB0b2tl
bnNbMV0gfTsKCQkJCQlzYXZlQ29tcGFjdE1vZGUoKyEhc3RhdGUsIHRva2Vuc1sw
XSwgdG9rZW5zWzFdKTsKCQkJCX0KCQkJfSk7CgkJfQoKCQkkKHdpbmRvdykudHJp
Z2dlckhhbmRsZXIoJ2NoYW5nZU1vZGVDbGljay5tc2dsaXN0JywgW3N0YXRlXSk7
Cgl9OwoKCgoJLyogfn5+IE1BSUxSVSAgLVYyLSAgTUVUSE9EUyB+fn4gKi8KCW1h
aWxydS5NZXNzYWdlcy5maW5kID0gZnVuY3Rpb24gKGRhdGEpewoJCXZhcgoJCQkg
IGZvbGRlcklkID0gZGF0YS5mb2xkZXIqMXwwCgkJCSwgcGFnZSA9IE1hdGgubWF4
KGRhdGEucGFnZSoxfDAsIDEpCgkJCSwgZGYgPSAkLkRlZmVycmVkKCkKCQkJLCB1
aWQgPSBhanMudW5pcUlkKCkKCQk7CgoJCWlmKCBkYXRhLmlkICl7CgkJCS8vIEZp
bmQgYnkgaWQKCQkJdmFyIG1zZyA9IG1haWxydS5NZXNzYWdlcy5nZXQoZGF0YS5p
ZCk7CgkJCWlmKCBtc2cgJiYgbXNnLmlzTG9hZGVkKCkgKXsKCQkJCWRmLnJlc29s
dmUobXNnKTsKCQkJfQoJCQllbHNlIHsKCQkJCW1haWxydS5FdmVudHMKCQkJCQku
dW5iaW5kKCdsb2FkZWQubWVzc2FnZXMuJyt1aWQpCgkJCQkJLmJpbmQoJ2xvYWRl
ZC5tZXNzYWdlcy4nK3VpZCwgZnVuY3Rpb24gKCl7CgkJCQkJCXZhciBtc2cgPSBt
YWlscnUuTWVzc2FnZXMuZ2V0KGRhdGEuaWQpOwoKCQkJCQkJaWYoIG1zZyAmJiBt
c2cuaXNMb2FkZWQoKSApewoJCQkJCQkJZGYucmVzb2x2ZShtc2cpOwoJCQkJCQkJ
bWFpbHJ1LkV2ZW50cy51bmJpbmQoJ2xvYWRlZC5tZXNzYWdlcy4nK3VpZCk7CgkJ
CQkJCX0KCQkJCQl9KQoJCQkJOwoKCQkJCW1haWxydS5NZXNzYWdlcy5sb2FkKCBk
YXRhLCB2b2lkIDAsIGRhdGEucmVhZCApOwoJCQl9CgkJfQoJCWVsc2UgewoJCQkv
LyBGaW5kIG1lc3NhZ2VzCgkJCWlmKCAhbWFpbHJ1LkZvbGRlcnMuaGFzQ2FjaGUo
Zm9sZGVySWQsIHBhZ2UpICl7CgkJCQltYWlscnUuRXZlbnRzCgkJCQkJLnVuYmlu
ZCgnc3RvcC51cGRhdGVyLnYyLW1lc3NhZ2VzLWZpbmQnKQoJCQkJCS5vbmUoJ3N0
b3AudXBkYXRlci52Mi1tZXNzYWdlcy1maW5kJywgZnVuY3Rpb24gKCl7CgkJCQkJ
CWlmKCBtYWlscnUuRm9sZGVycy5oYXNDYWNoZShmb2xkZXJJZCwgcGFnZSkgKXsK
CQkJCQkJCWRmLnJlc29sdmUoIG1haWxydS5NZXNzYWdlcy5nZXRCeUZvbGRlcihm
b2xkZXJJZCwgcGFnZSkgKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWRmLnJlamVj
dCgpOwoJCQkJCQl9CgkJCQkJfSkKCQkJCTsKCgkJCQlpZiggIW1haWxydS5VcGRh
dGVyLmFjdGl2ZSApewoJCQkJCW1haWxydS5VcGRhdGVyLnJlbG9hZCh0cnVlKTsK
CQkJCX0KCQkJfSBlbHNlIHsKCQkJCWRmLnJlc29sdmUobWFpbHJ1Lk1lc3NhZ2Vz
LmdldEJ5Rm9sZGVyKGZvbGRlcklkLCBwYWdlKSk7CgkJCX0KCQl9CgoJCXJldHVy
bglkZjsKCX07CgoKCWpzTG9hZGVyLmxvYWRlZCgne21haWxydX1tYWlscnUuTWVz
c2FnZXMnLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L21haWxydS5NZXNz
YWdlcy5qcyBlbmQKCihmdW5jdGlvbiAoJCwgbWFpbHJ1LCB1bmRlZil7CgkJd2lu
ZG93LmZpeGVkRG9jdW1lbnRXcml0ZSA9IGZ1bmN0aW9uIChkKXsKCQkJaWYoIGQu
cGFyc2VXcml0ZSA9PT0gdW5kZWYgKXsKCQkJCWQuY2xvc2UJCT0gZnVuY3Rpb24g
KCl7fTsKCQkJCWQub3BlbgkJPSBmdW5jdGlvbiAoaHRtbCl7CgkJCQkJdmFyIGlk
CQk9ICd1Jysgbm93KCksIHAgPSBodG1sLmluZGV4T2YoJzxzY3JpcHQnKTsKCQkJ
CQlkLl9fd3JpdGUJPSBpZDsKCQkJCQlkW2lkXQkJPSAnJzsKCgkJCQkJaWYoIHAg
IT09IC0xICkKCQkJCQkJaHRtbCA9IGh0bWwuc3Vic3RyKDAsIHApICsnPHNwYW4g
aWQ9IicraWQrJyI+PC9zcGFuPicgKyBodG1sLnN1YnN0cihwKTsKCgkJCQkJcmV0
dXJuCWh0bWw7CgkJCQl9OwoKCQkJCWQud3JpdGUJCT0KCQkJCWQud3JpdGVsbgk9
IGZ1bmN0aW9uIChzdHIpewoJCQkJCXZhciBpZCA9IGQuX193cml0ZTsKCQkJCQlk
W2lkXSArPSBzdHI7CgkJCQkJY2xlYXJUaW1lb3V0KGQuX193cml0ZUlkKTsKCQkJ
CQlkLl9fd3JpdGVJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkKCQkJCQl7CgkJ
CQkJCSQoJyMnK2lkKS5hcHBlbmQoZFtpZF0pOwoJCQkJCQlkW2lkXSA9ICcnOwoJ
CQkJCX0sIDUwKTsKCQkJCX07CgoKCQkJCXZhcgoJCQkJCV9yc2NyaXB0UyA9IC8o
PHNjcmlwdFtePl0qPilccyooPCEtLXxcL1wvXHMqPCFcW0NEQVRBXFspL2dpLAoJ
CQkJCV9yc2NyaXB0RSA9IC9cL1wvXHMqKC0tPnxcXVxdPilccyooPFwvc2NyaXB0
PikvZ2kKCQkJCTsKCgkJCQlkLnBhcnNlV3JpdGUgPSBmdW5jdGlvbiAoaCl7CgkJ
CQkJdmFyIHUgPSAndScrIGFqcy5ub3coKTsKCgkJCQkJaCA9IGgucmVwbGFjZShf
cnNjcmlwdFMsICckMScpLnJlcGxhY2UoX3JzY3JpcHRFLCAnJDInKTsKCQkJCQlo
ID0gKCc8c2NyaXB0PndpbmRvdy4nKyB1ICsnID0gIiI7PC9zY3JpcHQ+JwoJCQkJ
CQkrIGgucmVwbGFjZSgvXHcrXC53cml0ZShsbik/XCgvaWcsIHUrJys9KCcpLnJl
cGxhY2UoLzxub3NjcmlwdD4vaWcsICc8IS0tJykucmVwbGFjZSgvPFwvbm9zY3Jp
cHQ+L2lnLCAnLS0+JykKCQkJCQkJKyAnPHNwYW4gaWQ9IicrdSsnIj48L3NwYW4+
PHNjcmlwdD5qUXVlcnkoIiMnK3UrJyIpLmFwcGVuZCgnK3UrJyk7PC9zY3JpcHQ+
Jyk7CgoJCQkJCXJldHVybgloOwoJCQkJfTsKCQkJfQoJCX07CgoKCQl2YXIgJFNj
cm9sbCA9IHdpbmRvdy4kU2Nyb2xsID0gJCh3aW5kb3cpOyAvLyBEZWZpbmUgZ2xv
YmFsIHNjcm9sbAoKCQl3aW5kb3cucmVwbGFjZUhhc2ggPQoJCQl7CgkJCQlzaW1i
OiB7ICBxdW90OiAnIicsIGFtcDogJyYnLCBsdDogJzwnLCBndDogJz4nIH0sCgkJ
CQljb2RlOiB7ICcwMzcnOiAnJScsICcwMzknOiAnXCcnLCAnMzknOiAnXCcnLCAn
OTInIDogJ1xcJywgJzM1JyA6ICcjJyB9CgkJCX07CgoJCXdpbmRvdy5yZXBsYWNl
RW50aXR5ID0gZnVuY3Rpb24oc3RyKQoJCQl7CgkJCQlyZXR1cm4gc3RyID09IG51
bGwgPyAnJyA6IHN0ci50b1N0cmluZygpCgkJCQkJLnJlcGxhY2UoLyhcJihxdW90
fGFtcHxsdHxndClcOykvZywgZnVuY3Rpb24oJDAsICQxLCAkMikgewoJCQkJCQly
ZXR1cm4gcmVwbGFjZUhhc2guc2ltYlskMl0gIT0gdW5kZWYgPyByZXBsYWNlSGFz
aC5zaW1iWyQyXSA6ICQxOwoJCQkJCX0pCgkJCQkJLnJlcGxhY2UoLyhcJlwjKDAz
N3wwMzl8Mzl8OTJ8MzUpXDspL2csIGZ1bmN0aW9uKCQwLCAkMSwgJDIpIHsKCQkJ
CQkJcmV0dXJuIHJlcGxhY2VIYXNoLmNvZGVbJDJdICE9IHVuZGVmID8gcmVwbGFj
ZUhhc2guY29kZVskMl0gOiAkMTsKCQkJCQl9KTsKCQkJfTsKCgkJd2luZG93LnJl
dHVybkVudGl0eSA9IGZ1bmN0aW9uKHN0cikKCQkJewoJCQkJcmV0dXJuIHN0cgoJ
CQkJCS5yZXBsYWNlKC8mL2csICImYW1wOyIpCgkJCQkJLnJlcGxhY2UoL1wjL2cs
ICImIzM1OyIpCgkJCQkJLnJlcGxhY2UoLzwvZywgIiZsdDsiKQoJCQkJCS5yZXBs
YWNlKC8+L2csICImZ3Q7IikKCQkJCQkucmVwbGFjZSgvIi9nLCAiJnF1b3Q7IikK
CQkJCQkucmVwbGFjZSgvKFwmbHRcO3diclwvXCZndFw7KS9nLCAiPHdici8+IikK
CQkJCQkucmVwbGFjZSgvKFwmYW1wXDtcJlwjMzVcOzgyMDNcOykvZywgIiYjODIw
MzsiKQoJCQkJCS5yZXBsYWNlKC9cJy9nLCAiJiMwMzk7IikKCQkJCQkucmVwbGFj
ZSgvXFwvZywgIiYjOTI7IikKCQkJCQkucmVwbGFjZSgvXCUvZywgIiYjMzc7Iik7
CgkJCX07CgoJCXdpbmRvdy53YnJEZWxpbWV0ZXIgPSBuYXZpZ2F0b3IudXNlckFn
ZW50LmluZGV4T2YoJ01TSUUnKSAhPSAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50
LmluZGV4T2YoJ1RyaWRlbnQnKSAhPSAtMSA/ICcmIzgyMDM7JyA6ICc8d2JyLz4n
OwoJCXdpbmRvdy53YnJTcGxpdCA9IGZ1bmN0aW9uKHN0ciwgcGVyaW9kKXsKCQkJ
dmFyIGMgPSAwLCByID0gW10sIGkgPSAwLCBuID0gc3RyLmxlbmd0aCwgczsKCQkJ
Zm9yKCA7IGkgPCBuOyBpKysgKQoJCQl7CgkJCQlzID0gc3RyLmNoYXJBdChpKTsK
CQkJCWlmKCBzLm1hdGNoKC9ccy8pICkJYyA9IDA7IGVsc2UgYysrOwoJCQkJaWYo
IGMgPj0gcGVyaW9kICkJeyBzICs9IHdickRlbGltZXRlcjsgYyA9IDAgfQoJCQkJ
cltpXSA9IHM7CgkJCX0KCQkJcmV0dXJuCXIuam9pbignJyk7CgkJfTsKCgoJCS8q
KgoJCSAqIEBwcml2YXRlCgkJICogQGRlcHJlY2F0ZWQKIAkJICovCgkJbWFpbHJ1
Ll91cGRJc1BhZ2VWYXJzID0gZnVuY3Rpb24gKCl7CgkJCW1haWxydS5pc01zZ0xp
c3QgICAgICAgID0gbWFpbHJ1LmlzTXNnTGlzdFBhZ2UoKTsKCQkJbWFpbHJ1Lmlz
UmVhZE1zZyAgICAgICAgPSBtYWlscnUuaXNSZWFkTXNnUGFnZSgpOwoJCQltYWls
cnUuaXNTZW50TXNnICAgICAgICA9IG1haWxydS5pc0NvbXBvc2VQYWdlKCk7CgkJ
CW1haWxydS5pc1NlbmRNc2dPayAgICAgID0gbWFpbHJ1LmlzU2VuZE1zZ09rUGFn
ZSgpOwoJCQltYWlscnUuaXNNcmltSGlzdG9yeSAgICA9IG1haWxydS5pc01SSU1Q
YWdlKCk7CgkJCW1haWxydS5pc1NlYXJjaCAgICAgICAgID0gbWFpbHJ1LmlzU2Vh
cmNoUGFnZSgpOwoJCQltYWlscnUuaXNGaWxlU2VhcmNoICAgICA9IG1haWxydS5p
c0ZpbGVTZWFyY2hQYWdlKCk7CgkJCW1haWxydS5pc0FkZHJlc3Nib29rICAgID0g
bWFpbHJ1LmlzQWRkcmVzc2Jvb2tQYWdlKCk7CgkJfTsKCgoJCS8qKgoJCSAqIEBw
cml2YXRlCgkJICogQGRlcHJlY2F0ZWQKCQkgKi8KCQltYWlscnUuX3VwZEdFVFZh
cnMgPSBmdW5jdGlvbiAodXJsKXsKCQkJdmFyIG1hdGNoZXMsIEdFVCA9IHt9OwoK
CQkJaWYoIH51cmwuaW5kZXhPZignPycpICl7CgkJCQkkLmV4dGVuZChHRVQsIFN0
cmluZy50b09iamVjdCh1cmwpKTsKCQkJfQoKCQkJaWYoIG1hdGNoZXMgPSB1cmwu
bWF0Y2goL21lc3NhZ2VzXC8oW2Etel0rKSg/OlwvKFxkKykpP1wvPy8pICl7CgkJ
CQlHRVQuZm9sZGVyID0gcGFyc2VJbnQobWF0Y2hlc1syXSB8fCBtYWlscnUuRm9s
ZGVyW21hdGNoZXNbMV0udG9VcHBlckNhc2UoKV0sIDEwKSB8IDA7CgkJCX0KCQkJ
ZWxzZSBpZiggbWF0Y2hlcyA9IHVybC5tYXRjaCgvKG1lc3NhZ2V8Y29tcG9zZSlc
LyhbXlwvXSspLykgKXsKCQkJCUdFVC5pZCA9IG1hdGNoZXNbMl07CgkJCQlHRVQu
Zm9sZGVyID0gbWFpbHJ1Lk1lc3NhZ2VzLmdldFNhZmUoR0VULmlkKS5Gb2xkZXJJ
ZDsKCQkJfQoKCQkJaWYoIEdFVC5pZCApewoJCQkJR0VULmlkID0gKEdFVC5pZCsn
JykucmVwbGFjZSgvJlteO10rOy9nLCAnJyk7CgkJCX0KCgkJCXJldHVybiB3aW5k
b3cuR0VUID0gR0VUOwoJCX07CgkJLy8gaW5pdCBjYWxsCgkJbWFpbHJ1Ll91cGRH
RVRWYXJzKGpzSGlzdG9yeS5nZXQoKSk7CgoKCQl2YXIgX3Jkb21haW5zID0gL0Ao
Y29ycFwubWFpbHxtYWlsfGluYm94fGJrfGxpc3QpXC5ydS9pOwoKCQl2YXIgX2lz
UGFnZSA9IGZ1bmN0aW9uICh2YWwsIHVybCl7CgkJCXVybCA9IHVybCB8fCBqc0hp
c3RvcnkuZ2V0KCkgfHwgJyc7CgkJCXJldHVybiB1cmwubWF0Y2godmFsKSAhPSBu
dWxsOwoJCX07CgoKCQltYWlscnUuZG9tYWlucyA9IHsgJ2NvcnAubWFpbCc6ICdj
b3JwJywgbWFpbDogJ21haWwnLCBpbmJveDogJ2luYm94JywgYms6ICdiaycsIGxp
c3Q6ICdsaXN0JyB9OwoJCW1haWxydS5pc01haWxSdURvbWFpbiA9IGZ1bmN0aW9u
IChlbWFpbCl7IHJldHVybiBfcmRvbWFpbnMudGVzdChlbWFpbCk7IH07CgoKCQl2
YXIgX3BhZ2VVUkxTID0gewoJCQkgICdtc2dsaXN0JzogJy9tZXNzYWdlcy86Zm9s
ZGVyLycKCQkJLCAncmVhZG1zZyc6ICcvbWVzc2FnZS86aWQvJwoJCQksICdjb21w
b3NlJzogJy9jb21wb3NlLzppZC86bW9kZS8nCgkJCSwgJ2NvbXBvc2Vfa2V5Jzog
Jy9jb21wb3NlLz9fa2V5Xz06a2V5JwoJCQksICdzZWFyY2gnOiAgJy9zZWFyY2gv
JwoJCQksICdnb3NlYXJjaCc6ICAnL3NlYXJjaC8nCgkJfTsKCgoJCW1haWxydS5n
ZXRQYWdlVVJMID0gZnVuY3Rpb24gKG5hbWUsIHBhcmFtcyl7CgkJCXZhciB1cmwg
PSBfcGFnZVVSTFNbbmFtZV0ucmVwbGFjZSgvOihcdyspL2csIGZ1bmN0aW9uIChf
LCBrZXkpewoJCQkJcmV0dXJuIHBhcmFtcyAmJiAnLycrcGFyYW1zW2tleV0gfHwg
Jyc7CgkJCX0pOwoJCQlyZXR1cm4JbG9jYXRpb24ucHJvdG9jb2wgKycvLycrIGxv
Y2F0aW9uLmhvc3QgKyB1cmwucmVwbGFjZSgvXC8rL2csICcvJyk7CgkJfTsKCgoJ
CXZhciBfcGFnZUxhYmVscyA9IHsKCQkJICBtZXNzYWdlczoJJ21zZ2xpc3QnCgkJ
CSwgbWVzc2FnZToJJ3JlYWRtc2cnCgkJCSwgY29tcG9zZToJJ3NlbnRtc2cnCgkJ
CSwgc2VhcmNoOgknZ29zZWFyY2gnCgkJfTsKCQltYWlscnUuZ2V0UGFnZUxhYmVs
ID0gZnVuY3Rpb24gKHVybCl7CgkJCXZhciBtYXRjaCA9ICh1cmwgfHwganNIaXN0
b3J5LmdldCgpIHx8ICcnKS5tYXRjaCgvKG1lc3NhZ2VzP3xtc2dsaXN0fHJlYWRt
c2d8Y29tcG9zZXxmaWxlc2VhcmNofGdvc2VhcmNofHNlYXJjaHxzZW50bXNnfHNl
bmRtc2dva3xhZGRyZXNzYm9vaykvKTsKCQkJcmV0dXJuCW1hdGNoID8gKF9wYWdl
TGFiZWxzW21hdGNoWzFdXSB8fCBtYXRjaFsxXSkgOiAnbXNnbGlzdCc7CgkJfTsK
CgoJCW1haWxydS5nZXRVc2VyVXJsID0gZnVuY3Rpb24gKGVtYWlsLCBuYW1lKXsK
CQkJdmFyIHVybCA9ICcnOwoJCQlpZiAobWFpbHJ1LmlzTWFpbFJ1RG9tYWluKGVt
YWlsKSkgewoJCQkJdmFyIHBhcnQgPSBbJ2h0dHA6Ly8nXSwgaSA9IDA7CgkJCQlp
ZiggbmFtZSA9PSAnYXZhdGFyJyApIG5hbWUgPSdteSc7CgkJCQlwYXJ0WysraV0g
PSBuYW1lKycubWFpbC5ydSc7CgkJCQlwYXJ0WysraV0gPSBlbWFpbC5pbmRleE9m
KCdAY29ycCcpID4gMCA/ICcvY29ycC8nIDogJy8nK2VtYWlsLm1hdGNoKC9AKFte
Ll0rKS9pKVsxXSsnLyc7CgkJCQlwYXJ0WysraV0gPSBlbWFpbC5tYXRjaCgvKFte
QF0rKS9pKSA/IFJlZ0V4cC4kMSA6ICcnOwoJCQkJdXJsID0gcGFydC5qb2luKCcn
KTsKCQkJfQoJCQlyZXR1cm4gdXJsOwoJCX07CgoKCQltYWlscnUuZ2V0QXZhdGFy
U3JjID0gZnVuY3Rpb24gKGVtYWlsKXsKCQkJdmFyIHVybCA9ICcvL2ltZy4nICsg
bWFpbHJ1LnN0YXRpY0RvbWFpbk5hbWUgKyAnL3IvbXNnL2xldHRlci5naWYnLCBt
YXRoZXMgPSBlbWFpbC5tYXRjaCgvKD86XnxccykoXHcuKylAKC4rKVwucnUvaSk7
CgkJCWlmKCBtYXRoZXMgJiYgbWFpbHJ1LmRvbWFpbnNbbWF0aGVzWzJdXSApewoJ
CQkJLy8gaHR0cHM6Ly9qaXJhLm1haWwucnUvYnJvd3NlL01BSUwtNTgyNz9mb2N1
c2VkQ29tbWVudElkPTE4NzUwMSNjb21tZW50LTE4NzUwMQoJCQkJdXJsID0gJ2h0
dHA6Ly9hdnQuZm90by5tYWlsLnJ1LycrIG1haWxydS5kb21haW5zW21hdGhlc1sy
XV0rICcvJysgbWF0aGVzWzFdKyAnL19hdmF0YXI/JysgYWpzLm5vdygpOwoJCQl9
CgkJCXJldHVybiB1cmw7CgkJfTsKCgoJCS8vIEdsb2JhbCBFdmVudCBkaXNwYXRj
aGVyCgkJbWFpbHJ1LkV2ZW50cyA9ICQoeyByZW1vdmVFdmVudExpc3RlbmVyOiAk
Lm5vb3AsIGRldGFjaEV2ZW50OiAkLm5vb3AgfSk7CgkJbWFpbHJ1LkV2ZW50cy5m
aXJlID0gZnVuY3Rpb24gKHR5cGUsIGRhdGEsIHBhcmFtcyl7CgkJCXZhciBldnQJ
CT0gJC5FdmVudCh0eXBlKTsKCQkJZXZ0LlRZUEUJPSB0eXBlOwoJCQlldnQuREFU
QQk9IGRhdGE7CgkJCWlmKCBwYXJhbXMgIT09IHVuZGVmICkgJC5leHRlbmQoZXZ0
LCBwYXJhbXMpOwoJCQl0aGlzLnRyaWdnZXIoIGV2dCApOwoJCQlyZXR1cm4JZXZ0
LnJlc3VsdDsKCQl9OwoKCgkJbWFpbHJ1LnNldFRpdGxlCT0gZnVuY3Rpb24gKHRp
dGxlKXsKCQkJc2V0VGltZW91dChmdW5jdGlvbiAoKXsKCQkJCWRvY3VtZW50LnRp
dGxlID0gcmVwbGFjZUVudGl0eSggdGl0bGUgKTsKCQkJfSwgMTUpOwoJCX07CgoK
CQltYWlscnUuaGFzQ29sbGVjdG9ycyA9IGZ1bmN0aW9uICgpIHsKCQkJdmFyIGNv
bGxlY3RvcnMgPSBtYWlscnUuY29sbGVjdG9yczsKCQkJcmV0dXJuIE9iamVjdC5p
c09iamVjdChjb2xsZWN0b3JzKSAmJiBPYmplY3Qua2V5cyhjb2xsZWN0b3JzKS5s
ZW5ndGggPiAwOwoJCX07CgoKCQltYWlscnUuaXNDb2xsZWN0b3JGb2xkZXIgPSBm
dW5jdGlvbiAoaWQpIHsKCQkJdmFyIGNvbGxlY3RvciA9IG1haWxydS5nZXRDb2xs
ZWN0b3JJbmZvQnlGb2xkZXJJZChpZCk7CgoJCQlyZXR1cm4gT2JqZWN0LmtleXMo
Y29sbGVjdG9yKS5sZW5ndGggPiAwOwoJCX07CgoKCQltYWlscnUuZ2V0Q29sbGVj
dG9ySW5mb0J5TWVzc2FnZUlkID0gZnVuY3Rpb24gKGlkKSB7CgkJCXZhciByZXN1
bHQgPSB7fTsKCgkJCWlmIChtYWlscnUuaGFzQ29sbGVjdG9ycygpKSB7CgkJCQl2
YXIgbWVzc2FnZV9pZCA9IG1haWxydS5NZXNzYWdlcy5nZXQoaWQgfHwgR0VULmlk
KTsKCgkJCQlpZiAobWVzc2FnZV9pZCAmJiAobWVzc2FnZV9pZCA9IG1lc3NhZ2Vf
aWQuY29sbGVjdG9yKSkgewoJCQkJCU9iamVjdC5mb3JFYWNoKG1haWxydS5jb2xs
ZWN0b3JzLCBmdW5jdGlvbihjb2xsZWN0b3IpIHsKCQkJCQkJaWYgKGNvbGxlY3Rv
ciAmJiBtZXNzYWdlX2lkID09IGNvbGxlY3Rvci5pZCkgewoJCQkJCQkJcmVzdWx0
ID0gY29sbGVjdG9yOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQl9CgkJCX0KCgkJCXJl
dHVybiByZXN1bHQ7CgkJfTsKCgoJCW1haWxydS5nZXRDb2xsZWN0b3JJbmZvQnlG
b2xkZXJJZCA9IGZ1bmN0aW9uIChpZCkgewoJCQl2YXIgcmVzdWx0ID0ge307CgoJ
CQlpZiAobWFpbHJ1Lmhhc0NvbGxlY3RvcnMoKSkgewoJCQkJdmFyIGZvbGRlcnMg
PSBtYWlscnUuRm9sZGVycy5nZXRBbGwoKTsKCgkJCQlBcnJheS5zb21lKGZvbGRl
cnMsIGZ1bmN0aW9uKGZvbGRlciwgY29sbGVjdG9yKSB7CgkJCQkJaWYgKGZvbGRl
ci5JZCA9PSBpZCkgewoJCQkJCQljb2xsZWN0b3IgPSBtYWlscnUuY29sbGVjdG9y
c1shZm9sZGVyLklzU3ViZm9sZGVyID8gZm9sZGVyLklkIDogZm9sZGVyLlBhcmVu
dElkXTsKCgkJCQkJCWlmIChjb2xsZWN0b3IpIHsKCQkJCQkJCXJldHVybiByZXN1
bHQgPSBjb2xsZWN0b3I7CgkJCQkJCX0KCQkJCQl9CgkJCQl9KTsKCQkJfQoKCQkJ
cmV0dXJuIHJlc3VsdDsKCQl9OwoKCQltYWlscnUuZ2V0Q29sbGVjdG9ySW5mb0J5
SWQgPSBmdW5jdGlvbiAoaWQpIHsKCQkJdmFyIHJlc3VsdCA9IHt9OwoKCQkJaWYg
KG1haWxydS5oYXNDb2xsZWN0b3JzKCkpIHsKCQkJCU9iamVjdC5mb3JFYWNoKG1h
aWxydS5jb2xsZWN0b3JzLCBmdW5jdGlvbihjb2xsZWN0b3IpIHsKCQkJCQlpZiAo
Y29sbGVjdG9yLmlkID09IGlkKSB7CgkJCQkJCXJlc3VsdCA9IGNvbGxlY3RvcjsK
CQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCQkJCX0pOwoJCQl9CgoJCQlyZXR1
cm4gcmVzdWx0OwoJCX07CgoJCW1haWxydS5nZXRBY3RpdmVGb2xkZXJFbWFpbCA9
IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gbWFpbHJ1LmdldENvbGxlY3RvckluZm9C
eUZvbGRlcklkKG1haWxydS5nZXRGb2xkZXJJZCgpKS5lbWFpbCB8fCBtYWlscnUu
dXNlcmVtYWlsOwoJCX07CgoKCQltYWlscnUuZ2V0Rm9sZGVySWQJPSBmdW5jdGlv
biAoKXsKCQkJdmFyIGlkID0gR0VULmZvbGRlciB8fCBtYWlscnUuZm9sZGVySWQ7
CgoJCQlpZiggbWFpbHJ1LmlzU2VhcmNoUGFnZSgpICl7CgkJCQlpZAk9IEdFVC5x
X2ZvbGRlcjsKCQkJCXJldHVybgktMSAtIChpZCA+PSAwID8gaWQgOiAwKTsKCQkJ
fQoJCQllbHNlIGlmKCBtYWlscnUuaXNGaWxlU2VhcmNoUGFnZSgpICl7CgkJCQly
ZXR1cm4JbWFpbHJ1LkZvbGRlci5GSUxFU0VBUkNIOwoJCQl9CgoJCQlyZXR1cm4g
aWQgPj0gMCA/IGlkIDogMDsKCQl9OwoKCQltYWlscnUuZ2V0Rm9sZGVyRGF0YSA9
IGZ1bmN0aW9uIChpZCkgewoJCQlyZXR1cm4gbWFpbHJ1LkZvbGRlcnMuTWFwW2lk
XSB8fCBudWxsOwoJCX07CgoJCW1haWxydS5pc0NvbXBvc2VQYWdlID0gZnVuY3Rp
b24gKHVybCl7CgkJCXJldHVybiBfaXNQYWdlKCdzZW50bXNnJywgdXJsKSB8fCBf
aXNQYWdlKCdjb21wb3NlJywgdXJsKTsKCQl9OwoKCQltYWlscnUuaXNTZW5kTXNn
T2tQYWdlID0gZnVuY3Rpb24gKHVybCl7CgkJCXJldHVybiBfaXNQYWdlKCdzZW5k
bXNnb2snLCB1cmwpOwoJCX07CgoJCW1haWxydS5pc01zZ0xpc3RQYWdlID0gZnVu
Y3Rpb24gKHVybCl7CgkJCXJldHVybiBfaXNQYWdlKCdtc2dsaXN0JywgdXJsKSB8
fCBfaXNQYWdlKC9tZXNzYWdlc1wvLywgdXJsKTsKCQl9OwoKCQltYWlscnUuaXNS
ZWFkTXNnUGFnZSA9IGZ1bmN0aW9uICh1cmwpewoJCQlyZXR1cm4gKF9pc1BhZ2Uo
J3JlYWRtc2cnLCB1cmwpIHx8IF9pc1BhZ2UoL21lc3NhZ2VcLy8sIHVybCkpICYm
ICFtYWlscnUuaXNNUklNUGFnZSgpOwoJCX07CgoJCW1haWxydS5pc1NlYXJjaFBh
Z2UgPSBmdW5jdGlvbiAodXJsKSB7CgkJCS8vIE1BSUwtMTY0NTAKCQkJcmV0dXJu
IF9pc1BhZ2UoJyhefGdvfFwvKXNlYXJjaCcsIHVybCkgJiYgIW1haWxydS5pc01S
SU1QYWdlKCk7CgkJfTsKCgkJbWFpbHJ1LmlzQWRkcmVzc2Jvb2tQYWdlID0gZnVu
Y3Rpb24gKHVybCkgewoJCQlyZXR1cm4gX2lzUGFnZSgnYWRkcmVzc2Jvb2snLCB1
cmwpOwoJCX07CgoJCW1haWxydS5pc01SSU1QYWdlID0gZnVuY3Rpb24gKHVybCl7
CgkJCXJldHVybglfaXNQYWdlKCdtcmltaGlzdG9yeScsIHVybCkgfHwgX2lzUGFn
ZSgnYWdlbnQnLCB1cmwpOwoJCX07CgoJCW1haWxydS5pc1NlYXJjaE5vUmVzdWx0
UGFnZSA9IG1haWxydS5pc1NlYXJjaE5vUmVzdWx0UGFnZSB8fCBhanMucmV0RmFs
c2U7CgkJbWFpbHJ1LmlzQWR2YW5jZWRTZWFyY2hQYWdlID0gZnVuY3Rpb24gKCl7
CgkJCXJldHVybiAhIShtYWlscnUuaXNTZWFyY2hQYWdlKCkgJiYgR0VULmFkdmFu
Y2VkKTsKCQl9OwoKCgkJLyoqCgkJICogSXMgZmlsdGVyCgkJICoKCQkgKiBAcGFy
YW0ge051bWJlcn0gW2lkXQoJCSAqIEByZXR1cm4ge0Jvb2xlYW59CgkJICovCgkJ
bWFpbHJ1LmlzRmlsdGVyRm9sZGVyID0gZnVuY3Rpb24gKGlkKXsKCQkJaWYoIGlk
ID09PSB1bmRlZiApIGlkID0gR0VULmZvbGRlcjsKCQkJcmV0dXJuIGlkID09IG1h
aWxydS5Gb2xkZXIuVU5SRUFECgkJCQl8fCBpZCA9PSBtYWlscnUuRm9sZGVyLkZM
QUdHRUQKCQkJCXx8IGlkID09IG1haWxydS5Gb2xkZXIuQVRUQUNIOwoJCX07CgoK
CQltYWlscnUuaXNGaWxlU2VhcmNoUGFnZSA9IGZ1bmN0aW9uICh1cmwpewoJCQly
ZXR1cm4gX2lzUGFnZSgnZmlsZXNlYXJjaCcsIHVybCk7CgkJfTsKCgoJCW1haWxy
dS5pc01haWxib3hQYWdlID0gZnVuY3Rpb24gKHVybCl7CgkJCXJldHVybiAobWFp
bHJ1LmlzTXNnTGlzdFBhZ2UodXJsKSB8fCBtYWlscnUuaXNSZWFkTXNnUGFnZSh1
cmwpIHx8IG1haWxydS5pc0NvbXBvc2VQYWdlKHVybCkgfHwgbWFpbHJ1LmlzU2Vu
ZE1zZ09rUGFnZSh1cmwpIHx8IG1haWxydS5pc1NlYXJjaFBhZ2UodXJsKSB8fCBt
YWlscnUuaXNGaWxlU2VhcmNoUGFnZSh1cmwpKTsKCQl9OwoKCQltYWlscnUubmVl
ZFJlbG9hZFBhZ2UgPSBmdW5jdGlvbiAoa2V5LCB2YWwpewoJCQkvKiogQG5hbWVz
cGFjZSBkb2N1bWVudC5UUyAtLSBoZWFkLmFsbC5odG1sICovCgkJCS8qKiBAbmFt
ZXNwYWNlIG1haWxydS5LYWt0YW1CdWlsZEVuYWJsZWQgLS0gaHR0cHM6Ly9qaXJh
Lm1haWwucnUvYnJvd3NlL01BSUwtMTgxNjQgKi8KCgkJCWZ1bmN0aW9uIF90b0Rh
dGUodmFsKXsKCQkJCXJldHVybgluZXcgRGF0ZSh2YWwucmVwbGFjZSgvXy9nLCAn
OicpKTsKCQkJfQoKCQkJaWYoIG1haWxydS52MiApewoJCQkJaWYoIChrZXkgPT0g
J2J1aWxkJykgJiYgdmFsICYmIChtYWlscnUuYnVpbGQgIT0gdmFsKSApewoJCQkJ
CXZhcgoJCQkJCQkgIHRzID0gbmV3IERhdGUKCQkJCQkJLCBidWlsZCA9IHZhbC5z
cGxpdCgnLicpCgkJCQkJCSwgbmV3QnVpbGQgPSBfdG9EYXRlKCBidWlsZFsxXSAp
CgkJCQkJCSwgb2xkQnVpbGQgPSBfdG9EYXRlKCBtYWlscnUuYnVpbGQuc3BsaXQo
Jy4nKVsxXSApCgkJCQkJCSwgdmVjdG9yID0gKG5ld0J1aWxkID4gb2xkQnVpbGQp
ID8gJ1VQJyA6ICdET1dOJwoJCQkJCQksIGxvZyA9IHsKCQkJCQkJCSAgZW1haWw6
IG1haWxydS51c2VyZW1haWwKCQkJCQkJCSwgc2Vzc2lvbl9zdGFydDogbmV3IERh
dGUoZG9jdW1lbnQuVFMpLnRvSVNPU3RyaW5nKCkKCQkJCQkJCSwgc2Vzc2lvbl9l
bmQ6IDAKCQkJCQkJCSwgYnVpbGRfb2xkOiBtYWlscnUuYnVpbGQKCQkJCQkJCSwg
YnVpbGRfbmV3OiB2YWwKCQkJCQkJCSwgYnVpbGRfcmVjZWl2ZTogdHMudG9JU09T
dHJpbmcoKQoJCQkJCQkJLCB2ZWN0b3I6IHZlY3RvcgoJCQkJCQkJLCBwYWdlX2Zy
b206IG1haWxydS5nZXRQYWdlTGFiZWwoKQoJCQkJCQl9CgkJCQkJOwoKCQkJCQlp
ZiggaXNOYU4obmV3QnVpbGQuZ2V0VGltZSgpKSApewoJCQkJCQltYWlscnUucmFk
YXIoJ2RlcGxveV9mYWlsJywgJ3VwZD0xJywgMSk7CgoJCQkJCQlpZiAobWFpbHJ1
Lktha3RhbUJ1aWxkRW5hYmxlZCkgewoJCQkJCQkJbG9nLmRlcGxveV9mYWlsID0g
MTsKCQkJCQkJCW1haWxydS5nc3RhdChsb2cpOwoJCQkJCQl9CgoJCQkJCQlyZXR1
cm4JZmFsc2U7CgkJCQkJfQoKCQkJCQltYWlscnUucmFkYXIoJ2RlcGxveV91cGQn
LCB2ZWN0b3IrJz0xJyk7CgoJCQkJCWlmIChtYWlscnUuS2FrdGFtQnVpbGRFbmFi
bGVkKSB7CgkJCQkJCWxvZy5kZXBsb3lfdXBkID0gMTsKCQkJCQkJbWFpbHJ1Lmdz
dGF0KGxvZykKCQkJCQl9CgoJCQkJCW1haWxydS5uZWVkUmVsb2FkUGFnZQk9IGZ1
bmN0aW9uIChrZXksIHZhbCl7CgkJCQkJCWlmKCBrZXkgPT0gJ2hyZWYnICl7CgkJ
CQkJCQlsb2cucGFnZV90byA9IG1haWxydS5nZXRQYWdlTGFiZWwodmFsKTsKCQkJ
CQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCWxvZy5wYWdlX3RvID0ga2V5OwoJCQkJ
CQl9CgoJCQkJCQltYWlscnUucmFkYXIoJ2RlcGxveV8nK2J1aWxkWzBdLCBidWls
ZFsxXSsnPTEnKTsKCQkJCQkJbWFpbHJ1LnJhZGFyKCdkZXBsb3lfc3dpdGNoJywg
KG5ldyBEYXRlIC0gdHMpKTsKCgkJCQkJCWlmIChtYWlscnUuS2FrdGFtQnVpbGRF
bmFibGVkKSB7CgkJCQkJCQlsb2cuc2Vzc2lvbl9lbmQgPSBuZXcgRGF0ZShuZXcg
RGF0ZSAtIGRvY3VtZW50LlRTKS50b0lTT1N0cmluZygpOwoJCQkJCQkJbG9nLmRl
cGxveV9zd2l0Y2ggPSAxOwoJCQkJCQkJbWFpbHJ1LmdzdGF0KGxvZyk7CgkJCQkJ
CX0KCgkJCQkJCWlmKCAvXihmYXN0YW5zd2VyfGNvbXBvc2V8c2VuZG1zZ29rKSQv
aS50ZXN0KGtleSkgKXsKCQkJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCl7IGxv
Y2F0aW9uLnJlbG9hZCgpOyB9LCA1MCk7CgkJCQkJCQlyZXR1cm4JdHJ1ZTsKCQkJ
CQkJfQoJCQkJCQllbHNlIGlmKCBrZXkgPT0gJ2hyZWYnICl7CgkJCQkJCQlzZXRU
aW1lb3V0KGZ1bmN0aW9uICgpeyBsb2NhdGlvbi5ocmVmID0gdmFsOyB9LCA1MCk7
CgkJCQkJCQlyZXR1cm4JdHJ1ZTsKCQkJCQkJfQoKCQkJCQkJcmV0dXJuCWZhbHNl
OwoJCQkJCX07CgkJCQl9CgkJCX0KCgkJCXJldHVybglmYWxzZTsKCQl9OwoKCgkJ
bWFpbHJ1LmlzTW9kZXJuQnJvd3NlciA9IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4g
IW1haWxydS5pc0FuY2llbnRCcm93c2VyKCk7CgkJfTsKCgkJbWFpbHJ1LmlzQW5j
aWVudEJyb3dzZXIgPSBmdW5jdGlvbigpIHsKCQkJdmFyIGIgPSAkLmJyb3dzZXI7
CgoJCQl2YXIgb2xkSUUgICAgICA9IGIubXNpZSAgICAmJiBiLmludFZlcnNpb24g
PCA4OwoJCQl2YXIgb2xkRmlyZWZveCA9IGIubW96aWxsYSAmJiBiLmludFZlcnNp
b24gPCA1OwoJCQl2YXIgb2xkT3BlcmEgICA9IGIub3BlcmEgICAmJiBiLmludFZl
cnNpb24gPCAxMDsKCgkJCXJldHVybiBvbGRJRSB8fCBvbGRGaXJlZm94IHx8IG9s
ZE9wZXJhOwoJCX07CgoJCS8vIFBhdGNoIGdsb2JhbCBzY3JvbGwKCQkoZnVuY3Rp
b24gKF9vZmZzZXRGbil7CgkJCXZhcgoJCQkJICBfc2Nyb2xsSWQKCQkJCSwgX3Nj
cm9sbEZuCT0gZnVuY3Rpb24gKCl7CgkJCQkJJFNjcm9sbC50b3AJCT0gYWpzLnNj
cm9sbFRvcCgpOwoJCQkJCSRTY3JvbGwubGVmdAk9IGFqcy5zY3JvbGxMZWZ0KCk7
CgkJCQl9CgkJCTsKCgkJCS8vbm9pbnNwZWN0aW9uIEpTVW5yZXNvbHZlZFZhcmlh
YmxlCgkJCWlmKCAoJC5icm93c2VyLm9wZXJhICYmIHBhcnNlRmxvYXQoJC5icm93
c2VyLnZlcnNpb24pIDwgMTApIHx8ICQuYnJvd3Nlci5pT1MgKXsKCQkJCSRTY3Jv
bGxbMF0gPSAkKCdodG1sJykucmVtb3ZlQ2xhc3MoJ3BhZ2Utc2Nyb2xsJylbMF07
CgkJCQkkU2Nyb2xsLmZpeGVkID0gdHJ1ZTsKCQkJfQoJCQllbHNlIGlmKCBqc0hp
c3RvcnkudXNlSGlzdG9yeUFQSSApewoJCQkJJFNjcm9sbC5ub3JtYWwgPSB0cnVl
OwoJCQkJJCgnaHRtbCcpLnJlbW92ZUNsYXNzKCdwYWdlLXNjcm9sbCcpOwoJCQl9
CgoKCQkJLy8gRE9NUmVhZHkKCQkJJChmdW5jdGlvbiAoKXsKCQkJCSQod2luZG93
KS5hZGQoJyNTY3JvbGxCb2R5Jykuc2Nyb2xsKGZ1bmN0aW9uICgpewoJCQkJCWNs
ZWFyVGltZW91dChfc2Nyb2xsSWQpOwoJCQkJCV9zY3JvbGxJZCA9IHNldFRpbWVv
dXQoX3Njcm9sbEZuLCAzMCk7CgkJCQl9KTsKCgoJCQkJaWYoICRTY3JvbGwubm9y
bWFsICl7CgkJCQkJYWpzLnNjcm9sbFRvcAk9IGZ1bmN0aW9uICh5KXsgcmV0dXJu
ICRTY3JvbGwuc2Nyb2xsVG9wKHkpOyB9OwoJCQkJCWFqcy5zY3JvbGxMZWZ0CT0g
ZnVuY3Rpb24gKHgpeyByZXR1cm4gJFNjcm9sbC5zY3JvbGxMZWZ0KHgpOyB9OwoJ
CQkJfSBlbHNlIHsKCQkJCQkkKCcjU2Nyb2xsQm9keScpLmJpbmQoJ3Njcm9sbHN0
YXJ0IHNjcm9sbGVuZCcsIGZ1bmN0aW9uIChldnQpewoJCQkJCQkkLmlzU2Nyb2xs
ZWQgPSBldnQudHlwZSAhPSAnc2Nyb2xsZW5kJzsKCQkJCQl9KTsKCgoJCQkJCSRT
Y3JvbGwuc2Nyb2xsVG9wID0gZnVuY3Rpb24gKHkpewoJCQkJCQlpZiggdHlwZW9m
IHkgPT09ICd1bmRlZmluZWQnICl7CgkJCQkJCQlyZXR1cm4JdGhpc1swXS5zY3Jv
bGxUb3A7CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQl0aGlzWzBdLnNjcm9s
bFRvcCA9IHk7CgkJCQkJCQlyZXR1cm4JdGhpczsKCQkJCQkJfQoJCQkJCX07CgkJ
CQl9CgoJCQkJaWYoICRTY3JvbGwuZml4ZWQgfHwgJFNjcm9sbC5ub3JtYWwgKXsK
CQkJCQkvL25vaW5zcGVjdGlvbiBKU1VucmVzb2x2ZWRWYXJpYWJsZQoJCQkJCWlm
KCAkLmJyb3dzZXIuaU9TICl7CgkJCQkJCSRTY3JvbGxbMF0gPSBkb2N1bWVudC5i
b2R5OwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJdmFyCgkJCQkJCSAgZGl2ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Njcm9sbEJvZHknKQoJCQkJCQksIF9y
ZXNpemVGbiA9IGZ1bmN0aW9uICgpeyAkU2Nyb2xsLmNzcygnaGVpZ2h0JywgYWpz
LndpbmRvd0hlaWdodCgpKTsgfQoJCQkJCTsKCgkJCQkJaWYoIGRpdiApewoJCQkJ
CQkkU2Nyb2xsWzBdID0gZGl2OwoJCQkJCQlkaXYgPSBudWxsOwoKCQkJCQkJLyoq
IEBuYW1lc3BhY2UgJFNjcm9sbC5zY3JvbGxMZWZ0ICovCgkJCQkJCWFqcy5zY3Jv
bGxUb3AJPSBmdW5jdGlvbiAoeSl7IHJldHVybiAkU2Nyb2xsLnNjcm9sbFRvcCh5
KTsgfTsKCQkJCQkJYWpzLnNjcm9sbExlZnQJPSBmdW5jdGlvbiAoeCl7IHJldHVy
biAkU2Nyb2xsLnNjcm9sbExlZnQoeCk7IH07CgoJCQkJCQkvLyBGaXhlZCBqUXVl
cnkgb2Zmc2V0IG1ldGhvZAoJCQkJCQkkLmZuLm9mZnNldCA9IGZ1bmN0aW9uICgp
ewoJCQkJCQkJdmFyIG9mZnNldAk9IF9vZmZzZXRGbi5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOwoJCQkJCQkJaWYoIG9mZnNldCApewoJCQkJCQkJCW9mZnNldC50b3AJ
Kz0gJFNjcm9sbC5zY3JvbGxUb3AoKTsKCQkJCQkJCQlvZmZzZXQubGVmdAkrPSAk
U2Nyb2xsLnNjcm9sbExlZnQoKTsKCQkJCQkJCX0KCQkJCQkJCXJldHVybglvZmZz
ZXQ7CgkJCQkJCX07CgoJCQkJCQlpZiAoJC5icm93c2VyLm1zaWUgJiYgJC5icm93
c2VyLnZlcnNpb24gPD0gNykKCQkJCQkJCV9yZXNpemVGbigpOwoKLy8JCQkJCQnQ
l9Cw0YfQtdC8INGN0YLQviDQvdGD0LbQvdC+INC90LjQutGC0L4g0L3QtSDQv9C+
0LzQvdC40YIsINC90L4g0LTQsNGR0YIg0L/Qu9C+0YXQvtC5INGN0YTRhNC10LrR
giDQv9GA0Lgg0YDQtdGB0LDQudC30LUKLy8JCQkJCQkkKHdpbmRvdykucmVzaXpl
KF9yZXNpemVGbi5kZWJvdW5jZSgxMCkpOwoJCQkJCX0KCQkJCX0KCgkJCQl3aW5k
b3cuJFNjcm9sbEVsZW1lbnQgPSAkLmlzV2luZG93KCRTY3JvbGxbMF0pID8gJCgn
aHRtbCxib2R5JykgOiAkU2Nyb2xsOwoKCQkJCV9zY3JvbGxGbigpOwoJCQl9KTsK
CQl9KSgkLmZuLm9mZnNldCk7CgoKCQkvLyBVSSByYWRhcgoJCShmdW5jdGlvbiAo
cmFkYXJzKXsKCQkJbWFpbHJ1LnVpUmFkYXIgPSBmdW5jdGlvbiAobmFtZSl7CgkJ
CQlpZiggbmFtZSA9PT0gZmFsc2UgKXsKCQkJCQlmb3IoIG5hbWUgaW4gcmFkYXJz
ICkvL25vaW5zcGVjdGlvbiBKU1VuZmlsdGVyZWRGb3JJbkxvb3AKCQkJCQkJcmFk
YXJzW25hbWVdKCdjbGVhcicpOwoJCQkJfQoJCQkJZWxzZXsKCQkJCQlpZiggIShu
YW1lIGluIHJhZGFycykgKXsKCQkJCQkJcmFkYXJzW25hbWVdID0gY3JlYXRlUmFk
YXIoJ21haWxydV9VSV8nK25hbWUpOwoJCQkJCX0KCQkJCQlyZXR1cm4JcmFkYXJz
W25hbWVdOwoJCQkJfQoJCQl9OwoJCX0pKHt9KTsKCgoJCS8vIEdsb2JhbCBhamF4
LWVycm9yIGhhbmRsZXIKCQkkKGRvY3VtZW50KS5hamF4RXJyb3IoZnVuY3Rpb24g
KGV2ZW50LCBqcVhIUiwgb3B0aW9ucywgdGhyb3duRXJyb3IpewoJCQlpZiggdGhy
b3duRXJyb3IgJiYgKG9wdGlvbnMgJiYgb3B0aW9ucy51cmwgJiYgb3B0aW9ucy5k
YXRhVHlwZSA9PSAnanNvbicpICYmIChqcVhIUiAmJiBqcVhIUi5zdGF0dXMgPT0g
MjAwICYmIGpxWEhSLnJlYWR5U3RhdGUgPT0gNCkgKXsKCQkJCWlmKCAvKF58XC8p
YWJqcyhcP3wkKS8udGVzdChvcHRpb25zLnVybCkgKXsKCQkJCQl2YXIgdHh0ID0g
J2FqYXhDb252ZXJ0OiAnLCBoZHJzID0gJyc7CgoJCQkJCXR4dCArPSBvcHRpb25z
LnVybCArIChvcHRpb25zLmRhdGEgPyAoL1w/Ly50ZXN0KG9wdGlvbnMudXJsKSA/
ICcmJyA6ICc/JykgKyBvcHRpb25zLmRhdGEgOiAnJyk7CgoJCQkJCWlmICgoJ21h
aWxydScgaW4gd2luZG93KSkgewoJCQkJCQl0eHQgKz0gJyB+ICcgKyAobWFpbHJ1
LnVzZXJlbWFpbCB8fCAnTm90QXV0aCcpOwoJCQkJCX0KCgkJCQkJdHh0ICs9ICcg
fiAnICsgbmF2aWdhdG9yLnVzZXJBZ2VudDsKCgkJCQkJaWYgKGpxWEhSLmdldEFs
bFJlc3BvbnNlSGVhZGVycykgewoJCQkJCQloZHJzID0gJzxoPicgKyBqcVhIUi5n
ZXRBbGxSZXNwb25zZUhlYWRlcnMoKSArICc8L2g+JzsKCQkJCQl9CgoJCQkJCS8q
KiBAbmFtZXNwYWNlIG1haWxydS5zYXZlRXJyb3IqLwoJCQkJCWlmKCB3aW5kb3cu
bWFpbHJ1ICYmIG1haWxydS5zYXZlRXJyb3IgKXsKCQkJCQkJbWFpbHJ1LnNhdmVF
cnJvcignanNvbjInLCB0eHQpOwoJCQkJCX0KCgkJCQkJJC5hamF4KHsKCQkJCQkJ
dXJsOiAnL2NnaS1iaW4vbG9ndGhpcycsCgkJCQkJCXR5cGU6ICdQT1NUJywKCQkJ
CQkJZGF0YTogeyAnalEuZXJyJzogKCc8cT4nICsgdHh0ICsgJzwvcT4nICsgaGRy
cyArICc8cj4nICsganFYSFIucmVzcG9uc2VUZXh0ICsgJzwvcj4nKS5yZXBsYWNl
KC9bXHJcbl0vZywgJ1xcbicpIH0sCgkJCQkJCWRhdGFUeXBlOiAndGV4dCcKCQkJ
CQl9KTsKCQkJCX0KCQkJCWVsc2UgaWYoIG9wdGlvbnMuc2VudG1zZyApewoJCQkJ
CShuZXcgSW1hZ2UpLnNyYyA9ICcvL2dzdGF0LicgKyBtYWlscnUuc3RhdGljRG9t
YWluTmFtZSArICcvZ3N0YXQ/dWE9MSZsb2dtZT0nICsgZW5jb2RlVVJJQ29tcG9u
ZW50KCQucGFyYW0oewoJCQkJCQlsb2c6ICdzZW50bXNncGFyc2VlcnJvcjUnLAoJ
CQkJCQlyZWFkeVN0YXRlOiBqcVhIUi5yZWFkeVN0YXRlLAoJCQkJCQlzdGF0dXM6
IGpxWEhSLnN0YXR1cywKCQkJCQkJc3RhdHVzVGV4dDoganFYSFIuc3RhdHVzVGV4
dCwKCQkJCQkJZXJyb3I6IHRocm93bkVycm9yLnRvU3RyaW5nKCksCgkJCQkJCWVt
YWlsOiB3aW5kb3cubWFpbHJ1ICYmIG1haWxydS51c2VyZW1haWwgPyBtYWlscnUu
dXNlcmVtYWlsIDogJycsCgkJCQkJCXJlc3BvbnNlVGV4dDoganFYSFIucmVzcG9u
c2VUZXh0CgkJCQkJfSkpOwoJCQkJfQoJCQl9CgkJfSk7CgoKCQkvKioKCQkgKiBs
YWJzLmRuZC5jb21wb3NlCgkJICovCgkJaWYoIHN0b3JlLmdldCgnbGFicy5kbmQu
Y29tcG9zZScpICl7CgkJCSRSKCd7bWFpbHJ1LmJ1aWxkfUNvbXBvc2UnKTsKCQl9
Cgl9KShqUXVlcnksIG1haWxydSk7CgoKCS8vIGluaXRpYWwgY2FsbAoJbWFpbHJ1
Ll91cGRJc1BhZ2VWYXJzKCk7CgoKCWpzTG9hZGVyLmxvYWRlZCgne21haWxydX1t
YWlscnUuY29yZScsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvbWFpbHJ1
LmNvcmUuanMgZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS91dGlscy9tYWls
cnUuVXRpbHMuQWpheENvbnZlcnRlci5qcyBzdGFydAoKCnZhciBfcmVnZXhwX21h
Y3JvcyA9IC9fXyhCT0RZfEJPRFlfSFRNTHxCT0RZX1FVT1RFRHxTSUdOfFNJR05f
SFRNTClfUExBQ0VIT0xERVJfXy9nOwoKCWZ1bmN0aW9uIGdldE1lc3NhZ2VFbWFp
bEZpZWxkcyAodG9GaWVsZE5hbWUsIGRhdGEpIHsKCQlpZiAoJC5pc0FycmF5KGRh
dGEpKSB7CgkJCXZhciBzZXAgPSAnLCAnLAoJCQkJc3RhbmRhcnRWYWx1ZSA9IFtd
LCBzaG9ydFZhbHVlID0gW10sIGxpc3RWYWx1ZSA9IFtdLAoJCQkJdmFsdWUsIGkg
PSBkYXRhLmxlbmd0aDsKCQkJaWYgKHRvRmllbGROYW1lID09ICdUbycpIHsKCQkJ
CXN0YW5kYXJ0VmFsdWVbMF0gPSBzaG9ydFZhbHVlWzBdID0gJzwnICsgTGFuZy5n
ZXQoJ3JlYWRtc2cubm90X3NwZWNpZmllZCcpICsgJz4nOwoJCQl9CgkJCWZvciAo
IDsgaS0tOyApIHsKCQkJCXZhbHVlID0gZGF0YVtpXTsKCQkJCXN0YW5kYXJ0VmFs
dWVbaV0gPSB2YWx1ZS5lbWFpbCB8fCAnJzsKCQkJCXNob3J0VmFsdWVbaV0gPSB2
YWx1ZS5uYW1lIHx8IHN0YW5kYXJ0VmFsdWVbaV07CgkJCQlsaXN0VmFsdWVbaV0g
PSB2YWx1ZS5uYW1lID8gdmFsdWUubmFtZSArICcgPCcgKyBzdGFuZGFydFZhbHVl
W2ldICsgJz4nIDogc3RhbmRhcnRWYWx1ZVtpXTsKCQkJfQoJCQlyZXR1cm4gW2Fq
cy5IdG1sLmVzY2FwZShzdGFuZGFydFZhbHVlLmpvaW4oc2VwKSksIGFqcy5IdG1s
LmVzY2FwZShsaXN0VmFsdWUuam9pbihzZXApKSwgYWpzLkh0bWwuZXNjYXBlKHNo
b3J0VmFsdWUuam9pbihzZXApKV07CgkJfQoJCXJldHVybiBudWxsOwoJfQoKCWZ1
bmN0aW9uIHJlcGxhY2VNYWNyb3MgKHRleHQpIHsKCQl2YXIgc2lnbmF0dXJlID0g
bWFpbHJ1WydVc2VyU2lnbmF0dXJlJ107CgkJdmFyIHNpZ25hdHVyZV90ZXh0ID0g
d2luZG93LnJlcGxhY2VFbnRpdHkoc2lnbmF0dXJlKSwgc2lnbmF0dXJlX2h0bWwg
PSBzaWduYXR1cmUucmVwbGFjZSgvXHI/XG4vZywgJzxici8+Jyk7CgkJcmV0dXJu
IHRleHQucmVwbGFjZShfcmVnZXhwX21hY3JvcywgZnVuY3Rpb24gKGJvZHksIHR5
cGUpIHsKCQkJaWYgKHR5cGUgPT09ICdCT0RZJykgewoJCQkJYm9keSA9ICdfX0xF
VF9CT0RZX1BMQUlOX18nOwoJCQl9IGVsc2UgaWYgKHR5cGUgPT09ICdCT0RZX0hU
TUwnKSB7CgkJCQlib2R5ID0gJ19fTEVUX0JPRFlfSFRNTF9fJzsKCQkJfSBlbHNl
IGlmICh0eXBlID09PSAnQk9EWV9RVU9URUQnKSB7CgkJCQlib2R5ID0gJ19fTEVU
X0JPRFlfUVVPVEVfUExBSU5fXyc7CgkJCX0gZWxzZSBpZiAodHlwZSA9PT0gJ1NJ
R04nKSB7CgkJCQlib2R5ID0gc2lnbmF0dXJlX3RleHQ7CgkJCX0gZWxzZSBpZiAo
dHlwZSA9PT0gJ1NJR05fSFRNTCcpIHsKCQkJCWJvZHkgPSBzaWduYXR1cmVfaHRt
bDsKCQkJfQoJCQlyZXR1cm4gYm9keTsKCQl9KTsKCX0KCglmdW5jdGlvbiBmaWxs
RW1haWxGaWVsZHMgKGZyb20sIHRvLCB0b0ZpZWxkUHJlZml4LCBmcm9tRmllbGRz
LCB0b0ZpZWxkcykgewoJCXZhciB0b0ZpZWxkTmFtZSwgZmllbGRzLCBpID0gZnJv
bUZpZWxkcy5sZW5ndGg7CgkJZm9yICggOyBpLS07ICkgewoJCQl0b0ZpZWxkTmFt
ZSA9IHRvRmllbGRQcmVmaXggKyB0b0ZpZWxkc1tpXTsKCQkJZmllbGRzID0gZ2V0
TWVzc2FnZUVtYWlsRmllbGRzKHRvRmllbGROYW1lLCBmcm9tW2Zyb21GaWVsZHNb
aV1dKTsKCQkJaWYgKGZpZWxkcykgewoJCQkJdG9bdG9GaWVsZE5hbWVdID0gZmll
bGRzWzBdOwoJCQkJdG9bdG9GaWVsZE5hbWUgKyAnTGlzdCddID0gZmllbGRzWzFd
OwoJCQkJdG9bdG9GaWVsZE5hbWUgKyAnU2hvcnQnXSA9IHRvW3RvRmllbGROYW1l
ICsgJ05hbWUnXSA9IGZpZWxkc1syXTsKCQkJCWlmICh0b0ZpZWxkTmFtZSA9PT0g
J0NjJyB8fCB0b0ZpZWxkTmFtZSA9PT0gJ1JlcGx5VG8nIHx8IHRvRmllbGROYW1l
ID09PSAnUmVwbHlBbGxUbycgfHwgdG9GaWVsZE5hbWUgPT09ICdSZXBseUFsbEND
JyB8fCB0b0ZpZWxkTmFtZSA9PT0gJ1JlU2VudEZyb20nIHx8IHRvRmllbGROYW1l
ID09PSAnUmVTZW50VG8nKSB7CgkJCQkJdG9bdG9GaWVsZE5hbWVdID0gdG9bdG9G
aWVsZE5hbWUgKyAnTGlzdCddOwoJCQkJCWRlbGV0ZSB0b1t0b0ZpZWxkTmFtZSAr
ICdMaXN0J107CgkJCQkJZGVsZXRlIHRvW3RvRmllbGROYW1lICsgJ1Nob3J0J107
CgkJCQkJZGVsZXRlIHRvW3RvRmllbGROYW1lICsgJ05hbWUnXTsKCQkJCX0gZWxz
ZSBpZiAodG9GaWVsZE5hbWUgPT09ICdGcm9tJykgewoJCQkJCXRvW3RvRmllbGRO
YW1lICsgJ0Z1bGwnXSA9IGZpZWxkc1sxXTsKCQkJCX0KCQkJfQoJCX0KCX0KCglm
dW5jdGlvbiBkYXRlV2l0aFRpbWV6b25lT2Zmc2V0ICh0aW1lc3RhbXApIHsKCQl2
YXIgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCAqIDEwMDApOwovLwkJZGF0ZS5z
ZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgZGF0ZS5nZXRUaW1lem9uZU9m
ZnNldCgpKTsKLy8JCWRhdGUuc2V0U2Vjb25kcyhkYXRlLmdldFNlY29uZHMoKSAr
IG1haWxydVsnVGltZXpvbmVPZmZzZXQnXSk7CgkJcmV0dXJuIGRhdGU7Cgl9CgoJ
bWFpbHJ1LlV0aWxzLkFqYXhDb252ZXJ0ZXIgPSB7CgoJCWNvbnZlcnQ6IGZ1bmN0
aW9uIChyZXNwb25zZSwgYWpheERhdGEpIHsKCQkJaWYgKGFqYXhEYXRhLnVybCA9
PSAnL2FwaS92MS9tZXNzYWdlcy9zdGF0dXMnKSB7CgkJCQlyZXNwb25zZSA9IHRo
aXMuc3RhdHVzVG9DaGVja25ldyhyZXNwb25zZSwgYWpheERhdGEpOwoJCQl9IGVs
c2UgaWYgKGFqYXhEYXRhLnVybCA9PSAnL2FwaS92MS9tZXNzYWdlcy9tZXNzYWdl
JykgewoJCQkJcmVzcG9uc2UgPSB0aGlzLm1lc3NhZ2VUb1JlYWRtc2cocmVzcG9u
c2UsIGFqYXhEYXRhKTsKCQkJfQoJCQlyZXR1cm4gcmVzcG9uc2U7CgkJfSwKCgkJ
bWVzc2FnZVRvUmVhZG1zZzogZnVuY3Rpb24gKG1lc3NhZ2VKU09OLCBhamF4RGF0
YSkgewoJCQl2YXIgcmVhZG1zZ0pTT04gPSBbJ0FqYXhSZXNwb25zZSddLCByZXNw
b25zZSA9IFsnRXJyb3InXTsKCQkJaWYgKG1lc3NhZ2VKU09OKSB7CgkJCQl2YXIg
Ym9keSA9IG1lc3NhZ2VKU09OLmJvZHk7CgkJCQlpZiAobWVzc2FnZUpTT04uc3Rh
dHVzID09IDQwMCkgewoJCQkJCWlmIChib2R5ICYmIGJvZHkuaWQgJiYgYm9keS5p
ZC5lcnJvciA9PSAnbm90X2V4aXN0JykgewoJCQkJCQlpZiAoYWpheERhdGEgJiYg
YWpheERhdGEuZGF0YSAmJiBhamF4RGF0YS5kYXRhLnNtKSB7CgkJCQkJCQlyZXNw
b25zZSA9IFsnUmVkaXJlY3QnLCAnL2NnaS1iaW4vbXNnbGlzdD9mb2xkZXI9NTAw
MDAwJ107CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlyZXNwb25zZSA9IFsnT0snLCBb
e05vTVNHOiAxfV1dOwoJCQkJCQl9CgkJCQkJfQoJCQkJfSBlbHNlIGlmIChtZXNz
YWdlSlNPTi5zdGF0dXMgPT0gNDAzKSB7CgkJCQkJaWYgKG1lc3NhZ2VKU09OLmJv
ZHkgPT0gJ3Rva2VuJykgewoJCQkJCQlyZWFkbXNnSlNPTiA9IG1lc3NhZ2VKU09O
OwoJCQkJCX0gZWxzZSBpZiAobWVzc2FnZUpTT04uYm9keSA9PSAnbm9zZGMnKSB7
CgkJCQkJCXJlYWRtc2dKU09OID0gWydBamF4UmVzcG9uc2UnLCAnTm9TREMnXTsK
CQkJCQl9IGVsc2UgewoJCQkJCQlyZXNwb25zZSA9IFsnUmVkaXJlY3QnLCAnL2Nn
aS1iaW4vbG9naW4/bm9jbGVhcj0xJnBhZ2U9bWFpbGJveCddOwoJCQkJCX0KCQkJ
CX0gZWxzZSBpZiAobWVzc2FnZUpTT04uc3RhdHVzID09IDIwMCkgewoJCQkJCWlm
IChib2R5KSB7CgkJCQkJCXJlc3BvbnNlID0gWydPSycsIFt0aGlzLm1lc3NhZ2VU
b09sZEFwaShib2R5KV1dOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlpZiAoJC5pc0Fy
cmF5KHJlYWRtc2dKU09OKSkgewoJCQkJcmVhZG1zZ0pTT04gPSByZWFkbXNnSlNP
Ti5jb25jYXQocmVzcG9uc2UpOwoJCQl9CgkJCXJldHVybiByZWFkbXNnSlNPTjsK
CQl9LAoKCQlzdGF0dXNUb0NoZWNrbmV3OiBmdW5jdGlvbiAoc3RhdHVzSlNPTiwg
YWpheERhdGEpIHsKCgkJCXZhciBjaGVja25ld0pTT04gPSB7CgkJCQlzdGF0dXM6
ICdFcnJvcicKCQkJfTsKCgkJCWlmIChzdGF0dXNKU09OKSB7CgoJCQkJaWYgKHN0
YXR1c0pTT04uc3RhdHVzKSB7CgoJCQkJCWNoZWNrbmV3SlNPTi5zdGF0dXMgPSAn
T0snOwoKCQkJCQlpZiAoc3RhdHVzSlNPTi5zdGF0dXMgPT0gMzA0KSB7CgkJCQkJ
CWNoZWNrbmV3SlNPTi5zdGF0dXMgPSAnTk9QJzsKCQkJCQl9IGVsc2UgaWYgKHN0
YXR1c0pTT04uc3RhdHVzID09IDUwMCkgewoJCQkJCQljaGVja25ld0pTT04uc3Rh
dHVzID0gJ0Vycm9yJzsKCQkJCQl9IGVsc2UgaWYgKHN0YXR1c0pTT04uc3RhdHVz
ID09IDQwMykgewoJCQkJCQlpZiAoc3RhdHVzSlNPTi5ib2R5ID09ICdmb2xkZXIn
KSB7CgkJCQkJCQljaGVja25ld0pTT04uc3RhdHVzID0gJ0FjY2Vzc0RlbmllZCc7
CgkJCQkJCX0gZWxzZSBpZiAoc3RhdHVzSlNPTi5ib2R5ID09ICdub3NkYycpIHsK
CQkJCQkJCS8vIE1BSUwtMTIyOTcKCQkJCQkJCWNoZWNrbmV3SlNPTi5zdGF0dXMg
PSAnbm9zZGMnOwoJCQkJCQl9IGVsc2UgaWYgKHN0YXR1c0pTT04uYm9keSA9PSAn
dG9rZW4nKSB7CgkJCQkJCQkvLyBNQUlMLTEyMjk3CgkJCQkJCQljaGVja25ld0pT
T04gPSBzdGF0dXNKU09OOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJY2hlY2tuZXdK
U09OLnN0YXR1cyA9ICdOb0F1dGgnOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJ
CWlmIChjaGVja25ld0pTT04uc3RhdHVzID09ICdPSycgfHwgY2hlY2tuZXdKU09O
LnN0YXR1cyA9PSAnTk9QJykgewoKCQkJCQl2YXIgZW1haWxwYXJ0cyA9IHN0YXR1
c0pTT04uZW1haWwuc3BsaXQoJ0AnKTsKCQkJCQljaGVja25ld0pTT04uZGF0YSA9
IHsKCQkJCQkJdXNlcm5hbWU6IGVtYWlscGFydHNbMF0sCgkJCQkJCXVzZXJkb21h
aW46IGVtYWlscGFydHNbMV0KCQkJCQl9OwoKCQkJCQlpZiAoY2hlY2tuZXdKU09O
LnN0YXR1cyA9PSAnT0snKSB7CgoJCQkJCQljaGVja25ld0pTT04uZGF0YS5idWls
ZCA9IG1haWxydS5idWlsZDsKCQkJCQkJY2hlY2tuZXdKU09OLmRhdGEuY3RzID0g
c3RhdHVzSlNPTi5sYXN0X21vZGlmaWVkICsgJyc7CgoJCQkJCQkvLyBNQUlMLTE1
OTg0CgkJCQkJCWNoZWNrbmV3SlNPTi5kYXRhLnNvcnRCeSA9IGFqYXhEYXRhLmRh
dGEuc29ydGJ5IHx8IG1haWxydS5tZXNzYWdlc1NvcnQgLyp8fCAnRCcqLzsKCgkJ
CQkJCWlmIChzdGF0dXNKU09OLmJvZHkpIHsKCgkJCQkJCQlpZiAoJC5pc0FycmF5
KHN0YXR1c0pTT04uYm9keS5mb2xkZXJzKSkgewoJCQkJCQkJCWNoZWNrbmV3SlNP
Ti5kYXRhLmZvbGRlcnMgPSB0aGlzLmZvbGRlcnNUb09sZEFwaShzdGF0dXNKU09O
LmJvZHkuZm9sZGVycyk7CgkJCQkJCQkJY2hlY2tuZXdKU09OLmRhdGEuZm9sZGVy
c19oYXNoID0gY2hlY2tuZXdKU09OLmRhdGEuY3RzOwoJCQkJCQkJfQoKCQkJCQkJ
CWlmICgkLmlzQXJyYXkoc3RhdHVzSlNPTi5ib2R5Lm1lc3NhZ2VzKSkgewoJCQkJ
CQkJCWNoZWNrbmV3SlNPTi5kYXRhLm1lc3NhZ2VzID0gdGhpcy5zdGF0dXNNZXNz
YWdlc1RvT2xkQXBpKHN0YXR1c0pTT04uYm9keS5tZXNzYWdlcyk7CgkJCQkJCQkJ
Y2hlY2tuZXdKU09OLmRhdGEubWVzc2FnZXNfaGFzaCA9IGNoZWNrbmV3SlNPTi5k
YXRhLmN0cyArIGNoZWNrbmV3SlNPTi5kYXRhLnNvcnRCeTsKCQkJCQkJCX0KCgkJ
CQkJCQlpZiAoc3RhdHVzSlNPTi5ib2R5LmNvbGxlY3RvcnMpIHsKCQkJCQkJCQlj
aGVja25ld0pTT04uZGF0YS5jb2xsZWN0b3JzID0gdGhpcy5jb2xsZWN0b3JzVG9P
bGRBcGkoc3RhdHVzSlNPTi5ib2R5LmNvbGxlY3RvcnMpOwoJCQkJCQkJfQoKCQkJ
CQkJCWNoZWNrbmV3SlNPTi5kYXRhLnRva2VuID0gc3RhdHVzSlNPTi5ib2R5LnRv
a2VuOwoJCQkJCQkJY2hlY2tuZXdKU09OLmRhdGEudG9rZW5zID0gc3RhdHVzSlNP
Ti5ib2R5LnRva2VuczsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQljaGVja25l
d0pTT04udG9rZW4gPSBzdGF0dXNKU09OLnRva2VuOwoJCQl9CgoJCQlyZXR1cm4g
Y2hlY2tuZXdKU09OOwoJCX0sCgoJCWNvbGxlY3RvcnNUb09sZEFwaTogZnVuY3Rp
b24gKGNvbGxlY3RvcnMpIHsKCQkJdmFyIG5ld0NvbGxlY3RvcnMgPSB7fTsKCgkJ
CWlmIChBcnJheS5pc0FycmF5KGNvbGxlY3RvcnMpKSB7CgkJCQlBcnJheS5mb3JF
YWNoKGNvbGxlY3RvcnMsIGZ1bmN0aW9uKGNvbGxlY3RvcikgewoJCQkJCXZhciBz
dGF0ZSA9ICcnLAoJCQkJCQllcnJvciA9ICcnOwoKCQkJCQlzd2l0Y2goY29sbGVj
dG9yLnN0YXRlKSB7CgkJCQkJCWNhc2UgJ2F1dGhfZXJyb3InOgoJCQkJCQkJZXJy
b3IgPSAnYXV0aCc7CgkJCQkJCQlicmVhazsKCgkJCQkJCWNhc2UgJ2V4dHJhX2F1
dGgnOgoJCQkJCQkJZXJyb3IgPSAnZXh0cmFfYXV0aCc7CgkJCQkJCQlicmVhazsK
CgkJCQkJCWNhc2UgJ2Jsb2NrZWQnOgoJCQkJCQkJZXJyb3IgPSAnYmxvY2tlZCc7
CgkJCQkJCQlicmVhazsKCgkJCQkJCWNhc2UgJ292ZXJsaW1pdF9lcnJvcic6CgkJ
CQkJCQllcnJvciA9ICdsaW1pdCc7CgkJCQkJCQlicmVhazsKCgkJCQkJCWNhc2Ug
J2ludGVybmFsX2Vycm9yJzoKCQkJCQkJCWVycm9yID0gJ2ludGVybmFsJzsKCQkJ
CQkJCWJyZWFrOwoKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCXN0YXRlID0gY29sbGVj
dG9yLnN0YXRlOwoJCQkJCQkJYnJlYWs7CgkJCQkJfQoKCQkJCQluZXdDb2xsZWN0
b3JzW2NvbGxlY3Rvci5mb2xkZXJdID0gewoJCQkJCQlpZDogICAgY29sbGVjdG9y
LmlkLAoJCQkJCQllbWFpbDogY29sbGVjdG9yLmVtYWlsLAoJCQkJCQl0eXBlOiAg
Y29sbGVjdG9yLnR5cGUsCgkJCQkJCXN0YXRlOiBzdGF0ZSwKCQkJCQkJZXJyb3I6
IGVycm9yCgkJCQkJfQoJCQkJfSk7CgkJCX0KCQkJcmV0dXJuIG5ld0NvbGxlY3Rv
cnM7CgkJfSwKCgkJZm9sZGVyc1RvT2xkQXBpOiBmdW5jdGlvbiAoZm9sZGVycykg
ewoJCQl2YXIgbmV3Rm9sZGVycyA9IFtdOwoJCQlpZiAoJC5pc0FycmF5KGZvbGRl
cnMpKSB7CgkJCQlmb3IgKHZhciBmb2xkZXIsIGk9MCwgbD1mb2xkZXJzLmxlbmd0
aDsgaTxsOyBpKyspIHsKCQkJCQlmb2xkZXIgPSBmb2xkZXJzW2ldOwoJCQkJCW5l
d0ZvbGRlcnNbaV0gPSB7CgkJCQkJCUlkOiBmb2xkZXIuaWQsCgkJCQkJCUlzU3Vi
Zm9sZGVyOiBmb2xkZXIuY2hpbGQsCgkJCQkJCU1lc3NhZ2VzOiBmb2xkZXIubWVz
c2FnZXNfdG90YWwsCgkJCQkJCU5hbWU6IGZvbGRlci5uYW1lLAoJCQkJCQlQYXJl
bnRJZDogZm9sZGVyLnBhcmVudCwKCQkJCQkJU2VjdXJlOiBmb2xkZXIuc2VjdXJp
dHkgPyAoZm9sZGVyLm9wZW4gPyAyIDogMSkgOiAwLAoJCQkJCQlVbnJlYWQ6IGZv
bGRlci5tZXNzYWdlc191bnJlYWQKCQkJCQl9OwoJCQkJfQoJCQl9CgkJCXJldHVy
biBuZXdGb2xkZXJzOwoJCX0sCgoJCXN0YXR1c01lc3NhZ2VzVG9PbGRBcGk6IGZ1
bmN0aW9uIChtZXNzYWdlcykgewoJCQl2YXIgbmV3TWVzc2FnZXMgPSBbXTsKCQkJ
aWYgKCQuaXNBcnJheShuZXdNZXNzYWdlcykpIHsKCQkJCWZvciAodmFyIGk9MCwg
bD1tZXNzYWdlcy5sZW5ndGg7IGk8bDsgaSsrKSB7CgkJCQkJbmV3TWVzc2FnZXNb
aV0gPSB0aGlzLnN0YXR1c01lc3NhZ2VUb09sZEFwaShtZXNzYWdlc1tpXSk7CgkJ
CQl9CgkJCX0KCQkJcmV0dXJuIG5ld01lc3NhZ2VzOwoJCX0sCgoJCXN0YXR1c01l
c3NhZ2VUb09sZEFwaTogZnVuY3Rpb24gKG1lc3NhZ2UpIHsKCgkJCXZhciBuZXdN
ZXNzYWdlID0gewoJCQkJaWQ6IG1lc3NhZ2UuaWQsCgkJCQlJZDogbWVzc2FnZS5p
ZCwKCQkJCURhdGVVVFM6IG1lc3NhZ2UuZGF0ZSwKCQkJCUZvbGRlcklkOiBtZXNz
YWdlLmZvbGRlciwKCQkJCU5leHRJZDogbWVzc2FnZS5uZXh0LAoJCQkJUHJldklk
OiBtZXNzYWdlLnByZXYsCgkJCQlQcmlvcml0eTogbWVzc2FnZS5wcmlvcml0eSwK
CQkJCVNpemU6IG1lc3NhZ2Uuc2l6ZSArICcgJyArIExhbmcuZ2V0KCdTaXplJyku
a2IsCgkJCQlTdWJqZWN0OiBhanMuSHRtbC5lc2NhcGUobWVzc2FnZS5zdWJqZWN0
IHx8IExhbmcuZ2V0KCdtZXNzYWdlLmVtYWlsLnVudGl0bGVkJykpLAoJCQkJTWlj
cm9mb3JtYXQ6IHsKCQkJCQl0ZXh0OiBtZXNzYWdlLnNuaXBwZXQKCQkJCX0KCQkJ
fTsKCgkJCWlmIChtZXNzYWdlLmZsYWdzKSB7CgkJCQluZXdNZXNzYWdlLkZsYWdn
ZWQgPSBtZXNzYWdlLmZsYWdzLmZsYWdnZWQ7CgkJCQluZXdNZXNzYWdlLkZvcndh
cmQgPSBtZXNzYWdlLmZsYWdzLmZvcndhcmQ7CgkJCQluZXdNZXNzYWdlLlJlcGx5
ID0gbWVzc2FnZS5mbGFncy5yZXBseTsKCQkJCW5ld01lc3NhZ2UuVW5yZWFkID0g
bWVzc2FnZS5mbGFncy51bnJlYWQ7CgkJCQluZXdNZXNzYWdlLlNQRiA9IG1lc3Nh
Z2UuZmxhZ3Muc3BmOwoJCQkJbmV3TWVzc2FnZS5BdHRhY2htZW50ID0gbWVzc2Fn
ZS5mbGFncy5hdHRhY2g7CgkJCQluZXdNZXNzYWdlLlJlYWRTZXQgPSBtZXNzYWdl
LmZsYWdzLnJlYWRfc2V0OwoJCQl9CgoJCQlpZiAobWVzc2FnZS5jb3JyZXNwb25k
ZW50cykgewoJCQkJZmlsbEVtYWlsRmllbGRzKG1lc3NhZ2UuY29ycmVzcG9uZGVu
dHMsIG5ld01lc3NhZ2UsICcnLCBbJ2NjJywgJ2Zyb20nLCAndG8nLCAnYmNjJ10s
IFsnQ2MnLCAnRnJvbScsICdUbycsICdCY2MnXSk7CgkJCX0KCgkJCXZhciBkYXRl
ID0gZGF0ZVdpdGhUaW1lem9uZU9mZnNldChtZXNzYWdlLmRhdGUpOwoJCQluZXdN
ZXNzYWdlLkRhdGUgPSBkYXRlLmdldExvY2FsZUZ1bGxEYXRlKCk7CgkJCW5ld01l
c3NhZ2UuRGF0ZVNob3J0ID0gZGF0ZS5nZXRMb2NhbGVEYXRlU2hvcnQoKTsKCQkJ
bmV3TWVzc2FnZS5EYXRlRnVsbCA9IGRhdGUuZ2V0TG9jYWxlRGF0ZUZ1bGwoKTsK
CgkJCXJldHVybiBuZXdNZXNzYWdlOwoJCX0sCgoJCW1lc3NhZ2VUb09sZEFwaTog
ZnVuY3Rpb24gKG1lc3NhZ2UpIHsKCQkJdmFyIG5ld01lc3NhZ2UgPSB0aGlzLnN0
YXR1c01lc3NhZ2VUb09sZEFwaShtZXNzYWdlKTsKCgkJCW5ld01lc3NhZ2UuU2F2
ZVNlbnQgPSAxOwoJCQluZXdNZXNzYWdlLkhUTUxDb21wb3NlID0gbWFpbHJ1WydI
VE1MQ29tcG9zZSddOwoJCQluZXdNZXNzYWdlLkFjY291bnRWZXJpZmllZCA9IG1h
aWxydVsnQWNjb3VudFZlcmlmaWVkJ107CgkJCW5ld01lc3NhZ2UucXVvdGVfc3Ry
aW5nID0gJz4gJzsKCgkJCW5ld01lc3NhZ2UuTWFpbk1haWxIb3N0ID0gbG9jYXRp
b24uaG9zdDsKCQkJbmV3TWVzc2FnZS5NYWlsQXR0YWNoWmlwSG9zdCA9ICcnOwoJ
CQluZXdNZXNzYWdlLk1haWxBdHRhY2hQcmV2aWV3SG9zdCA9ICdhcGYuJyArICht
YWlscnUuU2luZ2xlRG9tYWluTmFtZSB8fCAnbWFpbC5ydScpOwoKCQkJbmV3TWVz
c2FnZS5BdHRhY2htZW50SG9zdCA9ICdhZi5hdHRhY2gnICsgKG1haWxydS5TaW5n
bGVEb21haW5OYW1lIHx8ICdtYWlsLnJ1Jyk7CgoJCQlpZiAobWVzc2FnZS5hdHRh
Y2hlcykgewoKCQkJCXZhciBBdHRhY2htZW50cyA9IFtdLCBBdHRhY2hsaW5rcyA9
IFtdLCBwYXJ0SWRzID0gW10sIG5ld0F0dGFjaDsKCgkJCQlpZiAoJC5pc0FycmF5
KG1lc3NhZ2UuYXR0YWNoZXMubGlzdCkpIHsKCgkJCQkJZm9yICh2YXIgYXR0YWNo
LCBpPTAsIGw9bWVzc2FnZS5hdHRhY2hlcy5saXN0Lmxlbmd0aDsgaTxsOyBpKysp
IHsKCQkJCQkJYXR0YWNoID0gbWVzc2FnZS5hdHRhY2hlcy5saXN0W2ldOwoKCQkJ
CQkJbmV3QXR0YWNoID0gewoJCQkJCQkJbmFtZTogYWpzLkh0bWwuZXNjYXBlKGF0
dGFjaC5uYW1lKSwKCQkJCQkJCXNpemU6IE1hdGguY2VpbChhdHRhY2guc2l6ZSAv
IE1hdGguS0IpLAoJCQkJCQkJQ29udGVudFR5cGU6IGF0dGFjaC5jb250ZW50X3R5
cGUsCgkJCQkJCQlhdnN0YXR1czogYXR0YWNoLnNjYW4KCQkJCQkJfTsKCgkJCQkJ
CWlmIChhdHRhY2guaWQpIHsKCQkJCQkJCW5ld0F0dGFjaC5QYXJ0SUQgPSBtZXNz
YWdlLmlkICsgJzsnICsgYXR0YWNoLmlkOwoJCQkJCQkJcGFydElkcy5wdXNoKGF0
dGFjaC5pZCk7CgkJCQkJCX0KCgkJCQkJCWlmIChhdHRhY2guZmxhZ3MpIHsKCQkJ
CQkJCW5ld0F0dGFjaC5Jc0ltYWdlID0gYXR0YWNoLmZsYWdzLmltYWdlOwoJCQkJ
CQkJbmV3QXR0YWNoLmlzVE5FRiA9IGF0dGFjaC5mbGFncy50bmVmOwoJCQkJCQkJ
bmV3QXR0YWNoLmlzUkZDODIyID0gYXR0YWNoLmZsYWdzLmVtbDsKCQkJCQkJCW5l
d0F0dGFjaC5Jc01wMyA9IGF0dGFjaC5mbGFncy5tcDM7CgkJCQkJCX0KCgkJCQkJ
CWlmIChhdHRhY2guaHJlZikgewoJCQkJCQkJbmV3QXR0YWNoLmRvd25sb2FkbGlu
ayA9IGF0dGFjaC5ocmVmLmRvd25sb2FkOwoJCQkJCQl9CgoJCQkJCQlpZiAoYXR0
YWNoLmR1ZWRhdGUpIHsKCQkJCQkJCW5ld0F0dGFjaC5kdWVkYXRlID0gZGF0ZVdp
dGhUaW1lem9uZU9mZnNldChhdHRhY2guZHVlZGF0ZSkuZ2V0TG9jYWxlRnVsbERh
dGUoKTsKCQkJCQkJfQoKCQkJCQkJaWYgKGF0dGFjaC50aHVtYm5haWxzKSB7CgkJ
CQkJCQlpZiAoYXR0YWNoLnRodW1ibmFpbHMudGV4dCkgewoJCQkJCQkJCW5ld0F0
dGFjaC5Db250ZW50VGV4dCA9IGF0dGFjaC50aHVtYm5haWxzLnRleHQuc25pcHBl
dDsKCgkJCQkJCQkJdmFyIHNuaXBwZXRMZW5ndGggPSBhdHRhY2gudGh1bWJuYWls
cy50ZXh0LnNuaXBwZXQubGVuZ3RoOwoJCQkJCQkJCWlmIChzbmlwcGV0TGVuZ3Ro
IDwgYXR0YWNoLnRodW1ibmFpbHMudGV4dC5sZW5ndGgpIHsKCQkJCQkJCQkJbmV3
QXR0YWNoLkNvbnRlbnRUZXh0TGVuID0gc25pcHBldExlbmd0aDsKCQkJCQkJCQl9
CgkJCQkJCQl9CgoJCQkJCQkJaWYgKCQuaXNQbGFpbk9iamVjdChhdHRhY2gudGh1
bWJuYWlscy5lbWwpKSB7CgkJCQkJCQkJbmV3QXR0YWNoLlN1YmplY3QgPSBhdHRh
Y2gudGh1bWJuYWlscy5lbWwuc3ViamVjdDsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJ
CQkJbmV3QXR0YWNoLlN1YmplY3QgPSBhdHRhY2gudGh1bWJuYWlscy5lbWw7CgkJ
CQkJCQl9CgoJCQkJCQkJaWYgKGF0dGFjaC50aHVtYm5haWxzLm1wMyAmJiBhdHRh
Y2gudGh1bWJuYWlscy5tcDMucGxheWVyKSB7CgkJCQkJCQkJdmFyIHJlaG9zdCA9
IC9eW14vXSpcL1wvKFteL10rKS8sIG1hdGNoZXM7CgkJCQkJCQkJaWYgKG1hdGNo
ZXMgPSBhdHRhY2gudGh1bWJuYWlscy5tcDMucGxheWVyLm1hdGNoKHJlaG9zdCkp
IHsKCQkJCQkJCQkJbmV3TWVzc2FnZS5NYWlsQXR0YWNoWmlwSG9zdCA9IG1hdGNo
ZXNbMV07CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgoJCQkJCQlpZiAoYXR0
YWNoLmxlZ2FjeSkgewoJCQkJCQkJbmV3QXR0YWNoLkJvZHlTdGFydCA9IGF0dGFj
aC5sZWdhY3kuQm9keVN0YXJ0OwoJCQkJCQkJbmV3QXR0YWNoLk9yaWdpbmFsQm9k
eUxlbiA9IGF0dGFjaC5sZWdhY3kuT3JpZ2luYWxCb2R5TGVuOwoJCQkJCQkJbmV3
QXR0YWNoLkNvbnRlbnROYW1lID0gYXR0YWNoLmxlZ2FjeS5Db250ZW50TmFtZTsK
CQkJCQkJCW5ld0F0dGFjaC5Db250ZW50RW5jb2RpbmcgPSBhdHRhY2gubGVnYWN5
LkNvbnRlbnRFbmNvZGluZzsKCQkJCQkJCW5ld0F0dGFjaC50bmVmX2lkID0gYXR0
YWNoLmxlZ2FjeS50bmVmX2lkOwoJCQkJCQkJbmV3QXR0YWNoLkRvbnRTaG93ID0g
YXR0YWNoLmxlZ2FjeS5Eb250U2hvdzsKCQkJCQkJCW5ld0F0dGFjaC5Gb3JjZUFk
ZE5vdHlwZSA9IGF0dGFjaC5sZWdhY3kuRm9yY2VBZGROb3R5cGU7CgkJCQkJCQlu
ZXdBdHRhY2guU2hvd1RodW1ibmFpbCA9IGF0dGFjaC5sZWdhY3kuU2hvd1RodW1i
bmFpbDsKCQkJCQkJCW5ld0F0dGFjaC5BZGRQaG90byA9IGF0dGFjaC5sZWdhY3ku
QWRkUGhvdG87CgkJCQkJCX0KCgkJCQkJCWlmIChhdHRhY2gudHlwZSA9PSAnbGlu
aycpIHsKCQkJCQkJCUF0dGFjaGxpbmtzLnB1c2gobmV3QXR0YWNoKTsKCQkJCQkJ
fSBlbHNlIHsKCQkJCQkJCUF0dGFjaG1lbnRzLnB1c2gobmV3QXR0YWNoKTsKCQkJ
CQkJfQoJCQkJCX0KCQkJCX0KCgkJCQluZXdNZXNzYWdlLkF0dGFjaG1lbnRzID0g
QXR0YWNobWVudHM7CgkJCQluZXdNZXNzYWdlLkF0dGFjaGZpbGVzX0l0ZW1zID0g
QXR0YWNobWVudHMubGVuZ3RoOwoKCQkJCW5ld01lc3NhZ2UuQXR0YWNobGlua3Mg
PSBBdHRhY2hsaW5rczsKCQkJCW5ld01lc3NhZ2UuQXR0YWNobGlua3NfSXRlbXMg
PSBBdHRhY2hsaW5rcy5sZW5ndGg7CgoJCQkJaWYgKG1lc3NhZ2UuYXR0YWNoZXMu
dG90YWwpIHsKCQkJCQl2YXIgcmVob3N0ID0gL15bXi9dKlwvXC8oW14vXSspLywg
bWF0Y2hlczsKCQkJCQlpZiAobWF0Y2hlcyA9IG1lc3NhZ2UuYXR0YWNoZXMudG90
YWwuaHJlZi5tYXRjaChyZWhvc3QpKSB7CgkJCQkJCW5ld01lc3NhZ2UuQXR0YWNo
QWxsZmlsZXNfQXR0YWNoSG9zdCA9IG1hdGNoZXNbMV07CgkJCQkJCW5ld01lc3Nh
Z2UuQXR0YWNoQWxsZmlsZXNfTXNnSWQgPSBtZXNzYWdlLmlkOwoJCQkJCQluZXdN
ZXNzYWdlLkF0dGFjaEFsbGZpbGVzX25hbWUgPSBtZXNzYWdlLmF0dGFjaGVzLnRv
dGFsLm5hbWU7CgkJCQkJCW5ld01lc3NhZ2UuQXR0YWNoQWxsZmlsZXNfUGFydHNJ
ZCA9IHBhcnRJZHMuam9pbignXycpOwoJCQkJCX0KCQkJCX0KCgkJCQlpZiAobWVz
c2FnZS5hdHRhY2hlcy50bmVmKSB7CgkJCQkJdmFyIHdpbm1haWxEYXRhID0gU3Ry
aW5nLnRvT2JqZWN0KG1lc3NhZ2UuYXR0YWNoZXMudG5lZik7CgkJCQkJbmV3TWVz
c2FnZS5XaW5tYWlsX25hbWUgPSB1bmVzY2FwZSh3aW5tYWlsRGF0YS5maWxlKTsK
CQkJCQluZXdNZXNzYWdlLldpbm1haWxfVVJMRmlsZU5hbWUgPSB3aW5tYWlsRGF0
YS5maWxlOwoJCQkJCW5ld01lc3NhZ2UuV2lubWFpbF9QYXJ0SUQgPSB3aW5tYWls
RGF0YS5pZDsKCQkJCQluZXdNZXNzYWdlLldpbm1haWxfQ2hhbm5lbCA9IHdpbm1h
aWxEYXRhLmNoYW5uZWw7CgkJCQl9CgkJCX0KCgkJCWlmIChtZXNzYWdlLmNvbGxl
Y3RvcikgewoJCQkJbmV3TWVzc2FnZS5jb2xsZWN0b3IgPSBtZXNzYWdlLmNvbGxl
Y3Rvci5pZDsKCQkJfQoKCQkJaWYgKG1lc3NhZ2UuYm9keSkgewoKCQkJCW5ld01l
c3NhZ2UubGV0X2JvZHkgPSBtZXNzYWdlLmJvZHkuaHRtbDsKCQkJCW5ld01lc3Nh
Z2UubGV0X2JvZHlfcGxhaW4gPSBtZXNzYWdlLmJvZHkudGV4dDsKCQkJfQoKCQkJ
aWYgKG1lc3NhZ2UudGVtcGxhdGVzKSB7CgoJCQkJaWYgKG1lc3NhZ2UudGVtcGxh
dGVzLnJlcGxheSkgewoKCQkJCQluZXdNZXNzYWdlLlN1YmplY3RSZSA9IGFqcy5I
dG1sLmVzY2FwZShtZXNzYWdlLnRlbXBsYXRlcy5yZXBsYXkuc3ViamVjdCk7CgkJ
CQkJbmV3TWVzc2FnZS5sZXRfYm9keV9yZSA9IHJlcGxhY2VNYWNyb3MobWVzc2Fn
ZS50ZW1wbGF0ZXMucmVwbGF5LmJvZHkuaHRtbCk7CgkJCQkJbmV3TWVzc2FnZS5s
ZXRfYm9keV9yZV9wbGFpbiA9IHJlcGxhY2VNYWNyb3MobWVzc2FnZS50ZW1wbGF0
ZXMucmVwbGF5LmJvZHkudGV4dCk7CgkJCQl9CgoJCQkJaWYgKG1lc3NhZ2UudGVt
cGxhdGVzLmZvcndhcmQpIHsKCgkJCQkJbmV3TWVzc2FnZS5TdWJqZWN0RndkID0g
YWpzLkh0bWwuZXNjYXBlKG1lc3NhZ2UudGVtcGxhdGVzLmZvcndhcmQuc3ViamVj
dCk7CgkJCQkJbmV3TWVzc2FnZS5sZXRfYm9keV9md2QgPSByZXBsYWNlTWFjcm9z
KG1lc3NhZ2UudGVtcGxhdGVzLmZvcndhcmQuYm9keS5odG1sKTsKCQkJCQluZXdN
ZXNzYWdlLmxldF9ib2R5X2Z3ZF9wbGFpbiA9IHJlcGxhY2VNYWNyb3MobWVzc2Fn
ZS50ZW1wbGF0ZXMuZm9yd2FyZC5ib2R5LnRleHQpOwoJCQkJfQoJCQl9CgoJCQlp
ZiAobWVzc2FnZS5yZXNlbmQpIHsKCgkJCQlmaWxsRW1haWxGaWVsZHMobWVzc2Fn
ZS5yZXNlbmQsIG5ld01lc3NhZ2UsICdSZVNlbnQnLCBbJ2Zyb20nLCAndG8nXSwg
WydGcm9tJywgJ1RvJ10pOwoKCQkJCWlmIChtZXNzYWdlLnJlc2VuZC5kYXRlKSB7
CgkJCQkJbmV3TWVzc2FnZS5SZVNlbnREYXRlID0gZGF0ZVdpdGhUaW1lem9uZU9m
ZnNldChtZXNzYWdlLnJlc2VuZC5kYXRlKS5nZXRMb2NhbGVGdWxsRGF0ZSgpOwoJ
CQkJfQoKCQkJCW5ld01lc3NhZ2UuUmVTZW5kQ29tbWVudCA9IG1lc3NhZ2UucmVz
ZW5kLmNvbW1lbnQ7CgkJCX0KCgkJCWlmIChtZXNzYWdlLnJlcGxpZXMpIHsKCgkJ
CQlmaWxsRW1haWxGaWVsZHMobWVzc2FnZS5yZXBsaWVzLCBuZXdNZXNzYWdlLCAn
UmVwbHknLCBbJ3RvJ10sIFsnVG8nXSk7CgkJCQlmaWxsRW1haWxGaWVsZHMobWVz
c2FnZS5yZXBsaWVzLCBuZXdNZXNzYWdlLCAnUmVwbHlBbGwnLCBbJ2FsbCcsICdj
YyddLCBbJ1RvJywgJ0NDJ10pOwoJCQl9CgoJCQlpZiAobWVzc2FnZS5jb3JyZXNw
b25kZW50cykgewoJCQkJaWYgKG1lc3NhZ2UuY29ycmVzcG9uZGVudHMuZnJvbSkg
ewoJCQkJCWlmIChtZXNzYWdlLmNvcnJlc3BvbmRlbnRzLmZyb21bMF0gJiYgbWVz
c2FnZS5jb3JyZXNwb25kZW50cy5mcm9tWzBdLmF2YXRhcnMpIHsKCQkJCQkJbmV3
TWVzc2FnZVsnQXZhdGFyLlVybEFic29sdXRlJ10gPSBtZXNzYWdlLmNvcnJlc3Bv
bmRlbnRzLmZyb21bMF0uYXZhdGFyc1snZGVmYXVsdCddOwoJCQkJCX0KCQkJCX0K
CQkJfQoKCQkJaWYgKG1lc3NhZ2UuaW1hZ2VzKSB7CgoJCQkJaWYgKG1lc3NhZ2Uu
aW1hZ2VzLmF0dGFjaGVzMmNpZCkgewoJCQkJCXZhciBhdHRhY2hlczJjaWRKU09O
ID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZS5pbWFnZXMuYXR0YWNoZXMyY2lkKTsK
CQkJCQluZXdNZXNzYWdlLm1hcF9pbmxpbmVfaW1nID0gYXR0YWNoZXMyY2lkSlNP
Ti5zdWJzdHJpbmcoMSwgYXR0YWNoZXMyY2lkSlNPTi5sZW5ndGggLSAxKTsKCQkJ
CX0KCgkJCQluZXdNZXNzYWdlLk1haWxXaXRoSW1hZ2VzID0gbWVzc2FnZS5pbWFn
ZXMuZXhpc3RzOwoJCQkJbmV3TWVzc2FnZS5IYXNCYW5uZWRJbWFnZXMgPSBtZXNz
YWdlLmltYWdlcy5iYW5uZWQ7CgkJCQluZXdNZXNzYWdlLkltYWdlc0FyZUhpZGRl
biA9IG1lc3NhZ2UuaW1hZ2VzLmhpZGRlbjsKCQkJfQoKCQkJaWYgKG1lc3NhZ2Uu
ZmxhZ3MpIHsKCgkJCQlpZiAobWVzc2FnZS5mbGFncy5zYWZlKSB7CgkJCQkJbmV3
TWVzc2FnZS5maWxlc19zdGF0dXMgPSAnY2xlYW4nOwoJCQkJfQoKCQkJCW5ld01l
c3NhZ2UuSGlkZUZhc3RBbnN3ZXIgPSBtZXNzYWdlLmZsYWdzLmhpZGVfZmFzdF9h
bnN3ZXJzOwoJCQkJbmV3TWVzc2FnZS5SZWNlaXB0ID0gbWVzc2FnZS5mbGFncy5y
ZWNlaXB0OwoJCQkJbmV3TWVzc2FnZS54X3NwYW0gPSBtZXNzYWdlLmZsYWdzLnBy
b2JhYmxlX3NwYW07CgkJCQluZXdNZXNzYWdlLnhfdWJsX2JsYWNrID0gbWVzc2Fn
ZS5mbGFncy5ibGFja2xpc3Rfc3BhbTsKCQkJfQoKCQkJaWYgKG1lc3NhZ2UuZHJh
ZnRzKSB7CgoJCQkJbmV3TWVzc2FnZS5yZXBseV9kcmFmdCA9IG1lc3NhZ2UuZHJh
ZnRzLnJlcGx5OwoJCQkJbmV3TWVzc2FnZS5yZXBseWFsbF9kcmFmdCA9IG1lc3Nh
Z2UuZHJhZnRzLnJlcGx5YWxsOwoJCQkJbmV3TWVzc2FnZS5mb3J3YXJkX2RyYWZ0
ID0gbWVzc2FnZS5kcmFmdHMuZm9yd2FyZDsKCgkJCQluZXdNZXNzYWdlLmxhc3Rf
ZHJhZnRfdHlwZSA9IG1lc3NhZ2UuZHJhZnRzLmxhc3RfdHlwZTsKCgkJCQlpZiAo
bmV3TWVzc2FnZS5sYXN0X2RyYWZ0X3R5cGUpIHsKCQkJCQluZXdNZXNzYWdlLmxh
c3RfZHJhZnQgPSBtZXNzYWdlLmRyYWZ0c1tuZXdNZXNzYWdlLmxhc3RfZHJhZnRf
dHlwZV07CgkJCQl9CgkJCX0KCgkJCWlmIChtZXNzYWdlLmhlYWRlcnMpIHsKCQkJ
CW5ld01lc3NhZ2UuTGlzdFVuc3Vic2NyaWJlID0gbWVzc2FnZS5oZWFkZXJzWydM
aXN0LVVuc3Vic2NyaWJlJ107CgkJCQluZXdNZXNzYWdlLkxpc3RTdWJzY3JpYmUg
PSBtZXNzYWdlLmhlYWRlcnNbJ0xpc3QtU3Vic2NyaWJlJ107CgkJCX0KCgkJCXJl
dHVybiBuZXdNZXNzYWdlOwoJCX0KCX07CgoJanNMb2FkZXIubG9hZGVkKCd7bWFp
bHJ1LnV0aWxzfW1haWxydS5VdGlscy5BamF4Q29udmVydGVyJywgMSk7CgovLyBk
YXRhL3J1L2ltYWdlcy9qcy9ydS91dGlscy9tYWlscnUuVXRpbHMuQWpheENvbnZl
cnRlci5qcyBlbmQKCihmdW5jdGlvbiAodW5kZWZpbmVkKSB7CgkJLyoqIEBuYW1l
c3BhY2UgbWFpbHJ1LnRocmVhZHMgKi8KCQlpZiggbWFpbHJ1LnRocmVhZHMgKXsK
Ly8JCQlqc0Nvb2tpZS5zZXQoJ3RocmVhZHMnLCAxLCBqc0Nvb2tpZS5XRUVLKTsK
CQkJanNDb29raWUucmVtb3ZlKCd0aHJlYWRzJyk7CgkJfQoJCWVsc2UgewoJCQlq
c0Nvb2tpZS5yZW1vdmUoJ3RocmVhZHMnKTsKCQl9CgoKCQkvKioKCQkgKiBAY2xh
c3MJbWFpbHJ1LkFQSS5SZXN1bHQKCQkgKiBAcGFyYW0Je21haWxydS5BamF4LlJl
c3VsdH0gUmVzCgkJICogQGNvbnN0cnVjdG9yCgkJICovCgkJZnVuY3Rpb24gUmVz
cG9uc2UoUmVzKXsKCQkJZm9yKCB2YXIga2V5IGluIFJlcyApIGlmKCBSZXMuaGFz
T3duUHJvcGVydHkoa2V5KSApewoJCQkJdGhpc1trZXldID0gUmVzW2tleV07CgkJ
CX0KCQl9CgoKCQlSZXNwb25zZS5mbiA9CgkJUmVzcG9uc2UucHJvdG90eXBlID0g
KGZ1bmN0aW9uIChmbiwgRil7CgkJCUYucHJvdG90eXBlID0gZm47CgkJCXJldHVy
bgluZXcgRjsKCQl9KShtYWlscnUuQWpheC5SZXN1bHQuZm4sIGZ1bmN0aW9uICgp
e30pOwoKCgkJdmFyIF9zdGF0dXMgPSB7CgkJCSAgcmVkaXJlY3Q6IDMwMgoJCQks
ICdhY2Nlc3MtZGVuaWVkJzogNDAzCgkJCSwgJ21hbnktcmVxdWVzdHMnOiA0MjkK
CQkJLCAncmV0cnktd2l0aCc6IDQ0OQoJCX07CgoJCWFqcy5leHRlbmQoUmVzcG9u
c2UuZm4sIHsKCQkJaXNPazogZnVuY3Rpb24gKCl7CgkJCQlyZXR1cm4JdGhpcy5p
c09LKCk7CgkJCX0sCgoJCQlnZXREYXRhOiBmdW5jdGlvbiAoKXsKCQkJCXJldHVy
bgl0aGlzLmJvZHk7CgkJCX0KCQl9KTsKCgkJQXJyYXkuZm9yRWFjaChPYmplY3Qu
a2V5cyhfc3RhdHVzKSwgZnVuY3Rpb24oc3RhdHVzTmFtZSkgewoJCQl2YXIgc3Rh
dHVzVmFsdWUgPSBfc3RhdHVzW3N0YXR1c05hbWVdOwoKCQkJc3RhdHVzTmFtZSA9
ICQuY2FtZWxDYXNlKCdpcy0nICsgc3RhdHVzTmFtZSk7CgoJCQl0aGlzW3N0YXR1
c05hbWVdID0gUmVzcG9uc2UuZm5bc3RhdHVzTmFtZV0gPSBmdW5jdGlvbiAoKSB7
CgkJCQlyZXR1cm4gdGhpcy5zdGF0dXMgPT0gc3RhdHVzVmFsdWU7CgkJCX07CgkJ
fSwgd2luZG93KTsKCgoJCXZhciBBamF4ID0gZnVuY3Rpb24gKF9vcHRpb25zKSB7
CgkJCXZhciBfdXJsID0gX29wdGlvbnMuYmFzZVVybCArICd2JyArIF9vcHRpb25z
LnZlcnNpb24gKyAnLycsCgkJCQlfdG9rZW5SZXRyeSA9IF9vcHRpb25zLnRva2Vu
UmV0cnksIF9iYWRUb2tlbjsKCgkJCWZ1bmN0aW9uIGNvbnZlcnREYXRhKHBhcmFt
cykgewoJCQkJdmFyIGRhdGEgPSAkLmV4dGVuZCh7CgkJCQkJZW1haWw6IF9vcHRp
b25zLmVtYWlsCgkJCQl9LCBwYXJhbXMuZGF0YSB8fCBwYXJhbXMuZm9ybURhdGEs
IHsKCQkJCQlhcGk6ICAgX29wdGlvbnMudmVyc2lvbiwKCQkJCQl0b2tlbjogX29w
dGlvbnMudG9rZW4KCQkJCX0pOwoKCQkJCSQuZWFjaChkYXRhLCBmdW5jdGlvbihm
aWVsZCwgdmFsdWUpewoJCQkJCWlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcp
IHsKCQkJCQkJZGF0YVtmaWVsZF0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7CgkJ
CQkJfQoJCQkJfSk7CgoJCQkJcmV0dXJuIGRhdGE7CgkJCX0KCgkJCXJldHVybiB7
CgkJCQljYWxsOiBmdW5jdGlvbiAocGFyYW1zKSB7CgkJCQkJaWYgKG1haWxydVsn
T2ZmbGluZU1vZGUnXSB8fCBfb3B0aW9ucy50b2tlbiB8fCBwYXJhbXMubWV0aG9k
ID09PSAndG9rZW5zJyB8fCAhYWpzLmlzc2V0KHBhcmFtcy50b2tlbnMsIHRydWUp
IHx8IHBhcmFtcy5hbm9ueW1vdXMpIHsKCQkJCQkJdGhpcy5zZW5kKHBhcmFtcyk7
CgkJCQkJfSBlbHNlIHsKCQkJCQkJdGhpcy50b2tlbihwYXJhbXMpOwoJCQkJCX0K
CQkJCX0sCgoJCQkJc2VuZDogZnVuY3Rpb24gKHBhcmFtcykgewoKCQkJCQl2YXIg
dXJsID0gX3VybCArIChwYXJhbXMubWV0aG9kIHx8IHBhcmFtcy51cmwpOwoKCQkJ
CQlpZiAocGFyYW1zLnByb3h5KSB7CgkJCQkJCXVybCA9ICcvYXBpLXByb3h5Lycg
KyBwYXJhbXMucHJveHkgKyAocGFyYW1zLm1ldGhvZCB8fCBwYXJhbXMudXJsKTsK
CQkJCQl9CgoJCQkJCWlmICgvaWZyYW1lLy50ZXN0KHBhcmFtcy5kYXRhVHlwZSkp
IHsKCQkJCQkJcmV0dXJuICQuYWpheCh7CgkJCQkJCQl1cmw6ICAgICAgIHVybCwK
CQkJCQkJCXR5cGU6ICAgICAgJ1BPU1QnLAoJCQkJCQkJZm9ybURhdGE6ICBjb252
ZXJ0RGF0YShwYXJhbXMpLAoJCQkJCQkJZGF0YVR5cGU6ICBwYXJhbXMuZGF0YVR5
cGUsCgkJCQkJCQlmaWxlSW5wdXQ6IHBhcmFtcy5maWxlSW5wdXQsCgkJCQkJCQlz
dWNjZXNzOiAgIHRoaXMuY29tcGxldGUuYmluZCh0aGlzLCBwYXJhbXMpCgkJCQkJ
CX0pOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXJldHVybiBtYWlscnUuQWpheCh7CgkJ
CQkJCQl1cmw6ICAgICAgICAgICAgCQl1cmwsCgkJCQkJCQlkYXRhOiAgICAgICAg
ICAgCQljb252ZXJ0RGF0YShwYXJhbXMpLAoJCQkJCQkJdHlwZTogICAgICAgICAg
IAkJcGFyYW1zLnR5cGUsCgkJCQkJCQlpc1VzZXI6ICAgICAgICAgCQlwYXJhbXMu
aXNVc2VyLAoJCQkJCQkJbG9hZGluZzogICAgICAgIAkJcGFyYW1zLmxvYWRpbmcs
CgkJCQkJCQlsb2FkUGFnZTogICAgICAgIAkJcGFyYW1zLmxvYWRQYWdlICYmIG1h
aWxydS5fbG9hZFBhZ2VVcmwsCgkJCQkJCQloaWRlQXV0b0Vycm9yczogCQlwYXJh
bXMuaGlkZUF1dG9FcnJvcnMsCgkJCQkJCQljYWNoZVJ1bm5pbmc6IAkJCXBhcmFt
cy5jYWNoZVJ1bm5pbmcsCgkJCQkJCQljb252ZXJ0UmVzdWx0VG9PbGRBcGk6IAlw
YXJhbXMuY29udmVydFJlc3VsdFRvT2xkQXBpLAoJCQkJCQkJaXNBUElWMTogCQkJ
CXRydWUsCgkJCQkJCQljb21wbGV0ZTogICAgICAgCQl0aGlzLmNvbXBsZXRlLmJp
bmQodGhpcywgcGFyYW1zKQoJCQkJCQl9KTsKCQkJCQl9CgkJCQl9LAoKCQkJCWNv
bXBsZXRlOiBmdW5jdGlvbiAocGFyYW1zLCByZXN1bHQpIHsKCQkJCQl2YXIgbmV3
UmVzdWx0ID0gbmV3IFJlc3BvbnNlKHJlc3VsdCk7CgkJCQkJaWYgKCFfYmFkVG9r
ZW4gJiYgbmV3UmVzdWx0LmlzQWNjZXNzRGVuaWVkKCkgJiYgbmV3UmVzdWx0Lmdl
dEJvZHkoKSA9PT0gJ3Rva2VuJykgewoJCQkJCQlfYmFkVG9rZW4gPSB0cnVlOwoJ
CQkJCQl0aGlzLnRva2VuKHBhcmFtcyk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJaWYg
KHBhcmFtcy5tZXRob2QgIT09ICd0b2tlbnMnKSB7CgkJCQkJCQlfYmFkVG9rZW4g
PSBmYWxzZTsKCQkJCQkJfQoJCQkJCQlpZiAocGFyYW1zLmNvbnZlcnRSZXN1bHRU
b09sZEFwaSkgewoJCQkJCQkJcGFyYW1zLmNvbXBsZXRlKHJlc3VsdCk7CgkJCQkJ
CX0gZWxzZSB7CgkJCQkJCQlwYXJhbXMuY29tcGxldGUobmV3UmVzdWx0KTsKCQkJ
CQkJfQoJCQkJCX0KCQkJCX0sCgoJCQkJdG9rZW46IGZ1bmN0aW9uIChwYXJhbXMp
IHsKCQkJCQlpZiAoX3Rva2VuUmV0cnktLSA+IDApIHsKCQkJCQkJdGhpcy5zZW5k
KHsKCQkJCQkJCXR5cGU6ICdwb3N0JywKCQkJCQkJCW1ldGhvZDogJ3Rva2Vucycs
CgkJCQkJCQljb21wbGV0ZTogZnVuY3Rpb24gKHBhcmFtcywgcmVzdWx0KSB7CgkJ
CQkJCQkJaWYgKHJlc3VsdC5pc09LKCkpIHsKCQkJCQkJCQkJX29wdGlvbnMudG9r
ZW4gPSByZXN1bHQuZ2V0Qm9keSgpLnRva2VuOwoJCQkJCQkJCQlfdG9rZW5SZXRy
eSA9IF9vcHRpb25zLnRva2VuUmV0cnk7CgkJCQkJCQkJCXRoaXMuY2FsbChwYXJh
bXMpOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCXBhcmFtcy5jb21wbGV0ZShy
ZXN1bHQpOwoJCQkJCQkJCX0KCQkJCQkJCX0uYmluZCh0aGlzLCBwYXJhbXMpCgkJ
CQkJCX0pOwoJCQkJCX0gZWxzZSB7CgkJCQkJCV90b2tlblJldHJ5ID0gX29wdGlv
bnMudG9rZW5SZXRyeTsKCQkJCQkJbWFpbHJ1LnJhZGFyKCdBUEknLCAnVG9rZW5z
UmVjdXI9MScpOwoKCQkJCQkJdmFyIHBhcnNlID0gbWFpbHJ1LkFqYXgucGFyc2Uo
ewoJCQkJCQkJc3RhdHVzOiBfc3RhdHVzWydhY2Nlc3MtZGVuaWVkJ10KCQkJCQkJ
fSwgX3N0YXR1c1snYWNjZXNzLWRlbmllZCddKTsKCgkJCQkJCXZhciByZXNwb25z
ZSA9IG5ldyBSZXNwb25zZShwYXJzZSk7CgoJCQkJCQlwYXJhbXMuY29tcGxldGUo
cmVzcG9uc2UpOwoJCQkJCX0KCQkJCX0KCQkJfTsKCQl9OwoKCgkJdmFyIEFQSSA9
IGZ1bmN0aW9uIChfb3B0aW9ucykgewoJCQlfb3B0aW9ucyA9ICQuZXh0ZW5kKHRy
dWUsIHt9LCBBUEkuZGVmYXVsdE9wdGlvbnMsIF9vcHRpb25zKTsKCgkJCXZhciBf
YWpheAk9IG5ldyBBamF4KF9vcHRpb25zKTsKCgkJCXZhciBfYXBpCT0gZnVuY3Rp
b24gKHJlcXVlc3QpIHsKCQkJCXJldHVybiBfYWpheC5jYWxsKHJlcXVlc3QpOwoJ
CQl9OwoKCgkJCV9hcGkuYWpheCA9IGZ1bmN0aW9uIChyZXEpewoJCQkJcmV0dXJu
CW1haWxydS5BamF4KHJlcSk7CgkJCX07CgoKCQkJX2FwaS51cGxvYWQgPSBmdW5j
dGlvbihhY3Rpb24sIGRhdGEsIGNhbGxiYWNrKSB7CgkJCQlpZiAodHlwZW9mIGFj
dGlvbiA9PSAnc3RyaW5nJykgewoJCQkJCWRhdGEudXJsICAgICAgPSBhY3Rpb247
CgkJCQkJZGF0YS5jb21wbGV0ZSA9IGNhbGxiYWNrOwoJCQkJfQoKCQkJCXJldHVy
biBfYWpheC5jYWxsKGRhdGEpOwoJCQl9OwoKCgkJCV9hcGkuY2FsbCA9IGZ1bmN0
aW9uICh0eXBlLCBtZXRob2QsIGRhdGEsIGZuLCBsb2FkaW5nLCBoaWRlQXV0b0Vy
cm9ycywgYW5vbnltb3VzKSB7CgkJCQlpZiAoJC5pc0Z1bmN0aW9uKGRhdGEpKSB7
CgkJCQkJZm4gPSBkYXRhOwoJCQkJCWRhdGEgPSB1bmRlZmluZWQ7CgkJCQl9CgoJ
CQkJcmV0dXJuIF9hamF4LmNhbGwoewoJCQkJCXR5cGU6ICAgICAgICAgICB0eXBl
LAoJCQkJCW1ldGhvZDogICAgICAgICBtZXRob2QsCgkJCQkJZGF0YTogICAgICAg
ICAgIGRhdGEsCgkJCQkJbG9hZGluZzogICAgICAgIGxvYWRpbmcsCgkJCQkJY29t
cGxldGU6ICAgICAgIGZuIHx8ICQubm9vcCwKCQkJCQloaWRlQXV0b0Vycm9yczog
aGlkZUF1dG9FcnJvcnMsCgkJCQkJYW5vbnltb3VzOiAgICAgIGFub255bW91cwoJ
CQkJfSk7CgkJCX07CgoJCQkkLmVhY2goWydwb3N0JywgJ2dldCddLCBmdW5jdGlv
biAoaywgdHlwZSkgewoJCQkJX2FwaVt0eXBlXSA9IGZ1bmN0aW9uIChtZXRob2Qs
IGRhdGEsIGZuLCBsb2FkaW5nLCBoaWRlQXV0b0Vycm9ycywgYW5vbnltb3VzKSB7
CgkJCQkJcmV0dXJuIF9hcGkuY2FsbCh0eXBlLCBtZXRob2QsIGRhdGEsIGZuLCBs
b2FkaW5nLCBoaWRlQXV0b0Vycm9ycywgYW5vbnltb3VzKTsKCQkJCX0KCQkJfSk7
CgoJCQlyZXR1cm4gX2FwaTsKCQl9OwoKCQlBUEkuZGVmYXVsdE9wdGlvbnMgPSB7
CgkJCXRva2VuUmV0cnk6IDIsCgkJCXZlcnNpb246ICAgIDEsCgkJCWJhc2VVcmw6
ICAgICcvYXBpLycsCgkJCS8qKiBAbmFtZXNwYWNlIHdpbmRvdy5tYWlscnVfYXBp
X3Rva2VuICovCgkJCXRva2VuOiAgICAgIHdpbmRvdy5tYWlscnVfYXBpX3Rva2Vu
IHx8ICcnLAoJCQllbWFpbDogICAgICAnJwoJCX07CgoKCQltYWlscnUuQVBJID0g
bmV3IEFQSSh7CgkJCWVtYWlsOiBtYWlscnUudXNlcmVtYWlsCgkJfSk7CgoKCQkv
KioKCQkgKiDQktGA0LXQvNC10L3QvdGL0Lkg0LrQvtC0LCDQv9C+0YHQu9C1INC/
0LXRgNC10YXQvtC00LAg0L3QsCDRgtGA0LXQtNGLINC30LDRh9C40YHRgtC40YLR
jCEKCQkgKiBodHRwczovL2ppcmEubWFpbC5ydS9icm93c2UvTUFJTC03ODk1CgkJ
ICovCgkJdmFyIF9tYXJrU3RhdGUgPSB7CgkJCSAgMjogWyd1bnJlYWQnLCAndW5z
ZXQnXQoJCQksIDE6IFsndW5yZWFkJywgJ3NldCddCgkJCSwgNjogWydmbGFnZ2Vk
JywgJ3NldCddCgkJCSwgNzogWydmbGFnZ2VkJywgJ3Vuc2V0J10KCQl9OwoKCQlt
YWlscnUudGhyZWFkcyAmJiAoZnVuY3Rpb24gKGFwaSl7CgkJCWFwaS5hamF4ID0g
ZnVuY3Rpb24gKHJlcSl7CgkJCQl2YXIgdXJsID0gcmVxLnVybCsnJzsKCgkJCQlp
ZiggfnVybC5pbmRleE9mKCdjaGVja25ldycpICl7CgkJCQkJcmVxLm1ldGhvZCA9
ICd0aHJlYWRzL3N0YXR1cyc7CgkJCQl9CgkJCQllbHNlIGlmKCB+dXJsLmluZGV4
T2YoJ21vdmVtc2cnKSApewoJCQkJCXZhciBpZHMgPSBbXS5jb25jYXQocmVxLmRh
dGEuaWQpOwoKCQkJCQlpZiggbWFpbHJ1Lk1lc3NhZ2VzLmdldFNhZmUoaWRzWzBd
KS50aHJlYWQgKXsKCQkJCQkJaWYoIHJlcS5kYXRhLm1hcmsgKXsKCQkJCQkJCXZh
ciBtYXJrID0gcmVxLmRhdGEubWFya21lc3NhZ2U7CgkJCQkJCQlyZXEubWV0aG9k
CQk9ICd0aHJlYWRzL21hcmtzJzsKCQkJCQkJCXJlcS5kYXRhLm1hcmtzCT0gW3sg
bmFtZTogX21hcmtTdGF0ZVttYXJrXVswXSB9XTsKCQkJCQkJCXJlcS5kYXRhLm1h
cmtzWzBdW19tYXJrU3RhdGVbbWFya11bMV1dID0gaWRzOwoJCQkJCQkJcmVxLmRh
dGEubWFya3MJPSBKU09OLnN0cmluZ2lmeShyZXEuZGF0YS5tYXJrcyk7CgkJCQkJ
CQltYWlscnUubG9nKCd0aHJlYWQubWFyaycsIHJlcSk7CgkJCQkJCX0KCQkJCQkJ
ZWxzZSB7CgkJCQkJCQlyZXEubWV0aG9kCQk9ICd0aHJlYWRzLycrKHJlcS5kYXRh
LnJlbW92ZSAmJiAocmVxLmRhdGEuZm9sZGVyICE9IG1haWxydS5Gb2xkZXIuVFJB
U0gpID8gJ3JlbW92ZScgOiAnbW92ZScpOwoJCQkJCQkJcmVxLmRhdGEuaWRzCT0g
SlNPTi5zdHJpbmdpZnkoaWRzKTsKCQkJCQkJCW1haWxydS5sb2coJ3RocmVhZC5t
b3ZlJywgcmVxKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQlpZiggcmVxLm1l
dGhvZCApewoJCQkJCXJldHVybiBhcGkocmVxKTsKCQkJCX0KCQkJCWVsc2UgewoJ
CQkJCXJldHVybiBtYWlscnUuQWpheChyZXEpOwoJCQkJfQoJCQl9OwoJCX0pKG1h
aWxydS5BUEkpOwoJfSkoKTsKCgoJanNMb2FkZXIubG9hZGVkKCd7bWFpbHJ1fW1h
aWxydS5BUEknLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L21haWxydS5B
UEkuanMgZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9tYWlscnUuQWQuanMg
c3RhcnQKCi8qZ2xvYmFsIFlhKi8KCihmdW5jdGlvbiAod2luLCBkb2MsIHVuZGVm
KQoJewoJCS8qKiBAbmFtZXNwYWNlIHdpbi5ZYSAqLwoJCS8qKiBAbmFtZXNwYWNl
IHdpbi5JU19VVEYgKi8KCQkvKiogQG5hbWVzcGFjZSB3aW4uTWFpbFJ1VGFyZ2V0
ICovCgoJCXZhcgoJCQkgIHljYwkJPSAneWFuZGV4X2NvbnRleHRfY2FsbGJhY2tz
JwoJCQksIHRzCQk9IHt9CS8vIHByZXZpb3VzIHVwZGF0ZSB0aW1lCgkJCSwgQURT
CQk9IFtdCgkJCSwgY2hhcnNldAk9ICEhd2luLklTX1VURiA/ICd1dGYtOCcgOiAn
d2luZG93cy0xMjUxJwkvLyBjaGFyc2V0IGJ5IGZyb250ZW5kCgkJCSwgTUlOX0RF
TEFZCT0gMAkvLyBtaW4gZGVsYXksIGJlZm9yZSB1cGRhdGluZyBhZAoJCQksIF9l
bHMJCT0ge30KCQkJLCBfX0FEX18JPSBtYWlscnUuQWQJLy8gc2F2ZWQgY3VycmVu
dCBhZHMKCQk7CgoJCS8qKgoJCSAqIEBjbGFzcyAgIG1haWxydS5BZAoJCSAqLwoJ
CWpzQ2xhc3MKCQkJLmNyZWF0ZSgnbWFpbHJ1LkFkJykKCQkJLnN0YXRpY3MoewoK
CQkJZWxzOiBfZWxzLAoKCQkJZ2V0RWw6IGZ1bmN0aW9uIChpZCl7CgkJCQkvLyDQ
ndCw0YXQvtC00LjQvCBlbGVtZW50CgkJCQl2YXIgZWwgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChpZCk7CgoJCQkJLy8g0J/RgNC+0LLQtdGA0Y/QtdC8LCDQstC4
0LTQtdC9INC70Lgg0L7QvQoJCQkJaWYoIGVsICYmICFlbC5vZmZzZXRXaWR0aCAm
JiBtYWlscnUudjIgKXsKCQkJCQkvLyDQldGB0LvQuCDQvdC10YIsINC40YnQtdC8
INCy0YHQtSDQstC40LTQuNC80YvQtQoJCQkJCXZhciB0bXBFbCA9ICQoJyMnK2lk
Kyc6dmlzaWJsZScsICcjTEVHTycpWzBdOwoJCQkJCWlmKCB0bXBFbCApewoJCQkJ
CQllbCA9IHRtcEVsOwoJCQkJCX0KCQkJCX0KCi8vCQkJCWlmKCAhZWwgKXsKLy8J
CQkJCWVsCT0gX2Vsc1tpZF07Ci8vCQkJCX0KLy8JCQkJZWxzZSBpZiggX2Vsc1tp
ZF0gJiYgKF9lbHNbaWRdICE9PSBlbCkgKXsKLy8JCQkJCSQoZWwpLnJlcGxhY2VX
aXRoKF9lbHNbaWRdKTsKLy8JCQkJCWVsID0gX2Vsc1tpZF07Ci8vCQkJCX0KCgov
LwkJCQl2YXIgJGVsID0gJChfZWxzW2lkXSA9IGVsKTsKLy8JCQkJbWFpbHJ1LkFk
LmFkZFN0YXRlQ2xhc3MoJGVsLnBhcmVudCgpLCAkZWwuYXR0cignZGF0YS1hZC1z
dGF0ZScpIHx8ICdkaXJlY3QnKTsKCgkJCQlyZXR1cm4JJChlbCk7CgkJCX0sCgoK
CQkJcmVzdG9yZTogZnVuY3Rpb24gKCl7CgkJCQkkLmVhY2goX2VscywgZnVuY3Rp
b24gKGlkKXsKCQkJCQltYWlscnUuQWQuZ2V0RWwoaWQpOwoJCQkJfSk7CgkJCX0s
CgoJCQlwcmlvcml0eTogewoJCQkJJ2NvbnRleHQnOiAxLAoJCQkJJ3JibGluZSc6
IDIsCgkJCQknZG91YmxlJzogMwoJCQl9LAoKCQkJdXJsczogewoJCQkJJ2RpcmVj
dC1sZWZ0JzogZnVuY3Rpb24gKHVybCl7CgkJCQkJcmV0dXJuIG1haWxydS5pc01h
aWxib3hQYWdlKHVybCkgJiYgIShtYWlscnUuaXNTZW5kTXNnT2tQYWdlKHVybCkg
fHwgbWFpbHJ1LmlzQWRkcmVzc2Jvb2tQYWdlKHVybCkpOwoJCQkJfSwKCQkJCSdh
ZHZlcnRpc2luZy10b3BsaW5lJzogZnVuY3Rpb24gKHVybCl7CgkJCQkJcmV0dXJu
IChtYWlscnUuaXNNYWlsYm94UGFnZSh1cmwpICYmICEobWFpbHJ1LmlzQ29tcG9z
ZVBhZ2UodXJsKSB8fCBtYWlscnUuaXNTZW5kTXNnT2tQYWdlKHVybCkpKSB8fAoJ
CQkJCQltYWlscnUuaXNBZGRyZXNzYm9va1BhZ2UodXJsKTsKCQkJCX0sCgkJCQkn
c2VuZG1zZ29rLWJvdHRvbSc6IG1haWxydS5pc1NlbmRNc2dPa1BhZ2UsCgoJCQkJ
J21zZ2xpc3QtZG91YmxlJzogbWFpbHJ1LmlzTXNnTGlzdFBhZ2UsCgkJCQknbXNn
bGlzdC1sZWZ0JzogbWFpbHJ1LmlzTXNnTGlzdFBhZ2UsCgkJCQknbXNnbGlzdC10
b3BsaW5lJzogbWFpbHJ1LmlzTXNnTGlzdFBhZ2UsCgoJCQkJJ3JlYWRtc2ctZG91
YmxlJzogbWFpbHJ1LmlzUmVhZE1zZ1BhZ2UsCgkJCQkncmVhZG1zZy1sZWZ0Jzog
bWFpbHJ1LmlzUmVhZE1zZ1BhZ2UsCgkJCQkncmVhZG1zZy10b3BsaW5lJzogbWFp
bHJ1LmlzUmVhZE1zZ1BhZ2UsCgoJCQkJJ2dvc2VhcmNoLWRvdWJsZSc6IG1haWxy
dS5pc1NlYXJjaFBhZ2UsCgkJCQknZ29zZWFyY2gtbGVmdCc6IG1haWxydS5pc1Nl
YXJjaFBhZ2UsCgkJCQknZ29zZWFyY2gtdG9wbGluZSc6IG1haWxydS5pc1NlYXJj
aFBhZ2UsCgoJCQkJJ2ZpbGVzZWFyY2gtZG91YmxlJzogbWFpbHJ1LmlzRmlsZVNl
YXJjaFBhZ2UsCgkJCQknZmlsZXNlYXJjaC1sZWZ0JzogbWFpbHJ1LmlzRmlsZVNl
YXJjaFBhZ2UsCgkJCQknZmlsZXNlYXJjaC10b3BsaW5lJzogbWFpbHJ1LmlzRmls
ZVNlYXJjaFBhZ2UsCgoJCQkJJ2FkZHJlc3Nib29rLWRvdWJsZSc6IG1haWxydS5p
c0FkZHJlc3Nib29rUGFnZSwKCQkJCSdhZGRyZXNzYm9vay1sZWZ0JzogbWFpbHJ1
LmlzQWRkcmVzc2Jvb2tQYWdlLAoJCQkJJ2FkZHJlc3Nib29rLXRvcGxpbmUnOiBt
YWlscnUuaXNBZGRyZXNzYm9va1BhZ2UKCQkJfSwKCgkJCXRlc3Q6IGZ1bmN0aW9u
IChpZCwgdXJsKXsKCQkJCXZhciB0ZXN0Rm4gPSBtYWlscnUuQWQudXJsc1tpZF07
CgkJCQl1cmwgPSB1cmwgfHwganNIaXN0b3J5LmdldCgpIHx8ICcnOwoJCQkJcmV0
dXJuICQuaXNGdW5jdGlvbih0ZXN0Rm4pID8gdGVzdEZuKHVybCkgOiAodXJsLm1h
dGNoKHRlc3RGbikgIT0gbnVsbCk7CgkJCX0sCgoJCQkvLyBQdWJsaXNoIGNvbnRl
eHQKCQkJY29udGV4dDogZnVuY3Rpb24oZG9tSWQsIGFkcykKCQkJewoJCQkJdmFy
IHQgPSArbmV3IERhdGU7CgoJCQkJaWYoICFkb2MuZ2V0RWxlbWVudEJ5SWQoZG9t
SWQpICkKCQkJCXsKCQkJCQlkZWJ1Zy5sb2coJ1dBUk46IEFkLmNvbnRleHQnLCBk
b21JZCwgJ25vdCBmb3VuZCcpOwoJCQkJfQoJCQkJZWxzZSBpZiggIXRzW2RvbUlk
XSB8fCAodCAtIHRzW2RvbUlkXSA+IE1JTl9ERUxBWSkgKQoJCQkJewoJCQkJCXRz
W2RvbUlkXQk9IHQ7CgkJCQkJdGhpcy5kaXJlY3QoZG9tSWQsIGFkc1swXSk7CgkJ
CQl9CgkJCX0sCgoJCQkvLyBQdWJsaXNoIFlhbmRleC5EaXJlY3QKCQkJZGlyZWN0
OiBmdW5jdGlvbiAoZG9tSWQsIG8sIGlkKXsKCQkJCS8qKiBAbmFtZXNwYWNlIG8u
cGFydG5lcl9pZCAqLwoJCQkJdmFyICRjb250YWluZXIgPSBtYWlscnUuQWQuZ2V0
RWwoZG9tSWQpLCAkcGFyZW50ID0gJGNvbnRhaW5lci5wYXJlbnQoKS5zaG93KCks
CgkJCQkJcGFydG5lcklkID0gby5wYXJ0bmVyX2lkLCBvcmRlciA9IG8ub3JkZXI7
CgoJCQkJbWFpbHJ1LkFkLmFkZFN0YXRlQ2xhc3MoJHBhcmVudCwgJ2RpcmVjdCcp
OwoKCQkJCS8vIFJlbW92ZSBjdXN0b20gcHJvcGVydGllcwoJCQkJJC5lYWNoKFsn
cGFydG5lcl9pZCcsICdvcmRlciddLCBmdW5jdGlvbiAoaSwgaykKCQkJCXsKCQkJ
CQlvW2tdID0gdW5kZWY7CgkJCQkJZGVsZXRlIG9ba107CgkJCQl9KTsKCgkJCQkv
LyBTZXQgY2hhcnNldCBieSBmcm9udGVuZAoJCQkJby5zaXRlX2NoYXJzZXQJPSBj
aGFyc2V0OwoKCQkJCS8vIFJlZ2lzdGVyIGNhbGxiYWNrCgkJCQl3aW5beWNjXSA9
IHdpblt5Y2NdIHx8IFtdOwoKCQkJCXZhciBpID0gd2luW3ljY10ucHVzaChmdW5j
dGlvbigpewoJCQkJCS8qKiBAbmFtZXNwYWNlIFlhLkRpcmVjdCAqLwoJCQkJCS8q
KiBAbmFtZXNwYWNlIFlhLkRpcmVjdC5pbnNlcnRJbnRvICovCgoJCQkJCVlhLkRp
cmVjdC5pbnNlcnRJbnRvKHBhcnRuZXJJZCwgZG9tSWQsIE9iamVjdC5leHRlbmQo
e30sIG8pLCBmdW5jdGlvbiAoKSB7CgoJCQkJCQlpZiAoL2FydGFtb25vdmFAY29y
cHxhbnRpX2dvbmFAbWFpbC9pLnRlc3QobWFpbHJ1LnVzZXJlbWFpbCkpIHsKCQkJ
CQkJCSQoJyMnICsgZG9tSWQpLmh0bWwoJyMnICsgZG9tSWQgKyAnIC0tIHlhbmRl
eCBkaXJlY3QgaXMgZW1wdHkhJyk7CgkJCQkJCX0KCgkJCQkJCW1haWxydS5sb2co
J21haWxydS5hZC53YXJuJywgJ1lhRGlyZWN0ICMnKyBkb21JZCArJyAtLSBlbXB0
eSEnLCB0cnVlKTsKCQkJCQkJKG5ldyBJbWFnZSkuc3JjCT0gJy8vZ3N0YXQuJyAr
IG1haWxydS5zdGF0aWNEb21haW5OYW1lICsgJy9nc3RhdD91YT0xJmNsaWVudGVy
cm9yLllhRGlyZWN0RW1wdHk9MSZsb2dtZT1ZYURpcmVjdEVtcHR5LicrbWFpbHJ1
LnVzZXJlbWFpbDsKCgkJCQkJCWlmIChpZCA9PSAnZGlyZWN0LWxlZnQnKSB7CgkJ
CQkJCQkkcGFyZW50LmhpZGUoKQoJCQkJCQl9CgkJCQkJfSk7CgoJCQkJCWFqcy5s
b2coJ0lORk86IFlhRGlyZWN0ICMnKyBkb21JZCArJyAtLSBwdWJsaXNoZWQnKTsK
CgkJCQkJaWYoIGlkID09ICdhZHZlcnRpc2luZy10b3BsaW5lJyB8fCBpZCA9PSAn
cmVhZG1zZy10b3BsaW5lJyB8fCBpZCA9PSAnbXNnbGlzdC10b3BsaW5lJyApewoJ
CQkJCQkobmV3IEltYWdlKS5zcmMgPSAnLy9ycy4nICsgbWFpbHJ1LlNpbmdsZURv
bWFpbk5hbWUgKyAnL2Q0NDE1OTMuZ2lmPycgKyBhanMubm93KCk7CgkJCQkJfQoK
CQkJCQkkKHdpbmRvdykudHJpZ2dlckhhbmRsZXIoJ3VwZGF0ZWxlZnRjb2xoZWln
aHQnLCBbJ2RpcmVjdCddKTsKCQkJCX0pOwoJCQkJd2luW3ljY11baS0xXS5vcmRl
ciA9IG9yZGVyOwoJCQkJd2luW3ljY10uc29ydChmdW5jdGlvbiAoYSwgYikge3Jl
dHVybiBiLm9yZGVyIC0gYS5vcmRlcjt9KTsKCgkJCQlpZiggd2luLllhICYmIFlh
LkRpcmVjdCAmJiBZYS5EaXJlY3QuaW5zZXJ0SW50byApCgkJCQl7CS8vIFlhLkRp
cmVjdCBpcyByZWFkeQoJCQkJCXdpblt5Y2NdLnBvcCgpLmNhbGwod2luKTsKCQkJ
CX0KCQkJCWVsc2UgaWYoICF3aW4uaGFzWWFuZGV4Q29udGV4dCApCgkJCQl7CgkJ
CQkJd2luLmhhc1lhbmRleENvbnRleHQgPSB0cnVlOwoJCQkJCXZhciB0ID0gZG9j
LmRvY3VtZW50RWxlbWVudC5maXJzdENoaWxkLCBzID0gZG9jLmNyZWF0ZUVsZW1l
bnQoJ3NjcmlwdCcpOwoJCQkJCXMuc3JjCT0gJy8vYW4ueWFuZGV4LnJ1L3N5c3Rl
bS9jb250ZXh0LmpzJzsKCQkJCQlzLnR5cGUJPSAndGV4dC9qYXZhc2NyaXB0JzsK
CQkJCQlzLnNldEF0dHJpYnV0ZSgnYXN5bmMnLCAndHJ1ZScpOwoJCQkJCXMuc2V0
QXR0cmlidXRlKCdkZWZlcicsICd0cnVlJyk7CgkJCQkJdC5pbnNlcnRCZWZvcmUo
cywgdC5maXJzdENoaWxkKTsKCQkJCX0KCQkJfSwKCgkJCS8vIFB1Ymxpc2ggbWFp
bHJ1IFRhcmdldAoJCQl0YXJnZXQ6IGZ1bmN0aW9uIChlbElkLCBvcHRzLCBpZCl7
CgkJCQl2YXIgJGVsID0gbWFpbHJ1LkFkLmdldEVsKGVsSWQpOwoJCQkJaWYoICRl
bFswXSAmJiB3aW4uTWFpbFJ1VGFyZ2V0ICl7CgkJCQkJbWFpbHJ1LkFkLmFkZFN0
YXRlQ2xhc3MoJGVsLnBhcmVudCgpLCAndGFyZ2V0Jyk7CgkJCQkJd2luLk1haWxS
dVRhcmdldC5wdWJsaXNoKGVsSWQsIG9wdHMsIGZ1bmN0aW9uICgpIHsKCQkJCQkJ
dmFyIGRpcmVjdCA9IG1haWxydS5BZC5nZXRCeUlkKCdkaXJlY3QtbGVmdCcpOwoJ
CQkJCQlpZiAoZGlyZWN0KSB7CgkJCQkJCQlkaXJlY3QucHVibGlzaCgpOwoJCQkJ
CQl9CgkJCQkJfSk7CgkJCQkJJCh3aW5kb3cpLnRyaWdnZXJIYW5kbGVyKCd1cGRh
dGVsZWZ0Y29saGVpZ2h0JywgWyd0YXJnZXQnXSk7CgkJCQl9CgkJCX0sCgoJCQlk
b3VibGVGb3JtYXQ6IGZ1bmN0aW9uKGRhdGEpIHsKCQkJCSQuZWFjaChkYXRhLCBm
dW5jdGlvbiAoa2V5LCB2YWx1ZSkgewoJCQkJCXZhciAkY29udGFpbmVyID0gbWFp
bHJ1LkFkLmdldEVsKHZhbHVlLnBsYWNlSWQpLCAkcGFyZW50ID0gJGNvbnRhaW5l
ci5wYXJlbnQoKTsKCgkJCQkJbWFpbHJ1LkFkLmFkZFN0YXRlQ2xhc3MoJHBhcmVu
dCwgJ2RvdWJsZScpOwoKCQkJCQlpZiAodmFsdWUuaHRtbCkgewoJCQkJCQlpZiAo
Ly10b3BsaW5lJC8udGVzdCh2YWx1ZS5pZCkpIHsKCQkJCQkJCSRjb250YWluZXIu
aHRtbCh2YWx1ZS5odG1sKTsKCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCSRj
b250YWluZXIuaHRtbCgnPGRpdiBjbGFzcz0icmJfYmFubmVyIj4nICsgdmFsdWUu
aHRtbCArICc8L2Rpdj4nKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlIHsKCgkJ
CQkJCXZhciBpZCA9ICdpZCcgKyBqc0NvcmUuZ2V0VW5pcUlkKCk7CgoJCQkJCQkk
Y29udGFpbmVyLmNzcygnaGVpZ2h0JywgdmFsdWUuaGVpZ2h0ICsgJ3B4JykuaHRt
bCgnPGRpdiBjbGFzcz0icmJfYmFubmVyIj48c3BhbiBpZD0iJyArIGlkICsgJyIv
PjwvZGl2PicpOwoKCQkJCQkJdmFyIHBhcmFtcyA9ICQuZXh0ZW5kKHsKCQkJCQkJ
CSd3bW9kZSc6ICdvcGFxdWUnLAoJCQkJCQkJJ3F1YWxpdHknOiAnaGlnaCcKCQkJ
CQkJfSwgdmFsdWUucGFyYW1zKTsKCgkJCQkJCS8qKiBAbmFtZXNwYWNlIHZhbHVl
LmZ2ZXIgKi8KCQkJCQkJc3dmb2JqZWN0LmVtYmVkU1dGKAoJCQkJCQkJdmFsdWUu
c3dmLAoJCQkJCQkJaWQsCgkJCQkJCQl2YWx1ZS53aWR0aCwKCQkJCQkJCXZhbHVl
LmhlaWdodCwKCQkJCQkJCXZhbHVlLmZ2ZXIsCgkJCQkJCQludWxsLAoJCQkJCQkJ
dmFsdWUudmFycywKCQkJCQkJCXBhcmFtcywKCQkJCQkJCXZhbHVlLmF0dHJzLAoJ
CQkJCQkJZnVuY3Rpb24gKCkgewoJCQkJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CgkJCQkJCQkJCSRjb250YWluZXIuY3NzKCdoZWlnaHQnLCAnJyk7CgkJCQkJ
CQkJfSwgMTAwKTsKCQkJCQkJCX0KCQkJCQkJKTsKCQkJCQl9CgoJCQkJCWFqcy5s
b2coJ0lORk86IGRvdWJsZUZvcm1hdCAjJysgdmFsdWUucGxhY2VJZCArJyAtLSBw
dWJsaXNoZWQnKTsKCQkJCX0pOwoKCQkJCSQod2luZG93KS50cmlnZ2VySGFuZGxl
cigndXBkYXRlbGVmdGNvbGhlaWdodCcsIFsnZG91YmxlRm9ybWF0J10pOwoJCQl9
LAoKCQkJcmJsaW5lOiBmdW5jdGlvbihkb21JZCwgbykgewoJCQkJdmFyICRjb250
YWluZXIgPSBtYWlscnUuQWQuZ2V0RWwoZG9tSWQpLCAkcGFyZW50ID0gJGNvbnRh
aW5lci5wYXJlbnQoKTsKCQkJCW1haWxydS5BZC5hZGRTdGF0ZUNsYXNzKCRwYXJl
bnQsICdyYmxpbmUnKTsKCQkJCSRjb250YWluZXIuaHRtbChvLmh0bWwpOwoJCQkJ
YWpzLmxvZygnSU5GTzogcmJsaW5lICMnKyBkb21JZCArJyAtLSBwdWJsaXNoZWQn
KTsKCQkJfSwKCgkJCWFkZFN0YXRlQ2xhc3M6IGZ1bmN0aW9uICgkY29udGFpbmVy
LCBuYW1lKSB7CgkJCQltYWlscnUuQWQuY2xlYXJTdGF0ZUNsYXNzKCRjb250YWlu
ZXIpOwoJCQkJJGNvbnRhaW5lcgoJCQkJCS5hZGRDbGFzcyhuYW1lICsgJy1zdGF0
ZScpCgkJCQkJLmNoaWxkcmVuKCkKCQkJCQkJLmF0dHIoJ2RhdGEtYWQtc3RhdGUn
LCBuYW1lKQoJCQkJOwoJCQl9LAoKCQkJY2xlYXJTdGF0ZUNsYXNzOiBmdW5jdGlv
biAoJGNvbnRhaW5lcikgewoJCQkJJGNvbnRhaW5lci5yZW1vdmVDbGFzcyhmdW5j
dGlvbiAoaSwgbmFtZSkgewoJCQkJCXJldHVybiAobmFtZS5tYXRjaCgvXHcrLXN0
YXRlL2cpIHx8IFtdKS5qb2luKCcgJyk7CgkJCQl9KTsKCQkJfSwKCgkJCWdldEJ5
SWQ6IGZ1bmN0aW9uIChpZCkgewoJCQkJZm9yICggdmFyIGkgPSBBRFMubGVuZ3Ro
OyBpLS07ICApIHsKCQkJCQlpZiAoQURTW2ldLmlkID09IGlkKSB7CgkJCQkJCXJl
dHVybiBBRFNbaV07CgkJCQkJfQoJCQkJfQoJCQkJcmV0dXJuIG51bGw7CgkJCX0s
CgoJCQlwdXNoOiBmdW5jdGlvbiAoKXsKCQkJCWZvciggdmFyIGkgPSAwLCBuID0g
YXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKyApewoJCQkJCUFEUy5wdXNoKG5l
dyBtYWlscnUuQWQoYXJndW1lbnRzW2ldKSk7CgkJCQl9CgkJCX0sCgoJCQlmaW5k
OiBmdW5jdGlvbiAoZm4pewoJCQkJcmV0dXJuICBhanMuZmlsdGVyKEFEUywgZm4p
OwoJCQl9LAoKCQkJcHVzaERvdWJsZUZvcm1hdDogZnVuY3Rpb24oKSB7CgkJCQl2
YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7
CgoJCQkJdmFyIG8gPSB7CgkJCQkJJ2lkJzogJ21zZ2xpc3QtZG91YmxlJywKCQkJ
CQkncGxhY2VJZCc6ICdTY3JvbGxCb2R5JywKCQkJCQkndHlwZSc6ICdkb3VibGUn
LAoJCQkJCSdhZHMnOiBbXQoJCQkJfTsKCgkJCQl2YXIgcGxhY2VJZHMgPSB7CgkJ
CQkJJ3JlYWRtc2ctbGVmdCc6ICdzbG90LWNvbnRhaW5lcl8yJywKCQkJCQkncmVh
ZG1zZy10b3BsaW5lJzogJ0RvdWJsZUZvcm1hdExpbmUnLAoKCQkJCQknbXNnbGlz
dC1sZWZ0JzogJ3Nsb3QtY29udGFpbmVyXzInLAoJCQkJCSdtc2dsaXN0LXRvcGxp
bmUnOiAnRG91YmxlRm9ybWF0TGluZScsCgoJCQkJCSdnb3NlYXJjaC1sZWZ0Jzog
J3Nsb3QtY29udGFpbmVyXzInLAoJCQkJCSdnb3NlYXJjaC10b3BsaW5lJzogJ0Rv
dWJsZUZvcm1hdExpbmUnLAoKCQkJCQknZmlsZXNlYXJjaC1sZWZ0JzogJ3Nsb3Qt
Y29udGFpbmVyXzInLAoJCQkJCSdmaWxlc2VhcmNoLXRvcGxpbmUnOiAnRG91Ymxl
Rm9ybWF0TGluZScsCgoJCQkJCSdhZGRyZXNzYm9vay1sZWZ0JzogJ3Nsb3QtY29u
dGFpbmVyXzInLAoJCQkJCSdhZGRyZXNzYm9vay10b3BsaW5lJzogJ0RvdWJsZUZv
cm1hdExpbmUnCgkJCQl9OwoKCQkJCWZvciAodmFyIGFyZywgaT0wLCBsPWFyZ3Mu
bGVuZ3RoOyBpPGw7IGkrKykgewoJCQkJCWFyZyA9IGFyZ3NbaV07CgkJCQkJYXJn
LnBsYWNlSWQgPSBwbGFjZUlkc1thcmcuaWRdOwoJCQkJCWlmIChhcmcuaWQpIHsK
CQkJCQkJby5pZCA9IGFyZy5pZC5pbmRleE9mKCdyZWFkbXNnLScpID09PSAwID8g
J3JlYWRtc2ctZG91YmxlJyA6ICdtc2dsaXN0LWRvdWJsZSc7CgkJCQkJfQoJCQkJ
CW8uYWRzLnB1c2goYXJnKTsKCQkJCX0KCgkJCQl0aGlzLnB1c2gobyk7CgkJCX0s
CgoJCQlzb3J0OiBmdW5jdGlvbiAoKSB7CgoJCQkJdmFyIHQgPSB0aGlzLCBtYXAg
PSB7fSwgciA9IFtdOwoKCQkJCUFEUy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7cmV0
dXJuIHQucHJpb3JpdHlbYS50eXBlXSAtIHQucHJpb3JpdHlbYi50eXBlXTt9KTsK
CgkJCQlmb3IgKHZhciBBZCwgaT0wLCBsPUFEUy5sZW5ndGg7IGk8bDsgaSsrKSB7
CgkJCQkJQWQgPSBBRFNbaV07CgkJCQkJaWYgKCFBZC5kaXNhYmxlZCkgewoJCQkJ
CQlpZiAoQWQudHlwZSA9PSAnZG91YmxlJykgewoJCQkJCQkJZm9yICh2YXIgbj0w
LCBxPUFkLmFkcy5sZW5ndGg7IG48cTsgbisrKSB7CgkJCQkJCQkJZGVsZXRlIG1h
cFtBZC5hZHNbbl0uaWRdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCW1hcFtBZC5p
ZF0gPSBBZDsKCQkJCQl9CgkJCQl9CgoJCQkJZm9yICh2YXIgaWQgaW4gbWFwKSB7
CgkJCQkJci5wdXNoKG1hcFtpZF0pOwoJCQkJfQoKCQkJCXJldHVybiByOwoJCQl9
LAoKCQkJcmVmcmVzaDogZnVuY3Rpb24gKGZvcmNlKXsKCQkJCWlmKCAhbWFpbHJ1
LnYyIHx8IGZvcmNlICl7CgkJCQkJdmFyIHVybCA9IGpzSGlzdG9yeS5nZXQoKSwg
R0VUID0gU3RyaW5nLnRvT2JqZWN0KHVybCksIGRhdGEgPSB0aGlzLnNvcnQoKSwg
QWQsIGksIGw7CgoJCQkJCWZvciggaSA9IDAsIGwgPSBkYXRhLmxlbmd0aDsgaSA8
IGw7IGkrKyApewoJCQkJCQlBZCA9IGRhdGFbaV07CgkJCQkJCWlmKCBBZC50ZXN0
KHVybCwgR0VUKSApewoJCQkJCQkJQWQucHVibGlzaEZhaWwgPSAhQWQucHVibGlz
aCgpOwoJCQkJCQl9CgkJCQkJfQoKCQkJCQlmb3IoIGkgPSBBRFMubGVuZ3RoOyBp
LS07ICl7CgkJCQkJCUFkID0gQURTW2ldOwoJCQkJCQlpZiggIUFkLnB1Ymxpc2hG
YWlsICYmIEFkLnJlbG9hZGFibGUgKXsKCQkJCQkJCUFEUy5zcGxpY2UoaSwgMSk7
CgkJCQkJCX0KCQkJCQkJZGVsZXRlIEFkLnB1Ymxpc2hGYWlsCgkJCQkJfQoJCQkJ
fQoJCQl9CgoJCX0pIC8vIHN0YXRpY3M7CgkJLm1ldGhvZHMoewoKCQkJX19jb25z
dHJ1Y3Q6IGZ1bmN0aW9uIChvcHRzKQoJCQl7CgkJCQl2YXIgdWlkCT0ganNDb3Jl
LmdldFVuaXFJZCgpOwoKCQkJCU9iamVjdC5leHRlbmQodGhpcywgewoJCQkJCSAg
aWQ6CQl1aWQKCQkJCQksIHR5cGU6CQknY29udGV4dCcKCQkJCQksIHBsYWNlSWQ6
CXVpZAoJCQkJCSwgZGVsYXk6CU1JTl9ERUxBWQoJCQkJCSwgZGlzYWJsZWQ6CWZh
bHNlCgkJCQkJLCByZWxvYWRhYmxlOgl0cnVlCgkJCQkJLCB1cmw6CQlhanMucmV0
VHJ1ZQoJCQkJCSwgYWRzOgkJZmFsc2UKCQkJCX0sIG9wdHMpOwoKCQkJCXRoaXMu
X3RzCT0gMDsgLy8gcHVibGlzaCB0aW1lCgkJCX0sCgoJCS8vIEBwdWJsaWMKCQkJ
Z2V0SWQ6IGZ1bmN0aW9uICgpCgkJCXsKCQkJCXJldHVybgl0aGlzLmlkOwoJCQl9
LAoKCQkJLy8gQHJldHVybglqUXVlcnkKCQkJZ2V0RWxtOiBmdW5jdGlvbiAoKQoJ
CQl7CgkJCQlyZXR1cm4JbWFpbHJ1LkFkLmdldEVsKHRoaXMucGxhY2VJZCk7CgkJ
CX0sCgoJCQkvLyBAcmV0dXJuCW1haWxydS5BZAoJCQl0b2dnbGU6IGZ1bmN0aW9u
IChzKQoJCQl7CgkJCQl0aGlzLmRpc2FibGVkCT0gIWRlZmluZWQocywgdGhpcy5k
aXNhYmxlZCk7CgkJCQl0aGlzLmdldEVsbSgpLmRpc3BsYXkoICF0aGlzLmRpc2Fi
bGVkICk7CgkJCQlyZXR1cm4JdGhpczsKCQkJfSwKCgkJCS8vIEByZXR1cm4JYm9v
bAoJCQl0ZXN0OiBmdW5jdGlvbiAodXJsLCBHRVQpewoJCQkJdmFyIG9rID0gZmFs
c2U7CgoJCQkJaWYoICF0aGlzLmRpc2FibGVkICYmICgxIHx8IGFqcy5ub3coKSAt
IHRoaXMuX3RzID4gdGhpcy5kZWxheSkgKXsKCQkJCQlvayA9IG1haWxydS5BZC50
ZXN0KHRoaXMuaWQsIHVybCk7CgkJCQl9CgoJCQkJcmV0dXJuCW9rOwoJCQl9LAoK
CQkJLy8gQHJldHVybglib29sCgkJCXB1Ymxpc2g6IGZ1bmN0aW9uICgpCgkJCXsK
CQkJCWlmKCB0aGlzLmFkcyAmJiB0aGlzLmFkcy5sZW5ndGggJiYgdGhpcy5nZXRF
bG0oKVswXSApCgkJCQl7CgkJCQkJdGhpcy5fdHMJPSBub3coKTsKCQkJCQlpZigg
dGhpcy50eXBlID09ICdjb250ZXh0JyApIHsKCQkJCQkJbWFpbHJ1LkFkLmRpcmVj
dCh0aGlzLnBsYWNlSWQsIHRoaXMuYWRzWzBdLCB0aGlzLmlkKTsKCQkJCQkJcmV0
dXJuCXRydWU7CgkJCQkJfQoJCQkJCWVsc2UgaWYoIHRoaXMudHlwZSA9PSAndGFy
Z2V0JyApIHsKCQkJCQkJbWFpbHJ1LkFkLnRhcmdldCh0aGlzLnBsYWNlSWQsIHRo
aXMuYWRzWzBdLCB0aGlzLmlkKTsKCQkJCQkJcmV0dXJuCXRydWU7CgkJCQkJfQoJ
CQkJCWVsc2UgaWYgKHRoaXMudHlwZSA9PSAnZG91YmxlJykgewoJCQkJCQltYWls
cnUuQWQuZG91YmxlRm9ybWF0KHRoaXMuYWRzKTsKCQkJCQkJcmV0dXJuCXRydWU7
CgkJCQkJfQoJCQkJCWVsc2UgaWYgKHRoaXMudHlwZSA9PSAncmJsaW5lJykgewoJ
CQkJCQltYWlscnUuQWQucmJsaW5lKHRoaXMucGxhY2VJZCwgdGhpcy5hZHNbMF0p
OwoJCQkJCQlyZXR1cm4JdHJ1ZTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4JZmFs
c2U7CgkJCX0KCgkJfSk7CgkJLy8gbWFpbHJ1LkFkCgoKCQkvLyBXcmFwCgkJaWYo
IF9fQURfXyApewoJCQlpZiAoX19BRF9fLnN0YWNrLmxlbmd0aCkgewoJCQkJbWFp
bHJ1LkFkLnB1c2guYXBwbHkobWFpbHJ1LkFkLCBfX0FEX18uc3RhY2spOwoJCQl9
CgoJCQkvKiogQG5hbWVzcGFjZSBfX0FEX18uZG91YmxlU3RhY2sgKi8KCQkJaWYg
KF9fQURfXy5kb3VibGVTdGFjay5sZW5ndGgpIHsKCQkJCW1haWxydS5BZC5wdXNo
RG91YmxlRm9ybWF0LmFwcGx5KG1haWxydS5BZCwgX19BRF9fLmRvdWJsZVN0YWNr
KTsKCQkJfQoKCQkJaWYoICFtYWlscnUudjIgKXsKCQkJCSQoZnVuY3Rpb24gKCl7
IG1haWxydS5BZC5yZWZyZXNoKCkgfSk7CgkJCX0KCQkJX19BRF9fCT0gbnVsbDsK
Ci8vCQkJLy8gQHRvZG86INCY0YHQv9GA0LDQstGMINC80LXQvdGPLCDQvNC+0LvR
jiEKLy8JCQl2YXIgYWQgPSBtYWlscnUuQWQuZ2V0QnlJZCgnYWR2ZXJ0aXNpbmct
dG9wbGluZScpOwovLwkJCWlmKCBhZCApewovLwkJCQlhZC5kaXNhYmxlZCA9IHRy
dWU7Ci8vCQkJfQoJCX0KCgkJLy8gUmVmcmVzaCBieSBldmVudAoJCSQod2luZG93
KS5iaW5kKCdyZWZyZXNoLmFkJywgZnVuY3Rpb24gKCkKCQl7CgkJCW1haWxydS5B
ZC5yZWZyZXNoKCk7CgkJfSk7CgoJfSkod2luZG93LCBkb2N1bWVudCk7CgoJanNM
b2FkZXIubG9hZGVkKCd7bWFpbHJ1fW1haWxydS5BZCcsIDEpOwoKLy8gZGF0YS9y
dS9pbWFnZXMvanMvcnUvbWFpbHJ1LkFkLmpzIGVuZAoKLy8gZGF0YS9ydS9pbWFn
ZXMvanMvcnUvbWFpbHJ1LlRoZW1lcy5qcyBzdGFydAoKLypnbG9iYWwgY2hvb3Nl
VGhlbWUqLwoKLyoqIEBuYW1lc3BhY2UgbWFpbHJ1LnRoZW1lcyAqLwoKCW1haWxy
dS5UaGVtZXMgPSB7CgkJICBfaXNDU1NMb2FkaW5nOiBmYWxzZQoJCSwgX2lzTG9h
ZGluZzogZmFsc2UKCQksIF9jaGVja1RpbWVvdXQ6IDYwMDAwCgkJLCBfdGhlbWVJ
ZEVsOiBudWxsCgkJLCAkVGhlbWVDU1M6IG51bGwKCQksIGRpc2FibGVkOiAhbWFp
bHJ1LnRoZW1lcwoKCQksIFVSTF9QQVRURVJOOiAvKD86XD98JilzZXRUaGVtZT0o
W14mXSspL2kKCgkJLCBpbml0OiBmdW5jdGlvbigpewoJCQlpZiggIXRoaXMuZGlz
YWJsZWQgKXsKCQkJCS8qKiBAbmFtZXNwYWNlIHdpbmRvdy5pbml0VGhlbWVBdXRv
VXBkYXRlICovCgkJCQlpZiggd2luZG93LmluaXRUaGVtZUF1dG9VcGRhdGUgKXsK
CQkJCQlzZXRJbnRlcnZhbChmdW5jdGlvbiAoKXsKCQkJCQkJbWFpbHJ1LlRoZW1l
cy5jaGVjaygpOwoJCQkJCX0sIHRoaXMuX2NoZWNrVGltZW91dCk7CgkJCQl9CgkJ
CQl0aGlzLl9pbml0RWxlbWVudHMoKTsKCQkJCXRoaXMuYWRhcHRpdmVCYWNrZ3Jv
dW5kKHRoaXMuZ2V0Q3VycmVudFRoZW1lSWQoKSk7CgkJCQl0aGlzLnJlZHJhd1Ro
ZW1lTGluayh0aGlzLmdldEN1cnJlbnRUaGVtZUlkKCkpOwoJCQl9CgkJfQoKCQks
IF9pbml0RWxlbWVudHM6IGZ1bmN0aW9uKCl7CgkJCXRoaXMuX3RoZW1lRWwgPSAk
KCcjdGhlbWUnKTsKCQkJdGhpcy4kVGhlbWVDU1MgPSAkKCcjVGhlbWVDU1MnKTsK
CgkJCXZhciAkZWwgPSB0aGlzLl90aGVtZUlkRWwgPSAkKCcjdGhlbWVJZCcpOwoJ
CQl0aGlzLl9jc3NQcm9wID0gJ2NvbnRlbnQnOwoKCQkJaWYoICRlbC5jc3MoJ2Nv
bnRlbnQnKSAhPSAkZWwuY3NzKCdmb250RmFtaWx5JykgKXsKCQkJCXRoaXMuX2Nz
c1Byb3AgPSAoJGVsLmNzcygnY29udGVudCcpICsgJycpLmluZGV4T2YodGhpcy5n
ZXRDdXJyZW50VGhlbWVJZCgpKSAhPSAtMSA/ICdjb250ZW50JyA6ICdmb250RmFt
aWx5JzsKCQkJfQoJCX0KCgkJLCBjaGVja1RoZW1lSWQ6IGZ1bmN0aW9uKHRoZW1l
SWQpewoJCQlyZXR1cm4gL14oZGVmYXVsdHx0XGR7NH0pJC9pLnRlc3QodGhlbWVJ
ZCk7CgkJfQoKCQksIHJlZHJhd1RoZW1lTGluazogZnVuY3Rpb24odGhlbWVJZCl7
CgkJCXZhciAkbGluayA9IHRoaXMuJFRoZW1lRm9vdGVyTGluayB8fCAodGhpcy4k
VGhlbWVGb290ZXJMaW5rID0gJCgnI1RoZW1lRm9vdGVyTGluaycpKTsKCQkJdmFy
IHRoZW1lQ29uZmlnID0gdGhpcy5nZXRUaGVtZUNvbmZpZyh0aGVtZUlkKTsKCQkJ
dmFyIGxpbmtEYXRhID0gdGhlbWVDb25maWcgJiYgdGhlbWVDb25maWcubGluazsK
CQkJaWYgKGxpbmtEYXRhKSB7CgkJCQkkbGluay5hdHRyKCQuZXh0ZW5kKHsKCQkJ
CQkgIHRpdGxlOiAnJwoJCQkJCSwgaHJlZjogJycKCQkJCQksIHRhcmdldDogJ19z
ZWxmJwoJCQkJfSwgbGlua0RhdGEpKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsK
CQkJfSBlbHNlIHsKCQkJCSRsaW5rLmhpZGUoKTsKCQkJfQoJCX0KCgkJLCBnZXRU
aGVtZUlkQnlVUkw6IGZ1bmN0aW9uKHVybCkgewoJCQl1cmwgPSAodXJsKycnKS5t
YXRjaCh0aGlzLlVSTF9QQVRURVJOKTsKCQkJaWYoIHVybCAmJiB0aGlzLmNoZWNr
VGhlbWVJZCh1cmxbMV0pICl7CgkJCQlyZXR1cm4gIHVybFsxXTsKCQkJfQoJCX0K
CgkJLCBpc0xvYWRpbmc6IGZ1bmN0aW9uKCl7CgkJCXJldHVybiB0aGlzLl9pc0xv
YWRpbmcgfHwgdGhpcy5pc0NTU0xvYWRpbmcoKTsKCQl9CgoJCSwgaXNDU1NMb2Fk
aW5nOiBmdW5jdGlvbigpewoJCQlyZXR1cm4gdGhpcy5faXNDU1NMb2FkaW5nOwoJ
CX0KCgkJLCBnZXRDdXJyZW50VGhlbWVJZDogZnVuY3Rpb24oKXsKCQkJcmV0dXJu
IG1haWxydS5jdXJyZW50VGhlbWU7CgkJfQoKCQksIGdldFRoZW1lQ29uZmlnOiBm
dW5jdGlvbih0aGVtZUlkKXsKCQkJLyoqIEBuYW1lc3BhY2UgbWFpbHJ1LnRoZW1l
c0NvbmZpZyAqLwoJCQl2YXIgZGF0YSA9IG1haWxydS50aGVtZXNDb25maWdbdGhl
bWVJZF07CgkJCWlmIChkYXRhKSB7CgkJCQlpZiAoIWRhdGEudGV4dCkgewoJCQkJ
CWRhdGEudGV4dCA9IFN0cmluZy5zcHJpbnRmKExhbmcuZ2V0KCd0aGVtZXMuZGVm
YXVsdC50ZXh0JyksIGRhdGEudGl0bGUpOwoJCQkJfQoJCQl9CgkJCXJldHVybiBk
YXRhOwoJCX0KCgkJLCBpc0FwcGx5ZWRUaGVtZUlkOiBmdW5jdGlvbihpZCl7CgkJ
CXJldHVybgkodGhpcy5fdGhlbWVJZEVsLmNzcyh0aGlzLl9jc3NQcm9wKSArICcn
KS5pbmRleE9mKGlkKSAhPSAtMTsKCQl9CgoJCSwgc2V0VGhlbWU6IGZ1bmN0aW9u
KHRoZW1lSWQpewoJCQlpZiAoIXRoaXMuY2hlY2tUaGVtZUlkKHRoZW1lSWQpKXsK
CQkJCXJldHVybjsKCQkJfQoJCQkkKHdpbmRvdykudHJpZ2dlckhhbmRsZXIoJ2No
YW5nZVRoZW1lLnRoZW1lJywgW3RoZW1lSWRdKTsKCQkJdGhpcy5faXNMb2FkaW5n
ID0gdHJ1ZTsKCQkJcmV0dXJuICQud2hlbigKCQkJCSAgJC5wb3N0KCcvc2V0dGlu
Z3MvdGhlbWVzP2FqYXhfY2FsbD0xJmZ1bmNfbmFtZT1zZXRfdGhlbWUnLCAkLmV4
dGVuZCh7IHRoZW1lOiB0aGVtZUlkIH0sIG1haWxydS50b2tlbnNbJ3RoZW1lcydd
KSkKCQkJCSwgdGhpcy5zd2l0Y2hUaGVtZUNzcyh0aGVtZUlkLCB0aGlzLmNob29z
ZSh0aGVtZUlkKSkKCQkJKS5kb25lKGpzQ29yZS5kZWxlZ2F0ZSh0aGlzLCBmdW5j
dGlvbigpewoJCQkJbWFpbHJ1LmN1cnJlbnRUaGVtZSA9IHRoZW1lSWQ7CgkJCQl0
aGlzLl9pc0xvYWRpbmcgPSBmYWxzZTsKCQkJfSkpLmZhaWwoanNDb3JlLmRlbGVn
YXRlKHRoaXMsIGZ1bmN0aW9uKCl7CgkJCQl0aGlzLl9pc0xvYWRpbmcgPSBmYWxz
ZTsKCQkJfSkpOwoJCX0KCgkJLCBnZXRDdXJyZW50VGhlbWVDc3NVcmw6IGZ1bmN0
aW9uKCl7CgkJCXJldHVybiB0aGlzLiRUaGVtZUNTUyAmJiB0aGlzLiRUaGVtZUNT
Uy5sZW5ndGggPyB0aGlzLiRUaGVtZUNTUy5hdHRyKCdocmVmJykgOiBudWxsOwoJ
CX0KCgkJLCBnZXRUaGVtZUNzc1VybDogZnVuY3Rpb24odGhlbWVJZCwgdGhlbWVW
YXJpYW50KXsKCQkJdGhlbWVWYXJpYW50ID0gdGhlbWVWYXJpYW50IHx8ICdhbGwn
OwoJCQlpZiAodGhlbWVJZCA9PT0gJ2RlZmF1bHQnKXsKCQkJCXJldHVybiBudWxs
OwoJCQl9CgkJCS8qKiBAbmFtZXNwYWNlIG1haWxydS50aGVtZXNDc3NQYXRoICov
CgkJCS8qKiBAbmFtZXNwYWNlIHdpbmRvdy5qc0J1aWxkICovCgkJCXJldHVybiBb
bWFpbHJ1LnRoZW1lc0Nzc1BhdGgsIHRoZW1lSWQsICcvJywgdGhlbWVJZCwgJy4n
LCB0aGVtZVZhcmlhbnQsICcuY3NzP3Y9Jywgd2luZG93LmpzQnVpbGRdLmpvaW4o
JycpOwoJCX0KCgkJLCBzd2l0Y2hUaGVtZUNzczogZnVuY3Rpb24odGhlbWVJZCwg
dGhlbWVWYXJpYW50KXsKCQkJdmFyICAgdXJsID0gdGhpcy5nZXRUaGVtZUNzc1Vy
bCh0aGVtZUlkLCB0aGVtZVZhcmlhbnQpCgkJCQksIGRlZmVycmVkID0gbmV3ICQu
RGVmZXJyZWQoKTsKCgkJCWlmICghdXJsKXsKCQkJCWlmKCB0aGlzLiRUaGVtZUNT
U1swXSApewoJCQkJCXRoaXMuJFRoZW1lQ1NTWzBdLmNzc1RleHQgPSAnJzsKCQkJ
CX0KCQkJCXRoaXMuJFRoZW1lQ1NTLnJlbW92ZSgpOwoJCQkJdGhpcy4kVGhlbWVD
U1MgPSAkKCk7CgkJCQlkZWZlcnJlZC5yZXNvbHZlKHVybCk7CgkJCQlyZXR1cm4g
ZGVmZXJyZWQ7CgkJCX0KCgkJCWlmICh0aGlzLmdldFRoZW1lQ3NzVXJsKHRoZW1l
SWQsIHRoZW1lVmFyaWFudCkgPT09IHRoaXMuZ2V0Q3VycmVudFRoZW1lQ3NzVXJs
KCkpewoJCQkJZGVmZXJyZWQucmVzb2x2ZSh1cmwpOwoJCQkJcmV0dXJuIGRlZmVy
cmVkOwoJCQl9CgoJCQl0aGlzLl9pc0NTU0xvYWRpbmcgPSB0cnVlOwoKCQkJJC5n
ZXRDU1MoCgkJCQkgIHVybAoJCQkJLCB7CgkJCQkJICBub0NhY2hlOiB0cnVlCgkJ
CQkJLCBjaGVjazogZnVuY3Rpb24gKCl7CgkJCQkJCXJldHVybgl0aGlzLmlzQXBw
bHllZFRoZW1lSWQodGhlbWVJZCk7CgkJCQkJfS5iaW5kKHRoaXMpCgkJCQl9CgkJ
CQksIGZ1bmN0aW9uKGxpbmspewoJCQkJCWlmICh0aGlzLmlzQXBwbHllZFRoZW1l
SWQodGhlbWVJZCkpewoJCQkJCQlpZiggdGhpcy4kVGhlbWVDU1NbMF0gKXsKCQkJ
CQkJCXRoaXMuJFRoZW1lQ1NTWzBdLmNzc1RleHQgPSAnJzsKCQkJCQkJCXRoaXMu
JFRoZW1lQ1NTLnJlbW92ZSgpOwoJCQkJCQl9CgkJCQkJCXRoaXMuJFRoZW1lQ1NT
ID0gJChsaW5rKTsKCQkJCQkJdGhpcy5yZWRyYXdUaGVtZUxpbmsodGhlbWVJZCk7
CgkJCQkJCXRoaXMuYWRhcHRpdmVCYWNrZ3JvdW5kKHRoZW1lSWQpOwoJCQkJCQlk
ZWZlcnJlZC5yZXNvbHZlKGxpbmspOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWxpbmsu
Y3NzVGV4dCA9ICcnOwoJCQkJCQkkKGxpbmspLnJlbW92ZSgpOwoJCQkJCQlkZWZl
cnJlZC5yZWplY3QoKTsKCQkJCQl9CgkJCQkJdGhpcy5faXNDU1NMb2FkaW5nID0g
ZmFsc2U7CgkJCQl9LmJpbmQodGhpcykKCQkJKTsKCgkJCXJldHVybiBkZWZlcnJl
ZDsKCQl9CgoJCSwgYWRhcHRpdmVCYWNrZ3JvdW5kOiBmdW5jdGlvbiAodGhlbWVJ
ZCkgewoKCQkJdmFyICRjb250YWluZXIgPSB0aGlzLl90aGVtZUVsOwoKCQkJJGNv
bnRhaW5lci5yZW1vdmVBdHRyKCdzdHlsZScpOwoKCQkJJCh3aW5kb3cpLnVuYmlu
ZCgnLmFkYXB0aXZlX2JhY2tncm91bmQnKTsKCgkJCXZhciB0aGVtZUNvbmZpZyA9
IHRoaXMuZ2V0VGhlbWVDb25maWcodGhlbWVJZCk7CgoJCQlpZiAodGhlbWVDb25m
aWcgJiYgdGhlbWVDb25maWdbJ2FkYXB0aXZlX2JhY2tncm91bmQnXSkgewoKCQkJ
CXZhciBmb2xkZXIgPSB0aGVtZUNvbmZpZ1snY3VycmVudFZhcmlhbnQnXSA9PSAn
YWxsJyA/ICd2MScgOiB0aGVtZUNvbmZpZ1snY3VycmVudFZhcmlhbnQnXSwKCQkJ
CQlwYXRoID0gJy8vaW1nLicgKyBtYWlscnUuc3RhdGljRG9tYWluTmFtZSArICcv
ci90aGVtZXMvJyArIHRoZW1lSWQgKyAnL2JnLycgKyAoZm9sZGVyID8gZm9sZGVy
ICsgJy8nIDogJycpLAoJCQkJCXByZXZmaWxlbmFtZTsKCgkJCQlmdW5jdGlvbiB1
cGRhdGVfYmFja2dyb3VuZCAoKSB7CgoJCQkJCXZhciBmaWxlbmFtZSA9ICcyNTYw
eDE2MDAuanBnJywgd2lkdGggPSBhanMud2luZG93V2lkdGgoKSwgaGVpZ2h0ID0g
YWpzLndpbmRvd0hlaWdodCgpOwoKCQkJCQlpZiAod2lkdGggPCAxMDUwICYmIGhl
aWdodCA8IDY1NikgewoJCQkJCQlmaWxlbmFtZSA9ICcxMDUweDY1Ni5qcGcnOwoJ
CQkJCX0gZWxzZSBpZiAod2lkdGggPCAxMjgwICYmIGhlaWdodCA8IDgwMCkgewoJ
CQkJCQlmaWxlbmFtZSA9ICcxMjgweDgwMC5qcGcnOwoJCQkJCX0gZWxzZSBpZiAo
d2lkdGggPCAxNDQwICYmIGhlaWdodCA8IDkwMCkgewoJCQkJCQlmaWxlbmFtZSA9
ICcxNDQweDkwMC5qcGcnOwoJCQkJCX0gZWxzZSBpZiAod2lkdGggPCAxNjgwICYm
IGhlaWdodCA8IDEwNTApIHsKCQkJCQkJZmlsZW5hbWUgPSAnMTY4MHgxMDUwLmpw
Zyc7CgkJCQkJfSBlbHNlIGlmICh3aWR0aCA8IDE5MjAgJiYgaGVpZ2h0IDwgMTIw
MCkgewoJCQkJCQlmaWxlbmFtZSA9ICcxOTIweDEyMDAuanBnJzsKCQkJCQl9CgoJ
CQkJCWlmIChmaWxlbmFtZSAhPSBwcmV2ZmlsZW5hbWUpIHsKCQkJCQkJcHJldmZp
bGVuYW1lID0gZmlsZW5hbWU7CgkJCQkJCXZhciBzcmMgPSBwYXRoICsgZmlsZW5h
bWUsIGltYWdlID0gbmV3IEltYWdlKCk7CgkJCQkJCWltYWdlLm9ubG9hZCA9IGZ1
bmN0aW9uICgpIHsKCQkJCQkJCSRjb250YWluZXIuY3NzKCdiYWNrZ3JvdW5kSW1h
Z2UnLCAndXJsKCInICsgc3JjICsgJyIpJyk7CgkJCQkJCQlpbWFnZSA9IG51bGw7
CgkJCQkJCX07CgkJCQkJCWltYWdlLnNyYyA9IHNyYzsKCQkJCQl9CgkJCQl9CgoJ
CQkJdXBkYXRlX2JhY2tncm91bmQoKTsKCgkJCQkkKHdpbmRvdykuYmluZCgncmVz
aXplLmFkYXB0aXZlX2JhY2tncm91bmQnLCB1cGRhdGVfYmFja2dyb3VuZC5kZWJv
dW5jZSgxMCkpOwoJCQl9CgkJfQoKCQksIGNob29zZTogZnVuY3Rpb24gKCl7CgkJ
CXZhciBmbiA9ICh0eXBlb2YgY2hvb3NlVGhlbWUgIT0gJ3VuZGVmaW5lZCcgJiYg
JC5pc0Z1bmN0aW9uKGNob29zZVRoZW1lKSA/IGNob29zZVRoZW1lIDogJC5ub29w
KTsKCQkJcmV0dXJuCWZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgkJfQoKCQks
IGNoZWNrOiBmdW5jdGlvbigpewoJCQlpZiAodGhpcy5pc0xvYWRpbmcoKSl7CgkJ
CQlyZXR1cm47CgkJCX0KCQkJdmFyICAgdGhlbWVJZCA9IHRoaXMuZ2V0Q3VycmVu
dFRoZW1lSWQoKQoJCQkJLCBuZXdUaGVtZVZhcmlhbnQgPSB0aGlzLmNob29zZSh0
aGVtZUlkKTsKCQkJdGhpcy5zd2l0Y2hUaGVtZUNzcyh0aGVtZUlkLCBuZXdUaGVt
ZVZhcmlhbnQpOwoJCX0KCgkJLCBzaG93Q29uZmlybVBvcHVwOiBmdW5jdGlvbih0
aGVtZUlkKXsKCQkJdmFyIHRoZW1lQ29uZmlnID0gdGhpcy5nZXRUaGVtZUNvbmZp
Zyh0aGVtZUlkKTsKCQkJaWYgKCF0aGlzLmNoZWNrVGhlbWVJZCh0aGVtZUlkKSB8
fCB0aGVtZUlkID09PSBtYWlscnUuY3VycmVudFRoZW1lIHx8ICF0aGVtZUNvbmZp
ZyB8fCAoJC5icm93c2VyLm1zaWUgJiYgcGFyc2VJbnQoJC5icm93c2VyLnZlcnNp
b24pIDwgNykpewoJCQkJcmV0dXJuOwoJCQl9CgoJCQlhanMucmVxdWlyZSgne3Bs
dWdpbnN9JyArICdMYXllcicsIGZ1bmN0aW9uKCl7CgkJCQlMYXllci5nZXQoJ3Nl
dFRoZW1lJywgZnVuY3Rpb24obGF5ZXIpewoJCQkJCXZhciBzZXRUaGVtZU1vZGFs
ID0gbGF5ZXIuJGRpdiwKCQkJCQkJc2V0VGhlbWVQcmV2aWV3ID0gc2V0VGhlbWVN
b2RhbC5maW5kKCcjc2V0VGhlbWVQcmV2aWV3Jyk7CgoJCQkJCWxheWVyLmZ1bmMg
PSBmdW5jdGlvbihzdGF0dXMpIHsKCQkJCQkJaWYgKHN0YXR1cykgewoJCQkJCQkJ
JCh3aW5kb3cpLnRyaWdnZXJIYW5kbGVyKCdiZWZvcmV1bmxvYWRUaGVtZS50aGVt
ZScsIFt0aGVtZUlkXSk7CgoJCQkJCQkJdmFyIGlucHV0cyA9IGxheWVyLiRkaXYu
ZmluZCgnaW5wdXQnKTsKCQkJCQkJCWlucHV0cy5hdHRyKCdkaXNhYmxlZCcsICdk
aXNhYmxlZCcpOwoJCQkJCQkJJC5wb3N0KCcvc2V0dGluZ3MvdGhlbWVzP2FqYXhf
Y2FsbD0xJmZ1bmNfbmFtZT1zZXRfdGhlbWUnLCAkLmV4dGVuZCh7IHRoZW1lOiB0
aGVtZUlkIH0sIG1haWxydS50b2tlbnNbJ3RoZW1lcyddKSwgZnVuY3Rpb24gKCkg
ewoJCQkJCQkJCWxvY2F0aW9uLnJlbG9hZCgpOwoJCQkJCQkJfSk7CgkJCQkJCQly
ZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQkkKHdpbmRv
dykudHJpZ2dlckhhbmRsZXIoJ2NhbmNlbExheWVyVGhlbWUudGhlbWUnLCBbdGhl
bWVJZF0pOwoJCQkJCQl9CgkJCQkJfTsKCgkJCQkJaWYgKHRoZW1lQ29uZmlnLnRl
eHQpIHsKCQkJCQkJc2V0VGhlbWVNb2RhbC5maW5kKCcjc2V0VGhlbWVUZXh0Jyku
aHRtbCh0aGVtZUNvbmZpZy50ZXh0KTsKCQkJCQl9CgoJCQkJCXNldFRoZW1lUHJl
dmlldy5hdHRyKCdzcmMnLCBTdHJpbmcuc3ByaW50ZihzZXRUaGVtZVByZXZpZXcu
ZGF0YSgncGF0aCcpLCBtYWlscnUuc3RhdGljRG9tYWluTmFtZSkgKyAodGhlbWVD
b25maWcucHJldmlldyA/IHRoZW1lQ29uZmlnLnByZXZpZXcgOiB0aGVtZUlkICsg
Jy8nICsgc2V0VGhlbWVQcmV2aWV3LmRhdGEoJ2ltYWdlJykpICsgJz92PScgKyB3
aW5kb3cuanNCdWlsZCk7CgkJCQkJbGF5ZXIuc2hvdygpOwoJCQkJfSk7CgkJCX0p
OwoKCQkJcmV0dXJuICB0cnVlOwoJCX0KCX07CgoKCSQoZnVuY3Rpb24gKCl7CgkJ
bWFpbHJ1LlRoZW1lcy5pbml0KCk7Cgl9KTsKCglqc0xvYWRlci5sb2FkZWQoJ3tt
YWlscnV9bWFpbHJ1LlRoZW1lcycsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMv
cnUvbWFpbHJ1LlRoZW1lcy5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1
L21haWxydS5CYWxsb29uLmpzIHN0YXJ0CgovKioKbWFpbHJ1LkJhbGxvb24ucHVz
aCh7CglpZDogTnVtYmVyLCAvLyBtYWlscnUuSGVscGVySW5kZXgKCXNlbGVjdG9y
OiAnLi4uJywKCXByaW9yaXR5OiAxMCwgLy8gMCDigJQgbWluCgljb3VudGVyczog
e3Nob3c6IE51bWJlciwgY2xvc2U6IE51bWJlcn0sIC8vIHJiIGNvdW50ZXIKCWRp
c3Bvc2FibGU6IEJvb2xlYW4sIC8vINCy0YvQstC10YHRgtC4INC+0LTQuNC9INGA
0LDQtwogCXRpbWVMaW1pdDogc2VjIC8vINC/0L7QutCw0LfRi9Cy0LDRgtGMINCx
0LDQu9GD0L0sINGA0LDQtyDQsiBOINGB0LXQutGD0L3QtAogCXJlZ1RpbWVMaW1p
dDogc2VjIC8vINGH0LXRgNC10Lcg0YHQutC+0LvRjNC60L4g0YHQtdC60YPQvdC0
INC/0L7RgdC70LUg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQv9C+0LrQsNC30LDR
gtGMINCx0LDQu9GD0L0KCXRlc3Q6IGZ1bmN0aW9uIChqcURlZmVycmVkKXsgfSwg
Ly8g0LTQvtC/0L7Qu9C90LjRjNGC0LXQu9GM0L3QsNGPINC/0YDQvtCy0LXRgNC6
0LAKCWJhbGxvb25PcHRpb25zOiB7CgkJbG9hZEhUTUw6IHRydWUgLy8gYWJzb2x1
dGUg0LrQvtGC0LXQvdGCINGH0LXRgNC10LcgbHN0YXRpYwoJfQp9KTsKKi8KCgov
LyBkYXRhL3J1L2ltYWdlcy9qcy9ydS91aS9tYWlscnUudWkuVGlwT2ZUaGVEYXku
anMgc3RhcnQKCi8qKgogKiBAY2xhc3MJbWFpbHJ1LnVpLlRpcE9mVGhlRGF5CiAq
IEB2ZXJzaW9uCTEuMi4zCiAqIEB0ZXN0QnVpbGQgMC4yCiAqIEBhdXRob3IJUnVi
YVhhCTx0cmFzaEBydWJheGEub3JnPgogKgogKiBqUXVlcnkoJy4uLicpLlRpcE9m
VGhlRGF5KHsgLi4uIH0pOwogKgogKglPcHRpb24JCQlEZWZhdWx0CQkJRGVzY3Jp
cHRpb24KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICogCWlkVHBsCQkJI1RpcE9mVGhlRGF5CdGI0LjQsdC7
0L7QvSDQv9C+0LTRgdC60LDQt9C60LgKICogCXRleHQ6CQkJdW5kZWZpbmVkCQnR
gtC10YHRgiDQsdCw0LvRg9C90LAKICoJaHRtbAkJCXVuZGVmaW5lZAkJaHRtbCDQ
sdCw0LvRg9C90LAKICogCW9yaWVudGF0aW9uCQlhdXRvCQkJ0L/QuNC30LjRhtC4
0L7QvdC40YDQvtCy0LDQvdC40LUg0L/QvtC00YHQutCw0LfQutC4IChhdXRvLCB0
b3Ag4oCUINC90LDQtCDRjdC70LXQvNC10L3RgtC+0LwsIGJvdHRvbSDigJQg0L/Q
vtC0INGN0LvQtdC80LXQvdGC0L7QvCwgZGVmYXVsdC10b3AsIGRlZmF1bHQtYm90
dG9tKQogKgltYXJnaW4JCQlbMzAsNV0JCQnQvtGC0YHRgtGD0L/RiyDQv9C+IFgg
0LggWQogKiAJd2lkdGgJCQlhdXRvCQkJ0YjQuNGA0LjQvdCwINC/0L7QtNGB0LrQ
sNC30LrQuAogKiAJaGVpZ2h0CQkJYXV0bwkJCdCy0YvRgdC+0YLQsAogKiAgY3Nz
VEgJCQkudGgtcGxhY2UJCdGN0LvQtdC80LXQvdGCINCyINC60L7RgtC+0YDRi9C5
INCx0YPQtNC10YIg0LfQsNC/0LjRgdCw0L0gdGV4dCwg0LvQuNCx0L4gaHRtbAog
KiAJY3NzQ2xvc2UJCS5tbHItYmxuX2Nsb3NlCdGN0LvQtdC80LXQvdGCLCDQutC7
0LjQutCw0Y8g0L3QsCDQutC+0YLQvtGA0YvQuSDQv9GA0L7QuNGB0YXQvtC00LjR
giDQt9Cw0LrRgNGL0YLQuNC1CiAqIAljbE9yaWVudGF0aW9uCVsuLi5dCQkJY3Nz
IHNlbGVjdG9yJ9GLLCDQutC+0YLQvtGA0YvQtSDQvtGC0LLQtdGH0LDRjtGCINC3
0LAg0L/QvtC30LjRhtC40L7QvdC40YDQvtCy0LDQvdC40LUg0YPQs9C+0LvQsAog
KiAJdmlzaWJsZQkJCXRydWUJCQnRgdGC0LDRgtGD0YEg0L7RgtC+0LHRgNCw0LbQ
tdC90LjRjwogKiAJekluZGV4CQkJSW50CQkJCXotaW5kZXgKICogCW1heFNob3cJ
CQktMQkJCQnQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC7LdCy0L4g0L/Q
vtC60LDQt9C+0LIsIC0xIOKAlCDQsdC10YHQutC+0L3QtdGH0L3QvgogKiAJc2hv
d0J5CQkJZmFsc2UJCQnQv9C+0LrQsNC30LDRgtGMINC/0L4gLi4uCiAqIAloaWRl
QnkJCQlmYWxzZQkJCdGB0LrRgNGL0YLRjCDQv9C+IC4uLgogKgogKiDQndCw0L/Q
uNGB0LDQvdC40LUg0L/RgNCw0LLQuNC7INC00LvRjyBzaG93Qnkg0LggaGlkZUJ5
CiAqIAlFTE0JCQkJ0Y3Qu9C10LzQtdC90YIg0LTQu9GPINC60L7RgtC+0YDQvtCz
0L4g0YHQvtC30LTQsNC9INCx0LDQu9GD0L0KICogIEJBTExPT04JCQnQsdCw0LvR
g9C9CiAqIAkjSWQgLmNsYXNzZXMJ0Y3Qu9C10LzQtdC90YLRiyDQsiDQtNC+0LrR
g9C80LXQvdGC0LUKICogCS5jbGFzc2VzCQnRjdC70LXQvNC10L3RgtGLINCyINCx
0LDQu9GD0L3QtQogKiAgdGltZW91dDptU2VjCdCy0YvQv9C+0LvQvdC40YLRjCDR
gdC+0LHRi9GC0LjQtSDRh9C10YDQtdC3IG1TZWMKICogIGV2YWw6ZXhyZXNpb24J
0LLRi9C/0L7Qu9C90LjRgtGMINGB0L7QsdGL0YLQuNC1INC10YHQu9C4ICBleHJl
c2lvbiA9PT0gdHJ1ZQogKgogKiAgRUxNOmNsaWNrCQnQtNC10LnRgdGC0LLQuNC1
INCx0YPQtNC10YIg0LLRi9C/0L7Qu9C90LXQvdC+INC/0L4g0LrQu9C40LrRgyDQ
vdCwINGN0LvQtdC80LXQvdGCCiAqICBCQUxMT09OOmNsaWNrCdC/0L4g0LHQsNC7
0YPQvdGDCiAqCiAqIAnQlNC+0YHRgtGD0L/QvdGL0LUg0YHQvtCx0YvRgtC40Y86
IGNsaWNrLCBtb3VzZWVudGVyLCBtb3VzZWxlYXZlLCBmb2N1cywgYmx1cgogKgog
KiAg0KLQsNC6INC20LUg0LTQvtGB0YLRg9C/0L3RiyDQuCDRgtCw0LrQuNC1INGB
0L7Rh9C10YLQsNC90LjRjwogKgkJRUxNOmNsaWNrOk15VmFyCQkJCdGB0L7QsdGL
0YLQuNC1IGNsaWNrINCx0YPQtNC10YIg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy
0LDQvdC+LCDQtdGB0LvQuCBNeVZhciAhPT0gdHJ1ZQogKiAgCUJBTExPT046bW91
c2VsZWF2ZTo4MDAJCdGB0LrRgNGL0YLRjCDQsdCw0LvRg9C9INGH0LXRgNC10Lcg
ODAwIG1zZWMg0L/QvtGB0LvQtSDRgdGA0LDQsdCw0YLRi9Cy0LDQvdC40Y8g0YHQ
vtCx0YvRgtC40Y8gbW91c2VsZWF2ZQogKgogKiDQn9GA0LjQvNC10YAKICogCSQo
Jy4uLicpLlRpcE9mVGhlRGF5KHsKICogCQkgIGlkVHBsOgknI015QmFsbG9vblRw
bCcKICogCQksIHRleHQ6CQknLi4uJwogKiAJCSwgdmlzaWJsZToJZmFsc2UKICog
CQksIG1heFNob3c6CTEJCS8vINC/0L7QutCw0LfQsNGC0Ywg0YLQvtC70YzQutC+
INC+0LTQuNC9INGA0LDQtwogKiAJCSwgc2hvd0J5OgknZXZhbDpUaXBWaXNpYmxl
IGVsbTpjbGljayB0aW1lb3V0OjEwMDAwJwkvLyDQv9C+0LrQsNC30LDRgtGMINC1
0YHQu9C4IFRpcFZpc2libGUgPT0gdHJ1ZSwg0L/RgNC4INC60LvQuNC60LUg0L3Q
sCDRjdC10LzQtdC90YIg0LjQu9C4INGH0LXRgNC10LcgMTAgc2VjCiAqIAkJLCBo
aWRlQnk6CSdCQUxMT09OOm1vdXNlbGVhdmU6MTAwMCB0aW1lb3V0OjE1MDAwJwkJ
Ly8g0YHQutGA0YvRgtGMINGH0LXRgNC10Lcg0YHQtdC60YPQvdC00YMg0L/QvtGB
0LvQtSDRgdGA0LDQsdCw0YLRi9Cy0LDQvdC40Y8gbW91c2VsZWF2ZSDQuNC70Lgg
0YfQtdGA0LXQtyAxNSDRgdC10LrRg9C90LQKICogCX0pOwogKi8KCgoKalF1ZXJ5
KHdpbmRvdykuYmluZCgncmVzaXplIHNjcm9sbCBjbGljaycsIGZ1bmN0aW9uIChl
dnQpewoJCW1haWxydS51aS5UaXBPZlRoZURheS5jaGFuZ2UoZXZ0KTsKCX0pCgoK
CWpzRXZlbnQuaW52ZXJ0ID0gewoJCSAgZm9jdXM6CQknYmx1cicKCQksIGtleWRv
d246CQkna2V5dXAnCgkJLCBtb3VzZW92ZXI6CSdtb3VzZW91dCcKCQksIG1vdXNl
ZW50ZXI6CSdtb3VzZWxlYXZlJwoJfTsKCU9iamVjdC5mb3JFYWNoKGpzRXZlbnQu
aW52ZXJ0LCBmdW5jdGlvbiAodiwgaykgeyBqc0V2ZW50LmludmVydFt2XSA9IGs7
IH0pOwoKCglqc0NsYXNzCgkJLmNyZWF0ZSgnbWFpbHJ1LnVpLlRpcE9mVGhlRGF5
JykKCQkuc3RhdGljcyh7CgkJCSAgekluZGV4OgkxMDAwCgkJCSwgaXRlbXM6CVtd
CgkJCSwgY2hhbmdlOglmdW5jdGlvbiAoZXZ0KXsgQXJyYXkuZm9yRWFjaCh0aGlz
Lml0ZW1zLCBmdW5jdGlvbiAoVGlwKXsgVGlwLl9ldmVudChldnQsICdjaGFuZ2Un
KTsgfSwgdGhpcyk7IH0KCQl9KQoJCS5tZXRob2RzKHsKCgkJX19jb25zdHJ1Y3Q6
IGZ1bmN0aW9uICgkRWxtLCBvcHRzKQoJCXsKCQkJJEUodGhpcywgewoJCQkJICBp
ZFRwbDoJCQknI1RpcE9mVGhlRGF5JwkvLyDRiNCw0LHQu9C+0L0KCQkJCSwgb3Jp
ZW50YXRpb246CQknYXV0bycJLy8gYXV0bywgdG9wLCBib3R0b20g0L/QuNC30LjR
htC40L7QvdC40YDQvtCy0LDQvdC40LUg0L/QvtC00YHQutCw0LfQutC4CgkJCQks
IHBvc2l0aW9uWDoJCSdhdXRvJwoJCQkJLCBvZmZzZXQ6CQkJJ2F1dG8nCgkJCQks
IG1hcmdpbjoJCQlbMzAsIDVdCgkJCQksIHdpZHRoOgkJCTAKCQkJCSwgaGVpZ2h0
OgkJCTAKCQkJCSwgY3NzVEg6CQkJJy50aC1wbGFjZScKCQkJCSwgY3NzQ2xvc2U6
CQkJJy5iYWxsb29uX19pY29uJwoJCQkJLCBjbE9yaWVudGF0aW9uOglbJ2JhbGxv
b25fdGwnLCAnYmFsbG9vbl90cicsICdiYWxsb29uX2JyJywgJ2JhbGxvb25fYmwn
LCAnYmFsbG9vbl90YyddCgkJCQksIHZpc2libGU6CQkJdHJ1ZQoJCQkJLCB6SW5k
ZXg6CQkJbWFpbHJ1LnVpLlRpcE9mVGhlRGF5LnpJbmRleCsrCgkJCQksIG1heFNo
b3c6CQkJMQoJCQkJLCBzaG93Qnk6CQkJMAoJCQkJLCBoaWRlQnk6CQkJMAoJCQkJ
LCBhYnNvbHV0ZToJCQkJdHJ1ZQoJCQl9LCBvcHRzKTsKCgkJCXRoaXMuJEVsbQkJ
PSBqUXVlcnkoICRFbG0gKTsKCQkJdGhpcy4kQmFsbG9vbgk9IGpRdWVyeSggdGhp
cy5pZFRwbCApLmNsb25lKCkKCQkJCQkJCQkuYXR0cignaWQnLCAnJykKCQkJCQkJ
CQkuY3NzKHsgekluZGV4OiB0aGlzLnpJbmRleCwgcG9zaXRpb246ICdhYnNvbHV0
ZScsIGRpc3BsYXk6ICdub25lJyB9KQoJCQkJCQkJOwoKCQkJaWYgKHRoaXMuY2xh
c3NOYW1lKSB7CgkJCQl0aGlzLiRCYWxsb29uLmFkZENsYXNzKHRoaXMuY2xhc3NO
YW1lKTsKCQkJfQoKCQkJaWYgKHRoaXMuYWJzb2x1dGUpIHsKCQkJCSQoJ2JvZHks
I1Njcm9sbEJvZHlJbm5lcicpLmxhc3QoKS5hcHBlbmQodGhpcy4kQmFsbG9vbik7
CgkJCX0gZWxzZSB7CgkJCQl0aGlzLiRFbG0uYXBwZW5kKHRoaXMuJEJhbGxvb24u
Y3NzKHtsZWZ0OiAnJywgdG9wOiAnJ30pKTsKCQkJfQoKCQkJdGhpcy5iU3R5bGUJ
CT0gdGhpcy4kQmFsbG9vblswXS5zdHlsZTsKCgkJCXRoaXMuX2RFdmVudAk9ICRE
KHRoaXMsICdfZXZlbnQnKTsKCQkJdGhpcy5fZVNob3cJCT0gJEQodGhpcywgZnVu
Y3Rpb24gKGV2dCl7IHRoaXMuX2V2ZW50KGV2dCwgJ3Nob3cnKTsgfSk7CgkJCXRo
aXMuX2VIaWRlCQk9ICREKHRoaXMsIGZ1bmN0aW9uIChldnQpeyB0aGlzLl9ldmVu
dChldnQsICdoaWRlJyk7IH0pOwoKCQkJdGhpcy5fZXZlbnRzKHRydWUsIHRoaXMu
c2hvd0J5LCB0aGlzLl9lU2hvdyk7CgkJCWlmKCB0aGlzLnNob3dCeSApIHRoaXMu
c2hvd0J5ID0gdGhpcy5zaG93QnkucmVwbGFjZSgvKFteOl18XikoZXZhbHx0aW1l
b3V0KTpcdysvZ2ksICckMScpOwoKCQkJaWYoIHRoaXMuY3NzQ2xvc2UgKSB0aGlz
LiRCYWxsb29uLmZpbmQodGhpcy5jc3NDbG9zZSkuY2xpY2soJC5wcm94eShmdW5j
dGlvbihldnQpIHsKCQkJCXRoaXMuZGlzcGF0Y2hFdmVudCgnY2xvc2UnLCB0aGlz
LCBldnQpOwoJCQkJdGhpcy5fZUhpZGUoKTsKCQkJfSwgdGhpcykpOwoKCQkJaWYo
IHRoaXMudGV4dCApCQl0aGlzLnNldHRlcigndGV4dCcsIHRoaXMudGV4dCk7CgkJ
CWlmKCB0aGlzLmh0bWwgKQkJdGhpcy5zZXR0ZXIoJ2h0bWwnLCB0aGlzLmh0bWwp
OwoJCQlpZiggdGhpcy53aWR0aCApCXRoaXMuc2V0dGVyKCd3aWR0aCcsIHRoaXMu
d2lkdGgpOwoJCQlpZiggdGhpcy5oZWlnaHQgKQl0aGlzLnNldHRlcignaGVpZ2h0
JywgdGhpcy5oZWlnaHQpOwoKCQkJaWYoIHRoaXMudmlzaWJsZSApeyB0aGlzLnZp
c2libGUgPSBmYWxzZTsgdGhpcy5fZXZlbnQoMCwgJ3Nob3cnKTsgfQoKCQkJaWYg
KHRoaXMub25Jbml0KSB7CgkJCQl0aGlzLm9uSW5pdC5jYWxsKHRoaXMsIHRoaXMp
OwoJCQl9CgoJCQltYWlscnUudWkuVGlwT2ZUaGVEYXkuaXRlbXMucHVzaCh0aGlz
KTsKCQl9LAoKCQlfZmluZEVsbXM6IGZ1bmN0aW9uIChydWxlcykKCQl7CgkJCXJl
dHVybglqUXVlcnkocnVsZXMuc3BsaXQoJywnKSkubWFwKCREKHRoaXMsIGZ1bmN0
aW9uIChpLCBydWxlKQoJCQl7CgkJCQlyZXR1cm4gJChydWxlKVswXTsKLy8JCQkJ
aWYoIHJ1bGUgPT0gJ0VMTScgKSByZXR1cm4gdGhpcy4kRWxtWzBdOwovLwkJCQll
bHNlIGlmKCAhcnVsZSB8fCBydWxlID09ICdCQUxMT09OJyApIHRoaXMuJEJhbGxv
b247Ci8vCQkJCWVsc2UgcmV0dXJuIGpRKHJ1bGUsIHJ1bGUuY2hhckF0KDApID09
ICcjJyA/IDAgOiB0aGlzLiRCYWxsb29uKVswXTsKCQkJfSkpOwoJCX0sCgoJCV9l
dmVudHM6IGZ1bmN0aW9uIChiaW5kLCBjbWRzLCBmdW5jKQoJCXsKCQkJdmFyICRl
bG0sIGZJZCA9IGpzQ29yZS5nZXRVbmlxSWQoZnVuYyk7CgkJCWlmKCBjbWRzICkg
QXJyYXkuZm9yRWFjaChjbWRzLnNwbGl0KC8sP1xzKy9nKSwgZnVuY3Rpb24gKGNt
ZCkKCQkJewoJCQkJaWYoICFjbWQgKSByZXR1cm47CgkJCQljbWQJCT0gY21kLnNw
bGl0KCc6Jyk7CgkJCQkkZWxtCT0gdGhpcy5fZmluZEVsbXMoY21kWzBdKTsKCgkJ
CQlpZiggKGNtZFswXSA9PSAnZXZhbCcpICYmICEhZXZhbChjbWRbMV0pICkKCQkJ
CXsKCQkJCQlmdW5jKCk7CgkJCQl9CgkJCQllbHNlIGlmKCBjbWRbMF0gPT0gJ3Rp
bWVvdXQnICkKCQkJCXsKCQkJCQljbGVhclRpbWVvdXQoIHRoaXNbZklkXSApOwoJ
CQkJCWlmKCBiaW5kICkKCQkJCQkJdGhpc1tmSWRdID0gc2V0VGltZW91dChmdW5j
LCBjbWRbMV0pOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWlmKCBiaW5kICYm
IChjbWRbMl0gPiAwKSApIC8vIHRpbWVvdXQKCQkJCQl7CgkJCQkJCSRlbG0uYmlu
ZChjbWRbMV0sIGZ1bmN0aW9uICgpCgkJCQkJCXsKCQkJCQkJCXZhcgoJCQkJCQkJ
CSAgZUlkCQk9IGpzQ29yZS5nZXRVbmlxSWQodGhpcykKCQkJCQkJCQksIHRJZAkJ
PSBzZXRUaW1lb3V0KGZ1bmMsIGNtZFsyXSkKCQkJCQkJCQksIGludmVydAk9IGpz
RXZlbnQuaW52ZXJ0W2NtZFsxXV0KCQkJCQkJCQksIGlGdW5jCQk9IGludmVydCsn
XycrZUlkCgkJCQkJCQk7CgkJCQkJCQlpZiggaW52ZXJ0ICkKCQkJCQkJCXsKCQkJ
CQkJCQlpZiggd2luZG93W2lGdW5jXSApCgkJCQkJCQkJewoJCQkJCQkJCQl3aW5k
b3dbaUZ1bmNdKCk7CgkJCQkJCQkJCSRlbG0udW5iaW5kKGludmVydCwgd2luZG93
W2lGdW5jXSk7CgkJCQkJCQkJfQoJCQkJCQkJCSRlbG0uYmluZChpbnZlcnQsIHdp
bmRvd1tpRnVuY10gPSBmdW5jdGlvbiAoKXsgY2xlYXJUaW1lb3V0KHRJZCk7IH0p
OwoJCQkJCQkJfQoJCQkJCQl9KTsKCQkJCQl9CgkJCQkJZWxzZSBpZiggZGVmaW5l
ZChjbWRbMl0pICYmICEoY21kWzJdID4gMCkgKQoJCQkJCXsKCQkJCQkJdmFyIGVm
dW5jID0gZklkICsgY21kLmpvaW4oJycpOwoJCQkJCQlpZiggIXdpbmRvd1tlZnVu
Y10gKQoJCQkJCQkJd2luZG93W2VmdW5jXSA9IGZ1bmN0aW9uIChldnQpeyBzZXRU
aW1lb3V0KGZ1bmN0aW9uICgpeyBpZiggISFldmFsKGNtZFsyXSkgKSBmdW5jKGV2
dCk7IH0sIDUpOyB9OwoKCQkJCQkJJGVsbVtiaW5kID8gJ2JpbmQnIDogJ3VuYmlu
ZCddKGNtZFsxXSwgd2luZG93W2VmdW5jXSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJ
CQl7CgkJCQkJCSRlbG1bYmluZCA/ICdiaW5kJyA6ICd1bmJpbmQnXShjbWRbMV0s
IGZ1bmMpOwoJCQkJCX0KCQkJCX0KCQkJfSwgdGhpcyk7CgkJfSwKCgoJCV9ldmVu
dDogZnVuY3Rpb24gKGV2dCwgdHlwZSkKCQl7CgkJCXR5cGUgPSB0eXBlIHx8IGV2
dC50eXBlOwoKCQkJc3dpdGNoKCB0eXBlICkKCQkJewoJCQkJY2FzZSAnY2xpY2sn
OgoJCQkJY2FzZSAnY2hhbmdlJzoKCQkJCWNhc2UgJ3Jlc2l6ZSc6CgkJCQl7CgkJ
CQkJaWYoIHRoaXMudmlzaWJsZSAmJiAoIXRoaXMuJEVsbVswXS5vZmZzZXRXaWR0
aCB8fCB0aGlzLl9iSXNIaWRlKSApCgkJCQkJewoJCQkJCQl0aGlzLiRCYWxsb29u
Wyh0aGlzLl9iSXNIaWRlID0gIXRoaXMuJEVsbVswXS5vZmZzZXRXaWR0aCkgPyAn
aGlkZScgOiAnc2hvdyddKCk7CgkJCQkJCWlmKCB0aGlzLl9iSXNIaWRlICkgcmV0
dXJuOwoJCQkJCX0KCgkJCQkJJEUodGhpcywgdGhpcy4kRWxtLm9mZnNldCgpKTsK
CgkJCQkJdGhpcy5lV2lkdGgJCT0gdGhpcy4kRWxtLndpZHRoKCk7CgkJCQkJdGhp
cy5lSGVpZ2h0CT0gdGhpcy4kRWxtLmhlaWdodCgpOwoKCQkJCQl0aGlzLmJXaWR0
aAkJPSB0aGlzLiRCYWxsb29uLndpZHRoKCk7CgkJCQkJdGhpcy5iSGVpZ2h0CT0g
dGhpcy4kQmFsbG9vbi5oZWlnaHQoKTsKCgkJCQkJdGhpcy53V2lkdGgJCT0gYWpz
LndpbmRvd1dpZHRoKCkgLSA0MDsKCQkJCQl0aGlzLndIZWlnaHQJPSBhanMud2lu
ZG93SGVpZ2h0KCkgLSAyMDsKCQkJCX0KCgkJCQljYXNlICdzY3JvbGwnOgoJCQkJ
ewoJCQkJCWlmKCB0aGlzLnZpc2libGUgJiYgIXRoaXMuX2JJc0hpZGUgKQoJCQkJ
CXsKCQkJCQkJdGhpcy53TGVmdAk9IGFqcy5zY3JvbGxMZWZ0KCk7CgkJCQkJCXRo
aXMud1RvcAk9IGFqcy5zY3JvbGxUb3AoKTsKCQkJCQkJdGhpcy5fcG9zKCk7CgkJ
CQkJfQoJCQkJfQoJCQkJYnJlYWs7CgoJCQkJY2FzZSAnc2hvdyc6CgkJCQl7CgkJ
CQkJaWYoICF0aGlzLnZpc2libGUgKQoJCQkJCXsKCQkJCQkJaWYgKHRoaXMubWF4
U2hvdyA+IDAgfHwgdGhpcy5tYXhTaG93ID09IC0xKSB7CgoJCQkJCQkJaWYgKHRo
aXMubWF4U2hvdyA+IDApIHsKCQkJCQkJCQl0aGlzLm1heFNob3ctLTsKCQkJCQkJ
CX0KCgkJCQkJCQlpZiAod2luZG93LmpzSGlzdG9yeSkgewoJCQkJCQkJCWpzSGlz
dG9yeS5vbmVUb3AoZnVuY3Rpb24gKGV2dCkgewoJCQkJCQkJCQl0aGlzLl9ldmVu
dChldnQsICdoaWRlJyk7CgkJCQkJCQkJfS5iaW5kKHRoaXMpKTsKCQkJCQkJCX0K
CgkJCQkJCQlqUXVlcnkod2luZG93KS5iaW5kKCdyZXNpemUgc2Nyb2xsJywgdGhp
cy5fZEV2ZW50KTsKCQkJCQkJCXRoaXMuJEJhbGxvb24uc2hvdygpOwoJCQkJCQkJ
dGhpcy52aXNpYmxlCT0gdHJ1ZTsKCgkJCQkJCQl0aGlzLl9ldmVudHModHJ1ZSwg
dGhpcy5oaWRlQnksIHRoaXMuX2VIaWRlKTsKCQkJCQkJCXRoaXMuX2V2ZW50cyhm
YWxzZSwgdGhpcy5zaG93QnksIHRoaXMuX2VTaG93KTsKCQkJCQkJCXRoaXMuX2V2
ZW50KGV2dCwgJ3Jlc2l6ZScpOwoJCQkJCQkJdGhpcy5kaXNwYXRjaEV2ZW50KHR5
cGUsIHRoaXMsIGV2dCk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlicmVhazsK
CgkJCQljYXNlICdoaWRlJzoKCQkJCXsKCQkJCQlpZiggdGhpcy52aXNpYmxlICYm
ICghZXZ0IHx8ICF0aGlzLiRCYWxsb29uLmhhcyhldnQudGFyZ2V0KS5sZW5ndGgp
KQoJCQkJCXsKCQkJCQkJalF1ZXJ5KHdpbmRvdykudW5iaW5kKCdyZXNpemUgc2Ny
b2xsJywgdGhpcy5fZEV2ZW50KTsKCQkJCQkJdGhpcy4kQmFsbG9vbi5oaWRlKCk7
CgkJCQkJCXRoaXMudmlzaWJsZQk9IGZhbHNlOwoKLy8JCQkJCQlpZiggKHRoaXMu
bWF4U2hvdyA9PSAtMSkgfHwgdGhpcy5tYXhTaG93ICkgdGhpcy5fZXZlbnRzKHRy
dWUsIHRoaXMuc2hvd0J5LCB0aGlzLl9lU2hvdyk7CgkJCQkJCXRoaXMuX2V2ZW50
cyhmYWxzZSwgdGhpcy5oaWRlQnksIHRoaXMuX2VIaWRlKTsKCQkJCQkJdGhpcy5k
aXNwYXRjaEV2ZW50KHR5cGUsIHRoaXMsIGV2dCk7CgkJCQkJfQoJCQkJfQoJCQkJ
YnJlYWs7CgkJCX0KCQl9LAoKCQlfcG9zOiBmdW5jdGlvbiAoKQoJCXsKCQkJdmFy
IG9UID0gdGhpcy5vcmllbnRhdGlvbiwgcFggPSB0aGlzLnBvc2l0aW9uWCwgbyA9
IDAsIHggPSB0aGlzLmxlZnQsIHkgPSB0aGlzLnRvcCwgbWFyZ2luOwoKCQkJaWYg
KCF0aGlzLmFic29sdXRlKSB7CgkJCQltYXJnaW4gPSB0aGlzLm1hcmdpbjsKCQkJ
CXRoaXMubWFyZ2luID0gWzAsIDBdOwoJCQl9CgoJCQlpZiAocFggPT0gJ3JpZ2h0
JyB8fCB4ICsgdGhpcy5iV2lkdGggPiAodGhpcy53TGVmdCArIHRoaXMud1dpZHRo
KSApCgkJCXsKCQkJCW8JPSAxOwoJCQkJeAk9IHggLSAodGhpcy53TGVmdCArIHRo
aXMuYldpZHRoKSArIHRoaXMubWFyZ2luWzBdOwoJCQl9CgkJCWVsc2UKCQkJewoJ
CQkJeAktPSB0aGlzLm1hcmdpblswXTsKCQkJfQoKCQkJaWYoIG9UID09ICdhdXRv
JyB8fCBvVC5tYXRjaCgvLShcdyspLykgKQoJCQl7CgkJCQlpZiggb1QgIT0gJ2F1
dG8nICkKCQkJCXsKCQkJCQlpZiggUmVnRXhwLiQxID09ICd0b3AnICkgewoJCQkJ
CQlvVAk9ICh5IC0gdGhpcy5iSGVpZ2h0IC0gdGhpcy53VG9wID4gMCkgPyAndG9w
JyA6ICdib3R0b20nOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJb1QJPSAodGhp
cy53SGVpZ2h0ICsgdGhpcy53VG9wIC0geSAtIHRoaXMuYkhlaWdodCA+IDApID8g
J2JvdHRvbScgOiAndG9wJzsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlv
VAk9ICh5IC0gdGhpcy5iSGVpZ2h0IC0gdGhpcy53VG9wID4gMCkgPyAndG9wJyA6
ICdib3R0b20nOwoJCQkJfQoJCQl9CgoJCQlpZiggb1QgPT0gJ3RvcCcgKQoJCQl7
CgkJCQl5CS09IHRoaXMuYkhlaWdodCAtIHRoaXMubWFyZ2luWzFdOwoJCQkJbwkg
PSBvID09IDEgPyAyIDogMzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSB5CSs9IHRo
aXMuZUhlaWdodCAtIHRoaXMubWFyZ2luWzFdOwoJCQl9CgoJCQlpZiAob1QgPT0g
J2NlbnRlcicpIHsKCQkJCW8gPSA0OwoJCQl9CgoJCQl0aGlzLiRCYWxsb29uCgkJ
CQkucmVtb3ZlQ2xhc3ModGhpcy5jbE9yaWVudGF0aW9uLmpvaW4oJyAnKSkKCQkJ
CS5hZGRDbGFzcyh0aGlzLmNsT3JpZW50YXRpb25bb10pCgkJCTsKCgkJCWlmKCB0
aGlzLm9mZnNldCA9PSAnYXV0bycgKQoJCQl7CgkJCQl4ICs9IHRoaXMuZVdpZHRo
LzI7CgkJCX0KCgkJCWlmICh0aGlzLmFic29sdXRlKSB7CgkJCQl0aGlzLmJTdHls
ZS5sZWZ0CT0geCArJ3B4JzsKCQkJCXRoaXMuYlN0eWxlLnRvcAkJPSB5ICsncHgn
OwoJCQl9IGVsc2UgewoJCQkJdGhpcy5tYXJnaW4gPSBtYXJnaW47CgkJCQl0aGlz
LmJTdHlsZS5tYXJnaW5MZWZ0ID0gdGhpcy5tYXJnaW5bMF0gKyAncHgnOwoJCQkJ
dGhpcy5iU3R5bGUubWFyZ2luVG9wID0gdGhpcy5tYXJnaW5bMV0gKyAncHgnOwoJ
CQl9CgkJfSwKCgoJLy8gQHB1YmxpYwoJCXNldHRlcjogZnVuY3Rpb24gKGtleSwg
dmFsdWUpCgkJewoJCQlzd2l0Y2goIGtleSApCgkJCXsKCQkJCWNhc2UgJ3RleHQn
OgoJCQkJY2FzZSAnaHRtbCc6IHRoaXMuJEJhbGxvb24uZmluZCh0aGlzLmNzc1RI
KVtrZXldKCB2YWx1ZSApOyBicmVhazsKCQkJCWNhc2UgJ3Zpc2libGUnOiB0aGlz
Ll9ldmVudCgwLCB2YWx1ZSA/ICdzaG93JyA6ICdoaWRlJyk7IGJyZWFrOwoJCQkJ
Y2FzZSAnd2lkdGgnOgoJCQkJY2FzZSAnaGVpZ2h0JzogdGhpcy4kQmFsbG9vbi5j
c3Moa2V5LCB2YWx1ZSk7IGJyZWFrOwoJCQkJZGVmYXVsdDogdGhpc1trZXldID0g
dmFsdWU7CgkJCX0KCgkJCXRoaXMuX2V2ZW50KDAsICdyZXNpemUnKTsKCQl9LAoK
CQlnZXR0ZXI6IGZ1bmN0aW9uIChrZXkpCgkJewoJCQl2YXIgcjsKCQkJc3dpdGNo
KCBrZXkgKQoJCQl7CgkJCQljYXNlICd3aWR0aCc6CgkJCQljYXNlICdoZWlnaHQn
OiByID0gdGhpcy4kQmFsbG9vbltrZXldKCk7IGJyZWFrOwoJCQkJY2FzZSAnYmFs
bG9vbic6IHIgPSB0aGlzLiRCYWxsb29uOyBicmVhazsKCQkJCWRlZmF1bHQ6IHIg
PSB0aGlzW2tleV07CgkJCX0KCQkJcmV0dXJuCXI7CgkJfSwKCgkJaGlkZTogZnVu
Y3Rpb24gKCl7CgkJCXRoaXMuX2VIaWRlKCk7CgkJfQoKCX0pOwoKCgkvLwoJLy8g
alF1ZXJ5CgkvLwoJJC5mbi5UaXBPZlRoZURheSA9IGZ1bmN0aW9uIChrZXksIHZh
bHVlKSB7CgoJCXZhciByZXN1bHQgPSB0aGlzLCAkdGhpcywgSW5zdDsKCgkJdGhp
cy5lYWNoKGZ1bmN0aW9uICgpIHsKCgkJCSR0aGlzID0gJCh0aGlzKTsKCgkJCUlu
c3QgPSAkdGhpcy5kYXRhKCdtYWlscnUudWkuVGlwT2ZUaGVEYXknKTsKCgkJCWlm
ICghZGVmaW5lZChrZXkpIHx8ICQuaXNQbGFpbk9iamVjdChrZXkpKSB7CgoJCQkJ
aWYgKEluc3QpIHsKCQkJCQlJbnN0Ll9lU2hvdygpOwoJCQkJfSBlbHNlIHsKCQkJ
CQkkdGhpcy5kYXRhKCdtYWlscnUudWkuVGlwT2ZUaGVEYXknLCBuZXcgbWFpbHJ1
LnVpLlRpcE9mVGhlRGF5KHRoaXMsIGtleSkpOwoJCQkJfQoKCQkJfSBlbHNlIHsK
CgkJCQlpZiAoZGVmaW5lZCh2YWx1ZSkpIHsKCQkJCQlJbnN0LnNldHRlcihrZXks
IHZhbHVlKTsKCQkJCX0gZWxzZSB7CgkJCQkJcmVzdWx0CT0gSW5zdC5nZXR0ZXIo
a2V5KTsKCQkJCX0KCQkJfQoJCX0pOwoKCQlyZXR1cm4gcmVzdWx0OwoJfTsKCglq
c0xvYWRlci5sb2FkZWQoJ3ttYWlscnUudWl9bWFpbHJ1LnVpLlRpcE9mVGhlRGF5
JywgMSk7CgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS91aS9tYWlscnUudWkuVGlw
T2ZUaGVEYXkuanMgZW5kCgovKioKCSAqIEBjbGFzcyBtYWlscnUuQmFsbG9vbgoJ
ICovCglqc0NsYXNzCgkuY3JlYXRlKCdtYWlscnUuQmFsbG9vbicpCgkuc3RhdGlj
cyh7CgoJCVNIT1dfVElNRV9MSU1JVDogNjAgKiA2MCAqIDEyLAoKCQlpdGVtczog
W10sCgoJCWRlZmF1bHRPcHRpb25zOiB7CgkJCWNvdW50ZXJzOiB7fSwKCQkJYmFs
bG9vbk9wdGlvbnM6IHsKCQkJCWhpZGVCeTogJ2JvZHk6bW91c2Vkb3duJywKCQkJ
CXdpZHRoOiAyODAsCgkJCQlvcmllbnRhdGlvbjogJ2JvdHRvbScsCgkJCQlwb3Np
dGlvblg6ICdyaWdodCcsCgkJCQltYXhTaG93OiAtMQoJCQl9CgkJfSwKCgkJaXNM
b2NrZWQ6IGZ1bmN0aW9uICgpIHsKCQkJcmV0dXJuIG1haWxydS5ub3RpZmljYXRp
b25Mb2NrZXIoKS5pc0xvY2tlZCgpOwoJCX0sCgoJCXNldExvY2s6IGZ1bmN0aW9u
IChzdGF0dXMpIHsKCQkJbWFpbHJ1Lm5vdGlmaWNhdGlvbkxvY2tlcigpLnNldExv
Y2soc3RhdHVzKTsKCQl9LAoKCQlpc0VuYWJsZTogZnVuY3Rpb24gKCkgewoJCQly
ZXR1cm4gISgkLmJyb3dzZXIubXNpZSAmJiBwYXJzZUludCgkLmJyb3dzZXIudmVy
c2lvbikgPCA3KSAmJiAhbWFpbHJ1LkRpc2FibGVkTm9BdXRoTGF5ZXI7CgkJfSwK
CgkJaXNWYWxpZDogZnVuY3Rpb24gKCkgewoJCQl2YXIgcmVzdWx0ID0gZmFsc2Us
IGluZGV4ID0gbWFpbHJ1LkhlbHBlckluZGV4LnZhbGlkRGF0YUZsYWc7CgkJCWlm
ICh0aGlzLmlzQ2xvc2VkKGluZGV4KSkgewoJCQkJcmVzdWx0ID0gdHJ1ZTsKCQkJ
fSBlbHNlIHsKCQkJCXRoaXMubWFrZUFzQ2xvc2VkKGluZGV4KTsKCQkJfQoJCQly
ZXR1cm4gcmVzdWx0OwoJCX0sCgoJCXB1c2g6IGZ1bmN0aW9uICgpIHsKCQkJZm9y
ICh2YXIgZGF0YSwgaSA9IGFyZ3VtZW50cy5sZW5ndGg7IGktLSA7ICkgewoJCQkJ
aWYgKHRoaXMudGVzdChkYXRhID0gYXJndW1lbnRzW2ldKSkgewoJCQkJCXRoaXMu
aXRlbXMucHVzaChuZXcgbWFpbHJ1LkJhbGxvb24oZGF0YSkpOwoJCQkJfQoJCQl9
CgkJfSwKCgkJdGVzdDogZnVuY3Rpb24gKGRhdGEpIHsKCQkJdmFyIHJlc3VsdCA9
IHRydWU7CgkJCWlmKCAoJ2lkJyBpbiBkYXRhKSAmJiB0aGlzLmlzQ2xvc2VkKGRh
dGEuaWQpICl7CgkJCQlyZXN1bHQgPSBmYWxzZTsKCQkJfQoJCQlyZXR1cm4gcmVz
dWx0OwoJCX0sCgoJCXJlZHJhdzogZnVuY3Rpb24gKCkgewovLwkJCWNvbnNvbGUu
aW5mbygncmVkcmF3JywgdGhpcy5pdGVtcyk7CgoJCQlpZiAoIXRoaXMuaXNMb2Nr
ZWQoKSkgewoJCQkJdmFyIGkgPSAwLCBpdGVtOwoKCQkJCXRoaXMuc29ydEJ5UHJp
b3JpdHkoKTsKCi8vCQkJCWNvbnNvbGUuaW5mbyh0aGlzLml0ZW1zKTsKCgkJCQlp
ZiAoaXRlbSA9IHRoaXMuaXRlbXNbaV0pIHsKCQkJCQl0aGlzLml0ZW1SZWRyYXco
aXRlbSwgaSk7CgkJCQl9CgkJCX0KCQl9LAoKCQlpdGVtUmVkcmF3OiBmdW5jdGlv
biAoaXRlbSwgaSkgewovLwkJCWNvbnNvbGUuaW5mbygnaXRlbVJlZHJhdycsIGkp
OwoKCQkJdmFyIGRvbmVDYWxsYmFjayA9IHRoaXMuaXRlbVJlZHJhd0RvbmUuYmlu
ZCh0aGlzLCBpdGVtKTsKCQkJdmFyIGZhaWxDYWxsYmFjayA9IHRoaXMuaXRlbVJl
ZHJhd0ZhaWwuYmluZCh0aGlzLCBpdGVtLCBpKTsKCQkJdmFyIGRlZmVycmVkID0g
JC5EZWZlcnJlZCgpLmRvbmUoZG9uZUNhbGxiYWNrKS5mYWlsKGZhaWxDYWxsYmFj
ayk7CgkJCWl0ZW0ucmVkcmF3KGRlZmVycmVkKTsKCQl9LAoKCQlpdGVtUmVkcmF3
RG9uZTogZnVuY3Rpb24gKGl0ZW0pIHsKLy8JCQljb25zb2xlLmluZm8oJ3Nob3cn
LCBpdGVtLm9wdGlvbnMsIGl0ZW0uJGJhbGxvb24pOwoKCQkJaWYgKHRoaXMucHJl
dmlvcykgewoJCQkJdGhpcy5wcmV2aW9zLmhpZGUoKTsKCQkJfQoJCQl0aGlzLnBy
ZXZpb3MgPSBpdGVtOwoJCQlpdGVtLnNob3coKTsKCQl9LAoKCQlpdGVtUmVkcmF3
RmFpbDogZnVuY3Rpb24gKGl0ZW0sIGkpIHsKLy8JCQljb25zb2xlLmluZm8oJ2Zh
aWwnLCBpdGVtLm9wdGlvbnMsIGl0ZW0uJGJhbGxvb24pOwoKCQkJdmFyIG5leHRJ
dGVtOwoJCQlpZiAoaSAhPT0gdW5kZWZpbmVkKSB7IC8vIGluIGNhc2Ugd2UgY2Fs
bCBpdGVtUmVkcmF3IGZvciAxIGl0ZW0sIHdlIGRvbid0IHdhbnQgdGhlIG90aGVy
IGl0ZW1zIHRvIGJlIHJlZHJhd24KCQkJCW5leHRJdGVtID0gdGhpcy5pdGVtc1sr
K2ldOwoJCQl9CgkJCWlmIChuZXh0SXRlbSkgewoJCQkJdGhpcy5pdGVtUmVkcmF3
KG5leHRJdGVtLCBpKTsKCQkJfSBlbHNlIGlmICh0aGlzLnByZXZpb3MpIHsKCQkJ
CXRoaXMucHJldmlvcy5oaWRlKCk7CgkJCQl0aGlzLnByZXZpb3MgPSBudWxsOwoJ
CQl9CgkJfSwKCgkJc29ydEJ5UHJpb3JpdHk6IGZ1bmN0aW9uICgpIHsKCQkJdGhp
cy5pdGVtcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CgkJCQlyZXR1cm4gYS5vcHRp
b25zLnByaW9yaXR5IC0gYi5vcHRpb25zLnByaW9yaXR5OwoJCQl9KTsKCQl9LAoK
CQltYWtlQXNTaG93ZWQ6IGZ1bmN0aW9uIChpbmRleCkgewoJCQl0aGlzLnNldFRp
bWVzdGFtcChpbmRleCwgdGhpcy5nZXRDdXJyZW50VGltZXN0YW1wKCkpOwoJCX0s
CgoJCW1ha2VBc0Nsb3NlZDogZnVuY3Rpb24gKGluZGV4KSB7CgkJCWlmICghdGhp
cy5pc0Nsb3NlZChpbmRleCkpIHsKCQkJCXRoaXMudXBkYXRlU3RhdHVzKGluZGV4
KTsKCQkJCXRoaXMucmVtb3ZlSXRlbUJ5SWQoaW5kZXgpOwoJCQl9CgkJfSwKCgkJ
c2V0VGltZXN0YW1wOiBmdW5jdGlvbiAoaW5kZXgsIHRpbWUpIHsKCQkJbWFpbHJ1
LkFqYXgoewoJCQkJdHlwZTogJ1BPU1QnLAoJCQkJdXJsOiAnL2NnaS1iaW4vYWph
eF9oZWxwZXI/YWpheF9jYWxsPTEmZnVuY19uYW1lPXNldF9oZWxwZXJfdGltZXN0
YW1wJywKCQkJCWRhdGE6IHtoZWxwZXI6IGluZGV4LCBoZWxwZXJfdGltZXN0YW1w
OiBtYWlscnUuSGVscGVyVGltZXN0YW1wW2luZGV4XSA9IHRpbWV9CgkJCX0pOwoJ
CX0sCgoJCXVwZGF0ZVN0YXR1czogZnVuY3Rpb24gKGluZGV4LCBjb21wbGV0ZSkg
ewoJCQltYWlscnUuQVBJLnBvc3QoJ2hlbHBlci9zZXQnLCB7CgkJCQlpbmRleDog
aW5kZXgKCQkJfSwgZnVuY3Rpb24gKHJlc3VsdCkgewoJCQkJaWYoIHJlc3VsdC5p
c09LKCkgKXsKCQkJCQltYWlscnUuSGVscGVyU3RhdHVzID0gcmVzdWx0LmdldEJv
ZHkoKS5zdGF0dXM7CgkJCQl9CgoJCQkJaWYgKGNvbXBsZXRlKSB7CgkJCQkJY29t
cGxldGUoKTsKCQkJCX0KCQkJfSk7CgkJfSwKCgkJdW5zZXRJbmRleDogZnVuY3Rp
b24gKGluZGV4LCBjb21wbGV0ZSkgewoJCQltYWlscnUuQVBJLnBvc3QoJ2hlbHBl
ci91bnNldCcsIHsKCQkJCWluZGV4OiBpbmRleAoJCQl9LCBmdW5jdGlvbiAocmVz
dWx0KSB7CgkJCQlpZiggcmVzdWx0LmlzT0soKSApewoJCQkJCW1haWxydS5IZWxw
ZXJTdGF0dXMgPSByZXN1bHQuZ2V0Qm9keSgpLnN0YXR1czsKCQkJCX0KCQkJCWlm
IChjb21wbGV0ZSkgewoJCQkJCWNvbXBsZXRlKCk7CgkJCQl9CgkJCX0pOwoJCX0s
CgoJCXNldFN0YXR1czogZnVuY3Rpb24gKHN0YXR1cykgewoJCQltYWlscnUuQWph
eCh7CgkJCQl0eXBlOiAnUE9TVCcsCgkJCQl1cmw6ICcvY2dpLWJpbi9hamF4X2hl
bHBlcj9hamF4X2NhbGw9MSZmdW5jX25hbWU9c2V0X2hlbHBlcl9zdGF0dXMnLAoJ
CQkJZGF0YToge2hlbHBlcl9tYXNrOiBtYWlscnUuSGVscGVyU3RhdHVzID0gc3Rh
dHVzfQoJCQl9KTsKCQl9LAoKCQlpc0Nsb3NlZDogZnVuY3Rpb24gKGluZGV4KSB7
CgkJCXZhciBiaXQgPSAxIDw8IGluZGV4LCBzdGF0dXMgPSBtYWlscnUuSGVscGVy
U3RhdHVzOwoJCQlyZXR1cm4gKHN0YXR1cyAmIGJpdCkgPT09IGJpdDsKCQl9LAoK
CQlyZW1vdmVJdGVtQnlJZDogZnVuY3Rpb24gKGlkKSB7CgkJCWZvciAodmFyIGl0
ZW0sIGkgPSB0aGlzLml0ZW1zLmxlbmd0aDsgaS0tIDsgKSB7CgkJCQlpdGVtID0g
dGhpcy5pdGVtc1tpXTsKCQkJCWlmIChpdGVtLm9wdGlvbnMuaWQgPT0gaWQpIHsK
CQkJCQl0aGlzLml0ZW1zLnNwbGljZShpLCAxKTsKCQkJCQlicmVhazsKCQkJCX0K
CQkJfQoJCX0sCgoJCWdldEl0ZW1CeUlkOiBmdW5jdGlvbihpZCkgewoJCQlmb3Ig
KHZhciBpdGVtLCBpID0gdGhpcy5pdGVtcy5sZW5ndGg7IGktLSA7ICkgewoJCQkJ
aXRlbSA9IHRoaXMuaXRlbXNbaV07CgkJCQlpZiAoaXRlbS5vcHRpb25zLmlkID09
IGlkKSB7CgkJCQkJcmV0dXJuIGl0ZW07CgkJCQl9CgkJCX0KCQkJcmV0dXJuIG51
bGw7CgkJfSwKCgkJaW5BcnJheTogZnVuY3Rpb24gKHN0ciwgZGF0YSkgewoJCQlm
b3IgKHZhciBpPWRhdGEubGVuZ3RoOyBpLS07ICkgewoJCQkJaWYgKGRhdGFbaV0u
aW5kZXhPZihzdHIpICE9PSAtMSkKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQly
ZXR1cm4gZmFsc2U7CgkJfSwKCgkJZ2V0Q3VycmVudFRpbWVzdGFtcDogZnVuY3Rp
b24gKCkgewoJCQlyZXR1cm4gTWF0aC5yb3VuZChuZXcgRGF0ZSgpIC8gMTAwMCAt
IG1haWxydS5DdXJyZW50VGltZXN0YW1wT2Zmc2V0KTsKCQl9LAoKCQlnZXRMYXN0
U2hvd1RpbWU6IGZ1bmN0aW9uICgpIHsKCQkJdmFyIHJlc3VsdCA9IDAsIHRpbWVz
dGFtcHMgPSBtYWlscnUuSGVscGVyVGltZXN0YW1wOwoJCQlmb3IgKHZhciBpID0g
dGltZXN0YW1wcy5sZW5ndGg7IGktLSA7ICkKCQkJCXJlc3VsdCA9IE1hdGgubWF4
KHJlc3VsdCwgdGltZXN0YW1wc1tpXSk7CgkJCXJldHVybiByZXN1bHQ7CgkJfSwK
CgkJZ2V0QWRkcmVzc0Jvb2tEYXRhOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKCQkJ
JCh3aW5kb3cpLm9uZSgnc3VjY2Vzcy5hYmpzIGVycm9yLmFianMnLCBmdW5jdGlv
biAoZXZ0LCBkYXRhKSB7CgkJCQlpZiAoISQuaXNBcnJheShkYXRhKSkgZGF0YSA9
IFtdOwoJCQkJY2FsbGJhY2soZGF0YSk7CgkJCX0pOwoJCQkkUigne21haWxydX0n
ICsgJ21haWxydScsIGZ1bmN0aW9uKCkgewoJCQkJbWFpbHJ1LlV0aWxzLmdldEFk
ZHJlc3NCb29rKCk7CgkJCX0pOwoJCX0sCgoJCWNoZWNrQWNjZXNzOiBmdW5jdGlv
biAoKSB7CgkJCXZhciByZXN1bHQgPSB0cnVlOwoJCQlmb3IgKHZhciBpdGVtLCBp
ID0gdGhpcy5pdGVtcy5sZW5ndGg7IGktLSA7ICkgewoJCQkJaXRlbSA9IHRoaXMu
aXRlbXNbaV07CgkJCQlpZiAoaXRlbS5zaG93ZWQgJiYgIShpdGVtLmNsb3NlZCB8
fCBpdGVtLmhpZGVkKSkgewoJCQkJCXJlc3VsdCA9IGZhbHNlOwoJCQkJCWJyZWFr
OwoJCQkJfQoJCQl9CgkJCXJldHVybiByZXN1bHQ7CgkJfQoJfSkKCS5tZXRob2Rz
KHsKCgkJX19jb25zdHJ1Y3Q6IGZ1bmN0aW9uIChvcHRpb25zKSB7CgkJCXRoaXMu
JGNvbnRhaW5lciA9ICQoKTsKCQkJdGhpcy4kYmFsbG9vbiA9ICQoKTsKCQkJdGhp
cy5vcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sCgkJCQltYWlscnUuQmFsbG9v
bi5kZWZhdWx0T3B0aW9ucywKCQkJCW9wdGlvbnMsCgkJCQl7YmFsbG9vbk9wdGlv
bnM6IHsKCQkJCQlvbkNsb3NlOiB0aGlzLmNsb3NlLmJpbmQodGhpcyksCgkJCQkJ
b25IaWRlOiB0aGlzLmhpZGUuYmluZCh0aGlzKQoJCQkJfX0KCQkJKTsKCgkJCWlm
ICh0aGlzLm9wdGlvbnMuZXZlbnQpIHsKCQkJCSQod2luZG93KS5iaW5kKHRoaXMu
b3B0aW9ucy5ldmVudCwge3Njb3BlOiB0aGlzfSwgZnVuY3Rpb24gKGV2dCkgewoJ
CQkJCXZhciBzY29wZSA9IGV2dC5kYXRhLnNjb3BlOwoKCQkJCQlpZiggJ2lkJyBp
biBzY29wZS5vcHRpb25zICl7CgkJCQkJCW1haWxydS5CYWxsb29uLm1ha2VBc0Ns
b3NlZChzY29wZS5vcHRpb25zLmlkKTsKCQkJCQl9CgoJCQkJCWlmIChzY29wZS5v
cHRpb25zLmNvdW50ZXJzLnNob3dBbmREbyAmJiBzY29wZS5zaG93ZWQpIHsKCQkJ
CQkJQ291bnRlci5kKHNjb3BlLm9wdGlvbnMuY291bnRlcnMuc2hvd0FuZERvKTsK
CQkJCQl9CgkJCQl9KTsKCQkJfQoJCX0sCgoJCXJlZHJhdzogZnVuY3Rpb24gKGRl
ZmVycmVkKSB7CgkJCXRoaXMudGVzdChkZWZlcnJlZCk7CgkJfSwKCgkJc2hvdzog
ZnVuY3Rpb24gKCkgewoJCQlpZiAodGhpcy5vcHRpb25zLmJhbGxvb25PcHRpb25z
LmxvYWRIVE1MICYmICF0aGlzLm9wdGlvbnMuYmFsbG9vbk9wdGlvbnMuaHRtbCkg
ewoJCQkJbWFpbHJ1LkFqYXgoewoJCQkJCXVybDogJy9jZ2ktYmluL2xzdGF0aWMn
LAoJCQkJCWRhdGFUeXBlOiAndGV4dCcsCgkJCQkJZGF0YTogeydnZXQnOiAnYmFs
bG9vbicsIG5hbWU6IHRoaXMub3B0aW9ucy5pZCwgbGFuZzogbWFpbHJ1LkxBTkcs
IFNwYW1CYWxsb25FeHA6IG1haWxydS5TcGFtQmFsbG9uRXhwLCBTZXR0aW5nc09u
OiBtYWlscnUuU2V0dGluZ3NPbiA/IDEgOiAwLCBzdGF0aWNEb21haW5OYW1lOiBt
YWlscnUuc3RhdGljRG9tYWluTmFtZX0sCgkJCQkJc3VjY2VzczogZnVuY3Rpb24g
KHJlc3VsdCkgewoJCQkJCQlpZiAocmVzdWx0LmlzT0soKSkgewoJCQkJCQkJdGhp
cy5vcHRpb25zLmJhbGxvb25PcHRpb25zLmh0bWwgPSByZXN1bHQuZ2V0RGF0YSgp
OwoJCQkJCQkJdGhpcy5zaG93QmFsbG9vbigpOwoJCQkJCQl9CgkJCQkJfS5iaW5k
KHRoaXMpCgkJCQl9KTsKCQkJfSBlbHNlIHsKCQkJCXRoaXMuc2hvd0JhbGxvb24o
KTsKCQkJfQoJCX0sCgoJCXNob3dCYWxsb29uOiBmdW5jdGlvbiAoKSB7CgkJCXZh
ciAkY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXIoKTsKCQkJdGhpcy4kYmFs
bG9vbiA9ICRjb250YWluZXIuVGlwT2ZUaGVEYXkodGhpcy5vcHRpb25zLmJhbGxv
b25PcHRpb25zKTsKCQkJdGhpcy5zaG93ZWQgPSAxOwoKCQkJaWYoICdpZCcgaW4g
dGhpcy5vcHRpb25zICl7CgkJCQltYWlscnUuQmFsbG9vbi5tYWtlQXNTaG93ZWQo
dGhpcy5vcHRpb25zLmlkKTsKCQkJfQoKCQkJJCh3aW5kb3cpLmJpbmQoJ2JlZm9y
ZXVubG9hZC5iYWxsb29uJywge3Njb3BlOiB0aGlzfSwgZnVuY3Rpb24gKGV2dCkg
ewoJCQkJdmFyIHNjb3BlID0gZXZ0LmRhdGEuc2NvcGU7CgkJCQlpZiAoZXZ0Lm9y
aWdpbmFsRXZlbnQpIHsKCQkJCQlpZiAoc2NvcGUuc2hvd2VkICYmICFzY29wZS5j
bG9zZWQgJiYgIXNjb3BlLmhpZGVkKSB7CgkJCQkJCUNvdW50ZXIuZCg2MDQ4MDAp
OwoJCQkJCX0KCQkJCX0KCQkJfSk7CgoJCQlpZiAodGhpcy5vcHRpb25zLmNvdW50
ZXJzKSB7CgkJCQlpZiAodGhpcy5vcHRpb25zLmNvdW50ZXJzLnNob3cpIHsKCQkJ
CQlDb3VudGVyLmQodGhpcy5vcHRpb25zLmNvdW50ZXJzLnNob3cpOwoJCQkJfQoJ
CQl9CgoJCQl2YXIgcmVzb2x2ZSA9IHRoaXMub3B0aW9ucy5yZXNvbHZlOwoJCQlp
ZiAoJC5pc0Z1bmN0aW9uKHJlc29sdmUpKSB7CgkJCQlyZXNvbHZlLmNhbGwodGhp
cyk7CgkJCX0KCgkJCW1haWxydS5CYWxsb29uLnNldExvY2sodHJ1ZSk7CgkJfSwK
CgkJY2xvc2U6IGZ1bmN0aW9uICgpIHsKCQkJdGhpcy5jbG9zZWQgPSAxOwoKCQkJ
aWYoICdpZCcgaW4gdGhpcy5vcHRpb25zICl7CgkJCQltYWlscnUuQmFsbG9vbi5t
YWtlQXNDbG9zZWQodGhpcy5vcHRpb25zLmlkKTsKCQkJfQoKCQkJaWYgKHRoaXMu
b3B0aW9ucy5jb3VudGVycy5jbG9zZSkgewoJCQkJQ291bnRlci5zYih0aGlzLm9w
dGlvbnMuY291bnRlcnMuY2xvc2UpOwoJCQl9CgoJCQlDb3VudGVyLmQoNjA0Nzk3
KTsKCQkJJCh3aW5kb3cpLnVuYmluZCgnLmJhbGxvb24nKTsKCQl9LAoKCQloaWRl
OiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuaGlkZWQgPSAxOwoJCQl2YXIgYmFsbG9v
biA9IHRoaXMuJGJhbGxvb24uZGF0YSgnbWFpbHJ1LnVpLlRpcE9mVGhlRGF5Jyk7
CgkJCWlmIChiYWxsb29uKSB7CgkJCQliYWxsb29uLl9lSGlkZSgpOwoJCQl9CgkJ
CUNvdW50ZXIuZCg2MDQ3OTkpOwoJCQkkKHdpbmRvdykudW5iaW5kKCcuYmFsbG9v
bicpOwoKCQkJbWFpbHJ1LkJhbGxvb24uc2V0TG9jayhmYWxzZSk7CgkJfSwKCgkJ
dGVzdDogZnVuY3Rpb24gKGRlZmVycmVkKSB7CgkJCXZhciByZXN1bHQgPSB0cnVl
OwoJCQl2YXIgb3B0cyA9IHRoaXMub3B0aW9uczsKCQkJdmFyIHRlc3QgPSBvcHRz
LnRlc3Q7CgkJCXZhciAkY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXIoKTsK
CQkJdmFyIGN1cnJlbnRUaW1lc3RhbXAgPSBtYWlscnUuQmFsbG9vbi5nZXRDdXJy
ZW50VGltZXN0YW1wKCk7CgkJCXZhciBsYXN0U2hvd1RpbWVzdGFtcCA9IG1haWxy
dS5CYWxsb29uLmdldExhc3RTaG93VGltZSgpOwoKCQkJaWYgKCFtYWlscnUuQmFs
bG9vbi50ZXN0KG9wdHMpKSB7CgkJCQlyZXN1bHQgPSBmYWxzZTsKLy8JCQkJY29u
c29sZS5pbmZvKG9wdHMuaWQsIDEpOwoJCQl9IGVsc2UgaWYgKChsYXN0U2hvd1Rp
bWVzdGFtcCA+IGN1cnJlbnRUaW1lc3RhbXAgLSBtYWlscnUuQmFsbG9vbi5TSE9X
X1RJTUVfTElNSVQpICYmICFvcHRzLmlnbm9yU2hvd1RpbWVMaW1pdCkgewoJCQkJ
cmVzdWx0ID0gZmFsc2U7Ci8vCQkJCWNvbnNvbGUuaW5mbyhvcHRzLmlkLCAyLCBs
YXN0U2hvd1RpbWVzdGFtcCwgY3VycmVudFRpbWVzdGFtcCwgbWFpbHJ1LkJhbGxv
b24uU0hPV19USU1FX0xJTUlUKTsKCQkJfSBlbHNlIGlmIChvcHRzLmRpc3Bvc2Fi
bGUgJiYgbWFpbHJ1LkhlbHBlclRpbWVzdGFtcFtvcHRzLmlkXSA+IDEpIHsKCQkJ
CXJlc3VsdCA9IGZhbHNlOwovLwkJCQljb25zb2xlLmluZm8ob3B0cy5pZCwgMyk7
CgkJCX0gZWxzZSBpZiAob3B0cy5yZWdUaW1lTGltaXQgJiYgbWFpbHJ1LlJlZ1Rp
bWUgPiBjdXJyZW50VGltZXN0YW1wIC0gb3B0cy5yZWdUaW1lTGltaXQpIHsKCQkJ
CXJlc3VsdCA9IGZhbHNlOwovLwkJCQljb25zb2xlLmluZm8ob3B0cy5pZCwgNCk7
CgkJCX0gZWxzZSBpZiAob3B0cy50aW1lTGltaXQgJiYgbWFpbHJ1LkhlbHBlclRp
bWVzdGFtcFtvcHRzLmlkXSA+IGN1cnJlbnRUaW1lc3RhbXAgLSBvcHRzLnRpbWVM
aW1pdCkgewoJCQkJcmVzdWx0ID0gZmFsc2U7Ci8vCQkJCWNvbnNvbGUuaW5mbyhv
cHRzLmlkLCA1KTsKCQkJfSBlbHNlIGlmIChvcHRzLnNlbGVjdG9yICYmICEoJGNv
bnRhaW5lci5sZW5ndGggPiAwICYmICRjb250YWluZXIuaXMoJzp2aXNpYmxlJykp
KSB7CgkJCQlyZXN1bHQgPSBmYWxzZTsKLy8JCQkJY29uc29sZS5pbmZvKG9wdHMu
aWQsIDYpOwoJCQl9CgoJCQlpZiAocmVzdWx0KSB7CgkJCQlpZiAoJC5pc0Z1bmN0
aW9uKHRlc3QpKSB7CgovKgkJCQkJdmFyIGRmZCA9IG5ldyAkLkRlZmVycmVkKCku
ZG9uZShmdW5jdGlvbiAoKSB7CgkJCQkJCWlmICgkY29udGFpbmVyLmxlbmd0aCA+
IDAgJiYgJGNvbnRhaW5lci5pcygnOnZpc2libGUnKSkgewoJCQkJCQkJZGVmZXJy
ZWQucmVzb2x2ZSgpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJZGVmZXJyZWQucmVq
ZWN0KCk7CgkJCQkJCX0KCQkJCQl9KS5mYWlsKGZ1bmN0aW9uICgpIHsKCQkJCQkJ
ZGVmZXJyZWQucmVqZWN0KCk7CgkJCQkJfSk7Ki8KCgkJCQkJdGVzdC5jYWxsKHRo
aXMsIGRlZmVycmVkKTsKCQkJCX0gZWxzZSB7CgkJCQkJZGVmZXJyZWQucmVzb2x2
ZSgpOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJZGVmZXJyZWQucmVqZWN0KCk7CgkJ
CX0KCQl9LAoKCQlnZXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHsKCQkJdmFyIHNl
bGVjdG9yID0gdGhpcy5vcHRpb25zLnNlbGVjdG9yOwoKCQkJaWYgKCQuaXNGdW5j
dGlvbihzZWxlY3RvcikpIHsKCQkJCXNlbGVjdG9yID0gc2VsZWN0b3IuY2FsbCh0
aGlzKTsKCQkJfQoKCQkJcmV0dXJuICQoc2VsZWN0b3IpOwoJCX0KCX0pOwoKCWlm
IChkZWZpbmVkKG1haWxydS5UZXN0SGVscGVyc1RpbWVMaW1pdCkpIHsKCQltYWls
cnUuQmFsbG9vbi5TSE9XX1RJTUVfTElNSVQgPSBtYWlscnUuVGVzdEhlbHBlcnNU
aW1lTGltaXQ7Cgl9CgoJaWYgKG1haWxydS5UZXN0SGVscGVyc0NsZWFyQWxsU3Rh
dHVzKSB7CgkJbWFpbHJ1LkJhbGxvb24uc2V0U3RhdHVzKDApOwoJfQoKCWlmICht
YWlscnUuVGVzdEhlbHBlcnNDbGVhckFsbFNob3dUaW1lKSB7CgkJJC5lYWNoKG1h
aWxydS5IZWxwZXJUaW1lc3RhbXAsIGZ1bmN0aW9uIChrKSB7CgkJCW1haWxydS5C
YWxsb29uLnNldFRpbWVzdGFtcChrLCAxKTsKCQl9KTsKCX0KCglpZiAobWFpbHJ1
LkJhbGxvb24uaXNFbmFibGUoKSkgewoKCQlpZiAobWFpbHJ1LkJhbGxvb24uaXNW
YWxpZCgpKSB7CgoJCQl2YXIgdGVzdF9zcGFtID0gbWFpbHJ1LlNwYW1CYWxsb25F
eHA7CgoJCQltYWlscnUuQmFsbG9vbi5wdXNoKHsKCQkJCWlkOiBtYWlscnUuSGVs
cGVySW5kZXguc3BhbSwKCQkJCXNlbGVjdG9yOiAnI2FjdGlvbl9idXR0b25zIGEu
dXJsLXNwYW0nLAoJCQkJZXZlbnQ6ICdzcGFtTGlua0NsaWNrLnJlYWRtc2cnLAoJ
CQkJcHJpb3JpdHk6IDIwLAoJCQkJdGltZUxpbWl0OiA2MCAqIDYwICogMjQgKiAz
MCwKCQkJCXJlZ1RpbWVMaW1pdDogNjAgKiA2MCAqIDI0ICogMzAsCgkJCQljb3Vu
dGVyczogewoJCQkJCXNob3c6ICAgICAgdGVzdF9zcGFtID8gMTEwODc3NyA6IDQy
NzAwNSwKCQkJCQljbG9zZTogICAgIDQyNzAwNSwKCQkJCQlzaG93QW5kRG86IHRl
c3Rfc3BhbSA/IDExMDg3NzcgOiA2MDQ3OTMKCQkJCX0sCgkJCQl0ZXN0OiBmdW5j
dGlvbiAoZGVmZXJyZWQpIHsKCQkJCQlpZiAobWFpbHJ1LmlzUmVhZE1zZykgewoJ
CQkJCQkkUigne21haWxydX0nICsgJ21haWxydS5NZXNzYWdlcycsIGZ1bmN0aW9u
KGRlZmVycmVkKSB7CgkJCQkJCQl2YXIgc3VjY2VzcyA9IGZhbHNlLCBlbWFpbDsK
CQkJCQkJCWlmIChHRVQuaWQpIHsKCQkJCQkJCQl2YXIgbWVzc2FnZSA9IG1haWxy
dS5NZXNzYWdlcy5nZXQoR0VULmlkKTsKCQkJCQkJCQlpZiAobWVzc2FnZSkgewoJ
CQkJCQkJCQllbWFpbCA9IG1lc3NhZ2UuRnJvbTsKCQkJCQkJCQl9CgkJCQkJCQl9
CgkJCQkJCQlpZiAoIWVtYWlsIHx8IGVtYWlsLmluZGV4T2YoJ0Bjb3JwLm1haWwu
cnUnKSA9PT0gLTEpIHsKCQkJCQkJCQlzdWNjZXNzID0gdHJ1ZTsKCQkJCQkJCX0K
CQkJCQkJCWlmIChzdWNjZXNzKSB7CgkJCQkJCQkJaWYgKGVtYWlsKSB7CgkJCQkJ
CQkJCW1haWxydS5CYWxsb29uLmdldEFkZHJlc3NCb29rRGF0YShmdW5jdGlvbihk
YXRhKSB7CgkJCQkJCQkJCQlpZiAobWFpbHJ1LkJhbGxvb24uaW5BcnJheShlbWFp
bCwgZGF0YSkpIHsKCQkJCQkJCQkJCQlkZWZlcnJlZC5yZWplY3QoKTsKCQkJCQkJ
CQkJCX0gZWxzZSB7CgkJCQkJCQkJCQkJZGVmZXJyZWQucmVzb2x2ZSgpOwoJCQkJ
CQkJCQkJfQoJCQkJCQkJCQl9KTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQlk
ZWZlcnJlZC5yZXNvbHZlKCk7CgkJCQkJCQkJfQoJCQkJCQkJfSBlbHNlIHsKCQkJ
CQkJCQlkZWZlcnJlZC5yZWplY3QoKTsKCQkJCQkJCX0KCQkJCQkJfS5iaW5kKHRo
aXMsIGRlZmVycmVkKSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJZGVmZXJyZWQucmVq
ZWN0KCk7CgkJCQkJfQoJCQkJfSwKCQkJCWJhbGxvb25PcHRpb25zOiB7CgkJCQkJ
bG9hZEhUTUw6IHRydWUKCQkJCX0KCQkJfSwgewoJCQkJaWQ6IG1haWxydS5IZWxw
ZXJJbmRleC5ub3NwYW0sCgkJCQlzZWxlY3RvcjogJyNhY3Rpb25fYnV0dG9ucyBh
LnVybC1ub3NwYW0nLAoJCQkJZXZlbnQ6ICdub3NwYW1MaW5rQ2xpY2sucmVhZG1z
ZycsCgkJCQlwcmlvcml0eTogMzAsCgkJCQl0aW1lTGltaXQ6IDYwICogNjAgKiAy
NCAqIDE0LAoJCQkJcmVnVGltZUxpbWl0OiA2MCAqIDYwICogMjQgKiAxNCwKCQkJ
CWNvdW50ZXJzOiB7c2hvdzogNDI3MDA3LCBjbG9zZTogNDI3MDA3LCBzaG93QW5k
RG86IDYwNDc5NH0sCgkJCQl0ZXN0OiBmdW5jdGlvbiAoZGVmZXJyZWQpIHsKCQkJ
CQlpZiAobWFpbHJ1LmlzUmVhZE1zZykgewoJCQkJCQkkUigne21haWxydX0nICsg
J21haWxydS5NZXNzYWdlcycsIGZ1bmN0aW9uKGRlZmVycmVkKSB7CgkJCQkJCQl2
YXIgc3VjY2VzcyA9IGZhbHNlLCBlbWFpbDsKCQkJCQkJCWlmIChHRVQuaWQpIHsK
CQkJCQkJCQl2YXIgbWVzc2FnZSA9IG1haWxydS5NZXNzYWdlcy5nZXQoR0VULmlk
KTsKCQkJCQkJCQlpZiAobWVzc2FnZSkgewoJCQkJCQkJCQllbWFpbCA9IG1lc3Nh
Z2UuRnJvbTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlpZiAoIWVtYWlsIHx8
IGVtYWlsLmluZGV4T2YoJ0Bjb3JwLm1haWwucnUnKSA9PT0gLTEpIHsKCQkJCQkJ
CQlzdWNjZXNzID0gdHJ1ZTsKCQkJCQkJCX0KCQkJCQkJCWlmIChzdWNjZXNzKSB7
CgkJCQkJCQkJaWYgKGVtYWlsKSB7CgkJCQkJCQkJCW1haWxydS5CYWxsb29uLmdl
dEFkZHJlc3NCb29rRGF0YShmdW5jdGlvbihkYXRhKSB7CgkJCQkJCQkJCQlpZiAo
bWFpbHJ1LkJhbGxvb24uaW5BcnJheShlbWFpbCwgZGF0YSkpIHsKCQkJCQkJCQkJ
CQlkZWZlcnJlZC5yZWplY3QoKTsKCQkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJ
CQkJZGVmZXJyZWQucmVzb2x2ZSgpOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9KTsK
CQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQlkZWZlcnJlZC5yZXNvbHZlKCk7CgkJ
CQkJCQkJfQoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQlkZWZlcnJlZC5yZWplY3Qo
KTsKCQkJCQkJCX0KCQkJCQkJfS5iaW5kKHRoaXMsIGRlZmVycmVkKSk7CgkJCQkJ
fSBlbHNlIHsKCQkJCQkJZGVmZXJyZWQucmVqZWN0KCk7CgkJCQkJfQoJCQkJfSwK
CQkJCWJhbGxvb25PcHRpb25zOiB7CgkJCQkJbG9hZEhUTUw6IHRydWUKCQkJCX0K
CQkJfSk7CgoJCQkvLyBNQUlMLTEzNzQ3CgkJCWlmIChtYWlscnVbJ0lzU2hvd0Fu
Z3J5QmlyZHNCYWxsb29uJ10pIHsKCQkJCShmdW5jdGlvbiAodHMsIGlkKSB7CgoJ
CQkJCWlmICh0c1tpZF0gPCAxMzU2OTg0MDAwKSB7CgoJCQkJCQltYWlscnUuSGVs
cGVyU3RhdHVzICY9IH4oMSA8PCBpZCk7CgoJCQkJCQltYWlscnUuQmFsbG9vbi5w
dXNoKHsKCQkJCQkJCWlkOiBpZCwKCQkJCQkJCXNlbGVjdG9yOiBmdW5jdGlvbiAo
KSB7CgkJCQkJCQkJdmFyIHNlbGVjdG9yID0gJyNwb3J0YWwtbWVudV9fZHJvcGRv
d24nOwoJCQkJCQkJCWlmIChtYWlscnVbJ0lzVGhlbWVCdXR0b24nXSkgewoJCQkJ
CQkJCQl2YXIgJHRoZW1lQnV0dG9uID0gJCgnLnBvcnRhbC1tZW51X19idXR0b25z
X19pdGVtX3RoZW1lcycsICcjZGRidXR0b25zJyk7CgkJCQkJCQkJCWlmICgkdGhl
bWVCdXR0b24uaXMoJzp2aXNpYmxlJykpIHsKCQkJCQkJCQkJCXNlbGVjdG9yID0g
JHRoZW1lQnV0dG9uOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCXJldHVy
biAkKHNlbGVjdG9yKTsKCQkJCQkJCX0sCgkJCQkJCQl0ZXN0OiBmdW5jdGlvbiAo
ZGVmZXJyZWQpewoJCQkJCQkJCWlmIChtYWlscnUuY3VycmVudFRoZW1lID09ICd0
MTA4NCcgfHwgbWFpbHJ1LmN1cnJlbnRUaGVtZSA9PSAndDEwODUnKSB7CgkJCQkJ
CQkJCWRlZmVycmVkLnJlamVjdCgpOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJ
CWRlZmVycmVkLnJlc29sdmUoKTsKCQkJCQkJCQl9CgkJCQkJCQl9LAoJCQkJCQkJ
cHJpb3JpdHk6IDEwLAoJCQkJCQkJdGltZUxpbWl0OiA2MCAqIDYwICogMjQgKiA1
LAoJCQkJCQkJcmVnVGltZUxpbWl0OiA2MCAqIDYwICogMjQsCgkJCQkJCQljb3Vu
dGVyczogewoJCQkJCQkJCXNob3c6IDE0OTcxMTQsCgkJCQkJCQkJY2xvc2U6IDE0
OTcxMTIKCQkJCQkJCX0sCgkJCQkJCQliYWxsb29uT3B0aW9uczogewoJCQkJCQkJ
CWNsYXNzTmFtZTogJ2JhbGxvb25fX0FuZ3J5QmlyZHMnLAoJCQkJCQkJCXdpZHRo
OiAyNDAsCgkJCQkJCQkJb3JpZW50YXRpb246ICdjZW50ZXInLAoJCQkJCQkJCXBv
c2l0aW9uWDogJ2xlZnQnLAoJCQkJCQkJCW1hcmdpbjogWy0xMDcsIC0xMF0sCgkJ
CQkJCQkJYWJzb2x1dGU6IGZhbHNlLAoJCQkJCQkJCWxvYWRIVE1MOiB0cnVlCgkJ
CQkJCQl9CgkJCQkJCX0pOwoJCQkJCX0KCgkJCQl9KShtYWlscnUuSGVscGVyVGlt
ZXN0YW1wLCBtYWlscnUuSGVscGVySW5kZXgubW9yZVRoZW1lcyk7CgkJCX0KCgkJ
CWlmIChtYWlscnUuUmVnaXN0ZXJNYWlsdG9IYW5kbGVyKSB7CgkJCQltYWlscnUu
QmFsbG9vbi5wdXNoKHsKCQkJCQlpZDogbWFpbHJ1LkhlbHBlckluZGV4Lm1haWx0
b09ic2VydmVyLAoJCQkJCXByaW9yaXR5OiAxMSwKCQkJCQl0aW1lTGltaXQ6IDYw
ICogNjAgKiAyNCAqIDMwLAoJCQkJCXRlc3Q6IGZ1bmN0aW9uIChkZWZlcnJlZCkg
ewoJCQkJCQkvLyBodHRwczovL2ppcmEubWFpbC5ydS9icm93c2UvTUFJTC02ODMw
P2ZvY3VzZWRDb21tZW50SWQ9MjQ5NDc2JnBhZ2U9Y29tLmF0bGFzc2lhbi5qaXJh
LnBsdWdpbi5zeXN0ZW0uaXNzdWV0YWJwYW5lbHM6Y29tbWVudC10YWJwYW5lbCNj
b21tZW50LTI0OTQ3NgoJCQkJCQl2YXIgc3VwcG9ydGVkID0gISQuYnJvd3Nlci5v
cGVyYSAmJiAkLmlzRnVuY3Rpb24obmF2aWdhdG9yLnJlZ2lzdGVyUHJvdG9jb2xI
YW5kbGVyKTsKCQkJCQkJaWYgKHN1cHBvcnRlZCkgewoJCQkJCQkJZGVmZXJyZWQu
cmVzb2x2ZSgpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJZGVmZXJyZWQucmVqZWN0
KCk7CgkJCQkJCX0KCQkJCQl9LAoJCQkJCXJlc29sdmU6IGZ1bmN0aW9uICgpIHsK
CQkJCQkJdmFyIHVybCA9IG1haWxydS5nZXRQYWdlVVJMKCdjb21wb3NlJykgKyAn
P21haWx0bz0lcyc7CgkJCQkJCXRyeSB7CgkJCQkJCQluYXZpZ2F0b3IucmVnaXN0
ZXJQcm90b2NvbEhhbmRsZXIoJ21haWx0bycsIHVybCwgJ01haWwuUnUnKTsKCQkJ
CQkJfSBjYXRjaCAoZSkge30KCQkJCQl9CgkJCQl9KTsKCQkJfQoKCQkJLy8gTUFJ
TC03ODAyCgkJCS8vIFVQRDogTUFJTC04NTY3CgkJCW1haWxydS5CYWxsb29uLnB1
c2goewoJCQkJaWQ6IG1haWxydS5IZWxwZXJJbmRleC5maWxlc2VhcmNoLAoJCQkJ
c2VsZWN0b3I6IGZ1bmN0aW9uICgpIHsKCQkJCQlyZXR1cm4gJCgnLmRkLWZpbGVz
ZWFyY2gnLCAnI2RkYnV0dG9ucycpLnBhcmVudCgpOwoJCQkJfSwKCQkJCXByaW9y
aXR5OiA2MCwKCQkJCXRpbWVMaW1pdDogNjAgKiA2MCAqIDI0ICogMTQsCgkJCQly
ZWdUaW1lTGltaXQ6IDYwICogNjAgKiAyNCAqIDE0LAoJCQkJY291bnRlcnM6IHtz
aG93OiA5MjQ0NjEsIGNsb3NlOiA5MjQ0NjF9LCAvLyBuZXcKCQkJCXhjb3VudGVy
czoge3Nob3c6IDg3NDUxMSwgY2xvc2U6IDg3NDUxMX0sIC8vIG9sZAoJCQkJYmFs
bG9vbk9wdGlvbnM6IHsKCQkJCQlvbkluaXQ6IGZ1bmN0aW9uICgpIHsKCQkJCQkJ
dGhpcy4kQmFsbG9vbi5maW5kKHRoaXMuY3NzVEgpLmNzcygnY3Vyc29yJywgJ3Bv
aW50ZXInKS5jbGljayhmdW5jdGlvbiAoKSB7CgkJCQkJCQlsb2NhdGlvbi5ocmVm
ID0gJy9maWxlc2VhcmNoJzsKCQkJCQkJfSk7CgkJCQkJfSwKCQkJCQl3aWR0aDog
MjcwLAoJCQkJCXBvc2l0aW9uWDogJ2xlZnQnLAoJCQkJCW1hcmdpbjogWzIsIC02
XSwKCQkJCQlhYnNvbHV0ZTogZmFsc2UsCgkJCQkJbG9hZEhUTUw6IHRydWUKCQkJ
CX0KCQkJfSk7CgoJCQlpZiggbWFpbHJ1Lmppbm4gJiYgIShKaW5uLmhhc0FjY2Vz
c0RlbmllZCgpIHx8IEppbm4uaGFzUmlnaHQoKSkgKXsKCQkJCW1haWxydS5CYWxs
b29uLnB1c2goewoJCQkJCS8vIE1BSUwtODUyODogTm90aWZpY2F0aW9uIEFQSQoJ
CQkJCWlkOiBtYWlscnUuSGVscGVySW5kZXgubm90aWZpY2F0aW9uQVBJLAoJCQkJ
CXNlbGVjdG9yOiAnI3BvcnRhbC1tZW51X19kcm9wZG93bicsCgkJCQkJZGlzcG9z
YWJsZTogdHJ1ZSwKCQkJCQliYWxsb29uT3B0aW9uczogewoJCQkJCQlvbkluaXQ6
IGZ1bmN0aW9uICgpewoJCQkJCQkJdGhpcy4kQmFsbG9vbi5kZWxlZ2F0ZSgnYScs
ICdjbGljaycsIGZ1bmN0aW9uIChldnQpewoJCQkJCQkJCWV2dC5wcmV2ZW50RGVm
YXVsdCgpOwoJCQkJCQkJCXRoaXMuaGlkZSgpOwoKCQkJCQkJCQltYWlscnUuTm90
aWZ5LmJyb3dzZXJBbGVydCgnbm90aWZpY2F0aW9ucy1hcGknKTsKCQkJCQkJCQlK
aW5uLmFjY2VzcyhmdW5jdGlvbiAoKXsKCQkJCQkJCQkJbWFpbHJ1Lk5vdGlmeS5i
cm93c2VyQWxlcnQoZmFsc2UpOwoJCQkJCQkJCX0pOwoKCQkJCQkJCQkkUigne21h
aWxydX0nKydtYWlscnUuQVBJJywgZnVuY3Rpb24gKCl7CgkJCQkJCQkJCW1haWxy
dS5BUEkucG9zdCgndG9rZW5zJywgZnVuY3Rpb24gKFIpewoJCQkJCQkJCQkJdmFy
IHRva2VuID0gU3RyaW5nKFIuZ2V0Qm9keSgpLnRva2VuKS5zcGxpdCgnOicpOwoK
CQkJCQkJCQkJCW1haWxydS5BamF4KHsKCQkJCQkJCQkJCQl1cmw6ICcvc2V0dGlu
Z3MvYWpheF9zZXR0aW5ncz9hamF4X2NhbGw9MSZmdW5jX25hbWU9c2V0Jm5hbWU9
QnJvd3Nlck5vdGlmaWNhdGlvbiZ2YWw9MScsCgkJCQkJCQkJCQkJdHlwZTogJ0dF
VCcsCgkJCQkJCQkJCQkJZGF0YTogeyBmb3JtX3NpZ246ICB0b2tlblswXSwgZm9y
bV90b2tlbjogdG9rZW5bMV0gfSwKCQkJCQkJCQkJCQlpc1VzZXI6IHRydWUKCQkJ
CQkJCQkJCX0pCgkJCQkJCQkJCX0pOwoJCQkJCQkJCX0pOwoJCQkJCQkJfS5iaW5k
KHRoaXMpKTsKCQkJCQkJfSwKCQkJCQkJd2lkdGg6IDI3MCwKCQkJCQkJb3JpZW50
YXRpb246ICdjZW50ZXInLAoJCQkJCQlwb3NpdGlvblg6ICdsZWZ0JywKCQkJCQkJ
bWFyZ2luOiBbMTQ1LDBdLAoJCQkJCQlsb2FkSFRNTDogdHJ1ZQoJCQkJCX0KCQkJ
CX0pOwoJCQl9CgoJCQlpZiAoIW1haWxydS5Jc0V4dGVybmFsQWNjb3VudCkgewoJ
CQkJLy8gTUFJTC03NzUzLCBNQUlMLTEzNzc2CgkJCQkvLyBtYWlscnUuSGVscGVy
SW5kZXguY29sbGVjdG9yRm9sZGVyTGlzdAoKCQkJCW1haWxydS5CYWxsb29uLnB1
c2goewoJCQkJCS8vIENvbGxlY3RvcgoJCQkJCWlkOiBtYWlscnUuSGVscGVySW5k
ZXguY29sbGVjdG9yLAoJCQkJCXNlbGVjdG9yOiAnI3BvcnRhbC1tZW51X19kcm9w
ZG93bicsCgkJCQkJcHJpb3JpdHk6IDEwLAoJCQkJCWNvdW50ZXJzOiB7CgkJCQkJ
CXNob3c6IDgxNjgzOSwKCQkJCQkJY2xvc2U6IDgxNjg0NgoJCQkJCX0sCgkJCQkJ
ZGlzcG9zYWJsZTogdHJ1ZSwKCQkJCQl0ZXN0OiBmdW5jdGlvbiAoZGVmZXJyZWQp
IHsKCQkJCQkJaWYgKCFtYWlscnUuRnJvbUNvbGxlY3RvciAmJiBtYWlscnUubmV3
cmVnKSB7CgkJCQkJCQlkZWZlcnJlZC5yZXNvbHZlKCk7CgkJCQkJCX0gZWxzZSB7
CgkJCQkJCQlkZWZlcnJlZC5yZWplY3QoKTsKCQkJCQkJfQoJCQkJCX0sCgkJCQkJ
YmFsbG9vbk9wdGlvbnM6IHsKCQkJCQkJb25Jbml0OiBmdW5jdGlvbiAoKSB7CgkJ
CQkJCQkkKCcuanMtaGlkZScsIHRoaXMuJEJhbGxvb24pLmJpbmQoJ2NsaWNrJywg
ZnVuY3Rpb24gKGV2dCkgewoJCQkJCQkJCXRoaXMuX2VIaWRlKCk7CgkJCQkJCQkJ
ZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCQl9LmJpbmQodGhpcykpOwoJCQkJ
CQl9LAoJCQkJCQl3aWR0aDogNDgwLAoJCQkJCQlvcmllbnRhdGlvbjogJ2NlbnRl
cicsCgkJCQkJCXBvc2l0aW9uWDogJ2xlZnQnLAoJCQkJCQltYXJnaW46IFstMjIy
LCAwXSwKCQkJCQkJYWJzb2x1dGU6IGZhbHNlLAoJCQkJCQlsb2FkSFRNTDogdHJ1
ZQoJCQkJCX0KCQkJCX0pOwoKCQkJCW1haWxydS5CYWxsb29uLnB1c2goewoJCQkJ
CS8vIE1BSUwtNzc1MzogQ29sbGVjdG9yIFByb21vCgkJCQkJaWQ6IG1haWxydS5I
ZWxwZXJJbmRleC5jb2xsZWN0b3JQcm9tbywKCQkJCQlzZWxlY3RvcjogJyNwb3J0
YWwtbWVudV9fZHJvcGRvd24nLAoJCQkJCXByaW9yaXR5OiAzMCwKCQkJCQl0aW1l
TGltaXQ6IDYwICogNjAgKiAyNCAqIDMwLAoJCQkJCXJlZ1RpbWVMaW1pdDogNjAg
KiA2MCAqIDI0ICogMzAsCgkJCQkJY291bnRlcnM6IHsKCQkJCQkJc2hvdzogIDEw
MjEwMDUsCgkJCQkJCWNsb3NlOiAxMDIxMDA1CgkJCQkJfSwKCQkJCQl0ZXN0OiBm
dW5jdGlvbiAoZGYpewoJCQkJCQlkZlshbWFpbHJ1LklzQ29ycFVzZXIgJiYgIW1h
aWxydS5CYWxsb29uLmlzQ2xvc2VkKG1haWxydS5IZWxwZXJJbmRleC5jb2xsZWN0
b3IpICYmIG1haWxydS5pc01zZ0xpc3RQYWdlKCkgPyAncmVzb2x2ZScgOiAncmVq
ZWN0J10oKTsKCQkJCQl9LAoJCQkJCWJhbGxvb25PcHRpb25zOiB7CgkJCQkJCW9u
SW5pdDogZnVuY3Rpb24gKCl7CgkJCQkJCQkkKCcuanMtaGlkZScsIHRoaXMuJEJh
bGxvb24pLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKGV2dCkgewoJCQkJCQkJCXRo
aXMuX2VIaWRlKCk7CgkJCQkJCQkJZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJ
CQl9LmJpbmQodGhpcykpOwoJCQkJCQl9LAoJCQkJCQl3aWR0aDogMjQwLAoJCQkJ
CQlvcmllbnRhdGlvbjogJ2JvdHRvbScsCgkJCQkJCXBvc2l0aW9uWDogJ2xlZnQn
LAoJCQkJCQltYXJnaW46IFswLCAwXSwKCQkJCQkJYWJzb2x1dGU6IGZhbHNlLAoJ
CQkJCQlsb2FkSFRNTDogdHJ1ZQoJCQkJCX0KCQkJCX0pOwoJCQl9CgoJCQlpZiAo
bWFpbHJ1WydJc1Nob3dDYWxlbmRhckJhbGxvb24nXSkgewoJCQkJKGZ1bmN0aW9u
ICh0cywgaWQpIHsKCQkJCQlpZiAodHNbaWRdIDwgMTM1Njk4NDAwMCkgewoKCQkJ
CQkJbWFpbHJ1LkhlbHBlclN0YXR1cyAmPSB+KDEgPDwgaWQpOwoKCQkJCQkJbWFp
bHJ1LkJhbGxvb24ucHVzaCh7CgkJCQkJCQkvLyBNQUlMLTEzMjU2CgkJCQkJCQlp
ZDogaWQsCgkJCQkJCQlzZWxlY3RvcjogJyNwb3J0YWwtbWVudV9fZHJvcGRvd24n
LAoJCQkJCQkJcHJpb3JpdHk6IDksCgkJCQkJCQl0aW1lTGltaXQ6IDYwICogNjAg
KiAyNCAqIDMwLAoJCQkJCQkJcmVnVGltZUxpbWl0OiA2MCAqIDYwICogMjQgKiAz
MCwKCQkJCQkJCWNvdW50ZXJzOiB7CgkJCQkJCQkJc2hvdzogIDE0NDQzOTcsCgkJ
CQkJCQkJY2xvc2U6IDE0NDQ0MDMKCQkJCQkJCX0sCgkJCQkJCQliYWxsb29uT3B0
aW9uczogewoJCQkJCQkJCXdpZHRoOiAyNDAsCgkJCQkJCQkJb3JpZW50YXRpb246
ICdjZW50ZXInLAoJCQkJCQkJCXBvc2l0aW9uWDogJ2xlZnQnLAoJCQkJCQkJCW1h
cmdpbjogWy0xMDIsIC0xMF0sCgkJCQkJCQkJYWJzb2x1dGU6IGZhbHNlLAoJCQkJ
CQkJCWxvYWRIVE1MOiB0cnVlCgkJCQkJCQl9CgkJCQkJCX0pOwoJCQkJCX0KCgkJ
CQl9KShtYWlscnUuSGVscGVyVGltZXN0YW1wLCBtYWlscnUuSGVscGVySW5kZXgu
bmVvRGVzaWduKTsKCQkJfQoKCQkJLy8gTUFJTC05OTU1CgkJCWlmIChtYWlscnUu
TXVsdGlBdXRoQmFsbG9vbkVuYWJsZSkgewoJCQkJbWFpbHJ1LkJhbGxvb24ucHVz
aCh7CgkJCQkJaWQ6IG1haWxydS5IZWxwZXJJbmRleC5tdWx0aUF1dGgsCgkJCQkJ
ZXZlbnQ6ICJtdWx0aUF1dGhDbG9zZUNsaWNrIiwKCQkJCQlzZWxlY3RvcjogZnVu
Y3Rpb24gKCkgewoJCQkJCQlyZXR1cm4gJCgnLnctcG9ydGFsLWhlYWRsaW5lX19h
dXRoX19jb2xfbGVmdCcsICcjUEhfYXV0aFZpZXcnKTsKCQkJCQl9LAoJCQkJCXBy
aW9yaXR5OiAxMiwKCQkJCQl0aW1lTGltaXQ6IDYwICogNjAgKiAyNCAqIDE0LAoJ
CQkJCXJlZ1RpbWVMaW1pdDogNjAgKiA2MCAqIDI0ICogMzAsCgkJCQkJY291bnRl
cnM6IHsgc2hvdzogMTE2MTY1OCwgY2xvc2U6IDExNjE2NTggfSwKCQkJCQl0ZXN0
OiBmdW5jdGlvbiAoZGVmZXJyZWQpewoJCQkJCQlpZiAod2luZG93Ll9fUEggJiYg
X19QSC5pc011bHRpQXV0aCgpKSB7CgkJCQkJCQlkZWZlcnJlZC5yZXNvbHZlKCk7
CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlkZWZlcnJlZC5yZWplY3QoKTsKCQkJCQkJ
fQoJCQkJCX0sCgkJCQkJYmFsbG9vbk9wdGlvbnM6IHsKCQkJCQkJb25Jbml0OiBm
dW5jdGlvbiAoKSB7CgkJCQkJCQl0aGlzLiRCYWxsb29uLmNzcygncmlnaHQnLCAx
NTcpLmZpbmQodGhpcy5jc3NUSCkuY3NzKCdjdXJzb3InLCAncG9pbnRlcicpLmNs
aWNrKGZ1bmN0aW9uIChldnQpIHsKCQkJCQkJCQl0aGlzLl9lSGlkZSgpOwoJCQkJ
CQkJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCQkJCWlmICh3aW5kb3cuX19Q
SCAmJiBfX1BILmF1dGhNZW51ICYmIF9fUEguYXV0aE1lbnUuc2hvdykgewoJCQkJ
CQkJCQlfX1BILmF1dGhNZW51LnNob3coKTsKCQkJCQkJCQl9CgkJCQkJCQl9LmJp
bmQodGhpcykpOwoJCQkJCQl9LAoJCQkJCQl3aWR0aDogMjQ4LAoJCQkJCQlvcmll
bnRhdGlvbjogJ2JvdHRvbScsCgkJCQkJCXBvc2l0aW9uWDogJ3JpZ2h0JywKCQkJ
CQkJbWFyZ2luOiBbMCwgMjBdLAoJCQkJCQlhYnNvbHV0ZTogZmFsc2UsCgkJCQkJ
CWxvYWRIVE1MOiB0cnVlCgkJCQkJfQoJCQkJfSk7CgkJCX0KCQl9CgoJCWlmKCAh
bWFpbHJ1LkJhbGxvb24uaXNDbG9zZWQobWFpbHJ1LkhlbHBlckluZGV4Lm11bHRp
QXV0aCkgKSB7CgkJCSQoZnVuY3Rpb24gKCkgewoJCQkJaWYgKHdpbmRvdy5fX1BI
ICYmIF9fUEguaXNNdWx0aUF1dGgoKSkgewoJCQkJCWlmIChfX1BILmF1dGhNZW51
ICYmIF9fUEguYXV0aE1lbnUub25jZSkgewoJCQkJCQlfX1BILmF1dGhNZW51Lm9u
Y2UoJ3Nob3cnLCBmdW5jdGlvbigpIHsKCQkJCQkJCW1haWxydS5CYWxsb29uLm1h
a2VBc0Nsb3NlZChtYWlscnUuSGVscGVySW5kZXgubXVsdGlBdXRoKTsKCQkJCQkJ
fSk7CgkJCQkJfQoJCQkJfQoJCQl9KTsKCQl9CgoJCXZhciBfX21lZGlhSWQgPSBt
YWlscnUuSGVscGVySW5kZXgubWVzc2FnZWxpbmVNZWRpYQoJCQksIF9fbWVkaWFU
aW1lc3RhbXAKCQk7CgoJCXRyeSB7CgkJCWlmKCBtYWlscnUuSGVscGVyU3RhdHVz
ICYgKDEgPDwgX19tZWRpYUlkKSApIHsKCQkJCWlmKCAoX19tZWRpYVRpbWVzdGFt
cCA9IG1haWxydS5IZWxwZXJUaW1lc3RhbXBbX19tZWRpYUlkXSkgJiYgX19tZWRp
YVRpbWVzdGFtcCA8IDEzNTY5ODQwMDAvKituZXcgRGF0ZSgiMDEuMDEuMTMiKSBt
aW51cyB0aHJlZSBsYXN0IHplcm8qLyApIHsKCQkJCQltYWlscnUuSGVscGVyU3Rh
dHVzIF49ICgxIDw8IF9fbWVkaWFJZCk7CgkJCQl9CgkJCQlfX21lZGlhVGltZXN0
YW1wID0gbnVsbDsKCQkJfQoJCX0KCQljYXRjaChlKSB7CgoJCX0KCgkJbWFpbHJ1
LkJhbGxvb24ucHVzaCh7CgkJCWlkOiBfX21lZGlhSWQsCgkJCWV2ZW50OiAnZHJv
cERvd25WaWV3TGlua0NsaWNrLm1zZ2xpc3QnLAoJCQlwcmlvcml0eTogMTIsCgkJ
CXNlbGVjdG9yOiBmdW5jdGlvbiAoKSB7CgkJCQlyZXR1cm4gJCgnLnRvb2xiYXJf
dG9wIC50b29sYmFyX19yaWdodCcsICcjTXNnTGlzdENvbnRlbnQnKTsKCQkJfSwK
CQkJdGltZUxpbWl0OiA2MCAqIDYwICogMjQgKiA3LAoJCQlyZWdUaW1lTGltaXQ6
IDYwICogNjAgKiAyNCAqIDcsCgkJCWJhbGxvb25PcHRpb25zOiB7CgkJCQlvbklu
aXQ6IGZ1bmN0aW9uICgpIHsKCQkJCQl0aGlzLiRCYWxsb29uLmNzcygncmlnaHQn
LCAwKTsKCQkJCX0sCgkJCQlvblNob3c6IGZ1bmN0aW9uICgpIHsKCQkJCQltYWls
cnUucmFkYXIoJ01lc3NhZ2VMaW5lV2l0aEJhbCcsICdiYWxsb29uU2hvdz0xJyk7
CgkJCQl9LAoJCQkJd2lkdGg6IDI3MCwKCQkJCXBvc2l0aW9uWDogJ3JpZ2h0JywK
CQkJCW1hcmdpbjogWzAsIC0zXSwKCQkJCWFic29sdXRlOiBmYWxzZSwKCQkJCWxv
YWRIVE1MOiB0cnVlCgkJCX0KCQl9KTsKCgkJaWYobWFpbHJ1LklzTmV3Q29tcG9z
ZURlc2lnbikgewoJCQkvLyBNQUlMLTEyOTI1CgkJCW1haWxydS5CYWxsb29uLnB1
c2goewoJCQkJLy8gY29tcG9zZSBzZWxlY3QgZmllbGRzIGRyb3Bkb3duCgkJCQlp
ZDogbWFpbHJ1LkhlbHBlckluZGV4LmNvbXBvc2VTZWxlY3RGaWVsZHMsCgkJCQlz
ZWxlY3RvcjogJyNkcm9wZG93bi1zZWxlY3QtZmllbGRzJywKCQkJCWNvdW50ZXJz
OiB7c2hvdzogMTQyMzk4OCwgY2xvc2U6IDE0MjM5OTB9LAoJCQkJcHJpb3JpdHk6
IDEwLAoJCQkJZGlzcG9zYWJsZTogdHJ1ZSwKCQkJCXRlc3Q6IGZ1bmN0aW9uIChk
ZWZlcnJlZCkgewoJCQkJCWlmIChtYWlscnUuaXNDb21wb3NlUGFnZSgpKSB7IC8v
IG9ubHkgb24gY29tcG9zZSBwYWdlCgkJCQkJCWRlZmVycmVkLnJlc29sdmUoKTsK
CQkJCQl9IGVsc2UgewoJCQkJCQlkZWZlcnJlZC5yZWplY3QoKTsKCQkJCQl9CgkJ
CQl9LAoJCQkJYmFsbG9vbk9wdGlvbnM6IHsKCQkJCQlvbkluaXQ6IGZ1bmN0aW9u
ICgpIHsKCQkJCQkJJCgnLmpzLWhpZGUnLCB0aGlzLiRCYWxsb29uKS5iaW5kKCdj
bGljaycsIGZ1bmN0aW9uIChldnQpIHsKCQkJCQkJCXRoaXMuX2VIaWRlKCk7CgkJ
CQkJCQlldnQucHJldmVudERlZmF1bHQoKTsKCQkJCQkJfS5iaW5kKHRoaXMpKTsK
CQkJCQl9LAoJCQkJCXdpZHRoOiAzMDAsCgkJCQkJb3JpZW50YXRpb246ICdib3R0
b20nLAoJCQkJCXBvc2l0aW9uWDogJ2xlZnQnLAoJCQkJCW1hcmdpbjogWzYsIDBd
LAoJCQkJCW9mZnNldDogJ25vbmUnLAoJCQkJCWFic29sdXRlOiB0cnVlLAoJCQkJ
CWxvYWRIVE1MOiB0cnVlCgkJCQl9CgkJCX0pOwoJCX0KCX0KCglpZiAoZGVmaW5l
ZChtYWlscnUuVGVzdEhlbHBlcnNBbGxSZWdUaW1lTGltaXQpKSB7CgkJJC5lYWNo
KG1haWxydS5CYWxsb29uLml0ZW1zLCBmdW5jdGlvbiAoaywgdikgewoJCQl2Lm9w
dGlvbnMucmVnVGltZUxpbWl0ID0gbWFpbHJ1LlRlc3RIZWxwZXJzQWxsUmVnVGlt
ZUxpbWl0OwoJCX0pOwoJfQoKCWlmIChkZWZpbmVkKG1haWxydS5UZXN0SGVscGVy
c0FsbFRpbWVMaW1pdCkpIHsKCQkkLmVhY2gobWFpbHJ1LkJhbGxvb24uaXRlbXMs
IGZ1bmN0aW9uIChrLCB2KSB7CgkJCXYub3B0aW9ucy50aW1lTGltaXQgPSBtYWls
cnUuVGVzdEhlbHBlcnNBbGxUaW1lTGltaXQ7CgkJfSk7Cgl9CgoJJCh3aW5kb3cp
LmJpbmQoJ3Nob3dNZXNzYWdlLnJlYWRtc2cgc2hvdy5tc2dsaXN0JywgZnVuY3Rp
b24gKCkgewoJCW1haWxydS5CYWxsb29uLnJlZHJhdygpOwoJfSk7CgoJanNMb2Fk
ZXIubG9hZGVkKCd7bWFpbHJ1fW1haWxydS5CYWxsb29uJywgMSk7CgovLyBkYXRh
L3J1L2ltYWdlcy9qcy9ydS9tYWlscnUuQmFsbG9vbi5qcyBlbmQKCi8vIGRhdGEv
cnUvaW1hZ2VzL2pzL3J1L21haWxydS5QaG9uZU1hbmFnZXIuanMgc3RhcnQKCgov
LyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvcGx1Z2lucy9MYXllci5qcyBz
dGFydAoKCi8qKgoJICogQGNsYXNzIExheWVyRmFkZQoJICovCglqc0NsYXNzCgku
Y3JlYXRlKCdMYXllckZhZGUnKQoJLmV4dGVuZChqUXVlcnlFdmVudCkKCS5tZXRo
b2RzKHsKCgkJX19jb25zdHJ1Y3Q6IGZ1bmN0aW9uKCkgewoJCQl0aGlzLmhpZGVP
YnNlcnZlciA9IHRoaXMuaGlkZS5iaW5kKHRoaXMpOwoJCQl0aGlzLnJlc2l6ZU9i
c2VydmVyID0gdGhpcy5fcmVzaXplLmJpbmQodGhpcyk7CgkJCXRoaXMuJHdpbmRv
dyA9ICQod2luZG93KTsKCQkJdGhpcy4kZG9jdW1lbnQgPSAkKGRvY3VtZW50KTsK
CQkJdGhpcy4kY29udGFpbmVyID0gJCgnYm9keSwgI1Njcm9sbEJvZHlJbm5lcicp
Lmxhc3QoKTsKCgkJCS8vIENocm9tZSBoYXMgYnVnIHdpdGggZG91YmxlIHJlbW92
aW5nIG92ZXJmbG93OiBoaWRkZW4KCQkJdGhpcy4kd3JhcHBlciA9ICQoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ1Njcm9sbEJvZHknKSB8fCBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQpOwoKCQkJdGhpcy4kZGl2ID0gJCgnPGRpdi8+JykKCQkJCS5j
c3MoewoJCQkJCW9wYWNpdHk6IG1haWxydS5pc0RhcmtQb3B1cCA/IDAuNCA6IDAu
NiwKCQkJCQliYWNrZ3JvdW5kQ29sb3I6IG1haWxydS5pc0RhcmtQb3B1cCA/ICcj
MDAwJyA6ICcjZmZmJywKCQkJCQl3aWR0aDogJzEwMCUnLAoJCQkJCWhlaWdodDog
JzEwMCUnLAoJCQkJCXpJbmRleDogNjUwMDEsCgkJCQkJcG9zaXRpb246IHRoaXMu
X2hhc1Bvc2l0aW9uRml4ZWQoKSA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnLAoJCQkJ
CXRvcDogMCwKCQkJCQlsZWZ0OiAwLAoJCQkJCWRpc3BsYXk6ICdub25lJwoJCQkJ
fSkKCQkJCS5hcHBlbmRUbyh0aGlzLiRjb250YWluZXIpOwoJCX0sCgoJCS8qCgkJ
KiBJU19FTEVNRU5UX1RBR05BTUVfVVBQRVJDQVNFRAoJCSogaHR0cHM6Ly9naXRo
dWIuY29tL2thbmdheC9jZnQKCQkqLwoJCV9oYXNQb3NpdGlvbkZpeGVkOiBmdW5j
dGlvbigpIHsKCQkJdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmJvZHk7CgoJCQlp
ZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAmJiBjb250YWluZXIgJiYgY29udGFp
bmVyLmFwcGVuZENoaWxkICYmIGNvbnRhaW5lci5yZW1vdmVDaGlsZCkgewoJCQkJ
dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCgkJ
CQlpZiAoIWVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KQoJCQkJCXJldHVy
biBudWxsOwoKCQkJCWVsZW1lbnQuaW5uZXJIVE1MID0gJ3gnOwoJCQkJZWxlbWVu
dC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO3RvcDoxMDBweDsnOwoJ
CQkJY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpOwoKCQkJCXZhciBvcmln
aW5hbEhlaWdodCA9IGNvbnRhaW5lci5zdHlsZS5oZWlnaHQsCgkJCQlvcmlnaW5h
bFNjcm9sbFRvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7CgoJCQkJY29udGFpbmVy
LnN0eWxlLmhlaWdodCA9ICczMDAwcHgnOwoJCQkJY29udGFpbmVyLnNjcm9sbFRv
cCA9IDUwMDsKCgkJCQl2YXIgZWxlbWVudFRvcCA9IGVsZW1lbnQuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkudG9wOwoJCQkJY29udGFpbmVyLnN0eWxlLmhlaWdodCA9
IG9yaWdpbmFsSGVpZ2h0OwoKCQkJCXZhciBpc1N1cHBvcnRlZCA9IChlbGVtZW50
VG9wID09PSAxMDApOwoJCQkJY29udGFpbmVyLnJlbW92ZUNoaWxkKGVsZW1lbnQp
OwoJCQkJY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsU2Nyb2xsVG9wOwoK
CQkJCXJldHVybiBpc1N1cHBvcnRlZDsKCQkJfQoJCQlyZXR1cm4gbnVsbDsKCQl9
LAoKCQlfcmVzaXplOiBmdW5jdGlvbigpIHsKCQkJdGhpcy4kZGl2LmhpZGUoKTsK
CQkJdGhpcy5fdXBkYXRlKCk7CgkJCXRoaXMuJGRpdi5zaG93KCk7CgkJfSwKCgkJ
X2dldFBhZ2VHZW9tZXRyeTogZnVuY3Rpb24gKCkgewoJCQlyZXR1cm4gW01hdGgu
bWF4KAoJCQkJKHdpbmRvdy5pbm5lcldpZHRoIHx8IDApICsgKHdpbmRvdy5zY3Jv
bGxNYXhYIHx8IDApLAoJCQkJZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVu
dFdpZHRoIHx8IDAsCgkJCQl0aGlzLiRjb250YWluZXJbMF0uY2xpZW50V2lkdGgg
fHwgMCwKCQkJCXRoaXMuJGNvbnRhaW5lclswXS5zY3JvbGxXaWR0aCB8fCAwCgkJ
CSksIE1hdGgubWF4KAoJCQkJKHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKSArICh3
aW5kb3cuc2Nyb2xsTWF4WSB8fCAwKSwKCQkJCWRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5jbGllbnRIZWlnaHQgfHwgMCwKCQkJCXRoaXMuJGNvbnRhaW5lclswXS5j
bGllbnRIZWlnaHQgfHwgMCwKCQkJCXRoaXMuJGNvbnRhaW5lclswXS5zY3JvbGxI
ZWlnaHQgfHwgMAoJCQkpXTsKCQl9LAoKCQlfdXBkYXRlOiBmdW5jdGlvbigpIHsK
CQkJdmFyIHBhZ2VHZW9tZXRyeSA9IHRoaXMuX2dldFBhZ2VHZW9tZXRyeSgpOwoJ
CQl0aGlzLiRkaXYuY3NzKHtoZWlnaHQ6IHBhZ2VHZW9tZXRyeVsxXX0pOwoJCX0s
CgoJCXNob3c6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCgkJCW9wdGlvbnMgPSBvcHRp
b25zIHx8IHt9OwoKCQkJaWYgKCF0aGlzLnZpc2libGUpIHsKCQkJCXRoaXMudmlz
aWJsZSA9IDE7CgoJCQkJaWYgKG9wdGlvbnMuZmlsbF9mYWRlKSB7CgoJCQkJCXRo
aXMuJGRpdi5jc3MoewoJCQkJCQlvcGFjaXR5OiAxLAoJCQkJCQliYWNrZ3JvdW5k
Q29sb3I6ICcjZmZmJwoJCQkJCX0pOwoKCQkJCX0gZWxzZSB7CgoJCQkJCXRoaXMu
JGRpdi5jc3MoewoJCQkJCQlvcGFjaXR5OiBtYWlscnUuaXNEYXJrUG9wdXAgPyAw
LjQgOiAwLjYsCgkJCQkJCWJhY2tncm91bmRDb2xvcjogbWFpbHJ1LmlzRGFya1Bv
cHVwID8gJyMwMDAnIDogJyNmZmYnCgkJCQkJfSk7CgkJCQl9CgoJCQkJdGhpcy4k
ZGl2LnNob3coKTsKCgkJCQl0aGlzLl91cGRhdGUoKTsKCQkJCXRoaXMuJHdpbmRv
dy5iaW5kKCdyZXNpemUnLCB0aGlzLnJlc2l6ZU9ic2VydmVyKTsKCQkJCXRoaXMu
dHJpZ2dlckhhbmRsZXIoJ3Nob3cnKTsKCgkJCQl0aGlzLnN0eWxlT3ZlcmZsb3cg
PSB0aGlzLiR3cmFwcGVyLmNzcygnb3ZlcmZsb3cnKTsKCQkJCXRoaXMuJHdyYXBw
ZXIuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKTsKCQkJfQoJCX0sCgoJCWhpZGU6
IGZ1bmN0aW9uKCkgewoJCQlpZiAodGhpcy52aXNpYmxlKSB7CgkJCQl0aGlzLnZp
c2libGUgPSAwOwoJCQkJdGhpcy4kZGl2LmhpZGUoKTsKCQkJCXRoaXMuJHdpbmRv
dy51bmJpbmQoJ3Jlc2l6ZScsIHRoaXMucmVzaXplT2JzZXJ2ZXIpOwoJCQkJdGhp
cy50cmlnZ2VySGFuZGxlcignaGlkZScpOwoJCQkJdGhpcy4kd3JhcHBlci5jc3Mo
J292ZXJmbG93JywgdGhpcy5zdHlsZU92ZXJmbG93KTsKCQkJfQoJCX0sCgoJCXVw
ZGF0ZTogZnVuY3Rpb24oKSB7CgkJCXRoaXMuX3VwZGF0ZSgpOwoJCX0KCX0pOwoK
CS8qKgoJICogQGNsYXNzIExheWVyTWFpbkRpdgoJICovCglqc0NsYXNzCgkuY3Jl
YXRlKCdMYXllck1haW5EaXYnKQoJLmV4dGVuZChqUXVlcnlFdmVudCkKCS5tZXRo
b2RzKHsKCQlfX2NvbnN0cnVjdDogZnVuY3Rpb24gKCkgewoJCQl0aGlzLmZhZGUg
PSBMYXllckZhZGUuZ2V0SW5zdGFuY2UoKTsKCgkJCXRoaXMuaGlkZU9ic2VydmVy
ID0gdGhpcy5oaWRlLmJpbmQodGhpcyk7CgkJCXRoaXMucmVzaXplT2JzZXJ2ZXIg
PSB0aGlzLl9yZXNpemUuYmluZCh0aGlzKTsKCQkJdGhpcy5jb250cm9sQ2xpY2tP
YnNlcnZlciA9IHRoaXMuX2NvbnRyb2xDbGljay5iaW5kKHRoaXMpOwoKCQkJdGhp
cy4kd2luZG93ID0gJCh3aW5kb3cpOwoJCQl0aGlzLiRkb2N1bWVudCA9ICQoZG9j
dW1lbnQpOwoJCQl0aGlzLiRkaXYgPSAkKCcjTWFpbFJ1Q29uZmlybScpOwoJCQl0
aGlzLiRpbm5lckRpdiA9ICQoJy5hbGVydERpdlNwYW4sLmpzLWxheWVyJywgdGhp
cy4kZGl2KTsKCQkJdGhpcy4kY2xvc2UgPSAkKCcuaURlbEJpZywuanMtY2FuY2Vs
JywgdGhpcy4kZGl2KS5iaW5kKCdjbGljaycsIHRoaXMuY29udHJvbENsaWNrT2Jz
ZXJ2ZXIpOwoKCQkJaWYgKCQuYnJvd3Nlci5tc2llICYmIHBhcnNlSW50KCQuYnJv
d3Nlci52ZXJzaW9uKSA8IDgpIHsKCQkJCXRoaXMuJGlGcmFtZSA9ICQoJzxpZnJh
bWUgZnJhbWVib3JkZXI9IjAiIHRhYmluZGV4PSItMSIgY2xhc3M9InBBYnMgdG9w
MCBsZWZ0MCBkQjIiIHN0eWxlPSJ6LWluZGV4Oi0xOyIgc3JjPSJqYXZhc2NyaXB0
OjA7Ii8+JykuYXBwZW5kVG8odGhpcy4kZGl2KTsKCQkJfQoKCQkJdGhpcy5mYWRl
LmJpbmQoewoJCQkJaGlkZTogdGhpcy5oaWRlT2JzZXJ2ZXIKCQkJfSk7CgoJCQl0
aGlzLmVuYWJsZUhpZGUoKTsKCQl9LAoKCQlfcmVzaXplOiBmdW5jdGlvbigpIHsK
CQkJdGhpcy5fdXBkYXRlKCk7CgkJCXRoaXMudHJpZ2dlckhhbmRsZXIoJ3Jlc2l6
ZScpOwoJCX0sCgoJCV91cGRhdGU6IGZ1bmN0aW9uICgpIHsKCQkJLy8gTUFJTC0x
NjM5MwoJCQl2YXIgc2Nyb2xsVG9wID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnU2Nyb2xsQm9keScpIHx8IHdpbmRvdykuc2Nyb2xsVG9wKCk7CgkJCXZhciB5
ID0gKCQod2luZG93KS5oZWlnaHQoKSAtIHRoaXMuJGRpdi5oZWlnaHQoKSkgLyAz
ICsgc2Nyb2xsVG9wOwoKCQkJdGhpcy4kZGl2LmNzcygndG9wJywgeSk7CgoJCQlp
ZiAodGhpcy4kaUZyYW1lKSB7CgkJCQl2YXIgcG9zaXRpb24gPSB0aGlzLiRpbm5l
ckRpdi5wb3NpdGlvbigpOwoJCQkJdmFyIGlubmVyID0gdGhpcy4kaW5uZXJEaXZb
MF07CgoJCQkJdGhpcy4kaUZyYW1lLmNzcyh7CgkJCQkJd2lkdGg6ICBpbm5lci5v
ZmZzZXRXaWR0aCwKCQkJCQloZWlnaHQ6IGlubmVyLm9mZnNldEhlaWdodCwKCQkJ
CQlsZWZ0OiAgIHBvc2l0aW9uLmxlZnQKCQkJCX0pOwoJCQl9CgkJfSwKCgkJX2Nv
bnRyb2xDbGljazogZnVuY3Rpb24gKGV2dCkgewoJCQl0aGlzLnRyaWdnZXJIYW5k
bGVyKCdjb250cm9sQ2xpY2snKTsKCQkJdGhpcy5oaWRlKCk7CgkJfSwKCgkJc2hv
dzogZnVuY3Rpb24gKG9wdGlvbnMpIHsKCgkJCW9wdGlvbnMgPSBvcHRpb25zIHx8
IHt9OwoKCQkJaWYgKCF0aGlzLnZpc2libGUpIHsKCQkJCXRoaXMudmlzaWJsZSA9
IDE7CgkJCQl0aGlzLiRkaXYucmVtb3ZlUG9zaXRpb25GaXhlZCgpLnJlbW92ZUF0
dHIoJ3N0eWxlJykuc2hvdygpOwoJCQkJaWYgKHRoaXMuJGlGcmFtZSkgdGhpcy4k
aUZyYW1lLnNob3coKTsKCQkJCXRoaXMuZmFkZS5zaG93KG9wdGlvbnMpOwoJCQkJ
dGhpcy5fdXBkYXRlKCk7CgkJCQl0aGlzLiR3aW5kb3cuYmluZCgncmVzaXplJywg
dGhpcy5yZXNpemVPYnNlcnZlcik7CgkJCQl0aGlzLnRyaWdnZXJIYW5kbGVyKCdz
aG93Jyk7CgkJCX0KCQkJcmV0dXJuIHRoaXM7CgkJfSwKCgkJaGlkZTogZnVuY3Rp
b24gKCkgewoJCQlpZiAodGhpcy52aXNpYmxlICYmICF0aGlzLmZpeCkgewoJCQkJ
dGhpcy52aXNpYmxlID0gMDsKCQkJCWlmICh0aGlzLiRpRnJhbWUpIHRoaXMuJGlG
cmFtZS5oaWRlKCk7CgkJCQl0aGlzLiRkaXYuaGlkZSgpOwoJCQkJdGhpcy5mYWRl
LmhpZGUoKTsKCQkJCXRoaXMuJHdpbmRvdy51bmJpbmQoJ3Jlc2l6ZScsIHRoaXMu
cmVzaXplT2JzZXJ2ZXIpOwoJCQkJdGhpcy50cmlnZ2VySGFuZGxlcignaGlkZScp
OwoJCQl9CgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWRpc2FibGVIaWRlOiBmdW5j
dGlvbiAoKSB7CgkJCXRoaXMuZml4ID0gMTsKCQkJdGhpcy4kY2xvc2UuaGlkZSgp
OwoJCQkkLmhvdGtleXMub2ZmKCdlc2MnLCB0aGlzLmhpZGVPYnNlcnZlcik7CgkJ
CXJldHVybiB0aGlzOwoJCX0sCgoJCWVuYWJsZUhpZGU6IGZ1bmN0aW9uICgpIHsK
CQkJdGhpcy5maXggPSAwOwoJCQl0aGlzLiRjbG9zZS5zaG93KCk7CgkJCSQuaG90
a2V5cy5vbignZXNjJywgdGhpcy5oaWRlT2JzZXJ2ZXIpOwoJCQlyZXR1cm4gdGhp
czsKCQl9Cgl9KTsKCgkvKioKCSAqIEBjbGFzcyBMYXllcgoJICovCglqc0NsYXNz
CgkuY3JlYXRlKCdMYXllcicpCgkuZXh0ZW5kKGpRdWVyeUV2ZW50KQoJLnN0YXRp
Y3MoewoJCSdwcmVmaXgnOiBmdW5jdGlvbihuYW1lKSB7CgkJCXJldHVybiAnaXMt
JyArIG5hbWU7CgkJfSwKCgkJJ2Nzc0NsYXNzJzogZnVuY3Rpb24obmFtZSkgewoJ
CQlyZXR1cm4gJy4nICsgTGF5ZXIucHJlZml4KG5hbWUpICsgJ19pbic7CgkJfSwK
CgkJJ2lzRXh0ZXJuYWwnOiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIExheWVyLm9w
dGlvbnMgJiYgTGF5ZXIub3B0aW9ucy50eXBlID09ICdleHRlcm5hbCc7CgkJfSwK
CgkJJ2dldCc6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgb3B0aW9ucykgewoJ
CQl0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKCQkJdmFyIG1haW5EaXYg
PSBMYXllck1haW5EaXYuZ2V0SW5zdGFuY2UoKSwgcHJlZml4ID0gTGF5ZXIucHJl
Zml4KG5hbWUpOwoKCQkJdmFyICRsYXllciA9ICQoTGF5ZXIuY3NzQ2xhc3MobmFt
ZSkgKyAnOmZpcnN0JywgbWFpbkRpdi4kZGl2KTsKCgkJCWlmICh0aGlzLm9wdGlv
bnMuaXNSZWZyZXNoKSB7CgkJCQlpZiAoJGxheWVyLmxlbmd0aCkgewoJCQkJCSRs
YXllci5yZW1vdmUoKTsKCQkJCX0KCQkJfQoKCQkJaWYgKCF0aGlzLm9wdGlvbnMu
aXNSZWZyZXNoICYmICRsYXllci5sZW5ndGgpIHsKCQkJCWNhbGxiYWNrKG5ldyBM
YXllcihwcmVmaXgpKTsKCQkJfSBlbHNlIHsKCQkJCW1haWxydS5BamF4KHsKCQkJ
CQl1cmw6ICcvY2dpLWJpbi9sc3RhdGljP2dldD1sYXllciZuYW1lPScgKyBuYW1l
LAoJCQkJCXR5cGU6ICdHRVQnLAoJCQkJCWRhdGFUeXBlOiAndGV4dCcsCgkJCQkJ
ZGF0YTogJC5leHRlbmQoCgkJCQkJCXsKCQkJCQkJCUVuYWJsZUNoYW5nZUFNTGFu
ZzogbWFpbHJ1LkVuYWJsZUNoYW5nZUFNTGFuZywKCQkJCQkJCUVuYWJsZUNoYW5n
ZUVTTGFuZzogbWFpbHJ1LkVuYWJsZUNoYW5nZUVTTGFuZywKCQkJCQkJCUVuYWJs
ZUNoYW5nZUtaTGFuZzogbWFpbHJ1LkVuYWJsZUNoYW5nZUtaTGFuZywKCQkJCQkJ
CUVuYWJsZUNoYW5nZUVuZ2xpc2hMYW5nOiBtYWlscnUuRW5hYmxlQ2hhbmdlRW5n
bGlzaExhbmcsCgkJCQkJCQlFbmFibGVDaGFuZ2VCWUxhbmc6IG1haWxydS5FbmFi
bGVDaGFuZ2VCWUxhbmcsCgkJCQkJCQlOZXdNdWx0aUF1dGhMYXllckxvZ2ljOiBt
YWlscnUuTmV3TXVsdGlBdXRoTGF5ZXJMb2dpYywKCQkJCQkJCUhUVFBfUFJPVE9D
T0w6IGxvY2F0aW9uLnByb3RvY29sLAoJCQkJCQkJbGFuZzogbWFpbHJ1LkxBTkcs
CgkJCQkJCQlTaW5nbGVEb21haW5OYW1lOiBtYWlscnUuU2luZ2xlRG9tYWluTmFt
ZQoJCQkJCQl9LAoKCQkJCQkJdGhpcy5vcHRpb25zLnBhcmFtcwoJCQkJCSksCgoJ
CQkJCWNvbXBsZXRlOiBmdW5jdGlvbiAoUmVzdWx0KSB7CgkJCQkJCWlmIChSZXN1
bHQuaXNPSygpKSB7CgkJCQkJCQltYWluRGl2LiRpbm5lckRpdi5hcHBlbmQoUmVz
dWx0LmdldERhdGEoKSk7CgkJCQkJCQljYWxsYmFjayhuZXcgTGF5ZXIocHJlZml4
KSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9KTsKCQkJfQoJCX0sCgoJCSdzZXQnOiBm
dW5jdGlvbihuYW1lLCBub2RlKSB7CgkJCXZhciBtYWluRGl2ID0gTGF5ZXJNYWlu
RGl2LmdldEluc3RhbmNlKCksIHByZWZpeCA9IExheWVyLnByZWZpeChuYW1lKTsK
CgkJCWlmICgkKExheWVyLmNzc0NsYXNzKG5hbWUpICsgJzpmaXJzdCcsIG1haW5E
aXYuJGRpdikubGVuZ3RoKSB7CgkJCQkkKExheWVyLmNzc0NsYXNzKG5hbWUpLCBt
YWluRGl2LiRkaXYpLnJlcGxhY2VXaXRoKG5vZGUpOwoKCQkJfSBlbHNlIHsKCQkJ
CSQobWFpbkRpdi4kaW5uZXJEaXYpLmFwcGVuZChub2RlKTsKCQkJfQoJCX0KCX0p
CgkubWV0aG9kcyh7CgoJCV9fY29uc3RydWN0OiBmdW5jdGlvbiAodHlwZSwgY2Fs
bGJhY2spIHsKCgkJCXRoaXMubWFpbkRpdiA9IExheWVyTWFpbkRpdi5nZXRJbnN0
YW5jZSgpOwoKCQkJdGhpcy5oaWRlT2JzZXJ2ZXIgPSB0aGlzLmhpZGUuYmluZCh0
aGlzKTsKCQkJdGhpcy5jb250cm9sQ2xpY2tPYnNlcnZlciA9IHRoaXMuX2NvbnRy
b2xDbGljay5iaW5kKHRoaXMpOwoKCQkJdGhpcy50eXBlID0gdHlwZTsKCQkJdGhp
cy5mdW5jID0gY2FsbGJhY2sgfHwgJC5ub29wOwoKCQkJdGhpcy4kZGl2ID0gJCgn
LicgKyB0aGlzLnR5cGUgKyAnX2luOmZpcnN0JywgdGhpcy5tYWluRGl2LiRkaXYp
OwoKCQkJJCgnLmNvbmZpcm0tb2ssLmNvbmZpcm0tY2FuY2VsJywgdGhpcy4kZGl2
KS51bmJpbmQoJy5sYXllcicpLmJpbmQoJ2NsaWNrLmxheWVyJywgdGhpcy5jb250
cm9sQ2xpY2tPYnNlcnZlcik7CgoJCQl0aGlzLm1haW5EaXYuYmluZCh7CgkJCQlj
b250cm9sQ2xpY2s6IHRoaXMuY29udHJvbENsaWNrT2JzZXJ2ZXIsCgkJCQloaWRl
OiB0aGlzLmhpZGVPYnNlcnZlcgoJCQl9KTsKCgkJCXRoaXMuJGRpdlt0aGlzLiRk
aXYuaXMoJ2Zvcm0nKSA/ICdGJyA6ICdmaW5kJ10oJ2Zvcm0nKS51bmJpbmQoJy5s
YXllcicpLmJpbmQoJ3N1Ym1pdC5sYXllcicsIGZ1bmN0aW9uICgpIHsKCQkJCXZh
ciByID0gdGhpcy5fZXhlY0Z1bmModHJ1ZSk7CgkJCQlpZiAoKHIgIT09IDEpICYm
IChyICE9PSBmYWxzZSkpIHsKCQkJCQl0aGlzLmhpZGUoKTsKCQkJCX0KCQkJCXJl
dHVybiBmYWxzZTsKCQkJfS5iaW5kKHRoaXMpKTsKCQkJdGhpcy4kZGl2LmZpbmQo
Jy5mb3JtX19zZWxlY3QnKS5mb3JtX19zZWxlY3QoKTsKCgkJCXRoaXMubW9kcyA9
IHRoaXMuJGRpdi5hdHRyKCdjbGFzcycpLnJlcGxhY2UodGhpcy50eXBlKydfaW4n
LCAnJykuc3BsaXQoL1xzLyk7CgkJfSwKCgkJX2NvbnRyb2xDbGljazogZnVuY3Rp
b24gKGV2dCkgewoJCQl2YXIgJHRhcmdldCA9ICQoZXZ0LnRhcmdldCksIHN0YXR1
cyA9IG51bGw7CgkJCWlmIChldnQudGFyZ2V0Lm5vZGVUeXBlKSB7CgkJCQlzdGF0
dXMgPSAkdGFyZ2V0LmlzKCcuY29uZmlybS1vaycpOwoJCQl9CgkJCXZhciByID0g
dGhpcy5fZXhlY0Z1bmMoc3RhdHVzKTsKCQkJaWYgKChyICE9PSAxKSAmJiAociAh
PT0gZmFsc2UpKSB7CgkJCQl0aGlzLmhpZGUoKTsKCQkJfQoJCQlldnQucHJldmVu
dERlZmF1bHQoKTsKCQl9LAoKCQlfZXhlY0Z1bmM6IGZ1bmN0aW9uIChzdGF0dXMp
IHsKCQkJdmFyIHIgPSB0aGlzLmZ1bmMuY2FsbCh0aGlzLCBzdGF0dXMpOwoJCQl0
aGlzLnRyaWdnZXJIYW5kbGVyKCdjYWxsYmFjaycsIFtzdGF0dXNdKTsKCQkJcmV0
dXJuIHI7CgkJfSwKCgkJdG9nZ2xlTW9kczogZnVuY3Rpb24oc3RhdGUpIHsKCQkJ
T2JqZWN0LmZvckVhY2godGhpcy5tb2RzLCBmdW5jdGlvbihtb2QpIHsKCQkJCXRo
aXMubWFpbkRpdi4kaW5uZXJEaXYudG9nZ2xlQ2xhc3MobW9kLCBzdGF0ZSk7CgkJ
CQl0aGlzLiRkaXYudG9nZ2xlQ2xhc3MobW9kLCAhc3RhdGUpOwoJCQl9LCB0aGlz
KTsKCQl9LAoKCQlfdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKHN0YXRlKSB7CgkJCXZh
ciBjbGFzc05hbWUgPSBudWxsOwoKCQkJaWYgKExheWVyLm9wdGlvbnMgJiYgKGNs
YXNzTmFtZSA9IExheWVyLm9wdGlvbnMuY2xhc3NOYW1lKSkgewoJCQkJdGhpcy5t
YWluRGl2LiRpbm5lckRpdltzdGF0ZSA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xh
c3MnXShjbGFzc05hbWUpOwoJCQl9CgkJfSwKCgkJc2hvdzogZnVuY3Rpb24gKG9w
dGlvbnMpIHsKCQkJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgoJCQlpZiAoTGF5
ZXIucHJldikKCQkJCUxheWVyLnByZXYuaGlkZSgpOwoKCQkJTGF5ZXIucHJldiA9
IHRoaXM7CgoJCQlpZiAoIXRoaXMudmlzaWJsZSkgewoJCQkJaWYgKExheWVyLmlz
RXh0ZXJuYWwoKSkgewoJCQkJCXRoaXMubWFpbkRpdi4kaW5uZXJEaXYuYWRkQ2xh
c3MoJ3BvcHVwX2V4dGVybmFsJyk7CgkJCQl9CgoJCQkJdGhpcy50b2dnbGVNb2Rz
KHRydWUpOwoJCQkJdGhpcy5oaWRlQWxsRXJyb3JzKCk7CgkJCQl0aGlzLnZpc2li
bGUgPSAxOwoJCQkJdGhpcy4kZGl2LnJlbW92ZUNsYXNzKCdkTicpLnNob3coKTsK
CQkJCXRoaXMubWFpbkRpdi5zaG93KG9wdGlvbnMpOwoJCQkJJCgnOmlucHV0OnZp
c2libGU6Zmlyc3QnLCB0aGlzLiRkaXYpLmZvY3VzKCk7CgkJCQl0aGlzLl90b2dn
bGVDbGFzcyh0cnVlKTsKCQkJCXRoaXMudHJpZ2dlckhhbmRsZXIoJ3Nob3cnKTsK
CgkJCQlpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5jb21wbGV0ZSA9PSAn
ZnVuY3Rpb24nKSB7CgkJCQkJb3B0aW9ucy5jb21wbGV0ZSh0aGlzKTsKCQkJCX0K
CQkJfQoKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCgkJaGlkZTogZnVuY3Rpb24gKG9w
dGlvbnMpIHsKCQkJaWYgKHRoaXMudmlzaWJsZSAmJiAhdGhpcy5maXgpIHsKCQkJ
CWlmIChMYXllci5pc0V4dGVybmFsKCkpIHsKCQkJCQl0aGlzLm1haW5EaXYuJGlu
bmVyRGl2LnJlbW92ZUNsYXNzKCdwb3B1cF9leHRlcm5hbCcpOwoJCQkJfQoKCQkJ
CXRoaXMudG9nZ2xlTW9kcyhmYWxzZSk7CgkJCQl0aGlzLnZpc2libGUgPSAwOwoJ
CQkJdGhpcy4kZGl2LmhpZGUoKTsKCQkJCXRoaXMubWFpbkRpdi5oaWRlKCk7CgkJ
CQl0aGlzLl90b2dnbGVDbGFzcyhmYWxzZSk7CgkJCQl0aGlzLnRyaWdnZXJIYW5k
bGVyKCdoaWRlJyk7CgoJCQkJaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMu
Y29tcGxldGUgPT0gJ2Z1bmN0aW9uJykgewoJCQkJCW9wdGlvbnMuY29tcGxldGUo
dGhpcyk7CgkJCQl9CgkJCX0KCgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWRpc2Fi
bGVIaWRlOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZml4ID0gMTsKCQkJdGhpcy5t
YWluRGl2LmRpc2FibGVIaWRlKCk7CgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWVu
YWJsZUhpZGU6IGZ1bmN0aW9uICgpIHsKCQkJdGhpcy5maXggPSAwOwoJCQl0aGlz
Lm1haW5EaXYuZW5hYmxlSGlkZSgpOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoKCQlz
aG93RXJyb3I6IGZ1bmN0aW9uKHRleHQpIHsKCQkJdHJ5IHsKCQkJCSQoJy5qcy1m
b3JtRXJyb3InLCB0aGlzLiRkaXYpCgkJCQkJLmh0bWwodGV4dCkKCQkJCQkuc2hv
dygpOwoJCQl9IGNhdGNoKGUpIHsKCQkJCWFsZXJ0KHRleHQpOwoJCQl9CgkJfSwK
CgkJaGlkZUVycm9yOiBmdW5jdGlvbiAoKSB7CgkJCSQoJy5qcy1mb3JtRXJyb3In
LCB0aGlzLiRkaXYpLmhpZGUoKTsKCQl9LAoKCQloaWRlQWxsRXJyb3JzOiBmdW5j
dGlvbiAoKSB7CgkJCXRoaXMuaGlkZUVycm9yKCk7CgkJCXRoaXMuJGRpdi5maW5k
KCcuZm9ybV9fZmllbGQnKS5yZW1vdmVDbGFzcygnZm9ybV9fZmllbGRfZXJyb3In
KTsKCQkJdGhpcy4kZGl2LmZpbmQoJy5mb3JtX19zcGluYm94X19maWVsZCcpLnJl
bW92ZUNsYXNzKCdmb3JtX19zcGluYm94X19maWVsZF9lcnJvcicpOwoJCQl0aGlz
LiRkaXYuZmluZCgnLmZvcm1fX3NlbGVjdCcpLnJlbW92ZUNsYXNzKCdmb3JtX19z
ZWxlY3RfZXJyb3InKTsKCQkJdGhpcy4kZGl2LmZpbmQoJy5mb3JtX19tZXNzYWdl
JykuZW1wdHkoKTsKCQl9LAoKCQlzaXplQ2hhbmdlZDogZnVuY3Rpb24oKSB7CgkJ
CXZhciBmYWRlID0gTGF5ZXJGYWRlLmdldEluc3RhbmNlKCk7CgkJCWZhZGUudXBk
YXRlKCk7CgkJfQoJfSk7CgoJanNMb2FkZXIubG9hZGVkKCd7cGx1Z2luc31MYXll
cicsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvanNDb3JlL3BsdWdpbnMv
TGF5ZXIuanMgZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvcGx1
Z2lucy9mb3JtYXRQaG9uZS5qcyBzdGFydAoKLyoqCiAqIEBvYmplY3QgICBmb3Jt
YXRQaG9uZQogKiBAZGVzY3JpcHRpb24gSW50ZXJhY3RpdmUgcGhvbmUgZm9ybWF0
dGluZyBhY2NvcmRpbmcgdG8gMDAwIDAwMC0wMC0wMAogKiBAcmVxdWlyZXMge2Z1
bmN0aW9ufSAkLmZuLmZvcm1hdFBob25lCiAqIEBhdXRob3IgICBBYmFzaGtpbiBB
bGV4YW5kZXIgPGEuYWJhc2hraW5AY29ycC5tYWlsLnJ1PgogKiBAZGF0ZSAgICAg
MTkuMDkuMjAxMgogKi8KCgooZnVuY3Rpb24oJCkKCXsKCQlqc0NsYXNzCgoJCS5j
cmVhdGUoJ2Zvcm1hdFBob25lJykKCgkJLm1ldGhvZHMoewoJCQkvKioKCQkJICog
QHB1YmxpYwoJCQkgKiBAcGFyYW0ge09iamVjdH0gaW5wdXQgLSBET00gZWxlbWVu
dAoJCQkgKiBAcGFyYW0ge051bWJlcn0gc3VidHJhY3QgLSBzdWJ0cmFjdCB0aGUg
bnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBhIHBob25lIG51bWJlcgoJCQkgKiBA
dGhpcyAge09iamVjdH0gZm9ybWF0UGhvbmUKCQkJICogSU1QT1JUQU5UOiBEbyBu
b3QgaW50ZXJjaGFuZ2UgbGluZXMgaW4gdGhlIGNvbnN0cnVjdG9yIQoJCQkqLwoJ
CQlfX2NvbnN0cnVjdDogZnVuY3Rpb24gKGlucHV0LCBzdWJ0cmFjdCkKCQkJewoJ
CQkJdGhpcy52YWx1ZSA9IGlucHV0LnZhbHVlOwoJCQkJdGhpcy5zdWJ0cmFjdCA9
IHN1YnRyYWN0OwoKCQkJCXZhciBmaXJzdCA9ICdeXFxkeycgKyB0aGlzLmF0KDMp
ICsgJ30nLAoKCQkJCS8vIFNldCB0aGUgdmFsdWUncyBsZW5ndGgKCQkJCWxlbmd0
aCA9IHRoaXMuZXJhc2UoKS5sZW5ndGg7CgoJCQkJLy8gVGV4dCBzZWxlY3Rpb24K
CQkJCWlmICh0aGlzLnNlbGVjdGVkKGlucHV0KSkKCQkJCQlyZXR1cm4gMDsKCgkJ
CQkvLyBBbGwgZmluZSwgY29udGludWUKCQkJCWlmIChSZWdFeHAoZmlyc3QgKyAn
XFxzXFxkezN9XFwtXFxkezJ9XFwtXFxkezJ9JCcpLnRlc3QodGhpcy52YWx1ZSkp
CgkJCQkJcmV0dXJuIDA7CgoJCQkJaWYgKGxlbmd0aCA8PSB0aGlzLmF0KDEwKSkK
CQkJCXsKCQkJCQkvLyBGb3JtYXR0aW5nCgkJCQkJaWYgKGxlbmd0aCA+PSB0aGlz
LmF0KDQpICYmIFJlZ0V4cChmaXJzdCkudGVzdCh0aGlzLnZhbHVlKSkKCQkJCQkJ
aW5wdXQudmFsdWUgPSB0aGlzLnJlcGxhY2UoZmlyc3QsICckJiAnLCAxKTsKCgkJ
CQkJaWYgKGxlbmd0aCA+PSB0aGlzLmF0KDcpKQoJCQkJCXsKCQkJCQkJaWYgKFJl
Z0V4cChmaXJzdCArICdcXHNcXGR7M30nKS50ZXN0KHRoaXMudmFsdWUpKQoJCQkJ
CQkJaW5wdXQudmFsdWUgPSB0aGlzLnJlcGxhY2UoZmlyc3QgKyAnXFxzXFxkezN9
JywgJyQmLScpOwoKCQkJCQkJZWxzZSBpZiAobGVuZ3RoIDw9IHRoaXMuYXQoMTAp
KQoJCQkJCQkJaW5wdXQudmFsdWUgPSB0aGlzLnJlcGxhY2UoJygnICsgZmlyc3Qg
KyAnKShcXGR7M30pKFxcZHsyfSknLCAnJDEgJDItJDMtJyk7CgoJCQkJCQllbHNl
CgkJCQkJCQl0aGlzLmNsZWFuKGlucHV0KTsKCQkJCQl9CgoJCQkJCS8vIFJlbW92
ZSBkZWxpbWl0ZXJzCgkJCQkJdmFyIGRlbGltaXRlciA9IGlucHV0LnZhbHVlLm1h
dGNoKC9cLS9nKTsKCgkJCQkJaWYgKGRlbGltaXRlciAmJiBkZWxpbWl0ZXIubGVu
Z3RoID4gMikKCQkJCQkJdGhpcy5jbGVhbihpbnB1dCk7CgoJCQkJCWlmIChsZW5n
dGggPT0gdGhpcy5hdCgxMCkpCgkJCQkJewoJCQkJCQkvLyBUaGUgZmluYWwgZm9y
bWF0dGluZwoJCQkJCQlpbnB1dC52YWx1ZSA9IHRoaXMuZXJhc2UoKQoJCQkJCQkJ
LnJlcGxhY2UoUmVnRXhwKCdeXFxkeycgKyB0aGlzLmF0KDMpICsgJ30nKSwgICck
JiAnKSAvLyAwMDAKCQkJCQkJCS5yZXBsYWNlKC9ccyhcZHszfSkvLCAnJCYtJykg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDAwIDAwMC0KCQkJCQkJCS5yZXBs
YWNlKC9cLVxkezJ9LywgICAnJCYtJykgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gMDAwIDAwMC0wMC0KCQkJCQl9CgkJCQl9CgoJCQkJLy8gMDAwIDAwMC0wMC0w
MDAuLi4gLT4gMDAwMDAwMDAwMC4uLgoJCQkJZWxzZSBpZiAoL1xEL2cudGVzdCh0
aGlzLnZhbHVlKSkKCQkJCQlpbnB1dC52YWx1ZSA9IHRoaXMuZXJhc2UoKTsKCgkJ
CQkvLyBCYWNrc3BhY2UKCQkJCWlmICh0aGlzLmxhc3QoJy0nKSB8fCB0aGlzLmxh
c3QoJyAnKSkKCQkJCQlpbnB1dC52YWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoMCwg
LTEpOwoJCQl9LAoKCQkJLyoqCgkJCSAqIEBwcml2YXRlCgkJCSAqIEBkZXNjcmlw
dGlvbiBHZXQgcG9zaXRpb24gYnkgY291bnRyeQoJCQkgKiBAcGFyYW0ge051bWJl
cn0gaW5kZXgKCQkJICogQHJldHVybnMge051bWJlcn0KCQkJKi8KCQkJYXQ6IGZ1
bmN0aW9uKGluZGV4KQoJCQl7CgkJCQlyZXR1cm4gaW5kZXggLSAodGhpcy5zdWJ0
cmFjdCB8IDApOwoJCQl9LAoKCQkJLyoqCgkJCSAqIEBwcml2YXRlCgkJCSAqIEBk
ZXNjcmlwdGlvbiBFcmFzZXMgYWxsIG5vbi1kaWdpdCBjaGFyYWN0ZXJzCgkJCSAq
IEByZXR1cm5zIHtTdHJpbmd9CgkJCSovCgkJCWVyYXNlOiBmdW5jdGlvbigpIHsK
CQkJCXJldHVybiB0aGlzLnZhbHVlLnJlcGxhY2UoL1xEL2csICcnKTsKCQkJfSwK
CgkJCS8qKgoJCQkgKiBAcHJpdmF0ZQoJCQkgKiBAZGVzY3JpcHRpb24gUmVwbGFj
ZSBzcGVjaWZpZWQgY2hhcmFjdGVycwoJCQkgKiBAcGFyYW0ge1N0cmluZ30gZXhw
cmVzc2lvbiAtIFJlZ3VsYXIgZXhwcmVzc2lvbgoJCQkgKiBAcGFyYW0ge1N0cmlu
Z30gaXRlbQoJCQkgKiBAcGFyYW0ge051bWJlcn0gdHlwZQoJCQkgKiBAcmV0dXJu
cyB7U3RyaW5nfQoJCQkqLwoJCQlyZXBsYWNlOiBmdW5jdGlvbihleHByZXNzaW9u
LCBpdGVtLCB0eXBlKQoJCQl7CgkJCQl2YXIgdHlwZSA9IFtbL1wtKy8sICctJ10s
IFsvXHMrLywgJyAnXV1bdHlwZSB8fCAwXTsKCgkJCQlyZXR1cm4gdGhpcy52YWx1
ZQoJCQkJCS5yZXBsYWNlKFJlZ0V4cChleHByZXNzaW9uKSwgaXRlbSkKCQkJCQku
cmVwbGFjZSh0eXBlWzBdLCB0eXBlWzFdKTsKCQkJfSwKCgkJCS8qKgoJCQkgKiBA
cHJpdmF0ZQoJCQkgKiBAZGVzY3JpcHRpb24gR2V0dGluZyB0aGUgbGFzdCBjaGFy
YWN0ZXJzCgkJCSAqIEBwYXJhbSB7Kn0gaXRlbQoJCQkgKiBAcmV0dXJucyB7Qm9v
bGVhbn0KCQkJKi8KCQkJbGFzdDogZnVuY3Rpb24oaXRlbSkKCQkJewoJCQkJcmV0
dXJuIHRoaXMudmFsdWUuY2hhckF0KHRoaXMudmFsdWUubGVuZ3RoIC0gMSkgPT0g
aXRlbTsKCQkJfSwKCgkJCS8qKgoJCQkgKiBAcHJpdmF0ZQoJCQkgKiBAZGVzY3Jp
cHRpb24gQ2xlYW4gdGhlIHZhbHVlCgkJCSAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1
dCAtIERPTSBlbGVtZW50CgkJCSovCgkJCWNsZWFuOiBmdW5jdGlvbihpbnB1dCkg
ewoJCQkJaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlLnJlcGxhY2UoL1tcc1wtXS9n
LCAnJyk7CgkJCX0sCgoJCQkvKioKCQkJICogQHByaXZhdGUKCQkJICogQGRlc2Ny
aXB0aW9uIERldGVjdCB0ZXh0IHNlbGVjdGlvbgoJCQkgKiBAbmFtZSBzZWxlY3Rl
ZAoJCQkgKiBAcGFyYW0ge09iamVjdH0gaW5wdXQgLSBET00gZWxlbWVudAoJCQkg
KiBAcmV0dXJucyB7Qm9vbGVhbn0KCQkJKi8KCQkJc2VsZWN0ZWQ6IGZ1bmN0aW9u
KGlucHV0KQoJCQl7CgkJCQlpZiAoIWlucHV0KQoJCQkJCXJldHVybiAtMTsKCgkJ
CQl2YXIgc2VsZWN0aW9uID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQ7CgoJCQkJaWYg
KHR5cGVvZiBzZWxlY3Rpb24gPT0gJ251bWJlcicpCgkJCQkJcmV0dXJuIHNlbGVj
dGlvbiAhPSBpbnB1dC5zZWxlY3Rpb25FbmQ7CgoJCQkJZWxzZSBpZiAodHlwZW9m
IChzZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24pICE9ICd1bmRlZmluZWQn
KSB7CgkJCQkJaW5wdXQuZm9jdXMoKTsKCQkJCQlyZXR1cm4gc2VsZWN0aW9uLmNy
ZWF0ZVJhbmdlKCkudGV4dDsKCQkJCX0KCQkJfQoJCX0pOwoKCQkvKioKCQkgKiBA
ZnVuY3Rpb24gJC5mbi5mb3JtYXRQaG9uZQoJCSAqIEBzZWUgZm9ybWF0UGhvbmUK
CQkgKiBAcmVxdWlyZXMge09iamVjdH0gZm9ybWF0UGhvbmUKCQkgKiBAcmV0dXJu
IHtPYmplY3R9IEpRdWVyeSBvYmplY3QKCQkgKiBAcGFyYW0ge09iamVjdH0gZXZl
bnQgLSBET00gZXZlbnQKCQkgKiBAcGFyYW0ge051bWJlcn0gc3VidHJhY3QgLSBz
dWJ0cmFjdCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBhIHBob25lIG51
bWJlcgoJCSAqIEBhdXRob3IgQWJhc2hraW4gQWxleGFuZGVyIDxhLmFiYXNoa2lu
QGNvcnAubWFpbC5ydT4KCQkgKiBAZGF0ZSAxOS4wOS4yMDEyCgkJKi8KCQkkLmZu
LmZvcm1hdFBob25lID0gZnVuY3Rpb24gKGV2ZW50LCBzdWJ0cmFjdCwgb3B0aW9u
cykKCQl7CgkJCXZhciB3aGljaCA9IGV2ZW50LndoaWNoLAoJCQkJaW5wdXQgPSB0
aGlzWzBdOwoKCQkJLy8gPHRoaXM+IG11c3QgYmUgRE9NLW9iamVjdCB3aXRoIHZh
bHVlIHByb3BlcnR5CgkJCWlmICghaW5wdXQgfHwgdHlwZW9mIGV2ZW50ICE9PSAn
b2JqZWN0JyB8fCB0eXBlb2Ygc3VidHJhY3QgIT09ICdudW1iZXInKQoJCQkJcmV0
dXJuIHRoaXM7CgoJCQkvLyBBbGxvd3MgdG8gdXNlIHRoZSA8IHwgPgoJCQlpZiAo
ZXZlbnQudHlwZSA9PSAna2V5dXAnICYmICh3aGljaCA9PSAzNyB8fCB3aGljaCA9
PSAzOSkpCgkJCQlyZXR1cm4gdGhpczsKCgkJCW5ldyBmb3JtYXRQaG9uZShpbnB1
dCwgc3VidHJhY3QpOwoKCQkJcmV0dXJuIHRoaXM7CgkJfTsKCgl9KShqUXVlcnkp
OwoKCWpzTG9hZGVyLmxvYWRlZCgne3BsdWdpbnN9Zm9ybWF0UGhvbmUnLCAxKTsK
Ci8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9wbHVnaW5zL2Zvcm1hdFBo
b25lLmpzIGVuZAoKKGZ1bmN0aW9uKCQpIHsKCgkJLyoqCgkJICogQGNsYXNzIG1h
aWxydS5QaG9uZU1hbmFnZXIKCQkgKi8KCQlqc0NsYXNzCgkJLmNyZWF0ZSgnbWFp
bHJ1LlBob25lTWFuYWdlcicpCgkJLmV4dGVuZChqUXVlcnlFdmVudCkKCQkubWV0
aG9kcyh7CgoJCQlfX2NvbnN0cnVjdDogZnVuY3Rpb24ob3B0aW9ucykgewoJCQkJ
dmFyIHQgPSB0aGlzOwoJCQkJdC5vcHRpb25zID0ge307CgkJCQl0LmRhdGEgPSB7
fTsKCQkJCXQueGhycyA9IHt9OwoJCQkJdC5sYXllcnMgPSB7fTsKCQkJCXQucHJl
dkxheWVyID0gbnVsbDsKCQkJCXQuc2V0T3B0aW9ucyhvcHRpb25zKTsKCQkJfSwK
CgkJCV9jcmVhdGVMYXllcl9zaW5nU01TOiBmdW5jdGlvbigpIHsKCQkJCXZhciB0
ID0gdGhpczsKCQkJCXZhciBsYXllciA9IG5ldyBMYXllcignaXMtc2lnbnVwc21z
JywgJC5wcm94eSh0Ll9zaWdudXBTbXNDYWxsYmFjaywgdCkpOwoKCQkJCWxheWVy
LmJpbmQoJ3Nob3cnLCBmdW5jdGlvbigpIHsKCQkJCQkkKCdpbnB1dFtuYW1lPSJj
b2RlIl0nLCB0aGlzLiRkaXYpLnZhbCgnJyk7CgkJCQl9KTsKCgkJCQkkKCdhLm5v
c21zbGluazpmaXJzdCcsIGxheWVyLiRkaXYpCgkJCQkJLmJpbmQoJ2NsaWNrJywg
JC5wcm94eSh0Ll9nZXRTTVNTdGF0dXNMaW5rQ2xpY2ssIHQpKTsKCQkJCXJldHVy
biBsYXllcjsKCQkJfSwKCgkJCV9jcmVhdGVMYXllcl9hZGRQYXNzd29yZFF1ZXN0
aW9uOiBmdW5jdGlvbihjYWxsYmFjaykgewoJCQkJTGF5ZXIuZ2V0KCdhZGRQYXNz
d29yZFF1ZXN0aW9uJywgZnVuY3Rpb24gKGxheWVyKSB7CgkJCQkJbGF5ZXIuZnVu
YyA9ICQucHJveHkodGhpcy5fYWRkUGFzc3dvcmRRdWVzdGlvbkNhbGxiYWNrLCB0
aGlzKTsKCQkJCQlsYXllci5vbmUoJ3Nob3cnLCBmdW5jdGlvbigpIHsKCQkJCQkJ
dmFyICRmb3JtID0gJCgnZm9ybScsIGxheWVyLiRkaXYpOwoJCQkJCQkkKCcuanMt
ZXJyb3InLCAkZm9ybSkuaGlkZSgpOwoJCQkJCQl2YXIgJHBhc3N3b3JkUXVlc3Rp
b25TZWxlY3QgPSAkKCcuanMtcGFzc3dvcmRRdWVzdGlvbicsICRmb3JtKTsKCQkJ
CQkJdmFyICRwYXNzd29yZEN1c3RvbVF1ZXN0aW9uQ29udGFpbmVyID0gJCgnLmpz
LXBhc3N3b3JkQ3VzdG9tUXVlc3Rpb25Db250YWluZXInLCAkZm9ybSk7CgkJCQkJ
CSRwYXNzd29yZFF1ZXN0aW9uU2VsZWN0LmNoYW5nZShmdW5jdGlvbiAoKSB7CgkJ
CQkJCQkkcGFzc3dvcmRDdXN0b21RdWVzdGlvbkNvbnRhaW5lci50b2dnbGUoJHBh
c3N3b3JkUXVlc3Rpb25TZWxlY3QudmFsKCkgPT0gJ0N1c3RvbScpOwoJCQkJCQl9
KTsKCQkJCQl9KTsKCQkJCQljYWxsYmFjayhsYXllcik7CgkJCQl9LmJpbmQodGhp
cykpOwoJCQl9LAoKCQkJX2NyZWF0ZUxheWVyX3ZlcmlmeVNvbWVQaG9uZVNpbmdT
TVM6IGZ1bmN0aW9uKCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdmFyIGxheWVy
ID0gbmV3IExheWVyKCdpcy1zaWdudXBzbXMnLCAkLnByb3h5KHQuX3ZlcmlmeVNv
bWVQaG9uZVNpbmdTbXNDYWxsYmFjaywgdCkpOwoKCQkJCWxheWVyLmJpbmQoJ3No
b3cnLCBmdW5jdGlvbigpIHsKCQkJCQkkKCdpbnB1dFtuYW1lPSJjb2RlIl0nLCB0
aGlzLiRkaXYpLnZhbCgnJyk7CgkJCQl9KTsKCgkJCQkkKCdhLm5vc21zbGluazpm
aXJzdCcsIGxheWVyLiRkaXYpCgkJCQkJLmJpbmQoJ2NsaWNrJywgJC5wcm94eSh0
Ll9nZXRTTVNTdGF0dXNMaW5rQ2xpY2ssIHQpKTsKCQkJCXJldHVybiBsYXllcjsK
CQkJfSwKCgkJCV9jcmVhdGVMYXllcl9zZWxlY3RWZXJpZnlTb21lUGhvbmU6IGZ1
bmN0aW9uKCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdmFyIGxheWVyID0gbmV3
IExheWVyKCdpcy1zZWxlY3RWZXJpZnlTb21lUGhvbmUnLCAkLnByb3h5KHQuX3Nl
bGVjdFZlcmlmeVNvbWVQaG9uZUNhbGxiYWNrLCB0KSk7CgoJCQkJbGF5ZXIuYmlu
ZCgnc2hvdycsIGZ1bmN0aW9uKCkgewoJCQkJCXZhciB0ID0gdGhpczsKCQkJCQl2
YXIgJGVycm9yID0gJCgnLmpzLWVycm9yJywgdC4kZGl2KTsKCQkJCQkkZXJyb3Iu
aGlkZSgpOwoJCQkJfSk7CgoJCQkJJCgnLmpzLWNvZGVpc3NldCcsIGxheWVyLiRk
aXYpCgkJCQkJLmJpbmQoJ2NsaWNrJywgJC5wcm94eShmdW5jdGlvbiAoZXZ0KSB7
CgkJCQkJCXZhciBsYXllciA9IHRoaXMuX2dldExheWVyKCdzZWxlY3RWZXJpZnlT
b21lUGhvbmUnKTsKCQkJCQkJdmFyICRwaG9uZVNlbGVjdCA9ICQoJy5qcy1waG9u
ZScsIGxheWVyLiRkaXYpOwoJCQkJCQl2YXIgcGhvbmUgPSAkcGhvbmVTZWxlY3Qu
dmFsKCk7CgkJCQkJCXRoaXMuZGF0YSA9IHsKCQkJCQkJCSdwaG9uZWNvZGUnOiAn
JywKCQkJCQkJCSdwaG9uZSc6IHBob25lCgkJCQkJCX07CgkJCQkJCXRoaXMuX3Zl
cmlmeVNvbWVQaG9uZUNvZGVJc3NldExpbmtDbGljayhldnQpOwoJCQkJCX0sIHQp
KTsKCgkJCQkkKCcuanMtYWRkUGhvbmUnLCBsYXllci4kZGl2KQoJCQkJCS5iaW5k
KCdjbGljaycsICQucHJveHkoZnVuY3Rpb24gKGV2dCkgewoJCQkJCQl0aGlzLl92
ZXJpZnlTb21lUGhvbmVBZGRQaG9uZUxpbmtDbGljayhldnQpOwoJCQkJCX0sIHQp
KTsKCgkJCQlyZXR1cm4gbGF5ZXI7CgkJCX0sCgoJCQlfY3JlYXRlTGF5ZXJfYWRk
UGhvbmU6IGZ1bmN0aW9uKCkKCQkJewoJCQkJdmFyIHQgPSB0aGlzLCBvID0gdC5v
cHRpb25zOwoJCQkJdmFyIGxheWVyID0gbmV3IExheWVyKCdpcy1uZXdwaG9uZTEn
LCAkLnByb3h5KHQuX2FkZFBob25lQ2FsbGJhY2ssIHQpKTsKCgkJCQlpZiAodC5v
cHRpb25zLnBhc3NjaGVjaykgewoJCQkJCSQoJ2lucHV0W25hbWU9ImlzbW9iaWxl
Il0nLCB0LiRkaXYpLnBhcmVudCgpLmNoaWxkcmVuKCkuaGlkZSgpOwoJCQkJfQoK
CQkJCWxheWVyLmJpbmQoJ3Nob3cnLCBmdW5jdGlvbigpIHsKCQkJCQl2YXIgdCA9
IHRoaXM7CgkJCQkJdmFyICRwaG9uZSA9ICQoJ2lucHV0W25hbWU9InBob25lIl0n
LCB0LiRkaXYpOwoJCQkJCXZhciAkaXNtb2JpbGUgPSAkKCdpbnB1dFtuYW1lPSJp
c21vYmlsZSJdJywgdC4kZGl2KTsKCQkJCQl2YXIgJHN1Ym1pdCA9ICQoJy5jb25m
aXJtLW9rJywgdC4kZGl2KTsKCQkJCQl2YXIgJHBob25lQ29kZVNlbGVjdCA9ICQo
J3NlbGVjdFtuYW1lPSJwaG9uZWNvZGUiXScsIHQuJGRpdik7CgkJCQkJdmFyICRj
aGlsZHMgPSAkcGhvbmVDb2RlU2VsZWN0LmNoaWxkcmVuKCk7CgoJCQkJCSQoJy5q
cy1kZWZhdWx0VGV4dCwuanMtZWRpdHBhc3NUZXh0JywgdC4kZGl2KS5oaWRlKCkK
CQkJCQkJLmZpbHRlcihvLnVzZXIuaXNEaXNhYmxlZCA/ICcuanMtZWRpdHBhc3NU
ZXh0JyA6ICcuanMtZGVmYXVsdFRleHQnKS5zaG93KCk7CgoJCQkJCSRpc21vYmls
ZS5hdHRyKCdjaGVja2VkJywgJ2NoZWNrZWQnKTsKCQkJCQkkcGhvbmUudmFsKCcn
KTsKCgkJCQkJaWYgKCRjaGlsZHMubGVuZ3RoKQoJCQkJCQkkcGhvbmVDb2RlU2Vs
ZWN0LnZhbCgkY2hpbGRzLmZpcnN0KCkudmFsKCkpLmNoYW5nZSgpOwoKCQkJCQlp
ZiAoJGlzbW9iaWxlLmlzKCc6Y2hlY2tlZCcpKQoJCQkJCQkkc3VibWl0LmZvcm1f
X2Rpc2FibGUoKTsKCQkJCX0pCgkJCQkub25lKCdzaG93JywgZnVuY3Rpb24oKSB7
CgkJCQkJdmFyIHQgPSB0aGlzOwoKCQkJCQlmdW5jdGlvbiBhcHBseUNvdW50cnlM
aXN0KCkgewoJCQkJCQl2YXIgdCA9IHRoaXM7CgkJCQkJCXZhciAkcHJlZml4ID0g
JCgnLmpzLXBob25lUHJlZml4LCAucGhvbmVQcmVmaXgnLCB0LiRkaXYpOwoJCQkJ
CQl2YXIgJHBob25lQ29kZVNlbGVjdCA9ICQoJ3NlbGVjdFtuYW1lPSJwaG9uZWNv
ZGUiXScsIHQuJGRpdikuZW1wdHkoKTsKCQkJCQkJdmFyICRwaG9uZSA9ICQoJ2lu
cHV0W25hbWU9InBob25lIl0nLCB0LiRkaXYpOwoJCQkJCQl2YXIgY291bnRyeURh
dGEgPSB7fTsKCgkJCQkJCSQuZWFjaCh3aW5kb3cuQ291bnRyeUxpc3QsIGZ1bmN0
aW9uKGtleSwgY291bnRyeSkgewoJCQkJCQkJJCgnPG9wdGlvbi8+JykuYXR0cign
dmFsdWUnLCBjb3VudHJ5LkNvZGUpLmNzcygnZm9udFdlaWdodCcsIGtleSA8IDQg
PyAnYm9sZCcgOiAnJykudGV4dChjb3VudHJ5LkNvdW50cnkpLmFwcGVuZFRvKCRw
aG9uZUNvZGVTZWxlY3QpOwoJCQkJCQkJY291bnRyeURhdGFbY291bnRyeS5Db2Rl
XSA9IGNvdW50cnk7CgkJCQkJCX0pOwoKCQkJCQkJJHBob25lQ29kZVNlbGVjdC5i
aW5kKCdjaGFuZ2UnLCB7J2NvdW50cnlEYXRhJzogY291bnRyeURhdGEsICdwcmVm
aXgnOiAkcHJlZml4LCAncGhvbmUnOiAkcGhvbmUsICdzZWxlY3QnOiAkcGhvbmVD
b2RlU2VsZWN0fSwgZnVuY3Rpb24oZXZ0KSB7CgoJCQkJCQkJdmFyICRzZWxlY3Qg
PSBldnQuZGF0YS5zZWxlY3Q7CgkJCQkJCQl2YXIgJHByZWZpeCA9IGV2dC5kYXRh
LnByZWZpeDsKCQkJCQkJCXZhciAkcGhvbmUgPSBldnQuZGF0YS5waG9uZTsKCQkJ
CQkJCXZhciBjb3VudHJ5RGF0YSA9IGV2dC5kYXRhLmNvdW50cnlEYXRhOwoJCQkJ
CQkJdmFyIGNvdW50cnkgPSBjb3VudHJ5RGF0YVskc2VsZWN0LnZhbCgpXTsKCQkJ
CQkJCSRwcmVmaXguY3NzKCdiYWNrZ3JvdW5kSW1hZ2UnLCAndXJsKCInICsgY291
bnRyeS5JY29uICsgJyIpJykudGV4dCgnKycgKyBjb3VudHJ5LkNvZGUpLnNob3co
KTsKCQkJCQkJCXQuY291bnRyeUNvZGUgPSBjb3VudHJ5LkNvZGU7CgoJCQkJCQkJ
dmFyIHAgPSAkcHJlZml4WzBdLm9mZnNldFdpZHRoICsgMTA7CgoJCQkJCQkJJHBo
b25lLmNzcyh7CgkJCQkJCQkJcGFkZGluZ0xlZnQ6IHAgICArICdweCcsCgkJCQkJ
CQkJd2lkdGg6ICgxNTggLSBwKSArICdweCcKCQkJCQkJCX0pOwoKCQkJCQkJfSku
Y2hhbmdlKCk7CgkJCQkJfQoKCQkJCQlpZiAod2luZG93LkNvdW50cnlMaXN0KSB7
CgkJCQkJCWFwcGx5Q291bnRyeUxpc3QuY2FsbCh0KTsKCQkJCQl9IGVsc2UgewoJ
CQkJCQkkLmFqYXgoewoJCQkJCQkJdXJsOiAnL2NnaS1iaW4vbHN0YXRpYycsCgkJ
CQkJCQlkYXRhOiB7CgkJCQkJCQkJZ2V0OiAgJ2NvdW50cmllcy1saXN0JywKCQkJ
CQkJCQlybmQ6ICBqc0NvcmUuYnVpbGQsCgkJCQkJCQkJbGFuZzogbWFpbHJ1LkxB
TkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljRG9tYWlu
TmFtZTogbWFpbHJ1LnN0YXRpY0RvbWFpbk5hbWUKCQkJCQkJCX0sCgkJCQkJCQlk
YXRhVHlwZTogJ3NjcmlwdCcsCgkJCQkJCQljYWNoZTogdHJ1ZSwKCQkJCQkJCWNv
bnRleHQ6IHQsCgkJCQkJCQlzdWNjZXNzOiBhcHBseUNvdW50cnlMaXN0CgkJCQkJ
CX0pOwoJCQkJCX0KCQkJCX0pCgkJCQkub25lKCdzaG93JywgZnVuY3Rpb24oKSB7
CgkJCQkJdmFyIHQgPSB0aGlzOwoJCQkJCXZhciAkcGhvbmUgPSAkKCdpbnB1dFtu
YW1lPSJwaG9uZSJdJywgdC4kZGl2KTsKCQkJCQl2YXIgJGlzbW9iaWxlID0gJCgn
aW5wdXRbbmFtZT0iaXNtb2JpbGUiXScsIHQuJGRpdik7CgoJCQkJCWZ1bmN0aW9u
IGxpdmVWYWxpZGF0ZShldmVudCkKCQkJCQl7CgkJCQkJCXZhciB0ID0gdGhpczsK
CQkJCQkJdmFyICRwaG9uZSA9ICQoJ2lucHV0W25hbWU9InBob25lIl0nLCB0LiRk
aXYpOwoJCQkJCQl2YXIgJGVycm9yID0gJCgnZGl2LnJlZDpmaXJzdCwgLmpzLWVy
cm9yJywgdC4kZGl2KTsKCQkJCQkJdmFyICRpc21vYmlsZSA9ICQoJ2lucHV0W25h
bWU9ImlzbW9iaWxlIl0nLCB0LiRkaXYpOwoJCQkJCQl2YXIgJHN1Ym1pdCA9ICQo
Jy5jb25maXJtLW9rJywgdC4kZGl2KTsKCQkJCQkJdmFyIHZhbHVlID0gJHBob25l
LnZhbCgpOwoJCQkJCQl2YXIgcHJlcGFyZVZhbHVlID0gdmFsdWUucmVwbGFjZSgv
W1woXClcLVwrXHNdL2csICIiKTsKCQkJCQkJdmFyIGVycm9yID0gJyc7CgkJCQkJ
CXZhciBjb3JyZWN0ID0gdHJ1ZTsKCQkJCQkJdmFyIHZhbGlkID0gdHJ1ZTsKCgkJ
CQkJCS8vIEZvcm1hdHRpbmcgdGhlIHBob25lIG51bWJlcgoJCQkJCQlzd2l0Y2gg
KHQuY291bnRyeUNvZGUpCgkJCQkJCXsKCQkJCQkJCWNhc2UgJzcnOgoJCQkJCQkJ
CSRwaG9uZS5mb3JtYXRQaG9uZShldmVudCwgMCk7CgkJCQkJCQlicmVhazsKCQkJ
CQkJCWNhc2UgJzM4MCc6CgkJCQkJCQkJJHBob25lLmZvcm1hdFBob25lKGV2ZW50
LCAxKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgoJCQkJCQlpZiAoJGlzbW9iaWxl
LmlzKCc6Y2hlY2tlZCcpKQoJCQkJCQl7CgkJCQkJCQlpZiAocHJlcGFyZVZhbHVl
Lmxlbmd0aCA9PSAwKSB7CgkJCQkJCQkJdmFsaWQgPSBmYWxzZTsKCQkJCQkJCQll
cnJvciA9IExhbmcuZ2V0KCdyZWcucGhvbmVfY29kZV9pbnZhbGlkJyk7CgkJCQkJ
CQl9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA8IDMpIHsKCQkJCQkJCQl2YWxpZCA9
IGZhbHNlOwoJCQkJCQkJCWVycm9yID0gTGFuZy5nZXQoJ3JlZy5waG9uZV9jb2Rl
X2luY29ycmVjdCcpOwoJCQkJCQkJfSBlbHNlIGlmICgvW15cKFwpXC1cK1xzMC05
XS8udGVzdCh2YWx1ZSkpIHsKCQkJCQkJCQljb3JyZWN0ID0gdmFsaWQgPSBmYWxz
ZTsKCQkJCQkJCQllcnJvciA9IExhbmcuZ2V0KCdyZWcucGhvbmVfc3VtYm9sX2lu
dmFsaWQnKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCWlm
IChwcmVwYXJlVmFsdWUubGVuZ3RoID09IDApIHsKCQkJCQkJCQl2YWxpZCA9IGZh
bHNlOwoJCQkJCQkJCWVycm9yID0gTGFuZy5nZXQoJ3JlZy5waG9uZV9jb2RlX2lu
dmFsaWQnKTsKCQkJCQkJCX0gZWxzZSBpZiAocHJlcGFyZVZhbHVlLmxlbmd0aCA8
IDUgfHwgcHJlcGFyZVZhbHVlLmxlbmd0aCA+IDMyIHx8IHZhbHVlLmxlbmd0aCA+
IDUwKSB7CgkJCQkJCQkJdmFsaWQgPSBmYWxzZTsKCQkJCQkJCQllcnJvciA9IExh
bmcuZ2V0KCdyZWcucGhvbmVfY29kZV9pbmNvcnJlY3QnKTsKCQkJCQkJCX0gZWxz
ZSBpZiAoIS9eXGQrJC8udGVzdChwcmVwYXJlVmFsdWUpKSB7CgkJCQkJCQkJY29y
cmVjdCA9IHZhbGlkID0gZmFsc2U7CgkJCQkJCQkJZXJyb3IgPSBMYW5nLmdldCgn
cmVnLnBob25lX3N1bWJvbF9pbnZhbGlkJyk7CgkJCQkJCQl9CgkJCQkJCX0KCgkJ
CQkJCWlmIChjb3JyZWN0KSB7CgkJCQkJCQkkZXJyb3IuaGlkZSgpOwoJCQkJCQl9
IGVsc2UgewoJCQkJCQkJJGVycm9yLmh0bWwoZXJyb3IpLnNob3coKTsKCQkJCQkJ
fQoKCQkJCQkJaWYgKHZhbGlkKSB7CgkJCQkJCQkkc3VibWl0LmZvcm1fX2VuYWJs
ZSgpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHN1Ym1pdC5mb3JtX19kaXNhYmxl
KCk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCWZ1bmN0aW9uIHBvc3RWYWxpZGF0ZSgp
IHsKCQkJCQkJdmFyIHQgPSB0aGlzOwoJCQkJCQl2YXIgJHBob25lID0gJCgnaW5w
dXRbbmFtZT0icGhvbmUiXScsIHQuJGRpdik7CgkJCQkJCXZhciAkZXJyb3IgPSAk
KCdkaXYucmVkOmZpcnN0LCAuanMtZXJyb3InLCB0LiRkaXYpOwoJCQkJCQl2YXIg
JGlzbW9iaWxlID0gJCgnaW5wdXRbbmFtZT0iaXNtb2JpbGUiXScsIHQuJGRpdik7
CgkJCQkJCXZhciAkc3VibWl0ID0gJCgnLmNvbmZpcm0tb2snLCB0LiRkaXYpOwoJ
CQkJCQl2YXIgdmFsdWUgPSAkLnRyaW0oJHBob25lLnZhbCgpKTsKCQkJCQkJdmFy
IHByZXBhcmVWYWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1tcKFwpXC1cK1xzXS9nLCAi
Iik7CgkJCQkJCXZhciBlcnJvciA9ICcnOwoJCQkJCQl2YXIgY29ycmVjdCA9IHRy
dWU7CgkJCQkJCXZhciB2YWxpZCA9IHRydWU7CgoJCQkJCQlpZiAoJGlzbW9iaWxl
LmlzKCc6Y2hlY2tlZCcpKSB7CgkJCQkJCQlpZiAocHJlcGFyZVZhbHVlLmxlbmd0
aCA9PSAwKSB7CgkJCQkJCQkJdmFsaWQgPSBmYWxzZTsKCQkJCQkJCQllcnJvciA9
IExhbmcuZ2V0KCdyZWcucGhvbmVfY29kZV9pbnZhbGlkJyk7CgkJCQkJCQl9IGVs
c2UgaWYgKHZhbHVlLmxlbmd0aCA8IDMpIHsKCQkJCQkJCQljb3JyZWN0ID0gdmFs
aWQgPSBmYWxzZTsKCQkJCQkJCQllcnJvciA9IExhbmcuZ2V0KCdyZWcucGhvbmVf
Y29kZV9pbmNvcnJlY3QnKTsKCQkJCQkJCX0gZWxzZSBpZiAoL1teXChcKVwtXCtc
czAtOV0vLnRlc3QodmFsdWUpKSB7CgkJCQkJCQkJY29ycmVjdCA9IHZhbGlkID0g
ZmFsc2U7CgkJCQkJCQkJZXJyb3IgPSBMYW5nLmdldCgncmVnLnBob25lX3N1bWJv
bF9pbnZhbGlkJyk7CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlpZiAo
cHJlcGFyZVZhbHVlLmxlbmd0aCA9PSAwKSB7CgkJCQkJCQkJdmFsaWQgPSBmYWxz
ZTsKCQkJCQkJCQllcnJvciA9IExhbmcuZ2V0KCdyZWcucGhvbmVfY29kZV9pbnZh
bGlkJyk7CgkJCQkJCQl9IGVsc2UgaWYgKHByZXBhcmVWYWx1ZS5sZW5ndGggPCA1
IHx8IHByZXBhcmVWYWx1ZS5sZW5ndGggPiAzMiB8fCB2YWx1ZS5sZW5ndGggPiA1
MCkgewoJCQkJCQkJCWNvcnJlY3QgPSB2YWxpZCA9IGZhbHNlOwoJCQkJCQkJCWVy
cm9yID0gTGFuZy5nZXQoJ3JlZy5waG9uZV9jb2RlX2luY29ycmVjdCcpOwoJCQkJ
CQkJfSBlbHNlIGlmICghL15cZCskLy50ZXN0KHByZXBhcmVWYWx1ZSkpIHsKCQkJ
CQkJCQljb3JyZWN0ID0gdmFsaWQgPSBmYWxzZTsKCQkJCQkJCQllcnJvciA9IExh
bmcuZ2V0KCdyZWcucGhvbmVfc3VtYm9sX2ludmFsaWQnKTsKCQkJCQkJCX0KCQkJ
CQkJfQoKCQkJCQkJaWYgKGNvcnJlY3QpIHsKCQkJCQkJCSRlcnJvci5oaWRlKCk7
CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkZXJyb3IuaHRtbChlcnJvcikuc2hvdygp
OwoJCQkJCQl9CgoJCQkJCQlpZiAodmFsaWQpIHsKCQkJCQkJCSRzdWJtaXQuZm9y
bV9fZW5hYmxlKCk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkc3VibWl0LmZvcm1f
X2Rpc2FibGUoKTsKCQkJCQkJfQoJCQkJCX0KCgkJCQkJJHBob25lLmJpbmQoewoJ
CQkJCQkna2V5dXAnOiAkLnByb3h5KGxpdmVWYWxpZGF0ZSwgdCksCgkJCQkJCSdi
bHVyJzogJC5wcm94eShmdW5jdGlvbigpIHsKCQkJCQkJCXNldFRpbWVvdXQoJC5w
cm94eShwb3N0VmFsaWRhdGUsIHRoaXMpLCAxMDApOwoJCQkJCQl9LCB0KQoJCQkJ
CX0pOwoKCQkJCQkkaXNtb2JpbGUuYmluZCgnY2xpY2snLCAkLnByb3h5KGxpdmVW
YWxpZGF0ZSwgdCkpOwoJCQkJfSk7CgoJCQkJcmV0dXJuIGxheWVyOwoJCQl9LAoK
CQkJX2NyZWF0ZUxheWVyX3NpZ251cFBob25lOiBmdW5jdGlvbigpIHsKCQkJCXZh
ciB0ID0gdGhpczsKCQkJCXZhciBsYXllciA9IG5ldyBMYXllcignaXMtc2lnbnVw
cGhvbmUxJywgJC5wcm94eSh0Ll9zaWdudXBQaG9uZUNhbGxiYWNrLCB0KSk7CgoJ
CQkJbGF5ZXIuYmluZCgnc2hvdycsIGZ1bmN0aW9uKCkgewoJCQkJCXZhciB0ID0g
dGhpczsKCQkJCQl2YXIgJHBob25lID0gJCgnaW5wdXRbbmFtZT0icGhvbmUiXScs
IHQuJGRpdik7CgkJCQkJdmFyICRpc21vYmlsZSA9ICQoJ2lucHV0W25hbWU9Imlz
bW9iaWxlIl0nLCB0LiRkaXYpOwoJCQkJCXZhciAkc3VibWl0ID0gJCgnLmNvbmZp
cm0tb2snLCB0LiRkaXYpOwoJCQkJCXZhciAkcGhvbmVDb2RlU2VsZWN0ID0gJCgn
c2VsZWN0W25hbWU9InBob25lY29kZSJdJywgdC4kZGl2KTsKCQkJCQl2YXIgJGNo
aWxkcyA9ICRwaG9uZUNvZGVTZWxlY3QuY2hpbGRyZW4oKTsKCQkJCQl2YXIgJGVy
cm9yID0gJCgnZGl2LnJlZDpmaXJzdCwgLmpzLWVycm9yJywgdC4kZGl2KTsKCgkJ
CQkJJGVycm9yLmhpZGUoKTsKCgkJCQkJJGlzbW9iaWxlLmF0dHIoJ2NoZWNrZWQn
LCAnY2hlY2tlZCcpOwoJCQkJCSRwaG9uZS52YWwoJycpOwoKCQkJCQlpZiAoJGNo
aWxkcy5sZW5ndGgpCgkJCQkJCSRwaG9uZUNvZGVTZWxlY3QudmFsKCRjaGlsZHMu
Zmlyc3QoKS52YWwoKSkuY2hhbmdlKCk7CgoJCQkJCWlmICgkaXNtb2JpbGUuaXMo
JzpjaGVja2VkJykpCgkJCQkJCSRzdWJtaXQuYXR0cignZGlzYWJsZWQnLCAnZGlz
YWJsZWQnKTsKCQkJCX0pCgkJCQkub25lKCdzaG93JywgZnVuY3Rpb24oKSB7CgkJ
CQkJdmFyIHQgPSB0aGlzOwoKCQkJCQlmdW5jdGlvbiBhcHBseUNvdW50cnlMaXN0
KCkgewoJCQkJCQl2YXIgdCA9IHRoaXM7CgkJCQkJCXZhciAkcHJlZml4ID0gJCgn
LmpzLXBob25lUHJlZml4LCAucGhvbmVQcmVmaXgnLCB0LiRkaXYpOwoJCQkJCQl2
YXIgJHBob25lQ29kZVNlbGVjdCA9ICQoJ3NlbGVjdFtuYW1lPSJwaG9uZWNvZGUi
XScsIHQuJGRpdikuZW1wdHkoKTsKCQkJCQkJdmFyICRwaG9uZSA9ICQoJ2lucHV0
W25hbWU9InBob25lIl0nLCB0LiRkaXYpOwoJCQkJCQl2YXIgY291bnRyeURhdGEg
PSB7fTsKCgkJCQkJCSQuZWFjaCh3aW5kb3cuQ291bnRyeUxpc3QsIGZ1bmN0aW9u
KGtleSwgY291bnRyeSkgewoJCQkJCQkJJCgnPG9wdGlvbi8+JykuYXR0cigndmFs
dWUnLCBjb3VudHJ5LkNvZGUpLmNzcygnZm9udFdlaWdodCcsIGtleSA8IDQgPyAn
Ym9sZCcgOiAnJykudGV4dChjb3VudHJ5LkNvdW50cnkpLmFwcGVuZFRvKCRwaG9u
ZUNvZGVTZWxlY3QpOwoJCQkJCQkJY291bnRyeURhdGFbY291bnRyeS5Db2RlXSA9
IGNvdW50cnk7CgkJCQkJCX0pOwoKCQkJCQkJJHBob25lQ29kZVNlbGVjdC5iaW5k
KCdjaGFuZ2UnLCB7J2NvdW50cnlEYXRhJzogY291bnRyeURhdGEsICdwcmVmaXgn
OiAkcHJlZml4LCAncGhvbmUnOiAkcGhvbmUsICdzZWxlY3QnOiAkcGhvbmVDb2Rl
U2VsZWN0fSwgZnVuY3Rpb24oZXZ0KSB7CgkJCQkJCQl2YXIgJHNlbGVjdCA9IGV2
dC5kYXRhLnNlbGVjdDsKCQkJCQkJCXZhciAkcHJlZml4ID0gZXZ0LmRhdGEucHJl
Zml4OwoJCQkJCQkJdmFyICRwaG9uZSA9IGV2dC5kYXRhLnBob25lOwoJCQkJCQkJ
dmFyIGNvdW50cnlEYXRhID0gZXZ0LmRhdGEuY291bnRyeURhdGE7CgkJCQkJCQl2
YXIgY291bnRyeSA9IGNvdW50cnlEYXRhWyRzZWxlY3QudmFsKCldOwoJCQkJCQkJ
JHByZWZpeC5jc3MoJ2JhY2tncm91bmRJbWFnZScsICd1cmwoIicgKyBjb3VudHJ5
Lkljb24gKyAnIiknKS50ZXh0KCcrJyArIGNvdW50cnkuQ29kZSkuc2hvdygpOwoJ
CQkJCQkJdmFyIHAgPSAkcHJlZml4WzBdLm9mZnNldFdpZHRoICsgNTsKCQkJCQkJ
CSRwaG9uZS5jc3MoewoJCQkJCQkJCSdwYWRkaW5nTGVmdCc6IHAsCgkJCQkJCQkJ
J3dpZHRoJzogMTU4IC0gcAoJCQkJCQkJfSk7CgkJCQkJCX0pLmNoYW5nZSgpOwoJ
CQkJCX0KCgkJCQkJaWYgKHdpbmRvdy5Db3VudHJ5TGlzdCkgewoJCQkJCQlhcHBs
eUNvdW50cnlMaXN0LmNhbGwodCk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJC5hamF4
KHsKCQkJCQkJCXVybDogJy9jZ2ktYmluL2xzdGF0aWMnLAoJCQkJCQkJZGF0YTog
ewoJCQkJCQkJCWdldDogICdjb3VudHJpZXMtbGlzdCcsCgkJCQkJCQkJcm5kOiAg
anNDb3JlLmJ1aWxkLAoJCQkJCQkJCWxhbmc6IG1haWxydS5MQU5HLAoJCQkJCQkJ
CXN0YXRpY0RvbWFpbk5hbWU6IG1haWxydS5zdGF0aWNEb21haW5OYW1lCgkJCQkJ
CQl9LAoJCQkJCQkJZGF0YVR5cGU6ICdzY3JpcHQnLAoJCQkJCQkJY2FjaGU6IHRy
dWUsCgkJCQkJCQljb250ZXh0OiB0LAoJCQkJCQkJc3VjY2VzczogYXBwbHlDb3Vu
dHJ5TGlzdAoJCQkJCQl9KTsKCQkJCQl9CgkJCQl9KQoJCQkJLm9uZSgnc2hvdycs
IGZ1bmN0aW9uKCkgewoJCQkJCXZhciB0ID0gdGhpczsKCQkJCQl2YXIgJHBob25l
ID0gJCgnaW5wdXRbbmFtZT0icGhvbmUiXScsIHQuJGRpdik7CgkJCQkJdmFyICRp
c21vYmlsZSA9ICQoJ2lucHV0W25hbWU9ImlzbW9iaWxlIl0nLCB0LiRkaXYpOwoK
CQkJCQlmdW5jdGlvbiBsaXZlVmFsaWRhdGUoKSB7CgkJCQkJCXZhciB0ID0gdGhp
czsKCQkJCQkJdmFyICRwaG9uZSA9ICQoJ2lucHV0W25hbWU9InBob25lIl0nLCB0
LiRkaXYpOwoJCQkJCQl2YXIgJGVycm9yID0gJCgnZGl2LnJlZDpmaXJzdCwgLmpz
LWVycm9yJywgdC4kZGl2KTsKCQkJCQkJdmFyICRpc21vYmlsZSA9ICQoJ2lucHV0
W25hbWU9ImlzbW9iaWxlIl0nLCB0LiRkaXYpOwoJCQkJCQl2YXIgJHN1Ym1pdCA9
ICQoJy5jb25maXJtLW9rJywgdC4kZGl2KTsKCQkJCQkJdmFyIHZhbHVlID0gJHBo
b25lLnZhbCgpOwoJCQkJCQl2YXIgcHJlcGFyZVZhbHVlID0gdmFsdWUucmVwbGFj
ZSgvW1woXClcLVwrXHNdL2csICIiKTsKCQkJCQkJdmFyIGVycm9yID0gJyc7CgkJ
CQkJCXZhciBjb3JyZWN0ID0gdHJ1ZTsKCQkJCQkJdmFyIHZhbGlkID0gdHJ1ZTsK
CgkJCQkJCWlmICgkaXNtb2JpbGUuaXMoJzpjaGVja2VkJykpIHsKCQkJCQkJCWlm
IChwcmVwYXJlVmFsdWUubGVuZ3RoID09IDApIHsKCQkJCQkJCQl2YWxpZCA9IGZh
bHNlOwoJCQkJCQkJCWVycm9yID0gTGFuZy5nZXQoJ3JlZy5waG9uZV9jb2RlX2lu
dmFsaWQnKTsKCQkJCQkJCX0gZWxzZSBpZiAodmFsdWUubGVuZ3RoIDwgMykgewoJ
CQkJCQkJCXZhbGlkID0gZmFsc2U7CgkJCQkJCQkJZXJyb3IgPSBMYW5nLmdldCgn
cmVnLnBob25lX2NvZGVfaW5jb3JyZWN0Jyk7CgkJCQkJCQl9IGVsc2UgaWYgKC9b
XlwoXClcLVwrXHMwLTldLy50ZXN0KHZhbHVlKSkgewoJCQkJCQkJCWNvcnJlY3Qg
PSB2YWxpZCA9IGZhbHNlOwoJCQkJCQkJCWVycm9yID0gTGFuZy5nZXQoJ3JlZy5w
aG9uZV9zdW1ib2xfaW52YWxpZCcpOwoJCQkJCQkJfQoJCQkJCQl9IGVsc2UgewoJ
CQkJCQkJaWYgKHByZXBhcmVWYWx1ZS5sZW5ndGggPT0gMCkgewoJCQkJCQkJCXZh
bGlkID0gZmFsc2U7CgkJCQkJCQkJZXJyb3IgPSBMYW5nLmdldCgncmVnLnBob25l
X2NvZGVfaW52YWxpZCcpOwoJCQkJCQkJfSBlbHNlIGlmIChwcmVwYXJlVmFsdWUu
bGVuZ3RoIDwgNSB8fCBwcmVwYXJlVmFsdWUubGVuZ3RoID4gMzIgfHwgdmFsdWUu
bGVuZ3RoID4gNTApIHsKCQkJCQkJCQl2YWxpZCA9IGZhbHNlOwoJCQkJCQkJCWVy
cm9yID0gTGFuZy5nZXQoJ3JlZy5waG9uZV9jb2RlX2luY29ycmVjdCcpOwoJCQkJ
CQkJfSBlbHNlIGlmICghL15cZCskLy50ZXN0KHByZXBhcmVWYWx1ZSkpIHsKCQkJ
CQkJCQljb3JyZWN0ID0gdmFsaWQgPSBmYWxzZTsKCQkJCQkJCQllcnJvciA9IExh
bmcuZ2V0KCdyZWcucGhvbmVfc3VtYm9sX2ludmFsaWQnKTsKCQkJCQkJCX0KCQkJ
CQkJfQoKCQkJCQkJaWYgKGNvcnJlY3QpIHsKCQkJCQkJCSRlcnJvci5oaWRlKCk7
CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkZXJyb3IuaHRtbChlcnJvcikuc2hvdygp
OwoJCQkJCQl9CgoJCQkJCQlpZiAodmFsaWQpIHsKCQkJCQkJCSRzdWJtaXQuYXR0
cignZGlzYWJsZWQnLCAnJyk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkc3VibWl0
LmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CgkJCQkJCX0KCQkJCQl9CgoJ
CQkJCWZ1bmN0aW9uIHBvc3RWYWxpZGF0ZSgpIHsKCQkJCQkJdmFyIHQgPSB0aGlz
OwoJCQkJCQl2YXIgJHBob25lID0gJCgnaW5wdXRbbmFtZT0icGhvbmUiXScsIHQu
JGRpdik7CgkJCQkJCXZhciAkZXJyb3IgPSAkKCdkaXYucmVkOmZpcnN0LCAuanMt
ZXJyb3InLCB0LiRkaXYpOwoJCQkJCQl2YXIgJGlzbW9iaWxlID0gJCgnaW5wdXRb
bmFtZT0iaXNtb2JpbGUiXScsIHQuJGRpdik7CgkJCQkJCXZhciAkc3VibWl0ID0g
JCgnLmNvbmZpcm0tb2snLCB0LiRkaXYpOwoJCQkJCQl2YXIgdmFsdWUgPSAkLnRy
aW0oJHBob25lLnZhbCgpKTsKCQkJCQkJdmFyIHByZXBhcmVWYWx1ZSA9IHZhbHVl
LnJlcGxhY2UoL1tcKFwpXC1cK1xzXS9nLCAiIik7CgkJCQkJCXZhciBlcnJvciA9
ICcnOwoJCQkJCQl2YXIgY29ycmVjdCA9IHRydWU7CgkJCQkJCXZhciB2YWxpZCA9
IHRydWU7CgoJCQkJCQlpZiAoJGlzbW9iaWxlLmlzKCc6Y2hlY2tlZCcpKSB7CgkJ
CQkJCQlpZiAocHJlcGFyZVZhbHVlLmxlbmd0aCA9PSAwKSB7CgkJCQkJCQkJdmFs
aWQgPSBmYWxzZTsKCQkJCQkJCQllcnJvciA9IExhbmcuZ2V0KCdyZWcucGhvbmVf
Y29kZV9pbnZhbGlkJyk7CgkJCQkJCQl9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA8
IDMpIHsKCQkJCQkJCQljb3JyZWN0ID0gdmFsaWQgPSBmYWxzZTsKCQkJCQkJCQll
cnJvciA9IExhbmcuZ2V0KCdyZWcucGhvbmVfY29kZV9pbmNvcnJlY3QnKTsKCQkJ
CQkJCX0gZWxzZSBpZiAoL1teXChcKVwtXCtcczAtOV0vLnRlc3QodmFsdWUpKSB7
CgkJCQkJCQkJY29ycmVjdCA9IHZhbGlkID0gZmFsc2U7CgkJCQkJCQkJZXJyb3Ig
PSBMYW5nLmdldCgncmVnLnBob25lX3N1bWJvbF9pbnZhbGlkJyk7CgkJCQkJCQl9
CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlpZiAocHJlcGFyZVZhbHVlLmxlbmd0aCA9
PSAwKSB7CgkJCQkJCQkJdmFsaWQgPSBmYWxzZTsKCQkJCQkJCQllcnJvciA9IExh
bmcuZ2V0KCdyZWcucGhvbmVfY29kZV9pbnZhbGlkJyk7CgkJCQkJCQl9IGVsc2Ug
aWYgKHByZXBhcmVWYWx1ZS5sZW5ndGggPCA1IHx8IHByZXBhcmVWYWx1ZS5sZW5n
dGggPiAzMiB8fCB2YWx1ZS5sZW5ndGggPiA1MCkgewoJCQkJCQkJCWNvcnJlY3Qg
PSB2YWxpZCA9IGZhbHNlOwoJCQkJCQkJCWVycm9yID0gTGFuZy5nZXQoJ3JlZy5w
aG9uZV9jb2RlX2luY29ycmVjdCcpOwoJCQkJCQkJfSBlbHNlIGlmICghL15cZCsk
Ly50ZXN0KHByZXBhcmVWYWx1ZSkpIHsKCQkJCQkJCQljb3JyZWN0ID0gdmFsaWQg
PSBmYWxzZTsKCQkJCQkJCQllcnJvciA9IExhbmcuZ2V0KCdyZWcucGhvbmVfc3Vt
Ym9sX2ludmFsaWQnKTsKCQkJCQkJCX0KCQkJCQkJfQoKCQkJCQkJaWYgKGNvcnJl
Y3QpIHsKCQkJCQkJCSRlcnJvci5oaWRlKCk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJ
CQkkZXJyb3IuaHRtbChlcnJvcikuc2hvdygpOwoJCQkJCQl9CgoJCQkJCQlpZiAo
dmFsaWQpIHsKCQkJCQkJCSRzdWJtaXQuYXR0cignZGlzYWJsZWQnLCAnJyk7CgkJ
CQkJCX0gZWxzZSB7CgkJCQkJCQkkc3VibWl0LmF0dHIoJ2Rpc2FibGVkJywgJ2Rp
c2FibGVkJyk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCSRwaG9uZS5iaW5kKHsKCQkJ
CQkJJ2tleXVwJzogJC5wcm94eShsaXZlVmFsaWRhdGUsIHQpLAoJCQkJCQknYmx1
cic6ICQucHJveHkoZnVuY3Rpb24oKSB7CgkJCQkJCQlzZXRUaW1lb3V0KCQucHJv
eHkocG9zdFZhbGlkYXRlLCB0aGlzKSwgMTAwKTsKCQkJCQkJfSwgdCkKCQkJCQl9
KTsKCgkJCQkJJGlzbW9iaWxlLmJpbmQoJ2NsaWNrJywgJC5wcm94eShsaXZlVmFs
aWRhdGUsIHQpKTsKCQkJCX0pOwoKCQkJCXJldHVybiBsYXllcjsKCQkJfSwKCgkJ
CV9jcmVhdGVMYXllcl9jaGVjazogZnVuY3Rpb24oKSB7CgkJCQl2YXIgdCA9IHRo
aXM7CgkJCQl2YXIgbGF5ZXIgPSBuZXcgTGF5ZXIoJ2lzLXBob25lX3ZlcmlmeV9j
aGVjaycpOwoJCQkJJCgnaW5wdXQuY29uZmlybS1yZXR1cm46Zmlyc3QnLCBsYXll
ci4kZGl2KQoJCQkJCS5iaW5kKCdjbGljaycsICQucHJveHkodC5fZWRpdFBob25l
TGlua0NsaWNrLCB0KSk7CgkJCQkkKCdhLndpdGhvdXRwaG9uZTpmaXJzdCcsIGxh
eWVyLiRkaXYpCgkJCQkJLmJpbmQoJ2NsaWNrJywgJC5wcm94eSh0Ll93aXRob3V0
UGhvbmVMaW5rQ2xpY2ssIHQpKTsKCQkJCSQoJ2lucHV0LmNvbmZpcm0tb2s6Zmly
c3QnLCBsYXllci4kZGl2KQoJCQkJCS5iaW5kKCdjbGljaycsICQucHJveHkoZnVu
Y3Rpb24oKSB7CgkJCQkJCXQuY2hlY2sodC5kYXRhLnBob25lY29kZSwgdC5kYXRh
LnBob25lKTsKCQkJCQl9LCB0KSk7CgoJCQkJbGF5ZXIuYmluZCgnc2hvdycsIGZ1
bmN0aW9uKCkgewoJCQkJCXZhciB0ID0gdGhpczsKCQkJCQkkKCcuY29uZmlybS1y
ZXR1cm4nLCB0LiRkaXYpLnNob3coKTsKCQkJCQkkKCcuY29uZmlybS1vaycsIHQu
JGRpdikuaGlkZSgpOwoJCQkJfSk7CgoJCQkJcmV0dXJuIGxheWVyOwoJCQl9LAoK
CQkJX2NyZWF0ZUxheWVyX25vU01TMTogZnVuY3Rpb24oKSB7CgkJCQl2YXIgdCA9
IHRoaXM7CgkJCQl2YXIgbGF5ZXIgPSBuZXcgTGF5ZXIoJ2lzLW5vc21zMScpOwoJ
CQkJJCgnYS5lZGl0cGhvbmU6Zmlyc3QnLCBsYXllci4kZGl2KQoJCQkJCS5iaW5k
KCdjbGljaycsICQucHJveHkodC5fZWRpdFBob25lTGlua0NsaWNrLCB0KSk7CgkJ
CQkkKCdhLndpdGhvdXRwaG9uZTpmaXJzdCcsIGxheWVyLiRkaXYpCgkJCQkJLmJp
bmQoJ2NsaWNrJywgJC5wcm94eSh0Ll93aXRob3V0UGhvbmVMaW5rQ2xpY2ssIHQp
KTsKCQkJCSQoJ2lucHV0LmNvbmZpcm0tcmV0dXJuOmZpcnN0JywgbGF5ZXIuJGRp
dikKCQkJCQkuYmluZCgnY2xpY2snLCAkLnByb3h5KHQuX3JldHVybkxpbmtDbGlj
aywgdCkpOwoJCQkJcmV0dXJuIGxheWVyOwoJCQl9LAoKCQkJX2NyZWF0ZUxheWVy
X25vU01TMjogZnVuY3Rpb24oKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIg
bGF5ZXIgPSBuZXcgTGF5ZXIoJ2lzLW5vc21zMicsICQucHJveHkodC5fbm9TTVMx
TGF5ZXJDYWxsYmFjaywgdCkpOwoJCQkJJCgnYS5lZGl0cGhvbmU6Zmlyc3QnLCBs
YXllci4kZGl2KQoJCQkJCS5iaW5kKCdjbGljaycsICQucHJveHkodC5fZWRpdFBo
b25lTGlua0NsaWNrLCB0KSk7CgkJCQkkKCdhLndpdGhvdXRwaG9uZTpmaXJzdCcs
IGxheWVyLiRkaXYpCgkJCQkJLmJpbmQoJ2NsaWNrJywgJC5wcm94eSh0Ll93aXRo
b3V0UGhvbmVMaW5rQ2xpY2ssIHQpKTsKCQkJCSQoJ2lucHV0LmNvbmZpcm0tcmV0
dXJuOmZpcnN0JywgbGF5ZXIuJGRpdikKCQkJCQkuYmluZCgnY2xpY2snLCAkLnBy
b3h5KHQuX3JldHVybkxpbmtDbGljaywgdCkpOwoJCQkJcmV0dXJuIGxheWVyOwoJ
CQl9LAoKCQkJX2NyZWF0ZUxheWVyX2dlbkRlbDogZnVuY3Rpb24oKSB7CgkJCQl2
YXIgdCA9IHRoaXM7CgkJCQl2YXIgbGF5ZXIgPSBuZXcgTGF5ZXIoJ2lzLWdlbkRl
bFBob25lJywgJC5wcm94eSh0Ll9nZW5EZWxQaG9uZUxheWVyQ2FsbGJhY2ssIHQp
KTsKCgkJCQkkKCdhLm5vc21zbGluazpmaXJzdCcsIGxheWVyLiRkaXYpCgkJCQkJ
LmJpbmQoJ2NsaWNrJywgJC5wcm94eSh0Ll9nZXRTTVNTdGF0dXNMaW5rQ2xpY2ss
IHQpKTsKCgkJCQkkKCdhLnJlc2VuZHNtczpmaXJzdCcsIGxheWVyLiRkaXYpCgkJ
CQkJLmJpbmQoJ2NsaWNrJywgJC5wcm94eSh0Ll9nZW5EZWxQaG9uZVJlc2VuZExp
bmtDbGljaywgdCkpOwoKCQkJCWxheWVyLmJpbmQoJ3Nob3cnLCBmdW5jdGlvbigp
IHsKCQkJCQl2YXIgdCA9IHRoaXM7CgkJCQkJdmFyICRjb2RlID0gJCgnaW5wdXRb
bmFtZT0iY29kZSJdJywgdC4kZGl2KTsKCQkJCQl2YXIgJGVycm9yID0gJCgnZGl2
LnJlZDpmaXJzdCwgLmpzLWVycm9yJywgdC4kZGl2KTsKCQkJCQl2YXIgJGluZm8g
PSAkKCdkaXYuaW5mbzpmaXJzdCcsIHQuJGRpdik7CgkJCQkJJGVycm9yLmFkZCgk
aW5mbykuaGlkZSgpOwoJCQkJCSRjb2RlLnZhbCgnJyk7CgkJCQl9KTsKCgkJCQly
ZXR1cm4gbGF5ZXI7CgkJCX0sCgoJCQlfY3JlYXRlTGF5ZXJfZ2VuRGVsUGhvbmVD
b25maXJtOiBmdW5jdGlvbigpIHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXZhciBs
YXllciA9IG5ldyBMYXllcignaXMtZ2VuRGVsUGhvbmVDb25maXJtJywgJC5wcm94
eSh0Ll9nZW5EZWxQaG9uZUNvbmZpcm1MYXllckNhbGxiYWNrLCB0KSk7CgoJCQkJ
JCgnYS5jb2RlaXNzZXQ6Zmlyc3QnLCBsYXllci4kZGl2KQoJCQkJCS5iaW5kKCdj
bGljaycsICQucHJveHkodC5fZ2V0RGVsQ29kZUlzc2V0TGlua0NsaWNrLCB0KSk7
CgoJCQkJcmV0dXJuIGxheWVyOwoJCQl9LAoKCQkJX2NyZWF0ZUxheWVyX3Zlcmlm
eVBob25lQ29uZmlybTogZnVuY3Rpb24oKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJ
CQl2YXIgbGF5ZXIgPSBuZXcgTGF5ZXIoJ2lzLXZlcmlmeVBob25lQ29uZmlybScs
ICQucHJveHkodC5fdmVyaWZ5UGhvbmVDb25maXJtTGF5ZXJDYWxsYmFjaywgdCkp
OwoKCQkJCSQoJ2EuY29kZWlzc2V0OmZpcnN0JywgbGF5ZXIuJGRpdikKCQkJCQku
YmluZCgnY2xpY2snLCAkLnByb3h5KHQuX3ZlcmlmeVBob25lQ29kZUlzc2V0TGlu
a0NsaWNrLCB0KSk7CgoJCQkJcmV0dXJuIGxheWVyOwoJCQl9LAoKCQkJX2NyZWF0
ZUxheWVyX2dlbkRlbFBob25lU3VjY2VzczogZnVuY3Rpb24oKSB7CgkJCQl2YXIg
dCA9IHRoaXM7CgkJCQl2YXIgbGF5ZXIgPSBuZXcgTGF5ZXIoJ2lzLWdlbkRlbFBo
b25lU3VjY2VzcycpOwoJCQkJcmV0dXJuIGxheWVyOwoJCQl9LAoKCQkJX2NyZWF0
ZUxheWVyX2FkZFBob25lQWxyZWFkeUV4aXN0czogZnVuY3Rpb24oKSB7CgkJCQl2
YXIgdCA9IHRoaXM7CgkJCQl2YXIgbGF5ZXIgPSBuZXcgTGF5ZXIoJ2lzLWFkZFBo
b25lQWxyZWFkeUV4aXN0cycpOwoJCQkJcmV0dXJuIGxheWVyOwoJCQl9LAoKCQkJ
X3NlbmQ6IGZ1bmN0aW9uKG8pIHsKCQkJCXZhciB0ID0gdGhpczsKCgkJCQlpZiAo
dC54aHJzW28uZnVuY19uYW1lXSkKCQkJCQl0LnhocnNbby5mdW5jX25hbWVdLmFi
b3J0KCk7CgoJCQkJdC54aHJzW28uZnVuY19uYW1lXSA9IG1haWxydS5BamF4KHsK
CQkJCQl0eXBlOiAnUE9TVCcsCgkJCQkJdXJsOiAnL2NnaS1iaW4vc21zdmVyaWZp
Y2F0b3I/JmFqYXhfY2FsbD0xJmxhbmc9JyArIG1haWxydS5MQU5HICsgJyZmdW5j
X25hbWU9JyArIG8uZnVuY19uYW1lLAoJCQkJCWRhdGE6ICQuZXh0ZW5kKHsKCQkJ
CQkJeF9yZWdfaWQ6IHQub3B0aW9ucy54X3JlZ19pZCwKCQkJCQkJdXNlcjogdC5v
cHRpb25zLnVzZXIubmFtZSwKCQkJCQkJZG9tYWluOiB0Lm9wdGlvbnMudXNlci5k
b21haW4KCQkJCQl9LCBvLmRhdGEpLAoJCQkJCXRpbWVvdXQ6IG8udGltZW91dCB8
fCA1MDAwLAoJCQkJCWNvbXBsZXRlOiAkLnByb3h5KG8uY29tcGxldGUsIHQpCgkJ
CQl9KTsKCQkJfSwKCgkJCV9nZXRMYXllcjogZnVuY3Rpb24obmFtZSkgewoJCQkJ
dmFyIHQgPSB0aGlzLCBsID0gdC5sYXllcnM7CgkJCQlyZXR1cm4gbFtuYW1lXSA/
IGxbbmFtZV0gOiBsW25hbWVdID0gdFsnX2NyZWF0ZUxheWVyXycgKyBuYW1lXSgp
OwoJCQl9LAoKCQkJX2dldExheWVyQXN5bmM6IGZ1bmN0aW9uIChuYW1lLCBjYWxs
YmFjaykgewoJCQkJdmFyIHQgPSB0aGlzLCBsID0gdC5sYXllcnM7CgkJCQlsW25h
bWVdID8gY2FsbGJhY2sobFtuYW1lXSkgOiB0WydfY3JlYXRlTGF5ZXJfJyArIG5h
bWVdKGZ1bmN0aW9uIChsYXllcikgewoJCQkJCWNhbGxiYWNrKGxbbmFtZV0gPSBs
YXllcik7CgkJCQl9KTsKCQkJfSwKCgkJCXNldE9wdGlvbnM6IGZ1bmN0aW9uKG8p
IHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXQub3B0aW9ucyA9ICQuZXh0ZW5kKHt9
LCBvKTsKCQkJfSwKCgkJCWNoZWNrOiBmdW5jdGlvbihwaG9uZWNvZGUsIHBob25l
KSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgbGF5ZXIgPSB0Ll9nZXRMYXll
cignY2hlY2snKTsKCQkJCXZhciAkZXJyb3IgPSAkKCdkaXYucmVkOmZpcnN0LCAu
anMtZXJyb3InLCBsYXllci4kZGl2KTsKCQkJCXZhciAkbG9hZCA9ICQoJ2Rpdi5p
bkxvYWRpbmc6Zmlyc3QnLCBsYXllci4kZGl2KTsKCQkJCXZhciAkY29udHJvbHMg
PSAkKCdkaXYuY29udHJvbHM6Zmlyc3QnLCBsYXllci4kZGl2KTsKCgkJCQl0LmRh
dGEgPSB7CgkJCQkJJ2lzbW9iaWxlJzogMSwKCQkJCQkncGhvbmVjb2RlJzogcGhv
bmVjb2RlLAoJCQkJCSdwaG9uZSc6IHBob25lCgkJCQl9OwoKCQkJCXQuX3NlbmQo
ewoJCQkJCSdmdW5jX25hbWUnOiAncmVnaXN0ZXInLAoJCQkJCSdkYXRhJzogdC5k
YXRhLAoJCQkJCSdjb21wbGV0ZSc6IHQuX2NoZWNrQ29tcGxldGUKCQkJCX0pOwoK
CQkJCSRlcnJvci5oaWRlKCk7CgkJCQkkbG9hZC5zaG93KCk7CgkJCQkkY29udHJv
bHMuaGlkZSgpOwoJCQkJbGF5ZXIuc2hvdygpOwoJCQl9LAoKCQkJcGhvbmVTdGF0
dXM6IGZ1bmN0aW9uKHBob25lY29kZSwgcGhvbmUpIHsKCQkJCXZhciB0ID0gdGhp
czsKCQkJCXZhciBsYXllciA9IHQuX2dldExheWVyKCdjaGVjaycpOwoJCQkJdmFy
ICRlcnJvciA9ICQoJ2Rpdi5yZWQ6Zmlyc3QsIC5qcy1lcnJvcicsIGxheWVyLiRk
aXYpOwoJCQkJdmFyICRsb2FkID0gJCgnZGl2LmluTG9hZGluZzpmaXJzdCcsIGxh
eWVyLiRkaXYpOwoJCQkJdmFyICRjb250cm9scyA9ICQoJ2Rpdi5jb250cm9sczpm
aXJzdCcsIGxheWVyLiRkaXYpOwoKCQkJCXQuZGF0YSA9IHsKCQkJCQkncGhvbmVj
b2RlJzogcGhvbmVjb2RlLAoJCQkJCSdwaG9uZSc6IHBob25lCgkJCQl9OwoKCQkJ
CXQuX3NlbmQoewoJCQkJCSdmdW5jX25hbWUnOiAncGhvbmVfc3RhdHVzJywKCQkJ
CQknZGF0YSc6IHsncGhvbmUnOiBwaG9uZWNvZGUgKyBwaG9uZX0sCgkJCQkJJ2Nv
bXBsZXRlJzogdC5fcGhvbmVTdGF0dXNDb21wbGV0ZQoJCQkJfSk7CgoJCQkJJGVy
cm9yLmhpZGUoKTsKCQkJCSRsb2FkLnNob3coKTsKCQkJCSRjb250cm9scy5oaWRl
KCk7CgkJCQlsYXllci5zaG93KCk7CgkJCX0sCgoJCQlfcGhvbmVTdGF0dXNDb21w
bGV0ZTogZnVuY3Rpb24ocmVzdWx0KSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl0
LmFqYXhSZXN1bHQgPSBudWxsOwoKCQkJCWlmIChyZXN1bHQuaXNPSygpKSB7CgkJ
CQkJdC5hamF4UmVzdWx0ID0gcmVzdWx0LmdldERhdGEoKTsKCQkJCX0KCgkJCQlp
ZiAodC5hamF4UmVzdWx0KSB7CgkJCQkJaWYgKHQuYWpheFJlc3VsdC5zdGF0dXMg
PT0gJ2Vycm9yJykgewoJCQkJCQl0LmFqYXhSZXN1bHQudGV4dCA9IExhbmcuZ2V0
KCdwaG9uZV9zdGF0dXNfZXJyb3InKTsKCQkJCQkJdC5fY2hlY2tFcnJvcigpOwoJ
CQkJCX0gZWxzZSBpZiAodC5hamF4UmVzdWx0LnN0YXR1cyA9PSAnbGF0ZW5jeScp
IHsKCQkJCQkJdmFyICRjID0gdC5fZ2V0TGF5ZXIoJ2NoZWNrJykuJGRpdjsKCQkJ
CQkJdmFyICRjb250cm9scyA9ICQoJ2Rpdi5jb250cm9sczpmaXJzdCcsICRjKTsK
CgkJCQkJCSQoJy5jb25maXJtLXJldHVybicsICRjb250cm9scykuaGlkZSgpOwoJ
CQkJCQkkKCcuY29uZmlybS1vaycsICRjb250cm9scykuc2hvdygpOwoKCQkJCQkJ
dC5hamF4UmVzdWx0LnRleHQgPSBMYW5nLmdldCgncGhvbmVfc3RhdHVzX2xhdGVu
Y3knKTsKCQkJCQkJdC5fY2hlY2tFcnJvcigpOwoJCQkJCX0gZWxzZSB7CgkJCQkJ
CXQuY2hlY2sodC5kYXRhLnBob25lY29kZSwgdC5kYXRhLnBob25lKTsKCQkJCQl9
CgkJCQl9IGVsc2UgewoJCQkJCXQuY2hlY2sodC5kYXRhLnBob25lY29kZSwgdC5k
YXRhLnBob25lKTsKCQkJCX0KCQkJfSwKCgkJCWFkZFBob25lOiBmdW5jdGlvbigp
IHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXZhciBsYXllciA9IHQuX2dldExheWVy
KCdhZGRQaG9uZScpOwoJCQkJdmFyICRlcnJvciA9ICQoJ2Rpdi5yZWQ6Zmlyc3Qs
IC5qcy1lcnJvcicsIGxheWVyLiRkaXYpOwoJCQkJJGVycm9yLmhpZGUoKTsKCQkJ
CWxheWVyLnNob3coKTsKCQkJCWxheWVyLiRkaXYuZmluZCgnLmZvcm1fX3NlbGVj
dCcpLmZvcm1fX3NlbGVjdCgpOwoJCQl9LAoKCQkJc2lnbnVwOiBmdW5jdGlvbigp
IHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXQuX2dldExheWVyKCdzaWdudXBQaG9u
ZScpLnNob3coKTsKCQkJfSwKCgkJCWNhbmNlbERlbGV0ZVBob25lOiBmdW5jdGlv
bihwaG9uZSkgewoJCQkJdmFyIHQgPSB0aGlzOwoKCQkJCXQuZGF0YSA9IHsKCQkJ
CQkncGhvbmVjb2RlJzogJycsCgkJCQkJJ3Bob25lJzogcGhvbmUKCQkJCX07CgoJ
CQkJdC5fc2VuZCh7CgkJCQkJJ2Z1bmNfbmFtZSc6ICd1bmRlbGV0ZScsCgkJCQkJ
J2RhdGEnOiB0LmRhdGEsCgkJCQkJJ2NvbXBsZXRlJzogdC5fY2FuY2VsRGVsZXRl
UGhvbmVDb21wbGV0ZQoJCQkJfSk7CgkJCX0sCgoJCQlfY2FuY2VsRGVsZXRlUGhv
bmVDb21wbGV0ZTogZnVuY3Rpb24ocmVzdWx0KSB7CgkJCQl2YXIgdCA9IHRoaXM7
CgkJCQl0LmFqYXhSZXN1bHQgPSBudWxsOwoKCQkJCWlmIChyZXN1bHQuaXNPSygp
KSB7CgkJCQkJdC5hamF4UmVzdWx0ID0gcmVzdWx0LmdldERhdGEoKTsKCQkJCX0K
CgkJCQlpZiAodC5hamF4UmVzdWx0KSB7CgkJCQkJdC50cmlnZ2VySGFuZGxlcign
Y2FuY2VsRGVsZXRlUGhvbmVTdWNjZXNzJyk7CgkJCQl9CgkJCX0sCgoJCQljaGFu
Z2VGbGFnOiBmdW5jdGlvbihwaG9uZSwgZmxhZykgewoJCQkJdmFyIHQgPSB0aGlz
OwoKCQkJCXQuZGF0YSA9IHsKCQkJCQkncGhvbmVjb2RlJzogJycsCgkJCQkJJ3Bo
b25lJzogcGhvbmUsCgkJCQkJJ2ZsYWdzJzogZmxhZwoJCQkJfTsKCgkJCQl0Ll9z
ZW5kKHsKCQkJCQknZnVuY19uYW1lJzogJ2NoZmxhZ3MnLAoJCQkJCSdkYXRhJzog
dC5kYXRhLAoJCQkJCSdjb21wbGV0ZSc6IG51bGwKCQkJCX0pOwoJCQl9LAoKCQkJ
ZGVsZXRlUGhvbmU6IGZ1bmN0aW9uKHBob25lLCBpc21vYmlsZSwgdmVyaWZpZWQp
IHsKCQkJCXZhciB0ID0gdGhpczsKCgkJCQl0LmRhdGEgPSB7CgkJCQkJJ3Bob25l
Y29kZSc6ICcnLAoJCQkJCSdwaG9uZSc6IHBob25lLklELAoJCQkJCSd2YWx1ZSc6
IHBob25lLlZhbHVlCgkJCQl9OwoKCQkJCWlmIChpc21vYmlsZSAmJiB2ZXJpZmll
ZCkgewoJCQkJCXZhciBsYXllciA9IHQuX2dldExheWVyKCdnZW5EZWxQaG9uZUNv
bmZpcm0nKTsKCQkJCQl2YXIgJHBob25lID0gJCgnc3Bhbi5waG9uZTpmaXJzdCcs
IGxheWVyLiRkaXYpOwoJCQkJCSRwaG9uZS50ZXh0KHBob25lLlZhbHVlKTsKCQkJ
CQlsYXllci5zaG93KCk7CgkJCQkJdC50cmlnZ2VySGFuZGxlcignZ2VuRGVsUGhv
bmVDb25maXJtU2hvdycsIFt0LmRhdGFdKTsKCQkJCX0gZWxzZSB7CgkJCQkJdC5f
c2VuZCh7CgkJCQkJCSdmdW5jX25hbWUnOiAnZGVsZXRlJywKCQkJCQkJJ2RhdGEn
OiB0LmRhdGEsCgkJCQkJCSdjb21wbGV0ZSc6IHQuX2RlbGV0ZVBob25lQ29tcGxl
dGUKCQkJCQl9KTsKCQkJCX0KCQkJfSwKCgkJCWRlbGV0ZVJlbWluZFBob25lOiBm
dW5jdGlvbiAocGhvbmUpIHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXQuZGF0YSA9
IHsKCQkJCQkncGhvbmVjb2RlJzogJycsCgkJCQkJJ3Bob25lJzogcGhvbmUKCQkJ
CX07CgkJCQl0Ll9zZW5kKHsKCQkJCQknZnVuY19uYW1lJzogJ2RlbF9yZW1pbmRf
cGhvbmUnLAoJCQkJCSdkYXRhJzogdC5kYXRhLAoJCQkJCSdjb21wbGV0ZSc6IHQu
X2RlbGV0ZVBob25lQ29tcGxldGUKCQkJCX0pOwoJCQl9LAoKCQkJc2VsZWN0VmVy
aWZ5U29tZVBob25lOiBmdW5jdGlvbiAocGhvbmVzKSB7CgkJCQl2YXIgdCA9IHRo
aXM7CgkJCQl2YXIgbGF5ZXIgPSB0Ll9nZXRMYXllcignc2VsZWN0VmVyaWZ5U29t
ZVBob25lJyk7CgkJCQl2YXIgJHBob25lU2VsZWN0ID0gJCgnLmpzLXBob25lJywg
bGF5ZXIuJGRpdik7CgkJCQl2YXIgJHBob25lTGFiZWwgPSAkKCcuanMtcGhvbmUt
c2luZ2xlJywgbGF5ZXIuJGRpdik7CgkJCQl2YXIgaHRtbCA9ICcnOwoKCQkJCSQu
ZWFjaChwaG9uZXMsIGZ1bmN0aW9uIChrLCB2KSB7CgkJCQkJaHRtbCArPSAnPG9w
dGlvbiB2YWx1ZT0iJyArICh2LklEPyB2LklEIDogdi5WYWx1ZSkgKyAnIj4nICsg
di5WYWx1ZSArICc8L29wdGlvbj4nOwoJCQkJfSk7CgkJCQkkcGhvbmVTZWxlY3Qu
aHRtbChodG1sKTsKCQkJCSRwaG9uZVNlbGVjdC5jaGFuZ2UoKTsKCgkJCQlpZiAo
cGhvbmVzLmxlbmd0aCA9PSAxKXsKCQkJCQlodG1sID0gcGhvbmVzWzBdLlZhbHVl
OwoJCQkJCSRwaG9uZUxhYmVsLnRleHQoaHRtbCk7CgkJCQkJJHBob25lTGFiZWwu
c2hvdygpOwoJCQkJCSQoJy5qcy1waG9uZS1jb250YWluZXInLCBsYXllci4kZGl2
KS5oaWRlKCk7CgkJCQl9CgoJCQkJbGF5ZXIuc2hvdygpOwoJCQl9LAoKCQkJdmVy
aWZ5U29tZVBob25lOiBmdW5jdGlvbihwaG9uZWNvZGUsIHBob25lKSB7CgkJCQl2
YXIgdCA9IHRoaXM7CgkJCQl2YXIgbGF5ZXIgPSB0Ll9nZXRMYXllcignY2hlY2sn
KTsKCQkJCXZhciAkZXJyb3IgPSAkKCdkaXYucmVkOmZpcnN0LCAuanMtZXJyb3In
LCBsYXllci4kZGl2KTsKCQkJCXZhciAkbG9hZCA9ICQoJ2Rpdi5pbkxvYWRpbmc6
Zmlyc3QnLCBsYXllci4kZGl2KTsKCQkJCXZhciAkY29udHJvbHMgPSAkKCdkaXYu
Y29udHJvbHM6Zmlyc3QnLCBsYXllci4kZGl2KTsKCgkJCQl0LmRhdGEgPSB7CgkJ
CQkJJ3Bob25lY29kZSc6IHBob25lY29kZSwKCQkJCQkncGhvbmUnOiBwaG9uZQoJ
CQkJfTsKCgkJCQl0Ll9zZW5kKHsKCQkJCQknZnVuY19uYW1lJzogJ3NlbmRfYXV0
aF9jb2RlJywKCQkJCQknZGF0YSc6IHQuZGF0YSwKCQkJCQknY29tcGxldGUnOiB0
Ll92ZXJpZnlTb21lUGhvbmVDb21wbGV0ZQoJCQkJfSk7CgoJCQkJJGVycm9yLmhp
ZGUoKTsKCQkJCSRsb2FkLnNob3coKTsKCQkJCSRjb250cm9scy5oaWRlKCk7CgoJ
CQkJbGF5ZXIuc2hvdygpOwoJCQl9LAoKCQkJdmVyaWZ5UGhvbmU6IGZ1bmN0aW9u
KHBob25lY29kZSwgcGhvbmUpIHsKCQkJCXZhciB0ID0gdGhpczsKCgkJCQl0LmRh
dGEgPSB7CgkJCQkJJ2lzbW9iaWxlJzogMSwKCQkJCQkncGhvbmVjb2RlJzogcGhv
bmVjb2RlLAoJCQkJCSdwaG9uZSc6IHBob25lLklECgkJCQl9OwoKCQkJCXZhciBs
YXllciA9IHQuX2dldExheWVyKCd2ZXJpZnlQaG9uZUNvbmZpcm0nKTsKCQkJCXZh
ciAkcGhvbmUgPSAkKCdzcGFuLnBob25lOmZpcnN0JywgbGF5ZXIuJGRpdik7CgkJ
CQkkcGhvbmUudGV4dChwaG9uZS5WYWx1ZSk7CgkJCQlsYXllci5zaG93KCk7CgkJ
CX0sCgoJCQlfZ2VuRGVsUGhvbmVSZXNlbmRMaW5rQ2xpY2s6IGZ1bmN0aW9uKGV2
dCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdC5fZ2VuRGVsUGhvbmVDb25maXJt
TGF5ZXJDYWxsYmFjaygxKTsKCQkJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoJCQl9
LAoKCQkJX2dldERlbENvZGVJc3NldExpbmtDbGljazogZnVuY3Rpb24oZXZ0KSB7
CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgbGF5ZXIgPSB0Ll9nZXRMYXllcign
Z2VuRGVsJyk7CgkJCQl2YXIgJGNvZGUgPSAkKCdpbnB1dFtuYW1lPSJjb2RlIl0n
LCBsYXllci4kZGl2KTsKCQkJCXZhciAkZXJyb3IgPSAkKCdkaXYucmVkOmZpcnN0
LCAuanMtZXJyb3InLCBsYXllci4kZGl2KTsKCQkJCXZhciAkaW5mbyA9ICQoJ2Rp
di5pbmZvOmZpcnN0JywgbGF5ZXIuJGRpdik7CgkJCQl2YXIgJHBob25lID0gJCgn
c3Bhbi5waG9uZTpmaXJzdCcsIGxheWVyLiRkaXYpOwoKCQkJCSRlcnJvci5hZGQo
JGluZm8pLmhpZGUoKTsKCQkJCSRjb2RlLnZhbCgnJyk7CgkJCQkkcGhvbmUudGV4
dCh0LmRhdGEudmFsdWUpOwoKCQkJCXQucHJldkxheWVyID0gbGF5ZXIuc2hvdygp
OwoKCQkJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoJCQl9LAoKCQkJX3ZlcmlmeVNv
bWVQaG9uZUNvZGVJc3NldExpbmtDbGljazogZnVuY3Rpb24gKGV2dCkgewoJCQkJ
dmFyIHQgPSB0aGlzOwoJCQkJdmFyIGxheWVyID0gdC5fZ2V0TGF5ZXIoJ3Zlcmlm
eVNvbWVQaG9uZVNpbmdTTVMnKTsKCQkJCXZhciAkY29kZSA9ICQoJ2lucHV0W25h
bWU9ImNvZGUiXScsIGxheWVyLiRkaXYpOwoJCQkJdmFyICRlcnJvciA9ICQoJ2Rp
di5yZWQ6Zmlyc3QsIC5qcy1lcnJvcicsIGxheWVyLiRkaXYpOwoJCQkJdmFyICRp
bmZvID0gJCgnZGl2LmluZm86Zmlyc3QnLCBsYXllci4kZGl2KTsKCQkJCXZhciAk
cGhvbmUgPSAkKCdzcGFuLnBob25lOmZpcnN0JywgbGF5ZXIuJGRpdik7CgoJCQkJ
JGVycm9yLmFkZCgkaW5mbykuaGlkZSgpOwoJCQkJJGNvZGUudmFsKCcnKTsKCQkJ
CSRwaG9uZS50ZXh0KHQuZGF0YS5waG9uZSk7CgoJCQkJdC5wcmV2TGF5ZXIgPSBs
YXllci5zaG93KCk7CgoJCQkJZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJCX0sCgoJ
CQlfdmVyaWZ5U29tZVBob25lQWRkUGhvbmVMaW5rQ2xpY2s6IGZ1bmN0aW9uKGV2
dCkgewoJCQkJdGhpcy5hZGRQaG9uZSgpOwoJCQkJZXZ0LnByZXZlbnREZWZhdWx0
KCk7CgkJCX0sCgoJCQlfdmVyaWZ5UGhvbmVDb2RlSXNzZXRMaW5rQ2xpY2s6IGZ1
bmN0aW9uKGV2dCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdmFyIGxheWVyID0g
dC5fZ2V0TGF5ZXIoJ3NpbmdTTVMnKTsKCQkJCXZhciAkY29kZSA9ICQoJ2lucHV0
W25hbWU9ImNvZGUiXScsIGxheWVyLiRkaXYpOwoJCQkJdmFyICRlcnJvciA9ICQo
J2Rpdi5yZWQ6Zmlyc3QsIC5qcy1lcnJvcicsIGxheWVyLiRkaXYpOwoJCQkJdmFy
ICRpbmZvID0gJCgnZGl2LmluZm86Zmlyc3QnLCBsYXllci4kZGl2KTsKCQkJCXZh
ciAkcGhvbmUgPSAkKCdzcGFuLnBob25lOmZpcnN0JywgbGF5ZXIuJGRpdik7CgkJ
CQl2YXIgJHBhc3N3b3JkID0gJCgnLmpzLXBhc3N3b3JkJywgbGF5ZXIuJGRpdik7
CgoJCQkJJGVycm9yLmFkZCgkaW5mbykuYWRkKCRwYXNzd29yZCkuaGlkZSgpOwoJ
CQkJJGNvZGUudmFsKCcnKTsKCQkJCSRwaG9uZS50ZXh0KHQuZGF0YS5waG9uZSk7
CgoJCQkJaWYgKHQub3B0aW9ucy5Bc2tQYXNzd29yZCkgewoJCQkJCSRwYXNzd29y
ZC5zaG93KCk7CgkJCQl9CgoJCQkJdC5wcmV2TGF5ZXIgPSBsYXllci5zaG93KCk7
CgoJCQkJZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJCX0sCgoJCQlfZ2VuRGVsUGhv
bmVDb25maXJtTGF5ZXJDYWxsYmFjazogZnVuY3Rpb24oc3RhdHVzKSB7CgkJCQl2
YXIgdCA9IHRoaXM7CgoJCQkJaWYgKHN0YXR1cykgewoKCQkJCQl2YXIgbGF5ZXIg
PSB0Ll9nZXRMYXllcignY2hlY2snKTsKCQkJCQl2YXIgJGVycm9yID0gJCgnZGl2
LnJlZDpmaXJzdCwgLmpzLWVycm9yJywgbGF5ZXIuJGRpdik7CgkJCQkJdmFyICRs
b2FkID0gJCgnZGl2LmluTG9hZGluZzpmaXJzdCcsIGxheWVyLiRkaXYpOwoJCQkJ
CXZhciAkY29udHJvbHMgPSAkKCdkaXYuY29udHJvbHM6Zmlyc3QnLCBsYXllci4k
ZGl2KTsKCgkJCQkJdC5fc2VuZCh7CgkJCQkJCSdmdW5jX25hbWUnOiAnZ2VuZGVs
JywKCQkJCQkJJ2RhdGEnOiB0LmRhdGEsCgkJCQkJCSdjb21wbGV0ZSc6IHQuX2dl
bkRlbFBob25lQ29tcGxldGUKCQkJCQl9KTsKCgkJCQkJJGVycm9yLmhpZGUoKTsK
CQkJCQkkbG9hZC5zaG93KCk7CgkJCQkJJGNvbnRyb2xzLmhpZGUoKTsKCgkJCQkJ
bGF5ZXIuc2hvdygpOwoJCQkJfQoJCQl9LAoKCQkJX3ZlcmlmeVBob25lQ29uZmly
bUxheWVyQ2FsbGJhY2s6IGZ1bmN0aW9uKHN0YXR1cykgewoJCQkJdmFyIHQgPSB0
aGlzOwoJCQkJaWYgKHN0YXR1cykgewoJCQkJCXQuY2hlY2sodC5kYXRhLnBob25l
Y29kZSwgdC5kYXRhLnBob25lKTsKCQkJCX0KCQkJfSwKCgkJCV9nZW5EZWxQaG9u
ZUxheWVyQ2FsbGJhY2s6IGZ1bmN0aW9uKHN0YXR1cykgewoJCQkJdmFyIHQgPSB0
aGlzOwoJCQkJdmFyICRjID0gdC5fZ2V0TGF5ZXIoJ2dlbkRlbCcpLiRkaXY7CgoJ
CQkJaWYgKHN0YXR1cykgewoJCQkJCXQuZGF0YS5jb2RlID0gJC50cmltKCQoJ2lu
cHV0W25hbWU9ImNvZGUiXScsICRjKS52YWwoKSk7CgoJCQkJCXQuX3NlbmQoewoJ
CQkJCQknZnVuY19uYW1lJzogJ2RlbGV0ZScsCgkJCQkJCSdkYXRhJzogdC5kYXRh
LAoJCQkJCQknY29tcGxldGUnOiB0Ll92ZXJpZnlHZW5EZWxDb21wbGV0ZQoJCQkJ
CX0pOwoKCQkJCQlyZXR1cm4gMTsKCQkJCX0gZWxzZSB7CgkJCQkJdC50cmlnZ2Vy
SGFuZGxlcignZ2VuRGVsUGhvbmVDYW5jZWwnKTsKCQkJCX0KCQkJfSwKCgkJCV92
ZXJpZnlHZW5EZWxDb21wbGV0ZTogZnVuY3Rpb24ocmVzdWx0KSB7CgkJCQl2YXIg
dCA9IHRoaXM7CgkJCQl0LmFqYXhSZXN1bHQgPSBudWxsOwoKCQkJCWlmIChyZXN1
bHQuaXNPSygpKSB7CgkJCQkJdC5hamF4UmVzdWx0ID0gcmVzdWx0LmdldERhdGEo
KTsKCQkJCX0KCgkJCQlpZiAodC5hamF4UmVzdWx0KSB7CgkJCQkJaWYgKHQuYWph
eFJlc3VsdC5lcnJvcl90eXBlID09PSAyKSB7CgkJCQkJCXQuX3ZlcmlmeUdlbkRl
bFBob25lRXJyb3IoKTsKCQkJCQl9IGVsc2UgewoJCQkJCQl0Ll92ZXJpZnlHZW5E
ZWxQaG9uZVN1Y2Nlc3MoKTsKCQkJCQl9CgkJCQl9CgkJCX0sCgoJCQlfdmVyaWZ5
R2VuRGVsUGhvbmVTdWNjZXNzOiBmdW5jdGlvbigpIHsKCQkJCXZhciB0ID0gdGhp
czsKCgkJCQl2YXIgJGMgPSB0Ll9nZXRMYXllcignZ2VuRGVsUGhvbmVTdWNjZXNz
JykuJGRpdjsKCQkJCXZhciAkcGhvbmUgPSAkKCdzcGFuLnBob25lOmZpcnN0Jywg
JGMpOwoJCQkJdmFyIHJlYWRhYmxlcGhvbmUgPSAnJzsKCgkJCQlpZiAodC5hamF4
UmVzdWx0KSB7CgkJCQkJcmVhZGFibGVwaG9uZSA9IHQuYWpheFJlc3VsdC5yZWFk
YWJsZV9waG9uZTsKCQkJCX0KCgkJCQkkcGhvbmUudGV4dChyZWFkYWJsZXBob25l
KTsKCgkJCQl0Ll9nZXRMYXllcignZ2VuRGVsUGhvbmVTdWNjZXNzJykuc2hvdygp
OwoKCQkJCXQudHJpZ2dlckhhbmRsZXIoJ3ZlcmlmeUdlbkRlbFN1Y2Nlc3MnLCBb
dC5kYXRhXSk7CgkJCX0sCgoJCQlfdmVyaWZ5R2VuRGVsUGhvbmVFcnJvcjogZnVu
Y3Rpb24oKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgJGMgPSB0Ll9nZXRM
YXllcignZ2VuRGVsJykuJGRpdjsKCQkJCXZhciAkZXJyb3IgPSAkKCdkaXYucmVk
OmZpcnN0LCAuanMtZXJyb3InLCAkYyk7CgkJCQl2YXIgdGV4dCA9ICcnOwoJCQkJ
aWYgKHQuYWpheFJlc3VsdCkgewoJCQkJCXRleHQgPSB0LmFqYXhSZXN1bHQudGV4
dDsKCQkJCX0KCQkJCSRlcnJvci5odG1sKHRleHQpLnNob3coKTsKCQkJfSwKCgkJ
CV9nZW5EZWxQaG9uZUNvbXBsZXRlOiBmdW5jdGlvbihyZXN1bHQpIHsKCQkJCXZh
ciB0ID0gdGhpczsKCQkJCXQuYWpheFJlc3VsdCA9IG51bGw7CgoJCQkJaWYgKHJl
c3VsdC5pc09LKCkpIHsKCQkJCQl0LmFqYXhSZXN1bHQgPSByZXN1bHQuZ2V0RGF0
YSgpOwoJCQkJfQoKCQkJCWlmICh0LmFqYXhSZXN1bHQpIHsKCQkJCQlpZiAodC5h
amF4UmVzdWx0LmVycm9yX3R5cGUgPT09IDIpIHsKCQkJCQkJdC5fZ2VuRGVsUGhv
bmVFcnJvcigpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXQuX2dlbkRlbFBob25lU3Vj
Y2VzcygpOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJdC5fZ2VuRGVsUGhvbmVF
cnJvcigpOwoJCQkJfQoJCQl9LAoKCQkJX2dlbkRlbFBob25lU3VjY2VzczogZnVu
Y3Rpb24oKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgJGMgPSB0Ll9nZXRM
YXllcignZ2VuRGVsJykuJGRpdjsKCQkJCXZhciAkcGhvbmUgPSAkKCdzcGFuLnBo
b25lOmZpcnN0JywgJGMpOwoJCQkJdmFyICRpbmZvID0gJCgnZGl2LmluZm86Zmly
c3QnLCAkYyk7CgkJCQl2YXIgcmVhZGFibGVwaG9uZSA9ICcnOwoKCQkJCXQucHJl
dkxheWVyID0gdC5fZ2V0TGF5ZXIoJ2dlbkRlbCcpLnNob3coKTsKCgkJCQlpZiAo
dC5hamF4UmVzdWx0KSB7CgkJCQkJaWYgKHQuYWpheFJlc3VsdC50ZXh0KSB7CgkJ
CQkJCWlmICh0LmFqYXhSZXN1bHQuZXJyb3JfdHlwZSA9PT0gMSkgewoJCQkJCQkJ
JGluZm8uaHRtbCh0LmFqYXhSZXN1bHQudGV4dCkuc2hvdygpOwoJCQkJCQl9CgkJ
CQkJfQoKCQkJCQlyZWFkYWJsZXBob25lID0gdC5hamF4UmVzdWx0LnJlYWRhYmxl
X3Bob25lOwoJCQkJfQoKCQkJCSRwaG9uZS50ZXh0KHJlYWRhYmxlcGhvbmUpOwoJ
CQl9LAoKCQkJX2dlbkRlbFBob25lRXJyb3I6IGZ1bmN0aW9uKCkgewoJCQkJdmFy
IHQgPSB0aGlzOwoJCQkJdmFyICRjID0gdC5fZ2V0TGF5ZXIoJ2NoZWNrJykuJGRp
djsKCQkJCXZhciAkbG9hZCA9ICQoJ2Rpdi5sb2FkUHJvZ3Jlc3M6Zmlyc3QsIC5q
cy1sb2FkUHJvZ3Jlc3MnLCAkYyk7CgkJCQl2YXIgJGVycm9yID0gJCgnZGl2LnJl
ZDpmaXJzdCwgLmpzLWVycm9yJywgJGMpOwoJCQkJdmFyICRjb250cm9scyA9ICQo
J2Rpdi5jb250cm9sczpmaXJzdCcsICRjKTsKCQkJCXZhciB0ZXh0ID0gTGFuZy5n
ZXQoJ3ZlcmlmeV9waG9uZV9lcnJvcicpOwoJCQkJaWYgKHQuYWpheFJlc3VsdCkg
ewoJCQkJCXRleHQgPSB0LmFqYXhSZXN1bHQudGV4dDsKCQkJCX0KCQkJCS8vJGxv
YWQuaGlkZSgpOwoJCQkJJGVycm9yLmh0bWwodGV4dCkuc2hvdygpOwoJCQkJJGNv
bnRyb2xzLmhpZGUoKTsKCQkJfSwKCgkJCV9kZWxldGVQaG9uZUNvbXBsZXRlOiBm
dW5jdGlvbihyZXN1bHQpIHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXQuYWpheFJl
c3VsdCA9IG51bGw7CgkJCQlpZiAocmVzdWx0LmlzT0soKSkgewoJCQkJCXQuYWph
eFJlc3VsdCA9IHJlc3VsdC5nZXREYXRhKCk7CgkJCQl9CgkJCQlpZiAodC5hamF4
UmVzdWx0KSB7CgkJCQkJLy8gTUFJTC01MDU4IC8vIE1BSUwtMTA3NDAKCQkJCQlp
ZiAodC5hamF4UmVzdWx0ICYmICh0LmFqYXhSZXN1bHQucmVzdWx0ID09IDU0Mzcw
OSB8fCB0LmFqYXhSZXN1bHQucmVzdWx0ID09ICdQSE9ORV9MQVNUX1ZFUklGSUVE
X1dPX1BXRF9RU1ROJykgKSB7CgkJCQkJCXQuX2dldExheWVyQXN5bmMoJ2FkZFBh
c3N3b3JkUXVlc3Rpb24nLCBmdW5jdGlvbiAobGF5ZXIpIHsKCQkJCQkJCWxheWVy
LnNob3coKTsKCQkJCQkJfSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJdC50cmlnZ2Vy
SGFuZGxlcignZGVsZXRlUGhvbmVTdWNjZXNzJywgW3QuYWpheFJlc3VsdCwgdC5k
YXRhXSk7CgkJCQl9CgkJCQl9CgkJCX0sCgoJCQlfbm9TTVMxTGF5ZXJDYWxsYmFj
azogZnVuY3Rpb24oc3RhdHVzKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQlpZiAo
c3RhdHVzKSB7CgkJCQkJaWYgKHQub3B0aW9ucy51c2VyLmlzRGlzYWJsZWQpIHsK
CQkJCQkJdC52ZXJpZnlTb21lUGhvbmUodC5kYXRhLnBob25lY29kZSwgdC5kYXRh
LnBob25lKTsKCQkJCQl9IGVsc2UgewoJCQkJCQl0LmNoZWNrKHQuZGF0YS5waG9u
ZWNvZGUsIHQuZGF0YS5waG9uZSk7CgkJCQkJfQoJCQkJfQoJCQl9LAoKCQkJX3Jl
dHVybkxpbmtDbGljazogZnVuY3Rpb24oZXZ0KSB7CgkJCQl2YXIgdCA9IHRoaXM7
CgkJCQl0LnByZXZMYXllci5zaG93KCk7CgkJCQlldnQucHJldmVudERlZmF1bHQo
KTsKCQkJfSwKCgkJCV93aXRob3V0UGhvbmVMaW5rQ2xpY2s6IGZ1bmN0aW9uKGV2
dCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdC5fZ2V0TGF5ZXIoJ25vU01TMScp
LmhpZGUoKTsKCQkJCXQuX2dldExheWVyKCdub1NNUzInKS5oaWRlKCk7CgkJCQl0
Ll9nZXRMYXllcignY2hlY2snKS5oaWRlKCk7CgkJCQlldnQucHJldmVudERlZmF1
bHQoKTsKCQkJCXQudHJpZ2dlckhhbmRsZXIoJ3dpdGhvdXRQaG9uZScpOwoJCQl9
LAoKCQkJX2VkaXRQaG9uZUxpbmtDbGljazogZnVuY3Rpb24oZXZ0KSB7CgkJCQl2
YXIgdCA9IHRoaXM7CgkJCQl0Ll9nZXRMYXllcignbm9TTVMxJykuaGlkZSgpOwoJ
CQkJdC5fZ2V0TGF5ZXIoJ25vU01TMicpLmhpZGUoKTsKCQkJCXQuX2dldExheWVy
KCdjaGVjaycpLmhpZGUoKTsKCQkJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJ
dC50cmlnZ2VySGFuZGxlcignZWRpdFBob25lJyk7CgkJCX0sCgoJCQlfZ2V0U01T
U3RhdHVzTGlua0NsaWNrOiBmdW5jdGlvbihldnQpIHsKCQkJCXZhciB0ID0gdGhp
czsKCQkJCXQuX2dldFNNU1N0YXR1cygpOwoJCQkJZXZ0LnByZXZlbnREZWZhdWx0
KCk7CgkJCX0sCgoJCQlfZ2V0U01TU3RhdHVzOiBmdW5jdGlvbigpIHsKCQkJCXZh
ciB0ID0gdGhpczsKCQkJCXZhciBsYXllciA9IHQuX2dldExheWVyKCdjaGVjaycp
OwoJCQkJdmFyICRlcnJvciA9ICQoJ2Rpdi5yZWQ6Zmlyc3QsIC5qcy1lcnJvcics
IGxheWVyLiRkaXYpOwoJCQkJdmFyICRsb2FkID0gJCgnZGl2LmxvYWRQcm9ncmVz
czpmaXJzdCcsIGxheWVyLiRkaXYpOwoKCQkJCXQuX3NlbmQoewoJCQkJCSdmdW5j
X25hbWUnOiAnZ2V0X3N0YXR1cycsCgkJCQkJJ2RhdGEnOiB0LmRhdGEsCgkJCQkJ
J2NvbXBsZXRlJzogdC5fZ2V0U01TU3RhdHVzQ29tcGxldGUKCQkJCX0pOwoKCQkJ
CSRlcnJvci5oaWRlKCk7CgkJCQkkbG9hZC5zaG93KCk7CgoJCQkJbGF5ZXIuc2hv
dygpOwoJCQl9LAoKCQkJX2dldFNNU1N0YXR1c0NvbXBsZXRlOiBmdW5jdGlvbihy
ZXN1bHQpIHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXQuYWpheFJlc3VsdCA9IG51
bGw7CgoJCQkJaWYgKHJlc3VsdC5pc09LKCkpIHsKCQkJCQl0LmFqYXhSZXN1bHQg
PSByZXN1bHQuZ2V0RGF0YSgpOwoJCQkJfQoKCQkJCWlmICh0LmFqYXhSZXN1bHQp
IHsKCQkJCQlpZiAodC5hamF4UmVzdWx0LnN0YXR1cyA9PSAxKSB7CgkJCQkJCXQu
X25vU01TMUxheWVyU2hvdygpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXQuX25vU01T
MkxheWVyU2hvdygpOwoJCQkJCX0KCQkJCX0KCQkJfSwKCgkJCV9ub1NNUzFMYXll
clNob3c6IGZ1bmN0aW9uKCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdmFyICRj
ID0gdC5fZ2V0TGF5ZXIoJ25vU01TMScpLiRkaXY7CgkJCQl2YXIgJHBob25lID0g
JCgnc3Bhbi5waG9uZTpmaXJzdCwgLmpzLXBob25lJywgJGMpOwoJCQkJdmFyICR0
aW1lID0gJCgnc3Bhbi50aW1lOmZpcnN0LCAuanMtdGltZScsICRjKTsKCQkJCXZh
ciByZWFkYWJsZXBob25lID0gJyc7CgkJCQl2YXIgbWludXRlcyA9IDA7CgoJCQkJ
aWYgKHQuYWpheFJlc3VsdCkgewoJCQkJCXJlYWRhYmxlcGhvbmUgPSB0LmFqYXhS
ZXN1bHQucmVhZGFibGVfcGhvbmU7CgkJCQkJbWludXRlcyA9IHQuYWpheFJlc3Vs
dC50aW1lX3Bhc3NlZDsKCQkJCX0KCgkJCQkkcGhvbmUudGV4dChyZWFkYWJsZXBo
b25lKTsKCQkJCSR0aW1lLnRleHQodC5fZ2V0UmVhZGFibGVUaW1lQnlNaW51dGVz
KG1pbnV0ZXMpKTsKCgkJCQl0Ll9nZXRMYXllcignbm9TTVMxJykuc2hvdygpOwoJ
CQl9LAoKCQkJX2dldFJlYWRhYmxlVGltZUJ5TWludXRlczogZnVuY3Rpb24obSkg
ewoJCQkJdmFyIHMgPSAnJzsKCQkJCW0gPSBwYXJzZUludChtKSB8fCAwOwoJCQkJ
aWYgKG0gPCA1KSBzID0gTGFuZy5nZXQoJ3Bob25lbWFuYWdlci5sdDVtaW4nKTsK
CQkJCWVsc2UgaWYgKG0gPCAxMCkgcyA9IExhbmcuZ2V0KCdwaG9uZW1hbmFnZXIu
bHQxMG1pbicpOwoJCQkJZWxzZSBpZiAobSA8IDE1KSBzID0gTGFuZy5nZXQoJ3Bo
b25lbWFuYWdlci5sdDE1bWluJyk7CgkJCQllbHNlIGlmIChtIDwgMjApIHMgPSBM
YW5nLmdldCgncGhvbmVtYW5hZ2VyLmx0MjBtaW4nKTsKCQkJCWVsc2UgaWYgKG0g
PCAzMCkgcyA9IExhbmcuZ2V0KCdwaG9uZW1hbmFnZXIubHQzMG1pbicpOwoJCQkJ
ZWxzZSBpZiAobSA8IDYwKSBzID0gTGFuZy5nZXQoJ3Bob25lbWFuYWdlci5sdDYw
bWluJyk7CgkJCQllbHNlIHMgPSBMYW5nLmdldCgncGhvbmVtYW5hZ2VyLmd0NjBt
aW4nKTsKCQkJCXJldHVybiBzOwoJCQl9LAoKCQkJX25vU01TMkxheWVyU2hvdzog
ZnVuY3Rpb24oKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgbGF5ZXIgPSB0
Ll9nZXRMYXllcignbm9TTVMyJyk7CgkJCQl2YXIgJHBob25lID0gJCgnc3Bhbi5w
aG9uZTpmaXJzdCcsIGxheWVyLiRkaXYpOwoJCQkJdmFyIHJlYWRhYmxlcGhvbmUg
PSAnJzsKCgkJCQlpZiAodC5hamF4UmVzdWx0KSB7CgkJCQkJcmVhZGFibGVwaG9u
ZSA9IHQuYWpheFJlc3VsdC5yZWFkYWJsZV9waG9uZTsKCQkJCX0KCgkJCQkkcGhv
bmUudGV4dChyZWFkYWJsZXBob25lKTsKCQkJCWxheWVyLnNob3coKTsKCQkJfSwK
CgkJCV9zZWxlY3RWZXJpZnlTb21lUGhvbmVDYWxsYmFjazogZnVuY3Rpb24gKHN0
YXR1cykgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdmFyIGxheWVyID0gdC5fZ2V0
TGF5ZXIoJ3NlbGVjdFZlcmlmeVNvbWVQaG9uZScpOwoJCQkJaWYgKHN0YXR1cykg
ewoJCQkJCXZhciAkcGhvbmVTZWxlY3QgPSAkKCcuanMtcGhvbmUnLCBsYXllci4k
ZGl2KTsKCQkJCQl2YXIgcGhvbmUgPSAkcGhvbmVTZWxlY3QudmFsKCk7CgkJCQkJ
dC52ZXJpZnlTb21lUGhvbmUoJycsIHBob25lKTsKCQkJCX0KCQkJfSwKCgkJCV92
ZXJpZnlTb21lUGhvbmVTaW5nU21zQ2FsbGJhY2s6IGZ1bmN0aW9uIChzdGF0dXMp
IHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXZhciBsYXllciA9IHQuX2dldExheWVy
KCd2ZXJpZnlTb21lUGhvbmVTaW5nU01TJyk7CgkJCQlpZiAoc3RhdHVzKSB7CgkJ
CQkJdC5kYXRhLmNvZGUgPSAkLnRyaW0oJCgnaW5wdXRbbmFtZT0iY29kZSJdJywg
bGF5ZXIuJGRpdikudmFsKCkpOwoJCQkJCWlmICh0LmRhdGEuY29kZSkgewoJCQkJ
CQl0Ll9zZW5kKHsKCQkJCQkJCSdmdW5jX25hbWUnOiAnc2VuZF9hdXRoX2NvZGUn
LAoJCQkJCQkJJ2RhdGEnOiB0LmRhdGEsCgkJCQkJCQknY29tcGxldGUnOiB0Ll92
ZXJpZnlTb21lUGhvbmVTaW5nU21zQ29tcGxldGUKCQkJCQkJfSk7CgkJCQkJfSBl
bHNlIHsKCQkJCQkJdC5hamF4UmVzdWx0ID0ge3RleHQ6IExhbmcuZ2V0KCdjYXB0
Y2hhX2ludmFsaWQnKX07CgkJCQkJCXQuX3ZlcmlmeVNvbWVQaG9uZVNpbmdTbXNF
cnJvcigpOwoJCQkJCX0KCQkJCQlyZXR1cm4gMTsKCQkJCX0gZWxzZSB7CgkJCQkJ
dC50cmlnZ2VySGFuZGxlcigndmVyaWZ5UGhvbmVDYW5jZWwnLCBbdC5kYXRhXSk7
CgkJCQl9CgkJCX0sCgoJCQlfc2lnbnVwU21zQ2FsbGJhY2s6IGZ1bmN0aW9uKHN0
YXR1cykgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdmFyICRjID0gdC5fZ2V0TGF5
ZXIoJ3NpbmdTTVMnKS4kZGl2OwoKCQkJCWlmIChzdGF0dXMpIHsKCQkJCQl0LmRh
dGEuY29kZSA9ICQudHJpbSgkKCdpbnB1dFtuYW1lPSJjb2RlIl0nLCAkYykudmFs
KCkpOwoKCQkJCQlpZiAodC5vcHRpb25zLnBhc3NjaGVjaykgewoJCQkJCQl0Ll9z
ZW5kKHsKCQkJCQkJCSdmdW5jX25hbWUnOiAndmVyaWZ5ZnJvbXJlbWluZCcsCgkJ
CQkJCQknZGF0YSc6IHQuZGF0YSwKCQkJCQkJCSdjb21wbGV0ZSc6IHQuX3Zlcmlm
eUNvbXBsZXRlCgkJCQkJCX0pOwoJCQkJCX0gZWxzZSB7CgoJCQkJCQl0LmRhdGEu
cGFzc3dvcmQgPSAkLnRyaW0oJCgnaW5wdXRbbmFtZT0icGFzc3dvcmQiXScsICRj
KS52YWwoKSk7CgoJCQkJCQl0Ll9zZW5kKHsKCQkJCQkJCSdmdW5jX25hbWUnOiAn
dmVyaWZ5JywKCQkJCQkJCSdkYXRhJzogdC5kYXRhLAoJCQkJCQkJJ2NvbXBsZXRl
JzogdC5fdmVyaWZ5Q29tcGxldGUKCQkJCQkJfSk7CgkJCQkJfQoKCQkJCQlyZXR1
cm4gMTsKCQkJCX0gZWxzZSB7CgkJCQkJdC50cmlnZ2VySGFuZGxlcigndmVyaWZ5
UGhvbmVDYW5jZWwnLCBbdC5kYXRhXSk7CiAgICAgICAgICAgICAgICAgICAgJChk
b2N1bWVudCkudHJpZ2dlcigiUGhvbmVNYW5hZ2VyLnZlcmlmeVBob25lQ2FuY2Vs
Iik7CgkJCQl9CgkJCX0sCgoJCQlfc2lnbnVwUGhvbmVDYWxsYmFjazogZnVuY3Rp
b24oc3RhdHVzKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgJGMgPSB0Ll9n
ZXRMYXllcignc2lnbnVwUGhvbmUnKS4kZGl2OwoKCQkJCWlmIChzdGF0dXMpIHsK
CQkJCQl0LmRhdGEucGhvbmVjb2RlID0gJC50cmltKCQoJ3NlbGVjdFtuYW1lPSJw
aG9uZWNvZGUiXScsICRjKS52YWwoKSk7CgkJCQkJdC5kYXRhLnBob25lID0gJC50
cmltKCQoJ2lucHV0W25hbWU9InBob25lIl0nLCAkYykudmFsKCkpOwoJCQkJCXQu
ZGF0YS5pc21vYmlsZSA9ICQoJ2lucHV0W25hbWU9ImlzbW9iaWxlIl06Y2hlY2tl
ZCcsICRjKS5sZW5ndGg7CgoJCQkJCXQuX3NlbmQoewoJCQkJCQknZnVuY19uYW1l
JzogJ2FkZG5ldycsCgkJCQkJCSdkYXRhJzogdC5kYXRhLAoJCQkJCQknY29tcGxl
dGUnOiB0Ll9zaWdudXBQaG9uZUNvbXBsZXRlCgkJCQkJfSk7CgoJCQkJCXJldHVy
biAxOwoJCQkJfQoJCQl9LAoKCQkJX3NpZ251cFBob25lQ29tcGxldGU6IGZ1bmN0
aW9uKHJlc3VsdCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdC5hamF4UmVzdWx0
ID0gbnVsbDsKCgkJCQlpZiAocmVzdWx0LmlzT0soKSkgewoJCQkJCXQuYWpheFJl
c3VsdCA9IHJlc3VsdC5nZXREYXRhKCk7CgkJCQl9CgoJCQkJaWYgKHQuYWpheFJl
c3VsdCkgewoJCQkJCWlmICh0LmFqYXhSZXN1bHQuZXJyb3JfdHlwZSA9PT0gMiB8
fCB0LmFqYXhSZXN1bHQuZXJyb3JfdHlwZSA9PT0gNCkgewoJCQkJCQl0Ll9zaWdu
dXBQaG9uZUVycm9yKCk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJdC5fc2lnbnVwUGhv
bmVTdWNjZXNzKCk7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQl0Ll9zaWdudXBQ
aG9uZUVycm9yKCk7CgkJCQl9CgkJCX0sCgoJCQlfc2lnbnVwUGhvbmVFcnJvcjog
ZnVuY3Rpb24oKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgJGMgPSB0Ll9n
ZXRMYXllcignc2lnbnVwUGhvbmUnKS4kZGl2OwoJCQkJdmFyICRlcnJvciA9ICQo
J2Rpdi5yZWQ6Zmlyc3QsIC5qcy1lcnJvcicsICRjKTsKCQkJCXZhciB0ZXh0ID0g
Jyc7CgkJCQlpZiAodC5hamF4UmVzdWx0KSB7CgkJCQkJdGV4dCA9IHQuYWpheFJl
c3VsdC50ZXh0OwoJCQkJfQoJCQkJJGVycm9yLmh0bWwodGV4dCkuc2hvdygpOwoJ
CQl9LAoKCQkJX3NpZ251cFBob25lU3VjY2VzczogZnVuY3Rpb24oKSB7CgkJCQl2
YXIgdCA9IHRoaXM7CgkJCQl2YXIgJGMgPSB0Ll9nZXRMYXllcignc2luZ1NNUycp
LiRkaXY7CgkJCQl2YXIgJGVycm9yID0gJCgnZGl2LnJlZDpmaXJzdCwgLmpzLWVy
cm9yJywgJGMpOwoJCQkJdmFyICRpbmZvID0gJCgnZGl2LmluZm86Zmlyc3QnLCAk
Yyk7CgkJCQl2YXIgJG1haW5UZXh0ID0gJCgnZGl2Lm1haW5UZXh0OmZpcnN0Jywg
JGMpOwoJCQkJdmFyICRwYXNzd29yZCA9ICQoJy5qcy1wYXNzd29yZCcsICRjKTsK
CgkJCQkkZXJyb3IuYWRkKCRpbmZvKS5hZGQoJG1haW5UZXh0KS5hZGQoJHBhc3N3
b3JkKS5oaWRlKCk7CgoJCQkJaWYgKHQuYWpheFJlc3VsdCkgewoJCQkJCWlmICh0
LmFqYXhSZXN1bHQudGV4dCkgewoJCQkJCQlpZiAodC5hamF4UmVzdWx0LmVycm9y
X3R5cGUgPT09IDEpIHsKCQkJCQkJCSRpbmZvLmh0bWwodC5hamF4UmVzdWx0LnRl
eHQpLnNob3coKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRtYWluVGV4dC5odG1s
KHQuYWpheFJlc3VsdC50ZXh0KS5zaG93KCk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9
CgoJCQkJaWYgKHQuZGF0YS5pc21vYmlsZSkgewoJCQkJCXQucHJldkxheWVyID0g
dC5fZ2V0TGF5ZXIoJ3NpbmdTTVMnKS5zaG93KCk7CgkJCQl9IGVsc2UgewoJCQkJ
CXQuX2dldExheWVyKCdzaWdudXBQaG9uZScpLmhpZGUoKTsKCQkJCX0KCgkJCQl0
LnRyaWdnZXJIYW5kbGVyKCdzaWdudXBQaG9uZVN1Y2Nlc3MnLCBbdC5kYXRhXSk7
CiAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdQaG9uZU1hbmFn
ZXIuc2lnbnVwUGhvbmVTdWNjZXNzJyk7CgkJCX0sCgoJCQlfYWRkUGFzc3dvcmRR
dWVzdGlvbkNhbGxiYWNrOiBmdW5jdGlvbiAoc3RhdHVzKSB7CgkJCQl2YXIgJGZv
cm0gPSAkKCdmb3JtJywgdGhpcy5fZ2V0TGF5ZXIoJ2FkZFBhc3N3b3JkUXVlc3Rp
b24nKS4kZGl2KTsKCQkJCWlmIChzdGF0dXMpIHsKCQkJCQltYWlscnUuQWpheCh7
CgkJCQkJCXR5cGU6ICdQT1NUJywKCQkJCQkJdXJsOiAkZm9ybS5hdHRyKCdhY3Rp
b24nKSwKCQkJCQkJZGF0YTogJC5leHRlbmQoe2FqYXhfY2FsbDogMSwgZnVuY19u
YW1lOiAncHdkX3F1ZXN0aW9uJ30sICRmb3JtLnRvT2JqZWN0KCkpLAoJCQkJCQlj
b21wbGV0ZTogJC5wcm94eSh0aGlzLl9hZGRQYXNzd29yZFF1ZXN0aW9uQ29tcGxl
dGUsIHRoaXMpCgkJCQkJfSk7CgkJCQkJcmV0dXJuIDE7CgkJCQl9CgkJCX0sCgoJ
CQlfYWRkUGFzc3dvcmRRdWVzdGlvbkNvbXBsZXRlOiBmdW5jdGlvbiAocmVzdWx0
KSB7CgoJCQkJdmFyIHQgPSB0aGlzLCBzdGF0dXMsIGVycm9yLCBlcnJvclN0cjsK
CQkJCXQuYWpheFJlc3VsdCA9IG51bGw7CgoJCQkJaWYgKHJlc3VsdC5pc09LKCkp
IHsKCQkJCQl0LmFqYXhSZXN1bHQgPSByZXN1bHQuZ2V0RGF0YSgpOwoJCQkJfQoK
CQkJCWlmICh0LmFqYXhSZXN1bHQpIHsKCQkJCQlzdGF0dXMgPSB0LmFqYXhSZXN1
bHQucmVzdWx0OwoJCQkJfQoKCQkJCWlmIChzdGF0dXMgPT0gJ09LJykgewoJCQkJ
CXRoaXMuZGVsZXRlUGhvbmUoe0lEOnRoaXMuZGF0YS5waG9uZX0pOwoJCQkJfSBl
bHNlIHsKCgkJCQkJdmFyICRlcnJvciA9ICQoJy5qcy1lcnJvcicsIHRoaXMuX2dl
dExheWVyKCdhZGRQYXNzd29yZFF1ZXN0aW9uJykuJGRpdik7CgoJCQkJCWlmICh0
LmFqYXhSZXN1bHQpIHsKCQkJCQkJZXJyb3IgPSB0LmFqYXhSZXN1bHQuZXJyb3I7
CgkJCQkJfQoKCQkJCQlpZiAoZXJyb3IgPT0gJ05PX0FVVEgnKSB7CgkJCQkJCWVy
cm9yU3RyID0gTGFuZy5nZXQoJ2RlbGV0ZV9waG9uZV9lcnJvci5OT19BVVRIJyk7
CgkJCQkJfSBlbHNlIGlmIChlcnJvciA9PSAnRU1QVFlfUVVFU1RJT04nKSB7CgkJ
CQkJCWVycm9yU3RyID0gTGFuZy5nZXQoJ2RlbGV0ZV9waG9uZV9lcnJvci5FTVBU
WV9RVUVTVElPTicpOwoJCQkJCX0gZWxzZSBpZiAoZXJyb3IgPT0gJ0VNUFRZX0FO
U1dFUicpIHsKCQkJCQkJZXJyb3JTdHIgPSBMYW5nLmdldCgnZGVsZXRlX3Bob25l
X2Vycm9yLkVNUFRZX0FOU1dFUicpOwoJCQkJCX0gZWxzZSBpZiAoZXJyb3IgPT0g
J0hBQ0tFUicpIHsKCQkJCQkJZXJyb3JTdHIgPSBMYW5nLmdldCgnZGVsZXRlX3Bo
b25lX2Vycm9yLkhBQ0tFUicpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWVycm9yU3Ry
ID0gTGFuZy5nZXQoJ2RlbGV0ZV9waG9uZV9lcnJvci5ERUZBVUxUJyk7CgkJCQkJ
fQoKCQkJCQkkZXJyb3IuaHRtbChlcnJvclN0cikuc2hvdygpOwoJCQkJfQoJCQl9
LAoKCQkJX2FkZFBob25lQ2FsbGJhY2s6IGZ1bmN0aW9uKHN0YXR1cykgewoJCQkJ
dmFyIHQgPSB0aGlzOwoJCQkJdmFyICRjID0gdC5fZ2V0TGF5ZXIoJ2FkZFBob25l
JykuJGRpdjsKCgkJCQlpZiAoc3RhdHVzKSB7CgkJCQkJdC5kYXRhLnBob25lY29k
ZSA9ICQudHJpbSgkKCdzZWxlY3RbbmFtZT0icGhvbmVjb2RlIl0nLCAkYykudmFs
KCkpOwoJCQkJCXQuZGF0YS5waG9uZSA9ICQudHJpbSgkKCdpbnB1dFtuYW1lPSJw
aG9uZSJdJywgJGMpLnZhbCgpKTsKCQkJCQl0LmRhdGEuaXNtb2JpbGUgPSAkKCdp
bnB1dFtuYW1lPSJpc21vYmlsZSJdOmNoZWNrZWQnLCAkYykubGVuZ3RoOwoKCQkJ
CQlpZiAodC5vcHRpb25zLnBhc3NjaGVjaykgewoJCQkJCQl0Ll9zZW5kKHsKCQkJ
CQkJCSdmdW5jX25hbWUnOiAnYWRkZnJvbXJlbWluZCcsCgkJCQkJCQknZGF0YSc6
IHQuZGF0YSwKCQkJCQkJCSdjb21wbGV0ZSc6IHQuX2FkZFBob25lQ29tcGxldGUK
CQkJCQkJfSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJdC5fc2VuZCh7CgkJCQkJCQkn
ZnVuY19uYW1lJzogJ2FkZG5ldycsCgkJCQkJCQknZGF0YSc6IHQuZGF0YSwKCQkJ
CQkJCSdjb21wbGV0ZSc6IHQuX2FkZFBob25lQ29tcGxldGUKCQkJCQkJfSk7CgkJ
CQkJfQoKCQkJCQlyZXR1cm4gMTsKCQkJCX0KCQkJfSwKCgkJCV9hZGRQaG9uZUNv
bXBsZXRlOiBmdW5jdGlvbihyZXN1bHQpIHsKCQkJCXZhciB0ID0gdGhpczsKCQkJ
CXQuYWpheFJlc3VsdCA9IG51bGw7CgoJCQkJaWYgKHJlc3VsdC5pc09LKCkpIHsK
CQkJCQl0LmFqYXhSZXN1bHQgPSByZXN1bHQuZ2V0RGF0YSgpOwoJCQkJfQoKCQkJ
CWlmICh0LmFqYXhSZXN1bHQpIHsKCQkJCQlpZiAodC5hamF4UmVzdWx0LmVycm9y
X3R5cGUgPT09IDIgfHwgdC5hamF4UmVzdWx0LmVycm9yX3R5cGUgPT09IDQpIHsK
CQkJCQkJdC5fYWRkUGhvbmVFcnJvcigpOwoJCQkJCX0gZWxzZSBpZiAodC5hamF4
UmVzdWx0LmVycm9yX3R5cGUgPT09IDUpIHsKCQkJCQkJaWYgKHQub3B0aW9ucy51
c2VyLmlzRGlzYWJsZWQpIHsKCQkJCQkJCXQudmVyaWZ5U29tZVBob25lKHQuZGF0
YS5waG9uZWNvZGUsIHQuZGF0YS5waG9uZSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJ
CQl0Ll9hZGRQaG9uZUFscmVhZHlFeGlzdHMoKTsKCQkJCQkJfQoJCQkJCX0gZWxz
ZSB7CgkJCQkJCXQuX2FkZFBob25lU3VjY2VzcygpOwoJCQkJCX0KCQkJCX0gZWxz
ZSB7CgkJCQkJdC5fYWRkUGhvbmVFcnJvcigpOwoJCQkJfQoJCQl9LAoKCQkJX2Fk
ZFBob25lQWxyZWFkeUV4aXN0c0NhbGxiYWNrOiBmdW5jdGlvbihldnQsIHN0YXR1
cykgewoJCQkJdGhpcy50cmlnZ2VySGFuZGxlcignYWRkUGhvbmVBbHJlYWR5RXhp
c3RzU3VjY2VzcycsIFt0aGlzLmFqYXhSZXN1bHQsIHRoaXMuZGF0YV0pOwoJCQl9
LAoKCQkJX2FkZFBob25lQWxyZWFkeUV4aXN0czogZnVuY3Rpb24gKCkgewoJCQkJ
dmFyIHQgPSB0aGlzOwoJCQkJTGF5ZXIuZ2V0KCdhZGRQaG9uZUFscmVhZHlFeGlz
dHMnLCBmdW5jdGlvbiAobGF5ZXIpIHsKCQkJCQl2YXIgJHBob25lID0gJCgnLmpz
LXBob25lJywgbGF5ZXIuJGRpdik7CgkJCQkJdmFyIHJlYWRhYmxlcGhvbmUgPSAn
JzsKCQkJCQlpZiAodC5hamF4UmVzdWx0KSB7CgkJCQkJCXJlYWRhYmxlcGhvbmUg
PSB0LmFqYXhSZXN1bHQucmVhZGFibGVfcGhvbmU7CgkJCQkJfQoJCQkJCSRwaG9u
ZS50ZXh0KHJlYWRhYmxlcGhvbmUpOwoJCQkJCWxheWVyLm9uZSgnY2FsbGJhY2sn
LCAkLnByb3h5KHQuX2FkZFBob25lQWxyZWFkeUV4aXN0c0NhbGxiYWNrLCB0KSk7
CgkJCQkJbGF5ZXIuc2hvdygpOwoJCQkJfSk7CgkJCX0sCgoJCQlfYWRkUGhvbmVF
cnJvcjogZnVuY3Rpb24oKSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgbGF5
ZXIgPSB0Ll9nZXRMYXllcignYWRkUGhvbmUnKTsKCQkJCXZhciAkZXJyb3IgPSAk
KCdkaXYucmVkOmZpcnN0LCAuanMtZXJyb3InLCBsYXllci4kZGl2KTsKCQkJCXZh
ciB0ZXh0ID0gJyc7CgkJCQlpZiAodC5hamF4UmVzdWx0KSB7CgkJCQkJdGV4dCA9
IHQuYWpheFJlc3VsdC50ZXh0OwoJCQkJfQoJCQkJJGVycm9yLmh0bWwodGV4dCku
c2hvdygpOwoJCQl9LAoKCQkJX2FkZFBob25lU3VjY2VzczogZnVuY3Rpb24oKSB7
CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl2YXIgc2lnbkxheWVyID0gdC5fZ2V0TGF5
ZXIoJ3NpbmdTTVMnKTsKCQkJCXZhciBhZGRQaG9uZUxheWVyID0gdC5fZ2V0TGF5
ZXIoJ2FkZFBob25lJyk7CgkJCQl2YXIgJGVycm9yID0gJCgnZGl2LnJlZDpmaXJz
dCwgLmpzLWVycm9yJywgc2lnbkxheWVyLiRkaXYpOwoJCQkJdmFyICRpbmZvID0g
JCgnZGl2LmluZm86Zmlyc3QnLCBzaWduTGF5ZXIuJGRpdik7CgkJCQl2YXIgJG1h
aW5UZXh0ID0gJCgnZGl2Lm1haW5UZXh0OmZpcnN0Jywgc2lnbkxheWVyLiRkaXYp
OwoJCQkJdmFyICRwYXNzd29yZCA9ICQoJy5qcy1wYXNzd29yZCcsIHNpZ25MYXll
ci4kZGl2KTsKCgkJCQkkZXJyb3IuYWRkKCRpbmZvKS5hZGQoJG1haW5UZXh0KS5h
ZGQoJHBhc3N3b3JkKS5oaWRlKCk7CgoJCQkJaWYgKHQuYWpheFJlc3VsdCkgewoJ
CQkJCWlmICh0LmFqYXhSZXN1bHQudGV4dCkgewoJCQkJCQlpZiAodC5hamF4UmVz
dWx0LmVycm9yX3R5cGUgPT09IDEpIHsKCQkJCQkJCSRpbmZvLmh0bWwodC5hamF4
UmVzdWx0LnRleHQpLnNob3coKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRtYWlu
VGV4dC5odG1sKHQuYWpheFJlc3VsdC50ZXh0KS5zaG93KCk7CgkJCQkJCX0KCQkJ
CQl9CgkJCQl9CgoJCQkJaWYgKHQub3B0aW9ucy5Bc2tQYXNzd29yZCkgewoJCQkJ
CSRwYXNzd29yZC5zaG93KCk7CgkJCQl9CgoJCQkJaWYgKHQuZGF0YS5pc21vYmls
ZSkgewoJCQkJCXQucHJldkxheWVyID0gc2lnbkxheWVyLnNob3coKTsKCQkJCX0g
ZWxzZSB7CgkJCQkJYWRkUGhvbmVMYXllci5oaWRlKCk7CgkJCQl9CgoJCQkJdC50
cmlnZ2VySGFuZGxlcignYWRkUGhvbmVTdWNjZXNzJywgW3QuYWpheFJlc3VsdCwg
dC5kYXRhXSk7CgkJCX0sCgoJCQlfdmVyaWZ5U29tZVBob25lU3VjY2VzczogZnVu
Y3Rpb24gKCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdmFyIHNpZ25MYXllciA9
IHQuX2dldExheWVyKCd2ZXJpZnlTb21lUGhvbmVTaW5nU01TJyk7CgkJCQl2YXIg
JGVycm9yID0gJCgnZGl2LnJlZDpmaXJzdCwgLmpzLWVycm9yJywgc2lnbkxheWVy
LiRkaXYpOwoJCQkJdmFyICRpbmZvID0gJCgnZGl2LmluZm86Zmlyc3QnLCBzaWdu
TGF5ZXIuJGRpdik7CgkJCQl2YXIgJG1haW5UZXh0ID0gJCgnZGl2Lm1haW5UZXh0
OmZpcnN0Jywgc2lnbkxheWVyLiRkaXYpOwoKCQkJCSRlcnJvci5hZGQoJGluZm8p
LmFkZCgkbWFpblRleHQpLmhpZGUoKTsKCgkJCQlpZiAodC5hamF4UmVzdWx0ICYm
IHQuYWpheFJlc3VsdC50ZXh0KSB7CgkJCQkJaWYgKHQuYWpheFJlc3VsdC5lcnJv
cl90eXBlID09PSAxKSB7CgkJCQkJCSRpbmZvLmh0bWwodC5hamF4UmVzdWx0LnRl
eHQpLnNob3coKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkbWFpblRleHQuaHRtbCh0
LmFqYXhSZXN1bHQudGV4dCkuc2hvdygpOwoJCQkJCX0KCQkJCX0KCgkJCQl0LnBy
ZXZMYXllciA9IHNpZ25MYXllci5zaG93KCk7CgoJCQkJdC50cmlnZ2VySGFuZGxl
cignYWRkUGhvbmVTdWNjZXNzJywgW3QuYWpheFJlc3VsdCwgdC5kYXRhXSk7CgkJ
CX0sCgoJCQlfdmVyaWZ5U29tZVBob25lU2luZ1Ntc0NvbXBsZXRlOiBmdW5jdGlv
biAocmVzdWx0KSB7CgkJCQl2YXIgdCA9IHRoaXM7CgkJCQl0LmFqYXhSZXN1bHQg
PSBudWxsOwoKCQkJCWlmIChyZXN1bHQuaXNPSygpKSB7CgkJCQkJdC5hamF4UmVz
dWx0ID0gcmVzdWx0LmdldERhdGEoKTsKCQkJCX0KCgkJCQlpZiAodC5hamF4UmVz
dWx0KSB7CgkJCQkJaWYgKHQuYWpheFJlc3VsdC5lcnJvcl90eXBlKSB7CgkJCQkJ
CXQuX3ZlcmlmeVNvbWVQaG9uZVNpbmdTbXNFcnJvcigpOwoJCQkJCX0gZWxzZSB7
CgkJCQkJCXQuX3ZlcmlmeVN1Y2Nlc3MoKTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJ
CQkJCXQuX3ZlcmlmeVNvbWVQaG9uZVNpbmdTbXNFcnJvcigpOwoJCQkJfQoJCQl9
LAoKCQkJX3ZlcmlmeVNvbWVQaG9uZVNpbmdTbXNFcnJvcjogZnVuY3Rpb24gKCkg
ewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdmFyIGxheWVyID0gdC5fZ2V0TGF5ZXIo
J3ZlcmlmeVNvbWVQaG9uZVNpbmdTTVMnKTsKCQkJCXZhciAkZXJyb3IgPSAkKCdk
aXYucmVkOmZpcnN0LCAuanMtZXJyb3InLCBsYXllci4kZGl2KTsKCQkJCXZhciB0
ZXh0ID0gJyc7CgkJCQlpZiAodC5hamF4UmVzdWx0KSB7CgkJCQkJdGV4dCA9IHQu
YWpheFJlc3VsdC50ZXh0OwoJCQkJfQoJCQkJJGVycm9yLmh0bWwodGV4dCkuc2hv
dygpOwoJCQl9LAoKCQkJX3ZlcmlmeUNvbXBsZXRlOiBmdW5jdGlvbihyZXN1bHQp
IHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXQuYWpheFJlc3VsdCA9IG51bGw7CgoJ
CQkJaWYgKHJlc3VsdC5pc09LKCkpIHsKCQkJCQl0LmFqYXhSZXN1bHQgPSByZXN1
bHQuZ2V0RGF0YSgpOwoJCQkJfQoKCQkJCWlmICh0LmFqYXhSZXN1bHQpIHsKCQkJ
CQlpZiAodC5hamF4UmVzdWx0LmVycm9yX3R5cGUpIHsKCQkJCQkJdC5fdmVyaWZ5
RXJyb3IoKTsKCQkJCQl9IGVsc2UgewoJCQkJCQl0Ll92ZXJpZnlTdWNjZXNzKCk7
CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQl0Ll92ZXJpZnlFcnJvcigpOwoJCQkJ
fQoJCQl9LAoKCQkJX3ZlcmlmeUVycm9yOiBmdW5jdGlvbigpIHsKCQkJCXZhciB0
ID0gdGhpczsKCQkJCXZhciAkYyA9IHQuX2dldExheWVyKCdzaW5nU01TJykuJGRp
djsKCQkJCXZhciAkZXJyb3IgPSAkKCdkaXYucmVkOmZpcnN0LCAuanMtZXJyb3In
LCAkYyk7CgkJCQl2YXIgdGV4dCA9ICcnOwoJCQkJaWYgKHQuYWpheFJlc3VsdCkg
ewoJCQkJCXRleHQgPSB0LmFqYXhSZXN1bHQudGV4dDsKCQkJCX0KCQkJCSRlcnJv
ci5odG1sKHRleHQpLnNob3coKTsKCQkJfSwKCgkJCV92ZXJpZnlTdWNjZXNzOiBm
dW5jdGlvbigpIHsKCQkJCXZhciB0ID0gdGhpczsKCQkJCXQudHJpZ2dlckhhbmRs
ZXIoJ3ZlcmlmeVN1Y2Nlc3MnLCBbdC5hamF4UmVzdWx0LCB0LmRhdGFdKTsKCQkJ
fSwKCgkJCV92ZXJpZnlTb21lUGhvbmVDb21wbGV0ZTogZnVuY3Rpb24gKHJlc3Vs
dCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdC5hamF4UmVzdWx0ID0gbnVsbDsK
CgkJCQlpZiAocmVzdWx0LmlzT0soKSkgewoJCQkJCXQuYWpheFJlc3VsdCA9IHJl
c3VsdC5nZXREYXRhKCk7CgkJCQl9CgoJCQkJaWYgKHQuYWpheFJlc3VsdCkgewoJ
CQkJCWlmICh0LmFqYXhSZXN1bHQuZXJyb3JfdHlwZSA9PT0gMikgewoJCQkJCQl0
Ll9jaGVja0Vycm9yKCk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJdC5fdmVyaWZ5U29t
ZVBob25lU3VjY2VzcygpOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJdC5fY2hl
Y2tFcnJvcigpOwoJCQkJfQoJCQl9LAoKCQkJX2NoZWNrQ29tcGxldGU6IGZ1bmN0
aW9uKHJlc3VsdCkKCQkJewoJCQkJdmFyIHQgPSB0aGlzOwoJCQkJdC5hamF4UmVz
dWx0ID0gbnVsbDsKCgkJCQlpZiAocmVzdWx0LmlzT0soKSkgewoJCQkJCXQuYWph
eFJlc3VsdCA9IHJlc3VsdC5nZXREYXRhKCk7CgkJCQl9CgoJCQkJaWYgKHQuYWph
eFJlc3VsdCkgewoJCQkJCWlmICh0LmFqYXhSZXN1bHQudmVyaWZpZWQpIHsKCQkJ
CQkJdC5fdmVyaWZ5U3VjY2VzcygpOwoJCQkJCX0gZWxzZSBpZiAodC5hamF4UmVz
dWx0LmVycm9yX3R5cGUgPT09IDIpIHsKCQkJCQkJdC5fY2hlY2tFcnJvcigpOwoJ
CQkJCX0gZWxzZSB7CgkJCQkJCXQuX2FkZFBob25lU3VjY2VzcygpOwoJCQkJCX0K
CQkJCX0gZWxzZSB7CgkJCQkJdC5fY2hlY2tFcnJvcigpOwoJCQkJfQoJCQl9LAoK
CQkJX2NoZWNrRXJyb3I6IGZ1bmN0aW9uKCkgewoJCQkJdmFyIHQgPSB0aGlzOwoJ
CQkJdmFyICRjID0gdC5fZ2V0TGF5ZXIoJ2NoZWNrJykuJGRpdjsKCQkJCXZhciAk
bG9hZCA9ICQoJ2Rpdi5sb2FkUHJvZ3Jlc3M6Zmlyc3QnLCAkYyk7CgkJCQl2YXIg
JGVycm9yID0gJCgnZGl2LnJlZDpmaXJzdCwgLmpzLWVycm9yJywgJGMpOwoJCQkJ
dmFyICRjb250cm9scyA9ICQoJ2Rpdi5jb250cm9sczpmaXJzdCcsICRjKTsKCQkJ
CXZhciB0ZXh0ID0gTGFuZy5nZXQoJ3ZlcmlmeV9waG9uZV9lcnJvcicpOwoJCQkJ
aWYgKHQuYWpheFJlc3VsdCkgewoJCQkJCXRleHQgPSB0LmFqYXhSZXN1bHQudGV4
dDsKCQkJCX0KCQkJCSRsb2FkLmhpZGUoKTsKCQkJCSRlcnJvci5odG1sKHRleHQp
LnNob3coKTsKCQkJCSRjb250cm9scy5zaG93KCk7CgkJCX0KCQl9KTsKCgl9KShq
UXVlcnkpOwoKCWpzTG9hZGVyLmxvYWRlZCgne21haWxydX1tYWlscnUuUGhvbmVN
YW5hZ2VyJywgMSk7CgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9tYWlscnUuUGhv
bmVNYW5hZ2VyLmpzIGVuZAoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvdWkvbWFp
bHJ1LnVpLlNlYXJjaFN1Z2dlc3QuanMgc3RhcnQKCi8qKgogKiBXQVJOSU5HOiB0
aGlzIGZpbGUgdXNlIGFqcy5taW4uanMKICovCgovLyBkYXRhL3J1L2ltYWdlcy9q
cy9ydS91dGlscy9tYWlscnUuVXRpbHMuU2VhcmNoLmpzIHN0YXJ0CgoKdmFyIF9j
YWNoZSA9IHsKCQlkZWxpbToge30sCgkJaGlnaGxpZ2h0UmVwbGFjZToge30KCX07
CgoJdmFyIF9hZGRQYXJ0cyA9IGZ1bmN0aW9uKHRva2VucywgdG9rZW4sIGRlbGlt
KSB7CgkJaWYgKHRva2VuLmluZGV4T2YoZGVsaW0pID4gLTEpIHsKCQkJaWYgKF9j
YWNoZS5kZWxpbVtkZWxpbV0gPT09IHVuZGVmaW5lZCkgewoJCQkJX2NhY2hlLmRl
bGltW2RlbGltXSA9IG5ldyBSZWdFeHAoZGVsaW0ucmVwbGFjZSgvXC4vZywgJ1xc
LicpICsgJysnKTsKCQkJfQoKCQkJdmFyIHBhcnRzID0gdG9rZW4uc3BsaXQoX2Nh
Y2hlLmRlbGltW2RlbGltXSk7CgoJCQlmb3IgKHZhciBpPTAsIGw9cGFydHMubGVu
Z3RoOyBpPGw7IGkrKykgewoJCQkJaWYocGFydHNbaV0pIHsKCQkJCQl0b2tlbnMu
cHVzaChwYXJ0c1tpXSk7CgkJCQl9CgkJCX0KCQl9Cgl9OwoKCWZ1bmN0aW9uIHJl
Z0V4cEVzY2FwZShzdHIpIHsKCQlyZXR1cm4gc3RyLnJlcGxhY2UoL1tcXCJcP1wo
XClcfCEjXCQlXF5cKlwrXC1cW1xdXC5dL2csICdcXCQmJyk7Cgl9CgoJdmFyIFNl
YXJjaCA9IG1haWxydS5VdGlscy5TZWFyY2ggPSB7CgkJcXVlcnlUb1Rva2Vuczog
ZnVuY3Rpb24oc3RyLCBub05lZWRUb0VzY2FwZSkgewoJCQlzdHIgPSAkLnRyaW0o
c3RyKTsKCgkJCWlmKCFub05lZWRUb0VzY2FwZSlzdHIgPSByZWdFeHBFc2NhcGUo
c3RyKTsKCgkJCXN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpOwoKCQkJdmFyIHRva2Vu
cyA9IHN0ci5zcGxpdCgvW1xzXSsvKSwgdG9rZW47CgoJCQlmb3IodmFyIGk9MCwg
bCA9IHRva2Vucy5sZW5ndGg7IGk8bDsgaSsrKSB7CgkJCQl0b2tlbiA9IHRva2Vu
c1tpXTsKCgkJCQlpZiAoIG5vTmVlZFRvRXNjYXBlIHx8IHRva2VuICE9ICJcXCIg
KSB7CgkJCQkJX2FkZFBhcnRzKHRva2VucywgdG9rZW4sIG5vTmVlZFRvRXNjYXBl
ID8gJy4nIDogJ1xcLicpOwoKCQkJCQlfYWRkUGFydHModG9rZW5zLCB0b2tlbiwg
J0AnKTsKCQkJCX0KCQkJfQoKCQkJcmV0dXJuIHRva2VuczsKCQl9LAoKCQloaWdo
bGlnaHRSZXBsYWNlOiBmdW5jdGlvbihmaWx0ZXIsIHdyYXBwZXJTdGFydCwgd3Jh
cHBlckVuZCkgewoJCQl3cmFwcGVyU3RhcnQgPSB3cmFwcGVyU3RhcnQgfHwgJzxi
Pic7CgkJCXdyYXBwZXJFbmQgICA9IHdyYXBwZXJFbmQgICB8fCAnPC9iPic7CgoJ
CQl2YXIgY2FjaGVLZXkgPSBmaWx0ZXIgKyAnfCcgKyB3cmFwcGVyU3RhcnQgKyAn
fCcgKyB3cmFwcGVyRW5kCgkJCQksIGNob2lzZXMKCQkJCSwgdG9rZW5zCgkJCQks
IG1hdGNoCgkJCQksIHJlcGxhY2UKCQkJCSwgZmlsdGVyT2JqZWN0CgkJCTsKCgkJ
CWlmKCAhX2NhY2hlLmhpZ2hsaWdodFJlcGxhY2VbY2FjaGVLZXldICkgewoJCQkJ
Y2hvaXNlcyA9IFtdOwoJCQkJdG9rZW5zID0gU2VhcmNoLnF1ZXJ5VG9Ub2tlbnMo
ZmlsdGVyLCB0cnVlKTsKCgkJCQlBcnJheS5mb3JFYWNoKHRva2VucywgZnVuY3Rp
b24odG9rZW4pIHsKCQkJCQljaG9pc2VzLnB1c2gocmVnRXhwRXNjYXBlKHRva2Vu
KSk7CgkJCQkJY2hvaXNlcy5wdXNoKHJlZ0V4cEVzY2FwZShtYWlscnUuVXRpbHMu
cHVudG8odG9rZW4pKSk7CgoJCQkJCS8vIG1haWxydS5VdGlscy50cmFuc2xpdCBy
ZXR1cm4gbXVsdGlwbHkgdmFyaWFudHMgYXMgQXJyYXkuPEFycmF5LjxzdHJpbmc+
fHN0cmluZz4gKHdpdGggdHJ1ZSBhcyBhIHNlY29uZCBwYXJhbWV0ZXIpCgkJCQkJ
Ly8gRm9yIGV4YW1wbGUgZm9yIGlucHV0ID0gInVuaXQiIGl0IGNhbiByZXR1cm4g
ItGO0L3QuNGCIiwgItGD0L3QuNGCIgoJCQkJCXZhciB0cmFuc2xpdCA9IG1haWxy
dS5VdGlscy50cmFuc2xpdCh0b2tlbiwgdHJ1ZSkKCQkJCQkJLCBpCgkJCQkJCSwg
bGVuCgkJCQkJCSwgcGFydAoJCQkJCQksIHZhbHVlCgkJCQkJOwoKCQkJCQl2YWx1
ZSA9ICIiOwoJCQkJCWZvciggaSA9IDAgLCBsZW4gPSB0cmFuc2xpdC5sZW5ndGgg
OyBpIDwgbGVuIDsgaSsrICkgewoJCQkJCQlwYXJ0ID0gdHJhbnNsaXRbaV07CgkJ
CQkJCWlmKCB0eXBlb2YgcGFydCA9PT0gInN0cmluZyIgKSB7CgkJCQkJCQl2YWx1
ZSArPSByZWdFeHBFc2NhcGUocGFydCk7CgkJCQkJCX0KCQkJCQkJZWxzZSB7Ly9w
YXJ0IE1VU1QgYmUgQXJyYXkKCQkJCQkJCXZhbHVlICs9ICIoPzoiICsgQXJyYXku
bWFwKHBhcnQsIHJlZ0V4cEVzY2FwZSkuam9pbigifCIpICsgIikiOwoJCQkJCQl9
CgoJCQkJCX0KCgkJCQkJY2hvaXNlcy5wdXNoKHZhbHVlKTsKCQkJCX0pOwoKCQkJ
CWZpbHRlck9iamVjdCA9IHt9OwoJCQkJY2hvaXNlcyA9IEFycmF5LmZpbHRlcihj
aG9pc2VzLCBmdW5jdGlvbihzdHIpIHsKCQkJCQl2YXIgcmVzdWx0ID0gc3RyICYm
IHN0ci5sZW5ndGggJiYgKGZpbHRlck9iamVjdFtzdHJdID09PSB2b2lkIDApOwoK
CQkJCQlpZiggcmVzdWx0ICkgewoJCQkJCQlmaWx0ZXJPYmplY3Rbc3RyXSA9IG51
bGw7CgkJCQkJfQoKCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJfSk7CgkJCQlmaWx0
ZXJPYmplY3QgPSBudWxsOwoKCQkJCS8vINGB0L3QsNGH0LDQu9CwINC/0YvRgtCw
0LXQvNGB0Y8g0L/QvtC00YHQstC10YLQuNGC0Ywg0LHQvtC70LXQtSDQtNC70LjQ
vdC90YvQuSDQstCw0YDQuNCw0L3RggoJCQkJY2hvaXNlcy5zb3J0KGZ1bmN0aW9u
KGEsIGIpIHsKCQkJCQlyZXR1cm4gYS5sZW5ndGggPT0gYi5sZW5ndGggPyAwIDoo
YS5sZW5ndGggPiBiLmxlbmd0aCA/IC0xIDogMSk7CgkJCQl9KTsKCgkJCQlpZigg
Y2hvaXNlcy5sZW5ndGggKSB7CgkJCQkJbWF0Y2ggPSBuZXcgUmVnRXhwKCIoXnxc
XHN8QHxcXC4pKCIgKyBhanMuSFRNTC5lc2NhcGUoY2hvaXNlcy5qb2luKCd8Jykp
ICsgIikiLCAiZ2kiKTsKCQkJCQlyZXBsYWNlID0gJyQxJyArIHdyYXBwZXJTdGFy
dCArICckMicgKyB3cmFwcGVyRW5kOwoKCQkJCQlfY2FjaGUuaGlnaGxpZ2h0UmVw
bGFjZVtjYWNoZUtleV0gPSBmdW5jdGlvbih0ZXh0KSB7CgkJCQkJCXJldHVybiBh
anMuSFRNTC5lc2NhcGUodGV4dCkKCQkJCQkJCS5yZXBsYWNlKC9cXHMvZywgJyYj
MzI7JykvL1RPRE86OiByZW1vdmUgaXQgaWYgaXQgbm90IG5lY2Vzc2FyeQoJCQkJ
CQkJLnJlcGxhY2UobWF0Y2gsIHJlcGxhY2UpCgkJCQkJCTsKCQkJCQl9OwoKCQkJ
CX0gZWxzZSB7CgkJCQkJX2NhY2hlLmhpZ2hsaWdodFJlcGxhY2VbY2FjaGVLZXld
ID0gZnVuY3Rpb24odGV4dCkgewoJCQkJCQlyZXR1cm4gdGV4dDsKCQkJCQl9CgkJ
CQl9CgkJCX0KCgkJCXJldHVybiBfY2FjaGUuaGlnaGxpZ2h0UmVwbGFjZVtjYWNo
ZUtleV07CgkJfQoJfTsKCglqc0xvYWRlci5sb2FkZWQoJ3ttYWlscnUudXRpbHN9
bWFpbHJ1LlV0aWxzLlNlYXJjaCcsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMv
cnUvdXRpbHMvbWFpbHJ1LlV0aWxzLlNlYXJjaC5qcyBlbmQKCnZhcgoJCS8qKiBA
Y29uc3QgKi8KCQkJUkVfRU1BSUwgPSAvKFtcdy7QsC3Rj9GRXC0rXSspQChbXHcu
0LAt0Y/RkVwtXSspXC5bXHfQsC3Rj9GRXSsvCgkJLyoqIEBjb25zdCAqLwoJCSwg
UkVfTkFNRV9BTkRfRU1BSUxfSU5fTFRHVCA9IG5ldyBSZWdFeHAoIltcIiddPygu
Kj8pW1wiJ10/XFxzKyg/Ojx8Jmx0OykoIiArIFJFX0VNQUlMLnNvdXJjZSArICIp
KD86PnwmZ3Q7KSIpCgkJLyoqIEBjb25zdCAqLwoJCSwgUkVfUkVHRVhQX0VTQ0FQ
RSA9IC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZwoJCS8qKiBAY29uc3QgKi8KCQks
IElOUFVUX0VWRU5UX05BTUUgPSAib25pbnB1dCIgaW4gZG9jdW1lbnQgPyAiaW5w
dXQiIDogImtleXVwIgoKCQksIE9QRVJBTkRTX1NFQVJDSF9UWVBFU19NQVAgPSB7
CgkJCXFfZnJvbTogMQoJCQksIHFfdG86IDIKCQkJLCBxX3N1Ymo6IDQKCQkJLCBx
X3F1ZXJ5OiA4CgkJfQoKCQksIF9IVE1MX2VzY2FwZV8gPSBhanMuSFRNTC5lc2Nh
cGUKCTsKCglPUEVSQU5EU19TRUFSQ0hfVFlQRVNfTUFQLkFMTCA9IE9QRVJBTkRT
X1NFQVJDSF9UWVBFU19NQVAucV9mcm9tIHwgT1BFUkFORFNfU0VBUkNIX1RZUEVT
X01BUC5xX3RvIHwgT1BFUkFORFNfU0VBUkNIX1RZUEVTX01BUC5xX3N1YmogfCBP
UEVSQU5EU19TRUFSQ0hfVFlQRVNfTUFQLnFfcXVlcnk7CglPUEVSQU5EU19TRUFS
Q0hfVFlQRVNfTUFQLlBFT1BMRSA9IE9QRVJBTkRTX1NFQVJDSF9UWVBFU19NQVAu
cV9mcm9tIHwgT1BFUkFORFNfU0VBUkNIX1RZUEVTX01BUC5xX3RvOwoJT1BFUkFO
RFNfU0VBUkNIX1RZUEVTX01BUC5URVhUID0gT1BFUkFORFNfU0VBUkNIX1RZUEVT
X01BUC5xX3N1YmogfCBPUEVSQU5EU19TRUFSQ0hfVFlQRVNfTUFQLnFfcXVlcnk7
CgoJKGZ1bmN0aW9uICgkKXsKCQkvKioKCQkgKiBAY2xhc3MgICBtYWlscnUudWku
U2VhcmNoU3VnZ2VzdAoJCSAqLwoJCW1haWxydS51aS5TZWFyY2hTdWdnZXN0ID0g
ZnVuY3Rpb24gKHNlbGVjdG9yLCBvcHRzKXsKCQkJdGhpcy5fb25QcmludAk9IHRo
aXMuX29uUHJpbnQuYmluZCh0aGlzKTsKCQkJdGhpcy5fb25TZWxlY3QJPSB0aGlz
Ll9vblNlbGVjdC5iaW5kKHRoaXMpOwoKCQkJaWYoIW1haWxydS5pc0FkZHJlc3Ni
b29rUGFnZSgpKSB7CgkJCQl0aGlzLl9nZXREYXRhID0gdGhpcy5fZ2V0RGF0YS5i
aW5kKHRoaXMpOwoJCQkJdGhpcy5fcmVxdWVzdCA9IHRoaXMuX3JlcXVlc3QuYmlu
ZCh0aGlzKTsKCQkJfSBlbHNlIHsKCQkJCXRoaXMuX3JlcXVlc3QgPSBmdW5jdGlv
bih2YWwsIGZuKSB7IGZuKFtdKTsgfQoJCQkJdGhpcy5fZ2V0RGF0YSA9IGZ1bmN0
aW9uKGEpIHsgcmV0dXJuIGE7IH0KCQkJfQoKCQkJdGhpcy5fbG9nVW5sb2NrCT0g
ZnVuY3Rpb24gKCl7IHRoaXMuX2xvZ0xvY2sgPSAwOyB9LmJpbmQodGhpcyk7CgoJ
CQl0aGlzLl9nbzJBZHZhbmNlZAk9IHRoaXMuX2dvMkFkdmFuY2VkLmJpbmQodGhp
cyk7CgkJCXRoaXMuX2FkdmFuY2VkSGlkZQk9IHRoaXMuX2FkdmFuY2VkLmJpbmQo
dGhpcywgZmFsc2UpOwoJCQl0aGlzLl9vbmhhc2hjaGFuZ2UJPSB0aGlzLl9vbmhh
c2hjaGFuZ2UuYmluZCh0aGlzKTsKCgkJCU9iamVjdC5leHRlbmQob3B0cy5zdWdn
ZXN0LCB7CgkJCQkgIGdldERhdGE6ICAgIHRoaXMuX2dldERhdGEKCQkJCSwgcmVx
dWVzdDogICAgdGhpcy5fcmVxdWVzdAoJCQkJLCBtaW5MZW5ndGg6ICAyCgoJCQkJ
LCBvbnByaW50OiAgICB0aGlzLl9vblByaW50CgkJCQksIG9uZXhwYW5kOiAgIGZ1
bmN0aW9uIChzdGF0ZSl7CgkJCQkJdGhpcy5fb25QcmludCgpOwoJCQkJCWlmKCAh
c3RhdGUgKSB0aGlzLl9zdGFydFRTID0gMDsKCQkJCX0uYmluZCh0aGlzKQoKCQkJ
CSwgbXVsdGlTdWdnZXN0czogZmFsc2UKCQkJfSk7CgoJCQl0aGlzLlNlYXJjaCA9
IGFqcy51aS5zZWFyY2goc2VsZWN0b3IsIG9wdHMpOwoKCQkJdGhpcy4kU2VhcmNo
ID0gJCgiI3BvcnRhbC1tZW51X19zZWFyY2hfX2Zvcm0iKTsKCgkJCWlmKCBtYWls
cnUuaXNGaWxlU2VhcmNoUGFnZSgpICkgey8vTUFJTC0xMjYwNCA9PSBNQUlMLTEy
MjM1IDUpCgkJCQl0aGlzLmRpc2FibGUoKTsKCQkJfQoJCQllbHNlIHsKCQkJCXRo
aXMuZW5hYmxlKCk7CgoJCQkJaWYodGhpcy5TZWFyY2guJE9wZXJhbmRzKSB7CgkJ
CQkJT2JqZWN0LmZvckVhY2goYWpzLnRvT2JqZWN0KGpzSGlzdG9yeS5nZXQoKSks
IGZ1bmN0aW9uICh2YWwsIG5hbWUpewoJCQkJCQlpZih2YWwpIHsKCQkJCQkJCXZh
bCA9IHZhbC5yZXBsYWNlKC9cKy9nLCAiICIpOwoJCQkJCQkJdGhpcy5TZWFyY2gu
JE9wZXJhbmRzLnNldE9wZXJhbmRWYWx1ZShuYW1lLCB2YWwpOwoJCQkJCQl9CgkJ
CQkJfSwgdGhpcyk7CgkJCQl9CgkJCX0KCiAgICAgICAgICAgIGlmKHRoaXMuU2Vh
cmNoLiRPcGVyYW5kcykgey8vIE1BSUwtODYxMQoKCQkJCS8vTUFJTC0xMjcxNgoJ
CQkJdGhpcy5TZWFyY2guJE9wZXJhbmRzLmFkZFRyaWdnZXIoIm9wZXJhbmRzOmFj
dGl2ZUlucHV0Q2hhbmdlIiwgZnVuY3Rpb24oZSkgewoJCQkJCWlmKCB0aGlzLl9f
ZG9Ob3RDb3VudGluZ09wZXJhbmRTaG93ICkgewoJCQkJCQl0aGlzLl9fZG9Ob3RD
b3VudGluZ09wZXJhbmRTaG93ID0gZmFsc2U7CgkJCQkJCXJldHVybjsKCQkJCQl9
CgoJCQkJCXZhciBvbGRJbnB1dCA9IGUub2xkSW5wdXQKCQkJCQkJLCBvbGRJbnB1
dElzT3BlcmFuZAoJCQkJCQksIG5ld0lucHV0SXNPcGVyYW5kID0gZS5pc09wZXJh
bmRJbnB1dAoJCQkJCTsKCgkJCQkJaWYoICJsZW5ndGgiIGluIG9sZElucHV0IClv
bGRJbnB1dCA9IG9sZElucHV0WzBdOwoKCQkJCQlpZiggIW9sZElucHV0LmdldEF0
dHJpYnV0ZSApcmV0dXJuOwoKCQkJCQlvbGRJbnB1dElzT3BlcmFuZCA9ICEhb2xk
SW5wdXQuZ2V0QXR0cmlidXRlKCJkYXRhLW9wZXJhbmQiKQoKCQkJCQlpZiggIW9s
ZElucHV0SXNPcGVyYW5kICYmIG5ld0lucHV0SXNPcGVyYW5kICkgewoJCQkJCQlD
b3VudGVyLmQoMTQwNjc1Mik7Ly/Qn9C+0LrQsNC3INC+0L/QtdGA0LDQvdC00LAK
CQkJCQl9CgkJCQkJZWxzZSBpZiggb2xkSW5wdXQgJiYgb2xkSW5wdXRJc09wZXJh
bmQgJiYgbmV3SW5wdXRJc09wZXJhbmQgKSB7CgkJCQkJCXNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CgkJCQkJCQlpZiggIXRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLW5l
eHQtb3BlcmFuZCIpICYmICF0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1uZXh0LW9w
ZXJhbmQiKSApIHsKCQkJCQkJCQkvL9Ch0YLQsNGA0YvQuSDQvtC/0LXRgNCw0L3Q
tCDRgdC60YDRi9GCCgkJCQkJCQkJQ291bnRlci5kKDE0MDY3NjApOy8v0J/QtdGA
0LXQutC70Y7Rh9C10L3QuNC1INC+0L/QtdGA0LDQvdC00L7QsgoJCQkJCQkJfQoJ
CQkJCQl9LmJpbmQob2xkSW5wdXQpKTsKCQkJCQl9CgkJCQkJZSA9IG9sZElucHV0
ID0gbnVsbDsKCQkJCX0uYmluZCh0aGlzKSk7CgoJCQkJLy8gTUFJTC0xNTE2OAoJ
CQkJdmFyIFJFX0VNQUlMX0FORF9TUEFDRV9BTkRfU1lNQk9MID0gbmV3IFJlZ0V4
cChSRV9FTUFJTC5zb3VyY2UgKyAiXFxzLiIpOwoJCQkJdGhpcy5TZWFyY2guJE9w
ZXJhbmRzLmFkZFRyaWdnZXIoIm9wZXJhbmRzOmZpbmQiLCBmdW5jdGlvbihlKSB7
CgkJCQkJdmFyIGN1cnJlbnRPcGVyYW5kID0gZVsiY3VycmVudE9wZXJhbmQiXQoJ
CQkJCQksIGlucHV0VmFsdWUKCQkJCQkJLCBzcGFjZUluZGV4CgkJCQkJCSwgY2Fy
ZXQKCQkJCQk7CgoJCQkJCWlmKCAoY3VycmVudE9wZXJhbmQgPT09ICJxX2Zyb20i
IHx8IGN1cnJlbnRPcGVyYW5kID09PSAicV90byIpCgkJCQkJCSYmIChpbnB1dFZh
bHVlID0gZVsiaW5wdXRWYWx1ZSJdKQoJCQkJCQkmJiAoc3BhY2VJbmRleCA9IGlu
cHV0VmFsdWUubGFzdEluZGV4T2YoIiAiKSkgIT09IC0xCgkJCQkJCSYmIFJFX0VN
QUlMX0FORF9TUEFDRV9BTkRfU1lNQk9MLnRlc3QoaW5wdXRWYWx1ZSkvLyBjb3Jy
ZWN0IGVtYWlsIGFkZHJlc3MgKyAnICcgKyBhbnkgc3ltYm9scwoJCQkJCSkgewoJ
CQkJCQljYXJldCA9IGFqcy4kLmdldENhcmV0UG9zaXRpb24oZVsiaW5wdXQiXSwg
dHJ1ZSk7CgkJCQkJCWlucHV0VmFsdWUgPSBlWyJpbnB1dFZhbHVlIl07CgoJCQkJ
CQlpZiggY2FyZXQKCQkJCQkJCSYmIGNhcmV0WyJzdGFydCJdID09PSBjYXJldFsi
ZW5kIl0KCQkJCQkJCSYmIGNhcmV0WyJlbmQiXSA+PSBpbnB1dFZhbHVlLmxlbmd0
aCAtIDEKCQkJCQkJKSB7CgkJCQkJCQllWyJuZXdPcGVyYW5kIl0gPSAicV9xdWVy
eSI7CgkJCQkJCQllWyJsYXN0UHJlZml4SW5kZXgiXSA9IHNwYWNlSW5kZXg7CgkJ
CQkJCX0KCQkJCQl9CgkJCQl9KTsKCgkJCQl0aGlzLiRTZWFyY2guc3VibWl0KGZ1
bmN0aW9uICgpewoJCQkJCXZhciBvcGVyYW5kSW5wdXQ7CgoJCQkJCShvcGVyYW5k
SW5wdXQgPSB0aGlzLlNlYXJjaCkgJiYgKG9wZXJhbmRJbnB1dCA9IG9wZXJhbmRJ
bnB1dC4kT3BlcmFuZHMpICYmIChvcGVyYW5kSW5wdXQgPSBvcGVyYW5kSW5wdXQu
JElucHV0KTsKCgkJCQkJaWYoIChvcGVyYW5kSW5wdXQgPSBvcGVyYW5kSW5wdXRb
MF0pICYmIG9wZXJhbmRJbnB1dC5nZXRBdHRyaWJ1dGUoImRhdGEtb3BlcmFuZCIp
ICYmIG9wZXJhbmRJbnB1dC5zdHlsZS5kaXNwbGF5ICE9ICJub25lIiApIHsKCQkJ
CQkJQ291bnRlci5zYigxNDA2NzYxKTsvL9Cf0L7QuNGB0Log0L/QviDQvtC/0LXR
gNCw0L3QtNCw0LwKCQkJCQl9CgkJCQl9LmJpbmQodGhpcykpOwoKCQkJCWlmKCB0
aGlzLlNlYXJjaC5TdWdnZXN0ICkgewoJCQkJCS8vIE1BSUwtMTIyMzUgMSkgMikK
CQkJCQl0aGlzLl9fY2FjaGUgPSB7fTsvL9Ce0YDQs9Cw0L3QuNC30YPQtdC8INGB
0L7QsdGB0YLQstC10L3QvdGL0Lkg0LrQtdGICgkJCQkJdGhpcy5TZWFyY2guU3Vn
Z2VzdAoJCQkJCQkuYWRkVHJpZ2dlcigic3VnZ2VzdHM6ZmluZCBzdWdnZXN0czpy
ZWJ1aWxkIiwgZnVuY3Rpb24oZSkgewoJCQkJCQkJdmFyIGFqc1N1Z2dlc3QgPSBl
LmN1cnJlbnRUYXJnZXQKCQkJCQkJCQksIGRhdGEgPSBlLmRhdGEKCQkJCQkJCQks
IGlucHV0TmFtZSA9IGFqc1N1Z2dlc3QuJElucHV0LmF0dHIoIm5hbWUiKSArICJ8
IiArIChhanNTdWdnZXN0LiRJbnB1dC5hdHRyKCJkYXRhLW9wZXJhbmQiKSB8fCAi
IikKCQkJCQkJCQksIGxvY2FsQ2FjaGUKCQkJCQkJCQksIHN1Z2dlc3RWYWx1ZSA9
IGUuc3VnZ2VzdFZhbHVlIHx8IGUudmFsIHx8IGUuc3VnZ2VzdCAvLyBUT0RPOjog
ZS5zdWdnZXN0VmFsdWUgb25seQoJCQkJCQkJOwoKCQkJCQkJCWlmKCAhKGxvY2Fs
Q2FjaGUgPSB0aGlzLl9fY2FjaGVbaW5wdXROYW1lXSkgKSB7CgkJCQkJCQkJbG9j
YWxDYWNoZSA9IHRoaXMuX19jYWNoZVtpbnB1dE5hbWVdID0ge307CgkJCQkJCQl9
CgoJCQkJCQkJaWYoIGUudHlwZSA9PSAic3VnZ2VzdHM6cmVidWlsZCIgJiYgKCFk
YXRhLl9faW5wdXROYW1lIHx8IGRhdGEuX19pbnB1dE5hbWUgPT0gaW5wdXROYW1l
KSApIHsKCQkJCQkJCQlsb2NhbENhY2hlW3N1Z2dlc3RWYWx1ZV0gPSBkYXRhOwoJ
CQkJCQkJCWRhdGEuX19pbnB1dE5hbWUgPSBpbnB1dE5hbWU7Ly/Qn9GA0LjQstGP
0LfRi9Cy0LDQtdC8INC80LDRgdGB0LjQsi3QutC10Ygg0Log0L7Qv9GA0LXQtNC1
0LvRkdC90L3QvtC80YMgaW5wdXROYW1lCgkJCQkJCQl9CgkJCQkJCQllbHNlIHsK
CQkJCQkJCQllLmRhdGEgPSBsb2NhbENhY2hlW3N1Z2dlc3RWYWx1ZV07CgkJCQkJ
CQkJYWpzU3VnZ2VzdC5yZXNldCgpOwoJCQkJCQkJfQoJCQkJCQl9LmJpbmQodGhp
cykpCgkJCQkJOwoJCQkJfQoKCQkJCXRoaXMuX29wZXJhbmRMaW5rZWRJbnB1dENo
YW5nZSA9IGZ1bmN0aW9uKGV2dCkgewoJCQkJCXZhciBhZHZhbmNlZFNlYXJjaElu
cHV0ID0gZXZ0LnRhcmdldAoJCQkJCQksIGlucHV0Tm9kZU5hbWUgPSBhZHZhbmNl
ZFNlYXJjaElucHV0Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkKCQkJCQkJLCBvcGVy
YW5kTmFtZQoJCQkJCQksIG9wZXJhbmQKCQkJCQkJLCB0YXJnZXRWYWx1ZQoJCQkJ
CQksIG9sZFRhcmdldFZhbHVlCgkJCQkJOwoKCQkJCQlpZigidmFsdWUiIGluIGFk
dmFuY2VkU2VhcmNoSW5wdXQgJiYgKGlucHV0Tm9kZU5hbWUgPT0gIklOUFVUIiB8
fCBpbnB1dE5vZGVOYW1lID09ICJURVhUQVJFQSIpKSB7CgkJCQkJCXRhcmdldFZh
bHVlID0gYWR2YW5jZWRTZWFyY2hJbnB1dC52YWx1ZTsKCQkJCQkJb3BlcmFuZE5h
bWUgPSBhZHZhbmNlZFNlYXJjaElucHV0Lm5hbWU7CgkJCQkJCW9sZFRhcmdldFZh
bHVlID0gYWR2YW5jZWRTZWFyY2hJbnB1dC5fX29sZFZhbHVlOwoJCQkJCQlpZihv
cGVyYW5kTmFtZSAmJiBvbGRUYXJnZXRWYWx1ZSAhPSB0YXJnZXRWYWx1ZSkgewoJ
CQkJCQkJYWR2YW5jZWRTZWFyY2hJbnB1dC5fX29sZFZhbHVlID0gdGFyZ2V0VmFs
dWU7CgkJCQkJCQlvcGVyYW5kID0gdGhpcy5vcGVyYW5kcyAmJiB0aGlzLm9wZXJh
bmRzW29wZXJhbmROYW1lXTsKCgkJCQkJCQlpZighb3BlcmFuZCAmJiAhdGFyZ2V0
VmFsdWUpcmV0dXJuOwoKCQkJCQkJCXRoaXMuc2V0T3BlcmFuZFZhbHVlKG9wZXJh
bmROYW1lLCBhZHZhbmNlZFNlYXJjaElucHV0LnZhbHVlKTsKCQkJCQkJCWlmKCFv
cGVyYW5kICYmICEob3BlcmFuZCA9IHRoaXMub3BlcmFuZHMgJiYgdGhpcy5vcGVy
YW5kc1tvcGVyYW5kTmFtZV0pKXJldHVybjsKCgkJCQkJCQlpZiggb3BlcmFuZC4k
SW5wdXRbMF0gJiYgb3BlcmFuZC4kSW5wdXRbMF0uc2Nyb2xsSW50b1ZpZXcgKSB7
CgkJCQkJCQkJb3BlcmFuZC4kSW5wdXRbMF0uc2Nyb2xsSW50b1ZpZXcoZmFsc2Up
OwoJCQkJCQkJfQoKCQkJCQkJCWlmKCAhb3BlcmFuZFsiaXNPbklucHV0QmluZCJd
ICkgewoJCQkJCQkJCW9wZXJhbmRbImlzT25JbnB1dEJpbmQiXSA9IHRydWU7CgoJ
CQkJCQkJCSQob3BlcmFuZC4kSW5wdXRbMF0pLmJpbmQoSU5QVVRfRVZFTlRfTkFN
RSwgZnVuY3Rpb24oZXZ0KSB7CgkJCQkJCQkJCXZhciB0YXJnZXQgPSBldnQudGFy
Z2V0CgkJCQkJCQkJCQksIHZhbHVlID0gdGFyZ2V0LnZhbHVlCgkJCQkJCQkJCTsK
CgkJCQkJCQkJCWFkdmFuY2VkU2VhcmNoSW5wdXQudmFsdWUgPSB2YWx1ZTsKCQkJ
CQkJCQl9KTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0uYmluZCh0aGlz
LlNlYXJjaC4kT3BlcmFuZHMpCiAgICAgICAgICAgIH0KCgkJCWlmKHRoaXMuU2Vh
cmNoLlN1Z2dlc3QpIHsKCQkJCXRoaXMuU2VhcmNoLlN1Z2dlc3QKCQkJCQkuYWRk
VHJpZ2dlcigic3VnZ2VzdHM6cmVidWlsZCIsIGZ1bmN0aW9uKGUpIHsKCQkJCQkJ
dmFyIGRhdGEgPSBlWyJkZXRhaWxzIl0gfHwgZVsiZGF0YSJdOwoJCQkJCQlpZihk
YXRhICYmIGRhdGEubGVuZ3RoID09IDEgJiYgKGRhdGFbMF0gKyAiIikgPT0gZVsi
dmFsIl0pIHsKCQkJCQkJCWVbInNob3dJbnRlcm5ldCJdID0gZVsic2hvd0xpc3Qi
XSA9IGZhbHNlOwoJCQkJCQl9CgkJCQkJfSkKCQkJCQkuYWRkVHJpZ2dlcigic3Vn
Z2VzdHM6c2VsZWN0IiwgdGhpcy5fb25TZWxlY3QpCgkJCQk7CgkJCQl0aGlzLlNl
YXJjaC5TdWdnZXN0CgkJCQkJLmFkZFRyaWdnZXIoInN1Z2dlc3RzOmZpbmQiLCBm
dW5jdGlvbihlKSB7Ly8gTUFJTC0xMzg3MAoJCQkJCQlpZiggdGhpcy5fX3N1Z2dl
c3RTZWxlY3RlZCAmJiAoIWUub3JpZ2luYWxFdmVudCB8fCBlLm9yaWdpbmFsRXZl
bnQudHlwZSAhPSAiZm9jdXMiKSAmJiBlLnZhbCApIHsKCQkJCQkJCXRoaXMuJEZy
b21TdWdnZXN0c0lucHV0LnZhbCgiMCIpOwoJCQkJCQkJdGhpcy5fX3N1Z2dlc3RT
ZWxlY3RlZCA9ICFlLnZhbDsKCQkJCQkJfQoJCQkJCX0uYmluZCh0aGlzKSkKCQkJ
CTsKCgkJCQlpZihvcHRzLnN1Z2dlc3QgJiYgb3B0cy5zdWdnZXN0LmNvbnRyb2xI
ZWlnaHQpIHsKCQkJCQl0aGlzLlNlYXJjaC5TdWdnZXN0LmFkZFRyaWdnZXIoInN1
Z2dlc3RzOnNob3cgc3VnZ2VzdHM6YWZ0ZXJSZWJ1aWxkIHN1Z2dlc3RzOnJlYnVp
bGQ6YWZ0ZXIiLCB0aGlzLnNldFN1Z2dlc3ROb2Rlc1Zpc2liaWxpdHkuYmluZCh0
aGlzKSk7CgkJCQl9CgkJCX0KCgkJCXRoaXMuU2VhcmNoLiRJbnB1dC5jbG9zZXN0
KCdmb3JtJykuYmluZCgnc3VibWl0JywgZnVuY3Rpb24gKCl7CgkJCQl0aGlzLl9h
dXRvTG9nTWUodHJ1ZSk7CgkJCX0uYmluZCh0aGlzKSk7CgoJCQkkKHdpbmRvdykK
CQkJCS5iaW5kKCdoYXNoY2hhbmdlJywgdGhpcy5fYWR2YW5jZWRIaWRlKQoJCQkJ
LmJpbmQoJ2FianM6dXBkYXRlZCcsIHRoaXMucmVzZXQuYmluZCh0aGlzKSkKCQkJ
OwoKCQkJaWYob3B0cy5jbGVhclNlYXJjaFJlc3VsdEJhc2VkT25IYXNoKSB7Ly9N
QUlMLTEwNzA5CgkJCQkkKHdpbmRvdykuYmluZCgnaGFzaGNoYW5nZScsIHRoaXMu
X29uaGFzaGNoYW5nZSk7CgkJCX0KCgkJCSQoZnVuY3Rpb24gKCl7CgkJCQl0aGlz
LiRBZHZhbnNlZFNlYXJjaExpbmsgPQoJCQkJCSQoJyNzZWFyY2gtcmVzdWx0LWFk
dmFuY2VkLWxpbmsnKQoJCQkJCS5hZGQodGhpcy5TZWFyY2guJEVsbS5maW5kKCcu
anMtc2VjdGlvbi1saW5rJykpCgkJCQkJLmJpbmQoJ2NsaWNrJywgdGhpcy5fYWR2
YW5jZWQuYmluZCh0aGlzLCBudWxsKSkKCQkJCTsKCgkJCQlpZiggbWFpbHJ1Lmlz
RmlsZVNlYXJjaFBhZ2UoKSApIHsvL01BSUwtMTIyMzUgNSkKCQkJCQl0aGlzLmRp
c2FibGUoKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXRoaXMuZW5hYmxlKCk7CgkJ
CQl9CgkJCX0uYmluZCh0aGlzKSk7CgoKCQkJLy8gTUFJTC0xMzg3MAoJCQkvLyDQ
odC+0LfQtNCw0ZHQvCDRgdC60YDRi9GC0YvQuSDQuNC90L/Rg9GCINCyINC60L7R
gtC+0YDRi9C5INC30LDQv9C40YHRi9Cy0LDQtdC8LCDQuNC3INGB0LDQtNC20LXR
gdGC0LAg0LvQuCDQstGL0LHRgNCw0L3QvdC+0LPQviDQvNGLINC/0YDQvtC40LfQ
stC+0LTQuNC8INC/0L7QuNGB0LoKCQkJdGhpcy4kRnJvbVN1Z2dlc3RzSW5wdXQg
PSAkKCI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mcm9tX3N1Z2dlc3QgdmFsdWU9
MCAvPiIpOwoJCQl0aGlzLiRGcm9tU3VnZ2VzdHNJbnB1dC5hcHBlbmRUbyh0aGlz
LiRTZWFyY2gpOwoJCX07CgoJCS8vIE1BSUwtODMwOCA8CgkJZnVuY3Rpb24gcmVn
ZXhwRXNjYXBlKHN0cikgewoJCQlyZXR1cm4gU3RyaW5nKHN0ciB8fCAiIikucmVw
bGFjZShSRV9SRUdFWFBfRVNDQVBFLCAiXFwkMSIpOwoJCX0KCQlmdW5jdGlvbiBH
cm91cGVkU3VnZ2VzdEl0ZW0oY29uZmlnLCB0ZXh0LCBmaW5kLCBzZWFyY2gsIGNh
dGVnb3J5LCBjYXRlZ29yeUluZGV4KXsKCQkJdGhpcy5jb25maWcgPSBjb25maWc7
CgoJCQl0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7CgkJCXRoaXMuY2F0ZWdvcnlJ
bmRleCA9IGNhdGVnb3J5SW5kZXg7CgkJCXRoaXMuaHRtbCA9IHRleHQ7CgkJCXRo
aXMuc2VhcmNoID0gc2VhcmNoIHx8IHRleHQ7CgoJCQl0aGlzLmZpbmQgPSByZWdl
eHBFc2NhcGUoZmluZCk7CgkJfQoJCUdyb3VwZWRTdWdnZXN0SXRlbS5wcm90b3R5
cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKCQkJcmV0dXJuICAiIiArCgkJCQko
dGhpcy5jYXRlZ29yeSAmJiB0aGlzLmNhdGVnb3J5SW5kZXggPT09IDAgPwoJCQkJ
CSc8ZGl2IGNsYXNzPSInICsgdGhpcy5jb25maWcuY2RHcm91cEhlYWRlciArICci
PicgKwoJCQkJCQl0aGlzLmNhdGVnb3J5ICsKCQkJCQknPC9kaXY+JwoJCQkJCTog
IiIpICsKCQkJCXRoaXMuaHRtbAoJCQk7CgkJfTsKCQkvLyA+IE1BSUwtODMwOAoK
CQltYWlscnUudWkuU2VhcmNoU3VnZ2VzdC5wcm90b3R5cGUgPSB7CgkJCWNvbnN0
cnVjdG9yOiBtYWlscnUudWkuU2VhcmNoU3VnZ2VzdCwKCQkJX29uaGFzaGNoYW5n
ZTogZnVuY3Rpb24oKSB7Ly9NQUlMLTEwNzA5CgkJCQlpZiggbWFpbHJ1LmlzRmls
ZVNlYXJjaFBhZ2UoKSB8fCBtYWlscnUuaXNNUklNUGFnZSgpICkgey8vTUFJTC0x
MjIzNSA1KQoJCQkJCXRoaXMuZGlzYWJsZSgpOwoJCQkJfQoJCQkJZWxzZSB7IC8v
IE1BSUwtMTI2MDQKCQkJCQl0aGlzLmVuYWJsZSgpOwoKCQkJCQl2YXIgJFNlYXJj
aCA9IHRoaXMuJFNlYXJjaDsKCQkJCQlpZighJFNlYXJjaCkkU2VhcmNoID0gdGhp
cy4kU2VhcmNoID0gJCgnI3BvcnRhbC1tZW51X19zZWFyY2hfX2Zvcm0nKTsKCgkJ
CQkJdmFyIGxheWVyX2Zvcm0gPSAkU2VhcmNoWzBdCgkJCQkJCSwgbGF5ZXJfZm9y
bV9lbGVtZW50cyA9IGxheWVyX2Zvcm0uZWxlbWVudHMgfHwgW10KCQkJCQkJLCBo
YXNoUGFyYW1zID0gYWpzLnRvT2JqZWN0KGpzSGlzdG9yeS5nZXQoKSkKCQkJCQkJ
LCBvcGVyYW5kcyA9IHRoaXMuU2VhcmNoLiRPcGVyYW5kcyAmJiB0aGlzLlNlYXJj
aC4kT3BlcmFuZHMub3BlcmFuZHMKCQkJCQkJLCBvcGVyYW5kS2V5cyA9IChvcGVy
YW5kcyAmJiBPYmplY3Qua2V5cyhvcGVyYW5kcykpIHx8IFtdCgkJCQkJOwoKCQkJ
CQlpZihsYXllcl9mb3JtKSB7CgkJCQkJCUFycmF5LmZvckVhY2gobGF5ZXJfZm9y
bV9lbGVtZW50cywgZnVuY3Rpb24oZWwpIHsKCQkJCQkJCXZhciBlbE5OID0gZWwg
JiYgZWwubm9kZU5hbWUKCQkJCQkJCQksIGVsVHlwZSA9IGVsICYmIChlbC50eXBl
ICsgIiIpLnRvVXBwZXJDYXNlKCkKCQkJCQkJCTsKCQkJCQkJCWlmKGVsLm5hbWUg
JiYgKGVsTk4gPT0gIklOUFVUIiAmJiAoZWxUeXBlID09ICJURVhUIiB8fCBlbFR5
cGUgPT09ICIiKSB8fCBlbE5OID09ICJURVhUQVJFQSIpKSB7CgkJCQkJCQkJZWwu
dmFsdWUgPSAiIjsKCQkJCQkJCX0KCQkJCQkJfSk7CgkJCQkJfQoKCQkJCQlPYmpl
Y3QuZm9yRWFjaChoYXNoUGFyYW1zLCBmdW5jdGlvbiAodmFsLCBuYW1lKSB7CgkJ
CQkJCXZhciB0YXJnZXQgPSBsYXllcl9mb3JtX2VsZW1lbnRzW25hbWVdCgkJCQkJ
CQksIGkKCQkJCQkJOwoKCQkJCQkJdmFsID0gdmFsID8gdmFsLnJlcGxhY2UoL1wr
L2csICIgIikgOiB2YWw7CgoJCQkJCQlpZih0YXJnZXQpIHsKCQkJCQkJCXRhcmdl
dC52YWx1ZSA9IHZhbDsKCQkJCQkJfQoKCQkJCQkJaWYob3BlcmFuZEtleXMubGVu
Z3RoICYmIG5hbWUgaW4gb3BlcmFuZHMpIHsKCQkJCQkJCXRoaXMuU2VhcmNoLiRP
cGVyYW5kcy5zZXRPcGVyYW5kVmFsdWUobmFtZSwgdmFsKTsKCgkJCQkJCQlpID0g
QXJyYXkuaW5kZXhPZihvcGVyYW5kS2V5cywgbmFtZSk7CgoJCQkJCQkJaWYoaSA+
PSAwKSB7CgkJCQkJCQkJb3BlcmFuZEtleXMuc3BsaWNlKGksIDEpOwoJCQkJCQkJ
fQoJCQkJCQl9CgkJCQkJfSwgdGhpcyk7CgoJCQkJCWlmKG9wZXJhbmRLZXlzLmxl
bmd0aCkgewoJCQkJCQlBcnJheS5mb3JFYWNoKG9wZXJhbmRLZXlzLCBmdW5jdGlv
bihuYW1lKSB7CgkJCQkJCQl0cnkgey8vUmVtb3ZlIHRyeS9jYXRjaCBhZnRlciBI
T01FLTEzNTMKCQkJCQkJCQl0aGlzLlNlYXJjaC4kT3BlcmFuZHMuc2V0T3BlcmFu
ZFZhbHVlKG5hbWUsIHRoaXMuU2VhcmNoLiRPcGVyYW5kcy5nZXRPcGVyYW5kVmFs
dWUobmFtZSkgfHwgIiIpOwoJCQkJCQkJfQoJCQkJCQkJY2F0Y2goZSkgewoKCQkJ
CQkJCX0KCQkJCQkJfSwgdGhpcyk7CgkJCQkJfQoKCQkJCQlpZiggKGxheWVyX2Zv
cm0gPSB0aGlzLlNlYXJjaCkgJiYgKCJfcGxhY2Vob2xkZXJDaGVjayIgaW4gbGF5
ZXJfZm9ybSkgKSB7Ly9NQUlMLTEyNjA0CgkJCQkJCS8vINCd0YPQttC90L4g0L/R
gNC+0Y3QvNGD0LvQuNGA0L7QstCw0YLRjCBwbGFjZWhvbGRlciwg0LXRgdC70Lgg
0L/QvtC70LUg0LLQstC+0LTQsCDQv9GD0YHRgtC+0LUKCQkJCQkJbGF5ZXJfZm9y
bS5fcGxhY2Vob2xkZXJDaGVjaygpOwoJCQkJCX0KCQkJCX0KCQkJfSwKCgkJCV9h
ZHZhbmNlZDogZnVuY3Rpb24gKGV4cGFuZCwgZXZ0KXsKCQkJCXZhciBzZWxmID0g
dGhpcwoJCQkJCSwgJExheWVyID0gdGhpcy4kTGF5ZXIKCQkJCTsKCQkJCWlmKCEk
TGF5ZXIpJExheWVyID0gdGhpcy4kTGF5ZXIgPSAkKCcjcG9wdXBfYWR2YW5jZWQt
c2VhcmNoJyk7CgoJCQkJaWYoIGV4cGFuZCA9PSBudWxsICl7CgkJCQkJZXhwYW5k
CT0gISRMYXllci5pcygnOnZpc2libGUnKTsKCQkJCX0KCQkJCWVsc2UgaWYoICFl
eHBhbmQgJiYgZXZ0LnR5cGUgIT0gJ2hhc2hjaGFuZ2UnICl7CgkJCQkJaWYoICEk
KGV2dC5jdXJyZW50VGFyZ2V0KS5pcygnLmpzLWNsb3NlJykgJiYgJExheWVyLmhh
cyhldnQudGFyZ2V0KVswXSApewoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJfQoK
CQkJCWlmKCBleHBhbmQgJiYgISRMYXllci5kYXRhKCdpbml0ZWQnKSApewoJCQkJ
CWFqcy5yZXF1aXJlKCd7alF1ZXJ5fScrJ2pxdWVyeS5tcmNhbGVuZGFyJywgZnVu
Y3Rpb24gKCl7CgkJCQkJCSRMYXllcgoJCQkJCQkJLmRhdGEoJ2luaXRlZCcsIHRy
dWUpCgkJCQkJCQkuZmluZCgnLmZvcm1fX3NlbGVjdCcpCgkJCQkJCQkJLmZvcm1f
X3NlbGVjdCgpCgkJCQkJCQkJLmVuZCgpCgkJCQkJCQkuZmluZCgnLmpzLWRhdGUt
ZnJvbS1jYWxlbmRhcicpCgkJCQkJCQkJLm1yY2FsZW5kYXIoewoJCQkJCQkJCQl0
b2dnbGU6ICcuanMtZGF0ZS1mcm9tJywKCQkJCQkJCQkJbGlua29mZjogdHJ1ZSwK
CQkJCQkJCQkJb25jbGljazogZnVuY3Rpb24oZGF0YSwgZXZ0KSB7CgkJCQkJCQkJ
CQlldnQucHJldmVudERlZmF1bHQoKTsKCQkJCQkJCQkJCSRMYXllci5maW5kKCcu
anMtZGF0ZS1mcm9tJykudmFsKGRhdGFbMl0gKyAnLicgKyBkYXRhWzFdICsgJy4n
ICsgZGF0YVswXSk7CgkJCQkJCQkJCX0KCQkJCQkJCQl9KTsKCQkJCQkJCSQoJy5q
cy1jYWxlbmRhci1saW5rJywgJExheWVyKQoJCQkJCQkJCS5jbGljayhmdW5jdGlv
bihldnQpIHsKCQkJCQkJCQkJJCh0aGlzKS5zaWJsaW5ncygnaW5wdXQnKS5mb2N1
cygpOwoJCQkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCQkJfSk7CgkJCQkJfSk7
CgoKCQkJCQl2YXIgYWpzU3VnZ2VzdHNFdmVudHMgPSB7Ly8gTUFJTC0xMzg3MAoJ
CQkJCQlldmVudHM6IHsKCQkJCQkJCSJzdWdnZXN0czpzZWxlY3QiOiBmdW5jdGlv
bigpIHsKCQkJCQkJCQlzZWxmLl9fc3VnZ2VzdFNlbGVjdGVkID0gdHJ1ZTsKCQkJ
CQkJCX0KCQkJCQkJCSwgInN1Z2dlc3RzOmZpbmQiOiBmdW5jdGlvbihlKSB7CgkJ
CQkJCQkJc2VsZi5fX3N1Z2dlc3RTZWxlY3RlZCA9ICFlLnZhbDsKCQkJCQkJCX0K
CQkJCQkJfQoJCQkJCX07CgoKCQkJCQlhanMucmVxdWlyZSgne2pRdWVyeX0nKydl
eHBhbmRGaWVsZCcgKyAoIG1haWxydS5DYW5Vc2VOZXdBZGRyZXNzYm9va1N1Z2dl
c3RzID8gIix7alF1ZXJ5fWFkZHJlc3Nib29rU3VnZ2VzdCIgOiAiIiApLCBmdW5j
dGlvbigpIHsKCQkJCQkJJCgnLmpzLWFjLWFkZHJlc3Nib29rJywgJExheWVyKS5l
eHBhbmRGaWVsZCh7IHBhcmVudDogJ2JvZHknIH0pOwoJCQkJCQlpZihtYWlscnUu
Q2FuVXNlTmV3QWRkcmVzc2Jvb2tTdWdnZXN0cykgewoJCQkJCQkJJCgnLmpzLWFj
LWFkZHJlc3Nib29rJywgJExheWVyKS5hZGRyZXNzYm9va1N1Z2dlc3QoT2JqZWN0
LmV4dGVuZCh7CgkJCQkJCQkJb25seUVtYWlsQWZ0ZXJTZWxlY3Q6IHRydWUKCQkJ
CQkJCQksIGRlbGV0ZUxhc3RDb21tYTogdHJ1ZQoJCQkJCQkJCSwgbXVsdGlTdWdn
ZXN0czogZmFsc2UKCQkJCQkJCQksIHVwZGF0ZU9uTWFyazogdHJ1ZQoJCQkJCQkJ
CSwgYXV0b01hcmtlZDogLTEKCQkJCQkJCX0sIGFqc1N1Z2dlc3RzRXZlbnRzKSk7
CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkKCcuanMtYWMtYWRkcmVzc2Jvb2snLCAk
TGF5ZXIpLmJpbmQoJ2ZvY3VzIGtleXVwJywgZnVuY3Rpb24gX2ZuKCl7CgkJCQkJ
CQkJbWFpbHJ1LlV0aWxzLmdldEFkZHJlc3NCb29rKCk7CgkJCQkJCQkJJCh0aGlz
KS51bmJpbmQoJ2ZvY3VzIGtleXVwJywgX2ZuKTsKCQkJCQkJCX0pCgkJCQkJCQku
ZWFjaChmdW5jdGlvbigpewoJCQkJCQkJCSQuQXV0b2NvbXBsZXRlci5hZGRyZXNz
Ym9vayh0aGlzLCB0cnVlKTsKCQkJCQkJCX0pOwoJCQkJCQl9CgkJCQkJfSk7CgoJ
CQkJCWFqcy5yZXF1aXJlKCd7bWFpbHJ1LnVpfScrJ21haWxydS51aS5TZWFyY2hT
dWdnZXN0JywgZnVuY3Rpb24gKCl7CgkJCQkJCXZhciBvcHRzID0gT2JqZWN0LmV4
dGVuZCh7CgkJCQkJCQljbkJsdXI6ICdwb3J0YWwtbWVudV9fc2VhcmNoX2JsdXIn
CgkJCQkJCQksIGhpZGVFbWFpbExpc3Q6IHRydWUKCQkJCQkJCSwgYXV0b1RhYklu
ZGV4OiBmYWxzZQoJCQkJCQkJLCBzdWdnZXN0OiB7CgkJCQkJCQkJY25JdGVtOiAg
ICAgICAncG9ydGFsLW1lbnVfX3NlYXJjaF9fc3VnZ2VzdF9faXRlbScKCQkJCQkJ
CQksIGNuU2VsZWN0ZWQ6ICAgJ3BvcnRhbC1tZW51X19zZWFyY2hfX3N1Z2dlc3Rf
X2l0ZW1fc2VsZWN0ZWQnCgkJCQkJCQkJLCBjbkxpc3Q6ICdwb3J0YWwtbWVudV9f
c2VhcmNoX19zdWdnZXN0X19pbm5lcicKCQkJCQkJCQksIGNuSW50ZXJuZXRDb250
OiAnanMtc3VnZ2VzdC1pbnRlcm5ldC1jb250JwoJCQkJCQkJCSwgY25JbnRlcm5l
dDogJ3BvcnRhbC1tZW51X19zZWFyY2hfX3N1Z2dlc3RfX2l0ZW1faW50ZXJuZXQt
bGluaycKCQkJCQkJCQksIHRlbXBsYXRlOiAgICAgZnVuY3Rpb24gKHZhbCwgaXRl
bSl7CgkJCQkJCQkJCXZhciB0ZXh0ID0gKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3Qg
JiYgKGl0ZW1bIndvcmQiXSB8fCBpdGVtWyJ0ZXh0Il0pIHx8IGl0ZW0gfHwgIiIp
ICsgIiI7CgkJCQkJCQkJCXZhbCA9IF9IVE1MX2VzY2FwZV8odGV4dCkucmVwbGFj
ZShuZXcgUmVnRXhwKHZhbCwgJ2knKSwgJzxiPiQmPC9iPicpOwoJCQkJCQkJCQly
ZXR1cm4gJzxkaXYgZGF0YS1zdWdnZXN0PVwnJyArIHRleHQgKyAnXCcgY2xhc3M9
IicgKyB0aGlzLm9wdHMuY25JdGVtKyciPicrdmFsKyc8L2Rpdj4nOwoJCQkJCQkJ
CX0KCQkJCQkJCQksIHNlYXJjaFVybDogICAgJ2h0dHA6Ly9nby5tYWlsLnJ1L3Nl
YXJjaD9mcj1tYWlsc2VhcmNoJnE9I3F1ZXJ5IycKCQkJCQkJCQksIGFqYXhVcmw6
ICAgICAgJy9jZ2ktYmluL2dvc2VhcmNoX2FqYXg/YWpheF9jYWxsPTEmZnVuY19u
YW1lPWFqYXhfc3VnZ2VzdCZkYXRhPVsiI3F1ZXJ5IyJdJwoJCQkJCQkJCSwgYXV0
b3N1Ym1pdDogICBmYWxzZQoJCQkJCQkJCSwgc2hvd0ludGVybmV0OglmYWxzZQoJ
CQkJCQkJfQoJCQkJCQl9LCBhanNTdWdnZXN0c0V2ZW50cyk7CgoJCQkJCQlmdW5j
dGlvbiBvblNob3coZSkgewoJCQkJCQkJdmFyIGlucHV0ID0gZS50YXJnZXQuJElu
cHV0LAoJCQkJCQkJCXN1Z2dlc3RzQ29udGFpbmVyID0gZS50YXJnZXQuJExpc3Q7
CgoJCQkJCQkJaWYoIChzdWdnZXN0c0NvbnRhaW5lciA9IHN1Z2dlc3RzQ29udGFp
bmVyWzBdKQoJCQkJCQkJCSYmIChzdWdnZXN0c0NvbnRhaW5lciA9IHN1Z2dlc3Rz
Q29udGFpbmVyLnBhcmVudE5vZGUpLy9USElTIElTIEhBQ0shCgkJCQkJCQkJKSB7
CgkJCQkJCQkJc3VnZ2VzdHNDb250YWluZXIuc3R5bGUud2lkdGggPSBpbnB1dFsw
XS5jbGllbnRXaWR0aCArICJweCI7CgkJCQkJCQl9CgkJCQkJCX0KCgkJCQkJCShu
ZXcgbWFpbHJ1LnVpLlNlYXJjaFN1Z2dlc3QoJyNhZHYtc2VhcmNoLXRoZW1lLW5h
bWUnLCBvcHRzKS5TZWFyY2guU3VnZ2VzdCkuYWRkVHJpZ2dlcigic3VnZ2VzdHM6
c2hvdyIsIG9uU2hvdyk7CgkJCQkJCShuZXcgbWFpbHJ1LnVpLlNlYXJjaFN1Z2dl
c3QoJyNhZHYtc2VhcmNoLXdvcmQtY29udGFpbicsIG9wdHMpLlNlYXJjaC5TdWdn
ZXN0KS5hZGRUcmlnZ2VyKCJzdWdnZXN0czpzaG93Iiwgb25TaG93KTsKCQkJCQl9
KTsKCgkJCQkJYWpzU3VnZ2VzdHNFdmVudHMgPSBudWxsOwoKICAgICAgICAgICAg
ICAgICAgICAvLyBNQUlMLTg2MTEKICAgICAgICAgICAgICAgICAgICBpZih0aGlz
LlNlYXJjaC4kT3BlcmFuZHMgJiYgIXRoaXMuU2VhcmNoLiRPcGVyYW5kc1siZG9P
bmNlX3Bhc19vcHJkcyJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
U2VhcmNoLiRPcGVyYW5kc1siZG9PbmNlX3Bhc19vcHJkcyJdID0gdHJ1ZTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICQoIiNwb3B1cF9hZHZhbmNlZC1zZWFyY2gi
KS5maW5kKCJmb3JtIikuYmluZChJTlBVVF9FVkVOVF9OQU1FICsgIiBjaGFuZ2Ui
LCB0aGlzLl9vcGVyYW5kTGlua2VkSW5wdXRDaGFuZ2UpCiAgICAgICAgICAgICAg
ICAgICAgfQoJCQkJfQoKCQkJCWlmKCBleHBhbmQgKXsKCQkJCQkvLyBNQUlMLTk0
NjIgY29tbWVudCMzIDIpIFNUQVJUCgkJCQkJaWYoISRMYXllci5kYXRhKCJhbHJl
YWR5X3NldF9vbnN1Ym1pdCIpKSB7CgkJCQkJCSRMYXllci5kYXRhKCJhbHJlYWR5
X3NldF9vbnN1Ym1pdCIsIHRydWUpOwoJCQkJCQkkKHRoaXMuJFNlYXJjaCkuYmlu
ZCgic3VibWl0IiwgZnVuY3Rpb24oZXZ0KSB7CgkJCQkJCQl2YXIgbGF5ZXJfZm9y
bTsKCQkJCQkJCWlmKGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgewoJCQkJCQkJ
CWxheWVyX2Zvcm0gPSAoJExheWVyLmZpbmQoImZvcm0iKSB8fCBbXSlbMF07CgkJ
CQkJCQkJaWYobGF5ZXJfZm9ybSlsYXllcl9mb3JtLnJlc2V0KCk7CgkJCQkJCQl9
CgkJCQkJCX0pOwoJCQkJCX0KCQkJCQkvLyBNQUlMLTk0NjIgY29tbWVudCMzIDIp
IEVORAoKICAgICAgICAgICAgICAgICAgICBpZih0aGlzLlNlYXJjaC4kT3BlcmFu
ZHMpIHsvLyBNQUlMLTg2MTEKICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXku
Zm9yRWFjaChPYmplY3Qua2V5cyh0aGlzLlNlYXJjaC4kT3BlcmFuZHMub3BlcmFu
ZHMpLCBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkTGF5ZXIuZmluZCgnW25hbWU9IicrbmFtZSsnIl0nKS52YWwodGhpcy5TZWFy
Y2guJE9wZXJhbmRzLmdldE9wZXJhbmRWYWx1ZShuYW1lKSkudHJpZ2dlcignY2hh
bmdlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCQkJCQkJ
T2JqZWN0LmZvckVhY2goYWpzLnRvT2JqZWN0KGpzSGlzdG9yeS5nZXQoKSksIGZ1
bmN0aW9uICh2YWwsIG5hbWUpewoJCQkJCQkJJExheWVyLmZpbmQoJ1tuYW1lPSIn
K25hbWUrJyJdJykudmFsKHZhbCkudHJpZ2dlcignY2hhbmdlJyk7CgkJCQkJCX0p
OwogICAgICAgICAgICAgICAgICAgIH0KCQkJCX0KCgkJCQkkTGF5ZXIKCQkJCQku
ZGlzcGxheShleHBhbmQpCgkJCQkJW2V4cGFuZCA/ICdkZWxlZ2F0ZScgOiAndW5k
ZWxlZ2F0ZSddKCcuanMtY2xvc2UnLCAnY2xpY2snLCB0aGlzLl9hZHZhbmNlZEhp
ZGUpCgkJCQkJLmZpbmQoJ2Zvcm0nKQoJCQkJCQlbZXhwYW5kID8gJ2JpbmQnIDog
J3VuYmluZCddKCdzdWJtaXQnLCB0aGlzLl9nbzJBZHZhbmNlZCkKCQkJCQkJW2V4
cGFuZCA/ICdmaW5kJyA6ICdGJ10oJ2lucHV0W2F1dG9mb2N1cz10cnVlXSx0ZXh0
YXJlYVthdXRvZm9jdXM9dHJ1ZV0nKS5mb2N1cygpCgkJCQk7CgoJCQkJKGZ1bmN0
aW9uICgpewoJCQkJCSQoZG9jdW1lbnQpW2V4cGFuZCA/ICdiaW5kJyA6ICd1bmJp
bmQnXSgnY2xpY2snLCB0aGlzLl9hZHZhbmNlZEhpZGUpOwoJCQkJfS5nYXAodGhp
cykpKCk7CgoJCQkJaWYoIGV2dCApIGV2dC5wcmV2ZW50RGVmYXVsdCgpOwoJCQl9
LAoKCQkJX2dvMkFkdmFuY2VkOiBmdW5jdGlvbiAoZXZ0KXsKCQkJCS8qKiBAbmFt
ZXNwYWNlIGRhdGEucV9kYXRlICovCgkJCQkvKiogQG5hbWVzcGFjZSBkYXRhLnFf
ZGF0ZV9sYXBzZSAqLwoJCQkJdmFyCgkJCQkJICBkYXRhCT0gJChldnQudGFyZ2V0
KS50b09iamVjdCgpCgkJCQkJLCBsYXBzZQk9IE1hdGgubWF4KH5+ZGF0YS5xX2Rh
dGVfbGFwc2UsIDApICoganNDb29raWUuREFZICogMTAwMAoJCQkJCSwgdGltZQk9
IChuZXcgRGF0ZSgoZGF0YS5xX2RhdGUrJycpLnJlcGxhY2UoLyhcZCspXC4oXGQr
KVwuKFxkKykvLCAnJDMvJDIvJDEnKSkpLmdldFRpbWUoKQoJCQkJCSwgYmRhdGUJ
PSBuZXcgRGF0ZSh0aW1lIC0gbGFwc2UpCgkJCQkJLCBlZGF0ZQk9IG5ldyBEYXRl
KHRpbWUgKyBsYXBzZSkKCQkJCQksIHRtcAoJCQkJOwoKCQkJCWlmKCB0aW1lICl7
CgkJCQkJZGF0YS5kZGIgPSBiZGF0ZS5nZXREYXRlKCk7CgkJCQkJZGF0YS5kbWIg
PSBiZGF0ZS5nZXRNb250aCgpICsgMTsKCQkJCQlkYXRhLmR5YiA9IGJkYXRlLmdl
dEZ1bGxZZWFyKCk7CgkJCQkJZGF0YS5kZGUgPSBlZGF0ZS5nZXREYXRlKCk7CgkJ
CQkJZGF0YS5kbWUgPSBlZGF0ZS5nZXRNb250aCgpICsgMTsKCQkJCQlkYXRhLmR5
ZSA9IGVkYXRlLmdldEZ1bGxZZWFyKCk7CgkJCQl9CgoJCQkJdGhpcy5fYWR2YW5j
ZWRIaWRlKGV2dCk7CgoJCQkJLy8gTUFJTC0xMzk5MiBTVEFSVAoJCQkJaWYoICh0
bXAgPSBkYXRhWyJxX2Zyb20iXSkKCQkJCQkmJiAodG1wID0gKHRtcCArICIiKS50
cmltKCkpLmNoYXJBdCh0bXAubGVuZ3RoIC0gMSkgPT0gIiwiCgkJCQkpIHsKCQkJ
CQlkYXRhWyJxX2Zyb20iXSA9IHRtcC5zdWJzdHIoMCwgdG1wLmxlbmd0aCAtIDEp
OwoJCQkJfQoJCQkJaWYoICh0bXAgPSBkYXRhWyJxX3RvIl0pCgkJCQkJJiYgKHRt
cCA9ICh0bXAgKyAiIikudHJpbSgpKS5jaGFyQXQodG1wLmxlbmd0aCAtIDEpID09
ICIsIgoJCQkJCSkgewoJCQkJCWRhdGFbInFfdG8iXSA9IHRtcC5zdWJzdHIoMCwg
dG1wLmxlbmd0aCAtIDEpOwoJCQkJfQoJCQkJLy8gTUFJTC0xMzk5MiBFTkQKCgkJ
CQlkYXRhLmZyb21fc2VhcmNoID0gbWFpbHJ1LmlzU2VhcmNoUGFnZSgpID8gMSA6
IDA7Ly8gTUFJTC0xMzg3MAoKCQkJCWpzSGlzdG9yeS5zZXQobWFpbHJ1LmdldFBh
Z2VVUkwoJ2dvc2VhcmNoJykrJz8nK2Fqcy50b1F1ZXJ5KGRhdGEpKTsKCgkJCQll
dnQucHJldmVudERlZmF1bHQoKTsKCQkJfSwKCgkJCV9vblByaW50OiBmdW5jdGlv
biAoKXsKCQkJCXRoaXMuX192YWx1ZSA9IHRoaXMudmFsKCk7CgoJCQkJY2xlYXJU
aW1lb3V0KHRoaXMuX2F1dG9Mb2dfcGlkKTsKCQkJCWlmKCAhdGhpcy5fc3RhcnRU
UyApewoJCQkJCXRoaXMuX3N0YXJ0VFMgPSBhanMubm93KCk7CgkJCQl9CgkJCX0s
CgoJCQlfb25TZWxlY3Q6IGZ1bmN0aW9uIChldnQpIHsKCQkJCXZhciBzZWFyY2hO
YW1lCgkJCQkJLCBmb3JtCgkJCQkJLCBpdGVtCgkJCQkJLCBvblN1Ym1pdENoZWNr
CgkJCQkJLCBvcmlnaW5hbElucHV0VmFsdWUKCQkJCQksIHN1Z2dlc3RPYmplY3Qg
PSBldnQudGFyZ2V0CgkJCQk7CgoJCQkJLy8gTUFJTC0xMzg3MAoJCQkJdGhpcy5f
X3N1Z2dlc3RTZWxlY3RlZCA9IHRydWU7CgkJCQl0aGlzLiRGcm9tU3VnZ2VzdHNJ
bnB1dC52YWwoIjEiKTsKCgoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJ
CQlqUXVlcnkodGhpcy4kSW5wdXRbMF0pLmNoYW5nZSgpOwoJCQkJfS5iaW5kKHN1
Z2dlc3RPYmplY3QpKTsKCgkJCQljbGVhclRpbWVvdXQodGhpcy5fYXV0b0xvZ19w
aWQpOwoJCQkJdGhpcy5fbG9nTWUoZXZ0Lm5ld1N1Z2dlc3QsIGV2dC5uZXdTdWdn
ZXN0SW5kZXgpOwoKCQkJCS8vTUFJTC05NDYyCgkJCQkvLyBpbnRlcm5hbCBldnQu
dGFyZ2V0WyJfc2VsZWN0Il0gbWV0aG9kIHRyaWdnZXJlZCBvbmx5IGZvciBrZXli
b2FyZCBldmVudHMKCQkJCS8qaWYoZXZ0LmV2ZW50ICYmIGV2dC50YXJnZXRbIl9z
ZWxlY3QiXSAmJiBldnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0
IikgIT0gbnVsbCkgewoJCQkJCWV2dC50YXJnZXQuJElucHV0WzBdLnZhbHVlID0g
ZXZ0LnRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtc3VnZ2VzdCIpOwoJCQkJfSov
CgoJCQkJaWYoICF0aGlzLlNlYXJjaC4kT3BlcmFuZHMKCQkJCQkvLyYmIGV2dFsi
c3VibWl0Rm9ybSJdINCi0LDQutCw0Y8g0L/RgNC+0LLQtdGA0LrQsCDQsNGE0YTQ
tdC60YLQuNGCINC00YDRg9Cz0LjQvCDQsdCw0LPQvtC8IGh0dHBzOi8vamlyYS5t
YWlsLnJ1L2Jyb3dzZS9NQUlMLTExODEzCgkJCQkpIHsKCQkJCQkvLyBNQUlMLTg5
NjAsIE1BSUwtOTI5MyBhbmQgTUFJTC05MzA2IDwKCQkJCQkvL01BSUwtOTI5MwoJ
CQkJCXNlYXJjaE5hbWUgPSAkKGV2dC5uZXdTdWdnZXN0Tm9kZSkuZGF0YSgic2Vh
cmNoLW5hbWUiKTsKCQkJCQlpZihzZWFyY2hOYW1lKSB7CgkJCQkJCXN1Z2dlc3RP
YmplY3RbIl9fb3JpZ2luYWwkSW5wdXROYW1lIl0gPSBzdWdnZXN0T2JqZWN0LiRJ
bnB1dFswXS5uYW1lOwoJCQkJCQlzdWdnZXN0T2JqZWN0LiRJbnB1dFswXS5uYW1l
ID0gc2VhcmNoTmFtZTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCS8vIFJldmVy
dCB0aGUgb3JpZ2luYWwgY2hhbmdlZCB2YWx1ZXMKCQkJCQkJLy8gTUFJTC05Mjkz
CgkJCQkJCWlmKHN1Z2dlc3RPYmplY3RbIl9fb3JpZ2luYWwkSW5wdXROYW1lIl0p
c3VnZ2VzdE9iamVjdC4kSW5wdXRbMF0ubmFtZSA9IHN1Z2dlc3RPYmplY3RbIl9f
b3JpZ2luYWwkSW5wdXROYW1lIl07CgkJCQkJCXN1Z2dlc3RPYmplY3RbIl9fb3Jp
Z2luYWwkSW5wdXROYW1lIl0gPSB2b2lkIDA7CgkJCQkJfQoKCQkJCQkvL01BSUwt
OTMwNgoJCQkJCW9yaWdpbmFsSW5wdXRWYWx1ZSA9IHN1Z2dlc3RPYmplY3QuJElu
cHV0WzBdLnZhbHVlOwoJCQkJCWl0ZW0gPSBldnQubmV3U3VnZ2VzdERhdGEgfHwg
b3JpZ2luYWxJbnB1dFZhbHVlOwoKCQkJCQkvL3N1Z2dlc3RPYmplY3QuJElucHV0
WzBdLnZhbHVlID0gKHR5cGVvZiBpdGVtID09ICJvYmplY3QiICYmIGl0ZW0uc3Vn
Z2VzdCB8fCBpdGVtKSArICIiOwoJCQkJCS8vc3VnZ2VzdE9iamVjdC52YWwodHlw
ZW9mIGl0ZW0gPT0gIm9iamVjdCIgJiYgaXRlbS5zdWdnZXN0IHx8IGl0ZW0pICsg
IiI7CgoJCQkJCWlmKHR5cGVvZiBpdGVtID09ICJvYmplY3QiICYmIGl0ZW0uc2Vh
cmNoKSB7CgkJCQkJCXN1Z2dlc3RPYmplY3RbIl9fb3JpZ2luYWwkSW5wdXRWYWx1
ZSJdID0gb3JpZ2luYWxJbnB1dFZhbHVlOwoJCQkJCQlldnRbIm5ld1N1Z2dlc3Qi
XSA9IGl0ZW0uc2VhcmNoOwoJCQkJCX0KCQkJCQllbHNlIGlmKHN1Z2dlc3RPYmpl
Y3RbIl9fb3JpZ2luYWwkSW5wdXRWYWx1ZSJdKSB7CgkJCQkJCWV2dFsibmV3U3Vn
Z2VzdCJdID0gc3VnZ2VzdE9iamVjdFsiX19vcmlnaW5hbCRJbnB1dFZhbHVlIl07
CgkJCQkJCWRlbGV0ZSBzdWdnZXN0T2JqZWN0WyJfX29yaWdpbmFsJElucHV0VmFs
dWUiXTsKCQkJCQl9CgoJCQkJCWZvcm0gPSBzdWdnZXN0T2JqZWN0LiRFbG0uZmlu
ZCgiZm9ybSIpOwoKCQkJCQlpZihmb3JtICYmIGZvcm0ubGVuZ3RoKSB7CgkJCQkJ
CWlmKCEob25TdWJtaXRDaGVjayA9IHN1Z2dlc3RPYmplY3RbIl9faXNPblN1Ym1p
dENoZWNrIl0pKSB7CgkJCQkJCQlvblN1Ym1pdENoZWNrID0gc3VnZ2VzdE9iamVj
dFsiX19pc09uU3VibWl0Q2hlY2siXSA9IGZ1bmN0aW9uKGV2dCkgewoJCQkJCQkJ
CXZhciB0bXA7CgkJCQkJCQkJaWYoZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7
CgkJCQkJCQkJCS8vIFJldmVydCB0aGUgb3JpZ2luYWwgY2hhbmdlZCB2YWx1ZXMK
CQkJCQkJCQkJLy8gTUFJTC05MjkzCgkJCQkJCQkJCWlmKHRtcCA9IHRoaXNbIl9f
b3JpZ2luYWwkSW5wdXROYW1lIl0pIHsKCQkJCQkJCQkJCXRoaXMuJElucHV0WzBd
Lm5hbWUgPSB0bXA7CgkJCQkJCQkJCQl0aGlzWyJfX29yaWdpbmFsJElucHV0TmFt
ZSJdID0gdm9pZCAwOwoJCQkJCQkJCQl9CgkJCQkJCQkJCS8vIFJldmVydCB0aGUg
b3JpZ2luYWwgaW5wdXQudmFsdWUKCQkJCQkJCQkJLy8gTUFJTC05MzA2CgkJCQkJ
CQkJCWlmKHRtcCA9IHRoaXNbIl9fb3JpZ2luYWwkSW5wdXRWYWx1ZSJdKSB7CgkJ
CQkJCQkJCQl0aGlzLiRJbnB1dFswXS52YWx1ZSA9IHRtcDsKCQkJCQkJCQkJCXRo
aXNbIl9fb3JpZ2luYWwkSW5wdXRWYWx1ZSJdID0gdm9pZCAwOwoJCQkJCQkJCQl9
CgkJCQkJCQkJfQoJCQkJCQkJfS5iaW5kKHN1Z2dlc3RPYmplY3QpOwoKCQkJCQkJ
CSQoZm9ybSkuYmluZCgic3VibWl0Iiwgb25TdWJtaXRDaGVjayk7CgkJCQkJCX0K
CQkJCQl9CgkJCQkJZWxzZSBpZihzdWdnZXN0T2JqZWN0WyJfX29yaWdpbmFsJElu
cHV0TmFtZSJdKSB7CgkJCQkJCXN1Z2dlc3RPYmplY3QuJElucHV0WzBdLm5hbWUg
PSBzdWdnZXN0T2JqZWN0WyJfX29yaWdpbmFsJElucHV0TmFtZSJdOwoJCQkJCQlm
b3JtID0gc3VnZ2VzdE9iamVjdC4kRWxtLmZpbmQoImZvcm0iKTsKCQkJCQkJaWYo
Zm9ybSAmJiBzdWdnZXN0T2JqZWN0WyJfX2lzT25TdWJtaXRDaGVjayJdKSB7CgkJ
CQkJCQkkKGZvcm0pLnVuYmluZCgic3VibWl0Iiwgc3VnZ2VzdE9iamVjdFsiX19p
c09uU3VibWl0Q2hlY2siXSk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJLy8gPiBNQUlM
LTg5NjAsIE1BSUwtOTI5MyBhbmQgTUFJTC05MzA2CgkJCQl9CgkJCX0sCgoKCQkJ
X2xvZ01lOiBmdW5jdGlvbiAodmFsLCBpZHgsIHVzZUVudGVyKXsKCQkJCWlmKCAh
dGhpcy5fbG9nTG9jayAmJiB0aGlzLl9zdGFydFRTICl7CgkJCQkJdGhpcy5fbG9n
TG9jayA9IDE7CgoJCQkJCXZhciBTdWdnZXN0ID0gdGhpcy5TZWFyY2guZ2V0U3Vn
Z2VzdCgpLCBfdmFsID0gdGhpcy5fX3ZhbHVlOwoKCQkJCQltYWlscnUuVXRpbHMu
c3VnZ2VzdExvZygnc2VhcmNoJywgewoJCQkJCQkgIHN0YXJ0X3RzOgl0aGlzLl9z
dGFydFRTCgkJCQkJCSwgc2VsX3RzOgl0aGlzLl9zZWxUUwoJCQkJCQksIHZhbDoJ
CV92YWwKCQkJCQkJLCBzZWw6CQl2YWwKCQkJCQkJLCBkYXRhOgkJU3VnZ2VzdC5f
Y2FjaGVbX3ZhbF0gfHwgW10KCQkJCQkJLCBpZHg6CQlpZHgKCQkJCQkJLCBlbnRl
cjoJdXNlRW50ZXIKCQkJCQkJLCBhYmpzOgkJJC5pc0FycmF5KG1haWxydS5hYmpz
RGF0YSkgPyBtYWlscnUuYWJqc0RhdGEubGVuZ3RoIDogMAoJCQkJCX0pOwoKCQkJ
CQl0aGlzLl9zZWxUUyA9IHRoaXMuX3N0YXJ0VFMgPSAwOwoJCQkJCXNldFRpbWVv
dXQodGhpcy5fbG9nVW5sb2NrLCAxMDApOwoJCQkJfQoJCQl9LAoKCQkJX2F1dG9M
b2dNZTogZnVuY3Rpb24gKHVzZUVudGVyKXsKCQkJCXRoaXMuX2xvZ01lKCcnLCAt
MSwgdXNlRW50ZXIpOwoJCQl9LAoKCQkJX3JlcXVlc3Q6IGZ1bmN0aW9uICh1cmws
IGZuKXsKCQkJCWlmKCAhbWFpbHJ1LmFianNEYXRhICl7CgkJCQkJdmFyIF9mbiA9
IGZ1bmN0aW9uICgpewoJCQkJCQl2YXIgYXJncyA9IGFyZ3VtZW50czsKCQkJCQkJ
YWpzLndhaXQoJ2FianM6Y29tcGxldGUnLCBmdW5jdGlvbiAoKXsgZm4uYXBwbHko
dGhpcywgYXJncyk7IH0pOwoJCQkJCX07CgkJCQkJbWFpbHJ1LlV0aWxzLmdldEFk
ZHJlc3NCb29rKCk7CgkJCQkJJC5nZXQodXJsLCBfZm4sICdqc29uJyk7CgkJCQl9
IGVsc2UgewoJCQkJCSQuZ2V0KHVybCwgZm4sICdqc29uJyk7CgkJCQl9CgkJCX0s
CgoJCQkvKioKCQkJICogQHRoaXMge21haWxydS51aS5TZWFyY2hTdWdnZXN0fQoJ
CQkgKiAqLwoJCQlzZXRTdWdnZXN0Tm9kZXNWaXNpYmlsaXR5OiBmdW5jdGlvbihl
dnQpIHsKCQkJCXZhciBTdWdnZXN0ID0gdGhpcy5TZWFyY2ggJiYgdGhpcy5TZWFy
Y2guU3VnZ2VzdDsKCQkJCWlmKCAhU3VnZ2VzdCApIHsKCQkJCQlyZXR1cm47CgkJ
CQl9CgoJCQkJdmFyIHN1Z2dlc3ROb2RlcyA9IFN1Z2dlc3QuX19MaXN0SXRlbXMg
Ly8gVE9ETzo6IHJlcGxhY2UgX19MaXN0SXRlbXMgd2l0aCBwdWJsaWMgcHJvcGVy
dHkKCQkJCQksIG5vZGUKCQkJCQksIG5vZGVfaGVpZ2h0CgkJCQkJLCBpID0gMAoJ
CQkJCSwgbAoJCQkJCSwgawoJCQkJCSwgaGFsZldpbmRvd0hlaWdodAoJCQkJCSwg
c3VnZ2VzdE5vZGVzX2hlaWdodAoJCQkJCSwgc3VnZ2VzdEdyb3VwcyA9IHt9CgkJ
CQkJLCBzdWdnZXN0R3JvdXBzS2V5cyA9IFtdCgkJCQkJLCBzdWdnZXN0R3JvdXAK
CQkJCTsKCgkJCQlmdW5jdGlvbiBnZXRIZWlnaHQoIG5vZGUgKSB7CgkJCQkJdmFy
IHJlc3VsdCA9IDA7CgkJCQkJaWYoIG5vZGUgKSB7CgkJCQkJCXJlc3VsdCA9IG5v
ZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0OwoJCQkJCX0KCQkJCQly
ZXR1cm4gcmVzdWx0OwoJCQkJfQoKCQkJCWlmKAoJCQkJCSFTdWdnZXN0LmlzRXhw
YW5kZWQoKSAvLyBzdWdnZXN0cyBpcyBoaWRkZW4KCQkJCQl8fCBldnQgJiYgKCFl
dnRbInNob3dDb250YWluZXIiXSB8fCAhZXZ0WyJzaG93TGlzdCJdKSAvLyBzdWdn
ZXN0cyBpcyBoaWRkZW4KCQkJCQl8fCAhc3VnZ2VzdE5vZGVzIC8vIG5vIHN1Z2dl
c3RzIG5vZGVzCgkJCQkJfHwgIShzdWdnZXN0Tm9kZXNfaGVpZ2h0ID0gZ2V0SGVp
Z2h0KFN1Z2dlc3QuJExpc3RbMF0pICsgZ2V0SGVpZ2h0KFN1Z2dlc3QuJEludGVy
bmV0Q29udFswXSkpIC8vIGhlaWdodCBpcyAwLiBTdWdnZXN0cyBpcyBoaWRkZW4/
CgkJCQkpIHsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJaGFsZldpbmRvd0hlaWdo
dCA9IE1hdGguZmxvb3IoICQod2luZG93KS5oZWlnaHQoKSAvIDIgKTsKCgkJCQl3
aGlsZSggbm9kZSA9IHN1Z2dlc3ROb2Rlc1tpKytdICkgeyAvLyBmaWxsIHRoZSBn
cm91cHMgYXJyYXlzCgkJCQkJc3VnZ2VzdEdyb3VwID0gbm9kZS5nZXRBdHRyaWJ1
dGUoImRhdGEtc2VhcmNoLW5hbWUiKSB8fCAiIjsKCQkJCQlpZiggIXN1Z2dlc3RH
cm91cHNbc3VnZ2VzdEdyb3VwXSApIHsKCQkJCQkJc3VnZ2VzdEdyb3Vwc1tzdWdn
ZXN0R3JvdXBdID0gW107CgkJCQkJCXN1Z2dlc3RHcm91cHNLZXlzLnB1c2goc3Vn
Z2VzdEdyb3VwKTsKCQkJCQl9CgkJCQkJc3VnZ2VzdEdyb3Vwc1tzdWdnZXN0R3Jv
dXBdLnB1c2gobm9kZSk7CgoJCQkJCWlmKCBub2RlLnN0eWxlLmRpc3BsYXkgPT0g
Im5vbmUiICkgeyAvLyBhZGQgbm9kZSBoZWlnaHQgdG8gY29udGFpbmVyIGhlaWdo
dCwgaWYgbm9kZSBpcyBoaWRkZW4KCQkJCQkJc3VnZ2VzdE5vZGVzX2hlaWdodCAr
PSAobm9kZS5fX2NsaWVudEhlaWdodCB8fCAwKTsKCQkJCQl9CgkJCQl9CgoJCQkJ
aSA9IGwgPSBzdWdnZXN0R3JvdXBzS2V5cy5sZW5ndGg7CgkJCQlrID0gc3VnZ2Vz
dE5vZGVzLmxlbmd0aDsKCgkJCQl3aGlsZSggay0tID4gMCApIHsgLy8gY29tcHV0
ZSBub2RlcyB2aXNpYmlsaXR5LiBXZSBsZWF2ZSBsYXN0IG5vZGUgKGF0IGluZGV4
IDApIHZpc2libGUKCQkJCQlpZiggLS1pIDwgMCApIHsgLy8gaXRlcmF0ZSB0aHJv
dWdoIGVhY2ggZ3JvdXAgb25lIGJ5IG9uZQoJCQkJCQlpID0gbCAtIDE7CgkJCQkJ
fQoKCQkJCQlzdWdnZXN0R3JvdXAgPSBzdWdnZXN0R3JvdXBzWyBzdWdnZXN0R3Jv
dXBzS2V5c1tpXSBdOwoJCQkJCW5vZGUgPSBzdWdnZXN0R3JvdXAucG9wKCk7CgoJ
CQkJCWlmKCAhc3VnZ2VzdEdyb3VwLmxlbmd0aCAvLyBsZWF2ZSBhdCBsZWFzdCBv
bmUgbm9kZSBpbiBlYWNoIGdyb3VwIHZpc2libGUKCQkJCQkJKWNvbnRpbnVlOwoK
CQkJCQlub2RlX2hlaWdodCA9IG5vZGUuX19jbGllbnRIZWlnaHQ7CgkJCQkJaWYo
IG5vZGVfaGVpZ2h0ID09IHZvaWQgMCApIHsgLy8gRmlyc3QgdGltZS4gTm9kZSBt
dXN0IG5vdCBiZWVuIGhpZGRlbgoJCQkJCQlub2RlLl9fY2xpZW50SGVpZ2h0ID0g
bm9kZV9oZWlnaHQgPSBub2RlLmNsaWVudEhlaWdodDsKCQkJCQl9CgoJCQkJCW5v
ZGUuc3R5bGUuZGlzcGxheSA9IHN1Z2dlc3ROb2Rlc19oZWlnaHQgPiBoYWxmV2lu
ZG93SGVpZ2h0ID8gIm5vbmUiIDogIiI7CgoJCQkJCXN1Z2dlc3ROb2Rlc19oZWln
aHQgLT0gbm9kZV9oZWlnaHQ7CgkJCQl9CgkJCX0sCgoJCQlfZ2V0RGF0YTogZnVu
Y3Rpb24gKHJlcywgdmFsLCBfZXZlbnQpIHsKCQkJCWlmKHJlcyAmJiBBcnJheS5p
c0FycmF5KHJlcykgJiYgcmVzLmxlbmd0aCA9PSAzICYmICh0eXBlb2YgcmVzWzBd
ICsgdHlwZW9mIHJlc1sxXSArIHR5cGVvZiByZXNbMl0pID09ICJzdHJpbmdzdHJp
bmdvYmplY3QiKSB7CgkJCQkJaWYocmVzWzJdICYmIHJlc1syXS5yZXNwb25zZSAh
PT0gdm9pZCAwKSB7CgkJCQkJCXJlcyA9IHJlc1syXS5yZXNwb25zZTsKCQkJCQl9
CgkJCQkJZWxzZSBpZihyZXNbMF0gJiYgcmVzWzBdLnJlc3BvbnNlICE9PSB2b2lk
IDApIHsKCQkJCQkJcmVzID0gcmVzWzBdLnJlc3BvbnNlOwoJCQkJCX0KCQkJCQll
bHNlIHsKCQkJCQkJcmVzID0gbnVsbDsKCQkJCQl9CgkJCQl9CgoJCQkJcmVzID0g
cmVzIHx8IFtdOwoJCQkJdmFsID0gdmFsIHx8IHZhbC5zdWdnZXN0VmFsdWUgfHwg
dGhpcy5TZWFyY2guU3VnZ2VzdC52YWwoKTsKCgkJCQl2YXIgc3VnZ2VzdE9wdGlv
bnMgPSB0aGlzLlNlYXJjaC5vcHRzLnN1Z2dlc3QKCQkJCQksIHN1Z2dlc3RzTWF4
Q291bnQgPSA4CgkJCQkJLCBzdWdnZXN0c0NvdW50ID0gMAoJCQkJCSwgaGlkZUVt
YWlsTGlzdCA9IHRoaXMuU2VhcmNoLm9wdHMuaGlkZUVtYWlsTGlzdAoJCQkJCSwg
c2VhcmNoUmVnZXhwID0gJC5BdXRvY29tcGxldGVyLkNyZWF0ZUZpbmRSZWdFeHAo
dmFsKQoJCQkJCSwgZW1haWxzID0gIWhpZGVFbWFpbExpc3QgJiYgbWFpbHJ1LmFi
anNEYXRhIHx8IFtdCgkJCQkJLCBmaW5kVmFsX3JlcGxhY2VTdHJpbmdfc3RhcnQK
CQkJCQksIGZpbmRWYWxfcmVwbGFjZVN0cmluZ19lbmQKCQkJCQksIGNyZWF0ZVRp
Y2sKCQkJCQksIGdyb3Vwc1RpdGxlcyA9IHN1Z2dlc3RPcHRpb25zLmdyb3Vwc1Rp
dGxlcyB8fCB7fQoJCQkJCSwgc2VhcmNoVHlwZQoJCQkJCSwgbmVlZEdyb3VwSGVh
ZGVyCgkJCQk7CgoJCQkJaWYoIChzZWFyY2hUeXBlID0gX2V2ZW50ICYmIF9ldmVu
dC5jdXJyZW50VGFyZ2V0KSAmJiAoc2VhcmNoVHlwZSA9IHNlYXJjaFR5cGUuJElu
cHV0KSAmJiAoc2VhcmNoVHlwZSA9IHNlYXJjaFR5cGUuYXR0cigiZGF0YS1vcGVy
YW5kIikpICkgewoJCQkJCXNlYXJjaFR5cGUgPSBPUEVSQU5EU19TRUFSQ0hfVFlQ
RVNfTUFQW3NlYXJjaFR5cGVdIHx8IE9QRVJBTkRTX1NFQVJDSF9UWVBFU19NQVAu
QUxMOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJc2VhcmNoVHlwZSA9IE9QRVJBTkRT
X1NFQVJDSF9UWVBFU19NQVAuQUxMOwoJCQkJfQoKCQkJCWVtYWlscyA9IHNlYXJj
aFR5cGUgJiBPUEVSQU5EU19TRUFSQ0hfVFlQRVNfTUFQLlBFT1BMRSA/CgkJCQkJ
QXJyYXkuZmlsdGVyKGVtYWlscywgZnVuY3Rpb24gKGVtYWlsKSB7CgkJCQkJCXJl
dHVybiAoc3VnZ2VzdHNDb3VudCA8IHN1Z2dlc3RzTWF4Q291bnQpICYmICQuQXV0
b2NvbXBsZXRlci5NYXRjaFN1YnNldEJ5UmVnRXhwKGVtYWlsLCBzZWFyY2hSZWdl
eHApICYmICsrc3VnZ2VzdHNDb3VudCAmJiAhaGlkZUVtYWlsTGlzdDsKCQkJCQl9
KQoJCQkJCToKCQkJCQlbXQoJCQkJOwoKCQkJCWlmKCAhKHNlYXJjaFR5cGUgJiBP
UEVSQU5EU19TRUFSQ0hfVFlQRVNfTUFQLlRFWFQpICkgewoJCQkJCXJlcyA9IFtd
OwoJCQkJfQoKCQkJCXN1Z2dlc3RzQ291bnQgPSAwOwoKCQkJCWlmKCFzdWdnZXN0
T3B0aW9ucy5ncm91cGluZykgewoJCQkJCXJlcyA9IGVtYWlscy5jb25jYXQoCgkJ
CQkJCUFycmF5Lm1hcChyZXMsIGZ1bmN0aW9uIChpdGVtKSB7CgkJCQkJCQlyZXR1
cm4gX0hUTUxfZXNjYXBlXyhpdGVtLndvcmQgfHwgaXRlbS50ZXh0IHx8IGl0ZW0g
KyAiIik7CgkJCQkJCX0pCgkJCQkJKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCWZp
bmRWYWxfcmVwbGFjZVN0cmluZ19zdGFydCA9ICc8YiBjbGFzcz0iJyArIChzdWdn
ZXN0T3B0aW9ucy5jbkl0ZW1UaWNrIHx8ICIiKSArICciPic7CgkJCQkJZmluZFZh
bF9yZXBsYWNlU3RyaW5nX2VuZCA9ICI8L2I+IjsKCQkJCQljcmVhdGVUaWNrID0g
bWFpbHJ1LlV0aWxzLlNlYXJjaC5oaWdobGlnaHRSZXBsYWNlKF9IVE1MX2VzY2Fw
ZV8odmFsKSwgZmluZFZhbF9yZXBsYWNlU3RyaW5nX3N0YXJ0LCBmaW5kVmFsX3Jl
cGxhY2VTdHJpbmdfZW5kKTsKCQkJCQluZWVkR3JvdXBIZWFkZXIgPSBzZWFyY2hU
eXBlICYgKHNlYXJjaFR5cGUgLSAxKSB8fCAoc2VhcmNoVHlwZSA9PSBPUEVSQU5E
U19TRUFSQ0hfVFlQRVNfTUFQLlBFT1BMRSk7CgoJCQkJCXJlcyA9IEFycmF5Lm1h
cChyZXMsIGZ1bmN0aW9uKF9pdGVtLCBpKSB7CgkJCQkJCWlmKCsrc3VnZ2VzdHND
b3VudCA+IHN1Z2dlc3RzTWF4Q291bnQpcmV0dXJuOwoKCQkJCQkJdmFyIHN0ciA9
IF9pdGVtWyJ3b3JkIl0gfHwgX2l0ZW1bInRleHQiXQoJCQkJCQkJLCBpdGVtID0g
bmV3IEdyb3VwZWRTdWdnZXN0SXRlbSgKCQkJCQkJCQlzdWdnZXN0T3B0aW9ucwoJ
CQkJCQkJCSwgc3RyCgkJCQkJCQkJLCB2YWwKCQkJCQkJCQksIG51bGwKCQkJCQkJ
CQksIG5lZWRHcm91cEhlYWRlciAmJiBncm91cHNUaXRsZXNbImluTGV0dGVyIl0g
fHwgIiIKCQkJCQkJCQksIGkKCQkJCQkJCSkKCQkJCQkJOwoKCQkJCQkJaXRlbS5o
dG1sID0KCQkJCQkJCSc8ZGl2IGRhdGEtc2VhcmNoLW5hbWU9InFfcXVlcnkiIGRh
dGEtc3VnZ2VzdD0iJyArIHN0ciArICciIGNsYXNzPSInICsgc3VnZ2VzdE9wdGlv
bnMuY25JdGVtICsgJyI+JyArCgkJCQkJCQkJY3JlYXRlVGljayhzdHIpICsKCQkJ
CQkJCSc8L2Rpdj4nCgkJCQkJCTsKCgkJCQkJCXJldHVybiBpdGVtOwoJCQkJCX0s
IHRoaXMpOwoKCQkJCQlyZXMgPSBBcnJheS5maWx0ZXIocmVzLCBmdW5jdGlvbihh
KSB7CgkJCQkJCXJldHVybiAhIWE7CgkJCQkJfSk7CgoJCQkJCWVtYWlscyA9IEFy
cmF5Lm1hcChlbWFpbHMsIGZ1bmN0aW9uIChzdHIsIGkpIHsKCQkJCQkJdmFyIG5h
bWVBbmRFbWFpbF9wYXJ0cyA9IHN0ci5tYXRjaChSRV9OQU1FX0FORF9FTUFJTF9J
Tl9MVEdUKQoJCQkJCQkJLCBhdmF0YXIKCQkJCQkJCSwgaXRlbQoJCQkJCQkJLCBz
dWdnZXN0CgkJCQkJCQksIG5hbWUKCQkJCQkJCSwgZW1haWwKCQkJCQkJOwoKCQkJ
CQkJaWYoIG5hbWVBbmRFbWFpbF9wYXJ0cyApIHsKCQkJCQkJCW5hbWUgPSBuYW1l
QW5kRW1haWxfcGFydHNbMV07CgkJCQkJCQllbWFpbCA9IG5hbWVBbmRFbWFpbF9w
YXJ0c1syXTsKCQkJCQkJCWF2YXRhciA9IG1haWxydS5VdGlscy5nZXRBdmF0YXJT
cmMoZW1haWwsIG5hbWUsIDMyLCBudWxsKTsKCQkJCQkJfQoJCQkJCQllbHNlIHsK
CQkJCQkJCW5hbWUgPSBzdHI7CgkJCQkJCQllbWFpbCA9ICIiOwoJCQkJCQkJaWYo
IHN0ci5jb250YWlucygiQCIpICkgewoJCQkJCQkJCWF2YXRhciA9IG1haWxydS5V
dGlscy5nZXRBdmF0YXJTcmMoc3RyLCAiIiwgMzIsIG51bGwpOwoJCQkJCQkJfQoJ
CQkJCQl9CgoJCQkJCQlpdGVtID0gbmV3IEdyb3VwZWRTdWdnZXN0SXRlbSgKCQkJ
CQkJCXN1Z2dlc3RPcHRpb25zCgkJCQkJCQksIG5hbWUKCQkJCQkJCSwgdmFsCgkJ
CQkJCQksIGVtYWlsICYmIChzdWdnZXN0T3B0aW9ucy5zZWFyY2hQZW9wbGVPbmx5
Rm9yRW1haWwgPyBlbWFpbCA6IChuYW1lICsgIiA8IiArIGVtYWlsICsgIj4iKSkK
CQkJCQkJCSwgbmVlZEdyb3VwSGVhZGVyICYmIGdyb3Vwc1RpdGxlc1sicGVvcGxl
cyJdCgkJCQkJCQksIGkKCQkJCQkJKTsKCgkJCQkJCWlmKCBzdWdnZXN0T3B0aW9u
cy5zZWFyY2hQZW9wbGVPbmx5Rm9yRW1haWwgKSB7CgkJCQkJCQlzdWdnZXN0ID0g
X0hUTUxfZXNjYXBlXyhlbWFpbCA/IGVtYWlsIDogbmFtZSk7CgkJCQkJCX0KCQkJ
CQkJZWxzZSB7CgkJCQkJCQlzdWdnZXN0ID0gX0hUTUxfZXNjYXBlXyhuYW1lKTsK
CQkJCQkJfQoKCgkJCQkJCWl0ZW0uaHRtbCA9CgkJCQkJCQknPGRpdiBzdHlsZT0i
cG9zaXRpb246cmVsYXRpdmU7IiBkYXRhLXNlYXJjaC1uYW1lPSJxX2Zyb20iIGRh
dGEtc3VnZ2VzdD0iJyArIHN1Z2dlc3QgKyAnIiBjbGFzcz0iJyArIHN1Z2dlc3RP
cHRpb25zLmNuSXRlbSArICcgJyArIHN1Z2dlc3RPcHRpb25zLmNuSXRlbSArICdf
cGVvcGxlIj4nICsKCQkJCQkJCQkoCgkJCQkJCQkJCWNyZWF0ZVRpY2sobmFtZSkg
KyAiICIgKwoJCQkJCQkJCQkJIjxzcGFuIGNsYXNzPSciICsgc3VnZ2VzdE9wdGlv
bnMuY2RTdWdnZXN0SGludCArICInPiIgKwoJCQkJCQkJCQkJCSggZW1haWwgPyBj
cmVhdGVUaWNrKGVtYWlsKSA6ICImbmJzcDsiICkgKwoJCQkJCQkJCQkJIjwvc3Bh
bj4iCgkJCQkJCQkJKSArCgkJCQkJCQkJKGF2YXRhciA/CgkJCQkJCQkJCSI8aW1n
IGFsdD0nJyBjbGFzcz1cIiIgKyBzdWdnZXN0T3B0aW9ucy5jbkl0ZW0gKyAiX3Bl
b3BsZV9faW1hZ2VcIiB3aWR0aD0zMCBoZWlnaHQ9MzAgc3JjPSciICsgYXZhdGFy
ICsgIicgLz4iCgkJCQkJCQkJCToKCQkJCQkJCQkJIiIKCQkJCQkJCQkpICsKCQkJ
CQkJCSc8L2Rpdj4nCgkJCQkJCTsKCgkJCQkJCXJldHVybiBpdGVtOwoJCQkJCX0s
IHRoaXMpOwoKCQkJCQlpZihlbWFpbHMgJiYgZW1haWxzWzBdICYmIG5lZWRHcm91
cEhlYWRlcikgewoJCQkJCQllbWFpbHNbMF0uY2F0ZWdvcnkgPSBncm91cHNUaXRs
ZXNbInBlb3BsZXMiXSB8fCAiIjsKCQkJCQkJaWYocmVzLmxlbmd0aClyZXNbMF0u
Y2F0ZWdvcnkgPSBncm91cHNUaXRsZXNbImluTGV0dGVyIl0gfHwgIiI7CgkJCQkJ
fQoKCQkJCQlyZXMgPSBlbWFpbHMuY29uY2F0KHJlcyk7CgkJCQl9CgoJCQkJaWYo
IHJlcy5sZW5ndGggPT0gMSAmJiByZXNbMF0gKSB7CgkJCQkJaWYoICgJLy8gTUFJ
TC0xMzg5MToyKQoJCQkJCQkJdHlwZW9mIHJlc1swXSA9PSAib2JqZWN0IgoJCQkJ
CQkJJiYgcmVzWzBdLnNlYXJjaCA9PSB2YWwKCQkJCQkJKQoJCQkJCQl8fCByZXNb
MF0gPT0gdmFsLy8gTUFJTC0xMTY0OAoJCQkJCSkgewoJCQkJCQlyZXMgPSBbXTsK
CQkJCQl9CgkJCQl9CgoJCQkJdGhpcy5fc2VsVFMgPSBhanMubm93KCk7CgoJCQkJ
aWYoICFyZXMubGVuZ3RoICl7CgkJCQkJdGhpcy5fbG9nTWUoJycsIC0xKTsKCQkJ
CX0KCQkJCWVsc2UgewoJCQkJCWNsZWFyVGltZW91dCh0aGlzLl9hdXRvTG9nX3Bp
ZCk7CgkJCQkJdGhpcy5fYXV0b0xvZ19waWQgPSBzZXRUaW1lb3V0KHRoaXMuX2F1
dG9Mb2dNZS5iaW5kKHRoaXMpLCAxNTAwMCk7CgkJCQl9CgoJCQkJc2VhcmNoUmVn
ZXhwID0gc3VnZ2VzdE9wdGlvbnMgPSBlbWFpbHMgPSBmaW5kVmFsX3JlcGxhY2VT
dHJpbmdfc3RhcnQgPSBmaW5kVmFsX3JlcGxhY2VTdHJpbmdfZW5kID0gY3JlYXRl
VGljayA9IG51bGw7CgoJCQkJcmV0dXJuIHJlczsKCQkJfSwKCgkJCXZhbDogZnVu
Y3Rpb24gKHZhbCl7CgkJCQlyZXR1cm4JdGhpcy5TZWFyY2guZ2V0U3VnZ2VzdCgp
LnZhbCh2YWwpOwoJCQl9LAoKCQkJcmVzZXQ6IGZ1bmN0aW9uICgpewoJCQkJdGhp
cy5TZWFyY2guZ2V0U3VnZ2VzdCgpLnJlc2V0KCk7CgkJCX0sCgoJCQlkaXNhYmxl
OiBmdW5jdGlvbiAoKSB7Ly9NQUlMLTEyMjM1IDUpCgkJCQlpZiggdGhpcy5TZWFy
Y2ggKSB7CgkJCQkJdGhpcy5TZWFyY2guZGlzYWJsZSgpOwoJCQkJfQoJCQkJaWYo
IHRoaXMuJEFkdmFuc2VkU2VhcmNoTGluayApIHsKCQkJCQl0aGlzLiRBZHZhbnNl
ZFNlYXJjaExpbmsuaGlkZSgpOwoJCQkJfQoJCQl9LAoKCQkJZW5hYmxlOiBmdW5j
dGlvbiAoKSB7Ly9NQUlMLTEyMjM1IDUpCgkJCQlpZiggdGhpcy5TZWFyY2ggKSB7
CgkJCQkJdGhpcy5TZWFyY2guZW5hYmxlKCk7CgkJCQl9CgkJCQlpZiggdGhpcy4k
QWR2YW5zZWRTZWFyY2hMaW5rICkgewoJCQkJCXRoaXMuJEFkdmFuc2VkU2VhcmNo
TGluay5zaG93KCk7CgkJCQl9CgkJCX0KCQl9OwoKCX0pKGpRdWVyeSk7CgoKCWpz
TG9hZGVyLmxvYWRlZCgne21haWxydS51aX1tYWlscnUudWkuU2VhcmNoU3VnZ2Vz
dCcsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvdWkvbWFpbHJ1LnVpLlNl
YXJjaFN1Z2dlc3QuanMgZW5kCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS91aS9t
YWlscnUudWkuU3VnZ2VzdC5qcyBzdGFydAoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pz
L3J1L3V0aWxzL21haWxydS5VdGlscy5TZWFyY2hJbmRleC5qcyBzdGFydAoKCm1h
aWxydS5VdGlscy5TZWFyY2hJbmRleCA9IGZ1bmN0aW9uKHRva2VuaXplcikgewoJ
CXZhciBjYWNoZSA9IHt9OwoKCQlmdW5jdGlvbiBub3JtYWxpemUoc3RyKSB7CgkJ
CXJldHVybiAkLnRyaW0oc3RyKS50b0xvd2VyQ2FzZSgpOwoJCX0KCgkJcmV0dXJu
IHsKCQkJY3JlYXRlOiBmdW5jdGlvbihkYXRhKSB7CgkJCQljYWNoZSA9IHt9OwoK
CQkJCWZvcih2YXIgaT0wLCBsPWRhdGEubGVuZ3RoOyBpPGw7IGkrKykgewoJCQkJ
CXZhciBzdHIgPSBkYXRhW2ldOwoJCQkJCXRoaXMuc2V0KFtzdHJdLCBzdHIpOwoJ
CQkJfQoJCQl9LAoKCQkJc2V0OiBmdW5jdGlvbihwaHJhc2VzLCBvYmplY3QpIHsK
CQkJCXZhciB3b3JkcyA9IFtdOwoJCQkJdmFyIHBocmFzZSwgdG9rZW5zLCB0b2tl
bjsKCgkJCQlmb3IgKHZhciBpPTAsIGwgPSBwaHJhc2VzLmxlbmd0aDsgaTxsOyBp
KyspIHsKCQkJCQlwaHJhc2UgPSBub3JtYWxpemUocGhyYXNlc1tpXSk7CgoJCQkJ
CWlmKHBocmFzZSAmJiBwaHJhc2UubGVuZ3RoKSB7CgkJCQkJCXRva2VucyA9IHRv
a2VuaXplcihwaHJhc2UpOwoKCQkJCQkJZm9yKHZhciBqPTAsIGs9dG9rZW5zLmxl
bmd0aDsgajxrOyBqKyspIHsKCQkJCQkJCXRva2VuID0gdG9rZW5zW2pdOwoKCQkJ
CQkJCXdvcmRzLnB1c2goCgkJCQkJCQkJdG9rZW4sCgkJCQkJCQkJbWFpbHJ1LlV0
aWxzLnB1bnRvKHRva2VuKSwKCQkJCQkJCQltYWlscnUuVXRpbHMudHJhbnNsaXQo
dG9rZW4pCgkJCQkJCQkpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCXZhciB1
c2VkS2V5cyA9IHt9LCB3b3JkOwoKCQkJCWZvciAodmFyIGogPSAwLCBrID0gd29y
ZHMubGVuZ3RoOyBqIDwgazsgaisrKSB7CgkJCQkJd29yZCA9IHdvcmRzW2pdOwoK
CQkJCQlpZiAoIXdvcmQpIHsKCQkJCQkJY29udGludWU7CgkJCQkJfQoKCQkJCQlm
b3IgKHZhciBpID0gMCwgbCA9IHdvcmQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CgkJ
CQkJCXZhciBrZXkgPSB3b3JkLnN1YnN0cigwLCBpICsgMSk7CgoJCQkJCQlpZiAo
IXVzZWRLZXlzW2tleV0pIHsKCQkJCQkJCXVzZWRLZXlzW2tleV0gPSB0cnVlOwoK
CQkJCQkJCWlmIChjYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHsKCQkJCQkJCQlj
YWNoZVtrZXldID0gW107CgkJCQkJCQl9CgoJCQkJCQkJY2FjaGVba2V5XS5wdXNo
KG9iamVjdCk7CgkJCQkJCX0KCQkJCQl9OwoJCQkJfQoJCQl9LAoKCQkJZmluZDog
ZnVuY3Rpb24ocXVlcnkpIHsKCQkJCXZhciByZXN1bHRzID0gW107CgoJCQkJQXJy
YXkuZm9yRWFjaCh0b2tlbml6ZXIobm9ybWFsaXplKHF1ZXJ5KSksIGZ1bmN0aW9u
KHRva2VuKSB7CgkJCQkJcmVzdWx0cy5wdXNoKGNhY2hlW3Rva2VuXSB8fCBbXSk7
CgkJCQl9KTsKCgkJCQkvLyDRgNC10LfRg9C70YzRgtCw0YLQvtC8INC/0L7QuNGB
0LrQsCDQv9C+INC90LXRgdC60L7Qu9GM0LrQuNC8INGB0LvQvtCy0LDQvCDRj9Cy
0LvRj9C10YLRgdGPINC/0LXRgNC10YHQtdGH0LXQvdC40LUg0YDQtdC30YPQu9GM
0YLQsNGC0L7QsiDQv9C+0LjRgdC60LAg0L/QviDQvtGC0LTQtdC70YzQvdGL0Lwg
0YHQu9C+0LLQsNC8CgkJCQlyZXR1cm4gQXJyYXkuaW50ZXJzZWN0LmFwcGx5KG51
bGwsIHJlc3VsdHMpOwoJCQl9CgkJfQoJfTsKCglqc0xvYWRlci5sb2FkZWQoJ3tt
YWlscnUudXRpbHN9bWFpbHJ1LlV0aWxzLlNlYXJjaEluZGV4JywgMSk7CgovLyBk
YXRhL3J1L2ltYWdlcy9qcy9ydS91dGlscy9tYWlscnUuVXRpbHMuU2VhcmNoSW5k
ZXguanMgZW5kCgovLyAuL2RhdGEvY29tbW9uL2pzL2Fqcy9hanMuUGFnZXIuanMg
c3RhcnQKCjtkZWZpbmUoJ2Fqcy9hanMuUGFnZXInLCBmdW5jdGlvbigpIHsKCS8q
KgoJICog4oCUIGxpc3QgKGFycmF5KSDRgdC/0LjRgdC+0Log0YEg0LTQsNC90L3R
i9C80LgsINC60L7RgtC+0YDRi9C1INC90YPQttC90L4g0YDQsNC30LHQuNGC0Ywg
0L/QvtGB0YLRgNCw0L3QuNGH0L3QvgoJICog4oCUIHBlclBhZ2UgKGludCkg0LrQ
vtC70LjRh9C10YHRgtCy0L4g0Y3Qu9C10LzQtdC90YLQvtCyINC90LAg0YHRgtGA
0LDQvdC40YbQtQoJICog4oCUIHBhZ2UgKGludCkg0YLQtdC60YPRidCw0Y8g0YHR
gtGA0LDQvdC40YbQsAoJICog4oCUIHNpbmdsZVBhZ2UgKGJvb2xlYW4pINGE0LvQ
sNCzLCDRg9C60LDQt9GL0LLQsNGO0YnQuNC5INC90LAg0YLQviwg0YfRgtC+INC0
0LDQvdC90YvQtSDRgtC+0LvRjNC60L4g0LfQsNCz0YDRg9C20LDRjtGC0YHRjyAi
0L/QvtGB0YLRgNCw0L3QuNGH0L3QviIsINCwINC+0YLQvtCx0YDQsNC20LDRjtGC
0YHRjyDQvdCwINC+0LTQvdC+0Lkg0YHRgtGA0LDQvdC40YbQtQoJICogICAgICAg
ICAgICAgICAgICAgICAgICDRh9GC0L4g0LLQu9C40Y/QtdGCINC90LAg0L/QvtCy
0LXQtNC10L3QuNC1IHZpc2libGUoKQoJICovCgoJdmFyIFBhZ2VyID0gZnVuY3Rp
b24obGlzdCwgcGVyUGFnZSwgcGFnZSwgc2luZ2xlUGFnZSkgewoJCXBhZ2UgPSBw
YXJzZUludChwYWdlKSB8fCAxOwoJCXZhciB1cmxDcmVhdG9yID0gJC5ub29wOwoK
CQlmdW5jdGlvbiBwYWdlQm9yZGVycygpIHsKCQkJcmV0dXJuIHsKCQkJCWZyb206
IChwYWdlIC0gMSkgKiBwZXJQYWdlLAoJCQkJdG86IE1hdGgubWluKHBhZ2UgKiBw
ZXJQYWdlLCBsaXN0Lmxlbmd0aCkKCQkJfTsKCQl9CgoJCWZ1bmN0aW9uIHBhZ2Vz
Q291bnQoKSB7CgkJCXJldHVybiBNYXRoLmNlaWwobGlzdC5sZW5ndGggLyBwZXJQ
YWdlKTsKCQl9CgoJCXJldHVybiB7CgkJCXNldFVybENyZWF0b3I6IGZ1bmN0aW9u
KGNhbGxiYWNrKSB7CgkJCQl1cmxDcmVhdG9yID0gY2FsbGJhY2s7CgkJCX0sCgoJ
CQlkb2VzTmVlZFdpZGdldDogZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gIXNpbmds
ZVBhZ2UgJiYgcGFnZXNDb3VudCgpID4gMTsKCQkJfSwKCgkJCXdpZGdldFBhcmFt
czogZnVuY3Rpb24oKSB7CgkJCQl2YXIgcGFnZXMgPSBwYWdlc0NvdW50KCk7CgkJ
CQl2YXIgcExpc3QgPSBbXTsKCgkJCQl2YXIgZnJvbSA9IE1hdGgubWF4KHBhZ2Ug
LSAocGFnZXMgLSBwYWdlIDwgMyA/IDUgLSAocGFnZXMgLSBwYWdlKSA6IDMpLCAw
KTsKCQkJCXZhciB0byA9IE1hdGgubWluKGZyb20gKyA1LCBwYWdlcyk7CgoJCQkJ
Zm9yICh2YXIgcCA9IGZyb20gKyAxOyBwIDw9IHRvOyBwKysgKSB7CgkJCQkJcExp
c3QucHVzaChwKTsKCQkJCX0KCgkJCQlyZXR1cm4gewoJCQkJCXByZXZQYWdlOiAo
cGFnZSA+IDEgICAgKSA/IHBhZ2UgLSAxIDogbnVsbCwKCQkJCQluZXh0UGFnZTog
KHBhZ2UgPCBwYWdlcykgPyBwYWdlICsgMSA6IG51bGwsCgoJCQkJCWxhc3RQYWdl
OiBwYWdlcywKCgkJCQkJY3VycmVudFBhZ2U6IHBhZ2UsCgoJCQkJCWRvZXNOZWVk
OiB7CgkJCQkJCXByZXZIZWxsaXA6IChwYWdlICA+IDQgJiYgcGFnZXMgPiA2KSwK
CQkJCQkJbmV4dEhlbGxpcDogKHBhZ2VzID4gNiAmJiBwYWdlcyAtIHBhZ2UgPiAz
KSwKCgkJCQkJCXByZXZQYWdlOiAocGFnZSA+IDEpLAoJCQkJCQluZXh0UGFnZTog
KHBhZ2UgPCBwYWdlcyksCgoJCQkJCQlmaXJzdFBhZ2U6IChwYWdlcyA+IDUgJiYg
cGFnZSA+IDMpLAoJCQkJCQlsYXN0UGFnZTogIChwYWdlcyA+IDUgJiYgcGFnZXMg
LSBwYWdlID4gMikKCQkJCQl9LAoKCQkJCQlnZXRVcmw6IGZ1bmN0aW9uKHBhZ2Up
IHsKCQkJCQkJcmV0dXJuIHVybENyZWF0b3IocGFnZSk7CgkJCQkJfSwKCgkJCQkJ
cGFnZXM6IHBMaXN0CgkJCQl9OwoJCQl9LAoKCQkJYWxsOiBmdW5jdGlvbigpIHsK
CQkJCXJldHVybiBsaXN0OwoJCQl9LAoKCQkJdG90YWw6IGZ1bmN0aW9uKCkgewoJ
CQkJcmV0dXJuIGxpc3QubGVuZ3RoOwoJCQl9LAoKCQkJcGFnZUJvcmRlcnM6IHBh
Z2VCb3JkZXJzLAoJCQlwYWdlc0NvdW50OiBwYWdlc0NvdW50LAoKCQkJdmlzaWJs
ZTogZnVuY3Rpb24oKSB7CgkJCQl2YXIgYm9yZGVycyA9IHBhZ2VCb3JkZXJzKCk7
CgkJCQlyZXR1cm4gbGlzdC5zbGljZShzaW5nbGVQYWdlID8gMCA6IGJvcmRlcnMu
ZnJvbSwgYm9yZGVycy50byk7CgkJCX0sCgoJCQlzbGljZTogZnVuY3Rpb24oKSB7
CgkJCQl2YXIgYm9yZGVycyA9IHBhZ2VCb3JkZXJzKCk7CgkJCQlyZXR1cm4gbGlz
dC5zbGljZShib3JkZXJzLmZyb20sIGJvcmRlcnMudG8pOwoJCQl9LAoKCQkJaGFz
TmV4dDogZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gcGFnZSAqIHBlclBhZ2UgPCBs
aXN0Lmxlbmd0aDsKCQkJfSwKCgkJCWhhc1ByZXY6IGZ1bmN0aW9uKCkgewoJCQkJ
cmV0dXJuIHBhZ2UgPiAxOwoJCQl9LAoKCQkJbmV4dDogZnVuY3Rpb24oKSB7CgkJ
CQlwYWdlKys7CgkJCX0sCgoJCQlwcmV2OiBmdW5jdGlvbigpIHsKCQkJCXBhZ2Ut
LTsKCQkJfQoJCX07Cgl9OwoKCS8vIEBleHBvcnQKCWlmICh0eXBlb2YgbW9kdWxl
ICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT0gJ2Z1bmN0aW9uJykg
eyBtb2R1bGUuZXhwb3J0cyA9IFBhZ2VyIH0KCWVsc2UgaWYgKHR5cGVvZiBkZWZp
bmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeyBkZWZpbmUoUGFnZXIp
IH0KCglpZiggIXdpbmRvdy5hanMgKSB3aW5kb3cuYWpzID0ge307Cgl3aW5kb3cu
YWpzLlBhZ2VyID0gUGFnZXI7Cn0pOwoKCi8vIC4vZGF0YS9jb21tb24vanMvYWpz
L2Fqcy5QYWdlci5qcyBlbmQKCnZhciBkZWZhdWx0T3B0cyA9IHsKCQljblN1Z2dl
c3Q6ICAnc3VnZ2VzdHNfX2Jsb2NrJywKCQljbkxpc3Q6ICAgICAnc3VnZ2VzdHNf
X2Jsb2NrX19saXN0JywKCQljbkl0ZW06ICAgICAnc3VnZ2VzdHNfX2Jsb2NrX19p
dGVtJywKCQljblNlbGVjdGVkOiAnc3VnZ2VzdHNfX2Jsb2NrX19pdGVtX2hvdmVy
JywKCQljbklucHV0OiAgICAnc3VnZ2VzdHNfX2lucHV0JywKCgkJaW50ZXJuYWxT
b3VyY2U6IGZhbHNlLAoJCWlnbm9yZVVzZWREYXRhOiBmYWxzZSwKCgkJdGVtcGxh
dGVJbnRlcm5ldFZhbDogZnVuY3Rpb24oKSB7CgkJCXJldHVybiBmYWxzZQoJCX0s
CgoJCXNlYXJjaEluZGV4VG9rZW5pemVyOiBmdW5jdGlvbihzdHIpIHsKCQkJcmV0
dXJuIHN0ci5zcGxpdCgvXHMrLyk7CgkJfSwKCgoJCWFmdGVyU2VsZWN0OiBmdW5j
dGlvbih2YWwpIHsKCQkJcmV0dXJuIHZhbDsKCQl9LAoJCWFmdGVyR2V0RGF0YTog
JC5ub29wLAoJCWZpbHRlclVzZWQ6IGZ1bmN0aW9uKGRhdGEsIHVzZWRNYXApIHsK
CQkJdmFyIGZpbHRlcmVkRGF0YSA9IFtdOwoKCQkJZm9yKHZhciBpPTAsIGw9ZGF0
YS5sZW5ndGg7IGk8bDsgaSsrKSB7CgkJCQl2YXIgcm93ID0gZGF0YVtpXTsKCgkJ
CQlpZih1c2VkTWFwW3Jvd10gPT09IHVuZGVmaW5lZCkgewoJCQkJCWZpbHRlcmVk
RGF0YS5wdXNoKHJvdyk7CgkJCQl9CgkJCX0KCgkJCXJldHVybiBmaWx0ZXJlZERh
dGE7CgkJfSwKCgkJc3RhcnRGaW5kU3VnZ2VzdDogbnVsbCwKCgkJc3RhcnRGaW5k
U3VnZ2VzdDogbnVsbCwKCgkJbGltaXQ6IDEwLAoKCQlhdXRvTWFya2VkOiAwLAoK
CQl1cGRhdGVPbk1hcms6IGZhbHNlCgl9OwoKCWpzQ2xhc3MKCQkuY3JlYXRlKCAn
bWFpbHJ1LnVpLlN1Z2dlc3QnICkKCQkubWV0aG9kcyh7CgkJCV9fY29uc3RydWN0
OiBmdW5jdGlvbihpbnB1dCwgZGF0YSwgb3B0cykgewoJCQkJdGhpcy5pbnB1dCA9
IGlucHV0OwoJCQkJdGhpcy5vcHRzICA9IE9iamVjdC5leHRlbmQoe30sIGRlZmF1
bHRPcHRzLCBvcHRzKTsKCgkJCQl0aGlzLnNldERhdGEoZGF0YSk7CgkJCQl0aGlz
Lmlnbm9yZVVzZWQoW10pOwoKCQkJCXRoaXMuX2luaXRSZXN1bHRzTGlzdCgpOwoJ
CQkJdGhpcy5faW5pdEFqc1N1Z2dlc3QoKTsKCQkJfSwKCgkJCV9pbml0UmVzdWx0
c0xpc3Q6IGZ1bmN0aW9uKCkgewoJCQkJdmFyIG9wdHMgPSB0aGlzLm9wdHM7CgkJ
CQl2YXIgaW5wdXROYW1lID0gdGhpcy5pbnB1dC5hdHRyKCduYW1lJykgfHwgdGhp
cy5pbnB1dC5hdHRyKCdkYXRhLW9yaWdpbmFsLW5hbWUnKSB8fCAiIjsKCQkJCXRo
aXMuYmxvY2sgPSAkKCc8ZGl2IHN0eWxlPSJkaXNwbGF5OiBub25lOyBwb3NpdGlv
bjogYWJzb2x1dGU7IiBkYXRhLW9yaWdpbmFsLW5hbWU9IicgKyBpbnB1dE5hbWUg
ICsgJyIgY2xhc3M9IicgKyBvcHRzLmNuU3VnZ2VzdCArICciPjwvZGl2PicgKTsK
CQkJCXRoaXMubGlzdCA9ICQoJzxkaXYgY2xhc3M9IicgKyBvcHRzLmNuTGlzdCAr
ICciPjwvZGl2PicpOwoJCQkJdGhpcy5ibG9jay5hcHBlbmQodGhpcy5saXN0KTsK
CgkJCQkvLyDQuNGB0L/RgNCw0LLQu9C10L3QuNC1INC/0YDQvtCx0LvQtdC80Ysg
0YEg0L/QvtC30LjRhtC40L7QvdC40YDQvtCy0LDQvdC40LXQvAoJCQkJdGhpcy5i
bG9jay5hcHBlbmRUbygkKCcjU2Nyb2xsQm9keUlubmVyJylbMF0gfHwgZG9jdW1l
bnQuYm9keSk7CgoJCQkJaWYoIHR5cGVvZiBvcHRzLmNuSW5wdXQgPT09ICdzdHJp
bmcnICkgewoJCQkJCXRoaXMuaW5wdXQuYWRkQ2xhc3MoIG9wdHMuY25JbnB1dCAp
OwoJCQkJfQoJCQl9LAoKCQkJX2luaXRBanNTdWdnZXN0OiBmdW5jdGlvbigpIHsK
CQkJCXZhciBzdWdnZXN0ID0gdGhpcwoJCQkJCSwgc3VnZ2VzdE9wdHMgPSB0aGlz
Lm9wdHMKCQkJCQksIGlucHV0ICAgPSB0aGlzLmlucHV0CgkJCQkJLCBibG9jayAg
ID0gdGhpcy5ibG9jawoJCQkJCSwgX2ZldGNoID0gc3VnZ2VzdE9wdHMuZmV0Y2hp
bmcKCQkJCQksIF9ldmVudHMKCQkJCTsKCgkJCQlpZihzdWdnZXN0T3B0cy5pbnRl
cm5hbFNvdXJjZSAmJiAhc3VnZ2VzdE9wdHMucmVxdWVzdCkgewoJCQkJCXN1Z2dl
c3RPcHRzLnJlcXVlc3QgPSBmdW5jdGlvbih1cmwsIGZuLCB2YWwpIHsKCQkJCQkJ
Zm4oKTsKCQkJCQl9OwoJCQkJCXN1Z2dlc3RPcHRzLmFqYXhVcmwgPSAnIyc7CgkJ
CQl9CgoJCQkJc3VnZ2VzdE9wdHMgPSBPYmplY3QuZXh0ZW5kKHN1Z2dlc3RPcHRz
LCB7CgkJCQkJICBmZXRjaGluZzogX2ZldGNoCgkJCQkJLCBleHBpcmU6IF9mZXRj
aAoKCQkJCQksIGNuU3VnZ2VzdDogYmxvY2tbMF0gIC8vINCy0LzQtdGB0YLQviDQ
uNC80LXQvdC4INC60LvQsNGB0YHQsCDQv9C10YDQtdC00LDQtdC8INGB0YHRi9C7
0LrRgyDQvdCwINCx0LvQvtC6CgkJCQkJLCBjbkxpc3Q6IHRoaXMubGlzdFswXSAv
LyDQstC80LXRgdGC0L4g0LjQvNC10L3QuCDQutC70LDRgdGB0LAg0L/QtdGA0LXQ
tNCw0LXQvCDRgdGB0YvQu9C60YMg0L3QsCDQsdC70L7QugoJCQkJfSk7CgoKCQkJ
CXRoaXMuYWpzU3VnZ2VzdCA9IGFqcy51aS5zdWdnZXN0KGlucHV0LnBhcmVudCgp
WzBdLCBzdWdnZXN0T3B0cyk7CgoJCQkJaWYoIE9iamVjdC5pc09iamVjdChfZXZl
bnRzID0gc3VnZ2VzdE9wdHNbImV2ZW50cyJdKSApIHsKCQkJCQlPYmplY3QuZm9y
RWFjaChfZXZlbnRzLCBmdW5jdGlvbihldmVudEhhbmRsZXIsIGV2ZW50TmFtZSkg
ewoJCQkJCQlpZiggZXZlbnROYW1lLmNvbnRhaW5zKCJzdWdnZXN0czoiKSApIHsv
LyDQlNGA0YPQs9C40LUg0LrQvtC80L/QvtC90LXQvdGC0Ysg0L/QvtC60LAg0L3Q
tSDQv9C+0LTQtNC10YDQttC40LLQsNGO0YLRgdGPCgkJCQkJCQl0aGlzLmFkZFRy
aWdnZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXIpOwoJCQkJCQl9CgkJCQkJfSwg
dGhpcy5hanNTdWdnZXN0KTsKCgkJCQkJZGVsZXRlIHN1Z2dlc3RPcHRzWyJldmVu
dHMiXTsKCQkJCQlfZXZlbnRzID0gbnVsbDsKCQkJCX0KCgkJCQl0aGlzLmFqc1N1
Z2dlc3QKCQkJCQkvLyDQtdGB0LvQuCDRgdCw0LTQttC10YLRgdGDINC90YPQttC1
0L0g0LjRgdGC0L7Rh9C90LjQuiDQsiDRgdC10YLQuC4g0YLQviDQsiDRjdGC0L7Q
vCDQvNC10YLQvtC00LUg0LzQvtC20L3QviDRgdC00LXQu9Cw0YLRjCDQvtCx0YDQ
sNCx0L7RgtC60YMg0YDQtdC30YPQu9GM0YLQsNGC0L7QsiDQt9Cw0L/RgNC+0YHQ
sCwKCQkJCQkvLyDQsCDQtdGB0LvQuCDQvdC1INC90YPQttC10L0g4oCUINGC0L4g
0YHQvtCx0YHRgtCy0LXQvdC90L4g0Lgg0LLRi9C/0L7Qu9C90LjRgtGMINC/0L7Q
uNGB0LoKCQkJCQkuYWRkVHJpZ2dlcigic3VnZ2VzdHM6Z2V0RGF0YSIsIGZ1bmN0
aW9uKGUpIHsKCQkJCQkJdmFyIGRhdGEgPSBlWyJkYXRhIl0KCQkJCQkJCSwgc3Vn
Z2VzdFZhbHVlID0gZVsic3VnZ2VzdFZhbHVlIl0KCQkJCQkJOwoKCQkJCQkJLy8g
0LjRidC10Lwg0LvQvtC60LDQu9GM0L3Qviwg0LIg0YHQu9GD0YfQsNC1INGB0L7Q
vtGC0LLQtdGB0YLQstGD0Y7RidC10LPQviDRhNC70LDQs9CwCgkJCQkJCWlmKHN1
Z2dlc3RPcHRzLmludGVybmFsU291cmNlICYmIHN1Z2dlc3QubG9jYWxEYXRhKSB7
CgkJCQkJCQlkYXRhID0gc3VnZ2VzdC5fZ2V0RGF0YShzdWdnZXN0VmFsdWUpOwoJ
CQkJCQl9CgoJCQkJCQlpZiggZGF0YS5sZW5ndGggKSB7CgkJCQkJCQkvLyDQuNCz
0L3QvtGA0LjRgNGD0LXQvCDRg9C20LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC9
0YvQtSDQt9C90LDRh9C10L3QuNGPCgkJCQkJCQlpZihPYmplY3Qua2V5cyhzdWdn
ZXN0LnVzZWRNYXApLmxlbmd0aCkgewoJCQkJCQkJCWRhdGEgPSBzdWdnZXN0T3B0
cy5maWx0ZXJVc2VkKGRhdGEsIHN1Z2dlc3QudXNlZE1hcCk7CgkJCQkJCQl9CgoJ
CQkJCQkJaWYodGhpcy5vcHRzLmZldGNoaW5nKSB7CgkJCQkJCQkJc3VnZ2VzdC5w
YWdlciA9IGFqcy5QYWdlcihkYXRhLCB0aGlzLm9wdHMuZmV0Y2hDb3VudCk7CgkJ
CQkJCQkJZGF0YSA9IHN1Z2dlc3QucGFnZXIuc2xpY2UoKTsKCQkJCQkJCX0KCQkJ
CQkJCWVsc2UgewoJCQkJCQkJCWRlbGV0ZSBzdWdnZXN0LnBhZ2VyOwoKCQkJCQkJ
CQlpZihzdWdnZXN0T3B0cy5saW1pdCkgewoJCQkJCQkJCQlkYXRhID0gZGF0YS5z
bGljZSgwLCBzdWdnZXN0T3B0cy5saW1pdCk7CgkJCQkJCQkJfQoJCQkJCQkJfQoK
CQkJCQkJCS8vc3VnZ2VzdE9wdHMuYWZ0ZXJHZXREYXRhKGUpOwoJCQkJCQl9CgoJ
CQkJCQllWyJkYXRhIl0gPSBkYXRhOwoJCQkJCX0pCgoJCQkJCS8vIE1BSUwtMTEz
OTcg0L/Rg9C90LrRgiAyKQoJCQkJCS5hZGRUcmlnZ2VyKCJzdWdnZXN0czptYXJr
IiwgZnVuY3Rpb24oZSkgewoJCQkJCQl2YXIgb3B0cyA9IHRoaXMub3B0czsKCQkJ
CQkJZVsndXBkYXRlSW5wdXRWYWx1ZSddID0gZVsndXBkYXRlSW5wdXRWYWx1ZSdd
ICYmIG9wdHMudXBkYXRlT25NYXJrOy8vaHR0cHM6Ly9qaXJhLm1haWwucnUvYnJv
d3NlL01BSUwtMTQ3OTg/Zm9jdXNlZENvbW1lbnRJZD02NjE5ODcmcGFnZT1jb20u
YXRsYXNzaWFuLmppcmEucGx1Z2luLnN5c3RlbS5pc3N1ZXRhYnBhbmVsczpjb21t
ZW50LXRhYnBhbmVsI2NvbW1lbnQtNjYxOTg3CgkJCQkJfSkKCgkJCQkJLy8g0L/Q
vtGB0LvQtSDQstGL0LHQvtGA0LAg0Y3Qu9C10LzQtdC90YLQsCDQvNC+0LbQvdC+
INC40LfQvNC10L3QuNGC0Ywg0LXQs9C+INC30L3QsNGH0LXQvdC40LUKCQkJCQku
YWRkVHJpZ2dlcigic3VnZ2VzdHM6c2VsZWN0IiwgZnVuY3Rpb24oZSkgewoJCQkJ
CQl2YXIgb3JpZ2luYWxFdmVudCA9IGVbIm9yaWdpbmFsRXZlbnQiXTsKCQkJCQkJ
aWYob3JpZ2luYWxFdmVudCAmJiBvcmlnaW5hbEV2ZW50LnR5cGUgPT0gImJsdXIi
KSB7CgkJCQkJCQllWyd1cGRhdGVJbnB1dFZhbHVlJ10gPSBmYWxzZTsKCQkJCQkJ
CXJldHVybjsKCQkJCQkJfQoKCQkJCQkJdmFyIHN1ZyA9IGVbIm5ld1N1Z2dlc3Qi
XTsKCgkJCQkJCWlmKHN1ZykgewoJCQkJCQkJZVsibmV3U3VnZ2VzdCJdID0gc3Vn
Z2VzdE9wdHMuYWZ0ZXJTZWxlY3Qoc3VnLCBlWyJuZXdTdWdnZXN0SW5kZXgiXSwg
ZS5pbnB1dFZhbHVlTGVmdFBhcnQsIGUuaW5wdXRWYWx1ZVJpZ2h0UGFydCkKCQkJ
CQkJfQoKCQkJCQkJZVsiaW5wdXRTZWxlY3Rpb25TdGFydCJdID0gSW5maW5pdHk7
CgkJCQkJCWVbImlucHV0U2VsZWN0aW9uRW5kIl0gPSBJbmZpbml0eTsKCgkJCQkJ
CS8vINCX0L3QsNGH0LXQvdC40LUg0LjQvdC/0YPRgtCwINC40LfQvNC10L3QtdC9
0L4gLSDQstGL0LfQvtCy0LXQvCDRgtGA0LjQs9C10YAgY2hhbmdlINC00LvRjyDQ
vtGC0LvQvtCy0LAg0Y3RgtC40YUg0LjQt9C80LXQvdC10L3QuNC5INC40LfQstC9
0LUKCQkJCQkJLy8gINCS0YvQt9GL0LLQsNC10Lwg0YEg0LfQsNC00LXRgNC20LrQ
vtC5LCDRh9GC0L7QsdGLINC00YDRg9Cz0LjQtSDQvtCx0YDQsNCx0L7RgtGH0LjQ
utC4ICJzdWdnZXN0czpzZWxlY3QiINGD0LbQtSDQvtGC0YDQsNCx0L7RgtCw0LvQ
uNGB0Ywg0L/RgNC4INCy0YvQt9C+0LLQtSBjaGFuZ2UKCQkJCQkJc2V0VGltZW91
dChmdW5jdGlvbigpeyB0aGlzLmNoYW5nZSgpIH0uYmluZChqUXVlcnkodGhpc1si
JElucHV0Il0pKSk7CgkJCQkJfSkKCgkJCQkJLy8g0L/QvtGB0LvQtSDRgdC+0LfQ
tNCw0L3QuNGPINGB0L/QuNGB0LrQsCDRgdCw0LTQttC10YHRgtC+0LIsINGB0L/Q
vtC30LjRhtC40L7QvdC40YDRg9C10Lwg0LHQu9C+0Log0YEg0YHQsNC00LbQtdGB
0YLQsNC80LgKCQkJCQkuYWRkVHJpZ2dlcigic3VnZ2VzdHM6YWZ0ZXJSZWJ1aWxk
IiwgZnVuY3Rpb24oZSkgewoJCQkJCQl2YXIgb2Zmc2V0ID0gaW5wdXQub2Zmc2V0
KCkKCQkJCQkJCSwgbWFyZ2luID0gc3VnZ2VzdE9wdHMubWFyZ2luID8gc3VnZ2Vz
dE9wdHMubWFyZ2luIDogNwoJCQkJCQkJLCB0bXAKCQkJCQkJOwoKCQkJCQkJdG1w
ID0gdHlwZW9mIHN1Z2dlc3RPcHRzLndpZHRoOwoKCQkJCQkJaWYoIHRtcCA9PT0g
InN0cmluZyIgKSB7CgkJCQkJCQlpZiggc3VnZ2VzdE9wdHMud2lkdGggPT09ICJh
dXRvIiApIHsKCQkJCQkJCQlpZiggdG1wID0gaW5wdXRbMF0gKSB7CgkJCQkJCQkJ
CXN1Z2dlc3RPcHRzLndpZHRoID0gTWF0aC5tYXgodG1wLmNsaWVudFdpZHRoLCAx
MDApICsgInB4IjsKCQkJCQkJCQl9CgkJCQkJCQl9CgoJCQkJCQkJdG1wID0gc3Vn
Z2VzdE9wdHMud2lkdGg7CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiggdG1wID09PSAi
bnVtYmVyIiAmJiBzdWdnZXN0T3B0cy53aWR0aCA+IDAgKSB7CgkJCQkJCQl0bXAg
PSBzdWdnZXN0T3B0cy53aWR0aDsKCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJ
CXRtcCA9IE1hdGgubWF4KGlucHV0LndpZHRoKCksIDEwMCk7CgkJCQkJCX0KCgkJ
CQkJCWJsb2NrLmNzcyh7CgkJCQkJCQl3aWR0aDogdG1wLAoJCQkJCQkJdG9wOiBv
ZmZzZXQudG9wICsgaW5wdXQuaGVpZ2h0KCkgKyBtYXJnaW4sCgkJCQkJCQlsZWZ0
OiBvZmZzZXQubGVmdCwKCQkJCQkJCXpJbmRleDogNDAwMDAKCQkJCQkJfSk7CgoJ
CQkJCQlpZiggc3VnZ2VzdE9wdHMuYWZ0ZXJSZWJ1aWxkICkgewoJCQkJCQkJc3Vn
Z2VzdE9wdHMuYWZ0ZXJSZWJ1aWxkKGUsIGJsb2NrKTsKCQkJCQkJfQoJCQkJCX0p
CgkJCQk7CgoJCQkJaWYoX2ZldGNoKSB7CgkJCQkJdGhpcy5hanNTdWdnZXN0CgkJ
CQkJCS8vICLQv9C+0LTRgdCw0YHRi9Cy0LDQvdC40LUiINC90L7QstGL0YUg0YHR
gtGA0LDQvdC40YYg0LIg0YHQv9C40YHQvtC6CgkJCQkJCS5hZGRUcmlnZ2VyKCdz
dWdnZXN0czpmZXRjaCcsIGZ1bmN0aW9uKGUpIHsKCQkJCQkJCXZhciBkYXRhID0g
ZVsiZGF0YSJdOwoKCQkJCQkJCWlmKGRhdGEgJiYgc3VnZ2VzdC5wYWdlciAmJiBz
dWdnZXN0LnBhZ2VyLmhhc05leHQoKSkgewoJCQkJCQkJCXN1Z2dlc3QucGFnZXIu
bmV4dCgpOwoJCQkJCQkJCWRhdGEuc3BsaWNlLmJpbmQoZGF0YSwgZVsiZmV0Y2hG
cm9tIl0gKyAxLCAwKS5hcHBseShudWxsLCBzdWdnZXN0LnBhZ2VyLnNsaWNlKCkp
OwoJCQkJCQkJfQoJCQkJCQl9KQoJCQkJCTsKCgkJCQkJaWYoIHN1Z2dlc3RPcHRz
Lmlnbm9yZVVzZWREYXRhICkgewoJCQkJCQl0aGlzLmFqc1N1Z2dlc3QKCQkJCQkJ
CS8vINC/0L7RgdC70LUg0YHQutGA0YvRgtC40Y8g0YHQv9C40YHQutCwCgkJCQkJ
CQkuYWRkVHJpZ2dlcigic3VnZ2VzdHM6aGlkZSIsIGZ1bmN0aW9uKCkgewoJCQkJ
CQkJCXN1Z2dlc3QuaWdub3JlVXNlZChzdWdnZXN0LmdldFN1Z2dlc3RXb3Jkcygp
KTsKCQkJCQkJCX0pCgkJCQkJfQoJCQkJfQoKCQkJCWlmKHN1Z2dlc3RPcHRzLmlu
dGVybmFsU291cmNlKSB7Ly/QlNC+IEhPTUUtMTcwOCDQv9GD0L3QutGCIDIKCQkJ
CQl0aGlzLmFqc1N1Z2dlc3QKCQkJCQkJLy8g0LfQsNC/0YDQtdGJ0LDQtdC8IGFq
cy51aS5zdWdnZXN0INC60LXRiNC40YDQvtCy0LDRgtGMINC00LDQvdC90YvQtSDQ
uCDQv9GA0LjQvdGD0LbQtNCw0LXQvCDQtdCz0L4g0LrQsNC20LTRi9C5INGA0LDQ
tyDQstGL0LfRi9Cy0LDRgtGMIGdldERhdGEKCQkJCQkJLmFkZFRyaWdnZXIoInN1
Z2dlc3RzOmZpbmQiLCBmdW5jdGlvbihlKSB7CgkJCQkJCQllLmV4cGlyZSA9IHRy
dWU7CgoJCQkJCQkJaWYoIHN1Z2dlc3RPcHRzLnN0YXJ0RmluZFN1Z2dlc3QgJiYg
ZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC50eXBlID09ICJmb2N1
cyIgKSB7CgkJCQkJCQkJaWYoIHN1Z2dlc3RPcHRzLnN0YXJ0RmluZFN1Z2dlc3Qo
KSA9PT0gZmFsc2UgKSB7CgkJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCQl9
CgkJCQkJCQl9CgkJCQkJCX0pCgkJCQkJOwoJCQkJfQoKCQkJCWlmKCB0eXBlb2Yg
c3VnZ2VzdE9wdHMuYWZ0ZXJHZXRTdWdnZXN0V29yZHMgPT0gImZ1bmN0aW9uIiAp
IHsKCQkJCQl0aGlzLmFqc1N1Z2dlc3QKCQkJCQkJLmFkZFRyaWdnZXIoInN1Z2dl
c3RzOmdldFN1Z2dlc3RXb3JkczphZnRlciIsIGZ1bmN0aW9uKGV2ZW50KSB7CgkJ
CQkJCQl2YXIgaWdub3JlQWZ0ZXI7CgkJCQkJCQlpZ25vcmVBZnRlciA9IChpZ25v
cmVBZnRlciA9IGV2ZW50LnRhcmdldCkgJiYgKGlnbm9yZUFmdGVyID0gaWdub3Jl
QWZ0ZXIub3B0cykgJiYgaWdub3JlQWZ0ZXIuaWdub3JlQWZ0ZXJHZXRTdWdnZXN0
V29yZHM7CgkJCQkJCQlpZiggIWlnbm9yZUFmdGVyICkgewoJCQkJCQkJCWV2ZW50
WyJkYXRhIl0gPSB0aGlzKGV2ZW50WyJkYXRhIl0pCgkJCQkJCQl9CgkJCQkJCX0u
YmluZChzdWdnZXN0T3B0cy5hZnRlckdldFN1Z2dlc3RXb3JkcykpCgkJCQkJOwoJ
CQkJfQoJCQl9LAoKCQkJX2dldERhdGE6IGZ1bmN0aW9uKHN1Z2dlc3RWYWx1ZSkg
ewogCQkJCXJldHVybiBzdWdnZXN0VmFsdWUgPyB0aGlzLmxvY2FsRGF0YS5maW5k
KHN1Z2dlc3RWYWx1ZSkgOiB0aGlzLmxvY2FsRGF0YS5hbGwoKTsKCQkJfSwKCgkJ
CXNldERhdGE6IGZ1bmN0aW9uKGRhdGEpIHsKCQkJCS8vINC90LAg0LLRhdC+0LQg
0L/QvtC70YPRh9C40LvQuCDQuNGB0YLQvtGH0L3QuNC6INC00LDQvdC90YvRhQoJ
CQkJaWYoZGF0YSAmJiAnZmluZCcgaW4gZGF0YSAmJiAnYWxsJyBpbiBkYXRhICYm
ICQuaXNGdW5jdGlvbihkYXRhLmZpbmQpICYmICQuaXNGdW5jdGlvbihkYXRhLmFs
bCkpIHsKCQkJCQl0aGlzLmxvY2FsRGF0YSA9IGRhdGE7CgoJCQkJLy8g0L3QsCDQ
stGF0L7QtCDQv9C+0LvRg9GH0LjQu9C4INC80LDRgdGB0LjQsiDQt9Cw0L/QuNGB
0LXQuSwg0LrQvtGC0L7RgNGL0LUg0L3Rg9C20L3QviDQvtGC0L7QsdGA0LDQttCw
0YLRjAoJCQkJfSBlbHNlIGlmKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsKCQkJCQl2
YXIgc2VhcmNoSW5kZXggPSBuZXcgbWFpbHJ1LlV0aWxzLlNlYXJjaEluZGV4KHRo
aXMub3B0cy5zZWFyY2hJbmRleFRva2VuaXplcik7CgkJCQkJc2VhcmNoSW5kZXgu
Y3JlYXRlKGRhdGEpOwoKCQkJCQl0aGlzLmxvY2FsRGF0YSA9IHsKCQkJCQkJdHlw
ZTogJ2Zyb21BcnJheScsCgoJCQkJCQlhbGw6IGZ1bmN0aW9uKCkgewoJCQkJCQkJ
cmV0dXJuIGRhdGE7CgkJCQkJCX0sCgoJCQkJCQlmaW5kOiBmdW5jdGlvbihzdWdn
ZXN0VmFsdWUpIHsKCQkJCQkJCXJldHVybiBzZWFyY2hJbmRleC5maW5kKHN1Z2dl
c3RWYWx1ZSk7CgkJCQkJCX0KCQkJCQl9OwoKCgkJCQl9IGVsc2UgewoJCQkJCXRo
cm93IG5ldyBFcnJvcignVW5kZWZpbmVkIHR5cGUgb2YgZGF0YScpOwoJCQkJfQoJ
CQl9LAoKCQkJaXNFeHBhbmRlZDogZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gdGhp
cy5hanNTdWdnZXN0LmlzRXhwYW5kZWQoKTsKCQkJfSwKCgkJCWhpZGU6IGZ1bmN0
aW9uKCkgewoJCQkJdGhpcy5hanNTdWdnZXN0LmhpZGUoKQoJCQl9LAoKCQkJaWdu
b3JlVXNlZDogZnVuY3Rpb24odXNlZCkgewoJCQkJdGhpcy51c2VkTWFwID0ge307
CgoJCQkJaWYoQXJyYXkuaXNBcnJheSh1c2VkKSkgewoJCQkJCWZvcih2YXIgaT0w
LCBsPXVzZWQubGVuZ3RoOyBpPGw7IGkrKykgewoJCQkJCQlpZih1c2VkW2ldKSB7
CgkJCQkJCQl0aGlzLnVzZWRNYXBbdXNlZFtpXV0gPSB0cnVlOwoJCQkJCQl9CgkJ
CQkJfQoJCQkJfQoJCQl9LAoKCQkJc2hvd1dob2xlTGlzdDogZnVuY3Rpb24oKSB7
CgkJCQlpZiggdGhpcy5vcHRzLmludGVybmFsU291cmNlICkgey8v0JTQviBIT01F
LTE3MDgg0L/Rg9C90LrRgiAyCgkJCQkJdGhpcy5hanNTdWdnZXN0LnJlc2V0KCk7
CgkJCQl9CgkJCQl0aGlzLmFqc1N1Z2dlc3Quc2hvd1N1Z2dlc3RzKCIiLCBmYWxz
ZSwgdGhpcy5kYXRhLCB0cnVlKTsKCQkJfSwKCgoJCQlnZXRTdWdnZXN0V29yZHM6
IGZ1bmN0aW9uKGlnbm9yZUFmdGVyKSB7CgkJCQl2YXIgcmVzdWx0OwoKCQkJCWlm
KCBpZ25vcmVBZnRlciApIHsKCQkJCQl0aGlzLmFqc1N1Z2dlc3Qub3B0cy5pZ25v
cmVBZnRlckdldFN1Z2dlc3RXb3JkcyA9IHRydWU7CgkJCQl9CgoJCQkJcmVzdWx0
ID0gdGhpcy5hanNTdWdnZXN0LmdldFN1Z2dlc3RXb3JkcygpOwoKCQkJCWlmKCBp
Z25vcmVBZnRlciApIHsKCQkJCQlkZWxldGUgdGhpcy5hanNTdWdnZXN0Lm9wdHMu
aWdub3JlQWZ0ZXJHZXRTdWdnZXN0V29yZHM7CgkJCQl9CgoJCQkJcmV0dXJuIHJl
c3VsdDsKCQkJfSwKCgkJCWdldEN1cnJlbnRGaW5kVmFsdWU6IGZ1bmN0aW9uKCkg
ewoJCQkJcmV0dXJuIHRoaXMuYWpzU3VnZ2VzdC5nZXRDdXJyZW50RmluZFZhbHVl
KCk7CgkJCX0sCgoJCQlyZWJ1aWxkU3VnZ2VzdHNMaXN0OiBmdW5jdGlvbigpIHsK
CQkJCWlmKCB0aGlzLm9wdHMuaW50ZXJuYWxTb3VyY2UgKSB7Ly/QlNC+IEhPTUUt
MTcwOCDQv9GD0L3QutGCIDIKCQkJCQl0aGlzLmFqc1N1Z2dlc3QucmVzZXQoKTsK
CQkJCX0KCQkJCXRoaXMuYWpzU3VnZ2VzdC5zaG93U3VnZ2VzdHModGhpcy5nZXRD
dXJyZW50RmluZFZhbHVlKCksIGZhbHNlKTsKCQkJfQoJCX0pCgk7CgoJanNMb2Fk
ZXIubG9hZGVkKCd7bWFpbHJ1LnVpfW1haWxydS51aS5TdWdnZXN0JywgMSk7Cgov
LyBkYXRhL3J1L2ltYWdlcy9qcy9ydS91aS9tYWlscnUudWkuU3VnZ2VzdC5qcyBl
bmQKCn0pKGpRdWVyeSwgalF1ZXJ5KTsKCi8vIDExMAoJanNMb2FkZXIubG9hZGVk
KCd7bWFpbHJ1LmJ1aWxkfWNvcmUnLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pz
L3J1L2J1aWxkL2NvcmUuanMgZW5kCg==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=AttachViewer.js
Content-Type: application/x-javascript; name=AttachViewer.js
Content-Location: https://js.imgsmail.ru/ts/1377502689/images/js/ru/build/AttachViewer.js
Content-Transfer-Encoding: Base64
LyogMjAxMy0wOC0yNiAxMTozODo0NSAqLwoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pz
L3J1L2J1aWxkL0F0dGFjaFZpZXdlci5qcyBzdGFydAoKaWYoICdqUXVlcnknIGlu
IHdpbmRvdyApIChmdW5jdGlvbiAoalF1ZXJ5LCAkKSB7CgovLyBAYnVpbGQKLy8g
QGJ1aWxkLWV4Y2x1ZGU6IGJ1aWxkL2NvcmUuanMKLy8gQGJ1aWxkLWpxdWVyeQov
LyBAYnVpbGQtbWluaWZ5Ci8vIEBkZXBsb3ktd2FpdC1mb3I6IGh0dHA6Ly9qcy5p
bWdzbWFpbC5ydS91L2pzL3J1L2J1aWxkL0F0dGFjaFZpZXdlci5qcwoKLy8gLi9k
YXRhL3J1L2Zlc3QvcGFnZXMvYXR0YWNodmlld2VyL2F0dGFjaHZpZXdlcl9fYXJj
aGl2ZV9fdHJlZS5qcyBzdGFydAoKOyhmdW5jdGlvbigpe3ZhciB4PUZ1bmN0aW9u
KCdyZXR1cm4gdGhpcycpKCk7aWYoIXguZmVzdCl4LmZlc3Q9e307eC5mZXN0Wydw
YWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmlld2VyX19hcmNoaXZlX190cmVlJ109
ZnVuY3Rpb24gKF9fZmVzdF9jb250ZXh0KXsidXNlIHN0cmljdCI7dmFyIF9fZmVz
dF9zZWxmPXRoaXMsX19mZXN0X2J1Zj1bXSxfX2Zlc3RfY2h1bmtzPVtdLF9fZmVz
dF9jaHVuayxfX2Zlc3RfYXR0cnM9W10sX19mZXN0X3NlbGVjdCxfX2Zlc3RfaWYs
X19mZXN0X2l0ZXJhdG9yLF9fZmVzdF90byxfX2Zlc3RfZm4sX19mZXN0X2h0bWw9
W10sX19mZXN0X2Jsb2Nrcz17fSxfX2Zlc3RfcGFyYW1zLF9fZmVzdF9lbGVtZW50
LF9fZmVzdF9kZWJ1Z19maWxlPSIiLF9fZmVzdF9kZWJ1Z19saW5lPSIiLF9fZmVz
dF9kZWJ1Z19ibG9jaz0iIixfX2Zlc3RfaHRtbGNoYXJzPS9bJjw+Il0vZyxfX2Zl
c3RfaHRtbGNoYXJzX3Rlc3Q9L1smPD4iXS8sX19mZXN0X3Nob3J0X3RhZ3MgPSB7
ImFyZWEiOnRydWUsImJhc2UiOnRydWUsImJyIjp0cnVlLCJjb2wiOnRydWUsImNv
bW1hbmQiOnRydWUsImVtYmVkIjp0cnVlLCJociI6dHJ1ZSwiaW1nIjp0cnVlLCJp
bnB1dCI6dHJ1ZSwia2V5Z2VuIjp0cnVlLCJsaW5rIjp0cnVlLCJtZXRhIjp0cnVl
LCJwYXJhbSI6dHJ1ZSwic291cmNlIjp0cnVlLCJ3YnIiOnRydWV9LF9fZmVzdF9l
bGVtZW50X3N0YWNrID0gW10sX19mZXN0X2h0bWxoYXNoPXsiJiI6IiZhbXA7Iiwi
PCI6IiZsdDsiLCI+IjoiJmd0OyIsIlwiIjoiJnF1b3Q7In0sX19mZXN0X2pzY2hh
cnM9L1tcXCciXC9cblxyXHRcYlxmPD5dL2csX19mZXN0X2pzY2hhcnNfdGVzdD0v
W1xcJyJcL1xuXHJcdFxiXGY8Pl0vLF9fZmVzdF9qc2hhc2g9eyJcIiI6IlxcXCIi
LCJcXCI6IlxcXFwiLCIvIjoiXFwvIiwiXG4iOiJcXG4iLCJcciI6IlxcciIsIlx0
IjoiXFx0IiwiXGIiOiJcXGIiLCJcZiI6IlxcZiIsIiciOiJcXCciLCI8IjoiXFx1
MDAzQyIsIj4iOiJcXHUwMDNFIn0sX19fZmVzdF9sb2dfZXJyb3I7aWYodHlwZW9m
IF9fZmVzdF9lcnJvciA9PT0gInVuZGVmaW5lZCIpe19fX2Zlc3RfbG9nX2Vycm9y
ID0gKHR5cGVvZiBjb25zb2xlICE9PSAidW5kZWZpbmVkIiAmJiBjb25zb2xlLmVy
cm9yKSA/IGZ1bmN0aW9uKCl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBs
eS5jYWxsKGNvbnNvbGUuZXJyb3IsIGNvbnNvbGUsIGFyZ3VtZW50cyl9IDogZnVu
Y3Rpb24oKXt9O31lbHNle19fX2Zlc3RfbG9nX2Vycm9yPV9fZmVzdF9lcnJvcn07
ZnVuY3Rpb24gX19mZXN0X2xvZ19lcnJvcihtc2cpe19fX2Zlc3RfbG9nX2Vycm9y
KG1zZysiXG5pbiBibG9jayBcIiIrX19mZXN0X2RlYnVnX2Jsb2NrKyJcIiBhdCBs
aW5lOiAiK19fZmVzdF9kZWJ1Z19saW5lKyJcbmZpbGU6ICIrX19mZXN0X2RlYnVn
X2ZpbGUpfWZ1bmN0aW9uIF9fZmVzdF9yZXBsYWNlSFRNTChjaHIpe3JldHVybiBf
X2Zlc3RfaHRtbGhhc2hbY2hyXX1mdW5jdGlvbiBfX2Zlc3RfcmVwbGFjZUpTKGNo
cil7cmV0dXJuIF9fZmVzdF9qc2hhc2hbY2hyXX1mdW5jdGlvbiBfX2Zlc3RfZXh0
ZW5kKGRlc3QsIHNyYyl7Zm9yKHZhciBpIGluIHNyYylpZihzcmMuaGFzT3duUHJv
cGVydHkoaSkpZGVzdFtpXT1zcmNbaV07fWZ1bmN0aW9uIF9fZmVzdF9wYXJhbShm
bil7Zm4ucGFyYW09dHJ1ZTtyZXR1cm4gZm59ZnVuY3Rpb24gX19mZXN0X2NhbGwo
Zm4sIHBhcmFtcyxjcCl7aWYoY3ApZm9yKHZhciBpIGluIHBhcmFtcylpZih0eXBl
b2YgcGFyYW1zW2ldPT0iZnVuY3Rpb24iJiZwYXJhbXNbaV0ucGFyYW0pcGFyYW1z
W2ldPXBhcmFtc1tpXSgpO3JldHVybiBmbi5jYWxsKF9fZmVzdF9zZWxmLHBhcmFt
cyl9ZnVuY3Rpb24gX19mZXN0X2VzY2FwZUpTKHMpe2lmICh0eXBlb2Ygcz09PSJz
dHJpbmciKSB7aWYgKF9fZmVzdF9qc2NoYXJzX3Rlc3QudGVzdChzKSlyZXR1cm4g
cy5yZXBsYWNlKF9fZmVzdF9qc2NoYXJzLF9fZmVzdF9yZXBsYWNlSlMpO30gZWxz
ZSBpZiAodHlwZW9mIHM9PT0idW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0dXJuIHM7
fWZ1bmN0aW9uIF9fZmVzdF9lc2NhcGVIVE1MKHMpe2lmICh0eXBlb2Ygcz09PSJz
dHJpbmciKSB7aWYgKF9fZmVzdF9odG1sY2hhcnNfdGVzdC50ZXN0KHMpKXJldHVy
biBzLnJlcGxhY2UoX19mZXN0X2h0bWxjaGFycyxfX2Zlc3RfcmVwbGFjZUhUTUwp
O30gZWxzZSBpZiAodHlwZW9mIHM9PT0idW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0
dXJuIHM7fXZhciBqc29uPV9fZmVzdF9jb250ZXh0OyhmdW5jdGlvbihfX2Zlc3Rf
Y29udGV4dCl7KGZ1bmN0aW9uKF9fZmVzdF9jb250ZXh0KXtfX2Zlc3RfYmxvY2tz
Lm1lc3NhZ2VsaXN0X2ZpbGVzbGlzdF9zaG9ydF9fZmlsZXM9ZnVuY3Rpb24ocGFy
YW1zKXt2YXIgX19mZXN0X2J1Zj1bXTtfX2Zlc3RfYnVmLnB1c2goIjxkaXYgY2xh
c3M9XCJtZXNzYWdlbGlzdF9maWxlc2xpc3Rfc2hvcnRfX2ZpbGVzXCI+Iik7dmFy
IGksZmlsZSxfX2Zlc3RfaXRlcmF0b3IwO3RyeXtfX2Zlc3RfaXRlcmF0b3IwPXBh
cmFtcy5saXN0KCkgfHwge307fWNhdGNoKGUpe19fZmVzdF9pdGVyYXRvcj17fTtf
X2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSk7fWZvcihpIGluIF9fZmVzdF9pdGVy
YXRvcjApe2ZpbGU9X19mZXN0X2l0ZXJhdG9yMFtpXTt0cnl7X19mZXN0X2lmPWZp
bGUuaXNGb2xkZXJ9Y2F0Y2goZSl7X19mZXN0X2lmPWZhbHNlO19fZmVzdF9sb2df
ZXJyb3IoZS5tZXNzYWdlKTt9aWYoX19mZXN0X2lmKXtfX2Zlc3RfYnVmLnB1c2go
IjxkaXYgY2xhc3M9XCJtZXNzYWdlbGluZSBtZXNzYWdlbGlzdF9maWxlc2xpc3Rf
c2hvcnRfX2ZpbGVzX19maWxlIG1lc3NhZ2VsaXN0X2ZpbGVzbGlzdF9zaG9ydF9f
ZmlsZXNfX2ZpbGVfZm9sZGVyXCI+Iik7dHJ5e19fZmVzdF9hdHRyc1swXT1fX2Zl
c3RfZXNjYXBlSFRNTChqc29uLmxhbmcuYmxvY2tzLm1lc3NhZ2VsaXN0LmZpbGVz
bGlzdF9zaG9ydC5maWxlcy5zaG93X3NvdXJjZSl9Y2F0Y2goZSl7X19mZXN0X2F0
dHJzWzBdPSIiOyBfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSk7fXRyeXtfX2Zl
c3RfYXR0cnNbMV09X19mZXN0X2VzY2FwZUhUTUwoanNvbi5sYW5nLmJsb2Nrcy5t
ZXNzYWdlbGlzdC5maWxlc2xpc3Rfc2hvcnQuZmlsZXMuc2hvd19zb3VyY2UpfWNh
dGNoKGUpe19fZmVzdF9hdHRyc1sxXT0iIjsgX19mZXN0X2xvZ19lcnJvcihlLm1l
c3NhZ2UpO310cnl7X19mZXN0X2F0dHJzWzJdPV9fZmVzdF9lc2NhcGVIVE1MKGpz
b24ubGFuZy5ibG9ja3MubWVzc2FnZWxpc3QuZmlsZXNsaXN0X3Nob3J0LmZpbGVz
LmhpZGVfc291cmNlKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbMl09IiI7IF9fZmVz
dF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9dHJ5e19fZmVzdF9hdHRyc1szXT1fX2Zl
c3RfZXNjYXBlSFRNTChmaWxlLmlkKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbM109
IiI7IF9fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5wdXNo
KCI8c3BhbiBjbGFzcz1cIm1lc3NhZ2VsaW5lX19ib2R5IGpzLXRvZ2dsZS1mb2xk
ZXJcIiB0aXRsZT1cIiIgKyBfX2Zlc3RfYXR0cnNbMF0gKyAiXCIgZGF0YS1zaG93
LXRpdGxlPVwiIiArIF9fZmVzdF9hdHRyc1sxXSArICJcIiBkYXRhLWhpZGUtdGl0
bGU9XCIiICsgX19mZXN0X2F0dHJzWzJdICsgIlwiIGRhdGEtaWQ9XCIiICsgX19m
ZXN0X2F0dHJzWzNdICsgIlwiPjxzcGFuIGNsYXNzPVwibWVzc2FnZWxpbmVfX2Jv
ZHlfX2xpbmsgbWVzc2FnZWxpbmVfX2JvZHlfX2xpbmtfZmlsZW5hbWVcIj48c3Bh
biBjbGFzcz1cIm1lc3NhZ2VsaW5lX19mbGFnXCI+PGkgY2xhc3M9XCJtZXNzYWdl
bGluZV9fZmlsZXR5cGVfX2ljb24gaWNvbl9maWxldHlwZSBpY29uX2ZpbGV0eXBl
X2ZvbGRlclwiPjwvaT48L3NwYW4+PHNwYW4gY2xhc3M9XCJtZXNzYWdlbGluZV9f
Ym9keV9fc3ViamVjdFwiPiIpO3RyeXtfX2Zlc3RfYnVmLnB1c2goX19mZXN0X2Vz
Y2FwZUhUTUwoZmlsZS5uYW1lKSl9Y2F0Y2goZSl7X19mZXN0X2xvZ19lcnJvcihl
Lm1lc3NhZ2UgKyAiMTYiKTt9X19mZXN0X2J1Zi5wdXNoKCI8L3NwYW4+PC9zcGFu
Pjwvc3Bhbj4iKTtfX2Zlc3Rfc2VsZWN0PSJtZXNzYWdlbGlzdF9maWxlc2xpc3Rf
c2hvcnRfX2ZpbGVzIjtfX2Zlc3RfcGFyYW1zPXt9O3RyeXtfX2Zlc3RfcGFyYW1z
PWZpbGV9Y2F0Y2goZSl7X19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UpfV9fZmVz
dF9mbj1fX2Zlc3RfYmxvY2tzW19fZmVzdF9zZWxlY3RdO2lmIChfX2Zlc3RfZm4p
X19mZXN0X2J1Zi5wdXNoKF9fZmVzdF9jYWxsKF9fZmVzdF9mbixfX2Zlc3RfcGFy
YW1zLGZhbHNlKSk7X19mZXN0X2J1Zi5wdXNoKCI8L2Rpdj4iKTt9ZWxzZXtfX2Zl
c3RfYnVmLnB1c2goIjxkaXYgY2xhc3M9XCJtZXNzYWdlbGluZSBtZXNzYWdlbGlz
dF9maWxlc2xpc3Rfc2hvcnRfX2ZpbGVzX19maWxlXCI+PHNwYW4gY2xhc3M9XCJt
ZXNzYWdlbGluZV9fYm9keVwiPiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0
X2VzY2FwZUhUTUwoZmlsZS5kb3dubG9hZEZyb21aaXBVcmwpfWNhdGNoKGUpe19f
ZmVzdF9hdHRyc1swXT0iIjsgX19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UpO310
cnl7X19mZXN0X2F0dHJzWzFdPV9fZmVzdF9lc2NhcGVIVE1MKGpzb24ubGFuZy5i
bG9ja3MubWVzc2FnZWxpc3QuZmlsZXNsaXN0X3Nob3J0LmZpbGVzLmRvd25sb2Fk
KX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbMV09IiI7IF9fZmVzdF9sb2dfZXJyb3Io
ZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5wdXNoKCI8YSBjbGFzcz1cIm1lc3NhZ2Vs
aW5lX19ib2R5X19saW5rIG1lc3NhZ2VsaW5lX19ib2R5X19saW5rX2ZpbGVuYW1l
XCIgaHJlZj1cIiIgKyBfX2Zlc3RfYXR0cnNbMF0gKyAiXCIgdGl0bGU9XCIiICsg
X19mZXN0X2F0dHJzWzFdICsgIlwiPjxzcGFuIGNsYXNzPVwibWVzc2FnZWxpbmVf
X2ZsYWdcIj4iKTt0cnl7X19mZXN0X2F0dHJzWzBdPV9fZmVzdF9lc2NhcGVIVE1M
KGZpbGUudHlwZSl9Y2F0Y2goZSl7X19mZXN0X2F0dHJzWzBdPSIiOyBfX2Zlc3Rf
bG9nX2Vycm9yKGUubWVzc2FnZSk7fV9fZmVzdF9idWYucHVzaCgiPGkgY2xhc3M9
XCJtZXNzYWdlbGluZV9fZmlsZXR5cGVfX2ljb24gaWNvbl9maWxldHlwZSBpY29u
X2ZpbGV0eXBlXyIgKyBfX2Zlc3RfYXR0cnNbMF0gKyAiXCI+PC9pPjwvc3Bhbj48
c3BhbiBjbGFzcz1cIm1lc3NhZ2VsaW5lX19ib2R5X19zdWJqZWN0XCI+Iik7dHJ5
e19fZmVzdF9idWYucHVzaChfX2Zlc3RfZXNjYXBlSFRNTChmaWxlLm5hbWUpKX1j
YXRjaChlKXtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSArICIzNCIpO31fX2Zl
c3RfYnVmLnB1c2goIjwvc3Bhbj48L2E+Iik7dHJ5e19fZmVzdF9hdHRyc1swXT1f
X2Zlc3RfZXNjYXBlSFRNTChmaWxlLmRvd25sb2FkRnJvbVppcFVybCl9Y2F0Y2go
ZSl7X19mZXN0X2F0dHJzWzBdPSIiOyBfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2Fn
ZSk7fXRyeXtfX2Zlc3RfYXR0cnNbMV09X19mZXN0X2VzY2FwZUhUTUwoanNvbi5s
YW5nLmJsb2Nrcy5tZXNzYWdlbGlzdC5maWxlc2xpc3Rfc2hvcnQuZmlsZXMuZG93
bmxvYWQpfWNhdGNoKGUpe19fZmVzdF9hdHRyc1sxXT0iIjsgX19mZXN0X2xvZ19l
cnJvcihlLm1lc3NhZ2UpO31fX2Zlc3RfYnVmLnB1c2goIjxhIGNsYXNzPVwibWVz
c2FnZWxpbmVfX2JvZHlfX2xpbmsgbWVzc2FnZWxpbmVfX2JvZHlfX2xpbmtfZmls
ZWRvd25sb2FkXCIgaHJlZj1cIiIgKyBfX2Zlc3RfYXR0cnNbMF0gKyAiXCIgdGl0
bGU9XCIiICsgX19mZXN0X2F0dHJzWzFdICsgIlwiPjxzcGFuPjxpIGNsYXNzPVwi
bWVzc2FnZWxpbmVfX3N0YXR1c19faWNvbiBpY29uIGljb25fZmlsZWRvd25sb2Fk
XCI+PC9pPjwvc3Bhbj48c3BhbiBjbGFzcz1cIm1lc3NhZ2VsaW5lX19ib2R5X19m
aWxlc2l6ZVwiPiIpO3RyeXtfX2Zlc3RfYnVmLnB1c2goX19mZXN0X2VzY2FwZUhU
TUwoZmlsZS5odW1hblNpemUuc2l6ZSkpfWNhdGNoKGUpe19fZmVzdF9sb2dfZXJy
b3IoZS5tZXNzYWdlICsgIjQ0Iik7fV9fZmVzdF9idWYucHVzaCgiICIpO3RyeXtf
X2Zlc3RfYnVmLnB1c2goX19mZXN0X2VzY2FwZUhUTUwoanNvbi5sYW5nLmJsb2Nr
cy5tZXNzYWdlbGlzdC5maWxlc2xpc3Rfc2hvcnQuZmlsZXMuaHVtYW5fc2l6ZVtm
aWxlLmh1bWFuU2l6ZS51bml0XSkpfWNhdGNoKGUpe19fZmVzdF9sb2dfZXJyb3Io
ZS5tZXNzYWdlICsgIjQ2Iik7fV9fZmVzdF9idWYucHVzaCgiPC9zcGFuPjwvYT48
L3NwYW4+PC9kaXY+Iik7fX1fX2Zlc3RfYnVmLnB1c2goIjwvZGl2PiIpO3JldHVy
biBfX2Zlc3RfYnVmLmpvaW4oIiIpO307fSkoX19mZXN0X2NvbnRleHQpO19fZmVz
dF9ibG9ja3MubWVzc2FnZWxpc3RfZmlsZXNsaXN0X3Nob3J0PWZ1bmN0aW9uKHBh
cmFtcyl7dmFyIF9fZmVzdF9idWY9W107X19mZXN0X2J1Zi5wdXNoKCI8ZGl2IGNs
YXNzPVwibWVzc2FnZWxpc3Qtd3JhcHBlciBtZXNzYWdlbGlzdC13cmFwcGVyX2Zp
bGVzbGlzdF9zaG9ydFwiPjxkaXYgY2xhc3M9XCJtZXNzYWdlbGlzdCBtZXNzYWdl
bGlzdF9maWxlc2xpc3Rfc2hvcnRcIj48ZGl2PiIpO19fZmVzdF9zZWxlY3Q9Im1l
c3NhZ2VsaXN0X2ZpbGVzbGlzdF9zaG9ydF9fZmlsZXMiO19fZmVzdF9wYXJhbXM9
e307dHJ5e19fZmVzdF9wYXJhbXM9cGFyYW1zLnJvb3QoKX1jYXRjaChlKXtfX2Zl
c3RfbG9nX2Vycm9yKGUubWVzc2FnZSl9X19mZXN0X2ZuPV9fZmVzdF9ibG9ja3Nb
X19mZXN0X3NlbGVjdF07aWYgKF9fZmVzdF9mbilfX2Zlc3RfYnVmLnB1c2goX19m
ZXN0X2NhbGwoX19mZXN0X2ZuLF9fZmVzdF9wYXJhbXMsZmFsc2UpKTtfX2Zlc3Rf
YnVmLnB1c2goIjwvZGl2PjwvZGl2PjwvZGl2PiIpO3JldHVybiBfX2Zlc3RfYnVm
LmpvaW4oIiIpO307fSkoX19mZXN0X2NvbnRleHQpO19fZmVzdF9zZWxlY3Q9Im1l
c3NhZ2VsaXN0X2ZpbGVzbGlzdF9zaG9ydCI7X19mZXN0X3BhcmFtcz17fTt0cnl7
X19mZXN0X3BhcmFtcz1qc29uLmZpbGVzfWNhdGNoKGUpe19fZmVzdF9sb2dfZXJy
b3IoZS5tZXNzYWdlKX1fX2Zlc3RfY2h1bmtzLnB1c2goX19mZXN0X2J1Zi5qb2lu
KCIiKSx7bmFtZTpfX2Zlc3Rfc2VsZWN0LHBhcmFtczpfX2Zlc3RfcGFyYW1zLGNw
OmZhbHNlfSk7X19mZXN0X2J1Zj1bXTtfX2Zlc3RfdG89X19mZXN0X2NodW5rcy5s
ZW5ndGg7aWYgKF9fZmVzdF90bykge19fZmVzdF9pdGVyYXRvciA9IDA7Zm9yICg7
X19mZXN0X2l0ZXJhdG9yPF9fZmVzdF90bztfX2Zlc3RfaXRlcmF0b3IrKykge19f
ZmVzdF9jaHVuaz1fX2Zlc3RfY2h1bmtzW19fZmVzdF9pdGVyYXRvcl07aWYgKHR5
cGVvZiBfX2Zlc3RfY2h1bms9PT0ic3RyaW5nIikge19fZmVzdF9odG1sLnB1c2go
X19mZXN0X2NodW5rKTt9IGVsc2Uge19fZmVzdF9mbj1fX2Zlc3RfYmxvY2tzW19f
ZmVzdF9jaHVuay5uYW1lXTtpZiAoX19mZXN0X2ZuKSBfX2Zlc3RfaHRtbC5wdXNo
KF9fZmVzdF9jYWxsKF9fZmVzdF9mbixfX2Zlc3RfY2h1bmsucGFyYW1zLCBfX2Zl
c3RfY2h1bmsuY3ApKTt9fV9fZmVzdF9odG1sLnB1c2goX19mZXN0X2J1Zi5qb2lu
KCIiKSk7cmV0dXJuIF9fZmVzdF9odG1sLmpvaW4oIiIpfSBlbHNlIHtyZXR1cm4g
X19mZXN0X2J1Zi5qb2luKCIiKTt9fTsgaWYoeC5qc0xvYWRlciE9PXVuZGVmaW5l
ZCYmeC5qc0xvYWRlci5sb2FkZWQhPT11bmRlZmluZWQmJnR5cGVvZiB4LmpzTG9h
ZGVyLmxvYWRlZD09PSdmdW5jdGlvbicpe3guanNMb2FkZXIubG9hZGVkKCd7ZmVz
dFRlbXBsYXRlfXBhZ2VzL2F0dGFjaHZpZXdlci9hdHRhY2h2aWV3ZXJfX2FyY2hp
dmVfX3RyZWUnLCAxKX07fSkoKTsKLy8gLi9kYXRhL3J1L2Zlc3QvcGFnZXMvYXR0
YWNodmlld2VyL2F0dGFjaHZpZXdlcl9fYXJjaGl2ZV9fdHJlZS5qcyBlbmQKCi8v
IC4vZGF0YS9ydS9mZXN0L3BhZ2VzL2F0dGFjaHZpZXdlci9hdHRhY2h2aWV3ZXJf
X2FyY2hpdmUuanMgc3RhcnQKCjsoZnVuY3Rpb24oKXt2YXIgeD1GdW5jdGlvbign
cmV0dXJuIHRoaXMnKSgpO2lmKCF4LmZlc3QpeC5mZXN0PXt9O3guZmVzdFsncGFn
ZXMvYXR0YWNodmlld2VyL2F0dGFjaHZpZXdlcl9fYXJjaGl2ZSddPWZ1bmN0aW9u
IChfX2Zlc3RfY29udGV4dCl7InVzZSBzdHJpY3QiO3ZhciBfX2Zlc3Rfc2VsZj10
aGlzLF9fZmVzdF9idWY9W10sX19mZXN0X2NodW5rcz1bXSxfX2Zlc3RfY2h1bmss
X19mZXN0X2F0dHJzPVtdLF9fZmVzdF9zZWxlY3QsX19mZXN0X2lmLF9fZmVzdF9p
dGVyYXRvcixfX2Zlc3RfdG8sX19mZXN0X2ZuLF9fZmVzdF9odG1sPVtdLF9fZmVz
dF9ibG9ja3M9e30sX19mZXN0X3BhcmFtcyxfX2Zlc3RfZWxlbWVudCxfX2Zlc3Rf
ZGVidWdfZmlsZT0iIixfX2Zlc3RfZGVidWdfbGluZT0iIixfX2Zlc3RfZGVidWdf
YmxvY2s9IiIsX19mZXN0X2h0bWxjaGFycz0vWyY8PiJdL2csX19mZXN0X2h0bWxj
aGFyc190ZXN0PS9bJjw+Il0vLF9fZmVzdF9zaG9ydF90YWdzID0geyJhcmVhIjp0
cnVlLCJiYXNlIjp0cnVlLCJiciI6dHJ1ZSwiY29sIjp0cnVlLCJjb21tYW5kIjp0
cnVlLCJlbWJlZCI6dHJ1ZSwiaHIiOnRydWUsImltZyI6dHJ1ZSwiaW5wdXQiOnRy
dWUsImtleWdlbiI6dHJ1ZSwibGluayI6dHJ1ZSwibWV0YSI6dHJ1ZSwicGFyYW0i
OnRydWUsInNvdXJjZSI6dHJ1ZSwid2JyIjp0cnVlfSxfX2Zlc3RfZWxlbWVudF9z
dGFjayA9IFtdLF9fZmVzdF9odG1saGFzaD17IiYiOiImYW1wOyIsIjwiOiImbHQ7
IiwiPiI6IiZndDsiLCJcIiI6IiZxdW90OyJ9LF9fZmVzdF9qc2NoYXJzPS9bXFwn
IlwvXG5cclx0XGJcZjw+XS9nLF9fZmVzdF9qc2NoYXJzX3Rlc3Q9L1tcXCciXC9c
blxyXHRcYlxmPD5dLyxfX2Zlc3RfanNoYXNoPXsiXCIiOiJcXFwiIiwiXFwiOiJc
XFxcIiwiLyI6IlxcLyIsIlxuIjoiXFxuIiwiXHIiOiJcXHIiLCJcdCI6IlxcdCIs
IlxiIjoiXFxiIiwiXGYiOiJcXGYiLCInIjoiXFwnIiwiPCI6IlxcdTAwM0MiLCI+
IjoiXFx1MDAzRSJ9LF9fX2Zlc3RfbG9nX2Vycm9yO2lmKHR5cGVvZiBfX2Zlc3Rf
ZXJyb3IgPT09ICJ1bmRlZmluZWQiKXtfX19mZXN0X2xvZ19lcnJvciA9ICh0eXBl
b2YgY29uc29sZSAhPT0gInVuZGVmaW5lZCIgJiYgY29uc29sZS5lcnJvcikgPyBm
dW5jdGlvbigpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChj
b25zb2xlLmVycm9yLCBjb25zb2xlLCBhcmd1bWVudHMpfSA6IGZ1bmN0aW9uKCl7
fTt9ZWxzZXtfX19mZXN0X2xvZ19lcnJvcj1fX2Zlc3RfZXJyb3J9O2Z1bmN0aW9u
IF9fZmVzdF9sb2dfZXJyb3IobXNnKXtfX19mZXN0X2xvZ19lcnJvcihtc2crIlxu
aW4gYmxvY2sgXCIiK19fZmVzdF9kZWJ1Z19ibG9jaysiXCIgYXQgbGluZTogIitf
X2Zlc3RfZGVidWdfbGluZSsiXG5maWxlOiAiK19fZmVzdF9kZWJ1Z19maWxlKX1m
dW5jdGlvbiBfX2Zlc3RfcmVwbGFjZUhUTUwoY2hyKXtyZXR1cm4gX19mZXN0X2h0
bWxoYXNoW2Nocl19ZnVuY3Rpb24gX19mZXN0X3JlcGxhY2VKUyhjaHIpe3JldHVy
biBfX2Zlc3RfanNoYXNoW2Nocl19ZnVuY3Rpb24gX19mZXN0X2V4dGVuZChkZXN0
LCBzcmMpe2Zvcih2YXIgaSBpbiBzcmMpaWYoc3JjLmhhc093blByb3BlcnR5KGkp
KWRlc3RbaV09c3JjW2ldO31mdW5jdGlvbiBfX2Zlc3RfcGFyYW0oZm4pe2ZuLnBh
cmFtPXRydWU7cmV0dXJuIGZufWZ1bmN0aW9uIF9fZmVzdF9jYWxsKGZuLCBwYXJh
bXMsY3Ape2lmKGNwKWZvcih2YXIgaSBpbiBwYXJhbXMpaWYodHlwZW9mIHBhcmFt
c1tpXT09ImZ1bmN0aW9uIiYmcGFyYW1zW2ldLnBhcmFtKXBhcmFtc1tpXT1wYXJh
bXNbaV0oKTtyZXR1cm4gZm4uY2FsbChfX2Zlc3Rfc2VsZixwYXJhbXMpfWZ1bmN0
aW9uIF9fZmVzdF9lc2NhcGVKUyhzKXtpZiAodHlwZW9mIHM9PT0ic3RyaW5nIikg
e2lmIChfX2Zlc3RfanNjaGFyc190ZXN0LnRlc3QocykpcmV0dXJuIHMucmVwbGFj
ZShfX2Zlc3RfanNjaGFycyxfX2Zlc3RfcmVwbGFjZUpTKTt9IGVsc2UgaWYgKHR5
cGVvZiBzPT09InVuZGVmaW5lZCIpcmV0dXJuICIiO3JldHVybiBzO31mdW5jdGlv
biBfX2Zlc3RfZXNjYXBlSFRNTChzKXtpZiAodHlwZW9mIHM9PT0ic3RyaW5nIikg
e2lmIChfX2Zlc3RfaHRtbGNoYXJzX3Rlc3QudGVzdChzKSlyZXR1cm4gcy5yZXBs
YWNlKF9fZmVzdF9odG1sY2hhcnMsX19mZXN0X3JlcGxhY2VIVE1MKTt9IGVsc2Ug
aWYgKHR5cGVvZiBzPT09InVuZGVmaW5lZCIpcmV0dXJuICIiO3JldHVybiBzO312
YXIganNvbj1fX2Zlc3RfY29udGV4dDsoZnVuY3Rpb24oX19mZXN0X2NvbnRleHQp
e19fZmVzdF9ibG9ja3MuYXR0YWNoZXNfX2FyY2hpdmU9ZnVuY3Rpb24ocGFyYW1z
KXt2YXIgX19mZXN0X2J1Zj1bXTtfX2Zlc3RfYnVmLnB1c2goIjxkaXYgY2xhc3M9
XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXIgYXR0YWNodmlld2VyX190b29sYmFyX3Rv
cFwiPiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0X2VzY2FwZUhUTUwocGFy
YW1zLm1haWwuSWQpfWNhdGNoKGUpe19fZmVzdF9hdHRyc1swXT0iIjsgX19mZXN0
X2xvZ19lcnJvcihlLm1lc3NhZ2UpO31fX2Zlc3RfYnVmLnB1c2goIjxhIGNsYXNz
PVwiYXR0YWNodmlld2VyX190b29sYmFyX19zdWJqZWN0XCIgaHJlZj1cIlwvbWVz
c2FnZVwvIiArIF9fZmVzdF9hdHRyc1swXSArICJcL1wiIHRhcmdldD1cIl9ibGFu
a1wiPjxzcGFuIGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX19zdWJqZWN0
X19saW5rXCI+Iik7dHJ5e19fZmVzdF9idWYucHVzaChfX2Zlc3RfZXNjYXBlSFRN
TChwYXJhbXMubWFpbC5Gcm9tTmFtZSkpfWNhdGNoKGUpe19fZmVzdF9sb2dfZXJy
b3IoZS5tZXNzYWdlICsgIjYiKTt9X19mZXN0X2J1Zi5wdXNoKCI8L3NwYW4+PHNw
YW4gY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXJfX3N1YmplY3RfX3RleHRc
Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiKTt0cnl7X19mZXN0X2J1Zi5wdXNo
KF9fZmVzdF9lc2NhcGVIVE1MKHBhcmFtcy5tYWlsLlN1YmplY3QpKX1jYXRjaChl
KXtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSArICIxMCIpO31fX2Zlc3RfYnVm
LnB1c2goIjwvc3Bhbj48L2E+PC9kaXY+PGRpdiBjbGFzcz1cImF0dGFjaHZpZXdl
cl9fdmlld2VyIGF0dGFjaHZpZXdlcl9fdmlld2VyX2FyY2hpdmUgYXR0YWNodmll
d2VyX192aWV3ZXJfYXJjaGl2ZVwiPiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19m
ZXN0X2VzY2FwZUhUTUwocGFyYW1zLmZpbGUuaWNvblR5cGUpfWNhdGNoKGUpe19f
ZmVzdF9hdHRyc1swXT0iIjsgX19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UpO31f
X2Zlc3RfYnVmLnB1c2goIjxkaXYgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3ZpZXdl
cl9faWNvbiBhdHRhY2h2aWV3ZXJfX3ZpZXdlcl9faWNvbl8iICsgX19mZXN0X2F0
dHJzWzBdICsgIiBqcy1ldmVudC1hdHRhY2hWaWV3ZXJQcmV2aWV3RG93bmxvYWRD
bGljay5hdHRhY2hWaWV3ZXJcIj48L2Rpdj48ZGl2IGNsYXNzPVwiYXR0YWNodmll
d2VyX192aWV3ZXJfX2luZm9cIj48ZGl2IGNsYXNzPVwiYXR0YWNodmlld2VyX192
aWV3ZXJfX25hbWVcIj48c3BhbiBjbGFzcz1cImF0dGFjaHZpZXdlcl9fdmlld2Vy
X19uYW1lX19maWxlbmFtZVwiPiIpO3RyeXtfX2Zlc3RfYnVmLnB1c2goX19mZXN0
X2VzY2FwZUhUTUwocGFyYW1zLmZpbGUubmFtZS5yZXBsYWNlKC9cLlteLl0rJC8s
ICcnKSkpfWNhdGNoKGUpe19fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlICsgIjIx
Iik7fV9fZmVzdF9idWYucHVzaCgiPC9zcGFuPjxzcGFuIGNsYXNzPVwiYXR0YWNo
dmlld2VyX192aWV3ZXJfX25hbWVfX2ZpbGV0eXBlXCI+Iik7dHJ5e19fZmVzdF9i
dWYucHVzaChfX2Zlc3RfZXNjYXBlSFRNTChwYXJhbXMuZmlsZS5uYW1lLnJlcGxh
Y2UoLy4rPyhcLlteLl0rKSQvLCAnJDEnKSkpfWNhdGNoKGUpe19fZmVzdF9sb2df
ZXJyb3IoZS5tZXNzYWdlICsgIjI1Iik7fV9fZmVzdF9idWYucHVzaCgiPC9zcGFu
PjwvZGl2PjxkaXYgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3ZpZXdlcl9fc2l6ZVwi
PiIpO3RyeXtfX2Zlc3RfYnVmLnB1c2goX19mZXN0X2VzY2FwZUhUTUwoU3RyaW5n
LnNpemVGb3JtYXQocGFyYW1zLmZpbGUuc2l6ZSAqIDEwMjQpKSl9Y2F0Y2goZSl7
X19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UgKyAiMzAiKTt9X19mZXN0X2J1Zi5w
dXNoKCI8L2Rpdj48ZGl2PiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0X2Vz
Y2FwZUhUTUwocGFyYW1zLmZpbGUuZG93bmxvYWRVcmwpfWNhdGNoKGUpe19fZmVz
dF9hdHRyc1swXT0iIjsgX19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UpO31fX2Zl
c3RfYnVmLnB1c2goIjxhIGhyZWY9XCIiICsgX19mZXN0X2F0dHJzWzBdICsgIlwi
IGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX19saW5rIGpzLWV2ZW50LWF0
dGFjaFZpZXdlclByZXZpZXdEb3dubG9hZENsaWNrLmF0dGFjaFZpZXdlclwiPiIp
O3RyeXtfX2Zlc3RfaWY9bWFpbHJ1Lk5ld0F0dGFjaFZpZXdlclBvcHVwfWNhdGNo
KGUpe19fZmVzdF9pZj1mYWxzZTtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSk7
fWlmKF9fZmVzdF9pZil7X19mZXN0X2J1Zi5wdXNoKCI8c3BhbiBjbGFzcz1cImF0
dGFjaHZpZXdlcl9fdG9vbGJhcl9fdGV4dFwiPiIpO3RyeXtfX2Zlc3RfYnVmLnB1
c2goX19mZXN0X2VzY2FwZUhUTUwoanNvbi5sYW5nLmJsb2Nrcy5hdHRhY2hlcy5h
cmNoaXZlLmRvd25sb2FkKSl9Y2F0Y2goZSl7X19mZXN0X2xvZ19lcnJvcihlLm1l
c3NhZ2UgKyAiMzgiKTt9X19mZXN0X2J1Zi5wdXNoKCI8L3NwYW4+PGkgY2xhc3M9
XCJpY29uIGljb25fZm9sZGVycyBpY29uX2ZpbGVkb3dubG9hZFwiPjwvaT4iKTt9
ZWxzZXtfX2Zlc3RfYnVmLnB1c2goIjxpIGNsYXNzPVwiaWNvbiBpY29uX2F0dGFj
aHZpZXcgaWNvbl9hdHRhY2h2aWV3X2Rvd25sb2FkXCI+PC9pPiZuYnNwOzxzcGFu
IGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX190ZXh0XCI+Iik7dHJ5e19f
ZmVzdF9idWYucHVzaChfX2Zlc3RfZXNjYXBlSFRNTChqc29uLmxhbmcuYmxvY2tz
LmF0dGFjaGVzLmFyY2hpdmUuZG93bmxvYWQpKX1jYXRjaChlKXtfX2Zlc3RfbG9n
X2Vycm9yKGUubWVzc2FnZSArICI1MCIpO31fX2Zlc3RfYnVmLnB1c2goIjwvc3Bh
bj4iKTt9X19mZXN0X2J1Zi5wdXNoKCI8L2E+PC9kaXY+PGRpdj48c3BhbiBjbGFz
cz1cImF0dGFjaHZpZXdlcl9fdG9vbGJhcl9fbGluayBqcy1WaWV3U291cmNlIGF0
dGFjaHZpZXdlcl9fdmlld2VyX19zaG93LXNvdXJjZVwiPiIpO3RyeXtfX2Zlc3Rf
YnVmLnB1c2goX19mZXN0X2VzY2FwZUhUTUwoanNvbi5sYW5nLmJsb2Nrcy5hdHRh
Y2hlcy5hcmNoaXZlLnZpZXdfc291cmNlKSl9Y2F0Y2goZSl7X19mZXN0X2xvZ19l
cnJvcihlLm1lc3NhZ2UgKyAiNTkiKTt9X19mZXN0X2J1Zi5wdXNoKCIgPGkgY2xh
c3M9XCJpY29uIGljb25fbG9hZGVyXCI+PC9pPjwvc3Bhbj48L2Rpdj48L2Rpdj48
L2Rpdj48ZGl2IGNsYXNzPVwiYXR0YWNodmlld2VyX192aWV3ZXJfX2FyY2hpdmUt
ZmlsZXNcIj48L2Rpdj4iKTtyZXR1cm4gX19mZXN0X2J1Zi5qb2luKCIiKTt9O30p
KF9fZmVzdF9jb250ZXh0KTtfX2Zlc3Rfc2VsZWN0PSJhdHRhY2hlc19fYXJjaGl2
ZSI7X19mZXN0X3BhcmFtcz17fTt0cnl7X19mZXN0X3BhcmFtcz1qc29ufWNhdGNo
KGUpe19fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKX1fX2Zlc3RfY2h1bmtzLnB1
c2goX19mZXN0X2J1Zi5qb2luKCIiKSx7bmFtZTpfX2Zlc3Rfc2VsZWN0LHBhcmFt
czpfX2Zlc3RfcGFyYW1zLGNwOmZhbHNlfSk7X19mZXN0X2J1Zj1bXTtfX2Zlc3Rf
dG89X19mZXN0X2NodW5rcy5sZW5ndGg7aWYgKF9fZmVzdF90bykge19fZmVzdF9p
dGVyYXRvciA9IDA7Zm9yICg7X19mZXN0X2l0ZXJhdG9yPF9fZmVzdF90bztfX2Zl
c3RfaXRlcmF0b3IrKykge19fZmVzdF9jaHVuaz1fX2Zlc3RfY2h1bmtzW19fZmVz
dF9pdGVyYXRvcl07aWYgKHR5cGVvZiBfX2Zlc3RfY2h1bms9PT0ic3RyaW5nIikg
e19fZmVzdF9odG1sLnB1c2goX19mZXN0X2NodW5rKTt9IGVsc2Uge19fZmVzdF9m
bj1fX2Zlc3RfYmxvY2tzW19fZmVzdF9jaHVuay5uYW1lXTtpZiAoX19mZXN0X2Zu
KSBfX2Zlc3RfaHRtbC5wdXNoKF9fZmVzdF9jYWxsKF9fZmVzdF9mbixfX2Zlc3Rf
Y2h1bmsucGFyYW1zLCBfX2Zlc3RfY2h1bmsuY3ApKTt9fV9fZmVzdF9odG1sLnB1
c2goX19mZXN0X2J1Zi5qb2luKCIiKSk7cmV0dXJuIF9fZmVzdF9odG1sLmpvaW4o
IiIpfSBlbHNlIHtyZXR1cm4gX19mZXN0X2J1Zi5qb2luKCIiKTt9fTsgaWYoeC5q
c0xvYWRlciE9PXVuZGVmaW5lZCYmeC5qc0xvYWRlci5sb2FkZWQhPT11bmRlZmlu
ZWQmJnR5cGVvZiB4LmpzTG9hZGVyLmxvYWRlZD09PSdmdW5jdGlvbicpe3guanNM
b2FkZXIubG9hZGVkKCd7ZmVzdFRlbXBsYXRlfXBhZ2VzL2F0dGFjaHZpZXdlci9h
dHRhY2h2aWV3ZXJfX2FyY2hpdmUnLCAxKX07fSkoKTsKLy8gLi9kYXRhL3J1L2Zl
c3QvcGFnZXMvYXR0YWNodmlld2VyL2F0dGFjaHZpZXdlcl9fYXJjaGl2ZS5qcyBl
bmQKCi8vIC4vZGF0YS9ydS9mZXN0L3BhZ2VzL2F0dGFjaHZpZXdlci9hdHRhY2h2
aWV3ZXJfX2ltYWdlLmpzIHN0YXJ0Cgo7KGZ1bmN0aW9uKCl7dmFyIHg9RnVuY3Rp
b24oJ3JldHVybiB0aGlzJykoKTtpZigheC5mZXN0KXguZmVzdD17fTt4LmZlc3Rb
J3BhZ2VzL2F0dGFjaHZpZXdlci9hdHRhY2h2aWV3ZXJfX2ltYWdlJ109ZnVuY3Rp
b24gKF9fZmVzdF9jb250ZXh0KXsidXNlIHN0cmljdCI7dmFyIF9fZmVzdF9zZWxm
PXRoaXMsX19mZXN0X2J1Zj1bXSxfX2Zlc3RfY2h1bmtzPVtdLF9fZmVzdF9jaHVu
ayxfX2Zlc3RfYXR0cnM9W10sX19mZXN0X3NlbGVjdCxfX2Zlc3RfaWYsX19mZXN0
X2l0ZXJhdG9yLF9fZmVzdF90byxfX2Zlc3RfZm4sX19mZXN0X2h0bWw9W10sX19m
ZXN0X2Jsb2Nrcz17fSxfX2Zlc3RfcGFyYW1zLF9fZmVzdF9lbGVtZW50LF9fZmVz
dF9kZWJ1Z19maWxlPSIiLF9fZmVzdF9kZWJ1Z19saW5lPSIiLF9fZmVzdF9kZWJ1
Z19ibG9jaz0iIixfX2Zlc3RfaHRtbGNoYXJzPS9bJjw+Il0vZyxfX2Zlc3RfaHRt
bGNoYXJzX3Rlc3Q9L1smPD4iXS8sX19mZXN0X3Nob3J0X3RhZ3MgPSB7ImFyZWEi
OnRydWUsImJhc2UiOnRydWUsImJyIjp0cnVlLCJjb2wiOnRydWUsImNvbW1hbmQi
OnRydWUsImVtYmVkIjp0cnVlLCJociI6dHJ1ZSwiaW1nIjp0cnVlLCJpbnB1dCI6
dHJ1ZSwia2V5Z2VuIjp0cnVlLCJsaW5rIjp0cnVlLCJtZXRhIjp0cnVlLCJwYXJh
bSI6dHJ1ZSwic291cmNlIjp0cnVlLCJ3YnIiOnRydWV9LF9fZmVzdF9lbGVtZW50
X3N0YWNrID0gW10sX19mZXN0X2h0bWxoYXNoPXsiJiI6IiZhbXA7IiwiPCI6IiZs
dDsiLCI+IjoiJmd0OyIsIlwiIjoiJnF1b3Q7In0sX19mZXN0X2pzY2hhcnM9L1tc
XCciXC9cblxyXHRcYlxmPD5dL2csX19mZXN0X2pzY2hhcnNfdGVzdD0vW1xcJyJc
L1xuXHJcdFxiXGY8Pl0vLF9fZmVzdF9qc2hhc2g9eyJcIiI6IlxcXCIiLCJcXCI6
IlxcXFwiLCIvIjoiXFwvIiwiXG4iOiJcXG4iLCJcciI6IlxcciIsIlx0IjoiXFx0
IiwiXGIiOiJcXGIiLCJcZiI6IlxcZiIsIiciOiJcXCciLCI8IjoiXFx1MDAzQyIs
Ij4iOiJcXHUwMDNFIn0sX19fZmVzdF9sb2dfZXJyb3I7aWYodHlwZW9mIF9fZmVz
dF9lcnJvciA9PT0gInVuZGVmaW5lZCIpe19fX2Zlc3RfbG9nX2Vycm9yID0gKHR5
cGVvZiBjb25zb2xlICE9PSAidW5kZWZpbmVkIiAmJiBjb25zb2xlLmVycm9yKSA/
IGZ1bmN0aW9uKCl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxs
KGNvbnNvbGUuZXJyb3IsIGNvbnNvbGUsIGFyZ3VtZW50cyl9IDogZnVuY3Rpb24o
KXt9O31lbHNle19fX2Zlc3RfbG9nX2Vycm9yPV9fZmVzdF9lcnJvcn07ZnVuY3Rp
b24gX19mZXN0X2xvZ19lcnJvcihtc2cpe19fX2Zlc3RfbG9nX2Vycm9yKG1zZysi
XG5pbiBibG9jayBcIiIrX19mZXN0X2RlYnVnX2Jsb2NrKyJcIiBhdCBsaW5lOiAi
K19fZmVzdF9kZWJ1Z19saW5lKyJcbmZpbGU6ICIrX19mZXN0X2RlYnVnX2ZpbGUp
fWZ1bmN0aW9uIF9fZmVzdF9yZXBsYWNlSFRNTChjaHIpe3JldHVybiBfX2Zlc3Rf
aHRtbGhhc2hbY2hyXX1mdW5jdGlvbiBfX2Zlc3RfcmVwbGFjZUpTKGNocil7cmV0
dXJuIF9fZmVzdF9qc2hhc2hbY2hyXX1mdW5jdGlvbiBfX2Zlc3RfZXh0ZW5kKGRl
c3QsIHNyYyl7Zm9yKHZhciBpIGluIHNyYylpZihzcmMuaGFzT3duUHJvcGVydHko
aSkpZGVzdFtpXT1zcmNbaV07fWZ1bmN0aW9uIF9fZmVzdF9wYXJhbShmbil7Zm4u
cGFyYW09dHJ1ZTtyZXR1cm4gZm59ZnVuY3Rpb24gX19mZXN0X2NhbGwoZm4sIHBh
cmFtcyxjcCl7aWYoY3ApZm9yKHZhciBpIGluIHBhcmFtcylpZih0eXBlb2YgcGFy
YW1zW2ldPT0iZnVuY3Rpb24iJiZwYXJhbXNbaV0ucGFyYW0pcGFyYW1zW2ldPXBh
cmFtc1tpXSgpO3JldHVybiBmbi5jYWxsKF9fZmVzdF9zZWxmLHBhcmFtcyl9ZnVu
Y3Rpb24gX19mZXN0X2VzY2FwZUpTKHMpe2lmICh0eXBlb2Ygcz09PSJzdHJpbmci
KSB7aWYgKF9fZmVzdF9qc2NoYXJzX3Rlc3QudGVzdChzKSlyZXR1cm4gcy5yZXBs
YWNlKF9fZmVzdF9qc2NoYXJzLF9fZmVzdF9yZXBsYWNlSlMpO30gZWxzZSBpZiAo
dHlwZW9mIHM9PT0idW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0dXJuIHM7fWZ1bmN0
aW9uIF9fZmVzdF9lc2NhcGVIVE1MKHMpe2lmICh0eXBlb2Ygcz09PSJzdHJpbmci
KSB7aWYgKF9fZmVzdF9odG1sY2hhcnNfdGVzdC50ZXN0KHMpKXJldHVybiBzLnJl
cGxhY2UoX19mZXN0X2h0bWxjaGFycyxfX2Zlc3RfcmVwbGFjZUhUTUwpO30gZWxz
ZSBpZiAodHlwZW9mIHM9PT0idW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0dXJuIHM7
fXZhciBqc29uPV9fZmVzdF9jb250ZXh0OyhmdW5jdGlvbihfX2Zlc3RfY29udGV4
dCl7X19mZXN0X2Jsb2Nrcy5hdHRhY2hlc19faW1hZ2U9ZnVuY3Rpb24ocGFyYW1z
KXt2YXIgX19mZXN0X2J1Zj1bXTtfX2Zlc3RfYnVmLnB1c2goIjxkaXYgY2xhc3M9
XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXIgYXR0YWNodmlld2VyX190b29sYmFyX3Rv
cFwiPiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0X2VzY2FwZUhUTUwocGFy
YW1zLm1haWwuSWQpfWNhdGNoKGUpe19fZmVzdF9hdHRyc1swXT0iIjsgX19mZXN0
X2xvZ19lcnJvcihlLm1lc3NhZ2UpO31fX2Zlc3RfYnVmLnB1c2goIjxhIGNsYXNz
PVwiYXR0YWNodmlld2VyX190b29sYmFyX19zdWJqZWN0XCIgaHJlZj1cIlwvbWVz
c2FnZVwvIiArIF9fZmVzdF9hdHRyc1swXSArICJcL1wiIHRhcmdldD1cIl9ibGFu
a1wiPjxzcGFuIGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX19zdWJqZWN0
X19saW5rXCI+Iik7dHJ5e19fZmVzdF9idWYucHVzaChfX2Zlc3RfZXNjYXBlSFRN
TChwYXJhbXMubWFpbC5Gcm9tTmFtZSkpfWNhdGNoKGUpe19fZmVzdF9sb2dfZXJy
b3IoZS5tZXNzYWdlICsgIjYiKTt9X19mZXN0X2J1Zi5wdXNoKCI8L3NwYW4+PHNw
YW4gY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXJfX3N1YmplY3RfX3RleHRc
Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiKTt0cnl7X19mZXN0X2J1Zi5wdXNo
KF9fZmVzdF9lc2NhcGVIVE1MKHBhcmFtcy5tYWlsLlN1YmplY3QpKX1jYXRjaChl
KXtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSArICIxMCIpO31fX2Zlc3RfYnVm
LnB1c2goIjwvc3Bhbj48L2E+PC9kaXY+PGRpdiBjbGFzcz1cImF0dGFjaHZpZXdl
cl9faW5uZXJfX3Njcm9sbFwiPjxkaXYgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3Zp
ZXdlciBhdHRhY2h2aWV3ZXJfX3ZpZXdlcl9pbWFnZVwiPiIpO3RyeXtfX2Zlc3Rf
aWY9cGFyYW1zLmZpbGUuaW1hZ2VVcmx9Y2F0Y2goZSl7X19mZXN0X2lmPWZhbHNl
O19fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9aWYoX19mZXN0X2lmKXtfX2Zl
c3RfYnVmLnB1c2goIjxkaXYgY2xhc3M9XCJ3LWF0dGFjaHZpZXdlcl9fdmlld2Vy
X19pbWFnZVwiPiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0X2VzY2FwZUhU
TUwocGFyYW1zLmZpbGUuaW1hZ2VVcmwpfWNhdGNoKGUpe19fZmVzdF9hdHRyc1sw
XT0iIjsgX19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UpO31fX2Zlc3RfYnVmLnB1
c2goIjxpbWcgc3JjPVwiIiArIF9fZmVzdF9hdHRyc1swXSArICJcIiBjbGFzcz1c
ImF0dGFjaHZpZXdlcl9fdmlld2VyX19pbWFnZVwiLz48L2Rpdj4iKTt9X19mZXN0
X2J1Zi5wdXNoKCI8L2Rpdj48L2Rpdj4iKTtyZXR1cm4gX19mZXN0X2J1Zi5qb2lu
KCIiKTt9O30pKF9fZmVzdF9jb250ZXh0KTtfX2Zlc3Rfc2VsZWN0PSJhdHRhY2hl
c19faW1hZ2UiO19fZmVzdF9wYXJhbXM9e307dHJ5e19fZmVzdF9wYXJhbXM9anNv
bn1jYXRjaChlKXtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSl9X19mZXN0X2No
dW5rcy5wdXNoKF9fZmVzdF9idWYuam9pbigiIikse25hbWU6X19mZXN0X3NlbGVj
dCxwYXJhbXM6X19mZXN0X3BhcmFtcyxjcDpmYWxzZX0pO19fZmVzdF9idWY9W107
X19mZXN0X3RvPV9fZmVzdF9jaHVua3MubGVuZ3RoO2lmIChfX2Zlc3RfdG8pIHtf
X2Zlc3RfaXRlcmF0b3IgPSAwO2ZvciAoO19fZmVzdF9pdGVyYXRvcjxfX2Zlc3Rf
dG87X19mZXN0X2l0ZXJhdG9yKyspIHtfX2Zlc3RfY2h1bms9X19mZXN0X2NodW5r
c1tfX2Zlc3RfaXRlcmF0b3JdO2lmICh0eXBlb2YgX19mZXN0X2NodW5rPT09InN0
cmluZyIpIHtfX2Zlc3RfaHRtbC5wdXNoKF9fZmVzdF9jaHVuayk7fSBlbHNlIHtf
X2Zlc3RfZm49X19mZXN0X2Jsb2Nrc1tfX2Zlc3RfY2h1bmsubmFtZV07aWYgKF9f
ZmVzdF9mbikgX19mZXN0X2h0bWwucHVzaChfX2Zlc3RfY2FsbChfX2Zlc3RfZm4s
X19mZXN0X2NodW5rLnBhcmFtcywgX19mZXN0X2NodW5rLmNwKSk7fX1fX2Zlc3Rf
aHRtbC5wdXNoKF9fZmVzdF9idWYuam9pbigiIikpO3JldHVybiBfX2Zlc3RfaHRt
bC5qb2luKCIiKX0gZWxzZSB7cmV0dXJuIF9fZmVzdF9idWYuam9pbigiIik7fX07
IGlmKHguanNMb2FkZXIhPT11bmRlZmluZWQmJnguanNMb2FkZXIubG9hZGVkIT09
dW5kZWZpbmVkJiZ0eXBlb2YgeC5qc0xvYWRlci5sb2FkZWQ9PT0nZnVuY3Rpb24n
KXt4LmpzTG9hZGVyLmxvYWRlZCgne2Zlc3RUZW1wbGF0ZX1wYWdlcy9hdHRhY2h2
aWV3ZXIvYXR0YWNodmlld2VyX19pbWFnZScsIDEpfTt9KSgpOwovLyAuL2RhdGEv
cnUvZmVzdC9wYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmlld2VyX19pbWFnZS5q
cyBlbmQKCi8vIC4vZGF0YS9ydS9mZXN0L3BhZ2VzL2F0dGFjaHZpZXdlci9hdHRh
Y2h2aWV3ZXJfX01TRG9jLmpzIHN0YXJ0Cgo7KGZ1bmN0aW9uKCl7dmFyIHg9RnVu
Y3Rpb24oJ3JldHVybiB0aGlzJykoKTtpZigheC5mZXN0KXguZmVzdD17fTt4LmZl
c3RbJ3BhZ2VzL2F0dGFjaHZpZXdlci9hdHRhY2h2aWV3ZXJfX01TRG9jJ109ZnVu
Y3Rpb24gKF9fZmVzdF9jb250ZXh0KXsidXNlIHN0cmljdCI7dmFyIF9fZmVzdF9z
ZWxmPXRoaXMsX19mZXN0X2J1Zj1bXSxfX2Zlc3RfY2h1bmtzPVtdLF9fZmVzdF9j
aHVuayxfX2Zlc3RfYXR0cnM9W10sX19mZXN0X3NlbGVjdCxfX2Zlc3RfaWYsX19m
ZXN0X2l0ZXJhdG9yLF9fZmVzdF90byxfX2Zlc3RfZm4sX19mZXN0X2h0bWw9W10s
X19mZXN0X2Jsb2Nrcz17fSxfX2Zlc3RfcGFyYW1zLF9fZmVzdF9lbGVtZW50LF9f
ZmVzdF9kZWJ1Z19maWxlPSIiLF9fZmVzdF9kZWJ1Z19saW5lPSIiLF9fZmVzdF9k
ZWJ1Z19ibG9jaz0iIixfX2Zlc3RfaHRtbGNoYXJzPS9bJjw+Il0vZyxfX2Zlc3Rf
aHRtbGNoYXJzX3Rlc3Q9L1smPD4iXS8sX19mZXN0X3Nob3J0X3RhZ3MgPSB7ImFy
ZWEiOnRydWUsImJhc2UiOnRydWUsImJyIjp0cnVlLCJjb2wiOnRydWUsImNvbW1h
bmQiOnRydWUsImVtYmVkIjp0cnVlLCJociI6dHJ1ZSwiaW1nIjp0cnVlLCJpbnB1
dCI6dHJ1ZSwia2V5Z2VuIjp0cnVlLCJsaW5rIjp0cnVlLCJtZXRhIjp0cnVlLCJw
YXJhbSI6dHJ1ZSwic291cmNlIjp0cnVlLCJ3YnIiOnRydWV9LF9fZmVzdF9lbGVt
ZW50X3N0YWNrID0gW10sX19mZXN0X2h0bWxoYXNoPXsiJiI6IiZhbXA7IiwiPCI6
IiZsdDsiLCI+IjoiJmd0OyIsIlwiIjoiJnF1b3Q7In0sX19mZXN0X2pzY2hhcnM9
L1tcXCciXC9cblxyXHRcYlxmPD5dL2csX19mZXN0X2pzY2hhcnNfdGVzdD0vW1xc
JyJcL1xuXHJcdFxiXGY8Pl0vLF9fZmVzdF9qc2hhc2g9eyJcIiI6IlxcXCIiLCJc
XCI6IlxcXFwiLCIvIjoiXFwvIiwiXG4iOiJcXG4iLCJcciI6IlxcciIsIlx0Ijoi
XFx0IiwiXGIiOiJcXGIiLCJcZiI6IlxcZiIsIiciOiJcXCciLCI8IjoiXFx1MDAz
QyIsIj4iOiJcXHUwMDNFIn0sX19fZmVzdF9sb2dfZXJyb3I7aWYodHlwZW9mIF9f
ZmVzdF9lcnJvciA9PT0gInVuZGVmaW5lZCIpe19fX2Zlc3RfbG9nX2Vycm9yID0g
KHR5cGVvZiBjb25zb2xlICE9PSAidW5kZWZpbmVkIiAmJiBjb25zb2xlLmVycm9y
KSA/IGZ1bmN0aW9uKCl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5j
YWxsKGNvbnNvbGUuZXJyb3IsIGNvbnNvbGUsIGFyZ3VtZW50cyl9IDogZnVuY3Rp
b24oKXt9O31lbHNle19fX2Zlc3RfbG9nX2Vycm9yPV9fZmVzdF9lcnJvcn07ZnVu
Y3Rpb24gX19mZXN0X2xvZ19lcnJvcihtc2cpe19fX2Zlc3RfbG9nX2Vycm9yKG1z
ZysiXG5pbiBibG9jayBcIiIrX19mZXN0X2RlYnVnX2Jsb2NrKyJcIiBhdCBsaW5l
OiAiK19fZmVzdF9kZWJ1Z19saW5lKyJcbmZpbGU6ICIrX19mZXN0X2RlYnVnX2Zp
bGUpfWZ1bmN0aW9uIF9fZmVzdF9yZXBsYWNlSFRNTChjaHIpe3JldHVybiBfX2Zl
c3RfaHRtbGhhc2hbY2hyXX1mdW5jdGlvbiBfX2Zlc3RfcmVwbGFjZUpTKGNocil7
cmV0dXJuIF9fZmVzdF9qc2hhc2hbY2hyXX1mdW5jdGlvbiBfX2Zlc3RfZXh0ZW5k
KGRlc3QsIHNyYyl7Zm9yKHZhciBpIGluIHNyYylpZihzcmMuaGFzT3duUHJvcGVy
dHkoaSkpZGVzdFtpXT1zcmNbaV07fWZ1bmN0aW9uIF9fZmVzdF9wYXJhbShmbil7
Zm4ucGFyYW09dHJ1ZTtyZXR1cm4gZm59ZnVuY3Rpb24gX19mZXN0X2NhbGwoZm4s
IHBhcmFtcyxjcCl7aWYoY3ApZm9yKHZhciBpIGluIHBhcmFtcylpZih0eXBlb2Yg
cGFyYW1zW2ldPT0iZnVuY3Rpb24iJiZwYXJhbXNbaV0ucGFyYW0pcGFyYW1zW2ld
PXBhcmFtc1tpXSgpO3JldHVybiBmbi5jYWxsKF9fZmVzdF9zZWxmLHBhcmFtcyl9
ZnVuY3Rpb24gX19mZXN0X2VzY2FwZUpTKHMpe2lmICh0eXBlb2Ygcz09PSJzdHJp
bmciKSB7aWYgKF9fZmVzdF9qc2NoYXJzX3Rlc3QudGVzdChzKSlyZXR1cm4gcy5y
ZXBsYWNlKF9fZmVzdF9qc2NoYXJzLF9fZmVzdF9yZXBsYWNlSlMpO30gZWxzZSBp
ZiAodHlwZW9mIHM9PT0idW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0dXJuIHM7fWZ1
bmN0aW9uIF9fZmVzdF9lc2NhcGVIVE1MKHMpe2lmICh0eXBlb2Ygcz09PSJzdHJp
bmciKSB7aWYgKF9fZmVzdF9odG1sY2hhcnNfdGVzdC50ZXN0KHMpKXJldHVybiBz
LnJlcGxhY2UoX19mZXN0X2h0bWxjaGFycyxfX2Zlc3RfcmVwbGFjZUhUTUwpO30g
ZWxzZSBpZiAodHlwZW9mIHM9PT0idW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0dXJu
IHM7fXZhciBqc29uPV9fZmVzdF9jb250ZXh0OyhmdW5jdGlvbihfX2Zlc3RfY29u
dGV4dCl7X19mZXN0X2Jsb2Nrcy5hdHRhY2hlc19fTVNEb2M9ZnVuY3Rpb24ocGFy
YW1zKXt2YXIgX19mZXN0X2J1Zj1bXTtfX2Zlc3RfYnVmLnB1c2goIjxkaXYgY2xh
c3M9XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXIgYXR0YWNodmlld2VyX190b29sYmFy
X3RvcFwiPiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0X2VzY2FwZUhUTUwo
cGFyYW1zLm1haWwuSWQpfWNhdGNoKGUpe19fZmVzdF9hdHRyc1swXT0iIjsgX19m
ZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UpO31fX2Zlc3RfYnVmLnB1c2goIjxhIGNs
YXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX19zdWJqZWN0XCIgaHJlZj1cIlwv
bWVzc2FnZVwvIiArIF9fZmVzdF9hdHRyc1swXSArICJcL1wiIHRhcmdldD1cIl9i
bGFua1wiPjxzcGFuIGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX19zdWJq
ZWN0X19saW5rXCI+Iik7dHJ5e19fZmVzdF9idWYucHVzaChfX2Zlc3RfZXNjYXBl
SFRNTChwYXJhbXMubWFpbC5Gcm9tTmFtZSkpfWNhdGNoKGUpe19fZmVzdF9sb2df
ZXJyb3IoZS5tZXNzYWdlICsgIjYiKTt9X19mZXN0X2J1Zi5wdXNoKCI8L3NwYW4+
PHNwYW4gY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXJfX3N1YmplY3RfX3Rl
eHRcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiKTt0cnl7X19mZXN0X2J1Zi5w
dXNoKF9fZmVzdF9lc2NhcGVIVE1MKHBhcmFtcy5tYWlsLlN1YmplY3QpKX1jYXRj
aChlKXtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSArICIxMCIpO31fX2Zlc3Rf
YnVmLnB1c2goIjwvc3Bhbj48L2E+PC9kaXY+PGRpdiBjbGFzcz1cImF0dGFjaHZp
ZXdlcl9fdmlld2VyIGF0dGFjaHZpZXdlcl9fdmlld2VyX21zZG9jXCI+PGRpdiBj
bGFzcz1cImF0dGFjaHZpZXdlcl9fdmlld2VyX193cmFwXCI+Iik7dHJ5e19fZmVz
dF9hdHRyc1swXT1fX2Zlc3RfZXNjYXBlSFRNTChwYXJhbXMucHJldmlld01TVlVy
bCl9Y2F0Y2goZSl7X19mZXN0X2F0dHJzWzBdPSIiOyBfX2Zlc3RfbG9nX2Vycm9y
KGUubWVzc2FnZSk7fV9fZmVzdF9idWYucHVzaCgiPGlmcmFtZSBzcmM9XCIiICsg
X19mZXN0X2F0dHJzWzBdICsgIlwiIGZyYW1lYm9yZGVyPVwiMFwiIHN0eWxlPVwi
d2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIj48L2lmcmFtZT48L2Rpdj48L2Rp
dj4iKTtyZXR1cm4gX19mZXN0X2J1Zi5qb2luKCIiKTt9O30pKF9fZmVzdF9jb250
ZXh0KTtfX2Zlc3Rfc2VsZWN0PSJhdHRhY2hlc19fTVNEb2MiO19fZmVzdF9wYXJh
bXM9e307dHJ5e19fZmVzdF9wYXJhbXM9anNvbn1jYXRjaChlKXtfX2Zlc3RfbG9n
X2Vycm9yKGUubWVzc2FnZSl9X19mZXN0X2NodW5rcy5wdXNoKF9fZmVzdF9idWYu
am9pbigiIikse25hbWU6X19mZXN0X3NlbGVjdCxwYXJhbXM6X19mZXN0X3BhcmFt
cyxjcDpmYWxzZX0pO19fZmVzdF9idWY9W107X19mZXN0X3RvPV9fZmVzdF9jaHVu
a3MubGVuZ3RoO2lmIChfX2Zlc3RfdG8pIHtfX2Zlc3RfaXRlcmF0b3IgPSAwO2Zv
ciAoO19fZmVzdF9pdGVyYXRvcjxfX2Zlc3RfdG87X19mZXN0X2l0ZXJhdG9yKysp
IHtfX2Zlc3RfY2h1bms9X19mZXN0X2NodW5rc1tfX2Zlc3RfaXRlcmF0b3JdO2lm
ICh0eXBlb2YgX19mZXN0X2NodW5rPT09InN0cmluZyIpIHtfX2Zlc3RfaHRtbC5w
dXNoKF9fZmVzdF9jaHVuayk7fSBlbHNlIHtfX2Zlc3RfZm49X19mZXN0X2Jsb2Nr
c1tfX2Zlc3RfY2h1bmsubmFtZV07aWYgKF9fZmVzdF9mbikgX19mZXN0X2h0bWwu
cHVzaChfX2Zlc3RfY2FsbChfX2Zlc3RfZm4sX19mZXN0X2NodW5rLnBhcmFtcywg
X19mZXN0X2NodW5rLmNwKSk7fX1fX2Zlc3RfaHRtbC5wdXNoKF9fZmVzdF9idWYu
am9pbigiIikpO3JldHVybiBfX2Zlc3RfaHRtbC5qb2luKCIiKX0gZWxzZSB7cmV0
dXJuIF9fZmVzdF9idWYuam9pbigiIik7fX07IGlmKHguanNMb2FkZXIhPT11bmRl
ZmluZWQmJnguanNMb2FkZXIubG9hZGVkIT09dW5kZWZpbmVkJiZ0eXBlb2YgeC5q
c0xvYWRlci5sb2FkZWQ9PT0nZnVuY3Rpb24nKXt4LmpzTG9hZGVyLmxvYWRlZCgn
e2Zlc3RUZW1wbGF0ZX1wYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmlld2VyX19N
U0RvYycsIDEpfTt9KSgpOwovLyAuL2RhdGEvcnUvZmVzdC9wYWdlcy9hdHRhY2h2
aWV3ZXIvYXR0YWNodmlld2VyX19NU0RvYy5qcyBlbmQKCi8vIC4vZGF0YS9ydS9m
ZXN0L3BhZ2VzL2F0dGFjaHZpZXdlci9hdHRhY2h2aWV3ZXJfX290aGVyLmpzIHN0
YXJ0Cgo7KGZ1bmN0aW9uKCl7dmFyIHg9RnVuY3Rpb24oJ3JldHVybiB0aGlzJyko
KTtpZigheC5mZXN0KXguZmVzdD17fTt4LmZlc3RbJ3BhZ2VzL2F0dGFjaHZpZXdl
ci9hdHRhY2h2aWV3ZXJfX290aGVyJ109ZnVuY3Rpb24gKF9fZmVzdF9jb250ZXh0
KXsidXNlIHN0cmljdCI7dmFyIF9fZmVzdF9zZWxmPXRoaXMsX19mZXN0X2J1Zj1b
XSxfX2Zlc3RfY2h1bmtzPVtdLF9fZmVzdF9jaHVuayxfX2Zlc3RfYXR0cnM9W10s
X19mZXN0X3NlbGVjdCxfX2Zlc3RfaWYsX19mZXN0X2l0ZXJhdG9yLF9fZmVzdF90
byxfX2Zlc3RfZm4sX19mZXN0X2h0bWw9W10sX19mZXN0X2Jsb2Nrcz17fSxfX2Zl
c3RfcGFyYW1zLF9fZmVzdF9lbGVtZW50LF9fZmVzdF9kZWJ1Z19maWxlPSIiLF9f
ZmVzdF9kZWJ1Z19saW5lPSIiLF9fZmVzdF9kZWJ1Z19ibG9jaz0iIixfX2Zlc3Rf
aHRtbGNoYXJzPS9bJjw+Il0vZyxfX2Zlc3RfaHRtbGNoYXJzX3Rlc3Q9L1smPD4i
XS8sX19mZXN0X3Nob3J0X3RhZ3MgPSB7ImFyZWEiOnRydWUsImJhc2UiOnRydWUs
ImJyIjp0cnVlLCJjb2wiOnRydWUsImNvbW1hbmQiOnRydWUsImVtYmVkIjp0cnVl
LCJociI6dHJ1ZSwiaW1nIjp0cnVlLCJpbnB1dCI6dHJ1ZSwia2V5Z2VuIjp0cnVl
LCJsaW5rIjp0cnVlLCJtZXRhIjp0cnVlLCJwYXJhbSI6dHJ1ZSwic291cmNlIjp0
cnVlLCJ3YnIiOnRydWV9LF9fZmVzdF9lbGVtZW50X3N0YWNrID0gW10sX19mZXN0
X2h0bWxoYXNoPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsIlwi
IjoiJnF1b3Q7In0sX19mZXN0X2pzY2hhcnM9L1tcXCciXC9cblxyXHRcYlxmPD5d
L2csX19mZXN0X2pzY2hhcnNfdGVzdD0vW1xcJyJcL1xuXHJcdFxiXGY8Pl0vLF9f
ZmVzdF9qc2hhc2g9eyJcIiI6IlxcXCIiLCJcXCI6IlxcXFwiLCIvIjoiXFwvIiwi
XG4iOiJcXG4iLCJcciI6IlxcciIsIlx0IjoiXFx0IiwiXGIiOiJcXGIiLCJcZiI6
IlxcZiIsIiciOiJcXCciLCI8IjoiXFx1MDAzQyIsIj4iOiJcXHUwMDNFIn0sX19f
ZmVzdF9sb2dfZXJyb3I7aWYodHlwZW9mIF9fZmVzdF9lcnJvciA9PT0gInVuZGVm
aW5lZCIpe19fX2Zlc3RfbG9nX2Vycm9yID0gKHR5cGVvZiBjb25zb2xlICE9PSAi
dW5kZWZpbmVkIiAmJiBjb25zb2xlLmVycm9yKSA/IGZ1bmN0aW9uKCl7cmV0dXJu
IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGUuZXJyb3IsIGNv
bnNvbGUsIGFyZ3VtZW50cyl9IDogZnVuY3Rpb24oKXt9O31lbHNle19fX2Zlc3Rf
bG9nX2Vycm9yPV9fZmVzdF9lcnJvcn07ZnVuY3Rpb24gX19mZXN0X2xvZ19lcnJv
cihtc2cpe19fX2Zlc3RfbG9nX2Vycm9yKG1zZysiXG5pbiBibG9jayBcIiIrX19m
ZXN0X2RlYnVnX2Jsb2NrKyJcIiBhdCBsaW5lOiAiK19fZmVzdF9kZWJ1Z19saW5l
KyJcbmZpbGU6ICIrX19mZXN0X2RlYnVnX2ZpbGUpfWZ1bmN0aW9uIF9fZmVzdF9y
ZXBsYWNlSFRNTChjaHIpe3JldHVybiBfX2Zlc3RfaHRtbGhhc2hbY2hyXX1mdW5j
dGlvbiBfX2Zlc3RfcmVwbGFjZUpTKGNocil7cmV0dXJuIF9fZmVzdF9qc2hhc2hb
Y2hyXX1mdW5jdGlvbiBfX2Zlc3RfZXh0ZW5kKGRlc3QsIHNyYyl7Zm9yKHZhciBp
IGluIHNyYylpZihzcmMuaGFzT3duUHJvcGVydHkoaSkpZGVzdFtpXT1zcmNbaV07
fWZ1bmN0aW9uIF9fZmVzdF9wYXJhbShmbil7Zm4ucGFyYW09dHJ1ZTtyZXR1cm4g
Zm59ZnVuY3Rpb24gX19mZXN0X2NhbGwoZm4sIHBhcmFtcyxjcCl7aWYoY3ApZm9y
KHZhciBpIGluIHBhcmFtcylpZih0eXBlb2YgcGFyYW1zW2ldPT0iZnVuY3Rpb24i
JiZwYXJhbXNbaV0ucGFyYW0pcGFyYW1zW2ldPXBhcmFtc1tpXSgpO3JldHVybiBm
bi5jYWxsKF9fZmVzdF9zZWxmLHBhcmFtcyl9ZnVuY3Rpb24gX19mZXN0X2VzY2Fw
ZUpTKHMpe2lmICh0eXBlb2Ygcz09PSJzdHJpbmciKSB7aWYgKF9fZmVzdF9qc2No
YXJzX3Rlc3QudGVzdChzKSlyZXR1cm4gcy5yZXBsYWNlKF9fZmVzdF9qc2NoYXJz
LF9fZmVzdF9yZXBsYWNlSlMpO30gZWxzZSBpZiAodHlwZW9mIHM9PT0idW5kZWZp
bmVkIilyZXR1cm4gIiI7cmV0dXJuIHM7fWZ1bmN0aW9uIF9fZmVzdF9lc2NhcGVI
VE1MKHMpe2lmICh0eXBlb2Ygcz09PSJzdHJpbmciKSB7aWYgKF9fZmVzdF9odG1s
Y2hhcnNfdGVzdC50ZXN0KHMpKXJldHVybiBzLnJlcGxhY2UoX19mZXN0X2h0bWxj
aGFycyxfX2Zlc3RfcmVwbGFjZUhUTUwpO30gZWxzZSBpZiAodHlwZW9mIHM9PT0i
dW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0dXJuIHM7fXZhciBqc29uPV9fZmVzdF9j
b250ZXh0OyhmdW5jdGlvbihfX2Zlc3RfY29udGV4dCl7KGZ1bmN0aW9uKF9fZmVz
dF9jb250ZXh0KXtfX2Zlc3RfYmxvY2tzLnBsYXllcj1mdW5jdGlvbihwYXJhbXMp
e3ZhciBfX2Zlc3RfYnVmPVtdO19fZmVzdF9idWYucHVzaCgiPGRpdiBjbGFzcz1c
InBsYXllciBqcy1wbGF5ZXJcIj48YSBjbGFzcz1cInBsYXllcl9faWNvbiBpY29u
X3BsYXllciBpY29uX3BsYXllcl9wbGF5IGpzLXBsYXlcIiBvbmNsaWNrPVwicmV0
dXJuIGZhbHNlO1wiPjwvYT4gPGRpdiBjbGFzcz1cInBsYXllcl9fcGxheWJhY2sg
anMtcGxheWJhY2tcIj48c3BhbiBjbGFzcz1cImpzLXRpbWVcIj4wMDowMDwvc3Bh
bj4gPGRpdiBjbGFzcz1cInBsYXllcl9fdHJhY2tiYXIganMtdHJhY2tiYXJcIj48
ZGl2IGNsYXNzPVwicGxheWVyX190cmFja2Jhcl9fYnVmZmVyIGpzLXRyYWNrYmFy
LXByb2dyZXNzXCIgc3R5bGU9XCJ3aWR0aDowXCI+PC9kaXY+PGRpdiBjbGFzcz1c
InBsYXllcl9fdHJhY2tiYXJfX2RlZmF1bHRcIj48L2Rpdj48ZGl2IGNsYXNzPVwi
cGxheWVyX190cmFja2Jhcl9fcHJvZ3Jlc3MganMtdHJhY2tiYXItcG9zaXRpb25c
IiBzdHlsZT1cIndpZHRoOjBcIj48L2Rpdj48ZGl2IGNsYXNzPVwicGxheWVyX190
cmFja2Jhcl9faGFuZGxlIGpzLWhhbmRsZVwiIHN0eWxlPVwibGVmdDotNXB4OyBk
aXNwbGF5Om5vbmU7XCI+PGRpdiBjbGFzcz1cInBsYXllcl9fdHJhY2tiYXJfX2hh
bmRsZV9pbm5lclwiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJwbGF5ZXJfX3Rv
b2x0aXAganMtdG9vbHRpcFwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvZGl2
PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPVwicGxheWVyX192b2x1bWUganMtdm9s
dW1lXCI+PGEgY2xhc3M9XCJwbGF5ZXJfX2ljb25fdm9sdW1lIGljb25fcGxheWVy
IGljb25fcGxheWVyX3ZvbHVtZSBqcy1tdXRlXCI+PC9hPiA8ZGl2IGNsYXNzPVwi
cGxheWVyX190cmFja2JhciBwbGF5ZXJfX3RyYWNrYmFyX3ZvbHVtZSBqcy12b2x1
bWViYXJcIj48ZGl2IGNsYXNzPVwicGxheWVyX190cmFja2Jhcl9fZGVmYXVsdFwi
PjwvZGl2PjxkaXYgY2xhc3M9XCJwbGF5ZXJfX3RyYWNrYmFyX19pbmFjdGl2ZSBq
cy12b2x1bWUtbGV2ZWxcIiBzdHlsZT1cIndpZHRoOjBcIj48L2Rpdj48ZGl2IGNs
YXNzPVwicGxheWVyX190cmFja2Jhcl9fYWN0aXZlIGpzLXZvbHVtZS1sZXZlbCBq
cy12b2x1bWUtYWN0aXZlXCIgc3R5bGU9XCJ3aWR0aDowOyBkaXNwbGF5Om5vbmVc
Ij48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4iKTtyZXR1cm4gX19mZXN0X2J1Zi5q
b2luKCIiKTt9O30pKF9fZmVzdF9jb250ZXh0KTtfX2Zlc3RfYmxvY2tzLmF0dGFj
aGVzX19vdGhlcj1mdW5jdGlvbihwYXJhbXMpe3ZhciBfX2Zlc3RfYnVmPVtdO19f
ZmVzdF9idWYucHVzaCgiPGRpdiBjbGFzcz1cImF0dGFjaHZpZXdlcl9fdG9vbGJh
ciBhdHRhY2h2aWV3ZXJfX3Rvb2xiYXJfdG9wXCI+Iik7dHJ5e19fZmVzdF9hdHRy
c1swXT1fX2Zlc3RfZXNjYXBlSFRNTChwYXJhbXMubWFpbC5JZCl9Y2F0Y2goZSl7
X19mZXN0X2F0dHJzWzBdPSIiOyBfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSk7
fV9fZmVzdF9idWYucHVzaCgiPGEgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3Rvb2xi
YXJfX3N1YmplY3RcIiBocmVmPVwiXC9tZXNzYWdlXC8iICsgX19mZXN0X2F0dHJz
WzBdICsgIlwvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4gY2xhc3M9XCJhdHRh
Y2h2aWV3ZXJfX3Rvb2xiYXJfX3N1YmplY3RfX2xpbmtcIj4iKTt0cnl7X19mZXN0
X2J1Zi5wdXNoKF9fZmVzdF9lc2NhcGVIVE1MKHBhcmFtcy5tYWlsLkZyb21OYW1l
KSl9Y2F0Y2goZSl7X19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UgKyAiNyIpO31f
X2Zlc3RfYnVmLnB1c2goIjwvc3Bhbj48c3BhbiBjbGFzcz1cImF0dGFjaHZpZXdl
cl9fdG9vbGJhcl9fc3ViamVjdF9fdGV4dFwiPiZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyIpO3RyeXtfX2Zlc3RfYnVmLnB1c2goX19mZXN0X2VzY2FwZUhUTUwocGFy
YW1zLm1haWwuU3ViamVjdCkpfWNhdGNoKGUpe19fZmVzdF9sb2dfZXJyb3IoZS5t
ZXNzYWdlICsgIjExIik7fV9fZmVzdF9idWYucHVzaCgiPC9zcGFuPjwvYT48L2Rp
dj48ZGl2IGNsYXNzPVwiYXR0YWNodmlld2VyX192aWV3ZXIgYXR0YWNodmlld2Vy
X192aWV3ZXJfb3RoZXIiKTt0cnl7X19mZXN0X2lmPW1haWxydS5BdWRpb1BsYXll
ckFwaSAmJiBwYXJhbXMuZmlsZS5Jc01wM31jYXRjaChlKXtfX2Zlc3RfaWY9ZmFs
c2U7X19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UpO31pZihfX2Zlc3RfaWYpe19f
ZmVzdF9idWYucHVzaCgiIGF0dGFjaHZpZXdlcl9fdmlld2VyX2F1ZGlvIik7fV9f
ZmVzdF9idWYucHVzaCgiXCI+Iik7dHJ5e19fZmVzdF9hdHRyc1swXT1fX2Zlc3Rf
ZXNjYXBlSFRNTChwYXJhbXMuZmlsZS5pY29uVHlwZSl9Y2F0Y2goZSl7X19mZXN0
X2F0dHJzWzBdPSIiOyBfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSk7fV9fZmVz
dF9idWYucHVzaCgiPGRpdiBjbGFzcz1cImF0dGFjaHZpZXdlcl9fdmlld2VyX19p
Y29uIGF0dGFjaHZpZXdlcl9fdmlld2VyX19pY29uXyIgKyBfX2Zlc3RfYXR0cnNb
MF0gKyAiIGpzLWV2ZW50LWF0dGFjaFZpZXdlclByZXZpZXdEb3dubG9hZENsaWNr
LmF0dGFjaFZpZXdlclwiPjwvZGl2PjxkaXYgY2xhc3M9XCJhdHRhY2h2aWV3ZXJf
X3ZpZXdlcl9faW5mbyBqcy1pbmZvXCI+PGRpdiBjbGFzcz1cImF0dGFjaHZpZXdl
cl9fdmlld2VyX19uYW1lXCI+Iik7dHJ5e19fZmVzdF9idWYucHVzaChhanMuSHRt
bC5lc2NhcGUocGFyYW1zLmZpbGUubmFtZSkpfWNhdGNoKGUpe19fZmVzdF9sb2df
ZXJyb3IoZS5tZXNzYWdlICsgIjM4Iik7fV9fZmVzdF9idWYucHVzaCgiPC9kaXY+
Iik7dHJ5e19fZmVzdF9pZj1tYWlscnUuQXVkaW9QbGF5ZXJBcGkgJiYgcGFyYW1z
LmZpbGUuSXNNcDN9Y2F0Y2goZSl7X19mZXN0X2lmPWZhbHNlO19fZmVzdF9sb2df
ZXJyb3IoZS5tZXNzYWdlKTt9aWYoX19mZXN0X2lmKXtfX2Zlc3Rfc2VsZWN0PSJw
bGF5ZXIiO19fZmVzdF9wYXJhbXM9e307X19mZXN0X2ZuPV9fZmVzdF9ibG9ja3Nb
X19mZXN0X3NlbGVjdF07aWYgKF9fZmVzdF9mbilfX2Zlc3RfYnVmLnB1c2goX19m
ZXN0X2NhbGwoX19mZXN0X2ZuLF9fZmVzdF9wYXJhbXMsZmFsc2UpKTt9X19mZXN0
X2J1Zi5wdXNoKCI8ZGl2IGNsYXNzPVwiYXR0YWNodmlld2VyX192aWV3ZXJfX3Np
emVcIj4iKTt0cnl7X19mZXN0X2J1Zi5wdXNoKF9fZmVzdF9lc2NhcGVIVE1MKFN0
cmluZy5zaXplRm9ybWF0KHBhcmFtcy5maWxlLnNpemUgKiAxMDI0KSkpfWNhdGNo
KGUpe19fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlICsgIjQ2Iik7fV9fZmVzdF9i
dWYucHVzaCgiPC9kaXY+Iik7dHJ5e19fZmVzdF9pZj1wYXJhbXMuZmlsZS5tZXNz
YWdlUmVhZFVybH1jYXRjaChlKXtfX2Zlc3RfaWY9ZmFsc2U7X19mZXN0X2xvZ19l
cnJvcihlLm1lc3NhZ2UpO31pZihfX2Zlc3RfaWYpe19fZmVzdF9idWYucHVzaCgi
PGRpdj4iKTt0cnl7X19mZXN0X2F0dHJzWzBdPV9fZmVzdF9lc2NhcGVIVE1MKHBh
cmFtcy5maWxlLm1lc3NhZ2VSZWFkVXJsKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNb
MF09IiI7IF9fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5w
dXNoKCI8YSBocmVmPVwiIiArIF9fZmVzdF9hdHRyc1swXSArICJcIiB0YXJnZXQ9
XCJfYmxhbmtcIiBjbGFzcz1cImF0dGFjaHZpZXdlcl9fdG9vbGJhcl9fbGluayBq
cy1ldmVudC1hdHRhY2hWaWV3ZXJQcmV2aWV3RG93bmxvYWRDbGljay5hdHRhY2hW
aWV3ZXJcIj48aSBjbGFzcz1cImljb24gaWNvbl9hdHRhY2h2aWV3IGljb25fYXR0
YWNodmlld19kb3dubG9hZFwiPjwvaT4mbmJzcDs8c3BhbiBjbGFzcz1cImF0dGFj
aHZpZXdlcl9fdG9vbGJhcl9fdGV4dFwiPiIpO3RyeXtfX2Zlc3RfYnVmLnB1c2go
X19mZXN0X2VzY2FwZUhUTUwoanNvbi5sYW5nLmJsb2Nrcy5hdHRhY2hlcy5vdGhl
ci5yZWFkKSl9Y2F0Y2goZSl7X19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UgKyAi
NTgiKTt9X19mZXN0X2J1Zi5wdXNoKCI8L3NwYW4+PC9hPjwvZGl2PiIpO31lbHNl
e3RyeXtfX2Zlc3RfaWY9cGFyYW1zLmZpbGUuZG93bmxvYWRVcmx9Y2F0Y2goZSl7
X19mZXN0X2lmPWZhbHNlO19fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9aWYo
X19mZXN0X2lmKXtfX2Zlc3RfYnVmLnB1c2goIjxkaXY+Iik7dHJ5e19fZmVzdF9h
dHRyc1swXT1fX2Zlc3RfZXNjYXBlSFRNTChwYXJhbXMuZmlsZS5kb3dubG9hZFVy
bCl9Y2F0Y2goZSl7X19mZXN0X2F0dHJzWzBdPSIiOyBfX2Zlc3RfbG9nX2Vycm9y
KGUubWVzc2FnZSk7fV9fZmVzdF9idWYucHVzaCgiPGEgaHJlZj1cIiIgKyBfX2Zl
c3RfYXR0cnNbMF0gKyAiXCIgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXJf
X2xpbmsganMtZXZlbnQtYXR0YWNoVmlld2VyUHJldmlld0Rvd25sb2FkQ2xpY2su
YXR0YWNoVmlld2VyXCI+Iik7dHJ5e19fZmVzdF9pZj1tYWlscnUuTmV3QXR0YWNo
Vmlld2VyUG9wdXB9Y2F0Y2goZSl7X19mZXN0X2lmPWZhbHNlO19fZmVzdF9sb2df
ZXJyb3IoZS5tZXNzYWdlKTt9aWYoX19mZXN0X2lmKXtfX2Zlc3RfYnVmLnB1c2go
IjxzcGFuIGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX190ZXh0XCI+Iik7
dHJ5e19fZmVzdF9idWYucHVzaChfX2Zlc3RfZXNjYXBlSFRNTChqc29uLmxhbmcu
YmxvY2tzLmF0dGFjaGVzLm90aGVyLmRvd25sb2FkKSl9Y2F0Y2goZSl7X19mZXN0
X2xvZ19lcnJvcihlLm1lc3NhZ2UgKyAiNzAiKTt9X19mZXN0X2J1Zi5wdXNoKCI8
L3NwYW4+PGkgY2xhc3M9XCJpY29uIGljb25fZm9sZGVycyBpY29uX2ZpbGVkb3du
bG9hZFwiPjwvaT4iKTt9ZWxzZXtfX2Zlc3RfYnVmLnB1c2goIjxpIGNsYXNzPVwi
aWNvbiBpY29uX2F0dGFjaHZpZXcgaWNvbl9hdHRhY2h2aWV3X2Rvd25sb2FkXCI+
PC9pPiZuYnNwOzxzcGFuIGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX190
ZXh0XCI+Iik7dHJ5e19fZmVzdF9idWYucHVzaChfX2Zlc3RfZXNjYXBlSFRNTChq
c29uLmxhbmcuYmxvY2tzLmF0dGFjaGVzLm90aGVyLmRvd25sb2FkKSl9Y2F0Y2go
ZSl7X19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UgKyAiODIiKTt9X19mZXN0X2J1
Zi5wdXNoKCI8L3NwYW4+Iik7fV9fZmVzdF9idWYucHVzaCgiPC9hPjwvZGl2PiIp
O31lbHNle319X19mZXN0X2J1Zi5wdXNoKCI8L2Rpdj48L2Rpdj4iKTtyZXR1cm4g
X19mZXN0X2J1Zi5qb2luKCIiKTt9O30pKF9fZmVzdF9jb250ZXh0KTtfX2Zlc3Rf
c2VsZWN0PSJhdHRhY2hlc19fb3RoZXIiO19fZmVzdF9wYXJhbXM9e307dHJ5e19f
ZmVzdF9wYXJhbXM9anNvbn1jYXRjaChlKXtfX2Zlc3RfbG9nX2Vycm9yKGUubWVz
c2FnZSl9X19mZXN0X2NodW5rcy5wdXNoKF9fZmVzdF9idWYuam9pbigiIikse25h
bWU6X19mZXN0X3NlbGVjdCxwYXJhbXM6X19mZXN0X3BhcmFtcyxjcDpmYWxzZX0p
O19fZmVzdF9idWY9W107X19mZXN0X3RvPV9fZmVzdF9jaHVua3MubGVuZ3RoO2lm
IChfX2Zlc3RfdG8pIHtfX2Zlc3RfaXRlcmF0b3IgPSAwO2ZvciAoO19fZmVzdF9p
dGVyYXRvcjxfX2Zlc3RfdG87X19mZXN0X2l0ZXJhdG9yKyspIHtfX2Zlc3RfY2h1
bms9X19mZXN0X2NodW5rc1tfX2Zlc3RfaXRlcmF0b3JdO2lmICh0eXBlb2YgX19m
ZXN0X2NodW5rPT09InN0cmluZyIpIHtfX2Zlc3RfaHRtbC5wdXNoKF9fZmVzdF9j
aHVuayk7fSBlbHNlIHtfX2Zlc3RfZm49X19mZXN0X2Jsb2Nrc1tfX2Zlc3RfY2h1
bmsubmFtZV07aWYgKF9fZmVzdF9mbikgX19mZXN0X2h0bWwucHVzaChfX2Zlc3Rf
Y2FsbChfX2Zlc3RfZm4sX19mZXN0X2NodW5rLnBhcmFtcywgX19mZXN0X2NodW5r
LmNwKSk7fX1fX2Zlc3RfaHRtbC5wdXNoKF9fZmVzdF9idWYuam9pbigiIikpO3Jl
dHVybiBfX2Zlc3RfaHRtbC5qb2luKCIiKX0gZWxzZSB7cmV0dXJuIF9fZmVzdF9i
dWYuam9pbigiIik7fX07IGlmKHguanNMb2FkZXIhPT11bmRlZmluZWQmJnguanNM
b2FkZXIubG9hZGVkIT09dW5kZWZpbmVkJiZ0eXBlb2YgeC5qc0xvYWRlci5sb2Fk
ZWQ9PT0nZnVuY3Rpb24nKXt4LmpzTG9hZGVyLmxvYWRlZCgne2Zlc3RUZW1wbGF0
ZX1wYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmlld2VyX19vdGhlcicsIDEpfTt9
KSgpOwovLyAuL2RhdGEvcnUvZmVzdC9wYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNo
dmlld2VyX19vdGhlci5qcyBlbmQKCi8vIC4vZGF0YS9ydS9mZXN0L3BhZ2VzL2F0
dGFjaHZpZXdlci9hdHRhY2h2aWV3ZXJfX3BkZi5qcyBzdGFydAoKOyhmdW5jdGlv
bigpe3ZhciB4PUZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7aWYoIXguZmVzdCl4
LmZlc3Q9e307eC5mZXN0WydwYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmlld2Vy
X19wZGYnXT1mdW5jdGlvbiAoX19mZXN0X2NvbnRleHQpeyJ1c2Ugc3RyaWN0Ijt2
YXIgX19mZXN0X3NlbGY9dGhpcyxfX2Zlc3RfYnVmPVtdLF9fZmVzdF9jaHVua3M9
W10sX19mZXN0X2NodW5rLF9fZmVzdF9hdHRycz1bXSxfX2Zlc3Rfc2VsZWN0LF9f
ZmVzdF9pZixfX2Zlc3RfaXRlcmF0b3IsX19mZXN0X3RvLF9fZmVzdF9mbixfX2Zl
c3RfaHRtbD1bXSxfX2Zlc3RfYmxvY2tzPXt9LF9fZmVzdF9wYXJhbXMsX19mZXN0
X2VsZW1lbnQsX19mZXN0X2RlYnVnX2ZpbGU9IiIsX19mZXN0X2RlYnVnX2xpbmU9
IiIsX19mZXN0X2RlYnVnX2Jsb2NrPSIiLF9fZmVzdF9odG1sY2hhcnM9L1smPD4i
XS9nLF9fZmVzdF9odG1sY2hhcnNfdGVzdD0vWyY8PiJdLyxfX2Zlc3Rfc2hvcnRf
dGFncyA9IHsiYXJlYSI6dHJ1ZSwiYmFzZSI6dHJ1ZSwiYnIiOnRydWUsImNvbCI6
dHJ1ZSwiY29tbWFuZCI6dHJ1ZSwiZW1iZWQiOnRydWUsImhyIjp0cnVlLCJpbWci
OnRydWUsImlucHV0Ijp0cnVlLCJrZXlnZW4iOnRydWUsImxpbmsiOnRydWUsIm1l
dGEiOnRydWUsInBhcmFtIjp0cnVlLCJzb3VyY2UiOnRydWUsIndiciI6dHJ1ZX0s
X19mZXN0X2VsZW1lbnRfc3RhY2sgPSBbXSxfX2Zlc3RfaHRtbGhhc2g9eyImIjoi
JmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwiXCIiOiImcXVvdDsifSxfX2Zl
c3RfanNjaGFycz0vW1xcJyJcL1xuXHJcdFxiXGY8Pl0vZyxfX2Zlc3RfanNjaGFy
c190ZXN0PS9bXFwnIlwvXG5cclx0XGJcZjw+XS8sX19mZXN0X2pzaGFzaD17Ilwi
IjoiXFxcIiIsIlxcIjoiXFxcXCIsIi8iOiJcXC8iLCJcbiI6IlxcbiIsIlxyIjoi
XFxyIiwiXHQiOiJcXHQiLCJcYiI6IlxcYiIsIlxmIjoiXFxmIiwiJyI6IlxcJyIs
IjwiOiJcXHUwMDNDIiwiPiI6IlxcdTAwM0UifSxfX19mZXN0X2xvZ19lcnJvcjtp
Zih0eXBlb2YgX19mZXN0X2Vycm9yID09PSAidW5kZWZpbmVkIil7X19fZmVzdF9s
b2dfZXJyb3IgPSAodHlwZW9mIGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYmIGNv
bnNvbGUuZXJyb3IpID8gZnVuY3Rpb24oKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90
eXBlLmFwcGx5LmNhbGwoY29uc29sZS5lcnJvciwgY29uc29sZSwgYXJndW1lbnRz
KX0gOiBmdW5jdGlvbigpe307fWVsc2V7X19fZmVzdF9sb2dfZXJyb3I9X19mZXN0
X2Vycm9yfTtmdW5jdGlvbiBfX2Zlc3RfbG9nX2Vycm9yKG1zZyl7X19fZmVzdF9s
b2dfZXJyb3IobXNnKyJcbmluIGJsb2NrIFwiIitfX2Zlc3RfZGVidWdfYmxvY2sr
IlwiIGF0IGxpbmU6ICIrX19mZXN0X2RlYnVnX2xpbmUrIlxuZmlsZTogIitfX2Zl
c3RfZGVidWdfZmlsZSl9ZnVuY3Rpb24gX19mZXN0X3JlcGxhY2VIVE1MKGNocil7
cmV0dXJuIF9fZmVzdF9odG1saGFzaFtjaHJdfWZ1bmN0aW9uIF9fZmVzdF9yZXBs
YWNlSlMoY2hyKXtyZXR1cm4gX19mZXN0X2pzaGFzaFtjaHJdfWZ1bmN0aW9uIF9f
ZmVzdF9leHRlbmQoZGVzdCwgc3JjKXtmb3IodmFyIGkgaW4gc3JjKWlmKHNyYy5o
YXNPd25Qcm9wZXJ0eShpKSlkZXN0W2ldPXNyY1tpXTt9ZnVuY3Rpb24gX19mZXN0
X3BhcmFtKGZuKXtmbi5wYXJhbT10cnVlO3JldHVybiBmbn1mdW5jdGlvbiBfX2Zl
c3RfY2FsbChmbiwgcGFyYW1zLGNwKXtpZihjcClmb3IodmFyIGkgaW4gcGFyYW1z
KWlmKHR5cGVvZiBwYXJhbXNbaV09PSJmdW5jdGlvbiImJnBhcmFtc1tpXS5wYXJh
bSlwYXJhbXNbaV09cGFyYW1zW2ldKCk7cmV0dXJuIGZuLmNhbGwoX19mZXN0X3Nl
bGYscGFyYW1zKX1mdW5jdGlvbiBfX2Zlc3RfZXNjYXBlSlMocyl7aWYgKHR5cGVv
ZiBzPT09InN0cmluZyIpIHtpZiAoX19mZXN0X2pzY2hhcnNfdGVzdC50ZXN0KHMp
KXJldHVybiBzLnJlcGxhY2UoX19mZXN0X2pzY2hhcnMsX19mZXN0X3JlcGxhY2VK
Uyk7fSBlbHNlIGlmICh0eXBlb2Ygcz09PSJ1bmRlZmluZWQiKXJldHVybiAiIjty
ZXR1cm4gczt9ZnVuY3Rpb24gX19mZXN0X2VzY2FwZUhUTUwocyl7aWYgKHR5cGVv
ZiBzPT09InN0cmluZyIpIHtpZiAoX19mZXN0X2h0bWxjaGFyc190ZXN0LnRlc3Qo
cykpcmV0dXJuIHMucmVwbGFjZShfX2Zlc3RfaHRtbGNoYXJzLF9fZmVzdF9yZXBs
YWNlSFRNTCk7fSBlbHNlIGlmICh0eXBlb2Ygcz09PSJ1bmRlZmluZWQiKXJldHVy
biAiIjtyZXR1cm4gczt9dmFyIGpzb249X19mZXN0X2NvbnRleHQ7KGZ1bmN0aW9u
KF9fZmVzdF9jb250ZXh0KXtfX2Zlc3RfYmxvY2tzLmF0dGFjaGVzX19wZGY9ZnVu
Y3Rpb24ocGFyYW1zKXt2YXIgX19mZXN0X2J1Zj1bXTtfX2Zlc3RfYnVmLnB1c2go
IjxkaXYgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXIgYXR0YWNodmlld2Vy
X190b29sYmFyX3RvcFwiPiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0X2Vz
Y2FwZUhUTUwocGFyYW1zLm1haWwuSWQpfWNhdGNoKGUpe19fZmVzdF9hdHRyc1sw
XT0iIjsgX19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UpO31fX2Zlc3RfYnVmLnB1
c2goIjxhIGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX19zdWJqZWN0XCIg
aHJlZj1cIlwvbWVzc2FnZVwvIiArIF9fZmVzdF9hdHRyc1swXSArICJcL1wiIHRh
cmdldD1cIl9ibGFua1wiPjxzcGFuIGNsYXNzPVwiYXR0YWNodmlld2VyX190b29s
YmFyX19zdWJqZWN0X19saW5rXCI+Iik7dHJ5e19fZmVzdF9idWYucHVzaChfX2Zl
c3RfZXNjYXBlSFRNTChwYXJhbXMubWFpbC5Gcm9tTmFtZSkpfWNhdGNoKGUpe19f
ZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlICsgIjYiKTt9X19mZXN0X2J1Zi5wdXNo
KCI8L3NwYW4+PHNwYW4gY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3Rvb2xiYXJfX3N1
YmplY3RfX3RleHRcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiKTt0cnl7X19m
ZXN0X2J1Zi5wdXNoKF9fZmVzdF9lc2NhcGVIVE1MKHBhcmFtcy5tYWlsLlN1Ympl
Y3QpKX1jYXRjaChlKXtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSArICIxMCIp
O31fX2Zlc3RfYnVmLnB1c2goIjwvc3Bhbj48L2E+PC9kaXY+PGRpdiBjbGFzcz1c
ImF0dGFjaHZpZXdlcl9fdmlld2VyIGF0dGFjaHZpZXdlcl9fdmlld2VyX3BkZlwi
PjxkaXYgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3ZpZXdlcl9wZGZ3cmFwXCI+Iik7
dHJ5e19fZmVzdF9hdHRyc1swXT1fX2Zlc3RfZXNjYXBlSFRNTChwYXJhbXMuZmls
ZS5ub3R5cGVJbkZyYW1lVXJsKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbMF09IiI7
IF9fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5wdXNoKCI8
aWZyYW1lIGNsYXNzPVwiYXR0YWNodmlld2VyX192aWV3ZXJfdGV4dGlmcmFtZVwi
IHNyYz1cIiIgKyBfX2Zlc3RfYXR0cnNbMF0gKyAiXCIgZnJhbWVib3JkZXI9XCIw
XCI+PC9pZnJhbWU+PC9kaXY+PC9kaXY+Iik7cmV0dXJuIF9fZmVzdF9idWYuam9p
bigiIik7fTt9KShfX2Zlc3RfY29udGV4dCk7X19mZXN0X3NlbGVjdD0iYXR0YWNo
ZXNfX3BkZiI7X19mZXN0X3BhcmFtcz17fTt0cnl7X19mZXN0X3BhcmFtcz1qc29u
fWNhdGNoKGUpe19fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKX1fX2Zlc3RfY2h1
bmtzLnB1c2goX19mZXN0X2J1Zi5qb2luKCIiKSx7bmFtZTpfX2Zlc3Rfc2VsZWN0
LHBhcmFtczpfX2Zlc3RfcGFyYW1zLGNwOmZhbHNlfSk7X19mZXN0X2J1Zj1bXTtf
X2Zlc3RfdG89X19mZXN0X2NodW5rcy5sZW5ndGg7aWYgKF9fZmVzdF90bykge19f
ZmVzdF9pdGVyYXRvciA9IDA7Zm9yICg7X19mZXN0X2l0ZXJhdG9yPF9fZmVzdF90
bztfX2Zlc3RfaXRlcmF0b3IrKykge19fZmVzdF9jaHVuaz1fX2Zlc3RfY2h1bmtz
W19fZmVzdF9pdGVyYXRvcl07aWYgKHR5cGVvZiBfX2Zlc3RfY2h1bms9PT0ic3Ry
aW5nIikge19fZmVzdF9odG1sLnB1c2goX19mZXN0X2NodW5rKTt9IGVsc2Uge19f
ZmVzdF9mbj1fX2Zlc3RfYmxvY2tzW19fZmVzdF9jaHVuay5uYW1lXTtpZiAoX19m
ZXN0X2ZuKSBfX2Zlc3RfaHRtbC5wdXNoKF9fZmVzdF9jYWxsKF9fZmVzdF9mbixf
X2Zlc3RfY2h1bmsucGFyYW1zLCBfX2Zlc3RfY2h1bmsuY3ApKTt9fV9fZmVzdF9o
dG1sLnB1c2goX19mZXN0X2J1Zi5qb2luKCIiKSk7cmV0dXJuIF9fZmVzdF9odG1s
LmpvaW4oIiIpfSBlbHNlIHtyZXR1cm4gX19mZXN0X2J1Zi5qb2luKCIiKTt9fTsg
aWYoeC5qc0xvYWRlciE9PXVuZGVmaW5lZCYmeC5qc0xvYWRlci5sb2FkZWQhPT11
bmRlZmluZWQmJnR5cGVvZiB4LmpzTG9hZGVyLmxvYWRlZD09PSdmdW5jdGlvbicp
e3guanNMb2FkZXIubG9hZGVkKCd7ZmVzdFRlbXBsYXRlfXBhZ2VzL2F0dGFjaHZp
ZXdlci9hdHRhY2h2aWV3ZXJfX3BkZicsIDEpfTt9KSgpOwovLyAuL2RhdGEvcnUv
ZmVzdC9wYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmlld2VyX19wZGYuanMgZW5k
CgovLyAuL2RhdGEvcnUvZmVzdC9wYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmll
d2VyX19zbGlkZXIuanMgc3RhcnQKCjsoZnVuY3Rpb24oKXt2YXIgeD1GdW5jdGlv
bigncmV0dXJuIHRoaXMnKSgpO2lmKCF4LmZlc3QpeC5mZXN0PXt9O3guZmVzdFsn
cGFnZXMvYXR0YWNodmlld2VyL2F0dGFjaHZpZXdlcl9fc2xpZGVyJ109ZnVuY3Rp
b24gKF9fZmVzdF9jb250ZXh0KXsidXNlIHN0cmljdCI7dmFyIF9fZmVzdF9zZWxm
PXRoaXMsX19mZXN0X2J1Zj1bXSxfX2Zlc3RfY2h1bmtzPVtdLF9fZmVzdF9jaHVu
ayxfX2Zlc3RfYXR0cnM9W10sX19mZXN0X3NlbGVjdCxfX2Zlc3RfaWYsX19mZXN0
X2l0ZXJhdG9yLF9fZmVzdF90byxfX2Zlc3RfZm4sX19mZXN0X2h0bWw9W10sX19m
ZXN0X2Jsb2Nrcz17fSxfX2Zlc3RfcGFyYW1zLF9fZmVzdF9lbGVtZW50LF9fZmVz
dF9kZWJ1Z19maWxlPSIiLF9fZmVzdF9kZWJ1Z19saW5lPSIiLF9fZmVzdF9kZWJ1
Z19ibG9jaz0iIixfX2Zlc3RfaHRtbGNoYXJzPS9bJjw+Il0vZyxfX2Zlc3RfaHRt
bGNoYXJzX3Rlc3Q9L1smPD4iXS8sX19mZXN0X3Nob3J0X3RhZ3MgPSB7ImFyZWEi
OnRydWUsImJhc2UiOnRydWUsImJyIjp0cnVlLCJjb2wiOnRydWUsImNvbW1hbmQi
OnRydWUsImVtYmVkIjp0cnVlLCJociI6dHJ1ZSwiaW1nIjp0cnVlLCJpbnB1dCI6
dHJ1ZSwia2V5Z2VuIjp0cnVlLCJsaW5rIjp0cnVlLCJtZXRhIjp0cnVlLCJwYXJh
bSI6dHJ1ZSwic291cmNlIjp0cnVlLCJ3YnIiOnRydWV9LF9fZmVzdF9lbGVtZW50
X3N0YWNrID0gW10sX19mZXN0X2h0bWxoYXNoPXsiJiI6IiZhbXA7IiwiPCI6IiZs
dDsiLCI+IjoiJmd0OyIsIlwiIjoiJnF1b3Q7In0sX19mZXN0X2pzY2hhcnM9L1tc
XCciXC9cblxyXHRcYlxmPD5dL2csX19mZXN0X2pzY2hhcnNfdGVzdD0vW1xcJyJc
L1xuXHJcdFxiXGY8Pl0vLF9fZmVzdF9qc2hhc2g9eyJcIiI6IlxcXCIiLCJcXCI6
IlxcXFwiLCIvIjoiXFwvIiwiXG4iOiJcXG4iLCJcciI6IlxcciIsIlx0IjoiXFx0
IiwiXGIiOiJcXGIiLCJcZiI6IlxcZiIsIiciOiJcXCciLCI8IjoiXFx1MDAzQyIs
Ij4iOiJcXHUwMDNFIn0sX19fZmVzdF9sb2dfZXJyb3I7aWYodHlwZW9mIF9fZmVz
dF9lcnJvciA9PT0gInVuZGVmaW5lZCIpe19fX2Zlc3RfbG9nX2Vycm9yID0gKHR5
cGVvZiBjb25zb2xlICE9PSAidW5kZWZpbmVkIiAmJiBjb25zb2xlLmVycm9yKSA/
IGZ1bmN0aW9uKCl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxs
KGNvbnNvbGUuZXJyb3IsIGNvbnNvbGUsIGFyZ3VtZW50cyl9IDogZnVuY3Rpb24o
KXt9O31lbHNle19fX2Zlc3RfbG9nX2Vycm9yPV9fZmVzdF9lcnJvcn07ZnVuY3Rp
b24gX19mZXN0X2xvZ19lcnJvcihtc2cpe19fX2Zlc3RfbG9nX2Vycm9yKG1zZysi
XG5pbiBibG9jayBcIiIrX19mZXN0X2RlYnVnX2Jsb2NrKyJcIiBhdCBsaW5lOiAi
K19fZmVzdF9kZWJ1Z19saW5lKyJcbmZpbGU6ICIrX19mZXN0X2RlYnVnX2ZpbGUp
fWZ1bmN0aW9uIF9fZmVzdF9yZXBsYWNlSFRNTChjaHIpe3JldHVybiBfX2Zlc3Rf
aHRtbGhhc2hbY2hyXX1mdW5jdGlvbiBfX2Zlc3RfcmVwbGFjZUpTKGNocil7cmV0
dXJuIF9fZmVzdF9qc2hhc2hbY2hyXX1mdW5jdGlvbiBfX2Zlc3RfZXh0ZW5kKGRl
c3QsIHNyYyl7Zm9yKHZhciBpIGluIHNyYylpZihzcmMuaGFzT3duUHJvcGVydHko
aSkpZGVzdFtpXT1zcmNbaV07fWZ1bmN0aW9uIF9fZmVzdF9wYXJhbShmbil7Zm4u
cGFyYW09dHJ1ZTtyZXR1cm4gZm59ZnVuY3Rpb24gX19mZXN0X2NhbGwoZm4sIHBh
cmFtcyxjcCl7aWYoY3ApZm9yKHZhciBpIGluIHBhcmFtcylpZih0eXBlb2YgcGFy
YW1zW2ldPT0iZnVuY3Rpb24iJiZwYXJhbXNbaV0ucGFyYW0pcGFyYW1zW2ldPXBh
cmFtc1tpXSgpO3JldHVybiBmbi5jYWxsKF9fZmVzdF9zZWxmLHBhcmFtcyl9ZnVu
Y3Rpb24gX19mZXN0X2VzY2FwZUpTKHMpe2lmICh0eXBlb2Ygcz09PSJzdHJpbmci
KSB7aWYgKF9fZmVzdF9qc2NoYXJzX3Rlc3QudGVzdChzKSlyZXR1cm4gcy5yZXBs
YWNlKF9fZmVzdF9qc2NoYXJzLF9fZmVzdF9yZXBsYWNlSlMpO30gZWxzZSBpZiAo
dHlwZW9mIHM9PT0idW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0dXJuIHM7fWZ1bmN0
aW9uIF9fZmVzdF9lc2NhcGVIVE1MKHMpe2lmICh0eXBlb2Ygcz09PSJzdHJpbmci
KSB7aWYgKF9fZmVzdF9odG1sY2hhcnNfdGVzdC50ZXN0KHMpKXJldHVybiBzLnJl
cGxhY2UoX19mZXN0X2h0bWxjaGFycyxfX2Zlc3RfcmVwbGFjZUhUTUwpO30gZWxz
ZSBpZiAodHlwZW9mIHM9PT0idW5kZWZpbmVkIilyZXR1cm4gIiI7cmV0dXJuIHM7
fXZhciBqc29uPV9fZmVzdF9jb250ZXh0OyhmdW5jdGlvbihfX2Zlc3RfY29udGV4
dCl7X19mZXN0X2Jsb2Nrcy5hdHRhY2hlc19fc2xpZGVyPWZ1bmN0aW9uKHBhcmFt
cyl7dmFyIF9fZmVzdF9idWY9W107X19mZXN0X2J1Zi5wdXNoKCI8ZGl2IGNsYXNz
PVwianMtc2xpZGVyUHJldiBhdHRhY2h2aWV3ZXJfX3NsaWRlcl9fbmF2IGF0dGFj
aHZpZXdlcl9fc2xpZGVyX19uYXZfcHJldlwiPjwvZGl2PjxkaXYgY2xhc3M9XCJh
dHRhY2h2aWV3ZXJfX3NsaWRlcl9fY29udGFpbmVyXCI+PGRpdiBjbGFzcz1cImpz
LXNsaWRlcklubmVyIHctYXR0YWNodmlld2VyX19zbGlkZXJfX2xpc3RcIj48ZGl2
IGNsYXNzPVwianMtc2xpZGVyTGlzdCBhdHRhY2h2aWV3ZXJfX3NsaWRlcl9fbGlz
dFwiPiIpO3ZhciBpLGl0ZW0sX19mZXN0X3RvMCxfX2Zlc3RfaXRlcmF0b3IwO3Ry
eXtfX2Zlc3RfaXRlcmF0b3IwPXBhcmFtcy5GaWxlcyB8fCBbXTtfX2Zlc3RfdG8w
PV9fZmVzdF9pdGVyYXRvcjAubGVuZ3RoO31jYXRjaChlKXtfX2Zlc3RfaXRlcmF0
b3IwPVtdO19fZmVzdF90bzA9MDtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSk7
fWZvcihpPTA7aTxfX2Zlc3RfdG8wO2krKyl7aXRlbT1fX2Zlc3RfaXRlcmF0b3Iw
W2ldO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0X2VzY2FwZUhUTUwoaXRlbS5u
YW1lKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbMF09IiI7IF9fZmVzdF9sb2dfZXJy
b3IoZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5wdXNoKCI8ZGl2IGNsYXNzPVwianMt
aXRlbSBhdHRhY2h2aWV3ZXJfX3NsaWRlcl9fbGlzdF9faXRlbVwiIHRpdGxlPVwi
IiArIF9fZmVzdF9hdHRyc1swXSArICJcIj48ZGl2IGNsYXNzPVwidy1hdHRhY2h2
aWV3ZXJfX3NsaWRlcl9fbGlzdF9faXRlbVwiPjxkaXYgc3R5bGU9XCJwb3NpdGlv
bjogcmVsYXRpdmU7XCI+Iik7dHJ5e19fZmVzdF9hdHRyc1swXT1fX2Zlc3RfZXNj
YXBlSFRNTChpdGVtLmljb25UeXBlKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbMF09
IiI7IF9fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5wdXNo
KCI8ZGl2IGNsYXNzPVwiaS1zcEkgaS0iICsgX19mZXN0X2F0dHJzWzBdICsgIiBh
dHRhY2h2aWV3ZXJfX3NsaWRlcl9fbGlzdF9faXRlbV9faWNvblwiPjwvZGl2Pjxk
aXYgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3NsaWRlcl9fbGlzdF9faXRlbV9fbmFt
ZVwiPiIpO3RyeXtfX2Zlc3RfYnVmLnB1c2goYWpzLkh0bWwuZXNjYXBlKGl0ZW0u
bmFtZSkpfWNhdGNoKGUpe19fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlICsgIjE0
Iik7fV9fZmVzdF9idWYucHVzaCgiPC9kaXY+Iik7dHJ5e19fZmVzdF9pZj1pdGVt
LnByZXZpZXdVcmx9Y2F0Y2goZSl7X19mZXN0X2lmPWZhbHNlO19fZmVzdF9sb2df
ZXJyb3IoZS5tZXNzYWdlKTt9aWYoX19mZXN0X2lmKXtfX2Zlc3RfYnVmLnB1c2go
IjxkaXYgY2xhc3M9XCJhdHRhY2h2aWV3ZXJfX3NsaWRlcl9fbGlzdF9faXRlbV9f
cHJldmlld1wiPiIpO3RyeXtfX2Zlc3RfYXR0cnNbMF09X19mZXN0X2VzY2FwZUhU
TUwoaXRlbS5wcmV2aWV3VXJsKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbMF09IiI7
IF9fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5wdXNoKCI8
aW1nIHNyYz1cIiIgKyBfX2Zlc3RfYXR0cnNbMF0gKyAiXCIgb25lcnJvcj1cInRo
aXMucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PVwnbm9uZVwnXCIvPjwvZGl2PiIp
O31fX2Zlc3RfYnVmLnB1c2goIjwvZGl2PjwvZGl2PjwvZGl2PiIpO31fX2Zlc3Rf
YnVmLnB1c2goIjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJqcy1zbGlk
ZXJOZXh0IGF0dGFjaHZpZXdlcl9fc2xpZGVyX19uYXYgYXR0YWNodmlld2VyX19z
bGlkZXJfX25hdl9uZXh0XCI+PC9kaXY+Iik7cmV0dXJuIF9fZmVzdF9idWYuam9p
bigiIik7fTt9KShfX2Zlc3RfY29udGV4dCk7X19mZXN0X3NlbGVjdD0iYXR0YWNo
ZXNfX3NsaWRlciI7X19mZXN0X3BhcmFtcz17fTt0cnl7X19mZXN0X3BhcmFtcz1q
c29ufWNhdGNoKGUpe19fZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKX1fX2Zlc3Rf
Y2h1bmtzLnB1c2goX19mZXN0X2J1Zi5qb2luKCIiKSx7bmFtZTpfX2Zlc3Rfc2Vs
ZWN0LHBhcmFtczpfX2Zlc3RfcGFyYW1zLGNwOmZhbHNlfSk7X19mZXN0X2J1Zj1b
XTtfX2Zlc3RfdG89X19mZXN0X2NodW5rcy5sZW5ndGg7aWYgKF9fZmVzdF90bykg
e19fZmVzdF9pdGVyYXRvciA9IDA7Zm9yICg7X19mZXN0X2l0ZXJhdG9yPF9fZmVz
dF90bztfX2Zlc3RfaXRlcmF0b3IrKykge19fZmVzdF9jaHVuaz1fX2Zlc3RfY2h1
bmtzW19fZmVzdF9pdGVyYXRvcl07aWYgKHR5cGVvZiBfX2Zlc3RfY2h1bms9PT0i
c3RyaW5nIikge19fZmVzdF9odG1sLnB1c2goX19mZXN0X2NodW5rKTt9IGVsc2Ug
e19fZmVzdF9mbj1fX2Zlc3RfYmxvY2tzW19fZmVzdF9jaHVuay5uYW1lXTtpZiAo
X19mZXN0X2ZuKSBfX2Zlc3RfaHRtbC5wdXNoKF9fZmVzdF9jYWxsKF9fZmVzdF9m
bixfX2Zlc3RfY2h1bmsucGFyYW1zLCBfX2Zlc3RfY2h1bmsuY3ApKTt9fV9fZmVz
dF9odG1sLnB1c2goX19mZXN0X2J1Zi5qb2luKCIiKSk7cmV0dXJuIF9fZmVzdF9o
dG1sLmpvaW4oIiIpfSBlbHNlIHtyZXR1cm4gX19mZXN0X2J1Zi5qb2luKCIiKTt9
fTsgaWYoeC5qc0xvYWRlciE9PXVuZGVmaW5lZCYmeC5qc0xvYWRlci5sb2FkZWQh
PT11bmRlZmluZWQmJnR5cGVvZiB4LmpzTG9hZGVyLmxvYWRlZD09PSdmdW5jdGlv
bicpe3guanNMb2FkZXIubG9hZGVkKCd7ZmVzdFRlbXBsYXRlfXBhZ2VzL2F0dGFj
aHZpZXdlci9hdHRhY2h2aWV3ZXJfX3NsaWRlcicsIDEpfTt9KSgpOwovLyAuL2Rh
dGEvcnUvZmVzdC9wYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmlld2VyX19zbGlk
ZXIuanMgZW5kCgovLyAuL2RhdGEvcnUvZmVzdC9wYWdlcy9hdHRhY2h2aWV3ZXIv
YXR0YWNodmlld2VyX190ZXh0LmpzIHN0YXJ0Cgo7KGZ1bmN0aW9uKCl7dmFyIHg9
RnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtpZigheC5mZXN0KXguZmVzdD17fTt4
LmZlc3RbJ3BhZ2VzL2F0dGFjaHZpZXdlci9hdHRhY2h2aWV3ZXJfX3RleHQnXT1m
dW5jdGlvbiAoX19mZXN0X2NvbnRleHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgX19mZXN0
X3NlbGY9dGhpcyxfX2Zlc3RfYnVmPVtdLF9fZmVzdF9jaHVua3M9W10sX19mZXN0
X2NodW5rLF9fZmVzdF9hdHRycz1bXSxfX2Zlc3Rfc2VsZWN0LF9fZmVzdF9pZixf
X2Zlc3RfaXRlcmF0b3IsX19mZXN0X3RvLF9fZmVzdF9mbixfX2Zlc3RfaHRtbD1b
XSxfX2Zlc3RfYmxvY2tzPXt9LF9fZmVzdF9wYXJhbXMsX19mZXN0X2VsZW1lbnQs
X19mZXN0X2RlYnVnX2ZpbGU9IiIsX19mZXN0X2RlYnVnX2xpbmU9IiIsX19mZXN0
X2RlYnVnX2Jsb2NrPSIiLF9fZmVzdF9odG1sY2hhcnM9L1smPD4iXS9nLF9fZmVz
dF9odG1sY2hhcnNfdGVzdD0vWyY8PiJdLyxfX2Zlc3Rfc2hvcnRfdGFncyA9IHsi
YXJlYSI6dHJ1ZSwiYmFzZSI6dHJ1ZSwiYnIiOnRydWUsImNvbCI6dHJ1ZSwiY29t
bWFuZCI6dHJ1ZSwiZW1iZWQiOnRydWUsImhyIjp0cnVlLCJpbWciOnRydWUsImlu
cHV0Ijp0cnVlLCJrZXlnZW4iOnRydWUsImxpbmsiOnRydWUsIm1ldGEiOnRydWUs
InBhcmFtIjp0cnVlLCJzb3VyY2UiOnRydWUsIndiciI6dHJ1ZX0sX19mZXN0X2Vs
ZW1lbnRfc3RhY2sgPSBbXSxfX2Zlc3RfaHRtbGhhc2g9eyImIjoiJmFtcDsiLCI8
IjoiJmx0OyIsIj4iOiImZ3Q7IiwiXCIiOiImcXVvdDsifSxfX2Zlc3RfanNjaGFy
cz0vW1xcJyJcL1xuXHJcdFxiXGY8Pl0vZyxfX2Zlc3RfanNjaGFyc190ZXN0PS9b
XFwnIlwvXG5cclx0XGJcZjw+XS8sX19mZXN0X2pzaGFzaD17IlwiIjoiXFxcIiIs
IlxcIjoiXFxcXCIsIi8iOiJcXC8iLCJcbiI6IlxcbiIsIlxyIjoiXFxyIiwiXHQi
OiJcXHQiLCJcYiI6IlxcYiIsIlxmIjoiXFxmIiwiJyI6IlxcJyIsIjwiOiJcXHUw
MDNDIiwiPiI6IlxcdTAwM0UifSxfX19mZXN0X2xvZ19lcnJvcjtpZih0eXBlb2Yg
X19mZXN0X2Vycm9yID09PSAidW5kZWZpbmVkIil7X19fZmVzdF9sb2dfZXJyb3Ig
PSAodHlwZW9mIGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYmIGNvbnNvbGUuZXJy
b3IpID8gZnVuY3Rpb24oKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5
LmNhbGwoY29uc29sZS5lcnJvciwgY29uc29sZSwgYXJndW1lbnRzKX0gOiBmdW5j
dGlvbigpe307fWVsc2V7X19fZmVzdF9sb2dfZXJyb3I9X19mZXN0X2Vycm9yfTtm
dW5jdGlvbiBfX2Zlc3RfbG9nX2Vycm9yKG1zZyl7X19fZmVzdF9sb2dfZXJyb3Io
bXNnKyJcbmluIGJsb2NrIFwiIitfX2Zlc3RfZGVidWdfYmxvY2srIlwiIGF0IGxp
bmU6ICIrX19mZXN0X2RlYnVnX2xpbmUrIlxuZmlsZTogIitfX2Zlc3RfZGVidWdf
ZmlsZSl9ZnVuY3Rpb24gX19mZXN0X3JlcGxhY2VIVE1MKGNocil7cmV0dXJuIF9f
ZmVzdF9odG1saGFzaFtjaHJdfWZ1bmN0aW9uIF9fZmVzdF9yZXBsYWNlSlMoY2hy
KXtyZXR1cm4gX19mZXN0X2pzaGFzaFtjaHJdfWZ1bmN0aW9uIF9fZmVzdF9leHRl
bmQoZGVzdCwgc3JjKXtmb3IodmFyIGkgaW4gc3JjKWlmKHNyYy5oYXNPd25Qcm9w
ZXJ0eShpKSlkZXN0W2ldPXNyY1tpXTt9ZnVuY3Rpb24gX19mZXN0X3BhcmFtKGZu
KXtmbi5wYXJhbT10cnVlO3JldHVybiBmbn1mdW5jdGlvbiBfX2Zlc3RfY2FsbChm
biwgcGFyYW1zLGNwKXtpZihjcClmb3IodmFyIGkgaW4gcGFyYW1zKWlmKHR5cGVv
ZiBwYXJhbXNbaV09PSJmdW5jdGlvbiImJnBhcmFtc1tpXS5wYXJhbSlwYXJhbXNb
aV09cGFyYW1zW2ldKCk7cmV0dXJuIGZuLmNhbGwoX19mZXN0X3NlbGYscGFyYW1z
KX1mdW5jdGlvbiBfX2Zlc3RfZXNjYXBlSlMocyl7aWYgKHR5cGVvZiBzPT09InN0
cmluZyIpIHtpZiAoX19mZXN0X2pzY2hhcnNfdGVzdC50ZXN0KHMpKXJldHVybiBz
LnJlcGxhY2UoX19mZXN0X2pzY2hhcnMsX19mZXN0X3JlcGxhY2VKUyk7fSBlbHNl
IGlmICh0eXBlb2Ygcz09PSJ1bmRlZmluZWQiKXJldHVybiAiIjtyZXR1cm4gczt9
ZnVuY3Rpb24gX19mZXN0X2VzY2FwZUhUTUwocyl7aWYgKHR5cGVvZiBzPT09InN0
cmluZyIpIHtpZiAoX19mZXN0X2h0bWxjaGFyc190ZXN0LnRlc3QocykpcmV0dXJu
IHMucmVwbGFjZShfX2Zlc3RfaHRtbGNoYXJzLF9fZmVzdF9yZXBsYWNlSFRNTCk7
fSBlbHNlIGlmICh0eXBlb2Ygcz09PSJ1bmRlZmluZWQiKXJldHVybiAiIjtyZXR1
cm4gczt9dmFyIGpzb249X19mZXN0X2NvbnRleHQ7KGZ1bmN0aW9uKF9fZmVzdF9j
b250ZXh0KXtfX2Zlc3RfYmxvY2tzLmF0dGFjaGVzX190ZXh0PWZ1bmN0aW9uKHBh
cmFtcyl7dmFyIF9fZmVzdF9idWY9W107X19mZXN0X2J1Zi5wdXNoKCI8ZGl2IGNs
YXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyIGF0dGFjaHZpZXdlcl9fdG9vbGJh
cl90b3BcIj4iKTt0cnl7X19mZXN0X2F0dHJzWzBdPV9fZmVzdF9lc2NhcGVIVE1M
KHBhcmFtcy5tYWlsLklkKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbMF09IiI7IF9f
ZmVzdF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5wdXNoKCI8YSBj
bGFzcz1cImF0dGFjaHZpZXdlcl9fdG9vbGJhcl9fc3ViamVjdFwiIGhyZWY9XCJc
L21lc3NhZ2VcLyIgKyBfX2Zlc3RfYXR0cnNbMF0gKyAiXC9cIiB0YXJnZXQ9XCJf
YmxhbmtcIj48c3BhbiBjbGFzcz1cImF0dGFjaHZpZXdlcl9fdG9vbGJhcl9fc3Vi
amVjdF9fbGlua1wiPiIpO3RyeXtfX2Zlc3RfYnVmLnB1c2goX19mZXN0X2VzY2Fw
ZUhUTUwocGFyYW1zLm1haWwuRnJvbU5hbWUpKX1jYXRjaChlKXtfX2Zlc3RfbG9n
X2Vycm9yKGUubWVzc2FnZSArICI2Iik7fV9fZmVzdF9idWYucHVzaCgiPC9zcGFu
PjxzcGFuIGNsYXNzPVwiYXR0YWNodmlld2VyX190b29sYmFyX19zdWJqZWN0X190
ZXh0XCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Iik7dHJ5e19fZmVzdF9idWYu
cHVzaChfX2Zlc3RfZXNjYXBlSFRNTChwYXJhbXMubWFpbC5TdWJqZWN0KSl9Y2F0
Y2goZSl7X19mZXN0X2xvZ19lcnJvcihlLm1lc3NhZ2UgKyAiMTAiKTt9X19mZXN0
X2J1Zi5wdXNoKCI8L3NwYW4+PC9hPjwvZGl2PjxkaXYgY2xhc3M9XCJhdHRhY2h2
aWV3ZXJfX3ZpZXdlciBhdHRhY2h2aWV3ZXJfX3ZpZXdlcl90ZXh0XCI+PGRpdiBj
bGFzcz1cImF0dGFjaHZpZXdlcl9fdmlld2VyX3RleHR3cmFwXCI+Iik7dHJ5e19f
ZmVzdF9hdHRyc1swXT1fX2Zlc3RfZXNjYXBlSFRNTChwYXJhbXMuZmlsZS5ub3R5
cGVJbkZyYW1lVXJsKX1jYXRjaChlKXtfX2Zlc3RfYXR0cnNbMF09IiI7IF9fZmVz
dF9sb2dfZXJyb3IoZS5tZXNzYWdlKTt9X19mZXN0X2J1Zi5wdXNoKCI8aWZyYW1l
IGNsYXNzPVwiYXR0YWNodmlld2VyX192aWV3ZXJfdGV4dGlmcmFtZVwiIHNyYz1c
IiIgKyBfX2Zlc3RfYXR0cnNbMF0gKyAiXCIgZnJhbWVib3JkZXI9XCIwXCI+PC9p
ZnJhbWU+PC9kaXY+PC9kaXY+Iik7cmV0dXJuIF9fZmVzdF9idWYuam9pbigiIik7
fTt9KShfX2Zlc3RfY29udGV4dCk7X19mZXN0X3NlbGVjdD0iYXR0YWNoZXNfX3Rl
eHQiO19fZmVzdF9wYXJhbXM9e307dHJ5e19fZmVzdF9wYXJhbXM9anNvbn1jYXRj
aChlKXtfX2Zlc3RfbG9nX2Vycm9yKGUubWVzc2FnZSl9X19mZXN0X2NodW5rcy5w
dXNoKF9fZmVzdF9idWYuam9pbigiIikse25hbWU6X19mZXN0X3NlbGVjdCxwYXJh
bXM6X19mZXN0X3BhcmFtcyxjcDpmYWxzZX0pO19fZmVzdF9idWY9W107X19mZXN0
X3RvPV9fZmVzdF9jaHVua3MubGVuZ3RoO2lmIChfX2Zlc3RfdG8pIHtfX2Zlc3Rf
aXRlcmF0b3IgPSAwO2ZvciAoO19fZmVzdF9pdGVyYXRvcjxfX2Zlc3RfdG87X19m
ZXN0X2l0ZXJhdG9yKyspIHtfX2Zlc3RfY2h1bms9X19mZXN0X2NodW5rc1tfX2Zl
c3RfaXRlcmF0b3JdO2lmICh0eXBlb2YgX19mZXN0X2NodW5rPT09InN0cmluZyIp
IHtfX2Zlc3RfaHRtbC5wdXNoKF9fZmVzdF9jaHVuayk7fSBlbHNlIHtfX2Zlc3Rf
Zm49X19mZXN0X2Jsb2Nrc1tfX2Zlc3RfY2h1bmsubmFtZV07aWYgKF9fZmVzdF9m
bikgX19mZXN0X2h0bWwucHVzaChfX2Zlc3RfY2FsbChfX2Zlc3RfZm4sX19mZXN0
X2NodW5rLnBhcmFtcywgX19mZXN0X2NodW5rLmNwKSk7fX1fX2Zlc3RfaHRtbC5w
dXNoKF9fZmVzdF9idWYuam9pbigiIikpO3JldHVybiBfX2Zlc3RfaHRtbC5qb2lu
KCIiKX0gZWxzZSB7cmV0dXJuIF9fZmVzdF9idWYuam9pbigiIik7fX07IGlmKHgu
anNMb2FkZXIhPT11bmRlZmluZWQmJnguanNMb2FkZXIubG9hZGVkIT09dW5kZWZp
bmVkJiZ0eXBlb2YgeC5qc0xvYWRlci5sb2FkZWQ9PT0nZnVuY3Rpb24nKXt4Lmpz
TG9hZGVyLmxvYWRlZCgne2Zlc3RUZW1wbGF0ZX1wYWdlcy9hdHRhY2h2aWV3ZXIv
YXR0YWNodmlld2VyX190ZXh0JywgMSl9O30pKCk7Ci8vIC4vZGF0YS9ydS9mZXN0
L3BhZ2VzL2F0dGFjaHZpZXdlci9hdHRhY2h2aWV3ZXJfX3RleHQuanMgZW5kCgov
LyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvUHJvamVjdHMvbWFpbC5ydS9B
dHRhY2hWaWV3ZXIvbWFpbHJ1LkZ1bGxBdHRhY2hWaWV3ZXIuVmlld2VyLmpzIHN0
YXJ0CgoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUvbWFpbHJ1LkJpbmRlZENvdW50
ZXJzLmpzIHN0YXJ0CgoKKGZ1bmN0aW9uKCQpIHsKCgkJdmFyIENPVU5URVJTID0g
ewoKCQkJLy8gTUFJTC0yMjEKCQkJVkVSSUZJRURfU0hPVzogMzg2NjgxLAoJCQlW
RVJJRklFRF9TVUNDRVNTOiAzODY2ODMsCgkJCVZFUklGSUVEX0ZBSUw6IDM4NjY4
NCwKCQkJVU5WRVJJRklFRF9TSE9XOiAzODY2ODYsCgkJCVVOVkVSSUZJRURfU0lH
TlVQX1BIT05FOiAzODY2ODcsCgkJCVVOVkVSSUZJRURfU0VORF9SRVFVRVNUOiAz
ODY2ODgsCgkJCVVOVkVSSUZJRURfQ0FOQ0VMOiAzODY2ODksCgkJCVVOVkVSSUZJ
RURfU1VDQ0VTUzogMzg2NjkwLAoJCQlVTlZFUklGSUVEX0ZBSUw6IDM4NjY5MSwK
CgkJCS8vIE1BSUwtMTMxMQoJCQlDT01QT1NFX1NIT1c6IDQ0MDg4MCwKCQkJQ09N
UE9TRV9TRU5EOiA0NDA4ODEsCgkJCUNPTVBPU0VfU0FWRTogNDQwODgyLAoJCQlD
T01QT1NFX0NBTkNFTDogNDQwODgzLAoJCQlDT01QT1NFX1NIT1dfQUxMX0ZJRUxE
UzogNDQwODg0LAoJCQlDT01QT1NFX1JFQUxfTkFNRV9MSU5LX0NMSUNLOiA0NDA4
ODUsCgkJCUNPTVBPU0VfUkVBTF9OQU1FX0NIQU5HRTogNDQwODg3LAoJCQlDT01Q
T1NFX1JFQUxfTkFNRV9TRVRUSU5HUzogNDQwODg5LAoJCQlDT01QT1NFX0FERFJF
U1NCT09LX0xJTktTX0NMSUNLOiA0NDA4OTAsCgkJCUNPTVBPU0VfQUREUkVTU0JP
T0tfSUNPTlNfQ0xJQ0s6IDQ0MDg5MSwKCQkJQ09NUE9TRV9VUExPQURFUl9BRERf
RklMRV9GTEFTSDogNDQwODkyLAoJCQlDT01QT1NFX1VQTE9BREVSX0FERF9GSUxF
X0pTOiA0NDA4OTMsCgkJCUNPTVBPU0VfVVBMT0FERVJfU0VUVElOR1M6IDQ0MDg5
NSwKCQkJQ09NUE9TRV9QUklPUklUWTogNDQwODk2LAoJCQlDT01QT1NFX1JFQ0VJ
UFQ6IDQ0MDg5NywKCQkJQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9CT1RUT05TX0xU
X1NNSUxFUzogNDQwODk4LAoJCQlDT01QT1NFX0VESVRPUl9UT09MQkFSX1NNSUxF
UzogNDQwODk5LAoJCQlDT01QT1NFX0VESVRPUl9UT09MQkFSX1VORE9SRURPOiA0
NDA5MDEsCgkJCUNPTVBPU0VfRURJVE9SX1RPT0xCQVJfQk9UVE9OU19GT1JNQVQ6
IDQ0MDkwMiwKCQkJQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9FTkFCTEVfVEVYVF9F
RElUT1I6IDQ0MDkwMywKCQkJQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9FTkFCTEVf
SFRNTF9FRElUT1I6IDQ0MDkwNCwKCQkJQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9U
UkFOU0ZFUjogNDQwOTA1LAoJCQlDT01QT1NFX0VESVRPUl9UT09MQkFSX0tFWUJP
QVJEOiA0NDA5MDcsCgkJCUNPTVBPU0VfRURJVE9SX1RPT0xCQVJfU1BFTEw6IDQ0
MDkwOCwKCQkJQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9UUkFOU0xJVDogNDQwOTA5
LAoJCQlDT01QT1NFX0VESVRPUl9UT09MQkFSX1NUWUxFOiA0NDA5MTAsCgkJCUNP
TVBPU0VfRURJVE9SX1RPT0xCQVJfU1RZTEVfU0VMRUNUOiA0NDA5MTEsCgoJCQkg
Ly8gTUFJTC0xMTk1NgoJCQlDT01QT1NFX0VESVRPUl9UT09MQkFSX1NJR05BVFVS
RTogMTM0NTc3NSwKCQkJQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9TSUdOQVRVUkVf
Q0xJQ0s6IDEzNDU3NzcsCgkJCUNPTVBPU0VfRURJVE9SX1RPT0xCQVJfQ0FSRF9T
RUxFQ1Q6IDEzNDU3ODEsCgoKCQkJRk9MREVSU19JTkJPWDogNDQwNzM5LAoJCQlG
T0xERVJTX0JVTEs6IDQ0MDc0MCwKCQkJRk9MREVSU19TRU5UOiA0NDA3NDEsCgkJ
CUZPTERFUlNfRFJBRlRTOiA0NDA3NDIsCgkJCUZPTERFUlNfVFJBU0g6IDQ0MDc0
NSwKCQkJRk9MREVSU19VU0VSOiA0NDA3NDYsCgkJCUZPTERFUlNfU0VUVElOR1M6
IDQ0MDc0OCwKCQkJRk9MREVSU19VTlJFQUQ6IDQ0MDc0OSwKCQkJRk9MREVSU19N
UklNX0FSQ0g6IDQ0MDc1MCwKCQkJRk9MREVSU19DTEVBUl9UUkFTSDogNDQwNzUx
LAoJCQlGT0xERVJTX0NMRUFSX0JVTEs6IDQ0MDc1MiwKCgkJCU1TR0xJU1RfUEFH
RTE6IDQ0MDc1MywKCQkJTVNHTElTVF9QQUdFMjogNDQwNzU1LAoJCQlNU0dMSVNU
X1BBR0UzOiA0NDA3NTYsCgkJCU1TR0xJU1RfUEFHRTQ6IDQ0MDc1NywKCQkJTVNH
TElTVF9QQUdFNTogNDQwNzU4LAoJCQlNU0dMSVNUX1BBR0VfT1RIRVI6IDQ0MDc2
MCwKCQkJTVNHTElTVF9TSE9SVF9NT0RFOiA0NDA3NjIsCgkJCU1TR0xJU1RfRlVM
TF9NT0RFOiA0NDA3NjMsCgkJCU1TR0xJU1RfU0VMRUNUX0xJTks6IDQ0MDc2NCwK
CQkJTVNHTElTVF9TRUxFQ1RfQUxMX0xJTks6IDQ0MDc2NSwKCQkJTVNHTElTVF9T
RUxFQ1RfVU5SRUFEX0xJTks6IDQ0MDc2NiwKCQkJTVNHTElTVF9TRUxFQ1RfUkVB
RF9MSU5LOiA0NDA3NjcsCgkJCU1TR0xJU1RfU0VMRUNUX01BUktfTElOSzogNDQw
NzY5LAoJCQlNU0dMSVNUX1NFTEVDVF9XSVRIRklMRVNfTElOSzogNDQwNzcxLAoJ
CQlNU0dMSVNUX1NFTEVDVF9GUk9NVVNFUl9MSU5LOiA0NDA3NzIsCgkJCU1TR0xJ
U1RfU0VMRUNUX05PTkVfTElOSzogNDQwNzczLAoJCQlNU0dMSVNUX0RFTEVURTog
NDQwNzc0LAoJCQlNU0dMSVNUX1NQQU06IDQ0MDc3NSwKCQkJTVNHTElTVF9NT1ZF
X0xJTks6IDQ0MDc3OCwKCQkJTVNHTElTVF9NT1ZFOiA0NDA3NzksCgkJCU1TR0xJ
U1RfTU9WRV9DUkVBVEVfTkVXX0ZPTERFUjogNDQwNzgwLAoJCQlNU0dMSVNUX01B
UktfTElOSzogNDQwNzgxLAoJCQlNU0dMSVNUX01BUktfUkVBRDogNDQwNzgyLAoJ
CQlNU0dMSVNUX01BUktfVU5SRUFEOiA0NDA3ODMsCgkJCU1TR0xJU1RfTUFSS19G
TEFHOiA0NDA3ODQsCgkJCU1TR0xJU1RfTUFSS19VTkZMQUc6IDQ0MDc4NSwKCQkJ
TVNHTElTVF9NT1JFX0xJTks6IDQ0MDc4NiwKCQkJTVNHTElTVF9NT1JFX0FERFJF
U1NCT09LOiA0NDA3ODcsCgkJCU1TR0xJU1RfTU9SRV9CTEFDS0xJU1Q6IDQ0MDc4
OCwKCQkJTVNHTElTVF9NT1JFX0NSRUFURV9GSUxURVI6IDQ0MDc5MCwKCQkJTVNH
TElTVF9NT1JFX1NFQVJDSDogNDQwNzkyLAoJCQlNU0dMSVNUX01PUkVfRk9SV0FS
RDogNDQwNzkzLAoJCQlNU0dMSVNUX1NPUlRfTElOSzogNDQwNzk1LAoJCQlNU0dM
SVNUX1NPUlQ6IDQ0MDc5NiwKCQkJTVNHTElTVF9BVFRBQ0g6IDQ0MDc5OSwKCgkJ
CVJFQURNU0dfU0hPVzogNDQwODAyLAoJCQlSRUFETVNHX1BSRVZfTUVTU0FHRTog
NDQwODA5LAoJCQlSRUFETVNHX05FWFRfTUVTU0FHRTogNDQwODEwLAoJCQlSRUFE
TVNHX1JFUExZOiA0NDA4MTEsCgkJCVJFQURNU0dfUkVQTFlfQUxMOiA0NDA4MTIs
CgkJCVJFQURNU0dfRk9SV0FSRDogNDQwODEzLAoJCQlSRUFETVNHX0RFTEVURTog
NDQwODE1LAoJCQlSRUFETVNHX1NQQU06IDQ0MDgxNiwKCQkJUkVBRE1TR19NT1ZF
X0xJTks6IDQ0MDgxNywKCQkJUkVBRE1TR19NT1ZFOiA0NDA4MTgsCgkJCVJFQURN
U0dfTU9WRV9DUkVBVEVfTkVXX0ZPTERFUjogNDQwODE5LAoJCQlSRUFETVNHX01B
UktfTElOSzogNDQwODIwLAoJCQlSRUFETVNHX01BUktfUkVBRDogNDQwODIxLAoJ
CQlSRUFETVNHX01BUktfVU5SRUFEOiA0NDA4MjIsCgkJCVJFQURNU0dfTUFSS19G
TEFHOiA0NDA4MjQsCgkJCVJFQURNU0dfTUFSS19VTkZMQUc6IDQ0MDgyNSwKCQkJ
UkVBRE1TR19NT1JFX0xJTks6IDQ0MDgyNiwKCQkJUkVBRE1TR19NT1JFX0FERFJF
U1NCT09LOiA0NDA4MjcsCgkJCVJFQURNU0dfTU9SRV9CTEFDS19MSVNUOiA0NDA4
MjgsCgkJCVJFQURNU0dfTU9SRV9DUkVBVEVfRklMVEVSOiA0NDA4MjksCgkJCVJF
QURNU0dfTU9SRV9TRUFSQ0g6IDQ0MDgzMSwKCQkJUkVBRE1TR19NT1JFX1RSQU5T
RkVSOiA0NDA4MzIsCgkJCVJFQURNU0dfTU9SRV9QUklOVDogNDQwODMzLAoJCQlS
RUFETVNHX01PUkVfRE9XTkxPQUQ6IDQ0MDgzNCwKCQkJUkVBRE1TR19NT1JFX1JF
U0VORDogNDQwODM1LAoJCQlSRUFETVNHX01PUkVfRk9SV0FSRDogNDQwODM2LAoJ
CQlSRUFETVNHX01PUkVfUkZDOiA0NDA4MzcsCgkJCVJFQURNU0dfUFJJTlRfSUNP
TjogNDQwODM4LAoJCQlSRUFETVNHX1RSQU5TTElUX0lDT046IDQ0MDgzOSwKCQkJ
UkVBRE1TR19GTEFHX0lDT046IDQ0MDg0MSwKCQkJUkVBRE1TR19BRERSRVNTQk9P
S19JQ09OOiA0NDA4NDIsCgkJCVJFQURNU0dfU0VBUkNIX0ZST01fVVNFUjogNDQw
ODQzLAoJCQlSRUFETVNHX0NIQU5HRV9BVkFUQVI6IDQ0MDg0NCwKCQkJUkVBRE1T
R19BVFRBQ0hfSUNPTjogNDQwODQ1LAoJCQlSRUFETVNHX0FUVEFDSF9JTUFHRV9T
SE9XOiA0NDA4NDYsCgkJCVJFQURNU0dfQVRUQUNIX1RYVFNIT1c6IDQ0MDg0NywK
CQkJUkVBRE1TR19BVFRBQ0hfTElOSzogNDQwODQ4LAoJCQlSRUFETVNHX0FUVEFD
SF9JVEVNX0xJTks6IDQ0MDg0OSwKCQkJUkVBRE1TR19BVFRBQ0hfRE9XTkxPQUQ6
IDQ0MDg1MCwKCQkJUkVBRE1TR19BVFRBQ0hfSVRFTV9JTUFHRV9QUkVWSUVXOiA0
NDA4NTIsCgkJCVJFQURNU0dfQVRUQUNIX0lURU1fSU5fQUxCVU06IDQ0MDg1MywK
CQkJUkVBRE1TR19BVFRBQ0hfSVRFTV9QUkVWSUVXOiA0NDA4NTQsCgkJCVJFQURN
U0dfRkFTVF9BTlNXRVJfU0hPUlRfUkVQTFk6IDQ0MDg1NSwKCQkJUkVBRE1TR19G
QVNUX0FOU1dFUl9TSE9SVF9SRVBMWUFMTDogNDQwODU2LAoJCQlSRUFETVNHX0ZB
U1RfQU5TV0VSX1NIT1JUX0ZPUldBUkQ6IDQ0MDg1NywKCQkJUkVBRE1TR19GQVNU
X0FOU1dFUl9TSE9SVF9URVhUQVJFQTogNDQwODU4LAoJCQlSRUFETVNHX0ZBU1Rf
QU5TV0VSX0ZVTExfUkVQTFk6IDQ0MDg2MCwKCQkJUkVBRE1TR19GQVNUX0FOU1dF
Ul9GVUxMX1JFUExZQUxMOiA0NDA4NjIsCgkJCVJFQURNU0dfRkFTVF9BTlNXRVJf
RlVMTF9GT1JXQVJEOiA0NDA4NjMsCgkJCVJFQURNU0dfRkFTVF9BTlNXRVJfRlVM
TF9GT1JNX0xJTks6IDQ0MDg2NSwKCQkJUkVBRE1TR19GQVNUX0FOU1dFUl9GVUxM
X0ZPUk06IDQ0MDg2NywKCQkJUkVBRE1TR19GQVNUX0FOU1dFUl9GVUxMX1NFTkQ6
IDQ0MDg2OCwKCQkJUkVBRE1TR19GQVNUX0FOU1dFUl9GVUxMX1NBVkU6IDQ0MDg3
MCwKCQkJUkVBRE1TR19GQVNUX0FOU1dFUl9GVUxMX0NBTkNFTDogNDQwODcyLAoK
CQkJLy8gTUFJTC00Mzg5CgkJCUFUVEFDSF9WSUVXRVJfTElTVF9DTElDSzogNTkw
MTM2LAoJCQlBVFRBQ0hfVklFV0VSX1NMSURFUl9ORVhUX0NMSUNLOiA1OTAxNDAs
CgkJCUFUVEFDSF9WSUVXRVJfU0xJREVSX1BSRVZfQ0xJQ0s6IDU5MDE0MiwKCQkJ
QVRUQUNIX1ZJRVdFUl9QUkVWSUVXX05FWFRfQ0xJQ0s6IDU5MDE0NCwKCQkJQVRU
QUNIX1ZJRVdFUl9QUkVWSUVXX1BSRVZfQ0xJQ0s6IDU5MDE0NSwKCQkJQVRUQUNI
X1ZJRVdFUl9TTElERVJfTElTVF9DTElDSzogNTkwMTQ2LAoJCQlBVFRBQ0hfVklF
V0VSX1BSRVZJRVdfSU1BR0VfQ0xJQ0s6IDU5MDE1NSwKCQkJQVRUQUNIX1ZJRVdF
Ul9QUkVWSUVXX09USEVSX0NMSUNLOiA1OTAxNTYsCgkJCUFUVEFDSF9WSUVXRVJf
UFJFVklFV19DTE9TRV9DTElDSzogNTkwMTU3LAoJCQlBVFRBQ0hfVklFV0VSX1BS
RVZJRVdfRE9XTkxPQURfQ0xJQ0s6IDU5MDE1OCwKCQkJQVRUQUNIX1ZJRVdFUl9Q
UkVWSUVXX0lOX0FMQlVNX0NMSUNLOiA1OTAxNjIsCgkJCUFUVEFDSF9WSUVXRVJf
UFJFVklFV19ORVdfV0lORE9XX0NMSUNLOiA1OTAxNjQsCgoJCQkvLyBNQUlMLTQ1
NjEKCQkJQVRUQUNIX1ZJRVdFUl9NT0RFX1NIT1JUX0NMSUNLOiA2MDI0MTYsCgkJ
CUFUVEFDSF9WSUVXRVJfTU9ERV9GVUxMX0NMSUNLOiA2MDI0MTgsCgoJCQlUSEVN
RVM6IHsKCgkJCQkvLyBNQUlMLTI3NzgKCQkJCSAgJ2RlZmF1bHQnOiA1MTg1MDEK
CQkJCSwgJ3QxMDAwJzogNTE4NTAzCgkJCQksICd0MTAwMSc6IDUxODUwNAoJCQkJ
LCAndDEwMDInOiA1MTg1MDUKCQkJCSwgJ3QxMDAzJzogNTI5NTIxCgkJCQksICd0
MTAwNCc6IDUyOTUyMgoJCQkJLCAndDEwMDUnOiA1Mjk1MjMKCQkJCSwgJ3QxMDA2
JzogNTI5NTI0CgkJCQksICd0MTAwNyc6IDUyOTUyNQoJCQkJLCAndDEwMDknOiA1
Mjk1MjYKCQkJCSwgJ3QxMDEwJzogNTI5NTI3CgkJCQksICd0MTAxMSc6IDUyOTUy
OAoJCQkJLCAndDEwMTInOiA1Mjk1MjkKCgkJCQkvLyBNQUlMLTM0MjEKCQkJCSwg
J3QxMDA4JzogNTQyMTkxCgkJCQksICd0MTAxMyc6IDU0MjE5MgoJCQkJLCAndDEw
MTQnOiA1NDIxOTMKCQkJCSwgJ3QxMDE1JzogNTQyMTk1CgkJCQksICd0MTAxNic6
IDU0MjE5NgoKCQkJCS8vIE1BSUwtMzUyMwoJCQkJLCAndDEwMTcnOiA1NDU0NjgK
CQkJCSwgJ3QxMDE4JzogNTQ1NDY0Ci8vCQkJCSwgJ3QxMDE5JzogNTQ1NDcxCi8v
CQkJCSwgJ3QxMDIwJzogNTQ1NDY1CgkJCQksICd0MTAyMSc6IDU0NTQ2NgoJCQkJ
LCAndDEwMjInOiA1NDU0NjIKCQkJCSwgJ3QxMDIzJzogNTQ1NDY5CgoJCQkJLy8g
TUFJTC0zODQyCgkJCQksICd0MTAyNCc6IDU1ODk5MAoKCQkJCS8vIE1BSUwtMzg4
MgoJCQkJLCAndDEwMjUnOiA1NzAxNjIKCgkJCQkvLyBNQUlMLTM5ODcKCQkJCSwg
J3QxMDI2JzogNTcwMTY0CgoJCQkJLy8gTUFJTC00MTc1CgkJCQksICd0MTAyNyc6
IDU3MDE2MwoKCQkJCS8vIE1BSUwtNDQ0OQoJCQkJLCAndDEwMjgnOiA1OTk2NDUK
CgkJCQkvLyBNQUlMLTQ1NDcKCQkJCSwgJ3QxMDI5JzogNjAzMjI3CgoJCQkJLy8g
TUFJTC00NTgyCgkJCQksICd0MTAzMCc6IDYwMzIyOAoKCQkJCS8vIE1BSUwtNDU5
NQoJCQkJLCAndDEwMzEnOiA2MDMyMjkKCgkJCQkvLyBNQUlMLTQ1NDYKCQkJCSwg
J3QxMDMyJzogNjAzMjMwCgoJCQkJLy8gTUFJTC01MzU4CgkJCQksICd0MTAzOCc6
IDY1ODUxOAoKCQkJCS8vIE1BSUwtNTEyOAoJCQkJLCAndDEwMzYnOiA2NTg1MjEK
CgkJCQkvLyBNQUlMLTUxMjcKCQkJCSwgJ3QxMDM3JzogNjU4NTEzCgoJCQkJLy8g
TUFJTC01OTM4CgkJCQksICd0MTA0MSc6IDY2MDQ0OQoKCQkJCS8vIE1BSUwtNTEz
MAoJCQkJLCAndDEwNDAnOiA2NTg1MTYKCgkJCQkvLyBNQUlMLTU5ODIKCQkJCSwg
J3QxMDQyJzogNzIwNTc1CgoJCQkJLy8gTUFJTC01NTMyCgkJCQksICd0MTA0Myc6
IDY2MDQ0NgoKCQkJCS8vIE1BSUwtNTkwOQoJCQkJLCAndDEwNDQnOiA1NDU0NzEK
CgkJCQkvLyBNQUlMLTY0NjkKCQkJCSwgJ3QxMDQ1JzogODE4MjEzCgoJCQkJLy8g
TUFJTC02NDcwCgkJCQksICd0MTA0Nic6IDg2ODcxMAoKCQkJCS8vIE1BSUwtNzM2
MAoJCQkJLCAndDEwNDcnOiA4Njg3MDkKCgkJCQkvLyBNQUlMLTczMzYKCQkJCSwg
J3QxMDQ4JzogODY2MDc3CgoJCQkJLCAndDEwNDknOiA5NzI4MjQgLy8gTUFJTC04
MTc1CgkJCQksICd0MTA1MCc6IDEwMjAzMDIgLy8gTUFJTC04MTc1CgkJCQksICd0
MTA1MSc6IDEwMzE5MzggLy8gTUFJTC04NTk4CgkJCQksICd0MTA1Mic6IDEwMzE3
MDggLy8gTUFJTC04NTk1CgkJCQksICd0MTA1Myc6IDYwMzIzMSAvLyBNQUlMLTg1
OTMKCQkJCSwgJ3QxMDU0JzogMTEwNjc4NyAvLyBNQUlMLTkyMDMKCQkJCSwgJ3Qx
MDU1JzogMTExOTIwNSAvLyBNQUlMLTk0MzIKCQkJCSwgJ3QxMDU2JzogMTE1MDEw
OCAvLyBNQUlMLTk4NjkKCQkJCSwgJ3QxMDU3JzogMTEzODU5NCAvLyBNQUlMLTk2
NTUKCQkJCSwgJ3QxMDU4JzogMTE1MjIyOSAvLyBNQUlMLTk5NzkKCQkJCSwgJ3Qx
MDU5JzogMTE2ODg0MiAgLy8gTUFJTC0xMDEwMwoJCQkJLCAndDEwNjAnOiAxMDQ5
MTcxICAvLyBNQUlMLTg3MDMKCQkJCSwgJ3QxMDYxJzogMTE4MDAzMSAgLy8gTUFJ
TC0xMDI3MQoJCQkJLCAndDEwNjInOiAxMTk2Mzc1ICAvLyBNQUlMLTEwNTAyCgkJ
CQksICd0MTA2Myc6IDEyMjA3ODggIC8vIE1BSUwtMTA4MzkKCQkJCSwgJ3QxMDY0
JzogMTE1MjIzMSAgLy8gTUFJTC0xMDg1MwoJCQkJLCAndDEwNjUnOiAxMjIwNzkw
ICAvLyBNQUlMLTEwODM4CgkJCQksICd0MTA2Nic6IDEyNzE5NDcgIC8vIE1BSUwt
MTExMzEKCQkJCSwgJ3QxMDY3JzogMTI5Njk1MCAgLy8gTUFJTC0xMTIzMgoJCQkJ
LCAndDEwNjgnOiAxMzE1NDY2ICAvLyBNQUlMLTExMjMzCgkJCQksICd0MTA2OSc6
IDEyOTYyMjcgIC8vIE1BSUwtMTEzNjEKCQkJCSwgJ3QxMDcwJzogMTIyMDc4NyAg
Ly8gTUFJTC0xMDgzNQoJCQkJLCAndDEwNzEnOiAxMzI1ODU4ICAvLyBNQUlMLTEx
NDY0CgkJCQksICd0MTA3Mic6IDEzMjU4NjkgIC8vIE1BSUwtMTE2OTIKCQkJCSwg
J3QxMDczJzogMTMyNTg2MSAgLy8gTUFJTC0xMTcxMgoJCQkJLCAndDEwNzQnOiAx
MzI1ODYzICAvLyBNQUlMLTExNzEzCgkJCQksICd0MTA3NSc6IDEzNDg2OTEgIC8v
IE1BSUwtMTIwMDIKCQkJCSwgJ3QxMDc2JzogMTM0NzEwMCAgLy8gTUFJTC0xMTk4
MgoJCQkJLCAndDEwNzcnOiAxMzQ4NjkyICAvLyBNQUlMLTEyMDA3CgkJCQksICd0
MTA3OCc6IDEzOTI0MTQgIC8vIE1BSUwtMTIzMTUKCQkJCSwgJ3QxMDc5JzogMTM5
MjQxOCAgLy8gTUFJTC0xMjUxMwoJCQkJLCAndDEwODAnOiAxNDA5OTA5ICAvLyBN
QUlMLTEyNzczCgkJCQksICd0MTA4MSc6IDEzOTI0MTYgIC8vIE1BSUwtMTI1MTQK
CQkJCSwgJ3QxMDgyJzogMTQ2MTczMiAgLy8gTUFJTC0xMzE2MQoJCQkJLCAndDEw
ODMnOiAxNDMwNDIwICAvLyBNQUlMLTEzMDEzCgkJCQksICd0MTA4NCc6IDE0ODk3
MjEgIC8vIE1BSUwtMTMwODYKCQkJCSwgJ3QxMDg1JzogMTQ4OTcyMiAgLy8gTUFJ
TC0xMzYxMwoJCQkJLCAndDEwODYnOiAxNTQxNTIzICAvLyBNQUlMLTE0NTExCgkJ
CQksICd0MTA4Nyc6IDE1NDE2MDkgIC8vIE1BSUwtMTM4ODEKCQkJCSwgJ3QxMDg4
JzogMTYyODU1NyAgLy8gTUFJTC0xNTYxNQoJCQkJLCAndDEwODknOiAxODA3MTI0
ICAvLyBNQUlMLTE3ODkzCgkJCX0sCgoJCQkvLyBNQUlMLTM2ODkKCQkJVEhFTUVT
X09OX1BBR0VfTE9BRDogewoJCQkJICAnZGVmYXVsdCc6IDU4NTI0OQoJCQkJLCAn
dDEwMDAnOiA1ODUyNTAgLy8g0JHQvtC20YzRjyDQutC+0YDQvtCy0LrQsAoJCQkJ
LCAndDEwMDEnOiA1ODUyNTEgLy8g0JzQtdC00LjRgtCw0YbQuNGPCgkJCQksICd0
MTAwMic6IDU4NTY0NSAvLyDQk9C+0YDQvtC0CgkJCQksICd0MTAwMyc6IDU4NTY0
NiAvLyDQmtGA0L7QutGD0YHRiwoJCQkJLCAndDEwMDQnOiA1ODU2NTEgLy8g0JrQ
u9GD0LHQvdC40LrQsAoJCQkJLCAndDEwMDUnOiA1ODU2NDQgLy8g0J7Qs9C90Lgg
0LzQtdCz0LDQv9C+0LvQuNGB0LAKCQkJCSwgJ3QxMDA2JzogNTg1NjUwIC8vINCk
0LjQvtC70LXRgtC+0LLRi9C5INGF0L7Qu9GB0YIKCQkJCSwgJ3QxMDA3JzogNTg1
NjQ3IC8vINCX0LXQvNC70Y/QvdC40LrQsAoJCQkJLCAndDEwMDgnOiA1ODU2NTYg
Ly8g0JfQvtC80LHQuAoJCQkJLCAndDEwMDknOiA1ODU2NDggLy8g0K/RgNC60LjQ
tSDQv9C40YHRjNC80LAKCQkJCSwgJ3QxMDEwJzogNTg1NjY0IC8vINCf0L7Qu9C+
0YHQsNGC0LDRjwoJCQkJLCAndDEwMTEnOiA1ODU2NTkgLy8g0JrQu9GP0LrRgdGL
CgkJCQksICd0MTAxMic6IDU4NTY2NyAvLyDQm9Cw0LnRggoJCQkJLCAndDEwMTMn
OiA1ODU2NTggLy8g0JrQvtGI0LrQuAoJCQkJLCAndDEwMjQnOiA1ODU2NjIgLy8g
0KHQuNC90LjQtSDQutGA0YvRiNC4CgkJCQksICd0MTAxNSc6IDU4NTY1MiAvLyDQ
otGA0LDQstCwCgkJCQksICd0MTAxNic6IDU4NTY1NSAvLyDQodC60LDQt9C+0YfQ
vdGL0Lkg0LPQvtGA0L7QtAoJCQkJLCAndDEwMTcnOiA1ODU2NTcgLy8g0JrQsNC3
0LjQvdC+CgkJCQksICd0MTAxOCc6IDU4NTY2MyAvLyDQktC+0LvQuiDQuCDQvtCy
0YbRiwoJCQkJLCAndDEwMTknOiA1ODU2NzMgLy8g0JvQtdGC0L4g0LIg0J/RgNC+
0YHRgtC+0LrQstCw0YjQuNC90L4KCQkJCSwgJ3QxMDIxJzogNTg1NjcwIC8vIFNp
bW9uJ3MgQ2F0CgkJCQksICd0MTAyMic6IDU4NTY1NCAvLyDQn9C40YDRgQoJCQkJ
LCAndDEwMjMnOiA1ODU2NjUgLy8g0JjQt9GD0LzRgNGD0LTQvdGL0Lkg0LPQvtGA
0L7QtAoJCQkJLCAndDEwMjUnOiA1ODU2NDkgLy8g0KXRjdC70LvQvtGD0LjQvQoJ
CQkJLCAndDEwMjYnOiA1ODU2NjYgLy8gQmxhY2tib2FyZAoKCQkJCS8vIE1BSUwt
NTUzMQoJCQkJLCAndDEwMjcnOiA1ODU2NjEKCQkJCSwgJ3QxMDI4JzogNTk5NjQ0
CgkJCQksICd0MTAyOSc6IDYwMzIzNgoJCQkJLCAndDEwMzAnOiA2MDMyMzcKCQkJ
CSwgJ3QxMDMxJzogNjAzMjM5CgkJCQksICd0MTAzMyc6IDU4NTY3MQoJCQkJLCAn
dDEwMzQnOiA2MjU2NzcKCgkJCQksICd0MTAzOCc6IDY1ODUyOSAvLyBNQUlMLTUz
NTggMTQg0YTQtdCy0YDQsNC70Y8KCgkJCQksICd0MTAzNic6IDY1NjgzMCAvLyBN
QUlMLTUxMjgKCgkJCQksICd0MTAzNyc6IDY1ODUyMyAvLyBNQUlMLTUxMjcg0JrQ
vtGC0LjQutC4CgoJCQkJLCAndDEwNDEnOiA2NjA0ODcgLy8gTUFJTC01OTM4INCS
0LXRgdC10L3QvdGP0Y8KCgkJCQksICd0MTA0MCc6IDY1ODUyNyAvLyBNQUlMLTUx
MzAg0KfQsNC10L/QuNGC0LjQtSDQsiDQv9GA0L7RgdGC0L7QutCy0LDRiNC40L3Q
vgoKCQkJCSwgJ3QxMDQyJzogNzIwNTc2ICAvLyBNQUlMLTU5ODIg0JLRi9GI0LjQ
stC60LAKCgkJCQksICd0MTA0Myc6IDY2MDQ4MyAgLy8gTUFJTC01NTMyINCh0LvQ
sNGB0YLQuAoKCQkJCSwgJ3QxMDQ0JzogNTg1NjczICAvLyBNQUlMLTU5MDkg0JLQ
tdGB0L3QsCDQsiDQv9GA0L7RgdGC0L7QutCy0LDRiNC40L3QvgoJCQkJLCAndDEw
NDUnOiA4MTgyMDIgIC8vIE1BSUwtNjQ2OSDQk9C+0L3QutC4CgkJCQksICd0MTA0
Nic6IDg2ODcxMSAgLy8gTUFJTC02NDcwINCf0LXRgNGM0Y8KCQkJCSwgJ3QxMDQ3
JzogODY4NzA4ICAvLyBNQUlMLTczNjAg0KDQvtC80LHQuNC60LgKCQkJCSwgJ3Qx
MDQ4JzogODY2MDgwICAvLyBNQUlMLTczMzYg0KTRg9GC0LHQvtC7CgkJCQksICd0
MTA0OSc6IDk3MjgyNSAgLy8gTUFJTC04MTc1INCU0LvQuNC90L3QvtC60L7RggoJ
CQkJLCAndDEwNTAnOiAxMDIwMzAwICAvLyBNQUlMLTg0ODkg0K3RgdC60LjQvNC+
0YHRiwoJCQkJLCAndDEwNTEnOiAxMDMxOTM5ICAvLyBNQUlMLTg1OTgg0JDQvCDQ
ndGP0LwKCQkJCSwgJ3QxMDUyJzogMTAzMTcwOSAgLy8gTUFJTC04NTk1INCT0YDQ
sNGE0YTQuNGC0LgKCQkJCSwgJ3QxMDUzJzogNjAzMjQzICAvLyBNQUlMLTg1OTMK
CQkJCSwgJ3QxMDU0JzogMTEwNjc4OCAgLy8gTUFJTC05MjAzCgkJCQksICd0MTA1
NSc6IDExMTkyMDYgIC8vIE1BSUwtOTQzMgoJCQkJLCAndDEwNTYnOiAxMTUwMTEx
ICAvLyBNQUlMLTk4NjkKCQkJCSwgJ3QxMDU3JzogMTEzODU5NSAgLy8gTUFJTC05
NjU1CgkJCQksICd0MTA1OCc6IDExNTIyMzAgIC8vIE1BSUwtOTk3OQoJCQkJLCAn
dDEwNTknOiAxMTY4ODQ2ICAvLyBNQUlMLTEwMTAzCgkJCQksICd0MTA2MCc6IDEw
NDkxNjAgIC8vIE1BSUwtODcwMwoJCQkJLCAndDEwNjEnOiAxMTgwMDMyICAvLyBN
QUlMLTEwMjcxCgkJCQksICd0MTA2Mic6IDExOTYzNzYgIC8vIE1BSUwtMTA1MDIK
CQkJCSwgJ3QxMDYzJzogMTIyMDc5MiAgLy8gTUFJTC0xMDgzOQoJCQkJLCAndDEw
NjQnOiAxMTUyMjM0ICAvLyBNQUlMLTEwODUzCgkJCQksICd0MTA2NSc6IDEyMjA3
OTMgIC8vIE1BSUwtMTA4MzgKCQkJCSwgJ3QxMDY2JzogMTI3MTk0OCAgLy8gTUFJ
TC0xMTEzMQoJCQkJLCAndDEwNjcnOiAxMjk2OTUyICAvLyBNQUlMLTExMjMyCgkJ
CQksICd0MTA2OCc6IDEzMTU0NjcgIC8vIE1BSUwtMTEyMzMKCQkJCSwgJ3QxMDY5
JzogMTI5NjIyOCAgLy8gTUFJTC0xMTM2MQoJCQkJLCAndDEwNzAnOiAxMjIwNzkx
ICAvLyBNQUlMLTEwODM1CgkJCQksICd0MTA3MSc6IDEzMjU4NzIgIC8vIE1BSUwt
MTE0NjQKCQkJCSwgJ3QxMDcyJzogMTMyNTg3OSAgLy8gTUFJTC0xMTY5MgoJCQkJ
LCAndDEwNzMnOiAxMzI1ODc1ICAvLyBNQUlMLTExNzEyCgkJCQksICd0MTA3NCc6
IDEzMjU4NzcgIC8vIE1BSUwtMTE3MTMKCQkJCSwgJ3QxMDc1JzogMTM0ODY5MyAg
Ly8gTUFJTC0xMjAwMgoJCQkJLCAndDEwNzYnOiAxMzQ3MTAxICAvLyBNQUlMLTEx
OTgyCgkJCQksICd0MTA3Nyc6IDEzNDg2OTQgIC8vIE1BSUwtMTIwMDcKCQkJCSwg
J3QxMDc4JzogMTM5MjQyOCAgLy8gTUFJTC0xMjMxNQoJCQkJLCAndDEwNzknOiAx
MzkyNDMzICAvLyBNQUlMLTEyNTEzCgkJCQksICd0MTA4MCc6IDE0MDk5MTAgIC8v
IE1BSUwtMTI3NzMKCQkJCSwgJ3QxMDgxJzogMTM5MjQzMCAgLy8gTUFJTC0xMjUx
NAoJCQkJLCAndDEwODInOiAxNDYxNzM0ICAvLyBNQUlMLTEzMTYxCgkJCQksICd0
MTA4Myc6IDE0MzA0MjEgIC8vIE1BSUwtMTMwMTMKCQkJCSwgJ3QxMDg0JzogMTQ4
OTcyMyAgLy8gTUFJTC0xMzA4NgoJCQkJLCAndDEwODUnOiAxNDg5NzI0ICAvLyBN
QUlMLTEzNjEzCgkJCQksICd0MTA4Nic6IDE1NDE1MjQgIC8vIE1BSUwtMTQ1MTEK
CQkJCSwgJ3QxMDg3JzogMTU0MTYxMiAgLy8gTUFJTC0xMzg4MQoJCQkJLCAndDEw
ODgnOiAxNjI4NTQ1ICAvLyBNQUlMLTE1NjE1CgkJCQksICd0MTA4OSc6IDE4MDcx
MjUgIC8vIE1BSUwtMTc4OTMKCQkJfSwKCgoJCQkvLyBNQUlMLTU5MTcKCQkJTEFO
R19PTl9QQUdFX0xPQUQ6IHsKCQkJCSAgJ3J1X1JVJzogNjg4MTcxCgkJCQksICd1
a19VQSc6IDY4ODE3MwoJCQkJLCAnZW5fVVMnOiA2ODgxNzUKCQkJCSwgJ3V6X1Va
JzogODI3ODcyICAvLyBNQUlMLTY5OTcKCQkJCSwgJ2JlX0JZJzogOTk3MDQwICAv
LyBNQUlMLTgzMDYKCQkJCSwgJ2trX0taJzogMTE2OTI3MyAgLy8gTUFJTC05MTQ3
CgkJCQksICdlc19FUyc6IDExOTYzNzggIC8vIE1BSUwtOTMyNgoJCQkJLCAnaHlf
QU0nOiAxMTk2MzgzICAvLyBNQUlMLTk5ODgKCQkJfSwKCgkJCUxBTkdfT05fQ0hB
TkdFOiB7CgkJCQkgICdydV9SVSc6IDY4ODE3MAoJCQkJLCAndWtfVUEnOiA2ODgx
NzIKCQkJCSwgJ2VuX1VTJzogNjg4MTc0CgkJCQksICd1el9VWic6IDgyNzg3MSAg
Ly8gTUFJTC02OTk3CgkJCQksICdiZV9CWSc6IDk5NzAzNyAgLy8gTUFJTC04MzA2
CgkJCQksICdra19LWic6IDExNjkyNjggIC8vIE1BSUwtOTE0NwoJCQkJLCAnZXNf
RVMnOiAxMTk2MzczICAvLyBNQUlMLTkzMjYKCQkJCSwgJ2h5X0FNJzogMTE5NjM4
MiAgLy8gTUFJTC05OTg4CgkJCX0sCgoJCQlTSUdOVVBfUEFHRTogewoJCQkJZXh0
ZXJuYWw6IHsKCQkJCQlzdWJtaXQ6ICAxNzQwNTUyLAoJCQkJCXNob3c6ICAgIDE3
NDA1NTIsCgkJCQkJY2FwdGNoYTogMTc0MDU1NwoJCQkJfQoJCQl9LAoKCQkJLy8g
TUFJTC01MjQ5CgkJCUFUVEFDSF9BUkNISVZFOiB7CgkJCQkgICdyYXInOiA2NTU4
NDcKCQkJCSwgJ3ppcCc6IDY1NTg0OQoJCQkJLCAnN3onOiAgNjU1ODUwCgkJCQks
ICdhcmonOiA2NTU4NTEKCQkJCSwgJ3Rhcic6IDY1NTg1MgoJCQkJLCAnamFyJzog
NjU1ODUzCgkJCQksICdiejInOiA2NTU4NTQKCQkJCSwgJ2d6JzogIDY1NTg1NgoJ
CQkJLCAnbHpoJzogNjU1ODU3CgkJCQksICdjYWInOiA2NTU4NTgKCQkJfSwKCgkJ
CUNPTExFQ1RPUjogewoJCQkJRVhURVJOQUxfQUNDT1VOVDogMTcxNTI2NiAvLyBN
QUlMLTE2ODY1CgkJCX0KCQl9OwoKCQkkKHdpbmRvdykuYmluZCh7CgkJCSdjb2xs
ZWN0b3IuZXh0ZXJuYWxfYWNjb3VudCc6IGZ1bmN0aW9uKCkgewoJCQkJQ291bnRl
ci5kKENPVU5URVJTLkNPTExFQ1RPUi5FWFRFUk5BTF9BQ0NPVU5UKTsKCQkJfQoJ
CX0pOwoKCQkkKGRvY3VtZW50KS5iaW5kKHsKCQkJJ0NhcHRjaGEuY2hlY2tTdWNj
ZXNzJzogZnVuY3Rpb24oZXZ0LCBkYXRhKSB7CgkJCQlpZiAoZGF0YS5yZWYub3B0
aW9ucy5pc192ZXJpZmllZCkgewoJCQkJCUNvdW50ZXIuZChDT1VOVEVSUy5WRVJJ
RklFRF9TVUNDRVNTKTsKCQkJCX0gZWxzZSB7CgkJCQkJQ291bnRlci5kKENPVU5U
RVJTLlVOVkVSSUZJRURfU1VDQ0VTUyk7CgkJCQl9CgkJCX0sCgoJCQknQ2FwdGNo
YS5jaGVja0Vycm9yJzogZnVuY3Rpb24oZXZ0LCBkYXRhKSB7CgkJCQlpZiAoZGF0
YS5yZWYub3B0aW9ucy5pc192ZXJpZmllZCkgewoJCQkJCUNvdW50ZXIuZChDT1VO
VEVSUy5WRVJJRklFRF9GQUlMKTsKCQkJCX0gZWxzZSB7CgkJCQkJQ291bnRlci5k
KENPVU5URVJTLlVOVkVSSUZJRURfRkFJTCk7CgkJCQl9CgkJCX0sCgoJCQknQ2Fw
dGNoYS5zaG93JzogZnVuY3Rpb24oZXZ0LCBkYXRhKSB7CgkJCQlpZiAoZGF0YS5y
ZWYub3B0aW9ucy5pc192ZXJpZmllZCkgewoJCQkJCUNvdW50ZXIuZChDT1VOVEVS
Uy5WRVJJRklFRF9TSE9XKTsKCQkJCX0gZWxzZSB7CgkJCQkJQ291bnRlci5kKENP
VU5URVJTLlVOVkVSSUZJRURfU0hPVyk7CgkJCQl9CgkJCX0sCgoJCQknQ2FwdGNo
YS5zaWdudXBQaG9uZU1hbmFnZXInOiBmdW5jdGlvbigpIHsKCQkJCUNvdW50ZXIu
ZChDT1VOVEVSUy5VTlZFUklGSUVEX1NJR05VUF9QSE9ORSk7CgkJCX0sCgoJCQkn
UGhvbmVNYW5hZ2VyLnZlcmlmeVBob25lQ2FuY2VsJzogZnVuY3Rpb24oKSB7CgkJ
CQlDb3VudGVyLmQoQ09VTlRFUlMuVU5WRVJJRklFRF9DQU5DRUwpOwoJCQl9LAoK
CQkJJ1Bob25lTWFuYWdlci5zaWdudXBQaG9uZVN1Y2Nlc3MnOiBmdW5jdGlvbigp
IHsKCQkJCUNvdW50ZXIuZChDT1VOVEVSUy5VTlZFUklGSUVEX1NFTkRfUkVRVUVT
VCk7CgkJCX0KCQl9KTsKCgkJJCh3aW5kb3cpLmJpbmQoewoKCQkJJ3Nob3dGb3Jt
LmNvbXBvc2UnOiBmdW5jdGlvbiAoKSB7CgkJCQlpZiAobWFpbHJ1LmlzU2VudE1z
ZykgewoJCQkJCUNvdW50ZXIuZChDT1VOVEVSUy5DT01QT1NFX1NIT1cpOwoJCQkJ
fQoJCQl9LAoKCQkJJ3NlbmRDbGljay5jb21wb3NlJzogZnVuY3Rpb24gKCkgewoJ
CQkJaWYgKG1haWxydS5pc1NlbnRNc2cpIHsKCQkJCQlDb3VudGVyLnNiKENPVU5U
RVJTLkNPTVBPU0VfU0VORCk7CgkJCQl9IGVsc2UgaWYgKG1haWxydS5pc1JlYWRN
c2cpIHsKCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfRkFTVF9BTlNX
RVJfRlVMTF9TRU5EKTsKCQkJCX0KCQkJfSwKCgkJCSdzYXZlQ2xpY2suY29tcG9z
ZSc6IGZ1bmN0aW9uICgpIHsKCQkJCWlmIChtYWlscnUuaXNTZW50TXNnKSB7CgkJ
CQkJQ291bnRlci5zYihDT1VOVEVSUy5DT01QT1NFX1NBVkUpOwoJCQkJfSBlbHNl
IGlmIChtYWlscnUuaXNSZWFkTXNnKSB7CgkJCQkJQ291bnRlci5zYihDT1VOVEVS
Uy5SRUFETVNHX0ZBU1RfQU5TV0VSX0ZVTExfU0FWRSk7CgkJCQl9CgkJCX0sCgoJ
CQknY2FuY2VsQ2xpY2suY29tcG9zZSc6IGZ1bmN0aW9uICgpIHsKCQkJCWlmICht
YWlscnUuaXNTZW50TXNnKSB7CgkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5DT01Q
T1NFX0NBTkNFTCk7CgkJCQl9IGVsc2UgaWYgKG1haWxydS5pc1JlYWRNc2cpIHsK
CQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfRkFTVF9BTlNXRVJfRlVM
TF9DQU5DRUwpOwoJCQkJfQoJCQl9LAoKCQkJJ3Nob3dBbGxGaWVsZHNMaW5rQ2xp
Y2suY29tcG9zZSc6IGZ1bmN0aW9uICgpIHsKCQkJCWlmIChtYWlscnUuaXNTZW50
TXNnKSB7CgkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5DT01QT1NFX1NIT1dfQUxM
X0ZJRUxEUyk7CgkJCQl9CgkJCX0sCgoJCQkncmVhbE5hbWVMaW5rQ2xpY2suY29t
cG9zZSc6IGZ1bmN0aW9uICgpIHsKCQkJCWlmIChtYWlscnUuaXNTZW50TXNnKSB7
CgkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5DT01QT1NFX1JFQUxfTkFNRV9MSU5L
X0NMSUNLKTsKCQkJCX0KCQkJfSwKCgkJCSdyZWFsTmFtZUNoYW5nZS5jb21wb3Nl
JzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1NlbnRNc2cpIHsKCQkJ
CQlDb3VudGVyLnNiKENPVU5URVJTLkNPTVBPU0VfUkVBTF9OQU1FX0NIQU5HRSk7
CgkJCQl9CgkJCX0sCgoJCQkncmVhbE5hbWVTZXR0aW5nc0xpbmtDbGljay5jb21w
b3NlJzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1NlbnRNc2cpIHsK
CQkJCQlDb3VudGVyLnNiKENPVU5URVJTLkNPTVBPU0VfUkVBTF9OQU1FX1NFVFRJ
TkdTKTsKCQkJCX0KCQkJfSwKCgkJCSdhZGRyZXNzQm9va0xpbmtzQ2xpY2suY29t
cG9zZSc6IGZ1bmN0aW9uICgpIHsKCQkJCWlmIChtYWlscnUuaXNTZW50TXNnKSB7
CgkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5DT01QT1NFX0FERFJFU1NCT09LX0xJ
TktTX0NMSUNLKTsKCQkJCX0KCQkJfSwKCgkJCSdhZGRyZXNzQm9va0ljb25zQ2xp
Y2suY29tcG9zZSc6IGZ1bmN0aW9uICgpIHsKCQkJCWlmIChtYWlscnUuaXNTZW50
TXNnKSB7CgkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5DT01QT1NFX0FERFJFU1NC
T09LX0lDT05TX0NMSUNLKTsKCQkJCX0KCQkJfSwKCgkJCSd1cGxvYWRlckFkZEZp
bGVGbGFzaENsaWNrLmNvbXBvc2UnOiBmdW5jdGlvbiAoKSB7CgkJCQlpZiAobWFp
bHJ1LmlzU2VudE1zZykgewoJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQ09NUE9T
RV9VUExPQURFUl9BRERfRklMRV9GTEFTSCk7CgkJCQkJQ291bnRlci5kKENPVU5U
RVJTLkNPTVBPU0VfVVBMT0FERVJfQUREX0ZJTEVfRkxBU0gpOwoJCQkJfQoJCQl9
LAoKCQkJJ3VwbG9hZGVyQWRkRmlsZUpTQ2xpY2suY29tcG9zZSc6IGZ1bmN0aW9u
ICgpIHsKCQkJCWlmIChtYWlscnUuaXNTZW50TXNnKSB7CgkJCQkJQ291bnRlci5z
YihDT1VOVEVSUy5DT01QT1NFX1VQTE9BREVSX0FERF9GSUxFX0pTKTsKCQkJCQlD
b3VudGVyLmQoQ09VTlRFUlMuQ09NUE9TRV9VUExPQURFUl9BRERfRklMRV9KUyk7
CgkJCQl9CgkJCX0sCgoJCQkndXBsb2FkZXJTZXR0aW5nc0xpbmtDbGljay5jb21w
b3NlJzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1NlbnRNc2cpIHsK
CQkJCQlDb3VudGVyLnNiKENPVU5URVJTLkNPTVBPU0VfVVBMT0FERVJfU0VUVElO
R1MpOwoJCQkJfQoJCQl9LAoKCQkJJ3ByaW9yaXR5Q2hlY2tib3hDbGljay5jb21w
b3NlJzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1NlbnRNc2cpIHsK
CQkJCQlDb3VudGVyLnNiKENPVU5URVJTLkNPTVBPU0VfUFJJT1JJVFkpOwoJCQkJ
fQoJCQl9LAoKCQkJJ3JlY2VpcHRDaGVja2JveENsaWNrLmNvbXBvc2UnOiBmdW5j
dGlvbiAoKSB7CgkJCQlpZiAobWFpbHJ1LmlzU2VudE1zZykgewoJCQkJCUNvdW50
ZXIuc2IoQ09VTlRFUlMuQ09NUE9TRV9SRUNFSVBUKTsKCQkJCX0KCQkJfSwKCgkJ
CSdlZGl0b3JUb29sYmFyQnV0dG9uU3R5bGVDaGFuZ2VDbGljay5jb21wb3NlJzog
ZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1NlbnRNc2cpIHsKCQkJCQlD
b3VudGVyLnNiKENPVU5URVJTLkNPTVBPU0VfRURJVE9SX1RPT0xCQVJfU1RZTEVf
U0VMRUNUKTsKCQkJCX0KCQkJfSwKCgkJCSdlZGl0b3JUb29sYmFyU2lnbmF0dXJl
Q2xpY2suY29tcG9zZSc6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKG1haWxydS5pc1Nl
bnRNc2cpIHsKCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLkNPTVBPU0VfRURJVE9S
X1RPT0xCQVJfU0lHTkFUVVJFX0NMSUNLKTsKCQkJCX0KCQkJfSwKCgkJCSdlZGl0
b3JUb29sYmFyQnV0dG9uQ2FyZFNlbGVjdC5jb21wb3NlJzogZnVuY3Rpb24gKCkg
ewoJCQkJaWYgKG1haWxydS5pc1NlbnRNc2cpIHsKCQkJCQlDb3VudGVyLnNiKENP
VU5URVJTLkNPTVBPU0VfRURJVE9SX1RPT0xCQVJfQ0FSRF9TRUxFQ1QpOwoJCQkJ
fQoJCQl9LAoKCQkJJ2VkaXRvclRvb2xiYXJCdXR0b25Ecm9wRG93bkNsaWNrLmNv
bXBvc2UnOiBmdW5jdGlvbiAoZXZ0LCBpZCkgewoJCQkJaWYgKG1haWxydS5pc1Nl
bnRNc2cpIHsKCQkJCQlpZiAoaWQgPT0gJ2ZvcmVjb2xvcicgfHwgaWQgPT0gJ2Jh
Y2tjb2xvcicgfHwgaWQgPT0gJ2ZvbnRhY3Rpb25zJyB8fCBpZCA9PSAnanVzdGlm
eXNlbGVjdCcgfHwgaWQgPT0gJ3RleHRpbmRlbnRhY3Rpb25zJyB8fCBpZCA9PSAn
YnVsbGlzdGFjdGlvbnMnKSB7CgkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQ09N
UE9TRV9FRElUT1JfVE9PTEJBUl9CT1RUT05TX0xUX1NNSUxFUyk7CgkJCQkJfSBl
bHNlIGlmIChpZCA9PSAnZW1vdGlvbnMnKSB7CgkJCQkJCUNvdW50ZXIuc2IoQ09V
TlRFUlMuQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9TTUlMRVMpOwoJCQkJCX0gZWxz
ZSBpZiAoaWQgPT0gJ3NpZ25hdHVyZScpIHsKCQkJCQkJQ291bnRlci5zYihDT1VO
VEVSUy5DT01QT1NFX0VESVRPUl9UT09MQkFSX1NJR05BVFVSRSk7CgkJCQkJfQoK
CQkJCQl2YXIgbyA9IHsKCQkJCQkJZm9yZWNvbG9yOiA5NjQ3ODcsCgkJCQkJCWJh
Y2tjb2xvcjogOTY0Nzg4LAoJCQkJCQlmb250YWN0aW9uczogOTY0Nzk1LAoJCQkJ
CQlqdXN0aWZ5c2VsZWN0OiA5NjQ3OTYsCgkJCQkJCXRleHRpbmRlbnRhY3Rpb25z
OiA5NjQ4MDIsCgkJCQkJCWJ1bGxpc3RhY3Rpb25zOiA5NjQ4MDMsCgkJCQkJCWVt
b3Rpb25zOiA5NjQ4MDQKCQkJCQl9OwoKCQkJCQlpZiAob1tpZF0pIHsKCQkJCQkJ
Q291bnRlci5zYihvW2lkXSk7CgkJCQkJfQoJCQkJfQoJCQl9LAoKCQkJJ2VkaXRv
clRvb2xiYXJCdXR0b25DbGljay5jb21wb3NlJzogZnVuY3Rpb24gKGV2dCwgY21k
KSB7CgkJCQlpZiAobWFpbHJ1LmlzU2VudE1zZykgewoJCQkJCWlmIChjbWQgPT0g
J1VuZG8nIHx8IGNtZCA9PSAnUmVkbycpIHsKCQkJCQkJQ291bnRlci5zYihDT1VO
VEVSUy5DT01QT1NFX0VESVRPUl9UT09MQkFSX1VORE9SRURPKTsKCQkJCQl9IGVs
c2UgaWYgKGNtZCA9PSAnU3RyaWtldGhyb3VnaCcgfHwgY21kID09ICdtY2VMaW5r
JyB8fCBjbWQgPT0gJ0luc2VydEhvcml6b250YWxSdWxlJyB8fCBjbWQgPT0gJ1Jl
bW92ZUZvcm1hdCcpIHsKCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5DT01QT1NF
X0VESVRPUl9UT09MQkFSX0JPVFRPTlNfRk9STUFUKTsKCQkJCQl9IGVsc2UgaWYg
KGNtZCA9PSAnbWNlQXBwS2V5Ym9hcmQnKSB7CgkJCQkJCUNvdW50ZXIuc2IoQ09V
TlRFUlMuQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9LRVlCT0FSRCk7CgkJCQkJfSBl
bHNlIGlmIChjbWQgPT0gJ21jZUFwcFRyYW5zbGl0JykgewoJCQkJCQlDb3VudGVy
LnNiKENPVU5URVJTLkNPTVBPU0VfRURJVE9SX1RPT0xCQVJfVFJBTlNMSVQpOwoJ
CQkJCX0gZWxzZSBpZiAoY21kID09ICdtY2VBcHBTcGVsbGluZycpIHsKCQkJCQkJ
Q291bnRlci5zYihDT1VOVEVSUy5DT01QT1NFX0VESVRPUl9UT09MQkFSX1NQRUxM
KTsKCQkJCQl9IGVsc2UgaWYgKGNtZCA9PSAnbWNlQXBwVHJhbnNmZXInKSB7CgkJ
CQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQ09NUE9TRV9FRElUT1JfVE9PTEJBUl9U
UkFOU0ZFUik7CgkJCQkJfSBlbHNlIGlmIChjbWQgPT0gJ21jZUVuYWJsZVRleHRF
ZGl0b3InKSB7CgkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQ09NUE9TRV9FRElU
T1JfVE9PTEJBUl9FTkFCTEVfVEVYVF9FRElUT1IpOwoJCQkJCX0gZWxzZSBpZiAo
Y21kID09ICdtY2VFbmFibGVIVE1MRWRpdG9yJykgewoJCQkJCQlDb3VudGVyLnNi
KENPVU5URVJTLkNPTVBPU0VfRURJVE9SX1RPT0xCQVJfRU5BQkxFX0hUTUxfRURJ
VE9SKTsKCQkJCQl9IGVsc2UgaWYgKGNtZCA9PSAnbWNlU2hvd1RlbXBsYXRlcycg
fHwgY21kID09ICdtY2VIaWRlVGVtcGxhdGVzJykgewoJCQkJCQlDb3VudGVyLnNi
KENPVU5URVJTLkNPTVBPU0VfRURJVE9SX1RPT0xCQVJfU1RZTEUpOwoJCQkJCX0g
ZWxzZSBpZiAoY21kID09ICdCb2xkJyB8fCBjbWQgPT0gJ0l0YWxpYycgfHwgY21k
ID09ICdVbmRlcmxpbmUnKSB7CgkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQ09N
UE9TRV9FRElUT1JfVE9PTEJBUl9CT1RUT05TX0xUX1NNSUxFUyk7CgkJCQkJfQoK
CQkJCQl2YXIgbyA9IHsKCQkJCQkJQm9sZDogOTY0NzYwLAoJCQkJCQlJdGFsaWM6
IDk2NDc4MSwKCQkJCQkJVW5kZXJsaW5lOiA5NjQ3ODIsCgkJCQkJCVVuZG86IDk2
NDgwNiwKCQkJCQkJUmVkbzogOTY0ODA3LAoJCQkJCQlTdHJpa2V0aHJvdWdoOiA5
NjQ4MTIsCgkJCQkJCW1jZUxpbms6IDk2NDgxNiwKCQkJCQkJSW5zZXJ0SG9yaXpv
bnRhbFJ1bGU6IDk2NDgxNywKCQkJCQkJUmVtb3ZlRm9ybWF0OiA5NjQ4MTgsCgkJ
CQkJCW1jZVNob3dDYXJkczogOTY0ODE5LAoJCQkJCQltY2VIaWRlQ2FyZHM6IDk2
NDgxOQoJCQkJCX07CgoJCQkJCWlmIChvW2NtZF0pIHsKCQkJCQkJQ291bnRlci5z
YihvW2NtZF0pOwoJCQkJCX0KCQkJCX0KCQkJfSwKCgkJCSdmb2xkZXJMaW5rQ2xp
Y2suZm9sZGVycyc6IGZ1bmN0aW9uIChldnQsIGlkKSB7CgkJCQlpZiAoaWQgPT0g
MCkgewoJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuRk9MREVSU19JTkJPWCk7CgoJ
CQkJCS8vIE1BSUwtNTg1MwoJCQkJCWlmIChtYWlscnUuTmV3SGVhZGVyV2l0aE1l
c3NhZ2VzKSB7CgkJCQkJCUNvdW50ZXIuc2IoNjg0NDQzKTsKCQkJCQl9IGVsc2Ug
ewoJCQkJCQlDb3VudGVyLnNiKDY4NDQ0MCk7CgkJCQkJfQoKCQkJCX0gZWxzZSBp
ZiAoaWQgPT0gOTUwKSB7CgkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5GT0xERVJT
X0JVTEspOwoJCQkJfSBlbHNlIGlmIChpZCA9PSA1MDAwMDApIHsKCQkJCQlDb3Vu
dGVyLnNiKENPVU5URVJTLkZPTERFUlNfU0VOVCk7CgkJCQl9IGVsc2UgaWYgKGlk
ID09IDUwMDAwMSkgewoJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuRk9MREVSU19E
UkFGVFMpOwoJCQkJfSBlbHNlIGlmIChpZCA9PSA1MDAwMDIpIHsKCQkJCQlDb3Vu
dGVyLnNiKENPVU5URVJTLkZPTERFUlNfVFJBU0gpOwoJCQkJfSBlbHNlIHsKCQkJ
CQlDb3VudGVyLnNiKENPVU5URVJTLkZPTERFUlNfVVNFUik7CgkJCQl9CgkJCX0s
CgoJCQknZm9sZGVyU2V0dGluZ3NMaW5rQ2xpY2suZm9sZGVycyc6IGZ1bmN0aW9u
ICgpIHsKCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuRk9MREVSU19TRVRUSU5HUyk7
CgkJCX0sCgoJCQknZm9sZGVyVW5yZWFkTGlua0NsaWNrLmZvbGRlcnMnOiBmdW5j
dGlvbiAoKSB7CgkJCQlDb3VudGVyLnNiKENPVU5URVJTLkZPTERFUlNfVU5SRUFE
KTsKCQkJfSwKCgkJCSdmb2xkZXJNUklNQXJjaExpbmtDbGljay5mb2xkZXJzJzog
ZnVuY3Rpb24gKCkgewoJCQkJQ291bnRlci5zYihDT1VOVEVSUy5GT0xERVJTX01S
SU1fQVJDSCk7CgkJCX0sCgoJCQknZm9sZGVyQ2xlYXJMaW5rQ2xpY2suZm9sZGVy
cyc6IGZ1bmN0aW9uIChldnQsIGlkKSB7CgkJCQlpZiAoaWQgPT0gOTUwKSB7CgkJ
CQkJQ291bnRlci5zYihDT1VOVEVSUy5GT0xERVJTX0NMRUFSX0JVTEspOwoJCQkJ
fSBlbHNlIGlmIChpZCA9PSA1MDAwMDIpIHsKCQkJCQlDb3VudGVyLnNiKENPVU5U
RVJTLkZPTERFUlNfQ0xFQVJfVFJBU0gpOwoJCQkJfQoJCQl9LAoKCQkJJ3Nob3cu
bXNnbGlzdCc6IGZ1bmN0aW9uIChldnQsIHBhZ2UpIHsKCQkJCWlmIChtYWlscnUu
aXNNc2dMaXN0KSB7CgkJCQkJaWYgKHBhZ2UgPT0gMSkgewoJCQkJCQlDb3VudGVy
LmQoQ09VTlRFUlMuTVNHTElTVF9QQUdFMSk7CgkJCQkJfSBlbHNlIGlmIChwYWdl
ID09IDIpIHsKCQkJCQkJQ291bnRlci5kKENPVU5URVJTLk1TR0xJU1RfUEFHRTIp
OwoJCQkJCX0gZWxzZSBpZiAocGFnZSA9PSAzKSB7CgkJCQkJCUNvdW50ZXIuZChD
T1VOVEVSUy5NU0dMSVNUX1BBR0UzKTsKCQkJCQl9IGVsc2UgaWYgKHBhZ2UgPT0g
NCkgewoJCQkJCQlDb3VudGVyLmQoQ09VTlRFUlMuTVNHTElTVF9QQUdFNCk7CgkJ
CQkJfSBlbHNlIGlmIChwYWdlID09IDUpIHsKCQkJCQkJQ291bnRlci5kKENPVU5U
RVJTLk1TR0xJU1RfUEFHRTUpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCUNvdW50ZXIu
ZChDT1VOVEVSUy5NU0dMSVNUX1BBR0VfT1RIRVIpOwoJCQkJCX0KCQkJCX0KCQkJ
fSwKCgkJCSdjaGFuZ2VNb2RlQ2xpY2subXNnbGlzdCc6IGZ1bmN0aW9uIChldnQs
IG1vZGUpIHsKCQkJCWlmIChtYWlscnUuaXNNc2dMaXN0KSB7CgkJCQkJaWYgKG1v
ZGUpIHsKCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5NU0dMSVNUX1NIT1JUX01P
REUpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuTVNH
TElTVF9GVUxMX01PREUpOwoJCQkJCX0KCQkJCX0KCQkJfSwKCgkJCSdkcm9wRG93
bkNsaWNrLm1zZ2xpc3QnOiBmdW5jdGlvbiAoZXZ0LCBuYW1lLCBtb2RlKSB7CgkJ
CQlpZiAobW9kZSkgewoJCQkJCWlmIChtYWlscnUuaXNNc2dMaXN0KSB7CgkJCQkJ
CWlmIChuYW1lID09ICdzZWxlY3QtbWVzc2FnZXMnKSB7CgkJCQkJCQlDb3VudGVy
LnNiKENPVU5URVJTLk1TR0xJU1RfU0VMRUNUX0xJTkspOwoJCQkJCQl9IGVsc2Ug
aWYgKG5hbWUgPT0gJ2ZvbGRlcnMnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5U
RVJTLk1TR0xJU1RfTU9WRV9MSU5LKTsKCQkJCQkJfSBlbHNlIGlmIChuYW1lID09
ICdtYXJrJykgewoJCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5NU0dMSVNUX01B
UktfTElOSyk7CgkJCQkJCX0gZWxzZSBpZiAobmFtZSA9PSAnbW9yZScpIHsKCQkJ
CQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuTVNHTElTVF9NT1JFX0xJTkspOwoJCQkJ
CQl9IGVsc2UgaWYgKG5hbWUgPT0gJ3NvcnQtbWVzc2FnZXMnKSB7CgkJCQkJCQlD
b3VudGVyLnNiKENPVU5URVJTLk1TR0xJU1RfU09SVF9MSU5LKTsKCQkJCQkJfQoJ
CQkJCX0gZWxzZSBpZiAobWFpbHJ1LmlzUmVhZE1zZykgewoJCQkJCQlpZiAobmFt
ZSA9PSAnZm9sZGVycycpIHsKCQkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuUkVB
RE1TR19NT1ZFX0xJTkspOwoJCQkJCQl9IGVsc2UgaWYgKG5hbWUgPT0gJ21hcmsn
KSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfTUFSS19MSU5L
KTsKCQkJCQkJfSBlbHNlIGlmIChuYW1lID09ICdyZWFkbXNnLW1vcmUnKSB7CgkJ
CQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfTU9SRV9MSU5LKTsKCQkJ
CQkJfQoJCQkJCX0KCQkJCX0KCQkJfSwKCgkJCSdkcm9wRG93bkxpbmtDbGljay5t
c2dsaXN0JzogZnVuY3Rpb24gKGV2dCwgbmFtZSwgZGF0YSkgewoJCQkJdmFyIHR5
cGUgPSBkYXRhICYmIGRhdGFbMl07CgkJCQlpZiAobWFpbHJ1LmlzTXNnTGlzdCkg
ewoJCQkJCWlmIChuYW1lID09ICdzZWxlY3QtbWVzc2FnZXMnKSB7CgkJCQkJCWlm
ICh0eXBlID09ICdhbGwnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLk1T
R0xJU1RfU0VMRUNUX0FMTF9MSU5LKTsKCQkJCQkJfSBlbHNlIGlmICh0eXBlID09
ICd1bnJlYWQnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLk1TR0xJU1Rf
U0VMRUNUX1VOUkVBRF9MSU5LKTsKCQkJCQkJfSBlbHNlIGlmICh0eXBlID09ICdy
ZWFkZWQnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLk1TR0xJU1RfU0VM
RUNUX1JFQURfTElOSyk7CgkJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAnZmxhZ2dl
ZCcpIHsKCQkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuTVNHTElTVF9TRUxFQ1Rf
TUFSS19MSU5LKTsKCQkJCQkJfSBlbHNlIGlmICh0eXBlID09ICdhdHRhY2gnKSB7
CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLk1TR0xJU1RfU0VMRUNUX1dJVEhG
SUxFU19MSU5LKTsKCQkJCQkJfSBlbHNlIGlmICh0eXBlID09ICdlbWFpbCcpIHsK
CQkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuTVNHTElTVF9TRUxFQ1RfRlJPTVVT
RVJfTElOSyk7CgkJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAnbm9uZScpIHsKCQkJ
CQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuTVNHTElTVF9TRUxFQ1RfTk9ORV9MSU5L
KTsKCQkJCQkJfQoJCQkJCX0gZWxzZSBpZiAobmFtZSA9PSAnZm9sZGVycycpIHsK
CQkJCQkJaWYgKHR5cGUgPT0gJ25ldycpIHsKCQkJCQkJCUNvdW50ZXIuc2IoQ09V
TlRFUlMuTVNHTElTVF9NT1ZFX0NSRUFURV9ORVdfRk9MREVSKTsKCQkJCQkJfSBl
bHNlIHsKCQkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuTVNHTElTVF9NT1ZFKTsK
CQkJCQkJfQoJCQkJCX0gZWxzZSBpZiAobmFtZSA9PSAnbWFyaycpIHsKCQkJCQkJ
aWYgKHR5cGUgPT0gMikgewoJCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5NU0dM
SVNUX01BUktfUkVBRCk7CgkJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAxKSB7CgkJ
CQkJCQlDb3VudGVyLnNiKENPVU5URVJTLk1TR0xJU1RfTUFSS19VTlJFQUQpOwoJ
CQkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gNikgewoJCQkJCQkJQ291bnRlci5zYihD
T1VOVEVSUy5NU0dMSVNUX01BUktfRkxBRyk7CgkJCQkJCX0gZWxzZSBpZiAodHlw
ZSA9PSA3KSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLk1TR0xJU1RfTUFS
S19VTkZMQUcpOwoJCQkJCQl9CgkJCQkJfSBlbHNlIGlmIChuYW1lID09ICdtb3Jl
JykgewoJCQkJCQlpZiAodHlwZSA9PSAnYWJvb2snKSB7CgkJCQkJCQlDb3VudGVy
LnNiKENPVU5URVJTLk1TR0xJU1RfTU9SRV9BRERSRVNTQk9PSyk7CgkJCQkJCX0g
ZWxzZSBpZiAodHlwZSA9PSAnYmxpc3QnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENP
VU5URVJTLk1TR0xJU1RfTU9SRV9CTEFDS0xJU1QpOwoJCQkJCQl9IGVsc2UgaWYg
KHR5cGUgPT0gJ2NyZWF0ZV9maWx0ZXInKSB7CgkJCQkJCQlDb3VudGVyLnNiKENP
VU5URVJTLk1TR0xJU1RfTU9SRV9DUkVBVEVfRklMVEVSKTsKCQkJCQkJfSBlbHNl
IGlmICh0eXBlID09ICdhbGwnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJT
Lk1TR0xJU1RfTU9SRV9TRUFSQ0gpOwoJCQkJCQl9IGVsc2UgaWYgKHR5cGUgPT0g
J2FzX2F0dGFjaG1lbnRzJykgewoJCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5N
U0dMSVNUX01PUkVfRk9SV0FSRCk7CgkJCQkJCX0KCQkJCQl9IGVsc2UgaWYgKG5h
bWUgPT0gJ3NvcnQtbWVzc2FnZXMnKSB7CgkJCQkJCUNvdW50ZXIuc2IoQ09VTlRF
UlMuTVNHTElTVF9TT1JUKTsKCQkJCQl9CgkJCQl9IGVsc2UgaWYgKG1haWxydS5p
c1JlYWRNc2cpIHsKCQkJCQlpZiAobmFtZSA9PSAnZm9sZGVycycpIHsKCQkJCQkJ
aWYgKHR5cGUgPT0gJ25ldycpIHsKCQkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMu
UkVBRE1TR19NT1ZFX0NSRUFURV9ORVdfRk9MREVSKTsKCQkJCQkJfSBlbHNlIHsK
CQkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuUkVBRE1TR19NT1ZFKTsKCQkJCQkJ
fQoJCQkJCX0gZWxzZSBpZiAobmFtZSA9PSAnbWFyaycpIHsKCQkJCQkJaWYgKHR5
cGUgPT0gMikgewoJCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5SRUFETVNHX01B
UktfUkVBRCk7CgkJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAxKSB7CgkJCQkJCQlD
b3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfTUFSS19VTlJFQUQpOwoJCQkJCQl9
IGVsc2UgaWYgKHR5cGUgPT0gNikgewoJCQkJCQkJQ291bnRlci5zYihDT1VOVEVS
Uy5SRUFETVNHX01BUktfRkxBRyk7CgkJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSA3
KSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfTUFSS19VTkZM
QUcpOwoJCQkJCQl9CgkJCQkJfSBlbHNlIGlmIChuYW1lID09ICdtb3JlJykgewoJ
CQkJCQlpZiAodHlwZSA9PSAnYWJvb2snKSB7CgkJCQkJCQlDb3VudGVyLnNiKENP
VU5URVJTLlJFQURNU0dfTU9SRV9BRERSRVNTQk9PSyk7CgkJCQkJCX0gZWxzZSBp
ZiAodHlwZSA9PSAnYmxpc3QnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJT
LlJFQURNU0dfTU9SRV9CTEFDS19MSVNUKTsKCQkJCQkJfSBlbHNlIGlmICh0eXBl
ID09ICdjcmVhdGVfZmlsdGVyJykgewoJCQkJCQkJQ291bnRlci5zYihDT1VOVEVS
Uy5SRUFETVNHX01PUkVfQ1JFQVRFX0ZJTFRFUik7CgkJCQkJCX0gZWxzZSBpZiAo
dHlwZSA9PSAnc2VhcmNoJykgewoJCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5S
RUFETVNHX01PUkVfU0VBUkNIKTsKCQkJCQkJfSBlbHNlIGlmICh0eXBlID09ICd0
cmFuc2xhdGUnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0df
TU9SRV9UUkFOU0ZFUik7CgkJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAncHJpbnQn
KSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfTU9SRV9QUklO
VCk7CgkJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAnZ2V0bXNnJykgewoJCQkJCQkJ
Q291bnRlci5zYihDT1VOVEVSUy5SRUFETVNHX01PUkVfRE9XTkxPQUQpOwoJCQkJ
CQl9IGVsc2UgaWYgKHR5cGUgPT0gJ2NvbXBvc2Vib3VuY2UnKSB7CgkJCQkJCQlD
b3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfTU9SRV9SRVNFTkQpOwoJCQkJCQl9
IGVsc2UgaWYgKHR5cGUgPT0gJ2ZvcndhcmQnKSB7CgkJCQkJCQlDb3VudGVyLnNi
KENPVU5URVJTLlJFQURNU0dfTU9SRV9GT1JXQVJEKTsKCQkJCQkJfSBlbHNlIGlm
ICh0eXBlID09ICdWaWV3VHlwZScpIHsKCQkJCQkJCUNvdW50ZXIuc2IoQ09VTlRF
UlMuUkVBRE1TR19NT1JFX1JGQyk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0s
CgoJCQknY29udHJvbENsaWNrLm1zZ2xpc3QnOiBmdW5jdGlvbiAoZXZ0LCB0eXBl
KSB7CgkJCQlpZiAobWFpbHJ1LmlzTXNnTGlzdCkgewoJCQkJCWlmICh0eXBlID09
ICdkZWxldGUnKSB7CgkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuTVNHTElTVF9E
RUxFVEUpOwoJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAnc3BhbScpIHsKCQkJCQkJ
Q291bnRlci5zYihDT1VOVEVSUy5NU0dMSVNUX1NQQU0pOwoJCQkJCX0KCQkJCX0K
CQkJfSwKCgkJCSdhdHRhY2hMaW5rQ2xpY2subXNnbGlzdCc6IGZ1bmN0aW9uICgp
IHsKCQkJCWlmIChtYWlscnUuaXNNc2dMaXN0KSB7CgkJCQkJQ291bnRlci5zYihD
T1VOVEVSUy5NU0dMSVNUX0FUVEFDSCk7CgkJCQl9CgkJCX0sCgoJCQknc2hvdy5y
ZWFkbXNnJzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1JlYWRNc2cp
IHsKCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfU0hPVyk7CgkJCQl9
CgkJCX0sCgoJCQknYWN0aW9uTGlua0NsaWNrLnJlYWRtc2cnOiBmdW5jdGlvbiAo
ZXZ0LCB0eXBlKSB7CgkJCQlpZiAobWFpbHJ1LmlzUmVhZE1zZykgewoJCQkJCWlm
ICh0eXBlID09ICdyZXBseScpIHsKCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5S
RUFETVNHX1JFUExZKTsKCQkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ3JlcGx5QWxs
JykgewoJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfUkVQTFlfQUxM
KTsKCQkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ2ZvcndhcmQnKSB7CgkJCQkJCUNv
dW50ZXIuc2IoQ09VTlRFUlMuUkVBRE1TR19GT1JXQVJEKTsKCQkJCQl9IGVsc2Ug
aWYgKHR5cGUgPT0gJ3JlbW92ZScpIHsKCQkJCQkJQ291bnRlci5zYihDT1VOVEVS
Uy5SRUFETVNHX0RFTEVURSk7CgkJCQkJfSBlbHNlIGlmICh0eXBlID09ICdzcGFt
JykgewoJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfU1BBTSk7CgkJ
CQkJfSBlbHNlIGlmICh0eXBlID09ICdwcmludCcpIHsKCQkJCQkJQ291bnRlci5z
YihDT1VOVEVSUy5SRUFETVNHX1BSSU5UX0lDT04pOwoJCQkJCX0gZWxzZSBpZiAo
dHlwZSA9PSAndHJhbnNsYXRlJykgewoJCQkJCQlDb3VudGVyLnNiKENPVU5URVJT
LlJFQURNU0dfVFJBTlNMSVRfSUNPTik7CgkJCQkJfSBlbHNlIGlmICh0eXBlID09
ICdwcmV2JykgewoJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfUFJF
Vl9NRVNTQUdFKTsKCQkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ25leHQnKSB7CgkJ
CQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuUkVBRE1TR19ORVhUX01FU1NBR0UpOwoJ
CQkJCX0gZWxzZSBpZiAodHlwZSA9PSAnZmxhZycpIHsKCQkJCQkJQ291bnRlci5z
YihDT1VOVEVSUy5SRUFETVNHX0ZMQUdfSUNPTik7CgkJCQkJfSBlbHNlIGlmICh0
eXBlID09ICduZXdfYWJjb250YWN0JykgewoJCQkJCQlDb3VudGVyLnNiKENPVU5U
RVJTLlJFQURNU0dfQUREUkVTU0JPT0tfSUNPTik7CgkJCQkJfSBlbHNlIGlmICh0
eXBlID09ICdnb3NlYXJjaCcpIHsKCQkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5S
RUFETVNHX1NFQVJDSF9GUk9NX1VTRVIpOwoJCQkJCX0gZWxzZSBpZiAodHlwZSA9
PSAnZ28yYXR0YWNoJykgewoJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURN
U0dfQVRUQUNIX0lDT04pOwoJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAnYXZhdGFy
JykgewoJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfQ0hBTkdFX0FW
QVRBUik7CgkJCQkJfQoJCQkJfQoJCQl9LAoKCQkJJ2Zhc3RBbnN3ZXJDb250cm9s
c0NsaWNrLnJlYWRtc2cnOiBmdW5jdGlvbiAoZXZ0LCBleHBhbmRlZCwgdHlwZSkg
ewoJCQkJaWYgKG1haWxydS5pc1JlYWRNc2cpIHsKCQkJCQlpZiAoZXhwYW5kZWQp
IHsKCQkJCQkJaWYgKHR5cGUgPT0gJ3JlcGx5JykgewoJCQkJCQkJQ291bnRlci5z
YihDT1VOVEVSUy5SRUFETVNHX0ZBU1RfQU5TV0VSX0ZVTExfUkVQTFkpOwoJCQkJ
CQl9IGVsc2UgaWYgKHR5cGUgPT0gJ3JlcGx5YWxsJykgewoJCQkJCQkJQ291bnRl
ci5zYihDT1VOVEVSUy5SRUFETVNHX0ZBU1RfQU5TV0VSX0ZVTExfUkVQTFlBTEwp
OwoJCQkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ2ZvcndhcmQnKSB7CgkJCQkJCQlD
b3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfRkFTVF9BTlNXRVJfRlVMTF9GT1JX
QVJEKTsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJCWlmICh0eXBlID09ICdy
ZXBseScpIHsKCQkJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuUkVBRE1TR19GQVNU
X0FOU1dFUl9TSE9SVF9SRVBMWSk7CgkJCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAn
cmVwbHlhbGwnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0df
RkFTVF9BTlNXRVJfU0hPUlRfUkVQTFlBTEwpOwoJCQkJCQl9IGVsc2UgaWYgKHR5
cGUgPT0gJ2ZvcndhcmQnKSB7CgkJCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJF
QURNU0dfRkFTVF9BTlNXRVJfU0hPUlRfRk9SV0FSRCk7CgkJCQkJCX0KCQkJCQl9
CgkJCQl9CgkJCX0sCgoJCQknZmFzdEFuc3dlckZha2VCb2R5Q2xpY2sucmVhZG1z
Zyc6IGZ1bmN0aW9uICgpIHsKCQkJCWlmIChtYWlscnUuaXNSZWFkTXNnKSB7CgkJ
CQkJQ291bnRlci5zYihDT1VOVEVSUy5SRUFETVNHX0ZBU1RfQU5TV0VSX1NIT1JU
X1RFWFRBUkVBKTsKCQkJCQlDb3VudGVyLmQoQ09VTlRFUlMuUkVBRE1TR19GQVNU
X0FOU1dFUl9GVUxMX0ZPUk0pOwoJCQkJfQoJCQl9LAoKCQkJJ2Zhc3RBbnN3ZXJG
dWxsRm9ybUxpbmtDbGljay5yZWFkbXNnJzogZnVuY3Rpb24gKCkgewoJCQkJaWYg
KG1haWxydS5pc1JlYWRNc2cpIHsKCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJF
QURNU0dfRkFTVF9BTlNXRVJfRlVMTF9GT1JNX0xJTkspOwoJCQkJfQoJCQl9LAoK
CQkJJ2F0dGFjaEhhc0ltYWdlLnJlYWRtc2cnOiBmdW5jdGlvbiAoKSB7CgkJCQlp
ZiAobWFpbHJ1LmlzUmVhZE1zZykgewoJCQkJCUNvdW50ZXIuZChDT1VOVEVSUy5S
RUFETVNHX0FUVEFDSF9UWFRTSE9XKTsKCQkJCX0KCQkJfSwKCgkJCSdhdHRhY2hQ
cmV2aWV3VGV4dC5yZWFkbXNnJzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxy
dS5pc1JlYWRNc2cpIHsKCQkJCQlDb3VudGVyLmQoQ09VTlRFUlMuUkVBRE1TR19B
VFRBQ0hfSU1BR0VfU0hPVyk7CgkJCQl9CgkJCX0sCgoJCQknYXR0YWNoSWNvbkNs
aWNrLnJlYWRtc2cnOiBmdW5jdGlvbiAoKSB7CgkJCQlpZiAobWFpbHJ1LmlzUmVh
ZE1zZykgewoJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuUkVBRE1TR19BVFRBQ0hf
TElOSyk7CgkJCQl9CgkJCX0sCgoJCQknYXR0YWNoVGl0bGVDbGljay5yZWFkbXNn
JzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1JlYWRNc2cpIHsKCQkJ
CQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfQVRUQUNIX0lURU1fTElOSyk7
CgkJCQl9CgkJCX0sCgoJCQknYXR0YWNoUHJldmlld0NsaWNrLnJlYWRtc2cnOiBm
dW5jdGlvbiAoKSB7CgkJCQlpZiAobWFpbHJ1LmlzUmVhZE1zZykgewoJCQkJCUNv
dW50ZXIuc2IoQ09VTlRFUlMuUkVBRE1TR19BVFRBQ0hfSVRFTV9JTUFHRV9QUkVW
SUVXKTsKCQkJCX0KCQkJfSwKCgkJCSdhdHRhY2hEb3dubG9hZExpbmtDbGljay5y
ZWFkbXNnJzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1JlYWRNc2cp
IHsKCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfQVRUQUNIX0RPV05M
T0FEKTsKCQkJCX0KCQkJfSwKCgkJCSdhdHRhY2hJbkFsYnVtTGlua0NsaWNrLnJl
YWRtc2cnOiBmdW5jdGlvbiAoKSB7CgkJCQlpZiAobWFpbHJ1LmlzUmVhZE1zZykg
ewoJCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuUkVBRE1TR19BVFRBQ0hfSVRFTV9J
Tl9BTEJVTSk7CgkJCQl9CgkJCX0sCgoJCQknYXR0YWNoUHJldmlld0xpbmtDbGlj
ay5yZWFkbXNnJzogZnVuY3Rpb24gKCkgewoJCQkJaWYgKG1haWxydS5pc1JlYWRN
c2cpIHsKCQkJCQlDb3VudGVyLnNiKENPVU5URVJTLlJFQURNU0dfQVRUQUNIX0lU
RU1fUFJFVklFVyk7CgkJCQl9CgkJCX0sCgoJCQknY2hhbmdlVGhlbWUudGhlbWUn
OiBmdW5jdGlvbiAoZXZ0LCB0aGVtZUlkKSB7CgkJCQlpZiAoQ09VTlRFUlMuVEhF
TUVTW3RoZW1lSWRdKSB7CgkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5USEVNRVNb
dGhlbWVJZF0pOwoKCQkJCQkvL01BSUwtMTU4MTEKCQkJCQlpZihtYWlscnUuSXNQ
ZGRBY2NvdW50KXsKCQkJCQkJQ291bnRlci5kKCIxNzEyMTMxIik7CgkJCQkJfQoJ
CQkJfQoJCQl9LAoKCQkJJ2NhbmNlbExheWVyVGhlbWUudGhlbWUnOiBmdW5jdGlv
biAoZXZ0LCB0aGVtZUlkKSB7CgkJCQlpZiAoQ09VTlRFUlMuVEhFTUVTW3RoZW1l
SWRdKSB7CgkJCQkJQ291bnRlci5zYihDT1VOVEVSUy5USEVNRVNbdGhlbWVJZF0p
OwoJCQkJfQoJCQl9LAoKCQkJJ2JlZm9yZXVubG9hZFRoZW1lLnRoZW1lJzogZnVu
Y3Rpb24gKGV2dCwgdGhlbWVJZCkgewoJCQkJaWYgKENPVU5URVJTLlRIRU1FU1t0
aGVtZUlkXSkgewoJCQkJCUNvdW50ZXIuZChDT1VOVEVSUy5USEVNRVNbdGhlbWVJ
ZF0pOwoJCQkJfQoJCQl9LAoKCQkJJ2F0dGFjaFZpZXdlckxpc3RDbGljay5hdHRh
Y2hWaWV3ZXInOiBmdW5jdGlvbiAoKSB7CgkJCQlDb3VudGVyLnNiKENPVU5URVJT
LkFUVEFDSF9WSUVXRVJfTElTVF9DTElDSyk7CgkJCX0sCgoJCQknYXR0YWNoVmll
d2VyU2xpZGVyTmV4dENsaWNrLmF0dGFjaFZpZXdlcic6IGZ1bmN0aW9uICgpIHsK
CQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQVRUQUNIX1ZJRVdFUl9TTElERVJfTkVY
VF9DTElDSyk7CgkJCX0sCgoJCQknYXR0YWNoVmlld2VyU2xpZGVyUHJldkNsaWNr
LmF0dGFjaFZpZXdlcic6IGZ1bmN0aW9uICgpIHsKCQkJCUNvdW50ZXIuc2IoQ09V
TlRFUlMuQVRUQUNIX1ZJRVdFUl9TTElERVJfUFJFVl9DTElDSyk7CgkJCX0sCgoJ
CQknYXR0YWNoVmlld2VyUHJldmlld1ByZXZDbGljay5hdHRhY2hWaWV3ZXInOiBm
dW5jdGlvbiAoKSB7CgkJCQlDb3VudGVyLnNiKENPVU5URVJTLkFUVEFDSF9WSUVX
RVJfUFJFVklFV19ORVhUX0NMSUNLKTsKCQkJfSwKCgkJCSdhdHRhY2hWaWV3ZXJQ
cmV2aWV3TmV4dENsaWNrLmF0dGFjaFZpZXdlcic6IGZ1bmN0aW9uICgpIHsKCQkJ
CUNvdW50ZXIuc2IoQ09VTlRFUlMuQVRUQUNIX1ZJRVdFUl9QUkVWSUVXX1BSRVZf
Q0xJQ0spOwoJCQl9LAoKCQkJJ2F0dGFjaFZpZXdlclNsaWRlckxpc3RDbGljay5h
dHRhY2hWaWV3ZXInOiBmdW5jdGlvbiAoKSB7CgkJCQlDb3VudGVyLnNiKENPVU5U
RVJTLkFUVEFDSF9WSUVXRVJfU0xJREVSX0xJU1RfQ0xJQ0spOwoJCQl9LAoKCQkJ
J2F0dGFjaFZpZXdlclByZXZpZXdJbWFnZUNsaWNrLmF0dGFjaFZpZXdlcic6IGZ1
bmN0aW9uICgpIHsKCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQVRUQUNIX1ZJRVdF
Ul9QUkVWSUVXX0lNQUdFX0NMSUNLKTsKCQkJfSwKCgkJCSdhdHRhY2hWaWV3ZXJQ
cmV2aWV3T3RoZXJDbGljay5hdHRhY2hWaWV3ZXInOiBmdW5jdGlvbiAoKSB7CgkJ
CQlDb3VudGVyLnNiKENPVU5URVJTLkFUVEFDSF9WSUVXRVJfUFJFVklFV19PVEhF
Ul9DTElDSyk7CgkJCX0sCgoJCQknYXR0YWNoVmlld2VyUHJldmlld0Nsb3NlQ2xp
Y2suYXR0YWNoVmlld2VyJzogZnVuY3Rpb24gKCkgewoJCQkJQ291bnRlci5zYihD
T1VOVEVSUy5BVFRBQ0hfVklFV0VSX1BSRVZJRVdfQ0xPU0VfQ0xJQ0spOwoJCQl9
LAoKCQkJJ2F0dGFjaFZpZXdlclByZXZpZXdEb3dubG9hZENsaWNrLmF0dGFjaFZp
ZXdlcic6IGZ1bmN0aW9uICgpIHsKCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQVRU
QUNIX1ZJRVdFUl9QUkVWSUVXX0RPV05MT0FEX0NMSUNLKTsKCQkJfSwKCgkJCSdh
dHRhY2hWaWV3ZXJQcmV2aWV3SW5BbGJ1bUNsaWNrLmF0dGFjaFZpZXdlcic6IGZ1
bmN0aW9uICgpIHsKCQkJCUNvdW50ZXIuc2IoQ09VTlRFUlMuQVRUQUNIX1ZJRVdF
Ul9QUkVWSUVXX0lOX0FMQlVNX0NMSUNLKTsKCQkJfSwKCgkJCSdhdHRhY2hWaWV3
ZXJQcmV2aWV3TmV3V2luZG93Q2xpY2suYXR0YWNoVmlld2VyJzogZnVuY3Rpb24g
KCkgewoJCQkJQ291bnRlci5zYihDT1VOVEVSUy5BVFRBQ0hfVklFV0VSX1BSRVZJ
RVdfTkVXX1dJTkRPV19DTElDSyk7CgkJCX0sCgoJCQknYXR0YWNoVmlld2VyQ2hh
bmdlTW9kZUNsaWNrLmF0dGFjaFZpZXdlcic6IGZ1bmN0aW9uIChldnQsIGlzU2hv
cnQpIHsKCQkJCWlmIChpc1Nob3J0KSB7CgkJCQkJQ291bnRlci5kKENPVU5URVJT
LkFUVEFDSF9WSUVXRVJfTU9ERV9TSE9SVF9DTElDSyk7CgkJCQl9IGVsc2UgewoJ
CQkJCUNvdW50ZXIuZChDT1VOVEVSUy5BVFRBQ0hfVklFV0VSX01PREVfRlVMTF9D
TElDSyk7CgkJCQl9CgkJCX0sCgoJCQknYXR0YWNoVmlld2VyUmVkcmF3LmF0dGFj
aFZpZXdlcic6IGZ1bmN0aW9uIChldnQsIGZpbGVzLCBsaW5rcykgewoJCQkJdmFy
IGV4dHMgPSB7fSwgZXh0LCBjb3VudGVycyA9IENPVU5URVJTLkFUVEFDSF9BUkNI
SVZFOwoJCQkJJC5lYWNoKGZpbGVzLmNvbmNhdChsaW5rcyksIGZ1bmN0aW9uIChr
LCB2KSB7CgkJCQkJZXh0ID0gdi5leHQudG9Mb3dlckNhc2UoKTsKCQkJCQlpZiAo
IWV4dHNbZXh0XSAmJiBjb3VudGVyc1tleHRdKSB7CgkJCQkJCUNvdW50ZXIuZChj
b3VudGVyc1tleHRdKTsKCQkJCQkJZXh0c1tleHRdID0gMTsKCQkJCQl9CgkJCQl9
KTsKCQkJfSwKCgkJCSd0aGVtZVBhZ2VMb2FkLnRoZW1lcyc6IGZ1bmN0aW9uIChl
dnQsIHRoZW1lKSB7CgkJCQlpZiAoQ09VTlRFUlMuVEhFTUVTX09OX1BBR0VfTE9B
RFt0aGVtZV0pIHsKCQkJCQlDb3VudGVyLmQoQ09VTlRFUlMuVEhFTUVTX09OX1BB
R0VfTE9BRFt0aGVtZV0pOwoKCQkJCQkvL01BSUwtMTU4MTEKCQkJCQlpZihtYWls
cnUuSXNQZGRBY2NvdW50KXsKCQkJCQkJQ291bnRlci5kKCIxNzEyMTM0Iik7CgkJ
CQkJfQoJCQkJfQoJCQl9LAoKCQkJJ2xhbmdQYWdlTG9hZC5sYW5nJzogZnVuY3Rp
b24gKGV2dCwgbGFuZykgewoJCQkJbGFuZyA9IGxhbmcgfHwgJ3J1X1JVJzsKCQkJ
CWlmIChDT1VOVEVSUy5MQU5HX09OX1BBR0VfTE9BRFtsYW5nXSkgewoJCQkJCUNv
dW50ZXIuZChDT1VOVEVSUy5MQU5HX09OX1BBR0VfTE9BRFtsYW5nXSk7CgkJCQl9
CgkJCX0sCgoJCQknbGFuZ0NoYW5nZS5sYW5nJzogZnVuY3Rpb24gKGV2dCwgbmV3
TGFuZykgewoJCQkJaWYgKENPVU5URVJTLkxBTkdfT05fQ0hBTkdFW25ld0xhbmdd
KSB7CgkJCQkJQ291bnRlci5kKENPVU5URVJTLkxBTkdfT05fQ0hBTkdFW25ld0xh
bmddKTsKCQkJCX0KCQkJfQoJCX0pOwoKCQkkKHdpbmRvdykuYmluZCh7CgkJCSdz
aG93RXh0ZXJuYWwuc2lnbnVwJzogZnVuY3Rpb24gKCkgewoJCQkJQ291bnRlci5k
KENPVU5URVJTLlNJR05VUF9QQUdFLmV4dGVybmFsLnNob3cpOwoJCQl9LAoJCQkn
c3VibWl0RXh0ZXJuYWwuc2lnbnVwJzogZnVuY3Rpb24gKCkgewoJCQkJQ291bnRl
ci5zYihDT1VOVEVSUy5TSUdOVVBfUEFHRS5leHRlcm5hbC5zdWJtaXQpOwoJCQl9
LAoJCQknY2FwdGNoYUV4dGVybmFsLnNpZ251cCc6IGZ1bmN0aW9uICgpIHsKCQkJ
CUNvdW50ZXIuc2IoQ09VTlRFUlMuU0lHTlVQX1BBR0UuZXh0ZXJuYWwuY2FwdGNo
YSk7CgkJCX0KCQl9KTsKCgl9KShqUXVlcnkpOwoKCWpzTG9hZGVyLmxvYWRlZCgn
e21haWxydX1tYWlscnUuQmluZGVkQ291bnRlcnMnLCAxKTsKCi8vIGRhdGEvcnUv
aW1hZ2VzL2pzL3J1L21haWxydS5CaW5kZWRDb3VudGVycy5qcyBlbmQKCi8vIGRh
dGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9Qcm9qZWN0cy9tYWlsLnJ1L0F0dGFj
aFZpZXdlci9tYWlscnUuRnVsbEF0dGFjaFZpZXdlci5VdGlscy5qcyBzdGFydAoK
Ci8qKgoJICogQGNsYXNzIG1haWxydS5GdWxsQXR0YWNoVmlld2VyLlV0aWxzCgkg
Ki8KCWpzQ2xhc3MKCS5jcmVhdGUoJ21haWxydS5GdWxsQXR0YWNoVmlld2VyLlV0
aWxzJykKCS5zdGF0aWNzKHsKCQljcmVhdGVGaWxlc1RyZWU6IGZ1bmN0aW9uKHZp
ZXdlckRhdGEsIHJlc3BvbnNlKSB7CgkJCXZhciB1dGlscyA9IHRoaXM7CgkJCXZh
ciBQYXJ0SUQgPSByZXNwb25zZVsyXVswXTsKCgkJCXZhciB0cmVlID0gewoJCQkJ
bGVhZnM6IHt9LAoKCQkJCXJvb3Q6IGZ1bmN0aW9uKCkgewoJCQkJCXJldHVybiB0
aGlzLmdldCgncm9vdCcpOwoJCQkJfSwKCgkJCQlnZXQ6IGZ1bmN0aW9uKGlkKSB7
CgkJCQkJcmV0dXJuIHRoaXMubGVhZnNbaWRdOwoJCQkJfSwKCgkJCQlwdXNoOiBm
dW5jdGlvbihmaWxlKSB7CgkJCQkJdGhpcy5sZWFmc1tmaWxlLmlkXSA9IGZpbGU7
CgkJCQkJZmlsZS50cmVlID0gdGhpczsKCgkJCQkJaWYoZmlsZS5wYXJlbnQgJiYg
dGhpcy5sZWFmc1tmaWxlLnBhcmVudF0pIHsKCQkJCQkJdGhpcy5sZWFmc1tmaWxl
LnBhcmVudF0uY2hpbGRyZW4ucHVzaChmaWxlLmlkKQoJCQkJCX0KCQkJCX0sCgoJ
CQkJZ2V0RGVzY2VuZGFudHNPclNlbGY6IGZ1bmN0aW9uKGlkKSB7CgkJCQkJdmFy
IHJlc3VsdCA9IFtdOwoJCQkJCXZhciBzZWxmID0gdGhpcy5nZXQoaWQpOwoKCQkJ
CQlpZihzZWxmKSB7CgkJCQkJCXJlc3VsdC5wdXNoKHNlbGYpOwoKCQkJCQkJaWYo
c2VsZi5jaGlsZHJlbikgewoJCQkJCQkJQXJyYXkuZm9yRWFjaChzZWxmLmNoaWxk
cmVuLCBmdW5jdGlvbihjaGlsZCkgewoJCQkJCQkJCXJlc3VsdCA9IHJlc3VsdC5j
b25jYXQodGhpcy5nZXREZXNjZW5kYW50c09yU2VsZihjaGlsZCkpOwoKCQkJCQkJ
CX0uYmluZCh0aGlzKSkKCQkJCQkJfQoJCQkJCX0KCgkJCQkJcmV0dXJuIHJlc3Vs
dDsKCQkJCX0KCQkJfTsKCgkJCWZ1bmN0aW9uIGNyZWF0ZU5vZGUoZGF0YSkgewoJ
CQkJdmFyIGZvbGRlciA9IHsKCQkJCQlpZDogbnVsbCwKCQkJCQlwYXJlbnQ6IG51
bGwsCgkJCQkJY2hpbGRyZW46IFtdLAoJCQkJCXRyZWU6IHRyZWUsCgkJCQkJaXNP
cGVuOiBmYWxzZSwKCQkJCQlsaXN0OiBmdW5jdGlvbigpIHsKCQkJCQkJdmFyIHJl
c3VsdCA9IFtdOwoKCQkJCQkJQXJyYXkuZm9yRWFjaCh0aGlzLmNoaWxkcmVuLCBm
dW5jdGlvbihpZCkgewoJCQkJCQkJcmVzdWx0LnB1c2godGhpcy50cmVlLmdldChp
ZCkpCgoJCQkJCQl9LmJpbmQodGhpcykpCgoJCQkJCQlyZXN1bHQuc29ydChmdW5j
dGlvbihhLGIpIHsKCQkJCQkJCXJldHVybiAoYS5uYW1lLnRvTG93ZXJDYXNlKCkg
PCBiLm5hbWUudG9Mb3dlckNhc2UoKSA/IC0xIDogKGEubmFtZS50b0xvd2VyQ2Fz
ZSgpID4gYi5uYW1lLnRvTG93ZXJDYXNlKCkgPyAxIDogMCkpOwoJCQkJCQl9KQoK
CQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQl9LAoKCQkJCQl0b2dnbGVPcGVuOiBm
dW5jdGlvbigpIHsKCQkJCQkJdGhpcy5pc09wZW4gPSAhIHRoaXMuaXNPcGVuOwoJ
CQkJCX0sCgoJCQkJCWlzVmlzaWJsZTogZnVuY3Rpb24oKSB7CgkJCQkJCXJldHVy
biB0aGlzLnBhcmVudCA9PSAncm9vdCcgfHwgKHRoaXMudHJlZS5nZXQodGhpcy5w
YXJlbnQpLmlzVmlzaWJsZSgpICYmIHRoaXMudHJlZS5nZXQodGhpcy5wYXJlbnQp
LmlzT3Blbik7CgkJCQkJfQoJCQkJfQoKCQkJCXJldHVybiAkLmV4dGVuZChmb2xk
ZXIsIGRhdGEpOwoJCQl9OwoKCQkJZnVuY3Rpb24gY29udmVydEF0dHppcFJlc3Bv
bnNlKHJlc3BvbnNlLCBwYXJlbnQpIHsKCQkJCWZvcih2YXIgbmFtZSBpbiByZXNw
b25zZSkgewoJCQkJCXZhciBmaWxlID0ge307CgoJCQkJCWZpbGUuaWQgPSBuYW1l
OwoJCQkJCWZpbGUucGFyZW50ID0gcGFyZW50OwoKCQkJCQlpZihwYXJlbnQpIHsK
CQkJCQkJZmlsZS5pZCA9IHBhcmVudCArICcvJyArIGZpbGUuaWQ7CgkJCQkJfQoK
CQkJCQkvLyBwbGFpbiBmaWxlCgkJCQkJaWYocmVzcG9uc2VbbmFtZV0gaW5zdGFu
Y2VvZiBBcnJheSkgewoJCQkJCQlmaWxlID0gJC5leHRlbmQoZmlsZSwgdXRpbHMu
Y3JlYXRlRmlsZURlc2NyaXB0aW9uKHZpZXdlckRhdGEsIHsKCQkJCQkJCW5hbWU6
IG5hbWUsCgkJCQkJCQlzaXplOiByZXNwb25zZVtuYW1lXVswXSwKCQkJCQkJCWVu
Y3J5cHRlZDogcmVzcG9uc2VbbmFtZV1bMV0sCgkJCQkJCQlwYXRoOiByZXNwb25z
ZVtuYW1lXVsyXSwKCQkJCQkJCVBhcnRJRDogUGFydElECgoJCQkJCQl9LCB0cmVl
Lmxlbmd0aCkpOwoKCQkJCQkJZmlsZSA9IGNyZWF0ZU5vZGUoZmlsZSk7CgoJCQkJ
CQl0cmVlLnB1c2goZmlsZSk7CgoJCQkJCS8vIGZvbGRlcgoJCQkJCX0gZWxzZSB7
CgkJCQkJCWZpbGUgPSAkLmV4dGVuZChmaWxlLCB7CgkJCQkJCQluYW1lOiBuYW1l
LnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDEpLAoJCQkJCQkJdHlwZTogJ2Zv
bGRlcicsCgkJCQkJCQlleHQ6ICdmJywKCQkJCQkJCWlzRm9sZGVyOiAxCgkJCQkJ
CX0pOwoKCQkJCQkJZmlsZSA9IGNyZWF0ZU5vZGUoZmlsZSk7CgoJCQkJCQl0cmVl
LnB1c2goZmlsZSk7CgoJCQkJCQljb252ZXJ0QXR0emlwUmVzcG9uc2UocmVzcG9u
c2VbbmFtZV0sIGZpbGUuaWQpCgkJCQkJfQoJCQkJfQoJCQl9OwoKCQkJdmFyIHJv
b3QgPSBjcmVhdGVOb2RlKHtpZDogJ3Jvb3QnLCBwYXJlbnQ6IG51bGx9KTsKCQkJ
dHJlZS5wdXNoKHJvb3QpCgoJCQljb252ZXJ0QXR0emlwUmVzcG9uc2UocmVzcG9u
c2VbMl1bMV0sIHJvb3QuaWQpOwoKCQkJcmV0dXJuIHRyZWU7CgkJfSwKCgkJY3Jl
YXRlTGlua0Rlc2NyaXB0aW9uOiBmdW5jdGlvbih2aWV3ZXJEYXRhLCBmaWxlRGF0
YSwgaW5kZXgpIHsKCQkJdmFyIGZpbGUgPSAkLmV4dGVuZCh7CgkJCQlDb250ZW50
VHlwZTogICcnLAoJCQkJYXZzdGF0dXM6ICAgICAnJywKCQkJCW5hbWU6ICAgICAg
ICAgJycsCgkJCQlzaXplOiAgICAgICAgICAwLAoJCQkJZG93bmxvYWRsaW5rOiAn
JywKCQkJCWR1ZWRhdGU6ICAgICAgJycsCgkJCQlleHQ6ICAgICAgICAgICcnCgkJ
CX0sIGZpbGVEYXRhKTsKCgkJCWlmICh0eXBlb2YgZmlsZS5uYW1lID09ICdzdHJp
bmcnKSB7CgkJCQlmaWxlLmV4dCA9IGZpbGUubmFtZS5yZXBsYWNlKC8oLiopXC4v
LCAnJykudG9Mb3dlckNhc2UoKTsKCQkJfQoKCQkJZmlsZS5pY29uVHlwZSA9IHRo
aXMuZ2V0RmlsZUljb25UeXBlKGZpbGUpOwoKCQkJcmV0dXJuIGZpbGU7CgkJfSwK
CgkJcHJlbG9hZEltYWdlczogZnVuY3Rpb24oc3JjKSB7CgkJCWlmICh0eXBlb2Yg
c3JjID09PSAnc3RyaW5nJykKCQkJCXNyYyA9IHNyYy5zcGxpdCgnLCcpOwoKCQkJ
ZWxzZSBpZiAoISQuaXNBcnJheShzcmMpKQoJCQkJcmV0dXJuIC0xOwoKCQkJLy9n
ZW5lcmF0ZSByYW5kb20gaWQKCQkJdmFyIG5hbWVzcGFjZSA9ICcjcHJlbG9hZElN
RycgKyAkLmV4cGFuZG87CgoJCQkvL2NyZWF0ZSBwYXJlbnQgZWxlbWVudCBmb3Ig
aW1hZ2VzCgkJCWlmICghJChuYW1lc3BhY2UpWzBdKQoJCQkJJCgnPGRpdiAvPics
IHtpZDogbmFtZXNwYWNlLnNsaWNlKDEpfSkuaGlkZSgpLmFwcGVuZFRvKCdib2R5
Jyk7CgoJCQkvL2FwcGVuZCBpbWFnZXMKCQkJJC5lYWNoKHNyYywgZnVuY3Rpb24g
KCkgewoJCQkJJCgnPGltZyAvPicsIHtzcmM6IHRoaXN9KS5hcHBlbmRUbyhuYW1l
c3BhY2UpOwoJCQl9KTsKCQl9LAoKCQljcmVhdGVGaWxlRGVzY3JpcHRpb246IGZ1
bmN0aW9uKHZpZXdlckRhdGEsIGZpbGVEYXRhLCBpbmRleCkgewoKCQkJLy8gTUFJ
TC05NDg3CgkJCWlmIChmaWxlRGF0YS5Db250ZW50TmFtZSkgewoJCQkJdHJ5IHsK
CQkJCQlmaWxlRGF0YS5Db250ZW50TmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChm
aWxlRGF0YS5Db250ZW50TmFtZSk7CgkJCQkJZmlsZURhdGEuQ29udGVudEVuY29k
aW5nID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVEYXRhLkNvbnRlbnRFbmNvZGlu
Zyk7IC8vIE1BSUwtMTE4OTkKCQkJCX0gY2F0Y2ggKGUpIHt9CgkJCX0KCgkJCXZh
ciBmaWxlID0gJC5leHRlbmQoewoJCQkJU3ViamVjdDogICAgICAgICcnLAoJCQkJ
bmFtZTogICAgICAgICAgICcnLAoJCQkJc2l6ZTogICAgICAgICAgICAwLAoJCQkJ
UGFydElEOiAgICAgICAgICcnLAoJCQkJQ2hhbm5lbDogICAgICAgICcnLAoJCQkJ
dG5lZl9pZDogICAgICAgICcnLAoJCQkJQ29udGVudFRleHQ6ICAgICcnLAoJCQkJ
Q29udGVudFR5cGU6ICAgICcnLAoJCQkJaXNSRkM4MjI6ICAgICAgICAwLAoJCQkJ
RG9udFNob3c6ICAgICAgICAwLAoJCQkJRm9yY2VBZGROb3R5cGU6ICAwLAoJCQkJ
U2hvd1RodW1ibmFpbDogICAwLAoJCQkJQWRkUGhvdG86ICAgICAgICAwLAoJCQkJ
SXNJbWFnZTogICAgICAgICAwLAoJCQkJaXNUTkVGOiAgICAgICAgICAwLAoJCQkJ
SXNSdGY6ICAgICAgICAgICAwLAoJCQkJSXNNcDM6ICAgICAgICAgICAwLAoJCQkJ
ZXh0OiAgICAgICAgICAgICcnLAoJCQkJQm9keVN0YXJ0OiAgICAgICcnLAoJCQkJ
T3JpZ2luYWxCb2R5TGVuOicnLAoJCQkJQ29udGVudE5hbWU6ICAgICcnLAoJCQkJ
Q29udGVudEVuY29kaW5nOicnLAoJCQkJZW5jcnlwdGVkOiAgICAgICAwLAoJCQkJ
aXNGb2xkZXI6ICAgICAgICAwCgkJCX0sIGZpbGVEYXRhKTsKCgkJCWlmIChmaWxl
LmlzUkZDODIyKSB7CgkJCQlpZiAoZmlsZS5TdWJqZWN0KSB7CgkJCQkJZmlsZS5u
YW1lID0gZmlsZS5TdWJqZWN0OwoJCQkJfSBlbHNlIHsKCQkJCQlmaWxlLm5hbWUg
PSBMYW5nLmdldCgnbWVzc2FnZS5lbWFpbC51bnRpdGxlZCcpOwoJCQkJfQoJCQkJ
ZmlsZS5leHQgPSAnZW1sJzsKCQkJfSBlbHNlIHsKCQkJCWlmIChmaWxlLkZpbGVO
YW1lKSB7CgkJCQkJZmlsZS5uYW1lID0gZmlsZS5GaWxlTmFtZTsKCQkJCX0KCQkJ
CWlmICh0eXBlb2YgZmlsZS5uYW1lID09ICdzdHJpbmcnKSB7CgkJCQkJZmlsZS5l
eHQgPSBmaWxlLm5hbWUucmVwbGFjZSgvKC4qKVwuLywgJycpLnRvTG93ZXJDYXNl
KCk7CgkJCQl9CgkJCX0KCgkJCWZpbGUuaWNvblR5cGUgICAgICAgICAgID0gdGhp
cy5nZXRGaWxlSWNvblR5cGUoZmlsZSk7CgkJCWZpbGUuYXR0YWNoUHJldmlld1Vy
bCAgID0gdGhpcy5nZXRBdHRhY2hQcmV2aWV3VXJsKHZpZXdlckRhdGEsIGZpbGUs
IGluZGV4KTsKCQkJZmlsZS5kb3dubG9hZFVybCAgICAgICAgPSB0aGlzLmdldEZp
bGVEb3dubG9hZFVybCh2aWV3ZXJEYXRhLCBmaWxlLCB0cnVlKTsKCQkJZmlsZS5k
b3dubG9hZEZyb21aaXBVcmwgPSB0aGlzLmdldEZpbGVEb3dubG9hZEZyb21aaXBV
cmwodmlld2VyRGF0YSwgZmlsZSk7CgkJCWZpbGUucHJldmlld1dpdGhDcm9wVXJs
ID0gdGhpcy5nZXRJbWFnZVByZXZpZXdVcmwodmlld2VyRGF0YSwgZmlsZSwgMCwg
MTYwLCAxMjApOwoJCQlmaWxlLnByZXZpZXdVcmwgICAgICAgICA9IHRoaXMuZ2V0
SW1hZ2VQcmV2aWV3VXJsKHZpZXdlckRhdGEsIGZpbGUsIDkwKTsKCQkJZmlsZS5w
cmV2aWV3TVNWVXJsICAgICAgPSB0aGlzLmdldE1TVlVybCh2aWV3ZXJEYXRhLCBm
aWxlKTsKCQkJZmlsZS5kZWZhdWx0UHJldmlld1VybCAgPSB0aGlzLmdldEltYWdl
UHJldmlld1VybCh2aWV3ZXJEYXRhLCBmaWxlKTsKCQkJZmlsZS5tZXNzYWdlUmVh
ZFVybCAgICAgPSB0aGlzLmdldE1lc3NhZ2VSZWFkVXJsKHZpZXdlckRhdGEsIGZp
bGUpOwoJCQlmaWxlLmltYWdlVXJsICAgICAgICAgICA9IHRoaXMuZ2V0SW1hZ2VV
cmwodmlld2VyRGF0YSwgZmlsZSk7CgkJCWZpbGUuYWRkUGhvdG9VcmwgICAgICAg
ID0gdGhpcy5nZXRGaWxlQWRkUGhvdG9Vcmwodmlld2VyRGF0YSwgZmlsZSk7CgkJ
CWZpbGUubm90eXBlSW5GcmFtZVVybCAgID0gdGhpcy5nZXRGaWxlRG93bmxvYWRV
cmwodmlld2VyRGF0YSwgZmlsZSwgZmFsc2UsIHRydWUpOwoJCQlmaWxlLm1wM1Vy
bCAgICAgICAgICAgICA9IHRoaXMuZ2V0TXAzVXJsKHZpZXdlckRhdGEsIGZpbGUp
OwoJCQlmaWxlLnR5cGUgICAgICAgICAgICAgICA9IHRoaXMuZ2V0RmlsZVR5cGUo
ZmlsZSk7CgkJCWZpbGUuaHVtYW5TaXplICAgICAgICAgID0gdGhpcy5nZXRGaWxl
SHVtYW5TaXplKGZpbGUpOwoKCQkJaWYgKHRoaXMuaXNHcmFwaGljUHJldmlldyhm
aWxlKSkgewoJCQkJZmlsZS5TaG93VGh1bWJuYWlsID0gMTsKCQkJfQoKCQkJcmV0
dXJuIGZpbGU7CgkJfSwKCgkJZ2V0RmlsZUh1bWFuU2l6ZTogZnVuY3Rpb24oZmls
ZSkgewoJCQlmdW5jdGlvbiByb3VuZCh2YWx1ZSwgcHJlY2lzaW9uKSB7CgkJCQly
ZXR1cm4gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pLnRvU3RyaW5nKCkucmVwbGFj
ZSgvMCskLywgJycpLnJlcGxhY2UoL1wuJC8sICcnKTsKCQkJfQoKCQkJICAgICAg
IGlmIChmaWxlLnNpemUgPCAgICAgICAgICAgICAgICAxMDI0ICkgeyByZXR1cm4g
eyBzaXplOiAgICAgICBmaWxlLnNpemUgICAgICAgICAgICAgICAgICAgICAgICwg
dW5pdDogICdCJyB9CgkJCX0gZWxzZSBpZiAoZmlsZS5zaXplIDwgICAgICAgICAg
ICAgMTA0ODU3NiApIHsgcmV0dXJuIHsgc2l6ZTogcm91bmQoZmlsZS5zaXplIC8g
ICAgICAgICAgICAgMTAyNCwgMCksIHVuaXQ6ICdrQicgfQoJCQl9IGVsc2UgaWYg
KGZpbGUuc2l6ZSA8ICAgICAgICAgIDEwNzM3NDE4MjQgKSB7IHJldHVybiB7IHNp
emU6IHJvdW5kKGZpbGUuc2l6ZSAvICAgICAgICAgIDEwNDg1NzYsIDIpLCB1bml0
OiAnTUInIH0KCQkJfSBlbHNlIGlmIChmaWxlLnNpemUgPCAgICAgICAxMDk5NTEx
NjI3Nzc2ICkgeyByZXR1cm4geyBzaXplOiByb3VuZChmaWxlLnNpemUgLyAgICAg
ICAxMDczNzQxODI0LCAyKSwgdW5pdDogJ0dCJyB9CgkJCX0gZWxzZSBpZiAoZmls
ZS5zaXplIDwgICAgMTEyNTg5OTkwNjg0MjYyMCApIHsgcmV0dXJuIHsgc2l6ZTog
cm91bmQoZmlsZS5zaXplIC8gICAgMTA5OTUxMTYyNzc3NiwgMiksIHVuaXQ6ICdU
QicgfQoJCQl9IGVsc2UgaWYgKGZpbGUuc2l6ZSA8IDEsMTQ4NDE3OTA0OTc5NDhF
MTcgKSB7IHJldHVybiB7IHNpemU6IHJvdW5kKGZpbGUuc2l6ZSAvIDExMjU4OTk5
MDY4NDI2MjAsIDIpLCB1bml0OiAnUEInIH0KCQkJfQoJCX0sCgoJCWdldEF0dGFj
aFByZXZpZXdVcmw6IGZ1bmN0aW9uIChkYXRhLCBmaWxlLCBpbmRleCkgewoJCQly
ZXR1cm4gJy9hdHRhY2hlcy12aWV3ZXIvPycgKyBhanMudG9RdWVyeSh7CgkJCQlp
ZDogZGF0YS5JZCwKCQkJCV9hdjogZmlsZS5QYXJ0SUQsCgkJCQkneC1lbWFpbCc6
IG1haWxydS51c2VyZW1haWwKCQkJfSk7CgkJfSwKCgkJZ2V0RmlsZURvd25sb2Fk
RnJvbVppcFVybDogZnVuY3Rpb24oZGF0YSwgZmlsZSkgewoJCQlyZXR1cm4gJy9j
Z2ktYmluL2dldGF0dGFjaD9tb2RlPWF0dGFjaG1lbnQtemlwJmlkPScgKyBmaWxl
LlBhcnRJRCArICcmZmlsZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGUucGF0
aCk7CgkJfSwKCgkJZ2V0RmlsZURvd25sb2FkVXJsOiBmdW5jdGlvbiAoZGF0YSwg
ZmlsZSwgbm90eXBlLCBmcmFtZSkgewoJCQl2YXIgcmVzdWx0ID0gJyc7CgkJCXZh
ciBwYXJhbXMgPSB7CgkJCQlpZDogZmlsZS5QYXJ0SUQsCgkJCQliczogZmlsZS5C
b2R5U3RhcnQsCgkJCQlibDogZmlsZS5PcmlnaW5hbEJvZHlMZW4sCgkJCQljdDog
ZmlsZS5Db250ZW50VHlwZSwKCQkJCWNuOiBmaWxlLkNvbnRlbnROYW1lLAoJCQkJ
Y3RlOiBmaWxlLkNvbnRlbnRFbmNvZGluZwoJCQl9OwoJCQlpZiAobm90eXBlKSB7
CgkJCQkkLmV4dGVuZChwYXJhbXMsIHsKCQkJCQlub3R5cGU6IDEKCQkJCX0pOwoJ
CQl9CgkJCWlmIChmcmFtZSkgewoJCQkJJC5leHRlbmQocGFyYW1zLCB7CgkJCQkJ
ZnJhbWU6IDEKCQkJCX0pOwoJCQl9CgkJCWlmIChmaWxlLmlzVE5FRiAmJiAhZmls
ZS5Jc1J0ZikgewoJCQkJcmVzdWx0ID0gJy9jZ2ktYmluL2dldF90bmVmX3BhcnQ/
JyArIGFqcy50b1F1ZXJ5KCQuZXh0ZW5kKHBhcmFtcywgewoJCQkJCXRuZWZfaWQ6
IGZpbGUudG5lZl9pZCwKCQkJCQltb2RlOiAndG5lZl9hdHRhY2gnCgkJCQl9KSk7
CgkJCX0gZWxzZSB7CgoJCQkJdmFyIGJhc2VVcmwgPSAnL2NnaS1iaW4vZ2V0YXR0
YWNoPyc7CgoJCQkJaWYgKCFmcmFtZSkgewoJCQkJCWJhc2VVcmwgPSBsb2NhdGlv
bi5wcm90b2NvbCArICcvLycgKyBkYXRhLk1haW5NYWlsSG9zdCArIGJhc2VVcmw7
CgkJCQl9CgoJCQkJcmVzdWx0ID0gYmFzZVVybCArIGFqcy50b1F1ZXJ5KCQuZXh0
ZW5kKHBhcmFtcywgewoJCQkJCWZpbGU6IGZpbGUubmFtZSwKCQkJCQltb2RlOiAn
YXR0YWNobWVudCcsCgkJCQkJY2hhbm5lbDogZmlsZS5DaGFubmVsCgkJCQl9KSk7
CgkJCX0KCQkJcmV0dXJuIHJlc3VsdDsKCQl9LAoKCQlnZXRGaWxlQWRkUGhvdG9V
cmw6IGZ1bmN0aW9uIChkYXRhLCBmaWxlKSB7CgkJCXZhciByZXN1bHQgPSAnJzsK
CQkJaWYgKGZpbGUuQWRkUGhvdG8pIHsKCQkJCXJlc3VsdCA9ICcvL2ZvdG8ubWFp
bC5ydS9jZ2ktYmluL3Bob3RvL2FkZHBob3RvPycgKyBhanMudG9RdWVyeSh7CgkJ
CQkJZnJvbW1haWw6IGZpbGUuUGFydElELAoJCQkJCW1vZGU6ICcwJwoJCQkJfSk7
CgkJCX0KCQkJcmV0dXJuIHJlc3VsdDsKCQl9LAoKCQlnZXRNZXNzYWdlUmVhZFVy
bDogZnVuY3Rpb24gKGRhdGEsIGZpbGUpIHsKCQkJdmFyIHJlc3VsdCA9ICcnOwoJ
CQlpZiAoZmlsZS5pc1JGQzgyMiAmJiAhZmlsZS5Eb250U2hvdykgewoJCQkJcmVz
dWx0ID0gbWFpbHJ1LmdldFBhZ2VVUkwoJ3JlYWRtc2cnLCB7IGlkOiBmaWxlLlBh
cnRJRCB9KTsKCgkJCQlpZiAoZmlsZS5Gb3JjZUFkZE5vdHlwZSkgewoJCQkJCXJl
c3VsdCArPSAnP25vdHlwZT0xJzsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gcmVzdWx0
OwoJCX0sCgoJCWlzR3JhcGhpY1ByZXZpZXc6IGZ1bmN0aW9uIChmaWxlKSB7CgkJ
CXJldHVybiAobWFpbHJ1WydJc01SVkdyYXBoaWNQcmV2aWV3RW5hYmxlZCddICYm
IChmaWxlLmV4dCA9PSAicHNkIiB8fCBmaWxlLmV4dCA9PSAidGdhIiB8fCBmaWxl
LmV4dCA9PSAiYWkiIHx8IGZpbGUuZXh0ID09ICJ0aWYiIHx8IGZpbGUuZXh0ID09
ICJ0aWZmIiB8fCBmaWxlLmV4dCA9PSAiZXBzIikpOwoJCX0sCgoJCWlzT2ZmaWNl
UHJldmlldzogZnVuY3Rpb24oZmlsZSkgewoJCQlyZXR1cm4gKAoJCQkJICAgKG1h
aWxydVsnSXNDb3JwVXNlciddIHx8IChtYWlscnVbJ0lzTVJWT2ZmaWNlUHJldmll
d09ubHlSZWFkbXNnJ10gJiYgbWFpbHJ1Wydpc1JlYWRNc2cnXSkpCgkJCQkmJiAo
bWFpbHJ1WydJc01SVk1TRG9jUHJldmlld0VuYWJsZWQnXSB8fCBtYWlscnVbJ0lz
TVJWTVNQcHRQcmV2aWV3RW5hYmxlZCddIHx8IG1haWxydVsnSXNNUlZNU0V4Y2Vs
UHJldmlld0VuYWJsZWQnXSkKCQkJCSYmIChmaWxlLmV4dCA9PSAnZG9jJyB8fCBm
aWxlLmV4dCA9PSAnZG9jeCcgfHwgZmlsZS5leHQgPT0gJ3hscycgfHwgZmlsZS5l
eHQgPT0gJ3hsc3gnIHx8IGZpbGUuZXh0ID09ICdwcHQnIHx8IGZpbGUuZXh0ID09
ICdwcHR4JykKCQkJKTsKCQl9LAoKCQlpc0NTVlByZXZpZXc6IGZ1bmN0aW9uIChm
aWxlKSB7CgkJCXJldHVybiAobWFpbHJ1WydJc01SVkNzdlByZXZpZXdFbmFibGVk
J10gJiYgZmlsZS5leHQgPT0gImNzdiIpOwoJCX0sCgoJCWdldEltYWdlVXJsOiBm
dW5jdGlvbiAoZGF0YSwgZmlsZSkgewoJCQl2YXIgcmVzdWx0ID0gJyc7CgkJCXZh
ciBwYXJhbXMgPSB7CgkJCQlpZDogZmlsZS5QYXJ0SUQKCQkJfTsKCQkJaWYgKGZp
bGUuaXNUTkVGICYmICFmaWxlLklzUnRmKSB7CgkJCQlyZXN1bHQgPSAnL2NnaS1i
aW4vZ2V0X3RuZWZfcGFydD8nICsgYWpzLnRvUXVlcnkoJC5leHRlbmQoe30sIHBh
cmFtcywgewoJCQkJCXRuZWZfaWQ6IGZpbGUudG5lZl9pZCwKCQkJCQltb2RlOiAn
dG5lZl9hdHRhY2gnCgkJCQl9KSk7CgkJCX0gZWxzZSBpZiAodGhpcy5pc0dyYXBo
aWNQcmV2aWV3KGZpbGUpKSB7CgkJCQlyZXN1bHQgPSAnLy9kb2NzLicgKyAobWFp
bHJ1LlNpbmdsZURvbWFpbk5hbWUgfHwgJ21haWwucnUnKSArICcvcHJldmlldy8/
JyArIGFqcy50b1F1ZXJ5KHsKCQkJCQlzcmM6IGZpbGUuZG93bmxvYWRVcmwKCQkJ
CX0pOwoJCQl9IGVsc2UgaWYgKGZpbGUuU2hvd1RodW1ibmFpbCAmJiAoZmlsZS5J
c0ltYWdlIHx8IGZpbGUuQWRkUGhvdG8pKSB7CgoJCQkJcmVzdWx0ID0gJy8vJyAr
IGRhdGEuTWFpbk1haWxIb3N0ICsgJy9jZ2ktYmluL2dldGF0dGFjaD8nICsgYWpz
LnRvUXVlcnkoJC5leHRlbmQoe30sIHBhcmFtcywgewoJCQkJCWZpbGU6IGZpbGUu
bmFtZSwKCQkJCQltb2RlOiAnYXR0YWNobWVudCcsCgkJCQkJY2hhbm5lbDogZmls
ZS5DaGFubmVsCgkJCQl9KSk7CgoJCQkJaWYgKG1haWxydS5leGlmKXsKCgkJCQkJ
JC5leHRlbmQocGFyYW1zLCB7CgkJCQkJCWV4aWY6IDEsCgkJCQkJCWJzOiBmaWxl
LkJvZHlTdGFydCwKCQkJCQkJYmw6IGZpbGUuT3JpZ2luYWxCb2R5TGVuLAoJCQkJ
CQljdDogZmlsZS5Db250ZW50VHlwZSwKCQkJCQkJY246IGZpbGUuQ29udGVudE5h
bWUsCgkJCQkJCWN0ZTogZmlsZS5Db250ZW50RW5jb2RpbmcKCQkJCQl9KTsKCgkJ
CQkJcmVzdWx0ID0gKC93aW4yNy5kZXYvLnRlc3QobG9jYXRpb24uaG9zdCkgPyAn
Ly9pbWE2NC5kZXYnIDogJy8vYXBmJykgKyAnLicgKyBtYWlscnUuU2luZ2xlRG9t
YWluTmFtZSArICcvY2dpLWJpbi9yZWFkbXNnLycgKyBlbmNvZGVVUklDb21wb25l
bnQoZmlsZS5uYW1lKSArJz8nICsgYWpzLnRvUXVlcnkocGFyYW1zKTsKCQkJCX0K
CQkJfQoKCQkJcmV0dXJuIHJlc3VsdDsKCQl9LAoKCQlnZXRNcDNVcmw6IGZ1bmN0
aW9uIChkYXRhLCBmaWxlKSB7CgkJCXZhciByZXN1bHQgPSAnJzsKCQkJaWYgKGZp
bGUuSXNNcDMpIHsKCQkJCXZhciBwYXJhbXMgPSB7CgkJCQkJaWQ6IGZpbGUuUGFy
dElELAoJCQkJCW1vZGU6ICdhdHRhY2htZW50JywKCQkJCQljaGFubmVsOiBmaWxl
LkNoYW5uZWwKCQkJCX07CgkJCQlpZiAoZmlsZS5Gb3JjZUFkZE5vdHlwZSkgewoJ
CQkJCXBhcmFtcy5ub3R5cGUgPSAxOwoJCQkJfQoJCQkJcmVzdWx0ID0gJy8vJyAr
IGRhdGEuTWFpbEF0dGFjaFppcEhvc3QgKyAnL2NnaS1iaW4vcmVhZG1zZy8nICsg
ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGUubmFtZSkgKyAnPycgKyBhanMudG9RdWVy
eShwYXJhbXMpOwoJCQl9CgkJCXJldHVybiByZXN1bHQ7CgkJfSwKCgkJZ2V0SW1h
Z2VQcmV2aWV3VXJsOiBmdW5jdGlvbiAoZGF0YSwgZmlsZSwgcHMsIGZ4LCBmeSkg
ewoJCQl2YXIgdXJsID0gJyc7CgkJCWlmICh0aGlzLmlzR3JhcGhpY1ByZXZpZXco
ZmlsZSkgfHwgdGhpcy5pc09mZmljZVByZXZpZXcoZmlsZSkpIHsKCQkJCWlmIChm
eCA9PSAxNjAgJiYgZnkgPT0gMTIwKSB7CgkJCQkJdXJsID0gJy8vZG9jcy4nICsg
KG1haWxydS5TaW5nbGVEb21haW5OYW1lIHx8ICdtYWlsLnJ1JykgKyAnL3ByZXZp
ZXcvMTYweDEyMC8/JyArIGFqcy50b1F1ZXJ5KHsKCQkJCQkJc3JjOiBmaWxlLmRv
d25sb2FkVXJsCgkJCQkJfSk7CgkJCQl9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5n
dGggPT0gMyAmJiBwcyA9PSA5MCkgewoJCQkJCXVybCA9ICcvL2RvY3MuJyArICht
YWlscnUuU2luZ2xlRG9tYWluTmFtZSB8fCAnbWFpbC5ydScpICsgJy9wcmV2aWV3
LzkweDkwLz8nICsgYWpzLnRvUXVlcnkoewoJCQkJCQlzcmM6IGZpbGUuZG93bmxv
YWRVcmwKCQkJCQl9KTsKCQkJCX0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9
PSAyKSB7CgkJCQkJdXJsID0gJy8vZG9jcy4nICsgKG1haWxydS5TaW5nbGVEb21h
aW5OYW1lIHx8ICdtYWlsLnJ1JykgKyAnL3ByZXZpZXcvMjA2eDIwNi8/JyArIGFq
cy50b1F1ZXJ5KHsKCQkJCQkJc3JjOiBmaWxlLmRvd25sb2FkVXJsCgkJCQkJfSk7
CgkJCQl9CgkJCX0gZWxzZSBpZiAoZmlsZS5BZGRQaG90byB8fCAoZmlsZS5Jc0lt
YWdlICYmICFmaWxlLmlzVE5FRikpIHsKCQkJCXZhciBwYXJhbXMgPSB7CgkJCQkJ
aWQ6IGZpbGUuUGFydElELAoJCQkJCW1vZGU6ICdhdHRhY2htZW50JywKCQkJCQlj
aGFubmVsOiBmaWxlLkNoYW5uZWwsCgkJCQkJYnM6IGZpbGUuQm9keVN0YXJ0LAoJ
CQkJCWJsOiBmaWxlLk9yaWdpbmFsQm9keUxlbiwKCQkJCQljdDogZmlsZS5Db250
ZW50VHlwZSwKCQkJCQljbjogZmlsZS5Db250ZW50TmFtZSwKCQkJCQljdGU6IGZp
bGUuQ29udGVudEVuY29kaW5nCgkJCQl9OwoJCQkJaWYgKGZpbGUuU2hvd1RodW1i
bmFpbCkgewoJCQkJCXBhcmFtcy5wcmV2aWV3ID0gMTsKCQkJCQlpZiggbWFpbHJ1
LmV4aWYgKSBwYXJhbXMuZXhpZiA9IDE7CgkJCQl9CgkJCQlpZiAocHMpIHsKCQkJ
CQlwYXJhbXMucHMgPSBwczsKCQkJCX0KCQkJCWlmIChmeCkgewoJCQkJCXBhcmFt
cy5meCA9IGZ4OwoJCQkJfQoJCQkJaWYgKGZ5KSB7CgkJCQkJcGFyYW1zLmZ5ID0g
Znk7CgkJCQl9CgkJCQl1cmwgPSAnLy8nOwoJCQkJaWYgKGZ4IHx8IGZ5KSB7CgkJ
CQkJdXJsICs9ICdhcGYuJyArIG1haWxydS5TaW5nbGVEb21haW5OYW1lOwoJCQkJ
fSBlbHNlIHsKCQkJCQl1cmwgKz0gZGF0YS5NYWlsQXR0YWNoUHJldmlld0hvc3Q7
CgkJCQl9CgkJCQl1cmwgKz0gJy9jZ2ktYmluL3JlYWRtc2cvJyArIGVuY29kZVVS
SUNvbXBvbmVudChmaWxlLm5hbWUpICsgJz8nICsgYWpzLnRvUXVlcnkocGFyYW1z
KTsKCQkJfQoJCQlyZXR1cm4gdXJsOwoJCX0sCgoJCWdldEFsbEZpbGVzRG93bmxv
YWRVcmw6IGZ1bmN0aW9uIChkYXRhKSB7CgkJCXZhciB1cmwgPSAnJzsKCQkJaWYg
KGRhdGEuQXR0YWNoQWxsZmlsZXNfbmFtZSAmJiBkYXRhLkF0dGFjaEFsbGZpbGVz
X0F0dGFjaEhvc3QgJiYgZGF0YS5BdHRhY2hBbGxmaWxlc19Nc2dJZCAmJiBkYXRh
LkF0dGFjaEFsbGZpbGVzX1BhcnRzSWQpIHsKCQkJCXZhciBwYXJhbXMgPSB7CgkJ
CQkJaWQ6IGRhdGEuQXR0YWNoQWxsZmlsZXNfTXNnSWQsCgkJCQkJcGFydGlkczog
ZGF0YS5BdHRhY2hBbGxmaWxlc19QYXJ0c0lkLAoJCQkJCW1vZGU6ICdhdHRhY2ht
ZW50JywKCQkJCQlmbmFtZTogZGF0YS5BdHRhY2hBbGxmaWxlc19uYW1lCgkJCQl9
OwoJCQkJdXJsID0gJy8vJyArIGRhdGEuQXR0YWNoQWxsZmlsZXNfQXR0YWNoSG9z
dCArICcvY2dpLWJpbi9nZXRhdHRhY2htZW50PycgKyBhanMudG9RdWVyeShwYXJh
bXMpOwoJCQl9CgkJCXJldHVybiB1cmw7CgkJfSwKCgkJZ2V0TVNWVXJsOiBmdW5j
dGlvbiAoZGF0YSwgZmlsZSwgZnJhbWUpIHsKCQkJdmFyIHJlc3VsdCA9ICcnLCB0
eXBlID0gdGhpcy5nZXRGaWxlVHlwZShmaWxlKSwgbW9kZSA9IChtYWlscnUuSXNN
eUNvbSkgPyAnbXNvJyA6ICdtc3YnOwoJCQlpZiAodHlwZSA9PSAnZG9jJyB8fCB0
eXBlID09ICdleGNlbCcgfHwgdHlwZSA9PSAncHAnKSB7CgkJCQl2YXIgcGFyYW1z
ID0gewoJCQkJCWZpbGU6IGZpbGUubmFtZSwKCQkJCQlpZDogZmlsZS5QYXJ0SUQs
CgkJCQkJbW9kZTogbW9kZSwKCQkJCQl0bmVmX2lkOiBmaWxlLnRuZWZfaWQsCgkJ
CQkJdHlwZTogdHlwZQoJCQkJfTsKCQkJCWlmIChmcmFtZSkgewoJCQkJCSQuZXh0
ZW5kKHBhcmFtcywgewoJCQkJCQlmcmFtZTogMQoJCQkJCX0pOwoJCQkJCXJlc3Vs
dCA9ICcvY2dpLWJpbi9nZXRhdHRhY2g/JyArIGFqcy50b1F1ZXJ5KHBhcmFtcyk7
CgkJCQl9IGVsc2UgewoJCQkJCXJlc3VsdCA9ICcvLycgKyBkYXRhLk1haW5NYWls
SG9zdCArICcvY2dpLWJpbi9nZXRhdHRhY2g/JyArIGFqcy50b1F1ZXJ5KHBhcmFt
cyk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHJlc3VsdDsKCQl9LAoKCQlnZXRNUlZV
cmw6IGZ1bmN0aW9uIChkYXRhLCBmaWxlLCBmcmFtZSkgewoJCQl2YXIgcmVzdWx0
ID0gJycsIHR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKGZpbGUpOwoJCQlpZiAodHlw
ZSA9PSAnZG9jJyB8fCB0eXBlID09ICdleGNlbCcgfHwgdHlwZSA9PSAncHAnKSB7
CgkJCQl2YXIgcGFyYW1zID0gewoJCQkJCWZpbGU6IGZpbGUubmFtZSwKCQkJCQlp
ZDogZmlsZS5QYXJ0SUQsCgkJCQkJbW9kZTogJ21ydicsCgkJCQkJdG5lZl9pZDog
ZmlsZS50bmVmX2lkLAoJCQkJCXR5cGU6IHR5cGUKCQkJCX07CgkJCQlpZiAoZnJh
bWUpIHsKCQkJCQkkLmV4dGVuZChwYXJhbXMsIHsKCQkJCQkJZnJhbWU6IDEKCQkJ
CQl9KTsKCQkJCQlyZXN1bHQgPSAnL2NnaS1iaW4vZ2V0YXR0YWNoPycgKyBhanMu
dG9RdWVyeShwYXJhbXMpOwoJCQkJfSBlbHNlIHsKCQkJCQlyZXN1bHQgPSAnLy8n
ICsgZGF0YS5NYWluTWFpbEhvc3QgKyAnL2NnaS1iaW4vZ2V0YXR0YWNoPycgKyBh
anMudG9RdWVyeShwYXJhbXMpOwoJCQkJfQoJCQl9CgkJCXJldHVybiByZXN1bHQ7
CgkJfSwKCgkJZ2V0RmlsZVR5cGU6IGZ1bmN0aW9uIChmaWxlKSB7CgkJCXZhciB0
eXBlID0gJ290aGVyJywgZXh0ID0gZmlsZS5leHQ7CgoJCQlpZiAoZmlsZS5Jc0lt
YWdlIHx8IGZpbGUuQWRkUGhvdG8gfHwgZXh0ID09ICdwbmcnIHx8IGV4dCA9PSAn
Z2lmJyB8fCBleHQgPT0gJ2pwZWcnIHx8IGV4dCA9PSAnanBnJyB8fCBleHQgPT0g
J2JtcCcgfHwgZXh0ID09ICd0aWZmJyB8fCB0aGlzLmlzR3JhcGhpY1ByZXZpZXco
ZmlsZSkpIHsKCQkJCXR5cGUgPSAnaW1hZ2UnOwoKCQkJfSBlbHNlIGlmIChleHQg
PT0gJ2RvYycgfHwgZXh0ID09ICdkb2N4JyB8fCBleHQgPT0gJ3dwZCcgfHwgZXh0
ID09ICd3cHMnIHx8IGV4dCA9PSAncnRmJykgewoJCQkJdHlwZSA9ICdkb2MnOwoK
CQkJfSBlbHNlIGlmIChleHQgPT0gJ3hscycgfHwgZXh0ID09ICd4bHN4JyB8fCBl
eHQgPT0gJ3hsc2InIHx8IGV4dCA9PSAneGxzbScgfHwgdGhpcy5pc0NTVlByZXZp
ZXcoZmlsZSkpIHsKCQkJCXR5cGUgPSAnZXhjZWwnOwoKCQkJfSBlbHNlIGlmIChl
eHQgPT0gJ3BwdCcgfHwgZXh0ID09ICdwcHR4JyB8fCBleHQgPT0gJ3BwcycgfHwg
ZXh0ID09ICdwcHN4JykgewoJCQkJdHlwZSA9ICdwcCc7CgoJCQl9IGVsc2UgaWYg
KGV4dCA9PSAncGRmJykgewoJCQkJdHlwZSA9ICdwZGYnOwoKCQkJfSBlbHNlIGlm
IChleHQgPT0gJ3ppcCcgfHwgZXh0ID09ICdyYXInIHx8IGV4dCA9PSAnN3onIHx8
IGZpbGUuQ29udGVudFR5cGUgPT0gJ2FwcGxpY2F0aW9uL3ppcCcgfHwgZmlsZS5D
b250ZW50VHlwZSA9PSAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcpIHsK
CQkJCXR5cGUgPSAnYXJjaGl2ZSc7CgoJCQl9IGVsc2UgaWYgKGZpbGUuQ29udGVu
dFRleHQgJiYgZXh0ID09ICd0eHQnKSB7CgkJCQl0eXBlID0gJ3RleHQnOwoJCQl9
CgoJCQlyZXR1cm4gdHlwZTsKCQl9LAoKCQlnZXRGaWxlSWNvblR5cGU6IGZ1bmN0
aW9uIChmaWxlKSB7CgkJCXZhciB0eXBlID0gZmlsZS5leHQ7CgoJCQlpZiAoZmls
ZS5Jc01wMykgewoJCQkJdHlwZSA9ICdtcDMnOwoKCQkJfSBlbHNlIGlmIChmaWxl
LkNvbnRlbnRUeXBlID09ICdhcHBsaWNhdGlvbi96aXAnKSB7CgkJCQl0eXBlID0g
J3ppcCc7CgoJCQl9IGVsc2UgaWYgKGZpbGUuQ29udGVudFR5cGUgPT0gJ2FwcGxp
Y2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnKSB7CgkJCQl0eXBlID0gJ3Jhcic7CgkJ
CX0KCgkJCXJldHVybiB0eXBlOwoJCX0KCX0pOwoKCWpzTG9hZGVyLmxvYWRlZCgn
e21haWxydS5hdHRhY2hWaWV3ZXJ9bWFpbHJ1LkZ1bGxBdHRhY2hWaWV3ZXIuVXRp
bHMnLCAxKTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9Qcm9qZWN0
cy9tYWlsLnJ1L0F0dGFjaFZpZXdlci9tYWlscnUuRnVsbEF0dGFjaFZpZXdlci5V
dGlscy5qcyBlbmQKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS9Qcm9q
ZWN0cy9tYWlsLnJ1L0F0dGFjaFZpZXdlci9tYWlscnUuRnVsbEF0dGFjaFZpZXdl
ci5MYXllci5qcyBzdGFydAoKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29y
ZS9Qcm9qZWN0cy9tYWlsLnJ1L0F0dGFjaFZpZXdlci9tYWlscnUuRnVsbEF0dGFj
aFZpZXdlci5TbGlkZXIuanMgc3RhcnQKCgovKioKCSAqIEBjbGFzcyBtYWlscnUu
RnVsbEF0dGFjaFZpZXdlci5TbGlkZXIKCSAqLwoJanNDbGFzcwoJLmNyZWF0ZSgn
bWFpbHJ1LkZ1bGxBdHRhY2hWaWV3ZXIuU2xpZGVyJykKCS5leHRlbmQoalF1ZXJ5
RXZlbnQpCgkuc3RhdGljcyh7CgoJCWlPU0RldmljZTogL2lQaG9uZXxpUG9kfGlQ
YWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLAoKCQlkZWZhdWx0T3B0aW9u
czogewoJCQlzbGlkZXJfbWF4X2hlaWdodDogMTUwLAoJCQlzbGlkZXJfdG1wbF91
cmw6ICdwYWdlcy9hdHRhY2h2aWV3ZXIvYXR0YWNodmlld2VyX19zbGlkZXInLAoJ
CQlzbGlkZXJfc2hvd19zcGVlZDogNTAwLAoJCQlzZWxlY3RlZEl0ZW1DbGFzczog
J2F0dGFjaHZpZXdlcl9fc2xpZGVyX19saXN0X19pdGVtX3NlbGVjdGVkJywKCQkJ
ZWFzaW5nOiAnc3dpbmcnLAoJCQlzcGVlZDogNTAwCgkJfQoJfSkKCS5tZXRob2Rz
KHsKCgkJZmlsZXM6IFtdLAoKCQlfX2NvbnN0cnVjdDogZnVuY3Rpb24ob3B0aW9u
cykgewoJCQl0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgbWFpbHJ1LkZ1bGxB
dHRhY2hWaWV3ZXIuU2xpZGVyLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTsKCgkJ
CWlmIChtYWlscnUuTmV3QXR0YWNoVmlld2VyUG9wdXApIHsKCQkJCXRoaXMub3B0
aW9ucy5zbGlkZXJfbWF4X2hlaWdodCA9IDEyMzsKCQkJfQoKCQkJdGhpcy5jb250
cm9sQ2xpY2tPYnNlcnZlciA9IHRoaXMuX2NvbnRyb2xDbGljay5iaW5kKHRoaXMp
OwoJCQl0aGlzLmxpc3RDbGlja09ic2VydmVyID0gdGhpcy5fbGlzdENsaWNrLmJp
bmQodGhpcyk7CgkJCXRoaXMucm9vdENsaWNrT2JzZXJ2ZXIgPSB0aGlzLl9yb290
Q2xpY2suYmluZCh0aGlzKTsKCQkJdGhpcy5zaG93U2xpZGVyQ29tcGxldGVPYnNl
cnZlciA9IHRoaXMuX3Nob3dTbGlkZXJDb21wbGV0ZS5iaW5kKHRoaXMpOwoJCQl0
aGlzLmhpZGVTbGlkZXJDb21wbGV0ZU9ic2VydmVyID0gdGhpcy5faGlkZVNsaWRl
ckNvbXBsZXRlLmJpbmQodGhpcyk7CgoJCQl0aGlzLiRkb2N1bWVudCA9ICQoZG9j
dW1lbnQpOwoJCQl0aGlzLiRib3ggPSAkKCcjQXR0YWNoVmlld2VyJyk7CgkJCXRo
aXMuJGRpdiA9ICQoJy5qcy1sYXllclNsaWRlcicsIHRoaXMuJGJveCkuY2xpY2so
dGhpcy5saXN0Q2xpY2tPYnNlcnZlcik7CgkJCXRoaXMuJHN3aXRjaGVyID0gJCgn
LmpzLXNsaWRlclN3aXRjaGVyJywgdGhpcy4kYm94KS5tb3VzZWRvd24oZmFsc2Up
OwoKCQkJaWYgKG1haWxydS5GdWxsQXR0YWNoVmlld2VyLlNsaWRlci5pT1NEZXZp
Y2UpIHsKCQkJCXRoaXMuJGRpdi5jc3MoJ2hlaWdodCcsIHRoaXMub3B0aW9ucy5z
bGlkZXJfbWF4X2hlaWdodCk7CgkJCX0KCQl9LAoKCQlyZWRyYXc6IGZ1bmN0aW9u
IChmaWxlcywgY2FsbGJhY2spIHsKCQkJdGhpcy5maWxlcyA9IGZpbGVzOwoJCQl0
aGlzLm9mZnNldCA9IHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CgoJCQlpZiAodGhp
cy4kY29udHJvbHMpIHsKCQkJCXRoaXMuJGNvbnRyb2xzLnVuYmluZCgnY2xpY2sn
LCB0aGlzLmNvbnRyb2xDbGlja09ic2VydmVyKTsKCQkJfQoKCQkJdGhpcy4kc3dp
dGNoZXIudW5iaW5kKCdjbGljaycsIHRoaXMucm9vdENsaWNrT2JzZXJ2ZXIpOwoK
CQkJdGhpcy4kZGl2LmZlc3QodGhpcy5vcHRpb25zLnNsaWRlcl90bXBsX3VybCwg
eyBGaWxlczogdGhpcy5maWxlcyB9LCBmdW5jdGlvbigpIHsKCQkJCXRoaXMuJHBy
ZXYgID0gJCgnLmpzLXNsaWRlclByZXYnLCAgdGhpcy4kZGl2KTsKCQkJCXRoaXMu
JG5leHQgID0gJCgnLmpzLXNsaWRlck5leHQnLCAgdGhpcy4kZGl2KTsKCQkJCXRo
aXMuJGlubmVyID0gJCgnLmpzLXNsaWRlcklubmVyJywgdGhpcy4kZGl2KTsKCQkJ
CXRoaXMuJGxpc3QgID0gJCgnLmpzLXNsaWRlckxpc3QnLCAgdGhpcy4kZGl2KTsK
CgkJCQl0aGlzLiRjb250cm9scyA9IHRoaXMuJHByZXYuYWRkKHRoaXMuJG5leHQp
OwoKCQkJCXRoaXMuJGNvbnRyb2xzLmJpbmQoJ2NsaWNrJywgdGhpcy5jb250cm9s
Q2xpY2tPYnNlcnZlcikubW91c2Vkb3duKGZhbHNlKTsKCgkJCQlpZiAodGhpcy5m
aWxlcy5sZW5ndGggPiAxKSB7CgkJCQkJdGhpcy4kc3dpdGNoZXIuYmluZCgnY2xp
Y2snLCB0aGlzLnJvb3RDbGlja09ic2VydmVyKS5hZGRDbGFzcygnYXR0YWNodmll
d2VyX19maWxlaW5mb19hY3RpdmUnKTsKCQkJCX0gZWxzZSB7CgkJCQkJdGhpcy4k
c3dpdGNoZXIucmVtb3ZlQ2xhc3MoJ2F0dGFjaHZpZXdlcl9fZmlsZWluZm9fYWN0
aXZlJyk7CgkJCQl9CgoJCQkJY2FsbGJhY2soKTsKCgkJCX0uYmluZCh0aGlzKSk7
CgkJfSwKCgkJc2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uIChpbmRleCkgewoJCQl0aGlz
LnNlbGVjdGVkSW5kZXggPSBpbmRleDsKCQkJaWYgKHRoaXMuJHByZXZpb3NTZWxl
Y3RlZCkgewoJCQkJdGhpcy4kcHJldmlvc1NlbGVjdGVkLnJlbW92ZUNsYXNzKHRo
aXMub3B0aW9ucy5zZWxlY3RlZEl0ZW1DbGFzcyk7CgkJCX0KCQkJdGhpcy4kcHJl
dmlvc1NlbGVjdGVkID0gdGhpcy4kbGlzdC5maW5kKCcuanMtaXRlbTplcSgnICsg
aW5kZXggKyAnKScpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5zZWxlY3RlZEl0ZW1D
bGFzcyk7CgkJfSwKCgkJc2V0U2xpZGU6IGZ1bmN0aW9uIChpbmRleCwgYW5pbWF0
ZSkgewoJCQl2YXIgbWluID0gMCwgbWF4ID0gdGhpcy5maWxlcy5sZW5ndGggLSB0
aGlzLml0ZW1Db3VudDsKCQkJdGhpcy4kcHJldi50b2dnbGUoaW5kZXggPiBtaW4p
OwoJCQl0aGlzLiRuZXh0LnRvZ2dsZShpbmRleCA8IG1heCk7CgkJCWlmICh0aGlz
LmZpbGVzLmxlbmd0aCA+IHRoaXMuaXRlbUNvdW50KSB7CgkJCQl0aGlzLm9mZnNl
dCA9IGluZGV4ID0gTWF0aC5taW4obWF4LCBNYXRoLm1heChpbmRleCwgbWluKSk7
CgkJCQl2YXIgb2Zmc2V0ID0gLShpbmRleCAqIHRoaXMuaXRlbVdpZHRoKTsKCQkJ
CWlmIChhbmltYXRlKSB7CgkJCQkJdGhpcy4kbGlzdC5hbmltYXRlKHsnbGVmdCc6
IG9mZnNldH0sIHRoaXMub3B0aW9ucy5zcGVlZCwgdGhpcy5vcHRpb25zLmVhc2lu
Zyk7CgkJCQl9IGVsc2UgewoJCQkJCXRoaXMuJGxpc3QuY3NzKCdsZWZ0Jywgb2Zm
c2V0KTsKCQkJCX0KCQkJfQoJCX0sCgoJCXNob3c6IGZ1bmN0aW9uKGFuaW1hdGUp
IHsKCQkJaWYgKHRoaXMudmlzaWJsZSAmJiAhdGhpcy5pc0hpZGVBbmltYXRlKSBy
ZXR1cm47CgoJCQl0aGlzLnRyaWdnZXJIYW5kbGVyKCdzdGFydFNob3cnKTsKCgkJ
CXRoaXMuaXNIaWRlQW5pbWF0ZSA9IDA7CgkJCXRoaXMuJGRpdi5zdG9wKHRydWUs
IGZhbHNlKTsKCgkJCWlmIChhbmltYXRlKSB7CgkJCQl0aGlzLmlzU2hvd0FuaW1h
dGUgPSAxOwoJCQkJdGhpcy4kZGl2LnNob3coKS5hbmltYXRlKHsKCQkJCQloZWln
aHQ6IHRoaXMub3B0aW9ucy5zbGlkZXJfbWF4X2hlaWdodAoJCQkJfSwgdGhpcy5v
cHRpb25zLnNsaWRlcl9zaG93X3NwZWVkLCB0aGlzLnNob3dTbGlkZXJDb21wbGV0
ZU9ic2VydmVyKTsKCQkJfSBlbHNlIHsKCQkJCXRoaXMudmlzaWJsZSA9IDE7CgkJ
CQl0aGlzLiRkaXYuY3NzKCdoZWlnaHQnLCB0aGlzLm9wdGlvbnMuc2xpZGVyX21h
eF9oZWlnaHQpLnNob3coKTsKCQkJfQoKCQkJdmFyIGl0ZW1HZW9tZXRyeSA9IHRo
aXMuZ2V0Rmlyc3RJdGVtR2VvbWV0cnkoKTsKCgkJCXRoaXMuaXRlbVdpZHRoID0g
aXRlbUdlb21ldHJ5WzBdOwoJCQl0aGlzLml0ZW1IZWlnaHQgPSBpdGVtR2VvbWV0
cnlbMV07CgoJCQl0aGlzLiRpbm5lci5jc3MoewoJCQkJaGVpZ2h0OiB0aGlzLml0
ZW1IZWlnaHQKCQkJfSk7CgoJCQl0aGlzLml0ZW1Db3VudCA9IE1hdGguZmxvb3Io
dGhpcy4kaW5uZXIuY3NzKCd3aWR0aCcsICcnKS53aWR0aCgpIC8gdGhpcy5pdGVt
V2lkdGgpOwoJCQl0aGlzLiRpbm5lci5jc3MoJ3dpZHRoJywgdGhpcy5pdGVtV2lk
dGggKiB0aGlzLml0ZW1Db3VudCk7CgkJfSwKCgkJaGlkZTogZnVuY3Rpb24oYW5p
bWF0ZSkgewoJCQlpZiAoIXRoaXMudmlzaWJsZSAmJiAhdGhpcy5pc1Nob3dBbmlt
YXRlKSByZXR1cm47CgoJCQl0aGlzLmlzU2hvd0FuaW1hdGUgPSAwOwoJCQl0aGlz
LiRkaXYuc3RvcCh0cnVlLCBmYWxzZSk7CgoJCQlpZiAoYW5pbWF0ZSkgewoJCQkJ
dGhpcy5pc0hpZGVBbmltYXRlID0gMTsKCQkJCXRoaXMuJGRpdi5hbmltYXRlKHsK
CQkJCQloZWlnaHQ6IDAKCQkJCX0sIHRoaXMub3B0aW9ucy5zbGlkZXJfc2hvd19z
cGVlZCwgdGhpcy5oaWRlU2xpZGVyQ29tcGxldGVPYnNlcnZlcik7CgkJCX0gZWxz
ZSB7CgkJCQl0aGlzLnZpc2libGUgPSAwOwoJCQkJdGhpcy4kZGl2LmhpZGUoKS5j
c3MoJ2hlaWdodCcsIDApOwoJCQl9CgkJfSwKCgkJZ2V0Rmlyc3RJdGVtR2VvbWV0
cnk6IGZ1bmN0aW9uICgpIHsKCQkJdmFyICRmaXJzdENoaWxkID0gdGhpcy4kbGlz
dC5maW5kKCcuanMtaXRlbTpmaXJzdCcpOwoKCQkJaWYoJGZpcnN0Q2hpbGQubGVu
Z3RoKSB7CgkJCQlyZXR1cm4gWwoJCQkJCSRmaXJzdENoaWxkWzBdLm9mZnNldFdp
ZHRoICArIChwYXJzZUludCgkLmNzcygkZmlyc3RDaGlsZFswXSwgJ21hcmdpbkxl
ZnQnKSkgfHwgMCkgKyAocGFyc2VJbnQoJC5jc3MoJGZpcnN0Q2hpbGRbMF0sICdt
YXJnaW5SaWdodCcgKSkgfHwgMCksCgkJCQkJJGZpcnN0Q2hpbGRbMF0ub2Zmc2V0
SGVpZ2h0ICsgKHBhcnNlSW50KCQuY3NzKCRmaXJzdENoaWxkWzBdLCAnbWFyZ2lu
VG9wJyApKSB8fCAwKSArIChwYXJzZUludCgkLmNzcygkZmlyc3RDaGlsZFswXSwg
J21hcmdpbkJvdHRvbScpKSB8fCAwKQoJCQkJXTsKCgkJCX0gZWxzZSB7CgkJCQly
ZXR1cm4gWzAsMF07CgkJCX0KCQl9LAoKCQlyZXNpemU6IGZ1bmN0aW9uICgpIHsK
CQkJaWYgKHRoaXMudmlzaWJsZSB8fCB0aGlzLmlzU2hvd0FuaW1hdGUpIHsKCQkJ
CXRoaXMuaGlkZSgpOwoJCQkJdGhpcy5zaG93KCk7CgkJCX0KCQkJdGhpcy5zZXRT
bGlkZSh0aGlzLnNlbGVjdGVkSW5kZXgpOwoJCX0sCgoJCV9zaG93U2xpZGVyQ29t
cGxldGU6IGZ1bmN0aW9uICgpIHsKCQkJdGhpcy5pc1Nob3dBbmltYXRlID0gMDsK
CQkJdGhpcy52aXNpYmxlID0gMTsKCQl9LAoKCQlfaGlkZVNsaWRlckNvbXBsZXRl
OiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuaXNIaWRlQW5pbWF0ZSA9IHRoaXMudmlz
aWJsZSA9IDA7CgkJCXRoaXMuJGRpdi5oaWRlKCk7CgkJfSwKCgkJX3Jvb3RDbGlj
azogZnVuY3Rpb24gKGV2dCkgewoJCQlpZiAoISQoZXZ0LnRhcmdldCkuY2xvc2Vz
dCgnYScsIHRoaXMuJHN3aXRjaGVyKS5sZW5ndGgpIHsKCQkJCXRoaXNbIXRoaXMu
aXNIaWRlQW5pbWF0ZSAmJiAodGhpcy52aXNpYmxlIHx8IHRoaXMuaXNTaG93QW5p
bWF0ZSkgPyAnaGlkZScgOiAnc2hvdyddKHRydWUpOwoJCQkJZXZ0LnByZXZlbnRE
ZWZhdWx0KCk7CgkJCX0KCQl9LAoKCQlfY29udHJvbENsaWNrOiBmdW5jdGlvbiAo
ZXZ0KSB7CgkJCXZhciAkdGFyZ2V0ID0gJChldnQudGFyZ2V0KTsKCQkJaWYgKCR0
YXJnZXQuaGFzQ2xhc3MoJ2pzLXNsaWRlclByZXYnKSkgewoJCQkJdGhpcy5zZXRT
bGlkZSh0aGlzLm9mZnNldCAtIHRoaXMuaXRlbUNvdW50ICsgMSwgdHJ1ZSk7CgkJ
CQl0aGlzLnRyaWdnZXJIYW5kbGVyKCdwcmV2Jyk7CgkJCX0gZWxzZSB7CgkJCQl0
aGlzLnNldFNsaWRlKHRoaXMub2Zmc2V0ICsgdGhpcy5pdGVtQ291bnQgLSAxLCB0
cnVlKTsKCQkJCXRoaXMudHJpZ2dlckhhbmRsZXIoJ25leHQnKTsKCQkJfQoJCX0s
CgoJCV9saXN0Q2xpY2s6IGZ1bmN0aW9uIChldnQpIHsKCQkJdmFyICR0YXJnZXQg
PSAkKGV2dC50YXJnZXQpOwoJCQl2YXIgJGl0ZW0gPSAkdGFyZ2V0LmNsb3Nlc3Qo
Jy5qcy1pdGVtJywgdGhpcy4kZGl2KTsKCQkJaWYgKCRpdGVtLmxlbmd0aCkgewoJ
CQkJdGhpcy50cmlnZ2VySGFuZGxlcignY2xpY2snLCBbJGl0ZW0uaW5kZXgoKV0p
OwoJCQkJZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJCX0KCQl9Cgl9KTsKCglqc0xv
YWRlci5sb2FkZWQoJ3ttYWlscnUuYXR0YWNoVmlld2VyfW1haWxydS5GdWxsQXR0
YWNoVmlld2VyLlNsaWRlcicsIDEpOwoKLy8gZGF0YS9ydS9pbWFnZXMvanMvcnUv
anNDb3JlL1Byb2plY3RzL21haWwucnUvQXR0YWNoVmlld2VyL21haWxydS5GdWxs
QXR0YWNoVmlld2VyLlNsaWRlci5qcyBlbmQKCi8qKgoJICogQGNsYXNzIG1haWxy
dS5GdWxsQXR0YWNoVmlld2VyLkxheWVyTWFpbkRpdgoJICovCglqc0NsYXNzCgku
Y3JlYXRlKCdtYWlscnUuRnVsbEF0dGFjaFZpZXdlci5MYXllck1haW5EaXYnKQoJ
LmV4dGVuZChqUXVlcnlFdmVudCkKCS5zdGF0aWNzKHsKCgkJZGVmYXVsdE9wdGlv
bnM6IHsKCQkJb2Zmc2V0OiB7CgkJCQl0b3A6IDMwLAoJCQkJYm90dG9tOiAxNQoJ
CQl9CgkJfQoJfSkKCS5tZXRob2RzKHsKCgkJX19jb25zdHJ1Y3Q6IGZ1bmN0aW9u
KCkgewoKCQkJdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIG1haWxydS5GdWxs
QXR0YWNoVmlld2VyLkxheWVyTWFpbkRpdi5kZWZhdWx0T3B0aW9ucyk7CgoJCQlp
ZiAobWFpbHJ1Lk5ld0F0dGFjaFZpZXdlclBvcHVwKSB7CgkJCQl0aGlzLm9wdGlv
bnMub2Zmc2V0LmJvdHRvbSA9IDM3OwoJCQl9IGVsc2UgewoJCQkJdGhpcy5mYWRl
ID0gTGF5ZXJGYWRlLmdldEluc3RhbmNlKCk7CgkJCX0KCgkJCXRoaXMuc2xpZGVy
ID0gbmV3IG1haWxydS5GdWxsQXR0YWNoVmlld2VyLlNsaWRlcigpOwoKCQkJdGhp
cy5oaWRlT2JzZXJ2ZXIgPSB0aGlzLmhpZGUuYmluZCh0aGlzKTsKCQkJdGhpcy5y
ZXNpemVPYnNlcnZlciA9IHRoaXMuX3Jlc2l6ZS5iaW5kKHRoaXMpOwoJCQl0aGlz
LmNvbnRyb2xDbGlja09ic2VydmVyID0gdGhpcy5fY29udHJvbENsaWNrLmJpbmQo
dGhpcyk7CgoJCQl0aGlzLiR3aW5kb3cgPSAkKHdpbmRvdyk7CgkJCXRoaXMuJGRv
Y3VtZW50ID0gJChkb2N1bWVudCk7CgkJCXRoaXMuJGRpdiA9ICQoJyNBdHRhY2hW
aWV3ZXInKTsKCQkJdGhpcy4kc2Nyb2xsQXJlYSA9ICQoJ2JvZHksI1Njcm9sbEJv
ZHknKTsKCgkJCXRoaXMuJGNsb3NlID0gJCgnLmpzLWxheWVyQ2xvc2UnLCB0aGlz
LiRkaXYpOwoJCQl0aGlzLiRwcmV2ID0gJCgnLmpzLWxheWVyUHJldicsIHRoaXMu
JGRpdik7CgkJCXRoaXMuJG5leHQgPSAkKCcuanMtbGF5ZXJOZXh0JywgdGhpcy4k
ZGl2KTsKCQkJdGhpcy4kbmFtZSA9ICQoJy5qcy1sYXllck5hbWVUZXh0JywgdGhp
cy4kZGl2KTsKCQkJdGhpcy4kbmFtZUljb24gPSAkKCcuanMtbGF5ZXJOYW1lSWNv
bicsIHRoaXMuJGRpdik7CgkJCXRoaXMuJHBhZ2VyID0gJCgnLmpzLWxheWVyUGFn
ZXInLCB0aGlzLiRkaXYpOwoJCQl0aGlzLiRkb3dubG9hZExpbmsgPSAkKCcuanMt
ZG93bmxvYWRMaW5rJywgdGhpcy4kZGl2KTsKCQkJdGhpcy4kY29udHJvbHMgPSB0
aGlzLiRwcmV2LmFkZCh0aGlzLiRuZXh0KS5hZGQodGhpcy4kY2xvc2UpOwoKCQkJ
dGhpcy4kY29udHJvbHMuY2xpY2sodGhpcy5jb250cm9sQ2xpY2tPYnNlcnZlciku
bW91c2Vkb3duKGZhbHNlKTsKCgkJCWlmICh0aGlzLmZhZGUpIHsKCQkJCXRoaXMu
ZmFkZS5iaW5kKHsKCQkJCQloaWRlOiB0aGlzLmhpZGVPYnNlcnZlcgoJCQkJfSk7
CgkJCX0KCgkJCXRoaXMuZW5hYmxlSGlkZSgpOwoJCX0sCgoJCV9yZXNpemU6IGZ1
bmN0aW9uKCkgewoJCQl0aGlzLl91cGRhdGUoKTsKCQkJdGhpcy5zbGlkZXIucmVz
aXplKCk7CgkJCXRoaXMudHJpZ2dlckhhbmRsZXIoJ3Jlc2l6ZScpOwoJCX0sCgoJ
CV91cGRhdGU6IGZ1bmN0aW9uKCkgewoJCQl2YXIgd2luZG93SGVpZ2h0ID0gYWpz
LndpbmRvd0hlaWdodCgpOwoJCQl2YXIgd2luZG93V2lkdGggPSBhanMud2luZG93
V2lkdGgoKTsKCQkJdmFyIHNjcm9sbFRvcCA9IGFqcy5zY3JvbGxUb3AoKTsKCQkJ
dmFyIGggPSB3aW5kb3dIZWlnaHQgLSAodGhpcy5vcHRpb25zLm9mZnNldC50b3Ag
KyB0aGlzLm9wdGlvbnMub2Zmc2V0LmJvdHRvbSk7CgkJCXZhciB5ID0gTWF0aC5t
YXgoc2Nyb2xsVG9wICsgdGhpcy5vcHRpb25zLm9mZnNldC50b3AsIHNjcm9sbFRv
cCArICgod2luZG93SGVpZ2h0IC0gaCkgLyAyKSk7CgoJCQlpZiAobWFpbHJ1Lk5l
d0F0dGFjaFZpZXdlclBvcHVwKSB7CgkJCQl5ID0gdGhpcy5vcHRpb25zLm9mZnNl
dC50b3A7CgkJCX0KCgkJCXRoaXMuJGRpdi5jc3Moe2hlaWdodDogaCwgdG9wOiB5
fSk7CgoJCQl0aGlzLiRzY3JvbGxBcmVhLmNzcygnb3ZlcmZsb3cnLCB3aW5kb3dX
aWR0aCA+IDk2MCAmJiBoID4gNTAwID8gJ2hpZGRlbicgOiAnJyk7CgkJfSwKCgkJ
X2NvbnRyb2xDbGljazogZnVuY3Rpb24oZXZ0KSB7CgkJCXZhciAkdGFyZ2V0ID0g
JChldnQudGFyZ2V0KTsKCQkJaWYgKCR0YXJnZXQuY2xvc2VzdCgnLmpzLWxheWVy
Q2xvc2UnLCB0aGlzLiRkaXYpLmxlbmd0aCkgewoJCQkJaWYgKCFtYWlscnUuTmV3
QXR0YWNoVmlld2VyUG9wdXApIHsKCQkJCQl0aGlzLmhpZGUoKTsKCQkJCX0KCQkJ
CXRoaXMudHJpZ2dlckhhbmRsZXIoJ2Nsb3NlJyk7CgkJCX0gZWxzZSBpZiAoJHRh
cmdldC5oYXNDbGFzcygnanMtbGF5ZXJQcmV2JykpIHsKCQkJCXRoaXMudHJpZ2dl
ckhhbmRsZXIoJ3ByZXYnKTsKCQkJfSBlbHNlIGlmICgkdGFyZ2V0Lmhhc0NsYXNz
KCdqcy1sYXllck5leHQnKSkgewoJCQkJdGhpcy50cmlnZ2VySGFuZGxlcignbmV4
dCcpOwoJCQl9CgkJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoJCX0sCgoJCXNob3c6
IGZ1bmN0aW9uKCkgewoJCQlpZiAoIXRoaXMudmlzaWJsZSkgewoJCQkJdGhpcy52
aXNpYmxlID0gMTsKCQkJCXRoaXMuJGRpdi5zaG93KCk7CgkJCQlpZiAodGhpcy5m
YWRlKSB7CgkJCQkJdGhpcy5mYWRlLnNob3coKTsKCQkJCX0KCQkJCXRoaXMuX3Vw
ZGF0ZSgpOwoJCQkJdGhpcy5zbGlkZXIuc2hvdygpOwoJCQkJdGhpcy4kZGl2LmFk
ZENsYXNzKCdhdHRhY2h2aWV3ZXJfdmlzaWJsZScpOyAgLy8gQW5pbWF0aW9uCgkJ
CQl0aGlzLiR3aW5kb3cuYmluZCgncmVzaXplJywgdGhpcy5yZXNpemVPYnNlcnZl
cik7CgkJCQl0aGlzLnRyaWdnZXJIYW5kbGVyKCdzaG93Jyk7CgkJCX0KCQkJcmV0
dXJuIHRoaXM7CgkJfSwKCgkJaGlkZTogZnVuY3Rpb24oKSB7CgkJCWlmICh0aGlz
LnZpc2libGUpIHsKCQkJCXRoaXMudmlzaWJsZSA9IDA7CgkJCQlpZiAobWFpbHJ1
Lk5ld0F0dGFjaFZpZXdlclBvcHVwKSB7CgkJCQkJd2luZG93LmNsb3NlKCk7CgkJ
CQl9IGVsc2UgewoJCQkJCXRoaXMuJGRpdi5oaWRlKCk7CgkJCQkJdGhpcy4kZGl2
LnJlbW92ZUNsYXNzKCdhdHRhY2h2aWV3ZXJfdmlzaWJsZScpOwoJCQkJCWlmICh0
aGlzLmZhZGUpIHsKCQkJCQkJdGhpcy5mYWRlLmhpZGUoKTsKCQkJCQl9CgkJCQkJ
dGhpcy5zbGlkZXIuaGlkZSgpOwoJCQkJCXRoaXMuJHNjcm9sbEFyZWEuY3NzKCdv
dmVyZmxvdycsICcnKTsKCQkJCX0KCQkJCXRoaXMuJHdpbmRvdy51bmJpbmQoJ3Jl
c2l6ZScsIHRoaXMucmVzaXplT2JzZXJ2ZXIpOwoJCQkJdGhpcy50cmlnZ2VySGFu
ZGxlcignaGlkZScpOwoJCQl9CgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWRpc2Fi
bGVIaWRlOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZml4ID0gMTsKCQkJdGhpcy4k
Y2xvc2UuaGlkZSgpOwoJCQkkLmhvdGtleXMub2ZmKCdlc2MnLCB0aGlzLmhpZGVP
YnNlcnZlcik7CgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWVuYWJsZUhpZGU6IGZ1
bmN0aW9uICgpIHsKCQkJdGhpcy5maXggPSAwOwoJCQl0aGlzLiRjbG9zZS5zaG93
KCk7CgkJCSQuaG90a2V5cy5vbignZXNjJywgdGhpcy5oaWRlT2JzZXJ2ZXIpOwoJ
CQlyZXR1cm4gdGhpczsKCQl9Cgl9KTsKCgoJLyoqCgkgKiBAY2xhc3MgbWFpbHJ1
LkZ1bGxBdHRhY2hWaWV3ZXIuTGF5ZXIKCSAqLwoJanNDbGFzcwoJLmNyZWF0ZSgn
bWFpbHJ1LkZ1bGxBdHRhY2hWaWV3ZXIuTGF5ZXInKQoJLmV4dGVuZChqUXVlcnlF
dmVudCkKCS5tZXRob2RzKHsKCgkJX19jb25zdHJ1Y3Q6IGZ1bmN0aW9uKCkgewoJ
CQl0aGlzLm1haW5EaXYgPSBtYWlscnUuRnVsbEF0dGFjaFZpZXdlci5MYXllck1h
aW5EaXYuZ2V0SW5zdGFuY2UoKTsKCQkJdGhpcy5oaWRlT2JzZXJ2ZXIgPSB0aGlz
LmhpZGUuYmluZCh0aGlzKTsKCQkJdGhpcy4kZGl2ID0gJCgnLmpzLWxheWVySW5u
ZXInLCB0aGlzLm1haW5EaXYuJGRpdik7CgkJCXRoaXMubWFpbkRpdi5iaW5kKHsK
CQkJCWhpZGU6IHRoaXMuaGlkZU9ic2VydmVyCgkJCX0pOwoJCX0sCgoJCXNob3c6
IGZ1bmN0aW9uKCkgewoJCQlpZiAoIXRoaXMudmlzaWJsZSkgewoJCQkJdGhpcy52
aXNpYmxlID0gMTsKCQkJCXRoaXMuJGRpdi5zaG93KCk7CgkJCQl0aGlzLm1haW5E
aXYuc2hvdygpOwoJCQkJdGhpcy50cmlnZ2VySGFuZGxlcignc2hvdycpOwoJCQl9
CgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWhpZGU6IGZ1bmN0aW9uKCkgewoJCQlp
ZiAodGhpcy52aXNpYmxlKSB7CgkJCQl0aGlzLnZpc2libGUgPSAwOwoJCQkJdGhp
cy4kZGl2LmhpZGUoKTsKCQkJCXRoaXMubWFpbkRpdi5oaWRlKCk7CgkJCQl0aGlz
LnRyaWdnZXJIYW5kbGVyKCdoaWRlJyk7CgkJCX0KCQkJcmV0dXJuIHRoaXM7CgkJ
fQoJfSk7CgoJanNMb2FkZXIubG9hZGVkKCd7bWFpbHJ1LmF0dGFjaFZpZXdlcn1t
YWlscnUuRnVsbEF0dGFjaFZpZXdlci5MYXllcicsIDEpOwoKLy8gZGF0YS9ydS9p
bWFnZXMvanMvcnUvanNDb3JlL1Byb2plY3RzL21haWwucnUvQXR0YWNoVmlld2Vy
L21haWxydS5GdWxsQXR0YWNoVmlld2VyLkxheWVyLmpzIGVuZAoKLy8gZGF0YS9y
dS9pbWFnZXMvanMvcnUvanNDb3JlL1Byb2plY3RzL21haWwucnUvQXR0YWNoVmll
d2VyL21haWxydS5GdWxsQXR0YWNoVmlld2VyLlByZWxvYWQuanMgc3RhcnQKCi8q
KgogKiBAb2JqZWN0ICBtYWlscnUuRnVsbEF0dGFjaFZpZXdlci5QcmVsb2FkCiAq
IEBhdXRob3IgIEFsZXhhbmRlciBBYmFzaGtpbiA8YS5hYmFzaGtpbkBjb3JwLm1h
aWwucnU+CiAqLwoKCi8qKgoJICogQGNsYXNzIG1haWxydS5GdWxsQXR0YWNoVmll
d2VyLlByZWxvYWQKCSAqLwoJanNDbGFzcwoJLmNyZWF0ZSgnbWFpbHJ1LkZ1bGxB
dHRhY2hWaWV3ZXIuUHJlbG9hZCcpCgkuc3RhdGljcyh7CgkJLyoqIEBuYW1lIGZp
bGVzICovCgkJZmlsZXM6IFtdLAoKCQkvKioKCQkgKiBAbmFtZSBpbml0CgkJICog
QHBhcmFtIHtOdW1iZXJ9IGluZGV4CgkJICogQHBhcmFtIHtPYmplY3QgfCBTdHJp
bmd9IHBhcmVudAoJCSAqIEBkZXNjcmlwdGlvbgoJCSAqIFsxLCAyLCAzLCA0LCA1
XSAtPiBbMiwgMywgNF0gLT4gWzIsIDRdCgkJICoKCQkgKiovCgkJaW5pdDogZnVu
Y3Rpb24oaW5kZXgsIHBhcmVudCkgewoJCQkvLyBJRSBtYXkgdGhyb3dzIGFuZCBl
eGNlcHRpb24KCQkJdHJ5IHsKCQkJCS8vIFNldCB0aGUgcmVtYWluaW5nIGZpbGVz
CgkJCQkvLyQoJy53LWF0dGFjaHZpZXdlcl9fdmlld2VyX19pbWFnZSBpbWcnLCBw
YXJlbnQpLmxvYWQoZnVuY3Rpb24oKSB7CgkJCQkJLy8gR2V0IHRhcmdldCByYW5n
ZSAobmV4dCBhbmQgcHJldmlvdXMpCgkJCQkJdmFyIGZpbGVzID0gdGhpcy5maWxl
cy5zcGxpY2UoaW5kZXggPD0gMCA/IDAgOiBpbmRleCAtIDEsIDMpOwoKCQkJCQkv
LyBSZW1vdmUgdGhlIGN1cnJlbnQgaW5kZXgKCQkJCQlmaWxlcy5zcGxpY2UoMSwg
MSk7CgoJCQkJCXRoaXMucHJlbG9hZChmaWxlcyk7CgkJCQkvL30KCQkJCS8vLmJp
bmQodGhpcykpOwoJCQl9CgkJCWNhdGNoIChlcnJvcikgewoJCQkJLy8uLgoJCQl9
CgkJfSwKCgkJLyoqCgkJICogQG5hbWUgcHJlbG9hZAoJCSAqIEBwYXJhbSB7QXJy
YXl9IGZpbGVzCgkJICogQHJldHVybnMge051bWJlcn0KCQkgKiovCgkJcHJlbG9h
ZDogZnVuY3Rpb24oZmlsZXMpIHsKCQkJaWYgKCFmaWxlcy5sZW5ndGgpCgkJCQly
ZXR1cm4gLTE7CgoJCQl2YXIgbmFtZXNwYWNlID0gJ3ByZWxvYWRJTUctJyArICQu
ZXhwYW5kbzsKCgkJCS8vIENyZWF0ZSB3cmFwcGVyCgkJCWlmICghJChuYW1lc3Bh
Y2UpWzBdKQoJCQkJJCgnPGRpdiAvPicsIHtpZDogbmFtZXNwYWNlfSkuaGlkZSgp
LmFwcGVuZFRvKCdib2R5Jyk7CgoJCQkvLyBBcHBlbmQgaW1hZ2VzCgkJCSQuZWFj
aChmaWxlcywgZnVuY3Rpb24oKSB7CgkJCQkkKCc8aW1nIC8+Jywge3NyYzogdGhp
c30pLmFwcGVuZFRvKCcjJyArIG5hbWVzcGFjZSk7CgkJCX0pOwoKCQkJcmV0dXJu
IDA7CgkJfQoJfSk7CgoJanNMb2FkZXIubG9hZGVkKCd7bWFpbHJ1LmF0dGFjaFZp
ZXdlcn1tYWlscnUuRnVsbEF0dGFjaFZpZXdlci5QcmVsb2FkJywgMSk7CgovLyBk
YXRhL3J1L2ltYWdlcy9qcy9ydS9qc0NvcmUvUHJvamVjdHMvbWFpbC5ydS9BdHRh
Y2hWaWV3ZXIvbWFpbHJ1LkZ1bGxBdHRhY2hWaWV3ZXIuUHJlbG9hZC5qcyBlbmQK
Ci8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2pzQ29yZS91dGlscy9QREYuanMgc3Rh
cnQKCmlmICghKCdhanMnIGluIHdpbmRvdykpIHsKCWFqcyA9IHt9Owp9CgovKioK
ICogZnJvbSBodHRwOi8vcGRmb2JqZWN0LmNvbS8KICogQGNsYXNzIGFqcy5QREYK
ICovCihmdW5jdGlvbiAoYWpzKSB7CgoJdmFyIFBERiA9IHt9OwoKCS8vVGVzdHMg
c3BlY2lmaWNhbGx5IGZvciBBZG9iZSBSZWFkZXIgKGFrYSBBY3JvYmF0KSBpbiBJ
bnRlcm5ldCBFeHBsb3JlcgoJdmFyIGhhc1JlYWRlckFjdGl2ZVggPSBmdW5jdGlv
biAoKSB7CgkJdmFyIGF4T2JqID0gbnVsbDsKCQlpZiAod2luZG93LkFjdGl2ZVhP
YmplY3QpIHsKCQkJdHJ5IHsKCQkJCWF4T2JqID0gbmV3IEFjdGl2ZVhPYmplY3Qo
IkFjcm9QREYuUERGIik7CgkJCX0gY2F0Y2goIGUgKSB7fQoKCQkJLy9JZiAiQWNy
b1BERi5QREYiIGRpZG4ndCB3b3JrLCB0cnkgIlBERi5QZGZDdHJsIgoJCQlpZiAo
IWF4T2JqKSB7CgkJCQl0cnkgewoJCQkJCWF4T2JqID0gbmV3IEFjdGl2ZVhPYmpl
Y3QoIlBERi5QZGZDdHJsIik7CgkJCQl9IGNhdGNoKCBlICkge30KCQkJfQoJCQkv
L0lmIGVpdGhlciAiQWNyb1BERi5QREYiIG9yICJQREYuUGRmQ3RybCIgYXJlIGZv
dW5kLCByZXR1cm4gdHJ1ZQoJCQlpZiAoYXhPYmogIT09IG51bGwpIHsKCQkJCXJl
dHVybiB0cnVlOwoJCQl9CgkJfQoJCS8vSWYgeW91IGdvdCB0byB0aGlzIHBvaW50
LCB0aGVyZSdzIG5vIEFjdGl2ZVhPYmplY3QgZm9yIFBERnMKCQlyZXR1cm4gZmFs
c2U7Cgl9OwoKCS8vVGVzdHMgc3BlY2lmaWNhbGx5IGZvciBBZG9iZSBSZWFkZXIg
KGFrYSBBZG9iZSBBY3JvYmF0KSBpbiBub24tSUUgYnJvd3NlcnMKCXZhciBoYXNS
ZWFkZXIgPSBmdW5jdGlvbiAoKSB7CgkJaWYoIG5hdmlnYXRvci5wbHVnaW5zICl7
CgkJCXZhciBpLCBuID0gbmF2aWdhdG9yLnBsdWdpbnMsIGNvdW50ID0gbi5sZW5n
dGgsIHJlZ3ggPSAvQWRvYmUgUmVhZGVyfEFkb2JlIFBERnxBY3JvYmF0L2dpOwoJ
CQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewoJCQkJaWYgKHJlZ3gudGVz
dChuW2ldLm5hbWUpKSB7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9
CgkJcmV0dXJuIGZhbHNlOwoJfTsKCgkvL0RldGVjdHMgdW5icmFuZGVkIFBERiBz
dXBwb3J0Cgl2YXIgaGFzR2VuZXJpYyA9IGZ1bmN0aW9uICgpIHsKCQl2YXIgcGx1
Z2luID0gbmF2aWdhdG9yLm1pbWVUeXBlc1siYXBwbGljYXRpb24vcGRmIl07CgkJ
cmV0dXJuIChwbHVnaW4gJiYgcGx1Z2luLmVuYWJsZWRQbHVnaW4pOwoJfTsKCgkv
L0RldGVybWluZXMgd2hhdCBraW5kIG9mIFBERiBzdXBwb3J0IGlzIGF2YWlsYWJs
ZTogQWRvYmUgb3IgZ2VuZXJpYwoJdmFyIHBsdWdpbkZvdW5kID0gZnVuY3Rpb24g
KCkgewoJCXZhciB0eXBlID0gbnVsbDsKCQlpZiAoaGFzUmVhZGVyKCkgfHwgaGFz
UmVhZGVyQWN0aXZlWCgpKSB7CgkJCXR5cGUgPSAiQWRvYmUiOwoJCX0gZWxzZSBp
ZiAoaGFzR2VuZXJpYygpKSB7CgkJCXR5cGUgPSAiZ2VuZXJpYyI7CgkJfQoJCXJl
dHVybiB0eXBlOwoJfTsKCgl2YXIgZW1iZWQgPSBmdW5jdGlvbiAodGFyZ2V0SUQs
IG9wdGlvbnMpIHsKCQlpZiAoUERGLmRpc2FibGVkKSB7CgkJCXJldHVybiBmYWxz
ZTsKCQl9CgkJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgkJb3B0aW9ucy51cmwg
PSBvcHRpb25zLnVybCB8fCAnJzsKCQlvcHRpb25zLndpZHRoID0gb3B0aW9ucy53
aWR0aCB8fCAnMTAwJSc7CgkJb3B0aW9ucy5oZWlnaHQgPSBvcHRpb25zLmhlaWdo
dCB8fCAnMTAwJSc7CgoJCS8vQWxsb3cgdXNlcnMgdG8gcGFzcyBhbiBlbGVtZW50
IE9SIGFuIGVsZW1lbnQncyBJRAoJCXZhciB0YXJnZXROb2RlID0gKHRhcmdldElE
Lm5vZGVUeXBlICYmIHRhcmdldElELm5vZGVUeXBlID09PSAxKSA/IHRhcmdldElE
IDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SUQpOwoKCQkvL0Vuc3Vy
ZSB0YXJnZXQgZWxlbWVudCBpcyBmb3VuZCBpbiBkb2N1bWVudCBiZWZvcmUgY29u
dGludWluZwoJCWlmICghdGFyZ2V0Tm9kZSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJ
fQoJCXRhcmdldE5vZGUuaW5uZXJIVE1MID0gJzxvYmplY3QJZGF0YT0iJyArIG9w
dGlvbnMudXJsICsgJyIgdHlwZT0iYXBwbGljYXRpb24vcGRmIiB3aWR0aD0iJyAr
IG9wdGlvbnMud2lkdGggKyAnIiBoZWlnaHQ9IicgKyBvcHRpb25zLmhlaWdodCAr
ICciPjwvb2JqZWN0Pic7CgkJcmV0dXJuIHRhcmdldE5vZGUuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoIm9iamVjdCIpWzBdOwoJfTsKCglQREYudHlwZSA9IHBsdWdpbkZv
dW5kKCk7CglQREYuZGlzYWJsZWQgPSAhUERGLnR5cGU7CglQREYuZW1iZWQgPSBl
bWJlZDsKCglhanMuUERGID0gUERGOwoKfSkoYWpzKTsKCmpzTG9hZGVyLmxvYWRl
ZCgne3V0aWxzfVBERicsIDEpOwogCgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9q
c0NvcmUvdXRpbHMvUERGLmpzIGVuZAoKLyoqCgkgKiBAY2xhc3MgbWFpbHJ1LkZ1
bGxBdHRhY2hWaWV3ZXIuVmlld2VyCgkgKi8KCWpzQ2xhc3MKCS5jcmVhdGUoJ21h
aWxydS5GdWxsQXR0YWNoVmlld2VyLlZpZXdlcicpCgkuc3RhdGljcyh7CgoJCWRl
ZmF1bHRPcHRpb25zOiB7CgkJCWlzU2hvcnQ6ICFtYWlscnUuQXR0YWNoVmlld1N0
eWxlLAoKCQkJcHJldmlld19saXN0X3RtcGxfaWQ6ICcjQXR0YWNoVmlld2VyX19w
cmV2aWV3TGlzdF9lanMnLAoJCQlwcmV2aWV3X3Nob3J0X2xpc3RfdG1wbF9pZDog
JyNBdHRhY2hWaWV3ZXJfX3ByZXZpZXdTaG9ydExpc3RfZWpzJywKCgkJCWFyY2hp
dmVfdHJlZV90bXBsX2lkOiAnYXR0YWNodmlld2VyX19hcmNoaXZlX190cmVlJywK
CgkJCXR5cGVfb3RoZXJfdG1wbF9pZDogICAnYXR0YWNodmlld2VyX19vdGhlcics
CgkJCXR5cGVfaW1hZ2VfdG1wbF9pZDogICAnYXR0YWNodmlld2VyX19pbWFnZScs
CgkJCXR5cGVfdGV4dF90bXBsX2lkOiAgICAnYXR0YWNodmlld2VyX190ZXh0JywK
CQkJdHlwZV9wZGZfdG1wbF9pZDogICAgICdhdHRhY2h2aWV3ZXJfX3BkZicsCgkJ
CXR5cGVfbXNkb2NfdG1wbF9pZDogICAnYXR0YWNodmlld2VyX19NU0RvYycsCgkJ
CXR5cGVfYXJjaGl2ZV90bXBsX2lkOiAnYXR0YWNodmlld2VyX19hcmNoaXZlJwoJ
CX0KCgl9KQoJLm1ldGhvZHMoewoKCQlmaWxlczogW10sCgkJbGlua3M6IFtdLAoK
CQlhcmNoaXZlQ2FjaGU6IHt9LAoJCWxheWVyQ2FjaGU6IHt9LAoKCQlpbWFnZURh
dGE6IHt9LAoKCQlfX2NvbnN0cnVjdDogZnVuY3Rpb24gKG9wdGlvbnMpIHsKCQkJ
dGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIG1haWxydS5GdWxsQXR0YWNoVmll
d2VyLlZpZXdlci5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7CgkJCXRoaXMudXRp
bHMgPSBtYWlscnUuRnVsbEF0dGFjaFZpZXdlci5VdGlsczsKCQkJdGhpcy5pc1No
b3J0ID0gdGhpcy5vcHRpb25zLmlzU2hvcnQ7CgkJfSwKCgkJX2luaXRpYWxpemU6
IGZ1bmN0aW9uICgpIHsKCgkJCXRoaXMubGlzdENsaWNrT2JzZXJ2ZXIgPSB0aGlz
Ll9saXN0Q2xpY2suYmluZCh0aGlzKTsKCQkJdGhpcy5zd2l0Y2hlckNsaWNrT2Jz
ZXJ2ZXIgPSB0aGlzLl9zd2l0Y2hlckNsaWNrLmJpbmQodGhpcyk7CgkJCXRoaXMu
aW5uZXJNb3VzZU1vdmVPYnNlcnZlciA9IHRoaXMuX2lubmVyTW91c2VNb3ZlLmJp
bmQodGhpcyk7CgkJCXRoaXMuaW1hZ2VDbGlja09ic2VydmVyID0gdGhpcy5faW1h
Z2VDbGlja09ic2VydmVyLmJpbmQodGhpcyk7CgkJCXRoaXMucmVzaXplQ29udHJv
bENsaWNrT2JzZXJ2ZXIgPSB0aGlzLl9yZXNpemVDb250cm9sQ2xpY2tPYnNlcnZl
ci5iaW5kKHRoaXMpOwoJCQl0aGlzLnJlc2l6ZUNvbnRyb2xIb3Zlck9ic2VydmVy
ID0gdGhpcy5fcmVzaXplQ29udHJvbEhvdmVyT2JzZXJ2ZXIuYmluZCh0aGlzKTsK
CQkJdGhpcy5rZXlOYXZpZ2F0aW9uT2JzZXJ2ZXIgPSB0aGlzLl9rZXlOYXZpZ2F0
aW9uT2JzZXJ2ZXIuYmluZCh0aGlzKTsKCQkJdGhpcy5sb2FkUGxheWVyQ2xpY2tP
YnNlcnZlciA9IHRoaXMuX2xvYWRQbGF5ZXJDbGljay5iaW5kKHRoaXMpOwoKCQkJ
aWYgKCF0aGlzLm9wdGlvbnMucG9wdXApIHsKCQkJCXRoaXMuZG9jdW1lbnRDbGlj
a09ic2VydmVyID0gdGhpcy5fZG9jdW1lbnRDbGljay5iaW5kKHRoaXMpOwoJCQkJ
dGhpcy5iZWZvcmVVbmxvYWRPYnNlcnZlciA9IHRoaXMuX2JlZm9yZVVubG9hZC5i
aW5kKHRoaXMpOwoJCQl9CgoJCQl0aGlzLiR3aW5kb3cgPSAkKHdpbmRvdyk7CgkJ
CXRoaXMuJGRvY3VtZW50ID0gJChkb2N1bWVudCk7CgoJCQl0aGlzLmxheWVyID0g
bmV3IG1haWxydS5GdWxsQXR0YWNoVmlld2VyLkxheWVyKHRoaXMub3B0aW9ucyk7
CgoJCQl0aGlzLmxheWVyLm1haW5EaXYuYmluZCgncHJldiBuZXh0IGNsb3NlIGhp
ZGUgc2hvdyByZXNpemUnLCB7c2NvcGU6IHRoaXN9LCBmdW5jdGlvbiAoZXZ0KSB7
CgkJCQl2YXIgc2NvcGUgPSBldnQuZGF0YS5zY29wZSwgdHlwZSA9IGV2dC50eXBl
OwoJCQkJaWYgKHR5cGUgPT0gJ3ByZXYnKSB7CgkJCQkJc2NvcGUuc2V0RmlsZShz
Y29wZS5pbmRleCAtIDEpOwoJCQkJCXNjb3BlLiR3aW5kb3cudHJpZ2dlckhhbmRs
ZXIoJ2F0dGFjaFZpZXdlclByZXZpZXdQcmV2Q2xpY2suYXR0YWNoVmlld2VyJyk7
CgkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ25leHQnKSB7CgkJCQkJc2NvcGUuc2V0
RmlsZShzY29wZS5pbmRleCArIDEpOwoJCQkJCXNjb3BlLiR3aW5kb3cudHJpZ2dl
ckhhbmRsZXIoJ2F0dGFjaFZpZXdlclByZXZpZXdOZXh0Q2xpY2suYXR0YWNoVmll
d2VyJyk7CgkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ2Nsb3NlJykgewoJCQkJCXNj
b3BlLiR3aW5kb3cudHJpZ2dlckhhbmRsZXIoJ2F0dGFjaFZpZXdlclByZXZpZXdD
bG9zZUNsaWNrLmF0dGFjaFZpZXdlcicpOwoJCQkJCXNjb3BlLiR3aW5kb3dbMF0u
Y2xvc2UoKTsKCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAnc2hvdycpIHsKCQkJCQlz
Y29wZS4kZG9jdW1lbnQKCQkJCQkJLmJpbmQoJ2NsaWNrJywgc2NvcGUuZG9jdW1l
bnRDbGlja09ic2VydmVyKQoJCQkJCQkuYmluZCgna2V5ZG93bicsIHNjb3BlLmtl
eU5hdmlnYXRpb25PYnNlcnZlcikKCQkJCQk7CgkJCQkJc2NvcGUuJHdpbmRvdy5i
aW5kKCdiZWZvcmV1bmxvYWQnLCBzY29wZS5iZWZvcmVVbmxvYWRPYnNlcnZlcik7
CgkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ2hpZGUnKSB7CgkJCQkJaWYgKHNjb3Bl
LiRwcmV2aW9zTGF5ZXIgJiYgc2NvcGUucmVtb3ZlUHJldmlvcykgewoJCQkJCQlz
Y29wZS4kcHJldmlvc0xheWVyLnJlbW92ZSgpOwoJCQkJCX0KCgkJCQkJc2NvcGUu
JGRvY3VtZW50CgkJCQkJCS51bmJpbmQoJ2NsaWNrJywgc2NvcGUuZG9jdW1lbnRD
bGlja09ic2VydmVyKQoJCQkJCQkudW5iaW5kKCdrZXlkb3duJywgc2NvcGUua2V5
TmF2aWdhdGlvbk9ic2VydmVyKQoJCQkJCTsKCgkJCQkJc2NvcGUuJHdpbmRvdy51
bmJpbmQoJ2JlZm9yZXVubG9hZCcsIHNjb3BlLmJlZm9yZVVubG9hZE9ic2VydmVy
KTsKCQkJCQlqc0hpc3Rvcnkuc2V0KGpzSGlzdG9yeS5nZXQoKS5yZXBsYWNlKC8o
WyZcP11fYXY9KVteJl0rLywgJyQxJyksIG51bGwsIHRydWUpOwoJCQkJfSBlbHNl
IGlmICh0eXBlID09ICdyZXNpemUnKSB7CgkJCQkJc2NvcGUuX3Jlc2l6ZSgpOwoJ
CQkJfQoKCQkJCWlmICh0eXBlICE9ICdyZXNpemUnKSB7CgkJCQkJbWFpbHJ1LkZ1
bGxBdHRhY2hWaWV3ZXIuUHJlbG9hZC5pbml0KHNjb3BlLmluZGV4LCB0aGlzLmxh
eWVyKTsKCQkJCX0KCQkJfSk7CgoJCQl0aGlzLmxheWVyLm1haW5EaXYuc2xpZGVy
LmJpbmQoJ3N0YXJ0U2hvdyBjbGljayBwcmV2IG5leHQnLCB7c2NvcGU6IHRoaXN9
LCBmdW5jdGlvbiAoZXZ0LCBpbmRleCkgewoJCQkJdmFyIHNjb3BlID0gZXZ0LmRh
dGEuc2NvcGUsIHR5cGUgPSBldnQudHlwZTsKCQkJCWlmICh0eXBlID09ICdwcmV2
JykgewoJCQkJCXNjb3BlLiR3aW5kb3cudHJpZ2dlckhhbmRsZXIoJ2F0dGFjaFZp
ZXdlclNsaWRlclByZXZDbGljay5hdHRhY2hWaWV3ZXInKTsKCQkJCX0gZWxzZSBp
ZiAodHlwZSA9PSAnbmV4dCcpIHsKCQkJCQlzY29wZS4kd2luZG93LnRyaWdnZXJI
YW5kbGVyKCdhdHRhY2hWaWV3ZXJTbGlkZXJOZXh0Q2xpY2suYXR0YWNoVmlld2Vy
Jyk7CgkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNrJykgewoJCQkJCWlmIChp
bmRleCAhPSBzY29wZS5pbmRleCkgewoJCQkJCQlzY29wZS5zZXRGaWxlKGluZGV4
KTsKCQkJCQl9CgkJCQkJc2NvcGUuJHdpbmRvdy50cmlnZ2VySGFuZGxlcignYXR0
YWNoVmlld2VyU2xpZGVyTGlzdENsaWNrLmF0dGFjaFZpZXdlcicpOwoJCQkJfSBl
bHNlIGlmICh0eXBlID09ICdzdGFydFNob3cnKSB7CgkJCQkJc2NvcGUuJHJlc2l6
ZUNvbnRyb2wuaGlkZSgpOwoJCQkJfQoJCQl9KTsKCgkJCXRoaXMuJHJlc2l6ZUNv
bnRyb2wgPSAkKCcuanMtbGF5ZXJSZXNpemUnLCB0aGlzLmxheWVyLm1haW5EaXYu
JGRpdikuYmluZCh7CgkJCQknbW91c2VvdmVyIG1vdXNlb3V0JzogdGhpcy5yZXNp
emVDb250cm9sSG92ZXJPYnNlcnZlciwKCQkJCSdjbGljayc6IHRoaXMucmVzaXpl
Q29udHJvbENsaWNrT2JzZXJ2ZXIsCgkJCQknbW91c2Vkb3duJzogZmFsc2UKCQkJ
fSk7CgoJCQl0aGlzLmlzSW5pdGlhbGl6ZSA9IDE7CgkJfSwKCgkJcmVkcmF3OiBm
dW5jdGlvbiAoc2VsZWN0b3IsIGRhdGEsIGJ1aWxkZWQpIHsKCQkJdGhpcy5kZXN0
cm95KCk7CgkJCXRoaXMuc2V0RGF0YShkYXRhKTsKCgkJCWlmICh0aGlzLmRhdGEu
TmV3QXR0YWNoVmlld2VyKSB7CgkJCQl0aGlzLiRjb250YWluZXIgPSAkKHNlbGVj
dG9yKQoJCQkJCS5iaW5kKCdjbGljaycsIHRoaXMubGlzdENsaWNrT2JzZXJ2ZXIp
CgkJCQkJLmRlbGVnYXRlKCcuanMtc3dpdGNoZXInLCAnY2xpY2snLCB0aGlzLnN3
aXRjaGVyQ2xpY2tPYnNlcnZlcikKCQkJCTsKCQkJfQoKCQkJaWYgKCFidWlsZGVk
KSB7CgkJCQl0aGlzLmRyYXdUZW1wbGF0ZSgpOwoJCQl9CgoJCQlpZih0aGlzLmlz
U2hvcnQgJiYgbWFpbHJ1LkF1ZGlvUGxheWVyQXBpKXsKCQkJCS8vIGluaXQgcGxh
eWVycwoJCQkJdGhpcy4kY29udGFpbmVyLmZpbmQoJy5qcy1sb2FkcGxheWVyLCAu
anMtcGxheScpLmJpbmQoJ2NsaWNrJywgdGhpcy5sb2FkUGxheWVyQ2xpY2tPYnNl
cnZlcik7CgkJCX0KCQl9LAoKCQlnZXRJbmZvQnlQYXJ0SUQ6IGZ1bmN0aW9uIChw
YXJ0SUQpIHsKCQkJdmFyIGRhdGEgPSB7CgkJCQlpbmRleDogbnVsbCwKCQkJCWN1
cnJlbnQ6IG51bGwKCQkJfTsKCgkJCWlmICghcGFydElEIHx8IHBhcnRJRCA9PT0g
J05hTicpIHsKCQkJCXBhcnRJRCA9IDA7CgkJCX0KCgkJCWlmICgvXlxkKyQvLnRl
c3QocGFydElEKSkgewoJCQkJZGF0YS5pbmRleCA9IHBhcnRJRHwwOwoJCQkJZGF0
YS5jdXJyZW50ID0gdGhpcy5maWxlc1tkYXRhLmluZGV4XTsKCQkJfSBlbHNlIHsK
CQkJCWZvciAodmFyIGZpbGUsIGkgPSB0aGlzLmZpbGVzLmxlbmd0aDsgaS0tIDsg
KSB7CgkJCQkJZmlsZSA9IHRoaXMuZmlsZXNbaV07CgkJCQkJaWYgKGZpbGUuUGFy
dElEID09PSBwYXJ0SUQpIHsKCQkJCQkJZGF0YS5pbmRleCA9IGk7CgkJCQkJCWRh
dGEuY3VycmVudCA9IGZpbGU7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJ
fQoJCQlyZXR1cm4gZGF0YTsKCQl9LAoKCQlzZXREYXRhOiBmdW5jdGlvbiAoZGF0
YSkgewoJCQlpZiAoIXRoaXMuaXNJbml0aWFsaXplKSB7CgkJCQl0aGlzLl9pbml0
aWFsaXplKCk7CgkJCX0KCgkJCXRoaXMubGF5ZXJHZW9tZXRyeSA9IHt3aWR0aDog
MCwgaGVpZ2h0OiAwfTsKCQkJdGhpcy5sYXllckNhY2hlID0ge307CgkJCXRoaXMu
YXJjaGl2ZUNhY2hlID0ge307CgkJCXRoaXMuaW1hZ2VEYXRhID0ge307CgoJCQl0
aGlzLmZpbGVzID0gW107CgkJCXRoaXMubGlua3MgPSBbXTsKCgkJCXRoaXMuZGF0
YSA9ICQuZXh0ZW5kKHsKCQkJCUF2U3RhdHVzQmFyOiBtYWlscnUuQXZTdGF0dXNC
YXIsCgkJCQlOZXdBdHRhY2hWaWV3ZXI6IG1haWxydS5OZXdBdHRhY2hWaWV3ZXIs
CgkJCQlJZDogJycsCgkJCQlTdWJqZWN0OiAnJywKCQkJCUZyb21OYW1lOiAnJywK
CQkJCWZpbGVzX3N0YXR1czogJycsCgkJCQlNYWluTWFpbEhvc3Q6ICcnLAoJCQkJ
TWFpbEF0dGFjaFppcEhvc3Q6ICcnLAoJCQkJTWFpbEF0dGFjaFByZXZpZXdIb3N0
OiAnJywKCQkJCUF0dGFjaEFsbGZpbGVzX25hbWU6ICcnLAoJCQkJQXR0YWNoQWxs
ZmlsZXNfQXR0YWNoSG9zdDogJycsCgkJCQlBdHRhY2hBbGxmaWxlc19Nc2dJZDog
JycsCgkJCQlBdHRhY2hBbGxmaWxlc19QYXJ0c0lkOiAnJywKCQkJCVdpbm1haWxf
SXNSdGY6IDAsCgkJCQlXaW5tYWlsX25hbWU6ICcnLAoJCQkJV2lubWFpbF9DaGFu
bmVsOiAnJywKCQkJCVdpbm1haWxfUGFydElEOiAnJywKCQkJCVdpbm1haWxfaGFz
QXR0YWNoOiAwLAoJCQkJV2lubWFpbF9zaXplOiAwLAoJCQkJV2lubWFpbF9VUkxG
aWxlTmFtZTogJycKCQkJfSwgZGF0YSk7CgoJCQlpZighdGhpcy5kYXRhLlN1Ympl
Y3QpCgkJCQl0aGlzLmRhdGEuU3ViamVjdCA9ICcmbHQ7JytMYW5nLmdldCgnbWVz
c2FnZS5lbWFpbC51bnRpdGxlZCcpKycmZ3Q7JzsKCQkJdGhpcy5kYXRhLlN1Ympl
Y3QgPSByZXBsYWNlRW50aXR5KHRoaXMuZGF0YS5TdWJqZWN0KTsKCQkJdGhpcy5k
YXRhLkZyb21OYW1lID0gcmVwbGFjZUVudGl0eSh0aGlzLmRhdGEuRnJvbU5hbWUp
OwoKCQkJdGhpcy5kYXRhLmFyY2hpdmVEb3dubG9hZFVybCA9IHRoaXMudXRpbHMu
Z2V0QWxsRmlsZXNEb3dubG9hZFVybCh0aGlzLmRhdGEpOwoJCQl0aGlzLmRhdGEu
TWFpbEF0dGFjaFByZXZpZXdIb3N0ID0gU3RyaW5nKHRoaXMuZGF0YS5NYWlsQXR0
YWNoUHJldmlld0hvc3QpLnJlcGxhY2UoL15hZlx3KlwuLywgJ2FwZi4nKTsKCgkJ
CXRoaXMubGF5ZXIuJGRpdi5lbXB0eSgpOwoKCQkJaWYgKCQuaXNBcnJheSh0aGlz
LmRhdGEuQXR0YWNobWVudHMpKSB7CgkJCQl2YXIgZmlsZURhdGEgPSBudWxsOwoJ
CQkJJC5lYWNoKHRoaXMuZGF0YS5BdHRhY2htZW50cywgZnVuY3Rpb24gKGssIHYp
IHsKCQkJCQlmaWxlRGF0YSA9IHRoaXMudXRpbHMuY3JlYXRlRmlsZURlc2NyaXB0
aW9uKHRoaXMuZGF0YSwgdiwgayk7CgkJCQkJdGhpcy5maWxlcy5wdXNoKGZpbGVE
YXRhKTsKCQkJCQltYWlscnUuRnVsbEF0dGFjaFZpZXdlci5QcmVsb2FkLmZpbGVz
LnB1c2goZmlsZURhdGEuaW1hZ2VVcmwpOwoJCQkJfS5iaW5kKHRoaXMpKTsKCQkJ
fQoKCQkJaWYgKCQuaXNBcnJheSh0aGlzLmRhdGEuQXR0YWNobGlua3MpKSB7CgkJ
CQkkLmVhY2godGhpcy5kYXRhLkF0dGFjaGxpbmtzLCBmdW5jdGlvbiAoaywgdikg
ewoJCQkJCXRoaXMubGlua3MucHVzaCh0aGlzLnV0aWxzLmNyZWF0ZUxpbmtEZXNj
cmlwdGlvbih0aGlzLmRhdGEsIHYsIGspKTsKCQkJCX0uYmluZCh0aGlzKSk7CgkJ
CX0KCgkJCWlmICh0aGlzLm9wdGlvbnMucG9wdXApIHsKCQkJCXRoaXMubGF5ZXIu
bWFpbkRpdi5zbGlkZXIucmVkcmF3KHRoaXMuZmlsZXMsIGZ1bmN0aW9uICgpIHsK
CQkJCQl0aGlzLiR3aW5kb3cudHJpZ2dlckhhbmRsZXIoJ2F0dGFjaFZpZXdlclJl
ZHJhdy5hdHRhY2hWaWV3ZXInLCBbdGhpcy5maWxlcywgdGhpcy5saW5rc10pOwoJ
CQkJfS5iaW5kKHRoaXMpKTsKCQkJfQoJCX0sCgoJCV9iaW5kT25IaXN0b3J5Q2hh
bmdlOiBmdW5jdGlvbiAoKSB7CgkJCWpzSGlzdG9yeS5jaGFuZ2UoZnVuY3Rpb24g
KGhhc2gsIGZvcmNlLCBkYXRhKSB7CgkJCQl2YXIgcGFydElEOwoJCQkJaWYgKGRh
dGEpIHsKCQkJCQlwYXJ0SUQgPSBkYXRhLmF0dGFjaFZpZXdlckZpbGVQYXJ0SUQ7
CgkJCQl9IGVsc2UgewoJCQkJCXZhciBtYXRjaGVzID0gaGFzaC5tYXRjaCgvWyZc
P11fYXY9KFteJl0rKS8pOwoJCQkJCWlmIChtYXRjaGVzKSB7CgkJCQkJCXBhcnRJ
RCA9IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaGVzWzFdKTsKCQkJCQl9CgkJCQl9
CgkJCQlpZiAocGFydElEICYmIHRoaXMuZ2V0SW5mb0J5UGFydElEKHBhcnRJRCku
Y3VycmVudCkgewoJCQkJCXRoaXMuc2hvd0ZpbGUocGFydElEKTsKCQkJCX0KCQkJ
fS5iaW5kKHRoaXMpLCB0cnVlKTsKCQl9LAoKCQlkcmF3VGVtcGxhdGU6IGZ1bmN0
aW9uICgpIHsKCQkJdmFyIHRlbXBsYXRlSWQgPSB0aGlzLmlzU2hvcnQgPyB0aGlz
Lm9wdGlvbnMucHJldmlld19zaG9ydF9saXN0X3RtcGxfaWQgOiB0aGlzLm9wdGlv
bnMucHJldmlld19saXN0X3RtcGxfaWQ7CgoJCQl0aGlzLiRjb250YWluZXIudHBs
KHRlbXBsYXRlSWQsICQuZXh0ZW5kKHt9LCB0aGlzLmRhdGEsIHsKCQkJCUF0dGFj
aG1lbnRzOiB0aGlzLmZpbGVzLAoJCQkJQXR0YWNobGlua3M6IHRoaXMubGlua3MK
CQkJfSkpOwoJCX0sCgoJCXNob3dGaWxlOiBmdW5jdGlvbiAocGFydElEKSB7CgoJ
CQlpZiAoIXRoaXMuYmluZE9uSGlzdG9yeUNoYW5nZSkgewoJCQkJdGhpcy5iaW5k
T25IaXN0b3J5Q2hhbmdlID0gMTsKCQkJCXRoaXMuX2JpbmRPbkhpc3RvcnlDaGFu
Z2UoKTsKCQkJfQoKCQkJdmFyIGluZm8gPSB0aGlzLmdldEluZm9CeVBhcnRJRChw
YXJ0SUQpOwoJCQl2YXIgZmlsZSA9IGluZm8uY3VycmVudDsKCQkJdmFyIGluZGV4
ID0gaW5mby5pbmRleDsKCQkJdmFyIGxheWVyID0gdGhpcy5sYXllcjsKCQkJdmFy
IGxheWVyTWFpbkRpdiA9IGxheWVyLm1haW5EaXY7CgkJCXZhciBpY29uVHlwZSA9
ICdvdGhlcic7CgkJCXZhciBmaWxlSWNvblR5cGUgPSB0aGlzLnV0aWxzLmdldEZp
bGVUeXBlKGZpbGUpOwoKCQkJY2xlYXJUaW1lb3V0KHRoaXMuaW1hZ2VNb3VzZU1v
dmVUaW1lb3V0KTsKCQkJY2xlYXJUaW1lb3V0KHRoaXMuaW1hZ2VSZXNpemVUaW1l
b3V0KTsKCgkJCXRoaXMuc2Nyb2xsID0gZmFsc2U7CgkJCXRoaXMuaW5kZXggPSBp
bmRleDsKCQkJdGhpcy5maWxlID0gZmlsZTsKCQkJdGhpcy50eXBlID0gdGhpcy51
dGlscy5nZXRGaWxlVHlwZShmaWxlKTsKCgkJCWlmICh0aGlzLnR5cGUgPT0gJ2lt
YWdlJykgewoJCQkJaWNvblR5cGUgPSAncGhvdG8nOwoJCQl9IGVsc2UgaWYgKHRo
aXMudHlwZSA9PSAnZG9jJyB8fCB0aGlzLnR5cGUgPT0gJ2V4Y2VsJyB8fCB0aGlz
LnR5cGUgPT0gJ3BwJykgewoJCQkJaWNvblR5cGUgPSAnZG9jJzsKCQkJfSBlbHNl
IGlmIChmaWxlSWNvblR5cGUgPT0gJ21wMycpIHsKCQkJCWljb25UeXBlID0gJ211
c2ljJzsKCQkJfQoKCQkJaWYgKHRoaXMudHlwZSA9PSAnaW1hZ2UnKSB7CgkJCQl0
aGlzLnNjcm9sbCA9ICEhKHRoaXMuaW1hZ2VEYXRhW3RoaXMuaW5kZXhdICYmIHRo
aXMuaW1hZ2VEYXRhW3RoaXMuaW5kZXhdLnNjcm9sbCk7CgkJCX0KCgkJCXRoaXMu
JHJlc2l6ZUNvbnRyb2wudG9nZ2xlQ2xhc3MoJ2F0dGFjaHZpZXdlcl9fcmVzaXpl
X21pbnVzJywgdGhpcy5zY3JvbGwpLmhpZGUoKTsKCQkJbGF5ZXIuJGRpdi50b2dn
bGVDbGFzcygnYXR0YWNodmlld2VyX19pbm5lcl9zY3JvbGwnLCB0aGlzLnNjcm9s
bCk7CgkJCWxheWVyLiRkaXYucmVtb3ZlQ2xhc3MoJ2F0dGFjaHZpZXdlcl9faW5u
ZXJfaGlkZGVuLW92ZXJmbG93Jyk7CgoJCQlsYXllci5zaG93KCk7CgoJCQlsYXll
ck1haW5EaXYuJHByZXYudG9nZ2xlKGluZGV4ID4gMCk7CgkJCWxheWVyTWFpbkRp
di4kbmV4dC50b2dnbGUoaW5kZXggPCB0aGlzLmZpbGVzLmxlbmd0aCAtIDEpOwoJ
CQlsYXllck1haW5EaXYuJG5hbWVJY29uLnJlcGxhY2VDbGFzcygvXHMqaWNvbl90
eXBlXC1bXlxzXSsvLCAnJykuYWRkQ2xhc3MoJ2ljb25fdHlwZS0nICsgaWNvblR5
cGUpOwoJCQlsYXllck1haW5EaXYuJG5hbWUudGV4dChmaWxlLm5hbWUpOwoJCQls
YXllck1haW5EaXYuJGRvd25sb2FkTGluay5hdHRyKCdocmVmJywgZmlsZS5kb3du
bG9hZFVybCk7CgkJCWxheWVyTWFpbkRpdi4kcGFnZXIudGV4dCgoaW5kZXggKyAx
KSsgJyAnK0xhbmcuZ2V0KCdhdHRhY2hWaWV3ZXIucGFnaW5nLmZyb20nKSsnICcg
K3RoaXMuZmlsZXMubGVuZ3RoKTsKCQkJbGF5ZXJNYWluRGl2LnNsaWRlci5oaWRl
KCk7CgkJCWxheWVyTWFpbkRpdi5zbGlkZXIuc2V0U2VsZWN0ZWQoaW5kZXgpOwoK
CQkJdGhpcy5fY3JlYXRlKHRoaXMuaW5kZXgsIHRoaXMudHlwZSwgZmlsZSk7CgoJ
CQl0aGlzLl90aXRsZSgpOwoJCX0sCgoJCXNldEZpbGU6IGZ1bmN0aW9uIChpbmRl
eCkgewoJCQl2YXIgZmlsZSA9IHRoaXMuZmlsZXNbaW5kZXhdOwoJCQlpZiAoZmls
ZSkgewoJCQkJdmFyIGhvc3QgPSBsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBs
b2NhdGlvbi5ob3N0OwoJCQkJdmFyIHVybCA9IGpzSGlzdG9yeS5nZXQoKS5yZXBs
YWNlKC9bJlw/XV9hdj1bXiZdKy8sICcnKS5yZXBsYWNlKG5ldyBSZWdFeHAoJ14o
KCcgKyBTdHJpbmcucHJlZ19xdW90ZShob3N0KSArICcpPy9jZ2ktYmluLyk/Jyks
ICcnKTsKCQkJCWpzSGlzdG9yeS5zZXQodXJsICsgKHVybC5pbmRleE9mKCc/Jykg
PT09IDAgPyAnPycgOiAnJicpICsgJ19hdj0nICsgZmlsZS5QYXJ0SUQsIHsKCQkJ
CQlhdHRhY2hWaWV3ZXJGaWxlUGFydElEOiBmaWxlLlBhcnRJRAoJCQkJfSwgdHJ1
ZSk7CgkJCX0KCQl9LAoKCQlzZXRNb2RlOiBmdW5jdGlvbiAoaXNTaG9ydCkgewoJ
CQlpZiAoaXNTaG9ydCAhPSB0aGlzLmlzU2hvcnQpIHsKCQkJCXRoaXMuaXNTaG9y
dCA9IGlzU2hvcnQ7CgkJCQl0aGlzLmRyYXdUZW1wbGF0ZSgpOwoJCQkJaWYgKGlz
U2hvcnQgJiYgbWFpbHJ1LkF1ZGlvUGxheWVyQXBpKSB7CgkJCQkJdGhpcy4kY29u
dGFpbmVyLmZpbmQoJy5qcy1sb2FkcGxheWVyLCAuanMtcGxheScpLmJpbmQoJ2Ns
aWNrJywgdGhpcy5sb2FkUGxheWVyQ2xpY2tPYnNlcnZlcik7CgkJCQl9CgkJCQlt
YWlscnUuQWpheCh7CgkJCQkJdHlwZTogJ1BPU1QnLAoJCQkJCXVybDogJy9jZ2kt
YmluL2FqYXhfbW9kaWZ5cHJvZmlsZT9hamF4X2NhbGw9MSZmdW5jX25hbWU9JyAr
IChpc1Nob3J0ID8gJ25ld19hdHRhY2hfdmlld2VyX29mZicgOiAnbmV3X2F0dGFj
aF92aWV3ZXJfb24nKQoJCQkJfSk7CgkJCX0KCQl9LAoKCQlfdGl0bGU6IGZ1bmN0
aW9uICgpIHsKCQkJdmFyIGRhdGEgPSB7CgkJCQluYW1lOiB0aGlzLmZpbGUubmFt
ZSwKCQkJCXN1YmplY3Q6IHRoaXMuZGF0YS5TdWJqZWN0LAoJCQkJZW1haWw6IG1h
aWxydS51c2VyZW1haWwKCQkJfTsKCQkJZG9jdW1lbnQudGl0bGUgPSBMYW5nLmdl
dCgndGl0bGUuYWpheF9hdHRhY2hfYWN0aW9uJykucmVwbGFjZSgvIyhcdyspIy9n
aSwgZnVuY3Rpb24gKGEsIGtleSkgewoJCQkJcmV0dXJuIGRhdGFba2V5XSB8fCAn
JzsKCQkJfSk7CgkJfSwKCgkJX2NyZWF0ZTogZnVuY3Rpb24gKGluZGV4LCB0eXBl
LCBmaWxlKSB7CgkJCXZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLCBldmVudDsK
CQkJdmFyIHRlbXBsYXRlSWQgPSBvcHRpb25zLnR5cGVfb3RoZXJfdG1wbF9pZDsK
CQkJdmFyIHRlbXBsYXRlRGF0YSA9ICQuZXh0ZW5kKHRydWUsIHt9LCB7CgkJCQlk
YXRhOiB0aGlzLmRhdGEsCgkJCQlmaWxlOiBmaWxlCgkJCX0pOwoJCQl2YXIgaXNN
c2RvYyA9ICh0eXBlID09ICdkb2MnIHx8IHR5cGUgPT0gJ2V4Y2VsJyB8fCB0eXBl
ID09ICdwcCcpOwoJCQl2YXIgaXNQREYgPSAodHlwZSA9PSAncGRmJyAmJiAhYWpz
LlBERi5kaXNhYmxlZCAmJiAhJC5icm93c2VyLm1vemlsbGEpOwoKCQkJdmFyICRp
bm5lciA9IHRoaXMubGF5ZXJDYWNoZVtpbmRleF07CgoJCQlpZiAodGhpcy4kcHJl
dmlvc0xheWVyKSB7CgkJCQl0aGlzLiRwcmV2aW9zTGF5ZXJbdGhpcy5yZW1vdmVQ
cmV2aW9zID8gJ3JlbW92ZScgOiAnaGlkZSddKCk7CgkJCX0KCgkJCWlmICgkaW5u
ZXIpIHsKCQkJCSRpbm5lci5zaG93KCk7CgoJCQl9IGVsc2UgewoJCQkJJGlubmVy
ID0gJCgnPGRpdi8+Jywge3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfSku
YXBwZW5kVG8odGhpcy5sYXllci4kZGl2KTsKCgkJCQlpZiAoIShpc01zZG9jIHx8
IGlzUERGKSkgewoJCQkJCXRoaXMubGF5ZXJDYWNoZVtpbmRleF0gPSAkaW5uZXI7
CgkJCQl9CgoJCQkJaWYgKHR5cGUgPT0gJ2ltYWdlJykgewoJCQkJCXRlbXBsYXRl
SWQgPSBvcHRpb25zLnR5cGVfaW1hZ2VfdG1wbF9pZDsKCQkJCQl0aGlzLmxheWVy
LiRkaXYuYWRkQ2xhc3MoJ2F0dGFjaHZpZXdlcl9faW5uZXJfbm9zY3JvbGwnKTsK
CgkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ3RleHQnKSB7CgkJCQkJdGVtcGxhdGVJ
ZCA9IG9wdGlvbnMudHlwZV90ZXh0X3RtcGxfaWQ7CgoJCQkJfSBlbHNlIGlmIChp
c1BERikgewoJCQkJCXRlbXBsYXRlSWQgPSBvcHRpb25zLnR5cGVfcGRmX3RtcGxf
aWQ7CgoJCQkJfSBlbHNlIGlmIChpc01zZG9jKSB7CgkJCQkJdGVtcGxhdGVJZCA9
IG9wdGlvbnMudHlwZV9tc2RvY190bXBsX2lkOwoKCQkJCQlpZiAoKG1haWxydVsn
SXNNUlZNU0RvY0VuYWJsZWQnXSAmJiB0eXBlID09ICJkb2MiICYmIChmaWxlLmV4
dCA9PSAiZG9jIiB8fCBmaWxlLmV4dCA9PSAiZG9jeCIpKSB8fCAobWFpbHJ1WydJ
c01SVk1TRXhjZWxFbmFibGVkJ10gJiYgdHlwZSA9PSAiZXhjZWwiICYmIChmaWxl
LmV4dCA9PSAieGxzIiB8fCBmaWxlLmV4dCA9PSAieGxzeCIpKSB8fCB0aGlzLnV0
aWxzLmlzQ1NWUHJldmlldyhmaWxlKSB8fCAobWFpbHJ1WydJc01SVlJ0ZkVuYWJs
ZWQnXSAmJiBmaWxlLmV4dCA9PSAicnRmIikgfHwgKG1haWxydVsnSXNNUlZNU1Bw
dEVuYWJsZWQnXSAmJiAoZmlsZS5leHQgPT0gInBwdHgiIHx8IGZpbGUuZXh0ID09
ICJwcHQiKSkpIHsKCQkJCQkJJC5leHRlbmQodGVtcGxhdGVEYXRhLCB7CgkJCQkJ
CQlwcmV2aWV3TVNWVXJsOiB0aGlzLnV0aWxzLmdldE1SVlVybCh0aGlzLmRhdGEs
IGZpbGUsIHRydWUpCgkJCQkJCX0pOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSQuZXh0
ZW5kKHRlbXBsYXRlRGF0YSwgewoJCQkJCQkJcHJldmlld01TVlVybDogdGhpcy51
dGlscy5nZXRNU1ZVcmwodGhpcy5kYXRhLCBmaWxlLCB0cnVlKQoJCQkJCQl9KTsK
CQkJCQl9CgoJCQkJCWlmICh0eXBlID09ICdkb2MnKSB7CgkJCQkJCWV2ZW50ID0g
J3Nob3dXb3JkLm9mZmljZVdlYkFwcHMnOwoJCQkJCX0gZWxzZSBpZiAodHlwZSA9
PSAnZXhjZWwnKSB7CgkJCQkJCWV2ZW50ID0gJ3Nob3dFeGNlbC5vZmZpY2VXZWJB
cHBzJzsKCQkJCQl9IGVsc2UgaWYgKHR5cGUgPT0gJ3BwJykgewoJCQkJCQlldmVu
dCA9ICdzaG93UG93ZXJQb2ludC5vZmZpY2VXZWJBcHBzJzsKCQkJCQl9CgoJCQkJ
fSBlbHNlIGlmICh0eXBlID09ICdhcmNoaXZlJykgewoJCQkJCXRlbXBsYXRlSWQg
PSBvcHRpb25zLnR5cGVfYXJjaGl2ZV90bXBsX2lkOwoJCQkJfQoKCQkJCWlmIChl
dmVudCkgewoJCQkJCXRoaXMuJHdpbmRvdy50cmlnZ2VySGFuZGxlcihldmVudCk7
CgkJCQl9CgoJCQkJdGVtcGxhdGVEYXRhLm1haWwgPSB0aGlzLmRhdGE7IC8vIEZJ
WE1FCgkJCQl0ZW1wbGF0ZURhdGEubGFuZyA9IExhbmcuZ2V0KCdBdHRhY2h2aWV3
ZXInKQoKCQkJCSRpbm5lci5mZXN0KCdwYWdlcy9hdHRhY2h2aWV3ZXIvJyArIHRl
bXBsYXRlSWQsIHRlbXBsYXRlRGF0YSwgZnVuY3Rpb24oKSB7CgkJCQkJaWYgKHR5
cGUgPT0gJ2ltYWdlJykgewoJCQkJCQl2YXIgJHZpZXdlciA9ICQoJy5hdHRhY2h2
aWV3ZXJfX3ZpZXdlcl9pbWFnZScsICRpbm5lcik7CgkJCQkJCXZhciAkaW1hZ2Ug
PSAkKCdpbWcnLCAkdmlld2VyKTsKCgkJCQkJCWlmICh0aGlzLmltYWdlRGF0YVt0
aGlzLmluZGV4XSAmJiB0aGlzLmltYWdlRGF0YVt0aGlzLmluZGV4XS5nZW9tZXRy
eSkgewoJCQkJCQkJJGlubmVyLmJpbmQoJ21vdXNlbW92ZScsIHRoaXMuaW5uZXJN
b3VzZU1vdmVPYnNlcnZlcik7CgoJCQkJCQl9IGVsc2UgewoJCQkJCQkJdmFyIGV2
ZW50RGF0YSA9IHtpbmRleDogdGhpcy5pbmRleCwgY29udGFpbmVyOiAkaW5uZXJ9
OwoKCQkJCQkJCWlmICgkaW1hZ2UgJiYgJGltYWdlWzBdKSB7CgkJCQkJCQkJaWYg
KCRpbWFnZVswXS5jb21wbGV0ZSkgewoJCQkJCQkJCQl0aGlzLl9pbWFnZUxvYWQo
e3RhcmdldDogJGltYWdlWzBdLCBkYXRhOiBldmVudERhdGF9KTsKCQkJCQkJCQl9
IGVsc2UgewoJCQkJCQkJCQkkaW1hZ2UuYmluZCgnbG9hZCcsIGV2ZW50RGF0YSwg
dGhpcy5faW1hZ2VMb2FkLmJpbmQodGhpcykpOwoJCQkJCQkJCX0KCQkJCQkJCX0K
CQkJCQkJfQoKCQkJCQkJaWYgKHRoaXMuaW5kZXggPCB0aGlzLmZpbGVzLmxlbmd0
aCAtIDEpIHsKCQkJCQkJCSR2aWV3ZXIuYmluZCgnY2xpY2snLCB0aGlzLmltYWdl
Q2xpY2tPYnNlcnZlcik7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdmlld2VyLmFk
ZENsYXNzKCdhdHRhY2h2aWV3ZXJfX3ZpZXdlcl9kaXNhYmxlZCcpOwoJCQkJCQl9
CgoJCQkJCX0gZWxzZSBpZiAoIW1haWxydVsnSXNNUlZNU0RvY0VuYWJsZWQnXSAm
JiB0eXBlID09ICdkb2MnICYmIG1haWxydS5Jc0NvcnBVc2VyKSB7CgoJCQkJCQlp
ZiAodGhpcy4kdGVzdGZyYW1lKSB7CgkJCQkJCQl0aGlzLiR0ZXN0ZnJhbWUucmVt
b3ZlKCk7CgkJCQkJCX0KCgkJCQkJCXRoaXMuJHRlc3RmcmFtZSA9ICQoJzxpZnJh
bWUgc3JjPSInICsgdGhpcy51dGlscy5nZXRNUlZVcmwodGhpcy5kYXRhLCBmaWxl
LCB0cnVlKSArICciLz4nKQoJCQkJCQkJLmhpZGUoKQoJCQkJCQkJLmFwcGVuZFRv
KGRvY3VtZW50LmJvZHkpOwoKCQkJCQl9IGVsc2UgaWYgKCFtYWlscnVbJ0lzTVJW
TVNFeGNlbEVuYWJsZWQnXSAmJiB0eXBlID09ICdleGNlbCcgJiYgbWFpbHJ1Lklz
Q29ycFVzZXIpIHsKCgkJCQkJCWlmICh0aGlzLiR0ZXN0ZnJhbWUpIHsKCQkJCQkJ
CXRoaXMuJHRlc3RmcmFtZS5yZW1vdmUoKTsKCQkJCQkJfQoKCQkJCQkJdGhpcy4k
dGVzdGZyYW1lID0gJCgnPGlmcmFtZSBzcmM9IicgKyB0aGlzLnV0aWxzLmdldE1S
VlVybCh0aGlzLmRhdGEsIGZpbGUsIHRydWUpICsgJyIvPicpCgkJCQkJCQkuaGlk
ZSgpCgkJCQkJCQkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7CgoJCQkJCX0gZWxz
ZSBpZih0eXBlID09ICdhcmNoaXZlJykgewoJCQkJCQkkaW5uZXIuZGVsZWdhdGUo
Jy5qcy1WaWV3U291cmNlJywgJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkJCQkJ
Ly8gc2hvdyBsb2FkaW5nIGluZGljYXRvcgoJCQkJCQkJJChlLmN1cnJlbnRUYXJn
ZXQpLmFkZENsYXNzKCdhdHRhY2h2aWV3ZXJfX3ZpZXdlcl9fc2hvdy1zb3VyY2Vf
bG9hZGluZycpOwoKCQkJCQkJCSQuZ2V0SlNPTigiL2NnaS1iaW4vYXR0X3ppcD9h
amF4X2NhbGw9MSZmdW5jX25hbWU9emlwX2xpc3QmZGF0YT1bXCIiICsgdGhpcy5m
aWxlLlBhcnRJRCArICJcIl0iLCBmdW5jdGlvbiAoUikgewoJCQkJCQkJCWlmKFJb
MV0gPT0gJ09LJyAmJiBSWzJdICYmIFJbMl1bMF0gIT0gbnVsbCkgewoJCQkJCQkJ
CQl2YXIgdHJlZSA9IHRoaXMudXRpbHMuY3JlYXRlRmlsZXNUcmVlKHRoaXMuZGF0
YSwgUik7CgoJCQkJCQkJCQl2YXIgdHJlZVdyYXBwZXIgPSAkaW5uZXIuZmluZCgn
LmF0dGFjaHZpZXdlcl9fdmlld2VyX19hcmNoaXZlLWZpbGVzJyk7CgkJCQkJCQkJ
CXRyZWVXcmFwcGVyLmZlc3QoJ3BhZ2VzL2F0dGFjaHZpZXdlci8nICsgb3B0aW9u
cy5hcmNoaXZlX3RyZWVfdG1wbF9pZCwgewoJCQkJCQkJCQkJZmlsZXM6IHRyZWUs
CgkJCQkJCQkJCQlsYW5nOiB0ZW1wbGF0ZURhdGEubGFuZwoKCQkJCQkJCQkJfSwg
ZnVuY3Rpb24oKSB7CgkJCQkJCQkJCQl0aGlzLmxheWVyLiRkaXYuYWRkQ2xhc3Mo
J2F0dGFjaHZpZXdlcl9faW5uZXJfaGlkZGVuLW92ZXJmbG93Jyk7CgkJCQkJCQkJ
CQkkaW5uZXIuYWRkQ2xhc3MoJ2F0dGFjaHZpZXdlcl9faW5uZXJfYXJjaGl2ZS1z
b3VyY2UnKTsKCgkJCQkJCQkJCQl2YXIgcm93SGVpZ2h0ID0gdHJlZVdyYXBwZXIu
ZmluZCgnLm1lc3NhZ2VsaW5lOmZpcnN0JykuaGVpZ2h0KCk7CgoJCQkJCQkJCQkJ
dHJlZVdyYXBwZXIuZGVsZWdhdGUoJy5qcy10b2dnbGUtZm9sZGVyJywgJ2NsaWNr
JywgZnVuY3Rpb24oKSB7CgkJCQkJCQkJCQkJdmFyIGlkID0gJCh0aGlzKS5hdHRy
KCdkYXRhLWlkJyk7CgoJCQkJCQkJCQkJCXZhciBub2RlID0gdHJlZS5nZXQoaWQp
OwoJCQkJCQkJCQkJCW5vZGUudG9nZ2xlT3BlbigpOwoKCQkJCQkJCQkJCQkkKHRo
aXMpLmF0dHIoJ3RpdGxlJywgJCh0aGlzKS5hdHRyKG5vZGUuaXNPcGVuID8gJ2Rh
dGEtaGlkZS10aXRsZScgOiAnZGF0YS1zaG93LXRpdGxlJykpOwoJCQkJCQkJCQkJ
CSQodGhpcykuZmluZCgnLm1lc3NhZ2VsaW5lX19maWxldHlwZV9faWNvbicpLnRv
Z2dsZUNsYXNzKCdpY29uX2ZpbGV0eXBlX2ZvbGRlciBpY29uX2ZpbGV0eXBlX2Zv
bGRlcl9vcGVuZWQnKTsKCQkJCQkJCQkJCQkkKHRoaXMpLnBhcmVudCgpLnRvZ2ds
ZUNsYXNzKCdtZXNzYWdlbGlzdF9maWxlc2xpc3Rfc2hvcnRfX2ZpbGVzX19maWxl
X2ZvbGRlciBtZXNzYWdlbGlzdF9maWxlc2xpc3Rfc2hvcnRfX2ZpbGVzX19maWxl
X2ZvbGRlcl9vcGVuZWQnKTsKCgkJCQkJCQkJCQkJJCh0aGlzKS5wYXJlbnRzKCcu
bWVzc2FnZWxpbmUnKS5lYWNoKGZ1bmN0aW9uKGkscm93KSB7CgkJCQkJCQkJCQkJ
CXZhciAkcm93ID0gJChyb3cpCgoJCQkJCQkJCQkJCQl2YXIgY291bnQgPSBBcnJh
eS5maWx0ZXIodHJlZS5nZXREZXNjZW5kYW50c09yU2VsZigkcm93LmZpbmQoJy5q
cy10b2dnbGUtZm9sZGVyOmZpcnN0JykuYXR0cignZGF0YS1pZCcpKSwgZnVuY3Rp
b24obm9kZSkgewoJCQkJCQkJCQkJCQkJcmV0dXJuIG5vZGUuaXNWaXNpYmxlKCkK
CQkJCQkJCQkJCQkJfSkubGVuZ3RoOwoKCQkJCQkJCQkJCQkJJHJvdy5oZWlnaHQo
Y291bnQgKiAocm93SGVpZ2h0ICsgMSkpOwoJCQkJCQkJCQkJCX0pCgoJCQkJCQkJ
CQkJfSkKCgkJCQkJCQkJCX0uYmluZCh0aGlzKSk7CgkJCQkJCQkJfQoKCQkJCQkJ
CX0uYmluZCh0aGlzKSk7CgoJCQkJCQl9LmJpbmQodGhpcykpCgkJCQkJfQoJCQkJ
CWVsc2UgewoJCQkJCQlpZihtYWlscnUuQXVkaW9QbGF5ZXJBcGkpCgkJCQkJCQkk
aW5uZXIuZmluZCgnLmpzLXBsYXknKS5iaW5kKCdjbGljaycsIHtmaWxlOmZpbGUs
IG5vUGxheTp0cnVlfSwgdGhpcy5sb2FkUGxheWVyQ2xpY2tPYnNlcnZlcikKCQkJ
CQkJCQkudHJpZ2dlckhhbmRsZXIoJ2NsaWNrJyk7CgkJCQkJfQoKCQkJCX0uYmlu
ZCh0aGlzKSk7CgkJCX0KCgkJCXRoaXMuJHByZXZpb3NMYXllciA9ICRpbm5lcjsK
CQkJdGhpcy5yZW1vdmVQcmV2aW9zID0gaXNNc2RvYyB8fCBpc1BERjsKCgkJCXRo
aXMuX3Jlc2l6ZSgpOwoJCX0sCgoJCV9rZXlOYXZpZ2F0aW9uT2JzZXJ2ZXI6IGZ1
bmN0aW9uIChldnQpIHsKCQkJdmFyIGtleSA9IGV2dC5rZXlDb2RlOwovLwkJCWlm
IChldnQuY3RybEtleSB8fCBldnQubWV0YUtleSkgewoJCQkJaWYgKGtleSA9PSAz
NyB8fCBrZXkgPT0gMzkgKSB7CgkJCQkJdGhpcy5zZXRGaWxlKHRoaXMuaW5kZXgg
KyAoa2V5ID09IDM3ID8gLTEgOiAxKSk7CgkJCQkJZXZ0LnByZXZlbnREZWZhdWx0
KCk7CgkJCQl9Ci8vCQkJfQoJCX0sCgoJCV9yZXNpemVDb250cm9sSG92ZXJPYnNl
cnZlcjogZnVuY3Rpb24gKGV2dCkgewoJCQljbGVhclRpbWVvdXQodGhpcy5pbWFn
ZU1vdXNlTW92ZVRpbWVvdXQpOwoJCQljbGVhclRpbWVvdXQodGhpcy5pbWFnZVJl
c2l6ZVRpbWVvdXQpOwoJCQl0aGlzLiRyZXNpemVDb250cm9sLnN0b3AodHJ1ZSwg
ZmFsc2UpOwoJCQlpZiAoZXZ0LnR5cGUgPT0gJ21vdXNlb3ZlcicpIHsKCQkJCXRo
aXMuJHJlc2l6ZUNvbnRyb2wuY3NzKCdvcGFjaXR5JywgMC41KS5zaG93KCk7CgkJ
CX0gZWxzZSB7CgkJCQl0aGlzLiRyZXNpemVDb250cm9sLmNzcygnb3BhY2l0eScs
IDAuMyk7CgkJCX0KCQl9LAoKCQlfcmVzaXplQ29udHJvbENsaWNrT2JzZXJ2ZXI6
IGZ1bmN0aW9uIChldnQpIHsKCQkJdmFyICRpbWFnZSA9ICQoJ2ltZycsIHRoaXMu
JHByZXZpb3NMYXllcik7CgkJCXRoaXMubGF5ZXIuJGRpdi50b2dnbGVDbGFzcygn
YXR0YWNodmlld2VyX19pbm5lcl9zY3JvbGwnLCB0aGlzLnNjcm9sbCA9ICF0aGlz
LnNjcm9sbCk7CgkJCWlmICh0aGlzLnNjcm9sbCkgewoJCQkJJGltYWdlLmNzcyh7
CgkJCQkJJ21heC13aWR0aCc6ICcnLAoJCQkJCSdtYXgtaGVpZ2h0JzogJycKCQkJ
CX0pOwoJCQl9IGVsc2UgewoJCQkJJGltYWdlLmNzcyh7CgkJCQkJJ21heC13aWR0
aCc6IHRoaXMubGF5ZXJHZW9tZXRyeS53aWR0aCwKCQkJCQknbWF4LWhlaWdodCc6
IHRoaXMubGF5ZXJHZW9tZXRyeS5oZWlnaHQKCQkJCX0pOwoJCQl9Ci8vCQkJJGlt
YWdlLmNzcyh7Ci8vCQkJCSdtYXJnaW5Ub3AnOiAtKCRpbWFnZVswXS5vZmZzZXRI
ZWlnaHQgLyAyKQovLwkJCX0pOwoKCQkJaWYgKCF0aGlzLmltYWdlRGF0YVt0aGlz
LmluZGV4XSkgewoJCQkJdGhpcy5pbWFnZURhdGFbdGhpcy5pbmRleF0gPSB7fTsK
CQkJfQoKCQkJdGhpcy5pbWFnZURhdGFbdGhpcy5pbmRleF0uc2Nyb2xsID0gdGhp
cy5zY3JvbGw7CgoJCQl0aGlzLiRyZXNpemVDb250cm9sLnRvZ2dsZUNsYXNzKCdh
dHRhY2h2aWV3ZXJfX3Jlc2l6ZV9taW51cycsIHRoaXMuc2Nyb2xsKTsKCQkJZXZ0
LnN0b3BQcm9wYWdhdGlvbigpOwoJCX0sCgoJCV9pbWFnZUNsaWNrT2JzZXJ2ZXI6
IGZ1bmN0aW9uIChldnQpIHsKCQkJdGhpcy5zZXRGaWxlKHRoaXMuaW5kZXggKyAx
KTsKCQkJdGhpcy4kd2luZG93LnRyaWdnZXJIYW5kbGVyKCdhdHRhY2hWaWV3ZXJQ
cmV2aWV3SW1hZ2VDbGljay5hdHRhY2hWaWV3ZXInKTsKCQl9LAoKCQlfaW5uZXJN
b3VzZU1vdmU6IGZ1bmN0aW9uIChldnQpIHsKCQkJaWYgKHRoaXMuaW1hZ2VEYXRh
W3RoaXMuaW5kZXhdICYmIHRoaXMuaW1hZ2VEYXRhW3RoaXMuaW5kZXhdLmdlb21l
dHJ5KSB7CgkJCQlpZiAodGhpcy5pbWFnZURhdGFbdGhpcy5pbmRleF0uZ2VvbWV0
cnlbMF0gPiB0aGlzLmxheWVyR2VvbWV0cnkud2lkdGggfHwgdGhpcy5pbWFnZURh
dGFbdGhpcy5pbmRleF0uZ2VvbWV0cnlbMV0gPiB0aGlzLmxheWVyR2VvbWV0cnku
aGVpZ2h0KSB7CgkJCQkJY2xlYXJUaW1lb3V0KHRoaXMuaW1hZ2VNb3VzZU1vdmVU
aW1lb3V0KTsKCQkJCQl0aGlzLmltYWdlTW91c2VNb3ZlVGltZW91dCA9IHNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgewoJCQkJCQl0aGlzLiRyZXNpemVDb250cm9sLnN0
b3AodHJ1ZSwgZmFsc2UpLmNzcygnb3BhY2l0eScsIDAuMykuc2hvdygpOwoJCQkJ
CQljbGVhclRpbWVvdXQodGhpcy5pbWFnZVJlc2l6ZVRpbWVvdXQpOwoJCQkJCQl0
aGlzLmltYWdlUmVzaXplVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkg
ewoJCQkJCQkJdGhpcy4kcmVzaXplQ29udHJvbC5hbmltYXRlKHtvcGFjaXR5OiAw
fSwgNzAwLCBmdW5jdGlvbiAoKSB7CgkJCQkJCQkJdGhpcy4kcmVzaXplQ29udHJv
bC5oaWRlKCk7CgkJCQkJCQl9LmJpbmQodGhpcykpOwoJCQkJCQl9LmJpbmQodGhp
cyksIDIwMDApOwoJCQkJCX0uYmluZCh0aGlzKSwgMTApOwoJCQkJfQoJCQl9CgkJ
fSwKCgkJX2xpc3RDbGljazogZnVuY3Rpb24gKGV2dCkgewoJCQl2YXIgJHRhcmdl
dCA9ICQoZXZ0LnRhcmdldCksIGV2ZW50OwoJCQl2YXIgJGl0ZW0gPSAkdGFyZ2V0
LmNsb3Nlc3QoJy5qcy1pdGVtJywgdGhpcy4kY29udGFpbmVyKTsKCQkJdmFyICRs
aW5rID0gJHRhcmdldC5jbG9zZXN0KCcuanMtbGluaycsICRpdGVtKTsKCQkJdmFy
ICRkb3dubG9hZCA9ICR0YXJnZXQuY2xvc2VzdCgnLmpzLWRvd25sb2FkJywgJGl0
ZW0pOwoKCQkJaWYgKCEkZG93bmxvYWQubGVuZ3RoICYmICRpdGVtLmxlbmd0aCAm
JiAkbGluay5sZW5ndGgpIHsKCgkJCQl2YXIgaW5kZXggPSAkaXRlbS5pbmRleCgp
OwoJCQkJdmFyIGZpbGUgPSB0aGlzLmZpbGVzW2luZGV4XTsKCQkJCXZhciB0eXBl
ID0gdGhpcy51dGlscy5nZXRGaWxlVHlwZShmaWxlKTsKCgkJCQlpZiAoISRsaW5r
LmlzKCdhJykpIHsKCQkJCQl2YXIgdXJsID0gdGhpcy51dGlscy5nZXRBdHRhY2hQ
cmV2aWV3VXJsKHRoaXMuZGF0YSwgZmlsZSwgaW5kZXgpOwoJCQkJCXRyeSB7CgkJ
CQkJCXZhciB3ID0gb3Blbih1cmwpOwoJCQkJCQl3LmZvY3VzKCk7CgkJCQkJfQoJ
CQkJCWNhdGNoKGUpIHt9CgkJCQl9CgoJCQkJdGhpcy4kd2luZG93LnRyaWdnZXJI
YW5kbGVyKCdhdHRhY2hWaWV3ZXJMaXN0Q2xpY2suYXR0YWNoVmlld2VyJyk7CgoJ
CQkJaWYgKHR5cGUgPT0gJ2RvYycpIHsKCQkJCQlldmVudCA9ICdjbGlja1dvcmRM
aW5rLm9mZmljZVdlYkFwcHMnOwoJCQkJfSBlbHNlIGlmICh0eXBlID09ICdleGNl
bCcpIHsKCQkJCQlldmVudCA9ICdjbGlja0V4Y2VsTGluay5vZmZpY2VXZWJBcHBz
JzsKCQkJCX0gZWxzZSBpZiAodHlwZSA9PSAncHAnKSB7CgkJCQkJZXZlbnQgPSAn
Y2xpY2tQb3dlclBvaW50TGluay5vZmZpY2VXZWJBcHBzJzsKCQkJCX0KCgkJCQlp
ZiAoZXZlbnQpIHsKCQkJCQl0aGlzLiR3aW5kb3cudHJpZ2dlckhhbmRsZXIoZXZl
bnQpOwoJCQkJfQoJCQl9CgkJfSwKCgkJX3N3aXRjaGVyQ2xpY2s6IGZ1bmN0aW9u
IChldnQpIHsKCQkJdmFyIGlzU2hvcnQgPSAhdGhpcy5pc1Nob3J0OwoJCQl0aGlz
LnNldE1vZGUoaXNTaG9ydCk7CgkJCXRoaXMuJGNvbnRhaW5lci5maW5kKCcuZmls
ZXNlYXJjaF9fdGh1bWJuYWlsX19pY29uX2RvYywgLmZpbGVzZWFyY2hfX3RodW1i
bmFpbF9faWNvbl9kb2N4LCAuZmlsZXNlYXJjaF9fdGh1bWJuYWlsX19pY29uX3hs
cywgLmZpbGVzZWFyY2hfX3RodW1ibmFpbF9faWNvbl94bHN4LCAuZmlsZXNlYXJj
aF9fdGh1bWJuYWlsX19pY29uX3BwdCwgLmZpbGVzZWFyY2hfX3RodW1ibmFpbF9f
aWNvbl9wcHR4JykuY2hpbGRyZW4oJy5maWxlc2VhcmNoX190aHVtYm5haWxfX3By
ZXZpZXcnKS5oaWRlKCk7CgkJCXRoaXMuJHdpbmRvdy50cmlnZ2VySGFuZGxlcign
YXR0YWNoVmlld2VyQ2hhbmdlTW9kZUNsaWNrLmF0dGFjaFZpZXdlcicsIFtpc1No
b3J0XSk7CgkJfSwKCgkJX2ltYWdlTG9hZDogZnVuY3Rpb24gKGV2dCkgewoJCQl2
YXIgdGFyZ2V0ID0gZXZ0LnRhcmdldCwgJHRhcmdldCA9ICQodGFyZ2V0KSwgaW5k
ZXggPSBldnQuZGF0YS5pbmRleDsKCgkJCWlmICghdGhpcy5pbWFnZURhdGFbaW5k
ZXhdKSB7CgkJCQl0aGlzLmltYWdlRGF0YVtpbmRleF0gPSB7fTsKCQkJfQoKCQkJ
dGhpcy5pbWFnZURhdGFbaW5kZXhdLmdlb21ldHJ5ID0gW3RhcmdldC5uYXR1cmFs
V2lkdGggfHwgdGFyZ2V0LndpZHRoLCB0YXJnZXQubmF0dXJhbEhlaWdodCB8fCB0
YXJnZXQuaGVpZ2h0XTsKCQkJZXZ0LmRhdGEuY29udGFpbmVyLmJpbmQoJ21vdXNl
bW92ZScsIHRoaXMuaW5uZXJNb3VzZU1vdmVPYnNlcnZlcik7CgkJCXRoaXMuX3Jl
c2l6ZSgpOwoJCQl0aGlzLmxheWVyLiRkaXYucmVtb3ZlQ2xhc3MoJ2F0dGFjaHZp
ZXdlcl9faW5uZXJfbm9zY3JvbGwnKTsKCQkJJHRhcmdldC5jc3MoJ3Zpc2liaWxp
dHknLCAndmlzaWJsZScpOwoJCX0sCgoJCV9sb2FkUGxheWVyQ2xpY2s6IGZ1bmN0
aW9uKGV2dCkgewoJCQlldnQucHJldmVudERlZmF1bHQoKTsKCQkJYWpzLnJlcXVp
cmUoWyd7cGx1Z2luc30nKydBdWRpb1BsYXllciddLCBmdW5jdGlvbiAoKXsKCQkJ
CXZhciAkRWxtID0gJChldnQudGFyZ2V0KS5jbG9zZXN0KCcuanMtYXR0YWNoQXVk
aW8sIC5qcy1pbmZvJykuZmluZCgnLmpzLXBsYXllcicpOwoJCQkJdmFyIGZpbGUg
PSBldnQuZGF0YT8gZXZ0LmRhdGEuZmlsZSA6IG51bGw7CgkJCQl2YXIgbm9QbGF5
ID0gZXZ0LmRhdGE/IGV2dC5kYXRhLm5vUGxheSA6IGZhbHNlOwoJCQkJdmFyIG9w
dGlvbnMgPSB7bm9QbGF5Om5vUGxheX07CgkJCQlpZiggZmlsZSApCgkJCQkJb3B0
aW9ucy51cmwgPSBmaWxlLm1wM1VybDsKCgkJCQkkRWxtLmF1ZGlvUGxheWVyKG9w
dGlvbnMpOwoJCQl9KTsKCQl9LAoKCQlfZG9jdW1lbnRDbGljazogZnVuY3Rpb24g
KGV2dCkgewoJCQl2YXIgbWFpbkRpdiA9IHRoaXMubGF5ZXIubWFpbkRpdjsKCQkJ
aWYgKCEkKGV2dC50YXJnZXQpLmNsb3Nlc3QoJy5qcy1sYXllcldyYXAnLCBtYWlu
RGl2LiRkaXYpLmxlbmd0aCkgewoJCQkJdGhpcy5sYXllci5oaWRlKCk7CgkJCX0K
CQl9LAoKCQlfYmVmb3JlVW5sb2FkOiBmdW5jdGlvbiAoZXZ0KSB7CgkJCXJldHVy
biBMYW5nLmdldCgnYXR0YWNoVmlld2VyLmJlZm9yZV91bmxvYWRfY29uZmlybScp
OwoJCX0sCgoJCV9yZXNpemU6IGZ1bmN0aW9uKCkgewoJCQl2YXIgb2Zmc2V0ID0g
ewoJCQkJeDogMCwKCQkJCXk6IDYwIC8vIDMwICh0b29sYmFyIGhlaWdodCkgeCAy
CgkJCX07CgoJCQlpZiAobWFpbHJ1Lk5ld0F0dGFjaFZpZXdlclBvcHVwKSB7CgkJ
CQlvZmZzZXQueCA9IG9mZnNldC55ID0gMDsKCQkJfQoKCQkJdGhpcy5sYXllckdl
b21ldHJ5ID0gewoJCQkJd2lkdGg6IHRoaXMubGF5ZXIuJGRpdi53aWR0aCgpIC0g
b2Zmc2V0LngsCgkJCQloZWlnaHQ6IHRoaXMubGF5ZXIuJGRpdi5oZWlnaHQoKSAt
IG9mZnNldC55CgkJCX07CgoJCQl0aGlzLiRyZXNpemVDb250cm9sLmhpZGUoKTsK
CgkJCWlmICh0aGlzLnR5cGUgPT0gJ2ltYWdlJykgewoJCQkJaWYgKCF0aGlzLnNj
cm9sbCkgewoJCQkJCXZhciAkaW1hZ2UgPSAkKCdpbWcnLCB0aGlzLiRwcmV2aW9z
TGF5ZXIpOwoJCQkJCSRpbWFnZS5jc3MoewoJCQkJCQknbWF4LXdpZHRoJzogdGhp
cy5sYXllckdlb21ldHJ5LndpZHRoLAoJCQkJCQknbWF4LWhlaWdodCc6IHRoaXMu
bGF5ZXJHZW9tZXRyeS5oZWlnaHQKCQkJCQl9KTsKLy8JCQkJCSRpbWFnZS5jc3Mo
ewovLwkJCQkJCSdtYXJnaW5Ub3AnOiAtKCRpbWFnZVswXS5vZmZzZXRIZWlnaHQg
LyAyKQovLwkJCQkJfSk7CgkJCQl9CgkJCX0gZWxzZSBpZiAodGhpcy50eXBlID09
ICdkb2MnIHx8IHRoaXMudHlwZSA9PSAnZXhjZWwnIHx8IHRoaXMudHlwZSA9PSAn
cHAnKSB7CgkJCQkkKCcuYXR0YWNodmlld2VyX192aWV3ZXJfX3dyYXAnLCB0aGlz
LiRwcmV2aW9zTGF5ZXIpLmNzcygnaGVpZ2h0JywgdGhpcy5sYXllckdlb21ldHJ5
LmhlaWdodCArIDIwKTsKCQkJfSBlbHNlIGlmICh0aGlzLnR5cGUgPT0gJ3BkZicp
IHsKCQkJCWlmICgkLmJyb3dzZXIubXNpZSkgewoJCQkJCXZhciB3cmFwSGVpZ2h0
ID0gdGhpcy5sYXllckdlb21ldHJ5LmhlaWdodCAtIHRoaXMubGF5ZXIubWFpbkRp
di5zbGlkZXIub3B0aW9ucy5zbGlkZXJfbWF4X2hlaWdodDsKCQkJCQlpZiAocGFy
c2VJbnQoJC5icm93c2VyLnZlcnNpb24pIDwgOCkgewoJCQkJCQl3cmFwSGVpZ2h0
IC09IDE7CgkJCQkJfQoJCQkJCSQoJy5hdHRhY2h2aWV3ZXJfX3ZpZXdlcl9wZGZ3
cmFwJywgdGhpcy4kcHJldmlvc0xheWVyKS5jc3MoJ2hlaWdodCcsIHdyYXBIZWln
aHQpOwoJCQkJfQoJCQl9CgkJfSwKCgoJCWRlc3Ryb3k6IGZ1bmN0aW9uICgpewoJ
CQlpZiAodGhpcy4kY29udGFpbmVyKSB7CgkJCQl0aGlzLiRjb250YWluZXIudW5i
aW5kKCdjbGljaycsIHRoaXMubGlzdENsaWNrT2JzZXJ2ZXIpOwoJCQkJdGhpcy4k
Y29udGFpbmVyLnVuZGVsZWdhdGUoJy5qcy1zd2l0Y2hlcicsICdjbGljaycsIHRo
aXMuc3dpdGNoZXJDbGlja09ic2VydmVyKTsKCQkJfQoJCX0KCX0pOwoKCWpzTG9h
ZGVyLmxvYWRlZCgne21haWxydS5hdHRhY2hWaWV3ZXJ9bWFpbHJ1LkZ1bGxBdHRh
Y2hWaWV3ZXIuVmlld2VyJywgMSk7CgovLyBkYXRhL3J1L2ltYWdlcy9qcy9ydS9q
c0NvcmUvUHJvamVjdHMvbWFpbC5ydS9BdHRhY2hWaWV3ZXIvbWFpbHJ1LkZ1bGxB
dHRhY2hWaWV3ZXIuVmlld2VyLmpzIGVuZAoKLy8gMTMKCWpzTG9hZGVyLmxvYWRl
ZCgne21haWxydS5idWlsZH1BdHRhY2hWaWV3ZXInLCAwKTsKCn0pKGpRdWVyeSwg
alF1ZXJ5KTsKCi8vIGRhdGEvcnUvaW1hZ2VzL2pzL3J1L2J1aWxkL0F0dGFjaFZp
ZXdlci5qcyBlbmQK
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/mail/ru/images/ru/_new_mail_sprite.png?5
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAQIAAAAtCAMAAAByHJU1AAAABGdBTUEAAK/INwWK
6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMAUExURbq6
ut+/UODg4NPT09u0Lvv7+//2mcTExO7u7tzd3ePk5fbSZf//pP//n/nZdtHR0ffW
benq6+7v8Pr6+vrdffvfg/Lz9Pvhiv/wuv/qob6+vvzih/X29+vKdNDQ0Pf4+P/s
k/3ji87Ozv3kjfneh8PDw+HDWrW1tsvLy/bag+Li4uHBVP7ljcjIyOvr67u7u9LS
0v7ljv/0zOTk5PPVf/39/fv8/fT09NXV1aSkpOrJcv3ki/DSe/X19fHx8d/f38rK
ynex6tPT1JrF79lJO+/v79ra2pB+fs8JMLi1tO3Od8fHx//nlPj4+L0NI5OUlIa2
5f/pnG6n3pydm/7ssoeJif/xlpK+6sApGv7vudfX166sqmad1v/6m+rq6sjGw+3t
7aYjFrSyr+np6dbS0sgyI//rpfghVOMLPZwMHf/ulPqvr8bCwvualtjW0+JaS6yr
qNu0XtE9LvzjjNvb3P/7nKuqp62vr6impP7yxO1lV5eYmNHNzL5hDuXDbfmnp/mF
eP/qkcG/v/9VkL26uvdnY/mMhPqTi83JyefCZOjGbenn5966ZNPRzvyysuiqtOrV
i/tFRfYmJ/r7+/2plqeoqO+gMt7c3O9wY/jy2tvZ1+ual+g3N/d2aO3s7PTz8/n6
+vfa19XW19bU0OfTeuvXkv+8O/fv1NDR0ZQhFsjFxd7d2fw4Oe6AfP9rqv/QQuro
5JaFhf//sr+8vPf3+PTZev//uv/KpO7MXv/ni///6vrp6P98xf3gfuDd3eW+WvNz
c7I/NPyqNf//qvDx8v9Eev/wsv//+Pbsy///3P//z///xPznm/3Kyv9cpd3a2eDh
4ujGcPx5ef/vqP/tmLu3t+K9aM+tVO3u7uTi4vn5+vOuruHi4v/un7hgV7y8vPf2
9vp+cc/Q0OVxcf/hR+jp6u7OYurp6d1RQrE0J8J5cf6xqtcmJr9NQP77+8rKxuXk
4PfDZdPR0ePh3fr7/PfXc87NybGtrdmppPj39+zMyevs7f/mj/n5+f///////9SZ
RPQAAAEAdFJOU///////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/////////////////////////////////wBT9wclAAAGiklEQVR42tzZZ0ATVwDA
8QCPBKyQCrKCQImEpQEEUUkFWrVUHIACUUCGgm1lWRShyBJkyHDPumfdrXXVUVe1
buvee3fvXfLou9zlcknukpQEPPr/dCsc+eXdXS7HaTZGPLz/9qKs8ixiavaW2XQb
hPv3Xp6xaceYyMqfnz9obrU4RhGAeIwGuQWm2zanRpqqLCzPKSemtszZQk8QGVmV
7d0n0XVa5Q52EygEmA1yY5O2nU+NfO/dMbQEs+cwjAJTskhWE2ACZljMBmtik35c
rE6QVas4EKrnVOsi+IPNBKSAFgNE8EuuOsGMGgXB4aWH2/MooAgwG0yPTdqsQZBV
M4OY2rp0qy6CJPYSqAgwGiCCxWvUCc5dOkdM3V56u/0SqAkwGSAC7GpgqkKgs3B/
s8QIUVVklZjFBLzg4GAz1dASTYOSApoX51TnEFOPv31MT1B1NTtxRXBaxqbsqywl
4Nna2gaoh5ZpGPxORzDjkuJcsGTAEnqC5rbIEAJeaGioKxZ0pYaWqhv8UNCSv89+
Al5YWJgQC6ZAodBbSIaWqxqkbi5I/T8S8NLT072xYEpKChSLxd5kaA3PCP9bvhe7
CXi+vr5iLJiGBUUikZgMrTOCQZuNgpNrTfRr1nqqQEREhAgLhuFBgUAgIkNrec3t
JM5JT2jVUZ8mwW7vKwXQ5U+ABUMVQS8vLwEZWt9eDDizdgE4yUp3kyDYtY4UQAc8
BwvKlMHCwkIOGdqirQxcP1616pt5ObU1W5es2t8CApMmF2TA1RUScHH3VAiEhIQU
F6NPHQZTg/Pnz/ciKi5G25AGT0pnfvrF2+/MbC2CkQM+yamdsmj8gLEjW0DQrQkz
SH5Fe8lIoOlVT+rvA/HxIVC96OjoEHnx8Sq/HzwZF4URRA0c2CoEbyKC2inLJn85
oYUEgXKDJm0hAUmTI0HAwz9nGA8hkwESwDciDD4aF/XhVHWCmJgRxNTw10cZSjCv
5iEaBBPGjm4ZgWOTBECuFgEuBBe7OikIOLJeMtlQ38EQ0hsUFkZHw8FB6OxgLuNo
I+hvTAI0CAwhcOp6UZsBEihzUCEwxw3MNYIwtjg2NhYXsCUJPhgXNfXzViMQIoIp
DxcZSOBQBk4wGPTgngBlHmoEtrhBb40gxI4CuUDbEiyrNpTAowzsk9ISSPeBaz40
BMiAD/00QudJ6CoXUCXArgYzW49g8vjvjhz5avTYjQYQ+FwDp+gMpKdAY09aArmB
qUZQIUAh+KyUZtdGJBi98d6f+7//++t7Gw0ZBT49G8FpTQPpadDYl4FAbtBHPVJA
O0FMf6wRcgCsUYYQGPbtUEnQtxGcyVQTyDwD8gYxEsgNXlNNKUAhWFDaTGswghgE
BgkYk2BQHtitapC5G+S5aCGQG1hQowgoCRb8VLqgVQ8E4xG45IHtV4You7Id5El0
EVjyqVnSETAUQ04Nb2YNgeQ6OHp3mKK7R8H1Mu0EMl9zvsoo4A/Vn8BYGZVgLXAB
HS+/hXe5I5pbq53AF/ItZNQs+DCorQkMvVmmEiSjeyEXYHU8Duu4lXwuWYPgvpJA
Q0DFgG0Eb/STrWhYmDFtWu5Ni6H0BJgAdt/IdUxISHDkEnPJ6gQCkoBGgGrAPoKS
koyDDWErljcsTqQlwN8z9q6lRUVFUnKOy0RAK0AxYB+B8nauhI5AIYC964qKCsoc
l56AQUBpoCSIEKUEhfPFKewh2EQl6BGY4DTRwUMKJD0USQBQmZMigolOCRNVCBgF
SAMKgb8I22+laDArR0F3OUEmkHRXJpGozIFMOYG7kmAlJnBDxtQNPuwgk62kEBB7
Zg1BNpXAPTBhmEMFkLgzJwEVHg7DEhwIArdec2V34IY0N+bSNkBfN9lct/ZB4BwY
d3YvqHfWVj3Ya3c2zo4g6DL3VlCvR35dtOX36Nc7O2/ZC/C9JLKEICz0Aboo5t5U
I7ArinMG9XbaqwfOQ+J8CAL7lX47hU/ttfdU2CXIzUZJYBnBF1e+aIKMjPMNts1/
PV94cDqVoHPRAVDXWVd14EBcZ4LAxuaYMMhGVx2Ex9L/IQlE2NUg5UWfDhmeI1hb
gzpr3dUB699wAv9EP+8LnXR3wbvTagWBiB3fCxieJj0Dh17Wp0PgGf40KWC1OL+D
PuWL+63G99KH1QTrTfa8pF97TPBnihb3N+Rb6lO+q789vhczVhAs96YngOtneer1
YNlzneKpqkWAgKNPArMw/AUB4aIA9o6CfwUYAJZNI+/noZRPAAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/mail/ru/images/ru/msglist/ico2.png?1
Content-Transfer-Encoding: Base64
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
1qlNAAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/mail/ru/images/ru/fade.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAeCAYAAAAcni9KAAAABGdBTUEAAK/INwWK
6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA9SURBVHja
Yvz//z8DELAAMRcQ8wOxCBBLALEkEEsjYZCYGBALAjEvEwOZYFTjqMZRjaMaRzWO
aiQVAAQYAEXxBDjw3KXzAAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/mail/ru/images/ru/_sp_ico_attach_228.png
Content-Transfer-Encoding: Base64
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
gg==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/mail/ru/images/country_icons/ru.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAABGdBTUEAAK/INwWK
6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAE2SURBVHja
Yvz69T8DAvz79w9CQVj/0MCffwwAAcQClObiAin6/x+okxHMgPCAbOb//5n+I4EX
L74ABBALxGSwagTjPzbAyMgItAQggBg9Pf9nZPx//x7kjL9////9C2QAyf9//qCQ
QCQkxFhY+BEggFi2b/+nq8v46BEDSPQ3w+8//3//BqFfv9BJeXmQEwACCOSkP38Y
gHy4Bog0RN0vIOMXVOTPH6Cv/gEEEEgDxFKgHEgDXCmGDUAE1AAQQCybGZg1f/d8
//XsH0jTn3+///z79RtE/v4NZfz68xfI/vOX+4/0ZoZFAAHE4gYMvD+3/v2+h91w
CANo9Z+/jH9VxBkYAAKIBRg9TL//MEhKAuWAogxgZzGC2CCfgUggAoYdGAEVAwQQ
41egu5AQAyoXTQoIAAIMAD+JZR7YOGEWAAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/gif
Content-Location: https://img.imgsmail.ru/r/default/loader.gif
Content-Transfer-Encoding: Base64
R0lGODlhEAAHALMIAKW918rZ6jxxpzxwqXKfyWSUyDhxpj5wpf///wAAAAAAAAAA
AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFDwAIACwAAAAAEAAH
AAAEHhDJSSsCGMisLw9BB4AiOYYbmYZniV5mtskeZt1TBAAh+QQFDwAIACwAAAAA
BAAHAAAEChBIGQK1oN49QQQAIfkECQ8ACAAsAAAAAAoABwAABBxQSIMQuEAQIioK
AaJxnjd2pbih5emBonRUGBABACH5BAkPAAgALAAAAAAQAAcAAAQpEMkpqpEgg8GH
FAQhTEGADEXhIaA4Taj6heN7pmtbv11OkyYbq3LAaCIAIfkECQ8ACAAsAAAAABAA
BwAABCoQyUmluAZoIIcfFkEIQBBwyFAUICKIpImqbDiWZ7e27711H5ugQnRdDhEA
IfkEBQ8ACAAsAAAAABAABwAABCIQyUkrAhjIrNH4AxAEnUhKQ1GEY9miKnterxdz
W4aCVj9FADs=
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHNJREFUOMvFk1EKwCAMQ1/BY+7+h5iT7meCFsuUCvYnkEpIUhRVvZgf/VAqkYC7IXRBTABNQCYw1UGn2uCUQF7Ib6OKdRCO4Jbl7ewVPNvqvdlyhewVZKwP938djPJ33LYIYQEZfBgvTocJeKIOzguUowIvRf0qS7kvvy4AAAAASUVORK5CYII=
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHNJREFUOMvFk1EKwCAMQ1/BY+7+h5iT
7meCFsuUCvYnkEpIUhRVvZgf/VAqkYC7IXRBTABNQCYw1UGn2uCUQF7Ib6OKdRCO
4Jbl7ewVPNvqvdlyhewVZKwP938djPJ33LYIYQEZfBgvTocJeKIOzguUowIvRf0q
S7kvvy4AAAAASUVORK5CYII=
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/r/default/ico/ico__messagelist__file-type-icon.234.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAA4AAADhCAYAAAD4WoSGAAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA
AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U
Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6
eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w
Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE
ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv
YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv
bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v
eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv
YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht
cC5paWQ6MUU3NzgyNDFENUFFMTFFMTlGODhCRjZFQ0ZEMDA0ODEiIHhtcE1NOkRv
Y3VtZW50SUQ9InhtcC5kaWQ6MUU3NzgyNDJENUFFMTFFMTlGODhCRjZFQ0ZEMDA0
ODEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp
ZDoxRTc3ODIzRkQ1QUUxMUUxOUY4OEJGNkVDRkQwMDQ4MSIgc3RSZWY6ZG9jdW1l
bnRJRD0ieG1wLmRpZDoxRTc3ODI0MEQ1QUUxMUUxOUY4OEJGNkVDRkQwMDQ4MSIv
PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94
cGFja2V0IGVuZD0iciI/PtLiwloAAAsvSURBVHja7Fp9cFXFFd/dd/Mg8UEygWgg
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
TPv8V4ABAD8uaHOCVv05AAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/r/default/ico/ico__attachview_206.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAb8AAAB4CAYAAABiifzKAAAACXBIWXMAAAsTAAAL
EwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj33
3vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEs
DIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIe
EeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH
/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAn
f+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJ
V2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4
mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHg
g/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl
7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/A
V/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5
WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQ
WHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA
RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv
1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4
IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGy
UT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPE
bDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM
WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPE
NyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD
5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2h
tlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0
dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHK
CpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2ep
O6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN
2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIp
G6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3n
U9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36
p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP
jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLn
m+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cR
p7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0H
DYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dn
F2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofc
n8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh
7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJ
gUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p
DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85
ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7
F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/R
NtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9
MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo
1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5
sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF
fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTP
ZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJ
zs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ
+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3v
dy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtb
Ylu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ7
52PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7
nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9
zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9D
BY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfy
l5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT
0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq
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
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/gif
Content-Location: https://img.imgsmail.ru/0.gif
Content-Transfer-Encoding: Base64
R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAQAICRAEAO///////
/////////////////yH+FkdJRiBTbWFydFNhdmVyIFZlcjEuMWEALAAAAAABAAEA
AAQCEAAAOw==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/r/default/ico/ico__attach.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAK8AAAMgCAYAAABVnDLlAAAqb0lEQVR42u2dDbAd
ZXnHUxh0OmWYttMvkGmn047TFGs7U+qMaDtaizapZlq1U6UdRzHMVIHi2GJTagXa
gYzKR4uNykfRRgMkIBQCART5iIkJEDEJ3nw2yg1pPsglgXBzkxCS7fm/yXPynvfu
7tlzzrvn7J77OzM/95yzezbj5seTZ9/d/b/TkiSZBhCbLaO7kge/tyH50l2reiLv
xYGG6Ixs3pl8475VyU1LNiTdvnbtO5J88/61uQJzsCE6ix9+qimulp0y/9vr3W9X
bNqXKzAHG6Jjsi147LmuMHlVffME5mBDKfLe++TOrli08vkWefME5mBDKfI+svrF
rgnlzRKYgw2lyCvZukHymqC+vGkCc7ChFHlHth7sitVb9mTKGwrMwYZS5N2y69Wu
kMDtxnclMfJCafI+/+KrXSGBbbgsC72QF0qTN+2f/CJs2TnhWoe8EQnkhUrKq+q7
cdsrTuAskBcqKa/Y/tJrjqz1yAuVlbcIyAvIC4C8gLzIC8gLgLyAvMgLyIu8gLwA
yAvIi7yAvADIC8iLvIC8yAvIC5D/DFtZ4mrfyAuloKA9JUSWIfCOvQfcvvVncLCh
NIEVuNdrxGmI9ql968/gQENt4SAA8gIgL3RNxCh95IX+niBFjtJHXugPJUXpIy/0
58KAXiVE6SMvlCNsN3QRpY+8EFfc76/akIztGS/c02pb/SYtdr9AlD7yQjx5JeNo
48PTDYosR48LrN8uW7ujmyh95IV4Pe61B44hQY/uvMQt7bs09DJ5LUpfghaN0kde
iC6vxH0t+RtHUXm7idJHXogm7z+vbUi55lDyw7GlTlwtJam+n7vyUMtSmLxPjWw7
EaXfSCMvGqWPvBBV3nacd/mCZOacryUXPTzeIq+1BaMv7C8cpY+8EE1eCSlBtRQX
3DjiZLXPkvYts6936P2hI5Pl7SRKH3khqry+uL6ovrjTP3CVW6ZV3k6i9JEXossr
cSVoO7LkLfrcGPJCNHln3vWzHYG8gLzIC73Iq1GCCx/6cGFxta1+g7xQiXsbtm0f
S44c3J/sPzTuRhK0DN/rpW38exuQF2p5V5nERV4YOKq8eopi4UNrmlIWQWO3yAtT
KmIJeQF5kReQF5AXeQF5kReQF3mRF3kBeZEXkBd5YZK8/YjSR16ITplR+tqnRekj
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
65+0IS/y1krej82+0ImrJfIib+3aBh/kRd7ayKsHLDVUpiXyIm+t5M37jLzIW2l5
/XFefd63fAbyIm914p7SbiiXpHqMx7/Kps+diqt9689ADuSNjq6aZQlsT0L0cmlY
+9afgRzIW5rAa/7rVx29xJyGIC7yAiAvAPLC1JP30JEkWbFpX/LA7iQZbXzxdAO9
X7Ty+eSL39mSzLlrtWPR+oNu/X79gIMKg5Z37JUjyVcf35Jcs3i1W0pQofdXz1+a
XPqVJcnHr7vXoXnDlowedesl+zGHObgwAHk3bnvFVVQJKlHbyavPWnfTkg3NaqzK
rAqtSm0V26r1vU8yOR6UJO+pM+YkYvoHrkpmzvlact7lC5qi6r2+07qf++DVbjt9
1jp/W8kteY9XYSettn3v7cdaDA4+RJf3znkXJ9d8+uxjHE8Xb372v28sFZEfrr9i
9tudxGnySnYn7wv7kRfiyysBdVn16M5LkmTjzMIo11YRofq9KqwqcFbl3bJzAnmh
HHl1pUm3FB5+5v3J2N3nuPRELV3KYspnJStqe12lUiWWuGHLYd9JYFVlDj6UJq+k
lJAS0z4b/mfdD6D2Qe+dvJ8+O7HXxz9/+yQ46NAXebXUvGX+Z1vae4lr73Wvgcmr
6nrBjSNudOJpT2SNTHDgoTR5NeOOhNx6y1luKSmLLKm8UAl57a4tEX6WpFnr/cor
rl1ziMoL/ZNXk474cnbymcoLtZeXnheovACDqLz0vEDlBehUXl1J+4+Lfj5XVq3X
dvS8UBl5TVwNi+mz/6Bi+Plzs89oCkzlhYFfYZO4T33hTCenbrix91rqs7239VaB
9Xvdy/CW2de7paqvbsrRUt/p/gaqL5Qmryrp8rmvbyI58z7rErKWErjIXWXczwvl
38/bBdzPCwN9ksJuXQz/6bd//tW7at0vf/RLrg3QNlqnamu3QF705QcyK68eM+Lg
Qynyrli328kn0p5h00OZ4QOYWqfv9Rt7DMj/rZZuXUP8+d9ej7xQ3tPDO/YecPIV
eQBT0toDmA9+b0Pz6WFGG2CguQ160rfI08PfGz2U7J042iKnWosQDjrUIjHH+mLk
hVrKa5jEHHSojLwaURD+d2oj0vrdrEvEafsAKF1eE1J3j31r5ctuqc8aWdDwmHpk
S83xBQ6352QOBiav3yL48kpOC+rz5Q23R17ou7wK2BOh0Cav8snSKm+7fQAM5IRN
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
eZT+LKL0kbc68nYepT/ThX9IYPpk5B2ovGnZtkXIilXy0RPAElhVGhGQN7q87VMZ
zy2U3Ji+PNc9xq4/58jB/QiMvHHl7XYSE6FZeBSv38kTDNpelRiZkTeKvHqi1oTs
5L1ELBII7b8kreSllUDenuVV9ewGjfm+8t3zXYCHCwopOB+EHn5kMhPkHZi8Eteq
roRshkIXmQvieIyTHrZEDuTtSd5NC3+mBUmpJ3jtKd60pYmriuuGzrIi9b1ofUWK
6iKHlvod8iJvVHk1RdTxXrRt36p2wc0+WTCK35d355JZ9LzIG19eXVQoMtKgdsGF
PKdE7Kfl7Jq4Qv0umQnI27O8T351WhP9U24z8uRW1JSY/aLzQGj/tAzIG1VeaxkU
dGeXgNPi9bNi9rNSyw2Tl5YBeaPJu3zu6528OhFzM0s25M2StJuIfcOqLi0D8kaV
V+j2SMV++vcttBM1P2J/RsvlYwKdkbc0ed1Vr8aVM8mYNhdEdsT+sXj9IvNA0DIg
b1R5F112WrNl0ChCi6SRIvYtjVx3mNEyIG9UeXX2r8u2x6Z6mnEiXv+4qFY9u00u
128Ic0beUtoGVV1J1slcEJ3E7Ot3bknLgLwxn2FT1TV5JZkliPuC6qmJXmL23W8Z
ZUDemCgdXNVQwpq4ahViR+mr11XLwD28yBsNPUCpilh2hL7+A6HqIi8A8gIgLyAv
APICIC8A8gLyAiAvAPIC8gIgLwDyAiAvIC8A8gIgLyAvAPICIC8A8gLyAiAvAPIC
8gIgLwDyAiAvIC8A8gIgLyAvAPICIC8A8gLyAiAvAPIC8gIgLwDyAiAvIC8A8gIg
LyAvAPICIC8A8gLyAiAvAPIC8nIQAHkBkBcAeQF5AZAXAHkBkBeQFwB5AZAXkBcA
eQGQFwB5AXkBkBcAeQF5AZAXAHkBkBeQFwB5AZAXkBcAeQGQFwB5AXkBkBcAeQF5
AZAXAHkBkBeQFwB5AZAXkBcAeQGQFwB5AXkBkBcAeQF5AZAXAHkBkBeQFwB5AZAX
kJeDAMgLgLwAyAvIC4C8AMgLgLyAvADIC4C8gLwAyAuAvADIC8gLgLwAyAvIC4C8
AMgLgLyAvADIC4C8gLwAyAuAvADIC8gLgLwAyAvIC4C8AMgLgLyAvADIC4C8gLwA
NeP/AUo9/IpILbjvAAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/r/default/ico_file_big_228/zip.png
Content-Transfer-Encoding: Base64
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
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/r/themes/default/icons.308.png
Content-Transfer-Encoding: Base64
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
RA/tu/KX5fM//NFhqdnR8bb9d3TrcDC0W8crDrUr0hbLyi/4rIuRBQ0maSkzT7Oc
we3NvxmjwpaRhOhwkKFNcGI+xRQxqrk9m3efVonG9yf6qHxo5Gea4lMXQiNCwzzj
gY00tTYUgNDTdv7AGsQDm6IS9dgOc9HtFW0/DfESAtIkETNYEiq/gkhwVyZe7kvT
GAP+bsoFHTgE9mu8EMK/2R00Zn8slkTri21crWPbV79s0YjfKAUGAi8wCnQG28Bj
WT0eAV/QEYwDnqA3KKmnzWoYeGGGqauvbri2kQZJEurltlK5dHBZ4FzQGniCPNm+
ugV8INRYZjZT2+FicpUvKIJc5XX0+SzXsn/Nin2cMiv2cSbmrS52U9SCrnxvpx4V
+jin5Oc5ZXJZfb4q9XVJqdzXhSr3XpdQ4ZMZfTTFnipPlb8hrUz9T7nxhYb81HUz
hDE7XoXezmQIET9G9IVeIaAStANczQvaSANuK+15zjpPUOXbT2lSpZ9zZpV+qrI9
OKlCx2/7VP5qpT1T6YuFU83qtqvPU/UyypTVOoy55s0HOdtq5wtHTLGczXWq2Gtd
WiW0vSG0XEAb8wV039H02xCDVpyGaTcwB+kDEJXOXR+ckJt89vJMHOgp7WcEPEq9
cOWstuHqv8RelA0gia46ynwGsqUyej8Q3GdJVDIgI0guyij1OOcYeuOLtTr7N/dw
y+9yD7XKyYlpTpTYifzOBtK7x4tRy/PF6L2Lxag1pg0PnSLLSKLBcbk01v8Pg/u0
7drTI8a5X3wwJ/Q2NZme/HTf2M8+zllgNejPeXW3/PlDrUOZdtV33V9nsfq+fc0W
IsfHO4PcSAfFdaQbvOCqxWNhLjxa2jsbzAOWwAosBTnGjhy8gxswUUSFqBw9eVmm
bHfLcVtU6+vYB4XED0aqSAQRX7W/do8HNtJ0AGitgwYG2s4fWIN4MAq0NkALwfYz
N+IYzjRBEH0uiZ6h0vJQcFtKSwLNwUfS8kPQx4C/wzIhNRaEg49BFZAopceBN6Ty
R0BN0fqiXy9K/fsEeElTXr5YlKN2OtafKeXXBEECfjaDRtL8aD3icZmBN6156mRg
/0vXdvxKDAcdQIgsbSforH0E0f0wID0cN9hRb3RzJFMw4La4Wdtxn5b7al1mua/W
k3bWZXIZQ2LvzR4b6M1uqwKL5T+DWUprfve1aW9YdRQWjiqB2wN1EMCYg7QstssQ
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
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/gif
Content-Location: data:image/gif;base64,R0lGODlhBQAUAMQAAO/z+OTr88XT5uHo8vb4+/j6/Ozw99Db6sjV5/L1+dLe7tXf7f39/tvk7+ju9fv8/cvY6ePs+P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFABQAAAUxoCSOJGOaT5oWLEu8byLLQF0bOO7se+D7g2CwQSQujseDUglpNhFQqGA6VVitkWw2BAA7
Content-Transfer-Encoding: Base64
R0lGODlhBQAUAMQAAO/z+OTr88XT5uHo8vb4+/j6/Ozw99Db6sjV5/L1+dLe7tXf
7f39/tvk7+ju9fv8/cvY6ePs+P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFABQAAAUxoCSOJGOaT5oWLEu8byLL
QF0bOO7se+D7g2CwQSQujseDUglpNhFQqGA6VVitkWw2BAA7
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAICAYAAABte3YfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFFJREFUeNpi/P//PwMUcAMxHxALArEIEIsCsRgQi0NpMaiYCFQNSC0PSOP/PzdJ1svIos5Drr1MDEMQUM3R/4eioxmHoqMZRh096ujBAQACDAC+1QoB5WGw5gAAAABJRU5ErkJggg==
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAC0AAAAICAYAAABte3YfAAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFFJREFUeNpi/P//PwMUcAMxHxALArEI
EIsCsRgQi0NpMaiYCFQNSC0PSOP/PzdJ1svIos5Drr1MDEMQUM3R/4eioxmHoqMZ
Rh096ujBAQACDAC+1QoB5WGw5gAAAABJRU5ErkJggg==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAABCAYAAADJsB7sAAAAP0lEQVQIHQXBQQqAIBAAwBE6FRmCbob//1Tv6L7NlMyEDTsudEw8WFhYmAg0nCgA+b0HKho6BgI3AoGBjob6A2FzB8AU+FE7AAAAAElFTkSuQmCC
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAB4AAAABCAYAAADJsB7sAAAAP0lEQVQIHQXBQQqA
IBAAwBE6FRmCbob//1Tv6L7NlMyEDTsudEw8WFhYmAg0nCgA+b0HKho6BgI3AoGB
job6A2FzB8AU+FE7AAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABBSURBVHjaYvz//z/D7acfuBkYGPiAWBCIRRj+M4gyMDKIAdniQCwGxaJgOYgaPiYGbICRgSBgYiATjGrEAwACDABdkQeyxxUf4gAAAABJRU5ErkJggg==
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAABGdBTUEAAK/INwWK
6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABBSURBVHja
Yvz//z/D7acfuBkYGPiAWBCIRRj+M4gyMDKIAdniQCwGxaJgOYgaPiYGbICRgSBg
YiATjGrEAwACDABdkQeyxxUf4gAAAABJRU5ErkJggg==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/r/portal/portal-menu/portal-menu__bg.png?v=1
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAABAAAACgCAYAAAAFOewUAAAA10lEQVR42uyWsREC
MQwET4z7IKMPOiAgpQSqIKECIqqgP9vkpOsZ6Z9z7h3Jv9JfXB+fKXDaGOi+Gru+
ooIxaQszvwIlV8A92EELwhXo71XegUhWucZW9k6sIJKscrbKgdf6+f5GhIOoB/zP
FNTEnt0CB6hTldkrcg8WLNVsQIeAAsM0oQcc0GFYboqx8X2wYpjgG8xQsgf0KxQY
pq7Nr7T0pFohYOCNBLvAb8Bz4un2ys2JBhhggAEGGGCAAQaUzInHy9M50QADDDDA
AAMMMMA58fd8BRgAnEXCuMhIEMYAAAAASUVORK5CYII=
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAABkCAMAAAB5GQooAAAAPFBMVEXo7vXr8Pbq8Pbt8vfu8/jk6/Ht8vjo7vTs8vfo7fTs8ffm7fPp7/Xn7fPq7/Xm7PPl6/Lr8fft8/gAAADlteA+AAAAFHRSTlP/////////////////////////AE9P5xEAAABbSURBVCjP5dLLDYAwDARRJyFAwh/67xW0p5EsV4APr4Adp8G+S3fgKIucZZeXM8ksd7hCk5NscoMLPODprPL5gTVYgPtwN+7ZsLa5FmyUUdCX7ahf8BXRz+ijXhTJBf/hBUU+AAAAAElFTkSuQmCC
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAAUAAABkCAMAAAB5GQooAAAAPFBMVEXo7vXr8Pbq
8Pbt8vfu8/jk6/Ht8vjo7vTs8vfo7fTs8ffm7fPp7/Xn7fPq7/Xm7PPl6/Lr8fft
8/gAAADlteA+AAAAFHRSTlP/////////////////////////AE9P5xEAAABbSURB
VCjP5dLLDYAwDARRJyFAwh/67xW0p5EsV4APr4Adp8G+S3fgKIucZZeXM8ksd7hC
k5NscoMLPODprPL5gTVYgPtwN+7ZsLa5FmyUUdCX7ahf8BXRz+ijXhTJBf/hBUU+
AAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/p/0.13.1/i/mail/buttons/portal-menu__icon.png
Content-Transfer-Encoding: Base64
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
76upuFsHJAAAAABJRU5ErkJggg==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://img.imgsmail.ru/p/0.6/i/default/search/portal-menu__search.wide.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAHkAAACICAYAAADDNET1AAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAA
AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U
Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6
eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w
Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE
ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv
YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv
bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v
eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv
YmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAu
aWlkOjdENEQ4Rjk3OUU3NjExRTFCRDc4QTlERUE0QzQ0MTM1IiB4bXBNTTpEb2N1
bWVudElEPSJ4bXAuZGlkOjdENEQ4Rjk4OUU3NjExRTFCRDc4QTlERUE0QzQ0MTM1
Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6
N0Q0RDhGOTU5RTc2MTFFMUJENzhBOURFQTRDNDQxMzUiIHN0UmVmOmRvY3VtZW50
SUQ9InhtcC5kaWQ6N0Q0RDhGOTY5RTc2MTFFMUJENzhBOURFQTRDNDQxMzUiLz4g
PC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBh
Y2tldCBlbmQ9InIiPz44uTKeAAAMCklEQVR42uydC3BU1RnHv/vY3ZCEQIQNEELC
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
rkJggg==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=main.css
Content-Type: text/css; charset=utf-8; name=main.css
Content-Location: https://img.imgsmail.ru/ts/1377502689/css/neo/pages/main.css?v=1377502689
Content-Transfer-Encoding: Quoted-Printable
input[type=3D"submit"],input[type=3D"button"]{font:12px Arial, sans-seri=
f}input[type=3D"text"]{outline:none}input[type=3D"checkbox"]{margin-left=
:4px}input{font:12px arial, sans-serif;vertical-align:middle}.inp{border=
:1px solid #9ba3a9;width:100%;margin-bottom:1px;font:12px arial, tahoma,=
sans-serif;padding:4px 0}textarea{outline-style:none;resize:none}.pAbs{=
position:absolute}.pRel{position:relative}.top0{top:0}.right0{right:0}.b=
ottom0{bottom:0}.left0{left:0}.cp{cursor:pointer !important}.fll{float:l=
eft}.flr{float:right}.dN{display:none !important}.dB{display:block !impo=
rtant}.dIB{display:inline-block !important}.dIB2{display:inline-block}.p=
0{padding:0 !important}.p1{padding:1px !important}.p2{padding:2px !impor=
tant}.p3{padding:3px !important}.p4{padding:4px !important}.p5{padding:5=
px !important}.p10{padding:10px !important}.p15{padding:15px !important}=
.p20{padding:20px !important}.p25{padding:25px !important}.p30{padding:3=
0px !important}.pl0{padding-left:0 !important}.pl1{padding-left:1px !imp=
ortant}.pl2{padding-left:2px !important}.pl3{padding-left:3px !important=
}.pl4{padding-left:4px !important}.pl5{padding-left:5px !important}.pl7{=
padding-left:7px !important}.pl10{padding-left:10px !important}.pl15{pad=
ding-left:15px !important}.pl20{padding-left:20px !important}.pl25{paddi=
ng-left:25px !important}.pl30{padding-left:30px !important}.pl35{padding=
-left:35px !important}.pl40{padding-left:40px !important}.pr0{padding-ri=
ght:0 !important}.pr1{padding-right:1px !important}.pr2{padding-right:2p=
x !important}.pr3{padding-right:3px !important}.pr4{padding-right:4px !i=
mportant}.pr5{padding-right:5px !important}.pr10{padding-right:10px !imp=
ortant}.pr15{padding-right:15px !important}.pr20{padding-right:20px !imp=
ortant}.pr25{padding-right:25px !important}.pr30{padding-right:30px !imp=
ortant}.pr45{padding-right:45px !important}.pr55{padding-right:55px !imp=
ortant}.pr75{padding-right:75px !important}.pr85{padding-right:85px !imp=
ortant}.pt0{padding-top:0 !important}.pt1{padding-top:1px !important}.pt=
2{padding-top:2px !important}.pt3{padding-top:3px !important}.pt4{paddin=
g-top:4px !important}.pt5{padding-top:5px !important}.pt7{padding-top:7p=
x !important}.pt10{padding-top:10px !important}.pt11{padding-top:11px !i=
mportant}.pt15{padding-top:15px !important}.pt20{padding-top:20px !impor=
tant}.pt25{padding-top:25px !important}.pt30{padding-top:30px !important=
}.pb0{padding-bottom:0 !important}.pb1{padding-bottom:1px !important}.pb=
2{padding-bottom:2px !important}.pb3{padding-bottom:3px !important}.pb4{=
padding-bottom:4px !important}.pb5{padding-bottom:5px !important}.pb10{p=
adding-bottom:10px !important}.pb15{padding-bottom:15px !important}.pb20=
{padding-bottom:20px !important}.pb25{padding-bottom:25px !important}.pb=
30{padding-bottom:30px !important}.pb45{padding-bottom:45px !important}.=
m0{margin:0 !important}.m1{margin:1px !important}.m2{margin:2px !importa=
nt}.m3{margin:3px !important}.m4{margin:4px !important}.m5{margin:5px !i=
mportant}.m10{margin:10px !important}.m15{margin:15px !important}.m20{ma=
rgin:20px !important}.m25{margin:25px !important}.m30{margin:30px !impor=
tant}.ml0{margin-left:0 !important}.ml1{margin-left:1px !important}.ml2{=
margin-left:2px !important}.ml3{margin-left:3px !important}.ml4{margin-l=
eft:4px !important}.ml5{margin-left:5px !important}.ml10{margin-left:10p=
x !important}.ml15{margin-left:15px !important}.ml20{margin-left:20px !i=
mportant}.ml25{margin-left:25px !important}.ml30{margin-left:30px !impor=
tant}.ml50{margin-left:50px !important}.ml70{margin-left:70px !important=
}.ml100{margin-left:100px !important}.mr0{margin-right:0 !important}.mr1=
{margin-right:1px !important}.mr2{margin-right:2px !important}.mr3{margi=
n-right:3px !important}.mr4{margin-right:4px !important}.mr5{margin-righ=
t:5px !important}.mr10{margin-right:10px !important}.mr15{margin-right:1=
5px !important}.mr20{margin-right:20px !important}.mr25{margin-right:25p=
x !important}.mr30{margin-right:30px !important}.mt0{margin-top:0 !impor=
tant}.mt1{margin-top:1px !important}.mt2{margin-top:2px !important}.mt3{=
margin-top:3px !important}.mt4{margin-top:4px !important}.mt5{margin-top=
:5px !important}.mt7{margin-top:7px !important}.mt10{margin-top:10px !im=
portant}.mt15{margin-top:15px !important}.mt20{margin-top:20px !importan=
t}.mt25{margin-top:25px !important}.mt30{margin-top:30px !important}.mb0=
{margin-bottom:0 !important}.mb1{margin-bottom:1px !important}.mb2{margi=
n-bottom:2px !important}.mb3{margin-bottom:3px !important}.mb4{margin-bo=
ttom:4px !important}.mb5{margin-bottom:5px !important}.mb7{margin-bottom=
:7px !important}.mb10{margin-bottom:10px !important}.mb14{margin-bottom:=
14px !important}.mb15{margin-bottom:15px !important}.mb20{margin-bottom:=
20px !important}.mb25{margin-bottom:25px !important}.mb30{margin-bottom:=
30px !important}.mb34{margin-bottom:34px !important}.arial{font-family:a=
rial, sans-serif !important}.t0{font-size:0px !important}.t9{font:10px T=
ahoma, sans-serif !important}.t10{font:10px Tahoma, sans-serif !importan=
t}.t11{font:11px Tahoma, sans-serif !important}.t12{font:12px Arial, Hel=
vetica, sans-serif !important}.t13{font-size:13px !important}.t14{font-s=
ize:14px !important}.t16{font-size:16px !important}.t18{font-size:18px !=
important}.lh16{line-height:16px}.lh-18{line-height:18px}.ohd{overflow:h=
idden}.w100{width:100%}.w50{width:50%}.w33{width:33%}.w35{width:35%}.w25=
{width:25%}.w55{width:55%}.w75{width:75%}.w90{width:90%}.w75px{width:75p=
x}.w115px{width:115px !important}.w120px{width:120px !important}.w160px{=
width:160px !important}.w180px{width:180px !important}.black{color:#000 =
!important}.grey{color:#999 !important}.grey2{color:#656972 !important}.=
green{color:#33A206}.red{color:#E9221F}.blue{color:#0857A6 !important}.o=
range{color:#FE6001}.vti{vertical-align:top !important}.vmi{vertical-ali=
gn:middle !important}.vbi{vertical-align:bottom !important}.tac{text-ali=
gn:center}.tal{text-align:left !important}.tar{text-align:right !importa=
nt}.nobr{white-space:nowrap}.tdn{text-decoration:none !important}.bold{f=
ont-weight:700 !important}h1{margin:0;padding:0 0 5px;color:#444;font-si=
ze:17px}.h1{margin:0;padding:0 0 5px;color:#444;font-size:17px}h3{margin=
:0 0 7px 0;padding:0;color:#444;font-size:14px}.h3{margin:0 0 7px 0;padd=
ing:0;color:#003073;font-size:14px;font-weight:700}.h3a{border-bottom:1p=
x solid #0857A6;color:#0857A6;font-size:14px;font-weight:700;text-decora=
tion:none}a:HOVER.h3a{border-bottom:0;text-decoration:none}.bDash{border=
-bottom:1px dashed;text-decoration:none !important;padding-left:1px}a:HO=
VER.bDash{border-bottom:0}.mr_read__top{position:relative;background:#ff=
f;color:#5e6061}.mr_read__top_in{padding:9px 11px 8px;border-bottom:1px =
solid #d9d9d9}.mr_read__top_ava .mr_read__top_in{padding-right:110px;min=
-height:90px}.mr_ava{top:9px;right:10px;position:absolute;width:90px;hei=
ght:90px;background-color:#fff;background-position:50% 50%;background-re=
peat:no-repeat;color:#fff;font:11px Tahoma, sans-serif;line-height:90px}=
.mr_ava__link{display:block;width:90px;height:90px;background-position:5=
0% 50%;background-repeat:no-repeat;text-decoration:underline}.mr_ava__tt=
l{position:absolute;left:-99999px;bottom:0;left:0;width:100%;height:18px=
;line-height:15px;color:#fff;cursor:pointer;text-align:center;background=
:#000;background:rgba(0, 0, 0, 0.5)}.mr_ava__ttl:hover{text-decoration:n=
one}a.mr_ava__link:hover .mr_ava__ttl{left:0}.mr_read__title{padding:0 0=
11px;color:#000;font-weight:700;font-size:16px;line-height:17px;word-wr=
ap:break-word}.mr_read__flag{display:inline-block;width:14px;height:17px=
;margin:0px 7px 0 0;vertical-align:top;background:url("//img.imgsmail.ru=
/mail/ru/images/ru/_new_mail_sprite.png?5") no-repeat -235px -30px;curso=
r:pointer}.mr_read__flag:hover{background-position:-155px 1px}.mr_read__=
flag_y,.mr_read__flag_y:hover{background-position:-195px -15px}.mr_read_=
_top_attch{margin:0 0 0 15px;position:relative;color:#5e6061 !important;=
padding:0 0 0 24px}.mr_read__top_attach_ico{position:absolute;top:0;left=
:0;width:17px;height:17px;background-position:-69px -41px;cursor:pointer=
}.mr_read__date{padding-bottom:5px}.mr_read__tbl{margin:0 0 2px;border-c=
ollapse:collapse;border-spacing:0}.mr_read__tbl td{padding:0 0 3px;verti=
cal-align:top}.mr_read__lbl{padding-right:8px !important}.mr_ico{display=
:inline-block;margin:0 0 0 4px;background:url("//img.imgsmail.ru/mail/ru=
/images/ru/msglist/ico2.png?1") no-repeat -330px 0;font:0/0 a;vertical-a=
lign:top}.mr_read__top_attach_ico{position:absolute;top:0;left:0;width:1=
7px;height:17px;background-position:-69px -41px;cursor:pointer}.mr_read_=
_fromf{font-size:13px;font-weight:bold;line-height:12px;color:#000}.mr_r=
ead__ab{width:14px;height:16px;background-position:-94px 0}.mr_read__fin=
dall{width:15px;height:15px;background-position:-110px -1px}.mr_read__bo=
dy{position:relative;padding:21px 10px;overflow-x:auto}.mr_read__body bl=
ockquote{margin-right:0;padding-right:0}.mr_read__body blockquote blockq=
uote blockquote blockquote blockquote{margin-right:10px;min-width:200px}=
.mr_read__attach{padding:13px 0;border-top:1px solid #d9d9d9}.fade{left:=
0;width:14px;display:block;position:absolute;margin-left:-14px;backgroun=
d:url("//img.imgsmail.ru/mail/ru/images/ru/fade.png") repeat-y right 0}.=
fadeMark{left:0;width:14px;display:block;position:absolute;margin-left:-=
14px;background:url("//img.imgsmail.ru/mail/ru/images/ru/fadeMark.png") =
repeat-y right 0}.filesHide{padding:3px 0 10px 40px;display:block;color:=
#656972 !important;font:11px Tahoma, sans-serif !important}.filesShow{pa=
dding:3px 0 10px 40px;display:block;color:#656972 !important;font:11px T=
ahoma, sans-serif !important}.filesShow .fileHide{display:none !importan=
t}.filesShow .fileShow{display:inline-block !important}.filesHide .fileH=
ide{display:inline-block}.filesHide .fileShow{display:none}.filesShow .f=
ilesShow{display:none !important}.filesShow .filesHide{display:none !imp=
ortant}.filesShow .i-f{background-position:-70px -589px !important}.file=
sHide .i-f{background-position:-35px -624px}.filesShow .attIns{display:n=
one}.filesName{font-weight:700;font:12px Arial, sans-serif !important}b.=
filesName{color:#000}.i-spI{background-image:url("//img.imgsmail.ru/mail=
/ru/images/ru/_sp_ico_attach_228.png");background-position:-140px 0;back=
ground-repeat:no-repeat;float:left;height:35px;width:45px;margin-left:-4=
0px;position:relative}.i-def{background-position:-140px 0}.i-psd,.i-tga,=
.i-ai,.i-tif,.i-tiff,.i-eps,.i-image,.i-bmp,.i-gif,.i-jpg,.i-jpeg,.i-png=
,.i-tif,.i-psd,.i-psp,.i-svg{background-position:-105px -35px}.i-doc,.i-=
docx,.i-wpd,.i-wps,.i-rtf{background-position:-70px -70px}.i-csv,.i-xls,=
.i-xlsx,.i-xlsb,.i-xlsm{background-position:-35px -105px}.i-ppt,.i-pptx,=
.i-pps,.i-ppsx{background-position:0 -140px}.i-pdf{background-position:-=
140px -175px}.i-txt,.i-log{background-position:-105px -210px}.i-eml,.i-m=
sg{background-position:-70px -245px}.i-mail{background-position:-70px -2=
45px}.i-audio,.i-mp3,.i-ram,.i-midi,.i-wav,.i-ogg,.i-aiff,.i-flac,.i-m4a=
,.i-wma{background-position:0 -315px}.i-video,.i-avi,.i-mpeg,.i-mp4,.i-a=
sf,.i-mov,.i-3gp,.i-mpg,.i-wmv,.i-flv{background-position:-140px -350px}=
.i-lightning{background-position:-105px -385px}.i-exe,.i-vbs,.i-js{backg=
round-position:-70px -420px}.i-html{background-position:0 -665px}.i-zip,=
.i-rar,.i-7z,.i-arj,.i-gz,.i-bzip2,.i-zipz,.i-bz2{background-position:-3=
5px -455px}.i-press{background-position:0 -490px}.i-mp3Play{background-p=
osition:-140px -525px}.i-mp3Pause{background-position:-105px -560px}.att=
Ins{position:relative;border-left:1px dashed #777;padding:0 0 4px 5px;ma=
rgin:9px 0 5px 5px}.attUg{position:absolute;top:-4px;left:-10px;border-c=
olor:#FFF #FFF #888 !important}.sortU{display:inline-block;border-color:=
#000 #f5f7f9 #f5f7f9 #f5f7f9;border-style:solid;border-width:4px 4px 0 4=
px;line-height:0;font-size:0;height:0;margin:0 0 0 5px;width:0}.sortD{di=
splay:inline-block;border-color:#E6E8ED #E6E8ED #000 #E6E8ED;border-styl=
e:solid;border-width:0 4px 4px 4px;line-height:0;font-size:1px;height:0;=
margin:0 0 0 5px;width:0}.mr_read__answer{margin:0 0 22px;padding:6px 0 =
4px 11px;border:1px solid #aaaeb7;height:80px;color:#999;cursor:text}.mr=
_read__answer textarea{width:100%;height:80px;margin:0;padding:0;border:=
0;font-family:Arial;font-size:12px;color:#999;overflow:auto}.oranzhe{bor=
der-left:5px solid #FFAA00;padding:5px 0 5px 10px}.oranzhe2{border-left:=
5px solid #FFAA00;padding:5px 0 5px 10px}.mr-fs{position:relative;margin=
:0 0 30px;border:solid 1px #dadce5;#zoom:1}.mr-fs_disable{color:#989898}=
.mr-fs_in{padding:20px 40px 10px}.mr-fs_ttl{font-weight:700;margin:-28px=
0 10px;position:relative}.mr-fs_ttl_in{margin:0 0 0 -10px;background:#f=
ff;padding:0 10px;_display:inline;_zoom:1}.mr-fs_ttl2 .mr-fs_ttl_in{marg=
in-left:-28px;padding-left:2px}.mr-fs_ttl2 input{position:relative}.mr-f=
s_c{position:absolute;border-bottom:solid 2px #eaebf0;border-left:solid =
2px #fff;height:0;width:0;top:-1px;left:-1px;overflow:hidden}.mr-fs_rt{b=
order-left:0;border-right:solid 2px #fff;margin:0 0 0 100%}.mr-fs_lb{bor=
der-bottom:0;border-left-color:#fff;border-top:solid 2px #eaebf0;top:aut=
o;margin:-1px 0 0}.mr-fs_rb{border-bottom:0;border-left:0;border-right:s=
olid 2px #fff;border-top:solid 2px #eaebf0;top:auto;margin:-1px 0 0 100%=
}table.tableCell{border-collapse:collapse}table.tableCell td{margin:0;pa=
dding:0;font:12px arial, sans-serif;vertical-align:top}table.tableLines =
td{border-top:solid 1px #ecedf2;padding:8px 0 10px}table.tableLines tr:f=
irst-child td,table.tableLines tr.first-child td{border:0}table.tableVmi=
td{vertical-align:middle}.mr-off{background:url("//img.imgsmail.ru/mail=
/ru/images/ru/sprite.png") no-repeat -345px -144px;font-size:11px;color:=
#989898;padding:0 0 0 17px}.mr-on{background:url("//img.imgsmail.ru/mail=
/ru/images/ru/sprite.png") no-repeat -297px -189px;font-size:11px;color:=
#309600;padding:0 0 0 17px}.alertDiv{position:absolute;z-index:65002;top=
:45%;width:100%;left:0;text-align:center}.alertDivSpan{margin:0 auto;tex=
t-align:left;background-color:#FFF;border:8px solid #c2c4cc;line-height:=
20px;width:390px;min-width:20px;display:inline-block;position:relative;z=
-index:1200}.alertLoad{background:url("//img.imgsmail.ru/mail/ru/images/=
ru/loading.gif") no-repeat center;position:absolute;height:16px;z-index:=
30011;top:48%;width:100%;left:0;text-align:center}.imgLoad{background:ur=
l("//img.imgsmail.ru/mail/ru/images/ru/loading.gif") no-repeat center;po=
sition:absolute;display:inline-block;height:16px;width:16px;z-index:3000=
11}.alertDiv .phonePrefix{position:absolute;top:0;#top:1px;left:4px;padd=
ing-left:19px;background:url("//img.imgsmail.ru/mail/ru/images/country_i=
cons/ru.png") 0 5px no-repeat;height:20px;line-height:21px}.alertDiv .in=
Put{padding:2px 0 2px 38px;font-family:Arial, Helvetica, sans-serif;widt=
h:120px;margin:0}.verification_height{min-height:200px;_height:200px}.no=
tify_height{min-height:185px;_height:185px}.verOk{background:url("//img.=
imgsmail.ru/mail/ru/images/ru/_sp_ico.png?4") no-repeat 0 -960px;width:1=
5px;height:15px;display:inline-block;vertical-align:middle;margin:0 5px =
0 0;overflow:hidden}.spI{background-image:url("//img.imgsmail.ru/mail/ru=
/images/ru/_sp_ico.png?4");background-repeat:no-repeat;display:inline-bl=
ock;padding:0 0 3px 20px;margin-right:20px;vertical-align:middle}.iOnes{=
display:inline-block;height:16px;vertical-align:middle;padding-bottom:0}=
.iDelBig{background-position:-80px -320px}.mr-edit{background:url("//img=
.imgsmail.ru/mail/ru/images/ru/sprite.png") no-repeat -319px -169px;padd=
ing:0 0 0 20px}.mr-mbl{background:url("//img.imgsmail.ru/mail/ru/images/=
ru/sprite.png") no-repeat -372px -121px;padding:0 0 0 13px}.mr-gr_t{back=
ground:#f2f3f7;border-bottom:solid 1px #dadce5}.mr-gr_b{background:#f2f3=
f7;border-top:solid 1px #dadce5;height:5px;overflow:hidden}.mr-link{font=
-size:11px;text-decoration:none}.mr-link u{border-bottom:dashed 1px;text=
-decoration:none !important;cursor:pointer}.mr-link:hover u{border-color=
:#f26d00}.mr-lock{background:url("//img.imgsmail.ru/mail/ru/images/ru/sp=
rite.png") no-repeat -270px -214px;padding:0 0 0 23px;display:inline-blo=
ck;height:14px}.mr-unlock{background:url("//img.imgsmail.ru/mail/ru/imag=
es/ru/sprite.png") no-repeat -247px -237px;padding:0 0 0 23px;display:in=
line-block;min-height:14px;_height:14px}.mr-dlt{background:url("//img.im=
gsmail.ru/mail/ru/images/ru/sprite.png") no-repeat -224px -261px;height:=
13px;width:13px;display:block;overflow:hidden}.sortA{display:block;paddi=
ng:3px 20px 3px 7px;text-decoration:none;color:black;white-space:nowrap}=
a:HOVER.sortA{text-decoration:none;color:black;background-color:#dedfe3}=
.box-popup{position:absolute;color:#000;background:#fff;margin-top:22px;=
min-width:300px;_width:300px;cursor:default;z-index:1020}.box-popup .div=
_inner{border:solid 1px #656566;padding-bottom:14px;display:block}.box-p=
opup .item,.box-popup .item_hover{padding:3px}.box-popup .sCrnTR,.box-po=
pup .sCrnBL,.box-popup .sCrnBR,.box-popup .sBrdR,.box-popup .sBrdB{posit=
ion:absolute;display:block;overflow:hidden}.box-popup .sCrnTR,.box-popup=
.sCrnBL{width:12px;height:12px}.box-popup .sCrnBR{width:17px;height:17p=
x}.box-popup .sCrnTR,.box-popup .sCrnBR,.box-popup .sBrdR{right:-12px}.b=
ox-popup .sCrnBL,.box-popup .sCrnBR,.box-popup .sBrdB{bottom:-12px}.box-=
popup .sCrnTR{background:url("//img.imgsmail.ru/r/gogo/shd_crn_tr.png") =
0 0 no-repeat;top:0}.box-popup .sCrnBL{background:url("//img.imgsmail.ru=
/r/gogo/shd_crn_bl.png") 0 0 no-repeat;left:auto}.box-popup .sCrnBR{back=
ground:url("//img.imgsmail.ru/r/gogo/shd_crn_br.png") 0 0 no-repeat}.box=
-popup .sBrdR{background:url("//img.imgsmail.ru/r/gogo/shd_brd_r.png") 0=
0 repeat-y;width:12px;top:0;bottom:0;margin-top:12px;margin-bottom:5px}=
.box-popup .sBrdB{background:url("//img.imgsmail.ru/r/gogo/shd_brd_b.png=
") 0 0 repeat-x;height:12px;left:0;right:0;margin-left:12px;margin-right=
:5px}.box-popup .sCrnTR,.box-popup .sCrnBL,.box-popup .sCrnBR,.box-popup=
.sBrdR,.box-popup .sBrdB{_background:none}.box-popup .sCrnTR{_filter:pr=
ogid:DXImageTransform.Microsoft.AlphaImageLoader(src=3D'//img.imgsmail.r=
u/r/gogo/shd_crn_tr.png',sizingMethod=3D'crop')}.box-popup .sCrnBL{_filt=
er:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=3D'//img.imgsm=
ail.ru/r/gogo/shd_crn_bl.png',sizingMethod=3D'crop')}.box-popup .sCrnBR{=
_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=3D'//img.=
imgsmail.ru/r/gogo/shd_crn_br.png',sizingMethod=3D'crop')}.box-popup .sB=
rdR{_height:expression((parentNode.offsetHeight-17));_filter:progid:DXIm=
ageTransform.Microsoft.AlphaImageLoader(src=3D'//img.imgsmail.ru/r/gogo/=
shd_brd_r.png',sizingMethod=3D'scale')}.box-popup .sBrdB{_width:expressi=
on((parentNode.offsetWidth-17));_filter:progid:DXImageTransform.Microsof=
t.AlphaImageLoader(src=3D'//img.imgsmail.ru/r/gogo/shd_brd_b.png',sizing=
Method=3D'scale')}.box-popup .sInnr{background:#fff;border:#656565 1px s=
olid;padding:1px;overflow:hidden}.box-popup .inner-padding{padding:15px;=
padding-bottom:14px;padding-top:3px}.box-popup .link-close{padding-botto=
m:3px;margin-right:-7px;font-size:11px;float:right}.bGbottom{border-bott=
om:1px solid #CCC;margin-bottom:10px;padding-bottom:10px}.bsbb{-webkit-b=
ox-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.m=
lr-snd_itxt{border:1px solid #9BA3A9;padding:1px;height:22px;font:12px/1=
6px arial, sans-serif, helvetica;margin:0;width:100%}.ielt8-body .mlr-sn=
d_itxt{width:99%;height:18px;float:left}@media screen and (-webkit-min-d=
evice-pixel-ratio:0){.mlr-snd_input_expand .mlr-snd_itxt{padding:1px 3px=
}}.mlr-snd_input_expand .mlr-snd_itxt{overflow:hidden}.j-expandField_scr=
oll .mlr-snd_itxt{overflow-y:scroll;resize:none}.lbl{display:inline-bloc=
k;margin:0 0 -10px 10px;background:#fff;padding:0 6px}@media screen and =
(-webkit-min-device-pixel-ratio:0){.lbl{position:relative;bottom:-5px}}.=
loadProgress{background:url("//img.imgsmail.ru/r/default/loader.gif") 0 =
50% no-repeat;color:#666;padding-left:20px;display:block;height:16px;fon=
t:12px/15px arial, helvetica, sans-serif;text-align:left}.stop{display:b=
lock;padding:0 0 0 40px;background:url("//img.imgsmail.ru/mail/ru/images=
/ru/sprite.png?1") no-repeat -185px -280px}#ReadMsgBottom,#ReadMsgBody{b=
ackground:#fff}.addPh1{display:inline-block;background-color:#e3e3e3;mar=
gin:10px 0 0 2px}.addPh2{display:inline-block;background-color:#bdbdbd;p=
osition:relative;top:-1px;left:-1px}.addPh3{display:inline-block;backgro=
und-color:#FFF;padding:3px;border-top:1px solid #e3e3e3;border-left:1px =
solid #e3e3e3;border-right:1px solid #a3a3a3;border-bottom:1px solid #a3=
a3a3;position:relative;top:-1px;left:-1px}.ac_results{border:1px solid #=
E7E8ED;background-color:#fff;overflow:hidden;z-index:30000}.ac_results u=
l{width:100%;list-style-position:outside;list-style:none;padding:0;margi=
n:0}.ac_results li{margin:0;padding:2px 5px;cursor:default;font-size:12p=
x;line-height:16px;overflow:hidden}.ac_over{background-color:#DEDFE3}.ac=
_loading{background-image:url("//img.imgsmail.ru/r/default/loader.gif");=
background-position:100% 50%;background-repeat:no-repeat}.ac-layer{displ=
ay:none;position:absolute;left:0;color:#000;background:#fff;min-width:32=
2px;width:322px;cursor:default;z-index:30001}.ac-layer .sCrnTR,.ac-layer=
.sCrnBL,.ac-layer .sCrnBR,.ac-layer .sBrdR,.ac-layer .sBrdB{position:ab=
solute;display:block;overflow:hidden}.ac-layer .sCrnTR,.ac-layer .sCrnBL=
{width:12px;height:12px}.ac-layer .sCrnBR{width:17px;height:17px}.ac-lay=
er .sCrnTR,.ac-layer .sCrnBR,.ac-layer .sBrdR{right:-12px}.ac-layer .sCr=
nBL,.ac-layer .sCrnBR,.ac-layer .sBrdB{bottom:-12px}.ac-layer .sCrnTR{ba=
ckground:url("//img.imgsmail.ru/mail/ru/images/gogo/shd_crn_tr.png") 0 0=
no-repeat;top:0}.ac-layer .sCrnBL{background:url("//img.imgsmail.ru/mai=
l/ru/images/gogo/shd_crn_bl.png") 0 0 no-repeat;left:auto}.ac-layer .sCr=
nBR{background:url("//img.imgsmail.ru/mail/ru/images/gogo/shd_crn_br.png=
") 0 0 no-repeat}.ac-layer .sBrdR{background:url("//img.imgsmail.ru/mail=
/ru/images/gogo/shd_brd_r.png") 0 0 repeat-y;width:12px;top:0;bottom:0;m=
argin-top:12px;margin-bottom:5px}.ac-layer .sBrdB{background:url("//img.=
imgsmail.ru/mail/ru/images/gogo/shd_brd_b.png") 0 0 repeat-x;height:12px=
;left:0;right:0;margin-left:12px;margin-right:5px}.ac-layer .sInnr{backg=
round:#FFF;border:#666 1px solid;padding:1px;overflow:hidden}.ml-A{right=
:77px;margin-top:-1px;#zoom:1}.ml-A I{background:url("//img.imgsmail.ru/=
mail/ru/images/ru/icons-msglist-attach_228.png?0") top left no-repeat;di=
splay:inline-block;vertical-align:middle;margin-right:5px;width:14px}.ml=
-A UL,.ml-At{background:#fff;border:1px solid #c7c7c7;border-right-color=
:#818181}.ml-A UL{border-bottom-color:#818181;list-style:none;margin:0}.=
ml-At{width:30px;height:25px;border-bottom:none;background:url("//img.im=
gsmail.ru/mail/ru/images/ru/msglist/ico2.png") no-repeat -33px -33px whi=
te}I.ml-iArhiv{background-position:0 0;height:16px}I.ml-iExel{background=
-position:0 -21px;height:12px}I.ml-iLetter{background-position:0 -38px;h=
eight:10px}I.ml-iMp3{background-position:0 -53px;height:13px}I.ml-iPictu=
re{background-position:0 -71px;height:14px}I.ml-iPowerPoint{background-p=
osition:0 -90px;height:13px}I.ml-iTxt{background-position:0 -108px;heigh=
t:14px}I.ml-iWord{background-position:0 -127px;height:12px}I.ml-iPdf{bac=
kground-position:0 -144px;height:14px}I.ml-iOther{background-position:0 =
-162px;height:13px}.ml-Asr,.ml-Asb{overflow:hidden;opacity:.4;position:a=
bsolute}.ml-Asr{border-right:1px solid #818181;width:1px;bottom:1px;righ=
t:-1px;top:1px}.ml-Asb{border-bottom:1px solid #818181;right:0;height:1p=
x;bottom:1px;left:1px}.bG{background:#fff;border:1px solid #D9D9D9;margi=
n-bottom:10px;padding:7px 10px 10px 10px}.rb_banner{text-align:center}.r=
b_body{background:#fff;border:1px solid #D9D9D9;font:12px;padding:7px 10=
px 10px 10px;overflow:hidden;text-align:left}.rb_h4{border-bottom:1px so=
lid #0857A6;color:#0857A6;font-size:17px;font-weight:700;text-decoration=
:none}.rb_body h4{margin:0}a:HOVER.rb_h4{border-bottom:0 solid #0857A6}.=
rb_h5{color:#fd7102;display:block;font-size:13px;font-weight:700;padding=
:7px 0 0 0;text-decoration:none}.rb_h6{color:#0857A6;display:block;font-=
size:13px;font-weight:700;padding:0 0 3px 0;text-decoration:none}.rb_con=
tent{margin:7px 0 0 0;overflow:hidden}.rb_img{float:left;margin:0 5px 0 =
0;background-position:left top;background-repeat:no-repeat}.rb_flash{flo=
at:left;margin:0 5px 0 0}.rb_nobr{white-space:nowrap}.rb_text{overflow:h=
idden}.rb_textSmall{font:11px Tahoma, sans-serif;overflow:hidden}.rb_nex=
t{font-weight:700;font:11px Tahoma, sans-serif;float:right;margin-top:5p=
x}.rb_more{font-weight:700;font:11px Tahoma, sans-serif;display:block;ma=
rgin-top:5px}.rb_imgUl{background-position:left top;background-repeat:no=
-repeat;font-weight:700;display:block;height:50px;margin:0;width:100%;pa=
dding-left:55px}.rb_ul{margin:10px 0 0 13px;padding-left:2px}.rb_li{colo=
r:#999}.rb_mb5{margin-bottom:5px}.rb_dotDiv{border-bottom:1px dotted #52=
525a;color:#52525a;margin:0 0 5px 0;font-size:11px;position:relative;hei=
ght:14px}.rb_dotSpan{right:0;position:absolute;bottom:-2px;background-co=
lor:#FFF}.rb_dotA{bottom:-2px;position:relative}.rb_nA-3,.rb_nA{font:11p=
x Tahoma, sans-serif;display:block;padding:0 0 0 55px;margin:0 0 10px 0;=
min-height:50px;background-position:-3px 2px;background-repeat:no-repeat=
}.rb_nA{background-position:0 2px}.rb_nA2{font:11px Tahoma, sans-serif;d=
isplay:block;padding:0 0 0 10px;margin:0 0 10px 0;background-position:-1=
40px -80px}.rb_nZ0{border-bottom:1px solid #dadce5;height:0.6em;margin:0=
0 1em 0}.rb_nZ{color:#7E828C;font:10px Tahoma, sans-serif;text-decorati=
on:none;background-color:#FFF;padding:0 6px 0 0;float:left}a:HOVER.rb_nZ=
{text-decoration:underline;color:#7E828C}.rb_nZ2{float:right;color:#F26D=
00;font:10px Tahoma, sans-serif;background-color:#FFF;padding:0 0 0 6px}=
.rb_nTown{float:right;color:#656972 !important;font:11px tahoma, sans-se=
rif !important;padding-top:2px;text-decoration:none}a:HOVER.rb_nTown{tex=
t-decoration:underline;color:#656972 !important}.rb_iWeather{background-=
repeat:no-repeat;background-position:0 0;display:inline-block;margin-top=
:4px;padding:9px 0 9px 35px;font-size:13px;color:#FE6001;font-weight:700=
}.rb_h5{display:block;font-weight:700;text-decoration:none}.rb_h6{displa=
y:block;font-weight:700;text-decoration:none}.rb_voteI{margin-left:-20px=
;position:absolute}.rb_voteS{overflow:hidden;display:block}.rb_voteP{mar=
gin:7px 0 0 0;border-top:1px solid #CCC;padding-top:10px;overflow:hidden=
}.rb_voteL{display:block;margin-top:5px;padding-left:20px}.rb_voteT{bord=
er:1px solid #D6D6D6;width:195px}.rb_voteT-2{border:1px solid #D6D6D6;wi=
dth:215px}.rb_answerI{display:inline-block;width:100%;font-style:normal;=
padding:5px 0 2px 0;vertical-align:middle}.rb_answerS{display:inline-blo=
ck;background-color:#e6e6e6;width:82%;font:0/0 a;vertical-align:middle}.=
rb_answerS span{display:inline-block;background-color:#FE6001;height:7px=
;font:0/0 a}.rb_answerB{display:inline-block;width:14%;padding:0 0 0 3%;=
text-align:right;vertical-align:middle}.rb_mmH3{margin:10px 0 5px 0}.rb_=
mmDiv{margin-bottom:10px;word-spacing:normal;width:49%;vertical-align:to=
p;display:inline-block;position:relative;text-align:left}.rb_mmDivM{word=
-spacing:normal}.rb_mmImg{display:inline-block;vertical-align:top;width:=
30px;height:33px;background-repeat:no-repeat;background-position:0 3px;m=
argin-right:-40px}.rb_mmSpan{display:inline-block;vertical-align:top;pad=
ding-left:40px;font:11px tahoma, sans-serif}.rb_topSlot{display:inline-b=
lock}.rb_topSlotLink{display:block;background-color:#E3E3E3}.rb_topSlotL=
ink a{display:inline-block;padding:2px 0 4px 0;font:11px Tahoma, sans-se=
rif;color:#999}.rb_topSlotLinkRed{display:block;background-color:#B22222=
}.rb_hi_iSP{background-image:url("//img.imgsmail.ru/mail/ru/images/ru/hi=
.png")}.rb_hi_i1{width:760px;background-color:#7f7f7f;overflow:hidden;wh=
ite-space:nowrap;vertical-align:middle;font-size:13px;font-weight:700;ma=
rgin:0 auto}.rb_hi_i2{background-color:#7f7f7f;border-left:1px solid #FF=
F;border-right:1px solid #FFF;font-size:0;height:1px;line-height:0;posit=
ion:relative}.rb_hi_i3{border:1px solid #FFF;margin:0 1px;height:86px;ba=
ckground-repeat:repeat-x;background-position:0 0}.rb_hi_i4{display:inlin=
e-block;background-repeat:repeat-x;background-position:0 -97px}.rb_hi_i5=
{display:inline-block;background:url(//rs.mail.ru/b9816110.png) no-repea=
t center;height:86px;width:220px;vertical-align:middle;padding-right:10p=
x}.rb_hi_i6{display:inline-block;background-repeat:no-repeat;background-=
position:center;height:86px;width:86px;vertical-align:middle;border-left=
:1px solid #FFF;border-right:1px solid #FFF}.rb_hi_i7{display:inline-blo=
ck;width:162px;white-space:normal;vertical-align:middle;color:#000;margi=
n:0 5px}.rb_gray9{font-size:9px;color:#797A80}.rb_geo{background-repeat:=
no-repeat;background-position:0 0;padding-left:19px}.mlr-clear:after{con=
tent:'';clear:both;display:block}.dd-orientation-left{left:auto;right:0}=
.dd-orientation-right{left:0;right:auto}.mr_read_pr{background:url("//im=
g.imgsmail.ru/mail/ru/images/ru/msglist/ico2.png") no-repeat -258px -99p=
x;padding:0 0 0 9px;margin:0 0 0 15px}.mr_arrow,.mr_arrow_u{border-top:s=
olid 3px #999;border-right:solid 3px transparent;border-left:solid 3px t=
ransparent;display:inline-block;width:1px;height:1px;overflow:hidden;fon=
t:0/0 a;margin:0}* html .mr_arrow{width:0;height:0;border-color:#999 #e9=
eff5}* html .mr_arrow_u{width:0;height:0;border-color:#999 #e9eff5}.mr_a=
rrow b,.mr_arrow_u b{content:'';display:block;width:1px;height:1px;backg=
round:#999;overflow:hidden}.mr_arrow_u{border-bottom:solid 4px #999;bord=
er-top:0}.or_table{background-color:#fff}.suggHOVER{background-color:#de=
dfe3}.minwidth{min-width:960px}body,html{margin:0;padding:0;height:100%;=
position:relative}body{font-family:Arial, Tahoma, Verdana, sans-serif;fo=
nt-size:13px}form{margin:0;padding:0}a:hover{text-decoration:none}img{bo=
rder:0}input{font-family:Tahoma, Arial, Verdana, sans-serif;font-size:12=
px}textarea{outline-style:none;resize:none}.page{position:relative;width=
:90%;margin:0 auto;overflow:hidden}.page__leftcol{float:left;width:240px=
;margin-right:-264px}.page__content{float:left;width:100%;min-height:400=
px;padding-bottom:30px}.page__content__wrapper{float:none;padding-left:2=
64px;width:auto}.page__content__wrapper_wide{padding-left:0}.page-scroll=
.msglist-wrapper{position:relative;height:100%;width:100%;overflow:auto=
}.page-scroll .msglist-wrapper__inner{position:relative;#zoom:1}.msglist=
-wrapper__input{position:absolute;left:-50px;top:-50px}.header{clear:lef=
t;position:relative;width:100%;min-width:950px;height:40px;margin-bottom=
:8px;background-color:#356fac;background-image:url("//img.imgsmail.ru/r/=
header/ghead.png");background-position:0 -40px;background-repeat:repeat-=
x;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;tex=
t-align:left}.header__logo{position:absolute;width:240px;height:40px;tex=
t-align:center}.header__logo__link{display:block;width:150px;height:30px=
;margin:5px auto;background:url("//img.imgsmail.ru/r/header/ghead.png") =
no-repeat center -5px}.header__buttons{position:absolute;margin-left:264=
px}.header__buttons__item{float:left}.header__buttons__link,.header__but=
tons__link:active,.header__buttons__link:focus,.header__buttons__link:ho=
ver,.header__buttons__link:link,.header__buttons__link:visited{display:i=
nline-block;width:74px;height:40px;color:#fff;text-decoration:none;outli=
ne:0}.header__buttons__link:hover,.header__buttons__link_hover{backgroun=
d-color:#2a629c;background-image:url("//img.imgsmail.ru/r/header/ghead.p=
ng");background-repeat:repeat-x;background-position:0 -80px}.header__but=
tons__link_cur{background-repeat:repeat-x;background-image:url("//img.im=
gsmail.ru/r/header/ghead.png");background-position:0 -120px}.header__but=
tons__link_cur:hover{background-position:0 -200px}.header__buttons__cont=
{display:block;padding:0 6px;text-align:center}.header__buttons__icon{di=
splay:block;width:16px;height:16px;margin:4px auto 0;background-image:ur=
l("//img.imgsmail.ru/r/header/ghead.png");background-color:transparent;b=
ackground-repeat:no-repeat;color:#fff;cursor:pointer}.header__buttons__i=
con_write{background-position:0 -160px}.header__buttons__icon_check{back=
ground-position:-16px -160px}.header__buttons__icon_address{width:18px;b=
ackground-position:-32px -160px}.header__buttons__icon_more{background-p=
osition:-52px -160px}.header__buttons__text_dotted{display:inline-block;=
height:14px;border-bottom:1px dotted #fff;text-decoration:none;cursor:po=
inter}.header__dropdown{position:relative;z-index:1000}.header__dropdown=
__list{position:absolute;z-index:1000;top:40px;width:106px;margin:2px 0 =
0;padding:6px 0;background:#fff;border:1px solid #9fc1eb;-webkit-border-=
radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none}.hea=
der__dropdown__list__link,.header__dropdown__list__link:active,.header__=
dropdown__list__link:focus,.header__dropdown__list__link:hover,.header__=
dropdown__list__link:link,.header__dropdown__list__link:visited{display:=
block;float:none;width:106px;padding:4px 0 5px;color:#0857a6;text-decora=
tion:none;text-align:left;line-height:12px}.header__dropdown__list__link=
:hover{color:#0857a6;background:#d4e3ff}.header__dropdown__list__text{pa=
dding:0 6px}.header__search__label,.header__search__button,.header__sear=
ch__advanced,.ghd_ssbox .web i,.search_s .s_select a{background-image:ur=
l("//img.imgsmail.ru/r/header/gsearch.png");background-repeat:no-repeat;=
background-color:transparent}.header__search{position:absolute;right:0;w=
idth:321px;padding:7px 0 6px;z-index:1001}.header__search__label{display=
:block;position:relative;float:left;width:218px;height:26px;margin-right=
:2px;padding:0 10px 0 7px;background-position:0 -29px}.header__search__l=
abel__text{display:none;position:absolute;top:6px;color:#999;cursor:text=
}.header__search_blur .header__search__label__text{display:block}.header=
__search__label__input{width:198px;height:20px;margin:3px 0 0;padding:0;=
border:0;line-height:20px;outline:none}.header__search__button{float:lef=
t;width:57px;height:27px;margin-right:5px;padding:0 0 3px;border:0;backg=
round-position:-237px -29px;color:#fff;line-height:20px;cursor:pointer}.=
header__search_blur .header__search__button{background-position:-237px 0=
}.header__search__advanced,.header__search__advanced:active,.header__sea=
rch__advanced:focus,.header__search__advanced:link,.header__search__adva=
nced:hover,.header__search__advanced:visited{display:block;position:abso=
lute;right:2px;width:20px;height:20px;margin:2px 0 0;background-position=
:1px 1px;text-decoration:none}.header__search__advanced:hover{background=
-position:-19px 1px}.header__search__suggest{position:relative}.header__=
search__dropbox{position:absolute;z-index:1000;top:28px;width:291px;marg=
in:0;padding:2px 0 0;border:1px solid #8bafd2;-webkit-border-radius:2px;=
-moz-border-radius:2px;border-radius:2px;background:#fff;list-style:none=
;font-size:12px;text-align:left}.header__search__dropbox__inner{border-b=
ottom:1px solid #d9ecf4;padding-bottom:3px}.header__search__dropbox__web=
{display:block;margin:0;padding:6px 9px 6px 25px;font-size:12px}.header_=
_search__dropbox__sugg{display:block;padding:3px 8px;border:0;cursor:poi=
nter}.header__search__dropbox__sugg_hover{background:#d4e8ff}.ghd_ssbox =
.web a,.ghd_ssbox .web a:hover{display:inline;width:auto;color:#0857A6;b=
ackground:none;font-weight:bold;text-decoration:underline}.ghd_ssbox .we=
b a:hover{text-decoration:none}.portal-menu__banner__text,.portal-menu__=
banner__text:link,.portal-menu__banner__text:visited,.portal-menu__banne=
r__text:hover,.portal-menu__banner__text:active,.portal-menu__banner__te=
xt:focus{display:block;width:68px;height:18px;padding-top:1px;text-align=
:center;font-size:12px;line-height:18px;text-decoration:none;color:#000;=
background:#cccccc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABA=
AAAATCAYAAACZZ43PAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHN=
JREFUOMvFk1EKwCAMQ1/BY+7+h5iT7meCFsuUCvYnkEpIUhRVvZgf/VAqkYC7IXRBTABNQCY=
w1UGn2uCUQF7Ib6OKdRCO4Jbl7ewVPNvqvdlyhewVZKwP938djPJ33LYIYQEZfBgvTocJeKI=
OzguUowIvRf0qS7kvvy4AAAAASUVORK5CYII=3D) repeat-x top left;*background:#=
cccccc;border-radius:2px;box-shadow:0 1px 0 rgba(0, 0, 0, 0.35);overflow=
:hidden}.header__headline{padding-right:10px;padding-left:10px;backgroun=
d:#fff;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEA=
AAABCAYAAAAfFcSJAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1h=
Z2VSZWFkeXHJZTwAAAAQSURBVHjaYvj///8ZgAADAAnIA8qG+mhLAAAAAElFTkSuQmCC);*b=
ackground:none;background:rgba(255, 255, 255, 0.8)}.head_menu{margin-top=
:0 !important;margin-bottom:0 !important;padding-top:13px !important;pad=
ding-bottom:13px !important;height:12px !important}.corner{position:rela=
tive}.corner__cont{position:absolute;width:1px;height:38px;border:1px so=
lid #fff;border-width:1px 0}.corner__cont_right{right:0}.corner__cont__b=
ox{display:block;width:1px;height:38px}.corner_footer .corner__cont{heig=
ht:26px}.icon-wrap{position:relative}.icon-wrap_left{padding-left:27px}.=
icon-wrap_right{padding-right:27px}.icon{position:relative;display:inlin=
e-block;width:16px;height:16px;font:0/0 a;margin-top:-8px;margin-bottom:=
-8px;background-repeat:no-repeat;vertical-align:middle;overflow:hidden}.=
icon_left{left:-19px;margin-right:-16px}.icon_right{position:absolute;ri=
ght:6px;margin-bottom:0;top:50%}.icon-label{vertical-align:middle}.icon_=
folders{background-repeat:no-repeat;background-position:-100px 0}.icon_i=
nbox{background-position:0 0}.icon_bulk{background-position:-20px 0}.ico=
n_sent{background-position:-40px 0}.icon_drafts{background-position:-60p=
x 0}.icon_trash{background-position:-80px 0}.icon_folder{background-posi=
tion:-100px 0}.icon_secret{background-position:-120px 0}.icon_mrim{backg=
round-position:-140px 0}.icon_allunread{background-position:-160px 0}.ic=
on_attach{background-position:-180px 0}.icon_clock{background-position:-=
200px 0}.icon_silhoutte{background-position:-220px 0}.icon_allfolders{ba=
ckground-position:-240px 0}.icon_search-in-help{background-position:-260=
px 0}.icon_search-in-help_in-text{margin-top:-12px}.icon_advanced-search=
{background-position:-280px 0}.icon_secret-opened{background-position:-3=
00px 0}.icon_allmarked{background-position:-320px 0}.icon_folder-all{bac=
kground-position:-460px 0}.icon_folder-file-archive{background-position:=
-480px 0}.icon_type-photo{background-position:-340px 0}.icon_type-doc{ba=
ckground-position:-360px 0}.icon_type-music{background-position:-380px 0=
}.icon_type-video{background-position:-400px 0}.icon_type-other{backgrou=
nd-position:-420px 0}.icon_type-all{background-position:-440px 0}.icon_i=
nbox_act{background-position:0 -20px}.icon_bulk_act{background-position:=
-20px -20px}.icon_sent_act{background-position:-40px -20px}.icon_drafts_=
act{background-position:-60px -20px}.icon_trash_act{background-position:=
-80px -20px}.icon_folder_act{background-position:-100px -20px}.icon_secr=
et_act{background-position:-120px -20px}.icon_mrim_act{background-positi=
on:-140px -20px}.icon_allunread_act{background-position:-160px -20px}.ic=
on_attach_act{background-position:-180px -20px}.icon_clock_act{backgroun=
d-position:-200px -20px}.icon_silhoutte_act{background-position:-220px -=
20px}.icon_allfolders_act{background-position:-240px -20px}.icon_search-=
in-my{background-position:-260px -20px}.icon_search-in-web{background-po=
sition:-280px -20px}.icon_secret-opened_act{background-position:-300px -=
20px}.icon_allmarked_act{background-position:-320px -20px}.icon_folder-a=
ll_act{background-position:-460px -20px}.icon_folder-file-archive_act{ba=
ckground-position:-480px -20px}.icon_type-photo_act{background-position:=
-340px -20px}.icon_type-doc_act{background-position:-360px -20px}.icon_t=
ype-music_act{background-position:-380px -20px}.icon_type-video_act{back=
ground-position:-400px -20px}.icon_type-other_act{background-position:-4=
20px -20px}.icon_type-all_act{background-position:-440px -20px}.icon__pi=
c_header-search{background:url("//img.imgsmail.ru/r/header/gsearch.png")=
no-repeat -47px 1px}.header__search__dropbox__sugg_hover .icon__pic_hea=
der-search{background-position:-76px 1px}.icon_loader{height:8px;margin-=
top:-4px;margin-bottom:-4px;background-position:50% 0}.icon_loader_no-th=
emes{height:8px;margin-top:-4px;margin-bottom:-4px;background-position:5=
0% 0;background-color:transparent;background-image:url("//img.imgsmail.r=
u/r/default/loader.gif")}.icon_info-state_warning{background-position:0 =
-60px}.icon_attention{background-position:-20px -60px}.icon_tip-ok{backg=
round-position:-40px -60px}.icon_alarm{width:33px;height:31px;background=
-image:url("//img.imgsmail.ru/r/warning_ico.png");background-position:0 =
0}.icon_stop{width:28px;height:28px;margin-right:4px;background-image:ur=
l("//img.imgsmail.ru/r/default/ico/icon_info-states.png");background-pos=
ition:0 0}.icon_paging-horizontal{width:12px;height:15px;margin-top:-7px=
;margin-bottom:-8px}.icon_paging-vertical{width:5px;height:8px;margin-to=
p:-4px;margin-bottom:-4px}.icon_arrow-left{background-position:-220px -6=
0px}.icon_arrow-right{background-position:-232px -60px}.icon_arrow-up{ba=
ckground-position:-280px -62px}.icon_arrow-down{background-position:-280=
px -66px}.icon_arrow-up_disabled{background-position:-290px -62px}.icon_=
arrow-down_disabled{background-position:-290px -66px}.icon_reply-all{bac=
kground-position:-120px -40px}.icon_forward{background-position:-100px -=
40px}.icon_reply{background-position:-140px -40px}.icon_addresbook{backg=
round-position:-180px -40px}.icon_label_addresbook{background:url("//img=
.imgsmail.ru/r/default/ico/icon_label_addresbook.png") 50% 50% no-repeat=
}.icon_compose_label_close{width:10px;cursor:pointer;margin:0 2px 0 0;ba=
ckground:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAA=
ADgzO9IAAAAbklEQVR42mI0MDCw/vfvHw8HB8dOBiD49euX9f///zlZIOxfliBBJiamrz9+/=
HABKtrDwsbGdhokCBTwBtHs7Oz7gGJHmEAckFYGKICxWX7+/GkPxI5AlfsZGRm/wXSyAM39C=
BQ8CMIMCMAGEGAAKg4txdDVDg0AAAAASUVORK5CYII=3D);background-repeat:no-repe=
at;background-position:2px 5px}.icon_compose_label_close:hover{backgroun=
d:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9I=
AAAAVklEQVR42kTMMQqEQBSD4c9lSqupPMkcTLFYEEUbPYHez9bWA1jsk/0hhCSQqpTSo0Hn=
R4+ccKON8sKKb8IR5R4+YPtEyP5kSBgxY4qr/R1OLKGX+hkA/lYM1OLBP0QAAAAASUVORK5C=
YII=3D);background-repeat:no-repeat;background-position:2px 5px}.icon_pr=
omobox{position:absolute;display:block;top:0;width:56px;height:68px;marg=
in-top:-10px;margin-left:-66px;background:url("//img.imgsmail.ru/r/defau=
lt/promobox/promobox__icons.png?4") no-repeat}.icon_promobox_phone{backg=
round-position:0 0}.icon_promobox_sms{background-position:-58px 0}.icon_=
promobox_video{background-position:-114px 0}.icon_promobox_agent{backgro=
und-position:-172x 0}.icon_promobox_voip{background-position:-228px 0}.i=
con_promobox_mac-agent{background-position:-285px 0}.icon_promobox_music=
-agent{background-position:-342px 0}.icon_promobox_wot{width:83px;margin=
-top:0;margin-left:-92px;background-position:-400px 0}.icon_promobox_the=
mes{width:70px;margin-top:-4px;margin-left:-75px;background-position:-48=
7px 0}.icon_promobox_twitter{width:74px;margin-top:-8px;margin-left:-80p=
x;background-position:-590px 0}.icon_promobox_facebook{margin-top:0;marg=
in-left:-57px;background-position:-684px 0}.icon_promobox_vk{margin-top:=
0;margin-left:-54px;background-position:-745px 0}.icon_promobox_youtube{=
margin-top:0;margin-left:-57px;background-position:-805px 0}.icon_promob=
ox_dragon1{margin-left:-70px;background:url("//img.imgsmail.ru/r/default=
/promobox/promobox__icons_dragon1.png?2") 0 10px no-repeat}.icon_promobo=
x_dragon2{background:url("//img.imgsmail.ru/r/default/promobox/promobox_=
_icons_dragon2.png?2") 0 10px no-repeat}.icon_promobox_dragon3{margin-le=
ft:-70px;background:url("//img.imgsmail.ru/r/default/promobox/promobox__=
icons_dragon3.png?2") 0 10px no-repeat}.icon_promobox_ny12{background:ur=
l("//img.imgsmail.ru/r/default/promobox/promobox__icons_ny12.png") no-re=
peat 0 11px}.icon_message-flag{background-repeat:no-repeat;background-po=
sition:0 -80px}.icon_message-flag:hover{background-position:-40px -80px}=
.icon_message-flag_on,.icon_message-flag_on:hover{background-position:-2=
0px -80px}.icon_filedownload{background-position:-340px -40px}.icon_mess=
age-status_0{background-position:100px 100px}.icon_message-status_211{ba=
ckground-position:-100px -60px}.icon_message-status_500{background-posit=
ion:-160px -60px;z-index:15;cursor:pointer}.icon_message-status_510{back=
ground-position:-60px -60px}.icon_message-status_501{background-position=
:-80px -60px}.icon_attach{background-repeat:no-repeat;background-positio=
n:-120px -60px}.icon_priority_high{background-position:-80px -80px;width=
:5px}.icon_priority_low{background-position:-120px -80px;width:9px}.icon=
_priority_high-unread{background-position:-80px -80px;width:5px}.icon_pr=
iority_low-unread{background-position:-120px -80px;width:9px}.messagelin=
e:hover .icon_message-status_0{background-position:-180px -60px;z-index:=
15;cursor:pointer}.icon_webapps{position:static;display:block;cursor:aut=
o;width:21px;height:21px;margin-left:0;background-image:url("//img.imgsm=
ail.ru/r/default/ico/ico__webapps.png")}.icon_webapps_word{background-po=
sition:0 0}.icon_webapps_excel{background-position:0 -22px}.icon_webapps=
_pp{background-position:0 -43px}.icon-wrap_balloon{float:left;padding-to=
p:7px;padding-left:0;padding-right:10px}.icon_balloons{height:14px;margi=
n-top:-7px;margin-bottom:-7px;background-image:url("//img.imgsmail.ru/r/=
default/ico/ico__balloons.png")}.icon_lamp{background-position:0 0}.icon=
_pling{background-position:0 -15px}.icon_newfeature{background-image:url=
("//img.imgsmail.ru/r/default/ico/ico__balloons_newfeature.png");width:5=
5px;height:55px;margin-left:-8px;margin-top:-20px}.icon_collector{width:=
70px;height:55px;margin-left:-8px;background-image:url("//img.imgsmail.r=
u/r/default/ico/ico__collector.png")}.icon_collector-promo,.icon_collect=
or-folder-list{width:55px;height:55px;margin-left:-8px;margin-top:-20px}=
.icon_collector-promo{background-image:url("//img.imgsmail.ru/r/default/=
ico/ico__collector-promo.png");background-position:8px 3px}.icon_calenda=
r{width:55px;height:55px;margin-left:-5px;margin-top:-15px;background-im=
age:url("//img.imgsmail.ru/r/default/ico/ico__calendar.png");background-=
position:5px 5px}.icon_angryBirds{width:55px;height:55px;margin-left:-5p=
x;margin-top:-15px;background-image:url("//img.imgsmail.ru/r/default/ico=
/ico__angryBirds.png");background-position:5px 5px}.icon_collector-folde=
r-list{background-image:url("//img.imgsmail.ru/r/default/ico/ico__collec=
tor-promo.png");background-position:8px 3px}.icon_filesearch{width:55px;=
height:55px;margin-left:-8px;margin-top:-20px;background-image:url("//im=
g.imgsmail.ru/r/default/ico/ico__filesearch.png")}.icon_medialine{backgr=
ound-image:url("//img.imgsmail.ru/r/default/ico/ico__medialine.png");wid=
th:50px;height:42px;margin:-10px 0 0}.icon_print{background-position:-40=
px -40px}.icon_translate{background-position:-80px -40px}.icon_kav-prote=
cted{width:29px;height:33px;margin-top:-16px;margin-bottom:-16px;backgro=
und-position:0 -100px}.icon_messagesent{width:30px;height:26px;backgroun=
d-position:-140px -100px}.icon_messagesent-bullet{background-position:-1=
40px -80px}.icon_filetype{position:static;display:block;cursor:auto;widt=
h:14px;height:14px;margin-left:0;background-image:url("//img.imgsmail.ru=
/r/default/ico/ico__messagelist__file-type-icon.234.png");background-rep=
eat:no-repeat;background-position:0 -162px}.icon_filetype_arj,.icon_file=
type_zipz,.icon_filetype_bzip2,.icon_filetype_bz2,.icon_filetype_gz,.ico=
n_filetype_7z,.icon_filetype_rar,.icon_filetype_zip,.icon_filetype_archi=
ve{height:16px;background-position:0 0}.icon_filetype_docx,.icon_filetyp=
e_wpd,.icon_filetype_wps,.icon_filetype_rtf,.icon_filetype_doc,.icon_fil=
etype_word{background-position:0 -127px}.icon_filetype_xls,.icon_filetyp=
e_xlsx,.icon_filetype_xlsb,.icon_filetype_xlsm,.icon_filetype_csv,.icon_=
filetype_excel{background-position:0 -21px}.icon_filetype_ppt,.icon_file=
type_pptx,.icon_filetype_pps,.icon_filetype_ppsx,.icon_filetype_pp{backg=
round-position:0 -90px}.icon_filetype_msg,.icon_filetype_eml,.icon_filet=
ype_letter{background-position:0 -38px}.icon_filetype_ram,.icon_filetype=
_midi,.icon_filetype_wav,.icon_filetype_ogg,.icon_filetype_aiff,.icon_fi=
letype_flac,.icon_filetype_m4a,.icon_filetype_wma,.icon_filetype_mp3{bac=
kground-position:0 -53px}.icon_filetype_png,.icon_filetype_gif,.icon_fil=
etype_jpeg,.icon_filetype_jpg,.icon_filetype_bmp,.icon_filetype_psd,.ico=
n_filetype_tga,.icon_filetype_ai,.icon_filetype_tif,.icon_filetype_tiff,=
.icon_filetype_eps,.icon_filetype_image,.icon_filetype_picture{backgroun=
d-position:0 -71px}.icon_filetype_log,.icon_filetype_c,.icon_filetype_tx=
t{background-position:0 -108px}.icon_filetype_pdf{background-position:0 =
-144px}.icon_filetype_other{background-position:0 -162px}.icon_filetype_=
folder{background-position:0 -181px}.icon_filetype_folder_opened{backgro=
und-position:0 -200px}.icon_logo{height:26px;margin-top:0;margin-bottom:=
0;background-image:url("//img.imgsmail.ru/r/default/ico/ico__pop-logo.20=
9.png")}.icon_logo_yandex{width:63px;background-position:0 0}.icon_logo_=
rambler{width:119px;background-position:-91px 0}.icon_logo_gmail{width:6=
4px;background-position:-242px 0}.icon_logo_qip{width:104px;background-p=
osition:-334px 0}.icon_logo_hotmail{width:91px;background-position:-456p=
x 0}.icon_logo_options{height:26px;margin-top:0;margin-bottom:0;backgrou=
nd-image:url("//img.imgsmail.ru/r/default/ico/maillogospright.png")}.ico=
n_logo_options_yandex{width:62px;background-position:0 0}.icon_logo_opti=
ons_rambler{width:91px;background-position:-63px 0}.icon_logo_options_qi=
p{width:82px;background-position:-155px 0}.icon_logo_options_gmail{width=
:63px;background-position:-238px 0}.icon_logo_options_hotmail{width:95px=
;background-position:-302px 0}.icon_logo_options_yahoo{width:87px;backgr=
ound-position:-398px 0}.icon_userinfo-pencil{width:12px;height:12px;left=
:-17px;margin-right:-12px;background-image:url("//img.imgsmail.ru/mail/r=
u/images/pencel.gif");background-position:50% 0}.icon_warning{width:24px=
;height:22px;margin-top:-11px;margin-bottom:-11px;background-position:0 =
0;background-image:url("//img.imgsmail.ru/r/default/ico/icon__warning.pn=
g");background-repeat:no-repeat}.icon_attachview{position:static;display=
:inline-block;width:20px;height:20px;margin-left:0;background-image:url(=
"//img.imgsmail.ru/r/default/ico/ico__attachview_206.png")}.icon_attachv=
iew_download{background-position:0 0}.icon_attachview_album{background-p=
osition:0 -20px}.icon_attachview_open{background-position:0 -40px}.icon_=
attachview_close{background-position:0 -60px}.attachviewer__popup .icon_=
attachview_close{background-position:0 -100px}.icon_attachview_slider_sw=
ither{background-position:0 -81px}.icon_form{background-image:url("//img=
.imgsmail.ru/r/default/ico/ico__form.png")}.icon_form_sex-female{width:2=
0px;height:20px;background-position:0 0}.icon_form_sex-male{width:20px;h=
eight:20px;background-position:0 -24px}.icon_form_password-good{height:2=
1px;background-position:0 -48px}.icon_form_password-ok{height:21px;backg=
round-position:0 -72px}.icon_form_password-bad{height:21px;background-po=
sition:0 -96px}.icon_form_add{background-position:-3px -196px;width:10px=
;height:10px;margin-top:-6px;margin-bottom:-4px;padding-right:6px}.icon_=
form_remove{width:12px;height:12px;margin-bottom:-6px;background-positio=
n:0 -218px}.icon_form_remove_black{width:12px;height:12px;margin-top:-6p=
x;margin-bottom:-6px;background-position:0 -266px}.icon_form_remove_big{=
width:10px;height:10px;margin-top:-5px;margin-bottom:-5px;background-pos=
ition:-2px -386px}.icon_form_error{background-position:0 -240px}.icon_fo=
rm_ok{background-position:0 -120px}.icon_form_calendar{background-positi=
on:0 -286px}.icon_form_checkmark{width:11px;height:9px;margin-left:-4px;=
margin-top:-4px;background-position:0 -361px}.icon_form_change{width:12p=
x;height:12px;margin-top:-6px;margin-bottom:-6px;background-position:-2p=
x -410px}.icon_form_tel-visible-all{background-position:-4px -424px}.ico=
n_form_tel-visible-agent{background-position:-4px -439px}.icon_form_tel-=
visible-nobody{background-position:-4px -169px}.icon_popup-close{height:=
7px;width:7px;background-image:url("//img.imgsmail.ru/r/default/ico/ico_=
_popup-close.png");background-repeat:no-repeat;background-position:0 0}.=
icon_popup{width:26px;height:26px;background-image:url("//img.imgsmail.r=
u/r/default/ico/ico__popup.png");background-repeat:no-repeat}.icon_popup=
_ok{background-position:-1px -1px}.icon_popup_error{background-position:=
-1px -41px}.icon_popup_warning{background-position:-1px -81px}.icon_popu=
p_info{background-position:-1px -121px}.icon_popup_remove-format{width:3=
6px;height:34px;background-position:-1px -161px}.icon_player{background:=
url("//img.imgsmail.ru/r/default/ico/ico__player.png") no-repeat}.icon_p=
layer_play{background-position:4px 2px}.icon_player_pause{background-pos=
ition:4px -18px}.icon_player_volume{background-position:-5px -45px}.icon=
_settings{background-image:url("//img.imgsmail.ru/r/default/ico/ico__set=
tings__index.png");width:64px;height:60px;float:left;margin-right:5px}.i=
con_settings_messages{background-position:0 0}.icon_settings_security{ba=
ckground-position:0 -70px}.icon_settings_filters{background-position:0 -=
140px}.icon_settings_agent{background-position:0 -210px}.icon_settings_a=
utoreply{background-position:0 -280px}.icon_settings_signature{backgroun=
d-position:0 -350px}.icon_settings_folders{background-position:0 -420px}=
.icon_settings_notifications{background-position:0 -490px}.icon_settings=
_collector{background-position:0 -560px}.icon_settings_themes{background=
-position:0 -630px}.icon_settings_social{background-position:0 -700px}.i=
con_settings_ok{background:url("data:image/png;base64,iVBORw0KGgoAAAANSU=
hEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5cc=
llPAAAAB1JREFUeNpiYMAC4ivm/ocQ6ILoHHRFDNgEAQIMANk3DrMlxkgRAAAAAElFTkSuQm=
CC");*background:none;width:6px;height:4px;margin-top:-9px}.icon_setting=
s_locked{background-image:url("//img.imgsmail.ru/r/default/ico/ico__sett=
ings.png");width:9px;margin-left:-5px;margin-top:-6px}.icon_settings_loc=
ked_after-text{margin-left:3px}.icon_settings_unlocked{background-image:=
url("//img.imgsmail.ru/r/default/ico/ico__settings.png");background-posi=
tion:0 -20px;width:13px;margin-left:-6px;margin-top:-6px}.icon_social{ba=
ckground-image:url("//img.imgsmail.ru/r/default/addressbook/icon/icon_so=
cial.png");width:15px;height:20px;background-position:0px 40px;backgroun=
d-repeat:repeat-none}.icon_social_mra{background-position:0px 3px}.icon_=
social_fb{background-position:0px -19px}.icon_social_ok{background-posit=
ion:0px -39px}.icon_social_skype{background-position:0px -61px}.icon_soc=
ial_my{background-position:0px -85px}.icon_social_twitter{background-pos=
ition:0px -111px}.icon_social_lj{background-position:0px -137px}.icon_so=
cial_icq{background-position:0px -164px}.icon_social_moikrug{background-=
position:0px -190px}.icon_social_vk{background-position:0px -214px}.icon=
_social_linkedin{background-position:0px -241px}.icon_social_gtalk{backg=
round-position:0px -266px}.icon_social_jabber{background-position:0px -2=
90px}.icon_social_www{background-position:0px -312px}.icon_social-metro{=
display:inline-block;vertical-align:middle;position:relative;width:32px;=
height:32px;overflow:hidden;font:0/0 a;background-image:url("//img.imgsm=
ail.ru/r/default/ico/icon_social-metro.png");background-repeat:no-repeat=
}.icon_social-metro_ok{background-position:0 0}.icon_social-metro_vk{bac=
kground-position:0 -32px}.icon_social-metro_fb{background-position:0 -64=
px}.icon_addressbook{background-image:url("//img.imgsmail.ru/r/default/i=
co/icon_addressbook.png");background-repeat:repeat-none;width:20px;heigh=
t:20px}.icon_addressbook_avatar{width:50px;height:50px;background-positi=
on:0 0}.icon_addressbook_label{width:9px;height:13px;margin:0}.icon_addr=
essbook_label-start{background-position:-50px -4px}.icon_addressbook_lab=
el-end{background-position:-110px -4px}.icon_addressbook_label-remove{ba=
ckground-position:-130px -3px;cursor:pointer}.icon_addressbook_favorite{=
width:16px}.icon_addressbook_favorite_on{background-position:-198px -4px=
}.icon_addressbook_favorite_on_bottom{background-position:-198px -2px}.i=
con_addressbook_favorite_off{background-position:-219px -4px}.icon_menu_=
addressbook{background-position:-580px 0}.icon_menu_addressbook_act{back=
ground-position:-580px -20px}.icon_menu_addressbook_all{background-posit=
ion:-563px 0}.icon_menu_addressbook_all_act{background-position:-563px -=
20px}.icon_menu_addressbook_agent{background-position:-504px 0}.icon_men=
u_addressbook_agent_act{background-position:-504px -20px}.icon_menu_addr=
essbook_my{background-position:-524px 0}.icon_menu_addressbook_my_act{ba=
ckground-position:-524px -20px}.icon_menu_addressbook_favorites{backgrou=
nd-position:-545px 0}.icon_menu_addressbook_favorites_act{background-pos=
ition:-545px -20px}.icon_menu_addressbook_auto{background-position:-618p=
x 0}.icon_menu_addressbook_auto_act{background-position:-618px -20px}.ic=
on_menu_addressbook_manual{background-position:-635px 0}.icon_menu_addre=
ssbook_manual_act{background-position:-635px -20px}.icon_menu_addressboo=
k_edit{background-position:-600px 0;display:none}.menu__item__link_act .=
icon_menu_addressbook_edit{background-position:-600px -20px}.menu__item_=
_link:hover .icon_menu_addressbook_edit{display:block}.menu__item__link:=
hover .menu__item__link__editable{display:none}.icon_sort{background-ima=
ge:url("//img.imgsmail.ru/r/default/addressbook/icon/icons.sort.png")}.i=
con_sort_up{background-position:0 -27px}.icon_sort_down{background-posit=
ion:0 -2px}.icon_themes-type{display:inline-block;width:13px;height:13px=
;margin-right:5px;vertical-align:baseline}.icon_themes-type_popular{back=
ground-position:-362px -42px}.icon_themes-type_temporary{background-posi=
tion:-381px -42px}.icon_themes-type_dynamics{background-position:-402px =
-42px}.icon_themes-type_contrast{background-position:-423px -42px}.icon_=
themes-type_all{background-position:-442px -42px}.button-a,.button-a:act=
ive,.button-a:focus,.button-a:hover,.button-a:link,.button-a:visited{dis=
play:inline-block;padding:0 7px 1px 7px;-webkit-border-radius:2px;-moz-b=
order-radius:2px;border-radius:2px;border-width:1px;border-style:solid;l=
ine-height:21px;height:21px;white-space:nowrap;cursor:pointer;outline:0;=
text-align:center;text-decoration:none;position:relative;z-index:1}.butt=
on-a:hover{z-index:3}.button-a:active,.button-a_active,.button-a_active:=
active,.button-a_active:focus,.button-a_active:link,.button-a_active:hov=
er,.button-a_active:visited{cursor:default;z-index:2}.button-a_disabled,=
.button-a_disabled:active,.button-a_disabled:focus,.button-a_disabled:ho=
ver,.button-a_disabled:link,.button-a_disabled:visited{cursor:default;z-=
index:0}.button-a_left,.button-a_left:active,.button-a_left:focus,.butto=
n-a_left:hover,.button-a_left:link,.button-a_left:visited{-webkit-border=
-radius:2px 0 0 2px;-moz-border-radius:2px 0 0 2px;border-radius:2px 0 0=
2px}.button-a_right,.button-a_right:active,.button-a_right:focus,.butto=
n-a_right:hover,.button-a_right:link,.button-a_right:visited{-webkit-bor=
der-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2p=
x 2px 0;margin-left:-1px}.button-a_center,.button-a_center:active,.butto=
n-a_center:focus,.button-a_center:hover,.button-a_center:link,.button-a_=
center:visited{-webkit-border-radius:0;-moz-border-radius:0;border-radiu=
s:0;margin-left:-1px}.popup{position:relative;display:inline-block;width=
:486px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2p=
x;background:#fff;-webkit-box-shadow:#bababa 0 0 10px;-moz-box-shadow:#b=
ababa 0 0 10px;box-shadow:#bababa 0 0 10px;text-align:left;border:1px so=
lid #999}.popup_external{width:635px}.popup_dark{-webkit-box-shadow:#555=
555 0 0 10px;-moz-box-shadow:#555555 0 0 10px;box-shadow:#555555 0 0 10p=
x}.popup__box_messagebox{padding-left:40px}.popup__box_messagebox_new{pa=
dding-left:29px}.popup__close{cursor:pointer;position:absolute;top:1px;r=
ight:1px;width:7px;height:27px;padding-right:10px;padding-left:10px}.pop=
up__close .icon_popup-close{margin-top:10px;margin-bottom:10px}.popup__c=
lose:hover .icon_popup-close{background-position:0 -7px}.popup__box{padd=
ing-bottom:10px}.popup__head{padding:22px 20px 17px;font-size:22px}.popu=
p__head__nobreaks{white-space:nowrap}.popup__desc{padding:0 20px;margin-=
top:-12px;font-size:12px;line-height:16px;color:#333;overflow:hidden}.po=
pup__desc_messagebox{padding-bottom:20px;color:#999}.popup__desc__image{=
padding:0 10px 10px 0;float:left}.popup__desc__parag{margin-bottom:10px}=
.popup__desc__parag_select{color:#999999}.popup__desc__highlighted{color=
:#669900;font-weight:bold}.popup__desc_warn{color:#e9503f}.popup__desc_d=
el{color:#e72100;text-decoration:line-through}.popup__desc_centered{text=
-align:center}.popup__fieldset{padding:20px 7px 0}.popup__icon{position:=
absolute;top:27px;left:20px}.popup .form__row_no-label{padding-left:166p=
x}.popup__controls{position:relative;padding:16px 24px 18px;background:#=
ebf1f6;border-top:1px solid #f2f9ff}.popup__link-skipstep{position:absol=
ute;top:21px;right:20px;vertical-align:bottom;display:inline-block;text-=
align:right;text-decoration:none;border-bottom-width:1px;border-bottom-s=
tyle:dashed}.popup__link-removelink{position:absolute;top:21px;right:20p=
x;vertical-align:bottom;display:inline-block;text-align:right}.popup__ad=
dress-list-suggest{display:none;position:absolute;left:162px;color:#000;=
background:#fff;min-width:280px;width:280px;cursor:default;z-index:10000=
;-webkit-box-shadow:5px 5px 5px -3px black;-moz-box-shadow:5px 5px 5px -=
3px black;box-shadow:5px 5px 5px -3px black}.popup__controls__link{heigh=
t:24px;line-height:24px}.popup__controls__link_register{float:right}.for=
m__phone-prefix{position:relative}.form__phone-prefix__prefix{position:a=
bsolute;top:5px;left:8px;height:20px;padding-left:19px;font-size:14px;li=
ne-height:16px;color:#333;background-repeat:no-repeat;background-positio=
n:0 2px}.form__phone-prefix .form__phone-prefix__field{padding-left:46px=
;width:120px}.popup_search{position:absolute;top:33px;right:69px;width:4=
80px;border:1px solid #508bb6}.popup_search .popup__head{padding-top:16p=
x;padding-bottom:16px;font-size:18px}.popup_search .popup__fieldset{padd=
ing-top:0;padding-bottom:0}.popup_search .popup__controls_align-with-con=
trols{padding-top:16px;padding-bottom:16px;padding-left:147px}.popup_sea=
rch .popup_search__date-field{width:100px}.popup_search .popup_search__p=
eriod-field{width:120px}.popup_search .portal-menu__search__suggest{top:=
0px;width:291px}.popup__title{font-size:15px;margin:12px 20px}.popup__ro=
wlist{padding:10px 0;margin-bottom:10px;background:#f7f7f7}.popup__rowli=
st__row{position:relative;margin:0 20px 5px;padding:5px 0;border-bottom:=
1px solid #e4e4e4}.popup__rowlist__row .popup__title{margin-right:0;marg=
in-left:0}.popup__rowlist__row .popup__desc{margin-top:0;padding-right:0=
;padding-left:0}.popup__rowlist__row_nob{border:0}.popup__rowlist__row__=
controls{position:absolute;top:2px;right:0}.popup__box_promo{width:500px=
;height:271px;background:url("//img.imgsmail.ru/r/default/popup/promo/ne=
w-design/new-design__bg.png") no-repeat}.popup__button_promo{position:ab=
solute;left:150px;top:217px}.popup__promo__new-design-txt{position:absol=
ute;top:166px;width:144px;font-size:14px;text-align:center}.popup__promo=
__new-design-txt__quick{left:17px}.popup__promo__new-design-txt__easy{le=
ft:177px}.popup__promo__new-design-txt__beauty{left:336px}.layer-externa=
l_account__email-title{text-align:center;padding:38px 0;font-size:26px}.=
layer-ico__warn{background:url("//img.imgsmail.ru/r/default/popup/popup_=
_warn.png") no-repeat;display:inline-block;width:16px;height:16px}.layer=
-external_account__body{background:url("//img.imgsmail.ru/r/default/popu=
p/popup__cover.png") #f7f7f7 no-repeat 50% 14px;border:1px solid #EAEAEA=
;padding:140px 0 9px 0;text-align:center}.layer-external_account__text{c=
olor:#333;font-size:15px}.layer-external_account__email{color:#789612;fo=
nt-size:18px;margin-top:10px}.layer-external_account__rules{color:#87878=
7;margin-top:10px}.layer-external_account__rules_text{display:inline-blo=
ck;font-size:13px;height:11px;margin-bottom:4px}.layer-external_account_=
_controls{padding:28px 0px;text-align:center}.layer-external_account__pr=
ovider{background-image:url("//img.imgsmail.ru/r/default/popup/popup__pr=
oviders.png");background-repeat:no-repeat;position:absolute;height:21px;=
top:151px;left:282px}.layer-external_account__provider_corp\.mail\.ru,.l=
ayer-external_account__provider_mail\.ru{background-position:0 0;width:7=
4px}.layer-external_account__provider_yandex\.ru,.layer-external_account=
__provider_ya\.ru{background-position:9px -103px;width:63px;height:23px}=
.layer-external_account__provider_rambler\.ru{background-position:2px -4=
0px;width:74px}.layer-external_account__provider_hotmail\.com{background=
-position:0px -20px;left:271px;width:91px}.layer-external_account__provi=
der_gmail\.com,.layer-external_account__provider_gmail\.ru{background-po=
sition:4px -63px;width:67px}.layer-external_account__provider_yahoo\.com=
{background-position:1px -85px;width:74px;height:17px}.popup-settings{po=
sition:relative;display:inline-block;width:486px;-webkit-border-radius:2=
px;-moz-border-radius:2px;border-radius:2px;background:#fff;-webkit-box-=
shadow:#bababa 0 0 10px;-moz-box-shadow:#bababa 0 0 10px;box-shadow:#bab=
aba 0 0 10px;text-align:left;border:1px solid #999}.popup-settings__box_=
messagebox{padding-left:40px}.popup-settings__close{cursor:pointer;posit=
ion:absolute;top:1px;right:1px;width:7px;height:27px;padding-right:10px;=
padding-left:10px}.popup-settings__close .icon_popup-close{margin-top:10=
px;margin-bottom:10px}.popup-settings__close:hover .icon_popup-close{bac=
kground-position:0 -7px}.popup-settings__box{padding-bottom:10px;border-=
bottom:1px solid #dae4ef}.popup-settings__head{padding:22px 20px 32px;fo=
nt-size:18px}.popup-settings__head__nobreaks{white-space:nowrap}.popup-s=
ettings__desc{padding:0 20px;margin-top:-12px;margin-bottom:24px;font-si=
ze:12px;line-height:16px;color:#333}.popup-settings__desc_messagebox{pad=
ding-bottom:20px;color:#999}.popup-settings__fieldset{padding:20px 7px 0=
}.popup-settings__icon{position:absolute;top:25px;left:20px}.popup-setti=
ngs__controls{position:relative;padding:16px 24px 18px;background:#ebf1f=
6;border-top:1px solid #f2f9ff}.popup-settings__controls_blank{backgroun=
d:none;border-top:0}.popup-settings__link-skipstep{position:absolute;top=
:21px;right:20px;vertical-align:bottom;display:inline-block;text-align:r=
ight}.form__phone-prefix{position:relative}.form__phone-prefix__prefix{p=
osition:absolute;top:5px;left:8px;height:20px;padding-left:19px;font-siz=
e:14px;line-height:16px;color:#333;background-repeat:no-repeat;backgroun=
d-position:0 2px}.form__phone-prefix .form__phone-prefix__field{padding-=
left:46px;width:120px}.popup-settings_search{position:absolute;top:33px;=
right:77px;width:480px;border:1px solid #508bb6}.popup-settings_search .=
popup-settings__head{padding-top:16px;padding-bottom:16px;font-size:18px=
}.popup-settings_search .popup-settings__fieldset{padding-top:0;padding-=
bottom:0}.popup-settings_search .popup-settings__controls{padding-top:16=
px;padding-bottom:16px;padding-left:160px}.popup-settings_search .popup-=
settings_search__date-field{width:100px}.popup-settings_search .popup-se=
ttings_search__period-field{width:120px}.popup-settings__collector_box .=
form__top-message{display:block;margin-bottom:0}.popup-settings__collect=
or_box .popup-settings__head{padding-bottom:22px}.popup-settings__head_e=
rror .icon{margin-right:5px}.popup-settings__collector_box .collector__p=
rovider{margin-bottom:20px;padding-left:20px;border-bottom:1px solid #e6=
e6e6;-webkit-box-shadow:inset 0px -11px 8px -10px rgba(0, 0, 0, 0.1);-mo=
z-box-shadow:inset 0px -11px 8px -10px rgba(0, 0, 0, 0.1);box-shadow:ins=
et 0px -11px 8px -10px rgba(0, 0, 0, 0.1)}.popup-settings__collector_box=
.collector__provider__item,.popup-settings__collector_box .collector__p=
rovider__item:link,.popup-settings__collector_box .collector__provider__=
item:visited,.popup-settings__collector_box .collector__provider__item:h=
over,.popup-settings__collector_box .collector__provider__item:active,.p=
opup-settings__collector_box .collector__provider__item:focus{margin-bot=
tom:10px}.popup-settings__collector_box .collector__provider__item_anoth=
er-mail{vertical-align:top}.popup-settings__collector_box .popup-setting=
s__fieldset{padding-top:0}.popup-settings__collector_box .settings__coll=
ector__submit-result-message{display:block;padding-bottom:8px}.popup-set=
tings__controls_loading{position:absolute;top:20px;right:24px}.popup-set=
tings__controls_loading_text{color:#666;margin:4px 0 0 5px;white-space:n=
owrap}.popup-settings__collector_box_error .popup-settings__fieldset{pad=
ding:0}.popup-settings__collector_box_error .settings__collector__submit=
-result-message{display:block;background:none;padding:0 20px 1px 20px;fo=
nt-size:15px;margin-bottom:0}.popup-settings__collector_box_error .setti=
ngs__collector__submit-result-message p{margin:0 0 15px 0}.popup-setting=
s__collector_box_error .settings__collector__submit-result-message__list=
{margin:0}.popup_modern{width:570px;border:0;border-radius:4px;backgroun=
d:#fff}.popup_modern .form__row{margin-bottom:0}.popup_modern .form__row=
__label{width:212px;padding-right:12px;font-size:13px}.popup_modern .for=
m__row_no-label{padding-left:224px}.popup_modern .form__message{margin-b=
ottom:0}.popup_modern .form__message_error{margin-top:5px}.popup_modern =
.popup__box{padding-bottom:0}.popup_modern .popup__head{padding:0;margin=
:47px 0 12px;font-size:24px;text-align:center}.popup_modern .popup__titl=
e{font-size:17px}.popup_modern .popup__desc{padding:0;margin-top:0;font-=
size:13px;text-align:center}.popup_modern .popup__rowlist{margin:23px 0;=
padding-top:15px;padding-bottom:20px}.popup_modern .popup__rowlist__row{=
margin:0 42px 5px;padding:10px 0}.popup_modern .popup__rowlist__row .pop=
up__desc_warn{margin-top:15px;text-align:left}.popup_modern .popup__rowl=
ist__row .popup__title{margin-top:2px;margin-bottom:-5px}.popup_modern .=
popup__rowlist__row__controls{top:13px;right:3px}.popup_modern .popup__c=
ontrols{padding-top:0;padding-bottom:29px;border-top:0;background-color:=
#fff;text-align:center}.popup_modern .popup-reconfirm__input_email{width=
:190px !important}.popup_modern .popup-reconfirm__input_country{width:20=
8px !important}.popup_modern .popup-reconfirm__input_phone{width:152px !=
important}.popup_modern .popup-reconfirm__input_code{width:152px !import=
ant}.popup_modern .popup-reconfirm__confirm-code{margin-top:15px}.popup_=
modern .popup-reconfirm__input_pass{width:190px !important;margin-bottom=
:10px}.popup_modern .popup-reconfirm__input_captcha{width:98px !importan=
t}.popup_septima-on{width:685px;padding:50px 20px 0;border-radius:5px}.p=
opup_septima-on .popup__title{padding:0 0 13px;font-size:22px;color:#333=
;text-align:center}.popup_septima-on .popup__subtitle{padding:0 0 23px;f=
ont-size:13px;line-height:17px;color:#333;text-align:center}.septima-on-=
popup{width:678px;background:#fff;border-radius:5px;font-family:arial, s=
ans-serif}.septima-on-popup__wrapper{padding:40px 70px}.septima-on-popup=
__title{padding:0 0 13px;font-size:22px;color:#333;text-align:center}.se=
ptima-on-popup__subtitle{padding:0 0 33px;margin:0 -43px;font-size:13px;=
color:#333;text-align:center}.septima-on-popup__bar{position:relative;he=
ight:24px;border:1px solid #a9a9a9;border-radius:5px;background:#f6f6f6 =
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAZCAIAAABy7KNvA=
AAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZ=
G9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTe=
k5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wd=
Gs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozM=
jowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xO=
Tk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9I=
iIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNT=
T0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6L=
y9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yV=
G9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9I=
nhtcC5paWQ6MEU4QTE4RUZDQTEwMTFFMkFBNTJENUUwMUEyMUU0RDEiIHhtcE1NOkRvY3VtZ=
W50SUQ9InhtcC5kaWQ6MEU4QTE4RjBDQTEwMTFFMkFBNTJENUUwMUEyMUU0RDEiPiA8eG1wT=
U06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRThBMThFRENBMTAxM=
UUyQUE1MkQ1RTAxQTIxRTREMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRThBMThFR=
UNBMTAxMUUyQUE1MkQ1RTAxQTIxRTREMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6U=
kRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pn904zkAAAAmSURBVHjaYvz37=
x8DBmBiwAawi7L8//+fWFHKTaCv6Kh7IQAgwAAIcjwZjktgSAAAAABJRU5ErkJggg=3D=3D"=
)}.septima-on-popup__bar__spiner{position:absolute;top:-1px;left:0;heigh=
t:24px;border-radius:5px;border:1px solid #3a6b9c;background:#4e9fef url=
("data:image/gif;base64,R0lGODlhGAAYAMQfADN0tzV2uTl6vU2P0UuNz1KU1lGS1U+R=
00uY5Vil8zd4u1Ge7FOg7kSR31mb3TaD0U6b6TmG1D2K2EeU4laj8EGO3DOAzTBxtEiKzECC=
xESGyFWW2Tx9wFuo9ixusP///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/=
eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4=
OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBD=
b3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4g=
PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1z=
eW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJo=
dHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFk=
b2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v=
eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhv=
dG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBMkQx=
RDY0NkQxOTUxMUUyQkIyN0U4MTI1RDA3NENFMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRp=
ZDoyQkZERUU1NEQxRDMxMUUyQkIyN0U4MTI1RDA3NENFMSI+IDx4bXBNTTpEZXJpdmVkRnJv=
bSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkEyRDFENjQ0RDE5NTExRTJCQjI3RTgxMjVE=
MDc0Q0UxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkEyRDFENjQ1RDE5NTExRTJCQjI3=
RTgxMjVEMDc0Q0UxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt=
ZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj=
4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66t=
rKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3=
dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JB=
QD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwL=
CgkIBwYFBAMCAQAAIfkEBQAAHwAsAAAAABgAGAAABedgJ46ds51oujlkW6ow64qJU9x4Xshk=
4icbg3BINGx+SIpyc2g6n4eNckqlFAbYrHZQqFIZBoJ4TCYYGOi0eoBpu9+Yw2JOry/g+AFk=
z+9DBhqBgoMEfn4IBIOKGhgIjo+QCBiBGZWWlRgTmpucExqXoBkanaSflhyoqRoNrK2uDRmp=
sqkZFba3uBWxswK9ArW5uRy+xArGHBLJyssSHMbPzwEByMzMAtLY2QACEd3e3xECAOPk5Qrg=
6AEX6+ztFw/w8fIP6u7uAfPyFgAe/f7/HgA8sECwYEF+AAECMMjQwoWEAC8UDAEAIfkEBQAA=
HwAsAAAAABgAGAAABa3gJ45f1zlkum1oKpqt+60xaSZ1WhT5mCQbmchgCMooFKPscFCmkAXh=
ZzCIyhgMg5RA0MoWi4EUgzlIIWIhOS2DEKQazbsNQcA1GCkCkZdlMn0yExMaQn+FQoOILhwc=
iy4NDRlCjZNCFRWWLgICmi6YHEIKCqFCEhKlLgEBqS6nAkIAALBCERG0LhcXClK2AVIXv0IP=
D8IyFwDDDxbJQh4eUhbMUs/NLtIX1B7ZIQAh+QQFAAAfACwAAAAAGAAYAAAFuKDzjeTYnWJJ=
bqxKnl3qspv8noldFrw+JsCNa2QoCl2U5NF1aC5LSUph+BlYpy6G1kAleLmuhXhAxZgPQ4ia=
PDRj2Co1gkDV2OkuCAKBqdv7QwgTGlQZhoAuE4OFhoRDihNUHJOOLg2XGUOTHJlDFZ+dKgKj=
oSqfFRxDCqupQxKvrSoBs7EqrxICQwC7uUMRv70qF8MKVL8RAUPDF8lDD8/NKh7TAM7PFtVD=
1FQW3dku0xfc3eLaHiEAIfkEBQAAHwAsAAAAABgAGAAABargtjlfaZpdR57nyJ7p+n7unCby=
WxRzmSSb3sdgCM4oFOPscFCykLzeYBB9MRgGIYGQnS0WAyEGc+hBIOHeOM06IwhCjQY+QyAw=
cQ1+NplohBkZey99fz2BhjMNGUIcHIkvi40cjD0VFUICApUzlxw9CgqfPRISoy8BAacvpQI9=
AACuPRERsi8XFwpCtAE9uL09Dw/ALx4eAMEPFsgzxswzFss9xhdC0dUzIQAh+QQFAAAfACwA=
AAAAGAAYAAAFvuD3baQjnmenmqhIbmz7qV2MFridqol+GoaNTJQoCoeGw1FGaS5bh0Nh+GlS=
psOBlsroGqiE8Fe2KA+omPRhCGmfh2nMG9WGIAhUjR4vQ/gxeXqAMhOFGlQZiYMthROHQ4kZ=
jy0NlRlUHJmTKBWdl0OZHJ8ynRxUAqijLRUSpkMKsK4yEhICVAG4si20ElQAv7ZDEcPBLRfH=
ClTDEQFDxxfNQw/T0S0e1wDS0xbZMtce3TIW4+Eo3xdU4xboKCEAIfkEBQAAHwAsAAAAABgA=
GAAABazgJ4rb5oyo2HVnSpruuLZuUdDpmuCoYWwxUSIBjB0OxRiFkkwNBoXgZxkNEgxSBgNr=
PUgXi4EUg5FCIOIgOZ06IwhSjQYeQyDKQTneNZlopBkZeyl9f0GBhi4NDRlSHByJKRUVjUGP=
lS6THFICApgpEhKbQQoKoy6hAlIBAacuEapBAACxMREBUhcXClIREbkXuEEPD8IuHh4Aww8W=
yjHIzjEWzUHIF1LT1yIhACH5BAUAAB8ALAAAAAAYABgAAAWs4CeO37Y5ZNp1aCqarfutcVoU=
Nbkm+WgYG5kokQjKDgejjEJRpgaDgvDDlMoIBMOUwdDKMJjDdLEYTDFmIQSS/hLUEMRbqNFM=
EQjMtK6XTSZ2QhkZfS5/gTKDiCkNDRlTHByLJBUVj0KRly6VHFMCApopEhKdQgoKpS6jAlMB=
AakpERGsQgAAtC6yAVMXFwpTD7tCvcIyDwBTHh7Ixg8WyctTFhbMLsoX0hbYIQAh+QQFAAAf=
ACwAAAAAGAAYAAAFt6DzjeS4nWJJdqxKnlvqsp1cFri9sok+GsCNa5QoCl2H5NFFaS5Lg2hh=
+GlSpi6C1kBleLkujPhAXZgHQzEGPYS42SqNnNB2I+hDOYaK6O/zGX8uE4QaVBkZhkOEE4ou=
iBlUDZORQxyXjiUVm5UulxydmpscVAKmoSQSqqRDCq6sKqoSAlQBtrAlEbq0QwC+vCq6EQFU=
F8YKQw/KxEPGF8wqyhYAVB7W1C4PFtPV11TbF90e4UPbIQAh+QQFAAAfACwAAAAAGAAYAAAF=
qWDXOV9pmttGnufInun6fu78FYXMion9GYaNL5EQzg4H44xCUbIGg4KPKZ0RCAYfg5GdYTAH=
32IxsH3LNggE/dJoCGkIAj5zY3wIxH2WyexnExMaNn2DNoGGMxyJLw0NGT4ckDYVFZOKHD6V=
mTYCApcsEhKcMwoKpKESAj4BAagnERGrNgAAsy+xAT4XFwo2Dw+6NrzCLMAWAD4eHskzFsjK=
zDbPF9HVMyEAIfkEBQAAHwAsAAAAABgAGAAABb/g93WkI57nppqoSHZs+6lbjJKJjRa87iaJ=
jUxkKAqHCcpRdmguWxRKYfgZWKfDKIVK6BqojPBXhikfqIv0YFjGrIeQ+LulqRPgccRdVtdg=
qAiBfzIZhYMyE4kaQ4UZi0OJE48tHJWTLQ2ZGUOVHJtDFaGfMgICoy2hFRxUAgqrQxKxrzIK=
rlSxEgJUAbxUEb+6QwDDwS2/EQFUF8sKQw/PyUPLF9Eozw8WAFQe3NoyFuDeMtwe4ijgFhfb=
3OooIQA7")}.septima-on-popup__desc{padding:10px 0;font-size:12px;color:#=
999}.septima-on-popup__text{float:left}.septima-on-popup__timer{float:ri=
ght}.septima-on-popup__themes{position:relative;margin:0 -70px 30px;padd=
ing:20px 0;height:236px;overflow:hidden;background:#f7f7f7}.septima-on-p=
opup__themes__item{width:150px;height:110px;float:left;border:1px solid =
#ccc;margin:0 7px 15px 7px;text-decoration:none;position:relative;outlin=
e:none;cursor:pointer}.septima-on-popup__themes__item:hover{box-shadow:0=
12px 15px -15px black}.septima-on-popup__themes__ctrl{position:absolute=
;top:0;width:56px;height:100%;cursor:pointer}.septima-on-popup__themes__=
ctrl_prev{left:0;background-position:-56px 0}.septima-on-popup__themes__=
ctrl_next{right:0;background-position:0 0}.septima-on-popup__themes__ctr=
l__ico{width:48px;height:94px;position:absolute;top:50%;margin-top:-47px=
;cursor:pointer;background:url(http://sport.mail.ru/img/_main/rotation_b=
uttons.png) no-repeat}.septima-on-popup__themes__ctrl__ico_prev{left:0;b=
ackground-position:-50px 0}.septima-on-popup__themes__ctrl:hover .septim=
a-on-popup__themes__ctrl__ico_prev{background-position:-50px -94px}.sept=
ima-on-popup__themes__ctrl__ico_next{right:0;background-position:0px 0}.=
septima-on-popup__themes__ctrl:hover .septima-on-popup__themes__ctrl__ic=
o_next{background-position:0px -94px}.septima-on-popup__themes__item_sel=
ected__marker{display:none}.septima-on-popup__themes__item_selected__mar=
ker__bg{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0.=
8;-moz-opacity:0.8;filter:alpha(opacity=3D80);background-color:#fff;z-in=
dex:0}.septima-on-popup__themes__item_selected__marker__img{background:t=
ransparent url(//img.mail.ru/mail/ru/images/default/ico/marker.png) no-r=
epeat center center;width:100%;height:100%;position:absolute;top:0;left:=
0;z-index:10}.septima-on-popup__themes__item_selected .septima-on-popup_=
_themes__item_selected__marker{display:block}.popup__collector__add{widt=
h:395px}.popup__head_collector__add{padding-bottom:27px}.popup__collecto=
r__add_domains{border-bottom:1px solid #F0F0F0;margin-bottom:18px;paddin=
g-bottom:12px;overflow:hidden}.popup__collector__add_domains__list{-webk=
it-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:1px=
solid transparent;color:#000;cursor:pointer;display:inline-block;font:1=
3px/18px arial, tahoma, sans-serif;overflow:hidden;margin-left:2px;paddi=
ng:8px 6px;text-align:center;vertical-align:top}.popup__collector__add_d=
omains__list_item{background-image:url("//img.imgsmail.ru/r/default/popu=
p/popup__collector_domains.png");background-repeat:no-repeat;height:17px=
}.popup__collector__add_domains__list:hover{-webkit-box-shadow:0px 2px 5=
px rgba(0, 0, 0, 0.1);-moz-box-shadow:0px 2px 5px rgba(0, 0, 0, 0.1);box=
-shadow:0px 2px 5px rgba(0, 0, 0, 0.1)}.popup__collector__add_domains__l=
ist:focus{border:1px solid #DDD !important;-webkit-box-shadow:0px 1px 3p=
x rgba(0, 0, 0, 0.2);-moz-box-shadow:0px 1px 3px rgba(0, 0, 0, 0.2);box-=
shadow:0px 1px 3px rgba(0, 0, 0, 0.2);outline:none}.popup__collector__ad=
d_domains__list.popup__collector__add_domains__list_mail{background-colo=
r:#28679C !important;-webkit-border-radius:6px;-moz-border-radius:6px;bo=
rder-radius:6px;background-color:#256399;background-image:-webkit-gradie=
nt(linear, left top, left bottom, from(#4b80ac), to(#256399));background=
-image:-webkit-linear-gradient(top, #4b80ac, #256399);background-image:-=
moz-linear-gradient(top, #4b80ac, #256399);background-image:-ms-linear-g=
radient(top, #4b80ac, #256399);background-image:-o-linear-gradient(top, =
#4b80ac, #256399);background-image:linear-gradient(to bottom, #4b80ac, #=
256399);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=3D=
'#4b80ac',endColorstr=3D'#256399')}.popup__collector__add_domains__list.=
popup__collector__add_domains__list_mail:focus{padding:7px}.popup__colle=
ctor__add_domains__list_mail{-webkit-border-radius:3px;-moz-border-radiu=
s:3px;border-radius:3px;padding:5px 6px;border-style:solid;border-color:=
#FDFDFD;border-top-width:3px;border-bottom-width:3px;border-left-width:2=
px;border-right-width:2px}.popup__collector__add_domains__item_mail{back=
ground-position:0px 2px;width:62px}.popup__collector__add_domains__item_=
yandex{background-position:-64px 0;width:45px}.popup__collector__add_dom=
ains__item_rambler{background-position:-113px 0;width:59px}.popup__colle=
ctor__add_domains__item_gmail{background-position:-174px 0;width:48px}.p=
opup__collector__add_domains__item_other{background:none;border-bottom:1=
px dotted #000;width:44px}.popup__collector__add_form{position:relative;=
margin:19px 0;overflow:hidden}.popup__collector__add_form .form__select_=
_box,.popup__collector__add_form .form__select__select{height:26px;overf=
low:hidden}.popup__collector__add_form .form__select__select{cursor:poin=
ter;left:auto}.popup__collector__add_input{border:1px solid #C6C6C6;-web=
kit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-t=
ransition:width 0.2s ease-out;-moz-transition:width 0.2s ease-out;-o-tra=
nsition:width 0.2s ease-out;transition:width 0.2s ease-out;-webkit-box-s=
hadow:inset 1px 1px 4px 0 rgba(0, 0, 0, 0.17);-moz-box-shadow:inset 1px =
1px 4px 0 rgba(0, 0, 0, 0.17);box-shadow:inset 1px 1px 4px 0 rgba(0, 0, =
0, 0.17);line-height:1.6;margin:0;padding:0 8px;position:relative;width:=
337px;height:24px;z-index:100}.popup__collector__add_input:hover{border-=
color:#999}.popup__collector__add_input:focus{border-color:#85B8EB;-webk=
it-box-shadow:0 0 3px rgba(19, 132, 235, 0.36), inset 1px 1px 4px rgba(0=
, 0, 0, 0.17);-moz-box-shadow:0 0 3px rgba(19, 132, 235, 0.36), inset 1p=
x 1px 4px rgba(0, 0, 0, 0.17);box-shadow:0 0 3px rgba(19, 132, 235, 0.36=
), inset 1px 1px 4px rgba(0, 0, 0, 0.17);outline:none}.popup__collector_=
_add_input__login{border-right:0;width:230px}.popup__collector__add_inpu=
t__password{width:337px}.popup__collector__add_select{border-left:0;disp=
lay:block;position:absolute !important;overflow:visible;opacity:1;top:0;=
right:0;z-index:100;width:111px}.popup__collector__add_error{color:red}.=
messagelist-wrapper{min-height:250px;background-repeat:repeat;background=
-position:0 0;z-index:1}.messagelist{position:relative;clear:both}.addre=
ssbook-mailru-v2 .messagelist{clear:none}.messagelist__empty-message{tex=
t-align:center;padding-top:30px}.addressbook-mailru-v2 .messagelist__emp=
ty-message{font-size:150%;line-height:160px;text-align:center;min-height=
:200px;background-color:#fff;border-radius:4px;font-weight:normal;color:=
#000000}.messagelist__empty-collector{background:url("//img.imgsmail.ru/=
r/default/messagelist/messagelist__empty-collector.png") no-repeat 0 50p=
x;font-size:13px;line-height:490px;margin:0 auto;position:relative;paddi=
ng-bottom:100px;text-align:center;width:252px;height:252px}.messagelist_=
_empty-collector__providers{background:url("//img.imgsmail.ru/r/default/=
messagelist/messagelist__empty-collector__providers.png") no-repeat;posi=
tion:absolute;top:160px}.messagelist__empty-collector__provider_yandex\.=
ru,.messagelist__empty-collector__provider_ya\.ru{left:71px;height:24px;=
width:12px}.messagelist__empty-collector__provider_corp\.mail\.ru,.messa=
gelist__empty-collector__provider_inbox\.ru,.messagelist__empty-collecto=
r__provider_list\.mail\.ru,.messagelist__empty-collector__provider_bk\.r=
u,.messagelist__empty-collector__provider_mail\.ru{background-position:-=
14px 0;left:64px;height:24px;width:25px}.messagelist__empty-collector__p=
rovider_gmail\.com,.messagelist__empty-collector__provider_gmail\.ru{bac=
kground-position:-42px 0;left:65px;width:26px;height:20px}.messagelist__=
empty-collector__provider_rambler\.ru{background-position:-68px 0;left:6=
5px;width:25px;height:24px}.messagelist__empty-collector__provider_hotma=
il\.com{background-position:-94px 0;left:62px;width:34px;height:26px}.me=
ssagelist__empty-collector__provider_yahoo\.com{background-position:-131=
px 0;left:62px;width:34px;height:26px}.messagelist__messages{display:blo=
ck;float:left;margin:8px 10px 0 0;padding:0 0 4px;overflow:hidden;font:1=
1px/17px Tahoma, sans-serif}.messagelist__messages_bottom{margin-top:10p=
x}.messagelist__messages__message{position:relative;display:block;float:=
left;height:17px;line-height:17px;background-repeat:no-repeat;background=
-position:0 100%;overflow:hidden}.messagelist__messages__message_counter=
{padding:0}.messagelist__messages__message_loader{padding-left:17px}.mes=
sagelist__messages__message__loader{position:absolute;top:55%;left:0}#id=
-count-navigation-top .messagelist__messages__showed{display:none}.messa=
gelist__dropdown{position:absolute;right:78px;margin-top:4px}.messagelis=
t__dropdown__shadow{opacity:0.4;overflow:hidden;position:absolute}.messa=
gelist__dropdown__shadow_right{border-right:1px solid #818181;bottom:1px=
;right:-1px;top:1px;width:1px}.messagelist__dropdown__shadow_bottom{bord=
er-bottom:1px solid #818181;bottom:1px;height:1px;left:1px;right:0}.mess=
agelist__dropdown__clip,.messagelist__dropdown__file-list{background-col=
or:#fff;border:1px solid #c7c7c7;border-right-color:#818181}.messagelist=
__dropdown__clip{width:26px;height:25px;border-bottom:none;position:abso=
lute;right:0}.messagelist__dropdown__clip__icon{margin:5px 0 0 3px}.mess=
agelist__dropdown__file-list{border-bottom-color:#818181;list-style:none=
;margin:25px 0 0 0;padding:10px 10px 5px 10px}.messagelist__dropdown__fi=
le-list__item{margin-bottom:5px !important}.messagelist__dropdown__file-=
list__item__content{text-decoration:none !important}.messagelist__dropdo=
wn__file-list__content-size{color:#999999 !important}.messagelist__dropd=
own__file-list__item__content__file-type-icon{display:inline-block;verti=
cal-align:middle;margin-right:5px;width:14px;background:url("//img.imgsm=
ail.ru/mail/ru/images/ru/icons-msglist-attach_228.png?0") top left no-re=
peat}.messagelist__dropdown__file-list__item__content__file-type-icon_Ar=
hiv{background-position:0 0;height:16px}.messagelist__dropdown__file-lis=
t__item__content__file-type-icon_Exel{background-position:0 -21px;height=
:12px}.messagelist__dropdown__file-list__item__content__file-type-icon_L=
etter{background-position:0 -38px;height:10px}.messagelist__dropdown__fi=
le-list__item__content__file-type-icon_Mp3{background-position:0 -53px;h=
eight:13px}.messagelist__dropdown__file-list__item__content__file-type-i=
con_Picture{background-position:0 -71px;height:14px}.messagelist__dropdo=
wn__file-list__item__content__file-type-icon_PowerPoint{background-posit=
ion:0 -90px;height:13px}.messagelist__dropdown__file-list__item__content=
__file-type-icon_Txt{background-position:0 -108px;height:14px}.messageli=
st__dropdown__file-list__item__content__file-type-icon_Word{background-p=
osition:0 -127px;height:12px}.messagelist__dropdown__file-list__item__co=
ntent__file-type-icon_Pdf{background-position:0 -144px;height:14px}.mess=
agelist__dropdown__file-list__item__content__file-type-icon_Other{backgr=
ound-position:0 -162px;height:13px}.messageline{position:relative;displa=
y:block;height:34px;padding-left:264px;border-top-width:1px;border-top-s=
tyle:solid;white-space:nowrap}.messageline:first-child{border-top-width:=
0}.messageline_unread{font-weight:bold}.messageline_disabled{filter:prog=
id:DXImageTransform.Microsoft.Alpha(opacity=3D40);opacity:.4;cursor:defa=
ult}.messageline__checkbox{position:absolute;left:0;width:20px;height:34=
px;padding-top:7px;padding-left:12px}.addressbook-mailru-v2 .messageline=
__checkbox{padding-top:0}.addressbook-mailru-v2 .addressbook__page__view=
-quicklist .messageline__checkbox{padding-top:7px}.messageline__status{p=
osition:absolute;top:9px;left:0}.messageline__status__icon{margin:0}.mes=
sageline__flag{position:absolute;top:5px;left:32px;width:27px;height:24p=
x;cursor:pointer}.messageline__flag__icon{display:block;margin:4px auto =
0}.messageline__body{display:block;width:100%;height:34px;white-space:no=
wrap;overflow:hidden;cursor:pointer}.messageline__body__link{display:blo=
ck}.messageline__body__link,.messageline__body__link:active,.messageline=
__body__link:focus,.messageline__body__link:hover,.messageline__body__li=
nk:link,.messageline__body__link:visited{line-height:34px;text-decoratio=
n:none}.messageline__body__name{position:absolute;left:85px;width:170px;=
padding-left:9px;overflow:hidden;text-decoration:none;cursor:pointer}.me=
ssageline__date{position:absolute;top:0;right:0;display:block;width:75px=
;height:34px;line-height:34px}.messageline__body__subject{padding-left:7=
px;text-decoration:none;white-space:nowrap;cursor:pointer}.messageline__=
fade{position:absolute;top:0;width:14px;height:34px;content:'';backgroun=
d-repeat:repeat-y;background-position:0 0}.messageline:hover .messagelin=
e__fade{background-position:-30px 0}.messageline_selected .messageline__=
fade,.messageline_selected:hover .messageline__fade{background-position:=
-15px 0}.messageline__fade_subject{right:35em;margin-left:-26px;border-r=
ight-width:12px;border-right-style:solid}.messageline__fade_name{left:27=
0px;margin-left:-26px;border-right-width:12px;border-right-style:solid}.=
messageline__fade_date{right:75px;height:34px;margin-left:-46px;border-r=
ight-width:37px;border-right-style:solid}.messageline__body__text,.messa=
geline__body__filesize{position:static;display:inline;margin-left:10px;w=
hite-space:nowrap;top:17px;left:120px;height:21px;overflow:hidden;cursor=
:pointer}.messageline_unread .messageline__body__text,.messageline_unrea=
d .messageline__body__filesize{font-weight:normal}.messageline__avatar{d=
isplay:inline-block;width:26px;height:26px;border-width:1px;border-style=
:solid;background-repeat:no-repeat;background-position:center;font:0/0 a=
}.messageline__attach{display:none;position:absolute;top:0;right:75px;pa=
dding-top:5px;z-index:12;width:30px;height:29px}.messageline__attach_has=
One{display:block;border:0;cursor:pointer}.messageline__attach__icon{dis=
play:block;margin:5px 0 0 3px}.messageline__attach__arrow{display:none;p=
osition:absolute;top:15px;left:20px;width:0;height:0;border-left:4px sol=
id transparent;border-right:4px solid transparent;border-top-style:solid=
;border-top-width:4px;font:0/0 a;overflow:hidden}.messageline__attach_ha=
sOne:hover .messageline__attach__arrow{display:block}.messageline_disabl=
ed .messageline__flag,.messageline_disabled .messageline__body,.messagel=
ine_disabled .messageline__body__name,.messageline_disabled .messageline=
__body__subject,.messageline_disabled .messageline__body__text,.messagel=
ine_disabled .messageline__body__filesize,.messageline_disabled .message=
line__attach_hasOne,.messageline_disabled .messageline__body__link,.mess=
ageline_disabled .messageline__microformat__button,.messageline_disabled=
.messageline__microformat-buttons{cursor:default}.messageline__icon-pri=
ority{top:-1px;left:7px}.messagelist_simple .messageline_newsnippets .me=
ssageline__body__subject{width:auto;display:inline}.messagelist_simple .=
messageline_newsnippets .messageline__body__text{position:static;display=
:inline;margin-left:10px;white-space:nowrap}.messageline__body__avatar{d=
isplay:block;position:absolute;left:59px;top:4px;width:26px;height:26px;=
background-position:center center;background-repeat:no-repeat;background=
-image:url("//img.imgsmail.ru/r/default/ico-from/32/default.png");-webki=
t-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.messagelin=
e__body__avatar__pic{display:block;width:26px;height:26px;background-pos=
ition:center center;background-repeat:no-repeat;border:0;-webkit-border-=
radius:2px;-moz-border-radius:2px;border-radius:2px}.messageline_unread =
.messageline__body__avatar{background-image:url("//img.imgsmail.ru/r/def=
ault/ico-from/32/default_unread.png")}.messagelist_simple .messageline{h=
eight:24px;padding-left:18.2em}.messagelist_simple .messageline__checkbo=
x{height:22px}.messagelist_simple .messageline__date,.messagelist_simple=
.messageline__fade_date,.messagelist_simple .messageline__folder,.messa=
gelist_simple .messageline__fade_folder,.messagelist_simple .messageline=
__file-expired,.messagelist_simple .messageline__file-size,.messagelist_=
simple .messageline__fade_subject{height:24px}.messagelist_simple .messa=
geline__fade_name{left:18.2em}.messagelist_simple .messageline__body__na=
me{left:60px}.messagelist_simple .messageline__microformat-buttons{displ=
ay:none}.messagelist_simple .messageline__body__text{display:none}.messa=
geline__microformat-buttons{display:none}.messagelist_search .messagelin=
e{padding-left:264px}.messagelist_search .messageline__body__name{left:5=
9px;width:200px;padding-left:5px}.messagelist_search_expanded .messageli=
ne__body__name{left:85px;width:170px;padding-left:9px}.messagelist_searc=
h .messageline__fade_name{left:264px}.messagelist_search .messageline__b=
ody__text{width:auto;height:32px;left:60px;top:20px;padding-top:1px;line=
-height:16px;white-space:normal}.messagelist_search .messageline__attach=
{right:205px}.messagelist_search .messageline__date{right:130px}.message=
list_search .messageline__fade_date{right:205px}.messageline__folder{dis=
play:block;position:absolute;top:0;right:13px;width:111px;height:56px;pa=
dding-left:6px;line-height:34px;text-decoration:none;overflow:hidden}.me=
ssageline__fade_folder{height:56px;right:0;margin-left:-26px;border-righ=
t-width:12px;border-right-style:solid}.messagelist_search .ml-A{right:20=
7px}.messagelist_search .messagelist__dropdown{right:207px}.messagelist_=
files-search .messageline,.messagelist_files-search .messageline{padding=
-left:60px;padding-right:7em}.messagelist_files-search .messageline__bod=
y{cursor:auto}.messagelist_files-search .messageline__body__subject{padd=
ing-left:0}.messagelist_files-search .messageline__body__link{display:in=
line-block;overflow:hidden}.messagelist_files-search .messageline__body_=
_link_filename{width:25%}.messagelist_files-search .messageline__body__l=
ink_filedownload{width:7em}.messagelist_files-search .messageline__body_=
_link_filefolder{width:9.3em}.messagelist_files-search .messageline__bod=
y__link_filesubject{width:100%}.messagelist_files-search .messageline__f=
iletype__icon{margin-top:5px;margin-left:5px}.messagelist_files-search .=
messageline__body__name{display:inline;position:static}.messagelist_file=
s-search .messageline__body__text,.messagelist_files-search .messageline=
__body__filesize{display:inline;position:static;white-space:nowrap}.mess=
agelist_files-search .messageline__fade_subject{left:24.9%;margin-left:1=
px;right:auto}.messagelist_files-search .messageline__fade_date{right:6.=
2em;border-right-width:12px}.messagelist_files-search_short .messageline=
__body__link_filefolder{display:none}.messagelist-wrapper_fileslist_shor=
t{overflow-y:auto;height:100%}.messagelist_fileslist_short .messageline{=
padding-left:22px;padding-right:0}.messagelist_fileslist_short .messagel=
ine__body__link{display:inline;overflow:hidden}.messagelist_fileslist_sh=
ort .messageline__filetype__icon{margin-left:0px;margin-top:4px}.message=
list_fileslist_short .messageline__flag{left:6px}.messagelist_fileslist_=
short .messageline__body__link_filedownload{position:absolute;right:0px;=
width:90px;overflow:hidden}.messagelist_fileslist_short .messageline__bo=
dy__filesize{position:static;display:inline}.messagelist_fileslist_short=
__files__file_folder .messagelist_fileslist_short__files{display:none}.m=
essagelist_media .messageline__folder{line-height:34px}.messagelist_medi=
a_simple .messageline__body__name,.messagelist_media_simple .messageline=
__body__name_ico-from{left:59px;width:200px;padding-left:5px}.messagelis=
t_media_expanded .messageline__body__name,.messagelist_media_expanded .m=
essageline__body__name_ico-from{left:85px;width:170px;padding-left:9px}.=
messagelist_media_simple .messageline{height:26px}.messagelist_media_sim=
ple .messageline__body{height:26px}.messagelist_media_simple .messagelin=
e__folder,.messagelist_media_simple .messageline__body__link,.messagelis=
t_media_simple .messageline__body__link:active,.messagelist_media_simple=
.messageline__body__link:focus,.messagelist_media_simple .messageline__=
body__link:hover,.messagelist_media_simple .messageline__body__link:link=
,.messagelist_media_simple .messageline__body__link:visited{line-height:=
26px}.messagelist_media_simple .messageline__date{line-height:26px}.mess=
agelist_media_simple .messageline__body__subject{line-height:26px}.messa=
gelist_media_simple .messageline__fade,.messagelist_media_simple .messag=
eline__date,.messagelist_media_simple .messageline__fade_date{height:26p=
x}.messagelist_media_simple .messageline__attach{top:-5px;height:26px}.m=
essagelist_media_simple .messageline__body__avatar{display:none}.message=
list_media_simple .messageline__flag{top:1px}.messagelist_media_simple .=
messageline__checkbox{padding-top:3px;height:23px}.messagelist_media_sim=
ple .messageline__status{top:5px}.messagelist_media_simple .messagelist_=
_dropdown{margin-top:0px}.contactline,.messagelist_simple .contactline{p=
adding-left:93px;padding-right:0;height:100%;line-height:24px}.contactli=
ne{line-height:34px}.contactline__body__details{position:absolute;right:=
0;line-height:24px}.contactline__body__details{line-height:34px}.contact=
line__multiline .contactline__body__multiline{height:100%}.contactline__=
body__multiline{height:24px;overflow:hidden}.contactline__body__multilin=
e{height:34px}.contactline__body__multiline__item{display:block}.contact=
line__body__item{display:inline-block;margin-right:8px;position:relative=
;overflow:hidden;vertical-align:top}.contactline__body__item_name,.conta=
ctline__body__item_company,.contactline__body__item_emails,.contactline_=
_body__item_labels{cursor:pointer;overflow:hidden}.contactline__body__it=
em_name,.contactline__body__item_company{width:200px}.contactline__body_=
_item_emails{color:#4f4f4f;padding-left:17px;width:250px}.contactline__b=
ody__item_phones,.contactline__body__item_job{display:inline-block;color=
:#4f4f4f;width:250px}.contactline__body__item_labels{color:#4f4f4f;heigh=
t:34px}.contactline__body__item_email{padding-left:5px}.contactline__bod=
y__item__icon_agent{margin-top:-11px;margin-left:-13px;width:13px;height=
:13px}.contactline__fade{right:0px}.contactline__items-count{font-size:1=
0px;color:#000000;background-color:#ecf3f7;line-height:10px;padding:2px =
4px 1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2=
px}.addressbook__page__view .contactline{padding-right:0}.addressbook__p=
age__view .contactline__fade{display:none}.form{margin-top:15px}.form_te=
xt{margin-top:19px}.form__row{display:table;width:100%;margin-bottom:22p=
x}.form__row_narrow{margin-bottom:16px}.form__row_super-narrow{margin-bo=
ttom:8px}.form__row_no-label{padding-left:144px}.form__row_snap-to-top{m=
argin-top:-22px}.form__row_no-margins{margin:0}.form__row_sex{margin:-9p=
x 0 17px}.form__row_reg-form-sex{margin-bottom:26px}.form__row_msg-list{=
margin-bottom:30px}.form__row_after-delete{margin-top:-2px}.form__row_to=
p{margin:19px 0 7px}.form__row__label{display:table-cell;width:120px;pad=
ding-top:6px;padding-right:24px;vertical-align:top;text-align:right;font=
-size:12px;line-height:14px;color:#000;cursor:default}.form__row__label_=
_sublabel{color:#999}.form__row__pseudo-label{margin-left:-144px;positio=
n:relative}.form__row__label_popup{width:138px}.form__row__label_no-top-=
padding{padding-top:0}.form__row__widget{display:table-cell;vertical-ali=
gn:top}.form__row__widget_text{padding-top:3px;line-height:18px}.form__r=
ow__widget_add-phone-wrapper{margin-bottom:10px}.form__row__widget_add-p=
hone-wrapper_upshift{margin-top:8px}.form__row__widget__wrapper{width:30=
0px}.form__row__widget__wrapper_wide{width:560px}.form__row__subwidget{d=
isplay:block;margin:5px 0}.form__row__subwidget__input{margin:4px 0 0 23=
px}.form__row__subwidget__input_checkbox{margin-top:10px}.form__row__sub=
widget_first{margin-top:0}.form__row__subwidget_inline{display:inline-bl=
ock;vertical-align:middle}.form__row__subwidget_time-field{margin-right:=
20px}.form__row__subwidget_reg-form-sex{width:320px}.form__row__subwidge=
t_top{margin-top:-5px;margin-bottom:5px;vertical-align:top}.form__row__s=
ubwidget_shift-bottom{margin-bottom:5px}.form__row__subwidget_spacious{m=
argin-top:10px;margin-bottom:10px}.form__row__subwidget_nowrap{white-spa=
ce:nowrap}.form__row__sublabel{display:inline-block;margin:8px 10px 8px =
0}.form__row__shift{margin-left:20px}.form__row__shift-small{margin-left=
:13px}.form__row__shift-tiny{margin-left:7px}.form__row__right-shift-sma=
ll{margin-right:13px}.form__row__placeholder{position:relative}.form__ro=
w__placeholder__placeholder{position:absolute;left:10px;top:5px;font-siz=
e:14px;color:#a4a4a4;cursor:text}.form__row__single-domain{margin:0 39px=
0 5px;line-height:19px}.form__row__avatar__wrapper{display:inline-block=
;max-width:185px;max-height:185px;min-width:90px;min-height:90px;backgro=
und-color:#bac7d5;border:#b5b5b5 solid 1px;margin-bottom:4px;margin-top:=
9px;width:auto;text-align:center}.form__row__avatar__wrapper_index{float=
:left;background-color:#bac7d5;border:#b5b5b5 solid 1px;width:90px;heigh=
t:90px;margin-top:2px;margin-right:15px;text-align:center}.form__row__av=
atar__wrapper_avatar{background-color:#ffffff;background-position:50% 50=
%;background-repeat:no-repeat}.form__row__avatar{max-width:185px;max-hei=
ght:185px;vertical-align:middle}.form__row__avatar__infotext{display:inl=
ine-block;vertical-align:top;margin:6px 0 0 10px}.form__row__note{color:=
#999;margin-top:5px;font-size:11px}.form__row__note_uploader{padding-lef=
t:20px;margin-top:0px;margin-bottom:6px;line-height:14px}.form__row__not=
e_reg-form{font-size:12px;color:#333}.form__emphasis{font-size:14px}.for=
m__actions{margin-top:10px;padding-left:144px;opacity:0}.form__actions__=
wrapper{height:26px;margin-bottom:22px}.form__actions__wrapper .form__ac=
tions{opacity:1}.form__actions_floating{position:fixed;bottom:0;left:0;r=
ight:0;width:90%;padding:15px 5%;background:#fff;background:rgba(255, 25=
5, 255, 0.9);z-index:9999;opacity:1;box-shadow:0 -2px 2px rgba(0, 0, 0, =
0.15);-webkit-transition:all 0.25s cubic-bezier(0.215, 0.61, 0.355, 1);-=
moz-transition:all 0.25s cubic-bezier(0.215, 0.61, 0.355, 1);-o-transiti=
on:all 0.25s cubic-bezier(0.215, 0.61, 0.355, 1);transition:all 0.25s cu=
bic-bezier(0.215, 0.61, 0.355, 1)}.form__actions_floating .form__actions=
__inner{padding-left:404px}.form__add-more-fields{position:relative;floa=
t:left;margin-right:10px}.form__dropdown__add-more-fields__arrow{border-=
color:#0857A6 transparent transparent;border-style:solid inset inset;bor=
der-width:4px 4px 0;display:inline-block;font-size:0;height:0;line-heigh=
t:0;margin:0 0 2px 4px;width:0}.form__field__country{width:300px}.form__=
field__radio-group{width:300px}.form_disabled,.form_disabled .form__row_=
_label,.form_disabled .form__message,.form_disabled h3,.form_disabled a,=
.form_disabled a:link,.form_disabled a:visited,.form_disabled a:hover,.f=
orm_disabled a:active,.form_disabled a:focus{color:#999;-webkit-user-sel=
ect:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fo=
rm_disabled .mr-link:hover u{border-color:#999;cursor:default}.form_disa=
bled .icon,.form_disabled .form__checkbox__checkbox{opacity:.4}.form__sw=
itcher{display:inline-block;padding:5px 7px;font-size:1em;line-height:0;=
-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;curso=
r:pointer}.form__switcher:hover{border-color:#999}.form__switcher_positi=
ve{color:#000;background-color:#e9f5e5}.form__switcher_positive_selected=
{color:#fff;background-color:#098d27}.form__switcher_negative{color:#000=
;background-color:#ffe5e5}.form__switcher_negative_selected{color:#fff;b=
ackground-color:#d0323b}.form__switcher__input{margin:0;vertical-align:m=
iddle;cursor:pointer;outline:none}.form__switcher__text{line-height:1em;=
vertical-align:bottom;cursor:pointer}.form__switcher_options{height:14px=
}.form__switcher_options_positive{margin-right:-3px;text-transform:upper=
case;border:1px solid #cbcbcb;-webkit-border-radius:3px 0 0 3px;-moz-bor=
der-radius:3px 0 0 3px;border-radius:3px 0 0 3px;background-color:#eeeee=
e;background-image:-webkit-gradient(linear, left top, left bottom, from(=
white), to(#eeeeee));background-image:-webkit-linear-gradient(top, white=
, #eeeeee);background-image:-moz-linear-gradient(top, white, #eeeeee);ba=
ckground-image:-ms-linear-gradient(top, white, #eeeeee);background-image=
:-o-linear-gradient(top, white, #eeeeee);background-image:linear-gradien=
t(to bottom, white, #eeeeee);filter:progid:DXImageTransform.Microsoft.gr=
adient(startColorstr=3D'white',endColorstr=3D'#eeeeee')}.form__switcher_=
options_positive_selected,.form__switcher_options_positive_selected:hove=
r{border:1px solid #4aa11f;background-color:#4aa11f;background-image:-we=
bkit-gradient(linear, left top, left bottom, from(#4cad1f), to(#4aa11f))=
;background-image:-webkit-linear-gradient(top, #4cad1f, #4aa11f);backgro=
und-image:-moz-linear-gradient(top, #4cad1f, #4aa11f);background-image:-=
ms-linear-gradient(top, #4cad1f, #4aa11f);background-image:-o-linear-gra=
dient(top, #4cad1f, #4aa11f);background-image:linear-gradient(to bottom,=
#4cad1f, #4aa11f);filter:progid:DXImageTransform.Microsoft.gradient(sta=
rtColorstr=3D'#4cad1f',endColorstr=3D'#4aa11f')}.form__switcher_options_=
negative{text-transform:uppercase;-webkit-border-radius:0 3px 3px 0;-moz=
-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;border:1px solid #c=
bcbcb;background-color:#eeeeee;background-image:-webkit-gradient(linear,=
left top, left bottom, from(white), to(#eeeeee));background-image:-webk=
it-linear-gradient(top, white, #eeeeee);background-image:-moz-linear-gra=
dient(top, white, #eeeeee);background-image:-ms-linear-gradient(top, whi=
te, #eeeeee);background-image:-o-linear-gradient(top, white, #eeeeee);ba=
ckground-image:linear-gradient(to bottom, white, #eeeeee);filter:progid:=
DXImageTransform.Microsoft.gradient(startColorstr=3D'white',endColorstr=3D=
'#eeeeee')}.form__switcher_options_negative_selected,.form__switcher_opt=
ions_negative_selected:hover{border:1px solid #b86052;background-color:#=
b86052;background-image:-webkit-gradient(linear, left top, left bottom, =
from(#c46656), to(#b86052));background-image:-webkit-linear-gradient(top=
, #c46656, #b86052);background-image:-moz-linear-gradient(top, #c46656, =
#b86052);background-image:-ms-linear-gradient(top, #c46656, #b86052);bac=
kground-image:-o-linear-gradient(top, #c46656, #b86052);background-image=
:linear-gradient(to bottom, #c46656, #b86052);filter:progid:DXImageTrans=
form.Microsoft.gradient(startColorstr=3D'#c46656',endColorstr=3D'#b86052=
')}.form__switcher_options_positive_selected,.form__switcher_options_neg=
ative_selected{color:#fff}.form__options{display:inline-block;margin-bot=
tom:21px}.form__fieldset{padding:6px 41px;margin-bottom:26px;border:1px =
solid #dadce5;border-radius:2px}.form__fieldset__legend{margin-left:-10p=
x;padding:0 10px;font-size:12px;font-weight:bold;color:#010101}.form__bu=
tton,.form__button:link,.form__button:visited,.form__button:hover,.form_=
_button:active,.form__button:focus{display:inline-block;margin-right:24p=
x;color:#fff;border:none;cursor:pointer;white-space:nowrap;text-decorati=
on:none}.form__button_disabled,.form__button_disabled:link,.form__button=
_disabled:visited,.form__button_disabled:hover,.form__button_disabled:ac=
tive,.form__button_disabled:focus{opacity:0.5;cursor:default}.form__butt=
on_default,.form__button_default:link,.form__button_default:visited,.for=
m__button_default:hover,.form__button_default:active,.form__button_defau=
lt:focus,.form__button_default.form__button_disabled:hover,.form__button=
_default.form__button_disabled:active,.form__button_default.form__button=
_disabled:focus{height:16px;margin-top:-2px;padding:2px 7px;border:1px s=
olid;border-color:#8bafd1 #6f95b9 #557ca3 #6f95b9;border-radius:2px;font=
-size:12px;line-height:15px;color:#333;background-color:#87abce;backgrou=
nd-image:-webkit-gradient(linear, left top, left bottom, from(#fdfefe), =
to(#dbe5f3), color-stop(0.85, #c5d3e6));background-image:-webkit-linear-=
gradient(top, #fdfefe, #c5d3e6 85%, #dbe5f3);background-image:-moz-linea=
r-gradient(top, #fdfefe, #c5d3e6 85%, #dbe5f3);background-image:-ms-line=
ar-gradient(top, #fdfefe, #c5d3e6 85%, #dbe5f3);background-image:-o-line=
ar-gradient(top, #fdfefe, #c5d3e6 85%, #dbe5f3);background-image:linear-=
gradient(to bottom, #fdfefe, #c5d3e6 85%, #dbe5f3);filter:progid:DXImage=
Transform.Microsoft.gradient(startColorstr=3D'#fdfefe', endColorstr=3D'#=
c5d3e6');box-shadow:none;outline:none}.form__button_default:hover{backgr=
ound-image:-webkit-gradient(linear, left top, left bottom, from(#fdfefe)=
, to(#dbe5f3), color-stop(0.85, #e1ebf6));background-image:-webkit-linea=
r-gradient(top, #fdfefe, #e1ebf6 85%, #dbe5f3);background-image:-moz-lin=
ear-gradient(top, #fdfefe, #e1ebf6 85%, #dbe5f3);background-image:-ms-li=
near-gradient(top, #fdfefe, #e1ebf6 85%, #dbe5f3);background-image:-o-li=
near-gradient(top, #fdfefe, #e1ebf6 85%, #dbe5f3);background-image:linea=
r-gradient(to bottom, #fdfefe, #e1ebf6 85%, #dbe5f3);filter:progid:DXIma=
geTransform.Microsoft.gradient(startColorstr=3D'#fdfefe', endColorstr=3D=
'#e1ebf6')}.form__button_default:active{background-color:#E0EAF6;line-he=
ight:17px;background-image:none;filter:none;-webkit-box-shadow:inset 0 6=
px 5px -7px black;-moz-box-shadow:inset 0 6px 5px -7px black;box-shadow:=
inset 0 6px 5px -7px black}.form_disabled .form__button_default,.form_di=
sabled .form__button_default:link,.form_disabled .form__button_default:v=
isited,.form_disabled .form__button_default:hover,.form_disabled .form__=
button_default:active,.form_disabled .form__button_default:focus{color:#=
3d5d89}.form__button_default_left,.form__button_default_left:link,.form_=
_button_default_left:visited,.form__button_default_left:hover,.form__but=
ton_default_left:active,.form__button_default_left:focus,.form__button_d=
efault_left.form__button_disabled:hover,.form__button_default_left.form_=
_button_disabled:active,.form__button_default_left.form__button_disabled=
:focus{border-radius:2px 0 0 2px;margin-right:0;vertical-align:top}.form=
__button_default_right,.form__button_default_right:link,.form__button_de=
fault_right:visited,.form__button_default_right:hover,.form__button_defa=
ult_right:active,.form__button_default_right:focus,.form__button_default=
_right.form__button_disabled:hover,.form__button_default_right.form__but=
ton_disabled:active,.form__button_default_right.form__button_disabled:fo=
cus{border-radius:0 2px 2px 0;margin-left:-1px;padding-left:0;vertical-a=
lign:top}.form__button_submit,.form__button_submit:link,.form__button_su=
bmit:visited,.form__button_submit:hover,.form__button_submit:active,.for=
m__button_submit:focus,.form__button_submit.form__button_disabled:hover,=
.form__button_submit.form__button_disabled:active,.form__button_submit.f=
orm__button_disabled:focus{height:26px;min-width:114px;padding:0 16px 2p=
x;border:1px solid #3877a7;border-radius:4px;margin-right:21px;margin-le=
ft:0;text-shadow:0px -1px 0 rgba(0, 0, 0, 0.29);box-shadow:0 1px 3px 0 r=
gba(0, 0, 0, 0.4);background-color:#4788cd;background:-webkit-gradient(l=
inear, 0 0, 0 100%, from(#94c0ee), to(#4788cd));background:-webkit-linea=
r-gradient(#94c0ee, #4788cd);background:-moz-linear-gradient(#94c0ee, #4=
788cd);background:-ms-linear-gradient(#94c0ee, #4788cd);background:-o-li=
near-gradient(#94c0ee, #4788cd);background:linear-gradient(#94c0ee, #478=
8cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'=
#94c0ee', endColorstr=3D'#4788cd')}.form__button_submit:hover{border-col=
or:#5e98be;background-color:#6da6db;background:-webkit-gradient(linear, =
0 0, 0 100%, from(#b0d1f3), to(#6da6db));background:-webkit-linear-gradi=
ent(#b0d1f3, #6da6db);background:-moz-linear-gradient(#b0d1f3, #6da6db);=
background:-ms-linear-gradient(#b0d1f3, #6da6db);background:-o-linear-gr=
adient(#b0d1f3, #6da6db);background:linear-gradient(#b0d1f3, #6da6db);fi=
lter:progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'#b0d1f3=
', endColorstr=3D'#6da6db')}.form__button_submit:active{border-width:0 1=
px;padding-bottom:0px;border-color:#2e659e;background-color:#71a6de;back=
ground:-webkit-gradient(linear, 0 0, 0 100%, from(#0a2e54), to(#71a6de),=
color-stop(0.2, #377dc6));background:-webkit-linear-gradient(#0a2e54, #=
377dc6 20%, #71a6de);background:-moz-linear-gradient(#0a2e54, #377dc6 20=
%, #71a6de);background:-ms-linear-gradient(#0a2e54, #377dc6 20%, #71a6de=
);background:-o-linear-gradient(#0a2e54, #377dc6 20%, #71a6de);backgroun=
d:linear-gradient(#0a2e54, #377dc6 20%, #71a6de);filter:progid:DXImageTr=
ansform.Microsoft.gradient(startColorstr=3D'#0a2e54', endColorstr=3D'#71=
a6de')}.form__button_cancel,.form__button_cancel:link,.form__button_canc=
el:visited,.form__button_cancel:hover,.form__button_cancel:active,.form_=
_button_cancel:focus,.form__button_cancel.form__button_disabled:hover,.f=
orm__button_cancel.form__button_disabled:active,.form__button_cancel.for=
m__button_disabled:focus{height:26px;min-width:114px;padding:0 16px 2px;=
border:1px solid #9cadbe;border-radius:4px;color:#333;margin-right:21px;=
margin-left:0;background-color:#e4e7e9;background:-webkit-gradient(linea=
r, 0 0, 0 100%, from(#f4f7fa), to(#e4e7e9));background:-webkit-linear-gr=
adient(#f4f7fa, #e4e7e9);background:-moz-linear-gradient(#f4f7fa, #e4e7e=
9);background:-ms-linear-gradient(#f4f7fa, #e4e7e9);background:-o-linear=
-gradient(#f4f7fa, #e4e7e9);background:linear-gradient(#f4f7fa, #e4e7e9)=
;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'#f4f=
7fa', endColorstr=3D'#e4e7e9')}.form__button_cancel:hover{border-color:#=
9cadbe;background-color:#f5f9fc;background:-webkit-gradient(linear, 0 0,=
0 100%, from(#f9fcff), to(#f5f9fc));background:-webkit-linear-gradient(=
#f9fcff, #f5f9fc);background:-moz-linear-gradient(#f9fcff, #f5f9fc);back=
ground:-ms-linear-gradient(#f9fcff, #f5f9fc);background:-o-linear-gradie=
nt(#f9fcff, #f5f9fc);background:linear-gradient(#f9fcff, #f5f9fc);filter=
:progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'#f9fcff', e=
ndColorstr=3D'#f5f9fc')}.form__button_cancel:active{border-width:0 1px;p=
adding-bottom:0px;border-color:#9cadbe;background-color:#cdd0d2;backgrou=
nd:-webkit-gradient(linear, 0 0, 0 100%, from(#c0c2c5), to(#cdd0d2));bac=
kground:-webkit-linear-gradient(#c0c2c5, #cdd0d2);background:-moz-linear=
-gradient(#c0c2c5, #cdd0d2);background:-ms-linear-gradient(#c0c2c5, #cdd=
0d2);background:-o-linear-gradient(#c0c2c5, #cdd0d2);background:linear-g=
radient(#c0c2c5, #cdd0d2);filter:progid:DXImageTransform.Microsoft.gradi=
ent(startColorstr=3D'#c0c2c5', endColorstr=3D'#cdd0d2')}.form__button_re=
gister{height:41px;padding:0 17px;font-size:15px !important;border-botto=
m:1px solid #fff;-webkit-border-radius:6px;-moz-border-radius:6px;border=
-radius:6px;background-color:#27970f;background-image:-webkit-gradient(l=
inear, left top, left bottom, from(#4fd831), to(#27970f));background-ima=
ge:-webkit-linear-gradient(top, #4fd831, #27970f);background-image:-moz-=
linear-gradient(top, #4fd831, #27970f);background-image:-ms-linear-gradi=
ent(top, #4fd831, #27970f);background-image:-o-linear-gradient(top, #4fd=
831, #27970f);background-image:linear-gradient(to bottom, #4fd831, #2797=
0f);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'#=
4fd831',endColorstr=3D'#27970f')}input[type=3D"submit"].form__button_reg=
ister{font-size:15px !important}.form__button_reset,.form__button_reset:=
link,.form__button_reset:visited,.form__button_reset:hover,.form__button=
_reset:active,.form__button_reset:focus{color:#999}.form__button_reset:l=
ink,.form__button_reset:visited,.form__button_reset.form__button_disable=
d:hover{text-decoration:underline}.form__button_reset:hover{color:#f26d0=
0}.form__field{width:280px;margin:0;padding:4px 9px;color:#333;backgroun=
d:#fff;font-size:14px;font-family:Arial, Tahoma, Verdana, sans-serif;bor=
der:1px solid #b5b5b5;border-radius:2px;box-shadow:1px 2px 2px #e0e0e0 i=
nset}.form__field:hover{border-color:#999}.form__field:focus{border-colo=
r:#85b8eb;outline:0}.form__field_error{border-color:#e27566}.form__field=
_wide{width:540px}.form__field_editor{border-radius:0}.form__field_combo=
{border-right:none;border-radius:2px 0 0 2px}.form__field_expandable{wid=
th:300px;height:26px;-webit-box-sizing:border-box;-moz-box-sizing:border=
-box;box-sizing:border-box;overflow:hidden}.form__field_expandable_expan=
ded{overflow:visible}.form__field_expandable.form__field_wide{width:560p=
x}.form__field_disabled,.form__field_disabled:hover{opacity:.4;cursor:de=
fault;border-color:#b5b5b5}.form__field::-webkit-input-placeholder{color=
:#a4a4a4}.form__field:-moz-placeholder{color:#a4a4a4}.form__field__wrapp=
er{width:300px;position:relative}.form__field__wrapper_wide{width:560px}=
.form__field__wrapper_inline{display:inline-block;width:auto;vertical-al=
ign:top}.form__field__wrapper_inline_shift{margin-left:13px}.form__field=
__calendar-link{position:absolute;top:50%;right:18px}.form__field__wrapp=
er:hover .icon_form_calendar{background-position:0 -310px}.form__field__=
wrapper_disabled .icon_form_calendar,.form__field__wrapper_disabled:hove=
r .icon_form_calendar{background-position:0 -334px}.form__field_address-=
list{height:27px;overflow:hidden;font-size:14px;line-height:16px;-webkit=
-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}=
.form__field_reg-form{width:300px}.form__field_ab-form{width:300px}.form=
__field_reg-form-login{width:203px;height:17px}.form__field_date-field{w=
idth:110px;margin-right:10px}.form__row_error .form__field{border-color:=
#E27566}.form__field__suggest{-webkit-box-sizing:border-box;-moz-box-siz=
ing:border-box;box-sizing:border-box;border:1px solid #85b8eb;border-top=
:none;box-shadow:2px 2px 1px rgba(0, 0, 0, 0.25);width:100%;min-width:0}=
.form__field__suggest__inner{max-height:190px;display:block;overflow:aut=
o}.form__field__suggest__item{padding:1px 6px;color:#333;font-size:14px;=
text-align:left}.form__field__suggest__item_hover{background:#ddeeff}.fo=
rm__field__link,.form__field__link:link,.form__field__link:visited,.form=
__field__link:hover,.form__field__link:active,.form__field__link:focus{p=
osition:absolute;right:12px;top:6px;line-height:13px;color:#666;text-dec=
oration:none;border-bottom:1px dashed #666}.form__field__link:hover{colo=
r:#f26d00;border-color:#f26d00}.form__field__labels{overflow:hidden;padd=
ing:2px;width:294px;min-height:20px;line-height:19px}.form__field__label=
s__input{border:0;background:transparent;outline:none;height:11px;color:=
#000000;font-size:12px;width:auto;padding:2px 3px 2px;margin:2px;font-fa=
mily:Arial,Tahoma,Verdana,sans-serif;display:inline}.form__select{positi=
on:relative;cursor:default;overflow:hidden}.form__select:hover .form__se=
lect__box,.form__select:active .form__select__box{border-color:#999;back=
ground-color:#efefef;background-image:-webkit-gradient(linear, left top,=
left bottom, from(white), to(#efefef));background-image:-webkit-linear-=
gradient(top, white, #efefef);background-image:-moz-linear-gradient(top,=
white, #efefef);background-image:-ms-linear-gradient(top, white, #efefe=
f);background-image:-o-linear-gradient(top, white, #efefef);background-i=
mage:linear-gradient(to bottom, white, #efefef);filter:progid:DXImageTra=
nsform.Microsoft.gradient(startColorstr=3D'white',endColorstr=3D'#efefef=
')}.form__select_wide{width:300px}.form__select_medium{width:200px}.form=
__select_custom-dropdown{overflow:visible}.form__select__select{position=
:absolute;width:100%;height:27px;left:0;right:0;top:0;bottom:0;opacity:0=
;z-index:200;-webkit-appearance:menulist-button}.form__select__box{width=
:100%;height:27px;padding:4px 20px 2px 9px;color:#333;font-size:14px;fon=
t-family:Arial,Tahoma,Verdana,sans-serif;border:1px solid #ccc;-webkit-b=
order-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-si=
zing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;backgro=
und-color:#ededed;background-image:-webkit-gradient(linear, left top, le=
ft bottom, from(white), to(#ededed));background-image:-webkit-linear-gra=
dient(top, white, #ededed);background-image:-moz-linear-gradient(top, wh=
ite, #ededed);background-image:-ms-linear-gradient(top, white, #ededed);=
background-image:-o-linear-gradient(top, white, #ededed);background-imag=
e:linear-gradient(to bottom, white, #ededed);filter:progid:DXImageTransf=
orm.Microsoft.gradient(startColorstr=3D'white',endColorstr=3D'#ededed');=
white-space:nowrap}.form__select__box__text{overflow:hidden;text-overflo=
w:ellipsis}.form__select__box_position{position:relative;z-index:1000}.f=
orm__select__box_combo{border-radius:0 2px 2px 0}.form__select__arrow{di=
splay:block;position:absolute;top:11px;right:8px;border-color:#000 trans=
parent transparent;border-style:solid;border-width:4px 4px 0;z-index:2}.=
form__select_reg-form-domain{width:100px;margin-left:-6px}.form__select_=
reg-form-countries{width:140px}.form__select_error .form__select__box{bo=
rder-color:#e27566}.form__select_focus .form__select__box{border-color:#=
999;outline:0}.form__select_disabled{opacity:.4;cursor:default}.form__se=
lect_disabled:hover .form__select__box{border-color:#ccc}.form__select_d=
isabled:active .form__select__box{-webkit-box-shadow:none;-moz-box-shado=
w:none;box-shadow:none}#nojs .form__select,#nojs .form__select__select{p=
osition:static;left:auto;right:auto;top:auto;bottom:auto;opacity:1}#nojs=
.form__select__box,#nojs .form__select__arrow{display:none}.form__email=
-combo{position:relative}.form__email-combo__field{width:60%}.form__emai=
l-combo__select{position:absolute;right:0;top:0;width:40%}.form__spinbox=
{position:relative}.form__spinbox_disabled{opacity:.4;cursor:default}.fo=
rm__spinbox_inline{display:inline-block}.form__spinbox__field{width:20px=
;margin:0;padding:4px 14px 4px 9px;color:#333;background:#fff;text-align=
:right;font-size:14px;font-family:Arial, Tahoma, Verdana, sans-serif;bor=
der:1px solid #b5b5b5;border-radius:2px;box-shadow:1px 2px 2px #e0e0e0 i=
nset}.form__spinbox__field:hover{border-color:#999}.form__spinbox__field=
:focus{border-color:#85b8eb;outline:0}.form__spinbox_disabled .form__spi=
nbox__field,.form__spinbox_disabled .form__spinbox__field:hover{border-c=
olor:#b5b5b5;cursor:default}.form__spinbox__field_error{border-color:#e2=
7566}.form__spinbox__button{position:absolute;right:0;width:16px;height:=
50%}.form__spinbox__button:hover .form__spinbox__button__arrow_inc{borde=
r-bottom-color:#f37823}.form__spinbox__button:hover .form__spinbox__butt=
on__arrow_dec{border-top-color:#f37823}.form__spinbox_disabled .form__sp=
inbox__button:hover,.form__spinbox_disabled .form__spinbox__button__arro=
w:hover{cursor:default}.form__spinbox_disabled .form__spinbox__button:ho=
ver .form__spinbox__button__arrow{border-color:#000 transparent}.form__s=
pinbox__button_top{top:0}.form__spinbox__button_bottom{bottom:0}.form__s=
pinbox__button__arrow{display:block;width:0;height:0;margin-left:3px;fon=
t:0/0 a}.form__spinbox__button__arrow_inc{margin-top:6px;border-left:4px=
solid transparent;border-right:4px solid transparent;border-bottom:4px =
solid #000}.form__spinbox__button__arrow_dec{margin-top:4px;border-left:=
4px solid transparent;border-right:4px solid transparent;border-top:4px =
solid #000}.form__top-message{position:relative;margin-bottom:24px;paddi=
ng:10px 14px 10px 38px;font-size:12px;background:#fefbd6}.form__top-mess=
age__icon{position:absolute;top:10px;left:14px;margin:0}.form__top-messa=
ge__shift{margin-bottom:0px}.form__top-message_error{color:#db130c}.form=
__top-message_ok{color:#000}.form__top-message_small-bottom-shift{margin=
-bottom:10px}.form__top-message .or_table{background-color:transparent}.=
form__top-message .oranzhe{border-left:none;padding:0}.form__message{min=
-height:18px;margin-top:4px;margin-bottom:-22px;text-align:left;line-hei=
ght:13px;font-size:11px;color:#999}.form__message_hidable{min-height:0;m=
argin-bottom:0}.form__message_error{color:#ce1900}.form__message_error-r=
eg-form-email{min-height:30px}.form__message_error-reg-form-sex{margin-t=
op:0}.form__message_example{display:none}.form__message_ok{display:none;=
margin:-5px 0 0 5px;background:url("//img.imgsmail.ru/mail/ru/images/ru/=
_sp_ico.png") 0 -957px no-repeat;height:16px;width:16px}.form__message_p=
assword-warning{color:#E9221F;font-weight:bold}.form__message_strength-0=
,.form__message_strength-1,.form__message_strength-2{display:none;margin=
:0 0 0 4px}.form__message_strength-icon{background:url("//img.imgsmail.r=
u/r/default/ico/ico__form.png") 0 0 no-repeat;display:inline-block;heigh=
t:21px;line-height:21px;padding-left:20px;position:relative;top:-1px}.fo=
rm__message_strength-0 .form__message_strength-icon{background-position:=
0 -97px}.form__message_strength-1 .form__message_strength-icon{backgroun=
d-position:0 -73px}.form__message_strength-2 .form__message_strength-ico=
n{background-position:0 -49px}.form__row_pstrength-0 .form__message_stre=
ngth-0{display:block}.form__row_pstrength-1 .form__message_strength-1{di=
splay:block}.form__row_pstrength-2 .form__message_strength-2{display:blo=
ck}.form__row_example .form__message_example{display:block}.form__row_ok=
.form__message_ok{display:block}.form__row__subwidget .form__message{mi=
n-height:0;margin-bottom:0}.form__field-status{display:inline-block;widt=
h:16px;height:16px;margin:5px 5px 0}.form__field-status_ok{background-im=
age:url("//img.imgsmail.ru/r/default/addressbook/ico/ico__form.png");bac=
kground-position:0 -120px}.form__field-status_wait{background:url("//img=
.imgsmail.ru/r/default/loader.gif") no-repeat 50% 50%}.form__checkbox{po=
sition:relative;display:block;padding-left:20px}.form__checkbox_inline{d=
isplay:inline-block;vertical-align:middle}.form__checkbox_next-bottom-ch=
eckbox{margin-top:4px}.form__checkbox__checkbox{position:absolute;left:0=
;top:3px;margin:0 !important;padding:0}.form__checkbox__label{overflow:h=
idden;line-height:19px}.form__checkbox_flat .form__checkbox__checkbox{po=
sition:absolute;opacity:0;z-index:-1}.form__checkbox_flat .form__checkbo=
x__label{margin-left:15px}.form__checkbox__icon{position:absolute;left:9=
px;top:50%;display:none}.form__checkbox_flat_checked .form__checkbox__ic=
on{display:block}.form__checkbox_flat_checked-half .form__checkbox__icon=
,.form__checkbox_flat_checked-half .form__checkbox__label{opacity:0.5}.f=
orm__sex__radio{margin-top:0;margin-left:0}.form__sex__label{line-height=
:26px;color:#666;margin-right:37px;vertical-align:middle}.form__sex_male=
,.form__sex_female{vertical-align:middle}.form__data-list{width:100%;bor=
der-bottom:1px solid #ccc;border-collapse:collapse}.form__data-list_nobo=
rder{border-bottom:none;margin-top:-3px}.form__data-list_noborder tr:fir=
st-child{border-top:none}.form__data-list__row{cursor:pointer}.form__dat=
a-list__cell{border-top:1px solid #ccc;padding:8px;vertical-align:top}.f=
orm__data-list__cell_filters{padding:0}.form__data-list__cell_filters__i=
nner{padding:8px;position:relative}.form__data-list__row:hover .form__da=
ta-list__cell{background-color:#ebf0f6}.form__data-list__row_error .form=
__data-list__cell{background-color:#ffeaea !important}.form__data-list__=
row_nohover:hover .form__data-list__cell{background-color:transparent}.f=
orm__data-list__row_noborder .form__data-list__cell{border-top:none}.for=
m__data-list__cell-draggable_notification{bottom:0px;left:0px;position:a=
bsolute;top:0px;width:8px;background:rgba(196, 196, 196, 0.196);backgrou=
nd:transparent\9;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(=
startColorstr=3D#31C4C4C4,endColorstr=3D#31C4C4C4)"\9;filter:progid:DXIm=
ageTransform.Microsoft.gradient(startColorstr=3D#31C4C4C4,endColorstr=3D=
#31C4C4C4) \9;zoom:1\9}.form__data-list__cell-draggable_notification__do=
ts{background:url("data:image/gif;base64,R0lGODlhAgAFAIABAGZmZv%2F%2F%2F=
yH5BAEAAAEALAAAAAACAAUAAAIEhBGpBQA7") repeat-y;*background:url("//img.im=
gsmail.ru/r/default/form/form__data-list__cell-draggable_notification__d=
ots.gif") repeat-y;font-size:20px;left:3px;line-height:5px;margin-top:-6=
px;position:absolute;top:50%;width:2px;height:12px;word-wrap:break-word}=
.form__data-list__cell_right{text-align:right;white-space:nowrap}.form__=
data-list__cell_narrow{width:1%;padding-left:30px;text-align:right;white=
-space:nowrap}.form__data-list_cell_short{padding:3px 5px}.form__data-li=
st__cell_with-icon{padding-top:5px;padding-left:0px;white-space:nowrap}.=
form__data-list__cell_disabled{color:#999}.form__data-list__cell_error{b=
ackground:#fce9e9}.form__data-list__cell_vertical{vertical-align:middle}=
.form__data-list__cell_snap-to-top{padding-top:0}.form__data-list__cell_=
top-shift{padding-top:13px}.form__data-list__cell_filters_top-shift{padd=
ing-top:0}.form__data-list__cell_filters_top-shift .form__data-list__cel=
l_filters__inner{padding-top:15px}.form__data-list__cell_filters_top-shi=
ft .form__data-list__cell_filters__inner .icon_form{height:12px;margin-b=
ottom:0px;margin-top:0px;width:12px}.form__data-list__cell_filters_top-s=
hift .form__data-list__cell_filters__inner .icon_form_remove_big{backgro=
und-position:-2px -385px}.form__data-list__cell_top-shift-large{padding-=
top:15px}.form__data-list__cell_filters_top-shift-large{padding-top:0}.f=
orm__data-list__cell_filters_top-shift-large .form__data-list__cell_filt=
ers__inner{padding-top:15px}.form__data-list__cell_interactive{opacity:0=
}tr:hover .form__data-list__cell_interactive{opacity:1}.form__data-list_=
_status{color:#999}.form__data-list__status-icon{background:#979797;-web=
kit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;color:whi=
te;float:left;font:12px/10px sans-serif;padding:3px 4px 2px 4px;margin-r=
ight:5px}.form__data-list__status_error{color:#e9221f}.form__data-list__=
title{display:block;padding-bottom:3px;font-size:1.2em}.form__data-list_=
_cell__block{display:block}.form__data-list__cell__title{font-size:14px}=
.form__data-list__cell__wide-block{max-width:1000px;overflow:hidden}.for=
m__data-list__cell__inner_wide-block{padding-left:15px;overflow:visible}=
.form__data-list__cell__tiny-block{max-width:345px}.form__data-list__cel=
l__nested-cell{vertical-align:top;display:inline-block;width:49%;margin-=
bottom:4px;min-width:255px;overflow:hidden;line-height:150%}.form__data-=
list__cell__phones__status__list{font-size:11px}.form__data-list__cell__=
phones__status__list__status{display:inline-block;color:#999}.form__data=
-list__cell__phones__status__list__status_error{display:inline-block;col=
or:#ce1900}.form_disabled .form__data-list__cell__phones__status__list__=
status_error{color:#999;cursor:default}@media screen and (max-width:1236=
px){.form__data-list__cell__nested-cell{width:100%}}.form__dropdown__lis=
t{position:absolute;min-width:100%;background:none repeat scroll 0 0 #FF=
FFFF;list-style-type:none;margin:0 !important;padding:0 !important;-webk=
it-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-bo=
x;border:1px solid #85b8eb;box-shadow:2px 2px 1px rgba(0, 0, 0, 0.25)}.f=
orm__dropdown__list .dropdown__list__scroll{margin-top:0}.form__dropdown=
__list_userinfo{position:absolute;right:3px;min-width:0}.form__dropdown_=
_link{cursor:pointer;text-decoration:none;white-space:nowrap;padding-lef=
t:12px;display:inline-block;min-height:14px}.form__dropdown__link:hover{=
text-decoration:none}.form__dropdown__item{color:#000 !important;display=
:block;padding:3px 20px 3px 19px;text-decoration:none;white-space:nowrap=
;text-align:left;position:relative}.form__dropdown__item_separator{borde=
r-top:1px solid #6D6E71}.form__dropdown__item__icon{width:12px;height:13=
px;position:absolute;top:3px;left:4px}.form__dropdown__item__icon_tel-vi=
sible-nobody{left:5px}.form__dropdown__item:hover{background:#ddeeff}.fo=
rm__dropdown__item .form__checkbox__label{display:block;overflow:hidden;=
text-overflow:ellipsis}.addressbook-mailru-v2 .form__dropdown__item:hove=
r{color:#fff !important;background-color:rgba(0, 0, 0, 0.6)}.form__dropd=
own__item_disabled{color:#999 !important}.form__dropdown__sort-arrow{bor=
der-color:#0857A6 transparent transparent;border-style:solid inset inset=
;border-width:4px 4px 0;display:inline-block;font-size:0;height:0;line-h=
eight:0;margin:0 0 3px 1px;width:0}a:hover .form__dropdown__sort-arrow{b=
order-top-color:#f26d00}.form__dropdown__sort-arrow_notext{border-color:=
#000 transparent transparent;margin-left:-1px}.form__calendar{position:a=
bsolute;margin-top:2px;padding:5px 10px;background:#fff;border:1px solid=
#777;box-shadow:0 0 12px rgba(0, 0, 0, 0.5);z-index:3010;max-width:200p=
x}.form__calendar__control-bar{position:relative;padding:4px 0;text-alig=
n:center;font-size:11px}.form__calendar__control,.form__calendar__contro=
l:link,.form__calendar__control:visited,.form__calendar__control:hover,.=
form__calendar__control:active,.form__calendar__control:focus{position:a=
bsolute;top:5px;padding:8px 5px}.form__calendar__control_prev{left:-2px}=
.form__calendar__control_prev:hover .form__calendar__control__arrow_left=
{border-right-color:#f37823}.form__calendar__control_next{right:-2px}.fo=
rm__calendar__control_next:hover .form__calendar__control__arrow_right{b=
order-left-color:#f37823}.form__calendar__control__arrow{display:block;m=
argin-top:-6px;width:0;height:0;font:0/0 a}.form__calendar__control__arr=
ow_left{border-top:4px solid transparent;border-right:5px solid #000;bor=
der-bottom:4px solid transparent}.form__calendar__control__arrow_right{b=
order-top:4px solid transparent;border-left:5px solid #000;border-bottom=
:4px solid transparent}.form__calendar__table{width:100%;margin-top:4px;=
border-collapse:collapse}.form__calendar__cell{padding:0;font-size:11px;=
text-align:right}.form__calendar__cell_heading{padding:3px 5px;font-weig=
ht:normal;border-bottom:1px solid #cacaca}.form__calendar__cell_today .f=
orm__calendar__link{font-weight:bold;color:#6494C8 !important}.form__cal=
endar__link,.form__calendar__link:link,.form__calendar__link:visited,.fo=
rm__calendar__link:hover,.form__calendar__link:active,.form__calendar__l=
ink:focus{display:block;padding:3px 5px;color:#000;text-decoration:none;=
text-align:right}.form__calendar__link:hover,.form__calendar__link:activ=
e,.form__calendar__link:focus{background:#ebf0f6}.form__captcha__input{w=
idth:85px;vertical-align:top}.form__captcha__input,.form__captcha-old__i=
nput{text-transform:inherit}.form__captcha__link{display:inline-block;ma=
rgin:6px 0 0 10px;vertical-align:top}.form__captcha__captcha{border-widt=
h:0;height:110px;width:190px;overflow:hidden;padding-bottom:5px}.form__r=
ow__subwidget{position:relative;margin-bottom:12px;display:block}.form__=
row__subwidget_top-margin{margin-bottom:0;margin-top:10px}.form__row__su=
bwidget_first{margin-top:0}.form__row__subwidget_inline{display:inline-b=
lock;vertical-align:middle}.form__row__subwidget_top{vertical-align:top}=
.form__row__subwidget_baseline{vertical-align:baseline}.form__row__subwi=
dget_top-icon{vertical-align:top;padding-top:13px}.form__row__subwidget_=
spacious{margin-top:10px;margin-bottom:10px}.form__row__subwidget_nowrap=
{white-space:nowrap}.form__row__subwidget_signature-remove{float:right;m=
argin-top:11px}.form__row__subwidget_short{min-width:50px}.form__row__su=
bwidget_medium{min-width:70px}.form__row__subwidget_large{min-width:148p=
x}.form__row__subwidget__control{margin-left:3px}.form__editor{width:560=
px}.form__editor__placeholder{width:542px;height:120px;padding-left:8px;=
padding-right:8px;font-size:12px;overflow:auto;cursor:pointer}.form__edi=
tor__wysiwyg{width:558px;height:102px;padding:0}.form__editor__textarea{=
height:108px;border:none;background:none}.form__editor__example{margin:5=
px 0 10px;color:#ccc;font-style:italic}.form__editor .mceToolbarRow1{vis=
ibility:visible !important}.form__editor .defaultSkin iframe{background:=
none}.form__editor .defaultSkin .mceLinkMenu,.form__editor .defaultSkin =
.mce_emotions{z-index:9999}.options__wrapper{position:relative;min-heigh=
t:360px;clear:both;-webkit-border-radius:2px;-moz-border-radius:2px;bord=
er-radius:2px}.options__wrapper_themes{min-height:380px}.options__index{=
clear:both;width:100%;margin-top:12px;border-collapse:collapse}.options_=
_index__col{width:30%;padding-right:3%;vertical-align:top}.options__inde=
x__desc{margin-top:4px;margin-bottom:15px;font-family:Tahoma, Arial, Ver=
dana, sans-serif;font-size:11px}.options__title-link{float:right;margin-=
top:6px;font:11px Tahoma,Verdana,sans-serif}.options__themes-list{paddin=
g:24px 4px 4px 24px}.options__themes-list:after{content:" ";display:bloc=
k;clear:both;line-height:0;height:0;width:0;overflow:hidden}.options__th=
emes-list__overlay{display:none;position:absolute;top:0;right:0;bottom:0=
;left:0;opacity:0.9;filter:alpha(opacity=3D90);z-index:1;-webkit-border-=
radius:2px;-moz-border-radius:2px;border-radius:2px}.options__themes-lis=
t__item,.options__themes-list__item:active,.options__themes-list__item:f=
ocus,.options__themes-list__item:link,.options__themes-list__item:visite=
d{float:left;width:122px;height:112px;padding:8px;margin-right:20px;marg=
in-bottom:20px;text-align:center;text-decoration:none;border-width:1px;b=
order-style:solid;-webkit-border-radius:3px;-moz-border-radius:3px;borde=
r-radius:3px;position:relative}.options__themes-list__item_loading{z-ind=
ex:2}.options__themes-list__item_selected:hover{cursor:default}.options_=
_themes-list__item__pic{display:block;width:120px;height:90px;margin-lef=
t:auto;margin-right:auto;border-width:1px;border-style:solid}.options__t=
hemes-list__item_loading .options__themes-list__item__pic{opacity:0.3}.o=
ptions__themes-list__item__loader{display:none;position:absolute;left:19=
px;top:85px}.options__themes-list__item_loading .options__themes-list__i=
tem__loader{display:block}.options__themes-list__item__text{position:rel=
ative;display:block;height:15px;width:122px;text-decoration:underline;ma=
rgin-top:5px;overflow:hidden;white-space:nowrap}.options__themes-list__i=
tem__text:after{position:absolute;right:0;display:block;width:14px;heigh=
t:21px;top:0;content:'';background-repeat:repeat-y;backgroun-position:0 =
0}.userinfo__link-pencil{position:relative;padding-left:17px}.userinfo__=
phones td.userinfo__phones__status{padding:0 10px 5px;color:#999}.userin=
fo__phones__value_fail{color:#999}.userinfo__phones__status__help{font-s=
ize:11px}.settings__acca-list__item{display:inline-block;white-space:now=
rap;overflow:hidden;text-overflow:ellipsis}.settings__acca-list__item_ac=
tion{width:200px}.settings__acca-list__item_time{width:120px;text-align:=
right}.settings__acca-list__item_details{color:#999;min-width:180px;max-=
width:210px;width:33%}@media screen and (min-width: 1150px){.settings__a=
cca-list__item_action{width:260px}.settings__acca-list__item_details{wid=
th:35%;max-width:270px}}@media screen and (min-width: 1240px){.settings_=
_acca-list__item_details{width:40%;max-width:500px}}.settings__acca-list=
__subregion{margin-top:19px}.settings__hint{display:none;position:absolu=
te;margin-left:2px}.settings__hint-on .settings__hint{display:inline-blo=
ck;background:url("//img.imgsmail.ru/mail/ru/images/signup/notify_sprite=
.png?1") 0 -50px no-repeat;padding-left:10px}.settings__hint span{color:=
#666666;padding:3px 5px;display:block;border:1px solid #e6e8ed;border-wi=
dth:1px 1px 1px 0;background-color:#f2f3f7;font-size:11px}.settings__the=
mes-list{padding:0 4px 4px 24px}.settings__themes-list:after{content:" "=
;display:block;clear:both;line-height:0;height:0;width:0;overflow:hidden=
}.settings__themes-list__overlay{display:none;position:absolute;top:0;ri=
ght:0;bottom:0;left:0;opacity:0.9;filter:alpha(opacity=3D90);z-index:12;=
-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.sett=
ings__themes-list__item{width:150px;height:110px;float:left;border:1px s=
olid #ccc;margin:0 16px 31px 0;text-decoration:none;position:relative;ou=
tline:none;background:transparent no-repeat center center}.settings__the=
mes-list__item:hover{box-shadow:0 12px 15px -15px black}.settings__theme=
s-list__item__loader{display:none;position:absolute;left:19px;top:85px}.=
settings__themes-list__item_loading .settings__themes-list__item__loader=
{display:block}.settings__themes-list__item__specification-background{ba=
ckground-color:#fff;opacity:0.8;-moz-opacity:0.8;filter:alpha(opacity=3D=
80)}.settings__themes-list__item__specification-background,.settings__th=
emes-list__item__specification{width:100%;height:13px;padding:4px 0 3px =
0;position:absolute;left:0;bottom:0;overflow:hidden}.settings__themes-li=
st__item__specification__new-theme{color:#d80000;margin-left:7px;float:l=
eft}.settings__themes-list__item__specification__icon{float:right}.setti=
ngs__themes-list__item_selected__marker{display:none}.settings__themes-l=
ist__item_selected__marker__bg{position:absolute;top:0;left:0;width:100%=
;height:100%;opacity:0.8;-moz-opacity:0.8;filter:alpha(opacity=3D80);bac=
kground-color:#fff;z-index:0}.settings__themes-list__item_selected__mark=
er__img{background:transparent url(//img.mail.ru/mail/ru/images/default/=
ico/marker.png) no-repeat center center;width:100%;height:100%;position:=
absolute;top:0;left:0;z-index:10}.settings__themes-list__item_selected__=
marker__loader{width:16px;height:7px;position:absolute;left:65px;top:47p=
x;padding:2px;background:white url("//img.imgsmail.ru/r/default/loader.g=
if") no-repeat center center;z-index:11;display:none}.settings__themes-l=
ist__item_selected .settings__themes-list__item_selected__marker{display=
:block}.settings__themes-type-list__item_active .icon_themes-type_popula=
r{background-position:-362px -61px}.settings__themes-type-list__item_act=
ive .icon_themes-type_temporary{background-position:-381px -61px}.settin=
gs__themes-type-list__item_active .icon_themes-type_dynamics{background-=
position:-402px -61px}.settings__themes-type-list__item_active .icon_the=
mes-type_contrast{background-position:-423px -61px}.settings__themes-typ=
e-list__item_active .icon_themes-type_all{background-position:-442px -61=
px}.settings__themes-type-list__item .icon_themes-type{margin-bottom:-2p=
x}.settings__index__userinfo{padding:19px 0px 15px;margin:0 15px 15px;bo=
rder-bottom:1px solid #ccc;display:block;text-decoration:none}.settings_=
_index__userinfo__name{font-size:18px;color:#1b5a98}.settings__index__us=
erinfo__info{font-size:12px;color:#5E6061;line-height:18px}.settings__in=
dex__item{margin:0 15px 9px;padding-top:7px;padding-right:10px;border:1p=
x solid transparent;display:block;text-decoration:none}.settings__index_=
_item:hover{border:1px solid #999;box-shadow:1px 2px 1px rgba(0, 0, 0, 0=
.1)}.settings__index__item__wrapper{float:left;max-width:400px;min-width=
:337px;width:50%}.settings__index__item__header{font-size:16px;color:#1b=
5a98}.settings__index__item__header__status{font-size:11px;color:#56b90e=
;margin-left:4px}.settings__index__item__text{font-size:13px;color:#5E60=
61}.filters__error{color:#e9221f}.filters__dropdown{position:relative}.f=
ilters__dropdown_field{width:190px}.filters__dropdown_contains{width:90p=
x}.filters__dropdown_operator{vertical-align:baseline}.filters__dropdown=
__link,.filters__dropdown__link:link,.filters__dropdown__link:visited,.f=
ilters__dropdown__link:hover,.filters__dropdown__link:active,.filters__d=
ropdown__link:focus{text-decoration:none}.filters__dropdown__menu{positi=
on:absolute}.form__checkbox_flat .filters__dropdown__shift{margin-left:2=
5px}.filters__checkbox_toggle{padding-top:3px}.filters__checkbox_toggle =
.form__checkbox__label{line-height:1em}.filters__folders-dropdown{width:=
320px;overflow:visible}.filters__folders-dropdown_popup-settings{width:3=
00px}.filters__popup-filter{padding-left:20px}.filters__condition{color:=
#5e6061}.settings__social{width:407px;margin-top:11px}.settings__social =
.form__data-list__row{cursor:default}.settings__social .form__data-list_=
_cell{border-top:0;border-bottom:1px solid #ccc;padding:11px 0;vertical-=
align:middle}.settings__social .form__data-list__cell:first-child{width:=
32px;padding-right:19px}.settings__social .form__button{margin-top:0;mar=
gin-right:0}.settings__social__control{font-size:11px}.settings__themes-=
type-list{list-style:none;margin:0 0 27px 24px;padding:0;overflow:hidden=
;height:16px}.settings__themes-type-list__item{float:left;margin-right:2=
3px;height:15px}.settings__collector__form__shift_bottom{margin-bottom:1=
px}.settings__collector__form__label_shift{text-align:left;padding-right=
:0px;width:102px}.settings__collector__form__item_shift{margin:-3px 0 0 =
-17px}.settings__collector__submit-result-message{display:none;padding:8=
px 0 3px 0;margin-bottom:22px;background-color:#EEF4D7;position:relative=
}.settings__collector__submit-result-message__icon{position:absolute;top=
:11px;left:10px;background:transparent url("//img.imgsmail.ru/mail/ru/im=
ages/ru/_sp_ico.png") no-repeat 0 -961px;width:16px;height:15px}.setting=
s__collector__submit-result-message__header{font-weight:normal;font-size=
:16px;color:#000;margin-top:7px;margin-left:32px}.settings__collector__s=
ubmit-result-message__list{list-style:none outside none;margin:0;padding=
:0 0 5px 0;line-height:17px;margin-left:32px}.settings__collector__submi=
t-result-message__list__header{padding-bottom:4px}.settings__operators{w=
idth:550px;padding-top:13px;margin-bottom:-25px;border-spacing:0}.settin=
gs__operators__cell{vertical-align:top}.settings__operators__list{list-s=
tyle-type:none;padding:0 0 21px;margin:0}.settings__operators__list__ite=
m_first{font-weight:bold}.settings__operators__list__item{color:#999}.se=
ttings__folders{width:660px}.settings__folders__link{text-decoration:non=
e}.settings__folders__link__text{text-decoration:underline;overflow:hidd=
en;max-width:300px;display:inline-block;vertical-align:top}.settings__fo=
lders__status{margin-top:2px;padding-left:8px;font-size:11px;color:#999}=
.settings__folders__status__link,.settings__folders__status__link:link,.=
settings__folders__status__link:visited{color:#999}.settings__folders__s=
tatus__link:hover,.settings__folders__status__link:active,.settings__fol=
ders__status__link:focus{color:#f26d00;text-decoration:underline}.settin=
gs__folders__shift{padding-left:22px}.settings__folders__interactive,.fo=
rm__data-list__row:hover .settings__folders__interactive{background:none=
;border:none}.settings__folders__interactive:after{content:'.';visibilit=
y:hidden}.settings__folders__controls{padding:4px;margin:4px}.msglist-lc=
ol{position:relative;margin-top:6px;padding-right:15px;border-right:1px =
solid #d5d5d5}.msglist-lcol__item{position:relative}.msglist-lcol__item_=
_link,.msglist-lcol__item__link:active,.msglist-lcol__item__link:focus,.=
msglist-lcol__item__link:hover,.msglist-lcol__item__link:link,.msglist-l=
col__item__link:visited{position:relative;display:block;margin-bottom:1p=
x;padding-top:3px;padding-bottom:3px;text-decoration:none;white-space:no=
wrap;line-height:15px;color:#0857a6}.msglist-lcol__item__link:hover,.msg=
list-lcol__item__link:hover .msglist-lcol__item__link__qnt{background:#e=
bf0f6}.msglist-lcol__item__link_act,.msglist-lcol__item__link_act:hover,=
.msglist-lcol__item__link_act:hover .msglist-lcol__item__link__qnt{backg=
round-color:#dae4ef}.msglist-lcol__item__link_sub{padding-left:39px}.msg=
list-lcol__item__link_unread{font-weight:bold}.msglist-lcol__item__link_=
_text{display:inline-block;max-width:145px;overflow:hidden;text-decorati=
on:underline;-o-text-overflow:ellipsis;text-overflow:ellipsis}.msglist-l=
col__item__link__loader,.msglist-lcol__item__link__clear_load{display:no=
ne}.msglist-lcol__item__link__clear{float:right;margin-top:2px;padding-r=
ight:4px;color:#999;font-size:11px;font-weight:normal;line-height:11px;t=
ext-decoration:underline}.msglist-lcol__item__link__clear_hover{color:#f=
26d00;text-decoration:none}.msglist-lcol__item__link__loader_load{displa=
y:block;position:absolute;right:4px;top:8px}.msglist-lcol__item__link__q=
nt{float:right;margin-left:10px;margin-top:2px;padding:0 4px 1px;backgro=
und:#dae4ef;-webkit-border-radius:2px;-moz-border-radius:2px;border-radi=
us:2px;color:#0857a6;font-size:10px;font-family:Tahoma,Arial,Verdana,san=
s-serif;line-height:11px}.leftcol{position:relative;margin-top:6px;borde=
r-style:solid;padding-right:9px;background-repeat:repeat;background-posi=
tion:0 0}.leftcol__sep-wrapper{border-style:solid;padding-right:9px;padd=
ing-bottom:1px;background-repeat:repeat;background-position:0 0}.leftcol=
__sep{margin-bottom:7px;padding-bottom:8px;border-bottom-style:solid}.le=
ftcol__banners__promobox{margin-top:-1px;padding:5px;border:1px solid;bo=
rder-color:transparent #d5d5d5 transparent transparent;background:#fff}.=
leftcol__banners__promobox__wrapper{border-top:1px solid #d5d5d5}.leftco=
l__banners__promobox-list{padding:5px;border:1px solid;border-color:tran=
sparent #d5d5d5 transparent transparent;background:#fff}.leftcol__banner=
s__promobox-list__wrapper{padding-top:12px;border-top:1px solid #d5d5d5;=
border-bottom:1px solid #d5d5d5}.leftcol__banners__promobox-list__title{=
padding-left:9px;font-size:14px;font-weight:bold}.page__leftcol .rb_bann=
er{margin-top:11px;margin-bottom:11px}.page__leftcol .rb_regplashka{marg=
in-top:11px;margin-bottom:-11px}.leftcol__banners__separator{margin:-1px=
5px 0;border-top-size:1px;border-top-style:solid}.leftcol__snapping-wra=
pper{overflow:hidden}.leftcol__snapping-panel{margin-top:0;overflow:hidd=
en}.leftcol__snapping-panel > *{display:none}.leftcol__snapping-panel_fl=
oating > *{display:block}.leftcol__snapping-panel_floating{position:fixe=
d;top:0;margin-top:0;width:230px;z-index:10000}.leftcol__banner_collecto=
r{background:url(https://img.imgsmail.ru/r/default/ico/ico__settings__in=
dex.png) no-repeat 17px -560px;display:block;font-size:12px;padding-top:=
7px;padding-left:95px;line-height:16px;overflow:hidden;text-decoration:n=
one;width:100%;height:50px}.rb_QuestionsDiv,.rb_AnswersDiv{padding-top:8=
px !important;padding-bottom:8px !important;border-style:solid;backgroun=
d-repeat:repeat;background-position:0 0}.rb_QuestionsDiv form{padding-to=
p:10px;padding-bottom:15px;padding-left:8px;border-top-style:solid;borde=
r-bottom-style:solid}.rb_QuestionsDiv h2,.rb_AnswersDiv h2{margin:0 0 8p=
x;font-size:14px}.rb_voteL{position:relative;margin-top:8px;padding-left=
:19px}.rb_voteI{position:absolute;top:-2px;margin-left:-18px}.rb_voteP{m=
argin:0;border-top:0}.rb_voteB{margin:0}.menu__header{position:relative;=
margin-bottom:1px}.menu__header__text{position:relative;display:block;pa=
dding-top:3px;padding-bottom:3px;text-decoration:none;line-height:15px}.=
menu__item{position:relative;margin-bottom:1px;overflow:hidden;-webkit-u=
ser-select:none;-moz-user-select:none;-ms-user-select:none;user-select:n=
one}.menu__item_backlink{padding-top:4px;font-weight:bold}.menu__item__h=
r{display:block;height:1px;margin:7px 0px;list-style:none;overflow:hidde=
n}.menu__item__link,.menu__item__link:active,.menu__item__link:focus,.me=
nu__item__link:hover,.menu__item__link:link,.menu__item__link:visited{po=
sition:relative;display:block;padding-top:4px;padding-bottom:4px;text-de=
coration:none;line-height:15px}.addressbook-mailru-v2 .menu__item__link,=
.addressbook-mailru-v2 .menu__item__link:active,.addressbook-mailru-v2 .=
menu__item__link:focus,.addressbook-mailru-v2 .menu__item__link:hover,.a=
ddressbook-mailru-v2 .menu__item__link:link,.addressbook-mailru-v2 .menu=
__item__link:visited{margin-bottom:2px;padding-top:4px;padding-right:10p=
x;padding-bottom:2px;padding-left:35px}.menu__item__link_sub{padding-lef=
t:39px}.menu__item__link_unread{font-weight:bold}.menu__item__link__text=
{display:inline-block;vertical-align:middle;text-decoration:none}.menu__=
item__link:hover .menu__item__link__text{text-decoration:none}.menu__ite=
m__link__text_multiline{padding-left:8px;padding-right:8px}.menu__item__=
link__text_linear{max-width:145px;overflow:hidden;white-space:nowrap;hei=
ght:16px;overflow:hidden}.menu__item__link__text_linear:after{position:a=
bsolute;right:58px;display:block;width:14px;height:21px;top:0;content:''=
;background-repeat:repeat-y;background-position:0 0}.menu__item__link_su=
b .menu__item__link__text_linear{max-width:133px}.menu__item__link__text=
_act{font-weight:bold;text-decoration:none}.menu__item__link__loader,.me=
nu__item__link__clear_load{display:none}.menu__item__link__clear{positio=
n:relative;z-index:1;float:right;margin-top:2px;padding-right:4px;font-s=
ize:11px;font-weight:normal;line-height:11px;text-decoration:underline;c=
ursor:pointer}.menu__item__link__clear_hover{text-decoration:none}.menu_=
_item__link__loader_load{display:block;position:absolute;right:4px;top:8=
px}.menu__item__link__qnt{float:right;height:14px;margin-left:10px;margi=
n-top:0;padding:1px 4px 1px;-webkit-border-radius:2px;-moz-border-radius=
:2px;border-radius:2px;font-size:11px;font-family:Tahoma,Arial,Verdana,s=
ans-serif;font-weight:bold;line-height:14px}.addressbook-mailru-v2 .menu=
__item__link__qnt{font-family:Arial}.menu__item__link__qnt_clear{font-we=
ight:normal;background-color:transparent !important}.menu__item__slink,.=
menu__item__slink:active,.menu__item__slink:focus,.menu__item__slink:hov=
er,.menu__item__slink:link,.menu__item__slink:visited{position:relative;=
display:inline-block;padding-top:3px;padding-bottom:3px;line-height:15px=
;text-decoration:none}.menu__item__slink__text{vertical-align:middle;tex=
t-decoration:underline}.menu__item__slink:hover .menu__item__slink__text=
{text-decoration:none}span.menu__item__link .icon{cursor:default}.menu__=
option{padding:3px 0 4px 27px;white-space:nowrap;line-height:15px}.menu_=
_option__link,.menu__option__link:active,.menu__option__link:link,.menu_=
_option__link:focus,.menu__option__link:hover,.menu__option__link:visite=
d{font-size:11px;font-family:Tahoma,Arial,Verdana,sans-serif}.menu__opti=
on__link_dotted{text-decoration:none;border-bottom:1px dotted}.menu__ite=
m__link_scroll-up .menu__item__link__text{text-decoration:underline}.men=
u__item__link_scroll-up{cursor:pointer}.w-mail-box .menu__item{margin-bo=
ttom:0}.w-mail-box .menu__item__link,.w-mail-box .menu__item__link:activ=
e,.w-mail-box .menu__item__link:focus,.w-mail-box .menu__item__link:hove=
r,.w-mail-box .menu__item__link:link,.w-mail-box .menu__item__link:visit=
ed{margin-bottom:1px}.mail-box__line{position:relative;display:block;pad=
ding-top:4px;padding-bottom:4px;text-decoration:none;line-height:15px;fo=
nt-size:11px;text-transform:uppercase;cursor:pointer}.mail-box__name{max=
-width:160px}.mail-box__name:after{right:42px}.mail-box__info{position:a=
bsolute;right:0}.mail-box__info_new_letter{display:block;padding:0 5px;h=
eight:16px;line-height:16px;color:#fff;background:#ffa821;-webkit-border=
-radius:2px;-moz-border-radius:2px;border-radius:2px}.mail-box__info_ico=
n_create{display:block;width:16px;height:16px;font:0px/0 a;overflow:hidd=
en;background:url("//img.imgsmail.ru/r/default/loader.gif") no-repeat 50=
% 50%}.mail-box__info_icon_error{display:block;width:16px;height:16px;fo=
nt:0px/0 a;overflow:hidden;cursor:pointer;background:url("//img.imgsmail=
.ru/r/themes/default/icons.245.png") no-repeat 0 -60px}.mail-box__info_i=
con_pause{display:block;width:16px;height:16px;font:0px/0 a;overflow:hid=
den;background:url("//img.imgsmail.ru/r/default/ico/ico__mail-box_pause.=
png") no-repeat 0 0}.mail-box__arrow{display:block;width:24px;height:17p=
x;text-align:center;position:absolute;top:0;left:0;padding-top:7px}.mail=
-box__arrow .dropdown__arrow{border-top:solid 4px transparent;border-bot=
tom:solid 4px transparent;border-right:0 none;border-left-width:4px;bord=
er-left-style:solid}.mail-box___option_link{display:inline-block;font-si=
ze:11px;font-family:Tahoma,Arial,Verdana,sans-serif;border-bottom-width:=
1px;border-bottom-style:dotted;cursor:pointer}.mail-box_fade{background:=
url("//img.imgsmail.ru/r/default/mail-box/mail-box_fade.gif") repeat 0 0=
}.mail-box_fade .menu__item__link__text_linear:after{background:none}.ma=
il-box_open + .mail-box_close,.mail-box_open .mail-box__line{border-top-=
width:1px;border-top-style:solid}.mail-box_open + .mail-box_close{margin=
-top:7px;padding-top:4px}.mail-box_open .mail-box__line{padding-top:8px}=
.mail-box_open:first-child .mail-box__line{padding-top:3px;border-top:1p=
x solid transparent}.mail-box_close + .mail-box_open{margin-top:2px}.mai=
l-box_open .mail-box_fade,.mail-box_create .mail-box_fade,.mail-box_erro=
r .mail-box_fade{background:none !important}.mail-box_open .menu__item__=
link__qnt_collector{display:none}.mail-box_open .mail-box__arrow{padding=
-top:14px;height:15px}.mail-box_open:first-child .mail-box__arrow{paddin=
g-top:9px}.mail-box_open .mail-box__arrow .dropdown__arrow{border-top-wi=
dth:4px;border-top-style:solid;border-bottom:0 none;border-left:solid 4p=
x transparent;border-right:solid 4px transparent}.mail-box_open .mail-bo=
x__name{max-width:202px}.mail-box_open .mail-box__name:after{right:1px}.=
backlink{padding-top:9px;font-weight:bold}.backlink__icon{display:inline=
-block}.infobar{padding:4px 7px;border-bottom-width:1px;border-bottom-st=
yle:solid;clear:left;overflow:hidden}.infobar__clear-folder{position:abs=
olute;left:64px}.infobar__icon{position:absolute;top:28px;left:16px}.inf=
obar__emphasis{color:#333}.infobar_folder-description{position:relative;=
*zoom:1;padding:10px 16px 10px 271px;color:#666}.messagelist_simple .inf=
obar_folder-description{padding-left:226px}.infobar_passrecovery{positio=
n:relative;*zoom:1;margin-bottom:30px;padding:12px 63px;line-height:20px=
;color:#010101}.infobar_warning{position:relative;*zoom:1;padding:10px 1=
0px 10px 36px;line-height:16px;color:#666}.infobar__icon_warning{top:18p=
x;left:12px}.infobar_draft{position:relative;*zoom:1;padding:10px;line-h=
eight:16px;text-align:center}.infobar_caution{background:#ea654f;color:#=
fff;border-bottom-color:#fae0dc}.infobar_caution a:hover{color:#fff}.pro=
mobox{position:relative;margin-top:20px;margin-bottom:15px;background:#f=
ff;border:1px solid #ccc}.promobox__link,.promobox__link:active,.promobo=
x__link:focus,.promobox__link:hover,.promobox__link:link,.promobox__link=
:visited{display:block;position:relative;padding:9px 8px 12px 70px;color=
:#58595b;line-height:18px;text-decoration:none}.promobox__link__u{color:=
#0857a6}.promobox__link__u:hover{color:#f26d00;text-decoration:none}.pro=
mobox__link_wot,.promobox__link_wot:active,.promobox__link_wot:focus,.pr=
omobox__link_wot:hover,.promobox__link_wot:link,.promobox__link_wot:visi=
ted{padding-left:100px}.promobox__link_themes,.promobox__link_themes:act=
ive,.promobox__link_themes:focus,.promobox__link_themes:hover,.promobox_=
_link_themes:link,.promobox__link_themes:visited{height:54px;padding:3px=
8px 0 83px;line-height:16px}.promobox__link_twitter,.promobox__link_twi=
tter:active,.promobox__link_twitter:focus,.promobox__link_twitter:hover,=
.promobox__link_twitter:link,.promobox__link_twitter:visited{padding-lef=
t:93px}.promobox__link_vk,.promobox__link_vk:active,.promobox__link_vk:f=
ocus,.promobox__link_vk:hover,.promobox__link_vk:link,.promobox__link_vk=
:visited{padding-left:67px}.promobox-rb{position:relative;margin-top:9px=
;margin-bottom:9px;padding-top:5px;padding-left:9px;border-top:1px solid=
#d5d5d5}.promobox-rb__pic{position:relative;display:block;float:left;wi=
dth:75px;margin-top:-9px;margin-right:10px}.promobox-rb__pic_top{margin-=
top:0}.promobox-rb__link,.promobox-rb__link:active,.promobox-rb__link:fo=
cus,.promobox-rb__link:hover,.promobox-rb__link:link,.promobox-rb__link:=
visited{display:block;position:relative;padding:9px 9px 4px 0;color:#585=
95b;line-height:16px;text-decoration:none}.promobox-rb__link__u{color:#0=
857a6}.promobox-rb__link__u:hover{color:#f26d00;text-decoration:none}.pr=
omobox-rb:before,.promobox-rb:after{content:"";display:table}.promobox-r=
b:after{clear:both}.pre-foot{clear:both;padding-top:20px;padding-bottom:=
20px;text-align:center}.mailbox-size{margin-bottom:2px;font-size:11px;te=
xt-align:center}.mailbox-size__scale{display:inline-block;width:137px;he=
ight:11px;vertical-align:middle;border-width:1px;border-style:solid;text=
-align:left}.mailbox-size__scale__fill{display:block;height:11px}.infobo=
x-lcol{position:relative;margin-bottom:5px;padding:7px 10px 10px 64px;bo=
rder:1px solid #ccc;background:url("//img.imgsmail.ru/r/support_flag.gif=
") no-repeat 12px 7px white}.kav-protected{position:relative;display:inl=
ine-block;padding-top:10px;font-size:11px;text-align:center}.search__wra=
pper{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;=
padding:10px}.header_external-viewer{-webkit-border-radius:0;-moz-border=
-radius:0;border-radius:0;border-radius:0}.header__logo_external-viewer{=
width:160px}.button-a_external-viewer,.button-a_external-viewer:active,.=
button-a_external-viewer:focus,.button-a_external-viewer:hover,.button-a=
_external-viewer:link,.button-a_external-viewer:visited{position:absolut=
e;top:9px;right:4px}.external-viewer__header__text{margin-left:165px;mar=
gin-right:100px;padding-top:10px;color:#fff;font-size:16px;text-align:ce=
nter}.external-viewer__header__text__link,.external-viewer__header__text=
__link:active,.external-viewer__header__text__link:focus,.external-viewe=
r__header__text__link:hover,.external-viewer__header__text__link:link,.e=
xternal-viewer__header__text__link:visited{display:inline-block;max-widt=
h:65%;height:22px;margin-right:8px;color:#fff;font-weight:bold;overflow:=
hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;line-height:20px=
}.external-viewer__header__text__logo{padding-right:128px;display:inline=
-block;height:22px;background:url("//img.imgsmail.ru/r/default/external-=
viewer/external-viewer__logo.png") right 0 no-repeat;overflow:hidden;lin=
e-height:20px}.external-viewer__frame{top:41px;left:0;right:0;bottom:0}.=
external-viewer__frame__iframe{position:absolute;top:0px;left:0px;right:=
0px;bottom:0px;min-height:450px;min-width:640px;width:100%;height:100%}.=
footer{position:relative;clear:both;width:100%;height:28px;margin-bottom=
:32px;background-repeat:repeat-x;-webkit-border-radius:2px;-moz-border-r=
adius:2px;border-radius:2px}.page .footer_portal-footer{background:none}=
.footer__links,.footer__links__link,.footer__links__link:link,.footer__l=
inks__link:visited,.footer__links__link:hover,.footer__links__link:activ=
e,.footer__links__link:focus{font-size:11px;line-height:14px}.footer__li=
nks__link_self,.footer__links__link_self:link,.footer__links__link_self:=
visited,.footer__links__link_self:hover,.footer__links__link_self:active=
,.footer__links__link_self:focus{display:inline-block;line-height:12px;t=
ext-decoration:none;border-bottom-width:1px;border-bottom-style:dotted}.=
footer__links{display:inline-block;padding-top:6px;padding-bottom:0;padd=
ing-left:25px}.footer__links_right{position:absolute;top:0;right:0;paddi=
ng-right:25px}.footer__theme-link{display:none;position:absolute}.conten=
t__header{position:relative}.content__header__title{margin:5px 0 5px 1px=
;padding:0;font-size:18px;line-height:18px;font-weight:bold;color:#000}.=
addressbook-mailru-v2 .b-letter__head .content__header__title{font-weigh=
t:normal;font-size:22px;color:#333}.content__header__title_under-advert{=
display:block;float:left;height:22px;margin:7px 11px 0 0;font-size:17px;=
line-height:17px;overflow:hidden;white-space:nowrap;vertical-align:middl=
e;-o-text-overflow:ellipsis;text-overflow:ellipsis}.content__header__tit=
le_under-advert__icon{line-height:28px}.content__header__help{position:a=
bsolute;top:4px;right:1px}.content__page{position:relative;min-height:36=
0px;border-radius:2px}.content__page.content__page_view{padding:30px 25p=
x;line-height:140%}.content__page_themes{min-height:380px}.content__page=
.popup__controls_align-with-controls{padding-left:147px;background:none=
;border:0}.content__page-header{padding:10px 0;color:#999}.content__page=
-header__color_unset{color:#000}.content__page__two-columns{margin-left:=
100px;overflow:hidden;max-width:880px}.content__page__two-columns_clear{=
margin-left:0}.content__page__third-column{margin-right:-100px;float:lef=
t;padding:14px 0;width:100px}.content__page__two-columns__item{float:lef=
t}.content__page__two-columns__item_left{width:54%}.content__page__two-c=
olumns__item_right{width:46%}.content__page__subtitle{font-size:14px;fon=
t-weight:bold}.content__page__link{cursor:pointer}.content__page__link:h=
over{text-decoration:underline}.content__page{position:relative;min-heig=
ht:360px;border-radius:2px}.content__page.content__page_view{padding:30p=
x 25px;line-height:140%}.content__page_themes{min-height:380px}.content_=
_page .popup__controls_align-with-controls{padding-left:147px;background=
:none;border:0}.content__page-header{padding:10px 0;color:#999}.content_=
_page-header__color_unset{color:#000}.content__page__two-columns{margin-=
left:100px;overflow:hidden;max-width:880px}.content__page__two-columns_c=
lear{margin-left:0}.content__page__third-column{margin-right:-100px;floa=
t:left;padding:14px 0;width:100px}.content__page__two-columns__item{floa=
t:left}.content__page__two-columns__item_left{width:54%}.content__page__=
two-columns__item_right{width:46%}.content__page__subtitle{font-size:14p=
x;font-weight:bold}.content__page__link{cursor:pointer}.content__page__l=
ink:hover{text-decoration:underline}.toolbar{position:relative;clear:lef=
t;height:24px;padding:5px 7px 4px 8px;z-index:20}.toolbar_corner-top{-we=
bkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-rad=
ius:3px 3px 0 0}.toolbar__right{position:absolute;right:7px;z-index:21}.=
toolbar__buttons{display:inline-block;vertical-align:middle;white-space:=
nowrap}.toolbar__icons{position:relative;top:3px}.toolbar__message{displ=
ay:inline-block;margin-left:5px}.toolbar_with-alphabet{height:56px}.tool=
bar__alphabet{top:4px;margin:0 -7px 0 -8px;padding:0 34px;position:relat=
ive;z-index:1}.addressbook-mailru-v2 .toolbar__alphabet{margin:0}.toolba=
r__alphabet__list_wrapper{height:32px;overflow:hidden;position:relative}=
.toolbar__alphabet__letter{display:inline-block;font-size:10px;height:32=
px;width:8px;line-height:32px;outline:0 none;padding:0 7px;position:rela=
tive;text-align:center;text-decoration:none;white-space:nowrap}.toolbar_=
_alphabet__letter_prev,.toolbar__alphabet__letter_next{position:absolute=
}.toolbar__alphabet__letter_prev{padding:0 8px 0 6px}.toolbar__alphabet_=
_letter_next{padding:0 6px 0 8px}.toolbar__alphabet__arrow{display:inlin=
e-block;font:0px/0 a;height:1px;margin:11px 0 0;overflow:hidden;width:1p=
x}.toolbar__alphabet__arrow_left{border-top:4px solid transparent;border=
-bottom:4px solid transparent;border-right-style:solid;border-right-widt=
h:4px}.toolbar__alphabet__arrow_right{border-top:4px solid transparent;b=
order-bottom:4px solid transparent;border-left-style:solid;border-left-w=
idth:4px}.toolbar__alphaber__arrow__inner{content:"";display:block;heigh=
t:1px;overflow:hidden;width:1px}.toolbar__alphabet__letter_prev{left:12p=
x}.toolbar__alphabet__letter_next{right:12px}.toolbar__alphabet__letter_=
available{cursor:pointer}.toolbar-wrapper-snapping_floating{position:fix=
ed;top:0;z-index:9999;width:90%;min-width:960px;padding:0;margin:0 auto;=
left:0;right:0;-webkit-transition:top 0.25s cubic-bezier(0.215, 0.61, 0.=
355, 1);-moz-transition:top 0.25s cubic-bezier(0.215, 0.61, 0.355, 1);-o=
-transition:top 0.25s cubic-bezier(0.215, 0.61, 0.355, 1);transition:top=
0.25s cubic-bezier(0.215, 0.61, 0.355, 1)}.toolbar-wrapper-snapping_flo=
ating .toolbar{margin-left:264px;box-shadow:0 2px 2px rgba(0, 0, 0, 0.15=
);border-bottom:none}.toolbar-wrapper-snapping_quicklist{padding-left:0;=
width:100%}.toolbar-wrapper-snapping_quicklist .toolbar{margin-left:0}.t=
oolbar__tool{margin-right:5px}.toolbar__tool_right{margin-right:0;margin=
-left:5px}@media (max-width: 1100px){.toolbar-addressbook__dropdown__but=
ton_sort{background:red;display:none !important}}.dropdown{display:inlin=
e-block;vertical-align:middle;white-space:nowrap;position:relative;-webk=
it-user-select:none;-moz-user-select:none;-ms-user-select:none;user-sele=
ct:none}.dropdown_inline{vertical-align:baseline}.dropdown__checkbox,.dr=
opdown__checkbox:active,.dropdown__checkbox:focus,.dropdown__checkbox:ho=
ver,.dropdown__checkbox:link,.dropdown__checkbox:visited{display:inline-=
block;position:relative;width:23px;height:21px;margin-right:7px}.dropdow=
n__checkbox__input{position:absolute;display:block;top:4px;left:3px;z-in=
dex:1;margin-top:0;padding:0}.dropdown__button-inline,.dropdown__button-=
inline:active,.dropdown__button-inline:focus,.dropdown__button-inline:li=
nk,.dropdown__button-inline:visited,.dropdown__button-inline:hover{displ=
ay:block;vertical-align:top;cursor:pointer}.dropdown__button,.dropdown__=
button:active,.dropdown__button:focus,.dropdown__button:link,.dropdown__=
button:visited,.dropdown__button:hover{display:block;height:22px;padding=
:1px 5px 1px 5px;border:0;line-height:19px;vertical-align:top;cursor:poi=
nter}.dropdown__button:hover{padding:0 4px 0 4px;border-width:1px;border=
-style:solid;-webkit-border-radius:2px;-moz-border-radius:2px;border-rad=
ius:2px}.dropdown_disabled .dropdown__button:hover{cursor:default;paddin=
g:1px 5px 1px 5px;border:0}.dropdown__button-inline__text{border-bottom-=
width:1px;border-bottom-style:dotted;text-decoration:none}.dropdown__but=
ton__text{display:inline-block;height:17px;margin-bottom:3px;border-bott=
om-width:1px;border-bottom-style:dotted;text-decoration:none}.dropdown__=
arrow{display:inline-block;width:1px;height:1px;overflow:hidden;margin:0=
;border-top-width:3px;border-top-style:solid;border-right:solid 3px tran=
sparent;border-left:solid 3px transparent;font:0/0 a}.dropdown__arrow_ri=
ght{display:inline-block;width:1px;height:1px;overflow:hidden;margin:0;b=
order-left:4px solid #000;border-top:solid 4px transparent;border-bottom=
:solid 4px transparent;font:0/0 a}.dropdown__arrow__inner{content:'';dis=
play:block;width:1px;height:1px;overflow:hidden}.dropdown__arrow_checkbo=
x{position:absolute;top:9px;right:5px}.dropdown__icon_list{width:8px;ove=
rflow:hidden;border-style:solid;border-width:1px 0;display:block;padding=
:2px 0;position:absolute;top:6px}.dropdown__icon__inner_list{overflow:hi=
dden;height:1px;display:block}.dropdown__list{display:none;position:abso=
lute;z-index:100;top:24px;margin:1px 0 0;padding:5px 0 3px;min-width:100=
px;max-width:227px;border-width:1px;border-style:solid;-webkit-border-ra=
dius:2px;-moz-border-radius:2px;border-radius:2px;font:12px Arial, Tahom=
a, sans-serif;text-align:left}.dropdown__list_bottom{top:auto;bottom:28p=
x}.dropdown__list__item__link,.dropdown__list__item__link:active,.dropdo=
wn__list__item__link:focus,.dropdown__list__item__link:link,.dropdown__l=
ist__item__link:visited,.dropdown__list__item__link:hover{display:block;=
position:relative;padding:3px 23px 4px 6px;line-height:14px;white-space:=
nowrap;text-decoration:none;cursor:pointer;-o-text-overflow:ellipsis;tex=
t-overflow:ellipsis}.dropdown__list__item__link_dynamic{max-width:200px;=
overflow:hidden}.dropdown__list__item_sub .dropdown__list__item__link,.d=
ropdown__list__item_sub .dropdown__list__item__link:active,.dropdown__li=
st__item_sub .dropdown__list__item__link:focus,.dropdown__list__item_sub=
.dropdown__list__item__link:link,.dropdown__list__item_sub .dropdown__l=
ist__item__link:visited,.dropdown__list__item_sub .dropdown__list__item_=
_link:hover{padding-left:20px}.dropdown__list__item_sub .dropdown__list_=
_item__link_dynamic{max-width:186px}.dropdown__list_disabled .dropdown__=
list__item__link,.dropdown__list_disabled .dropdown__list__item__link:ac=
tive,.dropdown__list_disabled .dropdown__list__item__link:focus,.dropdow=
n__list_disabled .dropdown__list__item__link:link,.dropdown__list_disabl=
ed .dropdown__list__item__link:visited,.dropdown__list_disabled .dropdow=
n__list__item__link:hover,.dropdown__list__item_disabled .dropdown__list=
__item__link,.dropdown__list__item_disabled .dropdown__list__item__link:=
active,.dropdown__list__item_disabled .dropdown__list__item__link:focus,=
.dropdown__list__item_disabled .dropdown__list__item__link:link,.dropdow=
n__list__item_disabled .dropdown__list__item__link:visited,.dropdown__li=
st__item_disabled .dropdown__list__item__link:hover{background:none;curs=
or:default}.dropdown__list__item__more{white-space:normal;max-width:221p=
x;margin:-2px 3px 3px;padding:1px 2px 3px;overflow-x:hidden}.dropdown__l=
ist__item__more_note{white-space:nowrap}.dropdown__list__item__link_sele=
cted,.dropdown__list__item__link_selected:active,.dropdown__list__item__=
link_selected:focus,.dropdown__list__item__link_selected:link,.dropdown_=
_list__item__link_selected:visited,.dropdown__list__item__link_selected:=
hover{cursor:default}.dropdown__list__item__link .icon{display:none;curs=
or:default}.dropdown__list__item__link_selected .icon{display:block}.dro=
pdown__list__item__link_with-icon-left,.dropdown__list__item__link_with-=
icon-left:link,.dropdown__list__item__link_with-icon-left:hover,.dropdow=
n__list__item__link_with-icon-left:visited,.dropdown__list__item__link_w=
ith-icon-left:active{padding-left:27px;padding-right:6px;position:relati=
ve}.dropdown__list__item__icon{position:absolute;top:50%}.dropdown__list=
__item__icon_left{left:6px}.dropdown__list__item__link_selected-half{opa=
city:0.5}.dropdown__list__item__link .icon.dropdown__list__item__icon_al=
ways-show{display:block}.dropdown__list__hr{list-style:none;display:bloc=
k;margin:3px 0;height:1px;overflow:hidden;font:0/0 a}.dropdown__list__sc=
roll{position:relative;margin-top:-5px;padding:5px 0 3px;max-height:144p=
x;overflow:auto;border-bottom-width:1px;border-bottom-style:solid;overfl=
ow-y:auto;overflow-x:hidden}.dropdown__list__scroll-without-border{borde=
r-bottom:none}.dropdown__list__top{padding:3px 0;margin-top:-3px}.dropdo=
wn__list__bottom{padding:3px 0;margin-bottom:-3px}.dropdown__list__new-i=
tem{padding:7px 4px 7px 19px;margin-bottom:-3px}.dropdown__list__new-ite=
m__input{height:14px;vertical-align:middle;display:inline-block}.dropdow=
n__list__new-item__button{margin-left:4px;vertical-align:middle}.dropdow=
n__list__new-item .form__message_error{white-space:normal}.dropdown__lis=
t__action{padding:7px 4px 7px 19px;margin-bottom:-3px;background-color:#=
e5ecf2}.dropdown__list_multiselect{max-width:none}.dropdown__list_multis=
elect .dropdown__list__item__link_selected,.dropdown__list_multiselect .=
dropdown__list__item__link_selected:active,.dropdown__list_multiselect .=
dropdown__list__item__link_selected:focus,.dropdown__list_multiselect .d=
ropdown__list__item__link_selected:link,.dropdown__list_multiselect .dro=
pdown__list__item__link_selected:visited,.dropdown__list_multiselect .dr=
opdown__list__item__link_selected:hover{cursor:pointer}.dropdown__list_m=
ultiselect .dropdown__list__item__link_selected .icon{display:inline-blo=
ck}.dropdown__list .compose__uploader__input_wrap{display:block}.dropdow=
n-switch-labels__text{display:inline-block;height:15px;vertical-align:mi=
ddle;margin:0 0 0 1em}.addressbook-mailru-v2 .dropdown-labels__form{marg=
in:0 -10px -11px}.balloon{position:absolute;width:225px;overflow:hidden;=
color:#000;font:12px/1.25 Arial, Helvetica, sans-serif;z-index:200;white=
-space:normal}.balloon__icon{position:absolute;right:14px;top:22px;heigh=
t:9px;width:9px;overflow:hidden;line-height:9px}.balloon__icon i{positio=
n:absolute;top:0;left:0;height:9px;width:9px;overflow:hidden;background:=
url("//img.imgsmail.ru/r/ru/close.png") no-repeat 0 0;cursor:pointer}.ba=
lloon__i{overflow:hidden;position:relative}.balloon__content{background:=
#fff;margin:0 7px;padding:9px 20px 9px 10px}.balloon__content_filesearch=
_experiment .icon_filesearch{background-image:url("//img.imgsmail.ru/r/d=
efault/ico/ico__balloons_attachviewer.png");width:49px;height:50px;margi=
n:-18px 0 0 -5px}.balloon__content_icon{float:left;padding:0 10px 0 0}.b=
alloon__wrap__medialine .icon-wrap{padding-top:0}.balloon__collector_fol=
der-list{position:absolute;margin:15px 0px 0 47px}.balloon__t,.balloon__=
b{height:20px;position:relative;z-index:3}.balloon__cn{position:absolute=
;height:20px;width:100%;top:0;left:0;background:url("//img.imgsmail.ru/r=
/default/balloon/baloon.png") no-repeat 0 0}.balloon__cn_tl{margin:0 0 0=
-45px}.balloon__cn_tr{left:-45px;width:45px;margin:0 0 0 100%}.balloon_=
_cn_bl{margin:0 0 0 -45px;background-position:0 -59px}.balloon__cn_br{le=
ft:-45px;width:45px;margin:0 0 0 100%;background-position:0 -20px}.ballo=
on__cn_tc{display:none;left:50%;width:20px;background-position:0 -78px}.=
balloon__sh{position:absolute;left:0;top:0;width:7px;height:700px;backgr=
ound:url("//img.imgsmail.ru/r/default/balloon/baloon_left.png") no-repea=
t 0 0}.balloon__sh_r{left:-7px;margin:0 0 0 100%;background-position:-7p=
x 0}.balloon_tr .balloon__cn_tl,.balloon_tr .balloon__cn_tr{background-p=
osition:0 -39px}.balloon_bl .balloon__cn_tl{background-position:0 -39px}=
.balloon_bl .balloon__cn_bl{background-position:0 -20px}.balloon_br .bal=
loon__cn_tl{background-position:0 -39px}.balloon_br .balloon__cn_br{back=
ground-position:0 -59px}.balloon_tc .balloon__cn_tl{background-position:=
0 -39px}.balloon_tc .balloon__cn_tr{background-position:0 0}.balloon_tc =
.balloon__cn_tc{display:block}.balloon__message{overflow:hidden;zoom:1}.=
balloon__message .balloon__message__head{margin-bottom:0.2em;font-weight=
:bold}.balloon__message .balloon__message__text{margin-bottom:0.2em}.bal=
loon__message__list{margin:0;padding:0 10px 0 40px}.balloon__message__li=
st__item{margin:0;padding:0 0 10px 0}.paging{display:block;text-align:ri=
ght;white-space:nowrap;font:13px Tahoma, sans-serif;margin:6px 4px -1px =
0}.paging_top{float:right}.paging_bottom{position:absolute;right:0;margi=
n:10px 4px 0 0}.paging__item,.paging__item:active,.paging__item:focus,.p=
aging__item:hover,.paging__item:link,.paging__item:visited{display:inlin=
e-block;margin:0 1px 2px;padding:2px 5px 3px;vertical-align:middle}.pagi=
ng__item:hover{text-decoration:none}.paging__item_selected{-webkit-borde=
r-radius:2px;-moz-border-radius:2px;border-radius:2px;font-weight:700}.p=
aging__item_disabled,.paging__item_disabled:active,.paging__item_disable=
d:focus,.paging__item_disabled:hover,.paging__item_disabled:link,.paging=
__item_disabled:visited{text-decoration:none;cursor:default}.paging__ite=
m_prev,.paging__item_prev:link,.paging__item_prev:visited,.paging__item_=
prev:hover,.paging__item_prev:active,.paging__item_prev:focus{margin-rig=
ht:5px;padding:0}.paging__item_next,.paging__item_next:link,.paging__ite=
m_next:visited,.paging__item_next:hover,.paging__item_next:active,.pagin=
g__item_next:focus{margin-left:3px;padding:0}.paging_ltr{float:left;marg=
in:5px 0 0;text-align:left}.paging_ltr .paging__item,.paging_ltr .paging=
__item:link,.paging_ltr .paging__item:visited,.paging_ltr .paging__item:=
hover,.paging_ltr .paging__item:active,.paging_ltr .paging__item:focus{p=
osition:relative;margin:2px 0 0;padding-top:0;line-height:16px;text-deco=
ration:none}.paging_ltr .paging__item:hover{border:0}.paging__item__arro=
w{top:1px}.paging__item__text{vertical-align:middle;text-decoration:unde=
rline}.paging__item:hover .paging__item__text,.paging__item_disabled .pa=
ging__item__text,.paging__item_disabled:link .paging__item__text,.paging=
__item_disabled:visited .paging__item__text,.paging__item_disabled:hover=
.paging__item__text,.paging__item_disabled:active .paging__item__text,.=
paging__item_disabled:focus .paging__item__text{text-decoration:none}.in=
vite-friends{display:inline-block;padding:2px 14px 4px;margin-top:18px;m=
argin-bottom:17px;margin-left:39px;font-weight:bold;line-height:15px;bac=
kground:#EBF0F6}.answerbar{margin:0;padding:0}.answerbar_active{overflow=
:hidden;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.an=
swerbar__link,.answerbar__link:active,.answerbar__link:focus,.answerbar_=
_link:hover,.answerbar__link:link,.answerbar__link:visited{cursor:pointe=
r;display:inline-block;line-height:17px;padding:5px 10px 6px 10px;margin=
:0 10px 0 0;text-decoration:none}.answerbar__link_selected,.answerbar__l=
ink_selected:active,.answerbar__link_selected:focus,.answerbar__link_sel=
ected:hover,.answerbar__link_selected:link,.answerbar__link_selected:vis=
ited{text-decoration:none;cursor:default}.answerbar__link__text{line-hei=
ght:17px;text-decoration:underline;vertical-align:middle}.answerbar__lin=
k_selected .answerbar__link__text{text-decoration:none}.answerbar__link:=
hover{text-decoration:none}.answerbar__fulllink,.answerbar__fulllink:act=
ive,.answerbar__fulllink:focus,.answerbar__fulllink:hover,.answerbar__fu=
lllink:link,.answerbar__fulllink:visited{display:none;position:absolute;=
right:3px;line-height:30px;margin:0 20px 0 0;white-space:nowrap;cursor:p=
ointer}.answerbar__fulllink:after{content:'';display:inline-block;width:=
12px;height:15px;background-repeat:no-repeat;background-position:-29px 3=
px;margin:0 -17px 0 0;vertical-align:middle;position:relative;margin-lef=
t:5px}.answerbar_active .answerbar__fulllink{display:inline}.compose{pos=
ition:relative}.compose__header{padding-bottom:4px}.mceToolbarExternal{z=
-index:1;position:relative}.composeEditor{border:0;margin:0;padding:8px =
0 8px 8px;background:transparent;font:12px arial, helvetica;height:436px=
}.ielt8-body .composeEditor{padding:0}.ielt8-body .editorTextMode .shell=
__text_cell{padding:8px 0 8px 8px}.ielt8-body .composeEditor{float:left}=
.composeFrame{border:1px solid #aaaeb7;overflow:hidden;zoom:1;background=
-color:#fff}.composeEditorFrame{overflow:auto}.composeTemplatesContainer=
{display:none;background-color:#eff2f5;padding:0 4px}.composeTemplatesCo=
ntainer .listFrame{position:relative;height:398px;overflow:hidden}.compo=
seTemplatesContainer .list{position:absolute;top:0;left:9px}.composeTemp=
latesContainer .list a{display:block;border:1px solid #eff2f5;width:68px=
;height:40px;background-image:url("//img.imgsmail.ru/mail/ru/images/temp=
lates/interface/previews_all.jpg");outline:none}.composeTemplatesContain=
er .list a.empty{background:#fff;text-decoration:none;color:#a8a8a8;font=
-size:11px;text-align:center;line-height:38px}.composeTemplatesContainer=
.list a:hover{border-color:#0857a6}.composeTemplatesContainer .prev,.co=
mposeTemplatesContainer .next{margin:2px 0;display:block;width:88px;heig=
ht:15px;background-image:url("//img.imgsmail.ru/mail/ru/images/compose/a=
ppearance_arrow_sprite.gif");outline:none;font-size:0}.composeTemplatesC=
ontainer .next{background-position:0 -15px}.composeTemplatesContainer .p=
rev-disabled{background-position:-176px 0}.composeTemplatesContainer .ne=
xt-disabled{background-position:-176px -15px}.composeTemplatesContainer =
.prev-down{background-position:-88px 0}.composeTemplatesContainer .next-=
down{background-position:-88px -15px}.composeForm input,.composeForm inp=
ut[type=3D"submit"],.composeForm input[type=3D"button"]{font-family:aria=
l, helvetica}.composeDisableFormLayer{z-index:10000;opacity:0.3;filter:a=
lpha(opacity=3D30);background:url("//img.imgsmail.ru/0.gif") 0 0 repeat =
white;height:100%}.composeAttachDragZone{z-index:10000;height:100%;backg=
round:#EFF2F5}.composeAttachDragZone .attachInnerZone{height:100%;border=
:1px solid #9FC1EB;background:#9FC1EB;-webkit-border-radius:10px;-moz-bo=
rder-radius:10px;border-radius:10px}.composeAttachDragZone .attachInnerZ=
one div{color:#fff;left:50%;top:50%;margin:-7px 0 0 -68px}.editorTextMod=
e .textModeHide,.mlruTmpId0 .textModeHide{display:none}.mceToolbarExtern=
al{height:26px;background-color:#E6E8ED}.mceToolbarExternal .noJSMessage=
{line-height:25px;margin:0 7px}.mceToolbarRow1,.mceToolbarRow3,.mceToolb=
arRow4{visibility:hidden}.dn{display:none}.uploaderContainer{zoom:1;padd=
ing-top:7px}#jsHtml .uploaderContainer{padding-top:37px}.uploaderContain=
er .box{border:1px solid #aaaaaa;background:#ffffff}.uploaderContainer .=
bContainer{background:#f3f3f3;height:29px;line-height:29px;padding:0 18p=
x}.uploaderContainer .tail{top:-11px;position:relative;display:block;hei=
ght:11px;background:url("//img.imgsmail.ru/mail/ru/images/popupbox_tail.=
gif") 49px 0 no-repeat}.flashUploaderContainer{min-height:22px}.ie6-body=
.flashUploaderContainer{height:22px}.composeBrowseFile{z-index:1}.input=
FileWrap{float:left;overflow:hidden}.ielt8-body .inputFileWrap{height:22=
px}.inputFileWrap .inputFile{display:block;height:25px;margin:0;font-siz=
e:50px;opacity:0;position:absolute;right:0;filter:alpha(opacity=3D0);z-i=
ndex:100}.inputFileWrap .fakeInputFile{width:400px}.inputFileWrap .mr_bt=
n{width:120px;-webkit-border-radius:2px;-moz-border-radius:2px;border-ra=
dius:2px}.clear{clear:both;font-size:0;overflow:hidden;line-height:0;hei=
ght:0}.mlr-btn{margin:0 10px 0 0}.mlr-ok{background:url("//img.imgsmail.=
ru/mail/ru/images/ru/_sp_ico.png?5?5") no-repeat 0 -963px;height:11px;wi=
dth:16px;display:inline-block}.mlr-psd_lnk,.mlr-psd_lnk:hover{padding-ri=
ght:11px;color:#0857a6;text-decoration:none}.mlr-psd_lnk u{display:inlin=
e-block;padding:1px 0 0;height:12px;border-bottom:1px dotted #0857a6;lin=
e-height:12px;text-decoration:none}.mlr-psd_lnk .mr_arrow{margin:-6px 0 =
0 4px;border-top-color:#0857a6}.mlr-psd_lnk2,.mlr-psd_lnk2:hover{color:#=
000}.mlr-psd_lnk2 .mr_arrow{border-top-color:#000}.mlr-psd_lnk2 u{border=
-bottom:1px dotted #000}.mlr-snd_av{font-size:11px}.mlr-snd_av_img{backg=
round-color:#fff;background-position:50% 50%;background-repeat:no-repeat=
;border:solid 1px #e1e4e9;display:block;margin:8px 0;color:#fff;height:9=
0px;width:90px;position:relative;text-decoration:underline;line-height:9=
0px}.mlr-snd_av_img img:after{content:'';display:inline-block;width:100%=
}.mlr-snd_av_ttl{position:absolute;width:100%;height:18px;line-height:15=
px;bottom:0;left:0;color:#fff;text-decoration:underline;cursor:pointer;l=
eft:-99999px;text-align:center}.mlr-snd_av_ttl:hover{text-decoration:non=
e}.mlr-snd_av_ttl_bg{background:#000;opacity:.5;filter:alpha(opacity=3D5=
0)}.mlr-snd_av_img:hover{cursor:pointer}.mlr-snd_av_img:hover .mlr-snd_a=
v_ttl{left:0}.mlr-snd_book{position:absolute;top:3px;right:5px;display:b=
lock;width:15px;height:16px;overflow:hidden;white-space:nowrap;backgroun=
d:#fff}.ielt8-body .mlr-snd_book{margin:0 5px 0 -22px;float:right;z-inde=
x:1;position:relative;zoom:1}.mlr-snd-blck_left{padding:4px 0 0}.mlr-snd=
-blck_left_in{padding:0 108px 0 0;#zoom:1;#padding:0 10px 0 0;_padding:0=
}.mlr-snd-blck_right{width:100px;float:right}.mlr-snd-del{outline:none;f=
ont-size:12px;text-decoration:none;height:15px;width:15px;overflow:hidde=
n;display:inline-block;position:relative;vertical-align:middle;_float:le=
ft;_clear:right;#margin:2px 0 0}.mlr-snd-del i{background:url("//img.img=
smail.ru/mail/ru/images/ru/_sp_ico.png?5") no-repeat -73px -1327px;curso=
r:pointer;width:15px;height:15px;display:block;margin:-18px 0 0;position=
:relative}.mlr-snd_fld{min-height:22px;margin:0 0 5px 0}.ie6-body .mlr-s=
nd_fld{height:22px}.ielt8-body .mlr-snd_fld{zoom:1}.mlr-snd_fls{white-sp=
ace:normal}.mlr-snd_fls ul,.mlr-snd_fls_itm{list-style:none;margin:0;pad=
ding:0}.mlr-snd_fls ul{#zoom:1}.mlr-snd_fls .grey{margin:3px 0 0}.mlr-sn=
d_fls_in{margin:0 30px 0 0;padding:0 15px 0 40px;position:relative}.mlr-=
snd_fls_itm{line-height:18px;white-space:nowrap;display:inline-block;min=
-height:30px;_height:30px;vertical-align:top;width:155px;margin:0 -3px 0=
0;#float:left}.mlr-snd_fls_itm .i-spI{background-image:url("//img.imgsm=
ail.ru/mail/ru/images/ru/_sp_ico_attach_transparent.png");margin-top:2px=
;margin-left:0;position:absolute;left:-5px}.mlr-sfi_in{padding:0 25px 10=
px 35px;position:relative}.mlr-sfi_in2{display:inline-block;overflow:hid=
den;vertical-align:middle;position:relative;max-width:90%;_width:80%;_fl=
oat:left}.mlr-sfi_r{height:18px;#zoom:1}.mlr-snd_heavy{background:url("/=
/img.imgsmail.ru/mail/ru/images/ru/_sp_ico.png?5") no-repeat -16px -1372=
px;color:#656972;font-size:11px;line-height:13px;padding:9px 0 0 28px;bo=
rder-top:solid 1px #ccc}@media screen and (-webkit-min-device-pixel-rati=
o:0){.mlr-snd_ifile{background:#EFF2F5;width:200px;overflow:hidden}}.mlr=
-snd_lbl{margin:2px 10px 0 0;text-align:right;width:65px}.mlr-snd_lbl a,=
.mlr-snd_lbl a:hover{color:#000}.mlr-snd_ntc{display:inline-block;width:=
165px;text-align:right;vertical-align:middle;margin:0 0 0 -170px}.mlr-sn=
d_uppld{min-height:22px;margin-bottom:5px}.ielt8-body .mlr-snd_uppld{mar=
gin:0 -5px 0 0;overflow-x:hidden;width:100%}.mlr-snd_uppld_f{display:inl=
ine-block;vertical-align:middle;width:100%}.mlr-snd_uppld_in{white-space=
:nowrap}.mlr-snd-blck_tbl td{vertical-align:top}.mlr-snd_rw_safld .mlr-s=
nd_fld{margin:0;min-height:19px;height:19px}.mlr-snd_itxt{margin:0 -20px=
0 0}@media screen and (-webkit-min-device-pixel-ratio:0){.mlr-snd_input=
_expand .mlr-snd_itxt{padding:1px 3px}}.mlr-snd_input_expand .mlr-snd_it=
xt{padding-right:20px}.ielt8-body .mlr-snd_input_expand .mlr-snd_itxt{pa=
dding-right:1px}.j-expandField_scroll .mlr-snd_itxt{padding-right:1px}.j=
-expandField_scroll .mlr-snd_book{right:22px}.listContainer{padding-left=
:20px}.mlr-snd_rw_ab .ac_loading{background-image:none}.mlr-snd_c{z-inde=
x:4;top:0;right:0;white-space:nowrap;min-height:22px;margin:0 0 5px}.mlr=
-snd_c1,.mlr-snd_c2{vertical-align:middle}.mlr-snd_c1 .iconImportant{bac=
kground:url("//img.imgsmail.ru/mail/ru/images/ru/_new_mail_sprite.png") =
-132px 3px no-repeat;padding-left:6px}.mlr-snd_c2{margin-left:14px}.ielt=
8-body .mlr-snd_c1 .iconImportant{display:inline;zoom:1}.changeNameSubMe=
nu{background:#FFFFFF;border:1px solid #000000;left:0;list-style-type:no=
ne;z-index:102;margin:2px 0 0;padding:5px 0}.changeNameSubMenu li{paddin=
g:0 6px;font-size:11px}.changeNameSubMenu li a{text-decoration:none}.cha=
ngeNameSubMenu li.separator{color:#999;line-height:12px}.enableTextConfi=
rmContainer{background:url("//img.imgsmail.ru/mail/ru/images/ru/_sp_ico.=
png") -95px -1436px no-repeat;line-height:normal;min-height:33px;padding=
-left:50px}.ielt8-body .enableTextConfirmContainer{height:33px}.ielt8-bo=
dy div.jsdn,.ielt8-body .jsdn div,.ielt8-body .jsdn .composeJSSWFInputCo=
ntainer,.ielt8-body .jsdn span,.ielt8-body .jsdn input,.ielt8-body .jsdn=
a{display:block;visibility:hidden;position:absolute;overflow:hidden;hei=
ght:0;top:-1000px;zoom:1;width:100%;float:left}#page-main.pageMain1 .mCC=
C{float:none}#jsHtml .composeControlsContainer{position:absolute}.mr_cmp=
s{padding:5px 7px 4px;border-bottom:1px solid #d9deed;-webkit-border-rad=
ius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0=
}.mr_cmpsB{padding:3px 7px 6px;background-position:0 -69px;border:0;bord=
er-top:1px solid #fff;-webkit-border-radius:0 0 3px 3px;-moz-border-radi=
us:0 0 3px 3px;border-radius:0 0 3px 3px}#ReadMsgCompose .mr_cmps{-webki=
t-border-radius:0 3px 0 0;-moz-border-radius:0 3px 0 0;border-radius:0 3=
px 0 0}.mr_cmps .mr_btn__wr{margin-right:4px}.mr_cmps .mr_btn{width:81px=
;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.dra=
gFilesTooltip{position:absolute;width:100%;text-align:center;top:0;z-ind=
ex:10001;display:none}.dragFilesTooltip span{display:inline-block;backgr=
ound:#fef3d9;border:1px dashed #d5b56a;font-size:15px;font-weight:bold;p=
adding:22px}#ReadMsgBottom .content__header{display:none}.compose__beaut=
iful .compose__header{padding:8px 8px 1px;border-bottom:none;z-index:4}.=
compose__beautiful .dropdown__list{top:auto;margin-top:3px}.compose__bea=
utiful .defaultSkin .mceExternalToolbar,.compose__beautiful .mceToolbarE=
xternal{background-color:#fff !important}.compose__beautiful .mceExterna=
lToolbar{margin:0 5px}.compose__beautiful .defaultSkin table.mceLayout{h=
eight:auto !important}.compose__uploader__input_wrap{display:inline-bloc=
k;overflow:hidden;position:relative}.compose__uploader__input{cursor:poi=
nter;display:block;margin:0;font-size:50px;opacity:0;position:absolute;r=
ight:0;filter:alpha(opacity=3D0);z-index:100}.compose__header__content{m=
argin:0 100px 0 47px}.compose__header__row{margin:0 0 9px;position:relat=
ive;border-spacing:0}.compose__header__row_field{border:1px solid #b5b5b=
5;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.co=
mpose__header__row_wrapped{padding:5px 11px 2px}.compose__header__row_pr=
operty{margin-bottom:-18px}.compose__header__row_uploader{margin-bottom:=
28px;top:21px}.compose__header__row_uploader .dropdown__list{width:100%;=
-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:bord=
er-box}.compose__header__row_uploader .form__button_default_right{margin=
-top:0;margin-right:0}.compose__header__row_uploader .compose__uploader_=
_input_box{position:relative;top:-21px;width:50%;margin-bottom:-21px}.co=
mpose__header__from-email__box{margin-left:7px}.compose__header__label__=
box{position:relative;display:table-cell;vertical-align:top;padding:5px =
10px 0 23px}.compose__header__row .dropdown__button__text{color:#000}.co=
mpose__header__row .dropdown__arrow{border-top-color:#000}.compose__head=
er__label__box_addressbook .compose__header__label_addressbook,.compose_=
_header__label__box_addressbook .compose__header__addressbook__box{curso=
r:pointer}.compose__header__label__box_addressbook:hover{background-colo=
r:rgba(0, 0, 0, 0.17) 100%;background-image:-webkit-gradient(linear, lef=
t top, left bottom, from(rgba(255, 255, 255, 0) 0%), to(rgba(0, 0, 0, 0.=
17) 100%));background-image:-webkit-linear-gradient(top, rgba(255, 255, =
255, 0) 0%, rgba(0, 0, 0, 0.17) 100%);background-image:-moz-linear-gradi=
ent(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.17) 100%);background=
-image:-ms-linear-gradient(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0,=
0.17) 100%);background-image:-o-linear-gradient(top, rgba(255, 255, 255=
, 0) 0%, rgba(0, 0, 0, 0.17) 100%);background-image:linear-gradient(to b=
ottom, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.17) 100%);text-decorat=
ion:underline}.compose__header__label__box_addressbook:active{background=
-color:rgba(255, 255, 255, 0) 100%;background-image:-webkit-gradient(lin=
ear, left top, left bottom, from(rgba(0, 0, 0, 0.17) 0%), to(rgba(255, 2=
55, 255, 0) 100%));background-image:-webkit-linear-gradient(top, rgba(0,=
0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 100%);background-image:-moz-line=
ar-gradient(top, rgba(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 100%);ba=
ckground-image:-ms-linear-gradient(top, rgba(0, 0, 0, 0.17) 0%, rgba(255=
, 255, 255, 0) 100%);background-image:-o-linear-gradient(top, rgba(0, 0,=
0, 0.17) 0%, rgba(255, 255, 255, 0) 100%);background-image:linear-gradi=
ent(to bottom, rgba(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 100%)}.com=
pose__header__label{display:block;min-width:51px;white-space:nowrap}.com=
pose__header__field__box{display:table-cell;width:100%;position:relative=
}.compose__header__field__box .ac-layer{left:auto}.compose__header__fiel=
d{overflow:hidden;width:100%;height:24px;border:0;margin:0;font:12px/16p=
x arial, sans-serif, helvetica;padding:4px 4px 3px 6px;-webkit-box-shado=
w:inset 4px 2px 6px -2px rgba(0, 0, 0, 0.4);-moz-box-shadow:inset 4px 2p=
x 6px -2px rgba(0, 0, 0, 0.4);box-shadow:inset 4px 2px 6px -2px rgba(0, =
0, 0, 0.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-=
sizing:border-box}.compose__header__addressbook__box .icon_label_addresb=
ook{margin:0}.compose__header__addressbook__box{position:absolute;left:5=
px;top:4px}.compose__header__addressbook__box .icon_addresbook{margin-to=
p:0;margin-bottom:0}.compose__header__avatar__box{float:right}.compose__=
header__avatar{font-size:11px;background-color:#fff;background-position:=
50% 50%;background-repeat:no-repeat;border:solid 1px #b5b5b5;-webkit-bor=
der-radius:2px;-moz-border-radius:2px;border-radius:2px;display:block;co=
lor:#fff;height:90px;width:90px;position:relative;text-decoration:underl=
ine;line-height:90px}.compose__header__avatar:hover .mlr-snd_av_ttl{left=
:0}.compose__header__switcher{float:left;width:40px;height:40px}.compose=
__header__switcher .dropdown__checkbox,.compose__header__switcher .dropd=
own__checkbox:active,.compose__header__switcher .dropdown__checkbox:focu=
s,.compose__header__switcher .dropdown__checkbox:link,.compose__header__=
switcher .dropdown__checkbox:visited,.compose__header__switcher .dropdow=
n__checkbox:hover{height:23px;background:transparent;border:1px solid #b=
5b5b5}.compose__header__switcher .dropdown__checkbox:hover{background-co=
lor:rgba(0, 0, 0, 0.17) 100%;background-image:-webkit-gradient(linear, l=
eft top, left bottom, from(rgba(255, 255, 255, 0) 0%), to(rgba(0, 0, 0, =
0.17) 100%));background-image:-webkit-linear-gradient(top, rgba(255, 255=
, 255, 0) 0%, rgba(0, 0, 0, 0.17) 100%);background-image:-moz-linear-gra=
dient(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.17) 100%);backgrou=
nd-image:-ms-linear-gradient(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, =
0, 0.17) 100%);background-image:-o-linear-gradient(top, rgba(255, 255, 2=
55, 0) 0%, rgba(0, 0, 0, 0.17) 100%);background-image:linear-gradient(to=
bottom, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.17) 100%)}.compose__=
header__switcher .dropdown__checkbox:active{background-color:rgba(255, 2=
55, 255, 0) 100%;background-image:-webkit-gradient(linear, left top, lef=
t bottom, from(rgba(0, 0, 0, 0.17) 0%), to(rgba(255, 255, 255, 0) 100%))=
;background-image:-webkit-linear-gradient(top, rgba(0, 0, 0, 0.17) 0%, r=
gba(255, 255, 255, 0) 100%);background-image:-moz-linear-gradient(top, r=
gba(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 100%);background-image:-ms=
-linear-gradient(top, rgba(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 100=
%);background-image:-o-linear-gradient(top, rgba(0, 0, 0, 0.17) 0%, rgba=
(255, 255, 255, 0) 100%);background-image:linear-gradient(to bottom, rgb=
a(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 100%)}.compose__header__swit=
cher .dropdown__icon_list{left:7px;top:9px}.compose__header__switcher .d=
ropdown__arrow_checkbox{right:8px;top:11px}.compose__header__switcher .d=
ropdown__checkbox .dropdown__arrow{border-top-color:#000}.compose__heade=
r__switcher .dropdown__checkbox .dropdown__icon__inner_list,.compose__he=
ader__switcher .dropdown__checkbox .dropdown__arrow__inner{background-co=
lor:#000}.compose__header__switcher .dropdown__checkbox .dropdown__icon_=
list{border-color:#000}.compose__header__switcher .icon_tip-ok{backgroun=
d:url("//img.imgsmail.ru/r/default/editor/icon_selected.png") 50% 50% no=
-repeat;top:-1px}.compose__header__property__box{display:table-cell}.com=
pose__header__property__box_left{width:100%}.js-row-Notify{display:block=
;margin-bottom:27px}.compose__header__property__box_right{text-align:rig=
ht;white-space:nowrap;z-index:2;position:relative}.compose__header__prop=
erty_priority .iconImportant{background:url("//img.imgsmail.ru/mail/ru/i=
mages/ru/_new_mail_sprite.png") -132px 3px no-repeat;padding-left:6px}.c=
ompose__header__property_receipt{margin-left:12px}.compose__editor{borde=
r:1px solid #b5b5b5;background-color:#fff;-webkit-border-radius:2px;-moz=
-border-radius:2px;border-radius:2px}.compose__editor__frame{overflow:hi=
dden;-webkit-border-radius:0 0 2px 2px;-moz-border-radius:0 0 2px 2px;bo=
rder-radius:0 0 2px 2px}.compose__editor__frame_shadow{width:5000px;heig=
ht:10px;-webkit-box-shadow:0 0 5px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 =
0 5px rgba(0, 0, 0, 0.3);box-shadow:0 0 5px rgba(0, 0, 0, 0.3);position:=
relative;margin:-10px 0 0 -10px;z-index:2}.compose__editor_toolbar{z-ind=
ex:3;position:relative;height:34px;border-bottom:1px solid #ccc;-webkit-=
user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:=
none;-webkit-border-radius:2px 2px 0 0;-moz-border-radius:2px 2px 0 0;bo=
rder-radius:2px 2px 0 0}.compose__cards{padding-top:4px;position:relativ=
e;background:#f5f7f9}.compose__cards .popup-settings__close{padding-righ=
t:7px}.compose__cards .popup-settings__close .icon_popup-close{margin-to=
p:7px}.compose__cards__actions{overflow:hidden;margin-left:10px;margin-r=
ight:30px;font-size:11px}.compose__cards__category{float:left}.compose__=
cards__category__list{margin:0;padding:0}.compose__cards__category__item=
{display:inline-block;color:#0857A6;border-bottom:1px dashed #0857A6;mar=
gin-right:13px;line-height:13px;cursor:pointer}.compose__cards__category=
__item:hover{color:#F26D00;border-bottom:1px dashed #F26D00}.compose__ca=
rds__category__item_selected,.compose__cards__category__item_selected:ho=
ver{color:#333;border-bottom-color:transparent;cursor:text}.compose__car=
ds__more{float:right}.compose__cards__slider{overflow:hidden;width:100%;=
margin-top:12px;position:relative}.compose__cards__slider__control{width=
:30px;height:66px;top:0;background:url("//img.imgsmail.ru/r/default/ico/=
ico__attachview_206.png") 0 0 no-repeat;position:absolute;cursor:pointer=
}.compose__cards__slider__control_prev{left:0;background-position:-77px =
19px}.compose__cards__slider__control_prev:hover{background-position:-13=
7px 19px}.compose__cards__slider__control_next{right:0;background-positi=
on:-112px 19px}.compose__cards__slider__control_next:hover{background-po=
sition:-172px 19px}.compose__cards__slider__wrap_outer{margin:0 30px}.co=
mpose__cards__slider__wrap{overflow:hidden;height:68px;margin:0 auto;pos=
ition:relative;padding:0 8px}.compose__cards__slider__list{margin:0;padd=
ing:0;display:block;position:absolute;left:0;top:0}.compose__cards__slid=
er__item{display:block;float:left;padding:8px;cursor:pointer;margin:1px}=
.compose__cards__slider__item__inner{background-position:50% 50%;width:4=
8px;height:48px;-webkit-border-radius:1px;-moz-border-radius:1px;border-=
radius:1px}.compose__cards__slider__item_selected{border:1px solid #ccc;=
border-bottom:none;margin:0;background:#fff;-webkit-box-shadow:2px 3px 8=
px -2px rgba(0, 0, 0, 0.3);-moz-box-shadow:2px 3px 8px -2px rgba(0, 0, 0=
, 0.3);box-shadow:2px 3px 8px -2px rgba(0, 0, 0, 0.3)}.compose__cards__l=
ine{background:#ccc;height:1px;margin-top:-2px}.compose__decoration{posi=
tion:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-se=
lect:none;user-select:none;border-left:1px solid #ccc}.compose__decorati=
on__shadow{width:500px;height:5000px;-webkit-box-shadow:0 0 5px rgba(0, =
0, 0, 0.3);-moz-box-shadow:0 0 5px rgba(0, 0, 0, 0.3);box-shadow:0 0 5px=
rgba(0, 0, 0, 0.3);position:absolute;top:-50px;left:-1px}.compose__deco=
ration__control__hide{width:8px;height:100%;position:absolute;background=
:url("//img.imgsmail.ru/r/default/compose/compose__decoration__control__=
hide.png") 50% 50% no-repeat;top:0;left:0;cursor:pointer;z-index:1}.comp=
ose__decoration__item,.compose__decoration__slider,.compose__decoration_=
_slider__wrap{height:100%}.compose__decoration__slider__control{height:1=
6px;background-color:#f5f7f9;width:100%;position:absolute;cursor:pointer=
;z-index:1;filter:alpha(opacity=3D0);-moz-opacity:0;-khtml-opacity:0;opa=
city:0;-webkit-transition:opacity 0.1s ease-out;-moz-transition:opacity =
0.1s ease-out;-o-transition:opacity 0.1s ease-out;transition:opacity 0.1=
s ease-out}.compose__decoration__slider__control_prev{-webkit-box-shadow=
:0 4px 6px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 4px 6px rgba(0, 0, 0, 0.=
3);box-shadow:0 4px 6px rgba(0, 0, 0, 0.3);top:0}.compose__decoration__s=
lider__control_next{-webkit-box-shadow:0 -4px 6px rgba(0, 0, 0, 0.3);-mo=
z-box-shadow:0 -4px 6px rgba(0, 0, 0, 0.3);box-shadow:0 -4px 6px rgba(0,=
0, 0, 0.3);bottom:0}.compose__decoration__slider__control__arrow{backgr=
ound:url("//img.imgsmail.ru/r/default/compose/compose__decoration__slide=
r__control__arrow.png") 0 0 no-repeat;position:absolute;width:11px;heigh=
t:7px;left:50%;margin-left:-6px;overflow:hidden}.compose__decoration__sl=
ider__control__arrow_prev{top:50%;margin-top:-4px}.compose__decoration__=
slider__control__arrow_next{background-position:0 -7px;bottom:50%;margin=
-bottom:-4px}.compose__decoration__slider{position:relative;-webkit-box-=
sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.comp=
ose__decoration__slider__list{position:absolute;list-style-type:none;pad=
ding:0;margin:0}.compose__decoration__slider__wrap{width:108px;overflow:=
hidden;position:relative}.compose__decoration__clear__item,.compose__dec=
oration__category__item,.compose__decoration__slider__item{display:block=
;margin-bottom:10px;text-align:center}.compose__decoration__category__it=
em{border-bottom:1px solid #b5b5b5;background-color:#f5f7f9}.compose__de=
coration__category__item__inner{color:#333;font-size:11px;display:table-=
cell;vertical-align:middle}.compose__decoration__clear__item__inner{colo=
r:#b5b5b5;font-size:11px;display:table-cell;vertical-align:middle}.compo=
se__decoration__slider__item,.compose__decoration__clear__item{border:1p=
x solid #b5b5b5;cursor:pointer;margin:8px}.compose__decoration__clear__i=
tem__inner_text,.compose__decoration__category__item__inner_text{padding=
:0 6px}.compose__decoration__slider__item__inner{background-position:50%=
50%;background-repeat:no-repeat}.compose__decoration__clear__item__inne=
r,.compose__decoration__category__item__inner,.compose__decoration__slid=
er__item__inner{height:38px}.compose__decoration__clear__item__inner,.co=
mpose__decoration__slider__item__inner{width:90px}.compose__decoration__=
category__item__inner{width:108px}.compose__labels{background-color:#fff=
;height:auto;display:block;cursor:text;outline:none;padding:1px 3px 0 4p=
x}.compose__labels__input{border:0;background:transparent;outline:none;c=
olor:#000;font-size:12px;height:16px;line-height:16px;width:100%;padding=
:1px 3px 2px;vertical-align:top;margin:2px;font-family:Arial,Tahoma,Verd=
ana,sans-serif;display:inline;outline:none}.compose__labels__label{displ=
ay:inline-block;margin:1px 2px 1px;font-size:12px;max-width:367px;color:=
#333;background-color:#efefef;border:1px solid #ccc;padding:2px 1px 1px =
5px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;w=
hite-space:nowrap;cursor:pointer;outline:none;-webkit-user-select:none;-=
moz-user-select:none;-ms-user-select:none;user-select:none}.compose__lab=
els__label:hover{border-color:#8b8b8b}.compose__labels__label_edit,.comp=
ose__labels__label_edit:hover{vertical-align:top;background-color:#fcfcf=
c;border-color:#ccc;max-width:2000px;-webkit-user-select:text;-moz-user-=
select:text;-ms-user-select:text;user-select:text;padding-top:1px;paddin=
g-bottom:2px}.compose__labels__label_edit .compose__labels__input{margin=
:0 -7px 0 0;padding:0;line-height:17px}.compose__labels__label_invalid{b=
ackground-color:transparent;border-color:#d00;border-style:dashed}.compo=
se__labels__label_invalid:hover{border-color:#900}.compose__labels__labe=
l_selected{border-color:#8b8b8b;background-color:#dfdfdf}.compose__label=
s__label_invalid .compose__labels__label_selected{border-color:#900}.com=
pose__labels__label__text{display:inline-block;max-width:350px;overflow:=
hidden;text-overflow:ellipsis;vertical-align:top;line-height:15px;margin=
-right:5px}.compose__labels__suggest .addressbook__suggest__item{padding=
-right:40px}.compose__labels__suggest .addressbook__suggest__item__hint,=
.compose__labels__suggest .addressbook__suggest__item__text{overflow:hid=
den;text-overflow:ellipsis}.compose__labels__drag{position:absolute}.com=
pose__labels__drag__cnt{top:2px;right:0;padding:0px 4px;font-size:10px;c=
olor:#fff;z-index:2000;position:absolute;border:2px solid #fff;border-ra=
dius:6px;box-shadow:0 0 6px rgba(0, 0, 0, 0.4);background-color:#ff6600;=
background-image:-webkit-gradient(linear, left top, left bottom, from(#f=
f8649), to(#ff6600));background-image:-webkit-linear-gradient(top, #ff86=
49, #ff6600);background-image:-moz-linear-gradient(top, #ff8649, #ff6600=
);background-image:-ms-linear-gradient(top, #ff8649, #ff6600);background=
-image:-o-linear-gradient(top, #ff8649, #ff6600);background-image:linear=
-gradient(to bottom, #ff8649, #ff6600);filter:progid:DXImageTransform.Mi=
crosoft.gradient(startColorstr=3D'#ff8649',endColorstr=3D'#ff6600')}.dir=
ect-colors{display:none}.direct,.dummy-dline{clear:both;margin:0;height:=
21px;position:relative;overflow:hidden;padding:3px 0 0 5px}.dummy-dline{=
visibility:hidden}.direct_leftcol{paddig-top:10px}.direct_top .fade{heig=
ht:25px;left:100%;margin-left:-20px}.addressbook-mailru-v2 .direct{posit=
ion:static !important;margin-top:0 !important}#top_direct span.url,#top_=
direct a.snap_noshot,#PageContent .direct_top span.url,#PageContent .dir=
ect_top a.snap_noshot{white-space:nowrap !important;display:inline !impo=
rtant}#top_direct div.y5_nf .y5_ads .y5_ad,#PageContent .direct_top div.=
y5_nf .y5_ads .y5_ad{padding:6px !important}#top_direct span.url,#PageCo=
ntent .direct_top span.url{margin:0 0 0 3px !important;font-size:11px !i=
mportant}#top_direct span.url,#PageContent .direct_top span.url{display:=
inline-block !important}#top_direct #YaDirectLine iframe,#PageContent .d=
irect_top #YaDirectLine_2 iframe{margin:-4px 0 0;width:100%;height:25px}=
#top_direct div.y5_ya,#PageContent .direct_top div.y5_ya{display:inline-=
block !important;float:none !important;padding:2px 0 0 !important;vertic=
al-align:middle !important;font-size:11px !important;line-height:25px !i=
mportant;height:25px !important}#top_direct ul.y5_ads,#PageContent .dire=
ct_top ul.y5_ads,#top_direct div.y5_ads,#PageContent .direct_top div.y5_=
ads{position:absolute !important;left:52px !important;top:-2px !importan=
t;width:2000px !important}#top_direct div.y5_ad div,#PageContent .direct=
_top div.y5_ad div{font-size:12px !important}#top_direct ins.y5_icon,#Pa=
geContent .direct_top ins.y5_icon{top:-2px !important}#top_direct div.y5=
_nf .y5_ads .ad-link a,#top_direct div.y5_nf .y5_ads .y5_title a,#PageCo=
ntent .direct_top div.y5_nf .y5_ads .ad-link a,#PageContent .direct_top =
div.y5_nf .y5_ads .y5_title a{font-weight:400 !important}.direct .b-item=
{display:none}.double-state .b-double-item,.direct-state .b-direct-item,=
.rbline-state .b-rbline-item{display:block}.b-rbline-item,.b-double-item=
{position:absolute;top:4px;width:2000px}.b-rbline-item img,.b-double-ite=
m img{height:16px;margin-right:5px;border:0;vertical-align:middle}#slotS=
how_direct .y5_ads,#slotShow_direct .y5_h2{background:#fff !important}#s=
lotShow_direct #y5_direct1 .y5_ads,#slotShow_direct #y5_direct1 .y5_h2,#=
slotShow_direct #y5_direct2 .y5_ads,#slotShow_direct #y5_direct2 .y5_h2{=
border:none !important;background:none !important}#slotShow_direct .y5_n=
f .y5_ads .y5_ad,#slotShow_direct .y5_nf .y5_h span{padding:0 !important=
}#slotShow_direct .y5 .y5_ya{margin-bottom:5px !important}#slotShow_dire=
ct .y5 .y5_item{margin-bottom:15px !important}.leftcol__banner__direct{o=
verflow:hidden;border-right-width:1px !important;border-right-style:soli=
d !important;border-right-color:#d5d5d5 !important}#PageContent .direct_=
top wbr{display:none !important}#slotShow_direct .ya-partner_type_vert .=
ya-partner__item,#PageContent .ya-partner_type_vert .ya-partner__item{pa=
dding-left:0 !important;padding-right:0 !important}#PageContent .ya-part=
ner_type_horiz td.ya-partner__item{display:table-cell !important}#YaDire=
ctLine{margin-top:1px}#YaDirectLine .ya-partner__item,#YaDirectLine .ya-=
partner__text{padding:0 !important}#jsHtml #YaDirectLine a.ya-partner__a=
ds-link-l{font-size:11px !important}#jsHtml #YaDirectLine a.ya-partner__=
title-link,#jsHtml #YaDirectLine .ya-partner__title-link-text{font-size:=
11px !important}#jsHtml #YaDirectLine .ya-partner__icon{vertical-align:b=
ottom !important}#jsHtml #slotShow_direct a.ya-partner__ads-link-l{displ=
ay:block !important;margin-left:0 !important;padding:3px 0 !important;fo=
nt-size:12px !important}#jsHtml #slotShow_direct .ya-partner__title-link=
{font-size:12px !important;font-weight:bold !important}.message-sent{-we=
bkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.message=
-sent__rb-main-container{margin:19px 0}.message-sent__title{padding-top:=
2px;padding-left:38px;min-height:28px;font-size:15px;position:relative}.=
message-sent__icon{position:absolute;top:5px;left:0;margin:0}.message-se=
nt__text{padding-left:39px}.message-sent__list{padding-top:20px;padding-=
bottom:15px}.message-sent__list__item{padding-bottom:7px}.message-sent__=
list__item__link{line-height:16px;vertical-align:middle}.message-sent__h=
r{border-width:1px;border-style:solid;margin-top:10px;margin-bottom:15px=
}.message-sent__hr_big{margin-top:25px;margin-bottom:15px}.message-sent_=
_hr_small{margin-top:5px;margin-bottom:10px}.message-sent__line-ad{backg=
round-color:#fff;border-radius:2px}.message-sent__media{text-align:cente=
r;margin:40px 0}.message-sent_IsSocialConnect{padding:20px 0 !important}=
.message-sent_IsSocialConnect .message-sent__title{padding:0;min-height:=
28px;font-size:18px}.message-sent_IsSocialConnect .message-sent__text{pa=
dding-left:0}.message-sent_IsSocialConnect .message-sent__wrap{padding:0=
25px}.message-sent_IsSocialConnect .message-sent__hr{border-width:0 0 1=
px}.message-sent_IsSocialConnect .message-sent__hr_big{margin-bottom:12p=
x}.message-sent_IsSocialConnect .message-sent__hr_small{display:none}.me=
ssage-sent_IsSocialConnect .message-sent__rb-main-container{margin-top:2=
4px}.infomessage{position:relative;padding:0}.infomessage__icon{float:le=
ft;margin:0}.infomessage__text-wrap{display:block;overflow:hidden}.infom=
essage__text-wrap_icon{padding-left:10px}.infomessage__options{position:=
absolute;top:2px;right:30px}.infomessage__options_bottom{top:auto;right:=
10px;bottom:13px}.infomessage__text{padding-bottom:5px}.infomessage__sec=
ondary{font-size:10px}.infomessage__secondary-link,.infomessage__seconda=
ry-link:link,.infomessage__secondary-link:visited,.infomessage__secondar=
y-link:hover,.infomessage__secondary-link:active,.infomessage__secondary=
-link:focus{font-size:10px;cursor:pointer}.infomessage__close,.infomessa=
ge__close:link,.infomessage__close:visited,.infomessage__close:hover,.in=
fomessage__close:active,.infomessage__close:focus{position:absolute;top:=
2px;right:-20px;width:11px;height:11px;text-decoration:none;font-size:22=
px;line-height:11px;overflow:hidden;text-align:center}.infomessage__titl=
e{display:inline-block;width:120px}.infomessage__list{display:inline-blo=
ck}.infomessage__list__item{display:block;padding-bottom:3px}.infomessag=
e__date{text-transform:lowercase}.infomessage__marker{padding:0 2px;font=
-size:9px}.infomessage_alertDiv-wrapper{padding:0 16px 24px}.announcemen=
ts{position:relative;margin:6px 0 10px;padding:12px 10px 8px 8px}.announ=
cements_warning{padding:10px}.announcements_wrong-time{position:relative=
!important;font-weight:normal !important;font-size:13px !important}.ann=
ouncements_wrong-time .announcements{border-width:1px !important}pre{whi=
te-space:pre-wrap}.marker{position:relative;display:inline-block;top:-5p=
x;padding-left:3px;font:bold 10px Tahoma, arial}.menu__item__link .marke=
r{margin-left:-8px}.marker_new{color:#f00}.login-page{width:880px;margin=
:0 auto}.login-column{margin-top:70px;margin-bottom:90px;border-collapse=
:collapse;border-spacing:0}.login-head{margin-bottom:20px;font-size:18px=
;font-weight:bold;color:#000}.login-page__error{padding-left:40px;margin=
-bottom:20px}.login-column__form{width:290px;padding-top:5px;padding-bot=
tom:20px;padding-right:55px;vertical-align:top}.login-column__form .logi=
n-head{padding-left:62px}.login-form{border-collapse:collapse;border-spa=
cing:0}.login-form td{padding:5px 3px}td.login-form__td-label-alien{padd=
ing-bottom:20px}.login-form__td-label{width:55px;padding-right:7px;font-=
size:12px;font-weight:bold;text-align:right}.login-form__select{width:11=
5px}.login-form__label-alien{font-size:12px;color:#999}.login-column__pr=
omo{width:470px;padding-top:5px;padding-bottom:20px;padding-left:55px;ve=
rtical-align:top;border-left:1px solid #d5d5d5}.login-promo{position:rel=
ative;margin-bottom:35px;padding-left:80px;line-height:1.5}.login-promo_=
_header_ok{font-size:18px;font-weight:bold;color:#000}.login-promo_ok{pa=
dding-top:15px;padding-bottom:15px;background:#fff7df;-webkit-border-rad=
ius:3px;-moz-border-radius:3px;border-radius:3px}.login-promo__header{fo=
nt-weight:bold}.login-promo__text{color:#999}.login-promo__avatar{positi=
on:absolute;left:10px;width:50px;height:50px;background-repeat:no-repeat=
;background-position:50% 50%}.login-promo__ico{position:absolute;left:0p=
x;width:60px;height:60px;background-image:url("//img.imgsmail.ru/r/defau=
lt/login/login__landing_features.png");background-repeat:no-repeat}.logi=
n-promo__ico_kav{background-position:0 0}.login-promo__ico_size{backgrou=
nd-position:0 -60px}.login-promo__ico_speed{background-position:0 -120px=
}.logo-button,.logo-button .l,.logo-button .r{background:url("//img.imgs=
mail.ru/mail/ru/images/signup/buttons_sprite.png") 0 0 no-repeat;display=
:inline-block;text-decoration:none;height:26px}* html .logo-button,* htm=
l .logo-button .l,* html .logo-button .r{display:inline;zoom:1}.logo-but=
ton a{text-decoration:none}.logo-button{background-repeat:repeat-x}.logo=
-button .l{padding-left:19px}.logo-button .r{padding-right:19px;color:#f=
ff;font:bold 14px/23px Arial}.logo-button input{cursor:pointer;color:#ff=
f;font:bold 14px Arial;background-color:transparent;border:0;padding:0 0=
4px;margin:0 -19px;height:26px;width:185px}* html .logo-button input{pa=
dding-bottom:2px;position:relative;left:-19px}.logo-button_green{backgro=
und-position:0 0}.logo-button_green .l{background-position:0 -26px}.logo=
-button_green .r{background-position:100% -52px}.login-page__new{margin:=
117px auto;width:700px}.form__row__header__message{color:red;font-size:1=
3px;line-height:16px;padding-top:6px}.login-page__new__text{margin:4px 0=
0 0;font-size:13px}.login-page_modern{width:920px}.login-page_modern .l=
ogin-column__form{width:auto;padding-right:13px}.login-page_modern .logi=
n-column__promo{width:auto;padding-top:33px;border-left:0}.login-page_mo=
dern .login-head{margin-bottom:23px;padding:0;font-size:22px;line-height=
:24px;font-weight:normal;text-shadow:1px 0 0 rgba(0, 0, 0, 0.2)}.login-p=
age_modern .form__select__select{left:auto;cursor:pointer}.login-page_mo=
dern .login-promo{margin-bottom:18px;padding-left:91px}.login-page_moder=
n .login-promo_last{margin-bottom:20px}.login-page_modern .login-promo__=
text{line-height:1.4}.login-page_modern .login-promo__ico{width:77px;hei=
ght:64px;margin-top:-7px;margin-left:-5px;background-image:url("//img.im=
gsmail.ru/r/default/login/login-promo__ico.png")}.login-page_modern .log=
in-promo__ico_safe{background-position:0 0}.login-page_modern .login-pro=
mo__ico_unlim{background-position:0 -64px}.login-page_modern .login-prom=
o__ico_speed{background-position:0 -128px}.login-page_modern_error{width=
:377px}.login-page__wrapper{width:323px;padding:27px 25px 0 27px;backgro=
und-color:#fdfdfd;border:1px solid #d9d9d9;border-radius:4px;box-shadow:=
0 0 8px 0 rgba(0, 0, 0, 0.09)}.login-form__footer{margin:0 -25px 0 -27px=
;padding:18px 28px;background-color:#e8eef4;border-top:1px solid #dae4ef=
;box-shadow:inset 0 1px 0px 0px #f2f9ff}.login-form__row{position:relati=
ve;margin:19px 0}.login-form__row_last{margin-top:-3px;margin-bottom:31p=
x}.login-form__msg{color:#383838;line-height:1.4}.login-form__error{colo=
r:#e71a00}.login-form__link{text-decoration:none}.login-form__remember{f=
loat:right}.login-form__remember__label{color:#999;cursor:pointer}.login=
-form__domains{margin:15px 0 25px;border-bottom:1px solid #f0f0f0}.login=
-form__domains__item{display:inline-block;vertical-align:bottom;margin-b=
ottom:11px;padding:8px 6px;margin-left:4px;border-radius:4px;cursor:poin=
ter;-webkit-transition:box-shadow .1s ease-in;-moz-transition:box-shadow=
.1s ease-in;-o-transition:box-shadow .1s ease-in;transition:box-shadow =
.1s ease-in}.login-form__domains__item:first-child{margin-left:0}.login-=
form__domains__item_mail{border-radius:6px;padding:5px 6px;background:#4=
57ca9;background:-moz-linear-gradient(top, #457ca9 0%, #27669b 100%);bac=
kground:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #=
457ca9), color-stop(100%, #27669b));background:-webkit-linear-gradient(t=
op, #457ca9 0%, #27669b 100%);background:-o-linear-gradient(top, #457ca9=
0%, #27669b 100%);background:-ms-linear-gradient(top, #457ca9 0%, #2766=
9b 100%);background:linear-gradient(to bottom, #457ca9 0%, #27669b 100%)=
;border-top:3px solid #fdfdfd;border-bottom:3px solid #fdfdfd;border-lef=
t:2px solid #fdfdfd;border-right:2px solid #fdfdfd}.login-form__domains_=
_item:hover{box-shadow:0 2px 5px rgba(0, 0, 0, 0.1)}.login-form__domains=
__item_active,.login-form__domains__item_active:hover{padding:7px 5px;bo=
rder:1px solid #ddd;box-shadow:0 1px 3px rgba(0, 0, 0, 0.2)}.login-form_=
_domains__item_mail.login-form__domains__item_active,.login-form__domain=
s__item_mail.login-form__domains__item_active:hover{border-radius:4px;pa=
dding:7px;border-color:#27669b;background:-moz-linear-gradient(top, #4b8=
0ac 0%, #256399 100%);background:-webkit-gradient(linear, left top, left=
bottom, color-stop(0%, #4b80ac), color-stop(100%, #256399));background:=
-webkit-linear-gradient(top, #4b80ac 0%, #256399 100%);background:-o-lin=
ear-gradient(top, #4b80ac 0%, #256399 100%);background:-ms-linear-gradie=
nt(top, #4b80ac 0%, #256399 100%);background:linear-gradient(to bottom, =
#4b80ac 0%, #256399 100%)}.login-form__domains__item__text{border-bottom=
:1px dashed #000;font-style:normal}.login-form__domains__item__logo{disp=
lay:block;height:17px;background-image:url("//img.imgsmail.ru/r/default/=
login/login-form__domains__item__logo.png");background-repeat:no-repeat}=
.login-form__domains__item__logo_mail{width:60px;background-position:-19=
1px 0}.login-form__domains__item__logo_yandex{width:40px;background-posi=
tion:-54px 0}.login-form__domains__item__logo_rambler{width:58px;backgro=
und-position:-94px 0}.login-form__domains__item__logo_qip{width:82px;bac=
kground-position:0 0}.login-form__domains__item__logo_gmail{width:39px;b=
ackground-position:-152px 0}.login-form__domains__item__logo_hotmail{wid=
th:96px;background-position:0 0}.login-form__domains__item__logo_yahoo{w=
idth:87px;background-position:0 0}.login-form__input{position:relative;z=
-index:100;width:292px;height:24px;margin:0;padding:0 21px 0 8px;line-he=
ight:1.6;border:1px solid #999;border-radius:4px;box-shadow:inset 1px 1p=
x 4px 0 rgba(0, 0, 0, 0.17);-webkit-transition:width .2s ease-out;-moz-t=
ransition:width .2s ease-out;-o-transition:width .2s ease-out;transition=
:width .2s ease-out}.login-form__input_error{border:1px solid #ce1900}.l=
ogin-form__input_stuck{width:195px;padding:0 8px;border-radius:4px 0 0 4=
px;border-right:0;-webkit-transition:none;-moz-transition:none;-o-transi=
tion:none;transition:none}.login-form__input_password{width:292px}.login=
-page_modern .login-form__select{display:block;position:absolute;z-index=
:100;right:0;top:0;width:111px;overflow:visible;opacity:1}.login-form__s=
elect__adjuster{display:none;position:absolute;width:100px;height:26px;r=
ight:21px;z-index:210;cursor:text}.login-form__select_collapsed .login-f=
orm__select__adjuster{display:block}.login-page_modern .login-form__sele=
ct_collapsed .form__select__box{display:none}.login-page_modern .login-f=
orm__select_collapsed .form__select__box{display:none}.login-form__selec=
t .form__select__box{display:inline-block;vertical-align:middle;width:11=
1px;height:26px;padding:0 23px 0 10px;border:1px solid #999;border-radiu=
s:4px;overflow:hidden;cursor:pointer;box-shadow:inset 1px 1px 4px 0 rgba=
(0, 0, 0, 0.17), -1px 0 1px 0 rgba(0, 0, 0, 0.1);font-size:12px;line-hei=
ght:24px;background-color:#fff;background:-moz-linear-gradient(top, rgba=
(255, 255, 255, 0.5) 0%, rgba(241, 241, 241, 0.5) 50%, rgba(220, 220, 22=
0, 0.5) 100%);background:-webkit-gradient(linear, left top, left bottom,=
color-stop(0%, rgba(255, 255, 255, 0.5)), color-stop(50%, rgba(241, 241=
, 241, 0.5)), color-stop(100%, rgba(220, 220, 220, 0.5)));background:-we=
bkit-linear-gradient(top, rgba(255, 255, 255, 0.5) 0%, rgba(241, 241, 24=
1, 0.5) 50%, rgba(220, 220, 220, 0.5) 100%);background:-o-linear-gradien=
t(top, rgba(255, 255, 255, 0.5) 0%, rgba(241, 241, 241, 0.5) 50%, rgba(2=
20, 220, 220, 0.5) 100%);background:-ms-linear-gradient(top, rgba(255, 2=
55, 255, 0.5) 0%, rgba(241, 241, 241, 0.5) 50%, rgba(220, 220, 220, 0.5)=
100%);background:linear-gradient(to bottom, rgba(255, 255, 255, 0.5) 0%=
, rgba(241, 241, 241, 0.5) 50%, rgba(220, 220, 220, 0.5) 100%)}.login-fo=
rm__select_error .form__select__box{border:1px solid #ce1900}.login-form=
__select_stuck .form__select__box{border-radius:0 4px 4px 0;border-left:=
0;box-shadow:inset 0 1px 3px 0 rgba(0, 0, 0, 0.17), -1px 0 0 0 rgba(0, 0=
, 0, 0.17)}.login-form__button_register{display:inline-block;vertical-al=
ign:top;height:25px;margin:0;padding:0 18px;border:1px solid #59891a;bor=
der-radius:4px;box-shadow:0 1px 3px 0 rgba(0, 0, 0, 0.4);line-height:24p=
x;color:#fff;text-decoration:none;text-shadow:0px -1px 0 rgba(0, 0, 0, 0=
.29);word-spacing:3px;cursor:pointer;background:#7abd23;background:-moz-=
linear-gradient(top, #7abd23 0%, #599b02 100%);background:-webkit-gradie=
nt(linear, left top, left bottom, color-stop(0%, #7abd23), color-stop(10=
0%, #599b02));background:-webkit-linear-gradient(top, #7abd23 0%, #599b0=
2 100%);background:-o-linear-gradient(top, #7abd23 0%, #599b02 100%);bac=
kground:-ms-linear-gradient(top, #7abd23 0%, #599b02 100%);background:li=
near-gradient(to bottom, #7abd23 0%, #599b02 100%)}.login-form__button_r=
egister:active,.login-form__button_register:focus,.login-form__button_re=
gister:link,.login-form__button_register:visited,.login-form__button_reg=
ister:hover{color:#fff}.login-form__button_register:hover{border-color:#=
769749;background:#a2d164;background:-moz-linear-gradient(top, #a2d164 0=
%, #8ab94e 100%);background:-webkit-gradient(linear, left top, left bott=
om, color-stop(0%, #a2d164), color-stop(100%, #8ab94e));background:-webk=
it-linear-gradient(top, #a2d164 0%, #8ab94e 100%);background:-o-linear-g=
radient(top, #a2d164 0%, #8ab94e 100%);background:-ms-linear-gradient(to=
p, #a2d164 0%, #8ab94e 100%);background:linear-gradient(to bottom, #a2d1=
64 0%, #8ab94e 100%)}.login-form__button_register:active{border-color:#3=
f6f00;background:#589a01;background:-moz-linear-gradient(top, #589a01 0%=
, #79bc22 100%);background:-webkit-gradient(linear, left top, left botto=
m, color-stop(0%, #589a01), color-stop(100%, #79bc22));background:-webki=
t-linear-gradient(top, #589a01 0%, #79bc22 100%);background:-o-linear-gr=
adient(top, #589a01 0%, #79bc22 100%);background:-ms-linear-gradient(top=
, #589a01 0%, #79bc22 100%);background:linear-gradient(to bottom, #589a0=
1 0%, #79bc22 100%)}.login-form__button_login{display:inline-block;verti=
cal-align:top;height:27px;margin:0;padding:0 18px;border:1px solid #3c5e=
82;border-radius:4px;box-shadow:0 1px 3px 0 rgba(0, 0, 0, 0.4);line-heig=
ht:24px;color:#fff;text-decoration:none;text-shadow:0px -1px 0 rgba(0, 0=
, 0, 0.29);word-spacing:3px;cursor:pointer;background:#5381b3;background=
:-moz-linear-gradient(top, #5381b3 0%, #315f92 100%);background:-webkit-=
gradient(linear, left top, left bottom, color-stop(0%, #5381b3), color-s=
top(100%, #315f92));background:-webkit-linear-gradient(top, #5381b3 0%, =
#315f92 100%);background:-o-linear-gradient(top, #5381b3 0%, #315f92 100=
%);background:-ms-linear-gradient(top, #5381b3 0%, #315f92 100%);backgro=
und:linear-gradient(to bottom, #5381b3 0%, #315f92 100%)}.login-form__bu=
tton_login:active,.login-form__button_login:focus,.login-form__button_lo=
gin:link,.login-form__button_login:visited,.login-form__button_login:hov=
er{color:#fff}.login-form__button_login:hover{border-color:#617992;backg=
round:#86a7ca;background:-moz-linear-gradient(top, #86a7ca 0%, #6e8fb3 1=
00%);background:-webkit-gradient(linear, left top, left bottom, color-st=
op(0%, #86a7ca), color-stop(100%, #6e8fb3));background:-webkit-linear-gr=
adient(top, #86a7ca 0%, #6e8fb3 100%);background:-o-linear-gradient(top,=
#86a7ca 0%, #6e8fb3 100%);background:-ms-linear-gradient(top, #86a7ca 0=
%, #6e8fb3 100%);background:linear-gradient(to bottom, #86a7ca 0%, #6e8f=
b3 100%)}.login-form__button_login:active{border-color:#224468;backgroun=
d:#305e91;background:-moz-linear-gradient(top, #305e91 0%, #5280b3 100%)=
;background:-webkit-gradient(linear, left top, left bottom, color-stop(0=
%, #305e91), color-stop(100%, #5280b3));background:-webkit-linear-gradie=
nt(top, #305e91 0%, #5280b3 100%);background:-o-linear-gradient(top, #30=
5e91 0%, #5280b3 100%);background:-ms-linear-gradient(top, #305e91 0%, #=
5280b3 100%);background:linear-gradient(to bottom, #305e91 0%, #5280b3 1=
00%)}.login-page_external{width:auto}.login-form__text_license{color:#99=
9;font-size:12px;margin-bottom:28px}.login-page_external__captcha_image{=
margin:0 0 19px 13px}.login-page_external__captcha_link{font-size:12px}.=
login-page_external .login-page__wrapper{margin:70px auto 0 auto}.form__=
input__fade{color:#999}.login-form__input_code{width:205px}.attachment__=
antivirus__files-status{posititon:relative;margin:0 10px 1px;padding-bot=
tom:4px;color:#33a206}.icon_files-status{position:relative;top:-2px}.att=
achment__antivirus__files-status__text{padding-left:3px}.attachment__ant=
ivirus__avstatus_error{color:#656972}.attachment__antivirus__avstatus_in=
fected{margin-top:5px;font-size:11px;color:#ff0010}.attachment__content-=
text{overflow-x:hidden}.attachment__preview{display:inline-block;margin:=
10px 0 0 2px;padding:3px;border-top:1px solid #e3e3e3;border-left:1px so=
lid #e3e3e3;border-right:1px solid #a3a3a3;border-bottom:1px solid #a3a3=
a3;box-shadow:1px 1px 1px 0 #bdbdbd}.player__icon{display:inline-block;b=
ackground-color:#fff;width:26px;height:24px;border:#d9deec solid 1px;bor=
der-radius:2px;cursor:pointer}.player__icon:hover{background-color:#fbfb=
fb}.player__icon_volume{display:inline-block;cursor:pointer;width:7px;he=
ight:12px;margin:6px 0 -2px 8px}.player{font-size:11px;font-family:Tahom=
a,sans-serif;color:#595959;line-height:22px;margin-top:5px}.player__play=
back{display:inline-block;height:24px;width:300px;border:#d9deec solid 1=
px;border-radius:2px;vertical-align:top;padding-left:7px;background-colo=
r:#fff}.player__trackbar{height:8px;position:relative;display:inline-blo=
ck;width:258px;cursor:pointer}.player__trackbar_volume{width:31px}.playe=
r__trackbar__default{position:absolute;background:url("data:image/png;ba=
se64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAICAYAAADwdn+XAAAAGXRFWHRTb2Z0d2FyZQB=
BZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpiPHjw4H8GBgZGICaZtrOzY2RioBCMGjA=
YDAAIMAAzuQsNaC0T5QAAAABJRU5ErkJggg=3D=3D") repeat-x 0 0 transparent;*ba=
ckground:url("//img.imgsmail.ru/r/default/ico/player_background.png");wi=
dth:100%;height:100%}.player__trackbar__active{position:absolute;backgro=
und:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAICAYAAADwd=
n+XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACZJREFUeNpi7DjO8=
N/y10HG42z2JNPlFv8ZmRgoBKMGDAYDAAIMABGRIA3yVmd4AAAAAElFTkSuQmCC") repeat=
-x 0 0 transparent;*background:url("//img.imgsmail.ru/r/default/ico/play=
er_background_active.png");height:100%}.player__trackbar__inactive{posit=
ion:absolute;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEU=
gAAABAAAAAICAYAAADwdn+XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllP=
AAAACFJREFUeNpiiIuL+3/w4EEGcmggYGBioBCMGjAYDAAIMADJYSOphNhvEgAAAABJRU5Er=
kJggg=3D=3D") repeat-x 0 0 transparent;*background:url("//img.imgsmail.r=
u/r/default/ico/player_background_inactive.png");height:100%}.player__tr=
ackbar__buffer{position:absolute;background-color:#d6f0ff;height:100%}.p=
layer__trackbar__progress{position:absolute;background-color:#a5da33;hei=
ght:100%}.player__trackbar__handle{position:absolute;height:18px;width:1=
1px;border:1px solid #5e5e5e;border-radius:3px;top:-6px;cursor:pointer;o=
pacity:0.8}.player__trackbar__handle_inner{width:3px;height:10px;margin:=
4px;background-color:#5e5e5e}.player__tooltip{position:absolute;display:=
block;top:-28px;background-color:#fff;border:1px solid #d2d2d2;padding:0=
4px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;=
-webkit-box-shadow:2px 2px 1px rgba(0, 0, 0, 0.25);-moz-box-shadow:2px 2=
px 1px rgba(0, 0, 0, 0.25);box-shadow:2px 2px 1px rgba(0, 0, 0, 0.25)}.p=
layer__volume{display:inline-block;width:57px;height:24px;border:#d9deec=
solid 1px;border-radius:2px;vertical-align:top;background-color:#fff}.n=
otify{position:fixed;top:24px;right:32px;padding:8px;z-index:65000;backg=
round:#fff;background:rgba(255, 255, 255, 0.95);border:1px solid #afafaf=
;border-radius:5px;-webkit-box-shadow:0 0 6px rgba(0, 0, 0, 0.15);-moz-b=
ox-shadow:0 0 6px rgba(0, 0, 0, 0.15);box-shadow:0 0 6px rgba(0, 0, 0, 0=
.15)}.notify__close{position:absolute;top:3px;right:6px;color:#ababab;fo=
nt-size:17px;line-height:17px;font-weight:bold;cursor:pointer}.notify-me=
ssage__title{margin-right:10px}.notify-message__title__text{font-weight:=
bold;vertical-align:middle}.notify-message__title__text_ok{color:#007128=
}.notify-message__title__text_error{color:#e80000}.notify-message__title=
__text_new{color:#0c59a1}.notify-message__title__text_loader{color:#666;=
margin-left:2px}.notify-message__message{margin-top:8px;margin-left:20px=
;font-size:11px}.notify-message__link{display:block;margin-top:2px;margi=
n-left:20px}.b-blockquote__ctrl{color:#0857A6;border-bottom:1px dotted #=
0857A6;cursor:pointer;display:inline-block}.b-blockquote__ctrl:hover{col=
or:#f60;border-bottom-color:#f60}.b-blockquote__body{display:none}.b-blo=
ckquote_expand .b-blockquote__body{display:block}.collector__provider{pa=
dding-top:5px;padding-bottom:35px}.collector__provider__item,.collector_=
_provider__item:link,.collector__provider__item:visited,.collector__prov=
ider__item:hover,.collector__provider__item:active,.collector__provider_=
_item:focus{display:inline-block;background-color:#fff;margin-right:10px=
;color:#666;font-size:12px;line-height:26px;vertical-align:middle}.colle=
ctor__provider__item__link,.collector__provider__item__link:link,.collec=
tor__provider__item__link:visited,.collector__provider__item__link:hover=
,.collector__provider__item__link:active,.collector__provider__item__lin=
k:focus{display:inline-block;padding:5px 10px;cursor:pointer}.collector_=
_provider__item__link:hover{-webkit-border-radius:3px;-moz-border-radius=
:3px;border-radius:3px;-webkit-box-shadow:0 0 2px #666666;-moz-box-shado=
w:0 0 2px #666666;box-shadow:0 0 2px #666666}.collector__provider__item_=
_link_settings,.collector__provider__item__link_settings:link,.collector=
__provider__item__link_settings:visited,.collector__provider__item__link=
_settings:hover,.collector__provider__item__link_settings:active,.collec=
tor__provider__item__link_settings:focus{display:inline-block;padding:12=
px 16px;cursor:pointer}.collector__provider__item__link_settings_hover{p=
adding:11px 15px !important;border:1px solid #e6e6e6;-webkit-border-radi=
us:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 10px 20px=
-17px black;-moz-box-shadow:0 10px 20px -17px black;box-shadow:0 10px 2=
0px -17px black}.collector__provider__item__link_settings_active{-webkit=
-box-shadow:none !important;-moz-box-shadow:none !important;box-shadow:n=
one !important;padding:11px 15px !important;cursor:default !important;bo=
rder:1px solid #e6e6e6;background:url("data:image/png;base64,iVBORw0KGgo=
AAAANSUhEUgAAAAEAAAAECAYAAABP2FU6AAAAHUlEQVR42mI4c+bMfyZeXl4GJk5OTgYmfn5=
+BsAAPqID2empAkAAAAAASUVORK5CYII=3D") repeat-x 0 0 transparent;*backgrou=
nd:none}.collector__provider__item__link_settings_active .icon_logo_opti=
ons{margin-top:3px;margin-bottom:-3px}.collector__provider__item_another=
-mail{display:inline-block;padding:0 25px 0 0;vertical-align:middle;back=
ground:transparent url("//img.imgsmail.ru/r/default/ico/anotherscorner.p=
ng") no-repeat 100% 0}.collector__provider__item_another-mail .collector=
__provider__item__link_settings{display:inline-block;height:32px;width:4=
5px;border:1px solid #e6e6e6;border-right-width:0;text-decoration:none;l=
ine-height:17px;padding:8px 0 8px 15px}.collector__provider__item_anothe=
r-mail .collector__provider__item__link_settings:hover{-webkit-box-shado=
w:none;-moz-box-shadow:none;box-shadow:none}input.collector__submit__res=
ult_filters{margin-left:0px}.collector__switcher{margin-right:5px}.theme=
Id{position:absolute;left:-10px;top:0;height:0;width:0;overflow:hidden}.=
passrecovery__title{margin-top:25px;margin-bottom:12px;font-size:16px;fo=
nt-weight:bold;color:#010101}.passrecovery__user{margin-bottom:25px;font=
-size:12px;color:#999999}.passrecovery__user__name{font-weight:bold;colo=
r:#010101}.passrecovery__ctrl-submit{text-align:right}.passrecovery__btn=
-submit{padding:3px;margin:0;overflow:visible;background:none;border:non=
e;vertical-align:middle;font-weight:bold;color:#fff;cursor:pointer}.pass=
recovery__btn-submit:-moz-focus-inner{border:0;padding:0}.passrecovery__=
btn-submit__inner{padding:0 26px;font-size:12px;font-family:arial, sans-=
serif;line-height:24px;border-radius:3px;background-position:0 0;box-sha=
dow:#154f0f 2px 2px 2px;background-color:#179000;background-image:-webki=
t-linear-gradient(top, #58ab42 0%, #4fb535 50%, #179000 50%, #08b600 100=
%);background-image:-moz-linear-gradient(top, #58ab42 0%, #4fb535 50%, #=
179000 50%, #08b600 100%);background-image:-o-linear-gradient(top, #58ab=
42 0%, #4fb535 50%, #179000 50%, #08b600 100%);background-image:linear-g=
radient(top, #58ab42 0%, #4fb535 50%, #179000 50%, #08b600 100%);cursor:=
pointer}.passrecovery__btn-submit_disable{cursor:auto}.passrecovery__btn=
-submit_disable .passrecovery__btn-submit__inner{box-shadow:#b2b2b2 2px =
2px 2px;background-color:#a2d399;background-image:-webkit-linear-gradien=
t(top, #c3e1bb 0%, #b5dbab 50%, #a2d399 50%, #9ce199 100%);background-im=
age:-moz-linear-gradient(top, #c3e1bb 0%, #b5dbab 50%, #a2d399 50%, #9ce=
199 100%);background-image:-o-linear-gradient(top, #c3e1bb 0%, #b5dbab 5=
0%, #a2d399 50%, #9ce199 100%);background-image:linear-gradient(top, #c3=
e1bb 0%, #b5dbab 50%, #a2d399 50%, #9ce199 100%);cursor:auto}.passrecove=
ry__ctrl-submit__helper{line-height:24px;color:#D0323B;vertical-align:mi=
ddle}.passremind-confirm{padding-top:13px;margin-bottom:16px;border-top:=
1px solid #ecedf2}.passremind-confirm_first{border-top:0 none}.passremin=
d-confirm_control{border-top:0 none}.passremind-confirm__parametr{margin=
-bottom:13px;font-size:14px;font-weight:bold}.passremind-confirm__desc{f=
ont-size:12px;margin-bottom:13px}.passremind-confirm__switcher__item{mar=
gin-right:28px}.passremind-confirm__switcher__item_helper{color:#a0a0a0}=
.password-recovery__remind__new{margin:120px auto;position:relative;widt=
h:650px}.password-recovery__remind-new-header{font-weight:normal}.passwo=
rd-recovery__remind__new-tabs{font-size:12px;position:relative;width:650=
px}.password-recovery__remind__new-tabs dt{cursor:pointer;display:block;=
float:left;height:30px;padding:23px 19px 15px}.password-recovery__remind=
__new-tabs dt.selected,.password-recovery__remind__new-tabs dd.selected{=
background-color:#eff4f9}.password-recovery__remind__new-tabs dt.selecte=
d{-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;borde=
r-radius:5px 5px 0 0}.password-recovery__remind__new-tabs dd.selected{-w=
ebkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.passwo=
rd-recovery__remind__new-tabs dt.selected{cursor:default;padding:12px}.p=
assword-recovery__remind__new-tabs dt.selected .pseudo-link{color:#333;c=
ursor:default;font-size:16px;line-height:28px}.password-recovery__remind=
__new-tabs dt.selected span{border-bottom:none}.password-recovery__remin=
d__new-tabs dd{clear:left;display:none;margin:0;padding:33px;position:re=
lative;top:-17px;width:582px}.password-recovery__remind__new-tabs dd.sel=
ected{display:block}.password-recovery__remind-new-button{margin-top:19p=
x}.password-recovery__remind__new-radio{display:block;float:left;margin:=
8px 18px 0 0}.password-recovery__remind__new-radio__phone .js-show{displ=
ay:none}.password-recovery__remind__new-radio__phone{margin-bottom:3px}.=
password-recovery__remind__new-radio__phone .password-recovery__remind__=
new-radio__text{color:#a2a6a9}.password-recovery__remind__new-radio__pho=
ne.once .password-recovery__remind__new-radio{display:none}.password-rec=
overy__remind__new-radio__phone.selected .password-recovery__remind__new=
-radio__text{color:#333}.password-recovery__remind__new-radio__phone.sel=
ected .js-show{display:inline}.password-recovery__remind__new-radio__pho=
ne.selected .js-hide{display:none}.password-recovery__remind__new-radio_=
_text,.password-recovery__remind__new-text__active,.password-recovery__r=
emind__new-text__email{font-size:18px;line-height:31px}.password-recover=
y__remind__new-text__active{color:#333}.password-recovery__remind__new-t=
ext__email{line-height:normal;margin-top:14px}.password-recovery__remind=
__new-tabs__header{font-size:13px;line-height:17px;margin:0 0 10px 0}.pa=
ssword-recovery__remind__new-tabs__header_error{color:red}.password-reco=
very__remind__new-link{border-bottom:1px dotted #215892;text-decoration:=
none}.password-recovery__remind__new-form__code{margin-right:18px;width:=
135px}.password-recovery__remind__new-input__code{margin:4px 0 8px 0}.pa=
ssword-recovery__remind__new-form__answer{width:395px}.password-recovery=
__remind__new-code__block{margin-top:14px}.password-recovery__remind__ne=
w-code__input{margin-bottom:12px;width:216px}.form__button_odnoklassniki=
,.form__button_odnoklassniki:focus{background:url("/css/neo/blocks/passr=
ecovery/odnoklassniki-small-logo.png") #cf6700 16px 5px no-repeat;height=
:26px;min-width:114px;padding:0 16px 2px 30px;-webkit-border-radius:4px;=
-moz-border-radius:4px;border-radius:4px;margin-right:21px;margin-left:0=
}.form__button_odnoklassniki:hover,.form__button_odnoklassniki:focus:hov=
er{background-color:#D3791F}.form__button_odnoklassniki:active,.form__bu=
tton_odnoklassniki:focus:active{background-color:#CE6804}.pseudo-link{cu=
rsor:pointer;display:inline-block;line-height:1em;border-bottom:1px dash=
ed;font-style:normal;text-decoration:none}.pseudo-link_with-icon{border-=
bottom:none}.pseudo-link_with-icon .pseudo-link__text{display:inline-blo=
ck;border-bottom:1px dashed}.pseudo-link_active_theme,.pseudo-link_activ=
e_theme:link,.pseudo-link_active_theme:visited,.pseudo-link_active_theme=
:hover,.pseudo-link_active_theme:active,.pseudo-link_active_theme:focus{=
border-bottom:0;cursor:default}.attachviewer{display:none;position:absol=
ute;width:100%;z-index:99;opacity:0;min-height:500px;min-width:960px;-we=
bkit-transition:opacity 0.025s linear, -webkit-transform 0.3s ease-out;-=
moz-transition:opacity 0.025s linear, -moz-transform 0.3s ease-out;-o-tr=
ansition:opacity 0.025s linear, -o-transform 0.3s ease-out;transition:op=
acity 0.025s linear, transform 0.3s ease-out}.attachviewer_visible{opaci=
ty:1}.attachviewer__wrap{position:relative;min-height:500px;height:100%;=
margin:0 36px;z-index:98;background:#fff}.attachviewer__inner{position:r=
elative;height:100%;overflow:hidden;min-height:500px;-webkit-box-shadow:=
0 0 3px 1px rgba(0, 0, 0, 0.4);-moz-box-shadow:0 0 3px 1px rgba(0, 0, 0,=
0.4);box-shadow:0 0 3px 1px rgba(0, 0, 0, 0.4);z-index:97}.attachviewer=
__inner__scroll{width:100%;height:100%}.attachviewer__inner_scroll .atta=
chviewer__inner__scroll{overflow:auto}.attachviewer__inner_scroll .attac=
hviewer__viewer_image{table-layout:auto}.attachviewer__inner_noscroll .a=
ttachviewer__viewer,.attachviewer__inner_noscroll .w-attachviewer__viewe=
r__image{display:block}.attachviewer__inner_noscroll .w-attachviewer__vi=
ewer__image{overflow:hidden;background:url("//img.imgsmail.ru/r/default/=
loader.gif") no-repeat center center}.attachviewer__inner_hidden-overflo=
w{overflow:hidden !important}.attachviewer__close{position:absolute;top:=
0;right:0;z-index:100;margin-left:15px;margin-right:10px;line-height:30p=
x;color:#0857a6;font-size:12px;text-decoration:none}.attachviewer__close=
:hover,.attachviewer__close:active,.attachviewer__close:focus{color:#f26=
d00}.attachviewer__close_msdoc{background:url("//img.imgsmail.ru/0.gif")=
0 0 repeat;top:0;right:0;width:22px;height:22px;margin:0}.attachviewer_=
_close_msdoc .icon_attachview_close,.attachviewer__close_msdoc .attachvi=
ewer__close__text{display:none}.attachviewer__resize{display:none;positi=
on:absolute;bottom:31px;width:72px;height:72px;z-index:98;margin-left:-3=
6px;left:50%;background:url("//img.imgsmail.ru/r/default/ico/ico__attach=
view_206.png") -375px 0 no-repeat black;border-radius:5px;cursor:pointer=
}.attachviewer__resize_minus{background-position:-303px 0}.attachviewer_=
_nav{display:none;position:absolute;top:50%;margin-top:-60px;width:28px;=
height:120px;background:#0857a6 url("//img.imgsmail.ru/r/default/ico/ico=
__attachview_206.png") no-repeat;cursor:pointer;z-index:96}.attachviewer=
__nav:hover{background-color:#004283}.attachviewer__nav_prev{left:-28px;=
background-position:-20px 45px;border-right:none;border-radius:10px 0 0 =
10px}.attachviewer__nav_next{right:-28px;background-position:-50px 45px;=
border-left:none;border-radius:0 10px 10px 0}.attachviewer__viewer{width=
:100%;height:100%;text-align:center;overflow:hidden}.attachviewer__viewe=
r__wrap{width:100%;height:100%}.attachviewer__toolbar{position:absolute;=
left:0;width:100%;height:30px;z-index:99}.attachviewer__toolbar_top{top:=
0;padding:0 10px;background:#fff;text-align:left}.attachviewer__toolbar_=
bottom{bottom:0;-webkit-transition:0.5s ease-out;-moz-transition:0.5s ea=
se-out;-o-transition:0.5s ease-out;transition:0.5s ease-out}.attachviewe=
r__toolbar_bottom:hover{background:none}.attachviewer__toolbar__link,.at=
tachviewer__toolbar__link:link,.attachviewer__toolbar__link:visited{marg=
in-right:15px;color:#0857a6;font-size:12px;text-decoration:none;cursor:p=
ointer}.attachviewer__toolbar__link:hover,.attachviewer__toolbar__link:a=
ctive,.attachviewer__toolbar__link:focus{color:#f26d00}.attachviewer__to=
olbar__link_download{margin-left:10px}.attachviewer__toolbar__subject{li=
ne-height:30px;font-size:14px;display:block;white-space:nowrap;overflow:=
hidden;margin-right:22px;text-decoration:none}.attachviewer__toolbar__su=
bject__link,.attachviewer__toolbar__subject__link:link,.attachviewer__to=
olbar__subject__link:visited,.attachviewer__toolbar__subject__link:hover=
,.attachviewer__toolbar__subject__link:active,.attachviewer__toolbar__su=
bject__link:focus{color:#0054a8}.attachviewer__toolbar__subject__text,.a=
ttachviewer__toolbar__subject__text:link,.attachviewer__toolbar__subject=
__text:visited,.attachviewer__toolbar__subject__text:hover,.attachviewer=
__toolbar__subject__text:active,.attachviewer__toolbar__subject__text:fo=
cus{color:#737373}.attachviewer__fileinfo{position:relative;z-index:99}.=
attachviewer__fileinfo_active:hover{cursor:pointer;background-color:#ccc=
;background-color:rgba(0, 0, 0, 0.08)}.attachviewer__filename{position:r=
elative;color:#303030;font-size:14px}.attachviewer__pager{position:absol=
ute;bottom:8px;right:10px;font-size:11px;z-index:99}.attachviewer__slide=
r{display:none;position:absolute;height:0;left:0;right:0;bottom:0;overfl=
ow:hidden;background:url("//img.imgsmail.ru/r/default/attaches/attachvie=
wer-gradient.png") repeat-x;z-index:97}.attachviewer__slider__nav{positi=
on:absolute;top:0;width:30px;height:120px;background:url("//img.imgsmail=
.ru/r/default/ico/ico__attachview_206.png") no-repeat;cursor:pointer;z-i=
ndex:3}.attachviewer__slider__nav_prev{left:0;background-position:-80px =
45px}.attachviewer__slider__nav_prev:hover{background-position:-140px 45=
px}.attachviewer__slider__nav_next{right:0;background-position:-110px 45=
px}.attachviewer__slider__nav_next:hover{background-position:-170px 45px=
}.attachviewer__slider__container{margin:5px 35px 0;overflow:hidden}.w-a=
ttachviewer__slider__list{overflow:hidden;position:relative;margin:0 aut=
o}.attachviewer__slider__list{position:absolute;padding:0;margin:0}.atta=
chviewer__slider__list__item{float:left;display:table;width:100px;height=
:100px;margin:6px;cursor:pointer}.attachviewer__slider__list__item:hover=
{border:1px solid #cad4df;margin:5px}.w-attachviewer__slider__list__item=
{position:relative;display:table-cell;text-align:center;vertical-align:t=
op}.attachviewer__slider__list__item__icon{float:none;left:auto !importa=
nt;margin:0 auto 10px !important;background-image:url("//img.imgsmail.ru=
/r/default/ico/ico__attach.png");top:5px}.attachviewer__slider__list__it=
em__name{width:90px;max-height:50px;margin:0 5px;color:#0857a6;font-size=
:11px;text-align:center;overflow:hidden;text-overflow:ellipsis}.attachvi=
ewer__slider__list__item__preview{position:absolute;top:5px;left:5px;wid=
th:90px;height:90px;text-align:center;background-color:#fff;overflow:hid=
den}.attachviewer__slider__list__item_selected,.attachviewer__slider__li=
st__item_selected:hover{border:none;margin:6px;background-color:#fff;-we=
bkit-box-shadow:0 0 2px 1px rgba(10, 111, 194, 0.85);-moz-box-shadow:0 0=
2px 1px rgba(10, 111, 194, 0.85);box-shadow:0 0 2px 1px rgba(10, 111, 1=
94, 0.85)}.attachviewer__viewer_image{display:table;table-layout:fixed;p=
adding:30px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;b=
ox-sizing:border-box;cursor:pointer}.w-attachviewer__viewer__image{displ=
ay:table-cell;text-align:center;vertical-align:middle;height:100%}.attac=
hviewer__viewer__image{visibility:hidden}.attachviewer__viewer_disabled{=
cursor:default}.attachviewer__viewer_archive,.attachviewer__viewer_other=
{left:50%;margin-left:-304px;overflow:hidden;position:relative;text-alig=
n:left;top:30%;width:600px;height:auto}.attachviewer__viewer_audio{width=
:710px}.attachviewer__viewer__info{margin-top:29px}.attachviewer__viewer=
__icon{width:300px;height:256px;background:url("//img.imgsmail.ru/r/defa=
ult/ico_file_big_228/blank.png") 50% 50% no-repeat;float:left}.attachvie=
wer__viewer__icon_arj,.attachviewer__viewer__icon_zipz,.attachviewer__vi=
ewer__icon_bzip2,.attachviewer__viewer__icon_bz2,.attachviewer__viewer__=
icon_gz,.attachviewer__viewer__icon_7z,.attachviewer__viewer__icon_rar,.=
attachviewer__viewer__icon_zip{background-image:url("//img.imgsmail.ru/r=
/default/ico_file_big_228/zip.png")}.attachviewer__viewer__icon_log,.att=
achviewer__viewer__icon_txt,.attachviewer__viewer__icon_c{background-ima=
ge:url("//img.imgsmail.ru/r/default/ico_file_big_228/txt.png")}.attachvi=
ewer__viewer__icon_ram,.attachviewer__viewer__icon_midi,.attachviewer__v=
iewer__icon_wav,.attachviewer__viewer__icon_ogg,.attachviewer__viewer__i=
con_aiff,.attachviewer__viewer__icon_flac,.attachviewer__viewer__icon_m4=
a,.attachviewer__viewer__icon_wma,.attachviewer__viewer__icon_mp3{backgr=
ound-image:url("//img.imgsmail.ru/r/default/ico_file_big_228/mp3.png")}.=
attachviewer__viewer__icon_msg,.attachviewer__viewer__icon_eml{backgroun=
d-image:url("//img.imgsmail.ru/r/default/ico_file_big_228/eml.png")}.att=
achviewer__viewer__icon_js,.attachviewer__viewer__icon_vbs,.attachviewer=
__viewer__icon_exe{background-image:url("//img.imgsmail.ru/r/default/ico=
_file_big_228/exe.png")}.attachviewer__viewer__icon_pdf{background-image=
:url("//img.imgsmail.ru/r/default/ico_file_big_228/pdf.png")}.attachview=
er__viewer__icon_flv,.attachviewer__viewer__icon_vmv,.attachviewer__view=
er__icon_mpg,.attachviewer__viewer__icon_3gp,.attachviewer__viewer__icon=
_mov,.attachviewer__viewer__icon_asf,.attachviewer__viewer__icon_mp4,.at=
tachviewer__viewer__icon_mpeg,.attachviewer__viewer__icon_avi{background=
-image:url("//img.imgsmail.ru/r/default/ico_file_big_228/video.png")}.at=
tachviewer__viewer__name{color:#444;font-size:16px;font-weight:bold;marg=
in-bottom:12px;overflow:hidden;padding-left:5px;text-overflow:ellipsis;w=
hite-space:nowrap}.attachviewer__inner_archive-source .attachviewer__vie=
wer__name__filename{max-width:200px;text-overflow:ellipsis;white-space:n=
owrap;overflow:hidden;display:inline-block}.attachviewer__inner_archive-=
source .attachviewer__viewer__name__filetype{display:inline-block;vertic=
al-align:top}.attachviewer__viewer__size{color:#666;margin-bottom:6px;fo=
nt-weight:bold;overflow:hidden;padding-left:5px}.attachviewer__viewer__a=
rchive-files{position:absolute;left:50%;top:15%;bottom:15%;overflow-y:hi=
dden;margin-top:0px;background-color:#ffffff;max-width:600px;right:0;mar=
gin-left:-148px;display:none;padding:35px 40px 40px 56px}.attachviewer__=
inner_archive-source .attachviewer__viewer_archive{margin-left:-500px;to=
p:15%;margin-top:28px}.attachviewer__inner_archive-source .attachviewer_=
_viewer__icon{float:none}.attachviewer__inner_archive-source .attachview=
er__viewer__info{margin-left:110px;margin-top:18px}.attachviewer__inner_=
archive-source .attachviewer__viewer__archive-files{display:block}.attac=
hviewer__viewer__show-source{line-height:22px}.attachviewer__viewer__sho=
w-source .icon{display:none}.attachviewer__viewer__show-source_loading .=
icon{display:inline-block}.attachviewer__inner_archive-source .attachvie=
wer__viewer__show-source{display:none}.attachviewer__viewer_msdoc{paddin=
g:12px 0 30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;b=
ox-sizing:border-box;background:url("//img.imgsmail.ru/r/default/loader.=
gif") no-repeat center center}.attachviewer__viewer_pdf,.attachviewer__v=
iewer_text{padding:30px 0;-webkit-box-sizing:border-box;-moz-box-sizing:=
border-box;box-sizing:border-box}.attachviewer__viewer_pdfwrap,.attachvi=
ewer__viewer_textwrap{height:100%;overflow:hidden;text-align:center;widt=
h:100%;border:1px solid #eee;border-width:1px 0;padding:0 10px;-webkit-b=
ox-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.a=
ttachviewer__viewer_textiframe{width:100%;height:100%}.attachviewer__pop=
up{width:100%}.attachviewer__popup .attachviewer__close{right:-13px;top:=
-31px}.attachviewer__popup .attachviewer__close .attachviewer__close__te=
xt{display:none}.attachviewer__popup .attachviewer{height:500px;top:30px=
;opacity:1;display:block}.attachviewer__popup .attachviewer__wrap{margin=
:0 30px}.attachviewer__popup .attachviewer__inner{overflow:visible;borde=
r:1px solid #ccc;background:#f2f4f6;-webkit-box-shadow:none;-moz-box-sha=
dow:none;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:b=
order-box;box-sizing:border-box}.attachviewer__popup .attachviewer__tool=
bar_bottom{bottom:-30px}.attachviewer__popup .attachviewer__slider{borde=
r-top:1px solid #ccc;margin:0 1px 31px;-webkit-box-sizing:border-box;-mo=
z-box-sizing:border-box;box-sizing:border-box;background-color:#eff2f4;b=
ackground-image:-webkit-gradient(linear, left top, left bottom, from(whi=
te), to(#eff2f4));background-image:-webkit-linear-gradient(top, white, #=
eff2f4);background-image:-moz-linear-gradient(top, white, #eff2f4);backg=
round-image:-ms-linear-gradient(top, white, #eff2f4);background-image:-o=
-linear-gradient(top, white, #eff2f4);background-image:linear-gradient(t=
o bottom, white, #eff2f4);filter:progid:DXImageTransform.Microsoft.gradi=
ent(startColorstr=3D'white',endColorstr=3D'#eff2f4')}.attachviewer__popu=
p .attachviewer__nav{background-color:#356ca4;width:30px;height:74px;mar=
gin-top:-37px;z-index:100}.attachviewer__popup .attachviewer__nav:hover{=
background-color:#14467a}.attachviewer__popup .attachviewer__nav_prev{bo=
rder-radius:0;left:-30px;background-position:-248px 23px}.attachviewer__=
popup .attachviewer__nav_next{border-radius:0;right:-30px;background-pos=
ition:-272px 23px}.attachviewer__popup .attachviewer__toolbar_top{top:-3=
1px;padding-left:0;padding-right:0}.attachviewer__download__wrap{display=
:inline-block;vertical-align:top;margin-top:1px}.attachviewer__popup .at=
tachviewer__filename__wrap{font-weight:normal;color:#303030;position:rel=
ative;top:10px}.attachviewer__popup .attachviewer__filename{max-width:35=
%;display:inline-block;white-space:nowrap;overflow:hidden;vertical-align=
:top}.attachviewer__popup .attachviewer__filename .attachviewer__filenam=
e__text{margin-left:5px;display:inline-block}.attachviewer__popup .attac=
hviewer__filename .icon{margin-top:-10px}.attachviewer__popup .attachvie=
wer__pager{left:50%;width:100px;text-align:center;margin-left:-50px;colo=
r:#666;bottom:auto;top:13px}.attachviewer__popup .attachviewer__sliderSw=
itcher{position:absolute;right:30px;top:10px;color:#0857A6}.attachviewer=
__popup .attachviewer__fileinfo{margin:0 -30px;height:37px}.attachviewer=
__popup .attachviewer__fileinfo__wrap{margin:0 30px;height:37px}.attachv=
iewer__popup .attachviewer__fileinfo .attachviewer__sliderSwitcher{displ=
ay:none}.attachviewer__popup .attachviewer__fileinfo_active .attachviewe=
r__sliderSwitcher{display:block}.attachviewer__popup .attachviewer__file=
info_active:hover{background:#ecf4fc}.attachviewer__popup .attachviewer_=
_sliderSwitcher:hover{color:#F26D00}.attachviewer__popup .attachviewer__=
viewer_pdf,.attachviewer__popup .attachviewer__viewer_text,.attachviewer=
__popup .attachviewer__viewer_image,.attachviewer__popup .attachviewer__=
viewer_msdoc{padding-top:0;padding-bottom:0}.attachviewer__popup .attach=
viewer__viewer_msdoc{overflow:hidden}.attachviewer__popup .attachviewer_=
_viewer_msdoc .attachviewer__viewer__wrap{margin-top:-20px}.attachviewer=
__popup .attachviewer__viewer_pdf .attachviewer__viewer_pdfwrap,.attachv=
iewer__popup .attachviewer__viewer_text .attachviewer__viewer_textwrap{b=
order:none;padding-left:0;padding-right:0}.attachviewer__viewer__name,.a=
ttachviewer__viewer__size{padding-left:0}.attachlist{border-top:1px soli=
d #D9D9D9;padding:13px 0}.attachlist__header{margin:0 10px 20px}.attachl=
ist__header__count{font-weight:bold}.attachlist__header__link{margin-lef=
t:10px;font-weight:bold}.attachlist__header__filename{color:#666}.attach=
list__header__wrap{display:inline-block;position:relative;margin-right:1=
0px;bottom:-6px}.attachlist__header__mode{display:inline-block;height:22=
px;position:relative;background-image:url("//img.imgsmail.ru/r/default/i=
co/ico__attachview_206.png");background-position:-204px -22px;width:43px=
;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;use=
r-select:none}.attachlist__header__mode__button_short{cursor:pointer}.at=
tachlist__header__mode_short{background-position:-204px 0}.attachlist__h=
eader__mode_short .attachlist__header__mode__button_full{cursor:pointer}=
.attachlist__header__mode_short .attachlist__header__mode__button_short{=
cursor:default}.attachlist__header__mode__button{display:inline-block;wi=
dth:21px;height:22px}.attachlist__body{margin:0 10px}.attachlist__item{f=
loat:left;display:table;margin:0 10px 10px 0;padding:10px;text-align:cen=
ter;border:1px solid #d9deed;cursor:pointer}.attachlist__item:hover{bord=
er-color:#aeb2be}.w-attachlist__item{display:table-cell;width:130px;heig=
ht:130px;text-align:center;vertical-align:middle}.attachlist__item__prev=
iew{text-align:center}.attachlist__item__preview__icon{float:none;displa=
y:inline-block;left:auto !important;margin:0 0 5px 0 !important;backgrou=
nd-image:url("//img.imgsmail.ru/mail/ru/images/ru/_sp_ico_attach.png")}.=
attachlist__item__preview__image{display:inline-block;width:90px;height:=
90px;margin-bottom:5px;background-position:center center;background-repe=
at:no-repeat}.attachlist__item__filename{width:130px;font-size:11px;text=
-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}=
.attachlist__item__footer{font-size:11px;text-align:center}.filesearch__=
thumbnail__wrap{width:212px;display:inline-block}.filesearch__thumbnail{=
margin:10px;padding:13px 13px 6px;border:1px solid #d9deed;background:#f=
ff;cursor:pointer;-webkit-border-radius:7px;-moz-border-radius:7px;borde=
r-radius:7px}@media screen and (min-width: 1px){.filesearch__thumbnail__=
wrap,.filesearch__thumbnail__wrap{width:33.33%;text-align:center}.filese=
arch__thumbnail{margin:10px 0;width:166px;text-align:left;display:inline=
-block}}@media screen and (min-width: 1236px){.attachlist .filesearch__t=
humbnail__wrap,.messagelist_files-search .filesearch__thumbnail__wrap{wi=
dth:25%}}@media screen and (min-width: 1490px){.attachlist .filesearch__=
thumbnail__wrap,.messagelist_files-search .filesearch__thumbnail__wrap{w=
idth:20%}}@media screen and (min-width: 1725px){.attachlist .filesearch_=
_thumbnail__wrap,.messagelist_files-search .filesearch__thumbnail__wrap{=
width:16.66%}}.filesearch__thumbnail__info{margin-top:10px;overflow:hidd=
en;white-space:nowrap;line-height:19px}.filesearch__thumbnail__checkbox{=
margin-left:-4px}.filesearch__thumbnail__body,.filesearch__thumbnail__bo=
dy:link,.filesearch__thumbnail__body:visited,.filesearch__thumbnail__bod=
y:hover,.filesearch__thumbnail__body:active,.filesearch__thumbnail__body=
:focus{color:#999;text-decoration:none;cursor:pointer}.filesearch__thumb=
nail__download{color:#999;margin-left:-3px}.filesearch__thumbnail__downl=
oad__link{text-decoration:none}.filesearch__thumbnail:hover{border:1px s=
olid #aeb2bf}.filesearch__thumbnail__preview{-webkit-border-radius:3px;-=
moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:1px 1px 5px r=
gba(0, 0, 0, 0.4);-moz-box-shadow:1px 1px 5px rgba(0, 0, 0, 0.4);box-sha=
dow:1px 1px 5px rgba(0, 0, 0, 0.4);width:160px;height:120px;border:2px s=
olid #fff;margin:0 auto;text-align:center;background-color:#fff;overflow=
:hidden}.filesearch__thumbnail__download .icon_filedownload{margin-botto=
m:-6px}.filesearch__thumbnail__icon{height:124px;background:url("//img.i=
mgsmail.ru/r/default/filesearch/icons_228/middle/other.png") 50% 50% no-=
repeat;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:no=
ne;user-select:none}.filesearch__thumbnail__icon_html{background-image:u=
rl("//img.imgsmail.ru/r/default/filesearch/icons_228/middle/html.png")}.=
filesearch__thumbnail__icon_jpg,.filesearch__thumbnail__icon_jpeg,.files=
earch__thumbnail__icon_gif,.filesearch__thumbnail__icon_bmp,.filesearch_=
_thumbnail__icon_psd,.filesearch__thumbnail__icon_tga,.filesearch__thumb=
nail__icon_ai,.filesearch__thumbnail__icon_tif,.filesearch__thumbnail__i=
con_tiff,.filesearch__thumbnail__icon_eps,.filesearch__thumbnail__icon_p=
ng{background-image:url("//img.imgsmail.ru/r/default/filesearch/icons_22=
8/middle/jpg.png")}.filesearch__thumbnail__icon_arj,.filesearch__thumbna=
il__icon_zipz,.filesearch__thumbnail__icon_bzip2,.filesearch__thumbnail_=
_icon_bz2,.filesearch__thumbnail__icon_gz,.filesearch__thumbnail__icon_7=
z,.filesearch__thumbnail__icon_rar,.filesearch__thumbnail__icon_zip{back=
ground-image:url("//img.imgsmail.ru/r/default/filesearch/icons_228/middl=
e/zip.png")}.filesearch__thumbnail__icon_log,.filesearch__thumbnail__ico=
n_txt,.filesearch__thumbnail__icon_c{background-image:url("//img.imgsmai=
l.ru/r/default/filesearch/icons_228/middle/txt.png")}.filesearch__thumbn=
ail__icon_ram,.filesearch__thumbnail__icon_midi,.filesearch__thumbnail__=
icon_wav,.filesearch__thumbnail__icon_ogg,.filesearch__thumbnail__icon_a=
iff,.filesearch__thumbnail__icon_flac,.filesearch__thumbnail__icon_m4a,.=
filesearch__thumbnail__icon_wma,.filesearch__thumbnail__icon_mp3{backgro=
und-image:url("//img.imgsmail.ru/r/default/filesearch/icons_228/middle/m=
p3.png")}.filesearch__thumbnail__icon_msg,.filesearch__thumbnail__icon_e=
ml{background-image:url("//img.imgsmail.ru/r/default/filesearch/icons_22=
8/middle/eml.png")}.filesearch__thumbnail__icon_js,.filesearch__thumbnai=
l__icon_vbs,.filesearch__thumbnail__icon_exe{background-image:url("//img=
.imgsmail.ru/r/default/filesearch/icons_228/middle/exe.png")}.filesearch=
__thumbnail__icon_pdf{background-image:url("//img.imgsmail.ru/r/default/=
filesearch/icons_228/middle/pdf.png")}.filesearch__thumbnail__icon_flv,.=
filesearch__thumbnail__icon_vmv,.filesearch__thumbnail__icon_mpg,.filese=
arch__thumbnail__icon_3gp,.filesearch__thumbnail__icon_mov,.filesearch__=
thumbnail__icon_asf,.filesearch__thumbnail__icon_mp4,.filesearch__thumbn=
ail__icon_mpeg,.filesearch__thumbnail__icon_avi{background-image:url("//=
img.imgsmail.ru/r/default/filesearch/icons_228/middle/mp4.png")}.filesea=
rch__thumbnail__icon_doc,.filesearch__thumbnail__icon_docx,.filesearch__=
thumbnail__icon_rtf,.filesearch__thumbnail__icon_wps,.filesearch__thumbn=
ail__icon_wpd{background-image:url("//img.imgsmail.ru/r/default/filesear=
ch/icons_228/middle/doc.png")}.filesearch__thumbnail__icon_xls,.filesear=
ch__thumbnail__icon_csv,.filesearch__thumbnail__icon_xlsx,.filesearch__t=
humbnail__icon_xlsb,.filesearch__thumbnail__icon_xlsm{background-image:u=
rl("//img.imgsmail.ru/r/default/filesearch/icons_228/middle/xls.png")}.f=
ilesearch__thumbnail__icon_ppt,.filesearch__thumbnail__icon_pptx,.filese=
arch__thumbnail__icon_pps,.filesearch__thumbnail__icon_ppsx{background-i=
mage:url("//img.imgsmail.ru/r/default/filesearch/icons_228/middle/ppt.pn=
g")}.filesearch__thumbnail__icon_folder{background-image:url("//img.imgs=
mail.ru/r/default/filesearch/icons_228/middle/folder.png")}.filesearch__=
popup__list .filesearch__thumbnail__wrap{width:33%}.popup__head .dropdow=
n__arrow{vertical-align:middle}.filesearch__popup__wrapper{width:682px;h=
eight:464px;overflow:auto;position:relative}.filesearch__popup__controls=
{z-index:1}.filesearch__popup__field__box{position:relative;margin-right=
:55px}.filesearch__popup__label__box{margin-right:77px}.filesearch__popu=
p__label__box .compose__header__label__box{background-color:#f5f7f9;padd=
ing:0}.filesearch__popup__label__box .compose__header__label__box:hover{=
background-color:rgba(0, 0, 0, 0.17) 100%;background-image:-webkit-gradi=
ent(linear, left top, left bottom, from(rgba(255, 255, 255, 0) 0%), to(r=
gba(0, 0, 0, 0.17) 100%));background-image:-webkit-linear-gradient(top, =
rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.17) 100%);background-image:-m=
oz-linear-gradient(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.17) 1=
00%);background-image:-ms-linear-gradient(top, rgba(255, 255, 255, 0) 0%=
, rgba(0, 0, 0, 0.17) 100%);background-image:-o-linear-gradient(top, rgb=
a(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.17) 100%);background-image:linea=
r-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.17) 100=
%)}.filesearch__popup__label__box .compose__header__label__box:active{ba=
ckground-color:rgba(255, 255, 255, 0) 100%;background-image:-webkit-grad=
ient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.17) 0%), to(rgb=
a(255, 255, 255, 0) 100%));background-image:-webkit-linear-gradient(top,=
rgba(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 100%);background-image:-=
moz-linear-gradient(top, rgba(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) =
100%);background-image:-ms-linear-gradient(top, rgba(0, 0, 0, 0.17) 0%, =
rgba(255, 255, 255, 0) 100%);background-image:-o-linear-gradient(top, rg=
ba(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 100%);background-image:line=
ar-gradient(to bottom, rgba(0, 0, 0, 0.17) 0%, rgba(255, 255, 255, 0) 10=
0%)}.filesearch__popup__button__box{position:absolute;top:0;right:0;widt=
h:70px}.filesearch__popup__button__box .form__button_submit{min-width:70=
px;width:70px;padding:0}.filesearch__popup__switcher__box{position:absol=
ute;top:2px;right:-55px}.filesearch__popup__label__box .dropdown__button=
:hover{border-color:transparent}.filesearch__popup__label__box .dropdown=
__button__text{margin-top:2px;margin-bottom:0;border-bottom:0}.filesearc=
h__popup__label__box .dropdown__arrow{margin-bottom:1px}.addressbook__la=
bel{margin:2px;font-size:12px;color:#000000;background-color:#ecf3f7;pad=
ding:2px 4px 1px;-webkit-border-radius:2px;-moz-border-radius:2px;border=
-radius:2px}.addressbook__label__text__link{color:#000000 !important;cur=
sor:pointer;text-decoration:none}.addressbook-mailru-v2 .b-letter__head =
.addressbook__label{background-color:#fff}.contact__labels .addressbook_=
_label{display:inline-block}.addressbook__labels__autocomplete__result{b=
ackground:none repeat scroll 0 0 #FFFFFF;list-style-type:none;margin:0 !=
important;padding:0 !important;-webkit-box-sizing:border-box;-moz-box-si=
zing:border-box;box-sizing:border-box;border:1px solid #85b8eb;box-shado=
w:2px 2px 1px rgba(0, 0, 0, 0.25)}.addressbook__labels__autocomplete__re=
sult__list{list-style-type:none;padding:0;margin:0}.addressbook__labels_=
_autocomplete__result__item{color:#000 !important;display:block;padding:=
3px 20px 3px 7px;text-decoration:none;white-space:nowrap;text-align:left=
}.addressbook__labels__autocomplete__result__item_active{background:#dde=
eff}.addressbook__suggest__block{width:322px;background-color:white;posi=
tion:absolute;z-index:1000;top:28px;width:291px;margin:0;padding:0;borde=
r:1px solid #8BAFD2;border-top-color:#B5B5B5;-webkit-border-radius:2px;-=
moz-border-radius:2px;border-radius:2px;background:white;font-size:12px;=
word-wrap:break-word}.addressbook__suggest__list{max-height:306px;overfl=
ow-y:auto;_height:expression(this.scrollHeight > 306 ? "333px" : "auto" =
);*position:relative;*zoom:1}.addressbook__suggest__item_selected{backgr=
ound:none repeat scroll 0 0 #DAE4ED}.addressbook__suggest__item__tick{ba=
ckground:none repeat scroll 0 0 #FFFBBF;font-weight:normal}.addressbook_=
_suggest__item{word-wrap:break-word;color:#000000;border:0 none;cursor:p=
ointer;display:block;overflow:hidden;padding:4px 40px 4px 7px;text-overf=
low:ellipsis;white-space:nowrap;text-align:left;font:12px/15px Arial, Ta=
homa, Verdana, sans-serif;position:relative}.addressbook__suggest__item_=
_hint{color:gray;display:block;font-size:11px;overflow:hidden;text-overf=
low:ellipsis;white-space:nowrap}.addressbook__suggest__item__image{heigh=
t:30px;width:30px;float:right;position:absolute;right:8px;top:5px}.addre=
ssbook__suggest_simple__block{border:1px solid #E7E8ED;background-color:=
white;z-index:30000;display:block}.addressbook__suggest_simple__item{mar=
gin:0;padding:2px 5px;cursor:default;font-size:12px;line-height:16px;ove=
rflow:hidden;color:#000}.addressbook__suggest_simple__item_selected{back=
ground-color:#DEDFE3;background-color:red}.contact__header{position:rela=
tive;padding:0;margin:15px 10px 0 20px}.contact__header__title{color:#44=
4444;font-size:18px;font-weight:bold;line-height:25px;margin:5px 0 10px =
1px;padding:0}.addressbook-mailru-v2 .contact__header,.addressbook-mailr=
u-v2 .contact__header__title{color:#333;margin:0}.contact__header__title=
__text{overflow:hidden;text-overflow:ellipsis;text-indent:20px}.contact_=
_header__icon{cursor:pointer;position:absolute;margin-top:2px}.contact__=
header__title__additional{color:#999999}.contact__header__additional{col=
or:#999999;font-size:12px;line-height:12px}.addressbook-mailru-v2 .conta=
ct__header__additional{margin-bottom:5px}.contact__emails{margin:14px 20=
px;padding:0;list-style:none;font-size:14px;line-height:24px}.contact__e=
mails__item{overflow:hidden;text-overflow:ellipsis}.contact__emails__ite=
m__first{font-size:17px}.contact__social{margin:14px 20px;padding:0;list=
-style:none;font-size:14px;line-height:25px}.contact__social__item{margi=
n:5px 0 0 18px;overflow:hidden;text-overflow:ellipsis}.contact__social__=
item__icon{position:absolute;margin-top:5px;margin-left:-18px}.contact__=
social__item__icon_agent{width:13px;height:13px;margin-top:6px}.contact_=
_phones{margin:15px 20px;padding:0;list-style:none;font-size:14px;line-h=
eight:17px}.contact__phones__item{margin:5px 0 0 30px}.contact__phones__=
item__type{color:#999999;font-size:11px;line-height:11px;position:absolu=
te;margin-top:5px;margin-left:-30px}.contact__phones__item__value{width:=
100%;overflow:hidden;text-overflow:ellipsis;display:block}.contact__job_=
_item__type{color:#999999;font-size:11px;line-height:11px}.contact__job{=
margin:18px 20px;font-size:14px;line-height:17px}.contact__job__item{ove=
rflow:hidden;text-overflow:ellipsis}.addressbook-mailru-v2 .contact__job=
__item:last-child::after{content:""}.addressbook-form{overflow:hidden;po=
sition:relative}.contact__address{margin:18px 20px;font-size:14px;line-h=
eight:16px}.contact__address__item{overflow:hidden;text-overflow:ellipsi=
s}.contact__comment{margin:18px 14px;padding:6px;background-color:#f4f7e=
4;font-size:14px;line-height:16px;-webkit-border-radius:2px;-moz-border-=
radius:2px;border-radius:2px}.contact__comment__item{text-overflow:ellip=
sis;width:100%;overflow:hidden}.contact__labels{margin:14px 20px 0}.cont=
act__avatar{width:90px;height:90px;margin:0 7px;border:0;-webkit-border-=
radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:tra=
nsparent;background-position:50% 50%;background-repeat:no-repeat;display=
:block}.loading-indicator{position:absolute;right:0;display:none}.highli=
ght-search{background:#fffbbf}.browser-alert{color:#fff;height:25px;line=
-height:25px;position:relative;background-color:#283d4f;background-image=
:-webkit-gradient(linear, left top, left bottom, from(#233544), to(#283d=
4f));background-image:-webkit-linear-gradient(top, #233544, #283d4f);bac=
kground-image:-moz-linear-gradient(top, #233544, #283d4f);background-ima=
ge:-ms-linear-gradient(top, #233544, #283d4f);background-image:-o-linear=
-gradient(top, #233544, #283d4f);background-image:linear-gradient(to bot=
tom, #233544, #283d4f);filter:progid:DXImageTransform.Microsoft.gradient=
(startColorstr=3D'#233544',endColorstr=3D'#283d4f')}.browser-alert__clos=
e{cursor:pointer;right:30px;width:20px;height:20px;position:absolute;fon=
t-size:18px;text-align:center}.browser-alert__text{text-align:center}.br=
owser-alert__text:before{opacity:.5;display:inline-block;content:'\21E7'=
;margin-right:50px}.browser-alert__text:after{opacity:.5;display:inline-=
block;content:'\21E7';margin-left:50px}.GlobalOfflineModeNoAuth .offline=
__noauth__hide{display:none}.GlobalOfflineMode .offline__hide{display:no=
ne}.GlobalOnlineMode .online__hide{display:none}.offline__indicator{marg=
in-right:7px;display:inline-block;position:relative;top:1px}.offline__in=
dicator_online{color:green}.offline__indicator_offline{color:red}.Global=
OfflineModeNoAuth #PH_authView{display:none}.highlight-phone{color:#0857=
a6;border-bottom:1px dotted #0857a6;cursor:pointer}.highlight-phone:hove=
r{color:#f26d00;border-bottom:1px dotted #f26d00}.pr-internal-sc{max-wid=
th:762px;padding:20px 5px 25px;margin:0 auto;border-radius:3px;color:#33=
3;background-color:#f2f2f2}.pr-internal-link:hover{cursor:pointer}.pr-in=
ternal-sc__title{font-size:18px;margin-bottom:3px}.pr-internal-sc__title=
,.pr-internal-sc__table{max-width:696px;margin:0 auto}.pr-internal-sc__t=
able td{width:33%;text-align:center;vertical-align:middle;font-size:12px=
}td.pr-internal-sc__done{width:72px}td.pr-internal-sc__desc{width:100%;f=
ont-size:14px}td.pr-internal-sc__done,td.pr-internal-sc__desc{padding-to=
p:17px}.pr-internal-sc__noconnect{padding-right:40px}.pr-internal-sc__no=
connect_arrow,.pr-internal-sc__connect_arrow{background-image:url("//img=
.imgsmail.ru/r/pr-internal/socialconnect/arrow.png");background-position=
:right center;background-repeat:no-repeat}.pr-internal-sc__connect{paddi=
ng-right:5px}.pr-internal-sc__connect_head{padding-bottom:4px}.pr-intern=
al-sc__connect_arrow{max-width:163px;padding-top:10px;padding-right:34px=
;margin:0 auto}.pr-internal-sc__screen{border-radius:4px;box-shadow:0 0 =
3px rgba(0, 0, 0, 0.2);width:197px;height:106px}.pr-internal-sc__table .=
pr-internal-sc__desc{text-align:left;padding-left:22px}.pr-internal-sc__=
link,.pr-internal-sc__link:link,.pr-internal-sc__link:visited,.pr-intern=
al-sc__link:active,.pr-internal-sc__link:hover{color:#333}.pr-internal-s=
c-btn{display:inline-block;width:157px;margin-bottom:5px;border-radius:3=
px;font-size:13px;text-align:left;text-decoration:none;background-image:=
url("//img.imgsmail.ru/r/pr-internal/socialconnect/btn-fb.png");backgrou=
nd-position:right center;background-repeat:no-repeat}.pr-internal-sc-btn=
__text{display:inline-block;padding:9px 9px 11px 45px;color:#fff}.pr-int=
ernal__button{text-decoration:none;white-space:nowrap;display:block;widt=
h:197px;height:36px;font-size:13px;background:url("//img.imgsmail.ru/r/p=
r-internal/socialconnect/button-fb.png") 0 0 no-repeat;margin:2px 0 0 -2=
px;cursor:pointer}.pr-internal__button__text{display:block;padding:9px 0=
0 45px;color:#fff}.pr-internal__header{min-height:28px;font-size:18px}.=
pr-internal__connected-text{height:38px;padding-left:20px;font-size:12px=
;background:url("//img.imgsmail.ru/r/pr-internal/socialconnect/connected=
__icon.png") 1px 10px no-repeat}.pr-internal__connected-text__wrap{paddi=
ng-top:11px}.mail-quote-collapse{height:17px;width:42px;overflow:hidden;=
margin-bottom:1em;cursor:pointer}.mail-quote-collapse:before{content:"=C2=
=B7=C2=B7=C2=B7";display:block;height:15px;width:40px;font-size:30px;fon=
t-weight:bold;background:#e8e8e8;border:1px solid #7a7b7c;text-align:cen=
ter;cursor:pointer}.mail-quote-collapse:hover:before{background:#d9d9d9}=
blockquote .mail-quote-collapse{width:auto;height:auto;cursor:text;overf=
low:visible;margin-bottom:auto}blockquote .mail-quote-collapse:before{di=
splay:none}.tutorial-shadow{position:fixed;top:0;left:0;width:100%;heigh=
t:100%;background:#000;opacity:0.7;z-index:10000}.tutorial-box{position:=
absolute;top:0;left:0;width:100%;height:100%;z-index:10001;background:ur=
l("//img.imgsmail.ru/r/default/tutorial/tutorial_shadow_top.png") repeat=
-x 0 0}.tutorial-box__addressbook{position:relative;width:90%;margin:0 a=
uto}.tutorial-box__addressbook_helper{position:relative;height:475px;cur=
sor:default}@font-face{font-family:'segoepr';src:url("//img.imgsmail.ru/=
r/default/tutorial/segoepr.eot");src:url("//img.imgsmail.ru/r/default/tu=
torial/segoepr.eot?#iefix") format("embedded-opentype"), url("//img.imgs=
mail.ru/r/default/tutorial/segoepr.ttf") format("truetype");font-weight:=
normal;font-style:normal}.tutorial-box__addressbook_helper_search{positi=
on:absolute;top:35px;right:-7px;width:343px;height:28px;background:url("=
//img.imgsmail.ru/r/default/tutorial/addressbook/tutorial_search.png") n=
o-repeat -57px 0}@media screen and (min-width: 1280px){.tutorial-box__ad=
dressbook_helper_search{width:353px;background-position:-47px -40px}}@me=
dia screen and (min-width: 1440px){.tutorial-box__addressbook_helper_sea=
rch{width:403px;background-position:3px -80px}}.tutorial-box__addressboo=
k_helper_search_wrapper{position:relative}.tutorial-box__addressbook_hel=
per_search_label{position:absolute;right:13px;top:4px;width:55px;color:#=
fff;text-align:center}.tutorial-box__addressbook_helper_search_arrow{pos=
ition:absolute;top:65px;right:315px;width:21px;height:75px;background:ur=
l("//img.imgsmail.ru/r/default/tutorial/addressbook/tutorial_search_arro=
w.png") no-repeat}.tutorial-box__addressbook_helper_search_text{position=
:absolute;top:111px;right:-7px;width:318px;height:75px;font-family:Segoe=
Print, segoepr, Arial, sans-serif;font-size:16px;color:#ddd;line-height=
:1.4}.tutorial-box__addressbook_helper_favorite{position:absolute;top:11=
0px;left:5px;width:384px;height:22px}.tutorial-box__addressbook_helper_f=
avorite_wrapper{position:relative}.tutorial-box__addressbook_helper_favo=
rite_center{display:inline-block;height:22px;vertical-align:top;line-hei=
ght:22px;padding:0 3px;color:#0857A6;background:url("//img.imgsmail.ru/r=
/default/tutorial/addressbook/tutorial_favorite_center.png")}.tutorial-b=
ox__addressbook_helper_favorite_left{width:25px;display:inline-block;hei=
ght:22px;vertical-align:top;background:url("//img.imgsmail.ru/r/default/=
tutorial/addressbook/tutorial_favorite_left.png") no-repeat}.tutorial-bo=
x__addressbook_helper_favorite_right{display:inline-block;width:11px;hei=
ght:22px;vertical-align:top;background:url("//img.imgsmail.ru/r/default/=
tutorial/addressbook/tutorial_favorite_right.png") no-repeat}.tutorial-b=
ox__addressbook_helper_favorite_arrow{position:absolute;top:-17px;left:1=
15px;width:63px;height:26px;background:url("//img.imgsmail.ru/r/default/=
tutorial/addressbook/tutorial_settings_arrow.png") no-repeat}.tutorial-b=
ox__addressbook_helper_favorite_text{position:absolute;top:-28px;left:18=
2px;width:360px;height:60px;font-family:Segoe Print, segoepr, Arial, san=
s-serif;font-size:16px;color:#ddd;line-height:1.4}.tutorial-box__address=
book_helper_settings{position:relative;line-height:22px;height:22px;colo=
r:#0857A6;padding-left:28px;background:url("//img.imgsmail.ru/r/default/=
tutorial/addressbook/tutorial_settings.png") no-repeat}.tutorial-box__ad=
dressbook_helper_settings_wrapper{position:absolute;top:262px;left:5px;w=
idth:586px;height:53px}.tutorial-box__addressbook_helper_settings_arrow{=
position:absolute;top:-2px;left:235px;width:61px;height:25px;background:=
url("//img.imgsmail.ru/r/default/tutorial/addressbook/tutorial_favorite_=
arrow.png") no-repeat}.tutorial-box__addressbook_helper_settings_text{po=
sition:absolute;top:4px;left:300px;width:318px;height:80px;font-family:S=
egoe Print, segoepr, Arial, sans-serif;font-size:16px;color:#ddd;line-he=
ight:1.4}.tutorial-box__addressbook_helper_import{position:absolute;top:=
328px;left:15px;width:227px;height:22px}.tutorial-box__addressbook_helpe=
r_import_left{display:inline-block;width:11px;height:22px;vertical-align=
:top;background:url("//img.imgsmail.ru/r/default/tutorial/addressbook/tu=
torial_import_left.png") no-repeat}.tutorial-box__addressbook_helper_imp=
ort_center{display:inline-block;height:22px;vertical-align:top;line-heig=
ht:20px;color:#999;text-decoration:underline;font-family:Tahoma, Arial, =
Verdana, sans-serif;font-size:11px;background:url("//img.imgsmail.ru/r/d=
efault/tutorial/addressbook/tutorial_import_center.png")}.tutorial-box__=
addressbook_helper_import_right{display:inline-block;width:10px;height:2=
2px;vertical-align:top;background:url("//img.imgsmail.ru/r/default/tutor=
ial/addressbook/tutorial_import_right.png") no-repeat}.tutorial-box__add=
ressbook_helper_import_wrapper{position:relative}.tutorial-box__addressb=
ook_helper_import_arrow{position:absolute;top:29px;left:0px;width:20px;h=
eight:54px;background:url("//img.imgsmail.ru/r/default/tutorial/addressb=
ook/tutorial_import_arrow.png") no-repeat}.tutorial-box__addressbook_hel=
per_import_text{position:absolute;top:57px;left:17px;width:318px;height:=
75px;font-family:Segoe Print, segoepr, Arial, sans-serif;font-size:16px;=
color:#ddd;line-height:1.4}.tutorial-box__addressbook_center{text-align:=
center}.tutorial-box__addressbook_center_title{color:#eee;font-size:48px=
;font-weight:bold;text-transform:uppercase;cursor:default}.tutorial-box_=
_addressbook_center_button{margin-top:33px;font-size:28px}.tutorial-box_=
_addressbook_center_button .form__button_submit,.tutorial-box__addressbo=
ok_center_button .form__button_submit:link,.tutorial-box__addressbook_ce=
nter_button .form__button_submit:visited,.tutorial-box__addressbook_cent=
er_button .form__button_submit:active,.tutorial-box__addressbook_center_=
button .form__button_submit:focus,.tutorial-box__addressbook_center_butt=
on .form__button_submit.form__button_disabled:hover,.tutorial-box__addre=
ssbook_center_button .form__button_submit.form__button_disabled:active,.=
tutorial-box__addressbook_center_button .form__button_submit.form__butto=
n_disabled:focus{height:58px;padding:0 40px 2px;border-radius:8px;margin=
-right:0px;line-height:56px;color:#eee}.b-nav{-webkit-user-select:none;-=
moz-user-select:none;-ms-user-select:none;user-select:none}.b-nav__group=
{border-top:1px solid transparent}.b-nav__group__name_droppable{cursor:p=
ointer}.b-nav__group__list{display:none}.b-nav__group .b-nav__group__nam=
e .b-nav__item__count{display:block}.b-nav__group_open{padding-bottom:8p=
x}.b-nav__group_open,.b-nav__group_open + .b-nav__group{padding-top:2px;=
margin-top:-2px}.b-nav__group_open:first-child{padding-top:0;margin-top:=
0;border-top-color:transparent}.b-nav__group_open .b-nav__group__list{di=
splay:block}.b-nav__group_open .b-nav__group__name .b-nav__item__count{d=
isplay:none}.b-nav__group_open .b-nav__group__name .b-nav__item__text{ma=
x-width:202px}.b-nav__group_open .b-nav__group__name .b-nav__item__text_=
_fade:after{right:1px}.b-nav__group_open .b-nav__item__arrow{border-left=
-color:transparent !important;top:9px}.b-nav__group_fade .b-nav__item_gr=
oup-name{background:url("//img.imgsmail.ru/r/default/mail-box/mail-box_f=
ade.gif") repeat 0 0}.b-nav__group_fade .b-nav__item_group-name .b-nav__=
item__text__fade:after{background:none}.b-nav__group_open.b-nav__group_f=
ade,.b-nav__group_create.b-nav__group_fade{background:none !important}.b=
-nav__group_open.b-nav__group_error .b-nav__group__name .b-nav__item__te=
xt,.b-nav__group_open.b-nav__group_pause .b-nav__group__name .b-nav__ite=
m__text{max-width:160px}.b-nav__group_open.b-nav__group_error .b-nav__it=
em_group-name .b-nav__item__text__fade:after,.b-nav__group_open.b-nav__g=
roup_pause .b-nav__item_group-name .b-nav__item__text__fade:after{right:=
42px}.b-nav__item{display:block;position:relative;margin-bottom:1px;padd=
ing-top:4px;padding-bottom:4px;padding-left:27px;line-height:15px;text-d=
ecoration:none}.b-nav__item__text{display:inline-block;vertical-align:mi=
ddle;overflow:hidden;white-space:nowrap;max-width:145px}.b-nav__item__te=
xt__fade{overflow:hidden;white-space:nowrap;overflow:hidden}.b-nav__item=
__text__fade:after{position:absolute;right:58px;display:block;width:14px=
;height:21px;top:0;content:'';background-repeat:repeat-y;background-posi=
tion:0 0}.b-nav__item_pad{padding-left:39px}.b-nav__item_pad .b-nav__ite=
m__text{max-width:133px}.b-nav__item_hover.b-nav__item_group-name{backgr=
ound:none}.b-nav__item_unread{font-weight:bold}.b-nav__item_group-name{p=
adding-bottom:5px;font-size:11px;text-transform:uppercase;cursor:pointer=
}.b-nav__item_group-name .b-nav__item__text{max-width:160px}.b-nav__item=
_group-name .b-nav__item__text__fade:after{right:42px}.b-nav__item_hr{fo=
nt-size:0;line-height:0;height:1px;margin:4px 9px;padding:0;background:#=
e7e7e7}.b-nav__item__arrow__box{cursor:default;display:block;position:ab=
solute;top:0;left:0;width:24px;height:24px}.b-nav__item__arrow{display:i=
nline-block;width:0;height:0;top:7px;left:9px;position:absolute;border:4=
px solid transparent}.b-nav__item__count{float:right;padding:1px 4px 1px=
;margin-left:10px;font-size:11px;font-family:Tahoma,Arial,Verdana,sans-s=
erif;font-weight:bold;-webkit-border-radius:2px;-moz-border-radius:2px;b=
order-radius:2px}.b-nav__item_group-name .b-nav__item__count{margin-top:=
-2px}.b-nav__item__clear{float:right}.b-nav__item__checkbox{display:inli=
ne-block;margin-right:10px}.b-nav__ico{position:relative;display:inline-=
block;width:16px;height:16px;margin-top:-4px;margin-bottom:-4px;text-ali=
gn:center}.b-nav__ico__left{left:-19px;margin-right:-20px}.b-nav__ico__r=
ight{position:absolute;top:0;right:0;margin-bottom:0;margin-top:2px}.b-n=
av__ico .icon{margin-bottom:0;margin-top:0}.icon_status{display:block;wi=
dth:16px;height:16px;font:0px/0 a;overflow:hidden}.icon_status_create{ba=
ckground:url("//img.imgsmail.ru/r/default/loader.gif") no-repeat 50% 50%=
}.icon_status_pause{background:url("//img.imgsmail.ru/r/default/ico/ico_=
_mail-box_pause.png") no-repeat 0 0}.icon_status_error{cursor:pointer;ba=
ckground:url("//img.imgsmail.ru/r/themes/default/icons.245.png") no-repe=
at 0 -60px}.b-nav__link{display:block;text-decoration:none;-webkit-user-=
select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}=
.b-nav__link_option{display:inline;font-size:11px;background:none}.b-nav=
__link_option:hover{background:none}.b-nav__link_option .b-nav__link__te=
xt{text-decoration:underline}.b-nav__link_option:hover .b-nav__link__tex=
t{text-decoration:none}.b-nav__link_dotted .b-nav__link__text{text-decor=
ation:none;border-bottom-width:1px;border-bottom-style:dotted}.toolkit .=
b-nav__group{margin-bottom:20px}.toolkit .b-nav__group__name_droppable{c=
ursor:pointer}.toolkit .b-nav__group__list{display:block}.toolkit .b-nav=
__item{white-space:nowrap;display:block;position:relative;line-height:20=
px;margin-bottom:2px;padding-top:4px;padding-right:10px;padding-bottom:2=
px;padding-left:15px;color:#333;text-decoration:none}.toolkit .b-nav__it=
em__arrow{display:none}.toolkit .b-nav__item__text{display:inline-block;=
overflow:hidden;white-space:nowrap;max-width:109px}.toolkit .b-nav__item=
__folding{display:block;cursor:pointer;position:absolute;top:0;left:0;he=
ight:24px;width:25px}.toolkit .b-nav__item__folding__arrow{position:abso=
lute;right:3px;top:10px;display:block;width:0;height:0;border-width:3px;=
border-style:solid;border-color:transparent;border-left-color:#c1c1c1}.t=
oolkit .b-nav__item__folding__arrow_open{border-left-color:transparent;b=
order-top-color:#c1c1c1;right:4px;top:11px}.toolkit .b-nav__item__foldin=
g:hover .b-nav__item__folding__arrow_close{border-left-color:#000000}.to=
olkit .b-nav__item__folding:hover .b-nav__item__folding__arrow_open{bord=
er-top-color:#000000}.toolkit .b-nav__item_pad,.toolkit .b-nav__item_pad=
_1{padding-left:25px}.toolkit .b-nav__item_pad .b-nav__item__text,.toolk=
it .b-nav__item_pad_1 .b-nav__item__text{max-width:99px}.toolkit .b-nav_=
_item_pad .b-nav__item__folding,.toolkit .b-nav__item_pad_1 .b-nav__item=
__folding{width:35px}.toolkit .b-nav__item_pad_2{padding-left:35px}.tool=
kit .b-nav__item_pad_2 .b-nav__item__text{max-width:89px}.toolkit .b-nav=
__item_pad_2 .b-nav__item__folding{width:45px}.toolkit .b-nav__item_pad_=
3{padding-left:45px}.toolkit .b-nav__item_pad_3 .b-nav__item__text{max-w=
idth:79px}.toolkit .b-nav__item_pad_3 .b-nav__item__folding{width:55px}.=
toolkit .b-nav__item_pad_4{padding-left:55px}.toolkit .b-nav__item_pad_4=
.b-nav__item__text{max-width:69px}.toolkit .b-nav__item_pad_4 .b-nav__i=
tem__folding{width:65px}.toolkit .b-nav__item_pad_5{padding-left:65px}.t=
oolkit .b-nav__item_pad_5 .b-nav__item__text{max-width:59px}.toolkit .b-=
nav__item_pad_5 .b-nav__item__folding{width:75px}.toolkit .b-nav__item_p=
ad_6{padding-left:75px}.toolkit .b-nav__item_pad_6 .b-nav__item__text{ma=
x-width:49px}.toolkit .b-nav__item_pad_6 .b-nav__item__folding{width:85p=
x}.toolkit .b-nav__item_hover{background-color:#f2f3f3}.toolkit .b-nav__=
item_hover.b-nav__item_group-name{background:none}.toolkit .b-nav__item_=
active{font-weight:bold;background:#f2f3f3}.toolkit .b-nav__item_unread{=
font-weight:bold}.toolkit .b-nav__item_droppable{background-color:rgba(2=
55, 200, 0, 0.3)}.toolkit .b-nav__item_group-name{padding-left:8px;paddi=
ng-bottom:5px;font-size:12px;font-weight:bold;text-transform:uppercase}.=
toolkit .b-nav__item_hr{font-size:0;line-height:0;height:1px;margin:4px =
9px;padding:0;background:#e7e7e7}.toolkit .b-nav__item__count{float:righ=
t;padding:1px 4px 1px;margin-left:10px;font-size:11px;border-radius:2px;=
background:#f0f0f0}.toolkit .b-nav__item__clear{float:right}.toolkit .b-=
nav__item__extra{position:absolute;right:0}.toolkit .b-nav__item__checkb=
ox{display:inline-block;margin-right:10px}.toolkit .b-nav__item__items_c=
lose{display:none}.toolkit .b-nav__ico{display:inline-block;margin-right=
:5px;text-align:center;color:#d5d5d5;width:16px;height:17px;margin-left:=
9px;vertical-align:middle}.toolkit .ico{width:16px;height:16px;display:i=
nline-block}.toolkit .ico_folder{background:url("http://img.imgsmail.ru/=
r/themes/default/icons.308.png") -100px 0 no-repeat}.toolkit .b-nav__lin=
k{display:block;text-decoration:none}.toolkit .b-nav__link:hover{backgro=
und:#f6f6f6}.toolkit .b-nav__link__text{color:#999999}.toolkit .b-nav__l=
ink_option{display:inline;font-size:11px;background:none}.toolkit .b-nav=
__link_option:hover,.toolkit .b-nav__link:hover.b-nav__link_option{backg=
round:none}.toolkit .b-nav__link_option .b-nav__link__text{text-decorati=
on:underline}.toolkit .b-nav__link_option:hover .b-nav__link__text{text-=
decoration:none}.toolkit .b-nav__link_dotted .b-nav__link__text{text-dec=
oration:none;border-bottom:1px dotted #999}.toolkit .b-nav__link_dotted:=
hover .b-nav__link__text{background:none;border-bottom:none}body{backgro=
und-color:white}a,a:active,a:focus,a:link,a:visited{color:#0857a6}a:hove=
r{color:#f26d00}.theme{background-color:white;background-image:none;back=
ground-repeat:repeat;background-position:center top;background-attachmen=
t:scroll}.theme__left{background-image:none;background-repeat:repeat-y;b=
ackground-position:left top}.theme__right{background-image:none;backgrou=
nd-repeat:repeat-y;background-position:right top}.theme__top{background-=
image:none;background-repeat:repeat-x;background-position:center 69px}.t=
heme__bottom{background-image:none;background-repeat:repeat-x;background=
-position:center bottom}.theme__left-center{background-image:none;backgr=
ound-repeat:no-repeat;background-position:left center}.theme__right-cent=
er{background-image:none;background-repeat:no-repeat;background-position=
:right center}.theme__top-center{background-image:none;background-repeat=
:no-repeat;background-position:center 69px}.theme__bottom-center{backgro=
und-image:none;background-repeat:no-repeat;background-position:center bo=
ttom}.theme__center{background-image:none;background-repeat:no-repeat;ba=
ckground-position:center center}.theme__top-left{background-image:none;b=
ackground-repeat:no-repeat;background-position:left 69px}.theme__top-rig=
ht{background-image:none;background-repeat:no-repeat;background-position=
:right 69px}.theme__bottom-left{background-image:none;background-repeat:=
no-repeat;background-position:left bottom}.theme__bottom-right{backgroun=
d-image:none;background-repeat:no-repeat;background-position:right botto=
m}.icon_folders{background-image:url("//img.imgsmail.ru/r/themes/default=
/icons.308.png")}.icon_info-state{background-image:url("//img.imgsmail.r=
u/r/themes/default/icons.308.png")}.icon_message{background-image:url("/=
/img.imgsmail.ru/r/themes/default/icons.308.png")}.icon_compose{backgrou=
nd-image:url("//img.imgsmail.ru/r/themes/default/icons.308.png")}.icon_l=
oader{background-color:transparent;background-image:url("//img.imgsmail.=
ru/r/default/loader.gif")}.icon_paging-horizontal{background-image:url("=
//img.imgsmail.ru/r/themes/default/icons.308.png")}.icon_paging-vertical=
{background-image:url("//img.imgsmail.ru/r/themes/default/icons.308.png"=
)}.icon_kav-protected{background-image:url("//img.imgsmail.ru/r/themes/d=
efault/icons.308.png")}.icon_message-flag{background-image:url("//img.im=
gsmail.ru/r/themes/default/icons.308.png")}.icon_message-status{backgrou=
nd-image:url("//img.imgsmail.ru/r/themes/default/icons.308.png")}.icon_f=
iledownload{background-image:url("//img.imgsmail.ru/r/themes/default/ico=
ns.308.png")}.icon_attach{background-image:url("//img.imgsmail.ru/r/them=
es/default/icons.308.png")}.icon_priority{background-image:url("//img.im=
gsmail.ru/r/themes/default/icons.308.png")}.icon_messagesent{background-=
image:url("//img.imgsmail.ru/r/themes/default/icons.308.png")}.icon_mess=
agesent-bullet{background-image:url("//img.imgsmail.ru/r/themes/default/=
icons.308.png")}.icon_themes-type{background-image:url("//img.imgsmail.r=
u/r/themes/default/icons.308.png")}.button-a,.button-a:focus,.button-a:l=
ink,.button-a:visited{border-color:#8cb0d2 #6c92b7 #5279a0 #6c92b7;color=
:black;background:white url(data:image/gif;base64,R0lGODlhBQAUAMQAAO/z+O=
Tr88XT5uHo8vb4+/j6/Ozw99Db6sjV5/L1+dLe7tXf7f39/tvk7+ju9fv8/cvY6ePs+P///w=
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAB=
QAAAUxoCSOJGOaT5oWLEu8byLLQF0bOO7se+D7g2CwQSQujseDUglpNhFQqGA6VVitkWw2BA=
A7) repeat-x 0 bottom;*background:white}.button-a:hover{color:black;bord=
er-color:#5176a4 #496c9a #2b4a73 #496c9a;background:#f4f8fe url(data:ima=
ge/gif;base64,R0lGODlhBQAUAMQAAKO305iuzc/e87nJ3qq+2s/a69Xg7tzm8srX6PP3/p=
yyzr/O4urw+cTS5e/0/Ku+1+Tr9rLE2/T4/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
AAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFABQAAAUxoCSOZGKaTpoyLAu97yHLRl0XOI7se+=
P7i2BwQCRGjseHUgloNhVQaGA6JVitgmw2BAA7) repeat-x 0 bottom;*background:#f=
4f8fe}.button-a:active,.button-a_active,.button-a_active:active,.button-=
a_active:focus,.button-a_active:link,.button-a_active:hover,.button-a_ac=
tive:visited{color:black;border-color:#5176a4 #496c9a #2b4a73 #496c9a;ba=
ckground:#bbcbda url(data:image/gif;base64,R0lGODlhBQAUAMQAAPD2+9vk7snW4=
rvL2unw9uzy+O70+c3Z5b7N29Ld6MTS4MHP3dfh697n7/L3/PT5/ebu9eHp8fr8/uTr8wAAA=
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFABQAAAUz4=
CCKSFkuKKqsq+C6RxwnNM3cd6DrTd9HQOBkOIQYjYRkssBkGp5PgFTqqFYfWKxkuw0BADs=3D=
) repeat-x 0 bottom;*background:#bbcbda}.button-a_disabled,.button-a_dis=
abled:active,.button-a_disabled:focus,.button-a_disabled:hover,.button-a=
_disabled:link,.button-a_disabled:visited{color:#9ca2b0;border-color:#bb=
cdde #bbcdde #bbcdde #bbcdde;background:white url(data:image/gif;base64,=
R0lGODlhBQAUAMQAAPz9/vj5/Oft9fP2+enu9fb4++zw9+rw9/T3+u7z+PL2/OTr9Obs9Pn6=
/Pv8/f3+/vH0+f7+/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
ACH5BAAAAAAALAAAAAAFABQAAAUxoCSOZGSaT5oCLOu8byPLQV0XOI7s++D7kGAwQSQajkeC=
UiloNhlQ6GI6PVitimw2BAA7) repeat-x 0 bottom;*background:white}.compose__=
header__row_uploader .form__button_default,.compose__header__row_uploade=
r .form__button_default:focus,.compose__header__row_uploader .form__butt=
on_default:link,.compose__header__row_uploader .form__button_default:vis=
ited{border-color:#8cb0d2 #6c92b7 #5279a0 #6c92b7;color:black;background=
:white url(data:image/gif;base64,R0lGODlhBQAUAMQAAO/z+OTr88XT5uHo8vb4+/j=
6/Ozw99Db6sjV5/L1+dLe7tXf7f39/tvk7+ju9fv8/cvY6ePs+P///wAAAAAAAAAAAAAAAAA=
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFABQAAAUxoCSOJGOaT5o=
WLEu8byLLQF0bOO7se+D7g2CwQSQujseDUglpNhFQqGA6VVitkWw2BAA7) repeat-x 0 bo=
ttom;*background:white;filter:none}.compose__header__row_uploader .form_=
_button_default:hover{color:black;border-color:#5176a4 #496c9a #2b4a73 #=
496c9a;background:#f4f8fe url(data:image/gif;base64,R0lGODlhBQAUAMQAAKO3=
05iuzc/e87nJ3qq+2s/a69Xg7tzm8srX6PP3/pyyzr/O4urw+cTS5e/0/Ku+1+Tr9rLE2/T4=
/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAF=
ABQAAAUxoCSOZGKaTpoyLAu97yHLRl0XOI7se+P7i2BwQCRGjseHUgloNhVQaGA6JVitgmw2=
BAA7) repeat-x 0 bottom;*background:#f4f8fe}.compose__header__row_upload=
er .form__button_default:active{color:black;border-color:#5176a4 #496c9a=
#2b4a73 #496c9a;background:#bbcbda url(data:image/gif;base64,R0lGODlhBQ=
AUAMQAAPD2+9vk7snW4rvL2unw9uzy+O70+c3Z5b7N29Ld6MTS4MHP3dfh697n7/L3/PT5/e=
bu9eHp8fr8/uTr8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAA=
AALAAAAAAFABQAAAUz4CCKSFkuKKqsq+C6RxwnNM3cd6DrTd9HQOBkOIQYjYRkssBkGp5PgF=
TqqFYfWKxkuw0BADs=3D) repeat-x 0 bottom;*background:#bbcbda}.compose__he=
ader__row_uploader .form__button_default .form__dropdown__add-more-field=
s__arrow,.compose__header__row_uploader .form__button_default:focus .for=
m__dropdown__add-more-fields__arrow,.compose__header__row_uploader .form=
__button_default:link .form__dropdown__add-more-fields__arrow,.compose__=
header__row_uploader .form__button_default:visited .form__dropdown__add-=
more-fields__arrow{border-color:black transparent transparent}.compose__=
header__row_uploader .form__button_default:hover .form__dropdown__add-mo=
re-fields__arrow{border-color:black transparent transparent}.compose__he=
ader__row_uploader .form__button_default:active .form__dropdown__add-mor=
e-fields__arrow{border-color:black transparent transparent}.messagelist-=
wrapper{background:white}.messagelist__dropdown__clip .icon_attach{backg=
round-image:url("//img.imgsmail.ru/r/themes/default/icons.308.png")}.mes=
sagelist__messages{color:#999999}.messagelist__messages__message_warning=
{color:red}.messageline{border-top-color:#e6e6e6;padding-right:75px}.mes=
sageline:hover{border-top-color:#e6e6e6;background-color:white}.messagel=
ine_unread{background-color:transparent}.messageline_selected,.messageli=
ne_selected:hover{border-top-color:#edebcd;background-color:#fefbd8}.mes=
sageline_disabled{background-color:#fefbd8}.messagelist_search .messagel=
ine{padding-right:205px}.messageline__body__link,.messageline__body__lin=
k:link,.messageline__body__link:visited,.messageline__body__link:active,=
.messageline__body__link:focus{color:#0857a6}.messageline__body__link:ho=
ver{color:#f26d00}.messageline:hover .messageline__body__link,.messageli=
ne:hover .messageline__body__link:link,.messageline:hover .messageline__=
body__link:visited,.messageline:hover .messageline__body__link:active,.m=
essageline:hover .messageline__body__link:focus{color:#0857a6}.messageli=
ne:hover .messageline__body__link:hover .contactline__body__name,.messag=
eline:hover .messageline__body__link:hover .messageline__body__name,.mes=
sageline:hover .messageline__body__link:hover .messageline__body__subjec=
t,.messageline:hover .messageline__body__link:hover .messageline__body__=
filesize,.messageline:hover .messageline__body__link:hover .messageline_=
_folder{color:#f26d00}.messageline_selected .messageline__body__link,.me=
ssageline_selected .messageline__body__link:link,.messageline_selected .=
messageline__body__link:visited,.messageline_selected .messageline__body=
__link:active,.messageline_selected .messageline__body__link:focus,.mess=
ageline_selected:hover .messageline__body__link,.messageline_selected:ho=
ver .messageline__body__link:link,.messageline_selected:hover .messageli=
ne__body__link:visited,.messageline_selected:hover .messageline__body__l=
ink:active,.messageline_selected:hover .messageline__body__link:focus{co=
lor:#0857a6}.messageline_selected .messageline__body__link:hover .messag=
eline__body__name,.messageline_selected .messageline__body__link:hover .=
messageline__body__subject,.messageline_selected .messageline__body__lin=
k:hover .messageline__folder,.messageline_selected:hover .messageline__b=
ody__link:hover .messageline__body__name,.messageline_selected:hover .me=
ssageline__body__link:hover .messageline__body__subject,.messageline_sel=
ected:hover .messageline__body__link:hover .messageline__folder{color:#f=
26d00}.messageline__body__name,.messageline__body__subject,.messageline_=
_folder{text-decoration:none}.messageline__body__link:hover .messageline=
__body__name,.messageline__body__link:hover .messageline__body__subject,=
.messageline__body__link:hover .messageline__folder{text-decoration:none=
}.messageline__date{color:#656972;padding-left:0}.messageline:hover .mes=
sageline__date{color:#656972;background-color:white}.messageline_selecte=
d .messageline__date,.messageline_selected:hover .messageline__date{colo=
r:#656972;background-color:#fefbd8}.messageline__body__text{color:#99999=
9;right:80px}.messageline:hover .messageline__body__text{color:#656972}.=
messageline_selected .messageline__body__text,.messageline_selected:hove=
r .messageline__body__text{color:#656972}.messageline__body__filesize{co=
lor:#656972}.messageline_selected .messageline__body__filesize,.messagel=
ine_selected:hover .messageline__body__filesize{color:#656972}.messageli=
ne__folder{background-color:white}.messageline:hover .messageline__folde=
r{background-color:white}.messageline_selected .messageline__folder,.mes=
sageline_selected:hover .messageline__folder{background-color:#fefbd8}.m=
essageline__fade{display:block;border-right-color:white;background:url(d=
ata:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAICAYAAABte3YfAAAAGXR=
FWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFFJREFUeNpi/P//PwMUcAMxHxA=
LArEIEIsCsRgQi0NpMaiYCFQNSC0PSOP/PzdJ1svIos5Drr1MDEMQUM3R/4eioxmHoqMZRh0=
96ujBAQACDAC+1QoB5WGw5gAAAABJRU5ErkJggg=3D=3D);*background:none}.message=
line:hover .messageline__fade{border-right-color:white}.messageline_sele=
cted .messageline__fade,.messageline_selected:hover .messageline__fade{b=
order-right-color:#fefbd8}.messageline__readStatus{background-image:url(=
"//img.imgsmail.ru/r/themes/default/icons.308.png")}.messageline__microf=
ormat__button,.messageline__microformat__button:link,.messageline__micro=
format__button:visited,.messageline__microformat__button:active,.message=
line__microformat__button:focus{color:#0857a6;text-decoration:none}.mess=
ageline__microformat__button:hover{color:#f26d00;text-decoration:none}.m=
essageline:hover .messageline__microformat__button,.messageline:hover .m=
essageline__microformat__button:link,.messageline:hover .messageline__mi=
croformat__button:visited,.messageline:hover .messageline__microformat__=
button:active,.messageline:hover .messageline__microformat__button:focus=
{color:#0857a6}.messageline:hover .messageline__microformat__button:hove=
r{color:#f26d00}.messageline_selected .messageline__microformat__button,=
.messageline_selected .messageline__microformat__button:link,.messagelin=
e_selected .messageline__microformat__button:visited,.messageline_select=
ed .messageline__microformat__button:active,.messageline_selected .messa=
geline__microformat__button:focus,.messageline_selected:hover .messageli=
ne__microformat__button,.messageline_selected:hover .messageline__microf=
ormat__button:link,.messageline_selected:hover .messageline__microformat=
__button:visited,.messageline_selected:hover .messageline__microformat__=
button:active,.messageline_selected:hover .messageline__microformat__but=
ton:focus{color:#0857a6}.messageline_selected .messageline__microformat_=
_button:hover,.messageline_selected:hover .messageline__microformat__but=
ton:hover{color:#f26d00}.messageline__avatar{border-color:#e6e6e6;backgr=
ound-color:#fff}.messageline:hover .messageline__avatar{border-color:#e6=
e6e6;background-color:#fff}.messageline_selected .messageline__avatar,.m=
essageline_selected:hover .messageline__avatar{border-color:#edebcd;back=
ground-color:#fff}.messageline__attach__arrow{border-top-color:#656972}.=
messageline:hover .messageline__attach__arrow{border-top-color:#656972}.=
messageline_selected .messageline__attach__arrow,.messageline_selected:h=
over .messageline__attach__arrow{border-top-color:#656972}.contactline__=
body__emails,.contactline__body__phones{color:#999999}.messageline_selec=
ted .contactline__body__emails,.messageline_selected:hover .contactline_=
_body__emails,.messageline_selected .contactline__body__phones,.messagel=
ine_selected:hover .contactline__body__phones{color:#656972}.options__wr=
apper{background:white;padding:0}.options__wrapper_themes{background:whi=
te;padding:0}.options__index__link,.options__index__link:active,.options=
__index__link:focus,.options__index__link:link,.options__index__link:vis=
ited{color:#0857a6}.options__index__link:hover{color:#f26d00}.options__i=
ndex__help,.options__index__help:active,.options__index__help:focus,.opt=
ions__index__help:hover,.options__index__help:link,.options__index__help=
:visited{color:#676a73}.options__title-link,.options__title-link:active,=
.options__title-link:focus,.options__title-link:link,.options__title-lin=
k:visited{color:#0857a6}.options__title-link:hover{color:#f26d00}.option=
s__themes-list__overlay{background:white}.options__themes-list__item,.op=
tions__themes-list__item:active,.options__themes-list__item:focus,.optio=
ns__themes-list__item:link,.options__themes-list__item:visited{backgroun=
d:white;border-color:white;color:#0857a6}.options__themes-list__item:hov=
er{background:white;border-color:#cccccc;color:#0857a6;box-shadow:0 1px =
3px -1px #cccccc}.options__themes-list__item_selected,.options__themes-l=
ist__item_selected:active,.options__themes-list__item_selected:hover,.op=
tions__themes-list__item_selected:focus,.options__themes-list__item_sele=
cted:link,.options__themes-list__item_selected:visited{background:white;=
border-color:#cccccc;color:#0857a6;box-shadow:0 1px 3px -1px #cccccc}.op=
tions__themes-list__item__pic{border-color:#cccccc}.options__themes-list=
__item__text:after{display:block;background:url(data:image/png;base64,iV=
BORw0KGgoAAAANSUhEUgAAAB4AAAABCAYAAADJsB7sAAAAP0lEQVQIHQXBQQqAIBAAwBE6FR=
mCbob//1Tv6L7NlMyEDTsudEw8WFhYmAg0nCgA+b0HKho6BgI3AoGBjob6A2FzB8AU+FE7AA=
AAAElFTkSuQmCC);*background:none}.options__themes-list__item:hover .opti=
ons__themes-list__item__text:after{background:url(data:image/png;base64,=
iVBORw0KGgoAAAANSUhEUgAAAB4AAAABCAYAAADJsB7sAAAAP0lEQVQIHQXBQQqAIBAAwBE6=
FRmCbob//1Tv6L7NlMyEDTsudEw8WFhYmAg0nCgA+b0HKho6BgI3AoGBjob6A2FzB8AU+FE7=
AAAAAElFTkSuQmCC);*background:none}.options__themes-list__item_selected =
.options__themes-list__item__text:after{background:url(data:image/png;ba=
se64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAABCAYAAADJsB7sAAAAP0lEQVQIHQXBQQqAIBA=
AwBE6FRmCbob//1Tv6L7NlMyEDTsudEw8WFhYmAg0nCgA+b0HKho6BgI3AoGBjob6A2FzB8A=
U+FE7AAAAAElFTkSuQmCC);*background:none}.content__page{background:white;=
padding:0}.content__page_themes{background:white;padding:15px 0 0 0}.con=
tent__header__title{color:#444444}.content__header__help,.content__heade=
r__help:active,.content__header__help:focus,.content__header__help:link,=
.content__header__help:visited{color:#0857a6}.content__header__help:hove=
r{color:#f26d00}.form__actions_floating .form__actions__inner{padding-le=
ft:404px}.themes-type-list__item__link{color:#0857a6}.settings__themes-l=
ist__overlay{background:white}.leftcol{background:white;border-top-color=
:transparent;border-top-width:0px;border-right-color:#d5d5d5;border-righ=
t-width:1px;border-bottom-color:transparent;border-bottom-width:0px;bord=
er-left-color:transparent;border-left-width:0px;padding-top:0;padding-ri=
ght:9px;padding-bottom:0;padding-left:0}.leftcol__banners__promobox,.lef=
tcol__banners__promobox-list{background:white;border-top-color:transpare=
nt;border-top-width:0px;border-right-color:#d5d5d5;border-right-width:1p=
x;border-bottom-color:transparent;border-bottom-width:0px;border-left-co=
lor:transparent;border-left-width:0px;padding-left:0;padding-right:9px}.=
leftcol__sep-wrapper{background:white;border-top-color:transparent;borde=
r-top-width:0px;border-right-color:#d5d5d5;border-right-width:1px;border=
-bottom-color:transparent;border-bottom-width:0px;border-left-color:tran=
sparent;border-left-width:0px;margin-top:-1px;padding-right:9px;padding-=
left:0}.leftcol__sep,.leftcol__banners__promobox-list__wrapper{border-bo=
ttom-color:#d5d5d5;border-bottom-width:1px}.leftcol__banners__promobox,.=
leftcol__banners__promobox-list{margin-top:-1px}.leftcol__banners__promo=
box__wrapper,.leftcol__banners__promobox-list__wrapper{border-top-color:=
#d5d5d5;border-top-width:1px}.leftcol__banners__promobox-list__title__li=
nk:link,.leftcol__banners__promobox-list__title__link:visited,.leftcol__=
banners__promobox-list__title__link:active,.leftcol__banners__promobox-l=
ist__title__link:focus{color:#0857a6;text-decoration:none}.leftcol__bann=
ers__promobox-list__title__link:hover{color:#0857a6;text-decoration:none=
}.leftcol__banners__separator{margin-left:0;margin-right:9px;border-top-=
color:#d5d5d5;border-top-width:1px}.rb_QuestionsDiv,.rb_AnswersDiv{backg=
round:white;border-top-color:transparent;border-top-width:0px;border-rig=
ht-color:#d5d5d5;border-right-width:1px;border-bottom-color:transparent;=
border-bottom-width:0px;border-left-color:transparent;border-left-width:=
0px;padding-left:0 !important;padding-right:9px !important;margin-top:-1=
px !important;color:black}.rb_QuestionsDiv form{border-top-color:#d5d5d5=
;border-top-width:1px;border-bottom-color:#d5d5d5;border-bottom-width:1p=
x}.menu__header__text{color:#0857a6}.menu__item__hr{background:#d5d5d5}.=
menu__option__link_color,.menu__option__link_color:active,.menu__option_=
_link_color:focus,.menu__option__link_color:hover,.menu__option__link_co=
lor:link,.menu__option__link_color:visited{color:#999999}.menu__item__li=
nk_color,.menu__item__link_color:active,.menu__item__link_color:focus,.m=
enu__item__link_color:hover,.menu__item__link_color:link,.menu__item__li=
nk_color:visited{color:#0857a6}.menu__item__link,.menu__item__link:activ=
e,.menu__item__link:focus,.menu__item__link:hover,.menu__item__link:link=
,.menu__item__link:visited{color:#0857a6}.menu__item__link:hover,.menu__=
item__link_hover{background:#ebf0f6;color:#0857a6}.menu__item__link_coll=
ector{color:#0857a6}.menu__item__link__text{text-decoration:none}.menu__=
item__link:hover .menu__item__link__text{text-decoration:none}.menu__ite=
m__link_act:hover .menu__item__link__text{text-decoration:none}.menu__it=
em__link__text_linear:after{display:block;background:url(data:image/png;=
base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAABCAYAAADJsB7sAAAAP0lEQVQIHQXBQQqAI=
BAAwBE6FRmCbob//1Tv6L7NlMyEDTsudEw8WFhYmAg0nCgA+b0HKho6BgI3AoGBjob6A2FzB=
8AU+FE7AAAAAElFTkSuQmCC);*background:none}.menu__item__link:hover .menu_=
_item__link__text_linear:after,.menu__item__link_hover .menu__item__link=
__text_linear:after{background:url(data:image/png;base64,iVBORw0KGgoAAAA=
NSUhEUgAAAA4AAAAICAYAAADJEc7MAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmU=
AQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA1SURBVHjaYvz//z/Dm4/fuRkYGPiAWBCIRYBYFIj=
FgFgcSotBxUSgaviYGMgEoxppoREgwADpUAbVNuFbHAAAAABJRU5ErkJggg=3D=3D);*back=
ground:none}.menu__item__link_act .menu__item__link__text_linear:after,.=
menu__item__link_act:hover .menu__item__link__text_linear:after{backgrou=
nd:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7=
MAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTw=
AAABBSURBVHjaYvz//z/D7acfuBkYGPiAWBCIRRj+M4gyMDKIAdniQCwGxaJgOYgaPiYGbIC=
RgSBgYiATjGrEAwACDABdkQeyxxUf4gAAAABJRU5ErkJggg=3D=3D);*background:none}=
.menu__item__link_act,.menu__item__link_act:active,.menu__item__link_act=
:focus,.menu__item__link_act:hover,.menu__item__link_act:link,.menu__ite=
m__link_act:visited{color:#0857a6;background:#dae4ef}.menu__item__link__=
clear{color:#999999}.menu__item__link__clear_hover,.menu__item__link__cl=
ear:hover{color:#f26d00}.menu__item__slink,.menu__item__slink:active,.me=
nu__item__slink:focus,.menu__item__slink:hover,.menu__item__slink:link,.=
menu__item__slink:visited{color:#0857a6}.menu__item__slink:hover{color:#=
0857a6}.menu__option__link,.menu__option__link:active,.menu__option__lin=
k:link,.menu__option__link:focus,.menu__option__link:hover,.menu__option=
__link:visited{color:#999999}.menu__option__link:hover{color:#f26d00}.me=
nu__item__link__qnt{color:#0857a6;background:#dae4ef}.menu__item__link__=
qnt_collector{color:#dae4ef;background:#0857a6}.menu__item__link__qnt_se=
arch{color:#0857a6}.menu__item__link:hover .menu__item__link__qnt,.menu_=
_item__link_hover .menu__item__link__qnt{color:#0857a6;background:transp=
arent}.menu__item__link_act .menu__item__link__qnt,.menu__item__link_act=
:hover .menu__item__link__qnt{color:#0857a6;background:transparent}.back=
link__link,.backlink__link:active,.backlink__link:focus,.backlink__link:=
hover,.backlink__link:link,.backlink__link:visited{color:#0857a6}.backli=
nk__link:hover{color:#f26d00}.infobar_notice{background:#fefbd6;color:#6=
66666;border-bottom-color:#d6d3b2}.mail-box__name{color:#0857a6}.mail-bo=
x__arrow .dropdown__arrow{border-left-color:#0857a6}.mail-box__arrow .dr=
opdown__arrow__inner{background-color:#0857a6}.mail-box_open .mail-box__=
line,.mail-box_open + .mail-box_close{border-top-color:#d5d5d5}.mail-box=
_open .mail-box__arrow .dropdown__arrow{border-top-color:#0857a6}.mail-b=
ox___option_link{color:#999999;border-bottom-color:#999999}.mail-box_cre=
ate .mail-box__name{color:#999999}.mail-box_create .dropdown__arrow{bord=
er-left-color:#999999}.mail-box_open.mail-box_create .dropdown__arrow{bo=
rder-top-color:#999999}.mail-box_create .dropdown__arrow__inner{backgrou=
nd-color:#999999}.mail-box_openLast{border-bottom-color:#d5d5d5}.mailbox=
-size{color:#999999}.mailbox-size__scale{border-color:#a8a8a8 #c9c9c9 #c=
9c9c9 #a8a8a8;filter:progid:DXImageTransform.Microsoft.Gradient(StartCol=
orStr=3D#efefef,EndColorStr=3D#fdfdfd,GradientType=3D0 );background-colo=
r:#f3f3f3;background:-moz-linear-gradient(top, #efefef 0%, #fdfdfd 100%)=
;background:-webkit-gradient(linear, left top, left bottom, color-stop(0=
%, #efefef), color-stop(100%, #fdfdfd));background:-webkit-linear-gradie=
nt(top, #efefef 0%, #fdfdfd 100%);background:-o-linear-gradient(top, #ef=
efef 0%, #fdfdfd 100%);background:-ms-linear-gradient(top, #efefef 0%, #=
fdfdfd 100%);background:linear-gradient(top, #efefef 0%, #fdfdfd 100%)}.=
mailbox-size__scale__fill{filter:progid:DXImageTransform.Microsoft.Gradi=
ent(StartColorStr=3D#dfdfdf,EndColorStr=3D #b6b6b6,GradientType=3D0 );ba=
ckground-color:#bababa;background:-moz-linear-gradient(top, #dfdfdf 0%, =
#b6b6b6 100%);background:-webkit-gradient(linear, left top, left bottom,=
color-stop(0%, #dfdfdf), color-stop(100%, #b6b6b6));background:-webkit-=
linear-gradient(top, #dfdfdf 0%, #b6b6b6 100%);background:-o-linear-grad=
ient(top, #dfdfdf 0%, #b6b6b6 100%);background:-ms-linear-gradient(top, =
#dfdfdf 0%, #b6b6b6 100%);background:linear-gradient(top, #dfdfdf 0%, #b=
6b6b6 100%)}.mailbox-size__link,.mailbox-size__link:active,.mailbox-size=
__link:focus,.mailbox-size__link:link,.mailbox-size__link:visited{color:=
#0857a6}.mailbox-size__link:hover{color:#f26d00}.kav-protected{color:#99=
9999}.kav-protected__link,.kav-protected__link:active,.kav-protected__li=
nk:focus,.kav-protected__link:link,.kav-protected__link:visited{color:#0=
857a6}.kav-protected__link:hover{color:#f26d00}.search__highlight,.searc=
h_tick{background-color:#fefbd8;color:#0857a6}.search__wrapper{backgroun=
d:white}.footer{margin-top:10px;background:#356fac url("//img.imgsmail.r=
u/r/portal/portal-menu/portal-menu__bg.png?v=3D1") repeat-x 0 -11px}.foo=
ter__links{color:white}.footer__links__link,.footer__links__link:link,.f=
ooter__links__link:visited,.footer__links__link:active,.footer__links__l=
ink:focus{color:white}.footer__links__link:hover{color:white}.footer__th=
eme-link{width:auto;height:auto;left:auto;top:auto;margin:0}.content__he=
ader__title{color:#444444}.toolbar{background:#e4ebf1 url(data:image/png=
;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAABkCAMAAAB5GQooAAAAPFBMVEXo7vXr8Pbq=
8Pbt8vfu8/jk6/Ht8vjo7vTs8vfo7fTs8ffm7fPp7/Xn7fPq7/Xm7PPl6/Lr8fft8/gAAADl=
teA+AAAAFHRSTlP/////////////////////////AE9P5xEAAABbSURBVCjP5dLLDYAwDARR=
JyFAwh/67xW0p5EsV4APr4Adp8G+S3fgKIucZZeXM8ksd7hCk5NscoMLPODprPL5gTVYgPtw=
N+7ZsLa5FmyUUdCX7ahf8BXRz+ijXhTJBf/hBUU+AAAAAElFTkSuQmCC) repeat-x 0 0;*=
background:#e4ebf1;border-bottom:1px solid #d9deed}.toolbar__message_err=
or{color:#e9221f}.toolbar__message_info{color:#999999}.toolbar__message_=
info__link,.toolbar__message_info__link:link,.toolbar__message_info__lin=
k:visited,.toolbar__message_info__link:hover,.toolbar__message_info__lin=
k:active,.toolbar__message_info__link:focus{color:#999999}.toolbar__alph=
abet__letter{color:#999999}.toolbar__alphabet__letter_available{color:#0=
857a6}.toolbar__alphabet{background-color:white}.toolbar__alphabet__lett=
er_available:hover{background-color:#e8e8e8;background-image:-webkit-gra=
dient(linear, left top, left bottom, from(white), to(#e8e8e8));backgroun=
d-image:-webkit-linear-gradient(top, white, #e8e8e8);background-image:-m=
oz-linear-gradient(top, white, #e8e8e8);background-image:-ms-linear-grad=
ient(top, white, #e8e8e8);background-image:-o-linear-gradient(top, white=
, #e8e8e8);background-image:linear-gradient(to bottom, white, #e8e8e8);f=
ilter:progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'white'=
,endColorstr=3D'#e8e8e8')}.toolbar__alphabet__letter_available.toolbar__=
alphabet__letter_prev:active,.toolbar__alphabet__letter_available.toolba=
r__alphabet__letter_next:active,.toolbar__alphabet__letter_active{backgr=
ound-color:#cccccc;background-image:-webkit-gradient(linear, left top, l=
eft bottom, from(white), to(#cccccc));background-image:-webkit-linear-gr=
adient(top, white, #cccccc);background-image:-moz-linear-gradient(top, w=
hite, #cccccc);background-image:-ms-linear-gradient(top, white, #cccccc)=
;background-image:-o-linear-gradient(top, white, #cccccc);background-ima=
ge:linear-gradient(to bottom, white, #cccccc);filter:progid:DXImageTrans=
form.Microsoft.gradient(startColorstr=3D'white',endColorstr=3D'#cccccc')=
;color:#0857a6}.toolbar__alphabet__arrow_left{border-right-color:#999999=
}.toolbar__alphabet__arrow_right{border-left-color:#999999}.toolbar__alp=
haber__arrow__inner{background-color:#999999}.toolbar__alphabet__letter_=
available .toolbar__alphabet__arrow_left{border-right-color:#0857a6}.too=
lbar__alphabet__letter_available .toolbar__alphabet__arrow_right{border-=
left-color:#0857a6}.toolbar__alphabet__letter_available .toolbar__alphab=
er__arrow__inner{background-color:#0857a6}.dropdown__button-link,.dropdo=
wn__button-link:active,.dropdown__button-link:focus,.dropdown__button-li=
nk:link,.dropdown__button-link:visited{color:#0857a6}.dropdown__button-l=
ink:hover{color:#f26d00}.dropdown__button-link .dropdown__arrow{border-t=
op-color:#0857a6}.dropdown__button-link:hover .dropdown__arrow{border-to=
p-color:#f26d00}.dropdown__button:hover{border-color:#8bafd2}.dropdown_d=
isabled .dropdown__button:hover{border-color:#999999}.dropdown__button__=
text{border-bottom-color:black;color:black}.dropdown_disabled .dropdown_=
_button__text{color:#999999;border-color:#999999}.dropdown__arrow{border=
-top-color:black}.dropdown__arrow__inner{background-color:black}.dropdow=
n_disabled .dropdown__arrow{border-top-color:#999999}.dropdown__icon_lis=
t{border-color:black}.dropdown__icon__inner_list{background:black}.dropd=
own_disabled .dropdown__arrow__inner{background-color:#999999}.dropdown_=
_list{box-shadow:2px 2px 2px -2px #656972;border-color:#9fc1eb;backgroun=
d:white}.dropdown__list__item__link,.dropdown__list__item__link:active,.=
dropdown__list__item__link:focus,.dropdown__list__item__link:link,.dropd=
own__list__item__link:visited,.dropdown__list__item__link:hover{color:bl=
ack}.dropdown__list__item__link:hover{background:#d4e3ff;color:black}.dr=
opdown__list_disabled .dropdown__list__item__link,.dropdown__list_disabl=
ed .dropdown__list__item__link:active,.dropdown__list_disabled .dropdown=
__list__item__link:focus,.dropdown__list_disabled .dropdown__list__item_=
_link:link,.dropdown__list_disabled .dropdown__list__item__link:visited,=
.dropdown__list_disabled .dropdown__list__item__link:hover,.dropdown__li=
st__item_disabled .dropdown__list__item__link,.dropdown__list__item_disa=
bled .dropdown__list__item__link:active,.dropdown__list__item_disabled .=
dropdown__list__item__link:focus,.dropdown__list__item_disabled .dropdow=
n__list__item__link:link,.dropdown__list__item_disabled .dropdown__list_=
_item__link:visited,.dropdown__list__item_disabled .dropdown__list__item=
__link:hover{color:#999999}.dropdown__list__item__more{background:#e9eff=
5;color:#656972}.dropdown__list__item__more_note{background:#fdf9c9;colo=
r:#656974}.dropdown__list__item__link_selected,.dropdown__list__item__li=
nk_selected:active,.dropdown__list__item__link_selected:focus,.dropdown_=
_list__item__link_selected:link,.dropdown__list__item__link_selected:vis=
ited,.dropdown__list__item__link_selected:hover{color:black;background:w=
hite}.dropdown__list__hr{background-color:#9fc1eb}.dropdown__list__scrol=
l{border-bottom-color:#9fc1eb}.paging__item,.paging__item:active,.paging=
__item:focus,.paging__item:link,.paging__item:visited{color:#0857a6}.pag=
ing__item:hover{color:#0857a6}.paging__item_selected,.paging__item_selec=
ted:active,.paging__item_selected:focus,.paging__item_selected:link,.pag=
ing__item_selected:visited,.paging__item_selected:hover{background:#e9ef=
f5;color:black}.paging__item_disabled,.paging__item_disabled:active,.pag=
ing__item_disabled:focus,.paging__item_disabled:hover,.paging__item_disa=
bled:link,.paging__item_disabled:visited{color:#656972}.popup{border-col=
or:#d5d5d5}.popup__controls{background-color:#e4ebf1}.popup__link-skipst=
ep{color:black !important}.popup__controls .form__button_reset,.popup__c=
ontrols .form__button_reset:link,.popup__controls .form__button_reset:vi=
sited,.popup__controls .form__button_reset:hover,.popup__controls .form_=
_button_reset:active,.popup__controls .form__button_reset:focus{color:bl=
ack}.popup__controls .form__button_submit,.popup__controls .form__button=
_submit:link,.popup__controls .form__button_submit:visited,.popup__contr=
ols .form__button_submit:hover,.popup__controls .form__button_submit:act=
ive,.popup__controls .form__button_submit:focus,.popup__controls .form__=
button_submit.form__button_disabled:hover,.popup__controls .form__button=
_submit.form__button_disabled:active,.popup__controls .form__button_subm=
it.form__button_disabled:focus{color:white;border-color:#3877a7;backgrou=
nd-color:#4788cd;background-image:-moz-linear-gradient(top, #94c0ee, #47=
88cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#94c0e=
e), to(#4788cd));background-image:-webkit-linear-gradient(top, #94c0ee, =
#4788cd);background-image:-o-linear-gradient(top, #94c0ee, #4788cd);back=
ground-image:-ms-linear-gradient(top, #94c0ee, #4788cd);background-image=
:linear-gradient(top, #94c0ee, #4788cd);filter:progid:DXImageTransform.M=
icrosoft.Gradient(StartColorStr=3D#94c0ee,EndColorStr=3D#4788cd,Gradient=
Type=3D0 )}.popup__controls .form__button_submit:hover{border-color:#5e9=
8be;background-color:#6da6db;background-image:-moz-linear-gradient(top, =
#b0d1f3, #6da6db);background-image:-webkit-gradient(linear, 0 0, 0 100%,=
from(#b0d1f3), to(#6da6db));background-image:-webkit-linear-gradient(to=
p, #b0d1f3, #6da6db);background-image:-o-linear-gradient(top, #b0d1f3, #=
6da6db);background-image:-ms-linear-gradient(top, #b0d1f3, #6da6db);back=
ground-image:linear-gradient(top, #b0d1f3, #6da6db);filter:progid:DXImag=
eTransform.Microsoft.Gradient(StartColorStr=3D#b0d1f3,EndColorStr=3D#6da=
6db,GradientType=3D0 )}.popup__controls .form__button_submit:active{bord=
er-color:#2e659e;background-color:#71a6de;background-image:-moz-linear-g=
radient(top, #0a2e54, #377dc6 20%, #71a6de);background-image:-webkit-gra=
dient(linear, 0 0, 0 100%, from(#0a2e54), to(#71a6de), color-stop(0.2, #=
377dc6));background-image:-webkit-linear-gradient(top, #0a2e54, #377dc6 =
20%, #71a6de);background-image:-o-linear-gradient(top, #0a2e54, #377dc6 =
20%, #71a6de);background-image:-ms-linear-gradient(top, #0a2e54, #377dc6=
20%, #71a6de);background-image:linear-gradient(top, #0a2e54, #377dc6 20=
%, #71a6de);filter:progid:DXImageTransform.Microsoft.Gradient(StartColor=
Str=3D#0a2e54,EndColorStr=3D#71a6de,GradientType=3D0 )}.answerbar{backgr=
ound:#edf3f8;-webkit-border-radius:2px 2px 0 0;-moz-border-radius:2px 2p=
x 0 0;border-radius:2px 2px 0 0}.answerbar_active{background:none;border=
:none}.answerbar__link,.answerbar__link:active,.answerbar__link:focus,.a=
nswerbar__link:link,.answerbar__link:visited{color:#0857a6}.answerbar__l=
ink:hover{color:#f26d00}.answerbar_active .answerbar__link,.answerbar_ac=
tive .answerbar__link:active,.answerbar_active .answerbar__link:focus,.a=
nswerbar_active .answerbar__link:link,.answerbar_active .answerbar__link=
:visited,.answerbar__fulllink,.answerbar__fulllink:active,.answerbar__fu=
lllink:focus,.answerbar__fulllink:link,.answerbar__fulllink:visited{colo=
r:#0857a6}.answerbar_active .answerbar__link:hover,.answerbar__fulllink:=
hover{color:#f26d00}.answerbar__link_selected,.answerbar__link_selected:=
active,.answerbar__link_selected:focus,.answerbar__link_selected:hover,.=
answerbar__link_selected:link,.answerbar__link_selected:visited,.answerb=
ar_active .answerbar__link_selected,.answerbar_active .answerbar__link_s=
elected:active,.answerbar_active .answerbar__link_selected:focus,.answer=
bar_active .answerbar__link_selected:hover,.answerbar_active .answerbar_=
_link_selected:link,.answerbar_active .answerbar__link_selected:visited{=
background:#edf3f8;color:black;-webkit-border-radius:2px 2px 0 0;-moz-bo=
rder-radius:2px 2px 0 0;border-radius:2px 2px 0 0}.answerbar__fulllink:a=
fter{background-image:url("//img.imgsmail.ru/mail/ru/images/ru/msglist/i=
co2.png")}.compose__header{background-color:#f5f7f9;border-top-color:whi=
te;border-bottom-color:white;border-top-width:1px;border-top-style:solid=
;border-bottom-width:1px;border-bottom-style:solid}.defaultSkin .mceExte=
rnalToolbar{background-color:#e5ebf2}.direct-colors__leftLink{font-famil=
y:"0857a6";content:"0857a6"}.direct-colors__leftHover{font-family:"0857a=
6";content:"0857a6"}.direct-colors__leftText{font-family:"000000";conten=
t:"000000"}.direct-colors__leftInfo{font-family:"999999";content:"999999=
"}.direct-colors__top{font-family:"656972";content:"656972"}.direct-colo=
rs__topHover{font-family:"546679";content:"546679"}.direct{background:#d=
ae4ef;border-bottom-color:white;border-bottom-color:white;border-bottom-=
width:1px;border-bottom-style:solid}.direct_top .fade{background-image:n=
one;background:-moz-linear-gradient(left, rgba(218, 228, 239, 0) 0%, #da=
e4ef 90%);background:-webkit-gradient(linear, left top, right top, color=
-stop(0%, rgba(218, 228, 239, 0)), color-stop(90%, #dae4ef));background:=
-o-linear-gradient(left, rgba(218, 228, 239, 0) 0%, #dae4ef 90%)}#top_di=
rect .snap_noshot,#top_direct div.y5_ad div a,#top_direct div.y5 .y5_bla=
ck a,#top_direct2 .snap_noshot,#top_direct2 div.y5_ad div a,#top_direct2=
div.y5 .y5_black a,#PageContent .direct_top .snap_noshot,#PageContent .=
direct_top div.y5_ad div a,#PageContent .direct_top div.y5 .y5_black a{c=
olor:#546679 !important}#top_direct .snap_noshot:hover,#top_direct div.y=
5_ad div a:hover,#top_direct div.y5 .y5_black a:hover,#top_direct2 .snap=
_noshot:hover,#top_direct2 div.y5_ad div a:hover,#top_direct2 div.y5 .y5=
_black a:hover,#PageContent .direct_top .snap_noshot:hover,#PageContent =
.direct_top div.y5_ad div a:hover,#PageContent .direct_top div.y5 .y5_bl=
ack a:hover{color:#546679 !important}#top_direct div.y5_ad span a:hover,=
#top_direct2 div.y5_ad span a:hover,#PageContent .direct_top div.y5_ad s=
pan a:hover{color:#cabcb6 !important}#top_direct div.y5_ad div,#top_dire=
ct2 div.y5_ad div,#PageContent .direct_top div.y5_ad div{color:#546679 !=
important}#top_direct ins.y5_icon em,#top_direct2 ins.y5_icon em,#PageCo=
ntent .direct_top ins.y5_icon em{background-color:#9ca2b0 !important}#to=
p_direct div.y5_ad span,#top_direct div.y5_ad span a,#top_direct div.y5_=
ad span a:hover,#top_direct2 div.y5_ad span,#top_direct2 div.y5_ad span =
a,#top_direct2 div.y5_ad span a:hover,#PageContent .direct_top div.y5_ad=
span,#PageContent .direct_top div.y5_ad span a,#PageContent .direct_top=
div.y5_ad span a:hover{color:#9ca2b0 !important}.b-rbline-item,.b-doubl=
e-item{color:#656972}.b-rbline-item a,.b-double-item a{color:#656972 !im=
portant}.leftcol__banner__direct{background:white;padding-top:0;padding-=
right:9px;padding-bottom:0;padding-left:8px;border-right-width:1px !impo=
rtant;border-right-color:#d5d5d5 !important}.y5 .y5_h a,.y5 .y5_h a:link=
,.y5 .y5_h a:visited{color:#0857a6 !important;text-decoration:none !impo=
rtant}.y5 .y5_h a:hover,.y5 .y5_h a:active,.y5 .y5_h a:focus{color:#0857=
a6 !important;text-decoration:none !important}.y5 .y5_ad div a,.y5 .y5_a=
d div a:link,.y5 .y5_ad div a:visited{text-decoration:none !important;fo=
nt-weight:bold !important;font-size:12px !important}.y5 .y5_ad div a:hov=
er,.y5 .y5_ad div a:active,.y5 .y5_ad div a:focus{text-decoration:none !=
important}.message-sent__ads .y5_nf .y5_title_normal .y5_ads .ad-link a{=
font-weight:bold !important}.y5 .y5_ad span a:hover,.y5 .y5_ad span a:ac=
tive,.y5 .y5_ad span a:focus{text-decoration:none !important}#jsHtml #sl=
otShow_direct a.ya-partner__ads-link-l,#jsHtml #slotShow_direct a.ya-par=
tner__ads-link-l:link,#jsHtml #slotShow_direct a.ya-partner__ads-link-l:=
visited #jsHtml #PageContent a.ya-partner__ads-link-l,#jsHtml #PageConte=
nt a.ya-partner__ads-link-l:link,#jsHtml #PageContent a.ya-partner__ads-=
link-l:visited{color:#0857a6 !important;text-decoration:none !important}=
#jsHtml #slotShow_direct a.ya-partner__ads-link-l:hover,#jsHtml #slotSho=
w_direct a.ya-partner__ads-link-l:active,#jsHtml #slotShow_direct a.ya-p=
artner__ads-link-l:focus,#jsHtml #PageContent a.ya-partner__ads-link-l:h=
over,#jsHtml #PageContent a.ya-partner__ads-link-l:active,#jsHtml #PageC=
ontent a.ya-partner__ads-link-l:focus{color:#0857a6 !important;text-deco=
ration:none !important}#jsHtml #slotShow_direct .ya-partner__title-link,=
#jsHtml #slotShow_direct .ya-partner__title-link:link,#jsHtml #slotShow_=
direct .ya-partner__title-link:visited,#jsHtml #PageContent .ya-partner_=
_title-link,#jsHtml #PageContent .ya-partner__title-link:link,#jsHtml #P=
ageContent .ya-partner__title-link:visited{text-decoration:none !importa=
nt}#jsHtml #slotShow_direct .ya-partner__title-link:hover,#jsHtml #slotS=
how_direct .ya-partner__title-link:active,#jsHtml #slotShow_direct .ya-p=
artner__title-link:focus,#jsHtml #PageContent .ya-partner__title-link:ho=
ver,#jsHtml #PageContent .ya-partner__title-link:active,#jsHtml #PageCon=
tent .ya-partner__title-link:focus{text-decoration:none !important}#jsHt=
ml #slotShow_direct .ya-partner__adress:hover,#jsHtml #slotShow_direct .=
ya-partner__adress:active,#jsHtml #slotShow_direct .ya-partner__adress:f=
ocus,#jsHtml #PageContent .ya-partner__adress:hover,#jsHtml #PageContent=
.ya-partner__adress:active,#jsHtml #PageContent .ya-partner__adress:foc=
us{text-decoration:none !important}#jsHtml #YaDirectLine .ya-partner__it=
em,#jsHtml #YaDirectLine .ya-partner__domain{color:#546679 !important}#j=
sHtml #YaDirectLine a.ya-partner__ads-link-l,#jsHtml #YaDirectLine a.ya-=
partner__ads-link-l:link,#jsHtml #YaDirectLine a.ya-partner__ads-link-l:=
visited,#jsHtml #YaDirectLine a.ya-partner__title-link,#jsHtml #YaDirect=
Line a.ya-partner__title-link:link,#jsHtml #YaDirectLine a.ya-partner__t=
itle-link:visited,#jsHtml #YaDirectLine .ya-partner__adress,#jsHtml #YaD=
irectLine .ya-partner__adress:link,#jsHtml #YaDirectLine .ya-partner__ad=
ress:visited{color:#546679 !important;text-decoration:none !important}#j=
sHtml #YaDirectLine a.ya-partner__ads-link-l:hover,#jsHtml #YaDirectLine=
a.ya-partner__ads-link-l:active,#jsHtml #YaDirectLine a.ya-partner__ads=
-link-l:focus,#jsHtml #YaDirectLine a.ya-partner__title-link:hover,#jsHt=
ml #YaDirectLine a.ya-partner__title-link:active,#jsHtml #YaDirectLine a=
.ya-partner__title-link:focus,#jsHtml #YaDirectLine .ya-partner__adress:=
hover,#jsHtml #YaDirectLine .ya-partner__adress:active,#jsHtml #YaDirect=
Line .ya-partner__adress:focus{color:#546679 !important;text-decoration:=
none !important}.message-sent{padding:4px 0 0;background:white;margin-to=
p:0;color:black}.message-sent__title{color:black}.message-sent__title__l=
ink,.message-sent__title__link:active,.message-sent__title__link:focus,.=
message-sent__title__link:link,.message-sent__title__link:visited{color:=
#0857a6}.message-sent__title__link:hover{color:#f26d00}.message-sent__in=
fo{color:#999999}.message-sent__list__item__link,.message-sent__list__it=
em__link:active,.message-sent__list__item__link:focus,.message-sent__lis=
t__item__link:link,.message-sent__list__item__link:visited{color:#0857a6=
}.message-sent__list__item__link:hover{color:#f26d00}.message-sent__hr{b=
order-color:#d9d9d9}.message-sent__ad a,.message-sent__ad a:active,.mess=
age-sent__ad a:focus,.message-sent__ad a:link,.message-sent__ad a:visite=
d{color:#0857a6}.message-sent__ad a:hover{color:#f26d00}.infomessage__se=
condary{color:black}.infomessage__marker{color:white;background:#6a6e77}=
.infomessage__link,.infomessage__link:link,.infomessage__link:visited,.i=
nfomessage__link:active,.infomessage__link:focus,.infomessage__secondary=
-link,.infomessage__secondary-link:link,.infomessage__secondary-link:vis=
ited,.infomessage__secondary-link:active,.infomessage__secondary-link:fo=
cus{color:#0857a6}.infomessage__link:hover,.infomessage__secondary-link:=
hover{color:#f26d00}.announcements{border:1px solid #9fc1eb;color:black;=
background:#f1f5ff}.announcements_alert{background:none;border:0}.promob=
ox-rb{border-top-color:#d5d5d5;border-top-width:1px}.promobox-rb__link,.=
promobox-rb__link:active,.promobox-rb__link:focus,.promobox-rb__link:hov=
er,.promobox-rb__link:link,.promobox-rb__link:visited{color:black}.promo=
box-rb__link__u{color:#0857a6;text-decoration:none}.promobox-rb__link:ho=
ver .promobox-rb__link__u{color:#0857a6;text-decoration:none}.leftcol__b=
anners__promobox-list .promobox-rb{border-top:0;border-bottom:0}.pseudo-=
link{color:#0857a6}.pseudo-link_theme,.pseudo-link_theme:active,.pseudo-=
link_theme:focus,.pseudo-link_theme:link,.pseudo-link_theme:visited{colo=
r:#0857a6}.pseudo-link_theme:hover{color:#0857a6}.pseudo-link_active_the=
me,.pseudo-link_active_theme:link,.pseudo-link_active_theme:visited,.pse=
udo-link_active_theme:hover,.pseudo-link_active_theme:active,.pseudo-lin=
k_active_theme:focus{color:#0857a6}.b-datalist{border-radius:4px;backgro=
und:white}.b-datalist__item{border-bottom-color:#e6e6e6;color:#0857a6}.b=
-datalist__item__bg{background-color:#f2f2f2}.b-datalist__item__cbx{back=
ground-color:#fefbd8}.b-datalist__item__pic{border-color:#d2d2d2}.b-data=
list__item__subj__snippet{color:#999999}.b-datalist__item_hover{color:#f=
26d00;background-color:white}.b-datalist__item_hover .b-datalist__item__=
subj__snippet{color:#656972}.b-datalist__item_selected .b-datalist__item=
__bg{background-color:#fefbd8}.b-datalist__item_selected .b-datalist__it=
em__subj__snippet,.b-datalist__item_selected.b-datalist__item_hover .b-d=
atalist__item__subj__snippet{color:#656972}.b-paginator{color:#999999}.b=
-rb{background-color:#dae4ef}.b-nav__item{color:#0857a6}.b-nav__item_act=
ive,.b-nav__item_active:active,.b-nav__item_active:focus,.b-nav__item_ac=
tive:hover,.b-nav__item_active:link,.b-nav__item_active:visited{color:#0=
857a6;background:#dae4ef}.b-nav__link:hover{background:#ebf0f6;color:#08=
57a6}.b-nav__item__arrow{border-left-color:#0857a6}.b-nav__item__count{c=
olor:#0857a6;background:#dae4ef}.b-nav__item_active .b-nav__item__count,=
.b-nav__item_active:hover .b-nav__item__count{color:#0857a6;background:t=
ransparent}.b-nav__group_open,.b-nav__group_open + .b-nav__group{border-=
top-color:#d5d5d5}.b-nav__group_open .b-nav__item__arrow{border-top-colo=
r:#0857a6}.b-nav__group_create .b-nav__item_group-name{color:#999999}.b-=
nav__group_create .b-nav__item__arrow{border-left-color:#999999}.b-nav__=
group_create.b-nav__group_open .b-nav__item__arrow{border-top-color:#999=
999}.b-nav__item__text__fade:after{display:block;background:url(data:ima=
ge/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAABCAYAAADJsB7sAAAAP0lEQVQIHQ=
XBQQqAIBAAwBE6FRmCbob//1Tv6L7NlMyEDTsudEw8WFhYmAg0nCgA+b0HKho6BgI3AoGBjo=
b6A2FzB8AU+FE7AAAAAElFTkSuQmCC);*background:none}.b-nav__link:hover .b-n=
av__item__text__fade:after{background:url(data:image/png;base64,iVBORw0K=
GgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m=
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA1SURBVHjaYvz//z/Dm4/fuRkYGPiAWBCI=
RYBYFIjFgFgcSotBxUSgaviYGMgEoxppoREgwADpUAbVNuFbHAAAAABJRU5ErkJggg=3D=3D=
);*background:none}.b-nav__item_active .b-nav__item__text__fade:after,.b=
-nav__item_active:hover .b-nav__item__text__fade:after{background:url(da=
ta:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAABGdB=
TUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABBSURB=
VHjaYvz//z/D7acfuBkYGPiAWBCIRRj+M4gyMDKIAdniQCwGxaJgOYgaPiYGbICRgSBgYiAT=
jGrEAwACDABdkQeyxxUf4gAAAABJRU5ErkJggg=3D=3D);*background:none}.b-nav__l=
ink_option{color:#999999}.b-sticky{background-color:transparent;-webkit-=
transition:none;-moz-transition:none;-o-transition:none;transition:none}=
.b-sticky_yes{box-shadow:none;background-color:white;background-image:no=
ne}.b-nav__item{color:#0857a6}.b-nav__item_active,.b-nav__item_active:ac=
tive,.b-nav__item_active:focus,.b-nav__item_active:hover,.b-nav__item_ac=
tive:link,.b-nav__item_active:visited{color:#0857a6;background:#dae4ef}.=
b-nav__link:hover{background:#ebf0f6;color:#0857a6}.b-nav__item__arrow{b=
order-left-color:#0857a6}.b-nav__item__count{color:#0857a6;background:#d=
ae4ef}.b-nav__item_active .b-nav__item__count,.b-nav__item_active:hover =
.b-nav__item__count{color:#0857a6;background:transparent}.b-nav__group_o=
pen,.b-nav__group_open + .b-nav__group{border-top-color:#d5d5d5}.b-nav__=
group_open .b-nav__item__arrow{border-top-color:#0857a6}.b-nav__group_cr=
eate .b-nav__item_group-name{color:#999999}.b-nav__group_create .b-nav__=
item__arrow{border-left-color:#999999}.b-nav__group_create.b-nav__group_=
open .b-nav__item__arrow{border-top-color:#999999}.b-nav__item__text__fa=
de:after{display:block;background:url(data:image/png;base64,iVBORw0KGgoA=
AAANSUhEUgAAAB4AAAABCAYAAADJsB7sAAAAP0lEQVQIHQXBQQqAIBAAwBE6FRmCbob//1Tv=
6L7NlMyEDTsudEw8WFhYmAg0nCgA+b0HKho6BgI3AoGBjob6A2FzB8AU+FE7AAAAAElFTkSu=
QmCC);*background:none}.b-nav__link:hover .b-nav__item__text__fade:after=
{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICA=
YAAADJEc7MAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZW=
FkeXHJZTwAAAA1SURBVHjaYvz//z/Dm4/fuRkYGPiAWBCIRYBYFIjFgFgcSotBxUSgaviYGM=
gEoxppoREgwADpUAbVNuFbHAAAAABJRU5ErkJggg=3D=3D);*background:none}.b-nav_=
_item_active .b-nav__item__text__fade:after,.b-nav__item_active:hover .b=
-nav__item__text__fade:after{background:url(data:image/png;base64,iVBORw=
0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U2=
9mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABBSURBVHjaYvz//z/D7acfuBkYGPiAWB=
CIRRj+M4gyMDKIAdniQCwGxaJgOYgaPiYGbICRgSBgYiATjGrEAwACDABdkQeyxxUf4gAAAA=
BJRU5ErkJggg=3D=3D);*background:none}.b-nav__link_option{color:#999999}.=
themeId{font-family:"default";content:"default"}.portal-menu{position:re=
lative;z-index:999;margin-bottom:8px;border-top-style:solid;border-top-w=
idth:1px;border-bottom-style:solid;border-bottom-width:1px;text-align:ce=
nter;white-space:nowrap;font:12px/15px Arial, Tahoma, Verdana, sans-seri=
f;border-top-color:#366898;border-bottom-color:#14467a;background:#356fa=
c url("//img.imgsmail.ru/r/portal/portal-menu/portal-menu__bg.png?v=3D1"=
) repeat-x 0 0;*zoom:1}.portal-menu__width{position:relative;z-index:1;w=
idth:100%;height:39px;margin:0 auto;text-align:left}.portal-menu__dropdo=
wn{position:absolute;z-index:1000;display:none;top:40px;min-width:106px;=
margin:2px 0 0;padding:6px 0;border-width:1px;border-style:solid;-moz-bo=
rder-radius:2px;-webkit-border-radius:2px;border-radius:2px;box-shadow:2=
px 2px 2px -2px #656972;background:white;border-color:#9fc1eb}.portal-me=
nu__buttons__item_open .portal-menu__dropdown{display:block;-webkit-anim=
ation-duration:0.5s;-moz-animation-duration:0.5s;-o-animation-duration:0=
.5s;animation-duration:0.5s;-webkit-animation-name:slidein;-moz-animatio=
n-name:slidein;-o-animation-name:slidein;animation-name:slidein}@-webkit=
-keyframes slidein{0%{opacity:0;box-shadow:none}100%{opacity:1;box-shado=
w:2px 2px 2px -2px #656972}}@-moz-keyframes slidein{0%{opacity:0;box-sha=
dow:none}100%{opacity:1;box-shadow:2px 2px 2px -2px #656972}}@-o-keyfram=
es slidein{0%{opacity:0;box-shadow:none}100%{opacity:1;box-shadow:2px 2p=
x 2px -2px #656972}}@keyframes slidein{0%{opacity:0;box-shadow:none}100%=
{opacity:1;box-shadow:2px 2px 2px -2px #656972}}.portal-menu__dropdown__=
list__link,.portal-menu__dropdown__list__link:active,.portal-menu__dropd=
own__list__link:focus,.portal-menu__dropdown__list__link:hover,.portal-m=
enu__dropdown__list__link:link,.portal-menu__dropdown__list__link:visite=
d{position:relative;display:block;float:none;padding:4px 6px 5px;text-de=
coration:none;text-align:left;line-height:12px;color:#0857a6}.portal-men=
u__dropdown__list__link:hover{color:#0857a6;background:#d4e3ff}.portal-m=
enu__logo{position:absolute;left:0;top:0;width:155px;height:21px;padding=
-top:10px;margin-left:15px}.portal-menu__logo__cont{position:relative}.p=
ortal-menu__logo__link__img{border:0 none}.portal-menu__logo__link-proje=
ct{position:absolute;display:block;top:0;left:0;height:20px;width:53px;b=
ackground:url(data:;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABA=
AEAAAICRAEAOw=3D=3D)}.portal-menu__logo__link-mail{position:absolute;dis=
play:block;top:0;left:53px;height:20px;width:98px;background:url(data:;b=
ase64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=3D=3D)}=
.portal-menu__buttons{position:absolute;margin-left:257px}.portal-menu__=
content .portal-menu__buttons{display:table-cell;float:none;width:1%;*di=
splay:block;*width:auto;*float:left;position:relative;margin-left:0;vert=
ical-align:top;*vertical-align:baseline}.portal-menu__buttons__item{floa=
t:left}.portal-menu__buttons__cont,.portal-menu__buttons__cont:link,.por=
tal-menu__buttons__cont:visited,.portal-menu__buttons__cont:hover,.porta=
l-menu__buttons__cont:active,.portal-menu__buttons__cont:focus{display:b=
lock;text-decoration:none;outline:0;color:white}.portal-menu__buttons__c=
ont:hover,.portal-menu__buttons__cont_hover{background:#2a629c url("//im=
g.imgsmail.ru/r/portal/portal-menu/portal-menu__bg.png?v=3D1") repeat-x =
0 -40px}.portal-menu__buttons__cont_selected,.portal-menu__buttons__item=
_open .portal-menu__buttons__cont{background:#1e5084 url("//img.imgsmail=
.ru/r/portal/portal-menu/portal-menu__bg.png?v=3D1") repeat-x 0 -80px}.p=
ortal-menu__buttons__cont_selected:hover,.portal-menu__buttons__item_ope=
n .portal-menu__buttons__cont:hover{background:#2a629c url("//img.imgsma=
il.ru/r/portal/portal-menu/portal-menu__bg.png?v=3D1") repeat-x 0 -120px=
}.portal-menu__buttons__link{background-image:url("//img.imgsmail.ru/p/0=
.13.1/i/mail/buttons/portal-menu__icon.png");background-repeat:no-repeat=
}@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
only screen and (min--moz-device-pixel-ratio: 1.5),
only screen and (-o-min-device-pixel-ratio: 3/2),
only screen and (min-device-pixel-ratio: 1.5){.portal-menu__buttons__li=
nk{background-image:url("//img.imgsmail.ru/p/0.13.1/i/mail/buttons/porta=
l-menu__icon.HiDPI.png");background-repeat:no-repeat;background-size:22p=
x}}.portal-menu__buttons__link,.portal-menu__buttons__link:link,.portal-=
menu__buttons__link:visited,.portal-menu__buttons__link:hover,.portal-me=
nu__buttons__link:active,.portal-menu__buttons__link:focus{display:inlin=
e-block;padding:20px 15px 4px;text-align:center;text-decoration:none;col=
or:white}.portal-menu__buttons__text_dotted{display:inline-block;height:=
14px;border-bottom-width:1px;border-bottom-style:dotted;text-decoration:=
none;cursor:pointer;border-bottom-color:white}.portal-menu__buttons__ite=
m_region{margin-right:29px}.portal-menu__buttons__cont_region:hover,.por=
tal-menu__buttons__item_open .portal-menu__buttons__cont_region,.portal-=
menu__buttons__item_open .portal-menu__buttons__cont_region:hover{backgr=
ound:none}.portal-menu__buttons__link_region,.portal-menu__buttons__link=
_region:link,.portal-menu__buttons__link_region:visited,.portal-menu__bu=
ttons__link_region:hover,.portal-menu__buttons__link_region:active,.port=
al-menu__buttons__link_region:focus{background:none;position:relative;di=
splay:inline-block;padding:12px 7px 11px 7px;width:auto;cursor:pointer;w=
hite-space:nowrap}.portal-menu__buttons__link_region .portal-menu__butto=
ns__link__text_region,.portal-menu__buttons__link_region:link .portal-me=
nu__buttons__link__text_region,.portal-menu__buttons__link_region:visite=
d .portal-menu__buttons__link__text_region,.portal-menu__buttons__link_r=
egion:hover .portal-menu__buttons__link__text_region,.portal-menu__butto=
ns__link_region:active .portal-menu__buttons__link__text_region,.portal-=
menu__buttons__link_region:focus .portal-menu__buttons__link__text_regio=
n{display:inline-block;text-decoration:none;border-bottom:1px dotted whi=
te}.portal-menu__buttons__link_region:hover .portal-menu__buttons__link_=
_text_region{border-color:transparent}.portal-menu__buttons__link__ico{d=
isplay:inline-block;position:relative;margin-left:2px;*left:2px;font-siz=
e:0;top:6px;vertical-align:top;line-height:0;border-color:white transpar=
ent transparent;border-style:solid solid inset inset;border-width:4px 4p=
x 0}.portal-menu__buttons__link_simple,.portal-menu__buttons__link_simpl=
e:active,.portal-menu__buttons__link_simple:focus,.portal-menu__buttons_=
_link_simple:hover,.portal-menu__buttons__link_simple:link,.portal-menu_=
_buttons__link_simple:visited{background:none;padding:12px 10px;text-dec=
oration:underline}.portal-menu__buttons__link_simple:hover{text-decorati=
on:none}.portal-menu__search{position:absolute;padding:6px 0 0px;z-index=
:1001;*zoom:1;white-space:normal}.portal-menu__content .portal-menu__sea=
rch{display:table-cell;width:99%;*display:block;*width:auto;position:rel=
ative;right:0;vertical-align:top;*vertical-align:baseline}.portal-menu__=
search__label,.portal-menu__search__button,.portal-menu__search__advance=
d,.portal-menu__search__label__wrapper,.portal-menu__search__label__wrap=
per__inner-wrapper{background-repeat:no-repeat;background-color:transpar=
ent;background-image:url("//img.imgsmail.ru/p/0.6/i/default/search/porta=
l-menu__search.wide.png");image-rendering:-webkit-optimize-contrast;imag=
e-rendering:optimizeQuality}.portal-menu__search__form{position:relative=
;margin:0}.portal-menu__search_open .portal-menu__search__select__list,.=
portal-menu__search_open .portal-menu__search__advanced_container{displa=
y:block}.portal-menu__search__label{display:block;position:relative;heig=
ht:26px;margin-right:68px;*margin-right:65px;padding:0 0 0 4px;backgroun=
d-position:0 -56px}.portal-menu__search__label__wrapper{display:block;he=
ight:26px;padding-right:4px;background-position:100% -83px}.portal-menu_=
_search__label__wrapper__inner-wrapper{display:block;height:26px;backgro=
und-position:0 -110px;background-repeat:repeat-x}.portal-menu__search_ad=
vanced .portal-menu__search__label{margin-right:88px;*margin-right:68px}=
.portal-menu__search__label__wrapper__input-wrapper{display:block;height=
:25px;padding-left:3px;overflow:hidden;zoom:1;position:relative}.portal-=
menu__search__label__text{display:none;position:absolute;top:6px;cursor:=
text;color:#999999}.portal-menu__search_blur .portal-menu__search__label=
__text{display:block;z-index:1}.portal-menu__search__label__select{float=
:right;position:relative;top:0;right:-4px;margin-left:10px;cursor:pointe=
r;color:#999999}.portal-menu__search__label__select__text{font-size:11px=
;text-align:right;line-height:26px;padding-right:4px;height:26px;display=
:inline-block;*display:inline;*zoom:1}.portal-menu__search__label__selec=
t__ico{margin-right:1px;display:inline-block;font-size:0;line-height:0;v=
ertical-align:middle;border-color:#878787 #fff #fff;border-style:solid;b=
order-width:4px 4px 0}.portal-menu__search__select__list{display:none;po=
sition:absolute;z-index:20;top:25px;right:0;padding:4px 0 0;font-size:11=
px;background-color:#fff;border:1px solid #8bafd2;border-radius:2px 2px =
2px 2px;white-space:nowrap;text-align:right}.portal-menu__search__advanc=
ed_container{display:none;position:absolute;z-index:20;top:25px;right:68=
px;*right:65px}.portal-menu__search__select__list__item,.portal-menu__se=
arch__select__list__item:link,.portal-menu__search__select__list__item:v=
isited,.portal-menu__search__select__list__item:hover,.portal-menu__sear=
ch__select__list__item:active,.portal-menu__search__select__list__item:f=
ocus{display:block;padding:3px 5px;color:#000;text-decoration:none}.port=
al-menu__search__select__list__item:hover,.portal-menu__search__select__=
list__item_hover{background:#d4e3ff}.portal-menu__search__select__list__=
item_web,.portal-menu__search__select__list__item_web:link,.portal-menu_=
_search__select__list__item_web:visited,.portal-menu__search__select__li=
st__item_web:hover,.portal-menu__search__select__list__item_web:visited,=
.portal-menu__search__select__list__item_web:focus{padding:7px 5px;borde=
r-top:1px solid #d9ecf4}.portal-menu__search__label__select__list__item_=
_ico{display:inline-block;*display:inline;*zoom:1;height:12px;width:18px=
;vertical-align:middle;background-image:url("//img.imgsmail.ru/p/0.6/i/d=
efault/search/portal-menu__search.wide.png");background-position:-48px 0=
px}.portal-menu__search__select__list__item_web:hover .portal-menu__sear=
ch__label__select__list__item__ico{background-position:-77px 0}.portal-m=
enu__search__label__input{position:relative;width:100%;height:20px;margi=
n:3px 0 0 0;padding:0;border:0;line-height:18px;outline:none}.portal-men=
u__search__button{float:right;width:57px;height:27px;margin-right:5px;pa=
dding:0 0 3px;border:0;background-position:-64px -29px;line-height:20px;=
cursor:pointer;color:white;font:12px/15px Arial, Tahoma, Verdana, sans-s=
erif}.portal-menu__search_blur .portal-menu__search__button{background-p=
osition:0 -29px}.portal-menu__search__advanced,.portal-menu__search__adv=
anced:link,.portal-menu__search__advanced:visited,.portal-menu__search__=
advanced:hover,.portal-menu__search__advanced:active,.portal-menu__searc=
h__advanced:focus{float:right;position:relative;right:2px;width:20px;hei=
ght:20px;margin:2px 0 0;background-position:1px 1px;text-decoration:none=
}.portal-menu__search__advanced:hover{background-position:-19px 1px}.por=
tal-menu__search__dropdown{position:relative}.portal-menu__search__sugge=
st{position:absolute;z-index:1000;top:28px;width:291px;margin:0;padding:=
2px 0 0;border:1px solid #8bafd2;-webkit-border-radius:2px;-moz-border-r=
adius:2px;border-radius:2px;background:#fff;font-size:12px;word-wrap:bre=
ak-word}.portal-menu__search__suggest__inner{padding-bottom:3px;border-b=
ottom:1px solid #d9ecf4;*position:relative;*zoom:1}.portal-menu__search_=
_suggest__item{display:block;padding:3px 8px;border:0;cursor:pointer;whi=
te-space:normal}.portal-menu__search__suggest__item_selected{background:=
#d4e8ff}.portal-menu__search__suggest__item_internet,.portal-menu__searc=
h__suggest__item_internet:link,.portal-menu__search__suggest__item_inter=
net:visited,.portal-menu__search__suggest__item_internet:hover,.portal-m=
enu__search__suggest__item_internet:active,.portal-menu__search__suggest=
__item_internet:focus{color:#000;text-decoration:none}.portal-menu__sear=
ch__suggest__item_internet-link{color:#0857A6;text-decoration:underline}=
.portal-menu__search__suggest__item_internet-link:hover{color:#F26D00;te=
xt-decoration:none}.portal-menu__search__suggest_grouped{width:290px;lef=
t:0;padding:0;margin:0;color:#000;font:12px/15px Arial, Tahoma, Verdana,=
sans-serif}.portal-menu__search__suggest_grouped .portal-menu__search__=
suggest__inner{border:none}.portal-menu__search__suggest_grouped .portal=
-menu__search__suggest__item{padding:4px 7px;overflow:hidden;text-overfl=
ow:ellipsis;white-space:nowrap}.portal-menu__search__suggest_grouped .po=
rtal-menu__search__suggest__item_people{padding-right:45px;white-space:n=
ormal}.portal-menu__search__suggest_grouped .portal-menu__search__sugges=
t__item_selected{background:#dae4ed}.portal-menu__search__suggest_groupe=
d .portal-menu__search__suggest__item_people__image{float:right;position=
:absolute;right:8px;top:5px;width:30px;height:30px;background:url("//img=
.imgsmail.ru/p/0.13.1/i/default/search/portal-menu__search__suggest__ite=
m_people---background.png")}.portal-menu__search__suggest_grouped .porta=
l-menu__search__suggest__item__tick{background:#fffbbf;font-weight:norma=
l}.portal-menu__search__suggest_grouped .portal-menu__search__suggest__i=
tem__hint{display:block;color:gray;font-size:11px}.portal-menu__search__=
suggest_grouped .portal-menu__search__suggest__group-header{font:12px/15=
px Arial, Tahoma, Verdana, sans-serif;font-weight:bold;border-bottom:1px=
solid #ebebeb;margin:3px 4px 2px;padding:2px 4px;color:black}.portal-me=
nu__search__suggest_grouped .portal-menu__search__suggest__item_internet=
,.portal-menu__search__suggest_grouped .portal-menu__search__suggest__it=
em_internet:link,.portal-menu__search__suggest_grouped .portal-menu__sea=
rch__suggest__item_internet:visited,.portal-menu__search__suggest_groupe=
d .portal-menu__search__suggest__item_internet:hover,.portal-menu__searc=
h__suggest_grouped .portal-menu__search__suggest__item_internet:active,.=
portal-menu__search__suggest_grouped .portal-menu__search__suggest__item=
_internet:focus{display:block;width:276px;padding-top:8px;padding-bottom=
:9px;color:#0257a4;font-weight:bold;font:12px/12px Arial, Tahoma, Verdan=
a, sans-serif;text-decoration:underline;white-space:normal;border-top:1p=
x solid #ebebeb}.portal-menu__search__suggest_grouped .portal-menu__sear=
ch__suggest__item_internet:hover{background:none}.portal-menu__search__l=
abel__wrapper{position:relative}.portal-menu__search__operands__width{mi=
n-width:100%}.w-portal-menu__search__operands{position:absolute;top:3px;=
left:-1px;right:16px}.w-portal-menu__search__operands__width_outer{overf=
low:hidden;height:21px}.w-portal-menu__search__operands__width_inner{ove=
rflow-x:scroll;-webkit-overflow-scrolling:touch}.w-portal-menu__search__=
operands__width_inner::-webkit-scrollbar{width:0;display:none}.portal-me=
nu__search__operands{height:auto;width:100%}.portal-menu__search__operan=
ds,.portal-menu__search__operands tr,.portal-menu__search__operands td{p=
adding:0;margin:0;border:none;border-collapse:collapse;background:transp=
arent}.w-portal-menu__search__operands__menu{width:1px;*zoom:1}.portal-m=
enu__search__operands__menu{cursor:pointer;position:static;*zoom:1}.port=
al-menu__search__operands__menu__dropdown{top:auto}.portal-menu__search_=
_operands__menu__button{padding:3px 18px 3px 6px;background:#DAE4EE;-web=
kit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;position:=
relative;white-space:nowrap}.portal-menu__search__operands__menu__button=
__text{*zoom:1}.portal-menu__search__operands__menu__button__ico{border-=
bottom:0px inset transparent;border-left:4px solid #DAE4EE !important;bo=
rder-right:4px solid #DAE4EE !important;border-top:4px solid #000000 !im=
portant;display:inline-block;font-size:0px;line-height:0;margin-left:2px=
;margin-top:-1px;position:absolute;right:5px;left:auto;top:50%;width:0;h=
eight:0}.portal-menu__search__operands__input{display:block;height:21px;=
padding-left:8px}.portal-menu__search__operands__input__field{height:20p=
x;width:100%;padding:0;margin:0;background:transparent;border:none;outli=
ne:none;line-height:18px}.portal-menu__search__operands__input__field::-=
moz-selection{background:#3399FF;color:white}.portal-menu__banner{positi=
on:absolute;top:0px;padding-top:10px;padding-left:7px;padding-right:7px}=
.portal-menu__banner__text,.portal-menu__banner__text:link,.portal-menu_=
_banner__text:visited,.portal-menu__banner__text:hover,.portal-menu__ban=
ner__text:active,.portal-menu__banner__text:focus{display:block;width:68=
px;height:18px;padding-top:1px;text-align:center;font-size:12px;line-hei=
ght:18px;text-decoration:none;color:#000;background:#cccccc url(data:ima=
ge/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAAGXRFWHRTb2=
Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHNJREFUOMvFk1EKwCAMQ1/BY+7+h5iT7m=
eCFsuUCvYnkEpIUhRVvZgf/VAqkYC7IXRBTABNQCYw1UGn2uCUQF7Ib6OKdRCO4Jbl7ewVPN=
vqvdlyhewVZKwP938djPJ33LYIYQEZfBgvTocJeKIOzguUowIvRf0qS7kvvy4AAAAASUVORK=
5CYII=3D) repeat-x top left;*background:#cccccc;border-radius:2px;box-sh=
adow:0 1px 0 rgba(0, 0, 0, 0.35);overflow:hidden}.portal-menu__buttons__=
link_region:hover{border:0}.portal-menu__buttons__link_region:hover .por=
tal-menu__buttons__link__text_region{border-bottom:0;padding-bottom:1px}=
.portal-menu__buttons__link__ico{border-left-color:#3169a5;border-right-=
color:#3169a5;border-style:solid}* html .portal-menu__buttons__link{back=
ground-image:url("//img.imgsmail.ru/p/0.13.1/i/mail/buttons/portal-menu_=
_icon.gif")}* html .portal-menu__search__label,* html .portal-menu__sear=
ch__button,* html .portal-menu__search__advanced,* html .portal-menu__se=
arch__label__wrapper,* html .portal-menu__search__label__wrapper__inner-=
wrapper{background-image:url("//img.imgsmail.ru/p/0.13.1/i/default/searc=
h/portal-menu__search.wide.gif")}* html .portal-menu__search__label__sel=
ect__list__item__ico{background-image:url("//img.imgsmail.ru/p/0.13.1/i/=
default/search/portal-menu__search.wide.gif")}* html .js-section-hover .=
portal-menu__search__label__select__list__item__ico{background-position:=
-77px 0}* html .portal-menu__search__suggest_grouped .portal-menu__searc=
h__suggest__item_people__image{background:url("//img.imgsmail.ru/p/0.13.=
1/i/default/search/portal-menu__search__suggest__item_people---backgroun=
d.gif")}* html .portal-menu__search__label__select__text{padding-top:6px=
;height:20px}* html .portal-menu__search__suggest{overflow:hidden}.porta=
l-menu,.portal-menu .portal-menu__width{min-width:960px;_width:expressio=
n(document.body.clientWidth <=3D 960 ? "960px" : "auto" )}.portal-menu .=
portal-menu__width{width:90%;_width:expression(this.parentNode.clientWid=
th*90/100 <=3D 960 ? "960px" : "90%")}.portal-menu__logo{width:240px;hei=
ght:30px;padding:5px 0 0 0;text-align:center;margin-left:0}.portal-menu_=
_logo__link{display:inline-block}.portal-menu__logo__link_img{border:0 n=
one}.portal-menu__buttons{margin-left:264px}.portal-menu__buttons__link,=
.portal-menu__buttons__link:link,.portal-menu__buttons__link:visited,.po=
rtal-menu__buttons__link:hover,.portal-menu__buttons__link:active,.porta=
l-menu__buttons__link:focus{padding-left:6px;padding-right:6px}#portal-m=
enu__dropdown .balloon__AngryBirds{margin-left:-107px !important}.portal=
-menu__buttons__item_themes .balloon__AngryBirds{margin-left:-100px !imp=
ortant}@media screen and (min-width: 1280px){.portal-menu__buttons__link=
,.portal-menu__buttons__link:link,.portal-menu__buttons__link:visited,.p=
ortal-menu__buttons__link:hover,.portal-menu__buttons__link:active,.port=
al-menu__buttons__link:focus{padding-left:11px;padding-right:11px}#porta=
l-menu__dropdown .balloon__AngryBirds{margin-left:-102px !important}.por=
tal-menu__buttons__item_themes .balloon__AngryBirds{margin-left:-95px !i=
mportant}}@media screen and (min-width: 1440px){.portal-menu__buttons__l=
ink,.portal-menu__buttons__link:link,.portal-menu__buttons__link:visited=
,.portal-menu__buttons__link:hover,.portal-menu__buttons__link:active,.p=
ortal-menu__buttons__link:focus{padding-left:16px;padding-right:16px}#po=
rtal-menu__dropdown .balloon__AngryBirds{margin-left:-97px !important}.p=
ortal-menu__buttons__item_themes .balloon__AngryBirds{margin-left:-90px =
!important}}.portal-menu__buttons__link{background-position:100px 100px}=
.portal-menu__buttons__link_send{background-position:50% 5px;width:56px}=
.portal-menu__buttons__link_reload{background-position:50% -200px;width:=
48px}.portal-menu__buttons__link_addressbook{background-position:50% -75=
px;width:48px}.portal-menu__buttons__link_addressbook-new{background-pos=
ition:50% -75px;width:54px}.portal-menu__buttons__link_filesearch{backgr=
ound-position:50% -158px;width:48px}.portal-menu__buttons__link_more{bac=
kground-position:50% -115px;width:36px}.portal-menu__buttons__link_theme=
s{background-position:50% -251px;width:48px}.portal-menu__buttons__item_=
themes{display:none}@media screen and (min-width: 1140px){.portal-menu__=
buttons__item_themes{display:block}.portal-menu__dropdown__list__item_th=
emes{display:none}}.portal-menu__search{width:313px;right:0}@media scree=
n and (min-width: 1280px){.portal-menu__search{width:323px}}@media scree=
n and (min-width: 1440px){.portal-menu__search{width:373px}}.js-section-=
text{_zoom:1}.portal-menu__banner{left:565px}@media screen and (min-widt=
h: 1280px){.portal-menu__banner{left:620px}}@media screen and (min-width=
: 1440px){.portal-menu__banner{left:680px}}.portal-menu__banner_themes{l=
eft:565px}@media screen and (min-width: 1140px){.portal-menu__banner_the=
mes{left:620px}}@media screen and (min-width: 1280px){.portal-menu__bann=
er_themes{left:690px}}@media screen and (min-width: 1440px){.portal-menu=
__banner_themes{left:750px}}* html .portal-menu__logo__link{background:u=
rl("//img.imgsmail.ru/p/0.13.1/i/mail/logo/logo.gif") no-repeat 0 0}* ht=
ml .portal-menu__logo__link__img{visibility:hidden}* html .portal-menu__=
search__label__select__text{padding-top:0}@media only screen and (-webki=
t-min-device-pixel-ratio: 2),
only screen and ( min--moz-device-pixel-ratio: 2),
only screen and ( -o-min-device-pixel-ratio: 2/1){.icon_folders,.icon_in=
fo-state,.icon_message,.icon_compose,.icon_paging,.icon_kav-protected,.i=
con_message-status,.icon_filedownload,.icon_message-flag,.icon_read-stat=
us,.icon_attach,.icon_messagesent,.icon_priority,.icon_paging-horizontal=
,.icon_paging-vertical,.mail-box__info_icon_error,.icon_themes-type{back=
ground-image:url("//img.imgsmail.ru/r/themes/default/icons.308.rtn.png")=
;background-size:655px}.messageline__body__avatar__pic{background-size:1=
00%}}
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=modern.css
Content-Type: text/css; name=modern.css
Content-Location: https://img.imgsmail.ru/ts/1377502689/css/neo/blocks/editor/modern.css?v=1377502689
Content-Transfer-Encoding: Quoted-Printable
.mceToolbar{height:34px}.mceToolbarRow1,.mceToolbarRow2,.mceToolbarRow3{=
position:absolute;top:0}.mceToolbarRow2{right:0}.mceToolbarRow3{visibili=
ty:hidden}.mceToolbarStart,.mceToolbarEnd{display:none}.mceSplitButtonMe=
nu .Active,.mceListBoxMenu .mceMenuItemSelected a,span.mceToolbarLinkOpe=
n,span.mceIcon,span.mceAction{background-image:url("//img.imgsmail.ru/r/=
default/editor/toolbar.png")}.en_US .mceSplitButtonMenu .Active,.en_US .=
mceListBoxMenu .mceMenuItemSelected a,.en_US span.mceToolbarLinkOpen,.en=
_US span.mceIcon,.en_US span.mceAction,.es_ES .mceSplitButtonMenu .Activ=
e,.es_ES .mceListBoxMenu .mceMenuItemSelected a,.es_ES span.mceToolbarLi=
nkOpen,.es_ES span.mceIcon,.es_ES span.mceAction{background-image:url("/=
/img.imgsmail.ru/r/default/editor/toolbar_en.png")}.mceSignatureSplitBut=
tonItemSelected .mceSplitButtonItemLink,.mceSplitButtonMenu .Active,.mce=
ListBoxMenu .mceMenuItemSelected a{background-image:url("//img.imgsmail.=
ru/r/default/editor/icon_selected.png");background-position:100% 50%;bac=
kground-repeat:no-repeat}.mceSignatureSplitButtonItemSelected .mceSplitB=
uttonItemLink{background-position:0 9px}.mceSplitButtonMenuSeparator{dis=
play:block;overflow:hidden;height:1px;background:#ccc}.mceSeparator{disp=
lay:block;height:34px;overflow:hidden;width:1px;background:#e1e1e1;margi=
n:0 2px}.mceToolbarLink,.mceToolbarLink:active,.mceToolbarLink:focus,.mc=
eToolbarLink:link,.mceToolbarLink:visited,.mceToolbarLink:hover{color:#3=
33;text-decoration:none;font-size:12px;display:block}span.mceTextIcon{he=
ight:22px;display:block;line-height:22px;padding:0 4px;margin:1px 3px;wh=
ite-space:nowrap}span.mceToolbarLinkTitle{border-bottom:1px #333 dashed}=
span.mceToolbarLinkOpen{width:5px;height:3px;display:inline-block;backgr=
ound-position:-159px -11px;vertical-align:middle;overflow:hidden}span.mc=
eToolbarLinkOpenAlignRight,span.mceToolbarLinkOpenAlignLeft{width:3px;he=
ight:5px}span.mceToolbarLinkOpenPositionLeft{margin-right:2px}span.mceTo=
olbarLinkOpenPositionRight{margin-left:2px}span.mceToolbarLinkOpenAlignL=
eft{background-position:-284px -9px;margin-right:6px}span.mceToolbarLink=
OpenAlignRight{background-position:-344px -9px;margin-left:6px}span.mceI=
con{vertical-align:middle;display:inline-block;width:22px;height:22px;ma=
rgin:1px 3px}span.mceAction{display:block;width:22px;height:22px;margin:=
1px 3px}.mceButtonDisabled .mceTextIcon,.mceButtonDisabled .mceIcon{filt=
er:alpha(opacity=3D30);-moz-opacity:0.3;-khtml-opacity:0.3;opacity:0.3}s=
pan.mce_bold{background-position:-2px 0}span.mce_italic{background-posit=
ion:-31px 0}span.mce_underline{background-position:-59px 0}span.mce_fore=
color{background-position:-87px 0}span.mce_backcolor{background-position=
:-115px 0}span.mce_fontactions{background-position:-141px 0;width:26px}s=
pan.mce_justifyselect{background-position:-169px 0;width:26px}span.mce_j=
ustifyleft{background-position:-198px 0}span.mce_justifycenter{backgroun=
d-position:-227px 0}span.mce_justifyright{background-position:-255px 0}s=
pan.mce_textindentactions{background-position:-281px 0;width:26px}span.m=
ce_outdent{background-position:-312px 0}span.mce_indent{background-posit=
ion:-340px 0}span.mce_bullistactions{background-position:-365px 0;width:=
26px}span.mce_numlist{background-position:-396px 0}span.mce_bullist{back=
ground-position:-424px 0}span.mce_emotions{background-position:-450px 0;=
width:26px}span.mce_undo{background-position:-506px 0}span.mce_redo{back=
ground-position:-534px 0}span.mce_appspelling,span.mce_appspelling2{back=
ground-position:-590px 0}span.mce_apptransfer,span.mce_apptransfer2{back=
ground-position:-562px 0}span.mce_hr{background-position:-618px 0}span.m=
ce_addlink{background-position:-675px 0}span.mce_strikethrough{backgroun=
d-position:-702px 0}span.mce_apptranslit,span.mce_apptranslit2{backgroun=
d-position:-732px 0}span.mce_appkeyboard,span.mce_appkeyboard2{backgroun=
d-position:-646px 0}span.mce_removeformat{background-position:-759px 0}.=
mceSplitButtonSelected .mceTextIcon,.mceButtonActive .mceTextIcon,.mceSp=
litButtonSelected span.mceAction,.mceButtonActive .mceIcon{margin:0 2px;=
border:1px solid #ccc;-webkit-box-shadow:inset 0 0 3px 0 rgba(0, 0, 0, 0=
.2);-moz-box-shadow:inset 0 0 3px 0 rgba(0, 0, 0, 0.2);box-shadow:inset =
0 0 3px 0 rgba(0, 0, 0, 0.2);-webkit-border-radius:3px;-moz-border-radiu=
s:3px;border-radius:3px}.mceSplitButtonSelected span.mceToolbarLinkTitle=
,.mceButtonActive span.mceToolbarLinkTitle{border-bottom:none}.mceSignat=
ureMenu{right:0;min-width:200px}.mceSplitButtonContainer{position:relati=
ve}.mceSplitButtonMenu{margin-top:8px;border:1px solid #83b7ed;-webkit-b=
order-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-sh=
adow:1px 1px 3px rgba(0, 0, 0, 0.2);-moz-box-shadow:1px 1px 3px rgba(0, =
0, 0, 0.2);box-shadow:1px 1px 3px rgba(0, 0, 0, 0.2);background:#fff;z-i=
ndex:2}.mceSplitButtonItemSeparator{height:1px;overflow:hidden;backgroun=
d:#6d6e71}.mceSplitButtonItemLink,.mceSplitButtonItemLink:active,.mceSpl=
itButtonItemLink:focus,.mceSplitButtonItemLink:link,.mceSplitButtonItemL=
ink:visited,.mceSplitButtonItemLink:hover{display:block;white-space:nowr=
ap;padding-right:23px;padding-left:3px;margin:2px 0;color:#333;text-deco=
ration:none}.mceSplitButtonItemLink:hover{background-color:#dceeff}.mceS=
plitButtonItemLinkAway,.mceSplitButtonItemLinkAway:active,.mceSplitButto=
nItemLinkAway:focus,.mceSplitButtonItemLinkAway:link,.mceSplitButtonItem=
LinkAway:visited,.mceSplitButtonItemLinkAway:hover{color:#0257A4;text-de=
coration:underline}.mceSignatureMenu .mceSplitButtonItemLink,.mceSignatu=
reMenu .mceSplitButtonItemLink:active,.mceSignatureMenu .mceSplitButtonI=
temLink:focus,.mceSignatureMenu .mceSplitButtonItemLink:link,.mceSignatu=
reMenu .mceSplitButtonItemLink:visited,.mceSignatureMenu .mceSplitButton=
ItemLink:hover{margin:0;padding-right:3px;padding-left:25px;padding-top:=
6px;padding-bottom:6px}.mceSignatureMenu .mceSignatureSplitButtonItemWra=
p{width:300px;max-height:6.2em;overflow:hidden;display:block;line-height=
:16px}.mceSplitButtonItemLink span.mceIcon{margin:0 0 1px 0}.mceSplitBut=
tonItemLinkTitle{vertical-align:middle;margin-left:3px}.mceLinkMenu{marg=
in-top:3px;padding:5px}.mceColorSplitMenu a{display:block;width:14px;hei=
ght:12px;border:1px solid #d7d7d7}.mceColorSplitMenu a:hover{border-colo=
r:#fff}.mceColorSplitMenu a.color_inherit{background:url("//img.imgsmail=
.ru/r/compose/tiny_mce/color_inherit.gif") 0 0 no-repeat}.mceColorSplitM=
enu td{padding:0}.mce_fontactions_menu .mceSplitButtonItemLink{padding-t=
op:3px;padding-bottom:4px}.mce_fontsizeselect_menu,.mce_fontselect_menu{=
overflow:auto;height:242px}.mce_fontsizeselect_menu .mceIcon,.mce_fontse=
lect_menu .mceIcon{display:none}.mce_fontselect_menu{width:141px}.mceLis=
tBoxMenuTitle{padding:2px 6px}.mceMenuItem .mceText{padding:0 3px}div.mc=
e_emotions{margin-top:8px;-webkit-box-shadow:1px 1px 3px rgba(0, 0, 0, 0=
.2);-moz-box-shadow:1px 1px 3px rgba(0, 0, 0, 0.2);box-shadow:1px 1px 3p=
x rgba(0, 0, 0, 0.2);width:248px}div.mce_emotions .mceEmotionsContainers=
{position:relative;z-index:2}div.mce_emotions .mceEmotionsFrame{backgrou=
nd-color:#fff;border:1px solid #9fc1eb;border-width:1px 1px 0;-webkit-bo=
rder-radius:2px 2px 0 0;-moz-border-radius:2px 2px 0 0;border-radius:2px=
2px 0 0;padding:3px;height:135px;overflow:hidden}* html div.mce_emotion=
s .mceEmotionsFrame{height:141px}* + html div.mce_emotions .mceEmotionsF=
rame{height:141px}div.mce_emotions .mceEmotionsTabs{position:relative;ov=
erflow:hidden}div.mce_emotions .mceEmotionsTab{height:28px;float:left;ma=
rgin-left:-1px}div.mce_emotions .mceEmotionsTabs,div.mce_emotions .mceEm=
otionsTab{background:url("//img.imgsmail.ru/r/compose/tiny_mce/emotions_=
tabs_hny.gif?8") 0 0 no-repeat}div.mce_emotions .mceEmotionsTab0{margin-=
left:0;width:29px;background-position:0 0}div.mce_emotions .mceEmotionsT=
ab1{width:35px;background-position:-28px 0}div.mce_emotions .mceEmotions=
Tab2{width:28px;background-position:-62px 0}div.mce_emotions .mceEmotion=
sTab3{width:29px;background-position:-89px 0}div.mce_emotions .mceEmotio=
nsTab4{width:28px;background-position:-117px 0}div.mce_emotions .mceEmot=
ionsTab5{width:30px;background-position:-144px 0}div.mce_emotions .mceEm=
otionsTab6{width:31px;background-position:-173px 0}div.mce_emotions .mce=
EmotionsTab7{width:31px;background-position:-203px 0}div.mce_emotions .m=
ceEmotionsContainers .mceEmotionsTab{position:relative;margin-bottom:-28=
px}div.mce_emotions .mceEmotionsContainers .mceEmotionsTab0{background-p=
osition:0 -28px}div.mce_emotions .mceEmotionsContainers .mceEmotionsTab1=
{left:29px;background-position:-28px -28px}div.mce_emotions .mceEmotions=
Containers .mceEmotionsTab2{left:63px;background-position:-62px -28px}di=
v.mce_emotions .mceEmotionsContainers .mceEmotionsTab3{left:90px;backgro=
und-position:-89px -28px}div.mce_emotions .mceEmotionsContainers .mceEmo=
tionsTab4{left:118px;background-position:-117px -28px}div.mce_emotions .=
mceEmotionsContainers .mceEmotionsTab5{left:145px;background-position:-1=
44px -28px}div.mce_emotions .mceEmotionsContainers .mceEmotionsTab6{left=
:174px;background-position:-173px -28px}div.mce_emotions .mceEmotionsCon=
tainers .mceEmotionsTab7{left:204px;background-position:-203px -28px}div=
.mce_emotions .mceEmotionsContainer{zoom:1;display:none}div.mce_emotions=
.mceEmotionsContainerActive{display:block}.mceEmotionsFrame .s1 a,.mceE=
motionsFrame .s3 a,.mceEmotionsFrame .s7 a{display:block;float:left;back=
ground-image:url("//img.imgsmail.ru/r/wysiwyg/sprites_static.gif");heigh=
t:20px;width:20px}.mceEmotionsFrame .s7 a{background-image:url("//img.im=
gsmail.ru/r/wysiwyg/sprites_hny_static.gif")}.mceEmotionsFrame .s1 .smil=
e{background-position:0 0}.mceEmotionsFrame .s1 .blink{background-positi=
on:-20px 0}.mceEmotionsFrame .s1 .laughter{background-position:-40px 0}.=
mceEmotionsFrame .s1 .bee{background-position:-60px 0}.mceEmotionsFrame =
.s1 .coolguy{background-position:-80px 0}.mceEmotionsFrame .s1 .biggrin{=
background-position:-100px 0}.mceEmotionsFrame .s1 .pig{background-posit=
ion:-120px 0}.mceEmotionsFrame .s1 .bazilio{background-position:-140px 0=
}.mceEmotionsFrame .s1 .hm{background-position:-160px 0}.mceEmotionsFram=
e .s1 .dissapointed{background-position:-180px 0}.mceEmotionsFrame .s1 .=
tears{background-position:-200px 0}.mceEmotionsFrame .s1 .cry{background=
-position:-220px 0}.mceEmotionsFrame .s1 .crocodile{background-position:=
-240px 0}.mceEmotionsFrame .s1 .really{background-position:-260px 0}.mce=
EmotionsFrame .s1 .oo{background-position:-280px 0}.mceEmotionsFrame .s1=
.amazed{background-position:-300px 0}.mceEmotionsFrame .s1 .aaa{backgro=
und-position:0 -20px}.mceEmotionsFrame .s1 .bullshit{background-position=
:-20px -20px}.mceEmotionsFrame .s1 .angry{background-position:-40px -20p=
x}.mceEmotionsFrame .s1 .rrr{background-position:-60px -20px}.mceEmotion=
sFrame .s1 .zloradstvo{background-position:-80px -20px}.mceEmotionsFrame=
.s1 .biganger{background-position:-100px -20px}.mceEmotionsFrame .s1 .d=
evil{background-position:-120px -20px}.mceEmotionsFrame .s1 .vampire{bac=
kground-position:-140px -20px}.mceEmotionsFrame .s1 .plug{background-pos=
ition:-160px -20px}.mceEmotionsFrame .s1 .detzl{background-position:-180=
px -20px}.mceEmotionsFrame .s1 .sceptic{background-position:-200px -20px=
}.mceEmotionsFrame .s1 .shy{background-position:-220px -20px}.mceEmotion=
sFrame .s1 .ass{background-position:-240px -20px}.mceEmotionsFrame .s1 .=
heart{background-position:-260px -20px}.mceEmotionsFrame .s1 .kiss{backg=
round-position:-280px -20px}.mceEmotionsFrame .s1 .sleepy{background-pos=
ition:-300px -20px}.mceEmotionsFrame .s1 .live{background-position:0 -40=
px}.mceEmotionsFrame .s1 .victory{background-position:-20px -40px}.mceEm=
otionsFrame .s1 .ok{background-position:-40px -40px}.mceEmotionsFrame .s=
1 .koza_left{background-position:-60px -40px}.mceEmotionsFrame .s1 .koza=
_right{background-position:-80px -40px}.mceEmotionsFrame .s1 .die{backgr=
ound-position:-100px -40px}.mceEmotionsFrame .s1 .fingerup{background-po=
sition:-120px -40px}.mceEmotionsFrame .s1 .kukes{background-position:-14=
0px -40px}.mceEmotionsFrame .s1 .fist{background-position:-160px -40px}.=
mceEmotionsFrame .s1 .fuck{background-position:-180px -40px}.mceEmotions=
Frame .s3 .c03{background-position:0 -60px}.mceEmotionsFrame .s3 .c05{ba=
ckground-position:-20px -60px}.mceEmotionsFrame .s3 .c07{background-posi=
tion:-40px -60px}.mceEmotionsFrame .s3 .c09{background-position:-60px -6=
0px}.mceEmotionsFrame .s3 .c11{background-position:-80px -60px}.mceEmoti=
onsFrame .s3 .c13{background-position:-100px -60px}.mceEmotionsFrame .s3=
.c21{background-position:-120px -60px}.mceEmotionsFrame .s3 .c22{backgr=
ound-position:-140px -60px}.mceEmotionsFrame .s3 .c23{background-positio=
n:-160px -60px}.mceEmotionsFrame .s3 .c24{background-position:-180px -60=
px}.mceEmotionsFrame .s3 .c25{background-position:-200px -60px}.mceEmoti=
onsFrame .s3 .c26{background-position:-220px -60px}.mceEmotionsFrame .s3=
.c33{background-position:-240px -60px}.mceEmotionsFrame .s3 .c34{backgr=
ound-position:-260px -60px}.mceEmotionsFrame .s3 .c35{background-positio=
n:-280px -60px}.mceEmotionsFrame .s3 .c36{background-position:-300px -60=
px}.mceEmotionsFrame .s3 .c37{background-position:0 -80px}.mceEmotionsFr=
ame .s3 .c38{background-position:-20px -80px}.mceEmotionsFrame .s3 .c45{=
background-position:-40px -80px}.mceEmotionsFrame .s3 .c46{background-po=
sition:-60px -80px}.mceEmotionsFrame .s3 .c47{background-position:-80px =
-80px}.mceEmotionsFrame .s3 .c48{background-position:-100px -80px}.mceEm=
otionsFrame .s3 .c49{background-position:-120px -80px}.mceEmotionsFrame =
.s3 .c50{background-position:-140px -80px}.mceEmotionsFrame .s3 .c57{bac=
kground-position:-160px -80px}.mceEmotionsFrame .s3 .c58{background-posi=
tion:-180px -80px}.mceEmotionsFrame .s3 .c59{background-position:-200px =
-80px}.mceEmotionsFrame .s3 .c60{background-position:-220px -80px}.mceEm=
otionsFrame .s3 .c61{background-position:-240px -80px}.mceEmotionsFrame =
.s3 .c62{background-position:-260px -80px}.mceEmotionsFrame .s3 .c69{bac=
kground-position:-280px -80px}.mceEmotionsFrame .s3 .c70{background-posi=
tion:-300px -80px}.mceEmotionsFrame .s7 .a1{background-position:0 0}.mce=
EmotionsFrame .s7 .a2{background-position:-20px 0}.mceEmotionsFrame .s7 =
.a3{background-position:-40px 0}.mceEmotionsFrame .s7 .a4{background-pos=
ition:-60px 0}.mceEmotionsFrame .s7 .b1{background-position:-80px 0}.mce=
EmotionsFrame .s7 .b2{background-position:-100px 0}.mceEmotionsFrame .s7=
.b3{background-position:-120px 0}.mceEmotionsFrame .s7 .b4{background-p=
osition:-140px 0}.mceEmotionsFrame .s7 .c1{background-position:-160px 0}=
.mceEmotionsFrame .s7 .c2{background-position:-180px 0}.mceEmotionsFrame=
.s7 .c3{background-position:-200px 0}.mceEmotionsFrame .s7 .c4{backgrou=
nd-position:-220px 0}.mceEmotionsFrame .s7 .d1{background-position:-240p=
x 0}.mceEmotionsFrame .s7 .d2{background-position:-260px 0}.mceEmotionsF=
rame .s7 .d3{background-position:-280px 0}.mceEmotionsFrame .s7 .d4{back=
ground-position:-300px 0}.mceEmotionsFrame .s7 .e1{background-position:0=
-20px}.mceEmotionsFrame .s7 .e2{background-position:-20px -20px}.mceEmo=
tionsFrame .s7 .e3{background-position:-40px -20px}.mceEmotionsFrame .s7=
.e4{background-position:-60px -20px}.mceEmotionsFrame .s7 .f1{backgroun=
d-position:-80px -20px}.mceEmotionsFrame .s7 .f2{background-position:-10=
0px -20px}.mceEmotionsFrame .s0 img,.mceEmotionsFrame .s1 a,.mceEmotions=
Frame .s2 img,.mceEmotionsFrame .s3 a,.mceEmotionsFrame .s4 img,.mceEmot=
ionsFrame .s5 img,.mceEmotionsFrame .s6 img{display:block;float:left}.mc=
eEmotionsFrame .s0 img{margin:2px 8px 5px 2px}.mceEmotionsFrame .s1 a{ma=
rgin:0 6px 2px 4px}.mceEmotionsFrame .s2 img{margin:2px 6px 5px 8px}.mce=
EmotionsFrame .s3 a{margin:2px 6px 5px 8px}.mceEmotionsFrame .s4 img{mar=
gin:0 4px 0 0}.mceEmotionsFrame .s5 img{margin:2px 1px 0 11px}.mceEmotio=
nsFrame .s6 img{margin:0 0 2px 2px}.mceEmotionsFrame .s6 .s002{margin-le=
ft:11px}.mceEmotionsFrame .s6 .s004{margin-right:12px}.mceEmotionsFrame =
.s6 .s005{margin-left:5px}.mceEmotionsFrame .s6 .s019{margin-left:9px}.m=
ceEmotionsFrame .s6 .s006{margin-left:6px}.mceEmotionsFrame .s7 a{margin=
:6px 8px 7px 11px}
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=main.print.css
Content-Type: text/css; name=main.print.css
Content-Location: https://img.imgsmail.ru/ts/1377502689/css/neo/pages/main.print.css?v=1377502689
Content-Transfer-Encoding: 8bit
.msglist-wrapper.opera{position:relative}body{overflow:visible !important;height:auto}.msglist-wrapper{overflow:visible;height:auto}.msglist-wrapper .msglist-wrapper{overflow:visible;height:auto}
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=favicon32.ico
Content-Type: image/x-icon; name=favicon32.ico
Content-Location: https://img.imgsmail.ru/r/default/favicon32.ico
Content-Transfer-Encoding: Base64
AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAA
AAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPSAAhj0gApY9I
AO2PSAD/j0gA/49IAP+PSAD/j0gA/49IAP+PSAD/j0gA/49IAP+PSAD/j0gA/49I
AP+PSAD/j0gA/49IAP+PSAD/j0gA/49IAP+PSAD/j0gA/49IAP+PSAD/j0gA7Y9I
AJ+PSAAbAAAAAAAAAAAAAAAAkUkAUZFJAPORSQD/kUkA/5FJAP+RSQD/kUkA/5FJ
AP+RSQD/kUkA/5FJAP+RSQD/kUkA/5FJAP+RSQD/kUkA/5FJAP+RSQD/kUkA/5FJ
AP+RSQD/kUkA/5FJAP+RSQD/kUkA/5FJAP+RSQD/kUkA/5FJAPCRSQBFAAAAAJNK
ASGTSgHzk0oB/5NKAf+TSgH/k0oB/5NKAf+TSgH/k0oB/5NKAf+SSQH/kEYB/45D
Af+MQQH/i0AB/4s/Af+LPwH/i0AB/4xBAf+ORAH/kUgB/5NKAf+TSgH/k0oB/5NK
Af+TSgH/k0oB/5NKAf+TSgH/k0oB/5NKAe2TSgEYlUsBq5VLAf+VSwH/lUsB/5VL
Af+VSwH/lUsB/5VLAf+USQH/kEUB/4w/Af+GOQH/gjMA/34vAP98LAD/fCwA/3ws
AP98LAD/fi8A/4M1AP+LPwH/kkgB/5VLAf+VSwH/lUsB/5VLAf+VSwH/lUsB/5VL
Af+VSwH/lUsB/5VLAZyXTAHzl0wB/5dMAf+XTAH/l0wB/5dMAf+WSwH/lEgB/45A
Af+GNgD/dzUQ/0xUX/8tb57/D43f/wCc//8AnP//AJz//wCc//8Pjd//LXCe/3I/
H/+RRAH/l0wB/5dMAf+XTAH/l0wB/5dMAf+XTAH/l0wB/5dMAf+XTAH/l0wB5JlN
Av+ZTQL/mU0C/5lNAv+ZTQL/mEwC/5RHAv+MPAH/ejcR/z1if/8IlO//AJz//wCc
//8AnP//AJz//wCc//8AnP//AJz//wCc//8AnP//CJXv/5FDAv+WSgL/lUgC/5ZJ
Av+XSwL/mU0C/5lNAv+ZTQL/mU0C/5lNAv+ZTQL8m08C/5tPAv+bTwL/m08C/5pO
Av+WSAL/izsB/2BJP/8Ile//AJ3//wCd//8Anf//AJ3//wCd//8Anf//AJ3//wCd
//8Anf//AJ3//wCd//8Anf//kUIB/44+Af+KOQH/izsB/5FCAf+YSwL/m04C/5tP
Av+bTwL/m08C/5tPAv+eUAL/nlAC/55QAv+eUAL/mksC/489Af9RWF//AJ7//wCe
//8Anv//AJ7//xOS3/9Bdo7/b1pA/5NCAf+SQQH/k0MB/4xLEf9nYlD/S3OA/2Zg
UP+LOAH/UVhf/z9kf/8/ZH//dUAg/5FAAf+aTAL/nlAC/55QAv+eUAL/nlAC/6BS
A/+gUgP/oFID/55QA/+VRAL/XFRP/wCf/v8An/7/AJ/+/wCf/v9Lc3//lUQC/448
Av+INAH/fTYR/2NKP/98NhH/hzIB/405Af+SQQL/jzwC/zF0nv8An/7/AJ/+/wCf
/v8Il+7/bUcw/5VEAv+eTwP/oFID/6BSA/+gUgP/o1MD/6NTA/+jUwP/nUwD/4ZA
Ef8Ime7/AKD+/wCg/v8Jmu7/flkw/5ZCAv+COxH/QWZ+/xCR3v8AoP7/AKD+/wCg
/v8ImO7/MHSd/3U9IP9cUk//AKD+/wCg/v8AoP7/AKD+/wCg/v8Ime7/fUYg/51L
A/+jUwP/o1MD/6NTA/+mVQT/plUE/6VTBP+bRwP/NHee/wCh/v8Aof7/AKH+/4Ba
Mf+ZRAP/cUgw/xGS3v8Aof7/AKH+/wCh/v8Aof7/AKH+/wCh/v8Aof7/CJnu/yCC
vf8Aof7/AKH+/xqOz/8Jm+7/AKH+/wCh/v8zd57/mkYD/6RTBP+mVQT/plUE/6lX
BP+pVwT/pVIE/45HEv8Ao/7/AKP+/wCj/v9OdoD/oEsD/3ZNMP8Im+7/AKP+/wCj
/v8Kne7/PIOf/1F6gP89g5//Cp3u/wCj/v8Ao/7/AKP+/wCj/v8Ao/7/c1tA/1hv
cP8Ao/7/AKP+/wCj/v+ETCH/pVEE/6lXBP+pVwT/rFgF/6xYBf+lUAT/U2lw/wCk
/v8ApP7/Cp7u/6NNBP+dRAP/Go7P/wCk/v8ApP7/Moev/59aFP+sWAX/rFgF/6xY
Bf+rVgX/R36P/wCk/v8ApP7/AKT+/wCk/v91XUH/pE4E/xOX3/8ApP7/AKT+/0lv
gP+lTwT/rFgF/6xYBf+vWgX/r1oF/6dPBP8ugq3/AKX9/wCl/f9Feo7/pk4E/2lf
UP8Apf3/AKX9/xOY3v+fWRT/r1oF/69aBf+vWgX/r1oF/69aBf+tWAX/R32P/wCl
/f8Apf3/AKX9/3hfQf+pUgT/RXqO/wCl/f8Apf3/JIm9/6ZOBP+vWgX/r1oF/7Jc
Bv+yXAb/qE8F/xOZ3v8Ap/3/AKf9/3BnUf+pUAX/OX+e/wGn/f8EqP3/anFl/7Ng
Ef+2ZBL/tmYU/7dmFf+2ZhT/tmYU/7ZlE/+jXR3/Bqn9/wKo/f8Ap/3/emBB/65W
Bf9xZ1H/AKf9/wCn/f8JoO3/qE8F/7JcBv+yXAb/tV4G/7VeBv+rUQX/AKj9/wCo
/f8Cqf3/i2I3/7BZEP82lcL/GrH9/x6y/f+ZdVD/wHcu/8J6Mf/DfTX/xH85/8SA
Ov/EgDr/xYE7/753OP9Qo8v/Lbj9/yO0/f+JcVT/tmMT/4tiNv8AqP3/AKj9/wCo
/f+rUQX/tV4G/7VeBv+4Xwb/uF8G/65TBv8Gq/3/Dq79/xWw/f+pZS7/uWom/0ef
yP8pt/3/LLj9/69wPv/Dezb/yIA5/8iBO//Jgz7/yoVB/8uHQ//LiUb/xYJJ/2Wu
0f9Lwv7/TcP+/6WSe//Kik3/wHlB/yy4/f8Wsf3/BKr9/65SBf+4Xwb/uF8G/7xi
Cf+9ZQ7/tmAU/xSy/f8Zs/3/HLT9/451Wf+7ayb/SKHI/ye4/f8quf3/knlj/8J4
Nv/KgDn/y4M8/8yFP//Mh0L/zYpG/8yISP/Cfkv/XrTc/03E/v9Qxf7/qpeA/8+T
XP+7lHP/Xsv+/1nJ/v9Hwv7/v3Iw/79qFP+7YQf/wWkR/8JsFf+8Zhf/MKDR/xaz
/P8ZtPz/d3py/7xqJP9klJ7/Jbj8/ym6/P9dlq7/u24y/8d8OP/Lgzv/zoc//86I
Qv/Nh0X/x4FI/66AYP9LxP3/T8f9/1LI/f+smoL/0JNd/62ah/9gzP3/Zc79/3XH
6//Wn23/1pxg/8FrE//DahL/xGsT/8FoFf9DlrP/E7P8/xa0/P9HlbX/u2Qi/6N7
Tf8juPz/Jrn8/yq7/f+Zb1b/vGw1/8N2Ov/HfD3/x31B/8N6Rf+1d1L/XbTb/0zF
/f9QyP3/U8n9/66ag//PkF//jK24/2LN/f9mz/3/ib3Q/9qkcv/frn7/yXYk/8Vq
Dv/HaxH/x2sT/3l+av8Qs/z/E7T8/xW1/P+gZDj/wWsh/2eWnf8kuvz/J7v8/zO1
7/93hor/rGZB/7dlOP+4aD3/kYV7/1iy2v9GxP3/S8f9/0/I/f9Tyf3/rpqD/8uK
Xv9rw+r/Y879/2fQ/f+usaX/3qhz/+Gwf//MeSb/yGkL/8lrDv/KbBD/uGoe/xWu
7v8Ptfz/Erb8/02Npf+5Xhz/unIv/z6r1P8ju/z/J7z8/yq9/f8uvv3/M8D9/zbB
/f87wv3/P8T9/0PF/f9Ix/3/TMn9/1DK/f+rloH/laGh/17O/f9j0P3/Z9H9/9Sl
eP/gqnX/47GA/897J//LaQn/y2oK/8xrDP/Kag7/Y4mF/wq0/P8Otfz/Ebb8/3R1
bP+9YBv/vHMu/1Oit/8ivPz/Jr38/yq+/f8uv/3/MsD9/zfC/f87w/3/ZbXP/7iW
a/9qt9H/dLLH/66KdP9dx/L/W879/2DP/f+Qu8X/36Vu/+Kqc//ksX//0Xsm/81r
Cv/Nawr/zWsK/81sC/+8bRv/HKje/wm1/P8Mtvz/F6/t/4dmTf+6Wxr/xWkf/52C
Wf9goKv/RK/V/ym//P9Ls9f/baiy/6qTbf/ShUD/z4JE/8h7SP+jiXb/VMTy/1LM
/f9Xzf3/ZMv0/9WjcP/hpmz/4qlx/+WwfP/TfCb/0GwK/9BsCv/QbAr/0GwK/89r
Cv+ldTj/Ea/s/we1+/8Ktvv/Dbf7/15+hv+qVSX/vVwc/8NlH//JbST/zHIp/811
Lv/MdTH/yXI0/8RvOP+3cUj/dpyp/0PI/P9Iyfz/TMv8/1HM/P+xqI7/4KBh/+Kk
Z//jp2z/5a13/9V8JP/Sbgr/0m4K/9JuCv/Sbgr/0m4K/9FtCv+ldjf/Dq/s/wW1
+/8Itvv/C7f7/xax7P9WhpX/f25e/6tXKf+3VR//t1gj/6VmQf+KeWv/YZuu/zm8
7/82xPz/O8X8/0DI/P9Fyfz/o6eQ/9+aVv/hnlv/4qFf/+OkZP/lqm//1nwh/9Rv
C//Ubwv/1G8L/9RvC//Ubwv/1G8L/9NuC/+oeDb/JqXN/wO2+/8Gt/v/CLf7/wy4
+/8Pufv/E7r7/xW7+/8YvPv/Hb77/yG//P8lwPz/KcH8/y7C/P8yxPz/S7zk/7Ob
cf/ek0n/4JdO/+GaU//inFj/459c/+SlZ//XeBn81nAL89ZwC//WcAv/1nAL/9Zw
C//WcAv/1nAL/9ZwC//Vbgv/dIpz/xqr3f8Dtvv/B7f7/wq4+/8MuPv/ELr7/xO6
+/8WvPv/Gr37/x6++/8iv/z/Mbzv/4Cil//SjET/3o08/9+QQf/gk0X/4ZVK/+KY
T//im1T/4ZhO/9h3FeXYcQuo2HEL/9hxC//YcQv/2HEL/9hxC//YcQv/2HEL/9hx
C//YcQv/13AL/5CDVf9PmqD/KqnO/we4+/8Kufv/Dbr7/xC7+/8rsuD/Uqa2/5CU
dP/QhDb/3oUs/96HMP/fiTT/34w5/+COPf/hkkL/4pRG/+OXTP/gjTr/2XUTmNpy
DC3acgz52nIM/9pyDP/acgz/2nIM/9pyDP/acgz/2nIM/9pyDP/acgz/2nIM/9py
DP/acw3/2nQP/9t1Ef/bdhP/3HgV/9x6GP/cexv/3X4f/91/Iv/egSb/34Qq/9+G
Lv/giTL/4Ys3/+GNO//ikD//4Y48/96DKfTcehkjAAAAANxzDFfccwz23HMM/9xz
DP/ccwz/3HMM/9xzDP/ccwz/3HMM/9xzDP/ccwz/3HMM/9xzDP/ccwz/3HQN/911
EP/ddhL/3XcT/956Fv/eexn/3n0c/99/IP/ggST/4IMo/+GGLP/hiDD/4oo0/+ON
Of/ggST34YYrUwAAAAAAAAAAAAAAAN10DCrddAyi3XQM5910DP/ddAz/3XQM/910
DP/ddAz/3XQM/910DP/ddAz/3XQM/910DP/ddAz/3XQM/911Dv/ddg//3ncR/954
E//eeRX/33sX/999Gv/gfh3/4IAg/+CCI//hhSnn4YUpp+KILikAAAAAAAAAAMAA
AAOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAADKAAAABAAAAAgAAAAAQAgAAAA
AABABAAAAAAAAAAAAAAAAAAAAAAAAI5LCRSQSACukEgA+pBIAP+QSAD/kEgA/5BI
AP+QSAD/kEgA/5BIAP+QSAD/kEgA/5BIAP+QSAD6kEgAqo9KBhGUSgGvlEoB/5RK
Af+USgH/kkgB/41BAf+GOQD/gzUA/4M1AP+GOgD/kEYB/5RKAf+USgH/lEoB/5RK
Af+USgGomEwB/JhMAf+XTAH/kkUB/3JDJP8ybpf/D43e/wCc//8AnP//D43e/2dW
RP+WSgH/lksB/5hMAf+YTAH/mEwB95xPAv+cTwL/lkcB/09eZ/8Cm/v/BJr3/yyC
s/9Jb4D/R3KE/yyDs/9gXVT/akw4/3RIKP+XSQH/nE8C/5xPAv+hUgP/n1AD/19c
VP8An/7/IYzG/35NJf9ZWVf/OHCT/0Jof/9xSjD/R2h7/wCf/v8Cnfr/YVpQ/59P
A/+hUgP/p1YE/5xMB/8Nl+b/E5be/4tNGf8ihr7/AqD6/yOPxv8RmOL/AqD6/wia
7f8ji8L/GJPW/wyX5v+ZTQv/p1YE/61ZBf9zYkn/AKT9/2ZsYf9IdYf/BKH1/4dl
N/+tWQX/rVgF/059iP8ApP3/O4Gf/2lsXf8ApP3/bmVR/61ZBf+zXQb/WXh5/wCn
/f+VXCf/IpvW/0mQq/+6bSD/vXIl/71zJ/+3bij/Iavw/0mLo/+YYCf/AKf9/1d6
ff+zXQb/umEI/1+Ehf8Wsf3/qms0/zer4v9llqb/xXw3/8qDPf/Lh0P/x4RI/1a6
6v97rL3/xYpX/z6//f9ujIz/umIJ/8JqEv98gWz/FrP8/413W/9Tn7j/NbHo/7Vx
Pf/Ifzz/yYFD/6GLdf9Nxv3/f7G//7aafv9jzf3/q7Gm/8+KRf/Hag7/sG8q/xGy
+P9Fl7X/pnRC/yu28v8+rdz/cZKc/26crP9Iv/T/S8f9/3+wv/+Kr7n/Zc/9/9Cq
gf/XlVP/zGoJ/8xrC/9RlJ7/DbX8/3N6cP+jdkf/Uaa//zG68v9It+D/h6Se/66S
cv+Goqj/WMv6/4q+yf/hp2//25ZR/9FtCv/RbQr/xW4V/zKiwv8Jtvv/So6k/5Vt
S/+9YiX/vWow/559Yf9no7f/Qcf8/2HB4f/UoGj/4qRl/92TSv/Vbwv81W8L/9Vv
C//JcRX/XJSR/wqz8/8LuPv/Ebn7/xe8+/8fvvv/Kr/4/3Orrv/Tkk3/4JZM/+Kb
Vf/dizj32XELs9lxC//ZcQv/2XEL/9lxC//GdR7/i4ph/3GWhf91mIf/jZNy/8aF
Ov/ehCv/34kz/+COPP/ikkP/3H8jq8J2IhXccwyw3HMM+dxzDP/ccwz/3HMM/9xz
DP/ccwz/3XUP/913Ev/eehf/334d/+CBJP/hhiz54YYtscqXWxQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline
Content-Type: image/png
Content-Location: https://rs.mail.ru/b18684961.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAGwAAAAQCAMAAADEWGpFAAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA
AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U
Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6
eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w
Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE
ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv
YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv
bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v
eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv
YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht
cC5paWQ6QUI4NTg3OUZCNzBCMTFFMkE1QzhBRTAxQjJGODkyRjQiIHhtcE1NOkRv
Y3VtZW50SUQ9InhtcC5kaWQ6QUI4NTg3QTBCNzBCMTFFMkE1QzhBRTAxQjJGODky
RjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp
ZDpBQjg1ODc5REI3MEIxMUUyQTVDOEFFMDFCMkY4OTJGNCIgc3RSZWY6ZG9jdW1l
bnRJRD0ieG1wLmRpZDpBQjg1ODc5RUI3MEIxMUUyQTVDOEFFMDFCMkY4OTJGNCIv
PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94
cGFja2V0IGVuZD0iciI/PlL0t94AAAGAUExURVZqipuIWIOYvFV0pqq40dSeK9Xc
6LnF2oKBdnuSt3Z6duelHIqCaE1tourt873J3ElroWF9qll1pZOlxUlpnebq8Xt5
bkxupIN9aT5fmGmDrmx5iMHM3kdooaSMVHN8hLaSQ156qKqNTFZ2qXGKslBxpvT2
+cqaM9/k7mZ5lFt7qZytyqa1z8jS4rPB1szV5FVzpLuTPj5el1p4p8CWO+7x9kdo
nmFuf8OZPVNzqJWoxmWArHaOteHm70FjnaGxzPn6/EFimkRmn46iwsbQ4N2iJUdm
m+GjIURkmvb4+rbC2FJwopeJZkNfkK6QTaqQVUVilNDY5kRlnUdnnmtzeUxsnzha
lkppmkxmk0xsoJiqx1RypDtcl09wpf39/tvh6z5fmfv8/bG+1difKEtsn8XP4DdZ
ltzi7ExqnnSMs1dwmIqdv1RulvHz99CdL1h0obCPReLn709uodfe6s2aLz5gmzJT
kGGBsmKBsjNTkFp6q1x8rTtdmjhbmDdZmP///7lpuCIAAAMWSURBVHjarI37U9pa
FIUPgQQwkBcB8RIe0aiRgijhYYFBI1ZellapD1ApKG2ltvSq9T5t97/eE1D5BTtT
pt+cOXvN3nvthf6ZkL8nAP3/y4TD2pIWDo+bZMNhPvy0E/33q2jBNZourtm0MSN3
c3lXe9qK5h4wrxiYjWIWzPjhOmgO/qE0iqP4KrgUfEXvmOcEs7AymM3du+yy9cZ8
f+2L+Yshh/8Q9PyB4zIAdDTCDZ8rHdm6S8GGVeNxs8JHASSexWPIHPuKtmCiXwvu
FJeq0oeNssXdYVfmsWvhrCVfFaxU1Tg2byPppaIPX7X1q48RaP6BU54AV1ZpVXLr
G5CVIEYUGFYBl7JCfSCIq11Bcb9Trk8DCd8Lhy9Am2q1/djCpQRWopVROthVBp5p
VqjrU0yQDvg+0kGsbKTz9AE0PYKHXCO61XA2ngEvJa+dzhwQkHPaIeJyWaC3r1Ya
0/uLjkCg4dxfM9n6h1GpSwDfvbJIse7AxWQqVBdf6iZqXecnOuicbtjI7mMA4kbI
0BPV9QuOs4PMRkWOq0ITelyh9dZAEdVlkRP73pDjghNrpqnz7Sgr4lVRtdxEsL0H
MpNZprCPE0kvxx3SU1g6SPExAPlHyKCkWKruT1lwWPLYnyJadlD8CmTrGH9dXU75
UyGTI3GYQi9MOwkcVreDtq1aWEqs1yOgMa51RsSb26Sn7t9eDGDbaqj+GIA2Rwig
bGrlWOEMQGBBda2XI1nc2pOYZsT9x2ZJPdvb3PMW0SwZOl8MnTtKUXbPDkJJjQgL
2NUCgXHJnS37kemI9ODVKXrWGyqmRwEoP+IiqeV1ObpANa9E9oZNqi69mhTy+VKE
YSylvC5l9Hxe/7OfTntQmpx9rVue6bxb1KVLw3WTcV/EcnqPUtHi0eobfE9/kzhf
TeujAHQ7YiY+c3vbnonH2/EZ65ZRhy38DydtrNuvTfTXBOk1OrjRjreN/tA1UHHM
cNXQQ3EPuhvLifXdyd0TnLxMezwv7yYAfRvLwWXh4NuTHBz8ZPgT0PfxvH///feD
/p2QvybghwADAJCWKD1VPoRYAAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=d227223.gif
Content-Type: image/gif; name=d227223.gif
Content-Location: https://rs.mail.ru/d227223.gif?sz=&rnd=183887034&ts=1377678600
Content-Transfer-Encoding: Base64
R0lGODlhAQABAIABAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAICTAEAOw==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=k.gif
Content-Type: image/gif; name=k.gif
Content-Location: https://r3.mail.ru/k?81e4121baf7286eca0b199916eff4bfd
Content-Transfer-Encoding: Base64
R0lGODlhAQABAIABAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAICTAEAOw==
------------nCJOUr6ZQo8RzugzPUZTVa
Content-Disposition: inline; filename=wot_logo.png
Content-Type: image/png; name=wot_logo.png
Content-Location: https://img.imgsmail.ru/r/default/popup/promo/wot/wot_logo.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAGwAAAArCAIAAAASWfpOAAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAA
AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U
Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6
eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w
Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE
ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5h
ZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRv
YmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0
dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1l
bnRJRD0ieG1wLmRpZDoyQkEwMDJEQjUyQTlFMDExODJFMzgxNUY4MzE4NTMxMyIg
eG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFRDNGRjJBNEFERUIxMUUwQTY0RUZF
NUZEOTUwMjJDOCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFRDNGRjJBM0FE
RUIxMUUwQTY0RUZFNUZEOTUwMjJDOCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQ
aG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6
aW5zdGFuY2VJRD0ieG1wLmlpZDo4NEFCODhEOTFGQURFMDExOTQ3OEU5RkQ4MzM1
OTJDMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyQkEwMDJEQjUyQTlFMDEx
ODJFMzgxNUY4MzE4NTMxMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRG
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
AA34Y7H1vYJvAAAAAElFTkSuQmCC
------------nCJOUr6ZQo8RzugzPUZTVa--