mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-15 09:04:04 +02:00
1 line
1.4 MiB
1 line
1.4 MiB
module.exports = `LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgbWVybWFpZC5taW4uanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4oKCk9Pnt2YXIgdD17MTM2MjoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsNl0sbj1bMSw3XSxyPVsxLDhdLGk9WzEsOV0sYT1bMSwxMl0sbz1bMSwxMV0scz1bMSwxNSwyNF0sYz1bMSwxOV0sdT1bMSwzMV0sbD1bMSwzNF0saD1bMSwzMl0sZj1bMSwzM10sZD1bMSwzNV0scD1bMSwzNl0seT1bMSwzN10sZz1bMSwzOF0sbT1bMSw0MV0sdj1bMSw0Ml0sYj1bMSw0M10sXz1bMSw0NF0seD1bMTUsMjRdLHc9WzEsNTZdLGs9WzEsNTddLFQ9WzEsNThdLEU9WzEsNTldLEM9WzEsNjBdLFM9WzEsNjFdLEE9WzE1LDI0LDMxLDM4LDM5LDQ3LDUwLDUxLDUyLDUzLDU0LDU1LDYwLDYyXSxNPVsxNSwyNCwyOSwzMSwzOCwzOSw0Myw0Nyw1MCw1MSw1Miw1Myw1NCw1NSw2MCw2Miw3Nyw3OCw3OSw4MF0sTj1bNyw4LDksMTAsMTUsMTgsMjIsMjRdLEQ9WzQ3LDc3LDc4LDc5LDgwXSxPPVs0Nyw1NCw1NSw3Nyw3OCw3OSw4MF0sQj1bNDcsNTAsNTEsNTIsNTMsNzcsNzgsNzksODBdLEw9WzE1LDI0LDMxXSxJPVsxLDkzXSxSPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aXZlOjYsZGlyZWN0aW9uX3RiOjcsZGlyZWN0aW9uX2J0OjgsZGlyZWN0aW9uX3JsOjksZGlyZWN0aW9uX2xyOjEwLGdyYXBoQ29uZmlnOjExLG9wZW5EaXJlY3RpdmU6MTIsdHlwZURpcmVjdGl2ZToxMyxjbG9zZURpcmVjdGl2ZToxNCxORVdMSU5FOjE1LCI6IjoxNixhcmdEaXJlY3RpdmU6MTcsb3Blbl9kaXJlY3RpdmU6MTgsdHlwZV9kaXJlY3RpdmU6MTksYXJnX2RpcmVjdGl2ZToyMCxjbG9zZV9kaXJlY3RpdmU6MjEsQ0xBU1NfRElBR1JBTToyMixzdGF0ZW1lbnRzOjIzLEVPRjoyNCxzdGF0ZW1lbnQ6MjUsY2xhc3NOYW1lOjI2LGFscGhhTnVtVG9rZW46MjcsY2xhc3NMaXRlcmFsTmFtZToyOCxHRU5FUklDVFlQRToyOSxyZWxhdGlvblN0YXRlbWVudDozMCxMQUJFTDozMSxjbGFzc1N0YXRlbWVudDozMixtZXRob2RTdGF0ZW1lbnQ6MzMsYW5ub3RhdGlvblN0YXRlbWVudDozNCxjbGlja1N0YXRlbWVudDozNSxjc3NDbGFzc1N0YXRlbWVudDozNixDTEFTUzozNyxTVFlMRV9TRVBBUkFUT1I6MzgsU1RSVUNUX1NUQVJUOjM5LG1lbWJlcnM6NDAsU1RSVUNUX1NUT1A6NDEsQU5OT1RBVElPTl9TVEFSVDo0MixBTk5PVEFUSU9OX0VORDo0MyxNRU1CRVI6NDQsU0VQQVJBVE9SOjQ1LHJlbGF0aW9uOjQ2LFNUUjo0NyxyZWxhdGlvblR5cGU6NDgsbGluZVR5cGU6NDksQUdHUkVHQVRJT046NTAsRVhURU5TSU9OOjUxLENPTVBPU0lUSU9OOjUyLERFUEVOREVOQ1k6NTMsTElORTo1NCxET1RURURfTElORTo1NSxDQUxMQkFDSzo1NixMSU5LOjU3LExJTktfVEFSR0VUOjU4LENMSUNLOjU5LENBTExCQUNLX05BTUU6NjAsQ0FMTEJBQ0tfQVJHUzo2MSxIUkVGOjYyLENTU0NMQVNTOjYzLGNvbW1lbnRUb2tlbjo2NCx0ZXh0VG9rZW46NjUsZ3JhcGhDb2RlVG9rZW5zOjY2LHRleHROb1RhZ3NUb2tlbjo2NyxUQUdTVEFSVDo2OCxUQUdFTkQ6NjksIj09Ijo3MCwiLS0iOjcxLFBDVDo3MixERUZBVUxUOjczLFNQQUNFOjc0LE1JTlVTOjc1LGtleXdvcmRzOjc2LFVOSUNPREVfVEVYVDo3NyxOVU06NzgsQUxQSEE6NzksQlFVT1RFX1NUUjo4MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNzoiZGlyZWN0aW9uX3RiIiw4OiJkaXJlY3Rpb25fYnQiLDk6ImRpcmVjdGlvbl9ybCIsMTA6ImRpcmVjdGlvbl9sciIsMTU6Ik5FV0xJTkUiLDE2OiI6IiwxODoib3Blbl9kaXJlY3RpdmUiLDE5OiJ0eXBlX2RpcmVjdGl2ZSIsMjA6ImFyZ19kaXJlY3RpdmUiLDIxOiJjbG9zZV9kaXJlY3RpdmUiLDIyOiJDTEFTU19ESUFHUkFNIiwyNDoiRU9GIiwyOToiR0VORVJJQ1RZUEUiLDMxOiJMQUJFTCIsMzc6IkNMQVNTIiwzODoiU1RZTEVfU0VQQVJBVE9SIiwzOToiU1RSVUNUX1NUQVJUIiw0MToiU1RSVUNUX1NUT1AiLDQyOiJBTk5PVEFUSU9OX1NUQVJUIiw0MzoiQU5OT1RBVElPTl9FTkQiLDQ0OiJNRU1CRVIiLDQ1OiJTRVBBUkFUT1IiLDQ3OiJTVFIiLDUwOiJBR0dSRUdBVElPTiIsNTE6IkVYVEVOU0lPTiIsNTI6IkNPTVBPU0lUSU9OIiw1MzoiREVQRU5ERU5DWSIsNTQ6IkxJTkUiLDU1OiJET1RURURfTElORSIsNTY6IkNBTExCQUNLIiw1NzoiTElOSyIsNTg6IkxJTktfVEFSR0VUIiw1OToiQ0xJQ0siLDYwOiJDQUxMQkFDS19OQU1FIiw2MToiQ0FMTEJBQ0tfQVJHUyIsNjI6IkhSRUYiLDYzOiJDU1NDTEFTUyIsNjY6ImdyYXBoQ29kZVRva2VucyIsNjg6IlRBR1NUQVJUIiw2OToiVEFHRU5EIiw3MDoiPT0iLDcxOiItLSIsNzI6IlBDVCIsNzM6IkRFRkFVTFQiLDc0OiJTUEFDRSIsNzU6Ik1JTlVTIiw3Njoia2V5d29yZHMiLDc3OiJVTklDT0RFX1RFWFQiLDc4OiJOVU0iLDc5OiJBTFBIQSIsODA6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzMsMl0sWzUsMV0sWzUsMV0sWzUsMV0sWzUsMV0sWzQsMV0sWzYsNF0sWzYsNl0sWzEyLDFdLFsxMywxXSxbMTcsMV0sWzE0LDFdLFsxMSw0XSxbMjMsMV0sWzIzLDJdLFsyMywzXSxbMjYsMV0sWzI2LDFdLFsyNiwyXSxbMjYsMl0sWzI2LDJdLFsyNSwxXSxbMjUsMl0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFszMiwyXSxbMzIsNF0sWzMyLDVdLFszMiw3XSxbMzQsNF0sWzQwLDFdLFs0MCwyXSxbMzMsMV0sWzMzLDJdLFszMywxXSxbMzMsMV0sWzMwLDNdLFszMCw0XSxbMzAsNF0sWzMwLDVdLFs0NiwzXSxbNDYsMl0sWzQ2LDJdLFs0NiwxXSxbNDgsMV0sWzQ4LDFdLFs0OCwxXSxbNDgsMV0sWzQ5LDFdLFs0OSwxXSxbMzUsM10sWzM1LDRdLFszNSwzXSxbMzUsNF0sWzM1LDRdLFszNSw1XSxbMzUsM10sWzM1LDRdLFszNSw0XSxbMzUsNV0sWzM1LDNdLFszNSw0XSxbMzUsNF0sWzM1LDVdLFszNiwzXSxbNjQsMV0sWzY0LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NSwxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzI3LDFdLFsyNywxXSxbMjcsMV0sWzI4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDU6ci5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA2OnIuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNzpyLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDExOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTQ6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiY2xhc3MiKTticmVhaztjYXNlIDE5OmNhc2UgMjA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9YVtzLTFdK2Fbc107YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnRoaXMuJD1hW3MtMV0rIn4iK2Fbc107YnJlYWs7Y2FzZSAyNDpyLmFkZFJlbGF0aW9uKGFbc10pO2JyZWFrO2Nhc2UgMjU6YVtzLTFdLnRpdGxlPXIuY2xlYW51cExhYmVsKGFbc10pLHIuYWRkUmVsYXRpb24oYVtzLTFdKTticmVhaztjYXNlIDMzOnIuYWRkQ2xhc3MoYVtzXSk7YnJlYWs7Y2FzZSAzNDpyLmFkZENsYXNzKGFbcy0yXSksci5zZXRDc3NDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAzNTpyLmFkZENsYXNzKGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMzY6ci5hZGRDbGFzcyhhW3MtNV0pLHIuc2V0Q3NzQ2xhc3MoYVtzLTVdLGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy01XSxhW3MtMV0pO2JyZWFrO2Nhc2UgMzc6ci5hZGRBbm5vdGF0aW9uKGFbc10sYVtzLTJdKTticmVhaztjYXNlIDM4OnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAzOTphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDQwOmNhc2UgNDI6Y2FzZSA0MzpicmVhaztjYXNlIDQxOnIuYWRkTWVtYmVyKGFbcy0xXSxyLmNsZWFudXBMYWJlbChhW3NdKSk7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9e2lkMTphW3MtMl0saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0xXSxyZWxhdGlvblRpdGxlMTphW3MtMl0scmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDQ2OnRoaXMuJD17aWQxOmFbcy0zXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9e2lkMTphW3MtNF0saWQyOmFbc10scmVsYXRpb246YVtzLTJdLHJlbGF0aW9uVGl0bGUxOmFbcy0zXSxyZWxhdGlvblRpdGxlMjphW3MtMV19O2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXt0eXBlMTphW3MtMl0sdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXt0eXBlMTphW3MtMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNTI6dGhpcy4kPXIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPXIucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDU0OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDU1OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPXIubGluZVR5cGUuTElORTticmVhaztjYXNlIDU3OnRoaXMuJD1yLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNTg6Y2FzZSA2NDp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA1OTpjYXNlIDY1OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA2MDpjYXNlIDY4OnRoaXMuJD1hW3MtMl0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDYxOmNhc2UgNjk6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDYyOmNhc2UgNzA6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDYzOmNhc2UgNzE6dGhpcy4kPWFbcy00XSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy00XSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA3MjpyLnNldENzc0NsYXNzKGFbcy0xXSxhW3NdKX19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjo0LDc6ZSw4Om4sOTpyLDEwOmksMTE6NSwxMjoxMCwxODphLDIyOm99LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MzoxMyw0OjIsNTozLDY6NCw3OmUsODpuLDk6ciwxMDppLDExOjUsMTI6MTAsMTg6YSwyMjpvfSx7MTpbMiw4XX0sdChzLFsyLDRdKSx0KHMsWzIsNV0pLHQocyxbMiw2XSksdChzLFsyLDddKSx7MTM6MTQsMTk6WzEsMTVdfSx7MTU6WzEsMTZdfSx7MTk6WzIsMTFdfSx7MTpbMiwzXX0sezE0OjE3LDE2OlsxLDE4XSwyMTpjfSx0KFsxNiwyMV0sWzIsMTJdKSx7NToyOSw2OjI4LDc6ZSw4Om4sOTpyLDEwOmksMTI6MTAsMTg6YSwyMzoyMCwyNToyMSwyNjozMCwyNzozOSwyODo0MCwzMDoyMiwzMjoyMywzMzoyNCwzNDoyNSwzNToyNiwzNjoyNywzNzp1LDQyOmwsNDQ6aCw0NTpmLDU2OmQsNTc6cCw1OTp5LDYzOmcsNzc6bSw3ODp2LDc5OmIsODA6X30sezE1OlsxLDQ1XX0sezE3OjQ2LDIwOlsxLDQ3XX0sezE1OlsyLDE0XX0sezI0OlsxLDQ4XX0sezE1OlsxLDQ5XSwyNDpbMiwxNl19LHQoeCxbMiwyNF0sezMxOlsxLDUwXX0pLHQoeCxbMiwyNl0pLHQoeCxbMiwyN10pLHQoeCxbMiwyOF0pLHQoeCxbMiwyOV0pLHQoeCxbMiwzMF0pLHQoeCxbMiwzMV0pLHQoeCxbMiwzMl0pLHQoeCxbMiw0MF0sezQ2OjUxLDQ4OjU0LDQ5OjU1LDMxOlsxLDUzXSw0NzpbMSw1Ml0sNTA6dyw1MTprLDUyOlQsNTM6RSw1NDpDLDU1OlN9KSx7MjY6NjIsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6X30sdCh4LFsyLDQyXSksdCh4LFsyLDQzXSksezI3OjYzLDc3Om0sNzg6diw3OTpifSx7MjY6NjQsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6X30sezI2OjY1LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOl99LHsyNjo2NiwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDpffSx7NDc6WzEsNjddfSx0KEEsWzIsMTldLHsyNzozOSwyODo0MCwyNjo2OCwyOTpbMSw2OV0sNzc6bSw3ODp2LDc5OmIsODA6X30pLHQoQSxbMiwyMF0sezI5OlsxLDcwXX0pLHQoTSxbMiw4Nl0pLHQoTSxbMiw4N10pLHQoTSxbMiw4OF0pLHQoWzE1LDI0LDI5LDMxLDM4LDM5LDQ3LDUwLDUxLDUyLDUzLDU0LDU1LDYwLDYyXSxbMiw4OV0pLHQoTixbMiw5XSksezE0OjcxLDIxOmN9LHsyMTpbMiwxM119LHsxOlsyLDE1XX0sezU6MjksNjoyOCw3OmUsODpuLDk6ciwxMDppLDEyOjEwLDE4OmEsMjM6NzIsMjQ6WzIsMTddLDI1OjIxLDI2OjMwLDI3OjM5LDI4OjQwLDMwOjIyLDMyOjIzLDMzOjI0LDM0OjI1LDM1OjI2LDM2OjI3LDM3OnUsNDI6bCw0NDpoLDQ1OmYsNTY6ZCw1NzpwLDU5OnksNjM6Zyw3NzptLDc4OnYsNzk6Yiw4MDpffSx0KHgsWzIsMjVdKSx7MjY6NzMsMjc6MzksMjg6NDAsNDc6WzEsNzRdLDc3Om0sNzg6diw3OTpiLDgwOl99LHs0Njo3NSw0ODo1NCw0OTo1NSw1MDp3LDUxOmssNTI6VCw1MzpFLDU0OkMsNTU6U30sdCh4LFsyLDQxXSksezQ5Ojc2LDU0OkMsNTU6U30sdChELFsyLDUxXSx7NDg6NzcsNTA6dyw1MTprLDUyOlQsNTM6RX0pLHQoTyxbMiw1Ml0pLHQoTyxbMiw1M10pLHQoTyxbMiw1NF0pLHQoTyxbMiw1NV0pLHQoQixbMiw1Nl0pLHQoQixbMiw1N10pLHQoeCxbMiwzM10sezM4OlsxLDc4XSwzOTpbMSw3OV19KSx7NDM6WzEsODBdfSx7NDc6WzEsODFdfSx7NDc6WzEsODJdfSx7NjA6WzEsODNdLDYyOlsxLDg0XX0sezI3Ojg1LDc3Om0sNzg6diw3OTpifSx0KEEsWzIsMjFdKSx0KEEsWzIsMjJdKSx0KEEsWzIsMjNdKSx7MTU6WzEsODZdfSx7MjQ6WzIsMThdfSx0KEwsWzIsNDRdKSx7MjY6ODcsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6X30sezI2Ojg4LDI3OjM5LDI4OjQwLDQ3OlsxLDg5XSw3NzptLDc4OnYsNzk6Yiw4MDpffSx0KEQsWzIsNTBdLHs0ODo5MCw1MDp3LDUxOmssNTI6VCw1MzpFfSksdChELFsyLDQ5XSksezI3OjkxLDc3Om0sNzg6diw3OTpifSx7NDA6OTIsNDQ6SX0sezI2Ojk0LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOl99LHQoeCxbMiw1OF0sezQ3OlsxLDk1XX0pLHQoeCxbMiw2MF0sezQ3OlsxLDk3XSw1ODpbMSw5Nl19KSx0KHgsWzIsNjRdLHs0NzpbMSw5OF0sNjE6WzEsOTldfSksdCh4LFsyLDY4XSx7NDc6WzEsMTAxXSw1ODpbMSwxMDBdfSksdCh4LFsyLDcyXSksdChOLFsyLDEwXSksdChMLFsyLDQ2XSksdChMLFsyLDQ1XSksezI2OjEwMiwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDpffSx0KEQsWzIsNDhdKSx0KHgsWzIsMzRdLHszOTpbMSwxMDNdfSksezQxOlsxLDEwNF19LHs0MDoxMDUsNDE6WzIsMzhdLDQ0Okl9LHQoeCxbMiwzN10pLHQoeCxbMiw1OV0pLHQoeCxbMiw2MV0pLHQoeCxbMiw2Ml0sezU4OlsxLDEwNl19KSx0KHgsWzIsNjVdKSx0KHgsWzIsNjZdLHs0NzpbMSwxMDddfSksdCh4LFsyLDY5XSksdCh4LFsyLDcwXSx7NTg6WzEsMTA4XX0pLHQoTCxbMiw0N10pLHs0MDoxMDksNDQ6SX0sdCh4LFsyLDM1XSksezQxOlsyLDM5XX0sdCh4LFsyLDYzXSksdCh4LFsyLDY3XSksdCh4LFsyLDcxXSksezQxOlsxLDExMF19LHQoeCxbMiwzNl0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDU6WzIsOF0sMTI6WzIsMTFdLDEzOlsyLDNdLDE5OlsyLDE0XSw0NzpbMiwxM10sNDg6WzIsMTVdLDcyOlsyLDE4XSwxMDU6WzIsMzldfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCx3LGssVCxFLEMsUyxBLE09e307Oyl7aWYodz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbd10/az10aGlzLmRlZmF1bHRBY3Rpb25zW3ddOihudWxsPT1fJiYoXz1iKCkpLGs9b1t3XSYmb1t3XVtfXSksdm9pZCAwPT09a3x8IWsubGVuZ3RofHwha1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW3ddKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYoa1swXWluc3RhbmNlb2YgQXJyYXkmJmsubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit3KyIsIHRva2VuOiAiK18pO3N3aXRjaChrWzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2goa1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LGtbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sRj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxODtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDEwO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxOTtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTY7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDIxO2Nhc2UgODpyZXR1cm4gMjA7Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMjpjYXNlIDE5OmJyZWFrO2Nhc2UgMTE6cmV0dXJuIDE1O2Nhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMjI7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigic3RydWN0IiksMzk7Y2FzZSAxNjpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSAxNzpyZXR1cm4iT1BFTl9JTl9TVFJVQ1QiO2Nhc2UgMTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTtjYXNlIDIwOnJldHVybiJNRU1CRVIiO2Nhc2UgMjE6cmV0dXJuIDM3O2Nhc2UgMjI6cmV0dXJuIDYzO2Nhc2UgMjM6cmV0dXJuIDU2O2Nhc2UgMjQ6cmV0dXJuIDU3O2Nhc2UgMjU6cmV0dXJuIDU5O2Nhc2UgMjY6cmV0dXJuIDQyO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgMjk6Y2FzZSAzMjpjYXNlIDM1OmNhc2UgMzg6Y2FzZSA0MTpjYXNlIDQ0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMwOnJldHVybiJHRU5FUklDVFlQRSI7Y2FzZSAzMTp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDMzOnJldHVybiJTVFIiO2Nhc2UgMzQ6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDM2OnJldHVybiJCUVVPVEVfU1RSIjtjYXNlIDM3OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDM5OnJldHVybiA2MjtjYXNlIDQwOnRoaXMuYmVnaW4oImNhbGxiYWNrX25hbWUiKTticmVhaztjYXNlIDQyOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja19hcmdzIik7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gNjA7Y2FzZSA0NTpyZXR1cm4gNjE7Y2FzZSA0NjpjYXNlIDQ3OmNhc2UgNDg6Y2FzZSA0OTpyZXR1cm4gNTg7Y2FzZSA1MDpjYXNlIDUxOnJldHVybiA1MTtjYXNlIDUyOmNhc2UgNTM6cmV0dXJuIDUzO2Nhc2UgNTQ6cmV0dXJuIDUyO2Nhc2UgNTU6cmV0dXJuIDUwO2Nhc2UgNTY6cmV0dXJuIDU0O2Nhc2UgNTc6cmV0dXJuIDU1O2Nhc2UgNTg6cmV0dXJuIDMxO2Nhc2UgNTk6cmV0dXJuIDM4O2Nhc2UgNjA6cmV0dXJuIDc1O2Nhc2UgNjE6cmV0dXJuIkRPVCI7Y2FzZSA2MjpyZXR1cm4iUExVUyI7Y2FzZSA2MzpyZXR1cm4gNzI7Y2FzZSA2NDpjYXNlIDY1OnJldHVybiJFUVVBTFMiO2Nhc2UgNjY6cmV0dXJuIDc5O2Nhc2UgNjc6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDY4OnJldHVybiA3ODtjYXNlIDY5OnJldHVybiA3NztjYXNlIDcwOnJldHVybiA3NDtjYXNlIDcxOnJldHVybiAyNH19LHJ1bGVzOlsvXig/OiUlXHspLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS8sL14oPzo6KS8sL14oPzpcfSUlKS8sL14oPzooKD86KD8hXH0lJSkufFxuKSopKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86W3tdKS8sL14oPzokKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNsYXNzXGIpLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86Y2xpY2tcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpbfl0pLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86W2BdKS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpocmVmW1xzXStbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzpccyo8XHwpLywvXig/OlxzKlx8PikvLC9eKD86XHMqPikvLC9eKD86XHMqPCkvLC9eKD86XHMqXCopLywvXig/OlxzKm9cYikvLC9eKD86LS0pLywvXig/OlwuXC4pLywvXig/Ojp7MX1bXjpcbjtdKykvLC9eKD86OnszfSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OlwrKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzpcdyspLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOnthcmdfZGlyZWN0aXZlOntydWxlczpbNyw4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbNV0saW5jbHVzaXZlOiExfSxjYWxsYmFja19hcmdzOntydWxlczpbNDQsNDVdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfbmFtZTp7cnVsZXM6WzQxLDQyLDQzXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlszOCwzOV0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsxNiwxNywxOCwxOSwyMF0saW5jbHVzaXZlOiExfSxnZW5lcmljOntydWxlczpbMjksMzBdLGluY2x1c2l2ZTohMX0sYnFzdHJpbmc6e3J1bGVzOlszNSwzNl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlszMiwzM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDksMTAsMTEsMTIsMTMsMTQsMTUsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMzEsMzQsMzcsNDAsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzFdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBQKCl7dGhpcy55eT17fX1yZXR1cm4gUi5sZXhlcj1GLFAucHJvdG90eXBlPVIsUi5QYXJzZXI9UCxuZXcgUH0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDgyMTgpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sNTg5MDoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSw1XSxyPVs2LDksMTEsMjMsNDFdLGk9WzEsMTddLGE9WzEsMjBdLG89WzEsMjVdLHM9WzEsMjZdLGM9WzEsMjddLHU9WzEsMjhdLGw9WzEsMzddLGg9WzIzLDM4LDM5XSxmPVs0LDYsOSwxMSwyMyw0MV0sZD1bMzQsMzUsMzYsMzddLHA9WzIyLDI5XSx5PVsxLDU1XSxnPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxFUl9ESUFHUkFNOjQsZG9jdW1lbnQ6NSxFT0Y6NixkaXJlY3RpdmU6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkVXTElORToxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsIjoiOjE1LGFyZ0RpcmVjdGl2ZToxNixlbnRpdHlOYW1lOjE3LHJlbFNwZWM6MTgscm9sZToxOSxCTE9DS19TVEFSVDoyMCxhdHRyaWJ1dGVzOjIxLEJMT0NLX1NUT1A6MjIsQUxQSEFOVU06MjMsYXR0cmlidXRlOjI0LGF0dHJpYnV0ZVR5cGU6MjUsYXR0cmlidXRlTmFtZToyNixhdHRyaWJ1dGVLZXlUeXBlOjI3LGF0dHJpYnV0ZUNvbW1lbnQ6MjgsQVRUUklCVVRFX1dPUkQ6MjksQVRUUklCVVRFX0tFWTozMCxDT01NRU5UOjMxLGNhcmRpbmFsaXR5OjMyLHJlbFR5cGU6MzMsWkVST19PUl9PTkU6MzQsWkVST19PUl9NT1JFOjM1LE9ORV9PUl9NT1JFOjM2LE9OTFlfT05FOjM3LE5PTl9JREVOVElGWUlORzozOCxJREVOVElGWUlORzozOSxXT1JEOjQwLG9wZW5fZGlyZWN0aXZlOjQxLHR5cGVfZGlyZWN0aXZlOjQyLGFyZ19kaXJlY3RpdmU6NDMsY2xvc2VfZGlyZWN0aXZlOjQ0LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJFUl9ESUFHUkFNIiw2OiJFT0YiLDk6IlNQQUNFIiwxMToiTkVXTElORSIsMTU6IjoiLDIwOiJCTE9DS19TVEFSVCIsMjI6IkJMT0NLX1NUT1AiLDIzOiJBTFBIQU5VTSIsMjk6IkFUVFJJQlVURV9XT1JEIiwzMDoiQVRUUklCVVRFX0tFWSIsMzE6IkNPTU1FTlQiLDM0OiJaRVJPX09SX09ORSIsMzU6IlpFUk9fT1JfTU9SRSIsMzY6Ik9ORV9PUl9NT1JFIiwzNzoiT05MWV9PTkUiLDM4OiJOT05fSURFTlRJRllJTkciLDM5OiJJREVOVElGWUlORyIsNDA6IldPUkQiLDQxOiJvcGVuX2RpcmVjdGl2ZSIsNDI6InR5cGVfZGlyZWN0aXZlIiw0MzoiYXJnX2RpcmVjdGl2ZSIsNDQ6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbNSwwXSxbNSwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbNyw0XSxbNyw2XSxbMTAsMV0sWzEwLDVdLFsxMCw0XSxbMTAsM10sWzEwLDFdLFsxNywxXSxbMjEsMV0sWzIxLDJdLFsyNCwyXSxbMjQsM10sWzI0LDNdLFsyNCw0XSxbMjUsMV0sWzI2LDFdLFsyNywxXSxbMjgsMV0sWzE4LDNdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbMzMsMV0sWzMzLDFdLFsxOSwxXSxbMTksMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpicmVhaztjYXNlIDM6Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjpjYXNlIDE2OmNhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzU6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMjpyLmFkZEVudGl0eShhW3MtNF0pLHIuYWRkRW50aXR5KGFbcy0yXSksci5hZGRSZWxhdGlvbnNoaXAoYVtzLTRdLGFbc10sYVtzLTJdLGFbcy0zXSk7YnJlYWs7Y2FzZSAxMzpyLmFkZEVudGl0eShhW3MtM10pLHIuYWRkQXR0cmlidXRlcyhhW3MtM10sYVtzLTFdKTticmVhaztjYXNlIDE0OnIuYWRkRW50aXR5KGFbcy0yXSk7YnJlYWs7Y2FzZSAxNTpyLmFkZEVudGl0eShhW3NdKTticmVhaztjYXNlIDE3OnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAxODphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE5OnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMV0sYXR0cmlidXRlTmFtZTphW3NdfTticmVhaztjYXNlIDIwOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMl0sYXR0cmlidXRlTmFtZTphW3MtMV0sYXR0cmlidXRlS2V5VHlwZTphW3NdfTticmVhaztjYXNlIDIxOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMl0sYXR0cmlidXRlTmFtZTphW3MtMV0sYXR0cmlidXRlQ29tbWVudDphW3NdfTticmVhaztjYXNlIDIyOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtM10sYXR0cmlidXRlTmFtZTphW3MtMl0sYXR0cmlidXRlS2V5VHlwZTphW3MtMV0sYXR0cmlidXRlQ29tbWVudDphW3NdfTticmVhaztjYXNlIDI2OmNhc2UgMzQ6dGhpcy4kPWFbc10ucmVwbGFjZSgvIi9nLCIiKTticmVhaztjYXNlIDI3OnRoaXMuJD17Y2FyZEE6YVtzXSxyZWxUeXBlOmFbcy0xXSxjYXJkQjphW3MtMl19O2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTticmVhaztjYXNlIDMxOnRoaXMuJD1yLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWs7Y2FzZSAzNjpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzg6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDM5OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImVyIil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsNDE6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDQxOm59LHsxMzo4LDQyOlsxLDldfSx7NDI6WzIsMzZdfSx7NjpbMSwxMF0sNzoxNSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OjE2LDIzOmksNDE6bn0sezE6WzIsMl19LHsxNDoxOCwxNTpbMSwxOV0sNDQ6YX0sdChbMTUsNDRdLFsyLDM3XSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxNSwxMDoyMSwxMjo0LDE3OjE2LDIzOmksNDE6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHQocixbMiwxNV0sezE4OjIyLDMyOjI0LDIwOlsxLDIzXSwzNDpvLDM1OnMsMzY6YywzNzp1fSksdChbNiw5LDExLDE1LDIwLDIzLDM0LDM1LDM2LDM3LDQxXSxbMiwxNl0pLHsxMTpbMSwyOV19LHsxNjozMCw0MzpbMSwzMV19LHsxMTpbMiwzOV19LHQocixbMiw1XSksezE3OjMyLDIzOml9LHsyMTozMywyMjpbMSwzNF0sMjQ6MzUsMjU6MzYsMjk6bH0sezMzOjM4LDM4OlsxLDM5XSwzOTpbMSw0MF19LHQoaCxbMiwyOF0pLHQoaCxbMiwyOV0pLHQoaCxbMiwzMF0pLHQoaCxbMiwzMV0pLHQoZixbMiw5XSksezE0OjQxLDQ0OmF9LHs0NDpbMiwzOF19LHsxNTpbMSw0Ml19LHsyMjpbMSw0M119LHQocixbMiwxNF0pLHsyMTo0NCwyMjpbMiwxN10sMjQ6MzUsMjU6MzYsMjk6bH0sezI2OjQ1LDI5OlsxLDQ2XX0sezI5OlsyLDIzXX0sezMyOjQ3LDM0Om8sMzU6cywzNjpjLDM3OnV9LHQoZCxbMiwzMl0pLHQoZCxbMiwzM10pLHsxMTpbMSw0OF19LHsxOTo0OSwyMzpbMSw1MV0sNDA6WzEsNTBdfSx0KHIsWzIsMTNdKSx7MjI6WzIsMThdfSx0KHAsWzIsMTldLHsyNzo1MiwyODo1MywzMDpbMSw1NF0sMzE6eX0pLHQoWzIyLDI5LDMwLDMxXSxbMiwyNF0pLHsyMzpbMiwyN119LHQoZixbMiwxMF0pLHQocixbMiwxMl0pLHQocixbMiwzNF0pLHQocixbMiwzNV0pLHQocCxbMiwyMF0sezI4OjU2LDMxOnl9KSx0KHAsWzIsMjFdKSx0KFsyMiwyOSwzMV0sWzIsMjVdKSx0KHAsWzIsMjZdKSx0KHAsWzIsMjJdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMzZdLDc6WzIsMl0sMjA6WzIsMzldLDMxOlsyLDM4XSwzNzpbMiwyM10sNDQ6WzIsMThdLDQ3OlsyLDI3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LG09e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNDE7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDQyO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDQ7Y2FzZSA0OnJldHVybiA0MztjYXNlIDU6Y2FzZSA2OmNhc2UgODpjYXNlIDEzOmNhc2UgMTc6YnJlYWs7Y2FzZSA3OnJldHVybiAxMTtjYXNlIDk6cmV0dXJuIDk7Y2FzZSAxMDpyZXR1cm4gNDA7Y2FzZSAxMTpyZXR1cm4gNDtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDIwO2Nhc2UgMTQ6cmV0dXJuIDMwO2Nhc2UgMTU6cmV0dXJuIDI5O2Nhc2UgMTY6cmV0dXJuIDMxO2Nhc2UgMTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyMjtjYXNlIDE5OmNhc2UgMzI6cmV0dXJuIGUueXl0ZXh0WzBdO2Nhc2UgMjA6Y2FzZSAyNDpyZXR1cm4gMzQ7Y2FzZSAyMTpjYXNlIDI1OnJldHVybiAzNTtjYXNlIDIyOmNhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMjM6cmV0dXJuIDM3O2Nhc2UgMjc6Y2FzZSAyOTpjYXNlIDMwOnJldHVybiAzODtjYXNlIDI4OnJldHVybiAzOTtjYXNlIDMxOnJldHVybiAyMztjYXNlIDMzOnJldHVybiA2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/Oltcc10rKS9pLC9eKD86IlteIl0qIikvaSwvXig/OmVyRGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpccyspL2ksL14oPzooPzpQSyl8KD86RkspKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzoiW14iXSoiKS9pLC9eKD86W1xuXSspL2ksL14oPzpcfSkvaSwvXig/Oi4pL2ksL14oPzpcfG9cYikvaSwvXig/Olx9b1xiKS9pLC9eKD86XH1cfCkvaSwvXig/Olx8XHwpL2ksL14oPzpvXHwpL2ksL14oPzpvXHspL2ksL14oPzpcfFx7KS9pLC9eKD86XC5cLikvaSwvXig/Oi0tKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzouKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sYmxvY2s6e3J1bGVzOlsxMywxNCwxNSwxNiwxNywxOCwxOV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzNdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiB2KCl7dGhpcy55eT17fX1yZXR1cm4gZy5sZXhlcj1tLHYucHJvdG90eXBlPWcsZy5QYXJzZXI9dixuZXcgdn0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDgwMDkpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sMzYwMjoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsOV0sbj1bMSw3XSxyPVsxLDZdLGk9WzEsOF0sYT1bMSwyMCwyMSwyMiwyMywzOCw0Nyw1OSw2MCw3OSw4MCw4MSw4Miw4Myw4NCw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLG89WzIsMTBdLHM9WzEsMjBdLGM9WzEsMjFdLHU9WzEsMjJdLGw9WzEsMjNdLGg9WzEsMzBdLGY9WzEsNTldLGQ9WzEsNDVdLHA9WzEsNDldLHk9WzEsMzNdLGc9WzEsMzRdLG09WzEsMzVdLHY9WzEsMzZdLGI9WzEsMzddLF89WzEsNTNdLHg9WzEsNjBdLHc9WzEsNDhdLGs9WzEsNTBdLFQ9WzEsNTJdLEU9WzEsNTZdLEM9WzEsNTddLFM9WzEsMzhdLEE9WzEsMzldLE09WzEsNDBdLE49WzEsNDFdLEQ9WzEsNThdLE89WzEsNDddLEI9WzEsNTFdLEw9WzEsNTRdLEk9WzEsNTVdLFI9WzEsNDZdLEY9WzEsNjNdLFA9WzEsNjhdLGo9WzEsMjAsMjEsMjIsMjMsMzgsNDIsNDcsNTksNjAsNzksODAsODEsODIsODMsODQsODgsOTgsOTksMTAyLDEwNCwxMDUsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxZPVsxLDcyXSx6PVsxLDcxXSxVPVsxLDczXSxxPVsyMCwyMSwyMyw3NCw3NV0sSD1bMSw5NF0sJD1bMSw5OV0sVz1bMSwxMDJdLFY9WzEsMTAzXSxHPVsxLDk2XSxYPVsxLDEwMV0sWj1bMSwxMDRdLFE9WzEsOTddLEs9WzEsMTA5XSxKPVsxLDEwOF0sdHQ9WzEsOThdLGV0PVsxLDEwMF0sbnQ9WzEsMTA1XSxydD1bMSwxMDZdLGl0PVsxLDEwN10sYXQ9WzEsMTEwXSxvdD1bMjAsMjEsMjIsMjMsNzQsNzVdLHN0PVsyMCwyMSwyMiwyMyw0OCw3NCw3NV0sY3Q9WzIwLDIxLDIyLDIzLDQwLDQ3LDQ4LDUwLDUyLDU0LDU2LDU4LDU5LDYwLDYyLDY0LDY2LDY3LDY5LDc0LDc1LDg0LDg4LDk4LDk5LDEwMiwxMDQsMTA1LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSx1dD1bMjAsMjEsMjNdLGx0PVsyMCwyMSwyMyw0Nyw1OSw2MCw3NCw3NSw4NCw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0saHQ9WzEsMTIsMjAsMjEsMjIsMjMsMjQsMzgsNDIsNDcsNTksNjAsNzksODAsODEsODIsODMsODQsODgsOTgsOTksMTAyLDEwNCwxMDUsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxmdD1bNDcsNTksNjAsODQsODgsOTgsOTksMTAyLDEwNCwxMDUsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLGR0PVsxLDE0M10scHQ9WzEsMTUxXSx5dD1bMSwxNTJdLGd0PVsxLDE1M10sbXQ9WzEsMTU0XSx2dD1bMSwxMzhdLGJ0PVsxLDEzOV0sX3Q9WzEsMTM1XSx4dD1bMSwxNDZdLHd0PVsxLDE0N10sa3Q9WzEsMTQ4XSxUdD1bMSwxNDldLEV0PVsxLDE1MF0sQ3Q9WzEsMTU1XSxTdD1bMSwxNTZdLEF0PVsxLDE0MV0sTXQ9WzEsMTQ0XSxOdD1bMSwxNDBdLER0PVsxLDEzN10sT3Q9WzIwLDIxLDIyLDIzLDM4LDQyLDQ3LDU5LDYwLDc5LDgwLDgxLDgyLDgzLDg0LDg4LDk4LDk5LDEwMiwxMDQsMTA1LDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0sQnQ9WzEsMTU5XSxMdD1bMjAsMjEsMjIsMjMsMjYsNDcsNTksNjAsODQsOTgsOTksMTAyLDEwNCwxMDUsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLEl0PVsyMCwyMSwyMiwyMywyNCwyNiwzOCw0MCw0MSw0Miw0Nyw1MSw1Myw1NSw1Nyw1OSw2MCw2MSw2Myw2NSw2Niw2OCw3MCw3NCw3NSw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMDYsMTA3LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxSdD1bMTIsMjEsMjIsMjRdLEZ0PVsyMiw5OV0sUHQ9WzEsMjQyXSxqdD1bMSwyMzddLFl0PVsxLDIzOF0senQ9WzEsMjQ2XSxVdD1bMSwyNDNdLHF0PVsxLDI0MF0sSHQ9WzEsMjM5XSwkdD1bMSwyNDFdLFd0PVsxLDI0NF0sVnQ9WzEsMjQ1XSxHdD1bMSwyNDddLFh0PVsxLDI2NV0sWnQ9WzIwLDIxLDIzLDk5XSxRdD1bMjAsMjEsMjIsMjMsNTksNjAsNzksOTUsOTgsOTksMTAyLDEwMywxMDQsMTA1LDEwNl0sS3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxvcGVuRGlyZWN0aXZlOjYsdHlwZURpcmVjdGl2ZTo3LGNsb3NlRGlyZWN0aXZlOjgsc2VwYXJhdG9yOjksIjoiOjEwLGFyZ0RpcmVjdGl2ZToxMSxvcGVuX2RpcmVjdGl2ZToxMix0eXBlX2RpcmVjdGl2ZToxMyxhcmdfZGlyZWN0aXZlOjE0LGNsb3NlX2RpcmVjdGl2ZToxNSxncmFwaENvbmZpZzoxNixkb2N1bWVudDoxNyxsaW5lOjE4LHN0YXRlbWVudDoxOSxTRU1JOjIwLE5FV0xJTkU6MjEsU1BBQ0U6MjIsRU9GOjIzLEdSQVBIOjI0LE5PRElSOjI1LERJUjoyNixGaXJzdFN0bXRTZXBlcmF0b3I6MjcsZW5kaW5nOjI4LGVuZFRva2VuOjI5LHNwYWNlTGlzdDozMCxzcGFjZUxpc3ROZXdsaW5lOjMxLHZlcnRpY2VTdGF0ZW1lbnQ6MzIsc3R5bGVTdGF0ZW1lbnQ6MzMsbGlua1N0eWxlU3RhdGVtZW50OjM0LGNsYXNzRGVmU3RhdGVtZW50OjM1LGNsYXNzU3RhdGVtZW50OjM2LGNsaWNrU3RhdGVtZW50OjM3LHN1YmdyYXBoOjM4LHRleHQ6MzksU1FTOjQwLFNRRTo0MSxlbmQ6NDIsZGlyZWN0aW9uOjQzLGxpbms6NDQsbm9kZTo0NSx2ZXJ0ZXg6NDYsQU1QOjQ3LFNUWUxFX1NFUEFSQVRPUjo0OCxpZFN0cmluZzo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQ6NTgsQUxQSEE6NTksQ09MT046NjAsUElQRTo2MSxDWUxJTkRFUlNUQVJUOjYyLENZTElOREVSRU5EOjYzLERJQU1PTkRfU1RBUlQ6NjQsRElBTU9ORF9TVE9QOjY1LFRBR0VORDo2NixUUkFQU1RBUlQ6NjcsVFJBUEVORDo2OCxJTlZUUkFQU1RBUlQ6NjksSU5WVFJBUEVORDo3MCxsaW5rU3RhdGVtZW50OjcxLGFycm93VGV4dDo3MixURVNUU1RSOjczLFNUQVJUX0xJTks6NzQsTElOSzo3NSx0ZXh0VG9rZW46NzYsU1RSOjc3LGtleXdvcmRzOjc4LFNUWUxFOjc5LExJTktTVFlMRTo4MCxDTEFTU0RFRjo4MSxDTEFTUzo4MixDTElDSzo4MyxET1dOOjg0LFVQOjg1LHRleHROb1RhZ3M6ODYsdGV4dE5vVGFnc1Rva2VuOjg3LERFRkFVTFQ6ODgsc3R5bGVzT3B0Ojg5LGFscGhhTnVtOjkwLENBTExCQUNLTkFNRTo5MSxDQUxMQkFDS0FSR1M6OTIsSFJFRjo5MyxMSU5LX1RBUkdFVDo5NCxIRVg6OTUsbnVtTGlzdDo5NixJTlRFUlBPTEFURTo5NyxOVU06OTgsQ09NTUE6OTksc3R5bGU6MTAwLHN0eWxlQ29tcG9uZW50OjEwMSxNSU5VUzoxMDIsVU5JVDoxMDMsQlJLVDoxMDQsRE9UOjEwNSxQQ1Q6MTA2LFRBR1NUQVJUOjEwNyxhbHBoYU51bVRva2VuOjEwOCxpZFN0cmluZ1Rva2VuOjEwOSxhbHBoYU51bVN0YXRlbWVudDoxMTAsZGlyZWN0aW9uX3RiOjExMSxkaXJlY3Rpb25fYnQ6MTEyLGRpcmVjdGlvbl9ybDoxMTMsZGlyZWN0aW9uX2xyOjExNCxQVU5DVFVBVElPTjoxMTUsVU5JQ09ERV9URVhUOjExNixQTFVTOjExNyxFUVVBTFM6MTE4LE1VTFQ6MTE5LFVOREVSU0NPUkU6MTIwLGdyYXBoQ29kZVRva2VuczoxMjEsQVJST1dfQ1JPU1M6MTIyLEFSUk9XX1BPSU5UOjEyMyxBUlJPV19DSVJDTEU6MTI0LEFSUk9XX09QRU46MTI1LFFVT1RFOjEyNiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsMTA6IjoiLDEyOiJvcGVuX2RpcmVjdGl2ZSIsMTM6InR5cGVfZGlyZWN0aXZlIiwxNDoiYXJnX2RpcmVjdGl2ZSIsMTU6ImNsb3NlX2RpcmVjdGl2ZSIsMjA6IlNFTUkiLDIxOiJORVdMSU5FIiwyMjoiU1BBQ0UiLDIzOiJFT0YiLDI0OiJHUkFQSCIsMjU6Ik5PRElSIiwyNjoiRElSIiwzODoic3ViZ3JhcGgiLDQwOiJTUVMiLDQxOiJTUUUiLDQyOiJlbmQiLDQ3OiJBTVAiLDQ4OiJTVFlMRV9TRVBBUkFUT1IiLDUwOiJQUyIsNTE6IlBFIiw1MjoiKC0iLDUzOiItKSIsNTQ6IlNUQURJVU1TVEFSVCIsNTU6IlNUQURJVU1FTkQiLDU2OiJTVUJST1VUSU5FU1RBUlQiLDU3OiJTVUJST1VUSU5FRU5EIiw1ODoiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQiLDU5OiJBTFBIQSIsNjA6IkNPTE9OIiw2MToiUElQRSIsNjI6IkNZTElOREVSU1RBUlQiLDYzOiJDWUxJTkRFUkVORCIsNjQ6IkRJQU1PTkRfU1RBUlQiLDY1OiJESUFNT05EX1NUT1AiLDY2OiJUQUdFTkQiLDY3OiJUUkFQU1RBUlQiLDY4OiJUUkFQRU5EIiw2OToiSU5WVFJBUFNUQVJUIiw3MDoiSU5WVFJBUEVORCIsNzM6IlRFU1RTVFIiLDc0OiJTVEFSVF9MSU5LIiw3NToiTElOSyIsNzc6IlNUUiIsNzk6IlNUWUxFIiw4MDoiTElOS1NUWUxFIiw4MToiQ0xBU1NERUYiLDgyOiJDTEFTUyIsODM6IkNMSUNLIiw4NDoiRE9XTiIsODU6IlVQIiw4ODoiREVGQVVMVCIsOTE6IkNBTExCQUNLTkFNRSIsOTI6IkNBTExCQUNLQVJHUyIsOTM6IkhSRUYiLDk0OiJMSU5LX1RBUkdFVCIsOTU6IkhFWCIsOTc6IklOVEVSUE9MQVRFIiw5ODoiTlVNIiw5OToiQ09NTUEiLDEwMjoiTUlOVVMiLDEwMzoiVU5JVCIsMTA0OiJCUktUIiwxMDU6IkRPVCIsMTA2OiJQQ1QiLDEwNzoiVEFHU1RBUlQiLDExMToiZGlyZWN0aW9uX3RiIiwxMTI6ImRpcmVjdGlvbl9idCIsMTEzOiJkaXJlY3Rpb25fcmwiLDExNDoiZGlyZWN0aW9uX2xyIiwxMTU6IlBVTkNUVUFUSU9OIiwxMTY6IlVOSUNPREVfVEVYVCIsMTE3OiJQTFVTIiwxMTg6IkVRVUFMUyIsMTE5OiJNVUxUIiwxMjA6IlVOREVSU0NPUkUiLDEyMjoiQVJST1dfQ1JPU1MiLDEyMzoiQVJST1dfUE9JTlQiLDEyNDoiQVJST1dfQ0lSQ0xFIiwxMjU6IkFSUk9XX09QRU4iLDEyNjoiUVVPVEUifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsNF0sWzUsNl0sWzYsMV0sWzcsMV0sWzExLDFdLFs4LDFdLFs0LDJdLFsxNywwXSxbMTcsMl0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTYsMl0sWzE2LDJdLFsxNiwyXSxbMTYsM10sWzI4LDJdLFsyOCwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjcsMV0sWzI3LDFdLFsyNywyXSxbMzEsMl0sWzMxLDJdLFszMSwxXSxbMzEsMV0sWzMwLDJdLFszMCwxXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksOV0sWzE5LDZdLFsxOSw0XSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzMyLDNdLFszMiw0XSxbMzIsMl0sWzMyLDFdLFs0NSwxXSxbNDUsNV0sWzQ1LDNdLFs0Niw0XSxbNDYsNl0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDhdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw2XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0NiwxXSxbNDQsMl0sWzQ0LDNdLFs0NCwzXSxbNDQsMV0sWzQ0LDNdLFs3MSwxXSxbNzIsM10sWzM5LDFdLFszOSwyXSxbMzksMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbODYsMV0sWzg2LDJdLFszNSw1XSxbMzUsNV0sWzM2LDVdLFszNywyXSxbMzcsNF0sWzM3LDNdLFszNyw1XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzM3LDJdLFszNyw0XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzMzLDVdLFszMyw1XSxbMzQsNV0sWzM0LDVdLFszNCw5XSxbMzQsOV0sWzM0LDddLFszNCw3XSxbOTYsMV0sWzk2LDNdLFs4OSwxXSxbODksM10sWzEwMCwxXSxbMTAwLDJdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbNzYsMV0sWzc2LDFdLFs3NiwxXSxbNzYsMV0sWzc2LDFdLFs3NiwxXSxbODcsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzQ5LDFdLFs0OSwyXSxbOTAsMV0sWzkwLDJdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzQzLDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA1OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA2OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDg6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZmxvd2NoYXJ0Iik7YnJlYWs7Y2FzZSAxMDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzXSE9PVtdJiZhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTI6Y2FzZSA3ODpjYXNlIDgwOmNhc2UgOTI6Y2FzZSAxNDg6Y2FzZSAxNTA6Y2FzZSAxNTE6Y2FzZSA3NDpjYXNlIDE0Njp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE5OnIuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMjA6ci5zZXREaXJlY3Rpb24oYVtzLTFdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPWFbcy0xXS5ub2RlczticmVhaztjYXNlIDQxOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy02XSxhW3MtMV0sYVtzLTRdKTticmVhaztjYXNlIDQyOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy0zXSxhW3MtMV0sYVtzLTNdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLmFkZFN1YkdyYXBoKHZvaWQgMCxhW3MtMV0sdm9pZCAwKTticmVhaztjYXNlIDQ4OnIuYWRkTGluayhhW3MtMl0uc3RtdCxhW3NdLGFbcy0xXSksdGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXS5jb25jYXQoYVtzLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0OTpyLmFkZExpbmsoYVtzLTNdLnN0bXQsYVtzLTFdLGFbcy0yXSksdGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV0uY29uY2F0KGFbcy0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXX07YnJlYWs7Y2FzZSA1MjpjYXNlIDExOTpjYXNlIDEyMTp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPWFbcy00XS5jb25jYXQoYVtzXSk7YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9W2Fbcy0yXV0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzdGFkaXVtIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYwOnRoaXMuJD1hW3MtN10sci5hZGRWZXJ0ZXgoYVtzLTddLGFbcy0xXSwicmVjdCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsT2JqZWN0LmZyb21FbnRyaWVzKFtbYVtzLTVdLGFbcy0zXV1dKSk7YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInJvdW5kIik7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImRpYW1vbmQiKTticmVhaztjYXNlIDY0OnRoaXMuJD1hW3MtNV0sci5hZGRWZXJ0ZXgoYVtzLTVdLGFbcy0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJvZGQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwidHJhcGV6b2lkIik7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDY4OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwibGVhbl9yaWdodCIpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJsZWFuX2xlZnQiKTticmVhaztjYXNlIDcwOnRoaXMuJD1hW3NdLHIuYWRkVmVydGV4KGFbc10pO2JyZWFrO2Nhc2UgNzE6YVtzLTFdLnRleHQ9YVtzXSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNzI6Y2FzZSA3MzphW3MtMl0udGV4dD1hW3MtMV0sdGhpcy4kPWFbcy0yXTticmVhaztjYXNlIDc1OnZhciBjPXIuZGVzdHJ1Y3RMaW5rKGFbc10sYVtzLTJdKTt0aGlzLiQ9e3R5cGU6Yy50eXBlLHN0cm9rZTpjLnN0cm9rZSxsZW5ndGg6Yy5sZW5ndGgsdGV4dDphW3MtMV19O2JyZWFrO2Nhc2UgNzY6Yz1yLmRlc3RydWN0TGluayhhW3NdKSx0aGlzLiQ9e3R5cGU6Yy50eXBlLHN0cm9rZTpjLnN0cm9rZSxsZW5ndGg6Yy5sZW5ndGh9O2JyZWFrO2Nhc2UgNzc6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc5OmNhc2UgOTM6Y2FzZSAxNDk6Y2FzZSAxNDc6dGhpcy4kPWFbcy0xXSsiIithW3NdO2JyZWFrO2Nhc2UgOTQ6Y2FzZSA5NTp0aGlzLiQ9YVtzLTRdLHIuYWRkQ2xhc3MoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgOTY6dGhpcy4kPWFbcy00XSxyLnNldENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk3OmNhc2UgMTA1OnRoaXMuJD1hW3MtMV0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDk4OmNhc2UgMTA2OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMTAwOnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy00XSxhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTA3OnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDEwMjpjYXNlIDEwODp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMTAzOmNhc2UgMTA5OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDQ6Y2FzZSAxMTA6dGhpcy4kPWFbcy01XSxyLnNldExpbmsoYVtzLTVdLGFbcy00XSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTVdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMTE6dGhpcy4kPWFbcy00XSxyLmFkZFZlcnRleChhW3MtMl0sdm9pZCAwLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDExMjpjYXNlIDExNDp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTM6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoW2Fbcy0yXV0sYVtzXSk7YnJlYWs7Y2FzZSAxMTU6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTZdXSxhW3MtMl0pLHIudXBkYXRlTGluayhbYVtzLTZdXSxhW3NdKTticmVhaztjYXNlIDExNjp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy02XSxhW3MtMl0pLHIudXBkYXRlTGluayhhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTRdXSxhW3NdKTticmVhaztjYXNlIDExODp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy00XSxhW3NdKTticmVhaztjYXNlIDEyMDpjYXNlIDEyMjphW3MtMl0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgMTI0OnRoaXMuJD1hW3MtMV0rYVtzXTticmVhaztjYXNlIDE1Mjp0aGlzLiQ9InYiO2JyZWFrO2Nhc2UgMTUzOnRoaXMuJD0iLSI7YnJlYWs7Y2FzZSAxNTQ6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTU1OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE1Njp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxNTc6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9fX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw1OTpkLDYwOnAsNzk6eSw4MDpnLDgxOm0sODI6diw4MzpiLDg0Ol8sODg6eCw5ODp3LDk5OmssMTAyOlQsMTA0OkUsMTA1OkMsMTA5OjQ0LDExMTpTLDExMjpBLDExMzpNLDExNDpOLDExNTpELDExNjpPLDExNzpCLDExODpMLDExOTpJLDEyMDpSfSx7ODo2MSwxMDpbMSw2Ml0sMTU6Rn0sdChbMTAsMTVdLFsyLDZdKSx0KGEsWzIsMTddKSx0KGEsWzIsMThdKSx0KGEsWzIsMTldKSx7MjA6WzEsNjVdLDIxOlsxLDY2XSwyMjpQLDI3OjY0LDMwOjY3fSx0KGosWzIsMTFdKSx0KGosWzIsMTJdKSx0KGosWzIsMTNdKSx0KGosWzIsMTRdKSx0KGosWzIsMTVdKSx0KGosWzIsMTZdKSx7OTo2OSwyMDpZLDIxOnosMjM6VSw0NDo3MCw3MTo3NCw3NDpbMSw3NV0sNzU6WzEsNzZdfSx7OTo3NywyMDpZLDIxOnosMjM6VX0sezk6NzgsMjA6WSwyMTp6LDIzOlV9LHs5Ojc5LDIwOlksMjE6eiwyMzpVfSx7OTo4MCwyMDpZLDIxOnosMjM6VX0sezk6ODEsMjA6WSwyMTp6LDIzOlV9LHs5OjgzLDIwOlksMjE6eiwyMjpbMSw4Ml0sMjM6VX0sdChqLFsyLDQ0XSksdChxLFsyLDUxXSx7MzA6ODQsMjI6UH0pLHsyMjpbMSw4NV19LHsyMjpbMSw4Nl19LHsyMjpbMSw4N119LHsyMjpbMSw4OF19LHsyNjpILDQ3OiQsNTk6Vyw2MDpWLDc3OlsxLDkyXSw4NDpHLDkwOjkxLDkxOlsxLDg5XSw5MzpbMSw5MF0sOTg6WCw5OTpaLDEwMjpRLDEwNDpLLDEwNTpKLDEwODo5NSwxMTA6OTMsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoaixbMiwxNTRdKSx0KGosWzIsMTU1XSksdChqLFsyLDE1Nl0pLHQoaixbMiwxNTddKSx0KG90LFsyLDUyXSx7NDg6WzEsMTExXX0pLHQoc3QsWzIsNzBdLHsxMDk6MTIzLDQwOlsxLDExMl0sNDc6Ziw1MDpbMSwxMTNdLDUyOlsxLDExNF0sNTQ6WzEsMTE1XSw1NjpbMSwxMTZdLDU4OlsxLDExN10sNTk6ZCw2MDpwLDYyOlsxLDExOF0sNjQ6WzEsMTE5XSw2NjpbMSwxMjBdLDY3OlsxLDEyMV0sNjk6WzEsMTIyXSw4NDpfLDg4OngsOTg6dyw5OTprLDEwMjpULDEwNDpFLDEwNTpDLDExNTpELDExNjpPLDExNzpCLDExODpMLDExOTpJLDEyMDpSfSksdChjdCxbMiwxNDZdKSx0KGN0LFsyLDE3MV0pLHQoY3QsWzIsMTcyXSksdChjdCxbMiwxNzNdKSx0KGN0LFsyLDE3NF0pLHQoY3QsWzIsMTc1XSksdChjdCxbMiwxNzZdKSx0KGN0LFsyLDE3N10pLHQoY3QsWzIsMTc4XSksdChjdCxbMiwxNzldKSx0KGN0LFsyLDE4MF0pLHQoY3QsWzIsMTgxXSksdChjdCxbMiwxODJdKSx0KGN0LFsyLDE4M10pLHQoY3QsWzIsMTg0XSksdChjdCxbMiwxODVdKSx0KGN0LFsyLDE4Nl0pLHs5OjEyNCwyMDpZLDIxOnosMjM6VX0sezExOjEyNSwxNDpbMSwxMjZdfSx0KHV0LFsyLDhdKSx0KGEsWzIsMjBdKSx0KGEsWzIsMjZdKSx0KGEsWzIsMjddKSx7MjE6WzEsMTI3XX0sdChsdCxbMiwzNF0sezMwOjEyOCwyMjpQfSksdChqLFsyLDM1XSksezQ1OjEyOSw0Njo0Miw0NzpmLDQ5OjQzLDU5OmQsNjA6cCw4NDpfLDg4OngsOTg6dyw5OTprLDEwMjpULDEwNDpFLDEwNTpDLDEwOTo0NCwxMTU6RCwxMTY6TywxMTc6QiwxMTg6TCwxMTk6SSwxMjA6Un0sdChodCxbMiw0NV0pLHQoaHQsWzIsNDZdKSx0KGh0LFsyLDQ3XSksdChmdCxbMiw3NF0sezcyOjEzMCw2MTpbMSwxMzJdLDczOlsxLDEzMV19KSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTMzLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx0KFs0Nyw1OSw2MCw2MSw3Myw4NCw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0sWzIsNzZdKSx0KGosWzIsMzZdKSx0KGosWzIsMzddKSx0KGosWzIsMzhdKSx0KGosWzIsMzldKSx0KGosWzIsNDBdKSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTU3LDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx0KE90LG8sezE3OjE1OH0pLHQocSxbMiw1MF0sezQ3OkJ0fSksezI2OkgsNDc6JCw1OTpXLDYwOlYsODQ6Ryw5MDoxNjAsOTU6WzEsMTYxXSw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTA4Ojk1LDExMDo5MywxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezg4OlsxLDE2Ml0sOTY6MTYzLDk4OlsxLDE2NF19LHsyNjpILDQ3OiQsNTk6Vyw2MDpWLDg0OkcsODg6WzEsMTY1XSw5MDoxNjYsOTg6WCw5OTpaLDEwMjpRLDEwNDpLLDEwNTpKLDEwODo5NSwxMTA6OTMsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyNjpILDQ3OiQsNTk6Vyw2MDpWLDg0OkcsOTA6MTY3LDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMDg6OTUsMTEwOjkzLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx0KHV0LFsyLDk3XSx7MjI6WzEsMTY4XSw5MjpbMSwxNjldfSksdCh1dCxbMiwxMDFdLHsyMjpbMSwxNzBdfSksdCh1dCxbMiwxMDVdLHsxMDg6OTUsMTEwOjE3MiwyMjpbMSwxNzFdLDI2OkgsNDc6JCw1OTpXLDYwOlYsODQ6Ryw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9KSx0KHV0LFsyLDEwN10sezIyOlsxLDE3M119KSx0KEx0LFsyLDE0OF0pLHQoTHQsWzIsMTUwXSksdChMdCxbMiwxNTFdKSx0KEx0LFsyLDE1Ml0pLHQoTHQsWzIsMTUzXSksdChJdCxbMiwxNThdKSx0KEl0LFsyLDE1OV0pLHQoSXQsWzIsMTYwXSksdChJdCxbMiwxNjFdKSx0KEl0LFsyLDE2Ml0pLHQoSXQsWzIsMTYzXSksdChJdCxbMiwxNjRdKSx0KEl0LFsyLDE2NV0pLHQoSXQsWzIsMTY2XSksdChJdCxbMiwxNjddKSx0KEl0LFsyLDE2OF0pLHQoSXQsWzIsMTY5XSksdChJdCxbMiwxNzBdKSx7NDc6Ziw0OToxNzQsNTk6ZCw2MDpwLDg0Ol8sODg6eCw5ODp3LDk5OmssMTAyOlQsMTA0OkUsMTA1OkMsMTA5OjQ0LDExNTpELDExNjpPLDExNzpCLDExODpMLDExOTpJLDEyMDpSfSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTc1LDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTc3LDQyOm10LDQ3OiQsNTA6WzEsMTc2XSw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxNzgsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxNzksNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxODAsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHs1OTpbMSwxODFdfSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTgyLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTgzLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY0OlsxLDE4NF0sNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxODUsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxODYsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxODcsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoY3QsWzIsMTQ3XSksdChSdCxbMiwzXSksezg6MTg4LDE1OkZ9LHsxNTpbMiw3XX0sdChhLFsyLDI4XSksdChsdCxbMiwzM10pLHQocSxbMiw0OF0sezMwOjE4OSwyMjpQfSksdChmdCxbMiw3MV0sezIyOlsxLDE5MF19KSx7MjI6WzEsMTkxXX0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDM5OjE5Miw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxMzQsNzc6X3QsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc1OlsxLDE5M10sNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoSXQsWzIsNzhdKSx0KEl0LFsyLDgwXSksdChJdCxbMiwxMzZdKSx0KEl0LFsyLDEzN10pLHQoSXQsWzIsMTM4XSksdChJdCxbMiwxMzldKSx0KEl0LFsyLDE0MF0pLHQoSXQsWzIsMTQxXSksdChJdCxbMiwxNDJdKSx0KEl0LFsyLDE0M10pLHQoSXQsWzIsMTQ0XSksdChJdCxbMiwxNDVdKSx0KEl0LFsyLDgxXSksdChJdCxbMiw4Ml0pLHQoSXQsWzIsODNdKSx0KEl0LFsyLDg0XSksdChJdCxbMiw4NV0pLHQoSXQsWzIsODZdKSx0KEl0LFsyLDg3XSksdChJdCxbMiw4OF0pLHQoSXQsWzIsODldKSx0KEl0LFsyLDkwXSksdChJdCxbMiw5MV0pLHs5OjE5NiwyMDpZLDIxOnosMjI6ZHQsMjM6VSwyNDpwdCwyNjp5dCwzODpndCw0MDpbMSwxOTVdLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDE5N10sNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw1OTpkLDYwOnAsNzk6eSw4MDpnLDgxOm0sODI6diw4MzpiLDg0Ol8sODg6eCw5ODp3LDk5OmssMTAyOlQsMTA0OkUsMTA1OkMsMTA5OjQ0LDExMTpTLDExMjpBLDExMzpNLDExNDpOLDExNTpELDExNjpPLDExNzpCLDExODpMLDExOTpJLDEyMDpSfSx7MjI6UCwzMDoxOTh9LHsyMjpbMSwxOTldLDI2OkgsNDc6JCw1OTpXLDYwOlYsODQ6Ryw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTA4Ojk1LDExMDoxNzIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpbMSwyMDBdfSx7MjI6WzEsMjAxXX0sezIyOlsxLDIwMl0sOTk6WzEsMjAzXX0sdChGdCxbMiwxMTldKSx7MjI6WzEsMjA0XX0sezIyOlsxLDIwNV0sMjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMDg6OTUsMTEwOjE3MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOlsxLDIwNl0sMjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMDg6OTUsMTEwOjE3MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezc3OlsxLDIwN119LHQodXQsWzIsOTldLHsyMjpbMSwyMDhdfSksezc3OlsxLDIwOV0sOTQ6WzEsMjEwXX0sezc3OlsxLDIxMV19LHQoTHQsWzIsMTQ5XSksezc3OlsxLDIxMl0sOTQ6WzEsMjEzXX0sdChvdCxbMiw1NF0sezEwOToxMjMsNDc6Ziw1OTpkLDYwOnAsODQ6Xyw4ODp4LDk4OncsOTk6aywxMDI6VCwxMDQ6RSwxMDU6QywxMTU6RCwxMTY6TywxMTc6QiwxMTg6TCwxMTk6SSwxMjA6Un0pLHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MTpbMSwyMTRdLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MjE1LDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDI6bXQsNDc6JCw1MTpbMSwyMTZdLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQyOm10LDQ3OiQsNTM6WzEsMjE3XSw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU1OlsxLDIxOF0sNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDI6bXQsNDc6JCw1NzpbMSwyMTldLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezYwOlsxLDIyMF19LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU5OlcsNjA6Viw2MzpbMSwyMjFdLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjU6WzEsMjIyXSw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDM5OjIyMyw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxMzQsNzc6X3QsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQxOlsxLDIyNF0sNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw2ODpbMSwyMjVdLDcwOlsxLDIyNl0sNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw2ODpbMSwyMjhdLDcwOlsxLDIyN10sNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHs5OjIyOSwyMDpZLDIxOnosMjM6VX0sdChxLFsyLDQ5XSx7NDc6QnR9KSx0KGZ0LFsyLDczXSksdChmdCxbMiw3Ml0pLHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU5OlcsNjA6Viw2MTpbMSwyMzBdLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx0KGZ0LFsyLDc1XSksdChJdCxbMiw3OV0pLHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToyMzEsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoT3Qsbyx7MTc6MjMyfSksdChqLFsyLDQzXSksezQ2OjIzMyw0NzpmLDQ5OjQzLDU5OmQsNjA6cCw4NDpfLDg4OngsOTg6dyw5OTprLDEwMjpULDEwNDpFLDEwNTpDLDEwOTo0NCwxMTU6RCwxMTY6TywxMTc6QiwxMTg6TCwxMTk6SSwxMjA6Un0sezIyOlB0LDU5Omp0LDYwOll0LDc5Onp0LDg5OjIzNCw5NTpVdCw5ODpxdCwxMDA6MjM1LDEwMToyMzYsMTAyOkh0LDEwMzokdCwxMDQ6V3QsMTA1OlZ0LDEwNjpHdH0sezIyOlB0LDU5Omp0LDYwOll0LDc5Onp0LDg5OjI0OCw5NTpVdCw5ODpxdCwxMDA6MjM1LDEwMToyMzYsMTAyOkh0LDEwMzokdCwxMDQ6V3QsMTA1OlZ0LDEwNjpHdH0sezIyOlB0LDU5Omp0LDYwOll0LDc5Onp0LDg5OjI0OSw5NTpVdCw5NzpbMSwyNTBdLDk4OnF0LDEwMDoyMzUsMTAxOjIzNiwxMDI6SHQsMTAzOiR0LDEwNDpXdCwxMDU6VnQsMTA2Okd0fSx7MjI6UHQsNTk6anQsNjA6WXQsNzk6enQsODk6MjUxLDk1OlV0LDk3OlsxLDI1Ml0sOTg6cXQsMTAwOjIzNSwxMDE6MjM2LDEwMjpIdCwxMDM6JHQsMTA0Old0LDEwNTpWdCwxMDY6R3R9LHs5ODpbMSwyNTNdfSx7MjI6UHQsNTk6anQsNjA6WXQsNzk6enQsODk6MjU0LDk1OlV0LDk4OnF0LDEwMDoyMzUsMTAxOjIzNiwxMDI6SHQsMTAzOiR0LDEwNDpXdCwxMDU6VnQsMTA2Okd0fSx7MjI6UHQsNTk6anQsNjA6WXQsNzk6enQsODk6MjU1LDk1OlV0LDk4OnF0LDEwMDoyMzUsMTAxOjIzNiwxMDI6SHQsMTAzOiR0LDEwNDpXdCwxMDU6VnQsMTA2Okd0fSx7MjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDkwOjI1Niw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTA4Ojk1LDExMDo5MywxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sdCh1dCxbMiw5OF0pLHs3NzpbMSwyNTddfSx0KHV0LFsyLDEwMl0sezIyOlsxLDI1OF19KSx0KHV0LFsyLDEwM10pLHQodXQsWzIsMTA2XSksdCh1dCxbMiwxMDhdLHsyMjpbMSwyNTldfSksdCh1dCxbMiwxMDldKSx0KHN0LFsyLDU1XSksezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQyOm10LDQ3OiQsNTE6WzEsMjYwXSw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoc3QsWzIsNjJdKSx0KHN0LFsyLDU3XSksdChzdCxbMiw1OF0pLHQoc3QsWzIsNTldKSx7NTk6WzEsMjYxXX0sdChzdCxbMiw2MV0pLHQoc3QsWzIsNjNdKSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjU6WzEsMjYyXSw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sdChzdCxbMiw2NV0pLHQoc3QsWzIsNjZdKSx0KHN0LFsyLDY4XSksdChzdCxbMiw2N10pLHQoc3QsWzIsNjldKSx0KFJ0LFsyLDRdKSx0KFsyMiw0Nyw1OSw2MCw4NCw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0sWzIsNzddKSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDE6WzEsMjYzXSw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNjRdLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNTk6ZCw2MDpwLDc5OnksODA6Zyw4MTptLDgyOnYsODM6Yiw4NDpfLDg4OngsOTg6dyw5OTprLDEwMjpULDEwNDpFLDEwNTpDLDEwOTo0NCwxMTE6UywxMTI6QSwxMTM6TSwxMTQ6TiwxMTU6RCwxMTY6TywxMTc6QiwxMTg6TCwxMTk6SSwxMjA6Un0sdChvdCxbMiw1M10pLHQodXQsWzIsMTExXSx7OTk6WHR9KSx0KFp0LFsyLDEyMV0sezEwMToyNjYsMjI6UHQsNTk6anQsNjA6WXQsNzk6enQsOTU6VXQsOTg6cXQsMTAyOkh0LDEwMzokdCwxMDQ6V3QsMTA1OlZ0LDEwNjpHdH0pLHQoUXQsWzIsMTIzXSksdChRdCxbMiwxMjVdKSx0KFF0LFsyLDEyNl0pLHQoUXQsWzIsMTI3XSksdChRdCxbMiwxMjhdKSx0KFF0LFsyLDEyOV0pLHQoUXQsWzIsMTMwXSksdChRdCxbMiwxMzFdKSx0KFF0LFsyLDEzMl0pLHQoUXQsWzIsMTMzXSksdChRdCxbMiwxMzRdKSx0KFF0LFsyLDEzNV0pLHQodXQsWzIsMTEyXSx7OTk6WHR9KSx0KHV0LFsyLDExM10sezk5Olh0fSksezIyOlsxLDI2N119LHQodXQsWzIsMTE0XSx7OTk6WHR9KSx7MjI6WzEsMjY4XX0sdChGdCxbMiwxMjBdKSx0KHV0LFsyLDk0XSx7OTk6WHR9KSx0KHV0LFsyLDk1XSx7OTk6WHR9KSx0KHV0LFsyLDk2XSx7MTA4Ojk1LDExMDoxNzIsMjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0pLHQodXQsWzIsMTAwXSksezk0OlsxLDI2OV19LHs5NDpbMSwyNzBdfSx7NTE6WzEsMjcxXX0sezYxOlsxLDI3Ml19LHs2NTpbMSwyNzNdfSx7OToyNzQsMjA6WSwyMTp6LDIzOlV9LHQoaixbMiw0Ml0pLHsyMjpQdCw1OTpqdCw2MDpZdCw3OTp6dCw5NTpVdCw5ODpxdCwxMDA6Mjc1LDEwMToyMzYsMTAyOkh0LDEwMzokdCwxMDQ6V3QsMTA1OlZ0LDEwNjpHdH0sdChRdCxbMiwxMjRdKSx7MjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDkwOjI3Niw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTA4Ojk1LDExMDo5MywxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezI2OkgsNDc6JCw1OTpXLDYwOlYsODQ6Ryw5MDoyNzcsOTg6WCw5OTpaLDEwMjpRLDEwNDpLLDEwNTpKLDEwODo5NSwxMTA6OTMsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQodXQsWzIsMTA0XSksdCh1dCxbMiwxMTBdKSx0KHN0LFsyLDU2XSksezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDM5OjI3OCw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxMzQsNzc6X3QsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sdChzdCxbMiw2NF0pLHQoT3Qsbyx7MTc6Mjc5fSksdChadCxbMiwxMjJdLHsxMDE6MjY2LDIyOlB0LDU5Omp0LDYwOll0LDc5Onp0LDk1OlV0LDk4OnF0LDEwMjpIdCwxMDM6JHQsMTA0Old0LDEwNTpWdCwxMDY6R3R9KSx0KHV0LFsyLDExN10sezEwODo5NSwxMTA6MTcyLDIyOlsxLDI4MF0sMjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0pLHQodXQsWzIsMTE4XSx7MTA4Ojk1LDExMDoxNzIsMjI6WzEsMjgxXSwyNjpILDQ3OiQsNTk6Vyw2MDpWLDg0OkcsOTg6WCw5OTpaLDEwMjpRLDEwNDpLLDEwNTpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSksezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQxOlsxLDI4Ml0sNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDI6WzEsMjgzXSw0MzozMSw0NTozMiw0Njo0Miw0NzpmLDQ5OjQzLDU5OmQsNjA6cCw3OTp5LDgwOmcsODE6bSw4Mjp2LDgzOmIsODQ6Xyw4ODp4LDk4OncsOTk6aywxMDI6VCwxMDQ6RSwxMDU6QywxMDk6NDQsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok4sMTE1OkQsMTE2Ok8sMTE3OkIsMTE4OkwsMTE5OkksMTIwOlJ9LHsyMjpQdCw1OTpqdCw2MDpZdCw3OTp6dCw4OToyODQsOTU6VXQsOTg6cXQsMTAwOjIzNSwxMDE6MjM2LDEwMjpIdCwxMDM6JHQsMTA0Old0LDEwNTpWdCwxMDY6R3R9LHsyMjpQdCw1OTpqdCw2MDpZdCw3OTp6dCw4OToyODUsOTU6VXQsOTg6cXQsMTAwOjIzNSwxMDE6MjM2LDEwMjpIdCwxMDM6JHQsMTA0Old0LDEwNTpWdCwxMDY6R3R9LHQoc3QsWzIsNjBdKSx0KGosWzIsNDFdKSx0KHV0LFsyLDExNV0sezk5Olh0fSksdCh1dCxbMiwxMTZdLHs5OTpYdH0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw5OlsyLDVdLDEwOlsyLDJdLDEyNjpbMiw3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEp0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDEyO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxMztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTA7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE1O2Nhc2UgNDpyZXR1cm4gMTQ7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA4OmNhc2UgMTc6Y2FzZSAyMDpjYXNlIDIzOmNhc2UgMjY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTpyZXR1cm4iU1RSIjtjYXNlIDEwOnJldHVybiA3OTtjYXNlIDExOnJldHVybiA4ODtjYXNlIDEyOnJldHVybiA4MDtjYXNlIDEzOnJldHVybiA5NztjYXNlIDE0OnJldHVybiA4MTtjYXNlIDE1OnJldHVybiA4MjtjYXNlIDE2OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE4OnJldHVybiA5MztjYXNlIDE5OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDkxO2Nhc2UgMjQ6cmV0dXJuIDkyO2Nhc2UgMjU6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI3OnJldHVybiA4MztjYXNlIDI4OmNhc2UgMjk6cmV0dXJuIHQubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMjQ7Y2FzZSAzMDpyZXR1cm4gMzg7Y2FzZSAzMTpyZXR1cm4gNDI7Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNTpyZXR1cm4gOTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI1O2Nhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ3OnJldHVybiAxMTE7Y2FzZSA0ODpyZXR1cm4gMTEyO2Nhc2UgNDk6cmV0dXJuIDExMztjYXNlIDUwOnJldHVybiAxMTQ7Y2FzZSA1MTpyZXR1cm4gOTg7Y2FzZSA1MjpyZXR1cm4gMTA0O2Nhc2UgNTM6cmV0dXJuIDQ4O2Nhc2UgNTQ6cmV0dXJuIDYwO2Nhc2UgNTU6cmV0dXJuIDQ3O2Nhc2UgNTY6cmV0dXJuIDIwO2Nhc2UgNTc6cmV0dXJuIDk5O2Nhc2UgNTg6cmV0dXJuIDExOTtjYXNlIDU5OmNhc2UgNjA6Y2FzZSA2MTpyZXR1cm4gNzU7Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjQ6cmV0dXJuIDc0O2Nhc2UgNjU6cmV0dXJuIDUyO2Nhc2UgNjY6cmV0dXJuIDUzO2Nhc2UgNjc6cmV0dXJuIDU0O2Nhc2UgNjg6cmV0dXJuIDU1O2Nhc2UgNjk6cmV0dXJuIDU2O2Nhc2UgNzA6cmV0dXJuIDU3O2Nhc2UgNzE6cmV0dXJuIDU4O2Nhc2UgNzI6cmV0dXJuIDYyO2Nhc2UgNzM6cmV0dXJuIDYzO2Nhc2UgNzQ6cmV0dXJuIDEwMjtjYXNlIDc1OnJldHVybiAxMDU7Y2FzZSA3NjpyZXR1cm4gMTIwO2Nhc2UgNzc6cmV0dXJuIDExNztjYXNlIDc4OnJldHVybiAxMDY7Y2FzZSA3OTpjYXNlIDgwOnJldHVybiAxMTg7Y2FzZSA4MTpyZXR1cm4gMTA3O2Nhc2UgODI6cmV0dXJuIDY2O2Nhc2UgODM6cmV0dXJuIDg1O2Nhc2UgODQ6cmV0dXJuIlNFUCI7Y2FzZSA4NTpyZXR1cm4gODQ7Y2FzZSA4NjpyZXR1cm4gNTk7Y2FzZSA4NzpyZXR1cm4gNjg7Y2FzZSA4ODpyZXR1cm4gNjc7Y2FzZSA4OTpyZXR1cm4gNzA7Y2FzZSA5MDpyZXR1cm4gNjk7Y2FzZSA5MTpyZXR1cm4gMTE1O2Nhc2UgOTI6cmV0dXJuIDExNjtjYXNlIDkzOnJldHVybiA2MTtjYXNlIDk0OnJldHVybiA1MDtjYXNlIDk1OnJldHVybiA1MTtjYXNlIDk2OnJldHVybiA0MDtjYXNlIDk3OnJldHVybiA0MTtjYXNlIDk4OnJldHVybiA2NDtjYXNlIDk5OnJldHVybiA2NTtjYXNlIDEwMDpyZXR1cm4gMTI2O2Nhc2UgMTAxOnJldHVybiAyMTtjYXNlIDEwMjpyZXR1cm4gMjI7Y2FzZSAxMDM6cmV0dXJuIDIzfX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspW15cbl0qKS8sL14oPzpbXlx9XSUlW15cbl0qKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXFspLywvXig/OlxdXCkpLywvXig/OlxbXFspLywvXig/OlxdXF0pLywvXig/OlxbXHwpLywvXig/OlxbXCgpLywvXig/OlwpXF0pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpbXF9dKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86PCkvLC9eKD86PikvLC9eKD86XF4pLywvXig/OlxcXHwpLywvXig/OnZcYikvLC9eKD86W0EtWmEtel0rKS8sL14oPzpcXFxdKS8sL14oPzpcW1wvKS8sL14oPzpcL1xdKS8sL14oPzpcW1xcKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XCgpLywvXig/OlwpKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86IikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsyMCwyMSwyMl0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE5LDI1LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwM10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIHRlKCl7dGhpcy55eT17fX1yZXR1cm4gS3QubGV4ZXI9SnQsdGUucHJvdG90eXBlPUt0LEt0LlBhcnNlcj10ZSxuZXcgdGV9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big1MzU0KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDk5NTk6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDNdLG49WzEsNV0scj1bNyw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIyLDI5LDM0XSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDE4XSxjPVsxLDE5XSx1PVsxLDIwXSxsPVsxLDIxXSxoPVsxLDIyXSxmPVsxLDIzXSxkPVsxLDI1XSxwPVsxLDI3XSx5PVsxLDMwXSxnPVs1LDcsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMiwyOSwzNF0sbT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsZ2FudHQ6NSxkb2N1bWVudDo2LEVPRjo3LGxpbmU6OCxTUEFDRTo5LHN0YXRlbWVudDoxMCxOTDoxMSxkYXRlRm9ybWF0OjEyLGluY2x1c2l2ZUVuZERhdGVzOjEzLHRvcEF4aXM6MTQsYXhpc0Zvcm1hdDoxNSxleGNsdWRlczoxNixpbmNsdWRlczoxNyx0b2RheU1hcmtlcjoxOCx0aXRsZToxOSxzZWN0aW9uOjIwLGNsaWNrU3RhdGVtZW50OjIxLHRhc2tUeHQ6MjIsdGFza0RhdGE6MjMsb3BlbkRpcmVjdGl2ZToyNCx0eXBlRGlyZWN0aXZlOjI1LGNsb3NlRGlyZWN0aXZlOjI2LCI6IjoyNyxhcmdEaXJlY3RpdmU6MjgsY2xpY2s6MjksY2FsbGJhY2tuYW1lOjMwLGNhbGxiYWNrYXJnczozMSxocmVmOjMyLGNsaWNrU3RhdGVtZW50RGVidWc6MzMsb3Blbl9kaXJlY3RpdmU6MzQsdHlwZV9kaXJlY3RpdmU6MzUsYXJnX2RpcmVjdGl2ZTozNixjbG9zZV9kaXJlY3RpdmU6MzcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6ImdhbnR0Iiw3OiJFT0YiLDk6IlNQQUNFIiwxMToiTkwiLDEyOiJkYXRlRm9ybWF0IiwxMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDE0OiJ0b3BBeGlzIiwxNToiYXhpc0Zvcm1hdCIsMTY6ImV4Y2x1ZGVzIiwxNzoiaW5jbHVkZXMiLDE4OiJ0b2RheU1hcmtlciIsMTk6InRpdGxlIiwyMDoic2VjdGlvbiIsMjI6InRhc2tUeHQiLDIzOiJ0YXNrRGF0YSIsMjc6IjoiLDI5OiJjbGljayIsMzA6ImNhbGxiYWNrbmFtZSIsMzE6ImNhbGxiYWNrYXJncyIsMzI6ImhyZWYiLDM0OiJvcGVuX2RpcmVjdGl2ZSIsMzU6InR5cGVfZGlyZWN0aXZlIiwzNjoiYXJnX2RpcmVjdGl2ZSIsMzc6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbNiwwXSxbNiwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbNCw0XSxbNCw2XSxbMjEsMl0sWzIxLDNdLFsyMSwzXSxbMjEsNF0sWzIxLDNdLFsyMSw0XSxbMjEsMl0sWzMzLDJdLFszMywzXSxbMzMsM10sWzMzLDRdLFszMywzXSxbMzMsNF0sWzMzLDJdLFsyNCwxXSxbMjUsMV0sWzI4LDFdLFsyNiwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDI6cmV0dXJuIGFbcy0xXTtjYXNlIDM6Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6ci5zZXREYXRlRm9ybWF0KGFbc10uc3Vic3RyKDExKSksdGhpcy4kPWFbc10uc3Vic3RyKDExKTticmVhaztjYXNlIDEwOnIuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTE6ci5Ub3BBeGlzKCksdGhpcy4kPWFbc10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTI6ci5zZXRBeGlzRm9ybWF0KGFbc10uc3Vic3RyKDExKSksdGhpcy4kPWFbc10uc3Vic3RyKDExKTticmVhaztjYXNlIDEzOnIuc2V0RXhjbHVkZXMoYVtzXS5zdWJzdHIoOSkpLHRoaXMuJD1hW3NdLnN1YnN0cig5KTticmVhaztjYXNlIDE0OnIuc2V0SW5jbHVkZXMoYVtzXS5zdWJzdHIoOSkpLHRoaXMuJD1hW3NdLnN1YnN0cig5KTticmVhaztjYXNlIDE1OnIuc2V0VG9kYXlNYXJrZXIoYVtzXS5zdWJzdHIoMTIpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMTY6ci5zZXRUaXRsZShhW3NdLnN1YnN0cig2KSksdGhpcy4kPWFbc10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMTc6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxOTpyLmFkZFRhc2soYVtzLTFdLGFbc10pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSxudWxsKTticmVhaztjYXNlIDI0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLG51bGwpLHIuc2V0TGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTJdLGFbcy0xXSksci5zZXRMaW5rKGFbcy0zXSxhW3NdKTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3NdLG51bGwpLHIuc2V0TGluayhhW3MtMl0sYVtzLTFdKTticmVhaztjYXNlIDI4OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMV0sYVtzXSksci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPWFbcy0xXSxyLnNldExpbmsoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzNjp0aGlzLiQ9YVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjpjYXNlIDM0OnRoaXMuJD1hW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDMzOmNhc2UgMzU6dGhpcy4kPWFbcy0zXSsiICIrYVtzLTJdKyIgIithW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAzNzpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzg6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzk6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDQwOnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImdhbnR0Iil9fSx0YWJsZTpbezM6MSw0OjIsNTplLDI0OjQsMzQ6bn0sezE6WzNdfSx7Mzo2LDQ6Miw1OmUsMjQ6NCwzNDpufSx0KHIsWzIsM10sezY6N30pLHsyNTo4LDM1OlsxLDldfSx7MzU6WzIsMzddfSx7MTpbMiwxXX0sezQ6MjYsNzpbMSwxMF0sODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6aSwxMzphLDE0Om8sMTU6cywxNjpjLDE3OnUsMTg6bCwxOTpoLDIwOmYsMjE6MjQsMjI6ZCwyNDo0LDI5OnAsMzQ6bn0sezI2OjI4LDI3OlsxLDI5XSwzNzp5fSx0KFsyNywzN10sWzIsMzhdKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI2LDEwOjMxLDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6aCwyMDpmLDIxOjI0LDIyOmQsMjQ6NCwyOTpwLDM0Om59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsOV0pLHQocixbMiwxMF0pLHQocixbMiwxMV0pLHQocixbMiwxMl0pLHQocixbMiwxM10pLHQocixbMiwxNF0pLHQocixbMiwxNV0pLHQocixbMiwxNl0pLHQocixbMiwxN10pLHQocixbMiwxOF0pLHsyMzpbMSwzMl19LHQocixbMiwyMF0pLHszMDpbMSwzM10sMzI6WzEsMzRdfSx7MTE6WzEsMzVdfSx7Mjg6MzYsMzY6WzEsMzddfSx7MTE6WzIsNDBdfSx0KHIsWzIsNV0pLHQocixbMiwxOV0pLHQocixbMiwyM10sezMxOlsxLDM4XSwzMjpbMSwzOV19KSx0KHIsWzIsMjldLHszMDpbMSw0MF19KSx0KGcsWzIsMjFdKSx7MjY6NDEsMzc6eX0sezM3OlsyLDM5XX0sdChyLFsyLDI0XSx7MzI6WzEsNDJdfSksdChyLFsyLDI1XSksdChyLFsyLDI3XSx7MzE6WzEsNDNdfSksezExOlsxLDQ0XX0sdChyLFsyLDI2XSksdChyLFsyLDI4XSksdChnLFsyLDIyXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDM3XSw2OlsyLDFdLDMwOlsyLDQwXSwzNzpbMiwzOV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx2PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDM0O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzNTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMjc7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM3O2Nhc2UgNDpyZXR1cm4gMzY7Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpicmVhaztjYXNlIDg6cmV0dXJuIDExO2Nhc2UgMTI6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTM6Y2FzZSAxNjpjYXNlIDE5OmNhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDMyO2Nhc2UgMTU6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMzA7Y2FzZSAyMDpyZXR1cm4gMzE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI5O2Nhc2UgMjQ6cmV0dXJuIDU7Y2FzZSAyNTpyZXR1cm4gMTI7Y2FzZSAyNjpyZXR1cm4gMTM7Y2FzZSAyNzpyZXR1cm4gMTQ7Y2FzZSAyODpyZXR1cm4gMTU7Y2FzZSAyOTpyZXR1cm4gMTc7Y2FzZSAzMDpyZXR1cm4gMTY7Y2FzZSAzMTpyZXR1cm4gMTg7Y2FzZSAzMjpyZXR1cm4iZGF0ZSI7Y2FzZSAzMzpyZXR1cm4gMTk7Y2FzZSAzNDpyZXR1cm4gMjA7Y2FzZSAzNTpyZXR1cm4gMjI7Y2FzZSAzNjpyZXR1cm4gMjM7Y2FzZSAzNzpyZXR1cm4gMjc7Y2FzZSAzODpyZXR1cm4gNztjYXNlIDM5OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspKlteXG5dKikvaSwvXig/OlteXH1dJSUqW15cbl0qKS9pLC9eKD86JSUqW15cbl0qW1xuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxOSwyMF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNiwxNywxOF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTUsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzldLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBiKCl7dGhpcy55eT17fX1yZXR1cm4gbS5sZXhlcj12LGIucHJvdG90eXBlPW0sbS5QYXJzZXI9YixuZXcgYn0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDY4NzgpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sMjU1MzoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzIsM10sbj1bMSw3XSxyPVs3LDEyLDE1LDE3LDE5LDIwLDIxXSxpPVs3LDExLDEyLDE1LDE3LDE5LDIwLDIxXSxhPVsyLDIwXSxvPVsxLDMyXSxzPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxHRzo0LCI6Ijo1LGRvY3VtZW50OjYsRU9GOjcsRElSOjgsb3B0aW9uczo5LGJvZHk6MTAsT1BUOjExLE5MOjEyLGxpbmU6MTMsc3RhdGVtZW50OjE0LENPTU1JVDoxNSxjb21taXRfYXJnOjE2LEJSQU5DSDoxNyxJRDoxOCxDSEVDS09VVDoxOSxNRVJHRToyMCxSRVNFVDoyMSxyZXNldF9hcmc6MjIsU1RSOjIzLEhFQUQ6MjQscmVzZXRfcGFyZW50czoyNSxDQVJFVDoyNiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiR0ciLDU6IjoiLDc6IkVPRiIsODoiRElSIiwxMToiT1BUIiwxMjoiTkwiLDE1OiJDT01NSVQiLDE3OiJCUkFOQ0giLDE4OiJJRCIsMTk6IkNIRUNLT1VUIiwyMDoiTUVSR0UiLDIxOiJSRVNFVCIsMjM6IlNUUiIsMjQ6IkhFQUQiLDI2OiJDQVJFVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbOSwyXSxbOSwxXSxbMTAsMF0sWzEwLDJdLFsxMywyXSxbMTMsMV0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTYsMF0sWzE2LDFdLFsyMiwyXSxbMjIsMl0sWzI1LDBdLFsyNSwyXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIGFbcy0xXTtjYXNlIDI6cmV0dXJuIHIuc2V0RGlyZWN0aW9uKGFbcy0zXSksYVtzLTFdO2Nhc2UgNDpyLnNldE9wdGlvbnMoYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDU6YVtzLTFdKz1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDExOnIuY29tbWl0KGFbc10pO2JyZWFrO2Nhc2UgMTI6ci5icmFuY2goYVtzXSk7YnJlYWs7Y2FzZSAxMzpyLmNoZWNrb3V0KGFbc10pO2JyZWFrO2Nhc2UgMTQ6ci5tZXJnZShhW3NdKTticmVhaztjYXNlIDE1OnIucmVzZXQoYVtzXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9IiI7YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE4OnRoaXMuJD1hW3MtMV0rIjoiK2Fbc107YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9YVtzLTFdKyI6IityLmNvdW50LHIuY291bnQ9MDticmVhaztjYXNlIDIwOnIuY291bnQ9MDticmVhaztjYXNlIDIxOnIuY291bnQrPTF9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdLDg6WzEsNF19LHs2OjUsNzplLDk6NiwxMjpufSx7NTpbMSw4XX0sezc6WzEsOV19LHQocixbMiw3XSx7MTA6MTAsMTE6WzEsMTFdfSksdChpLFsyLDZdKSx7NjoxMiw3OmUsOTo2LDEyOm59LHsxOlsyLDFdfSx7NzpbMiw0XSwxMjpbMSwxNV0sMTM6MTMsMTQ6MTQsMTU6WzEsMTZdLDE3OlsxLDE3XSwxOTpbMSwxOF0sMjA6WzEsMTldLDIxOlsxLDIwXX0sdChpLFsyLDVdKSx7NzpbMSwyMV19LHQocixbMiw4XSksezEyOlsxLDIyXX0sdChyLFsyLDEwXSksezEyOlsyLDE2XSwxNjoyMywyMzpbMSwyNF19LHsxODpbMSwyNV19LHsxODpbMSwyNl19LHsxODpbMSwyN119LHsxODpbMSwzMF0sMjI6MjgsMjQ6WzEsMjldfSx7MTpbMiwyXX0sdChyLFsyLDldKSx7MTI6WzIsMTFdfSx7MTI6WzIsMTddfSx7MTI6WzIsMTJdfSx7MTI6WzIsMTNdfSx7MTI6WzIsMTRdfSx7MTI6WzIsMTVdfSx7MTI6YSwyNTozMSwyNjpvfSx7MTI6YSwyNTozMywyNjpvfSx7MTI6WzIsMThdfSx7MTI6YSwyNTozNCwyNjpvfSx7MTI6WzIsMTldfSx7MTI6WzIsMjFdfV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMV0sMjE6WzIsMl0sMjM6WzIsMTFdLDI0OlsyLDE3XSwyNTpbMiwxMl0sMjY6WzIsMTNdLDI3OlsyLDE0XSwyODpbMiwxNV0sMzE6WzIsMThdLDMzOlsyLDE5XSwzNDpbMiwyMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxjPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiAxMjtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpicmVhaztjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA1OnJldHVybiAxNTtjYXNlIDY6cmV0dXJuIDE3O2Nhc2UgNzpyZXR1cm4gMjA7Y2FzZSA4OnJldHVybiAyMTtjYXNlIDk6cmV0dXJuIDE5O2Nhc2UgMTA6Y2FzZSAxMTpyZXR1cm4gODtjYXNlIDEyOnJldHVybiA1O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6dGhpcy5iZWdpbigib3B0aW9ucyIpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gMTE7Y2FzZSAxNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE5OnJldHVybiAyMztjYXNlIDIwOnJldHVybiAxODtjYXNlIDIxOnJldHVybiA3fX0scnVsZXM6Wy9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmdpdEdyYXBoXGIpL2ksL14oPzpjb21taXRcYikvaSwvXig/OmJyYW5jaFxiKS9pLC9eKD86bWVyZ2VcYikvaSwvXig/OnJlc2V0XGIpL2ksL14oPzpjaGVja291dFxiKS9pLC9eKD86TFJcYikvaSwvXig/OkJUXGIpL2ksL14oPzo6KS9pLC9eKD86XF4pL2ksL14oPzpvcHRpb25zXHI/XG4pL2ksL14oPzplbmRccj9cbikvaSwvXig/OlteXG5dK1xyP1xuKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbYS16QS1aXVstX1wuYS16QS1aMC05XSpbLV9hLXpBLVowLTldKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3B0aW9uczp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzE4LDE5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIwLDIxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdSgpe3RoaXMueXk9e319cmV0dXJuIHMubGV4ZXI9Yyx1LnByb3RvdHlwZT1zLHMuUGFyc2VyPXUsbmV3IHV9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big4MTgzKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDY3NjU6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVs2LDksMTBdLG49e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGluZm86NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxzdGF0ZW1lbnQ6OCxOTDo5LHNob3dJbmZvOjEwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJpbmZvIiw2OiJFT0YiLDk6Ik5MIiwxMDoic2hvd0luZm8ifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMV0sWzcsMV0sWzgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7c3dpdGNoKGEubGVuZ3RoLGkpe2Nhc2UgMTpyZXR1cm4gcjtjYXNlIDQ6YnJlYWs7Y2FzZSA2OnIuc2V0SW5mbyghMCl9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0sdChlLFsyLDNdKSx0KGUsWzIsNF0pLHQoZSxbMiw1XSksdChlLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxyPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaSgpe3RoaXMueXk9e319cmV0dXJuIG4ubGV4ZXI9cixpLnByb3RvdHlwZT1uLG4uUGFyc2VyPWksbmV3IGl9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9bigxNDI4KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDcwNjI6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDRdLG49WzEsNV0scj1bMSw2XSxpPVsxLDddLGE9WzEsOV0sbz1bMSwxMSwxMywyMCwyMSwyMiwyM10scz1bMiw1XSxjPVsxLDYsMTEsMTMsMjAsMjEsMjIsMjNdLHU9WzIwLDIxLDIyXSxsPVsyLDhdLGg9WzEsMThdLGY9WzEsMTldLGQ9WzEsMjRdLHA9WzYsMjAsMjEsMjIsMjNdLHk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LGRpcmVjdGl2ZTo1LFBJRTo2LGRvY3VtZW50Ojcsc2hvd0RhdGE6OCxsaW5lOjksc3RhdGVtZW50OjEwLHR4dDoxMSx2YWx1ZToxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxvcGVuRGlyZWN0aXZlOjE1LHR5cGVEaXJlY3RpdmU6MTYsY2xvc2VEaXJlY3RpdmU6MTcsIjoiOjE4LGFyZ0RpcmVjdGl2ZToxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsb3Blbl9kaXJlY3RpdmU6MjMsdHlwZV9kaXJlY3RpdmU6MjQsYXJnX2RpcmVjdGl2ZToyNSxjbG9zZV9kaXJlY3RpdmU6MjYsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlBJRSIsODoic2hvd0RhdGEiLDExOiJ0eHQiLDEyOiJ2YWx1ZSIsMTM6InRpdGxlIiwxNDoidGl0bGVfdmFsdWUiLDE4OiI6IiwyMDoiTkVXTElORSIsMjE6IjsiLDIyOiJFT0YiLDIzOiJvcGVuX2RpcmVjdGl2ZSIsMjQ6InR5cGVfZGlyZWN0aXZlIiwyNToiYXJnX2RpcmVjdGl2ZSIsMjY6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywzXSxbNywwXSxbNywyXSxbOSwyXSxbMTAsMF0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzUsM10sWzUsNV0sWzQsMV0sWzQsMV0sWzQsMV0sWzE1LDFdLFsxNiwxXSxbMTksMV0sWzE3LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyLnNldFNob3dEYXRhKCEwKTticmVhaztjYXNlIDc6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6ci5hZGRTZWN0aW9uKGFbcy0xXSxyLmNsZWFudXBWYWx1ZShhW3NdKSk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE5OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyMDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJwaWUiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjplLDE1OjgsMjA6biwyMTpyLDIyOmksMjM6YX0sezE6WzNdfSx7MzoxMCw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHszOjExLDQ6Miw1OjMsNjplLDE1OjgsMjA6biwyMTpyLDIyOmksMjM6YX0sdChvLHMsezc6MTIsODpbMSwxM119KSx0KGMsWzIsMTRdKSx0KGMsWzIsMTVdKSx0KGMsWzIsMTZdKSx7MTY6MTQsMjQ6WzEsMTVdfSx7MjQ6WzIsMTddfSx7MTpbMiwxXX0sezE6WzIsMl19LHQodSxsLHsxNTo4LDk6MTYsMTA6MTcsNToyMCwxOlsyLDNdLDExOmgsMTM6ZiwyMzphfSksdChvLHMsezc6MjF9KSx7MTc6MjIsMTg6WzEsMjNdLDI2OmR9LHQoWzE4LDI2XSxbMiwxOF0pLHQobyxbMiw2XSksezQ6MjUsMjA6biwyMTpyLDIyOml9LHsxMjpbMSwyNl19LHsxNDpbMSwyN119LHQodSxbMiwxMV0pLHQodSxsLHsxNTo4LDk6MTYsMTA6MTcsNToyMCwxOlsyLDRdLDExOmgsMTM6ZiwyMzphfSksdChwLFsyLDEyXSksezE5OjI4LDI1OlsxLDI5XX0sdChwLFsyLDIwXSksdChvLFsyLDddKSx0KHUsWzIsOV0pLHQodSxbMiwxMF0pLHsxNzozMCwyNjpkfSx7MjY6WzIsMTldfSx0KHAsWzIsMTNdKV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMTddLDEwOlsyLDFdLDExOlsyLDJdLDI5OlsyLDE5XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGc9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMjM7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDI0O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxODtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSA0OnJldHVybiAyNTtjYXNlIDU6Y2FzZSA2OmNhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSA3OnJldHVybiAyMDtjYXNlIDEwOnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgMTI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNDpyZXR1cm4idHh0IjtjYXNlIDE1OnJldHVybiA2O2Nhc2UgMTY6cmV0dXJuIDg7Y2FzZSAxNzpyZXR1cm4idmFsdWUiO2Nhc2UgMTg6cmV0dXJuIDIyfX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86W1xzXSspL2ksL14oPzp0aXRsZVxiKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OnNob3dEYXRhXGIpL2ksL14oPzo6W1xzXSpbXGRdKyg/OlwuW1xkXSspPykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzExXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMiwxNSwxNiwxNywxOF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIG0oKXt0aGlzLnl5PXt9fXJldHVybiB5LmxleGVyPWcsbS5wcm90b3R5cGU9eSx5LlBhcnNlcj1tLG5ldyBtfSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oNDU1MSkucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSwzMTc2Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwzXSxuPVsxLDVdLHI9WzEsMTddLGk9WzIsMTBdLGE9WzEsMjFdLG89WzEsMjJdLHM9WzEsMjNdLGM9WzEsMjRdLHU9WzEsMjVdLGw9WzEsMjZdLGg9WzEsMTldLGY9WzEsMjddLGQ9WzEsMjhdLHA9WzEsMzFdLHk9WzY2LDY3XSxnPVs1LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNTUsNTcsNjYsNjddLG09WzUsNiw4LDE0LDM1LDM2LDM3LDM4LDM5LDQwLDQ4LDY2LDY3XSx2PVsxLDUxXSxiPVsxLDUyXSxfPVsxLDUzXSx4PVsxLDU0XSx3PVsxLDU1XSxrPVsxLDU2XSxUPVsxLDU3XSxFPVs1Nyw1OF0sQz1bMSw2OV0sUz1bMSw2NV0sQT1bMSw2Nl0sTT1bMSw2N10sTj1bMSw2OF0sRD1bMSw3MF0sTz1bMSw3NF0sQj1bMSw3NV0sTD1bMSw3Ml0sST1bMSw3M10sUj1bNSw4LDE0LDM1LDM2LDM3LDM4LDM5LDQwLDQ4LDY2LDY3XSxGPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxkaXJlY3RpdmU6NCxORVdMSU5FOjUsUkQ6NixkaWFncmFtOjcsRU9GOjgsb3BlbkRpcmVjdGl2ZTo5LHR5cGVEaXJlY3RpdmU6MTAsY2xvc2VEaXJlY3RpdmU6MTEsIjoiOjEyLGFyZ0RpcmVjdGl2ZToxMyxvcGVuX2RpcmVjdGl2ZToxNCx0eXBlX2RpcmVjdGl2ZToxNSxhcmdfZGlyZWN0aXZlOjE2LGNsb3NlX2RpcmVjdGl2ZToxNyxyZXF1aXJlbWVudERlZjoxOCxlbGVtZW50RGVmOjE5LHJlbGF0aW9uc2hpcERlZjoyMCxyZXF1aXJlbWVudFR5cGU6MjEscmVxdWlyZW1lbnROYW1lOjIyLFNUUlVDVF9TVEFSVDoyMyxyZXF1aXJlbWVudEJvZHk6MjQsSUQ6MjUsQ09MT05TRVA6MjYsaWQ6MjcsVEVYVDoyOCx0ZXh0OjI5LFJJU0s6MzAscmlza0xldmVsOjMxLFZFUklGWU1USEQ6MzIsdmVyaWZ5VHlwZTozMyxTVFJVQ1RfU1RPUDozNCxSRVFVSVJFTUVOVDozNSxGVU5DVElPTkFMX1JFUVVJUkVNRU5UOjM2LElOVEVSRkFDRV9SRVFVSVJFTUVOVDozNyxQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDozOCxQSFlTSUNBTF9SRVFVSVJFTUVOVDozOSxERVNJR05fQ09OU1RSQUlOVDo0MCxMT1dfUklTSzo0MSxNRURfUklTSzo0MixISUdIX1JJU0s6NDMsVkVSSUZZX0FOQUxZU0lTOjQ0LFZFUklGWV9ERU1PTlNUUkFUSU9OOjQ1LFZFUklGWV9JTlNQRUNUSU9OOjQ2LFZFUklGWV9URVNUOjQ3LEVMRU1FTlQ6NDgsZWxlbWVudE5hbWU6NDksZWxlbWVudEJvZHk6NTAsVFlQRTo1MSx0eXBlOjUyLERPQ1JFRjo1MyxyZWY6NTQsRU5EX0FSUk9XX0w6NTUscmVsYXRpb25zaGlwOjU2LExJTkU6NTcsRU5EX0FSUk9XX1I6NTgsQ09OVEFJTlM6NTksQ09QSUVTOjYwLERFUklWRVM6NjEsU0FUSVNGSUVTOjYyLFZFUklGSUVTOjYzLFJFRklORVM6NjQsVFJBQ0VTOjY1LHVucVN0cmluZzo2NixxU3RyaW5nOjY3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJORVdMSU5FIiw2OiJSRCIsODoiRU9GIiwxMjoiOiIsMTQ6Im9wZW5fZGlyZWN0aXZlIiwxNToidHlwZV9kaXJlY3RpdmUiLDE2OiJhcmdfZGlyZWN0aXZlIiwxNzoiY2xvc2VfZGlyZWN0aXZlIiwyMzoiU1RSVUNUX1NUQVJUIiwyNToiSUQiLDI2OiJDT0xPTlNFUCIsMjg6IlRFWFQiLDMwOiJSSVNLIiwzMjoiVkVSSUZZTVRIRCIsMzQ6IlNUUlVDVF9TVE9QIiwzNToiUkVRVUlSRU1FTlQiLDM2OiJGVU5DVElPTkFMX1JFUVVJUkVNRU5UIiwzNzoiSU5URVJGQUNFX1JFUVVJUkVNRU5UIiwzODoiUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQiLDM5OiJQSFlTSUNBTF9SRVFVSVJFTUVOVCIsNDA6IkRFU0lHTl9DT05TVFJBSU5UIiw0MToiTE9XX1JJU0siLDQyOiJNRURfUklTSyIsNDM6IkhJR0hfUklTSyIsNDQ6IlZFUklGWV9BTkFMWVNJUyIsNDU6IlZFUklGWV9ERU1PTlNUUkFUSU9OIiw0NjoiVkVSSUZZX0lOU1BFQ1RJT04iLDQ3OiJWRVJJRllfVEVTVCIsNDg6IkVMRU1FTlQiLDUxOiJUWVBFIiw1MzoiRE9DUkVGIiw1NToiRU5EX0FSUk9XX0wiLDU3OiJMSU5FIiw1ODoiRU5EX0FSUk9XX1IiLDU5OiJDT05UQUlOUyIsNjA6IkNPUElFUyIsNjE6IkRFUklWRVMiLDYyOiJTQVRJU0ZJRVMiLDYzOiJWRVJJRklFUyIsNjQ6IlJFRklORVMiLDY1OiJUUkFDRVMiLDY2OiJ1bnFTdHJpbmciLDY3OiJxU3RyaW5nIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFszLDRdLFs0LDNdLFs0LDVdLFs5LDFdLFsxMCwxXSxbMTMsMV0sWzExLDFdLFs3LDBdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFsxOCw1XSxbMjQsNV0sWzI0LDVdLFsyNCw1XSxbMjQsNV0sWzI0LDJdLFsyNCwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzMsMV0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzE5LDVdLFs1MCw1XSxbNTAsNV0sWzUwLDJdLFs1MCwxXSxbMjAsNV0sWzIwLDVdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbMjIsMV0sWzIyLDFdLFsyNywxXSxbMjcsMV0sWzI5LDFdLFsyOSwxXSxbNDksMV0sWzQ5LDFdLFs1MiwxXSxbNTIsMV0sWzU0LDFdLFs1NCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDY6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgOTpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJwaWUiKTticmVhaztjYXNlIDEwOnRoaXMuJD1bXTticmVhaztjYXNlIDE2OnIuYWRkUmVxdWlyZW1lbnQoYVtzLTNdLGFbcy00XSk7YnJlYWs7Y2FzZSAxNzpyLnNldE5ld1JlcUlkKGFbcy0yXSk7YnJlYWs7Y2FzZSAxODpyLnNldE5ld1JlcVRleHQoYVtzLTJdKTticmVhaztjYXNlIDE5OnIuc2V0TmV3UmVxUmlzayhhW3MtMl0pO2JyZWFrO2Nhc2UgMjA6ci5zZXROZXdSZXFWZXJpZnlNZXRob2QoYVtzLTJdKTticmVhaztjYXNlIDIzOnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDticmVhaztjYXNlIDI0OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5GVU5DVElPTkFMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI2OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI3OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5QSFlTSUNBTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI4OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDI5OnRoaXMuJD1yLlJpc2tMZXZlbC5MT1dfUklTSzticmVhaztjYXNlIDMwOnRoaXMuJD1yLlJpc2tMZXZlbC5NRURfUklTSzticmVhaztjYXNlIDMxOnRoaXMuJD1yLlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUzticmVhaztjYXNlIDMzOnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0RFTU9OU1RSQVRJT047YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDticmVhaztjYXNlIDM2OnIuYWRkRWxlbWVudChhW3MtM10pO2JyZWFrO2Nhc2UgMzc6ci5zZXROZXdFbGVtZW50VHlwZShhW3MtMl0pO2JyZWFrO2Nhc2UgMzg6ci5zZXROZXdFbGVtZW50RG9jUmVmKGFbcy0yXSk7YnJlYWs7Y2FzZSA0MTpyLmFkZFJlbGF0aW9uc2hpcChhW3MtMl0sYVtzXSxhW3MtNF0pO2JyZWFrO2Nhc2UgNDI6ci5hZGRSZWxhdGlvbnNoaXAoYVtzLTJdLGFbcy00XSxhW3NdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLkNPUElFUzticmVhaztjYXNlIDQ1OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDQ2OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuU0FUSVNGSUVTO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5WRVJJRklFUzticmVhaztjYXNlIDQ4OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDQ5OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuVFJBQ0VTfX0sdGFibGU6W3szOjEsNDoyLDY6ZSw5OjQsMTQ6bn0sezE6WzNdfSx7Mzo3LDQ6Miw1OlsxLDZdLDY6ZSw5OjQsMTQ6bn0sezU6WzEsOF19LHsxMDo5LDE1OlsxLDEwXX0sezE1OlsyLDZdfSx7MzoxMSw0OjIsNjplLDk6NCwxNDpufSx7MTpbMiwyXX0sezQ6MTYsNTpyLDc6MTIsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7MTE6MjksMTI6WzEsMzBdLDE3OnB9LHQoWzEyLDE3XSxbMiw3XSksezE6WzIsMV19LHs4OlsxLDMyXX0sezQ6MTYsNTpyLDc6MzMsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNCw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM1LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezQ6MTYsNTpyLDc6MzYsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNyw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHsyMjozOCw2NjpbMSwzOV0sNjc6WzEsNDBdfSx7NDk6NDEsNjY6WzEsNDJdLDY3OlsxLDQzXX0sezU1OlsxLDQ0XSw1NzpbMSw0NV19LHQoeSxbMiwyM10pLHQoeSxbMiwyNF0pLHQoeSxbMiwyNV0pLHQoeSxbMiwyNl0pLHQoeSxbMiwyN10pLHQoeSxbMiwyOF0pLHQoZyxbMiw1Ml0pLHQoZyxbMiw1M10pLHQobSxbMiw0XSksezEzOjQ2LDE2OlsxLDQ3XX0sdChtLFsyLDldKSx7MTpbMiwzXX0sezg6WzIsMTFdfSx7ODpbMiwxMl19LHs4OlsyLDEzXX0sezg6WzIsMTRdfSx7ODpbMiwxNV19LHsyMzpbMSw0OF19LHsyMzpbMiw1MF19LHsyMzpbMiw1MV19LHsyMzpbMSw0OV19LHsyMzpbMiw1Nl19LHsyMzpbMiw1N119LHs1Njo1MCw1OTp2LDYwOmIsNjE6Xyw2Mjp4LDYzOncsNjQ6ayw2NTpUfSx7NTY6NTgsNTk6diw2MDpiLDYxOl8sNjI6eCw2Mzp3LDY0OmssNjU6VH0sezExOjU5LDE3OnB9LHsxNzpbMiw4XX0sezU6WzEsNjBdfSx7NTpbMSw2MV19LHs1NzpbMSw2Ml19LHQoRSxbMiw0M10pLHQoRSxbMiw0NF0pLHQoRSxbMiw0NV0pLHQoRSxbMiw0Nl0pLHQoRSxbMiw0N10pLHQoRSxbMiw0OF0pLHQoRSxbMiw0OV0pLHs1ODpbMSw2M119LHQobSxbMiw1XSksezU6QywyNDo2NCwyNTpTLDI4OkEsMzA6TSwzMjpOLDM0OkR9LHs1Ok8sMzQ6Qiw1MDo3MSw1MTpMLDUzOkl9LHsyNzo3Niw2NjpmLDY3OmR9LHsyNzo3Nyw2NjpmLDY3OmR9LHQoUixbMiwxNl0pLHsyNjpbMSw3OF19LHsyNjpbMSw3OV19LHsyNjpbMSw4MF19LHsyNjpbMSw4MV19LHs1OkMsMjQ6ODIsMjU6UywyODpBLDMwOk0sMzI6TiwzNDpEfSx0KFIsWzIsMjJdKSx0KFIsWzIsMzZdKSx7MjY6WzEsODNdfSx7MjY6WzEsODRdfSx7NTpPLDM0OkIsNTA6ODUsNTE6TCw1MzpJfSx0KFIsWzIsNDBdKSx0KFIsWzIsNDFdKSx0KFIsWzIsNDJdKSx7Mjc6ODYsNjY6Ziw2NzpkfSx7Mjk6ODcsNjY6WzEsODhdLDY3OlsxLDg5XX0sezMxOjkwLDQxOlsxLDkxXSw0MjpbMSw5Ml0sNDM6WzEsOTNdfSx7MzM6OTQsNDQ6WzEsOTVdLDQ1OlsxLDk2XSw0NjpbMSw5N10sNDc6WzEsOThdfSx0KFIsWzIsMjFdKSx7NTI6OTksNjY6WzEsMTAwXSw2NzpbMSwxMDFdfSx7NTQ6MTAyLDY2OlsxLDEwM10sNjc6WzEsMTA0XX0sdChSLFsyLDM5XSksezU6WzEsMTA1XX0sezU6WzEsMTA2XX0sezU6WzIsNTRdfSx7NTpbMiw1NV19LHs1OlsxLDEwN119LHs1OlsyLDI5XX0sezU6WzIsMzBdfSx7NTpbMiwzMV19LHs1OlsxLDEwOF19LHs1OlsyLDMyXX0sezU6WzIsMzNdfSx7NTpbMiwzNF19LHs1OlsyLDM1XX0sezU6WzEsMTA5XX0sezU6WzIsNThdfSx7NTpbMiw1OV19LHs1OlsxLDExMF19LHs1OlsyLDYwXX0sezU6WzIsNjFdfSx7NTpDLDI0OjExMSwyNTpTLDI4OkEsMzA6TSwzMjpOLDM0OkR9LHs1OkMsMjQ6MTEyLDI1OlMsMjg6QSwzMDpNLDMyOk4sMzQ6RH0sezU6QywyNDoxMTMsMjU6UywyODpBLDMwOk0sMzI6TiwzNDpEfSx7NTpDLDI0OjExNCwyNTpTLDI4OkEsMzA6TSwzMjpOLDM0OkR9LHs1Ok8sMzQ6Qiw1MDoxMTUsNTE6TCw1MzpJfSx7NTpPLDM0OkIsNTA6MTE2LDUxOkwsNTM6SX0sdChSLFsyLDE3XSksdChSLFsyLDE4XSksdChSLFsyLDE5XSksdChSLFsyLDIwXSksdChSLFsyLDM3XSksdChSLFsyLDM4XSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDZdLDc6WzIsMl0sMTE6WzIsMV0sMzI6WzIsM10sMzM6WzIsMTFdLDM0OlsyLDEyXSwzNTpbMiwxM10sMzY6WzIsMTRdLDM3OlsyLDE1XSwzOTpbMiw1MF0sNDA6WzIsNTFdLDQyOlsyLDU2XSw0MzpbMiw1N10sNDc6WzIsOF0sODg6WzIsNTRdLDg5OlsyLDU1XSw5MTpbMiwyOV0sOTI6WzIsMzBdLDkzOlsyLDMxXSw5NTpbMiwzMl0sOTY6WzIsMzNdLDk3OlsyLDM0XSw5ODpbMiwzNV0sMTAwOlsyLDU4XSwxMDE6WzIsNTldLDEwMzpbMiw2MF0sMTA0OlsyLDYxXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFA9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTQ7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDE1O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMTc7Y2FzZSA0OnJldHVybiAxNjtjYXNlIDU6cmV0dXJuIDU7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDY7Y2FzZSAxMTpyZXR1cm4gMjM7Y2FzZSAxMjpyZXR1cm4gMzQ7Y2FzZSAxMzpyZXR1cm4gMjY7Y2FzZSAxNDpyZXR1cm4gMjU7Y2FzZSAxNTpyZXR1cm4gMjg7Y2FzZSAxNjpyZXR1cm4gMzA7Y2FzZSAxNzpyZXR1cm4gMzI7Y2FzZSAxODpyZXR1cm4gMzU7Y2FzZSAxOTpyZXR1cm4gMzY7Y2FzZSAyMDpyZXR1cm4gMzc7Y2FzZSAyMTpyZXR1cm4gMzg7Y2FzZSAyMjpyZXR1cm4gMzk7Y2FzZSAyMzpyZXR1cm4gNDA7Y2FzZSAyNDpyZXR1cm4gNDE7Y2FzZSAyNTpyZXR1cm4gNDI7Y2FzZSAyNjpyZXR1cm4gNDM7Y2FzZSAyNzpyZXR1cm4gNDQ7Y2FzZSAyODpyZXR1cm4gNDU7Y2FzZSAyOTpyZXR1cm4gNDY7Y2FzZSAzMDpyZXR1cm4gNDc7Y2FzZSAzMTpyZXR1cm4gNDg7Y2FzZSAzMjpyZXR1cm4gNTk7Y2FzZSAzMzpyZXR1cm4gNjA7Y2FzZSAzNDpyZXR1cm4gNjE7Y2FzZSAzNTpyZXR1cm4gNjI7Y2FzZSAzNjpyZXR1cm4gNjM7Y2FzZSAzNzpyZXR1cm4gNjQ7Y2FzZSAzODpyZXR1cm4gNjU7Y2FzZSAzOTpyZXR1cm4gNTE7Y2FzZSA0MDpyZXR1cm4gNTM7Y2FzZSA0MTpyZXR1cm4gNTU7Y2FzZSA0MjpyZXR1cm4gNTg7Y2FzZSA0MzpyZXR1cm4gNTc7Y2FzZSA0NDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQ1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ2OnJldHVybiJxU3RyaW5nIjtjYXNlIDQ3OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksNjZ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86JCkvaSwvXig/OnJlcXVpcmVtZW50RGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/OjopL2ksL14oPzppZFxiKS9pLC9eKD86dGV4dFxiKS9pLC9eKD86cmlza1xiKS9pLC9eKD86dmVyaWZ5TWV0aG9kXGIpL2ksL14oPzpyZXF1aXJlbWVudFxiKS9pLC9eKD86ZnVuY3Rpb25hbFJlcXVpcmVtZW50XGIpL2ksL14oPzppbnRlcmZhY2VSZXF1aXJlbWVudFxiKS9pLC9eKD86cGVyZm9ybWFuY2VSZXF1aXJlbWVudFxiKS9pLC9eKD86cGh5c2ljYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86ZGVzaWduQ29uc3RyYWludFxiKS9pLC9eKD86bG93XGIpL2ksL14oPzptZWRpdW1cYikvaSwvXig/OmhpZ2hcYikvaSwvXig/OmFuYWx5c2lzXGIpL2ksL14oPzpkZW1vbnN0cmF0aW9uXGIpL2ksL14oPzppbnNwZWN0aW9uXGIpL2ksL14oPzp0ZXN0XGIpL2ksL14oPzplbGVtZW50XGIpL2ksL14oPzpjb250YWluc1xiKS9pLC9eKD86Y29waWVzXGIpL2ksL14oPzpkZXJpdmVzXGIpL2ksL14oPzpzYXRpc2ZpZXNcYikvaSwvXig/OnZlcmlmaWVzXGIpL2ksL14oPzpyZWZpbmVzXGIpL2ksL14oPzp0cmFjZXNcYikvaSwvXig/OnR5cGVcYikvaSwvXig/OmRvY3JlZlxiKS9pLC9eKD86PC0pL2ksL14oPzotPikvaSwvXig/Oi0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Oltcd11bXlxyXG5ce1w8XD5cLVw9XSopL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ3XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaigpe3RoaXMueXk9e319cmV0dXJuIEYubGV4ZXI9UCxqLnByb3RvdHlwZT1GLEYuUGFyc2VyPWosbmV3IGp9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big4ODAwKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDY4NzY6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsM10scj1bMSw1XSxpPVsxLDddLGE9WzIsNV0sbz1bMSwxNV0scz1bMSwxN10sYz1bMSwxOF0sdT1bMSwxOV0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwyM10sZD1bMSwyOV0scD1bMSwzMF0seT1bMSwzMV0sZz1bMSwzMl0sbT1bMSwzM10sdj1bMSwzNF0sYj1bMSwzN10sXz1bMSwzOF0seD1bMSwzOV0sdz1bMSw0MF0saz1bMSw0MV0sVD1bMSw0Ml0sRT1bMSw0NV0sQz1bMSw0LDUsMTYsMjAsMjIsMjMsMjQsMzAsMzIsMzMsMzQsMzUsMzYsMzgsNDAsNDEsNDIsNDYsNDcsNDgsNDksNTcsNjddLFM9WzEsNThdLEE9WzQsNSwxNiwyMCwyMiwyMywyNCwzMCwzMiwzMywzNCwzNSwzNiwzOCw0Miw0Niw0Nyw0OCw0OSw1Nyw2N10sTT1bNCw1LDE2LDIwLDIyLDIzLDI0LDMwLDMyLDMzLDM0LDM1LDM2LDM4LDQxLDQyLDQ2LDQ3LDQ4LDQ5LDU3LDY3XSxOPVs0LDUsMTYsMjAsMjIsMjMsMjQsMzAsMzIsMzMsMzQsMzUsMzYsMzgsNDAsNDIsNDYsNDcsNDgsNDksNTcsNjddLEQ9WzU1LDU2LDU3XSxPPVsxLDQsNSw3LDE2LDIwLDIyLDIzLDI0LDMwLDMyLDMzLDM0LDM1LDM2LDM4LDQwLDQxLDQyLDQ2LDQ3LDQ4LDQ5LDU3LDY3XSxCPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxkaXJlY3RpdmU6NixTRDo3LGRvY3VtZW50OjgsbGluZTo5LHN0YXRlbWVudDoxMCxvcGVuRGlyZWN0aXZlOjExLHR5cGVEaXJlY3RpdmU6MTIsY2xvc2VEaXJlY3RpdmU6MTMsIjoiOjE0LGFyZ0RpcmVjdGl2ZToxNSxwYXJ0aWNpcGFudDoxNixhY3RvcjoxNyxBUzoxOCxyZXN0T2ZMaW5lOjE5LHBhcnRpY2lwYW50X2FjdG9yOjIwLHNpZ25hbDoyMSxhdXRvbnVtYmVyOjIyLGFjdGl2YXRlOjIzLGRlYWN0aXZhdGU6MjQsbm90ZV9zdGF0ZW1lbnQ6MjUsbGlua3Nfc3RhdGVtZW50OjI2LGxpbmtfc3RhdGVtZW50OjI3LHByb3BlcnRpZXNfc3RhdGVtZW50OjI4LGRldGFpbHNfc3RhdGVtZW50OjI5LHRpdGxlOjMwLHRleHQyOjMxLGxvb3A6MzIsZW5kOjMzLHJlY3Q6MzQsb3B0OjM1LGFsdDozNixlbHNlX3NlY3Rpb25zOjM3LHBhcjozOCxwYXJfc2VjdGlvbnM6MzksYW5kOjQwLGVsc2U6NDEsbm90ZTo0MixwbGFjZW1lbnQ6NDMsb3Zlcjo0NCxhY3Rvcl9wYWlyOjQ1LGxpbmtzOjQ2LGxpbms6NDcscHJvcGVydGllczo0OCxkZXRhaWxzOjQ5LHNwYWNlTGlzdDo1MCwiLCI6NTEsbGVmdF9vZjo1MixyaWdodF9vZjo1MyxzaWduYWx0eXBlOjU0LCIrIjo1NSwiLSI6NTYsQUNUT1I6NTcsU09MSURfT1BFTl9BUlJPVzo1OCxET1RURURfT1BFTl9BUlJPVzo1OSxTT0xJRF9BUlJPVzo2MCxET1RURURfQVJST1c6NjEsU09MSURfQ1JPU1M6NjIsRE9UVEVEX0NST1NTOjYzLFNPTElEX1BPSU5UOjY0LERPVFRFRF9QT0lOVDo2NSxUWFQ6NjYsb3Blbl9kaXJlY3RpdmU6NjcsdHlwZV9kaXJlY3RpdmU6NjgsYXJnX2RpcmVjdGl2ZTo2OSxjbG9zZV9kaXJlY3RpdmU6NzAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw3OiJTRCIsMTQ6IjoiLDE2OiJwYXJ0aWNpcGFudCIsMTg6IkFTIiwxOToicmVzdE9mTGluZSIsMjA6InBhcnRpY2lwYW50X2FjdG9yIiwyMjoiYXV0b251bWJlciIsMjM6ImFjdGl2YXRlIiwyNDoiZGVhY3RpdmF0ZSIsMzA6InRpdGxlIiwzMjoibG9vcCIsMzM6ImVuZCIsMzQ6InJlY3QiLDM1OiJvcHQiLDM2OiJhbHQiLDM4OiJwYXIiLDQwOiJhbmQiLDQxOiJlbHNlIiw0Mjoibm90ZSIsNDQ6Im92ZXIiLDQ2OiJsaW5rcyIsNDc6ImxpbmsiLDQ4OiJwcm9wZXJ0aWVzIiw0OToiZGV0YWlscyIsNTE6IiwiLDUyOiJsZWZ0X29mIiw1MzoicmlnaHRfb2YiLDU1OiIrIiw1NjoiLSIsNTc6IkFDVE9SIiw1ODoiU09MSURfT1BFTl9BUlJPVyIsNTk6IkRPVFRFRF9PUEVOX0FSUk9XIiw2MDoiU09MSURfQVJST1ciLDYxOiJET1RURURfQVJST1ciLDYyOiJTT0xJRF9DUk9TUyIsNjM6IkRPVFRFRF9DUk9TUyIsNjQ6IlNPTElEX1BPSU5UIiw2NToiRE9UVEVEX1BPSU5UIiw2NjoiVFhUIiw2Nzoib3Blbl9kaXJlY3RpdmUiLDY4OiJ0eXBlX2RpcmVjdGl2ZSIsNjk6ImFyZ19kaXJlY3RpdmUiLDcwOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsMl0sWzgsMF0sWzgsMl0sWzksMl0sWzksMV0sWzksMV0sWzYsNF0sWzYsNl0sWzEwLDVdLFsxMCwzXSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsMV0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsMl0sWzEwLDJdLFsxMCwzXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbMzksMV0sWzM5LDRdLFszNywxXSxbMzcsNF0sWzI1LDRdLFsyNSw0XSxbMjYsM10sWzI3LDNdLFsyOCwzXSxbMjksM10sWzUwLDJdLFs1MCwxXSxbNDUsM10sWzQ1LDFdLFs0MywxXSxbNDMsMV0sWzIxLDVdLFsyMSw1XSxbMjEsNF0sWzE3LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzMxLDFdLFsxMSwxXSxbMTIsMV0sWzE1LDFdLFsxMywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDQ6cmV0dXJuIHIuYXBwbHkoYVtzXSksYVtzXTtjYXNlIDU6Y2FzZSA5OnRoaXMuJD1bXTticmVhaztjYXNlIDY6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6Y2FzZSA4OmNhc2UgNDU6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMjphW3MtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGFbcy0zXS5kZXNjcmlwdGlvbj1yLnBhcnNlTWVzc2FnZShhW3MtMV0pLHRoaXMuJD1hW3MtM107YnJlYWs7Y2FzZSAxMzphW3MtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNDphW3MtM10udHlwZT0iYWRkQWN0b3IiLGFbcy0zXS5kZXNjcmlwdGlvbj1yLnBhcnNlTWVzc2FnZShhW3MtMV0pLHRoaXMuJD1hW3MtM107YnJlYWs7Y2FzZSAxNTphW3MtMV0udHlwZT0iYWRkQWN0b3IiLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNzpyLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19O2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9W3t0eXBlOiJzZXRUaXRsZSIsdGV4dDphW3MtMV19XTticmVhaztjYXNlIDI2OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJsb29wU3RhcnQiLGxvb3BUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6YVtzLTJdLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5MT09QX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyNzphW3MtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5SRUNUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI4OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5PUFRfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToib3B0RW5kIixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjk6YVtzLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJhbHRFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDMwOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfQU5EfSxhW3NdXSk7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX0VMU0V9LGFbc11dKTticmVhaztjYXNlIDM2OnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6YVtzLTJdLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDM3OmFbcy0yXT1bXS5jb25jYXQoYVtzLTFdLGFbcy0xXSkuc2xpY2UoMCwyKSxhW3MtMl1bMF09YVtzLTJdWzBdLmFjdG9yLGFbcy0yXVsxXT1hW3MtMl1bMV0uYWN0b3IsdGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpyLlBMQUNFTUVOVC5PVkVSLGFjdG9yOmFbcy0yXS5zbGljZSgwLDIpLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZExpbmtzIixhY3RvcjphW3MtMV0uYWN0b3IsdGV4dDphW3NdfV07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkQUxpbmsiLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDQwOnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGRQcm9wZXJ0aWVzIixhY3RvcjphW3MtMV0uYWN0b3IsdGV4dDphW3NdfV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkRGV0YWlscyIsYWN0b3I6YVtzLTFdLmFjdG9yLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPVthW3MtMl0sYVtzXV07YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9ci5QTEFDRU1FTlQuTEVGVE9GO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXIuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9W2Fbcy00XSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTRdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0zXSxtc2c6YVtzXX0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmFbcy0xXX1dO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPVthW3MtNF0sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy00XS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtM10sbXNnOmFbc119LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOmFbcy00XX1dO2JyZWFrO2Nhc2UgNTA6dGhpcy4kPVthW3MtM10sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy0zXS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtMl0sbXNnOmFbc119XTticmVhaztjYXNlIDUxOnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOmFbc119O2JyZWFrO2Nhc2UgNTI6dGhpcy4kPXIuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDUzOnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9PUEVOO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXIuTElORVRZUEUuU09MSUQ7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9DUk9TUzticmVhaztjYXNlIDU3OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9DUk9TUzticmVhaztjYXNlIDU4OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX1BPSU5UO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXIucGFyc2VNZXNzYWdlKGFbc10udHJpbSgpLnN1YnN0cmluZygxKSk7YnJlYWs7Y2FzZSA2MTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjI6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjM6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDY0OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInNlcXVlbmNlIil9fSx0YWJsZTpbezM6MSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw2NzppfSx7MTpbM119LHszOjgsNDplLDU6biw2OjQsNzpyLDExOjYsNjc6aX0sezM6OSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw2NzppfSx7MzoxMCw0OmUsNTpuLDY6NCw3OnIsMTE6Niw2NzppfSx0KFsxLDQsNSwxNiwyMCwyMiwyMywyNCwzMCwzMiwzNCwzNSwzNiwzOCw0Miw0Niw0Nyw0OCw0OSw1Nyw2N10sYSx7ODoxMX0pLHsxMjoxMiw2ODpbMSwxM119LHs2ODpbMiw2MV19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHsxOlsyLDRdLDQ6byw1OnMsNjozNSw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozNiwyMDp1LDIxOjIwLDIyOmwsMjM6aCwyNDpmLDI1OjI0LDI2OjI1LDI3OjI2LDI4OjI3LDI5OjI4LDMwOmQsMzI6cCwzNDp5LDM1OmcsMzY6bSwzODp2LDQyOmIsNDY6Xyw0Nzp4LDQ4OncsNDk6ayw1NzpULDY3Oml9LHsxMzo0MywxNDpbMSw0NF0sNzA6RX0sdChbMTQsNzBdLFsyLDYyXSksdChDLFsyLDZdKSx7NjozNSwxMDo0NiwxMTo2LDE2OmMsMTc6MzYsMjA6dSwyMToyMCwyMjpsLDIzOmgsMjQ6ZiwyNToyNCwyNjoyNSwyNzoyNiwyODoyNywyOToyOCwzMDpkLDMyOnAsMzQ6eSwzNTpnLDM2Om0sMzg6diw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx0KEMsWzIsOF0pLHQoQyxbMiw5XSksezE3OjQ3LDU3OlR9LHsxNzo0OCw1NzpUfSx7NTpbMSw0OV19LHQoQyxbMiwxN10pLHsxNzo1MCw1NzpUfSx7MTc6NTEsNTc6VH0sezU6WzEsNTJdfSx7NTpbMSw1M119LHs1OlsxLDU0XX0sezU6WzEsNTVdfSx7NTpbMSw1Nl19LHszMTo1Nyw2NjpTfSx7MTk6WzEsNTldfSx7MTk6WzEsNjBdfSx7MTk6WzEsNjFdfSx7MTk6WzEsNjJdfSx7MTk6WzEsNjNdfSx0KEMsWzIsMzFdKSx7NTQ6NjQsNTg6WzEsNjVdLDU5OlsxLDY2XSw2MDpbMSw2N10sNjE6WzEsNjhdLDYyOlsxLDY5XSw2MzpbMSw3MF0sNjQ6WzEsNzFdLDY1OlsxLDcyXX0sezQzOjczLDQ0OlsxLDc0XSw1MjpbMSw3NV0sNTM6WzEsNzZdfSx7MTc6NzcsNTc6VH0sezE3Ojc4LDU3OlR9LHsxNzo3OSw1NzpUfSx7MTc6ODAsNTc6VH0sdChbNSwxOCw1MSw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Nl0sWzIsNTFdKSx7NTpbMSw4MV19LHsxNTo4Miw2OTpbMSw4M119LHs1OlsyLDY0XX0sdChDLFsyLDddKSx7NTpbMSw4NV0sMTg6WzEsODRdfSx7NTpbMSw4N10sMTg6WzEsODZdfSx0KEMsWzIsMTZdKSx7NTpbMSw4OF19LHs1OlsxLDg5XX0sdChDLFsyLDIwXSksdChDLFsyLDIxXSksdChDLFsyLDIyXSksdChDLFsyLDIzXSksdChDLFsyLDI0XSksezU6WzEsOTBdfSx7NTpbMiw2MF19LHQoQSxhLHs4OjkxfSksdChBLGEsezg6OTJ9KSx0KEEsYSx7ODo5M30pLHQoTSxhLHszNzo5NCw4Ojk1fSksdChOLGEsezM5Ojk2LDg6OTd9KSx7MTc6MTAwLDU1OlsxLDk4XSw1NjpbMSw5OV0sNTc6VH0sdChELFsyLDUyXSksdChELFsyLDUzXSksdChELFsyLDU0XSksdChELFsyLDU1XSksdChELFsyLDU2XSksdChELFsyLDU3XSksdChELFsyLDU4XSksdChELFsyLDU5XSksezE3OjEwMSw1NzpUfSx7MTc6MTAzLDQ1OjEwMiw1NzpUfSx7NTc6WzIsNDZdfSx7NTc6WzIsNDddfSx7MzE6MTA0LDY2OlN9LHszMToxMDUsNjY6U30sezMxOjEwNiw2NjpTfSx7MzE6MTA3LDY2OlN9LHQoTyxbMiwxMF0pLHsxMzoxMDgsNzA6RX0sezcwOlsyLDYzXX0sezE5OlsxLDEwOV19LHQoQyxbMiwxM10pLHsxOTpbMSwxMTBdfSx0KEMsWzIsMTVdKSx0KEMsWzIsMThdKSx0KEMsWzIsMTldKSx0KEMsWzIsMjVdKSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsxLDExMV0sMzQ6eSwzNTpnLDM2Om0sMzg6diw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsxLDExMl0sMzQ6eSwzNTpnLDM2Om0sMzg6diw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsxLDExM10sMzQ6eSwzNTpnLDM2Om0sMzg6diw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx7MzM6WzEsMTE0XX0sezQ6byw1OnMsNjozNSw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozNiwyMDp1LDIxOjIwLDIyOmwsMjM6aCwyNDpmLDI1OjI0LDI2OjI1LDI3OjI2LDI4OjI3LDI5OjI4LDMwOmQsMzI6cCwzMzpbMiwzNF0sMzQ6eSwzNTpnLDM2Om0sMzg6diw0MTpbMSwxMTVdLDQyOmIsNDY6Xyw0Nzp4LDQ4OncsNDk6ayw1NzpULDY3Oml9LHszMzpbMSwxMTZdfSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsyLDMyXSwzNDp5LDM1OmcsMzY6bSwzODp2LDQwOlsxLDExN10sNDI6Yiw0NjpfLDQ3OngsNDg6dyw0OTprLDU3OlQsNjc6aX0sezE3OjExOCw1NzpUfSx7MTc6MTE5LDU3OlR9LHszMToxMjAsNjY6U30sezMxOjEyMSw2NjpTfSx7MzE6MTIyLDY2OlN9LHs1MTpbMSwxMjNdLDY2OlsyLDQ1XX0sezU6WzIsMzhdfSx7NTpbMiwzOV19LHs1OlsyLDQwXX0sezU6WzIsNDFdfSx7NTpbMSwxMjRdfSx7NTpbMSwxMjVdfSx7NTpbMSwxMjZdfSx0KEMsWzIsMjZdKSx0KEMsWzIsMjddKSx0KEMsWzIsMjhdKSx0KEMsWzIsMjldKSx7MTk6WzEsMTI3XX0sdChDLFsyLDMwXSksezE5OlsxLDEyOF19LHszMToxMjksNjY6U30sezMxOjEzMCw2NjpTfSx7NTpbMiw1MF19LHs1OlsyLDM2XX0sezU6WzIsMzddfSx7MTc6MTMxLDU3OlR9LHQoTyxbMiwxMV0pLHQoQyxbMiwxMl0pLHQoQyxbMiwxNF0pLHQoTSxhLHs4Ojk1LDM3OjEzMn0pLHQoTixhLHs4Ojk3LDM5OjEzM30pLHs1OlsyLDQ4XX0sezU6WzIsNDldfSx7NjY6WzIsNDRdfSx7MzM6WzIsMzVdfSx7MzM6WzIsMzNdfV0sZGVmYXVsdEFjdGlvbnM6ezc6WzIsNjFdLDg6WzIsMV0sOTpbMiwyXSwxMDpbMiwzXSw0NTpbMiw2NF0sNTg6WzIsNjBdLDc1OlsyLDQ2XSw3NjpbMiw0N10sODM6WzIsNjNdLDEwNDpbMiwzOF0sMTA1OlsyLDM5XSwxMDY6WzIsNDBdLDEwNzpbMiw0MV0sMTIwOlsyLDUwXSwxMjE6WzIsMzZdLDEyMjpbMiwzN10sMTI5OlsyLDQ4XSwxMzA6WzIsNDldLDEzMTpbMiw0NF0sMTMyOlsyLDM1XSwxMzM6WzIsMzNdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCx3LGssVCxFLEMsUyxBLE09e307Oyl7aWYodz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbd10/az10aGlzLmRlZmF1bHRBY3Rpb25zW3ddOihudWxsPT1fJiYoXz1iKCkpLGs9b1t3XSYmb1t3XVtfXSksdm9pZCAwPT09a3x8IWsubGVuZ3RofHwha1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW3ddKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYoa1swXWluc3RhbmNlb2YgQXJyYXkmJmsubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit3KyIsIHRva2VuOiAiK18pO3N3aXRjaChrWzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2goa1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LGtbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw2NztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNjg7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE0O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw3MDtjYXNlIDQ6cmV0dXJuIDY5O2Nhc2UgNTpjYXNlIDM5OmNhc2UgNTI6cmV0dXJuIDU7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwxNjtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIwO2Nhc2UgMTM6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSx0aGlzLmJlZ2luKCJBTElBUyIpLDU3O2Nhc2UgMTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiTElORSIpLDE4O2Nhc2UgMTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNTtjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzI7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM0O2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNTtjYXNlIDE5OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzY7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQxO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzODtjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDA7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE5O2Nhc2UgMjQ6cmV0dXJuIDMzO2Nhc2UgMjU6cmV0dXJuIDUyO2Nhc2UgMjY6cmV0dXJuIDUzO2Nhc2UgMjc6cmV0dXJuIDQ2O2Nhc2UgMjg6cmV0dXJuIDQ3O2Nhc2UgMjk6cmV0dXJuIDQ4O2Nhc2UgMzA6cmV0dXJuIDQ5O2Nhc2UgMzE6cmV0dXJuIDQ0O2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7Y2FzZSAzNDpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyNDtjYXNlIDM1OnJldHVybiAzMDtjYXNlIDM2OnJldHVybiA3O2Nhc2UgMzc6cmV0dXJuIDIyO2Nhc2UgMzg6cmV0dXJuIDUxO2Nhc2UgNDA6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSw1NztjYXNlIDQxOnJldHVybiA2MDtjYXNlIDQyOnJldHVybiA2MTtjYXNlIDQzOnJldHVybiA1ODtjYXNlIDQ0OnJldHVybiA1OTtjYXNlIDQ1OnJldHVybiA2MjtjYXNlIDQ2OnJldHVybiA2MztjYXNlIDQ3OnJldHVybiA2NDtjYXNlIDQ4OnJldHVybiA2NTtjYXNlIDQ5OnJldHVybiA2NjtjYXNlIDUwOnJldHVybiA1NTtjYXNlIDUxOnJldHVybiA1NjtjYXNlIDUzOnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpwYXJ0aWNpcGFudFxiKS9pLC9eKD86YWN0b3JcYikvaSwvXig/OlteXC0+OlxuLDtdKz8oPz0oKD8hXG4pXHMpK2FzKD8hXG4pXHN8WyNcbjtdfCQpKS9pLC9eKD86YXNcYikvaSwvXig/Oig/OikpL2ksL14oPzpsb29wXGIpL2ksL14oPzpyZWN0XGIpL2ksL14oPzpvcHRcYikvaSwvXig/OmFsdFxiKS9pLC9eKD86ZWxzZVxiKS9pLC9eKD86cGFyXGIpL2ksL14oPzphbmRcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzpzZXF1ZW5jZURpYWdyYW1cYikvaSwvXig/OmF1dG9udW1iZXJcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1wtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10rKS9pLC9eKD86XCspL2ksL14oPzotKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMSw4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzLDhdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNCw4XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbNyw4LDEzXSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbNyw4LDE0LDE1XSxpbmNsdXNpdmU6ITF9LExJTkU6e3J1bGVzOls3LDgsMjNdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDgsOSwxMCwxMSwxMiwxNiwxNywxOCwxOSwyMCwyMSwyMiwyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1M10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIEkoKXt0aGlzLnl5PXt9fXJldHVybiBCLmxleGVyPUwsSS5wcm90b3R5cGU9QixCLlBhcnNlcj1JLG5ldyBJfSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oMTk5MykucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSwzNTg0Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMTldLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMzBdLGQ9WzEsMjNdLHA9WzEsMjRdLHk9WzEsMjVdLGc9WzEsMjZdLG09WzEsMjddLHY9WzEsMzJdLGI9WzEsMzNdLF89WzEsMzRdLHg9WzEsMzVdLHc9WzEsMzFdLGs9WzEsMzhdLFQ9WzEsNCw1LDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxFPVsxLDQsNSwxMiwxMywxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sQz1bMSw0LDUsNywxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sUz1bNCw1LDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxBPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5MOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsaWRTdGF0ZW1lbnQ6MTEsREVTQ1I6MTIsIi0tXHgzZSI6MTMsSElERV9FTVBUWToxNCxzY2FsZToxNSxXSURUSDoxNixDT01QT1NJVF9TVEFURToxNyxTVFJVQ1RfU1RBUlQ6MTgsU1RSVUNUX1NUT1A6MTksU1RBVEVfREVTQ1I6MjAsQVM6MjEsSUQ6MjIsRk9SSzoyMyxKT0lOOjI0LENIT0lDRToyNSxDT05DVVJSRU5UOjI2LG5vdGU6Mjcsbm90ZVBvc2l0aW9uOjI4LE5PVEVfVEVYVDoyOSxkaXJlY3Rpb246MzAsb3BlbkRpcmVjdGl2ZTozMSx0eXBlRGlyZWN0aXZlOjMyLGNsb3NlRGlyZWN0aXZlOjMzLCI6IjozNCxhcmdEaXJlY3RpdmU6MzUsZGlyZWN0aW9uX3RiOjM2LGRpcmVjdGlvbl9idDozNyxkaXJlY3Rpb25fcmw6MzgsZGlyZWN0aW9uX2xyOjM5LGVvbDo0MCwiOyI6NDEsRURHRV9TVEFURTo0MixsZWZ0X29mOjQzLHJpZ2h0X29mOjQ0LG9wZW5fZGlyZWN0aXZlOjQ1LHR5cGVfZGlyZWN0aXZlOjQ2LGFyZ19kaXJlY3RpdmU6NDcsY2xvc2VfZGlyZWN0aXZlOjQ4LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkwiLDc6IlNEIiwxMjoiREVTQ1IiLDEzOiItLVx4M2UiLDE0OiJISURFX0VNUFRZIiwxNToic2NhbGUiLDE2OiJXSURUSCIsMTc6IkNPTVBPU0lUX1NUQVRFIiwxODoiU1RSVUNUX1NUQVJUIiwxOToiU1RSVUNUX1NUT1AiLDIwOiJTVEFURV9ERVNDUiIsMjE6IkFTIiwyMjoiSUQiLDIzOiJGT1JLIiwyNDoiSk9JTiIsMjU6IkNIT0lDRSIsMjY6IkNPTkNVUlJFTlQiLDI3OiJub3RlIiwyOToiTk9URV9URVhUIiwzNDoiOiIsMzY6ImRpcmVjdGlvbl90YiIsMzc6ImRpcmVjdGlvbl9idCIsMzg6ImRpcmVjdGlvbl9ybCIsMzk6ImRpcmVjdGlvbl9sciIsNDE6IjsiLDQyOiJFREdFX1NUQVRFIiw0MzoibGVmdF9vZiIsNDQ6InJpZ2h0X29mIiw0NToib3Blbl9kaXJlY3RpdmUiLDQ2OiJ0eXBlX2RpcmVjdGl2ZSIsNDc6ImFyZ19kaXJlY3RpdmUiLDQ4OiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsMl0sWzgsMF0sWzgsMl0sWzksMl0sWzksMV0sWzksMV0sWzEwLDFdLFsxMCwyXSxbMTAsM10sWzEwLDRdLFsxMCwxXSxbMTAsMl0sWzEwLDFdLFsxMCw0XSxbMTAsM10sWzEwLDZdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbMTAsMV0sWzYsM10sWzYsNV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzMwLDFdLFs0MCwxXSxbNDAsMV0sWzExLDFdLFsxMSwxXSxbMjgsMV0sWzI4LDFdLFszMSwxXSxbMzIsMV0sWzM1LDFdLFszMywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDQ6cmV0dXJuIHIuc2V0Um9vdERvYyhhW3NdKSxhW3NdO2Nhc2UgNTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA2OiJubCIhPWFbc10mJihhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdKTticmVhaztjYXNlIDc6Y2FzZSA4OmNhc2UgMzY6Y2FzZSAzNzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDExOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpyLnRyaW1Db2xvbihhW3NdKX07YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtMl0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9fTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTp7c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sc3RhdGUyOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxkZXNjcmlwdGlvbjphW3NdLnN1YnN0cigxKS50cmltKCl9O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMTg6dmFyIGM9YVtzXSx1PWFbcy0yXS50cmltKCk7aWYoYVtzXS5tYXRjaCgiOiIpKXt2YXIgbD1hW3NdLnNwbGl0KCI6Iik7Yz1sWzBdLHU9W3UsbFsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Yyx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjp1fTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjphW3MtNV0sZG9jOmFbcy0xXX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDIzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOnIuZ2V0RGl2aWRlcklkKCksdHlwZToiZGl2aWRlciJ9O2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjphW3MtMl0udHJpbSgpLHRleHQ6YVtzXS50cmltKCl9fTticmVhaztjYXNlIDMwOnIuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDMxOnIuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDMyOnIuc2V0RGlyZWN0aW9uKCJSTCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDMzOnIuc2V0RGlyZWN0aW9uKCJMUiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVhaztjYXNlIDQwOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0MTpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0MjphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDM6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwic3RhdGUiKX19LHRhYmxlOlt7MzoxLDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHsxOlszXX0sezM6OCw0OmUsNTpuLDY6NCw3OnIsMzE6Niw0NTppfSx7Mzo5LDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHszOjEwLDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHQoWzEsNCw1LDE0LDE1LDE3LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxhLHs4OjExfSksezMyOjEyLDQ2OlsxLDEzXX0sezQ2OlsyLDQwXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0sezE6WzIsNF0sNDpvLDU6cyw2OjI4LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6bSwzMDoyOSwzMTo2LDM2OnYsMzc6YiwzODpfLDM5OngsNDI6dyw0NTppfSx7MzM6MzYsMzQ6WzEsMzddLDQ4Omt9LHQoWzM0LDQ4XSxbMiw0MV0pLHQoVCxbMiw2XSksezY6MjgsMTA6MzksMTE6MTgsMTQ6YywxNTp1LDE3OmwsMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6bSwzMDoyOSwzMTo2LDM2OnYsMzc6YiwzODpfLDM5OngsNDI6dyw0NTppfSx0KFQsWzIsOF0pLHQoVCxbMiw5XSksdChULFsyLDEwXSx7MTI6WzEsNDBdLDEzOlsxLDQxXX0pLHQoVCxbMiwxNF0pLHsxNjpbMSw0Ml19LHQoVCxbMiwxNl0sezE4OlsxLDQzXX0pLHsyMTpbMSw0NF19LHQoVCxbMiwyMF0pLHQoVCxbMiwyMV0pLHQoVCxbMiwyMl0pLHQoVCxbMiwyM10pLHsyODo0NSwyOTpbMSw0Nl0sNDM6WzEsNDddLDQ0OlsxLDQ4XX0sdChULFsyLDI2XSksdChULFsyLDI3XSksdChFLFsyLDM2XSksdChFLFsyLDM3XSksdChULFsyLDMwXSksdChULFsyLDMxXSksdChULFsyLDMyXSksdChULFsyLDMzXSksdChDLFsyLDI4XSksezM1OjQ5LDQ3OlsxLDUwXX0sdChDLFsyLDQzXSksdChULFsyLDddKSx0KFQsWzIsMTFdKSx7MTE6NTEsMjI6Ziw0Mjp3fSx0KFQsWzIsMTVdKSx0KFMsYSx7ODo1Mn0pLHsyMjpbMSw1M119LHsyMjpbMSw1NF19LHsyMTpbMSw1NV19LHsyMjpbMiwzOF19LHsyMjpbMiwzOV19LHszMzo1Niw0ODprfSx7NDg6WzIsNDJdfSx0KFQsWzIsMTJdLHsxMjpbMSw1N119KSx7NDpvLDU6cyw2OjI4LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMTk6WzEsNThdLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6eSwyNjpnLDI3Om0sMzA6MjksMzE6NiwzNjp2LDM3OmIsMzg6XywzOTp4LDQyOncsNDU6aX0sdChULFsyLDE4XSx7MTg6WzEsNTldfSksezI5OlsxLDYwXX0sezIyOlsxLDYxXX0sdChDLFsyLDI5XSksdChULFsyLDEzXSksdChULFsyLDE3XSksdChTLGEsezg6NjJ9KSx0KFQsWzIsMjRdKSx0KFQsWzIsMjVdKSx7NDpvLDU6cyw2OjI4LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMTk6WzEsNjNdLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6eSwyNjpnLDI3Om0sMzA6MjksMzE6NiwzNjp2LDM3OmIsMzg6XywzOTp4LDQyOncsNDU6aX0sdChULFsyLDE5XSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDQwXSw4OlsyLDFdLDk6WzIsMl0sMTA6WzIsM10sNDc6WzIsMzhdLDQ4OlsyLDM5XSw1MDpbMiw0Ml19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxNPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOmNhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMTpjYXNlIDI3OnJldHVybiAzNztjYXNlIDI6Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAzOmNhc2UgMjk6cmV0dXJuIDM5O2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw0NTtjYXNlIDU6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNDY7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDM0O2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw0ODtjYXNlIDg6cmV0dXJuIDQ3O2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTI6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAzOTpjYXNlIDQ1OmJyZWFrO2Nhc2UgMTE6Y2FzZSA1OTpyZXR1cm4gNTtjYXNlIDE2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU0NBTEUiKSwxNTtjYXNlIDE3OnJldHVybiAxNjtjYXNlIDE4OmNhc2UgMzM6Y2FzZSAzNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDIwOmNhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjM7Y2FzZSAyMTpjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMjI6Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjU7Y2FzZSAzMDp0aGlzLmJlZ2luKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIlNUQVRFX0lEIiksIkFTIjtjYXNlIDMyOmNhc2UgNDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgMzQ6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDM1OnJldHVybiAxNztjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE4O2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJOT1RFIiksMjc7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNDM7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNDQ7Y2FzZSA0Mzp0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEUiKTticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEVfSUQiKSwiQVMiO2Nhc2UgNDY6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMjtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwyOTtjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI5O2Nhc2UgNTE6Y2FzZSA1MjpyZXR1cm4gNztjYXNlIDUzOnJldHVybiAxNDtjYXNlIDU0OnJldHVybiA0MjtjYXNlIDU1OnJldHVybiAyMjtjYXNlIDU2OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksMTI7Y2FzZSA1NzpyZXR1cm4gMTM7Y2FzZSA1ODpyZXR1cm4gMjY7Y2FzZSA2MDpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXHNdKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/Oltcbl0pL2ksL14oPzpub3RlXHMrKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OiIpL2ksL14oPzpccyphc1xzKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cbl0qKS9pLC9eKD86XHMqW146XG5cc1wtXSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzpbXHNcU10qP2VuZCBub3RlXGIpL2ksL14oPzpzdGF0ZURpYWdyYW1ccyspL2ksL14oPzpzdGF0ZURpYWdyYW0tdjJccyspL2ksL14oPzpoaWRlIGVtcHR5IGRlc2NyaXB0aW9uXGIpL2ksL14oPzpcW1wqXF0pL2ksL14oPzpbXjpcblxzXC1ce10rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86LS0+KS9pLC9eKD86LS0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7TElORTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGNsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDgsMTMsMTRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDcsMTMsMTRdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1LDEzLDE0XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzEzLDE0LDE5LDI2LDI3LDI4LDI5LDM4LDM5LDQwLDU0LDU1LDU2LDU3LDU4XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls0N10saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNDksNTBdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzQ4XSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls0MSw0Miw0M10saW5jbHVzaXZlOiExfSxTQ0FMRTp7cnVsZXM6WzE3LDE4XSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFX0lEOntydWxlczpbMzJdLGluY2x1c2l2ZTohMX0sU1RBVEVfU1RSSU5HOntydWxlczpbMzMsMzRdLGluY2x1c2l2ZTohMX0sRk9SS19TVEFURTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURTp7cnVsZXM6WzEzLDE0LDIwLDIxLDIyLDIzLDI0LDI1LDMwLDMxLDM1LDM2LDM3XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw5LDEwLDExLDEyLDE0LDE1LDE2LDE5LDM3LDQwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU5LDYwXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gTigpe3RoaXMueXk9e319cmV0dXJuIEEubGV4ZXI9TSxOLnByb3RvdHlwZT1BLEEuUGFyc2VyPU4sbmV3IE59KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9bigzMDY5KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDk3NjM6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDE3LDE4LDE5LDIxXSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDIxXSxjPVs0LDYsOSwxMSwxNywxOCwxOSwyMV0sdT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsdGl0bGU6MTcsc2VjdGlvbjoxOCx0YXNrTmFtZToxOSx0YXNrRGF0YToyMCxvcGVuX2RpcmVjdGl2ZToyMSx0eXBlX2RpcmVjdGl2ZToyMixhcmdfZGlyZWN0aXZlOjIzLGNsb3NlX2RpcmVjdGl2ZToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiam91cm5leSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwxNzoidGl0bGUiLDE4OiJzZWN0aW9uIiwxOToidGFza05hbWUiLDIwOiJ0YXNrRGF0YSIsMjE6Im9wZW5fZGlyZWN0aXZlIiwyMjoidHlwZV9kaXJlY3RpdmUiLDIzOiJhcmdfZGlyZWN0aXZlIiwyNDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBhW3MtMV07Y2FzZSAzOmNhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMTpyLnNldFRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxMjpyLmFkZFNlY3Rpb24oYVtzXS5zdWJzdHIoOCkpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOnIuYWRkVGFzayhhW3MtMV0sYVtzXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDE1OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTg6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiam91cm5leSIpfX0sdGFibGU6W3szOjEsNDplLDc6MywxMjo0LDIxOm59LHsxOlszXX0sdChyLFsyLDNdLHs1OjZ9KSx7Mzo3LDQ6ZSw3OjMsMTI6NCwyMTpufSx7MTM6OCwyMjpbMSw5XX0sezIyOlsyLDE1XX0sezY6WzEsMTBdLDc6MTgsODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6NCwxNzppLDE4OmEsMTk6bywyMTpufSx7MTpbMiwyXX0sezE0OjE5LDE1OlsxLDIwXSwyNDpzfSx0KFsxNSwyNF0sWzIsMTZdKSx0KHIsWzIsOF0sezE6WzIsMV19KSx0KHIsWzIsNF0pLHs3OjE4LDEwOjIyLDEyOjQsMTc6aSwxODphLDE5Om8sMjE6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHQocixbMiwxMl0pLHsyMDpbMSwyM119LHQocixbMiwxNF0pLHsxMTpbMSwyNF19LHsxNjoyNSwyMzpbMSwyNl19LHsxMTpbMiwxOF19LHQocixbMiw1XSksdChyLFsyLDEzXSksdChjLFsyLDldKSx7MTQ6MjcsMjQ6c30sezI0OlsyLDE3XX0sezExOlsxLDI4XX0sdChjLFsyLDEwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDE1XSw3OlsyLDJdLDIxOlsyLDE4XSwyNjpbMiwxN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxsPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDIxO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwyMjtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDI0O2Nhc2UgNDpyZXR1cm4gMjM7Y2FzZSA1OmNhc2UgNjpjYXNlIDg6Y2FzZSA5OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMTE7Y2FzZSAxMDpyZXR1cm4gNDtjYXNlIDExOnJldHVybiAxNztjYXNlIDEyOnJldHVybiAxODtjYXNlIDEzOnJldHVybiAxOTtjYXNlIDE0OnJldHVybiAyMDtjYXNlIDE1OnJldHVybiAxNTtjYXNlIDE2OnJldHVybiA2O2Nhc2UgMTc6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxN10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGgoKXt0aGlzLnl5PXt9fXJldHVybiB1LmxleGVyPWwsaC5wcm90b3R5cGU9dSx1LlBhcnNlcj1oLG5ldyBofSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oOTE0MykucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSw5NjA5OnQ9PnsidXNlIHN0cmljdCI7dmFyIGU9L14oJTIwfFxzKSooamF2YXNjcmlwdHxkYXRhKS9pbSxuPS9bXlx4MjAtXHg3RV0vZ2ltLHI9L14oW146XSspOi9nbSxpPVsiLiIsIi8iXTt0LmV4cG9ydHM9e3Nhbml0aXplVXJsOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJhYm91dDpibGFuayI7dmFyIGEsbyxzPXQucmVwbGFjZShuLCIiKS50cmltKCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLmluZGV4T2YodFswXSk+LTF9KHMpP3M6KG89cy5tYXRjaChyKSk/KGE9b1swXSxlLnRlc3QoYSk/ImFib3V0OmJsYW5rIjpzKToiYWJvdXQ6YmxhbmsifX19LDM4NDE6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmludGVyc2VjdChlKX19LDc0NTg6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQoZSx7ZGVmYXVsdDooKT0+bEN9KTt2YXIgcj1uKDE5NDEpLGk9bi5uKHIpLGE9e2RlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LG89e2RlYnVnOmZ1bmN0aW9uKCl7fSxpbmZvOmZ1bmN0aW9uKCl7fSx3YXJuOmZ1bmN0aW9uKCl7fSxlcnJvcjpmdW5jdGlvbigpe30sZmF0YWw6ZnVuY3Rpb24oKXt9fSxzPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJmYXRhbCI7aXNOYU4odCkmJih0PXQudG9Mb3dlckNhc2UoKSx2b2lkIDAhPT1hW3RdJiYodD1hW3RdKSksby50cmFjZT1mdW5jdGlvbigpe30sby5kZWJ1Zz1mdW5jdGlvbigpe30sby5pbmZvPWZ1bmN0aW9uKCl7fSxvLndhcm49ZnVuY3Rpb24oKXt9LG8uZXJyb3I9ZnVuY3Rpb24oKXt9LG8uZmF0YWw9ZnVuY3Rpb24oKXt9LHQ8PWEuZmF0YWwmJihvLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsYygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNW0iLGMoIkZBVEFMIikpKSx0PD1hLmVycm9yJiYoby5lcnJvcj1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLGMoIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzFtIixjKCJFUlJPUiIpKSksdDw9YS53YXJuJiYoby53YXJuPWNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4uYmluZChjb25zb2xlLGMoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szM20iLGMoIldBUk4iKSkpLHQ8PWEuaW5mbyYmKG8uaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxjKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzRtIixjKCJJTkZPIikpKSx0PD1hLmRlYnVnJiYoby5kZWJ1Zz1jb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLGMoIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMybSIsYygiREVCVUciKSkpfSxjPWZ1bmN0aW9uKHQpe3ZhciBlPWkoKSgpLmZvcm1hdCgic3MuU1NTIik7cmV0dXJuIiVjIi5jb25jYXQoZSwiIDogIikuY29uY2F0KHQsIiA6ICIpfTtmdW5jdGlvbiB1KHQsZSl7bGV0IG47aWYodm9pZCAwPT09ZSlmb3IoY29uc3QgZSBvZiB0KW51bGwhPWUmJihuPGV8fHZvaWQgMD09PW4mJmU+PWUpJiYobj1lKTtlbHNle2xldCByPS0xO2ZvcihsZXQgaSBvZiB0KW51bGwhPShpPWUoaSwrK3IsdCkpJiYobjxpfHx2b2lkIDA9PT1uJiZpPj1pKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gbCh0LGUpe2xldCBuO2lmKHZvaWQgMD09PWUpZm9yKGNvbnN0IGUgb2YgdCludWxsIT1lJiYobj5lfHx2b2lkIDA9PT1uJiZlPj1lKSYmKG49ZSk7ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCludWxsIT0oaT1lKGksKytyLHQpKSYmKG4+aXx8dm9pZCAwPT09biYmaT49aSkmJihuPWkpfXJldHVybiBufWZ1bmN0aW9uIGgodCl7cmV0dXJuIHR9dmFyIGY9MWUtNjtmdW5jdGlvbiBkKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0KyIsMCkifWZ1bmN0aW9uIHAodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrdCsiKSJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZT0+K3QoZSl9ZnVuY3Rpb24gZyh0LGUpe3JldHVybiBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0yKmUpLzIsdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxuPT4rdChuKStlfWZ1bmN0aW9uIG0oKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gdih0LGUpe3ZhciBuPVtdLHI9bnVsbCxpPW51bGwsYT02LG89NixzPTMsYz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LHU9MT09PXR8fDQ9PT10Py0xOjEsbD00PT09dHx8Mj09PXQ/IngiOiJ5Iix2PTE9PT10fHwzPT09dD9kOnA7ZnVuY3Rpb24gYihkKXt2YXIgcD1udWxsPT1yP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6cixiPW51bGw9PWk/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOmg6aSxfPU1hdGgubWF4KGEsMCkrcyx4PWUucmFuZ2UoKSx3PSt4WzBdK2Msaz0reFt4Lmxlbmd0aC0xXStjLFQ9KGUuYmFuZHdpZHRoP2c6eSkoZS5jb3B5KCksYyksRT1kLnNlbGVjdGlvbj9kLnNlbGVjdGlvbigpOmQsQz1FLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxTPUUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCxlKS5vcmRlcigpLEE9Uy5leGl0KCksTT1TLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksTj1TLnNlbGVjdCgibGluZSIpLEQ9Uy5zZWxlY3QoInRleHQiKTtDPUMubWVyZ2UoQy5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksUz1TLm1lcmdlKE0pLE49Ti5tZXJnZShNLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIobCsiMiIsdSphKSksRD1ELm1lcmdlKE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIobCx1Kl8pLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLGQhPT1FJiYoQz1DLnRyYW5zaXRpb24oZCksUz1TLnRyYW5zaXRpb24oZCksTj1OLnRyYW5zaXRpb24oZCksRD1ELnRyYW5zaXRpb24oZCksQT1BLnRyYW5zaXRpb24oZCkuYXR0cigib3BhY2l0eSIsZikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9VCh0KSk/dih0K2MpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pKSxNLmF0dHIoIm9wYWNpdHkiLGYpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHYoKGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTpUKHQpKStjKX0pKSksQS5yZW1vdmUoKSxDLmF0dHIoImQiLDQ9PT10fHwyPT09dD9vPyJNIit1Km8rIiwiK3crIkgiK2MrIlYiK2srIkgiK3UqbzoiTSIrYysiLCIrdysiViIrazpvPyJNIit3KyIsIit1Km8rIlYiK2MrIkgiK2srIlYiK3UqbzoiTSIrdysiLCIrYysiSCIrayksUy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdihUKHQpK2MpfSkpLE4uYXR0cihsKyIyIix1KmEpLEQuYXR0cihsLHUqXykudGV4dChiKSxFLmZpbHRlcihtKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIiwyPT09dD8ic3RhcnQiOjQ9PT10PyJlbmQiOiJtaWRkbGUiKSxFLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9VH0pKX1yZXR1cm4gYi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGIpOmV9LGIudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj1BcnJheS5mcm9tKGFyZ3VtZW50cyksYn0sYi50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106QXJyYXkuZnJvbSh0KSxiKTpuLnNsaWNlKCl9LGIudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6QXJyYXkuZnJvbSh0KSxiKTpyJiZyLnNsaWNlKCl9LGIudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGIpOml9LGIudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bz0rdCxiKTphfSxiLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsYik6YX0sYi50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGIpOm99LGIudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsYik6c30sYi5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsYik6Y30sYn1mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIF8odCl7cmV0dXJuIG51bGw9PXQ/YjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIHgodCl7cmV0dXJuIG51bGw9PXQ/W106QXJyYXkuaXNBcnJheSh0KT90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gdygpe3JldHVybltdfWZ1bmN0aW9uIGsodCl7cmV0dXJuIG51bGw9PXQ/dzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIFQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX19dmFyIEM9QXJyYXkucHJvdG90eXBlLmZpbmQ7ZnVuY3Rpb24gUygpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBBPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gTSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIE4odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gRCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiBPKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBCKHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyBEKHQsYVtzXSk7Zm9yKDtzPGM7KytzKShvPWVbc10pJiYoaVtzXT1vKX1mdW5jdGlvbiBMKHQsZSxuLHIsaSxhLG8pe3ZhciBzLGMsdSxsPW5ldyBNYXAsaD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT1vLmNhbGwoYyxjLl9fZGF0YV9fLHMsZSkrIiIsbC5oYXModSk/aVtzXT1jOmwuc2V0KHUsYykpO2ZvcihzPTA7czxmOysrcyl1PW8uY2FsbCh0LGFbc10scyxhKSsiIiwoYz1sLmdldCh1KSk/KHJbc109YyxjLl9fZGF0YV9fPWFbc10sbC5kZWxldGUodSkpOm5bc109bmV3IEQodCxhW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJmwuZ2V0KGRbc10pPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5fX2RhdGFfX31mdW5jdGlvbiBSKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfUQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpELGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBQPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBqPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpQLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gWSh0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxqLmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpqW2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24geih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gVSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHEodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBIKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uICQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIFcodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gVih0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gRyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBYKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24gWih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8Vih0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBLKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBKKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiB0dCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gbnQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgcnQodCl9ZnVuY3Rpb24gcnQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPWV0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gaXQodCxlKXtmb3IodmFyIG49bnQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBhdCh0LGUpe2Zvcih2YXIgbj1udCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIG90KHQpe3JldHVybiBmdW5jdGlvbigpe2l0KHRoaXMsdCl9fWZ1bmN0aW9uIHN0KHQpe3JldHVybiBmdW5jdGlvbigpe2F0KHRoaXMsdCl9fWZ1bmN0aW9uIGN0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP2l0OmF0KSh0aGlzLHQpfX1mdW5jdGlvbiB1dCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBodCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gZnQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBwdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHl0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGd0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1QJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1QP2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBidCh0KXt2YXIgZT1ZKHQpO3JldHVybihlLmxvY2FsP3Z0Om10KShlKX1mdW5jdGlvbiBfdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHh0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gd3QoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGt0KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBFdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5vcHRpb25zKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gQ3QodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGk9dGhpcy5fX29uLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUsdGhpcy5fX2RhdGFfXyl9fShlKTtpZihpKWZvcih2YXIgbz0wLHM9aS5sZW5ndGg7bzxzOysrbylpZigocj1pW29dKS50eXBlPT09dC50eXBlJiZyLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcixyLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcj1hLHIub3B0aW9ucz1uKSx2b2lkKHIudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxhLG4pLHI9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YSxvcHRpb25zOm59LGk/aS5wdXNoKHIpOnRoaXMuX19vbj1bcl19fWZ1bmN0aW9uIFN0KHQsZSxuKXt2YXIgcj1WKHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEF0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN0KHRoaXMsdCxlKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU3QodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19cnQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgTnQ9W251bGxdO2Z1bmN0aW9uIER0KHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIE90KCl7cmV0dXJuIG5ldyBEdChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLE50KX1EdC5wcm90b3R5cGU9T3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEdCxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PV8odCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbyxzPWVbaV0sYz1zLmxlbmd0aCx1PXJbaV09bmV3IEFycmF5KGMpLGw9MDtsPGM7KytsKShhPXNbbF0pJiYobz10LmNhbGwoYSxhLl9fZGF0YV9fLGwscykpJiYoIl9fZGF0YV9fImluIGEmJihvLl9fZGF0YV9fPWEuX19kYXRhX18pLHVbbF09byk7cmV0dXJuIG5ldyBEdChyLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dD0iZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSh0KTprKHQpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IER0KHIsaSl9LHNlbGVjdENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT10P1M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEMuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFKHQpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT10P006ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFKHQpKSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9VCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgRHQocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsSSk7dmFyIG49ZT9MOkIscj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1PKHQpKTtmb3IodmFyIGE9aS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBsPXJbdV0saD1pW3VdLGY9aC5sZW5ndGgsZD1SKHQuY2FsbChsLGwmJmwuX19kYXRhX18sdSxyKSkscD1kLmxlbmd0aCx5PXNbdV09bmV3IEFycmF5KHApLGc9b1t1XT1uZXcgQXJyYXkocCksbT1jW3VdPW5ldyBBcnJheShmKTtuKGwsaCx5LGcsbSxkLGUpO2Zvcih2YXIgdixiLF89MCx4PTA7XzxwOysrXylpZih2PXlbX10pe2ZvcihfPj14JiYoeD1fKzEpOyEoYj1nW3hdKSYmKyt4PHA7KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihvPW5ldyBEdChvLHIpKS5fZW50ZXI9cyxvLl9leGl0PWMsb30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IER0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKE4pLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEdCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE4pLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/KHI9dChyKSkmJihyPXIuc2VsZWN0aW9uKCkpOnI9ci5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKGk9ZShpKSkmJihpPWkuc2VsZWN0aW9uKCkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQsbj10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsaT1uLmxlbmd0aCxhPXIubGVuZ3RoLG89TWF0aC5taW4oaSxhKSxzPW5ldyBBcnJheShpKSxjPTA7YzxvOysrYylmb3IodmFyIHUsbD1uW2NdLGg9cltjXSxmPWwubGVuZ3RoLGQ9c1tjXT1uZXcgQXJyYXkoZikscD0wO3A8ZjsrK3ApKHU9bFtwXXx8aFtwXSkmJihkW3BdPXUpO2Zvcig7YzxpOysrYylzW2NdPW5bY107cmV0dXJuIG5ldyBEdChzLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciByLGk9dFtlXSxhPWkubGVuZ3RoLTEsbz1pW2FdOy0tYT49MDspKHI9aVthXSkmJihvJiY0XnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixvKSxvPXIpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9Rik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgRHQoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgcj10W2VdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpe3ZhciBvPXJbaV07aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe2xldCB0PTA7Zm9yKGNvbnN0IGUgb2YgdGhpcykrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilmb3IodmFyIGksYT1lW25dLG89MCxzPWEubGVuZ3RoO288czsrK28pKGk9YVtvXSkmJnQuY2FsbChpLGkuX19kYXRhX18sbyxhKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPVkodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP1U6ejoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP1c6JDpuLmxvY2FsP0g6cSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9HOiJmdW5jdGlvbiI9PXR5cGVvZiBlP1o6WCkodCxlLG51bGw9PW4/IiI6bikpOlEodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/SzoiZnVuY3Rpb24iPT10eXBlb2YgZT90dDpKKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LGUpe3ZhciBuPWV0KHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPW50KHRoaXMubm9kZSgpKSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KWlmKCFyLmNvbnRhaW5zKG5baV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2N0OmU/b3Q6c3QpKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3V0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9odDpsdCkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P2Z0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9wdDpkdCkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHl0KX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGd0KX0sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YnQodCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpidCh0KSxyPW51bGw9PWU/X3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpfKGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHh0KX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/a3Q6d3QpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9VHQodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/Q3Q6RXQscj0wO3I8bzsrK3IpdGhpcy5lYWNoKHMoYVtyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBjLHU9MCxsPXMubGVuZ3RoO3U8bDsrK3UpZm9yKHI9MCxjPXNbdV07cjxvOysrcilpZigoaT1hW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/TXQ6QXQpKHQsZSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiooKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByLGk9dFtlXSxhPTAsbz1pLmxlbmd0aDthPG87KythKShyPWlbYV0pJiYoeWllbGQgcil9fTtjb25zdCBCdD1PdDt2YXIgTHQ9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gSXQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgUnQocil9ZnVuY3Rpb24gUnQodCl7dGhpcy5fPXR9ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIFB0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24ganQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPUx0LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1SdC5wcm90b3R5cGU9SXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9RnQodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09anQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT1qdChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49UHQocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgUnQodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O2NvbnN0IFl0PUl0O3ZhciB6dCxVdCxxdD0wLEh0PTAsJHQ9MCxXdD0wLFZ0PTAsR3Q9MCxYdD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxadD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBRdCgpe3JldHVybiBWdHx8KFp0KEt0KSxWdD1YdC5ub3coKStHdCl9ZnVuY3Rpb24gS3QoKXtWdD0wfWZ1bmN0aW9uIEp0KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB0ZSh0LGUsbil7dmFyIHI9bmV3IEp0O3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gZWUoKXtWdD0oV3Q9WHQubm93KCkpK0d0LHF0PUh0PTA7dHJ5eyFmdW5jdGlvbigpe1F0KCksKytxdDtmb3IodmFyIHQsZT16dDtlOykodD1WdC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKHZvaWQgMCx0KSxlPWUuX25leHQ7LS1xdH0oKX1maW5hbGx5e3F0PTAsZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuPXp0LHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTp6dD1lKTtVdD10LHJlKHIpfSgpLFZ0PTB9fWZ1bmN0aW9uIG5lKCl7dmFyIHQ9WHQubm93KCksZT10LVd0O2U+MWUzJiYoR3QtPWUsV3Q9dCl9ZnVuY3Rpb24gcmUodCl7cXR8fChIdCYmKEh0PWNsZWFyVGltZW91dChIdCkpLHQtVnQ+MjQ/KHQ8MS8wJiYoSHQ9c2V0VGltZW91dChlZSx0LVh0Lm5vdygpLUd0KSksJHQmJigkdD1jbGVhckludGVydmFsKCR0KSkpOigkdHx8KFd0PVh0Lm5vdygpLCR0PXNldEludGVydmFsKG5lLDFlMykpLHF0PTEsWnQoZWUpKSl9ZnVuY3Rpb24gaWUodCxlLG4pe3ZhciByPW5ldyBKdDtyZXR1cm4gZT1udWxsPT1lPzA6K2Usci5yZXN0YXJ0KChuPT57ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfUp0LnByb3RvdHlwZT10ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkp0LHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9RdCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxVdD09PXRoaXN8fChVdD9VdC5fbmV4dD10aGlzOnp0PXRoaXMsVXQ9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixyZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxyZSgpKX19O3ZhciBhZT1ZdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxvZT1bXTtmdW5jdGlvbiBzZSh0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gaWUoYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihpZSgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj10ZSgoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjphZSx0d2VlbjpvZSx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gY2UodCxlKXt2YXIgbj1sZSh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHVlKHQsZSl7dmFyIG49bGUodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gbGUodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBoZSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHQqKDEtbikrZSpufX12YXIgZmUsZGU9MTgwL01hdGguUEkscGU9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24geWUodCxlLG4scixpLGEpe3ZhciBvLHMsYztyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwoYz10Km4rZSpyKSYmKG4tPXQqYyxyLT1lKmMpLChzPU1hdGguc3FydChuKm4rcipyKSkmJihuLz1zLHIvPXMsYy89cyksdCpyPGUqbiYmKHQ9LXQsZT0tZSxjPS1jLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqZGUsc2tld1g6TWF0aC5hdGFuKGMpKmRlLHNjYWxlWDpvLHNjYWxlWTpzfX1mdW5jdGlvbiBnZSh0LGUsbixyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxjPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQscixpLGEsbyxzKXtpZih0IT09aXx8ciE9PWEpe3ZhciBjPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOmMtNCx4OmhlKHQsaSl9LHtpOmMtMix4OmhlKHIsYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goInRyYW5zbGF0ZSgiK2krZSthK24pfShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVkscyxjKSxmdW5jdGlvbih0LGUsbixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOm4ucHVzaChpKG4pKyJyb3RhdGUoIixudWxsLHIpLTIseDpoZSh0LGUpfSkpOmUmJm4ucHVzaChpKG4pKyJyb3RhdGUoIitlK3IpfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lP2EucHVzaCh7aTpuLnB1c2goaShuKSsic2tld1goIixudWxsLHIpLTIseDpoZSh0LGUpfSk6ZSYmbi5wdXNoKGkobikrInNrZXdYKCIrZStyKX0oYS5za2V3WCxvLnNrZXdYLHMsYyksZnVuY3Rpb24odCxlLG4scixhLG8pe2lmKHQhPT1ufHxlIT09cil7dmFyIHM9YS5wdXNoKGkoYSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDpoZSh0LG4pfSx7aTpzLTIseDpoZShlLHIpfSl9ZWxzZSAxPT09biYmMT09PXJ8fGEucHVzaChpKGEpKyJzY2FsZSgiK24rIiwiK3IrIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxjKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxyPWMubGVuZ3RoOysrbjxyOylzWyhlPWNbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBtZT1nZSgoZnVuY3Rpb24odCl7Y29uc3QgZT1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KSh0KyIiKTtyZXR1cm4gZS5pc0lkZW50aXR5P3BlOnllKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLHZlPWdlKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9wZTooZmV8fChmZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxmZS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9ZmUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/eWUoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6cGUpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBiZSh0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dWUodGhpcyx0KSxhPWkudHdlZW47aWYoYSE9PW4pZm9yKHZhciBvPTAscz0ocj1uPWEpLmxlbmd0aDtvPHM7KytvKWlmKHJbb10ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKG8sMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiBfZSh0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dWUodGhpcyx0KSxvPWEudHdlZW47aWYobyE9PXIpe2k9KHI9bykuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxjPTAsdT1pLmxlbmd0aDtjPHU7KytjKWlmKGlbY10ubmFtZT09PWUpe2lbY109czticmVha31jPT09dSYmaS5wdXNoKHMpfWEudHdlZW49aX19ZnVuY3Rpb24geGUodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dWUodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gbGUodCxyKS52YWx1ZVtlXX19ZnVuY3Rpb24gd2UodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGtlKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIFRlKCl7fXZhciBFZT0uNyxDZT0xL0VlLFNlPSJcXHMqKFsrLV0/XFxkKylcXHMqIixBZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixNZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTmU9L14jKFswLTlhLWZdezMsOH0pJC8sRGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1NlLFNlLFNlXSsiXFwpJCIpLE9lPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tNZSxNZSxNZV0rIlxcKSQiKSxCZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1NlLFNlLFNlLEFlXSsiXFwpJCIpLExlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTWUsTWUsTWUsQWVdKyJcXCkkIiksSWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0FlLE1lLE1lXSsiXFwpJCIpLFJlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQWUsTWUsTWUsQWVdKyJcXCkkIiksRmU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gUGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFllKHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPU5lLmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/emUoZSk6Mz09PW4/bmV3ICRlKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9VZShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9VZShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPURlLmV4ZWModCkpP25ldyAkZShlWzFdLGVbMl0sZVszXSwxKTooZT1PZS5leGVjKHQpKT9uZXcgJGUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9QmUuZXhlYyh0KSk/VWUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9TGUuZXhlYyh0KSk/VWUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9SWUuZXhlYyh0KSk/WGUoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1SZS5leGVjKHQpKT9YZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOkZlLmhhc093blByb3BlcnR5KHQpP3plKEZlW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgJGUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB6ZSh0KXtyZXR1cm4gbmV3ICRlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBVZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3ICRlKHQsZSxuLHIpfWZ1bmN0aW9uIHFlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVGV8fCh0PVllKHQpKSx0P25ldyAkZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgJGV9ZnVuY3Rpb24gSGUodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3FlKHQpOm5ldyAkZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gJGUodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFdlKCl7cmV0dXJuIiMiK0dlKHRoaXMucikrR2UodGhpcy5nKStHZSh0aGlzLmIpfWZ1bmN0aW9uIFZlKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gR2UodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBYZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IFFlKHQsZSxuLHIpfWZ1bmN0aW9uIFplKHQpe2lmKHQgaW5zdGFuY2VvZiBRZSlyZXR1cm4gbmV3IFFlKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIFRlfHwodD1ZZSh0KSksIXQpcmV0dXJuIG5ldyBRZTtpZih0IGluc3RhbmNlb2YgUWUpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBRZShvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFFlKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBLZSh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gSmUodCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn13ZShUZSxZZSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpQZSxmb3JtYXRIZXg6UGUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIFplKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6amUsdG9TdHJpbmc6amV9KSx3ZSgkZSxIZSxrZShUZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9DZTpNYXRoLnBvdyhDZSx0KSxuZXcgJGUodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/RWU6TWF0aC5wb3coRWUsdCksbmV3ICRlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6V2UsZm9ybWF0SGV4OldlLGZvcm1hdFJnYjpWZSx0b1N0cmluZzpWZX0pKSx3ZShRZSwoZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1plKHQpOm5ldyBRZSh0LGUsbixudWxsPT1yPzE6cil9KSxrZShUZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9DZTpNYXRoLnBvdyhDZSx0KSxuZXcgUWUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9FZTpNYXRoLnBvdyhFZSx0KSxuZXcgUWUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwscj1uKyhuPC41P246MS1uKSplLGk9MipuLXI7cmV0dXJuIG5ldyAkZShLZSh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxLZSh0LGksciksS2UodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTtjb25zdCB0bj10PT4oKT0+dDtmdW5jdGlvbiBlbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fSh0LG4pOnRuKGlzTmFOKHQpP2U6dCl9Y29uc3Qgbm49ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP2VuOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6dG4oaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PUhlKHQpKS5yLChlPUhlKGUpKS5yKSxpPW4odC5nLGUuZyksYT1uKHQuYixlLmIpLG89ZW4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIHJuKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9SGUoZVtuXSksYVtuXT1yLnJ8fDAsb1tuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIGE9dChhKSxvPXQobykscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9YSh0KSxyLmc9byh0KSxyLmI9cyh0KSxyKyIifX19cm4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBKZSgobi1yL2UpKmUsbyxpLGEscyl9fSkpLHJuKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGk9dFsocitlLTEpJWVdLGE9dFtyJWVdLG89dFsocisxKSVlXSxzPXRbKHIrMiklZV07cmV0dXJuIEplKChuLXIvZSkqZSxpLGEsbyxzKX19KSk7dmFyIGFuPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxvbj1uZXcgUmVnRXhwKGFuLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHNuKHQsZSl7dmFyIG4scixpLGE9YW4ubGFzdEluZGV4PW9uLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1hbi5leGVjKHQpKSYmKHI9b24uZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OmhlKG4scil9KSksYT1vbi5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIGNuKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9oZTplIGluc3RhbmNlb2YgWWU/bm46KG49WWUoZSkpPyhlPW4sbm4pOnNuKSh0LGUpfWZ1bmN0aW9uIHVuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBsbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGhuKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIGZuKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBkbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBwbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHluKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBnbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIG1uKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmZ24odCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIHZuKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmeW4odCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIGJuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Y2UodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIF9uKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtjZSh0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIHhuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dWUodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHduKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt1ZSh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIGtuKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3VlKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBUbih0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/Y2U6dWU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIEVuPUJ0LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBDbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBTbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gQW4odCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJlNuKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIE1uKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBObih0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZNbihyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBEbj0wO2Z1bmN0aW9uIE9uKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiBCbigpe3JldHVybisrRG59dmFyIExuPUJ0LnByb3RvdHlwZTtPbi5wcm90b3R5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIEJ0KCkudHJhbnNpdGlvbih0KX0ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPbixzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1fKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pZm9yKHZhciBzLGMsdT1yW29dLGw9dS5sZW5ndGgsaD1hW29dPW5ldyBBcnJheShsKSxmPTA7ZjxsOysrZikocz11W2ZdKSYmKGM9dC5jYWxsKHMscy5fX2RhdGFfXyxmLHUpKSYmKCJfX2RhdGFfXyJpbiBzJiYoYy5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2ZdPWMsc2UoaFtmXSxlLG4sZixoLGxlKHMsbikpKTtyZXR1cm4gbmV3IE9uKGEsdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1rKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPWxlKGMsbikseT0wLGc9ZC5sZW5ndGg7eTxnOysreSkoZj1kW3ldKSYmc2UoZixlLG4seSxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyBPbihhLG8sZSxuKX0sc2VsZWN0Q2hpbGQ6TG4uc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46TG4uc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1UKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBPbihyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBPbihvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgRW4odGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPUJuKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpaWYobz1zW3VdKXt2YXIgbD1sZShvLGUpO3NlKG8sdCxuLHUscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcgT24ocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6TG4uY2FsbCxub2RlczpMbi5ub2Rlcyxub2RlOkxuLm5vZGUsc2l6ZTpMbi5zaXplLGVtcHR5OkxuLmVtcHR5LGVhY2g6TG4uZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/bGUodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKFRuKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1ZKHQpLHI9InRyYW5zZm9ybSI9PT1uP3ZlOmNuO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP3BuOmRuKShuLHIseGUodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/bG46dW4pKG4pOihuLmxvY2FsP2ZuOmhuKShuLHIsZSkpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciByPVkodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9tbjp2bikocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9tZTpjbjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1RKHRoaXMsdCksbz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxRKHRoaXMsdCkpO3JldHVybiBhPT09bz9udWxsOmE9PT1uJiZvPT09cj9pOmk9ZShuPWEscj1vKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LENuKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVEodGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9USh0aGlzLHQpKSxvPT09Yz9udWxsOm89PT1yJiZjPT09aT9hOihpPWMsYT1lKHI9byxzKSl9fSh0LHIseGUodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG89InN0eWxlLiIrZSxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXVlKHRoaXMsdCksdT1jLm9uLGw9bnVsbD09Yy52YWx1ZVtvXT9hfHwoYT1DbihlKSk6dm9pZCAwO3U9PT1uJiZpPT09bHx8KHI9KG49dSkuY29weSgpKS5vbihzLGk9bCksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1RKHRoaXMsdCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0odCxyLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLEFuKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KHhlKHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxObih0KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1sZSh0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/YmU6X2UpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/Ym46X24pKGUsdCkpOmxlKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3huOnduKShlLHQpKTpsZSh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goa24oZSx0KSk6bGUodGhpcy5ub2RlKCksZSkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dWUodGhpcyx0KS5lYXNlPW59fSh0aGlzLl9pZCx0KSl9LGVuZDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9e3ZhbHVlOm99LGM9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49dWUodGhpcyxyKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChjKSksbi5vbj1lfSkpLDA9PT1pJiZhKCl9KSl9LFtTeW1ib2wuaXRlcmF0b3JdOkxuW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBJbj17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9fTtmdW5jdGlvbiBSbih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2V9IG5vdCBmb3VuZGApO3JldHVybiBufUJ0LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Ll9fdHJhbnNpdGlvbixvPSEwO2lmKGEpe2ZvcihpIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsYSkobj1hW2ldKS5uYW1lPT09ZT8ocj1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKHI/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIGFbaV0pOm89ITE7byYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX0odGhpcyx0KX0pKX0sQnQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgT24/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1CbigpLChuPUluKS50aW1lPVF0KCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgbyxzPXJbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSkobz1zW3VdKSYmc2Uobyx0LGUsdSxzLG58fFJuKG8sZSkpO3JldHVybiBuZXcgT24ocix0aGlzLl9wYXJlbnRzLHQsZSl9O2NvbnN0e2FiczpGbixtYXg6UG4sbWluOmpufT1NYXRoO2Z1bmN0aW9uIFluKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIHpuKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBVbih0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBxbigpe31bInciLCJlIl0ubWFwKFluKSxbIm4iLCJzIl0ubWFwKFluKSxbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChZbik7dmFyIEhuPS43LCRuPTEvSG4sV249IlxccyooWystXT9cXGQrKVxccyoiLFZuPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLEduPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixYbj0vXiMoWzAtOWEtZl17Myw4fSkkLyxabj1uZXcgUmVnRXhwKCJecmdiXFwoIitbV24sV24sV25dKyJcXCkkIiksUW49bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0duLEduLEduXSsiXFwpJCIpLEtuPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbV24sV24sV24sVm5dKyJcXCkkIiksSm49bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tHbixHbixHbixWbl0rIlxcKSQiKSx0cj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbVm4sR24sR25dKyJcXCkkIiksZXI9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tWbixHbixHbixWbl0rIlxcKSQiKSxucj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBycigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGlyKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gYXIodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9WG4uZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9vcihlKTozPT09bj9uZXcgbHIoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP3NyKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP3NyKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9Wm4uZXhlYyh0KSk/bmV3IGxyKGVbMV0sZVsyXSxlWzNdLDEpOihlPVFuLmV4ZWModCkpP25ldyBscigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1Lbi5leGVjKHQpKT9zcihlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1Kbi5leGVjKHQpKT9zcigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT10ci5leGVjKHQpKT9wcihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWVyLmV4ZWModCkpP3ByKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6bnIuaGFzT3duUHJvcGVydHkodCk/b3IobnJbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBscihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIG9yKHQpe3JldHVybiBuZXcgbHIodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIHNyKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgbHIodCxlLG4scil9ZnVuY3Rpb24gY3IodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxbnx8KHQ9YXIodCkpLHQ/bmV3IGxyKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBscn1mdW5jdGlvbiB1cih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Y3IodCk6bmV3IGxyKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBscih0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gaHIoKXtyZXR1cm4iIyIrZHIodGhpcy5yKStkcih0aGlzLmcpK2RyKHRoaXMuYil9ZnVuY3Rpb24gZnIoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBkcih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHByKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgZ3IodCxlLG4scil9ZnVuY3Rpb24geXIodCl7aWYodCBpbnN0YW5jZW9mIGdyKXJldHVybiBuZXcgZ3IodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcW58fCh0PWFyKHQpKSwhdClyZXR1cm4gbmV3IGdyO2lmKHQgaW5zdGFuY2VvZiBncilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IGdyKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gZ3IodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIG1yKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX16bihxbixhcix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpycixmb3JtYXRIZXg6cnIsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIHlyKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6aXIsdG9TdHJpbmc6aXJ9KSx6bihscix1cixVbihxbix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8kbjpNYXRoLnBvdygkbix0KSxuZXcgbHIodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/SG46TWF0aC5wb3coSG4sdCksbmV3IGxyKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6aHIsZm9ybWF0SGV4OmhyLGZvcm1hdFJnYjpmcix0b1N0cmluZzpmcn0pKSx6bihnciwoZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3lyKHQpOm5ldyBncih0LGUsbixudWxsPT1yPzE6cil9KSxVbihxbix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8kbjpNYXRoLnBvdygkbix0KSxuZXcgZ3IodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9IbjpNYXRoLnBvdyhIbix0KSxuZXcgZ3IodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwscj1uKyhuPC41P246MS1uKSplLGk9MipuLXI7cmV0dXJuIG5ldyBscihtcih0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxtcih0LGksciksbXIodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTtjb25zdCB2cj1NYXRoLlBJLzE4MCxicj0xODAvTWF0aC5QSSxfcj0uOTY0MjIseHI9LjgyNTIxLHdyPTQvMjksa3I9Ni8yOSxUcj0zKmtyKmtyO2Z1bmN0aW9uIEVyKHQpe2lmKHQgaW5zdGFuY2VvZiBDcilyZXR1cm4gbmV3IENyKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEJyKXJldHVybiBMcih0KTt0IGluc3RhbmNlb2YgbHJ8fCh0PWNyKHQpKTt2YXIgZSxuLHI9TnIodC5yKSxpPU5yKHQuZyksYT1Ocih0LmIpLG89U3IoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPVNyKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvX3IpLG49U3IoKC4wMTM5MzIyKnIrLjA5NzEwNDUqaSsuNzE0MTczMyphKS94cikpLG5ldyBDcigxMTYqby0xNiw1MDAqKGUtbyksMjAwKihvLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24gQ3IodCxlLG4scil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFNyKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvVHIrd3J9ZnVuY3Rpb24gQXIodCl7cmV0dXJuIHQ+a3I/dCp0KnQ6VHIqKHQtd3IpfWZ1bmN0aW9uIE1yKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gTnIodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gRHIodCl7aWYodCBpbnN0YW5jZW9mIEJyKXJldHVybiBuZXcgQnIodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgQ3J8fCh0PUVyKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgQnIoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqYnI7cmV0dXJuIG5ldyBCcihlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBPcih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RHIodCk6bmV3IEJyKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBCcih0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gTHIodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IENyKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqdnI7cmV0dXJuIG5ldyBDcih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXpuKENyLChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RXIodCk6bmV3IENyKHQsZSxuLG51bGw9PXI/MTpyKX0pLFVuKHFuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IENyKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3IodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IGxyKE1yKDMuMTMzODU2MSooZT1fcipBcihlKSktMS42MTY4NjY3Kih0PTEqQXIodCkpLS40OTA2MTQ2KihuPXhyKkFyKG4pKSksTXIoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSxNciguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLHpuKEJyLE9yLFVuKHFuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJyKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnIodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gTHIodGhpcykucmdiKCl9fSkpO2NvbnN0IElyPXQ9PigpPT50O2Z1bmN0aW9uIFJyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gRnIodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/UnIodCxuKTpJcihpc05hTih0KT9lOnQpfWZ1bmN0aW9uIFByKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9T3IoZSkpLmgsKG49T3IobikpLmgpLGk9RnIoZS5jLG4uYyksYT1GcihlLmwsbi5sKSxvPUZyKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPWEodCksZS5vcGFjaXR5PW8odCksZSsiIn19fWNvbnN0IGpyPVByKChmdW5jdGlvbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9Scih0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6SXIoaXNOYU4odCk/ZTp0KX0pKTtQcihGcik7dmFyIFlyPU1hdGguc3FydCg1MCksenI9TWF0aC5zcXJ0KDEwKSxVcj1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gcXIodCxlLG4pe3ZhciByPShlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCksYT1yL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1Zcj8xMDphPj16cj81OmE+PVVyPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49WXI/MTA6YT49enI/NTphPj1Vcj8yOjEpfWZ1bmN0aW9uIEhyKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj1Zcj9pKj0xMDphPj16cj9pKj01OmE+PVVyJiYoaSo9MiksZTx0Py1pOml9ZnVuY3Rpb24gJHIodCxlKXtyZXR1cm4gbnVsbD09dHx8bnVsbD09ZT9OYU46dDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gV3IodCl7bGV0IGU9dCxuPXQscj10O2Z1bmN0aW9uIGkodCxlLGk9MCxhPXQubGVuZ3RoKXtpZihpPGEpe2lmKDAhPT1uKGUsZSkpcmV0dXJuIGE7ZG97Y29uc3Qgbj1pK2E+Pj4xO3IodFtuXSxlKTwwP2k9bisxOmE9bn13aGlsZShpPGEpfXJldHVybiBpfXJldHVybiAyIT09dC5sZW5ndGgmJihlPShlLG4pPT50KGUpLW4sbj0kcixyPShlLG4pPT4kcih0KGUpLG4pKSx7bGVmdDppLGNlbnRlcjpmdW5jdGlvbih0LG4scj0wLGE9dC5sZW5ndGgpe2NvbnN0IG89aSh0LG4scixhLTEpO3JldHVybiBvPnImJmUodFtvLTFdLG4pPi1lKHRbb10sbik/by0xOm99LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpPTAsYT10Lmxlbmd0aCl7aWYoaTxhKXtpZigwIT09bihlLGUpKXJldHVybiBhO2Rve2NvbnN0IG49aSthPj4+MTtyKHRbbl0sZSk8PTA/aT1uKzE6YT1ufXdoaWxlKGk8YSl9cmV0dXJuIGl9fX1jb25zdCBWcj1XcigkciksR3I9VnIucmlnaHQsWHI9KFZyLmxlZnQsV3IoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9KSkuY2VudGVyLEdyKTtmdW5jdGlvbiBacih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gUXIodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gS3IoKXt9dmFyIEpyPS43LHRpPTEuNDI4NTcxNDI4NTcxNDI4NixlaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsbmk9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIscmk9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLGlpPS9eIyhbMC05YS1mXXszLDh9KSQvLGFpPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tlaSxlaSxlaV0rIlxcKSQiKSxvaT1uZXcgUmVnRXhwKCJecmdiXFwoIitbcmkscmkscmldKyJcXCkkIiksc2k9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tlaSxlaSxlaSxuaV0rIlxcKSQiKSxjaT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3JpLHJpLHJpLG5pXSsiXFwpJCIpLHVpPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tuaSxyaSxyaV0rIlxcKSQiKSxsaT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW25pLHJpLHJpLG5pXSsiXFwpJCIpLGhpPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIGZpKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gZGkoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBwaSh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1paS5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP3lpKGUpOjM9PT1uP25ldyBiaShlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/Z2koZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/Z2koZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1haS5leGVjKHQpKT9uZXcgYmkoZVsxXSxlWzJdLGVbM10sMSk6KGU9b2kuZXhlYyh0KSk/bmV3IGJpKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPXNpLmV4ZWModCkpP2dpKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWNpLmV4ZWModCkpP2dpKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPXVpLmV4ZWModCkpP2tpKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9bGkuZXhlYyh0KSk/a2koZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpoaS5oYXNPd25Qcm9wZXJ0eSh0KT95aShoaVt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IGJpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24geWkodCl7cmV0dXJuIG5ldyBiaSh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gZ2kodCxlLG4scil7cmV0dXJuIHI8PTAmJih0PWU9bj1OYU4pLG5ldyBiaSh0LGUsbixyKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEtyfHwodD1waSh0KSksdD9uZXcgYmkoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IGJpfWZ1bmN0aW9uIHZpKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9taSh0KTpuZXcgYmkodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGJpKHQsZSxuLHIpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBfaSgpe3JldHVybiIjIit3aSh0aGlzLnIpK3dpKHRoaXMuZykrd2kodGhpcy5iKX1mdW5jdGlvbiB4aSgpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIHdpKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24ga2kodCxlLG4scil7cmV0dXJuIHI8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBFaSh0LGUsbixyKX1mdW5jdGlvbiBUaSh0KXtpZih0IGluc3RhbmNlb2YgRWkpcmV0dXJuIG5ldyBFaSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBLcnx8KHQ9cGkodCkpLCF0KXJldHVybiBuZXcgRWk7aWYodCBpbnN0YW5jZW9mIEVpKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihlLG4sciksYT1NYXRoLm1heChlLG4sciksbz1OYU4scz1hLWksYz0oYStpKS8yO3JldHVybiBzPyhvPWU9PT1hPyhuLXIpL3MrNioobjxyKTpuPT09YT8oci1lKS9zKzI6KGUtbikvcys0LHMvPWM8LjU/YStpOjItYS1pLG8qPTYwKTpzPWM+MCYmYzwxPzA6byxuZXcgRWkobyxzLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiBFaSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gQ2kodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfWZ1bmN0aW9uIFNpKHQsZSxuLHIsaSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqbisoMSszKnQrMyphLTMqbykqcitvKmkpLzZ9WnIoS3IscGkse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZmksZm9ybWF0SGV4OmZpLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBUaSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOmRpLHRvU3RyaW5nOmRpfSksWnIoYmksdmksUXIoS3Ise2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/dGk6TWF0aC5wb3codGksdCksbmV3IGJpKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0pyOk1hdGgucG93KEpyLHQpLG5ldyBiaSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Ol9pLGZvcm1hdEhleDpfaSxmb3JtYXRSZ2I6eGksdG9TdHJpbmc6eGl9KSksWnIoRWksKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9UaSh0KTpuZXcgRWkodCxlLG4sbnVsbD09cj8xOnIpfSksUXIoS3Ise2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/dGk6TWF0aC5wb3codGksdCksbmV3IEVpKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/SnI6TWF0aC5wb3coSnIsdCksbmV3IEVpKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLHI9bisobjwuNT9uOjEtbikqZSxpPTIqbi1yO3JldHVybiBuZXcgYmkoQ2kodD49MjQwP3QtMjQwOnQrMTIwLGksciksQ2kodCxpLHIpLENpKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7Y29uc3QgQWk9dD0+KCk9PnQ7ZnVuY3Rpb24gTWkodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX0odCxuKTpBaShpc05hTih0KT9lOnQpfWNvbnN0IE5pPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PSh0PSt0KT9NaTpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOkFpKGlzTmFOKGUpP246ZSl9fShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD12aSh0KSkuciwoZT12aShlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPU1pKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBEaSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPXZpKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fWZ1bmN0aW9uIE9pKHQsZSl7dmFyIG4scj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPGk7KytuKWFbbl09WWkodFtuXSxlW25dKTtmb3IoO248cjsrK24pb1tuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pb1tuXT1hW25dKHQpO3JldHVybiBvfX1mdW5jdGlvbiBCaSh0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIG4uc2V0VGltZSh0KigxLXIpK2Uqciksbn19ZnVuY3Rpb24gTGkodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gSWkodCxlKXt2YXIgbixyPXt9LGk9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9yW25dPVlpKHRbbl0sZVtuXSk6aVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiByKWlbbl09cltuXSh0KTtyZXR1cm4gaX19RGkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBTaSgobi1yL2UpKmUsbyxpLGEscyl9fSkpLERpKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGk9dFsocitlLTEpJWVdLGE9dFtyJWVdLG89dFsocisxKSVlXSxzPXRbKHIrMiklZV07cmV0dXJuIFNpKChuLXIvZSkqZSxpLGEsbyxzKX19KSk7dmFyIFJpPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxGaT1uZXcgUmVnRXhwKFJpLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFBpKHQsZSl7dmFyIG4scixpLGE9UmkubGFzdEluZGV4PUZpLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1SaS5leGVjKHQpKSYmKHI9RmkuZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OkxpKG4scil9KSksYT1GaS5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIGppKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fWZ1bmN0aW9uIFlpKHQsZSl7dmFyIG4scixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP0FpKGUpOigibnVtYmVyIj09PWk/TGk6InN0cmluZyI9PT1pPyhuPXBpKGUpKT8oZT1uLE5pKTpQaTplIGluc3RhbmNlb2YgcGk/Tmk6ZSBpbnN0YW5jZW9mIERhdGU/Qmk6KHI9ZSwhQXJyYXlCdWZmZXIuaXNWaWV3KHIpfHxyIGluc3RhbmNlb2YgRGF0YVZpZXc/QXJyYXkuaXNBcnJheShlKT9PaToiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/SWk6TGk6amkpKSh0LGUpfWZ1bmN0aW9uIHppKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLW4pK2Uqbil9fWZ1bmN0aW9uIFVpKHQpe3JldHVybit0fXZhciBxaT1bMCwxXTtmdW5jdGlvbiBIaSh0KXtyZXR1cm4gdH1mdW5jdGlvbiAkaSh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfToobj1pc05hTihlKT9OYU46LjUsZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBufWZ1bmN0aW9uIFdpKHQsZSxuKXt2YXIgcj10WzBdLGk9dFsxXSxhPWVbMF0sbz1lWzFdO3JldHVybiBpPHI/KHI9JGkoaSxyKSxhPW4obyxhKSk6KHI9JGkocixpKSxhPW4oYSxvKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIFZpKHQsZSxuKXt2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPS0xO2Zvcih0W3JdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK288cjspaVtvXT0kaSh0W29dLHRbbysxXSksYVtvXT1uKGVbb10sZVtvKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49WHIodCxlLDEsciktMTtyZXR1cm4gYVtuXShpW25dKGUpKX19ZnVuY3Rpb24gR2kodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gWGkoKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpLGEsbz1xaSxzPXFpLGM9WWksdT1IaTtmdW5jdGlvbiBsKCl7dmFyIHQsZSxuLGM9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpO3JldHVybiB1IT09SGkmJih0PW9bMF0sZT1vW2MtMV0sdD5lJiYobj10LHQ9ZSxlPW4pLHU9ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSl9KSxyPWM+Mj9WaTpXaSxpPWE9bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIG51bGw9PWV8fGlzTmFOKGU9K2UpP246KGl8fChpPXIoby5tYXAodCkscyxjKSkpKHQodShlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gdShlKChhfHwoYT1yKHMsby5tYXAodCksTGkpKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89QXJyYXkuZnJvbSh0LFVpKSxsKCkpOm8uc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1BcnJheS5mcm9tKHQpLGwoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9QXJyYXkuZnJvbSh0KSxjPXppLGwoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXR8fEhpLGwoKSk6dSE9PUhpfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbCgpKTpjfSxoLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxoKTpufSxmdW5jdGlvbihuLHIpe3JldHVybiB0PW4sZT1yLGwoKX19KCkoSGksSGkpfWZ1bmN0aW9uIFppKHQsZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZSh0KTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBRaSxLaT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBKaSh0KXtpZighKGU9S2kuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTtyZXR1cm4gbmV3IHRhKHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIHRhKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifWZ1bmN0aW9uIGVhKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIG5hKHQpe3JldHVybih0PWVhKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59ZnVuY3Rpb24gcmEodCxlKXt2YXIgbj1lYSh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfUppLnByb3RvdHlwZT10YS5wcm90b3R5cGUsdGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgaWE9eyIlIjoodCxlKT0+KDEwMCp0KS50b0ZpeGVkKGUpLGI6dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygyKSxjOnQ9PnQrIiIsZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModD1NYXRoLnJvdW5kKHQpKT49MWUyMT90LnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6dC50b1N0cmluZygxMCl9LGU6KHQsZSk9PnQudG9FeHBvbmVudGlhbChlKSxmOih0LGUpPT50LnRvRml4ZWQoZSksZzoodCxlKT0+dC50b1ByZWNpc2lvbihlKSxvOnQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoOCkscDoodCxlKT0+cmEoMTAwKnQsZSkscjpyYSxzOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZWEodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXSxhPWktKFFpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSxvPXIubGVuZ3RoO3JldHVybiBhPT09bz9yOmE+bz9yK25ldyBBcnJheShhLW8rMSkuam9pbigiMCIpOmE+MD9yLnNsaWNlKDAsYSkrIi4iK3Iuc2xpY2UoYSk6IjAuIituZXcgQXJyYXkoMS1hKS5qb2luKCIwIikrZWEodCxNYXRoLm1heCgwLGUrYS0xKSlbMF19LFg6dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OnQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBhYSh0KXtyZXR1cm4gdH12YXIgb2Esc2EsY2EsdWE9QXJyYXkucHJvdG90eXBlLm1hcCxsYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gaGEodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChyPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShvPXFyKHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApe2xldCBuPU1hdGgucm91bmQodC9vKSxyPU1hdGgucm91bmQoZS9vKTtmb3IobipvPHQmJisrbixyKm8+ZSYmLS1yLGE9bmV3IEFycmF5KGk9ci1uKzEpOysrczxpOylhW3NdPShuK3MpKm99ZWxzZXtvPS1vO2xldCBuPU1hdGgucm91bmQodCpvKSxyPU1hdGgucm91bmQoZSpvKTtmb3Iobi9vPHQmJisrbixyL28+ZSYmLS1yLGE9bmV3IEFycmF5KGk9ci1uKzEpOysrczxpOylhW3NdPShuK3MpL299cmV0dXJuIHImJmEucmV2ZXJzZSgpLGF9KG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGE9SHIodCxlLG4pO3N3aXRjaCgocj1KaShudWxsPT1yPyIsZiI6cikpLnR5cGUpe2Nhc2UicyI6dmFyIG89TWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpO3JldHVybiBudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKG5hKGUpLzMpKSktbmEoTWF0aC5hYnModCkpKX0oYSxvKSl8fChyLnByZWNpc2lvbj1pKSxjYShyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsbmEoZSktbmEodCkpKzF9KGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsLW5hKE1hdGguYWJzKHQpKSl9KGEpKXx8KHIucHJlY2lzaW9uPWktMiooIiUiPT09ci50eXBlKSl9cmV0dXJuIHNhKHIpfShyWzBdLHJbci5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciByLGksYT1lKCksbz0wLHM9YS5sZW5ndGgtMSxjPWFbb10sdT1hW3NdLGw9MTA7Zm9yKHU8YyYmKGk9YyxjPXUsdT1pLGk9byxvPXMscz1pKTtsLS0gPjA7KXtpZigoaT1xcihjLHUsbikpPT09cilyZXR1cm4gYVtvXT1jLGFbc109dSxlKGEpO2lmKGk+MCljPU1hdGguZmxvb3IoYy9pKSppLHU9TWF0aC5jZWlsKHUvaSkqaTtlbHNle2lmKCEoaTwwKSlicmVhaztjPU1hdGguY2VpbChjKmkpL2ksdT1NYXRoLmZsb29yKHUqaSkvaX1yPWl9cmV0dXJuIHR9LHR9ZnVuY3Rpb24gZmEoKXt2YXIgdD1YaSgpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2kodCxmYSgpKX0sWmkuYXBwbHkodCxhcmd1bWVudHMpLGhhKHQpfW9hPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj12b2lkIDA9PT10Lmdyb3VwaW5nfHx2b2lkIDA9PT10LnRob3VzYW5kcz9hYTooZT11YS5jYWxsKHQuZ3JvdXBpbmcsTnVtYmVyKSxuPXQudGhvdXNhbmRzKyIiLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9W10sbz0wLHM9ZVswXSxjPTA7aT4wJiZzPjAmJihjK3MrMT5yJiYocz1NYXRoLm1heCgxLHItYykpLGEucHVzaCh0LnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGMrPXMrMSk+cikpOylzPWVbbz0obysxKSVlLmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4obil9KSxpPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIixhPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixvPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLHM9dm9pZCAwPT09dC5udW1lcmFscz9hYTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSkpfX0odWEuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLGM9dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsdT12b2lkIDA9PT10Lm1pbnVzPyLiiJIiOnQubWludXMrIiIsbD12b2lkIDA9PT10Lm5hbj8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKHQpe3ZhciBlPSh0PUppKHQpKS5maWxsLG49dC5hbGlnbixoPXQuc2lnbixmPXQuc3ltYm9sLGQ9dC56ZXJvLHA9dC53aWR0aCx5PXQuY29tbWEsZz10LnByZWNpc2lvbixtPXQudHJpbSx2PXQudHlwZTsibiI9PT12Pyh5PSEwLHY9ImciKTppYVt2XXx8KHZvaWQgMD09PWcmJihnPTEyKSxtPSEwLHY9ImciKSwoZHx8IjAiPT09ZSYmIj0iPT09bikmJihkPSEwLGU9IjAiLG49Ij0iKTt2YXIgYj0iJCI9PT1mP2k6IiMiPT09ZiYmL1tib3hYXS8udGVzdCh2KT8iMCIrdi50b0xvd2VyQ2FzZSgpOiIiLF89IiQiPT09Zj9hOi9bJXBdLy50ZXN0KHYpP2M6IiIseD1pYVt2XSx3PS9bZGVmZ3BycyVdLy50ZXN0KHYpO2Z1bmN0aW9uIGsodCl7dmFyIGksYSxjLGY9YixrPV87aWYoImMiPT09dilrPXgodCkrayx0PSIiO2Vsc2V7dmFyIFQ9KHQ9K3QpPDB8fDEvdDwwO2lmKHQ9aXNOYU4odCk/bDp4KE1hdGguYWJzKHQpLGcpLG0mJih0PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBlLG49dC5sZW5ndGgscj0xLGk9LTE7cjxuOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPWU9cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxlPXI7YnJlYWs7ZGVmYXVsdDppZighK3Rbcl0pYnJlYWsgdDtpPjAmJihpPTApfXJldHVybiBpPjA/dC5zbGljZSgwLGkpK3Quc2xpY2UoZSsxKTp0fSh0KSksVCYmMD09K3QmJiIrIiE9PWgmJihUPSExKSxmPShUPyIoIj09PWg/aDp1OiItIj09PWh8fCIoIj09PWg/IiI6aCkrZixrPSgicyI9PT12P2xhWzgrUWkvM106IiIpK2srKFQmJiIoIj09PWg/IikiOiIiKSx3KWZvcihpPS0xLGE9dC5sZW5ndGg7KytpPGE7KWlmKDQ4PihjPXQuY2hhckNvZGVBdChpKSl8fGM+NTcpe2s9KDQ2PT09Yz9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStrLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX15JiYhZCYmKHQ9cih0LDEvMCkpO3ZhciBFPWYubGVuZ3RoK3QubGVuZ3RoK2subGVuZ3RoLEM9RTxwP25ldyBBcnJheShwLUUrMSkuam9pbihlKToiIjtzd2l0Y2goeSYmZCYmKHQ9cihDK3QsQy5sZW5ndGg/cC1rLmxlbmd0aDoxLzApLEM9IiIpLG4pe2Nhc2UiPCI6dD1mK3QraytDO2JyZWFrO2Nhc2UiPSI6dD1mK0MrdCtrO2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsRT1DLmxlbmd0aD4+MSkrZit0K2srQy5zbGljZShFKTticmVhaztkZWZhdWx0OnQ9QytmK3Qra31yZXR1cm4gcyh0KX1yZXR1cm4gZz12b2lkIDA9PT1nPzY6L1tncHJzXS8udGVzdCh2KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGcpKSxrLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LGt9cmV0dXJue2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPWgoKCh0PUppKHQpKS50eXBlPSJmIix0KSkscj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihuYShlKS8zKSkpLGk9TWF0aC5wb3coMTAsLXIpLGE9bGFbOCtyLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK2F9fX19KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLHNhPW9hLmZvcm1hdCxjYT1vYS5mb3JtYXRQcmVmaXg7Y2xhc3MgZGEgZXh0ZW5kcyBNYXB7Y29uc3RydWN0b3IodCxlPXlhKXtpZihzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse19pbnRlcm46e3ZhbHVlOm5ldyBNYXB9LF9rZXk6e3ZhbHVlOmV9fSksbnVsbCE9dClmb3IoY29uc3RbZSxuXW9mIHQpdGhpcy5zZXQoZSxuKX1nZXQodCl7cmV0dXJuIHN1cGVyLmdldChwYSh0aGlzLHQpKX1oYXModCl7cmV0dXJuIHN1cGVyLmhhcyhwYSh0aGlzLHQpKX1zZXQodCxlKXtyZXR1cm4gc3VwZXIuc2V0KGZ1bmN0aW9uKHtfaW50ZXJuOnQsX2tleTplfSxuKXtjb25zdCByPWUobik7cmV0dXJuIHQuaGFzKHIpP3QuZ2V0KHIpOih0LnNldChyLG4pLG4pfSh0aGlzLHQpLGUpfWRlbGV0ZSh0KXtyZXR1cm4gc3VwZXIuZGVsZXRlKGZ1bmN0aW9uKHtfaW50ZXJuOnQsX2tleTplfSxuKXtjb25zdCByPWUobik7cmV0dXJuIHQuaGFzKHIpJiYobj10LmdldChyKSx0LmRlbGV0ZShyKSksbn0odGhpcyx0KSl9fWZ1bmN0aW9uIHBhKHtfaW50ZXJuOnQsX2tleTplfSxuKXtjb25zdCByPWUobik7cmV0dXJuIHQuaGFzKHIpP3QuZ2V0KHIpOm59ZnVuY3Rpb24geWEodCl7cmV0dXJuIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQ/dC52YWx1ZU9mKCk6dH1TZXQ7Y29uc3QgZ2E9U3ltYm9sKCJpbXBsaWNpdCIpO2Z1bmN0aW9uIG1hKCl7dmFyIHQ9bmV3IGRhLGU9W10sbj1bXSxyPWdhO2Z1bmN0aW9uIGkoaSl7bGV0IGE9dC5nZXQoaSk7aWYodm9pZCAwPT09YSl7aWYociE9PWdhKXJldHVybiByO3Quc2V0KGksYT1lLnB1c2goaSktMSl9cmV0dXJuIG5bYSVuLmxlbmd0aF19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSx0PW5ldyBkYTtmb3IoY29uc3QgciBvZiBuKXQuaGFzKHIpfHx0LnNldChyLGUucHVzaChyKS0xKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1BcnJheS5mcm9tKHQpLGkpOm4uc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG1hKGUsbikudW5rbm93bihyKX0sWmkuYXBwbHkoaSxhcmd1bWVudHMpLGl9Y29uc3QgdmE9MWUzLGJhPTZlNCxfYT0zNmU1LHhhPTg2NGU1LHdhPTYwNDhlNSxrYT0zMTUzNmU2O3ZhciBUYT1uZXcgRGF0ZSxFYT1uZXcgRGF0ZTtmdW5jdGlvbiBDYSh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBDYSgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBUYS5zZXRUaW1lKCtlKSxFYS5zZXRUaW1lKCtyKSx0KFRhKSx0KEVhKSxNYXRoLmZsb29yKG4oVGEsRWEpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgU2E9Q2EoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTtTYS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP0NhKChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOlNhOm51bGx9O2NvbnN0IEFhPVNhO1NhLnJhbmdlO3ZhciBNYT1DYSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSp2YSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS92YX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSk7Y29uc3QgTmE9TWE7TWEucmFuZ2U7dmFyIERhPUNhKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKnZhKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmJhKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2JhfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKTtjb25zdCBPYT1EYTtEYS5yYW5nZTt2YXIgQmE9Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqdmEtdC5nZXRNaW51dGVzKCkqYmEpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqX2EpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvX2F9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKTtjb25zdCBMYT1CYTtCYS5yYW5nZTt2YXIgSWE9Q2EoKHQ9PnQuc2V0SG91cnMoMCwwLDAsMCkpLCgodCxlKT0+dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpKSwoKHQsZSk9PihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmJhKS94YSksKHQ9PnQuZ2V0RGF0ZSgpLTEpKTtjb25zdCBSYT1JYTtmdW5jdGlvbiBGYSh0KXtyZXR1cm4gQ2EoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmJhKS93YX0pKX1JYS5yYW5nZTt2YXIgUGE9RmEoMCksamE9RmEoMSksWWE9RmEoMiksemE9RmEoMyksVWE9RmEoNCkscWE9RmEoNSksSGE9RmEoNiksJGE9KFBhLnJhbmdlLGphLnJhbmdlLFlhLnJhbmdlLHphLnJhbmdlLFVhLnJhbmdlLHFhLnJhbmdlLEhhLnJhbmdlLENhKChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSkpO2NvbnN0IFdhPSRhOyRhLnJhbmdlO3ZhciBWYT1DYSgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7VmEuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9DYSgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07Y29uc3QgR2E9VmE7VmEucmFuZ2U7dmFyIFhhPUNhKChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmJhKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2JhfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKTtjb25zdCBaYT1YYTtYYS5yYW5nZTt2YXIgUWE9Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpfYSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9fYX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSkpO2NvbnN0IEthPVFhO1FhLnJhbmdlO3ZhciBKYT1DYSgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3hhfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpO2NvbnN0IHRvPUphO2Z1bmN0aW9uIGVvKHQpe3JldHVybiBDYSgoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvd2F9KSl9SmEucmFuZ2U7dmFyIG5vPWVvKDApLHJvPWVvKDEpLGlvPWVvKDIpLGFvPWVvKDMpLG9vPWVvKDQpLHNvPWVvKDUpLGNvPWVvKDYpLHVvPShuby5yYW5nZSxyby5yYW5nZSxpby5yYW5nZSxhby5yYW5nZSxvby5yYW5nZSxzby5yYW5nZSxjby5yYW5nZSxDYSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpKTtjb25zdCBsbz11bzt1by5yYW5nZTt2YXIgaG89Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO2hvLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/Q2EoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IGZvPWhvO2Z1bmN0aW9uIHBvKHQsZSxuLHIsaSxhKXtjb25zdCBvPVtbTmEsMSx2YV0sW05hLDUsNWUzXSxbTmEsMTUsMTVlM10sW05hLDMwLDNlNF0sW2EsMSxiYV0sW2EsNSwzZTVdLFthLDE1LDllNV0sW2EsMzAsMThlNV0sW2ksMSxfYV0sW2ksMywxMDhlNV0sW2ksNiwyMTZlNV0sW2ksMTIsNDMyZTVdLFtyLDEseGFdLFtyLDIsMTcyOGU1XSxbbiwxLHdhXSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsa2FdXTtmdW5jdGlvbiBzKGUsbixyKXtjb25zdCBpPU1hdGguYWJzKG4tZSkvcixhPVdyKCgoWywsdF0pPT50KSkucmlnaHQobyxpKTtpZihhPT09by5sZW5ndGgpcmV0dXJuIHQuZXZlcnkoSHIoZS9rYSxuL2thLHIpKTtpZigwPT09YSlyZXR1cm4gQWEuZXZlcnkoTWF0aC5tYXgoSHIoZSxuLHIpLDEpKTtjb25zdFtzLGNdPW9baS9vW2EtMV1bMl08b1thXVsyXS9pP2EtMTphXTtyZXR1cm4gcy5ldmVyeShjKX1yZXR1cm5bZnVuY3Rpb24odCxlLG4pe2NvbnN0IHI9ZTx0O3ImJihbdCxlXT1bZSx0XSk7Y29uc3QgaT1uJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5yYW5nZT9uOnModCxlLG4pLGE9aT9pLnJhbmdlKHQsK2UrMSk6W107cmV0dXJuIHI/YS5yZXZlcnNlKCk6YX0sc119aG8ucmFuZ2U7Y29uc3RbeW8sZ29dPXBvKGZvLGxvLG5vLHRvLEthLFphKSxbbW8sdm9dPXBvKEdhLFdhLFBhLFJhLExhLE9hKTtmdW5jdGlvbiBibyh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gX28odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24geG8odCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fXZhciB3byxrbyxUbz17Ii0iOiIiLF86IiAiLDA6IjAifSxFbz0vXlxzKlxkKy8sQ289L14lLyxTbz0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQW8odCxlLG4pe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiByKyhhPG4/bmV3IEFycmF5KG4tYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gTW8odCl7cmV0dXJuIHQucmVwbGFjZShTbywiXFwkJiIpfWZ1bmN0aW9uIE5vKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChNbykuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIERvKHQpe3JldHVybiBuZXcgTWFwKHQubWFwKCgodCxlKT0+W3QudG9Mb3dlckNhc2UoKSxlXSkpKX1mdW5jdGlvbiBPbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQudz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQudT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVj0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIHI/KHQueT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpvKHQsZSxuKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWW8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnE9MypyWzBdLTMsbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gem8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lm09clswXS0xLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHFvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5MPU1hdGguZmxvb3IoclswXS8xZTMpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhvKHQsZSxuKXt2YXIgcj1Dby5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj9uK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFpvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LlE9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUW8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLbyh0LGUpe3JldHVybiBBbyh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIEpvKHQsZSl7cmV0dXJuIEFvKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIHRzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBlcyh0LGUpe3JldHVybiBBbygxK1JhLmNvdW50KEdhKHQpLHQpLGUsMyl9ZnVuY3Rpb24gbnModCxlKXtyZXR1cm4gQW8odC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIHJzKHQsZSl7cmV0dXJuIG5zKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gaXModCxlKXtyZXR1cm4gQW8odC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBhcyh0LGUpe3JldHVybiBBbyh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIG9zKHQsZSl7cmV0dXJuIEFvKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gc3ModCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGNzKHQsZSl7cmV0dXJuIEFvKFBhLmNvdW50KEdhKHQpLTEsdCksZSwyKX1mdW5jdGlvbiB1cyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPj00fHwwPT09ZT9VYSh0KTpVYS5jZWlsKHQpfWZ1bmN0aW9uIGxzKHQsZSl7cmV0dXJuIHQ9dXModCksQW8oVWEuY291bnQoR2EodCksdCkrKDQ9PT1HYSh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBocyh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBmcyh0LGUpe3JldHVybiBBbyhqYS5jb3VudChHYSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gZHModCxlKXtyZXR1cm4gQW8odC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHBzKHQsZSl7cmV0dXJuIEFvKCh0PXVzKHQpKS5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHlzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBncyh0LGUpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIEFvKCh0PW4+PTR8fDA9PT1uP1VhKHQpOlVhLmNlaWwodCkpLmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gbXModCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStBbyhlLzYwfDAsIjAiLDIpK0FvKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIHZzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gYnModCxlKXtyZXR1cm4gQW8odC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gX3ModCxlKXtyZXR1cm4gQW8odC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIHhzKHQsZSl7cmV0dXJuIEFvKDErdG8uY291bnQoZm8odCksdCksZSwzKX1mdW5jdGlvbiB3cyh0LGUpe3JldHVybiBBbyh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24ga3ModCxlKXtyZXR1cm4gd3ModCxlKSsiMDAwIn1mdW5jdGlvbiBUcyh0LGUpe3JldHVybiBBbyh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIEVzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gQ3ModCxlKXtyZXR1cm4gQW8odC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBTcyh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gQXModCxlKXtyZXR1cm4gQW8obm8uY291bnQoZm8odCktMSx0KSxlLDIpfWZ1bmN0aW9uIE1zKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP29vKHQpOm9vLmNlaWwodCl9ZnVuY3Rpb24gTnModCxlKXtyZXR1cm4gdD1Ncyh0KSxBbyhvby5jb3VudChmbyh0KSx0KSsoND09PWZvKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIERzKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIE9zKHQsZSl7cmV0dXJuIEFvKHJvLmNvdW50KGZvKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBCcyh0LGUpe3JldHVybiBBbyh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTHModCxlKXtyZXR1cm4gQW8oKHQ9TXModCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSXModCxlKXtyZXR1cm4gQW8odC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFJzKHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gQW8oKHQ9bj49NHx8MD09PW4/b28odCk6b28uY2VpbCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBGcygpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gUHMoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24ganModCl7cmV0dXJuK3R9ZnVuY3Rpb24gWXModCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiB6cyh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gVXModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gcXModCxlLG4scixpLGEsbyxzLGMsdSl7dmFyIGw9WGkoKSxoPWwuaW52ZXJ0LGY9bC5kb21haW4sZD11KCIuJUwiKSxwPXUoIjolUyIpLHk9dSgiJUk6JU0iKSxnPXUoIiVJICVwIiksbT11KCIlYSAlZCIpLHY9dSgiJWIgJWQiKSxiPXUoIiVCIiksXz11KCIlWSIpO2Z1bmN0aW9uIHgodCl7cmV0dXJuKGModCk8dD9kOnModCk8dD9wOm8odCk8dD95OmEodCk8dD9nOnIodCk8dD9pKHQpPHQ/bTp2Om4odCk8dD9iOl8pKHQpfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoaCh0KSl9LGwuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2YoQXJyYXkuZnJvbSh0LFVzKSk6ZigpLm1hcCh6cyl9LGwudGlja3M9ZnVuY3Rpb24oZSl7dmFyIG49ZigpO3JldHVybiB0KG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT1lPzEwOmUpfSxsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZT94OnUoZSl9LGwubmljZT1mdW5jdGlvbih0KXt2YXIgbj1mKCk7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJhbmdlfHwodD1lKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpKSx0P2YoZnVuY3Rpb24odCxlKXt2YXIgbixyPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLGE9dFtyXSxvPXRbaV07cmV0dXJuIG88YSYmKG49cixyPWksaT1uLG49YSxhPW8sbz1uKSx0W3JdPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH0obix0KSk6bH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdpKGwscXModCxlLG4scixpLGEsbyxzLGMsdSkpfSxsfWZ1bmN0aW9uIEhzKCl7fWZ1bmN0aW9uICRzKHQpe3JldHVybiBudWxsPT10P0hzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24gV3ModCl7cmV0dXJuIG51bGw9PXQ/W106QXJyYXkuaXNBcnJheSh0KT90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gVnMoKXtyZXR1cm5bXX1mdW5jdGlvbiBHcyh0KXtyZXR1cm4gbnVsbD09dD9WczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIFhzKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIFpzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKHQpfX13bz1mdW5jdGlvbih0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLHI9dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLG89dC5zaG9ydERheXMscz10Lm1vbnRocyxjPXQuc2hvcnRNb250aHMsdT1ObyhpKSxsPURvKGkpLGg9Tm8oYSksZj1EbyhhKSxkPU5vKG8pLHA9RG8obykseT1ObyhzKSxnPURvKHMpLG09Tm8oYyksdj1EbyhjKSxiPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6S28sZTpLbyxmOnJzLGc6cHMsRzpncyxIOkpvLEk6dHMsajplcyxMOm5zLG06aXMsTTphcyxwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0TW9udGgoKS8zKX0sUTpqcyxzOllzLFM6b3MsdTpzcyxVOmNzLFY6bHMsdzpocyxXOmZzLHg6bnVsbCxYOm51bGwseTpkcyxZOnlzLFo6bXMsIiUiOlBzfSxfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6dnMsZTp2cyxmOmtzLGc6THMsRzpScyxIOmJzLEk6X3Msajp4cyxMOndzLG06VHMsTTpFcyxwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTpqcyxzOllzLFM6Q3MsdTpTcyxVOkFzLFY6TnMsdzpEcyxXOk9zLHg6bnVsbCxYOm51bGwseTpCcyxZOklzLFo6RnMsIiUiOlBzfSx4PXthOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1kLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1wLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1mLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT12LmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj15LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT1nLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gVCh0LGUsbixyKX0sZDpVbyxlOlVvLGY6R28sZzpQbyxHOkZvLEg6SG8sSTpIbyxqOnFvLEw6Vm8sbTp6byxNOiRvLHA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXUuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5wPWwuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksbityWzBdLmxlbmd0aCk6LTF9LHE6WW8sUTpabyxzOlFvLFM6V28sdTpCbyxVOkxvLFY6SW8sdzpPbyxXOlJvLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUKHQsbixlLHIpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gVCh0LHIsZSxuKX0seTpQbyxZOkZvLFo6am8sIiUiOlhvfTtmdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYSxvPVtdLHM9LTEsYz0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGMscykpLG51bGwhPShpPVRvW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwoYT1lW3JdKSYmKHI9YShuLGkpKSxvLnB1c2gociksYz1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLHMpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYT14bygxOTAwLHZvaWQgMCwxKTtpZihUKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0ocj1fbyh4byhhLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9yby5jZWlsKHIpOnJvKHIpLHI9dG8ub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRVVENGdWxsWWVhcigpLGEubT1yLmdldFVUQ01vbnRoKCksYS5kPXIuZ2V0VVRDRGF0ZSgpKyhhLncrNiklNyk6KGk9KHI9Ym8oeG8oYS55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/amEuY2VpbChyKTpqYShyKSxyPVJhLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0RnVsbFllYXIoKSxhLm09ci5nZXRNb250aCgpLGEuZD1yLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9fbyh4byhhLnksMCwxKSkuZ2V0VVRDRGF5KCk6Ym8oeG8oYS55LDAsMSkpLmdldERheSgpLGEubT0wLGEuZD0iVyJpbiBhPyhhLncrNiklNys3KmEuVy0oaSs1KSU3OmEudys3KmEuVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBhPyhhLkgrPWEuWi8xMDB8MCxhLk0rPWEuWiUxMDAsX28oYSkpOmJvKGEpfX1mdW5jdGlvbiBUKHQsZSxuLHIpe2Zvcih2YXIgaSxhLG89MCxzPWUubGVuZ3RoLGM9bi5sZW5ndGg7bzxzOyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChvKyspKSl7aWYoaT1lLmNoYXJBdChvKyspLCEoYT14W2kgaW4gVG8/ZS5jaGFyQXQobysrKTppXSl8fChyPWEodCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KG4sYiksYi5YPXcocixiKSxiLmM9dyhlLGIpLF8ueD13KG4sXyksXy5YPXcocixfKSxfLmM9dyhlLF8pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixfKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSksa289d28uZm9ybWF0LHdvLnBhcnNlLHdvLnV0Y0Zvcm1hdCx3by51dGNQYXJzZTt2YXIgUXM9QXJyYXkucHJvdG90eXBlLmZpbmQ7ZnVuY3Rpb24gS3MoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH12YXIgSnM9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiB0Yygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIGVjKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIG5jKHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIHJjKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBpYyh0LGUsbixyLGksYSl7Zm9yKHZhciBvLHM9MCxjPWUubGVuZ3RoLHU9YS5sZW5ndGg7czx1Oysrcykobz1lW3NdKT8oby5fX2RhdGFfXz1hW3NdLHJbc109byk6bltzXT1uZXcgbmModCxhW3NdKTtmb3IoO3M8YzsrK3MpKG89ZVtzXSkmJihpW3NdPW8pfWZ1bmN0aW9uIGFjKHQsZSxuLHIsaSxhLG8pe3ZhciBzLGMsdSxsPW5ldyBNYXAsaD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT1vLmNhbGwoYyxjLl9fZGF0YV9fLHMsZSkrIiIsbC5oYXModSk/aVtzXT1jOmwuc2V0KHUsYykpO2ZvcihzPTA7czxmOysrcyl1PW8uY2FsbCh0LGFbc10scyxhKSsiIiwoYz1sLmdldCh1KSk/KHJbc109YyxjLl9fZGF0YV9fPWFbc10sbC5kZWxldGUodSkpOm5bc109bmV3IG5jKHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsLmdldChkW3NdKT09PWMmJihpW3NdPWMpfWZ1bmN0aW9uIG9jKHQpe3JldHVybiB0Ll9fZGF0YV9ffWZ1bmN0aW9uIHNjKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBjYyh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1uYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5jLGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciB1Yz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgbGM9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnVjLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gaGModCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksbGMuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOmxjW2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gZmModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIGRjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gcGModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiB5Yyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBnYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gbWModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gdmModCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGJjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIF9jKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24geGModCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixuKX19ZnVuY3Rpb24gd2ModCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHx2Yyh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBrYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gVGModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIEVjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIENjKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBTYyh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBBYyh0KX1mdW5jdGlvbiBBYyh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9Q2ModC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBNYyh0LGUpe2Zvcih2YXIgbj1TYyh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4uYWRkKGVbcl0pfWZ1bmN0aW9uIE5jKHQsZSl7Zm9yKHZhciBuPVNjKHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5yZW1vdmUoZVtyXSl9ZnVuY3Rpb24gRGModCl7cmV0dXJuIGZ1bmN0aW9uKCl7TWModGhpcyx0KX19ZnVuY3Rpb24gT2ModCl7cmV0dXJuIGZ1bmN0aW9uKCl7TmModGhpcyx0KX19ZnVuY3Rpb24gQmModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/TWM6TmMpKHRoaXMsdCl9fWZ1bmN0aW9uIExjKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBJYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIFJjKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBGYygpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIFBjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIGpjKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gWWMoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gemMoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBVYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PXVjJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT11Yz9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24gcWModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gSGModCl7dmFyIGU9aGModCk7cmV0dXJuKGUubG9jYWw/cWM6VWMpKGUpfWZ1bmN0aW9uICRjKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2MoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBWYygpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gR2MoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIFhjKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIFpjKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsYT1lLmxlbmd0aDtyPGE7KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLm9wdGlvbnMpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBRYyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsaT10aGlzLl9fb24sYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsZSx0aGlzLl9fZGF0YV9fKX19KGUpO2lmKGkpZm9yKHZhciBvPTAscz1pLmxlbmd0aDtvPHM7KytvKWlmKChyPWlbb10pLnR5cGU9PT10LnR5cGUmJnIubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHIudHlwZSxyLmxpc3RlbmVyLHIub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKHIudHlwZSxyLmxpc3RlbmVyPWEsci5vcHRpb25zPW4pLHZvaWQoci52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGEsbikscj17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjphLG9wdGlvbnM6bn0saT9pLnB1c2gocik6dGhpcy5fX29uPVtyXX19ZnVuY3Rpb24gS2ModCxlLG4pe3ZhciByPXZjKHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEpjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEtjKHRoaXMsdCxlKX19ZnVuY3Rpb24gdHUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gS2ModGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19QWMucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgZXU9W251bGxdO2Z1bmN0aW9uIG51KHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIHJ1KCl7cmV0dXJuIG5ldyBudShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGV1KX1udS5wcm90b3R5cGU9cnUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpudSxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PSRzKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG8scz1lW2ldLGM9cy5sZW5ndGgsdT1yW2ldPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkoYT1zW2xdKSYmKG89dC5jYWxsKGEsYS5fX2RhdGFfXyxsLHMpKSYmKCJfX2RhdGFfXyJpbiBhJiYoby5fX2RhdGFfXz1hLl9fZGF0YV9fKSx1W2xdPW8pO3JldHVybiBuZXcgbnUocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Q9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFdzKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KHQpOkdzKHQpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IG51KHIsaSl9LHNlbGVjdENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT10P0tzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRcy5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgdD90OlpzKHQpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT10P3RjOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBKcy5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgdD90OlpzKHQpKSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9WHModCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IG51KHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLG9jKTt2YXIgbj1lP2FjOmljLHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cmModCkpO2Zvcih2YXIgYT1pLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSl7dmFyIGw9clt1XSxoPWlbdV0sZj1oLmxlbmd0aCxkPXNjKHQuY2FsbChsLGwmJmwuX19kYXRhX18sdSxyKSkscD1kLmxlbmd0aCx5PXNbdV09bmV3IEFycmF5KHApLGc9b1t1XT1uZXcgQXJyYXkocCksbT1jW3VdPW5ldyBBcnJheShmKTtuKGwsaCx5LGcsbSxkLGUpO2Zvcih2YXIgdixiLF89MCx4PTA7XzxwOysrXylpZih2PXlbX10pe2ZvcihfPj14JiYoeD1fKzEpOyEoYj1nW3hdKSYmKyt4PHA7KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihvPW5ldyBudShvLHIpKS5fZW50ZXI9cyxvLl9leGl0PWMsb30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG51KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKGVjKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgbnUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChlYyksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8ocj10KHIpKSYmKHI9ci5zZWxlY3Rpb24oKSk6cj1yLmFwcGVuZCh0KyIiKSxudWxsIT1lJiYoaT1lKGkpKSYmKGk9aS5zZWxlY3Rpb24oKSksbnVsbD09bj9hLnJlbW92ZSgpOm4oYSksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dCxuPXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9ci5sZW5ndGgsbz1NYXRoLm1pbihpLGEpLHM9bmV3IEFycmF5KGkpLGM9MDtjPG87KytjKWZvcih2YXIgdSxsPW5bY10saD1yW2NdLGY9bC5sZW5ndGgsZD1zW2NdPW5ldyBBcnJheShmKSxwPTA7cDxmOysrcCkodT1sW3BdfHxoW3BdKSYmKGRbcF09dSk7Zm9yKDtjPGk7KytjKXNbY109bltjXTtyZXR1cm4gbmV3IG51KHMsdGhpcy5fcGFyZW50cyl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1jYyk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgbnUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgcj10W2VdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpe3ZhciBvPXJbaV07aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe2xldCB0PTA7Zm9yKGNvbnN0IGUgb2YgdGhpcykrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilmb3IodmFyIGksYT1lW25dLG89MCxzPWEubGVuZ3RoO288czsrK28pKGk9YVtvXSkmJnQuY2FsbChpLGkuX19kYXRhX18sbyxhKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPWhjKHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnIuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9kYzpmYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP21jOmdjOm4ubG9jYWw/eWM6cGMpKG4sZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/YmM6ImZ1bmN0aW9uIj09dHlwZW9mIGU/eGM6X2MpKHQsZSxudWxsPT1uPyIiOm4pKTp3Yyh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9rYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9FYzpUYykodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1DYyh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1TYyh0aGlzLm5vZGUoKSksaT0tMSxhPW4ubGVuZ3RoOysraTxhOylpZighci5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9CYzplP0RjOk9jKShuLGUpKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9MYzooImZ1bmN0aW9uIj09dHlwZW9mIHQ/UmM6SWMpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9GYzooImZ1bmN0aW9uIj09dHlwZW9mIHQ/amM6UGMpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChZYyl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh6Yyl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhjKHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGModCkscj1udWxsPT1lPyRjOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JHMoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goV2MpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9HYzpWYyl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1YYyh0KyIiKSxvPWEubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9RYzpaYyxyPTA7cjxvOysrcil0aGlzLmVhY2gocyhhW3JdLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGMsdT0wLGw9cy5sZW5ndGg7dTxsOysrdSlmb3Iocj0wLGM9c1t1XTtyPG87KytyKWlmKChpPWFbcl0pLnR5cGU9PT1jLnR5cGUmJmkubmFtZT09PWMubmFtZSlyZXR1cm4gYy52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT90dTpKYykodCxlKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHIsaT10W2VdLGE9MCxvPWkubGVuZ3RoO2E8bzsrK2EpKHI9aVthXSkmJih5aWVsZCByKX19O2NvbnN0IGl1PXJ1O2Z1bmN0aW9uIGF1KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgbnUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBudShbW3RdXSxldSl9ZnVuY3Rpb24gb3UodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBudShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBudShbV3ModCldLGV1KX1jb25zdCBzdT1NYXRoLlBJLGN1PTIqc3UsdXU9MWUtNixsdT1jdS11dTtmdW5jdGlvbiBodSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGZ1KCl7cmV0dXJuIG5ldyBodX1odS5wcm90b3R5cGU9ZnUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpodSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt0PSt0LGU9K2Usbj0rbixyPStyLGk9K2k7dmFyIGE9dGhpcy5feDEsbz10aGlzLl95MSxzPW4tdCxjPXItZSx1PWEtdCxsPW8tZSxoPXUqdStsKmw7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+dXUpaWYoTWF0aC5hYnMobCpzLWMqdSk+dXUmJmkpe3ZhciBmPW4tYSxkPXItbyxwPXMqcytjKmMseT1mKmYrZCpkLGc9TWF0aC5zcXJ0KHApLG09TWF0aC5zcXJ0KGgpLHY9aSpNYXRoLnRhbigoc3UtTWF0aC5hY29zKChwK2gteSkvKDIqZyptKSkpLzIpLGI9di9tLF89di9nO01hdGguYWJzKGItMSk+dXUmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmwpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsobCpmPnUqZCkrIiwiKyh0aGlzLl94MT10K18qcykrIiwiKyh0aGlzLl95MT1lK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0PSt0LGU9K2UsYT0hIWE7dmFyIG89KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxjPXQrbyx1PWUrcyxsPTFeYSxoPWE/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2MrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWMpPnV1fHxNYXRoLmFicyh0aGlzLl95MS11KT51dSkmJih0aGlzLl8rPSJMIitjKyIsIit1KSxuJiYoaDwwJiYoaD1oJWN1K2N1KSxoPmx1P3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodC1vKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodGhpcy5feDE9YykrIiwiKyh0aGlzLl95MT11KTpoPnV1JiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1zdSkrIiwiK2wrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2NvbnN0IGR1PWZ1O2Z1bmN0aW9uIHB1KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgeXU9TWF0aC5hYnMsZ3U9TWF0aC5hdGFuMixtdT1NYXRoLmNvcyx2dT1NYXRoLm1heCxidT1NYXRoLm1pbixfdT1NYXRoLnNpbix4dT1NYXRoLnNxcnQsd3U9MWUtMTIsa3U9TWF0aC5QSSxUdT1rdS8yLEV1PTIqa3U7ZnVuY3Rpb24gQ3UodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/a3U6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIFN1KHQpe3JldHVybiB0Pj0xP1R1OnQ8PS0xPy1UdTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gQXUodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gTXUodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gTnUodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBEdSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBPdSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBCdSh0LGUsbixyLGksYSxvLHMpe3ZhciBjPW4tdCx1PXItZSxsPW8taSxoPXMtYSxmPWgqYy1sKnU7aWYoIShmKmY8d3UpKXJldHVyblt0KyhmPShsKihlLWEpLWgqKHQtaSkpL2YpKmMsZStmKnVdfWZ1bmN0aW9uIEx1KHQsZSxuLHIsaSxhLG8pe3ZhciBzPXQtbixjPWUtcix1PShvP2E6LWEpL3h1KHMqcytjKmMpLGw9dSpjLGg9LXUqcyxmPXQrbCxkPWUraCxwPW4rbCx5PXIraCxnPShmK3ApLzIsbT0oZCt5KS8yLHY9cC1mLGI9eS1kLF89dip2K2IqYix4PWktYSx3PWYqeS1wKmQsaz0oYjwwPy0xOjEpKnh1KHZ1KDAseCp4Kl8tdyp3KSksVD0odypiLXYqaykvXyxFPSgtdyp2LWIqaykvXyxDPSh3KmIrdiprKS9fLFM9KC13KnYrYiprKS9fLEE9VC1nLE09RS1tLE49Qy1nLEQ9Uy1tO3JldHVybiBBKkErTSpNPk4qTitEKkQmJihUPUMsRT1TKSx7Y3g6VCxjeTpFLHgwMTotbCx5MDE6LWgseDExOlQqKGkveC0xKSx5MTE6RSooaS94LTEpfX1mdW5jdGlvbiBJdSgpe3ZhciB0PUF1LGU9TXUsbj1wdSgwKSxyPW51bGwsaT1OdSxhPUR1LG89T3Uscz1udWxsO2Z1bmN0aW9uIGMoKXt2YXIgYyx1LGw9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktVHUsZD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1UdSxwPXl1KGQtZikseT1kPmY7aWYoc3x8KHM9Yz1kdSgpKSxoPGwmJih1PWgsaD1sLGw9dSksaD53dSlpZihwPkV1LXd1KXMubW92ZVRvKGgqbXUoZiksaCpfdShmKSkscy5hcmMoMCwwLGgsZixkLCF5KSxsPnd1JiYocy5tb3ZlVG8obCptdShkKSxsKl91KGQpKSxzLmFyYygwLDAsbCxkLGYseSkpO2Vsc2V7dmFyIGcsbSx2PWYsYj1kLF89Zix4PWQsdz1wLGs9cCxUPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsRT1UPnd1JiYocj8rci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eHUobCpsK2gqaCkpLEM9YnUoeXUoaC1sKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksUz1DLEE9QztpZihFPnd1KXt2YXIgTT1TdShFL2wqX3UoVCkpLE49U3UoRS9oKl91KFQpKTsody09MipNKT53dT8oXys9TSo9eT8xOi0xLHgtPU0pOih3PTAsXz14PShmK2QpLzIpLChrLT0yKk4pPnd1Pyh2Kz1OKj15PzE6LTEsYi09Tik6KGs9MCx2PWI9KGYrZCkvMil9dmFyIEQ9aCptdSh2KSxPPWgqX3UodiksQj1sKm11KHgpLEw9bCpfdSh4KTtpZihDPnd1KXt2YXIgSSxSPWgqbXUoYiksRj1oKl91KGIpLFA9bCptdShfKSxqPWwqX3UoXyk7aWYocDxrdSYmKEk9QnUoRCxPLFAsaixSLEYsQixMKSkpe3ZhciBZPUQtSVswXSx6PU8tSVsxXSxVPVItSVswXSxxPUYtSVsxXSxIPTEvX3UoQ3UoKFkqVSt6KnEpLyh4dShZKlkreip6KSp4dShVKlUrcSpxKSkpLzIpLCQ9eHUoSVswXSpJWzBdK0lbMV0qSVsxXSk7Uz1idShDLChsLSQpLyhILTEpKSxBPWJ1KEMsKGgtJCkvKEgrMSkpfX1rPnd1P0E+d3U/KGc9THUoUCxqLEQsTyxoLEEseSksbT1MdShSLEYsQixMLGgsQSx5KSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEE8Qz9zLmFyYyhnLmN4LGcuY3ksQSxndShnLnkwMSxnLngwMSksZ3UobS55MDEsbS54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LEEsZ3UoZy55MDEsZy54MDEpLGd1KGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGgsZ3UoZy5jeStnLnkxMSxnLmN4K2cueDExKSxndShtLmN5K20ueTExLG0uY3grbS54MTEpLCF5KSxzLmFyYyhtLmN4LG0uY3ksQSxndShtLnkxMSxtLngxMSksZ3UobS55MDEsbS54MDEpLCF5KSkpOihzLm1vdmVUbyhELE8pLHMuYXJjKDAsMCxoLHYsYiwheSkpOnMubW92ZVRvKEQsTyksbD53dSYmdz53dT9TPnd1PyhnPUx1KEIsTCxSLEYsbCwtUyx5KSxtPUx1KEQsTyxQLGosbCwtUyx5KSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLFM8Qz9zLmFyYyhnLmN4LGcuY3ksUyxndShnLnkwMSxnLngwMSksZ3UobS55MDEsbS54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LFMsZ3UoZy55MDEsZy54MDEpLGd1KGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGwsZ3UoZy5jeStnLnkxMSxnLmN4K2cueDExKSxndShtLmN5K20ueTExLG0uY3grbS54MTEpLHkpLHMuYXJjKG0uY3gsbS5jeSxTLGd1KG0ueTExLG0ueDExKSxndShtLnkwMSxtLngwMSksIXkpKSk6cy5hcmMoMCwwLGwseCxfLHkpOnMubGluZVRvKEIsTCl9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksYylyZXR1cm4gcz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIta3UvMjtyZXR1cm5bbXUocikqbixfdShyKSpuXX0sYy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnB1KCtlKSxjKTp0fSxjLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLGMpOmV9LGMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLGMpOm59LGMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxjKTpyfSxjLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSgrdCksYyk6aX0sYy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxjKTphfSxjLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxjKTpzfSxjfWZ1bmN0aW9uIFJ1KHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBGdSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUHUodCl7cmV0dXJuIG5ldyBGdSh0KX1mdW5jdGlvbiBqdSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBZdSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB6dSh0LGUpe3ZhciBuPXB1KCEwKSxyPW51bGwsaT1QdSxhPW51bGw7ZnVuY3Rpb24gbyhvKXt2YXIgcyxjLHUsbD0obz1SdShvKSkubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PXImJihhPWkodT1kdSgpKSkscz0wO3M8PWw7KytzKSEoczxsJiZuKGM9b1tzXSxzLG8pKT09PWgmJigoaD0haCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSksaCYmYS5wb2ludCgrdChjLHMsbyksK2UoYyxzLG8pKTtpZih1KXJldHVybiBhPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gdD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnZvaWQgMD09PXQ/anU6cHUodCksZT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnZvaWQgMD09PWU/WXU6cHUoZSksby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cHUoK2UpLG8pOnR9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxvKTplfSxvLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSghIXQpLG8pOm59LG8uY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYoYT1pKHIpKSxvKTppfSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1hPW51bGw6YT1pKHI9dCksbyk6cn0sb31mdW5jdGlvbiBVdSh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBxdSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBIdSgpe31mdW5jdGlvbiAkdSh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gV3UodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFZ1KHQpe3JldHVybiBuZXcgV3UodCl9ZnVuY3Rpb24gR3UodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFh1KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBadSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUXUodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEt1KHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxvPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0oYSppK28qcikvKHIraSk7cmV0dXJuKFF1KGEpK1F1KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gSnUodCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIHRsKHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrcyxpK3MqZSxhLXMsby1zKm4sYSxvKX1mdW5jdGlvbiBlbCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbmwodCl7dGhpcy5fY29udGV4dD1uZXcgcmwodCl9ZnVuY3Rpb24gcmwodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGlsKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhbCh0KXt2YXIgZSxuLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsYVtyLTFdPTcsb1tyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upbj1pW2VdL2FbZS0xXSxhW2VdLT1uLG9bZV0tPW4qb1tlLTFdO2ZvcihpW3ItMV09b1tyLTFdL2Fbci0xXSxlPXItMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtyLTFdPSh0W3JdK2lbci0xXSkvMixlPTA7ZTxyLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIG9sKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1BcnJheS5wcm90b3R5cGUuc2xpY2UsRnUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX0sV3UucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzokdSh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDokdSh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sR3UucHJvdG90eXBlPXthcmVhU3RhcnQ6SHUsYXJlYUVuZDpIdSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6JHUodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LFh1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBuPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obixyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6JHUodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LFp1LnByb3RvdHlwZT17YXJlYVN0YXJ0Okh1LGFyZWFFbmQ6SHUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0sZWwucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOnRsKHRoaXMsdGhpcy5fdDAsSnUodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRsKHRoaXMsSnUodGhpcyxuPUt1KHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDp0bCh0aGlzLHRoaXMuX3QwLG49S3UodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwobmwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWwucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtlbC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LHJsLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyLGksYSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxyLG4sYSxpKX19LGlsLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGg7aWYobilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09bil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciByPWFsKHQpLGk9YWwoZSksYT0wLG89MTtvPG47KythLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oclswXVthXSxpWzBdW2FdLHJbMV1bYV0saVsxXVthXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PW4pJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LG9sLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19O3ZhciBzbD1uZXcgRGF0ZSxjbD1uZXcgRGF0ZTtmdW5jdGlvbiB1bCh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiB1bCgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBzbC5zZXRUaW1lKCtlKSxjbC5zZXRUaW1lKCtyKSx0KHNsKSx0KGNsKSxNYXRoLmZsb29yKG4oc2wsY2wpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX1jb25zdCBsbD04NjRlNSxobD02MDQ4ZTU7ZnVuY3Rpb24gZmwodCl7cmV0dXJuIHVsKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9obH0pKX12YXIgZGw9ZmwoMCkscGw9ZmwoMSkseWw9ZmwoMiksZ2w9ZmwoMyksbWw9ZmwoNCksdmw9ZmwoNSksYmw9ZmwoNiksX2w9KGRsLnJhbmdlLHBsLnJhbmdlLHlsLnJhbmdlLGdsLnJhbmdlLG1sLnJhbmdlLHZsLnJhbmdlLGJsLnJhbmdlLHVsKChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbGx9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSkpO2NvbnN0IHhsPV9sO2Z1bmN0aW9uIHdsKHQpe3JldHVybiB1bCgoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS9obH0pKX1fbC5yYW5nZTt2YXIga2w9d2woMCksVGw9d2woMSksRWw9d2woMiksQ2w9d2woMyksU2w9d2woNCksQWw9d2woNSksTWw9d2woNiksTmw9KGtsLnJhbmdlLFRsLnJhbmdlLEVsLnJhbmdlLENsLnJhbmdlLFNsLnJhbmdlLEFsLnJhbmdlLE1sLnJhbmdlLHVsKCh0PT50LnNldEhvdXJzKDAsMCwwLDApKSwoKHQsZSk9PnQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSksKCh0LGUpPT4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpL2xsKSwodD0+dC5nZXREYXRlKCktMSkpKTtjb25zdCBEbD1ObDtObC5yYW5nZTt2YXIgT2w9dWwoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO09sLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dWwoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IEJsPU9sO09sLnJhbmdlO3ZhciBMbD11bCgoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7TGwuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD91bCgoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07Y29uc3QgSWw9TGw7ZnVuY3Rpb24gUmwodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIEZsKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIFBsKHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1MbC5yYW5nZTt2YXIgamwsWWwsemw9eyItIjoiIixfOiIgIiwwOiIwIn0sVWw9L15ccypcZCsvLHFsPS9eJS8sSGw9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uICRsKHQsZSxuKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gcisoYTxuP25ldyBBcnJheShuLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIFdsKHQpe3JldHVybiB0LnJlcGxhY2UoSGwsIlxcJCYiKX1mdW5jdGlvbiBWbCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoV2wpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBHbCh0KXtyZXR1cm4gbmV3IE1hcCh0Lm1hcCgoKHQsZSk9Plt0LnRvTG93ZXJDYXNlKCksZV0pKSl9ZnVuY3Rpb24gWGwodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWmwodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWwodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS2wodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSmwodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdGgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZWgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuaCh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJoKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGloKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1aCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmaCh0LGUsbil7dmFyIHI9cWwuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBkaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBoKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geWgodCxlKXtyZXR1cm4gJGwodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBnaCh0LGUpe3JldHVybiAkbCh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBtaCh0LGUpe3JldHVybiAkbCh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gdmgodCxlKXtyZXR1cm4gJGwoMStEbC5jb3VudChCbCh0KSx0KSxlLDMpfWZ1bmN0aW9uIGJoKHQsZSl7cmV0dXJuICRsKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBfaCh0LGUpe3JldHVybiBiaCh0LGUpKyIwMDAifWZ1bmN0aW9uIHhoKHQsZSl7cmV0dXJuICRsKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gd2godCxlKXtyZXR1cm4gJGwodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBraCh0LGUpe3JldHVybiAkbCh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIFRoKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBFaCh0LGUpe3JldHVybiAkbChrbC5jb3VudChCbCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gQ2godCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/U2wodCk6U2wuY2VpbCh0KX1mdW5jdGlvbiBTaCh0LGUpe3JldHVybiB0PUNoKHQpLCRsKFNsLmNvdW50KEJsKHQpLHQpKyg0PT09QmwodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gQWgodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gTWgodCxlKXtyZXR1cm4gJGwoVGwuY291bnQoQmwodCktMSx0KSxlLDIpfWZ1bmN0aW9uIE5oKHQsZSl7cmV0dXJuICRsKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBEaCh0LGUpe3JldHVybiAkbCgodD1DaCh0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBPaCh0LGUpe3JldHVybiAkbCh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gQmgodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiAkbCgodD1uPj00fHwwPT09bj9TbCh0KTpTbC5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIExoKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrJGwoZS82MHwwLCIwIiwyKSskbChlJTYwLCIwIiwyKX1mdW5jdGlvbiBJaCh0LGUpe3JldHVybiAkbCh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIFJoKHQsZSl7cmV0dXJuICRsKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIEZoKHQsZSl7cmV0dXJuICRsKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBQaCh0LGUpe3JldHVybiAkbCgxK3hsLmNvdW50KElsKHQpLHQpLGUsMyl9ZnVuY3Rpb24gamgodCxlKXtyZXR1cm4gJGwodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFloKHQsZSl7cmV0dXJuIGpoKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gemgodCxlKXtyZXR1cm4gJGwodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBVaCh0LGUpe3JldHVybiAkbCh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHFoKHQsZSl7cmV0dXJuICRsKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gSGgodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uICRoKHQsZSl7cmV0dXJuICRsKGRsLmNvdW50KElsKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBXaCh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9tbCh0KTptbC5jZWlsKHQpfWZ1bmN0aW9uIFZoKHQsZSl7cmV0dXJuIHQ9V2godCksJGwobWwuY291bnQoSWwodCksdCkrKDQ9PT1JbCh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBHaCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBYaCh0LGUpe3JldHVybiAkbChwbC5jb3VudChJbCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gWmgodCxlKXtyZXR1cm4gJGwodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIFFoKHQsZSl7cmV0dXJuICRsKCh0PVdoKHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEtoKHQsZSl7cmV0dXJuICRsKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBKaCh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuICRsKCh0PW4+PTR8fDA9PT1uP21sKHQpOm1sLmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gdGYoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGVmKCl7cmV0dXJuIiUifWZ1bmN0aW9uIG5mKHQpe3JldHVybit0fWZ1bmN0aW9uIHJmKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9amw9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRlVGltZSxuPXQuZGF0ZSxyPXQudGltZSxpPXQucGVyaW9kcyxhPXQuZGF5cyxvPXQuc2hvcnREYXlzLHM9dC5tb250aHMsYz10LnNob3J0TW9udGhzLHU9VmwoaSksbD1HbChpKSxoPVZsKGEpLGY9R2woYSksZD1WbChvKSxwPUdsKG8pLHk9VmwocyksZz1HbChzKSxtPVZsKGMpLHY9R2woYyksYj17YTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOnloLGU6eWgsZjpfaCxnOkRoLEc6QmgsSDpnaCxJOm1oLGo6dmgsTDpiaCxtOnhoLE06d2gscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6bmYsczpyZixTOmtoLHU6VGgsVTpFaCxWOlNoLHc6QWgsVzpNaCx4Om51bGwsWDpudWxsLHk6TmgsWTpPaCxaOkxoLCIlIjplZn0sXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOkloLGU6SWgsZjpZaCxnOlFoLEc6SmgsSDpSaCxJOkZoLGo6UGgsTDpqaCxtOnpoLE06VWgscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6bmYsczpyZixTOnFoLHU6SGgsVTokaCxWOlZoLHc6R2gsVzpYaCx4Om51bGwsWDpudWxsLHk6WmgsWTpLaCxaOnRmLCIlIjplZn0seD17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cC5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9Zi5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09di5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9eS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09Zy5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4scil7cmV0dXJuIFQodCxlLG4scil9LGQ6YWgsZTphaCxmOmhoLGc6ZWgsRzp0aCxIOnNoLEk6c2gsajpvaCxMOmxoLG06aWgsTTpjaCxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxxOnJoLFE6ZGgsczpwaCxTOnVoLHU6WmwsVTpRbCxWOktsLHc6WGwsVzpKbCx4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVCh0LG4sZSxyKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFQodCxyLGUsbil9LHk6ZWgsWTp0aCxaOm5oLCIlIjpmaH07ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGEsbz1bXSxzPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8dTspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShjLHMpKSxudWxsIT0oaT16bFtyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKGE9ZVtyXSkmJihyPWEobixpKSksby5wdXNoKHIpLGM9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxzKSksby5qb2luKCIiKX19ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGE9UGwoMTkwMCx2b2lkIDAsMSk7aWYoVChhLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGEpcmV0dXJuIG5ldyBEYXRlKGEuUSk7aWYoInMiaW4gYSlyZXR1cm4gbmV3IERhdGUoMWUzKmEucysoIkwiaW4gYT9hLkw6MCkpO2lmKGUmJiEoIloiaW4gYSkmJihhLlo9MCksInAiaW4gYSYmKGEuSD1hLkglMTIrMTIqYS5wKSx2b2lkIDA9PT1hLm0mJihhLm09InEiaW4gYT9hLnE6MCksIlYiaW4gYSl7aWYoYS5WPDF8fGEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBhfHwoYS53PTEpLCJaImluIGE/KGk9KHI9RmwoUGwoYS55LDAsMSkpKS5nZXRVVENEYXkoKSxyPWk+NHx8MD09PWk/cGwuY2VpbChyKTpwbChyKSxyPXhsLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0VVRDRnVsbFllYXIoKSxhLm09ci5nZXRVVENNb250aCgpLGEuZD1yLmdldFVUQ0RhdGUoKSsoYS53KzYpJTcpOihpPShyPVJsKFBsKGEueSwwLDEpKSkuZ2V0RGF5KCkscj1pPjR8fDA9PT1pP1RsLmNlaWwocik6VGwocikscj1EbC5vZmZzZXQociw3KihhLlYtMSkpLGEueT1yLmdldEZ1bGxZZWFyKCksYS5tPXIuZ2V0TW9udGgoKSxhLmQ9ci5nZXREYXRlKCkrKGEudys2KSU3KX1lbHNlKCJXImluIGF8fCJVImluIGEpJiYoInciaW4gYXx8KGEudz0idSJpbiBhP2EudSU3OiJXImluIGE/MTowKSxpPSJaImluIGE/RmwoUGwoYS55LDAsMSkpLmdldFVUQ0RheSgpOlJsKFBsKGEueSwwLDEpKS5nZXREYXkoKSxhLm09MCxhLmQ9IlciaW4gYT8oYS53KzYpJTcrNyphLlctKGkrNSklNzphLncrNyphLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gYT8oYS5IKz1hLlovMTAwfDAsYS5NKz1hLlolMTAwLEZsKGEpKTpSbChhKX19ZnVuY3Rpb24gVCh0LGUsbixyKXtmb3IodmFyIGksYSxvPTAscz1lLmxlbmd0aCxjPW4ubGVuZ3RoO288czspe2lmKHI+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQobysrKSkpe2lmKGk9ZS5jaGFyQXQobysrKSwhKGE9eFtpIGluIHpsP2UuY2hhckF0KG8rKyk6aV0pfHwocj1hKHQsbixyKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPW4uY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfXJldHVybiBiLng9dyhuLGIpLGIuWD13KHIsYiksYi5jPXcoZSxiKSxfLng9dyhuLF8pLF8uWD13KHIsXyksXy5jPXcoZSxfKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsYik7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIiwhMSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsXyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIiwhMCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLFlsPWpsLmZvcm1hdCxqbC5wYXJzZSxqbC51dGNGb3JtYXQsamwudXRjUGFyc2U7dmFyIGFmPXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIG9mKCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgscj17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiByfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IHNmKHIpfWZ1bmN0aW9uIHNmKHQpe3RoaXMuXz10fWZ1bmN0aW9uIGNmKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIscj10LmluZGV4T2YoIi4iKTtpZihyPj0wJiYobj10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiB1Zih0LGUpe2Zvcih2YXIgbixyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChuPXRbcl0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIGxmKHQsZSxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09ZSl7dFtyXT1hZix0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9c2YucHJvdG90eXBlPW9mLnByb3RvdHlwZT17Y29uc3RydWN0b3I6c2Ysb246ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMuXyxpPWNmKHQrIiIsciksYT0tMSxvPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPG87KWlmKG49KHQ9aVthXSkudHlwZSlyW25dPWxmKHJbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiByKXJbbl09bGYocltuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8bzspaWYoKG49KHQ9aVthXSkudHlwZSkmJihuPXVmKHJbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHNmKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixyLGk9bmV3IEFycmF5KG4pLGE9MDthPG47KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLG49KHI9dGhpcy5fW3RdKS5sZW5ndGg7YTxuOysrYSlyW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgcj10aGlzLl9bdF0saT0wLGE9ci5sZW5ndGg7aTxhOysraSlyW2ldLnZhbHVlLmFwcGx5KGUsbil9fTtjb25zdCBoZj1vZjt2YXIgZmYsZGYscGY9MCx5Zj0wLGdmPTAsbWY9MCx2Zj0wLGJmPTAsX2Y9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUseGY9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gd2YoKXtyZXR1cm4gdmZ8fCh4ZihrZiksdmY9X2Yubm93KCkrYmYpfWZ1bmN0aW9uIGtmKCl7dmY9MH1mdW5jdGlvbiBUZigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gRWYodCxlLG4pe3ZhciByPW5ldyBUZjtyZXR1cm4gci5yZXN0YXJ0KHQsZSxuKSxyfWZ1bmN0aW9uIENmKCl7dmY9KG1mPV9mLm5vdygpKStiZixwZj15Zj0wO3RyeXshZnVuY3Rpb24oKXt3ZigpLCsrcGY7Zm9yKHZhciB0LGU9ZmY7ZTspKHQ9dmYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbCh2b2lkIDAsdCksZT1lLl9uZXh0Oy0tcGZ9KCl9ZmluYWxseXtwZj0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1mZixyPTEvMDtuOyluLl9jYWxsPyhyPm4uX3RpbWUmJihyPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6ZmY9ZSk7ZGY9dCxBZihyKX0oKSx2Zj0wfX1mdW5jdGlvbiBTZigpe3ZhciB0PV9mLm5vdygpLGU9dC1tZjtlPjFlMyYmKGJmLT1lLG1mPXQpfWZ1bmN0aW9uIEFmKHQpe3BmfHwoeWYmJih5Zj1jbGVhclRpbWVvdXQoeWYpKSx0LXZmPjI0Pyh0PDEvMCYmKHlmPXNldFRpbWVvdXQoQ2YsdC1fZi5ub3coKS1iZikpLGdmJiYoZ2Y9Y2xlYXJJbnRlcnZhbChnZikpKTooZ2Z8fChtZj1fZi5ub3coKSxnZj1zZXRJbnRlcnZhbChTZiwxZTMpKSxwZj0xLHhmKENmKSkpfWZ1bmN0aW9uIE1mKHQsZSxuKXt2YXIgcj1uZXcgVGY7cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgobj0+e3Iuc3RvcCgpLHQobitlKX0pLGUsbikscn1UZi5wcm90b3R5cGU9RWYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpUZixyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/d2YoKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8ZGY9PT10aGlzfHwoZGY/ZGYuX25leHQ9dGhpczpmZj10aGlzLGRmPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sQWYoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsQWYoKSl9fTt2YXIgTmY9aGYoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksRGY9W107ZnVuY3Rpb24gT2YodCxlLG4scixpLGEpe3ZhciBvPXQuX190cmFuc2l0aW9uO2lmKG8pe2lmKG4gaW4gbylyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gYShjKXt2YXIgdSxsLGgsZjtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2Zvcih1IGluIGkpaWYoKGY9aVt1XSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWYuc3RhdGUpcmV0dXJuIE1mKGEpOzQ9PT1mLnN0YXRlPyhmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKTordTxlJiYoZi5zdGF0ZT02LGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVt1XSl9aWYoTWYoKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG8oYykpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxyPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSx1PTAsbD0tMTt1PGg7Kyt1KShmPW4udHdlZW5bdV0udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihyWysrbF09Zik7ci5sZW5ndGg9bCsxfX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgaT1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLGE9LTEsbz1yLmxlbmd0aDsrK2E8bzspclthXS5jYWxsKHQsaSk7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciByIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtlXSxpKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259aVtlXT1uLG4udGltZXI9RWYoKGZ1bmN0aW9uKHQpe24uc3RhdGU9MSxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmYSh0LW4uZGVsYXkpfSksMCxuLnRpbWUpfSh0LG4se25hbWU6ZSxpbmRleDpyLGdyb3VwOmksb246TmYsdHdlZW46RGYsdGltZTphLnRpbWUsZGVsYXk6YS5kZWxheSxkdXJhdGlvbjphLmR1cmF0aW9uLGVhc2U6YS5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIEJmKHQsZSl7dmFyIG49SWYodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBMZih0LGUpe3ZhciBuPUlmKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIElmKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24gUmYodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19dmFyIEZmLFBmPTE4MC9NYXRoLlBJLGpmPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIFlmKHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKlBmLHNrZXdYOk1hdGguYXRhbihjKSpQZixzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gemYodCxlLG4scil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHM9W10sYz1bXTtyZXR1cm4gYT10KGEpLG89dChvKSxmdW5jdGlvbih0LHIsaSxhLG8scyl7aWYodCE9PWl8fHIhPT1hKXt2YXIgYz1vLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpjLTQseDpSZih0LGkpfSx7aTpjLTIseDpSZihyLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStuKX0oYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpuLnB1c2goaShuKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6UmYodCxlKX0pKTplJiZuLnB1c2goaShuKSsicm90YXRlKCIrZStyKX0oYS5yb3RhdGUsby5yb3RhdGUscyxjKSxmdW5jdGlvbih0LGUsbixhKXt0IT09ZT9hLnB1c2goe2k6bi5wdXNoKGkobikrInNrZXdYKCIsbnVsbCxyKS0yLHg6UmYodCxlKX0pOmUmJm4ucHVzaChpKG4pKyJza2V3WCgiK2Urcil9KGEuc2tld1gsby5za2V3WCxzLGMpLGZ1bmN0aW9uKHQsZSxuLHIsYSxvKXtpZih0IT09bnx8ZSE9PXIpe3ZhciBzPWEucHVzaChpKGEpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtvLnB1c2goe2k6cy00LHg6UmYodCxuKX0se2k6cy0yLHg6UmYoZSxyKX0pfWVsc2UgMT09PW4mJjE9PT1yfHxhLnB1c2goaShhKSsic2NhbGUoIituKyIsIityKyIpIil9KGEuc2NhbGVYLGEuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsYyksYT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEscj1jLmxlbmd0aDsrK248cjspc1soZT1jW25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgVWY9emYoKGZ1bmN0aW9uKHQpe2NvbnN0IGU9bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkodCsiIik7cmV0dXJuIGUuaXNJZGVudGl0eT9qZjpZZihlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZil9KSwicHgsICIsInB4KSIsImRlZykiKSxxZj16ZigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/amY6KEZmfHwoRmY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksRmYuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PUZmLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP1lmKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOmpmKX0pLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gSGYodCxlKXt2YXIgbixyO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUxmKHRoaXMsdCksYT1pLnR3ZWVuO2lmKGEhPT1uKWZvcih2YXIgbz0wLHM9KHI9bj1hKS5sZW5ndGg7bzxzOysrbylpZihyW29dLm5hbWU9PT1lKXsocj1yLnNsaWNlKCkpLnNwbGljZShvLDEpO2JyZWFrfWkudHdlZW49cn19ZnVuY3Rpb24gJGYodCxlLG4pe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUxmKHRoaXMsdCksbz1hLnR3ZWVuO2lmKG8hPT1yKXtpPShyPW8pLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sYz0wLHU9aS5sZW5ndGg7Yzx1OysrYylpZihpW2NdLm5hbWU9PT1lKXtpW2NdPXM7YnJlYWt9Yz09PXUmJmkucHVzaChzKX1hLnR3ZWVuPWl9fWZ1bmN0aW9uIFdmKHQsZSxuKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PUxmKHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSksZnVuY3Rpb24odCl7cmV0dXJuIElmKHQscikudmFsdWVbZV19fWZ1bmN0aW9uIFZmKHQsZSxuLHIsaSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqbisoMSszKnQrMyphLTMqbykqcitvKmkpLzZ9Y29uc3QgR2Y9ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP0ZyOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6SXIoaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PXVyKHQpKS5yLChlPXVyKGUpKS5yKSxpPW4odC5nLGUuZyksYT1uKHQuYixlLmIpLG89RnIodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIFhmKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9dXIoZVtuXSksYVtuXT1yLnJ8fDAsb1tuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIGE9dChhKSxvPXQobykscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9YSh0KSxyLmc9byh0KSxyLmI9cyh0KSxyKyIifX19WGYoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBWZigobi1yL2UpKmUsbyxpLGEscyl9fSkpLFhmKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGk9dFsocitlLTEpJWVdLGE9dFtyJWVdLG89dFsocisxKSVlXSxzPXRbKHIrMiklZV07cmV0dXJuIFZmKChuLXIvZSkqZSxpLGEsbyxzKX19KSk7dmFyIFpmPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRZj1uZXcgUmVnRXhwKFpmLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIEtmKHQsZSl7dmFyIG4scixpLGE9WmYubGFzdEluZGV4PVFmLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1aZi5leGVjKHQpKSYmKHI9UWYuZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OlJmKG4scil9KSksYT1RZi5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIEpmKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9SZjplIGluc3RhbmNlb2YgYXI/R2Y6KG49YXIoZSkpPyhlPW4sR2YpOktmKSh0LGUpfWZ1bmN0aW9uIHRkKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBlZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIG5kKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIHJkKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBpZCh0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBhZCh0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIG9kKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBzZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIGNkKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmc2QodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIHVkKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmb2QodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIGxkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7QmYodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGhkKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtCZih0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIGZkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7TGYodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGRkKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtMZih0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIHBkKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0xmKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiB5ZCh0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/QmY6TGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIGdkPWl1LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBtZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiB2ZCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gYmQodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJnZkKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIF9kKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiB4ZCh0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZfZChyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciB3ZD0wO2Z1bmN0aW9uIGtkKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiBUZCgpe3JldHVybisrd2R9dmFyIEVkPWl1LnByb3RvdHlwZTtrZC5wcm90b3R5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIGl1KCkudHJhbnNpdGlvbih0KX0ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprZCxzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0kcyh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKWZvcih2YXIgcyxjLHU9cltvXSxsPXUubGVuZ3RoLGg9YVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpKHM9dVtmXSkmJihjPXQuY2FsbChzLHMuX19kYXRhX18sZix1KSkmJigiX19kYXRhX18iaW4gcyYmKGMuX19kYXRhX189cy5fX2RhdGFfXyksaFtmXT1jLE9mKGhbZl0sZSxuLGYsaCxJZihzLG4pKSk7cmV0dXJuIG5ldyBrZChhLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9R3ModCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPVtdLG89W10scz0wO3M8aTsrK3MpZm9yKHZhciBjLHU9cltzXSxsPXUubGVuZ3RoLGg9MDtoPGw7KytoKWlmKGM9dVtoXSl7Zm9yKHZhciBmLGQ9dC5jYWxsKGMsYy5fX2RhdGFfXyxoLHUpLHA9SWYoYyxuKSx5PTAsZz1kLmxlbmd0aDt5PGc7Kyt5KShmPWRbeV0pJiZPZihmLGUsbix5LGQscCk7YS5wdXNoKGQpLG8ucHVzaChjKX1yZXR1cm4gbmV3IGtkKGEsbyxlLG4pfSxzZWxlY3RDaGlsZDpFZC5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpFZC5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVhzKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBrZChyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBrZChvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgZ2QodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPVRkKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpaWYobz1zW3VdKXt2YXIgbD1JZihvLGUpO09mKG8sdCxuLHUscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcga2Qocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6RWQuY2FsbCxub2RlczpFZC5ub2Rlcyxub2RlOkVkLm5vZGUsc2l6ZTpFZC5zaXplLGVtcHR5OkVkLmVtcHR5LGVhY2g6RWQuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/SWYodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKHlkKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1oYyh0KSxyPSJ0cmFuc2Zvcm0iPT09bj9xZjpKZjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9hZDppZCkobixyLFdmKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP2VkOnRkKShuKToobi5sb2NhbD9yZDpuZCkobixyLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgcj1oYyh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP2NkOnVkKShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP1VmOkpmO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXdjKHRoaXMsdCksbz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSx3Yyh0aGlzLHQpKTtyZXR1cm4gYT09PW8/bnVsbDphPT09biYmbz09PXI/aTppPWUobj1hLHI9byl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxtZCh0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz13Yyh0aGlzLHQpLHM9bih0aGlzKSxjPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9cz13Yyh0aGlzLHQpKSxvPT09Yz9udWxsOm89PT1yJiZjPT09aT9hOihpPWMsYT1lKHI9byxzKSl9fSh0LHIsV2YodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG89InN0eWxlLiIrZSxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPUxmKHRoaXMsdCksdT1jLm9uLGw9bnVsbD09Yy52YWx1ZVtvXT9hfHwoYT1tZChlKSk6dm9pZCAwO3U9PT1uJiZpPT09bHx8KHI9KG49dSkuY29weSgpKS5vbihzLGk9bCksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz13Yyh0aGlzLHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KHQscixlKSxuKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixiZCh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fShXZih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbih0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUseGQodCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9SWYodGhpcy5ub2RlKCksbikudHdlZW4sYT0wLG89aS5sZW5ndGg7YTxvOysrYSlpZigocj1pW2FdKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP0hmOiRmKShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2xkOmhkKShlLHQpKTpJZih0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mZDpkZCkoZSx0KSk6SWYodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHBkKGUsdCkpOklmKHRoaXMubm9kZSgpLGUpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO0xmKHRoaXMsdCkuZWFzZT1ufX0odGhpcy5faWQsdCkpfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgdCxlLG49dGhpcyxyPW4uX2lkLGk9bi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLG8pe3ZhciBzPXt2YWx1ZTpvfSxjPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taSYmYSgpfX07bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuPUxmKHRoaXMsciksaT1uLm9uO2khPT10JiYoKGU9KHQ9aSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKHMpLGUuXy5pbnRlcnJ1cHQucHVzaChzKSxlLl8uZW5kLnB1c2goYykpLG4ub249ZX0pKSwwPT09aSYmYSgpfSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpFZFtTeW1ib2wuaXRlcmF0b3JdfTt2YXIgQ2Q9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfX07ZnVuY3Rpb24gU2QodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gbn1mdW5jdGlvbiBBZCgpe31mdW5jdGlvbiBNZCh0KXtyZXR1cm4gbnVsbD09dD9BZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIE5kKHQpe3JldHVybiBudWxsPT10P1tdOkFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIERkKCl7cmV0dXJuW119ZnVuY3Rpb24gT2QodCl7cmV0dXJuIG51bGw9PXQ/RGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiBCZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBMZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX19aXUucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXQuX190cmFuc2l0aW9uLG89ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6bz0hMTtvJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSh0aGlzLHQpfSkpfSxpdS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBrZD8oZT10Ll9pZCx0PXQuX25hbWUpOihlPVRkKCksKG49Q2QpLnRpbWU9d2YoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiZPZihvLHQsZSx1LHMsbnx8U2QobyxlKSk7cmV0dXJuIG5ldyBrZChyLHRoaXMuX3BhcmVudHMsdCxlKX07dmFyIElkPUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIFJkKCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9dmFyIEZkPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gUGQoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBqZCh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBZZCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiB6ZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gVWQodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzPTAsYz1lLmxlbmd0aCx1PWEubGVuZ3RoO3M8dTsrK3MpKG89ZVtzXSk/KG8uX19kYXRhX189YVtzXSxyW3NdPW8pOm5bc109bmV3IFlkKHQsYVtzXSk7Zm9yKDtzPGM7KytzKShvPWVbc10pJiYoaVtzXT1vKX1mdW5jdGlvbiBxZCh0LGUsbixyLGksYSxvKXt2YXIgcyxjLHUsbD1uZXcgTWFwLGg9ZS5sZW5ndGgsZj1hLmxlbmd0aCxkPW5ldyBBcnJheShoKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJihkW3NdPXU9by5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpKyIiLGwuaGFzKHUpP2lbc109YzpsLnNldCh1LGMpKTtmb3Iocz0wO3M8ZjsrK3MpdT1vLmNhbGwodCxhW3NdLHMsYSkrIiIsKGM9bC5nZXQodSkpPyhyW3NdPWMsYy5fX2RhdGFfXz1hW3NdLGwuZGVsZXRlKHUpKTpuW3NdPW5ldyBZZCh0LGFbc10pO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmbC5nZXQoZFtzXSk9PT1jJiYoaVtzXT1jKX1mdW5jdGlvbiBIZCh0KXtyZXR1cm4gdC5fX2RhdGFfX31mdW5jdGlvbiAkZCh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gV2QodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59WWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpZZCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgVmQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IEdkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpWZCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIFhkKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLEdkLmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpHZFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIFpkKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBRZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIEtkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gSmQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gdHAodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIGVwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIG5wKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBycCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBpcCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIGFwKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIG9wKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8bnAodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gc3AodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIGNwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiB1cCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBscCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gaHAodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgZnAodCl9ZnVuY3Rpb24gZnAodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPWxwKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gZHAodCxlKXtmb3IodmFyIG49aHAodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBwcCh0LGUpe2Zvcih2YXIgbj1ocCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIHlwKHQpe3JldHVybiBmdW5jdGlvbigpe2RwKHRoaXMsdCl9fWZ1bmN0aW9uIGdwKHQpe3JldHVybiBmdW5jdGlvbigpe3BwKHRoaXMsdCl9fWZ1bmN0aW9uIG1wKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP2RwOnBwKSh0aGlzLHQpfX1mdW5jdGlvbiB2cCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gYnAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBfcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24geHAoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB3cCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBrcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIFRwKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEVwKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gQ3AodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1WZCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09VmQ/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIFNwKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIEFwKHQpe3ZhciBlPVhkKHQpO3JldHVybihlLmxvY2FsP1NwOkNwKShlKX1mdW5jdGlvbiBNcCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIE5wKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRHAoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIE9wKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBCcCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBMcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5vcHRpb25zKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSXAodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGk9dGhpcy5fX29uLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUsdGhpcy5fX2RhdGFfXyl9fShlKTtpZihpKWZvcih2YXIgbz0wLHM9aS5sZW5ndGg7bzxzOysrbylpZigocj1pW29dKS50eXBlPT09dC50eXBlJiZyLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcixyLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcj1hLHIub3B0aW9ucz1uKSx2b2lkKHIudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxhLG4pLHI9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YSxvcHRpb25zOm59LGk/aS5wdXNoKHIpOnRoaXMuX19vbj1bcl19fWZ1bmN0aW9uIFJwKHQsZSxuKXt2YXIgcj1ucCh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShlLG4pOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oaS5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxpLmRldGFpbD1uLmRldGFpbCk6aS5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBGcCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBScCh0aGlzLHQsZSl9fWZ1bmN0aW9uIFBwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFJwKHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZwLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIGpwPVtudWxsXTtmdW5jdGlvbiBZcCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB6cCgpe3JldHVybiBuZXcgWXAoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxqcCl9WXAucHJvdG90eXBlPXpwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXAsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1NZCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IFlwKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBOZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSh0KTpPZCh0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1bXSxpPVtdLGE9MDthPG47KythKWZvcih2YXIgbyxzPWVbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSkobz1zW3VdKSYmKHIucHVzaCh0LmNhbGwobyxvLl9fZGF0YV9fLHUscykpLGkucHVzaChvKSk7cmV0dXJuIG5ldyBZcChyLGkpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QobnVsbD09dD9SZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSWQuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMZCh0KSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09dD9QZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRmQuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMZCh0KSkpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUJkKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBZcChyLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyxIZCk7dmFyIG49ZT9xZDpVZCxyPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXpkKHQpKTtmb3IodmFyIGE9aS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBsPXJbdV0saD1pW3VdLGY9aC5sZW5ndGgsZD0kZCh0LmNhbGwobCxsJiZsLl9fZGF0YV9fLHUscikpLHA9ZC5sZW5ndGgseT1zW3VdPW5ldyBBcnJheShwKSxnPW9bdV09bmV3IEFycmF5KHApLG09Y1t1XT1uZXcgQXJyYXkoZik7bihsLGgseSxnLG0sZCxlKTtmb3IodmFyIHYsYixfPTAseD0wO188cDsrK18paWYodj15W19dKXtmb3IoXz49eCYmKHg9XysxKTshKGI9Z1t4XSkmJisreDxwOyk7di5fbmV4dD1ifHxudWxsfX1yZXR1cm4obz1uZXcgWXAobyxyKSkuX2VudGVyPXMsby5fZXhpdD1jLG99LGVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZcCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChqZCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFlwKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoamQpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/KHI9dChyKSkmJihyPXIuc2VsZWN0aW9uKCkpOnI9ci5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKGk9ZShpKSkmJihpPWkuc2VsZWN0aW9uKCkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQsbj10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsaT1uLmxlbmd0aCxhPXIubGVuZ3RoLG89TWF0aC5taW4oaSxhKSxzPW5ldyBBcnJheShpKSxjPTA7YzxvOysrYylmb3IodmFyIHUsbD1uW2NdLGg9cltjXSxmPWwubGVuZ3RoLGQ9c1tjXT1uZXcgQXJyYXkoZikscD0wO3A8ZjsrK3ApKHU9bFtwXXx8aFtwXSkmJihkW3BdPXUpO2Zvcig7YzxpOysrYylzW2NdPW5bY107cmV0dXJuIG5ldyBZcChzLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciByLGk9dFtlXSxhPWkubGVuZ3RoLTEsbz1pW2FdOy0tYT49MDspKHI9aVthXSkmJihvJiY0XnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixvKSxvPXIpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9V2QpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMscj1uLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSl7Zm9yKHZhciBvLHM9blthXSxjPXMubGVuZ3RoLHU9aVthXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKG89c1tsXSkmJih1W2xdPW8pO3Uuc29ydChlKX1yZXR1cm4gbmV3IFlwKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHI9dFtlXSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXt2YXIgbz1yW2ldO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXtsZXQgdD0wO2Zvcihjb25zdCBlIG9mIHRoaXMpKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1YZCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/UWQ6WmQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9lcDp0cDpuLmxvY2FsP0pkOktkKShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP3JwOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2FwOmlwKSh0LGUsbnVsbD09bj8iIjpuKSk6b3AodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/c3A6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dXA6Y3ApKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49bHAodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9aHAodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/bXA6ZT95cDpncCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/dnA6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P19wOmJwKSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/eHA6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2twOndwKSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goVHApfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goRXApfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFwKHQpLHI9bnVsbD09ZT9NcDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOk1kKGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKE5wKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/T3A6RHApfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9QnAodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/SXA6THAscj0wO3I8bzsrK3IpdGhpcy5lYWNoKHMoYVtyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBjLHU9MCxsPXMubGVuZ3RoO3U8bDsrK3UpZm9yKHI9MCxjPXNbdV07cjxvOysrcilpZigoaT1hW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/UHA6RnApKHQsZSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiooKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByLGk9dFtlXSxhPTAsbz1pLmxlbmd0aDthPG87KythKShyPWlbYV0pJiYoeWllbGQgcil9fTtjb25zdCBVcD16cDt2YXIgcXA9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gSHAoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgJHAocil9ZnVuY3Rpb24gJHAodCl7dGhpcy5fPXR9ZnVuY3Rpb24gV3AodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIFZwKHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gR3AodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPXFwLHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH0kcC5wcm90b3R5cGU9SHAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjokcCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9V3AodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09R3AocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT1HcChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49VnAocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgJHAodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O2NvbnN0IFhwPUhwO3ZhciBacCxRcCxLcD0wLEpwPTAsdHk9MCxleT0wLG55PTAscnk9MCxpeT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxheT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBveSgpe3JldHVybiBueXx8KGF5KHN5KSxueT1peS5ub3coKStyeSl9ZnVuY3Rpb24gc3koKXtueT0wfWZ1bmN0aW9uIGN5KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eSh0LGUsbil7dmFyIHI9bmV3IGN5O3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gbHkoKXtueT0oZXk9aXkubm93KCkpK3J5LEtwPUpwPTA7dHJ5eyFmdW5jdGlvbigpe295KCksKytLcDtmb3IodmFyIHQsZT1acDtlOykodD1ueS1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKHZvaWQgMCx0KSxlPWUuX25leHQ7LS1LcH0oKX1maW5hbGx5e0twPTAsZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuPVpwLHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpacD1lKTtRcD10LGZ5KHIpfSgpLG55PTB9fWZ1bmN0aW9uIGh5KCl7dmFyIHQ9aXkubm93KCksZT10LWV5O2U+MWUzJiYocnktPWUsZXk9dCl9ZnVuY3Rpb24gZnkodCl7S3B8fChKcCYmKEpwPWNsZWFyVGltZW91dChKcCkpLHQtbnk+MjQ/KHQ8MS8wJiYoSnA9c2V0VGltZW91dChseSx0LWl5Lm5vdygpLXJ5KSksdHkmJih0eT1jbGVhckludGVydmFsKHR5KSkpOih0eXx8KGV5PWl5Lm5vdygpLHR5PXNldEludGVydmFsKGh5LDFlMykpLEtwPTEsYXkobHkpKSl9ZnVuY3Rpb24gZHkodCxlLG4pe3ZhciByPW5ldyBjeTtyZXR1cm4gZT1udWxsPT1lPzA6K2Usci5yZXN0YXJ0KChuPT57ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfWN5LnByb3RvdHlwZT11eS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmN5LHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9veSgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxRcD09PXRoaXN8fChRcD9RcC5fbmV4dD10aGlzOlpwPXRoaXMsUXA9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixmeSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxmeSgpKX19O3ZhciBweT1YcCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSx5eT1bXTtmdW5jdGlvbiBneSh0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gZHkoYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihkeSgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj11eSgoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpweSx0d2Vlbjp5eSx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gbXkodCxlKXt2YXIgbj1ieSh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHZ5KHQsZSl7dmFyIG49YnkodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gYnkodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBfeSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHQqKDEtbikrZSpufX12YXIgeHksd3k9MTgwL01hdGguUEksa3k9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gVHkodCxlLG4scixpLGEpe3ZhciBvLHMsYztyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwoYz10Km4rZSpyKSYmKG4tPXQqYyxyLT1lKmMpLChzPU1hdGguc3FydChuKm4rcipyKSkmJihuLz1zLHIvPXMsYy89cyksdCpyPGUqbiYmKHQ9LXQsZT0tZSxjPS1jLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqd3ksc2tld1g6TWF0aC5hdGFuKGMpKnd5LHNjYWxlWDpvLHNjYWxlWTpzfX1mdW5jdGlvbiBFeSh0LGUsbixyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxjPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQscixpLGEsbyxzKXtpZih0IT09aXx8ciE9PWEpe3ZhciBjPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOmMtNCx4Ol95KHQsaSl9LHtpOmMtMix4Ol95KHIsYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goInRyYW5zbGF0ZSgiK2krZSthK24pfShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVkscyxjKSxmdW5jdGlvbih0LGUsbixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOm4ucHVzaChpKG4pKyJyb3RhdGUoIixudWxsLHIpLTIseDpfeSh0LGUpfSkpOmUmJm4ucHVzaChpKG4pKyJyb3RhdGUoIitlK3IpfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lP2EucHVzaCh7aTpuLnB1c2goaShuKSsic2tld1goIixudWxsLHIpLTIseDpfeSh0LGUpfSk6ZSYmbi5wdXNoKGkobikrInNrZXdYKCIrZStyKX0oYS5za2V3WCxvLnNrZXdYLHMsYyksZnVuY3Rpb24odCxlLG4scixhLG8pe2lmKHQhPT1ufHxlIT09cil7dmFyIHM9YS5wdXNoKGkoYSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDpfeSh0LG4pfSx7aTpzLTIseDpfeShlLHIpfSl9ZWxzZSAxPT09biYmMT09PXJ8fGEucHVzaChpKGEpKyJzY2FsZSgiK24rIiwiK3IrIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxjKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxyPWMubGVuZ3RoOysrbjxyOylzWyhlPWNbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBDeT1FeSgoZnVuY3Rpb24odCl7Y29uc3QgZT1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KSh0KyIiKTtyZXR1cm4gZS5pc0lkZW50aXR5P2t5OlR5KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLFN5PUV5KChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9reTooeHl8fCh4eT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx4eS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9eHkudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/VHkoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6a3kpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBBeSh0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dnkodGhpcyx0KSxhPWkudHdlZW47aWYoYSE9PW4pZm9yKHZhciBvPTAscz0ocj1uPWEpLmxlbmd0aDtvPHM7KytvKWlmKHJbb10ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKG8sMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiBNeSh0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dnkodGhpcyx0KSxvPWEudHdlZW47aWYobyE9PXIpe2k9KHI9bykuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxjPTAsdT1pLmxlbmd0aDtjPHU7KytjKWlmKGlbY10ubmFtZT09PWUpe2lbY109czticmVha31jPT09dSYmaS5wdXNoKHMpfWEudHdlZW49aX19ZnVuY3Rpb24gTnkodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dnkodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gYnkodCxyKS52YWx1ZVtlXX19ZnVuY3Rpb24gRHkodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIE95KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIEJ5KCl7fXZhciBMeT0uNyxJeT0xLjQyODU3MTQyODU3MTQyODYsUnk9IlxccyooWystXT9cXGQrKVxccyoiLEZ5PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLFB5PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixqeT0vXiMoWzAtOWEtZl17Myw4fSkkLyxZeT1uZXcgUmVnRXhwKCJecmdiXFwoIitbUnksUnksUnldKyJcXCkkIiksenk9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1B5LFB5LFB5XSsiXFwpJCIpLFV5PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbUnksUnksUnksRnldKyJcXCkkIikscXk9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tQeSxQeSxQeSxGeV0rIlxcKSQiKSxIeT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbRnksUHksUHldKyJcXCkkIiksJHk9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tGeSxQeSxQeSxGeV0rIlxcKSQiKSxXeT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBWeSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEd5KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gWHkodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9ankuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9aeShlKTozPT09bj9uZXcgdGcoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP1F5KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP1F5KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9WXkuZXhlYyh0KSk/bmV3IHRnKGVbMV0sZVsyXSxlWzNdLDEpOihlPXp5LmV4ZWModCkpP25ldyB0ZygyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1VeS5leGVjKHQpKT9ReShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1xeS5leGVjKHQpKT9ReSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1IeS5leGVjKHQpKT9pZyhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPSR5LmV4ZWModCkpP2lnKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6V3kuaGFzT3duUHJvcGVydHkodCk/WnkoV3lbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyB0ZyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFp5KHQpe3JldHVybiBuZXcgdGcodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFF5KHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgdGcodCxlLG4scil9ZnVuY3Rpb24gS3kodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBCeXx8KHQ9WHkodCkpLHQ/bmV3IHRnKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyB0Z31mdW5jdGlvbiBKeSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/S3kodCk6bmV3IHRnKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB0Zyh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gZWcoKXtyZXR1cm4iIyIrcmcodGhpcy5yKStyZyh0aGlzLmcpK3JnKHRoaXMuYil9ZnVuY3Rpb24gbmcoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiByZyh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGlnKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgb2codCxlLG4scil9ZnVuY3Rpb24gYWcodCl7aWYodCBpbnN0YW5jZW9mIG9nKXJldHVybiBuZXcgb2codC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgQnl8fCh0PVh5KHQpKSwhdClyZXR1cm4gbmV3IG9nO2lmKHQgaW5zdGFuY2VvZiBvZylyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IG9nKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gb2codCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHNnKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBjZyh0LGUsbixyLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKm4rKDErMyp0KzMqYS0zKm8pKnIrbyppKS82fUR5KEJ5LFh5LHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlZ5LGZvcm1hdEhleDpWeSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gYWcodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpHeSx0b1N0cmluZzpHeX0pLER5KHRnLEp5LE95KEJ5LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0l5Ok1hdGgucG93KEl5LHQpLG5ldyB0Zyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9MeTpNYXRoLnBvdyhMeSx0KSxuZXcgdGcodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDplZyxmb3JtYXRIZXg6ZWcsZm9ybWF0UmdiOm5nLHRvU3RyaW5nOm5nfSkpLER5KG9nLChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/YWcodCk6bmV3IG9nKHQsZSxuLG51bGw9PXI/MTpyKX0pLE95KEJ5LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0l5Ok1hdGgucG93KEl5LHQpLG5ldyBvZyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0x5Ok1hdGgucG93KEx5LHQpLG5ldyBvZyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IHRnKHNnKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLHNnKHQsaSxyKSxzZyh0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO2NvbnN0IHVnPXQ9PigpPT50O2Z1bmN0aW9uIGxnKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19KHQsbik6dWcoaXNOYU4odCk/ZTp0KX1jb25zdCBoZz1mdW5jdGlvbiB0KGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT0odD0rdCk/bGc6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnBvdyh0K3IqZSxuKX19KGUsbix0KTp1Zyhpc05hTihlKT9uOmUpfX0oZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciByPW4oKHQ9SnkodCkpLnIsKGU9SnkoZSkpLnIpLGk9bih0LmcsZS5nKSxhPW4odC5iLGUuYiksbz1sZyh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1yKGUpLHQuZz1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gZmcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLHIsaT1lLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKTtmb3Iobj0wO248aTsrK24pcj1KeShlW25dKSxhW25dPXIucnx8MCxvW25dPXIuZ3x8MCxzW25dPXIuYnx8MDtyZXR1cm4gYT10KGEpLG89dChvKSxzPXQocyksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1hKHQpLHIuZz1vKHQpLHIuYj1zKHQpLHIrIiJ9fX1mZygoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGk9dFtyXSxhPXRbcisxXSxvPXI+MD90W3ItMV06MippLWEscz1yPGUtMT90W3IrMl06MiphLWk7cmV0dXJuIGNnKChuLXIvZSkqZSxvLGksYSxzKX19KSksZmcoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksaT10WyhyK2UtMSklZV0sYT10W3IlZV0sbz10WyhyKzEpJWVdLHM9dFsocisyKSVlXTtyZXR1cm4gY2coKG4tci9lKSplLGksYSxvLHMpfX0pKTt2YXIgZGc9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHBnPW5ldyBSZWdFeHAoZGcuc291cmNlLCJnIik7ZnVuY3Rpb24geWcodCxlKXt2YXIgbixyLGksYT1kZy5sYXN0SW5kZXg9cGcubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPWRnLmV4ZWModCkpJiYocj1wZy5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6X3kobixyKX0pKSxhPXBnLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2codCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP195OmUgaW5zdGFuY2VvZiBYeT9oZzoobj1YeShlKSk/KGU9bixoZyk6eWcpKHQsZSl9ZnVuY3Rpb24gbWcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHZnKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gYmcodCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19ZnVuY3Rpb24gX2codCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIHhnKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1jKyIiKT9udWxsOm89PT1yJiZzPT09aT9hOihpPXMsYT1lKHI9byxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHdnKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24ga2codCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFRnKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gRWcodCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZUZyh0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gQ2codCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZrZyh0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gU2codCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtteSh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gQWcodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe215KHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gTWcodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2eSh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gTmcodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3Z5KHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gRGcodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dnkodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIE9nKHQsZSxuKXt2YXIgcixpLGE9ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfShlKT9teTp2eTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1hKHRoaXMsdCkscz1vLm9uO3MhPT1yJiYoaT0ocj1zKS5jb3B5KCkpLm9uKGUsbiksby5vbj1pfX12YXIgQmc9VXAucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIExnKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIElnKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLHIpLG4pfX1mdW5jdGlvbiBSZyh0LGUsbil7dmFyIHIsaTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYocj0oaT1hKSYmSWcodCxhLG4pKSxyfXJldHVybiBhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gRmcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIFBnKHQpe3ZhciBlLG47ZnVuY3Rpb24gcigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09biYmKGU9KG49cikmJkZnKHIpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9dmFyIGpnPTA7ZnVuY3Rpb24gWWcodCxlLG4scil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uIHpnKCl7cmV0dXJuKytqZ312YXIgVWc9VXAucHJvdG90eXBlO1lnLnByb3RvdHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gVXAoKS50cmFuc2l0aW9uKHQpfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllnLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU1kKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pZm9yKHZhciBzLGMsdT1yW29dLGw9dS5sZW5ndGgsaD1hW29dPW5ldyBBcnJheShsKSxmPTA7ZjxsOysrZikocz11W2ZdKSYmKGM9dC5jYWxsKHMscy5fX2RhdGFfXyxmLHUpKSYmKCJfX2RhdGFfXyJpbiBzJiYoYy5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2ZdPWMsZ3koaFtmXSxlLG4sZixoLGJ5KHMsbikpKTtyZXR1cm4gbmV3IFlnKGEsdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1PZCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9W10sbz1bXSxzPTA7czxpOysrcylmb3IodmFyIGMsdT1yW3NdLGw9dS5sZW5ndGgsaD0wO2g8bDsrK2gpaWYoYz11W2hdKXtmb3IodmFyIGYsZD10LmNhbGwoYyxjLl9fZGF0YV9fLGgsdSkscD1ieShjLG4pLHk9MCxnPWQubGVuZ3RoO3k8ZzsrK3kpKGY9ZFt5XSkmJmd5KGYsZSxuLHksZCxwKTthLnB1c2goZCksby5wdXNoKGMpfXJldHVybiBuZXcgWWcoYSxvLGUsbil9LHNlbGVjdENoaWxkOlVnLnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOlVnLnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9QmQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IFlnKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bi5sZW5ndGgsYT1NYXRoLm1pbihyLGkpLG89bmV3IEFycmF5KHIpLHM9MDtzPGE7KytzKWZvcih2YXIgYyx1PWVbc10sbD1uW3NdLGg9dS5sZW5ndGgsZj1vW3NdPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZCkoYz11W2RdfHxsW2RdKSYmKGZbZF09Yyk7Zm9yKDtzPHI7KytzKW9bc109ZVtzXTtyZXR1cm4gbmV3IFlnKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCZyh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49emcoKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgbyxzPXJbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSlpZihvPXNbdV0pe3ZhciBsPWJ5KG8sZSk7Z3kobyx0LG4sdSxzLHt0aW1lOmwudGltZStsLmRlbGF5K2wuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpsLmR1cmF0aW9uLGVhc2U6bC5lYXNlfSl9cmV0dXJuIG5ldyBZZyhyLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDpVZy5jYWxsLG5vZGVzOlVnLm5vZGVzLG5vZGU6VWcubm9kZSxzaXplOlVnLnNpemUsZW1wdHk6VWcuZW1wdHksZWFjaDpVZy5lYWNoLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9ieSh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goT2cobix0LGUpKX0sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPVhkKHQpLHI9InRyYW5zZm9ybSI9PT1uP1N5OmdnO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP3dnOnhnKShuLHIsTnkodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/dmc6bWcpKG4pOihuLmxvY2FsP19nOmJnKShuLHIsZSkpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciByPVhkKHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKHIubG9jYWw/RWc6Q2cpKHIsZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9InRyYW5zZm9ybSI9PSh0Kz0iIik/Q3k6Z2c7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9b3AodGhpcyx0KSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLG9wKHRoaXMsdCkpO3JldHVybiBhPT09bz9udWxsOmE9PT1uJiZvPT09cj9pOmk9ZShuPWEscj1vKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LExnKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPW9wKHRoaXMsdCkscz1uKHRoaXMpLGM9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksYz1zPW9wKHRoaXMsdCkpLG89PT1jP251bGw6bz09PXImJmM9PT1pP2E6KGk9YyxhPWUocj1vLHMpKX19KHQscixOeSh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGEsbz0ic3R5bGUuIitlLHM9ImVuZC4iK287cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dnkodGhpcyx0KSx1PWMub24sbD1udWxsPT1jLnZhbHVlW29dP2F8fChhPUxnKGUpKTp2b2lkIDA7dT09PW4mJmk9PT1sfHwocj0obj11KS5jb3B5KCkpLm9uKHMsaT1sKSxjLm9uPXJ9fSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPW9wKHRoaXMsdCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0odCxyLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLFJnKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KE55KHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxQZyh0KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1ieSh0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/QXk6TXkpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/U2c6QWcpKGUsdCkpOmJ5KHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P01nOk5nKShlLHQpKTpieSh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goRGcoZSx0KSk6YnkodGhpcy5ub2RlKCksZSkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dnkodGhpcyx0KS5lYXNlPW59fSh0aGlzLl9pZCx0KSl9LGVuZDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9e3ZhbHVlOm99LGM9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49dnkodGhpcyxyKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChjKSksbi5vbj1lfSkpLDA9PT1pJiZhKCl9KSl9LFtTeW1ib2wuaXRlcmF0b3JdOlVnW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBxZz17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9fTtmdW5jdGlvbiBIZyh0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2V9IG5vdCBmb3VuZGApO3JldHVybiBufWZ1bmN0aW9uICRnKHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn1VcC5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9dC5fX3RyYW5zaXRpb24sbz0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpvPSExO28mJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19KHRoaXMsdCl9KSl9LFVwLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIFlnPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9emcoKSwobj1xZykudGltZT1veSgpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJmd5KG8sdCxlLHUscyxufHxIZyhvLGUpKTtyZXR1cm4gbmV3IFlnKHIsdGhpcy5fcGFyZW50cyx0LGUpfSwkZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOiRnLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyAkZyh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3ICRnKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3ICRnKDEsMCwwKSwkZy5wcm90b3R5cGU7dmFyIFdnPSJjb21tIixWZz0icnVsZSIsR2c9ImRlY2wiLFhnPU1hdGguYWJzLFpnPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gUWcodCl7cmV0dXJuIHQudHJpbSgpfWZ1bmN0aW9uIEtnKHQsZSxuKXtyZXR1cm4gdC5yZXBsYWNlKGUsbil9ZnVuY3Rpb24gSmcodCxlKXtyZXR1cm4gdC5pbmRleE9mKGUpfWZ1bmN0aW9uIHRtKHQsZSl7cmV0dXJuIDB8dC5jaGFyQ29kZUF0KGUpfWZ1bmN0aW9uIGVtKHQsZSxuKXtyZXR1cm4gdC5zbGljZShlLG4pfWZ1bmN0aW9uIG5tKHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiBybSh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gaW0odCxlKXtyZXR1cm4gZS5wdXNoKHQpLHR9ZnVuY3Rpb24gYW0odCxlKXtmb3IodmFyIG49IiIscj1ybSh0KSxpPTA7aTxyO2krKyluKz1lKHRbaV0saSx0LGUpfHwiIjtyZXR1cm4gbn1mdW5jdGlvbiBvbSh0LGUsbixyKXtzd2l0Y2godC50eXBlKXtjYXNlIkBpbXBvcnQiOmNhc2UgR2c6cmV0dXJuIHQucmV0dXJuPXQucmV0dXJufHx0LnZhbHVlO2Nhc2UgV2c6cmV0dXJuIiI7Y2FzZSJAa2V5ZnJhbWVzIjpyZXR1cm4gdC5yZXR1cm49dC52YWx1ZSsieyIrYW0odC5jaGlsZHJlbixyKSsifSI7Y2FzZSBWZzp0LnZhbHVlPXQucHJvcHMuam9pbigiLCIpfXJldHVybiBubShuPWFtKHQuY2hpbGRyZW4scikpP3QucmV0dXJuPXQudmFsdWUrInsiK24rIn0iOiIifU9iamVjdC5hc3NpZ247dmFyIHNtPTEsY209MSx1bT0wLGxtPTAsaG09MCxmbT0iIjtmdW5jdGlvbiBkbSh0LGUsbixyLGksYSxvKXtyZXR1cm57dmFsdWU6dCxyb290OmUscGFyZW50Om4sdHlwZTpyLHByb3BzOmksY2hpbGRyZW46YSxsaW5lOnNtLGNvbHVtbjpjbSxsZW5ndGg6byxyZXR1cm46IiJ9fWZ1bmN0aW9uIHBtKCl7cmV0dXJuIGhtPWxtPjA/dG0oZm0sLS1sbSk6MCxjbS0tLDEwPT09aG0mJihjbT0xLHNtLS0pLGhtfWZ1bmN0aW9uIHltKCl7cmV0dXJuIGhtPWxtPHVtP3RtKGZtLGxtKyspOjAsY20rKywxMD09PWhtJiYoY209MSxzbSsrKSxobX1mdW5jdGlvbiBnbSgpe3JldHVybiB0bShmbSxsbSl9ZnVuY3Rpb24gbW0oKXtyZXR1cm4gbG19ZnVuY3Rpb24gdm0odCxlKXtyZXR1cm4gZW0oZm0sdCxlKX1mdW5jdGlvbiBibSh0KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gNTtjYXNlIDMzOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ3OmNhc2UgNjI6Y2FzZSA2NDpjYXNlIDEyNjpjYXNlIDU5OmNhc2UgMTIzOmNhc2UgMTI1OnJldHVybiA0O2Nhc2UgNTg6cmV0dXJuIDM7Y2FzZSAzNDpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA5MTpyZXR1cm4gMjtjYXNlIDQxOmNhc2UgOTM6cmV0dXJuIDF9cmV0dXJuIDB9ZnVuY3Rpb24gX20odCl7cmV0dXJuIFFnKHZtKGxtLTEsa20oOTE9PT10P3QrMjo0MD09PXQ/dCsxOnQpKSl9ZnVuY3Rpb24geG0odCl7Zm9yKDsoaG09Z20oKSkmJmhtPDMzOyl5bSgpO3JldHVybiBibSh0KT4yfHxibShobSk+Mz8iIjoiICJ9ZnVuY3Rpb24gd20odCxlKXtmb3IoOy0tZSYmeW0oKSYmIShobTw0OHx8aG0+MTAyfHxobT41NyYmaG08NjV8fGhtPjcwJiZobTw5Nyk7KTtyZXR1cm4gdm0odCxtbSgpKyhlPDYmJjMyPT1nbSgpJiYzMj09eW0oKSkpfWZ1bmN0aW9uIGttKHQpe2Zvcig7eW0oKTspc3dpdGNoKGhtKXtjYXNlIHQ6cmV0dXJuIGxtO2Nhc2UgMzQ6Y2FzZSAzOTozNCE9PXQmJjM5IT09dCYma20oaG0pO2JyZWFrO2Nhc2UgNDA6NDE9PT10JiZrbSh0KTticmVhaztjYXNlIDkyOnltKCl9cmV0dXJuIGxtfWZ1bmN0aW9uIFRtKHQsZSl7Zm9yKDt5bSgpJiZ0K2htIT09NTcmJih0K2htIT09ODR8fDQ3IT09Z20oKSk7KTtyZXR1cm4iLyoiK3ZtKGUsbG0tMSkrIioiK1pnKDQ3PT09dD90OnltKCkpfWZ1bmN0aW9uIEVtKHQpe2Zvcig7IWJtKGdtKCkpOyl5bSgpO3JldHVybiB2bSh0LGxtKX1mdW5jdGlvbiBDbSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZtPSIiLHR9KFNtKCIiLG51bGwsbnVsbCxudWxsLFsiIl0sdD1mdW5jdGlvbih0KXtyZXR1cm4gc209Y209MSx1bT1ubShmbT10KSxsbT0wLFtdfSh0KSwwLFswXSx0KSl9ZnVuY3Rpb24gU20odCxlLG4scixpLGEsbyxzLGMpe2Zvcih2YXIgdT0wLGw9MCxoPW8sZj0wLGQ9MCxwPTAseT0xLGc9MSxtPTEsdj0wLGI9IiIsXz1pLHg9YSx3PXIsaz1iO2c7KXN3aXRjaChwPXYsdj15bSgpKXtjYXNlIDQwOmlmKDEwOCE9cCYmNTg9PWsuY2hhckNvZGVBdChoLTEpKXstMSE9Smcoays9S2coX20odiksIiYiLCImXGYiKSwiJlxmIikmJihtPS0xKTticmVha31jYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTprKz1fbSh2KTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6ays9eG0ocCk7YnJlYWs7Y2FzZSA5MjprKz13bShtbSgpLTEsNyk7Y29udGludWU7Y2FzZSA0Nzpzd2l0Y2goZ20oKSl7Y2FzZSA0MjpjYXNlIDQ3OmltKE1tKFRtKHltKCksbW0oKSksZSxuKSxjKTticmVhaztkZWZhdWx0OmsrPSIvIn1icmVhaztjYXNlIDEyMyp5OnNbdSsrXT1ubShrKSptO2Nhc2UgMTI1Knk6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKHYpe2Nhc2UgMDpjYXNlIDEyNTpnPTA7Y2FzZSA1OStsOmQ+MCYmbm0oayktaCYmaW0oZD4zMj9ObShrKyI7IixyLG4saC0xKTpObShLZyhrLCIgIiwiIikrIjsiLHIsbixoLTIpLGMpO2JyZWFrO2Nhc2UgNTk6ays9IjsiO2RlZmF1bHQ6aWYoaW0odz1BbShrLGUsbix1LGwsaSxzLGIsXz1bXSx4PVtdLGgpLGEpLDEyMz09PXYpaWYoMD09PWwpU20oayxlLHcsdyxfLGEsaCxzLHgpO2Vsc2Ugc3dpdGNoKGYpe2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgMTE1OlNtKHQsdyx3LHImJmltKEFtKHQsdyx3LDAsMCxpLHMsYixpLF89W10saCkseCksaSx4LGgscyxyP186eCk7YnJlYWs7ZGVmYXVsdDpTbShrLHcsdyx3LFsiIl0seCwwLHMseCl9fXU9bD1kPTAseT1tPTEsYj1rPSIiLGg9bzticmVhaztjYXNlIDU4Omg9MStubShrKSxkPXA7ZGVmYXVsdDppZih5PDEpaWYoMTIzPT12KS0teTtlbHNlIGlmKDEyNT09diYmMD09eSsrJiYxMjU9PXBtKCkpY29udGludWU7c3dpdGNoKGsrPVpnKHYpLHYqeSl7Y2FzZSAzODptPWw+MD8xOihrKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OnNbdSsrXT0obm0oayktMSkqbSxtPTE7YnJlYWs7Y2FzZSA2NDo0NT09PWdtKCkmJihrKz1fbSh5bSgpKSksZj1nbSgpLGw9aD1ubShiPWsrPUVtKG1tKCkpKSx2Kys7YnJlYWs7Y2FzZSA0NTo0NT09PXAmJjI9PW5tKGspJiYoeT0wKX19cmV0dXJuIGF9ZnVuY3Rpb24gQW0odCxlLG4scixpLGEsbyxzLGMsdSxsKXtmb3IodmFyIGg9aS0xLGY9MD09PWk/YTpbIiJdLGQ9cm0oZikscD0wLHk9MCxnPTA7cDxyOysrcClmb3IodmFyIG09MCx2PWVtKHQsaCsxLGg9WGcoeT1vW3BdKSksYj10O208ZDsrK20pKGI9UWcoeT4wP2ZbbV0rIiAiK3Y6S2codiwvJlxmL2csZlttXSkpKSYmKGNbZysrXT1iKTtyZXR1cm4gZG0odCxlLG4sMD09PWk/Vmc6cyxjLHUsbCl9ZnVuY3Rpb24gTW0odCxlLG4pe3JldHVybiBkbSh0LGUsbixXZyxaZyhobSksZW0odCwyLC0yKSwwKX1mdW5jdGlvbiBObSh0LGUsbixyKXtyZXR1cm4gZG0odCxlLG4sR2csZW0odCwwLHIpLGVtKHQscisxLC0xKSxyKX1jb25zdCBEbT0iOC4xMy45Ijt2YXIgT209big5NjA5KSxCbT1uKDc4NTYpLExtPW4ubihCbSksSW09ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKC9cXHVbXGRBLUZdezR9L2dpLChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnJlcGxhY2UoL1xcdS9nLCIiKSwxNikpfSkpO3JldHVybiBjb25zb2xlLmxvZyhlKSxlPShlPShlPWUucmVwbGFjZSgvXFx4KFswLTlhLWZdezJ9KS9naSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLDE2KSl9KSkpLnJlcGxhY2UoL1xcW1xkXGRcZF17M30vZ2ksKGZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQucmVwbGFjZSgvXFwvZywiIiksOCkpfSkpKS5yZXBsYWNlKC9cXFtcZFxkXGRdezJ9L2dpLChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnJlcGxhY2UoL1xcL2csIiIpLDgpKX0pKX0sUm09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49MDtuPj0wOyl7aWYoISgobj10LmluZGV4T2YoIjxzY3JpcHQiKSk+PTApKXtlKz10LG49LTE7YnJlYWt9ZSs9dC5zdWJzdHIoMCxuKSwobj0odD10LnN1YnN0cihuKzEpKS5pbmRleE9mKCI8XC9zY3JpcHQ+IikpPj0wJiYobis9OSx0PXQuc3Vic3RyKG4pKX12YXIgcj1JbShlKTtyZXR1cm4ocj0ocj0ocj1yLnJlcGxhY2UoL3NjcmlwdD4vZ2ksIiMiKSkucmVwbGFjZSgvamF2YXNjcmlwdDovZ2ksIiMiKSkucmVwbGFjZSgvb25lcnJvcj0vZ2ksIm9uZXJyb3I6IikpLnJlcGxhY2UoLzxpZnJhbWUvZ2ksIiIpfSxGbT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0O3ZhciBuPUxtKCkuc2FuaXRpemUoZnVuY3Rpb24odCxlKXt2YXIgbj10LHI9ITA7aWYoIWUuZmxvd2NoYXJ0fHwhMSE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJiJmYWxzZSIhPT1lLmZsb3djaGFydC5odG1sTGFiZWxzfHwocj0hMSkscil7dmFyIGk9ZS5zZWN1cml0eUxldmVsOyJhbnRpc2NyaXB0Ij09PWl8fCJzdHJpY3QiPT09aT9uPVJtKG4pOiJsb29zZSIhPT1pJiYobj0obj0obj1ZbShuKSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpLnJlcGxhY2UoLz0vZywiJmVxdWFsczsiKSxuPWptKG4pKX1yZXR1cm4gbn0odCxlKSk7cmV0dXJuIG59LFBtPS88YnJccypcLz8+L2dpLGptPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKX0sWW09ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShQbSwiI2JyIyIpfSx6bT1mdW5jdGlvbih0KXtyZXR1cm4iZmFsc2UiIT09dCYmITEhPT10fTtjb25zdCBVbT17Z2V0Um93czpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMTt2YXIgZT1ZbSh0KTtyZXR1cm4oZT1lLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikpLnNwbGl0KCIjYnIjIil9LHNhbml0aXplVGV4dDpGbSxzYW5pdGl6ZVRleHRPckFycmF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P0ZtKHQsZSk6dC5mbGF0KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gRm0odCxlKX0pKX0saGFzQnJlYWtzOmZ1bmN0aW9uKHQpe3JldHVybiBQbS50ZXN0KHQpfSxzcGxpdEJyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdChQbSl9LGxpbmVCcmVha1JlZ2V4OlBtLHJlbW92ZVNjcmlwdDpSbSxnZXRVcmw6ZnVuY3Rpb24odCl7dmFyIGU9IiI7cmV0dXJuIHQmJihlPShlPShlPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGV9LGV2YWx1YXRlOnptLHJlbW92ZUVzY2FwZXM6SW19O3ZhciBxbT1uKDg2MTMpLEhtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/KDAscW0uYWRqdXN0KSh0LHtzOi00MCxsOjEwfSk6KDAscW0uYWRqdXN0KSh0LHtzOi00MCxsOi0xMH0pfTtmdW5jdGlvbiAkbSh0KXtyZXR1cm4gJG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LCRtKHQpfWZ1bmN0aW9uIFdtKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIFZtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5kYXJrTW9kZT0hMSx0aGlzLnByaW1hcnlDb2xvcj0iI2ZmZjRkZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iIzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgifXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNkZGQiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xMjB9KSx0aGlzLnRlcnRpYXJ5Q29sb3I9dGhpcy50ZXJ0aWFyeUNvbG9yfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE4MCxsOjV9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcnx8SG0odGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxIbSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj10aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3J8fEhtKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLm5vdGVCb3JkZXJDb2xvcnx8SG0odGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fCgwLHFtLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHwoMCxxbS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fCgwLHFtLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm5vZGVCa2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubWFpbkJrZz10aGlzLm1haW5Ca2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuY2x1c3RlckJrZz10aGlzLmNsdXN0ZXJCa2d8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5jbHVzdGVyQm9yZGVyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMuZGVmYXVsdExpbmtDb2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGl0bGVDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT8oMCxxbS5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMubm9kZVRleHRDb2xvcj10aGlzLm5vZGVUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYWN0b3JCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYWN0b3JCa2c9dGhpcy5hY3RvckJrZ3x8dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckxpbmVDb2xvcnx8ImdyZXkiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8KDAscW0uZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHwoMCxxbS5pbnZlcnQpKHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPXRoaXMuZXhjbHVkZUJrZ0NvbG9yfHwiI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMudGFza0JrZ0NvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5hY3RpdmVUYXNrQmtnQ29sb3J8fCgwLHFtLmxpZ2h0ZW4pKHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPXRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcnx8IiMwMDMxNjMiLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXRoaXMuZmlsbFR5cGUzfHwoMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND10aGlzLmZpbGxUeXBlNHx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXRoaXMuZmlsbFR5cGU2fHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXRoaXMuZmlsbFR5cGU3fHwoMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHwoMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU2PXRoaXMucGllNnx8KDAscW0uYWRqdXN0KSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0yMH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlPygwLHFtLmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3J9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT0kbSh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0sbiYmV20oZS5wcm90b3R5cGUsbiksdH0oKTtmdW5jdGlvbiBHbSh0KXtyZXR1cm4gR209ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LEdtKHQpfWZ1bmN0aW9uIFhtKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIFptPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9KDAscW0ubGlnaHRlbikodGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1IbSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPUhtKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUhtKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPSgwLHFtLmxpZ2h0ZW4pKCgwLHFtLmludmVydCkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPSgwLHFtLnJnYmEpKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9KDAscW0uZGFya2VuKSgiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMudGFza0JvcmRlckNvbG9yPSgwLHFtLnJnYmEpKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0oMCxxbS5yZ2JhKSgyNTUsMjU1LDI1NSw1MCksdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiM4MUIxREIiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNFODM3MzciLHRoaXMuY3JpdEJrZ0NvbG9yPSIjRTgzNzM3Iix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSIjREI1NzU3Iix0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dmFyIGUsbjtyZXR1cm4gZT10LG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZEJrZz0oMCxxbS5saWdodGVuKSh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSgwLHFtLmxpZ2h0ZW4pKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPSgwLHFtLmxpZ2h0ZW4pKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT0oMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz0oMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8IiMwYjAwMDAiLHRoaXMucGllMj10aGlzLnBpZTJ8fCIjNGQxMDM3Iix0aGlzLnBpZTM9dGhpcy5waWUzfHwiIzNmNTI1OCIsdGhpcy5waWU0PXRoaXMucGllNHx8IiM0ZjJmMWIiLHRoaXMucGllNT10aGlzLnBpZTV8fCIjNmUwYTBhIix0aGlzLnBpZTY9dGhpcy5waWU2fHwiIzNiMDA0OCIsdGhpcy5waWU3PXRoaXMucGllN3x8IiM5OTVhMDEiLHRoaXMucGllOD10aGlzLnBpZTh8fCIjMTU0NzA2Iix0aGlzLnBpZTk9dGhpcy5waWU5fHwiIzE2MTcyMiIsdGhpcy5waWUxMD10aGlzLnBpZTEwfHwiIzAwMjk2ZiIsdGhpcy5waWUxMT10aGlzLnBpZTExfHwiIzAxNjI5YyIsdGhpcy5waWUxMj10aGlzLnBpZTEyfHwiIzAxMDAyOSIsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/KDAscW0uZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PUdtKHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZYbShlLnByb3RvdHlwZSxuKSx0fSgpO2Z1bmN0aW9uIFFtKHQpe3JldHVybiBRbT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sUW0odCl9ZnVuY3Rpb24gS20odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgSm09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI0VDRUNGRiIsdGhpcy5zZWNvbmRhcnlDb2xvcj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1IbSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPUhtKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUhtKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSgwLHFtLnJnYmEpKDEwMiwxMDIsMjU1LC40OSksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNmZmY0MDAiLHRoaXMudGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLnRhc2tCa2dDb2xvcj0iIzhhOTBkZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iI2JmYzdmZiIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMuYWN0b3JCb3JkZXI9KDAscW0ubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPSgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz0oMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fCgwLHFtLmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi00MH0pLHRoaXMucGllND10aGlzLnBpZTR8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fCgwLHFtLmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0yMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi00MH0pLHRoaXMucGllOT10aGlzLnBpZTl8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTQwfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MCxsOi00MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMzB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09UW0odCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dLG4mJkttKGUucHJvdG90eXBlLG4pLHR9KCk7ZnVuY3Rpb24gdHYodCl7cmV0dXJuIHR2PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSx0dih0KX1mdW5jdGlvbiBldih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBudj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj0oMCxxbS5saWdodGVuKSgiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPUhtKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9SG0odGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9SG0odGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjMzMzIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSIjMzMzIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iIzMzMyIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9IiMzMjY5MzIiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9IiM2ZWFhNDkiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjNmVhYTQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSIjNDg3ZTNhIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFjdG9yQm9yZGVyPSgwLHFtLmRhcmtlbikodGhpcy5tYWluQmtnLDIwKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PSgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PSgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU1PXRoaXMucGllNXx8KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fCgwLHFtLmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTUwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi01MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXR2KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZldihlLnByb3RvdHlwZSxuKSx0fSgpO2Z1bmN0aW9uIHJ2KHQpe3JldHVybiBydj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scnYodCl9ZnVuY3Rpb24gaXYodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgYXY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiM3MDcwNzAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9KDAscW0ubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9SG0odGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1IbSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1IbSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IndoaXRlIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9KDAscW0ubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JCb3JkZXI9KDAscW0ubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0oMCxxbS5saWdodGVuKSh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9KDAscW0ubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9KDAscW0uZGFya2VuKSh0aGlzLmNvbnRyYXN0LDEwKSx0aGlzLnRhc2tCa2dDb2xvcj10aGlzLmNvbnRyYXN0LHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGV4dCx0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuZ3JpZENvbG9yPSgwLHFtLmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwzMCksdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZSx0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0aWNhbCx0aGlzLmNyaXRCb3JkZXJDb2xvcj0oMCxxbS5kYXJrZW4pKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPSgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz0oMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHwiI0Y0RjRGNCIsdGhpcy5waWUyPXRoaXMucGllMnx8IiM1NTUiLHRoaXMucGllMz10aGlzLnBpZTN8fCIjQkJCIix0aGlzLnBpZTQ9dGhpcy5waWU0fHwiIzc3NyIsdGhpcy5waWU1PXRoaXMucGllNXx8IiM5OTkiLHRoaXMucGllNj10aGlzLnBpZTZ8fCIjREREIix0aGlzLnBpZTc9dGhpcy5waWU3fHwiI0ZGRiIsdGhpcy5waWU4PXRoaXMucGllOHx8IiNEREQiLHRoaXMucGllOT10aGlzLnBpZTl8fCIjQkJCIix0aGlzLnBpZTEwPXRoaXMucGllMTB8fCIjOTk5Iix0aGlzLnBpZTExPXRoaXMucGllMTF8fCIjNzc3Iix0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCIjNTU1Iix0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXJ2KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZpdihlLnByb3RvdHlwZSxuKSx0fSgpO2NvbnN0IG92PXtiYXNlOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgVm07cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgWm07cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgSm07cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxmb3Jlc3Q6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBudjtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhdjtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19fTtmdW5jdGlvbiBzdih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gY3YodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gY3YodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9jdih0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGN2KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdXYodCl7cmV0dXJuIHV2PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSx1dih0KX12YXIgbHY9e3RoZW1lOiJkZWZhdWx0Iix0aGVtZVZhcmlhYmxlczpvdi5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksdGhlbWVDU1M6dm9pZCAwLG1heFRleHRTaXplOjVlNCxkYXJrTW9kZTohMSxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZmxvd2NoYXJ0OntkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImJhc2lzIixwYWRkaW5nOjE1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtZDMifSxzZXF1ZW5jZTp7YWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxmb3JjZU1lbnVzOiExLGJvdHRvbU1hcmdpbkFkajoxLHVzZU1heFdpZHRoOiEwLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLGFjdG9yRm9udFdlaWdodDo0MDAsbm90ZUZvbnRTaXplOjE0LG5vdGVGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG5vdGVGb250V2VpZ2h0OjQwMCxub3RlQWxpZ246ImNlbnRlciIsbWVzc2FnZUZvbnRTaXplOjE2LG1lc3NhZ2VGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OjQwMCx3cmFwOiExLHdyYXBQYWRkaW5nOjEwLGxhYmVsQm94V2lkdGg6NTAsbGFiZWxCb3hIZWlnaHQ6MjAsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7dGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHVzZU1heFdpZHRoOiEwLHRvcEF4aXM6ITEsdXNlV2lkdGg6dm9pZCAwfSxqb3VybmV5OntkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSx1c2VNYXhXaWR0aDohMCxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnthcnJvd01hcmtlckFic29sdXRlOiExLHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciJ9LGdpdDp7YXJyb3dNYXJrZXJBYnNvbHV0ZTohMSx1c2VXaWR0aDp2b2lkIDAsdXNlTWF4V2lkdGg6ITB9LHN0YXRlOntkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsdXNlTWF4V2lkdGg6ITAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e2RpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMix1c2VNYXhXaWR0aDohMH0scGllOnt1c2VXaWR0aDp2b2lkIDAsdXNlTWF4V2lkdGg6ITB9LHJlcXVpcmVtZW50Ont1c2VXaWR0aDp2b2lkIDAsdXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH19O2x2LmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9bHYuYXJyb3dNYXJrZXJBYnNvbHV0ZSxsdi5naXQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1sdi5hcnJvd01hcmtlckFic29sdXRlO3ZhciBodj1mdW5jdGlvbiB0KGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiIjtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKChmdW5jdGlvbihyLGkpe3JldHVybiBBcnJheS5pc0FycmF5KGVbaV0pP3I6Im9iamVjdCI9PT11dihlW2ldKSYmbnVsbCE9PWVbaV0/W10uY29uY2F0KHN2KHIpLFtuK2ldLHN2KHQoZVtpXSwiIikpKTpbXS5jb25jYXQoc3YociksW24raV0pfSksW10pfShsdiwiIik7Y29uc3QgZnY9bHY7dmFyIGR2PXZvaWQgMDtmdW5jdGlvbiBwdih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fWZ1bmN0aW9uIHl2KHQsZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KHQpfHwobj12dih0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gZ3YodCl7cmV0dXJuIGd2PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxndih0KX1mdW5jdGlvbiBtdih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYnYodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHx2dih0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB2dih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gYnYodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9idih0LGUpOnZvaWQgMH19ZnVuY3Rpb24gYnYodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgX3YseHY9e2N1cnZlQmFzaXM6VnUsY3VydmVCYXNpc0Nsb3NlZDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd1KHQpfSxjdXJ2ZUJhc2lzT3BlbjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFh1KHQpfSxjdXJ2ZUxpbmVhcjpQdSxjdXJ2ZUxpbmVhckNsb3NlZDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFp1KHQpfSxjdXJ2ZU1vbm90b25lWDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGVsKHQpfSxjdXJ2ZU1vbm90b25lWTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG5sKHQpfSxjdXJ2ZU5hdHVyYWw6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpbCh0KX0sY3VydmVTdGVwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb2wodCwuNSl9LGN1cnZlU3RlcEFmdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb2wodCwxKX0sY3VydmVTdGVwQmVmb3JlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb2wodCwwKX19LHd2PS9bJV17Mn1be11ccyooPzooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLGt2PS9ccyooPzooPzooXHcrKSg/PTopOnwoXHcrKSlccyooPzooPzooXHcrKSl8KCg/Oig/IVt9XVslXXsyfSkufFxyP1xuKSopKT9ccyopKD86W31dWyVdezJ9KT8vZ2ksVHY9L1xzKiUlLipcbi9nbSxFdj1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt0cnl7dmFyIG49bmV3IFJlZ0V4cCgiWyVdezJ9KD8hW3tdIi5jb25jYXQoa3Yuc291cmNlLCIpKD89W31dWyVdezJ9KS4qXG4iKSwiaWciKTt0PXQudHJpbSgpLnJlcGxhY2UobiwiIikucmVwbGFjZSgvJy9nbSwnIicpLG8uZGVidWcoIkRldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSIuY29uY2F0KG51bGwhPT1lPyIgdHlwZToiK2U6IiIsIiBiYXNlZCBvbiB0aGUgdGV4dDoiKS5jb25jYXQodCkpO2Zvcih2YXIgcixpPVtdO251bGwhPT0ocj13di5leGVjKHQpKTspaWYoci5pbmRleD09PXd2Lmxhc3RJbmRleCYmd3YubGFzdEluZGV4KyssciYmIWV8fGUmJnJbMV0mJnJbMV0ubWF0Y2goZSl8fGUmJnJbMl0mJnJbMl0ubWF0Y2goZSkpe3ZhciBhPXJbMV0/clsxXTpyWzJdLHM9clszXT9yWzNdLnRyaW0oKTpyWzRdP0pTT04ucGFyc2Uocls0XS50cmltKCkpOm51bGw7aS5wdXNoKHt0eXBlOmEsYXJnczpzfSl9cmV0dXJuIDA9PT1pLmxlbmd0aCYmaS5wdXNoKHt0eXBlOnQsYXJnczpudWxsfSksMT09PWkubGVuZ3RoP2lbMF06aX1jYXRjaChuKXtyZXR1cm4gby5lcnJvcigiRVJST1I6ICIuY29uY2F0KG4ubWVzc2FnZSwiIC0gVW5hYmxlIHRvIHBhcnNlIGRpcmVjdGl2ZVxuICAgICAgIikuY29uY2F0KG51bGwhPT1lPyIgdHlwZToiK2U6IiIsIiBiYXNlZCBvbiB0aGUgdGV4dDoiKS5jb25jYXQodCkpLHt0eXBlOm51bGwsYXJnczpudWxsfX19LEN2PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9dC5yZXBsYWNlKHd2LCIiKS5yZXBsYWNlKFR2LCJcbiIpKS5tYXRjaCgvXlxzKnNlcXVlbmNlRGlhZ3JhbS8pPyJzZXF1ZW5jZSI6dC5tYXRjaCgvXlxzKmdhbnR0Lyk/ImdhbnR0Ijp0Lm1hdGNoKC9eXHMqY2xhc3NEaWFncmFtLXYyLyk/ImNsYXNzRGlhZ3JhbSI6dC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS8pP2UmJmUuY2xhc3MmJiJkYWdyZS13cmFwcGVyIj09PWUuY2xhc3MuZGVmYXVsdFJlbmRlcmVyPyJjbGFzc0RpYWdyYW0iOiJjbGFzcyI6dC5tYXRjaCgvXlxzKnN0YXRlRGlhZ3JhbS12Mi8pPyJzdGF0ZURpYWdyYW0iOnQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0vKT9lJiZlLmNsYXNzJiYiZGFncmUtd3JhcHBlciI9PT1lLnN0YXRlLmRlZmF1bHRSZW5kZXJlcj8ic3RhdGVEaWFncmFtIjoic3RhdGUiOnQubWF0Y2goL15ccypnaXRHcmFwaC8pPyJnaXQiOnQubWF0Y2goL15ccypmbG93Y2hhcnQvKT8iZmxvd2NoYXJ0LXYyIjp0Lm1hdGNoKC9eXHMqaW5mby8pPyJpbmZvIjp0Lm1hdGNoKC9eXHMqcGllLyk/InBpZSI6dC5tYXRjaCgvXlxzKmVyRGlhZ3JhbS8pPyJlciI6dC5tYXRjaCgvXlxzKmpvdXJuZXkvKT8iam91cm5leSI6dC5tYXRjaCgvXlxzKnJlcXVpcmVtZW50Lyl8fHQubWF0Y2goL15ccypyZXF1aXJlbWVudERpYWdyYW0vKT8icmVxdWlyZW1lbnQiOmUmJmUuZmxvd2NoYXJ0JiYiZGFncmUtd3JhcHBlciI9PT1lLmZsb3djaGFydC5kZWZhdWx0UmVuZGVyZXI/ImZsb3djaGFydC12MiI6ImZsb3djaGFydCJ9LFN2PWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07dmFyIG89ZT9lLmFwcGx5KGR2LGkpOmlbMF07aWYobyBpbiBuKXJldHVybiBuW29dO3ZhciBzPXQuYXBwbHkodm9pZCAwLGkpO3JldHVybiBuW29dPXMsc319LEF2PWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIGU7dmFyIG49ImN1cnZlIi5jb25jYXQodC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpKTtyZXR1cm4geHZbbl18fGV9LE12PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmU/TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSk6MH0sTnY9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49IiIscj0wO3I8dC5sZW5ndGg7cisrKXZvaWQgMCE9PXRbcl0mJih0W3JdLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHx0W3JdLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/bj1uK3Rbcl0rIjsiOmU9ZSt0W3JdKyI7Iik7cmV0dXJue3N0eWxlOmUsbGFiZWxTdHlsZTpufX0sRHY9MCxPdj1mdW5jdGlvbigpe3JldHVybiBEdisrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrRHZ9LEJ2PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uLmxlbmd0aCxpPTA7aTx0O2krKyllKz1uLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqcikpO3JldHVybiBlfSh0Lmxlbmd0aCl9LEx2PWZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpPU9iamVjdC5hc3NpZ24oe2RlcHRoOjIsY2xvYmJlcjohMX0sciksYT1pLmRlcHRoLG89aS5jbG9iYmVyO3JldHVybiBBcnJheS5pc0FycmF5KG4pJiYhQXJyYXkuaXNBcnJheShlKT8obi5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4scil9KSksZSk6QXJyYXkuaXNBcnJheShuKSYmQXJyYXkuaXNBcnJheShlKT8obi5mb3JFYWNoKChmdW5jdGlvbih0KXstMT09PWUuaW5kZXhPZih0KSYmZS5wdXNoKHQpfSkpLGUpOnZvaWQgMD09PWV8fGE8PTA/bnVsbCE9ZSYmIm9iamVjdCI9PT1ndihlKSYmIm9iamVjdCI9PT1ndihuKT9PYmplY3QuYXNzaWduKGUsbik6bjoodm9pZCAwIT09biYmIm9iamVjdCI9PT1ndihlKSYmIm9iamVjdCI9PT1ndihuKSYmT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24ocil7Im9iamVjdCIhPT1ndihuW3JdKXx8dm9pZCAwIT09ZVtyXSYmIm9iamVjdCIhPT1ndihlW3JdKT8ob3x8Im9iamVjdCIhPT1ndihlW3JdKSYmIm9iamVjdCIhPT1ndihuW3JdKSkmJihlW3JdPW5bcl0pOih2b2lkIDA9PT1lW3JdJiYoZVtyXT1BcnJheS5pc0FycmF5KG5bcl0pP1tdOnt9KSxlW3JdPXQoZVtyXSxuW3JdLHtkZXB0aDphLTEsY2xvYmJlcjpvfSkpfSkpLGUpfSxJdj1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKFVtLmxpbmVCcmVha1JlZ2V4LCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxyLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxyLnN0eWxlKCJmb250LXNpemUiLGUuZm9udFNpemUpLHIuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLHIuYXR0cigiZmlsbCIsZS5maWxsKSx2b2lkIDAhPT1lLmNsYXNzJiZyLmF0dHIoImNsYXNzIixlLmNsYXNzKTt2YXIgaT1yLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrMiplLnRleHRNYXJnaW4pLGkuYXR0cigiZmlsbCIsZS5maWxsKSxpLnRleHQobikscn0sUnY9U3YoKGZ1bmN0aW9uKHQsZSxuKXtpZighdClyZXR1cm4gdDtpZihuPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxuKSxVbS5saW5lQnJlYWtSZWdleC50ZXN0KHQpKXJldHVybiB0O3ZhciByPXQuc3BsaXQoIiAiKSxpPVtdLGE9IiI7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgcz1QdigiIi5jb25jYXQodCwiICIpLG4pLGM9UHYoYSxuKTtpZihzPmUpe3ZhciB1PUZ2KHQsZSwiLSIsbiksbD11Lmh5cGhlbmF0ZWRTdHJpbmdzLGg9dS5yZW1haW5pbmdXb3JkO2kucHVzaC5hcHBseShpLFthXS5jb25jYXQobXYobCkpKSxhPWh9ZWxzZSBjK3M+PWU/KGkucHVzaChhKSxhPXQpOmE9W2EsdF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtvKzE9PT1yLmxlbmd0aCYmaS5wdXNoKGEpfSkpLGkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4iIiE9PXR9KSkuam9pbihuLmpvaW5XaXRoKX0pLChmdW5jdGlvbih0LGUsbil7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZSwiLSIpLmNvbmNhdChuLmZvbnRTaXplLCItIikuY29uY2F0KG4uZm9udFdlaWdodCwiLSIpLmNvbmNhdChuLmZvbnRGYW1pbHksIi0iKS5jb25jYXQobi5qb2luV2l0aCl9KSksRnY9U3YoKGZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiItIixyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3I9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjowfSxyKTt2YXIgaT10LnNwbGl0KCIiKSxhPVtdLG89IiI7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCxzKXt2YXIgYz0iIi5jb25jYXQobykuY29uY2F0KHQpO2lmKFB2KGMscik+PWUpe3ZhciB1PXMrMSxsPWkubGVuZ3RoPT09dSxoPSIiLmNvbmNhdChjKS5jb25jYXQobik7YS5wdXNoKGw/YzpoKSxvPSIifWVsc2Ugbz1jfSkpLHtoeXBoZW5hdGVkU3RyaW5nczphLHJlbWFpbmluZ1dvcmQ6b319KSwoZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Ii0iLHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZSwiLSIpLmNvbmNhdChuLCItIikuY29uY2F0KHIuZm9udFNpemUsIi0iKS5jb25jYXQoci5mb250V2VpZ2h0LCItIikuY29uY2F0KHIuZm9udEZhbWlseSl9KSksUHY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCJ9LGUpLGp2KHQsZSkud2lkdGh9LGp2PVN2KChmdW5jdGlvbih0LGUpe3ZhciBuPWU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxlKSxyPW4uZm9udFNpemUsaT1uLmZvbnRGYW1pbHksYT1uLmZvbnRXZWlnaHQ7aWYoIXQpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O3ZhciBvPVsic2Fucy1zZXJpZiIsaV0scz10LnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxjPVtdLHU9YXUoImJvZHkiKTtpZighdS5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IodmFyIGw9dS5hcHBlbmQoInN2ZyIpLGg9MCxmPW87aDxmLmxlbmd0aDtoKyspe3ZhciBkLHA9ZltoXSx5PTAsZz17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9LG09eXYocyk7dHJ5e2ZvcihtLnMoKTshKGQ9bS5uKCkpLmRvbmU7KXt2YXIgdj1kLnZhbHVlLGI9e3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMH07Yi50ZXh0PXY7dmFyIF89SXYobCxiKS5zdHlsZSgiZm9udC1zaXplIixyKS5zdHlsZSgiZm9udC13ZWlnaHQiLGEpLnN0eWxlKCJmb250LWZhbWlseSIscCkseD0oXy5fZ3JvdXBzfHxfKVswXVswXS5nZXRCQm94KCk7Zy53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KGcud2lkdGgseC53aWR0aCkpLHk9TWF0aC5yb3VuZCh4LmhlaWdodCksZy5oZWlnaHQrPXksZy5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgoZy5saW5lSGVpZ2h0LHkpKX19Y2F0Y2godCl7bS5lKHQpfWZpbmFsbHl7bS5mKCl9Yy5wdXNoKGcpfXJldHVybiBsLnJlbW92ZSgpLGNbaXNOYU4oY1sxXS5oZWlnaHQpfHxpc05hTihjWzFdLndpZHRoKXx8aXNOYU4oY1sxXS5saW5lSGVpZ2h0KXx8Y1swXS5oZWlnaHQ+Y1sxXS5oZWlnaHQmJmNbMF0ud2lkdGg+Y1sxXS53aWR0aCYmY1swXS5saW5lSGVpZ2h0PmNbMV0ubGluZUhlaWdodD8wOjFdfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZS5mb250U2l6ZSwiLSIpLmNvbmNhdChlLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoZS5mb250RmFtaWx5KX0pKSxZdj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IE1hcDtyZXR1cm4gci5zZXQoImhlaWdodCIsdCksbj8oci5zZXQoIndpZHRoIiwiMTAwJSIpLHIuc2V0KCJzdHlsZSIsIm1heC13aWR0aDogIi5jb25jYXQoZSwicHg7IikpKTpyLnNldCgid2lkdGgiLGUpLHJ9LHp2PWZ1bmN0aW9uKHQsZSxuLHIpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHI9eXYoZSk7dHJ5e2ZvcihyLnMoKTshKG49ci5uKCkpLmRvbmU7KXt2YXIgaT1uLnZhbHVlO3QuYXR0cihpWzBdLGlbMV0pfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19KHQsWXYoZSxuLHIpKX0sVXY9ZnVuY3Rpb24gdChlKXtvLmRlYnVnKCJkaXJlY3RpdmVTYW5pdGl6ZXIgY2FsbGVkIHdpdGgiLGUpLCJvYmplY3QiPT09Z3YoZSkmJihlLmxlbmd0aD9lLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfSkpOk9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe28uZGVidWcoIkNoZWNraW5nIGtleSIsbiksMD09PW4uaW5kZXhPZigiX18iKSYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIF9fIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLG4uaW5kZXhPZigicHJvdG8iKT49MCYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIHByb3RvIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLG4uaW5kZXhPZigiY29uc3RyIik+PTAmJihvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBjb25zdHIgb3B0aW9uIixuKSxkZWxldGUgZVtuXSksbi5pbmRleE9mKCJ0aGVtZUNTUyIpPj0wJiYoby5kZWJ1Zygic2FuaXRpemluZyB0aGVtZUNzcyBvcHRpb24iKSxlW25dPXF2KGVbbl0pKSxodi5pbmRleE9mKG4pPDA/KG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pOiJvYmplY3QiPT09Z3YoZVtuXSkmJihvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBvYmplY3QiLG4pLHQoZVtuXSkpfSkpKX0scXY9ZnVuY3Rpb24odCl7cmV0dXJuKHQubWF0Y2goL1x7L2cpfHxbXSkubGVuZ3RoIT09KHQubWF0Y2goL1x9L2cpfHxbXSkubGVuZ3RoPyJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9Ijp0fTtjb25zdCBIdj17YXNzaWduV2l0aERlcHRoOkx2LHdyYXBMYWJlbDpSdixjYWxjdWxhdGVUZXh0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjoxNX0sZSksanYodCxlKS5oZWlnaHR9LGNhbGN1bGF0ZVRleHRXaWR0aDpQdixjYWxjdWxhdGVUZXh0RGltZW5zaW9uczpqdixjYWxjdWxhdGVTdmdTaXplQXR0cnM6WXYsY29uZmlndXJlU3ZnU2l6ZTp6dixkZXRlY3RJbml0OmZ1bmN0aW9uKHQsZSl7dmFyIG49RXYodCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLykscj17fTtpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgaT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXJnc30pKTtVdihpKSxyPUx2KHIsbXYoaSkpfWVsc2Ugcj1uLmFyZ3M7aWYocil7dmFyIGE9Q3YodCxlKTtbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXJbdF0mJigiZmxvd2NoYXJ0LXYyIj09PWEmJihhPSJmbG93Y2hhcnQiKSxyW2FdPXJbdF0sZGVsZXRlIHJbdF0pfSkpfXJldHVybiByfSxkZXRlY3REaXJlY3RpdmU6RXYsZGV0ZWN0VHlwZTpDdixpc1N1YnN0cmluZ0luQXJyYXk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLm1hdGNoKHQpKXJldHVybiBuO3JldHVybi0xfSxpbnRlcnBvbGF0ZVRvQ3VydmU6QXYsY2FsY0xhYmVsUG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24rPU12KHQsZSksZT10fSkpO3ZhciByPW4vMixpPXZvaWQgMDtyZXR1cm4gZT12b2lkIDAsdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihlJiYhaSl7dmFyIG49TXYodCxlKTtpZihuPHIpci09bjtlbHNle3ZhciBhPXIvbjthPD0wJiYoaT1lKSxhPj0xJiYoaT17eDp0LngseTp0Lnl9KSxhPjAmJmE8MSYmKGk9e3g6KDEtYSkqZS54K2EqdC54LHk6KDEtYSkqZS55K2EqdC55fSl9fWU9dH0pKSxpfSh0KX0sY2FsY0NhcmRpbmFsaXR5UG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByO28uaW5mbygib3VyIHBvaW50cyIsZSksZVswXSE9PW4mJihlPWUucmV2ZXJzZSgpKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe012KHQscikscj10fSkpO3ZhciBpLGE9MjU7cj12b2lkIDAsZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihyJiYhaSl7dmFyIGU9TXYodCxyKTtpZihlPGEpYS09ZTtlbHNle3ZhciBuPWEvZTtuPD0wJiYoaT1yKSxuPj0xJiYoaT17eDp0LngseTp0Lnl9KSxuPjAmJm48MSYmKGk9e3g6KDEtbikqci54K24qdC54LHk6KDEtbikqci55K24qdC55fSl9fXI9dH0pKTt2YXIgcz10PzEwOjUsYz1NYXRoLmF0YW4yKGVbMF0ueS1pLnksZVswXS54LWkueCksdT17eDowLHk6MH07cmV0dXJuIHUueD1NYXRoLnNpbihjKSpzKyhlWzBdLngraS54KS8yLHUueT0tTWF0aC5jb3MoYykqcysoZVswXS55K2kueSkvMix1fSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobikpO28uaW5mbygib3VyIHBvaW50cyIsaSksInN0YXJ0X2xlZnQiIT09ZSYmInN0YXJ0X3JpZ2h0IiE9PWUmJihpPWkucmV2ZXJzZSgpKSxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe012KHQscikscj10fSkpO3ZhciBhLHM9MjUrdDtyPXZvaWQgMCxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHImJiFhKXt2YXIgZT1Ndih0LHIpO2lmKGU8cylzLT1lO2Vsc2V7dmFyIG49cy9lO248PTAmJihhPXIpLG4+PTEmJihhPXt4OnQueCx5OnQueX0pLG4+MCYmbjwxJiYoYT17eDooMS1uKSpyLngrbip0LngseTooMS1uKSpyLnkrbip0Lnl9KX19cj10fSkpO3ZhciBjPTEwKy41KnQsdT1NYXRoLmF0YW4yKGlbMF0ueS1hLnksaVswXS54LWEueCksbD17eDowLHk6MH07cmV0dXJuIGwueD1NYXRoLnNpbih1KSpjKyhpWzBdLngrYS54KS8yLGwueT0tTWF0aC5jb3ModSkqYysoaVswXS55K2EueSkvMiwic3RhcnRfbGVmdCI9PT1lJiYobC54PU1hdGguc2luKHUrTWF0aC5QSSkqYysoaVswXS54K2EueCkvMixsLnk9LU1hdGguY29zKHUrTWF0aC5QSSkqYysoaVswXS55K2EueSkvMiksImVuZF9yaWdodCI9PT1lJiYobC54PU1hdGguc2luKHUtTWF0aC5QSSkqYysoaVswXS54K2EueCkvMi01LGwueT0tTWF0aC5jb3ModS1NYXRoLlBJKSpjKyhpWzBdLnkrYS55KS8yLTUpLCJlbmRfbGVmdCI9PT1lJiYobC54PU1hdGguc2luKHUpKmMrKGlbMF0ueCthLngpLzItNSxsLnk9LU1hdGguY29zKHUpKmMrKGlbMF0ueSthLnkpLzItNSksbH0sZm9ybWF0VXJsOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC50cmltKCk7aWYobilyZXR1cm4ibG9vc2UiIT09ZS5zZWN1cml0eUxldmVsPygwLE9tLnNhbml0aXplVXJsKShuKTpufSxnZXRTdHlsZXNGcm9tQXJyYXk6TnYsZ2VuZXJhdGVJZDpPdixyYW5kb206QnYsbWVtb2l6ZTpTdixydW5GdW5jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXQuc3BsaXQoIi4iKSxyPW4ubGVuZ3RoLTEsaT1uW3JdLGE9d2luZG93LG89MDtvPHI7bysrKWlmKCEoYT1hW25bb11dKSlyZXR1cm47Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkocz4xP3MtMTowKSx1PTE7dTxzO3UrKyljW3UtMV09YXJndW1lbnRzW3VdOyhlPWEpW2ldLmFwcGx5KGUsYyl9LGVudGl0eURlY29kZTpmdW5jdGlvbih0KXtyZXR1cm4gX3Y9X3Z8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9ZXNjYXBlKHQpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLF92LmlubmVySFRNTD10LHVuZXNjYXBlKF92LnRleHRDb250ZW50KX0saW5pdElkR2VuZXJhdGlvcjpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmRldGVybWluaXN0aWM9ZSx0aGlzLnNlZWQ9bix0aGlzLmNvdW50PW4/bi5sZW5ndGg6MH12YXIgZSxuO3JldHVybiBlPXQsKG49W3trZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGV0ZXJtaW5pc3RpYz90aGlzLmNvdW50Kys6RGF0ZS5ub3coKX19XSkmJnB2KGUucHJvdG90eXBlLG4pLHR9KCksZGlyZWN0aXZlU2FuaXRpemVyOlV2LHNhbml0aXplQ3NzOnF2fTtmdW5jdGlvbiAkdih0KXtyZXR1cm4gJHY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LCR2KHQpfXZhciBXdixWdj1PYmplY3QuZnJlZXplKGZ2KSxHdj1Mdih7fSxWdiksWHY9W10sWnY9THYoe30sVnYpLFF2PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPUx2KHt9LHQpLHI9e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO3RiKGEpLHI9THYocixhKX1pZihuPUx2KG4sciksci50aGVtZSl7dmFyIG89THYoe30sV3YpLHM9THYoby50aGVtZVZhcmlhYmxlc3x8e30sci50aGVtZVZhcmlhYmxlcyk7bi50aGVtZVZhcmlhYmxlcz1vdltuLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhzKX1yZXR1cm4gWnY9bixufSxLdj1mdW5jdGlvbigpe3JldHVybiBMdih7fSxHdil9LEp2PWZ1bmN0aW9uKCl7cmV0dXJuIEx2KHt9LFp2KX0sdGI9ZnVuY3Rpb24gdChlKXtPYmplY3Qua2V5cyhHdi5zZWN1cmUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWVbR3Yuc2VjdXJlW3RdXSYmKG8uZGVidWcoIkRlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgIi5jb25jYXQoR3Yuc2VjdXJlW3RdKSxlW0d2LnNlY3VyZVt0XV0pLGRlbGV0ZSBlW0d2LnNlY3VyZVt0XV0pfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PT10LmluZGV4T2YoIl9fIikmJmRlbGV0ZSBlW3RdfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4peyJzdHJpbmciPT10eXBlb2YgZVtuXSYmKGVbbl0uaW5kZXhPZigiPCIpPi0xfHxlW25dLmluZGV4T2YoIj4iKT4tMXx8ZVtuXS5pbmRleE9mKCJ1cmwoZGF0YToiKT4tMSkmJmRlbGV0ZSBlW25dLCJvYmplY3QiPT09JHYoZVtuXSkmJnQoZVtuXSl9KSl9LGViPWZ1bmN0aW9uKHQpe3QuZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXMmJnQudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseXx8KHQudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6dC5mb250RmFtaWx5fSkpLFh2LnB1c2godCksUXYoR3YsWHYpfSxuYj1mdW5jdGlvbigpe1F2KEd2LFh2PVtdKX07ZnVuY3Rpb24gcmIodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgaWI9ImNsYXNzaWQtIixhYj1bXSxvYj17fSxzYj0wLGNiPVtdLHViPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dDtpZih0LmluZGV4T2YoIn4iKT4wKXt2YXIgcj10LnNwbGl0KCJ+Iik7bj1yWzBdLGU9VW0uc2FuaXRpemVUZXh0KHJbMV0sSnYoKSl9cmV0dXJue2NsYXNzTmFtZTpuLHR5cGU6ZX19LGxiPWZ1bmN0aW9uKHQpe3ZhciBlPXViKHQpO3ZvaWQgMD09PW9iW2UuY2xhc3NOYW1lXSYmKG9iW2UuY2xhc3NOYW1lXT17aWQ6ZS5jbGFzc05hbWUsdHlwZTplLnR5cGUsY3NzQ2xhc3NlczpbXSxtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sZG9tSWQ6aWIrZS5jbGFzc05hbWUrIi0iK3NifSxzYisrKX0saGI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKG9iKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYob2JbZVtuXV0uaWQ9PT10KXJldHVybiBvYltlW25dXS5kb21JZH0sZmI9ZnVuY3Rpb24odCxlKXt2YXIgbj11Yih0KS5jbGFzc05hbWUscj1vYltuXTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBpPWUudHJpbSgpO2kuc3RhcnRzV2l0aCgiPDwiKSYmaS5lbmRzV2l0aCgiPj4iKT9yLmFubm90YXRpb25zLnB1c2goaS5zdWJzdHJpbmcoMixpLmxlbmd0aC0yKSk6aS5pbmRleE9mKCIpIik+MD9yLm1ldGhvZHMucHVzaChpKTppJiZyLm1lbWJlcnMucHVzaChpKX19LGRiPWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dFswXS5tYXRjaCgvXGQvKSYmKG49aWIrbiksdm9pZCAwIT09b2Jbbl0mJm9iW25dLmNzc0NsYXNzZXMucHVzaChlKX0pKX0scGI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPUp2KCksaT10LGE9aGIoaSk7aWYoImxvb3NlIj09PXIuc2VjdXJpdHlMZXZlbCYmdm9pZCAwIT09ZSYmdm9pZCAwIT09b2JbaV0pe3ZhciBvPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bz1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKXt2YXIgYz1vW3NdLnRyaW0oKTsnIic9PT1jLmNoYXJBdCgwKSYmJyInPT09Yy5jaGFyQXQoYy5sZW5ndGgtMSkmJihjPWMuc3Vic3RyKDEsYy5sZW5ndGgtMikpLG9bc109Y319MD09PW8ubGVuZ3RoJiZvLnB1c2goYSksY2IucHVzaCgoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KGEsJyJdJykpO251bGwhPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXt2YXIgdDtIdi5ydW5GdW5jLmFwcGx5KEh2LFtlXS5jb25jYXQoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gcmIodCl9KHQ9byl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiByYih0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP3JiKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpKX0pLCExKX0pKX19LHliPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxnYj1mdW5jdGlvbih0KXt2YXIgZT1hdSgiLm1lcm1haWRUb29sdGlwIik7bnVsbD09PShlLl9ncm91cHN8fGUpWzBdWzBdJiYoZT1hdSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksYXUodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PWF1KHRoaXMpO2lmKG51bGwhPT10LmF0dHIoInRpdGxlIikpe3ZhciBuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksZS5odG1sKHQuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK24ubGVmdCsobi5yaWdodC1uLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrbi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksdC5jbGFzc2VkKCJob3ZlciIsITApfX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLGF1KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O2NiLnB1c2goZ2IpO3ZhciBtYj0iVEIiO2NvbnN0IHZiPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7c0MucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBKdigpLmNsYXNzfSxhZGRDbGFzczpsYixiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe2NiLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGNsZWFyOmZ1bmN0aW9uKCl7YWI9W10sb2I9e30sKGNiPVtdKS5wdXNoKGdiKX0sZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIG9iW3RdfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIG9ifSxhZGRBbm5vdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dWIodCkuY2xhc3NOYW1lO29iW25dLmFubm90YXRpb25zLnB1c2goZSl9LGdldFJlbGF0aW9uczpmdW5jdGlvbigpe3JldHVybiBhYn0sYWRkUmVsYXRpb246ZnVuY3Rpb24odCl7by5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxsYih0LmlkMSksbGIodC5pZDIpLHQuaWQxPXViKHQuaWQxKS5jbGFzc05hbWUsdC5pZDI9dWIodC5pZDIpLmNsYXNzTmFtZSx0LnJlbGF0aW9uVGl0bGUxPVVtLnNhbml0aXplVGV4dCh0LnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxKdigpKSx0LnJlbGF0aW9uVGl0bGUyPVVtLnNhbml0aXplVGV4dCh0LnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxKdigpKSxhYi5wdXNoKHQpfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbWJ9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXttYj10fSxhZGRNZW1iZXI6ZmIsYWRkTWVtYmVyczpmdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJihlLnJldmVyc2UoKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBmYih0LGUpfSkpKX0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/VW0uc2FuaXRpemVUZXh0KHQuc3Vic3RyKDEpLnRyaW0oKSxKdigpKTp0LnRyaW0oKX0sbGluZVR5cGU6e0xJTkU6MCxET1RURURfTElORToxfSxyZWxhdGlvblR5cGU6eWIsc2V0Q2xpY2tFdmVudDpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3BiKHQsZSxuKSxvYlt0XS5oYXZlQ2FsbGJhY2s9ITB9KSksZGIodCwiY2xpY2thYmxlIil9LHNldENzc0NsYXNzOmRiLHNldExpbms6ZnVuY3Rpb24odCxlLG4pe3ZhciByPUp2KCk7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQ7dFswXS5tYXRjaCgvXGQvKSYmKGk9aWIraSksdm9pZCAwIT09b2JbaV0mJihvYltpXS5saW5rPUh2LmZvcm1hdFVybChlLHIpLG9iW2ldLmxpbmtUYXJnZXQ9InN0cmluZyI9PXR5cGVvZiBuP246Il9ibGFuayIpfSkpLGRiKHQsImNsaWNrYWJsZSIpfSxzZXRUb29sdGlwOmZ1bmN0aW9uKHQsZSl7dmFyIG49SnYoKTt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZSYmKG9iW3RdLnRvb2x0aXA9VW0uc2FuaXRpemVUZXh0KGUsbikpfSkpfSxsb29rVXBEb21JZDpoYn07dmFyIGJiPW4oNjgxKSxfYj1uLm4oYmIpLHhiPW4oODI4Miksd2I9bi5uKHhiKSxrYj1uKDEzNjIpLFRiPW4ubihrYiksRWI9MCxDYj1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC9eKFwrfC18fnwjKT8oXHcrKSh+XHcrfnxcW1xdKT9ccysoXHcrKSAqKFwqfFwkKT8kLyksbj10Lm1hdGNoKC9eKFsrfFwtfH58I10pPyhcdyspICpcKCAqKC4qKVwpICooXCp8XCQpPyAqKFx3Klt+fFtcXV0qXHMqXHcqfj8pJC8pO3JldHVybiBlJiYhbj9TYihlKTpuP0FiKG4pOk1iKHQpfSxTYj1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiO3RyeXt2YXIgcj10WzFdP3RbMV0udHJpbSgpOiIiLGk9dFsyXT90WzJdLnRyaW0oKToiIixhPXRbM10/RGIodFszXS50cmltKCkpOiIiLG89dFs0XT90WzRdLnRyaW0oKToiIixzPXRbNV0/dFs1XS50cmltKCk6IiI7bj1yK2krYSsiICIrbyxlPU9iKHMpfWNhdGNoKGUpe249dH1yZXR1cm57ZGlzcGxheVRleHQ6bixjc3NTdHlsZTplfX0sQWI9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj0iIjt0cnl7dmFyIHI9dFsxXT90WzFdLnRyaW0oKToiIixpPXRbMl0/dFsyXS50cmltKCk6IiIsYT10WzNdP0RiKHRbM10udHJpbSgpKToiIixvPXRbNF0/dFs0XS50cmltKCk6IiI7bj1yK2krIigiK2ErIikiKyh0WzVdPyIgOiAiK0RiKHRbNV0pLnRyaW0oKToiIiksZT1PYihvKX1jYXRjaChlKXtuPXR9cmV0dXJue2Rpc3BsYXlUZXh0Om4sY3NzU3R5bGU6ZX19LE1iPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49IiIscj0iIixpPXQuaW5kZXhPZigiKCIpLGE9dC5pbmRleE9mKCIpIik7aWYoaT4xJiZhPmkmJmE8PXQubGVuZ3RoKXt2YXIgbz0iIixzPSIiLGM9dC5zdWJzdHJpbmcoMCwxKTtjLm1hdGNoKC9cdy8pP3M9dC5zdWJzdHJpbmcoMCxpKS50cmltKCk6KGMubWF0Y2goL1wrfC18fnwjLykmJihvPWMpLHM9dC5zdWJzdHJpbmcoMSxpKS50cmltKCkpO3ZhciB1PXQuc3Vic3RyaW5nKGkrMSxhKSxsPXQuc3Vic3RyaW5nKGErMSwxKTtuPU9iKGwpLGU9bytzKyIoIitEYih1LnRyaW0oKSkrIikiLGE8IiIubGVuZ3RoJiYiIiE9PShyPXQuc3Vic3RyaW5nKGErMikudHJpbSgpKSYmKHI9IiA6ICIrRGIocikpfWVsc2UgZT1EYih0KTtyZXR1cm57ZGlzcGxheVRleHQ6ZSxjc3NTdHlsZTpufX0sTmI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9Q2IoZSksYT10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixyLnBhZGRpbmcpLnRleHQoaS5kaXNwbGF5VGV4dCk7IiIhPT1pLmNzc1N0eWxlJiZhLmF0dHIoInN0eWxlIixpLmNzc1N0eWxlKSxufHxhLmF0dHIoImR5IixyLnRleHRIZWlnaHQpfSxEYj1mdW5jdGlvbiB0KGUpe3ZhciBuPWU7cmV0dXJuLTEhPWUuaW5kZXhPZigifiIpP3Qobj0obj1uLnJlcGxhY2UoIn4iLCI8IikpLnJlcGxhY2UoIn4iLCI+IikpOm59LE9iPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX07Y29uc3QgQmI9ZnVuY3Rpb24odCxlLG4pe28uaW5mbygiUmVuZGVyaW5nIGNsYXNzICIrZSk7dmFyIHIsaT1lLmlkLGE9e2lkOmksbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxzPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGhiKGkpKS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtyPWUubGluaz9zLmFwcGVuZCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsZS5saW5rVGFyZ2V0KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixuLnRleHRIZWlnaHQrbi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTpzLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLG4udGV4dEhlaWdodCtuLnBhZGRpbmcpLmF0dHIoIngiLDApO3ZhciBjPSEwO2UuYW5ub3RhdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK3QrIsK7Iik7Y3x8ZS5hdHRyKCJkeSIsbi50ZXh0SGVpZ2h0KSxjPSExfSkpO3ZhciB1PWUuaWQ7dm9pZCAwIT09ZS50eXBlJiYiIiE9PWUudHlwZSYmKHUrPSI8IitlLnR5cGUrIj4iKTt2YXIgbD1yLmFwcGVuZCgidHNwYW4iKS50ZXh0KHUpLmF0dHIoImNsYXNzIiwidGl0bGUiKTtjfHxsLmF0dHIoImR5IixuLnRleHRIZWlnaHQpO3ZhciBoPXIubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsZj1zLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4vMiksZD1zLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4ucGFkZGluZykuYXR0cigieSIsaCtuLmRpdmlkZXJNYXJnaW4rbi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO2M9ITAsZS5tZW1iZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe05iKGQsdCxjLG4pLGM9ITF9KSk7dmFyIHA9ZC5ub2RlKCkuZ2V0QkJveCgpLHk9cy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbitwLmhlaWdodCkuYXR0cigieTIiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbitwLmhlaWdodCksZz1zLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4ucGFkZGluZykuYXR0cigieSIsaCsyKm4uZGl2aWRlck1hcmdpbitwLmhlaWdodCtuLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Yz0hMCxlLm1ldGhvZHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7TmIoZyx0LGMsbiksYz0hMX0pKTt2YXIgbT1zLm5vZGUoKS5nZXRCQm94KCksdj0iICI7ZS5jc3NDbGFzc2VzLmxlbmd0aD4wJiYodis9ZS5jc3NDbGFzc2VzLmpvaW4oIiAiKSk7dmFyIGI9cy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsbS53aWR0aCsyKm4ucGFkZGluZykuYXR0cigiaGVpZ2h0IixtLmhlaWdodCtuLnBhZGRpbmcrLjUqbi5kaXZpZGVyTWFyZ2luKS5hdHRyKCJjbGFzcyIsdikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gci5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZSgieCIsKGItdC5nZXRCQm94KCkud2lkdGgpLzIpfSkpLGUudG9vbHRpcCYmci5pbnNlcnQoInRpdGxlIikudGV4dChlLnRvb2x0aXApLGYuYXR0cigieDIiLGIpLHkuYXR0cigieDIiLGIpLGEud2lkdGg9YixhLmhlaWdodD1tLmhlaWdodCtuLnBhZGRpbmcrLjUqbi5kaXZpZGVyTWFyZ2luLGF9O2tiLnBhcnNlci55eT12Yjt2YXIgTGI9e30sSWI9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LFJiPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5lbnRyaWVzKExiKS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZVsxXS5sYWJlbD09PXR9KSk7aWYoZSlyZXR1cm4gZVswXX07Y29uc3QgRmI9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SWJbZV09dFtlXX0pKX0sUGI9ZnVuY3Rpb24odCxlKXtMYj17fSxrYi5wYXJzZXIueXkuY2xlYXIoKSxrYi5wYXJzZXIucGFyc2UodCksby5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK3QpO3ZhciBuLHI9YXUoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7ci5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSwobj1yKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpO3ZhciBpPW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMH0pO2kuc2V0R3JhcGgoe2lzTXVsdGlHcmFwaDohMH0pLGkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtmb3IodmFyIGE9dmIuZ2V0Q2xhc3NlcygpLHM9T2JqZWN0LmtleXMoYSksYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgdT1hW3NbY11dLGw9QmIocix1LEliKTtMYltsLmlkXT1sLGkuc2V0Tm9kZShsLmlkLGwpLG8uaW5mbygiT3JnIGhlaWdodDogIitsLmhlaWdodCl9dmIuZ2V0UmVsYXRpb25zKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJ0am9obyIrUmIodC5pZDEpK1JiKHQuaWQyKStKU09OLnN0cmluZ2lmeSh0KSksaS5zZXRFZGdlKFJiKHQuaWQxKSxSYih0LmlkMikse3JlbGF0aW9uOnR9LHQudGl0bGV8fCJERUZBVUxUIil9KSksX2IoKS5sYXlvdXQoaSksaS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkubm9kZSh0KSYmKG8uZGVidWcoIk5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoaS5ub2RlKHQpKSksYXUoIiMiK2hiKHQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS5ub2RlKHQpLngtaS5ub2RlKHQpLndpZHRoLzIpKyIsIisoaS5ub2RlKHQpLnktaS5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSl9KSksaS5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkuZWRnZSh0KSYmKG8uZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh0KSkpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIHliLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSB5Yi5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSB5Yi5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgeWIuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTtlLnBvaW50cz1lLnBvaW50cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTt2YXIgYSxzLGM9ZS5wb2ludHMsdT16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShWdSksbD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHUoYykpLmF0dHIoImlkIiwiZWRnZSIrRWIpLmF0dHIoImNsYXNzIiwicmVsYXRpb24iKSxoPSIiO3IuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKGg9KGg9KGg9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksMT09bi5yZWxhdGlvbi5saW5lVHlwZSYmbC5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMSYmbC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitoKyIjIitpKG4ucmVsYXRpb24udHlwZTEpKyJTdGFydCkiKSwibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUyJiZsLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitoKyIjIitpKG4ucmVsYXRpb24udHlwZTIpKyJFbmQpIik7dmFyIGYsZCxwLHksZz1lLnBvaW50cy5sZW5ndGgsbT1Idi5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyk7aWYoYT1tLngscz1tLnksZyUyIT0wJiZnPjEpe3ZhciB2PUh2LmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEsZS5wb2ludHMsZS5wb2ludHNbMF0pLGI9SHYuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMixlLnBvaW50cyxlLnBvaW50c1tnLTFdKTtvLmRlYnVnKCJjYXJkaW5hbGl0eV8xX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkodikpLG8uZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeShiKSksZj12LngsZD12LnkscD1iLngseT1iLnl9aWYodm9pZCAwIT09bi50aXRsZSl7dmFyIF89dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsYXNzTGFiZWwiKSx4PV8uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLGEpLmF0dHIoInkiLHMpLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQobi50aXRsZSk7d2luZG93LmxhYmVsPXg7dmFyIHc9eC5ub2RlKCkuZ2V0QkJveCgpO18uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4Iix3Lngtci5wYWRkaW5nLzIpLmF0dHIoInkiLHcueS1yLnBhZGRpbmcvMikuYXR0cigid2lkdGgiLHcud2lkdGgrci5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHcuaGVpZ2h0K3IucGFkZGluZyl9by5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShuKSksdm9pZCAwIT09bi5yZWxhdGlvblRpdGxlMSYmIm5vbmUiIT09bi5yZWxhdGlvblRpdGxlMSYmdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMSIpLmF0dHIoIngiLGYpLmF0dHIoInkiLGQpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KG4ucmVsYXRpb25UaXRsZTEpLHZvaWQgMCE9PW4ucmVsYXRpb25UaXRsZTImJiJub25lIiE9PW4ucmVsYXRpb25UaXRsZTImJnQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTIiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLCI2IikudGV4dChuLnJlbGF0aW9uVGl0bGUyKSxFYisrfShyLGkuZWRnZSh0KSxpLmVkZ2UodCkucmVsYXRpb24sSWIpKX0pKTt2YXIgaD1yLm5vZGUoKS5nZXRCQm94KCksZj1oLndpZHRoKzQwLGQ9aC5oZWlnaHQrNDA7enYocixkLGYsSWIudXNlTWF4V2lkdGgpO3ZhciBwPSIiLmNvbmNhdChoLngtMjAsIiAiKS5jb25jYXQoaC55LTIwLCIgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoZCk7by5kZWJ1Zygidmlld0JveCAiLmNvbmNhdChwKSksci5hdHRyKCJ2aWV3Qm94IixwKX07dmFyIGpiPXtleHRlbnNpb246ZnVuY3Rpb24odCxlLG4pe28udHJhY2UoIk1ha2luZyBtYXJrZXJzIGZvciAiLG4pLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKX0sY29tcG9zaXRpb246ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jb21wb3NpdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sYWdncmVnYXRpb246ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1hZ2dyZWdhdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjaXJjbGU6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNyb3NzOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sYmFyYjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9fTtjb25zdCBZYj1mdW5jdGlvbih0LGUsbixyKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2piW2VdKHQsbixyKX0pKX07ZnVuY3Rpb24gemIodCl7cmV0dXJuIHpiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSx6Yih0KX1jb25zdCBVYj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLHMsYyx1LGwsaD10fHwiIjtpZigib2JqZWN0Ij09PXpiKGgpJiYoaD1oWzBdKSx6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKSlyZXR1cm4gaD1oLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxvLmluZm8oInZlcnRleFRleHQiK2gpLGk9e2lzTm9kZTpyLGxhYmVsOmgucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksbGFiZWxTdHlsZTplLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9LHM9YXUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSksYz1zLmFwcGVuZCgieGh0bWw6ZGl2IiksdT1pLmxhYmVsLGw9aS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsYy5odG1sKCc8c3BhbiBjbGFzcz0iJytsKyciICcrKGkubGFiZWxTdHlsZT8nc3R5bGU9IicraS5sYWJlbFN0eWxlKyciJzoiIikrIj4iK3UrIjwvc3Bhbj4iKSwoYT1pLmxhYmVsU3R5bGUpJiZjLmF0dHIoInN0eWxlIixhKSxjLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksYy5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxjLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHMubm9kZSgpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7Zi5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO3ZhciBkPVtdO2Q9InN0cmluZyI9PXR5cGVvZiBoP2guc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGgpP2g6W107Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikseS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikseS5zZXRBdHRyaWJ1dGUoIngiLCIwIiksbj95LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTp5LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSx5LnRleHRDb250ZW50PWRbcF0udHJpbSgpLGYuYXBwZW5kQ2hpbGQoeSl9cmV0dXJuIGZ9O3ZhciBxYj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaTtpPW58fCJub2RlIGRlZmF1bHQiO3ZhciBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxvPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpLHM9InN0cmluZyI9PXR5cGVvZiBlLmxhYmVsVGV4dD9lLmxhYmVsVGV4dDplLmxhYmVsVGV4dFswXSxjPW8ubm9kZSgpLmFwcGVuZENoaWxkKFViKEZtKHJDKHMpLEp2KCkpLGUubGFiZWxTdHlsZSwhMSxyKSksdT1jLmdldEJCb3goKTtpZih6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9Yy5jaGlsZHJlblswXSxoPWF1KGMpO3U9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIix1LndpZHRoKSxoLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpfXZhciBmPWUucGFkZGluZy8yO3JldHVybiBvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy11LndpZHRoLzIrIiwgIistdS5oZWlnaHQvMisiKSIpLHtzaGFwZVN2ZzphLGJib3g6dSxoYWxmUGFkZGluZzpmLGxhYmVsOm99fSxIYj1mdW5jdGlvbih0LGUpe3ZhciBuPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHR9O2Z1bmN0aW9uICRiKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrbi8yKyIpIil9dmFyIFdiPXt9LFZiPXt9LEdiPXt9LFhiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8udHJhY2UoIkluIGlzRGVjZW5kYW50IixlLCIgIix0LCIgPSAiLFZiW2VdLmluZGV4T2YodCk+PTApLFZiW2VdLmluZGV4T2YodCk+PTB9LFpiPWZ1bmN0aW9uIHQoZSxuLHIsaSl7by53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsZSwicm9vdCIsaSwiZGF0YSIsbi5ub2RlKGUpLGkpO3ZhciBhPW4uY2hpbGRyZW4oZSl8fFtdO2UhPT1pJiZhLnB1c2goZSksby53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIixlLCJub2RlcyIsYSksYS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihuLmNoaWxkcmVuKGEpLmxlbmd0aD4wKXQoYSxuLHIsaSk7ZWxzZXt2YXIgcz1uLm5vZGUoYSk7by5pbmZvKCJjcCAiLGEsIiB0byAiLGksIiB3aXRoIHBhcmVudCAiLGUpLHIuc2V0Tm9kZShhLHMpLGkhPT1uLnBhcmVudChhKSYmKG8ud2FybigiU2V0dGluZyBwYXJlbnQiLGEsbi5wYXJlbnQoYSkpLHIuc2V0UGFyZW50KGEsbi5wYXJlbnQoYSkpKSxlIT09aSYmYSE9PWU/KG8uZGVidWcoIlNldHRpbmcgcGFyZW50IixhLGUpLHIuc2V0UGFyZW50KGEsZSkpOihvLmluZm8oIkluIGNvcHkgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSksby5kZWJ1ZygiTm90IFNldHRpbmcgcGFyZW50IGZvciBub2RlPSIsYSwiY2x1c3RlciE9PXJvb3RJZCIsZSE9PWksIm5vZGUhPT1jbHVzdGVySWQiLGEhPT1lKSk7dmFyIGM9bi5lZGdlcyhhKTtvLmRlYnVnKCJDb3B5aW5nIEVkZ2VzIixjKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe28uaW5mbygiRWRnZSIsdCk7dmFyIGE9bi5lZGdlKHQudix0LncsdC5uYW1lKTtvLmluZm8oIkVkZ2UgZGF0YSIsYSxpKTt0cnl7IWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uaW5mbygiRGVjZW5kYW50cyBvZiAiLGUsIiBpcyAiLFZiW2VdKSxvLmluZm8oIkVkZ2UgaXMgIix0KSx0LnYhPT1lJiZ0LnchPT1lJiYoVmJbZV0/KG8uaW5mbygiSGVyZSAiKSxWYltlXS5pbmRleE9mKHQudik+PTB8fCEhWGIodC52LGUpfHwhIVhiKHQudyxlKXx8VmJbZV0uaW5kZXhPZih0LncpPj0wKTooby5kZWJ1ZygiVGlsdCwgIixlLCIsbm90IGluIGRlY2VuZGFudHMiKSwhMSkpfSh0LGkpP28uaW5mbygiU2tpcHBpbmcgY29weSBvZiBlZGdlICIsdC52LCItLVx4M2UiLHQudywiIHJvb3RJZDogIixpLCIgY2x1c3RlcklkOiIsZSk6KG8uaW5mbygiQ29weWluZyBhcyAiLHQudix0LncsYSx0Lm5hbWUpLHIuc2V0RWRnZSh0LnYsdC53LGEsdC5uYW1lKSxvLmluZm8oIm5ld0dyYXBoIGVkZ2VzICIsci5lZGdlcygpLHIuZWRnZShyLmVkZ2VzKClbMF0pKSl9Y2F0Y2godCl7by5lcnJvcih0KX19KSl9by5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksbi5yZW1vdmVOb2RlKGEpfSkpfSxRYj1mdW5jdGlvbiB0KGUsbil7Zm9yKHZhciByPW4uY2hpbGRyZW4oZSksaT1bXS5jb25jYXQociksYT0wO2E8ci5sZW5ndGg7YSsrKUdiW3JbYV1dPWUsaT1pLmNvbmNhdCh0KHJbYV0sbikpO3JldHVybiBpfSxLYj1mdW5jdGlvbiB0KGUsbil7by50cmFjZSgiU2VhcmNoaW5nIixlKTt2YXIgcj1uLmNoaWxkcmVuKGUpO2lmKG8udHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLGUsciksci5sZW5ndGg8MSlyZXR1cm4gby50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGUpLGU7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXQocltpXSxuKTtpZihhKXJldHVybiBvLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGUsIiA9PiAiLGEpLGF9fSxKYj1mdW5jdGlvbih0KXtyZXR1cm4gV2JbdF0mJldiW3RdLmV4dGVybmFsQ29ubmVjdGlvbnMmJldiW3RdP1diW3RdLmlkOnR9LHRfPWZ1bmN0aW9uKHQsZSl7IXR8fGU+MTA/by5kZWJ1ZygiT3B0aW5nIG91dCwgbm8gZ3JhcGggIik6KG8uZGVidWcoIk9wdGluZyBpbiwgZ3JhcGggIiksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuY2hpbGRyZW4oZSkubGVuZ3RoPjAmJihvLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsZSwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLEtiKGUsdCkpLFZiW2VdPVFiKGUsdCksV2JbZV09e2lkOktiKGUsdCksY2x1c3RlckRhdGE6dC5ub2RlKGUpfSl9KSksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpbGRyZW4oZSkscj10LmVkZ2VzKCk7bi5sZW5ndGg+MD8oby5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixlLFZiKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudiE9PWUmJnQudyE9PWUmJlhiKHQudixlKV5YYih0LncsZSkmJihvLndhcm4oIkVkZ2U6ICIsdCwiIGxlYXZlcyBjbHVzdGVyICIsZSksby53YXJuKCJEZWNlbmRhbnRzIG9mIFhYWCAiLGUsIjogIixWYltlXSksV2JbZV0uZXh0ZXJuYWxDb25uZWN0aW9ucz0hMCl9KSkpOm8uZGVidWcoIk5vdCBhIGNsdXN0ZXIgIixlLFZiKX0pKSx0LmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO28ud2FybigiRWRnZSAiK2UudisiIC0+ICIrZS53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZSkpLG8ud2FybigiRWRnZSAiK2UudisiIC0+ICIrZS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodC5lZGdlKGUpKSk7dmFyIHI9ZS52LGk9ZS53O28ud2FybigiRml4IFhYWCIsV2IsImlkczoiLGUudixlLncsIlRyYW5zbGF0ZWluZzogIixXYltlLnZdLCIgLS0tICIsV2JbZS53XSksKFdiW2Uudl18fFdiW2Uud10pJiYoby53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLGUudixlLncsZS5uYW1lKSxyPUpiKGUudiksaT1KYihlLncpLHQucmVtb3ZlRWRnZShlLnYsZS53LGUubmFtZSksciE9PWUudiYmKG4uZnJvbUNsdXN0ZXI9ZS52KSxpIT09ZS53JiYobi50b0NsdXN0ZXI9ZS53KSxvLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHIsaSxlLm5hbWUpLHQuc2V0RWRnZShyLGksbixlLm5hbWUpKX0pKSxvLndhcm4oIkFkanVzdGVkIEdyYXBoIix3YigpLmpzb24ud3JpdGUodCkpLGVfKHQsMCksby50cmFjZShXYikpfSxlXz1mdW5jdGlvbiB0KGUsbil7aWYoby53YXJuKCJleHRyYWN0b3IgLSAiLG4sd2IoKS5qc29uLndyaXRlKGUpLGUuY2hpbGRyZW4oIkQiKSksbj4xMClvLmVycm9yKCJCYWlsaW5nIG91dCIpO2Vsc2V7Zm9yKHZhciByPWUubm9kZXMoKSxpPSExLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxjPWUuY2hpbGRyZW4ocyk7aT1pfHxjLmxlbmd0aD4wfWlmKGkpe28uZGVidWcoIk5vZGVzID0gIixyLG4pO2Zvcih2YXIgdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgbD1yW3VdO2lmKG8uZGVidWcoIkV4dHJhY3Rpbmcgbm9kZSIsbCxXYixXYltsXSYmIVdiW2xdLmV4dGVybmFsQ29ubmVjdGlvbnMsIWUucGFyZW50KGwpLGUubm9kZShsKSxlLmNoaWxkcmVuKCJEIiksIiBEZXB0aCAiLG4pLFdiW2xdKWlmKCFXYltsXS5leHRlcm5hbENvbm5lY3Rpb25zJiZlLmNoaWxkcmVuKGwpJiZlLmNoaWxkcmVuKGwpLmxlbmd0aD4wKXtvLndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsbCxuKTt2YXIgaD0iVEIiPT09ZS5ncmFwaCgpLnJhbmtkaXI/IkxSIjoiVEIiO1diW2xdJiZXYltsXS5jbHVzdGVyRGF0YSYmV2JbbF0uY2x1c3RlckRhdGEuZGlyJiYoaD1XYltsXS5jbHVzdGVyRGF0YS5kaXIsby53YXJuKCJGaXhpbmcgZGlyIixXYltsXS5jbHVzdGVyRGF0YS5kaXIsaCkpO3ZhciBmPW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmgsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO28ud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5Iix3YigpLmpzb24ud3JpdGUoZSkpLFpiKGwsZSxmLGwpLGUuc2V0Tm9kZShsLHtjbHVzdGVyTm9kZTohMCxpZDpsLGNsdXN0ZXJEYXRhOldiW2xdLmNsdXN0ZXJEYXRhLGxhYmVsVGV4dDpXYltsXS5sYWJlbFRleHQsZ3JhcGg6Zn0pLG8ud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsbCwiKSIsd2IoKS5qc29uLndyaXRlKGYpKSxvLmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsd2IoKS5qc29uLndyaXRlKGUpKX1lbHNlIG8ud2FybigiQ2x1c3RlciAqKiAiLGwsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFXYltsXS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFlLnBhcmVudChsKSwiIGNoaWxkcmVuICIsZS5jaGlsZHJlbihsKSYmZS5jaGlsZHJlbihsKS5sZW5ndGg+MCxlLmNoaWxkcmVuKCJEIiksbiksby5kZWJ1ZyhXYik7ZWxzZSBvLmRlYnVnKCJOb3QgYSBjbHVzdGVyIixsLG4pfXI9ZS5ub2RlcygpLG8ud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2Zvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXt2YXIgcD1yW2RdLHk9ZS5ub2RlKHApO28ud2FybigiIE5vdyBuZXh0IGxldmVsIixwLHkpLHkuY2x1c3Rlck5vZGUmJnQoeS5ncmFwaCxuKzEpfX1lbHNlIG8uZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixlLm5vZGVzKCkpfX0sbl89ZnVuY3Rpb24gdChlLG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm5bXTt2YXIgcj1PYmplY3QuYXNzaWduKG4pO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPWUuY2hpbGRyZW4obiksYT10KGUsaSk7cj1yLmNvbmNhdChhKX0pKSxyfSxyXz1mdW5jdGlvbih0KXtyZXR1cm4gbl8odCx0LmNoaWxkcmVuKCkpfSxpXz1uKDM4NDEpO2NvbnN0IGFfPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX07ZnVuY3Rpb24gb18odCxlKXtyZXR1cm4gdCplPjB9Y29uc3Qgc189ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGc7aWYoaT1lLnktdC55LG89dC54LWUueCxjPWUueCp0LnktdC54KmUueSxmPWkqbi54K28qbi55K2MsZD1pKnIueCtvKnIueStjLCEoMCE9PWYmJjAhPT1kJiZvXyhmLGQpfHwoYT1yLnktbi55LHM9bi54LXIueCx1PXIueCpuLnktbi54KnIueSxsPWEqdC54K3MqdC55K3UsaD1hKmUueCtzKmUueSt1LDAhPT1sJiYwIT09aCYmb18obCxoKXx8MD09KHA9aSpzLWEqbykpKSlyZXR1cm4geT1NYXRoLmFicyhwLzIpLHt4OihnPW8qdS1zKmMpPDA/KGcteSkvcDooZyt5KS9wLHk6KGc9YSpjLWkqdSk8MD8oZy15KS9wOihnK3kpL3B9fSxjXz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX0sdV89KG4ubihpXykoKSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFfKHQsZSxlLG4pfSksbF89ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQueCxpPXQueSxhPVtdLG89TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyJmdW5jdGlvbiI9PXR5cGVvZiBlLmZvckVhY2g/ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtvPU1hdGgubWluKG8sdC54KSxzPU1hdGgubWluKHMsdC55KX0pKToobz1NYXRoLm1pbihvLGUueCkscz1NYXRoLm1pbihzLGUueSkpO2Zvcih2YXIgYz1yLXQud2lkdGgvMi1vLHU9aS10LmhlaWdodC8yLXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgaD1lW2xdLGY9ZVtsPGUubGVuZ3RoLTE/bCsxOjBdLGQ9c18odCxuLHt4OmMraC54LHk6dStoLnl9LHt4OmMrZi54LHk6dStmLnl9KTtkJiZhLnB1c2goZCl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKSxhWzBdKTp0fSxoXz1jXztmdW5jdGlvbiBmXyh0KXtyZXR1cm4gZl89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGZfKHQpfXZhciBkXz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPTcwLGE9MTA7IkxSIj09PW4mJihpPTEwLGE9NzApO3ZhciBvPXIuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqaS8yKS5hdHRyKCJ5IiwtMSphLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIEhiKGUsbyksZS5oZWlnaHQ9ZS5oZWlnaHQrZS5wYWRkaW5nLzIsZS53aWR0aD1lLndpZHRoK2UucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoXyhlLHQpfSxyfSxwXz17cXVlc3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZysoaS5oZWlnaHQrZS5wYWRkaW5nKSxzPVt7eDphLzIseTowfSx7eDphLHk6LWEvMn0se3g6YS8yLHk6LWF9LHt4OjAseTotYS8yfV07by5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7dmFyIGM9JGIocixhLGEscyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEhiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLGxfKGUscyx0KX0scn0scmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuPXFiKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZztvLnRyYWNlKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYz1pLndpZHRoK2UucGFkZGluZyx1PWkuaGVpZ2h0K2UucGFkZGluZztpZihzLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsLWkud2lkdGgvMi1hKS5hdHRyKCJ5IiwtaS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsYykuYXR0cigiaGVpZ2h0Iix1KSxlLnByb3BzKXt2YXIgbD1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1bXSxhPWZ1bmN0aW9uKHQpe2kucHVzaCh0KSxpLnB1c2goMCl9LHM9ZnVuY3Rpb24odCl7aS5wdXNoKDApLGkucHVzaCh0KX07ZS5pbmNsdWRlcygidCIpPyhvLmRlYnVnKCJhZGQgdG9wIGJvcmRlciIpLGEobikpOnMobiksZS5pbmNsdWRlcygiciIpPyhvLmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJiIik/KG8uZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksYShuKSk6cyhuKSxlLmluY2x1ZGVzKCJsIik/KG8uZGVidWcoImFkZCBsZWZ0IGJvcmRlciIpLGEocikpOnMociksdC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixpLmpvaW4oIiAiKSl9KHMsZS5wcm9wcy5ib3JkZXJzLGMsdSksbC5kZWxldGUoImJvcmRlcnMiKSksbC5mb3JFYWNoKChmdW5jdGlvbih0KXtvLndhcm4oIlVua25vd24gbm9kZSBwcm9wZXJ0eSAiLmNvbmNhdCh0KSl9KSl9cmV0dXJuIEhiKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGhfKGUsdCl9LHJ9LHJlY3RXaXRoVGl0bGU6ZnVuY3Rpb24odCxlKXt2YXIgbjtuPWUuY2xhc3Nlcz8ibm9kZSAiK2UuY2xhc3Nlczoibm9kZSBkZWZhdWx0Ijt2YXIgcixpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxhPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscz1pLmluc2VydCgibGluZSIpLGM9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksdT1lLmxhYmVsVGV4dC5mbGF0P2UubGFiZWxUZXh0LmZsYXQoKTplLmxhYmVsVGV4dDtyPSJvYmplY3QiPT09Zl8odSk/dVswXTp1LG8uaW5mbygiTGFiZWwgdGV4dCBhYmM3OSIscix1LCJvYmplY3QiPT09Zl8odSkpO3ZhciBsPWMubm9kZSgpLmFwcGVuZENoaWxkKFViKHIsZS5sYWJlbFN0eWxlLCEwLCEwKSksaD17d2lkdGg6MCxoZWlnaHQ6MH07aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBmPWwuY2hpbGRyZW5bMF0sZD1hdShsKTtoPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZC5hdHRyKCJ3aWR0aCIsaC53aWR0aCksZC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1vLmluZm8oIlRleHQgMiIsdSk7dmFyIHA9dS5zbGljZSgxLHUubGVuZ3RoKSx5PWwuZ2V0QkJveCgpLGc9Yy5ub2RlKCkuYXBwZW5kQ2hpbGQoVWIocC5qb2luP3Auam9pbigiPGJyLz4iKTpwLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKHptKEp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgbT1nLmNoaWxkcmVuWzBdLHY9YXUoZyk7aD1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGgud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixoLmhlaWdodCl9dmFyIGI9ZS5wYWRkaW5nLzI7cmV0dXJuIGF1KGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoaC53aWR0aD55LndpZHRoPzA6KHkud2lkdGgtaC53aWR0aCkvMikrIiwgIisoeS5oZWlnaHQrYis1KSsiKSIpLGF1KGwpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoaC53aWR0aDx5LndpZHRoPzA6LSh5LndpZHRoLWgud2lkdGgpLzIpKyIsIDApIiksaD1jLm5vZGUoKS5nZXRCQm94KCksYy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrKC1oLmhlaWdodC8yLWIrMykrIikiKSxhLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtaC53aWR0aC8yLWIpLmF0dHIoInkiLC1oLmhlaWdodC8yLWIpLmF0dHIoIndpZHRoIixoLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixoLmhlaWdodCtlLnBhZGRpbmcpLHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1oLndpZHRoLzItYikuYXR0cigieDIiLGgud2lkdGgvMitiKS5hdHRyKCJ5MSIsLWguaGVpZ2h0LzItYit5LmhlaWdodCtiKS5hdHRyKCJ5MiIsLWguaGVpZ2h0LzItYit5LmhlaWdodCtiKSxIYihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoXyhlLHQpfSxpfSxjaG9pY2U6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpO3JldHVybiBuLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsW3t4OjAseToxNH0se3g6MTQseTowfSx7eDowLHk6LTE0fSx7eDotMTQseTowfV0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDI4KS5hdHRyKCJoZWlnaHQiLDI4KSxlLndpZHRoPTI4LGUuaGVpZ2h0PTI4LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB1XyhlLDE0LHQpfSxufSxjaXJjbGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nLHM9ci5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBzLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLGkud2lkdGgvMithKS5hdHRyKCJ3aWR0aCIsaS53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaS5oZWlnaHQrZS5wYWRkaW5nKSxvLmluZm8oIkNpcmNsZSBtYWluIiksSGIoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gby5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLGkud2lkdGgvMithLHQpLHVfKGUsaS53aWR0aC8yK2EsdCl9LHJ9LHN0YWRpdW06ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLmhlaWdodCtlLnBhZGRpbmcsbz1pLndpZHRoK2EvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsYS8yKS5hdHRyKCJyeSIsYS8yKS5hdHRyKCJ4Iiwtby8yKS5hdHRyKCJ5IiwtYS8yKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixhKTtyZXR1cm4gSGIoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaF8oZSx0KX0scn0saGV4YWdvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXFiKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkuaGVpZ2h0K2UucGFkZGluZyxvPWEvNCxzPWkud2lkdGgrMipvK2UucGFkZGluZyxjPVt7eDpvLHk6MH0se3g6cy1vLHk6MH0se3g6cyx5Oi1hLzJ9LHt4OnMtbyx5Oi1hfSx7eDpvLHk6LWF9LHt4OjAseTotYS8yfV0sdT0kYihyLHMsYSxjKTtyZXR1cm4gdS5hdHRyKCJzdHlsZSIsZS5zdHlsZSksSGIoZSx1KSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbF8oZSxjLHQpfSxyfSxyZWN0X2xlZnRfaW52X2Fycm93OmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LW8vMix5OjB9LHt4OmEseTowfSx7eDphLHk6LW99LHt4Oi1vLzIseTotb30se3g6MCx5Oi1vLzJ9XTtyZXR1cm4gJGIocixhLG8scykuYXR0cigic3R5bGUiLGUuc3R5bGUpLGUud2lkdGg9YStvLGUuaGVpZ2h0PW8sZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGxfKGUscyx0KX0scn0sbGVhbl9yaWdodDpmdW5jdGlvbih0LGUpe3ZhciBuPXFiKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKm8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDpvLzYseTotb31dLGM9JGIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEhiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGxfKGUscyx0KX0scn0sbGVhbl9sZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MipvLzYseTowfSx7eDphK28vNix5OjB9LHt4OmEtMipvLzYseTotb30se3g6LW8vNix5Oi1vfV0sYz0kYihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksSGIoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbF8oZSxzLHQpfSxyfSx0cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDotMipvLzYseTowfSx7eDphKzIqby82LHk6MH0se3g6YS1vLzYseTotb30se3g6by82LHk6LW99XSxjPSRiKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxIYihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBsXyhlLHMsdCl9LHJ9LGludl90cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDpvLzYseTowfSx7eDphLW8vNix5OjB9LHt4OmErMipvLzYseTotb30se3g6LTIqby82LHk6LW99XSxjPSRiKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxIYihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBsXyhlLHMsdCl9LHJ9LHJlY3RfcmlnaHRfaW52X2Fycm93OmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmErby8yLHk6MH0se3g6YSx5Oi1vLzJ9LHt4OmErby8yLHk6LW99LHt4OjAseTotb31dLGM9JGIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEhiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGxfKGUscyx0KX0scn0sY3lsaW5kZXI6ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWEvMixzPW8vKDIuNSthLzUwKSxjPWkuaGVpZ2h0K3MrZS5wYWRkaW5nLHU9Ik0gMCwiK3MrIiBhICIrbysiLCIrcysiIDAsMCwwICIrYSsiIDAgYSAiK28rIiwiK3MrIiAwLDAsMCAiKy1hKyIgMCBsIDAsIitjKyIgYSAiK28rIiwiK3MrIiAwLDAsMCAiK2ErIiAwIGwgMCwiKy1jLGw9ci5hdHRyKCJsYWJlbC1vZmZzZXQteSIscykuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImQiLHUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1hLzIrIiwiKy0oYy8yK3MpKyIpIik7cmV0dXJuIEhiKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7dmFyIG49aF8oZSx0KSxyPW4ueC1lLng7aWYoMCE9byYmKE1hdGguYWJzKHIpPGUud2lkdGgvMnx8TWF0aC5hYnMocik9PWUud2lkdGgvMiYmTWF0aC5hYnMobi55LWUueSk+ZS5oZWlnaHQvMi1zKSl7dmFyIGk9cypzKigxLXIqci8obypvKSk7MCE9aSYmKGk9TWF0aC5zcXJ0KGkpKSxpPXMtaSx0LnktZS55PjAmJihpPS1pKSxuLnkrPWl9cmV0dXJuIG59LHJ9LHN0YXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gci5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxIYihlLHIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB1XyhlLDcsdCl9LG59LGVuZDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscj1uLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCksci5hdHRyKCJjbGFzcyIsInN0YXRlLWVuZCIpLmF0dHIoInIiLDUpLmF0dHIoIndpZHRoIiwxMCkuYXR0cigiaGVpZ2h0IiwxMCksSGIoZSxpKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gdV8oZSw3LHQpfSxufSxub3RlOmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nO28uaW5mbygiQ2xhc3NlcyA9ICIsZS5jbGFzc2VzKTt2YXIgcz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBzLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsLWkud2lkdGgvMi1hKS5hdHRyKCJ5IiwtaS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsaS53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaS5oZWlnaHQrZS5wYWRkaW5nKSxIYihlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoXyhlLHQpfSxyfSxzdWJyb3V0aW5lOmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmEseTowfSx7eDphLHk6LW99LHt4OjAseTotb30se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6YSs4LHk6MH0se3g6YSs4LHk6LW99LHt4Oi04LHk6LW99LHt4Oi04LHk6MH1dLGM9JGIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEhiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGxfKGUscyx0KX0scn0sZm9yazpkXyxqb2luOmRfLGNsYXNzX2JveDpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5wYWRkaW5nLzI7bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxvPWkuaW5zZXJ0KCJsaW5lIikscz1pLmluc2VydCgibGluZSIpLGM9MCx1PTQsbD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxoPTAsZj1lLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0sZD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2UuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIscD1sLm5vZGUoKS5hcHBlbmRDaGlsZChVYihkLGUubGFiZWxTdHlsZSwhMCwhMCkpLHk9cC5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBnPXAuY2hpbGRyZW5bMF0sbT1hdShwKTt5PWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbS5hdHRyKCJ3aWR0aCIseS53aWR0aCksbS5hdHRyKCJoZWlnaHQiLHkuaGVpZ2h0KX1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSYmKHUrPXkuaGVpZ2h0KzQsYys9eS53aWR0aCk7dmFyIHY9ZS5jbGFzc0RhdGEuaWQ7dm9pZCAwIT09ZS5jbGFzc0RhdGEudHlwZSYmIiIhPT1lLmNsYXNzRGF0YS50eXBlJiYoSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscz92Kz0iJmx0OyIrZS5jbGFzc0RhdGEudHlwZSsiJmd0OyI6dis9IjwiK2UuY2xhc3NEYXRhLnR5cGUrIj4iKTt2YXIgYj1sLm5vZGUoKS5hcHBlbmRDaGlsZChVYih2LGUubGFiZWxTdHlsZSwhMCwhMCkpO2F1KGIpLmF0dHIoImNsYXNzIiwiY2xhc3NUaXRsZSIpO3ZhciBfPWIuZ2V0QkJveCgpO2lmKHptKEp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgeD1iLmNoaWxkcmVuWzBdLHc9YXUoYik7Xz14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHcuYXR0cigid2lkdGgiLF8ud2lkdGgpLHcuYXR0cigiaGVpZ2h0IixfLmhlaWdodCl9dSs9Xy5oZWlnaHQrNCxfLndpZHRoPmMmJihjPV8ud2lkdGgpO3ZhciBrPVtdO2UuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49Q2IodCkscj1uLmRpc3BsYXlUZXh0O0p2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJihyPXIucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO3ZhciBpPWwubm9kZSgpLmFwcGVuZENoaWxkKFViKHIsbi5jc3NTdHlsZT9uLmNzc1N0eWxlOmUubGFiZWxTdHlsZSwhMCwhMCkpLGE9aS5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBvPWkuY2hpbGRyZW5bMF0scz1hdShpKTthPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscy5hdHRyKCJ3aWR0aCIsYS53aWR0aCkscy5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KX1hLndpZHRoPmMmJihjPWEud2lkdGgpLHUrPWEuaGVpZ2h0KzQsay5wdXNoKGkpfSkpLHUrPTg7dmFyIFQ9W107aWYoZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1DYih0KSxyPW4uZGlzcGxheVRleHQ7SnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHI9ci5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIGk9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoVWIocixuLmNzc1N0eWxlP24uY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksYT1pLmdldEJCb3goKTtpZih6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89aS5jaGlsZHJlblswXSxzPWF1KGkpO2E9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzLmF0dHIoIndpZHRoIixhLndpZHRoKSxzLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpfWEud2lkdGg+YyYmKGM9YS53aWR0aCksdSs9YS5oZWlnaHQrNCxULnB1c2goaSl9KSksdSs9OCxmKXt2YXIgRT0oYy15LndpZHRoKS8yO2F1KHApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK0UpKyIsICIrLTEqdS8yKyIpIiksaD15LmhlaWdodCs0fXZhciBDPShjLV8ud2lkdGgpLzI7cmV0dXJuIGF1KGIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK0MpKyIsICIrKC0xKnUvMitoKSsiKSIpLGgrPV8uaGVpZ2h0KzQsby5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWMvMi1yKS5hdHRyKCJ4MiIsYy8yK3IpLmF0dHIoInkxIiwtdS8yLXIrOCtoKS5hdHRyKCJ5MiIsLXUvMi1yKzgraCksaCs9OCxrLmZvckVhY2goKGZ1bmN0aW9uKHQpe2F1KHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistYy8yKyIsICIrKC0xKnUvMitoKzQpKyIpIiksaCs9Xy5oZWlnaHQrNH0pKSxoKz04LHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1jLzItcikuYXR0cigieDIiLGMvMityKS5hdHRyKCJ5MSIsLXUvMi1yKzgraCkuYXR0cigieTIiLC11LzItcis4K2gpLGgrPTgsVC5mb3JFYWNoKChmdW5jdGlvbih0KXthdSh0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWMvMisiLCAiKygtMSp1LzIraCkrIikiKSxoKz1fLmhlaWdodCs0fSkpLGEuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1jLzItcikuYXR0cigieSIsLXUvMi1yKS5hdHRyKCJ3aWR0aCIsYytlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdStlLnBhZGRpbmcpLEhiKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGhfKGUsdCl9LGl9fSx5Xz17fSxnXz1mdW5jdGlvbih0KXt2YXIgZT15X1t0LmlkXTtvLnRyYWNlKCJUcmFuc2Zvcm1pbmcgbm9kZSIsdC5kaWZmLHQsInRyYW5zbGF0ZSgiKyh0LngtdC53aWR0aC8yLTUpKyIsICIrdC53aWR0aC8yKyIpIik7dmFyIG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItOCkrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LG1fPXtyZWN0OmZ1bmN0aW9uKHQsZSl7by50cmFjZSgiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIisoZS5jbGFzcz8iICIrZS5jbGFzczoiIikpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGE9aS5ub2RlKCkuYXBwZW5kQ2hpbGQoVWIoZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLHM9YS5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBjPWEuY2hpbGRyZW5bMF0sdT1hdShhKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX12YXIgbD0wKmUucGFkZGluZyxoPWwvMixmPWUud2lkdGg8PXMud2lkdGgrbD9zLndpZHRoK2w6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2w/ZS5kaWZmPShzLndpZHRoLWUud2lkdGgpLzI6ZS5kaWZmPS1lLnBhZGRpbmcvMixvLnRyYWNlKCJEYXRhICIsZSxKU09OLnN0cmluZ2lmeShlKSksci5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixlLngtZi8yKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1oKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsKSxpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLngtcy53aWR0aC8yKSsiLCAiKyhlLnktZS5oZWlnaHQvMitlLnBhZGRpbmcvMykrIikiKTt2YXIgZD1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUud2lkdGg9ZC53aWR0aCxlLmhlaWdodD1kLmhlaWdodCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gY18oZSx0KX0sbn0scm91bmRlZFdpdGhUaXRsZTpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGUuY2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLHI9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPW4uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIiksYT1uLmFwcGVuZCgicmVjdCIpLG89aS5ub2RlKCkuYXBwZW5kQ2hpbGQoVWIoZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLHM9by5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBjPW8uY2hpbGRyZW5bMF0sdT1hdShvKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1zPW8uZ2V0QkJveCgpO3ZhciBsPTAqZS5wYWRkaW5nLGg9bC8yLGY9ZS53aWR0aDw9cy53aWR0aCtlLnBhZGRpbmc/cy53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHMud2lkdGgrMCplLnBhZGRpbmctZS53aWR0aCkvMjplLmRpZmY9LWUucGFkZGluZy8yLHIuYXR0cigiY2xhc3MiLCJvdXRlciIpLmF0dHIoIngiLGUueC1mLzItaCkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItaCkuYXR0cigid2lkdGgiLGYrbCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsKSxhLmF0dHIoImNsYXNzIiwiaW5uZXIiKS5hdHRyKCJ4IixlLngtZi8yLWgpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWgrcy5oZWlnaHQtMSkuYXR0cigid2lkdGgiLGYrbCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsLXMuaGVpZ2h0LTMpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1zLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yLWUucGFkZGluZy8zKyh6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpKSsiKSIpO3ZhciBkPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9ZC5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGNfKGUsdCl9LG59LG5vdGVHcm91cDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBjXyhlLHQpfSxufSxkaXZpZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuZGlmZj0tZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGNfKGUsdCl9LG59fSx2Xz17fSxiXz17fSxfXz17fSx4Xz1mdW5jdGlvbih0LGUpe3ZhciBuPVViKGUubGFiZWwsZS5sYWJlbFN0eWxlKSxyPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxpPXIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2kubm9kZSgpLmFwcGVuZENoaWxkKG4pO3ZhciBhLG89bi5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBzPW4uY2hpbGRyZW5bMF0sYz1hdShuKTtvPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYy5hdHRyKCJ3aWR0aCIsby53aWR0aCksYy5hdHRyKCJoZWlnaHQiLG8uaGVpZ2h0KX1pZihpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1vLndpZHRoLzIrIiwgIistby5oZWlnaHQvMisiKSIpLGJfW2UuaWRdPXIsZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuc3RhcnRMYWJlbExlZnQpe3ZhciB1PVViKGUuc3RhcnRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksaD1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPWgubm9kZSgpLmFwcGVuZENoaWxkKHUpO3ZhciBmPXUuZ2V0QkJveCgpO2guYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWYud2lkdGgvMisiLCAiKy1mLmhlaWdodC8yKyIpIiksX19bZS5pZF18fChfX1tlLmlkXT17fSksX19bZS5pZF0uc3RhcnRMZWZ0PWwsd18oYSxlLnN0YXJ0TGFiZWxMZWZ0KX1pZihlLnN0YXJ0TGFiZWxSaWdodCl7dmFyIGQ9VWIoZS5zdGFydExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSxwPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIikseT1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPXAubm9kZSgpLmFwcGVuZENoaWxkKGQpLHkubm9kZSgpLmFwcGVuZENoaWxkKGQpO3ZhciBnPWQuZ2V0QkJveCgpO3kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWcud2lkdGgvMisiLCAiKy1nLmhlaWdodC8yKyIpIiksX19bZS5pZF18fChfX1tlLmlkXT17fSksX19bZS5pZF0uc3RhcnRSaWdodD1wLHdfKGEsZS5zdGFydExhYmVsUmlnaHQpfWlmKGUuZW5kTGFiZWxMZWZ0KXt2YXIgbT1VYihlLmVuZExhYmVsTGVmdCxlLmxhYmVsU3R5bGUpLHY9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxiPXYuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2E9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQobSk7dmFyIF89bS5nZXRCQm94KCk7Yi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistXy53aWR0aC8yKyIsICIrLV8uaGVpZ2h0LzIrIikiKSx2Lm5vZGUoKS5hcHBlbmRDaGlsZChtKSxfX1tlLmlkXXx8KF9fW2UuaWRdPXt9KSxfX1tlLmlkXS5lbmRMZWZ0PXYsd18oYSxlLmVuZExhYmVsTGVmdCl9aWYoZS5lbmRMYWJlbFJpZ2h0KXt2YXIgeD1VYihlLmVuZExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSx3PXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksaz13Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPWsubm9kZSgpLmFwcGVuZENoaWxkKHgpO3ZhciBUPXguZ2V0QkJveCgpO2suYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVQud2lkdGgvMisiLCAiKy1ULmhlaWdodC8yKyIpIiksdy5ub2RlKCkuYXBwZW5kQ2hpbGQoeCksX19bZS5pZF18fChfX1tlLmlkXT17fSksX19bZS5pZF0uZW5kUmlnaHQ9dyx3XyhhLGUuZW5kTGFiZWxSaWdodCl9fTtmdW5jdGlvbiB3Xyh0LGUpe0p2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPTkqZS5sZW5ndGgrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfXZhciBrXz1mdW5jdGlvbih0LGUpe28uaW5mbygiTW92aW5nIGxhYmVsIGFiYzc4ICIsdC5pZCx0LmxhYmVsLGJfW3QuaWRdKTt2YXIgbj1lLnVwZGF0ZWRQYXRoP2UudXBkYXRlZFBhdGg6ZS5vcmlnaW5hbFBhdGg7aWYodC5sYWJlbCl7dmFyIHI9Yl9bdC5pZF0saT10LngsYT10Lnk7aWYobil7dmFyIHM9SHYuY2FsY0xhYmVsUG9zaXRpb24obik7by5pbmZvKCJNb3ZpbmcgbGFiZWwgZnJvbSAoIixpLCIsIixhLCIpIHRvICgiLHMueCwiLCIscy55LCIpIGFiYzc4Iil9ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsICIrYSsiKSIpfWlmKHQuc3RhcnRMYWJlbExlZnQpe3ZhciBjPV9fW3QuaWRdLnN0YXJ0TGVmdCx1PXQueCxsPXQueTtpZihuKXt2YXIgaD1Idi5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIsbik7dT1oLngsbD1oLnl9Yy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1KyIsICIrbCsiKSIpfWlmKHQuc3RhcnRMYWJlbFJpZ2h0KXt2YXIgZj1fX1t0LmlkXS5zdGFydFJpZ2h0LGQ9dC54LHA9dC55O2lmKG4pe3ZhciB5PUh2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9yaWdodCIsbik7ZD15LngscD15Lnl9Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkKyIsICIrcCsiKSIpfWlmKHQuZW5kTGFiZWxMZWZ0KXt2YXIgZz1fX1t0LmlkXS5lbmRMZWZ0LG09dC54LHY9dC55O2lmKG4pe3ZhciBiPUh2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLG4pO209Yi54LHY9Yi55fWcuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbSsiLCAiK3YrIikiKX1pZih0LmVuZExhYmVsUmlnaHQpe3ZhciBfPV9fW3QuaWRdLmVuZFJpZ2h0LHg9dC54LHc9dC55O2lmKG4pe3ZhciBrPUh2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixuKTt4PWsueCx3PWsueX1fLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3grIiwgIit3KyIpIil9fSxUXz1mdW5jdGlvbih0LGUpe28ud2FybigiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0Iix0LGUpO3ZhciBuPVtdLHI9dFswXSxpPSExO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKG8uaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLHQsZSksZnVuY3Rpb24odCxlKXt2YXIgbj10Lngscj10LnksaT1NYXRoLmFicyhlLngtbiksYT1NYXRoLmFicyhlLnktciksbz10LndpZHRoLzIscz10LmhlaWdodC8yO3JldHVybiBpPj1vfHxhPj1zfShlLHQpfHxpKW8ud2FybigiYWJjODggb3V0c2lkZSIsdCxyKSxyPXQsaXx8bi5wdXNoKHQpO2Vsc2V7dmFyIGE9ZnVuY3Rpb24odCxlLG4pe28ud2FybigiaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6XG4gIG91dHNpZGVQb2ludDogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZSksIlxuICBpbnNpZGVQb2ludCA6ICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShuKSwiXG4gIG5vZGUgICAgICAgIDogeDoiKS5jb25jYXQodC54LCIgeToiKS5jb25jYXQodC55LCIgdzoiKS5jb25jYXQodC53aWR0aCwiIGg6IikuY29uY2F0KHQuaGVpZ2h0KSk7dmFyIHI9dC54LGk9dC55LGE9TWF0aC5hYnMoci1uLngpLHM9dC53aWR0aC8yLGM9bi54PGUueD9zLWE6cythLHU9dC5oZWlnaHQvMixsPU1hdGguYWJzKGUueS1uLnkpLGg9TWF0aC5hYnMoZS54LW4ueCk7aWYoTWF0aC5hYnMoaS1lLnkpKnM+TWF0aC5hYnMoci1lLngpKnUpe3ZhciBmPW4ueTxlLnk/ZS55LXUtaTppLXUtZS55O2M9aCpmL2w7dmFyIGQ9e3g6bi54PGUueD9uLngrYzpuLngtaCtjLHk6bi55PGUueT9uLnkrbC1mOm4ueS1sK2Z9O3JldHVybiAwPT09YyYmKGQueD1lLngsZC55PWUueSksMD09PWgmJihkLng9ZS54KSwwPT09bCYmKGQueT1lLnkpLG8ud2FybigiYWJjODkgdG9wcC9ib3R0IGNhbGMsIFEgIi5jb25jYXQobCwiLCBxICIpLmNvbmNhdChmLCIsIFIgIikuY29uY2F0KGgsIiwgciAiKS5jb25jYXQoYyksZCksZH12YXIgcD1sKihjPW4ueDxlLng/ZS54LXMtcjpyLXMtZS54KS9oLHk9bi54PGUueD9uLngraC1jOm4ueC1oK2MsZz1uLnk8ZS55P24ueStwOm4ueS1wO3JldHVybiBvLndhcm4oInNpZGVzIGNhbGMgYWJjODksIFEgIi5jb25jYXQobCwiLCBxICIpLmNvbmNhdChwLCIsIFIgIikuY29uY2F0KGgsIiwgciAiKS5jb25jYXQoYykse194OnksX3k6Z30pLDA9PT1jJiYoeT1lLngsZz1lLnkpLDA9PT1oJiYoeT1lLngpLDA9PT1sJiYoZz1lLnkpLHt4OnkseTpnfX0oZSxyLHQpO28ud2FybigiYWJjODggaW5zaWRlIix0LHIsYSksby53YXJuKCJhYmM4OCBpbnRlcnNlY3Rpb24iLGEpO3ZhciBzPSExO24uZm9yRWFjaCgoZnVuY3Rpb24odCl7cz1zfHx0Lng9PT1hLngmJnQueT09PWEueX0pKSxuLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng9PT1hLngmJnQueT09PWEueX0pKT9vLndhcm4oImFiYzg4IG5vIGludGVyc2VjdCIsYSxuKTpuLnB1c2goYSksaT0hMH19KSksby53YXJuKCJhYmM4OCByZXR1cm5pbmcgcG9pbnRzIixuKSxufSxFXz1mdW5jdGlvbiB0KGUsbixyLGkpe28uaW5mbygiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjogWFhYIix3YigpLmpzb24ud3JpdGUobiksaSk7dmFyIGE9bi5ncmFwaCgpLnJhbmtkaXI7by50cmFjZSgiRGlyIGluIHJlY3Vyc2l2ZSByZW5kZXIgLSBkaXI6IixhKTt2YXIgcz1lLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwicm9vdCIpO24ubm9kZXMoKT9vLmluZm8oIlJlY3Vyc2l2ZSByZW5kZXIgWFhYIixuLm5vZGVzKCkpOm8uaW5mbygiTm8gbm9kZXMgZm91bmQgZm9yIixuKSxuLmVkZ2VzKCkubGVuZ3RoPjAmJm8udHJhY2UoIlJlY3Vyc2l2ZSBlZGdlcyIsbi5lZGdlKG4uZWRnZXMoKVswXSkpO3ZhciBjPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVycyIpLHU9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRocyIpLGw9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKSxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpO24ubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcz1uLm5vZGUoZSk7aWYodm9pZCAwIT09aSl7dmFyIGM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpLmNsdXN0ZXJEYXRhKSk7by5pbmZvKCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYICgiLGUsIikgIixjLGkpLG4uc2V0Tm9kZShpLmlkLGMpLG4ucGFyZW50KGUpfHwoby50cmFjZSgiU2V0dGluZyBwYXJlbnQiLGUsaS5pZCksbi5zZXRQYXJlbnQoZSxpLmlkLGMpKX1pZihvLmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIitlKyI6ICIrSlNPTi5zdHJpbmdpZnkobi5ub2RlKGUpKSkscyYmcy5jbHVzdGVyTm9kZSl7by5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQiLGUscy53aWR0aCxuLm5vZGUoZSkpO3ZhciB1PXQoaCxzLmdyYXBoLHIsbi5ub2RlKGUpKSxsPXUuZWxlbTtIYihzLGwpLHMuZGlmZj11LmRpZmZ8fDAsby5pbmZvKCJOb2RlIGJvdW5kcyAoYWJjMTIzKSIsZSxzLHMud2lkdGgscy54LHMueSksZnVuY3Rpb24odCxlKXt5X1tlLmlkXT10fShsLHMpLG8ud2FybigiUmVjdXJzaXZlIHJlbmRlciBjb21wbGV0ZSAiLGwscyl9ZWxzZSBuLmNoaWxkcmVuKGUpLmxlbmd0aD4wPyhvLmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsZSxzLmlkLHMsbiksby5pbmZvKEtiKHMuaWQsbikpLFdiW3MuaWRdPXtpZDpLYihzLmlkLG4pLG5vZGU6c30pOihvLmluZm8oIk5vZGUgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIixlLHMuaWQscyksZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7ZS5saW5rPyhyPXQuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixlLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxpPXBfW2Uuc2hhcGVdKHIsZSxuKSk6cj1pPXBfW2Uuc2hhcGVdKHQsZSxuKSxlLnRvb2x0aXAmJmkuYXR0cigidGl0bGUiLGUudG9vbHRpcCksZS5jbGFzcyYmaS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2UuY2xhc3MpLHlfW2UuaWRdPXIsZS5oYXZlQ2FsbGJhY2smJnlfW2UuaWRdLmF0dHIoImNsYXNzIix5X1tlLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIil9KGgsbi5ub2RlKGUpLGEpKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5lZGdlKHQudix0LncsdC5uYW1lKTtvLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxvLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiLHQsIiAiLEpTT04uc3RyaW5naWZ5KG4uZWRnZSh0KSkpLG8uaW5mbygiRml4IixXYiwiaWRzOiIsdC52LHQudywiVHJhbnNsYXRlaW5nOiAiLFdiW3Qudl0sV2JbdC53XSkseF8obCxlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSl9KSksby5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxvLmluZm8oIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjIyIpLG8uaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksby5pbmZvKG4pLF9iKCkubGF5b3V0KG4pLG8uaW5mbygiR3JhcGggYWZ0ZXIgbGF5b3V0OiIsd2IoKS5qc29uLndyaXRlKG4pKTt2YXIgZj0wO3JldHVybiByXyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLm5vZGUodCk7by5pbmZvKCJQb3NpdGlvbiAiK3QrIjogIitKU09OLnN0cmluZ2lmeShuLm5vZGUodCkpKSxvLmluZm8oIlBvc2l0aW9uICIrdCsiOiAoIitlLngsIiwiK2UueSwiKSB3aWR0aDogIixlLndpZHRoLCIgaGVpZ2h0OiAiLGUuaGVpZ2h0KSxlJiZlLmNsdXN0ZXJOb2RlP2dfKGUpOm4uY2hpbGRyZW4odCkubGVuZ3RoPjA/KGZ1bmN0aW9uKHQsZSl7by50cmFjZSgiSW5zZXJ0aW5nIGNsdXN0ZXIiKTt2YXIgbj1lLnNoYXBlfHwicmVjdCI7dl9bZS5pZF09bV9bbl0odCxlKX0oYyxlKSxXYltlLmlkXS5ub2RlPWUpOmdfKGUpfSkpLG4uZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLmVkZ2UodCk7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeShlKSxlKTt2YXIgaT1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIHM9bi5wb2ludHMsYz0hMSx1PWEubm9kZShlLnYpLGw9YS5ub2RlKGUudyk7by5pbmZvKCJhYmM4OCBJbnNlcnRFZGdlOiAiLG4pLGwuaW50ZXJzZWN0JiZ1LmludGVyc2VjdCYmKChzPXMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSkpLnVuc2hpZnQodS5pbnRlcnNlY3Qoc1swXSkpLG8uaW5mbygiTGFzdCBwb2ludCIsc1tzLmxlbmd0aC0xXSxsLGwuaW50ZXJzZWN0KHNbcy5sZW5ndGgtMV0pKSxzLnB1c2gobC5pbnRlcnNlY3Qoc1tzLmxlbmd0aC0xXSkpKSxuLnRvQ2x1c3RlciYmKG8uaW5mbygidG8gY2x1c3RlciBhYmM4OCIscltuLnRvQ2x1c3Rlcl0pLHM9VF8obi5wb2ludHMscltuLnRvQ2x1c3Rlcl0ubm9kZSksYz0hMCksbi5mcm9tQ2x1c3RlciYmKG8uaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixyW24uZnJvbUNsdXN0ZXJdKSxzPVRfKHMucmV2ZXJzZSgpLHJbbi5mcm9tQ2x1c3Rlcl0ubm9kZSkucmV2ZXJzZSgpLGM9ITApO3ZhciBoLGY9cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTtoPSgiZ3JhcGgiPT09aXx8ImZsb3djaGFydCI9PT1pKSYmbi5jdXJ2ZXx8VnU7dmFyIGQscD16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShoKTtzd2l0Y2gobi50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjpkPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwiO2JyZWFrO2Nhc2UidGhpY2siOmQ9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0OmQ9IiJ9c3dpdGNoKG4ucGF0dGVybil7Y2FzZSJzb2xpZCI6ZCs9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpkKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjpkKz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQifXZhciB5PXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscChmKSkuYXR0cigiaWQiLG4uaWQpLmF0dHIoImNsYXNzIiwiICIrZCsobi5jbGFzc2VzPyIgIituLmNsYXNzZXM6IiIpKS5hdHRyKCJzdHlsZSIsbi5zdHlsZSksZz0iIjtzd2l0Y2goSnYoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYoZz0oZz0oZz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxvLmluZm8oImFycm93VHlwZVN0YXJ0IixuLmFycm93VHlwZVN0YXJ0KSxvLmluZm8oImFycm93VHlwZUVuZCIsbi5hcnJvd1R5cGVFbmQpLG4uYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWNyb3NzU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItcG9pbnRTdGFydCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItY2lyY2xlU3RhcnQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItYWdncmVnYXRpb25TdGFydCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItY29tcG9zaXRpb25TdGFydCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWRlcGVuZGVuY3lTdGFydCkiKX1zd2l0Y2gobi5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2crIiMiK2krIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50Ijp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2crIiMiK2krIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWRlcGVuZGVuY3lFbmQpIil9dmFyIG09e307cmV0dXJuIGMmJihtLnVwZGF0ZWRQYXRoPXMpLG0ub3JpZ2luYWxQYXRoPW4ucG9pbnRzLG19KHUsdCxlLFdiLHIsbik7a18oZSxpKX0pKSxuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5ub2RlKHQpO28uaW5mbyh0LGUudHlwZSxlLmRpZmYpLCJncm91cCI9PT1lLnR5cGUmJihmPWUuZGlmZil9KSkse2VsZW06cyxkaWZmOmZ9fSxDXz1mdW5jdGlvbih0LGUsbixyLGkpe1liKHQsbixyLGkpLHlfPXt9LGJfPXt9LF9fPXt9LHZfPXt9LFZiPXt9LEdiPXt9LFdiPXt9LG8ud2FybigiR3JhcGggYXQgZmlyc3Q6Iix3YigpLmpzb24ud3JpdGUoZSkpLHRfKGUpLG8ud2FybigiR3JhcGggYWZ0ZXI6Iix3YigpLmpzb24ud3JpdGUoZSkpLEVfKHQsZSxyKX07a2IucGFyc2VyLnl5PXZiO3ZhciBTXz17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMH07ZnVuY3Rpb24gQV8odCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UgMDplPSJhZ2dyZWdhdGlvbiI7YnJlYWs7Y2FzZSAxOmU9ImV4dGVuc2lvbiI7YnJlYWs7Y2FzZSAyOmU9ImNvbXBvc2l0aW9uIjticmVhaztjYXNlIDM6ZT0iZGVwZW5kZW5jeSI7YnJlYWs7ZGVmYXVsdDplPSJub25lIn1yZXR1cm4gZX12YXIgTV89e30sTl89W10sRF89IiIsT189ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PU1fW3RdJiYoTV9bdF09e2F0dHJpYnV0ZXM6W119LG8uaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6Iix0KSksTV9bdF19O2NvbnN0IEJfPXtDYXJkaW5hbGl0eTp7WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUifSxJZGVudGlmaWNhdGlvbjp7Tk9OX0lERU5USUZZSU5HOiJOT05fSURFTlRJRllJTkciLElERU5USUZZSU5HOiJJREVOVElGWUlORyJ9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXtzQy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIEp2KCkuZXJ9LGFkZEVudGl0eTpPXyxhZGRBdHRyaWJ1dGVzOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1PXyh0KTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKXIuYXR0cmlidXRlcy5wdXNoKGVbbl0pLG8uZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGVbbl0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIE1ffSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9e2VudGl0eUE6dCxyb2xlQTplLGVudGl0eUI6bixyZWxTcGVjOnJ9O05fLnB1c2goaSksby5kZWJ1ZygiQWRkZWQgbmV3IHJlbGF0aW9uc2hpcCA6IixpKX0sZ2V0UmVsYXRpb25zaGlwczpmdW5jdGlvbigpe3JldHVybiBOX30sY2xlYXI6ZnVuY3Rpb24oKXtNXz17fSxOXz1bXSxEXz0iIn0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7RF89dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gRF99fTt2YXIgTF89big1ODkwKSxJXz1uLm4oTF8pLFJfPXtPTkxZX09ORV9TVEFSVDoiT05MWV9PTkVfU1RBUlQiLE9OTFlfT05FX0VORDoiT05MWV9PTkVfRU5EIixaRVJPX09SX09ORV9TVEFSVDoiWkVST19PUl9PTkVfU1RBUlQiLFpFUk9fT1JfT05FX0VORDoiWkVST19PUl9PTkVfRU5EIixPTkVfT1JfTU9SRV9TVEFSVDoiT05FX09SX01PUkVfU1RBUlQiLE9ORV9PUl9NT1JFX0VORDoiT05FX09SX01PUkVfRU5EIixaRVJPX09SX01PUkVfU1RBUlQ6IlpFUk9fT1JfTU9SRV9TVEFSVCIsWkVST19PUl9NT1JFX0VORDoiWkVST19PUl9NT1JFX0VORCJ9O2NvbnN0IEZfPVJfO3ZhciBQXz17fSxqXz1mdW5jdGlvbih0KXtyZXR1cm4odC5lbnRpdHlBK3Qucm9sZUErdC5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sWV89MDtjb25zdCB6Xz1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKVBfW2Vbbl1dPXRbZVtuXV19LFVfPWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKSxCXy5jbGVhcigpO3ZhciBuPUlfKCkucGFyc2VyO24ueXk9Ql87dHJ5e24ucGFyc2UodCl9Y2F0Y2godCl7by5kZWJ1ZygiUGFyc2luZyBmYWlsZWQiKX12YXIgcixpPWF1KCJbaWQ9JyIuY29uY2F0KGUsIiddIikpOyhmdW5jdGlvbih0LGUpe3ZhciBuO3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsUl8uT05MWV9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTggTTE1LDAgTDE1LDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSXy5PTkxZX09ORV9FTkQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJfLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsMjEpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJfLlpFUk9fT1JfT05FX0VORCkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMCBMMjEsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJfLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSXy5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDI3KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsUl8uWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFExOCwwIDM2LDE4IFExOCwzNiAwLDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSXy5aRVJPX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwzOSkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSkoaSxQXykscj1uZXcod2IoKS5HcmFwaCkoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpQXy5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTt2YXIgYT1mdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBhPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGkpO3I9dm9pZCAwPT09cj9pOnI7dmFyIG89ImVudGl0eS0iK2kscz1hLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsbykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrSnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitQXy5mb250U2l6ZSsicHgiKS50ZXh0KGkpLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVBfLmVudGl0eVBhZGRpbmcvMyxpPVBfLmVudGl0eVBhZGRpbmcvMyxhPS44NSpQXy5mb250U2l6ZSxvPWUubm9kZSgpLmdldEJCb3goKSxzPVtdLGM9ITEsdT0hMSxsPTAsaD0wLGY9MCxkPTAscD1vLmhlaWdodCsyKnIseT0xO24uZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dC5hdHRyaWJ1dGVLZXlUeXBlJiYoYz0hMCksdm9pZCAwIT09dC5hdHRyaWJ1dGVDb21tZW50JiYodT0hMCl9KSksbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT0iIi5jb25jYXQoZS5ub2RlKCkuaWQsIi1hdHRyLSIpLmNvbmNhdCh5KSxvPTAsZz10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi10eXBlIikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitKdigpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZVR5cGUpLG09dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItbmFtZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrSnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVOYW1lKSx2PXt9O3YudG49Zyx2Lm5uPW07dmFyIGI9Zy5ub2RlKCkuZ2V0QkJveCgpLF89bS5ub2RlKCkuZ2V0QkJveCgpO2lmKGw9TWF0aC5tYXgobCxiLndpZHRoKSxoPU1hdGgubWF4KGgsXy53aWR0aCksbz1NYXRoLm1heChiLmhlaWdodCxfLmhlaWdodCksYyl7dmFyIHg9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCIta2V5IikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitKdigpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZUtleVR5cGV8fCIiKTt2LmtuPXg7dmFyIHc9eC5ub2RlKCkuZ2V0QkJveCgpO2Y9TWF0aC5tYXgoZix3LndpZHRoKSxvPU1hdGgubWF4KG8sdy5oZWlnaHQpfWlmKHUpe3ZhciBrPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlMYWJlbCIpLmF0dHIoImlkIiwiIi5jb25jYXQoaSwiLWNvbW1lbnQiKSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK0p2KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrYSsicHgiKS50ZXh0KG4uYXR0cmlidXRlQ29tbWVudHx8IiIpO3YuY249azt2YXIgVD1rLm5vZGUoKS5nZXRCQm94KCk7ZD1NYXRoLm1heChkLFQud2lkdGgpLG89TWF0aC5tYXgobyxULmhlaWdodCl9di5oZWlnaHQ9byxzLnB1c2godikscCs9bysyKnIseSs9MX0pKTt2YXIgZz00O2MmJihnKz0yKSx1JiYoZys9Mik7dmFyIG09bCtoK2YrZCx2PXt3aWR0aDpNYXRoLm1heChQXy5taW5FbnRpdHlXaWR0aCxNYXRoLm1heChvLndpZHRoKzIqUF8uZW50aXR5UGFkZGluZyxtK2kqZykpLGhlaWdodDpuLmxlbmd0aD4wP3A6TWF0aC5tYXgoUF8ubWluRW50aXR5SGVpZ2h0LG8uaGVpZ2h0KzIqUF8uZW50aXR5UGFkZGluZyl9O2lmKG4ubGVuZ3RoPjApe3ZhciBiPU1hdGgubWF4KDAsKHYud2lkdGgtbS1pKmcpLyhnLzIpKTtlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Yud2lkdGgvMisiLCIrKHIrby5oZWlnaHQvMikrIikiKTt2YXIgXz1vLmhlaWdodCsyKnIseD0iYXR0cmlidXRlQm94T2RkIjtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPV8rcitlLmhlaWdodC8yO2UudG4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciBhPXQuaW5zZXJ0KCJyZWN0IiwiIyIrZS50bi5ub2RlKCkuaWQpLmF0dHIoImNsYXNzIiwiZXIgIi5jb25jYXQoeCkpLmF0dHIoImZpbGwiLFBfLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLFBfLnN0cm9rZSkuYXR0cigieCIsMCkuYXR0cigieSIsXykuYXR0cigid2lkdGgiLGwrMippK2IpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQrMipyKSxvPXBhcnNlRmxvYXQoYS5hdHRyKCJ4IikpK3BhcnNlRmxvYXQoYS5hdHRyKCJ3aWR0aCIpKTtlLm5uLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhvK2kpKyIsIituKyIpIik7dmFyIHM9dC5pbnNlcnQoInJlY3QiLCIjIitlLm5uLm5vZGUoKS5pZCkuYXR0cigiY2xhc3MiLCJlciAiLmNvbmNhdCh4KSkuYXR0cigiZmlsbCIsUF8uZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsUF8uc3Ryb2tlKS5hdHRyKCJ4IixvKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsaCsyKmkrYikuYXR0cigiaGVpZ2h0IixlLmhlaWdodCsyKnIpLHA9cGFyc2VGbG9hdChzLmF0dHIoIngiKSkrcGFyc2VGbG9hdChzLmF0dHIoIndpZHRoIikpO2lmKGMpe2Uua24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHAraSkrIiwiK24rIikiKTt2YXIgeT10Lmluc2VydCgicmVjdCIsIiMiK2Uua24ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KHgpKS5hdHRyKCJmaWxsIixQXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixQXy5zdHJva2UpLmF0dHIoIngiLHApLmF0dHIoInkiLF8pLmF0dHIoIndpZHRoIixmKzIqaStiKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KzIqcik7cD1wYXJzZUZsb2F0KHkuYXR0cigieCIpKStwYXJzZUZsb2F0KHkuYXR0cigid2lkdGgiKSl9dSYmKGUuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHAraSkrIiwiK24rIikiKSx0Lmluc2VydCgicmVjdCIsIiMiK2UuY24ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KHgpKS5hdHRyKCJmaWxsIixQXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixQXy5zdHJva2UpLmF0dHIoIngiLHApLmF0dHIoInkiLF8pLmF0dHIoIndpZHRoIixkKzIqaStiKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KzIqcikpLF8rPWUuaGVpZ2h0KzIqcix4PSJhdHRyaWJ1dGVCb3hPZGQiPT14PyJhdHRyaWJ1dGVCb3hFdmVuIjoiYXR0cmlidXRlQm94T2RkIn0pKX1lbHNlIHYuaGVpZ2h0PU1hdGgubWF4KFBfLm1pbkVudGl0eUhlaWdodCxwKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Yud2lkdGgvMisiLCIrdi5oZWlnaHQvMisiKSIpO3JldHVybiB2fShhLHMsZVtpXS5hdHRyaWJ1dGVzKSx1PWMud2lkdGgsbD1jLmhlaWdodCxoPWEuaW5zZXJ0KCJyZWN0IiwiIyIrbykuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlCb3giKS5hdHRyKCJmaWxsIixQXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixQXy5zdHJva2UpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGwpLm5vZGUoKS5nZXRCQm94KCk7bi5zZXROb2RlKGkse3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDppfSl9KSkscn0oaSxCXy5nZXRFbnRpdGllcygpLHIpLHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnNldEVkZ2UodC5lbnRpdHlBLHQuZW50aXR5Qix7cmVsYXRpb25zaGlwOnR9LGpfKHQpKX0pKSx0fShCXy5nZXRSZWxhdGlvbnNoaXBzKCkscik7X2IoKS5sYXlvdXQociksZnVuY3Rpb24odCxlKXtlLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dm9pZCAwIT09biYmdm9pZCAwIT09ZS5ub2RlKG4pJiZ0LnNlbGVjdCgiIyIrbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUubm9kZShuKS54LWUubm9kZShuKS53aWR0aC8yKSsiLCIrKGUubm9kZShuKS55LWUubm9kZShuKS5oZWlnaHQvMikrIiApIil9KSl9KGkscikscy5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4scil7WV8rKzt2YXIgaT1uLmVkZ2UoZS5lbnRpdHlBLGUuZW50aXR5QixqXyhlKSksYT16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShWdSksbz10Lmluc2VydCgicGF0aCIsIiMiK3IpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGEoaS5wb2ludHMpKS5hdHRyKCJzdHJva2UiLFBfLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKTtlLnJlbFNwZWMucmVsVHlwZT09PUJfLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORyYmby5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiOCw4Iik7dmFyIHM9IiI7c3dpdGNoKFBfLmFycm93TWFya2VyQWJzb2x1dGUmJihzPShzPShzPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGUucmVsU3BlYy5jYXJkQSl7Y2FzZSBCXy5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitGXy5aRVJPX09SX09ORV9FTkQrIikiKTticmVhaztjYXNlIEJfLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitGXy5aRVJPX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBCXy5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitGXy5PTkVfT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIEJfLkNhcmRpbmFsaXR5Lk9OTFlfT05FOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK0ZfLk9OTFlfT05FX0VORCsiKSIpfXN3aXRjaChlLnJlbFNwZWMuY2FyZEIpe2Nhc2UgQl8uQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitGXy5aRVJPX09SX09ORV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgQl8uQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrRl8uWkVST19PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBCXy5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK0ZfLk9ORV9PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBCXy5DYXJkaW5hbGl0eS5PTkxZX09ORTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK0ZfLk9OTFlfT05FX1NUQVJUKyIpIil9dmFyIGM9by5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSx1PW8ubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoLjUqYyksbD0icmVsIitZXyxoPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixsKS5hdHRyKCJ4Iix1LngpLmF0dHIoInkiLHUueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrSnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitQXy5mb250U2l6ZSsicHgiKS50ZXh0KGUucm9sZUEpLm5vZGUoKS5nZXRCQm94KCk7dC5pbnNlcnQoInJlY3QiLCIjIitsKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExhYmVsQm94IikuYXR0cigieCIsdS54LWgud2lkdGgvMikuYXR0cigieSIsdS55LWguaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixoLndpZHRoKS5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0oaSx0LHIsYSl9KSk7dmFyIGM9UF8uZGlhZ3JhbVBhZGRpbmcsdT1pLm5vZGUoKS5nZXRCQm94KCksbD11LndpZHRoKzIqYyxoPXUuaGVpZ2h0KzIqYzt6dihpLGgsbCxQXy51c2VNYXhXaWR0aCksaS5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQodS54LWMsIiAiKS5jb25jYXQodS55LWMsIiAiKS5jb25jYXQobCwiICIpLmNvbmNhdChoKSl9O2Z1bmN0aW9uIHFfKHQpe3JldHVybiBxXz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scV8odCl9ZnVuY3Rpb24gSF8odCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgJF8sV18sVl89ImZsb3djaGFydC0iLEdfPTAsWF89SnYoKSxaXz17fSxRXz1bXSxLXz1bXSxKXz1bXSx0eD17fSxleD17fSxueD0wLHJ4PSEwLGl4PVtdLGF4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyhaXyksbj0wO248ZS5sZW5ndGg7bisrKWlmKFpfW2Vbbl1dLmlkPT09dClyZXR1cm4gWl9bZVtuXV0uZG9tSWQ7cmV0dXJuIHR9LG94PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXtzdGFydDp0LGVuZDplLHR5cGU6dm9pZCAwLHRleHQ6IiJ9O3ZvaWQgMCE9PShyPW4udGV4dCkmJihpLnRleHQ9VW0uc2FuaXRpemVUZXh0KHIudHJpbSgpLFhfKSwnIic9PT1pLnRleHRbMF0mJiciJz09PWkudGV4dFtpLnRleHQubGVuZ3RoLTFdJiYoaS50ZXh0PWkudGV4dC5zdWJzdHJpbmcoMSxpLnRleHQubGVuZ3RoLTEpKSksdm9pZCAwIT09biYmKGkudHlwZT1uLnR5cGUsaS5zdHJva2U9bi5zdHJva2UsaS5sZW5ndGg9bi5sZW5ndGgpLFFfLnB1c2goaSl9LHN4PWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dm9pZCAwIT09Wl9bbl0mJlpfW25dLmNsYXNzZXMucHVzaChlKSx2b2lkIDAhPT10eFtuXSYmdHhbbl0uY2xhc3Nlcy5wdXNoKGUpfSkpfSxjeD1mdW5jdGlvbih0KXt2YXIgZT1hdSgiLm1lcm1haWRUb29sdGlwIik7bnVsbD09PShlLl9ncm91cHN8fGUpWzBdWzBdJiYoZT1hdSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksYXUodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PWF1KHRoaXMpO2lmKG51bGwhPT10LmF0dHIoInRpdGxlIikpe3ZhciBuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksZS5odG1sKHQuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK24ubGVmdCsobi5yaWdodC1uLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrbi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksdC5jbGFzc2VkKCJob3ZlciIsITApfX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLGF1KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O2l4LnB1c2goY3gpO3ZhciB1eD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPEpfLmxlbmd0aDtlKyspaWYoSl9bZV0uaWQ9PT10KXJldHVybiBlO3JldHVybi0xfSxseD0tMSxoeD1bXSxmeD1mdW5jdGlvbiB0KGUsbil7dmFyIHI9Sl9bbl0ubm9kZXM7aWYoISgobHgrPTEpPjJlMykpe2lmKGh4W2x4XT1uLEpfW25dLmlkPT09ZSlyZXR1cm57cmVzdWx0OiEwLGNvdW50OjB9O2Zvcih2YXIgaT0wLGE9MTtpPHIubGVuZ3RoOyl7dmFyIG89dXgocltpXSk7aWYobz49MCl7dmFyIHM9dChlLG8pO2lmKHMucmVzdWx0KXJldHVybntyZXN1bHQ6ITAsY291bnQ6YStzLmNvdW50fTthKz1zLmNvdW50fWkrPTF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDphfX19LGR4PWZ1bmN0aW9uKHQsZSl7dmFyIG49ITE7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ub2Rlcy5pbmRleE9mKGUpPj0wJiYobj0hMCl9KSksbn0scHg9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyZXR1cm4gdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihyLGkpe2R4KGUscil8fG4ucHVzaCh0Lm5vZGVzW2ldKX0pKSx7bm9kZXM6bn19O2NvbnN0IHl4PXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7c0MucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGRlZmF1bHRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gVnYuZmxvd2NoYXJ0fSxhZGRWZXJ0ZXg6ZnVuY3Rpb24odCxlLG4scixpLGEpe3ZhciBvLHM9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOnt9LGM9dDt2b2lkIDAhPT1jJiYwIT09Yy50cmltKCkubGVuZ3RoJiYodm9pZCAwPT09Wl9bY10mJihaX1tjXT17aWQ6Yyxkb21JZDpWXytjKyItIitHXyxzdHlsZXM6W10sY2xhc3NlczpbXX0pLEdfKyssdm9pZCAwIT09ZT8oWF89SnYoKSwnIic9PT0obz1VbS5zYW5pdGl6ZVRleHQoZS50cmltKCksWF8pKVswXSYmJyInPT09b1tvLmxlbmd0aC0xXSYmKG89by5zdWJzdHJpbmcoMSxvLmxlbmd0aC0xKSksWl9bY10udGV4dD1vKTp2b2lkIDA9PT1aX1tjXS50ZXh0JiYoWl9bY10udGV4dD10KSx2b2lkIDAhPT1uJiYoWl9bY10udHlwZT1uKSxudWxsIT1yJiZyLmZvckVhY2goKGZ1bmN0aW9uKHQpe1pfW2NdLnN0eWxlcy5wdXNoKHQpfSkpLG51bGwhPWkmJmkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Wl9bY10uY2xhc3Nlcy5wdXNoKHQpfSkpLHZvaWQgMCE9PWEmJihaX1tjXS5kaXI9YSksWl9bY10ucHJvcHM9cyl9LGxvb2tVcERvbUlkOmF4LGFkZExpbms6ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxlLmxlbmd0aDthKyspb3godFtpXSxlW2FdLG4scil9LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImRlZmF1bHQiPT09dD9RXy5kZWZhdWx0SW50ZXJwb2xhdGU9ZTpRX1t0XS5pbnRlcnBvbGF0ZT1lfSkpfSx1cGRhdGVMaW5rOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P1FfLmRlZmF1bHRTdHlsZT1lOigtMT09PUh2LmlzU3Vic3RyaW5nSW5BcnJheSgiZmlsbCIsZSkmJmUucHVzaCgiZmlsbDpub25lIiksUV9bdF0uc3R5bGU9ZSl9KSl9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09S19bdF0mJihLX1t0XT17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLG51bGwhPWUmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5tYXRjaCgiY29sb3IiKSl7dmFyIG49ZS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIikucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7S19bdF0udGV4dFN0eWxlcy5wdXNoKG4pfUtfW3RdLnN0eWxlcy5wdXNoKGUpfSkpfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7KCRfPXQpLm1hdGNoKC8uKjwvKSYmKCRfPSJSTCIpLCRfLm1hdGNoKC8uKlxeLykmJigkXz0iQlQiKSwkXy5tYXRjaCgvLio+LykmJigkXz0iTFIiKSwkXy5tYXRjaCgvLip2LykmJigkXz0iVEIiKX0sc2V0Q2xhc3M6c3gsc2V0VG9vbHRpcDpmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoZXhbImdlbi0xIj09PVdfP2F4KHQpOnRdPVVtLnNhbml0aXplVGV4dChlLFhfKSl9KSl9LGdldFRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIGV4W3RdfSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1heCh0KTtpZigibG9vc2UiPT09SnYoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lKXt2YXIgaT1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2k9bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXS50cmltKCk7JyInPT09by5jaGFyQXQoMCkmJiciJz09PW8uY2hhckF0KG8ubGVuZ3RoLTEpJiYobz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpKSxpW2FdPW99fTA9PT1pLmxlbmd0aCYmaS5wdXNoKHQpLHZvaWQgMCE9PVpfW3RdJiYoWl9bdF0uaGF2ZUNhbGxiYWNrPSEwLGl4LnB1c2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdChyLCciXScpKTtudWxsIT09dCYmdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7dmFyIHQ7SHYucnVuRnVuYy5hcHBseShIdixbZV0uY29uY2F0KGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEhfKHQpfSh0PWkpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gSF8odCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9IXyh0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSl9KSwhMSl9KSkpfX0odCxlLG4pfSkpLHN4KHQsImNsaWNrYWJsZSIpfSxzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09Wl9bdF0mJihaX1t0XS5saW5rPUh2LmZvcm1hdFVybChlLFhfKSxaX1t0XS5saW5rVGFyZ2V0PW4pfSkpLHN4KHQsImNsaWNrYWJsZSIpfSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe2l4LmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiAkXy50cmltKCl9LGdldFZlcnRpY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIFpffSxnZXRFZGdlczpmdW5jdGlvbigpe3JldHVybiBRX30sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBLX30sY2xlYXI6ZnVuY3Rpb24odCl7Wl89e30sS189e30sUV89W10sKGl4PVtdKS5wdXNoKGN4KSxKXz1bXSx0eD17fSxueD0wLGV4PVtdLHJ4PSEwLFdfPXR8fCJnZW4tMSJ9LHNldEdlbjpmdW5jdGlvbih0KXtXXz10fHwiZ2VuLTEifSxkZWZhdWx0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifSxhZGRTdWJHcmFwaDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dC50cmltKCksaT1uO3Q9PT1uJiZuLm1hdGNoKC9ccy8pJiYocj12b2lkIDApO3ZhciBhPVtdLHM9ZnVuY3Rpb24odCl7dmFyIGUsbj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxyPVtdLGk9dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3ZhciBpPXFfKHQpO3JldHVybiB0LnN0bXQmJiJkaXIiPT09dC5zdG10PyhlPXQudmFsdWUsITEpOiIiIT09dC50cmltKCkmJihpIGluIG4/IW5baV0uaGFzT3duUHJvcGVydHkodCkmJihuW2ldW3RdPSEwKTohKHIuaW5kZXhPZih0KT49MCkmJnIucHVzaCh0KSl9KSk7cmV0dXJue25vZGVMaXN0OmksZGlyOmV9fShhLmNvbmNhdC5hcHBseShhLGUpKSxjPXMubm9kZUxpc3QsdT1zLmRpcjtpZihhPWMsImdlbi0xIj09PVdfKXtvLndhcm4oIkxPT0tJTkcgVVAiKTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylhW2xdPWF4KGFbbF0pfXI9cnx8InN1YkdyYXBoIitueCxpPWl8fCIiLGk9VW0uc2FuaXRpemVUZXh0KGksWF8pLG54Kz0xO3ZhciBoPXtpZDpyLG5vZGVzOmEsdGl0bGU6aS50cmltKCksY2xhc3NlczpbXSxkaXI6dX07cmV0dXJuIG8uaW5mbygiQWRkaW5nIixoLmlkLGgubm9kZXMsaC5kaXIpLGgubm9kZXM9cHgoaCxKXykubm9kZXMsSl8ucHVzaChoKSx0eFtyXT1oLHJ9LGdldERlcHRoRmlyc3RQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIGh4W3RdfSxpbmRleE5vZGVzOmZ1bmN0aW9uKCl7bHg9LTEsSl8ubGVuZ3RoPjAmJmZ4KCJub25lIixKXy5sZW5ndGgtMSl9LGdldFN1YkdyYXBoczpmdW5jdGlvbigpe3JldHVybiBKX30sZGVzdHJ1Y3RMaW5rOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPWUuc2xpY2UoMCwtMSkscj0iYXJyb3dfb3BlbiI7c3dpdGNoKGUuc2xpY2UoLTEpKXtjYXNlIngiOnI9ImFycm93X2Nyb3NzIiwieCI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6cj0iYXJyb3dfcG9pbnQiLCI8Ij09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpyPSJhcnJvd19jaXJjbGUiLCJvIj09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSl9dmFyIGk9Im5vcm1hbCIsYT1uLmxlbmd0aC0xOyI9Ij09PW5bMF0mJihpPSJ0aGljayIpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MCxpPTA7aTxuOysraSkiLiI9PT1lW2ldJiYrK3I7cmV0dXJuIHJ9KDAsbik7cmV0dXJuIG8mJihpPSJkb3R0ZWQiLGE9bykse3R5cGU6cixzdHJva2U6aSxsZW5ndGg6YX19KHQpO2lmKGUpe2lmKG49ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj0iYXJyb3dfb3BlbiI7c3dpdGNoKGVbMF0pe2Nhc2UiPCI6bj0iYXJyb3dfcG9pbnQiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIngiOm49ImFycm93X2Nyb3NzIixlPWUuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjpuPSJhcnJvd19jaXJjbGUiLGU9ZS5zbGljZSgxKX12YXIgcj0ibm9ybWFsIjtyZXR1cm4tMSE9PWUuaW5kZXhPZigiPSIpJiYocj0idGhpY2siKSwtMSE9PWUuaW5kZXhPZigiLiIpJiYocj0iZG90dGVkIikse3R5cGU6bixzdHJva2U6cn19KGUpLG4uc3Ryb2tlIT09ci5zdHJva2UpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O2lmKCJhcnJvd19vcGVuIj09PW4udHlwZSluLnR5cGU9ci50eXBlO2Vsc2V7aWYobi50eXBlIT09ci50eXBlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtuLnR5cGU9ImRvdWJsZV8iK24udHlwZX1yZXR1cm4iZG91YmxlX2Fycm93Ij09PW4udHlwZSYmKG4udHlwZT0iZG91YmxlX2Fycm93X3BvaW50Iiksbi5sZW5ndGg9ci5sZW5ndGgsbn1yZXR1cm4gcn0sbGV4OntmaXJzdEdyYXBoOmZ1bmN0aW9uKCl7cmV0dXJuISFyeCYmKHJ4PSExLCEwKX19LGV4aXN0czpkeCxtYWtlVW5pcTpweH07dmFyIGd4PW4oMzYwMiksbXg9bi5uKGd4KSx2eD1uKDQ5NDkpLGJ4PW4ubih2eCksX3g9big4Mjg0KSx4eD1uLm4oX3gpO2Z1bmN0aW9uIHd4KHQsZSxuKXt2YXIgcj0uOSooZS53aWR0aCtlLmhlaWdodCksaT1be3g6ci8yLHk6MH0se3g6cix5Oi1yLzJ9LHt4OnIvMix5Oi1yfSx7eDowLHk6LXIvMn1dLGE9QngodCxyLHIsaSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBieCgpLmludGVyc2VjdC5wb2x5Z29uKG4saSx0KX0sYX1mdW5jdGlvbiBreCh0LGUsbil7dmFyIHI9ZS5oZWlnaHQsaT1yLzQsYT1lLndpZHRoKzIqaSxvPVt7eDppLHk6MH0se3g6YS1pLHk6MH0se3g6YSx5Oi1yLzJ9LHt4OmEtaSx5Oi1yfSx7eDppLHk6LXJ9LHt4OjAseTotci8yfV0scz1CeCh0LGEscixvKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJ4KCkuaW50ZXJzZWN0LnBvbHlnb24obixvLHQpfSxzfWZ1bmN0aW9uIFR4KHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6LWkvMix5OjB9LHt4OnIseTowfSx7eDpyLHk6LWl9LHt4Oi1pLzIseTotaX0se3g6MCx5Oi1pLzJ9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gRXgodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotMippLzYseTowfSx7eDpyLWkvNix5OjB9LHt4OnIrMippLzYseTotaX0se3g6aS82LHk6LWl9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gQ3godCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDoyKmkvNix5OjB9LHt4OnIraS82LHk6MH0se3g6ci0yKmkvNix5Oi1pfSx7eDotaS82LHk6LWl9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gU3godCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotMippLzYseTowfSx7eDpyKzIqaS82LHk6MH0se3g6ci1pLzYseTotaX0se3g6aS82LHk6LWl9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gQXgodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDppLzYseTowfSx7eDpyLWkvNix5OjB9LHt4OnIrMippLzYseTotaX0se3g6LTIqaS82LHk6LWl9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gTXgodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDowLHk6MH0se3g6citpLzIseTowfSx7eDpyLHk6LWkvMn0se3g6citpLzIseTotaX0se3g6MCx5Oi1pfV0sbz1CeCh0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJ4KCkuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIE54KHQsZSxuKXt2YXIgcj1lLmhlaWdodCxpPWUud2lkdGgrci80LGE9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsci8yKS5hdHRyKCJyeSIsci8yKS5hdHRyKCJ4IiwtaS8yKS5hdHRyKCJ5Iiwtci8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJ4KCkuaW50ZXJzZWN0LnJlY3Qobix0KX0sYX1mdW5jdGlvbiBEeCh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjAseTowfSx7eDpyLHk6MH0se3g6cix5Oi1pfSx7eDowLHk6LWl9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OnIrOCx5OjB9LHt4OnIrOCx5Oi1pfSx7eDotOCx5Oi1pfSx7eDotOCx5OjB9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gT3godCxlLG4pe3ZhciByPWUud2lkdGgsaT1yLzIsYT1pLygyLjUrci81MCksbz1lLmhlaWdodCthLHM9Ik0gMCwiK2ErIiBhICIraSsiLCIrYSsiIDAsMCwwICIrcisiIDAgYSAiK2krIiwiK2ErIiAwLDAsMCAiKy1yKyIgMCBsIDAsIitvKyIgYSAiK2krIiwiK2ErIiAwLDAsMCAiK3IrIiAwIGwgMCwiKy1vLGM9dC5hdHRyKCJsYWJlbC1vZmZzZXQteSIsYSkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIscykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXIvMisiLCIrLShvLzIrYSkrIikiKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7dmFyIGU9YngoKS5pbnRlcnNlY3QucmVjdChuLHQpLHI9ZS54LW4ueDtpZigwIT1pJiYoTWF0aC5hYnMocik8bi53aWR0aC8yfHxNYXRoLmFicyhyKT09bi53aWR0aC8yJiZNYXRoLmFicyhlLnktbi55KT5uLmhlaWdodC8yLWEpKXt2YXIgbz1hKmEqKDEtcipyLyhpKmkpKTswIT1vJiYobz1NYXRoLnNxcnQobykpLG89YS1vLHQueS1uLnk+MCYmKG89LW8pLGUueSs9b31yZXR1cm4gZX0sY31mdW5jdGlvbiBCeCh0LGUsbixyKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIituLzIrIikiKX1jb25zdCBMeD1mdW5jdGlvbih0KXt0LnNoYXBlcygpLnF1ZXN0aW9uPXd4LHQuc2hhcGVzKCkuaGV4YWdvbj1reCx0LnNoYXBlcygpLnN0YWRpdW09TngsdC5zaGFwZXMoKS5zdWJyb3V0aW5lPUR4LHQuc2hhcGVzKCkuY3lsaW5kZXI9T3gsdC5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PVR4LHQuc2hhcGVzKCkubGVhbl9yaWdodD1FeCx0LnNoYXBlcygpLmxlYW5fbGVmdD1DeCx0LnNoYXBlcygpLnRyYXBlem9pZD1TeCx0LnNoYXBlcygpLmludl90cmFwZXpvaWQ9QXgsdC5zaGFwZXMoKS5yZWN0X3JpZ2h0X2ludl9hcnJvdz1NeH07dmFyIEl4PXt9O2NvbnN0IFJ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspSXhbZVtuXV09dFtlW25dXX0sRng9ZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IikseXguY2xlYXIoKSx5eC5zZXRHZW4oImdlbi0xIik7dmFyIG49bXgoKS5wYXJzZXI7bi55eT15eCxuLnBhcnNlKHQpO3ZhciByPXl4LmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJURCIpO2Zvcih2YXIgaSxhPUp2KCkuZmxvd2NoYXJ0LHM9YS5ub2RlU3BhY2luZ3x8NTAsYz1hLnJhbmtTcGFjaW5nfHw1MCx1PW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnIsbm9kZXNlcDpzLHJhbmtzZXA6YyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxsPXl4LmdldFN1YkdyYXBocygpLGg9bC5sZW5ndGgtMTtoPj0wO2gtLSlpPWxbaF0seXguYWRkVmVydGV4KGkuaWQsaS50aXRsZSwiZ3JvdXAiLHZvaWQgMCxpLmNsYXNzZXMpO3ZhciBmPXl4LmdldFZlcnRpY2VzKCk7by53YXJuKCJHZXQgdmVydGljZXMiLGYpO3ZhciBkPXl4LmdldEVkZ2VzKCkscD0wO2ZvcihwPWwubGVuZ3RoLTE7cD49MDtwLS0pe2k9bFtwXSxvdSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgeT0wO3k8aS5ub2Rlcy5sZW5ndGg7eSsrKW8ud2FybigiU2V0dGluZyBzdWJncmFwaCIsaS5ub2Rlc1t5XSx5eC5sb29rVXBEb21JZChpLm5vZGVzW3ldKSx5eC5sb29rVXBEb21JZChpLmlkKSksdS5zZXRQYXJlbnQoeXgubG9va1VwRG9tSWQoaS5ub2Rlc1t5XSkseXgubG9va1VwRG9tSWQoaS5pZCkpfShmdW5jdGlvbih0LGUsbil7dmFyIHI9YXUoJ1tpZD0iJy5jb25jYXQobiwnIl0nKSk7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9dFtuXSxhPSJkZWZhdWx0IjtpLmNsYXNzZXMubGVuZ3RoPjAmJihhPWkuY2xhc3Nlcy5qb2luKCIgIikpO3ZhciBzLGM9TnYoaS5zdHlsZXMpLHU9dm9pZCAwIT09aS50ZXh0P2kudGV4dDppLmlkO2lmKHptKEp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgbD17bGFiZWw6dS5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKX07KHM9eHgoKShyLGwpLm5vZGUoKSkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzKX1lbHNle3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aC5zZXRBdHRyaWJ1dGUoInN0eWxlIixjLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7Zm9yKHZhciBmPXUuc3BsaXQoVW0ubGluZUJyZWFrUmVnZXgpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7cC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxwLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxwLnNldEF0dHJpYnV0ZSgieCIsIjEiKSxwLnRleHRDb250ZW50PWZbZF0saC5hcHBlbmRDaGlsZChwKX1zPWh9dmFyIHk9MCxnPSIiO3N3aXRjaChpLnR5cGUpe2Nhc2Uicm91bmQiOnk9NSxnPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6Y2FzZSJncm91cCI6ZGVmYXVsdDpnPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmc9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmc9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpjYXNlIm9kZF9yaWdodCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjpnPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6Zz0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6Zz0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOmc9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2UiY2lyY2xlIjpnPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Zz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpnPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOmc9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOmc9ImN5bGluZGVyIn1vLndhcm4oIkFkZGluZyBub2RlIixpLmlkLGkuZG9tSWQpLGUuc2V0Tm9kZSh5eC5sb29rVXBEb21JZChpLmlkKSx7bGFiZWxUeXBlOiJzdmciLGxhYmVsU3R5bGU6Yy5sYWJlbFN0eWxlLHNoYXBlOmcsbGFiZWw6cyxyeDp5LHJ5OnksY2xhc3M6YSxzdHlsZTpjLnN0eWxlLGlkOnl4Lmxvb2tVcERvbUlkKGkuaWQpfSl9KSl9KShmLHUsZSksZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9MDtpZih2b2lkIDAhPT10LmRlZmF1bHRTdHlsZSl7dmFyIGE9TnYodC5kZWZhdWx0U3R5bGUpO249YS5zdHlsZSxyPWEubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKGEpe2krKzt2YXIgbz0iTC0iK2Euc3RhcnQrIi0iK2EuZW5kLHM9IkxTLSIrYS5zdGFydCxjPSJMRS0iK2EuZW5kLHU9e307ImFycm93X29wZW4iPT09YS50eXBlP3UuYXJyb3doZWFkPSJub25lIjp1LmFycm93aGVhZD0ibm9ybWFsIjt2YXIgbD0iIixoPSIiO2lmKHZvaWQgMCE9PWEuc3R5bGUpe3ZhciBmPU52KGEuc3R5bGUpO2w9Zi5zdHlsZSxoPWYubGFiZWxTdHlsZX1lbHNlIHN3aXRjaChhLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmw9ImZpbGw6bm9uZSIsdm9pZCAwIT09biYmKGw9biksdm9pZCAwIT09ciYmKGg9cik7YnJlYWs7Y2FzZSJkb3R0ZWQiOmw9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmw9IiBzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZSJ9dS5zdHlsZT1sLHUubGFiZWxTdHlsZT1oLHZvaWQgMCE9PWEuaW50ZXJwb2xhdGU/dS5jdXJ2ZT1BdihhLmludGVycG9sYXRlLFB1KTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT91LmN1cnZlPUF2KHQuZGVmYXVsdEludGVycG9sYXRlLFB1KTp1LmN1cnZlPUF2KEl4LmN1cnZlLFB1KSx2b2lkIDA9PT1hLnRleHQ/dm9pZCAwIT09YS5zdHlsZSYmKHUuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToodS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsdS5sYWJlbHBvcz0iYyIsem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/KHUubGFiZWxUeXBlPSJodG1sIix1LmxhYmVsPSc8c3BhbiBpZD0iTC0nLmNvbmNhdChvLCciIGNsYXNzPSJlZGdlTGFiZWwgTC0nKS5jb25jYXQocywiJyBMLSIpLmNvbmNhdChjLCciPicpLmNvbmNhdChhLnRleHQucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksIjwvc3Bhbj4iKSk6KHUubGFiZWxUeXBlPSJ0ZXh0Iix1LmxhYmVsPWEudGV4dC5yZXBsYWNlKFVtLmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PWEuc3R5bGUmJih1LnN0eWxlPXUuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksdS5sYWJlbFN0eWxlPXUubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksdS5pZD1vLHUuY2xhc3M9cysiICIrYyx1Lm1pbmxlbj1hLmxlbmd0aHx8MSxlLnNldEVkZ2UoeXgubG9va1VwRG9tSWQoYS5zdGFydCkseXgubG9va1VwRG9tSWQoYS5lbmQpLHUsaSl9KSl9KGQsdSk7dmFyIGc9bmV3KDAsYngoKS5yZW5kZXIpO0x4KGcpLGcuYXJyb3dzKCkubm9uZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDAgMCBMIDAgMCB6Iik7YngoKS51dGlsLmFwcGx5U3R5bGUoaSxuW3IrIlN0eWxlIl0pfSxnLmFycm93cygpLm5vcm1hbD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3doZWFkUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9O3ZhciBtPWF1KCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO20uYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksby53YXJuKHUpO3ZhciB2PWF1KCIjIitlKyIgZyIpO2codix1KSx2LnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLChmdW5jdGlvbigpe3JldHVybiB5eC5nZXRUb29sdGlwKHRoaXMuaWQpfSkpO3ZhciBiPWEuZGlhZ3JhbVBhZGRpbmcsXz1tLm5vZGUoKS5nZXRCQm94KCkseD1fLndpZHRoKzIqYix3PV8uaGVpZ2h0KzIqYjt6dihtLHcseCxhLnVzZU1heFdpZHRoKTt2YXIgaz0iIi5jb25jYXQoXy54LWIsIiAiKS5jb25jYXQoXy55LWIsIiAiKS5jb25jYXQoeCwiICIpLmNvbmNhdCh3KTtmb3Ioby5kZWJ1Zygidmlld0JveCAiLmNvbmNhdChrKSksbS5hdHRyKCJ2aWV3Qm94IixrKSx5eC5pbmRleE5vZGVzKCJzdWJHcmFwaCIrcCkscD0wO3A8bC5sZW5ndGg7cCsrKWlmKCJ1bmRlZmluZWQiIT09KGk9bFtwXSkudGl0bGUpe3ZhciBUPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2UrJyBbaWQ9IicreXgubG9va1VwRG9tSWQoaS5pZCkrJyJdIHJlY3QnKSxFPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2UrJyBbaWQ9IicreXgubG9va1VwRG9tSWQoaS5pZCkrJyJdJyksQz1UWzBdLnguYmFzZVZhbC52YWx1ZSxTPVRbMF0ueS5iYXNlVmFsLnZhbHVlLEE9VFswXS53aWR0aC5iYXNlVmFsLnZhbHVlLE09YXUoRVswXSkuc2VsZWN0KCIubGFiZWwiKTtNLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdChDK0EvMiwiLCAiKS5jb25jYXQoUysxNCwiKSIpKSxNLmF0dHIoImlkIixlKyJUZXh0Iik7Zm9yKHZhciBOPTA7TjxpLmNsYXNzZXMubGVuZ3RoO04rKylFWzBdLmNsYXNzTGlzdC5hZGQoaS5jbGFzc2VzW05dKX16bShhLmh0bWxMYWJlbHMpO2Zvcih2YXIgRD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxPPTA7TzxELmxlbmd0aDtPKyspe3ZhciBCPURbT10sTD1CLmdldEJCb3goKSxJPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7SS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxJLnNldEF0dHJpYnV0ZSgicnkiLDApLEkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsTC53aWR0aCksSS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsTC5oZWlnaHQpLEIuaW5zZXJ0QmVmb3JlKEksQi5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhmKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1mW3RdO2lmKG4ubGluayl7dmFyIHI9YXUoIiMiK2UrJyBbaWQ9IicreXgubG9va1VwRG9tSWQodCkrJyJdJyk7aWYocil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKTtpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixuLmNsYXNzZXMuam9pbigiICIpKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImhyZWYiLG4ubGluayksaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLG4ubGlua1RhcmdldCYmaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG4ubGlua1RhcmdldCk7dmFyIGE9ci5pbnNlcnQoKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSwiOmZpcnN0LWNoaWxkIiksbz1yLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO28mJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBvLm5vZGUoKX0pKTt2YXIgcz1yLnNlbGVjdCgiLmxhYmVsIik7cyYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIHMubm9kZSgpfSkpfX19KSl9O3ZhciBQeD17fTtjb25zdCBqeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKVB4W2Vbbl1dPXRbZVtuXV19LFl4PWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpLHl4LmNsZWFyKCkseXguc2V0R2VuKCJnZW4tMiIpO3ZhciBuPW14KCkucGFyc2VyO24ueXk9eXgsbi5wYXJzZSh0KTt2YXIgcj15eC5nZXREaXJlY3Rpb24oKTt2b2lkIDA9PT1yJiYocj0iVEQiKTt2YXIgaSxhPUp2KCkuZmxvd2NoYXJ0LHM9YS5ub2RlU3BhY2luZ3x8NTAsYz1hLnJhbmtTcGFjaW5nfHw1MCx1PW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnIsbm9kZXNlcDpzLHJhbmtzZXA6YyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxsPXl4LmdldFN1YkdyYXBocygpO28uaW5mbygiU3ViZ3JhcGhzIC0gIixsKTtmb3IodmFyIGg9bC5sZW5ndGgtMTtoPj0wO2gtLSlpPWxbaF0sby5pbmZvKCJTdWJncmFwaCAtICIsaSkseXguYWRkVmVydGV4KGkuaWQsaS50aXRsZSwiZ3JvdXAiLHZvaWQgMCxpLmNsYXNzZXMsaS5kaXIpO3ZhciBmPXl4LmdldFZlcnRpY2VzKCksZD15eC5nZXRFZGdlcygpO28uaW5mbyhkKTt2YXIgcD0wO2ZvcihwPWwubGVuZ3RoLTE7cD49MDtwLS0pe2k9bFtwXSxvdSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgeT0wO3k8aS5ub2Rlcy5sZW5ndGg7eSsrKW8uaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLGkubm9kZXNbeV0saS5pZCksdS5zZXRQYXJlbnQoaS5ub2Rlc1t5XSxpLmlkKX0oZnVuY3Rpb24odCxlLG4pe3ZhciByPWF1KCdbaWQ9IicuY29uY2F0KG4sJyJdJykpO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0sYT0iZGVmYXVsdCI7aS5jbGFzc2VzLmxlbmd0aD4wJiYoYT1pLmNsYXNzZXMuam9pbigiICIpKTt2YXIgcyxjPU52KGkuc3R5bGVzKSx1PXZvaWQgMCE9PWkudGV4dD9pLnRleHQ6aS5pZDtpZih6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9e2xhYmVsOnUucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9OyhzPXh4KCkocixsKS5ub2RlKCkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyl9ZWxzZXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2guc2V0QXR0cmlidXRlKCJzdHlsZSIsYy5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2Zvcih2YXIgZj11LnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIxIikscC50ZXh0Q29udGVudD1mW2RdLGguYXBwZW5kQ2hpbGQocCl9cz1ofXZhciB5PTAsZz0iIjtzd2l0Y2goaS50eXBlKXtjYXNlInJvdW5kIjp5PTUsZz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmNhc2UiZ3JvdXAiOmRlZmF1bHQ6Zz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpnPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpnPSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6Y2FzZSJvZGRfcmlnaHQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Zz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOmc9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOmc9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpnPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlImNpcmNsZSI6Zz0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmc9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6Zz0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjpnPSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjpnPSJjeWxpbmRlciJ9ZS5zZXROb2RlKGkuaWQse2xhYmVsU3R5bGU6Yy5sYWJlbFN0eWxlLHNoYXBlOmcsbGFiZWxUZXh0OnUscng6eSxyeTp5LGNsYXNzOmEsc3R5bGU6Yy5zdHlsZSxpZDppLmlkLGxpbms6aS5saW5rLGxpbmtUYXJnZXQ6aS5saW5rVGFyZ2V0LHRvb2x0aXA6eXguZ2V0VG9vbHRpcChpLmlkKXx8IiIsZG9tSWQ6eXgubG9va1VwRG9tSWQoaS5pZCksaGF2ZUNhbGxiYWNrOmkuaGF2ZUNhbGxiYWNrLHdpZHRoOiJncm91cCI9PT1pLnR5cGU/NTAwOnZvaWQgMCxkaXI6aS5kaXIsdHlwZTppLnR5cGUscHJvcHM6aS5wcm9wcyxwYWRkaW5nOkp2KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxvLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOmMubGFiZWxTdHlsZSxzaGFwZTpnLGxhYmVsVGV4dDp1LHJ4Onkscnk6eSxjbGFzczphLHN0eWxlOmMuc3R5bGUsaWQ6aS5pZCxkb21JZDp5eC5sb29rVXBEb21JZChpLmlkKSx3aWR0aDoiZ3JvdXAiPT09aS50eXBlPzUwMDp2b2lkIDAsdHlwZTppLnR5cGUsZGlyOmkuZGlyLHByb3BzOmkucHJvcHMscGFkZGluZzpKdigpLmZsb3djaGFydC5wYWRkaW5nfSl9KSl9KShmLHUsZSksZnVuY3Rpb24odCxlKXtvLmluZm8oImFiYzc4IGVkZ2VzID0gIix0KTt2YXIgbixyLGk9MCxhPXt9O2lmKHZvaWQgMCE9PXQuZGVmYXVsdFN0eWxlKXt2YXIgcz1Odih0LmRlZmF1bHRTdHlsZSk7bj1zLnN0eWxlLHI9cy5sYWJlbFN0eWxlfXQuZm9yRWFjaCgoZnVuY3Rpb24ocyl7aSsrO3ZhciBjPSJMLSIrcy5zdGFydCsiLSIrcy5lbmQ7dm9pZCAwPT09YVtjXT8oYVtjXT0wLG8uaW5mbygiYWJjNzggbmV3IGVudHJ5IixjLGFbY10pKTooYVtjXSsrLG8uaW5mbygiYWJjNzggbmV3IGVudHJ5IixjLGFbY10pKTt2YXIgdT1jKyItIithW2NdO28uaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsYyx1LGFbY10pO3ZhciBsPSJMUy0iK3Muc3RhcnQsaD0iTEUtIitzLmVuZCxmPXtzdHlsZToiIixsYWJlbFN0eWxlOiIifTtzd2l0Y2goZi5taW5sZW49cy5sZW5ndGh8fDEsImFycm93X29wZW4iPT09cy50eXBlP2YuYXJyb3doZWFkPSJub25lIjpmLmFycm93aGVhZD0ibm9ybWFsIixmLmFycm93VHlwZVN0YXJ0PSJhcnJvd19vcGVuIixmLmFycm93VHlwZUVuZD0iYXJyb3dfb3BlbiIscy50eXBlKXtjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6Zi5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY3Jvc3MiO2Nhc2UiYXJyb3dfY3Jvc3MiOmYuYXJyb3dUeXBlRW5kPSJhcnJvd19jcm9zcyI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmYuYXJyb3dUeXBlU3RhcnQ9ImFycm93X3BvaW50IjtjYXNlImFycm93X3BvaW50IjpmLmFycm93VHlwZUVuZD0iYXJyb3dfcG9pbnQiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6Zi5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY2lyY2xlIjtjYXNlImFycm93X2NpcmNsZSI6Zi5hcnJvd1R5cGVFbmQ9ImFycm93X2NpcmNsZSJ9dmFyIGQ9IiIscD0iIjtzd2l0Y2gocy5zdHJva2Upe2Nhc2Uibm9ybWFsIjpkPSJmaWxsOm5vbmU7Iix2b2lkIDAhPT1uJiYoZD1uKSx2b2lkIDAhPT1yJiYocD1yKSxmLnRoaWNrbmVzcz0ibm9ybWFsIixmLnBhdHRlcm49InNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6Zi50aGlja25lc3M9Im5vcm1hbCIsZi5wYXR0ZXJuPSJkb3R0ZWQiLGYuc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmYudGhpY2tuZXNzPSJ0aGljayIsZi5wYXR0ZXJuPSJzb2xpZCIsZi5zdHlsZT0ic3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmU7In1pZih2b2lkIDAhPT1zLnN0eWxlKXt2YXIgeT1OdihzLnN0eWxlKTtkPXkuc3R5bGUscD15LmxhYmVsU3R5bGV9Zi5zdHlsZT1mLnN0eWxlKz1kLGYubGFiZWxTdHlsZT1mLmxhYmVsU3R5bGUrPXAsdm9pZCAwIT09cy5pbnRlcnBvbGF0ZT9mLmN1cnZlPUF2KHMuaW50ZXJwb2xhdGUsUHUpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2YuY3VydmU9QXYodC5kZWZhdWx0SW50ZXJwb2xhdGUsUHUpOmYuY3VydmU9QXYoUHguY3VydmUsUHUpLHZvaWQgMD09PXMudGV4dD92b2lkIDAhPT1zLnN0eWxlJiYoZi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihmLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixmLmxhYmVscG9zPSJjIiksZi5sYWJlbFR5cGU9InRleHQiLGYubGFiZWw9cy50ZXh0LnJlcGxhY2UoVW0ubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09cy5zdHlsZSYmKGYuc3R5bGU9Zi5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IiksZi5sYWJlbFN0eWxlPWYubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpLGYuaWQ9dSxmLmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIrbCsiICIraCxlLnNldEVkZ2Uocy5zdGFydCxzLmVuZCxmLGkpfSkpfShkLHUpO3ZhciBnPWF1KCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO2cuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIik7dmFyIG09YXUoIiMiK2UrIiBnIik7Q18obSx1LFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGUpO3ZhciB2PWEuZGlhZ3JhbVBhZGRpbmcsYj1nLm5vZGUoKS5nZXRCQm94KCksXz1iLndpZHRoKzIqdix4PWIuaGVpZ2h0KzIqdjtpZihvLmRlYnVnKCJuZXcgVmlld0JveCAwIDAgIi5jb25jYXQoXywiICIpLmNvbmNhdCh4KSwidHJhbnNsYXRlKCIuY29uY2F0KHYtdS5fbGFiZWwubWFyZ2lueCwiLCAiKS5jb25jYXQodi11Ll9sYWJlbC5tYXJnaW55LCIpIikpLHp2KGcseCxfLGEudXNlTWF4V2lkdGgpLGcuYXR0cigidmlld0JveCIsIjAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KHgpKSxnLnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdCh2LXUuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KHYtYi55LCIpIikpLHl4LmluZGV4Tm9kZXMoInN1YkdyYXBoIitwKSwhYS5odG1sTGFiZWxzKWZvcih2YXIgdz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxrPTA7azx3Lmxlbmd0aDtrKyspe3ZhciBUPXdba10sRT1ULmdldEJCb3goKSxDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Qy5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxDLnNldEF0dHJpYnV0ZSgicnkiLDApLEMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsRS53aWR0aCksQy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsRS5oZWlnaHQpLFQuaW5zZXJ0QmVmb3JlKEMsVC5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhmKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1mW3RdO2lmKG4ubGluayl7dmFyIHI9YXUoIiMiK2UrJyBbaWQ9IicrdCsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBzPXIuc2VsZWN0KCIubGFiZWwiKTtzJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5ub2RlKCl9KSl9fX0pKX07ZnVuY3Rpb24gengodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgVXgscXgsSHg9IiIsJHg9IiIsV3g9IiIsVng9W10sR3g9W10sWHg9IiIsWng9W10sUXg9W10sS3g9IiIsSng9WyJhY3RpdmUiLCJkb25lIiwiY3JpdCIsIm1pbGVzdG9uZSJdLHR3PVtdLGV3PSExLG53PSExLHJ3PTAsaXc9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIShyLmluZGV4T2YodC5mb3JtYXQoZS50cmltKCkpKT49MCkmJih0Lmlzb1dlZWtkYXkoKT49NiYmbi5pbmRleE9mKCJ3ZWVrZW5kcyIpPj0wfHxuLmluZGV4T2YodC5mb3JtYXQoImRkZGQiKS50b0xvd2VyQ2FzZSgpKT49MHx8bi5pbmRleE9mKHQuZm9ybWF0KGUudHJpbSgpKSk+PTApfSxhdz1mdW5jdGlvbih0LGUsbixyKXtpZihuLmxlbmd0aCYmIXQubWFudWFsRW5kVGltZSl7dmFyIGE9aSgpKHQuc3RhcnRUaW1lLGUsITApO2EuYWRkKDEsImQiKTt2YXIgbz1pKCkodC5lbmRUaW1lLGUsITApLHM9b3coYSxvLGUsbixyKTt0LmVuZFRpbWU9by50b0RhdGUoKSx0LnJlbmRlckVuZFRpbWU9c319LG93PWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBhPSExLG89bnVsbDt0PD1lOylhfHwobz1lLnRvRGF0ZSgpKSwoYT1pdyh0LG4scixpKSkmJmUuYWRkKDEsImQiKSx0LmFkZCgxLCJkIik7cmV0dXJuIG99LHN3PWZ1bmN0aW9uKHQsZSxuKXtuPW4udHJpbSgpO3ZhciByPS9eYWZ0ZXJccysoW1xkXHctIF0rKS8uZXhlYyhuLnRyaW0oKSk7aWYobnVsbCE9PXIpe3ZhciBhPW51bGw7aWYoclsxXS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXB3KHQpO3ZvaWQgMCE9PWUmJihhP2UuZW5kVGltZT5hLmVuZFRpbWUmJihhPWUpOmE9ZSl9KSksYSlyZXR1cm4gYS5lbmRUaW1lO3ZhciBzPW5ldyBEYXRlO3JldHVybiBzLnNldEhvdXJzKDAsMCwwLDApLHN9dmFyIGM9aSgpKG4sZS50cmltKCksITApO3JldHVybiBjLmlzVmFsaWQoKT9jLnRvRGF0ZSgpOihvLmRlYnVnKCJJbnZhbGlkIGRhdGU6IituKSxvLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrZS50cmltKCkpLG5ldyBEYXRlKX0sY3c9ZnVuY3Rpb24odCxlKXtpZihudWxsIT09dClzd2l0Y2godFsyXSl7Y2FzZSJzIjplLmFkZCh0WzFdLCJzZWNvbmRzIik7YnJlYWs7Y2FzZSJtIjplLmFkZCh0WzFdLCJtaW51dGVzIik7YnJlYWs7Y2FzZSJoIjplLmFkZCh0WzFdLCJob3VycyIpO2JyZWFrO2Nhc2UiZCI6ZS5hZGQodFsxXSwiZGF5cyIpO2JyZWFrO2Nhc2UidyI6ZS5hZGQodFsxXSwid2Vla3MiKX1yZXR1cm4gZS50b0RhdGUoKX0sdXc9ZnVuY3Rpb24odCxlLG4scil7cj1yfHwhMSxuPW4udHJpbSgpO3ZhciBhPWkoKShuLGUudHJpbSgpLCEwKTtyZXR1cm4gYS5pc1ZhbGlkKCk/KHImJmEuYWRkKDEsImQiKSxhLnRvRGF0ZSgpKTpjdygvXihbXGRdKykoW3dkaG1zXSkvLmV4ZWMobi50cmltKCkpLGkoKSh0KSl9LGx3PTAsaHc9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/InRhc2siKyhsdys9MSk6dH0sZnc9W10sZHc9e30scHc9ZnVuY3Rpb24odCl7dmFyIGU9ZHdbdF07cmV0dXJuIGZ3W2VdfSx5dz1mdW5jdGlvbigpe2Zvcih2YXIgdD1mdW5jdGlvbih0KXt2YXIgZT1md1t0XSxuPSIiO3N3aXRjaChmd1t0XS5yYXcuc3RhcnRUaW1lLnR5cGUpe2Nhc2UicHJldlRhc2tFbmQiOnZhciByPXB3KGUucHJldlRhc2tJZCk7ZS5zdGFydFRpbWU9ci5lbmRUaW1lO2JyZWFrO2Nhc2UiZ2V0U3RhcnREYXRlIjoobj1zdygwLEh4LGZ3W3RdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKSkmJihmd1t0XS5zdGFydFRpbWU9bil9cmV0dXJuIGZ3W3RdLnN0YXJ0VGltZSYmKGZ3W3RdLmVuZFRpbWU9dXcoZndbdF0uc3RhcnRUaW1lLEh4LGZ3W3RdLnJhdy5lbmRUaW1lLmRhdGEsZXcpLGZ3W3RdLmVuZFRpbWUmJihmd1t0XS5wcm9jZXNzZWQ9ITAsZndbdF0ubWFudWFsRW5kVGltZT1pKCkoZndbdF0ucmF3LmVuZFRpbWUuZGF0YSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxhdyhmd1t0XSxIeCxHeCxWeCkpKSxmd1t0XS5wcm9jZXNzZWR9LGU9ITAsbj0wO248ZncubGVuZ3RoO24rKyl0KG4pLGU9ZSYmZndbbl0ucHJvY2Vzc2VkO3JldHVybiBlfSxndz1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1wdyh0KTt2b2lkIDAhPT1uJiZuLmNsYXNzZXMucHVzaChlKX0pKX0sbXc9ZnVuY3Rpb24odCxlKXt0dy5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnIl0nKSk7bnVsbCE9PW4mJm4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe2UoKX0pKX0pKSx0dy5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnLXRleHQiXScpKTtudWxsIT09biYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZSgpfSkpfSkpfTtjb25zdCB2dz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3NDLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gSnYoKS5nYW50dH0sY2xlYXI6ZnVuY3Rpb24oKXtaeD1bXSxReD1bXSxLeD0iIix0dz1bXSxYeD0iIixsdz0wLFV4PXZvaWQgMCxxeD12b2lkIDAsZnc9W10sSHg9IiIsJHg9IiIsV3g9IiIsVng9W10sR3g9W10sZXc9ITEsbnc9ITEscnc9MH0sc2V0RGF0ZUZvcm1hdDpmdW5jdGlvbih0KXtIeD10fSxnZXREYXRlRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIEh4fSxlbmFibGVJbmNsdXNpdmVFbmREYXRlczpmdW5jdGlvbigpe2V3PSEwfSxlbmREYXRlc0FyZUluY2x1c2l2ZTpmdW5jdGlvbigpe3JldHVybiBld30sZW5hYmxlVG9wQXhpczpmdW5jdGlvbigpe253PSEwfSx0b3BBeGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBud30sc2V0QXhpc0Zvcm1hdDpmdW5jdGlvbih0KXskeD10fSxnZXRBeGlzRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuICR4fSxzZXRUb2RheU1hcmtlcjpmdW5jdGlvbih0KXtXeD10fSxnZXRUb2RheU1hcmtlcjpmdW5jdGlvbigpe3JldHVybiBXeH0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7WHg9dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gWHh9LGFkZFNlY3Rpb246ZnVuY3Rpb24odCl7S3g9dCxaeC5wdXNoKHQpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBaeH0sZ2V0VGFza3M6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9eXcoKSxlPTA7IXQmJmU8MTA7KXQ9eXcoKSxlKys7cmV0dXJuIFF4PWZ3fSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49e3NlY3Rpb246S3gsdHlwZTpLeCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmV9LHRhc2s6dCxjbGFzc2VzOltdfSxyPWZ1bmN0aW9uKHQsZSl7dmFyIG49KCI6Ij09PWUuc3Vic3RyKDAsMSk/ZS5zdWJzdHIoMSxlLmxlbmd0aCk6ZSkuc3BsaXQoIiwiKSxyPXt9O2J3KG4scixKeCk7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpyLmlkPWh3KCksci5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDp0fSxyLmVuZFRpbWU9e2RhdGE6blswXX07YnJlYWs7Y2FzZSAyOnIuaWQ9aHcoKSxyLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blswXX0sci5lbmRUaW1lPXtkYXRhOm5bMV19O2JyZWFrO2Nhc2UgMzpyLmlkPWh3KG5bMF0pLHIuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzFdfSxyLmVuZFRpbWU9e2RhdGE6blsyXX19cmV0dXJuIHJ9KHF4LGUpO24ucmF3LnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLnJhdy5lbmRUaW1lPXIuZW5kVGltZSxuLmlkPXIuaWQsbi5wcmV2VGFza0lkPXF4LG4uYWN0aXZlPXIuYWN0aXZlLG4uZG9uZT1yLmRvbmUsbi5jcml0PXIuY3JpdCxuLm1pbGVzdG9uZT1yLm1pbGVzdG9uZSxuLm9yZGVyPXJ3LHJ3Kys7dmFyIGk9ZncucHVzaChuKTtxeD1uLmlkLGR3W24uaWRdPWktMX0sZmluZFRhc2tCeUlkOnB3LGFkZFRhc2tPcmc6ZnVuY3Rpb24odCxlKXt2YXIgbj17c2VjdGlvbjpLeCx0eXBlOkt4LGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119LHI9ZnVuY3Rpb24odCxlKXt2YXIgbj0oIjoiPT09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxLGUubGVuZ3RoKTplKS5zcGxpdCgiLCIpLHI9e307YncobixyLEp4KTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdPW5bYV0udHJpbSgpO3ZhciBvPSIiO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOnIuaWQ9aHcoKSxyLnN0YXJ0VGltZT10LmVuZFRpbWUsbz1uWzBdO2JyZWFrO2Nhc2UgMjpyLmlkPWh3KCksci5zdGFydFRpbWU9c3coMCxIeCxuWzBdKSxvPW5bMV07YnJlYWs7Y2FzZSAzOnIuaWQ9aHcoblswXSksci5zdGFydFRpbWU9c3coMCxIeCxuWzFdKSxvPW5bMl19cmV0dXJuIG8mJihyLmVuZFRpbWU9dXcoci5zdGFydFRpbWUsSHgsbyxldyksci5tYW51YWxFbmRUaW1lPWkoKShvLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLGF3KHIsSHgsR3gsVngpKSxyfShVeCxlKTtuLnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLmVuZFRpbWU9ci5lbmRUaW1lLG4uaWQ9ci5pZCxuLmFjdGl2ZT1yLmFjdGl2ZSxuLmRvbmU9ci5kb25lLG4uY3JpdD1yLmNyaXQsbi5taWxlc3RvbmU9ci5taWxlc3RvbmUsVXg9bixReC5wdXNoKG4pfSxzZXRJbmNsdWRlczpmdW5jdGlvbih0KXtWeD10LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSxnZXRJbmNsdWRlczpmdW5jdGlvbigpe3JldHVybiBWeH0sc2V0RXhjbHVkZXM6ZnVuY3Rpb24odCl7R3g9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sZ2V0RXhjbHVkZXM6ZnVuY3Rpb24oKXtyZXR1cm4gR3h9LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4pe2lmKCJsb29zZSI9PT1KdigpLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUpe3ZhciByPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7cj1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLnRyaW0oKTsnIic9PT1hLmNoYXJBdCgwKSYmJyInPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJihhPWEuc3Vic3RyKDEsYS5sZW5ndGgtMikpLHJbaV09YX19MD09PXIubGVuZ3RoJiZyLnB1c2godCksdm9pZCAwIT09cHcodCkmJm13KHQsKGZ1bmN0aW9uKCl7dmFyIHQ7SHYucnVuRnVuYy5hcHBseShIdixbZV0uY29uY2F0KGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHp4KHQpfSh0PXIpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gengodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT96eCh0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSl9KSl9fSh0LGUsbil9KSksZ3codCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbj1lOyJsb29zZSIhPT1KdigpLnNlY3VyaXR5TGV2ZWwmJihuPSgwLE9tLnNhbml0aXplVXJsKShlKSksdC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXB3KHQpJiZtdyh0LChmdW5jdGlvbigpe3dpbmRvdy5vcGVuKG4sIl9zZWxmIil9KSl9KSksZ3codCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7dHcuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZHVyYXRpb25Ub0RhdGU6Y3csaXNJbnZhbGlkRGF0ZTppd307ZnVuY3Rpb24gYncodCxlLG4pe2Zvcih2YXIgcj0hMDtyOylyPSExLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bmV3IFJlZ0V4cCgiXlxccyoiK24rIlxccyokIik7dFswXS5tYXRjaChpKSYmKGVbbl09ITAsdC5zaGlmdCgxKSxyPSEwKX0pKX12YXIgX3cseHc9big5OTU5KSx3dz1uLm4oeHcpO3h3LnBhcnNlci55eT12dztjb25zdCBrdz1mdW5jdGlvbih0LGUpe3ZhciBuPUp2KCkuZ2FudHQ7eHcucGFyc2VyLnl5LmNsZWFyKCkseHcucGFyc2VyLnBhcnNlKHQpO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ZvaWQgMD09PShfdz1yLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgpJiYoX3c9MTIwMCksdm9pZCAwIT09bi51c2VXaWR0aCYmKF93PW4udXNlV2lkdGgpO3ZhciBhPXh3LnBhcnNlci55eS5nZXRUYXNrcygpLG89YS5sZW5ndGgqKG4uYmFySGVpZ2h0K24uYmFyR2FwKSsyKm4udG9wUGFkZGluZztyLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiK193KyIgIitvKTtmb3IodmFyIHM9YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksYz1mdW5jdGlvbigpe3JldHVybiBaaS5hcHBseShxcyhtbyx2byxHYSxXYSxQYSxSYSxMYSxPYSxOYSxrbykuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9KCkuZG9tYWluKFtsKGEsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXJ0VGltZX0pKSx1KGEsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZFRpbWV9KSldKS5yYW5nZVJvdW5kKFswLF93LW4ubGVmdFBhZGRpbmctbi5yaWdodFBhZGRpbmddKSxoPVtdLGY9MDtmPGEubGVuZ3RoO2YrKyloLnB1c2goYVtmXS50eXBlKTt2YXIgZD1oO2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0W3JdKXx8KGVbdFtyXV09ITAsbi5wdXNoKHRbcl0pKTtyZXR1cm4gbn0oaCksYS5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciBuPXQuc3RhcnRUaW1lLHI9ZS5zdGFydFRpbWUsaT0wO3JldHVybiBuPnI/aT0xOm48ciYmKGk9LTEpLGl9KSksZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uYmFySGVpZ2h0LG89YStuLmJhckdhcCx1PW4udG9wUGFkZGluZyxsPW4ubGVmdFBhZGRpbmc7ZmEoKS5kb21haW4oWzAsaC5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKGpyKSxmdW5jdGlvbih0LGUscixhLG8sdSxsLGgpe3ZhciBmPXUucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWUuc3RhcnRUaW1lO3JldHVybiB0P01hdGgubWluKHQsbik6bn0pLDApLGQ9dS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5lbmRUaW1lO3JldHVybiB0P01hdGgubWF4KHQsbik6bn0pLDApLHA9eHcucGFyc2VyLnl5LmdldERhdGVGb3JtYXQoKTtpZihmJiZkKXtmb3IodmFyIHk9W10sZz1udWxsLG09aSgpKGYpO20udmFsdWVPZigpPD1kOyl4dy5wYXJzZXIueXkuaXNJbnZhbGlkRGF0ZShtLHAsbCxoKT9nP2cuZW5kPW0uY2xvbmUoKTpnPXtzdGFydDptLmNsb25lKCksZW5kOm0uY2xvbmUoKX06ZyYmKHkucHVzaChnKSxnPW51bGwpLG0uYWRkKDEsImQiKTtzLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoeSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiJleGNsdWRlLSIrdC5zdGFydC5mb3JtYXQoIllZWVktTU0tREQiKX0pKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC5zdGFydCkrcn0pKS5hdHRyKCJ5IixuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZW5kLmNsb25lKCkuYWRkKDEsImRheSIpO3JldHVybiBjKGUpLWModC5zdGFydCl9KSkuYXR0cigiaGVpZ2h0IixvLWUtbi5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKGUsbil7cmV0dXJuKGMoZS5zdGFydCkrcisuNSooYyhlLmVuZCktYyhlLnN0YXJ0KSkpLnRvU3RyaW5nKCkrInB4ICIrKG4qdCsuNSpvKS50b1N0cmluZygpKyJweCJ9KSkuYXR0cigiY2xhc3MiLCJleGNsdWRlLXJhbmdlIil9fShvLHUsbCwwLHIsdCx4dy5wYXJzZXIueXkuZ2V0RXhjbHVkZXMoKSx4dy5wYXJzZXIueXkuZ2V0SW5jbHVkZXMoKSksZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbz0oYT1jLHYoMyxhKSkudGlja1NpemUoLWkrZStuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KFlsKHh3LnBhcnNlci55eS5nZXRBeGlzRm9ybWF0KCl8fG4uYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2lmKHMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCAiKyhpLTUwKSsiKSIpLmNhbGwobykuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZHkiLCIxZW0iKSx2dy50b3BBeGlzRW5hYmxlZCgpfHxuLnRvcEF4aXMpe3ZhciB1PWZ1bmN0aW9uKHQpe3JldHVybiB2KDEsdCl9KGMpLnRpY2tTaXplKC1pK2Urbi5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChZbCh4dy5wYXJzZXIueXkuZ2V0QXhpc0Zvcm1hdCgpfHxuLmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKTtzLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QrIiwgIitlKyIpIikuY2FsbCh1KS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKX19KGwsdSwwLHIpLGZ1bmN0aW9uKHQsZSxyLGksYSxvLHUpe3MuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrci0yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gdS1uLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGgubGVuZ3RoO2UrKylpZih0LnR5cGU9PT1oW2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pKTt2YXIgbD1zLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEodCkuZW50ZXIoKTtsLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWlsZXN0b25lP2ModC5zdGFydFRpbWUpK2krLjUqKGModC5lbmRUaW1lKS1jKHQuc3RhcnRUaW1lKSktLjUqYTpjKHQuc3RhcnRUaW1lKStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9hOmModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpLWModC5zdGFydFRpbWUpfSkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG49dC5vcmRlciwoYyh0LnN0YXJ0VGltZSkraSsuNSooYyh0LmVuZFRpbWUpLWModC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisobiplK3IrLjUqYSkudG9TdHJpbmcoKSsicHgifSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoZT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIHI9MCxpPTA7aTxoLmxlbmd0aDtpKyspdC50eXBlPT09aFtpXSYmKHI9aSVuLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBhPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/YSs9IiBhY3RpdmVDcml0IjphPSIgYWN0aXZlIjp0LmRvbmU/YT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihhKz0iIGNyaXQiKSwwPT09YS5sZW5ndGgmJihhPSIgdGFzayIpLHQubWlsZXN0b25lJiYoYT0iIG1pbGVzdG9uZSAiK2EpLCJ0YXNrIisoYSs9cikrIiAiK2V9KSksbC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLG4uZm9udFNpemUpLmF0dHIoIngiLChmdW5jdGlvbih0KXt2YXIgZT1jKHQuc3RhcnRUaW1lKSxyPWModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYoZSs9LjUqKGModC5lbmRUaW1lKS1jKHQuc3RhcnRUaW1lKSktLjUqYSksdC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIG89dGhpcy5nZXRCQm94KCkud2lkdGg7cmV0dXJuIG8+ci1lP3IrbysxLjUqbi5sZWZ0UGFkZGluZz51P2UraS01OnIraSs1OihyLWUpLzIrZStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LGkpe3JldHVybiB0Lm9yZGVyKmUrbi5iYXJIZWlnaHQvMisobi5mb250U2l6ZS8yLTIpK3J9KSkuYXR0cigidGV4dC1oZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9Yyh0LnN0YXJ0VGltZSkscj1jKHQuZW5kVGltZSk7dC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIGk9dGhpcy5nZXRCQm94KCkud2lkdGgsbz0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihvPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgcz0wLGw9MDtsPGgubGVuZ3RoO2wrKyl0LnR5cGU9PT1oW2xdJiYocz1sJW4ubnVtYmVyU2VjdGlvblN0eWxlcyk7dmFyIGY9IiI7cmV0dXJuIHQuYWN0aXZlJiYoZj10LmNyaXQ/ImFjdGl2ZUNyaXRUZXh0IitzOiJhY3RpdmVUZXh0IitzKSx0LmRvbmU/Zj10LmNyaXQ/ZisiIGRvbmVDcml0VGV4dCIrczpmKyIgZG9uZVRleHQiK3M6dC5jcml0JiYoZj1mKyIgY3JpdFRleHQiK3MpLHQubWlsZXN0b25lJiYoZis9IiBtaWxlc3RvbmVUZXh0IiksaT5yLWU/citpKzEuNSpuLmxlZnRQYWRkaW5nPnU/bysiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIitzKyIgIitmOm8rIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK3MrIiAiK2YrIiB3aWR0aC0iK2k6bysiIHRhc2tUZXh0IHRhc2tUZXh0IitzKyIgIitmKyIgd2lkdGgtIitpfSkpfSh0LG8sdSxsLGEsMCxlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTAsYT0wO2E8aC5sZW5ndGg7YSsrKXJbYV09W2hbYV0sKG89aFthXSxjPWQsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufShjKVtvXXx8MCldO3ZhciBvLGM7cy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHIpLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxuPS0oZS5sZW5ndGgtMSkvMixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7ci5zZXRBdHRyaWJ1dGUoImR5IixuKyJlbSIpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTthLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGEuc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxpPjAmJmEuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGEudGV4dENvbnRlbnQ9ZVtpXSxyLmFwcGVuZENoaWxkKGEpfXJldHVybiByfSkpLmF0dHIoIngiLDEwKS5hdHRyKCJ5IiwoZnVuY3Rpb24obixhKXtpZighKGE+MCkpcmV0dXJuIG5bMV0qdC8yK2U7Zm9yKHZhciBvPTA7bzxhO28rKylyZXR1cm4gaSs9clthLTFdWzFdLG5bMV0qdC8yK2kqdCtlfSkpLmF0dHIoImZvbnQtc2l6ZSIsbi5zZWN0aW9uRm9udFNpemUpLmF0dHIoImZvbnQtc2l6ZSIsbi5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspaWYodFswXT09PWhbZV0pcmV0dXJuInNlY3Rpb25UaXRsZSBzZWN0aW9uVGl0bGUiK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSkpfShvLHUpLGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXZ3LmdldFRvZGF5TWFya2VyKCk7aWYoIm9mZiIhPT1hKXt2YXIgbz1zLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSx1PW5ldyBEYXRlLGw9by5hcHBlbmQoImxpbmUiKTtsLmF0dHIoIngxIixjKHUpK3QpLmF0dHIoIngyIixjKHUpK3QpLmF0dHIoInkxIixuLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsaS1uLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksIiIhPT1hJiZsLmF0dHIoInN0eWxlIixhLnJlcGxhY2UoLywvZywiOyIpKX19KGwsMCwwLHIpfShhLF93LG8pLHp2KHMsbyxfdyxuLnVzZU1heFdpZHRoKSxzLmFwcGVuZCgidGV4dCIpLnRleHQoeHcucGFyc2VyLnl5LmdldFRpdGxlKCkpLmF0dHIoIngiLF93LzIpLmF0dHIoInkiLG4udGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidGl0bGVUZXh0Iil9O3ZhciBUdz17fSxFdz1udWxsLEN3PXttYXN0ZXI6RXd9LFN3PSJtYXN0ZXIiLEF3PSJMUiIsTXc9MDtmdW5jdGlvbiBOdygpe3JldHVybiBCdih7bGVuZ3RoOjd9KX1mdW5jdGlvbiBEdyh0LGUpe28uZGVidWcoIkVudGVyaW5nIGlzZmFzdGZvcndhcmRhYmxlOiIsdC5pZCxlLmlkKTtmb3IodmFyIG49MDt0LnNlcTw9ZS5zZXEmJnQhPT1lJiZuPDFlMyYmKG4rKyxudWxsIT1lLnBhcmVudCk7KXtpZihBcnJheS5pc0FycmF5KGUucGFyZW50KSlyZXR1cm4gby5kZWJ1ZygiSW4gbWVyZ2UgY29tbWl0OiIsZS5wYXJlbnQpLER3KHQsVHdbZS5wYXJlbnRbMF1dKXx8RHcodCxUd1tlLnBhcmVudFsxXV0pO2U9VHdbZS5wYXJlbnRdfXJldHVybiBvLmRlYnVnKHQuaWQsZS5pZCksdC5pZD09PWUuaWR9dmFyIE93PXt9O2Z1bmN0aW9uIEJ3KHQsZSxuKXt2YXIgcj10LmluZGV4T2YoZSk7LTE9PT1yP3QucHVzaChuKTp0LnNwbGljZShyLDEsbil9ZnVuY3Rpb24gTHcodCl7dmFyIGU9dC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc2VxPmUuc2VxP3Q6ZX0pLHRbMF0pLG49IiI7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtuKz10PT09ZT8iXHQqIjoiXHR8In0pKTt2YXIgcixpLGEscz1bbixlLmlkLGUuc2VxXTtmb3IodmFyIGMgaW4gQ3cpQ3dbY109PT1lLmlkJiZzLnB1c2goYyk7aWYoby5kZWJ1ZyhzLmpvaW4oIiAiKSksQXJyYXkuaXNBcnJheShlLnBhcmVudCkpe3ZhciB1PVR3W2UucGFyZW50WzBdXTtCdyh0LGUsdSksdC5wdXNoKFR3W2UucGFyZW50WzFdXSl9ZWxzZXtpZihudWxsPT1lLnBhcmVudClyZXR1cm47dmFyIGw9VHdbZS5wYXJlbnRdO0J3KHQsZSxsKX1yPXQsaT1mdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0sYT1PYmplY3QuY3JlYXRlKG51bGwpLEx3KHQ9ci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7dmFyIG49aShlKTtyZXR1cm4gYVtuXXx8KGFbbl09ITAsdC5wdXNoKGUpKSx0fSksW10pKX12YXIgSXc9ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Qua2V5cyhUdykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gVHdbdF19KSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5kZWJ1Zyh0LmlkKX0pKSx0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc2VxLXQuc2VxfSkpLHR9O2NvbnN0IFJ3PXtzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7QXc9dH0sc2V0T3B0aW9uczpmdW5jdGlvbih0KXtvLmRlYnVnKCJvcHRpb25zIHN0ciIsdCksdD0odD10JiZ0LnRyaW0oKSl8fCJ7fSI7dHJ5e093PUpTT04ucGFyc2UodCl9Y2F0Y2godCl7by5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIix0Lm1lc3NhZ2UpfX0sZ2V0T3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBPd30sY29tbWl0OmZ1bmN0aW9uKHQpe3ZhciBlPXtpZDpOdygpLG1lc3NhZ2U6dCxzZXE6TXcrKyxwYXJlbnQ6bnVsbD09RXc/bnVsbDpFdy5pZH07RXc9ZSxUd1tlLmlkXT1lLEN3W1N3XT1lLmlkLG8uZGVidWcoImluIHB1c2hDb21taXQgIitlLmlkKX0sYnJhbmNoOmZ1bmN0aW9uKHQpe0N3W3RdPW51bGwhPUV3P0V3LmlkOm51bGwsby5kZWJ1ZygiaW4gY3JlYXRlQnJhbmNoIil9LG1lcmdlOmZ1bmN0aW9uKHQpe3ZhciBlPVR3W0N3W1N3XV0sbj1Ud1tDd1t0XV07aWYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zZXE+ZS5zZXEmJkR3KGUsdCl9KGUsbikpby5kZWJ1ZygiQWxyZWFkeSBtZXJnZWQiKTtlbHNle2lmKER3KGUsbikpQ3dbU3ddPUN3W3RdLEV3PVR3W0N3W1N3XV07ZWxzZXt2YXIgcj17aWQ6TncoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIrdCsiIGludG8gIitTdyxzZXE6TXcrKyxwYXJlbnQ6W251bGw9PUV3P251bGw6RXcuaWQsQ3dbdF1dfTtFdz1yLFR3W3IuaWRdPXIsQ3dbU3ddPXIuaWR9by5kZWJ1ZyhDdyksby5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX19LGNoZWNrb3V0OmZ1bmN0aW9uKHQpe28uZGVidWcoImluIGNoZWNrb3V0Iik7dmFyIGU9Q3dbU3c9dF07RXc9VHdbZV19LHJlc2V0OmZ1bmN0aW9uKHQpe28uZGVidWcoImluIHJlc2V0Iix0KTt2YXIgZT10LnNwbGl0KCI6IilbMF0sbj1wYXJzZUludCh0LnNwbGl0KCI6IilbMV0pLHI9IkhFQUQiPT09ZT9FdzpUd1tDd1tlXV07Zm9yKG8uZGVidWcocixuKTtuPjA7KWlmKG4tLSwhKHI9VHdbci5wYXJlbnRdKSl7dmFyIGk9IkNyaXRpY2FsIGVycm9yIC0gdW5pcXVlIHBhcmVudCBjb21taXQgbm90IGZvdW5kIGR1cmluZyByZXNldCI7dGhyb3cgby5lcnJvcihpKSxpfUV3PXIsQ3dbU3ddPXIuaWR9LHByZXR0eVByaW50OmZ1bmN0aW9uKCl7by5kZWJ1ZyhUdyksTHcoW0l3KClbMF1dKX0sY2xlYXI6ZnVuY3Rpb24oKXtUdz17fSxDdz17bWFzdGVyOkV3PW51bGx9LFN3PSJtYXN0ZXIiLE13PTB9LGdldEJyYW5jaGVzQXNPYmpBcnJheTpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBDdyl0LnB1c2goe25hbWU6ZSxjb21taXQ6VHdbQ3dbZV1dfSk7cmV0dXJuIHR9LGdldEJyYW5jaGVzOmZ1bmN0aW9uKCl7cmV0dXJuIEN3fSxnZXRDb21taXRzOmZ1bmN0aW9uKCl7cmV0dXJuIFR3fSxnZXRDb21taXRzQXJyYXk6SXcsZ2V0Q3VycmVudEJyYW5jaDpmdW5jdGlvbigpe3JldHVybiBTd30sZ2V0RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIEF3fSxnZXRIZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIEV3fX07dmFyIEZ3LFB3PW4oMjU1Myksanc9bi5uKFB3KSxZdz17fSx6dz17bm9kZVNwYWNpbmc6MTUwLG5vZGVGaWxsQ29sb3I6InllbGxvdyIsbm9kZVN0cm9rZVdpZHRoOjIsbm9kZVN0cm9rZUNvbG9yOiJncmV5IixsaW5lU3Ryb2tlV2lkdGg6NCxicmFuY2hPZmZzZXQ6NTAsbGluZUNvbG9yOiJncmV5IixsZWZ0TWFyZ2luOjUwLGJyYW5jaENvbG9yczpbIiM0NDJmNzQiLCIjOTgzMzUxIiwiIzYwOTczMiIsIiNBQTlBMzkiXSxub2RlUmFkaXVzOjEwLG5vZGVMYWJlbDp7d2lkdGg6NzUsaGVpZ2h0OjEwMCx4Oi0yNSx5OjB9fSxVdz17fTtmdW5jdGlvbiBxdyh0LGUsbixyKXt2YXIgaT1BdihyLFZ1KSxhPXp3LmJyYW5jaENvbG9yc1tuJXp3LmJyYW5jaENvbG9ycy5sZW5ndGhdLG89enUoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LngpfSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQueSl9KSkuY3VydmUoaSk7dC5hcHBlbmQoInN2ZzpwYXRoIikuYXR0cigiZCIsbyhlKSkuc3R5bGUoInN0cm9rZSIsYSkuc3R5bGUoInN0cm9rZS13aWR0aCIsencubGluZVN0cm9rZVdpZHRoKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX1mdW5jdGlvbiBIdyh0LGUpe2U9ZXx8dC5ub2RlKCkuZ2V0QkJveCgpO3ZhciBuPXQubm9kZSgpLmdldENUTSgpO3JldHVybntsZWZ0Om4uZStlLngqbi5hLHRvcDpuLmYrZS55Km4uZCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodH19ZnVuY3Rpb24gJHcodCxlLG4scixpKXtvLmRlYnVnKCJzdmdEcmF3TGluZUZvckNvbW1pdHM6ICIsZSxuKTt2YXIgYT1Idyh0LnNlbGVjdCgiI25vZGUtIitlKyIgY2lyY2xlIikpLHM9SHcodC5zZWxlY3QoIiNub2RlLSIrbisiIGNpcmNsZSIpKTtzd2l0Y2gocil7Y2FzZSJMUiI6aWYoYS5sZWZ0LXMubGVmdD56dy5ub2RlU3BhY2luZyl7dmFyIGM9e3g6YS5sZWZ0LXp3Lm5vZGVTcGFjaW5nLHk6cy50b3Arcy5oZWlnaHQvMn07cXcodCxbYyx7eDpzLmxlZnQrcy53aWR0aCx5OnMudG9wK3MuaGVpZ2h0LzJ9XSxpLCJsaW5lYXIiKSxxdyh0LFt7eDphLmxlZnQseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtencubm9kZVNwYWNpbmcvMix5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC16dy5ub2RlU3BhY2luZy8yLHk6Yy55fSxjXSxpKX1lbHNlIHF3KHQsW3t4OmEubGVmdCx5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC16dy5ub2RlU3BhY2luZy8yLHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LXp3Lm5vZGVTcGFjaW5nLzIseTpzLnRvcCtzLmhlaWdodC8yfSx7eDpzLmxlZnQrcy53aWR0aCx5OnMudG9wK3MuaGVpZ2h0LzJ9XSxpKTticmVhaztjYXNlIkJUIjppZihzLnRvcC1hLnRvcD56dy5ub2RlU3BhY2luZyl7dmFyIHU9e3g6cy5sZWZ0K3Mud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0K3p3Lm5vZGVTcGFjaW5nfTtxdyh0LFt1LHt4OnMubGVmdCtzLndpZHRoLzIseTpzLnRvcH1dLGksImxpbmVhciIpLHF3KHQsW3t4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodH0se3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0K3p3Lm5vZGVTcGFjaW5nLzJ9LHt4OnMubGVmdCtzLndpZHRoLzIseTp1Lnktencubm9kZVNwYWNpbmcvMn0sdV0saSl9ZWxzZSBxdyh0LFt7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHR9LHt4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCt6dy5ub2RlU3BhY2luZy8yfSx7eDpzLmxlZnQrcy53aWR0aC8yLHk6cy50b3Atencubm9kZVNwYWNpbmcvMn0se3g6cy5sZWZ0K3Mud2lkdGgvMix5OnMudG9wfV0saSl9fWZ1bmN0aW9uIFd3KHQsZSl7cmV0dXJuIHQuc2VsZWN0KGUpLm5vZGUoKS5jbG9uZU5vZGUoITApfWZ1bmN0aW9uIFZ3KHQsZSxuLHIpe3ZhciBpLGE9T2JqZWN0LmtleXMoWXcpLmxlbmd0aDtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBzPTA7ZG97aWYocysrLGk9WXdbZV0sby5kZWJ1ZygiaW4gcmVuZGVyQ29tbWl0SGlzdG9yeSIsaS5pZCxpLnNlcSksdC5zZWxlY3QoIiNub2RlLSIrZSkuc2l6ZSgpPjApcmV0dXJuO3QuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBXdyh0LCIjZGVmLWNvbW1pdCIpfSkpLmF0dHIoImNsYXNzIiwiY29tbWl0IikuYXR0cigiaWQiLChmdW5jdGlvbigpe3JldHVybiJub2RlLSIraS5pZH0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3N3aXRjaChyKXtjYXNlIkxSIjpyZXR1cm4idHJhbnNsYXRlKCIrKGkuc2VxKnp3Lm5vZGVTcGFjaW5nK3p3LmxlZnRNYXJnaW4pKyIsICIrRncqencuYnJhbmNoT2Zmc2V0KyIpIjtjYXNlIkJUIjpyZXR1cm4idHJhbnNsYXRlKCIrKEZ3Knp3LmJyYW5jaE9mZnNldCt6dy5sZWZ0TWFyZ2luKSsiLCAiKyhhLWkuc2VxKSp6dy5ub2RlU3BhY2luZysiKSJ9fSkpLmF0dHIoImZpbGwiLHp3Lm5vZGVGaWxsQ29sb3IpLmF0dHIoInN0cm9rZSIsencubm9kZVN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLHp3Lm5vZGVTdHJva2VXaWR0aCk7dmFyIGM9dm9pZCAwO2Zvcih2YXIgdSBpbiBuKWlmKG5bdV0uY29tbWl0PT09aSl7Yz1uW3VdO2JyZWFrfWMmJihvLmRlYnVnKCJmb3VuZCBicmFuY2ggIixjLm5hbWUpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJicmFuY2gtbGFiZWwiKS50ZXh0KGMubmFtZSsiLCAiKSksdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1pZCIpLnRleHQoaS5pZCksIiIhPT1pLm1lc3NhZ2UmJiJCVCI9PT1yJiZ0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiY29tbWl0LW1zZyIpLnRleHQoIiwgIitpLm1lc3NhZ2UpLGU9aS5wYXJlbnR9d2hpbGUoZSYmWXdbZV0mJnM8MWUzKX1BcnJheS5pc0FycmF5KGUpJiYoby5kZWJ1ZygiZm91bmQgbWVyZ2UgY29tbW1pdCIsZSksVncodCxlWzBdLG4sciksRncrKyxWdyh0LGVbMV0sbixyKSxGdy0tKX1mdW5jdGlvbiBHdyh0LGUsbixyKXtyPXJ8fDA7Zm9yKHZhciBpPTA7ZS5zZXE+MCYmIWUubGluZURyYXduJiZpPDFlMzspaSsrLCJzdHJpbmciPT10eXBlb2YgZS5wYXJlbnQ/KCR3KHQsZS5pZCxlLnBhcmVudCxuLHIpLGUubGluZURyYXduPSEwLGU9WXdbZS5wYXJlbnRdKTpBcnJheS5pc0FycmF5KGUucGFyZW50KSYmKCR3KHQsZS5pZCxlLnBhcmVudFswXSxuLHIpLCR3KHQsZS5pZCxlLnBhcmVudFsxXSxuLHIrMSksR3codCxZd1tlLnBhcmVudFsxXV0sbixyKzEpLGUubGluZURyYXduPSEwLGU9WXdbZS5wYXJlbnRbMF1dKX1jb25zdCBYdz1mdW5jdGlvbih0KXtVdz10fTt2YXIgWnc9IiIsUXc9ITE7Y29uc3QgS3c9e3NldE1lc3NhZ2U6ZnVuY3Rpb24odCl7by5kZWJ1ZygiU2V0dGluZyBtZXNzYWdlIHRvOiAiK3QpLFp3PXR9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gWnd9LHNldEluZm86ZnVuY3Rpb24odCl7UXc9dH0sZ2V0SW5mbzpmdW5jdGlvbigpe3JldHVybiBRd319O3ZhciBKdz1uKDY3NjUpLHRrPW4ubihKdyksZWs9e307Y29uc3Qgbms9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZWtbZV09dFtlXX0pKX07dmFyIHJrPW4oNzA2MiksaWs9bi5uKHJrKSxhaz17fSxvaz0iIixzaz0hMTtjb25zdCBjaz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3NDLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gSnYoKS5waWV9LGFkZFNlY3Rpb246ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1ha1t0XSYmKGFrW3RdPWUsby5kZWJ1ZygiQWRkZWQgbmV3IHNlY3Rpb24gOiIsdCkpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBha30sY2xlYW51cFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/KHQ9dC5zdWJzdHJpbmcoMSkudHJpbSgpLE51bWJlcih0LnRyaW0oKSkpOk51bWJlcih0LnRyaW0oKSl9LGNsZWFyOmZ1bmN0aW9uKCl7YWs9e30sb2s9IiIsc2s9ITF9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe29rPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIG9rfSxzZXRTaG93RGF0YTpmdW5jdGlvbih0KXtzaz10fSxnZXRTaG93RGF0YTpmdW5jdGlvbigpe3JldHVybiBza319O3ZhciB1ayxsaz1KdigpO2NvbnN0IGhrPWZ1bmN0aW9uKHQsZSl7dHJ5e2xrPUp2KCk7dmFyIG49aWsoKS5wYXJzZXI7bi55eT1jayxvLmRlYnVnKCJSZW5kZXJpbmcgaW5mbyBkaWFncmFtXG4iK3QpLG4ueXkuY2xlYXIoKSxuLnBhcnNlKHQpLG8uZGVidWcoIlBhcnNlZCBpbmZvIGRpYWdyYW0iKTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTt2b2lkIDA9PT0odWs9ci5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoKSYmKHVrPTEyMDApLHZvaWQgMCE9PWxrLnVzZVdpZHRoJiYodWs9bGsudXNlV2lkdGgpLHZvaWQgMCE9PWxrLnBpZS51c2VXaWR0aCYmKHVrPWxrLnBpZS51c2VXaWR0aCk7dmFyIGk9YXUoIiMiK2UpO3p2KGksNDUwLHVrLGxrLnBpZS51c2VNYXhXaWR0aCksci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIit1aysiIDQ1MCIpO3ZhciBhPU1hdGgubWluKHVrLDQ1MCkvMi00MCxzPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdWsvMisiLDIyNSkiKSxjPWNrLmdldFNlY3Rpb25zKCksdT0wO09iamVjdC5rZXlzKGMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UrPWNbdF19KSk7dmFyIGw9bGsudGhlbWVWYXJpYWJsZXMsaD1bbC5waWUxLGwucGllMixsLnBpZTMsbC5waWU0LGwucGllNSxsLnBpZTYsbC5waWU3LGwucGllOCxsLnBpZTksbC5waWUxMCxsLnBpZTExLGwucGllMTJdLGY9bWEoKS5yYW5nZShoKSxkPWZ1bmN0aW9uKCl7dmFyIHQ9cXUsZT1VdSxuPW51bGwscj1wdSgwKSxpPXB1KEV1KSxhPXB1KDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPShvPVJ1KG8pKS5sZW5ndGgsZD0wLHA9bmV3IEFycmF5KGYpLHk9bmV3IEFycmF5KGYpLGc9K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLG09TWF0aC5taW4oRXUsTWF0aC5tYXgoLUV1LGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx2PU1hdGgubWluKE1hdGguYWJzKG0pL2YsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9dioobTwwPy0xOjEpO2ZvcihzPTA7czxmOysrcykoaD15W3Bbc109c109K3Qob1tzXSxzLG8pKT4wJiYoZCs9aCk7Zm9yKG51bGwhPWU/cC5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKHlbdF0seVtuXSl9KSk6bnVsbCE9biYmcC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuKG9bdF0sb1tlXSl9KSkscz0wLHU9ZD8obS1mKmIpL2Q6MDtzPGY7KytzLGc9bCljPXBbc10sbD1nKygoaD15W2NdKT4wP2gqdTowKStiLHlbY109e2RhdGE6b1tjXSxpbmRleDpzLHZhbHVlOmgsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOmwscGFkQW5nbGU6dn07cmV0dXJuIHl9cmV0dXJuIG8udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpwdSgrZSksbyk6dH0sby5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxvKTpufSxvLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSgrdCksbyk6cn0sby5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLG8pOmF9LG99KCkudmFsdWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzFdfSkpLHA9ZChPYmplY3QuZW50cmllcyhjKSkseT1JdSgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKGEpO3Muc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEocCkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix5KS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIGYodC5kYXRhWzBdKX0pKS5hdHRyKCJjbGFzcyIsInBpZUNpcmNsZSIpLHMuc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEocCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4odC5kYXRhWzFdL3UqMTAwKS50b0ZpeGVkKDApKyIlIn0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIreS5jZW50cm9pZCh0KSsiKSJ9KSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLHMuYXBwZW5kKCJ0ZXh0IikudGV4dChuLnl5LmdldFRpdGxlKCkpLmF0dHIoIngiLDApLmF0dHIoInkiLC0yMDApLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7dmFyIGc9cy5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKGYuZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0LGUpe3JldHVybiJ0cmFuc2xhdGUoMjE2LCIrKDIyKmUtMjIqZi5kb21haW4oKS5sZW5ndGgvMikrIikifSkpO2cuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDE4KS5hdHRyKCJoZWlnaHQiLDE4KS5zdHlsZSgiZmlsbCIsZikuc3R5bGUoInN0cm9rZSIsZiksZy5kYXRhKHApLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIyKS5hdHRyKCJ5IiwxNCkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIG4ueXkuZ2V0U2hvd0RhdGEoKXx8bGsuc2hvd0RhdGF8fGxrLnBpZS5zaG93RGF0YT90LmRhdGFbMF0rIiBbIit0LmRhdGFbMV0rIl0iOnQuZGF0YVswXX0pKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgaW5mbyBkaWFncmFtIiksby5lcnJvcih0KX19O3ZhciBmaz1uKDMxNzYpLGRrPW4ubihmaykscGs9W10seWs9e30sZ2s9e30sbWs9e30sdms9e307Y29uc3QgYms9e1JlcXVpcmVtZW50VHlwZTp7UkVRVUlSRU1FTlQ6IlJlcXVpcmVtZW50IixGVU5DVElPTkFMX1JFUVVJUkVNRU5UOiJGdW5jdGlvbmFsIFJlcXVpcmVtZW50IixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6IkludGVyZmFjZSBSZXF1aXJlbWVudCIsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6IlBlcmZvcm1hbmNlIFJlcXVpcmVtZW50IixQSFlTSUNBTF9SRVFVSVJFTUVOVDoiUGh5c2ljYWwgUmVxdWlyZW1lbnQiLERFU0lHTl9DT05TVFJBSU5UOiJEZXNpZ24gQ29uc3RyYWludCJ9LFJpc2tMZXZlbDp7TE9XX1JJU0s6IkxvdyIsTUVEX1JJU0s6Ik1lZGl1bSIsSElHSF9SSVNLOiJIaWdoIn0sVmVyaWZ5VHlwZTp7VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9LFJlbGF0aW9uc2hpcHM6e0NPTlRBSU5TOiJjb250YWlucyIsQ09QSUVTOiJjb3BpZXMiLERFUklWRVM6ImRlcml2ZXMiLFNBVElTRklFUzoic2F0aXNmaWVzIixWRVJJRklFUzoidmVyaWZpZXMiLFJFRklORVM6InJlZmluZXMiLFRSQUNFUzoidHJhY2VzIn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3NDLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gSnYoKS5yZXF9LGFkZFJlcXVpcmVtZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWdrW3RdJiYoZ2tbdF09e25hbWU6dCx0eXBlOmUsaWQ6eWsuaWQsdGV4dDp5ay50ZXh0LHJpc2s6eWsucmlzayx2ZXJpZnlNZXRob2Q6eWsudmVyaWZ5TWV0aG9kfSkseWs9e30sZ2tbdF19LGdldFJlcXVpcmVtZW50czpmdW5jdGlvbigpe3JldHVybiBna30sc2V0TmV3UmVxSWQ6ZnVuY3Rpb24odCl7dm9pZCAwIT09eWsmJih5ay5pZD10KX0sc2V0TmV3UmVxVGV4dDpmdW5jdGlvbih0KXt2b2lkIDAhPT15ayYmKHlrLnRleHQ9dCl9LHNldE5ld1JlcVJpc2s6ZnVuY3Rpb24odCl7dm9pZCAwIT09eWsmJih5ay5yaXNrPXQpfSxzZXROZXdSZXFWZXJpZnlNZXRob2Q6ZnVuY3Rpb24odCl7dm9pZCAwIT09eWsmJih5ay52ZXJpZnlNZXRob2Q9dCl9LGFkZEVsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXZrW3RdJiYodmtbdF09e25hbWU6dCx0eXBlOm1rLnR5cGUsZG9jUmVmOm1rLmRvY1JlZn0sby5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsdCkpLG1rPXt9LHZrW3RdfSxnZXRFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB2a30sc2V0TmV3RWxlbWVudFR5cGU6ZnVuY3Rpb24odCl7dm9pZCAwIT09bWsmJihtay50eXBlPXQpfSxzZXROZXdFbGVtZW50RG9jUmVmOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PW1rJiYobWsuZG9jUmVmPXQpfSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24odCxlLG4pe3BrLnB1c2goe3R5cGU6dCxzcmM6ZSxkc3Q6bn0pfSxnZXRSZWxhdGlvbnNoaXBzOmZ1bmN0aW9uKCl7cmV0dXJuIHBrfSxjbGVhcjpmdW5jdGlvbigpe3BrPVtdLHlrPXt9LGdrPXt9LG1rPXt9LHZrPXt9fX07dmFyIF9rPXtDT05UQUlOUzoiY29udGFpbnMiLEFSUk9XOiJhcnJvdyJ9O2NvbnN0IHhrPV9rO3ZhciB3az17fSxraz0wLFRrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiIyIrZSkuYXR0cigiY2xhc3MiLCJyZXEgcmVxQm94IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHdrLnJlY3RfbWluX3dpZHRoKyJweCIpLmF0dHIoImhlaWdodCIsd2sucmVjdF9taW5faGVpZ2h0KyJweCIpfSxFaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9d2sucmVjdF9taW5fd2lkdGgvMixpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwgcmVxVGl0bGUiKS5hdHRyKCJpZCIsZSkuYXR0cigieCIscikuYXR0cigieSIsd2sucmVjdF9wYWRkaW5nKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxhPTA7bi5mb3JFYWNoKChmdW5jdGlvbih0KXswPT1hP2kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsd2sucmVjdF9taW5fd2lkdGgvMikuYXR0cigiZHkiLDApLnRleHQodCk6aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4Iix3ay5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsLjc1KndrLmxpbmVfaGVpZ2h0KS50ZXh0KHQpLGErK30pKTt2YXIgbz0xLjUqd2sucmVjdF9wYWRkaW5nK2Eqd2subGluZV9oZWlnaHQqLjc1O3JldHVybiB0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIsd2sucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixvKS5hdHRyKCJ5MiIsbykse3RpdGxlTm9kZTppLHk6b319LENrPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwiKS5hdHRyKCJpZCIsZSkuYXR0cigieCIsd2sucmVjdF9wYWRkaW5nKS5hdHRyKCJ5IixyKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxhPTAsbz1bXTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZT4zMCYmYTwzOyl7dmFyIG49dC5zdWJzdHJpbmcoMCwzMCk7ZT0odD10LnN1YnN0cmluZygzMCx0Lmxlbmd0aCkpLmxlbmd0aCxvW28ubGVuZ3RoXT1uLGErK31pZigzPT1hKXt2YXIgcj1vW28ubGVuZ3RoLTFdO29bby5sZW5ndGgtMV09ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC00KSsiLi4uIn1lbHNlIG9bby5sZW5ndGhdPXQ7YT0wfSkpLG8uZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsd2sucmVjdF9wYWRkaW5nKS5hdHRyKCJkeSIsd2subGluZV9oZWlnaHQpLnRleHQodCl9KSksaX0sU2s9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpfTtjb25zdCBBaz1mdW5jdGlvbih0KXtpZih2b2lkIDAhPT10KWZvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspd2tbZVtuXV09dFtlW25dXX0sTWs9ZnVuY3Rpb24odCxlKXtmay5wYXJzZXIueXk9YmssZmsucGFyc2VyLnl5LmNsZWFyKCksZmsucGFyc2VyLnBhcnNlKHQpO3ZhciBuPWF1KCJbaWQ9JyIuY29uY2F0KGUsIiddIikpOyFmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsX2suQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGUubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGUubGluZV9oZWlnaHQpLmF0dHIoInkxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGUubGluZV9oZWlnaHQpLmF0dHIoIngxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixfay5BUlJPVysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsZS5saW5lX2hlaWdodCkuYXR0cigicmVmWSIsLjUqZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwXG4gICAgICBMIi5jb25jYXQoZS5saW5lX2hlaWdodCwiLCIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LzIsIlxuICAgICAgTSIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LCIsIikuY29uY2F0KGUubGluZV9oZWlnaHQvMiwiXG4gICAgICBMMCwiKS5jb25jYXQoZS5saW5lX2hlaWdodCkpLmF0dHIoInN0cm9rZS13aWR0aCIsMSl9KG4sd2spO3ZhciByPW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMSxjb21wb3VuZDohMSxkaXJlY3RlZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOndrLmxheW91dERpcmVjdGlvbixtYXJnaW54OjIwLG1hcmdpbnk6MjAsbm9kZXNlcDoxMDAsZWRnZXNlcDoxMDAscmFua3NlcDoxMDB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGk9YmsuZ2V0UmVxdWlyZW1lbnRzKCksYT1iay5nZXRFbGVtZW50cygpLHM9YmsuZ2V0UmVsYXRpb25zaGlwcygpOyFmdW5jdGlvbih0LGUsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9dFtyXTtyPVNrKHIpLG8uaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLHIpO3ZhciBhPW4uYXBwZW5kKCJnIikuYXR0cigiaWQiLHIpLHM9VGsoYSwicmVxLSIrciksYz1bXSx1PUVrKGEscisiX3RpdGxlIixbIjw8Ii5jb25jYXQoaS50eXBlLCI+PiIpLCIiLmNvbmNhdChpLm5hbWUpXSk7Yy5wdXNoKHUudGl0bGVOb2RlKTt2YXIgbD1DayhhLHIrIl9ib2R5IixbIklkOiAiLmNvbmNhdChpLmlkKSwiVGV4dDogIi5jb25jYXQoaS50ZXh0KSwiUmlzazogIi5jb25jYXQoaS5yaXNrKSwiVmVyaWZpY2F0aW9uOiAiLmNvbmNhdChpLnZlcmlmeU1ldGhvZCldLHUueSk7Yy5wdXNoKGwpO3ZhciBoPXMubm9kZSgpLmdldEJCb3goKTtlLnNldE5vZGUocix7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnJ9KX0pKX0oaSxyLG4pLGZ1bmN0aW9uKHQsZSxuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgaT10W3JdLGE9U2sociksbz1uLmFwcGVuZCgiZyIpLmF0dHIoImlkIixhKSxzPSJlbGVtZW50LSIrYSxjPVRrKG8scyksdT1bXSxsPUVrKG8scysiX3RpdGxlIixbIjw8RWxlbWVudD4+IiwiIi5jb25jYXQocildKTt1LnB1c2gobC50aXRsZU5vZGUpO3ZhciBoPUNrKG8scysiX2JvZHkiLFsiVHlwZTogIi5jb25jYXQoaS50eXBlfHwiTm90IFNwZWNpZmllZCIpLCJEb2MgUmVmOiAiLmNvbmNhdChpLmRvY1JlZnx8Ik5vbmUiKV0sbC55KTt1LnB1c2goaCk7dmFyIGY9Yy5ub2RlKCkuZ2V0QkJveCgpO2Uuc2V0Tm9kZShhLHt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6YX0pfSkpfShhLHIsbiksZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPVNrKHQuc3JjKSxyPVNrKHQuZHN0KTtlLnNldEVkZ2UobixyLHtyZWxhdGlvbnNoaXA6dH0pfSkpfShzLHIpLF9iKCkubGF5b3V0KHIpLGZ1bmN0aW9uKHQsZSl7ZS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZvaWQgMCE9PW4mJnZvaWQgMCE9PWUubm9kZShuKSYmKHQuc2VsZWN0KCIjIituKSx0LnNlbGVjdCgiIyIrbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUubm9kZShuKS54LWUubm9kZShuKS53aWR0aC8yKSsiLCIrKGUubm9kZShuKS55LWUubm9kZShuKS5oZWlnaHQvMikrIiApIikpfSkpfShuLHIpLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uZWRnZShTayhlLnNyYyksU2soZS5kc3QpKSxhPXp1KCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLG89dC5pbnNlcnQoInBhdGgiLCIjIityKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExpbmUiKS5hdHRyKCJkIixhKGkucG9pbnRzKSkuYXR0cigiZmlsbCIsIm5vbmUiKTtlLnR5cGU9PWJrLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM/by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitVbS5nZXRVcmwod2suYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK2UudHlwZSsiX2xpbmVfZW5kaW5nKSIpOihvLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCIxMCw3Iiksby5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVW0uZ2V0VXJsKHdrLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIit4ay5BUlJPVysiX2xpbmVfZW5kaW5nKSIpKSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1lLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpLGE9ZS5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCguNSppKSxvPSJyZWwiK2trO2trKys7dmFyIHM9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixvKS5hdHRyKCJ4IixhLngpLmF0dHIoInkiLGEueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQocikubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK28pLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsQm94IikuYXR0cigieCIsYS54LXMud2lkdGgvMikuYXR0cigieSIsYS55LXMuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0odCxvLDAsIjw8Ii5jb25jYXQoZS50eXBlLCI+PiIpKX0obix0LHIsZSl9KSk7dmFyIGM9d2sucmVjdF9wYWRkaW5nLHU9bi5ub2RlKCkuZ2V0QkJveCgpLGw9dS53aWR0aCsyKmMsaD11LmhlaWdodCsyKmM7enYobixoLGwsd2sudXNlTWF4V2lkdGgpLG4uYXR0cigidmlld0JveCIsIiIuY29uY2F0KHUueC1jLCIgIikuY29uY2F0KHUueS1jLCIgIikuY29uY2F0KGwsIiAiKS5jb25jYXQoaCkpfTt2YXIgTms9big2ODc2KSxEaz1uLm4oTmspLE9rPXZvaWQgMCxCaz17fSxMaz1bXSxJaz1bXSxSaz0iIixGaz0hMSxQaz0hMSxqaz0hMSxZaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1Ca1t0XTtpJiZlPT09aS5uYW1lJiZudWxsPT1ufHwobnVsbCE9biYmbnVsbCE9bi50ZXh0fHwobj17dGV4dDplLHdyYXA6bnVsbCx0eXBlOnJ9KSxudWxsIT1yJiZudWxsIT1uLnRleHR8fChuPXt0ZXh0OmUsd3JhcDpudWxsLHR5cGU6cn0pLEJrW3RdPXtuYW1lOmUsZGVzY3JpcHRpb246bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZIaygpfHwhIW4ud3JhcCxwcmV2QWN0b3I6T2ssbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpyfHwicGFydGljaXBhbnQifSxPayYmQmtbT2tdJiYoQmtbT2tdLm5leHRBY3Rvcj10KSxPaz10KX0sems9ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlPTA7ZTxMay5sZW5ndGg7ZSsrKUxrW2VdLnR5cGU9PT0kay5BQ1RJVkVfU1RBUlQmJkxrW2VdLmZyb20uYWN0b3I9PT10JiZuKyssTGtbZV0udHlwZT09PSRrLkFDVElWRV9FTkQmJkxrW2VdLmZyb20uYWN0b3I9PT10JiZuLS07cmV0dXJuIG59LFVrPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZihyPT09JGsuQUNUSVZFX0VORCl7dmFyIGk9emsodC5hY3Rvcik7aWYoaTwxKXt2YXIgYT1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK3QuYWN0b3IrIikiKTt0aHJvdyBhLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGF9fXJldHVybiBMay5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmSGsoKXx8ISFuLndyYXAsdHlwZTpyfSksITB9LHFrPWZ1bmN0aW9uKHQpe3JldHVybiBCa1t0XX0sSGs9ZnVuY3Rpb24oKXtyZXR1cm4gamt9LCRrPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNX0sV2s9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXthY3Rvcjp0LHBsYWNlbWVudDplLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZIaygpfHwhIW4ud3JhcH0saT1bXS5jb25jYXQodCx0KTtJay5wdXNoKHIpLExrLnB1c2goe2Zyb206aVswXSx0bzppWzFdLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZIaygpfHwhIW4ud3JhcCx0eXBlOiRrLk5PVEUscGxhY2VtZW50OmV9KX0sVms9ZnVuY3Rpb24odCxlKXt2YXIgbj1xayh0KTt0cnl7dmFyIHI9Rm0oZS50ZXh0LEp2KCkpO3I9KHI9ci5yZXBsYWNlKC8mYW1wOy9nLCImIikpLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKSxHayhuLEpTT04ucGFyc2UocikpfWNhdGNoKHQpe28uZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0Iix0KX19O2Z1bmN0aW9uIEdrKHQsZSl7aWYobnVsbD09dC5saW5rcyl0LmxpbmtzPWU7ZWxzZSBmb3IodmFyIG4gaW4gZSl0LmxpbmtzW25dPWVbbl19dmFyIFhrPWZ1bmN0aW9uKHQsZSl7dmFyIG49cWsodCk7dHJ5e3ZhciByPUZtKGUudGV4dCxKdigpKTtaayhuLEpTT04ucGFyc2UocikpfWNhdGNoKHQpe28uZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgcHJvcGVydGllcyB0ZXh0Iix0KX19O2Z1bmN0aW9uIFprKHQsZSl7aWYobnVsbD09dC5wcm9wZXJ0aWVzKXQucHJvcGVydGllcz1lO2Vsc2UgZm9yKHZhciBuIGluIGUpdC5wcm9wZXJ0aWVzW25dPWVbbl19dmFyIFFrPWZ1bmN0aW9uKHQsZSl7dmFyIG49cWsodCkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLnRleHQpO3RyeXt2YXIgaT1yLmlubmVySFRNTCxhPUpTT04ucGFyc2UoaSk7YS5wcm9wZXJ0aWVzJiZaayhuLGEucHJvcGVydGllcyksYS5saW5rcyYmR2sobixhLmxpbmtzKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIsdCl9fSxLaz1mdW5jdGlvbih0KXtSaz10LnRleHQsRms9dm9pZCAwPT09dC53cmFwJiZIaygpfHwhIXQud3JhcH07Y29uc3QgSms9e2FkZEFjdG9yOllrLGFkZE1lc3NhZ2U6ZnVuY3Rpb24odCxlLG4scil7TGsucHVzaCh7ZnJvbTp0LHRvOmUsbWVzc2FnZTpuLnRleHQsd3JhcDp2b2lkIDA9PT1uLndyYXAmJkhrKCl8fCEhbi53cmFwLGFuc3dlcjpyfSl9LGFkZFNpZ25hbDpVayxhZGRMaW5rczpWayxhZGREZXRhaWxzOlFrLGFkZFByb3BlcnRpZXM6WGssYXV0b1dyYXA6SGssc2V0V3JhcDpmdW5jdGlvbih0KXtqaz10fSxlbmFibGVTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXtQaz0hMH0sc2hvd1NlcXVlbmNlTnVtYmVyczpmdW5jdGlvbigpe3JldHVybiBQa30sZ2V0TWVzc2FnZXM6ZnVuY3Rpb24oKXtyZXR1cm4gTGt9LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiBCa30sZ2V0QWN0b3I6cWssZ2V0QWN0b3JLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKEJrKX0sZ2V0QWN0b3JQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXQmJnZvaWQgMCE9PXQucHJvcGVydGllcylyZXR1cm4gdC5wcm9wZXJ0aWVzW2VdfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBSa30scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3NDLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gSnYoKS5zZXF1ZW5jZX0sZ2V0VGl0bGVXcmFwcGVkOmZ1bmN0aW9uKCl7cmV0dXJuIEZrfSxjbGVhcjpmdW5jdGlvbigpe0JrPXt9LExrPVtdfSxwYXJzZU1lc3NhZ2U6ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj17dGV4dDplLnJlcGxhY2UoL15bOl0/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6bnVsbCE9PWUubWF0Y2goL15bOl0/d3JhcDovKXx8bnVsbD09PWUubWF0Y2goL15bOl0/bm93cmFwOi8pJiZ2b2lkIDB9O3JldHVybiBvLmRlYnVnKCJwYXJzZU1lc3NhZ2U6IixuKSxufSxMSU5FVFlQRTokayxBUlJPV1RZUEU6e0ZJTExFRDowLE9QRU46MX0sUExBQ0VNRU5UOntMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxhZGROb3RlOldrLHNldFRpdGxlOktrLGFwcGx5OmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIEFycmF5KWUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dChlKX0pKTtlbHNlIHN3aXRjaChlLnR5cGUpe2Nhc2UiYWRkUGFydGljaXBhbnQiOllrKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLCJwYXJ0aWNpcGFudCIpO2JyZWFrO2Nhc2UiYWRkQWN0b3IiOllrKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLCJhY3RvciIpO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOmNhc2UiYWN0aXZlRW5kIjpVayhlLmFjdG9yLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOldrKGUuYWN0b3IsZS5wbGFjZW1lbnQsZS50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpWayhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRBTGluayI6IWZ1bmN0aW9uKHQsZSl7dmFyIG49cWsodCk7dHJ5e3ZhciByPXt9LGk9Rm0oZS50ZXh0LEp2KCkpLGE9aS5pbmRleE9mKCJAIikscz0oaT0oaT1pLnJlcGxhY2UoLyZhbXA7L2csIiYiKSkucmVwbGFjZSgvJmVxdWFsczsvZywiPSIpKS5zbGljZSgwLGEtMSkudHJpbSgpLGM9aS5zbGljZShhKzEpLnRyaW0oKTtyW3NdPWMsR2sobixyKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIsdCl9fShlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpYayhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGREZXRhaWxzIjpRayhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRNZXNzYWdlIjpVayhlLmZyb20sZS50byxlLm1zZyxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcFN0YXJ0IjpVayh2b2lkIDAsdm9pZCAwLGUubG9vcFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BFbmQiOmNhc2UicmVjdEVuZCI6Y2FzZSJvcHRFbmQiOmNhc2UiYWx0RW5kIjpjYXNlInBhckVuZCI6VWsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6VWsodm9pZCAwLHZvaWQgMCxlLmNvbG9yLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6VWsodm9pZCAwLHZvaWQgMCxlLm9wdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpjYXNlImVsc2UiOlVrKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRUaXRsZSI6S2soZS50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0IjpjYXNlImFuZCI6VWsodm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKX19fTt2YXIgdFQ9W10sZVQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sblQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtuPWZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KTtuWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7YVQoImFjdG9yIitlKyJfcG9wdXAiKX0pKSxuWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtvVCgiYWN0b3IiK2UrIl9wb3B1cCIpfSkpfSx0VC5wdXNoKG4pfSxyVD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LmFwcGVuZCgiaW1hZ2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIsbik7dmFyIGE9KDAsT20uc2FuaXRpemVVcmwpKHIpO2kuYXR0cigieGxpbms6aHJlZiIsYSl9LGlUPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJ1c2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIsbik7dmFyIGE9KDAsT20uc2FuaXRpemVVcmwpKHIpO2kuYXR0cigieGxpbms6aHJlZiIsIiMiK2EpfSxhVD1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtudWxsIT1lJiYoZS5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxvVD1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtudWxsIT1lJiYoZS5zdHlsZS5kaXNwbGF5PSJub25lIil9LHNUPWZ1bmN0aW9uKHQsZSl7dmFyIG49MCxyPTAsaT1lLnRleHQuc3BsaXQoVW0ubGluZUJyZWFrUmVnZXgpLGE9W10sbz0wLHM9ZnVuY3Rpb24oKXtyZXR1cm4gZS55fTtpZih2b2lkIDAhPT1lLnZhbGlnbiYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZlLnRleHRNYXJnaW4+MClzd2l0Y2goZS52YWxpZ24pe2Nhc2UidG9wIjpjYXNlInN0YXJ0IjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55K2UudGV4dE1hcmdpbil9O2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueSsobityK2UudGV4dE1hcmdpbikvMil9O2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueSsobityKzIqZS50ZXh0TWFyZ2luKS1lLnRleHRNYXJnaW4pfX1pZih2b2lkIDAhPT1lLmFuY2hvciYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZ2b2lkIDAhPT1lLndpZHRoKXN3aXRjaChlLmFuY2hvcil7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjplLng9TWF0aC5yb3VuZChlLngrZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0ic3RhcnQiLGUuZG9taW5hbnRCYXNlbGluZT0idGV4dC1hZnRlci1lZGdlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgvMiksZS5hbmNob3I9Im1pZGRsZSIsZS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLWUudGV4dE1hcmdpbiksZS5hbmNob3I9ImVuZCIsZS5kb21pbmFudEJhc2VsaW5lPSJ0ZXh0LWJlZm9yZS1lZGdlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUifWZvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdO3ZvaWQgMCE9PWUudGV4dE1hcmdpbiYmMD09PWUudGV4dE1hcmdpbiYmdm9pZCAwIT09ZS5mb250U2l6ZSYmKG89YyplLmZvbnRTaXplKTt2YXIgbD10LmFwcGVuZCgidGV4dCIpO2lmKGwuYXR0cigieCIsZS54KSxsLmF0dHIoInkiLHMoKSksdm9pZCAwIT09ZS5hbmNob3ImJmwuYXR0cigidGV4dC1hbmNob3IiLGUuYW5jaG9yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsZS5kb21pbmFudEJhc2VsaW5lKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLGUuYWxpZ25tZW50QmFzZWxpbmUpLHZvaWQgMCE9PWUuZm9udEZhbWlseSYmbC5zdHlsZSgiZm9udC1mYW1pbHkiLGUuZm9udEZhbWlseSksdm9pZCAwIT09ZS5mb250U2l6ZSYmbC5zdHlsZSgiZm9udC1zaXplIixlLmZvbnRTaXplKSx2b2lkIDAhPT1lLmZvbnRXZWlnaHQmJmwuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLHZvaWQgMCE9PWUuZmlsbCYmbC5hdHRyKCJmaWxsIixlLmZpbGwpLHZvaWQgMCE9PWUuY2xhc3MmJmwuYXR0cigiY2xhc3MiLGUuY2xhc3MpLHZvaWQgMCE9PWUuZHk/bC5hdHRyKCJkeSIsZS5keSk6MCE9PW8mJmwuYXR0cigiZHkiLG8pLGUudHNwYW4pe3ZhciBoPWwuYXBwZW5kKCJ0c3BhbiIpO2guYXR0cigieCIsZS54KSx2b2lkIDAhPT1lLmZpbGwmJmguYXR0cigiZmlsbCIsZS5maWxsKSxoLnRleHQodSl9ZWxzZSBsLnRleHQodSk7dm9pZCAwIT09ZS52YWxpZ24mJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmZS50ZXh0TWFyZ2luPjAmJihyKz0obC5fZ3JvdXBzfHxsKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0LG49ciksYS5wdXNoKGwpfXJldHVybiBhfSxjVD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIG4uYXR0cigicG9pbnRzIixmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB0KyIsIitlKyIgIisodCtuKSsiLCIrZSsiICIrKHQrbikrIiwiKyhlK3ItNykrIiAiKyh0K24tOC40KSsiLCIrKGUrcikrIiAiK3QrIiwiKyhlK3IpfShlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpKSxuLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxlLnk9ZS55K2UuaGVpZ2h0LzIsc1QodCxlKSxufSx1VD0tMSxsVD1mdW5jdGlvbih0LGUpe3Quc2VsZWN0QWxsJiZ0LnNlbGVjdEFsbCgiLmFjdG9yLWxpbmUiKS5hdHRyKCJjbGFzcyIsIjIwMCIpLmF0dHIoInkyIixlLTU1KX0saFQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSxmVD1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sZFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksYSxvLHMpe3IoZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaStvLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh0KSxzKX1mdW5jdGlvbiBlKHQsZSxuLGksYSxvLHMsYyl7Zm9yKHZhciB1PWMuYWN0b3JGb250U2l6ZSxsPWMuYWN0b3JGb250RmFtaWx5LGg9Yy5hY3RvckZvbnRXZWlnaHQsZj10LnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqdS11KihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsdSkuc3R5bGUoImZvbnQtd2VpZ2h0IixoKS5zdHlsZSgiZm9udC1mYW1pbHkiLGwpO3kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSx5LmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscih5LHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsdSl7dmFyIGw9bi5hcHBlbmQoInN3aXRjaCIpLGg9bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKSxwVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyl7cihlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4pLmF0dHIoInkiLGkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikudGV4dCh0KSxzKX1mdW5jdGlvbiBlKHQsZSxuLGksYSxvLHMsYyl7Zm9yKHZhciB1PWMuYWN0b3JGb250U2l6ZSxsPWMuYWN0b3JGb250RmFtaWx5LGg9Yy5hY3RvckZvbnRXZWlnaHQsZj10LnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqdS11KihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnN0eWxlKCJmb250LXNpemUiLHUpLnN0eWxlKCJmb250LXdlaWdodCIsaCkuc3R5bGUoImZvbnQtZmFtaWx5IixsKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSx5LmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscih5LHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsdSl7dmFyIGw9bi5hcHBlbmQoInN3aXRjaCIpLGg9bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSwwLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKTtjb25zdCB5VD1lVCxnVD1mdW5jdGlvbih0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLngrZS53aWR0aC8yOzA9PT1lLnkmJih1VCsrLHQuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrdVQpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsODApLmF0dHIoIngyIixyKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSk7dmFyIGk9dC5hcHBlbmQoImciKTtpLmF0dHIoImNsYXNzIiwiYWN0b3ItbWFuIik7dmFyIGE9e3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9O2EueD1lLngsYS55PWUueSxhLmZpbGw9IiNlYWVhZWEiLGEud2lkdGg9ZS53aWR0aCxhLmhlaWdodD1lLmhlaWdodCxhLmNsYXNzPSJhY3RvciIsYS5yeD0zLGEucnk9MyxpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLXRvcnNvIit1VCkuYXR0cigieDEiLHIpLmF0dHIoInkxIixlLnkrMjUpLmF0dHIoIngyIixyKS5hdHRyKCJ5MiIsZS55KzQ1KSxpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLWFybXMiK3VUKS5hdHRyKCJ4MSIsci0xOCkuYXR0cigieTEiLGUueSszMykuYXR0cigieDIiLHIrMTgpLmF0dHIoInkyIixlLnkrMzMpLGkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHItMTgpLmF0dHIoInkxIixlLnkrNjApLmF0dHIoIngyIixyKS5hdHRyKCJ5MiIsZS55KzQ1KSxpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsZS55KzQ1KS5hdHRyKCJ4MiIscisxNikuYXR0cigieTIiLGUueSs2MCk7dmFyIG89aS5hcHBlbmQoImNpcmNsZSIpO28uYXR0cigiY3giLGUueCtlLndpZHRoLzIpLG8uYXR0cigiY3kiLGUueSsxMCksby5hdHRyKCJyIiwxNSksby5hdHRyKCJ3aWR0aCIsZS53aWR0aCksby5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KTt2YXIgcz1pLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUuaGVpZ2h0PXMuaGVpZ2h0LGRUKG4pKGUuZGVzY3JpcHRpb24saSxhLngsYS55KzM1LGEud2lkdGgsYS5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LG4pLGUuaGVpZ2h0fSh0LGUsbik7Y2FzZSJwYXJ0aWNpcGFudCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLngrZS53aWR0aC8yLGk9dC5hcHBlbmQoImciKSxhPWk7MD09PWUueSYmKHVUKyssYS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIit1VCkuYXR0cigieDEiLHIpLmF0dHIoInkxIiw1KS5hdHRyKCJ4MiIscikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IiksYT1pLmFwcGVuZCgiZyIpLGUuYWN0b3JDbnQ9dVQsbnVsbCE9ZS5saW5rcyYmKGEuYXR0cigiaWQiLCJyb290LSIrdVQpLG5UKCIjcm9vdC0iK3VULHVUKSkpO3ZhciBvPXt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfSxzPSJhY3RvciI7bnVsbCE9ZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuY2xhc3M/cz1lLnByb3BlcnRpZXMuY2xhc3M6by5maWxsPSIjZWFlYWVhIixvLng9ZS54LG8ueT1lLnksby53aWR0aD1lLndpZHRoLG8uaGVpZ2h0PWUuaGVpZ2h0LG8uY2xhc3M9cyxvLnJ4PTMsby5yeT0zO3ZhciBjPWVUKGEsbyk7aWYoZS5yZWN0RGF0YT1vLG51bGwhPWUucHJvcGVydGllcyYmZS5wcm9wZXJ0aWVzLmljb24pe3ZhciB1PWUucHJvcGVydGllcy5pY29uLnRyaW0oKTsiQCI9PT11LmNoYXJBdCgwKT9pVChhLG8ueCtvLndpZHRoLTIwLG8ueSsxMCx1LnN1YnN0cigxKSk6clQoYSxvLngrby53aWR0aC0yMCxvLnkrMTAsdSl9ZFQobikoZS5kZXNjcmlwdGlvbixhLG8ueCxvLnksby53aWR0aCxvLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sbik7dmFyIGw9ZS5oZWlnaHQ7aWYoYy5ub2RlKXt2YXIgaD1jLm5vZGUoKS5nZXRCQm94KCk7ZS5oZWlnaHQ9aC5oZWlnaHQsbD1oLmhlaWdodH1yZXR1cm4gbH0odCxlLG4pfX0sbVQ9ZnVuY3Rpb24odCxlLG4scixpKXtpZih2b2lkIDA9PT1lLmxpbmtzfHxudWxsPT09ZS5saW5rc3x8MD09PU9iamVjdC5rZXlzKGUubGlua3MpLmxlbmd0aClyZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH07dmFyIGE9ZS5saW5rcyxvPWUuYWN0b3JDbnQscz1lLnJlY3REYXRhLGM9Im5vbmUiO2kmJihjPSJibG9jayAhaW1wb3J0YW50Iik7dmFyIHU9dC5hcHBlbmQoImciKTt1LmF0dHIoImlkIiwiYWN0b3IiK28rIl9wb3B1cCIpLHUuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudSIpLHUuYXR0cigiZGlzcGxheSIsYyksblQoIiNhY3RvciIrbysiX3BvcHVwIixvKTt2YXIgbD0iIjt2b2lkIDAhPT1zLmNsYXNzJiYobD0iICIrcy5jbGFzcyk7dmFyIGg9cy53aWR0aD5uP3Mud2lkdGg6bixmPXUuYXBwZW5kKCJyZWN0Iik7aWYoZi5hdHRyKCJjbGFzcyIsImFjdG9yUG9wdXBNZW51UGFuZWwiK2wpLGYuYXR0cigieCIscy54KSxmLmF0dHIoInkiLHMuaGVpZ2h0KSxmLmF0dHIoImZpbGwiLHMuZmlsbCksZi5hdHRyKCJzdHJva2UiLHMuc3Ryb2tlKSxmLmF0dHIoIndpZHRoIixoKSxmLmF0dHIoImhlaWdodCIscy5oZWlnaHQpLGYuYXR0cigicngiLHMucngpLGYuYXR0cigicnkiLHMucnkpLG51bGwhPWEpe3ZhciBkPTIwO2Zvcih2YXIgcCBpbiBhKXt2YXIgeT11LmFwcGVuZCgiYSIpLGc9KDAsT20uc2FuaXRpemVVcmwpKGFbcF0pO3kuYXR0cigieGxpbms6aHJlZiIsZykseS5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSxwVChyKShwLHkscy54KzEwLHMuaGVpZ2h0K2QsaCwyMCx7Y2xhc3M6ImFjdG9yIn0sciksZCs9MzB9fXJldHVybiBmLmF0dHIoImhlaWdodCIsZCkse2hlaWdodDpzLmhlaWdodCtkLHdpZHRoOmh9fSx2VD1mdW5jdGlvbih0KXtyZXR1cm4gdC5hcHBlbmQoImciKX0sYlQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYT17eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH0sbz1lLmFuY2hvcmVkO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS5jbGFzcz0iYWN0aXZhdGlvbiIraSUzLGEud2lkdGg9ZS5zdG9weC1lLnN0YXJ0eCxhLmhlaWdodD1uLWUuc3RhcnR5LGVUKG8sYSl9LF9UPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXIuYm94TWFyZ2luLGE9ci5ib3hUZXh0TWFyZ2luLG89ci5sYWJlbEJveEhlaWdodCxzPXIubGFiZWxCb3hXaWR0aCxjPXIubWVzc2FnZUZvbnRGYW1pbHksdT1yLm1lc3NhZ2VGb250U2l6ZSxsPXIubWVzc2FnZUZvbnRXZWlnaHQsaD10LmFwcGVuZCgiZyIpLGY9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGguYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHQpLmF0dHIoInkxIixlKS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLHIpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07ZihlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxmKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLHZvaWQgMCE9PWUuc2VjdGlvbnMmJmUuc2VjdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZihlLnN0YXJ0eCx0LnksZS5zdG9weCx0LnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSkpO3ZhciBkPXt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjp2b2lkIDAsc3R5bGU6IiM2NjYiLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITAsdmFsaWduOnZvaWQgMH07ZC50ZXh0PW4sZC54PWUuc3RhcnR4LGQueT1lLnN0YXJ0eSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLndpZHRoPXN8fDUwLGQuaGVpZ2h0PW98fDIwLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9ImxhYmVsVGV4dCIsY1QoaCxkKSwoZD17eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9KS50ZXh0PWUudGl0bGUsZC54PWUuc3RhcnR4K3MvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zdGFydHkraSthLGQuYW5jaG9yPSJtaWRkbGUiLGQudmFsaWduPSJtaWRkbGUiLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9Imxvb3BUZXh0IixkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPSEwO3ZhciBwPXNUKGgsZCk7cmV0dXJuIHZvaWQgMCE9PWUuc2VjdGlvblRpdGxlcyYmZS5zZWN0aW9uVGl0bGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7aWYodC5tZXNzYWdlKXtkLnRleHQ9dC5tZXNzYWdlLGQueD1lLnN0YXJ0eCsoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zZWN0aW9uc1tuXS55K2krYSxkLmNsYXNzPSJsb29wVGV4dCIsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPWUud3JhcCxwPXNUKGgsZCk7dmFyIHI9TWF0aC5yb3VuZChwLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7ZS5zZWN0aW9uc1tuXS5oZWlnaHQrPXItKGkrYSl9fSkpLGUuaGVpZ2h0PU1hdGgucm91bmQoZS5zdG9weS1lLnN0YXJ0eSksaH0seFQ9ZnVuY3Rpb24odCxlKXtlVCh0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSx3VD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSxrVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxUVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LEVUPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLGUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LENUPWZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSxTVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxBVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSxNVD1oVCxOVD1mVDtPbS5zYW5pdGl6ZVVybDtOay5wYXJzZXIueXk9Sms7dmFyIERUPXt9LE9UPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsMD09PXRoaXMuYWN0b3JzLmxlbmd0aD9bMF06dGhpcy5hY3RvcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkpKygwPT09dGhpcy5sb29wcy5sZW5ndGg/MDp0aGlzLmxvb3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKSsoMD09PXRoaXMubWVzc2FnZXMubGVuZ3RoPzA6dGhpcy5tZXNzYWdlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSkrKDA9PT10aGlzLm5vdGVzLmxlbmd0aD8wOnRoaXMubm90ZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuYWN0b3JzPVtdLHRoaXMubG9vcHM9W10sdGhpcy5tZXNzYWdlcz1bXSx0aGlzLm5vdGVzPVtdfSxhZGRBY3RvcjpmdW5jdGlvbih0KXt0aGlzLmFjdG9ycy5wdXNoKHQpfSxhZGRMb29wOmZ1bmN0aW9uKHQpe3RoaXMubG9vcHMucHVzaCh0KX0sYWRkTWVzc2FnZTpmdW5jdGlvbih0KXt0aGlzLm1lc3NhZ2VzLnB1c2godCl9LGFkZE5vdGU6ZnVuY3Rpb24odCl7dGhpcy5ub3Rlcy5wdXNoKHQpfSxsYXN0QWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoLTFdfSxsYXN0TG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoLTFdfSxsYXN0TWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoLTFdfSxsYXN0Tm90ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGVzW3RoaXMubm90ZXMubGVuZ3RoLTFdfSxhY3RvcnM6W10sbG9vcHM6W10sbWVzc2FnZXM6W10sbm90ZXM6W119LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5hY3RpdmF0aW9ucz1bXSx0aGlzLm1vZGVscy5jbGVhcigpLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MCxQVChOay5wYXJzZXIueXkuZ2V0Q29uZmlnKCkpfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLGE9MDtmdW5jdGlvbiBvKG8pe3JldHVybiBmdW5jdGlvbihzKXthKys7dmFyIGM9aS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1hKzE7aS51cGRhdGVWYWwocywic3RhcnR5IixlLWMqRFQuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChzLCJzdG9weSIscitjKkRULmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwoT1QuZGF0YSwic3RhcnR4Iix0LWMqRFQuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChPVC5kYXRhLCJzdG9weCIsbitjKkRULmJveE1hcmdpbixNYXRoLm1heCksImFjdGl2YXRpb24iIT09byYmKGkudXBkYXRlVmFsKHMsInN0YXJ0eCIsdC1jKkRULmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwocywic3RvcHgiLG4rYypEVC5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKE9ULmRhdGEsInN0YXJ0eSIsZS1jKkRULmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoT1QuZGF0YSwic3RvcHkiLHIrYypEVC5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2gobygpKSx0aGlzLmFjdGl2YXRpb25zLmZvckVhY2gobygiYWN0aXZhdGlvbiIpKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoT1QuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChPVC5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKE9ULmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChPVC5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LG5ld0FjdGl2YXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5bdC5mcm9tLmFjdG9yXSxpPWpUKHQuZnJvbS5hY3RvcikubGVuZ3RofHwwLGE9ci54K3Iud2lkdGgvMisoaS0xKSpEVC5hY3RpdmF0aW9uV2lkdGgvMjt0aGlzLmFjdGl2YXRpb25zLnB1c2goe3N0YXJ0eDphLHN0YXJ0eTp0aGlzLnZlcnRpY2FsUG9zKzIsc3RvcHg6YStEVC5hY3RpdmF0aW9uV2lkdGgsc3RvcHk6dm9pZCAwLGFjdG9yOnQuZnJvbS5hY3RvcixhbmNob3JlZDp2VChlKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LG5ld0xvb3A6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0LGUpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5Ok9ULmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKHQpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyt0LHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sQlQ9ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9fSxMVD1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH19LElUPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fX0sUlQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPTAsYT0wLG89MCxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBjPWVbbltzXV07Yy53aWR0aD1jLndpZHRofHxEVC53aWR0aCxjLmhlaWdodD1NYXRoLm1heChjLmhlaWdodHx8RFQuaGVpZ2h0LERULmhlaWdodCksYy5tYXJnaW49Yy5tYXJnaW58fERULmFjdG9yTWFyZ2luLGMueD1pK2EsYy55PXI7dmFyIHU9Z1QodCxjLERUKTtvPU1hdGgubWF4KG8sdSksT1QuaW5zZXJ0KGMueCxyLGMueCtjLndpZHRoLGMuaGVpZ2h0KSxpKz1jLndpZHRoLGErPWMubWFyZ2luLE9ULm1vZGVscy5hZGRBY3RvcihjKX1PVC5idW1wVmVydGljYWxQb3Mobyl9LEZUPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MCxpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1lW25bYV1dLHM9VVQobyksYz1tVCh0LG8scyxEVCxEVC5mb3JjZU1lbnVzKTtjLmhlaWdodD5yJiYocj1jLmhlaWdodCksYy53aWR0aCtvLng+aSYmKGk9Yy53aWR0aCtvLngpfXJldHVybnttYXhIZWlnaHQ6cixtYXhXaWR0aDppfX0sUFQ9ZnVuY3Rpb24odCl7THYoRFQsdCksdC5mb250RmFtaWx5JiYoRFQuYWN0b3JGb250RmFtaWx5PURULm5vdGVGb250RmFtaWx5PURULm1lc3NhZ2VGb250RmFtaWx5PXQuZm9udEZhbWlseSksdC5mb250U2l6ZSYmKERULmFjdG9yRm9udFNpemU9RFQubm90ZUZvbnRTaXplPURULm1lc3NhZ2VGb250U2l6ZT10LmZvbnRTaXplKSx0LmZvbnRXZWlnaHQmJihEVC5hY3RvckZvbnRXZWlnaHQ9RFQubm90ZUZvbnRXZWlnaHQ9RFQubWVzc2FnZUZvbnRXZWlnaHQ9dC5mb250V2VpZ2h0KX0salQ9ZnVuY3Rpb24odCl7cmV0dXJuIE9ULmFjdGl2YXRpb25zLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0b3I9PT10fSkpfSxZVD1mdW5jdGlvbih0LGUpe3ZhciBuPWVbdF0scj1qVCh0KTtyZXR1cm5bci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsZS5zdGFydHgpfSksbi54K24ud2lkdGgvMiksci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS5zdG9weCl9KSxuLngrbi53aWR0aC8yKV19O2Z1bmN0aW9uIHpUKHQsZSxuLHIsaSl7T1QuYnVtcFZlcnRpY2FsUG9zKG4pO3ZhciBhPXI7aWYoZS5pZCYmZS5tZXNzYWdlJiZ0W2UuaWRdKXt2YXIgcz10W2UuaWRdLndpZHRoLGM9QlQoRFQpO2UubWVzc2FnZT1Idi53cmFwTGFiZWwoIlsiLmNvbmNhdChlLm1lc3NhZ2UsIl0iKSxzLTIqRFQud3JhcFBhZGRpbmcsYyksZS53aWR0aD1zLGUud3JhcD0hMDt2YXIgdT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhlLm1lc3NhZ2UsYyksbD1NYXRoLm1heCh1LmhlaWdodCxEVC5sYWJlbEJveEhlaWdodCk7YT1yK2wsby5kZWJ1ZygiIi5jb25jYXQobCwiIC0gIikuY29uY2F0KGUubWVzc2FnZSkpfWkoZSksT1QuYnVtcFZlcnRpY2FsUG9zKGEpfXZhciBVVD1mdW5jdGlvbih0KXt2YXIgZT0wLG49SVQoRFQpO2Zvcih2YXIgciBpbiB0LmxpbmtzKXt2YXIgaT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhyLG4pLndpZHRoKzIqRFQud3JhcFBhZGRpbmcrMipEVC5ib3hNYXJnaW47ZTxpJiYoZT1pKX1yZXR1cm4gZX07Y29uc3QgcVQ9e2JvdW5kczpPVCxkcmF3QWN0b3JzOlJULGRyYXdBY3RvcnNQb3B1cDpGVCxzZXRDb25mOlBULGRyYXc6ZnVuY3Rpb24odCxlKXtEVD1KdigpLnNlcXVlbmNlLE5rLnBhcnNlci55eS5jbGVhcigpLE5rLnBhcnNlci55eS5zZXRXcmFwKERULndyYXApLE5rLnBhcnNlci5wYXJzZSh0KyJcbiIpLE9ULmluaXQoKSxvLmRlYnVnKCJDOiIuY29uY2F0KEpTT04uc3RyaW5naWZ5KERULG51bGwsMikpKTt2YXIgbj1hdSgnW2lkPSInLmNvbmNhdChlLCciXScpKSxyPU5rLnBhcnNlci55eS5nZXRBY3RvcnMoKSxpPU5rLnBhcnNlci55eS5nZXRBY3RvcktleXMoKSxhPU5rLnBhcnNlci55eS5nZXRNZXNzYWdlcygpLHM9TmsucGFyc2VyLnl5LmdldFRpdGxlKCksYz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHRbZS50b10mJnRbZS5mcm9tXSl7dmFyIHI9dFtlLnRvXTtpZihlLnBsYWNlbWVudD09PU5rLnBhcnNlci55eS5QTEFDRU1FTlQuTEVGVE9GJiYhci5wcmV2QWN0b3IpcmV0dXJuO2lmKGUucGxhY2VtZW50PT09TmsucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GJiYhci5uZXh0QWN0b3IpcmV0dXJuO3ZhciBpPXZvaWQgMCE9PWUucGxhY2VtZW50LGE9IWksbz1pP0xUKERUKTpCVChEVCkscz1lLndyYXA/SHYud3JhcExhYmVsKGUubWVzc2FnZSxEVC53aWR0aC0yKkRULndyYXBQYWRkaW5nLG8pOmUubWVzc2FnZSxjPUh2LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHMsbykud2lkdGgrMipEVC53cmFwUGFkZGluZzthJiZlLmZyb209PT1yLm5leHRBY3Rvcj9uW2UudG9dPU1hdGgubWF4KG5bZS50b118fDAsYyk6YSYmZS5mcm9tPT09ci5wcmV2QWN0b3I/bltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjKTphJiZlLmZyb209PT1lLnRvPyhuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMiksbltlLnRvXT1NYXRoLm1heChuW2UudG9dfHwwLGMvMikpOmUucGxhY2VtZW50PT09TmsucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GP25bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYyk6ZS5wbGFjZW1lbnQ9PT1Oay5wYXJzZXIueXkuUExBQ0VNRU5ULkxFRlRPRj9uW3IucHJldkFjdG9yXT1NYXRoLm1heChuW3IucHJldkFjdG9yXXx8MCxjKTplLnBsYWNlbWVudD09PU5rLnBhcnNlci55eS5QTEFDRU1FTlQuT1ZFUiYmKHIucHJldkFjdG9yJiYobltyLnByZXZBY3Rvcl09TWF0aC5tYXgobltyLnByZXZBY3Rvcl18fDAsYy8yKSksci5uZXh0QWN0b3ImJihuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMikpKX19KSksby5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixuKSxufShyLGEpO0RULmhlaWdodD1mdW5jdGlvbih0LGUpe3ZhciBuPTA7Zm9yKHZhciByIGluIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPXRbZV07ci53cmFwJiYoci5kZXNjcmlwdGlvbj1Idi53cmFwTGFiZWwoci5kZXNjcmlwdGlvbixEVC53aWR0aC0yKkRULndyYXBQYWRkaW5nLElUKERUKSkpO3ZhciBpPUh2LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHIuZGVzY3JpcHRpb24sSVQoRFQpKTtyLndpZHRoPXIud3JhcD9EVC53aWR0aDpNYXRoLm1heChEVC53aWR0aCxpLndpZHRoKzIqRFQud3JhcFBhZGRpbmcpLHIuaGVpZ2h0PXIud3JhcD9NYXRoLm1heChpLmhlaWdodCxEVC5oZWlnaHQpOkRULmhlaWdodCxuPU1hdGgubWF4KG4sci5oZWlnaHQpfSkpLGUpe3ZhciBpPXRbcl07aWYoaSl7dmFyIGE9dFtpLm5leHRBY3Rvcl07aWYoYSl7dmFyIG89ZVtyXStEVC5hY3Rvck1hcmdpbi1pLndpZHRoLzItYS53aWR0aC8yO2kubWFyZ2luPU1hdGgubWF4KG8sRFQuYWN0b3JNYXJnaW4pfX19cmV0dXJuIE1hdGgubWF4KG4sRFQuaGVpZ2h0KX0ocixjKSxTVChuKSxDVChuKSxBVChuKSxSVChuLHIsaSwwKTt2YXIgdT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXt9LHM9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7c3dpdGNoKHQuaWQ9SHYucmFuZG9tKHtsZW5ndGg6MTB9KSx0LnR5cGUpe2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUxUX1NUQVJUOmNhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfU1RBUlQ6cy5wdXNoKHtpZDp0LmlkLG1zZzp0Lm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuUEFSX0FORDp0Lm1lc3NhZ2UmJihuPXMucG9wKCksYVtuLmlkXT1uLGFbdC5pZF09bixzLnB1c2gobikpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmNhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuT1BUX0VORDpjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfRU5EOm49cy5wb3AoKSxhW24uaWRdPW47YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOnZhciBjPWVbdC5mcm9tP3QuZnJvbS5hY3Rvcjp0LnRvLmFjdG9yXSx1PWpUKHQuZnJvbT90LmZyb20uYWN0b3I6dC50by5hY3RvcikubGVuZ3RoLGw9Yy54K2Mud2lkdGgvMisodS0xKSpEVC5hY3RpdmF0aW9uV2lkdGgvMixoPXtzdGFydHg6bCxzdG9weDpsK0RULmFjdGl2YXRpb25XaWR0aCxhY3Rvcjp0LmZyb20uYWN0b3IsZW5hYmxlZDohMH07T1QuYWN0aXZhdGlvbnMucHVzaChoKTticmVhaztjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfRU5EOnZhciBmPU9ULmFjdGl2YXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWN0b3J9KSkubGFzdEluZGV4T2YodC5mcm9tLmFjdG9yKTtkZWxldGUgT1QuYWN0aXZhdGlvbnMuc3BsaWNlKGYsMSlbMF19dm9pZCAwIT09dC5wbGFjZW1lbnQ/KHI9ZnVuY3Rpb24odCxlKXt2YXIgbj1lW3QuZnJvbV0ueCxyPWVbdC50b10ueCxpPXQud3JhcCYmdC5tZXNzYWdlLGE9SHYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT9Idi53cmFwTGFiZWwodC5tZXNzYWdlLERULndpZHRoLExUKERUKSk6dC5tZXNzYWdlLExUKERUKSkscz17d2lkdGg6aT9EVC53aWR0aDpNYXRoLm1heChEVC53aWR0aCxhLndpZHRoKzIqRFQubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OmVbdC5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZX07cmV0dXJuIHQucGxhY2VtZW50PT09TmsucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GPyhzLndpZHRoPWk/TWF0aC5tYXgoRFQud2lkdGgsYS53aWR0aCk6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipEVC5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uKyhlW3QuZnJvbV0ud2lkdGgrRFQuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09TmsucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/KHMud2lkdGg9aT9NYXRoLm1heChEVC53aWR0aCxhLndpZHRoKzIqRFQubm90ZU1hcmdpbik6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipEVC5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uLXMud2lkdGgrKGVbdC5mcm9tXS53aWR0aC1EVC5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8oYT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpP0h2LndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoRFQud2lkdGgsZVt0LmZyb21dLndpZHRoKSxMVChEVCkpOnQubWVzc2FnZSxMVChEVCkpLHMud2lkdGg9aT9NYXRoLm1heChEVC53aWR0aCxlW3QuZnJvbV0ud2lkdGgpOk1hdGgubWF4KGVbdC5mcm9tXS53aWR0aCxEVC53aWR0aCxhLndpZHRoKzIqRFQubm90ZU1hcmdpbikscy5zdGFydHg9bisoZVt0LmZyb21dLndpZHRoLXMud2lkdGgpLzIpOihzLndpZHRoPU1hdGguYWJzKG4rZVt0LmZyb21dLndpZHRoLzItKHIrZVt0LnRvXS53aWR0aC8yKSkrRFQuYWN0b3JNYXJnaW4scy5zdGFydHg9bjxyP24rZVt0LmZyb21dLndpZHRoLzItRFQuYWN0b3JNYXJnaW4vMjpyK2VbdC50b10ud2lkdGgvMi1EVC5hY3Rvck1hcmdpbi8yKSxpJiYocy5tZXNzYWdlPUh2LndyYXBMYWJlbCh0Lm1lc3NhZ2Uscy53aWR0aC0yKkRULndyYXBQYWRkaW5nLExUKERUKSkpLG8uZGVidWcoIk5NOlsiLmNvbmNhdChzLnN0YXJ0eCwiLCIpLmNvbmNhdChzLnN0b3B4LCIsIikuY29uY2F0KHMuc3RhcnR5LCIsIikuY29uY2F0KHMuc3RvcHksIjoiKS5jb25jYXQocy53aWR0aCwiLCIpLmNvbmNhdChzLmhlaWdodCwiPSIpLmNvbmNhdCh0Lm1lc3NhZ2UsIl0iKSksc30odCxlKSx0Lm5vdGVNb2RlbD1yLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7KG49dCkuZnJvbT1NYXRoLm1pbihuLmZyb20sci5zdGFydHgpLG4udG89TWF0aC5tYXgobi50byxyLnN0YXJ0eCtyLndpZHRoKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsTWF0aC5hYnMobi5mcm9tLW4udG8pKS1EVC5sYWJlbEJveFdpZHRofSkpKTooaT1mdW5jdGlvbih0LGUpe3ZhciBuPSExO2lmKFtOay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixOay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4sTmsucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELE5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsTmsucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLE5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsTmsucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULE5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJihuPSEwKSwhbilyZXR1cm57fTt2YXIgcj1ZVCh0LmZyb20sZSksaT1ZVCh0LnRvLGUpLGE9clswXTw9aVswXT8xOjAsbz1yWzBdPGlbMF0/MDoxLHM9ci5jb25jYXQoaSksYz1NYXRoLmFicyhpW29dLXJbYV0pO3Qud3JhcCYmdC5tZXNzYWdlJiYodC5tZXNzYWdlPUh2LndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoYysyKkRULndyYXBQYWRkaW5nLERULndpZHRoKSxCVChEVCkpKTt2YXIgdT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0Lm1lc3NhZ2UsQlQoRFQpKTtyZXR1cm57d2lkdGg6TWF0aC5tYXgodC53cmFwPzA6dS53aWR0aCsyKkRULndyYXBQYWRkaW5nLGMrMipEVC53cmFwUGFkZGluZyxEVC53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnJbYV0sc3RvcHg6aVtvXSxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxzKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHMpfX0odCxlKSx0Lm1zZ01vZGVsPWksaS5zdGFydHgmJmkuc3RvcHgmJnMubGVuZ3RoPjAmJnMuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYobj1yLGkuc3RhcnR4PT09aS5zdG9weCl7dmFyIGE9ZVt0LmZyb21dLG89ZVt0LnRvXTtuLmZyb209TWF0aC5taW4oYS54LWkud2lkdGgvMixhLngtYS53aWR0aC8yLG4uZnJvbSksbi50bz1NYXRoLm1heChvLngraS53aWR0aC8yLG8ueCthLndpZHRoLzIsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLE1hdGguYWJzKG4udG8tbi5mcm9tKSktRFQubGFiZWxCb3hXaWR0aH1lbHNlIG4uZnJvbT1NYXRoLm1pbihpLnN0YXJ0eCxuLmZyb20pLG4udG89TWF0aC5tYXgoaS5zdG9weCxuLnRvKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsaS53aWR0aCktRFQubGFiZWxCb3hXaWR0aH0pKSl9KSksT1QuYWN0aXZhdGlvbnM9W10sby5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGEpLGF9KGEscik7d1QobiksRVQobiksa1QobiksVFQobik7dmFyIGw9MTthLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLGksYTtzd2l0Y2godC50eXBlKXtjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5OT1RFOmk9dC5ub3RlTW9kZWwsZnVuY3Rpb24odCxlKXtPVC5idW1wVmVydGljYWxQb3MoRFQuYm94TWFyZ2luKSxlLmhlaWdodD1EVC5ib3hNYXJnaW4sZS5zdGFydHk9T1QuZ2V0VmVydGljYWxQb3MoKTt2YXIgbj1OVCgpO24ueD1lLnN0YXJ0eCxuLnk9ZS5zdGFydHksbi53aWR0aD1lLndpZHRofHxEVC53aWR0aCxuLmNsYXNzPSJub3RlIjt2YXIgcj10LmFwcGVuZCgiZyIpLGk9eVQocixuKSxhPU1UKCk7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLndpZHRoPW4ud2lkdGgsYS5keT0iMWVtIixhLnRleHQ9ZS5tZXNzYWdlLGEuY2xhc3M9Im5vdGVUZXh0IixhLmZvbnRGYW1pbHk9RFQubm90ZUZvbnRGYW1pbHksYS5mb250U2l6ZT1EVC5ub3RlRm9udFNpemUsYS5mb250V2VpZ2h0PURULm5vdGVGb250V2VpZ2h0LGEuYW5jaG9yPURULm5vdGVBbGlnbixhLnRleHRNYXJnaW49RFQubm90ZU1hcmdpbixhLnZhbGlnbj1EVC5ub3RlQWxpZ247dmFyIG89c1QocixhKSxzPU1hdGgucm91bmQoby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0Ll9ncm91cHN8fHQpWzBdWzBdLmdldEJCb3goKS5oZWlnaHR9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpO2kuYXR0cigiaGVpZ2h0IixzKzIqRFQubm90ZU1hcmdpbiksZS5oZWlnaHQrPXMrMipEVC5ub3RlTWFyZ2luLE9ULmJ1bXBWZXJ0aWNhbFBvcyhzKzIqRFQubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStzKzIqRFQubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K24ud2lkdGgsT1QuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSksT1QubW9kZWxzLmFkZE5vdGUoZSl9KG4saSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOk9ULm5ld0FjdGl2YXRpb24odCxuLHIpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9FTkQ6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9T1QuZW5kQWN0aXZhdGlvbih0KTtyLnN0YXJ0eSsxOD5lJiYoci5zdGFydHk9ZS02LGUrPTEyKSxiVChuLHIsZSxEVCxqVCh0LmZyb20uYWN0b3IpLmxlbmd0aCksT1QuaW5zZXJ0KHIuc3RhcnR4LGUtMTAsci5zdG9weCxlKX0odCxPVC5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX1NUQVJUOnpUKHUsdCxEVC5ib3hNYXJnaW4sRFQuYm94TWFyZ2luK0RULmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBPVC5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmU9T1QuZW5kTG9vcCgpLF9UKG4sZSwibG9vcCIsRFQpLE9ULmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LU9ULmdldFZlcnRpY2FsUG9zKCkpLE9ULm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfU1RBUlQ6elQodSx0LERULmJveE1hcmdpbixEVC5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBPVC5uZXdMb29wKHZvaWQgMCx0Lm1lc3NhZ2UpfSkpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfRU5EOmU9T1QuZW5kTG9vcCgpLHhUKG4sZSksT1QubW9kZWxzLmFkZExvb3AoZSksT1QuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktT1QuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOnpUKHUsdCxEVC5ib3hNYXJnaW4sRFQuYm94TWFyZ2luK0RULmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBPVC5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6ZT1PVC5lbmRMb29wKCksX1QobixlLCJvcHQiLERUKSxPVC5idW1wVmVydGljYWxQb3MoZS5zdG9weS1PVC5nZXRWZXJ0aWNhbFBvcygpKSxPVC5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6elQodSx0LERULmJveE1hcmdpbixEVC5ib3hNYXJnaW4rRFQuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIE9ULm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6elQodSx0LERULmJveE1hcmdpbitEVC5ib3hUZXh0TWFyZ2luLERULmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIE9ULmFkZFNlY3Rpb25Ub0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDplPU9ULmVuZExvb3AoKSxfVChuLGUsImFsdCIsRFQpLE9ULmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LU9ULmdldFZlcnRpY2FsUG9zKCkpLE9ULm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDp6VCh1LHQsRFQuYm94TWFyZ2luLERULmJveE1hcmdpbitEVC5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gT1QubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOnpUKHUsdCxEVC5ib3hNYXJnaW4rRFQuYm94VGV4dE1hcmdpbixEVC5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBPVC5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6ZT1PVC5lbmRMb29wKCksX1QobixlLCJwYXIiLERUKSxPVC5idW1wVmVydGljYWxQb3MoZS5zdG9weS1PVC5nZXRWZXJ0aWNhbFBvcygpKSxPVC5tb2RlbHMuYWRkTG9vcChlKTticmVhaztkZWZhdWx0OnRyeXsoYT10Lm1zZ01vZGVsKS5zdGFydHk9T1QuZ2V0VmVydGljYWxQb3MoKSxhLnNlcXVlbmNlSW5kZXg9bCxmdW5jdGlvbih0LGUpe09ULmJ1bXBWZXJ0aWNhbFBvcygxMCk7dmFyIG49ZS5zdGFydHgscj1lLnN0b3B4LGk9ZS5zdGFydHksYT1lLm1lc3NhZ2Usbz1lLnR5cGUscz1lLnNlcXVlbmNlSW5kZXgsYz1VbS5zcGxpdEJyZWFrcyhhKS5sZW5ndGgsdT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhLEJUKERUKSksbD11LmhlaWdodC9jO2UuaGVpZ2h0Kz1sLE9ULmJ1bXBWZXJ0aWNhbFBvcyhsKTt2YXIgaD1NVCgpO2gueD1uLGgueT1pKzEwLGgud2lkdGg9ci1uLGguY2xhc3M9Im1lc3NhZ2VUZXh0IixoLmR5PSIxZW0iLGgudGV4dD1hLGguZm9udEZhbWlseT1EVC5tZXNzYWdlRm9udEZhbWlseSxoLmZvbnRTaXplPURULm1lc3NhZ2VGb250U2l6ZSxoLmZvbnRXZWlnaHQ9RFQubWVzc2FnZUZvbnRXZWlnaHQsaC5hbmNob3I9RFQubWVzc2FnZUFsaWduLGgudmFsaWduPURULm1lc3NhZ2VBbGlnbixoLnRleHRNYXJnaW49RFQud3JhcFBhZGRpbmcsaC50c3Bhbj0hMSxzVCh0LGgpO3ZhciBmLGQscD11LmhlaWdodC0xMCx5PXUud2lkdGg7aWYobj09PXIpe2Q9T1QuZ2V0VmVydGljYWxQb3MoKStwLERULnJpZ2h0QW5nbGVzP2Y9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAgIi5jb25jYXQobiwiLCIpLmNvbmNhdChkLCIgSCAiKS5jb25jYXQobitNYXRoLm1heChEVC53aWR0aC8yLHkvMiksIiBWICIpLmNvbmNhdChkKzI1LCIgSCAiKS5jb25jYXQobikpOihwKz1EVC5ib3hNYXJnaW4sZD1PVC5nZXRWZXJ0aWNhbFBvcygpK3AsZj10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIrbisiLCIrZCsiIEMgIisobis2MCkrIiwiKyhkLTEwKSsiICIrKG4rNjApKyIsIisoZCszMCkrIiAiK24rIiwiKyhkKzIwKSkpLHArPTMwO3ZhciBnPU1hdGgubWF4KHkvMixEVC53aWR0aC8yKTtPVC5pbnNlcnQobi1nLE9ULmdldFZlcnRpY2FsUG9zKCktMTArcCxyK2csT1QuZ2V0VmVydGljYWxQb3MoKSszMCtwKX1lbHNlIHArPURULmJveE1hcmdpbixkPU9ULmdldFZlcnRpY2FsUG9zKCkrcCwoZj10LmFwcGVuZCgibGluZSIpKS5hdHRyKCJ4MSIsbiksZi5hdHRyKCJ5MSIsZCksZi5hdHRyKCJ4MiIsciksZi5hdHRyKCJ5MiIsZCksT1QuaW5zZXJ0KG4sZC0xMCxyLGQpO289PT1Oay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEfHxvPT09TmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8bz09PU5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlR8fG89PT1Oay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4/KGYuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIiksZi5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMSIpKTpmLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUwIik7dmFyIG09IiI7RFQuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKG09KG09KG09d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZi5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLGYuYXR0cigic3Ryb2tlIiwibm9uZSIpLGYuc3R5bGUoImZpbGwiLCJub25lIiksbyE9PU5rLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRCYmbyE9PU5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUR8fGYuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiNhcnJvd2hlYWQpIiksbyE9PU5rLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9QT0lOVCYmbyE9PU5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlR8fGYuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiNmaWxsZWQtaGVhZCkiKSxvIT09TmsucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTJiZvIT09TmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8Zi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Nyb3NzaGVhZCkiKSwoSmsuc2hvd1NlcXVlbmNlTnVtYmVycygpfHxEVC5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGYuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiI3NlcXVlbmNlbnVtYmVyKSIpLHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbikuYXR0cigieSIsZCs0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0TGVuZ3RoIiwiMTZweCIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KHMpKSxPVC5idW1wVmVydGljYWxQb3MocCksZS5oZWlnaHQrPXAsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxPVC5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSl9KG4sYSksT1QubW9kZWxzLmFkZE1lc3NhZ2UoYSl9Y2F0Y2godCl7by5lcnJvcigiZXJyb3Igd2hpbGUgZHJhd2luZyBtZXNzYWdlIix0KX19W05rLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9PUEVOLE5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTixOay5wYXJzZXIueXkuTElORVRZUEUuU09MSUQsTmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRCxOay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MsTmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxOay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfUE9JTlQsTmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9QT0lOVF0uaW5jbHVkZXModC50eXBlKSYmbCsrfSkpLERULm1pcnJvckFjdG9ycyYmKE9ULmJ1bXBWZXJ0aWNhbFBvcygyKkRULmJveE1hcmdpbiksUlQobixyLGksT1QuZ2V0VmVydGljYWxQb3MoKSksT1QuYnVtcFZlcnRpY2FsUG9zKERULmJveE1hcmdpbiksbFQobixPVC5nZXRWZXJ0aWNhbFBvcygpKSk7dmFyIGg9RlQobixyLGkpLGY9T1QuZ2V0Qm91bmRzKCkuYm91bmRzO28uZGVidWcoIkZvciBsaW5lIGhlaWdodCBmaXggUXVlcnlpbmc6ICMiK2UrIiAuYWN0b3ItbGluZSIpLG91KCIjIitlKyIgLmFjdG9yLWxpbmUiKS5hdHRyKCJ5MiIsZi5zdG9weSk7dmFyIGQ9Zi5zdG9weS1mLnN0YXJ0eTtkPGgubWF4SGVpZ2h0JiYoZD1oLm1heEhlaWdodCk7dmFyIHA9ZCsyKkRULmRpYWdyYW1NYXJnaW5ZO0RULm1pcnJvckFjdG9ycyYmKHA9cC1EVC5ib3hNYXJnaW4rRFQuYm90dG9tTWFyZ2luQWRqKTt2YXIgeT1mLnN0b3B4LWYuc3RhcnR4O3k8aC5tYXhXaWR0aCYmKHk9aC5tYXhXaWR0aCk7dmFyIGc9eSsyKkRULmRpYWdyYW1NYXJnaW5YO3MmJm4uYXBwZW5kKCJ0ZXh0IikudGV4dChzKS5hdHRyKCJ4IiwoZi5zdG9weC1mLnN0YXJ0eCkvMi0yKkRULmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLHp2KG4scCxnLERULnVzZU1heFdpZHRoKTt2YXIgbT1zPzQwOjA7bi5hdHRyKCJ2aWV3Qm94IixmLnN0YXJ0eC1EVC5kaWFncmFtTWFyZ2luWCsiIC0iKyhEVC5kaWFncmFtTWFyZ2luWSttKSsiICIrZysiICIrKHArbSkpLG8uZGVidWcoIm1vZGVsczoiLE9ULm1vZGVscyl9fTt2YXIgSFQ9bigzNTg0KSwkVD1uLm4oSFQpO2Z1bmN0aW9uIFdUKHQpe3JldHVybiBXVD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sV1QodCl9dmFyIFZUPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sR1Q9W10sWFQ9ZnVuY3Rpb24gdChlLG4scil7aWYoInJlbGF0aW9uIj09PW4uc3RtdCl0KGUsbi5zdGF0ZTEsITApLHQoZSxuLnN0YXRlMiwhMSk7ZWxzZSBpZigic3RhdGUiPT09bi5zdG10JiYiWypdIj09PW4uaWQmJihuLmlkPXI/ZS5pZCsiX3N0YXJ0IjplLmlkKyJfZW5kIixuLnN0YXJ0PXIpLG4uZG9jKXt2YXIgaT1bXSxhPTAsbz1bXTtmb3IoYT0wO2E8bi5kb2MubGVuZ3RoO2ErKylpZigiZGl2aWRlciI9PT1uLmRvY1thXS50eXBlKXt2YXIgcz1WVChuLmRvY1thXSk7cy5kb2M9VlQobyksaS5wdXNoKHMpLG89W119ZWxzZSBvLnB1c2gobi5kb2NbYV0pO2lmKGkubGVuZ3RoPjAmJm8ubGVuZ3RoPjApe3ZhciBjPXtzdG10OiJzdGF0ZSIsaWQ6T3YoKSx0eXBlOiJkaXZpZGVyIixkb2M6VlQobyl9O2kucHVzaChWVChjKSksbi5kb2M9aX1uLmRvYy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdChuLGUsITApfSkpfX0sWlQ9e3Jvb3Q6e3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fX0sUVQ9WlQucm9vdCxLVD0wLEpUPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dm9pZCAwPT09UVQuc3RhdGVzW3RdP1FULnN0YXRlc1t0XT17aWQ6dCxkZXNjcmlwdGlvbnM6W10sdHlwZTplLGRvYzpuLG5vdGU6aX06KFFULnN0YXRlc1t0XS5kb2N8fChRVC5zdGF0ZXNbdF0uZG9jPW4pLFFULnN0YXRlc1t0XS50eXBlfHwoUVQuc3RhdGVzW3RdLnR5cGU9ZSkpLHImJihvLmluZm8oIkFkZGluZyBzdGF0ZSAiLHQsciksInN0cmluZyI9PXR5cGVvZiByJiZuRSh0LHIudHJpbSgpKSwib2JqZWN0Ij09PVdUKHIpJiZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBuRSh0LGUudHJpbSgpKX0pKSksaSYmKFFULnN0YXRlc1t0XS5ub3RlPWksUVQuc3RhdGVzW3RdLm5vdGUudGV4dD1VbS5zYW5pdGl6ZVRleHQoUVQuc3RhdGVzW3RdLm5vdGUudGV4dCxKdigpKSl9LHRFPWZ1bmN0aW9uKCl7UVQ9KFpUPXtyb290OntyZWxhdGlvbnM6W10sc3RhdGVzOnt9LGRvY3VtZW50czp7fX19KS5yb290LFFUPVpULnJvb3QsS1Q9MCxpRT1bXX0sZUU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQsaT1lLGE9ImRlZmF1bHQiLG89ImRlZmF1bHQiOyJbKl0iPT09dCYmKHI9InN0YXJ0IisgKytLVCxhPSJzdGFydCIpLCJbKl0iPT09ZSYmKGk9ImVuZCIrS1Qsbz0iZW5kIiksSlQocixhKSxKVChpLG8pLFFULnJlbGF0aW9ucy5wdXNoKHtpZDE6cixpZDI6aSx0aXRsZTpVbS5zYW5pdGl6ZVRleHQobixKdigpKX0pfSxuRT1mdW5jdGlvbih0LGUpe3ZhciBuPVFULnN0YXRlc1t0XSxyPWU7IjoiPT09clswXSYmKHI9ci5zdWJzdHIoMSkudHJpbSgpKSxuLmRlc2NyaXB0aW9ucy5wdXNoKFVtLnNhbml0aXplVGV4dChyLEp2KCkpKX0sckU9MCxpRT1bXSxhRT0iVEIiO2NvbnN0IG9FPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7c0MucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBKdigpLnN0YXRlfSxhZGRTdGF0ZTpKVCxjbGVhcjp0RSxnZXRTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gUVQuc3RhdGVzW3RdfSxnZXRTdGF0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gUVQuc3RhdGVzfSxnZXRSZWxhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gUVQucmVsYXRpb25zfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGlFfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gYUV9LGFkZFJlbGF0aW9uOmVFLGdldERpdmlkZXJJZDpmdW5jdGlvbigpe3JldHVybiJkaXZpZGVyLWlkLSIrICsrckV9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXthRT10fSxjbGVhbnVwTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT90LnN1YnN0cigyKS50cmltKCk6dC50cmltKCl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOntBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxsb2dEb2N1bWVudHM6ZnVuY3Rpb24oKXtvLmluZm8oIkRvY3VtZW50cyA9ICIsWlQpfSxnZXRSb290RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIEdUfSxzZXRSb290RG9jOmZ1bmN0aW9uKHQpe28uaW5mbygiU2V0dGluZyByb290IGRvYyIsdCksR1Q9dH0sZ2V0Um9vdERvY1YyOmZ1bmN0aW9uKCl7cmV0dXJuIFhUKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOkdUfSwhMCkse2lkOiJyb290Iixkb2M6R1R9fSxleHRyYWN0OmZ1bmN0aW9uKHQpe3ZhciBlO2U9dC5kb2M/dC5kb2M6dCxvLmluZm8oZSksdEUoKSxvLmluZm8oIkV4dHJhY3QiLGUpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7InN0YXRlIj09PXQuc3RtdCYmSlQodC5pZCx0LnR5cGUsdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUpLCJyZWxhdGlvbiI9PT10LnN0bXQmJmVFKHQuc3RhdGUxLmlkLHQuc3RhdGUyLmlkLHQuZGVzY3JpcHRpb24pfSkpfSx0cmltQ29sb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI6Ij09PXRbMF0/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfX07dmFyIHNFPXt9O2Z1bmN0aW9uIGNFKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIHVFLGxFPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPUp2KCkuc3RhdGUucGFkZGluZyxhPTIqSnYoKS5zdGF0ZS5wYWRkaW5nLG89dC5ub2RlKCkuZ2V0QkJveCgpLHM9by53aWR0aCxjPW8ueCx1PXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsSnYoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLEp2KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLGw9dS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK2EsaD1NYXRoLm1heChsLHMpO2g9PT1zJiYoaCs9YSk7dmFyIGY9dC5ub2RlKCkuZ2V0QkJveCgpO2UuZG9jLHI9Yy1pLGw+cyYmKHI9KHMtaCkvMitpKSxNYXRoLmFicyhjLWYueCk8aSYmbD5zJiYocj1jLShsLXMpLzIpO3ZhciBkPTEtSnYoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiB0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLGQpLmF0dHIoImNsYXNzIixuPyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0K0p2KCkuc3RhdGUudGV4dEhlaWdodCtKdigpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksdS5hdHRyKCJ4IixyK2kpLGw8PXMmJnUuYXR0cigieCIsYysoaC1hKS8yLWwvMitpKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLEp2KCkuc3RhdGUudGl0bGVTaGlmdC1KdigpLnN0YXRlLnRleHRIZWlnaHQtSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IiwzKkp2KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLEp2KCkuc3RhdGUucmFkaXVzKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLEp2KCkuc3RhdGUudGl0bGVTaGlmdC1KdigpLnN0YXRlLnRleHRIZWlnaHQtSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmLmhlaWdodCszKzIqSnYoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsSnYoKS5zdGF0ZS5yYWRpdXMpLHR9LGhFPWZ1bmN0aW9uKHQsZSl7ZS5hdHRyKCJjbGFzcyIsInN0YXRlLW5vdGUiKTt2YXIgbj1lLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLEp2KCkuc3RhdGUucGFkZGluZykscj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT0wLGE9ci5hcHBlbmQoInRleHQiKTthLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksYS5hdHRyKCJjbGFzcyIsIm5vdGVUZXh0Iik7dmFyIG8scz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKSxjPShzPXMucmVwbGFjZSgvXG4vZywiPGJyLz4iKSkuc3BsaXQoVW0ubGluZUJyZWFrUmVnZXgpLHU9MS4yNSpKdigpLnN0YXRlLm5vdGVNYXJnaW4sbD1mdW5jdGlvbih0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGNFKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/Y0UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KGMpO3RyeXtmb3IobC5zKCk7IShvPWwubigpKS5kb25lOyl7dmFyIGg9by52YWx1ZS50cmltKCk7aWYoaC5sZW5ndGg+MCl7dmFyIGY9YS5hcHBlbmQoInRzcGFuIik7Zi50ZXh0KGgpLDA9PT11JiYodSs9Zi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCksaSs9dSxmLmF0dHIoIngiLDArSnYoKS5zdGF0ZS5ub3RlTWFyZ2luKSxmLmF0dHIoInkiLDAraSsxLjI1Kkp2KCkuc3RhdGUubm90ZU1hcmdpbil9fX1jYXRjaCh0KXtsLmUodCl9ZmluYWxseXtsLmYoKX1yZXR1cm57dGV4dFdpZHRoOmEubm9kZSgpLmdldEJCb3goKS53aWR0aCx0ZXh0SGVpZ2h0Oml9fSh0LDAsMCxlLmFwcGVuZCgiZyIpKSxpPXIudGV4dFdpZHRoLGE9ci50ZXh0SGVpZ2h0O3JldHVybiBuLmF0dHIoImhlaWdodCIsYSsyKkp2KCkuc3RhdGUubm90ZU1hcmdpbiksbi5hdHRyKCJ3aWR0aCIsaSsyKkp2KCkuc3RhdGUubm90ZU1hcmdpbiksbn0sZkU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmlkLHI9e2lkOm4sbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxpPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLG4pLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpOyJzdGFydCI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIsSnYoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLEp2KCkuc3RhdGUucGFkZGluZytKdigpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIsSnYoKS5zdGF0ZS5wYWRkaW5nK0p2KCkuc3RhdGUuc2l6ZVVuaXQpfShpKSwiZW5kIj09PWUudHlwZSYmZnVuY3Rpb24odCl7dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIsSnYoKS5zdGF0ZS5zaXplVW5pdCtKdigpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIsSnYoKS5zdGF0ZS5wYWRkaW5nK0p2KCkuc3RhdGUuc2l6ZVVuaXQrSnYoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLEp2KCkuc3RhdGUucGFkZGluZytKdigpLnN0YXRlLnNpemVVbml0K0p2KCkuc3RhdGUubWluaVBhZGRpbmcpLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLEp2KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixKdigpLnN0YXRlLnBhZGRpbmcrSnYoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIsSnYoKS5zdGF0ZS5wYWRkaW5nK0p2KCkuc3RhdGUuc2l6ZVVuaXQrMil9KGkpLCJmb3JrIiE9PWUudHlwZSYmImpvaW4iIT09ZS50eXBlfHxmdW5jdGlvbih0LGUpe3ZhciBuPUp2KCkuc3RhdGUuZm9ya1dpZHRoLHI9SnYoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKGUucGFyZW50SWQpe3ZhciBpPW47bj1yLHI9aX10LmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ3aWR0aCIsbikuYXR0cigiaGVpZ2h0IixyKS5hdHRyKCJ4IixKdigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLEp2KCkuc3RhdGUucGFkZGluZyl9KGksZSksIm5vdGUiPT09ZS50eXBlJiZoRShlLm5vdGUudGV4dCxpKSwiZGl2aWRlciI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImdyZXkiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMiKS5hdHRyKCJ4MSIsSnYoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MiIsMipKdigpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCl9KGkpLCJkZWZhdWx0Ij09PWUudHlwZSYmMD09PWUuZGVzY3JpcHRpb25zLmxlbmd0aCYmZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixKdigpLnN0YXRlLnRleHRIZWlnaHQrMipKdigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsSnYoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCkubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLEp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCsyKkp2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCsyKkp2KCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLEp2KCkuc3RhdGUucmFkaXVzKX0oaSxlKSwiZGVmYXVsdCI9PT1lLnR5cGUmJmUuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipKdigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLEp2KCkuc3RhdGUudGV4dEhlaWdodCsxLjMqSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLEp2KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLHI9bi5oZWlnaHQsaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLEp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscisuNCpKdigpLnN0YXRlLnBhZGRpbmcrSnYoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK0p2KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGE9ITAsbz0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXthfHwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqSnYoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KGUpO258fHIuYXR0cigiZHkiLEp2KCkuc3RhdGUudGV4dEhlaWdodCl9KGksdCxvKSxvPSExKSxhPSExfSkpO3ZhciBzPXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLEp2KCkuc3RhdGUucGFkZGluZytyK0p2KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsSnYoKS5zdGF0ZS5wYWRkaW5nK3IrSnYoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLGM9aS5ub2RlKCkuZ2V0QkJveCgpLHU9TWF0aC5tYXgoYy53aWR0aCxuLndpZHRoKTtzLmF0dHIoIngyIix1KzMqSnYoKS5zdGF0ZS5wYWRkaW5nKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLEp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsdSsyKkp2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixjLmhlaWdodCtyKzIqSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsSnYoKS5zdGF0ZS5yYWRpdXMpfShpLGUpO3ZhciBhLG89aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiByLndpZHRoPW8ud2lkdGgrMipKdigpLnN0YXRlLnBhZGRpbmcsci5oZWlnaHQ9by5oZWlnaHQrMipKdigpLnN0YXRlLnBhZGRpbmcsYT1yLHNFW25dPWEscn0sZEU9MDtIVC5wYXJzZXIueXk9b0U7dmFyIHBFPXt9LHlFPWZ1bmN0aW9uIHQoZSxuLHIsaSl7dmFyIGEscz1uZXcod2IoKS5HcmFwaCkoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KSxjPSEwO2ZvcihhPTA7YTxlLmxlbmd0aDthKyspaWYoInJlbGF0aW9uIj09PWVbYV0uc3RtdCl7Yz0hMTticmVha31yP3Muc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpjPzE6dUUuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmM/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpzLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOmM/MTp1RS5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Yz8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSkscy5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLG9FLmV4dHJhY3QoZSk7Zm9yKHZhciB1PW9FLmdldFN0YXRlcygpLGw9b0UuZ2V0UmVsYXRpb25zKCksaD1PYmplY3Qua2V5cyh1KSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPXVbaFtmXV07ciYmKGQucGFyZW50SWQ9cik7dmFyIHA9dm9pZCAwO2lmKGQuZG9jKXt2YXIgeT1uLmFwcGVuZCgiZyIpLmF0dHIoImlkIixkLmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtwPXQoZC5kb2MseSxkLmlkLCFpKTt2YXIgZz0oeT1sRSh5LGQsaSkpLm5vZGUoKS5nZXRCQm94KCk7cC53aWR0aD1nLndpZHRoLHAuaGVpZ2h0PWcuaGVpZ2h0K3VFLnBhZGRpbmcvMixwRVtkLmlkXT17eTp1RS5jb21wb3NpdFRpdGxlU2l6ZX19ZWxzZSBwPWZFKG4sZCk7aWYoZC5ub3RlKXt2YXIgbT17ZGVzY3JpcHRpb25zOltdLGlkOmQuaWQrIi1ub3RlIixub3RlOmQubm90ZSx0eXBlOiJub3RlIn0sdj1mRShuLG0pOyJsZWZ0IG9mIj09PWQubm90ZS5wb3NpdGlvbj8ocy5zZXROb2RlKHAuaWQrIi1ub3RlIix2KSxzLnNldE5vZGUocC5pZCxwKSk6KHMuc2V0Tm9kZShwLmlkLHApLHMuc2V0Tm9kZShwLmlkKyItbm90ZSIsdikpLHMuc2V0UGFyZW50KHAuaWQscC5pZCsiLWdyb3VwIikscy5zZXRQYXJlbnQocC5pZCsiLW5vdGUiLHAuaWQrIi1ncm91cCIpfWVsc2Ugcy5zZXROb2RlKHAuaWQscCl9by5kZWJ1ZygiQ291bnQ9IixzLm5vZGVDb3VudCgpLHMpO3ZhciBiPTA7bC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZTtiKyssby5kZWJ1ZygiU2V0dGluZyBlZGdlIix0KSxzLnNldEVkZ2UodC5pZDEsdC5pZDIse3JlbGF0aW9uOnQsd2lkdGg6KGU9dC50aXRsZSxlP2UubGVuZ3RoKnVFLmZvbnRTaXplRmFjdG9yOjEpLGhlaWdodDp1RS5sYWJlbEhlaWdodCpVbS5nZXRSb3dzKHQudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIrYil9KSksX2IoKS5sYXlvdXQocyksby5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixzLm5vZGVzKCkpO3ZhciBfPW4ubm9kZSgpO3Mubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1zLm5vZGUodCk/KG8ud2FybigiTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUodCkpKSxhdSgiIyIrXy5pZCsiICMiK3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMikrIiwiKyhzLm5vZGUodCkueSsocEVbdF0/cEVbdF0ueTowKS1zLm5vZGUodCkuaGVpZ2h0LzIpKyIgKSIpLGF1KCIjIitfLmlkKyIgIyIrdCkuYXR0cigiZGF0YS14LXNoaWZ0IixzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMiksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrXy5pZCsiICMiK3QrIiAuZGl2aWRlciIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50RWxlbWVudCxuPTAscj0wO2UmJihlLnBhcmVudEVsZW1lbnQmJihuPWUucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4ocikmJihyPTApKSx0LnNldEF0dHJpYnV0ZSgieDEiLDAtcis4KSx0LnNldEF0dHJpYnV0ZSgieDIiLG4tci04KX0pKSk6by5kZWJ1ZygiTm8gTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUodCkpKX0pKTt2YXIgeD1fLmdldEJCb3goKTtzLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09cy5lZGdlKHQpJiYoby5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkocy5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4pe2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciByPWUucG9pbnRzLGk9enUoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoVnUpLGE9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixpKHIpKS5hdHRyKCJpZCIsImVkZ2UiK2RFKS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKSxzPSIiO2lmKEp2KCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKHM9KHM9KHM9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksYS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2Ugb0UucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBvRS5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2Ugb0UucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBvRS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fShvRS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWSkrIkVuZCkiKSx2b2lkIDAhPT1uLnRpdGxlKXtmb3IodmFyIGM9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx1PUh2LmNhbGNMYWJlbFBvc2l0aW9uKGUucG9pbnRzKSxsPXUueCxoPXUueSxmPVVtLmdldFJvd3Mobi50aXRsZSksZD0wLHA9W10seT0wLGc9MCxtPTA7bTw9Zi5sZW5ndGg7bSsrKXt2YXIgdj1jLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChmW21dKS5hdHRyKCJ4IixsKS5hdHRyKCJ5IixoK2QpLGI9di5ub2RlKCkuZ2V0QkJveCgpO2lmKHk9TWF0aC5tYXgoeSxiLndpZHRoKSxnPU1hdGgubWluKGcsYi54KSxvLmluZm8oYi54LGwsaCtkKSwwPT09ZCl7dmFyIF89di5ub2RlKCkuZ2V0QkJveCgpO2Q9Xy5oZWlnaHQsby5pbmZvKCJUaXRsZSBoZWlnaHQiLGQsaCl9cC5wdXNoKHYpfXZhciB4PWQqZi5sZW5ndGg7aWYoZi5sZW5ndGg+MSl7dmFyIHc9KGYubGVuZ3RoLTEpKmQqLjU7cC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmF0dHIoInkiLGgrZSpkLXcpfSkpLHg9ZCpmLmxlbmd0aH12YXIgaz1jLm5vZGUoKS5nZXRCQm94KCk7Yy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLGwteS8yLUp2KCkuc3RhdGUucGFkZGluZy8yKS5hdHRyKCJ5IixoLXgvMi1KdigpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIix5K0p2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0Iix4K0p2KCkuc3RhdGUucGFkZGluZyksby5pbmZvKGspfWRFKyt9KG4scy5lZGdlKHQpLHMuZWRnZSh0KS5yZWxhdGlvbikpfSkpLHg9Xy5nZXRCQm94KCk7dmFyIHc9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIHcud2lkdGg9eC53aWR0aCsyKnVFLnBhZGRpbmcsdy5oZWlnaHQ9eC5oZWlnaHQrMip1RS5wYWRkaW5nLG8uZGVidWcoIkRvYyByZW5kZXJlZCIsdyxzKSx3fTtjb25zdCBnRT1mdW5jdGlvbih0LGUpe3VFPUp2KCkuc3RhdGUsSFQucGFyc2VyLnl5LmNsZWFyKCksSFQucGFyc2VyLnBhcnNlKHQpLG8uZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIrdCk7dmFyIG49YXUoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7bi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpLG5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZGlyOiJSTCJ9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciByPW9FLmdldFJvb3REb2MoKTt5RShyLG4sdm9pZCAwLCExKTt2YXIgaT11RS5wYWRkaW5nLGE9bi5ub2RlKCkuZ2V0QkJveCgpLHM9YS53aWR0aCsyKmksYz1hLmhlaWdodCsyKmk7enYobixjLDEuNzUqcyx1RS51c2VNYXhXaWR0aCksbi5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoYS54LXVFLnBhZGRpbmcsIiAgIikuY29uY2F0KGEueS11RS5wYWRkaW5nLCIgIikrcysiICIrYyl9O3ZhciBtRT17fSx2RT17fSxiRT1mdW5jdGlvbih0LGUsbixyKXtpZigicm9vdCIhPT1uLmlkKXt2YXIgaT0icmVjdCI7ITA9PT1uLnN0YXJ0JiYoaT0ic3RhcnQiKSwhMT09PW4uc3RhcnQmJihpPSJlbmQiKSwiZGVmYXVsdCIhPT1uLnR5cGUmJihpPW4udHlwZSksdkVbbi5pZF18fCh2RVtuLmlkXT17aWQ6bi5pZCxzaGFwZTppLGRlc2NyaXB0aW9uOlVtLnNhbml0aXplVGV4dChuLmlkLEp2KCkpLGNsYXNzZXM6InN0YXRlZGlhZ3JhbS1zdGF0ZSJ9KSxuLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheSh2RVtuLmlkXS5kZXNjcmlwdGlvbik/KHZFW24uaWRdLnNoYXBlPSJyZWN0V2l0aFRpdGxlIix2RVtuLmlkXS5kZXNjcmlwdGlvbi5wdXNoKG4uZGVzY3JpcHRpb24pKTp2RVtuLmlkXS5kZXNjcmlwdGlvbi5sZW5ndGg+MD8odkVbbi5pZF0uc2hhcGU9InJlY3RXaXRoVGl0bGUiLHZFW24uaWRdLmRlc2NyaXB0aW9uPT09bi5pZD92RVtuLmlkXS5kZXNjcmlwdGlvbj1bbi5kZXNjcmlwdGlvbl06dkVbbi5pZF0uZGVzY3JpcHRpb249W3ZFW24uaWRdLmRlc2NyaXB0aW9uLG4uZGVzY3JpcHRpb25dKToodkVbbi5pZF0uc2hhcGU9InJlY3QiLHZFW24uaWRdLmRlc2NyaXB0aW9uPW4uZGVzY3JpcHRpb24pLHZFW24uaWRdLmRlc2NyaXB0aW9uPVVtLnNhbml0aXplVGV4dE9yQXJyYXkodkVbbi5pZF0uZGVzY3JpcHRpb24sSnYoKSkpLDE9PT12RVtuLmlkXS5kZXNjcmlwdGlvbi5sZW5ndGgmJiJyZWN0V2l0aFRpdGxlIj09PXZFW24uaWRdLnNoYXBlJiYodkVbbi5pZF0uc2hhcGU9InJlY3QiKSwhdkVbbi5pZF0udHlwZSYmbi5kb2MmJihvLmluZm8oIlNldHRpbmcgY2x1c3RlciBmb3IgIixuLmlkLHdFKG4pKSx2RVtuLmlkXS50eXBlPSJncm91cCIsdkVbbi5pZF0uZGlyPXdFKG4pLHZFW24uaWRdLnNoYXBlPSJkaXZpZGVyIj09PW4udHlwZT8iZGl2aWRlciI6InJvdW5kZWRXaXRoVGl0bGUiLHZFW24uaWRdLmNsYXNzZXM9dkVbbi5pZF0uY2xhc3NlcysiICIrKHI/InN0YXRlZGlhZ3JhbS1jbHVzdGVyIHN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCI6InN0YXRlZGlhZ3JhbS1jbHVzdGVyIikpO3ZhciBhPXtsYWJlbFN0eWxlOiIiLHNoYXBlOnZFW24uaWRdLnNoYXBlLGxhYmVsVGV4dDp2RVtuLmlkXS5kZXNjcmlwdGlvbixjbGFzc2VzOnZFW24uaWRdLmNsYXNzZXMsc3R5bGU6IiIsaWQ6bi5pZCxkaXI6dkVbbi5pZF0uZGlyLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0iK19FLHR5cGU6dkVbbi5pZF0udHlwZSxwYWRkaW5nOjE1fTtpZihuLm5vdGUpe3ZhciBzPXtsYWJlbFN0eWxlOiIiLHNoYXBlOiJub3RlIixsYWJlbFRleHQ6bi5ub3RlLnRleHQsY2xhc3Nlczoic3RhdGVkaWFncmFtLW5vdGUiLHN0eWxlOiIiLGlkOm4uaWQrIi0tLS1ub3RlLSIrX0UsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLS0tLW5vdGUtIitfRSx0eXBlOnZFW24uaWRdLnR5cGUscGFkZGluZzoxNX0sYz17bGFiZWxTdHlsZToiIixzaGFwZToibm90ZUdyb3VwIixsYWJlbFRleHQ6bi5ub3RlLnRleHQsY2xhc3Nlczp2RVtuLmlkXS5jbGFzc2VzLHN0eWxlOiIiLGlkOm4uaWQrIi0tLS1wYXJlbnQiLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0tLS1wYXJlbnQtIitfRSx0eXBlOiJncm91cCIscGFkZGluZzowfTtfRSsrLHQuc2V0Tm9kZShuLmlkKyItLS0tcGFyZW50IixjKSx0LnNldE5vZGUocy5pZCxzKSx0LnNldE5vZGUobi5pZCxhKSx0LnNldFBhcmVudChuLmlkLG4uaWQrIi0tLS1wYXJlbnQiKSx0LnNldFBhcmVudChzLmlkLG4uaWQrIi0tLS1wYXJlbnQiKTt2YXIgdT1uLmlkLGw9cy5pZDsibGVmdCBvZiI9PT1uLm5vdGUucG9zaXRpb24mJih1PXMuaWQsbD1uLmlkKSx0LnNldEVkZ2UodSxsLHthcnJvd2hlYWQ6Im5vbmUiLGFycm93VHlwZToiIixzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGNsYXNzZXM6InRyYW5zaXRpb24gbm90ZS1lZGdlIixhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwifSl9ZWxzZSB0LnNldE5vZGUobi5pZCxhKX1lJiYicm9vdCIhPT1lLmlkJiYoby50cmFjZSgiU2V0dGluZyBub2RlICIsbi5pZCwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixlLmlkKSx0LnNldFBhcmVudChuLmlkLGUuaWQpKSxuLmRvYyYmKG8udHJhY2UoIkFkZGluZyBub2RlcyBjaGlsZHJlbiAiKSx4RSh0LG4sbi5kb2MsIXIpKX0sX0U9MCx4RT1mdW5jdGlvbih0LGUsbixyKXtvLnRyYWNlKCJpdGVtcyIsbiksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtpZigic3RhdGUiPT09bi5zdG10fHwiZGVmYXVsdCI9PT1uLnN0bXQpYkUodCxlLG4scik7ZWxzZSBpZigicmVsYXRpb24iPT09bi5zdG10KXtiRSh0LGUsbi5zdGF0ZTEsciksYkUodCxlLG4uc3RhdGUyLHIpO3ZhciBpPXtpZDoiZWRnZSIrX0UsYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6ImZpbGw6bm9uZSIsbGFiZWxTdHlsZToiIixsYWJlbDpVbS5zYW5pdGl6ZVRleHQobi5kZXNjcmlwdGlvbixKdigpKSxhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InRyYW5zaXRpb24ifSxhPW4uc3RhdGUxLmlkLG89bi5zdGF0ZTIuaWQ7dC5zZXRFZGdlKGEsbyxpLF9FKSxfRSsrfX0pKX0sd0U9ZnVuY3Rpb24odCxlKXt2YXIgbj1lfHwiVEIiO2lmKHQuZG9jKWZvcih2YXIgcj0wO3I8dC5kb2MubGVuZ3RoO3IrKyl7dmFyIGk9dC5kb2Nbcl07ImRpciI9PT1pLnN0bXQmJihuPWkudmFsdWUpfXJldHVybiBufTtjb25zdCBrRT1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKW1FW2Vbbl1dPXRbZVtuXV19O2Z1bmN0aW9uIFRFKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBFRSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBFRSh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0VFKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRUUodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgQ0U9IiIsU0U9IiIsQUU9W10sTUU9W10sTkU9W10sREU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ITAsZT0wO2U8TkUubGVuZ3RoO2UrKylORVtlXS5wcm9jZXNzZWQsdD10JiZORVtlXS5wcm9jZXNzZWQ7cmV0dXJuIHR9O2NvbnN0IE9FPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7c0MucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBKdigpLmpvdXJuZXl9LGNsZWFyOmZ1bmN0aW9uKCl7QUUubGVuZ3RoPTAsTUUubGVuZ3RoPTAsU0U9IiIsQ0U9IiIsTkUubGVuZ3RoPTB9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe0NFPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIENFfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQpe1NFPXQsQUUucHVzaCh0KX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gQUV9LGdldFRhc2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PURFKCksZT0wOyF0JiZlPDEwMDspdD1ERSgpLGUrKztyZXR1cm4gTUUucHVzaC5hcHBseShNRSxORSksTUV9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLHI9MCxpPVtdOzE9PT1uLmxlbmd0aD8ocj1OdW1iZXIoblswXSksaT1bXSk6KHI9TnVtYmVyKG5bMF0pLGk9blsxXS5zcGxpdCgiLCIpKTt2YXIgYT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSkpLG89e3NlY3Rpb246U0UsdHlwZTpTRSxwZW9wbGU6YSx0YXNrOnQsc2NvcmU6cn07TkUucHVzaChvKX0sYWRkVGFza09yZzpmdW5jdGlvbih0KXt2YXIgZT17c2VjdGlvbjpTRSx0eXBlOlNFLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O01FLnB1c2goZSl9LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiB0PVtdLE1FLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucGVvcGxlJiZ0LnB1c2guYXBwbHkodCxURShlLnBlb3BsZSkpfSkpLFRFKG5ldyBTZXQodCkpLnNvcnQoKTt2YXIgdH19O3ZhciBCRT1uKDk3NjMpLExFPW4ubihCRSksSUU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sUkU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiY2lyY2xlIik7cmV0dXJuIG4uYXR0cigiY3giLGUuY3gpLG4uYXR0cigiY3kiLGUuY3kpLG4uYXR0cigiY2xhc3MiLCJhY3Rvci0iK2UucG9zKSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoInIiLGUuciksdm9pZCAwIT09bi5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsbi5jbGFzcyksdm9pZCAwIT09ZS50aXRsZSYmbi5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxufSxGRT0tMSxQRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyxjKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixjKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjLHUpe2Zvcih2YXIgbD1jLnRhc2tGb250U2l6ZSxoPWMudGFza0ZvbnRGYW1pbHksZj10LnNwbGl0KC88YnJccypcLz8+L2dpKSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqbC1sKihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuYXR0cigiZmlsbCIsdSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbCkuc3R5bGUoImZvbnQtZmFtaWx5IixoKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2guYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKW4gaW4gZSYmdC5hdHRyKG4sZVtuXSl9cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiJmbyI9PT1yLnRleHRQbGFjZW1lbnQ/bjoib2xkIj09PXIudGV4dFBsYWNlbWVudD90OmV9fSgpO2NvbnN0IGpFPVJFLFlFPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgiZyIpLGk9e3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPW4ud2lkdGgsaS5oZWlnaHQ9bi5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsSUUocixpKSxQRShuKShlLnRleHQscixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LG4sZS5jb2xvdXIpfSx6RT1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLnRleHQobikscn0sVUU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPWUueCtuLndpZHRoLzIscz10LmFwcGVuZCgiZyIpO0ZFKysscy5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK0ZFKS5hdHRyKCJ4MSIsbykuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG8pLmF0dHIoInkyIiw0NTApLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxyPXMsaT17Y3g6byxjeTozMDArMzAqKDUtZS5zY29yZSksc2NvcmU6ZS5zY29yZX0sci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixpLmN4KS5hdHRyKCJjeSIsaS5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksKGE9ci5hcHBlbmQoImciKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsaS5jeC01KS5hdHRyKCJjeSIsaS5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksYS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixpLmN4KzUpLmF0dHIoImN5IixpLmN5LTUpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLnNjb3JlPjM/ZnVuY3Rpb24odCl7dmFyIGU9SXUoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjMpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmN4KyIsIisoaS5jeSsyKSsiKSIpfShhKTppLnNjb3JlPDM/ZnVuY3Rpb24odCl7dmFyIGU9SXUoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZShNYXRoLlBJLzIqNSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cygxNS8yLjIpO3QuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2kuY3grIiwiKyhpLmN5KzcpKyIpIil9KGEpOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGkuY3gtNSkuYXR0cigieTEiLGkuY3krNykuYXR0cigieDIiLGkuY3grNSkuYXR0cigieTIiLGkuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX0oYSk7dmFyIGM9e3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfTtjLng9ZS54LGMueT1lLnksYy5maWxsPWUuZmlsbCxjLndpZHRoPW4ud2lkdGgsYy5oZWlnaHQ9bi5oZWlnaHQsYy5jbGFzcz0idGFzayB0YXNrLXR5cGUtIitlLm51bSxjLnJ4PTMsYy5yeT0zLElFKHMsYyk7dmFyIHU9ZS54KzE0O2UucGVvcGxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuYWN0b3JzW3RdLmNvbG9yLHI9e2N4OnUsY3k6ZS55LHI6NyxmaWxsOm4sc3Ryb2tlOiIjMDAwIix0aXRsZTp0LHBvczplLmFjdG9yc1t0XS5wb3NpdGlvbn07UkUocyxyKSx1Kz0xMH0pKSxQRShuKShlLnRhc2sscyxjLngsYy55LGMud2lkdGgsYy5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sbixlLmNvbG91cil9O0JFLnBhcnNlci55eT1PRTt2YXIgcUU9e30sSEU9SnYoKS5qb3VybmV5LCRFPUp2KCkuam91cm5leS5sZWZ0TWFyZ2luLFdFPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1KdigpLmpvdXJuZXksYT10aGlzLG89MDt0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7bysrO3ZhciBjPWEuc2VxdWVuY2VJdGVtcy5sZW5ndGgtbysxO2EudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChzLCJzdG9weSIscitjKmkuYm94TWFyZ2luLE1hdGgubWF4KSxhLnVwZGF0ZVZhbChXRS5kYXRhLCJzdGFydHgiLHQtYyppLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoV0UuZGF0YSwic3RvcHgiLG4rYyppLmJveE1hcmdpbixNYXRoLm1heCksYS51cGRhdGVWYWwocywic3RhcnR4Iix0LWMqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKFdFLmRhdGEsInN0YXJ0eSIsZS1jKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChXRS5kYXRhLCJzdG9weSIscitjKmkuYm94TWFyZ2luLE1hdGgubWF4KX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoV0UuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChXRS5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKFdFLmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChXRS5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LFZFPUhFLnNlY3Rpb25GaWxscyxHRT1IRS5zZWN0aW9uQ29sb3Vycztjb25zdCBYRT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtIRVtlXT10W2VdfSkpfSxaRT1mdW5jdGlvbih0LGUpe3ZhciBuPUp2KCkuam91cm5leTtCRS5wYXJzZXIueXkuY2xlYXIoKSxCRS5wYXJzZXIucGFyc2UodCsiXG4iKSxXRS5pbml0KCk7dmFyIHI9YXUoIiMiK2UpO3IuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksci5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIik7dmFyIGk9QkUucGFyc2VyLnl5LmdldFRhc2tzKCksYT1CRS5wYXJzZXIueXkuZ2V0VGl0bGUoKSxvPUJFLnBhcnNlci55eS5nZXRBY3RvcnMoKTtmb3IodmFyIHMgaW4gcUUpZGVsZXRlIHFFW3NdO3ZhciBjPTA7by5mb3JFYWNoKChmdW5jdGlvbih0KXtxRVt0XT17Y29sb3I6bi5hY3RvckNvbG91cnNbYyVuLmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOmN9LGMrK30pKSxmdW5jdGlvbih0KXt2YXIgZT1KdigpLmpvdXJuZXksbj02MDtPYmplY3Qua2V5cyhxRSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9cUVbcl0uY29sb3IsYT17Y3g6MjAsY3k6bixyOjcsZmlsbDppLHN0cm9rZToiIzAwMCIscG9zOnFFW3JdLnBvc2l0aW9ufTtqRSh0LGEpO3ZhciBvPXt4OjQwLHk6bis3LGZpbGw6IiM2NjYiLHRleHQ6cix0ZXh0TWFyZ2luOjV8ZS5ib3hUZXh0TWFyZ2lufTt6RSh0LG8pLG4rPTIwfSkpfShyKSxXRS5pbnNlcnQoMCwwLCRFLDUwKk9iamVjdC5rZXlzKHFFKS5sZW5ndGgpLGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9SnYoKS5qb3VybmV5LGk9IiIsYT1uKygyKnIuaGVpZ2h0K3IuZGlhZ3JhbU1hcmdpblkpLG89MCxzPSIjQ0NDIixjPSJibGFjayIsdT0wLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGg9ZVtsXTtpZihpIT09aC5zZWN0aW9uKXtzPVZFW28lVkUubGVuZ3RoXSx1PW8lVkUubGVuZ3RoLGM9R0VbbyVHRS5sZW5ndGhdO3ZhciBmPXt4Omwqci50YXNrTWFyZ2luK2wqci53aWR0aCskRSx5OjUwLHRleHQ6aC5zZWN0aW9uLGZpbGw6cyxudW06dSxjb2xvdXI6Y307WUUodCxmLHIpLGk9aC5zZWN0aW9uLG8rK312YXIgZD1oLnBlb3BsZS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFFW2VdJiYodFtlXT1xRVtlXSksdH0pLHt9KTtoLng9bCpyLnRhc2tNYXJnaW4rbCpyLndpZHRoKyRFLGgueT1hLGgud2lkdGg9ci5kaWFncmFtTWFyZ2luWCxoLmhlaWdodD1yLmRpYWdyYW1NYXJnaW5ZLGguY29sb3VyPWMsaC5maWxsPXMsaC5udW09dSxoLmFjdG9ycz1kLFVFKHQsaCxyKSxXRS5pbnNlcnQoaC54LGgueSxoLngraC53aWR0aCtyLnRhc2tNYXJnaW4sNDUwKX19KHIsaSwwKTt2YXIgdT1XRS5nZXRCb3VuZHMoKTthJiZyLmFwcGVuZCgidGV4dCIpLnRleHQoYSkuYXR0cigieCIsJEUpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTt2YXIgbD11LnN0b3B5LXUuc3RhcnR5KzIqbi5kaWFncmFtTWFyZ2luWSxoPSRFK3Uuc3RvcHgrMipuLmRpYWdyYW1NYXJnaW5YO3p2KHIsbCxoLG4udXNlTWF4V2lkdGgpLHIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLCRFKS5hdHRyKCJ5MSIsNCpuLmhlaWdodCkuYXR0cigieDIiLGgtJEUtNCkuYXR0cigieTIiLDQqbi5oZWlnaHQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7dmFyIGY9YT83MDowO3IuYXR0cigidmlld0JveCIsIiIuY29uY2F0KHUuc3RhcnR4LCIgLTI1ICIpLmNvbmNhdChoLCIgIikuY29uY2F0KGwrZikpLHIuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxyLmF0dHIoImhlaWdodCIsbCtmKzI1KX07dmFyIFFFPXt9O2NvbnN0IEtFPWZ1bmN0aW9uKHQpe3JldHVybiJnLmNsYXNzR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICBmb250LXNpemU6IDEwcHg7XG5cbiAgLnRpdGxlIHtcbiAgICBmb250LXdlaWdodDogYm9sZGVyO1xuICB9XG5cbn1cblxuLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbn1cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG59XG4ubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmNsYXNzVGV4dCwiO1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7XG4gIGJhY2tncm91bmQ6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbn1cblxuLmNsYXNzVGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuXG4uZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2U6IDE7XG59XG5cbmcuY2xpY2thYmxlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5nLmNsYXNzR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuY2xhc3NHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmNsYXNzTGFiZWwgLmJveCB7XG4gIHN0cm9rZTogbm9uZTtcbiAgc3Ryb2tlLXdpZHRoOiAwO1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuLmNsYXNzTGFiZWwgLmxhYmVsIHtcbiAgZmlsbDogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5cbi5yZWxhdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLmRhc2hlZC1saW5le1xuICBzdHJva2UtZGFzaGFycmF5OiAzO1xufVxuXG4jY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uZWRnZVRlcm1pbmFscyB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cblxuIil9LEpFPWZ1bmN0aW9uKHQpe3JldHVybiIubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAiLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBjb2xvcjogIikuY29uY2F0KHQubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3IsIjtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0LHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jbHVzdGVyQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jbHVzdGVyQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuY2x1c3RlciBzcGFuIHtcbiAgICBjb2xvcjogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG4gIC8qIC5jbHVzdGVyIGRpdiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfSAqL1xuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiIpfSx0Qz1mdW5jdGlvbih0KXtyZXR1cm4iXG5kZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7XG4gICAgZmlsbDogIi5jb25jYXQodC50cmFuc2l0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25Db2xvciwiO1xuICB9XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxufVxuZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnN0YXRlTGFiZWxDb2xvciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuc3RhdGVHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4udHJhbnNpdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQudHJhbnNpdGlvbkNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7XG4gIGZpbGw6ICNlMGUwZTA7XG4gIGJvcmRlci1ib3R0b206IDFweFxufVxuXG4uc3RhdGUtbm90ZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuXG4gIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICB9XG59XG5cbi5zdGF0ZUxhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJhY2tncm91bmRDb2xvciwiO1xuICBvcGFjaXR5OiAwLjU7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3IsIjtcbn1cbi5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVMYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuc3RhdGVMYWJlbENvbG9yLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgLmZvcmstam9pbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmlubmVyRW5kQmFja2dyb3VuZCwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjVcbn1cbi5lbmQtc3RhdGUtaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmQsIjtcbiAgLy8gc3Ryb2tlOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG5cbi5ub2RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5zdGF0ZUJrZ3x8dC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cbi5ub2RlIHBvbHlnb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiOztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4uY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5zdGF0ZUxhYmVsQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kLCI7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgcng6MDtcbiAgcnk6MDtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4ubm90ZS1lZGdlIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogNTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHJ4OiAwO1xuICByeTogMDtcbn1cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG4uc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwge1xuICBjb2xvcjogcmVkOyAvLyAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cbiIpfTt2YXIgZUM9e2Zsb3djaGFydDpKRSwiZmxvd2NoYXJ0LXYyIjpKRSxzZXF1ZW5jZTpmdW5jdGlvbih0KXtyZXR1cm4iLmFjdG9yIHtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yTGluZUNvbG9yLCI7XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VxdWVuY2VOdW1iZXJDb2xvciwiO1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2lnbmFsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbEJveCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCa2dDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wVGV4dCwgLmxvb3BUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lmxvb3BUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAubG9vcExpbmUge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLm5vdGUge1xuICAgIC8vc3Ryb2tlOiAjZGVjYzkzO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAubm90ZVRleHQsIC5ub3RlVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdGl2YXRpb24wIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24xIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24yIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdG9yUG9wdXBNZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICAuYWN0b3JQb3B1cE1lbnVQYW5lbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yQmtnLCI7XG4gICAgYm94LXNoYWRvdzogMHB4IDhweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMik7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTtcbn1cbiAgLmFjdG9yLW1hbiBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yQm9yZGVyLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0b3JCa2csIjtcbiAgfVxuICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5hY3RvckJvcmRlciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yQmtnLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cbiIpfSxnYW50dDpmdW5jdGlvbih0KXtyZXR1cm4nXG4gIC5tZXJtYWlkLW1haW4tZm9udCB7XG4gICAgZm9udC1mYW1pbHk6ICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiAgLmV4Y2x1ZGUtcmFuZ2Uge1xuICAgIGZpbGw6ICcuY29uY2F0KHQuZXhjbHVkZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbiB7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNlY3Rpb25Ca2dDb2xvcjIsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hbHRTZWN0aW9uQmtnQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIC8vIHRleHQtaGVpZ2h0OiAxNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuXG4gIC8qIEdyaWQgYW5kIGF4aXMgKi9cblxuICAuZ3JpZCAudGljayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ncmlkQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICAgIHRleHQge1xuICAgICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkIHBhdGgge1xuICAgIHN0cm9rZS13aWR0aDogMDtcbiAgfVxuXG5cbiAgLyogVG9kYXkgbGluZSAqL1xuXG4gIC50b2RheSB7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRvZGF5TGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cblxuXG4gIC8qIFRhc2sgc3R5bGluZyAqL1xuXG4gIC8qIERlZmF1bHQgdGFzayAqL1xuXG4gIC50YXNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAudGFza1RleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cblxuICAvLyAudGFza1RleHQ6bm90KFtmb250LXNpemVdKSB7XG4gIC8vICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gIC8vIH1cblxuICAudGFza1RleHRPdXRzaWRlUmlnaHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCI7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogZW5kO1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICB9XG5cbiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqL1xuICAudGFzay5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuICAudGFza1RleHQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovXG5cbiAgLnRhc2tUZXh0MCxcbiAgLnRhc2tUZXh0MSxcbiAgLnRhc2tUZXh0MixcbiAgLnRhc2tUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDb2xvciwiO1xuICB9XG5cbiAgLnRhc2swLFxuICAudGFzazEsXG4gIC50YXNrMixcbiAgLnRhc2szIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTAsXG4gIC50YXNrVGV4dE91dHNpZGUyXG4gIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTEsXG4gIC50YXNrVGV4dE91dHNpZGUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cblxuICAvKiBBY3RpdmUgdGFzayAqL1xuXG4gIC5hY3RpdmUwLFxuICAuYWN0aXZlMSxcbiAgLmFjdGl2ZTIsXG4gIC5hY3RpdmUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2ZVRleHQwLFxuICAuYWN0aXZlVGV4dDEsXG4gIC5hY3RpdmVUZXh0MixcbiAgLmFjdGl2ZVRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIENvbXBsZXRlZCB0YXNrICovXG5cbiAgLmRvbmUwLFxuICAuZG9uZTEsXG4gIC5kb25lMixcbiAgLmRvbmUzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVUZXh0MCxcbiAgLmRvbmVUZXh0MSxcbiAgLmRvbmVUZXh0MixcbiAgLmRvbmVUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqL1xuXG4gIC5jcml0MCxcbiAgLmNyaXQxLFxuICAuY3JpdDIsXG4gIC5jcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jcml0QmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuYWN0aXZlQ3JpdDAsXG4gIC5hY3RpdmVDcml0MSxcbiAgLmFjdGl2ZUNyaXQyLFxuICAuYWN0aXZlQ3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0aXZlVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVDcml0MCxcbiAgLmRvbmVDcml0MSxcbiAgLmRvbmVDcml0MixcbiAgLmRvbmVDcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gIH1cblxuICAubWlsZXN0b25lIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7XG4gIH1cblxuICAubWlsZXN0b25lVGV4dCB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG4gIC5kb25lQ3JpdFRleHQwLFxuICAuZG9uZUNyaXRUZXh0MSxcbiAgLmRvbmVDcml0VGV4dDIsXG4gIC5kb25lQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuYWN0aXZlQ3JpdFRleHQwLFxuICAuYWN0aXZlQ3JpdFRleHQxLFxuICAuYWN0aXZlQ3JpdFRleHQyLFxuICAuYWN0aXZlQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAudGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIiAgICA7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiIpfSxjbGFzc0RpYWdyYW06S0UsImNsYXNzRGlhZ3JhbS12MiI6S0UsY2xhc3M6S0Usc3RhdGVEaWFncmFtOnRDLHN0YXRlOnRDLGdpdDpmdW5jdGlvbigpe3JldHVybiJcbiAgLmNvbW1pdC1pZCxcbiAgLmNvbW1pdC1tc2csXG4gIC5icmFuY2gtbGFiZWwge1xuICAgIGZpbGw6IGxpZ2h0Z3JleTtcbiAgICBjb2xvcjogbGlnaHRncmV5O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG4ifSxpbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LHBpZTpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5waWVDaXJjbGV7XG4gICAgc3Ryb2tlOiAiLmNvbmNhdCh0LnBpZVN0cm9rZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoIDogIikuY29uY2F0KHQucGllU3Ryb2tlV2lkdGgsIjtcbiAgICBvcGFjaXR5IDogIikuY29uY2F0KHQucGllT3BhY2l0eSwiO1xuICB9XG4gIC5waWVUaXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5waWVUaXRsZVRleHRTaXplLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllVGl0bGVUZXh0Q29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICB9XG4gIC5zbGljZSB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVTZWN0aW9uVGV4dENvbG9yLCI7XG4gICAgZm9udC1zaXplOiIpLmNvbmNhdCh0LnBpZVNlY3Rpb25UZXh0U2l6ZSwiO1xuICAgIC8vIGZpbGw6IHdoaXRlO1xuICB9XG4gIC5sZWdlbmQgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllTGVnZW5kVGV4dENvbG9yLCI7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LnBpZUxlZ2VuZFRleHRTaXplLCI7XG4gIH1cbiIpfSxlcjpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICIuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveE9kZCB7XG4gICAgZmlsbDogI2ZmZmZmZjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hFdmVuIHtcbiAgICBmaWxsOiAjZjJmMmYyO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLnJlbGF0aW9uc2hpcExhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICAgIHJlY3Qge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB9XG4gIH1cblxuICAgIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgfVxuIil9LGpvdXJuZXk6ZnVuY3Rpb24odCl7cmV0dXJuIi5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICIuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLm1vdXRoIHtcbiAgICBzdHJva2U6ICM2NjY7XG4gIH1cblxuICBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAubGVnZW5kIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAjMzMzO1xuICB9XG4gIC5sYWJlbCB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAuZmFjZSB7XG4gICAgIikuY29uY2F0KHQuZmFjZUNvbG9yPyJmaWxsOiAiLmNvbmNhdCh0LmZhY2VDb2xvcik6ImZpbGw6ICNGRkY4REMiLCI7XG4gICAgc3Ryb2tlOiAjOTk5O1xuICB9XG5cbiAgLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAubm9kZSAubGFiZWwge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAubm9kZS5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5hcnJvd2hlYWRQYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hcnJvd2hlYWRDb2xvciwiO1xuICB9XG5cbiAgLmVkZ2VQYXRoIC5wYXRoIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gIH1cblxuICAuZmxvd2NoYXJ0LWxpbmsge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuXG4gIC5lZGdlTGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICByZWN0IHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmNsdXN0ZXIgcmVjdCB7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICBkaXYubWVybWFpZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGJhY2tncm91bmQ6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAiKS5jb25jYXQodC5ib3JkZXIyLCI7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgfVxuXG4gIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTEpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUyKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMyk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTQpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU1KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNik6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTcpOiIiLCI7XG4gIH1cblxuICAuYWN0b3ItMCB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IwPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMCk6IiIsIjtcbiAgfVxuICAuYWN0b3ItMSB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IxPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMSk6IiIsIjtcbiAgfVxuICAuYWN0b3ItMiB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IyPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMik6IiIsIjtcbiAgfVxuICAuYWN0b3ItMyB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IzPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMyk6IiIsIjtcbiAgfVxuICAuYWN0b3ItNCB7XG4gICAgIikuY29uY2F0KHQuYWN0b3I0PyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yNCk6IiIsIjtcbiAgfVxuICAuYWN0b3ItNSB7XG4gICAgIikuY29uY2F0KHQuYWN0b3I1PyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yNSk6IiIsIjtcbiAgfVxuXG4gIH1cbiIpfSxyZXF1aXJlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4iXG5cbiAgbWFya2VyIHtcbiAgICBmaWxsOiAiLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgfVxuXG4gIG1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LmZvbnRTaXplLCI7XG4gIH1cblxuICAucmVxQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJhY2tncm91bmQsIjtcbiAgICBmaWxsLW9wYWNpdHk6IDEwMCU7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlckNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlclNpemUsIjtcbiAgfVxuICBcbiAgLnJlcVRpdGxlLCAucmVxTGFiZWx7XG4gICAgZmlsbDogICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50VGV4dENvbG9yLCI7XG4gIH1cbiAgLnJlcUxhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCwiO1xuICAgIGZpbGwtb3BhY2l0eTogMTAwJTtcbiAgfVxuXG4gIC5yZXEtdGl0bGUtbGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlckNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlclNpemUsIjtcbiAgfVxuICAucmVsYXRpb25zaGlwTGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZWxhdGlvbkNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMYWJlbCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucmVsYXRpb25MYWJlbENvbG9yLCI7XG4gIH1cblxuIil9fTtmdW5jdGlvbiBuQyh0KXtyZXR1cm4gbkM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG5DKHQpfXZhciByQz1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybihlPShlPWUucmVwbGFjZSgv76yCwrDCsC9nLChmdW5jdGlvbigpe3JldHVybiImIyJ9KSkpLnJlcGxhY2UoL++sgsKwL2csKGZ1bmN0aW9uKCl7cmV0dXJuIiYifSkpKS5yZXBsYWNlKC/CtsOfL2csKGZ1bmN0aW9uKCl7cmV0dXJuIjsifSkpfSxpQz17fTtmdW5jdGlvbiBhQyh0KXt2YXIgZTtYdyh0LmdpdCksUngodC5mbG93Y2hhcnQpLGp4KHQuZmxvd2NoYXJ0KSx2b2lkIDAhPT10LnNlcXVlbmNlRGlhZ3JhbSYmcVQuc2V0Q29uZihMdih0LnNlcXVlbmNlLHQuc2VxdWVuY2VEaWFncmFtKSkscVQuc2V0Q29uZih0LnNlcXVlbmNlKSx0LmdhbnR0LEZiKHQuY2xhc3MpLHQuc3RhdGUsa0UodC5zdGF0ZSksbmsodC5jbGFzcyksel8odC5lciksWEUodC5qb3VybmV5KSxBayh0LnJlcXVpcmVtZW50KSxlPXQuY2xhc3MsT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7UUVbdF09ZVt0XX0pKX12YXIgb0M9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmZ1bmN0aW9uKHQsZSxuLHIpe25iKCk7dmFyIGk9ZSxhPUh2LmRldGVjdEluaXQoaSk7YSYmKFV2KGEpLGViKGEpKTt2YXIgcz1KdigpO2lmKGUubGVuZ3RoPnMubWF4VGV4dFNpemUmJihpPSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIiksdm9pZCAwIT09cilyLmlubmVySFRNTD0iIixhdShyKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitzLmZvbnRGYW1pbHkpLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHQpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKS5hcHBlbmQoImciKTtlbHNle3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO2MmJmMucmVtb3ZlKCk7dmFyIHU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2QiK3QpO3UmJnUucmVtb3ZlKCksYXUoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsdCkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLmFwcGVuZCgiZyIpfXdpbmRvdy50eHQ9aSxpPWkucmVwbGFjZSgvc3R5bGUuKjpcUyojLio7L2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGVuZ3RoLTEpfSkpLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0xKX0pKS5yZXBsYWNlKC8jXHcrOy9nLChmdW5jdGlvbih0KXt2YXIgZT10LnN1YnN0cmluZygxLHQubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChlKT8i76yCwrDCsCIrZSsiwrbDnyI6Iu+sgsKwIitlKyLCtsOfIn0pKTt2YXIgbD1hdSgiI2QiK3QpLm5vZGUoKSxoPUh2LmRldGVjdFR5cGUoaSxzKSxmPWwuZmlyc3RDaGlsZCxkPWYuZmlyc3RDaGlsZCxwPSIiO2lmKHZvaWQgMCE9PXMudGhlbWVDU1MmJihwKz0iXG4iLmNvbmNhdChzLnRoZW1lQ1NTKSksdm9pZCAwIT09cy5mb250RmFtaWx5JiYocCs9IlxuOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICIuY29uY2F0KHMuZm9udEZhbWlseSwifSIpKSx2b2lkIDAhPT1zLmFsdEZvbnRGYW1pbHkmJihwKz0iXG46cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICIuY29uY2F0KHMuYWx0Rm9udEZhbWlseSwifSIpKSwiZmxvd2NoYXJ0Ij09PWh8fCJmbG93Y2hhcnQtdjIiPT09aHx8ImdyYXBoIj09PWgpe3ZhciB5PWZ1bmN0aW9uKHQpe28uaW5mbygiRXh0cmFjdGluZyBjbGFzc2VzIikseXguY2xlYXIoKTt0cnl7dmFyIGU9bXgoKS5wYXJzZXI7cmV0dXJuIGUueXk9eXgsZS5wYXJzZSh0KSx5eC5nZXRDbGFzc2VzKCl9Y2F0Y2godCl7cmV0dXJufX0oaSksZz1zLmh0bWxMYWJlbHN8fHMuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM7Zm9yKHZhciBtIGluIHkpZz8ocCs9IlxuLiIuY29uY2F0KG0sIiA+ICogeyAiKS5jb25jYXQoeVttXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHArPSJcbi4iLmNvbmNhdChtLCIgc3BhbiB7ICIpLmNvbmNhdCh5W21dLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikpOihwKz0iXG4uIi5jb25jYXQobSwiIHBhdGggeyAiKS5jb25jYXQoeVttXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHArPSJcbi4iLmNvbmNhdChtLCIgcmVjdCB7ICIpLmNvbmNhdCh5W21dLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikscCs9IlxuLiIuY29uY2F0KG0sIiBwb2x5Z29uIHsgIikuY29uY2F0KHlbbV0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSxwKz0iXG4uIi5jb25jYXQobSwiIGVsbGlwc2UgeyAiKS5jb25jYXQoeVttXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHArPSJcbi4iLmNvbmNhdChtLCIgY2lyY2xlIHsgIikuY29uY2F0KHlbbV0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx5W21dLnRleHRTdHlsZXMmJihwKz0iXG4uIi5jb25jYXQobSwiIHRzcGFuIHsgIikuY29uY2F0KHlbbV0udGV4dFN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikpKX12YXIgdj1mdW5jdGlvbih0LGUpe3JldHVybiBhbShDbSgiIi5jb25jYXQodCwieyIpLmNvbmNhdChlLCJ9IikpLG9tKX0oIiMiLmNvbmNhdCh0KSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIiB7XG4gICAgZm9udC1mYW1pbHk6ICIuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQobi50ZXh0Q29sb3IsIlxuICB9XG5cbiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovXG5cbiAgLmVycm9yLWljb24ge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmVycm9yQmtnQ29sb3IsIjtcbiAgfVxuICAuZXJyb3ItdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmVycm9yVGV4dENvbG9yLCI7XG4gIH1cblxuICAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuICAuZWRnZS10aGlja25lc3MtdGhpY2sge1xuICAgIHN0cm9rZS13aWR0aDogMy41cHhcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLXNvbGlkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG5cbiAgLmVkZ2UtcGF0dGVybi1kYXNoZWR7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMztcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLWRvdHRlZCB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMjtcbiAgfVxuXG4gIC5tYXJrZXIge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gIH1cbiAgLm1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQobi5saW5lQ29sb3IsIjtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdChuLmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdChuLmZvbnRTaXplLCI7XG4gIH1cblxuICAiKS5jb25jYXQoZUNbdF0obiksIlxuXG4gICIpLmNvbmNhdChlLCJcbiIpfShoLHAscy50aGVtZVZhcmlhYmxlcykpLGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtiLmlubmVySFRNTD0iIyIuY29uY2F0KHQsIiAiKSt2LGYuaW5zZXJ0QmVmb3JlKGIsZCk7dHJ5e3N3aXRjaChoKXtjYXNlImdpdCI6cy5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsWHcocy5naXQpLGZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9ancoKS5wYXJzZXI7ci55eT1SdyxyLnl5LmNsZWFyKCksby5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLHQrIlxuIiwiaWQ6IixlLG4pLHIucGFyc2UodCsiXG4iKSx6dz1PYmplY3QuYXNzaWduKHp3LFV3LFJ3LmdldE9wdGlvbnMoKSksby5kZWJ1ZygiZWZmZWN0aXZlIG9wdGlvbnMiLHp3KTt2YXIgaT1Sdy5nZXREaXJlY3Rpb24oKTtZdz1Sdy5nZXRDb21taXRzKCk7dmFyIGE9UncuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7IkJUIj09PWkmJih6dy5ub2RlTGFiZWwueD1hLmxlbmd0aCp6dy5icmFuY2hPZmZzZXQsencubm9kZUxhYmVsLndpZHRoPSIxMDAlIix6dy5ub2RlTGFiZWwueT0tMip6dy5ub2RlUmFkaXVzKTt2YXIgcz1hdSgnW2lkPSInLmNvbmNhdChlLCciXScpKTtmb3IodmFyIGMgaW4gZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImciKS5hdHRyKCJpZCIsImRlZi1jb21taXQiKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLHp3Lm5vZGVSYWRpdXMpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCksdC5zZWxlY3QoIiNkZWYtY29tbWl0IikuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLHp3Lm5vZGVMYWJlbC53aWR0aCkuYXR0cigiaGVpZ2h0Iix6dy5ub2RlTGFiZWwuaGVpZ2h0KS5hdHRyKCJ4Iix6dy5ub2RlTGFiZWwueCkuYXR0cigieSIsencubm9kZUxhYmVsLnkpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbCIpLmF0dHIoInJlcXVpcmVkRmVhdHVyZXMiLCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiKS5hcHBlbmQoInAiKS5odG1sKCIiKX0ocyksRnc9MSxhKXt2YXIgdT1hW2NdO1Z3KHMsdS5jb21taXQuaWQsYSxpKSxHdyhzLHUuY29tbWl0LGkpLEZ3Kyt9cy5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbigpe3JldHVybiJCVCI9PT1pP09iamVjdC5rZXlzKFl3KS5sZW5ndGgqencubm9kZVNwYWNpbmc6KGEubGVuZ3RoKzEpKnp3LmJyYW5jaE9mZnNldH0pKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgZ2l0Z3JhcGgiKSxvLmVycm9yKHQubWVzc2FnZSl9fShpLHQsITEpO2JyZWFrO2Nhc2UiZmxvd2NoYXJ0IjpzLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxSeChzLmZsb3djaGFydCksRngoaSx0KTticmVhaztjYXNlImZsb3djaGFydC12MiI6cy5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsangocy5mbG93Y2hhcnQpLFl4KGksdCk7YnJlYWs7Y2FzZSJzZXF1ZW5jZSI6cy5zZXF1ZW5jZS5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxzLnNlcXVlbmNlRGlhZ3JhbT8ocVQuc2V0Q29uZihPYmplY3QuYXNzaWduKHMuc2VxdWVuY2Uscy5zZXF1ZW5jZURpYWdyYW0pKSxjb25zb2xlLmVycm9yKCJgbWVybWFpZCBjb25maWcuc2VxdWVuY2VEaWFncmFtYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb25maWcuc2VxdWVuY2VgLiBQbGVhc2UgdXBkYXRlIHlvdXIgbWVybWFpZCBjb25maWcuIikpOnFULnNldENvbmYocy5zZXF1ZW5jZSkscVQuZHJhdyhpLHQpO2JyZWFrO2Nhc2UiZ2FudHQiOnMuZ2FudHQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUscy5nYW50dCxrdyhpLHQpO2JyZWFrO2Nhc2UiY2xhc3MiOnMuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsRmIocy5jbGFzcyksUGIoaSx0KTticmVhaztjYXNlImNsYXNzRGlhZ3JhbSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxmdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtTX1tlXT10W2VdfSkpfShzLmNsYXNzKSxmdW5jdGlvbih0LGUpe28uaW5mbygiRHJhd2luZyBjbGFzcyIpLHZiLmNsZWFyKCksa2IucGFyc2VyLnBhcnNlKHQpO3ZhciBuPUp2KCkuZmxvd2NoYXJ0O28uaW5mbygiY29uZmlnOiIsbik7dmFyIHI9bi5ub2RlU3BhY2luZ3x8NTAsaT1uLnJhbmtTcGFjaW5nfHw1MCxhPW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnZiLmdldERpcmVjdGlvbigpLG5vZGVzZXA6cixyYW5rc2VwOmksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSkscz12Yi5nZXRDbGFzc2VzKCksYz12Yi5nZXRSZWxhdGlvbnMoKTtvLmluZm8oYyksZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtvLmluZm8oImtleXM6IixuKSxvLmluZm8odCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj10W25dLGk9IiI7ci5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaT1pKyIgIityLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgYSxzPXtsYWJlbFN0eWxlOiIifSxjPXZvaWQgMCE9PXIudGV4dD9yLnRleHQ6ci5pZDtyLnR5cGUsYT0iY2xhc3NfYm94IixlLnNldE5vZGUoci5pZCx7bGFiZWxTdHlsZTpzLmxhYmVsU3R5bGUsc2hhcGU6YSxsYWJlbFRleHQ6YyxjbGFzc0RhdGE6cixyeDowLHJ5OjAsY2xhc3M6aSxzdHlsZTpzLnN0eWxlLGlkOnIuaWQsZG9tSWQ6ci5kb21JZCxoYXZlQ2FsbGJhY2s6ci5oYXZlQ2FsbGJhY2ssbGluazpyLmxpbmssd2lkdGg6Imdyb3VwIj09PXIudHlwZT81MDA6dm9pZCAwLHR5cGU6ci50eXBlLHBhZGRpbmc6SnYoKS5mbG93Y2hhcnQucGFkZGluZ30pLG8uaW5mbygic2V0Tm9kZSIse2xhYmVsU3R5bGU6cy5sYWJlbFN0eWxlLHNoYXBlOmEsbGFiZWxUZXh0OmMscng6MCxyeTowLGNsYXNzOmksc3R5bGU6cy5zdHlsZSxpZDpyLmlkLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCx0eXBlOnIudHlwZSxwYWRkaW5nOkp2KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0ocyxhKSxmdW5jdGlvbih0LGUpe3ZhciBuPTA7dC5mb3JFYWNoKChmdW5jdGlvbihyKXtuKys7dmFyIGk9e2NsYXNzZXM6InJlbGF0aW9uIn07aS5wYXR0ZXJuPTE9PXIucmVsYXRpb24ubGluZVR5cGU/ImRhc2hlZCI6InNvbGlkIixpLmlkPSJpZCIrbiwiYXJyb3dfb3BlbiI9PT1yLnR5cGU/aS5hcnJvd2hlYWQ9Im5vbmUiOmkuYXJyb3doZWFkPSJub3JtYWwiLG8uaW5mbyhpLHIpLGkuc3RhcnRMYWJlbFJpZ2h0PSJub25lIj09PXIucmVsYXRpb25UaXRsZTE/IiI6ci5yZWxhdGlvblRpdGxlMSxpLmVuZExhYmVsTGVmdD0ibm9uZSI9PT1yLnJlbGF0aW9uVGl0bGUyPyIiOnIucmVsYXRpb25UaXRsZTIsaS5hcnJvd1R5cGVTdGFydD1BXyhyLnJlbGF0aW9uLnR5cGUxKSxpLmFycm93VHlwZUVuZD1BXyhyLnJlbGF0aW9uLnR5cGUyKTt2YXIgYT0iIixzPSIiO2lmKHZvaWQgMCE9PXIuc3R5bGUpe3ZhciBjPU52KHIuc3R5bGUpO2E9Yy5zdHlsZSxzPWMubGFiZWxTdHlsZX1lbHNlIGE9ImZpbGw6bm9uZSI7aS5zdHlsZT1hLGkubGFiZWxTdHlsZT1zLHZvaWQgMCE9PXIuaW50ZXJwb2xhdGU/aS5jdXJ2ZT1BdihyLmludGVycG9sYXRlLFB1KTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9pLmN1cnZlPUF2KHQuZGVmYXVsdEludGVycG9sYXRlLFB1KTppLmN1cnZlPUF2KFNfLmN1cnZlLFB1KSxyLnRleHQ9ci50aXRsZSx2b2lkIDA9PT1yLnRleHQ/dm9pZCAwIT09ci5zdHlsZSYmKGkuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooaS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsaS5sYWJlbHBvcz0iYyIsSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscz8oaS5sYWJlbFR5cGU9Imh0bWwiLGkubGFiZWw9JzxzcGFuIGNsYXNzPSJlZGdlTGFiZWwiPicrci50ZXh0KyI8L3NwYW4+Iik6KGkubGFiZWxUeXBlPSJ0ZXh0IixpLmxhYmVsPXIudGV4dC5yZXBsYWNlKFVtLmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PXIuc3R5bGUmJihpLnN0eWxlPWkuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksaS5sYWJlbFN0eWxlPWkubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksZS5zZXRFZGdlKHIuaWQxLHIuaWQyLGksbil9KSl9KGMsYSk7dmFyIHU9YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7dS5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTt2YXIgbD1hdSgiIyIrZSsiIGciKTtDXyhsLGEsWyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSJdLCJjbGFzc0RpYWdyYW0iLGUpO3ZhciBoPXUubm9kZSgpLmdldEJCb3goKSxmPWgud2lkdGgrMTYsZD1oLmhlaWdodCsxNjtpZihvLmRlYnVnKCJuZXcgVmlld0JveCAwIDAgIi5jb25jYXQoZiwiICIpLmNvbmNhdChkKSwidHJhbnNsYXRlKCIuY29uY2F0KDgtYS5fbGFiZWwubWFyZ2lueCwiLCAiKS5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW55LCIpIikpLHp2KHUsZCxmLG4udXNlTWF4V2lkdGgpLHUuYXR0cigidmlld0JveCIsIjAgMCAiLmNvbmNhdChmLCIgIikuY29uY2F0KGQpKSx1LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtaC55LCIpIikpLCFuLmh0bWxMYWJlbHMpZm9yKHZhciBwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLHk9MDt5PHAubGVuZ3RoO3krKyl7dmFyIGc9cFt5XSxtPWcuZ2V0QkJveCgpLHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTt2LnNldEF0dHJpYnV0ZSgicngiLDApLHYuc2V0QXR0cmlidXRlKCJyeSIsMCksdi5zZXRBdHRyaWJ1dGUoIndpZHRoIixtLndpZHRoKSx2LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixtLmhlaWdodCksZy5pbnNlcnRCZWZvcmUodixnLmZpcnN0Q2hpbGQpfX0oaSx0KTticmVhaztjYXNlInN0YXRlIjpzLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLHMuc3RhdGUsZ0UoaSx0KTticmVhaztjYXNlInN0YXRlRGlhZ3JhbSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxrRShzLnN0YXRlKSxmdW5jdGlvbih0LGUpe28uaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpLG9FLmNsZWFyKCksdkU9e307dmFyIG49JFQoKS5wYXJzZXI7bi55eT1vRSxuLnBhcnNlKHQpO3ZhciByPW9FLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJMUiIpO3ZhciBpPUp2KCkuc3RhdGUsYT1pLm5vZGVTcGFjaW5nfHw1MCxzPWkucmFua1NwYWNpbmd8fDUwO28uaW5mbyhvRS5nZXRSb290RG9jVjIoKSksb0UuZXh0cmFjdChvRS5nZXRSb290RG9jVjIoKSksby5pbmZvKG9FLmdldFJvb3REb2NWMigpKTt2YXIgYz1uZXcod2IoKS5HcmFwaCkoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp3RShvRS5nZXRSb290RG9jVjIoKSksbm9kZXNlcDphLHJhbmtzZXA6cyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtiRShjLHZvaWQgMCxvRS5nZXRSb290RG9jVjIoKSwhMCk7dmFyIHU9YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksbD1hdSgiIyIrZSsiIGciKTtDXyhsLGMsWyJiYXJiIl0sInN0YXRlZGlhZ3JhbSIsZSk7dmFyIGg9dS5ub2RlKCkuZ2V0QkJveCgpLGY9aC53aWR0aCsxNixkPWguaGVpZ2h0KzE2O3UuYXR0cigiY2xhc3MiLCJzdGF0ZWRpYWdyYW0iKTt2YXIgcD11Lm5vZGUoKS5nZXRCQm94KCk7enYodSxkLDEuNzUqZixpLnVzZU1heFdpZHRoKTt2YXIgeT0iIi5jb25jYXQocC54LTgsIiAiKS5jb25jYXQocC55LTgsIiAiKS5jb25jYXQoZiwiICIpLmNvbmNhdChkKTtvLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KHkpKSx1LmF0dHIoInZpZXdCb3giLHkpO2Zvcih2YXIgZz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxtPTA7bTxnLmxlbmd0aDttKyspe3ZhciB2PWdbbV0sYj12LmdldEJCb3goKSxfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Xy5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxfLnNldEF0dHJpYnV0ZSgicnkiLDApLF8uc2V0QXR0cmlidXRlKCJ3aWR0aCIsYi53aWR0aCksXy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsYi5oZWlnaHQpLHYuaW5zZXJ0QmVmb3JlKF8sdi5maXJzdENoaWxkKX19KGksdCk7YnJlYWs7Y2FzZSJpbmZvIjpzLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLG5rKHMuY2xhc3MpLGZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9dGsoKS5wYXJzZXI7ci55eT1LdyxvLmRlYnVnKCJSZW5lcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksci5wYXJzZSh0KSxvLmRlYnVnKCJQYXJzZWQgaW5mbyBkaWFncmFtIik7dmFyIGk9YXUoIiMiK2UpO2kuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwiMzJweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoInYgIituKSxpLmF0dHIoImhlaWdodCIsMTAwKSxpLmF0dHIoIndpZHRoIiw0MDApfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQubWVzc2FnZSl9fShpLHQsRG0pO2JyZWFrO2Nhc2UicGllIjpoayhpLHQpO2JyZWFrO2Nhc2UiZXIiOnpfKHMuZXIpLFVfKGksdCk7YnJlYWs7Y2FzZSJqb3VybmV5IjpYRShzLmpvdXJuZXkpLFpFKGksdCk7YnJlYWs7Y2FzZSJyZXF1aXJlbWVudCI6QWsocy5yZXF1aXJlbWVudCksTWsoaSx0KX19Y2F0Y2goZSl7dGhyb3cgZnVuY3Rpb24odCxlKXt0cnl7by5kZWJ1ZygiUmVuZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3JcbiIpO3ZhciBuPWF1KCIjIit0KSxyPW4uYXBwZW5kKCJnIik7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1eiIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI0MCkuYXR0cigieSIsMjUwKS5hdHRyKCJmb250LXNpemUiLCIxNTBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIlN5bnRheCBlcnJvciBpbiBncmFwaCIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTA1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIm1lcm1haWQgdmVyc2lvbiAiK2UpLG4uYXR0cigiaGVpZ2h0IiwxMDApLG4uYXR0cigid2lkdGgiLDQwMCksbi5hdHRyKCJ2aWV3Qm94IiwiNzY4IDAgNTEyIDUxMiIpfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQubWVzc2FnZSl9fSh0LERtKSxlfWF1KCdbaWQ9IicuY29uY2F0KHQsJyJdJykpLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgXz1hdSgiI2QiK3QpLm5vZGUoKS5pbm5lckhUTUw7aWYoby5kZWJ1ZygiY25mLmFycm93TWFya2VyQWJzb2x1dGUiLHMuYXJyb3dNYXJrZXJBYnNvbHV0ZSkscy5hcnJvd01hcmtlckFic29sdXRlJiYiZmFsc2UiIT09cy5hcnJvd01hcmtlckFic29sdXRlfHwoXz1fLnJlcGxhY2UoL21hcmtlci1lbmQ9InVybFwoLio/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycsImciKSksXz0oXz1yQyhfKSkucmVwbGFjZSgvPGJyPi9nLCI8YnIvPiIpLHZvaWQgMCE9PW4pc3dpdGNoKGgpe2Nhc2UiZmxvd2NoYXJ0IjpjYXNlImZsb3djaGFydC12MiI6bihfLHl4LmJpbmRGdW5jdGlvbnMpO2JyZWFrO2Nhc2UiZ2FudHQiOm4oXyx2dy5iaW5kRnVuY3Rpb25zKTticmVhaztjYXNlImNsYXNzIjpjYXNlImNsYXNzRGlhZ3JhbSI6bihfLHZiLmJpbmRGdW5jdGlvbnMpO2JyZWFrO2RlZmF1bHQ6bihfKX1lbHNlIG8uZGVidWcoIkNCID0gdW5kZWZpbmVkISIpO3RULmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKSx0VD1bXTt2YXIgeD1hdSgiI2QiK3QpLm5vZGUoKTtyZXR1cm4gbnVsbCE9PXgmJiJmdW5jdGlvbiI9PXR5cGVvZiB4LnJlbW92ZSYmYXUoIiNkIit0KS5ub2RlKCkucmVtb3ZlKCksX30scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9SnYoKSxuPUh2LmRldGVjdEluaXQodCxlKTtuJiZvLmRlYnVnKCJyZWluaXQgIixuKTt2YXIgcixpPUh2LmRldGVjdFR5cGUodCxlKTtzd2l0Y2goby5kZWJ1ZygiVHlwZSAiK2kpLGkpe2Nhc2UiZ2l0Ijoocj1qdygpKS5wYXJzZXIueXk9Unc7YnJlYWs7Y2FzZSJmbG93Y2hhcnQiOmNhc2UiZmxvd2NoYXJ0LXYyIjp5eC5jbGVhcigpLChyPW14KCkpLnBhcnNlci55eT15eDticmVhaztjYXNlInNlcXVlbmNlIjoocj1EaygpKS5wYXJzZXIueXk9Sms7YnJlYWs7Y2FzZSJnYW50dCI6KHI9d3coKSkucGFyc2VyLnl5PXZ3O2JyZWFrO2Nhc2UiY2xhc3MiOmNhc2UiY2xhc3NEaWFncmFtIjoocj1UYigpKS5wYXJzZXIueXk9dmI7YnJlYWs7Y2FzZSJzdGF0ZSI6Y2FzZSJzdGF0ZURpYWdyYW0iOihyPSRUKCkpLnBhcnNlci55eT1vRTticmVhaztjYXNlImluZm8iOm8uZGVidWcoImluZm8gaW5mbyBpbmZvIiksKHI9dGsoKSkucGFyc2VyLnl5PUt3O2JyZWFrO2Nhc2UicGllIjpvLmRlYnVnKCJwaWUiKSwocj1paygpKS5wYXJzZXIueXk9Y2s7YnJlYWs7Y2FzZSJlciI6by5kZWJ1ZygiZXIiKSwocj1JXygpKS5wYXJzZXIueXk9Ql87YnJlYWs7Y2FzZSJqb3VybmV5IjpvLmRlYnVnKCJKb3VybmV5IiksKHI9TEUoKSkucGFyc2VyLnl5PU9FO2JyZWFrO2Nhc2UicmVxdWlyZW1lbnQiOmNhc2UicmVxdWlyZW1lbnREaWFncmFtIjpvLmRlYnVnKCJSZXF1aXJlbWVudERpYWdyYW0iKSwocj1kaygpKS5wYXJzZXIueXk9Ymt9cmV0dXJuIHIucGFyc2VyLnl5LmdyYXBoVHlwZT1pLHIucGFyc2VyLnl5LnBhcnNlRXJyb3I9ZnVuY3Rpb24odCxlKXt0aHJvd3tzdHI6dCxoYXNoOmV9fSxyLnBhcnNlKHQpLHJ9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuLHIpe3RyeXtpZih2b2lkIDAhPT1lKXN3aXRjaChlPWUudHJpbSgpLG4pe2Nhc2Uib3Blbl9kaXJlY3RpdmUiOmlDPXt9O2JyZWFrO2Nhc2UidHlwZV9kaXJlY3RpdmUiOmlDLnR5cGU9ZS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2UiYXJnX2RpcmVjdGl2ZSI6aUMuYXJncz1KU09OLnBhcnNlKGUpO2JyZWFrO2Nhc2UiY2xvc2VfZGlyZWN0aXZlIjooZnVuY3Rpb24odCxlLG4pe3N3aXRjaChvLmRlYnVnKCJEaXJlY3RpdmUgdHlwZT0iLmNvbmNhdChlLnR5cGUsIiB3aXRoIGFyZ3M6IiksZS5hcmdzKSxlLnR5cGUpe2Nhc2UiaW5pdCI6Y2FzZSJpbml0aWFsaXplIjpbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWUuYXJnc1t0XSYmKCJmbG93Y2hhcnQtdjIiPT09biYmKG49ImZsb3djaGFydCIpLGUuYXJnc1tuXT1lLmFyZ3NbdF0sZGVsZXRlIGUuYXJnc1t0XSl9KSksby5kZWJ1Zygic2FuaXRpemUgaW4gaGFuZGxlRGlyZWN0aXZlIixlLmFyZ3MpLFV2KGUuYXJncyksby5kZWJ1Zygic2FuaXRpemUgaW4gaGFuZGxlRGlyZWN0aXZlIChkb25lKSIsZS5hcmdzKSxlLmFyZ3MsZWIoZS5hcmdzKTticmVhaztjYXNlIndyYXAiOmNhc2Uibm93cmFwIjp0JiZ0LnNldFdyYXAmJnQuc2V0V3JhcCgid3JhcCI9PT1lLnR5cGUpO2JyZWFrO2Nhc2UidGhlbWVDc3MiOm8ud2FybigidGhlbWVDc3MgZW5jb3VudGVyZWQiKTticmVhaztkZWZhdWx0Om8ud2FybigiVW5oYW5kbGVkIGRpcmVjdGl2ZTogc291cmNlOiAnJSV7Ii5jb25jYXQoZS50eXBlLCI6ICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShlLmFyZ3M/ZS5hcmdzOnt9KSwifSUlIiksZSl9fSkodCxpQyxyKSxpQz1udWxsfX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgc2VxdWVuY2VEaWFncmFtIGRpcmVjdGl2ZTogIi5jb25jYXQoZSwiIGppc29uIGNvbnRleHQ6ICIpLmNvbmNhdChuKSksby5lcnJvcih0Lm1lc3NhZ2UpfX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0JiZ0LmZvbnRGYW1pbHkmJih0LnRoZW1lVmFyaWFibGVzJiZ0LnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHl8fCh0LnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OnQuZm9udEZhbWlseX0pKSxmdW5jdGlvbih0KXtXdj1Mdih7fSx0KX0odCksdCYmdC50aGVtZSYmb3ZbdC50aGVtZV0/dC50aGVtZVZhcmlhYmxlcz1vdlt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKTp0JiYodC50aGVtZVZhcmlhYmxlcz1vdi5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKTt2YXIgZT0ib2JqZWN0Ij09PW5DKHQpP2Z1bmN0aW9uKHQpe3JldHVybiBHdj1Mdih7fSxWdiksR3Y9THYoR3YsdCksdC50aGVtZSYmKEd2LnRoZW1lVmFyaWFibGVzPW92W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxadj1RdihHdixYdiksR3Z9KHQpOkt2KCk7YUMoZSkscyhlLmxvZ0xldmVsKX0scmVpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSxnZXRDb25maWc6SnYsc2V0Q29uZmlnOmZ1bmN0aW9uKHQpe3JldHVybiBMdihadix0KSxKdigpfSxnZXRTaXRlQ29uZmlnOkt2LHVwZGF0ZVNpdGVDb25maWc6ZnVuY3Rpb24odCl7cmV0dXJuIEd2PUx2KEd2LHQpLFF2KEd2LFh2KSxHdn0scmVzZXQ6ZnVuY3Rpb24oKXtuYigpfSxnbG9iYWxSZXNldDpmdW5jdGlvbigpe25iKCksYUMoSnYoKSl9LGRlZmF1bHRDb25maWc6VnZ9KTtzKEp2KCkubG9nTGV2ZWwpLG5iKEp2KCkpO2NvbnN0IHNDPW9DO3ZhciBjQz1mdW5jdGlvbigpe3VDLnN0YXJ0T25Mb2FkP3NDLmdldENvbmZpZygpLnN0YXJ0T25Mb2FkJiZ1Qy5pbml0KCk6dm9pZCAwPT09dUMuc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJJbiBzdGFydCwgbm8gY29uZmlnIiksc0MuZ2V0Q29uZmlnKCkuc3RhcnRPbkxvYWQmJnVDLmluaXQoKSl9OyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oKXtjQygpfSksITEpO3ZhciB1Qz17c3RhcnRPbkxvYWQ6ITAsaHRtbExhYmVsczohMCxtZXJtYWlkQVBJOnNDLHBhcnNlOnNDLnBhcnNlLHJlbmRlcjpzQy5yZW5kZXIsaW5pdDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9c0MuZ2V0Q29uZmlnKCk7YXJndW1lbnRzLmxlbmd0aD49Mj8odm9pZCAwIT09YXJndW1lbnRzWzBdJiYodUMuc2VxdWVuY2VDb25maWc9YXJndW1lbnRzWzBdKSx0PWFyZ3VtZW50c1sxXSk6dD1hcmd1bWVudHNbMF0sImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdPyhlPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOnZvaWQgMCE9PXIubWVybWFpZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiByLm1lcm1haWQuY2FsbGJhY2s/KGU9ci5tZXJtYWlkLmNhbGxiYWNrLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOm8uZGVidWcoIk5vIENhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpLHQ9dm9pZCAwPT09dD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWVybWFpZCIpOiJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpOnQgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZT9bdF06dCxvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGJlZm9yZTogIit1Qy5zdGFydE9uTG9hZCksdm9pZCAwIT09dUMuc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGlubmVyOiAiK3VDLnN0YXJ0T25Mb2FkKSxzQy51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDp1Qy5zdGFydE9uTG9hZH0pKSx2b2lkIDAhPT11Qy5nYW50dENvbmZpZyYmc0MudXBkYXRlU2l0ZUNvbmZpZyh7Z2FudHQ6dUMuZ2FudHRDb25maWd9KTtmb3IodmFyIGksYT1uZXcgSHYuaW5pdElkR2VuZXJhdGlvcihyLmRldGVybWluaXN0aWNJZHMsci5kZXRlcm1pbmlzdGljSURTZWVkKSxzPWZ1bmN0aW9uKHIpe3ZhciBzPXRbcl07aWYocy5nZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIikpcmV0dXJuImNvbnRpbnVlIjtzLnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCEwKTt2YXIgYz0ibWVybWFpZC0iLmNvbmNhdChhLm5leHQoKSk7aT1zLmlubmVySFRNTCxpPUh2LmVudGl0eURlY29kZShpKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTt2YXIgdT1Idi5kZXRlY3RJbml0KGkpO3UmJm8uZGVidWcoIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogIix1KTt0cnl7c0MucmVuZGVyKGMsaSwoZnVuY3Rpb24odCxuKXtzLmlubmVySFRNTD10LHZvaWQgMCE9PWUmJmUoYyksbiYmbihzKX0pLHMpfWNhdGNoKHQpe28ud2FybigiU3ludGF4IEVycm9yIHJlbmRlcmluZyIpLG8ud2Fybih0KSxuLnBhcnNlRXJyb3ImJm4ucGFyc2VFcnJvcih0KX19LGM9MDtjPHQubGVuZ3RoO2MrKylzKGMpfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQubWVybWFpZCYmKHZvaWQgMCE9PXQubWVybWFpZC5zdGFydE9uTG9hZCYmKHVDLnN0YXJ0T25Mb2FkPXQubWVybWFpZC5zdGFydE9uTG9hZCksdm9pZCAwIT09dC5tZXJtYWlkLmh0bWxMYWJlbHMmJih1Qy5odG1sTGFiZWxzPSJmYWxzZSIhPT10Lm1lcm1haWQuaHRtbExhYmVscyYmITEhPT10Lm1lcm1haWQuaHRtbExhYmVscykpLHNDLmluaXRpYWxpemUodCl9LGNvbnRlbnRMb2FkZWQ6Y0N9O2NvbnN0IGxDPXVDfSw0OTQ5Oih0LGUsbik9Pnt0LmV4cG9ydHM9e2dyYXBobGliOm4oNjYxNCksZGFncmU6bigxNDYzKSxpbnRlcnNlY3Q6big4MTE0KSxyZW5kZXI6big1Nzg3KSx1dGlsOm4oODM1NSksdmVyc2lvbjpuKDU2ODkpfX0sOTE0NDoodCxlLG4pPT57dmFyIHI9big4MzU1KTtmdW5jdGlvbiBpKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9dC5leHBvcnRzPXtkZWZhdWx0Omksbm9ybWFsOmksdmVlOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgTCA0IDUgeiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9LHVuZGlyZWN0ZWQ6ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX19fSw1NjMyOih0LGUsbik9Pnt2YXIgcj1uKDgzNTUpLGk9big0MzIyKSxhPW4oMTMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1lLm5vZGVzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gci5pc1N1YmdyYXBoKGUsdCl9KSkscz10LnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShvLChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTtyZXR1cm4gcy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIikuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLmlkfSkpLnN0eWxlKCJvcGFjaXR5IiwwKSxzPXQuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKSxyLmFwcGx5VHJhbnNpdGlvbihzLGUpLnN0eWxlKCJvcGFjaXR5IiwxKSxzLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxyPWkuc2VsZWN0KHRoaXMpO2kuc2VsZWN0KHRoaXMpLmFwcGVuZCgicmVjdCIpO3ZhciBvPXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2EobyxuLG4uY2x1c3RlckxhYmVsUG9zKX0pKSxzLnNlbGVjdEFsbCgicmVjdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxhPWkuc2VsZWN0KHRoaXMpO3IuYXBwbHlTdHlsZShhLG4uc3R5bGUpfSkpLG49cy5leGl0P3MuZXhpdCgpOnMuc2VsZWN0QWxsKG51bGwpLHIuYXBwbHlUcmFuc2l0aW9uKG4sZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHN9fSw2MzE1Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9bigxMDM0KSxpPW4oMTMyMiksYT1uKDgzNTUpLG89big0MzIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixzPXQuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtyZXR1cm4gcy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVkZ2VMYWJlbCIsITApLnN0eWxlKCJvcGFjaXR5IiwwKSwocz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcyk7bi5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBhPWUuZWRnZSh0KSxzPWkobixlLmVkZ2UodCksMCwwKS5jbGFzc2VkKCJsYWJlbCIsITApLGM9cy5ub2RlKCkuZ2V0QkJveCgpO2EubGFiZWxJZCYmcy5hdHRyKCJpZCIsYS5sYWJlbElkKSxyLmhhcyhhLCJ3aWR0aCIpfHwoYS53aWR0aD1jLndpZHRoKSxyLmhhcyhhLCJoZWlnaHQiKXx8KGEuaGVpZ2h0PWMuaGVpZ2h0KX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKSxhLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxzfX0sOTQwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9bigxMDM0KSxpPW4oNzU4NCksYT1uKDgzNTUpLG89big0MzIyKTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49KG8ubGluZXx8by5zdmcubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSk7cmV0dXJuKG4uY3VydmV8fG4uaW50ZXJwb2xhdGUpKHQuY3VydmUpLG4oZSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz10LnNlbGVjdEFsbCgiZy5lZGdlUGF0aCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKSx1PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVBhdGgiKS5zdHlsZSgib3BhY2l0eSIsMCk7cmV0dXJuIG4uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJwYXRoIikuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KSxpPWUubm9kZSh0LnYpLmVsZW07cmV0dXJuIHMobixyLnJhbmdlKG4ucG9pbnRzLmxlbmd0aCkubWFwKChmdW5jdGlvbigpe3JldHVybiBlPSh0PWkpLmdldEJCb3goKSx7eDoobj10Lm93bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkubXVsdGlwbHkodC5nZXRTY3JlZW5DVE0oKSkudHJhbnNsYXRlKGUud2lkdGgvMixlLmhlaWdodC8yKSkuZSx5Om4uZn07dmFyIHQsZSxufSkpKX0pKSxuLmFwcGVuZCgiZGVmcyIpLG59KGMsZSk7IWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGl0KCk7YS5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9KGMsZSk7dmFyIGw9dm9pZCAwIT09Yy5tZXJnZT9jLm1lcmdlKHUpOmM7cmV0dXJuIGEuYXBwbHlUcmFuc2l0aW9uKGwsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLGwuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcykscj1lLmVkZ2UodCk7ci5lbGVtPXRoaXMsci5pZCYmbi5hdHRyKCJpZCIsci5pZCksYS5hcHBseUNsYXNzKG4sci5jbGFzcywobi5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJlZGdlUGF0aCIpfSkpLGwuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCk7bi5hcnJvd2hlYWRJZD1yLnVuaXF1ZUlkKCJhcnJvd2hlYWQiKTt2YXIgYz1vLnNlbGVjdCh0aGlzKS5hdHRyKCJtYXJrZXItZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrKHQ9bG9jYXRpb24uaHJlZixlPW4uYXJyb3doZWFkSWQsdC5zcGxpdCgiIyIpWzBdKyIjIitlKyIpIik7dmFyIHQsZX0pKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTthLmFwcGx5VHJhbnNpdGlvbihjLGUpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgbj10LmVkZ2UoZSkscj10Lm5vZGUoZS52KSxhPXQubm9kZShlLncpLG89bi5wb2ludHMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG8udW5zaGlmdChpKHIsb1swXSkpLG8ucHVzaChpKGEsb1tvLmxlbmd0aC0xXSkpLHMobixvKX0oZSx0KX0pKSxhLmFwcGx5U3R5bGUoYyxuLnN0eWxlKX0pKSxsLnNlbGVjdEFsbCgiZGVmcyAqIikucmVtb3ZlKCksbC5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7KDAsbltyLmFycm93aGVhZF0pKG8uc2VsZWN0KHRoaXMpLHIuYXJyb3doZWFkSWQsciwiYXJyb3doZWFkIil9KSksbH19LDYwNzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oMTAzNCksaT1uKDEzMjIpLGE9big4MzU1KSxvPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcyxjPWUubm9kZXMoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFhLmlzU3ViZ3JhcGgoZSx0KX0pKSx1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKS5kYXRhKGMsKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLmNsYXNzZWQoInVwZGF0ZSIsITApO3JldHVybiB1LmV4aXQoKS5yZW1vdmUoKSx1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuc3R5bGUoIm9wYWNpdHkiLDApLCh1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHM9ZS5ub2RlKHQpLGM9by5zZWxlY3QodGhpcyk7YS5hcHBseUNsYXNzKGMscy5jbGFzcywoYy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksYy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgdT1jLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxsPWkodSxzKSxoPW5bcy5zaGFwZV0sZj1yLnBpY2sobC5ub2RlKCkuZ2V0QkJveCgpLCJ3aWR0aCIsImhlaWdodCIpO3MuZWxlbT10aGlzLHMuaWQmJmMuYXR0cigiaWQiLHMuaWQpLHMubGFiZWxJZCYmdS5hdHRyKCJpZCIscy5sYWJlbElkKSxyLmhhcyhzLCJ3aWR0aCIpJiYoZi53aWR0aD1zLndpZHRoKSxyLmhhcyhzLCJoZWlnaHQiKSYmKGYuaGVpZ2h0PXMuaGVpZ2h0KSxmLndpZHRoKz1zLnBhZGRpbmdMZWZ0K3MucGFkZGluZ1JpZ2h0LGYuaGVpZ2h0Kz1zLnBhZGRpbmdUb3Arcy5wYWRkaW5nQm90dG9tLHUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHMucGFkZGluZ0xlZnQtcy5wYWRkaW5nUmlnaHQpLzIrIiwiKyhzLnBhZGRpbmdUb3Atcy5wYWRkaW5nQm90dG9tKS8yKyIpIik7dmFyIGQ9by5zZWxlY3QodGhpcyk7ZC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKS5yZW1vdmUoKTt2YXIgcD1oKGQsZixzKS5jbGFzc2VkKCJsYWJlbC1jb250YWluZXIiLCEwKTthLmFwcGx5U3R5bGUocCxzLnN0eWxlKTt2YXIgeT1wLm5vZGUoKS5nZXRCQm94KCk7cy53aWR0aD15LndpZHRoLHMuaGVpZ2h0PXkuaGVpZ2h0fSkpLHM9dS5leGl0P3UuZXhpdCgpOnUuc2VsZWN0QWxsKG51bGwpLGEuYXBwbHlUcmFuc2l0aW9uKHMsZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHV9fSw0MzIyOih0LGUsbik9Pnt2YXIgcjtpZighcil0cnl7cj1uKDcxODgpfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZDMpLHQuZXhwb3J0cz1yfSwxNDYzOih0LGUsbik9Pnt2YXIgcjt0cnl7cj1uKDY4MSl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kYWdyZSksdC5leHBvcnRzPXJ9LDY2MTQ6KHQsZSxuKT0+e3ZhciByO3RyeXtyPW4oODI4Mil9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LDgxMTQ6KHQsZSxuKT0+e3QuZXhwb3J0cz17bm9kZTpuKDc1ODQpLGNpcmNsZTpuKDY1ODcpLGVsbGlwc2U6bigzMjYwKSxwb2x5Z29uOm4oNTMzNykscmVjdDpuKDgwNDkpfX0sNjU4NzoodCxlLG4pPT57dmFyIHI9bigzMjYwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByKHQsZSxlLG4pfX0sMzI2MDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX19LDY4MDg6dD0+e2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdCplPjB9dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGkpe3ZhciBhLG8scyxjLHUsbCxoLGYsZCxwLHksZyxtO2lmKCEoYT1uLnktdC55LHM9dC54LW4ueCx1PW4ueCp0LnktdC54Km4ueSxkPWEqci54K3Mqci55K3UscD1hKmkueCtzKmkueSt1LDAhPT1kJiYwIT09cCYmZShkLHApfHwobz1pLnktci55LGM9ci54LWkueCxsPWkueCpyLnktci54KmkueSxoPW8qdC54K2MqdC55K2wsZj1vKm4ueCtjKm4ueStsLDAhPT1oJiYwIT09ZiYmZShoLGYpfHwwPT0oeT1hKmMtbypzKSkpKXJldHVybiBnPU1hdGguYWJzKHkvMikse3g6KG09cypsLWMqdSk8MD8obS1nKS95OihtK2cpL3kseToobT1vKnUtYSpsKTwwPyhtLWcpL3k6KG0rZykveX19fSw3NTg0OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9fSw1MzM3Oih0LGUsbik9Pnt2YXIgcj1uKDY4MDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC54LGE9dC55LG89W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsdC54KSxjPU1hdGgubWluKGMsdC55KX0pKTtmb3IodmFyIHU9aS10LndpZHRoLzItcyxsPWEtdC5oZWlnaHQvMi1jLGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGY9ZVtoXSxkPWVbaDxlLmxlbmd0aC0xP2grMTowXSxwPXIodCxuLHt4OnUrZi54LHk6bCtmLnl9LHt4OnUrZC54LHk6bCtkLnl9KTtwJiZvLnB1c2gocCl9cmV0dXJuIG8ubGVuZ3RoPyhvLmxlbmd0aD4xJiZvLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKSxvWzBdKTooY29uc29sZS5sb2coIk5PIElOVEVSU0VDVElPTiBGT1VORCwgUkVUVVJOIE5PREUgQ0VOVEVSIix0KSx0KX19LDgwNDk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX19LDgyODQ6KHQsZSxuKT0+e3ZhciByPW4oODM1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjEwMDAwMCIpLGk9bi5hcHBlbmQoInhodG1sOmRpdiIpO2kuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIGE9ZS5sYWJlbDtzd2l0Y2godHlwZW9mIGEpe2Nhc2UiZnVuY3Rpb24iOmkuaW5zZXJ0KGEpO2JyZWFrO2Nhc2Uib2JqZWN0IjppLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKTticmVhaztkZWZhdWx0OmkuaHRtbChhKX1yLmFwcGx5U3R5bGUoaSxlLmxhYmVsU3R5bGUpLGkuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxpLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpO3ZhciBvPWkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmF0dHIoIndpZHRoIixvLndpZHRoKS5hdHRyKCJoZWlnaHQiLG8uaGVpZ2h0KSxufX0sMTMyMjoodCxlLG4pPT57dmFyIHI9big3MzE4KSxpPW4oODI4NCksYT1uKDgyODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG89ZS5sYWJlbCxzPXQuYXBwZW5kKCJnIik7InN2ZyI9PT1lLmxhYmVsVHlwZT9hKHMsZSk6InN0cmluZyIhPXR5cGVvZiBvfHwiaHRtbCI9PT1lLmxhYmVsVHlwZT9pKHMsZSk6cihzLGUpO3ZhciBjLHU9cy5ub2RlKCkuZ2V0QkJveCgpO3N3aXRjaChuKXtjYXNlInRvcCI6Yz0tZS5oZWlnaHQvMjticmVhaztjYXNlImJvdHRvbSI6Yz1lLmhlaWdodC8yLXUuaGVpZ2h0O2JyZWFrO2RlZmF1bHQ6Yz0tdS5oZWlnaHQvMn1yZXR1cm4gcy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdS53aWR0aC8yKyIsIitjKyIpIiksc319LDgyODc6KHQsZSxuKT0+e3ZhciByPW4oODM1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5ub2RlKCkuYXBwZW5kQ2hpbGQoZS5sYWJlbCksci5hcHBseVN0eWxlKG4sZS5sYWJlbFN0eWxlKSxufX0sNzMxODoodCxlLG4pPT57dmFyIHI9big4MzU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5hcHBlbmQoInRleHQiKSxpPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPSIiLHI9ITEsaT0wO2k8dC5sZW5ndGg7KytpKWU9dFtpXSxyPyhuKz0ibiI9PT1lPyJcbiI6ZSxyPSExKToiXFwiPT09ZT9yPSEwOm4rPWU7cmV0dXJuIG59KGUubGFiZWwpLnNwbGl0KCJcbiIpLGE9MDthPGkubGVuZ3RoO2ErKyluLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KGlbYV0pO3JldHVybiByLmFwcGx5U3R5bGUobixlLmxhYmVsU3R5bGUpLG59fSwxMDM0Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17ZGVmYXVsdHM6bigxNzQ3KSxlYWNoOm4oNjA3MyksaXNGdW5jdGlvbjpuKDM1NjApLGlzUGxhaW5PYmplY3Q6big4NjMwKSxwaWNrOm4oOTcyMiksaGFzOm4oODcyMSkscmFuZ2U6big2MDI2KSx1bmlxdWVJZDpuKDM5NTUpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSw2MzgxOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4MzU1KSxpPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpO2Z1bmN0aW9uIGEodCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9bi5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsYSksci5hcHBseVRyYW5zaXRpb24obi5zZWxlY3RBbGwoInJlY3QiKSxlKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5oZWlnaHR9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkud2lkdGgvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLWUubm9kZSh0KS5oZWlnaHQvMn0pKX19LDQ1Nzc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgzNTUpLGk9big0MzIyKSxhPW4oMTAzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLmVkZ2UodCk7cmV0dXJuIGEuaGFzKG4sIngiKT8idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikiOiIifXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsbil9fSw0ODQ5Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4MzU1KSxpPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLm5vZGUodCk7cmV0dXJuInRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sNTc4NzoodCxlLG4pPT57dmFyIHI9bigxMDM0KSxpPW4oNDMyMiksYT1uKDE0NjMpLmxheW91dDt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKDYwNyksZT1uKDU2MzIpLGk9big2MzE1KSx1PW4oOTQwKSxsPW4oNDg0OSksaD1uKDQ1NzcpLGY9big2MzgxKSxkPW4oNDQxOCkscD1uKDkxNDQpLHk9ZnVuY3Rpb24obix5KXshZnVuY3Rpb24odCl7dC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtyLmhhcyhuLCJsYWJlbCIpfHx0LmNoaWxkcmVuKGUpLmxlbmd0aHx8KG4ubGFiZWw9ZSksci5oYXMobiwicGFkZGluZ1giKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nTGVmdDpuLnBhZGRpbmdYLHBhZGRpbmdSaWdodDpuLnBhZGRpbmdYfSksci5oYXMobiwicGFkZGluZ1kiKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nVG9wOm4ucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpuLnBhZGRpbmdZfSksci5oYXMobiwicGFkZGluZyIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdMZWZ0Om4ucGFkZGluZyxwYWRkaW5nUmlnaHQ6bi5wYWRkaW5nLHBhZGRpbmdUb3A6bi5wYWRkaW5nLHBhZGRpbmdCb3R0b206bi5wYWRkaW5nfSksci5kZWZhdWx0cyhuLG8pLHIuZWFjaChbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSwoZnVuY3Rpb24odCl7blt0XT1OdW1iZXIoblt0XSl9KSksci5oYXMobiwid2lkdGgiKSYmKG4uX3ByZXZXaWR0aD1uLndpZHRoKSxyLmhhcyhuLCJoZWlnaHQiKSYmKG4uX3ByZXZIZWlnaHQ9bi5oZWlnaHQpfSkpLHQuZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5oYXMobiwibGFiZWwiKXx8KG4ubGFiZWw9IiIpLHIuZGVmYXVsdHMobixzKX0pKX0oeSk7dmFyIGc9YyhuLCJvdXRwdXQiKSxtPWMoZywiY2x1c3RlcnMiKSx2PWMoZywiZWRnZVBhdGhzIiksYj1pKGMoZywiZWRnZUxhYmVscyIpLHkpLF89dChjKGcsIm5vZGVzIikseSxkKTthKHkpLGwoXyx5KSxoKGIseSksdSh2LHkscCk7dmFyIHg9ZShtLHkpO2YoeCx5KSxmdW5jdGlvbih0KXtyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7ci5oYXMobiwiX3ByZXZXaWR0aCIpP24ud2lkdGg9bi5fcHJldldpZHRoOmRlbGV0ZSBuLndpZHRoLHIuaGFzKG4sIl9wcmV2SGVpZ2h0Iik/bi5oZWlnaHQ9bi5fcHJldkhlaWdodDpkZWxldGUgbi5oZWlnaHQsZGVsZXRlIG4uX3ByZXZXaWR0aCxkZWxldGUgbi5fcHJldkhlaWdodH0pKX0oeSl9O3JldHVybiB5LmNyZWF0ZU5vZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUseSk6dH0seS5jcmVhdGVDbHVzdGVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHkpOmV9LHkuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHkpOml9LHkuY3JlYXRlRWRnZVBhdGhzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQseSk6dX0seS5zaGFwZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCx5KTpkfSx5LmFycm93cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10LHkpOnB9LHl9O3ZhciBvPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LHM9e2Fycm93aGVhZDoibm9ybWFsIixjdXJ2ZTppLmN1cnZlTGluZWFyfTtmdW5jdGlvbiBjKHQsZSl7dmFyIG49dC5zZWxlY3QoImcuIitlKTtyZXR1cm4gbi5lbXB0eSgpJiYobj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSksbn19LDQ0MTg6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgwNDkpLGk9bigzMjYwKSxhPW4oNjU4Nyksbz1uKDUzMzcpO3QuZXhwb3J0cz17cmVjdDpmdW5jdGlvbih0LGUsbil7dmFyIGk9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsbi5yeCkuYXR0cigicnkiLG4ucnkpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiByKG4sdCl9LGl9LGVsbGlwc2U6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lmluc2VydCgiZWxsaXBzZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyeCIscikuYXR0cigicnkiLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLHIsYSx0KX0sb30sY2lyY2xlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1NYXRoLm1heChlLndpZHRoLGUuaGVpZ2h0KS8yLGk9dC5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyIixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGEobixyLHQpfSxpfSxkaWFtb25kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLndpZHRoKk1hdGguU1FSVDIvMixpPWUuaGVpZ2h0Kk1hdGguU1FSVDIvMixhPVt7eDowLHk6LWl9LHt4Oi1yLHk6MH0se3g6MCx5Oml9LHt4OnIseTowfV0scz10Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsYS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbyhuLGEsdCl9LHN9fX0sODM1NToodCxlLG4pPT57dmFyIHI9bigxMDM0KTt0LmV4cG9ydHM9e2lzU3ViZ3JhcGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuY2hpbGRyZW4oZSkubGVuZ3RofSxlZGdlVG9JZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LnYpKyI6IithKHQudykrIjoiK2EodC5uYW1lKX0sYXBwbHlTdHlsZTpmdW5jdGlvbih0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfSxhcHBseUNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtlJiZ0LmF0dHIoImNsYXNzIixlKS5hdHRyKCJjbGFzcyIsbisiICIrdC5hdHRyKCJjbGFzcyIpKX0sYXBwbHlUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ncmFwaCgpO2lmKHIuaXNQbGFpbk9iamVjdChuKSl7dmFyIGk9bi50cmFuc2l0aW9uO2lmKHIuaXNGdW5jdGlvbihpKSlyZXR1cm4gaSh0KX1yZXR1cm4gdH19O3ZhciBpPS86L2c7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD9TdHJpbmcodCkucmVwbGFjZShpLCJcXDoiKToiIn19LDU2ODk6dD0+e3QuZXhwb3J0cz0iMC42LjQifSw3MTg4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7bi5yKGUpLG4uZChlLHtGb3JtYXRTcGVjaWZpZXI6KCk9PnVjLGFjdGl2ZTooKT0+SnIsYXJjOigpPT5meCxhcmVhOigpPT52eCxhcmVhUmFkaWFsOigpPT5TeCxhc2NlbmRpbmc6KCk9PmksYXV0b1R5cGU6KCk9PkZvLGF4aXNCb3R0b206KCk9Pml0LGF4aXNMZWZ0OigpPT5hdCxheGlzUmlnaHQ6KCk9PnJ0LGF4aXNUb3A6KCk9Pm50LGJpc2VjdDooKT0+dSxiaXNlY3RMZWZ0OigpPT5jLGJpc2VjdFJpZ2h0OigpPT5zLGJpc2VjdG9yOigpPT5hLGJsb2I6KCk9Pm1zLGJydXNoOigpPT5BaSxicnVzaFNlbGVjdGlvbjooKT0+RWksYnJ1c2hYOigpPT5DaSxicnVzaFk6KCk9PlNpLGJ1ZmZlcjooKT0+YnMsY2hvcmQ6KCk9PkZpLGNsaWVudFBvaW50OigpPT5EbixjbHVzdGVyOigpPT5TZCxjb2xvcjooKT0+VmUsY29udG91ckRlbnNpdHk6KCk9Pm9vLGNvbnRvdXJzOigpPT50byxjcmVhdGU6KCk9PmpfLGNyZWF0b3I6KCk9PmllLGNyb3NzOigpPT5mLGNzdjooKT0+VHMsY3N2Rm9ybWF0OigpPT5Ubyxjc3ZGb3JtYXRCb2R5OigpPT5Fbyxjc3ZGb3JtYXRSb3c6KCk9PlNvLGNzdkZvcm1hdFJvd3M6KCk9PkNvLGNzdkZvcm1hdFZhbHVlOigpPT5Bbyxjc3ZQYXJzZTooKT0+d28sY3N2UGFyc2VSb3dzOigpPT5rbyxjdWJlaGVsaXg6KCk9PkhhLGN1cnZlQmFzaXM6KCk9PnN3LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PnV3LGN1cnZlQmFzaXNPcGVuOigpPT5odyxjdXJ2ZUJ1bmRsZTooKT0+ZHcsY3VydmVDYXJkaW5hbDooKT0+Z3csY3VydmVDYXJkaW5hbENsb3NlZDooKT0+dncsY3VydmVDYXJkaW5hbE9wZW46KCk9Pl93LGN1cnZlQ2F0bXVsbFJvbTooKT0+a3csY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5FdyxjdXJ2ZUNhdG11bGxSb21PcGVuOigpPT5TdyxjdXJ2ZUxpbmVhcjooKT0+cHgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9Pk13LGN1cnZlTW9ub3RvbmVYOigpPT5GdyxjdXJ2ZU1vbm90b25lWTooKT0+UHcsY3VydmVOYXR1cmFsOigpPT56dyxjdXJ2ZVN0ZXA6KCk9PnF3LGN1cnZlU3RlcEFmdGVyOigpPT4kdyxjdXJ2ZVN0ZXBCZWZvcmU6KCk9Pkh3LGN1c3RvbUV2ZW50OigpPT5nZSxkZXNjZW5kaW5nOigpPT5kLGRldmlhdGlvbjooKT0+ZyxkaXNwYXRjaDooKT0+ZnQsZHJhZzooKT0+cG8sZHJhZ0Rpc2FibGU6KCk9PlNlLGRyYWdFbmFibGU6KCk9PkFlLGRzdjooKT0+a3MsZHN2Rm9ybWF0OigpPT5fbyxlYXNlQmFjazooKT0+aHMsZWFzZUJhY2tJbjooKT0+dXMsZWFzZUJhY2tJbk91dDooKT0+aHMsZWFzZUJhY2tPdXQ6KCk9PmxzLGVhc2VCb3VuY2U6KCk9Pm9zLGVhc2VCb3VuY2VJbjooKT0+YXMsZWFzZUJvdW5jZUluT3V0OigpPT5zcyxlYXNlQm91bmNlT3V0OigpPT5vcyxlYXNlQ2lyY2xlOigpPT5ycyxlYXNlQ2lyY2xlSW46KCk9PmVzLGVhc2VDaXJjbGVJbk91dDooKT0+cnMsZWFzZUNpcmNsZU91dDooKT0+bnMsZWFzZUN1YmljOigpPT5YcixlYXNlQ3ViaWNJbjooKT0+VnIsZWFzZUN1YmljSW5PdXQ6KCk9PlhyLGVhc2VDdWJpY091dDooKT0+R3IsZWFzZUVsYXN0aWM6KCk9PnBzLGVhc2VFbGFzdGljSW46KCk9PmRzLGVhc2VFbGFzdGljSW5PdXQ6KCk9PnlzLGVhc2VFbGFzdGljT3V0OigpPT5wcyxlYXNlRXhwOigpPT50cyxlYXNlRXhwSW46KCk9PktvLGVhc2VFeHBJbk91dDooKT0+dHMsZWFzZUV4cE91dDooKT0+Sm8sZWFzZUxpbmVhcjooKT0+am8sZWFzZVBvbHk6KCk9PiRvLGVhc2VQb2x5SW46KCk9PnFvLGVhc2VQb2x5SW5PdXQ6KCk9PiRvLGVhc2VQb2x5T3V0OigpPT5IbyxlYXNlUXVhZDooKT0+VW8sZWFzZVF1YWRJbjooKT0+WW8sZWFzZVF1YWRJbk91dDooKT0+VW8sZWFzZVF1YWRPdXQ6KCk9PnpvLGVhc2VTaW46KCk9PlpvLGVhc2VTaW5JbjooKT0+R28sZWFzZVNpbkluT3V0OigpPT5abyxlYXNlU2luT3V0OigpPT5YbyxlbnRyaWVzOigpPT5wYSxldmVudDooKT0+bGUsZXh0ZW50OigpPT5tLGZvcmNlQ2VudGVyOigpPT5Ccyxmb3JjZUNvbGxpZGU6KCk9PldzLGZvcmNlTGluazooKT0+WHMsZm9yY2VNYW55Qm9keTooKT0+dGMsZm9yY2VSYWRpYWw6KCk9PmVjLGZvcmNlU2ltdWxhdGlvbjooKT0+SnMsZm9yY2VYOigpPT5uYyxmb3JjZVk6KCk9PnJjLGZvcm1hdDooKT0+cGMsZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+YmMsZm9ybWF0TG9jYWxlOigpPT52Yyxmb3JtYXRQcmVmaXg6KCk9PnljLGZvcm1hdFNwZWNpZmllcjooKT0+Y2MsZ2VvQWxiZXJzOigpPT5VZixnZW9BbGJlcnNVc2E6KCk9PnFmLGdlb0FyZWE6KCk9Pnl1LGdlb0F6aW11dGhhbEVxdWFsQXJlYTooKT0+VmYsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT5XZixnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+WGYsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PkdmLGdlb0JvdW5kczooKT0+c2wsZ2VvQ2VudHJvaWQ6KCk9PmJsLGdlb0NpcmNsZTooKT0+TmwsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+VWwsZ2VvQ2xpcENpcmNsZTooKT0+cWwsZ2VvQ2xpcEV4dGVudDooKT0+VmwsZ2VvQ2xpcFJlY3RhbmdsZTooKT0+V2wsZ2VvQ29uaWNDb25mb3JtYWw6KCk9PmVkLGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT50ZCxnZW9Db25pY0VxdWFsQXJlYTooKT0+emYsZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PllmLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PmFkLGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PmlkLGdlb0NvbnRhaW5zOigpPT5waCxnZW9EaXN0YW5jZTooKT0+YWgsZ2VvRXF1YWxFYXJ0aDooKT0+ZmQsZ2VvRXF1YWxFYXJ0aFJhdzooKT0+aGQsZ2VvRXF1aXJlY3Rhbmd1bGFyOigpPT5yZCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pm5kLGdlb0dub21vbmljOigpPT5wZCxnZW9Hbm9tb25pY1JhdzooKT0+ZGQsZ2VvR3JhdGljdWxlOigpPT5taCxnZW9HcmF0aWN1bGUxMDooKT0+dmgsZ2VvSWRlbnRpdHk6KCk9PnlkLGdlb0ludGVycG9sYXRlOigpPT5iaCxnZW9MZW5ndGg6KCk9Pm5oLGdlb01lcmNhdG9yOigpPT5RZixnZW9NZXJjYXRvclJhdzooKT0+WmYsZ2VvTmF0dXJhbEVhcnRoMTooKT0+bWQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+Z2QsZ2VvT3J0aG9ncmFwaGljOigpPT5iZCxnZW9PcnRob2dyYXBoaWNSYXc6KCk9PnZkLGdlb1BhdGg6KCk9PmtmLGdlb1Byb2plY3Rpb246KCk9PkZmLGdlb1Byb2plY3Rpb25NdXRhdG9yOigpPT5QZixnZW9Sb3RhdGlvbjooKT0+U2wsZ2VvU3RlcmVvZ3JhcGhpYzooKT0+eGQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+X2QsZ2VvU3RyZWFtOigpPT5udSxnZW9UcmFuc2Zvcm06KCk9PlRmLGdlb1RyYW5zdmVyc2VNZXJjYXRvcjooKT0+a2QsZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3OigpPT53ZCxncmF5OigpPT5rYSxoY2w6KCk9Pk9hLGhpZXJhcmNoeTooKT0+TWQsaGlzdG9ncmFtOigpPT5ELGhzbDooKT0+YW4saHRtbDooKT0+RHMsaW1hZ2U6KCk9PkNzLGludGVycG9sYXRlOigpPT5NbixpbnRlcnBvbGF0ZUFycmF5OigpPT54bixpbnRlcnBvbGF0ZUJhc2lzOigpPT51bixpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkOigpPT5sbixpbnRlcnBvbGF0ZUJsdWVzOigpPT5mXyxpbnRlcnBvbGF0ZUJyQkc6KCk9PlRiLGludGVycG9sYXRlQnVHbjooKT0+VWIsaW50ZXJwb2xhdGVCdVB1OigpPT5IYixpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PmtfLGludGVycG9sYXRlQ29vbDooKT0+Q18saW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PnpwLGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+VF8saW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOigpPT5VcCxpbnRlcnBvbGF0ZURhdGU6KCk9PmtuLGludGVycG9sYXRlRGlzY3JldGU6KCk9PlNwLGludGVycG9sYXRlR25CdTooKT0+V2IsaW50ZXJwb2xhdGVHcmVlbnM6KCk9PnBfLGludGVycG9sYXRlR3JleXM6KCk9PmdfLGludGVycG9sYXRlSGNsOigpPT5QcCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9PmpwLGludGVycG9sYXRlSHNsOigpPT5McCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9PklwLGludGVycG9sYXRlSHVlOigpPT5BcCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PkZfLGludGVycG9sYXRlTGFiOigpPT5ScCxpbnRlcnBvbGF0ZU1hZ21hOigpPT5SXyxpbnRlcnBvbGF0ZU51bWJlcjooKT0+VG4saW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+Ym4saW50ZXJwb2xhdGVPYmplY3Q6KCk9PkVuLGludGVycG9sYXRlT3JSZDooKT0+R2IsaW50ZXJwb2xhdGVPcmFuZ2VzOigpPT53XyxpbnRlcnBvbGF0ZVBSR246KCk9PkNiLGludGVycG9sYXRlUGlZRzooKT0+QWIsaW50ZXJwb2xhdGVQbGFzbWE6KCk9PlBfLGludGVycG9sYXRlUHVCdTooKT0+S2IsaW50ZXJwb2xhdGVQdUJ1R246KCk9PlpiLGludGVycG9sYXRlUHVPcjooKT0+TmIsaW50ZXJwb2xhdGVQdVJkOigpPT50XyxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PnZfLGludGVycG9sYXRlUmFpbmJvdzooKT0+QV8saW50ZXJwb2xhdGVSZEJ1OigpPT5PYixpbnRlcnBvbGF0ZVJkR3k6KCk9PkxiLGludGVycG9sYXRlUmRQdTooKT0+bl8saW50ZXJwb2xhdGVSZFlsQnU6KCk9PlJiLGludGVycG9sYXRlUmRZbEduOigpPT5QYixpbnRlcnBvbGF0ZVJlZHM6KCk9Pl9fLGludGVycG9sYXRlUmdiOigpPT55bixpbnRlcnBvbGF0ZVJnYkJhc2lzOigpPT5tbixpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkOigpPT52bixpbnRlcnBvbGF0ZVJvdW5kOigpPT5NcCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9Pk9fLGludGVycG9sYXRlU3BlY3RyYWw6KCk9PlliLGludGVycG9sYXRlU3RyaW5nOigpPT5BbixpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzczooKT0+cHIsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PnlyLGludGVycG9sYXRlVHVyYm86KCk9PkJfLGludGVycG9sYXRlVmlyaWRpczooKT0+SV8saW50ZXJwb2xhdGVXYXJtOigpPT5FXyxpbnRlcnBvbGF0ZVlsR246KCk9Pm9fLGludGVycG9sYXRlWWxHbkJ1OigpPT5pXyxpbnRlcnBvbGF0ZVlsT3JCcjooKT0+Y18saW50ZXJwb2xhdGVZbE9yUmQ6KCk9PmxfLGludGVycG9sYXRlWm9vbTooKT0+T3AsaW50ZXJydXB0OigpPT5hcixpbnRlcnZhbDooKT0+ZmssaXNvRm9ybWF0OigpPT51ayxpc29QYXJzZTooKT0+aGssanNvbjooKT0+QXMsa2V5czooKT0+ZmEsbGFiOigpPT5UYSxsY2g6KCk9PkRhLGxpbmU6KCk9Pm14LGxpbmVSYWRpYWw6KCk9PkN4LGxpbmtIb3Jpem9udGFsOigpPT5SeCxsaW5rUmFkaWFsOigpPT5QeCxsaW5rVmVydGljYWw6KCk9PkZ4LGxvY2FsOigpPT56XyxtYXA6KCk9Pm5hLG1hdGNoZXI6KCk9Pm10LG1heDooKT0+SSxtZWFuOigpPT5SLG1lZGlhbjooKT0+RixtZXJnZTooKT0+UCxtaW46KCk9PmosbW91c2U6KCk9PkJuLG5hbWVzcGFjZTooKT0+RXQsbmFtZXNwYWNlczooKT0+VHQsbmVzdDooKT0+cmEsbm93OigpPT5IbixwYWNrOigpPT50cCxwYWNrRW5jbG9zZTooKT0+SWQscGFja1NpYmxpbmdzOigpPT5HZCxwYWlyczooKT0+bCxwYXJ0aXRpb246KCk9Pm9wLHBhdGg6KCk9PldpLHBlcm11dGU6KCk9PlkscGllOigpPT54eCxwaWVjZXdpc2U6KCk9PnFwLHBvaW50UmFkaWFsOigpPT5BeCxwb2x5Z29uQXJlYTooKT0+JHAscG9seWdvbkNlbnRyb2lkOigpPT5XcCxwb2x5Z29uQ29udGFpbnM6KCk9PlFwLHBvbHlnb25IdWxsOigpPT5acCxwb2x5Z29uTGVuZ3RoOigpPT5LcCxwcmVjaXNpb25GaXhlZDooKT0+X2MscHJlY2lzaW9uUHJlZml4OigpPT54YyxwcmVjaXNpb25Sb3VuZDooKT0+d2MscXVhZHRyZWU6KCk9PllzLHF1YW50aWxlOigpPT5PLHF1YW50aXplOigpPT5IcCxyYWRpYWxBcmVhOigpPT5TeCxyYWRpYWxMaW5lOigpPT5DeCxyYW5kb21CYXRlczooKT0+aXkscmFuZG9tRXhwb25lbnRpYWw6KCk9PmF5LHJhbmRvbUlyd2luSGFsbDooKT0+cnkscmFuZG9tTG9nTm9ybWFsOigpPT5ueSxyYW5kb21Ob3JtYWw6KCk9PmV5LHJhbmRvbVVuaWZvcm06KCk9PnR5LHJhbmdlOigpPT5rLHJnYjooKT0+UWUscmliYm9uOigpPT5LaSxzY2FsZUJhbmQ6KCk9PmR5LHNjYWxlRGl2ZXJnaW5nOigpPT5vYixzY2FsZURpdmVyZ2luZ0xvZzooKT0+c2Isc2NhbGVEaXZlcmdpbmdQb3c6KCk9PnViLHNjYWxlRGl2ZXJnaW5nU3FydDooKT0+bGIsc2NhbGVEaXZlcmdpbmdTeW1sb2c6KCk9PmNiLHNjYWxlSWRlbnRpdHk6KCk9Pk15LHNjYWxlSW1wbGljaXQ6KCk9Pmh5LHNjYWxlTGluZWFyOigpPT5BeSxzY2FsZUxvZzooKT0+UHksc2NhbGVPcmRpbmFsOigpPT5meSxzY2FsZVBvaW50OigpPT55eSxzY2FsZVBvdzooKT0+Vnksc2NhbGVRdWFudGlsZTooKT0+WHksc2NhbGVRdWFudGl6ZTooKT0+Wnksc2NhbGVTZXF1ZW50aWFsOigpPT5KdixzY2FsZVNlcXVlbnRpYWxMb2c6KCk9PnRiLHNjYWxlU2VxdWVudGlhbFBvdzooKT0+bmIsc2NhbGVTZXF1ZW50aWFsUXVhbnRpbGU6KCk9PmliLHNjYWxlU2VxdWVudGlhbFNxcnQ6KCk9PnJiLHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+ZWIsc2NhbGVTcXJ0OigpPT5HeSxzY2FsZVN5bWxvZzooKT0+VXksc2NhbGVUaHJlc2hvbGQ6KCk9PlF5LHNjYWxlVGltZTooKT0+WXYsc2NhbGVVdGM6KCk9Plp2LHNjYW46KCk9Pnosc2NoZW1lQWNjZW50OigpPT5kYixzY2hlbWVCbHVlczooKT0+aF8sc2NoZW1lQnJCRzooKT0+a2Isc2NoZW1lQnVHbjooKT0+emIsc2NoZW1lQnVQdTooKT0+cWIsc2NoZW1lQ2F0ZWdvcnkxMDooKT0+ZmIsc2NoZW1lRGFyazI6KCk9PnBiLHNjaGVtZUduQnU6KCk9PiRiLHNjaGVtZUdyZWVuczooKT0+ZF8sc2NoZW1lR3JleXM6KCk9PnlfLHNjaGVtZU9yUmQ6KCk9PlZiLHNjaGVtZU9yYW5nZXM6KCk9PnhfLHNjaGVtZVBSR246KCk9PkViLHNjaGVtZVBhaXJlZDooKT0+eWIsc2NoZW1lUGFzdGVsMTooKT0+Z2Isc2NoZW1lUGFzdGVsMjooKT0+bWIsc2NoZW1lUGlZRzooKT0+U2Isc2NoZW1lUHVCdTooKT0+UWIsc2NoZW1lUHVCdUduOigpPT5YYixzY2hlbWVQdU9yOigpPT5NYixzY2hlbWVQdVJkOigpPT5KYixzY2hlbWVQdXJwbGVzOigpPT5tXyxzY2hlbWVSZEJ1OigpPT5EYixzY2hlbWVSZEd5OigpPT5CYixzY2hlbWVSZFB1OigpPT5lXyxzY2hlbWVSZFlsQnU6KCk9PkliLHNjaGVtZVJkWWxHbjooKT0+RmIsc2NoZW1lUmVkczooKT0+Yl8sc2NoZW1lU2V0MTooKT0+dmIsc2NoZW1lU2V0MjooKT0+YmIsc2NoZW1lU2V0MzooKT0+X2Isc2NoZW1lU3BlY3RyYWw6KCk9PmpiLHNjaGVtZVRhYmxlYXUxMDooKT0+eGIsc2NoZW1lWWxHbjooKT0+YV8sc2NoZW1lWWxHbkJ1OigpPT5yXyxzY2hlbWVZbE9yQnI6KCk9PnNfLHNjaGVtZVlsT3JSZDooKT0+dV8sc2VsZWN0OigpPT5UZSxzZWxlY3RBbGw6KCk9PnFfLHNlbGVjdGlvbjooKT0+a2Usc2VsZWN0b3I6KCk9PnB0LHNlbGVjdG9yQWxsOigpPT5ndCxzZXQ6KCk9PmhhLHNodWZmbGU6KCk9PlUsc3RhY2s6KCk9Plh3LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOigpPT5RdyxzdGFja09mZnNldEV4cGFuZDooKT0+Wncsc3RhY2tPZmZzZXROb25lOigpPT5XdyxzdGFja09mZnNldFNpbGhvdWV0dGU6KCk9Pkt3LHN0YWNrT2Zmc2V0V2lnZ2xlOigpPT5KdyxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+dGssc3RhY2tPcmRlckFzY2VuZGluZzooKT0+bmssc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PmlrLHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9PmFrLHN0YWNrT3JkZXJOb25lOigpPT5WdyxzdGFja09yZGVyUmV2ZXJzZTooKT0+b2ssc3RyYXRpZnk6KCk9PmhwLHN0eWxlOigpPT5SdCxzdW06KCk9PnEsc3ZnOigpPT5PcyxzeW1ib2w6KCk9PnJ3LHN5bWJvbENpcmNsZTooKT0+angsc3ltYm9sQ3Jvc3M6KCk9Pll4LHN5bWJvbERpYW1vbmQ6KCk9PnF4LHN5bWJvbFNxdWFyZTooKT0+R3gsc3ltYm9sU3RhcjooKT0+Vngsc3ltYm9sVHJpYW5nbGU6KCk9Plp4LHN5bWJvbFd5ZTooKT0+ZXcsc3ltYm9sczooKT0+bncsdGV4dDooKT0+eHMsdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+Qix0aHJlc2hvbGRTY290dDooKT0+TCx0aHJlc2hvbGRTdHVyZ2VzOigpPT5OLHRpY2tGb3JtYXQ6KCk9PkN5LHRpY2tJbmNyZW1lbnQ6KCk9PkEsdGlja1N0ZXA6KCk9Pk0sdGlja3M6KCk9PlMsdGltZURheTooKT0+QWcsdGltZURheXM6KCk9Pk1nLHRpbWVGb3JtYXQ6KCk9PnBtLHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5Jdix0aW1lRm9ybWF0TG9jYWxlOigpPT5mbSx0aW1lRnJpZGF5OigpPT52Zyx0aW1lRnJpZGF5czooKT0+RWcsdGltZUhvdXI6KCk9PkRnLHRpbWVIb3VyczooKT0+T2csdGltZUludGVydmFsOigpPT50Zyx0aW1lTWlsbGlzZWNvbmQ6KCk9PllnLHRpbWVNaWxsaXNlY29uZHM6KCk9PnpnLHRpbWVNaW51dGU6KCk9PkxnLHRpbWVNaW51dGVzOigpPT5JZyx0aW1lTW9uZGF5OigpPT5wZyx0aW1lTW9uZGF5czooKT0+eGcsdGltZU1vbnRoOigpPT5hZyx0aW1lTW9udGhzOigpPT5vZyx0aW1lUGFyc2U6KCk9PnltLHRpbWVTYXR1cmRheTooKT0+YmcsdGltZVNhdHVyZGF5czooKT0+Q2csdGltZVNlY29uZDooKT0+RmcsdGltZVNlY29uZHM6KCk9PlBnLHRpbWVTdW5kYXk6KCk9PmRnLHRpbWVTdW5kYXlzOigpPT5fZyx0aW1lVGh1cnNkYXk6KCk9Pm1nLHRpbWVUaHVyc2RheXM6KCk9PlRnLHRpbWVUdWVzZGF5OigpPT55Zyx0aW1lVHVlc2RheXM6KCk9PndnLHRpbWVXZWRuZXNkYXk6KCk9PmdnLHRpbWVXZWRuZXNkYXlzOigpPT5rZyx0aW1lV2VlazooKT0+ZGcsdGltZVdlZWtzOigpPT5fZyx0aW1lWWVhcjooKT0+bmcsdGltZVllYXJzOigpPT5yZyx0aW1lb3V0OigpPT5Lbix0aW1lcjooKT0+Vm4sdGltZXJGbHVzaDooKT0+R24sdG91Y2g6KCk9Pk9uLHRvdWNoZXM6KCk9PkhfLHRyYW5zaXRpb246KCk9PkhyLHRyYW5zcG9zZTooKT0+SCx0cmVlOigpPT52cCx0cmVlbWFwOigpPT5rcCx0cmVlbWFwQmluYXJ5OigpPT5UcCx0cmVlbWFwRGljZTooKT0+YXAsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PkNwLHRyZWVtYXBTbGljZTooKT0+YnAsdHJlZW1hcFNsaWNlRGljZTooKT0+RXAsdHJlZW1hcFNxdWFyaWZ5OigpPT53cCx0c3Y6KCk9PkVzLHRzdkZvcm1hdDooKT0+T28sdHN2Rm9ybWF0Qm9keTooKT0+Qm8sdHN2Rm9ybWF0Um93OigpPT5Jbyx0c3ZGb3JtYXRSb3dzOigpPT5Mbyx0c3ZGb3JtYXRWYWx1ZTooKT0+Um8sdHN2UGFyc2U6KCk9Pk5vLHRzdlBhcnNlUm93czooKT0+RG8sdXRjRGF5OigpPT5pbSx1dGNEYXlzOigpPT5hbSx1dGNGb3JtYXQ6KCk9PmdtLHV0Y0ZyaWRheTooKT0+R2csdXRjRnJpZGF5czooKT0+ZW0sdXRjSG91cjooKT0+JHYsdXRjSG91cnM6KCk9Pld2LHV0Y01pbGxpc2Vjb25kOigpPT5ZZyx1dGNNaWxsaXNlY29uZHM6KCk9PnpnLHV0Y01pbnV0ZTooKT0+R3YsdXRjTWludXRlczooKT0+WHYsdXRjTW9uZGF5OigpPT5IZyx1dGNNb25kYXlzOigpPT5RZyx1dGNNb250aDooKT0+VXYsdXRjTW9udGhzOigpPT5xdix1dGNQYXJzZTooKT0+bW0sdXRjU2F0dXJkYXk6KCk9PlhnLHV0Y1NhdHVyZGF5czooKT0+bm0sdXRjU2Vjb25kOigpPT5GZyx1dGNTZWNvbmRzOigpPT5QZyx1dGNTdW5kYXk6KCk9PnFnLHV0Y1N1bmRheXM6KCk9PlpnLHV0Y1RodXJzZGF5OigpPT5WZyx1dGNUaHVyc2RheXM6KCk9PnRtLHV0Y1R1ZXNkYXk6KCk9PiRnLHV0Y1R1ZXNkYXlzOigpPT5LZyx1dGNXZWRuZXNkYXk6KCk9PldnLHV0Y1dlZG5lc2RheXM6KCk9PkpnLHV0Y1dlZWs6KCk9PnFnLHV0Y1dlZWtzOigpPT5aZyx1dGNZZWFyOigpPT5zbSx1dGNZZWFyczooKT0+Y20sdmFsdWVzOigpPT5kYSx2YXJpYW5jZTooKT0+eSx2ZXJzaW9uOigpPT5yLHZvcm9ub2k6KCk9PktrLHdpbmRvdzooKT0+T3QseG1sOigpPT5Ocyx6aXA6KCk9Plcsem9vbTooKT0+ZlQsem9vbUlkZW50aXR5OigpPT5uVCx6b29tVHJhbnNmb3JtOigpPT5yVH0pO3ZhciByPSI1LjE2LjAiO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gYSh0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaShlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKT4wP2k9YTpyPWErMX1yZXR1cm4gcn19fXZhciBvPWEoaSkscz1vLnJpZ2h0LGM9by5sZWZ0O2NvbnN0IHU9cztmdW5jdGlvbiBsKHQsZSl7bnVsbD09ZSYmKGU9aCk7Zm9yKHZhciBuPTAscj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShyPDA/MDpyKTtuPHI7KWFbbl09ZShpLGk9dFsrK25dKTtyZXR1cm4gYX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gZih0LGUsbil7dmFyIHIsaSxhLG8scz10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KHMqYyk7Zm9yKG51bGw9PW4mJihuPWgpLHI9YT0wO3I8czsrK3IpZm9yKG89dFtyXSxpPTA7aTxjOysraSwrK2EpdVthXT1uKG8sZVtpXSk7cmV0dXJuIHV9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24geSh0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxhPTAsbz0tMSxzPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1wKHRbb10pKXx8KGMrPShyPW4tcykqKG4tKHMrPXIvKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1wKGUodFtvXSxvLHQpKSl8fChjKz0ocj1uLXMpKihuLShzKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9ZnVuY3Rpb24gZyh0LGUpe3ZhciBuPXkodCxlKTtyZXR1cm4gbj9NYXRoLnNxcnQobik6bn1mdW5jdGlvbiBtKHQsZSl7dmFyIG4scixpLGE9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxhOylpZihudWxsIT0obj10W29dKSYmbj49bilmb3Iocj1pPW47KytvPGE7KW51bGwhPShuPXRbb10pJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1lbHNlIGZvcig7KytvPGE7KWlmKG51bGwhPShuPWUodFtvXSxvLHQpKSYmbj49bilmb3Iocj1pPW47KytvPGE7KW51bGwhPShuPWUodFtvXSxvLHQpKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSk7cmV0dXJuW3IsaV19dmFyIHY9QXJyYXkucHJvdG90eXBlLGI9di5zbGljZSxfPXYubWFwO2Z1bmN0aW9uIHgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHcodCl7cmV0dXJuIHR9ZnVuY3Rpb24gayh0LGUsbil7dD0rdCxlPStlLG49KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorbjtmb3IodmFyIHI9LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxhPW5ldyBBcnJheShpKTsrK3I8aTspYVtyXT10K3IqbjtyZXR1cm4gYX12YXIgVD1NYXRoLnNxcnQoNTApLEU9TWF0aC5zcXJ0KDEwKSxDPU1hdGguc3FydCgyKTtmdW5jdGlvbiBTKHQsZSxuKXt2YXIgcixpLGEsbyxzPS0xO2lmKG49K24sKHQ9K3QpPT0oZT0rZSkmJm4+MClyZXR1cm5bdF07aWYoKHI9ZTx0KSYmKGk9dCx0PWUsZT1pKSwwPT09KG89QSh0LGUsbikpfHwhaXNGaW5pdGUobykpcmV0dXJuW107aWYobz4wKWZvcih0PU1hdGguY2VpbCh0L28pLGU9TWF0aC5mbG9vcihlL28pLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKGUtdCsxKSk7KytzPGk7KWFbc109KHQrcykqbztlbHNlIGZvcih0PU1hdGguZmxvb3IodCpvKSxlPU1hdGguY2VpbChlKm8pLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtZSsxKSk7KytzPGk7KWFbc109KHQtcykvbztyZXR1cm4gciYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiBBKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLGE9ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49VD8xMDphPj1FPzU6YT49Qz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PVQ/MTA6YT49RT81OmE+PUM/MjoxKX1mdW5jdGlvbiBNKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj1UP2kqPTEwOmE+PUU/aSo9NTphPj1DJiYoaSo9MiksZTx0Py1pOml9ZnVuY3Rpb24gTih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBEKCl7dmFyIHQ9dyxlPW0sbj1OO2Z1bmN0aW9uIHIocil7dmFyIGksYSxvPXIubGVuZ3RoLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlzW2ldPXQocltpXSxpLHIpO3ZhciBjPWUocyksbD1jWzBdLGg9Y1sxXSxmPW4ocyxsLGgpO0FycmF5LmlzQXJyYXkoZil8fChmPU0obCxoLGYpLGY9ayhNYXRoLmNlaWwobC9mKSpmLGgsZikpO2Zvcih2YXIgZD1mLmxlbmd0aDtmWzBdPD1sOylmLnNoaWZ0KCksLS1kO2Zvcig7ZltkLTFdPmg7KWYucG9wKCksLS1kO3ZhciBwLHk9bmV3IEFycmF5KGQrMSk7Zm9yKGk9MDtpPD1kOysraSkocD15W2ldPVtdKS54MD1pPjA/ZltpLTFdOmwscC54MT1pPGQ/ZltpXTpoO2ZvcihpPTA7aTxvOysraSlsPD0oYT1zW2ldKSYmYTw9aCYmeVt1KGYsYSwwLGQpXS5wdXNoKHJbaV0pO3JldHVybiB5fXJldHVybiByLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eChlKSxyKTp0fSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OngoW3RbMF0sdFsxXV0pLHIpOmV9LHIudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/eChiLmNhbGwodCkpOngodCkscik6bn0scn1mdW5jdGlvbiBPKHQsZSxuKXtpZihudWxsPT1uJiYobj1wKSxyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rbih0W2FdLGEsdCk7cmV0dXJuIG8rKCtuKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fWZ1bmN0aW9uIEIodCxlLG4pe3JldHVybiB0PV8uY2FsbCh0LHApLnNvcnQoaSksTWF0aC5jZWlsKChuLWUpLygyKihPKHQsLjc1KS1PKHQsLjI1KSkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiBMKHQsZSxuKXtyZXR1cm4gTWF0aC5jZWlsKChuLWUpLygzLjUqZyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIEkodCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmbj5yJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+ciYmKHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gUih0LGUpe3ZhciBuLHI9dC5sZW5ndGgsaT1yLGE9LTEsbz0wO2lmKG51bGw9PWUpZm9yKDsrK2E8cjspaXNOYU4obj1wKHRbYV0pKT8tLWk6bys9bjtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49cChlKHRbYV0sYSx0KSkpPy0taTpvKz1uO2lmKGkpcmV0dXJuIG8vaX1mdW5jdGlvbiBGKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09ZSlmb3IoOysrYTxyOylpc05hTihuPXAodFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPXAoZSh0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBPKG8uc29ydChpKSwuNSl9ZnVuY3Rpb24gUCh0KXtmb3IodmFyIGUsbixyLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShyPXRbaV0pLmxlbmd0aDstLWU+PTA7KW5bLS1vXT1yW2VdO3JldHVybiBufWZ1bmN0aW9uIGoodCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmcj5uJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJnI+biYmKHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gWSh0LGUpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKTtuLS07KXJbbl09dFtlW25dXTtyZXR1cm4gcn1mdW5jdGlvbiB6KHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4scixhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ZSYmKGU9aSk7KythPG47KShlKHI9dFthXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9cixvPWEpO3JldHVybiAwPT09ZShzLHMpP286dm9pZCAwfX1mdW5jdGlvbiBVKHQsZSxuKXtmb3IodmFyIHIsaSxhPShudWxsPT1uP3QubGVuZ3RoOm4pLShlPW51bGw9PWU/MDorZSk7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLHI9dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPXI7cmV0dXJuIHR9ZnVuY3Rpb24gcSh0LGUpe3ZhciBuLHI9dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxyOykobj0rdFtpXSkmJihhKz1uKTtlbHNlIGZvcig7KytpPHI7KShuPStlKHRbaV0saSx0KSkmJihhKz1uKTtyZXR1cm4gYX1mdW5jdGlvbiBIKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49aih0LCQpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gVygpe3JldHVybiBIKGFyZ3VtZW50cyl9dmFyIFY9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEcodCl7cmV0dXJuIHR9dmFyIFg9MWUtNjtmdW5jdGlvbiBaKHQpe3JldHVybiJ0cmFuc2xhdGUoIisodCsuNSkrIiwwKSJ9ZnVuY3Rpb24gUSh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodCsuNSkrIikifWZ1bmN0aW9uIEsodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybit0KGUpfX1mdW5jdGlvbiBKKHQpe3ZhciBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLGZ1bmN0aW9uKG4pe3JldHVybit0KG4pK2V9fWZ1bmN0aW9uIHR0KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIG49W10scj1udWxsLGk9bnVsbCxhPTYsbz02LHM9MyxjPTE9PT10fHw0PT09dD8tMToxLHU9ND09PXR8fDI9PT10PyJ4IjoieSIsbD0xPT09dHx8Mz09PXQ/WjpRO2Z1bmN0aW9uIGgoaCl7dmFyIGY9bnVsbD09cj9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxuKTplLmRvbWFpbigpOnIsZD1udWxsPT1pP2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxuKTpHOmkscD1NYXRoLm1heChhLDApK3MseT1lLnJhbmdlKCksZz0reVswXSsuNSxtPSt5W3kubGVuZ3RoLTFdKy41LHY9KGUuYmFuZHdpZHRoP0o6SykoZS5jb3B5KCkpLGI9aC5zZWxlY3Rpb24/aC5zZWxlY3Rpb24oKTpoLF89Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSkseD1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGYsZSkub3JkZXIoKSx3PXguZXhpdCgpLGs9eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFQ9eC5zZWxlY3QoImxpbmUiKSxFPXguc2VsZWN0KCJ0ZXh0Iik7Xz1fLm1lcmdlKF8uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLHg9eC5tZXJnZShrKSxUPVQubWVyZ2Uoay5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUrIjIiLGMqYSkpLEU9RS5tZXJnZShrLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUsYypwKS5hdHRyKCJkeSIsMT09PXQ/IjBlbSI6Mz09PXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09YiYmKF89Xy50cmFuc2l0aW9uKGgpLHg9eC50cmFuc2l0aW9uKGgpLFQ9VC50cmFuc2l0aW9uKGgpLEU9RS50cmFuc2l0aW9uKGgpLHc9dy50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLFgpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXYodCkpP2wodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLGsuYXR0cigib3BhY2l0eSIsWCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gbChlJiZpc0Zpbml0ZShlPWUodCkpP2U6dih0KSl9KSkpLHcucmVtb3ZlKCksXy5hdHRyKCJkIiw0PT09dHx8Mj09dD9vPyJNIitjKm8rIiwiK2crIkgwLjVWIittKyJIIitjKm86Ik0wLjUsIitnKyJWIittOm8/Ik0iK2crIiwiK2MqbysiVjAuNUgiK20rIlYiK2MqbzoiTSIrZysiLDAuNUgiK20pLHguYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodih0KSl9KSksVC5hdHRyKHUrIjIiLGMqYSksRS5hdHRyKHUsYypwKS50ZXh0KGQpLGIuZmlsdGVyKHR0KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIiwyPT09dD8ic3RhcnQiOjQ9PT10PyJlbmQiOiJtaWRkbGUiKSxiLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9dn0pKX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGgpOmV9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj1WLmNhbGwoYXJndW1lbnRzKSxofSxoLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9bXTpWLmNhbGwodCksaCk6bi5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOlYuY2FsbCh0KSxoKTpyJiZyLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bz0rdCxoKTphfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsaCk6YX0saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGgpOm99LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsaCk6c30saH1mdW5jdGlvbiBudCh0KXtyZXR1cm4gZXQoMSx0KX1mdW5jdGlvbiBydCh0KXtyZXR1cm4gZXQoMix0KX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gZXQoMyx0KX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gZXQoNCx0KX12YXIgb3Q9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gc3QoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgY3Qocil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fPXR9ZnVuY3Rpb24gdXQodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGx0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gaHQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPW90LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1jdC5wcm90b3R5cGU9c3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9dXQodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09aHQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT1odChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49bHQocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgY3QodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O2NvbnN0IGZ0PXN0O2Z1bmN0aW9uIGR0KCl7fWZ1bmN0aW9uIHB0KHQpe3JldHVybiBudWxsPT10P2R0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24geXQoKXtyZXR1cm5bXX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gbnVsbD09dD95dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIG10KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIHZ0KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIGJ0KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIF90KHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyBidCh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24geHQodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9e30saD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT0iJCIrby5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpLHUgaW4gbD9pW3NdPWM6bFt1XT1jKTtmb3Iocz0wO3M8ZjsrK3MpKGM9bFt1PSIkIitvLmNhbGwodCxhW3NdLHMsYSldKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsW3VdPW51bGwpOm5bc109bmV3IGJ0KHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsW2Rbc11dPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24gd3QodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59YnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpidCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIga3Q9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IFR0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDprdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIEV0KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLFR0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpUdFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIEN0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBTdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIEF0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gTnQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIER0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIE90KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBCdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBMdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIEl0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8T3QodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gRnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIFB0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBqdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBZdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24genQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgVXQodCl9ZnVuY3Rpb24gVXQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVl0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gcXQodCxlKXtmb3IodmFyIG49enQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBIdCh0LGUpe2Zvcih2YXIgbj16dCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uICR0KHQpe3JldHVybiBmdW5jdGlvbigpe3F0KHRoaXMsdCl9fWZ1bmN0aW9uIFd0KHQpe3JldHVybiBmdW5jdGlvbigpe0h0KHRoaXMsdCl9fWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP3F0Okh0KSh0aGlzLHQpfX1mdW5jdGlvbiBHdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gWHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBadCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gUXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBLdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBKdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHRlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGVlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbmUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1rdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09a3Q/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIHJlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGllKHQpe3ZhciBlPUV0KHQpO3JldHVybihlLmxvY2FsP3JlOm5lKShlKX1mdW5jdGlvbiBhZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIG9lKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gc2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGNlKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1VdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciB1ZT17fSxsZT1udWxsO2Z1bmN0aW9uIGhlKHQsZSxuKXtyZXR1cm4gdD1mZSh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGZlKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9bGU7bGU9cjt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7bGU9aX19fWZ1bmN0aW9uIGRlKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIHBlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsYT1lLmxlbmd0aDtyPGE7KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiB5ZSh0LGUsbil7dmFyIHI9dWUuaGFzT3duUHJvcGVydHkodC50eXBlKT9oZTpmZTtyZXR1cm4gZnVuY3Rpb24oaSxhLG8pe3ZhciBzLGM9dGhpcy5fX29uLHU9cihlLGEsbyk7aWYoYylmb3IodmFyIGw9MCxoPWMubGVuZ3RoO2w8aDsrK2wpaWYoKHM9Y1tsXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9dSxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsdSxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOnUsY2FwdHVyZTpufSxjP2MucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBnZSh0LGUsbixyKXt2YXIgaT1sZTt0LnNvdXJjZUV2ZW50PWxlLGxlPXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4scil9ZmluYWxseXtsZT1pfX1mdW5jdGlvbiBtZSh0LGUsbil7dmFyIHI9T3QodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gdmUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbWUodGhpcyx0LGUpfX1mdW5jdGlvbiBiZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBtZSh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh1ZT17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIF9lPVtudWxsXTtmdW5jdGlvbiB4ZSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB3ZSgpe3JldHVybiBuZXcgeGUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxfZSl9eGUucHJvdG90eXBlPXdlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6eGUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IHhlKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IHhlKHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IHhlKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGw9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtwWysrbF09dH0pKSxwO3ZhciBuLHI9ZT94dDpfdCxpPXRoaXMuX3BhcmVudHMsYT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBvPWEubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGM9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXt2YXIgaD1pW2xdLGY9YVtsXSxkPWYubGVuZ3RoLHA9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyxsLGkpLHk9cC5sZW5ndGgsZz1jW2xdPW5ldyBBcnJheSh5KSxtPXNbbF09bmV3IEFycmF5KHkpO3IoaCxmLGcsbSx1W2xdPW5ldyBBcnJheShkKSxwLGUpO2Zvcih2YXIgdixiLF89MCx4PTA7Xzx5OysrXylpZih2PWdbX10pe2ZvcihfPj14JiYoeD1fKzEpOyEoYj1tW3hdKSYmKyt4PHk7KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyB4ZShzLGkpKS5fZW50ZXI9YyxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHhlKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHZ0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgeGUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh2dCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHIpOnIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyB4ZShvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD13dCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgeGUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1FdCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/U3Q6Q3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9EdDpOdDpuLmxvY2FsP010OkF0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0J0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0l0Okx0KSh0LGUsbnVsbD09bj8iIjpuKSk6UnQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/RnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/anQ6UHQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49WXQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9enQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/VnQ6ZT8kdDpXdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/R3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1p0Olh0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/UXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0p0Okt0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2godGUpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZWUpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppZSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmllKHQpLHI9bnVsbD09ZT9hZToiZnVuY3Rpb24iPT10eXBlb2YgZT9lOnB0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKG9lKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/Y2U6c2UpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9ZGUodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/eWU6cGUsbnVsbD09biYmKG49ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyx1PTAsbD1zLmxlbmd0aDt1PGw7Kyt1KWZvcihyPTAsYz1zW3VdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2JlOnZlKSh0LGUpKX19O2NvbnN0IGtlPXdlO2Z1bmN0aW9uIFRlKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeGUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB4ZShbW3RdXSxfZSl9ZnVuY3Rpb24gRWUoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBDZSgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gU2UodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1UZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLENlLCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLENlLCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBBZSh0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9VGUodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoci5vbigiY2xpY2suZHJhZyIsQ2UsITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiBNZSh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gTmUodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gRGUoKXt9dmFyIE9lPS43LEJlPTEvT2UsTGU9IlxccyooWystXT9cXGQrKVxccyoiLEllPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLFJlPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixGZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxQZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTGUsTGUsTGVdKyJcXCkkIiksamU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1JlLFJlLFJlXSsiXFwpJCIpLFllPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTGUsTGUsTGUsSWVdKyJcXCkkIiksemU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tSZSxSZSxSZSxJZV0rIlxcKSQiKSxVZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbSWUsUmUsUmVdKyJcXCkkIikscWU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tJZSxSZSxSZSxJZV0rIlxcKSQiKSxIZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiAkZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIFdlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmUodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9RmUuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9HZShlKTozPT09bj9uZXcgS2UoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP1hlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP1hlKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9UGUuZXhlYyh0KSk/bmV3IEtlKGVbMV0sZVsyXSxlWzNdLDEpOihlPWplLmV4ZWModCkpP25ldyBLZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1ZZS5leGVjKHQpKT9YZShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT16ZS5leGVjKHQpKT9YZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1VZS5leGVjKHQpKT9ubihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPXFlLmV4ZWModCkpP25uKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6SGUuaGFzT3duUHJvcGVydHkodCk/R2UoSGVbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBLZShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEdlKHQpe3JldHVybiBuZXcgS2UodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFhlKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgS2UodCxlLG4scil9ZnVuY3Rpb24gWmUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEZXx8KHQ9VmUodCkpLHQ/bmV3IEtlKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBLZX1mdW5jdGlvbiBRZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/WmUodCk6bmV3IEtlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBLZSh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gSmUoKXtyZXR1cm4iIyIrZW4odGhpcy5yKStlbih0aGlzLmcpK2VuKHRoaXMuYil9ZnVuY3Rpb24gdG4oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBlbih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIG5uKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgb24odCxlLG4scil9ZnVuY3Rpb24gcm4odCl7aWYodCBpbnN0YW5jZW9mIG9uKXJldHVybiBuZXcgb24odC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRGV8fCh0PVZlKHQpKSwhdClyZXR1cm4gbmV3IG9uO2lmKHQgaW5zdGFuY2VvZiBvbilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IG9uKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gYW4odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3JuKHQpOm5ldyBvbih0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gb24odCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHNuKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBjbih0LGUsbixyLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKm4rKDErMyp0KzMqYS0zKm8pKnIrbyppKS82fWZ1bmN0aW9uIHVuKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBjbigobi1yL2UpKmUsbyxpLGEscyl9fWZ1bmN0aW9uIGxuKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksaT10WyhyK2UtMSklZV0sYT10W3IlZV0sbz10WyhyKzEpJWVdLHM9dFsocisyKSVlXTtyZXR1cm4gY24oKG4tci9lKSplLGksYSxvLHMpfX1mdW5jdGlvbiBobih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZm4odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBkbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mbih0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6aG4oaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBwbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mbih0LG4pOmhuKGlzTmFOKHQpP2U6dCl9TWUoRGUsVmUse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6JGUsZm9ybWF0SGV4OiRlLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBybih0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOldlLHRvU3RyaW5nOldlfSksTWUoS2UsUWUsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/QmU6TWF0aC5wb3coQmUsdCksbmV3IEtlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P09lOk1hdGgucG93KE9lLHQpLG5ldyBLZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkplLGZvcm1hdEhleDpKZSxmb3JtYXRSZ2I6dG4sdG9TdHJpbmc6dG59KSksTWUob24sYW4sTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/QmU6TWF0aC5wb3coQmUsdCksbmV3IG9uKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/T2U6TWF0aC5wb3coT2UsdCksbmV3IG9uKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLHI9bisobjwuNT9uOjEtbikqZSxpPTIqbi1yO3JldHVybiBuZXcgS2Uoc24odD49MjQwP3QtMjQwOnQrMTIwLGksciksc24odCxpLHIpLHNuKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7Y29uc3QgeW49ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP3BuOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6aG4oaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PVFlKHQpKS5yLChlPVFlKGUpKS5yKSxpPW4odC5nLGUuZyksYT1uKHQuYixlLmIpLG89cG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIGduKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9UWUoZVtuXSksYVtuXT1yLnJ8fDAsb1tuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIGE9dChhKSxvPXQobykscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9YSh0KSxyLmc9byh0KSxyLmI9cyh0KSxyKyIifX19dmFyIG1uPWduKHVuKSx2bj1nbihsbik7ZnVuY3Rpb24gYm4odCxlKXtlfHwoZT1bXSk7dmFyIG4scj10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLGk9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihhKXtmb3Iobj0wO248cjsrK24paVtuXT10W25dKigxLWEpK2Vbbl0qYTtyZXR1cm4gaX19ZnVuY3Rpb24gX24odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIHhuKHQsZSl7cmV0dXJuKF9uKGUpP2JuOnduKSh0LGUpfWZ1bmN0aW9uIHduKHQsZSl7dmFyIG4scj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPGk7KytuKWFbbl09TW4odFtuXSxlW25dKTtmb3IoO248cjsrK24pb1tuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pb1tuXT1hW25dKHQpO3JldHVybiBvfX1mdW5jdGlvbiBrbih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIG4uc2V0VGltZSh0KigxLXIpK2Uqciksbn19ZnVuY3Rpb24gVG4odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gRW4odCxlKXt2YXIgbixyPXt9LGk9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9yW25dPU1uKHRbbl0sZVtuXSk6aVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiByKWlbbl09cltuXSh0KTtyZXR1cm4gaX19dmFyIENuPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxTbj1uZXcgUmVnRXhwKENuLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIEFuKHQsZSl7dmFyIG4scixpLGE9Q24ubGFzdEluZGV4PVNuLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1Dbi5leGVjKHQpKSYmKHI9U24uZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OlRuKG4scil9KSksYT1Tbi5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIE1uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9obihlKTooIm51bWJlciI9PT1yP1RuOiJzdHJpbmciPT09cj8obj1WZShlKSk/KGU9bix5bik6QW46ZSBpbnN0YW5jZW9mIFZlP3luOmUgaW5zdGFuY2VvZiBEYXRlP2tuOl9uKGUpP2JuOkFycmF5LmlzQXJyYXkoZSk/d246ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP0VuOlRuKSh0LGUpfWZ1bmN0aW9uIE5uKCl7Zm9yKHZhciB0LGU9bGU7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rpb24gRG4odCxlKXt2YXIgbj10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1uLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIHIueD1lLmNsaWVudFgsci55PWUuY2xpZW50WSxbKHI9ci5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LHIueV19dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS5jbGllbnRYLWkubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLWkudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiBPbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9Tm4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBEbih0LHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEJuKHQpe3ZhciBlPU5uKCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLERuKHQsZSl9dmFyIExuLEluLFJuPTAsRm49MCxQbj0wLGpuPTAsWW49MCx6bj0wLFVuPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHFuPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIEhuKCl7cmV0dXJuIFlufHwocW4oJG4pLFluPVVuLm5vdygpK3puKX1mdW5jdGlvbiAkbigpe1luPTB9ZnVuY3Rpb24gV24oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFZuKHQsZSxuKXt2YXIgcj1uZXcgV247cmV0dXJuIHIucmVzdGFydCh0LGUsbikscn1mdW5jdGlvbiBHbigpe0huKCksKytSbjtmb3IodmFyIHQsZT1MbjtlOykodD1Zbi1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tUm59ZnVuY3Rpb24gWG4oKXtZbj0oam49VW4ubm93KCkpK3puLFJuPUZuPTA7dHJ5e0duKCl9ZmluYWxseXtSbj0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1MbixyPTEvMDtuOyluLl9jYWxsPyhyPm4uX3RpbWUmJihyPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6TG49ZSk7SW49dCxRbihyKX0oKSxZbj0wfX1mdW5jdGlvbiBabigpe3ZhciB0PVVuLm5vdygpLGU9dC1qbjtlPjFlMyYmKHpuLT1lLGpuPXQpfWZ1bmN0aW9uIFFuKHQpe1JufHwoRm4mJihGbj1jbGVhclRpbWVvdXQoRm4pKSx0LVluPjI0Pyh0PDEvMCYmKEZuPXNldFRpbWVvdXQoWG4sdC1Vbi5ub3coKS16bikpLFBuJiYoUG49Y2xlYXJJbnRlcnZhbChQbikpKTooUG58fChqbj1Vbi5ub3coKSxQbj1zZXRJbnRlcnZhbChabiwxZTMpKSxSbj0xLHFuKFhuKSkpfWZ1bmN0aW9uIEtuKHQsZSxuKXt2YXIgcj1uZXcgV247cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfVduLnByb3RvdHlwZT1Wbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlduLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9IbigpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxJbj09PXRoaXN8fChJbj9Jbi5fbmV4dD10aGlzOkxuPXRoaXMsSW49dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixRbigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxRbigpKX19O3ZhciBKbj1mdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSx0cj1bXTtmdW5jdGlvbiBlcih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gS24oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihLbigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1WbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpKbix0d2Vlbjp0cix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gbnIodCxlKXt2YXIgbj1pcih0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHJyKHQsZSl7dmFyIG49aXIodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gaXIodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBhcih0LGUpe3ZhciBuLHIsaSxhPXQuX190cmFuc2l0aW9uLG89ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6bz0hMTtvJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fXZhciBvcixzcixjcix1cixscj0xODAvTWF0aC5QSSxocj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBmcih0LGUsbixyLGksYSl7dmFyIG8scyxjO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChjPXQqbitlKnIpJiYobi09dCpjLHItPWUqYyksKHM9TWF0aC5zcXJ0KG4qbityKnIpKSYmKG4vPXMsci89cyxjLz1zKSx0KnI8ZSpuJiYodD0tdCxlPS1lLGM9LWMsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpscixza2V3WDpNYXRoLmF0YW4oYykqbHIsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIGRyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6VG4odCxpKX0se2k6Yy0yLHg6VG4ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OlRuKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OlRuKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OlRuKHQsbil9LHtpOnMtMix4OlRuKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIHByPWRyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P2hyOihvcnx8KG9yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHNyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxjcj1kb2N1bWVudC5kZWZhdWx0Vmlldyksb3Iuc3R5bGUudHJhbnNmb3JtPXQsdD1jci5nZXRDb21wdXRlZFN0eWxlKHNyLmFwcGVuZENoaWxkKG9yKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxzci5yZW1vdmVDaGlsZChvciksZnIoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLHlyPWRyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9ocjoodXJ8fCh1cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx1ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9dXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/ZnIoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6aHIpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBncih0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9cnIodGhpcyx0KSxhPWkudHdlZW47aWYoYSE9PW4pZm9yKHZhciBvPTAscz0ocj1uPWEpLmxlbmd0aDtvPHM7KytvKWlmKHJbb10ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKG8sMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiBtcih0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9cnIodGhpcyx0KSxvPWEudHdlZW47aWYobyE9PXIpe2k9KHI9bykuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxjPTAsdT1pLmxlbmd0aDtjPHU7KytjKWlmKGlbY10ubmFtZT09PWUpe2lbY109czticmVha31jPT09dSYmaS5wdXNoKHMpfWEudHdlZW49aX19ZnVuY3Rpb24gdnIodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9cnIodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gaXIodCxyKS52YWx1ZVtlXX19ZnVuY3Rpb24gYnIodCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP1RuOmUgaW5zdGFuY2VvZiBWZT95bjoobj1WZShlKSk/KGU9bix5bik6QW4pKHQsZSl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHhyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gd3IodCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19ZnVuY3Rpb24ga3IodCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIFRyKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1jKyIiKT9udWxsOm89PT1yJiZzPT09aT9hOihpPXMsYT1lKHI9byxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIEVyKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gQ3IodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gQXIodCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZTcih0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gTXIodCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZDcih0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gTnIodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtucih0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gRHIodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe25yKHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtycih0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3JyKHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gTHIodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7cnIodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIElyKHQsZSxuKXt2YXIgcixpLGE9ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfShlKT9ucjpycjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1hKHRoaXMsdCkscz1vLm9uO3MhPT1yJiYoaT0ocj1zKS5jb3B5KCkpLm9uKGUsbiksby5vbj1pfX12YXIgUnI9a2UucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIFByKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLHIpLG4pfX1mdW5jdGlvbiBqcih0LGUsbil7dmFyIHIsaTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYocj0oaT1hKSYmUHIodCxhLG4pKSxyfXJldHVybiBhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gWXIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIHpyKHQpe3ZhciBlLG47ZnVuY3Rpb24gcigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09biYmKGU9KG49cikmJllyKHIpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9dmFyIFVyPTA7ZnVuY3Rpb24gcXIodCxlLG4scil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uIEhyKHQpe3JldHVybiBrZSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gJHIoKXtyZXR1cm4rK1VyfXZhciBXcj1rZS5wcm90b3R5cGU7ZnVuY3Rpb24gVnIodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIEdyKHQpe3JldHVybi0tdCp0KnQrMX1mdW5jdGlvbiBYcih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn1xci5wcm90b3R5cGU9SHIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxcixzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wdCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKWZvcih2YXIgcyxjLHU9cltvXSxsPXUubGVuZ3RoLGg9YVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpKHM9dVtmXSkmJihjPXQuY2FsbChzLHMuX19kYXRhX18sZix1KSkmJigiX19kYXRhX18iaW4gcyYmKGMuX19kYXRhX189cy5fX2RhdGFfXyksaFtmXT1jLGVyKGhbZl0sZSxuLGYsaCxpcihzLG4pKSk7cmV0dXJuIG5ldyBxcihhLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPVtdLG89W10scz0wO3M8aTsrK3MpZm9yKHZhciBjLHU9cltzXSxsPXUubGVuZ3RoLGg9MDtoPGw7KytoKWlmKGM9dVtoXSl7Zm9yKHZhciBmLGQ9dC5jYWxsKGMsYy5fX2RhdGFfXyxoLHUpLHA9aXIoYyxuKSx5PTAsZz1kLmxlbmd0aDt5PGc7Kyt5KShmPWRbeV0pJiZlcihmLGUsbix5LGQscCk7YS5wdXNoKGQpLG8ucHVzaChjKX1yZXR1cm4gbmV3IHFyKGEsbyxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW10KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBxcihyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBxcihvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgUnIodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPSRyKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpaWYobz1zW3VdKXt2YXIgbD1pcihvLGUpO2VyKG8sdCxuLHUscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcgcXIocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6V3IuY2FsbCxub2RlczpXci5ub2Rlcyxub2RlOldyLm5vZGUsc2l6ZTpXci5zaXplLGVtcHR5OldyLmVtcHR5LGVhY2g6V3IuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aXIodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKElyKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1FdCh0KSxyPSJ0cmFuc2Zvcm0iPT09bj95cjpicjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9FcjpUcikobixyLHZyKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP3hyOl9yKShuKToobi5sb2NhbD9rcjp3cikobixyLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgcj1FdCh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP0FyOk1yKShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP3ByOmJyO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVJ0KHRoaXMsdCksbz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxSdCh0aGlzLHQpKTtyZXR1cm4gYT09PW8/bnVsbDphPT09biYmbz09PXI/aTppPWUobj1hLHI9byl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxGcih0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1SdCh0aGlzLHQpLHM9bih0aGlzKSxjPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9cz1SdCh0aGlzLHQpKSxvPT09Yz9udWxsOm89PT1yJiZjPT09aT9hOihpPWMsYT1lKHI9byxzKSl9fSh0LHIsdnIodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG89InN0eWxlLiIrZSxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXJyKHRoaXMsdCksdT1jLm9uLGw9bnVsbD09Yy52YWx1ZVtvXT9hfHwoYT1GcihlKSk6dm9pZCAwO3U9PT1uJiZpPT09bHx8KHI9KG49dSkuY29weSgpKS5vbihzLGk9bCksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1SdCh0aGlzLHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KHQscixlKSxuKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixqcih0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fSh2cih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbih0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsenIodCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9aXIodGhpcy5ub2RlKCksbikudHdlZW4sYT0wLG89aS5sZW5ndGg7YTxvOysrYSlpZigocj1pW2FdKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP2dyOm1yKShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P05yOkRyKShlLHQpKTppcih0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9PcjpCcikoZSx0KSk6aXIodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKExyKGUsdCkpOmlyKHRoaXMubm9kZSgpLGUpLmVhc2V9LGVuZDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9e3ZhbHVlOm99LGM9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49cnIodGhpcyxyKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChjKSksbi5vbj1lfSkpfSkpfX07dmFyIFpyPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpYcn07ZnVuY3Rpb24gUXIodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gWnIudGltZT1IbigpLFpyO3JldHVybiBufWtlLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXthcih0aGlzLHQpfSkpfSxrZS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBxcj8oZT10Ll9pZCx0PXQuX25hbWUpOihlPSRyKCksKG49WnIpLnRpbWU9SG4oKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiZlcihvLHQsZSx1LHMsbnx8UXIobyxlKSk7cmV0dXJuIG5ldyBxcihyLHRoaXMuX3BhcmVudHMsdCxlKX07dmFyIEtyPVtudWxsXTtmdW5jdGlvbiBKcih0LGUpe3ZhciBuLHIsaT10Ll9fdHJhbnNpdGlvbjtpZihpKWZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsaSlpZigobj1pW3JdKS5zdGF0ZT4xJiZuLm5hbWU9PT1lKXJldHVybiBuZXcgcXIoW1t0XV0sS3IsZSwrcik7cmV0dXJuIG51bGx9ZnVuY3Rpb24gdGkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGVpKHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59ZnVuY3Rpb24gbmkoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiByaSgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIGlpPXtuYW1lOiJkcmFnIn0sYWk9e25hbWU6InNwYWNlIn0sb2k9e25hbWU6ImhhbmRsZSJ9LHNpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBjaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIHVpKHQpe3JldHVybltjaSh0WzBdKSxjaSh0WzFdKV19ZnVuY3Rpb24gbGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBPbihlLGxlLnRvdWNoZXMsdCl9fXZhciBoaT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKGJpKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sZmk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChiaSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGRpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChiaSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDp1aSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0scGk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LHlpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxnaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sbWk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sdmk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gYmkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gX2koKXtyZXR1cm4hbGUuY3RybEtleSYmIWxlLmJ1dHRvbn1mdW5jdGlvbiB4aSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIHdpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGtpKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gVGkodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBFaSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIENpKCl7cmV0dXJuIE1pKGhpKX1mdW5jdGlvbiBTaSgpe3JldHVybiBNaShmaSl9ZnVuY3Rpb24gQWkoKXtyZXR1cm4gTWkoZGkpfWZ1bmN0aW9uIE1pKHQpe3ZhciBlLG49eGkscj1faSxpPXdpLGE9ITAsbz1mdCgic3RhcnQiLCJicnVzaCIsImVuZCIpLHM9NjtmdW5jdGlvbiBjKGUpe3ZhciBuPWUucHJvcGVydHkoIl9fYnJ1c2giLHkpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtiaSgib3ZlcmxheSIpXSk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixwaS5vdmVybGF5KS5tZXJnZShuKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWtpKHRoaXMpLmV4dGVudDtUZSh0aGlzKS5hdHRyKCJ4Iix0WzBdWzBdKS5hdHRyKCJ5Iix0WzBdWzFdKS5hdHRyKCJ3aWR0aCIsdFsxXVswXS10WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHRbMV1bMV0tdFswXVsxXSl9KSksZS5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5kYXRhKFtiaSgic2VsZWN0aW9uIildKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwic2VsZWN0aW9uIikuYXR0cigiY3Vyc29yIixwaS5zZWxlY3Rpb24pLmF0dHIoImZpbGwiLCIjNzc3IikuYXR0cigiZmlsbC1vcGFjaXR5IiwuMykuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgcj1lLnNlbGVjdEFsbCgiLmhhbmRsZSIpLmRhdGEodC5oYW5kbGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSkpO3IuZXhpdCgpLnJlbW92ZSgpLHIuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJoYW5kbGUgaGFuZGxlLS0iK3QudHlwZX0pKS5hdHRyKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gcGlbdC50eXBlXX0pKSxlLmVhY2godSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLGYpLmZpbHRlcihpKS5vbigidG91Y2hzdGFydC5icnVzaCIsZikub24oInRvdWNobW92ZS5icnVzaCIsZCkub24oInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixwKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gdSgpe3ZhciB0PVRlKHRoaXMpLGU9a2kodGhpcykuc2VsZWN0aW9uO2U/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGVbMF1bMF0pLmF0dHIoInkiLGVbMF1bMV0pLmF0dHIoIndpZHRoIixlWzFdWzBdLWVbMF1bMF0pLmF0dHIoImhlaWdodCIsZVsxXVsxXS1lWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlW3QudHlwZS5sZW5ndGgtMV0/ZVsxXVswXS1zLzI6ZVswXVswXS1zLzJ9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9lWzFdWzFdLXMvMjplWzBdWzFdLXMvMn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiJuIj09PXQudHlwZXx8InMiPT09dC50eXBlP2VbMV1bMF0tZVswXVswXStzOnN9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlfHwidyI9PT10LnR5cGU/ZVsxXVsxXS1lWzBdWzFdK3M6c30pKSk6dC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwodCxlLG4pe3ZhciByPXQuX19icnVzaC5lbWl0dGVyO3JldHVybiFyfHxuJiZyLmNsZWFuP25ldyBoKHQsZSxuKTpyfWZ1bmN0aW9uIGgodCxlLG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuc3RhdGU9dC5fX2JydXNoLHRoaXMuYWN0aXZlPTAsdGhpcy5jbGVhbj1ufWZ1bmN0aW9uIGYoKXtpZigoIWV8fGxlLnRvdWNoZXMpJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4saSxvLHMsYyxoLGYsZCxwLHksZyxtPXRoaXMsdj1sZS50YXJnZXQuX19kYXRhX18udHlwZSxiPSJzZWxlY3Rpb24iPT09KGEmJmxlLm1ldGFLZXk/dj0ib3ZlcmxheSI6dik/aWk6YSYmbGUuYWx0S2V5P3NpOm9pLF89dD09PWZpP251bGw6bWlbdl0seD10PT09aGk/bnVsbDp2aVt2XSx3PWtpKG0pLGs9dy5leHRlbnQsVD13LnNlbGVjdGlvbixFPWtbMF1bMF0sQz1rWzBdWzFdLFM9a1sxXVswXSxBPWtbMV1bMV0sTT0wLE49MCxEPV8mJngmJmEmJmxlLnNoaWZ0S2V5LE89bGUudG91Y2hlcz9saShsZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTpCbixCPU8obSksTD1CLEk9bChtLGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT12PyhUJiYocD0hMCksdy5zZWxlY3Rpb249VD1bW249dD09PWZpP0U6QlswXSxvPXQ9PT1oaT9DOkJbMV1dLFtjPXQ9PT1maT9TOm4sZj10PT09aGk/QTpvXV0pOihuPVRbMF1bMF0sbz1UWzBdWzFdLGM9VFsxXVswXSxmPVRbMV1bMV0pLGk9bixzPW8saD1jLGQ9Zjt2YXIgUj1UZShtKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxGPVIuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIscGlbdl0pO2lmKGxlLnRvdWNoZXMpSS5tb3ZlZD1qLEkuZW5kZWQ9ejtlbHNle3ZhciBQPVRlKGxlLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLGosITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTthJiZQLm9uKCJrZXlkb3duLmJydXNoIixVLCEwKS5vbigia2V5dXAuYnJ1c2giLHEsITApLFNlKGxlLnZpZXcpfW5pKCksYXIobSksdS5jYWxsKG0pLEkuc3RhcnQoKX1mdW5jdGlvbiBqKCl7dmFyIHQ9TyhtKTshRHx8eXx8Z3x8KE1hdGguYWJzKHRbMF0tTFswXSk+TWF0aC5hYnModFsxXS1MWzFdKT9nPSEwOnk9ITApLEw9dCxwPSEwLHJpKCksWSgpfWZ1bmN0aW9uIFkoKXt2YXIgdDtzd2l0Y2goTT1MWzBdLUJbMF0sTj1MWzFdLUJbMV0sYil7Y2FzZSBhaTpjYXNlIGlpOl8mJihNPU1hdGgubWF4KEUtbixNYXRoLm1pbihTLWMsTSkpLGk9bitNLGg9YytNKSx4JiYoTj1NYXRoLm1heChDLW8sTWF0aC5taW4oQS1mLE4pKSxzPW8rTixkPWYrTik7YnJlYWs7Y2FzZSBvaTpfPDA/KE09TWF0aC5tYXgoRS1uLE1hdGgubWluKFMtbixNKSksaT1uK00saD1jKTpfPjAmJihNPU1hdGgubWF4KEUtYyxNYXRoLm1pbihTLWMsTSkpLGk9bixoPWMrTSkseDwwPyhOPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLW8sTikpLHM9bytOLGQ9Zik6eD4wJiYoTj1NYXRoLm1heChDLWYsTWF0aC5taW4oQS1mLE4pKSxzPW8sZD1mK04pO2JyZWFrO2Nhc2Ugc2k6XyYmKGk9TWF0aC5tYXgoRSxNYXRoLm1pbihTLG4tTSpfKSksaD1NYXRoLm1heChFLE1hdGgubWluKFMsYytNKl8pKSkseCYmKHM9TWF0aC5tYXgoQyxNYXRoLm1pbihBLG8tTip4KSksZD1NYXRoLm1heChDLE1hdGgubWluKEEsZitOKngpKSl9aDxpJiYoXyo9LTEsdD1uLG49YyxjPXQsdD1pLGk9aCxoPXQsdiBpbiB5aSYmRi5hdHRyKCJjdXJzb3IiLHBpW3Y9eWlbdl1dKSksZDxzJiYoeCo9LTEsdD1vLG89ZixmPXQsdD1zLHM9ZCxkPXQsdiBpbiBnaSYmRi5hdHRyKCJjdXJzb3IiLHBpW3Y9Z2lbdl1dKSksdy5zZWxlY3Rpb24mJihUPXcuc2VsZWN0aW9uKSx5JiYoaT1UWzBdWzBdLGg9VFsxXVswXSksZyYmKHM9VFswXVsxXSxkPVRbMV1bMV0pLFRbMF1bMF09PT1pJiZUWzBdWzFdPT09cyYmVFsxXVswXT09PWgmJlRbMV1bMV09PT1kfHwody5zZWxlY3Rpb249W1tpLHNdLFtoLGRdXSx1LmNhbGwobSksSS5icnVzaCgpKX1mdW5jdGlvbiB6KCl7aWYobmkoKSxsZS50b3VjaGVzKXtpZihsZS50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApfWVsc2UgQWUobGUudmlldyxwKSxQLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtSLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksRi5hdHRyKCJjdXJzb3IiLHBpLm92ZXJsYXkpLHcuc2VsZWN0aW9uJiYoVD13LnNlbGVjdGlvbiksVGkoVCkmJih3LnNlbGVjdGlvbj1udWxsLHUuY2FsbChtKSksSS5lbmQoKX1mdW5jdGlvbiBVKCl7c3dpdGNoKGxlLmtleUNvZGUpe2Nhc2UgMTY6RD1fJiZ4O2JyZWFrO2Nhc2UgMTg6Yj09PW9pJiYoXyYmKGM9aC1NKl8sbj1pK00qXykseCYmKGY9ZC1OKngsbz1zK04qeCksYj1zaSxZKCkpO2JyZWFrO2Nhc2UgMzI6YiE9PW9pJiZiIT09c2l8fChfPDA/Yz1oLU06Xz4wJiYobj1pLU0pLHg8MD9mPWQtTjp4PjAmJihvPXMtTiksYj1haSxGLmF0dHIoImN1cnNvciIscGkuc2VsZWN0aW9uKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJpKCl9ZnVuY3Rpb24gcSgpe3N3aXRjaChsZS5rZXlDb2RlKXtjYXNlIDE2OkQmJih5PWc9RD0hMSxZKCkpO2JyZWFrO2Nhc2UgMTg6Yj09PXNpJiYoXzwwP2M9aDpfPjAmJihuPWkpLHg8MD9mPWQ6eD4wJiYobz1zKSxiPW9pLFkoKSk7YnJlYWs7Y2FzZSAzMjpiPT09YWkmJihsZS5hbHRLZXk/KF8mJihjPWgtTSpfLG49aStNKl8pLHgmJihmPWQtTip4LG89cytOKngpLGI9c2kpOihfPDA/Yz1oOl8+MCYmKG49aSkseDwwP2Y9ZDp4PjAmJihvPXMpLGI9b2kpLEYuYXR0cigiY3Vyc29yIixwaVt2XSksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn1yaSgpfX1mdW5jdGlvbiBkKCl7bCh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBwKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiB5KCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD11aShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZS5kaW09dCxlfXJldHVybiBjLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1lLl9fYnJ1c2gsaT1sKGUsYXJndW1lbnRzKSxhPXIuc2VsZWN0aW9uLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLHIuZXh0ZW50KSxzPU1uKGEsbyk7ZnVuY3Rpb24gYyh0KXtyLnNlbGVjdGlvbj0xPT09dCYmbnVsbD09PW8/bnVsbDpzKHQpLHUuY2FsbChlKSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09bz9jOmMoMSl9KSk6ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHMsaT1lLl9fYnJ1c2gsYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuLGkuZXh0ZW50KSxvPWwoZSxyKS5iZWZvcmVzdGFydCgpO2FyKGUpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSx1LmNhbGwoZSksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LGgucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSl7Z2UobmV3IGVpKGMsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnRpKHVpKHQpKSxjKTpufSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnRpKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp0aSghIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxjKTpzfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYyk6YX0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz9jOnR9LGN9dmFyIE5pPU1hdGguY29zLERpPU1hdGguc2luLE9pPU1hdGguUEksQmk9T2kvMixMaT0yKk9pLElpPU1hdGgubWF4O2Z1bmN0aW9uIFJpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0KGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRmkoKXt2YXIgdD0wLGU9bnVsbCxuPW51bGwscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzLGMsdSxsLGg9aS5sZW5ndGgsZj1bXSxkPWsoaCkscD1bXSx5PVtdLGc9eS5ncm91cHM9bmV3IEFycmF5KGgpLG09bmV3IEFycmF5KGgqaCk7Zm9yKGE9MCx1PS0xOysrdTxoOyl7Zm9yKG89MCxsPS0xOysrbDxoOylvKz1pW3VdW2xdO2YucHVzaChvKSxwLnB1c2goayhoKSksYSs9b31mb3IoZSYmZC5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKGZbdF0sZltuXSl9KSksbiYmcC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Quc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gbihpW2VdW3RdLGlbZV1bcl0pfSkpfSkpLGM9KGE9SWkoMCxMaS10KmgpL2EpP3Q6TGkvaCxvPTAsdT0tMTsrK3U8aDspe2ZvcihzPW8sbD0tMTsrK2w8aDspe3ZhciB2PWRbdV0sYj1wW3ZdW2xdLF89aVt2XVtiXSx4PW8sdz1vKz1fKmE7bVtiKmgrdl09e2luZGV4OnYsc3ViaW5kZXg6YixzdGFydEFuZ2xlOngsZW5kQW5nbGU6dyx2YWx1ZTpffX1nW3ZdPXtpbmRleDp2LHN0YXJ0QW5nbGU6cyxlbmRBbmdsZTpvLHZhbHVlOmZbdl19LG8rPWN9Zm9yKHU9LTE7Kyt1PGg7KWZvcihsPXUtMTsrK2w8aDspe3ZhciBUPW1bbCpoK3VdLEU9bVt1KmgrbF07KFQudmFsdWV8fEUudmFsdWUpJiZ5LnB1c2goVC52YWx1ZTxFLnZhbHVlP3tzb3VyY2U6RSx0YXJnZXQ6VH06e3NvdXJjZTpULHRhcmdldDpFfSl9cmV0dXJuIHI/eS5zb3J0KHIpOnl9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9SWkoMCxlKSxpKTp0fSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKTplfSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1udWxsOihyPVJpKHQpKS5fPXQsaSk6ciYmci5ffSxpfXZhciBQaT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gamkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBZaT1NYXRoLlBJLHppPTIqWWksVWk9MWUtNixxaT16aS1VaTtmdW5jdGlvbiBIaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uICRpKCl7cmV0dXJuIG5ldyBIaX1IaS5wcm90b3R5cGU9JGkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpIaSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt0PSt0LGU9K2Usbj0rbixyPStyLGk9K2k7dmFyIGE9dGhpcy5feDEsbz10aGlzLl95MSxzPW4tdCxjPXItZSx1PWEtdCxsPW8tZSxoPXUqdStsKmw7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+VWkpaWYoTWF0aC5hYnMobCpzLWMqdSk+VWkmJmkpe3ZhciBmPW4tYSxkPXItbyxwPXMqcytjKmMseT1mKmYrZCpkLGc9TWF0aC5zcXJ0KHApLG09TWF0aC5zcXJ0KGgpLHY9aSpNYXRoLnRhbigoWWktTWF0aC5hY29zKChwK2gteSkvKDIqZyptKSkpLzIpLGI9di9tLF89di9nO01hdGguYWJzKGItMSk+VWkmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmwpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsobCpmPnUqZCkrIiwiKyh0aGlzLl94MT10K18qcykrIiwiKyh0aGlzLl95MT1lK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0PSt0LGU9K2UsYT0hIWE7dmFyIG89KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxjPXQrbyx1PWUrcyxsPTFeYSxoPWE/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2MrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWMpPlVpfHxNYXRoLmFicyh0aGlzLl95MS11KT5VaSkmJih0aGlzLl8rPSJMIitjKyIsIit1KSxuJiYoaDwwJiYoaD1oJXppK3ppKSxoPnFpP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodC1vKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodGhpcy5feDE9YykrIiwiKyh0aGlzLl95MT11KTpoPlVpJiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1ZaSkrIiwiK2wrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2NvbnN0IFdpPSRpO2Z1bmN0aW9uIFZpKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBHaSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gWGkodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIFppKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gUWkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gS2koKXt2YXIgdD1WaSxlPUdpLG49WGkscj1aaSxpPVFpLGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1QaS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMscyksdT1lLmFwcGx5KHRoaXMscyksbD0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGg9ci5hcHBseSh0aGlzLHMpLUJpLGY9aS5hcHBseSh0aGlzLHMpLUJpLGQ9bCpOaShoKSxwPWwqRGkoaCkseT0rbi5hcHBseSh0aGlzLChzWzBdPXUscykpLGc9ci5hcHBseSh0aGlzLHMpLUJpLG09aS5hcHBseSh0aGlzLHMpLUJpO2lmKGF8fChhPW89V2koKSksYS5tb3ZlVG8oZCxwKSxhLmFyYygwLDAsbCxoLGYpLGg9PT1nJiZmPT09bXx8KGEucXVhZHJhdGljQ3VydmVUbygwLDAseSpOaShnKSx5KkRpKGcpKSxhLmFyYygwLDAseSxnLG0pKSxhLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksYS5jbG9zZVBhdGgoKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpqaSgrdCksbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6amkoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpqaSgrdCksbyk6aX0sby5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTp0fSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfXZhciBKaT0iJCI7ZnVuY3Rpb24gdGEoKXt9ZnVuY3Rpb24gZWEodCxlKXt2YXIgbj1uZXcgdGE7aWYodCBpbnN0YW5jZW9mIHRhKXQuZWFjaCgoZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsaT0tMSxhPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8YTspbi5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPGE7KW4uc2V0KGUocj10W2ldLGksdCkscil9ZWxzZSBpZih0KWZvcih2YXIgbyBpbiB0KW4uc2V0KG8sdFtvXSk7cmV0dXJuIG59dGEucHJvdG90eXBlPWVhLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dGEsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiBKaSt0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tKaSt0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbSmkrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9SmkrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09SmkmJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1KaSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PUppKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1KaSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTtjb25zdCBuYT1lYTtmdW5jdGlvbiByYSgpe3ZhciB0LGUsbixyPVtdLGk9W107ZnVuY3Rpb24gYShuLGksbyxzKXtpZihpPj1yLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgYyx1LGwsaD0tMSxmPW4ubGVuZ3RoLGQ9cltpKytdLHA9bmEoKSx5PW8oKTsrK2g8ZjspKGw9cC5nZXQoYz1kKHU9bltoXSkrIiIpKT9sLnB1c2godSk6cC5zZXQoYyxbdV0pO3JldHVybiBwLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyh5LGUsYSh0LGksbyxzKSl9KSkseX1mdW5jdGlvbiBvKHQsbil7aWYoKytuPnIubGVuZ3RoKXJldHVybiB0O3ZhciBhLHM9aVtuLTFdO3JldHVybiBudWxsIT1lJiZuPj1yLmxlbmd0aD9hPXQuZW50cmllcygpOihhPVtdLHQuZWFjaCgoZnVuY3Rpb24odCxlKXthLnB1c2goe2tleTplLHZhbHVlczpvKHQsbil9KX0pKSksbnVsbCE9cz9hLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOmF9cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsaWEsYWEpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCwwLG9hLHNhKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbyhhKHQsMCxvYSxzYSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX1mdW5jdGlvbiBpYSgpe3JldHVybnt9fWZ1bmN0aW9uIGFhKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gb2EoKXtyZXR1cm4gbmEoKX1mdW5jdGlvbiBzYSh0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiBjYSgpe312YXIgdWE9bmEucHJvdG90eXBlO2Z1bmN0aW9uIGxhKHQsZSl7dmFyIG49bmV3IGNhO2lmKHQgaW5zdGFuY2VvZiBjYSl0LmVhY2goKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSkpO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPGk7KW4uYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspbi5hZGQoZSh0W3JdLHIsdCkpfXJldHVybiBufWNhLnByb3RvdHlwZT1sYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmNhLGhhczp1YS5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW0ppKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOnVhLnJlbW92ZSxjbGVhcjp1YS5jbGVhcix2YWx1ZXM6dWEua2V5cyxzaXplOnVhLnNpemUsZW1wdHk6dWEuZW1wdHksZWFjaDp1YS5lYWNofTtjb25zdCBoYT1sYTtmdW5jdGlvbiBmYSh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9ZnVuY3Rpb24gZGEodCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIHBhKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh7a2V5Om4sdmFsdWU6dFtuXX0pO3JldHVybiBlfXZhciB5YT1NYXRoLlBJLzE4MCxnYT0xODAvTWF0aC5QSSxtYT0uOTY0MjIsdmE9LjgyNTIxLGJhPTQvMjksX2E9Ni8yOSx4YT0zKl9hKl9hO2Z1bmN0aW9uIHdhKHQpe2lmKHQgaW5zdGFuY2VvZiBFYSlyZXR1cm4gbmV3IEVhKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEJhKXJldHVybiBMYSh0KTt0IGluc3RhbmNlb2YgS2V8fCh0PVplKHQpKTt2YXIgZSxuLHI9TWEodC5yKSxpPU1hKHQuZyksYT1NYSh0LmIpLG89Q2EoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPUNhKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvbWEpLG49Q2EoKC4wMTM5MzIyKnIrLjA5NzEwNDUqaSsuNzE0MTczMyphKS92YSkpLG5ldyBFYSgxMTYqby0xNiw1MDAqKGUtbyksMjAwKihvLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24ga2EodCxlKXtyZXR1cm4gbmV3IEVhKHQsMCwwLG51bGw9PWU/MTplKX1mdW5jdGlvbiBUYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/d2EodCk6bmV3IEVhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBFYSh0LGUsbixyKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gQ2EodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC94YStiYX1mdW5jdGlvbiBTYSh0KXtyZXR1cm4gdD5fYT90KnQqdDp4YSoodC1iYSl9ZnVuY3Rpb24gQWEodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBNYSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBOYSh0KXtpZih0IGluc3RhbmNlb2YgQmEpcmV0dXJuIG5ldyBCYSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBFYXx8KHQ9d2EodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBCYShOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpnYTtyZXR1cm4gbmV3IEJhKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIERhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9OYSh0KTpuZXcgQmEobixlLHQsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIE9hKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9OYSh0KTpuZXcgQmEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEJhKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBMYSh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgRWEodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp5YTtyZXR1cm4gbmV3IEVhKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9TWUoRWEsVGEsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRWEodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFYSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgS2UoQWEoMy4xMzM4NTYxKihlPW1hKlNhKGUpKS0xLjYxNjg2NjcqKHQ9MSpTYSh0KSktLjQ5MDYxNDYqKG49dmEqU2EobikpKSxBYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLEFhKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksTWUoQmEsT2EsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQmEodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCYSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBMYSh0aGlzKS5yZ2IoKX19KSk7dmFyIElhPS0uMTQ4NjEsUmE9MS43ODI3NyxGYT0tLjI5MjI3LFBhPS0uOTA2NDksamE9MS45NzI5NCxZYT1qYSpQYSx6YT1qYSpSYSxVYT1SYSpGYS1QYSpJYTtmdW5jdGlvbiBxYSh0KXtpZih0IGluc3RhbmNlb2YgJGEpcmV0dXJuIG5ldyAkYSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBLZXx8KHQ9WmUodCkpO3ZhciBlPXQuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPShVYSpyK1lhKmUtemEqbikvKFVhK1lhLXphKSxhPXItaSxvPShqYSoobi1pKS1GYSphKS9QYSxzPU1hdGguc3FydChvKm8rYSphKS8oamEqaSooMS1pKSksYz1zP01hdGguYXRhbjIobyxhKSpnYS0xMjA6TmFOO3JldHVybiBuZXcgJGEoYzwwP2MrMzYwOmMscyxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gSGEodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3FhKHQpOm5ldyAkYSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gJGEodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfU1lKCRhLEhhLE5lKERlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0JlOk1hdGgucG93KEJlLHQpLG5ldyAkYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P09lOk1hdGgucG93KE9lLHQpLG5ldyAkYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqeWEsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IEtlKDI1NSooZStuKihJYSpyK1JhKmkpKSwyNTUqKGUrbiooRmEqcitQYSppKSksMjU1KihlK24qKGphKnIpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgV2E9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFZhKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiBHYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gWGEodCxlKXtmb3IodmFyIG4scj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihuPVphKHQsZVtyXSkpcmV0dXJuIG47cmV0dXJuIDB9ZnVuY3Rpb24gWmEodCxlKXtmb3IodmFyIG49ZVswXSxyPWVbMV0saT0tMSxhPTAsbz10Lmxlbmd0aCxzPW8tMTthPG87cz1hKyspe3ZhciBjPXRbYV0sdT1jWzBdLGw9Y1sxXSxoPXRbc10sZj1oWzBdLGQ9aFsxXTtpZihRYShjLGgsZSkpcmV0dXJuIDA7bD5yIT1kPnImJm48KGYtdSkqKHItbCkvKGQtbCkrdSYmKGk9LWkpfXJldHVybiBpfWZ1bmN0aW9uIFFhKHQsZSxuKXt2YXIgcixpLGEsbztyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pPT0oblswXS10WzBdKSooZVsxXS10WzFdKX0odCxlLG4pJiYoaT10W3I9Kyh0WzBdPT09ZVswXSldLGE9bltyXSxvPWVbcl0saTw9YSYmYTw9b3x8bzw9YSYmYTw9aSl9ZnVuY3Rpb24gS2EoKXt9dmFyIEphPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gdG8oKXt2YXIgdD0xLGU9MSxuPU4scj1zO2Z1bmN0aW9uIGkodCl7dmFyIGU9bih0KTtpZihBcnJheS5pc0FycmF5KGUpKWU9ZS5zbGljZSgpLnNvcnQoVmEpO2Vsc2V7dmFyIHI9bSh0KSxpPXJbMF0sbz1yWzFdO2U9TShpLG8sZSksZT1rKE1hdGguZmxvb3IoaS9lKSplLE1hdGguZmxvb3Ioby9lKSplLGUpfXJldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlKX0pKX1mdW5jdGlvbiBhKG4saSl7dmFyIGE9W10scz1bXTtyZXR1cm4gZnVuY3Rpb24obixyLGkpe3ZhciBhLHMsYyx1LGwsaCxmPW5ldyBBcnJheSxkPW5ldyBBcnJheTtmb3IoYT1zPS0xLHU9blswXT49cixKYVt1PDwxXS5mb3JFYWNoKHApOysrYTx0LTE7KWM9dSx1PW5bYSsxXT49cixKYVtjfHU8PDFdLmZvckVhY2gocCk7Zm9yKEphW3U8PDBdLmZvckVhY2gocCk7KytzPGUtMTspe2ZvcihhPS0xLHU9bltzKnQrdF0+PXIsbD1uW3MqdF0+PXIsSmFbdTw8MXxsPDwyXS5mb3JFYWNoKHApOysrYTx0LTE7KWM9dSx1PW5bcyp0K3QrYSsxXT49cixoPWwsbD1uW3MqdCthKzFdPj1yLEphW2N8dTw8MXxsPDwyfGg8PDNdLmZvckVhY2gocCk7SmFbdXxsPDwzXS5mb3JFYWNoKHApfWZvcihhPS0xLGw9bltzKnRdPj1yLEphW2w8PDJdLmZvckVhY2gocCk7KythPHQtMTspaD1sLGw9bltzKnQrYSsxXT49cixKYVtsPDwyfGg8PDNdLmZvckVhY2gocCk7ZnVuY3Rpb24gcCh0KXt2YXIgZSxuLHI9W3RbMF1bMF0rYSx0WzBdWzFdK3NdLGM9W3RbMV1bMF0rYSx0WzFdWzFdK3NdLHU9byhyKSxsPW8oYyk7KGU9ZFt1XSk/KG49ZltsXSk/KGRlbGV0ZSBkW2UuZW5kXSxkZWxldGUgZltuLnN0YXJ0XSxlPT09bj8oZS5yaW5nLnB1c2goYyksaShlLnJpbmcpKTpmW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgZFtlLmVuZF0sZS5yaW5nLnB1c2goYyksZFtlLmVuZD1sXT1lKTooZT1mW2xdKT8obj1kW3VdKT8oZGVsZXRlIGZbZS5zdGFydF0sZGVsZXRlIGRbbi5lbmRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBmW2Uuc3RhcnRdLGUucmluZy51bnNoaWZ0KHIpLGZbZS5zdGFydD11XT1lKTpmW3VdPWRbbF09e3N0YXJ0OnUsZW5kOmwscmluZzpbcixjXX19SmFbbDw8M10uZm9yRWFjaChwKX0obixpLChmdW5jdGlvbih0KXtyKHQsbixpKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLHI9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KXIrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiByfSh0KT4wP2EucHVzaChbdF0pOnMucHVzaCh0KX0pKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj1hLmxlbmd0aDtuPHI7KytuKWlmKC0xIT09WGEoKGU9YVtuXSlbMF0sdCkpcmV0dXJuIHZvaWQgZS5wdXNoKHQpfSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOmksY29vcmRpbmF0ZXM6YX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMiplWzBdK2VbMV0qKHQrMSkqNH1mdW5jdGlvbiBzKG4scixpKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhLG89blswXSxzPW5bMV0sYz0wfG8sdT0wfHMsbD1yW3UqdCtjXTtvPjAmJm88dCYmYz09PW8mJihhPXJbdSp0K2MtMV0sblswXT1vKyhpLWEpLyhsLWEpLS41KSxzPjAmJnM8ZSYmdT09PXMmJihhPXJbKHUtMSkqdCtjXSxuWzFdPXMrKGktYSkvKGwtYSktLjUpfSkpfXJldHVybiBpLmNvbnRvdXI9YSxpLnNpemU9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3QsZV07dmFyIHI9TWF0aC5jZWlsKG5bMF0pLGE9TWF0aC5jZWlsKG5bMV0pO2lmKCEocj4wJiZhPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHQ9cixlPWEsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9HYShXYS5jYWxsKHQpKTpHYSh0KSxpKTpufSxpLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10P3M6S2EsaSk6cj09PXN9LGl9ZnVuY3Rpb24gZW8odCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxpOysrbylmb3IodmFyIHM9MCxjPTA7czxyK247KytzKXM8ciYmKGMrPXQuZGF0YVtzK28qcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW3MtYStvKnJdKSxlLmRhdGFbcy1uK28qcl09Yy9NYXRoLm1pbihzKzEsci0xK2EtcyxhKSl9ZnVuY3Rpb24gbm8odCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxyOysrbylmb3IodmFyIHM9MCxjPTA7czxpK247KytzKXM8aSYmKGMrPXQuZGF0YVtvK3Mqcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW28rKHMtYSkqcl0pLGUuZGF0YVtvKyhzLW4pKnJdPWMvTWF0aC5taW4ocysxLGktMSthLXMsYSkpfWZ1bmN0aW9uIHJvKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGlvKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGFvKCl7cmV0dXJuIDF9ZnVuY3Rpb24gb28oKXt2YXIgdD1ybyxlPWlvLG49YW8scj05NjAsaT01MDAsYT0yMCxvPTIscz0zKmEsYz1yKzIqcz4+byx1PWkrMipzPj5vLGw9R2EoMjApO2Z1bmN0aW9uIGgocil7dmFyIGk9bmV3IEZsb2F0MzJBcnJheShjKnUpLGg9bmV3IEZsb2F0MzJBcnJheShjKnUpO3IuZm9yRWFjaCgoZnVuY3Rpb24ocixhLGwpe3ZhciBoPSt0KHIsYSxsKStzPj5vLGY9K2UocixhLGwpK3M+Pm8sZD0rbihyLGEsbCk7aD49MCYmaDxjJiZmPj0wJiZmPHUmJihpW2grZipjXSs9ZCl9KSksZW8oe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LGE+Pm8pLG5vKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSxhPj5vKSxlbyh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0sYT4+byksbm8oe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LGE+Pm8pLGVvKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSxhPj5vKSxubyh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0sYT4+byk7dmFyIGQ9bChpKTtpZighQXJyYXkuaXNBcnJheShkKSl7dmFyIHA9SShpKTtkPU0oMCxwLGQpLChkPWsoMCxNYXRoLmZsb29yKHAvZCkqZCxkKSkuc2hpZnQoKX1yZXR1cm4gdG8oKS50aHJlc2hvbGRzKGQpLnNpemUoW2MsdV0pKGkpLm1hcChmKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnZhbHVlKj1NYXRoLnBvdygyLC0yKm8pLHQuY29vcmRpbmF0ZXMuZm9yRWFjaChkKSx0fWZ1bmN0aW9uIGQodCl7dC5mb3JFYWNoKHApfWZ1bmN0aW9uIHAodCl7dC5mb3JFYWNoKHkpfWZ1bmN0aW9uIHkodCl7dFswXT10WzBdKk1hdGgucG93KDIsbyktcyx0WzFdPXRbMV0qTWF0aC5wb3coMixvKS1zfWZ1bmN0aW9uIGcoKXtyZXR1cm4gYz1yKzIqKHM9MyphKT4+byx1PWkrMipzPj5vLGh9cmV0dXJuIGgueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkdhKCtlKSxoKTp0fSxoLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHYSgrdCksaCk6ZX0saC53ZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHYSgrdCksaCk6bn0saC5zaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltyLGldO3ZhciBlPU1hdGguY2VpbCh0WzBdKSxuPU1hdGguY2VpbCh0WzFdKTtpZighKGU+PTB8fGU+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHI9ZSxpPW4sZygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxvO2lmKCEoKHQ9K3QpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIG89TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksZygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0dhKFdhLmNhbGwodCkpOkdhKHQpLGgpOmx9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQoYSooYSsxKSk7aWYoISgodD0rdCk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gYT1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp0KnQrMSktMSkvMiksZygpfSxofWZ1bmN0aW9uIHNvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBjbyh0LGUsbixyLGksYSxvLHMsYyx1KXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc3ViamVjdD1uLHRoaXMuaWRlbnRpZmllcj1yLHRoaXMuYWN0aXZlPWksdGhpcy54PWEsdGhpcy55PW8sdGhpcy5keD1zLHRoaXMuZHk9Yyx0aGlzLl89dX1mdW5jdGlvbiB1bygpe3JldHVybiFsZS5jdHJsS2V5JiYhbGUuYnV0dG9ufWZ1bmN0aW9uIGxvKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBobyh0KXtyZXR1cm4gbnVsbD09dD97eDpsZS54LHk6bGUueX06dH1mdW5jdGlvbiBmbygpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBwbygpe3ZhciB0LGUsbixyLGk9dW8sYT1sbyxvPWhvLHM9Zm8sYz17fSx1PWZ0KCJzdGFydCIsImRyYWciLCJlbmQiKSxsPTAsaD0wO2Z1bmN0aW9uIGYodCl7dC5vbigibW91c2Vkb3duLmRyYWciLGQpLmZpbHRlcihzKS5vbigidG91Y2hzdGFydC5kcmFnIixnKS5vbigidG91Y2htb3ZlLmRyYWciLG0pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHYpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkKCl7aWYoIXImJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbz1iKCJtb3VzZSIsYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksQm4sdGhpcyxhcmd1bWVudHMpO28mJihUZShsZS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLHAsITApLm9uKCJtb3VzZXVwLmRyYWciLHksITApLFNlKGxlLnZpZXcpLEVlKCksbj0hMSx0PWxlLmNsaWVudFgsZT1sZS5jbGllbnRZLG8oInN0YXJ0IikpfX1mdW5jdGlvbiBwKCl7aWYoQ2UoKSwhbil7dmFyIHI9bGUuY2xpZW50WC10LGk9bGUuY2xpZW50WS1lO249cipyK2kqaT5ofWMubW91c2UoImRyYWciKX1mdW5jdGlvbiB5KCl7VGUobGUudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksQWUobGUudmlldyxuKSxDZSgpLGMubW91c2UoImVuZCIpfWZ1bmN0aW9uIGcoKXtpZihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQsZSxuPWxlLmNoYW5nZWRUb3VjaGVzLHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1uLmxlbmd0aDtmb3IodD0wO3Q8bzsrK3QpKGU9YihuW3RdLmlkZW50aWZpZXIscixPbix0aGlzLGFyZ3VtZW50cykpJiYoRWUoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gbSgpe3ZhciB0LGUsbj1sZS5jaGFuZ2VkVG91Y2hlcyxyPW4ubGVuZ3RoO2Zvcih0PTA7dDxyOysrdCkoZT1jW25bdF0uaWRlbnRpZmllcl0pJiYoQ2UoKSxlKCJkcmFnIikpfWZ1bmN0aW9uIHYoKXt2YXIgdCxlLG49bGUuY2hhbmdlZFRvdWNoZXMsaT1uLmxlbmd0aDtmb3IociYmY2xlYXJUaW1lb3V0KHIpLHI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyPW51bGx9KSw1MDApLHQ9MDt0PGk7Kyt0KShlPWNbblt0XS5pZGVudGlmaWVyXSkmJihFZSgpLGUoImVuZCIpKX1mdW5jdGlvbiBiKHQsZSxuLHIsaSl7dmFyIGEscyxoLGQ9bihlLHQpLHA9dS5jb3B5KCk7aWYoZ2UobmV3IGNvKGYsImJlZm9yZXN0YXJ0IixhLHQsbCxkWzBdLGRbMV0sMCwwLHApLChmdW5jdGlvbigpe3JldHVybiBudWxsIT0obGUuc3ViamVjdD1hPW8uYXBwbHkocixpKSkmJihzPWEueC1kWzBdfHwwLGg9YS55LWRbMV18fDAsITApfSkpKXJldHVybiBmdW5jdGlvbiBvKHUpe3ZhciB5LGc9ZDtzd2l0Y2godSl7Y2FzZSJzdGFydCI6Y1t0XT1vLHk9bCsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgY1t0XSwtLWw7Y2FzZSJkcmFnIjpkPW4oZSx0KSx5PWx9Z2UobmV3IGNvKGYsdSxhLHQseSxkWzBdK3MsZFsxXStoLGRbMF0tZ1swXSxkWzFdLWdbMV0scCkscC5hcHBseSxwLFt1LHIsaV0pfX1yZXR1cm4gZi5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzbyghIXQpLGYpOml9LGYuY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6c28odCksZik6YX0sZi5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6c28odCksZik6b30sZi50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzbyghIXQpLGYpOnN9LGYub249ZnVuY3Rpb24oKXt2YXIgdD11Lm9uLmFwcGx5KHUsYXJndW1lbnRzKTtyZXR1cm4gdD09PXU/Zjp0fSxmLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9KHQ9K3QpKnQsZik6TWF0aC5zcXJ0KGgpfSxmfWNvLnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gdD09PXRoaXMuXz90aGlzOnR9O3ZhciB5bz17fSxnbz17fTtmdW5jdGlvbiBtbyh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsnXSB8fCAiIid9KSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gdm8odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gZXx8bi5wdXNoKGVbcl09cil9KSksbn1mdW5jdGlvbiBibyh0LGUpe3ZhciBuPXQrIiIscj1uLmxlbmd0aDtyZXR1cm4gcjxlP25ldyBBcnJheShlLXIrMSkuam9pbigwKStuOm59ZnVuY3Rpb24gX28odCl7dmFyIGU9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gcih0LGUpe3ZhciByLGk9W10sYT10Lmxlbmd0aCxvPTAscz0wLGM9YTw9MCx1PSExO2Z1bmN0aW9uIGwoKXtpZihjKXJldHVybiBnbztpZih1KXJldHVybiB1PSExLHlvO3ZhciBlLHIsaT1vO2lmKDM0PT09dC5jaGFyQ29kZUF0KGkpKXtmb3IoO28rKzxhJiYzNCE9PXQuY2hhckNvZGVBdChvKXx8MzQ9PT10LmNoYXJDb2RlQXQoKytvKTspO3JldHVybihlPW8pPj1hP2M9ITA6MTA9PT0ocj10LmNoYXJDb2RlQXQobysrKSk/dT0hMDoxMz09PXImJih1PSEwLDEwPT09dC5jaGFyQ29kZUF0KG8pJiYrK28pLHQuc2xpY2UoaSsxLGUtMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7bzxhOyl7aWYoMTA9PT0ocj10LmNoYXJDb2RlQXQoZT1vKyspKSl1PSEwO2Vsc2UgaWYoMTM9PT1yKXU9ITAsMTA9PT10LmNoYXJDb2RlQXQobykmJisrbztlbHNlIGlmKHIhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGksZSl9cmV0dXJuIGM9ITAsdC5zbGljZShpLGEpfWZvcigxMD09PXQuY2hhckNvZGVBdChhLTEpJiYtLWEsMTM9PT10LmNoYXJDb2RlQXQoYS0xKSYmLS1hOyhyPWwoKSkhPT1nbzspe2Zvcih2YXIgaD1bXTtyIT09eW8mJnIhPT1nbzspaC5wdXNoKHIpLHI9bCgpO2UmJm51bGw9PShoPWUoaCxzKyspKXx8aS5wdXNoKGgpfXJldHVybiBpfWZ1bmN0aW9uIGkoZSxuKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8oZVt0XSl9KSkuam9pbih0KX0pKX1mdW5jdGlvbiBhKGUpe3JldHVybiBlLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6dCBpbnN0YW5jZW9mIERhdGU/ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRVVENIb3VycygpLG49dC5nZXRVVENNaW51dGVzKCkscj10LmdldFVUQ1NlY29uZHMoKSxpPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7cmV0dXJuIGlzTmFOKHQpPyJJbnZhbGlkIERhdGUiOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/Ii0iK2JvKC10LDYpOnQ+OTk5OT8iKyIrYm8odCw2KTpibyh0LDQpfSh0LmdldFVUQ0Z1bGxZZWFyKCkpKyItIitibyh0LmdldFVUQ01vbnRoKCkrMSwyKSsiLSIrYm8odC5nZXRVVENEYXRlKCksMikrKGk/IlQiK2JvKGUsMikrIjoiK2JvKG4sMikrIjoiK2JvKHIsMikrIi4iK2JvKGksMykrIloiOnI/IlQiK2JvKGUsMikrIjoiK2JvKG4sMikrIjoiK2JvKHIsMikrIloiOm58fGU/IlQiK2JvKGUsMikrIjoiK2JvKG4sMikrIloiOiIiKX0odCk6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxhPXIodCwoZnVuY3Rpb24odCxyKXtpZihuKXJldHVybiBuKHQsci0xKTtpPXQsbj1lP2Z1bmN0aW9uKHQsZSl7dmFyIG49bW8odCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIGUobihyKSxpLHQpfX0odCxlKTptbyh0KX0pKTtyZXR1cm4gYS5jb2x1bW5zPWl8fFtdLGF9LHBhcnNlUm93czpyLGZvcm1hdDpmdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1uJiYobj12byhlKSksW24ubWFwKG8pLmpvaW4odCldLmNvbmNhdChpKGUsbikpLmpvaW4oIlxuIil9LGZvcm1hdEJvZHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZSYmKGU9dm8odCkpLGkodCxlKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChhKS5qb2luKCJcbiIpfSxmb3JtYXRSb3c6YSxmb3JtYXRWYWx1ZTpvfX12YXIgeG89X28oIiwiKSx3bz14by5wYXJzZSxrbz14by5wYXJzZVJvd3MsVG89eG8uZm9ybWF0LEVvPXhvLmZvcm1hdEJvZHksQ289eG8uZm9ybWF0Um93cyxTbz14by5mb3JtYXRSb3csQW89eG8uZm9ybWF0VmFsdWUsTW89X28oIlx0IiksTm89TW8ucGFyc2UsRG89TW8ucGFyc2VSb3dzLE9vPU1vLmZvcm1hdCxCbz1Nby5mb3JtYXRCb2R5LExvPU1vLmZvcm1hdFJvd3MsSW89TW8uZm9ybWF0Um93LFJvPU1vLmZvcm1hdFZhbHVlO2Z1bmN0aW9uIEZvKHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbixyLGk9dFtlXS50cmltKCk7aWYoaSlpZigidHJ1ZSI9PT1pKWk9ITA7ZWxzZSBpZigiZmFsc2UiPT09aSlpPSExO2Vsc2UgaWYoIk5hTiI9PT1pKWk9TmFOO2Vsc2UgaWYoaXNOYU4obj0raSkpe2lmKCEocj1pLm1hdGNoKC9eKFstK11cZHsyfSk/XGR7NH0oLVxkezJ9KC1cZHsyfSk/KT8oVFxkezJ9OlxkezJ9KDpcZHsyfShcLlxkezN9KT8pPyhafFstK11cZHsyfTpcZHsyfSk/KT8kLykpKWNvbnRpbnVlO1BvJiZyWzRdJiYhcls3XSYmKGk9aS5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxpPW5ldyBEYXRlKGkpfWVsc2UgaT1uO2Vsc2UgaT1udWxsO3RbZV09aX1yZXR1cm4gdH12YXIgUG89bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCk7ZnVuY3Rpb24gam8odCl7cmV0dXJuK3R9ZnVuY3Rpb24gWW8odCl7cmV0dXJuIHQqdH1mdW5jdGlvbiB6byh0KXtyZXR1cm4gdCooMi10KX1mdW5jdGlvbiBVbyh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdDotLXQqKDItdCkrMSkvMn12YXIgcW89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxIbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSwkbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LGUpOjItTWF0aC5wb3coMi10LGUpKS8yfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxXbz1NYXRoLlBJLFZvPVdvLzI7ZnVuY3Rpb24gR28odCl7cmV0dXJuIDE9PSt0PzE6MS1NYXRoLmNvcyh0KlZvKX1mdW5jdGlvbiBYbyh0KXtyZXR1cm4gTWF0aC5zaW4odCpWbyl9ZnVuY3Rpb24gWm8odCl7cmV0dXJuKDEtTWF0aC5jb3MoV28qdCkpLzJ9ZnVuY3Rpb24gUW8odCl7cmV0dXJuIDEuMDAwOTc3NTE3MTA2NTQ5NCooTWF0aC5wb3coMiwtMTAqdCktLjAwMDk3NjU2MjUpfWZ1bmN0aW9uIEtvKHQpe3JldHVybiBRbygxLSt0KX1mdW5jdGlvbiBKbyh0KXtyZXR1cm4gMS1Rbyh0KX1mdW5jdGlvbiB0cyh0KXtyZXR1cm4oKHQqPTIpPD0xP1FvKDEtdCk6Mi1Rbyh0LTEpKS8yfWZ1bmN0aW9uIGVzKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gbnModCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9ZnVuY3Rpb24gcnModCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIGlzPTcuNTYyNTtmdW5jdGlvbiBhcyh0KXtyZXR1cm4gMS1vcygxLXQpfWZ1bmN0aW9uIG9zKHQpe3JldHVybih0PSt0KTwuMzYzNjM2MzYzNjM2MzYzNjU/aXMqdCp0OnQ8LjcyNzI3MjcyNzI3MjcyNzM/aXMqKHQtPS41NDU0NTQ1NDU0NTQ1NDU0KSp0Ky43NTp0PC45MDkwOTA5MDkwOTA5MDkxP2lzKih0LT0uODE4MTgxODE4MTgxODE4MikqdCsuOTM3NTppcyoodC09Ljk1NDU0NTQ1NDU0NTQ1NDYpKnQrLjk4NDM3NX1mdW5jdGlvbiBzcyh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtb3MoMS10KTpvcyh0LTEpKzEpLzJ9dmFyIGNzPTEuNzAxNTgsdXM9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybih0PSt0KSp0KihlKih0LTEpK3QpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oY3MpLGxzPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKHQrMSkqZSt0KSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oY3MpLGhzPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufShjcyksZnM9MipNYXRoLlBJLGRzPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPWZzKTtmdW5jdGlvbiBpKHQpe3JldHVybiBlKlFvKC0gLS10KSpNYXRoLnNpbigoci10KS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMykscHM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89ZnMpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtZSpRbyh0PSt0KSpNYXRoLnNpbigodCtyKS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMykseXM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89ZnMpO2Z1bmN0aW9uIGkodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqUW8oLXQpKk1hdGguc2luKChyLXQpL24pOjItZSpRbyh0KSpNYXRoLnNpbigocit0KS9uKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyk7ZnVuY3Rpb24gZ3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX1mdW5jdGlvbiBtcyh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oZ3MpfWZ1bmN0aW9uIHZzKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5hcnJheUJ1ZmZlcigpfWZ1bmN0aW9uIGJzKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbih2cyl9ZnVuY3Rpb24gX3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX1mdW5jdGlvbiB4cyh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oX3MpfWZ1bmN0aW9uIHdzKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCkseHMoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSkpfX1mdW5jdGlvbiBrcyh0LGUsbixyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApO3ZhciBpPV9vKHQpO3JldHVybiB4cyhlLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLnBhcnNlKHQscil9KSl9dmFyIFRzPXdzKHdvKSxFcz13cyhObyk7ZnVuY3Rpb24gQ3ModCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgYSBpbiBlKWlbYV09ZVthXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe24oaSl9LGkuc3JjPXR9KSl9ZnVuY3Rpb24gU3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO2lmKDIwNCE9PXQuc3RhdHVzJiYyMDUhPT10LnN0YXR1cylyZXR1cm4gdC5qc29uKCl9ZnVuY3Rpb24gQXModCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKFNzKX1mdW5jdGlvbiBNcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4geHMoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KSl9fWNvbnN0IE5zPU1zKCJhcHBsaWNhdGlvbi94bWwiKTt2YXIgRHM9TXMoInRleHQvaHRtbCIpLE9zPU1zKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gQnModCxlKXt2YXIgbjtmdW5jdGlvbiByKCl7dmFyIHIsaSxhPW4ubGVuZ3RoLG89MCxzPTA7Zm9yKHI9MDtyPGE7KytyKW8rPShpPW5bcl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUscj0wO3I8YTsrK3IpKGk9bltyXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLHIuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXR9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscik6ZX0scn1mdW5jdGlvbiBMcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSXMoKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gUnModCxlLG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciBpLGEsbyxzLGMsdSxsLGgsZixkPXQuX3Jvb3QscD17ZGF0YTpyfSx5PXQuX3gwLGc9dC5feTAsbT10Ll94MSx2PXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigodT1lPj0oYT0oeSttKS8yKSk/eT1hOm09YSwobD1uPj0obz0oZyt2KS8yKSk/Zz1vOnY9byxpPWQsIShkPWRbaD1sPDwxfHVdKSlyZXR1cm4gaVtoXT1wLHQ7aWYocz0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLGU9PT1zJiZuPT09YylyZXR1cm4gcC5uZXh0PWQsaT9pW2hdPXA6dC5fcm9vdD1wLHQ7ZG97aT1pP2lbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLCh1PWU+PShhPSh5K20pLzIpKT95PWE6bT1hLChsPW4+PShvPShnK3YpLzIpKT9nPW86dj1vfXdoaWxlKChoPWw8PDF8dSk9PShmPShjPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbZl09ZCxpW2hdPXAsdH1mdW5jdGlvbiBGcyh0LGUsbixyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1yLHRoaXMueTE9aX1mdW5jdGlvbiBQcyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBqcyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBZcyh0LGUsbil7dmFyIHI9bmV3IHpzKG51bGw9PWU/UHM6ZSxudWxsPT1uP2pzOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIHpzKHQsZSxuLHIsaSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gVXModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBxcz1Zcy5wcm90b3R5cGU9enMucHJvdG90eXBlO2Z1bmN0aW9uIEhzKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiAkcyh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gV3ModCl7dmFyIGUsbixyPTEsaT0xO2Z1bmN0aW9uIGEoKXtmb3IodmFyIHQsYSxzLGMsdSxsLGgsZj1lLmxlbmd0aCxkPTA7ZDxpOysrZClmb3IoYT1ZcyhlLEhzLCRzKS52aXNpdEFmdGVyKG8pLHQ9MDt0PGY7Kyt0KXM9ZVt0XSxsPW5bcy5pbmRleF0saD1sKmwsYz1zLngrcy52eCx1PXMueStzLnZ5LGEudmlzaXQocCk7ZnVuY3Rpb24gcCh0LGUsbixpLGEpe3ZhciBvPXQuZGF0YSxmPXQucixkPWwrZjtpZighbylyZXR1cm4gZT5jK2R8fGk8Yy1kfHxuPnUrZHx8YTx1LWQ7aWYoby5pbmRleD5zLmluZGV4KXt2YXIgcD1jLW8ueC1vLnZ4LHk9dS1vLnktby52eSxnPXAqcCt5Knk7ZzxkKmQmJigwPT09cCYmKGcrPShwPUlzKCkpKnApLDA9PT15JiYoZys9KHk9SXMoKSkqeSksZz0oZC0oZz1NYXRoLnNxcnQoZykpKS9nKnIscy52eCs9KHAqPWcpKihkPShmKj1mKS8oaCtmKSkscy52eSs9KHkqPWcpKmQsby52eC09cCooZD0xLWQpLG8udnktPXkqZCl9fX1mdW5jdGlvbiBvKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW5bdC5kYXRhLmluZGV4XTtmb3IodmFyIGU9dC5yPTA7ZTw0OysrZSl0W2VdJiZ0W2VdLnI+dC5yJiYodC5yPXRbZV0ucil9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciByLGksYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSkscj0wO3I8YTsrK3IpaT1lW3JdLG5baS5pbmRleF09K3QoaSxyLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9THMobnVsbD09dD8xOit0KSksYS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LGEuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxhKTppfSxhLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGEpOnJ9LGEucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6THMoK2UpLHMoKSxhKTp0fSxhfWZ1bmN0aW9uIFZzKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIEdzKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufWZ1bmN0aW9uIFhzKHQpe3ZhciBlLG4scixpLGEsbz1WcyxzPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKGlbdC5zb3VyY2UuaW5kZXhdLGlbdC50YXJnZXQuaW5kZXhdKX0sYz1McygzMCksdT0xO2Z1bmN0aW9uIGwocil7Zm9yKHZhciBpPTAsbz10Lmxlbmd0aDtpPHU7KytpKWZvcih2YXIgcyxjLGwsaCxmLGQscCx5PTA7eTxvOysreSljPShzPXRbeV0pLnNvdXJjZSxoPShsPXMudGFyZ2V0KS54K2wudngtYy54LWMudnh8fElzKCksZj1sLnkrbC52eS1jLnktYy52eXx8SXMoKSxoKj1kPSgoZD1NYXRoLnNxcnQoaCpoK2YqZikpLW5beV0pL2QqciplW3ldLGYqPWQsbC52eC09aCoocD1hW3ldKSxsLnZ5LT1mKnAsYy52eCs9aCoocD0xLXApLGMudnkrPWYqcH1mdW5jdGlvbiBoKCl7aWYocil7dmFyIHMsYyx1PXIubGVuZ3RoLGw9dC5sZW5ndGgsaD1uYShyLG8pO2ZvcihzPTAsaT1uZXcgQXJyYXkodSk7czxsOysrcykoYz10W3NdKS5pbmRleD1zLCJvYmplY3QiIT10eXBlb2YgYy5zb3VyY2UmJihjLnNvdXJjZT1HcyhoLGMuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBjLnRhcmdldCYmKGMudGFyZ2V0PUdzKGgsYy50YXJnZXQpKSxpW2Muc291cmNlLmluZGV4XT0oaVtjLnNvdXJjZS5pbmRleF18fDApKzEsaVtjLnRhcmdldC5pbmRleF09KGlbYy50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihzPTAsYT1uZXcgQXJyYXkobCk7czxsOysrcyljPXRbc10sYVtzXT1pW2Muc291cmNlLmluZGV4XS8oaVtjLnNvdXJjZS5pbmRleF0raVtjLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGwpLGYoKSxuPW5ldyBBcnJheShsKSxkKCl9fWZ1bmN0aW9uIGYoKXtpZihyKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOysrbillW25dPStzKHRbbl0sbix0KX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpbltlXT0rYyh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxsLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGgoKX0sbC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGgoKSxsKTp0fSxsLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGwpOnV9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMcygrdCksZigpLGwpOnN9LGwuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMcygrdCksZCgpLGwpOmN9LGx9ZnVuY3Rpb24gWnModCl7cmV0dXJuIHQueH1mdW5jdGlvbiBRcyh0KXtyZXR1cm4gdC55fXFzLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IHpzKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkscj10aGlzLl9yb290O2lmKCFyKXJldHVybiBuO2lmKCFyLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1VcyhyKSxuO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPXIuc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPVVzKGUpKTtyZXR1cm4gbn0scXMuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gUnModGhpcy5jb3ZlcihlLG4pLGUsbix0KX0scXMuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksYz0xLzAsdT0xLzAsbD0tMS8wLGg9LTEvMDtmb3Iobj0wO248YTsrK24paXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KG9bbl09cixzW25dPWkscjxjJiYoYz1yKSxyPmwmJihsPXIpLGk8dSYmKHU9aSksaT5oJiYoaD1pKSk7aWYoYz5sfHx1PmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIoYyx1KS5jb3ZlcihsLGgpLG49MDtuPGE7KytuKVJzKHRoaXMsb1tuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSxxcy5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsYT10aGlzLl95MTtpZihpc05hTihuKSlpPShuPU1hdGguZmxvb3IodCkpKzEsYT0ocj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7Zm9yKHZhciBvLHMsYz1pLW4sdT10aGlzLl9yb290O24+dHx8dD49aXx8cj5lfHxlPj1hOylzd2l0Y2gocz0oZTxyKTw8MXx0PG4sKG89bmV3IEFycmF5KDQpKVtzXT11LHU9byxjKj0yLHMpe2Nhc2UgMDppPW4rYyxhPXIrYzticmVhaztjYXNlIDE6bj1pLWMsYT1yK2M7YnJlYWs7Y2FzZSAyOmk9bitjLHI9YS1jO2JyZWFrO2Nhc2UgMzpuPWktYyxyPWEtY310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9dSl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpc30scXMuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LHFzLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0scXMuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scyxjLHUsbD10aGlzLl94MCxoPXRoaXMuX3kwLGY9dGhpcy5feDEsZD10aGlzLl95MSxwPVtdLHk9dGhpcy5fcm9vdDtmb3IoeSYmcC5wdXNoKG5ldyBGcyh5LGwsaCxmLGQpKSxudWxsPT1uP249MS8wOihsPXQtbixoPWUtbixmPXQrbixkPWUrbixuKj1uKTtjPXAucG9wKCk7KWlmKCEoISh5PWMubm9kZSl8fChpPWMueDApPmZ8fChhPWMueTApPmR8fChvPWMueDEpPGx8fChzPWMueTEpPGgpKWlmKHkubGVuZ3RoKXt2YXIgZz0oaStvKS8yLG09KGErcykvMjtwLnB1c2gobmV3IEZzKHlbM10sZyxtLG8scyksbmV3IEZzKHlbMl0saSxtLGcscyksbmV3IEZzKHlbMV0sZyxhLG8sbSksbmV3IEZzKHlbMF0saSxhLGcsbSkpLCh1PShlPj1tKTw8MXx0Pj1nKSYmKGM9cFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTFdPXBbcC5sZW5ndGgtMS11XSxwW3AubGVuZ3RoLTEtdV09Yyl9ZWxzZXt2YXIgdj10LSt0aGlzLl94LmNhbGwobnVsbCx5LmRhdGEpLGI9ZS0rdGhpcy5feS5jYWxsKG51bGwseS5kYXRhKSxfPXYqditiKmI7aWYoXzxuKXt2YXIgeD1NYXRoLnNxcnQobj1fKTtsPXQteCxoPWUteCxmPXQreCxkPWUreCxyPXkuZGF0YX19cmV0dXJuIHJ9LHFzLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihhPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoLGYsZD10aGlzLl9yb290LHA9dGhpcy5feDAseT10aGlzLl95MCxnPXRoaXMuX3gxLG09dGhpcy5feTE7aWYoIWQpcmV0dXJuIHRoaXM7aWYoZC5sZW5ndGgpZm9yKDs7KXtpZigodT1hPj0ocz0ocCtnKS8yKSk/cD1zOmc9cywobD1vPj0oYz0oeSttKS8yKSk/eT1jOm09YyxlPWQsIShkPWRbaD1sPDwxfHVdKSlyZXR1cm4gdGhpcztpZighZC5sZW5ndGgpYnJlYWs7KGVbaCsxJjNdfHxlW2grMiYzXXx8ZVtoKzMmM10pJiYobj1lLGY9aCl9Zm9yKDtkLmRhdGEhPT10OylpZihyPWQsIShkPWQubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9ZC5uZXh0KSYmZGVsZXRlIGQubmV4dCxyPyhpP3IubmV4dD1pOmRlbGV0ZSByLm5leHQsdGhpcyk6ZT8oaT9lW2hdPWk6ZGVsZXRlIGVbaF0sKGQ9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJmQ9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFkLmxlbmd0aCYmKG4/bltmXT1kOnRoaXMuX3Jvb3Q9ZCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0scXMucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30scXMucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxxcy5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSksdH0scXMudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYSxvLHM9W10sYz10aGlzLl9yb290O2ZvcihjJiZzLnB1c2gobmV3IEZzKGMsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KGM9ZS5ub2RlLHI9ZS54MCxpPWUueTAsYT1lLngxLG89ZS55MSkmJmMubGVuZ3RoKXt2YXIgdT0ocithKS8yLGw9KGkrbykvMjsobj1jWzNdKSYmcy5wdXNoKG5ldyBGcyhuLHUsbCxhLG8pKSwobj1jWzJdKSYmcy5wdXNoKG5ldyBGcyhuLHIsbCx1LG8pKSwobj1jWzFdKSYmcy5wdXNoKG5ldyBGcyhuLHUsaSxhLGwpKSwobj1jWzBdKSYmcy5wdXNoKG5ldyBGcyhuLHIsaSx1LGwpKX1yZXR1cm4gdGhpc30scXMudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgRnModGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciBpPWUubm9kZTtpZihpLmxlbmd0aCl7dmFyIGEsbz1lLngwLHM9ZS55MCxjPWUueDEsdT1lLnkxLGw9KG8rYykvMixoPShzK3UpLzI7KGE9aVswXSkmJm4ucHVzaChuZXcgRnMoYSxvLHMsbCxoKSksKGE9aVsxXSkmJm4ucHVzaChuZXcgRnMoYSxsLHMsYyxoKSksKGE9aVsyXSkmJm4ucHVzaChuZXcgRnMoYSxvLGgsbCx1KSksKGE9aVszXSkmJm4ucHVzaChuZXcgRnMoYSxsLGgsYyx1KSl9ci5wdXNoKGUpfWZvcig7ZT1yLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30scXMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LHFzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgS3M9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIEpzKHQpe3ZhciBlLG49MSxyPS4wMDEsaT0xLU1hdGgucG93KHIsMS8zMDApLGE9MCxvPS42LHM9bmEoKSxjPVZuKGwpLHU9ZnQoInRpY2siLCJlbmQiKTtmdW5jdGlvbiBsKCl7aCgpLHUuY2FsbCgidGljayIsZSksbjxyJiYoYy5zdG9wKCksdS5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBoKHIpe3ZhciBjLHUsbD10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGg9MDtoPHI7KytoKWZvcihuKz0oYS1uKSppLHMuZWFjaCgoZnVuY3Rpb24odCl7dChuKX0pKSxjPTA7YzxsOysrYyludWxsPT0odT10W2NdKS5meD91LngrPXUudngqPW86KHUueD11LmZ4LHUudng9MCksbnVsbD09dS5meT91LnkrPXUudnkqPW86KHUueT11LmZ5LHUudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gZigpe2Zvcih2YXIgZSxuPTAscj10Lmxlbmd0aDtuPHI7KytuKXtpZigoZT10W25dKS5pbmRleD1uLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQobiksYT1uKktzO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksZigpLGU9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGMucmVzdGFydChsKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGMuc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZigpLHMuZWFjaChkKSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxlKTpufSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTpyfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGUpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTEtdCxlKToxLW99LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9zLnJlbW92ZSh0KTpzLnNldCh0LGQobikpLGUpOnMuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxhLG8scyxjLHU9MCxsPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsdT0wO3U8bDsrK3UpKG89KGk9ZS0ocz10W3VdKS54KSppKyhhPW4tcy55KSphKTxyJiYoYz1zLHI9byk7cmV0dXJuIGN9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8odS5vbih0LG4pLGUpOnUub24odCl9fX1mdW5jdGlvbiB0Yygpe3ZhciB0LGUsbixyLGk9THMoLTMwKSxhPTEsbz0xLzAscz0uODE7ZnVuY3Rpb24gYyhyKXt2YXIgaSxhPXQubGVuZ3RoLG89WXModCxacyxRcykudmlzaXRBZnRlcihsKTtmb3Iobj1yLGk9MDtpPGE7KytpKWU9dFtpXSxvLnZpc2l0KGgpfWZ1bmN0aW9uIHUoKXtpZih0KXt2YXIgZSxuLGE9dC5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KGEpLGU9MDtlPGE7KytlKW49dFtlXSxyW24uaW5kZXhdPStpKG4sZSx0KX19ZnVuY3Rpb24gbCh0KXt2YXIgZSxuLGksYSxvLHM9MCxjPTA7aWYodC5sZW5ndGgpe2ZvcihpPWE9bz0wO288NDsrK28pKGU9dFtvXSkmJihuPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsYys9bixpKz1uKmUueCxhKz1uKmUueSk7dC54PWkvYyx0Lnk9YS9jfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9cltlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gaCh0LGksYyx1KXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgbD10LngtZS54LGg9dC55LWUueSxmPXUtaSxkPWwqbCtoKmg7aWYoZipmL3M8ZClyZXR1cm4gZDxvJiYoMD09PWwmJihkKz0obD1JcygpKSpsKSwwPT09aCYmKGQrPShoPUlzKCkpKmgpLGQ8YSYmKGQ9TWF0aC5zcXJ0KGEqZCkpLGUudngrPWwqdC52YWx1ZSpuL2QsZS52eSs9aCp0LnZhbHVlKm4vZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49bykpeyh0LmRhdGEhPT1lfHx0Lm5leHQpJiYoMD09PWwmJihkKz0obD1JcygpKSpsKSwwPT09aCYmKGQrPShoPUlzKCkpKmgpLGQ8YSYmKGQ9TWF0aC5zcXJ0KGEqZCkpKTtkb3t0LmRhdGEhPT1lJiYoZj1yW3QuZGF0YS5pbmRleF0qbi9kLGUudngrPWwqZixlLnZ5Kz1oKmYpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIGMuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsdSgpfSxjLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6THMoK3QpLHUoKSxjKTppfSxjLmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCxjKTpNYXRoLnNxcnQoYSl9LGMuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCp0LGMpOk1hdGguc3FydChvKX0sYy50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10KnQsYyk6TWF0aC5zcXJ0KHMpfSxjfWZ1bmN0aW9uIGVjKHQsZSxuKXt2YXIgcixpLGEsbz1McyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIG89MCxzPXIubGVuZ3RoO288czsrK28pe3ZhciBjPXJbb10sdT1jLngtZXx8MWUtNixsPWMueS1ufHwxZS02LGg9TWF0aC5zcXJ0KHUqdStsKmwpLGY9KGFbb10taCkqaVtvXSp0L2g7Yy52eCs9dSpmLGMudnkrPWwqZn19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciBlLG49ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKWFbZV09K3QocltlXSxlLHIpLGlbZV09aXNOYU4oYVtlXSk/MDorbyhyW2VdLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1McygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsYygpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6THMoK3QpLGMoKSxzKTpvfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkxzKCtlKSxjKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfWZ1bmN0aW9uIG5jKHQpe3ZhciBlLG4scixpPUxzKC4xKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oclthXS1pLngpKm5bYV0qdH1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpblthXT1pc05hTihyW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1McyhudWxsPT10PzA6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LG8oKX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxzKCt0KSxvKCksYSk6aX0sYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6THMoK2UpLG8oKSxhKTp0fSxhfWZ1bmN0aW9uIHJjKHQpe3ZhciBlLG4scixpPUxzKC4xKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oclthXS1pLnkpKm5bYV0qdH1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpblthXT1pc05hTihyW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1McyhudWxsPT10PzA6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LG8oKX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxzKCt0KSxvKCksYSk6aX0sYS55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6THMoK2UpLG8oKSxhKTp0fSxhfWZ1bmN0aW9uIGljKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIGFjKHQpe3JldHVybih0PWljKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIG9jLHNjPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGNjKHQpe2lmKCEoZT1zYy5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgdWMoe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gdWModCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9ZnVuY3Rpb24gbGModCxlKXt2YXIgbj1pYyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfWNjLnByb3RvdHlwZT11Yy5wcm90b3R5cGUsdWMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgaGM9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModD1NYXRoLnJvdW5kKHQpKT49MWUyMT90LnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6dC50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxjKDEwMCp0LGUpfSxyOmxjLHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1pYyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdLGE9aS0ob2M9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLG89ci5sZW5ndGg7cmV0dXJuIGE9PT1vP3I6YT5vP3IrbmV3IEFycmF5KGEtbysxKS5qb2luKCIwIik6YT4wP3Iuc2xpY2UoMCxhKSsiLiIrci5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStpYyh0LE1hdGgubWF4KDAsZSthLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBmYyh0KXtyZXR1cm4gdH12YXIgZGMscGMseWMsZ2M9QXJyYXkucHJvdG90eXBlLm1hcCxtYz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gdmModCl7dmFyIGUsbixyPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2ZjOihlPWdjLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLG49dC50aG91c2FuZHMrIiIsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1bXSxvPTAscz1lWzBdLGM9MDtpPjAmJnM+MCYmKGMrcysxPnImJihzPU1hdGgubWF4KDEsci1jKSksYS5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgoYys9cysxKT5yKSk7KXM9ZVtvPShvKzEpJWUubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX0pLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLGE9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIscz12b2lkIDA9PT10Lm51bWVyYWxzP2ZjOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fShnYy5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSksYz12b2lkIDA9PT10LnBlcmNlbnQ/IiUiOnQucGVyY2VudCsiIix1PXZvaWQgMD09PXQubWludXM/Ii0iOnQubWludXMrIiIsbD12b2lkIDA9PT10Lm5hbj8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKHQpe3ZhciBlPSh0PWNjKHQpKS5maWxsLG49dC5hbGlnbixoPXQuc2lnbixmPXQuc3ltYm9sLGQ9dC56ZXJvLHA9dC53aWR0aCx5PXQuY29tbWEsZz10LnByZWNpc2lvbixtPXQudHJpbSx2PXQudHlwZTsibiI9PT12Pyh5PSEwLHY9ImciKTpoY1t2XXx8KHZvaWQgMD09PWcmJihnPTEyKSxtPSEwLHY9ImciKSwoZHx8IjAiPT09ZSYmIj0iPT09bikmJihkPSEwLGU9IjAiLG49Ij0iKTt2YXIgYj0iJCI9PT1mP2k6IiMiPT09ZiYmL1tib3hYXS8udGVzdCh2KT8iMCIrdi50b0xvd2VyQ2FzZSgpOiIiLF89IiQiPT09Zj9hOi9bJXBdLy50ZXN0KHYpP2M6IiIseD1oY1t2XSx3PS9bZGVmZ3BycyVdLy50ZXN0KHYpO2Z1bmN0aW9uIGsodCl7dmFyIGksYSxjLGY9YixrPV87aWYoImMiPT09dilrPXgodCkrayx0PSIiO2Vsc2V7dmFyIFQ9KHQ9K3QpPDB8fDEvdDwwO2lmKHQ9aXNOYU4odCk/bDp4KE1hdGguYWJzKHQpLGcpLG0mJih0PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBlLG49dC5sZW5ndGgscj0xLGk9LTE7cjxuOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPWU9cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxlPXI7YnJlYWs7ZGVmYXVsdDppZighK3Rbcl0pYnJlYWsgdDtpPjAmJihpPTApfXJldHVybiBpPjA/dC5zbGljZSgwLGkpK3Quc2xpY2UoZSsxKTp0fSh0KSksVCYmMD09K3QmJiIrIiE9PWgmJihUPSExKSxmPShUPyIoIj09PWg/aDp1OiItIj09PWh8fCIoIj09PWg/IiI6aCkrZixrPSgicyI9PT12P21jWzgrb2MvM106IiIpK2srKFQmJiIoIj09PWg/IikiOiIiKSx3KWZvcihpPS0xLGE9dC5sZW5ndGg7KytpPGE7KWlmKDQ4PihjPXQuY2hhckNvZGVBdChpKSl8fGM+NTcpe2s9KDQ2PT09Yz9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStrLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX15JiYhZCYmKHQ9cih0LDEvMCkpO3ZhciBFPWYubGVuZ3RoK3QubGVuZ3RoK2subGVuZ3RoLEM9RTxwP25ldyBBcnJheShwLUUrMSkuam9pbihlKToiIjtzd2l0Y2goeSYmZCYmKHQ9cihDK3QsQy5sZW5ndGg/cC1rLmxlbmd0aDoxLzApLEM9IiIpLG4pe2Nhc2UiPCI6dD1mK3QraytDO2JyZWFrO2Nhc2UiPSI6dD1mK0MrdCtrO2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsRT1DLmxlbmd0aD4+MSkrZit0K2srQy5zbGljZShFKTticmVhaztkZWZhdWx0OnQ9QytmK3Qra31yZXR1cm4gcyh0KX1yZXR1cm4gZz12b2lkIDA9PT1nPzY6L1tncHJzXS8udGVzdCh2KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGcpKSxrLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LGt9cmV0dXJue2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPWgoKCh0PWNjKHQpKS50eXBlPSJmIix0KSkscj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihhYyhlKS8zKSkpLGk9TWF0aC5wb3coMTAsLXIpLGE9bWNbOCtyLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK2F9fX19ZnVuY3Rpb24gYmModCl7cmV0dXJuIGRjPXZjKHQpLHBjPWRjLmZvcm1hdCx5Yz1kYy5mb3JtYXRQcmVmaXgsZGN9ZnVuY3Rpb24gX2ModCl7cmV0dXJuIE1hdGgubWF4KDAsLWFjKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24geGModCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihhYyhlKS8zKSkpLWFjKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24gd2ModCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxhYyhlKS1hYyh0KSkrMX1mdW5jdGlvbiBrYygpe3JldHVybiBuZXcgVGN9ZnVuY3Rpb24gVGMoKXt0aGlzLnJlc2V0KCl9YmMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pLFRjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VGMscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtDYyhFYyx0LHRoaXMudCksQ2ModGhpcyxFYy5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9RWMudDp0aGlzLnM9RWMudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgRWM9bmV3IFRjO2Z1bmN0aW9uIENjKHQsZSxuKXt2YXIgcj10LnM9ZStuLGk9ci1lLGE9ci1pO3QudD1lLWErKG4taSl9dmFyIFNjPTFlLTYsQWM9MWUtMTIsTWM9TWF0aC5QSSxOYz1NYy8yLERjPU1jLzQsT2M9MipNYyxCYz0xODAvTWMsTGM9TWMvMTgwLEljPU1hdGguYWJzLFJjPU1hdGguYXRhbixGYz1NYXRoLmF0YW4yLFBjPU1hdGguY29zLGpjPU1hdGguY2VpbCxZYz1NYXRoLmV4cCx6Yz0oTWF0aC5mbG9vcixNYXRoLmxvZyksVWM9TWF0aC5wb3cscWM9TWF0aC5zaW4sSGM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LCRjPU1hdGguc3FydCxXYz1NYXRoLnRhbjtmdW5jdGlvbiBWYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9NYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gR2ModCl7cmV0dXJuIHQ+MT9OYzp0PC0xPy1OYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gWGModCl7cmV0dXJuKHQ9cWModC8yKSkqdH1mdW5jdGlvbiBaYygpe31mdW5jdGlvbiBRYyh0LGUpe3QmJkpjLmhhc093blByb3BlcnR5KHQudHlwZSkmJkpjW3QudHlwZV0odCxlKX12YXIgS2M9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtRYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspUWMobltyXS5nZW9tZXRyeSxlKX19LEpjPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7dHUodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KXR1KG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2V1KHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZXUobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVFjKG5bcl0sZSl9fTtmdW5jdGlvbiB0dSh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBldSh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KXR1KHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX1mdW5jdGlvbiBudSh0LGUpe3QmJktjLmhhc093blByb3BlcnR5KHQudHlwZSk/S2NbdC50eXBlXSh0LGUpOlFjKHQsZSl9dmFyIHJ1LGl1LGF1LG91LHN1LGN1PWtjKCksdXU9a2MoKSxsdT17cG9pbnQ6WmMsbGluZVN0YXJ0OlpjLGxpbmVFbmQ6WmMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Y3UucmVzZXQoKSxsdS5saW5lU3RhcnQ9aHUsbHUubGluZUVuZD1mdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PStjdTt1dS5hZGQodDwwP09jK3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9WmN9LHNwaGVyZTpmdW5jdGlvbigpe3V1LmFkZChPYyl9fTtmdW5jdGlvbiBodSgpe2x1LnBvaW50PWR1fWZ1bmN0aW9uIGZ1KCl7cHUocnUsaXUpfWZ1bmN0aW9uIGR1KHQsZSl7bHUucG9pbnQ9cHUscnU9dCxpdT1lLGF1PXQqPUxjLG91PVBjKGU9KGUqPUxjKS8yK0RjKSxzdT1xYyhlKX1mdW5jdGlvbiBwdSh0LGUpe3ZhciBuPSh0Kj1MYyktYXUscj1uPj0wPzE6LTEsaT1yKm4sYT1QYyhlPShlKj1MYykvMitEYyksbz1xYyhlKSxzPXN1Km8sYz1vdSphK3MqUGMoaSksdT1zKnIqcWMoaSk7Y3UuYWRkKEZjKHUsYykpLGF1PXQsb3U9YSxzdT1vfWZ1bmN0aW9uIHl1KHQpe3JldHVybiB1dS5yZXNldCgpLG51KHQsbHUpLDIqdXV9ZnVuY3Rpb24gZ3UodCl7cmV0dXJuW0ZjKHRbMV0sdFswXSksR2ModFsyXSldfWZ1bmN0aW9uIG11KHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9UGMobik7cmV0dXJuW3IqUGMoZSkscipxYyhlKSxxYyhuKV19ZnVuY3Rpb24gdnUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gYnUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIF91KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24geHUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIHd1KHQpe3ZhciBlPSRjKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIga3UsVHUsRXUsQ3UsU3UsQXUsTXUsTnUsRHUsT3UsQnUsTHUsSXUsUnUsRnUsUHUsanUsWXUsenUsVXUscXUsSHUsJHUsV3UsVnUsR3UsWHU9a2MoKSxadT17cG9pbnQ6UXUsbGluZVN0YXJ0Okp1LGxpbmVFbmQ6dGwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WnUucG9pbnQ9ZWwsWnUubGluZVN0YXJ0PW5sLFp1LmxpbmVFbmQ9cmwsWHUucmVzZXQoKSxsdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2x1LnBvbHlnb25FbmQoKSxadS5wb2ludD1RdSxadS5saW5lU3RhcnQ9SnUsWnUubGluZUVuZD10bCxjdTwwPyhrdT0tKEV1PTE4MCksVHU9LShDdT05MCkpOlh1PlNjP0N1PTkwOlh1PC0xZS02JiYoVHU9LTkwKSxPdVswXT1rdSxPdVsxXT1FdX0sc3BoZXJlOmZ1bmN0aW9uKCl7a3U9LShFdT0xODApLFR1PS0oQ3U9OTApfX07ZnVuY3Rpb24gUXUodCxlKXtEdS5wdXNoKE91PVtrdT10LEV1PXRdKSxlPFR1JiYoVHU9ZSksZT5DdSYmKEN1PWUpfWZ1bmN0aW9uIEt1KHQsZSl7dmFyIG49bXUoW3QqTGMsZSpMY10pO2lmKE51KXt2YXIgcj1idShOdSxuKSxpPWJ1KFtyWzFdLC1yWzBdLDBdLHIpO3d1KGkpLGk9Z3UoaSk7dmFyIGEsbz10LVN1LHM9bz4wPzE6LTEsYz1pWzBdKkJjKnMsdT1JYyhvKT4xODA7dV4ocypTdTxjJiZjPHMqdCk/KGE9aVsxXSpCYyk+Q3UmJihDdT1hKTp1XihzKlN1PChjPShjKzM2MCklMzYwLTE4MCkmJmM8cyp0KT8oYT0taVsxXSpCYyk8VHUmJihUdT1hKTooZTxUdSYmKFR1PWUpLGU+Q3UmJihDdT1lKSksdT90PFN1P2lsKGt1LHQpPmlsKGt1LEV1KSYmKEV1PXQpOmlsKHQsRXUpPmlsKGt1LEV1KSYmKGt1PXQpOkV1Pj1rdT8odDxrdSYmKGt1PXQpLHQ+RXUmJihFdT10KSk6dD5TdT9pbChrdSx0KT5pbChrdSxFdSkmJihFdT10KTppbCh0LEV1KT5pbChrdSxFdSkmJihrdT10KX1lbHNlIER1LnB1c2goT3U9W2t1PXQsRXU9dF0pO2U8VHUmJihUdT1lKSxlPkN1JiYoQ3U9ZSksTnU9bixTdT10fWZ1bmN0aW9uIEp1KCl7WnUucG9pbnQ9S3V9ZnVuY3Rpb24gdGwoKXtPdVswXT1rdSxPdVsxXT1FdSxadS5wb2ludD1RdSxOdT1udWxsfWZ1bmN0aW9uIGVsKHQsZSl7aWYoTnUpe3ZhciBuPXQtU3U7WHUuYWRkKEljKG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm4pfWVsc2UgQXU9dCxNdT1lO2x1LnBvaW50KHQsZSksS3UodCxlKX1mdW5jdGlvbiBubCgpe2x1LmxpbmVTdGFydCgpfWZ1bmN0aW9uIHJsKCl7ZWwoQXUsTXUpLGx1LmxpbmVFbmQoKSxJYyhYdSk+U2MmJihrdT0tKEV1PTE4MCkpLE91WzBdPWt1LE91WzFdPUV1LE51PW51bGx9ZnVuY3Rpb24gaWwodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIGFsKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBvbCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9ZnVuY3Rpb24gc2wodCl7dmFyIGUsbixyLGksYSxvLHM7aWYoQ3U9RXU9LShrdT1UdT0xLzApLER1PVtdLG51KHQsWnUpLG49RHUubGVuZ3RoKXtmb3IoRHUuc29ydChhbCksZT0xLGE9W3I9RHVbMF1dO2U8bjsrK2Upb2wociwoaT1EdVtlXSlbMF0pfHxvbChyLGlbMV0pPyhpbChyWzBdLGlbMV0pPmlsKHJbMF0sclsxXSkmJihyWzFdPWlbMV0pLGlsKGlbMF0sclsxXSk+aWwoclswXSxyWzFdKSYmKHJbMF09aVswXSkpOmEucHVzaChyPWkpO2ZvcihvPS0xLzAsZT0wLHI9YVtuPWEubGVuZ3RoLTFdO2U8PW47cj1pLCsrZSlpPWFbZV0sKHM9aWwoclsxXSxpWzBdKSk+byYmKG89cyxrdT1pWzBdLEV1PXJbMV0pfXJldHVybiBEdT1PdT1udWxsLGt1PT09MS8wfHxUdT09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1trdSxUdV0sW0V1LEN1XV19dmFyIGNsPXtzcGhlcmU6WmMscG9pbnQ6dWwsbGluZVN0YXJ0OmhsLGxpbmVFbmQ6cGwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Y2wubGluZVN0YXJ0PXlsLGNsLmxpbmVFbmQ9Z2x9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtjbC5saW5lU3RhcnQ9aGwsY2wubGluZUVuZD1wbH19O2Z1bmN0aW9uIHVsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpO2xsKG4qUGModCksbipxYyh0KSxxYyhlKSl9ZnVuY3Rpb24gbGwodCxlLG4peysrQnUsSXUrPSh0LUl1KS9CdSxSdSs9KGUtUnUpL0J1LEZ1Kz0obi1GdSkvQnV9ZnVuY3Rpb24gaGwoKXtjbC5wb2ludD1mbH1mdW5jdGlvbiBmbCh0LGUpe3QqPUxjO3ZhciBuPVBjKGUqPUxjKTtXdT1uKlBjKHQpLFZ1PW4qcWModCksR3U9cWMoZSksY2wucG9pbnQ9ZGwsbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIGRsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpLHI9bipQYyh0KSxpPW4qcWModCksYT1xYyhlKSxvPUZjKCRjKChvPVZ1KmEtR3UqaSkqbysobz1HdSpyLVd1KmEpKm8rKG89V3UqaS1WdSpyKSpvKSxXdSpyK1Z1KmkrR3UqYSk7THUrPW8sUHUrPW8qKFd1KyhXdT1yKSksanUrPW8qKFZ1KyhWdT1pKSksWXUrPW8qKEd1KyhHdT1hKSksbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIHBsKCl7Y2wucG9pbnQ9dWx9ZnVuY3Rpb24geWwoKXtjbC5wb2ludD1tbH1mdW5jdGlvbiBnbCgpe3ZsKEh1LCR1KSxjbC5wb2ludD11bH1mdW5jdGlvbiBtbCh0LGUpe0h1PXQsJHU9ZSx0Kj1MYyxlKj1MYyxjbC5wb2ludD12bDt2YXIgbj1QYyhlKTtXdT1uKlBjKHQpLFZ1PW4qcWModCksR3U9cWMoZSksbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIHZsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpLHI9bipQYyh0KSxpPW4qcWModCksYT1xYyhlKSxvPVZ1KmEtR3UqaSxzPUd1KnItV3UqYSxjPVd1KmktVnUqcix1PSRjKG8qbytzKnMrYypjKSxsPUdjKHUpLGg9dSYmLWwvdTt6dSs9aCpvLFV1Kz1oKnMscXUrPWgqYyxMdSs9bCxQdSs9bCooV3UrKFd1PXIpKSxqdSs9bCooVnUrKFZ1PWkpKSxZdSs9bCooR3UrKEd1PWEpKSxsbChXdSxWdSxHdSl9ZnVuY3Rpb24gYmwodCl7QnU9THU9SXU9UnU9RnU9UHU9anU9WXU9enU9VXU9cXU9MCxudSh0LGNsKTt2YXIgZT16dSxuPVV1LHI9cXUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTxBYyYmKGU9UHUsbj1qdSxyPVl1LEx1PFNjJiYoZT1JdSxuPVJ1LHI9RnUpLChpPWUqZStuKm4rcipyKTxBYyk/W05hTixOYU5dOltGYyhuLGUpKkJjLEdjKHIvJGMoaSkpKkJjXX1mdW5jdGlvbiBfbCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geGwodCxlKXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIG49dChuLHIpLGUoblswXSxuWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYobi5pbnZlcnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4obj1lLmludmVydChuLHIpKSYmdC5pbnZlcnQoblswXSxuWzFdKX0pLG59ZnVuY3Rpb24gd2wodCxlKXtyZXR1cm5bSWModCk+TWM/dCtNYXRoLnJvdW5kKC10L09jKSpPYzp0LGVdfWZ1bmN0aW9uIGtsKHQsZSxuKXtyZXR1cm4odCU9T2MpP2V8fG4/eGwoRWwodCksQ2woZSxuKSk6RWwodCk6ZXx8bj9DbChlLG4pOndsfWZ1bmN0aW9uIFRsKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVyblsoZSs9dCk+TWM/ZS1PYzplPC1NYz9lK09jOmUsbl19fWZ1bmN0aW9uIEVsKHQpe3ZhciBlPVRsKHQpO3JldHVybiBlLmludmVydD1UbCgtdCksZX1mdW5jdGlvbiBDbCh0LGUpe3ZhciBuPVBjKHQpLHI9cWModCksaT1QYyhlKSxhPXFjKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1QYyhlKSxzPVBjKHQpKm8sYz1xYyh0KSpvLHU9cWMoZSksbD11Km4rcypyO3JldHVybltGYyhjKmktbCphLHMqbi11KnIpLEdjKGwqaStjKmEpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbz1QYyhlKSxzPVBjKHQpKm8sYz1xYyh0KSpvLHU9cWMoZSksbD11KmktYyphO3JldHVybltGYyhjKmkrdSphLHMqbitsKnIpLEdjKGwqbi1zKnIpXX0sb31mdW5jdGlvbiBTbCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpMYyxlWzFdKkxjKSlbMF0qPUJjLGVbMV0qPUJjLGV9cmV0dXJuIHQ9a2wodFswXSpMYyx0WzFdKkxjLHQubGVuZ3RoPjI/dFsyXSpMYzowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKkxjLGVbMV0qTGMpKVswXSo9QmMsZVsxXSo9QmMsZX0sZX1mdW5jdGlvbiBBbCh0LGUsbixyLGksYSl7aWYobil7dmFyIG89UGMoZSkscz1xYyhlKSxjPXIqbjtudWxsPT1pPyhpPWUrcipPYyxhPWUtYy8yKTooaT1NbChvLGkpLGE9TWwobyxhKSwocj4wP2k8YTppPmEpJiYoaSs9cipPYykpO2Zvcih2YXIgdSxsPWk7cj4wP2w+YTpsPGE7bC09Yyl1PWd1KFtvLC1zKlBjKGwpLC1zKnFjKGwpXSksdC5wb2ludCh1WzBdLHVbMV0pfX1mdW5jdGlvbiBNbCh0LGUpeyhlPW11KGUpKVswXS09dCx3dShlKTt2YXIgbj1WYygtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1uOm4pK09jLVNjKSVPY31mdW5jdGlvbiBObCgpe3ZhciB0LGUsbj1fbChbMCwwXSkscj1fbCg5MCksaT1fbCg2KSxhPXtwb2ludDpmdW5jdGlvbihuLHIpe3QucHVzaChuPWUobixyKSksblswXSo9QmMsblsxXSo9QmN9fTtmdW5jdGlvbiBvKCl7dmFyIG89bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpMYyxjPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKkxjO3JldHVybiB0PVtdLGU9a2woLW9bMF0qTGMsLW9bMV0qTGMsMCkuaW52ZXJ0LEFsKGEscyxjLDEpLG89e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1lPW51bGwsb31yZXR1cm4gby5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfbChbK3RbMF0sK3RbMV1dKSxvKTpufSxvLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol9sKCt0KSxvKTpyfSxvLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol9sKCt0KSxvKTppfSxvfWZ1bmN0aW9uIERsKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuLHIpe3QucHVzaChbZSxuLHJdKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOlpjLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIG49ZTtyZXR1cm4gZT1bXSx0PW51bGwsbn19fWZ1bmN0aW9uIE9sKHQsZSl7cmV0dXJuIEljKHRbMF0tZVswXSk8U2MmJkljKHRbMV0tZVsxXSk8U2N9ZnVuY3Rpb24gQmwodCxlLG4scil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPW4sdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBMbCh0LGUsbixyLGkpe3ZhciBhLG8scz1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLG4scj10WzBdLG89dFtlXTtpZihPbChyLG8pKXtpZighclsyXSYmIW9bMl0pe2ZvcihpLmxpbmVTdGFydCgpLGE9MDthPGU7KythKWkucG9pbnQoKHI9dFthXSlbMF0sclsxXSk7cmV0dXJuIHZvaWQgaS5saW5lRW5kKCl9b1swXSs9MmUtNn1zLnB1c2gobj1uZXcgQmwocix0LG51bGwsITApKSxjLnB1c2gobi5vPW5ldyBCbChyLG51bGwsbiwhMSkpLHMucHVzaChuPW5ldyBCbChvLHQsbnVsbCwhMSkpLGMucHVzaChuLm89bmV3IEJsKG8sbnVsbCxuLCEwKSl9fSkpLHMubGVuZ3RoKXtmb3IoYy5zb3J0KGUpLElsKHMpLElsKGMpLGE9MCxvPWMubGVuZ3RoO2E8bzsrK2EpY1thXS5lPW49IW47Zm9yKHZhciB1LGwsaD1zWzBdOzspe2Zvcih2YXIgZj1oLGQ9ITA7Zi52OylpZigoZj1mLm4pPT09aClyZXR1cm47dT1mLnosaS5saW5lU3RhcnQoKTtkb3tpZihmLnY9Zi5vLnY9ITAsZi5lKXtpZihkKWZvcihhPTAsbz11Lmxlbmd0aDthPG87KythKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLm4ueCwxLGkpO2Y9Zi5ufWVsc2V7aWYoZClmb3IodT1mLnAueixhPXUubGVuZ3RoLTE7YT49MDstLWEpaS5wb2ludCgobD11W2FdKVswXSxsWzFdKTtlbHNlIHIoZi54LGYucC54LC0xLGkpO2Y9Zi5wfXU9KGY9Zi5vKS56LGQ9IWR9d2hpbGUoIWYudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBJbCh0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUsbixyPTAsaT10WzBdOysrcjxlOylpLm49bj10W3JdLG4ucD1pLGk9bjtpLm49bj10WzBdLG4ucD1pfX13bC5pbnZlcnQ9d2w7dmFyIFJsPWtjKCk7ZnVuY3Rpb24gRmwodCl7cmV0dXJuIEljKHRbMF0pPD1NYz90WzBdOkhjKHRbMF0pKigoSWModFswXSkrTWMpJU9jLU1jKX1mdW5jdGlvbiBQbCh0LGUpe3ZhciBuPUZsKGUpLHI9ZVsxXSxpPXFjKHIpLGE9W3FjKG4pLC1QYyhuKSwwXSxvPTAscz0wO1JsLnJlc2V0KCksMT09PWk/cj1OYytTYzotMT09PWkmJihyPS1OYy1TYyk7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9RmwoZikscD1mWzFdLzIrRGMseT1xYyhwKSxnPVBjKHApLG09MDttPGg7KyttLGQ9Yix5PXgsZz13LGY9dil7dmFyIHY9bFttXSxiPUZsKHYpLF89dlsxXS8yK0RjLHg9cWMoXyksdz1QYyhfKSxrPWItZCxUPWs+PTA/MTotMSxFPVQqayxDPUU+TWMsUz15Kng7aWYoUmwuYWRkKEZjKFMqVCpxYyhFKSxnKncrUypQYyhFKSkpLG8rPUM/aytUKk9jOmssQ15kPj1uXmI+PW4pe3ZhciBBPWJ1KG11KGYpLG11KHYpKTt3dShBKTt2YXIgTT1idShhLEEpO3d1KE0pO3ZhciBOPShDXms+PTA/LTE6MSkqR2MoTVsyXSk7KHI+Tnx8cj09PU4mJihBWzBdfHxBWzFdKSkmJihzKz1DXms+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPFNjJiZSbDwtMWUtNileMSZzfWZ1bmN0aW9uIGpsKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9RGwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDp5LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PW0sZi5saW5lU3RhcnQ9dixmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9eSxmLmxpbmVFbmQ9ZyxvPVAobyk7dmFyIHQ9UGwoYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCksTGwobyx6bCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiBtKHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gdigpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7bShzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoWWwpKX1yZXR1cm4gZn19ZnVuY3Rpb24gWWwodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gemwodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tTmMtU2M6TmMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLU5jLVNjOk5jLWVbMV0pfWNvbnN0IFVsPWpsKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/TWM6LU1jLGM9SWMoYS1uKTtJYyhjLU1jKTxTYz8odC5wb2ludChuLHI9KHIrbykvMj4wP05jOi1OYyksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLHIpLHQucG9pbnQoYSxyKSxlPTApOmkhPT1zJiZjPj1NYyYmKEljKG4taSk8U2MmJihuLT1pKlNjKSxJYyhhLXMpPFNjJiYoYS09cypTYykscj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG89cWModC1uKTtyZXR1cm4gSWMobyk+U2M/UmMoKHFjKGUpKihhPVBjKHIpKSpxYyhuKS1xYyhyKSooaT1QYyhlKSkqcWModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qTmMsci5wb2ludCgtTWMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoTWMsaSksci5wb2ludChNYywwKSxyLnBvaW50KE1jLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLU1jLC1pKSxyLnBvaW50KC1NYywwKSxyLnBvaW50KC1NYyxpKTtlbHNlIGlmKEljKHRbMF0tZVswXSk+U2Mpe3ZhciBhPXRbMF08ZVswXT9NYzotTWM7aT1uKmEvMixyLnBvaW50KC1hLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KGEsaSl9ZWxzZSByLnBvaW50KGVbMF0sZVsxXSl9KSxbLU1jLC1OY10pO2Z1bmN0aW9uIHFsKHQpe3ZhciBlPVBjKHQpLG49NipMYyxyPWU+MCxpPUljKGUpPlNjO2Z1bmN0aW9uIGEodCxuKXtyZXR1cm4gUGModCkqUGMobik+ZX1mdW5jdGlvbiBvKHQsbixyKXt2YXIgaT1bMSwwLDBdLGE9YnUobXUodCksbXUobikpLG89dnUoYSxhKSxzPWFbMF0sYz1vLXMqcztpZighYylyZXR1cm4hciYmdDt2YXIgdT1lKm8vYyxsPS1lKnMvYyxoPWJ1KGksYSksZj14dShpLHUpO191KGYseHUoYSxsKSk7dmFyIGQ9aCxwPXZ1KGYsZCkseT12dShkLGQpLGc9cCpwLXkqKHZ1KGYsZiktMSk7aWYoIShnPDApKXt2YXIgbT0kYyhnKSx2PXh1KGQsKC1wLW0pL3kpO2lmKF91KHYsZiksdj1ndSh2KSwhcilyZXR1cm4gdjt2YXIgYixfPXRbMF0seD1uWzBdLHc9dFsxXSxrPW5bMV07eDxfJiYoYj1fLF89eCx4PWIpO3ZhciBUPXgtXyxFPUljKFQtTWMpPFNjO2lmKCFFJiZrPHcmJihiPXcsdz1rLGs9YiksRXx8VDxTYz9FP3craz4wXnZbMV08KEljKHZbMF0tXyk8U2M/dzprKTp3PD12WzFdJiZ2WzFdPD1rOlQ+TWNeKF88PXZbMF0mJnZbMF08PXgpKXt2YXIgQz14dShkLCgtcCttKS95KTtyZXR1cm4gX3UoQyxmKSxbdixndShDKV19fX1mdW5jdGlvbiBzKGUsbil7dmFyIGk9cj90Ok1jLXQsYT0wO3JldHVybiBlPC1pP2F8PTE6ZT5pJiYoYXw9MiksbjwtaT9hfD00Om4+aSYmKGF8PTgpLGF9cmV0dXJuIGpsKGEsKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYyx1LGw7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3U9Yz0hMSxsPTF9LHBvaW50OmZ1bmN0aW9uKGgsZil7dmFyIGQscD1baCxmXSx5PWEoaCxmKSxnPXI/eT8wOnMoaCxmKTp5P3MoaCsoaDwwP01jOi1NYyksZik6MDtpZighZSYmKHU9Yz15KSYmdC5saW5lU3RhcnQoKSx5IT09YyYmKCEoZD1vKGUscCkpfHxPbChlLGQpfHxPbChwLGQpKSYmKHBbMl09MSkseSE9PWMpbD0wLHk/KHQubGluZVN0YXJ0KCksZD1vKHAsZSksdC5wb2ludChkWzBdLGRbMV0pKTooZD1vKGUscCksdC5wb2ludChkWzBdLGRbMV0sMiksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJnJeeSl7dmFyIG07ZyZufHwhKG09byhwLGUsITApKXx8KGw9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSx0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KG1bMF1bMF0sbVswXVsxXSwzKSkpfSF5fHxlJiZPbChlLHApfHx0LnBvaW50KHBbMF0scFsxXSksZT1wLGM9eSxuPWd9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGx8KHUmJmMpPDwxfX19KSwoZnVuY3Rpb24oZSxyLGksYSl7QWwoYSx0LG4saSxlLHIpfSkscj9bMCwtdF06Wy1NYyx0LU1jXSl9dmFyIEhsPTFlOSwkbD0tSGw7ZnVuY3Rpb24gV2wodCxlLG4scil7ZnVuY3Rpb24gaShpLGEpe3JldHVybiB0PD1pJiZpPD1uJiZlPD1hJiZhPD1yfWZ1bmN0aW9uIGEoaSxhLHMsdSl7dmFyIGw9MCxoPTA7aWYobnVsbD09aXx8KGw9byhpLHMpKSE9PShoPW8oYSxzKSl8fGMoaSxhKTwwXnM+MClkb3t1LnBvaW50KDA9PT1sfHwzPT09bD90Om4sbD4xP3I6ZSl9d2hpbGUoKGw9KGwrcys0KSU0KSE9PWgpO2Vsc2UgdS5wb2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIG8ocixpKXtyZXR1cm4gSWMoclswXS10KTxTYz9pPjA/MDozOkljKHJbMF0tbik8U2M/aT4wPzI6MTpJYyhyWzFdLWUpPFNjP2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGModC54LGUueCl9ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPW8odCwxKSxyPW8oZSwxKTtyZXR1cm4gbiE9PXI/bi1yOjA9PT1uP2VbMV0tdFsxXToxPT09bj90WzBdLWVbMF06Mj09PW4/dFsxXS1lWzFdOmVbMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24obyl7dmFyIGMsdSxsLGgsZixkLHAseSxnLG0sdixiPW8sXz1EbCgpLHg9e3BvaW50OncsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7eC5wb2ludD1rLHUmJnUucHVzaChsPVtdKSxtPSEwLGc9ITEscD15PU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJihrKGgsZiksZCYmZyYmXy5yZWpvaW4oKSxjLnB1c2goXy5yZXN1bHQoKSkpLHgucG9pbnQ9dyxnJiZiLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yj1fLGM9W10sdT1bXSx2PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPTAsaT11Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYSxvLHM9dVtuXSxjPTEsbD1zLmxlbmd0aCxoPXNbMF0sZj1oWzBdLGQ9aFsxXTtjPGw7KytjKWE9ZixvPWQsZj0oaD1zW2NdKVswXSxkPWhbMV0sbzw9cj9kPnImJihmLWEpKihyLW8pPihkLW8pKih0LWEpJiYrK2U6ZDw9ciYmKGYtYSkqKHItbyk8KGQtbykqKHQtYSkmJi0tZTtyZXR1cm4gZX0oKSxuPXYmJmUsaT0oYz1QKGMpKS5sZW5ndGg7KG58fGkpJiYoby5wb2x5Z29uU3RhcnQoKSxuJiYoby5saW5lU3RhcnQoKSxhKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSxpJiZMbChjLHMsZSxhLG8pLG8ucG9seWdvbkVuZCgpKSxiPW8sYz11PWw9bnVsbH19O2Z1bmN0aW9uIHcodCxlKXtpKHQsZSkmJmIucG9pbnQodCxlKX1mdW5jdGlvbiBrKGEsbyl7dmFyIHM9aShhLG8pO2lmKHUmJmwucHVzaChbYSxvXSksbSloPWEsZj1vLGQ9cyxtPSExLHMmJihiLmxpbmVTdGFydCgpLGIucG9pbnQoYSxvKSk7ZWxzZSBpZihzJiZnKWIucG9pbnQoYSxvKTtlbHNle3ZhciBjPVtwPU1hdGgubWF4KCRsLE1hdGgubWluKEhsLHApKSx5PU1hdGgubWF4KCRsLE1hdGgubWluKEhsLHkpKV0sXz1bYT1NYXRoLm1heCgkbCxNYXRoLm1pbihIbCxhKSksbz1NYXRoLm1heCgkbCxNYXRoLm1pbihIbCxvKSldOyFmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG8scz10WzBdLGM9dFsxXSx1PTAsbD0xLGg9ZVswXS1zLGY9ZVsxXS1jO2lmKG89bi1zLGh8fCEobz4wKSl7aWYoby89aCxoPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGg+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89aS1zLGh8fCEobzwwKSl7aWYoby89aCxoPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGg+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWlmKG89ci1jLGZ8fCEobz4wKSl7aWYoby89ZixmPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGY+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89YS1jLGZ8fCEobzwwKSl7aWYoby89ZixmPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGY+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfXJldHVybiB1PjAmJih0WzBdPXMrdSpoLHRbMV09Yyt1KmYpLGw8MSYmKGVbMF09cytsKmgsZVsxXT1jK2wqZiksITB9fX19fShjLF8sdCxlLG4scik/cyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pLHY9ITEpOihnfHwoYi5saW5lU3RhcnQoKSxiLnBvaW50KGNbMF0sY1sxXSkpLGIucG9pbnQoX1swXSxfWzFdKSxzfHxiLmxpbmVFbmQoKSx2PSExKX1wPWEseT1vLGc9c31yZXR1cm4geH19ZnVuY3Rpb24gVmwoKXt2YXIgdCxlLG4scj0wLGk9MCxhPTk2MCxvPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9V2wocixpLGEsbykoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStzWzBdWzBdLGk9K3NbMF1bMV0sYT0rc1sxXVswXSxvPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbcixpXSxbYSxvXV19fX12YXIgR2wsWGwsWmwsUWw9a2MoKSxLbD17c3BoZXJlOlpjLHBvaW50OlpjLGxpbmVTdGFydDpmdW5jdGlvbigpe0tsLnBvaW50PXRoLEtsLmxpbmVFbmQ9Smx9LGxpbmVFbmQ6WmMscG9seWdvblN0YXJ0OlpjLHBvbHlnb25FbmQ6WmN9O2Z1bmN0aW9uIEpsKCl7S2wucG9pbnQ9S2wubGluZUVuZD1aY31mdW5jdGlvbiB0aCh0LGUpe0dsPXQqPUxjLFhsPXFjKGUqPUxjKSxabD1QYyhlKSxLbC5wb2ludD1laH1mdW5jdGlvbiBlaCh0LGUpe3QqPUxjO3ZhciBuPXFjKGUqPUxjKSxyPVBjKGUpLGk9SWModC1HbCksYT1QYyhpKSxvPXIqcWMoaSkscz1abCpuLVhsKnIqYSxjPVhsKm4rWmwqciphO1FsLmFkZChGYygkYyhvKm8rcypzKSxjKSksR2w9dCxYbD1uLFpsPXJ9ZnVuY3Rpb24gbmgodCl7cmV0dXJuIFFsLnJlc2V0KCksbnUodCxLbCksK1FsfXZhciByaD1bbnVsbCxudWxsXSxpaD17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6cmh9O2Z1bmN0aW9uIGFoKHQsZSl7cmV0dXJuIHJoWzBdPXQscmhbMV09ZSxuaChpaCl9dmFyIG9oPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNoKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZmVhdHVyZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihjaChuW3JdLmdlb21ldHJ5LGUpKXJldHVybiEwO3JldHVybiExfX0sc2g9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LGUpe3JldHVybiB1aCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZih1aChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxoKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYobGgobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe3JldHVybiBoaCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKGhoKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihjaChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gY2godCxlKXtyZXR1cm4hKCF0fHwhc2guaGFzT3duUHJvcGVydHkodC50eXBlKSkmJnNoW3QudHlwZV0odCxlKX1mdW5jdGlvbiB1aCh0LGUpe3JldHVybiAwPT09YWgodCxlKX1mdW5jdGlvbiBsaCh0LGUpe2Zvcih2YXIgbixyLGksYT0wLG89dC5sZW5ndGg7YTxvO2ErKyl7aWYoMD09PShyPWFoKHRbYV0sZSkpKXJldHVybiEwO2lmKGE+MCYmKGk9YWgodFthXSx0W2EtMV0pKT4wJiZuPD1pJiZyPD1pJiYobityLWkpKigxLU1hdGgucG93KChuLXIpL2ksMikpPEFjKmkpcmV0dXJuITA7bj1yfXJldHVybiExfWZ1bmN0aW9uIGhoKHQsZSl7cmV0dXJuISFQbCh0Lm1hcChmaCksZGgoZSkpfWZ1bmN0aW9uIGZoKHQpe3JldHVybih0PXQubWFwKGRoKSkucG9wKCksdH1mdW5jdGlvbiBkaCh0KXtyZXR1cm5bdFswXSpMYyx0WzFdKkxjXX1mdW5jdGlvbiBwaCh0LGUpe3JldHVybih0JiZvaC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP29oW3QudHlwZV06Y2gpKHQsZSl9ZnVuY3Rpb24geWgodCxlLG4pe3ZhciByPWsodCxlLVNjLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pKX19ZnVuY3Rpb24gZ2godCxlLG4pe3ZhciByPWsodCxlLVNjLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gbWgoKXt2YXIgdCxlLG4scixpLGEsbyxzLGMsdSxsLGgsZj0xMCxkPWYscD05MCx5PTM2MCxnPTIuNTtmdW5jdGlvbiBtKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6digpfX1mdW5jdGlvbiB2KCl7cmV0dXJuIGsoamMoci9wKSpwLG4scCkubWFwKGwpLmNvbmNhdChrKGpjKHMveSkqeSxvLHkpLm1hcChoKSkuY29uY2F0KGsoamMoZS9mKSpmLHQsZikuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gSWModCVwKT5TY30pKS5tYXAoYykpLmNvbmNhdChrKGpjKGEvZCkqZCxpLGQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIEljKHQleSk+U2N9KSkubWFwKHUpKX1yZXR1cm4gbS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB2KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LG0ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbChyKS5jb25jYXQoaChvKS5zbGljZSgxKSxsKG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sbS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTptLmV4dGVudE1pbm9yKCl9LG0uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sbj0rdFsxXVswXSxzPSt0WzBdWzFdLG89K3RbMV1bMV0scj5uJiYodD1yLHI9bixuPXQpLHM+byYmKHQ9cyxzPW8sbz10KSxtLnByZWNpc2lvbihnKSk6W1tyLHNdLFtuLG9dXX0sbS5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rblswXVswXSx0PStuWzFdWzBdLGE9K25bMF1bMV0saT0rblsxXVsxXSxlPnQmJihuPWUsZT10LHQ9biksYT5pJiYobj1hLGE9aSxpPW4pLG0ucHJlY2lzaW9uKGcpKTpbW2UsYV0sW3QsaV1dfSxtLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOm0uc3RlcE1pbm9yKCl9LG0uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLHk9K3RbMV0sbSk6W3AseV19LG0uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sbSk6W2YsZF19LG0ucHJlY2lzaW9uPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStmLGM9eWgoYSxpLDkwKSx1PWdoKGUsdCxnKSxsPXloKHMsbyw5MCksaD1naChyLG4sZyksbSk6Z30sbS5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfWZ1bmN0aW9uIHZoKCl7cmV0dXJuIG1oKCkoKX1mdW5jdGlvbiBiaCh0LGUpe3ZhciBuPXRbMF0qTGMscj10WzFdKkxjLGk9ZVswXSpMYyxhPWVbMV0qTGMsbz1QYyhyKSxzPXFjKHIpLGM9UGMoYSksdT1xYyhhKSxsPW8qUGMobiksaD1vKnFjKG4pLGY9YypQYyhpKSxkPWMqcWMoaSkscD0yKkdjKCRjKFhjKGEtcikrbypjKlhjKGktbikpKSx5PXFjKHApLGc9cD9mdW5jdGlvbih0KXt2YXIgZT1xYyh0Kj1wKS95LG49cWMocC10KS95LHI9bipsK2UqZixpPW4qaCtlKmQsYT1uKnMrZSp1O3JldHVybltGYyhpLHIpKkJjLEZjKGEsJGMocipyK2kqaSkpKkJjXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipCYyxyKkJjXX07cmV0dXJuIGcuZGlzdGFuY2U9cCxnfWZ1bmN0aW9uIF9oKHQpe3JldHVybiB0fXZhciB4aCx3aCxraCxUaCxFaD1rYygpLENoPWtjKCksU2g9e3BvaW50OlpjLGxpbmVTdGFydDpaYyxsaW5lRW5kOlpjLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1NoLmxpbmVTdGFydD1BaCxTaC5saW5lRW5kPURofSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7U2gubGluZVN0YXJ0PVNoLmxpbmVFbmQ9U2gucG9pbnQ9WmMsRWguYWRkKEljKENoKSksQ2gucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9RWgvMjtyZXR1cm4gRWgucmVzZXQoKSx0fX07ZnVuY3Rpb24gQWgoKXtTaC5wb2ludD1NaH1mdW5jdGlvbiBNaCh0LGUpe1NoLnBvaW50PU5oLHhoPWtoPXQsd2g9VGg9ZX1mdW5jdGlvbiBOaCh0LGUpe0NoLmFkZChUaCp0LWtoKmUpLGtoPXQsVGg9ZX1mdW5jdGlvbiBEaCgpe05oKHhoLHdoKX1jb25zdCBPaD1TaDt2YXIgQmg9MS8wLExoPUJoLEloPS1CaCxSaD1JaCxGaD17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PEJoJiYoQmg9dCksdD5JaCYmKEloPXQpLGU8TGgmJihMaD1lKSxlPlJoJiYoUmg9ZSl9LGxpbmVTdGFydDpaYyxsaW5lRW5kOlpjLHBvbHlnb25TdGFydDpaYyxwb2x5Z29uRW5kOlpjLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbQmgsTGhdLFtJaCxSaF1dO3JldHVybiBJaD1SaD0tKExoPUJoPTEvMCksdH19O2NvbnN0IFBoPUZoO3ZhciBqaCxZaCx6aCxVaCxxaD0wLEhoPTAsJGg9MCxXaD0wLFZoPTAsR2g9MCxYaD0wLFpoPTAsUWg9MCxLaD17cG9pbnQ6SmgsbGluZVN0YXJ0OnRmLGxpbmVFbmQ6cmYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S2gubGluZVN0YXJ0PWFmLEtoLmxpbmVFbmQ9b2Z9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtLaC5wb2ludD1KaCxLaC5saW5lU3RhcnQ9dGYsS2gubGluZUVuZD1yZn0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9UWg/W1hoL1FoLFpoL1FoXTpHaD9bV2gvR2gsVmgvR2hdOiRoP1txaC8kaCxIaC8kaF06W05hTixOYU5dO3JldHVybiBxaD1IaD0kaD1XaD1WaD1HaD1YaD1aaD1RaD0wLHR9fTtmdW5jdGlvbiBKaCh0LGUpe3FoKz10LEhoKz1lLCsrJGh9ZnVuY3Rpb24gdGYoKXtLaC5wb2ludD1lZn1mdW5jdGlvbiBlZih0LGUpe0toLnBvaW50PW5mLEpoKHpoPXQsVWg9ZSl9ZnVuY3Rpb24gbmYodCxlKXt2YXIgbj10LXpoLHI9ZS1VaCxpPSRjKG4qbityKnIpO1doKz1pKih6aCt0KS8yLFZoKz1pKihVaCtlKS8yLEdoKz1pLEpoKHpoPXQsVWg9ZSl9ZnVuY3Rpb24gcmYoKXtLaC5wb2ludD1KaH1mdW5jdGlvbiBhZigpe0toLnBvaW50PXNmfWZ1bmN0aW9uIG9mKCl7Y2YoamgsWWgpfWZ1bmN0aW9uIHNmKHQsZSl7S2gucG9pbnQ9Y2YsSmgoamg9emg9dCxZaD1VaD1lKX1mdW5jdGlvbiBjZih0LGUpe3ZhciBuPXQtemgscj1lLVVoLGk9JGMobipuK3Iqcik7V2grPWkqKHpoK3QpLzIsVmgrPWkqKFVoK2UpLzIsR2grPWksWGgrPShpPVVoKnQtemgqZSkqKHpoK3QpLFpoKz1pKihVaCtlKSxRaCs9MyppLEpoKHpoPXQsVWg9ZSl9Y29uc3QgdWY9S2g7ZnVuY3Rpb24gbGYodCl7dGhpcy5fY29udGV4dD10fWxmLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLGUpLHRoaXMuX2NvbnRleHQuYXJjKHQsZSx0aGlzLl9yYWRpdXMsMCxPYyl9fSxyZXN1bHQ6WmN9O3ZhciBoZixmZixkZixwZix5ZixnZj1rYygpLG1mPXtwb2ludDpaYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXttZi5wb2ludD12Zn0sbGluZUVuZDpmdW5jdGlvbigpe2hmJiZiZihmZixkZiksbWYucG9pbnQ9WmN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2hmPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7aGY9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K2dmO3JldHVybiBnZi5yZXNldCgpLHR9fTtmdW5jdGlvbiB2Zih0LGUpe21mLnBvaW50PWJmLGZmPXBmPXQsZGY9eWY9ZX1mdW5jdGlvbiBiZih0LGUpe3BmLT10LHlmLT1lLGdmLmFkZCgkYyhwZipwZit5Zip5ZikpLHBmPXQseWY9ZX1jb25zdCBfZj1tZjtmdW5jdGlvbiB4Zigpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB3Zih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBrZih0LGUpe3ZhciBuLHIsaT00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbnUodCxuKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4oT2gpKSxPaC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4oX2YpKSxfZi5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51KHQsbihQaCkpLFBoLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4odWYpKSx1Zi5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxfaCk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhlPW51bGwsbmV3IHhmKTpuZXcgbGYoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX1mdW5jdGlvbiBUZih0KXtyZXR1cm57c3RyZWFtOkVmKHQpfX1mdW5jdGlvbiBFZih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IENmO2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBDZigpe31mdW5jdGlvbiBTZih0LGUsbil7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLG51KG4sdC5zdHJlYW0oUGgpKSxlKFBoLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiBBZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPWVbMV1bMF0tZVswXVswXSxpPWVbMV1bMV0tZVswXVsxXSxhPU1hdGgubWluKHIvKG5bMV1bMF0tblswXVswXSksaS8oblsxXVsxXS1uWzBdWzFdKSksbz0rZVswXVswXSsoci1hKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKGktYSooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW28sc10pfSksbil9ZnVuY3Rpb24gTWYodCxlLG4pe3JldHVybiBBZih0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBOZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVswXS1uWzBdWzBdKSxhPShyLWkqKG5bMV1bMF0rblswXVswXSkpLzIsbz0taSpuWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1mdW5jdGlvbiBEZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVsxXS1uWzBdWzFdKSxhPS1pKm5bMF1bMF0sbz0oci1pKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX14Zi5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6d2YoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT13Zih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LENmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q2YscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIE9mPVBjKDMwKkxjKTtmdW5jdGlvbiBCZih0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihyLGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGcpe3ZhciBtPXUtcix2PWwtaSxiPW0qbSt2KnY7aWYoYj40KmUmJnktLSl7dmFyIF89bytmLHg9cytkLHc9YytwLGs9JGMoXypfK3gqeCt3KncpLFQ9R2Mody89ayksRT1JYyhJYyh3KS0xKTxTY3x8SWMoYS1oKTxTYz8oYStoKS8yOkZjKHgsXyksQz10KEUsVCksUz1DWzBdLEE9Q1sxXSxNPVMtcixOPUEtaSxEPXYqTS1tKk47KEQqRC9iPmV8fEljKChtKk0rdipOKS9iLS41KT4uM3x8bypmK3MqZCtjKnA8T2YpJiYobihyLGksYSxvLHMsYyxTLEEsRSxfLz1rLHgvPWssdyx5LGcpLGcucG9pbnQoUyxBKSxuKFMsQSxFLF8seCx3LHUsbCxoLGYsZCxwLHksZykpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxhLG8scyxjLHUsbCxoLGYsZCxwLHk9e3BvaW50OmcsbGluZVN0YXJ0Om0sbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCkseS5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHkubGluZVN0YXJ0PW19fTtmdW5jdGlvbiBnKG4scil7bj10KG4sciksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIG0oKXtsPU5hTix5LnBvaW50PXYsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB2KHIsaSl7dmFyIGE9bXUoW3IsaV0pLG89dChyLGkpO24obCxoLHUsZixkLHAsbD1vWzBdLGg9b1sxXSx1PXIsZj1hWzBdLGQ9YVsxXSxwPWFbMl0sMTYsZSksZS5wb2ludChsLGgpfWZ1bmN0aW9uIGIoKXt5LnBvaW50PWcsZS5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe20oKSx5LnBvaW50PXgseS5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LGUpe3Yocj10LGUpLGk9bCxhPWgsbz1mLHM9ZCxjPXAseS5wb2ludD12fWZ1bmN0aW9uIHcoKXtuKGwsaCx1LGYsZCxwLGksYSxyLG8scyxjLDE2LGUpLHkubGluZUVuZD1iLGIoKX1yZXR1cm4geX19KHQsZSk6ZnVuY3Rpb24odCl7cmV0dXJuIEVmKHtwb2ludDpmdW5jdGlvbihlLG4pe2U9dChlLG4pLHRoaXMuc3RyZWFtLnBvaW50KGVbMF0sZVsxXSl9fSl9KHQpfXZhciBMZj1FZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KkxjLGUqTGMpfX0pO2Z1bmN0aW9uIElmKHQsZSxuLHIsaSl7ZnVuY3Rpb24gYShhLG8pe3JldHVybltlK3QqKGEqPXIpLG4tdCoobyo9aSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihhLG8pe3JldHVyblsoYS1lKS90KnIsKG4tbykvdCppXX0sYX1mdW5jdGlvbiBSZih0LGUsbixyLGksYSl7dmFyIG89UGMoYSkscz1xYyhhKSxjPW8qdCx1PXMqdCxsPW8vdCxoPXMvdCxmPShzKm4tbyplKS90LGQ9KHMqZStvKm4pL3Q7ZnVuY3Rpb24gcCh0LGEpe3JldHVybltjKih0Kj1yKS11KihhKj1pKStlLG4tdSp0LWMqYV19cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IqKGwqdC1oKmUrZiksaSooZC1oKnQtbCplKV19LHB9ZnVuY3Rpb24gRmYodCl7cmV0dXJuIFBmKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gUGYodCl7dmFyIGUsbixyLGksYSxvLHMsYyx1LGwsaD0xNTAsZj00ODAsZD0yNTAscD0wLHk9MCxnPTAsbT0wLHY9MCxiPTAsXz0xLHg9MSx3PW51bGwsaz1VbCxUPW51bGwsRT1faCxDPS41O2Z1bmN0aW9uIFModCl7cmV0dXJuIGModFswXSpMYyx0WzFdKkxjKX1mdW5jdGlvbiBBKHQpe3JldHVybih0PWMuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSpCYyx0WzFdKkJjXX1mdW5jdGlvbiBNKCl7dmFyIHQ9UmYoaCwwLDAsXyx4LGIpLmFwcGx5KG51bGwsZShwLHkpKSxyPShiP1JmOklmKShoLGYtdFswXSxkLXRbMV0sXyx4LGIpO3JldHVybiBuPWtsKGcsbSx2KSxzPXhsKGUsciksYz14bChuLHMpLG89QmYocyxDKSxOKCl9ZnVuY3Rpb24gTigpe3JldHVybiB1PWw9bnVsbCxTfXJldHVybiBTLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PUxmKGZ1bmN0aW9uKHQpe3JldHVybiBFZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKGsobyhFKGw9dCkpKSkpfSxTLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9dCx3PXZvaWQgMCxOKCkpOmt9LFMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxUPXI9aT1hPW51bGwsTigpKTpFfSxTLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0rdD9xbCh3PXQqTGMpOih3PW51bGwsVWwpLE4oKSk6dypCY30sUy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFQ9cj1pPWE9bnVsbCxfaCk6V2woVD0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTigpKTpudWxsPT1UP251bGw6W1tULHJdLFtpLGFdXX0sUy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxNKCkpOmh9LFMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sTSgpKTpbZixkXX0sUy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqTGMseT10WzFdJTM2MCpMYyxNKCkpOltwKkJjLHkqQmNdfSxTLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpMYyxtPXRbMV0lMzYwKkxjLHY9dC5sZW5ndGg+Mj90WzJdJTM2MCpMYzowLE0oKSk6W2cqQmMsbSpCYyx2KkJjXX0sUy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpMYyxNKCkpOmIqQmN9LFMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dD8tMToxLE0oKSk6XzwwfSxTLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PXQ/LTE6MSxNKCkpOng8MH0sUy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89QmYocyxDPXQqdCksTigpKTokYyhDKX0sUy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQWYoUyx0LGUpfSxTLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWYoUyx0LGUpfSxTLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5mKFMsdCxlKX0sUy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRGYoUyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFMuaW52ZXJ0PWUuaW52ZXJ0JiZBLE0oKX19ZnVuY3Rpb24gamYodCl7dmFyIGU9MCxuPU1jLzMscj1QZih0KSxpPXIoZSxuKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihlPXRbMF0qTGMsbj10WzFdKkxjKTpbZSpCYyxuKkJjXX0saX1mdW5jdGlvbiBZZih0LGUpe3ZhciBuPXFjKHQpLHI9KG4rcWMoZSkpLzI7aWYoSWMocik8U2MpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPVBjKHQpO2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLHFjKG4pL2VdfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsR2MobiplKV19LG59KHQpO3ZhciBpPTErbiooMipyLW4pLGE9JGMoaSkvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49JGMoaS0yKnIqcWMoZSkpL3I7cmV0dXJuW24qcWModCo9ciksYS1uKlBjKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWUsbz1GYyh0LEljKG4pKSpIYyhuKTtyZXR1cm4gbipyPDAmJihvLT1NYypIYyh0KSpIYyhuKSksW28vcixHYygoaS0odCp0K24qbikqcipyKS8oMipyKSldfSxvfWZ1bmN0aW9uIHpmKCl7cmV0dXJuIGpmKFlmKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVmKCl7cmV0dXJuIHpmKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gcWYoKXt2YXIgdCxlLG4scixpLGEsbz1VZigpLHM9emYoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGM9emYoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksdT17cG9pbnQ6ZnVuY3Rpb24odCxlKXthPVt0LGVdfX07ZnVuY3Rpb24gbCh0KXt2YXIgZT10WzBdLG89dFsxXTtyZXR1cm4gYT1udWxsLG4ucG9pbnQoZSxvKSxhfHwoci5wb2ludChlLG8pLGEpfHwoaS5wb2ludChlLG8pLGEpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsbH1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9by5zY2FsZSgpLG49by50cmFuc2xhdGUoKSxyPSh0WzBdLW5bMF0pL2UsaT0odFsxXS1uWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmcj49LS40MjUmJnI8LS4yMTQ/czppPj0uMTY2JiZpPC4yMzQmJnI+PS0uMjE0JiZyPC0uMTE1P2M6bykuaW52ZXJ0KHQpfSxsLnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDoocj1bby5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxjLnN0cmVhbShuKV0saT1yLmxlbmd0aCx0PXtwb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMTsrK248aTspcltuXS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uRW5kKCl9fSk7dmFyIHIsaX0sbC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMucHJlY2lzaW9uKHQpLGgoKSk6by5wcmVjaXNpb24oKX0sbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5zY2FsZSh0KSxzLnNjYWxlKC4zNSp0KSxjLnNjYWxlKHQpLGwudHJhbnNsYXRlKG8udHJhbnNsYXRlKCkpKTpvLnNjYWxlKCl9LGwudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvLnRyYW5zbGF0ZSgpO3ZhciBlPW8uc2NhbGUoKSxhPSt0WzBdLGw9K3RbMV07cmV0dXJuIG49by50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW2EtLjQ1NSplLGwtLjIzOCplXSxbYSsuNDU1KmUsbCsuMjM4KmVdXSkuc3RyZWFtKHUpLHI9cy50cmFuc2xhdGUoW2EtLjMwNyplLGwrLjIwMSplXSkuY2xpcEV4dGVudChbW2EtLjQyNSplK1NjLGwrLjEyKmUrU2NdLFthLS4yMTQqZS1TYyxsKy4yMzQqZS1TY11dKS5zdHJlYW0odSksaT1jLnRyYW5zbGF0ZShbYS0uMjA1KmUsbCsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbYS0uMjE0KmUrU2MsbCsuMTY2KmUrU2NdLFthLS4xMTUqZS1TYyxsKy4yMzQqZS1TY11dKS5zdHJlYW0odSksaCgpfSxsLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBBZihsLHQsZSl9LGwuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBNZihsLHQsZSl9LGwuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTmYobCx0LGUpfSxsLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBEZihsLHQsZSl9LGwuc2NhbGUoMTA3MCl9ZnVuY3Rpb24gSGYodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9UGMoZSksaT1QYyhuKSxhPXQocippKTtyZXR1cm5bYSppKnFjKGUpLGEqcWMobildfX1mdW5jdGlvbiAkZih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj0kYyhlKmUrbipuKSxpPXQociksYT1xYyhpKSxvPVBjKGkpO3JldHVybltGYyhlKmEscipvKSxHYyhyJiZuKmEvcildfX12YXIgV2Y9SGYoKGZ1bmN0aW9uKHQpe3JldHVybiAkYygyLygxK3QpKX0pKTtmdW5jdGlvbiBWZigpe3JldHVybiBGZihXZikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9V2YuaW52ZXJ0PSRmKChmdW5jdGlvbih0KXtyZXR1cm4gMipHYyh0LzIpfSkpO3ZhciBHZj1IZigoZnVuY3Rpb24odCl7cmV0dXJuKHQ9VmModCkpJiZ0L3FjKHQpfSkpO2Z1bmN0aW9uIFhmKCl7cmV0dXJuIEZmKEdmKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9ZnVuY3Rpb24gWmYodCxlKXtyZXR1cm5bdCx6YyhXYygoTmMrZSkvMikpXX1mdW5jdGlvbiBRZigpe3JldHVybiBLZihaZikuc2NhbGUoOTYxL09jKX1mdW5jdGlvbiBLZih0KXt2YXIgZSxuLHIsaT1GZih0KSxhPWkuY2VudGVyLG89aS5zY2FsZSxzPWkudHJhbnNsYXRlLGM9aS5jbGlwRXh0ZW50LHU9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIGE9TWMqbygpLHM9aShTbChpLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT11P1tbc1swXS1hLHNbMV0tYV0sW3NbMF0rYSxzWzFdK2FdXTp0PT09WmY/W1tNYXRoLm1heChzWzBdLWEsdSksZV0sW01hdGgubWluKHNbMF0rYSxuKSxyXV06W1t1LE1hdGgubWF4KHNbMV0tYSxlKV0sW24sTWF0aC5taW4oc1sxXSthLHIpXV0pfXJldHVybiBpLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLGwoKSk6bygpfSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSxsKCkpOnMoKX0saS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksbCgpKTphKCl9LGkuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD91PWU9bj1yPW51bGw6KHU9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLHI9K3RbMV1bMV0pLGwoKSk6bnVsbD09dT9udWxsOltbdSxlXSxbbixyXV19LGwoKX1mdW5jdGlvbiBKZih0KXtyZXR1cm4gV2MoKE5jK3QpLzIpfWZ1bmN0aW9uIHRkKHQsZSl7dmFyIG49UGModCkscj10PT09ZT9xYyh0KTp6YyhuL1BjKGUpKS96YyhKZihlKS9KZih0KSksaT1uKlVjKEpmKHQpLHIpL3I7aWYoIXIpcmV0dXJuIFpmO2Z1bmN0aW9uIGEodCxlKXtpPjA/ZTwtTmMrU2MmJihlPS1OYytTYyk6ZT5OYy1TYyYmKGU9TmMtU2MpO3ZhciBuPWkvVWMoSmYoZSkscik7cmV0dXJuW24qcWMocip0KSxpLW4qUGMocip0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49aS1lLGE9SGMocikqJGModCp0K24qbiksbz1GYyh0LEljKG4pKSpIYyhuKTtyZXR1cm4gbipyPDAmJihvLT1NYypIYyh0KSpIYyhuKSksW28vciwyKlJjKFVjKGkvYSwxL3IpKS1OY119LGF9ZnVuY3Rpb24gZWQoKXtyZXR1cm4gamYodGQpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9ZnVuY3Rpb24gbmQodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiByZCgpe3JldHVybiBGZihuZCkuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBpZCh0LGUpe3ZhciBuPVBjKHQpLHI9dD09PWU/cWModCk6KG4tUGMoZSkpLyhlLXQpLGk9bi9yK3Q7aWYoSWMocik8U2MpcmV0dXJuIG5kO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qcWMoYSksaS1uKlBjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWUsYT1GYyh0LEljKG4pKSpIYyhuKTtyZXR1cm4gbipyPDAmJihhLT1NYypIYyh0KSpIYyhuKSksW2EvcixpLUhjKHIpKiRjKHQqdCtuKm4pXX0sYX1mdW5jdGlvbiBhZCgpe3JldHVybiBqZihpZCkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX1HZi5pbnZlcnQ9JGYoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLFpmLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqUmMoWWMoZSkpLU5jXX0sbmQuaW52ZXJ0PW5kO3ZhciBvZD0xLjM0MDI2NCxzZD0tLjA4MTEwNixjZD04OTNlLTYsdWQ9LjAwMzc5NixsZD0kYygzKS8yO2Z1bmN0aW9uIGhkKHQsZSl7dmFyIG49R2MobGQqcWMoZSkpLHI9bipuLGk9cipyKnI7cmV0dXJuW3QqUGMobikvKGxkKihvZCszKnNkKnIraSooNypjZCs5KnVkKnIpKSksbioob2Qrc2QqcitpKihjZCt1ZCpyKSldfWZ1bmN0aW9uIGZkKCl7cmV0dXJuIEZmKGhkKS5zY2FsZSgxNzcuMTU4KX1mdW5jdGlvbiBkZCh0LGUpe3ZhciBuPVBjKGUpLHI9UGModCkqbjtyZXR1cm5bbipxYyh0KS9yLHFjKGUpL3JdfWZ1bmN0aW9uIHBkKCl7cmV0dXJuIEZmKGRkKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfWZ1bmN0aW9uIHlkKCl7dmFyIHQsZSxuLHIsaSxhLG8scz0xLGM9MCx1PTAsbD0xLGg9MSxmPTAsZD1udWxsLHA9MSx5PTEsZz1FZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1iKFt0LGVdKTt0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pLG09X2g7ZnVuY3Rpb24gdigpe3JldHVybiBwPXMqbCx5PXMqaCxhPW89bnVsbCxifWZ1bmN0aW9uIGIobil7dmFyIHI9blswXSpwLGk9blsxXSp5O2lmKGYpe3ZhciBhPWkqdC1yKmU7cj1yKnQraSplLGk9YX1yZXR1cm5bcitjLGkrdV19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciByPW5bMF0tYyxpPW5bMV0tdTtpZihmKXt2YXIgYT1pKnQrciplO3I9cip0LWkqZSxpPWF9cmV0dXJuW3IvcCxpL3ldfSxiLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYSYmbz09PXQ/YTphPWcobShvPXQpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10LGQ9bj1yPWk9bnVsbCx2KCkpOm19LGIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhkPW49cj1pPW51bGwsX2gpOldsKGQ9K3RbMF1bMF0sbj0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHYoKSk6bnVsbD09ZD9udWxsOltbZCxuXSxbcixpXV19LGIuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdigpKTpzfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdFswXSx1PSt0WzFdLHYoKSk6W2MsdV19LGIuYW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cWMoZj1uJTM2MCpMYyksdD1QYyhmKSx2KCkpOmYqQmN9LGIucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dD8tMToxLHYoKSk6bDwwfSxiLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQ/LTE6MSx2KCkpOmg8MH0sYi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQWYoYix0LGUpfSxiLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWYoYix0LGUpfSxiLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5mKGIsdCxlKX0sYi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRGYoYix0LGUpfSxifWZ1bmN0aW9uIGdkKHQsZSl7dmFyIG49ZSplLHI9bipuO3JldHVyblt0KiguODcwNy0uMTMxOTc5Km4rcioociooLjAwMzk3MSpuLS4wMDE1MjkqciktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K24qKC4wMTUwODUrciooLjAyODg3NCpuLS4wNDQ0NzUtLjAwNTkxNipyKSkpXX1mdW5jdGlvbiBtZCgpe3JldHVybiBGZihnZCkuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gdmQodCxlKXtyZXR1cm5bUGMoZSkqcWModCkscWMoZSldfWZ1bmN0aW9uIGJkKCl7cmV0dXJuIEZmKHZkKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwLjAwMDAwMSl9ZnVuY3Rpb24gX2QodCxlKXt2YXIgbj1QYyhlKSxyPTErUGModCkqbjtyZXR1cm5bbipxYyh0KS9yLHFjKGUpL3JdfWZ1bmN0aW9uIHhkKCl7cmV0dXJuIEZmKF9kKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIHdkKHQsZSl7cmV0dXJuW3pjKFdjKChOYytlKS8yKSksLXRdfWZ1bmN0aW9uIGtkKCl7dmFyIHQ9S2Yod2QpLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfWZ1bmN0aW9uIFRkKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIEVkKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIENkKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBTZCgpe3ZhciB0PVRkLGU9MSxuPTEscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhLG89MDtpLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKEVkLDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UoQ2QsMCl9KG4pKTooZS54PWE/bys9dChlLGEpOjAsZS55PTAsYT1lKX0pKTt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KGkpLGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lW2UubGVuZ3RoLTFdO3JldHVybiB0fShpKSx1PXMueC10KHMsYykvMixsPWMueCt0KGMscykvMjtyZXR1cm4gaS5lYWNoQWZ0ZXIocj9mdW5jdGlvbih0KXt0Lng9KHQueC1pLngpKmUsdC55PShpLnktdC55KSpufTpmdW5jdGlvbih0KXt0Lng9KHQueC11KS8obC11KSplLHQueT0oMS0oaS55P3QueS9pLnk6MSkpKm59KX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX1mdW5jdGlvbiBBZCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIE1kKHQsZSl7dmFyIG4scixpLGEsbyxzPW5ldyBCZCh0KSxjPSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSx1PVtzXTtmb3IobnVsbD09ZSYmKGU9TmQpO249dS5wb3AoKTspaWYoYyYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKG89aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvKSxhPW8tMTthPj0wOy0tYSl1LnB1c2gocj1uLmNoaWxkcmVuW2FdPW5ldyBCZChpW2FdKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKE9kKX1mdW5jdGlvbiBOZCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBEZCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gT2QodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBCZCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1oZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scj1lLGk9cipyLGE9aSppKmksbz0wO288MTImJihhPShpPShyLT1uPShyKihvZCtzZCppK2EqKGNkK3VkKmkpKS1lKS8ob2QrMypzZCppK2EqKDcqY2QrOSp1ZCppKSkpKnIpKmkqaSwhKEljKG4pPEFjKSk7KytvKTtyZXR1cm5bbGQqdCoob2QrMypzZCppK2EqKDcqY2QrOSp1ZCppKSkvUGMociksR2MocWMocikvbGQpXX0sZGQuaW52ZXJ0PSRmKFJjKSxnZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbixyPWUsaT0yNTtkb3t2YXIgYT1yKnIsbz1hKmE7ci09bj0ociooMS4wMDcyMjYrYSooLjAxNTA4NStvKiguMDI4ODc0KmEtLjA0NDQ3NS0uMDA1OTE2Km8pKSktZSkvKDEuMDA3MjI2K2EqKC4wNDUyNTUrbyooLjI1OTg2NiphLS4zMTEzMjUtLjAwNTkxNioxMSpvKSkpfXdoaWxlKEljKG4pPlNjJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfSx2ZC5pbnZlcnQ9JGYoR2MpLF9kLmludmVydD0kZigoZnVuY3Rpb24odCl7cmV0dXJuIDIqUmModCl9KSksd2QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqUmMoWWModCkpLU5jXX0sQmQucHJvdG90eXBlPU1kLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QmQsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoQWQpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxuPWEuY2hpbGRyZW4pZm9yKHI9MCxpPW4ubGVuZ3RoO3I8aTsrK3Ipby5wdXNoKG5bcl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKWEucHVzaChlW25dKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXRoaXMsaT1bcl07cj1pLnBvcCgpOylpZih0KHIpLGU9ci5jaGlsZHJlbilmb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWkucHVzaChlW25dKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPSt0KGUuZGF0YSl8fDAscj1lLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyluKz1yW2ldLnZhbHVlO2UudmFsdWU9bn0pKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciBuPXQuYW5jZXN0b3JzKCkscj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1uLnBvcCgpLGU9ci5wb3AoKTt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsci5wdXNoKGUpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gTWQodGhpcykuZWFjaEJlZm9yZShEZCl9fTt2YXIgTGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIElkKHQpe2Zvcih2YXIgZSxuLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dC5sZW5ndGg7cjspbj1NYXRoLnJhbmRvbSgpKnItLXwwLGU9dFtyXSx0W3JdPXRbbl0sdFtuXT1lO3JldHVybiB0fShMZC5jYWxsKHQpKSkubGVuZ3RoLGE9W107cjxpOyllPXRbcl0sbiYmUGQobixlKT8rK3I6KG49WWQoYT1SZChhLGUpKSxyPTApO3JldHVybiBufWZ1bmN0aW9uIFJkKHQsZSl7dmFyIG4scjtpZihqZChlLHQpKXJldHVybltlXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKWlmKEZkKGUsdFtuXSkmJmpkKHpkKHRbbl0sZSksdCkpcmV0dXJuW3Rbbl0sZV07Zm9yKG49MDtuPHQubGVuZ3RoLTE7KytuKWZvcihyPW4rMTtyPHQubGVuZ3RoOysrcilpZihGZCh6ZCh0W25dLHRbcl0pLGUpJiZGZCh6ZCh0W25dLGUpLHRbcl0pJiZGZCh6ZCh0W3JdLGUpLHRbbl0pJiZqZChVZCh0W25dLHRbcl0sZSksdCkpcmV0dXJuW3Rbbl0sdFtyXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gRmQodCxlKXt2YXIgbj10LnItZS5yLHI9ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIG48MHx8bipuPHIqcitpKml9ZnVuY3Rpb24gUGQodCxlKXt2YXIgbj10LnItZS5yKzFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiBqZCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKWlmKCFQZCh0LGVbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFlkKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm57eDp0LngseTp0Lnkscjp0LnJ9fSh0WzBdKTtjYXNlIDI6cmV0dXJuIHpkKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBVZCh0WzBdLHRbMV0sdFsyXSl9fWZ1bmN0aW9uIHpkKHQsZSl7dmFyIG49dC54LHI9dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGM9YS1uLHU9by1yLGw9cy1pLGg9TWF0aC5zcXJ0KGMqYyt1KnUpO3JldHVybnt4OihuK2ErYy9oKmwpLzIseToocitvK3UvaCpsKS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBVZCh0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGM9ZS5yLHU9bi54LGw9bi55LGg9bi5yLGY9ci1vLGQ9ci11LHA9aS1zLHk9aS1sLGc9Yy1hLG09aC1hLHY9cipyK2kqaS1hKmEsYj12LW8qby1zKnMrYypjLF89di11KnUtbCpsK2gqaCx4PWQqcC1mKnksdz0ocCpfLXkqYikvKDIqeCktcixrPSh5KmctcCptKS94LFQ9KGQqYi1mKl8pLygyKngpLWksRT0oZiptLWQqZykveCxDPWsqaytFKkUtMSxTPTIqKGErdyprK1QqRSksQT13KncrVCpULWEqYSxNPS0oQz8oUytNYXRoLnNxcnQoUypTLTQqQypBKSkvKDIqQyk6QS9TKTtyZXR1cm57eDpyK3craypNLHk6aStUK0UqTSxyOk19fWZ1bmN0aW9uIHFkKHQsZSxuKXt2YXIgcixpLGEsbyxzPXQueC1lLngsYz10LnktZS55LHU9cypzK2MqYzt1PyhpPWUucituLnIsaSo9aSxvPXQucituLnIsaT4obyo9byk/KHI9KHUrby1pKS8oMip1KSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vdS1yKnIpKSxuLng9dC54LXIqcy1hKmMsbi55PXQueS1yKmMrYSpzKToocj0odStpLW8pLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS91LXIqcikpLG4ueD1lLngrcipzLWEqYyxuLnk9ZS55K3IqYythKnMpKToobi54PWUueCtuLnIsbi55PWUueSl9ZnVuY3Rpb24gSGQodCxlKXt2YXIgbj10LnIrZS5yLTFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiAkZCh0KXt2YXIgZT10Ll8sbj10Lm5leHQuXyxyPWUucituLnIsaT0oZS54Km4ucituLngqZS5yKS9yLGE9KGUueSpuLnIrbi55KmUucikvcjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiBXZCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gVmQodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihuPXRbMV0sZS54PS1uLnIsbi54PWUucixuLnk9MCwhKGk+MikpcmV0dXJuIGUucituLnI7cWQobixlLHI9dFsyXSksZT1uZXcgV2QoZSksbj1uZXcgV2Qobikscj1uZXcgV2QociksZS5uZXh0PXIucHJldmlvdXM9bixuLm5leHQ9ZS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3FkKGUuXyxuLl8scj10W3NdKSxyPW5ldyBXZChyKSxjPW4ubmV4dCx1PWUucHJldmlvdXMsbD1uLl8ucixoPWUuXy5yO2Rve2lmKGw8PWgpe2lmKEhkKGMuXyxyLl8pKXtuPWMsZS5uZXh0PW4sbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5uZXh0fWVsc2V7aWYoSGQodS5fLHIuXykpeyhlPXUpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9dS5fLnIsdT11LnByZXZpb3VzfX13aGlsZShjIT09dS5uZXh0KTtmb3Ioci5wcmV2aW91cz1lLHIubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49cixhPSRkKGUpOyhyPXIubmV4dCkhPT1uOykobz0kZChyKSk8YSYmKGU9cixhPW8pO249ZS5uZXh0fWZvcihlPVtuLl9dLHI9bjsocj1yLm5leHQpIT09bjspZS5wdXNoKHIuXyk7Zm9yKHI9SWQoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09ci54LGUueS09ci55O3JldHVybiByLnJ9ZnVuY3Rpb24gR2QodCl7cmV0dXJuIFZkKHQpLHR9ZnVuY3Rpb24gWGQodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpaZCh0KX1mdW5jdGlvbiBaZCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gUWQoKXtyZXR1cm4gMH1mdW5jdGlvbiBLZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSmQodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiB0cCgpe3ZhciB0PW51bGwsZT0xLG49MSxyPVFkO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGkueD1lLzIsaS55PW4vMix0P2kuZWFjaEJlZm9yZShlcCh0KSkuZWFjaEFmdGVyKG5wKHIsLjUpKS5lYWNoQmVmb3JlKHJwKDEpKTppLmVhY2hCZWZvcmUoZXAoSmQpKS5lYWNoQWZ0ZXIobnAoUWQsMSkpLmVhY2hBZnRlcihucChyLGkuci9NYXRoLm1pbihlLG4pKSkuZWFjaEJlZm9yZShycChNYXRoLm1pbihlLG4pLygyKmkucikpKSxpfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1YZChlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxpKTpbZSxuXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGkpOnJ9LGl9ZnVuY3Rpb24gZXAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBucCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZihyPW4uY2hpbGRyZW4pe3ZhciByLGksYSxvPXIubGVuZ3RoLHM9dChuKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKXJbaV0ucis9cztpZihhPVZkKHIpLHMpZm9yKGk9MDtpPG87KytpKXJbaV0uci09cztuLnI9YStzfX19ZnVuY3Rpb24gcnAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUucGFyZW50O2Uucio9dCxuJiYoZS54PW4ueCt0KmUueCxlLnk9bi55K3QqZS55KX19ZnVuY3Rpb24gaXAodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIGFwKHQsZSxuLHIsaSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGM9by5sZW5ndGgsdT10LnZhbHVlJiYoci1lKS90LnZhbHVlOysrczxjOykoYT1vW3NdKS55MD1uLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKnV9ZnVuY3Rpb24gb3AoKXt2YXIgdD0xLGU9MSxuPTAscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1uLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7ci5jaGlsZHJlbiYmYXAocixyLngwLHQqKHIuZGVwdGgrMSkvZSxyLngxLHQqKHIuZGVwdGgrMikvZSk7dmFyIGk9ci54MCxhPXIueTAsbz1yLngxLW4scz1yLnkxLW47bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxyLngwPWksci55MD1hLHIueDE9byxyLnkxPXN9fShlLGEpKSxyJiZpLmVhY2hCZWZvcmUoaXApLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGkpOnJ9LGkuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSk6bn0saX12YXIgc3A9e2RlcHRoOi0xfSxjcD17fTtmdW5jdGlvbiB1cCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBscCh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBocCgpe3ZhciB0PXVwLGU9bHA7ZnVuY3Rpb24gbihuKXt2YXIgcixpLGEsbyxzLGMsdSxsPW4ubGVuZ3RoLGg9bmV3IEFycmF5KGwpLGY9e307Zm9yKGk9MDtpPGw7KytpKXI9bltpXSxzPWhbaV09bmV3IEJkKHIpLG51bGwhPShjPXQocixpLG4pKSYmKGMrPSIiKSYmKGZbdT0iJCIrKHMuaWQ9YyldPXUgaW4gZj9jcDpzKTtmb3IoaT0wO2k8bDsrK2kpaWYocz1oW2ldLG51bGwhPShjPWUobltpXSxpLG4pKSYmKGMrPSIiKSl7aWYoIShvPWZbIiQiK2NdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrYyk7aWYobz09PWNwKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2MpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoYS5wYXJlbnQ9c3AsYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1sfSkpLmVhY2hCZWZvcmUoT2QpLGEucGFyZW50PW51bGwsbD4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gYX1yZXR1cm4gbi5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1aZChlKSxuKTp0fSxuLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpkKHQpLG4pOmV9LG59ZnVuY3Rpb24gZnAodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gZHAodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBwcCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbZS5sZW5ndGgtMV06dC50fWZ1bmN0aW9uIHlwKHQsZSxuKXt2YXIgcj1uLyhlLmktdC5pKTtlLmMtPXIsZS5zKz1uLHQuYys9cixlLnorPW4sZS5tKz1ufWZ1bmN0aW9uIGdwKHQsZSxuKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpufWZ1bmN0aW9uIG1wKHQsZSl7dGhpcy5fPXQsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPWV9ZnVuY3Rpb24gdnAoKXt2YXIgdD1mcCxlPTEsbj0xLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaSxhLG89bmV3IG1wKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihyPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1yLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKG49ZS5jaGlsZHJlbltpXT1uZXcgbXAocltpXSxpKSksbi5wYXJlbnQ9ZTtyZXR1cm4oby5wYXJlbnQ9bmV3IG1wKG51bGwsMCkpLmNoaWxkcmVuPVtvXSxvfShpKTtpZihjLmVhY2hBZnRlcihhKSxjLnBhcmVudC5tPS1jLnosYy5lYWNoQmVmb3JlKG8pLHIpaS5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIHU9aSxsPWksaD1pO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PHUueCYmKHU9dCksdC54PmwueCYmKGw9dCksdC5kZXB0aD5oLmRlcHRoJiYoaD10KX0pKTt2YXIgZj11PT09bD8xOnQodSxsKS8yLGQ9Zi11LngscD1lLyhsLngrZitkKSx5PW4vKGguZGVwdGh8fDEpO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCp5fSkpfXJldHVybiBpfWZ1bmN0aW9uIGEoZSl7dmFyIG49ZS5jaGlsZHJlbixyPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP3JbZS5pLTFdOm51bGw7aWYobil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoOy0tYT49MDspKGU9aVthXSkueis9bixlLm0rPW4sbis9ZS5zKyhyKz1lLmMpfShlKTt2YXIgYT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxuLHIpe2lmKG4pe2Zvcih2YXIgaSxhPWUsbz1lLHM9bixjPWEucGFyZW50LmNoaWxkcmVuWzBdLHU9YS5tLGw9by5tLGg9cy5tLGY9Yy5tO3M9cHAocyksYT1kcChhKSxzJiZhOyljPWRwKGMpLChvPXBwKG8pKS5hPWUsKGk9cy56K2gtYS56LXUrdChzLl8sYS5fKSk+MCYmKHlwKGdwKHMsZSxyKSxlLGkpLHUrPWksbCs9aSksaCs9cy5tLHUrPWEubSxmKz1jLm0sbCs9by5tO3MmJiFwcChvKSYmKG8udD1zLG8ubSs9aC1sKSxhJiYhZHAoYykmJihjLnQ9YSxjLm0rPXUtZixyPWUpfXJldHVybiByfShlLGksZS5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gbyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqbn1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX1mdW5jdGlvbiBicCh0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueDA9ZSxhLngxPXIsYS55MD1uLGEueTE9bis9YS52YWx1ZSp1fW1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEJkLnByb3RvdHlwZSk7dmFyIF9wPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiB4cCh0LGUsbixyLGksYSl7Zm9yKHZhciBvLHMsYyx1LGwsaCxmLGQscCx5LGcsbT1bXSx2PWUuY2hpbGRyZW4sYj0wLF89MCx4PXYubGVuZ3RoLHc9ZS52YWx1ZTtiPHg7KXtjPWktbix1PWEtcjtkb3tsPXZbXysrXS52YWx1ZX13aGlsZSghbCYmXzx4KTtmb3IoaD1mPWwsZz1sKmwqKHk9TWF0aC5tYXgodS9jLGMvdSkvKHcqdCkpLHA9TWF0aC5tYXgoZi9nLGcvaCk7Xzx4OysrXyl7aWYobCs9cz12W19dLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSxnPWwqbCp5LChkPU1hdGgubWF4KGYvZyxnL2gpKT5wKXtsLT1zO2JyZWFrfXA9ZH1tLnB1c2gobz17dmFsdWU6bCxkaWNlOmM8dSxjaGlsZHJlbjp2LnNsaWNlKGIsXyl9KSxvLmRpY2U/YXAobyxuLHIsaSx3P3IrPXUqbC93OmEpOmJwKG8sbixyLHc/bis9YypsL3c6aSxhKSx3LT1sLGI9X31yZXR1cm4gbX1jb25zdCB3cD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXt4cChlLHQsbixyLGksYSl9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oX3ApO2Z1bmN0aW9uIGtwKCl7dmFyIHQ9d3AsZT0hMSxuPTEscj0xLGk9WzBdLGE9UWQsbz1RZCxzPVFkLGM9UWQsdT1RZDtmdW5jdGlvbiBsKHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPW4sdC55MT1yLHQuZWFjaEJlZm9yZShoKSxpPVswXSxlJiZ0LmVhY2hCZWZvcmUoaXApLHR9ZnVuY3Rpb24gaChlKXt2YXIgbj1pW2UuZGVwdGhdLHI9ZS54MCtuLGw9ZS55MCtuLGg9ZS54MS1uLGY9ZS55MS1uO2g8ciYmKHI9aD0ocitoKS8yKSxmPGwmJihsPWY9KGwrZikvMiksZS54MD1yLGUueTA9bCxlLngxPWgsZS55MT1mLGUuY2hpbGRyZW4mJihuPWlbZS5kZXB0aCsxXT1hKGUpLzIscis9dShlKS1uLGwrPW8oZSktbiwoaC09cyhlKS1uKTxyJiYocj1oPShyK2gpLzIpLChmLT1jKGUpLW4pPGwmJihsPWY9KGwrZikvMiksdChlLHIsbCxoLGYpKX1yZXR1cm4gbC5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsbCk6ZX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLHI9K3RbMV0sbCk6W24scl19LGwudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1aZChlKSxsKTp0fSxsLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bC5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOmwucGFkZGluZ0lubmVyKCl9LGwucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOmF9LGwucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2wucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTpsLnBhZGRpbmdUb3AoKX0sbC5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOm99LGwucGFkZGluZ1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOnN9LGwucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OktkKCt0KSxsKTpjfSxsLnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOnV9LGx9ZnVuY3Rpb24gVHAodCxlLG4scixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMrMSk7Zm9yKHVbMF09bz1hPTA7YTxjOysrYSl1W2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLG4scixpLGEsbyxjKXtpZihlPj1uLTEpe3ZhciBsPXNbZV07cmV0dXJuIGwueDA9aSxsLnkwPWEsbC54MT1vLHZvaWQobC55MT1jKX1mb3IodmFyIGg9dVtlXSxmPXIvMitoLGQ9ZSsxLHA9bi0xO2Q8cDspe3ZhciB5PWQrcD4+PjE7dVt5XTxmP2Q9eSsxOnA9eX1mLXVbZC0xXTx1W2RdLWYmJmUrMTxkJiYtLWQ7dmFyIGc9dVtkXS1oLG09ci1nO2lmKG8taT5jLWEpe3ZhciB2PShpKm0rbypnKS9yO3QoZSxkLGcsaSxhLHYsYyksdChkLG4sbSx2LGEsbyxjKX1lbHNle3ZhciBiPShhKm0rYypnKS9yO3QoZSxkLGcsaSxhLG8sYiksdChkLG4sbSxpLGIsbyxjKX19KDAsYyx0LnZhbHVlLGUsbixyLGkpfWZ1bmN0aW9uIEVwKHQsZSxuLHIsaSl7KDEmdC5kZXB0aD9icDphcCkodCxlLG4scixpKX1jb25zdCBDcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXtpZigobz10Ll9zcXVhcmlmeSkmJm8ucmF0aW89PT1lKWZvcih2YXIgbyxzLGMsdSxsLGg9LTEsZj1vLmxlbmd0aCxkPXQudmFsdWU7KytoPGY7KXtmb3IoYz0ocz1vW2hdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxsPWMubGVuZ3RoO3U8bDsrK3Upcy52YWx1ZSs9Y1t1XS52YWx1ZTtzLmRpY2U/YXAocyxuLHIsaSxyKz0oYS1yKSpzLnZhbHVlL2QpOmJwKHMsbixyLG4rPShpLW4pKnMudmFsdWUvZCxhKSxkLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz14cChlLHQsbixyLGksYSksby5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KF9wKTtmdW5jdGlvbiBTcCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX1mdW5jdGlvbiBBcCh0LGUpe3ZhciBuPWRuKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fWZ1bmN0aW9uIE1wKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLW4pK2Uqbil9fXZhciBOcD1NYXRoLlNRUlQyO2Z1bmN0aW9uIERwKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIE9wKHQsZSl7dmFyIG4scixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sYz1lWzFdLHU9ZVsyXSxsPXMtaSxoPWMtYSxmPWwqbCtoKmg7aWYoZjwxZS0xMilyPU1hdGgubG9nKHUvbykvTnAsbj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmwsYSt0KmgsbypNYXRoLmV4cChOcCp0KnIpXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSx5PSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLGc9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSxtPU1hdGgubG9nKE1hdGguc3FydCh5KnkrMSkteSk7cj0obS1nKS9OcCxuPWZ1bmN0aW9uKHQpe3ZhciBlLG49dCpyLHM9RHAoZyksYz1vLygyKmQpKihzKihlPU5wKm4rZywoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krYypsLGErYypoLG8qcy9EcChOcCpuK2cpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKnIsbn1mdW5jdGlvbiBCcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWFuKGUpKS5oLChuPWFuKG4pKS5oKSxpPXBuKGUucyxuLnMpLGE9cG4oZS5sLG4ubCksbz1wbihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX1jb25zdCBMcD1CcChkbik7dmFyIElwPUJwKHBuKTtmdW5jdGlvbiBScCh0LGUpe3ZhciBuPXBuKCh0PVRhKHQpKS5sLChlPVRhKGUpKS5sKSxyPXBuKHQuYSxlLmEpLGk9cG4odC5iLGUuYiksYT1wbih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1yKGUpLHQuYj1pKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fWZ1bmN0aW9uIEZwKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9T2EoZSkpLmgsKG49T2EobikpLmgpLGk9cG4oZS5jLG4uYyksYT1wbihlLmwsbi5sKSxvPXBuKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPWEodCksZS5vcGFjaXR5PW8odCksZSsiIn19fWNvbnN0IFBwPUZwKGRuKTt2YXIganA9RnAocG4pO2Z1bmN0aW9uIFlwKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIHIoZSxyKXt2YXIgaT10KChlPUhhKGUpKS5oLChyPUhhKHIpKS5oKSxhPXBuKGUucyxyLnMpLG89cG4oZS5sLHIubCkscz1wbihlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1hKHQpLGUubD1vKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLHIuZ2FtbWE9ZSxyfSgxKX1jb25zdCB6cD1ZcChkbik7dmFyIFVwPVlwKHBuKTtmdW5jdGlvbiBxcCh0LGUpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgtMSxpPWVbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPXQoaSxpPWVbKytuXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci0xLE1hdGguZmxvb3IodCo9cikpKTtyZXR1cm4gYVtlXSh0LWUpfX1mdW5jdGlvbiBIcCh0LGUpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpbltyXT10KHIvKGUtMSkpO3JldHVybiBufWZ1bmN0aW9uICRwKHQpe2Zvcih2YXIgZSxuPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sYT0wOysrbjxyOyllPWksaT10W25dLGErPWVbMV0qaVswXS1lWzBdKmlbMV07cmV0dXJuIGEvMn1mdW5jdGlvbiBXcCh0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT0wLG89MCxzPXRbaS0xXSxjPTA7KytyPGk7KWU9cyxzPXRbcl0sYys9bj1lWzBdKnNbMV0tc1swXSplWzFdLGErPShlWzBdK3NbMF0pKm4sbys9KGVbMV0rc1sxXSkqbjtyZXR1cm5bYS8oYyo9Myksby9jXX1mdW5jdGlvbiBWcCh0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSktKGVbMV0tdFsxXSkqKG5bMF0tdFswXSl9ZnVuY3Rpb24gR3AodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gWHAodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49WzAsMV0scj0yLGk9MjtpPGU7KytpKXtmb3IoO3I+MSYmVnAodFtuW3ItMl1dLHRbbltyLTFdXSx0W2ldKTw9MDspLS1yO25bcisrXT1pfXJldHVybiBuLnNsaWNlKDAscil9ZnVuY3Rpb24gWnAodCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixyPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpcltlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKHIuc29ydChHcCksZT0wO2U8bjsrK2UpaVtlXT1bcltlXVswXSwtcltlXVsxXV07dmFyIGE9WHAociksbz1YcChpKSxzPW9bMF09PT1hWzBdLGM9b1tvLmxlbmd0aC0xXT09PWFbYS5sZW5ndGgtMV0sdT1bXTtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7LS1lKXUucHVzaCh0W3JbYVtlXV1bMl1dKTtmb3IoZT0rcztlPG8ubGVuZ3RoLWM7KytlKXUucHVzaCh0W3Jbb1tlXV1bMl1dKTtyZXR1cm4gdX1mdW5jdGlvbiBRcCh0LGUpe2Zvcih2YXIgbixyLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1lWzBdLHM9ZVsxXSxjPWFbMF0sdT1hWzFdLGw9ITEsaD0wO2g8aTsrK2gpbj0oYT10W2hdKVswXSwocj1hWzFdKT5zIT11PnMmJm88KGMtbikqKHMtcikvKHUtcikrbiYmKGw9IWwpLGM9bix1PXI7cmV0dXJuIGx9ZnVuY3Rpb24gS3AodCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9dFtpLTFdLG89YVswXSxzPWFbMV0sYz0wOysrcjxpOyllPW8sbj1zLGUtPW89KGE9dFtyXSlbMF0sbi09cz1hWzFdLGMrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gY31mdW5jdGlvbiBKcCgpe3JldHVybiBNYXRoLnJhbmRvbSgpfWNvbnN0IHR5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBlKCkqbit0fX1yZXR1cm4gbi5zb3VyY2U9dCxufShKcCksZXk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1yKWE9cixyPW51bGw7ZWxzZSBkb3tyPTIqZSgpLTEsYT0yKmUoKS0xLGk9cipyK2EqYX13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtuKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShKcCksbnk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9ZXkuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0oSnApLHJ5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPTA7cjx0OysrciluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KEpwKSxpeT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49cnkuc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oSnApLGF5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KEpwKTtmdW5jdGlvbiBveSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc31mdW5jdGlvbiBzeSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBjeT1BcnJheS5wcm90b3R5cGUsdXk9Y3kubWFwLGx5PWN5LnNsaWNlLGh5PXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIGZ5KCl7dmFyIHQ9bmEoKSxlPVtdLG49W10scj1oeTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkrIiIsbz10LmdldChhKTtpZighbyl7aWYociE9PWh5KXJldHVybiByO3Quc2V0KGEsbz1lLnB1c2goaSkpfXJldHVybiBuWyhvLTEpJW4ubGVuZ3RoXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9bmEoKTtmb3IodmFyIHIsYSxvPS0xLHM9bi5sZW5ndGg7KytvPHM7KXQuaGFzKGE9KHI9bltvXSkrIiIpfHx0LnNldChhLGUucHVzaChyKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bHkuY2FsbCh0KSxpKTpuLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBmeShlLG4pLnVua25vd24ocil9LG95LmFwcGx5KGksYXJndW1lbnRzKSxpfWZ1bmN0aW9uIGR5KCl7dmFyIHQsZSxuPWZ5KCkudW5rbm93bih2b2lkIDApLHI9bi5kb21haW4saT1uLnJhbmdlLGE9WzAsMV0sbz0hMSxzPTAsYz0wLHU9LjU7ZnVuY3Rpb24gbCgpe3ZhciBuPXIoKS5sZW5ndGgsbD1hWzFdPGFbMF0saD1hW2wtMF0sZj1hWzEtbF07dD0oZi1oKS9NYXRoLm1heCgxLG4tcysyKmMpLG8mJih0PU1hdGguZmxvb3IodCkpLGgrPShmLWgtdCoobi1zKSkqdSxlPXQqKDEtcyksbyYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBkPWsobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaCt0KmV9KSk7cmV0dXJuIGkobD9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxsKCkpOnIoKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK3RbMF0sK3RbMV1dLGwoKSk6YS5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Wyt0WzBdLCt0WzFdXSxvPSEwLGwoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISF0LGwoKSk6b30sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsYz0rdCksbCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLHQpLGwoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCgpKTpjfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksbCgpKTp1fSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZHkocigpLGEpLnJvdW5kKG8pLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nT3V0ZXIoYykuYWxpZ24odSl9LG95LmFwcGx5KGwoKSxhcmd1bWVudHMpfWZ1bmN0aW9uIHB5KHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHB5KGUoKSl9LHR9ZnVuY3Rpb24geXkoKXtyZXR1cm4gcHkoZHkuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSl9ZnVuY3Rpb24gZ3kodCl7cmV0dXJuK3R9dmFyIG15PVswLDFdO2Z1bmN0aW9uIHZ5KHQpe3JldHVybiB0fWZ1bmN0aW9uIGJ5KHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9OihuPWlzTmFOKGUpP05hTjouNSxmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIG59ZnVuY3Rpb24gX3kodCl7dmFyIGUsbj10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gbj5yJiYoZT1uLG49cixyPWUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChuLE1hdGgubWluKHIsdCkpfX1mdW5jdGlvbiB4eSh0LGUsbil7dmFyIHI9dFswXSxpPXRbMV0sYT1lWzBdLG89ZVsxXTtyZXR1cm4gaTxyPyhyPWJ5KGksciksYT1uKG8sYSkpOihyPWJ5KHIsaSksYT1uKGEsbykpLGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCkpfX1mdW5jdGlvbiB3eSh0LGUsbil7dmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz0tMTtmb3IodFtyXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytvPHI7KWlbb109YnkodFtvXSx0W28rMV0pLGFbb109bihlW29dLGVbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXUodCxlLDEsciktMTtyZXR1cm4gYVtuXShpW25dKGUpKX19ZnVuY3Rpb24ga3kodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gVHkoKXt2YXIgdCxlLG4scixpLGEsbz1teSxzPW15LGM9TW4sdT12eTtmdW5jdGlvbiBsKCl7cmV0dXJuIHI9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpPjI/d3k6eHksaT1hPW51bGwsaH1mdW5jdGlvbiBoKGUpe3JldHVybiBpc05hTihlPStlKT9uOihpfHwoaT1yKG8ubWFwKHQpLHMsYykpKSh0KHUoZSkpKX1yZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIHUoZSgoYXx8KGE9cihzLG8ubWFwKHQpLFRuKSkpKG4pKSl9LGguZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXV5LmNhbGwodCxneSksdT09PXZ5fHwodT1feShvKSksbCgpKTpvLnNsaWNlKCl9LGgucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bHkuY2FsbCh0KSxsKCkpOnMuc2xpY2UoKX0saC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBzPWx5LmNhbGwodCksYz1NcCxsKCl9LGguY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dD9feShvKTp2eSxoKTp1IT09dnl9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxsKCkpOmN9LGgudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGgpOm59LGZ1bmN0aW9uKG4scil7cmV0dXJuIHQ9bixlPXIsbCgpfX1mdW5jdGlvbiBFeSh0LGUpe3JldHVybiBUeSgpKHQsZSl9ZnVuY3Rpb24gQ3kodCxlLG4scil7dmFyIGksYT1NKHQsZSxuKTtzd2l0Y2goKHI9Y2MobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9eGMoYSxvKSl8fChyLnByZWNpc2lvbj1pKSx5YyhyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPXdjKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9X2MoYSkpfHwoci5wcmVjaXNpb249aS0yKigiJSI9PT1yLnR5cGUpKX1yZXR1cm4gcGMocil9ZnVuY3Rpb24gU3kodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBTKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCk7cmV0dXJuIEN5KHJbMF0scltyLmxlbmd0aC0xXSxudWxsPT10PzEwOnQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIHIsaT1lKCksYT0wLG89aS5sZW5ndGgtMSxzPWlbYV0sYz1pW29dO3JldHVybiBjPHMmJihyPXMscz1jLGM9cixyPWEsYT1vLG89ciksKHI9QShzLGMsbikpPjA/cj1BKHM9TWF0aC5mbG9vcihzL3IpKnIsYz1NYXRoLmNlaWwoYy9yKSpyLG4pOnI8MCYmKHI9QShzPU1hdGguY2VpbChzKnIpL3IsYz1NYXRoLmZsb29yKGMqcikvcixuKSkscj4wPyhpW2FdPU1hdGguZmxvb3Iocy9yKSpyLGlbb109TWF0aC5jZWlsKGMvcikqcixlKGkpKTpyPDAmJihpW2FdPU1hdGguY2VpbChzKnIpL3IsaVtvXT1NYXRoLmZsb29yKGMqcikvcixlKGkpKSx0fSx0fWZ1bmN0aW9uIEF5KCl7dmFyIHQ9RXkodnksdnkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4ga3kodCxBeSgpKX0sb3kuYXBwbHkodCxhcmd1bWVudHMpLFN5KHQpfWZ1bmN0aW9uIE15KHQpe3ZhciBlO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2U6dH1yZXR1cm4gbi5pbnZlcnQ9bixuLmRvbWFpbj1uLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXV5LmNhbGwoZSxneSksbik6dC5zbGljZSgpfSxuLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTXkodCkudW5rbm93bihlKX0sdD1hcmd1bWVudHMubGVuZ3RoP3V5LmNhbGwodCxneSk6WzAsMV0sU3kobil9ZnVuY3Rpb24gTnkodCxlKXt2YXIgbixyPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLGE9dFtyXSxvPXRbaV07cmV0dXJuIG88YSYmKG49cixyPWksaT1uLG49YSxhPW8sbz1uKSx0W3JdPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBEeSh0KXtyZXR1cm4gTWF0aC5sb2codCl9ZnVuY3Rpb24gT3kodCl7cmV0dXJuIE1hdGguZXhwKHQpfWZ1bmN0aW9uIEJ5KHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gTHkodCl7cmV0dXJuLU1hdGguZXhwKC10KX1mdW5jdGlvbiBJeSh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gUnkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gRnkodCl7dmFyIGUsbixyPXQoRHksT3kpLGk9ci5kb21haW4sYT0xMDtmdW5jdGlvbiBvKCl7cmV0dXJuIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfShhKSxuPWZ1bmN0aW9uKHQpe3JldHVybiAxMD09PXQ/SXk6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KGEpLGkoKVswXTwwPyhlPVJ5KGUpLG49UnkobiksdChCeSxMeSkpOnQoRHksT3kpLHJ9cmV0dXJuIHIuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKCkpOmF9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLG8oKSk6aSgpfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciByLG89aSgpLHM9b1swXSxjPW9bby5sZW5ndGgtMV07KHI9YzxzKSYmKGY9cyxzPWMsYz1mKTt2YXIgdSxsLGgsZj1lKHMpLGQ9ZShjKSxwPW51bGw9PXQ/MTA6K3QseT1bXTtpZighKGElMSkmJmQtZjxwKXtpZihmPU1hdGgucm91bmQoZiktMSxkPU1hdGgucm91bmQoZCkrMSxzPjApe2Zvcig7ZjxkOysrZilmb3IobD0xLHU9bihmKTtsPGE7KytsKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO3kucHVzaChoKX19ZWxzZSBmb3IoO2Y8ZDsrK2YpZm9yKGw9YS0xLHU9bihmKTtsPj0xOy0tbClpZighKChoPXUqbCk8cykpe2lmKGg+YylicmVhazt5LnB1c2goaCl9fWVsc2UgeT1TKGYsZCxNYXRoLm1pbihkLWYscCkpLm1hcChuKTtyZXR1cm4gcj95LnJldmVyc2UoKTp5fSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxpKXtpZihudWxsPT1pJiYoaT0xMD09PWE/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmKGk9cGMoaSkpLHQ9PT0xLzApcmV0dXJuIGk7bnVsbD09dCYmKHQ9MTApO3ZhciBvPU1hdGgubWF4KDEsYSp0L3IudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10L24oTWF0aC5yb3VuZChlKHQpKSk7cmV0dXJuIHIqYTxhLS41JiYocio9YSkscjw9bz9pKHQpOiIifX0sci5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkoTnkoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0scn1mdW5jdGlvbiBQeSgpe3ZhciB0PUZ5KFR5KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4ga3kodCxQeSgpKS5iYXNlKHQuYmFzZSgpKX0sb3kuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gankodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5sb2cxcChNYXRoLmFicyhlL3QpKX19ZnVuY3Rpb24gWXkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5leHBtMShNYXRoLmFicyhlKSkqdH19ZnVuY3Rpb24genkodCl7dmFyIGU9MSxuPXQoankoZSksWXkoZSkpO3JldHVybiBuLmNvbnN0YW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoankoZT0rbiksWXkoZSkpOmV9LFN5KG4pfWZ1bmN0aW9uIFV5KCl7dmFyIHQ9enkoVHkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBreSh0LFV5KCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LG95LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBxeSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gSHkodCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gJHkodCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiBXeSh0KXt2YXIgZT10KHZ5LHZ5KSxuPTE7ZnVuY3Rpb24gcigpe3JldHVybiAxPT09bj90KHZ5LHZ5KTouNT09PW4/dChIeSwkeSk6dChxeShuKSxxeSgxL24pKX1yZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKCkpOm59LFN5KGUpfWZ1bmN0aW9uIFZ5KCl7dmFyIHQ9V3koVHkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBreSh0LFZ5KCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LG95LmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIEd5KCl7cmV0dXJuIFZ5LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gWHkoKXt2YXIgdCxlPVtdLG49W10scj1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxpPU1hdGgubWF4KDEsbi5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShpLTEpOysrdDxpOylyW3QtMV09TyhlLHQvaSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW3UocixlKV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBpPW4uaW5kZXhPZih0KTtyZXR1cm4gaTwwP1tOYU4sTmFOXTpbaT4wP3JbaS0xXTplWzBdLGk8ci5sZW5ndGg/cltpXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixyPTAsbz10Lmxlbmd0aDtyPG87KytyKW51bGw9PShuPXRbcl0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQoaSksYSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWx5LmNhbGwodCksYSgpKTpuLnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFh5KCkuZG9tYWluKGUpLnJhbmdlKG4pLnVua25vd24odCl9LG95LmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBaeSgpe3ZhciB0LGU9MCxuPTEscj0xLGk9Wy41XSxhPVswLDFdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGU8PWU/YVt1KGksZSwwLHIpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3IoaT1uZXcgQXJyYXkocik7Kyt0PHI7KWlbdF09KCh0KzEpKm4tKHQtcikqZSkvKHIrMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oYT1seS5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOmEuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5pbmRleE9mKHQpO3JldHVybiBvPDA/W05hTixOYU5dOm88MT9bZSxpWzBdXTpvPj1yP1tpW3ItMV0sbl06W2lbby0xXSxpW29dXX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6b30sby50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFp5KCkuZG9tYWluKFtlLG5dKS5yYW5nZShhKS51bmtub3duKHQpfSxveS5hcHBseShTeShvKSxhcmd1bWVudHMpfWZ1bmN0aW9uIFF5KCl7dmFyIHQsZT1bLjVdLG49WzAsMV0scj0xO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGk8PWk/blt1KGUsaSwwLHIpXTp0fXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1seS5jYWxsKHQpLHI9TWF0aC5taW4oZS5sZW5ndGgsbi5sZW5ndGgtMSksaSk6ZS5zbGljZSgpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWx5LmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTpuLnNsaWNlKCl9LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm5bZVtyLTFdLGVbcl1dfSxpLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUXkoKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sb3kuYXBwbHkoaSxhcmd1bWVudHMpfXZhciBLeT1uZXcgRGF0ZSxKeT1uZXcgRGF0ZTtmdW5jdGlvbiB0Zyh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiB0ZygoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBLeS5zZXRUaW1lKCtlKSxKeS5zZXRUaW1lKCtyKSx0KEt5KSx0KEp5KSxNYXRoLmZsb29yKG4oS3ksSnkpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgZWc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO2VnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dGcoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IG5nPWVnO3ZhciByZz1lZy5yYW5nZSxpZz10ZygoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpO2NvbnN0IGFnPWlnO3ZhciBvZz1pZy5yYW5nZSxzZz0xZTMsY2c9NmU0LHVnPTM2ZTUsbGc9ODY0ZTUsaGc9NjA0OGU1O2Z1bmN0aW9uIGZnKHQpe3JldHVybiB0ZygoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqY2cpL2hnfSkpfXZhciBkZz1mZygwKSxwZz1mZygxKSx5Zz1mZygyKSxnZz1mZygzKSxtZz1mZyg0KSx2Zz1mZyg1KSxiZz1mZyg2KSxfZz1kZy5yYW5nZSx4Zz1wZy5yYW5nZSx3Zz15Zy5yYW5nZSxrZz1nZy5yYW5nZSxUZz1tZy5yYW5nZSxFZz12Zy5yYW5nZSxDZz1iZy5yYW5nZSxTZz10ZygoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmNnKS9sZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKTtjb25zdCBBZz1TZzt2YXIgTWc9U2cucmFuZ2UsTmc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqc2ctdC5nZXRNaW51dGVzKCkqY2cpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdWcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdWd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKTtjb25zdCBEZz1OZzt2YXIgT2c9TmcucmFuZ2UsQmc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqc2cpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqY2cpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvY2d9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpO2NvbnN0IExnPUJnO3ZhciBJZz1CZy5yYW5nZSxSZz10ZygoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpzZyl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9zZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSk7Y29uc3QgRmc9Umc7dmFyIFBnPVJnLnJhbmdlLGpnPXRnKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7amcuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT90ZygoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpqZzpudWxsfTtjb25zdCBZZz1qZzt2YXIgemc9amcucmFuZ2U7ZnVuY3Rpb24gVWcodCl7cmV0dXJuIHRnKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9oZ30pKX12YXIgcWc9VWcoMCksSGc9VWcoMSksJGc9VWcoMiksV2c9VWcoMyksVmc9VWcoNCksR2c9VWcoNSksWGc9VWcoNiksWmc9cWcucmFuZ2UsUWc9SGcucmFuZ2UsS2c9JGcucmFuZ2UsSmc9V2cucmFuZ2UsdG09VmcucmFuZ2UsZW09R2cucmFuZ2Usbm09WGcucmFuZ2Uscm09dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9sZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtjb25zdCBpbT1ybTt2YXIgYW09cm0ucmFuZ2Usb209dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO29tLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dGcoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IHNtPW9tO3ZhciBjbT1vbS5yYW5nZTtmdW5jdGlvbiB1bSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gbG0odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gaG0odCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIGZtKHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMsbz10LnNob3J0RGF5cyxzPXQubW9udGhzLGM9dC5zaG9ydE1vbnRocyx1PVRtKGkpLGw9RW0oaSksaD1UbShhKSxmPUVtKGEpLGQ9VG0obykscD1FbShvKSx5PVRtKHMpLGc9RW0ocyksbT1UbShjKSx2PUVtKGMpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpXbSxlOldtLGY6UW0sZzpjdixHOmx2LEg6Vm0sSTpHbSxqOlhtLEw6Wm0sbTpLbSxNOkptLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROkJ2LHM6THYsUzp0dix1OmV2LFU6bnYsVjppdix3OmF2LFc6b3YseDpudWxsLFg6bnVsbCx5OnN2LFk6dXYsWjpodiwiJSI6T3Z9LF89e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpmdixlOmZ2LGY6bXYsZzpBdixHOk52LEg6ZHYsSTpwdixqOnl2LEw6Z3YsbTp2dixNOmJ2LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROkJ2LHM6THYsUzpfdix1Onh2LFU6d3YsVjpUdix3OkV2LFc6Q3YseDpudWxsLFg6bnVsbCx5OlN2LFk6TXYsWjpEdiwiJSI6T3Z9LHg9e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PXBbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9ZltyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT12W3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWdbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4scil7cmV0dXJuIFQodCxlLG4scil9LGQ6Um0sZTpSbSxmOlVtLGc6T20sRzpEbSxIOlBtLEk6UG0sajpGbSxMOnptLG06SW0sTTpqbSxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LHE6TG0sUTpIbSxzOiRtLFM6WW0sdTpTbSxVOkFtLFY6TW0sdzpDbSxXOk5tLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUKHQsbixlLHIpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gVCh0LHIsZSxuKX0seTpPbSxZOkRtLFo6Qm0sIiUiOnFtfTtmdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYSxvPVtdLHM9LTEsYz0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGMscykpLG51bGwhPShpPXZtW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwoYT1lW3JdKSYmKHI9YShuLGkpKSxvLnB1c2gociksYz1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLHMpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYT1obSgxOTAwLHZvaWQgMCwxKTtpZihUKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0ocj1sbShobShhLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9IZy5jZWlsKHIpOkhnKHIpLHI9aW0ub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRVVENGdWxsWWVhcigpLGEubT1yLmdldFVUQ01vbnRoKCksYS5kPXIuZ2V0VVRDRGF0ZSgpKyhhLncrNiklNyk6KGk9KHI9dW0oaG0oYS55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/cGcuY2VpbChyKTpwZyhyKSxyPUFnLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0RnVsbFllYXIoKSxhLm09ci5nZXRNb250aCgpLGEuZD1yLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9sbShobShhLnksMCwxKSkuZ2V0VVRDRGF5KCk6dW0oaG0oYS55LDAsMSkpLmdldERheSgpLGEubT0wLGEuZD0iVyJpbiBhPyhhLncrNiklNys3KmEuVy0oaSs1KSU3OmEudys3KmEuVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBhPyhhLkgrPWEuWi8xMDB8MCxhLk0rPWEuWiUxMDAsbG0oYSkpOnVtKGEpfX1mdW5jdGlvbiBUKHQsZSxuLHIpe2Zvcih2YXIgaSxhLG89MCxzPWUubGVuZ3RoLGM9bi5sZW5ndGg7bzxzOyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChvKyspKSl7aWYoaT1lLmNoYXJBdChvKyspLCEoYT14W2kgaW4gdm0/ZS5jaGFyQXQobysrKTppXSl8fChyPWEodCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KG4sYiksYi5YPXcocixiKSxiLmM9dyhlLGIpLF8ueD13KG4sXyksXy5YPXcocixfKSxfLmM9dyhlLF8pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixfKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19dmFyIGRtLHBtLHltLGdtLG1tLHZtPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGJtPS9eXHMqXGQrLyxfbT0vXiUvLHhtPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiB3bSh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBrbSh0KXtyZXR1cm4gdC5yZXBsYWNlKHhtLCJcXCQmIil9ZnVuY3Rpb24gVG0odCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKGttKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gRW0odCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gQ20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQW0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTW0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTm0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRG0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCbSh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExtKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEltKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6bSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxbSh0LGUsbil7dmFyIHI9X20uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBIbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRtKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV20odCxlKXtyZXR1cm4gd20odC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBWbSh0LGUpe3JldHVybiB3bSh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBHbSh0LGUpe3JldHVybiB3bSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gWG0odCxlKXtyZXR1cm4gd20oMStBZy5jb3VudChuZyh0KSx0KSxlLDMpfWZ1bmN0aW9uIFptKHQsZSl7cmV0dXJuIHdtKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBRbSh0LGUpe3JldHVybiBabSh0LGUpKyIwMDAifWZ1bmN0aW9uIEttKHQsZSl7cmV0dXJuIHdtKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gSm0odCxlKXtyZXR1cm4gd20odC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiB0dih0LGUpe3JldHVybiB3bSh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGV2KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBudih0LGUpe3JldHVybiB3bShkZy5jb3VudChuZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gcnYodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/bWcodCk6bWcuY2VpbCh0KX1mdW5jdGlvbiBpdih0LGUpe3JldHVybiB0PXJ2KHQpLHdtKG1nLmNvdW50KG5nKHQpLHQpKyg0PT09bmcodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gYXYodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gb3YodCxlKXtyZXR1cm4gd20ocGcuY291bnQobmcodCktMSx0KSxlLDIpfWZ1bmN0aW9uIHN2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBjdih0LGUpe3JldHVybiB3bSgodD1ydih0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiB1dih0LGUpe3JldHVybiB3bSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gbHYodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB3bSgodD1uPj00fHwwPT09bj9tZyh0KTptZy5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGh2KHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrd20oZS82MHwwLCIwIiwyKSt3bShlJTYwLCIwIiwyKX1mdW5jdGlvbiBmdih0LGUpe3JldHVybiB3bSh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIGR2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIHB2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiB5dih0LGUpe3JldHVybiB3bSgxK2ltLmNvdW50KHNtKHQpLHQpLGUsMyl9ZnVuY3Rpb24gZ3YodCxlKXtyZXR1cm4gd20odC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIG12KHQsZSl7cmV0dXJuIGd2KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gdnYodCxlKXtyZXR1cm4gd20odC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBidih0LGUpe3JldHVybiB3bSh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIF92KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24geHYodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIHd2KHQsZSl7cmV0dXJuIHdtKHFnLmNvdW50KHNtKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBrdih0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9WZyh0KTpWZy5jZWlsKHQpfWZ1bmN0aW9uIFR2KHQsZSl7cmV0dXJuIHQ9a3YodCksd20oVmcuY291bnQoc20odCksdCkrKDQ9PT1zbSh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBFdih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBDdih0LGUpe3JldHVybiB3bShIZy5jb3VudChzbSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gU3YodCxlKXtyZXR1cm4gd20odC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEF2KHQsZSl7cmV0dXJuIHdtKCh0PWt2KHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIE12KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBOdih0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHdtKCh0PW4+PTR8fDA9PT1uP1ZnKHQpOlZnLmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gRHYoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIE92KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEJ2KHQpe3JldHVybit0fWZ1bmN0aW9uIEx2KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gSXYodCl7cmV0dXJuIGRtPWZtKHQpLHBtPWRtLmZvcm1hdCx5bT1kbS5wYXJzZSxnbT1kbS51dGNGb3JtYXQsbW09ZG0udXRjUGFyc2UsZG19SXYoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgUnY9MzE1MzZlNjtmdW5jdGlvbiBGdih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gUHYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24ganYodCxlLG4scixpLG8scyxjLHUpe3ZhciBsPUV5KHZ5LHZ5KSxoPWwuaW52ZXJ0LGY9bC5kb21haW4sZD11KCIuJUwiKSxwPXUoIjolUyIpLHk9dSgiJUk6JU0iKSxnPXUoIiVJICVwIiksbT11KCIlYSAlZCIpLHY9dSgiJWIgJWQiKSxiPXUoIiVCIiksXz11KCIlWSIpLHg9W1tzLDEsMWUzXSxbcyw1LDVlM10sW3MsMTUsMTVlM10sW3MsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW2ksMSwzNmU1XSxbaSwzLDEwOGU1XSxbaSw2LDIxNmU1XSxbaSwxMiw0MzJlNV0sW3IsMSw4NjRlNV0sW3IsMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsUnZdXTtmdW5jdGlvbiB3KGEpe3JldHVybihzKGEpPGE/ZDpvKGEpPGE/cDppKGEpPGE/eTpyKGEpPGE/ZzplKGEpPGE/bihhKTxhP206djp0KGEpPGE/YjpfKShhKX1mdW5jdGlvbiBrKGUsbixyLGkpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKHItbikvZSxzPWEoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzJdfSkpLnJpZ2h0KHgsbyk7cz09PXgubGVuZ3RoPyhpPU0obi9SdixyL1J2LGUpLGU9dCk6cz8oaT0ocz14W28veFtzLTFdWzJdPHhbc11bMl0vbz9zLTE6c10pWzFdLGU9c1swXSk6KGk9TWF0aC5tYXgoTShuLHIsZSksMSksZT1jKX1yZXR1cm4gbnVsbD09aT9lOmUuZXZlcnkoaSl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShoKHQpKX0sbC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zih1eS5jYWxsKHQsUHYpKTpmKCkubWFwKEZ2KX0sbC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZigpLGk9clswXSxhPXJbci5sZW5ndGgtMV0sbz1hPGk7cmV0dXJuIG8mJihuPWksaT1hLGE9biksbj0obj1rKHQsaSxhLGUpKT9uLnJhbmdlKGksYSsxKTpbXSxvP24ucmV2ZXJzZSgpOm59LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3c6dShlKX0sbC5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZigpO3JldHVybih0PWsodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2YoTnkobix0KSk6bH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGt5KGwsanYodCxlLG4scixpLG8scyxjLHUpKX0sbH1mdW5jdGlvbiBZdigpe3JldHVybiBveS5hcHBseShqdihuZyxhZyxkZyxBZyxEZyxMZyxGZyxZZyxwbSkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9dmFyIHp2PXRnKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSk7Y29uc3QgVXY9enY7dmFyIHF2PXp2LnJhbmdlLEh2PXRnKChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdWcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdWd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKTtjb25zdCAkdj1Idjt2YXIgV3Y9SHYucmFuZ2UsVnY9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqY2cpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvY2d9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSkpO2NvbnN0IEd2PVZ2O3ZhciBYdj1Wdi5yYW5nZTtmdW5jdGlvbiBadigpe3JldHVybiBveS5hcHBseShqdihzbSxVdixxZyxpbSwkdixHdixGZyxZZyxnbSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUXYoKXt2YXIgdCxlLG4scixpLGE9MCxvPTEscz12eSxjPSExO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP2k6cygwPT09bj8uNTooZT0ocihlKS10KSpuLGM/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKSl9cmV0dXJuIHUuZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIoYT0raVswXSksZT1yKG89K2lbMV0pLG49dD09PWU/MDoxLyhlLXQpLHUpOlthLG9dfSx1LmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSEhdCx1KTpjfSx1LmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHUpOnN9LHUudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHUpOml9LGZ1bmN0aW9uKGkpe3JldHVybiByPWksdD1pKGEpLGU9aShvKSxuPXQ9PT1lPzA6MS8oZS10KSx1fX1mdW5jdGlvbiBLdih0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5pbnRlcnBvbGF0b3IodC5pbnRlcnBvbGF0b3IoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBKdigpe3ZhciB0PVN5KFF2KCkodnkpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEt2KHQsSnYoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiB0Yigpe3ZhciB0PUZ5KFF2KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCx0YigpKS5iYXNlKHQuYmFzZSgpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIGViKCl7dmFyIHQ9enkoUXYoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LGViKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBuYigpe3ZhciB0PVd5KFF2KCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCxuYigpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxzeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcmIoKXtyZXR1cm4gbmIuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBpYigpe3ZhciB0PVtdLGU9dnk7ZnVuY3Rpb24gbihuKXtpZighaXNOYU4obj0rbikpcmV0dXJuIGUoKHUodCxuKS0xKS8odC5sZW5ndGgtMSkpfXJldHVybiBuLmRvbWFpbj1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W107Zm9yKHZhciByLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpbnVsbD09KHI9ZVthXSl8fGlzTmFOKHI9K3IpfHx0LnB1c2gocik7cmV0dXJuIHQuc29ydChpKSxufSxuLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBpYihlKS5kb21haW4odCl9LHN5LmFwcGx5KG4sYXJndW1lbnRzKX1mdW5jdGlvbiBhYigpe3ZhciB0LGUsbixyLGksYSxvLHM9MCxjPS41LHU9MSxsPXZ5LGg9ITE7ZnVuY3Rpb24gZih0KXtyZXR1cm4gaXNOYU4odD0rdCk/bzoodD0uNSsoKHQ9K2EodCkpLWUpKih0PGU/cjppKSxsKGg/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKTp0KSl9cmV0dXJuIGYuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWEocz0rb1swXSksZT1hKGM9K29bMV0pLG49YSh1PStvWzJdKSxyPXQ9PT1lPzA6LjUvKGUtdCksaT1lPT09bj8wOi41LyhuLWUpLGYpOltzLGMsdV19LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ISF0LGYpOmh9LGYuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZik6bH0sZi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZik6b30sZnVuY3Rpb24obyl7cmV0dXJuIGE9byx0PW8ocyksZT1vKGMpLG49byh1KSxyPXQ9PT1lPzA6LjUvKGUtdCksaT1lPT09bj8wOi41LyhuLWUpLGZ9fWZ1bmN0aW9uIG9iKCl7dmFyIHQ9U3koYWIoKSh2eSkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCxvYigpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIHNiKCl7dmFyIHQ9RnkoYWIoKSkuZG9tYWluKFsuMSwxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LHNiKCkpLmJhc2UodC5iYXNlKCkpfSxzeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gY2IoKXt2YXIgdD16eShhYigpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEt2KHQsY2IoKSkuY29uc3RhbnQodC5jb25zdGFudCgpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIHViKCl7dmFyIHQ9V3koYWIoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LHViKCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBsYigpe3JldHVybiB1Yi5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIGhiKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufWNvbnN0IGZiPWhiKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxkYj1oYigiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IikscGI9aGIoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLHliPWhiKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxnYj1oYigiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksbWI9aGIoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLHZiPWhiKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxiYj1oYigiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksX2I9aGIoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLHhiPWhiKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiB3Yih0KXtyZXR1cm4gbW4odFt0Lmxlbmd0aC0xXSl9dmFyIGtiPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChoYik7Y29uc3QgVGI9d2Ioa2IpO3ZhciBFYj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoaGIpO2NvbnN0IENiPXdiKEViKTt2YXIgU2I9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKGhiKTtjb25zdCBBYj13YihTYik7dmFyIE1iPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChoYik7Y29uc3QgTmI9d2IoTWIpO3ZhciBEYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoaGIpO2NvbnN0IE9iPXdiKERiKTt2YXIgQmI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKGhiKTtjb25zdCBMYj13YihCYik7dmFyIEliPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChoYik7Y29uc3QgUmI9d2IoSWIpO3ZhciBGYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoaGIpO2NvbnN0IFBiPXdiKEZiKTt2YXIgamI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKGhiKTtjb25zdCBZYj13YihqYik7dmFyIHpiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChoYik7Y29uc3QgVWI9d2IoemIpO3ZhciBxYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoaGIpO2NvbnN0IEhiPXdiKHFiKTt2YXIgJGI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKGhiKTtjb25zdCBXYj13YigkYik7dmFyIFZiPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChoYik7Y29uc3QgR2I9d2IoVmIpO3ZhciBYYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoaGIpO2NvbnN0IFpiPXdiKFhiKTt2YXIgUWI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKGhiKTtjb25zdCBLYj13YihRYik7dmFyIEpiPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChoYik7Y29uc3QgdF89d2IoSmIpO3ZhciBlXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoaGIpO2NvbnN0IG5fPXdiKGVfKTt2YXIgcl89bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKGhiKTtjb25zdCBpXz13YihyXyk7dmFyIGFfPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChoYik7Y29uc3Qgb189d2IoYV8pO3ZhciBzXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoaGIpO2NvbnN0IGNfPXdiKHNfKTt2YXIgdV89bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKGhiKTtjb25zdCBsXz13Yih1Xyk7dmFyIGhfPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChoYik7Y29uc3QgZl89d2IoaF8pO3ZhciBkXz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoaGIpO2NvbnN0IHBfPXdiKGRfKTt2YXIgeV89bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKGhiKTtjb25zdCBnXz13Yih5Xyk7dmFyIG1fPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChoYik7Y29uc3Qgdl89d2IobV8pO3ZhciBiXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoaGIpO2NvbnN0IF9fPXdiKGJfKTt2YXIgeF89bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKGhiKTtjb25zdCB3Xz13Yih4Xyk7ZnVuY3Rpb24ga18odCl7cmV0dXJuIHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgtNC41NC10KigzNS4zNC10KigyMzgxLjczLXQqKDY0MDIuNy10Kig3MDI0LjcyLTI3MTAuNTcqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDMyLjQ5K3QqKDE3MC43Myt0Kig1Mi44Mi10KigxMzEuNDYtdCooMTc2LjU4LTY3LjM3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCg4MS4yNCt0Kig0NDIuMzYtdCooMjQ4Mi40My10Kig2MTY3LjI0LXQqKDY2MTQuOTQtMjQ3NS42Nyp0KSkpKSkpKSsiKSJ9Y29uc3QgVF89VXAoSGEoMzAwLC41LDApLEhhKC0yNDAsLjUsMSkpO3ZhciBFXz1VcChIYSgtMTAwLC43NSwuMzUpLEhhKDgwLDEuNSwuOCkpLENfPVVwKEhhKDI2MCwuNzUsLjM1KSxIYSg4MCwxLjUsLjgpKSxTXz1IYSgpO2Z1bmN0aW9uIEFfKHQpeyh0PDB8fHQ+MSkmJih0LT1NYXRoLmZsb29yKHQpKTt2YXIgZT1NYXRoLmFicyh0LS41KTtyZXR1cm4gU18uaD0zNjAqdC0xMDAsU18ucz0xLjUtMS41KmUsU18ubD0uOC0uOSplLFNfKyIifXZhciBNXz1RZSgpLE5fPU1hdGguUEkvMyxEXz0yKk1hdGguUEkvMztmdW5jdGlvbiBPXyh0KXt2YXIgZTtyZXR1cm4gdD0oLjUtdCkqTWF0aC5QSSxNXy5yPTI1NSooZT1NYXRoLnNpbih0KSkqZSxNXy5nPTI1NSooZT1NYXRoLnNpbih0K05fKSkqZSxNXy5iPTI1NSooZT1NYXRoLnNpbih0K0RfKSkqZSxNXysiIn1mdW5jdGlvbiBCXyh0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK3QqKDExNzIuMzMtdCooMTA3OTMuNTYtdCooMzMzMDAuMTItdCooMzgzOTQuNDktMTQ4MjUuMDUqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK3QqKDU1Ny4zMyt0KigxMjI1LjMzLXQqKDM1NzQuOTYtdCooMTA3My43Nys3MDcuNTYqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrdCooMzIxMS4xLXQqKDE1MzI3Ljk3LXQqKDI3ODE0LXQqKDIyNTY5LjE4LTY4MzguNjYqdCkpKSkpKSkrIikifWZ1bmN0aW9uIExfKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fWNvbnN0IElfPUxfKGhiKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSk7dmFyIFJfPUxfKGhiKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksRl89TF8oaGIoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxQXz1MXyhoYigiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO2Z1bmN0aW9uIGpfKHQpe3JldHVybiBUZShpZSh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBZXz0wO2Z1bmN0aW9uIHpfKCl7cmV0dXJuIG5ldyBVX31mdW5jdGlvbiBVXygpe3RoaXMuXz0iQCIrKCsrWV8pLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBxXyh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IHhlKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhlKFtudWxsPT10P1tdOnRdLF9lKX1mdW5jdGlvbiBIXyh0LGUpe251bGw9PWUmJihlPU5uKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAscj1lP2UubGVuZ3RoOjAsaT1uZXcgQXJyYXkocik7bjxyOysrbilpW25dPURuKHQsZVtuXSk7cmV0dXJuIGl9ZnVuY3Rpb24gJF8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fVVfLnByb3RvdHlwZT16Xy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVfLGdldDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fOyEoZSBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W2VdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFt0aGlzLl9dPWV9LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBXXz1NYXRoLmFicyxWXz1NYXRoLmF0YW4yLEdfPU1hdGguY29zLFhfPU1hdGgubWF4LFpfPU1hdGgubWluLFFfPU1hdGguc2luLEtfPU1hdGguc3FydCxKXz0xZS0xMix0eD1NYXRoLlBJLGV4PXR4LzIsbng9Mip0eDtmdW5jdGlvbiByeCh0KXtyZXR1cm4gdD4xPzA6dDwtMT90eDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gaXgodCl7cmV0dXJuIHQ+PTE/ZXg6dDw9LTE/LWV4Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBheCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBveCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBzeCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIGN4KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHV4KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGx4KHQsZSxuLHIsaSxhLG8scyl7dmFyIGM9bi10LHU9ci1lLGw9by1pLGg9cy1hLGY9aCpjLWwqdTtpZighKGYqZjxKXykpcmV0dXJuW3QrKGY9KGwqKGUtYSktaCoodC1pKSkvZikqYyxlK2YqdV19ZnVuY3Rpb24gaHgodCxlLG4scixpLGEsbyl7dmFyIHM9dC1uLGM9ZS1yLHU9KG8/YTotYSkvS18ocypzK2MqYyksbD11KmMsaD0tdSpzLGY9dCtsLGQ9ZStoLHA9bitsLHk9citoLGc9KGYrcCkvMixtPShkK3kpLzIsdj1wLWYsYj15LWQsXz12KnYrYipiLHg9aS1hLHc9Zip5LXAqZCxrPShiPDA/LTE6MSkqS18oWF8oMCx4KngqXy13KncpKSxUPSh3KmItdiprKS9fLEU9KC13KnYtYiprKS9fLEM9KHcqYit2KmspL18sUz0oLXcqditiKmspL18sQT1ULWcsTT1FLW0sTj1DLWcsRD1TLW07cmV0dXJuIEEqQStNKk0+TipOK0QqRCYmKFQ9QyxFPVMpLHtjeDpULGN5OkUseDAxOi1sLHkwMTotaCx4MTE6VCooaS94LTEpLHkxMTpFKihpL3gtMSl9fWZ1bmN0aW9uIGZ4KCl7dmFyIHQ9YXgsZT1veCxuPSRfKDApLHI9bnVsbCxpPXN4LGE9Y3gsbz11eCxzPW51bGw7ZnVuY3Rpb24gYygpe3ZhciBjLHUsbD0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1leCxkPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLWV4LHA9V18oZC1mKSx5PWQ+ZjtpZihzfHwocz1jPVdpKCkpLGg8bCYmKHU9aCxoPWwsbD11KSxoPkpfKWlmKHA+bngtSl8pcy5tb3ZlVG8oaCpHXyhmKSxoKlFfKGYpKSxzLmFyYygwLDAsaCxmLGQsIXkpLGw+Sl8mJihzLm1vdmVUbyhsKkdfKGQpLGwqUV8oZCkpLHMuYXJjKDAsMCxsLGQsZix5KSk7ZWxzZXt2YXIgZyxtLHY9ZixiPWQsXz1mLHg9ZCx3PXAsaz1wLFQ9by5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixFPVQ+Sl8mJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpLXyhsKmwraCpoKSksQz1aXyhXXyhoLWwpLzIsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxTPUMsQT1DO2lmKEU+Sl8pe3ZhciBNPWl4KEUvbCpRXyhUKSksTj1peChFL2gqUV8oVCkpOyh3LT0yKk0pPkpfPyhfKz1NKj15PzE6LTEseC09TSk6KHc9MCxfPXg9KGYrZCkvMiksKGstPTIqTik+Sl8/KHYrPU4qPXk/MTotMSxiLT1OKTooaz0wLHY9Yj0oZitkKS8yKX12YXIgRD1oKkdfKHYpLE89aCpRXyh2KSxCPWwqR18oeCksTD1sKlFfKHgpO2lmKEM+Sl8pe3ZhciBJLFI9aCpHXyhiKSxGPWgqUV8oYiksUD1sKkdfKF8pLGo9bCpRXyhfKTtpZihwPHR4JiYoST1seChELE8sUCxqLFIsRixCLEwpKSl7dmFyIFk9RC1JWzBdLHo9Ty1JWzFdLFU9Ui1JWzBdLHE9Ri1JWzFdLEg9MS9RXyhyeCgoWSpVK3oqcSkvKEtfKFkqWSt6KnopKktfKFUqVStxKnEpKSkvMiksJD1LXyhJWzBdKklbMF0rSVsxXSpJWzFdKTtTPVpfKEMsKGwtJCkvKEgtMSkpLEE9Wl8oQywoaC0kKS8oSCsxKSl9fWs+Sl8/QT5KXz8oZz1oeChQLGosRCxPLGgsQSx5KSxtPWh4KFIsRixCLEwsaCxBLHkpLHMubW92ZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksQTxDP3MuYXJjKGcuY3gsZy5jeSxBLFZfKGcueTAxLGcueDAxKSxWXyhtLnkwMSxtLngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksQSxWXyhnLnkwMSxnLngwMSksVl8oZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsaCxWXyhnLmN5K2cueTExLGcuY3grZy54MTEpLFZfKG0uY3krbS55MTEsbS5jeCttLngxMSksIXkpLHMuYXJjKG0uY3gsbS5jeSxBLFZfKG0ueTExLG0ueDExKSxWXyhtLnkwMSxtLngwMSksIXkpKSk6KHMubW92ZVRvKEQsTykscy5hcmMoMCwwLGgsdixiLCF5KSk6cy5tb3ZlVG8oRCxPKSxsPkpfJiZ3PkpfP1M+Sl8/KGc9aHgoQixMLFIsRixsLC1TLHkpLG09aHgoRCxPLFAsaixsLC1TLHkpLHMubGluZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksUzxDP3MuYXJjKGcuY3gsZy5jeSxTLFZfKGcueTAxLGcueDAxKSxWXyhtLnkwMSxtLngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksUyxWXyhnLnkwMSxnLngwMSksVl8oZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsbCxWXyhnLmN5K2cueTExLGcuY3grZy54MTEpLFZfKG0uY3krbS55MTEsbS5jeCttLngxMSkseSkscy5hcmMobS5jeCxtLmN5LFMsVl8obS55MTEsbS54MTEpLFZfKG0ueTAxLG0ueDAxKSwheSkpKTpzLmFyYygwLDAsbCx4LF8seSk6cy5saW5lVG8oQixMKX1lbHNlIHMubW92ZVRvKDAsMCk7aWYocy5jbG9zZVBhdGgoKSxjKXJldHVybiBzPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBuPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi10eC8yO3JldHVybltHXyhyKSpuLFFfKHIpKm5dfSxjLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JF8oK2UpLGMpOnR9LGMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksYyk6ZX0sYy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksYyk6bn0sYy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGMpOnJ9LGMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxjKTppfSxjLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGMpOmF9LGMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksYyk6b30sYy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGMpOnN9LGN9ZnVuY3Rpb24gZHgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHB4KHQpe3JldHVybiBuZXcgZHgodCl9ZnVuY3Rpb24geXgodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gZ3godCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gbXgoKXt2YXIgdD15eCxlPWd4LG49JF8oITApLHI9bnVsbCxpPXB4LGE9bnVsbDtmdW5jdGlvbiBvKG8pe3ZhciBzLGMsdSxsPW8ubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PXImJihhPWkodT1XaSgpKSkscz0wO3M8PWw7KytzKSEoczxsJiZuKGM9b1tzXSxzLG8pKT09PWgmJigoaD0haCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSksaCYmYS5wb2ludCgrdChjLHMsbyksK2UoYyxzLG8pKTtpZih1KXJldHVybiBhPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JF8oK2UpLG8pOnR9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxvKTplfSxvLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXyghIXQpLG8pOm59LG8uY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYoYT1pKHIpKSxvKTppfSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1hPW51bGw6YT1pKHI9dCksbyk6cn0sb31mdW5jdGlvbiB2eCgpe3ZhciB0PXl4LGU9bnVsbCxuPSRfKDApLHI9Z3gsaT0kXyghMCksYT1udWxsLG89cHgscz1udWxsO2Z1bmN0aW9uIGMoYyl7dmFyIHUsbCxoLGYsZCxwPWMubGVuZ3RoLHk9ITEsZz1uZXcgQXJyYXkocCksbT1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PWEmJihzPW8oZD1XaSgpKSksdT0wO3U8PXA7Kyt1KXtpZighKHU8cCYmaShmPWNbdV0sdSxjKSk9PT15KWlmKHk9IXkpbD11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9dS0xO2g+PWw7LS1oKXMucG9pbnQoZ1toXSxtW2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX15JiYoZ1t1XT0rdChmLHUsYyksbVt1XT0rbihmLHUsYykscy5wb2ludChlPytlKGYsdSxjKTpnW3VdLHI/K3IoZix1LGMpOm1bdV0pKX1pZihkKXJldHVybiBzPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIG14KCkuZGVmaW5lZChpKS5jdXJ2ZShvKS5jb250ZXh0KGEpfXJldHVybiBjLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjokXygrbiksZT1udWxsLGMpOnR9LGMueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTokXygrZSksYyk6dH0sYy54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksYyk6ZX0sYy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLHI9bnVsbCxjKTpufSxjLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGMpOm59LGMueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGMpOnJ9LGMubGluZVgwPWMubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGMubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGMubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCEhdCksYyk6aX0sYy5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxjKTphfSxjfWZ1bmN0aW9uIGJ4KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIF94KHQpe3JldHVybiB0fWZ1bmN0aW9uIHh4KCl7dmFyIHQ9X3gsZT1ieCxuPW51bGwscj0kXygwKSxpPSRfKG54KSxhPSRfKDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPW8ubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShmKSx5PW5ldyBBcnJheShmKSxnPStyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxtPU1hdGgubWluKG54LE1hdGgubWF4KC1ueCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSksdj1NYXRoLm1pbihNYXRoLmFicyhtKS9mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPXYqKG08MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9eVtwW3NdPXNdPSt0KG9bc10scyxvKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP3Auc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh5W3RdLHlbbl0pfSkpOm51bGwhPW4mJnAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihvW3RdLG9bZV0pfSkpLHM9MCx1PWQ/KG0tZipiKS9kOjA7czxmOysrcyxnPWwpYz1wW3NdLGw9ZysoKGg9eVtjXSk+MD9oKnU6MCkrYix5W2NdPXtkYXRhOm9bY10saW5kZXg6cyx2YWx1ZTpoLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpsLHBhZEFuZ2xlOnZ9O3JldHVybiB5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JF8oK2UpLG8pOnR9LG8uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxvKTphfSxvfWR4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciB3eD1UeChweCk7ZnVuY3Rpb24ga3godCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBUeCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcga3godChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBFeCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShUeCh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBDeCgpe3JldHVybiBFeChteCgpLmN1cnZlKHd4KSl9ZnVuY3Rpb24gU3goKXt2YXIgdD12eCgpLmN1cnZlKHd4KSxlPXQuY3VydmUsbj10LmxpbmVYMCxyPXQubGluZVgxLGk9dC5saW5lWTAsYT10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIEV4KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBFeChyKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gRXgoaSgpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEV4KGEoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoVHgodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gQXgodCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19a3gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgTXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIE54KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBEeCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gT3godCl7dmFyIGU9Tngsbj1EeCxyPXl4LGk9Z3gsYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPU14LmNhbGwoYXJndW1lbnRzKSxjPWUuYXBwbHkodGhpcyxzKSx1PW4uYXBwbHkodGhpcyxzKTtpZihhfHwoYT1vPVdpKCkpLHQoYSwrci5hcHBseSh0aGlzLChzWzBdPWMscykpLCtpLmFwcGx5KHRoaXMscyksK3IuYXBwbHkodGhpcywoc1swXT11LHMpKSwraS5hcHBseSh0aGlzLHMpKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxvKTpyfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99ZnVuY3Rpb24gQngodCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK3IpLzIsbixlLGkscixpKX1mdW5jdGlvbiBMeCh0LGUsbixyLGkpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obitpKS8yLHIsbixyLGkpfWZ1bmN0aW9uIEl4KHQsZSxuLHIsaSl7dmFyIGE9QXgoZSxuKSxvPUF4KGUsbj0obitpKS8yKSxzPUF4KHIsbiksYz1BeChyLGkpO3QubW92ZVRvKGFbMF0sYVsxXSksdC5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sY1swXSxjWzFdKX1mdW5jdGlvbiBSeCgpe3JldHVybiBPeChCeCl9ZnVuY3Rpb24gRngoKXtyZXR1cm4gT3goTHgpfWZ1bmN0aW9uIFB4KCl7dmFyIHQ9T3goSXgpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9Y29uc3Qgang9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS90eCk7dC5tb3ZlVG8obiwwKSx0LmFyYygwLDAsbiwwLG54KX19LFl4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypuLC1uKSx0LmxpbmVUbygtbiwtbiksdC5saW5lVG8oLW4sLTMqbiksdC5saW5lVG8obiwtMypuKSx0LmxpbmVUbyhuLC1uKSx0LmxpbmVUbygzKm4sLW4pLHQubGluZVRvKDMqbixuKSx0LmxpbmVUbyhuLG4pLHQubGluZVRvKG4sMypuKSx0LmxpbmVUbygtbiwzKm4pLHQubGluZVRvKC1uLG4pLHQubGluZVRvKC0zKm4sbiksdC5jbG9zZVBhdGgoKX19O3ZhciB6eD1NYXRoLnNxcnQoMS8zKSxVeD0yKnp4O2NvbnN0IHF4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvVXgpLHI9bip6eDt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19O3ZhciBIeD1NYXRoLnNpbih0eC8xMCkvTWF0aC5zaW4oNyp0eC8xMCksJHg9TWF0aC5zaW4obngvMTApKkh4LFd4PS1NYXRoLmNvcyhueC8xMCkqSHg7Y29uc3QgVng9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSkscj0keCpuLGk9V3gqbjt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLGkpO2Zvcih2YXIgYT0xO2E8NTsrK2Epe3ZhciBvPW54KmEvNSxzPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7dC5saW5lVG8oYypuLC1zKm4pLHQubGluZVRvKHMqci1jKmksYypyK3MqaSl9dC5jbG9zZVBhdGgoKX19LEd4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUpLHI9LW4vMjt0LnJlY3QocixyLG4sbil9fTt2YXIgWHg9TWF0aC5zcXJ0KDMpO2NvbnN0IFp4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49LU1hdGguc3FydChlLygzKlh4KSk7dC5tb3ZlVG8oMCwyKm4pLHQubGluZVRvKC1YeCpuLC1uKSx0LmxpbmVUbyhYeCpuLC1uKSx0LmNsb3NlUGF0aCgpfX07dmFyIFF4PS0uNSxLeD1NYXRoLnNxcnQoMykvMixKeD0xL01hdGguc3FydCgxMiksdHc9MyooSngvMisxKTtjb25zdCBldz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL3R3KSxyPW4vMixpPW4qSngsYT1yLG89bipKeCtuLHM9LWEsYz1vO3QubW92ZVRvKHIsaSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGMpLHQubGluZVRvKFF4KnItS3gqaSxLeCpyK1F4KmkpLHQubGluZVRvKFF4KmEtS3gqbyxLeCphK1F4Km8pLHQubGluZVRvKFF4KnMtS3gqYyxLeCpzK1F4KmMpLHQubGluZVRvKFF4KnIrS3gqaSxReCppLUt4KnIpLHQubGluZVRvKFF4KmErS3gqbyxReCpvLUt4KmEpLHQubGluZVRvKFF4KnMrS3gqYyxReCpjLUt4KnMpLHQuY2xvc2VQYXRoKCl9fTt2YXIgbnc9W2p4LFl4LHF4LEd4LFZ4LFp4LGV3XTtmdW5jdGlvbiBydygpe3ZhciB0PSRfKGp4KSxlPSRfKDY0KSxuPW51bGw7ZnVuY3Rpb24gcigpe3ZhciByO2lmKG58fChuPXI9V2koKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhuLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gbj1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIHIudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOiRfKGUpLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxyKTplfSxyLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOnQscik6bn0scn1mdW5jdGlvbiBpdygpe31mdW5jdGlvbiBhdyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gb3codCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHN3KHQpe3JldHVybiBuZXcgb3codCl9ZnVuY3Rpb24gY3codCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV3KHQpe3JldHVybiBuZXcgY3codCl9ZnVuY3Rpb24gbHcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGh3KHQpe3JldHVybiBuZXcgbHcodCl9ZnVuY3Rpb24gZncodCxlKXt0aGlzLl9iYXNpcz1uZXcgb3codCksdGhpcy5fYmV0YT1lfW93LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6YXcodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6YXcodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGN3LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OmF3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxsdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgbj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LHI9KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKG4scik6dGhpcy5fY29udGV4dC5tb3ZlVG8obixyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmF3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxhPWVbMF0sbz10W25dLWkscz1lW25dLWEsYz0tMTsrK2M8PW47KXI9Yy9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKm8pLHRoaXMuX2JldGEqZVtjXSsoMS10aGlzLl9iZXRhKSooYStyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07Y29uc3QgZHc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgb3codCk6bmV3IGZ3KHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC44NSk7ZnVuY3Rpb24gcHcodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLW4pLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB5dyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9eXcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnB3KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpwdyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07Y29uc3QgZ3c9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgeXcodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gbXcodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fW13LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpwdyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07Y29uc3Qgdnc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgbXcodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gYncodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWJ3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OnB3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBfdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBidyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiB4dyh0LGUsbil7dmFyIHI9dC5feDEsaT10Ll95MSxhPXQuX3gyLG89dC5feTI7aWYodC5fbDAxX2E+Sl8pe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9jLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9jfWlmKHQuX2wyM19hPkpfKXt2YXIgdT0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKnUrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9sLG89KG8qdSt0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2x9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxhLG8sdC5feDIsdC5feTIpfWZ1bmN0aW9uIHd3KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9d3cucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp4dyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O2NvbnN0IGt3PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgd3codCxlKTpuZXcgeXcodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBUdyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVR3LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6eHcodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBFdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFR3KHQsZSk6bmV3IG13KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gQ3codCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1Ddy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6eHcodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBTdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IEN3KHQsZSk6bmV3IGJ3KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gQXcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE13KHQpe3JldHVybiBuZXcgQXcodCl9ZnVuY3Rpb24gTncodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIER3KHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxvPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0oYSppK28qcikvKHIraSk7cmV0dXJuKE53KGEpK053KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gT3codCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIEJ3KHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrcyxpK3MqZSxhLXMsby1zKm4sYSxvKX1mdW5jdGlvbiBMdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSXcodCl7dGhpcy5fY29udGV4dD1uZXcgUncodCl9ZnVuY3Rpb24gUncodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZ3KHQpe3JldHVybiBuZXcgTHcodCl9ZnVuY3Rpb24gUHcodCl7cmV0dXJuIG5ldyBJdyh0KX1mdW5jdGlvbiBqdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWXcodCl7dmFyIGUsbixyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxhWzBdPTIsb1swXT10WzBdKzIqdFsxXSxlPTE7ZTxyLTE7KytlKWlbZV09MSxhW2VdPTQsb1tlXT00KnRbZV0rMip0W2UrMV07Zm9yKGlbci0xXT0yLGFbci0xXT03LG9bci0xXT04KnRbci0xXSt0W3JdLGU9MTtlPHI7KytlKW49aVtlXS9hW2UtMV0sYVtlXS09bixvW2VdLT1uKm9bZS0xXTtmb3IoaVtyLTFdPW9bci0xXS9hW3ItMV0sZT1yLTI7ZT49MDstLWUpaVtlXT0ob1tlXS1pW2UrMV0pL2FbZV07Zm9yKGFbci0xXT0odFtyXStpW3ItMV0pLzIsZT0wO2U8ci0xOysrZSlhW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxhXX1mdW5jdGlvbiB6dyh0KXtyZXR1cm4gbmV3IGp3KHQpfWZ1bmN0aW9uIFV3KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBxdyh0KXtyZXR1cm4gbmV3IFV3KHQsLjUpfWZ1bmN0aW9uIEh3KHQpe3JldHVybiBuZXcgVXcodCwwKX1mdW5jdGlvbiAkdyh0KXtyZXR1cm4gbmV3IFV3KHQsMSl9ZnVuY3Rpb24gV3codCxlKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIG4scixpLGE9MSxvPXRbZVswXV0scz1vLmxlbmd0aDthPGk7KythKWZvcihyPW8sbz10W2VbYV1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4ocltuXVsxXSk/cltuXVswXTpyW25dWzFdfWZ1bmN0aW9uIFZ3KHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBHdyh0LGUpe3JldHVybiB0W2VdfWZ1bmN0aW9uIFh3KCl7dmFyIHQ9JF8oW10pLGU9Vncsbj1XdyxyPUd3O2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9aS5sZW5ndGgsdT1zLmxlbmd0aCxsPW5ldyBBcnJheSh1KTtmb3IoYT0wO2E8dTsrK2Epe2Zvcih2YXIgaCxmPXNbYV0sZD1sW2FdPW5ldyBBcnJheShjKSxwPTA7cDxjOysrcClkW3BdPWg9WzAsK3IoaVtwXSxmLHAsaSldLGguZGF0YT1pW3BdO2Qua2V5PWZ9Zm9yKGE9MCxvPWUobCk7YTx1OysrYSlsW29bYV1dLmluZGV4PWE7cmV0dXJuIG4obCxvKSxsfXJldHVybiBpLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTokXyhNeC5jYWxsKGUpKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9WdzoiZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKE14LmNhbGwodCkpLGkpOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/V3c6dCxpKTpufSxpfWZ1bmN0aW9uIFp3KHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9bj0wO248cjsrK24paSs9dFtuXVthXVsxXXx8MDtpZihpKWZvcihuPTA7bjxyOysrbil0W25dW2FdWzFdLz1pfVd3KHQsZSl9fWZ1bmN0aW9uIFF3KHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciBuLHIsaSxhLG8scyxjPTAsdT10W2VbMF1dLmxlbmd0aDtjPHU7KytjKWZvcihhPW89MCxuPTA7bjxzOysrbikoaT0ocj10W2Vbbl1dW2NdKVsxXS1yWzBdKT4wPyhyWzBdPWEsclsxXT1hKz1pKTppPDA/KHJbMV09byxyWzBdPW8rPWkpOihyWzBdPTAsclsxXT1pKX1mdW5jdGlvbiBLdyh0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO3I8YTsrK3Ipe2Zvcih2YXIgbz0wLHM9MDtvPG47KytvKXMrPXRbb11bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tcy8yfVd3KHQsZSl9fWZ1bmN0aW9uIEp3KHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLHIsaSxhPTAsbz0xO288cjsrK28pe2Zvcih2YXIgcz0wLGM9MCx1PTA7czxpOysrcyl7Zm9yKHZhciBsPXRbZVtzXV0saD1sW29dWzFdfHwwLGY9KGgtKGxbby0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07Zis9KHBbb11bMV18fDApLShwW28tMV1bMV18fDApfWMrPWgsdSs9ZipofW5bby0xXVsxXSs9bltvLTFdWzBdPWEsYyYmKGEtPXUvYyl9bltvLTFdWzFdKz1uW28tMV1bMF09YSxXdyh0LGUpfX1mdW5jdGlvbiB0ayh0KXt2YXIgZT10Lm1hcChlayk7cmV0dXJuIFZ3KHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBlayh0KXtmb3IodmFyIGUsbj0tMSxyPTAsaT10Lmxlbmd0aCxhPS0xLzA7KytuPGk7KShlPSt0W25dWzFdKT5hJiYoYT1lLHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gbmsodCl7dmFyIGU9dC5tYXAocmspO3JldHVybiBWdyh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9ZnVuY3Rpb24gcmsodCl7Zm9yKHZhciBlLG49MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShlPSt0W3JdWzFdKSYmKG4rPWUpO3JldHVybiBufWZ1bmN0aW9uIGlrKHQpe3JldHVybiBuayh0KS5yZXZlcnNlKCl9ZnVuY3Rpb24gYWsodCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAocmspLGE9dGsodCksbz0wLHM9MCxjPVtdLHU9W107Zm9yKGU9MDtlPHI7KytlKW49YVtlXSxvPHM/KG8rPWlbbl0sYy5wdXNoKG4pKToocys9aVtuXSx1LnB1c2gobikpO3JldHVybiB1LnJldmVyc2UoKS5jb25jYXQoYyl9ZnVuY3Rpb24gb2sodCl7cmV0dXJuIFZ3KHQpLnJldmVyc2UoKX1Bdy5wcm90b3R5cGU9e2FyZWFTdGFydDppdyxhcmVhRW5kOml3LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19LEx3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpCdyh0aGlzLHRoaXMuX3QwLE93KHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxCdyh0aGlzLE93KHRoaXMsbj1Edyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6QncodGhpcyx0aGlzLl90MCxuPUR3KHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKEl3LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEx3LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7THcucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxSdy5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxqdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1Zdyh0KSxpPVl3KGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxVdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fTt2YXIgc2s9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIsY2s9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06Z20oc2spO2NvbnN0IHVrPWNrO3ZhciBsaz0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9Om1tKHNrKTtjb25zdCBoaz1saztmdW5jdGlvbiBmayh0LGUsbil7dmFyIHI9bmV3IFduLGk9ZTtyZXR1cm4gbnVsbD09ZT8oci5yZXN0YXJ0KHQsZSxuKSxyKTooZT0rZSxuPW51bGw9PW4/SG4oKTorbixyLnJlc3RhcnQoKGZ1bmN0aW9uIGEobyl7bys9aSxyLnJlc3RhcnQoYSxpKz1lLG4pLHQobyl9KSxlLG4pLHIpfWZ1bmN0aW9uIGRrKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBwayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5ayh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBnaygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIG1rKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gdmsodCxlKXt2YXIgbj1lLHI9ZS5SLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLlI9ci5MLG4uUiYmKG4uUi5VPW4pLHIuTD1ufWZ1bmN0aW9uIGJrKHQsZSl7dmFyIG49ZSxyPWUuTCxpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5MPXIuUixuLkwmJihuLkwuVT1uKSxyLlI9bn1mdW5jdGlvbiBfayh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9Z2sucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpnayxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7bj10fWVsc2UgdGhpcy5fPyh0PV9rKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLG49dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxuPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPW4sZS5DPSEwLHQ9ZTtuJiZuLkM7KW49PT0ocj1uLlUpLkw/KGk9ci5SKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5SJiYodmsodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsYmsodGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5MJiYoYmsodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsdmsodGhpcyxyKSksbj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLG4scixpPXQuVSxhPXQuTCxvPXQuUjtpZihuPWE/bz9fayhvKTphOm8saT9pLkw9PT10P2kuTD1uOmkuUj1uOnRoaXMuXz1uLGEmJm8/KHI9bi5DLG4uQz10LkMsbi5MPWEsYS5VPW4sbiE9PW8/KGk9bi5VLG4uVT10LlUsdD1uLlIsaS5MPXQsbi5SPW8sby5VPW4pOihuLlU9aSxpPW4sdD1uLlIpKToocj10LkMsdD1uKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsdmsodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxiayh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSx2ayh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsYmsodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCx2ayh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxiayh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07Y29uc3QgeGs9Z2s7ZnVuY3Rpb24gd2sodCxlLG4scil7dmFyIGk9W251bGwsbnVsbF0sYT1Xay5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9ZSxuJiZUayhpLHQsZSxuKSxyJiZUayhpLGUsdCxyKSxIa1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxIa1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxpfWZ1bmN0aW9uIGtrKHQsZSxuKXt2YXIgcj1bZSxuXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBUayh0LGUsbixyKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gRWsodCxlLG4scixpKXt2YXIgYSxvPXRbMF0scz10WzFdLGM9b1swXSx1PW9bMV0sbD0wLGg9MSxmPXNbMF0tYyxkPXNbMV0tdTtpZihhPWUtYyxmfHwhKGE+MCkpe2lmKGEvPWYsZjwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihmPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPXItYyxmfHwhKGE8MCkpe2lmKGEvPWYsZjwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihmPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1pZihhPW4tdSxkfHwhKGE+MCkpe2lmKGEvPWQsZDwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihkPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPWktdSxkfHwhKGE8MCkpe2lmKGEvPWQsZDwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihkPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1yZXR1cm4hKGw+MHx8aDwxKXx8KGw+MCYmKHRbMF09W2MrbCpmLHUrbCpkXSksaDwxJiYodFsxXT1bYytoKmYsdStoKmRdKSwhMCl9fX19fWZ1bmN0aW9uIENrKHQsZSxuLHIsaSl7dmFyIGE9dFsxXTtpZihhKXJldHVybiEwO3ZhciBvLHMsYz10WzBdLHU9dC5sZWZ0LGw9dC5yaWdodCxoPXVbMF0sZj11WzFdLGQ9bFswXSxwPWxbMV0seT0oaCtkKS8yLGc9KGYrcCkvMjtpZihwPT09Zil7aWYoeTxlfHx5Pj1yKXJldHVybjtpZihoPmQpe2lmKGMpe2lmKGNbMV0+PWkpcmV0dXJufWVsc2UgYz1beSxuXTthPVt5LGldfWVsc2V7aWYoYyl7aWYoY1sxXTxuKXJldHVybn1lbHNlIGM9W3ksaV07YT1beSxuXX19ZWxzZSBpZihzPWctKG89KGgtZCkvKHAtZikpKnksbzwtMXx8bz4xKWlmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVsobi1zKS9vLG5dO2E9WyhpLXMpL28saV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1bKGktcykvbyxpXTthPVsobi1zKS9vLG5dfWVsc2UgaWYoZjxwKXtpZihjKXtpZihjWzBdPj1yKXJldHVybn1lbHNlIGM9W2UsbyplK3NdO2E9W3IsbypyK3NdfWVsc2V7aWYoYyl7aWYoY1swXTxlKXJldHVybn1lbHNlIGM9W3IsbypyK3NdO2E9W2UsbyplK3NdfXJldHVybiB0WzBdPWMsdFsxXT1hLCEwfWZ1bmN0aW9uIFNrKHQsZSl7dmFyIG49dC5zaXRlLHI9ZS5sZWZ0LGk9ZS5yaWdodDtyZXR1cm4gbj09PWkmJihpPXIscj1uKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KG49PT1yPyhyPWVbMV0saT1lWzBdKToocj1lWzBdLGk9ZVsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gQWsodCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIE1rKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgTmssRGs9W107ZnVuY3Rpb24gT2soKXttayh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gQmsodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciByPWUuc2l0ZSxpPXQuc2l0ZSxhPW4uc2l0ZTtpZihyIT09YSl7dmFyIG89aVswXSxzPWlbMV0sYz1yWzBdLW8sdT1yWzFdLXMsbD1hWzBdLW8saD1hWzFdLXMsZj0yKihjKmgtdSpsKTtpZighKGY+PS1Haykpe3ZhciBkPWMqYyt1KnUscD1sKmwraCpoLHk9KGgqZC11KnApL2YsZz0oYypwLWwqZCkvZixtPURrLnBvcCgpfHxuZXcgT2s7bS5hcmM9dCxtLnNpdGU9aSxtLng9eStvLG0ueT0obS5jeT1nK3MpK01hdGguc3FydCh5KnkrZypnKSx0LmNpcmNsZT1tO2Zvcih2YXIgdj1udWxsLGI9JGsuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KXtpZighYi5MKXt2PWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe3Y9YjticmVha31iPWIuUn0kay5pbnNlcnQodixtKSx2fHwoTms9bSl9fX19ZnVuY3Rpb24gTGsodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KE5rPWUuTiksJGsucmVtb3ZlKGUpLERrLnB1c2goZSksbWsoZSksdC5jaXJjbGU9bnVsbCl9dmFyIElrPVtdO2Z1bmN0aW9uIFJrKCl7bWsodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEZrKHQpe3ZhciBlPUlrLnBvcCgpfHxuZXcgUms7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gUGsodCl7TGsodCkscWsucmVtb3ZlKHQpLElrLnB1c2godCksbWsodCl9ZnVuY3Rpb24gamsodCl7dmFyIGU9dC5jaXJjbGUsbj1lLngscj1lLmN5LGk9W24scl0sYT10LlAsbz10Lk4scz1bdF07UGsodCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKG4tYy5jaXJjbGUueCk8VmsmJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPFZrOylhPWMuUCxzLnVuc2hpZnQoYyksUGsoYyksYz1hO3MudW5zaGlmdChjKSxMayhjKTtmb3IodmFyIHU9bzt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxWayYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8Vms7KW89dS5OLHMucHVzaCh1KSxQayh1KSx1PW87cy5wdXNoKHUpLExrKHUpO3ZhciBsLGg9cy5sZW5ndGg7Zm9yKGw9MTtsPGg7KytsKXU9c1tsXSxjPXNbbC0xXSxUayh1LmVkZ2UsYy5zaXRlLHUuc2l0ZSxpKTtjPXNbMF0sKHU9c1toLTFdKS5lZGdlPXdrKGMuc2l0ZSx1LnNpdGUsbnVsbCxpKSxCayhjKSxCayh1KX1mdW5jdGlvbiBZayh0KXtmb3IodmFyIGUsbixyLGksYT10WzBdLG89dFsxXSxzPXFrLl87czspaWYoKHI9emsocyxvKS1hKT5WaylzPXMuTDtlbHNle2lmKCEoKGk9YS1VayhzLG8pKT5Waykpe3I+LVZrPyhlPXMuUCxuPXMpOmk+LVZrPyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hZnVuY3Rpb24odCl7SGtbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgYz1Gayh0KTtpZihxay5pbnNlcnQoZSxjKSxlfHxuKXtpZihlPT09bilyZXR1cm4gTGsoZSksbj1GayhlLnNpdGUpLHFrLmluc2VydChjLG4pLGMuZWRnZT1uLmVkZ2U9d2soZS5zaXRlLGMuc2l0ZSksQmsoZSksdm9pZCBCayhuKTtpZihuKXtMayhlKSxMayhuKTt2YXIgdT1lLnNpdGUsbD11WzBdLGg9dVsxXSxmPXRbMF0tbCxkPXRbMV0taCxwPW4uc2l0ZSx5PXBbMF0tbCxnPXBbMV0taCxtPTIqKGYqZy1kKnkpLHY9ZipmK2QqZCxiPXkqeStnKmcsXz1bKGcqdi1kKmIpL20rbCwoZipiLXkqdikvbStoXTtUayhuLmVkZ2UsdSxwLF8pLGMuZWRnZT13ayh1LHQsbnVsbCxfKSxuLmVkZ2U9d2sodCxwLG51bGwsXyksQmsoZSksQmsobil9ZWxzZSBjLmVkZ2U9d2soZS5zaXRlLGMuc2l0ZSl9fWZ1bmN0aW9uIHprKHQsZSl7dmFyIG49dC5zaXRlLHI9blswXSxpPW5bMV0sYT1pLWU7aWYoIWEpcmV0dXJuIHI7dmFyIG89dC5QO2lmKCFvKXJldHVybi0xLzA7dmFyIHM9KG49by5zaXRlKVswXSxjPW5bMV0sdT1jLWU7aWYoIXUpcmV0dXJuIHM7dmFyIGw9cy1yLGg9MS9hLTEvdSxmPWwvdTtyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKGwqbC8oLTIqdSktYyt1LzIraS1hLzIpKSkvaCtyOihyK3MpLzJ9ZnVuY3Rpb24gVWsodCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gemsobixlKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1lP3JbMF06MS8wfXZhciBxayxIaywkayxXayxWaz0xZS02LEdrPTFlLTEyO2Z1bmN0aW9uIFhrKHQsZSxuKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS10WzFdKS0odFswXS1lWzBdKSooblsxXS10WzFdKX1mdW5jdGlvbiBaayh0LGUpe3JldHVybiBlWzFdLXRbMV18fGVbMF0tdFswXX1mdW5jdGlvbiBRayh0LGUpe3ZhciBuLHIsaSxhPXQuc29ydChaaykucG9wKCk7Zm9yKFdrPVtdLEhrPW5ldyBBcnJheSh0Lmxlbmd0aCkscWs9bmV3IHhrLCRrPW5ldyB4azs7KWlmKGk9TmssYSYmKCFpfHxhWzFdPGkueXx8YVsxXT09PWkueSYmYVswXTxpLngpKWFbMF09PT1uJiZhWzFdPT09cnx8KFlrKGEpLG49YVswXSxyPWFbMV0pLGE9dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO2prKGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG4scixpPTAsYT1Iay5sZW5ndGg7aTxhOysraSlpZigodD1Ia1tpXSkmJihyPShlPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgbz1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKW9bbl09bixzW25dPVNrKHQsV2tbZVtuXV0pO2ZvcihvLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pKSxuPTA7bjxyOysrbilzW25dPWVbb1tuXV07Zm9yKG49MDtuPHI7KytuKWVbbl09c1tuXX19KCksZSl7dmFyIG89K2VbMF1bMF0scz0rZVswXVsxXSxjPStlWzFdWzBdLHU9K2VbMV1bMV07IWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaSxhPVdrLmxlbmd0aDthLS07KUNrKGk9V2tbYV0sdCxlLG4scikmJkVrKGksdCxlLG4scikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPlZrfHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPlZrKXx8ZGVsZXRlIFdrW2FdfShvLHMsYyx1KSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZCxwLHksZz1Iay5sZW5ndGgsbT0hMDtmb3IoaT0wO2k8ZzsrK2kpaWYoYT1Ia1tpXSl7Zm9yKG89YS5zaXRlLHM9KGM9YS5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KVdrW2Nbc11dfHxjLnNwbGljZShzLDEpO2ZvcihzPTAsdT1jLmxlbmd0aDtzPHU7KXA9KGQ9TWsoYSxXa1tjW3NdXSkpWzBdLHk9ZFsxXSxoPShsPUFrKGEsV2tbY1srK3MldV1dKSlbMF0sZj1sWzFdLChNYXRoLmFicyhwLWgpPlZrfHxNYXRoLmFicyh5LWYpPlZrKSYmKGMuc3BsaWNlKHMsMCxXay5wdXNoKGtrKG8sZCxNYXRoLmFicyhwLXQpPFZrJiZyLXk+Vms/W3QsTWF0aC5hYnMoaC10KTxWaz9mOnJdOk1hdGguYWJzKHktcik8VmsmJm4tcD5Waz9bTWF0aC5hYnMoZi1yKTxWaz9oOm4scl06TWF0aC5hYnMocC1uKTxWayYmeS1lPlZrP1tuLE1hdGguYWJzKGgtbik8Vms/ZjplXTpNYXRoLmFicyh5LWUpPFZrJiZwLXQ+Vms/W01hdGguYWJzKGYtZSk8Vms/aDp0LGVdOm51bGwpKS0xKSwrK3UpO3UmJihtPSExKX1pZihtKXt2YXIgdixiLF8seD0xLzA7Zm9yKGk9MCxtPW51bGw7aTxnOysraSkoYT1Ia1tpXSkmJihfPSh2PShvPWEuc2l0ZSlbMF0tdCkqdisoYj1vWzFdLWUpKmIpPHgmJih4PV8sbT1hKTtpZihtKXt2YXIgdz1bdCxlXSxrPVt0LHJdLFQ9W24scl0sRT1bbixlXTttLmhhbGZlZGdlcy5wdXNoKFdrLnB1c2goa2sobz1tLnNpdGUsdyxrKSktMSxXay5wdXNoKGtrKG8sayxUKSktMSxXay5wdXNoKGtrKG8sVCxFKSktMSxXay5wdXNoKGtrKG8sRSx3KSktMSl9fWZvcihpPTA7aTxnOysraSkoYT1Ia1tpXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBIa1tpXSl9KG8scyxjLHUpfXRoaXMuZWRnZXM9V2ssdGhpcy5jZWxscz1Iayxxaz0kaz1Xaz1Iaz1udWxsfWZ1bmN0aW9uIEtrKCl7dmFyIHQ9cGssZT15ayxuPW51bGw7ZnVuY3Rpb24gcihyKXtyZXR1cm4gbmV3IFFrKHIubWFwKChmdW5jdGlvbihuLGkpe3ZhciBhPVtNYXRoLnJvdW5kKHQobixpLHIpL1ZrKSpWayxNYXRoLnJvdW5kKGUobixpLHIpL1ZrKSpWa107cmV0dXJuIGEuaW5kZXg9aSxhLmRhdGE9bixhfSkpLG4pfXJldHVybiByLnBvbHlnb25zPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLnBvbHlnb25zKCl9LHIubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkubGlua3MoKX0sci50cmlhbmdsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkudHJpYW5nbGVzKCl9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmRrKCtlKSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpkaygrdCkscik6ZX0sci5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dLHIpOm4mJltbblswXVswXSxuWzBdWzFdXSxbblsxXVswXSxuWzFdWzFdXV19LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1swLDBdLFsrdFswXSwrdFsxXV1dLHIpOm4mJltuWzFdWzBdLW5bMF1bMF0sblsxXVsxXS1uWzBdWzFdXX0scn1mdW5jdGlvbiBKayh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdFQodCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy50cmFuc2Zvcm09bn1mdW5jdGlvbiBlVCh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59UWsucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpRayxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBBayhlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4scil7aWYoYT0oaT1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxhLG8scz1uLnNpdGUsYz0tMSx1PWVbaVthLTFdXSxsPXUubGVmdD09PXM/dS5yaWdodDp1LmxlZnQ7KytjPGE7KW89bCxsPSh1PWVbaVtjXV0pLmxlZnQ9PT1zP3UucmlnaHQ6dS5sZWZ0LG8mJmwmJnI8by5pbmRleCYmcjxsLmluZGV4JiZYayhzLG8sbCk8MCYmdC5wdXNoKFtzLmRhdGEsby5kYXRhLGwuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLGE9dGhpcyxvPWEuX2ZvdW5kfHwwLHM9YS5jZWxscy5sZW5ndGg7IShpPWEuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGM9dC1pLnNpdGVbMF0sdT1lLWkuc2l0ZVsxXSxsPWMqYyt1KnU7ZG97aT1hLmNlbGxzW3I9b10sbz1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWEuZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBjPXQtc1swXSx1PWUtc1sxXSxoPWMqYyt1KnU7aDxsJiYobD1oLG89cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gYS5fZm91bmQ9cixudWxsPT1ufHxsPD1uKm4/aS5zaXRlOm51bGx9fSxlVC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVULHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBlVCh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IGVUKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIG5UPW5ldyBlVCgxLDAsMCk7ZnVuY3Rpb24gclQodCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBuVDtyZXR1cm4gdC5fX3pvb219ZnVuY3Rpb24gaVQoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhVCgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gb1QoKXtyZXR1cm4hbGUuY3RybEtleSYmIWxlLmJ1dHRvbn1mdW5jdGlvbiBzVCgpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBjVCgpe3JldHVybiB0aGlzLl9fem9vbXx8blR9ZnVuY3Rpb24gdVQoKXtyZXR1cm4tbGUuZGVsdGFZKigxPT09bGUuZGVsdGFNb2RlPy4wNTpsZS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBsVCgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBoVCh0LGUsbil7dmFyIHI9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0saT10LmludmVydFgoZVsxXVswXSktblsxXVswXSxhPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLG89dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKGk+cj8ocitpKS8yOk1hdGgubWluKDAscil8fE1hdGgubWF4KDAsaSksbz5hPyhhK28pLzI6TWF0aC5taW4oMCxhKXx8TWF0aC5tYXgoMCxvKSl9ZnVuY3Rpb24gZlQoKXt2YXIgdCxlLG49b1Qscj1zVCxpPWhULGE9dVQsbz1sVCxzPVswLDEvMF0sYz1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx1PTI1MCxsPU9wLGg9ZnQoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGY9NTAwLGQ9MDtmdW5jdGlvbiBwKHQpe3QucHJvcGVydHkoIl9fem9vbSIsY1QpLm9uKCJ3aGVlbC56b29tIix4KS5vbigibW91c2Vkb3duLnpvb20iLHcpLm9uKCJkYmxjbGljay56b29tIixrKS5maWx0ZXIobykub24oInRvdWNoc3RhcnQuem9vbSIsVCkub24oInRvdWNobW92ZS56b29tIixFKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixDKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24geSh0LGUpe3JldHVybihlPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlKSkpPT09dC5rP3Q6bmV3IGVUKGUsdC54LHQueSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIHI9ZVswXS1uWzBdKnQuayxpPWVbMV0tblsxXSp0Lms7cmV0dXJuIHI9PT10LngmJmk9PT10Lnk/dDpuZXcgZVQodC5rLHIsaSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB2KHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7Yih0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT1hcmd1bWVudHMsYT1iKHQsaSksbz1yLmFwcGx5KHQsaSkscz1udWxsPT1uP20obyk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LGkpOm4sYz1NYXRoLm1heChvWzFdWzBdLW9bMF1bMF0sb1sxXVsxXS1vWzBdWzFdKSx1PXQuX196b29tLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LGkpOmUsZj1sKHUuaW52ZXJ0KHMpLmNvbmNhdChjL3UuayksaC5pbnZlcnQocykuY29uY2F0KGMvaC5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9aDtlbHNle3ZhciBlPWYodCksbj1jL2VbMl07dD1uZXcgZVQobixzWzBdLWVbMF0qbixzWzFdLWVbMV0qbil9YS56b29tKG51bGwsdCl9fSkpfWZ1bmN0aW9uIGIodCxlLG4pe3JldHVybiFuJiZ0Ll9fem9vbWluZ3x8bmV3IF8odCxlKX1mdW5jdGlvbiBfKHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1yLmFwcGx5KHQsZSksdGhpcy50YXBzPTB9ZnVuY3Rpb24geCgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1iKHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLHI9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUuaypNYXRoLnBvdygyLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLG89Qm4odGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09b1swXSYmdC5tb3VzZVswXVsxXT09PW9bMV18fCh0Lm1vdXNlWzFdPWUuaW52ZXJ0KHQubW91c2VbMF09bykpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKGUuaz09PXIpcmV0dXJuO3QubW91c2U9W28sZS5pbnZlcnQobyldLGFyKHRoaXMpLHQuc3RhcnQoKX1hVCgpLHQud2hlZWw9c2V0VGltZW91dCh1LDE1MCksdC56b29tKCJtb3VzZSIsaShnKHkoZSxyKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LGMpKX1mdW5jdGlvbiB1KCl7dC53aGVlbD1udWxsLHQuZW5kKCl9fWZ1bmN0aW9uIHcoKXtpZighZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PWIodGhpcyxhcmd1bWVudHMsITApLHI9VGUobGUudmlldykub24oIm1vdXNlbW92ZS56b29tIix1LCEwKS5vbigibW91c2V1cC56b29tIixsLCEwKSxhPUJuKHRoaXMpLG89bGUuY2xpZW50WCxzPWxlLmNsaWVudFk7U2UobGUudmlldyksaVQoKSx0Lm1vdXNlPVthLHRoaXMuX196b29tLmludmVydChhKV0sYXIodGhpcyksdC5zdGFydCgpfWZ1bmN0aW9uIHUoKXtpZihhVCgpLCF0Lm1vdmVkKXt2YXIgZT1sZS5jbGllbnRYLW8sbj1sZS5jbGllbnRZLXM7dC5tb3ZlZD1lKmUrbipuPmR9dC56b29tKCJtb3VzZSIsaShnKHQudGhhdC5fX3pvb20sdC5tb3VzZVswXT1Cbih0LnRoYXQpLHQubW91c2VbMV0pLHQuZXh0ZW50LGMpKX1mdW5jdGlvbiBsKCl7ci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxBZShsZS52aWV3LHQubW92ZWQpLGFUKCksdC5lbmQoKX19ZnVuY3Rpb24gaygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD10aGlzLl9fem9vbSxlPUJuKHRoaXMpLGE9dC5pbnZlcnQoZSksbz10LmsqKGxlLnNoaWZ0S2V5Py41OjIpLHM9aShnKHkodCxvKSxlLGEpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGMpO2FUKCksdT4wP1RlKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih1KS5jYWxsKHYscyxlKTpUZSh0aGlzKS5jYWxsKHAudHJhbnNmb3JtLHMpfX1mdW5jdGlvbiBUKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLHIsaSxhLG89bGUudG91Y2hlcyxzPW8ubGVuZ3RoLGM9Yih0aGlzLGFyZ3VtZW50cyxsZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1zKTtmb3IoaVQoKSxyPTA7cjxzOysrcilhPVthPU9uKHRoaXMsbywoaT1vW3JdKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQoYSksaS5pZGVudGlmaWVyXSxjLnRvdWNoMD9jLnRvdWNoMXx8Yy50b3VjaDBbMl09PT1hWzJdfHwoYy50b3VjaDE9YSxjLnRhcHM9MCk6KGMudG91Y2gwPWEsZT0hMCxjLnRhcHM9MSshIXQpO3QmJih0PWNsZWFyVGltZW91dCh0KSksZSYmKGMudGFwczwyJiYodD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Q9bnVsbH0pLGYpKSxhcih0aGlzKSxjLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4scixhLG89Yih0aGlzLGFyZ3VtZW50cykscz1sZS5jaGFuZ2VkVG91Y2hlcyx1PXMubGVuZ3RoO2ZvcihhVCgpLHQmJih0PWNsZWFyVGltZW91dCh0KSksby50YXBzPTAsZT0wO2U8dTsrK2Upcj1Pbih0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksby50b3VjaDAmJm8udG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP28udG91Y2gwWzBdPXI6by50b3VjaDEmJm8udG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoby50b3VjaDFbMF09cik7aWYobj1vLnRoYXQuX196b29tLG8udG91Y2gxKXt2YXIgbD1vLnRvdWNoMFswXSxoPW8udG91Y2gwWzFdLGY9by50b3VjaDFbMF0sZD1vLnRvdWNoMVsxXSxwPShwPWZbMF0tbFswXSkqcCsocD1mWzFdLWxbMV0pKnAsbT0obT1kWzBdLWhbMF0pKm0rKG09ZFsxXS1oWzFdKSptO249eShuLE1hdGguc3FydChwL20pKSxyPVsobFswXStmWzBdKS8yLChsWzFdK2ZbMV0pLzJdLGE9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl19ZWxzZXtpZighby50b3VjaDApcmV0dXJuO3I9by50b3VjaDBbMF0sYT1vLnRvdWNoMFsxXX1vLnpvb20oInRvdWNoIixpKGcobixyLGEpLG8uZXh0ZW50LGMpKX19ZnVuY3Rpb24gQygpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLHI9Yih0aGlzLGFyZ3VtZW50cyksaT1sZS5jaGFuZ2VkVG91Y2hlcyxhPWkubGVuZ3RoO2ZvcihpVCgpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksZiksdD0wO3Q8YTsrK3Qpbj1pW3RdLHIudG91Y2gwJiZyLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgci50b3VjaDA6ci50b3VjaDEmJnIudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgci50b3VjaDE7aWYoci50b3VjaDEmJiFyLnRvdWNoMCYmKHIudG91Y2gwPXIudG91Y2gxLGRlbGV0ZSByLnRvdWNoMSksci50b3VjaDApci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KHIudG91Y2gwWzBdKTtlbHNlIGlmKHIuZW5kKCksMj09PXIudGFwcyl7dmFyIG89VGUodGhpcykub24oImRibGNsaWNrLnpvb20iKTtvJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBwLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O3IucHJvcGVydHkoIl9fem9vbSIsY1QpLHQhPT1yP3YodCxlLG4pOnIuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0scC5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuKXtwLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSksbil9LHAuc2NhbGVUbz1mdW5jdGlvbih0LGUsbil7cC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLG89bnVsbD09bj9tKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1hLmludmVydChvKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIGkoZyh5KGEsdSksbyxzKSx0LGMpfSksbil9LHAudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe3AudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyl9KSl9LHAudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4sYSl7cC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLHM9bnVsbD09YT9tKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE7cmV0dXJuIGkoblQudHJhbnNsYXRlKHNbMF0sc1sxXSkuc2NhbGUoby5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxjKX0pLGEpfSxfLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtnZShuZXcgdFQocCx0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxwLndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKaygrdCkscCk6YX0scC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKayghIXQpLHApOm59LHAudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmsoISF0KSxwKTpvfSxwLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkprKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxwKTpyfSxwLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0scCk6W3NbMF0sc1sxXV19LHAudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjWzBdWzBdPSt0WzBdWzBdLGNbMV1bMF09K3RbMV1bMF0sY1swXVsxXT0rdFswXVsxXSxjWzFdWzFdPSt0WzFdWzFdLHApOltbY1swXVswXSxjWzBdWzFdXSxbY1sxXVswXSxjWzFdWzFdXV19LHAuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscCk6aX0scC5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxwKTp1fSxwLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQscCk6bH0scC5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD9wOnR9LHAuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0odD0rdCkqdCxwKTpNYXRoLnNxcnQoZCl9LHB9clQucHJvdG90eXBlPWVULnByb3RvdHlwZX0sNjgxOih0LGUsbik9Pnt0LmV4cG9ydHM9e2dyYXBobGliOm4oNTc0KSxsYXlvdXQ6big4MTIzKSxkZWJ1ZzpuKDc1NzApLHV0aWw6e3RpbWU6bigxMTM4KS50aW1lLG5vdGltZTpuKDExMzgpLm5vdGltZX0sdmVyc2lvbjpuKDgxNzcpfX0sMTIwNzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDQwNzkpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJncmVlZHkiPT09dC5ncmFwaCgpLmFjeWNsaWNlcj9pKHQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkud2VpZ2h0fX0odCkpOmZ1bmN0aW9uKHQpe3ZhciBlPVtdLG49e30saT17fTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24gYShvKXtyLmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLHIuZm9yRWFjaCh0Lm91dEVkZ2VzKG8pLChmdW5jdGlvbih0KXtyLmhhcyhuLHQudyk/ZS5wdXNoKHQpOmEodC53KX0pKSxkZWxldGUgbltvXSl9KSksZX0odCk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTt0LnJlbW92ZUVkZ2UoZSksbi5mb3J3YXJkTmFtZT1lLm5hbWUsbi5yZXZlcnNlZD0hMCx0LnNldEVkZ2UoZS53LGUudixuLHIudW5pcXVlSWQoInJldiIpKX0pKX0sdW5kbzpmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi5yZXZlcnNlZCl7dC5yZW1vdmVFZGdlKGUpO3ZhciByPW4uZm9yd2FyZE5hbWU7ZGVsZXRlIG4ucmV2ZXJzZWQsZGVsZXRlIG4uZm9yd2FyZE5hbWUsdC5zZXRFZGdlKGUudyxlLnYsbixyKX19KSl9fX0sMTEzMzoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbixyLGEsbyl7dmFyIHM9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6ZX0sYz1hW2VdW28tMV0sdT1pLmFkZER1bW15Tm9kZSh0LCJib3JkZXIiLHMsbik7YVtlXVtvXT11LHQuc2V0UGFyZW50KHUsciksYyYmdC5zZXRFZGdlKGMsdSx7d2VpZ2h0OjF9KX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24gZShuKXt2YXIgaT10LmNoaWxkcmVuKG4pLG89dC5ub2RlKG4pO2lmKGkubGVuZ3RoJiZyLmZvckVhY2goaSxlKSxyLmhhcyhvLCJtaW5SYW5rIikpe28uYm9yZGVyTGVmdD1bXSxvLmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgcz1vLm1pblJhbmssYz1vLm1heFJhbmsrMTtzPGM7KytzKWEodCwiYm9yZGVyTGVmdCIsIl9ibCIsbixvLHMpLGEodCwiYm9yZGVyUmlnaHQiLCJfYnIiLG4sbyxzKX19KSl9fSwzMjU4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTtmdW5jdGlvbiBpKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe2EodC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXthKHQuZWRnZShlKSl9KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBvKHQpe3QueT0tdC55fWZ1bmN0aW9uIHModCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dC5leHBvcnRzPXthZGp1c3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsibHIiIT09ZSYmInJsIiE9PWV8fGkodCl9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsiYnQiIT09ZSYmInJsIiE9PWV8fGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe28odC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLG8pLHIuaGFzKG4sInkiKSYmbyhuKX0pKX0odCksImxyIiE9PWUmJiJybCIhPT1lfHwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cyh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmZvckVhY2gobi5wb2ludHMscyksci5oYXMobiwieCIpJiZzKG4pfSkpfSh0KSxpKHQpKX19fSw3ODIyOnQ9PntmdW5jdGlvbiBlKCl7dmFyIHQ9e307dC5fbmV4dD10Ll9wcmV2PXQsdGhpcy5fc2VudGluZWw9dH1mdW5jdGlvbiBuKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24gcih0LGUpe2lmKCJfbmV4dCIhPT10JiYiX3ByZXYiIT09dClyZXR1cm4gZX10LmV4cG9ydHM9ZSxlLnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2VudGluZWwsZT10Ll9wcmV2O2lmKGUhPT10KXJldHVybiBuKGUpLGV9LGUucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2VudGluZWw7dC5fcHJldiYmdC5fbmV4dCYmbih0KSx0Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj10LGUuX25leHQ9dCx0Ll9wcmV2PWV9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5fc2VudGluZWwsbj1lLl9wcmV2O24hPT1lOyl0LnB1c2goSlNPTi5zdHJpbmdpZnkobixyKSksbj1uLl9wcmV2O3JldHVybiJbIit0LmpvaW4oIiwgIikrIl0ifX0sNzU3MDoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCksYT1uKDU3NCkuR3JhcGg7dC5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPW5ldyBhKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkuc2V0R3JhcGgoe30pO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtuLnNldE5vZGUoZSx7bGFiZWw6ZX0pLG4uc2V0UGFyZW50KGUsImxheWVyIit0Lm5vZGUoZSkucmFuayl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7bi5zZXRFZGdlKHQudix0Lncse30sdC5uYW1lKX0pKSxyLmZvckVhY2goZSwoZnVuY3Rpb24odCxlKXt2YXIgaT0ibGF5ZXIiK2U7bi5zZXROb2RlKGkse3Jhbms6InNhbWUifSksci5yZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXRFZGdlKHQsZSx7c3R5bGU6ImludmlzIn0pLGV9KSl9KSksbn19fSw1NzQ6KHQsZSxuKT0+e3ZhciByO3RyeXtyPW4oODI4Mil9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LDQwNzk6KHQsZSxuKT0+e3ZhciByPW4oODQzNiksaT1uKDU3NCkuR3JhcGgsYT1uKDc4MjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgaSxvPTAscz0wO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe24uc2V0Tm9kZSh0LHt2OnQsaW46MCxvdXQ6MH0pfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciByPW4uZWRnZSh0LnYsdC53KXx8MCxpPWUodCksYT1yK2k7bi5zZXRFZGdlKHQudix0LncsYSkscz1NYXRoLm1heChzLG4ubm9kZSh0LnYpLm91dCs9aSksbz1NYXRoLm1heChvLG4ubm9kZSh0LncpLmluKz1pKX0pKTt2YXIgdT1yLnJhbmdlKHMrbyszKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhfSkpLGw9bysxO3JldHVybiByLmZvckVhY2gobi5ub2RlcygpLChmdW5jdGlvbih0KXtjKHUsbCxuLm5vZGUodCkpfSkpLHtncmFwaDpuLGJ1Y2tldHM6dSx6ZXJvSWR4Omx9fSh0LGV8fG8pLHU9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpPVtdLGE9ZVtlLmxlbmd0aC0xXSxvPWVbMF07dC5ub2RlQ291bnQoKTspe2Zvcig7cj1vLmRlcXVldWUoKTspcyh0LGUsbixyKTtmb3IoO3I9YS5kZXF1ZXVlKCk7KXModCxlLG4scik7aWYodC5ub2RlQ291bnQoKSlmb3IodmFyIGM9ZS5sZW5ndGgtMjtjPjA7LS1jKWlmKHI9ZVtjXS5kZXF1ZXVlKCkpe2k9aS5jb25jYXQocyh0LGUsbixyLCEwKSk7YnJlYWt9fXJldHVybiBpfShuLmdyYXBoLG4uYnVja2V0cyxuLnplcm9JZHgpO3JldHVybiByLmZsYXR0ZW4oci5tYXAodSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZS52LGUudyl9KSksITApfTt2YXIgbz1yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIHModCxlLG4saSxhKXt2YXIgbz1hP1tdOnZvaWQgMDtyZXR1cm4gci5mb3JFYWNoKHQuaW5FZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2Uocikscz10Lm5vZGUoci52KTthJiZvLnB1c2goe3Y6ci52LHc6ci53fSkscy5vdXQtPWksYyhlLG4scyl9KSksci5mb3JFYWNoKHQub3V0RWRnZXMoaS52KSwoZnVuY3Rpb24ocil7dmFyIGk9dC5lZGdlKHIpLGE9ci53LG89dC5ub2RlKGEpO28uaW4tPWksYyhlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBjKHQsZSxuKXtuLm91dD9uLmluP3Rbbi5vdXQtbi5pbitlXS5lbnF1ZXVlKG4pOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShuKTp0WzBdLmVucXVldWUobil9fSw4MTIzOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMTIwNyksYT1uKDU5OTUpLG89big4MDkzKSxzPW4oMTEzOCkubm9ybWFsaXplUmFua3MsYz1uKDQyMTkpLHU9bigxMTM4KS5yZW1vdmVFbXB0eVJhbmtzLGw9bigyOTgxKSxoPW4oMTEzMyksZj1uKDMyNTgpLGQ9bigzNDA4KSxwPW4oNzg3MykseT1uKDExMzgpLGc9big1NzQpLkdyYXBoO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWUmJmUuZGVidWdUaW1pbmc/eS50aW1lOnkubm90aW1lO24oImxheW91dCIsKGZ1bmN0aW9uKCl7dmFyIGU9bigiICBidWlsZExheW91dEdyYXBoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bmV3IGcoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxuPUModC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChyLm1lcmdlKHt9LHYsRShuLG0pLHIucGljayhuLGIpKSksci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9Qyh0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLHIuZGVmYXVsdHMoRShpLF8pLHgpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQuZWRnZShuKSk7ZS5zZXRFZGdlKG4sci5tZXJnZSh7fSxrLEUoaSx3KSxyLnBpY2soaSxUKSkpfSkpLGV9KHQpfSkpO24oIiAgcnVuTGF5b3V0IiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTtlLnJhbmtzZXAvPTIsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5lZGdlKG4pO3IubWlubGVuKj0yLCJjIiE9PXIubGFiZWxwb3MudG9Mb3dlckNhc2UoKSYmKCJUQiI9PT1lLnJhbmtkaXJ8fCJCVCI9PT1lLnJhbmtkaXI/ci53aWR0aCs9ci5sYWJlbG9mZnNldDpyLmhlaWdodCs9ci5sYWJlbG9mZnNldCl9KSl9KHQpfSkpLGUoIiAgICByZW1vdmVTZWxmRWRnZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXtpZihlLnY9PT1lLncpe3ZhciBuPXQubm9kZShlLnYpO24uc2VsZkVkZ2VzfHwobi5zZWxmRWRnZXM9W10pLG4uc2VsZkVkZ2VzLnB1c2goe2UsbGFiZWw6dC5lZGdlKGUpfSksdC5yZW1vdmVFZGdlKGUpfX0pKX0odCl9KSksZSgiICAgIGFjeWNsaWMiLChmdW5jdGlvbigpe2kucnVuKHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoZnVuY3Rpb24oKXtsLnJ1bih0KX0pKSxlKCIgICAgcmFuayIsKGZ1bmN0aW9uKCl7byh5LmFzTm9uQ29tcG91bmRHcmFwaCh0KSl9KSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi53aWR0aCYmbi5oZWlnaHQpe3ZhciByPXQubm9kZShlLnYpLGk9e3Jhbms6KHQubm9kZShlLncpLnJhbmstci5yYW5rKS8yK3IucmFuayxlfTt5LmFkZER1bW15Tm9kZSh0LCJlZGdlLXByb3h5IixpLCJfZXAiKX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXt1KHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKGZ1bmN0aW9uKCl7bC5jbGVhbnVwKHQpfSkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKGZ1bmN0aW9uKCl7cyh0KX0pKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPXQubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9dC5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLGU9ci5tYXgoZSxpLm1heFJhbmspKX0pKSx0LmdyYXBoKCkubWF4UmFuaz1lfSh0KX0pKSxlKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTsiZWRnZS1wcm94eSI9PT1uLmR1bW15JiYodC5lZGdlKG4uZSkubGFiZWxSYW5rPW4ucmFuayx0LnJlbW92ZU5vZGUoZSkpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7YS5ydW4odCl9KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXtjKHQpfSkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7aCh0KX0pKSxlKCIgICAgb3JkZXIiLChmdW5jdGlvbigpe2QodCl9KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXkuYnVpbGRMYXllck1hdHJpeCh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT10Lm5vZGUoZSk7YS5vcmRlcj1pK24sci5mb3JFYWNoKGEuc2VsZkVkZ2VzLChmdW5jdGlvbihlKXt5LmFkZER1bW15Tm9kZSh0LCJzZWxmZWRnZSIse3dpZHRoOmUubGFiZWwud2lkdGgsaGVpZ2h0OmUubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOmkrICsrbixlOmUuZSxsYWJlbDplLmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIGEuc2VsZkVkZ2VzfSkpfSkpfSh0KX0pKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi5hZGp1c3QodCl9KSksZSgiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXtwKHQpfSkpLGUoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIHI9dC5ub2RlKG4uZS52KSxpPXIueCtyLndpZHRoLzIsYT1yLnksbz1uLngtaSxzPXIuaGVpZ2h0LzI7dC5zZXRFZGdlKG4uZSxuLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksbi5sYWJlbC5wb2ludHM9W3t4OmkrMipvLzMseTphLXN9LHt4OmkrNSpvLzYseTphLXN9LHt4Omkrbyx5OmF9LHt4OmkrNSpvLzYseTphK3N9LHt4OmkrMipvLzMseTphK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIG49dC5ub2RlKGUpLGk9dC5ub2RlKG4uYm9yZGVyVG9wKSxhPXQubm9kZShuLmJvcmRlckJvdHRvbSksbz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHIubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhzLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhhLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpeyJib3JkZXIiPT09dC5ub2RlKGUpLmR1bW15JiZ0LnJlbW92ZU5vZGUoZSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7YS51bmRvKHQpfSkpLGUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihyLmhhcyhuLCJ4Iikpc3dpdGNoKCJsIiE9PW4ubGFiZWxwb3MmJiJyIiE9PW4ubGFiZWxwb3N8fChuLndpZHRoLT1uLmxhYmVsb2Zmc2V0KSxuLmxhYmVscG9zKXtjYXNlImwiOm4ueC09bi53aWR0aC8yK24ubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpuLngrPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0fX0pKX0odCl9KSksZSgiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLnVuZG8odCl9KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49MCxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhPTAsbz10LmdyYXBoKCkscz1vLm1hcmdpbnh8fDAsYz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdSh0KXt2YXIgcj10Lngsbz10Lnkscz10LndpZHRoLGM9dC5oZWlnaHQ7ZT1NYXRoLm1pbihlLHItcy8yKSxuPU1hdGgubWF4KG4scitzLzIpLGk9TWF0aC5taW4oaSxvLWMvMiksYT1NYXRoLm1heChhLG8rYy8yKX1yLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt1KHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sIngiKSYmdShuKX0pKSxlLT1zLGktPWMsci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pO3IueC09ZSxyLnktPWl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGE9dC5lZGdlKG4pO3IuZm9yRWFjaChhLnBvaW50cywoZnVuY3Rpb24odCl7dC54LT1lLHQueS09aX0pKSxyLmhhcyhhLCJ4IikmJihhLngtPWUpLHIuaGFzKGEsInkiKSYmKGEueS09aSl9KSksby53aWR0aD1uLWUrcyxvLmhlaWdodD1hLWkrY30odCl9KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG4scixpPXQuZWRnZShlKSxhPXQubm9kZShlLnYpLG89dC5ub2RlKGUudyk7aS5wb2ludHM/KG49aS5wb2ludHNbMF0scj1pLnBvaW50c1tpLnBvaW50cy5sZW5ndGgtMV0pOihpLnBvaW50cz1bXSxuPW8scj1hKSxpLnBvaW50cy51bnNoaWZ0KHkuaW50ZXJzZWN0UmVjdChhLG4pKSxpLnBvaW50cy5wdXNoKHkuaW50ZXJzZWN0UmVjdChvLHIpKX0pKX0odCl9KSksZSgiICAgIHJldmVyc2VQb2ludHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7bi5yZXZlcnNlZCYmbi5wb2ludHMucmV2ZXJzZSgpfSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoZnVuY3Rpb24oKXtpLnVuZG8odCl9KSl9KGUsbil9KSksbigiICB1cGRhdGVJbnB1dEdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobiksaT1lLm5vZGUobik7ciYmKHIueD1pLngsci55PWkueSxlLmNoaWxkcmVuKG4pLmxlbmd0aCYmKHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxhPWUuZWRnZShuKTtpLnBvaW50cz1hLnBvaW50cyxyLmhhcyhhLCJ4IikmJihpLng9YS54LGkueT1hLnkpfSkpLHQuZ3JhcGgoKS53aWR0aD1lLmdyYXBoKCkud2lkdGgsdC5ncmFwaCgpLmhlaWdodD1lLmdyYXBoKCkuaGVpZ2h0fSh0LGUpfSkpfSkpfTt2YXIgbT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sdj17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxiPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sXz1bIndpZHRoIiwiaGVpZ2h0Il0seD17d2lkdGg6MCxoZWlnaHQ6MH0sdz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxrPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sVD1bImxhYmVscG9zIl07ZnVuY3Rpb24gRSh0LGUpe3JldHVybiByLm1hcFZhbHVlcyhyLnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9fSw4NDM2Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17Y2xvbmVEZWVwOm4oMzYxKSxjb25zdGFudDpuKDU3MDMpLGRlZmF1bHRzOm4oMTc0NyksZWFjaDpuKDYwNzMpLGZpbHRlcjpuKDMxMDUpLGZpbmQ6bigzMzExKSxmbGF0dGVuOm4oNTU2NCksZm9yRWFjaDpuKDQ0ODYpLGZvckluOm4oMjYyMCksaGFzOm4oODcyMSksaXNVbmRlZmluZWQ6bigyMzUzKSxsYXN0Om4oOTI4KSxtYXA6big1MTYxKSxtYXBWYWx1ZXM6big2NjA0KSxtYXg6big2MTYyKSxtZXJnZTpuKDM4NTcpLG1pbjpuKDM2MzIpLG1pbkJ5Om4oMjc2Miksbm93Om4oNzc3MSkscGljazpuKDk3MjIpLHJhbmdlOm4oNjAyNikscmVkdWNlOm4oNDA2MSksc29ydEJ5Om4oOTczNCksdW5pcXVlSWQ6bigzOTU1KSx2YWx1ZXM6bigyNjI4KSx6aXBPYmplY3Q6big3Mjg3KX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sMjk4MToodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbixvLHMsYyx1KXt2YXIgbD10LmNoaWxkcmVuKHUpO2lmKGwubGVuZ3RoKXt2YXIgaD1pLmFkZEJvcmRlck5vZGUodCwiX2J0IiksZj1pLmFkZEJvcmRlck5vZGUodCwiX2JiIiksZD10Lm5vZGUodSk7dC5zZXRQYXJlbnQoaCx1KSxkLmJvcmRlclRvcD1oLHQuc2V0UGFyZW50KGYsdSksZC5ib3JkZXJCb3R0b209ZixyLmZvckVhY2gobCwoZnVuY3Rpb24ocil7YSh0LGUsbixvLHMsYyxyKTt2YXIgaT10Lm5vZGUociksbD1pLmJvcmRlclRvcD9pLmJvcmRlclRvcDpyLGQ9aS5ib3JkZXJCb3R0b20/aS5ib3JkZXJCb3R0b206cixwPWkuYm9yZGVyVG9wP286MipvLHk9bCE9PWQ/MTpzLWNbdV0rMTt0LnNldEVkZ2UoaCxsLHt3ZWlnaHQ6cCxtaW5sZW46eSxuZXN0aW5nRWRnZTohMH0pLHQuc2V0RWRnZShkLGYse3dlaWdodDpwLG1pbmxlbjp5LG5lc3RpbmdFZGdlOiEwfSl9KSksdC5wYXJlbnQodSl8fHQuc2V0RWRnZShlLGgse3dlaWdodDowLG1pbmxlbjpzK2NbdV19KX1lbHNlIHUhPT1lJiZ0LnNldEVkZ2UoZSx1LHt3ZWlnaHQ6MCxtaW5sZW46bn0pfXQuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYWRkRHVtbXlOb2RlKHQsInJvb3QiLHt9LCJfcm9vdCIpLG49ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihpLGEpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJnIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtuKHQsYSsxKX0pKSxlW2ldPWF9cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uKHQpe24odCwxKX0pKSxlfSh0KSxvPXIubWF4KHIudmFsdWVzKG4pKS0xLHM9MipvKzE7dC5ncmFwaCgpLm5lc3RpbmdSb290PWUsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm1pbmxlbio9c30pKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm4gci5yZWR1Y2UodC5lZGdlcygpLChmdW5jdGlvbihlLG4pe3JldHVybiBlK3QuZWRnZShuKS53ZWlnaHR9KSwwKX0odCkrMTtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihyKXthKHQsZSxzLGMsbyxuLHIpfSkpLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1zfSxjbGVhbnVwOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTt0LnJlbW92ZU5vZGUoZS5uZXN0aW5nUm9vdCksZGVsZXRlIGUubmVzdGluZ1Jvb3Qsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm5lc3RpbmdFZGdlJiZ0LnJlbW92ZUVkZ2UoZSl9KSl9fX0sNTk5NToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDExMzgpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3QuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGEsbz1lLnYscz10Lm5vZGUobykucmFuayxjPWUudyx1PXQubm9kZShjKS5yYW5rLGw9ZS5uYW1lLGg9dC5lZGdlKGUpLGY9aC5sYWJlbFJhbms7aWYodSE9PXMrMSl7Zm9yKHQucmVtb3ZlRWRnZShlKSxhPTAsKytzO3M8dTsrK2EsKytzKWgucG9pbnRzPVtdLHI9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmgsZWRnZU9iajplLHJhbms6c30sbj1pLmFkZER1bW15Tm9kZSh0LCJlZGdlIixyLCJfZCIpLHM9PT1mJiYoci53aWR0aD1oLndpZHRoLHIuaGVpZ2h0PWguaGVpZ2h0LHIuZHVtbXk9ImVkZ2UtbGFiZWwiLHIubGFiZWxwb3M9aC5sYWJlbHBvcyksdC5zZXRFZGdlKG8sbix7d2VpZ2h0Omgud2VpZ2h0fSxsKSwwPT09YSYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2gobiksbz1uO3Quc2V0RWRnZShvLGMse3dlaWdodDpoLndlaWdodH0sbCl9fSh0LGUpfSkpfSx1bmRvOmZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKGUpe3ZhciBuLHI9dC5ub2RlKGUpLGk9ci5lZGdlTGFiZWw7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosaSk7ci5kdW1teTspbj10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLGkucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksImVkZ2UtbGFiZWwiPT09ci5kdW1teSYmKGkueD1yLngsaS55PXIueSxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQpLGU9bixyPXQubm9kZShlKX0pKX19fSw1MDkzOih0LGUsbik9Pnt2YXIgcj1uKDg0MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYT17fTtyLmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciByLG8scz10LnBhcmVudChuKTtzOyl7aWYoKHI9dC5wYXJlbnQocykpPyhvPWFbcl0sYVtyXT1zKToobz1pLGk9cyksbyYmbyE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKG8scyk7cz1yfX0pKX19LDU0Mzk6KHQsZSxuKT0+e3ZhciByPW4oODQzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIubWFwKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuaW5FZGdlcyhlKTtpZihuLmxlbmd0aCl7dmFyIGk9ci5yZWR1Y2UobiwoZnVuY3Rpb24oZSxuKXt2YXIgcj10LmVkZ2UobiksaT10Lm5vZGUobi52KTtyZXR1cm57c3VtOmUuc3VtK3Iud2VpZ2h0Kmkub3JkZXIsd2VpZ2h0OmUud2VpZ2h0K3Iud2VpZ2h0fX0pLHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmUsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fXJldHVybnt2OmV9fSkpfX0sMzEyODoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTt0Lmhhc05vZGUoZT1yLnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSh0KSxvPW5ldyBpKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmF9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihpKXt2YXIgcz10Lm5vZGUoaSksYz10LnBhcmVudChpKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoby5zZXROb2RlKGkpLG8uc2V0UGFyZW50KGksY3x8YSksci5mb3JFYWNoKHRbbl0oaSksKGZ1bmN0aW9uKGUpe3ZhciBuPWUudj09PWk/ZS53OmUudixhPW8uZWRnZShuLGkpLHM9ci5pc1VuZGVmaW5lZChhKT8wOmEud2VpZ2h0O28uc2V0RWRnZShuLGkse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K3N9KX0pKSxyLmhhcyhzLCJtaW5SYW5rIikmJm8uc2V0Tm9kZShpLHtib3JkZXJMZWZ0OnMuYm9yZGVyTGVmdFtlXSxib3JkZXJSaWdodDpzLmJvcmRlclJpZ2h0W2VdfSkpfSkpLG99fSw2NjMwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTtmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9ci56aXBPYmplY3QobixyLm1hcChuLChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxhPXIuZmxhdHRlbihyLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gci5zb3J0Qnkoci5tYXAodC5vdXRFZGdlcyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJue3BvczppW2Uud10sd2VpZ2h0OnQuZWRnZShlKS53ZWlnaHR9fSkpLCJwb3MiKX0pKSwhMCksbz0xO288bi5sZW5ndGg7KW88PD0xO3ZhciBzPTIqby0xO28tPTE7dmFyIGM9ci5tYXAobmV3IEFycmF5KHMpLChmdW5jdGlvbigpe3JldHVybiAwfSkpLHU9MDtyZXR1cm4gci5mb3JFYWNoKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wb3MrbztjW2VdKz10LndlaWdodDtmb3IodmFyIG49MDtlPjA7KWUlMiYmKG4rPWNbZSsxXSksY1tlPWUtMT4+MV0rPXQud2VpZ2h0O3UrPXQud2VpZ2h0Km59KSkpLHV9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj0xO3I8ZS5sZW5ndGg7KytyKW4rPWkodCxlW3ItMV0sZVtyXSk7cmV0dXJuIG59fSwzNDA4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMjU4OCksYT1uKDY2MzApLG89bigxMDI2KSxzPW4oMzEyOCksYz1uKDUwOTMpLHU9big1NzQpLkdyYXBoLGw9bigxMTM4KTtmdW5jdGlvbiBoKHQsZSxuKXtyZXR1cm4gci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHModCxlLG4pfSkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgbj1uZXcgdTtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIGk9dC5ncmFwaCgpLnJvb3QsYT1vKHQsaSxuLGUpO3IuZm9yRWFjaChhLnZzLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpLGModCxuLGEudnMpfSkpfWZ1bmN0aW9uIGQodCxlKXtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSl9KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWwubWF4UmFuayh0KSxuPWgodCxyLnJhbmdlKDEsZSsxKSwiaW5FZGdlcyIpLG89aCh0LHIucmFuZ2UoZS0xLC0xLC0xKSwib3V0RWRnZXMiKSxzPWkodCk7ZCh0LHMpO2Zvcih2YXIgYyx1PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwPTAseT0wO3k8NDsrK3AsKyt5KXtmKHAlMj9uOm8scCU0Pj0yKSxzPWwuYnVpbGRMYXllck1hdHJpeCh0KTt2YXIgZz1hKHQscyk7Zzx1JiYoeT0wLGM9ci5jbG9uZURlZXAocyksdT1nKX1kKHQsYyl9fSwyNTg4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1yLmZpbHRlcih0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiF0LmNoaWxkcmVuKGUpLmxlbmd0aH0pKSxpPXIubWF4KHIubWFwKG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksYT1yLm1hcChyLnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSksbz1yLnNvcnRCeShuLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSk7cmV0dXJuIHIuZm9yRWFjaChvLChmdW5jdGlvbiBuKGkpe2lmKCFyLmhhcyhlLGkpKXtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTthW28ucmFua10ucHVzaChpKSxyLmZvckVhY2godC5zdWNjZXNzb3JzKGkpLG4pfX0pKSxhfX0sOTU2NzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3ZhciBpPW5bdC52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W3Qudl0saTplfTtyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fChpLmJhcnljZW50ZXI9dC5iYXJ5Y2VudGVyLGkud2VpZ2h0PXQud2VpZ2h0KX0pKSxyLmZvckVhY2goZS5lZGdlcygpLChmdW5jdGlvbih0KXt2YXIgZT1uW3Qudl0saT1uW3Qud107ci5pc1VuZGVmaW5lZChlKXx8ci5pc1VuZGVmaW5lZChpKXx8KGkuaW5kZWdyZWUrKyxlLm91dC5wdXNoKG5bdC53XSkpfSkpLGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLGksYSxvO2UubWVyZ2VkfHwoci5pc1VuZGVmaW5lZChlLmJhcnljZW50ZXIpfHxyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fGUuYmFyeWNlbnRlcj49dC5iYXJ5Y2VudGVyKSYmKGk9ZSxhPTAsbz0wLChuPXQpLndlaWdodCYmKGErPW4uYmFyeWNlbnRlcipuLndlaWdodCxvKz1uLndlaWdodCksaS53ZWlnaHQmJihhKz1pLmJhcnljZW50ZXIqaS53ZWlnaHQsbys9aS53ZWlnaHQpLG4udnM9aS52cy5jb25jYXQobi52cyksbi5iYXJ5Y2VudGVyPWEvbyxuLndlaWdodD1vLG4uaT1NYXRoLm1pbihpLmksbi5pKSxpLm1lcmdlZD0hMCl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciBhPXQucG9wKCk7ZS5wdXNoKGEpLHIuZm9yRWFjaChhLmluLnJldmVyc2UoKSxuKGEpKSxyLmZvckVhY2goYS5vdXQsaShhKSl9cmV0dXJuIHIubWFwKHIuZmlsdGVyKGUsKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1lcmdlZH0pKSwoZnVuY3Rpb24odCl7cmV0dXJuIHIucGljayh0LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pKX0oci5maWx0ZXIobiwoZnVuY3Rpb24odCl7cmV0dXJuIXQuaW5kZWdyZWV9KSkpfX0sMTAyNjoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oNTQzOSksYT1uKDk1NjcpLG89big3MzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4scyxjKXt2YXIgdT1lLmNoaWxkcmVuKG4pLGw9ZS5ub2RlKG4pLGg9bD9sLmJvcmRlckxlZnQ6dm9pZCAwLGY9bD9sLmJvcmRlclJpZ2h0OnZvaWQgMCxkPXt9O2gmJih1PXIuZmlsdGVyKHUsKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09aCYmdCE9PWZ9KSkpO3ZhciBwPWkoZSx1KTtyLmZvckVhY2gocCwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIGk9dChlLG4udixzLGMpO2Rbbi52XT1pLHIuaGFzKGksImJhcnljZW50ZXIiKSYmKGE9bixvPWksci5pc1VuZGVmaW5lZChhLmJhcnljZW50ZXIpPyhhLmJhcnljZW50ZXI9by5iYXJ5Y2VudGVyLGEud2VpZ2h0PW8ud2VpZ2h0KTooYS5iYXJ5Y2VudGVyPShhLmJhcnljZW50ZXIqYS53ZWlnaHQrby5iYXJ5Y2VudGVyKm8ud2VpZ2h0KS8oYS53ZWlnaHQrby53ZWlnaHQpLGEud2VpZ2h0Kz1vLndlaWdodCkpfXZhciBhLG99KSk7dmFyIHk9YShwLHMpOyFmdW5jdGlvbih0LGUpe3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt0LnZzPXIuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0oeSxkKTt2YXIgZz1vKHksYyk7aWYoaCYmKGcudnM9ci5mbGF0dGVuKFtoLGcudnMsZl0sITApLGUucHJlZGVjZXNzb3JzKGgpLmxlbmd0aCkpe3ZhciBtPWUubm9kZShlLnByZWRlY2Vzc29ycyhoKVswXSksdj1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoZilbMF0pO3IuaGFzKGcsImJhcnljZW50ZXIiKXx8KGcuYmFyeWNlbnRlcj0wLGcud2VpZ2h0PTApLGcuYmFyeWNlbnRlcj0oZy5iYXJ5Y2VudGVyKmcud2VpZ2h0K20ub3JkZXIrdi5vcmRlcikvKGcud2VpZ2h0KzIpLGcud2VpZ2h0Kz0yfXJldHVybiBnfX0sNzMwNDoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpO2UubGVuZ3RoJiYoaT1yLmxhc3QoZSkpLmk8PW47KWUucG9wKCksdC5wdXNoKGkudnMpLG4rKztyZXR1cm4gbn10LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWkucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0LCJiYXJ5Y2VudGVyIil9KSkscz1vLmxocyxjPXIuc29ydEJ5KG8ucmhzLChmdW5jdGlvbih0KXtyZXR1cm4tdC5pfSkpLHU9W10sbD0wLGg9MCxmPTA7cy5zb3J0KChuPSEhZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LmJhcnljZW50ZXI8ZS5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5lLmJhcnljZW50ZXI/MTpuP2UuaS10Lmk6dC5pLWUuaX0pKSxmPWEodSxjLGYpLHIuZm9yRWFjaChzLChmdW5jdGlvbih0KXtmKz10LnZzLmxlbmd0aCx1LnB1c2godC52cyksbCs9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LGgrPXQud2VpZ2h0LGY9YSh1LGMsZil9KSk7dmFyIGQ9e3ZzOnIuZmxhdHRlbih1LCEwKX07cmV0dXJuIGgmJihkLmJhcnljZW50ZXI9bC9oLGQud2VpZ2h0PWgpLGR9fSw0MjE5Oih0LGUsbik9Pnt2YXIgcj1uKDg0MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPTA7cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uIGkoYSl7dmFyIG89bjtyLmZvckVhY2godC5jaGlsZHJlbihhKSxpKSxlW2FdPXtsb3c6byxsaW06bisrfX0pKSxlfSh0KTtyLmZvckVhY2godC5ncmFwaCgpLmR1bW15Q2hhaW5zLChmdW5jdGlvbihuKXtmb3IodmFyIHI9dC5ub2RlKG4pLGk9ci5lZGdlT2JqLGE9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVtdLHM9W10sYz1NYXRoLm1pbihlW25dLmxvdyxlW3JdLmxvdyksdT1NYXRoLm1heChlW25dLmxpbSxlW3JdLmxpbSk7aT1uO2Rve2k9dC5wYXJlbnQoaSksby5wdXNoKGkpfXdoaWxlKGkmJihlW2ldLmxvdz5jfHx1PmVbaV0ubGltKSk7Zm9yKGE9aSxpPXI7KGk9dC5wYXJlbnQoaSkpIT09YTspcy5wdXNoKGkpO3JldHVybntwYXRoOm8uY29uY2F0KHMucmV2ZXJzZSgpKSxsY2E6YX19KHQsZSxpLnYsaS53KSxvPWEucGF0aCxzPWEubGNhLGM9MCx1PW9bY10sbD0hMDtuIT09aS53Oyl7aWYocj10Lm5vZGUobiksbCl7Zm9yKDsodT1vW2NdKSE9PXMmJnQubm9kZSh1KS5tYXhSYW5rPHIucmFuazspYysrO3U9PT1zJiYobD0hMSl9aWYoIWwpe2Zvcig7YzxvLmxlbmd0aC0xJiZ0Lm5vZGUodT1vW2MrMV0pLm1pblJhbms8PXIucmFuazspYysrO3U9b1tjXX10LnNldFBhcmVudChuLHUpLG49dC5zdWNjZXNzb3JzKG4pWzBdfX0pKX19LDM1NzM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg0MzYpLGk9big1NzQpLkdyYXBoLGE9bigxMTM4KTtmdW5jdGlvbiBvKHQsZSl7dmFyIG49e307cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsaSl7dmFyIGE9MCxvPTAscz1lLmxlbmd0aCx1PXIubGFzdChpKTtyZXR1cm4gci5mb3JFYWNoKGksKGZ1bmN0aW9uKGUsbCl7dmFyIGg9ZnVuY3Rpb24odCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIHIuZmluZCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5kdW1teX0pKX0odCxlKSxmPWg/dC5ub2RlKGgpLm9yZGVyOnM7KGh8fGU9PT11KSYmKHIuZm9yRWFjaChpLnNsaWNlKG8sbCsxKSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUociksbz1pLm9yZGVyOyEobzxhfHxmPG8pfHxpLmR1bW15JiZ0Lm5vZGUoZSkuZHVtbXl8fGMobixyLGUpfSkpfSkpLG89bCsxLGE9Zil9KSksaX0pKSxufWZ1bmN0aW9uIHModCxlKXt2YXIgbj17fTtmdW5jdGlvbiBpKGUsaSxhLG8scyl7dmFyIHU7ci5mb3JFYWNoKHIucmFuZ2UoaSxhKSwoZnVuY3Rpb24oaSl7dT1lW2ldLHQubm9kZSh1KS5kdW1teSYmci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKHUpLChmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSk7ci5kdW1teSYmKHIub3JkZXI8b3x8ci5vcmRlcj5zKSYmYyhuLGUsdSl9KSl9KSl9cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsbil7dmFyIGEsbz0tMSxzPTA7cmV0dXJuIHIuZm9yRWFjaChuLChmdW5jdGlvbihyLGMpe2lmKCJib3JkZXIiPT09dC5ub2RlKHIpLmR1bW15KXt2YXIgdT10LnByZWRlY2Vzc29ycyhyKTt1Lmxlbmd0aCYmKGE9dC5ub2RlKHVbMF0pLm9yZGVyLGkobixzLGMsbyxhKSxzPWMsbz1hKX1pKG4scyxuLmxlbmd0aCxhLGUubGVuZ3RoKX0pKSxufSkpLG59ZnVuY3Rpb24gYyh0LGUsbil7aWYoZT5uKXt2YXIgcj1lO2U9bixuPXJ9dmFyIGk9dFtlXTtpfHwodFtlXT1pPXt9KSxpW25dPSEwfWZ1bmN0aW9uIHUodCxlLG4pe2lmKGU+bil7dmFyIGk9ZTtlPW4sbj1pfXJldHVybiByLmhhcyh0W2VdLG4pfWZ1bmN0aW9uIGwodCxlLG4saSl7dmFyIGE9e30sbz17fSxzPXt9O3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7YVt0XT10LG9bdF09dCxzW3RdPWV9KSl9KSksci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe3ZhciBlPS0xO3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt2YXIgYz1pKHQpO2lmKGMubGVuZ3RoKXtjPXIuc29ydEJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBzW3RdfSkpO2Zvcih2YXIgbD0oYy5sZW5ndGgtMSkvMixoPU1hdGguZmxvb3IobCksZj1NYXRoLmNlaWwobCk7aDw9ZjsrK2gpe3ZhciBkPWNbaF07b1t0XT09PXQmJmU8c1tkXSYmIXUobix0LGQpJiYob1tkXT10LG9bdF09YVt0XT1hW2RdLGU9c1tkXSl9fX0pKX0pKSx7cm9vdDphLGFsaWduOm99fWZ1bmN0aW9uIGgodCxlLG4sYSxvKXt2YXIgcz17fSxjPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW5ldyBpLHM9dC5ncmFwaCgpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyl7dmFyIHMsYz1pLm5vZGUoYSksdT1pLm5vZGUobyksbD0wO2lmKGwrPWMud2lkdGgvMixyLmhhcyhjLCJsYWJlbHBvcyIpKXN3aXRjaChjLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6cz0tYy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz1jLndpZHRoLzJ9aWYocyYmKGwrPW4/czotcykscz0wLGwrPShjLmR1bW15P2U6dCkvMixsKz0odS5kdW1teT9lOnQpLzIsbCs9dS53aWR0aC8yLHIuaGFzKHUsImxhYmVscG9zIikpc3dpdGNoKHUubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPXUud2lkdGgvMjticmVhaztjYXNlInIiOnM9LXUud2lkdGgvMn1yZXR1cm4gcyYmKGwrPW4/czotcykscz0wLGx9fShzLm5vZGVzZXAscy5lZGdlc2VwLGEpO3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoby5zZXROb2RlKHIpLGkpe3ZhciBhPW5baV0scz1vLmVkZ2UoYSxyKTtvLnNldEVkZ2UoYSxyLE1hdGgubWF4KGModCxlLGkpLHN8fDApKX1pPWV9KSl9KSksb30odCxlLG4sbyksdT1vPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIG49Yy5ub2RlcygpLHI9bi5wb3AoKSxpPXt9O3I7KWlbcl0/dChyKTooaVtyXT0hMCxuLnB1c2gociksbj1uLmNvbmNhdChlKHIpKSkscj1uLnBvcCgpfXJldHVybiBsKChmdW5jdGlvbih0KXtzW3RdPWMuaW5FZGdlcyh0KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsc1tlLnZdK2MuZWRnZShlKSl9KSwwKX0pLGMucHJlZGVjZXNzb3JzLmJpbmQoYykpLGwoKGZ1bmN0aW9uKGUpe3ZhciBuPWMub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LHNbZS53XS1jLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZyLmJvcmRlclR5cGUhPT11JiYoc1tlXT1NYXRoLm1heChzW2VdLG4pKX0pLGMuc3VjY2Vzc29ycy5iaW5kKGMpKSxyLmZvckVhY2goYSwoZnVuY3Rpb24odCl7c1t0XT1zW25bdF1dfSkpLHN9ZnVuY3Rpb24gZih0LGUpe3JldHVybiByLm1pbkJ5KHIudmFsdWVzKGUpLChmdW5jdGlvbihlKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIHIuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgYT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KHQscikvMjtuPU1hdGgubWF4KGUrYSxuKSxpPU1hdGgubWluKGUtYSxpKX0pKSxuLWl9KSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXIudmFsdWVzKGUpLGk9ci5taW4obiksYT1yLm1heChuKTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihuKXtyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihvKXt2YXIgcyxjPW4rbyx1PXRbY107aWYodSE9PWUpe3ZhciBsPXIudmFsdWVzKHUpOyhzPSJsIj09PW8/aS1yLm1pbihsKTphLXIubWF4KGwpKSYmKHRbY109ci5tYXBWYWx1ZXModSwoZnVuY3Rpb24odCl7cmV0dXJuIHQrc30pKSl9fSkpfSkpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gci5tYXBWYWx1ZXModC51bCwoZnVuY3Rpb24obixpKXtpZihlKXJldHVybiB0W2UudG9Mb3dlckNhc2UoKV1baV07dmFyIGE9ci5zb3J0Qnkoci5tYXAodCxpKSk7cmV0dXJuKGFbMV0rYVsyXSkvMn0pKX10LmV4cG9ydHM9e3Bvc2l0aW9uWDpmdW5jdGlvbih0KXt2YXIgZSxuPWEuYnVpbGRMYXllck1hdHJpeCh0KSxpPXIubWVyZ2Uobyh0LG4pLHModCxuKSksYz17fTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihhKXtlPSJ1Ij09PWE/bjpyLnZhbHVlcyhuKS5yZXZlcnNlKCksci5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obil7InIiPT09biYmKGU9ci5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHIudmFsdWVzKHQpLnJldmVyc2UoKX0pKSk7dmFyIG89KCJ1Ij09PWE/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLHM9bCgwLGUsaSxvKSx1PWgodCxlLHMucm9vdCxzLmFsaWduLCJyIj09PW4pOyJyIj09PW4mJih1PXIubWFwVmFsdWVzKHUsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxjW2Erbl09dX0pKX0pKTt2YXIgdT1mKHQsYyk7cmV0dXJuIGQoYyx1KSxwKGMsdC5ncmFwaCgpLmFsaWduKX0sZmluZFR5cGUxQ29uZmxpY3RzOm8sZmluZFR5cGUyQ29uZmxpY3RzOnMsYWRkQ29uZmxpY3Q6YyxoYXNDb25mbGljdDp1LHZlcnRpY2FsQWxpZ25tZW50OmwsaG9yaXpvbnRhbENvbXBhY3Rpb246aCxhbGlnbkNvb3JkaW5hdGVzOmQsZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQ6ZixiYWxhbmNlOnB9fSw3ODczOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMTEzOCksYT1uKDM1NzMpLnBvc2l0aW9uWDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGE9MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk9ci5tYXgoci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkueT1hK2kvMn0pKSxhKz1pK259KSl9KSh0PWkuYXNOb25Db21wb3VuZEdyYXBoKHQpKSxyLmZvckVhY2goYSh0KSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUobikueD1lfSkpfX0sMzAwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaCxhPW4oNjY4MSkuc2xhY2s7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbiBuKGkpe3IuZm9yRWFjaChlLm5vZGVFZGdlcyhpKSwoZnVuY3Rpb24ocil7dmFyIG89ci52LHM9aT09PW8/ci53Om87dC5oYXNOb2RlKHMpfHxhKGUscil8fCh0LnNldE5vZGUocyx7fSksdC5zZXRFZGdlKGkscyx7fSksbihzKSl9KSl9KSksdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHIubWluQnkoZS5lZGdlcygpLChmdW5jdGlvbihuKXtpZih0Lmhhc05vZGUobi52KSE9PXQuaGFzTm9kZShuLncpKXJldHVybiBhKGUsbil9KSl9ZnVuY3Rpb24gYyh0LGUsbil7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZS5ub2RlKHQpLnJhbmsrPW59KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1uZXcgaSh7ZGlyZWN0ZWQ6ITF9KSx1PXQubm9kZXMoKVswXSxsPXQubm9kZUNvdW50KCk7Zm9yKHIuc2V0Tm9kZSh1LHt9KTtvKHIsdCk8bDspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LDgwOTM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY2ODEpLmxvbmdlc3RQYXRoLGk9bigzMDApLGE9bigyNDcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpkZWZhdWx0OiFmdW5jdGlvbih0KXthKHQpfSh0KTticmVhaztjYXNlInRpZ2h0LXRyZWUiOiFmdW5jdGlvbih0KXtyKHQpLGkodCl9KHQpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpvKHQpfX07dmFyIG89cn0sMjQ3MjoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDMwMCksYT1uKDY2ODEpLnNsYWNrLG89big2NjgxKS5sb25nZXN0UGF0aCxzPW4oNTc0KS5hbGcucHJlb3JkZXIsYz1uKDU3NCkuYWxnLnBvc3RvcmRlcix1PW4oMTEzOCkuc2ltcGxpZnk7ZnVuY3Rpb24gbCh0KXt0PXUodCksbyh0KTt2YXIgZSxuPWkodCk7Zm9yKGQobiksaChuLHQpO2U9eShuKTspbShuLHQsZSxnKG4sdCxlKSl9ZnVuY3Rpb24gaCh0LGUpe3ZhciBuPWModCx0Lm5vZGVzKCkpO249bi5zbGljZSgwLG4ubGVuZ3RoLTEpLHIuZm9yRWFjaChuLChmdW5jdGlvbihuKXshZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubm9kZShuKS5wYXJlbnQ7dC5lZGdlKG4scikuY3V0dmFsdWU9Zih0LGUsbil9KHQsZSxuKX0pKX1mdW5jdGlvbiBmKHQsZSxuKXt2YXIgaT10Lm5vZGUobikucGFyZW50LGE9ITAsbz1lLmVkZ2UobixpKSxzPTA7cmV0dXJuIG98fChhPSExLG89ZS5lZGdlKGksbikpLHM9by53ZWlnaHQsci5mb3JFYWNoKGUubm9kZUVkZ2VzKG4pLChmdW5jdGlvbihyKXt2YXIgbyxjLHU9ci52PT09bixsPXU/ci53OnIudjtpZihsIT09aSl7dmFyIGg9dT09PWEsZj1lLmVkZ2Uocikud2VpZ2h0O2lmKHMrPWg/ZjotZixvPW4sYz1sLHQuaGFzRWRnZShvLGMpKXt2YXIgZD10LmVkZ2UobixsKS5jdXR2YWx1ZTtzKz1oPy1kOmR9fX0pKSxzfWZ1bmN0aW9uIGQodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSkscCh0LHt9LDEsZSl9ZnVuY3Rpb24gcCh0LGUsbixpLGEpe3ZhciBvPW4scz10Lm5vZGUoaSk7cmV0dXJuIGVbaV09ITAsci5mb3JFYWNoKHQubmVpZ2hib3JzKGkpLChmdW5jdGlvbihhKXtyLmhhcyhlLGEpfHwobj1wKHQsZSxuLGEsaSkpfSkpLHMubG93PW8scy5saW09bisrLGE/cy5wYXJlbnQ9YTpkZWxldGUgcy5wYXJlbnQsbn1mdW5jdGlvbiB5KHQpe3JldHVybiByLmZpbmQodC5lZGdlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLmN1dHZhbHVlPDB9KSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIGk9bi52LG89bi53O2UuaGFzRWRnZShpLG8pfHwoaT1uLncsbz1uLnYpO3ZhciBzPXQubm9kZShpKSxjPXQubm9kZShvKSx1PXMsbD0hMTtzLmxpbT5jLmxpbSYmKHU9YyxsPSEwKTt2YXIgaD1yLmZpbHRlcihlLmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiBsPT09digwLHQubm9kZShlLnYpLHUpJiZsIT09digwLHQubm9kZShlLncpLHUpfSkpO3JldHVybiByLm1pbkJ5KGgsKGZ1bmN0aW9uKHQpe3JldHVybiBhKGUsdCl9KSl9ZnVuY3Rpb24gbSh0LGUsbixpKXt2YXIgYT1uLnYsbz1uLnc7dC5yZW1vdmVFZGdlKGEsbyksdC5zZXRFZGdlKGkudixpLncse30pLGQodCksaCh0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5maW5kKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIWUubm9kZSh0KS5wYXJlbnR9KSksaT1zKHQsbik7aT1pLnNsaWNlKDEpLHIuZm9yRWFjaChpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobikucGFyZW50LGk9ZS5lZGdlKG4sciksYT0hMTtpfHwoaT1lLmVkZ2UocixuKSxhPSEwKSxlLm5vZGUobikucmFuaz1lLm5vZGUocikucmFuaysoYT9pLm1pbmxlbjotaS5taW5sZW4pfSkpfSh0LGUpfWZ1bmN0aW9uIHYodCxlLG4pe3JldHVybiBuLmxvdzw9ZS5saW0mJmUubGltPD1uLmxpbX10LmV4cG9ydHM9bCxsLmluaXRMb3dMaW1WYWx1ZXM9ZCxsLmluaXRDdXRWYWx1ZXM9aCxsLmNhbGNDdXRWYWx1ZT1mLGwubGVhdmVFZGdlPXksbC5lbnRlckVkZ2U9ZyxsLmV4Y2hhbmdlRWRnZXM9bX0sNjY4MToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNik7dC5leHBvcnRzPXtsb25nZXN0UGF0aDpmdW5jdGlvbih0KXt2YXIgZT17fTtyLmZvckVhY2godC5zb3VyY2VzKCksKGZ1bmN0aW9uIG4oaSl7dmFyIGE9dC5ub2RlKGkpO2lmKHIuaGFzKGUsaSkpcmV0dXJuIGEucmFuaztlW2ldPSEwO3ZhciBvPXIubWluKHIubWFwKHQub3V0RWRnZXMoaSksKGZ1bmN0aW9uKGUpe3JldHVybiBuKGUudyktdC5lZGdlKGUpLm1pbmxlbn0pKSk7cmV0dXJuIG8hPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkmJm51bGwhPW98fChvPTApLGEucmFuaz1vfSkpfSxzbGFjazpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZS53KS5yYW5rLXQubm9kZShlLnYpLnJhbmstdC5lZGdlKGUpLm1pbmxlbn19fSwxMTM4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaDtmdW5jdGlvbiBhKHQsZSxuLGkpe3ZhciBhO2Rve2E9ci51bmlxdWVJZChpKX13aGlsZSh0Lmhhc05vZGUoYSkpO3JldHVybiBuLmR1bW15PWUsdC5zZXROb2RlKGEsbiksYX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1heChyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKS5yYW5rO2lmKCFyLmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX10LmV4cG9ydHM9e2FkZER1bW15Tm9kZTphLHNpbXBsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgaSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDpyLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgoci5taW5sZW4saS5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt0LmNoaWxkcmVuKG4pLmxlbmd0aHx8ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXtlLnNldEVkZ2Uobix0LmVkZ2UobikpfSkpLGV9LHN1Y2Nlc3NvcldlaWdodHM6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0scHJlZGVjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LmluRWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS52XT0obltlLnZdfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtpZighbyYmIXMpdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPXUqby9zLHI9dSk6KG88MCYmKGM9LWMpLG49YyxyPWMqcy9vKSx7eDppK24seTphK3J9fSxidWlsZExheWVyTWF0cml4OmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHIucmFuZ2Uobyh0KSsxKSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pLGE9aS5yYW5rO3IuaXNVbmRlZmluZWQoYSl8fChlW2FdW2kub3JkZXJdPW4pfSkpLGV9LG5vcm1hbGl6ZVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobik7ci5oYXMoaSwicmFuayIpJiYoaS5yYW5rLT1lKX0pKX0scmVtb3ZlRW1wdHlSYW5rczpmdW5jdGlvbih0KXt2YXIgZT1yLm1pbihyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksbj1bXTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUocikucmFuay1lO25baV18fChuW2ldPVtdKSxuW2ldLnB1c2gocil9KSk7dmFyIGk9MCxhPXQuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtyLmZvckVhY2gobiwoZnVuY3Rpb24oZSxuKXtyLmlzVW5kZWZpbmVkKGUpJiZuJWEhPTA/LS1pOmkmJnIuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkucmFuays9aX0pKX0pKX0sYWRkQm9yZGVyTm9kZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihpLnJhbms9bixpLm9yZGVyPXIpLGEodCwiYm9yZGVyIixpLGUpfSxtYXhSYW5rOm8scGFydGl0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49e2xoczpbXSxyaHM6W119O3JldHVybiByLmZvckVhY2godCwoZnVuY3Rpb24odCl7ZSh0KT9uLmxocy5wdXNoKHQpOm4ucmhzLnB1c2godCl9KSksbn0sdGltZTpmdW5jdGlvbih0LGUpe3ZhciBuPXIubm93KCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoci5ub3coKS1uKSsibXMiKX19LG5vdGltZTpmdW5jdGlvbih0LGUpe3JldHVybiBlKCl9fX0sODE3Nzp0PT57dC5leHBvcnRzPSIwLjguNSJ9LDc4NTY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PU9iamVjdC5oYXNPd25Qcm9wZXJ0eSxlPU9iamVjdC5zZXRQcm90b3R5cGVPZixuPU9iamVjdC5pc0Zyb3plbixyPU9iamVjdC5nZXRQcm90b3R5cGVPZixpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYT1PYmplY3QuZnJlZXplLG89T2JqZWN0LnNlYWwscz1PYmplY3QuY3JlYXRlLGM9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LHU9Yy5hcHBseSxsPWMuY29uc3RydWN0O3V8fCh1PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5hcHBseShlLG4pfSksYXx8KGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxvfHwobz1mdW5jdGlvbih0KXtyZXR1cm4gdH0pLGx8fChsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSh0LFtudWxsXS5jb25jYXQoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1BcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspbltlXT10W2VdO3JldHVybiBufXJldHVybiBBcnJheS5mcm9tKHQpfShlKSkpKX0pO3ZhciBoLGY9dyhBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksZD13KEFycmF5LnByb3RvdHlwZS5wb3ApLHA9dyhBcnJheS5wcm90b3R5cGUucHVzaCkseT13KFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLGc9dyhTdHJpbmcucHJvdG90eXBlLm1hdGNoKSxtPXcoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSx2PXcoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxiPXcoU3RyaW5nLnByb3RvdHlwZS50cmltKSxfPXcoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSx4PShoPVR5cGVFcnJvcixmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9QXJyYXkodCksbj0wO248dDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGwoaCxlKX0pO2Z1bmN0aW9uIHcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4xP24tMTowKSxpPTE7aTxuO2krKylyW2ktMV09YXJndW1lbnRzW2ldO3JldHVybiB1KHQsZSxyKX19ZnVuY3Rpb24gayh0LHIpe2UmJmUodCxudWxsKTtmb3IodmFyIGk9ci5sZW5ndGg7aS0tOyl7dmFyIGE9cltpXTtpZigic3RyaW5nIj09dHlwZW9mIGEpe3ZhciBvPXkoYSk7byE9PWEmJihuKHIpfHwocltpXT1vKSxhPW8pfXRbYV09ITB9cmV0dXJuIHR9ZnVuY3Rpb24gVChlKXt2YXIgbj1zKG51bGwpLHI9dm9pZCAwO2ZvcihyIGluIGUpdSh0LGUsW3JdKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gRSh0LGUpe2Zvcig7bnVsbCE9PXQ7KXt2YXIgbj1pKHQsZSk7aWYobil7aWYobi5nZXQpcmV0dXJuIHcobi5nZXQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLnZhbHVlKXJldHVybiB3KG4udmFsdWUpfXQ9cih0KX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiZmFsbGJhY2sgdmFsdWUgZm9yIix0KSxudWxsfX12YXIgQz1hKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxTPWEoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLEE9YShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxNPWEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmZWRyb3BzaGFkb3ciLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLE49YShbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIl0pLEQ9YShbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksTz1hKFsiI3RleHQiXSksQj1hKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxMPWEoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLEk9YShbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxSPWEoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxGPW8oL1x7XHtbXHNcU10qfFtcc1xTXSpcfVx9L2dtKSxQPW8oLzwlW1xzXFNdKnxbXHNcU10qJT4vZ20pLGo9bygvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxZPW8oL15hcmlhLVtcLVx3XSskLyksej1vKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksVT1vKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxxPW8oL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksSD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH07ZnVuY3Rpb24gJCh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxuPUFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20odCl9dmFyIFc9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz9udWxsOndpbmRvd30sVj1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09KHZvaWQgMD09PXQ/InVuZGVmaW5lZCI6SCh0KSl8fCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNyZWF0ZVBvbGljeSlyZXR1cm4gbnVsbDt2YXIgbj1udWxsLHI9ImRhdGEtdHQtcG9saWN5LXN1ZmZpeCI7ZS5jdXJyZW50U2NyaXB0JiZlLmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKHIpJiYobj1lLmN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKHIpKTt2YXIgaT0iZG9tcHVyaWZ5Iisobj8iIyIrbjoiIik7dHJ5e3JldHVybiB0LmNyZWF0ZVBvbGljeShpLHtjcmVhdGVIVE1MOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0pfWNhdGNoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIitpKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19O3JldHVybiBmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlcoKSxuPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfTtpZihuLnZlcnNpb249IjIuMy40IixuLnJlbW92ZWQ9W10sIWV8fCFlLmRvY3VtZW50fHw5IT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gbi5pc1N1cHBvcnRlZD0hMSxuO3ZhciByPWUuZG9jdW1lbnQsaT1lLmRvY3VtZW50LG89ZS5Eb2N1bWVudEZyYWdtZW50LHM9ZS5IVE1MVGVtcGxhdGVFbGVtZW50LGM9ZS5Ob2RlLHU9ZS5FbGVtZW50LGw9ZS5Ob2RlRmlsdGVyLGg9ZS5OYW1lZE5vZGVNYXAsdz12b2lkIDA9PT1oP2UuTmFtZWROb2RlTWFwfHxlLk1vek5hbWVkQXR0ck1hcDpoLEc9ZS5IVE1MRm9ybUVsZW1lbnQsWD1lLkRPTVBhcnNlcixaPWUudHJ1c3RlZFR5cGVzLFE9dS5wcm90b3R5cGUsSz1FKFEsImNsb25lTm9kZSIpLEo9RShRLCJuZXh0U2libGluZyIpLHR0PUUoUSwiY2hpbGROb2RlcyIpLGV0PUUoUSwicGFyZW50Tm9kZSIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzKXt2YXIgbnQ9aS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO250LmNvbnRlbnQmJm50LmNvbnRlbnQub3duZXJEb2N1bWVudCYmKGk9bnQuY29udGVudC5vd25lckRvY3VtZW50KX12YXIgcnQ9VihaLHIpLGl0PXJ0JiZSdD9ydC5jcmVhdGVIVE1MKCIiKToiIixhdD1pLG90PWF0LmltcGxlbWVudGF0aW9uLHN0PWF0LmNyZWF0ZU5vZGVJdGVyYXRvcixjdD1hdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50LHV0PWF0LmdldEVsZW1lbnRzQnlUYWdOYW1lLGx0PXIuaW1wb3J0Tm9kZSxodD17fTt0cnl7aHQ9VChpKS5kb2N1bWVudE1vZGU/aS5kb2N1bWVudE1vZGU6e319Y2F0Y2godCl7fXZhciBmdD17fTtuLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBldCYmb3QmJnZvaWQgMCE9PW90LmNyZWF0ZUhUTUxEb2N1bWVudCYmOSE9PWh0O3ZhciBkdD1GLHB0PVAseXQ9aixndD1ZLG10PVUsdnQ9cSxidD16LF90PW51bGwseHQ9ayh7fSxbXS5jb25jYXQoJChDKSwkKFMpLCQoQSksJChOKSwkKE8pKSksd3Q9bnVsbCxrdD1rKHt9LFtdLmNvbmNhdCgkKEIpLCQoTCksJChJKSwkKFIpKSksVHQ9T2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksRXQ9bnVsbCxDdD1udWxsLFN0PSEwLEF0PSEwLE10PSExLE50PSExLER0PSExLE90PSExLEJ0PSExLEx0PSExLEl0PSExLFJ0PSExLEZ0PSEwLFB0PSEwLGp0PSExLFl0PXt9LHp0PW51bGwsVXQ9ayh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlmcmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3JpcHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pLHF0PW51bGwsSHQ9ayh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pLCR0PW51bGwsV3Q9ayh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLFZ0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixHdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFh0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixadD1YdCxRdD0hMSxLdD12b2lkIDAsSnQ9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXSx0ZT0idGV4dC9odG1sIixlZT12b2lkIDAsbmU9bnVsbCxyZT1pLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxpZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFJlZ0V4cHx8dCBpbnN0YW5jZW9mIEZ1bmN0aW9ufSxhZT1mdW5jdGlvbih0KXtuZSYmbmU9PT10fHwodCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpIKHQpKXx8KHQ9e30pLHQ9VCh0KSxfdD0iQUxMT1dFRF9UQUdTImluIHQ/ayh7fSx0LkFMTE9XRURfVEFHUyk6eHQsd3Q9IkFMTE9XRURfQVRUUiJpbiB0P2soe30sdC5BTExPV0VEX0FUVFIpOmt0LCR0PSJBRERfVVJJX1NBRkVfQVRUUiJpbiB0P2soVChXdCksdC5BRERfVVJJX1NBRkVfQVRUUik6V3QscXQ9IkFERF9EQVRBX1VSSV9UQUdTImluIHQ/ayhUKEh0KSx0LkFERF9EQVRBX1VSSV9UQUdTKTpIdCx6dD0iRk9SQklEX0NPTlRFTlRTImluIHQ/ayh7fSx0LkZPUkJJRF9DT05URU5UUyk6VXQsRXQ9IkZPUkJJRF9UQUdTImluIHQ/ayh7fSx0LkZPUkJJRF9UQUdTKTp7fSxDdD0iRk9SQklEX0FUVFIiaW4gdD9rKHt9LHQuRk9SQklEX0FUVFIpOnt9LFl0PSJVU0VfUFJPRklMRVMiaW4gdCYmdC5VU0VfUFJPRklMRVMsU3Q9ITEhPT10LkFMTE9XX0FSSUFfQVRUUixBdD0hMSE9PXQuQUxMT1dfREFUQV9BVFRSLE10PXQuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLE50PXQuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxEdD10LldIT0xFX0RPQ1VNRU5UfHwhMSxMdD10LlJFVFVSTl9ET018fCExLEl0PXQuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsUnQ9dC5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxCdD10LkZPUkNFX0JPRFl8fCExLEZ0PSExIT09dC5TQU5JVElaRV9ET00sUHQ9ITEhPT10LktFRVBfQ09OVEVOVCxqdD10LklOX1BMQUNFfHwhMSxidD10LkFMTE9XRURfVVJJX1JFR0VYUHx8YnQsWnQ9dC5OQU1FU1BBQ0V8fFh0LHQuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJmllKHQuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKFR0LnRhZ05hbWVDaGVjaz10LkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksdC5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmaWUodC5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoVHQuYXR0cmlidXRlTmFtZUNoZWNrPXQuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSx0LkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYiYm9vbGVhbiI9PXR5cGVvZiB0LkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKFR0LmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz10LkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksS3Q9S3Q9LTE9PT1KdC5pbmRleE9mKHQuUEFSU0VSX01FRElBX1RZUEUpP3RlOnQuUEFSU0VSX01FRElBX1RZUEUsZWU9ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1LdD9mdW5jdGlvbih0KXtyZXR1cm4gdH06eSxOdCYmKEF0PSExKSxJdCYmKEx0PSEwKSxZdCYmKF90PWsoe30sW10uY29uY2F0KCQoTykpKSx3dD1bXSwhMD09PVl0Lmh0bWwmJihrKF90LEMpLGsod3QsQikpLCEwPT09WXQuc3ZnJiYoayhfdCxTKSxrKHd0LEwpLGsod3QsUikpLCEwPT09WXQuc3ZnRmlsdGVycyYmKGsoX3QsQSksayh3dCxMKSxrKHd0LFIpKSwhMD09PVl0Lm1hdGhNbCYmKGsoX3QsTiksayh3dCxJKSxrKHd0LFIpKSksdC5BRERfVEFHUyYmKF90PT09eHQmJihfdD1UKF90KSksayhfdCx0LkFERF9UQUdTKSksdC5BRERfQVRUUiYmKHd0PT09a3QmJih3dD1UKHd0KSksayh3dCx0LkFERF9BVFRSKSksdC5BRERfVVJJX1NBRkVfQVRUUiYmaygkdCx0LkFERF9VUklfU0FGRV9BVFRSKSx0LkZPUkJJRF9DT05URU5UUyYmKHp0PT09VXQmJih6dD1UKHp0KSksayh6dCx0LkZPUkJJRF9DT05URU5UUykpLFB0JiYoX3RbIiN0ZXh0Il09ITApLER0JiZrKF90LFsiaHRtbCIsImhlYWQiLCJib2R5Il0pLF90LnRhYmxlJiYoayhfdCxbInRib2R5Il0pLGRlbGV0ZSBFdC50Ym9keSksYSYmYSh0KSxuZT10KX0sb2U9ayh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksc2U9ayh7fSxbImZvcmVpZ25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxjZT1rKHt9LFMpO2soY2UsQSksayhjZSxNKTt2YXIgdWU9ayh7fSxOKTtrKHVlLEQpO3ZhciBsZT1mdW5jdGlvbih0KXt2YXIgZT1ldCh0KTtlJiZlLnRhZ05hbWV8fChlPXtuYW1lc3BhY2VVUkk6WHQsdGFnTmFtZToidGVtcGxhdGUifSk7dmFyIG49eSh0LnRhZ05hbWUpLHI9eShlLnRhZ05hbWUpO2lmKHQubmFtZXNwYWNlVVJJPT09R3QpcmV0dXJuIGUubmFtZXNwYWNlVVJJPT09WHQ/InN2ZyI9PT1uOmUubmFtZXNwYWNlVVJJPT09VnQ/InN2ZyI9PT1uJiYoImFubm90YXRpb24teG1sIj09PXJ8fG9lW3JdKTpCb29sZWFuKGNlW25dKTtpZih0Lm5hbWVzcGFjZVVSST09PVZ0KXJldHVybiBlLm5hbWVzcGFjZVVSST09PVh0PyJtYXRoIj09PW46ZS5uYW1lc3BhY2VVUkk9PT1HdD8ibWF0aCI9PT1uJiZzZVtyXTpCb29sZWFuKHVlW25dKTtpZih0Lm5hbWVzcGFjZVVSST09PVh0KXtpZihlLm5hbWVzcGFjZVVSST09PUd0JiYhc2Vbcl0pcmV0dXJuITE7aWYoZS5uYW1lc3BhY2VVUkk9PT1WdCYmIW9lW3JdKXJldHVybiExO3ZhciBpPWsoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSk7cmV0dXJuIXVlW25dJiYoaVtuXXx8IWNlW25dKX1yZXR1cm4hMX0saGU9ZnVuY3Rpb24odCl7cChuLnJlbW92ZWQse2VsZW1lbnQ6dH0pO3RyeXt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y2F0Y2goZSl7dHJ5e3Qub3V0ZXJIVE1MPWl0fWNhdGNoKGUpe3QucmVtb3ZlKCl9fX0sZmU9ZnVuY3Rpb24odCxlKXt0cnl7cChuLnJlbW92ZWQse2F0dHJpYnV0ZTplLmdldEF0dHJpYnV0ZU5vZGUodCksZnJvbTplfSl9Y2F0Y2godCl7cChuLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206ZX0pfWlmKGUucmVtb3ZlQXR0cmlidXRlKHQpLCJpcyI9PT10JiYhd3RbdF0paWYoTHR8fEl0KXRyeXtoZShlKX1jYXRjaCh0KXt9ZWxzZSB0cnl7ZS5zZXRBdHRyaWJ1dGUodCwiIil9Y2F0Y2godCl7fX0sZGU9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwLG49dm9pZCAwO2lmKEJ0KXQ9IjxyZW1vdmU+PC9yZW1vdmU+Iit0O2Vsc2V7dmFyIHI9Zyh0LC9eW1xyXG5cdCBdKy8pO249ciYmclswXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PUt0JiYodD0nPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFkPjwvaGVhZD48Ym9keT4nK3QrIjwvYm9keT48L2h0bWw+Iik7dmFyIGE9cnQ/cnQuY3JlYXRlSFRNTCh0KTp0O2lmKFp0PT09WHQpdHJ5e2U9KG5ldyBYKS5wYXJzZUZyb21TdHJpbmcoYSxLdCl9Y2F0Y2godCl7fWlmKCFlfHwhZS5kb2N1bWVudEVsZW1lbnQpe2U9b3QuY3JlYXRlRG9jdW1lbnQoWnQsInRlbXBsYXRlIixudWxsKTt0cnl7ZS5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPVF0PyIiOmF9Y2F0Y2godCl7fX12YXIgbz1lLmJvZHl8fGUuZG9jdW1lbnRFbGVtZW50O3JldHVybiB0JiZuJiZvLmluc2VydEJlZm9yZShpLmNyZWF0ZVRleHROb2RlKG4pLG8uY2hpbGROb2Rlc1swXXx8bnVsbCksWnQ9PT1YdD91dC5jYWxsKGUsRHQ/Imh0bWwiOiJib2R5IilbMF06RHQ/ZS5kb2N1bWVudEVsZW1lbnQ6b30scGU9ZnVuY3Rpb24odCl7cmV0dXJuIHN0LmNhbGwodC5vd25lckRvY3VtZW50fHx0LHQsbC5TSE9XX0VMRU1FTlR8bC5TSE9XX0NPTU1FTlR8bC5TSE9XX1RFWFQsbnVsbCwhMSl9LHllPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRyYmKCJzdHJpbmciIT10eXBlb2YgdC5ub2RlTmFtZXx8InN0cmluZyIhPXR5cGVvZiB0LnRleHRDb250ZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgdC5yZW1vdmVDaGlsZHx8ISh0LmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiB3KXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgdC5zZXRBdHRyaWJ1dGV8fCJzdHJpbmciIT10eXBlb2YgdC5uYW1lc3BhY2VVUkl8fCJmdW5jdGlvbiIhPXR5cGVvZiB0Lmluc2VydEJlZm9yZSl9LGdlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT09KHZvaWQgMD09PWM/InVuZGVmaW5lZCI6SChjKSk/dCBpbnN0YW5jZW9mIGM6dCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpIKHQpKSYmIm51bWJlciI9PXR5cGVvZiB0Lm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIHQubm9kZU5hbWV9LG1lPWZ1bmN0aW9uKHQsZSxyKXtmdFt0XSYmZihmdFt0XSwoZnVuY3Rpb24odCl7dC5jYWxsKG4sZSxyLG5lKX0pKX0sdmU9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwO2lmKG1lKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIix0LG51bGwpLHllKHQpKXJldHVybiBoZSh0KSwhMDtpZihnKHQubm9kZU5hbWUsL1tcdTAwODAtXHVGRkZGXS8pKXJldHVybiBoZSh0KSwhMDt2YXIgcj1lZSh0Lm5vZGVOYW1lKTtpZihtZSgidXBvblNhbml0aXplRWxlbWVudCIsdCx7dGFnTmFtZTpyLGFsbG93ZWRUYWdzOl90fSksIWdlKHQuZmlyc3RFbGVtZW50Q2hpbGQpJiYoIWdlKHQuY29udGVudCl8fCFnZSh0LmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmXygvPFsvXHddL2csdC5pbm5lckhUTUwpJiZfKC88Wy9cd10vZyx0LnRleHRDb250ZW50KSlyZXR1cm4gaGUodCksITA7aWYoInNlbGVjdCI9PT1yJiZfKC88dGVtcGxhdGUvaSx0LmlubmVySFRNTCkpcmV0dXJuIGhlKHQpLCEwO2lmKCFfdFtyXXx8RXRbcl0pe2lmKFB0JiYhenRbcl0pe3ZhciBpPWV0KHQpfHx0LnBhcmVudE5vZGUsYT10dCh0KXx8dC5jaGlsZE5vZGVzO2lmKGEmJmkpZm9yKHZhciBvPWEubGVuZ3RoLTE7bz49MDstLW8paS5pbnNlcnRCZWZvcmUoSyhhW29dLCEwKSxKKHQpKX1pZighRXRbcl0mJl9lKHIpKXtpZihUdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJl8oVHQudGFnTmFtZUNoZWNrLHIpKXJldHVybiExO2lmKFR0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZUdC50YWdOYW1lQ2hlY2socikpcmV0dXJuITF9cmV0dXJuIGhlKHQpLCEwfXJldHVybiB0IGluc3RhbmNlb2YgdSYmIWxlKHQpPyhoZSh0KSwhMCk6Im5vc2NyaXB0IiE9PXImJiJub2VtYmVkIiE9PXJ8fCFfKC88XC9ubyhzY3JpcHR8ZW1iZWQpL2ksdC5pbm5lckhUTUwpPyhOdCYmMz09PXQubm9kZVR5cGUmJihlPXQudGV4dENvbnRlbnQsZT1tKGUsZHQsIiAiKSxlPW0oZSxwdCwiICIpLHQudGV4dENvbnRlbnQhPT1lJiYocChuLnJlbW92ZWQse2VsZW1lbnQ6dC5jbG9uZU5vZGUoKX0pLHQudGV4dENvbnRlbnQ9ZSkpLG1lKCJhZnRlclNhbml0aXplRWxlbWVudHMiLHQsbnVsbCksITEpOihoZSh0KSwhMCl9LGJlPWZ1bmN0aW9uKHQsZSxuKXtpZihGdCYmKCJpZCI9PT1lfHwibmFtZSI9PT1lKSYmKG4gaW4gaXx8biBpbiByZSkpcmV0dXJuITE7aWYoQXQmJiFDdFtlXSYmXyh5dCxlKSk7ZWxzZSBpZihTdCYmXyhndCxlKSk7ZWxzZSBpZighd3RbZV18fEN0W2VdKXtpZighKF9lKHQpJiYoVHQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZfKFR0LnRhZ05hbWVDaGVjayx0KXx8VHQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlR0LnRhZ05hbWVDaGVjayh0KSkmJihUdC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJl8oVHQuYXR0cmlidXRlTmFtZUNoZWNrLGUpfHxUdC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmVHQuYXR0cmlidXRlTmFtZUNoZWNrKGUpKXx8ImlzIj09PWUmJlR0LmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKFR0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmXyhUdC50YWdOYW1lQ2hlY2ssbil8fFR0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZUdC50YWdOYW1lQ2hlY2sobikpKSlyZXR1cm4hMX1lbHNlIGlmKCR0W2VdKTtlbHNlIGlmKF8oYnQsbShuLHZ0LCIiKSkpO2Vsc2UgaWYoInNyYyIhPT1lJiYieGxpbms6aHJlZiIhPT1lJiYiaHJlZiIhPT1lfHwic2NyaXB0Ij09PXR8fDAhPT12KG4sImRhdGE6Iil8fCFxdFt0XSlpZihNdCYmIV8obXQsbShuLHZ0LCIiKSkpO2Vsc2UgaWYobilyZXR1cm4hMTtyZXR1cm4hMH0sX2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5kZXhPZigiLSIpPjB9LHhlPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCxyPXZvaWQgMCxpPXZvaWQgMCxhPXZvaWQgMDttZSgiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIix0LG51bGwpO3ZhciBvPXQuYXR0cmlidXRlcztpZihvKXt2YXIgcz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOnd0fTtmb3IoYT1vLmxlbmd0aDthLS07KXt2YXIgYz1lPW9bYV0sdT1jLm5hbWUsbD1jLm5hbWVzcGFjZVVSSTtpZihyPWIoZS52YWx1ZSksaT1lZSh1KSxzLmF0dHJOYW1lPWkscy5hdHRyVmFsdWU9cixzLmtlZXBBdHRyPSEwLHMuZm9yY2VLZWVwQXR0cj12b2lkIDAsbWUoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsdCxzKSxyPXMuYXR0clZhbHVlLCFzLmZvcmNlS2VlcEF0dHImJihmZSh1LHQpLHMua2VlcEF0dHIpKWlmKF8oL1wvPi9pLHIpKWZlKHUsdCk7ZWxzZXtOdCYmKHI9bShyLGR0LCIgIikscj1tKHIscHQsIiAiKSk7dmFyIGg9ZWUodC5ub2RlTmFtZSk7aWYoYmUoaCxpLHIpKXRyeXtsP3Quc2V0QXR0cmlidXRlTlMobCx1LHIpOnQuc2V0QXR0cmlidXRlKHUsciksZChuLnJlbW92ZWQpfWNhdGNoKHQpe319fW1lKCJhZnRlclNhbml0aXplQXR0cmlidXRlcyIsdCxudWxsKX19LHdlPWZ1bmN0aW9uIHQoZSl7dmFyIG49dm9pZCAwLHI9cGUoZSk7Zm9yKG1lKCJiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSIsZSxudWxsKTtuPXIubmV4dE5vZGUoKTspbWUoInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLG4sbnVsbCksdmUobil8fChuLmNvbnRlbnQgaW5zdGFuY2VvZiBvJiZ0KG4uY29udGVudCkseGUobikpO21lKCJhZnRlclNhbml0aXplU2hhZG93RE9NIixlLG51bGwpfTtyZXR1cm4gbi5zYW5pdGl6ZT1mdW5jdGlvbih0LGkpe3ZhciBhPXZvaWQgMCxzPXZvaWQgMCx1PXZvaWQgMCxsPXZvaWQgMCxoPXZvaWQgMDtpZigoUXQ9IXQpJiYodD0iXHgzYyEtLVx4M2UiKSwic3RyaW5nIiE9dHlwZW9mIHQmJiFnZSh0KSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmcpdGhyb3cgeCgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigic3RyaW5nIiE9dHlwZW9mKHQ9dC50b1N0cmluZygpKSl0aHJvdyB4KCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9aWYoIW4uaXNTdXBwb3J0ZWQpe2lmKCJvYmplY3QiPT09SChlLnRvU3RhdGljSFRNTCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvU3RhdGljSFRNTCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBlLnRvU3RhdGljSFRNTCh0KTtpZihnZSh0KSlyZXR1cm4gZS50b1N0YXRpY0hUTUwodC5vdXRlckhUTUwpfXJldHVybiB0fWlmKE90fHxhZShpKSxuLnJlbW92ZWQ9W10sInN0cmluZyI9PXR5cGVvZiB0JiYoanQ9ITEpLGp0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBjKTE9PT0ocz0oYT1kZSgiXHgzYyEtLS0tXHgzZSIpKS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUodCwhMCkpLm5vZGVUeXBlJiYiQk9EWSI9PT1zLm5vZGVOYW1lfHwiSFRNTCI9PT1zLm5vZGVOYW1lP2E9czphLmFwcGVuZENoaWxkKHMpO2Vsc2V7aWYoIUx0JiYhTnQmJiFEdCYmLTE9PT10LmluZGV4T2YoIjwiKSlyZXR1cm4gcnQmJlJ0P3J0LmNyZWF0ZUhUTUwodCk6dDtpZighKGE9ZGUodCkpKXJldHVybiBMdD9udWxsOml0fWEmJkJ0JiZoZShhLmZpcnN0Q2hpbGQpO2Zvcih2YXIgZj1wZShqdD90OmEpO3U9Zi5uZXh0Tm9kZSgpOykzPT09dS5ub2RlVHlwZSYmdT09PWx8fHZlKHUpfHwodS5jb250ZW50IGluc3RhbmNlb2YgbyYmd2UodS5jb250ZW50KSx4ZSh1KSxsPXUpO2lmKGw9bnVsbCxqdClyZXR1cm4gdDtpZihMdCl7aWYoSXQpZm9yKGg9Y3QuY2FsbChhLm93bmVyRG9jdW1lbnQpO2EuZmlyc3RDaGlsZDspaC5hcHBlbmRDaGlsZChhLmZpcnN0Q2hpbGQpO2Vsc2UgaD1hO3JldHVybiB3dC5zaGFkb3dyb290JiYoaD1sdC5jYWxsKHIsaCwhMCkpLGh9dmFyIGQ9RHQ/YS5vdXRlckhUTUw6YS5pbm5lckhUTUw7cmV0dXJuIE50JiYoZD1tKGQsZHQsIiAiKSxkPW0oZCxwdCwiICIpKSxydCYmUnQ/cnQuY3JlYXRlSFRNTChkKTpkfSxuLnNldENvbmZpZz1mdW5jdGlvbih0KXthZSh0KSxPdD0hMH0sbi5jbGVhckNvbmZpZz1mdW5jdGlvbigpe25lPW51bGwsT3Q9ITF9LG4uaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7bmV8fGFlKHt9KTt2YXIgcj1lZSh0KSxpPWVlKGUpO3JldHVybiBiZShyLGksbil9LG4uYWRkSG9vaz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZnRbdF09ZnRbdF18fFtdLHAoZnRbdF0sZSkpfSxuLnJlbW92ZUhvb2s9ZnVuY3Rpb24odCl7ZnRbdF0mJmQoZnRbdF0pfSxuLnJlbW92ZUhvb2tzPWZ1bmN0aW9uKHQpe2Z0W3RdJiYoZnRbdF09W10pfSxuLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7ZnQ9e319LG59KCl9KCl9LDgyODI6KHQsZSxuKT0+e3ZhciByPW4oMjM1NCk7dC5leHBvcnRzPXtHcmFwaDpyLkdyYXBoLGpzb246big4OTc0KSxhbGc6bigyNDQwKSx2ZXJzaW9uOnIudmVyc2lvbn19LDI4NDI6KHQsZSxuKT0+e3ZhciByPW4oOTEyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiBhKGkpe3IuaGFzKG4saSl8fChuW2ldPSEwLGUucHVzaChpKSxyLmVhY2godC5zdWNjZXNzb3JzKGkpLGEpLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxhKSl9cmV0dXJuIHIuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2U9W10sYSh0KSxlLmxlbmd0aCYmaS5wdXNoKGUpfSkpLGl9fSwzOTg0Oih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpO2Z1bmN0aW9uIGkodCxlLG4sYSxvLHMpe3IuaGFzKGEsZSl8fChhW2VdPSEwLG58fHMucHVzaChlKSxyLmVhY2gobyhlKSwoZnVuY3Rpb24oZSl7aSh0LGUsbixhLG8scyl9KSksbiYmcy5wdXNoKGUpKX10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3IuaXNBcnJheShlKXx8KGU9W2VdKTt2YXIgYT0odC5pc0RpcmVjdGVkKCk/dC5zdWNjZXNzb3JzOnQubmVpZ2hib3JzKS5iaW5kKHQpLG89W10scz17fTtyZXR1cm4gci5lYWNoKGUsKGZ1bmN0aW9uKGUpe2lmKCF0Lmhhc05vZGUoZSkpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrZSk7aSh0LGUsInBvc3QiPT09bixzLGEsbyl9KSksb319LDQ4NDc6KHQsZSxuKT0+e3ZhciByPW4oMzc2MyksaT1uKDkxMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGkudHJhbnNmb3JtKHQubm9kZXMoKSwoZnVuY3Rpb24oaSxhKXtpW2FdPXIodCxhLGUsbil9KSx7fSl9fSwzNzYzOih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpLGk9big5Njc1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBhLG8scz17fSxjPW5ldyBpLHU9ZnVuY3Rpb24odCl7dmFyIGU9dC52IT09YT90LnY6dC53LHI9c1tlXSxpPW4odCksdT1vLmRpc3RhbmNlK2k7aWYoaTwwKXRocm93IG5ldyBFcnJvcigiZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiBCYWQgZWRnZTogIit0KyIgV2VpZ2h0OiAiK2kpO3U8ci5kaXN0YW5jZSYmKHIuZGlzdGFuY2U9dSxyLnByZWRlY2Vzc29yPWEsYy5kZWNyZWFzZShlLHUpKX07Zm9yKHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtzW3RdPXtkaXN0YW5jZTpufSxjLmFkZCh0LG4pfSkpO2Muc2l6ZSgpPjAmJihhPWMucmVtb3ZlTWluKCksKG89c1thXSkuZGlzdGFuY2UhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOylyKGEpLmZvckVhY2godSk7cmV0dXJuIHN9KHQsU3RyaW5nKGUpLG58fGEscnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX07dmFyIGE9ci5jb25zdGFudCgxKX0sOTA5NjoodCxlLG4pPT57dmFyIHI9big5MTI2KSxpPW4oNTAyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmZpbHRlcihpKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+MXx8MT09PWUubGVuZ3RoJiZ0Lmhhc0VkZ2UoZVswXSxlWzBdKX0pKX19LDg5MjQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9LGk9dC5ub2RlcygpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdF09e30sclt0XVt0XT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKChmdW5jdGlvbihlKXt0IT09ZSYmKHJbdF1bZV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkpLG4odCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bi52PT09dD9uLnc6bi52LGE9ZShuKTtyW3RdW2ldPXtkaXN0YW5jZTphLHByZWRlY2Vzc29yOnR9fSkpfSkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9clt0XTtpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhPXJbbl07aS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1hW3RdLGk9ZVtuXSxvPWFbbl0scz1yLmRpc3RhbmNlK2kuZGlzdGFuY2U7czxvLmRpc3RhbmNlJiYoby5kaXN0YW5jZT1zLG8ucHJlZGVjZXNzb3I9aS5wcmVkZWNlc3Nvcil9KSl9KSl9KSkscn0odCxlfHxpLG58fGZ1bmN0aW9uKGUpe3JldHVybiB0Lm91dEVkZ2VzKGUpfSl9O3ZhciBpPXIuY29uc3RhbnQoMSl9LDI0NDA6KHQsZSxuKT0+e3QuZXhwb3J0cz17Y29tcG9uZW50czpuKDI4NDIpLGRpamtzdHJhOm4oMzc2MyksZGlqa3N0cmFBbGw6big0ODQ3KSxmaW5kQ3ljbGVzOm4oOTA5NiksZmxveWRXYXJzaGFsbDpuKDg5MjQpLGlzQWN5Y2xpYzpuKDI3MDcpLHBvc3RvcmRlcjpuKDg4MjgpLHByZW9yZGVyOm4oMjY0OCkscHJpbTpuKDUxNCksdGFyamFuOm4oNTAyMyksdG9wc29ydDpuKDIxNjYpfX0sMjcwNzoodCxlLG4pPT57dmFyIHI9bigyMTY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3IodCl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIHIuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH19LDg4Mjg6KHQsZSxuKT0+e3ZhciByPW4oMzk4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwb3N0Iil9fSwyNjQ4Oih0LGUsbik9Pnt2YXIgcj1uKDM5ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsZSwicHJlIil9fSw1MTQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNiksaT1uKDc3MSksYT1uKDk2NzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89bmV3IGkscz17fSxjPW5ldyBhO2Z1bmN0aW9uIHUodCl7dmFyIHI9dC52PT09bj90Lnc6dC52LGk9Yy5wcmlvcml0eShyKTtpZih2b2lkIDAhPT1pKXt2YXIgYT1lKHQpO2E8aSYmKHNbcl09bixjLmRlY3JlYXNlKHIsYSkpfX1pZigwPT09dC5ub2RlQ291bnQoKSlyZXR1cm4gbztyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtjLmFkZCh0LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksby5zZXROb2RlKHQpfSkpLGMuZGVjcmVhc2UodC5ub2RlcygpWzBdLDApO2Zvcih2YXIgbD0hMTtjLnNpemUoKT4wOyl7aWYobj1jLnJlbW92ZU1pbigpLHIuaGFzKHMsbikpby5zZXRFZGdlKG4sc1tuXSk7ZWxzZXtpZihsKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIit0KTtsPSEwfXQubm9kZUVkZ2VzKG4pLmZvckVhY2godSl9cmV0dXJuIG99fSw1MDIzOih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wLG49W10saT17fSxhPVtdO2Z1bmN0aW9uIG8ocyl7dmFyIGM9aVtzXT17b25TdGFjazohMCxsb3dsaW5rOmUsaW5kZXg6ZSsrfTtpZihuLnB1c2gocyksdC5zdWNjZXNzb3JzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaGFzKGksdCk/aVt0XS5vblN0YWNrJiYoYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmluZGV4KSk6KG8odCksYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmxvd2xpbmspKX0pKSxjLmxvd2xpbms9PT1jLmluZGV4KXt2YXIgdSxsPVtdO2Rve3U9bi5wb3AoKSxpW3VdLm9uU3RhY2s9ITEsbC5wdXNoKHUpfXdoaWxlKHMhPT11KTthLnB1c2gobCl9fXJldHVybiB0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5oYXMoaSx0KXx8byh0KX0pKSxhfX0sMjE2NjoodCxlLG4pPT57dmFyIHI9big5MTI2KTtmdW5jdGlvbiBpKHQpe3ZhciBlPXt9LG49e30saT1bXTtpZihyLmVhY2godC5zaW5rcygpLChmdW5jdGlvbiBvKHMpe2lmKHIuaGFzKG4scykpdGhyb3cgbmV3IGE7ci5oYXMoZSxzKXx8KG5bc109ITAsZVtzXT0hMCxyLmVhY2godC5wcmVkZWNlc3NvcnMocyksbyksZGVsZXRlIG5bc10saS5wdXNoKHMpKX0pKSxyLnNpemUoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyBhO3JldHVybiBpfWZ1bmN0aW9uIGEoKXt9dC5leHBvcnRzPWksaS5DeWNsZUV4Y2VwdGlvbj1hLGEucHJvdG90eXBlPW5ldyBFcnJvcn0sOTY3NToodCxlLG4pPT57dmFyIHI9big5MTI2KTtmdW5jdGlvbiBpKCl7dGhpcy5fYXJyPVtdLHRoaXMuX2tleUluZGljZXM9e319dC5leHBvcnRzPWksaS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubGVuZ3RofSxpLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0saS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0aGlzLl9rZXlJbmRpY2VzLHQpfSxpLnByb3RvdHlwZS5wcmlvcml0eT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9rZXlJbmRpY2VzW3RdO2lmKHZvaWQgMCE9PWUpcmV0dXJuIHRoaXMuX2FycltlXS5wcmlvcml0eX0saS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXM7aWYodD1TdHJpbmcodCksIXIuaGFzKG4sdCkpe3ZhciBpPXRoaXMuX2FycixhPWkubGVuZ3RoO3JldHVybiBuW3RdPWEsaS5wdXNoKHtrZXk6dCxwcmlvcml0eTplfSksdGhpcy5fZGVjcmVhc2UoYSksITB9cmV0dXJuITF9LGkucHJvdG90eXBlLnJlbW92ZU1pbj1mdW5jdGlvbigpe3RoaXMuX3N3YXAoMCx0aGlzLl9hcnIubGVuZ3RoLTEpO3ZhciB0PXRoaXMuX2Fyci5wb3AoKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2tleUluZGljZXNbdC5rZXldLHRoaXMuX2hlYXBpZnkoMCksdC5rZXl9LGkucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlc1t0XTtpZihlPnRoaXMuX2FycltuXS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gS2V5OiAiK3QrIiBPbGQ6ICIrdGhpcy5fYXJyW25dLnByaW9yaXR5KyIgTmV3OiAiK2UpO3RoaXMuX2FycltuXS5wcmlvcml0eT1lLHRoaXMuX2RlY3JlYXNlKG4pfSxpLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hcnIsbj0yKnQscj1uKzEsaT10O248ZS5sZW5ndGgmJihpPWVbbl0ucHJpb3JpdHk8ZVtpXS5wcmlvcml0eT9uOmkscjxlLmxlbmd0aCYmKGk9ZVtyXS5wcmlvcml0eTxlW2ldLnByaW9yaXR5P3I6aSksaSE9PXQmJih0aGlzLl9zd2FwKHQsaSksdGhpcy5faGVhcGlmeShpKSkpfSxpLnByb3RvdHlwZS5fZGVjcmVhc2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dGhpcy5fYXJyLHI9blt0XS5wcmlvcml0eTswIT09dCYmIShuW2U9dD4+MV0ucHJpb3JpdHk8cik7KXRoaXMuX3N3YXAodCxlKSx0PWV9LGkucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYXJyLHI9dGhpcy5fa2V5SW5kaWNlcyxpPW5bdF0sYT1uW2VdO25bdF09YSxuW2VdPWksclthLmtleV09dCxyW2kua2V5XT1lfX0sNzcxOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big5MTI2KTt0LmV4cG9ydHM9YTt2YXIgaT0iXDAiO2Z1bmN0aW9uIGEodCl7dGhpcy5faXNEaXJlY3RlZD0hci5oYXModCwiZGlyZWN0ZWQiKXx8dC5kaXJlY3RlZCx0aGlzLl9pc011bHRpZ3JhcGg9ISFyLmhhcyh0LCJtdWx0aWdyYXBoIikmJnQubXVsdGlncmFwaCx0aGlzLl9pc0NvbXBvdW5kPSEhci5oYXModCwiY29tcG91bmQiKSYmdC5jb21wb3VuZCx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPXIuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ci5jb25zdGFudCh2b2lkIDApLHRoaXMuX25vZGVzPXt9LHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnQ9e30sdGhpcy5fY2hpbGRyZW49e30sdGhpcy5fY2hpbGRyZW5bIlwwIl09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319ZnVuY3Rpb24gbyh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBzKHQsZSl7LS10W2VdfHxkZWxldGUgdFtlXX1mdW5jdGlvbiBjKHQsZSxuLGkpe3ZhciBhPSIiK2Usbz0iIituO2lmKCF0JiZhPm8pe3ZhciBzPWE7YT1vLG89c31yZXR1cm4gYSsiASIrbysiASIrKHIuaXNVbmRlZmluZWQoaSk/IlwwIjppKX1mdW5jdGlvbiB1KHQsZSxuLHIpe3ZhciBpPSIiK2UsYT0iIituO2lmKCF0JiZpPmEpe3ZhciBvPWk7aT1hLGE9b312YXIgcz17djppLHc6YX07cmV0dXJuIHImJihzLm5hbWU9ciksc31mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGModCxlLnYsZS53LGUubmFtZSl9YS5wcm90b3R5cGUuX25vZGVDb3VudD0wLGEucHJvdG90eXBlLl9lZGdlQ291bnQ9MCxhLnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9LGEucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9LGEucHJvdG90eXBlLmlzQ29tcG91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNDb21wb3VuZH0sYS5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhYmVsPXQsdGhpc30sYS5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9LGEucHJvdG90eXBlLnNldERlZmF1bHROb2RlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPXQsdGhpc30sYS5wcm90b3R5cGUubm9kZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH0sYS5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5rZXlzKHRoaXMuX25vZGVzKX0sYS5wcm90b3R5cGUuc291cmNlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHIuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuaXNFbXB0eSh0Ll9pbltlXSl9KSl9LGEucHJvdG90eXBlLnNpbmtzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gci5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gci5pc0VtcHR5KHQuX291dFtlXSl9KSl9LGEucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLGk9dGhpcztyZXR1cm4gci5lYWNoKHQsKGZ1bmN0aW9uKHQpe24ubGVuZ3RoPjE/aS5zZXROb2RlKHQsZSk6aS5zZXROb2RlKHQpfSkpLHRoaXN9LGEucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5oYXModGhpcy5fbm9kZXMsdCk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW3RdPWUpLHRoaXMpOih0aGlzLl9ub2Rlc1t0XT1hcmd1bWVudHMubGVuZ3RoPjE/ZTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4odCksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFt0XT1pLHRoaXMuX2NoaWxkcmVuW3RdPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdW3RdPSEwKSx0aGlzLl9pblt0XT17fSx0aGlzLl9wcmVkc1t0XT17fSx0aGlzLl9vdXRbdF09e30sdGhpcy5fc3Vjc1t0XT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX0sYS5wcm90b3R5cGUubm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbm9kZXNbdF19LGEucHJvdG90eXBlLmhhc05vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFzKHRoaXMuX25vZGVzLHQpfSxhLnByb3RvdHlwZS5yZW1vdmVOb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoci5oYXModGhpcy5fbm9kZXMsdCkpe3ZhciBuPWZ1bmN0aW9uKHQpe2UucmVtb3ZlRWRnZShlLl9lZGdlT2Jqc1t0XSl9O2RlbGV0ZSB0aGlzLl9ub2Rlc1t0XSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QodCksZGVsZXRlIHRoaXMuX3BhcmVudFt0XSxyLmVhY2godGhpcy5jaGlsZHJlbih0KSwoZnVuY3Rpb24odCl7ZS5zZXRQYXJlbnQodCl9KSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RdKSxyLmVhY2goci5rZXlzKHRoaXMuX2luW3RdKSxuKSxkZWxldGUgdGhpcy5faW5bdF0sZGVsZXRlIHRoaXMuX3ByZWRzW3RdLHIuZWFjaChyLmtleXModGhpcy5fb3V0W3RdKSxuKSxkZWxldGUgdGhpcy5fb3V0W3RdLGRlbGV0ZSB0aGlzLl9zdWNzW3RdLC0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoci5pc1VuZGVmaW5lZChlKSllPWk7ZWxzZXtmb3IodmFyIG49ZSs9IiI7IXIuaXNVbmRlZmluZWQobik7bj10aGlzLnBhcmVudChuKSlpZihuPT09dCl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIitlKyIgYXMgcGFyZW50IG9mICIrdCsiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKGUpfXJldHVybiB0aGlzLnNldE5vZGUodCksdGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QodCksdGhpcy5fcGFyZW50W3RdPWUsdGhpcy5fY2hpbGRyZW5bZV1bdF09ITAsdGhpc30sYS5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdF1dW3RdfSxhLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIGU9dGhpcy5fcGFyZW50W3RdO2lmKGUhPT1pKXJldHVybiBlfX0sYS5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYoci5pc1VuZGVmaW5lZCh0KSYmKHQ9aSksdGhpcy5faXNDb21wb3VuZCl7dmFyIGU9dGhpcy5fY2hpbGRyZW5bdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfWVsc2V7aWYodD09PWkpcmV0dXJuIHRoaXMubm9kZXMoKTtpZih0aGlzLmhhc05vZGUodCkpcmV0dXJuW119fSxhLnByb3RvdHlwZS5wcmVkZWNlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJlZHNbdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfSxhLnByb3RvdHlwZS5zdWNjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1Y3NbdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfSxhLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wcmVkZWNlc3NvcnModCk7aWYoZSlyZXR1cm4gci51bmlvbihlLHRoaXMuc3VjY2Vzc29ycyh0KSl9LGEucHJvdG90eXBlLmlzTGVhZj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PSh0aGlzLmlzRGlyZWN0ZWQoKT90aGlzLnN1Y2Nlc3NvcnModCk6dGhpcy5uZWlnaGJvcnModCkpLmxlbmd0aH0sYS5wcm90b3R5cGUuZmlsdGVyTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO2Uuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO3IuZWFjaCh0aGlzLl9ub2RlcywoZnVuY3Rpb24obixyKXt0KHIpJiZlLnNldE5vZGUocixuKX0pKSxyLmVhY2godGhpcy5fZWRnZU9ianMsKGZ1bmN0aW9uKHQpe2UuaGFzTm9kZSh0LnYpJiZlLmhhc05vZGUodC53KSYmZS5zZXRFZGdlKHQsbi5lZGdlKHQpKX0pKTt2YXIgaT17fTtmdW5jdGlvbiBhKHQpe3ZhciByPW4ucGFyZW50KHQpO3JldHVybiB2b2lkIDA9PT1yfHxlLmhhc05vZGUocik/KGlbdF09cixyKTpyIGluIGk/aVtyXTphKHIpfXJldHVybiB0aGlzLl9pc0NvbXBvdW5kJiZyLmVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0LGEodCkpfSkpLGV9LGEucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30sYS5wcm90b3R5cGUuZWRnZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH0sYS5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxhLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWFyZ3VtZW50cztyZXR1cm4gci5yZWR1Y2UodCwoZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5sZW5ndGg+MT9uLnNldEVkZ2UodCxyLGUpOm4uc2V0RWRnZSh0LHIpLHJ9KSksdGhpc30sYS5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLGE9ITEscz1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiBzJiZudWxsIT09cyYmInYiaW4gcz8odD1zLnYsZT1zLncsbj1zLm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxhPSEwKSk6KHQ9cyxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxhPSEwKSksdD0iIit0LGU9IiIrZSxyLmlzVW5kZWZpbmVkKG4pfHwobj0iIituKTt2YXIgbD1jKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO2lmKHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbCkpcmV0dXJuIGEmJih0aGlzLl9lZGdlTGFiZWxzW2xdPWkpLHRoaXM7aWYoIXIuaXNVbmRlZmluZWQobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHQpLHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9lZGdlTGFiZWxzW2xdPWE/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odCxlLG4pO3ZhciBoPXUodGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHQ9aC52LGU9aC53LE9iamVjdC5mcmVlemUoaCksdGhpcy5fZWRnZU9ianNbbF09aCxvKHRoaXMuX3ByZWRzW2VdLHQpLG8odGhpcy5fc3Vjc1t0XSxlKSx0aGlzLl9pbltlXVtsXT1oLHRoaXMuX291dFt0XVtsXT1oLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9LGEucHJvdG90eXBlLmVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP2wodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbcl19LGEucHJvdG90eXBlLmhhc0VkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP2wodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsaSl9LGEucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP2wodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbiksaT10aGlzLl9lZGdlT2Jqc1tyXTtyZXR1cm4gaSYmKHQ9aS52LGU9aS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3JdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1tyXSxzKHRoaXMuX3ByZWRzW2VdLHQpLHModGhpcy5fc3Vjc1t0XSxlKSxkZWxldGUgdGhpcy5faW5bZV1bcl0sZGVsZXRlIHRoaXMuX291dFt0XVtyXSx0aGlzLl9lZGdlQ291bnQtLSksdGhpc30sYS5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2luW3RdO2lmKG4pe3ZhciBpPXIudmFsdWVzKG4pO3JldHVybiBlP3IuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnY9PT1lfSkpOml9fSxhLnByb3RvdHlwZS5vdXRFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX291dFt0XTtpZihuKXt2YXIgaT1yLnZhbHVlcyhuKTtyZXR1cm4gZT9yLmZpbHRlcihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC53PT09ZX0pKTppfX0sYS5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5pbkVkZ2VzKHQsZSk7aWYobilyZXR1cm4gbi5jb25jYXQodGhpcy5vdXRFZGdlcyh0LGUpKX19LDIzNTQ6KHQsZSxuKT0+e3QuZXhwb3J0cz17R3JhcGg6big3NzEpLHZlcnNpb246big5NjMxKX19LDg5NzQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNiksaT1uKDc3MSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSksaT10LnBhcmVudChlKSxhPXt2OmV9O3JldHVybiByLmlzVW5kZWZpbmVkKG4pfHwoYS52YWx1ZT1uKSxyLmlzVW5kZWZpbmVkKGkpfHwoYS5wYXJlbnQ9aSksYX0pKX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1hcCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKSxpPXt2OmUudix3OmUud307cmV0dXJuIHIuaXNVbmRlZmluZWQoZS5uYW1lKXx8KGkubmFtZT1lLm5hbWUpLHIuaXNVbmRlZmluZWQobil8fChpLnZhbHVlPW4pLGl9KSl9dC5leHBvcnRzPXt3cml0ZTpmdW5jdGlvbih0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczphKHQpLGVkZ2VzOm8odCl9O3JldHVybiByLmlzVW5kZWZpbmVkKHQuZ3JhcGgoKSl8fChlLnZhbHVlPXIuY2xvbmUodC5ncmFwaCgpKSksZX0scmVhZDpmdW5jdGlvbih0KXt2YXIgZT1uZXcgaSh0Lm9wdGlvbnMpLnNldEdyYXBoKHQudmFsdWUpO3JldHVybiByLmVhY2godC5ub2RlcywoZnVuY3Rpb24odCl7ZS5zZXROb2RlKHQudix0LnZhbHVlKSx0LnBhcmVudCYmZS5zZXRQYXJlbnQodC52LHQucGFyZW50KX0pKSxyLmVhY2godC5lZGdlcywoZnVuY3Rpb24odCl7ZS5zZXRFZGdlKHt2OnQudix3OnQudyxuYW1lOnQubmFtZX0sdC52YWx1ZSl9KSksZX19fSw5MTI2Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17Y2xvbmU6big2Njc4KSxjb25zdGFudDpuKDU3MDMpLGVhY2g6big2MDczKSxmaWx0ZXI6bigzMTA1KSxoYXM6big4NzIxKSxpc0FycmF5Om4oMTQ2OSksaXNFbXB0eTpuKDE2MDkpLGlzRnVuY3Rpb246bigzNTYwKSxpc1VuZGVmaW5lZDpuKDIzNTMpLGtleXM6bigzNjc0KSxtYXA6big1MTYxKSxyZWR1Y2U6big0MDYxKSxzaXplOm4oNDIzOCksdHJhbnNmb3JtOm4oODcxOCksdW5pb246bigzMzg2KSx2YWx1ZXM6bigyNjI4KX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sOTYzMTp0PT57dC5leHBvcnRzPSIyLjEuOCJ9LDE3NzM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oNzYyOCksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmNvbG9yPWUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT10LHRoaXMudHlwZT1uZXcgaS5kZWZhdWx0fXJldHVybiB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xvcj1lLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9dCx0aGlzLnR5cGUudHlwZT0wLHRoaXN9LHQucHJvdG90eXBlLl9lbnN1cmVIU0w9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10Lmgsbj10LnMsaT10Lmw7dm9pZCAwPT09ZSYmKHQuaD1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImgiKSksdm9pZCAwPT09biYmKHQucz1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsInMiKSksdm9pZCAwPT09aSYmKHQubD1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImwiKSl9LHQucHJvdG90eXBlLl9lbnN1cmVSR0I9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10LnIsbj10LmcsaT10LmI7dm9pZCAwPT09ZSYmKHQucj1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsInIiKSksdm9pZCAwPT09biYmKHQuZz1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsImciKSksdm9pZCAwPT09aSYmKHQuYj1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsImIiKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiciIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQucjtyZXR1cm4gdGhpcy50eXBlLmlzKDIpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsInIiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMSksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJnIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5nO3JldHVybiB0aGlzLnR5cGUuaXMoMil8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiZyIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgxKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmc9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImIiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10LmI7cmV0dXJuIHRoaXMudHlwZS5pcygyKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0LCJiIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDEpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuYj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQuaDtyZXR1cm4gdGhpcy50eXBlLmlzKDEpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImgiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5zO3JldHVybiB0aGlzLnR5cGUuaXMoMSl8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwicyIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgyKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLnM9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10Lmw7cmV0dXJuIHRoaXMudHlwZS5pcygxKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0LCJsIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDIpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEubD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuYX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuYT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZS5kZWZhdWx0PWF9LDgxNjc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bmV3KG4oMTc3MykuZGVmYXVsdCkoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50Iik7ZS5kZWZhdWx0PXJ9LDc2Mjg6KHQsZSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMudHlwZT0wfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlJiZ0aGlzLnR5cGUhPT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNoYW5nZSBib3RoIFJHQiBhbmQgSFNMIGNoYW5uZWxzIGF0IHRoZSBzYW1lIHRpbWUiKTt0aGlzLnR5cGU9dH0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnR5cGU9MH0sdC5wcm90b3R5cGUuaXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHlwZT09PXR9LHR9KCk7ZS5kZWZhdWx0PW59LDE2NTU6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big4MTY3KSxpPW4oNjA2MSksYT17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTpmdW5jdGlvbih0KXtpZigzNT09PXQuY2hhckNvZGVBdCgwKSl7dmFyIGU9dC5tYXRjaChhLnJlKTtpZihlKXt2YXIgbj1lWzFdLGk9cGFyc2VJbnQobiwxNiksbz1uLmxlbmd0aCxzPW8lND09MCxjPW8+NCx1PWM/MToxNyxsPWM/ODo0LGg9cz8wOi0xLGY9Yz8yNTU6MTU7cmV0dXJuIHIuZGVmYXVsdC5zZXQoe3I6KGk+PmwqKGgrMykmZikqdSxnOihpPj5sKihoKzIpJmYpKnUsYjooaT4+bCooaCsxKSZmKSp1LGE6cz8oaSZmKSp1LzI1NToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5yLG49dC5nLHI9dC5iLGE9dC5hO3JldHVybiBhPDE/IiMiK2kuREVDMkhFWFtNYXRoLnJvdW5kKGUpXStpLkRFQzJIRVhbTWF0aC5yb3VuZChuKV0raS5ERUMySEVYW01hdGgucm91bmQocildK2kuREVDMkhFWFtNYXRoLnJvdW5kKDI1NSphKV06IiMiK2kuREVDMkhFWFtNYXRoLnJvdW5kKGUpXStpLkRFQzJIRVhbTWF0aC5yb3VuZChuKV0raS5ERUMySEVYW01hdGgucm91bmQocildfX07ZS5kZWZhdWx0PWF9LDg1ODk6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oODE2NyksYT17cmU6L15oc2xhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KD86ZGVnfGdyYWR8cmFkfHR1cm4pPylccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KCUpPykpP1xzKj9cKSQvaSxodWVSZTovXiguKz8pKGRlZ3xncmFkfHJhZHx0dXJuKSQvaSxfaHVlMmRlZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGEuaHVlUmUpO2lmKGUpe3ZhciBuPWVbMV07c3dpdGNoKGVbMl0pe2Nhc2UiZ3JhZCI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoLjkqcGFyc2VGbG9hdChuKSk7Y2FzZSJyYWQiOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKDE4MCpwYXJzZUZsb2F0KG4pL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoMzYwKnBhcnNlRmxvYXQobikpfX1yZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHQpKX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQ29kZUF0KDApO2lmKDEwND09PWV8fDcyPT09ZSl7dmFyIG49dC5tYXRjaChhLnJlKTtpZihuKXt2YXIgbz1uWzFdLHM9blsyXSxjPW5bM10sdT1uWzRdLGw9bls1XTtyZXR1cm4gaS5kZWZhdWx0LnNldCh7aDphLl9odWUyZGVnKG8pLHM6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHMpKSxsOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmwocGFyc2VGbG9hdChjKSksYTp1P3IuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEobD9wYXJzZUZsb2F0KHUpLzEwMDpwYXJzZUZsb2F0KHUpKToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5oLG49dC5zLGk9dC5sLGE9dC5hO3JldHVybiBhPDE/ImhzbGEoIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIlLCAiK2ErIikiOiJoc2woIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIlKSJ9fTtlLmRlZmF1bHQ9YX0sMjE5MToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2NTUpLGk9big3NTM4KSxhPW4oNjc2Miksbz1uKDg1ODkpLHM9e2Zvcm1hdDp7a2V5d29yZDppLmRlZmF1bHQsaGV4OnIuZGVmYXVsdCxyZ2I6YS5kZWZhdWx0LHJnYmE6YS5kZWZhdWx0LGhzbDpvLmRlZmF1bHQsaHNsYTpvLmRlZmF1bHR9LHBhcnNlOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT1yLmRlZmF1bHQucGFyc2UodCl8fGEuZGVmYXVsdC5wYXJzZSh0KXx8by5kZWZhdWx0LnBhcnNlKHQpfHxpLmRlZmF1bHQucGFyc2UodCk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIicrdCsnIicpfSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7cmV0dXJuIXQuY2hhbmdlZCYmdC5jb2xvcj90LmNvbG9yOnQudHlwZS5pcygyKXx8dm9pZCAwPT09dC5kYXRhLnI/by5kZWZhdWx0LnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9hLmRlZmF1bHQuc3RyaW5naWZ5KHQpOnIuZGVmYXVsdC5zdHJpbmdpZnkodCl9fTtlLmRlZmF1bHQ9c30sNzUzODoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2NTUpLGk9e2NvbG9yczp7YWxpY2VibHVlOiIjZjBmOGZmIixhbnRpcXVld2hpdGU6IiNmYWViZDciLGFxdWE6IiMwMGZmZmYiLGFxdWFtYXJpbmU6IiM3ZmZmZDQiLGF6dXJlOiIjZjBmZmZmIixiZWlnZToiI2Y1ZjVkYyIsYmlzcXVlOiIjZmZlNGM0IixibGFjazoiIzAwMDAwMCIsYmxhbmNoZWRhbG1vbmQ6IiNmZmViY2QiLGJsdWU6IiMwMDAwZmYiLGJsdWV2aW9sZXQ6IiM4YTJiZTIiLGJyb3duOiIjYTUyYTJhIixidXJseXdvb2Q6IiNkZWI4ODciLGNhZGV0Ymx1ZToiIzVmOWVhMCIsY2hhcnRyZXVzZToiIzdmZmYwMCIsY2hvY29sYXRlOiIjZDI2OTFlIixjb3JhbDoiI2ZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IiM2NDk1ZWQiLGNvcm5zaWxrOiIjZmZmOGRjIixjcmltc29uOiIjZGMxNDNjIixjeWFuYXF1YToiIzAwZmZmZiIsZGFya2JsdWU6IiMwMDAwOGIiLGRhcmtjeWFuOiIjMDA4YjhiIixkYXJrZ29sZGVucm9kOiIjYjg4NjBiIixkYXJrZ3JheToiI2E5YTlhOSIsZGFya2dyZWVuOiIjMDA2NDAwIixkYXJrZ3JleToiI2E5YTlhOSIsZGFya2toYWtpOiIjYmRiNzZiIixkYXJrbWFnZW50YToiIzhiMDA4YiIsZGFya29saXZlZ3JlZW46IiM1NTZiMmYiLGRhcmtvcmFuZ2U6IiNmZjhjMDAiLGRhcmtvcmNoaWQ6IiM5OTMyY2MiLGRhcmtyZWQ6IiM4YjAwMDAiLGRhcmtzYWxtb246IiNlOTk2N2EiLGRhcmtzZWFncmVlbjoiIzhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiIzQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiIzJmNGY0ZiIsZGFya3NsYXRlZ3JleToiIzJmNGY0ZiIsZGFya3R1cnF1b2lzZToiIzAwY2VkMSIsZGFya3Zpb2xldDoiIzk0MDBkMyIsZGVlcHBpbms6IiNmZjE0OTMiLGRlZXBza3libHVlOiIjMDBiZmZmIixkaW1ncmF5OiIjNjk2OTY5IixkaW1ncmV5OiIjNjk2OTY5Iixkb2RnZXJibHVlOiIjMWU5MGZmIixmaXJlYnJpY2s6IiNiMjIyMjIiLGZsb3JhbHdoaXRlOiIjZmZmYWYwIixmb3Jlc3RncmVlbjoiIzIyOGIyMiIsZnVjaHNpYToiI2ZmMDBmZiIsZ2FpbnNib3JvOiIjZGNkY2RjIixnaG9zdHdoaXRlOiIjZjhmOGZmIixnb2xkOiIjZmZkNzAwIixnb2xkZW5yb2Q6IiNkYWE1MjAiLGdyYXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixncmVlbnllbGxvdzoiI2FkZmYyZiIsZ3JleToiIzgwODA4MCIsaG9uZXlkZXc6IiNmMGZmZjAiLGhvdHBpbms6IiNmZjY5YjQiLGluZGlhbnJlZDoiI2NkNWM1YyIsaW5kaWdvOiIjNGIwMDgyIixpdm9yeToiI2ZmZmZmMCIsa2hha2k6IiNmMGU2OGMiLGxhdmVuZGVyOiIjZTZlNmZhIixsYXZlbmRlcmJsdXNoOiIjZmZmMGY1IixsYXduZ3JlZW46IiM3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiI2ZmZmFjZCIsbGlnaHRibHVlOiIjYWRkOGU2IixsaWdodGNvcmFsOiIjZjA4MDgwIixsaWdodGN5YW46IiNlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjZmFmYWQyIixsaWdodGdyYXk6IiNkM2QzZDMiLGxpZ2h0Z3JlZW46IiM5MGVlOTAiLGxpZ2h0Z3JleToiI2QzZDNkMyIsbGlnaHRwaW5rOiIjZmZiNmMxIixsaWdodHNhbG1vbjoiI2ZmYTA3YSIsbGlnaHRzZWFncmVlbjoiIzIwYjJhYSIsbGlnaHRza3libHVlOiIjODdjZWZhIixsaWdodHNsYXRlZ3JheToiIzc3ODg5OSIsbGlnaHRzbGF0ZWdyZXk6IiM3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiIjYjBjNGRlIixsaWdodHllbGxvdzoiI2ZmZmZlMCIsbGltZToiIzAwZmYwMCIsbGltZWdyZWVuOiIjMzJjZDMyIixsaW5lbjoiI2ZhZjBlNiIsbWFnZW50YToiI2ZmMDBmZiIsbWFyb29uOiIjODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiIjNjZjZGFhIixtZWRpdW1ibHVlOiIjMDAwMGNkIixtZWRpdW1vcmNoaWQ6IiNiYTU1ZDMiLG1lZGl1bXB1cnBsZToiIzkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IiMzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiIzdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IiMwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiIzQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiIjYzcxNTg1IixtaWRuaWdodGJsdWU6IiMxOTE5NzAiLG1pbnRjcmVhbToiI2Y1ZmZmYSIsbWlzdHlyb3NlOiIjZmZlNGUxIixtb2NjYXNpbjoiI2ZmZTRiNSIsbmF2YWpvd2hpdGU6IiNmZmRlYWQiLG5hdnk6IiMwMDAwODAiLG9sZGxhY2U6IiNmZGY1ZTYiLG9saXZlOiIjODA4MDAwIixvbGl2ZWRyYWI6IiM2YjhlMjMiLG9yYW5nZToiI2ZmYTUwMCIsb3JhbmdlcmVkOiIjZmY0NTAwIixvcmNoaWQ6IiNkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6IiNlZWU4YWEiLHBhbGVncmVlbjoiIzk4ZmI5OCIscGFsZXR1cnF1b2lzZToiI2FmZWVlZSIscGFsZXZpb2xldHJlZDoiI2RiNzA5MyIscGFwYXlhd2hpcDoiI2ZmZWZkNSIscGVhY2hwdWZmOiIjZmZkYWI5IixwZXJ1OiIjY2Q4NTNmIixwaW5rOiIjZmZjMGNiIixwbHVtOiIjZGRhMGRkIixwb3dkZXJibHVlOiIjYjBlMGU2IixwdXJwbGU6IiM4MDAwODAiLHJlYmVjY2FwdXJwbGU6IiM2NjMzOTkiLHJlZDoiI2ZmMDAwMCIscm9zeWJyb3duOiIjYmM4ZjhmIixyb3lhbGJsdWU6IiM0MTY5ZTEiLHNhZGRsZWJyb3duOiIjOGI0NTEzIixzYWxtb246IiNmYTgwNzIiLHNhbmR5YnJvd246IiNmNGE0NjAiLHNlYWdyZWVuOiIjMmU4YjU3IixzZWFzaGVsbDoiI2ZmZjVlZSIsc2llbm5hOiIjYTA1MjJkIixzaWx2ZXI6IiNjMGMwYzAiLHNreWJsdWU6IiM4N2NlZWIiLHNsYXRlYmx1ZToiIzZhNWFjZCIsc2xhdGVncmF5OiIjNzA4MDkwIixzbGF0ZWdyZXk6IiM3MDgwOTAiLHNub3c6IiNmZmZhZmEiLHNwcmluZ2dyZWVuOiIjMDBmZjdmIix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRyYW5zcGFyZW50OiIjMDAwMDAwMDAiLHR1cnF1b2lzZToiIzQwZTBkMCIsdmlvbGV0OiIjZWU4MmVlIix3aGVhdDoiI2Y1ZGViMyIsd2hpdGU6IiNmZmZmZmYiLHdoaXRlc21va2U6IiNmNWY1ZjUiLHllbGxvdzoiI2ZmZmYwMCIseWVsbG93Z3JlZW46IiM5YWNkMzIifSxwYXJzZTpmdW5jdGlvbih0KXt0PXQudG9Mb3dlckNhc2UoKTt2YXIgZT1pLmNvbG9yc1t0XTtpZihlKXJldHVybiByLmRlZmF1bHQucGFyc2UoZSl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHQuc3RyaW5naWZ5KHQpO2Zvcih2YXIgbiBpbiBpLmNvbG9ycylpZihpLmNvbG9yc1tuXT09PWUpcmV0dXJuIG59fTtlLmRlZmF1bHQ9aX0sNjc2MjoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9big4MTY3KSxhPXtyZTovXnJnYmE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkpP1xzKj9cKSQvaSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb2RlQXQoMCk7aWYoMTE0PT09ZXx8ODI9PT1lKXt2YXIgbj10Lm1hdGNoKGEucmUpO2lmKG4pe3ZhciBvPW5bMV0scz1uWzJdLGM9blszXSx1PW5bNF0sbD1uWzVdLGg9bls2XSxmPW5bN10sZD1uWzhdO3JldHVybiBpLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIocz8yLjU1KnBhcnNlRmxvYXQobyk6cGFyc2VGbG9hdChvKSksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKHU/Mi41NSpwYXJzZUZsb2F0KGMpOnBhcnNlRmxvYXQoYykpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihoPzIuNTUqcGFyc2VGbG9hdChsKTpwYXJzZUZsb2F0KGwpKSxhOmY/ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShkP3BhcnNlRmxvYXQoZikvMTAwOnBhcnNlRmxvYXQoZikpOjF9LHQpfX19LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT10LnIsbj10LmcsaT10LmIsYT10LmE7cmV0dXJuIGE8MT8icmdiYSgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGUpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQobikrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZChpKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGEpKyIpIjoicmdiKCIrci5kZWZhdWx0Lmxhbmcucm91bmQoZSkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZChuKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIpIn19O2UuZGVmYXVsdD1hfSw2MDYxOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTA4MyksaT17fTtlLkRFQzJIRVg9aTtmb3IodmFyIGE9MDthPD0yNTU7YSsrKWlbYV09ci5kZWZhdWx0LnVuaXQuZGVjMmhleChhKX0sODYxMzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0obigxMjAzKSl9LDUzNzE6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyMTkxKSxpPW4oNDE4KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmRlZmF1bHQucGFyc2UodCksYT17fTtmb3IodmFyIG8gaW4gZSllW29dJiYoYVtvXT1uW29dK2Vbb10pO3JldHVybiBpLmRlZmF1bHQodCxhKX19LDE0MTY6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1pLmRlZmF1bHQucGFyc2UodCksbz1hW2VdLHM9ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXBbZV0obytuKTtyZXR1cm4gbyE9PXMmJihhW2VdPXMpLGkuZGVmYXVsdC5zdHJpbmdpZnkoYSl9fSw5MzUzOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjE5Nyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiYSIpfX0sMzM5NDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImIiKX19LDQxODoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9bigyMTkxKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLmRlZmF1bHQucGFyc2UodCk7Zm9yKHZhciBhIGluIGUpblthXT1yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcFthXShlW2FdKTtyZXR1cm4gaS5kZWZhdWx0LnN0cmluZ2lmeShuKX19LDYxOTc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKGkuZGVmYXVsdC5wYXJzZSh0KVtlXSl9fSw3MzYxOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTQxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiaCIsMTgwKX19LDMwNDI6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oODM0Nik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG49aS5kZWZhdWx0KHQpLGE9aS5kZWZhdWx0KGUpLG89TWF0aC5tYXgobixhKSxzPU1hdGgubWluKG4sYSksYz0obytOdW1iZXIuRVBTSUxPTikvKHMrTnVtYmVyLkVQU0lMT04pO3JldHVybiByLmRlZmF1bHQubGFuZy5yb3VuZChyLmRlZmF1bHQubGFuZy5jbGFtcChjLDEsMTApKX19LDEzNjQ6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImwiLC1lKX19LDk2MTA6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsInMiLC1lKX19LDU3MjoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDQxOCk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCx7czowfSl9fSwyMjk5Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjE5Nyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiZyIpfX0sMzExNjoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9big4MTY3KSxhPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PW8mJihvPTEpO3ZhciBzPWkuZGVmYXVsdC5zZXQoe2g6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCh0KSxzOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnMoZSksbDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5sKG4pLGE6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShvKX0pO3JldHVybiBhLmRlZmF1bHQuc3RyaW5naWZ5KHMpfX0sMzAwODoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImgiKX19LDEyMDM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTM4KTtlLmhleD1yLmRlZmF1bHQ7dmFyIGk9big2NTM4KTtlLnJnYj1pLmRlZmF1bHQ7dmFyIGE9big2NTM4KTtlLnJnYmE9YS5kZWZhdWx0O3ZhciBvPW4oMzExNik7ZS5oc2w9by5kZWZhdWx0O3ZhciBzPW4oMzExNik7ZS5oc2xhPXMuZGVmYXVsdDt2YXIgYz1uKDI2MTkpO2UudG9LZXl3b3JkPWMuZGVmYXVsdDt2YXIgdT1uKDQzMDcpO2UudG9IZXg9dS5kZWZhdWx0O3ZhciBsPW4oNDEyNSk7ZS50b1JnYmE9bC5kZWZhdWx0O3ZhciBoPW4oNzMyOSk7ZS50b0hzbGE9aC5kZWZhdWx0O3ZhciBmPW4oNjE5Nyk7ZS5jaGFubmVsPWYuZGVmYXVsdDt2YXIgZD1uKDk2NDApO2UucmVkPWQuZGVmYXVsdDt2YXIgcD1uKDIyOTkpO2UuZ3JlZW49cC5kZWZhdWx0O3ZhciB5PW4oMzM5NCk7ZS5ibHVlPXkuZGVmYXVsdDt2YXIgZz1uKDMwMDgpO2UuaHVlPWcuZGVmYXVsdDt2YXIgbT1uKDY0NTEpO2Uuc2F0dXJhdGlvbj1tLmRlZmF1bHQ7dmFyIHY9big5MjM1KTtlLmxpZ2h0bmVzcz12LmRlZmF1bHQ7dmFyIGI9big5MzUzKTtlLmFscGhhPWIuZGVmYXVsdDt2YXIgXz1uKDkzNTMpO2Uub3BhY2l0eT1fLmRlZmF1bHQ7dmFyIHg9bigzMDQyKTtlLmNvbnRyYXN0PXguZGVmYXVsdDt2YXIgdz1uKDgzNDYpO2UubHVtaW5hbmNlPXcuZGVmYXVsdDt2YXIgaz1uKDQxMTcpO2UuaXNEYXJrPWsuZGVmYXVsdDt2YXIgVD1uKDIyMjQpO2UuaXNMaWdodD1ULmRlZmF1bHQ7dmFyIEU9big1ODUpO2UuaXNWYWxpZD1FLmRlZmF1bHQ7dmFyIEM9bigxMDgwKTtlLnNhdHVyYXRlPUMuZGVmYXVsdDt2YXIgUz1uKDk2MTApO2UuZGVzYXR1cmF0ZT1TLmRlZmF1bHQ7dmFyIEE9bigzMjM1KTtlLmxpZ2h0ZW49QS5kZWZhdWx0O3ZhciBNPW4oMTM2NCk7ZS5kYXJrZW49TS5kZWZhdWx0O3ZhciBOPW4oNzE4OSk7ZS5vcGFjaWZ5PU4uZGVmYXVsdDt2YXIgRD1uKDcxODkpO2UuZmFkZUluPUQuZGVmYXVsdDt2YXIgTz1uKDQ5ODkpO2UudHJhbnNwYXJlbnRpemU9Ty5kZWZhdWx0O3ZhciBCPW4oNDk4OSk7ZS5mYWRlT3V0PUIuZGVmYXVsdDt2YXIgTD1uKDczNjEpO2UuY29tcGxlbWVudD1MLmRlZmF1bHQ7dmFyIEk9big1NzIpO2UuZ3JheXNjYWxlPUkuZGVmYXVsdDt2YXIgUj1uKDUzNzEpO2UuYWRqdXN0PVIuZGVmYXVsdDt2YXIgRj1uKDQxOCk7ZS5jaGFuZ2U9Ri5kZWZhdWx0O3ZhciBQPW4oNTY2KTtlLmludmVydD1QLmRlZmF1bHQ7dmFyIGo9bigxODYxKTtlLm1peD1qLmRlZmF1bHQ7dmFyIFk9big3MDgxKTtlLnNjYWxlPVkuZGVmYXVsdH0sNTY2Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjE5MSksaT1uKDE4NjEpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTEwMCk7dmFyIG49ci5kZWZhdWx0LnBhcnNlKHQpO3JldHVybiBuLnI9MjU1LW4ucixuLmc9MjU1LW4uZyxuLmI9MjU1LW4uYixpLmRlZmF1bHQobix0LGUpfX0sNDExNzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIyMjQpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4hci5kZWZhdWx0KHQpfX0sMjIyNDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDgzNDYpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQpPj0uNX19LDU4NToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHIuZGVmYXVsdC5wYXJzZSh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSwzMjM1Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTQxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIixlKX19LDkyMzU6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2MTk3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIil9fSw4MzQ2Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTA4MyksaT1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXt2YXIgZT1pLmRlZmF1bHQucGFyc2UodCksbj1lLnIsYT1lLmcsbz1lLmIscz0uMjEyNipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihuKSsuNzE1MipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihhKSsuMDcyMipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihvKTtyZXR1cm4gci5kZWZhdWx0Lmxhbmcucm91bmQocyl9fSwxODYxOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjE5MSksaT1uKDY1MzgpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49NTApO3ZhciBhPXIuZGVmYXVsdC5wYXJzZSh0KSxvPWEucixzPWEuZyxjPWEuYix1PWEuYSxsPXIuZGVmYXVsdC5wYXJzZShlKSxoPWwucixmPWwuZyxkPWwuYixwPWwuYSx5PW4vMTAwLGc9Mip5LTEsbT11LXAsdj0oKGcqbT09LTE/ZzooZyttKS8oMStnKm0pKSsxKS8yLGI9MS12LF89byp2K2gqYix4PXMqditmKmIsdz1jKnYrZCpiLGs9dSp5K3AqKDEteSk7cmV0dXJuIGkuZGVmYXVsdChfLHgsdyxrKX19LDcxODk6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImEiLGUpfX0sOTY0MDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInIiKX19LDY1Mzg6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oODE2NyksYT1uKDIxOTEpLG89big0MTgpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbixzKXtpZih2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1zJiYocz0xKSwibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIG8uZGVmYXVsdCh0LHthOmV9KTt2YXIgYz1pLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIodCksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKGUpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihuKSxhOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEocyl9KTtyZXR1cm4gYS5kZWZhdWx0LnN0cmluZ2lmeShjKX19LDEwODA6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsInMiLGUpfX0sNjQ1MToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInMiKX19LDcwODE6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oMjE5MSksYT1uKDUzNzEpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZhciBuLG8scyxjPWkuZGVmYXVsdC5wYXJzZSh0KSx1PXt9O2Zvcih2YXIgbCBpbiBlKXVbbF09KG49Y1tsXSxvPWVbbF0scz1yLmRlZmF1bHQuY2hhbm5lbC5tYXhbbF0sbz4wPyhzLW4pKm8vMTAwOm4qby8xMDApO3JldHVybiBhLmRlZmF1bHQodCx1KX19LDQzMDc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyMTkxKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdC5mb3JtYXQuaGV4LnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sNzMyOToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5oc2xhLnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sMjYxOToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5rZXl3b3JkLnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sNDEyNToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5yZ2JhLnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sNDk4OToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE0MTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsLWUpfX0sNzk5NDoodCxlKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxnOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0saDpmdW5jdGlvbih0KXtyZXR1cm4gdCUzNjB9LHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEwMD8xMDA6dDwwPzA6dH0sbDpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTAwPzEwMDp0PDA/MDp0fSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xPzE6dDwwPzA6dH19LHRvTGluZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXQvMjU1O3JldHVybiB0Pi4wMzkyOD9NYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpOmUvMTIuOTJ9LGh1ZTJyZ2I6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj90KzYqKGUtdCkqbjpuPC41P2U6bjwyLzM/dCsoZS10KSooMi8zLW4pKjY6dH0saHNsMnJnYjpmdW5jdGlvbih0LGUpe3ZhciByPXQuaCxpPXQucyxhPXQubDtpZighaSlyZXR1cm4gMi41NSphO3IvPTM2MCxpLz0xMDA7dmFyIG89KGEvPTEwMCk8LjU/YSooMStpKTphK2ktYSppLHM9MiphLW87c3dpdGNoKGUpe2Nhc2UiciI6cmV0dXJuIDI1NSpuLmh1ZTJyZ2IocyxvLHIrMS8zKTtjYXNlImciOnJldHVybiAyNTUqbi5odWUycmdiKHMsbyxyKTtjYXNlImIiOnJldHVybiAyNTUqbi5odWUycmdiKHMsbyxyLTEvMyl9fSxyZ2IyaHNsOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5yLHI9dC5nLGk9dC5iO24vPTI1NSxyLz0yNTUsaS89MjU1O3ZhciBhPU1hdGgubWF4KG4scixpKSxvPU1hdGgubWluKG4scixpKSxzPShhK28pLzI7aWYoImwiPT09ZSlyZXR1cm4gMTAwKnM7aWYoYT09PW8pcmV0dXJuIDA7dmFyIGM9YS1vO2lmKCJzIj09PWUpcmV0dXJuIDEwMCoocz4uNT9jLygyLWEtbyk6Yy8oYStvKSk7c3dpdGNoKGEpe2Nhc2UgbjpyZXR1cm4gNjAqKChyLWkpL2MrKHI8aT82OjApKTtjYXNlIHI6cmV0dXJuIDYwKigoaS1uKS9jKzIpO2Nhc2UgaTpyZXR1cm4gNjAqKChuLXIpL2MrNCk7ZGVmYXVsdDpyZXR1cm4tMX19fTtlLmRlZmF1bHQ9bn0sMTA4MzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDc5OTQpLGk9big0MDI3KSxhPW4oMzE4KSxvPXtjaGFubmVsOnIuZGVmYXVsdCxsYW5nOmkuZGVmYXVsdCx1bml0OmEuZGVmYXVsdH07ZS5kZWZhdWx0PW99LDQwMjc6KHQsZSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXtjbGFtcDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGU+bj9NYXRoLm1pbihlLE1hdGgubWF4KG4sdCkpOk1hdGgubWluKG4sTWF0aC5tYXgoZSx0KSl9LHJvdW5kOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDFlMTAqdCkvMWUxMH19O2UuZGVmYXVsdD1ufSwzMTg6KHQsZSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXtkZWMyaGV4OmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpO3JldHVybiBlLmxlbmd0aD4xP2U6IjAiK2V9fTtlLmRlZmF1bHQ9bn0sODU1MjoodCxlLG4pPT57dmFyIHI9big4NTIpKG4oNTYzOSksIkRhdGFWaWV3Iik7dC5leHBvcnRzPXJ9LDE5ODk6KHQsZSxuKT0+e3ZhciByPW4oMTc4OSksaT1uKDQwMSksYT1uKDc2NjcpLG89bigxMzI3KSxzPW4oMTg2Nik7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSw4NDA3Oih0LGUsbik9Pnt2YXIgcj1uKDcwNDApLGk9bigyMTg4KSxhPW4oMjExNyksbz1uKDc1MTgpLHM9big0NzA1KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LDcwNzE6KHQsZSxuKT0+e3ZhciByPW4oODUyKShuKDU2MzkpLCJNYXAiKTt0LmV4cG9ydHM9cn0sMzM2OToodCxlLG4pPT57dmFyIHI9big0Nzg1KSxpPW4oMTI4NSksYT1uKDZlMyksbz1uKDk5MTYpLHM9big1MjY1KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LDM4MTg6KHQsZSxuKT0+e3ZhciByPW4oODUyKShuKDU2MzkpLCJQcm9taXNlIik7dC5leHBvcnRzPXJ9LDg1MjU6KHQsZSxuKT0+e3ZhciByPW4oODUyKShuKDU2MzkpLCJTZXQiKTt0LmV4cG9ydHM9cn0sODY2ODoodCxlLG4pPT57dmFyIHI9bigzMzY5KSxpPW4oNjE5KSxhPW4oMjM4NSk7ZnVuY3Rpb24gbyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgcjsrK2U8bjspdGhpcy5hZGQodFtlXSl9by5wcm90b3R5cGUuYWRkPW8ucHJvdG90eXBlLnB1c2g9aSxvLnByb3RvdHlwZS5oYXM9YSx0LmV4cG9ydHM9b30sNjM4NDoodCxlLG4pPT57dmFyIHI9big4NDA3KSxpPW4oNzQ2NSksYT1uKDM3NzkpLG89big3NTk5KSxzPW4oNDc1OCksYz1uKDQzMDkpO2Z1bmN0aW9uIHUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgcih0KTt0aGlzLnNpemU9ZS5zaXplfXUucHJvdG90eXBlLmNsZWFyPWksdS5wcm90b3R5cGUuZGVsZXRlPWEsdS5wcm90b3R5cGUuZ2V0PW8sdS5wcm90b3R5cGUuaGFzPXMsdS5wcm90b3R5cGUuc2V0PWMsdC5leHBvcnRzPXV9LDI3MDU6KHQsZSxuKT0+e3ZhciByPW4oNTYzOSkuU3ltYm9sO3QuZXhwb3J0cz1yfSwxMTQ5Oih0LGUsbik9Pnt2YXIgcj1uKDU2MzkpLlVpbnQ4QXJyYXk7dC5leHBvcnRzPXJ9LDU3NzoodCxlLG4pPT57dmFyIHI9big4NTIpKG4oNTYzOSksIldlYWtNYXAiKTt0LmV4cG9ydHM9cn0sNjg3NDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gdC5jYWxsKGUsblswXSk7Y2FzZSAyOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdLG5bMl0pfXJldHVybiB0LmFwcGx5KGUsbil9fSw3NDEyOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGg7KytuPHImJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH19LDQ5NjM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPTAsYT1bXTsrK248cjspe3ZhciBvPXRbbl07ZShvLG4sdCkmJihhW2krK109byl9cmV0dXJuIGF9fSw3NDQzOih0LGUsbik9Pnt2YXIgcj1uKDIxMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiEobnVsbD09dHx8IXQubGVuZ3RoKSYmcih0LGUsMCk+LTF9fSwxMTk2OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK3I8aTspaWYobihlLHRbcl0pKXJldHVybiEwO3JldHVybiExfX0sNDYzNjoodCxlLG4pPT57dmFyIHI9bigyNTQ1KSxpPW4oNTY5NCksYT1uKDE0NjkpLG89big0MTQ0KSxzPW4oNTc3NiksYz1uKDY3MTkpLHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hKHQpLGw9IW4mJmkodCksaD0hbiYmIWwmJm8odCksZj0hbiYmIWwmJiFoJiZjKHQpLGQ9bnx8bHx8aHx8ZixwPWQ/cih0Lmxlbmd0aCxTdHJpbmcpOltdLHk9cC5sZW5ndGg7Zm9yKHZhciBnIGluIHQpIWUmJiF1LmNhbGwodCxnKXx8ZCYmKCJsZW5ndGgiPT1nfHxoJiYoIm9mZnNldCI9PWd8fCJwYXJlbnQiPT1nKXx8ZiYmKCJidWZmZXIiPT1nfHwiYnl0ZUxlbmd0aCI9PWd8fCJieXRlT2Zmc2V0Ij09Zyl8fHMoZyx5KSl8fHAucHVzaChnKTtyZXR1cm4gcH19LDk5MzI6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPUFycmF5KHIpOysrbjxyOylpW25dPWUodFtuXSxuLHQpO3JldHVybiBpfX0sMjQ4ODp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsaT10Lmxlbmd0aDsrK248cjspdFtpK25dPWVbbl07cmV0dXJuIHR9fSwyNjYzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9LTEsYT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHImJmEmJihuPXRbKytpXSk7KytpPGE7KW49ZShuLHRbaV0saSx0KTtyZXR1cm4gbn19LDI5MDg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248cjspaWYoZSh0W25dLG4sdCkpcmV0dXJuITA7cmV0dXJuITF9fSw4OTgzOih0LGUsbik9Pnt2YXIgcj1uKDM3MSkoImxlbmd0aCIpO3QuZXhwb3J0cz1yfSw2NTU2Oih0LGUsbik9Pnt2YXIgcj1uKDk0NjUpLGk9big3ODEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4peyh2b2lkIDAhPT1uJiYhaSh0W2VdLG4pfHx2b2lkIDA9PT1uJiYhKGUgaW4gdCkpJiZyKHQsZSxuKX19LDQ4NjU6KHQsZSxuKT0+e3ZhciByPW4oOTQ2NSksaT1uKDc4MTMpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPXRbZV07YS5jYWxsKHQsZSkmJmkobyxuKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fHIodCxlLG4pfX0sODQ3MDoodCxlLG4pPT57dmFyIHI9big3ODEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5sZW5ndGg7bi0tOylpZihyKHRbbl1bMF0sZSkpcmV0dXJuIG47cmV0dXJuLTF9fSw0MDM3Oih0LGUsbik9Pnt2YXIgcj1uKDgzNjMpLGk9bigzNjc0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSwzODg2Oih0LGUsbik9Pnt2YXIgcj1uKDgzNjMpLGk9bigxNzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSw5NDY1Oih0LGUsbik9Pnt2YXIgcj1uKDg3NzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Il9fcHJvdG9fXyI9PWUmJnI/cih0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTp0W2VdPW59fSw1OTkwOih0LGUsbik9Pnt2YXIgcj1uKDYzODQpLGk9big3NDEyKSxhPW4oNDg2NSksbz1uKDQwMzcpLHM9bigzODg2KSxjPW4oNDYyNiksdT1uKDI3OCksbD1uKDg4MDUpLGg9bigxOTExKSxmPW4oODIzNCksZD1uKDY5MDQpLHA9big0MTYwKSx5PW4oMzgyNCksZz1uKDkxNDgpLG09big4NTE3KSx2PW4oMTQ2OSksYj1uKDQxNDQpLF89big2Njg4KSx4PW4oMzIxOCksdz1uKDI5MjgpLGs9bigzNjc0KSxUPW4oMTcwNCksRT0iW29iamVjdCBBcmd1bWVudHNdIixDPSJbb2JqZWN0IEZ1bmN0aW9uXSIsUz0iW29iamVjdCBPYmplY3RdIixBPXt9O0FbRV09QVsiW29iamVjdCBBcnJheV0iXT1BWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUFbIltvYmplY3QgRGF0YVZpZXddIl09QVsiW29iamVjdCBCb29sZWFuXSJdPUFbIltvYmplY3QgRGF0ZV0iXT1BWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1BWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1BWyJbb2JqZWN0IEludDhBcnJheV0iXT1BWyJbb2JqZWN0IEludDE2QXJyYXldIl09QVsiW29iamVjdCBJbnQzMkFycmF5XSJdPUFbIltvYmplY3QgTWFwXSJdPUFbIltvYmplY3QgTnVtYmVyXSJdPUFbU109QVsiW29iamVjdCBSZWdFeHBdIl09QVsiW29iamVjdCBTZXRdIl09QVsiW29iamVjdCBTdHJpbmddIl09QVsiW29iamVjdCBTeW1ib2xdIl09QVsiW29iamVjdCBVaW50OEFycmF5XSJdPUFbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09QVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1BWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLEFbIltvYmplY3QgRXJyb3JdIl09QVtDXT1BWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLE0sTixELE8pe3ZhciBCLEw9MSZuLEk9MiZuLFI9NCZuO2lmKE0mJihCPUQ/TShlLE4sRCxPKTpNKGUpKSx2b2lkIDAhPT1CKXJldHVybiBCO2lmKCF4KGUpKXJldHVybiBlO3ZhciBGPXYoZSk7aWYoRil7aWYoQj15KGUpLCFMKXJldHVybiB1KGUsQil9ZWxzZXt2YXIgUD1wKGUpLGo9UD09Q3x8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09UDtpZihiKGUpKXJldHVybiBjKGUsTCk7aWYoUD09U3x8UD09RXx8aiYmIUQpe2lmKEI9SXx8aj97fTptKGUpLCFMKXJldHVybiBJP2goZSxzKEIsZSkpOmwoZSxvKEIsZSkpfWVsc2V7aWYoIUFbUF0pcmV0dXJuIEQ/ZTp7fTtCPWcoZSxQLEwpfX1PfHwoTz1uZXcgcik7dmFyIFk9Ty5nZXQoZSk7aWYoWSlyZXR1cm4gWTtPLnNldChlLEIpLHcoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtCLmFkZCh0KHIsbixNLHIsZSxPKSl9KSk6XyhlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLGkpe0Iuc2V0KGksdChyLG4sTSxpLGUsTykpfSkpO3ZhciB6PUY/dm9pZCAwOihSP0k/ZDpmOkk/VDprKShlKTtyZXR1cm4gaSh6fHxlLChmdW5jdGlvbihyLGkpe3omJihyPWVbaT1yXSksYShCLGksdChyLG4sTSxpLGUsTykpfSkpLEJ9fSwzMTE4Oih0LGUsbik9Pnt2YXIgcj1uKDMyMTgpLGk9T2JqZWN0LmNyZWF0ZSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gZnVuY3Rpb24oZSl7aWYoIXIoZSkpcmV0dXJue307aWYoaSlyZXR1cm4gaShlKTt0LnByb3RvdHlwZT1lO3ZhciBuPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAsbn19KCk7dC5leHBvcnRzPWF9LDk4ODE6KHQsZSxuKT0+e3ZhciByPW4oNzgxNiksaT1uKDkyOTEpKHIpO3QuZXhwb3J0cz1pfSw2MDI5Oih0LGUsbik9Pnt2YXIgcj1uKDM0NDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXt2YXIgbz10W2ldLHM9ZShvKTtpZihudWxsIT1zJiYodm9pZCAwPT09Yz9zPT1zJiYhcihzKTpuKHMsYykpKXZhciBjPXMsdT1vfXJldHVybiB1fX0sNzYwOih0LGUsbik9Pnt2YXIgcj1uKDk4ODEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO3JldHVybiByKHQsKGZ1bmN0aW9uKHQscixpKXtlKHQscixpKSYmbi5wdXNoKHQpfSkpLG59fSwxODQ4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9bisocj8xOi0xKTtyP2EtLTorK2E8aTspaWYoZSh0W2FdLGEsdCkpcmV0dXJuIGE7cmV0dXJuLTF9fSwxMDc4Oih0LGUsbik9Pnt2YXIgcj1uKDI0ODgpLGk9big3Mjg1KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sYSxvLHMpe3ZhciBjPS0xLHU9ZS5sZW5ndGg7Zm9yKGF8fChhPWkpLHN8fChzPVtdKTsrK2M8dTspe3ZhciBsPWVbY107bj4wJiZhKGwpP24+MT90KGwsbi0xLGEsbyxzKTpyKHMsbCk6b3x8KHNbcy5sZW5ndGhdPWwpfXJldHVybiBzfX0sODQ4MzoodCxlLG4pPT57dmFyIHI9big1MDYzKSgpO3QuZXhwb3J0cz1yfSw3ODE2Oih0LGUsbik9Pnt2YXIgcj1uKDg0ODMpLGk9bigzNjc0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcih0LGUsaSl9fSw3Nzg2Oih0LGUsbik9Pnt2YXIgcj1uKDE4MTEpLGk9bigzMjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGE9KGU9cihlLHQpKS5sZW5ndGg7bnVsbCE9dCYmbjxhOyl0PXRbaShlW24rK10pXTtyZXR1cm4gbiYmbj09YT90OnZvaWQgMH19LDg4NjY6KHQsZSxuKT0+e3ZhciByPW4oMjQ4OCksaT1uKDE0NjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9ZSh0KTtyZXR1cm4gaSh0KT9hOnIoYSxuKHQpKX19LDQyMzk6KHQsZSxuKT0+e3ZhciByPW4oMjcwNSksaT1uKDk2MDcpLGE9bigyMzMzKSxvPXI/ci50b1N0cmluZ1RhZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOm8mJm8gaW4gT2JqZWN0KHQpP2kodCk6YSh0KX19LDMzMjU6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PmV9fSw4NTY1OnQ9Pnt2YXIgZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsIT10JiZlLmNhbGwodCxuKX19LDEzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9fSwyMTE4Oih0LGUsbik9Pnt2YXIgcj1uKDE4NDgpLGk9bigyNzIyKSxhPW4oMjM1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT09ZT9hKHQsZSxuKTpyKHQsaSxuKX19LDk0NTQ6KHQsZSxuKT0+e3ZhciByPW4oNDIzOSksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PXIodCl9fSw5Mzk6KHQsZSxuKT0+e3ZhciByPW4oMjQ5MiksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixhLG8scyl7cmV0dXJuIGU9PT1ufHwobnVsbD09ZXx8bnVsbD09bnx8IWkoZSkmJiFpKG4pP2UhPWUmJm4hPW46cihlLG4sYSxvLHQscykpfX0sMjQ5MjoodCxlLG4pPT57dmFyIHI9big2Mzg0KSxpPW4oNzExNCksYT1uKDgzNTEpLG89big2MDk2KSxzPW4oNDE2MCksYz1uKDE0NjkpLHU9big0MTQ0KSxsPW4oNjcxOSksaD0iW29iamVjdCBBcmd1bWVudHNdIixmPSJbb2JqZWN0IEFycmF5XSIsZD0iW29iamVjdCBPYmplY3RdIixwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHksZyxtKXt2YXIgdj1jKHQpLGI9YyhlKSxfPXY/ZjpzKHQpLHg9Yj9mOnMoZSksdz0oXz1fPT1oP2Q6Xyk9PWQsaz0oeD14PT1oP2Q6eCk9PWQsVD1fPT14O2lmKFQmJnUodCkpe2lmKCF1KGUpKXJldHVybiExO3Y9ITAsdz0hMX1pZihUJiYhdylyZXR1cm4gbXx8KG09bmV3IHIpLHZ8fGwodCk/aSh0LGUsbix5LGcsbSk6YSh0LGUsXyxuLHksZyxtKTtpZighKDEmbikpe3ZhciBFPXcmJnAuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLEM9ayYmcC5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYoRXx8Qyl7dmFyIFM9RT90LnZhbHVlKCk6dCxBPUM/ZS52YWx1ZSgpOmU7cmV0dXJuIG18fChtPW5ldyByKSxnKFMsQSxuLHksbSl9fXJldHVybiEhVCYmKG18fChtPW5ldyByKSxvKHQsZSxuLHksZyxtKSl9fSw1NTg4Oih0LGUsbik9Pnt2YXIgcj1uKDQxNjApLGk9big3MDA1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IE1hcF0iPT1yKHQpfX0sMjk1ODoodCxlLG4pPT57dmFyIHI9big2Mzg0KSxpPW4oOTM5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89bi5sZW5ndGgscz1vLGM9IWE7aWYobnVsbD09dClyZXR1cm4hcztmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIHU9bltvXTtpZihjJiZ1WzJdP3VbMV0hPT10W3VbMF1dOiEodVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHM7KXt2YXIgbD0odT1uW29dKVswXSxoPXRbbF0sZj11WzFdO2lmKGMmJnVbMl0pe2lmKHZvaWQgMD09PWgmJiEobCBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyByO2lmKGEpdmFyIHA9YShoLGYsbCx0LGUsZCk7aWYoISh2b2lkIDA9PT1wP2koZixoLDMsYSxkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9fSwyNzIyOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSw4NDU4Oih0LGUsbik9Pnt2YXIgcj1uKDM1NjApLGk9big1MzQ2KSxhPW4oMzIxOCksbz1uKDM0Nikscz0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxjPUZ1bmN0aW9uLnByb3RvdHlwZSx1PU9iamVjdC5wcm90b3R5cGUsbD1jLnRvU3RyaW5nLGg9dS5oYXNPd25Qcm9wZXJ0eSxmPVJlZ0V4cCgiXiIrbC5jYWxsKGgpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFhKHQpfHxpKHQpKSYmKHIodCk/ZjpzKS50ZXN0KG8odCkpfX0sOTIyMToodCxlLG4pPT57dmFyIHI9big0MTYwKSxpPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBTZXRdIj09cih0KX19LDg3NDk6KHQsZSxuKT0+e3ZhciByPW4oNDIzOSksaT1uKDE3ODApLGE9big3MDA1KSxvPXt9O29bIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPW9bIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW9bIltvYmplY3QgSW50OEFycmF5XSJdPW9bIltvYmplY3QgSW50MTZBcnJheV0iXT1vWyJbb2JqZWN0IEludDMyQXJyYXldIl09b1siW29iamVjdCBVaW50OEFycmF5XSJdPW9bIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09b1siW29iamVjdCBVaW50MTZBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLG9bIltvYmplY3QgQXJndW1lbnRzXSJdPW9bIltvYmplY3QgQXJyYXldIl09b1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1vWyJbb2JqZWN0IEJvb2xlYW5dIl09b1siW29iamVjdCBEYXRhVmlld10iXT1vWyJbb2JqZWN0IERhdGVdIl09b1siW29iamVjdCBFcnJvcl0iXT1vWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW9bIltvYmplY3QgTWFwXSJdPW9bIltvYmplY3QgTnVtYmVyXSJdPW9bIltvYmplY3QgT2JqZWN0XSJdPW9bIltvYmplY3QgUmVnRXhwXSJdPW9bIltvYmplY3QgU2V0XSJdPW9bIltvYmplY3QgU3RyaW5nXSJdPW9bIltvYmplY3QgV2Vha01hcF0iXT0hMSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkmJmkodC5sZW5ndGgpJiYhIW9bcih0KV19fSw3MjA2Oih0LGUsbik9Pnt2YXIgcj1uKDE1NzMpLGk9big2NDMyKSxhPW4oNjU1Nyksbz1uKDE0NjkpLHM9big5NjAxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpudWxsPT10P2E6Im9iamVjdCI9PXR5cGVvZiB0P28odCk/aSh0WzBdLHRbMV0pOnIodCk6cyh0KX19LDI4MDoodCxlLG4pPT57dmFyIHI9big1NzI2KSxpPW4oNjkxNiksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSlyZXR1cm4gaSh0KTt2YXIgZT1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KHQpKWEuY2FsbCh0LG4pJiYiY29uc3RydWN0b3IiIT1uJiZlLnB1c2gobik7cmV0dXJuIGV9fSwzMTM6KHQsZSxuKT0+e3ZhciByPW4oMzIxOCksaT1uKDU3MjYpLGE9bigzNDk4KSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXJldHVybiBhKHQpO3ZhciBlPWkodCksbj1bXTtmb3IodmFyIHMgaW4gdCkoImNvbnN0cnVjdG9yIiE9c3x8IWUmJm8uY2FsbCh0LHMpKSYmbi5wdXNoKHMpO3JldHVybiBufX0sNDMzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfX0sOTE5OToodCxlLG4pPT57dmFyIHI9big5ODgxKSxpPW4oODYxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEsYT1pKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsaSl7YVsrK25dPWUodCxyLGkpfSkpLGF9fSwxNTczOih0LGUsbik9Pnt2YXIgcj1uKDI5NTgpLGk9bigxNDk5KSxhPW4oMjYzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCk7cmV0dXJuIDE9PWUubGVuZ3RoJiZlWzBdWzJdP2EoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PXR8fHIobix0LGUpfX19LDY0MzI6KHQsZSxuKT0+e3ZhciByPW4oOTM5KSxpPW4oMTkxNyksYT1uKDkwOTUpLG89big1NDAzKSxzPW4oOTE2MiksYz1uKDI2MzQpLHU9bigzMjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBvKHQpJiZzKGUpP2ModSh0KSxlKTpmdW5jdGlvbihuKXt2YXIgbz1pKG4sdCk7cmV0dXJuIHZvaWQgMD09PW8mJm89PT1lP2Eobix0KTpyKGUsbywzKX19fSwyOTgwOih0LGUsbik9Pnt2YXIgcj1uKDYzODQpLGk9big2NTU2KSxhPW4oODQ4Myksbz1uKDk3ODMpLHM9bigzMjE4KSxjPW4oMTcwNCksdT1uKDYzOTApO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixsLGgsZil7ZSE9PW4mJmEobiwoZnVuY3Rpb24oYSxjKXtpZihmfHwoZj1uZXcgcikscyhhKSlvKGUsbixjLGwsdCxoLGYpO2Vsc2V7dmFyIGQ9aD9oKHUoZSxjKSxhLGMrIiIsZSxuLGYpOnZvaWQgMDt2b2lkIDA9PT1kJiYoZD1hKSxpKGUsYyxkKX19KSxjKX19LDk3ODM6KHQsZSxuKT0+e3ZhciByPW4oNjU1NiksaT1uKDQ2MjYpLGE9big3MTMzKSxvPW4oMjc4KSxzPW4oODUxNyksYz1uKDU2OTQpLHU9bigxNDY5KSxsPW4oOTI0NiksaD1uKDQxNDQpLGY9bigzNTYwKSxkPW4oMzIxOCkscD1uKDg2MzApLHk9big2NzE5KSxnPW4oNjM5MCksbT1uKDM2NzgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbix2LGIsXyx4KXt2YXIgdz1nKHQsbiksaz1nKGUsbiksVD14LmdldChrKTtpZihUKXIodCxuLFQpO2Vsc2V7dmFyIEU9Xz9fKHcsayxuKyIiLHQsZSx4KTp2b2lkIDAsQz12b2lkIDA9PT1FO2lmKEMpe3ZhciBTPXUoayksQT0hUyYmaChrKSxNPSFTJiYhQSYmeShrKTtFPWssU3x8QXx8TT91KHcpP0U9dzpsKHcpP0U9byh3KTpBPyhDPSExLEU9aShrLCEwKSk6TT8oQz0hMSxFPWEoaywhMCkpOkU9W106cChrKXx8YyhrKT8oRT13LGModyk/RT1tKHcpOmQodykmJiFmKHcpfHwoRT1zKGspKSk6Qz0hMX1DJiYoeC5zZXQoayxFKSxiKEUsayx2LF8seCkseC5kZWxldGUoaykpLHIodCxuLEUpfX19LDk1NTY6KHQsZSxuKT0+e3ZhciByPW4oOTkzMiksaT1uKDc3ODYpLGE9big3MjA2KSxvPW4oOTE5OSkscz1uKDExMzEpLGM9bigxNzE3KSx1PW4oNTAyMiksbD1uKDY1NTcpLGg9bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2U9ZS5sZW5ndGg/cihlLChmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT9mdW5jdGlvbihlKXtyZXR1cm4gaShlLDE9PT10Lmxlbmd0aD90WzBdOnQpfTp0fSkpOltsXTt2YXIgZj0tMTtlPXIoZSxjKGEpKTt2YXIgZD1vKHQsKGZ1bmN0aW9uKHQsbixpKXtyZXR1cm57Y3JpdGVyaWE6cihlLChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKSxpbmRleDorK2YsdmFsdWU6dH19KSk7cmV0dXJuIHMoZCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSh0LGUsbil9KSl9fSw1OTcwOih0LGUsbik9Pnt2YXIgcj1uKDMwMTIpLGk9big5MDk1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkodCxuKX0pKX19LDMwMTI6KHQsZSxuKT0+e3ZhciByPW4oNzc4NiksaT1uKDYxMSksYT1uKDE4MTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvPS0xLHM9ZS5sZW5ndGgsYz17fTsrK288czspe3ZhciB1PWVbb10sbD1yKHQsdSk7bihsLHUpJiZpKGMsYSh1LHQpLGwpfXJldHVybiBjfX0sMzcxOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX19LDkxNTI6KHQsZSxuKT0+e3ZhciByPW4oNzc4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcihlLHQpfX19LDk4OnQ9Pnt2YXIgZT1NYXRoLmNlaWwsbj1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyLGksYSl7Zm9yKHZhciBvPS0xLHM9bihlKChyLXQpLyhpfHwxKSksMCksYz1BcnJheShzKTtzLS07KWNbYT9zOisrb109dCx0Kz1pO3JldHVybiBjfX0sMTA3OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gaSh0LChmdW5jdGlvbih0LGksYSl7bj1yPyhyPSExLHQpOmUobix0LGksYSl9KSksbn19LDU5NzY6KHQsZSxuKT0+e3ZhciByPW4oNjU1NyksaT1uKDUzNTcpLGE9big2MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoaSh0LGUsciksdCsiIil9fSw2MTE6KHQsZSxuKT0+e3ZhciByPW4oNDg2NSksaT1uKDE4MTEpLGE9big1Nzc2KSxvPW4oMzIxOCkscz1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe2lmKCFvKHQpKXJldHVybiB0O2Zvcih2YXIgdT0tMSxsPShlPWkoZSx0KSkubGVuZ3RoLGg9bC0xLGY9dDtudWxsIT1mJiYrK3U8bDspe3ZhciBkPXMoZVt1XSkscD1uO2lmKCJfX3Byb3RvX18iPT09ZHx8ImNvbnN0cnVjdG9yIj09PWR8fCJwcm90b3R5cGUiPT09ZClyZXR1cm4gdDtpZih1IT1oKXt2YXIgeT1mW2RdO3ZvaWQgMD09PShwPWM/Yyh5LGQsZik6dm9pZCAwKSYmKHA9byh5KT95OmEoZVt1KzFdKT9bXTp7fSl9cihmLGQscCksZj1mW2RdfXJldHVybiB0fX0sNjU2MDoodCxlLG4pPT57dmFyIHI9big1NzAzKSxpPW4oODc3NyksYT1uKDY1NTcpLG89aT9mdW5jdGlvbih0LGUpe3JldHVybiBpKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6cihlKSx3cml0YWJsZTohMH0pfTphO3QuZXhwb3J0cz1vfSwxMTMxOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmxlbmd0aDtmb3IodC5zb3J0KGUpO24tLTspdFtuXT10W25dLnZhbHVlO3JldHVybiB0fX0sMjU0NTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9QXJyYXkodCk7KytuPHQ7KXJbbl09ZShuKTtyZXR1cm4gcn19LDUzMToodCxlLG4pPT57dmFyIHI9bigyNzA1KSxpPW4oOTkzMiksYT1uKDE0NjkpLG89bigzNDQ4KSxzPXI/ci5wcm90b3R5cGU6dm9pZCAwLGM9cz9zLnRvU3RyaW5nOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoYShlKSlyZXR1cm4gaShlLHQpKyIiO2lmKG8oZSkpcmV0dXJuIGM/Yy5jYWxsKGUpOiIiO3ZhciBuPWUrIiI7cmV0dXJuIjAiPT1uJiYxL2U9PS0xLzA/Ii0wIjpufX0sNzU2MToodCxlLG4pPT57dmFyIHI9big3OTkwKSxpPS9eXHMrLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC5zbGljZSgwLHIodCkrMSkucmVwbGFjZShpLCIiKTp0fX0sMTcxNzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKX19fSw1NjUyOih0LGUsbik9Pnt2YXIgcj1uKDg2NjgpLGk9big3NDQzKSxhPW4oMTE5Niksbz1uKDQ3NTcpLHM9bigzNTkzKSxjPW4oMTgxNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdT0tMSxsPWksaD10Lmxlbmd0aCxmPSEwLGQ9W10scD1kO2lmKG4pZj0hMSxsPWE7ZWxzZSBpZihoPj0yMDApe3ZhciB5PWU/bnVsbDpzKHQpO2lmKHkpcmV0dXJuIGMoeSk7Zj0hMSxsPW8scD1uZXcgcn1lbHNlIHA9ZT9bXTpkO3Q6Zm9yKDsrK3U8aDspe3ZhciBnPXRbdV0sbT1lP2UoZyk6ZztpZihnPW58fDAhPT1nP2c6MCxmJiZtPT1tKXtmb3IodmFyIHY9cC5sZW5ndGg7di0tOylpZihwW3ZdPT09bSljb250aW51ZSB0O2UmJnAucHVzaChtKSxkLnB1c2goZyl9ZWxzZSBsKHAsbSxuKXx8KHAhPT1kJiZwLnB1c2gobSksZC5wdXNoKGcpKX1yZXR1cm4gZH19LDc0MTU6KHQsZSxuKT0+e3ZhciByPW4oOTkzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9fSwxNzU3OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0tMSxpPXQubGVuZ3RoLGE9ZS5sZW5ndGgsbz17fTsrK3I8aTspe3ZhciBzPXI8YT9lW3JdOnZvaWQgMDtuKG8sdFtyXSxzKX1yZXR1cm4gb319LDQ3NTc6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmhhcyhlKX19LDQyOTA6KHQsZSxuKT0+e3ZhciByPW4oNjU1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cn19LDE4MTE6KHQsZSxuKT0+e3ZhciByPW4oMTQ2OSksaT1uKDU0MDMpLGE9big1NTE0KSxvPW4oOTgzMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCk/dDppKHQsZSk/W3RdOmEobyh0KSl9fSw0MzE4Oih0LGUsbik9Pnt2YXIgcj1uKDExNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgcihlKS5zZXQobmV3IHIodCkpLGV9fSw0NjI2Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPW4oNTYzOSksaT1lJiYhZS5ub2RlVHlwZSYmZSxhPWkmJnQmJiF0Lm5vZGVUeXBlJiZ0LG89YSYmYS5leHBvcnRzPT09aT9yLkJ1ZmZlcjp2b2lkIDAscz1vP28uYWxsb2NVbnNhZmU6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUpcmV0dXJuIHQuc2xpY2UoKTt2YXIgbj10Lmxlbmd0aCxyPXM/cyhuKTpuZXcgdC5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gdC5jb3B5KHIpLHJ9fSw3MTU3Oih0LGUsbik9Pnt2YXIgcj1uKDQzMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWU/cih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9fSwzMTQ3OnQ9Pnt2YXIgZT0vXHcqJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyB0LmNvbnN0cnVjdG9yKHQuc291cmNlLGUuZXhlYyh0KSk7cmV0dXJuIG4ubGFzdEluZGV4PXQubGFzdEluZGV4LG59fSw0MTk6KHQsZSxuKT0+e3ZhciByPW4oMjcwNSksaT1yP3IucHJvdG90eXBlOnZvaWQgMCxhPWk/aS52YWx1ZU9mOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGE/T2JqZWN0KGEuY2FsbCh0KSk6e319fSw3MTMzOih0LGUsbik9Pnt2YXIgcj1uKDQzMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWU/cih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQubGVuZ3RoKX19LDYzOTM6KHQsZSxuKT0+e3ZhciByPW4oMzQ0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpe3ZhciBuPXZvaWQgMCE9PXQsaT1udWxsPT09dCxhPXQ9PXQsbz1yKHQpLHM9dm9pZCAwIT09ZSxjPW51bGw9PT1lLHU9ZT09ZSxsPXIoZSk7aWYoIWMmJiFsJiYhbyYmdD5lfHxvJiZzJiZ1JiYhYyYmIWx8fGkmJnMmJnV8fCFuJiZ1fHwhYSlyZXR1cm4gMTtpZighaSYmIW8mJiFsJiZ0PGV8fGwmJm4mJmEmJiFpJiYhb3x8YyYmbiYmYXx8IXMmJmF8fCF1KXJldHVybi0xfXJldHVybiAwfX0sNTAyMjoodCxlLG4pPT57dmFyIHI9big2MzkzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT0tMSxhPXQuY3JpdGVyaWEsbz1lLmNyaXRlcmlhLHM9YS5sZW5ndGgsYz1uLmxlbmd0aDsrK2k8czspe3ZhciB1PXIoYVtpXSxvW2ldKTtpZih1KXJldHVybiBpPj1jP3U6dSooImRlc2MiPT1uW2ldPy0xOjEpfXJldHVybiB0LmluZGV4LWUuaW5kZXh9fSwyNzg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KHIpKTsrK248cjspZVtuXT10W25dO3JldHVybiBlfX0sODM2MzoodCxlLG4pPT57dmFyIHI9big0ODY1KSxpPW4oOTQ2NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPSFuO258fChuPXt9KTtmb3IodmFyIHM9LTEsYz1lLmxlbmd0aDsrK3M8Yzspe3ZhciB1PWVbc10sbD1hP2Eoblt1XSx0W3VdLHUsbix0KTp2b2lkIDA7dm9pZCAwPT09bCYmKGw9dFt1XSksbz9pKG4sdSxsKTpyKG4sdSxsKX1yZXR1cm4gbn19LDg4MDU6KHQsZSxuKT0+e3ZhciByPW4oODM2MyksaT1uKDk1NTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaSh0KSxlKX19LDE5MTE6KHQsZSxuKT0+e3ZhciByPW4oODM2MyksaT1uKDE0NDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaSh0KSxlKX19LDQ0Mjk6KHQsZSxuKT0+e3ZhciByPW4oNTYzOSlbIl9fY29yZS1qc19zaGFyZWRfXyJdO3QuZXhwb3J0cz1yfSwxNzUwOih0LGUsbik9Pnt2YXIgcj1uKDU5NzYpLGk9big2NjEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKGUsbil7dmFyIHI9LTEsYT1uLmxlbmd0aCxvPWE+MT9uW2EtMV06dm9pZCAwLHM9YT4yP25bMl06dm9pZCAwO2ZvcihvPXQubGVuZ3RoPjMmJiJmdW5jdGlvbiI9PXR5cGVvZiBvPyhhLS0sbyk6dm9pZCAwLHMmJmkoblswXSxuWzFdLHMpJiYobz1hPDM/dm9pZCAwOm8sYT0xKSxlPU9iamVjdChlKTsrK3I8YTspe3ZhciBjPW5bcl07YyYmdChlLGMscixvKX1yZXR1cm4gZX0pKX19LDkyOTE6KHQsZSxuKT0+e3ZhciByPW4oODYxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7aWYobnVsbD09bilyZXR1cm4gbjtpZighcihuKSlyZXR1cm4gdChuLGkpO2Zvcih2YXIgYT1uLmxlbmd0aCxvPWU/YTotMSxzPU9iamVjdChuKTsoZT9vLS06KytvPGEpJiYhMSE9PWkoc1tvXSxvLHMpOyk7cmV0dXJuIG59fX0sNTA2Mzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7Zm9yKHZhciBpPS0xLGE9T2JqZWN0KGUpLG89cihlKSxzPW8ubGVuZ3RoO3MtLTspe3ZhciBjPW9bdD9zOisraV07aWYoITE9PT1uKGFbY10sYyxhKSlicmVha31yZXR1cm4gZX19fSw3NzQwOih0LGUsbik9Pnt2YXIgcj1uKDcyMDYpLGk9big4NjEyKSxhPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sbyl7dmFyIHM9T2JqZWN0KGUpO2lmKCFpKGUpKXt2YXIgYz1yKG4sMyk7ZT1hKGUpLG49ZnVuY3Rpb24odCl7cmV0dXJuIGMoc1t0XSx0LHMpfX12YXIgdT10KGUsbixvKTtyZXR1cm4gdT4tMT9zW2M/ZVt1XTp1XTp2b2lkIDB9fX0sNzQ0NToodCxlLG4pPT57dmFyIHI9big5OCksaT1uKDY2MTIpLGE9big4NjAxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtyZXR1cm4gbyYmIm51bWJlciIhPXR5cGVvZiBvJiZpKGUsbixvKSYmKG49bz12b2lkIDApLGU9YShlKSx2b2lkIDA9PT1uPyhuPWUsZT0wKTpuPWEobiksbz12b2lkIDA9PT1vP2U8bj8xOi0xOmEobykscihlLG4sbyx0KX19fSwzNTkzOih0LGUsbik9Pnt2YXIgcj1uKDg1MjUpLGk9bigzMDgpLGE9bigxODE0KSxvPXImJjEvYShuZXcgcihbLC0wXSkpWzFdPT0xLzA/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByKHQpfTppO3QuZXhwb3J0cz1vfSw4Nzc3Oih0LGUsbik9Pnt2YXIgcj1uKDg1MiksaT1mdW5jdGlvbigpe3RyeXt2YXIgdD1yKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1pfSw3MTE0Oih0LGUsbik9Pnt2YXIgcj1uKDg2NjgpLGk9bigyOTA4KSxhPW4oNDc1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLG8scyxjKXt2YXIgdT0xJm4sbD10Lmxlbmd0aCxoPWUubGVuZ3RoO2lmKGwhPWgmJiEodSYmaD5sKSlyZXR1cm4hMTt2YXIgZj1jLmdldCh0KSxkPWMuZ2V0KGUpO2lmKGYmJmQpcmV0dXJuIGY9PWUmJmQ9PXQ7dmFyIHA9LTEseT0hMCxnPTImbj9uZXcgcjp2b2lkIDA7Zm9yKGMuc2V0KHQsZSksYy5zZXQoZSx0KTsrK3A8bDspe3ZhciBtPXRbcF0sdj1lW3BdO2lmKG8pdmFyIGI9dT9vKHYsbSxwLGUsdCxjKTpvKG0sdixwLHQsZSxjKTtpZih2b2lkIDAhPT1iKXtpZihiKWNvbnRpbnVlO3k9ITE7YnJlYWt9aWYoZyl7aWYoIWkoZSwoZnVuY3Rpb24odCxlKXtpZighYShnLGUpJiYobT09PXR8fHMobSx0LG4sbyxjKSkpcmV0dXJuIGcucHVzaChlKX0pKSl7eT0hMTticmVha319ZWxzZSBpZihtIT09diYmIXMobSx2LG4sbyxjKSl7eT0hMTticmVha319cmV0dXJuIGMuZGVsZXRlKHQpLGMuZGVsZXRlKGUpLHl9fSw4MzUxOih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9bigxMTQ5KSxhPW4oNzgxMyksbz1uKDcxMTQpLHM9big4Nzc2KSxjPW4oMTgxNCksdT1yP3IucHJvdG90eXBlOnZvaWQgMCxsPXU/dS52YWx1ZU9mOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scix1LGgsZil7c3dpdGNoKG4pe2Nhc2UiW29iamVjdCBEYXRhVmlld10iOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IWgobmV3IGkodCksbmV3IGkoZSkpKTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IE51bWJlcl0iOnJldHVybiBhKCt0LCtlKTtjYXNlIltvYmplY3QgRXJyb3JdIjpyZXR1cm4gdC5uYW1lPT1lLm5hbWUmJnQubWVzc2FnZT09ZS5tZXNzYWdlO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIHQ9PWUrIiI7Y2FzZSJbb2JqZWN0IE1hcF0iOnZhciBkPXM7Y2FzZSJbb2JqZWN0IFNldF0iOnZhciBwPTEmcjtpZihkfHwoZD1jKSx0LnNpemUhPWUuc2l6ZSYmIXApcmV0dXJuITE7dmFyIHk9Zi5nZXQodCk7aWYoeSlyZXR1cm4geT09ZTtyfD0yLGYuc2V0KHQsZSk7dmFyIGc9byhkKHQpLGQoZSkscix1LGgsZik7cmV0dXJuIGYuZGVsZXRlKHQpLGc7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKGwpcmV0dXJuIGwuY2FsbCh0KT09bC5jYWxsKGUpfXJldHVybiExfX0sNjA5NjoodCxlLG4pPT57dmFyIHI9big4MjM0KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEsbyxzKXt2YXIgYz0xJm4sdT1yKHQpLGw9dS5sZW5ndGg7aWYobCE9cihlKS5sZW5ndGgmJiFjKXJldHVybiExO2Zvcih2YXIgaD1sO2gtLTspe3ZhciBmPXVbaF07aWYoIShjP2YgaW4gZTppLmNhbGwoZSxmKSkpcmV0dXJuITF9dmFyIGQ9cy5nZXQodCkscD1zLmdldChlKTtpZihkJiZwKXJldHVybiBkPT1lJiZwPT10O3ZhciB5PSEwO3Muc2V0KHQsZSkscy5zZXQoZSx0KTtmb3IodmFyIGc9YzsrK2g8bDspe3ZhciBtPXRbZj11W2hdXSx2PWVbZl07aWYoYSl2YXIgYj1jP2EodixtLGYsZSx0LHMpOmEobSx2LGYsdCxlLHMpO2lmKCEodm9pZCAwPT09Yj9tPT09dnx8byhtLHYsbixhLHMpOmIpKXt5PSExO2JyZWFrfWd8fChnPSJjb25zdHJ1Y3RvciI9PWYpfWlmKHkmJiFnKXt2YXIgXz10LmNvbnN0cnVjdG9yLHg9ZS5jb25zdHJ1Y3RvcjtfPT14fHwhKCJjb25zdHJ1Y3RvciJpbiB0KXx8ISgiY29uc3RydWN0b3IiaW4gZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBfJiZfIGluc3RhbmNlb2YgXyYmImZ1bmN0aW9uIj09dHlwZW9mIHgmJnggaW5zdGFuY2VvZiB4fHwoeT0hMSl9cmV0dXJuIHMuZGVsZXRlKHQpLHMuZGVsZXRlKGUpLHl9fSw5MDIxOih0LGUsbik9Pnt2YXIgcj1uKDU1NjQpLGk9big1MzU3KSxhPW4oNjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQsdm9pZCAwLHIpLHQrIiIpfX0sMTk1NzoodCxlLG4pPT57dmFyIHI9Im9iamVjdCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nO3QuZXhwb3J0cz1yfSw4MjM0Oih0LGUsbik9Pnt2YXIgcj1uKDg4NjYpLGk9big5NTUxKSxhPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LDY5MDQ6KHQsZSxuKT0+e3ZhciByPW4oODg2NiksaT1uKDE0NDIpLGE9bigxNzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxhLGkpfX0sNTA1MDoodCxlLG4pPT57dmFyIHI9big3MDE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10Ll9fZGF0YV9fO3JldHVybiByKGUpP25bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06bi5tYXB9fSwxNDk5Oih0LGUsbik9Pnt2YXIgcj1uKDkxNjIpLGk9bigzNjc0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkodCksbj1lLmxlbmd0aDtuLS07KXt2YXIgYT1lW25dLG89dFthXTtlW25dPVthLG8scihvKV19cmV0dXJuIGV9fSw4NTI6KHQsZSxuKT0+e3ZhciByPW4oODQ1OCksaT1uKDc4MDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWkodCxlKTtyZXR1cm4gcihuKT9uOnZvaWQgMH19LDU5MjQ6KHQsZSxuKT0+e3ZhciByPW4oNTU2OSkoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dC5leHBvcnRzPXJ9LDk2MDc6KHQsZSxuKT0+e3ZhciByPW4oMjcwNSksaT1PYmplY3QucHJvdG90eXBlLGE9aS5oYXNPd25Qcm9wZXJ0eSxvPWkudG9TdHJpbmcscz1yP3IudG9TdHJpbmdUYWc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hLmNhbGwodCxzKSxuPXRbc107dHJ5e3Rbc109dm9pZCAwO3ZhciByPSEwfWNhdGNoKHQpe312YXIgaT1vLmNhbGwodCk7cmV0dXJuIHImJihlP3Rbc109bjpkZWxldGUgdFtzXSksaX19LDk1NTE6KHQsZSxuKT0+e3ZhciByPW4oNDk2MyksaT1uKDQ3OSksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxzPW8/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/W106KHQ9T2JqZWN0KHQpLHIobyh0KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2FsbCh0LGUpfSkpKX06aTt0LmV4cG9ydHM9c30sMTQ0MjoodCxlLG4pPT57dmFyIHI9bigyNDg4KSxpPW4oNTkyNCksYT1uKDk1NTEpLG89big0NzkpLHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbih0KXtmb3IodmFyIGU9W107dDspcihlLGEodCkpLHQ9aSh0KTtyZXR1cm4gZX06bzt0LmV4cG9ydHM9c30sNDE2MDoodCxlLG4pPT57dmFyIHI9big4NTUyKSxpPW4oNzA3MSksYT1uKDM4MTgpLG89big4NTI1KSxzPW4oNTc3KSxjPW4oNDIzOSksdT1uKDM0NiksbD0iW29iamVjdCBNYXBdIixoPSJbb2JqZWN0IFByb21pc2VdIixmPSJbb2JqZWN0IFNldF0iLGQ9IltvYmplY3QgV2Vha01hcF0iLHA9IltvYmplY3QgRGF0YVZpZXddIix5PXUociksZz11KGkpLG09dShhKSx2PXUobyksYj11KHMpLF89YzsociYmXyhuZXcgcihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9cHx8aSYmXyhuZXcgaSkhPWx8fGEmJl8oYS5yZXNvbHZlKCkpIT1ofHxvJiZfKG5ldyBvKSE9Znx8cyYmXyhuZXcgcykhPWQpJiYoXz1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLG49IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAscj1uP3Uobik6IiI7aWYocilzd2l0Y2gocil7Y2FzZSB5OnJldHVybiBwO2Nhc2UgZzpyZXR1cm4gbDtjYXNlIG06cmV0dXJuIGg7Y2FzZSB2OnJldHVybiBmO2Nhc2UgYjpyZXR1cm4gZH1yZXR1cm4gZX0pLHQuZXhwb3J0cz1ffSw3ODAxOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX19LDIyMjoodCxlLG4pPT57dmFyIHI9bigxODExKSxpPW4oNTY5NCksYT1uKDE0NjkpLG89big1Nzc2KSxzPW4oMTc4MCksYz1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHU9LTEsbD0oZT1yKGUsdCkpLmxlbmd0aCxoPSExOysrdTxsOyl7dmFyIGY9YyhlW3VdKTtpZighKGg9bnVsbCE9dCYmbih0LGYpKSlicmVhazt0PXRbZl19cmV0dXJuIGh8fCsrdSE9bD9oOiEhKGw9bnVsbD09dD8wOnQubGVuZ3RoKSYmcyhsKSYmbyhmLGwpJiYoYSh0KXx8aSh0KSl9fSwyNjg5OnQ9Pnt2YXIgZT1SZWdFeHAoIltcXHUyMDBkXFx1ZDgwMC1cXHVkZmZmXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXFx1ZmUwZVxcdWZlMGZdIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnRlc3QodCl9fSwxNzg5Oih0LGUsbik9Pnt2YXIgcj1uKDQ1MzYpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189cj9yKG51bGwpOnt9LHRoaXMuc2l6ZT0wfX0sNDAxOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9fSw3NjY3Oih0LGUsbik9Pnt2YXIgcj1uKDQ1MzYpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihyKXt2YXIgbj1lW3RdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PW4/dm9pZCAwOm59cmV0dXJuIGkuY2FsbChlLHQpP2VbdF06dm9pZCAwfX0sMTMyNzoodCxlLG4pPT57dmFyIHI9big0NTM2KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHI/dm9pZCAwIT09ZVt0XTppLmNhbGwoZSx0KX19LDE4NjY6KHQsZSxuKT0+e3ZhciByPW4oNDUzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsblt0XT1yJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9fSwzODI0OnQ9Pnt2YXIgZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKG4pO3JldHVybiBuJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJmUuY2FsbCh0LCJpbmRleCIpJiYoci5pbmRleD10LmluZGV4LHIuaW5wdXQ9dC5pbnB1dCkscn19LDkxNDg6KHQsZSxuKT0+e3ZhciByPW4oNDMxOCksaT1uKDcxNTcpLGE9bigzMTQ3KSxvPW4oNDE5KSxzPW4oNzEzMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz10LmNvbnN0cnVjdG9yO3N3aXRjaChlKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4gcih0KTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6cmV0dXJuIG5ldyBjKCt0KTtjYXNlIltvYmplY3QgRGF0YVZpZXddIjpyZXR1cm4gaSh0LG4pO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBzKHQsbik7Y2FzZSJbb2JqZWN0IE1hcF0iOmNhc2UiW29iamVjdCBTZXRdIjpyZXR1cm4gbmV3IGM7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbmV3IGModCk7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiBhKHQpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gbyh0KX19fSw4NTE3Oih0LGUsbik9Pnt2YXIgcj1uKDMxMTgpLGk9big1OTI0KSxhPW4oNTcyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmNvbnN0cnVjdG9yfHxhKHQpP3t9OnIoaSh0KSl9fSw3Mjg1Oih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9big1Njk0KSxhPW4oMTQ2OSksbz1yP3IuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCl8fGkodCl8fCEhKG8mJnQmJnRbb10pfX0sNTc3Njp0PT57dmFyIGU9L14oPzowfFsxLTldXGQqKSQvO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByPXR5cGVvZiB0O3JldHVybiEhKG49bnVsbD09bj85MDA3MTk5MjU0NzQwOTkxOm4pJiYoIm51bWJlciI9PXJ8fCJzeW1ib2wiIT1yJiZlLnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8bn19LDY2MTI6KHQsZSxuKT0+e3ZhciByPW4oNzgxMyksaT1uKDg2MTIpLGE9big1Nzc2KSxvPW4oMzIxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZighbyhuKSlyZXR1cm4hMTt2YXIgcz10eXBlb2YgZTtyZXR1cm4hISgibnVtYmVyIj09cz9pKG4pJiZhKGUsbi5sZW5ndGgpOiJzdHJpbmciPT1zJiZlIGluIG4pJiZyKG5bZV0sdCl9fSw1NDAzOih0LGUsbik9Pnt2YXIgcj1uKDE0NjkpLGk9bigzNDQ4KSxhPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLG89L15cdyokLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFpKHQpKXx8by50ZXN0KHQpfHwhYS50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX19LDcwMTk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fX0sNTM0NjoodCxlLG4pPT57dmFyIHIsaT1uKDQ0MjkpLGE9KHI9L1teLl0rJC8uZXhlYyhpJiZpLmtleXMmJmkua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK3I6IiI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhYSYmYSBpbiB0fX0sNTcyNjp0PT57dmFyIGU9T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49dCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PSgiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5wcm90b3R5cGV8fGUpfX0sOTE2MjoodCxlLG4pPT57dmFyIHI9bigzMjE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFyKHQpfX0sNzA0MDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH19LDIxODg6KHQsZSxuKT0+e3ZhciByPW4oODQ3MCksaT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49cihlLHQpO3JldHVybiEobjwwfHwobj09ZS5sZW5ndGgtMT9lLnBvcCgpOmkuY2FsbChlLG4sMSksLS10aGlzLnNpemUsMCkpfX0sMjExNzoodCxlLG4pPT57dmFyIHI9big4NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXIoZSx0KTtyZXR1cm4gbjwwP3ZvaWQgMDplW25dWzFdfX0sNzUxODoodCxlLG4pPT57dmFyIHI9big4NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5fX2RhdGFfXyx0KT4tMX19LDQ3MDU6KHQsZSxuKT0+e3ZhciByPW4oODQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXyxpPXIobix0KTtyZXR1cm4gaTwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW3QsZV0pKTpuW2ldWzFdPWUsdGhpc319LDQ3ODU6KHQsZSxuKT0+e3ZhciByPW4oMTk4OSksaT1uKDg0MDcpLGE9big3MDcxKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyByLG1hcDpuZXcoYXx8aSksc3RyaW5nOm5ldyByfX19LDEyODU6KHQsZSxuKT0+e3ZhciByPW4oNTA1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX19LDZlMzoodCxlLG4pPT57dmFyIHI9big1MDUwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0KS5nZXQodCl9fSw5OTE2Oih0LGUsbik9Pnt2YXIgcj1uKDUwNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQpLmhhcyh0KX19LDUyNjU6KHQsZSxuKT0+e3ZhciByPW4oNTA1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0aGlzLHQpLGk9bi5zaXplO3JldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZSs9bi5zaXplPT1pPzA6MSx0aGlzfX0sODc3Njp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe25bKytlXT1bcix0XX0pKSxufX0sMjYzNDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZuW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KG4pKX19fSw0NTIzOih0LGUsbik9Pnt2YXIgcj1uKDgzMDYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX19LDQ1MzY6KHQsZSxuKT0+e3ZhciByPW4oODUyKShPYmplY3QsImNyZWF0ZSIpO3QuZXhwb3J0cz1yfSw2OTE2Oih0LGUsbik9Pnt2YXIgcj1uKDU1NjkpKE9iamVjdC5rZXlzLE9iamVjdCk7dC5leHBvcnRzPXJ9LDM0OTg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtpZihudWxsIT10KWZvcih2YXIgbiBpbiBPYmplY3QodCkpZS5wdXNoKG4pO3JldHVybiBlfX0sMTE2NzoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1uKDE5NTcpLGk9ZSYmIWUubm9kZVR5cGUmJmUsYT1pJiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWkmJnIucHJvY2VzcyxzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhJiZhLnJlcXVpcmUmJmEucmVxdWlyZSgidXRpbCIpLnR5cGVzfHxvJiZvLmJpbmRpbmcmJm8uYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCk7dC5leHBvcnRzPXN9LDIzMzM6dD0+e3ZhciBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCl9fSw1NTY5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fX0sNTM1NzoodCxlLG4pPT57dmFyIHI9big2ODc0KSxpPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGU9aSh2b2lkIDA9PT1lP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMsbz0tMSxzPWkoYS5sZW5ndGgtZSwwKSxjPUFycmF5KHMpOysrbzxzOyljW29dPWFbZStvXTtvPS0xO2Zvcih2YXIgdT1BcnJheShlKzEpOysrbzxlOyl1W29dPWFbb107cmV0dXJuIHVbZV09bihjKSxyKHQsdGhpcyx1KX19fSw1NjM5Oih0LGUsbik9Pnt2YXIgcj1uKDE5NTcpLGk9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixhPXJ8fGl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7dC5leHBvcnRzPWF9LDYzOTA6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCgiY29uc3RydWN0b3IiIT09ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0pJiYiX19wcm90b19fIiE9ZSlyZXR1cm4gdFtlXX19LDYxOTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldCh0LCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIiksdGhpc319LDIzODU6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9fSwxODE0OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe25bKytlXT10fSkpLG59fSw2MToodCxlLG4pPT57dmFyIHI9big2NTYwKSxpPW4oMTI3NSkocik7dC5leHBvcnRzPWl9LDEyNzU6dD0+e3ZhciBlPURhdGUubm93O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj0wLHI9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lKCksYT0xNi0oaS1yKTtpZihyPWksYT4wKXtpZigrK24+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2Ugbj0wO3JldHVybiB0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX19LDc0NjU6KHQsZSxuKT0+e3ZhciByPW4oODQwNyk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1uZXcgcix0aGlzLnNpemU9MH19LDM3Nzk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUsbn19LDc1OTk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9fSw0NzU4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfX0sNDMwOToodCxlLG4pPT57dmFyIHI9big4NDA3KSxpPW4oNzA3MSksYT1uKDMzNjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIHIpe3ZhciBvPW4uX19kYXRhX187aWYoIWl8fG8ubGVuZ3RoPDE5OSlyZXR1cm4gby5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IGEobyl9cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfX0sMjM1MTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9bi0xLGk9dC5sZW5ndGg7KytyPGk7KWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfX0sODAxNjoodCxlLG4pPT57dmFyIHI9big4OTgzKSxpPW4oMjY4OSksYT1uKDE5MDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT9hKHQpOnIodCl9fSw1NTE0Oih0LGUsbik9Pnt2YXIgcj1uKDQ1MjMpLGk9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csYT0vXFwoXFwpPy9nLG89cigoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShpLChmdW5jdGlvbih0LG4scixpKXtlLnB1c2gocj9pLnJlcGxhY2UoYSwiJDEiKTpufHx0KX0pKSxlfSkpO3QuZXhwb3J0cz1vfSwzMjc6KHQsZSxuKT0+e3ZhciByPW4oMzQ0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8cih0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX19LDM0Njp0PT57dmFyIGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIGUuY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9fSw3OTkwOnQ9Pnt2YXIgZT0vXHMvO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIG49dC5sZW5ndGg7bi0tJiZlLnRlc3QodC5jaGFyQXQobikpOyk7cmV0dXJuIG59fSwxOTAzOnQ9Pnt2YXIgZT0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLG49IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIscj0iW15cXHVkODAwLVxcdWRmZmZdIixpPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixhPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixvPSIoPzoiK2UrInwiK24rIik/IixzPSJbXFx1ZmUwZVxcdWZlMGZdPyIsYz1zK28rIig/OlxcdTIwMGQoPzoiK1tyLGksYV0uam9pbigifCIpKyIpIitzK28rIikqIix1PSIoPzoiK1tyK2UrIj8iLGUsaSxhLCJbXFx1ZDgwMC1cXHVkZmZmXSJdLmpvaW4oInwiKSsiKSIsbD1SZWdFeHAobisiKD89IituKyIpfCIrdStjLCJnIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1sLmxhc3RJbmRleD0wO2wudGVzdCh0KTspKytlO3JldHVybiBlfX0sNjY3ODoodCxlLG4pPT57dmFyIHI9big1OTkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCw0KX19LDM2MToodCxlLG4pPT57dmFyIHI9big1OTkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCw1KX19LDU3MDM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19fSwxNzQ3Oih0LGUsbik9Pnt2YXIgcj1uKDU5NzYpLGk9big3ODEzKSxhPW4oNjYxMiksbz1uKDE3MDQpLHM9T2JqZWN0LnByb3RvdHlwZSxjPXMuaGFzT3duUHJvcGVydHksdT1yKChmdW5jdGlvbih0LGUpe3Q9T2JqZWN0KHQpO3ZhciBuPS0xLHI9ZS5sZW5ndGgsdT1yPjI/ZVsyXTp2b2lkIDA7Zm9yKHUmJmEoZVswXSxlWzFdLHUpJiYocj0xKTsrK248cjspZm9yKHZhciBsPWVbbl0saD1vKGwpLGY9LTEsZD1oLmxlbmd0aDsrK2Y8ZDspe3ZhciBwPWhbZl0seT10W3BdOyh2b2lkIDA9PT15fHxpKHksc1twXSkmJiFjLmNhbGwodCxwKSkmJih0W3BdPWxbcF0pfXJldHVybiB0fSkpO3QuZXhwb3J0cz11fSw2MDczOih0LGUsbik9Pnt0LmV4cG9ydHM9big0NDg2KX0sNzgxMzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT10JiZlIT1lfX0sMzEwNToodCxlLG4pPT57dmFyIHI9big0OTYzKSxpPW4oNzYwKSxhPW4oNzIwNiksbz1uKDE0NjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6aSkodCxhKGUsMykpfX0sMzMxMToodCxlLG4pPT57dmFyIHI9big3NzQwKShuKDk5OCkpO3QuZXhwb3J0cz1yfSw5OTg6KHQsZSxuKT0+e3ZhciByPW4oMTg0OCksaT1uKDcyMDYpLGE9big1NTQpLG89TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcz1udWxsPT10PzA6dC5sZW5ndGg7aWYoIXMpcmV0dXJuLTE7dmFyIGM9bnVsbD09bj8wOmEobik7cmV0dXJuIGM8MCYmKGM9byhzK2MsMCkpLHIodCxpKGUsMyksYyl9fSw1NTY0Oih0LGUsbik9Pnt2YXIgcj1uKDEwNzgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmdC5sZW5ndGg/cih0LDEpOltdfX0sNDQ4NjoodCxlLG4pPT57dmFyIHI9big3NDEyKSxpPW4oOTg4MSksYT1uKDQyOTApLG89bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmkpKHQsYShlKSl9fSwyNjIwOih0LGUsbik9Pnt2YXIgcj1uKDg0ODMpLGk9big0MjkwKSxhPW4oMTcwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/dDpyKHQsaShlKSxhKX19LDE5MTc6KHQsZSxuKT0+e3ZhciByPW4oNzc4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1udWxsPT10P3ZvaWQgMDpyKHQsZSk7cmV0dXJuIHZvaWQgMD09PWk/bjppfX0sODcyMToodCxlLG4pPT57dmFyIHI9big4NTY1KSxpPW4oMjIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmaSh0LGUscil9fSw5MDk1Oih0LGUsbik9Pnt2YXIgcj1uKDEzKSxpPW4oMjIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmaSh0LGUscil9fSw2NTU3OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSw1Njk0Oih0LGUsbik9Pnt2YXIgcj1uKDk0NTQpLGk9big3MDA1KSxhPU9iamVjdC5wcm90b3R5cGUsbz1hLmhhc093blByb3BlcnR5LHM9YS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxjPXIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9yOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZvLmNhbGwodCwiY2FsbGVlIikmJiFzLmNhbGwodCwiY2FsbGVlIil9O3QuZXhwb3J0cz1jfSwxNDY5OnQ9Pnt2YXIgZT1BcnJheS5pc0FycmF5O3QuZXhwb3J0cz1lfSw4NjEyOih0LGUsbik9Pnt2YXIgcj1uKDM1NjApLGk9bigxNzgwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJmkodC5sZW5ndGgpJiYhcih0KX19LDkyNDY6KHQsZSxuKT0+e3ZhciByPW4oODYxMiksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmcih0KX19LDQxNDQ6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9big1NjM5KSxpPW4oNTA2MiksYT1lJiYhZS5ub2RlVHlwZSYmZSxvPWEmJnQmJiF0Lm5vZGVUeXBlJiZ0LHM9byYmby5leHBvcnRzPT09YT9yLkJ1ZmZlcjp2b2lkIDAsYz0ocz9zLmlzQnVmZmVyOnZvaWQgMCl8fGk7dC5leHBvcnRzPWN9LDE2MDk6KHQsZSxuKT0+e3ZhciByPW4oMjgwKSxpPW4oNDE2MCksYT1uKDU2OTQpLG89bigxNDY5KSxzPW4oODYxMiksYz1uKDQxNDQpLHU9big1NzI2KSxsPW4oNjcxOSksaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiEwO2lmKHModCkmJihvKHQpfHwic3RyaW5nIj09dHlwZW9mIHR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNwbGljZXx8Yyh0KXx8bCh0KXx8YSh0KSkpcmV0dXJuIXQubGVuZ3RoO3ZhciBlPWkodCk7aWYoIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lKXJldHVybiF0LnNpemU7aWYodSh0KSlyZXR1cm4hcih0KS5sZW5ndGg7Zm9yKHZhciBuIGluIHQpaWYoaC5jYWxsKHQsbikpcmV0dXJuITE7cmV0dXJuITB9fSwzNTYwOih0LGUsbik9Pnt2YXIgcj1uKDQyMzkpLGk9bigzMjE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWkodCkpcmV0dXJuITE7dmFyIGU9cih0KTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IFByb3h5XSI9PWV9fSwxNzgwOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PTkwMDcxOTkyNTQ3NDA5OTF9fSw2Njg4Oih0LGUsbik9Pnt2YXIgcj1uKDU1ODgpLGk9bigxNzE3KSxhPW4oMTE2Nyksbz1hJiZhLmlzTWFwLHM9bz9pKG8pOnI7dC5leHBvcnRzPXN9LDMyMTg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX19LDcwMDU6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fX0sODYzMDoodCxlLG4pPT57dmFyIHI9big0MjM5KSxpPW4oNTkyNCksYT1uKDcwMDUpLG89RnVuY3Rpb24ucHJvdG90eXBlLHM9T2JqZWN0LnByb3RvdHlwZSxjPW8udG9TdHJpbmcsdT1zLmhhc093blByb3BlcnR5LGw9Yy5jYWxsKE9iamVjdCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHQpfHwiW29iamVjdCBPYmplY3RdIiE9cih0KSlyZXR1cm4hMTt2YXIgZT1pKHQpO2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciBuPXUuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiZlLmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmYy5jYWxsKG4pPT1sfX0sMjkyODoodCxlLG4pPT57dmFyIHI9big5MjIxKSxpPW4oMTcxNyksYT1uKDExNjcpLG89YSYmYS5pc1NldCxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSw3MDM3Oih0LGUsbik9Pnt2YXIgcj1uKDQyMzkpLGk9bigxNDY5KSxhPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8IWkodCkmJmEodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1yKHQpfX0sMzQ0ODoodCxlLG4pPT57dmFyIHI9big0MjM5KSxpPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8aSh0KSYmIltvYmplY3QgU3ltYm9sXSI9PXIodCl9fSw2NzE5Oih0LGUsbik9Pnt2YXIgcj1uKDg3NDkpLGk9bigxNzE3KSxhPW4oMTE2Nyksbz1hJiZhLmlzVHlwZWRBcnJheSxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSwyMzUzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSwzNjc0Oih0LGUsbik9Pnt2YXIgcj1uKDQ2MzYpLGk9bigyODApLGE9big4NjEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cih0KTppKHQpfX0sMTcwNDoodCxlLG4pPT57dmFyIHI9big0NjM2KSxpPW4oMzEzKSxhPW4oODYxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3IodCwhMCk6aSh0KX19LDkyODp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW51bGw9PXQ/MDp0Lmxlbmd0aDtyZXR1cm4gZT90W2UtMV06dm9pZCAwfX0sNTE2MToodCxlLG4pPT57dmFyIHI9big5OTMyKSxpPW4oNzIwNiksYT1uKDkxOTkpLG89bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmEpKHQsaShlLDMpKX19LDY2MDQ6KHQsZSxuKT0+e3ZhciByPW4oOTQ2NSksaT1uKDc4MTYpLGE9big3MjA2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gZT1hKGUsMyksaSh0LChmdW5jdGlvbih0LGksYSl7cihuLGksZSh0LGksYSkpfSkpLG59fSw2MTYyOih0LGUsbik9Pnt2YXIgcj1uKDYwMjkpLGk9bigzMzI1KSxhPW4oNjU1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsYSxpKTp2b2lkIDB9fSw4MzA2Oih0LGUsbik9Pnt2YXIgcj1uKDMzNjkpO2Z1bmN0aW9uIGkodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLGk9ZT9lLmFwcGx5KHRoaXMscik6clswXSxhPW4uY2FjaGU7aWYoYS5oYXMoaSkpcmV0dXJuIGEuZ2V0KGkpO3ZhciBvPXQuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1hLnNldChpLG8pfHxhLG99O3JldHVybiBuLmNhY2hlPW5ldyhpLkNhY2hlfHxyKSxufWkuQ2FjaGU9cix0LmV4cG9ydHM9aX0sMzg1NzoodCxlLG4pPT57dmFyIHI9bigyOTgwKSxpPW4oMTc1MCkoKGZ1bmN0aW9uKHQsZSxuKXtyKHQsZSxuKX0pKTt0LmV4cG9ydHM9aX0sMzYzMjoodCxlLG4pPT57dmFyIHI9big2MDI5KSxpPW4oNDMzKSxhPW4oNjU1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsYSxpKTp2b2lkIDB9fSwyNzYyOih0LGUsbik9Pnt2YXIgcj1uKDYwMjkpLGk9big3MjA2KSxhPW4oNDMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGkoZSwyKSxhKTp2b2lkIDB9fSwzMDg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbigpe319LDc3NzE6KHQsZSxuKT0+e3ZhciByPW4oNTYzOSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuRGF0ZS5ub3coKX19LDk3MjI6KHQsZSxuKT0+e3ZhciByPW4oNTk3MCksaT1uKDkwMjEpKChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3t9OnIodCxlKX0pKTt0LmV4cG9ydHM9aX0sOTYwMToodCxlLG4pPT57dmFyIHI9bigzNzEpLGk9big5MTUyKSxhPW4oNTQwMyksbz1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3Iobyh0KSk6aSh0KX19LDYwMjY6KHQsZSxuKT0+e3ZhciByPW4oNzQ0NSkoKTt0LmV4cG9ydHM9cn0sNDA2MToodCxlLG4pPT57dmFyIHI9bigyNjYzKSxpPW4oOTg4MSksYT1uKDcyMDYpLG89bigxMDcpLHM9bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXModCk/cjpvLHU9YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiBjKHQsYShlLDQpLG4sdSxpKX19LDQyMzg6KHQsZSxuKT0+e3ZhciByPW4oMjgwKSxpPW4oNDE2MCksYT1uKDg2MTIpLG89big3MDM3KSxzPW4oODAxNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYoYSh0KSlyZXR1cm4gbyh0KT9zKHQpOnQubGVuZ3RoO3ZhciBlPWkodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lP3Quc2l6ZTpyKHQpLmxlbmd0aH19LDk3MzQ6KHQsZSxuKT0+e3ZhciByPW4oMTA3OCksaT1uKDk1NTYpLGE9big1OTc2KSxvPW4oNjYxMikscz1hKChmdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJuW107dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MSYmbyh0LGVbMF0sZVsxXSk/ZT1bXTpuPjImJm8oZVswXSxlWzFdLGVbMl0pJiYoZT1bZVswXV0pLGkodCxyKGUsMSksW10pfSkpO3QuZXhwb3J0cz1zfSw0Nzk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybltdfX0sNTA2Mjp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSw4NjAxOih0LGUsbik9Pnt2YXIgcj1uKDQ4NDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9JbmZpbml0eT09PSh0PXIodCkpfHx0PT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKHQ8MD8tMToxKTp0PT10P3Q6MDowPT09dD90OjB9fSw1NTQ6KHQsZSxuKT0+e3ZhciByPW4oODYwMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1lJTE7cmV0dXJuIGU9PWU/bj9lLW46ZTowfX0sNDg0MToodCxlLG4pPT57dmFyIHI9big3NTYxKSxpPW4oMzIxOCksYT1uKDM0NDgpLG89L15bLStdMHhbMC05YS1mXSskL2kscz0vXjBiWzAxXSskL2ksYz0vXjBvWzAtN10rJC9pLHU9cGFyc2VJbnQ7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihhKHQpKXJldHVybiBOYU47aWYoaSh0KSl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQudmFsdWVPZj90LnZhbHVlT2YoKTp0O3Q9aShlKT9lKyIiOmV9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9cih0KTt2YXIgbj1zLnRlc3QodCk7cmV0dXJuIG58fGMudGVzdCh0KT91KHQuc2xpY2UoMiksbj8yOjgpOm8udGVzdCh0KT9OYU46K3R9fSwzNjc4Oih0LGUsbik9Pnt2YXIgcj1uKDgzNjMpLGk9bigxNzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxpKHQpKX19LDk4MzM6KHQsZSxuKT0+e3ZhciByPW4oNTMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/IiI6cih0KX19LDg3MTg6KHQsZSxuKT0+e3ZhciByPW4oNzQxMiksaT1uKDMxMTgpLGE9big3ODE2KSxvPW4oNzIwNikscz1uKDU5MjQpLGM9bigxNDY5KSx1PW4oNDE0NCksbD1uKDM1NjApLGg9bigzMjE4KSxmPW4oNjcxOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgZD1jKHQpLHA9ZHx8dSh0KXx8Zih0KTtpZihlPW8oZSw0KSxudWxsPT1uKXt2YXIgeT10JiZ0LmNvbnN0cnVjdG9yO249cD9kP25ldyB5OltdOmgodCkmJmwoeSk/aShzKHQpKTp7fX1yZXR1cm4ocD9yOmEpKHQsKGZ1bmN0aW9uKHQscixpKXtyZXR1cm4gZShuLHQscixpKX0pKSxufX0sMzM4NjoodCxlLG4pPT57dmFyIHI9bigxMDc4KSxpPW4oNTk3NiksYT1uKDU2NTIpLG89big5MjQ2KSxzPWkoKGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCwxLG8sITApKX0pKTt0LmV4cG9ydHM9c30sMzk1NToodCxlLG4pPT57dmFyIHI9big5ODMzKSxpPTA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSsraTtyZXR1cm4gcih0KStlfX0sMjYyODoodCxlLG4pPT57dmFyIHI9big3NDE1KSxpPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOnIodCxpKHQpKX19LDcyODc6KHQsZSxuKT0+e3ZhciByPW4oNDg2NSksaT1uKDE3NTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBpKHR8fFtdLGV8fFtdLHIpfX0sOTIzNDooKT0+e30sMTc0ODoodCxlLG4pPT57dmFyIHI9eyIuL2xvY2FsZSI6OTIzNCwiLi9sb2NhbGUuanMiOjkyMzR9O2Z1bmN0aW9uIGkodCl7dmFyIGU9YSh0KTtyZXR1cm4gbihlKX1mdW5jdGlvbiBhKHQpe2lmKCFuLm8ocix0KSl7dmFyIGU9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrdCsiJyIpO3Rocm93IGUuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZX1yZXR1cm4gclt0XX1pLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMocil9LGkucmVzb2x2ZT1hLHQuZXhwb3J0cz1pLGkuaWQ9MTc0OH0sMTk0MTpmdW5jdGlvbih0LGUsbil7KHQ9bi5ubWQodCkpLmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGUscjtmdW5jdGlvbiBpKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsIT10JiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBzKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIGModCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fHwiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbixyPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pci5wdXNoKGUodFtuXSxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciBuIGluIGUpaChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gaChlLCJ0b1N0cmluZyIpJiYodC50b1N0cmluZz1lLnRvU3RyaW5nKSxoKGUsInZhbHVlT2YiKSYmKHQudmFsdWVPZj1lLnZhbHVlT2YpLHR9ZnVuY3Rpb24gZCh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMCkudXRjKCl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbnVsbD09dC5fcGYmJih0Ll9wZj17ZW1wdHk6ITEsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksdC5fcGZ9ZnVuY3Rpb24geSh0KXtpZihudWxsPT10Ll9pc1ZhbGlkKXt2YXIgZT1wKHQpLG49ci5jYWxsKGUucGFyc2VkRGF0ZVBhcnRzLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKSxpPSFpc05hTih0Ll9kLmdldFRpbWUoKSkmJmUub3ZlcmZsb3c8MCYmIWUuZW1wdHkmJiFlLmludmFsaWRNb250aCYmIWUuaW52YWxpZFdlZWtkYXkmJiFlLndlZWtkYXlNaXNtYXRjaCYmIWUubnVsbElucHV0JiYhZS5pbnZhbGlkRm9ybWF0JiYhZS51c2VySW52YWxpZGF0ZWQmJighZS5tZXJpZGllbXx8ZS5tZXJpZGllbSYmbik7aWYodC5fc3RyaWN0JiYoaT1pJiYwPT09ZS5jaGFyc0xlZnRPdmVyJiYwPT09ZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT1lLmJpZ0hvdXIpLG51bGwhPU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKHQpKXJldHVybiBpO3QuX2lzVmFsaWQ9aX1yZXR1cm4gdC5faXNWYWxpZH1mdW5jdGlvbiBnKHQpe3ZhciBlPWQoTmFOKTtyZXR1cm4gbnVsbCE9dD9mKHAoZSksdCk6cChlKS51c2VySW52YWxpZGF0ZWQ9ITAsZX1yPUFycmF5LnByb3RvdHlwZS5zb21lP0FycmF5LnByb3RvdHlwZS5zb21lOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3QodGhpcyksbj1lLmxlbmd0aD4+PjAscj0wO3I8bjtyKyspaWYociBpbiBlJiZ0LmNhbGwodGhpcyxlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBtPWkubW9tZW50UHJvcGVydGllcz1bXTtmdW5jdGlvbiB2KHQsZSl7dmFyIG4scixpO2lmKHMoZS5faXNBTW9tZW50T2JqZWN0KXx8KHQuX2lzQU1vbWVudE9iamVjdD1lLl9pc0FNb21lbnRPYmplY3QpLHMoZS5faSl8fCh0Ll9pPWUuX2kpLHMoZS5fZil8fCh0Ll9mPWUuX2YpLHMoZS5fbCl8fCh0Ll9sPWUuX2wpLHMoZS5fc3RyaWN0KXx8KHQuX3N0cmljdD1lLl9zdHJpY3QpLHMoZS5fdHptKXx8KHQuX3R6bT1lLl90em0pLHMoZS5faXNVVEMpfHwodC5faXNVVEM9ZS5faXNVVEMpLHMoZS5fb2Zmc2V0KXx8KHQuX29mZnNldD1lLl9vZmZzZXQpLHMoZS5fcGYpfHwodC5fcGY9cChlKSkscyhlLl9sb2NhbGUpfHwodC5fbG9jYWxlPWUuX2xvY2FsZSksMDxtLmxlbmd0aClmb3Iobj0wO248bS5sZW5ndGg7bisrKXMoaT1lW3I9bVtuXV0pfHwodFtyXT1pKTtyZXR1cm4gdH12YXIgYj0hMTtmdW5jdGlvbiBfKHQpe3YodGhpcyx0KSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPXQuX2Q/dC5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT1iJiYoYj0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzKSxiPSExKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0IGluc3RhbmNlb2YgX3x8bnVsbCE9dCYmbnVsbCE9dC5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIHcodCl7cmV0dXJuIHQ8MD9NYXRoLmNlaWwodCl8fDA6TWF0aC5mbG9vcih0KX1mdW5jdGlvbiBrKHQpe3ZhciBlPSt0LG49MDtyZXR1cm4gMCE9PWUmJmlzRmluaXRlKGUpJiYobj13KGUpKSxufWZ1bmN0aW9uIFQodCxlLG4pe3ZhciByLGk9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGE9TWF0aC5hYnModC5sZW5ndGgtZS5sZW5ndGgpLG89MDtmb3Iocj0wO3I8aTtyKyspKG4mJnRbcl0hPT1lW3JdfHwhbiYmayh0W3JdKSE9PWsoZVtyXSkpJiZvKys7cmV0dXJuIG8rYX1mdW5jdGlvbiBFKHQpeyExPT09aS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MmJiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrdCl9ZnVuY3Rpb24gQyh0LGUpe3ZhciBuPSEwO3JldHVybiBmKChmdW5jdGlvbigpe2lmKG51bGwhPWkuZGVwcmVjYXRpb25IYW5kbGVyJiZpLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLHQpLG4pe2Zvcih2YXIgcixhPVtdLG89MDtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXtpZihyPSIiLCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzW29dKXtmb3IodmFyIHMgaW4gcis9IlxuWyIrbysiXSAiLGFyZ3VtZW50c1swXSlyKz1zKyI6ICIrYXJndW1lbnRzWzBdW3NdKyIsICI7cj1yLnNsaWNlKDAsLTIpfWVsc2Ugcj1hcmd1bWVudHNbb107YS5wdXNoKHIpfUUodCsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSkuam9pbigiIikrIlxuIisobmV3IEVycm9yKS5zdGFjayksbj0hMX1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxlKX12YXIgUyxBPXt9O2Z1bmN0aW9uIE0odCxlKXtudWxsIT1pLmRlcHJlY2F0aW9uSGFuZGxlciYmaS5kZXByZWNhdGlvbkhhbmRsZXIodCxlKSxBW3RdfHwoRShlKSxBW3RdPSEwKX1mdW5jdGlvbiBOKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gRCh0LGUpe3ZhciBuLHI9Zih7fSx0KTtmb3IobiBpbiBlKWgoZSxuKSYmKG8odFtuXSkmJm8oZVtuXSk/KHJbbl09e30sZihyW25dLHRbbl0pLGYocltuXSxlW25dKSk6bnVsbCE9ZVtuXT9yW25dPWVbbl06ZGVsZXRlIHJbbl0pO2ZvcihuIGluIHQpaCh0LG4pJiYhaChlLG4pJiZvKHRbbl0pJiYocltuXT1mKHt9LHJbbl0pKTtyZXR1cm4gcn1mdW5jdGlvbiBPKHQpe251bGwhPXQmJnRoaXMuc2V0KHQpfWkuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLGkuZGVwcmVjYXRpb25IYW5kbGVyPW51bGwsUz1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpmdW5jdGlvbih0KXt2YXIgZSxuPVtdO2ZvcihlIGluIHQpaCh0LGUpJiZuLnB1c2goZSk7cmV0dXJuIG59O3ZhciBCPXt9O2Z1bmN0aW9uIEwodCxlKXt2YXIgbj10LnRvTG93ZXJDYXNlKCk7QltuXT1CW24rInMiXT1CW2VdPXR9ZnVuY3Rpb24gSSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/Qlt0XXx8Qlt0LnRvTG93ZXJDYXNlKCldOnZvaWQgMH1mdW5jdGlvbiBSKHQpe3ZhciBlLG4scj17fTtmb3IobiBpbiB0KWgodCxuKSYmKGU9SShuKSkmJihyW2VdPXRbbl0pO3JldHVybiByfXZhciBGPXt9O2Z1bmN0aW9uIFAodCxlKXtGW3RdPWV9ZnVuY3Rpb24gaih0LGUsbil7dmFyIHI9IiIrTWF0aC5hYnModCksaT1lLXIubGVuZ3RoO3JldHVybigwPD10P24/IisiOiIiOiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxpKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrcn12YXIgWT0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xZWVlZWVl8WVlZWVl8WVlZWXxZWXxnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyx6PS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFU9e30scT17fTtmdW5jdGlvbiBIKHQsZSxuLHIpe3ZhciBpPXI7InN0cmluZyI9PXR5cGVvZiByJiYoaT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3JdKCl9KSx0JiYocVt0XT1pKSxlJiYocVtlWzBdXT1mdW5jdGlvbigpe3JldHVybiBqKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVbMV0sZVsyXSl9KSxuJiYocVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQpfSl9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT8oZT1XKGUsdC5sb2NhbGVEYXRhKCkpLFVbZV09VVtlXXx8ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9dC5tYXRjaChZKTtmb3IoZT0wLG49aS5sZW5ndGg7ZTxuO2UrKylxW2lbZV1dP2lbZV09cVtpW2VdXTppW2VdPShyPWlbZV0pLm1hdGNoKC9cW1tcc1xTXS8pP3IucmVwbGFjZSgvXlxbfFxdJC9nLCIiKTpyLnJlcGxhY2UoL1xcL2csIiIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixhPSIiO2ZvcihyPTA7cjxuO3IrKylhKz1OKGlbcl0pP2lbcl0uY2FsbChlLHQpOmlbcl07cmV0dXJuIGF9fShlKSxVW2VdKHQpKTp0LmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIFcodCxlKXt2YXIgbj01O2Z1bmN0aW9uIHIodCl7cmV0dXJuIGUubG9uZ0RhdGVGb3JtYXQodCl8fHR9Zm9yKHoubGFzdEluZGV4PTA7MDw9biYmei50ZXN0KHQpOyl0PXQucmVwbGFjZSh6LHIpLHoubGFzdEluZGV4PTAsbi09MTtyZXR1cm4gdH12YXIgVj0vXGQvLEc9L1xkXGQvLFg9L1xkezN9LyxaPS9cZHs0fS8sUT0vWystXT9cZHs2fS8sSz0vXGRcZD8vLEo9L1xkXGRcZFxkPy8sdHQ9L1xkXGRcZFxkXGRcZD8vLGV0PS9cZHsxLDN9LyxudD0vXGR7MSw0fS8scnQ9L1srLV0/XGR7MSw2fS8saXQ9L1xkKy8sYXQ9L1srLV0/XGQrLyxvdD0vWnxbKy1dXGRcZDo/XGRcZC9naSxzdD0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/L2dpLGN0PS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksdXQ9e307ZnVuY3Rpb24gbHQodCxlLG4pe3V0W3RdPU4oZSk/ZTpmdW5jdGlvbih0LHIpe3JldHVybiB0JiZuP246ZX19ZnVuY3Rpb24gaHQodCxlKXtyZXR1cm4gaCh1dCx0KT91dFt0XShlLl9zdHJpY3QsZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ0KHQucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csKGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGV8fG58fHJ8fGl9KSkpKX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfXZhciBkdD17fTtmdW5jdGlvbiBwdCh0LGUpe3ZhciBuLHI9ZTtmb3IoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLGMoZSkmJihyPWZ1bmN0aW9uKHQsbil7bltlXT1rKHQpfSksbj0wO248dC5sZW5ndGg7bisrKWR0W3Rbbl1dPXJ9ZnVuY3Rpb24geXQodCxlKXtwdCh0LChmdW5jdGlvbih0LG4scixpKXtyLl93PXIuX3d8fHt9LGUodCxyLl93LHIsaSl9KSl9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIG10KHQpPzM2NjozNjV9ZnVuY3Rpb24gbXQodCl7cmV0dXJuIHQlND09MCYmdCUxMDAhPTB8fHQlNDAwPT0wfUgoIlkiLDAsMCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnllYXIoKTtyZXR1cm4gdDw9OTk5OT8iIit0OiIrIit0fSkpLEgoMCxbIllZIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSksSCgwLFsiWVlZWSIsNF0sMCwieWVhciIpLEgoMCxbIllZWVlZIiw1XSwwLCJ5ZWFyIiksSCgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIiksTCgieWVhciIsInkiKSxQKCJ5ZWFyIiwxKSxsdCgiWSIsYXQpLGx0KCJZWSIsSyxHKSxsdCgiWVlZWSIsbnQsWiksbHQoIllZWVlZIixydCxRKSxsdCgiWVlZWVlZIixydCxRKSxwdChbIllZWVlZIiwiWVlZWVlZIl0sMCkscHQoIllZWVkiLChmdW5jdGlvbih0LGUpe2VbMF09Mj09PXQubGVuZ3RoP2kucGFyc2VUd29EaWdpdFllYXIodCk6ayh0KX0pKSxwdCgiWVkiLChmdW5jdGlvbih0LGUpe2VbMF09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxwdCgiWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT1wYXJzZUludCh0LDEwKX0pKSxpLnBhcnNlVHdvRGlnaXRZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBrKHQpKyg2ODxrKHQpPzE5MDA6MmUzKX07dmFyIHZ0LGJ0PV90KCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIF90KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uPyh3dCh0aGlzLHQsbiksaS51cGRhdGVPZmZzZXQodGhpcyxlKSx0aGlzKTp4dCh0aGlzLHQpfX1mdW5jdGlvbiB4dCh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT90Ll9kWyJnZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0oKTpOYU59ZnVuY3Rpb24gd3QodCxlLG4pe3QuaXNWYWxpZCgpJiYhaXNOYU4obikmJigiRnVsbFllYXIiPT09ZSYmbXQodC55ZWFyKCkpJiYxPT09dC5tb250aCgpJiYyOT09PXQuZGF0ZSgpP3QuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuLHQubW9udGgoKSxrdChuLHQubW9udGgoKSkpOnQuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuKSl9ZnVuY3Rpb24ga3QodCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpcmV0dXJuIE5hTjt2YXIgbj0oZSUxMisxMiklMTI7cmV0dXJuIHQrPShlLW4pLzEyLDE9PT1uP210KHQpPzI5OjI4OjMxLW4lNyUyfXZ0PUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDsrK2UpaWYodGhpc1tlXT09PXQpcmV0dXJuIGU7cmV0dXJuLTF9LEgoIk0iLFsiTU0iLDJdLCJNbyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSkpLEgoIk1NTSIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyx0KX0pKSxIKCJNTU1NIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyx0KX0pKSxMKCJtb250aCIsIk0iKSxQKCJtb250aCIsOCksbHQoIk0iLEspLGx0KCJNTSIsSyxHKSxsdCgiTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJNTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNSZWdleCh0KX0pKSxwdChbIk0iLCJNTSJdLChmdW5jdGlvbih0LGUpe2VbMV09ayh0KS0xfSkpLHB0KFsiTU1NIiwiTU1NTSJdLChmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLl9sb2NhbGUubW9udGhzUGFyc2UodCxyLG4uX3N0cmljdCk7bnVsbCE9aT9lWzFdPWk6cChuKS5pbnZhbGlkTW9udGg9dH0pKTt2YXIgVHQ9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/LyxFdD0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxDdD0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIik7ZnVuY3Rpb24gU3QodCxlKXt2YXIgbjtpZighdC5pc1ZhbGlkKCkpcmV0dXJuIHQ7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlmKC9eXGQrJC8udGVzdChlKSllPWsoZSk7ZWxzZSBpZighYyhlPXQubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGUpKSlyZXR1cm4gdDtyZXR1cm4gbj1NYXRoLm1pbih0LmRhdGUoKSxrdCh0LnllYXIoKSxlKSksdC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpKyJNb250aCJdKGUsbiksdH1mdW5jdGlvbiBBdCh0KXtyZXR1cm4gbnVsbCE9dD8oU3QodGhpcyx0KSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTp4dCh0aGlzLCJNb250aCIpfXZhciBNdD1jdCxOdD1jdDtmdW5jdGlvbiBEdCgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gZS5sZW5ndGgtdC5sZW5ndGh9dmFyIGUsbixyPVtdLGk9W10sYT1bXTtmb3IoZT0wO2U8MTI7ZSsrKW49ZChbMmUzLGVdKSxyLnB1c2godGhpcy5tb250aHNTaG9ydChuLCIiKSksaS5wdXNoKHRoaXMubW9udGhzKG4sIiIpKSxhLnB1c2godGhpcy5tb250aHMobiwiIikpLGEucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sIiIpKTtmb3Ioci5zb3J0KHQpLGkuc29ydCh0KSxhLnNvcnQodCksZT0wO2U8MTI7ZSsrKXJbZV09ZnQocltlXSksaVtlXT1mdChpW2VdKTtmb3IoZT0wO2U8MjQ7ZSsrKWFbZV09ZnQoYVtlXSk7dGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Euam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2kuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Iuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIE90KHQpe3ZhciBlO2lmKHQ8MTAwJiYwPD10KXt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO25bMF09dCs0MDAsZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLG4pKSxpc0Zpbml0ZShlLmdldFVUQ0Z1bGxZZWFyKCkpJiZlLnNldFVUQ0Z1bGxZZWFyKHQpfWVsc2UgZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiBlfWZ1bmN0aW9uIEJ0KHQsZSxuKXt2YXIgcj03K2UtbjtyZXR1cm4tKDcrT3QodCwwLHIpLmdldFVUQ0RheSgpLWUpJTcrci0xfWZ1bmN0aW9uIEx0KHQsZSxuLHIsaSl7dmFyIGEsbyxzPTErNyooZS0xKSsoNytuLXIpJTcrQnQodCxyLGkpO3JldHVybiBvPXM8PTA/Z3QoYT10LTEpK3M6cz5ndCh0KT8oYT10KzEscy1ndCh0KSk6KGE9dCxzKSx7eWVhcjphLGRheU9mWWVhcjpvfX1mdW5jdGlvbiBJdCh0LGUsbil7dmFyIHIsaSxhPUJ0KHQueWVhcigpLGUsbiksbz1NYXRoLmZsb29yKCh0LmRheU9mWWVhcigpLWEtMSkvNykrMTtyZXR1cm4gbzwxP3I9bytSdChpPXQueWVhcigpLTEsZSxuKTpvPlJ0KHQueWVhcigpLGUsbik/KHI9by1SdCh0LnllYXIoKSxlLG4pLGk9dC55ZWFyKCkrMSk6KGk9dC55ZWFyKCkscj1vKSx7d2VlazpyLHllYXI6aX19ZnVuY3Rpb24gUnQodCxlLG4pe3ZhciByPUJ0KHQsZSxuKSxpPUJ0KHQrMSxlLG4pO3JldHVybihndCh0KS1yK2kpLzd9ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gdC5zbGljZShlLDcpLmNvbmNhdCh0LnNsaWNlKDAsZSkpfUgoInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxIKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksTCgid2VlayIsInciKSxMKCJpc29XZWVrIiwiVyIpLFAoIndlZWsiLDUpLFAoImlzb1dlZWsiLDUpLGx0KCJ3IixLKSxsdCgid3ciLEssRyksbHQoIlciLEspLGx0KCJXVyIsSyxHKSx5dChbInciLCJ3dyIsIlciLCJXVyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMSldPWsodCl9KSksSCgiZCIsMCwiZG8iLCJkYXkiKSxIKCJkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyx0KX0pKSxIKCJkZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyx0KX0pKSxIKCJkZGRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLHQpfSkpLEgoImUiLDAsMCwid2Vla2RheSIpLEgoIkUiLDAsMCwiaXNvV2Vla2RheSIpLEwoImRheSIsImQiKSxMKCJ3ZWVrZGF5IiwiZSIpLEwoImlzb1dlZWtkYXkiLCJFIiksUCgiZGF5IiwxMSksUCgid2Vla2RheSIsMTEpLFAoImlzb1dlZWtkYXkiLDExKSxsdCgiZCIsSyksbHQoImUiLEspLGx0KCJFIixLKSxsdCgiZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzTWluUmVnZXgodCl9KSksbHQoImRkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJkZGRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1JlZ2V4KHQpfSkpLHl0KFsiZGQiLCJkZGQiLCJkZGRkIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uX2xvY2FsZS53ZWVrZGF5c1BhcnNlKHQscixuLl9zdHJpY3QpO251bGwhPWk/ZS5kPWk6cChuKS5pbnZhbGlkV2Vla2RheT10fSkpLHl0KFsiZCIsImUiLCJFIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09ayh0KX0pKTt2YXIgUHQ9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLGp0PSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksWXQ9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHp0PWN0LFV0PWN0LHF0PWN0O2Z1bmN0aW9uIEh0KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxuLHIsaSxhLG89W10scz1bXSxjPVtdLHU9W107Zm9yKGU9MDtlPDc7ZSsrKW49ZChbMmUzLDFdKS5kYXkoZSkscj10aGlzLndlZWtkYXlzTWluKG4sIiIpLGk9dGhpcy53ZWVrZGF5c1Nob3J0KG4sIiIpLGE9dGhpcy53ZWVrZGF5cyhuLCIiKSxvLnB1c2gocikscy5wdXNoKGkpLGMucHVzaChhKSx1LnB1c2gociksdS5wdXNoKGkpLHUucHVzaChhKTtmb3Ioby5zb3J0KHQpLHMuc29ydCh0KSxjLnNvcnQodCksdS5zb3J0KHQpLGU9MDtlPDc7ZSsrKXNbZV09ZnQoc1tlXSksY1tlXT1mdChjW2VdKSx1W2VdPWZ0KHVbZV0pO3RoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitjLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Muam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK28uam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uICR0KCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gV3QodCxlKXtIKHQsMCwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksZSl9KSl9ZnVuY3Rpb24gVnQodCxlKXtyZXR1cm4gZS5fbWVyaWRpZW1QYXJzZX1IKCJIIixbIkhIIiwyXSwwLCJob3VyIiksSCgiaCIsWyJoaCIsMl0sMCwkdCksSCgiayIsWyJrayIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pKSxIKCJobW0iLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIiskdC5hcHBseSh0aGlzKStqKHRoaXMubWludXRlcygpLDIpfSkpLEgoImhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrJHQuYXBwbHkodGhpcykraih0aGlzLm1pbnV0ZXMoKSwyKStqKHRoaXMuc2Vjb25kcygpLDIpfSkpLEgoIkhtbSIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStqKHRoaXMubWludXRlcygpLDIpfSkpLEgoIkhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK2oodGhpcy5taW51dGVzKCksMikraih0aGlzLnNlY29uZHMoKSwyKX0pKSxXdCgiYSIsITApLFd0KCJBIiwhMSksTCgiaG91ciIsImgiKSxQKCJob3VyIiwxMyksbHQoImEiLFZ0KSxsdCgiQSIsVnQpLGx0KCJIIixLKSxsdCgiaCIsSyksbHQoImsiLEspLGx0KCJISCIsSyxHKSxsdCgiaGgiLEssRyksbHQoImtrIixLLEcpLGx0KCJobW0iLEopLGx0KCJobW1zcyIsdHQpLGx0KCJIbW0iLEopLGx0KCJIbW1zcyIsdHQpLHB0KFsiSCIsIkhIIl0sMykscHQoWyJrIiwia2siXSwoZnVuY3Rpb24odCxlLG4pe3ZhciByPWsodCk7ZVszXT0yND09PXI/MDpyfSkpLHB0KFsiYSIsIkEiXSwoZnVuY3Rpb24odCxlLG4pe24uX2lzUG09bi5fbG9jYWxlLmlzUE0odCksbi5fbWVyaWRpZW09dH0pKSxwdChbImgiLCJoaCJdLChmdW5jdGlvbih0LGUsbil7ZVszXT1rKHQpLHAobikuYmlnSG91cj0hMH0pKSxwdCgiaG1tIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTI7ZVszXT1rKHQuc3Vic3RyKDAscikpLGVbNF09ayh0LnN1YnN0cihyKSkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJobW1zcyIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC00LGk9dC5sZW5ndGgtMjtlWzNdPWsodC5zdWJzdHIoMCxyKSksZVs0XT1rKHQuc3Vic3RyKHIsMikpLGVbNV09ayh0LnN1YnN0cihpKSkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJIbW0iLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtMjtlWzNdPWsodC5zdWJzdHIoMCxyKSksZVs0XT1rKHQuc3Vic3RyKHIpKX0pKSxwdCgiSG1tc3MiLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtNCxpPXQubGVuZ3RoLTI7ZVszXT1rKHQuc3Vic3RyKDAscikpLGVbNF09ayh0LnN1YnN0cihyLDIpKSxlWzVdPWsodC5zdWJzdHIoaSkpfSkpO3ZhciBHdCxYdD1fdCgiSG91cnMiLCEwKSxadD17Y2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxsb25nRGF0ZUZvcm1hdDp7TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGludmFsaWREYXRlOiJJbnZhbGlkIGRhdGUiLG9yZGluYWw6IiVkIixkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sbW9udGhzOkV0LG1vbnRoc1Nob3J0OkN0LHdlZWs6e2RvdzowLGRveTo2fSx3ZWVrZGF5czpQdCx3ZWVrZGF5c01pbjpZdCx3ZWVrZGF5c1Nob3J0Omp0LG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxRdD17fSxLdD17fTtmdW5jdGlvbiBKdCh0KXtyZXR1cm4gdD90LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKTp0fWZ1bmN0aW9uIHRlKGUpe3ZhciByPW51bGw7aWYoIVF0W2VdJiZ0JiZ0LmV4cG9ydHMpdHJ5e3I9R3QuX2FiYnIsbigxNzQ4KSgiLi8iK2UpLGVlKHIpfWNhdGNoKGUpe31yZXR1cm4gUXRbZV19ZnVuY3Rpb24gZWUodCxlKXt2YXIgbjtyZXR1cm4gdCYmKChuPXMoZSk/cmUodCk6bmUodCxlKSk/R3Q9bjoidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIit0KyIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxHdC5fYWJicn1mdW5jdGlvbiBuZSh0LGUpe2lmKG51bGw9PT1lKXJldHVybiBkZWxldGUgUXRbdF0sbnVsbDt2YXIgbixyPVp0O2lmKGUuYWJicj10LG51bGwhPVF0W3RdKU0oImRlZmluZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIikscj1RdFt0XS5fY29uZmlnO2Vsc2UgaWYobnVsbCE9ZS5wYXJlbnRMb2NhbGUpaWYobnVsbCE9UXRbZS5wYXJlbnRMb2NhbGVdKXI9UXRbZS5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtpZihudWxsPT0obj10ZShlLnBhcmVudExvY2FsZSkpKXJldHVybiBLdFtlLnBhcmVudExvY2FsZV18fChLdFtlLnBhcmVudExvY2FsZV09W10pLEt0W2UucGFyZW50TG9jYWxlXS5wdXNoKHtuYW1lOnQsY29uZmlnOmV9KSxudWxsO3I9bi5fY29uZmlnfXJldHVybiBRdFt0XT1uZXcgTyhEKHIsZSkpLEt0W3RdJiZLdFt0XS5mb3JFYWNoKChmdW5jdGlvbih0KXtuZSh0Lm5hbWUsdC5jb25maWcpfSkpLGVlKHQpLFF0W3RdfWZ1bmN0aW9uIHJlKHQpe3ZhciBlO2lmKHQmJnQuX2xvY2FsZSYmdC5fbG9jYWxlLl9hYmJyJiYodD10Ll9sb2NhbGUuX2FiYnIpLCF0KXJldHVybiBHdDtpZighYSh0KSl7aWYoZT10ZSh0KSlyZXR1cm4gZTt0PVt0XX1yZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpLGE9MDthPHQubGVuZ3RoOyl7Zm9yKGU9KGk9SnQodFthXSkuc3BsaXQoIi0iKSkubGVuZ3RoLG49KG49SnQodFthKzFdKSk/bi5zcGxpdCgiLSIpOm51bGw7MDxlOyl7aWYocj10ZShpLnNsaWNlKDAsZSkuam9pbigiLSIpKSlyZXR1cm4gcjtpZihuJiZuLmxlbmd0aD49ZSYmVChpLG4sITApPj1lLTEpYnJlYWs7ZS0tfWErK31yZXR1cm4gR3R9KHQpfWZ1bmN0aW9uIGllKHQpe3ZhciBlLG49dC5fYTtyZXR1cm4gbiYmLTI9PT1wKHQpLm92ZXJmbG93JiYoZT1uWzFdPDB8fDExPG5bMV0/MTpuWzJdPDF8fG5bMl0+a3QoblswXSxuWzFdKT8yOm5bM108MHx8MjQ8blszXXx8MjQ9PT1uWzNdJiYoMCE9PW5bNF18fDAhPT1uWzVdfHwwIT09bls2XSk/MzpuWzRdPDB8fDU5PG5bNF0/NDpuWzVdPDB8fDU5PG5bNV0/NTpuWzZdPDB8fDk5OTxuWzZdPzY6LTEscCh0KS5fb3ZlcmZsb3dEYXlPZlllYXImJihlPDB8fDI8ZSkmJihlPTIpLHAodCkuX292ZXJmbG93V2Vla3MmJi0xPT09ZSYmKGU9NykscCh0KS5fb3ZlcmZsb3dXZWVrZGF5JiYtMT09PWUmJihlPTgpLHAodCkub3ZlcmZsb3c9ZSksdH1mdW5jdGlvbiBhZSh0LGUsbil7cmV0dXJuIG51bGwhPXQ/dDpudWxsIT1lP2U6bn1mdW5jdGlvbiBvZSh0KXt2YXIgZSxuLHIsYSxvLHM9W107aWYoIXQuX2Qpe3ZhciBjLHU7Zm9yKGM9dCx1PW5ldyBEYXRlKGkubm93KCkpLHI9Yy5fdXNlVVRDP1t1LmdldFVUQ0Z1bGxZZWFyKCksdS5nZXRVVENNb250aCgpLHUuZ2V0VVRDRGF0ZSgpXTpbdS5nZXRGdWxsWWVhcigpLHUuZ2V0TW9udGgoKSx1LmdldERhdGUoKV0sdC5fdyYmbnVsbD09dC5fYVsyXSYmbnVsbD09dC5fYVsxXSYmZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYSxvLHMsYztpZihudWxsIT0oZT10Ll93KS5HR3x8bnVsbCE9ZS5XfHxudWxsIT1lLkUpYT0xLG89NCxuPWFlKGUuR0csdC5fYVswXSxJdChfZSgpLDEsNCkueWVhcikscj1hZShlLlcsMSksKChpPWFlKGUuRSwxKSk8MXx8NzxpKSYmKGM9ITApO2Vsc2V7YT10Ll9sb2NhbGUuX3dlZWsuZG93LG89dC5fbG9jYWxlLl93ZWVrLmRveTt2YXIgdT1JdChfZSgpLGEsbyk7bj1hZShlLmdnLHQuX2FbMF0sdS55ZWFyKSxyPWFlKGUudyx1LndlZWspLG51bGwhPWUuZD8oKGk9ZS5kKTwwfHw2PGkpJiYoYz0hMCk6bnVsbCE9ZS5lPyhpPWUuZSthLChlLmU8MHx8NjxlLmUpJiYoYz0hMCkpOmk9YX1yPDF8fHI+UnQobixhLG8pP3AodCkuX292ZXJmbG93V2Vla3M9ITA6bnVsbCE9Yz9wKHQpLl9vdmVyZmxvd1dlZWtkYXk9ITA6KHM9THQobixyLGksYSxvKSx0Ll9hWzBdPXMueWVhcix0Ll9kYXlPZlllYXI9cy5kYXlPZlllYXIpfSh0KSxudWxsIT10Ll9kYXlPZlllYXImJihvPWFlKHQuX2FbMF0sclswXSksKHQuX2RheU9mWWVhcj5ndChvKXx8MD09PXQuX2RheU9mWWVhcikmJihwKHQpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCksbj1PdChvLDAsdC5fZGF5T2ZZZWFyKSx0Ll9hWzFdPW4uZ2V0VVRDTW9udGgoKSx0Ll9hWzJdPW4uZ2V0VVRDRGF0ZSgpKSxlPTA7ZTwzJiZudWxsPT10Ll9hW2VdOysrZSl0Ll9hW2VdPXNbZV09cltlXTtmb3IoO2U8NztlKyspdC5fYVtlXT1zW2VdPW51bGw9PXQuX2FbZV0/Mj09PWU/MTowOnQuX2FbZV07MjQ9PT10Ll9hWzNdJiYwPT09dC5fYVs0XSYmMD09PXQuX2FbNV0mJjA9PT10Ll9hWzZdJiYodC5fbmV4dERheT0hMCx0Ll9hWzNdPTApLHQuX2Q9KHQuX3VzZVVUQz9PdDpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcztyZXR1cm4gdDwxMDAmJjA8PXQ/KHM9bmV3IERhdGUodCs0MDAsZSxuLHIsaSxhLG8pLGlzRmluaXRlKHMuZ2V0RnVsbFllYXIoKSkmJnMuc2V0RnVsbFllYXIodCkpOnM9bmV3IERhdGUodCxlLG4scixpLGEsbyksc30pLmFwcGx5KG51bGwscyksYT10Ll91c2VVVEM/dC5fZC5nZXRVVENEYXkoKTp0Ll9kLmdldERheSgpLG51bGwhPXQuX3R6bSYmdC5fZC5zZXRVVENNaW51dGVzKHQuX2QuZ2V0VVRDTWludXRlcygpLXQuX3R6bSksdC5fbmV4dERheSYmKHQuX2FbM109MjQpLHQuX3cmJnZvaWQgMCE9PXQuX3cuZCYmdC5fdy5kIT09YSYmKHAodCkud2Vla2RheU1pc21hdGNoPSEwKX19dmFyIHNlPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSktKD86XGRcZC1cZFxkfFdcZFxkLVxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86OlxkXGQoPzo6XGRcZCg/OlsuLF1cZCspPyk/KT8pKFtcK1wtXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLGNlPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyx1ZT0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/LyxsZT1bWyJZWVlZWVktTU0tREQiLC9bKy1dXGR7Nn0tXGRcZC1cZFxkL10sWyJZWVlZLU1NLUREIiwvXGR7NH0tXGRcZC1cZFxkL10sWyJHR0dHLVtXXVdXLUUiLC9cZHs0fS1XXGRcZC1cZC9dLFsiR0dHRy1bV11XVyIsL1xkezR9LVdcZFxkLywhMV0sWyJZWVlZLURERCIsL1xkezR9LVxkezN9L10sWyJZWVlZLU1NIiwvXGR7NH0tXGRcZC8sITFdLFsiWVlZWVlZTU1ERCIsL1srLV1cZHsxMH0vXSxbIllZWVlNTUREIiwvXGR7OH0vXSxbIkdHR0dbV11XV0UiLC9cZHs0fVdcZHszfS9dLFsiR0dHR1tXXVdXIiwvXGR7NH1XXGR7Mn0vLCExXSxbIllZWVlEREQiLC9cZHs3fS9dXSxoZT1bWyJISDptbTpzcy5TU1NTIiwvXGRcZDpcZFxkOlxkXGRcLlxkKy9dLFsiSEg6bW06c3MsU1NTUyIsL1xkXGQ6XGRcZDpcZFxkLFxkKy9dLFsiSEg6bW06c3MiLC9cZFxkOlxkXGQ6XGRcZC9dLFsiSEg6bW0iLC9cZFxkOlxkXGQvXSxbIkhIbW1zcy5TU1NTIiwvXGRcZFxkXGRcZFxkXC5cZCsvXSxbIkhIbW1zcyxTU1NTIiwvXGRcZFxkXGRcZFxkLFxkKy9dLFsiSEhtbXNzIiwvXGRcZFxkXGRcZFxkL10sWyJISG1tIiwvXGRcZFxkXGQvXSxbIkhIIiwvXGRcZC9dXSxmZT0vXlwvP0RhdGVcKChcLT9cZCspL2k7ZnVuY3Rpb24gZGUodCl7dmFyIGUsbixyLGksYSxvLHM9dC5faSxjPXNlLmV4ZWMocyl8fGNlLmV4ZWMocyk7aWYoYyl7Zm9yKHAodCkuaXNvPSEwLGU9MCxuPWxlLmxlbmd0aDtlPG47ZSsrKWlmKGxlW2VdWzFdLmV4ZWMoY1sxXSkpe2k9bGVbZV1bMF0scj0hMSE9PWxlW2VdWzJdO2JyZWFrfWlmKG51bGw9PWkpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoY1szXSl7Zm9yKGU9MCxuPWhlLmxlbmd0aDtlPG47ZSsrKWlmKGhlW2VdWzFdLmV4ZWMoY1szXSkpe2E9KGNbMl18fCIgIikraGVbZV1bMF07YnJlYWt9aWYobnVsbD09YSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKX1pZighciYmbnVsbCE9YSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtpZihjWzRdKXtpZighdWUuZXhlYyhjWzRdKSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtvPSJaIn10Ll9mPWkrKGF8fCIiKSsob3x8IiIpLG1lKHQpfWVsc2UgdC5faXNWYWxpZD0hMX12YXIgcGU9L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XHMpPyhcZHsxLDJ9KVxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIsNH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cZHs0fSkpJC87dmFyIHllPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBnZSh0KXt2YXIgZSxuLHIsaT1wZS5leGVjKHQuX2kucmVwbGFjZSgvXChbXildKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIikpO2lmKGkpe3ZhciBhPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbz1bZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VJbnQodCwxMCk7cmV0dXJuIGU8PTQ5PzJlMytlOmU8PTk5OT8xOTAwK2U6ZX0odCksQ3QuaW5kZXhPZihlKSxwYXJzZUludChuLDEwKSxwYXJzZUludChyLDEwKSxwYXJzZUludChpLDEwKV07cmV0dXJuIGEmJm8ucHVzaChwYXJzZUludChhLDEwKSksb30oaVs0XSxpWzNdLGlbMl0saVs1XSxpWzZdLGlbN10pO2lmKG49YSxyPXQsKGU9aVsxXSkmJmp0LmluZGV4T2YoZSkhPT1uZXcgRGF0ZShuWzBdLG5bMV0sblsyXSkuZ2V0RGF5KCkmJihwKHIpLndlZWtkYXlNaXNtYXRjaD0hMCwhKHIuX2lzVmFsaWQ9ITEpKSlyZXR1cm47dC5fYT1hLHQuX3R6bT1mdW5jdGlvbih0LGUsbil7aWYodClyZXR1cm4geWVbdF07aWYoZSlyZXR1cm4gMDt2YXIgcj1wYXJzZUludChuLDEwKSxpPXIlMTAwO3JldHVybihyLWkpLzEwMCo2MCtpfShpWzhdLGlbOV0saVsxMF0pLHQuX2Q9T3QuYXBwbHkobnVsbCx0Ll9hKSx0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSxwKHQpLnJmYzI4MjI9ITB9ZWxzZSB0Ll9pc1ZhbGlkPSExfWZ1bmN0aW9uIG1lKHQpe2lmKHQuX2YhPT1pLklTT184NjAxKWlmKHQuX2YhPT1pLlJGQ18yODIyKXt0Ll9hPVtdLHAodCkuZW1wdHk9ITA7dmFyIGUsbixyLGEsbyxzLGMsdSxsPSIiK3QuX2ksZj1sLmxlbmd0aCxkPTA7Zm9yKHI9Vyh0Ll9mLHQuX2xvY2FsZSkubWF0Y2goWSl8fFtdLGU9MDtlPHIubGVuZ3RoO2UrKylhPXJbZV0sKG49KGwubWF0Y2goaHQoYSx0KSl8fFtdKVswXSkmJigwPChvPWwuc3Vic3RyKDAsbC5pbmRleE9mKG4pKSkubGVuZ3RoJiZwKHQpLnVudXNlZElucHV0LnB1c2gobyksbD1sLnNsaWNlKGwuaW5kZXhPZihuKStuLmxlbmd0aCksZCs9bi5sZW5ndGgpLHFbYV0/KG4/cCh0KS5lbXB0eT0hMTpwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpLHM9YSx1PXQsbnVsbCE9KGM9bikmJmgoZHQscykmJmR0W3NdKGMsdS5fYSx1LHMpKTp0Ll9zdHJpY3QmJiFuJiZwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpO3AodCkuY2hhcnNMZWZ0T3Zlcj1mLWQsMDxsLmxlbmd0aCYmcCh0KS51bnVzZWRJbnB1dC5wdXNoKGwpLHQuX2FbM108PTEyJiYhMD09PXAodCkuYmlnSG91ciYmMDx0Ll9hWzNdJiYocCh0KS5iaWdIb3VyPXZvaWQgMCkscCh0KS5wYXJzZWREYXRlUGFydHM9dC5fYS5zbGljZSgwKSxwKHQpLm1lcmlkaWVtPXQuX21lcmlkaWVtLHQuX2FbM109ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiBudWxsPT1uP2U6bnVsbCE9dC5tZXJpZGllbUhvdXI/dC5tZXJpZGllbUhvdXIoZSxuKToobnVsbCE9dC5pc1BNJiYoKHI9dC5pc1BNKG4pKSYmZTwxMiYmKGUrPTEyKSxyfHwxMiE9PWV8fChlPTApKSxlKX0odC5fbG9jYWxlLHQuX2FbM10sdC5fbWVyaWRpZW0pLG9lKHQpLGllKHQpfWVsc2UgZ2UodCk7ZWxzZSBkZSh0KX1mdW5jdGlvbiB2ZSh0KXt2YXIgZSxuLHIsaCxkPXQuX2ksbT10Ll9mO3JldHVybiB0Ll9sb2NhbGU9dC5fbG9jYWxlfHxyZSh0Ll9sKSxudWxsPT09ZHx8dm9pZCAwPT09bSYmIiI9PT1kP2coe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mIGQmJih0Ll9pPWQ9dC5fbG9jYWxlLnByZXBhcnNlKGQpKSx4KGQpP25ldyBfKGllKGQpKToodShkKT90Ll9kPWQ6YShtKT9mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhO2lmKDA9PT10Ll9mLmxlbmd0aClyZXR1cm4gcCh0KS5pbnZhbGlkRm9ybWF0PSEwLHQuX2Q9bmV3IERhdGUoTmFOKTtmb3IoaT0wO2k8dC5fZi5sZW5ndGg7aSsrKWE9MCxlPXYoe30sdCksbnVsbCE9dC5fdXNlVVRDJiYoZS5fdXNlVVRDPXQuX3VzZVVUQyksZS5fZj10Ll9mW2ldLG1lKGUpLHkoZSkmJihhKz1wKGUpLmNoYXJzTGVmdE92ZXIsYSs9MTAqcChlKS51bnVzZWRUb2tlbnMubGVuZ3RoLHAoZSkuc2NvcmU9YSwobnVsbD09cnx8YTxyKSYmKHI9YSxuPWUpKTtmKHQsbnx8ZSl9KHQpOm0/bWUodCk6cyhuPShlPXQpLl9pKT9lLl9kPW5ldyBEYXRlKGkubm93KCkpOnUobik/ZS5fZD1uZXcgRGF0ZShuLnZhbHVlT2YoKSk6InN0cmluZyI9PXR5cGVvZiBuPyhyPWUsbnVsbD09PShoPWZlLmV4ZWMoci5faSkpPyhkZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxnZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxpLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKHIpKSkpOnIuX2Q9bmV3IERhdGUoK2hbMV0pKTphKG4pPyhlLl9hPWwobi5zbGljZSgwKSwoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQsMTApfSkpLG9lKGUpKTpvKG4pP2Z1bmN0aW9uKHQpe2lmKCF0Ll9kKXt2YXIgZT1SKHQuX2kpO3QuX2E9bChbZS55ZWFyLGUubW9udGgsZS5kYXl8fGUuZGF0ZSxlLmhvdXIsZS5taW51dGUsZS5zZWNvbmQsZS5taWxsaXNlY29uZF0sKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZwYXJzZUludCh0LDEwKX0pKSxvZSh0KX19KGUpOmMobik/ZS5fZD1uZXcgRGF0ZShuKTppLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGUpLHkodCl8fCh0Ll9kPW51bGwpLHQpKX1mdW5jdGlvbiBiZSh0LGUsbixyLGkpe3ZhciBzLGM9e307cmV0dXJuITAhPT1uJiYhMSE9PW58fChyPW4sbj12b2lkIDApLChvKHQpJiZmdW5jdGlvbih0KXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aDt2YXIgZTtmb3IoZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuITE7cmV0dXJuITB9KHQpfHxhKHQpJiYwPT09dC5sZW5ndGgpJiYodD12b2lkIDApLGMuX2lzQU1vbWVudE9iamVjdD0hMCxjLl91c2VVVEM9Yy5faXNVVEM9aSxjLl9sPW4sYy5faT10LGMuX2Y9ZSxjLl9zdHJpY3Q9ciwocz1uZXcgXyhpZSh2ZShjKSkpKS5fbmV4dERheSYmKHMuYWRkKDEsImQiKSxzLl9uZXh0RGF5PXZvaWQgMCksc31mdW5jdGlvbiBfZSh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMSl9aS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1DKCJ2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIiwoZnVuY3Rpb24odCl7dC5fZD1uZXcgRGF0ZSh0Ll9pKyh0Ll91c2VVVEM/IiBVVEMiOiIiKSl9KSksaS5JU09fODYwMT1mdW5jdGlvbigpe30saS5SRkNfMjgyMj1mdW5jdGlvbigpe307dmFyIHhlPUMoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIiwoZnVuY3Rpb24oKXt2YXIgdD1fZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90PHRoaXM/dGhpczp0OmcoKX0pKSx3ZT1DKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsKGZ1bmN0aW9uKCl7dmFyIHQ9X2UuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dGhpczx0P3RoaXM6dDpnKCl9KSk7ZnVuY3Rpb24ga2UodCxlKXt2YXIgbixyO2lmKDE9PT1lLmxlbmd0aCYmYShlWzBdKSYmKGU9ZVswXSksIWUubGVuZ3RoKXJldHVybiBfZSgpO2ZvcihuPWVbMF0scj0xO3I8ZS5sZW5ndGg7KytyKWVbcl0uaXNWYWxpZCgpJiYhZVtyXVt0XShuKXx8KG49ZVtyXSk7cmV0dXJuIG59dmFyIFRlPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBFZSh0KXt2YXIgZT1SKHQpLG49ZS55ZWFyfHwwLHI9ZS5xdWFydGVyfHwwLGk9ZS5tb250aHx8MCxhPWUud2Vla3x8ZS5pc29XZWVrfHwwLG89ZS5kYXl8fDAscz1lLmhvdXJ8fDAsYz1lLm1pbnV0ZXx8MCx1PWUuc2Vjb25kfHwwLGw9ZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKC0xPT09dnQuY2FsbChUZSxlKXx8bnVsbCE9dFtlXSYmaXNOYU4odFtlXSkpcmV0dXJuITE7Zm9yKHZhciBuPSExLHI9MDtyPFRlLmxlbmd0aDsrK3IpaWYodFtUZVtyXV0pe2lmKG4pcmV0dXJuITE7cGFyc2VGbG9hdCh0W1RlW3JdXSkhPT1rKHRbVGVbcl1dKSYmKG49ITApfXJldHVybiEwfShlKSx0aGlzLl9taWxsaXNlY29uZHM9K2wrMWUzKnUrNmU0KmMrMWUzKnMqNjAqNjAsdGhpcy5fZGF5cz0rbys3KmEsdGhpcy5fbW9udGhzPStpKzMqcisxMipuLHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXJlKCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gQ2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFZX1mdW5jdGlvbiBTZSh0KXtyZXR1cm4gdDwwPy0xKk1hdGgucm91bmQoLTEqdCk6TWF0aC5yb3VuZCh0KX1mdW5jdGlvbiBBZSh0LGUpe0godCwwLDAsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51dGNPZmZzZXQoKSxuPSIrIjtyZXR1cm4gdDwwJiYodD0tdCxuPSItIiksbitqKH5+KHQvNjApLDIpK2Uraih+fnQlNjAsMil9KSl9QWUoIloiLCI6IiksQWUoIlpaIiwiIiksbHQoIloiLHN0KSxsdCgiWloiLHN0KSxwdChbIloiLCJaWiJdLChmdW5jdGlvbih0LGUsbil7bi5fdXNlVVRDPSEwLG4uX3R6bT1OZShzdCx0KX0pKTt2YXIgTWU9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gTmUodCxlKXt2YXIgbj0oZXx8IiIpLm1hdGNoKHQpO2lmKG51bGw9PT1uKXJldHVybiBudWxsO3ZhciByPSgobltuLmxlbmd0aC0xXXx8W10pKyIiKS5tYXRjaChNZSl8fFsiLSIsMCwwXSxpPTYwKnJbMV0rayhyWzJdKTtyZXR1cm4gMD09PWk/MDoiKyI9PT1yWzBdP2k6LWl9ZnVuY3Rpb24gRGUodCxlKXt2YXIgbixyO3JldHVybiBlLl9pc1VUQz8obj1lLmNsb25lKCkscj0oeCh0KXx8dSh0KT90LnZhbHVlT2YoKTpfZSh0KS52YWx1ZU9mKCkpLW4udmFsdWVPZigpLG4uX2Quc2V0VGltZShuLl9kLnZhbHVlT2YoKStyKSxpLnVwZGF0ZU9mZnNldChuLCExKSxuKTpfZSh0KS5sb2NhbCgpfWZ1bmN0aW9uIE9lKHQpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0Ll9kLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfWZ1bmN0aW9uIEJlKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9aS51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBMZT0vXihcLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKVw6KFxkKykoPzpcOihcZCspKFwuXGQqKT8pPyQvLEllPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBSZSh0LGUpe3ZhciBuLHIsaSxhPXQsbz1udWxsO3JldHVybiBDZSh0KT9hPXttczp0Ll9taWxsaXNlY29uZHMsZDp0Ll9kYXlzLE06dC5fbW9udGhzfTpjKHQpPyhhPXt9LGU/YVtlXT10OmEubWlsbGlzZWNvbmRzPXQpOihvPUxlLmV4ZWModCkpPyhuPSItIj09PW9bMV0/LTE6MSxhPXt5OjAsZDprKG9bMl0pKm4saDprKG9bM10pKm4sbTprKG9bNF0pKm4sczprKG9bNV0pKm4sbXM6ayhTZSgxZTMqb1s2XSkpKm59KToobz1JZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTpGZShvWzJdLG4pLE06RmUob1szXSxuKSx3OkZlKG9bNF0sbiksZDpGZShvWzVdLG4pLGg6RmUob1s2XSxuKSxtOkZlKG9bN10sbiksczpGZShvWzhdLG4pfSk6bnVsbD09YT9hPXt9OiJvYmplY3QiPT10eXBlb2YgYSYmKCJmcm9tImluIGF8fCJ0byJpbiBhKSYmKGk9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpPyhlPURlKGUsdCksdC5pc0JlZm9yZShlKT9uPVBlKHQsZSk6KChuPVBlKGUsdCkpLm1pbGxpc2Vjb25kcz0tbi5taWxsaXNlY29uZHMsbi5tb250aHM9LW4ubW9udGhzKSxuKTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fShfZShhLmZyb20pLF9lKGEudG8pKSwoYT17fSkubXM9aS5taWxsaXNlY29uZHMsYS5NPWkubW9udGhzKSxyPW5ldyBFZShhKSxDZSh0KSYmaCh0LCJfbG9jYWxlIikmJihyLl9sb2NhbGU9dC5fbG9jYWxlKSxyfWZ1bmN0aW9uIEZlKHQsZSl7dmFyIG49dCYmcGFyc2VGbG9hdCh0LnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihuKT8wOm4pKmV9ZnVuY3Rpb24gUGUodCxlKXt2YXIgbj17fTtyZXR1cm4gbi5tb250aHM9ZS5tb250aCgpLXQubW9udGgoKSsxMiooZS55ZWFyKCktdC55ZWFyKCkpLHQuY2xvbmUoKS5hZGQobi5tb250aHMsIk0iKS5pc0FmdGVyKGUpJiYtLW4ubW9udGhzLG4ubWlsbGlzZWNvbmRzPStlLSt0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIiksbn1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO3JldHVybiBudWxsPT09cnx8aXNOYU4oK3IpfHwoTShlLCJtb21lbnQoKS4iK2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxpPW4sbj1yLHI9aSksWWUodGhpcyxSZShuPSJzdHJpbmciPT10eXBlb2Ygbj8rbjpuLHIpLHQpLHRoaXN9fWZ1bmN0aW9uIFllKHQsZSxuLHIpe3ZhciBhPWUuX21pbGxpc2Vjb25kcyxvPVNlKGUuX2RheXMpLHM9U2UoZS5fbW9udGhzKTt0LmlzVmFsaWQoKSYmKHI9bnVsbD09cnx8cixzJiZTdCh0LHh0KHQsIk1vbnRoIikrcypuKSxvJiZ3dCh0LCJEYXRlIix4dCh0LCJEYXRlIikrbypuKSxhJiZ0Ll9kLnNldFRpbWUodC5fZC52YWx1ZU9mKCkrYSpuKSxyJiZpLnVwZGF0ZU9mZnNldCh0LG98fHMpKX1SZS5mbj1FZS5wcm90b3R5cGUsUmUuaW52YWxpZD1mdW5jdGlvbigpe3JldHVybiBSZShOYU4pfTt2YXIgemU9amUoMSwiYWRkIiksVWU9amUoLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gcWUodCxlKXt2YXIgbj0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxyPXQuY2xvbmUoKS5hZGQobiwibW9udGhzIik7cmV0dXJuLShuKyhlLXI8MD8oZS1yKS8oci10LmNsb25lKCkuYWRkKG4tMSwibW9udGhzIikpOihlLXIpLyh0LmNsb25lKCkuYWRkKG4rMSwibW9udGhzIiktcikpKXx8MH1mdW5jdGlvbiBIZSh0KXt2YXIgZTtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPShlPXJlKHQpKSYmKHRoaXMuX2xvY2FsZT1lKSx0aGlzKX1pLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixpLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciAkZT1DKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKHQpfSkpO2Z1bmN0aW9uIFdlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgVmU9MTI2MjI3ODA4ZTU7ZnVuY3Rpb24gR2UodCxlKXtyZXR1cm4odCVlK2UpJWV9ZnVuY3Rpb24gWGUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9uZXcgRGF0ZSh0KzQwMCxlLG4pLVZlOm5ldyBEYXRlKHQsZSxuKS52YWx1ZU9mKCl9ZnVuY3Rpb24gWmUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9EYXRlLlVUQyh0KzQwMCxlLG4pLVZlOkRhdGUuVVRDKHQsZSxuKX1mdW5jdGlvbiBRZSh0LGUpe0goMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBLZSh0LGUsbixyLGkpe3ZhciBhO3JldHVybiBudWxsPT10P0l0KHRoaXMscixpKS55ZWFyOigoYT1SdCh0LHIsaSkpPGUmJihlPWEpLGZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9THQodCxlLG4scixpKSxvPU90KGEueWVhciwwLGEuZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKG8uZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChvLmdldFVUQ01vbnRoKCkpLHRoaXMuZGF0ZShvLmdldFVUQ0RhdGUoKSksdGhpc30uY2FsbCh0aGlzLHQsZSxuLHIsaSkpfUgoMCxbImdnIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSkpLEgoMCxbIkdHIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSkpLFFlKCJnZ2dnIiwid2Vla1llYXIiKSxRZSgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLFFlKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxRZSgiR0dHR0ciLCJpc29XZWVrWWVhciIpLEwoIndlZWtZZWFyIiwiZ2ciKSxMKCJpc29XZWVrWWVhciIsIkdHIiksUCgid2Vla1llYXIiLDEpLFAoImlzb1dlZWtZZWFyIiwxKSxsdCgiRyIsYXQpLGx0KCJnIixhdCksbHQoIkdHIixLLEcpLGx0KCJnZyIsSyxHKSxsdCgiR0dHRyIsbnQsWiksbHQoImdnZ2ciLG50LFopLGx0KCJHR0dHRyIscnQsUSksbHQoImdnZ2dnIixydCxRKSx5dChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMildPWsodCl9KSkseXQoWyJnZyIsIkdHIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxIKCJRIiwwLCJRbyIsInF1YXJ0ZXIiKSxMKCJxdWFydGVyIiwiUSIpLFAoInF1YXJ0ZXIiLDcpLGx0KCJRIixWKSxwdCgiUSIsKGZ1bmN0aW9uKHQsZSl7ZVsxXT0zKihrKHQpLTEpfSkpLEgoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxMKCJkYXRlIiwiRCIpLFAoImRhdGUiLDkpLGx0KCJEIixLKSxsdCgiREQiLEssRyksbHQoIkRvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxlLl9vcmRpbmFsUGFyc2U6ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSkscHQoWyJEIiwiREQiXSwyKSxwdCgiRG8iLChmdW5jdGlvbih0LGUpe2VbMl09ayh0Lm1hdGNoKEspWzBdKX0pKTt2YXIgSmU9X3QoIkRhdGUiLCEwKTtIKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxMKCJkYXlPZlllYXIiLCJEREQiKSxQKCJkYXlPZlllYXIiLDQpLGx0KCJEREQiLGV0KSxsdCgiRERERCIsWCkscHQoWyJEREQiLCJEREREIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl9kYXlPZlllYXI9ayh0KX0pKSxIKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxMKCJtaW51dGUiLCJtIiksUCgibWludXRlIiwxNCksbHQoIm0iLEspLGx0KCJtbSIsSyxHKSxwdChbIm0iLCJtbSJdLDQpO3ZhciB0bj1fdCgiTWludXRlcyIsITEpO0goInMiLFsic3MiLDJdLDAsInNlY29uZCIpLEwoInNlY29uZCIsInMiKSxQKCJzZWNvbmQiLDE1KSxsdCgicyIsSyksbHQoInNzIixLLEcpLHB0KFsicyIsInNzIl0sNSk7dmFyIGVuLG5uPV90KCJTZWNvbmRzIiwhMSk7Zm9yKEgoIlMiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pKSxIKDAsWyJTUyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSkpLEgoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxIKDAsWyJTU1NTIiw0XSwwLChmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksSCgwLFsiU1NTU1MiLDVdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksSCgwLFsiU1NTU1NTIiw2XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5taWxsaXNlY29uZCgpfSkpLEgoMCxbIlNTU1NTU1MiLDddLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksSCgwLFsiU1NTU1NTU1MiLDhdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSksSCgwLFsiU1NTU1NTU1NTIiw5XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSkpLEwoIm1pbGxpc2Vjb25kIiwibXMiKSxQKCJtaWxsaXNlY29uZCIsMTYpLGx0KCJTIixldCxWKSxsdCgiU1MiLGV0LEcpLGx0KCJTU1MiLGV0LFgpLGVuPSJTU1NTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilsdChlbixpdCk7ZnVuY3Rpb24gcm4odCxlKXtlWzZdPWsoMWUzKigiMC4iK3QpKX1mb3IoZW49IlMiO2VuLmxlbmd0aDw9OTtlbis9IlMiKXB0KGVuLHJuKTt2YXIgYW49X3QoIk1pbGxpc2Vjb25kcyIsITEpO0goInoiLDAsMCwiem9uZUFiYnIiKSxIKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciBvbj1fLnByb3RvdHlwZTtmdW5jdGlvbiBzbih0KXtyZXR1cm4gdH1vbi5hZGQ9emUsb24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10fHxfZSgpLHI9RGUobix0aGlzKS5zdGFydE9mKCJkYXkiKSxhPWkuY2FsZW5kYXJGb3JtYXQodGhpcyxyKXx8InNhbWVFbHNlIixvPWUmJihOKGVbYV0pP2VbYV0uY2FsbCh0aGlzLG4pOmVbYV0pO3JldHVybiB0aGlzLmZvcm1hdChvfHx0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihhLHRoaXMsX2UobikpKX0sb24uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF8odGhpcyl9LG9uLmRpZmY9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKHI9RGUodCx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKGk9NmU0KihyLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLGU9SShlKSl7Y2FzZSJ5ZWFyIjphPXFlKHRoaXMscikvMTI7YnJlYWs7Y2FzZSJtb250aCI6YT1xZSh0aGlzLHIpO2JyZWFrO2Nhc2UicXVhcnRlciI6YT1xZSh0aGlzLHIpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOmE9KHRoaXMtcikvMWUzO2JyZWFrO2Nhc2UibWludXRlIjphPSh0aGlzLXIpLzZlNDticmVhaztjYXNlImhvdXIiOmE9KHRoaXMtcikvMzZlNTticmVhaztjYXNlImRheSI6YT0odGhpcy1yLWkpLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6YT0odGhpcy1yLWkpLzYwNDhlNTticmVhaztkZWZhdWx0OmE9dGhpcy1yfXJldHVybiBuP2E6dyhhKX0sb24uZW5kT2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9SSh0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MzZlNS1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KS0xO2JyZWFrO2Nhc2UibWludXRlIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTZlNC1HZShlLDZlNCktMTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz0xZTMtR2UoZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShlKSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxvbi5mb3JtYXQ9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5pc1V0YygpP2kuZGVmYXVsdEZvcm1hdFV0YzppLmRlZmF1bHRGb3JtYXQpO3ZhciBlPSQodGhpcyx0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChlKX0sb24uZnJvbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKHgodCkmJnQuaXNWYWxpZCgpfHxfZSh0KS5pc1ZhbGlkKCkpP1JlKHt0bzp0aGlzLGZyb206dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24uZnJvbU5vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tKF9lKCksdCl9LG9uLnRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoeCh0KSYmdC5pc1ZhbGlkKCl8fF9lKHQpLmlzVmFsaWQoKSk/UmUoe2Zyb206dGhpcyx0bzp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxvbi50b05vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50byhfZSgpLHQpfSxvbi5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE4odGhpc1t0PUkodCldKT90aGlzW3RdKCk6dGhpc30sb24uaW52YWxpZEF0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykub3ZlcmZsb3d9LG9uLmlzQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj14KHQpP3Q6X2UodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+bi52YWx1ZU9mKCk6bi52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpKX0sb24uaXNCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj14KHQpP3Q6X2UodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8bi52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl9LG9uLmlzQmV0d2Vlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT14KHQpP3Q6X2UodCksYT14KGUpP2U6X2UoZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmkuaXNWYWxpZCgpJiZhLmlzVmFsaWQoKSkmJigiKCI9PT0ocj1yfHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoaSxuKTohdGhpcy5pc0JlZm9yZShpLG4pKSYmKCIpIj09PXJbMV0/dGhpcy5pc0JlZm9yZShhLG4pOiF0aGlzLmlzQWZ0ZXIoYSxuKSl9LG9uLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9eCh0KT90Ol9lKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhci5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09ci52YWx1ZU9mKCk6KG49ci52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpPD1uJiZuPD10aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpKSl9LG9uLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0FmdGVyKHQsZSl9LG9uLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNCZWZvcmUodCxlKX0sb24uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB5KHRoaXMpfSxvbi5sYW5nPSRlLG9uLmxvY2FsZT1IZSxvbi5sb2NhbGVEYXRhPVdlLG9uLm1heD13ZSxvbi5taW49eGUsb24ucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGYoe30scCh0aGlzKSl9LG9uLnNldD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHt1bml0Om4scHJpb3JpdHk6RltuXX0pO3JldHVybiBlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX0pKSxlfSh0PVIodCkpLHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzW25bcl0udW5pdF0odFtuW3JdLnVuaXRdKTtlbHNlIGlmKE4odGhpc1t0PUkodCldKSlyZXR1cm4gdGhpc1t0XShlKTtyZXR1cm4gdGhpc30sb24uc3RhcnRPZj1mdW5jdGlvbih0KXt2YXIgZTtpZih2b2lkIDA9PT0odD1JKHQpKXx8Im1pbGxpc2Vjb25kIj09PXR8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl9pc1VUQz9aZTpYZTtzd2l0Y2godCl7Y2FzZSJ5ZWFyIjplPW4odGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztjYXNlIndlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2UiaG91ciI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlLDZlNCk7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uc3VidHJhY3Q9VWUsb24udG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW3QueWVhcigpLHQubW9udGgoKSx0LmRhdGUoKSx0LmhvdXIoKSx0Lm1pbnV0ZSgpLHQuc2Vjb25kKCksdC5taWxsaXNlY29uZCgpXX0sb24udG9PYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybnt5ZWFyczp0LnllYXIoKSxtb250aHM6dC5tb250aCgpLGRhdGU6dC5kYXRlKCksaG91cnM6dC5ob3VycygpLG1pbnV0ZXM6dC5taW51dGVzKCksc2Vjb25kczp0LnNlY29uZHMoKSxtaWxsaXNlY29uZHM6dC5taWxsaXNlY29uZHMoKX19LG9uLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG9uLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgZT0hMCE9PXQsbj1lP3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBuLnllYXIoKTwwfHw5OTk5PG4ueWVhcigpPyQobixlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6TihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/ZT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsJChuLCJaIikpOiQobixlPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sb24uaW5zcGVjdD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgdD0ibW9tZW50IixlPSIiO3RoaXMuaXNMb2NhbCgpfHwodD0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiLGU9IloiKTt2YXIgbj0iWyIrdCsnKCJdJyxyPTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT8iWVlZWSI6IllZWVlZWSIsaT1lKydbIildJztyZXR1cm4gdGhpcy5mb3JtYXQobityKyItTU0tRERbVF1ISDptbTpzcy5TU1MiK2kpfSxvbi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG9uLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSxvbi51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sb24udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LG9uLmNyZWF0aW9uRGF0YT1mdW5jdGlvbigpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LG9uLnllYXI9YnQsb24uaXNMZWFwWWVhcj1mdW5jdGlvbigpe3JldHVybiBtdCh0aGlzLnllYXIoKSl9LG9uLndlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBLZS5jYWxsKHRoaXMsdCx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sb24uaXNvV2Vla1llYXI9ZnVuY3Rpb24odCl7cmV0dXJuIEtlLmNhbGwodGhpcyx0LHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LG9uLnF1YXJ0ZXI9b24ucXVhcnRlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKih0LTEpK3RoaXMubW9udGgoKSUzKX0sb24ubW9udGg9QXQsb24uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4ga3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0sb24ud2Vlaz1vbi53ZWVrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi5pc29XZWVrPW9uLmlzb1dlZWtzPWZ1bmN0aW9uKHQpe3ZhciBlPUl0KHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi53ZWVrc0luWWVhcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBSdCh0aGlzLnllYXIoKSx0LmRvdyx0LmRveSl9LG9uLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KHRoaXMueWVhcigpLDEsNCl9LG9uLmRhdGU9SmUsb24uZGF5PW9uLmRheXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO3ZhciBlLG4scj10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPXQ/KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLHQ9InN0cmluZyIhPXR5cGVvZiBlP2U6aXNOYU4oZSk/Im51bWJlciI9PXR5cGVvZihlPW4ud2Vla2RheXNQYXJzZShlKSk/ZTpudWxsOnBhcnNlSW50KGUsMTApLHRoaXMuYWRkKHQtciwiZCIpKTpyfSxvbi53ZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfSxvbi5pc29XZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsPT10KXJldHVybiB0aGlzLmRheSgpfHw3O3ZhciBlLG4scj0oZT10LG49dGhpcy5sb2NhbGVEYXRhKCksInN0cmluZyI9PXR5cGVvZiBlP24ud2Vla2RheXNQYXJzZShlKSU3fHw3OmlzTmFOKGUpP251bGw6ZSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz9yOnItNyl9LG9uLmRheU9mWWVhcj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaG91cj1vbi5ob3Vycz1YdCxvbi5taW51dGU9b24ubWludXRlcz10bixvbi5zZWNvbmQ9b24uc2Vjb25kcz1ubixvbi5taWxsaXNlY29uZD1vbi5taWxsaXNlY29uZHM9YW4sb24udXRjT2Zmc2V0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhPXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5faXNVVEM/YTpPZSh0aGlzKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0odD1OZShzdCx0KSkpcmV0dXJuIHRoaXN9ZWxzZSBNYXRoLmFicyh0KTwxNiYmIW4mJih0Kj02MCk7cmV0dXJuIXRoaXMuX2lzVVRDJiZlJiYocj1PZSh0aGlzKSksdGhpcy5fb2Zmc2V0PXQsdGhpcy5faXNVVEM9ITAsbnVsbCE9ciYmdGhpcy5hZGQociwibSIpLGEhPT10JiYoIWV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/WWUodGhpcyxSZSh0LWEsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfSxvbi51dGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsdCl9LG9uLmxvY2FsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsdCksdGhpcy5faXNVVEM9ITEsdCYmdGhpcy5zdWJ0cmFjdChPZSh0aGlzKSwibSIpKSx0aGlzfSxvbi5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5faSl7dmFyIHQ9TmUob3QsdGhpcy5faSk7bnVsbCE9dD90aGlzLnV0Y09mZnNldCh0KTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sb24uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKHQ9dD9fZSh0KS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLXQpJTYwPT0wKX0sb24uaXNEU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSxvbi5pc0xvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSxvbi5pc1V0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSxvbi5pc1V0Yz1CZSxvbi5pc1VUQz1CZSxvbi56b25lQWJicj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn0sb24uem9uZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn0sb24uZGF0ZXM9QygiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLEplKSxvbi5tb250aHM9QygibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixBdCksb24ueWVhcnM9QygieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIsYnQpLG9uLnpvbmU9QygibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10Pygic3RyaW5nIiE9dHlwZW9mIHQmJih0PS10KSx0aGlzLnV0Y09mZnNldCh0LGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSkpLG9uLmlzRFNUU2hpZnRlZD1DKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIiwoZnVuY3Rpb24oKXtpZighcyh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIHQ9e307aWYodih0LHRoaXMpLCh0PXZlKHQpKS5fYSl7dmFyIGU9dC5faXNVVEM/ZCh0Ll9hKTpfZSh0Ll9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJjA8VCh0Ll9hLGUudG9BcnJheSgpKX1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfSkpO3ZhciBjbj1PLnByb3RvdHlwZTtmdW5jdGlvbiB1bih0LGUsbixyKXt2YXIgaT1yZSgpLGE9ZCgpLnNldChyLGUpO3JldHVybiBpW25dKGEsdCl9ZnVuY3Rpb24gbG4odCxlLG4pe2lmKGModCkmJihlPXQsdD12b2lkIDApLHQ9dHx8IiIsbnVsbCE9ZSlyZXR1cm4gdW4odCxlLG4sIm1vbnRoIik7dmFyIHIsaT1bXTtmb3Iocj0wO3I8MTI7cisrKWlbcl09dW4odCxyLG4sIm1vbnRoIik7cmV0dXJuIGl9ZnVuY3Rpb24gaG4odCxlLG4scil7ImJvb2xlYW4iPT10eXBlb2YgdD9jKGUpJiYobj1lLGU9dm9pZCAwKTooZT10LHQ9ITEsYyhuPWUpJiYobj1lLGU9dm9pZCAwKSksZT1lfHwiIjt2YXIgaSxhPXJlKCksbz10P2EuX3dlZWsuZG93OjA7aWYobnVsbCE9bilyZXR1cm4gdW4oZSwobitvKSU3LHIsImRheSIpO3ZhciBzPVtdO2ZvcihpPTA7aTw3O2krKylzW2ldPXVuKGUsKGkrbyklNyxyLCJkYXkiKTtyZXR1cm4gc31jbi5jYWxlbmRhcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fY2FsZW5kYXJbdF18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBOKHIpP3IuY2FsbChlLG4pOnJ9LGNuLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdLG49dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdC50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZXx8IW4/ZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF09bi5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMSl9KSksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0pfSxjbi5pbnZhbGlkRGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sY24ub3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsdCl9LGNuLnByZXBhcnNlPXNuLGNuLnBvc3Rmb3JtYXQ9c24sY24ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuX3JlbGF0aXZlVGltZVtuXTtyZXR1cm4gTihpKT9pKHQsZSxuLHIpOmkucmVwbGFjZSgvJWQvaSx0KX0sY24ucGFzdEZ1dHVyZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3JlbGF0aXZlVGltZVswPHQ/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gTihuKT9uKGUpOm4ucmVwbGFjZSgvJXMvaSxlKX0sY24uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKG4gaW4gdClOKGU9dFtuXSk/dGhpc1tuXT1lOnRoaXNbIl8iK25dPWU7dGhpcy5fY29uZmlnPXQsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0sY24ubW9udGhzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1t0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxUdCkudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sY24ubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9hKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W1R0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LGNuLm1vbnRoc1BhcnNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLHI9MDtyPDEyOysrcilhPWQoWzJlMyxyXSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT10aGlzLm1vbnRoc1Nob3J0KGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdPXRoaXMubW9udGhzKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/Ik1NTSI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT12dC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTpudWxsOiJNTU0iPT09ZT8tMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscj0wO3I8MTI7cisrKXtpZihpPWQoWzJlMyxyXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtyXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbcl18fChhPSJeIit0aGlzLm1vbnRocyhpLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoaSwiIiksdGhpcy5fbW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhoKHRoaXMsIl9tb250aHNSZWdleCIpfHxEdC5jYWxsKHRoaXMpLHQ/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihoKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9TnQpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sY24ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8RHQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGgodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TXQpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sY24ud2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gSXQodCx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sY24uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LGNuLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxjbi53ZWVrZGF5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW3QmJiEwIT09dCYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09dD9GdChuLHRoaXMuX3dlZWsuZG93KTp0P25bdC5kYXkoKV06bn0sY24ud2Vla2RheXNNaW49ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P0Z0KHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzTWluW3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxjbi53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9GdCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzU2hvcnRbdC5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sY24ud2Vla2RheXNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxyPTA7cjw3OysrcilhPWQoWzJlMywxXSkuZGF5KHIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c01pbihhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbj8iZGRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpfHwtMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTpudWxsfS5jYWxsKHRoaXMsdCxlLG4pO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSkscj0wO3I8NztyKyspe2lmKGk9ZChbMmUzLDFdKS5kYXkociksbiYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtyXXx8KGE9Il4iK3RoaXMud2Vla2RheXMoaSwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fd2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByfX0sY24ud2Vla2RheXNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fEh0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXp0KSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LGNuLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fEh0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9VXQpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sY24ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fEh0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXF0KSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LGNuLmlzUE09ZnVuY3Rpb24odCl7cmV0dXJuInAiPT09KHQrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSxjbi5tZXJpZGllbT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDExPHQ/bj8icG0iOiJQTSI6bj8iYW0iOiJBTSJ9LGVlKCJlbiIse2RheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPXQlMTA7cmV0dXJuIHQrKDE9PT1rKHQlMTAwLzEwKT8idGgiOjE9PT1lPyJzdCI6Mj09PWU/Im5kIjozPT09ZT8icmQiOiJ0aCIpfX0pLGkubGFuZz1DKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZWUpLGkubGFuZ0RhdGE9QygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscmUpO3ZhciBmbj1NYXRoLmFicztmdW5jdGlvbiBkbih0LGUsbixyKXt2YXIgaT1SZShlLG4pO3JldHVybiB0Ll9taWxsaXNlY29uZHMrPXIqaS5fbWlsbGlzZWNvbmRzLHQuX2RheXMrPXIqaS5fZGF5cyx0Ll9tb250aHMrPXIqaS5fbW9udGhzLHQuX2J1YmJsZSgpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0PDA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9ZnVuY3Rpb24geW4odCl7cmV0dXJuIDQ4MDAqdC8xNDYwOTd9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIDE0NjA5Nyp0LzQ4MDB9ZnVuY3Rpb24gbW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXModCl9fXZhciB2bj1tbigibXMiKSxibj1tbigicyIpLF9uPW1uKCJtIikseG49bW4oImgiKSx3bj1tbigiZCIpLGtuPW1uKCJ3IiksVG49bW4oIk0iKSxFbj1tbigiUSIpLENuPW1uKCJ5Iik7ZnVuY3Rpb24gU24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbdF06TmFOfX12YXIgQW49U24oIm1pbGxpc2Vjb25kcyIpLE1uPVNuKCJzZWNvbmRzIiksTm49U24oIm1pbnV0ZXMiKSxEbj1TbigiaG91cnMiKSxPbj1TbigiZGF5cyIpLEJuPVNuKCJtb250aHMiKSxMbj1TbigieWVhcnMiKSxJbj1NYXRoLnJvdW5kLFJuPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LE06MTF9LEZuPU1hdGguYWJzO2Z1bmN0aW9uIFBuKHQpe3JldHVybigwPHQpLSh0PDApfHwrdH1mdW5jdGlvbiBqbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgdCxlLG49Rm4odGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMscj1Gbih0aGlzLl9kYXlzKSxpPUZuKHRoaXMuX21vbnRocyk7ZT13KCh0PXcobi82MCkpLzYwKSxuJT02MCx0JT02MDt2YXIgYT13KGkvMTIpLG89aSU9MTIscz1yLGM9ZSx1PXQsbD1uP24udG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixoPXRoaXMuYXNTZWNvbmRzKCk7aWYoIWgpcmV0dXJuIlAwRCI7dmFyIGY9aDwwPyItIjoiIixkPVBuKHRoaXMuX21vbnRocykhPT1QbihoKT8iLSI6IiIscD1Qbih0aGlzLl9kYXlzKSE9PVBuKGgpPyItIjoiIix5PVBuKHRoaXMuX21pbGxpc2Vjb25kcykhPT1QbihoKT8iLSI6IiI7cmV0dXJuIGYrIlAiKyhhP2QrYSsiWSI6IiIpKyhvP2QrbysiTSI6IiIpKyhzP3ArcysiRCI6IiIpKyhjfHx1fHxsPyJUIjoiIikrKGM/eStjKyJIIjoiIikrKHU/eSt1KyJNIjoiIikrKGw/eStsKyJTIjoiIil9dmFyIFluPUVlLnByb3RvdHlwZTtyZXR1cm4gWW4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxZbi5hYnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9Zm4odGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWZuKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1mbih0aGlzLl9tb250aHMpLHQubWlsbGlzZWNvbmRzPWZuKHQubWlsbGlzZWNvbmRzKSx0LnNlY29uZHM9Zm4odC5zZWNvbmRzKSx0Lm1pbnV0ZXM9Zm4odC5taW51dGVzKSx0LmhvdXJzPWZuKHQuaG91cnMpLHQubW9udGhzPWZuKHQubW9udGhzKSx0LnllYXJzPWZuKHQueWVhcnMpLHRoaXN9LFluLmFkZD1mdW5jdGlvbih0LGUpe3JldHVybiBkbih0aGlzLHQsZSwxKX0sWW4uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsLTEpfSxZbi5hcz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgZSxuLHI9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0odD1JKHQpKXx8InF1YXJ0ZXIiPT09dHx8InllYXIiPT09dClzd2l0Y2goZT10aGlzLl9kYXlzK3IvODY0ZTUsbj10aGlzLl9tb250aHMreW4oZSksdCl7Y2FzZSJtb250aCI6cmV0dXJuIG47Y2FzZSJxdWFydGVyIjpyZXR1cm4gbi8zO2Nhc2UieWVhciI6cmV0dXJuIG4vMTJ9ZWxzZSBzd2l0Y2goZT10aGlzLl9kYXlzK01hdGgucm91bmQoZ24odGhpcy5fbW9udGhzKSksdCl7Y2FzZSJ3ZWVrIjpyZXR1cm4gZS83K3IvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gZStyLzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KmUrci8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCplK3IvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqZStyLzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSplKStyO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIit0KX19LFluLmFzTWlsbGlzZWNvbmRzPXZuLFluLmFzU2Vjb25kcz1ibixZbi5hc01pbnV0ZXM9X24sWW4uYXNIb3Vycz14bixZbi5hc0RheXM9d24sWW4uYXNXZWVrcz1rbixZbi5hc01vbnRocz1UbixZbi5hc1F1YXJ0ZXJzPUVuLFluLmFzWWVhcnM9Q24sWW4udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqayh0aGlzLl9tb250aHMvMTIpOk5hTn0sWW4uX2J1YmJsZT1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYT10aGlzLl9taWxsaXNlY29uZHMsbz10aGlzLl9kYXlzLHM9dGhpcy5fbW9udGhzLGM9dGhpcy5fZGF0YTtyZXR1cm4gMDw9YSYmMDw9byYmMDw9c3x8YTw9MCYmbzw9MCYmczw9MHx8KGErPTg2NGU1KnBuKGduKHMpK28pLHM9bz0wKSxjLm1pbGxpc2Vjb25kcz1hJTFlMyx0PXcoYS8xZTMpLGMuc2Vjb25kcz10JTYwLGU9dyh0LzYwKSxjLm1pbnV0ZXM9ZSU2MCxuPXcoZS82MCksYy5ob3Vycz1uJTI0LHMrPWk9dyh5bihvKz13KG4vMjQpKSksby09cG4oZ24oaSkpLHI9dyhzLzEyKSxzJT0xMixjLmRheXM9byxjLm1vbnRocz1zLGMueWVhcnM9cix0aGlzfSxZbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBSZSh0aGlzKX0sWW4uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PUkodCksdGhpcy5pc1ZhbGlkKCk/dGhpc1t0KyJzIl0oKTpOYU59LFluLm1pbGxpc2Vjb25kcz1BbixZbi5zZWNvbmRzPU1uLFluLm1pbnV0ZXM9Tm4sWW4uaG91cnM9RG4sWW4uZGF5cz1PbixZbi53ZWVrcz1mdW5jdGlvbigpe3JldHVybiB3KHRoaXMuZGF5cygpLzcpfSxZbi5tb250aHM9Qm4sWW4ueWVhcnM9TG4sWW4uaHVtYW5pemU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9dGhpcy5sb2NhbGVEYXRhKCksZj0oZT0hdCxuPWgscj1SZSh0aGlzKS5hYnMoKSxpPUluKHIuYXMoInMiKSksYT1JbihyLmFzKCJtIikpLG89SW4oci5hcygiaCIpKSxzPUluKHIuYXMoImQiKSksYz1JbihyLmFzKCJNIikpLHU9SW4oci5hcygieSIpKSwobD1pPD1Sbi5zcyYmWyJzIixpXXx8aTxSbi5zJiZbInNzIixpXXx8YTw9MSYmWyJtIl18fGE8Um4ubSYmWyJtbSIsYV18fG88PTEmJlsiaCJdfHxvPFJuLmgmJlsiaGgiLG9dfHxzPD0xJiZbImQiXXx8czxSbi5kJiZbImRkIixzXXx8Yzw9MSYmWyJNIl18fGM8Um4uTSYmWyJNTSIsY118fHU8PTEmJlsieSJdfHxbInl5Iix1XSlbMl09ZSxsWzNdPTA8K3RoaXMsbFs0XT1uLGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkucmVsYXRpdmVUaW1lKGV8fDEsISFuLHQscil9LmFwcGx5KG51bGwsbCkpO3JldHVybiB0JiYoZj1oLnBhc3RGdXR1cmUoK3RoaXMsZikpLGgucG9zdGZvcm1hdChmKX0sWW4udG9JU09TdHJpbmc9am4sWW4udG9TdHJpbmc9am4sWW4udG9KU09OPWpuLFluLmxvY2FsZT1IZSxZbi5sb2NhbGVEYXRhPVdlLFluLnRvSXNvU3RyaW5nPUMoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixqbiksWW4ubGFuZz0kZSxIKCJYIiwwLDAsInVuaXgiKSxIKCJ4IiwwLDAsInZhbHVlT2YiKSxsdCgieCIsYXQpLGx0KCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxwdCgiWCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KHQsMTApKX0pKSxwdCgieCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKGsodCkpfSkpLGkudmVyc2lvbj0iMi4yNC4wIixlPV9lLGkuZm49b24saS5taW49ZnVuY3Rpb24oKXtyZXR1cm4ga2UoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGtlKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxpLnV0Yz1kLGkudW5peD1mdW5jdGlvbih0KXtyZXR1cm4gX2UoMWUzKnQpfSxpLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiBsbih0LGUsIm1vbnRocyIpfSxpLmlzRGF0ZT11LGkubG9jYWxlPWVlLGkuaW52YWxpZD1nLGkuZHVyYXRpb249UmUsaS5pc01vbWVudD14LGkud2Vla2RheXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXMiKX0saS5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gX2UuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxpLmxvY2FsZURhdGE9cmUsaS5pc0R1cmF0aW9uPUNlLGkubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbG4odCxlLCJtb250aHNTaG9ydCIpfSxpLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzTWluIil9LGkuZGVmaW5lTG9jYWxlPW5lLGkudXBkYXRlTG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9ZSl7dmFyIG4scixpPVp0O251bGwhPShyPXRlKHQpKSYmKGk9ci5fY29uZmlnKSwobj1uZXcgTyhlPUQoaSxlKSkpLnBhcmVudExvY2FsZT1RdFt0XSxRdFt0XT1uLGVlKHQpfWVsc2UgbnVsbCE9UXRbdF0mJihudWxsIT1RdFt0XS5wYXJlbnRMb2NhbGU/UXRbdF09UXRbdF0ucGFyZW50TG9jYWxlOm51bGwhPVF0W3RdJiZkZWxldGUgUXRbdF0pO3JldHVybiBRdFt0XX0saS5sb2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFMoUXQpfSxpLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXNTaG9ydCIpfSxpLm5vcm1hbGl6ZVVuaXRzPUksaS5yZWxhdGl2ZVRpbWVSb3VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9JbjoiZnVuY3Rpb24iPT10eXBlb2YgdCYmKEluPXQsITApfSxpLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT1Sblt0XSYmKHZvaWQgMD09PWU/Um5bdF06KFJuW3RdPWUsInMiPT09dCYmKFJuLnNzPWUtMSksITApKX0saS5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZGlmZihlLCJkYXlzIiwhMCk7cmV0dXJuIG48LTY/InNhbWVFbHNlIjpuPC0xPyJsYXN0V2VlayI6bjwwPyJsYXN0RGF5IjpuPDE/InNhbWVEYXkiOm48Mj8ibmV4dERheSI6bjw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0saS5wcm90b3R5cGU9b24saS5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0saX0oKX0sNjQ3MDp0PT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSl9ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgbixyPSIiLGk9MCxhPS0xLG89MCxzPTA7czw9dC5sZW5ndGg7KytzKXtpZihzPHQubGVuZ3RoKW49dC5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1uKWJyZWFrO249NDd9aWYoNDc9PT1uKXtpZihhPT09cy0xfHwxPT09byk7ZWxzZSBpZihhIT09cy0xJiYyPT09byl7aWYoci5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSlpZihyLmxlbmd0aD4yKXt2YXIgYz1yLmxhc3RJbmRleE9mKCIvIik7aWYoYyE9PXIubGVuZ3RoLTEpey0xPT09Yz8ocj0iIixpPTApOmk9KHI9ci5zbGljZSgwLGMpKS5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKCIvIiksYT1zLG89MDtjb250aW51ZX19ZWxzZSBpZigyPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aCl7cj0iIixpPTAsYT1zLG89MDtjb250aW51ZX1lJiYoci5sZW5ndGg+MD9yKz0iLy4uIjpyPSIuLiIsaT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9Ii8iK3Quc2xpY2UoYSsxLHMpOnI9dC5zbGljZShhKzEscyksaT1zLWEtMTthPXMsbz0wfWVsc2UgNDY9PT1uJiYtMSE9PW8/KytvOm89LTF9cmV0dXJuIHJ9dmFyIHI9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQscj0iIixpPSExLGE9YXJndW1lbnRzLmxlbmd0aC0xO2E+PS0xJiYhaTthLS0pe3ZhciBvO2E+PTA/bz1hcmd1bWVudHNbYV06KHZvaWQgMD09PXQmJih0PXByb2Nlc3MuY3dkKCkpLG89dCksZShvKSwwIT09by5sZW5ndGgmJihyPW8rIi8iK3IsaT00Nz09PW8uY2hhckNvZGVBdCgwKSl9cmV0dXJuIHI9bihyLCFpKSxpP3IubGVuZ3RoPjA/Ii8iK3I6Ii8iOnIubGVuZ3RoPjA/cjoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbih0KXtpZihlKHQpLDA9PT10Lmxlbmd0aClyZXR1cm4iLiI7dmFyIHI9NDc9PT10LmNoYXJDb2RlQXQoMCksaT00Nz09PXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKTtyZXR1cm4gMCE9PSh0PW4odCwhcikpLmxlbmd0aHx8cnx8KHQ9Ii4iKSx0Lmxlbmd0aD4wJiZpJiYodCs9Ii8iKSxyPyIvIit0OnR9LGlzQWJzb2x1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUodCksdC5sZW5ndGg+MCYmNDc9PT10LmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciB0LG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7KytuKXt2YXIgaT1hcmd1bWVudHNbbl07ZShpKSxpLmxlbmd0aD4wJiYodm9pZCAwPT09dD90PWk6dCs9Ii8iK2kpfXJldHVybiB2b2lkIDA9PT10PyIuIjpyLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmU6ZnVuY3Rpb24odCxuKXtpZihlKHQpLGUobiksdD09PW4pcmV0dXJuIiI7aWYoKHQ9ci5yZXNvbHZlKHQpKT09PShuPXIucmVzb2x2ZShuKSkpcmV0dXJuIiI7Zm9yKHZhciBpPTE7aTx0Lmxlbmd0aCYmNDc9PT10LmNoYXJDb2RlQXQoaSk7KytpKTtmb3IodmFyIGE9dC5sZW5ndGgsbz1hLWkscz0xO3M8bi5sZW5ndGgmJjQ3PT09bi5jaGFyQ29kZUF0KHMpOysrcyk7Zm9yKHZhciBjPW4ubGVuZ3RoLXMsdT1vPGM/bzpjLGw9LTEsaD0wO2g8PXU7KytoKXtpZihoPT09dSl7aWYoYz51KXtpZig0Nz09PW4uY2hhckNvZGVBdChzK2gpKXJldHVybiBuLnNsaWNlKHMraCsxKTtpZigwPT09aClyZXR1cm4gbi5zbGljZShzK2gpfWVsc2Ugbz51JiYoNDc9PT10LmNoYXJDb2RlQXQoaStoKT9sPWg6MD09PWgmJihsPTApKTticmVha312YXIgZj10LmNoYXJDb2RlQXQoaStoKTtpZihmIT09bi5jaGFyQ29kZUF0KHMraCkpYnJlYWs7NDc9PT1mJiYobD1oKX12YXIgZD0iIjtmb3IoaD1pK2wrMTtoPD1hOysraCloIT09YSYmNDchPT10LmNoYXJDb2RlQXQoaCl8fCgwPT09ZC5sZW5ndGg/ZCs9Ii4uIjpkKz0iLy4uIik7cmV0dXJuIGQubGVuZ3RoPjA/ZCtuLnNsaWNlKHMrbCk6KHMrPWwsNDc9PT1uLmNoYXJDb2RlQXQocykmJisrcyxuLnNsaWNlKHMpKX0sX21ha2VMb25nOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxkaXJuYW1lOmZ1bmN0aW9uKHQpe2lmKGUodCksMD09PXQubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIG49dC5jaGFyQ29kZUF0KDApLHI9NDc9PT1uLGk9LTEsYT0hMCxvPXQubGVuZ3RoLTE7bz49MTstLW8paWYoNDc9PT0obj10LmNoYXJDb2RlQXQobykpKXtpZighYSl7aT1vO2JyZWFrfX1lbHNlIGE9ITE7cmV0dXJuLTE9PT1pP3I/Ii8iOiIuIjpyJiYxPT09aT8iLy8iOnQuc2xpY2UoMCxpKX0sYmFzZW5hbWU6ZnVuY3Rpb24odCxuKXtpZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2UodCk7dmFyIHIsaT0wLGE9LTEsbz0hMDtpZih2b2lkIDAhPT1uJiZuLmxlbmd0aD4wJiZuLmxlbmd0aDw9dC5sZW5ndGgpe2lmKG4ubGVuZ3RoPT09dC5sZW5ndGgmJm49PT10KXJldHVybiIiO3ZhciBzPW4ubGVuZ3RoLTEsYz0tMTtmb3Iocj10Lmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgdT10LmNoYXJDb2RlQXQocik7aWYoNDc9PT11KXtpZighbyl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PWMmJihvPSExLGM9cisxKSxzPj0wJiYodT09PW4uY2hhckNvZGVBdChzKT8tMT09LS1zJiYoYT1yKToocz0tMSxhPWMpKX1yZXR1cm4gaT09PWE/YT1jOi0xPT09YSYmKGE9dC5sZW5ndGgpLHQuc2xpY2UoaSxhKX1mb3Iocj10Lmxlbmd0aC0xO3I+PTA7LS1yKWlmKDQ3PT09dC5jaGFyQ29kZUF0KHIpKXtpZighbyl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PWEmJihvPSExLGE9cisxKTtyZXR1cm4tMT09PWE/IiI6dC5zbGljZShpLGEpfSxleHRuYW1lOmZ1bmN0aW9uKHQpe2UodCk7Zm9yKHZhciBuPS0xLHI9MCxpPS0xLGE9ITAsbz0wLHM9dC5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIGM9dC5jaGFyQ29kZUF0KHMpO2lmKDQ3IT09YyktMT09PWkmJihhPSExLGk9cysxKSw0Nj09PWM/LTE9PT1uP249czoxIT09byYmKG89MSk6LTEhPT1uJiYobz0tMSk7ZWxzZSBpZighYSl7cj1zKzE7YnJlYWt9fXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09b3x8MT09PW8mJm49PT1pLTEmJm49PT1yKzE/IiI6dC5zbGljZShuLGkpfSxmb3JtYXQ6ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5kaXJ8fGUucm9vdCxyPWUuYmFzZXx8KGUubmFtZXx8IiIpKyhlLmV4dHx8IiIpO3JldHVybiBuP249PT1lLnJvb3Q/bityOm4rIi8iK3I6cn0oMCx0KX0scGFyc2U6ZnVuY3Rpb24odCl7ZSh0KTt2YXIgbj17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PXQubGVuZ3RoKXJldHVybiBuO3ZhciByLGk9dC5jaGFyQ29kZUF0KDApLGE9NDc9PT1pO2E/KG4ucm9vdD0iLyIscj0xKTpyPTA7Zm9yKHZhciBvPS0xLHM9MCxjPS0xLHU9ITAsbD10Lmxlbmd0aC0xLGg9MDtsPj1yOy0tbClpZig0NyE9PShpPXQuY2hhckNvZGVBdChsKSkpLTE9PT1jJiYodT0hMSxjPWwrMSksNDY9PT1pPy0xPT09bz9vPWw6MSE9PWgmJihoPTEpOi0xIT09byYmKGg9LTEpO2Vsc2UgaWYoIXUpe3M9bCsxO2JyZWFrfXJldHVybi0xPT09b3x8LTE9PT1jfHwwPT09aHx8MT09PWgmJm89PT1jLTEmJm89PT1zKzE/LTEhPT1jJiYobi5iYXNlPW4ubmFtZT0wPT09cyYmYT90LnNsaWNlKDEsYyk6dC5zbGljZShzLGMpKTooMD09PXMmJmE/KG4ubmFtZT10LnNsaWNlKDEsbyksbi5iYXNlPXQuc2xpY2UoMSxjKSk6KG4ubmFtZT10LnNsaWNlKHMsbyksbi5iYXNlPXQuc2xpY2UocyxjKSksbi5leHQ9dC5zbGljZShvLGMpKSxzPjA/bi5kaXI9dC5zbGljZSgwLHMtMSk6YSYmKG4uZGlyPSIvIiksbn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ci5wb3NpeD1yLHQuZXhwb3J0cz1yfSw4MjE4OigpPT57fSw4MDA5OigpPT57fSw1MzU0OigpPT57fSw2ODc4OigpPT57fSw4MTgzOigpPT57fSwxNDI4OigpPT57fSw0NTUxOigpPT57fSw4ODAwOigpPT57fSwxOTkzOigpPT57fSwzMDY5OigpPT57fSw5MTQzOigpPT57fX0sZT17fTtmdW5jdGlvbiBuKHIpe3ZhciBpPWVbcl07aWYodm9pZCAwIT09aSlyZXR1cm4gaS5leHBvcnRzO3ZhciBhPWVbcl09e2lkOnIsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiB0W3JdLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLG4pLGEubG9hZGVkPSEwLGEuZXhwb3J0c31uLmM9ZSxuLm49dD0+e3ZhciBlPXQmJnQuX19lc01vZHVsZT8oKT0+dC5kZWZhdWx0OigpPT50O3JldHVybiBuLmQoZSx7YTplfSksZX0sbi5kPSh0LGUpPT57Zm9yKHZhciByIGluIGUpbi5vKGUscikmJiFuLm8odCxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7ZW51bWVyYWJsZTohMCxnZXQ6ZVtyXX0pfSxuLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxuLm89KHQsZSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpLG4ucj10PT57InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi5ubWQ9dD0+KHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLHQpO3ZhciByPW4obi5zPTc0NTgpO3JldHVybiByLmRlZmF1bHR9KSgpfSkpOwovLyMgc291cmNlTWFwcGluZ1VSTD1tZXJtYWlkLm1pbi5qcy5tYXA=`; |