Draft pricing — internal preview
DEWALL · DESIGNED IN BRITAIN · MADE IN DUBAI
Design Your Bifold Door Set the size, choose how it folds, pick a colour and see the price as you go. Every door is made to measure at our Al Qusais facility.
1
Size Overall frame size, outside edge to outside edge. Measure the opening and take off 10 mm each way for fitting.
2
Panels Fewer panels mean wider glass and a cleaner view; more panels stack shallower. Each panel must be 700 – 1,200 mm wide.
3
How it folds Viewed from outside. A single panel on its own becomes a traffic door you can use every day without folding the set.
Opening direction Opens out Opens in
4
Colour Powder coated in Dubai. Every colour is the same price.
RAL code
5
Glass Toughened Low-E double glazing is included. Upgrades are confirmed with your quotation.
6
Threshold Debar’s own profile sections through the bottom rail and threshold, shown for your opening direction. Standard sill for anything open to the sky; low threshold where the opening is covered.
7
Handle finish Two Debar handles, one finish: the Verso lever with key cylinder on the traffic door, and a shoot-bolt lever on every intermediate leaf. Hinges are powder coated to match the frame.
8
Supply only or installed?
VIEWED FROM OUTSIDE
▶ See it open Closed
Total inc. VAT
Add to basket
HARDWARE
Fitted with Debar hardware, as the system was designed DeWall and its hardware come from the same drawing board in Bradford, so the hinges, rollers, locks and handles below are the parts the profiles were engineered around — not substitutes.
WHAT’S INCLUDED
In every door WITH INSTALLATION
THE SYSTEM
DeWall by Debar Designed in Bradford, Yorkshire by the UK’s largest independent bi-fold system manufacturer, extruded by Cortizo and licensed for extrusion in the UAE. Cortizo aluminium with a British-engineered running gear and locking system.
NOT WHAT YOU NEED?
Other ways to open a wall This page prices the DeWall bifold only. Altest LineaFold, minimal sliding doors, pivot doors and anything above 3 m are quoted project by project — see the full bifold door range or the sliding door range , or send us drawings.
KGZ1bmN0aW9uKCl7CiJ1c2Ugc3RyaWN0IjsKdmFyIERBVEEgPSB7ImNvbW1lcmNpYWxfbW9kZWwiOiB7ImRyYWZ0X21vZGUiOiBmYWxzZSwgImN1cnJlbmN5
IjogIkFFRCIsICJzdXBwbHlfYWVkX3Blcl9zcW0iOiAxMTAwLCAiaW5zdGFsbF9hZWRfcGVyX3NxbSI6IDQwMCwgInZhdF9yYXRlIjogMC4wNSwgImxpbmVf
cm91bmRfYWVkIjogMTAsICJhcmVhX2Jhc2lzIjogIk92ZXJhbGwgZnJhbWUgd2lkdGggXHUwMGQ3IG92ZXJhbGwgZnJhbWUgaGVpZ2h0LCBpbiBtXHUwMGIy
LiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmFsIG9wZW5pbmcgbGVzcyBmaXR0aW5nIHRvbGVyYW5jZSBcdTIwMTQgdGhlIHNpemUgdGhlIGN1c3RvbWVyIG1lYXN1
cmVzLiIsICJwcmljaW5nX2Jhc2lzIjogInN1cHBseV9vbmx5X3dpdGhfb3B0aW9uYWxfaW5zdGFsbGF0aW9uIiwgImluc3RhbGxfYXJlYSI6ICJEdWJhaSAm
IFNoYXJqYWguIE90aGVyIGVtaXJhdGVzIG9uIHJlcXVlc3QuIiwgInN1cHBseV9vbmx5X25vdGUiOiAiQ29sbGVjdGlvbiBmcm9tIG91ciBBbCBRdXNhaXMg
ZmFjaWxpdHksIG9yIGFzayB1cyBmb3IgYSBkZWxpdmVyeSBwcmljZS4ifSwgInN5c3RlbSI6IHsiYnJhbmQiOiAiRGVXYWxsIiwgImxhYmVsIjogIkRlV2Fs
bCBiaWZvbGQgXHUyMDE0IGRlc2lnbmVkIGluIEJyaXRhaW4gYnkgRGViYXIsIGV4dHJ1ZGVkIGJ5IENvcnRpem8iLCAicGFuZWxfbWluX3dpZHRoX21tIjog
NzAwLCAicGFuZWxfbWF4X3dpZHRoX21tIjogMTIwMCwgInBhbmVsc19taW4iOiAyLCAicGFuZWxzX21heCI6IDcsICJoZWlnaHRfbWluX21tIjogMTgwMCwg
ImhlaWdodF9tYXhfbW0iOiAzMDAwLCAid2lkdGhfc3RlcF9tbSI6IDEwLCAiaGVpZ2h0X3N0ZXBfbW0iOiAxMCwgIm1heF9wYW5lbF93ZWlnaHRfa2ciOiAx
MjAsICJzcGVjcyI6IFtbIlRoZXJtYWwgYnJlYWsiLCAiMzAgbW0gcG9seWFtaWRlIl0sIFsiVGhlcm1hbCBwZXJmb3JtYW5jZSIsICJVZCAxLjcgVy9tXHUw
MGIySyBzdGFuZGFyZCBkb3VibGUgZ2xhemVkOyBmcm9tIDEuMSBXL21cdTAwYjJLIG9uIGVuaGFuY2VkIGdsYXppbmciXSwgWyJNYXggcGFuZWwiLCAiMTIw
MCBtbSB3aWRlIFx1MDBkNyAzMDAwIG1tIGhpZ2gsIHVwIHRvIDEyMCBrZyJdLCBbIlJ1bm5pbmcgZ2VhciIsICJJbmxpbmUsIGFib3ZlLWdyb3VuZCBib3R0
b20gcnVubmluZyJdLCBbIlNlY3VyaXR5IiwgIlBBUyAyNCBjZXJ0aWZpZWQsIERvY3VtZW50IFEgY29tcGxpYW50Il0sIFsiV2VhdGhlciIsICJCUyA2Mzc1
IFBhcnQgMSB0ZXN0ZWQiXSwgWyJTeXN0ZW0gZGVzaWduIiwgIkRlYmFyLCBCcmFkZm9yZCwgWW9ya3NoaXJlIl0sIFsiRXh0cnVzaW9uIiwgIkNvcnRpem87
IGFsc28gbGljZW5zZWQgZm9yIGV4dHJ1c2lvbiBpbiB0aGUgVUFFIl1dfSwgImRlZmF1bHRzIjogeyJ3aWR0aF9tbSI6IDM2MDAsICJoZWlnaHRfbW0iOiAy
NDAwLCAicGFuZWxzIjogMywgInNwbGl0IjogIjMrMCIsICJvcGVuaW5nIjogIm91dCIsICJjb2xvdXIiOiAicmFsNzAxNiIsICJnbGFzcyI6ICJzdGFuZGFy
ZCIsICJ0aHJlc2hvbGQiOiAid2VhdGhlcmVkIiwgImhhbmRsZSI6ICJibGFjayIsICJpbnN0YWxsIjogdHJ1ZX0sICJjb2xvdXJzIjogW3siaWQiOiAicmFs
NzAxNiIsICJsYWJlbCI6ICJBbnRocmFjaXRlIEdyZXkiLCAic3ViIjogIlJBTCA3MDE2IG1hdHQgXHUwMGI3IHRoZSBHdWxmIGZhdm91cml0ZSIsICJoZXgi
OiAiIzM4M0U0MiIsICJzdXJjaGFyZ2VfcGN0IjogMH0sIHsiaWQiOiAicmFsOTAwNSIsICJsYWJlbCI6ICJKZXQgQmxhY2siLCAic3ViIjogIlJBTCA5MDA1
IG1hdHQiLCAiaGV4IjogIiMwRTBFMTAiLCAic3VyY2hhcmdlX3BjdCI6IDB9LCB7ImlkIjogInJhbDkwMTAiLCAibGFiZWwiOiAiUHVyZSBXaGl0ZSIsICJz
dWIiOiAiUkFMIDkwMTAgbWF0dCIsICJoZXgiOiAiI0YxRUZFNiIsICJzdXJjaGFyZ2VfcGN0IjogMH0sIHsiaWQiOiAicmFsNzAyMSIsICJsYWJlbCI6ICJC
bGFjayBHcmV5IiwgInN1YiI6ICJSQUwgNzAyMSBtYXR0IiwgImhleCI6ICIjMjMyODJCIiwgInN1cmNoYXJnZV9wY3QiOiAwfSwgeyJpZCI6ICJyYWw5MDA3
IiwgImxhYmVsIjogIkdyZXkgQWx1bWluaXVtIiwgInN1YiI6ICJSQUwgOTAwNyBtZXRhbGxpYyIsICJoZXgiOiAiIzhGOEY4QyIsICJzdXJjaGFyZ2VfcGN0
IjogMH0sIHsiaWQiOiAiYnJvbnplIiwgImxhYmVsIjogIkRhcmsgQnJvbnplIiwgInN1YiI6ICJSQUwgODAxOSBtYXR0IiwgImhleCI6ICIjM0IzNDJFIiwg
InN1cmNoYXJnZV9wY3QiOiAwfSwgeyJpZCI6ICJjdXN0b20iLCAibGFiZWwiOiAiQW55IG90aGVyIFJBTCIsICJzdWIiOiAiVGVsbCB1cyB0aGUgUkFMIGNv
ZGUiLCAiaGV4IjogbnVsbCwgInN1cmNoYXJnZV9wY3QiOiAwLCAiYXNrX2NvZGUiOiB0cnVlfV0sICJnbGFzcyI6IFt7ImlkIjogInN0YW5kYXJkIiwgImxh
YmVsIjogIkNsZWFyIExvdy1FIGRvdWJsZSBnbGF6aW5nIiwgInN1YiI6ICJUb3VnaGVuZWQgYm90aCBzaWRlcyBcdTIwMTQgaW5jbHVkZWQiLCAiaW5jbHVk
ZWQiOiB0cnVlfSwgeyJpZCI6ICJhcmdvbiIsICJsYWJlbCI6ICJBcmdvbi1maWxsZWQgdW5pdCIsICJzdWIiOiAiQmV0dGVyIGluc3VsYXRpb24gZnJvbSB0
aGUgc2FtZSBnbGFzcyBcdTIwMTQgbG93ZXIgVWQsIGNvb2xlciByb29tIiwgImluY2x1ZGVkIjogZmFsc2UsICJxdW90ZWQiOiB0cnVlfSwgeyJpZCI6ICJz
b2xhciIsICJsYWJlbCI6ICJTb2xhci1jb250cm9sIGdyZXkgdGludCIsICJzdWIiOiAiQ3V0cyBnbGFyZSBhbmQgaGVhdCBnYWluIG9uIHdlc3QgYW5kIHNv
dXRoIGVsZXZhdGlvbnMiLCAiaW5jbHVkZWQiOiBmYWxzZSwgInF1b3RlZCI6IHRydWV9LCB7ImlkIjogImxhbWluYXRlZCIsICJsYWJlbCI6ICJMYW1pbmF0
ZWQgaW5uZXIgcGFuZSIsICJzdWIiOiAiQWNvdXN0aWMgYW5kIHNhZmV0eSB1cGdyYWRlIiwgImluY2x1ZGVkIjogZmFsc2UsICJxdW90ZWQiOiB0cnVlfSwg
eyJpZCI6ICJibGluZHMiLCAibGFiZWwiOiAiSW50ZWdyYWwgYmxpbmRzIiwgInN1YiI6ICJCbGluZHMgc2VhbGVkIGluc2lkZSB0aGUgZ2xhc3MgdW5pdCIs
ICJpbmNsdWRlZCI6IGZhbHNlLCAicXVvdGVkIjogdHJ1ZX1dLCAidGhyZXNob2xkcyI6IFt7ImlkIjogIndlYXRoZXJlZCIsICJsYWJlbCI6ICJTdGFuZGFy
ZCB0aHJlc2hvbGQiLCAic3ViIjogIjU1IG1tIHJlYmF0ZWQgc2lsbCAoREJFLTAwMSksIGZ1bGx5IHNlYWxlZCBcdTIwMTQgZm9yIGV4cG9zZWQgdGVycmFj
ZXMgYW5kIHBvb2wgZGVja3MiLCAiaW1nIjogeyJvdXQiOiAidGhyLW91dC1mdWxsIiwgImluIjogInRoci1pbi1mdWxsIn0sICJjYXAiOiAiU2VjdGlvbiBc
dTAwYjcgREJFLTAwMSBcdTAwYjcgNTUgbW0gc2lsbCJ9LCB7ImlkIjogImxvdyIsICJsYWJlbCI6ICJMb3cgdGhyZXNob2xkIiwgInN1YiI6ICIyMCBtbSBm
bHVzaCB0aHJlc2hvbGQgd2l0aCBicnVzaCBzZWFsIChEQkUtMDA0KSBcdTIwMTQgY292ZXJlZCBvciBpbnRlcm5hbCBvcGVuaW5ncyIsICJpbWciOiB7Im91
dCI6ICJ0aHItb3V0LWxvdyIsICJpbiI6ICJ0aHItaW4tbG93In0sICJjYXAiOiAiU2VjdGlvbiBcdTAwYjcgREJFLTAwNCBcdTAwYjcgMjAgbW0ifV0sICJo
YW5kbGVzIjogW3siaWQiOiAiYmxhY2siLCAibGFiZWwiOiAiQmxhY2siLCAic3ViIjogIkRlYmFyIFZlcnNvIGxldmVyLCBtYXR0IGJsYWNrIiwgImhleCI6
ICIjMTUxNTE3IiwgImltZyI6ICJoYW5kbGUtYmxhY2siLCAiaW1nMiI6ICJzaG9vdC1ibGFjayJ9LCB7ImlkIjogIndoaXRlIiwgImxhYmVsIjogIldoaXRl
IiwgInN1YiI6ICJEZWJhciBWZXJzbyBsZXZlciwgbWF0dCB3aGl0ZSIsICJoZXgiOiAiI0VGRURFNiIsICJpbWciOiAiaGFuZGxlLXdoaXRlIiwgImltZzIi
OiAic2hvb3Qtd2hpdGUifSwgeyJpZCI6ICJncmV5IiwgImxhYmVsIjogIkdyZXkiLCAic3ViIjogIkRlYmFyIFZlcnNvIGxldmVyLCBhbnRocmFjaXRlIGdy
ZXkiLCAiaGV4IjogIiM1QzYxNjYiLCAiaW1nIjogImhhbmRsZS1ncmV5IiwgImltZzIiOiAic2hvb3QtZ3JleSJ9XSwgImhhcmR3YXJlIjogW3siaW1nIjog
Imh3LWhpbmdlIiwgImxhYmVsIjogIkhpbmdlcyIsICJzdWIiOiAiUG93ZGVyLWNvYXRlZCBhbHVtaW5pdW0sIHN0YWlubGVzcyBzdGVlbCBwaW5zLCBzZWxm
LWx1YnJpY2F0aW5nIGJ1c2gifSwgeyJpbWciOiAiaHctcm9sbGVyIiwgImxhYmVsIjogIkJvdHRvbS1ydW5uaW5nIGNhcnJpYWdlIiwgInN1YiI6ICJUd2lu
LXdoZWVsIHJvbGxlciBvbiBhIHN0YWlubGVzcyBzdGVlbCB0cmFjayBcdTIwMTQgdGhlIHdlaWdodCBydW5zIG9uIHRoZSBmbG9vciwgbm90IHRoZSBoZWFk
In0sIHsiaW1nIjogImh3LWxvY2siLCAibGFiZWwiOiAiU2hvb3QtYm9sdCBsb2NraW5nIiwgInN1YiI6ICJIZWF2eS1kdXR5IG11bHRpLXBvaW50IGxvY2tz
IG9uIGV2ZXJ5IGxlYWYsIFBBUyAyNCB0ZXN0ZWQifSwgeyJpbWciOiAiaHctaGFuZGxlIiwgImxhYmVsIjogIlRyYWZmaWMtZG9vciBsZXZlciIsICJzdWIi
OiAiVmVyc28gbGV2ZXIgd2l0aCBrZXkgY3lsaW5kZXIsIGluIHlvdXIgY2hvc2VuIGZpbmlzaCJ9LCB7ImltZyI6ICJody1zaG9vdCIsICJsYWJlbCI6ICJT
aG9vdC1ib2x0IGhhbmRsZXMiLCAic3ViIjogIk9uZSBsZXZlciBwZXIgaW50ZXJtZWRpYXRlIGxlYWYgdGhyb3dzIHRoZSB0b3AgYW5kIGJvdHRvbSBib2x0
cyJ9LCB7ImltZyI6ICJody1wdWxsIiwgImxhYmVsIjogIlB1bGwgaGFuZGxlIiwgInN1YiI6ICJDbG9zZXMgdGhlIGxhc3QgbGVhZiBmcm9tIGluc2lkZSBv
ciBvdXQifSwgeyJpbWciOiAiaHctY2F0Y2giLCAibGFiZWwiOiAiTWFnbmV0aWMgY2F0Y2hlcyIsICJzdWIiOiAiSG9sZCB0aGUgZm9sZGVkIHN0YWNrIHRv
Z2V0aGVyIGluIHRoZSB3aW5kIn1dLCAiaW5jbHVkZWQiOiBbIk1hZGUgdG8geW91ciBleGFjdCBzaXplIGF0IG91ciBBbCBRdXNhaXMgZmFjaWxpdHkiLCAi
VG91Z2hlbmVkIExvdy1FIGRvdWJsZSBnbGF6aW5nIiwgIk11bHRpLXBvaW50IGxvY2tpbmcsIFBBUyAyNCB0ZXN0ZWQgaGFyZHdhcmUiLCAiRGViYXIgaGFy
ZHdhcmUgdGhyb3VnaG91dCBcdTIwMTQgaGluZ2VzLCByb2xsZXJzLCBsb2NrcyBhbmQgaGFuZGxlcyIsICJZb3VyIGNob2ljZSBvZiBzdGFuZGFyZCA1NSBt
bSBvciBsb3cgMjAgbW0gdGhyZXNob2xkIiwgIlBvd2RlciBjb2F0ZWQgaW4gRHViYWkgdG8gYSBRdWFsaWNvYXQgc3RhbmRhcmQiXSwgImluc3RhbGxfaW5j
bHVkZWQiOiBbIlNpdGUgc3VydmV5IGFuZCBmaW5hbCBtZWFzdXJlIiwgIlJlbW92YWwgb2YgZXhpc3RpbmcgZG9vcnMgd2hlcmUgcmVxdWlyZWQiLCAiRml4
aW5nLCBzZWFsaW5nIGFuZCBnbGF6aW5nIGJ5IExBQSdzIG93biB0ZWFtIiwgIkFkanVzdG1lbnQsIGhhbmRvdmVyIGFuZCBkZW1vbnN0cmF0aW9uIl0sICJm
YXEiOiBbWyJIb3cgaXMgdGhlIHByaWNlIGNhbGN1bGF0ZWQ/IiwgIkJ5IHRoZSBvdmVyYWxsIGZyYW1lIHNpemUuIFdpZHRoIHRpbWVzIGhlaWdodCBnaXZl
cyB0aGUgYXJlYSBpbiBzcXVhcmUgbWV0cmVzLCBhbmQgZXZlcnkgc3F1YXJlIG1ldHJlIGlzIEFFRCAxLDEwMCBzdXBwbHkgb25seSwgb3IgQUVEIDEsNTAw
IHN1cHBsaWVkIGFuZCBpbnN0YWxsZWQsIHBsdXMgNSUgVkFULiBUaGVyZSBhcmUgbm8gaGlkZGVuIGV4dHJhcyBmb3IgY29sb3VyLCB0aHJlc2hvbGQgb3Ig
aGFuZGxlIGNob2ljZS4iXSwgWyJXaGF0IHNpemVzIGNhbiBJIGhhdmU/IiwgIkFueSB3aWR0aCBmcm9tIDEuNCBtIHRvIDguNCBtIGFuZCBhbnkgaGVpZ2h0
IGZyb20gMS44IG0gdG8gMyBtLCBpbiAyIHRvIDcgcGFuZWxzLiBFYWNoIHBhbmVsIG11c3QgYmUgYmV0d2VlbiA3MDAgbW0gYW5kIDEsMjAwIG1tIHdpZGUg
XHUyMDE0IHRoZSBjb25maWd1cmF0b3Igb25seSBvZmZlcnMgcGFuZWwgY291bnRzIHRoYXQgd29yayBmb3IgeW91ciB3aWR0aC4iXSwgWyJXaGljaCB3YXkg
c2hvdWxkIG15IGRvb3JzIGZvbGQ/IiwgIk1vc3QgdmlsbGEgb3BlbmluZ3MgZm9sZCBvdXR3YXJkIHNvIHRoZSBzdGFjayBzaXRzIG9uIHRoZSB0ZXJyYWNl
IGFuZCB0aGUgcm9vbSBzdGF5cyBjbGVhci4gSWYgeW91IHdhbnQgdG8gd2FsayB0aHJvdWdoIHdpdGhvdXQgZm9sZGluZyB0aGUgd2hvbGUgc2V0LCBjaG9v
c2UgYSBzcGxpdCB3aXRoIGEgc2luZ2xlIHBhbmVsIFx1MjAxNCB0aGF0IHBhbmVsIGJlY29tZXMgYSB0cmFmZmljIGRvb3IgeW91IGNhbiB1c2UgbGlrZSBh
IG5vcm1hbCBkb29yLiJdLCBbIklzIHRoaXMgdGhlIHNhbWUgYXMgYSBDb3J0aXpvIGJpZm9sZD8iLCAiRGVXYWxsIGlzIGRlc2lnbmVkIGJ5IERlYmFyIGlu
IEJyYWRmb3JkLCBZb3Jrc2hpcmUsIGFuZCBleHRydWRlZCBieSBDb3J0aXpvLCBzbyBpdCBpcyBDb3J0aXpvIGFsdW1pbml1bSB3aXRoIGEgQnJpdGlzaC1l
bmdpbmVlcmVkIHN5c3RlbSBkZXNpZ24uIEl0IGlzIGFsc28gbGljZW5zZWQgZm9yIGV4dHJ1c2lvbiBoZXJlIGluIHRoZSBVQUUuIl0sIFsiSG93IGRvIEkg
b3JkZXI/IiwgIkFkZCBlYWNoIGRvb3IgdG8geW91ciBiYXNrZXQgYW5kIHNlbmQgaXQgdG8gdXMgb24gV2hhdHNBcHAgb3IgYnkgZW1haWwuIFdlIGNvbmZp
cm0gdGhlIHNwZWNpZmljYXRpb24sIGFycmFuZ2UgYSBzdXJ2ZXkgaWYgeW91IGhhdmUgY2hvc2VuIGluc3RhbGxhdGlvbiwgYW5kIGlzc3VlIGEgZm9ybWFs
IHF1b3RhdGlvbiBhbmQgZHJhd2luZ3MgYmVmb3JlIGFueXRoaW5nIGlzIG1hZGUuIl1dLCAid2hhdHNhcHAiOiAiOTcxNTI2MTI4ODgxIiwgImVtYWlsIjog
ImluZm9AbGFhLmFlIiwgInBob25lX2Rpc3BsYXkiOiAiKzk3MSA0MiA5NTkgOTQ1In07CnZhciBJTUcgPSB7ImhhbmRsZS1ibGFjayI6ICJodHRwczovL2xh
YS5hZS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wOS9sYWEtYmlmb2xkLWhhbmRsZS1ibGFjay5qcGciLCAiaGFuZGxlLWdyZXkiOiAiaHR0cHM6Ly9sYWEu
YWUvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkvbGFhLWJpZm9sZC1oYW5kbGUtZ3JleS5qcGciLCAiaGFuZGxlLXdoaXRlIjogImh0dHBzOi8vbGFhLmFl
L3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2xhYS1iaWZvbGQtaGFuZGxlLXdoaXRlLmpwZyIsICJody1jYXRjaCI6ICJodHRwczovL2xhYS5hZS93cC1j
b250ZW50L3VwbG9hZHMvMjAyNi8wOS9sYWEtYmlmb2xkLWh3LWNhdGNoLmpwZyIsICJody1oYW5kbGUiOiAiaHR0cHM6Ly9sYWEuYWUvd3AtY29udGVudC91
cGxvYWRzLzIwMjYvMDkvbGFhLWJpZm9sZC1ody1oYW5kbGUuanBnIiwgImh3LWhpbmdlLWZpdHRlZCI6ICJodHRwczovL2xhYS5hZS93cC1jb250ZW50L3Vw
bG9hZHMvMjAyNi8wOS9sYWEtYmlmb2xkLWh3LWhpbmdlLWZpdHRlZC5qcGciLCAiaHctbG9jayI6ICJodHRwczovL2xhYS5hZS93cC1jb250ZW50L3VwbG9h
ZHMvMjAyNi8wOS9sYWEtYmlmb2xkLWh3LWxvY2suanBnIiwgImh3LXB1bGwiOiAiaHR0cHM6Ly9sYWEuYWUvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkv
bGFhLWJpZm9sZC1ody1wdWxsLmpwZyIsICJody1yb2xsZXIiOiAiaHR0cHM6Ly9sYWEuYWUvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkvbGFhLWJpZm9s
ZC1ody1yb2xsZXIuanBnIiwgImh3LXRyYWNrIjogImh0dHBzOi8vbGFhLmFlL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2xhYS1iaWZvbGQtaHctdHJh
Y2suanBnIiwgImh3LWhpbmdlIjogImh0dHBzOi8vbGFhLmFlL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2xhYS1iaWZvbGQtaHctaGluZ2UuanBnIiwg
Imh3LXNob290IjogImh0dHBzOi8vbGFhLmFlL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2xhYS1iaWZvbGQtaHctc2hvb3QuanBnIiwgInNob290LWJs
YWNrIjogImh0dHBzOi8vbGFhLmFlL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2xhYS1iaWZvbGQtc2hvb3QtYmxhY2suanBnIiwgInNob290LWdyZXki
OiAiaHR0cHM6Ly9sYWEuYWUvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkvbGFhLWJpZm9sZC1zaG9vdC1ncmV5LmpwZyIsICJzaG9vdC13aGl0ZSI6ICJo
dHRwczovL2xhYS5hZS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wOS9sYWEtYmlmb2xkLXNob290LXdoaXRlLmpwZyIsICJ0aHItaW4tZnVsbCI6ICJodHRw
czovL2xhYS5hZS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wOS9sYWEtYmlmb2xkLXRoci1pbi1mdWxsLnBuZyIsICJ0aHItaW4tbG93IjogImh0dHBzOi8v
bGFhLmFlL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2xhYS1iaWZvbGQtdGhyLWluLWxvdy5wbmciLCAidGhyLW91dC1mdWxsIjogImh0dHBzOi8vbGFh
LmFlL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2xhYS1iaWZvbGQtdGhyLW91dC1mdWxsLnBuZyIsICJ0aHItb3V0LWxvdyI6ICJodHRwczovL2xhYS5h
ZS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wOS9sYWEtYmlmb2xkLXRoci1vdXQtbG93LnBuZyJ9Owp2YXIgY20gPSBEQVRBLmNvbW1lcmNpYWxfbW9kZWws
IFNZUyA9IERBVEEuc3lzdGVtOwp2YXIgJCA9IGZ1bmN0aW9uKGlkKXsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgfTsKdmFyIHJvb3Qg
PSAkKCJsYWEtYmlmb2xkIik7CnZhciBTVE9SRSA9ICJsYWEtYmlmb2xkLWJhc2tldC12MSI7CgppZiAobG9jYXRpb24uc2VhcmNoLmluZGV4T2YoIm5vcHJp
Y2VzIikgIT09IC0xKSByb290LmNsYXNzTGlzdC5hZGQoImxiLW5vcHJpY2VzIik7CmVsc2UgaWYgKGNtLmRyYWZ0X21vZGUpICQoImxiUmliYm9uIikuaGlk
ZGVuID0gZmFsc2U7CgovKiAtLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiB1cFRvKHYsIHN0ZXApeyByZXR1cm4gTWF0aC5jZWls
KHYvc3RlcCAtIDFlLTkpKnN0ZXA7IH0KZnVuY3Rpb24gY2xhbXAodiwgYSwgYil7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB2KSk7IH0KZnVu
Y3Rpb24gZm10KG4peyByZXR1cm4gIkFFRCAiICsgTnVtYmVyKG4pLnRvTG9jYWxlU3RyaW5nKCJlbi1BRSIsIHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6MH0p
OyB9CmZ1bmN0aW9uIG1tKHYpeyByZXR1cm4gTnVtYmVyKHYpLnRvTG9jYWxlU3RyaW5nKCJlbi1BRSIpICsgIiBtbSI7IH0KZnVuY3Rpb24gbSh2KXsgcmV0
dXJuICh2LzEwMDApLnRvTG9jYWxlU3RyaW5nKCJlbi1BRSIse21heGltdW1GcmFjdGlvbkRpZ2l0czoyfSkgKyAiIG0iOyB9CmZ1bmN0aW9uIGVzYyhzKXsg
cmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9bJjw+Il0vZywgZnVuY3Rpb24oYyl7IHJldHVybiB7IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsi
LCciJzoiJnF1b3Q7In1bY107IH0pOyB9CmZ1bmN0aW9uIGJ5SWQobGlzdCwgaWQpeyBmb3IgKHZhciBpPTA7aTxsaXN0Lmxlbmd0aDtpKyspIGlmIChsaXN0
W2ldLmlkPT09aWQpIHJldHVybiBsaXN0W2ldOyByZXR1cm4gbGlzdFswXTsgfQpmdW5jdGlvbiBlbCh0YWcsIGNscywgaHRtbCl7IHZhciBlPWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQodGFnKTsgaWYoY2xzKSBlLmNsYXNzTmFtZT1jbHM7IGlmKGh0bWwhPW51bGwpIGUuaW5uZXJIVE1MPWh0bWw7IHJldHVybiBlOyB9
CgovKiAtLS0tLS0tLS0tIGdlb21ldHJ5IHJ1bGVzIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gdmFsaWRQYW5lbHModyl7CiAgdmFyIG91dD1bXTsKICBmb3Ig
KHZhciBuPVNZUy5wYW5lbHNfbWluO248PVNZUy5wYW5lbHNfbWF4O24rKyl7IHZhciBwdz13L247IGlmIChwdz49U1lTLnBhbmVsX21pbl93aWR0aF9tbSAm
JiBwdzw9U1lTLnBhbmVsX21heF93aWR0aF9tbSkgb3V0LnB1c2gobik7IH0KICByZXR1cm4gb3V0Owp9CmZ1bmN0aW9uIHNwbGl0c0ZvcihuKXsKICB2YXIg
cz1bXTsgZm9yICh2YXIgYT1uO2E+PTA7YS0tKSBzLnB1c2goe2E6YSxiOm4tYSxpZDphKyIrIisobi1hKX0pOwogIHJldHVybiBzOwp9CmZ1bmN0aW9uIHNw
bGl0SW5mbyhzcCl7CiAgdmFyIGE9c3AuYSwgYj1zcC5iLCBuPWErYiwgdGQ9W107CiAgLy8gYSBwYW5lbCBvbiBpdHMgb3duIChvZGQgZ3JvdXApIGdpdmVz
IGEgdHJhZmZpYyBkb29yIGF0IHRoZSBmcmVlIGVuZCBvZiB0aGF0IGdyb3VwCiAgaWYgKGElMj09PTEpIHRkLnB1c2goYS0xKTsgICAgICAgICAgICAvLyBs
YXN0IHBhbmVsIG9mIHRoZSBsZWZ0IGdyb3VwICgwLWJhc2VkKQogIGlmIChiJTI9PT0xKSB0ZC5wdXNoKGEpOyAgICAgICAgICAgICAgLy8gZmlyc3QgcGFu
ZWwgb2YgdGhlIHJpZ2h0IGdyb3VwCiAgdmFyIGxhYmVsLCBzdWI7CiAgaWYgKGI9PT0wKXsgbGFiZWw9IkFsbCBmb2xkIGxlZnQiOyBzdWIgPSBuJTIgPyAi
TGVhZCBwYW5lbCBkb3VibGVzIGFzIGEgdHJhZmZpYyBkb29yIiA6ICJQYW5lbHMgZm9sZCBpbiBwYWlycyB0byB0aGUgbGVmdCI7IH0KICBlbHNlIGlmIChh
PT09MCl7IGxhYmVsPSJBbGwgZm9sZCByaWdodCI7IHN1YiA9IG4lMiA/ICJMZWFkIHBhbmVsIGRvdWJsZXMgYXMgYSB0cmFmZmljIGRvb3IiIDogIlBhbmVs
cyBmb2xkIGluIHBhaXJzIHRvIHRoZSByaWdodCI7IH0KICBlbHNlIHsgbGFiZWwgPSBhKyIgbGVmdCDCtyAiK2IrIiByaWdodCI7IHN1YiA9IHRkLmxlbmd0
aD09PTIgPyAiVHdvIHRyYWZmaWMgZG9vcnMiIDogdGQubGVuZ3RoPT09MSA/IChhPT09MXx8Yj09PTEgPyAiU2luZ2xlIHRyYWZmaWMgZG9vciwgdGhlIHJl
c3Qgc3RhY2sgYXdheSIgOiAiVHJhZmZpYyBkb29yIG9uIHRoZSBvZGQgc2lkZSIpIDogIkV2ZW4gc3BsaXQsIG9wZW5zIGZyb20gdGhlIG1pZGRsZSI7IH0K
ICBpZiAoYT09PTEgJiYgYj09PTEpIHsgbGFiZWw9IkZyZW5jaCBwYWlyIjsgc3ViPSJCb3RoIHBhbmVscyBvcGVuIGluZGVwZW5kZW50bHkiOyB9CiAgcmV0
dXJuIHsgbGFiZWw6bGFiZWwsIHN1YjpzdWIsIHRyYWZmaWM6dGQgfTsKfQoKLyogLS0tLS0tLS0tLSBzdGF0ZSAtLS0tLS0tLS0tICovCnZhciBEID0gREFU
QS5kZWZhdWx0czsKdmFyIHN0YXRlID0geyB3OkQud2lkdGhfbW0sIGg6RC5oZWlnaHRfbW0sIG46RC5wYW5lbHMsIHNwbGl0OkQuc3BsaXQsIG9wZW5pbmc6
RC5vcGVuaW5nLCBjb2xvdXI6RC5jb2xvdXIsIHJhbDoiIiwgZ2xhc3M6RC5nbGFzcywgdGhyZXNob2xkOkQudGhyZXNob2xkLCBoYW5kbGU6RC5oYW5kbGUs
IGluc3RhbGw6RC5pbnN0YWxsIH07CnZhciBlZGl0aW5nSWQgPSBudWxsOwp2YXIgYmFza2V0ID0gW107CnRyeSB7IGJhc2tldCA9IEpTT04ucGFyc2UobG9j
YWxTdG9yYWdlLmdldEl0ZW0oU1RPUkUpfHwiW10iKTsgaWYoIUFycmF5LmlzQXJyYXkoYmFza2V0KSkgYmFza2V0PVtdOyB9IGNhdGNoKGUpeyBiYXNrZXQ9
W107IH0KZnVuY3Rpb24gc2F2ZSgpeyB0cnl7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JFLCBKU09OLnN0cmluZ2lmeShiYXNrZXQpKTsgfWNhdGNoKGUp
e30gfQoKZnVuY3Rpb24gbm9ybWFsaXNlKHMpewogIHMudyA9IGNsYW1wKE1hdGgucm91bmQocy53L1NZUy53aWR0aF9zdGVwX21tKSpTWVMud2lkdGhfc3Rl
cF9tbSwgU1lTLnBhbmVsc19taW4qU1lTLnBhbmVsX21pbl93aWR0aF9tbSwgU1lTLnBhbmVsc19tYXgqU1lTLnBhbmVsX21heF93aWR0aF9tbSk7CiAgcy5o
ID0gY2xhbXAoTWF0aC5yb3VuZChzLmgvU1lTLmhlaWdodF9zdGVwX21tKSpTWVMuaGVpZ2h0X3N0ZXBfbW0sIFNZUy5oZWlnaHRfbWluX21tLCBTWVMuaGVp
Z2h0X21heF9tbSk7CiAgdmFyIHZwID0gdmFsaWRQYW5lbHMocy53KTsKICBpZiAodnAuaW5kZXhPZihzLm4pPT09LTEpeyAvLyBwaWNrIHRoZSB2YWxpZCBj
b3VudCBuZWFyZXN0IHRoZSBjdXJyZW50IG9uZQogICAgdmFyIGJlc3Q9dnBbMF07IHZwLmZvckVhY2goZnVuY3Rpb24obil7IGlmIChNYXRoLmFicyhuLXMu
bik8TWF0aC5hYnMoYmVzdC1zLm4pKSBiZXN0PW47IH0pOyBzLm49YmVzdDsKICB9CiAgdmFyIHBhcnRzID0gU3RyaW5nKHMuc3BsaXQpLnNwbGl0KCIrIiku
bWFwKE51bWJlcik7CiAgaWYgKHBhcnRzLmxlbmd0aCE9PTIgfHwgcGFydHNbMF0rcGFydHNbMV0hPT1zLm4pIHMuc3BsaXQgPSBzLm4rIiswIjsKICByZXR1
cm4gczsKfQpmdW5jdGlvbiBwYXJzZVNwbGl0KHMpeyB2YXIgcD1zLnNwbGl0KCIrIikubWFwKE51bWJlcik7IHJldHVybiB7YTpwWzBdLGI6cFsxXSxpZDpz
fTsgfQoKLyogLS0tLS0tLS0tLSBwcmljaW5nIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gcHJpY2Uocyl7CiAgdmFyIGFyZWEgPSBzLncqcy5oLzFlNjsKICB2
YXIgY29sID0gYnlJZChEQVRBLmNvbG91cnMsIHMuY29sb3VyKSwgZ2wgPSBieUlkKERBVEEuZ2xhc3MsIHMuZ2xhc3MpOwogIHZhciBsaW5lcz1bXSwgbm90
ZXM9W107CiAgdmFyIHN1cHBseSA9IHVwVG8oYXJlYSpjbS5zdXBwbHlfYWVkX3Blcl9zcW0qKDErKGNvbC5zdXJjaGFyZ2VfcGN0fHwwKS8xMDApLCBjbS5s
aW5lX3JvdW5kX2FlZCk7CiAgbGluZXMucHVzaCh7azoiRGVXYWxsIGJpZm9sZCwgc3VwcGx5IG9ubHkiLCB2OnN1cHBseX0pOwogIGlmIChnbC5zdXJjaGFy
Z2VfYWVkX3Blcl9zcW0peyB2YXIgZz11cFRvKGFyZWEqZ2wuc3VyY2hhcmdlX2FlZF9wZXJfc3FtLCBjbS5saW5lX3JvdW5kX2FlZCk7IGxpbmVzLnB1c2go
e2s6Z2wubGFiZWwsIHY6Z30pOyB9CiAgZWxzZSBpZiAoZ2wucXVvdGVkKSBub3Rlcy5wdXNoKGdsLmxhYmVsKyIg4oCUIHF1b3RlZCBzZXBhcmF0ZWx5Iik7
CiAgdmFyIGluc3RhbGwgPSAwOwogIGlmIChzLmluc3RhbGwpeyBpbnN0YWxsID0gdXBUbyhhcmVhKmNtLmluc3RhbGxfYWVkX3Blcl9zcW0sIGNtLmxpbmVf
cm91bmRfYWVkKTsgbGluZXMucHVzaCh7azoiSW5zdGFsbGF0aW9uLCBEdWJhaSAmIFNoYXJqYWgiLCB2Omluc3RhbGx9KTsgfQogIHZhciBleD0wOyBsaW5l
cy5mb3JFYWNoKGZ1bmN0aW9uKGwpeyBleCs9bC52OyB9KTsKICB2YXIgdmF0ID0gTWF0aC5yb3VuZChleCpjbS52YXRfcmF0ZSk7CiAgcmV0dXJuIHsgYXJl
YTphcmVhLCBsaW5lczpsaW5lcywgbm90ZXM6bm90ZXMsIGV4OmV4LCB2YXQ6dmF0LCBpbmM6ZXgrdmF0LCBzdXBwbHk6c3VwcGx5LCBpbnN0YWxsOmluc3Rh
bGwgfTsKfQoKLyogLS0tLS0tLS0tLSBTVkcgZG9vciBkcmF3aW5nIC0tLS0tLS0tLS0gKi8KdmFyIHVpZD0wOwp2YXIgU1RBQ0tfTU0gPSAxMzA7ICAgLy8g
YXBwYXJlbnQgdGhpY2tuZXNzIG9mIGEgZm9sZGVkIGxlYWYgaW5jbC4gaGluZ2UgZ2FwCmZ1bmN0aW9uIGFwcGFyZW50V2lkdGgocHcsIHQpeyByZXR1cm4g
TWF0aC5tYXgocHcqTWF0aC5jb3ModCpNYXRoLlBJLzE4MCo4OCksIFNUQUNLX01NKTsgfQpmdW5jdGlvbiBjbGVhck9wZW5pbmcocywgdCl7IHZhciBwdz0o
cy53LTEyMCkvcy5uOyByZXR1cm4gTWF0aC5tYXgoMCwgKHMudy0xMjApIC0gcy5uKmFwcGFyZW50V2lkdGgocHcsdCkpOyB9CmZ1bmN0aW9uIGRyYXdEb29y
KHMsIG8pewogIG8gPSBvfHx7fTsKICB2YXIgdCA9IGNsYW1wKG8ub3Blbnx8MCwgMCwgMSksIHRoID0gdCpNYXRoLlBJLzE4MCo4ODsgICAgICAvLyBoaW5n
ZSBhbmdsZSwgMCA9IGNsb3NlZAogIHZhciBXPXMudywgSD1zLmgsIG49cy5uLCBzcD1wYXJzZVNwbGl0KHMuc3BsaXQpLCBpbmZvPXNwbGl0SW5mbyhzcCk7
CiAgdmFyIGNvbCA9IGJ5SWQoREFUQS5jb2xvdXJzLCBzLmNvbG91cik7CiAgdmFyIGZyYW1lID0gY29sLmhleCB8fCAiIzdBN0Y4NCI7CiAgdmFyIGxpZ2h0
ID0gaXNMaWdodChmcmFtZSk7CiAgdmFyIGVkZ2UgPSBsaWdodCA/ICIjQjhCNUFDIiA6IHNoYWRlKGZyYW1lLCAxLjM1KTsKICB2YXIgZGFyayA9IHNoYWRl
KGZyYW1lLCAwLjgpOwogIHZhciBobmQgPSBieUlkKERBVEEuaGFuZGxlcywgcy5oYW5kbGUpOyB2YXIgaGFuZGxlQ29sID0gaG5kLmhleCB8fCAiIzE1MTUx
NyI7CiAgdmFyIGlkID0gImxiZyIrKHVpZCsrKTsKICB2YXIgcGFkID0gby5taW5pID8gNjAgOiAyODAsIG95ID0gby5taW5pID8gMzAgOiAxNzAsIGFycm93
SCA9IG8ubWluaSA/IDI2MCA6IDM4MDsKICB2YXIgRiA9IDYwLCBTVCA9IDg1LCBSVCA9IDg1LCBSQiA9IDEzMDsgICAgICAgICAgICAgIC8vIGZyYW1lLCBz
dGlsZSwgdG9wIHJhaWwsIGJvdHRvbSByYWlsIChtbSkKICB2YXIgcHcgPSAoVy0yKkYpL24sIGloID0gSC0yKkY7CiAgdmFyIHBsYW5IID0gby5wbGFuID8g
cHcgKyA1MjAgOiAwOwogIHZhciB2YlcgPSBNYXRoLm1heChXK3BhZCoyLCBvLm1pbmkgPyAwIDogKEgrYXJyb3dIKSoxLjA1KSwgdmJIID0gb3kgKyBIICsg
YXJyb3dIICsgcGxhbkg7CiAgdmFyIG94ID0gKHZiVy1XKS8yOwogIHZhciBvdXQgPSAnPHN2ZyB2aWV3Qm94PSIwIDAgJyt2YlcrJyAnK3ZiSCsnIiB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iJytuKycgcGFuZWwgYmlmb2xkIGRvb3IsICcraW5mby5sYWJl
bCsodD4wLjAyPyIsIHNob3duICIrTWF0aC5yb3VuZCh0KjEwMCkrIiUgb3BlbiI6IiIpKyciPic7CiAgb3V0ICs9ICc8ZGVmcz48bGluZWFyR3JhZGllbnQg
aWQ9IicraWQrJ2ciIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNEQ0U3RUUiLz48c3RvcCBvZmZz
ZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI0M0RDNERCIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiNEOUU0RUIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0
b3AtY29sb3I9IiNBRkMwQ0MiLz48L2xpbmVhckdyYWRpZW50PicKICAgICAgICsgJzxsaW5lYXJHcmFkaWVudCBpZD0iJytpZCsncyIgeDE9IjAiIHkxPSIw
IiB4Mj0iMCIgeTI9IjEiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIuMzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0
b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+JwogICAgICAgKyAnPGxpbmVhckdyYWRpZW50IGlkPSInK2lkKydy
IiB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjRjdGM0VDIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9w
LWNvbG9yPSIjRTlFMkQ2Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+JzsKICAvLyBmbG9vciBsaW5lCiAgb3V0ICs9ICc8bGluZSB4MT0iJysob3gtcGFk
KjAuNikrJyIgeTE9IicrKG95K0gpKyciIHgyPSInKyhveCtXK3BhZCowLjYpKyciIHkyPSInKyhveStIKSsnIiBzdHJva2U9IiNCOUIyQTUiIHN0cm9rZS13
aWR0aD0iJysoby5taW5pPzEwOjgpKyciLz4nOwogIC8vIG91dGVyIGZyYW1lLCB3aXRoIHRoZSByb29tIHNob3dpbmcgdGhyb3VnaCBvbmNlIHRoZSBwYW5l
bHMgZm9sZCBhd2F5CiAgb3V0ICs9ICc8cmVjdCB4PSInK294KyciIHk9Iicrb3krJyIgd2lkdGg9IicrVysnIiBoZWlnaHQ9IicrSCsnIiBmaWxsPSInK2Zy
YW1lKyciIHN0cm9rZT0iJytlZGdlKyciIHN0cm9rZS13aWR0aD0iJysoby5taW5pPzg6NSkrJyIvPic7CiAgb3V0ICs9ICc8cmVjdCB4PSInKyhveCtGKSsn
IiB5PSInKyhveStGKSsnIiB3aWR0aD0iJysoVy0yKkYpKyciIGhlaWdodD0iJytpaCsnIiBmaWxsPSJ1cmwoIycraWQrJ3IpIi8+JzsKICAvLyBhcHBhcmVu
dCBwYW5lbCB3aWR0aCB3aGVuIGZvbGRlZCwgYW5kIHdoZXJlIGVhY2ggcGFuZWwgc2l0cwogIHZhciBjdyA9IGFwcGFyZW50V2lkdGgocHcsIHQpLCB4cz1b
XSwgYWNjPW94K0YsIGk7CiAgZm9yIChpPTA7aTxzcC5hO2krKyl7IHhzW2ldPWFjYzsgYWNjKz1jdzsgfQogIGFjYyA9IG94K1ctRjsKICBmb3IgKGk9bi0x
O2k+PXNwLmE7aS0tKXsgYWNjLT1jdzsgeHNbaV09YWNjOyB9CiAgdmFyIGNsb3NlZCA9IHQ8MC4wMjsKICBmb3IgKGk9MDtpPG47aSsrKXsKICAgIHZhciBw
eCA9IHhzW2ldLCBweSA9IG95K0YsIGluTGVmdCA9IGk8c3AuYSwgc2MgPSBjdy9wdzsKICAgIHZhciBrID0gaW5MZWZ0ID8gaSA6IChuLTEtaSksIGF3YXkg
PSBrJTI9PT0wOwogICAgb3V0ICs9ICc8cmVjdCB4PSInK3B4KyciIHk9IicrcHkrJyIgd2lkdGg9IicrY3crJyIgaGVpZ2h0PSInK2loKyciIGZpbGw9Iicr
ZnJhbWUrJyIvPic7CiAgICB2YXIgZ3g9cHgrU1Qqc2MsIGd5PXB5K1JULCBndz1jdy0yKlNUKnNjLCBnaD1paC1SVC1SQjsKICAgIG91dCArPSAnPHJlY3Qg
eD0iJytneCsnIiB5PSInK2d5KyciIHdpZHRoPSInK2d3KyciIGhlaWdodD0iJytnaCsnIiBmaWxsPSJ1cmwoIycraWQrJ2cpIi8+JzsKICAgIG91dCArPSAn
PHJlY3QgeD0iJytneCsnIiB5PSInK2d5KyciIHdpZHRoPSInK2d3KyciIGhlaWdodD0iJysoZ2gqMC4zNSkrJyIgZmlsbD0idXJsKCMnK2lkKydzKSIvPic7
CiAgICBpZiAodD4wLjAyKSBvdXQgKz0gJzxyZWN0IHg9IicrZ3grJyIgeT0iJytneSsnIiB3aWR0aD0iJytndysnIiBoZWlnaHQ9IicrZ2grJyIgZmlsbD0i
JysoYXdheT8iIzAwMCI6IiNmZmYiKSsnIiBvcGFjaXR5PSInKygoYXdheT8wLjM6MC4xMikqdCkrJyIvPic7CiAgICBvdXQgKz0gJzxyZWN0IHg9IicrZ3gr
JyIgeT0iJytneSsnIiB3aWR0aD0iJytndysnIiBoZWlnaHQ9IicrZ2grJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSInK2RhcmsrJyIgc3Ryb2tlLXdpZHRoPSIn
KyhvLm1pbmk/Njo0KSsnIi8+JzsKICAgIGlmIChpPjAgJiYgKGNsb3NlZCB8fCAoaW5MZWZ0ICYmIGk8c3AuYSkgfHwgKCFpbkxlZnQgJiYgaT5zcC5hKSkp
IG91dCArPSAnPGxpbmUgeDE9IicrcHgrJyIgeTE9IicrcHkrJyIgeDI9IicrcHgrJyIgeTI9IicrKHB5K2loKSsnIiBzdHJva2U9IicrKGxpZ2h0PyIjOUM5
NzhDIjpzaGFkZShmcmFtZSwwLjU1KSkrJyIgc3Ryb2tlLXdpZHRoPSInKyhvLm1pbmk/ODo2KSsnIi8+JzsKICAgIGlmICghY2xvc2VkKSBjb250aW51ZTsK
ICAgIC8vIGhpbmdlczogZXZlcnkgam9pbnQgd2l0aGluIGEgZ3JvdXAsIHBsdXMgdGhlIGphbWIgb24gdGhlIHN0YWNraW5nIHNpZGUKICAgIHZhciBoaW5n
ZVggPSBpbkxlZnQgPyBweCA6IHB4K3B3OwogICAgaWYgKCFvLm1pbmkpewogICAgICBbMC4xMiwwLjUsMC44OF0uZm9yRWFjaChmdW5jdGlvbihmKXsgb3V0
ICs9ICc8cmVjdCB4PSInKyhoaW5nZVgtMTgpKyciIHk9IicrKHB5K2loKmYtNDUpKyciIHdpZHRoPSIzNiIgaGVpZ2h0PSI5MCIgcng9IjEwIiBmaWxsPSIn
KyhsaWdodD8iIzhGOEY4QyI6c2hhZGUoZnJhbWUsMS45KSkrJyIgb3BhY2l0eT0iLjkiLz4nOyB9KTsKICAgIH0KICAgIC8vIGhhbmRsZSBvbiB0cmFmZmlj
IGRvb3JzLCBvbiB0aGUgbG9jayBzdGlsZSAoZWRnZSBhd2F5IGZyb20gaXRzIHN0YWNrKQogICAgaWYgKGluZm8udHJhZmZpYy5pbmRleE9mKGkpIT09LTEp
ewogICAgICB2YXIgaHggPSBpbkxlZnQgPyBweCtwdy1TVC8yIDogcHgrU1QvMiwgaHkgPSBveStILTEwNTA7CiAgICAgIG91dCArPSAnPHJlY3QgeD0iJyso
aHgtMTYpKyciIHk9IicrKGh5LTE1MCkrJyIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMwMCIgcng9IjE0IiBmaWxsPSInK2hhbmRsZUNvbCsnIiBzdHJva2U9Iicr
KGxpZ2h0PyIjNkY2RjZDIjoicmdiYSgwLDAsMCwuMzUpIikrJyIgc3Ryb2tlLXdpZHRoPSIzIi8+JzsKICAgICAgaWYgKCFvLm1pbmkpIG91dCArPSAnPGNp
cmNsZSBjeD0iJytoeCsnIiBjeT0iJysoaHkrMjMwKSsnIiByPSIyMiIgZmlsbD0iJytoYW5kbGVDb2wrJyIgc3Ryb2tlPSJyZ2JhKDAsMCwwLC4zKSIgc3Ry
b2tlLXdpZHRoPSIzIi8+JzsKICAgIH0KICB9CiAgLy8gZm9sZCBjaGV2cm9ucyBiZWxvdyAoc3RhdGljIGRyYXdpbmcgb25seSkKICBpZiAoY2xvc2VkKSBm
b3IgKGk9MDtpPG47aSsrKXsKICAgIHZhciBieCA9IG94K0YraSpwdywgaW5MID0gaTxzcC5hOwogICAgdmFyIGN5ID0gb3krSCsoby5taW5pPzEzMDoxNTAp
LCBjd2lkID0gTWF0aC5taW4ocHcqMC4yOCwxNjApLCBjaGggPSBjd2lkKjAuOSwgY3ggPSBieCtwdy8yOwogICAgdmFyIHB0cyA9IGluTCA/IFsoY3grY3dp
ZC8yKSsiLCIrKGN5LWNoaC8yKSwoY3gtY3dpZC8yKSsiLCIrY3ksKGN4K2N3aWQvMikrIiwiKyhjeStjaGgvMildIDogWyhjeC1jd2lkLzIpKyIsIisoY3kt
Y2hoLzIpLChjeCtjd2lkLzIpKyIsIitjeSwoY3gtY3dpZC8yKSsiLCIrKGN5K2NoaC8yKV07CiAgICBvdXQgKz0gJzxwb2x5bGluZSBwb2ludHM9IicrcHRz
LmpvaW4oIiAiKSsnIiBmaWxsPSJub25lIiBzdHJva2U9IiNCODk2NEIiIHN0cm9rZS13aWR0aD0iJysoby5taW5pPzIyOjE4KSsnIiBzdHJva2UtbGluZWNh
cD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4nOwogICAgaWYgKCFvLm1pbmkgJiYgaW5mby50cmFmZmljLmluZGV4T2YoaSkhPT0tMSkgb3V0
ICs9ICc8dGV4dCB4PSInK2N4KyciIHk9IicrKGN5K2NoaC8yKzE1MCkrJyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9IlBsdXMgSmFrYXJ0
YSBTYW5zLHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSI3MDAiIGZvbnQtc2l6ZT0iOTUiIGxldHRlci1zcGFjaW5nPSI2IiBmaWxsPSIjOUI5Mjg1Ij5UUkFG
RklDIERPT1I8L3RleHQ+JzsKICB9CiAgLy8gZGltZW5zaW9ucwogIGlmICghby5taW5pKXsKICAgIHZhciBkeSA9IG95LTg1LCB0eCA9IG94K1cvMjsKICAg
IG91dCArPSAnPGxpbmUgeDE9Iicrb3grJyIgeTE9IicrZHkrJyIgeDI9IicrKG94K1cpKyciIHkyPSInK2R5KyciIHN0cm9rZT0iIzlCOTI4NSIgc3Ryb2tl
LXdpZHRoPSI0Ii8+JwogICAgICAgICArICc8bGluZSB4MT0iJytveCsnIiB5MT0iJysoZHktMzApKyciIHgyPSInK294KyciIHkyPSInKyhkeSszMCkrJyIg
c3Ryb2tlPSIjOUI5Mjg1IiBzdHJva2Utd2lkdGg9IjQiLz4nCiAgICAgICAgICsgJzxsaW5lIHgxPSInKyhveCtXKSsnIiB5MT0iJysoZHktMzApKyciIHgy
PSInKyhveCtXKSsnIiB5Mj0iJysoZHkrMzApKyciIHN0cm9rZT0iIzlCOTI4NSIgc3Ryb2tlLXdpZHRoPSI0Ii8+JwogICAgICAgICArICc8cmVjdCB4PSIn
Kyh0eC0zMzApKyciIHk9IicrKGR5LTcwKSsnIiB3aWR0aD0iNjYwIiBoZWlnaHQ9IjE0MCIgZmlsbD0iI0Y0RjFFQSIvPicKICAgICAgICAgKyAnPHRleHQg
eD0iJyt0eCsnIiB5PSInKyhkeSszOCkrJyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9IlBsdXMgSmFrYXJ0YSBTYW5zLHNhbnMtc2VyaWYi
IGZvbnQtd2VpZ2h0PSI3MDAiIGZvbnQtc2l6ZT0iMTA1IiBmaWxsPSIjMUIyQTNEIj4nK1cudG9Mb2NhbGVTdHJpbmcoImVuLUFFIikrJyBtbTwvdGV4dD4n
OwogICAgdmFyIGR4ID0gb3grVys5NSwgdHkgPSBveStILzI7CiAgICBvdXQgKz0gJzxsaW5lIHgxPSInK2R4KyciIHkxPSInK295KyciIHgyPSInK2R4Kyci
IHkyPSInKyhveStIKSsnIiBzdHJva2U9IiM5QjkyODUiIHN0cm9rZS13aWR0aD0iNCIvPicKICAgICAgICAgKyAnPGxpbmUgeDE9IicrKGR4LTMwKSsnIiB5
MT0iJytveSsnIiB4Mj0iJysoZHgrMzApKyciIHkyPSInK295KyciIHN0cm9rZT0iIzlCOTI4NSIgc3Ryb2tlLXdpZHRoPSI0Ii8+JwogICAgICAgICArICc8
bGluZSB4MT0iJysoZHgtMzApKyciIHkxPSInKyhveStIKSsnIiB4Mj0iJysoZHgrMzApKyciIHkyPSInKyhveStIKSsnIiBzdHJva2U9IiM5QjkyODUiIHN0
cm9rZS13aWR0aD0iNCIvPicKICAgICAgICAgKyAnPHRleHQgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoJysoZHgrNDUpKycgJyt0eSsnKSByb3RhdGUoLTkwKSIg
dGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9IlBsdXMgSmFrYXJ0YSBTYW5zLHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSI3MDAiIGZvbnQtc2l6
ZT0iMTA1IiBmaWxsPSIjMUIyQTNEIiBkb21pbmFudC1iYXNlbGluZT0iaGFuZ2luZyI+JytILnRvTG9jYWxlU3RyaW5nKCJlbi1BRSIpKycgbW08L3RleHQ+
JzsKICB9CiAgLy8gcGxhbiB2aWV3OiB0aGUgY29uY2VydGluYSBzZWVuIGZyb20gYWJvdmU7IG91dHNpZGUgaXMgdG93YXJkcyB0aGUgdmlld2VyIChib3R0
b20pCiAgaWYgKG8ucGxhbil7CiAgICB2YXIgYmFzZSA9IG95K0grYXJyb3dILCBkaXIgPSBzLm9wZW5pbmc9PT0ib3V0IiA/IDEgOiAtMTsKICAgIHZhciB0
cmFja1kgPSBkaXI+MCA/IGJhc2UrMTQwIDogYmFzZStwdysxNDA7CiAgICB2YXIgd2FsbFcgPSAxMTAsIGxhYiA9ICdmb250LWZhbWlseT0iUGx1cyBKYWth
cnRhIFNhbnMsc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9IjcwMCIgZm9udC1zaXplPSI4MCIgbGV0dGVyLXNwYWNpbmc9IjgiIGZpbGw9IiM5QjkyODUiJzsK
ICAgIG91dCArPSAnPHRleHQgeD0iJytveCsnIiB5PSInKyhiYXNlKzcwKSsnIiAnK2xhYisnPlBMQU4gVklFVyDCtyAnKyhzLm9wZW5pbmc9PT0ib3V0Ij8i
T1BFTlMgT1VUIjoiT1BFTlMgSU4iKSsnPC90ZXh0Pic7CiAgICB2YXIgeU5lYXIgPSBkaXI+MCA/IHRyYWNrWS02MCA6IHRyYWNrWSsxMTAsIHlGYXIgPSBk
aXI+MCA/IHRyYWNrWStwdysxMjAgOiB0cmFja1ktcHctNjA7CiAgICBvdXQgKz0gJzx0ZXh0IHg9IicrKG94K1cpKyciIHk9IicreU5lYXIrJyIgdGV4dC1h
bmNob3I9ImVuZCIgJytsYWIrJyBvcGFjaXR5PSIuOCI+JysoZGlyPjA/IklOU0lERSI6Ik9VVFNJREUiKSsnPC90ZXh0Pic7CiAgICBvdXQgKz0gJzx0ZXh0
IHg9IicrKG94K1cpKyciIHk9IicreUZhcisnIiB0ZXh0LWFuY2hvcj0iZW5kIiAnK2xhYisnIG9wYWNpdHk9Ii44Ij4nKyhkaXI+MD8iT1VUU0lERSI6IklO
U0lERSIpKyc8L3RleHQ+JzsKICAgIG91dCArPSAnPGxpbmUgeDE9IicrKG94LXBhZCowLjYpKyciIHkxPSInK3RyYWNrWSsnIiB4Mj0iJytveCsnIiB5Mj0i
Jyt0cmFja1krJyIgc3Ryb2tlPSIjQjlCMkE1IiBzdHJva2Utd2lkdGg9Iicrd2FsbFcrJyIvPicKICAgICAgICAgKyAnPGxpbmUgeDE9IicrKG94K1cpKyci
IHkxPSInK3RyYWNrWSsnIiB4Mj0iJysob3grVytwYWQqMC42KSsnIiB5Mj0iJyt0cmFja1krJyIgc3Ryb2tlPSIjQjlCMkE1IiBzdHJva2Utd2lkdGg9Iicr
d2FsbFcrJyIvPicKICAgICAgICAgKyAnPGxpbmUgeDE9Iicrb3grJyIgeTE9IicrdHJhY2tZKyciIHgyPSInKyhveCtXKSsnIiB5Mj0iJyt0cmFja1krJyIg
c3Ryb2tlPSIjQ0ZDOEJCIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1kYXNoYXJyYXk9IjQwIDMwIi8+JwogICAgICAgICArICc8cmVjdCB4PSInK294Kyci
IHk9IicrKHRyYWNrWS00NSkrJyIgd2lkdGg9IicrRisnIiBoZWlnaHQ9IjkwIiBmaWxsPSInK2ZyYW1lKyciLz48cmVjdCB4PSInKyhveCtXLUYpKyciIHk9
IicrKHRyYWNrWS00NSkrJyIgd2lkdGg9IicrRisnIiBoZWlnaHQ9IjkwIiBmaWxsPSInK2ZyYW1lKyciLz4nOwogICAgdmFyIHNlZ3M9W10sIGhpbmdlcz1b
XSwgeCwgeSwgaiwgc2duLCBleF8sIGV5XzsKICAgIHg9b3grRjsgeT10cmFja1k7IGhpbmdlcy5wdXNoKFt4LHldKTsKICAgIGZvciAoaj0wO2o8c3AuYTtq
KyspeyBzZ24gPSBqJTI9PT0wID8gMSA6IC0xOyBleF8gPSB4K3B3Kk1hdGguY29zKHRoKTsgZXlfID0geStkaXIqc2duKnB3Kk1hdGguc2luKHRoKTsgc2Vn
cy5wdXNoKFt4LHksZXhfLGV5XyxqXSk7IHg9ZXhfOyB5PWV5XzsgaGluZ2VzLnB1c2goW3gseV0pOyB9CiAgICB4PW94K1ctRjsgeT10cmFja1k7IGhpbmdl
cy5wdXNoKFt4LHldKTsKICAgIGZvciAoaj0wO2o8c3AuYjtqKyspeyBzZ24gPSBqJTI9PT0wID8gMSA6IC0xOyBleF8gPSB4LXB3Kk1hdGguY29zKHRoKTsg
ZXlfID0geStkaXIqc2duKnB3Kk1hdGguc2luKHRoKTsgc2Vncy5wdXNoKFt4LHksZXhfLGV5XyxzcC5hK2pdKTsgeD1leF87IHk9ZXlfOyBoaW5nZXMucHVz
aChbeCx5XSk7IH0KICAgIHZhciBhcmMgPSAnZmlsbD0ibm9uZSIgc3Ryb2tlPSIjQjg5NjRCIiBzdHJva2Utd2lkdGg9IjciIHN0cm9rZS1kYXNoYXJyYXk9
IjM2IDI4IiBvcGFjaXR5PSIuOSInOwogICAgaWYgKHQ+MC4wMiAmJiBzcC5hPT09MSkgb3V0ICs9ICc8cGF0aCBkPSJNICcrKG94K0YrcHcpKycgJyt0cmFj
a1krJyBBICcrcHcrJyAnK3B3KycgMCAwICcrKGRpcj4wPzE6MCkrJyAnKyhveCtGK3B3Kk1hdGguY29zKHRoKSkrJyAnKyh0cmFja1krZGlyKnB3Kk1hdGgu
c2luKHRoKSkrJyIgJythcmMrJy8+JzsKICAgIGlmICh0PjAuMDIgJiYgc3AuYj09PTEpIG91dCArPSAnPHBhdGggZD0iTSAnKyhveCtXLUYtcHcpKycgJyt0
cmFja1krJyBBICcrcHcrJyAnK3B3KycgMCAwICcrKGRpcj4wPzA6MSkrJyAnKyhveCtXLUYtcHcqTWF0aC5jb3ModGgpKSsnICcrKHRyYWNrWStkaXIqcHcq
TWF0aC5zaW4odGgpKSsnIiAnK2FyYysnLz4nOwogICAgc2Vncy5mb3JFYWNoKGZ1bmN0aW9uKHNnKXsKICAgICAgb3V0ICs9ICc8bGluZSB4MT0iJytzZ1sw
XSsnIiB5MT0iJytzZ1sxXSsnIiB4Mj0iJytzZ1syXSsnIiB5Mj0iJytzZ1szXSsnIiBzdHJva2U9IicrZnJhbWUrJyIgc3Ryb2tlLXdpZHRoPSI2NCIgc3Ry
b2tlLWxpbmVjYXA9InJvdW5kIi8+JwogICAgICAgICAgICsgJzxsaW5lIHgxPSInK3NnWzBdKyciIHkxPSInK3NnWzFdKyciIHgyPSInK3NnWzJdKyciIHky
PSInK3NnWzNdKyciIHN0cm9rZT0iI0M0RDNERCIgc3Ryb2tlLXdpZHRoPSIyMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+JzsKICAgIH0pOwogICAgaGlu
Z2VzLmZvckVhY2goZnVuY3Rpb24oaHApeyBvdXQgKz0gJzxjaXJjbGUgY3g9IicraHBbMF0rJyIgY3k9IicraHBbMV0rJyIgcj0iMjYiIGZpbGw9IicrKGxp
Z2h0PyIjOEY4RjhDIjplZGdlKSsnIiBzdHJva2U9IiNGNEYxRUEiIHN0cm9rZS13aWR0aD0iOCIvPic7IH0pOwogIH0KICBvdXQgKz0gJzwvc3ZnPic7CiAg
cmV0dXJuIG91dDsKfQpmdW5jdGlvbiBpc0xpZ2h0KGhleCl7IHZhciBjPXBhcnNlSW50KGhleC5zbGljZSgxKSwxNik7IHZhciByPWM+PjE2LGc9KGM+Pjgp
JjI1NSxiPWMmMjU1OyByZXR1cm4gKHIqMjk5K2cqNTg3K2IqMTE0KS8xMDAwPjE1MDsgfQpmdW5jdGlvbiBzaGFkZShoZXgsIGYpeyB2YXIgYz1wYXJzZUlu
dChoZXguc2xpY2UoMSksMTYpOyB2YXIgcj1jPj4xNixnPShjPj44KSYyNTUsYj1jJjI1NTsgcj1jbGFtcChNYXRoLnJvdW5kKHIqZiksMCwyNTUpOyBnPWNs
YW1wKE1hdGgucm91bmQoZypmKSwwLDI1NSk7IGI9Y2xhbXAoTWF0aC5yb3VuZChiKmYpLDAsMjU1KTsgcmV0dXJuICIjIisoKDE8PDI0KSsocjw8MTYpKyhn
PDw4KStiKS50b1N0cmluZygxNikuc2xpY2UoMSk7IH0KCi8qIC0tLS0tLS0tLS0gZGVzY3JpcHRpb25zIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gZGVzY3Jp
YmUocyl7CiAgdmFyIHNwPXBhcnNlU3BsaXQocy5zcGxpdCksIGluZm89c3BsaXRJbmZvKHNwKSwgY29sPWJ5SWQoREFUQS5jb2xvdXJzLHMuY29sb3VyKTsK
ICB2YXIgY29sb3VyID0gY29sLmFza19jb2RlID8gKCJSQUwgIisocy5yYWx8fCJ0byBjb25maXJtIikucmVwbGFjZSgvXnJhbFxzKi9pLCIiKSkgOiBjb2wu
bGFiZWwrIiAoIitjb2wuc3ViLnNwbGl0KCIgIilbMF0rIiAiK2NvbC5zdWIuc3BsaXQoIiAiKVsxXSsiKSI7CiAgcmV0dXJuIHsKICAgIHRpdGxlOiBzLm4r
Ii1wYW5lbCBEZVdhbGwgYmlmb2xkLCAiK21tKHMudykrIiDDlyAiK21tKHMuaCksCiAgICBmb2xkOiBpbmZvLmxhYmVsICsgKHMub3BlbmluZz09PSJvdXQi
ID8gIiwgb3BlbnMgb3V0IiA6ICIsIG9wZW5zIGluIiksCiAgICBjb2xvdXI6IGNvbG91ciwKICAgIGdsYXNzOiBieUlkKERBVEEuZ2xhc3Mscy5nbGFzcyku
bGFiZWwsCiAgICB0aHJlc2hvbGQ6IGJ5SWQoREFUQS50aHJlc2hvbGRzLHMudGhyZXNob2xkKS5sYWJlbCwKICAgIGhhbmRsZTogYnlJZChEQVRBLmhhbmRs
ZXMscy5oYW5kbGUpLmxhYmVsLAogICAgbW9kZTogcy5pbnN0YWxsID8gIlN1cHBsaWVkICYgaW5zdGFsbGVkIiA6ICJTdXBwbHkgb25seSIsCiAgICBwYW5l
bDogbW0oTWF0aC5yb3VuZCgocy53LTEyMCkvcy5uKSkrIiBwZXIgcGFuZWwiCiAgfTsKfQoKLyogLS0tLS0tLS0tLSByZW5kZXJlcnMgLS0tLS0tLS0tLSAq
LwpmdW5jdGlvbiBwcmVzc2VkKGxpc3QsIGNscywgaXNPbiwgaHRtbCwgb25jbGljayl7CiAgdmFyIGI9ZWwoImJ1dHRvbiIsIGNscywgaHRtbCk7IGIudHlw
ZT0iYnV0dG9uIjsgYi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsIFN0cmluZyhpc09uKSk7IGIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBvbmNs
aWNrKTsgcmV0dXJuIGI7Cn0KCmZ1bmN0aW9uIHJlbmRlclNpemUoKXsKICB2YXIgd21pbj1TWVMucGFuZWxzX21pbipTWVMucGFuZWxfbWluX3dpZHRoX21t
LCB3bWF4PVNZUy5wYW5lbHNfbWF4KlNZUy5wYW5lbF9tYXhfd2lkdGhfbW07CiAgJCgibGJXIikudmFsdWU9c3RhdGUudzsgJCgibGJIIikudmFsdWU9c3Rh
dGUuaDsKICAkKCJsYldyIikubWluPXdtaW47ICQoImxiV3IiKS5tYXg9d21heDsgJCgibGJXciIpLnN0ZXA9U1lTLndpZHRoX3N0ZXBfbW07ICQoImxiV3Ii
KS52YWx1ZT1zdGF0ZS53OwogICQoImxiSHIiKS5taW49U1lTLmhlaWdodF9taW5fbW07ICQoImxiSHIiKS5tYXg9U1lTLmhlaWdodF9tYXhfbW07ICQoImxi
SHIiKS5zdGVwPVNZUy5oZWlnaHRfc3RlcF9tbTsgJCgibGJIciIpLnZhbHVlPXN0YXRlLmg7CiAgJCgibGJXbWluIikudGV4dENvbnRlbnQ9Im1pbiAiK21t
KHdtaW4pOyAkKCJsYldtYXgiKS50ZXh0Q29udGVudD0ibWF4ICIrbW0od21heCk7CiAgJCgibGJIbWluIikudGV4dENvbnRlbnQ9Im1pbiAiK21tKFNZUy5o
ZWlnaHRfbWluX21tKTsgJCgibGJIbWF4IikudGV4dENvbnRlbnQ9Im1heCAiK21tKFNZUy5oZWlnaHRfbWF4X21tKTsKICB2YXIgcD1wcmljZShzdGF0ZSks
IHB3PU1hdGgucm91bmQoKHN0YXRlLnctMTIwKS9zdGF0ZS5uKTsKICAkKCJsYlNpemVNc2ciKS5jbGFzc05hbWU9ImxiLW1zZyI7CiAgJCgibGJTaXplTXNn
IikuaW5uZXJIVE1MID0gIjxzdHJvbmc+IitwLmFyZWEudG9GaXhlZCgyKSsiIG3Csjwvc3Ryb25nPiDCtyAiK3N0YXRlLm4rIiBwYW5lbHMgb2YgYWJvdXQg
IittbShwdykrIiDCtyBmaXRzIGEgIittbShzdGF0ZS53KzIwKSsiIMOXICIrbW0oc3RhdGUuaCsxMCkrIiBzdHJ1Y3R1cmFsIG9wZW5pbmciOwp9CmZ1bmN0
aW9uIGJpbmRTaXplKCl7CiAgZnVuY3Rpb24gY29tbWl0KGRpbSwgdil7IGlmIChpc05hTih2KSkgcmV0dXJuOyBzdGF0ZVtkaW1dPXY7IG5vcm1hbGlzZShz
dGF0ZSk7IHJlbmRlckFsbCgpOyB9CiAgWyJXIiwiSCJdLmZvckVhY2goZnVuY3Rpb24oayl7CiAgICB2YXIgZGltPWsudG9Mb3dlckNhc2UoKSwgaW5wPSQo
ImxiIitrKSwgcm5nPSQoImxiIitrKyJyIik7CiAgICBpbnAuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24oKXsgY29tbWl0KGRpbSwgcGFy
c2VJbnQodGhpcy52YWx1ZSwxMCkpOyB9KTsKICAgIGlucC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZnVuY3Rpb24oZSl7IGlmKGUua2V5PT09IkVu
dGVyIil7IHRoaXMuYmx1cigpOyB9IH0pOwogICAgcm5nLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZnVuY3Rpb24oKXsgc3RhdGVbZGltXT1wYXJzZUlu
dCh0aGlzLnZhbHVlLDEwKTsgbm9ybWFsaXNlKHN0YXRlKTsgcmVuZGVyQWxsKCk7IH0pOwogIH0pOwogIHZhciBidG5zPXJvb3QucXVlcnlTZWxlY3RvckFs
bCgiLmxiLWRpbS1yb3cgYnV0dG9uIik7CiAgZm9yICh2YXIgaT0wO2k8YnRucy5sZW5ndGg7aSsrKShmdW5jdGlvbihiKXsgYi5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIGZ1bmN0aW9uKCl7IHZhciBkaW09Yi5nZXRBdHRyaWJ1dGUoImRhdGEtZGltIiksIGQ9K2IuZ2V0QXR0cmlidXRlKCJkYXRhLWQiKTsgdmFy
IHN0ZXAgPSBkaW09PT0idyI/NTA6NTA7IGNvbW1pdChkaW0sIHN0YXRlW2RpbV0rZCpzdGVwKTsgfSk7IH0pKGJ0bnNbaV0pOwp9CgpmdW5jdGlvbiByZW5k
ZXJQYW5lbHMoKXsKICB2YXIgd3JhcD0kKCJsYlBhbmVscyIpOyB3cmFwLmlubmVySFRNTD0iIjsKICB2YXIgdnA9dmFsaWRQYW5lbHMoc3RhdGUudyk7CiAg
Zm9yICh2YXIgbj1TWVMucGFuZWxzX21pbjtuPD1TWVMucGFuZWxzX21heDtuKyspKGZ1bmN0aW9uKG4pewogICAgdmFyIG9rPXZwLmluZGV4T2YobikhPT0t
MTsKICAgIHZhciBiPXByZXNzZWQobnVsbCwibGItY2hpcCIsc3RhdGUubj09PW4sIG4rIjxzbWFsbD4iKyhvaz8gbW0oTWF0aC5yb3VuZCgoc3RhdGUudy0x
MjApL24pKS5yZXBsYWNlKCIgbW0iLCIiKSsiIG1tIGVhY2giIDogKHN0YXRlLncvbjxTWVMucGFuZWxfbWluX3dpZHRoX21tPyJ0b28gbmFycm93IjoidG9v
IHdpZGUiKSkrIjwvc21hbGw+IiwgZnVuY3Rpb24oKXsgc3RhdGUubj1uOyBzdGF0ZS5zcGxpdD1uKyIrMCI7IHJlbmRlckFsbCgpOyB9KTsKICAgIGIuZGlz
YWJsZWQ9IW9rOyB3cmFwLmFwcGVuZENoaWxkKGIpOwogIH0pKG4pOwp9CgpmdW5jdGlvbiByZW5kZXJDZmdzKCl7CiAgdmFyIHdyYXA9JCgibGJDZmdzIik7
IHdyYXAuaW5uZXJIVE1MPSIiOwogIHNwbGl0c0ZvcihzdGF0ZS5uKS5mb3JFYWNoKGZ1bmN0aW9uKHNwKXsKICAgIHZhciBpbmZvPXNwbGl0SW5mbyhzcCk7
CiAgICB2YXIgbWluaSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7c3BsaXQ6c3AuaWQsIGg6TWF0aC5taW4oc3RhdGUuaCwgMjQwMCl9KTsKICAgIHZh
ciBiPXByZXNzZWQobnVsbCwibGItY2ZnIixzdGF0ZS5zcGxpdD09PXNwLmlkLCBkcmF3RG9vcihtaW5pLHttaW5pOnRydWV9KSsiPHNwYW4+Iitlc2MoaW5m
by5sYWJlbCkrIjwvc3Bhbj48c21hbGw+Iitlc2MoaW5mby5zdWIpKyI8L3NtYWxsPiIsIGZ1bmN0aW9uKCl7IHN0YXRlLnNwbGl0PXNwLmlkOyByZW5kZXJB
bGwoKTsgfSk7CiAgICB3cmFwLmFwcGVuZENoaWxkKGIpOwogIH0pOwogIHZhciBpbmZvPXNwbGl0SW5mbyhwYXJzZVNwbGl0KHN0YXRlLnNwbGl0KSk7CiAg
JCgibGJDZmdOb3RlIikudGV4dENvbnRlbnQgPSBpbmZvLnRyYWZmaWMubGVuZ3RoID8gIlRyYWZmaWMgZG9vciIrKGluZm8udHJhZmZpYy5sZW5ndGg+MT8i
cyBhcmUiOiIgaXMiKSsiIG1hcmtlZCB3aXRoIGEgaGFuZGxlIGluIHRoZSBkcmF3aW5nLiBIYW5kbGVzIHNpdCBvbiB0aGUgaW5zaWRlIGZhY2U7IHRoZSBk
cmF3aW5nIHNob3dzIHRoZW0gZm9yIGNsYXJpdHkuIiA6ICJXaXRoIGFuIGV2ZW4gc3RhY2sgdGhlcmUgaXMgbm8gc2VwYXJhdGUgdHJhZmZpYyBkb29yIOKA
lCB0aGUgcGFuZWxzIG9wZW4gaW4gcGFpcnMuIENob29zZSBhIHNwbGl0IHdpdGggYSBzaW5nbGUgcGFuZWwgaWYgeW91IHdhbnQgYSB3YWxrLXRocm91Z2gg
ZG9vci4iOwogIHZhciBzZWc9JCgibGJPcGVuIikucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uIik7CiAgZm9yICh2YXIgaT0wO2k8c2VnLmxlbmd0aDtpKysp
KGZ1bmN0aW9uKGIpeyBiLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwgU3RyaW5nKGIuZ2V0QXR0cmlidXRlKCJkYXRhLXYiKT09PXN0YXRlLm9wZW5p
bmcpKTsgYi5vbmNsaWNrPWZ1bmN0aW9uKCl7IHN0YXRlLm9wZW5pbmc9Yi5nZXRBdHRyaWJ1dGUoImRhdGEtdiIpOyByZW5kZXJBbGwoKTsgfTsgfSkoc2Vn
W2ldKTsKfQoKZnVuY3Rpb24gcmVuZGVyQ29sb3VycygpewogIHZhciB3cmFwPSQoImxiQ29sb3VycyIpOyB3cmFwLmlubmVySFRNTD0iIjsKICBEQVRBLmNv
bG91cnMuZm9yRWFjaChmdW5jdGlvbihjKXsKICAgIHZhciBzdyA9IGMuaGV4ID8gJzxpIHN0eWxlPSJiYWNrZ3JvdW5kOicrYy5oZXgrJyI+PC9pPicgOiAn
PGkgY2xhc3M9ImFueSI+PC9pPic7CiAgICB3cmFwLmFwcGVuZENoaWxkKHByZXNzZWQobnVsbCwibGItc3ciLHN0YXRlLmNvbG91cj09PWMuaWQsIHN3KyI8
c3Bhbj48Yj4iK2VzYyhjLmxhYmVsKSsiPC9iPjxzbWFsbD4iK2VzYyhjLnN1YikrIjwvc21hbGw+PC9zcGFuPiIsIGZ1bmN0aW9uKCl7IHN0YXRlLmNvbG91
cj1jLmlkOyByZW5kZXJBbGwoKTsgaWYoYy5hc2tfY29kZSkgJCgibGJSYWxDb2RlIikuZm9jdXMoKTsgfSkpOwogIH0pOwogIHZhciBjb2w9YnlJZChEQVRB
LmNvbG91cnMsc3RhdGUuY29sb3VyKTsKICAkKCJsYlJhbCIpLmhpZGRlbj0hY29sLmFza19jb2RlOwogICQoImxiUmFsQ29kZSIpLnZhbHVlPXN0YXRlLnJh
bDsKICAkKCJsYlJhbENvZGUiKS5vbmlucHV0PWZ1bmN0aW9uKCl7IHN0YXRlLnJhbD10aGlzLnZhbHVlOyByZW5kZXJQcmV2aWV3KCk7IH07Cn0KCmZ1bmN0
aW9uIG9wdGlvbkNhcmRzKHdyYXBJZCwgbGlzdCwga2V5LCB0YWdGbiwgaWxsdXMpewogIHZhciB3cmFwPSQod3JhcElkKTsgd3JhcC5pbm5lckhUTUw9IiI7
CiAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uKG8pewogICAgdmFyIHRhZyA9IHRhZ0ZuID8gdGFnRm4obykgOiAiIiwgcGljID0gaWxsdXMgPyBpbGx1cyhvKSA6
ICIiOwogICAgd3JhcC5hcHBlbmRDaGlsZChwcmVzc2VkKG51bGwsImxiLWNhcmQiKyhwaWM/IiBoYXMtcGljIjoiIiksc3RhdGVba2V5XT09PW8uaWQsIHBp
YysiPGI+Iitlc2Moby5sYWJlbCkrIjwvYj48c21hbGw+Iitlc2Moby5zdWJ8fCIiKSsiPC9zbWFsbD4iK3RhZywgZnVuY3Rpb24oKXsgc3RhdGVba2V5XT1v
LmlkOyByZW5kZXJBbGwoKTsgfSkpOwogIH0pOwp9CmZ1bmN0aW9uIHJlbmRlckhhcmR3YXJlKCl7CiAgdmFyIGVsPSQoImxiSGFyZHdhcmUiKTsgaWYoIWVs
KSByZXR1cm47IGVsLmlubmVySFRNTD0iIjsKICAoREFUQS5oYXJkd2FyZXx8W10pLmZvckVhY2goZnVuY3Rpb24oaCl7CiAgICBpZiAoIUlNR1toLmltZ10p
IHJldHVybjsKICAgIGVsLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlZW5kIiwgJzxmaWd1cmU+PGltZyBzcmM9IicrSU1HW2guaW1nXSsnIiBhbHQ9Iicr
ZXNjKGgubGFiZWwpKyciIGxvYWRpbmc9ImxhenkiPjxmaWdjYXB0aW9uPjxiPicrZXNjKGgubGFiZWwpKyc8L2I+PHNwYW4+Jytlc2MoaC5zdWIpKyc8L3Nw
YW4+PC9maWdjYXB0aW9uPjwvZmlndXJlPicpOwogIH0pOwp9CmZ1bmN0aW9uIHJlbmRlck9wdGlvbnMoKXsKICBvcHRpb25DYXJkcygibGJHbGFzcyIsIERB
VEEuZ2xhc3MsICJnbGFzcyIsIGZ1bmN0aW9uKGcpewogICAgaWYgKGcuaW5jbHVkZWQpIHJldHVybiAnPHNwYW4gY2xhc3M9InRhZyBvayI+SW5jbHVkZWQ8
L3NwYW4+JzsKICAgIGlmIChnLnN1cmNoYXJnZV9hZWRfcGVyX3NxbSkgcmV0dXJuICc8c3BhbiBjbGFzcz0idGFnIj4rICcrZm10KGcuc3VyY2hhcmdlX2Fl
ZF9wZXJfc3FtKSsnIC8gbcKyPC9zcGFuPic7CiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJ0YWcgcSI+UXVvdGVkIHNlcGFyYXRlbHk8L3NwYW4+JzsKICB9
KTsKICBvcHRpb25DYXJkcygibGJUaHJlc2hvbGQiLCBEQVRBLnRocmVzaG9sZHMsICJ0aHJlc2hvbGQiLCBudWxsLCBmdW5jdGlvbihvKXsKICAgIHZhciBr
ZXkgPSBzdGF0ZS5vcGVuaW5nPT09ImluIiA/ICJpbiIgOiAib3V0Iiwgc3JjID0gby5pbWcgJiYgSU1HW28uaW1nW2tleV1dOwogICAgcmV0dXJuIHNyYyA/
ICc8ZmlndXJlIGNsYXNzPSJsYi1zZWMiPjxpbWcgc3JjPSInK3NyYysnIiBhbHQ9IicrZXNjKG8ubGFiZWwpKycgY3Jvc3Mtc2VjdGlvbiwgb3BlbnMgJytr
ZXkrJyI+PGZpZ2NhcHRpb24+Jytlc2Moby5jYXB8fCIiKSsnIMK3IG9wZW5zICcra2V5Kyc8L2ZpZ2NhcHRpb24+PC9maWd1cmU+JyA6ICIiOwogIH0pOwog
IG9wdGlvbkNhcmRzKCJsYkhhbmRsZXMiLCBEQVRBLmhhbmRsZXMsICJoYW5kbGUiLCBudWxsLCBmdW5jdGlvbihvKXsKICAgIHJldHVybiAnPGRpdiBjbGFz
cz0ibGItMnVwIj4nCiAgICAgICsgKElNR1tvLmltZ10gPyAnPGZpZ3VyZT48aW1nIHNyYz0iJytJTUdbby5pbWddKyciIGFsdD0iJytlc2Moby5sYWJlbCkr
JyBsZXZlciBoYW5kbGUiPjxmaWdjYXB0aW9uPlRyYWZmaWMgZG9vcjwvZmlnY2FwdGlvbj48L2ZpZ3VyZT4nIDogJycpCiAgICAgICsgKElNR1tvLmltZzJd
ID8gJzxmaWd1cmU+PGltZyBzcmM9IicrSU1HW28uaW1nMl0rJyIgYWx0PSInK2VzYyhvLmxhYmVsKSsnIHNob290LWJvbHQgaGFuZGxlIj48ZmlnY2FwdGlv
bj5JbnRlcm1lZGlhdGUgbGVhdmVzPC9maWdjYXB0aW9uPjwvZmlndXJlPicgOiAnJykKICAgICAgKyAnPC9kaXY+PGkgY2xhc3M9InN3IiBzdHlsZT0iYmFj
a2dyb3VuZDonK28uaGV4KyciPjwvaT4nOyB9KTsKICB2YXIgd3JhcD0kKCJsYk1vZGUiKTsgd3JhcC5pbm5lckhUTUw9IiI7CiAgdmFyIHA9cHJpY2Uoc3Rh
dGUpOwogIHZhciBzbyA9IHByZXNzZWQobnVsbCwibGItY2FyZCIsIXN0YXRlLmluc3RhbGwsICI8Yj5TdXBwbHkgb25seSA8c3BhbiBjbGFzcz0ncCBudW0n
PiIrZm10KGNtLnN1cHBseV9hZWRfcGVyX3NxbSkrIiAvIG3Csjwvc3Bhbj48L2I+PHNtYWxsPiIrZXNjKGNtLnN1cHBseV9vbmx5X25vdGUpKyI8L3NtYWxs
PiIsIGZ1bmN0aW9uKCl7IHN0YXRlLmluc3RhbGw9ZmFsc2U7IHJlbmRlckFsbCgpOyB9KTsKICB2YXIgaW5zdCA9IHByZXNzZWQobnVsbCwibGItY2FyZCIs
c3RhdGUuaW5zdGFsbCwgIjxiPlN1cHBsaWVkICZhbXA7IGluc3RhbGxlZCA8c3BhbiBjbGFzcz0ncCBudW0nPiIrZm10KGNtLnN1cHBseV9hZWRfcGVyX3Nx
bStjbS5pbnN0YWxsX2FlZF9wZXJfc3FtKSsiIC8gbcKyPC9zcGFuPjwvYj48c21hbGw+Iitlc2MoY20uaW5zdGFsbF9hcmVhKSsiPC9zbWFsbD48dWw+IitE
QVRBLmluc3RhbGxfaW5jbHVkZWQubWFwKGZ1bmN0aW9uKHgpe3JldHVybiAiPGxpPiIrZXNjKHgpKyI8L2xpPiI7fSkuam9pbigiIikrIjwvdWw+IiwgZnVu
Y3Rpb24oKXsgc3RhdGUuaW5zdGFsbD10cnVlOyByZW5kZXJBbGwoKTsgfSk7CiAgd3JhcC5hcHBlbmRDaGlsZChzbyk7IHdyYXAuYXBwZW5kQ2hpbGQoaW5z
dCk7Cn0KCmZ1bmN0aW9uIHJlbmRlclByZXZpZXcoKXsKICB2YXIgcD1wcmljZShzdGF0ZSksIGQ9ZGVzY3JpYmUoc3RhdGUpOwogIGRyYXdQcmV2aWV3KCk7
CiAgJCgibGJEcmF3RGltcyIpLnRleHRDb250ZW50ID0gbShzdGF0ZS53KSsiIMOXICIrbShzdGF0ZS5oKTsKICAkKCJsYlNwZWMiKS5pbm5lckhUTUwgPSBb
WyJTaXplIiwgbW0oc3RhdGUudykrIiDDlyAiK21tKHN0YXRlLmgpXSxbIlBhbmVscyIsIHN0YXRlLm4rIiDCtyAiK2QucGFuZWxdLFsiRm9sZHMiLCBkLmZv
bGRdLFsiQ29sb3VyIiwgZC5jb2xvdXJdLFsiR2xhc3MiLCBkLmdsYXNzXSxbIlRocmVzaG9sZCIsIGQudGhyZXNob2xkXSxbIkhhbmRsZXMiLCBkLmhhbmRs
ZV1dCiAgICAubWFwKGZ1bmN0aW9uKHIpeyByZXR1cm4gJzxkaXYgY2xhc3M9ImxiLXNwZWMtbCI+PHNwYW4gY2xhc3M9ImsiPicrclswXSsnPC9zcGFuPjxz
cGFuIGNsYXNzPSJ2Ij4nK2VzYyhyWzFdKSsnPC9zcGFuPjwvZGl2Pic7IH0pLmpvaW4oIiIpOwogICQoImxiUHJpY2VMaW5lcyIpLmlubmVySFRNTCA9IHAu
bGluZXMubWFwKGZ1bmN0aW9uKGwpeyByZXR1cm4gJzxkaXYgY2xhc3M9ImxiLXBsIj48c3BhbiBjbGFzcz0iayI+Jytlc2MobC5rKSsnIDxzcGFuIGNsYXNz
PSJudW0iPignK3AuYXJlYS50b0ZpeGVkKDIpKycgbcKyKTwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9InYgbnVtIj4nK2ZtdChsLnYpKyc8L3NwYW4+PC9k
aXY+JzsgfSkuam9pbigiIikKICAgICsgcC5ub3Rlcy5tYXAoZnVuY3Rpb24odCl7IHJldHVybiAnPGRpdiBjbGFzcz0ibGItcGwiPjxzcGFuIGNsYXNzPSJr
Ij4nK2VzYyh0KSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJ2Ij5UQlE8L3NwYW4+PC9kaXY+JzsgfSkuam9pbigiIikKICAgICsgJzxkaXYgY2xhc3M9ImxiLXBs
Ij48c3BhbiBjbGFzcz0iayI+VkFUIDUlPC9zcGFuPjxzcGFuIGNsYXNzPSJ2IG51bSI+JytmbXQocC52YXQpKyc8L3NwYW4+PC9kaXY+JzsKICAkKCJsYlRv
dGFsIikudGV4dENvbnRlbnQ9Zm10KHAuaW5jKTsKICAkKCJsYlZhdCIpLnRleHRDb250ZW50ID0gZm10KHAuZXgpKyIgZXggVkFUIMK3ICIrKHN0YXRlLmlu
c3RhbGw/InN1cHBsaWVkICYgaW5zdGFsbGVkIjoic3VwcGx5IG9ubHkiKTsKICAkKCJsYkJhclRvdGFsIikudGV4dENvbnRlbnQ9Zm10KHAuaW5jKTsKICAk
KCJsYkJhclQiKS50ZXh0Q29udGVudCA9IGVkaXRpbmdJZCA/ICJVcGRhdGVkIGRvb3IsIGluYy4gVkFUIiA6ICJUaGlzIGRvb3IsIGluYy4gVkFUIjsKICB2
YXIgYWRkPSQoImxiQWRkIik7IGFkZC5jbGFzc05hbWU9ImxiLWFkZCI7IGFkZC50ZXh0Q29udGVudCA9IGVkaXRpbmdJZCA/ICJVcGRhdGUgZG9vciBpbiBi
YXNrZXQiIDogIkFkZCB0byBiYXNrZXQiOwogICQoImxiQmFyQWRkIikudGV4dENvbnRlbnQgPSBlZGl0aW5nSWQgPyAiVXBkYXRlIGRvb3IiIDogIkFkZCB0
byBiYXNrZXQiOwogIHZhciBjbnQgPSBiYXNrZXQucmVkdWNlKGZ1bmN0aW9uKGEsaXQpe3JldHVybiBhK2l0LnF0eTt9LDApOwogICQoImxiQmFza2V0TGlu
ayIpLmlubmVySFRNTCA9IGNudCA/ICc8YSBocmVmPSIjbGJCYXNrZXQiPicrY250KycgZG9vcicrKGNudD4xPyJzIjoiIikrJyBpbiB5b3VyIGJhc2tldDwv
YT4nICsgKGVkaXRpbmdJZCA/ICcgwrcgPGEgaHJlZj0iIyIgaWQ9ImxiQ2FuY2VsRWRpdCI+Y2FuY2VsIGVkaXQ8L2E+JyA6ICIiKSA6ICJBZGQgYXMgbWFu
eSBkb29ycyBhcyB5b3UgbmVlZCwgdGhlbiBzZW5kIHRoZSB3aG9sZSBiYXNrZXQgaW4gb25lIGdvLiI7CiAgdmFyIGNlPSQoImxiQ2FuY2VsRWRpdCIpOyBp
ZiAoY2UpIGNlLm9uY2xpY2s9ZnVuY3Rpb24oZSl7IGUucHJldmVudERlZmF1bHQoKTsgZWRpdGluZ0lkPW51bGw7IHJlbmRlclByZXZpZXcoKTsgfTsKfQoK
Ci8qIC0tLS0tLS0tLS0gb3BlbiAvIGNsb3NlIGFuaW1hdGlvbiAtLS0tLS0tLS0tICovCnZhciBvcGVuVCA9IDAsIHBsYXlpbmcgPSBmYWxzZSwgcmFmID0g
bnVsbCwgdDAgPSBudWxsOwp2YXIgcmVkdWNlTW90aW9uID0gd2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVj
ZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlczsKZnVuY3Rpb24gZHJhd1ByZXZpZXcoKXsKICAkKCJsYkRyYXciKS5pbm5lckhUTUwgPSBkcmF3RG9vcihz
dGF0ZSwge3BsYW46dHJ1ZSwgb3BlbjpvcGVuVH0pOwogICQoImxiT3BlblJuZyIpLnZhbHVlID0gTWF0aC5yb3VuZChvcGVuVCoxMDApOwogIHZhciBjbHIg
PSBjbGVhck9wZW5pbmcoc3RhdGUsIG9wZW5UKSwgcGN0ID0gTWF0aC5yb3VuZChjbHIvKHN0YXRlLnctMTIwKSoxMDApOwogICQoImxiT3BlbkxibCIpLnRl
eHRDb250ZW50ID0gb3BlblQ8MC4wMiA/ICJDbG9zZWQiIDogKG9wZW5UPjAuOTggPyAiRnVsbHkgb3BlbiIgOiBNYXRoLnJvdW5kKG9wZW5UKjEwMCkrIiUg
b3BlbiIpKyIgwrcgY2xlYXJzICIrbShNYXRoLnJvdW5kKGNsci8xMCkqMTApKyIgKCIrcGN0KyIlKSI7Cn0KZnVuY3Rpb24gZWFzZSh2KXsgcmV0dXJuIHY8
MC41ID8gMip2KnYgOiAxLU1hdGgucG93KC0yKnYrMiwyKS8yOyB9CmZ1bmN0aW9uIHN0ZXBBbmltKHRzKXsKICBpZiAoIXBsYXlpbmcpIHJldHVybjsKICBp
ZiAodDA9PW51bGwpIHQwID0gdHM7CiAgdmFyIGN5YyA9IDUyMDAsIHggPSAoKHRzLXQwKSVjeWMpL2N5YzsKICB2YXIgdiA9IHg8MC4zOCA/IHgvMC4zOCA6
IHg8MC41NiA/IDEgOiB4PDAuOTQgPyAxLSh4LTAuNTYpLzAuMzggOiAwOwogIG9wZW5UID0gZWFzZSh2KTsgZHJhd1ByZXZpZXcoKTsKICByYWYgPSByZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcEFuaW0pOwp9CmZ1bmN0aW9uIHBsYXkob24pewogIHBsYXlpbmcgPSBvbjsgdDAgPSBudWxsOwogICQoImxiUGxheSIp
LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwgU3RyaW5nKG9uKSk7CiAgJCgibGJQbGF5IikudGV4dENvbnRlbnQgPSBvbiA/ICLil7wgU3RvcCIgOiAi
4pa2IFNlZSBpdCBvcGVuIjsKICBpZiAob24pIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwQW5pbSk7IGVsc2UgaWYgKHJhZikgY2FuY2VsQW5p
bWF0aW9uRnJhbWUocmFmKTsKfQokKCJsYlBsYXkiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCl7IHBsYXkoIXBsYXlpbmcpOyB9KTsK
JCgibGJPcGVuUm5nIikuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBmdW5jdGlvbigpeyBwbGF5KGZhbHNlKTsgb3BlblQgPSB0aGlzLnZhbHVlLzEwMDsg
ZHJhd1ByZXZpZXcoKTsgfSk7CmlmIChyZWR1Y2VNb3Rpb24pICQoImxiUGxheSIpLmhpZGRlbiA9IHRydWU7CgpmdW5jdGlvbiBhZGRUb0Jhc2tldCgpewog
IHZhciBzbmFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdGF0ZSkpOwogIGlmIChlZGl0aW5nSWQpewogICAgZm9yICh2YXIgaT0wO2k8YmFza2V0
Lmxlbmd0aDtpKyspIGlmIChiYXNrZXRbaV0uaWQ9PT1lZGl0aW5nSWQpeyBiYXNrZXRbaV0uY2ZnPXNuYXA7IH0KICAgIGVkaXRpbmdJZD1udWxsOwogIH0g
ZWxzZSB7CiAgICAvLyBtZXJnZSBpZGVudGljYWwgZG9vcnMKICAgIHZhciBrZXk9SlNPTi5zdHJpbmdpZnkoc25hcCksIG1lcmdlZD1mYWxzZTsKICAgIGJh
c2tldC5mb3JFYWNoKGZ1bmN0aW9uKGl0KXsgaWYgKEpTT04uc3RyaW5naWZ5KGl0LmNmZyk9PT1rZXkpeyBpdC5xdHkrKzsgbWVyZ2VkPXRydWU7IH0gfSk7
CiAgICBpZiAoIW1lcmdlZCkgYmFza2V0LnB1c2goe2lkOiJkIitEYXRlLm5vdygpLnRvU3RyaW5nKDM2KSwgY2ZnOnNuYXAsIHF0eToxfSk7CiAgfQogIHNh
dmUoKTsgcmVuZGVyQmFza2V0KCk7IHJlbmRlclByZXZpZXcoKTsKICB2YXIgYWRkPSQoImxiQWRkIik7IGFkZC5jbGFzc0xpc3QuYWRkKCJkb25lIik7IGFk
ZC50ZXh0Q29udGVudD0iQWRkZWQg4pyTIjsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHJlbmRlclByZXZpZXcoKTsgfSwgMTQwMCk7CiAgaWYgKHdpbmRv
dy5pbm5lcldpZHRoPD05NDApICQoImxiQmFza2V0Iikuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLCBibG9jazoic3RhcnQifSk7Cn0KCmZ1
bmN0aW9uIHJlbmRlckJhc2tldCgpewogIHZhciBpdGVtcz0kKCJsYkl0ZW1zIik7IGl0ZW1zLmlubmVySFRNTD0iIjsKICB2YXIgY250PTAsIGV4PTAsIHZh
dD0wLCBpbmM9MCwgYW55SW5zdGFsbD1mYWxzZSwgYW55UXVvdGVkPWZhbHNlOwogIGJhc2tldC5mb3JFYWNoKGZ1bmN0aW9uKGl0KXsKICAgIHZhciBjPW5v
cm1hbGlzZShpdC5jZmcpLCBwPXByaWNlKGMpLCBkPWRlc2NyaWJlKGMpOwogICAgY250Kz1pdC5xdHk7IGV4Kz1wLmV4Kml0LnF0eTsgdmF0Kz1wLnZhdCpp
dC5xdHk7IGluYys9cC5pbmMqaXQucXR5OyBpZiAoYy5pbnN0YWxsKSBhbnlJbnN0YWxsPXRydWU7IGlmIChwLm5vdGVzLmxlbmd0aCkgYW55UXVvdGVkPXRy
dWU7CiAgICB2YXIgcm93PWVsKCJkaXYiLCJsYi1pdGVtIik7CiAgICByb3cuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImxiLWl0ZW0tdGh1bWIiPicrZHJh
d0Rvb3IoYyx7bWluaTp0cnVlfSkrJzwvZGl2PicKICAgICAgKyAnPGRpdj48ZGl2IGNsYXNzPSJsYi1pdGVtLXQiPicrZXNjKGQudGl0bGUpKyc8L2Rpdj48
ZGl2IGNsYXNzPSJsYi1pdGVtLWQiPicrZXNjKGQuZm9sZCkrJyDCtyAnK2VzYyhkLmNvbG91cikrJzxicj4nK2VzYyhkLmdsYXNzKSsnIMK3ICcrZXNjKGQu
dGhyZXNob2xkKSsnIMK3ICcrZXNjKGQuaGFuZGxlKSsnPGJyPjxzdHJvbmcgc3R5bGU9ImNvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6NjAwIj4nK2QubW9kZSsn
PC9zdHJvbmc+JysocC5ub3Rlcy5sZW5ndGg/JyDCtyAnK2VzYyhwLm5vdGVzLmpvaW4oIjsgIikpOiIiKSsnPC9kaXY+JwogICAgICArICc8ZGl2IGNsYXNz
PSJsYi1pdGVtLWFjdHMiPjxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWE9ImVkaXQiPkVkaXQ8L2J1dHRvbj48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0
YS1hPSJybSIgY2xhc3M9InJtIj5SZW1vdmU8L2J1dHRvbj48L2Rpdj48L2Rpdj4nCiAgICAgICsgJzxkaXYgY2xhc3M9ImxiLWl0ZW0tciI+PGRpdj48ZGl2
IGNsYXNzPSJsYi1pdGVtLXAgbnVtIj4nK2ZtdChwLmluYyppdC5xdHkpKyc8L2Rpdj48ZGl2IGNsYXNzPSJsYi1pdGVtLWUgbnVtIj4nKyhpdC5xdHk+MT8g
aXQucXR5KyIgw5cgIitmbXQocC5pbmMpKyIgwrcgIiA6ICIiKStmbXQocC5leCppdC5xdHkpKycgZXggVkFUPC9kaXY+PC9kaXY+JwogICAgICArICc8ZGl2
IGNsYXNzPSJsYi1xdHkiPjxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWE9ImRlYyIgYXJpYS1sYWJlbD0iRmV3ZXIiPuKIkjwvYnV0dG9uPjxzcGFuPicr
aXQucXR5Kyc8L3NwYW4+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtYT0iaW5jIiBhcmlhLWxhYmVsPSJNb3JlIj4rPC9idXR0b24+PC9kaXY+PC9kaXY+
JzsKICAgIHJvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKGUpewogICAgICB2YXIgYT1lLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50
YXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWEiKTsgaWYoIWEpIHJldHVybjsKICAgICAgaWYgKGE9PT0icm0iKXsgYmFza2V0PWJhc2tldC5maWx0ZXIoZnVu
Y3Rpb24oeCl7cmV0dXJuIHguaWQhPT1pdC5pZDt9KTsgaWYoZWRpdGluZ0lkPT09aXQuaWQpIGVkaXRpbmdJZD1udWxsOyB9CiAgICAgIGlmIChhPT09ImRl
YyIpeyBpdC5xdHktLTsgaWYgKGl0LnF0eTw9MCkgYmFza2V0PWJhc2tldC5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaWQhPT1pdC5pZDt9KTsgfQog
ICAgICBpZiAoYT09PSJpbmMiKSBpdC5xdHkrKzsKICAgICAgaWYgKGE9PT0iZWRpdCIpeyBPYmplY3QuYXNzaWduKHN0YXRlLCBKU09OLnBhcnNlKEpTT04u
c3RyaW5naWZ5KGMpKSk7IGVkaXRpbmdJZD1pdC5pZDsgcmVuZGVyQWxsKCk7ICQoImxiU3RlcFNpemUiKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6InNt
b290aCIsYmxvY2s6InN0YXJ0In0pOyByZXR1cm47IH0KICAgICAgc2F2ZSgpOyByZW5kZXJCYXNrZXQoKTsgcmVuZGVyUHJldmlldygpOwogICAgfSk7CiAg
ICBpdGVtcy5hcHBlbmRDaGlsZChyb3cpOwogIH0pOwogICQoImxiQ291bnQiKS50ZXh0Q29udGVudCA9IGNudCA/IGNudCsiIGRvb3IiKyhjbnQ+MT8icyI6
IiIpIDogIiI7CiAgJCgibGJCYXJDb3VudCIpLnRleHRDb250ZW50ID0gY250OwogIHZhciB0b3RzPSQoImxiVG90cyIpOwogIGlmICghY250KXsKICAgIGl0
ZW1zLmlubmVySFRNTD0nPHAgY2xhc3M9ImxiLWVtcHR5Ij5Zb3VyIGJhc2tldCBpcyBlbXB0eS4gRGVzaWduIGEgZG9vciBhYm92ZSBhbmQgYWRkIGl0IGhl
cmUg4oCUIHlvdSBjYW4gYWRkIHNldmVyYWwgc2l6ZXMgYW5kIHNlbmQgdGhlbSB0b2dldGhlci48L3A+JzsKICAgIHRvdHMuaW5uZXJIVE1MPSIiOyAkKCJs
YldoYXRzIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7ICQoImxiTWFpbCIpLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT0ibm9uZSI7CiAgfSBlbHNlIHsKICAg
IHRvdHMuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImxiLXRvdCI+PHNwYW4gY2xhc3M9ImsiPlN1YnRvdGFsIGV4IFZBVDwvc3Bhbj48c3BhbiBjbGFzcz0i
diBudW0iPicrZm10KGV4KSsnPC9zcGFuPjwvZGl2PicKICAgICAgKyAnPGRpdiBjbGFzcz0ibGItdG90Ij48c3BhbiBjbGFzcz0iayI+VkFUIDUlPC9zcGFu
PjxzcGFuIGNsYXNzPSJ2IG51bSI+JytmbXQodmF0KSsnPC9zcGFuPjwvZGl2PicKICAgICAgKyAoYW55UXVvdGVkID8gJzxkaXYgY2xhc3M9ImxiLXRvdCI+
PHNwYW4gY2xhc3M9ImsiPkdsYXNzIHVwZ3JhZGVzPC9zcGFuPjxzcGFuIGNsYXNzPSJ2Ij5RdW90ZWQgc2VwYXJhdGVseTwvc3Bhbj48L2Rpdj4nIDogIiIp
CiAgICAgICsgJzxkaXYgY2xhc3M9ImxiLXRvdCBncmFuZCI+PHNwYW4gY2xhc3M9ImsiPlRvdGFsIGluYy4gVkFUPC9zcGFuPjxzcGFuIGNsYXNzPSJ2IG51
bSI+JytmbXQoaW5jKSsnPC9zcGFuPjwvZGl2PicKICAgICAgKyAnPGRpdiBjbGFzcz0ibGItdG90Ij48c3BhbiBjbGFzcz0iayIgc3R5bGU9ImZvbnQtc2l6
ZTouODJyZW0iPicrKGFueUluc3RhbGwgPyAiSW5zdGFsbGF0aW9uIGluIER1YmFpICZhbXA7IFNoYXJqYWggaW5jbHVkZWQgd2hlcmUgc2VsZWN0ZWQuICIg
OiAiIikrZXNjKGNtLnN1cHBseV9vbmx5X25vdGUpKyc8L3NwYW4+PC9kaXY+JzsKICAgICQoImxiV2hhdHMiKS5zdHlsZS5kaXNwbGF5PSIiOyAkKCJsYk1h
aWwiKS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9IiI7CiAgICB2YXIgdHh0PW9yZGVyVGV4dChleCx2YXQsaW5jKTsKICAgICQoImxiV2hhdHMiKS5ocmVm
PSJodHRwczovL3dhLm1lLyIrREFUQS53aGF0c2FwcCsiP3RleHQ9IitlbmNvZGVVUklDb21wb25lbnQodHh0KTsKICAgICQoImxiTWFpbCIpLmhyZWY9Im1h
aWx0bzoiK0RBVEEuZW1haWwrIj9zdWJqZWN0PSIrZW5jb2RlVVJJQ29tcG9uZW50KCJCaWZvbGQgZG9vciBvcmRlciDigJQgbGFhLmFlIikrIiZib2R5PSIr
ZW5jb2RlVVJJQ29tcG9uZW50KHR4dCk7CiAgfQp9CgpmdW5jdGlvbiBvcmRlclRleHQoZXgsdmF0LGluYyl7CiAgdmFyIHQ9IkhlbGxvIExBQSwgSSB3b3Vs
ZCBsaWtlIHRvIG9yZGVyIHRoZSBmb2xsb3dpbmcgRGVXYWxsIGJpZm9sZCBkb29yczpcbiI7CiAgYmFza2V0LmZvckVhY2goZnVuY3Rpb24oaXQsaSl7CiAg
ICB2YXIgYz1pdC5jZmcsIHA9cHJpY2UoYyksIGQ9ZGVzY3JpYmUoYyk7CiAgICB0Kz0iXG4iKyhpKzEpKyIpICIrZC50aXRsZSsoaXQucXR5PjE/IiAgeCIr
aXQucXR5OiIiKSsiXG4gICAiK2QuZm9sZCsiXG4gICBDb2xvdXI6ICIrZC5jb2xvdXIrIlxuICAgR2xhc3M6ICIrZC5nbGFzcysocC5ub3Rlcy5sZW5ndGg/
IiAodG8gYmUgcXVvdGVkKSI6IiIpKyJcbiAgIFRocmVzaG9sZDogIitkLnRocmVzaG9sZCsiIMK3IEhhbmRsZXM6ICIrZC5oYW5kbGUrIlxuICAgIitkLm1v
ZGUrIjogIitmbXQocC5pbmMpKyIgaW5jIFZBVCBlYWNoIjsKICB9KTsKICB0Kz0iXG5cblRPVEFMOiAiK2ZtdChpbmMpKyIgaW5jIFZBVCAoIitmbXQoZXgp
KyIgKyBWQVQgIitmbXQodmF0KSsiKSI7CiAgaWYgKGNtLmRyYWZ0X21vZGUpIHQrPSJcbltEUkFGVCBQUklDSU5HXSI7CiAgdCs9IlxuXG5QbGVhc2UgY29u
ZmlybSBhbmQgYXJyYW5nZSB0aGUgbmV4dCBzdGVwLiI7CiAgcmV0dXJuIHQ7Cn0KCmZ1bmN0aW9uIHJlbmRlclN0YXRpYygpewogICQoImxiSW5jbHVkZWQi
KS5pbm5lckhUTUw9REFUQS5pbmNsdWRlZC5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuICI8bGk+Iitlc2MoeCkrIjwvbGk+Ijt9KS5qb2luKCIiKTsKICAkKCJs
Ykluc3RJbmNsdWRlZCIpLmlubmVySFRNTD1EQVRBLmluc3RhbGxfaW5jbHVkZWQubWFwKGZ1bmN0aW9uKHgpe3JldHVybiAiPGxpPiIrZXNjKHgpKyI8L2xp
PiI7fSkuam9pbigiIik7CiAgJCgibGJTcGVjcyIpLmlubmVySFRNTD1TWVMuc3BlY3MubWFwKGZ1bmN0aW9uKHIpe3JldHVybiAnPGRpdiBjbGFzcz0iciI+
PHNwYW4gY2xhc3M9ImsiPicrZXNjKHJbMF0pKyc8L3NwYW4+PHNwYW4gY2xhc3M9InYiPicrZXNjKHJbMV0pKyc8L3NwYW4+PC9kaXY+Jzt9KS5qb2luKCIi
KTsKICAkKCJsYkZhcSIpLmlubmVySFRNTD1EQVRBLmZhcS5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuICI8ZGV0YWlscz48c3VtbWFyeT4iK2VzYyhxWzBdKSsi
PC9zdW1tYXJ5PjxwPiIrZXNjKHFbMV0pKyI8L3A+PC9kZXRhaWxzPiI7fSkuam9pbigiIik7CiAgdmFyIHNtYWxsPXt3OlNZUy5wYW5lbHNfbWluKlNZUy5w
YW5lbF9taW5fd2lkdGhfbW0saDpTWVMuaGVpZ2h0X21pbl9tbSxuOjIsc3BsaXQ6IjIrMCIsY29sb3VyOiJyYWw3MDE2IixnbGFzczoic3RhbmRhcmQiLGlu
c3RhbGw6ZmFsc2V9OwogIHZhciBhPXByaWNlKHNtYWxsKTsgc21hbGwuaW5zdGFsbD10cnVlOyB2YXIgYj1wcmljZShzbWFsbCk7CiAgJCgibGJGcm9tIiku
aW5uZXJIVE1MPSc8c3Bhbj5Gcm9tIDxzdHJvbmcgY2xhc3M9Im51bSI+JytmbXQoYS5pbmMpKyc8L3N0cm9uZz5zdXBwbHkgb25seSwgaW5jLiBWQVQ8L3Nw
YW4+PHNwYW4+RnJvbSA8c3Ryb25nIGNsYXNzPSJudW0iPicrZm10KGIuaW5jKSsnPC9zdHJvbmc+c3VwcGxpZWQgJmFtcDsgaW5zdGFsbGVkPC9zcGFuPjxz
cGFuPjxzdHJvbmcgY2xhc3M9Im51bSI+JytmbXQoY20uc3VwcGx5X2FlZF9wZXJfc3FtKSsnIC8gbcKyPC9zdHJvbmc+ZmxhdCByYXRlLCBhbnkgY29sb3Vy
PC9zcGFuPic7Cn0KCmZ1bmN0aW9uIHJlbmRlckFsbCgpeyBub3JtYWxpc2Uoc3RhdGUpOyByZW5kZXJTaXplKCk7IHJlbmRlclBhbmVscygpOyByZW5kZXJD
ZmdzKCk7IHJlbmRlckNvbG91cnMoKTsgcmVuZGVyT3B0aW9ucygpOyByZW5kZXJQcmV2aWV3KCk7IH0KCmJpbmRTaXplKCk7CiQoImxiQWRkIikuYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCBhZGRUb0Jhc2tldCk7CiQoImxiQmFyQWRkIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhZGRUb0Jhc2tldCk7CiQo
ImxiQmFyQmFza2V0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpeyAkKCJsYkJhc2tldCIpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlv
cjoic21vb3RoIixibG9jazoic3RhcnQifSk7IH0pOwpyZW5kZXJTdGF0aWMoKTsgcmVuZGVySGFyZHdhcmUoKTsgcmVuZGVyQWxsKCk7IHJlbmRlckJhc2tl
dCgpOwp9KSgpOwo=