import base64
decode = lambda s: base64.b64decode(s.encode('utf-8')).decode('utf-8')
code = (
"ZnJvbSB0a2ludGVyIGltcG9ydCAqCmZyb20gdGtpbnRlciBpbXBvcnQgbWVzc2FnZWJveCwgc2ltc"+
"GxlZGlhbG9nLCBmaWxlZGlhbG9nCmltcG9ydCBpbnNwZWN0LCBjb3B5LCB0cmFjZWJhY2sKaW1wb3"+
"J0IHN5cywgb3MKZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwppbXBvcnQgZ2V0cGFzcwppbXBvcnQgdGl"+
"tZQoKZGVmIGZhaWxlZEltcG9ydChpbXBvcnROYW1lLCBpbnN0YWxsTmFtZT1Ob25lKToKICAgIGlu"+
"c3RhbGxOYW1lID0gaW5zdGFsbE5hbWUgb3IgaW1wb3J0TmFtZQogICAgcHJpbnQoJyoqKioqKioqK"+
"ioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKionKQogICAgcH"+
"JpbnQoZicqKiBDYW5ub3QgaW1wb3J0IHtpbXBvcnROYW1lfSAtLSBpdCBzZWVtcyB5b3UgbmVlZCB"+
"0byBpbnN0YWxsIHtpbnN0YWxsTmFtZX0nKQogICAgcHJpbnQoJyoqKioqKioqKioqKioqKioqKioq"+
"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKionKQogICAgcHJpbnQoKQogICAgb"+
"3MuX2V4aXQoMCkKCnRyeTogaW1wb3J0IHJlcXVlc3RzCmV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm"+
"9yOiBmYWlsZWRJbXBvcnQoJ3JlcXVlc3RzJykKCmltcG9ydCBkYXRldGltZQoKY2xhc3MgRVNUNUV"+
"EVChkYXRldGltZS50emluZm8pOgoKICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgogICAgICAg"+
"IHJldHVybiBkYXRldGltZS50aW1lZGVsdGEoaG91cnM9LTUpICsgc2VsZi5kc3QoZHQpCgogICAgZ"+
"GVmIGRzdChzZWxmLCBkdCk6CiAgICAgICAgZCA9IGRhdGV0aW1lLmRhdGV0aW1lKGR0LnllYXIsID"+
"MsIDgpICAgICAgICAjMm5kIFN1bmRheSBpbiBNYXJjaAogICAgICAgIHNlbGYuZHN0b24gPSBkICs"+
"gZGF0ZXRpbWUudGltZWRlbHRhKGRheXM9Ni1kLndlZWtkYXkoKSkKICAgICAgICBkID0gZGF0ZXRp"+
"bWUuZGF0ZXRpbWUoZHQueWVhciwgMTEsIDEpICAgICAgICMxc3QgU3VuZGF5IGluIE5vdgogICAgI"+
"CAgIHNlbGYuZHN0b2ZmID0gZCArIGRhdGV0aW1lLnRpbWVkZWx0YShkYXlzPTYtZC53ZWVrZGF5KC"+
"kpCiAgICAgICAgaWYgc2VsZi5kc3RvbiA8PSBkdC5yZXBsYWNlKHR6aW5mbz1Ob25lKSA8IHNlbGY"+
"uZHN0b2ZmOgogICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUudGltZWRlbHRhKGhvdXJzPTEpCiAg"+
"ICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lLnRpbWVkZWx0YSgwKQoKICAgI"+
"GRlZiB0em5hbWUoc2VsZiwgZHQpOgogICAgICAgIHJldHVybiAnRVNUNUVEVCcKCmNsYXNzIFdyYX"+
"BwZWRDYW52YXMoQ2FudmFzKToKICAgICMgRW5mb3JjZXMgTVZDOiBubyBkcmF3aW5nIG91dHNpZGU"+
"gY2FsbHMgdG8gcmVkcmF3QWxsCiAgICAjIExvZ3MgZHJhdyBjYWxscyAoZm9yIGF1dG9ncmFkZXIp"+
"IGluIGNhbnZhcy5sb2dnZWREcmF3aW5nQ2FsbHMKICAgIGRlZiBfX2luaXRfXyh3cmFwcGVkQ2Fud"+
"mFzLCBhcHApOgogICAgICAgIHdyYXBwZWRDYW52YXMubG9nZ2VkRHJhd2luZ0NhbGxzID0gWyBdCi"+
"AgICAgICAgd3JhcHBlZENhbnZhcy5sb2dEcmF3aW5nQ2FsbHMgPSBUcnVlCiAgICAgICAgd3JhcHB"+
"lZENhbnZhcy5pblJlZHJhd0FsbCA9IEZhbHNlCiAgICAgICAgd3JhcHBlZENhbnZhcy5hcHAgPSBh"+
"cHAKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGFwcC5fcm9vdCwgd2lkdGg9YXBwLndpZHRoLCBoZ"+
"WlnaHQ9YXBwLmhlaWdodCkKCiAgICBkZWYgbG9nKHNlbGYsIG1ldGhvZE5hbWUsIGFyZ3MsIGt3YX"+
"Jncyk6CiAgICAgICAgaWYgKG5vdCBzZWxmLmluUmVkcmF3QWxsKToKICAgICAgICAgICAgc2VsZi5"+
"hcHAuX212Y1Zpb2xhdGlvbigneW91IG1heSBub3QgdXNlIHRoZSBjYW52YXMgKHRoZSB2aWV3KSBv"+
"dXRzaWRlIG9mIHJlZHJhd0FsbCcpCiAgICAgICAgaWYgKHNlbGYubG9nRHJhd2luZ0NhbGxzKToKI"+
"CAgICAgICAgICAgc2VsZi5sb2dnZWREcmF3aW5nQ2FsbHMuYXBwZW5kKChtZXRob2ROYW1lLCBhcm"+
"dzLCBrd2FyZ3MpKQoKICAgIGRlZiBjcmVhdGVfYXJjKHNlbGYsICphcmdzLCAqKmt3YXJncyk6IHN"+
"lbGYubG9nKCdjcmVhdGVfYXJjJywgYXJncywga3dhcmdzKTsgcmV0dXJuIHN1cGVyKCkuY3JlYXRl"+
"X2FyYygqYXJncywgKiprd2FyZ3MpCiAgICBkZWYgY3JlYXRlX2JpdG1hcChzZWxmLCAqYXJncywgK"+
"iprd2FyZ3MpOiBzZWxmLmxvZygnY3JlYXRlX2JpdG1hcCcsIGFyZ3MsIGt3YXJncyk7IHJldHVybi"+
"BzdXBlcigpLmNyZWF0ZV9iaXRtYXAoKmFyZ3MsICoqa3dhcmdzKQogICAgZGVmIGNyZWF0ZV9saW5"+
"lKHNlbGYsICphcmdzLCAqKmt3YXJncyk6IHNlbGYubG9nKCdjcmVhdGVfbGluZScsIGFyZ3MsIGt3"+
"YXJncyk7IHJldHVybiBzdXBlcigpLmNyZWF0ZV9saW5lKCphcmdzLCAqKmt3YXJncykKICAgIGRlZ"+
"iBjcmVhdGVfb3ZhbChzZWxmLCAqYXJncywgKiprd2FyZ3MpOiBzZWxmLmxvZygnY3JlYXRlX292YW"+
"wnLCBhcmdzLCBrd2FyZ3MpOyByZXR1cm4gc3VwZXIoKS5jcmVhdGVfb3ZhbCgqYXJncywgKiprd2F"+
"yZ3MpCiAgICBkZWYgY3JlYXRlX3BvbHlnb24oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTogc2VsZi5s"+
"b2coJ2NyZWF0ZV9wb2x5Z29uJywgYXJncywga3dhcmdzKTsgcmV0dXJuIHN1cGVyKCkuY3JlYXRlX"+
"3BvbHlnb24oKmFyZ3MsICoqa3dhcmdzKQogICAgZGVmIGNyZWF0ZV9yZWN0YW5nbGUoc2VsZiwgKm"+
"FyZ3MsICoqa3dhcmdzKTogc2VsZi5sb2coJ2NyZWF0ZV9yZWN0YW5nbGUnLCBhcmdzLCBrd2FyZ3M"+
"pOyByZXR1cm4gc3VwZXIoKS5jcmVhdGVfcmVjdGFuZ2xlKCphcmdzLCAqKmt3YXJncykKICAgIGRl"+
"ZiBjcmVhdGVfdGV4dChzZWxmLCAqYXJncywgKiprd2FyZ3MpOiBzZWxmLmxvZygnY3JlYXRlX3Rle"+
"HQnLCBhcmdzLCBrd2FyZ3MpOyByZXR1cm4gc3VwZXIoKS5jcmVhdGVfdGV4dCgqYXJncywgKiprd2"+
"FyZ3MpCiAgICBkZWYgY3JlYXRlX3dpbmRvdyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOiBzZWxmLmx"+
"vZygnY3JlYXRlX3dpbmRvdycsIGFyZ3MsIGt3YXJncyk7IHJldHVybiBzdXBlcigpLmNyZWF0ZV93"+
"aW5kb3coKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBjcmVhdGVfaW1hZ2Uoc2VsZiwgKmFyZ3MsI"+
"Coqa3dhcmdzKToKICAgICAgICBzZWxmLmxvZygnY3JlYXRlX2ltYWdlJywgYXJncywga3dhcmdzKT"+
"sKICAgICAgICB1c2VzSW1hZ2UgPSAnaW1hZ2UnIGluIGt3YXJncwogICAgICAgIHVzZXNQaWxJbWF"+
"nZSA9ICdwaWxJbWFnZScgaW4ga3dhcmdzCiAgICAgICAgaWYgKChub3QgdXNlc0ltYWdlKSBhbmQg"+
"KG5vdCB1c2VzUGlsSW1hZ2UpKToKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdjcmVhdGVfa"+
"W1hZ2UgcmVxdWlyZXMgYW4gaW1hZ2UgdG8gZHJhdycpCiAgICAgICAgZWxpZiAodXNlc0ltYWdlIG"+
"FuZCB1c2VzUGlsSW1hZ2UpOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2NyZWF0ZV9pbWF"+
"nZSBjYW5ub3QgdXNlIGJvdGggYW4gaW1hZ2UgYW5kIGEgcGlsSW1hZ2UnKQogICAgICAgIGVsaWYg"+
"KHVzZXNQaWxJbWFnZSk6CiAgICAgICAgICAgIHBpbEltYWdlID0ga3dhcmdzWydwaWxJbWFnZSddC"+
"iAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ3BpbEltYWdlJ10KICAgICAgICAgICAgaWYgKG5vdCBpc2"+
"luc3RhbmNlKHBpbEltYWdlLCBJbWFnZS5JbWFnZSkpOgogICAgICAgICAgICAgICAgcmFpc2UgRXh"+
"jZXB0aW9uKCdjcmVhdGVfaW1hZ2U6IHBpbEltYWdlIHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBv"+
"ZiBhIFBJTC9QaWxsb3cgaW1hZ2UnKQogICAgICAgICAgICBpbWFnZSA9IEltYWdlVGsuUGhvdG9Jb"+
"WFnZShwaWxJbWFnZSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpbWFnZSA9IGt3YXJnc1snaW"+
"1hZ2UnXQogICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShpbWFnZSwgSW1hZ2UuSW1hZ2UpKToKICA"+
"gICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignY3JlYXRlX2ltYWdlOiBpbWFnZSBtdXN0IG5v"+
"dCBiZSBhbiBpbnN0YW5jZSBvZiBhIFBJTC9QaWxsb3cgaW1hZ2VcbicgKwogICAgICAgICAgICAgI"+
"CAgICAgICdZb3UgcGVyaGFwcyBtZWFudCB0byBjb252ZXJ0IGZyb20gUElMIHRvIFRraW50ZXIsIG"+
"xpa2Ugc286XG4nICsKICAgICAgICAgICAgICAgICAgICAnICAgICBjYW52YXMuY3JlYXRlX2ltYWd"+
"lKHgsIHksIGltYWdlPUltYWdlVGsuUGhvdG9JbWFnZShpbWFnZSkpJykKICAgICAgICBrd2FyZ3Nb"+
"J2ltYWdlJ10gPSBpbWFnZQogICAgICAgIHJldHVybiBzdXBlcigpLmNyZWF0ZV9pbWFnZSgqYXJnc"+
"ywgKiprd2FyZ3MpCgpjbGFzcyBBcHAob2JqZWN0KToKICAgIF90aGVSb290ID0gTm9uZSAjIHNpbm"+
"dsZXRvbiBUa2ludGVyIHJvb3Qgb2JqZWN0CgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM"+
"jIyMjIyMjIyMjCiAgICAjIFVzZXIgTWV0aG9kczoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj"+
"IyMjIyMjIyMjIyMjIwogICAgZGVmIHJlZHJhd0FsbChhcHAsIGNhbnZhcyk6IHBhc3MgICAgICAjI"+
"GRyYXcgKHZpZXcpIHRoZSBtb2RlbCBpbiB0aGUgY2FudmFzCiAgICBkZWYgYXBwU3RhcnRlZChhcH"+
"ApOiBwYXNzICAgICAgICAgICAjIGluaXRpYWxpemUgdGhlIG1vZGVsIChhcHAueHl6KQogICAgZGV"+
"mIGFwcFN0b3BwZWQoYXBwKTogcGFzcyAgICAgICAgICAgIyBjbGVhbnVwIGFmdGVyIGFwcCBpcyBk"+
"b25lIHJ1bm5pbmcKICAgIGRlZiBrZXlQcmVzc2VkKGFwcCwgZXZlbnQpOiBwYXNzICAgICMgdXNlI"+
"GV2ZW50LmtleQogICAgZGVmIGtleVJlbGVhc2VkKGFwcCwgZXZlbnQpOiBwYXNzICAgIyB1c2UgZX"+
"ZlbnQua2V5CiAgICBkZWYgbW91c2VQcmVzc2VkKGFwcCwgZXZlbnQpOiBwYXNzICAjIHVzZSBldmV"+
"udC54IGFuZCBldmVudC55CiAgICBkZWYgbW91c2VSZWxlYXNlZChhcHAsIGV2ZW50KTogcGFzcyAj"+
"IHVzZSBldmVudC54IGFuZCBldmVudC55CiAgICBkZWYgbW91c2VNb3ZlZChhcHAsIGV2ZW50KTogc"+
"GFzcyAgICAjIHVzZSBldmVudC54IGFuZCBldmVudC55CiAgICBkZWYgbW91c2VEcmFnZ2VkKGFwcC"+
"wgZXZlbnQpOiBwYXNzICAjIHVzZSBldmVudC54IGFuZCBldmVudC55CiAgICBkZWYgdGltZXJGaXJ"+
"lZChhcHApOiBwYXNzICAgICAgICAgICAjIHJlc3BvbmQgdG8gdGltZXIgZXZlbnRzCiAgICBkZWYg"+
"c2l6ZUNoYW5nZWQoYXBwKTogcGFzcyAgICAgICAgICAjIHJlc3BvbmQgdG8gd2luZG93IHNpemUgY"+
"2hhbmdlcwoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBJbX"+
"BsZW1lbnRhdGlvbjoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICA"+
"gIGRlZiBfX2luaXRfXyhhcHAsIHdpZHRoPTMwMCwgaGVpZ2h0PTMwMCwgeD0wLCB5PTAsIHRpdGxl"+
"PU5vbmUsIGF1dG9ydW49VHJ1ZSwgbXZjQ2hlY2s9VHJ1ZSwgbG9nRHJhd2luZ0NhbGxzPVRydWUpO"+
"gogICAgICAgIGFwcC53aW54LCBhcHAud2lueSwgYXBwLndpZHRoLCBhcHAuaGVpZ2h0ID0geCwgeS"+
"wgd2lkdGgsIGhlaWdodAogICAgICAgIGFwcC50aW1lckRlbGF5ID0gMTAwICAgICAjIG1pbGxpc2V"+
"jb25kcwogICAgICAgIGFwcC5tb3VzZU1vdmVkRGVsYXkgPSA1MCAjIGRpdHRvCiAgICAgICAgYXBw"+
"Ll90aXRsZSA9IHRpdGxlCiAgICAgICAgYXBwLl9tdmNDaGVjayA9IG12Y0NoZWNrCiAgICAgICAgY"+
"XBwLl9sb2dEcmF3aW5nQ2FsbHMgPSBsb2dEcmF3aW5nQ2FsbHMKICAgICAgICBhcHAuX3J1bm5pbm"+
"cgPSBhcHAuX3BhdXNlZCA9IEZhbHNlCiAgICAgICAgYXBwLl9tb3VzZVByZXNzZWRPdXRzaWRlV2l"+
"uZG93ID0gRmFsc2UKICAgICAgICBpZiBhdXRvcnVuOiBhcHAucnVuKCkKCiAgICBkZWYgc2V0U2l6"+
"ZShhcHAsIHdpZHRoLCBoZWlnaHQpOgogICAgICAgIGFwcC5fcm9vdC5nZW9tZXRyeShmJ3t3aWR0a"+
"H14e2hlaWdodH0nKQoKICAgIGRlZiBzZXRQb3NpdGlvbihhcHAsIHgsIHkpOgogICAgICAgIGFwcC"+
"5fcm9vdC5nZW9tZXRyeShmJyt7eH0re3l9JykKCiAgICBkZWYgc2hvd01lc3NhZ2UoYXBwLCBtZXN"+
"zYWdlKToKICAgICAgICBtZXNzYWdlYm94LnNob3dpbmZvKCdzaG93TWVzc2FnZScsIG1lc3NhZ2Us"+
"IHBhcmVudD1hcHAuX3Jvb3QpCgogICAgZGVmIGdldFVzZXJJbnB1dChhcHAsIHByb21wdCk6CiAgI"+
"CAgICAgcmV0dXJuIHNpbXBsZWRpYWxvZy5hc2tzdHJpbmcoJ2dldFVzZXJJbnB1dCcsIHByb21wdC"+
"kKCiAgICBkZWYgbG9hZEltYWdlKGFwcCwgcGF0aD1Ob25lKToKICAgICAgICBpZiAoYXBwLl9jYW5"+
"2YXMuaW5SZWRyYXdBbGwpOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0Nhbm5vdCBjYWxs"+
"IGxvYWRJbWFnZSBpbiByZWRyYXdBbGwnKQogICAgICAgIGlmIChwYXRoIGlzIE5vbmUpOgogICAgI"+
"CAgICAgICBwYXRoID0gZmlsZWRpYWxvZy5hc2tvcGVuZmlsZW5hbWUoaW5pdGlhbGRpcj1vcy5nZX"+
"Rjd2QoKSwgdGl0bGU9J1NlbGVjdCBmaWxlOiAnLGZpbGV0eXBlcyA9ICgoJ0ltYWdlIGZpbGVzJyw"+
"nKi5wbmcgKi5naWYgKi5qcGcnKSwoJ2FsbCBmaWxlcycsJyouKicpKSkKICAgICAgICAgICAgaWYg"+
"KG5vdCBwYXRoKTogcmV0dXJuIE5vbmUKICAgICAgICBpZiAocGF0aC5zdGFydHN3aXRoKCdodHRwJ"+
"ykpOgogICAgICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJlcXVlc3QoJ0dFVCcsIHBhdGgpIC"+
"MgcGF0aCBpcyBhIFVSTCEKICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKEJ5dGVzSU8ocmV"+
"zcG9uc2UuY29udGVudCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5v"+
"cGVuKHBhdGgpCiAgICAgICAgcmV0dXJuIGltYWdlCgogICAgZGVmIHNjYWxlSW1hZ2UoYXBwLCBpb"+
"WFnZSwgc2NhbGUsIGFudGlhbGlhcz1GYWxzZSk6CiAgICAgICAgIyBhbnRpYWxpYXNpbmcgaXMgaG"+
"lnaGVyLXF1YWxpdHkgYnV0IHNsb3dlcgogICAgICAgIHJlc2FtcGxlID0gSW1hZ2UuQU5USUFMSUF"+
"TIGlmIGFudGlhbGlhcyBlbHNlIEltYWdlLk5FQVJFU1QKICAgICAgICByZXR1cm4gaW1hZ2UucmVz"+
"aXplKChyb3VuZChpbWFnZS53aWR0aCpzY2FsZSksIHJvdW5kKGltYWdlLmhlaWdodCpzY2FsZSkpL"+
"CByZXNhbXBsZT1yZXNhbXBsZSkKCiAgICBkZWYgZ2V0U25hcHNob3QoYXBwKToKICAgICAgICBhcH"+
"AuX3Nob3dSb290V2luZG93KCkKICAgICAgICB4MCA9IGFwcC5fcm9vdC53aW5mb19yb290eCgpICs"+
"gYXBwLl9jYW52YXMud2luZm9feCgpCiAgICAgICAgeTAgPSBhcHAuX3Jvb3Qud2luZm9fcm9vdHko"+
"KSArIGFwcC5fY2FudmFzLndpbmZvX3koKQogICAgICAgIHJlc3VsdCA9IEltYWdlR3JhYmJlci5nc"+
"mFiKCh4MCx5MCx4MCthcHAud2lkdGgseTArYXBwLmhlaWdodCkpCiAgICAgICAgcmV0dXJuIHJlc3"+
"VsdAoKICAgIGRlZiBzYXZlU25hcHNob3QoYXBwKToKICAgICAgICBwYXRoID0gZmlsZWRpYWxvZy5"+
"hc2tzYXZlYXNmaWxlbmFtZShpbml0aWFsZGlyPW9zLmdldGN3ZCgpLCB0aXRsZT0nU2VsZWN0IGZp"+
"bGU6ICcsZmlsZXR5cGVzID0gKCgncG5nIGZpbGVzJywnKi5wbmcnKSwoJ2FsbCBmaWxlcycsJyouK"+
"icpKSkKICAgICAgICBpZiAocGF0aCk6CiAgICAgICAgICAgICMgZGVmZXIgY2FsbCB0byBsZXQgZm"+
"lsZWRpYWxvZyBjbG9zZSAoYW5kIG5vdCBncmFiIHRob3NlIHBpeGVscykKICAgICAgICAgICAgaWY"+
"gKG5vdCBwYXRoLmVuZHN3aXRoKCcucG5nJykpOiBwYXRoICs9ICcucG5nJwogICAgICAgICAgICBh"+
"cHAuX2RlZmVycmVkTWV0aG9kQ2FsbChhZnRlcklkPSdzYXZlU25hcHNob3QnLCBhZnRlckRlbGF5P"+
"TAsIGFmdGVyRm49bGFtYmRhOmFwcC5nZXRTbmFwc2hvdCgpLnNhdmUocGF0aCkpCgogICAgZGVmIF"+
"90b2dnbGVQYXVzZWQoYXBwKToKICAgICAgICBhcHAuX3BhdXNlZCA9IG5vdCBhcHAuX3BhdXNlZAo"+
"KICAgIGRlZiBxdWl0KGFwcCk6CiAgICAgICAgYXBwLl9ydW5uaW5nID0gRmFsc2UKICAgICAgICBh"+
"cHAuX3Jvb3QucXVpdCgpICMgYnJlYWsgb3V0IG9mIHJvb3QubWFpbmxvb3AoKSB3aXRob3V0IGNsb"+
"3Npbmcgd2luZG93IQoKICAgIGRlZiBfX3NldGF0dHJfXyhhcHAsIGF0dHIsIHZhbCk6CiAgICAgIC"+
"AgZCA9IGFwcC5fX2RpY3RfXwogICAgICAgIGRbYXR0cl0gPSB2YWwKICAgICAgICBjYW52YXMgPSB"+
"kLmdldCgnX2NhbnZhcycsIE5vbmUpCiAgICAgICAgaWYgKGQuZ2V0KCdydW5uaW5nJywgRmFsc2Up"+
"IGFuZAogICAgICAgICAgICBkLmdldCgnbXZjQ2hlY2snLCBGYWxzZSkgYW5kCiAgICAgICAgICAgI"+
"ChjYW52YXMgaXMgbm90IE5vbmUpIGFuZAogICAgICAgICAgICBjYW52YXMuaW5SZWRyYXdBbGwpOg"+
"ogICAgICAgICAgICBhcHAuX212Y1Zpb2xhdGlvbihmJ3lvdSBtYXkgbm90IGNoYW5nZSBhcHAue2F"+
"0dHJ9IGluIHRoZSBtb2RlbCB3aGlsZSBpbiByZWRyYXdBbGwgKHRoZSB2aWV3KScpCgogICAgZGVm"+
"IF9wcmludFVzZXJUcmFjZWJhY2soYXBwLCBleGNlcHRpb24sIHRiKToKICAgICAgICBzdGFjayA9I"+
"HRyYWNlYmFjay5leHRyYWN0X3RiKHRiKQogICAgICAgIGxpbmVzID0gdHJhY2ViYWNrLmZvcm1hdF"+
"9saXN0KHN0YWNrKQogICAgICAgIGluUmVkcmF3QWxsV3JhcHBlciA9IEZhbHNlCiAgICAgICAgcHJ"+
"pbnRMaW5lcyA9IFsgXQogICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgICAgICBpZiAo"+
"KCciY211XzExMl9ncmFwaGljcy5weSInIG5vdCBpbiBsaW5lKSBhbmQKICAgICAgICAgICAgICAgI"+
"CgnL2NtdV8xMTJfZ3JhcGhpY3MucHknIG5vdCBpbiBsaW5lKSBhbmQKICAgICAgICAgICAgICAgIC"+
"gnXFxjbXVfMTEyX2dyYXBoaWNzLnB5JyBub3QgaW4gbGluZSkgYW5kCiAgICAgICAgICAgICAgICA"+
"oJy90a2ludGVyLycgbm90IGluIGxpbmUpIGFuZAogICAgICAgICAgICAgICAgKCdcXHRraW50ZXJc"+
"XCcgbm90IGluIGxpbmUpKToKICAgICAgICAgICAgICAgIHByaW50TGluZXMuYXBwZW5kKGxpbmUpC"+
"iAgICAgICAgICAgIGlmICgncmVkcmF3QWxsV3JhcHBlcicgaW4gbGluZSk6CiAgICAgICAgICAgIC"+
"AgICBpblJlZHJhd0FsbFdyYXBwZXIgPSBUcnVlCiAgICAgICAgaWYgKGxlbihwcmludExpbmVzKSA"+
"9PSAwKToKICAgICAgICAgICAgIyBObyB1c2VyIGNvZGUgaW4gdHJhY2UsIHNvIHdlIGhhdmUgdG8g"+
"dXNlIGFsbCB0aGUgY29kZSAoYnVtbWVyKSwKICAgICAgICAgICAgIyBidXQgbm90IGlmIHdlIGFyZ"+
"SBpbiBhIHJlZHJhd0FsbFdyYXBwZXIuLi4KICAgICAgICAgICAgaWYgaW5SZWRyYXdBbGxXcmFwcG"+
"VyOgogICAgICAgICAgICAgICAgcHJpbnRMaW5lcyA9IFsnICAgIE5vIHRyYWNlYmFjayBhdmFpbGF"+
"ibGUuIEVycm9yIG9jY3VycmVkIGluIHJlZHJhd0FsbC5cbiddCiAgICAgICAgICAgIGVsc2U6CiAg"+
"ICAgICAgICAgICAgICBwcmludExpbmVzID0gbGluZXMKICAgICAgICBwcmludCgnVHJhY2ViYWNrI"+
"Chtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicpCiAgICAgICAgZm9yIGxpbmUgaW4gcHJpbnRMaW5lcz"+
"ogcHJpbnQobGluZSwgZW5kPScnKQogICAgICAgIHByaW50KGYnRXhjZXB0aW9uOiB7ZXhjZXB0aW9"+
"ufScpCgogICAgZGVmIF9zYWZlTWV0aG9kKGFwcE1ldGhvZCk6CiAgICAgICAgZGVmIG0oKmFyZ3Ms"+
"ICoqa3dhcmdzKToKICAgICAgICAgICAgYXBwID0gYXJnc1swXQogICAgICAgICAgICB0cnk6CiAgI"+
"CAgICAgICAgICAgICByZXR1cm4gYXBwTWV0aG9kKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgIC"+
"AgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgYXBwLl9ydW5uaW5nID0gRmF"+
"sc2UKICAgICAgICAgICAgICAgIGFwcC5fcHJpbnRVc2VyVHJhY2ViYWNrKGUsIHN5cy5leGNfaW5m"+
"bygpWzJdKQogICAgICAgICAgICAgICAgaWYgKCdfY2FudmFzJyBpbiBhcHAuX19kaWN0X18pOgogI"+
"CAgICAgICAgICAgICAgICAgIGFwcC5fY2FudmFzLmluUmVkcmF3QWxsID0gVHJ1ZSAjIG5vdCByZW"+
"FsbHksIGJ1dCBzdG9wcyByZWN1cnNpdmUgTVZDIFZpb2xhdGlvbnMhCiAgICAgICAgICAgICAgICA"+
"gICAgYXBwLl9jYW52YXMuY3JlYXRlX3JlY3RhbmdsZSgwLCAwLCBhcHAud2lkdGgsIGFwcC5oZWln"+
"aHQsIGZpbGw9Tm9uZSwgd2lkdGg9MTAsIG91dGxpbmU9J3JlZCcpCiAgICAgICAgICAgICAgICAgI"+
"CAgYXBwLl9jYW52YXMuY3JlYXRlX3JlY3RhbmdsZSgxMCwgYXBwLmhlaWdodC01MCwgYXBwLndpZH"+
"RoLTEwLCBhcHAuaGVpZ2h0LTEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA"+
"gICAgICAgICAgICAgZmlsbD0nd2hpdGUnLCBvdXRsaW5lPSdyZWQnLCB3aWR0aD00KQogICAgICAg"+
"ICAgICAgICAgICAgIGFwcC5fY2FudmFzLmNyZWF0ZV90ZXh0KGFwcC53aWR0aC8yLCBhcHAuaGVpZ"+
"2h0LTQwLCB0ZXh0PWYnRXhjZXB0aW9uISBBcHAgU3RvcHBlZCEnLCBmaWxsPSdyZWQnLCBmb250PS"+
"dBcmlhbCAxMiBib2xkJykKICAgICAgICAgICAgICAgICAgICBhcHAuX2NhbnZhcy5jcmVhdGVfdGV"+
"4dChhcHAud2lkdGgvMiwgYXBwLmhlaWdodC0yMCwgdGV4dD1mJ1NlZSBjb25zb2xlIGZvciBkZXRh"+
"aWxzJywgZmlsbD0ncmVkJywgZm9udD0nQXJpYWwgMTIgYm9sZCcpCiAgICAgICAgICAgICAgICAgI"+
"CAgYXBwLl9jYW52YXMudXBkYXRlKCkKICAgICAgICAgICAgICAgIGFwcC5zaG93TWVzc2FnZShmJ0"+
"V4Y2VwdGlvbjoge2V9XG5DbGljayBvayB0aGVuIHNlZSBjb25zb2xlIGZvciBkZXRhaWxzLicpCiA"+
"gICAgICAgcmV0dXJuIG0KCiAgICBkZWYgX21ldGhvZElzT3ZlcnJpZGRlbihhcHAsIG1ldGhvZE5h"+
"bWUpOgogICAgICAgIHJldHVybiAoZ2V0YXR0cih0eXBlKGFwcCksIG1ldGhvZE5hbWUpIGlzIG5vd"+
"CBnZXRhdHRyKEFwcCwgbWV0aG9kTmFtZSkpCgogICAgZGVmIF9tdmNWaW9sYXRpb24oYXBwLCBlcn"+
"JNc2cpOgogICAgICAgIGFwcC5fcnVubmluZyA9IEZhbHNlCiAgICAgICAgcmFpc2UgRXhjZXB0aW9"+
"uKCdNVkMgVmlvbGF0aW9uOiAnICsgZXJyTXNnKQoKICAgIEBfc2FmZU1ldGhvZAogICAgZGVmIF9y"+
"ZWRyYXdBbGxXcmFwcGVyKGFwcCk6CiAgICAgICAgaWYgKG5vdCBhcHAuX3J1bm5pbmcpOiByZXR1c"+
"m4KICAgICAgICBpZiAoJ2RlZmVycmVkUmVkcmF3QWxsJyBpbiBhcHAuX2FmdGVySWRNYXApOiByZX"+
"R1cm4gIyB3YWl0IGZvciBwZW5kaW5nIGNhbGwKICAgICAgICBhcHAuX2NhbnZhcy5pblJlZHJhd0F"+
"sbCA9IFRydWUKICAgICAgICBhcHAuX2NhbnZhcy5kZWxldGUoQUxMKQogICAgICAgIHdpZHRoLG91"+
"dGxpbmUgPSAoMTAsJ3JlZCcpIGlmIGFwcC5fcGF1c2VkIGVsc2UgKDAsJ3doaXRlJykKICAgICAgI"+
"CBhcHAuX2NhbnZhcy5jcmVhdGVfcmVjdGFuZ2xlKDAsIDAsIGFwcC53aWR0aCwgYXBwLmhlaWdodC"+
"wgZmlsbD0nd2hpdGUnLCB3aWR0aD13aWR0aCwgb3V0bGluZT1vdXRsaW5lKQogICAgICAgIGFwcC5"+
"fY2FudmFzLmxvZ2dlZERyYXdpbmdDYWxscyA9IFsgXQogICAgICAgIGFwcC5fY2FudmFzLmxvZ0Ry"+
"YXdpbmdDYWxscyA9IGFwcC5fbG9nRHJhd2luZ0NhbGxzCiAgICAgICAgYXBwLnJlZHJhd0FsbChhc"+
"HAuX2NhbnZhcykKICAgICAgICBhcHAuX2NhbnZhcy5pblJlZHJhd0FsbCA9IEZhbHNlCiAgICAgIC"+
"AgYXBwLl9jYW52YXMudXBkYXRlKCkKCiAgICBkZWYgX2RlZmVycmVkTWV0aG9kQ2FsbChhcHAsIGF"+
"mdGVySWQsIGFmdGVyRGVsYXksIGFmdGVyRm4sIHJlcGxhY2U9RmFsc2UpOgogICAgICAgIGRlZiBh"+
"ZnRlckZuV3JhcHBlcigpOgogICAgICAgICAgICBhcHAuX2FmdGVySWRNYXAucG9wKGFmdGVySWQsI"+
"E5vbmUpCiAgICAgICAgICAgIGFmdGVyRm4oKQogICAgICAgIGlkID0gYXBwLl9hZnRlcklkTWFwLm"+
"dldChhZnRlcklkLCBOb25lKQogICAgICAgIGlmICgoaWQgaXMgTm9uZSkgb3IgcmVwbGFjZSk6CiA"+
"gICAgICAgICAgIGlmIGlkOiBhcHAuX3Jvb3QuYWZ0ZXJfY2FuY2VsKGlkKQogICAgICAgICAgICBh"+
"cHAuX2FmdGVySWRNYXBbYWZ0ZXJJZF0gPSBhcHAuX3Jvb3QuYWZ0ZXIoYWZ0ZXJEZWxheSwgYWZ0Z"+
"XJGbldyYXBwZXIpCgogICAgZGVmIF9kZWZlcnJlZFJlZHJhd0FsbChhcHApOgogICAgICAgIGFwcC"+
"5fZGVmZXJyZWRNZXRob2RDYWxsKGFmdGVySWQ9J2RlZmVycmVkUmVkcmF3QWxsJywgYWZ0ZXJEZWx"+
"heT0xMDAsIGFmdGVyRm49YXBwLl9yZWRyYXdBbGxXcmFwcGVyLCByZXBsYWNlPVRydWUpCgogICAg"+
"QF9zYWZlTWV0aG9kCiAgICBkZWYgX2FwcFN0YXJ0ZWRXcmFwcGVyKGFwcCk6CiAgICAgICAgYXBwL"+
"mFwcFN0YXJ0ZWQoKQogICAgICAgIGFwcC5fcmVkcmF3QWxsV3JhcHBlcigpCgogICAgX2tleU5hbW"+
"VNYXAgPSB7ICdcdCc6J1RhYicsICdcbic6J0VudGVyJywgJ1xyJzonRW50ZXInLCAnXGInOidCYWN"+
"rc3BhY2UnLAogICAgICAgICAgICAgICAgICAgY2hyKDEyNyk6J0RlbGV0ZScsIGNocigyNyk6J0Vz"+
"Y2FwZScsICcgJzonU3BhY2UnIH0KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX3VzZUV2ZW50S"+
"2V5KGF0dHIpOgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbihmJ1VzZSBldmVudC5rZXkgaW5zdGVhZC"+
"BvZiBldmVudC57YXR0cn0nKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBfZ2V0RXZlbnRLZXl"+
"JbmZvKGV2ZW50LCBrZXlzeW0sIGNoYXIpOgogICAgICAgIGtleSA9IGMgPSBjaGFyCiAgICAgICAg"+
"aGFzQ29udHJvbEtleSA9IChldmVudC5zdGF0ZSAmIDB4NCAhPSAwKQogICAgICAgIGlmICgoYyBpb"+
"iBbTm9uZSwgJyddKSBvciAobGVuKGMpID4gMSkgb3IgKG9yZChjKSA+IDI1NSkpOgogICAgICAgIC"+
"AgICBrZXkgPSBrZXlzeW0KICAgICAgICAgICAgaWYgKGtleS5lbmRzd2l0aCgnX0wnKSBvcgogICA"+
"gICAgICAgICAgICAga2V5LmVuZHN3aXRoKCdfUicpIG9yCiAgICAgICAgICAgICAgICBrZXkuZW5k"+
"c3dpdGgoJ19Mb2NrJykpOgogICAgICAgICAgICAgICAga2V5ID0gJ01vZGlmaWVyX0tleScKICAgI"+
"CAgICBlbGlmIChjIGluIEFwcC5fa2V5TmFtZU1hcCk6CiAgICAgICAgICAgIGtleSA9IEFwcC5fa2"+
"V5TmFtZU1hcFtjXQogICAgICAgIGVsaWYgKChsZW4oYykgPT0gMSkgYW5kICgxIDw9IG9yZChjKSA"+
"8PSAyNikpOgogICAgICAgICAgICBrZXkgPSBjaHIob3JkKCdhJyktMSArIG9yZChjKSkKICAgICAg"+
"ICAgICAgaGFzQ29udHJvbEtleSA9IFRydWUKICAgICAgICBpZiBoYXNDb250cm9sS2V5IGFuZCAob"+
"GVuKGtleSkgPT0gMSk6CiAgICAgICAgICAgICMgZG9uJ3QgYWRkIGNvbnRyb2wtIHByZWZpeCB0by"+
"BFbnRlciwgVGFiLCBFc2NhcGUsIC4uLgogICAgICAgICAgICBrZXkgPSAnY29udHJvbC0nICsga2V"+
"5CiAgICAgICAgcmV0dXJuIGtleQoKICAgIGNsYXNzIEtleUV2ZW50V3JhcHBlcihFdmVudCk6CiAg"+
"ICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50KToKICAgICAgICAgICAga2V5c3ltLCBjaGFyI"+
"D0gZXZlbnQua2V5c3ltLCBldmVudC5jaGFyCiAgICAgICAgICAgIGRlbCBldmVudC5rZXlzeW0KIC"+
"AgICAgICAgICAgZGVsIGV2ZW50LmNoYXIKICAgICAgICAgICAgZm9yIGtleSBpbiBldmVudC5fX2R"+
"pY3RfXzoKICAgICAgICAgICAgICAgIGlmIChub3Qga2V5LnN0YXJ0c3dpdGgoJ19fJykpOgogICAg"+
"ICAgICAgICAgICAgICAgIHNlbGYuX19kaWN0X19ba2V5XSA9IGV2ZW50Ll9fZGljdF9fW2tleV0KI"+
"CAgICAgICAgICAgc2VsZi5rZXkgPSBBcHAuX2dldEV2ZW50S2V5SW5mbyhldmVudCwga2V5c3ltLC"+
"BjaGFyKQogICAgICAgIGtleXN5bSA9IHByb3BlcnR5KGxhbWJkYSAqYXJnczogQXBwLl91c2VFdmV"+
"udEtleSgna2V5c3ltJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhICphcmdzOiBB"+
"cHAuX3VzZUV2ZW50S2V5KCdrZXlzeW0nKSkKICAgICAgICBjaGFyID0gICBwcm9wZXJ0eShsYW1iZ"+
"GEgKmFyZ3M6IEFwcC5fdXNlRXZlbnRLZXkoJ2NoYXInKSwKICAgICAgICAgICAgICAgICAgICAgIC"+
"AgICBsYW1iZGEgKmFyZ3M6IEFwcC5fdXNlRXZlbnRLZXkoJ2NoYXInKSkKCiAgICBAX3NhZmVNZXR"+
"ob2QKICAgIGRlZiBfa2V5UHJlc3NlZFdyYXBwZXIoYXBwLCBldmVudCk6CiAgICAgICAgZXZlbnQg"+
"PSBBcHAuS2V5RXZlbnRXcmFwcGVyKGV2ZW50KQogICAgICAgIGlmIChldmVudC5rZXkgPT0gJ2Nvb"+
"nRyb2wtcycpOgogICAgICAgICAgICBhcHAuc2F2ZVNuYXBzaG90KCkKICAgICAgICBlbGlmIChldm"+
"VudC5rZXkgPT0gJ2NvbnRyb2wtcCcpOgogICAgICAgICAgICBhcHAuX3RvZ2dsZVBhdXNlZCgpCiA"+
"gICAgICAgICAgIGFwcC5fcmVkcmF3QWxsV3JhcHBlcigpCiAgICAgICAgZWxpZiAoZXZlbnQua2V5"+
"ID09ICdjb250cm9sLXEnKToKICAgICAgICAgICAgYXBwLnF1aXQoKQogICAgICAgIGVsaWYgKGV2Z"+
"W50LmtleSA9PSAnY29udHJvbC14Jyk6CiAgICAgICAgICAgIG9zLl9leGl0KDApICMgaGFyZCBleG"+
"l0IGF2b2lkcyB0a2ludGVyIGVycm9yIG1lc3NhZ2VzCiAgICAgICAgZWxpZiAoYXBwLl9ydW5uaW5"+
"nIGFuZAogICAgICAgICAgICAgIChub3QgYXBwLl9wYXVzZWQpIGFuZAogICAgICAgICAgICAgIGFw"+
"cC5fbWV0aG9kSXNPdmVycmlkZGVuKCdrZXlQcmVzc2VkJykgYW5kCiAgICAgICAgICAgICAgKG5vd"+
"CBldmVudC5rZXkgPT0gJ01vZGlmaWVyX0tleScpKToKICAgICAgICAgICAgYXBwLmtleVByZXNzZW"+
"QoZXZlbnQpCiAgICAgICAgICAgIGFwcC5fcmVkcmF3QWxsV3JhcHBlcigpCgogICAgQF9zYWZlTWV"+
"0aG9kCiAgICBkZWYgX2tleVJlbGVhc2VkV3JhcHBlcihhcHAsIGV2ZW50KToKICAgICAgICBpZiAo"+
"bm90IGFwcC5fcnVubmluZykgb3IgYXBwLl9wYXVzZWQgb3IgKG5vdCBhcHAuX21ldGhvZElzT3Zlc"+
"nJpZGRlbigna2V5UmVsZWFzZWQnKSk6IHJldHVybgogICAgICAgIGV2ZW50ID0gQXBwLktleUV2ZW"+
"50V3JhcHBlcihldmVudCkKICAgICAgICBpZiAobm90IGV2ZW50LmtleSA9PSAnTW9kaWZpZXJfS2V"+
"5Jyk6CiAgICAgICAgICAgIGFwcC5rZXlSZWxlYXNlZChldmVudCkKICAgICAgICAgICAgYXBwLl9y"+
"ZWRyYXdBbGxXcmFwcGVyKCkKCiAgICBAX3NhZmVNZXRob2QKICAgIGRlZiBfbW91c2VQcmVzc2VkV"+
"3JhcHBlcihhcHAsIGV2ZW50KToKICAgICAgICBpZiAobm90IGFwcC5fcnVubmluZykgb3IgYXBwLl"+
"9wYXVzZWQ6IHJldHVybgogICAgICAgIGlmICgoZXZlbnQueCA8IDApIG9yIChldmVudC54ID4gYXB"+
"wLndpZHRoKSBvcgogICAgICAgICAgICAoZXZlbnQueSA8IDApIG9yIChldmVudC55ID4gYXBwLmhl"+
"aWdodCkpOgogICAgICAgICAgICBhcHAuX21vdXNlUHJlc3NlZE91dHNpZGVXaW5kb3cgPSBUcnVlC"+
"iAgICAgICAgZWxzZToKICAgICAgICAgICAgYXBwLl9tb3VzZVByZXNzZWRPdXRzaWRlV2luZG93ID"+
"0gRmFsc2UKICAgICAgICAgICAgYXBwLl9tb3VzZUlzUHJlc3NlZCA9IFRydWUKICAgICAgICAgICA"+
"gYXBwLl9sYXN0TW91c2VQb3NuID0gKGV2ZW50LngsIGV2ZW50LnkpCiAgICAgICAgICAgIGlmIChh"+
"cHAuX21ldGhvZElzT3ZlcnJpZGRlbignbW91c2VQcmVzc2VkJykpOgogICAgICAgICAgICAgICAgY"+
"XBwLm1vdXNlUHJlc3NlZChldmVudCkKICAgICAgICAgICAgICAgIGFwcC5fcmVkcmF3QWxsV3JhcH"+
"BlcigpCgogICAgQF9zYWZlTWV0aG9kCiAgICBkZWYgX21vdXNlUmVsZWFzZWRXcmFwcGVyKGFwcCw"+
"gZXZlbnQpOgogICAgICAgIGlmIChub3QgYXBwLl9ydW5uaW5nKSBvciBhcHAuX3BhdXNlZDogcmV0"+
"dXJuCiAgICAgICAgYXBwLl9tb3VzZUlzUHJlc3NlZCA9IEZhbHNlCiAgICAgICAgaWYgYXBwLl9tb"+
"3VzZVByZXNzZWRPdXRzaWRlV2luZG93OgogICAgICAgICAgICBhcHAuX21vdXNlUHJlc3NlZE91dH"+
"NpZGVXaW5kb3cgPSBGYWxzZQogICAgICAgICAgICBhcHAuX3NpemVDaGFuZ2VkV3JhcHBlcigpCiA"+
"gICAgICAgZWxzZToKICAgICAgICAgICAgYXBwLl9sYXN0TW91c2VQb3NuID0gKGV2ZW50LngsIGV2"+
"ZW50LnkpCiAgICAgICAgICAgIGlmIChhcHAuX21ldGhvZElzT3ZlcnJpZGRlbignbW91c2VSZWxlY"+
"XNlZCcpKToKICAgICAgICAgICAgICAgIGFwcC5tb3VzZVJlbGVhc2VkKGV2ZW50KQogICAgICAgIC"+
"AgICAgICAgYXBwLl9yZWRyYXdBbGxXcmFwcGVyKCkKCiAgICBAX3NhZmVNZXRob2QKICAgIGRlZiB"+
"fdGltZXJGaXJlZFdyYXBwZXIoYXBwKToKICAgICAgICBpZiAobm90IGFwcC5fcnVubmluZykgb3Ig"+
"KG5vdCBhcHAuX21ldGhvZElzT3ZlcnJpZGRlbigndGltZXJGaXJlZCcpKTogcmV0dXJuCiAgICAgI"+
"CAgaWYgKG5vdCBhcHAuX3BhdXNlZCk6CiAgICAgICAgICAgIGFwcC50aW1lckZpcmVkKCkKICAgIC"+
"AgICAgICAgYXBwLl9yZWRyYXdBbGxXcmFwcGVyKCkKICAgICAgICBhcHAuX2RlZmVycmVkTWV0aG9"+
"kQ2FsbChhZnRlcklkPSdfdGltZXJGaXJlZFdyYXBwZXInLCBhZnRlckRlbGF5PWFwcC50aW1lckRl"+
"bGF5LCBhZnRlckZuPWFwcC5fdGltZXJGaXJlZFdyYXBwZXIpCgogICAgQF9zYWZlTWV0aG9kCiAgI"+
"CBkZWYgX3NpemVDaGFuZ2VkV3JhcHBlcihhcHAsIGV2ZW50PU5vbmUpOgogICAgICAgIGlmIChub3"+
"QgYXBwLl9ydW5uaW5nKTogcmV0dXJuCiAgICAgICAgaWYgKGV2ZW50IGFuZCAoKGV2ZW50LndpZHR"+
"oIDwgMikgb3IgKGV2ZW50LmhlaWdodCA8IDIpKSk6IHJldHVybgogICAgICAgIGlmIChhcHAuX21v"+
"dXNlUHJlc3NlZE91dHNpZGVXaW5kb3cpOiByZXR1cm4KICAgICAgICBhcHAud2lkdGgsYXBwLmhla"+
"WdodCxhcHAud2lueCxhcHAud2lueSA9IFtpbnQodikgZm9yIHYgaW4gYXBwLl9yb290LndpbmZvX2"+
"dlb21ldHJ5KCkucmVwbGFjZSgneCcsJysnKS5zcGxpdCgnKycpXQogICAgICAgIGlmIChhcHAuX2x"+
"hc3RXaW5kb3dEaW1zIGlzIE5vbmUpOgogICAgICAgICAgICBhcHAuX2xhc3RXaW5kb3dEaW1zID0g"+
"KGFwcC53aWR0aCwgYXBwLmhlaWdodCwgYXBwLndpbngsIGFwcC53aW55KQogICAgICAgIGVsc2U6C"+
"iAgICAgICAgICAgIG5ld0RpbXMgPShhcHAud2lkdGgsIGFwcC5oZWlnaHQsIGFwcC53aW54LCBhcH"+
"Aud2lueSkKICAgICAgICAgICAgaWYgKGFwcC5fbGFzdFdpbmRvd0RpbXMgIT0gbmV3RGltcyk6CiA"+
"gICAgICAgICAgICAgICBhcHAuX2xhc3RXaW5kb3dEaW1zID0gbmV3RGltcwogICAgICAgICAgICAg"+
"ICAgYXBwLnVwZGF0ZVRpdGxlKCkKICAgICAgICAgICAgICAgIGFwcC5zaXplQ2hhbmdlZCgpCiAgI"+
"CAgICAgICAgICAgICBhcHAuX2RlZmVycmVkUmVkcmF3QWxsKCkgIyBhdm9pZCByZXNpemUgY3Jhc2"+
"hpbmcgb24gc29tZSBwbGF0Zm9ybXMKCiAgICBAX3NhZmVNZXRob2QKICAgIGRlZiBfbW91c2VNb3R"+
"pb25XcmFwcGVyKGFwcCk6CiAgICAgICAgaWYgKG5vdCBhcHAuX3J1bm5pbmcpOiByZXR1cm4KICAg"+
"ICAgICBtb3VzZU1vdmVkRXhpc3RzID0gYXBwLl9tZXRob2RJc092ZXJyaWRkZW4oJ21vdXNlTW92Z"+
"WQnKQogICAgICAgIG1vdXNlRHJhZ2dlZEV4aXN0cyA9IGFwcC5fbWV0aG9kSXNPdmVycmlkZGVuKC"+
"dtb3VzZURyYWdnZWQnKQogICAgICAgIGlmICgobm90IGFwcC5fcGF1c2VkKSBhbmQKICAgICAgICA"+
"gICAgKG5vdCBhcHAuX21vdXNlUHJlc3NlZE91dHNpZGVXaW5kb3cpIGFuZAogICAgICAgICAgICAo"+
"KChub3QgYXBwLl9tb3VzZUlzUHJlc3NlZCkgYW5kIG1vdXNlTW92ZWRFeGlzdHMpIG9yCiAgICAgI"+
"CAgICAgICAoYXBwLl9tb3VzZUlzUHJlc3NlZCBhbmQgbW91c2VEcmFnZ2VkRXhpc3RzKSkpOgogIC"+
"AgICAgICAgICBjbGFzcyBNb3VzZU1vdGlvbkV2ZW50KG9iamVjdCk6IHBhc3MKICAgICAgICAgICA"+
"gZXZlbnQgPSBNb3VzZU1vdGlvbkV2ZW50KCkKICAgICAgICAgICAgcm9vdCA9IGFwcC5fcm9vdAog"+
"ICAgICAgICAgICBldmVudC54ID0gcm9vdC53aW5mb19wb2ludGVyeCgpIC0gcm9vdC53aW5mb19yb"+
"290eCgpCiAgICAgICAgICAgIGV2ZW50LnkgPSByb290LndpbmZvX3BvaW50ZXJ5KCkgLSByb290Ln"+
"dpbmZvX3Jvb3R5KCkKICAgICAgICAgICAgaWYgKChhcHAuX2xhc3RNb3VzZVBvc24gIT0gIChldmV"+
"udC54LCBldmVudC55KSkgYW5kCiAgICAgICAgICAgICAgICAoZXZlbnQueCA+PSAwKSBhbmQgKGV2"+
"ZW50LnggPD0gYXBwLndpZHRoKSBhbmQKICAgICAgICAgICAgICAgIChldmVudC55ID49IDApIGFuZ"+
"CAoZXZlbnQueSA8PSBhcHAuaGVpZ2h0KSk6CiAgICAgICAgICAgICAgICBpZiAoYXBwLl9tb3VzZU"+
"lzUHJlc3NlZCk6IGFwcC5tb3VzZURyYWdnZWQoZXZlbnQpCiAgICAgICAgICAgICAgICBlbHNlOiB"+
"hcHAubW91c2VNb3ZlZChldmVudCkKICAgICAgICAgICAgICAgIGFwcC5fbGFzdE1vdXNlUG9zbiA9"+
"IChldmVudC54LCBldmVudC55KQogICAgICAgICAgICAgICAgYXBwLl9yZWRyYXdBbGxXcmFwcGVyK"+
"CkKICAgICAgICBpZiAobW91c2VNb3ZlZEV4aXN0cyBvciBtb3VzZURyYWdnZWRFeGlzdHMpOgogIC"+
"AgICAgICAgICBhcHAuX2RlZmVycmVkTWV0aG9kQ2FsbChhZnRlcklkPSdtb3VzZU1vdGlvbldyYXB"+
"wZXInLCBhZnRlckRlbGF5PWFwcC5tb3VzZU1vdmVkRGVsYXksIGFmdGVyRm49YXBwLl9tb3VzZU1v"+
"dGlvbldyYXBwZXIpCgogICAgZGVmIHVwZGF0ZVRpdGxlKGFwcCk6CiAgICAgICAgYXBwLl90aXRsZ"+
"SA9IGFwcC5fdGl0bGUgb3IgdHlwZShhcHApLl9fbmFtZV9fCiAgICAgICAgYXBwLl9yb290LnRpdG"+
"xlKGYne2FwcC5fdGl0bGV9ICh7YXBwLndpZHRofSB4IHthcHAuaGVpZ2h0fSknKQoKICAgIGRlZiB"+
"nZXRRdWl0TWVzc2FnZShhcHApOgogICAgICAgIGFwcExhYmVsID0gdHlwZShhcHApLl9fbmFtZV9f"+
"CiAgICAgICAgaWYgKGFwcC5fdGl0bGUgIT0gYXBwTGFiZWwpOgogICAgICAgICAgICBpZiAoYXBwL"+
"l90aXRsZS5zdGFydHN3aXRoKGFwcExhYmVsKSk6CiAgICAgICAgICAgICAgICBhcHBMYWJlbCA9IG"+
"FwcC5fdGl0bGUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGFwcExhYmVsICs9IGY"+
"iICd7YXBwLl90aXRsZX0nIgogICAgICAgIHJldHVybiBmIioqKiBDbG9zaW5nIHthcHBMYWJlbH0u"+
"ICBCeWUhICoqKlxuIgoKICAgIGRlZiBfc2hvd1Jvb3RXaW5kb3coYXBwKToKICAgICAgICByb290I"+
"D0gYXBwLl9yb290CiAgICAgICAgcm9vdC51cGRhdGUoKTsgcm9vdC5kZWljb25pZnkoKTsgcm9vdC"+
"5saWZ0KCk7IHJvb3QuZm9jdXMoKQoKICAgIGRlZiBfaGlkZVJvb3RXaW5kb3coYXBwKToKICAgICA"+
"gICByb290ID0gYXBwLl9yb290CiAgICAgICAgcm9vdC53aXRoZHJhdygpCgogICAgQF9zYWZlTWV0"+
"aG9kCiAgICBkZWYgcnVuKGFwcCk6CiAgICAgICAgYXBwLl9tb3VzZUlzUHJlc3NlZCA9IEZhbHNlC"+
"iAgICAgICAgYXBwLl9sYXN0TW91c2VQb3NuID0gKC0xLCAtMSkKICAgICAgICBhcHAuX2xhc3RXaW"+
"5kb3dEaW1zPSBOb25lICMgc2V0IGluIHNpemVDaGFuZ2VkV3JhcHBlcgogICAgICAgIGFwcC5fYWZ"+
"0ZXJJZE1hcCA9IGRpY3QoKQogICAgICAgICMgY3JlYXRlIHRoZSBzaW5nbGV0b24gcm9vdCB3aW5k"+
"b3cKICAgICAgICBpZiAoQXBwLl90aGVSb290IGlzIE5vbmUpOgogICAgICAgICAgICBBcHAuX3RoZ"+
"VJvb3QgPSBUaygpCiAgICAgICAgICAgIEFwcC5fdGhlUm9vdC5jcmVhdGVjb21tYW5kKCdleGl0Jy"+
"wgbGFtYmRhOiAnJykgIyB3aGVuIHVzZXIgZW50ZXJzIGNtZC1xLCBpZ25vcmUgaGVyZSAoaGFuZGx"+
"lZCBpbiBrZXlQcmVzc2VkKQogICAgICAgICAgICBBcHAuX3RoZVJvb3QucHJvdG9jb2woJ1dNX0RF"+
"TEVURV9XSU5ET1cnLCBsYW1iZGE6IEFwcC5fdGhlUm9vdC5hcHAucXVpdCgpKSAjIHdoZW4gdXNlc"+
"iBwcmVzc2VzICd4JyBpbiB0aXRsZSBiYXIKICAgICAgICAgICAgQXBwLl90aGVSb290LmJpbmQoIj"+
"xCdXR0b24tMT4iLCBsYW1iZGEgZXZlbnQ6IEFwcC5fdGhlUm9vdC5hcHAuX21vdXNlUHJlc3NlZFd"+
"yYXBwZXIoZXZlbnQpKQogICAgICAgICAgICBBcHAuX3RoZVJvb3QuYmluZCgiPEZvY3VzT3V0PiIs"+
"IGxhbWJkYSBldmVudDogQXBwLl90aGVSb290LmFwcC5mb2N1c091dChldmVudCkpCiAgICAgICAgI"+
"CAgIEFwcC5fdGhlUm9vdC5iaW5kKCI8QjEtQnV0dG9uUmVsZWFzZT4iLCBsYW1iZGEgZXZlbnQ6IE"+
"FwcC5fdGhlUm9vdC5hcHAuX21vdXNlUmVsZWFzZWRXcmFwcGVyKGV2ZW50KSkKICAgICAgICAgICA"+
"gQXBwLl90aGVSb290LmJpbmQoIjxLZXlQcmVzcz4iLCBsYW1iZGEgZXZlbnQ6IEFwcC5fdGhlUm9v"+
"dC5hcHAuX2tleVByZXNzZWRXcmFwcGVyKGV2ZW50KSkKICAgICAgICAgICAgQXBwLl90aGVSb290L"+
"mJpbmQoIjxLZXlSZWxlYXNlPiIsIGxhbWJkYSBldmVudDogQXBwLl90aGVSb290LmFwcC5fa2V5Um"+
"VsZWFzZWRXcmFwcGVyKGV2ZW50KSkKICAgICAgICAgICAgQXBwLl90aGVSb290LmJpbmQoIjxDb25"+
"maWd1cmU+IiwgbGFtYmRhIGV2ZW50OiBBcHAuX3RoZVJvb3QuYXBwLl9zaXplQ2hhbmdlZFdyYXBw"+
"ZXIoZXZlbnQpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIEFwcC5fdGhlUm9vdC5jYW52YXMuZ"+
"GVzdHJveSgpCiAgICAgICAgYXBwLl9yb290ID0gcm9vdCA9IEFwcC5fdGhlUm9vdCAjIHNpbmdsZX"+
"RvbiByb290IQogICAgICAgIHJvb3QuYXBwID0gYXBwCiAgICAgICAgcm9vdC5nZW9tZXRyeShmJ3t"+
"hcHAud2lkdGh9eHthcHAuaGVpZ2h0fSt7YXBwLndpbnh9K3thcHAud2lueX0nKQogICAgICAgIGFw"+
"cC51cGRhdGVUaXRsZSgpCiAgICAgICAgIyBjcmVhdGUgdGhlIGNhbnZhcwogICAgICAgIHJvb3QuY"+
"2FudmFzID0gYXBwLl9jYW52YXMgPSBXcmFwcGVkQ2FudmFzKGFwcCkKICAgICAgICBhcHAuX2Nhbn"+
"Zhcy5wYWNrKGZpbGw9Qk9USCwgZXhwYW5kPVlFUykKICAgICAgICAjIGluaXRpYWxpemUsIHN0YXJ"+
"0IHRoZSB0aW1lciwgYW5kIGxhdW5jaCB0aGUgYXBwCiAgICAgICAgYXBwLl9ydW5uaW5nID0gVHJ1"+
"ZQogICAgICAgIGFwcC5fcGF1c2VkID0gRmFsc2UKICAgICAgICBhcHAuX2FwcFN0YXJ0ZWRXcmFwc"+
"GVyKCkKICAgICAgICBhcHAuX3RpbWVyRmlyZWRXcmFwcGVyKCkKICAgICAgICBhcHAuX21vdXNlTW"+
"90aW9uV3JhcHBlcigpCiAgICAgICAgYXBwLl9zaG93Um9vdFdpbmRvdygpCiAgICAgICAgcm9vdC5"+
"tYWlubG9vcCgpCiAgICAgICAgYXBwLl9oaWRlUm9vdFdpbmRvdygpCiAgICAgICAgYXBwLl9ydW5u"+
"aW5nID0gRmFsc2UKICAgICAgICBmb3IgYWZ0ZXJJZCBpbiBhcHAuX2FmdGVySWRNYXA6IGFwcC5fc"+
"m9vdC5hZnRlcl9jYW5jZWwoYXBwLl9hZnRlcklkTWFwW2FmdGVySWRdKQogICAgICAgIGFwcC5fYW"+
"Z0ZXJJZE1hcC5jbGVhcigpICMgZm9yIHNhZmV0eQogICAgICAgIGFwcC5hcHBTdG9wcGVkKCkKICA"+
"gICAgICBwcmludChhcHAuZ2V0UXVpdE1lc3NhZ2UoKSkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj"+
"IyMjIyMjIyMjIyMjIwojIE1vZGFsQXBwICsgTW9kZToKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI"+
"yMjIyMjIyMjIyMjCgpjbGFzcyBDVFJDRW52KEFwcCk6CiAgICBkZWYgdXBkYXRlVGl0bGUoYXBwKT"+
"oKICAgICAgICBhcHAuX3Jvb3QudGl0bGUoZidDVCArIFJDIEVudmlyb25tZW50JykKCiAgICBkZWY"+
"gZ2V0UXVpdE1lc3NhZ2UoYXBwKToKICAgICAgICByZXR1cm4gIkNsb3NpbmcgQ1QgKyBSQyBFbnZp"+
"cm9ubWVudCIKCiAgICBkZWYgc2VjdXJpdHlFcnJvcihhcHApOgogICAgICAgIHByaW50KCJEZXRlY"+
"3RlZCBTZWN1cml0eSBFcnJvciIpCiAgICAgICAgYXBwLnF1aXQoKQoKICAgIGRlZiBmb2N1c091dC"+
"hhcHAsIGV2ZW50KToKICAgICAgICBpZiBldmVudC53aWRnZXQgPT0gYXBwLl9yb290OgogICAgICA"+
"gICAgICBhcHAuc2VjdXJpdHlFcnJvcigpCgogICAgZGVmIHNpemVDaGFuZ2VkKGFwcCk6CiAgICAg"+
"ICAgYXBwLnNlY3VyaXR5RXJyb3IoKQoKY2xhc3MgTW9kYWxBcHAoQ1RSQ0Vudik6CiAgICBkZWYgX"+
"19pbml0X18oYXBwLCB1c2VybmFtZSwgcGFzc3dvcmQsIGFjdGl2ZU1vZGU9Tm9uZSwgKiprd2FyZ3"+
"MpOgogICAgICAgIGFwcC51c2VybmFtZSA9IHVzZXJuYW1lCiAgICAgICAgYXBwLnBhc3N3b3JkID0"+
"gcGFzc3dvcmQKICAgICAgICBhcHAuX3J1bm5pbmcgPSBGYWxzZQogICAgICAgIGFwcC5fYWN0aXZl"+
"TW9kZSA9IE5vbmUKICAgICAgICBhcHAuc2V0QWN0aXZlTW9kZShhY3RpdmVNb2RlKQogICAgICAgI"+
"HN1cGVyKCkuX19pbml0X18oKiprd2FyZ3MpCgogICAgZGVmIHNldEFjdGl2ZU1vZGUoYXBwLCBtb2"+
"RlKToKICAgICAgICBpZiAobW9kZSA9PSBOb25lKTogbW9kZSA9IE1vZGUoKSAjIGRlZmF1bHQgZW1"+
"wdHkgbW9kZQogICAgICAgIGlmIChub3QgaXNpbnN0YW5jZShtb2RlLCBNb2RlKSk6IHJhaXNlIEV4"+
"Y2VwdGlvbignYWN0aXZlTW9kZSBtdXN0IGJlIGEgbW9kZSEnKQogICAgICAgIGlmIChtb2RlLmFwc"+
"CBub3QgaW4gW05vbmUsIGFwcF0pOiByYWlzZSBFeGNlcHRpb24oJ01vZGVzIGNhbm5vdCBiZSBhZG"+
"RlZCB0byB0d28gZGlmZmVyZW50IGFwcHMhJykKICAgICAgICBpZiAoYXBwLl9hY3RpdmVNb2RlICE"+
"9IG1vZGUpOgogICAgICAgICAgICBtb2RlLmFwcCA9IGFwcAogICAgICAgICAgICBpZiAoYXBwLl9h"+
"Y3RpdmVNb2RlICE9IE5vbmUpOiBhcHAuX2FjdGl2ZU1vZGUubW9kZURlYWN0aXZhdGVkKCkKICAgI"+
"CAgICAgICAgYXBwLl9hY3RpdmVNb2RlID0gbW9kZQogICAgICAgICAgICBpZiAoYXBwLl9ydW5uaW"+
"5nKTogYXBwLnN0YXJ0QWN0aXZlTW9kZSgpCgogICAgZGVmIHN0YXJ0QWN0aXZlTW9kZShhcHApOgo"+
"gICAgICAgIGFwcC5fYWN0aXZlTW9kZS53aWR0aCwgYXBwLl9hY3RpdmVNb2RlLmhlaWdodCA9IGFw"+
"cC53aWR0aCwgYXBwLmhlaWdodAogICAgICAgIGlmIChub3QgYXBwLl9hY3RpdmVNb2RlLl9hcHBTd"+
"GFydGVkQ2FsbGVkKToKICAgICAgICAgICAgYXBwLl9hY3RpdmVNb2RlLmFwcFN0YXJ0ZWQoKSAjIG"+
"NhbGxlZCBvbmNlIHBlciBtb2RlCiAgICAgICAgICAgIGFwcC5fYWN0aXZlTW9kZS5fYXBwU3RhcnR"+
"lZENhbGxlZCA9IFRydWUKICAgICAgICBhcHAuX2FjdGl2ZU1vZGUubW9kZUFjdGl2YXRlZCgpICAj"+
"IGNhbGxlZCBlYWNoIHRpbWUgYSBtb2RlIGlzIGFjdGl2YXRlZAogICAgICAgIGFwcC5fcmVkcmF3Q"+
"WxsV3JhcHBlcigpCgogICAgZGVmIHJlZHJhd0FsbChhcHAsIGNhbnZhcyk6CiAgICAgICAgaWYgKG"+
"FwcC5fYWN0aXZlTW9kZSAhPSBOb25lKTogYXBwLl9hY3RpdmVNb2RlLnJlZHJhd0FsbChjYW52YXM"+
"pCiAgICBkZWYgYXBwU3RhcnRlZChhcHApOgogICAgICAgIGlmIChhcHAuX2FjdGl2ZU1vZGUgIT0g"+
"Tm9uZSk6IGFwcC5zdGFydEFjdGl2ZU1vZGUoKQogICAgZGVmIGFwcFN0b3BwZWQoYXBwKToKICAgI"+
"CAgICBpZiAoYXBwLl9hY3RpdmVNb2RlICE9IE5vbmUpOiBhcHAuX2FjdGl2ZU1vZGUubW9kZURlYW"+
"N0aXZhdGVkKCkKICAgIGRlZiBrZXlQcmVzc2VkKGFwcCwgZXZlbnQpOgogICAgICAgIGlmIChhcHA"+
"uX2FjdGl2ZU1vZGUgIT0gTm9uZSk6IGFwcC5fYWN0aXZlTW9kZS5rZXlQcmVzc2VkKGV2ZW50KQog"+
"ICAgZGVmIGtleVJlbGVhc2VkKGFwcCwgZXZlbnQpOgogICAgICAgIGlmIChhcHAuX2FjdGl2ZU1vZ"+
"GUgIT0gTm9uZSk6IGFwcC5fYWN0aXZlTW9kZS5rZXlSZWxlYXNlZChldmVudCkKICAgIGRlZiBtb3"+
"VzZVByZXNzZWQoYXBwLCBldmVudCk6CiAgICAgICAgaWYgKGFwcC5fYWN0aXZlTW9kZSAhPSBOb25"+
"lKTogYXBwLl9hY3RpdmVNb2RlLm1vdXNlUHJlc3NlZChldmVudCkKICAgIGRlZiBtb3VzZVJlbGVh"+
"c2VkKGFwcCwgZXZlbnQpOgogICAgICAgIGlmIChhcHAuX2FjdGl2ZU1vZGUgIT0gTm9uZSk6IGFwc"+
"C5fYWN0aXZlTW9kZS5tb3VzZVJlbGVhc2VkKGV2ZW50KQogICAgZGVmIG1vdXNlTW92ZWQoYXBwLC"+
"BldmVudCk6CiAgICAgICAgaWYgKGFwcC5fYWN0aXZlTW9kZSAhPSBOb25lKTogYXBwLl9hY3RpdmV"+
"Nb2RlLm1vdXNlTW92ZWQoZXZlbnQpCiAgICBkZWYgbW91c2VEcmFnZ2VkKGFwcCwgZXZlbnQpOgog"+
"ICAgICAgIGlmIChhcHAuX2FjdGl2ZU1vZGUgIT0gTm9uZSk6IGFwcC5fYWN0aXZlTW9kZS5tb3VzZ"+
"URyYWdnZWQoZXZlbnQpCiAgICBkZWYgdGltZXJGaXJlZChhcHApOgogICAgICAgIGlmIChhcHAuX2"+
"FjdGl2ZU1vZGUgIT0gTm9uZSk6IGFwcC5fYWN0aXZlTW9kZS50aW1lckZpcmVkKCkKICAgIGRlZiB"+
"zaXplQ2hhbmdlZChhcHApOgogICAgICAgIGlmIChhcHAuX2FjdGl2ZU1vZGUgIT0gTm9uZSk6CiAg"+
"ICAgICAgICAgIGFwcC5fYWN0aXZlTW9kZS53aWR0aCwgYXBwLl9hY3RpdmVNb2RlLmhlaWdodCA9I"+
"GFwcC53aWR0aCwgYXBwLmhlaWdodAogICAgICAgICAgICBhcHAuX2FjdGl2ZU1vZGUuc2l6ZUNoYW"+
"5nZWQoKQoKY2xhc3MgTW9kZShDVFJDRW52KToKICAgIGRlZiBfX2luaXRfXyhtb2RlLCAqKmt3YXJ"+
"ncyk6CiAgICAgICAgbW9kZS5hcHAgPSBOb25lCiAgICAgICAgbW9kZS5fYXBwU3RhcnRlZENhbGxl"+
"ZCA9IEZhbHNlCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhhdXRvcnVuPUZhbHNlLCAqKmt3YXJnc"+
"ykKICAgIGRlZiBtb2RlQWN0aXZhdGVkKG1vZGUpOiBwYXNzCiAgICBkZWYgbW9kZURlYWN0aXZhdG"+
"VkKG1vZGUpOiBwYXNzCiAgICBkZWYgbG9hZEltYWdlKG1vZGUsIHBhdGg9Tm9uZSk6IHJldHVybiB"+
"tb2RlLmFwcC5sb2FkSW1hZ2UocGF0aCkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj"+
"IyMjIwojIE1haW4gQXBwCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKY2xhc"+
"3MgQXNzZXNzbWVudEFQSShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcD1Ob25lKT"+
"oKICAgICAgICBzZWxmLmJhc2VfdXJsID0gJ2h0dHBzOi8vMTUtMTEyLmNvbScKICAgICAgICBzZWx"+
"mLmFwcCA9IGFwcAoKICAgIGRlZiBsb2dpbihzZWxmLCB1c2VybmFtZSwgcGFzc3dvcmQpOgogICAg"+
"ICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdChmJ3tzZWxmLmJhc2VfdXJsfS9hcGkvYXV0aC8nL"+
"CBkYXRhPXsKICAgICAgICAgICAgJ3VzZXJuYW1lJzogdXNlcm5hbWUsICdwYXNzd29yZCc6IHBhc3"+
"N3b3JkCiAgICAgICAgfSkKICAgICAgICByZXNwb25zZS5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICA"+
"gICBzZWxmLmhlYWRlcnMgPSB7CiAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogZiJUb2tlbiB7"+
"cmVzcG9uc2UuanNvbigpWyd0b2tlbiddfSIKICAgICAgICB9CgogICAgZGVmIHJlcXVlc3RfcHJvY"+
"mxlbShzZWxmLCBwcm9ibGVtX3R5cGUpOgogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdC"+
"hmJ3tzZWxmLmJhc2VfdXJsfS9hcGkvcmVxdWVzdC1wcm9ibGVtLycsCiAgICAgICAgICAgIGRhdGE"+
"9ewogICAgICAgICAgICAgICAgJ3VuaXQnOiBzZWxmLmFwcC51bml0LCAncHJvYmxlbV90eXBlJzog"+
"cHJvYmxlbV90eXBlLAogICAgICAgICAgICAgICAgJ3NhbHQnOiAnMTIzNDUnCiAgICAgICAgICAgI"+
"H0sCiAgICAgICAgICAgIGhlYWRlcnMgPSBzZWxmLmhlYWRlcnMKICAgICAgICApCiAgICAgICAgcm"+
"VzcG9uc2UucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKVs"+
"nY29kZSddCgogICAgZGVmIG1ha2Vfc3VibWlzc2lvbihzZWxmLCBhbnN3ZXIpOgogICAgICAgIHJl"+
"c3BvbnNlID0gcmVxdWVzdHMucG9zdChmJ3tzZWxmLmJhc2VfdXJsfS9hcGkvbWFrZS1zdWJtaXNza"+
"W9uLycsCiAgICAgICAgICAgIGRhdGE9ewogICAgICAgICAgICAgICAgJ3VuaXQnOiBzZWxmLmFwcC"+
"51bml0LCAnYW5zd2VyJzogYW5zd2VyLAogICAgICAgICAgICAgICAgJ3NhbHQnOiAnMTIzNDUnCiA"+
"gICAgICAgICAgIH0sCiAgICAgICAgICAgIGhlYWRlcnMgPSBzZWxmLmhlYWRlcnMKICAgICAgICAp"+
"CiAgICAgICAgcmVzcG9uc2UucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgcmV0dXJuIHJlc3Bvb"+
"nNlLmpzb24oKQoKICAgIGRlZiBnZXRfdW5pdF9pbmZvKHNlbGYpOgogICAgICAgIHJlc3BvbnNlID"+
"0gcmVxdWVzdHMuZ2V0KGYne3NlbGYuYmFzZV91cmx9L2FwaS9nZXQtdW5pdC1pbmZvLycsCiAgICA"+
"gICAgICAgIHBhcmFtcz17CiAgICAgICAgICAgICAgICAndW5pdCc6IHNlbGYuYXBwLnVuaXQsICdz"+
"YWx0JzogJzEyMzQ1JwogICAgICAgICAgICB9LAogICAgICAgICAgICBoZWFkZXJzID0gc2VsZi5oZ"+
"WFkZXJzCiAgICAgICAgKQogICAgICAgIHJlc3BvbnNlLnJhaXNlX2Zvcl9zdGF0dXMoKQogICAgIC"+
"AgIHJldHVybiByZXNwb25zZS5qc29uKCkKCmNsYXNzIEJ1dHRvbihvYmplY3QpOgogICAgZGVmIF9"+
"faW5pdF9fKHNlbGYsIHRleHQsIGFwcCwgY2FsbGJhY2spOgogICAgICAgIHNlbGYubGVmdCwgc2Vs"+
"Zi5yaWdodCwgc2VsZi50b3AsIHNlbGYuYm90dG9tID0gMCwwLDAsMAogICAgICAgIHNlbGYudGV4d"+
"CA9IHRleHQKICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKICAgICAgICBzZWxmLmFwcC"+
"A9IGFwcAoKICAgIGRlZiBzZXRfY29vcmRzKHNlbGYsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk"+
"6CiAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdAogICAgICAgIHNlbGYucmlnaHQgPSByaWdodAogICAg"+
"ICAgIHNlbGYudG9wID0gdG9wCiAgICAgICAgc2VsZi5ib3R0b20gPSBib3R0b20KCiAgICBkZWYgY"+
"2hlY2tDbGljayhzZWxmLCB4LCB5KToKICAgICAgICBpZiB4ID49IHNlbGYubGVmdCBhbmQgeCA8PS"+
"BzZWxmLnJpZ2h0IGFuZCB5IDw9IHNlbGYuYm90dG9tIGFuZCB5ID49IHNlbGYudG9wOgogICAgICA"+
"gICAgICBzZWxmLmNhbGxiYWNrKCkKCiAgICBkZWYgZHJhdyhzZWxmLCBjYW52YXMpOgogICAgICAg"+
"IGNhbnZhcy5jcmVhdGVfcmVjdGFuZ2xlKHNlbGYubGVmdCwgc2VsZi50b3AsIHNlbGYucmlnaHQsI"+
"HNlbGYuYm90dG9tLCBmaWxsPScjZmZlZWNmJywgd2lkdGggPSAwKQogICAgICAgIGNhbnZhcy5jcm"+
"VhdGVfdGV4dChzZWxmLmxlZnQgKyAoc2VsZi5yaWdodCAtIHNlbGYubGVmdCkgLy8gMiwgc2VsZi5"+
"0b3AgKyAoc2VsZi5ib3R0b20gLSBzZWxmLnRvcCkgLy8gMiwgYW5jaG9yPSdjZW50ZXInLCB0ZXgg"+
"PSBzZWxmLnRleHQsIGZvbnQgPSBmJ0FyaWFsIHtzZWxmLmFwcC5oZWlnaHQgLy8gMzV9JykKCmNsY"+
"XNzIENUUkNNb2RlKE1vZGUpOgogICAgZGVmIGRyYXdCb3gobW9kZSwgY2FudmFzLCBsZWZ0LCB0b3"+
"AsIHJpZ2h0LCBib3R0b20sIHRleHQsIHRvcEJhckhlaWdodCwgdGV4dE1hcmdpbix3aWR0aD0zKTo"+
"KICAgICAgICBjYW52YXMuY3JlYXRlX3JlY3RhbmdsZShsZWZ0LCB0b3AsIHJpZ2h0LCB0b3BCYXJI"+
"ZWlnaHQgKyB0b3AsIGZpbGw9IiNGRkJENzciLCB3aWR0aD0wKQogICAgICAgIGNhbnZhcy5jcmVhd"+
"GVfcmVjdGFuZ2xlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgd2lkdGg9d2lkdGgpCiAgICAgIC"+
"AgY2FudmFzLmNyZWF0ZV90ZXh0KAogICAgICAgICAgICBsZWZ0ICsgdGV4dE1hcmdpbiwgKHRvcCA"+
"rICh0b3BCYXJIZWlnaHQgLy8gMikpLCBhbmNob3I9InciLAogICAgICAgICAgICB0ZXh0ID0gdGV4"+
"dCwgZm9udD1mIkFyaWFsIHttb2RlLmFwcC5oZWlnaHQgLy8gNDB9IgogICAgICAgICkKCiAgICBkZ"+
"WYgZHJhd0FjdGlvbnMobW9kZSwgY2FudmFzLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGJ1dH"+
"RvbnMsd2lkdGg9Myk6CiAgICAgICAgdG9wQmFySGVpZ2h0ID0gKChib3R0b20gLSB0b3ApIC8vIDE"+
"wKQogICAgICAgIHRleHRNYXJnaW4gPSAocmlnaHQgLSBsZWZ0KSAqIDAuMDMKICAgICAgICBtb2Rl"+
"LmRyYXdCb3goY2FudmFzLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sICJBY3Rpb25zIiwgdG9wQ"+
"mFySGVpZ2h0LCB0ZXh0TWFyZ2luLHdpZHRoKQogICAgICAgIHRleHRZTWFyZ2luID0gKGJvdHRvbS"+
"AtIHRvcCkgKiAwLjA4CiAgICAgICAgYnV0dG9uTWFyZ2luID0gKHJpZ2h0IC0gbGVmdCkgKiAwLjA"+
"3CiAgICAgICAgYnV0dG9uVG9wID0gdGV4dFlNYXJnaW4gKyB0b3BCYXJIZWlnaHQgKyB0b3AKICAg"+
"ICAgICByZW1haW5pbmdTcGFjZSA9IChib3R0b20gLSBidXR0b25Ub3ApIC0gKGxlbihidXR0b25zK"+
"SAqIHRleHRZTWFyZ2luKQogICAgICAgIGJ1dHRvbkhlaWdodCA9IHJlbWFpbmluZ1NwYWNlIC8vIG"+
"xlbihidXR0b25zKQogICAgICAgIGZvciBpLCBidXR0b24gaW4gZW51bWVyYXRlKGJ1dHRvbnMpOgo"+
"gICAgICAgICAgICBidXR0b24uc2V0X2Nvb3JkcygKICAgICAgICAgICAgICAgIGxlZnQgKyBidXR0"+
"b25NYXJnaW4sCiAgICAgICAgICAgICAgICBidXR0b25Ub3AgKyAodGV4dFlNYXJnaW4gKyBidXR0b"+
"25IZWlnaHQpKmksCiAgICAgICAgICAgICAgICByaWdodCAtIGJ1dHRvbk1hcmdpbiwKICAgICAgIC"+
"AgICAgICAgIGJ1dHRvblRvcCArICh0ZXh0WU1hcmdpbiArIGJ1dHRvbkhlaWdodCkqKGkrMSkgLSB"+
"0ZXh0WU1hcmdpbgogICAgICAgICAgICApCiAgICAgICAgICAgIGJ1dHRvbi5kcmF3KGNhbnZhcykK"+
"CiAgICBkZWYgYWRkUG9wdXAobW9kZSwgdGV4dCk6CiAgICAgICAgbW9kZS5wb3B1cCA9IFt0ZXh0L"+
"CAzMDAwXQoKICAgIGRlZiBkcmF3UG9wdXAobW9kZSwgY2FudmFzKToKICAgICAgICBpZiBtb2RlLn"+
"BvcHVwIGlzIE5vbmU6IHJldHVybgogICAgICAgIG1hcmdpblggPSBtb2RlLndpZHRoIC8vIDYKICA"+
"gICAgICBtYXJnaW5ZID0gbW9kZS5oZWlnaHQgLy8gNgogICAgICAgIGxlZnQsIHJpZ2h0ID0gbWFy"+
"Z2luWCwgbW9kZS53aWR0aCAtIG1hcmdpblgKICAgICAgICB0b3AsIGJvdHRvbSA9IG1hcmdpblksI"+
"G1vZGUuaGVpZ2h0IC0gbWFyZ2luWQogICAgICAgIGNlbnRlclggPSBsZWZ0ICsgKHJpZ2h0IC0gbG"+
"VmdCkgLy8gMgogICAgICAgIGNlbnRlclkgPSB0b3AgKyAoYm90dG9tIC0gdG9wKSAvLyAyCiAgICA"+
"gICAgY2FudmFzLmNyZWF0ZV9yZWN0YW5nbGUobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBmaWxs"+
"PScjZmZlZWNmJyx3aWR0aD00KQogICAgICAgIGNhbnZhcy5jcmVhdGVfdGV4dChjZW50ZXJYLCBjZ"+
"W50ZXJZLCB0ZXh0PW1vZGUucG9wdXBbMF0sIGZvbnQ9ZiJBcmlhbCB7bW9kZS5hcHAuaGVpZ2h0IC"+
"8vIDIyfSIpCgogICAgZGVmIG1vdXNlUHJlc3NlZChtb2RlLCBldmVudCk6CiAgICAgICAgZm9yIGJ"+
"1dHRvbiBpbiBtb2RlLmJ1dHRvbnM6CiAgICAgICAgICAgIGJ1dHRvbi5jaGVja0NsaWNrKGV2ZW50"+
"LngsIGV2ZW50LnkpCgogICAgZGVmIHRpbWVyRmlyZWQobW9kZSk6CiAgICAgICAgaWYgbW9kZS5wb"+
"3B1cCBpcyBub3QgTm9uZToKICAgICAgICAgICAgbW9kZS5wb3B1cFsxXSAtPSBtb2RlLmFwcC50aW"+
"1lckRlbGF5CiAgICAgICAgICAgIGlmIG1vZGUucG9wdXBbMV0gPD0gMDoKICAgICAgICAgICAgICA"+
"gIG1vZGUucG9wdXAgPSBOb25lCgpjbGFzcyBDb21wbGV0aW9uU2NyZWVuKENUUkNNb2RlKToKICAg"+
"IGRlZiBhZGRQb3B1cChtb2RlLCB0ZXh0KToKICAgICAgICBtb2RlLmhpZGVUZXh0KCkKICAgICAgI"+
"CBtb2RlLnBvcHVwID0gW3RleHQsIDMwMDBdCgogICAgZGVmIGRyYXdUb3BCYXIobW9kZSwgY2Fudm"+
"FzLCBtYXJnaW4sIHRvcEJhckhlaWdodCk6CiAgICAgICAgdGltZVNpbmNlU3RhcnQgPSByb3VuZCh"+
"0aW1lLnRpbWUoKSAtIG1vZGUudGltZUZpbmlzaGVkKQogICAgICAgIG1pbnV0ZXMgPSB0aW1lU2lu"+
"Y2VTdGFydCAvLyA2MAogICAgICAgIHNlY29uZHMgPSBzdHIocm91bmQodGltZVNpbmNlU3RhcnQgJ"+
"SA2MCkpLnpmaWxsKDIpCgogICAgICAgIGNhbnZhcy5jcmVhdGVfcmVjdGFuZ2xlKDAsMCxtb2RlLn"+
"dpZHRoLHRvcEJhckhlaWdodCxmaWxsPScjRkZBMjBDJyx3aWR0aD0wKQogICAgICAgIGR0ID0gZGF"+
"0ZXRpbWUuZGF0ZXRpbWUubm93KHR6PUVTVDVFRFQoKSkKICAgICAgICBjYW52YXMuY3JlYXRlX3Rl"+
"eHQoCiAgICAgICAgICAgIG1hcmdpbiwgdG9wQmFySGVpZ2h0Ly8yLCB0ZXh0PWYie21vZGUuYXBwL"+
"nVzZXJuYW1lfSB7bWludXRlc306e3NlY29uZHN9IHtkdC5zdHJmdGltZSgnJW0tJWQgJUk6JU0gJX"+
"AnKX0gcmVzdWx0cyIsCiAgICAgICAgICAgIGFuY2hvcj0idyIsIGZvbnQ9ZiJBcmlhbCB7bW9kZS5"+
"hcHAuaGVpZ2h0IC8vIDIyfSIKICAgICAgICApCgogICAgZGVmIGFwcFN0YXJ0ZWQobW9kZSk6CiAg"+
"ICAgICAgbW9kZS5wb3B1cCA9IE5vbmUKICAgICAgICBtb2RlLmhvbWVCdXR0b24gPSBCdXR0b24oJ"+
"0hvbWUnLCBtb2RlLmFwcCwgbGFtYmRhOiBtb2RlLmFwcC5zZXRBY3RpdmVNb2RlKG1vZGUuYXBwLm"+
"hvbWVTY3JlZW4pKQogICAgICAgIG1vZGUuYnV0dG9ucyA9IFttb2RlLmhvbWVCdXR0b25dCgogICA"+
"gZGVmIHJlZHJhd0FsbChtb2RlLCBjYW52YXMpOgogICAgICAgIG1hcmdpbiA9IDAuMDIgKiBtb2Rl"+
"LndpZHRoCiAgICAgICAgdG9wQmFySGVpZ2h0ID0gbW9kZS5oZWlnaHQgLy8gOAogICAgICAgIG1vZ"+
"GUuZHJhd1RvcEJhcihjYW52YXMsIG1hcmdpbiwgdG9wQmFySGVpZ2h0KQoKICAgICAgICAjIFByb2"+
"JsZW0gVGV4dAogICAgICAgIGlmIGhhc2F0dHIobW9kZSwgJ291dHB1dFRleHRCb3VuZGluZycpOgo"+
"gICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0ID0gbW9kZS5vdXRwdXRUZXh0Qm91bmRpbmdb"+
"J3gnXSwgbW9kZS5vdXRwdXRUZXh0Qm91bmRpbmdbJ3knXSwgbW9kZS5vdXRwdXRUZXh0Qm91bmRpb"+
"mdbJ3dpZHRoJ10sIG1vZGUub3V0cHV0VGV4dEJvdW5kaW5nWydoZWlnaHQnXQogICAgICAgICAgIC"+
"BjYW52YXMuY3JlYXRlX3JlY3RhbmdsZSh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHdpZHR"+
"oPTIpCgogICAgICAgICAgICBtb2RlLmRyYXdBY3Rpb25zKGNhbnZhcyx4K3dpZHRoK21hcmdpbiwg"+
"eSwgbW9kZS53aWR0aC1tYXJnaW4seStoZWlnaHQsW21vZGUuaG9tZUJ1dHRvbl0sd2lkdGg9MSkKC"+
"iAgICAgICAgbW9kZS5kcmF3UG9wdXAoY2FudmFzKQoKICAgIGRlZiBkcmF3Qm94ZXMobW9kZSwgY2"+
"FudmFzLCBtYXJnaW4sIHRvcEJhckhlaWdodCk6CiAgICAgICAgdG9wT2ZCb3ggPSAxLjUgKiB0b3B"+
"CYXJIZWlnaHQKICAgICAgICBib3R0b21PZkJveCA9IG1vZGUuaGVpZ2h0IC0gKHRvcEJhckhlaWdo"+
"dCAvLyAyKQogICAgICAgIHdpZHRoT2ZCb3ggPSAobW9kZS53aWR0aCAtICgzICogbWFyZ2luKSkgL"+
"y8gNAoKICAgIGRlZiBmb3JtYXRPdXRwdXQobW9kZSwgcmVzdWx0cywgdHlwZSk6ICMgY2hhbmdlcy"+
"BtYWRlIDUvMjAgKE1pbmEpCiAgICAgICAgb3V0ID0gW10KICAgICAgICBkZWYgcHJpbnRfc3RhcnM"+
"oKToKICAgICAgICAgICAgb3V0LmFwcGVuZCgnKicqODApCgogICAgICAgIGRlZiBwcmludF9kYXNo"+
"ZXMoKToKICAgICAgICAgICAgb3V0LmFwcGVuZCgnKicgKyAnLScqNzggKyAnKicpCgogICAgICAgI"+
"HByaW50X3N0YXJzKCkKICAgICAgICBvdXQuYXBwZW5kKGYnKiAge3R5cGUudXBwZXIoKX0gUkVTVU"+
"xUUycubGp1c3QoNzkpICsgJyonKQogICAgICAgIHByaW50X2Rhc2hlcygpCiAgICAgICAgb3V0LmF"+
"wcGVuZCgiKiAgUHJvYmxlbSBTdGF0ZW1lbnQ6Ii5sanVzdCg3OSkgKyAnKicpCiAgICAgICAgb3V0"+
"LmFwcGVuZCgiKiIgKyAiICIqNzggKyAiKiIpCiAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0c1snZ"+
"XZhbHVhdGlvbl9pbmZvJ11bJ2NvZGUnXS5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgIG91dC5hcH"+
"BlbmQoZiIqICB7bGluZX0iLmxqdXN0KDc5KSArICcqJykKICAgICAgICBvdXQuYXBwZW5kKCIqIiA"+
"rICIgIio3OCArICIqIikKICAgICAgICBwcmludF9kYXNoZXMoKQogICAgICAgIGlmIHR5cGUgPT0g"+
"J2N0JzoKICAgICAgICAgICAgb3V0LmFwcGVuZCgiKiAgQ29ycmVjdCBBbnN3ZXI6Ii5sanVzdCgzO"+
"SkgKyAifCAgWW91ciBBbnN3ZXI6ICIubGp1c3QoNDApICsgJyonKQogICAgICAgICAgICBvdXQuYX"+
"BwZW5kKCIqIiArICIgIiozOCArICJ8IiArICIgIiozOSArICIqIikKICAgICAgICAgICAgeW91cl9"+
"hbnN3ZXIgPSByZXN1bHRzWydldmFsdWF0aW9uX2luZm8nXVsneW91cl9hbnN3ZXInXS5zcGxpdGxp"+
"bmVzKCkKICAgICAgICAgICAgY29ycmVjdF9hbnN3ZXIgPSByZXN1bHRzWydldmFsdWF0aW9uX2luZ"+
"m8nXVsnY29ycmVjdF9hbnN3ZXInXS5zcGxpdGxpbmVzKCkKICAgICAgICAgICAgZm9yIGkgaW4gcm"+
"FuZ2UobWF4KGxlbih5b3VyX2Fuc3dlciksIGxlbihjb3JyZWN0X2Fuc3dlcikpKToKICAgICAgICA"+
"gICAgICAgIHlvdXJfbGluZSA9ICIiIGlmIGkgPj0gbGVuKHlvdXJfYW5zd2VyKSBlbHNlIHlvdXJf"+
"YW5zd2VyW2ldCiAgICAgICAgICAgICAgICBjb3JyZWN0X2xpbmUgPSAiIiBpZiBpID49IGxlbihjb"+
"3JyZWN0X2Fuc3dlcikgZWxzZSBjb3JyZWN0X2Fuc3dlcltpXQogICAgICAgICAgICAgICAgb3V0Lm"+
"FwcGVuZChmIiogIHtjb3JyZWN0X2xpbmV9Ii5sanVzdCgzOSkgKyBmInwgIHt5b3VyX2xpbmV9Ii5"+
"sanVzdCg0MCkgKyAnKicpCiAgICAgICAgICAgIG91dC5hcHBlbmQoIioiICsgIiAiKjM4ICsgInwi"+
"ICsgIiAiKjM5ICsgIioiKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG91dC5hcHBlbmQoIiogI"+
"FlvdXIgQW5zd2VyOiIubGp1c3QoNzkpICsgJyonKQogICAgICAgICAgICBvdXQuYXBwZW5kKCIqIi"+
"ArICIgIio3OCArICIqIikKICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0c1snZXZhbHVhdGl"+
"vbl9pbmZvJ11bJ3lvdXJfYW5zd2VyJ10uc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgb3V0"+
"LmFwcGVuZChmIiogIHtsaW5lfSIubGp1c3QoNzkpICsgJyonKQogICAgICAgICAgICBvdXQuYXBwZ"+
"W5kKCIqIiArICIgIio3OCArICIqIikKICAgICAgICBwcmludF9kYXNoZXMoKQogICAgICAgICMgUm"+
"VzdWx0IGFuZCBUaW1lCiAgICAgICAgdGltZSA9IHJlc3VsdHNbJ3RpbWUnXQogICAgICAgIG1pbnV"+
"0ZXMgPSBpbnQodGltZSAvLyA2MCkKICAgICAgICBzZWNvbmRzID0gcm91bmQodGltZSAlIDYwKQog"+
"ICAgICAgIG91dC5hcHBlbmQoZiIqICBZb3UgYW5zd2VyZWQgeydpbicgaWYgbm90IHJlc3VsdHNbJ"+
"2NvcnJlY3QnXSBlbHNlICcnfWNvcnJlY3RseSBmb3IgYSBzY29yZSBvZiB7cmVzdWx0c1snc2Nvcm"+
"UnXX0lIi5sanVzdCg3OSkgKyAnKicpCiAgICAgICAgb3V0LmFwcGVuZChmIiogIFRpbWU6IHttaW5"+
"1dGVzfSBtaW4ge3NlY29uZHN9IHNlYyIubGp1c3QoNzkpICsgJyonKQogICAgICAgIG91dC5hcHBl"+
"bmQoIioiICsgIiAiKjc4ICsgIioiKSAjIGFkZGVkCiAgICAgICAgcHJpbnRfZGFzaGVzKCkKICAgI"+
"CAgICByZXR1cm4gJ1xuJy5qb2luKG91dCkKCiAgICBkZWYgZGlzcGxheVRleHQobW9kZSk6CiAgIC"+
"AgICAgbWFyZ2luID0gMC4wMiAqIG1vZGUud2lkdGgKICAgICAgICB0b3BCYXJIZWlnaHQgPSBtb2R"+
"lLmhlaWdodCAvLyA4CgogICAgICAgIHRleHRXaWR0aCA9ICgobW9kZS53aWR0aCAtIDMgKiBtYXJn"+
"aW4pIC8vIDQpICogMwogICAgICAgIHRleHRIZWlnaHQgPSAobW9kZS5oZWlnaHQgLSAyICogbWFyZ"+
"2luIC0gdG9wQmFySGVpZ2h0KQogICAgICAgIG1vZGUub3V0cHV0VGV4dEJvdW5kaW5nID0geyd4Jz"+
"ptYXJnaW4sICd5JzogdG9wQmFySGVpZ2h0ICsgbWFyZ2luLCAnd2lkdGgnOiB0ZXh0V2lkdGgsICd"+
"oZWlnaHQnOiB0ZXh0SGVpZ2h0fQogICAgICAgIG1vZGUub3V0cHV0VGV4dCA9IFRleHQoYmQ9MCkK"+
"ICAgICAgICBtb2RlLm91dHB1dFRleHQuaW5zZXJ0KElOU0VSVCwgbW9kZS5mb3JtYXRPdXRwdXQob"+
"W9kZS5vdXRwdXQsIG1vZGUucHJvYmxlbVR5cGUpKQogICAgICAgIG1vZGUub3V0cHV0VGV4dC5jb2"+
"5maWcoc3RhdGU9RElTQUJMRUQpCiAgICAgICAgbW9kZS5vdXRwdXRUZXh0LmNvbmZpZ3VyZShmb25"+
"0PSgiQ291cmllciBOZXciLCAxMykpCgogICAgICAgIG1vZGUub3V0cHV0VGV4dC5wbGFjZSgqKm1v"+
"ZGUub3V0cHV0VGV4dEJvdW5kaW5nKQoKICAgIGRlZiBoaWRlVGV4dChtb2RlKToKICAgICAgICBtb"+
"2RlLm91dHB1dFRleHQuZGVzdHJveSgpCgogICAgZGVmIG1vZGVBY3RpdmF0ZWQobW9kZSk6CiAgIC"+
"AgICAgbW9kZS5kaXNwbGF5VGV4dCgpCiAgICAgICAgbW9kZS50aW1lRmluaXNoZWQgPSB0aW1lLnR"+
"pbWUoKQoKICAgIGRlZiBtb2RlRGVhY3RpdmF0ZWQobW9kZSk6CiAgICAgICAgbW9kZS5oaWRlVGV4"+
"dCgpCgogICAgZGVmIHRpbWVyRmlyZWQobW9kZSk6CiAgICAgICAgaWYgbW9kZS5wb3B1cCBpcyBub"+
"3QgTm9uZToKICAgICAgICAgICAgbW9kZS5wb3B1cFsxXSAtPSBtb2RlLmFwcC50aW1lckRlbGF5Ci"+
"AgICAgICAgICAgIGlmIG1vZGUucG9wdXBbMV0gPD0gMDoKICAgICAgICAgICAgICAgIG1vZGUucG9"+
"wdXAgPSBOb25lCiAgICAgICAgICAgICAgICBtb2RlLmRpc3BsYXlUZXh0KCkKCmNsYXNzIEFzc2Vz"+
"c21lbnRTY3JlZW4oQ1RSQ01vZGUpOgogICAgZGVmIGFkZFBvcHVwKG1vZGUsIHRleHQpOgogICAgI"+
"CAgIG1vZGUuaGlkZVRleHQoKQogICAgICAgIG1vZGUucG9wdXAgPSBbdGV4dCwgMzAwMF0KCiAgIC"+
"BkZWYgZHJhd1RvcEJhcihtb2RlLCBjYW52YXMsIG1hcmdpbiwgdG9wQmFySGVpZ2h0KToKICAgICA"+
"gICBjYW52YXMuY3JlYXRlX3JlY3RhbmdsZSgwLDAsbW9kZS53aWR0aCx0b3BCYXJIZWlnaHQsZmls"+
"bD0nI0ZGQTIwQycsd2lkdGg9MCkKCiAgICAgICAgdGltZVNpbmNlU3RhcnQgPSByb3VuZCh0aW1lL"+
"nRpbWUoKSAtIG1vZGUuc3RhcnRUaW1lKQogICAgICAgIG1pbnV0ZXMgPSB0aW1lU2luY2VTdGFydC"+
"AvLyA2MAogICAgICAgIHNlY29uZHMgPSBzdHIocm91bmQodGltZVNpbmNlU3RhcnQgJSA2MCkpLnp"+
"maWxsKDIpCgogICAgICAgIGNhbnZhcy5jcmVhdGVfdGV4dCgKICAgICAgICAgICAgbWFyZ2luLCB0"+
"b3BCYXJIZWlnaHQvLzIsIHRleHQ9ZiJUYWtpbmcge21vZGUucHJvYmxlbVR5cGUudXBwZXIoKX0iL"+
"AogICAgICAgICAgICBhbmNob3I9InciLCBmb250PWYiQXJpYWwge21vZGUuYXBwLmhlaWdodCAvLy"+
"AyMn0iCiAgICAgICAgKQoKICAgICAgICBjYW52YXMuY3JlYXRlX3RleHQoCiAgICAgICAgICAgIG1"+
"vZGUud2lkdGggLSBtYXJnaW4sIHRvcEJhckhlaWdodC8vMiwgdGV4dD1mIlRpbWUgRWxhcHNlZDog"+
"e21pbnV0ZXN9OntzZWNvbmRzfSIsCiAgICAgICAgICAgIGFuY2hvcj0iZSIsIGZvbnQ9ZiJBcmlhb"+
"CB7bW9kZS5hcHAuaGVpZ2h0IC8vIDIyfSIKICAgICAgICApCgogICAgZGVmIHN1Ym1pdENvZGUobW"+
"9kZSk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBvdXRwdXQgPSBtb2RlLmFwcC5hcGkubWFrZV9"+
"zdWJtaXNzaW9uKG1vZGUuc29sdXRpb25UZXh0LmdldCgxLjAsRU5EKSkKICAgICAgICAgICAgbW9k"+
"ZS5hcHAuY29tcGxldGlvblNjcmVlbi5vdXRwdXQgPSBvdXRwdXQKICAgICAgICAgICAgbW9kZS5hc"+
"HAuY29tcGxldGlvblNjcmVlbi5wcm9ibGVtVHlwZSA9IG1vZGUucHJvYmxlbVR5cGUKICAgICAgIC"+
"AgICAgbW9kZS5hcHAuc2V0QWN0aXZlTW9kZShtb2RlLmFwcC5jb21wbGV0aW9uU2NyZWVuKQogICA"+
"gICAgIGV4Y2VwdDoKICAgICAgICAgICAgbW9kZS5hZGRQb3B1cCgnRmFpbGVkIHRvIHN1Ym1pdCBw"+
"cm9ibGVtLiBUcnkgYWdhaW4nKQoKICAgIGRlZiBhcHBTdGFydGVkKG1vZGUpOgogICAgICAgIG1vZ"+
"GUucG9wdXAgPSBOb25lCiAgICAgICAgbW9kZS5zdWJtaXRCdXR0b24gPSBCdXR0b24oJ1N1Ym1pdC"+
"csIG1vZGUuYXBwLCBsYW1iZGE6IG1vZGUuc3VibWl0Q29kZSgpKQogICAgICAgIG1vZGUubGVhdmV"+
"CdXR0b24gPSBCdXR0b24oJ1F1aXQnLCBtb2RlLmFwcCwgbGFtYmRhOiBtb2RlLmFwcC5zZXRBY3Rp"+
"dmVNb2RlKG1vZGUuYXBwLmhvbWVTY3JlZW4pKQogICAgICAgIG1vZGUuYnV0dG9ucyA9IFttb2RlL"+
"nN1Ym1pdEJ1dHRvbiwgbW9kZS5sZWF2ZUJ1dHRvbl0KCiAgICBkZWYgcmVkcmF3QWxsKG1vZGUsIG"+
"NhbnZhcyk6CiAgICAgICAgbWFyZ2luID0gMC4wMiAqIG1vZGUud2lkdGgKICAgICAgICB0b3BCYXJ"+
"IZWlnaHQgPSBtb2RlLmhlaWdodCAvLyA4CiAgICAgICAgbW9kZS5kcmF3VG9wQmFyKGNhbnZhcywg"+
"bWFyZ2luLCB0b3BCYXJIZWlnaHQpCgogICAgICAgICMgUHJvYmxlbSBUZXh0CiAgICAgICAgeCwge"+
"Swgd2lkdGgsIGhlaWdodCA9IG1vZGUucHJvYmxlbVRleHRCb3VuZGluZ1sneCddLCBtb2RlLnByb2"+
"JsZW1UZXh0Qm91bmRpbmdbJ3knXSwgbW9kZS5wcm9ibGVtVGV4dEJvdW5kaW5nWyd3aWR0aCddLCB"+
"tb2RlLnByb2JsZW1UZXh0Qm91bmRpbmdbJ2hlaWdodCddCiAgICAgICAgY2FudmFzLmNyZWF0ZV9y"+
"ZWN0YW5nbGUoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB3aWR0aD0yKQogICAgICAgICMgU"+
"29sdXRpb24gVGV4dAogICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQgPSBtb2RlLnNvbHV0aW9uVG"+
"V4dEJvdW5kaW5nWyd4J10sIG1vZGUuc29sdXRpb25UZXh0Qm91bmRpbmdbJ3knXSwgbW9kZS5zb2x"+
"1dGlvblRleHRCb3VuZGluZ1snd2lkdGgnXSwgbW9kZS5zb2x1dGlvblRleHRCb3VuZGluZ1snaGVp"+
"Z2h0J10KICAgICAgICBjYW52YXMuY3JlYXRlX3JlY3RhbmdsZSh4LCB5LCB4ICsgd2lkdGgsIHkgK"+
"yBoZWlnaHQsIHdpZHRoPTIpCgogICAgICAgICMgQnV0dG9ucwogICAgICAgIG1vZGUuZHJhd0FjdG"+
"lvbnMoY2FudmFzLHgrd2lkdGgrbWFyZ2luLG1vZGUucHJvYmxlbVRleHRCb3VuZGluZ1sneSddLG1"+
"vZGUud2lkdGgtbWFyZ2luLHkraGVpZ2h0LFttb2RlLnN1Ym1pdEJ1dHRvbiwgbW9kZS5sZWF2ZUJ1"+
"dHRvbl0sd2lkdGg9MSkKCiAgICAgICAgbW9kZS5kcmF3UG9wdXAoY2FudmFzKQoKICAgICMgZGVmI"+
"GRyYXdCb3hlcyhtb2RlLCBjYW52YXMsIG1hcmdpbiwgdG9wQmFySGVpZ2h0KToKICAgICMgICAgIH"+
"RvcE9mQm94ID0gMS41ICogdG9wQmFySGVpZ2h0CiAgICAjICAgICBib3R0b21PZkJveCA9IG1vZGU"+
"uaGVpZ2h0IC0gKHRvcEJhckhlaWdodCAvLyAyKQogICAgIyAgICAgd2lkdGhPZkJveCA9IChtb2Rl"+
"LndpZHRoIC0gKDMgKiBtYXJnaW4pKSAvLyA0CgogICAgZGVmIGRpc3BsYXlUZXh0KG1vZGUpOgogI"+
"CAgICAgIG1hcmdpbiA9IDAuMDIgKiBtb2RlLndpZHRoCiAgICAgICAgdG9wQmFySGVpZ2h0ID0gbW"+
"9kZS5oZWlnaHQgLy8gOAoKICAgICAgICBtb2RlLnByb2JsZW1UZXh0ID0gVGV4dChiZD0wKQogICA"+
"gICAgIG1vZGUucHJvYmxlbVRleHQuaW5zZXJ0KElOU0VSVCwgbW9kZS5jb2RlKQogICAgICAgIG1v"+
"ZGUucHJvYmxlbVRleHQuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogICAgICAgIG1vZGUucHJvYmxlb"+
"VRleHQuY29uZmlndXJlKGZvbnQ9KCJDb3VyaWVyIE5ldyIsIDE1KSkKICAgICAgICBtb2RlLnNvbH"+
"V0aW9uVGV4dCA9IFRleHQoYmQ9MCkKICAgICAgICBtb2RlLnNvbHV0aW9uVGV4dC5jb25maWd1cmU"+
"oZm9udD0oIkNvdXJpZXIgTmV3IiwgMTUpKQogICAgICAgIG1vZGUuc29sdXRpb25UZXh0Lmluc2Vy"+
"dChJTlNFUlQsIG1vZGUuc2F2ZWRUZXh0KQoKICAgICAgICB0ZXh0V2lkdGggPSAoKG1vZGUud2lkd"+
"GggLSAzICogbWFyZ2luKSAvLyA0KSAqIDMKICAgICAgICB0ZXh0SGVpZ2h0ID0gKG1vZGUuaGVpZ2"+
"h0IC0gMyAqIG1hcmdpbiAtIHRvcEJhckhlaWdodCkgLy8gNAoKICAgICAgICBtb2RlLnByb2JsZW1"+
"UZXh0Qm91bmRpbmcgPSB7J3gnOm1hcmdpbiwgJ3knOiB0b3BCYXJIZWlnaHQgKyBtYXJnaW4sICd3"+
"aWR0aCc6IHRleHRXaWR0aCwgJ2hlaWdodCc6IHRleHRIZWlnaHQqM30KICAgICAgICBtb2RlLnNvb"+
"HV0aW9uVGV4dEJvdW5kaW5nID0geyd4JzptYXJnaW4sICd5Jzp0b3BCYXJIZWlnaHQgKyB0ZXh0SG"+
"VpZ2h0KjMgKyBtYXJnaW4gKiAyLCAnd2lkdGgnOiB0ZXh0V2lkdGgsICdoZWlnaHQnOiB0ZXh0SGV"+
"pZ2h0fQogICAgICAgIG1vZGUucHJvYmxlbVRleHQucGxhY2UoKiptb2RlLnByb2JsZW1UZXh0Qm91"+
"bmRpbmcpCiAgICAgICAgbW9kZS5zb2x1dGlvblRleHQucGxhY2UoKiptb2RlLnNvbHV0aW9uVGV4d"+
"EJvdW5kaW5nKQoKICAgIGRlZiBoaWRlVGV4dChtb2RlKToKICAgICAgICB0cnk6CiAgICAgICAgIC"+
"AgIG1vZGUuc2F2ZWRUZXh0ID0gbW9kZS5zb2x1dGlvblRleHQuZ2V0KDEuMCxFTkQpCiAgICAgICA"+
"gZXhjZXB0OgogICAgICAgICAgICBtb2RlLnNhdmVkVGV4dCA9ICcnCiAgICAgICAgbW9kZS5wcm9i"+
"bGVtVGV4dC5kZXN0cm95KCkKICAgICAgICBtb2RlLnNvbHV0aW9uVGV4dC5kZXN0cm95KCkKCiAgI"+
"CBkZWYgbW9kZUFjdGl2YXRlZChtb2RlKToKICAgICAgICBtb2RlLnNhdmVkVGV4dCA9ICIiCiAgIC"+
"AgICAgbW9kZS5kaXNwbGF5VGV4dCgpCgogICAgZGVmIG1vZGVEZWFjdGl2YXRlZChtb2RlKToKICA"+
"gICAgICBtb2RlLmhpZGVUZXh0KCkKCiAgICBkZWYgdGltZXJGaXJlZChtb2RlKToKICAgICAgICBp"+
"ZiBtb2RlLnBvcHVwIGlzIG5vdCBOb25lOgogICAgICAgICAgICBtb2RlLnBvcHVwWzFdIC09IG1vZ"+
"GUuYXBwLnRpbWVyRGVsYXkKICAgICAgICAgICAgaWYgbW9kZS5wb3B1cFsxXSA8PSAwOgogICAgIC"+
"AgICAgICAgICAgbW9kZS5wb3B1cCA9IE5vbmUKICAgICAgICAgICAgICAgIG1vZGUuZGlzcGxheVR"+
"leHQoKQoKY2xhc3MgSG9tZVNjcmVlbihDVFJDTW9kZSk6CiAgICBkZWYgZHJhd1N0YXRzKG1vZGUs"+
"IGNhbnZhcywgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKToKICAgICAgICB0b3BCYXJIZWlnaHQgP"+
"SAoKGJvdHRvbSAtIHRvcCkgLy8gMTApCiAgICAgICAgdGV4dE1hcmdpbiA9IChyaWdodCAtIGxlZn"+
"QpICogMC4wMwogICAgICAgIG1vZGUuZHJhd0JveChjYW52YXMsIGxlZnQsIHRvcCwgcmlnaHQsIGJ"+
"vdHRvbSwgZiJ7bW9kZS5hcHAudXNlcm5hbWUudGl0bGUoKX0ncyBzdGF0cyIsIHRvcEJhckhlaWdo"+
"dCwgdGV4dE1hcmdpbikKICAgICAgICBtaWRkbGUgPSBsZWZ0ICsgKChyaWdodCAtIGxlZnQpIC8vI"+
"DIpCiAgICAgICAgdGV4dFlNYXJnaW4gPSAoYm90dG9tIC0gdG9wKSAqIDAuMDUKICAgICAgICB0ZX"+
"h0VG9wID0gdGV4dFlNYXJnaW4gKyB0b3BCYXJIZWlnaHQgKyB0b3AKICAgICAgICBjYW52YXMuY3J"+
"lYXRlX2xpbmUobWlkZGxlLCB0ZXh0VG9wLCBtaWRkbGUsIGJvdHRvbSAtIHRleHRZTWFyZ2luKQoK"+
"ICAgICAgICBpZiBtb2RlLnVzZXJfZGF0YSBpcyBOb25lOiByZXR1cm4KCiAgICAgICAgZm9yIHByb"+
"2JsZW1UeXBlLCB0ZXh0TGVmdCBpbiBbKCdjdCcsIGxlZnQgKyB0ZXh0TWFyZ2luKV06ICMoJ3JjJy"+
"wgbWlkZGxlICsgdGV4dE1hcmdpbildOgogICAgICAgICAgICB5U3RlcCA9IChib3R0b20tdG9wKSA"+
"vLyAyMAogICAgICAgICAgICBjYW52YXMuY3JlYXRlX3RleHQodGV4dExlZnQsIHRleHRUb3AsIGFu"+
"Y2hvcj0nbncnLCB0ZXh0PXByb2JsZW1UeXBlLnVwcGVyKCksIGZvbnQgPSBmJ0FyaWFsIHttb2RlL"+
"mFwcC5oZWlnaHQgLy8gMzB9JykKICAgICAgICAgICAgaW5mb1RleHRUb3AgPSB0ZXh0VG9wICsgKG"+
"1vZGUuYXBwLmhlaWdodCAvLyAyMCkKICAgICAgICAgICAgZm9yIHJvdywgZGF0YSBpbiBlbnVtZXJ"+
"hdGUoWygnU2NvcmUnLCAnc2NvcmUnKSwgKCdCZXN0IFRpbWUnLCAnYmVzdF90aW1lJyldKToKICAg"+
"ICAgICAgICAgICAgIGRhdGFOYW1lLCBkYXRhVHlwZSA9IGRhdGEKCiAgICAgICAgICAgICAgICBkY"+
"XRhVmFsdWUgPSBtb2RlLnVzZXJfZGF0YVtwcm9ibGVtVHlwZV1bZGF0YVR5cGVdCiAgICAgICAgIC"+
"AgICAgICBpZiBkYXRhVHlwZSA9PSAnYmVzdF90aW1lJzoKICAgICAgICAgICAgICAgICAgICBpZiB"+
"kYXRhVmFsdWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBp"+
"bnQoZGF0YVZhbHVlIC8vIDYwKQogICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gc3RyK"+
"HJvdW5kKGRhdGFWYWx1ZSAlIDYwKSkuemZpbGwoMikKICAgICAgICAgICAgICAgICAgICAgICAgZG"+
"F0YVZhbHVlID0gZiJ7bWludXRlc306e3NlY29uZHN9IgoKICAgICAgICAgICAgICAgIGNhbnZhcy5"+
"jcmVhdGVfdGV4dCh0ZXh0TGVmdCwgaW5mb1RleHRUb3AgKyAoeVN0ZXAgKiByb3cpLAogICAgICAg"+
"ICAgICAgICAgICAgIGFuY2hvciA9ICdudycsIHRleHQ9Zid7ZGF0YU5hbWV9OiB7ZGF0YVZhbHVlf"+
"ScsCiAgICAgICAgICAgICAgICAgICAgZm9udCA9IGYnQXJpYWwge21vZGUuYXBwLmhlaWdodCAvLy"+
"A0MH0nCiAgICAgICAgICAgICAgICApCgogICAgZGVmIGRyYXdUb3BCYXIobW9kZSwgY2FudmFzLCB"+
"tYXJnaW4sIHRvcEJhckhlaWdodCk6CiAgICAgICAgY2FudmFzLmNyZWF0ZV9yZWN0YW5nbGUoMCww"+
"LG1vZGUud2lkdGgsdG9wQmFySGVpZ2h0LGZpbGw9JyNGRkEyMEMnLHdpZHRoPTApCiAgICAgICAgY"+
"2FudmFzLmNyZWF0ZV90ZXh0KAogICAgICAgICAgICAjIG1hcmdpbiwgdG9wQmFySGVpZ2h0Ly8yLC"+
"B0ZXh0PWYiRGF5IHttb2RlLmFwcC51bml0fSBDVHMgYW5kIFJPQ3MiLAogICAgICAgICAgICBtYXJ"+
"naW4sIHRvcEJhckhlaWdodC8vMiwgdGV4dD1mIkRheSB7bW9kZS5hcHAudW5pdH0gQ1RzIiwKICAg"+
"ICAgICAgICAgYW5jaG9yPSJ3IiwgZm9udD1mIkFyaWFsIHttb2RlLmFwcC5oZWlnaHQgLy8gMjJ9I"+
"gogICAgICAgICkKCiAgICBkZWYgZHJhd0JveGVzKG1vZGUsIGNhbnZhcywgbWFyZ2luLCB0b3BCYX"+
"JIZWlnaHQpOgogICAgICAgIHRvcE9mQm94ID0gMS41ICogdG9wQmFySGVpZ2h0CiAgICAgICAgYm9"+
"0dG9tT2ZCb3ggPSBtb2RlLmhlaWdodCAtICh0b3BCYXJIZWlnaHQgLy8gMikKICAgICAgICB3aWR0"+
"aE9mQm94ID0gKG1vZGUud2lkdGggLSAoMyAqIG1hcmdpbikpIC8vIDQKCiAgICAgICAgbW9kZS5kc"+
"mF3U3RhdHMoY2FudmFzLG1hcmdpbix0b3BPZkJveCxtYXJnaW4rd2lkdGhPZkJveCozLGJvdHRvbU"+
"9mQm94KQogICAgICAgICNtb2RlLmRyYXdBY3Rpb25zKGNhbnZhcywyKm1hcmdpbiArIHdpZHRoT2Z"+
"Cb3gqMyx0b3BPZkJveCwyKm1hcmdpbis0KndpZHRoT2ZCb3gsYm90dG9tT2ZCb3gsW21vZGUudGFr"+
"ZV9jdF9idXR0b24sIG1vZGUudGFrZV9yY19idXR0b24sIG1vZGUucmVsb2FkX2J1dHRvbiwgbW9kZ"+
"S5xdWl0X2J1dHRvbl0pCiAgICAgICAgbW9kZS5kcmF3QWN0aW9ucyhjYW52YXMsMiptYXJnaW4gKy"+
"B3aWR0aE9mQm94KjMsdG9wT2ZCb3gsMiptYXJnaW4rNCp3aWR0aE9mQm94LGJvdHRvbU9mQm94LFt"+
"tb2RlLnRha2VfY3RfYnV0dG9uLCBtb2RlLnJlbG9hZF9idXR0b24sIG1vZGUucXVpdF9idXR0b25d"+
"KQoKICAgIGRlZiB1cGRhdGVfdXNlcl9kYXRhKG1vZGUsIHJlbG9hZD1GYWxzZSk6CiAgICAgICAgd"+
"HJ5OgogICAgICAgICAgICBtb2RlLnVzZXJfZGF0YSA9IG1vZGUuYXBwLmFwaS5nZXRfdW5pdF9pbm"+
"ZvKCkKICAgICAgICAgICAgaWYgcmVsb2FkOiBtb2RlLmFkZFBvcHVwKCdSZWxvYWRlZCBkYXRhJyk"+
"KICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIG1vZGUuYWRkUG9wdXAoJ0ZhaWxlZCB0byBsb2Fk"+
"IGRhdGEuIFRyeSByZWxvYWRpbmcnKQoKICAgIGRlZiBiZWdpbkFzc2Vzc21lbnQobW9kZSwgcHJvY"+
"mxlbVR5cGUpOgogICAgICAgIHRyeToKICAgICAgICAgICAgY29kZSA9IG1vZGUuYXBwLmFwaS5yZX"+
"F1ZXN0X3Byb2JsZW0ocHJvYmxlbVR5cGUpCiAgICAgICAgICAgIG1vZGUuYXBwLmFzc2Vzc21lbnR"+
"TY3JlZW4ucHJvYmxlbVR5cGUgPSBwcm9ibGVtVHlwZQogICAgICAgICAgICBtb2RlLmFwcC5hc3Nl"+
"c3NtZW50U2NyZWVuLmNvZGUgPSBjb2RlCiAgICAgICAgICAgIG1vZGUuYXBwLmFzc2Vzc21lbnRTY"+
"3JlZW4uc3RhcnRUaW1lID0gdGltZS50aW1lKCkKICAgICAgICAgICAgbW9kZS5hcHAuc2V0QWN0aX"+
"ZlTW9kZShtb2RlLmFwcC5hc3Nlc3NtZW50U2NyZWVuKQogICAgICAgIGV4Y2VwdDoKICAgICAgICA"+
"gICAgbW9kZS5hZGRQb3B1cCgnRmFpbGVkIHRvIHJlcXVlc3QgcHJvYmxlbS4gVHJ5IGFnYWluJykK"+
"CiAgICBkZWYgbW9kZUFjdGl2YXRlZChtb2RlKToKICAgICAgICBtb2RlLnBvcHVwID0gTm9uZQogI"+
"CAgICAgIG1vZGUudXNlcl9kYXRhID0gTm9uZQogICAgICAgIG1vZGUudXBkYXRlX3VzZXJfZGF0YS"+
"gpCiAgICAgICAgbW9kZS50YWtlX2N0X2J1dHRvbiA9IEJ1dHRvbignU3RhcnQgQ1QnLCBtb2RlLmF"+
"wcCwgbGFtYmRhOiBtb2RlLmJlZ2luQXNzZXNzbWVudCgnY3QnKSkKICAgICAgICAjIG1vZGUudGFr"+
"ZV9yY19idXR0b24gPSBCdXR0b24oJ1N0YXJ0IFJDJywgbW9kZS5hcHAsIGxhbWJkYTogbW9kZS5iZ"+
"WdpbkFzc2Vzc21lbnQoJ3JjJykpCiAgICAgICAgbW9kZS5yZWxvYWRfYnV0dG9uID0gQnV0dG9uKC"+
"dSZWZyZXNoIFNjb3JlcycsIG1vZGUuYXBwLCBsYW1iZGE6IG1vZGUudXBkYXRlX3VzZXJfZGF0YSh"+
"yZWxvYWQ9VHJ1ZSkpCiAgICAgICAgbW9kZS5xdWl0X2J1dHRvbiA9IEJ1dHRvbignRXhpdCcsIG1v"+
"ZGUuYXBwLCBsYW1iZGE6IG1vZGUuYXBwLnF1aXQoKSkKICAgICAgICAjIG1vZGUuYnV0dG9ucyA9I"+
"Fttb2RlLnRha2VfY3RfYnV0dG9uLCBtb2RlLnRha2VfcmNfYnV0dG9uLCBtb2RlLnJlbG9hZF9idX"+
"R0b24sIG1vZGUucXVpdF9idXR0b25dCiAgICAgICAgbW9kZS5idXR0b25zID0gW21vZGUudGFrZV9"+
"jdF9idXR0b24sIG1vZGUucmVsb2FkX2J1dHRvbiwgbW9kZS5xdWl0X2J1dHRvbl0KCiAgICBkZWYg"+
"cmVkcmF3QWxsKG1vZGUsIGNhbnZhcyk6CiAgICAgICAgbWFyZ2luID0gMC4wMiAqIG1vZGUud2lkd"+
"GgKICAgICAgICB0b3BCYXJIZWlnaHQgPSBtb2RlLmhlaWdodCAvLyA4CgogICAgICAgIGNhbnZhcy"+
"5jcmVhdGVfcmVjdGFuZ2xlKDAsMCxtb2RlLndpZHRoLG1vZGUuaGVpZ2h0LGZpbGw9J3doaXRlJyk"+
"KICAgICAgICBtb2RlLmRyYXdUb3BCYXIoY2FudmFzLCBtYXJnaW4sIHRvcEJhckhlaWdodCkKICAg"+
"ICAgICBtb2RlLmRyYXdCb3hlcyhjYW52YXMsIG1hcmdpbiwgdG9wQmFySGVpZ2h0KQoKICAgICAgI"+
"CBtb2RlLmRyYXdQb3B1cChjYW52YXMpCgogICAgZGVmIG1vdXNlUHJlc3NlZChtb2RlLCBldmVudC"+
"k6CiAgICAgICAgZm9yIGJ1dHRvbiBpbiBtb2RlLmJ1dHRvbnM6CiAgICAgICAgICAgIGJ1dHRvbi5"+
"jaGVja0NsaWNrKGV2ZW50LngsIGV2ZW50LnkpCgogICAgZGVmIHRpbWVyRmlyZWQobW9kZSk6CiAg"+
"ICAgICAgaWYgbW9kZS5wb3B1cCBpcyBub3QgTm9uZToKICAgICAgICAgICAgbW9kZS5wb3B1cFsxX"+
"SAtPSBtb2RlLmFwcC50aW1lckRlbGF5CiAgICAgICAgICAgIGlmIG1vZGUucG9wdXBbMV0gPD0gMD"+
"oKICAgICAgICAgICAgICAgIG1vZGUucG9wdXAgPSBOb25lCgpjbGFzcyBNYWluKE1vZGFsQXBwKTo"+
"KICAgIGRlZiBzZXR1cFVuaXQoYXBwKToKICAgICAgICBhcHAudW5pdCA9IDQKICAgICAgICBhcHAu"+
"YXBpID0gQXNzZXNzbWVudEFQSShhcHApCiAgICAgICAgYXBwLmFwaS5sb2dpbihhcHAudXNlcm5hb"+
"WUsIGFwcC5wYXNzd29yZCkKCiAgICBkZWYgYXBwU3RhcnRlZChhcHApOgogICAgICAgIHcsIGggPS"+
"BhcHAuX3Jvb3Qud2luZm9fc2NyZWVud2lkdGgoKSwgYXBwLl9yb290LndpbmZvX3NjcmVlbmhlaWd"+
"odCgpCiAgICAgICAgYXBwLl9yb290Lmdlb21ldHJ5KCIlZHglZCswKzAiICUgKHcsIGgpKQogICAg"+
"ICAgIGFwcC5fcm9vdC51cGRhdGUoKQogICAgICAgIGFwcC53aWR0aCwgYXBwLmhlaWdodCA9IGFwc"+
"C5fcm9vdC53aW5mb193aWR0aCgpLCBhcHAuX3Jvb3Qud2luZm9faGVpZ2h0KCkKICAgICAgICBhcH"+
"AuaG9tZVNjcmVlbiA9IEhvbWVTY3JlZW4oKQogICAgICAgIGFwcC5hc3Nlc3NtZW50U2NyZWVuID0"+
"gQXNzZXNzbWVudFNjcmVlbigpCiAgICAgICAgYXBwLmNvbXBsZXRpb25TY3JlZW4gPSBDb21wbGV0"+
"aW9uU2NyZWVuKCkKCiAgICAgICAgYXBwLnNldHVwVW5pdCgpCgogICAgICAgIGFwcC5zZXRBY3Rpd"+
"mVNb2RlKGFwcC5ob21lU2NyZWVuKQoKZGVmIGdldFVzZXJJbmZvKCk6CiAgICBzYXZlZF9jcmVkZW"+
"50aWFsc19wYXRoID0gJ2N0X3JjX2xvZ2luX2NyZWRlbnRpYWxzLnR4dCcKICAgIHVzZXJuYW1lLCB"+
"wYXNzd29yZCA9ICcnLCAnJwogICAgaWYgb3MucGF0aC5leGlzdHMoc2F2ZWRfY3JlZGVudGlhbHNf"+
"cGF0aCk6CiAgICAgICAgd2l0aCBvcGVuKHNhdmVkX2NyZWRlbnRpYWxzX3BhdGgpIGFzIGY6CiAgI"+
"CAgICAgICAgIHVzZXJuYW1lLCBwYXNzd29yZCA9IGYucmVhZCgpLnN0cmlwKCkuc3BsaXQoJywnKQ"+
"ogICAgZWxzZToKICAgICAgICBwcmludCgiU2lnbmluZyBpbiB0byAxNS0xMTIgIikKICAgICAgICB"+
"1c2VybmFtZSA9IGlucHV0KCIxNS0xMTIgdXNlcm5hbWU6ICIpCiAgICAgICAgcGFzc3dvcmQgPSBn"+
"ZXRwYXNzLmdldHBhc3MoIjE1LTExMiBQYXNzd29yZDogIikKICAgICAgICBhcGkgPSBBc3Nlc3NtZ"+
"W50QVBJKCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGFwaS5sb2dpbih1c2VybmFtZSwgcGFzc3"+
"dvcmQpCiAgICAgICAgICAgIHdpdGggb3BlbihzYXZlZF9jcmVkZW50aWFsc19wYXRoLCAndycpIGF"+
"zIGY6CiAgICAgICAgICAgICAgICBmLndyaXRlKGYie3VzZXJuYW1lfSx7cGFzc3dvcmR9IikKICAg"+
"ICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50KCJJbmNvcnJlY3QgdXNlcm5hbWUgb3IgcGFzc"+
"3dvcmQiKQogICAgICAgICAgICBvcy5fZXhpdCgwKQogICAgcmV0dXJuIHVzZXJuYW1lLCBwYXNzd2"+
"9yZAoKTWFpbigqZ2V0VXNlckluZm8oKSkK"
)
exec(decode(code), {})