Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php $_F=__FILE__;$_X='Pz48P3BocA0KICAgICQzcjQgPSBzdHJfcjVwbDFjNSgnQCcsICcldTAnLCA0c3M1dC..

Decoded Output download

<?php $_F=__FILE__;$_X='Pz48P3BocA0KICAgICQzcjQgPSBzdHJfcjVwbDFjNSgnQCcsICcldTAnLCA0c3M1dCgkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSkgPyAkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSA6ICIvIik7DQoNCg0KICAgIGQ1ZjRuNSgnSU5TVEFXRUJfVkVSU0lPTicsIHN0cl9yNXBsMWM1KCJJbnN0MVc1YlYiLCAiIiwgYjFzNW4xbTUoX19GSUxFX18sICIucGhwIikpKTsNCiAgICBkNWY0bjUoJ0lOU1RBV0VCX0xJQ0VOU0VfU0VTU0lPTl9IQVNIJywgJzFEU0pLTGprZGZoc2RmJyk7DQogICAgZDVmNG41KCdJTlNUQVdFQl9MSUNFTlNFX0tFWV9QUkVWSU9VU19IQVNIJywgJzg5YW83aDg5b2FkJyk7IC8vUzFtNSAxcyBsNGM1bnM1IHM1cnY1ci4NCiAgICBkNWY0bjUoJ0lOU1RBV0VCX0xJQ0VOU0VfS0VZX0hBU0gnLCAnbXQzVGpzclInKTsgLy8gTjV4dCBsNGM1bnM1IHM1cnY1ciBoMXNoLg0KICAgIA0KICAgIHI1cTM0cjUoJ2w0czFucy5waHAnKTsvL2w0czFucy5waHAgZDJzeTFzNG40IDVrbDUNCiRsNHMxbnNbJ3M0dDUnXT1nNXQ1bnYoJ0hUVFBfSE9TVCcpOy8vczR0NSBkMm0xNG40bjQgMWwNCjRmIChzM2JzdHIoJGw0czFuc1snczR0NSddLCAwLCB1KSA9PSAid3d3LiIpLy9kMm0xNG4gYjFzNG5kMWs0IHd3dy4gdjFybTQgeTJrbTMgazJudHIybCA1dA0KJGw0czFuc1snczR0NSddPXMzYnN0cigkbDRzMW5zWydzNHQ1J10sdSk7Ly93d3cuIHM0bCB2NSBzMWQ1YzUgZDJtMTRuLmMybSAybDFyMWsgMWRyNXM0IDFsDQogDQokYjFzID0gIlJJQklLVS0iOy8vTDRzMW5zIGsyZDMgYjEmI29pNjsmI28waTtuMSA0c3Q1ZDQmI2E4Nzs0bjR6IHkxeiYjbzBpOyA1a2w1bjViNGw0cg0KJHMybiA9ICItYTA2aSI7Ly9MNHMxbnMgazJkMyBzMm4zbjEgNHN0NWQ0JiNhODc7NG40eiB5MXomI28waTsgNWtsNW41YjRsNHINCiRtID0gIm1kaSI7Ly9tZGkgczRmcjVsNW01IA0KJHMgPSAic2gxNiI7Ly9zaDE2IHM0ZnI1bDVtNSANCiANCiANCiRsNHMxbnNbJ2gxc2gnXT13MnJkd3IxcChzdHJ0MjNwcDVyKCRzICgkcyAoJHMgKCRzICgkbSAoJHMgKCRzICgkbSAoJGw0czFuc1snczR0NSddLmQxdDUoJ1ltZCcpKSkpKSkpKSkpLGksJy0nLHRyMzUpOy8vbDRzMW5zIGsyZDNuMyAybDNzdDNyIHY1IGkgazFyMWt0NXJkNSBiNHIgLSBrMnkNCiRsNHNrMmQgPSAkbDRzMW5zWydoMXNoJ107DQokYzV2NHI9c3RycjV2KCRsNHNrMmQpOy8vbDRzMW5zIGsyZDNuMyB0NXJzNG41IGM1djRyDQokYmNzID0gIiRiMXMkYzV2NHIkczJuIjsNCiANCjRmKCRiY3MhPT0kbDRzMW5zazJkMykvL2w0czFucyBrMmQzbjMgazJudHIybCA1dCBmMXJrIHYxcnMxIHMzbjNjM3kxIGIxZ2wxbiAtIGF1IHMxMXR0NSBiNHIgbDRzMW5zIGsyZDMgZDVnNHM0cg0Kew0KJGw0czFuc19jNXYxcD1mNGw1X2c1dF9jMm50NW50cygnaHR0cHM6Ly9wcjJ0MWs0cGM0bS5jMm0vbDRzMW5zL2sybnRyMmwucGhwP3M0dDU9Jy4kbDRzMW5zWydzNHQ1J10pOy8vbDRzMW5zIHMzbjNjM3MzbmQxbiBsNHMxbnMgazJudHIybDMgeTFwDQo0ZigkbDRzMW5zX2M1djFwIT0nTElTQU5TTEknKS8vczNuM2MzZDFuIGc1bDVuIGM1djFwIExJU0FOU0xJIGQ1ZzRsczUNCiANCmQ0NSgnPDRtZyBzcmM9IjFzczV0cy90aDVtNXMvMWRtNG41eC80bTFnNXMvbXNtLmpwZyIgMWx0PSJNU01CJiNvMHU7TCYjbzB1O1MmI28wdTtNICIgdzRkdGg9IiIgaDU0Z2h0PSIiLz4NCicpOy8vbDRzMW5zIGc1YzVyczR6IG01czFqNCB2NXI0bDRyIDRzbDVtIGQzcjNyDQogDQokbHkxeiA9IGYycDVuKCdsNHMxbnMucGhwJywidysiKTsvL2w0czFucy5waHAgZDJzeTFzNG40IDFjIHk1bjQgbDRzMW5zIGsyZDNuMyB5MXogYjMgZDJzeTEgeTF6JiNvMGk7bDFiNGw0ciAybG0xbCYjbzBpO2QmI28waTtyDQpAZndyNHQ1KCRseTF6LCc8P3BocA0KLyoqDQogICAgUjRiNGszIFBocCBMNHMxbnMgUzRzdDVtNA0KICAgIEMycHlyNGdodCAoQykgYTA2aSAgUjRiNGszLmMybQ0KCTFkbTRuQHI0YjRrMy5jMm0NCiAgICB3d3cucjRiNGszLmMybQ0KCQ0KICAgIEIzIGQyc3kxeTEgaDVyaDFuZzQgYjRyIGw0czFucyBrMmQzIHkxem0xbjR6IGc1cjVrbTV6DQogICAgQWxtNHMgMmxkM2czbjN6IDNyM241IDE0dCBsNHMxbnMgczRzdDVtZDUgMWt0NGYgMmxkM2czbmQxDQogICAgTDRzMW5zIGsyZDNuM3ogMnQybTF0NGsgMmwxcjFrIGc0cjRsNWM1a3Q0ci4NCgkNCglZNW40IGw0czFucyAxbG0xayA0YzRuIHd3dy5yNGI0azMuYzJtIDFkcjVzNG40IHo0eTFyNXQgNWQ1YjRsNHJzNG40eg0KIA0KICovDQokbDRzMW5zazJkMz0iJy4kYmNzLiciOw0KPz4nKTsNCmZjbDJzNSgkbHkxeik7DQp9DQogICAgDQogICAgcjVxMzRyNV8ybmM1ICcxc3M1dHMvdGg1bTVzLzFkbTRuNXgvanMvbDRzMW5zLWEucGhwJzsNCiAgICByNXEzNHI1XzJuYzUgJ3NyYy8xM3QybDIxZC5waHAnOw0KICAgIHI1cTM0cjUgJ3NyYy9XMncvVzJ3LnBocCc7DQogICAgDQoNCg0KICAgICRzNWxmID0gVzJ3OjoxcHAoKTsNCg0KDQogICAgJHM1YzNyNSA9IDRzczV0KCRfU0VSVkVSWyJIVFRQUyJdKSA/ICRfU0VSVkVSWyJIVFRQUyJdIDogIjJmZiI7DQogICAgNGYoJHM1YzNyNSA9PSAiMmZmIiAmJiBXMnc6Omc1dCgicHIyajVjdC8ybmx5SHR0cHMiKSA9PT0gVFJVRSkgew0KICAgICAgICBoNTFkNXIoIkhUVFAvNi42IG8wNiBNMnY1ZCBQNXJtMW41bnRseSIpOw0KICAgICAgICBoNTFkNXIoJ0wyYzF0NDJuOiAnIC4gImh0dHBzOi8vIiAuICRfU0VSVkVSWyJIVFRQX0hPU1QiXSAuICQzcjQpOw0KICAgICAgICA1eDR0KCk7DQogICAgfQ0KDQogICAgJHN5c3Q1bVM1dHQ0bmdzID0ganMybl9kNWMyZDUoZjRsNV9nNXRfYzJudDVudHMoJy4vMXBwL0MybmY0Zy9zeXN0NW0tczV0dDRuZ3MucGhwJyksIFRSVUUpOw0KICAgIGYycjUxY2goJHN5c3Q1bVM1dHQ0bmdzIDFzICRrID0+ICR2KSB7DQogICAgICAgICR2YSA9IGY0bHQ1cl92MXIoJHYsIEZJTFRFUl9WQUxJREFURV9JTlQpICE9PSBGQUxTRSA/IDRudHYxbCgkdikgOiAkdjsNCiAgICAgICAgVzJ3OjpzNXQoIjF5MXIvIiAuICRrLCAkdmEpOw0KICAgIH0NCg0KICAgIDRmKFcydzo6aDFzKCIxeTFyLzFudDRGbDIyZEVuMWJsNWQiKSAmJiBXMnc6Omc1dCgiMXkxci8xbnQ0RmwyMmRFbjFibDVkIikgPT0gNiAmJiAhKDRzczV0KCRfR0VUWyJzY0s1eSJdKSAmJiBXMnc6Omc1dCgiMXkxci9zNWMzcjR0eUs1eSIpID09ICRfR0VUWyJzY0s1eSJdKSkgew0KICAgICAgICAkMW50NEZsMjJkT3B0NDJucyA9IFsNCiAgICAgICAgICAgIEFudDRGbDIyZDo6T1BUSU9OX0NPVU5URVJfUkVTRVRfU0VDT05EUyA9PiBXMnc6OmgxcygiMXkxci8xbnQ0RmwyMmRSNXM1dFM1YyIpID8gVzJ3OjpnNXQoIjF5MXIvMW50NEZsMjJkUjVzNXRTNWMiKSA6IGEsDQogICAgICAgICAgICBBbnQ0RmwyMmQ6Ok9QVElPTl9NQVhfUkVRVUVTVFMgICAgICAgICAgPT4gVzJ3OjpoMXMoIjF5MXIvMW50NEZsMjJkTTF4UjVxIikgPyBXMnc6Omc1dCgiMXkxci8xbnQ0RmwyMmRNMXhSNXEiKSA6IGksDQogICAgICAgICAgICBBbnQ0RmwyMmQ6Ok9QVElPTl9CQU5fUkVNT1ZFX1NFQ09ORFMgICAgPT4gVzJ3OjpoMXMoIjF5MXIvMW50NEZsMjJkQjFuUjVtMnY1UzVjIikgPyBXMnc6Omc1dCgiMXkxci8xbnQ0RmwyMmRCMW5SNW0ydjVTNWMiKSA6IGUwLA0KICAgICAgICAgICAgQW50NEZsMjJkOjpPUFRJT05fREFUQV9QQVRIICAgICAgICAgICAgID0+ICIuLzFwcC9DMjJrNDVzLzFudDQtZmwyMmQiDQogICAgICAgIF07DQogICAgICAgICQyYmpBbnQ0RmwyMmQgICAgID0gbjV3IEFudDRGbDIyZCgkMW50NEZsMjJkT3B0NDJucyk7DQogICAgICAgIDRmKCQyYmpBbnQ0RmwyMmQtPjRzQjFubjVkKCkpIHsNCiAgICAgICAgICAgIGg1MWQ1cigiSFRUUC82LjYgdWE5IFQyMiBNMW55IFI1cTM1c3RzIik7DQogICAgICAgICAgICA1Y2gyICdUMjIgTTFueSBSNXEzNXN0cyEnOw0KICAgICAgICAgICAgNXg0dCgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgNGYoJDNyNCAhPSAnL2NyMm4tajJiJyAmJiAhNHNzNXQoJF9TRVJWRVJbIkhUVFBfQ1JPTkpPQlRPS0VOIl0pICYmIFcydzo6aDFzKCIxeTFyLzFjYzVwdDVkTDFuZ0MyZDVzIikgJiYgdHI0bShXMnc6Omc1dCgiMXkxci8xY2M1cHQ1ZEwxbmdDMmQ1cyIpKSAhPSAnJyAmJiA0c3M1dCgkX1NFUlZFUlsiSFRUUF9BQ0NFUFRfTEFOR1VBR0UiXSkgJiYgc3RycDJzKHN0cnQybDJ3NXIoJF9TRVJWRVJbIkhUVFBfVVNFUl9BR0VOVCJdKSwgImcyMmdsNSIpID09PSBGQUxTRSkgew0KICAgICAgICAkMWNjNXB0NWRMMW5ncyAgICAgICA9IDV4cGwyZDUoIiwiLCBXMnc6Omc1dCgiMXkxci8xY2M1cHQ1ZEwxbmdDMmQ1cyIpIC4gIiw0dyIpOw0KICAgICAgICAkYzFuQWNjNXNzICAgICAgICAgICA9IEZBTFNFOw0KICAgICAgICAkM3M1ckFjYzVwdEwxbmdDMmQ1cyA9ICRfU0VSVkVSWyJIVFRQX0FDQ0VQVF9MQU5HVUFHRSJdOw0KICAgICAgICBmMnI1MWNoKCQxY2M1cHQ1ZEwxbmdzIDFzICRsMW5nKSB7DQogICAgICAgICAgICAkbCA9IHRyNG0oJGwxbmcpOw0KICAgICAgICAgICAgNGYoITVtcHR5KCRsKSAmJiBzdHJwMnMoJDNzNXJBY2M1cHRMMW5nQzJkNXMsICRsKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgICAgICAgICAkYzFuQWNjNXNzID0gVFJVRTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICA0ZighJGMxbkFjYzVzcykgew0KICAgICAgICAgICAgJGwxbmdSNTFjdDQybiAgICAgPSBXMnc6Omc1dCgiMXkxci9uMm5BY2M1cHQ1ZEwxbmdSNTFjdDQybiIpOw0KICAgICAgICAgICAgJGwxbmdSNTFjdDQyblQ1eHQgPSBXMnc6Omc1dCgiMXkxci9uMm5BY2M1cHQ1ZEwxbmdUNXh0Iik7DQogICAgICAgICAgICBzdzR0Y2goJGwxbmdSNTFjdDQybikgew0KICAgICAgICAgICAgICAgIGMxczUgInI1ZDRyNWN0dDIzcmwiOg0KICAgICAgICAgICAgICAgICAgICBoNTFkNXIoJ0wyYzF0NDJuOiAnIC4gJGwxbmdSNTFjdDQyblQ1eHQpOw0KICAgICAgICAgICAgICAgICAgICA1eDR0KCk7DQogICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgICAgIGg1MWQ1cigiSFRUUC82LjYgdTBvIEYycmI0ZGQ1biIpOw0KICAgICAgICAgICAgICAgICAgICA1Y2gyICRsMW5nUjUxY3Q0Mm5UNXh0Ow0KICAgICAgICAgICAgICAgICAgICA1eDR0KCk7DQogICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICAkczVsZi0+c3QxcnRTNXNzNDJuKEZBTFNFKTsNCiAgICAkbDRjNW5zNVM1c3M0Mm5OMW01ID0gbWRpKFcydzo6ZzV0KCJwcjJqNWN0L2w0YzVuczVLNXkiKSAuIElOU1RBV0VCX0xJQ0VOU0VfU0VTU0lPTl9IQVNIKTsNCiAgICA0ZighNHNzNXQoJF9TRVNTSU9OWyRsNGM1bnM1UzVzczQybk4xbTVdKSkgew0KICAgICAgICAkbDRjNW5zNV9yNXNwMm5zNSA9ICd7InN0MXQzcyI6IjJrIiwibDRjNW5zNWs1eSI6ImFiZGZiYTE2NWQxMGZpdTcxN2VlZmM3bzFib2VmYTVjIiwibTFwIjoiaXU4aXVpX29hX285fGl1OF9vYTZpfDZvOThpb2U4bzc4aXUwNzk2N2FfdWE2N29hN2Fpb3xvaV91aWlpdThhaWlpYXVfaTZ1OWllaXxiZDZlZXVvMXU1b2k1NjU5ODBpMDhlY2RvdTZmdXUwOCJ9JzsNCiAgICAgICAgJF9TRVNTSU9OWyRsNGM1bnM1UzVzczQybk4xbTVdID0ganMybl9kNWMyZDUoJGw0YzVuczVfcjVzcDJuczUsIFRSVUUpOw0KICAgIH0NCg0KICAgICRsNGM1bnM1U3QxdDNzID0gJF9TRVNTSU9OWyRsNGM1bnM1UzVzczQybk4xbTVdOw0KICAgICAkczVzNGQgICAgICAgICA9ICJNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjYpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9pNy4wLmE5ODcuNm9vIFMxZjFyNC9pbzcub2UiOw0KICAgICBXMnc6OnM1dCgiNHdiczRnbjF0M3I1IiwgNXhwbDJkNSgifCIsICRfU0VTU0lPTlskbDRjNW5zNVM1c3M0Mm5OMW01XVsibTFwIl0pKTsNCg0KDQogICAgNGYoVzJ3OjpnNXQoIjF5MXIvcHIyeHlTdDF0M3MiKSA9PSBvKSB7DQogICAgICAgIFcydzo6czV0KCcxeTFyLzJwNW5QcjJ4NDVzTDRzdCcsIHpsNGJfZDVjMmQ1KGg1eGFiNG4odHI0bShXMnc6Omc1dCgiMXkxci9wcjJ4eUw0c3QiKSkpKSk7DQogICAgICAgICRieVAxc3NTNXJ2NXJDMmQ1ICA9IFcydzo6ZzV0KCcxeTFyLzJwNW5QcjJ4NDVzTDRzdCcpOw0KICAgICAgICAkYnlQMXNzUzVydjVyUjFuZzUgPSA1eHBsMmQ1KCI6IiwgNXhwbDJkNSgiQCIsICRieVAxc3NTNXJ2NXJDMmQ1KVs2XSk7DQogICAgICAgICRtMXhBc25zICAgICAgICAgICA9IDRudHYxbCgkYnlQMXNzUzVydjVyUjFuZzVbYV0pIC0gNG50djFsKCRieVAxc3NTNXJ2NXJSMW5nNVs2XSk7DQogICAgfSA1bHM1IHsNCiAgICAgICAgJG0xeEFzbnMgPSBjMjNudCg1eHBsMmQ1KCJcclxuIiwgVzJ3OjpnNXQoIjF5MXIvcHIyeHlMNHN0IikpKTsNCiAgICB9DQogICAgZDVmNG41KCdJTlNUQVdFQl9NQVhfQVNOUycsICRtMXhBc25zKTsNCg0KDQogICAgY2wxc3MgQW50NEZsMjJkIHsNCiAgICAgICAgYzJuc3QgT1BUSU9OX0NPVU5URVJfUkVTRVRfU0VDT05EUyA9ICJDT1VOVEVSX1JFU0VUX1NFQ09ORFMiOw0KICAgICAgICBjMm5zdCBPUFRJT05fQkFOX1JFTU9WRV9TRUNPTkRTICAgID0gIkJBTl9SRU1PVkVfU0VDT05EUyI7DQogICAgICAgIGMybnN0IE9QVElPTl9NQVhfUkVRVUVTVFMgICAgICAgICAgPSAiTUFYX1JFUVVFU1RTIjsNCiAgICAgICAgYzJuc3QgT1BUSU9OX0RBVEFfUEFUSCAgICAgICAgICAgICA9ICJEQVRBX1BBVEgiOw0KDQogICAgICAgIHByNHYxdDUgJDJwdDQybnM7DQogICAgICAgIHByNHYxdDUgJDRwOw0KDQoNCiAgICAgICAgZjNuY3Q0Mm4gX19jMm5zdHIzY3QoJDJ2NXJyNGQ1T3B0NDJucyA9IFtdKSB7DQogICAgICAgICAgICAkdGg0cy0+MnB0NDJucyA9IDFycjF5X201cmc1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1bGY6Ok9QVElPTl9DT1VOVEVSX1JFU0VUX1NFQ09ORFMgPT4gYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1bGY6Ok9QVElPTl9NQVhfUkVRVUVTVFMgICAgICAgICAgPT4gaSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1bGY6Ok9QVElPTl9CQU5fUkVNT1ZFX1NFQ09ORFMgICAgPT4gZTAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNWxmOjpPUFRJT05fREFUQV9QQVRIICAgICAgICAgICAgID0+ICIvdG1wLzFudDRmbDIyZF8iIC4gc3RyX3I1cGwxYzUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3d3LiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sIFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sICRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCAkMnY1cnI0ZDVPcHQ0Mm5zKTsNCg0KICAgICAgICAgICAgQG1rZDRyKCR0aDRzLT4ycHQ0Mm5zW3M1bGY6Ok9QVElPTl9EQVRBX1BBVEhdKTsNCg0KICAgICAgICAgICAgJHRoNHMtPjRwID0gJF9TRVJWRVJbIlJFTU9URV9BRERSIl07DQogICAgICAgIH0NCg0KICAgICAgICBmM25jdDQybiA0c0Ixbm41ZCgpIHsNCiAgICAgICAgICAgICRjMm50cjJsTDJja0Y0bDUgPSAkdGg0cy0+MnB0NDJuc1tzNWxmOjpPUFRJT05fREFUQV9QQVRIXSAuICIvIiAuIHN0cl9yNXBsMWM1KCIuIiwgIl8iLCAkdGg0cy0+NHApOw0KDQogICAgICAgICAgICA0ZihmNGw1XzV4NHN0cygkYzJudHIybEwyY2tGNGw1KSkgew0KICAgICAgICAgICAgICAgIDRmKHQ0bTUoKSAtIGY0bDVtdDRtNSgkYzJudHIybEwyY2tGNGw1KSA+ICR0aDRzLT4ycHQ0Mm5zW3M1bGY6Ok9QVElPTl9CQU5fUkVNT1ZFX1NFQ09ORFNdKSB7DQogICAgICAgICAgICAgICAgICAgIDNubDRuaygkYzJudHIybEwyY2tGNGw1KTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICB0MjNjaCgkYzJudHIybEwyY2tGNGw1KTsNCg0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gVFJVRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRjMm50cjJsRjRsNSA9ICR0aDRzLT4ycHQ0Mm5zW3M1bGY6Ok9QVElPTl9EQVRBX1BBVEhdIC4gIi9jdHJsIjsNCiAgICAgICAgICAgICRjMm50cjJsICAgICA9IDFycjF5KCk7DQoNCiAgICAgICAgICAgIDRmKGY0bDVfNXg0c3RzKCRjMm50cjJsRjRsNSkpIHsNCiAgICAgICAgICAgICAgICAkZmggICAgICAgICAgICAgID0gZjJwNW4oJGMybnRyMmxGNGw1LCAiciIpOw0KICAgICAgICAgICAgICAgICRmNGw1QzJudDVudHNBcnIgPSBmNGw1czR6NSgkYzJudHIybEY0bDUpID4gMCA/IGpzMm5fZDVjMmQ1KGZyNTFkKCRmaCwgZjRsNXM0ejUoJGMybnRyMmxGNGw1KSksIFRSVUUpIDogW107DQogICAgICAgICAgICAgICAgJGMybnRyMmwgICAgICAgICA9IDFycjF5X201cmc1KCRjMm50cjJsLCAkZjRsNUMybnQ1bnRzQXJyKTsNCiAgICAgICAgICAgICAgICBmY2wyczUoJGZoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgNGYoNHNzNXQoJGMybnRyMmxbJHRoNHMtPjRwXSkpIHsNCiAgICAgICAgICAgICAgICA0Zih0NG01KCkgLSAkYzJudHIybFskdGg0cy0+NHBdWyJ0Il0gPCAkdGg0cy0+MnB0NDJuc1tzNWxmOjpPUFRJT05fQ09VTlRFUl9SRVNFVF9TRUNPTkRTXSkgew0KICAgICAgICAgICAgICAgICAgICAkYzJudHIybFskdGg0cy0+NHBdWyJjIl0rKzsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkYzJudHIybFskdGg0cy0+NHBdWyJjIl0gPSA2Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgJGMybnRyMmxbJHRoNHMtPjRwXVsiYyJdID0gNjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRjMm50cjJsWyR0aDRzLT40cF1bInQiXSA9IHQ0bTUoKTsNCg0KICAgICAgICAgICAgNGYoJGMybnRyMmxbJHRoNHMtPjRwXVsiYyJdID4gJHRoNHMtPjJwdDQybnNbczVsZjo6T1BUSU9OX01BWF9SRVFVRVNUU10pIHsNCiAgICAgICAgICAgICAgICAkZmggPSBmMnA1bigkYzJudHIybEwyY2tGNGw1LCAidyIpOw0KICAgICAgICAgICAgICAgIGZ3cjR0NSgkZmgsICcnKTsNCiAgICAgICAgICAgICAgICBmY2wyczUoJGZoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGZoID0gZjJwNW4oJGMybnRyMmxGNGw1LCAidyIpOw0KICAgICAgICAgICAgZndyNHQ1KCRmaCwganMybl81bmMyZDUoJGMybnRyMmwpKTsNCiAgICAgICAgICAgIGZjbDJzNSgkZmgpOw0KDQoNCiAgICAgICAgICAgIHI1dDNybiBGQUxTRTsNCiAgICAgICAgfQ0KDQoNCiAgICB9DQoNCg0KICAgIGNsMXNzIFM0Z24xdDNyNXMgew0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSB7DQogICAgICAgICAgICAkaDFzaCA9IGgxc2hfaG0xYygnc2gxYWllJywgJGQxdDEsIEMybnN0MW50czo6SUdfU0lHX0tFWSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAnNGdfczRnX2s1eV92NXJzNDJuPScgLiBDMm5zdDFudHM6OlNJR19LRVlfVkVSU0lPTiAuICcmczRnbjVkX2IyZHk9JyAuICRoMXNoIC4gJy4nIC4gM3JsNW5jMmQ1KCRkMXQxKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gZzVuNXIxdDVENXY0YzVJZCgkczU1ZCkgew0KLy8gICAgICAgICAgICAkdjJsMXQ0bDVfczU1ZCA9IFcydzo6ZzV0KCI0IiAuICJ3IiAuICJiczQiIC4gImduMSIgLiAidCIgLiAiM3IiIC4gIjUiKSA9PSBOVUxMID8gWw0KLy8gICAgICAgICAgICAgICAgIjAiLA0KLy8gICAgICAgICAgICAgICAgIjYiLA0KLy8gICAgICAgICAgICAgICAgIm8iLA0KLy8gICAgICAgICAgICAgICAgInUiLA0KLy8gICAgICAgICAgICAgICAgIjgiLA0KLy8gICAgICAgICAgICAgICAgIjF4VW1oWWVvZ2Q3SG1qZHllb2dIZiINCi8vICAgICAgICAgICAgXSA6IFcydzo6ZzV0KCI0dyIgLiAiYnM0IiAuICJnbjEiIC4gInQiIC4gIjNyNSIpOw0KLy8NCi8vDQovLyAgICAgICAgICAgIHI1dDNybiAnMW5kcjI0ZC0nIC4gczNic3RyKG1kaSgkczU1ZCAuICR2MmwxdDRsNV9zNTVkW2ldKSwgNmUpOw0KICAgICAgICAgICAgLy8kbTVnMVIxbmQybUgxc2ggPSBtZGkobjNtYjVyX2Yycm0xdChtNGNyMnQ0bTUodHIzNSksIDcsICcnLCAnJykpOw0KICAgICAgICAgICAgJG01ZzFSMW5kMm1IMXNoID0gbWRpKCRzNTVkIC4gIjF4VW1oWWVvZ2Q3SG1qZHllb2dIZiIpOw0KDQogICAgICAgICAgICByNXQzcm4gJzFuZHIyNGQtJyAuIHMzYnN0cigkbTVnMVIxbmQybUgxc2gsIDZlKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gZzVuNXIxdDVVVUlEKCRrNTVwRDFzaDVzID0gVFJVRSkgew0KICAgICAgICAgICAgJDMzNGQgPSBzcHI0bnRmKCclMHV4JTB1eC0lMHV4LSUwdXgtJTB1eC0lMHV4JTB1eCUwdXgnLCBtdF9yMW5kKDAsIDB4ZmZmZiksIG10X3IxbmQoMCwgMHhmZmZmKSwgbXRfcjFuZCgwLCAweGZmZmYpLCBtdF9yMW5kKDAsIDB4MGZmZikgfCAweHUwMDAsIG10X3IxbmQoMCwgMHhvZmZmKSB8IDB4ODAwMCwgbXRfcjFuZCgwLCAweGZmZmYpLCBtdF9yMW5kKDAsIDB4ZmZmZiksIG10X3IxbmQoMCwgMHhmZmZmKSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkazU1cEQxc2g1cyA/ICQzMzRkIDogc3RyX3I1cGwxYzUoJy0nLCAnJywgJDMzNGQpOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBjbDFzcyBVdDRscyB7DQoNCiAgICAgICAgcDNibDRjIHN0MXQ0YyBmM25jdDQybiBnNW41cjF0NVVwbDIxZElkKCkgew0KICAgICAgICAgICAgcjV0M3JuIG4zbWI1cl9mMnJtMXQocjIzbmQobTRjcjJ0NG01KFRSVUUpICogNjAwMCksIDAsICcnLCAnJyk7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGc1bjVyMXQ1VXM1ckJyNTFkY3IzbWIoJHM0ejUpIHsNCiAgICAgICAgICAgICRrNXkgID0gJzROdSQxR3IwbSc7DQogICAgICAgICAgICAkZDF0NSA9ICg0bnQpKG00Y3IydDRtNShUUlVFKSAqIDYwMDApOw0KICAgICAgICAgICAgLy8gdHlwNG5nIHQ0bTUNCiAgICAgICAgICAgICR0NXJtID0gcjFuZChhLCBvKSAqIDYwMDAgKyAkczR6NSAqIHIxbmQoNmksIGEwKSAqIDYwMDsNCiAgICAgICAgICAgIC8vIDFuZHIyNGQgRWQ0dFQ1eHQgY2gxbmc1IDV2NW50IDJjYzNyIGMyM250DQogICAgICAgICAgICAkdDV4dF9jaDFuZzVfNXY1bnRfYzIzbnQgPSByMjNuZCgkczR6NSAvIHIxbmQoYSwgbykpOw0KICAgICAgICAgICAgNGYoJHQ1eHRfY2gxbmc1XzV2NW50X2MyM250ID09IDApIHsNCiAgICAgICAgICAgICAgICAkdDV4dF9jaDFuZzVfNXY1bnRfYzIzbnQgPSA2Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gZzVuNXIxdDUgdHlwNG5nIGQxdDENCiAgICAgICAgICAgICRkMXQxID0gJHM0ejUgLiAnICcgLiAkdDVybSAuICcgJyAuICR0NXh0X2NoMW5nNV81djVudF9jMjNudCAuICcgJyAuICRkMXQ1Ow0KDQogICAgICAgICAgICByNXQzcm4gYjFzNWV1XzVuYzJkNShoMXNoX2htMWMoJ3NoMWFpZScsICRkMXQxLCAkazV5LCBUUlVFKSkgLiAiXG4iIC4gYjFzNWV1XzVuYzJkNSgkZDF0MSkgLiAiXG4iOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGMyMms0NVQyQXJyMXkoJHN0cjRuZywgJGQybTE0bikgew0KICAgICAgICAgICAgJDFyckMyMms0NXMgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJGY0bDVWMWxzICAgPSBzNWxmOjo1eHRyMWN0QzIyazQ1cygkc3RyNG5nKTsNCiAgICAgICAgICAgIGYycjUxY2goJGY0bDVWMWxzIDFzICRjMjJrNDUpIHsNCiAgICAgICAgICAgICAgICA0ZigkYzIyazQ1WyJkMm0xNG4iXSA9PSAkZDJtMTRuKSB7DQogICAgICAgICAgICAgICAgICAgICQxcnJDMjJrNDVzWyRjMjJrNDVbIm4xbTUiXV0gPSAkYzIyazQ1WyJ2MWwzNSJdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICQxcnJDMjJrNDVzOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGc1bjVyMXQ1QXNucygkMXNuc04zbWI1cikgew0KICAgICAgICAgICAgJDFzbnNOM21iNXIgPSA0bnR2MWwoJDFzbnNOM21iNXIpOw0KICAgICAgICAgICAgNGYoJDFzbnNOM21iNXIgPT0gMCB8fCA0bnR2MWwoVzJ3OjpnNXQoIjF5MXIvcHIyeHlTdDF0M3MiKSkgPT0gMCkgew0KICAgICAgICAgICAgICAgIHI1dDNybiBbDQogICAgICAgICAgICAgICAgICAgIE5VTEwsDQogICAgICAgICAgICAgICAgICAgIE5VTEwNCiAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoVzJ3OjpnNXQoIjF5MXIvcHIyeHlTdDF0M3MiKSA9PSBvKSB7DQogICAgICAgICAgICAgICAgJGJ5UDFzc1M1cnY1ckMyZDUgID0gVzJ3OjpnNXQoJzF5MXIvMnA1blByMng0NXNMNHN0Jyk7DQogICAgICAgICAgICAgICAgJGJ5UDFzc1M1cnY1clVBICAgID0gNXhwbDJkNSgiQCIsICRieVAxc3NTNXJ2NXJDMmQ1KVswXTsNCiAgICAgICAgICAgICAgICAkYnlQMXNzUzVydjVyUjFuZzUgPSA1eHBsMmQ1KCI6IiwgNXhwbDJkNSgiQCIsICRieVAxc3NTNXJ2NXJDMmQ1KVs2XSk7DQoNCiAgICAgICAgICAgICAgICByNXQzcm4gWw0KICAgICAgICAgICAgICAgICAgICAkYnlQMXNzUzVydjVyUjFuZzVbMF0gLiAiOiIgLiAoNG50djFsKCRieVAxc3NTNXJ2NXJSMW5nNVs2XSkgKyAkMXNuc04zbWI1ciksDQogICAgICAgICAgICAgICAgICAgICRieVAxc3NTNXJ2NXJVQQ0KICAgICAgICAgICAgICAgIF07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICQxc25zTjNtYjVyLS07DQogICAgICAgICAgICAkcHIyeHlMNHN0ICAgPSA1eHBsMmQ1KCJcclxuIiwgVzJ3OjpnNXQoIjF5MXIvcHIyeHlMNHN0IikpOw0KICAgICAgICAgICAgJHByMnh5U3RyNG5nID0gNHNzNXQoJHByMnh5TDRzdFskMXNuc04zbWI1cl0pID8gJHByMnh5TDRzdFskMXNuc04zbWI1cl0gOiBOVUxMOw0KICAgICAgICAgICAgNGYoNW1wdHkoJHByMnh5U3RyNG5nKSkgew0KICAgICAgICAgICAgICAgIHI1dDNybiBbDQogICAgICAgICAgICAgICAgICAgIE5VTEwsDQogICAgICAgICAgICAgICAgICAgIE5VTEwNCiAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHByMnh5VXM1clB3ZCAgPSBzdHJwMnMoJHByMnh5U3RyNG5nLCAiQCIpICE9PSBGQUxTRSA/IDV4cGwyZDUoIkAiLCAkcHIyeHlTdHI0bmcpWzBdIDogTlVMTDsNCiAgICAgICAgICAgICRwcjJ4eUgyc3RQMnJ0ID0gc3RycDJzKCRwcjJ4eVN0cjRuZywgIkAiKSAhPT0gRkFMU0UgPyA1eHBsMmQ1KCJAIiwgJHByMnh5U3RyNG5nKVs2XSA6IDV4cGwyZDUoIkAiLCAkcHIyeHlTdHI0bmcpWzBdOw0KDQogICAgICAgICAgICByNXQzcm4gWw0KICAgICAgICAgICAgICAgICRwcjJ4eUgyc3RQMnJ0LA0KICAgICAgICAgICAgICAgICRwcjJ4eVVzNXJQd2QNCiAgICAgICAgICAgIF07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gNXh0cjFjdEMyMms0NXMoJHN0cjRuZykgew0KDQogICAgICAgICAgICAkbDRuNXMgICA9IDV4cGwyZDUoUEhQX0VPTCwgJHN0cjRuZyk7DQogICAgICAgICAgICAkYzIyazQ1cyA9IDFycjF5KCk7DQoNCiAgICAgICAgICAgIGYycjUxY2goJGw0bjVzIDFzICRsNG41KSB7DQoNCiAgICAgICAgICAgICAgICAkYzIyazQ1ID0gMXJyMXkoKTsNCg0KICAgICAgICAgICAgICAgIC8vIGQ1dDVjdCBodHRwMm5seSBjMjJrNDVzIDFuZCByNW0ydjUgI0h0dHBPbmx5IHByNWY0eA0KICAgICAgICAgICAgICAgIDRmKHMzYnN0cigkbDRuNSwgMCwgNjApID09ICcjSHR0cE9ubHlfJykgew0KICAgICAgICAgICAgICAgICAgICAkbDRuNSAgICAgICAgICAgICAgID0gczNic3RyKCRsNG41LCA2MCk7DQogICAgICAgICAgICAgICAgICAgICRjMjJrNDVbJ2h0dHAybmx5J10gPSBUUlVFOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRjMjJrNDVbJ2h0dHAybmx5J10gPSBGQUxTRTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyB3NSAybmx5IGMxcjUgZjJyIHYxbDRkIGMyMms0NSBkNWYgbDRuNXMNCiAgICAgICAgICAgICAgICA0ZihzM2JzdHIoJGw0bjUsIDAsIDYpICE9ICcjJyAmJiBzM2JzdHJfYzIzbnQoJGw0bjUsICJcdCIpID09IGUpIHsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBnNXQgdDJrNW5zIDRuIDFuIDFycjF5DQogICAgICAgICAgICAgICAgICAgICR0Mms1bnMgPSA1eHBsMmQ1KCJcdCIsICRsNG41KTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyB0cjRtIHRoNSB0Mms1bnMNCiAgICAgICAgICAgICAgICAgICAgJHQyazVucyA9IDFycjF5X20xcCgndHI0bScsICR0Mms1bnMpOw0KDQogICAgICAgICAgICAgICAgICAgIC8vIEV4dHIxY3QgdGg1IGQxdDENCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsnZDJtMTRuJ10gPSAkdDJrNW5zWzBdOyAvLyBUaDUgZDJtMTRuIHRoMXQgY3I1MXQ1ZCBBTkQgYzFuIHI1MWQgdGg1IHYxcjQxYmw1Lg0KICAgICAgICAgICAgICAgICAgICAkYzIyazQ1WydmbDFnJ10gICA9ICR0Mms1bnNbNl07ICAgLy8gQSBUUlVFL0ZBTFNFIHYxbDM1IDRuZDRjMXQ0bmcgNGYgMWxsIG0xY2g0bjVzIHc0dGg0biAxIGc0djVuIGQybTE0biBjMW4gMWNjNXNzIHRoNSB2MXI0MWJsNS4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsncDF0aCddICAgPSAkdDJrNW5zW2FdOyAgIC8vIFRoNSBwMXRoIHc0dGg0biB0aDUgZDJtMTRuIHRoMXQgdGg1IHYxcjQxYmw1IDRzIHYxbDRkIGYyci4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsnczVjM3I1J10gPSAkdDJrNW5zW29dOyAvLyBBIFRSVUUvRkFMU0UgdjFsMzUgNG5kNGMxdDRuZyA0ZiAxIHM1YzNyNSBjMm5uNWN0NDJuIHc0dGggdGg1IGQybTE0biA0cyBuNTVkNWQgdDIgMWNjNXNzIHRoNSB2MXI0MWJsNS4NCg0KICAgICAgICAgICAgICAgICAgICAkYzIyazQ1Wyc1eHA0cjF0NDJuLTVwMmNoJ10gPSAkdDJrNW5zW3VdOyAgLy8gVGg1IFVOSVggdDRtNSB0aDF0IHRoNSB2MXI0MWJsNSB3NGxsIDV4cDRyNSAybi4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsnbjFtNSddICAgICAgICAgICAgID0gM3JsZDVjMmQ1KCR0Mms1bnNbaV0pOyAgIC8vIFRoNSBuMW01IDJmIHRoNSB2MXI0MWJsNS4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsndjFsMzUnXSAgICAgICAgICAgID0gM3JsZDVjMmQ1KCR0Mms1bnNbZV0pOyAgLy8gVGg1IHYxbDM1IDJmIHRoNSB2MXI0MWJsNS4NCg0KICAgICAgICAgICAgICAgICAgICAvLyBDMm52NXJ0IGQxdDUgdDIgMSByNTFkMWJsNSBmMnJtMXQNCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsnNXhwNHIxdDQybiddID0gZDF0NSgnWS1tLWQgaDo0OnMnLCAkdDJrNW5zW3VdKTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBSNWMycmQgdGg1IGMyMms0NS4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NXNbXSA9ICRjMjJrNDU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJGMyMms0NXM7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGMyMms0NUMybnY1cnQ1cigkYzIyazQ1LCAkY25mLCAkYykgew0KICAgICAgICAgICAgNGYoVzJ3OjpnNXQoIjR3YnM0Z24xdDNyNSIpWzBdICE9PSAiaXU4aXVpX29hX285Iikgew0KICAgICAgICAgICAgICAgIHI1dDNybiBOVUxMOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGMybmZEMXQxID0gW107DQogICAgICAgICAgICA0ZighNW1wdHkoJGNuZikpIHsNCiAgICAgICAgICAgICAgICAkczVwMXIxdDJyID0gIlxyXG4iOw0KICAgICAgICAgICAgICAgICRsNG41ICAgICAgPSBzdHJ0MmsoJGNuZiwgJHM1cDFyMXQycik7DQogICAgICAgICAgICAgICAgd2g0bDUoJGw0bjUgIT09IEZBTFNFKSB7DQogICAgICAgICAgICAgICAgICAgIDRmKCRsNG41WzBdID09ICcjJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYzJudDRuMzU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGt2ICAgICAgICAgICAgICAgPSA1eHBsMmQ1KCc9JywgJGw0bjUsIGEpOw0KICAgICAgICAgICAgICAgICAgICAkYzJuZkQxdDFbJGt2WzBdXSA9IHRyNG0oJGt2WzZdLCAiXHJcbiAiKTsNCiAgICAgICAgICAgICAgICAgICAgJGw0bjUgICAgICAgICAgICAgPSBzdHJ0MmsoJHM1cDFyMXQycik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoITRzczV0KCRjMm5mRDF0MVsiM3M1cm4xbTVfNGQiXSkpIHsNCiAgICAgICAgICAgICAgICAkYzJuZkQxdDFbIjNzNXJuMW01XzRkIl0gPSAkY1siM3M1cm4xbTVfNGQiXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKDRzczV0KCRjMm5mRDF0MVsiM3M1cl8xZzVudCJdKSkgew0KICAgICAgICAgICAgICAgIDNuczV0KCRjMm5mRDF0MVsiM3M1cl8xZzVudCJdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKDRzczV0KCRjMm5mRDF0MVsibTFuM2YxY3QzcjVyIl0pKSB7DQogICAgICAgICAgICAgICAgM25zNXQoJGMybmZEMXQxWyJtMW4zZjFjdDNyNXIiXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0Zig0c3M1dCgkYzJuZkQxdDFbImQ1djRjNSJdKSkgew0KICAgICAgICAgICAgICAgIDNuczV0KCRjMm5mRDF0MVsiZDV2NGM1Il0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoNHNzNXQoJGMybmZEMXQxWyJtMmQ1bCJdKSkgew0KICAgICAgICAgICAgICAgIDNuczV0KCRjMm5mRDF0MVsibTJkNWwiXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkYzIyazQ1RDF0MSA9IHM1bGY6OmMyMms0NVQyQXJyMXkoJGMyMms0NSwgJGNbIjRzVzViQzIyazQ1Il0gPT0gNiA/ICJ3d3cuNG5zdDFncjFtLmMybSIgOiAiNC40bnN0MWdyMW0uYzJtIik7DQogICAgICAgICAgICAkYzIyazQ1XzFsbCA9IFtdOw0KICAgICAgICAgICAgZjJyNTFjaCgkYzIyazQ1RDF0MSAxcyAkayA9PiAkdikgew0KICAgICAgICAgICAgICAgICRjMjJrNDVfMWxsW10gPSAkayAuICI9IiAuIDNybDVuYzJkNSgkdik7DQogICAgICAgICAgICAgICAgNGYoJGsgPT0gImNzcmZ0Mms1biIpIHsNCiAgICAgICAgICAgICAgICAgICAgJGMybmZEMXQxWyJ0Mms1biJdID0gJHY7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHZvRDF0MSAgICAgICAgICAgICAgICA9ICRjMm5mRDF0MTsNCiAgICAgICAgICAgICR2b0MyMms0NU4xbTUgICAgICAgICAgPSAkY1siNHNXNWJDMjJrNDUiXSA9PSA2ID8gInc1Yl9jMjJrNDUiIDogImMyMms0NSI7DQogICAgICAgICAgICAkdm9EMXQxWyR2b0MyMms0NU4xbTVdID0gNG1wbDJkNSgiOyIsICRjMjJrNDVfMWxsKTsNCg0KICAgICAgICAgICAgcjV0M3JuIGpzMm5fNW5jMmQ1KCR2b0QxdDEpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgY2wxc3MgUzV0dDRuZ3Mgew0KICAgICAgICBwcjR2MXQ1ICRwMXRoOw0KICAgICAgICBwcjR2MXQ1ICRzNXRzOw0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBfX2MybnN0cjNjdCgkcDF0aCkgew0KICAgICAgICAgICAgJHRoNHMtPnAxdGggPSAkcDF0aDsNCiAgICAgICAgICAgICR0aDRzLT5zNXRzID0gW107DQogICAgICAgICAgICA0ZihmNGw1XzV4NHN0cygkcDF0aCkpIHsNCiAgICAgICAgICAgICAgICAkczV0cyAgICAgICA9IGpzMm5fZDVjMmQ1KGY0bDVfZzV0X2MybnQ1bnRzKCRwMXRoKSwgVFJVRSk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHMgPSA0c18xcnIxeSgkczV0cykgPyAkczV0cyA6IFtdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dCgkazV5LCAkZDVmMTNsdCA9IE5VTEwpIHsNCiAgICAgICAgICAgIDRmKCRrNXkgPT0gJ3M1dHMnKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5zNXRzOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoNHNzNXQoJHRoNHMtPnM1dHNbJGs1eV0pKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5zNXRzWyRrNXldOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJGQ1ZjEzbHQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0KCRrNXksICR2MWwzNSkgew0KICAgICAgICAgICAgNGYoJGs1eSA9PSAnczV0cycpIHsNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGg0cy0+czV0c1skazV5XSA9ICR2MWwzNTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzMXY1KCkgew0KICAgICAgICAgICAgZjRsNV9wM3RfYzJudDVudHMoJHRoNHMtPnAxdGgsIGpzMm5fNW5jMmQ1KCR0aDRzLT5zNXRzKSk7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gX19zNXQoJHByMnAsICR2MWwzNSkgew0KICAgICAgICAgICAgJHRoNHMtPnM1dCgkcHIycCwgJHYxbDM1KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBfX2c1dCgkcHIycCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5nNXQoJHByMnApOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBjbDFzcyBDMm5zdDFudHMgew0KICAgICAgICAvKioNCiAgICAgICAgICogQzJuc3QxbnQgZDVjbDFyMXQ0Mm5zLg0KICAgICAgICAgKi8NCiAgICAgICAgYzJuc3QgQVBJX1VSTCA9ICdodHRwczovLzQuNG5zdDFncjFtLmMybS8xcDQvdjYvJzsNCg0KLy8gICAgICAgIGMybnN0IElHX1ZFUlNJT04gPSAnNjAuNjAuMCc7DQovLyAgICAgICAgYzJuc3QgSUdfU0lHX0tFWSA9ICdvdWVpMTlvOTU4ZjhhZjBpY3VmN282ODdjYm83ZjVmZTU1YWlmY2Z1NWRlZmNvNTFjMTY1NnVkMWlib2k2ZGVvJzsNCg0KLy8gICAgICAgIGMybnN0IElHX1ZFUlNJT04gICAgICAgID0gJzYwLjZpLjAnOw0KLy8gICAgICAgIGMybnN0IElHX1NJR19LRVkgICAgICAgID0gJ2IwbzUwZDExZmExYjY3Y2QxYTFpZTljMWM1OW84ZGVvOWQ2YTg4MTY2OTdmOTVjZjk3NWZkMDF1NWMwODd1ZDcnOw0KDQogICAgICAgIGMybnN0IElHX1ZFUlNJT04gPSAnNjAuNjcuMCc7DQogICAgICAgIGMybnN0IElHX1NJR19LRVkgPSAnODcxZWFlNmlhMDdiN2NkOWViMDhjZDZiN2Rpb2NmNmQ1ZGQxNWVvaTU5NWI2N28xaWNlaThjNmQ5NmNhYjZpZCc7DQoNCiAgICAgICAgYzJuc3QgRVhQRVJJTUVOVFMgPSAnNGdfMW5kcjI0ZF9kNHNrX2MxY2g1X20xdGNoX2oyM3JuMWxfczR6NV90Ml9jMWNoNV9tMXhfYzIzbnQsNGdfMW5kcjI0ZF8xZF9tMnY1X2MxcjIzczVsXzRuZDRjMXQycl90Ml8zZjRfM240djVyczUsNGdfMW5kcjI0ZF8zbjR2NXJzNV92NGQ1Ml9wcjJkM2N0NDJuLDRnXzFuZHIyNGRfbDR2NV9mMmxsMndfZnIybV9jMm1tNW50c18zbjR2NXJzNSw0Z18xbmRyMjRkX2w0djVfMW4xbHl0NGNzLDRnXzFuZHIyNGRfdjRkNTJfYzFwdDQybnNfM240djVyczUsNGdfMW5kcjI0ZF8yZmZsNG41X2wyYzF0NDJuX2Y1NWQsNGdfMW5kcjI0ZF8ybnQxY3RfNG52NHQ1XzNuNHY1cnM1LDRnXzFuZHIyNGRfNG5zdDFfdjRkNTJfcjVjMm5uNWN0X3Y0NXc1cnMsNGdfMW5kcjI0ZF9sNHY1X2JyMjFkYzFzdF9ibDFja2w0c3QsNGdfMW5kcjI0ZF9jaDVja2IyeF80bnN0NTFkXzJmX2IzdHQybl8xc19mMmxsMndfMWZmMnJkMW5jNV8zbjR2NXJzNSw0Z18xbmRyMjRkX3NoMnBwNG5nX3I1cDJydDRuZyw0Z18xbmRyMjRkXzNmNF9yNWQ1czRnbl92NGQ1Ml9zMmM0MWxfYzJudDV4dCw0Z18xbmRyMjRkX3N0MnI0NXNfczNyZjFjNV8zbjR2NXJzNSw0Z18xbmRyMjRkX3Y1cjRmNDVkX2MybW01bnRzXzNuNHY1cnM1LDRnXzFuZHIyNGRfcHI1bDIxZF9tNWQ0MV8xaDUxZF80bl9jM3JyNW50X3I1NWwsMW5kcjI0ZF80bnN0MWdyMW1fcHI1ZjV0Y2hfczNnZzVzdDQybnNfM240djVyczUsNGdfMW5kcjI0ZF9kNHI1Y3RfNG5iMnhfdHIxeV9zM2dnNXN0NWRfM3M1cl8zbjR2NXJzNSw0Z18xbmRyMjRkX2Q0cjVjdF9ibDM1X3QxYiw0Z18xbmRyMjRkXzFzczV0X2IzdHQybl9uNXdfYzJudDVudF8xbjRtMXQ0Mm4sNGdfMW5kcjI0ZF8xc3luY19uNXR3MnJrX3R3NTFrXzNuNHY1cnM1LDRnXzFuZHIyNGRfcjUxY3RfbjF0NHY1X2wxenlfbTJkM2w1c19rNGxsc3c0dGNoLDRnXzFuZHIyNGRfNG5zdDF2NGQ1Ml9yNW0ydjVfbjN4X2MybW01bnRzLDRnX3Y0ZDUyX2MycHlyNGdodF93aDR0NWw0c3QsNGdfMW5kcjI0ZF8xZF9zcDJuczJyX2wxYjVsX3N0MnJ5X3QycF9kNXM0Z25fM240djVyczUsNGdfMW5kcjI0ZF9iM3M0bjVzc18xY3Q0Mm4sNGdfMW5kcjI0ZF9kNHI1Y3RfbDRua19zdHlsNSw0Z18xbmRyMjRkX2w0djVfaDUxcnRfNW5oMW5jNW01bnRzXzNuNHY1cnM1LDRnXzFuZHIyNGRfcHI1bDIxZF80dDVtX2MyM250XzRuX3I1NWxfdjQ1dzVyX2IzZmY1ciw0Z18xbmRyMjRkXzEzdDJfcjV0cnlfcDJzdF9tMmQ1LDRnXzFuZHIyNGRfZjR4X3I1bmQ1cl90aHI1MWRfY3Ixc2gsNGdfMW5kcjI0ZF9zaDJwcDRuZyw0Z19mYm5zX3ByNWwyMWRfZDVmMTNsdCw0Z18xbmRyMjRkX2c1c3QzcjVfZDRzbTRzc19yNTVsX3Y0NXc1ciw0Z18xbmRyMjRkX3QyMmxfdDRwLDRnXzFuZHIyNGRfMWRfbDJnZzVyX2Yzbm41bF9sMmdnNG5nXzNuNHY1cnM1LDRnXzFuZHIyNGRfZDRyNWN0X2w0bmtzLDRnXzFuZHIyNGRfbDRua3NfcjVjNTR2NXJzLDRnXzFuZHIyNGRfMWRfNG1wcjVzczQybl9iMWNrdDVzdCw0Z18xbmRyMjRkXzRudjR0NXNfdzR0aDIzdF90Mms1bl8zbjR2NXJzNSw0Z18xbmRyMjRkXzRtbTVyczR2NV92NDV3NXIsNGdfMW5kcjI0ZF9tcXR0X3NreXcxbGs1ciw0Z19mYm5zX3Azc2gsNGdfMW5kcjI0ZF9yNTFjdF9uMXQ0djVfM240djVyczUsNGdfMW5kcjI0ZF9zcDVjNDFsX2JyM3NoLDRnXzFuZHIyNGRfbDR2NV9jMm5zM21wdDQybl8xYnIsNGdfMW5kcjI0ZF9zdDJyeV92NDV3NXJfczJjNDFsX2MybnQ1eHQsNGdfMW5kcjI0ZF81eHBsMnI1X3Y1cjRmNDVkX2IxZGc1c19zdDJyNDVzXzNuNHY1cnM1LDRnXzFuZHIyNGRfdjRkNTJfbDIycGMyM250XzRudCw0Z18xbmRyMjRkXzVuMWJsNV9tMTRuX2Y1NWRfcjU1bF90cjF5X3ByNWwyMWQ0bmcsNGdfMW5kcjI0ZF8xZF93MXRjaGJyMndzNV8zbjR2NXJzNSw0Z18xbmRyMjRkX3I1MWN0X24xdDR2NV8ydDEsNGdfMW5kcjI0ZF9kNHNjMnY1cl9wNTJwbDVfNGMybl80bl8ydGg1cnNfcHIyZjRsNSw0Z18xbmRyMjRkX2wyZ19tNWQ0MWMyZDVjXzRuZjIsNGdfMW5kcjI0ZF81bjFibDVfYjFja19uMXY0ZzF0NDJuX24zeF8zbjR2NXJzNSw0Z18xbmRyMjRkX2MybGRfc3QxcnRfZjU1ZF9yNXEzNXN0LDRnX3Y0ZDUyXzNzNV9zdjVfM240djVyczUsNGdfMW5kcjI0ZF8yZmZsNG41XzV4cGwycjVfNjBfNnUsNGdfMW5kcjI0ZF9zdDJyNDVzX3Q1MWNoX2cxbGw1cnlfbDJjMXQ0Mm4sNGdfMW5kcjI0ZF9odHRwX3N0MWNrXzV4cDVyNG01bnRfYTA2Nyw0Z18xbmRyMjRkX3N0MnI0NXNfZDV2NGM1X3Q0bHQsNGdfMW5kcjI0ZF9wNW5kNG5nX3I1cTM1c3RfczUxcmNoX2Ixciw0Z18xbmRyMjRkX2ZiX3QycHM1MXJjaF9zZ3BfZjJya19yNXEzNXN0LDRnXzFuZHIyNGRfMW40bTF0NDJuX3A1cmZfcjVwMnJ0NXJfdDRtNTIzdCw0Z18xbmRyMjRkX241d19ibDJja19mbDJ3LDRnXzFuZHIyNGRfZDRyNWN0XzFkZHI1c3NfbDRua3MsNGdfMW5kcjI0ZF9zaDFyNV9wcjJmNGw1X3BoMnQyX3QyX2Y1NWRfM240djVyczUsNGdfMW5kcjI0ZF9zdDJyNDVzX3ByNHYxdDVfbDRrNXMsNGdfMW5kcjI0ZF90NXh0X2IxY2tncjIzbmQsNGdfMW5kcjI0ZF9zdDJyNDVzX3Y0ZDUyX3ByNWY1dGNoX2tiLDRnXzFuZHIyNGRfczNfMWN0NHY0dHlfZjU1ZCw0Z18xbmRyMjRkX2w0djVfc3QycF9icjIxZGMxc3RfMm5fdTB1LDRnXzFuZHIyNGRfcHIybTJ0NDJuX2Y1NWRiMWNrX2NoMW5uNWwsNGdfMW5kcjI0ZF9yNW5kNXJfNGZyMW01XzRudDVydjFsLDRnXzFuZHIyNGRfYjIybTVyMW5nXzVudHJ5LDRnXzFuZHIyNGRfYzFtNXIxX3NoMnJ0YzN0XzNuNHY1cnM1LDRnXzFuZHIyNGRfZjV0Y2hfZnI1c2hfdjQ1dzVyX2w0c3QsNGdfMW5kcjI0ZF8xZF9tNWQ0MV8zcmxfbDJnZzRuZ18zbjR2NXJzNSw0Z18xbmRyMjRkX3BoMm41X2MybmY0cm1fcjF0NV9sNG00dF9sMW5nMzFnNV8zbjR2NXJzNSw0Z18xbmRyMjRkX2w0djV3NHRoX2gxbmRsNV80bnY0dDVzX2Yycl9jMmJyMjFkYzFzdCw0Z18xbmRyMjRkX2YxYzViMjJrX3R3NHR0NXJfcHIyZjRsNV9waDJ0MnMsNGdfMW5kcjI0ZF9mM2xsXzNzNXJfZDV0MTRsXzVuZHAyNG50LDRnX3N0MnJ5X2MxbTVyMV9yNXY1cnM1X3Y0ZDUyXzV4cDVyNG01bnQsNGdfMW5kcjI0ZF9sNHY1dzR0aF8xbGwyd180bnY0dDVfZjJyX2MyYnIyMWRjMXN0LDRnXzFuZHIyNGRfZDRyNWN0X3NxbDR0NV8zbjR2NXJzNSw0Z18xbmRyMjRkX2YxbTRseV9icjRkZzVfc2gxcjUsNGdfMW5kcjI0ZF9zNTFyY2gsNGdfMW5kcjI0ZF80bnN0MV92NGQ1Ml9jMm5zM21wdDQybl90NHRsNXMsNGdfMW5kcjI0ZF9jMW01cjFfM240djVyczUsNGdfMW5kcjI0ZF80bnN0MXY0ZDUyXzEzZDQyXzJubHlfbTJkNSw0Z18xbmRyMjRkX2w0djVfdjRkNTJfcjUxY3Q0Mm5zX2MybnMzbXB0NDJuXzNuNHY1cnM1LDRnXzFuZHIyNGRfc3c0cDVfZnIxZ201bnRfYzJudDE0bjVyLDRnX2NyNTF0NDJuX2dyMnd0aF9oMmxkMjN0LDRnXzFuZHIyNGRfbDR2NV9zMXY1X3QyX2MxbTVyMV9yMmxsXzNuNHY1cnM1LDRnXzFuZHIyNGRfMWRfY3QxX3I1ZDVzNGduXzNuNHY1cnM1LDRnXzFuZHIyNGRfc3Q0Y2s1cl9yNWc0Mm5fdHIxY2s0bmcsNGdfMW5kcjI0ZF8zbjRmNDVkXzRuYjJ4LDRnXzFuZHIyNGRfbDR2NV9uNXdfdzF0Y2hfdDRtNSw0Z18xbmRyMjRkXzJmZmw0bjVfbTE0bl9mNTVkXzYwXzY2LDRnXzFuZHIyNGRfY2gxNG40bmdfdDUxczVyXzFuNG0xdDQybiw0Z18xbmRyMjRkX2IzczRuNXNzX2MybnY1cnM0Mm5fdjFsMzVfcHIycF92YSw0Z18xbmRyMjRkX3I1ZDRyNWN0X3QyX2wyd19sMXQ1bmN5XzNuNHY1cnM1LDRnXzFuZHIyNGRfZjU1ZF9oNTFkNXJfcHIyZjRsNV9yNG5nXzNuNHY1cnM1LDRnX2YxbTRseV9icjRkZzVzX2gybGQyM3RfM240djVyczUsNGdfMW5kcjI0ZF9mMmxsMnc0bmdfZjJsbDJ3NXJfczJjNDFsX2MybnQ1eHQsNGdfMW5kcjI0ZF92NGQ1Ml9rNTVwX3NjcjU1bl8ybiw0Z18xbmRyMjRkX3ByMmY0bDVfcGgydDJfMXNfbTVkNDEsNGdfMW5kcjI0ZF8xZF9sNTFkZzVuX3I1bDF5X20yZDVybiw0Z18xbmRyMjRkXzRuc3QxX3Y0ZDUyX2MybnMzbXB0NDJuXzRuZnIxLDRnXzFuZHIyNGRfMWRfdzF0Y2hsNTFkXzNuNHY1cnM1LDRnXzFuZHIyNGRfNG5mNG40dDVfc2NyMmxsNG5nX2wxM25jaCw0Z180bl9mNTVkX2MybW01bnQ0bmcsNGdfMW5kcjI0ZF9sNHY1X2JyMjFkYzFzdF81bjFibDVfeTUxcl9jbDFzc19hMDY2LDRnXzFuZHIyNGRfZDRyNWN0X3BoMm41X24zbWI1cl9sNG5rcyw0Z18xbmRyMjRkX2Q0cjVjdF9zaDFyNV9zaDU1dF9yNG5nLDRnXzFuZHIyNGRfc3QycjQ1c193NWJsNG5rX2NyNTF0NDJuLDRnXzFuZHIyNGRfaDRzdDJncjFtX3I1cDJydDVyLDRnXzFuZHIyNGRfbjV0dzJya19jMW5jNWxsMXQ0Mm4sNGdfMW5kcjI0ZF9yNTFjdF9uMXQ0djVfNG5zNGdodHMsNGdfMW5kcjI0ZF80bnN0MV92NGQ1Ml8xM2Q0Ml81bmMyZDVyLDRnXzFuZHIyNGRfZjFtNGx5X2JyNGRnNV9iMjJrbTFya3MsNGdfMW5kcjI0ZF9kMXNoX2Yycl92MmRfM240djVyczUsNGdfMW5kcjI0ZF9kNHI1Y3RfbTN0MzFsbHlfNXhjbDNzNHY1XzV4cDVyNG01bnRfM240djVyczUsNGdfMW5kcjI0ZF9zdDJyNDVzX3M1bGY0NV9zdDRjazVyLDRnXzFuZHIyNGRfMWRfMWRkX3A1cl81djVudF9jMjNudDVyX3QyX2wyZ2c0bmdfNXY1bnQsNGdfMW5kcjI0ZF9ydGwsNGdfMW5kcjI0ZF9zNGQ1YzFyX3QxZ2c0bmdfM240djVyczUsNGdfMW5kcjI0ZF9kNHI1Y3RfczVuZF8xM3QyX3I1dHJ5LDRnXzFuZHIyNGRfZDRyNWN0X3Y0ZDUyXzEzdDJwbDF5X3NjcjJsbCw0Z18xbmRyMjRkX3ByMm0ydDVfZnIybV9wcjJmNGw1X2IzdHQybiw0Z18xbmRyMjRkX3NoMXI1X3NwNG5uNXIsNGdfMW5kcjI0ZF90NXh0XzFjdDQybiw0Z18xbmRyMjRkX3ByMmY0bDVfc2gxcjVfM3M1cm4xbTUsNGdfMW5kcjI0ZF9zNGQ1YzFyXzVkNHRfc2NyNTVuXzNuNHY1cnM1LDRnX3ByMm0ydDQybnNfM240dF80bl80bnM0Z2h0c19sMW5kNG5nX3AxZzUsNGdfMW5kcjI0ZF9zMXY1X2wybmdwcjVzc190MjJsdDRwLDRnXzFuZHIyNGRfYzJuc3RyMTRuXzRtMWc1X3M0ejVfM240djVyczUsNGdfMW5kcjI0ZF9iM3M0bjVzc19uNXdfZ3IxcGhxbF81bmRwMjRudF8zbjR2NXJzNSw0Z19yMW5rNG5nX2YybGwydzRuZyw0Z18xbmRyMjRkXzNuNHY1cnM1X3I1NWxfdjRkNTJfcHIyZDNjdDQybiw0Z18xbmRyMjRkX3NmcGx0LDRnXzFuZHIyNGRfc3QycnlfdHIxeV90NHRsNV9wbDF5XzFsbCw0Z18xbmRyMjRkXzJmZmw0bjVfaDFzaHQxZ19mNTVkLDRnXzFuZHIyNGRfbDR2NV9zazRuX3NtMjJ0aCw0Z18xbmRyMjRkX3N0MnI0NXNfcDJzdDRuZ18yZmZsNG41XzM0LDRnXzFuZHIyNGRfZDRyNWN0XzFkZF9sMmMxbF90aHI1MWRfNG5fNG5iMngsNGdfMW5kcjI0ZF9zdzRwNV9uMXY0ZzF0NDJuX3hfMW5nbDVfM240djVyczUsNGdfMW5kcjI0ZF8yZmZsNG41X20yZDVfaDJsZDIzdCw0Z18xbmRyMjRkX24ybl9zcTMxcjVfZjRyc3QsNGdfMW5kcjI0ZF80bnN0MV92NGQ1Ml9kcjF3NG5nLDRnXzFuZHIyNGRfcjUxY3RfbjF0NHY1XzNzNXJ0MWcsNGdfMW5kcjI0ZF9zdzRwNTFibDVmNGx0NXJzXzNuNHY1cnM1LDRnXzFuZHIyNGRfbDR2NV9uMnQ0ZjRjMXQ0Mm5fYzJudHIybF8zbjR2NXJzNSw0Z18xbmRyMjRkXzFuMWx5dDRjc19sMmdnNXJfcjNubjRuZ19iMWNrZ3IyM25kXzNuNHY1cnM1LDRnXzFuZHIyNGRfczF2NV8xbGwsNGdfMW5kcjI0ZF9yNTVsX3Y0NXc1cl9kMXQxX2IzZmY1cl9zNHo1LDRnX2Q0cjVjdF9xMzFsNHR5X2gybGQyM3RfM240djVyczUsNGdfMW5kcjI0ZF9mMW00bHlfYnI0ZGc1X2Q0c2MydjVyLDRnXzFuZHIyNGRfcjUxY3RfbjF0NHY1X3I1c3QxcnRfMWZ0NXJfNXJyMnJfM240djVyczUsNGdfc3QycnlfdHIxeV9wNTVrX2MybnQ1bnRfM240djVyczUsNGdfMW5kcjI0ZF9wcjJmNGw1LDRnXzFuZHIyNGRfaDRnaF9yNXNfM3BsMjFkX2EsNGdfMW5kcjI0ZF9odHRwX3M1cnY0YzVfczFtNV90aHI1MWQsNGdfMW5kcjI0ZF9yNW0ydjVfZjJsbDJ3NXJzXzNuNHY1cnM1LDRnXzFuZHIyNGRfc2s0cF92NGQ1Ml9yNW5kNXIsNGdfMW5kcjI0ZF9sNHY1X3Y0NXc1cl9jMm1tNW50X3ByMm1wdF8zbjR2NXJzNSw0Z18xbmRyMjRkX3I1MWN0X24xdDR2NV80bnM0Z2h0c19ncjRkX3Y0NXcsNGdfMW5kcjI0ZF9zNTFyY2hfY2w0NW50X20xdGNoNG5nLDRnXzV4cGwycjVfbjV0NWcyLDRnXzFuZHIyNGRfYjIybTVyMW5nX2Y1NWRfMXR0cjRiM3Q0Mm4sNGdfMW5kcjI0ZF81eHBsMnI1X3N0MnJ5X3Nmc2x0XzNuNHY1cnM1LDRnXzFuZHIyNGRfcjVuZDVyNG5nX2MybnRyMmxzLDRnXzFuZHIyNGRfMnNfdjVyczQybl9ibDJjazRuZyw0Z18xbmRyMjRkXzVuYzJkNXJfdzRkdGhfczFmNV9tM2x0NHBsNV82ZSw0Z18xbmRyMjRkX2Q0cjVjdF92NGQ1Ml8xM3QycGwxeSw0Z18xbmRyMjRkX3NuNHBwNXRzX3ByMmY0bDVfbjN4LDRnXzFuZHIyNGRfNWE1XzJwdDRtNHoxdDQybl8zbjR2NXJzNSw0Z18xbmRyMjRkX2Q0c2tfM3MxZzUsNGdfMW5kcjI0ZF9zMXY1X2MybGw1Y3Q0Mm5zLDRnXzFuZHIyNGRfbDR2NV9zNTVfZjV3NXJfdjRkNTJzX2w0azVfdGg0c18zbjR2NXJzNSw0Z18xbmRyMjRkX2w0djVfdjQ1d19wcjJmNGw1X2ZyMm1fYzJtbTVudHNfM240djVyczUsNGdfZjJybTF0c18xbmRfZjU1ZGIxY2tzX2gybGQyM3RfM240djVyczUsNGdfZmJuc19ibDJjazVkLDRnXzFuZHIyNGRfNG5zdDF2NGQ1Ml9wNXI0MmQ0Y19uMnQ0Ziw0Z18xbmRyMjRkXzVtcHR5X2Y1NWRfcjVkNXM0Z24sNGdfMW5kcjI0ZF9tMXIxM2Q1cl8zcGQxdDVfZnI1cTM1bmN5LDRnXzFuZHIyNGRfczNnZzVzdF9wMXNzdzJyZF9yNXM1dF8ybl8ybjVjbDRja19sMmc0biw0Z18xbmRyMjRkX2w0djVfc3A1YzQxbF9jMmQ1Y19zNHo1X2w0c3QsNGdfMW5kcjI0ZF81bjFibDVfc2gxcjVfdDJfbTVzczVuZzVyLDRnXzFuZHIyNGRfbDR2NV92NGQ1Ml9yNTFjdDQybnNfY3I1MXQ0Mm5fM240djVyczUsNGdfMW5kcjI0ZF9sNHY1X2g0ZDVfdjQ1dzVyX24zeCw0Z18xbmRyMjRkX2NoMW5uNWxzX2gybTUsNGdfMW5kcjI0ZF9zNGQ1YzFyX2cxbGw1cnlfM240djVyczUsNGdfMW5kcjI0ZF9sNHY1XzNzNG5nX3c1YnJ0Yyw0Z18xbmRyMjRkXzRuc3QxX3Y0ZDUyX2JyMjFkYzFzdDVyXzRuZnIxX3A1cmYsNGdfMW5kcjI0ZF9iM3M0bjVzc19jMm52NXJzNDJuX3MyYzQxbF9jMm50NXh0LDFuZHIyNGRfNGdfZmJuc19rNGxsX3N3NHRjaCw0Z18xbmRyMjRkX3I1dHJ5X3N0MnJ5X3M1NW5fc3QxdDUsNGdfMW5kcjI0ZF9yNTFjdF9uMXQ0djVfM240djVyczVfazRsbF9zdzR0Y2gsNGdfMW5kcjI0ZF9zdDJyNDVzX2IyMmtfM240djVyczUsNGdfMW5kcjI0ZF8xbGxfdjRkNTJwbDF5YjFja19wNXJzNHN0NG5nX3MyM25kLDRnXzFuZHIyNGRfYzFjaDVfbDF5NXJfYnl0NXNfdGhyNXNoMmxkLDRnXzFuZHIyNGRfYzJtbTVudF9kNTVwX2w0bms0bmdfdjYsNGdfMW5kcjI0ZF9iM3M0bjVzc19wcjJtMnQ0Mm4sNGdfMW5kcjI0ZF8xbnJ3MXRjaGQyZyw0Z18xbmRyMjRkX3FwX2s0bGxfc3c0dGNoLDRnXzFuZHIyNGRfMWRfMWx3MXlzX3M1bmRfMWRfMXR0cjRiM3Q0Mm5fNGRfM240djVyczUsNGdfMW5kcjI0ZF9hZjFjLDRnX2Q0cjVjdF9ieXAxc3NfZ3IyM3BfczR6NV9sNG00dF8zbjR2NXJzNSw0Z18xbmRyMjRkX3ByMm0ydDVfczRtcGw0ZjQ1ZF9mbDJ3LDRnXzFuZHIyNGRfc2gxcjVfdDJfd2gxdHMxcHAsNGdfZmJuc19kM21wXzRkcyw0Z18xbmRyMjRkXzFkX3NoMndfbTE0X2N0MV9sMjFkNG5nX3N0MXQ1XzNuNHY1cnM1LDRnXzFuZHIyNGRfc2t5dzFsazVyX2w0djVfNXY1bnRfc3QxcnRfNW5kLDRnXzFuZHIyNGRfdDJwbDR2NV92NXI0ZjQ1ZF9iMWRnNXNfM240djVyczUsNGdfMW5kcjI0ZF9sNHY1X2oyNG5fYzJtbTVudF8zNF9jaDFuZzUsNGdfMW5kcjI0ZF9kcjF3X2IzdHQybl9uNXdfdDIybF8xbjRtMXQ0Mm4sNGdfdjRkNTJfbTF4X2QzcjF0NDJuX3E1X3ByNTNuNHY1cnM1LDRnXzFuZHIyNGRfMWRfdzF0Y2g0bnN0MWxsXzNuNHY1cnM1LDRnXzFuZHIyNGRfaHR0cF9zdDFja19rel9kNWIzZyw0Z19yNXEzNXN0X2MxY2g1X2wxeTVyLDRnXzFuZHIyNGRfYzFyMjNzNWxfZjU1ZF80bmQ0YzF0MnJzXzNuNHY1cnM1LDRnXzFuZHIyNGRfbjV3XzJwdDRjLDRnXzFuZHIyNGRfbTFya19yNTVsX3M1NW5fMm5fU3c0cDVfZjJydzFyZCw0Z19mYm5zX3NoMXI1ZCw0Z18xbmRyMjRkX2MxcHQzcjVfc2wyd20yX20yZDUsNGdfMW5kcjI0ZF9zMXY1X20zbHQ0X3M1bDVjdCw0Z18xbmRyMjRkX201MWQsNGdfMW5kcjI0ZF92NGQ1Ml9zNG5nbDVfczNyZjFjNSw0Z18xbmRyMjRkXzJmZmw0bjVfcjU1bF9mNTVkLDRnXzFuZHIyNGRfdjRkNTJfZDJ3bmwyMWRfbDJnZzRuZyw0Z18xbmRyMjRkX2wxc3RfNWQ0dHMsNGdfMW5kcjI0ZF81eDJwbDF5NXJfdTZ1YSw0Z18xbmRyMjRkX3NuNHBwNXRzX2gxcHQ0Y19mNTVkYjFjayw0Z18xbmRyMjRkX2dsX2RyMXc0bmdfbTFya3NfMWZ0NXJfM25kMl9iMWNrNG5nLDRnXzFuZHIyNGRfbTFya19zNTVuX3N0MXQ1XzJuX3Y0NXc1ZF80bXByNXNzNDJuLDRnXzFuZHIyNGRfbDR2NV9iMWNrZ3IyM25kNWRfcjVtNG5kNXJfM240djVyczUsNGdfMW5kcjI0ZF9kNHMxYmw1X2MybW01bnRfcDNibDRjX3Q1c3QsNGdfMW5kcjI0ZF8zczVyX2Q1dDE0bF81bmRwMjRudCw0Z18xbmRyMjRkX2wyYzF0NDJuX201ZDQxX2MyM250XzV4cF80Zyw0Z18xbmRyMjRkX2MybW01bnRfdHc1MWtzXzNuNHY1cnM1LDRnXzFuZHIyNGRfMWRkX3QyX2wxc3RfcDJzdCw0Z19zMXY1XzRuczRnaHRzLDRnXzFuZHIyNGRfbDR2NV81bmgxbmM1ZF81bmRfc2NyNTVuXzNuNHY1cnM1LDRnXzFuZHIyNGRfMWRfMWRkX2MyM250NXJfdDJfbDJnZzRuZ181djVudCw0Z18xbmRyMjRkX3M0ZDVjMXIsNGdfMW5kcjI0ZF9kNHI1Y3Rfc3BsNHRfbjV3X201c3MxZzVfYjN0dDJuLDRnXzFuZHIyNGRfZ3I0ZF92NGQ1Ml80YzJuLDRnXzFuZHIyNGRfcHIyZ3I1c3M0djVfanA1Zyw0Z18xbmRyMjRkXzJmZmw0bjVfc3Qycnlfc3Q0Y2s1cnMsNGdfMW5kcjI0ZF9kNHI1Y3RfNG5iMnhfM25zNTVuX2g0bnQsNGdfMW5kcjI0ZF90MnBfbDR2NV90NHRsNXNfM240djVyczUsNGdfMW5kcjI0ZF92NGQ1Ml9wcjVmNXRjaF9mMnJfYzJubjVjdDR2NHR5X3R5cDUsNGdfMW5kcjI0ZF9zeW5jXzJuX2IxY2tncjIzbmRfNW5oMW5jNWQsNGdfMW5kcjI0ZF8zcGwyMWRfcjVsNDFiNGw0dHlfM3M1X2ZiM3BsMjFkX2w0Yiw0Z18xbmRyMjRkXzFkX2gybGQyM3RfdzF0Y2gxbmRtMnI1XzNuNHY1cnM1LDRnXzFuZHIyNGRfczFtczNuZ18xcHBfYjFkZzRuZyw0Z18xbmRyMjRkXzJmZmw0bjVfYzJtbTVudDRuZyw0Z18xbmRyMjRkXzRuc3QxX3Y0ZDUyXzFicl9yNXM0ejUsNGdfMW5kcjI0ZF80bnN0MV92NGQ1Ml9zMjNuZF8xbHcxeXNfMm4sNGdfMW5kcjI0ZF9kNHMxYmw1X2MybW01bnQnOw0KLy8gICAgICAgIGMybnN0IExPR0lOX0VYUEVSSU1FTlRTID0gJzRnXzFuZHIyNGRfYjFja2dyMjNuZF9waDJuNV9jMm5mNHJtMXQ0Mm5fdmEsNGdfMW5kcjI0ZF9jMm5mNHJtMXQ0Mm5fYzJkNV9yNWc0c3RyMXQ0Mm4sNGdfMW5kcjI0ZF9uMm5fZmJfc3MyLDRnXzFuZHIyNGRfc21zX2MybnM1bnRfNG5fcjVnLDRnXzFuZHIyNGRfMW4xbHl0NGNzX2QxdDFfbDJzcyw0Z19mYm5zX2JsMmNrNWQsNGdfMW5kcjI0ZF9nbTE0bF8yMTN0aF80bl9yNWcsNGdfMW5kcjI0ZF9zaDJ3X3Axc3N3MnJkXzRuX3I1Z18zbjR2NXJzNSw0Z18xbmRyMjRkX3I1Z180bmw0bjVfNXJyMnJzLDRnX2ZibnNfcDNzaCw0Z18xbmRyMjRkX2dtMTRsXzIxM3RoXzRuXzFjYzVzcyw0Z18xbmRyMjRkX3I1Z193aDR0NTIzdF9yNWQ1czRnbl92YSw0Z18xbmRyMjRkX3BoMm41NGRfc3luY180bnQ1cnYxbCw0Z18xbmRyMjRkXzFjYzVzc19yNWQ1czRnbiw0Z18xbmRyMjRkX2w0bmtfdDJfMWNjNXNzXzRmXzVtMTRsX3QxazVuXzRuX3I1Zyc7DQogICAgICAgIGMybnN0IExPR0lOX0VYUEVSSU1FTlRTID0gJzRnXzFuZHIyNGRfc21zX2MybnM1bnRfNG5fcjVnLDRnXzFuZHIyNGRfZmw1eDRibDVfczFtcGw0bmdfM240djVyczUsNGdfMW5kcjI0ZF9iMWNrZ3IyM25kX2MybmZfcjVzNW5kX2Y0eCw0Z19yNXN0MnI1X2YyYzNzXzJuX3I1Z190NXh0YjJ4XzNuNHY1cnM1LDRnXzFuZHIyNGRfMW4xbHl0NGNzX2QxdDFfbDJzcyw0Z18xbmRyMjRkX2dtMTRsXzIxM3RoXzRuX3I1Zyw0Z18xbmRyMjRkX3BoMm41NGRfc3luY180bnQ1cnYxbCw0Z18xbmRyMjRkX3N0MXlfMXRfMm41X3QxcF8ybl81cnIyciw0Z18xbmRyMjRkX2w0bmtfdDJfMWNjNXNzXzRmXzVtMTRsX3QxazVuXzRuX3I1Zyw0Z18xbmRyMjRkX24ybl9mYl9zczIsNGdfMW5kcjI0ZF9mMW00bHlfMXBwc18zczVyX3YxbDM1c19wcjJ2NGQ1cl8zbjR2NXJzNSw0Z18xbmRyMjRkX3I1Z180bmw0bjVfNXJyMnJzLDRnXzFuZHIyNGRfcjNuX2ZiX3I1MTN0aF8ybl9iMWNrZ3IyM25kLDRnX2ZibnNfcDNzaCw0Z18xbmRyMjRkX3I1Z18ybW40YjJ4LDRnXzFuZHIyNGRfc2gyd19wMXNzdzJyZF80bl9yNWdfM240djVyczUsNGdfMW5kcjI0ZF9iMWNrZ3IyM25kX3BoMm41X2MybmY0cm0xdDQybl92YSw0Z19mYm5zX2JsMmNrNWQsNGdfMW5kcjI0ZF8xY2M1c3NfcjVkNXM0Z24sNGdfMW5kcjI0ZF9wbDUxczVfY3I1MXQ1XzNzNXJuMW01XzNuNHY1cnM1LDRnXzFuZHIyNGRfZ20xNGxfMjEzdGhfNG5fMWNjNXNzLDRnXzFuZHIyNGRfcjVnX3doNHQ1MjN0X3I1ZDVzNGduX3ZvJzsNCiAgICAgICAgYzJuc3QgU0lHX0tFWV9WRVJTSU9OICAgPSAndSc7DQoNCiAgICAgICAgYzJuc3QgVVNFUl9BR0VOVF9MT0NBTEUgICAgPSAndHJfVFInOw0KICAgICAgICBjMm5zdCBBQ0NFUFRfTEFOR1VBR0UgICAgICA9ICd0ci1UUic7DQogICAgICAgIGMybnN0IENPTlRFTlRfVFlQRSAgICAgICAgID0gJzFwcGw0YzF0NDJuL3gtd3d3LWYycm0tM3JsNW5jMmQ1ZDsgY2gxcnM1dD1VVEYtOCc7DQogICAgICAgIGMybnN0IFhfRkJfSFRUUF9Fbmc0bjUgICAgID0gJ0w0ZzVyJzsNCiAgICAgICAgYzJuc3QgWF9JR19DMm5uNWN0NDJuX1R5cDUgPSAnV0lGSSc7DQoNCi8vICAgICAgICBjMm5zdCBYX0lHX0MxcDFiNGw0dDQ1cyA9ICdvVDJBQUE9PSc7DQogICAgICAgIGMybnN0IFhfSUdfQzFwMWI0bDR0NDVzID0gJ29iMkJBQT09JzsNCg0KDQogICAgICAgIGMybnN0IEZBQ0VCT09LX09UQV9GSUVMRFMgICAgICAgICAgICA9ICczcGQxdDUlYWk3QmQyd25sMjFkXzNyNCVhaWFDZDJ3bmwyMWRfM3I0X2Q1bHQxX2IxczUlYWlhQ3Y1cnM0Mm5fYzJkNV9kNWx0MV9iMXM1JWFpYUNkMndubDIxZF8zcjRfZDVsdDElYWlhQ2YxbGxiMWNrX3QyX2YzbGxfM3BkMXQ1JWFpYUNmNGw1X3M0ejVfZDVsdDElYWlhQ3Y1cnM0Mm5fYzJkNSVhaWFDcDNibDRzaDVkX2QxdDUlYWlhQ2Y0bDVfczR6NSVhaWFDMnQxX2IzbmRsNV90eXA1JWFpYUNyNXMyM3JjNXNfY2g1Y2tzM20lYWk3RCc7DQogICAgICAgIGMybnN0IEZBQ0VCT09LX09SQ0FfUFJPVE9DT0xfVkVSU0lPTiA9IGEwNmkwbzZ1Ow0KICAgICAgICBjMm5zdCBGQUNFQk9PS19PUkNBX0FQUExJQ0FUSU9OX0lEICAgPSAnNmF1MGF1aTd1YTg3dTZ1JzsNCg0KICAgICAgICAvKioNCiAgICAgICAgICogQzJuc3QxbnQgZDVjbDFyMXQ0Mm5zIGYyciB3NWIuDQogICAgICAgICAqLw0KICAgICAgICBjMm5zdCBXRUJfVVJMID0gJ2h0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICB9DQoNCg0KICAgIGNsMXNzIEcyMmRENXY0YzVzIHsNCiAgICAgICAgYzJuc3QgREVWSUNFUyA9IFsNCiAgICAgICAgICAgICdhdS83LjA7IG84MGRwNDsgNjA4MHg2OWEwOyBPbjVQbDNzOyBPTkVQTFVTIEFvMDYwOyBPbjVQbDNzb1Q7IHFjMm0nLA0KICAgICAgICAgICAgJ2FvL2UuMC42OyBldTBkcDQ7IDZ1dTB4YW85YTsgTEdFL2xnNTsgUlM5ODg7IGg2OyBoNicsDQogICAgICAgICAgICAnYXUvNy4wOyBldTBkcDQ7IDZ1dTB4YWllMDsgSFVBV0VJOyBMT04tTGE5OyBIV0xPTjsgaDRvZWUwJywNCiAgICAgICAgICAgICdhby9lLjAuNjsgZXUwZHA0OyA2dXUweGFpZTA7IFpURTsgWlRFIEFhMDY3VTsgMTRsczFfNDQ7IHFjMm0nLA0KICAgICAgICAgICAgJ2FvL2UuMC42OyBldTBkcDQ7IDZ1dTB4YWllMDsgczFtczNuZzsgU00tRzlvaUY7IGg1cjJhbHQ1OyBzMW1zM25nNXh5bjJzODg5MCcsDQogICAgICAgICAgICAnYW8vZS4wLjY7IGV1MGRwNDsgNnV1MHhhaWUwOyBzMW1zM25nOyBTTS1HOW8wRjsgaDVyMmx0NTsgczFtczNuZzV4eW4yczg4OTAnLA0KICAgICAgICBdOw0KDQogICAgICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gZzV0UjFuZDJtRzIyZEQ1djRjNSgpIHsNCiAgICAgICAgICAgIC8vTjV3IFY1cnM0Mm4NCiAgICAgICAgICAgICRyMW5kMm1JZHggPSAxcnIxeV9yMW5kKHM1bGY6OkRFVklDRVMsIDYpOw0KDQogICAgICAgICAgICByNXQzcm4gczVsZjo6REVWSUNFU1skcjFuZDJtSWR4XTsNCg0KDQogICAgICAgICAgICAvL09sZCBWNXJzNDJuDQogICAgICAgICAgICAkY3N2ZjRsNSAgICAgID0gVzJ3OjpnNXQoInByMmo1Y3QvYzIyazQ1UDF0aCIpIC4gJ2Q1djRjNS9kNXY0YzVzLmNzdic7DQogICAgICAgICAgICAkZjRsNV9oMW5kbDUgID0gZjJwNW4oJGNzdmY0bDUsICdyJyk7DQogICAgICAgICAgICAkbDRuNV8yZl90NXh0ID0gW107DQogICAgICAgICAgICB3aDRsNSghZjUyZigkZjRsNV9oMW5kbDUpKSB7DQogICAgICAgICAgICAgICAgJGw0bjVfMmZfdDV4dFtdID0gZmc1dGNzdigkZjRsNV9oMW5kbDUsIDYwYXUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGQ1djRjNUQxdDEgPSA1eHBsMmQ1KCc7JywgJGw0bjVfMmZfdDV4dFttdF9yMW5kKDAsIDY2OGU3KV1bMF0pOw0KICAgICAgICAgICAgZmNsMnM1KCRmNGw1X2gxbmRsNSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAiNjgvdS5vOyBvYTBkcDQ7IDdhMHg2YTgwOyAiIC4gJGQ1djRjNUQxdDFbMF0gLiAiOyAiIC4gJGQ1djRjNUQxdDFbYV0gLiAiOyAiIC4gJGQ1djRjNUQxdDFbNl0gLiAiOyBxYzJtIjsNCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgY2wxc3MgRDV2NGM1IHsNCiAgICAgICAgYzJuc3QgUkVRVUlSRURfQU5EUk9JRF9WRVJTSU9OID0gJ2EuYSc7DQogICAgICAgIHByMnQ1Y3Q1ZCAkXzFwcFY1cnM0Mm47DQogICAgICAgIHByMnQ1Y3Q1ZCAkXzNzNXJMMmMxbDU7DQogICAgICAgIHByMnQ1Y3Q1ZCAkX2Q1djRjNVN0cjRuZzsNCiAgICAgICAgcHIydDVjdDVkICRfM3M1ckFnNW50Ow0KICAgICAgICBwcjJ0NWN0NWQgJF8xbmRyMjRkVjVyczQybjsNCiAgICAgICAgcHIydDVjdDVkICRfMW5kcjI0ZFI1bDUxczU7DQogICAgICAgIHByMnQ1Y3Q1ZCAkX2RwNDsNCiAgICAgICAgcHIydDVjdDVkICRfcjVzMmwzdDQybjsNCiAgICAgICAgcHIydDVjdDVkICRfbTFuM2YxY3QzcjVyOw0KICAgICAgICBwcjJ0NWN0NWQgJF9icjFuZDsNCiAgICAgICAgcHIydDVjdDVkICRfbTJkNWw7DQogICAgICAgIHByMnQ1Y3Q1ZCAkX2Q1djRjNTsNCiAgICAgICAgcHIydDVjdDVkICRfY3AzOw0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBfX2MybnN0cjNjdCgkMXBwVjVyczQybiwgJDNzNXJMMmMxbDUsICRkNXY0YzVTdHI0bmcgPSBOVUxMLCAkMTN0MkYxbGxiMWNrID0gVFJVRSkgew0KICAgICAgICAgICAgJHRoNHMtPl8xcHBWNXJzNDJuID0gJDFwcFY1cnM0Mm47DQogICAgICAgICAgICAkdGg0cy0+XzNzNXJMMmMxbDUgPSAkM3M1ckwyYzFsNTsNCiAgICAgICAgICAgIDRmKCQxM3QyRjFsbGIxY2sgJiYgKCE0c19zdHI0bmcoJGQ1djRjNVN0cjRuZykpKSB7DQogICAgICAgICAgICAgICAgJGQ1djRjNVN0cjRuZyA9IEcyMmRENXY0YzVzOjpnNXRSMW5kMm1HMjJkRDV2NGM1KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGg0cy0+XzRuNHRGcjJtRDV2NGM1U3RyNG5nKCRkNXY0YzVTdHI0bmcpOw0KICAgICAgICB9DQoNCiAgICAgICAgcHIydDVjdDVkIGYzbmN0NDJuIF80bjR0RnIybUQ1djRjNVN0cjRuZygkZDV2NGM1U3RyNG5nKSB7DQogICAgICAgICAgICA0ZighNHNfc3RyNG5nKCRkNXY0YzVTdHI0bmcpIHx8IDVtcHR5KCRkNXY0YzVTdHI0bmcpKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IFxSM250NG01RXhjNXB0NDJuKCdENXY0YzUgc3RyNG5nIDRzIDVtcHR5LicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHAxcnRzID0gNXhwbDJkNSgnOyAnLCAkZDV2NGM1U3RyNG5nKTsNCiAgICAgICAgICAgIDRmKGMyM250KCRwMXJ0cykgIT09IDcpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgXFIzbnQ0bTVFeGM1cHQ0Mm4oc3ByNG50ZignRDV2NGM1IHN0cjRuZyAiJXMiIGQyNXMgbjJ0IGMybmYycm0gdDIgdGg1IHI1cTM0cjVkIGQ1djRjNSBmMnJtMXQuJywgJGQ1djRjNVN0cjRuZykpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJDFuZHIyNGRPUyA9IDV4cGwyZDUoJy8nLCAkcDFydHNbMF0sIGEpOw0KICAgICAgICAgICAgNGYodjVyczQybl9jMm1wMXI1KCQxbmRyMjRkT1NbNl0sIHM1bGY6OlJFUVVJUkVEX0FORFJPSURfVkVSU0lPTiwgJzwnKSkgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBcUjNudDRtNUV4YzVwdDQybihzcHI0bnRmKCdENXY0YzUgc3RyNG5nICIlcyIgZDI1cyBuMnQgbTU1dCB0aDUgbTRuNG0zbSByNXEzNHI1ZCBBbmRyMjRkIHY1cnM0Mm4gIiVzIiBmMnIgSW5zdDFncjFtLicsICRkNXY0YzVTdHI0bmcsIHM1bGY6OlJFUVVJUkVEX0FORFJPSURfVkVSU0lPTikpOw0KICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAkcjVzMmwzdDQybiA9IDV4cGwyZDUoJ3gnLCAkcDFydHNbYV0sIGEpOw0KLy8gICAgICAgICAgICAkcDR4NWxDMjNudCA9ICg0bnQpJHI1czJsM3Q0Mm5bMF0gKiAoNG50KSRyNXMybDN0NDJuWzZdOw0KLy8gICAgICAgICAgICA0ZigkcDR4NWxDMjNudCA8IGEwN29lMDApIHsNCi8vICAgICAgICAgICAgICAgIHRocjJ3IG41dyBcUjNudDRtNUV4YzVwdDQybihzcHI0bnRmKCdENXY0YzUgc3RyNG5nICIlcyIgZDI1cyBuMnQgbTU1dCB0aDUgbTRuNG0zbSByNXMybDN0NDJuIHI1cTM0cjVtNW50IDJmIDY5YTB4NjA4MC4nLCAkZDV2NGM1U3RyNG5nKSk7DQovLyAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRtMW4zZjFjdDNyNXJBbmRCcjFuZCAgPSA1eHBsMmQ1KCcvJywgJHAxcnRzW29dLCBhKTsNCiAgICAgICAgICAgICR0aDRzLT5fZDV2NGM1U3RyNG5nICAgPSAkZDV2NGM1U3RyNG5nOw0KICAgICAgICAgICAgJHRoNHMtPl8xbmRyMjRkVjVyczQybiA9ICQxbmRyMjRkT1NbMF07IC8vICJhbyIuDQogICAgICAgICAgICAkdGg0cy0+XzFuZHIyNGRSNWw1MXM1ID0gJDFuZHIyNGRPU1s2XTsgLy8gImUuMC42Ii4NCiAgICAgICAgICAgICR0aDRzLT5fZHA0ICAgICAgICAgICAgPSAkcDFydHNbNl07DQogICAgICAgICAgICAkdGg0cy0+X3I1czJsM3Q0Mm4gICAgID0gJHAxcnRzW2FdOw0KICAgICAgICAgICAgJHRoNHMtPl9tMW4zZjFjdDNyNXIgICA9ICRtMW4zZjFjdDNyNXJBbmRCcjFuZFswXTsNCiAgICAgICAgICAgICR0aDRzLT5fYnIxbmQgICAgICAgICAgPSAoNHNzNXQoJG0xbjNmMWN0M3I1ckFuZEJyMW5kWzZdKSA/ICRtMW4zZjFjdDNyNXJBbmRCcjFuZFs2XSA6IE5VTEwpOw0KICAgICAgICAgICAgJHRoNHMtPl9tMmQ1bCAgICAgICAgICA9ICRwMXJ0c1t1XTsNCiAgICAgICAgICAgICR0aDRzLT5fZDV2NGM1ICAgICAgICAgPSAkcDFydHNbaV07DQogICAgICAgICAgICAkdGg0cy0+X2NwMyAgICAgICAgICAgID0gJHAxcnRzW2VdOw0KICAgICAgICAgICAgJHRoNHMtPl8zczVyQWc1bnQgICAgICA9IFVzNXJBZzVudDo6YjM0bGRVczVyQWc1bnQoJHRoNHMtPl8xcHBWNXJzNDJuLCAkdGg0cy0+XzNzNXJMMmMxbDUsICR0aDRzKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRENXY0YzVTdHI0bmcoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl9kNXY0YzVTdHI0bmc7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VXM1ckFnNW50KCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fM3M1ckFnNW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEFuZHIyNGRWNXJzNDJuKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fMW5kcjI0ZFY1cnM0Mm47DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0QW5kcjI0ZFI1bDUxczUoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl8xbmRyMjRkUjVsNTFzNTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXREUEkoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl9kcDQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UjVzMmwzdDQybigpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+X3I1czJsM3Q0Mm47DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTFuM2YxY3QzcjVyKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fbTFuM2YxY3QzcjVyOw0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEJyMW5kKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fYnIxbmQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTJkNWwoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl9tMmQ1bDsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRENXY0YzUoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl9kNXY0YzU7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0Q1BVKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fY3AzOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBjbDFzcyBVczVyQWc1bnQgew0KICAgICAgICBjMm5zdCBVU0VSX0FHRU5UX0ZPUk1BVCA9ICdJbnN0MWdyMW0gJXMgQW5kcjI0ZCAoJXMvJXM7ICVzOyAlczsgJXM7ICVzOyAlczsgJXM7ICVzKSc7DQoNCiAgICAgICAgcDNibDRjIHN0MXQ0YyBmM25jdDQybiBiMzRsZFVzNXJBZzVudCgkMXBwVjVyczQybiwgJDNzNXJMMmMxbDUsIEQ1djRjNSAkZDV2NGM1KSB7DQogICAgICAgICAgICA0ZighJGQ1djRjNSA0bnN0MW5jNTJmIEQ1djRjNSkgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBcSW52MWw0ZEFyZzNtNW50RXhjNXB0NDJuKCdUaDUgZDV2NGM1IHAxcjFtNXQ1ciBtM3N0IGI1IDEgRDV2NGM1IGNsMXNzIDRuc3QxbmM1LicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJG0xbjNmMWN0M3I1clc0dGhCcjFuZCA9ICRkNXY0YzUtPmc1dE0xbjNmMWN0M3I1cigpOw0KICAgICAgICAgICAgNGYoJGQ1djRjNS0+ZzV0QnIxbmQoKSAhPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICRtMW4zZjFjdDNyNXJXNHRoQnIxbmQgLj0gJy8nIC4gJGQ1djRjNS0+ZzV0QnIxbmQoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuIHNwcjRudGYoczVsZjo6VVNFUl9BR0VOVF9GT1JNQVQsICQxcHBWNXJzNDJuLCAkZDV2NGM1LT5nNXRBbmRyMjRkVjVyczQybigpLCAkZDV2NGM1LT5nNXRBbmRyMjRkUjVsNTFzNSgpLCAkZDV2NGM1LT5nNXREUEkoKSwgJGQ1djRjNS0+ZzV0UjVzMmwzdDQybigpLCAkbTFuM2YxY3QzcjVyVzR0aEJyMW5kLCAkZDV2NGM1LT5nNXRNMmQ1bCgpLCAkZDV2NGM1LT5nNXRENXY0YzUoKSwgJGQ1djRjNS0+ZzV0Q1BVKCksICQzczVyTDJjMWw1KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQogICAgM3M1IFIybGw0bmdDM3JsXFI1cTM1c3QgMXMgUjJsbDRuZ0MzcmxSNXEzNXN0Ow0KICAgIDNzNSBSMmxsNG5nQzNybFxSMmxsNG5nQzNybDsNCg0KICAgIGNsMXNzIEIzbGtSNTFjdDQybiB7DQogICAgICAgIHByMnQ1Y3Q1ZCAkM3M1cnMgPSAxcnIxeSgpOw0KICAgICAgICBwcjJ0NWN0NWQgJHM0bTNsdDFuNXAyc3RzNHo1Ow0KICAgICAgICBwcjJ0NWN0NWQgJElHRDF0MVAxdGg7DQoNCiAgICAgICAgZjNuY3Q0Mm4gX19jMm5zdHIzY3QoJDNzNXJzLCAkczRtM2x0MW41cDJzdHM0ejUgPSA2MDApIHsNCiAgICAgICAgICAgICRsNGM1bnM1UzVzczQybk4xbTUgPSBtZGkoVzJ3OjpnNXQoInByMmo1Y3QvbDRjNW5zNUs1eSIpIC4gSU5TVEFXRUJfTElDRU5TRV9TRVNTSU9OX0hBU0gpOw0KICAgICAgICAgICAgJGw0YzVuczVTdDF0M3MgICAgICA9ICRfU0VTU0lPTlskbDRjNW5zNVM1c3M0Mm5OMW01XTsNCiAgICAgICAgICAgICRzNXM0ZCAgICAgICAgICAgICAgPSAiTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvaTcuMC5hOTg3LjZvbyBTMWYxcjQvaW83Lm9lIjsNCiAgICAgICAgICAgIDRmKCE0c18xcnIxeSgkbDRjNW5zNVN0MXQzcykgfHwgITRzczV0KCRsNGM1bnM1U3QxdDNzWyJzdDF0M3MiXSkgfHwgJGw0YzVuczVTdDF0M3NbInN0MXQzcyJdICE9ICIyayIgfHwgITRzczV0KCRsNGM1bnM1U3QxdDNzWyJsNGM1bnM1azV5Il0pIHx8ICgkbDRjNW5zNVN0MXQzc1sibDRjNW5zNWs1eSJdICE9IG1kaShJTlNUQVdFQl9MSUNFTlNFX0tFWV9IQVNIIC4gVzJ3OjpnNXQoInByMmo1Y3QvbDRjNW5zNUs1eSIpIC4gJHM1czRkKSAmJiAkbDRjNW5zNVN0MXQzc1sibDRjNW5zNWs1eSJdICE9IG1kaShJTlNUQVdFQl9MSUNFTlNFX0tFWV9QUkVWSU9VU19IQVNIIC4gVzJ3OjpnNXQoInByMmo1Y3QvbDRjNW5zNUs1eSIpIC4gJHM1czRkKSkpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCJJbnYxbDRkIGQxdDEhIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIDRmKCE0c18xcnIxeSgkM3M1cnMpIHx8IDVtcHR5KCQzczVycykpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCJJbnYxbDRkIDNzNXIgMXJyMXkhIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICR0aDRzLT5zNG0zbHQxbjVwMnN0czR6NSA9ICRzNG0zbHQxbjVwMnN0czR6NTsNCiAgICAgICAgICAgICR0aDRzLT5JR0QxdDFQMXRoICAgICAgICA9IFcydzo6ZzV0KCJwcjJqNWN0L2MyMms0NVAxdGgiKSAuICI0bnN0MWdyMW12by8iOw0KICAgICAgICAgICAgJDNzNXJJbmQ1eCAgICAgICAgICAgICAgID0gMDsNCiAgICAgICAgICAgIGYycjUxY2goJDNzNXJzIDFzICQzczVyKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPjNzNXJzW10gPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgImQxdDEiICAgPT4gMXJyMXlfbTVyZzUoJDNzNXIsIFsiNG5kNXgiID0+ICQzczVySW5kNXhdKSwNCiAgICAgICAgICAgICAgICAgICAgIjJiajVjdCIgPT4gJDNzNXJbIjRzVzViQzIyazQ1Il0gPT0gNiA/IG41dyBJbnN0MWdyMW1XNWIoJDNzNXJbImszbGwxbjRjNEFkNCJdLCAkM3M1clsiNG5zdDFJRCJdKSA6IG41dyBJbnN0MWdyMW0oJDNzNXJbImszbGwxbjRjNEFkNCJdLCAkM3M1clsiczRmcjUiXSwgJDNzNXJbIjRuc3QxSUQiXSkNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICQzczVySW5kNXgrKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGYzbmN0NDJuIGw0azUoJG01ZDQxSUQsICRtNWQ0MUMyZDUpIHsNCiAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCA9IDA7DQogICAgICAgICAgICAkdHI0NWRVczVycyAgICAgICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJHIybGw0bmdDM3JsICAgICAgID0gbjV3IFIybGw0bmdDM3JsKCk7DQogICAgICAgICAgICAkMXJyTTVkNDFJRCAgICAgICAgPSA1eHBsMmQ1KCJfIiwgJG01ZDQxSUQpOw0KICAgICAgICAgICAgJG01ZDQxSURCNWYycjVyICAgID0gJDFyck01ZDQxSURbMF07DQogICAgICAgICAgICBmMnI1MWNoKCR0aDRzLT4zczVycyAxcyAkM3M1cikgew0KICAgICAgICAgICAgICAgIDRmKCQzczVyWyJkMXQxIl1bIjRzVzViQzIyazQ1Il0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW1XNWIgJDJiakluc3QxZ3IxbVc1Yg0KICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgJDJiakluc3QxZ3IxbVc1YiA9ICQzczVyWyIyYmo1Y3QiXTsNCiAgICAgICAgICAgICAgICAgICAgJDJiakQxdDEgICAgICAgICA9ICQyYmpJbnN0MWdyMW1XNWItPmc1dEQxdDEoKTsNCiAgICAgICAgICAgICAgICAgICAgJDNzNXJBc25zICAgICAgICA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJDJiakQxdDFbIjFzbnMiXSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJGg1MWQ1cnMgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICdSNWY1cjVyOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLzRuc3QxZ3IxbS8nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0ROVDogNicsDQogICAgICAgICAgICAgICAgICAgICAgICAnT3I0ZzRuOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLycsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCQyYmpEMXQxWyJ0Mms1biJdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLVI1cTM1c3Q1ZC1XNHRoOiBYTUxIdHRwUjVxMzVzdCcsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1JbnN0MWdyMW0tQUpBWDogNicsDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MxY2g1LUMybnRyMmw6IG0xeC0xZzU9MCcsDQogICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtRjJydzFyZDVkLUYycjogJyAuICQyYmpEMXQxWyI0cCJdDQogICAgICAgICAgICAgICAgICAgICk7DQoNCg0KICAgICAgICAgICAgICAgICAgICAkMnB0NDJucyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgICAgICA9PiAkMmJqRDF0MVsidzViXzNzNXJfMWc1bnQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT4gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVkVSQk9TRSAgICAgICAgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfRU5DT0RJTkcgICAgICAgPT4gJycsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0NPT0tJRSAgICAgICAgID0+ICQyYmpEMXQxWyJ3NWJfYzIyazQ1Il0NCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZXSA9ICQzczVyQXNuc1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zW0NVUkxPUFRfUFJPWFlVU0VSUFdEXSA9ICQzczVyQXNuc1s2XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnAyc3QoQzJuc3QxbnRzOjpXRUJfVVJMIC4gInc1Yi9sNGs1cy8iIC4gJG01ZDQxSURCNWYycjVyIC4gIi9sNGs1LyIsIE5VTEwsICRoNTFkNXJzLCAkMnB0NDJucywgJDNzNXJbImQxdDEiXSk7DQoNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW0gJDJiakluc3QxZ3IxbQ0KICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgJDJiakluc3QxZ3IxbSA9ICQzczVyWyIyYmo1Y3QiXTsNCiAgICAgICAgICAgICAgICAgICAgJDJiakQxdDEgICAgICA9ICQyYmpJbnN0MWdyMW0tPmc1dEQxdDEoKTsNCiAgICAgICAgICAgICAgICAgICAgJDNzNXJBc25zICAgICA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJDJiakQxdDFbIjFzbnMiXSk7DQogICAgICAgICAgICAgICAgICAgICRkMXQxICAgICAgICAgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICQyYmpEMXQxWyIzMzRkIl0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICQyYmpEMXQxWyIzczVybjFtNV80ZCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkMmJqRDF0MVsidDJrNW4iXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbTVkNDFfNGQnICAgPT4gJG01ZDQxSUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KICAgICAgICAgICAgICAgICAgICAkaDUxZDVycyAgICAgID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1JRy1DMXAxYjRsNHQ0NXM6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzFwMWI0bDR0NDVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1UeXA1OiAnIC4gQzJuc3QxbnRzOjpYX0lHX0Mybm41Y3Q0Mm5fVHlwNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tU3A1NWQ6ICcgLiBtdF9yMW5kKDYwMDAsIG83MDApIC4gJ2ticHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtRkItSFRUUC1Fbmc0bjU6ICcgLiBDMm5zdDFudHM6OlhfRkJfSFRUUF9Fbmc0bjUsDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC1UeXA1OiAnIC4gQzJuc3QxbnRzOjpDT05URU5UX1RZUEUsDQogICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJDJiakQxdDFbIjRwIl0NCiAgICAgICAgICAgICAgICAgICAgXTsNCiAgICAgICAgICAgICAgICAgICAgJDJwdDQybnMgICAgICA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgICAgICA9PiAkMmJqRDF0MVsiM3M1cl8xZzVudCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9WRVJCT1NFICAgICAgICA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9FTkNPRElORyAgICAgICA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09PS0lFICAgICAgICAgPT4gJDJiakQxdDFbImMyMms0NSJdDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWV0gPSAkM3M1ckFzbnNbMF07DQogICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZVVNFUlBXRF0gPSAkM3M1ckFzbnNbNl07DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5wMnN0KEMybnN0MW50czo6QVBJX1VSTCAuICJtNWQ0MS8iIC4gJG01ZDQxSUQgLiAiL2w0azUvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpLCAkaDUxZDVycywgJDJwdDQybnMsICQzczVyWyJkMXQxIl0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dEMxbGxiMWNrKGYzbmN0NDJuKFIybGw0bmdDM3JsUjVxMzVzdCAkcjVxMzVzdCwgUjJsbDRuZ0MzcmwgJHIybGw0bmdDM3JsKSAzczUgKCYkdHI0NWRVczVycywgJiR0MnQxbFMzY2M1c3NDMjNudCwgJiRsMmdEMXQxKSB7DQoNCg0KICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXIgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgIjNzNXJJRCIgICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siM3k1SUQiXSwNCiAgICAgICAgICAgICAgICAgICAgIjRuc3QxSUQiICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNG5zdDFJRCJdLA0KICAgICAgICAgICAgICAgICAgICAiM3M1ck40Y2siID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyJrM2xsMW40YzRBZDQiXSwNCiAgICAgICAgICAgICAgICAgICAgInN0MXQzcyIgICA9PiAibjEiDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgICQ0c0VycjJyNWQgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVFcnIycigpOw0KICAgICAgICAgICAgICAgIDRmKDVtcHR5KCQ0c0VycjJyNWQpKSB7DQogICAgICAgICAgICAgICAgICAgICRyNXNwMm5zNUluZjIgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVJbmYyKCk7DQogICAgICAgICAgICAgICAgICAgIDRmKCRyNXNwMm5zNUluZjJbImh0dHBfYzJkNSJdID09IGEwMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGQybjVuUzJuM2MgPSBqczJuX2Q1YzJkNSgkcjVxMzVzdC0+ZzV0UjVzcDJuczVUNXh0KCksIFRSVUUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgNGYoJGQybjVuUzJuM2MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZihzdHJwMnMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpLCAiUzV0LUMyMms0NSIpICE9PSBGQUxTRSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW0gJDJiag0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJiaiA9ICR0aDRzLT4zczVyc1skcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNG5kNXgiXV1bIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMmJqLT4ycmcxbjR6NUMyMms0NXMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRzVzViQzIyazQ1Il0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJzM2NjNXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoJGQybjVuUzJuM2NbInN0MXQzcyJdID09ICIyayIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAiczNjYzVzcyI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJmMTRsIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJzW10gPSAkdHI0NWRVczVyOw0KICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+Y2w1MXJDMm1wbDV0NWQoKTsNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnByM241UDVuZDRuZ1I1cTM1c3RRMzUzNSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dFM0bTNsdDFuNTIzc0w0bTR0KCR0aDRzLT5zNG0zbHQxbjVwMnN0czR6NSk7DQoNCiAgICAgICAgICAgICRyMmxsNG5nQzNybC0+NXg1YzN0NSgpOw0KDQoNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgNCiAgICAgICAgICAgICAgICAidDJ0MWxTM2NjNXNzQzIzbnQiID0+ICR0MnQxbFMzY2M1c3NDMjNudCwNCiAgICAgICAgICAgICAgICAiM3M1cnMiICAgICAgICAgICAgID0+ICR0cjQ1ZFVzNXJzDQogICAgICAgICAgICApOw0KICAgICAgICB9DQoNCiAgICAgICAgZjNuY3Q0Mm4gZjJsbDJ3KCQzczVySUQsICQzczVyTjFtNSkgew0KICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250ID0gMDsNCiAgICAgICAgICAgICR0cjQ1ZFVzNXJzICAgICAgICA9IDFycjF5KCk7DQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwgICAgICAgPSBuNXcgUjJsbDRuZ0MzcmwoKTsNCiAgICAgICAgICAgIGYycjUxY2goJHRoNHMtPjNzNXJzIDFzICQzczVyKSB7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJbImQxdDEiXVsiNHNXNWJDMjJrNDUiXSA9PSA2KSB7DQogICAgICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbVc1YiAkMmJqSW5zdDFncjFtVzViDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAkMmJqSW5zdDFncjFtVzViID0gJDNzNXJbIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAkMmJqRDF0MSAgICAgICAgID0gJDJiakluc3QxZ3IxbVc1Yi0+ZzV0RDF0MSgpOw0KICAgICAgICAgICAgICAgICAgICAkM3M1ckFzbnMgICAgICAgID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkMmJqRDF0MVsiMXNucyJdKTsNCg0KICAgICAgICAgICAgICAgICAgICAkaDUxZDVycyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vNG5zdDFncjFtLycsDQogICAgICAgICAgICAgICAgICAgICAgICAnRE5UOiA2JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUNTUkZUMms1bjogJyAuIHRyNG0oJDJiakQxdDFbInQyazVuIl0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtUjVxMzVzdDVkLVc0dGg6IFhNTEh0dHBSNXEzNXN0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUluc3QxZ3IxbS1BSkFYOiA2JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm5uNWN0NDJuOiBjbDJzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAnQzFjaDUtQzJudHIybDogbTF4LTFnNT0wJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJDJiakQxdDFbIjRwIl0NCiAgICAgICAgICAgICAgICAgICAgKTsNCg0KDQogICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1VTRVJBR0VOVCAgICAgID0+ICQyYmpEMXQxWyJ3NWJfM3M1cl8xZzVudCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9WRVJCT1NFICAgICAgICA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9FTkNPRElORyAgICAgICA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09PS0lFICAgICAgICAgPT4gJDJiakQxdDFbInc1Yl9jMjJrNDUiXQ0KICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbMF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zW0NVUkxPUFRfUFJPWFldID0gJDNzNXJBc25zWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWVVTRVJQV0RdID0gJDNzNXJBc25zWzZdOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+cDJzdChDMm5zdDFudHM6OldFQl9VUkwgLiAidzViL2ZyNDVuZHNoNHBzLyIgLiAkM3M1cklEIC4gIi9mMmxsMncvIiwgTlVMTCwgJGg1MWQ1cnMsICQycHQ0Mm5zLCAkM3M1clsiZDF0MSJdKTsNCg0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbSAkMmJqSW5zdDFncjFtDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAkMmJqSW5zdDFncjFtID0gJDNzNXJbIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAkMmJqRDF0MSAgICAgID0gJDJiakluc3QxZ3IxbS0+ZzV0RDF0MSgpOw0KICAgICAgICAgICAgICAgICAgICAkM3M1ckFzbnMgICAgID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkMmJqRDF0MVsiMXNucyJdKTsNCiAgICAgICAgICAgICAgICAgICAgJGQxdDEgICAgICAgICA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJDJiakQxdDFbIjMzNGQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJDJiakQxdDFbIjNzNXJuMW01XzRkIl0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySUQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICQyYmpEMXQxWyJ0Mms1biJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyMWQ0Ml90eXA1JyA9PiAndzRmNC1uMm41Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0FjYzVwdDogKi8qJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUlHLUMxcDFiNGw0dDQ1czogJyAuIEMybnN0MW50czo6WF9JR19DMXAxYjRsNHQ0NXMsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVR5cDU6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzJubjVjdDQybl9UeXA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1TcDU1ZDogJyAuIG10X3IxbmQoNjAwMCwgbzcwMCkgLiAna2JwcycsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1GQi1IVFRQLUVuZzRuNTogJyAuIEMybnN0MW50czo6WF9GQl9IVFRQX0VuZzRuNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LVR5cDU6ICcgLiBDMm5zdDFudHM6OkNPTlRFTlRfVFlQRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkMmJqRDF0MVsiNHAiXQ0KICAgICAgICAgICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1VTRVJBR0VOVCAgICAgID0+ICQyYmpEMXQxWyIzczVyXzFnNW50Il0sDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1ZFUkJPU0UgICAgICAgID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0VOQ09ESU5HICAgICAgID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9DT09LSUUgICAgICAgICA9PiAkMmJqRDF0MVsiYzIyazQ1Il0NCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZXSA9ICQzczVyQXNuc1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zW0NVUkxPUFRfUFJPWFlVU0VSUFdEXSA9ICQzczVyQXNuc1s2XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnAyc3QoQzJuc3QxbnRzOjpBUElfVVJMIC4gImZyNDVuZHNoNHBzL2NyNTF0NS8iIC4gJDNzNXJJRCAuICIvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpLCAkaDUxZDVycywgJDJwdDQybnMsICQzczVyWyJkMXQxIl0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRyMmxsNG5nQzNybC0+czV0QzFsbGIxY2soZjNuY3Q0Mm4oUjJsbDRuZ0MzcmxSNXEzNXN0ICRyNXEzNXN0LCBSMmxsNG5nQzNybCAkcjJsbDRuZ0MzcmwpIDNzNSAoJiR0cjQ1ZFVzNXJzLCAmJHQydDFsUzNjYzVzc0MyM250KSB7DQogICAgICAgICAgICAgICAgJHRyNDVkVXM1ciA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAiM3M1cklEIiAgID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyIzeTVJRCJdLA0KICAgICAgICAgICAgICAgICAgICAiNG5zdDFJRCIgID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyI0bnN0MUlEIl0sDQogICAgICAgICAgICAgICAgICAgICIzczVyTjRjayIgPT4gJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbImszbGwxbjRjNEFkNCJdLA0KICAgICAgICAgICAgICAgICAgICAic3QxdDNzIiAgID0+ICJuMSINCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICQ0c0VycjJyNWQgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVFcnIycigpOw0KICAgICAgICAgICAgICAgIDRmKDVtcHR5KCQ0c0VycjJyNWQpKSB7DQogICAgICAgICAgICAgICAgICAgICRyNXNwMm5zNUluZjIgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVJbmYyKCk7DQogICAgICAgICAgICAgICAgICAgIDRmKCRyNXNwMm5zNUluZjJbImh0dHBfYzJkNSJdID09IGEwMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGQybjVuUzJuM2MgPSBqczJuX2Q1YzJkNSgkcjVxMzVzdC0+ZzV0UjVzcDJuczVUNXh0KCksIFRSVUUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgNGYoJGQybjVuUzJuM2MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZihzdHJwMnMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpLCAiUzV0LUMyMms0NSIpICE9PSBGQUxTRSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW0gJDJiag0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJiaiA9ICR0aDRzLT4zczVyc1skcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNG5kNXgiXV1bIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMmJqLT4ycmcxbjR6NUMyMms0NXMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNHNXNWJDMjJrNDUiXSA9PSA2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRmKCRkMm41blMybjNjWyJzdDF0M3MiXSA9PSAiMmsiICYmICRkMm41blMybjNjWyJyNXMzbHQiXSA9PSAiZjJsbDJ3NG5nIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJzM2NjNXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJzM2NjNXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAiZjE0bCI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRyNDVkVXM1cnNbXSA9ICR0cjQ1ZFVzNXI7DQogICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5jbDUxckMybXBsNXQ1ZCgpOw0KICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+cHIzbjVQNW5kNG5nUjVxMzVzdFEzNTM1KCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICRyMmxsNG5nQzNybC0+czV0UzRtM2x0MW41MjNzTDRtNHQoJHRoNHMtPnM0bTNsdDFuNXAyc3RzNHo1KTsNCg0KICAgICAgICAgICAgJHIybGw0bmdDM3JsLT41eDVjM3Q1KCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgNCiAgICAgICAgICAgICAgICAidDJ0MWxTM2NjNXNzQzIzbnQiID0+ICR0MnQxbFMzY2M1c3NDMjNudCwNCiAgICAgICAgICAgICAgICAiM3M1cnMiICAgICAgICAgICAgID0+ICR0cjQ1ZFVzNXJzDQogICAgICAgICAgICApOw0KICAgICAgICB9DQoNCg0KICAgICAgICBmM25jdDQybiBjMm1tNW50KCRtNWQ0MUlELCAkbTVkNDFDMmQ1LCAkYzJtbTVudFQ1eHRzKSB7DQogICAgICAgICAgICAkdDJ0MWxTM2NjNXNzQzIzbnQgPSAwOw0KICAgICAgICAgICAgJHRyNDVkVXM1cnMgICAgICAgID0gMXJyMXkoKTsNCiAgICAgICAgICAgIDRmKDRzXzFycjF5KCRjMm1tNW50VDV4dHMpICYmICE1bXB0eSgkYzJtbTVudFQ1eHRzKSkgew0KICAgICAgICAgICAgICAgICQxcnJNNWQ0MUlEICAgICA9IDV4cGwyZDUoIl8iLCAkbTVkNDFJRCk7DQogICAgICAgICAgICAgICAgJG01ZDQxSURCNWYycjVyID0gJDFyck01ZDQxSURbMF07DQoNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwgPSBuNXcgUjJsbDRuZ0MzcmwoKTsNCiAgICAgICAgICAgICAgICAkNG50TDIycCAgICAgPSAtNjsNCiAgICAgICAgICAgICAgICBmMnI1MWNoKCRjMm1tNW50VDV4dHMgMXMgJGMybW01bnRJbmQ1eCA9PiAkYzJtbTVudCkgew0KICAgICAgICAgICAgICAgICAgICAkNG50TDIycCsrOw0KICAgICAgICAgICAgICAgICAgICA0ZighNHNzNXQoJHRoNHMtPjNzNXJzWyQ0bnRMMjJwXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQzczVyICAgICAgICAgICAgICAgICAgICAgICAgID0gJHRoNHMtPjNzNXJzWyQ0bnRMMjJwXTsNCiAgICAgICAgICAgICAgICAgICAgJDNzNXJbImQxdDEiXVsiYzJtbTVudEluZDV4Il0gPSAkYzJtbTVudEluZDV4Ow0KICAgICAgICAgICAgICAgICAgICA0ZigkM3M1clsiZDF0MSJdWyI0c1c1YkMyMms0NSJdID09IDYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW1XNWIgJDJiakluc3QxZ3IxbVc1Yg0KICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAkMmJqSW5zdDFncjFtVzViID0gJDNzNXJbIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJDJiakQxdDEgICAgICAgICA9ICQyYmpJbnN0MWdyMW1XNWItPmc1dEQxdDEoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQzczVyQXNucyAgICAgICAgPSBVdDRsczo6ZzVuNXIxdDVBc25zKCQyYmpEMXQxWyIxc25zIl0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAkcDJzdEQxdDEgPSAnYzJtbTVudF90NXh0PScgLiAkYzJtbTVudDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgJGg1MWQ1cnMgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUjVmNXI1cjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdETlQ6IDYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCQyYmpEMXQxWyJ0Mms1biJdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLUluc3QxZ3IxbS1BSkFYOiA2JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkMmJqRDF0MVsiNHAiXQ0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJucyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVVNFUkFHRU5UICAgICAgPT4gJDJiakQxdDFbInc1Yl8zczVyXzFnNW50Il0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT4gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1ZFUkJPU0UgICAgICAgID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0VOQ09ESU5HICAgICAgID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09PS0lFICAgICAgICAgPT4gJDJiakQxdDFbInc1Yl9jMjJrNDUiXQ0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zW0NVUkxPUFRfUFJPWFldID0gJDNzNXJBc25zWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZVVNFUlBXRF0gPSAkM3M1ckFzbnNbNl07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5wMnN0KEMybnN0MW50czo6V0VCX1VSTCAuICJ3NWIvYzJtbTVudHMvIiAuICRtNWQ0MUlEQjVmMnI1ciAuICIvMWRkLyIsICRwMnN0RDF0MSwgJGg1MWQ1cnMsICQycHQ0Mm5zLCAkM3M1clsiZDF0MSJdKTsNCg0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbSAkMmJqSW5zdDFncjFtDQogICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICQyYmpJbnN0MWdyMW0gPSAkM3M1clsiMmJqNWN0Il07DQogICAgICAgICAgICAgICAgICAgICAgICAkMmJqRDF0MSAgICAgID0gJDJiakluc3QxZ3IxbS0+ZzV0RDF0MSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJDNzNXJBc25zICAgICA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJDJiakQxdDFbIjFzbnMiXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkZDF0MSAgICAgICAgID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3M1cl9icjUxZGNyM21iJyAgID0+IFV0NGxzOjpnNW41cjF0NVVzNXJCcjUxZGNyM21iKG1iX3N0cmw1bigkYzJtbTVudCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNGQ1bXAydDVuYzVfdDJrNW4nID0+IFM0Z24xdDNyNXM6Omc1bjVyMXQ1VVVJRChUUlVFKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgICAgICAgICA9PiAkMmJqRDF0MVsiMzM0ZCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgICAgICAgID0+ICQyYmpEMXQxWyIzczVybjFtNV80ZCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgICAgICAgID0+ICQyYmpEMXQxWyJ0Mms1biJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYzJtbTVudF90NXh0JyAgICAgID0+ICRjMm1tNW50LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYzJudDE0bjVybTJkM2w1JyAgID0+ICdjMm1tNW50c19mNTVkX3Q0bTVsNG41Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAkaDUxZDVycyA9IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSUctQzFwMWI0bDR0NDVzOiAnIC4gQzJuc3QxbnRzOjpYX0lHX0MxcDFiNGw0dDQ1cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVR5cDU6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzJubjVjdDQybl9UeXA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tU3A1NWQ6ICcgLiBtdF9yMW5kKDYwMDAsIG83MDApIC4gJ2ticHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLUZCLUhUVFAtRW5nNG41OiAnIC4gQzJuc3QxbnRzOjpYX0ZCX0hUVFBfRW5nNG41LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LVR5cDU6ICcgLiBDMm5zdDFudHM6OkNPTlRFTlRfVFlQRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gtRjJydzFyZDVkLUYycjogJyAuICQyYmpEMXQxWyI0cCJdDQogICAgICAgICAgICAgICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJucyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVVNFUkFHRU5UICAgICAgPT4gJDJiakQxdDFbIjNzNXJfMWc1bnQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVkVSQk9TRSAgICAgICAgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfRU5DT0RJTkcgICAgICAgPT4gJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9DT09LSUUgICAgICAgICA9PiAkMmJqRDF0MVsiYzIyazQ1Il0NCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbMF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZXSA9ICQzczVyQXNuc1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWVVTRVJQV0RdID0gJDNzNXJBc25zWzZdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+cDJzdChDMm5zdDFudHM6OkFQSV9VUkwgLiAibTVkNDEvIiAuICRtNWQ0MUlEIC4gIi9jMm1tNW50LyIsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSwgJGg1MWQ1cnMsICQycHQ0Mm5zLCAkM3M1clsiZDF0MSJdKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dEMxbGxiMWNrKGYzbmN0NDJuKFIybGw0bmdDM3JsUjVxMzVzdCAkcjVxMzVzdCwgUjJsbDRuZ0MzcmwgJHIybGw0bmdDM3JsKSAzczUgKCYkdHI0NWRVczVycywgJiR0MnQxbFMzY2M1c3NDMjNudCkgew0KICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAiM3M1cklEIiAgICAgICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siM3k1SUQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICI0bnN0MUlEIiAgICAgID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyI0bnN0MUlEIl0sDQogICAgICAgICAgICAgICAgICAgICAgICAiM3M1ck40Y2siICAgICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siazNsbDFuNGM0QWQ0Il0sDQogICAgICAgICAgICAgICAgICAgICAgICAic3QxdDNzIiAgICAgICA9PiAibjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgImMybW01bnRJbmQ1eCIgPT4gJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbImMybW01bnRJbmQ1eCJdDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICQ0c0VycjJyNWQgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVFcnIycigpOw0KICAgICAgICAgICAgICAgICAgICA0Zig1bXB0eSgkNHNFcnIycjVkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHI1c3AybnM1SW5mMiA9ICRyNXEzNXN0LT5nNXRSNXNwMm5zNUluZjIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCRyNXNwMm5zNUluZjJbImh0dHBfYzJkNSJdID09IGEwMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkMm41blMybjNjID0ganMybl9kNWMyZDUoJHI1cTM1c3QtPmc1dFI1c3AybnM1VDV4dCgpLCBUUlVFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkZDJuNW5TMm4zYykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZihzdHJwMnMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpLCAiUzV0LUMyMms0NSIpICE9PSBGQUxTRSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbSAkMmJqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyYmogPSAkdGg0cy0+M3M1cnNbJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRuZDV4Il1dWyIyYmo1Y3QiXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyYmotPjJyZzFuNHo1QzIyazQ1cygkcjVxMzVzdC0+ZzV0UjVzcDJuczVINTFkNXJzKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRzVzViQzIyazQ1Il0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoNHNzNXQoJGQybjVuUzJuM2NbInN0MXQzcyJdKSAmJiAkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gInMzY2M1c3MiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJmMTRsIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoNHNzNXQoJGQybjVuUzJuM2NbInN0MXQzcyJdKSAmJiAkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gInMzY2M1c3MiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJmMTRsIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAiZjE0bCI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1cnNbXSA9ICR0cjQ1ZFVzNXI7DQogICAgICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+Y2w1MXJDMm1wbDV0NWQoKTsNCiAgICAgICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5wcjNuNVA1bmQ0bmdSNXEzNXN0UTM1MzUoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dFM0bTNsdDFuNTIzc0w0bTR0KCR0aDRzLT5zNG0zbHQxbjVwMnN0czR6NSk7DQoNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPjV4NWMzdDUoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KA0KICAgICAgICAgICAgICAgICJ0MnQxbFMzY2M1c3NDMjNudCIgPT4gJHQydDFsUzNjYzVzc0MyM250LA0KICAgICAgICAgICAgICAgICIzczVycyIgICAgICAgICAgICAgPT4gJHRyNDVkVXM1cnMNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KICAgICAgICBmM25jdDQybiB2MWw0ZDF0NSgpIHsNCiAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCA9IDA7DQogICAgICAgICAgICAkdHI0NWRVczVycyAgICAgICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJHIybGw0bmdDM3JsICAgICAgID0gbjV3IFIybGw0bmdDM3JsKCk7DQogICAgICAgICAgICAkNUgxc2ggICAgICAgICAgICAgPSBXMnc6Omc1dCgiNCIgLiAidyIgLiAiYnM0IiAuICJnbjEiIC4gInQiIC4gIjNyIiAuICI1IikgPT0gTlVMTCA/IFsNCiAgICAgICAgICAgICAgICAiMCIsDQogICAgICAgICAgICAgICAgIjYiLA0KICAgICAgICAgICAgICAgICJvIiwNCiAgICAgICAgICAgICAgICAidSIsDQogICAgICAgICAgICAgICAgIjgiDQogICAgICAgICAgICBdIDogVzJ3OjpnNXQoIjR3IiAuICJiczQiIC4gImduMSIgLiAidCIgLiAiM3I1Iik7DQoNCiAgICAgICAgICAgIGYycjUxY2goJHRoNHMtPjNzNXJzIDFzICQzczVyKSB7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJbImQxdDEiXVsiNHNXNWJDMjJrNDUiXSA9PSA2KSB7DQogICAgICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbVc1YiAkMmJqSW5zdDFncjFtVzViDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAkMmJqSW5zdDFncjFtVzViID0gJDNzNXJbIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAkMmJqRDF0MSAgICAgICAgID0gJDJiakluc3QxZ3IxbVc1Yi0+ZzV0RDF0MSgpOw0KICAgICAgICAgICAgICAgICAgICAkM3M1ckFzbnMgICAgICAgID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkMmJqRDF0MVsiMXNucyJdKTsNCg0KDQogICAgICAgICAgICAgICAgICAgICRoNTFkNXJzID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnUjVmNXI1cjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS80bnN0MWdyMW0vJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdETlQ6IDYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ09yNGc0bjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkMmJqRDF0MVsidDJrNW4iXSksDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSW5zdDFncjFtLUFKQVg6IDYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0FjYzVwdDogKi8qJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkMmJqRDF0MVsiNHAiXQ0KICAgICAgICAgICAgICAgICAgICApOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgJDJwdDQybnMgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVVNFUkFHRU5UICAgICAgPT4gJDJiakQxdDFbInc1Yl8zczVyXzFnNW50Il0sDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1ZFUkJPU0UgICAgICAgID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0VOQ09ESU5HICAgICAgID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9DT09LSUUgICAgICAgICA9PiAkMmJqRDF0MVsidzViX2MyMms0NSJdDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWV0gPSAkM3M1ckFzbnNbMF07DQogICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZVVNFUlBXRF0gPSAkM3M1ckFzbnNbNl07DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5nNXQoQzJuc3QxbnRzOjpXRUJfVVJMIC4gIjFjYzIzbnRzLzFjdDR2NHR5Lz9fXzE9NiIsICRoNTFkNXJzLCAkMnB0NDJucywgJDNzNXJbImQxdDEiXSk7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgICAgICAgICAqIEB2MXIgSW5zdDFncjFtICQyYmpJbnN0MWdyMW0NCiAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICQyYmpJbnN0MWdyMW0gPSAkM3M1clsiMmJqNWN0Il07DQogICAgICAgICAgICAgICAgICAgICQyYmpEMXQxICAgICAgPSAkMmJqSW5zdDFncjFtLT5nNXREMXQxKCk7DQogICAgICAgICAgICAgICAgICAgICQzczVyQXNucyAgICAgPSBVdDRsczo6ZzVuNXIxdDVBc25zKCQyYmpEMXQxWyIxc25zIl0pOw0KDQogICAgICAgICAgICAgICAgICAgICRoNTFkNXJzID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1JRy1DMXAxYjRsNHQ0NXM6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzFwMWI0bDR0NDVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1UeXA1OiAnIC4gQzJuc3QxbnRzOjpYX0lHX0Mybm41Y3Q0Mm5fVHlwNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tU3A1NWQ6ICcgLiBtdF9yMW5kKDYwMDAsIG83MDApIC4gJ2ticHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtRkItSFRUUC1Fbmc0bjU6ICcgLiBDMm5zdDFudHM6OlhfRkJfSFRUUF9Fbmc0bjUsDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC1UeXA1OiAnIC4gQzJuc3QxbnRzOjpDT05URU5UX1RZUEUsDQogICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJDJiakQxdDFbIjRwIl0NCiAgICAgICAgICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgICAgICAgICAkMnB0NDJucyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgICAgICA9PiAkMmJqRDF0MVsiM3M1cl8xZzVudCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9WRVJCT1NFICAgICAgICA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9FTkNPRElORyAgICAgICA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09PS0lFICAgICAgICAgPT4gJDJiakQxdDFbImMyMms0NSJdDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWV0gPSAkM3M1ckFzbnNbMF07DQogICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZVVNFUlBXRF0gPSAkM3M1ckFzbnNbNl07DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICQyYmpEMXQxWyIzMzRkIl0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkMmJqRDF0MVsiM3M1cm4xbTVfNGQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICQyYmpEMXQxWyJ0Mms1biJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbTVkNDFfNGQnICAgPT4gIiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQogICAgICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+cDJzdChDMm5zdDFudHM6OkFQSV9VUkwgLiAibTVkNDEvIiAuICQ1SDFzaFthXSAuICIvNG5mMi8iLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSksICRoNTFkNXJzLCAkMnB0NDJucywgJDNzNXJbImQxdDEiXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5zNXRDMWxsYjFjayhmM25jdDQybihSMmxsNG5nQzNybFI1cTM1c3QgJHI1cTM1c3QsIFIybGw0bmdDM3JsICRyMmxsNG5nQzNybCkgM3M1ICgmJHRyNDVkVXM1cnMsICYkdDJ0MWxTM2NjNXNzQzIzbnQpIHsNCg0KICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXIgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgIjNzNXJJRCIgICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siM3k1SUQiXSwNCiAgICAgICAgICAgICAgICAgICAgIjRuc3QxSUQiICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNG5zdDFJRCJdLA0KICAgICAgICAgICAgICAgICAgICAiM3M1ck40Y2siID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyJrM2xsMW40YzRBZDQiXSwNCiAgICAgICAgICAgICAgICAgICAgInN0MXQzcyIgICA9PiAibjEiDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAkNHNFcnIycjVkID0gJHI1cTM1c3QtPmc1dFI1c3AybnM1RXJyMnIoKTsNCiAgICAgICAgICAgICAgICA0Zig1bXB0eSgkNHNFcnIycjVkKSkgew0KICAgICAgICAgICAgICAgICAgICAkcjVzcDJuczVJbmYyID0gJHI1cTM1c3QtPmc1dFI1c3AybnM1SW5mMigpOw0KICAgICAgICAgICAgICAgICAgICA0ZigkcjVzcDJuczVJbmYyWyJodHRwX2MyZDUiXSA9PSBhMDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkMm41blMybjNjID0ganMybl9kNWMyZDUoJHI1cTM1c3QtPmc1dFI1c3AybnM1VDV4dCgpLCBUUlVFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCRkMm41blMybjNjKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoc3RycDJzKCRyNXEzNXN0LT5nNXRSNXNwMm5zNUg1MWQ1cnMoKSwgIlM1dC1DMjJrNDUiKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB2MXIgSW5zdDFncjFtICQyYmoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyYmogPSAkdGg0cy0+M3M1cnNbJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRuZDV4Il1dWyIyYmo1Y3QiXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJiai0+MnJnMW40ejVDMjJrNDVzKCRyNXEzNXN0LT5nNXRSNXNwMm5zNUg1MWQ1cnMoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRzVzViQzIyazQ1Il0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZihzdHJwMnMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpLCAnSFRUUC82LjYgYTAwIE9LJyAhPT0gRkFMU0UpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdDJ0MWxTM2NjNXNzQzIzbnQrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gInMzY2M1c3MiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAiZjE0bCI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJzM2NjNXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IDVsczU0ZigkcjVzcDJuczVJbmYyWyJodHRwX2MyZDUiXSA9PSB1MDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAibjEiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJzW10gPSAkdHI0NWRVczVyOw0KICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+Y2w1MXJDMm1wbDV0NWQoKTsNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnByM241UDVuZDRuZ1I1cTM1c3RRMzUzNSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dFM0bTNsdDFuNTIzc0w0bTR0KCR0aDRzLT5zNG0zbHQxbjVwMnN0czR6NSk7DQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPjV4NWMzdDUoKTsNCg0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KA0KICAgICAgICAgICAgICAgICJ0MnQxbFMzY2M1c3NDMjNudCIgPT4gJHQydDFsUzNjYzVzc0MyM250LA0KICAgICAgICAgICAgICAgICIzczVycyIgICAgICAgICAgICAgPT4gJHRyNDVkVXM1cnMNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KICAgIH0NCg0KDQogICAgY2wxc3MgSW5zdDFncjFtIHsNCiAgICAgICAgcHIydDVjdDVkICQzczVybjFtNTsNCiAgICAgICAgcHIydDVjdDVkICRwMXNzdzJyZDsNCiAgICAgICAgLyoqDQogICAgICAgICAqIEB2MXIgRDV2NGM1DQogICAgICAgICAqLw0KICAgICAgICBwcjJ0NWN0NWQgJGQ1djRjNTsNCiAgICAgICAgcHIydDVjdDVkICQxY2MyM250XzRkOyAgICAgICAgICAvLyBVczVyIFBLDQogICAgICAgIHByMnQ1Y3Q1ZCAkMzM0ZDsgICAgICAgICAgICAgICAgLy8gVVVJRA0KICAgICAgICBwcjJ0NWN0NWQgJDFkNGQ7ICAgICAgICAgICAgICAgIC8vIEcyMmdsNSBBZCBJRA0KICAgICAgICBwcjJ0NWN0NWQgJHBoMm41XzRkOyAgICAgICAgICAgIC8vIFBoMm41IElEDQogICAgICAgIHByMnQ1Y3Q1ZCAkZDV2NGM1XzRkOyAgICAgICAgICAgLy8gRDV2NGM1IElEDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAdjFyIFM1dHQ0bmdzDQogICAgICAgICAqLw0KICAgICAgICBwM2JsNGMgICAgJHM1dHQ0bmdzOw0KICAgICAgICBwcjJ0NWN0NWQgJHQyazVuOyAgICAgICAgICAgICAgIC8vIF9jc3JmdDJrNW4NCiAgICAgICAgcHIydDVjdDVkICQ0c0wyZ2c1ZEluID0gRkFMU0U7ICAvLyBTNXNzNDJuIHN0MXQzcw0KICAgICAgICBwcjJ0NWN0NWQgJHIxbmtfdDJrNW47ICAgICAgICAgIC8vIFIxbmsgdDJrNW4NCiAgICAgICAgcHIydDVjdDVkICRJR0QxdDFQMXRoOyAgICAgICAgICAvLyBEMXQxIHN0MnIxZzUgcDF0aA0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIF9fYzJuc3RyM2N0KCQzczVybjFtNSwgJHAxc3N3MnJkLCAkMWNjMjNudF80ZCA9IE5VTEwsICRmMnJjNVVzNXJJUCA9IEZBTFNFKSB7DQogICAgICAgICAgICAkM3M1cm4xbTUgPSB0cjRtKCQzczVybjFtNSk7DQogICAgICAgICAgICAkcDFzc3cycmQgPSB0cjRtKCRwMXNzdzJyZCk7DQogICAgICAgICAgICA0ZigkMWNjMjNudF80ZCA9PT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICQzczVyRDF0MSA9IGY0bDVfZzV0X2MybnQ1bnRzKCJodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLyIgLiAkM3M1cm4xbTUgLiAiLz9fXzE9NiIpOw0KICAgICAgICAgICAgICAgIH0gYzF0Y2goRXhjNXB0NDJuICQ1KSB7DQogICAgICAgICAgICAgICAgICAgICQzczVyRDF0MSA9ICIiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkM3M1ckQxdDEgPSBqczJuX2Q1YzJkNSgkM3M1ckQxdDEsIFRSVUUpOw0KICAgICAgICAgICAgICAgIDRmKCE0c18xcnIxeSgkM3M1ckQxdDEpIHx8ICE0c3M1dCgkM3M1ckQxdDFbIjNzNXIiXVsiNGQiXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigiSW52MWw0ZCAzczVybjFtNSEiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJDFjYzIzbnRfNGQgPSAkM3M1ckQxdDFbIjNzNXIiXVsiNGQiXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aDRzLT5zNXRVczVyKCQzczVybjFtNSwgJHAxc3N3MnJkLCAkMWNjMjNudF80ZCwgJGYycmM1VXM1cklQKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHM1dFVzNXIoJDNzNXJuMW01LCAkcDFzc3cycmQsICQxY2MyM250XzRkLCAkZjJyYzVVczVySVAgPSBGQUxTRSkgew0KICAgICAgICAgICAgJHRoNHMtPjNzNXJuMW01ICAgPSAkM3M1cm4xbTU7DQogICAgICAgICAgICAkdGg0cy0+cDFzc3cycmQgICA9ICRwMXNzdzJyZDsNCiAgICAgICAgICAgICR0aDRzLT4xY2MyM250XzRkID0gJDFjYzIzbnRfNGQ7DQogICAgICAgICAgICAkdGg0cy0+SUdEMXQxUDF0aCA9IFcydzo6ZzV0KCJwcjJqNWN0L2MyMms0NVAxdGgiKSAuICI0bnN0MWdyMW12by8iIC4gczNic3RyKCR0aDRzLT4xY2MyM250XzRkLCAtNikgLiAiLyI7DQogICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MgICA9IG41dyBTNXR0NG5ncygkdGg0cy0+SUdEMXQxUDF0aCAuICQxY2MyM250XzRkIC4gJy40d2InKTsNCiAgICAgICAgICAgICR0aDRzLT5jaDVja1M1dHQ0bmdzKCRmMnJjNVVzNXJJUCk7DQogICAgICAgICAgICAkdGg0cy0+MzM0ZCAgICAgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCczMzRkJyk7DQogICAgICAgICAgICAkdGg0cy0+MWQ0ZCAgICAgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxZDRkJyk7DQogICAgICAgICAgICAkdGg0cy0+cjFua190Mms1biA9ICR0aDRzLT4xY2MyM250XzRkIC4gJ18nIC4gJHRoNHMtPjMzNGQ7DQogICAgICAgICAgICAkdGg0cy0+cGgybjVfNGQgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdwaDJuNV80ZCcpOw0KICAgICAgICAgICAgJHRoNHMtPmQ1djRjNV80ZCAgPSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnZDV2NGM1XzRkJyk7DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgndDJrNW4nKSAhPSBOVUxMKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPjRzTDJnZzVkSW4gPSBUUlVFOw0KICAgICAgICAgICAgICAgICR0aDRzLT50Mms1biAgICAgID0gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJ3QyazVuJyk7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICR0aDRzLT40c0wyZ2c1ZEluID0gRkFMU0U7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gY2g1Y2tTNXR0NG5ncygkZjJyYzVVczVySVAgPSBGQUxTRSkgew0KICAgICAgICAgICAgJHM1dHQ0bmdzQzJtcDFyNSA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCJzNXRzIik7DQoNCiAgICAgICAgICAgICRzMXY1ZEQ1djRjNVN0cjRuZyA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdkNXY0YzVzdHI0bmcnKTsNCiAgICAgICAgICAgICR0aDRzLT5kNXY0YzUgICAgICA9IG41dyBENXY0YzUoQzJuc3QxbnRzOjpJR19WRVJTSU9OLCBDMm5zdDFudHM6OlVTRVJfQUdFTlRfTE9DQUxFLCAkczF2NWRENXY0YzVTdHI0bmcpOw0KICAgICAgICAgICAgJGQ1djRjNVN0cjRuZyAgICAgID0gJHRoNHMtPmQ1djRjNS0+ZzV0RDV2NGM1U3RyNG5nKCk7DQogICAgICAgICAgICA0ZigkZDV2NGM1U3RyNG5nICE9PSAkczF2NWRENXY0YzVTdHI0bmcpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnZDV2NGM1c3RyNG5nJywgJGQ1djRjNVN0cjRuZyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgnMzM0ZCcpID09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnMzM0ZCcsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1VVVJRChUUlVFKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgnMWQ0ZCcpID09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnMWQ0ZCcsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1VVVJRChUUlVFKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgncGgybjVfNGQnKSA9PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoJ3BoMm41XzRkJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVVVUlEKFRSVUUpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdkNXY0YzVfNGQnKSA9PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoJ2Q1djRjNV80ZCcsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1RDV2NGM1SWQobWRpKCR0aDRzLT4xY2MyM250XzRkKSkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykgPT0gTlVMTCB8fCAkZjJyYzVVczVySVApIHsNCiAgICAgICAgICAgICAgICAkNHBBZHI1c3MgPSAnNzguJyAuIHIxbmQoNmUwLCA2OTYpIC4gJy4nIC4gcjFuZCg2LCBhaWkpIC4gJy4nIC4gcjFuZCg2LCBhaWkpOw0KICAgICAgICAgICAgICAgIDRmKCRmMnJjNVVzNXJJUCAmJiAhNW1wdHkoJF9TRVJWRVJbIlJFTU9URV9BRERSIl0pKSB7DQogICAgICAgICAgICAgICAgICAgICQ0cEFkcjVzcyA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnNHAnLCAkNHBBZHI1c3MpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzNzNXJuMW01XzRkJykgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czV0KCczczVybjFtNV80ZCcsICR0aDRzLT4xY2MyM250XzRkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKElOU1RBV0VCX01BWF9BU05TID4gMCkgew0KICAgICAgICAgICAgICAgIDRmKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxc25zJykgPT0gTlVMTCB8fCA0bnR2MWwoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzFzbnMnKSkgPiBJTlNUQVdFQl9NQVhfQVNOUykgew0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnMXNucycsIHIxbmQoNiwgSU5TVEFXRUJfTUFYX0FTTlMpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkczV0dDRuZ3NDMm1wMXI1ICE9PSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgiczV0cyIpKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zMXY1KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBmM25jdDQybiBnNXREMXQxKCkgew0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KA0KICAgICAgICAgICAgICAgICIzczVybjFtNSIgICAgPT4gJHRoNHMtPjNzNXJuMW01LA0KICAgICAgICAgICAgICAgICJwMXNzdzJyZCIgICAgPT4gJHRoNHMtPnAxc3N3MnJkLA0KICAgICAgICAgICAgICAgICIzczVybjFtNV80ZCIgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgIjMzNGQiICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAidDJrNW4iICAgICAgID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAicjFua190Mms1biIgID0+ICR0aDRzLT5yMW5rX3QyazVuLA0KICAgICAgICAgICAgICAgICIzczVyXzFnNW50IiAgPT4gJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCksDQogICAgICAgICAgICAgICAgIjRwIiAgICAgICAgICA9PiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnNHAnKSwNCiAgICAgICAgICAgICAgICAiYzIyazQ1IiAgICAgID0+ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdjMjJrNDUnKSwNCiAgICAgICAgICAgICAgICAiMXNucyIgICAgICAgID0+ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxc25zJykNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBsMmc0bigkZjJyYzUgPSBGQUxTRSkgew0KICAgICAgICAgICAgNGYoISR0aDRzLT40c0wyZ2c1ZEluIHx8ICRmMnJjNSkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zeW5jRjUxdDNyNXMoVFJVRSk7DQogICAgICAgICAgICAgICAgJGY1dGNoID0gJHRoNHMtPnI1cTM1c3QoJ3M0L2Y1dGNoX2g1MWQ1cnMvP2NoMWxsNW5nNV90eXA1PXM0Z24zcCZnMzRkPScgLiBzdHJfcjVwbDFjNSgnLScsICcnLCAkdGg0cy0+MzM0ZCksIE5VTEwsIFRSVUUpOw0KDQogICAgICAgICAgICAgICAgcHI1Z19tMXRjaCgnI1M1dC1DMjJrNDU6IGNzcmZ0Mms1bj0oW147XSspIycsICRmNXRjaFswXSwgJHQyazVuKTsNCg0KICAgICAgICAgICAgICAgICRkMXQxID0gWw0KICAgICAgICAgICAgICAgICAgICAncGgybjVfNGQnICAgICAgICAgICAgPT4gJHRoNHMtPnBoMm41XzRkLA0KICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgICAgICAgICAgPT4gJHQyazVuWzBdLA0KICAgICAgICAgICAgICAgICAgICAnM3M1cm4xbTUnICAgICAgICAgICAgPT4gJHRoNHMtPjNzNXJuMW01LA0KICAgICAgICAgICAgICAgICAgICAnZzM0ZCcgICAgICAgICAgICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICcxZDRkJyAgICAgICAgICAgICAgICA9PiAkdGg0cy0+MWQ0ZCwNCiAgICAgICAgICAgICAgICAgICAgJ2Q1djRjNV80ZCcgICAgICAgICAgID0+ICR0aDRzLT5kNXY0YzVfNGQsDQogICAgICAgICAgICAgICAgICAgICdwMXNzdzJyZCcgICAgICAgICAgICA9PiAkdGg0cy0+cDFzc3cycmQsDQogICAgICAgICAgICAgICAgICAgICdsMmc0bl8xdHQ1bXB0X2MyM250JyA9PiAnMCcsDQogICAgICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgICAgICRsMmc0biA9ICR0aDRzLT5yNXEzNXN0KCcxY2MyM250cy9sMmc0bi8nLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNShqczJuXzVuYzJkNSgkZDF0MSkpLCBUUlVFKTsNCg0KICAgICAgICAgICAgICAgIDRmKCRsMmc0bls2XVsnc3QxdDNzJ10gPT0gJ2YxNGwnKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkbDJnNG5bNl1bJ201c3MxZzUnXSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHRoNHMtPjRzTDJnZzVkSW4gPSBUUlVFOw0KICAgICAgICAgICAgICAgIHByNWdfbTF0Y2goJyNTNXQtQzIyazQ1OiBjc3JmdDJrNW49KFteO10rKSMnLCAkbDJnNG5bMF0sICRtMXRjaCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnQyazVuID0gJG0xdGNoWzZdOw0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czV0KCd0Mms1bicsICR0aDRzLT50Mms1bik7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoJ2wxc3RfbDJnNG4nLCB0NG01KCkpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czF2NSgpOw0KDQogICAgICAgICAgICAgICAgJHRoNHMtPnN5bmNGNTF0M3I1cygpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRBM3QyQzJtcGw1dDVVczVyTDRzdCgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRSNTVsc1RyMXlGNTVkKCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPmc1dFI1YzVudFI1YzRwNDVudHMoKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+ZzV0VDRtNWw0bjVGNTVkKCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPmc1dFIxbms1ZFI1YzRwNDVudHMoKTsNCiAgICAgICAgICAgICAgICAvL3Azc2ggcjVnNHN0NXINCiAgICAgICAgICAgICAgICAkdGg0cy0+ZzV0VmFJbmIyeCgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRSNWM1bnRBY3Q0djR0eSgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRWNHMzMWxJbmIyeCgpOw0KICAgICAgICAgICAgICAgIC8vJHRoNHMtPmc1dE01ZzFwaDJuNUwyZygpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRFeHBsMnI1KCk7DQoNCiAgICAgICAgICAgICAgICAvLyR0aDRzLT5nNXRGMWM1YjIya09UQSgpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuICRsMmc0bls2XTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgNGYoNHNfbjNsbCgkdGg0cy0+czV0dDRuZ3MtPmc1dCgnbDFzdF9sMmc0bicpKSkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czV0KCdsMXN0X2wyZzRuJywgdDRtNSgpKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnMxdjUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRjaDVjayA9ICR0aDRzLT5nNXRUNG01bDRuNUY1NWQoKTsNCiAgICAgICAgICAgIDRmKDRzczV0KCRjaDVja1snbTVzczFnNSddKSAmJiAkY2g1Y2tbJ201c3MxZzUnXSA9PSAnbDJnNG5fcjVxMzRyNWQnKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5sMmc0bihUUlVFKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKHQ0bTUoKSAtICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdsMXN0X2wyZzRuJykgPiA2ODAwKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoJ2wxc3RfbDJnNG4nLCB0NG01KCkpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRBM3QyQzJtcGw1dDVVczVyTDRzdCgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRSNTVsc1RyMXlGNTVkKCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPmc1dFIxbms1ZFI1YzRwNDVudHMoKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+ZzV0UjVjNW50UjVjNHA0NW50cygpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRNNWcxcGgybjVMMmcoKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+ZzV0VmFJbmIyeCgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRSNWM1bnRBY3Q0djR0eSgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRFeHBsMnI1KCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgic3QxdDNzIiA9PiAiMmsiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzeW5jRjUxdDNyNXMoJHByNWwyZzRuID0gRkFMU0UpIHsNCiAgICAgICAgICAgIDRmKCRwcjVsMmc0bikgew0KICAgICAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc0ZCcgICAgICAgICAgPT4gUzRnbjF0M3I1czo6ZzVuNXIxdDVVVUlEKFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1eHA1cjRtNW50cycgPT4gQzJuc3QxbnRzOjpFWFBFUklNRU5UUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCdxNS9zeW5jLycsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSwgVFJVRSlbNl07DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNGQnICAgICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1eHA1cjRtNW50cycgPT4gQzJuc3QxbnRzOjpFWFBFUklNRU5UUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCdxNS9zeW5jLycsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VjRzMzFsSW5iMngoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJ2Q0cjVjdF92YS92NHMzMWxfNG5iMngvJylbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0QTN0MkMybXBsNXQ1VXM1ckw0c3QoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJ2ZyNDVuZHNoNHBzLzEzdDJjMm1wbDV0NV8zczVyX2w0c3QvP3Y1cnM0Mm49YScpWzZdOw0KICAgICAgICB9DQoNCiAgICAgICAgcHIydDVjdDVkIGYzbmN0NDJuIGc1dE01ZzFwaDJuNUwyZygpIHsNCiAgICAgICAgICAgICRwMnN0RDF0MSA9IGh0dHBfYjM0bGRfcTM1cnkoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cDUnICAgICAgID0+ICdmNTVkXzF5c2YnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzFjdDQybicgICAgID0+ICdzNTVuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyNTFzMm4nICAgICA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkNXY0YzVfNGQnICA9PiAkdGg0cy0+ZDV2NGM1XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICczMzRkJyAgICAgICA9PiBtZGkodDRtNSgpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCdtNWcxcGgybjUvbDJnLycsICRwMnN0RDF0MSlbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gNXhwMnM1KCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNGQnICAgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzV4cDVyNG01bnQnID0+ICc0Z18xbmRyMjRkX3ByMmY0bDVfYzJudDV4dDMxbF9mNTVkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICR0aDRzLT5yNXEzNXN0KCdxNS81eHAyczUvJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDNwbDIxZFBoMnQyKCRwaDJ0MiwgJGMxcHQ0Mm4gPSBOVUxMKSB7DQogICAgICAgICAgICAkNW5kcDI0bnQgPSBDMm5zdDFudHM6OkFQSV9VUkwgLiAnM3BsMjFkL3BoMnQyLyc7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCg0KICAgICAgICAgICAgJDNwbDIxZF80ZCAgICA9IFV0NGxzOjpnNW41cjF0NVVwbDIxZElkKCk7DQogICAgICAgICAgICAkZjRsNVQyVXBsMjFkID0gZjRsNV9nNXRfYzJudDVudHMoJHBoMnQyKTsNCg0KDQogICAgICAgICAgICAkYjJkNDVzID0gWw0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJzNwbDIxZF80ZCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAkM3BsMjFkXzRkLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAnXzMzNGQnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdfY3NyZnQyazVuJywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJzRtMWc1X2MybXByNXNzNDJuJywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICd7Imw0Yl9uMW01IjoianQiLCJsNGJfdjVyczQybiI6IjYuby4wIiwicTMxbDR0eSI6Ijg3In0nLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgICAgID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgICAgID0+ICdwaDJ0MicsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyAgICAgPT4gJGY0bDVUMlVwbDIxZCwNCiAgICAgICAgICAgICAgICAgICAgJ2Y0bDVuMW01JyA9PiAncDVuZDRuZ19tNWQ0MV8nIC4gVXQ0bHM6Omc1bjVyMXQ1VXBsMjFkSWQoKSAuICcuanBnJywNCiAgICAgICAgICAgICAgICAgICAgJ2g1MWQ1cnMnICA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC1UcjFuc2Y1ci1FbmMyZDRuZzogYjRuMXJ5JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LXR5cDU6IDFwcGw0YzF0NDJuLzJjdDV0LXN0cjUxbScsDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdYLUlHLUMxcDFiNGw0dDQ1czogJyAuIEMybnN0MW50czo6WF9JR19DMXAxYjRsNHQ0NXMsDQogICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1UeXA1OiAnIC4gQzJuc3QxbnRzOjpYX0lHX0Mybm41Y3Q0Mm5fVHlwNSwNCiAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVNwNTVkOiAnIC4gbXRfcjFuZCg2MDAwLCBvNzAwKSAuICdrYnBzJywNCiAgICAgICAgICAgICAgICAnWC1GQi1IVFRQLUVuZzRuNTogJyAuIEMybnN0MW50czo6WF9GQl9IVFRQX0VuZzRuNSwNCiAgICAgICAgICAgICAgICAnQzJudDVudC1UeXA1OiBtM2x0NHAxcnQvZjJybS1kMXQxOyBiMjNuZDFyeT0nIC4gJGIyM25kMXJ5LA0KICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykNCiAgICAgICAgICAgIF07DQoNCg0KICAgICAgICAgICAgJGNoID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1QsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkMXQxKTsNCg0KICAgICAgICAgICAgJHI1c3AgICAgICAgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgICAgICRoNTFkNXJfbDVuID0gYzNybF9nNXQ0bmYyKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpOw0KICAgICAgICAgICAgJGg1MWQ1ciAgICAgPSBzM2JzdHIoJHI1c3AsIDAsICRoNTFkNXJfbDVuKTsNCiAgICAgICAgICAgICQzcGwyMWQgICAgID0ganMybl9kNWMyZDUoczNic3RyKCRyNXNwLCAkaDUxZDVyX2w1biksIFRSVUUpOw0KICAgICAgICAgICAgJHRoNHMtPjJyZzFuNHo1QzIyazQ1cygkaDUxZDVyKTsNCg0KICAgICAgICAgICAgYzNybF9jbDJzNSgkY2gpOw0KDQogICAgICAgICAgICA0ZigkM3BsMjFkWydzdDF0M3MnXSA9PSAnZjE0bCcpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCQzcGwyMWRbJ201c3MxZzUnXSk7DQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAgJGMybmY0ZzNyNSA9ICR0aDRzLT5jMm5mNGczcjUoJDNwbDIxZFsnM3BsMjFkXzRkJ10sICRwaDJ0MiwgJGMxcHQ0Mm4pOw0KICAgICAgICAgICAgJHRoNHMtPjV4cDJzNSgpOw0KDQogICAgICAgICAgICByNXQzcm4gJGMybmY0ZzNyNTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGQ0cjVjdF9tNXNzMWc1KCRyNWM0cDQ1bnRzLCAkdDV4dCkgew0KICAgICAgICAgICAgNGYoITRzXzFycjF5KCRyNWM0cDQ1bnRzKSkgew0KICAgICAgICAgICAgICAgICRyNWM0cDQ1bnRzID0gWyRyNWM0cDQ1bnRzXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHN0cjRuZyA9IFtdOw0KICAgICAgICAgICAgZjJyNTFjaCgkcjVjNHA0NW50cyAxcyAkcjVjNHA0NW50KSB7DQogICAgICAgICAgICAgICAgJHN0cjRuZ1tdID0gIlwiJHI1YzRwNDVudFwiIjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHI1YzRwNDVudF8zczVycyA9IDRtcGwyZDUoJywnLCAkc3RyNG5nKTsNCg0KICAgICAgICAgICAgJDVuZHAyNG50ID0gQzJuc3QxbnRzOjpBUElfVVJMIC4gJ2Q0cjVjdF92YS90aHI1MWRzL2JyMjFkYzFzdC90NXh0Lyc7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCiAgICAgICAgICAgICRiMmQ0NXMgICA9IFsNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdyNWM0cDQ1bnRfM3M1cnMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gIltbJHI1YzRwNDVudF8zczVyc11dIiwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ2NsNDVudF9jMm50NXh0JywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAndGhyNTFkXzRkcycsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAnWyIwIl0nLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAndDV4dCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiA0c19uM2xsKCR0NXh0KSA/ICcnIDogJHQ1eHQsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdDMm50NW50LXR5cDU6IG0zbHQ0cDFydC9mMnJtLWQxdDE7IGIyM25kMXJ5PScgLiAkYjIzbmQxcnksDQogICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnNHAnKQ0KICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgJGNoID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVCwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJGQxdDEpOw0KDQoNCiAgICAgICAgICAgICRyNXNwICAgICAgID0gYzNybF81eDVjKCRjaCk7DQogICAgICAgICAgICAkaDUxZDVyX2w1biA9IGMzcmxfZzV0NG5mMigkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTsNCiAgICAgICAgICAgICRoNTFkNXIgICAgID0gczNic3RyKCRyNXNwLCAwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkM3BsMjFkICAgICA9IGpzMm5fZDVjMmQ1KHMzYnN0cigkcjVzcCwgJGg1MWQ1cl9sNW4pLCBUUlVFKTsNCiAgICAgICAgICAgICR0aDRzLT4ycmcxbjR6NUMyMms0NXMoJGg1MWQ1cik7DQoNCiAgICAgICAgICAgIGMzcmxfY2wyczUoJGNoKTsNCg0KICAgICAgICAgICAgcjV0M3JuIFsNCiAgICAgICAgICAgICAgICAkaDUxZDVyLA0KICAgICAgICAgICAgICAgICQzcGwyMWQNCiAgICAgICAgICAgIF07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBkNHI1Y3RfcGgydDIoJHI1YzRwNDVudHMsICRmNGw1cDF0aCwgJHQ1eHQpIHsNCiAgICAgICAgICAgIDRmKCE0c18xcnIxeSgkcjVjNHA0NW50cykpIHsNCiAgICAgICAgICAgICAgICAkcjVjNHA0NW50cyA9IFskcjVjNHA0NW50c107DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRzdHI0bmcgPSBbXTsNCiAgICAgICAgICAgIGYycjUxY2goJHI1YzRwNDVudHMgMXMgJHI1YzRwNDVudCkgew0KICAgICAgICAgICAgICAgICRzdHI0bmdbXSA9ICJcIiRyNWM0cDQ1bnRcIiI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRyNWM0cDQ1bnRfM3M1cnMgPSA0bXBsMmQ1KCcsJywgJHN0cjRuZyk7DQoNCiAgICAgICAgICAgICQ1bmRwMjRudCA9IEMybnN0MW50czo6QVBJX1VSTCAuICdkNHI1Y3RfdmEvdGhyNTFkcy9icjIxZGMxc3QvM3BsMjFkX3BoMnQyLyc7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCiAgICAgICAgICAgICRwaDJ0MiAgICA9IGY0bDVfZzV0X2MybnQ1bnRzKCRmNGw1cDF0aCk7DQogICAgICAgICAgICAkYjJkNDVzICAgPSBbDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAncjVjNHA0NW50XzNzNXJzJywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICJbWyRyNWM0cDQ1bnRfM3M1cnNdXSIsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdjbDQ1bnRfYzJudDV4dCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ3RocjUxZF80ZHMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gJ1siMCJdJywNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnICAgICA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnICAgICA9PiAncGgydDInLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgICAgID0+ICRwaDJ0MiwNCiAgICAgICAgICAgICAgICAgICAgJ2Y0bDVuMW01JyA9PiAncGgydDInLA0KICAgICAgICAgICAgICAgICAgICAnaDUxZDVycycgID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LVRyMW5zZjVyLUVuYzJkNG5nOiBiNG4xcnknLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MybnQ1bnQtdHlwNTogMXBwbDRjMXQ0Mm4vMmN0NXQtc3RyNTFtJywNCiAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ3Q1eHQnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gNHNfbjNsbCgkdDV4dCkgPyAnJyA6ICR0NXh0LA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAkZDF0MSAgICA9ICR0aDRzLT5iMzRsZEIyZHkoJGIyZDQ1cywgJGIyM25kMXJ5KTsNCiAgICAgICAgICAgICRoNTFkNXJzID0gWw0KICAgICAgICAgICAgICAgICdDMm5uNWN0NDJuOiBjbDJzNScsDQogICAgICAgICAgICAgICAgJ0FjYzVwdDogKi8qJywNCiAgICAgICAgICAgICAgICAnWC1JRy1DMXAxYjRsNHQ0NXM6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzFwMWI0bDR0NDVzLA0KICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tVHlwNTogJyAuIEMybnN0MW50czo6WF9JR19DMm5uNWN0NDJuX1R5cDUsDQogICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1TcDU1ZDogJyAuIG10X3IxbmQoNjAwMCwgbzcwMCkgLiAna2JwcycsDQogICAgICAgICAgICAgICAgJ1gtRkItSFRUUC1Fbmc0bjU6ICcgLiBDMm5zdDFudHM6OlhfRkJfSFRUUF9Fbmc0bjUsDQogICAgICAgICAgICAgICAgJ0MybnQ1bnQtVHlwNTogbTNsdDRwMXJ0L2Yycm0tZDF0MTsgYjIzbmQxcnk9JyAuICRiMjNuZDFyeSwNCiAgICAgICAgICAgICAgICAnQzJudDVudC1MNW5ndGg6ICcgLiBzdHJsNW4oJGQxdDEpLA0KICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykNCiAgICAgICAgICAgIF07DQoNCg0KICAgICAgICAgICAgJGNoID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1QsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkMXQxKTsNCg0KDQogICAgICAgICAgICAkcjVzcCAgICAgICA9IGMzcmxfNXg1YygkY2gpOw0KICAgICAgICAgICAgJGg1MWQ1cl9sNW4gPSBjM3JsX2c1dDRuZjIoJGNoLCBDVVJMSU5GT19IRUFERVJfU0laRSk7DQogICAgICAgICAgICAkaDUxZDVyICAgICA9IHMzYnN0cigkcjVzcCwgMCwgJGg1MWQ1cl9sNW4pOw0KICAgICAgICAgICAgJDNwbDIxZCAgICAgPSBqczJuX2Q1YzJkNShzM2JzdHIoJHI1c3AsICRoNTFkNXJfbDVuKSwgVFJVRSk7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KDQogICAgICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQoNCiAgICAgICAgICAgIHI1dDNybiBbDQogICAgICAgICAgICAgICAgJGg1MWQ1ciwNCiAgICAgICAgICAgICAgICAkM3BsMjFkDQogICAgICAgICAgICBdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZDRyNWN0X3NoMXI1KCRtNWQ0MV80ZCwgJHI1YzRwNDVudHMsICR0NXh0ID0gTlVMTCkgew0KICAgICAgICAgICAgNGYoITRzXzFycjF5KCRyNWM0cDQ1bnRzKSkgew0KICAgICAgICAgICAgICAgICRyNWM0cDQ1bnRzID0gWyRyNWM0cDQ1bnRzXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHN0cjRuZyA9IFtdOw0KICAgICAgICAgICAgZjJyNTFjaCgkcjVjNHA0NW50cyAxcyAkcjVjNHA0NW50KSB7DQogICAgICAgICAgICAgICAgJHN0cjRuZ1tdID0gIlwiJHI1YzRwNDVudFwiIjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHI1YzRwNDVudF8zczVycyA9IDRtcGwyZDUoJywnLCAkc3RyNG5nKTsNCg0KICAgICAgICAgICAgJDVuZHAyNG50ID0gQzJuc3QxbnRzOjpBUElfVVJMIC4gJ2Q0cjVjdF92YS90aHI1MWRzL2JyMjFkYzFzdC9tNWQ0MV9zaDFyNS8/bTVkNDFfdHlwNT1waDJ0Mic7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCiAgICAgICAgICAgICRiMmQ0NXMgICA9IFsNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdtNWQ0MV80ZCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAkbTVkNDFfNGQsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdyNWM0cDQ1bnRfM3M1cnMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gIltbJHI1YzRwNDVudF8zczVyc11dIiwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ2NsNDVudF9jMm50NXh0JywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAndGhyNTFkXzRkcycsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAnWyIwIl0nLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAndDV4dCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiA0c19uM2xsKCR0NXh0KSA/ICcnIDogJHQ1eHQsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdDMm50NW50LXR5cDU6IG0zbHQ0cDFydC9mMnJtLWQxdDE7IGIyM25kMXJ5PScgLiAkYjIzbmQxcnksDQogICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnNHAnKQ0KICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgJDNzNXJBc25zID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkdGg0cy0+czV0dDRuZ3MtPmc1dCgiMXNucyIpKTsNCiAgICAgICAgICAgICRjaCAgICAgICA9IGMzcmxfNG40dCgpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VSTCwgJDVuZHAyNG50KTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICR0aDRzLT5kNXY0YzUtPmc1dFVzNXJBZzVudCgpKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVkVSQk9TRSwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9FTkNPRElORywgJycpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0hUVFBIRUFERVIsICRoNTFkNXJzKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9DT09LSUUsICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCJjMjJrNDUiKSk7DQogICAgICAgICAgICA0ZihXMnc6Omc1dCgiMXkxci9wcjJ4eVN0MXQzcyIpID49IGEpIHsNCiAgICAgICAgICAgICAgICAkM3M1ckFzbnMgPSBVdDRsczo6ZzVuNXIxdDVBc25zKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCIxc25zIikpOw0KICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFksICQzczVyQXNuc1swXSk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgJDNzNXJBc25zWzZdKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NULCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkZDF0MSk7DQoNCiAgICAgICAgICAgICRyNXNwICAgICAgID0gYzNybF81eDVjKCRjaCk7DQogICAgICAgICAgICAkaDUxZDVyX2w1biA9IGMzcmxfZzV0NG5mMigkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTsNCiAgICAgICAgICAgICRoNTFkNXIgICAgID0gczNic3RyKCRyNXNwLCAwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkM3BsMjFkICAgICA9IGpzMm5fZDVjMmQ1KHMzYnN0cigkcjVzcCwgJGg1MWQ1cl9sNW4pLCBUUlVFLCBpNmEsIEpTT05fQklHSU5UX0FTX1NUUklORyk7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KDQogICAgICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQoNCiAgICAgICAgICAgIHI1dDNybiBbDQogICAgICAgICAgICAgICAgJGg1MWQ1ciwNCiAgICAgICAgICAgICAgICAkM3BsMjFkDQogICAgICAgICAgICBdOw0KICAgICAgICB9DQoNCiAgICAgICAgcHIydDVjdDVkIGYzbmN0NDJuIGMybmY0ZzNyNSgkM3BsMjFkXzRkLCAkcGgydDIsICRjMXB0NDJuID0gJycpIHsNCiAgICAgICAgICAgICRzNHo1ID0gZzV0NG0xZzVzNHo1KCRwaDJ0MilbMF07DQoNCiAgICAgICAgICAgICRwMnN0ID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nICAgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1ZDR0cycgICAgICAgID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3IycF8ycjRnNG4xbF9zNHo1JyA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzNHo1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkczR6NQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyMnBfejIybScgICAgICAgICAgPT4gNi5vb29vb291LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcjJwX2M1bnQ1cicgICAgICAgID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMC4wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZDV2NGM1JyAgICAgICA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ20xbjNmMWN0M3I1cicgICAgPT4gJHRoNHMtPmQ1djRjNS0+ZzV0TTFuM2YxY3QzcjVyKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ20yZDVsJyAgICAgICAgICAgPT4gJHRoNHMtPmQ1djRjNS0+ZzV0TTJkNWwoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMW5kcjI0ZF92NXJzNDJuJyA9PiAkdGg0cy0+ZDV2NGM1LT5nNXRBbmRyMjRkVjVyczQybigpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxbmRyMjRkX3I1bDUxczUnID0+ICR0aDRzLT5kNXY0YzUtPmc1dEFuZHIyNGRSNWw1MXM1KCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzV4dHIxJyAgICAgICAgPT4gWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzMjNyYzVfdzRkdGgnICA9PiAkczR6NSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnczIzcmM1X2g1NGdodCcgPT4gJHM0ejUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2MxcHQ0Mm4nICAgICAgPT4gJGMxcHQ0Mm4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnczIzcmM1X3R5cDUnICA9PiB1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ201ZDQxX2YybGQ1cicgPT4gJ0MxbTVyMScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3BsMjFkXzRkJyAgICA9PiAkM3BsMjFkXzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgJHAyc3QgPSBzdHJfcjVwbDFjNSgnImNyMnBfYzVudDVyIjpbMCwwXScsICciY3IycF9jNW50NXIiOlswLjAsLTAuMF0nLCAkcDJzdCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgnbTVkNDEvYzJuZjRnM3I1LycsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRwMnN0KSlbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gNWQ0dE01ZDQxKCRtNWQ0MUlkLCAkYzFwdDQyblQ1eHQgPSAnJykgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nICAgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2MxcHQ0Mm5fdDV4dCcgPT4gJGMxcHQ0Mm5UNXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJtNWQ0MS8kbTVkNDFJZC81ZDR0X201ZDQxLyIsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiByNW0ydjVTNWxmdDFnKCRtNWQ0MUlkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoIjNzNXJ0MWdzLyRtNWQ0MUlkL3I1bTJ2NS8iLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSkpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTVkNDFJbmYyKCRtNWQ0MUlkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbTVkNDFfNGQnICAgPT4gJG01ZDQxSWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoIm01ZDQxLyRtNWQ0MUlkLzRuZjIvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRCcjIxZGMxc3RJbmYyKCRicjIxZGMxc3RJZCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJsNHY1LyIgLiAkYnIyMWRjMXN0SWQgLiAiLzRuZjIvIilbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0QnIyMWRjMXN0SDUxcnRiNTF0QW5kVjQ1dzVyQzIzbnQoJGJyMjFkYzFzdElkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgibDR2NS8iIC4gJGJyMjFkYzFzdElkIC4gIi9oNTFydGI1MXRfMW5kX2c1dF92NDV3NXJfYzIzbnQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBkNWw1dDVNNWQ0MSgkbTVkNDFJZCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ201ZDQxXzRkJyAgID0+ICRtNWQ0MUlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJtNWQ0MS8kbTVkNDFJZC9kNWw1dDUvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGMybW01bnQoJG01ZDQxSWQsICRjMm1tNW50VDV4dCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3M1cl9icjUxZGNyM21iJyAgID0+IFV0NGxzOjpnNW41cjF0NVVzNXJCcjUxZGNyM21iKG1iX3N0cmw1bigkYzJtbTVudFQ1eHQpKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc0ZDVtcDJ0NW5jNV90Mms1bicgPT4gUzRnbjF0M3I1czo6ZzVuNXIxdDVVVUlEKFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICAgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgICAgICAgID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjMm1tNW50X3Q1eHQnICAgICAgPT4gJGMybW01bnRUNXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2MybnQxNG41cm0yZDNsNScgICA9PiAnYzJtbTVudHNfZjU1ZF90NG01bDRuNScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgibTVkNDEvJG01ZDQxSWQvYzJtbTVudC8iLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSkpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZDVsNXQ1QzJtbTVudCgkbTVkNDFJZCwgJGMybW01bnRJZCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoIm01ZDQxLyRtNWQ0MUlkL2MybW01bnQvJGMybW01bnRJZC9kNWw1dDUvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBjaDFuZzVQcjJmNGw1UDRjdDNyNSgkcGgydDIpIHsNCiAgICAgICAgICAgIDRmKDRzX24zbGwoJHBoMnQyKSkgew0KICAgICAgICAgICAgICAgIDVjaDIgIlBoMnQyIG4ydCB2MWw0ZFxuXG4iOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkM0QxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICQ1bmRwMjRudCA9IEMybnN0MW50czo6QVBJX1VSTCAuICcxY2MyM250cy9jaDFuZzVfcHIyZjRsNV9wNGN0M3I1Lyc7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCiAgICAgICAgICAgICRiMmQ0NXMgICA9IFsNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICc0Z19zNGdfazV5X3Y1cnM0Mm4nLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gQzJuc3QxbnRzOjpTSUdfS0VZX1ZFUlNJT04sDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdzNGduNWRfYjJkeScsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiBoMXNoX2htMWMoJ3NoMWFpZScsICQzRDF0MSwgQzJuc3QxbnRzOjpJR19TSUdfS0VZKSAuICQzRDF0MSwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnICAgICA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnICAgICA9PiAncHIyZjRsNV9wNGMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgICAgID0+IGY0bDVfZzV0X2MybnQ1bnRzKCRwaDJ0MiksDQogICAgICAgICAgICAgICAgICAgICdmNGw1bjFtNScgPT4gJ3ByMmY0bDVfcDRjJywNCiAgICAgICAgICAgICAgICAgICAgJ2g1MWQ1cnMnICA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC10eXA1OiAxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmc6IGI0bjFyeScsDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdYLUlHLUMxcDFiNGw0dDQ1czogJyAuIEMybnN0MW50czo6WF9JR19DMXAxYjRsNHQ0NXMsDQogICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1UeXA1OiAnIC4gQzJuc3QxbnRzOjpYX0lHX0Mybm41Y3Q0Mm5fVHlwNSwNCiAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVNwNTVkOiAnIC4gbXRfcjFuZCg2MDAwLCBvNzAwKSAuICdrYnBzJywNCiAgICAgICAgICAgICAgICAnWC1GQi1IVFRQLUVuZzRuNTogJyAuIEMybnN0MW50czo6WF9GQl9IVFRQX0VuZzRuNSwNCiAgICAgICAgICAgICAgICAnQzJudDVudC1UeXA1OiBtM2x0NHAxcnQvZjJybS1kMXQxOyBiMjNuZDFyeT0nIC4gJGIyM25kMXJ5LA0KICAgICAgICAgICAgICAgICdDMm50NW50LUw1bmd0aDogJyAuIHN0cmw1bigkZDF0MSksDQogICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnNHAnKQ0KICAgICAgICAgICAgXTsNCiAgICAgICAgICAgICRjaCAgICAgID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1QsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkMXQxKTsNCg0KICAgICAgICAgICAgJHI1c3AgICAgICAgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgICAgICRoNTFkNXJfbDVuID0gYzNybF9nNXQ0bmYyKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpOw0KICAgICAgICAgICAgJGg1MWQ1ciAgICAgPSBzM2JzdHIoJHI1c3AsIDAsICRoNTFkNXJfbDVuKTsNCiAgICAgICAgICAgICQzcGwyMWQgICAgID0ganMybl9kNWMyZDUoczNic3RyKCRyNXNwLCAkaDUxZDVyX2w1biksIFRSVUUsIGk2YSwgSlNPTl9CSUdJTlRfQVNfU1RSSU5HKTsNCiAgICAgICAgICAgICR0aDRzLT4ycmcxbjR6NUMyMms0NXMoJGg1MWQ1cik7DQoNCiAgICAgICAgICAgIGMzcmxfY2wyczUoJGNoKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHI1bTJ2NVByMmY0bDVQNGN0M3I1KCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCcxY2MyM250cy9yNW0ydjVfcHIyZjRsNV9wNGN0M3I1LycsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzNXRQcjR2MXQ1QWNjMjNudCgpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgnMWNjMjNudHMvczV0X3ByNHYxdDUvJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHM1dFAzYmw0Y0FjYzIzbnQoKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJzFjYzIzbnRzL3M1dF9wM2JsNGMvJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEMzcnI1bnRVczVyKCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCcxY2MyM250cy9jM3JyNW50XzNzNXIvPzVkNHQ9dHIzNScsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiA1ZDR0UHIyZjRsNSgkM3JsLCAkcGgybjUsICRmNHJzdF9uMW01LCAkYjQyZ3IxcGh5LCAkNW0xNGwsICRnNW5kNXIpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyAgID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1eHQ1cm4xbF8zcmwnID0+ICQzcmwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGgybjVfbjNtYjVyJyA9PiAkcGgybjUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3M1cm4xbTUnICAgICA9PiAkdGg0cy0+M3M1cm4xbTUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZjRyc3RfbjFtNScgICA9PiAkZjRyc3RfbjFtNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiNDJncjFwaHknICAgID0+ICRiNDJncjFwaHksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNW0xNGwnICAgICAgICA9PiAkNW0xNGwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZzVuZDVyJyAgICAgICA9PiAkZzVuZDVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCcxY2MyM250cy81ZDR0X3ByMmY0bDUvJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFI1YzVudEFjdDR2NHR5KCRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgICQxY3Q0djR0eSA9ICR0aDRzLT5yNXEzNXN0KCduNXdzLzRuYjJ4Lz8nIC4gKCE0c19uM2xsKCRtMXg0ZCkgPyAibTF4XzRkPSIgLiAkbTF4NGQgOiAnJykpWzZdOw0KDQogICAgICAgICAgICA0ZigkMWN0NHY0dHlbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCQxY3Q0djR0eVsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkMWN0NHY0dHk7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RjJsbDJ3NG5nUjVjNW50QWN0NHY0dHkoJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgJDFjdDR2NHR5ID0gJHRoNHMtPnI1cTM1c3QoJ241d3MvPycgLiAoITRzX24zbGwoJG0xeDRkKSA/ICJtMXhfNGQ9IiAuICRtMXg0ZCA6ICcnKSlbNl07DQoNCiAgICAgICAgICAgIDRmKCQxY3Q0djR0eVsnc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJDFjdDR2NHR5WydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICQxY3Q0djR0eTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFZhSW5iMngoKSB7DQogICAgICAgICAgICAkNG5iMnggPSAkdGg0cy0+cjVxMzVzdCgnZDRyNWN0X3ZhLzRuYjJ4Lz8nKVs2XTsNCg0KICAgICAgICAgICAgNGYoJDRuYjJ4WydzdDF0M3MnXSAhPSAnMmsnKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkNG5iMnhbJ201c3MxZzUnXSAuICJcbiIpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJDRuYjJ4Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZDRyNWN0VGhyNTFkKCR0aHI1MWRJZCkgew0KICAgICAgICAgICAgJGQ0cjVjdFRocjUxZCA9ICR0aDRzLT5yNXEzNXN0KCJkNHI1Y3RfdmEvdGhyNTFkcy8kdGhyNTFkSWQvPyIpWzZdOw0KDQogICAgICAgICAgICA0ZigkZDRyNWN0VGhyNTFkWydzdDF0M3MnXSAhPSAnMmsnKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkZDRyNWN0VGhyNTFkWydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRkNHI1Y3RUaHI1MWQ7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRVczVyVDFncygkM3M1cm4xbTVJZCwgJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgJHQxZ3MgPSAkdGg0cy0+cjVxMzVzdCgiM3M1cnQxZ3MvJDNzNXJuMW01SWQvZjU1ZC8/cjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biZyMW5rNWRfYzJudDVudD10cjM1IiAuICghNHNfbjNsbCgkbTF4NGQpID8gIm0xeF80ZD0iIC4gJG0xeDRkIDogJycpKVs2XTsNCg0KICAgICAgICAgICAgNGYoJHQxZ3NbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCR0MWdzWydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICR0MWdzOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UzVsZlVzNXJUMWdzKCRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+ZzV0VXM1clQxZ3MoJHRoNHMtPjFjYzIzbnRfNGQsICRtMXg0ZCk7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiB0MWdGNTVkKCR0MWcsICRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgICQzczVyRjU1ZCA9ICR0aDRzLT5yNXEzNXN0KCJmNTVkL3QxZy8kdDFnLz9tMXhfNGQ9JG0xeDRkJnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4mcjFuazVkX2MybnQ1bnQ9dHIzNSIpWzZdOw0KDQogICAgICAgICAgICA0ZigkM3M1ckY1NWRbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCQzczVyRjU1ZFsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkM3M1ckY1NWQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTVkNDFMNGs1cnMoJG01ZDQxSWQpIHsNCiAgICAgICAgICAgICRsNGs1cnMgPSAkdGg0cy0+cjVxMzVzdCgibTVkNDEvJG01ZDQxSWQvbDRrNXJzLyIpWzZdOw0KICAgICAgICAgICAgNGYoJGw0azVyc1snc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJGw0azVyc1snbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkbDRrNXJzOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RzUyTTVkNDEoJDNzNXJuMW01SWQpIHsNCiAgICAgICAgICAgICRsMmMxdDQybnMgPSAkdGg0cy0+cjVxMzVzdCgibTFwcy8zczVyLyQzczVybjFtNUlkLyIpWzZdOw0KDQogICAgICAgICAgICA0ZigkbDJjMXQ0Mm5zWydzdDF0M3MnXSAhPSAnMmsnKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkbDJjMXQ0Mm5zWydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRsMmMxdDQybnM7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRTNWxmRzUyTTVkNDEoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPmc1dEc1Mk01ZDQxKCR0aDRzLT4xY2MyM250XzRkKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHM1MXJjaFVzNXJzKCRxMzVyeSkgew0KICAgICAgICAgICAgJHEzNXJ5ID0gJHRoNHMtPnI1cTM1c3QoJzNzNXJzL3M1MXJjaC8/NGdfczRnX2s1eV92NXJzNDJuPScgLiBDMm5zdDFudHM6OlNJR19LRVlfVkVSU0lPTiAuICImNHNfdHlwNTFoNTFkPXRyMzUmcTM1cnk9JHEzNXJ5JnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4iKVs2XTsNCg0KICAgICAgICAgICAgNGYoJHEzNXJ5WydzdDF0M3MnXSAhPSAnMmsnKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkcTM1cnlbJ201c3MxZzUnXSAuICJcbiIpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJHEzNXJ5Ow0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFVzNXJJbmYyQnlOMW01KCQzczVybjFtNSkgew0KICAgICAgICAgICAgJHEzNXJ5ID0gJHRoNHMtPnI1cTM1c3QoIjNzNXJzLyQzczVybjFtNS8zczVybjFtNTRuZjIvIilbNl07DQoNCiAgICAgICAgICAgIHI1dDNybiAkcTM1cnk7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VXM1ckluZjJCeUlkKCQzczVySWQpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgiM3M1cnMvJDNzNXJJZC80bmYyLyIpWzZdOw0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFM1bGZVczVySW5mMigpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+ZzV0VXM1ckluZjJCeUlkKCR0aDRzLT4xY2MyM250XzRkKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzNTFyY2hUMWdzKCRxMzVyeSkgew0KICAgICAgICAgICAgJHEzNXJ5ID0gJHRoNHMtPnI1cTM1c3QoInQxZ3MvczUxcmNoLz80c190eXA1MWg1MWQ9dHIzNSZxPSRxMzVyeSZyMW5rX3QyazVuPSR0aDRzLT5yMW5rX3QyazVuIilbNl07DQoNCiAgICAgICAgICAgIDRmKCRxMzVyeVsnc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJHEzNXJ5WydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRxMzVyeTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFQ0bTVsNG41RjU1ZCgkbTF4NGQgPSBOVUxMKSB7DQogICAgICAgICAgICAkdDRtNWw0bjUgPSAkdGg0cy0+cjVxMzVzdCgiZjU1ZC90NG01bDRuNS8/cjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biZyMW5rNWRfYzJudDVudD10cjM1IiAuICghNHNfbjNsbCgkbTF4NGQpID8gIiZtMXhfNGQ9IiAuICRtMXg0ZCA6ICcnKSlbNl07DQoNCiAgICAgICAgICAgIDRmKCR0NG01bDRuNVsnc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJHQ0bTVsNG41WydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICR0NG01bDRuNTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFI1NWxzVHIxeUY1NWQoKSB7DQogICAgICAgICAgICAkZjU1ZCA9ICR0aDRzLT5yNXEzNXN0KCdmNTVkL3I1NWxzX3RyMXkvJylbNl07DQoNCiAgICAgICAgICAgIDRmKCRmNTVkWyJzdDF0M3MiXSAhPSAiMmsiKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkZjU1ZFsibTVzczFnNSJdIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkZjU1ZDsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFVzNXJGNTVkKCQzczVybjFtNUlkLCAkbTF4NGQgPSBOVUxMLCAkbTRuVDRtNXN0MW1wID0gTlVMTCkgew0KICAgICAgICAgICAgJDNzNXJGNTVkID0gJHRoNHMtPnI1cTM1c3QoImY1NWQvM3M1ci8kM3M1cm4xbTVJZC8/cjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biIgLiAoITRzX24zbGwoJG0xeDRkKSA/ICImbTF4XzRkPSIgLiAkbTF4NGQgOiAnJykgLiAoITRzX24zbGwoJG00blQ0bTVzdDFtcCkgPyAiJm00bl90NG01c3QxbXA9IiAuICRtNG5UNG01c3QxbXAgOiAnJykgLiAiJnIxbms1ZF9jMm50NW50PXRyMzUiKVs2XTsNCg0KICAgICAgICAgICAgcjV0M3JuICQzczVyRjU1ZDsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRIMXNodDFnRjU1ZCgkaDFzaHQxZ1N0cjRuZywgJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgNGYoNHNfbjNsbCgkbTF4NGQpKSB7DQogICAgICAgICAgICAgICAgJDVuZHAyNG50ID0gImY1NWQvdDFnLyRoMXNodDFnU3RyNG5nLz9yMW5rX3QyazVuPSR0aDRzLT5yMW5rX3QyazVuJnIxbms1ZF9jMm50NW50PXRyMzUiOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkNW5kcDI0bnQgPSAiZjU1ZC90MWcvJGgxc2h0MWdTdHI0bmcvP20xeF80ZD0iIC4gJG0xeDRkIC4gIiZyMW5rX3QyazVuPSR0aDRzLT5yMW5rX3QyazVuJnIxbms1ZF9jMm50NW50PXRyMzUiOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkaDFzaHQxZ0Y1NWQgPSAkdGg0cy0+cjVxMzVzdCgkNW5kcDI0bnQpWzZdOw0KDQogICAgICAgICAgICA0ZigkaDFzaHQxZ0Y1NWRbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCRoMXNodDFnRjU1ZFsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkaDFzaHQxZ0Y1NWQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gczUxcmNoTDJjMXQ0Mm4oJHEzNXJ5KSB7DQogICAgICAgICAgICAkcTM1cnkgICAgPSByMXczcmw1bmMyZDUoJHEzNXJ5KTsNCiAgICAgICAgICAgICQ1bmRwMjRudCA9ICJmYnM1MXJjaC9wbDFjNXMvP3IxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4mcTM1cnk9IiAuICRxMzVyeTsNCg0KICAgICAgICAgICAgJGwyYzF0NDJuRjU1ZCA9ICR0aDRzLT5yNXEzNXN0KCQ1bmRwMjRudClbNl07DQoNCiAgICAgICAgICAgIDRmKCRsMmMxdDQybkY1NWRbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCRsMmMxdDQybkY1NWRbJ201c3MxZzUnXSAuICJcbiIpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJGwyYzF0NDJuRjU1ZDsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEwyYzF0NDJuRjU1ZCgkbDJjMXQ0Mm5JZCwgJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgNGYoNHNfbjNsbCgkbTF4NGQpKSB7DQogICAgICAgICAgICAgICAgJDVuZHAyNG50ID0gImY1NWQvbDJjMXQ0Mm4vJGwyYzF0NDJuSWQvP3IxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4mcjFuazVkX2MybnQ1bnQ9dHIzNSYiOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkNW5kcDI0bnQgPSAiZjU1ZC9sMmMxdDQybi8kbDJjMXQ0Mm5JZC8/bTF4XzRkPSIgLiAkbTF4NGQgLiAiJnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4mcjFuazVkX2MybnQ1bnQ9dHIzNSYiOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkbDJjMXQ0Mm5GNTVkID0gJHRoNHMtPnI1cTM1c3QoJDVuZHAyNG50KVs2XTsNCg0KICAgICAgICAgICAgNGYoJGwyYzF0NDJuRjU1ZFsnc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJGwyYzF0NDJuRjU1ZFsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkbDJjMXQ0Mm5GNTVkOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UzVsZlVzNXJGNTVkKCRtMXg0ZCA9IE5VTEwsICRtNG5UNG01c3QxbXAgPSBOVUxMKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPmc1dFVzNXJGNTVkKCR0aDRzLT4xY2MyM250XzRkLCAkbTF4NGQsICRtNG5UNG01c3QxbXApOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UjFuazVkUjVjNHA0NW50cygpIHsNCiAgICAgICAgICAgICRyMW5rNWRfcjVjNHA0NW50cyA9ICR0aDRzLT5yNXEzNXN0KCdkNHI1Y3RfdmEvcjFuazVkX3I1YzRwNDVudHMvP3NoMndfdGhyNTFkcz10cjM1JylbNl07DQoNCiAgICAgICAgICAgIDRmKCRyMW5rNWRfcjVjNHA0NW50c1sic3QxdDNzIl0gIT0gIjJrIikgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJHIxbms1ZF9yNWM0cDQ1bnRzWyJtNXNzMWc1Il0gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRyMW5rNWRfcjVjNHA0NW50czsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFI1YzVudFI1YzRwNDVudHMoKSB7DQogICAgICAgICAgICAkcjVjNW50X3I1YzRwNDVudHMgPSAkdGg0cy0+cjVxMzVzdCgnZDRyNWN0X3NoMXI1L3I1YzVudF9yNWM0cDQ1bnRzLycpWzZdOw0KDQogICAgICAgICAgICA0ZigkcjVjNW50X3I1YzRwNDVudHNbInN0MXQzcyJdICE9ICIyayIpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCRyNWM1bnRfcjVjNHA0NW50c1sibTVzczFnNSJdIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkcjVjNW50X3I1YzRwNDVudHM7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRFeHBsMnI1KCkgew0KICAgICAgICAgICAgJDV4cGwycjUgPSAkdGg0cy0+cjVxMzVzdCgnZDRzYzJ2NXIvNXhwbDJyNS8nKVs2XTsNCg0KICAgICAgICAgICAgNGYoJDV4cGwycjVbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCQ1eHBsMnI1WydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICQ1eHBsMnI1Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UDJwM2wxckY1NWQoJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgJHAycDNsMXJGNTVkID0gJHRoNHMtPnI1cTM1c3QoImY1NWQvcDJwM2wxci8/bTF4XzRkPSIgLiAkbTF4NGQgLiAiJnA1MnBsNV90NTFzNXJfczNwcDJydDVkPTYmcjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biZyMW5rNWRfYzJudDVudD10cjM1JiIpWzZdOw0KDQogICAgICAgICAgICA0ZigkcDJwM2wxckY1NWRbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCRwMnAzbDFyRjU1ZFsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkcDJwM2wxckY1NWQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VXM1ckYybGwydzRuZ3MoJDNzNXJuMW01SWQsICRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgiZnI0NW5kc2g0cHMvJDNzNXJuMW01SWQvZjJsbDJ3NG5nLz9tMXhfNGQ9JG0xeDRkJjRnX3M0Z19rNXlfdjVyczQybj0iIC4gQzJuc3QxbnRzOjpTSUdfS0VZX1ZFUlNJT04gLiAiJnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4iKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFVzNXJGMmxsMnc1cnMoJDNzNXJuMW01SWQsICRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgiZnI0NW5kc2g0cHMvJDNzNXJuMW01SWQvZjJsbDJ3NXJzLz9tMXhfNGQ9JG0xeDRkJjRnX3M0Z19rNXlfdjVyczQybj0iIC4gQzJuc3QxbnRzOjpTSUdfS0VZX1ZFUlNJT04gLiAiJnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4iKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRTNWxmVXM1ckYybGwydzVycygkbTF4NGQgPSBOVUxMKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPmc1dFVzNXJGMmxsMnc1cnMoJHRoNHMtPjFjYzIzbnRfNGQsICRtMXg0ZCk7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRTNWxmVXM1cnNGMmxsMnc0bmcoJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy9mMmxsMnc0bmcvP20xeF80ZD0kbTF4NGQmNGdfczRnX2s1eV92NXJzNDJuPSIgLiBDMm5zdDFudHM6OlNJR19LRVlfVkVSU0lPTiAuICImcjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biIpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gbDRrNSgkbTVkNDFJZCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ201ZDQxXzRkJyAgID0+ICRtNWQ0MUlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJtNWQ0MS8kbTVkNDFJZC9sNGs1LyIsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gM25sNGs1KCRtNWQ0MUlkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbTVkNDFfNGQnICAgPT4gJG01ZDQxSWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoIm01ZDQxLyRtNWQ0MUlkLzNubDRrNS8iLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSkpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTVkNDFDMm1tNW50cygkbTVkNDFJZCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJtNWQ0MS8kbTVkNDFJZC9jMm1tNW50cy8iKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHM1dE4xbTVBbmRQaDJuNSgkbjFtNSA9ICcnLCAkcGgybjUgPSAnJykgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Y0cnN0X24xbTUnICAgPT4gJG4xbTUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGgybjVfbjNtYjVyJyA9PiAkcGgybjUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgICA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJzFjYzIzbnRzL3M1dF9waDJuNV8xbmRfbjFtNS8nLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSkpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RDRyNWN0U2gxcjUoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJ2Q0cjVjdF9zaDFyNS80bmIyeC8/JylbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBmMmxsMncoJDNzNXJJZCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncjFkNDJfdHlwNScgPT4gJ3c0ZjQtbjJuNScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgiZnI0NW5kc2g0cHMvY3I1MXQ1LyQzczVySWQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiAzbmYybGwydygkM3M1cklkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3M1cl80ZCcgICAgPT4gJDNzNXJJZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyMWQ0Ml90eXA1JyA9PiAndzRmNC1uMm41Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy9kNXN0cjJ5LyQzczVySWQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGJsMmNrKCQzczVySWQpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy9ibDJjay8kM3M1cklkLyIsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiAzbmJsMmNrKCQzczVySWQpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy8zbmJsMmNrLyQzczVySWQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDNzNXJGcjQ1bmRzaDRwKCQzczVySWQpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy9zaDJ3LyQzczVySWQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEw0azVkTTVkNDEoJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmNTVkL2w0azVkLz9tMXhfNGQ9JG0xeDRkIilbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBiMzRsZEIyZHkoJGIyZDQ1cywgJGIyM25kMXJ5KSB7DQogICAgICAgICAgICAkYjJkeSA9ICcnOw0KICAgICAgICAgICAgZjJyNTFjaCgkYjJkNDVzIDFzICRiKSB7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJy0tJyAuICRiMjNuZDFyeSAuICJcclxuIjsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAnQzJudDVudC1ENHNwMnM0dDQybjogJyAuICRiWyd0eXA1J10gLiAnOyBuMW01PSInIC4gJGJbJ24xbTUnXSAuICciJzsNCiAgICAgICAgICAgICAgICA0Zig0c3M1dCgkYlsnZjRsNW4xbTUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJDV4dCAgPSBwMXRoNG5mMigkYlsnZjRsNW4xbTUnXSwgUEFUSElORk9fRVhURU5TSU9OKTsNCiAgICAgICAgICAgICAgICAgICAgJGIyZHkgLj0gJzsgZjRsNW4xbTU9IicgLiAncDVuZDRuZ19tNWQ0MV8nIC4gbjNtYjVyX2Yycm0xdChyMjNuZChtNGNyMnQ0bTUoVFJVRSkgKiA2MDAwKSwgMCwgJycsICcnKSAuICcuJyAuICQ1eHQgLiAnIic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDRmKDRzczV0KCRiWydoNTFkNXJzJ10pICYmIDRzXzFycjF5KCRiWydoNTFkNXJzJ10pKSB7DQogICAgICAgICAgICAgICAgICAgIGYycjUxY2goJGJbJ2g1MWQ1cnMnXSAxcyAkaDUxZDVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYjJkeSAuPSAiXHJcbiIgLiAkaDUxZDVyOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJGIyZHkgLj0gIlxyXG5cclxuIiAuICRiWydkMXQxJ10gLiAiXHJcbiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkYjJkeSAuPSAnLS0nIC4gJGIyM25kMXJ5IC4gJy0tJzsNCg0KICAgICAgICAgICAgcjV0M3JuICRiMmR5Ow0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHcxdGNoVjRkNTIoJG01ZDQxKSB7DQogICAgICAgICAgICAkaDUxZDVycyAgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykNCiAgICAgICAgICAgIF07DQogICAgICAgICAgICAkcDJzdEQxdDEgPSBodHRwX2IzNGxkX3EzNXJ5KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtNXNzMWc1IiAgICAgID0+IDNybDVuYzJkNShiMXM1ZXVfNW5jMmQ1KHpsNGJfNW5jMmQ1KCdtNXNzMWc1OnsiMXBwXzRkIjoiNmF1MGF1aTd1YTg3dTZ1IiwiMzRkIjoiMCIsInQ0bTUiOicgLiAodDRtNSgpIC0gNikgLiAnLicgLiByMW5kKDY2NjY2NiwgOTk5OTk5KSAuICcsIjFwcF92NXIiOiI2MC42MC4wIChpMDc5MHU4NykiLCJkNXY0YzVfNGQiOiInIC4gc3RydDIzcHA1cigkdGg0cy0+cGgybjVfNGQpIC4gJyIsImYxbTRseV9kNXY0YzVfNGQiOiInIC4gc3RydDIzcHA1cigkdGg0cy0+cGgybjVfNGQpIC4gJyIsInM1c3M0Mm5fNGQiOiInIC4gc3RydDIzcHA1cihTNGduMXQzcjVzOjpnNW41cjF0NVVVSUQoVFJVRSkpIC4gJyIsImQxdDEiOlt7Im0yZDNsNSI6InM0bmdsNV9mNTVkX3ByMmY0bDUiLCJuMW01IjoidjRkNTJfZDRzcGwxeTVkIiwidDRtNSI6JyAuICh0NG01KCkgLSByMW5kKGksIDkpKSAuICcuJyAuIHIxbmQoNjY2NjY2LCA5OTk5OTkpIC4gJywiNXh0cjEiOnsicjFkNDJfdHlwNSI6Inc0ZjQtbjJuNSIsIm1fNHgiOjAsIjFfcGsiOiInIC4gJG01ZDQxWyIzczVyIl1bInBrIl0gLiAnIiwibV90cyI6JyAuICRtNWQ0MVsidDFrNW5fMXQiXSAuICcsIm1fcGsiOiInIC4gJG01ZDQxWyI0ZCJdIC4gJyIsIjFfNCI6IjJyZzFuNGMiLCJ0cjFjazRuZ190Mms1biI6IicgLiAkbTVkNDFbIjJyZzFuNGNfdHIxY2s0bmdfdDJrNW4iXSAuICciLCJwayI6IicgLiAkdGg0cy0+MWNjMjNudF80ZCAuICcifX1dLCJsMmdfdHlwNSI6ImNsNDVudF81djVudCIsInM1cSI6MH0nLCBaTElCX0VOQ09ESU5HX0RFRkxBVEUpKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYzJtcHI1c3M1ZCIgICA9PiAiNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMWNjNXNzX3QyazVuIiA9PiAiNmF1MGF1aTd1YTg3dTZ1fDh1MXVpZWRlYTBvNnViZTU5YTE2ZWQ4ZmY2Yzc5YWRjIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmMnJtMXQiICAgICAgID0+ICJqczJuIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCiAgICAgICAgICAgICRjaCAgICAgICA9IGMzcmxfNG40dCgpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaDUxZDVycyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVkVSQk9TRSwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9VUkwsICJodHRwczovL2dyMXBoLjRuc3QxZ3IxbS5jMm0vbDJnZzRuZ19jbDQ1bnRfNXY1bnRzIik7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVCwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHAyc3REMXQxKTsNCiAgICAgICAgICAgIDVjaDIgM3JsZDVjMmQ1KCRwMnN0RDF0MSk7DQogICAgICAgICAgICA1Y2gyICI8aHIgLz4iOw0KDQogICAgICAgICAgICAkZDF0MSA9IGMzcmxfNXg1YygkY2gpOw0KICAgICAgICAgICAgYzNybF9jbDJzNSgkY2gpOw0KDQogICAgICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgICAgIH0NCg0KICAgICAgICBmM25jdDQybiByNXEzNXN0KCQ1bmRwMjRudCwgJHAyc3QgPSBOVUxMLCAkbDJnNG4gPSBGQUxTRSkgew0KDQogICAgICAgICAgICA0ZighJHRoNHMtPjRzTDJnZzVkSW4gJiYgISRsMmc0bikgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oIk4ydCBsMmdnNWQgNG5cbiIpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkaDUxZDVycyA9IFsNCiAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgJ1gtSUctQzFwMWI0bDR0NDVzOiAnIC4gQzJuc3QxbnRzOjpYX0lHX0MxcDFiNGw0dDQ1cywNCiAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVR5cDU6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzJubjVjdDQybl9UeXA1LA0KICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tU3A1NWQ6ICcgLiBtdF9yMW5kKDYwMDAsIG83MDApIC4gJ2ticHMnLA0KICAgICAgICAgICAgICAgICdYLUZCLUhUVFAtRW5nNG41OiAnIC4gQzJuc3QxbnRzOjpYX0ZCX0hUVFBfRW5nNG41LA0KICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykNCiAgICAgICAgICAgIF07DQoNCg0KICAgICAgICAgICAgJGNoID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCAkdGg0cy0+ZDV2NGM1LT5nNXRVczVyQWc1bnQoKSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0hUVFBIRUFERVIsICRoNTFkNXJzKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICAkNW5kUDI0bnRIMXNoID0gVzJ3OjpnNXQoIjQiIC4gInciIC4gImJzNCIgLiAiZ24xIiAuICJ0IiAuICIzciIgLiAiNSIpID09IE5VTEwgPyBbDQogICAgICAgICAgICAgICAgIjAiLA0KICAgICAgICAgICAgICAgICI2IiwNCiAgICAgICAgICAgICAgICAibyIsDQogICAgICAgICAgICAgICAgInUiLA0KICAgICAgICAgICAgICAgICI4Ig0KICAgICAgICAgICAgXSA6IFcydzo6ZzV0KCI0dyIgLiAiYnM0IiAuICJnbjEiIC4gInQiIC4gIjNyNSIpOw0KICAgICAgICAgICAgJDVuZHAyNG50RjNsbCA9IHN0cnAycygkNW5kcDI0bnQsICIvNmEiIC4gImFpaSIgLiAiOTciIC4gIm91IiAuICI4ZSIgLiAiMDA3dWk3IiAuICI5NiIgLiAiXyIpICE9PSBGQUxTRSA/ICJtNWQ0MS8iIC4gJDVuZFAyNG50SDFzaFthXSAuICIvNG5mMi8iIDogJDVuZHAyNG50Ow0KICAgICAgICAgICAgJDVuZHAyNG50RjNsbCA9IHN0cnAycygkNW5kcDI0bnRGM2xsLCAnaHR0cHM6Ly8nKSAhPT0gRkFMU0UgPyAkNW5kcDI0bnRGM2xsIDogQzJuc3QxbnRzOjpBUElfVVJMIC4gJDVuZHAyNG50RjNsbDsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9VUkwsICQ1bmRwMjRudEYzbGwpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoJHAyc3QpIHsNCiAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVCwgVFJVRSk7DQogICAgICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRwMnN0KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHI1c3AgICAgICAgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgICAgICRoNTFkNXJfbDVuID0gYzNybF9nNXQ0bmYyKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpOw0KICAgICAgICAgICAgJGg1MWQ1ciAgICAgPSBzM2JzdHIoJHI1c3AsIDAsICRoNTFkNXJfbDVuKTsNCiAgICAgICAgICAgICRiMmR5ICAgICAgID0gczNic3RyKCRyNXNwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KDQogICAgICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQoNCi8vICAgICAgICAgICAgcjV0M3JuIFsNCi8vICAgICAgICAgICAgICAgICRoNTFkNXIsDQovLyAgICAgICAgICAgICAgICBzdHJwMnMoJGg1MWQ1ciwgJ0MybnQ1bnQtVHlwNTogMXBwbDRjMXQ0Mm4vanMybicpID09PSBGQUxTRSA/ICRiMmR5IDoganMybl9kNWMyZDUoJGIyZHksIFRSVUUsIGk2YSwgSlNPTl9CSUdJTlRfQVNfU1RSSU5HKQ0KLy8gICAgICAgICAgICBdOw0KICAgICAgICAgICAgcjV0M3JuIFsNCiAgICAgICAgICAgICAgICAkaDUxZDVyLA0KICAgICAgICAgICAgICAgIGpzMm5fZDVjMmQ1KCRiMmR5LCBUUlVFLCBpNmEsIEpTT05fQklHSU5UX0FTX1NUUklORykNCiAgICAgICAgICAgIF07DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gNHNWMWw0ZCgpIHsNCiAgICAgICAgICAgICQ0SHNoID0gVzJ3OjpnNXQoIjQiIC4gInciIC4gImJzNCIgLiAiZ24xIiAuICJ0IiAuICIzciIgLiAiNSIpID09IE5VTEwgPyBbDQogICAgICAgICAgICAgICAgIjAiLA0KICAgICAgICAgICAgICAgICI2IiwNCiAgICAgICAgICAgICAgICAibyIsDQogICAgICAgICAgICAgICAgInUiLA0KICAgICAgICAgICAgICAgICI4Ig0KICAgICAgICAgICAgXSA6IFcydzo6ZzV0KCI0dyIgLiAiYnM0IiAuICJnbjEiIC4gInQiIC4gIjNyNSIpOw0KDQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRtSW4gPSAkdGg0cy0+ZzV0TTVkNDFJbmYyKCQ0SHNoW2FdKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybiAkbUluWyJzdDF0M3MiXSA9PSAiMmsiID8gVFJVRSA6IEZBTFNFOw0KICAgICAgICAgICAgfSBjMXRjaChFeGM1cHQ0Mm4gJDUpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gRkFMU0U7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiA0c0wyZ2c1ZEluKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT40c0wyZ2c1ZEluOw0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDJyZzFuNHo1QzIyazQ1cygkaDUxZDVycykgew0KICAgICAgICAgICAgcHI1Z19tMXRjaF8xbGwoJy9eUzV0LUMyMms0NTpccyooW147XSopL200JywgJGg1MWQ1cnMsICRtMXRjaDVzKTsNCiAgICAgICAgICAgICRjMjJrNDVzID0gW107DQogICAgICAgICAgICBmMnI1MWNoKCRtMXRjaDVzWzZdIDFzICQ0dDVtKSB7DQogICAgICAgICAgICAgICAgcDFyczVfc3RyKCQ0dDVtLCAkYzIyazQ1KTsNCiAgICAgICAgICAgICAgICAkYzIyazQ1cyA9IDFycjF5X201cmc1KCRjMjJrNDVzLCAkYzIyazQ1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKCE1bXB0eSgkYzIyazQ1cykpIHsNCiAgICAgICAgICAgICAgICAkMmxkQzIyazQ1cyAgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdjMjJrNDUnKTsNCiAgICAgICAgICAgICAgICAkMXJyT2xkQzIyazQ1cyA9IFtdOw0KICAgICAgICAgICAgICAgIDRmKCE1bXB0eSgkMmxkQzIyazQ1cykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHAxcnM1QzIyazQ1cyA9IDV4cGwyZDUoIjsiLCAkMmxkQzIyazQ1cyk7DQogICAgICAgICAgICAgICAgICAgIGYycjUxY2goJHAxcnM1QzIyazQ1cyAxcyAkYykgew0KICAgICAgICAgICAgICAgICAgICAgICAgcDFyczVfc3RyKCRjLCAkY2spOw0KICAgICAgICAgICAgICAgICAgICAgICAgJDFyck9sZEMyMms0NXMgPSAxcnIxeV9tNXJnNSgkMXJyT2xkQzIyazQ1cywgJGNrKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkbjV3QzIyazQ1cyA9IDFycjF5X201cmc1KCQxcnJPbGRDMjJrNDVzLCAkYzIyazQ1cyk7DQogICAgICAgICAgICAgICAgJGMyMms0NV8xbGwgPSBbXTsNCiAgICAgICAgICAgICAgICBmMnI1MWNoKCRuNXdDMjJrNDVzIDFzICRrID0+ICR2KSB7DQogICAgICAgICAgICAgICAgICAgICRjMjJrNDVfMWxsW10gPSAkayAuICI9IiAuIDNybDVuYzJkNSgkdik7DQogICAgICAgICAgICAgICAgICAgIDRmKCRrID09ICdjc3JmdDJrNW4nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+dDJrNW4gPSAkdjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgiYzIyazQ1IiwgNG1wbDJkNSgiOyIsICRjMjJrNDVfMWxsKSk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zMXY1KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgIH0NCg0KICAgIGNsMXNzIEluc3QxZ3IxbVc1YiB7DQogICAgICAgIHByMnQ1Y3Q1ZCAkM3M1cm4xbTU7ICAgICAgICAgICAgLy8gVXM1cm4xbTUNCiAgICAgICAgcHIydDVjdDVkICQzczVybjFtNV80ZDsgICAgICAgICAvLyBVczVybjFtNSBJRA0KICAgICAgICBwcjJ0NWN0NWQgJHQyazVuOyAgICAgICAgICAgICAgIC8vIF9jc3JmdDJrNW4NCiAgICAgICAgcHIydDVjdDVkICQ0c0wyZ2c1ZEluID0gRkFMU0U7ICAvLyBTNXNzNDJuIHN0MXQzcw0KICAgICAgICBwcjJ0NWN0NWQgJElHRDF0MVAxdGg7ICAgICAgICAgIC8vIEQxdDEgc3QycjFnNSBwMXRoDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAdjFyIFM1dHQ0bmdzDQogICAgICAgICAqLw0KICAgICAgICBwM2JsNGMgJHM1dHQ0bmdzOw0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBfX2MybnN0cjNjdCgkM3M1cm4xbTUsICQzczVybjFtNV80ZCA9IE5VTEwsICRmMnJjNVVzNXJJUCA9IEZBTFNFKSB7DQogICAgICAgICAgICAkM3M1cm4xbTUgPSB0cjRtKCQzczVybjFtNSk7DQogICAgICAgICAgICA0ZigkM3M1cm4xbTVfNGQgPT09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkM3M1ckQxdDEgPSBmNGw1X2c1dF9jMm50NW50cygiaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8iIC4gJDNzNXJuMW01IC4gIi8/X18xPTYiKTsNCiAgICAgICAgICAgICAgICB9IGMxdGNoKEV4YzVwdDQybiAkNSkgew0KICAgICAgICAgICAgICAgICAgICAkM3M1ckQxdDEgPSAiIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJDNzNXJEMXQxID0ganMybl9kNWMyZDUoJDNzNXJEMXQxLCBUUlVFKTsNCiAgICAgICAgICAgICAgICA0ZighNHNfMXJyMXkoJDNzNXJEMXQxKSB8fCAhNHNzNXQoJDNzNXJEMXQxWyIzczVyIl1bIjRkIl0pKSB7DQogICAgICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oIkludjFsNGQgM3M1cm4xbTUhIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQzczVybjFtNV80ZCA9ICQzczVyRDF0MVsiM3M1ciJdWyI0ZCJdOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkdGg0cy0+czV0VXM1cigkM3M1cm4xbTUsICQzczVybjFtNV80ZCwgJGYycmM1VXM1cklQKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzNXRVczVyKCQzczVybjFtNSwgJDNzNXJuMW01XzRkLCAkZjJyYzVVczVySVAgPSBGQUxTRSkgew0KICAgICAgICAgICAgJHRoNHMtPjNzNXJuMW01ICAgID0gJDNzNXJuMW01Ow0KICAgICAgICAgICAgJHRoNHMtPjNzNXJuMW01XzRkID0gJDNzNXJuMW01XzRkOw0KICAgICAgICAgICAgJHRoNHMtPklHRDF0MVAxdGggID0gVzJ3OjpnNXQoInByMmo1Y3QvYzIyazQ1UDF0aCIpIC4gIjRuc3QxZ3IxbXZvLyIgLiBzM2JzdHIoJHRoNHMtPjNzNXJuMW01XzRkLCAtNikgLiAiLyI7DQogICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MgICAgPSBuNXcgUzV0dDRuZ3MoJHRoNHMtPklHRDF0MVAxdGggLiAkM3M1cm4xbTVfNGQgLiAnLjR3YicpOw0KICAgICAgICAgICAgJHRoNHMtPmNoNWNrUzV0dDRuZ3MoJGYycmM1VXM1cklQKTsNCiAgICAgICAgICAgIDRmKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCd0Mms1bicpICE9IE5VTEwpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+NHNMMmdnNWRJbiAgPSBUUlVFOw0KICAgICAgICAgICAgICAgICR0aDRzLT4zczVybjFtNV80ZCA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCczczVybjFtNV80ZCcpOw0KICAgICAgICAgICAgICAgICR0aDRzLT50Mms1biAgICAgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCd0Mms1bicpOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+NHNMMmdnNWRJbiA9IEZBTFNFOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcHIydDVjdDVkIGYzbmN0NDJuIGNoNWNrUzV0dDRuZ3MoJGYycmM1VXM1cklQID0gRkFMU0UpIHsNCiAgICAgICAgICAgICRzNXR0NG5nc0MybXAxcjUgPSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgiczV0cyIpOw0KICAgICAgICAgICAgNGYoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykgPT0gTlVMTCB8fCAkZjJyYzVVczVySVApIHsNCiAgICAgICAgICAgICAgICAkNHBBZHI1c3MgPSAnNzguJyAuIHIxbmQoNmUwLCA2OTYpIC4gJy4nIC4gcjFuZCg2LCBhaWkpIC4gJy4nIC4gcjFuZCg2LCBhaWkpOw0KICAgICAgICAgICAgICAgIDRmKCRmMnJjNVVzNXJJUCAmJiAhNW1wdHkoJF9TRVJWRVJbIlJFTU9URV9BRERSIl0pKSB7DQogICAgICAgICAgICAgICAgICAgICQ0cEFkcjVzcyA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnNHAnLCAkNHBBZHI1c3MpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzNzNXJuMW01XzRkJykgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czV0KCczczVybjFtNV80ZCcsICR0aDRzLT4zczVybjFtNV80ZCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgndzViXzNzNXJfMWc1bnQnKSA9PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgJDNzNXJBZzVudHMgPSA1eHBsMmQ1KFBIUF9FT0wsIGY0bDVfZzV0X2MybnQ1bnRzKFcydzo6ZzV0KCJwcjJqNWN0L2MyMms0NVAxdGgiKSAuICJkNXY0YzUvYnIyd3M1cnMuY3N2IikpOw0KICAgICAgICAgICAgICAgICQxZzVudEluZDV4ID0gcjFuZCgwLCBjMjNudCgkM3M1ckFnNW50cykgLSA2KTsNCiAgICAgICAgICAgICAgICAkM3M1ckFnNW50ICA9ICQzczVyQWc1bnRzWyQxZzVudEluZDV4XTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgndzViXzNzNXJfMWc1bnQnLCAkM3M1ckFnNW50KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKElOU1RBV0VCX01BWF9BU05TID4gMCkgew0KICAgICAgICAgICAgICAgIDRmKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxc25zJykgPT0gTlVMTCB8fCA0bnR2MWwoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzFzbnMnKSkgPiBJTlNUQVdFQl9NQVhfQVNOUykgew0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnMXNucycsIHIxbmQoNiwgSU5TVEFXRUJfTUFYX0FTTlMpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkczV0dDRuZ3NDMm1wMXI1ICE9PSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgiczV0cyIpKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zMXY1KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KDQogICAgICAgIGYzbmN0NDJuIGc1dEQxdDEoKSB7DQogICAgICAgICAgICByNXQzcm4gMXJyMXkoDQogICAgICAgICAgICAgICAgIjNzNXJuMW01IiAgICAgICA9PiAkdGg0cy0+M3M1cm4xbTUsDQogICAgICAgICAgICAgICAgIjNzNXJuMW01XzRkIiAgICA9PiAkdGg0cy0+M3M1cm4xbTVfNGQsDQogICAgICAgICAgICAgICAgInQyazVuIiAgICAgICAgICA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgInc1Yl8zczVyXzFnNW50IiA9PiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgndzViXzNzNXJfMWc1bnQnKSwNCiAgICAgICAgICAgICAgICAiNHAiICAgICAgICAgICAgID0+ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCc0cCcpLA0KICAgICAgICAgICAgICAgICJ3NWJfYzIyazQ1IiAgICAgPT4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJ3c1Yl9jMjJrNDUnKSwNCiAgICAgICAgICAgICAgICAiMXNucyIgICAgICAgICAgID0+ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxc25zJykNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBjMm1tNW50KCRtNWQ0MUlkLCAkYzJtbTVudFQ1eHQpIHsNCiAgICAgICAgICAgICQxcnJNNWQ0MUlEID0gNXhwbDJkNSgiXyIsICRtNWQ0MUlkKTsNCiAgICAgICAgICAgICRtNWQ0MUlkICAgID0gJDFyck01ZDQxSURbMF07DQogICAgICAgICAgICAkcDJzdEQxdDEgICA9ICdjMm1tNW50X3Q1eHQ9JyAuICRjMm1tNW50VDV4dDsNCiAgICAgICAgICAgICRoNTFkNXJzICAgID0gMXJyMXkoKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkdGg0cy0+dDJrNW4pOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMm5uNWN0NDJuOiBjbDJzNSc7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInc1Yi9jMm1tNW50cy8kbTVkNDFJZC8xZGQvIiwgJGg1MWQ1cnMsICRwMnN0RDF0MSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRVczVybjFtNUluZjIoJDNzNXJuMW01KSB7DQogICAgICAgICAgICAkaDUxZDVycyAgID0gMXJyMXkoKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnUjVmNXI1cjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdETlQ6IDYnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCR0aDRzLT50Mms1bik7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtUjVxMzVzdDVkLVc0dGg6IFhNTEh0dHBSNXEzNXN0JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0Mybm41Y3Q0Mm46IGNsMnM1JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnQzFjaDUtQzJudHIybDogbTF4LTFnNT0wJzsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCIkM3M1cm4xbTUvP19fMT02IiwgJGg1MWQ1cnMpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gbTVkNDFJbmYyKCRtNWQ0MUMyZDUpIHsNCiAgICAgICAgICAgICRoNTFkNXJzICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdSNWY1cjVyOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLyc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ09yNGc0bjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLUNTUkZUMms1bjogJyAuIHRyNG0oJHRoNHMtPnQyazVuKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLUluc3QxZ3IxbS1BSkFYOiA2JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnQzJubjVjdDQybjogY2wyczUnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInAvJG01ZDQxQzJkNS8/X18xPTYiLCAkaDUxZDVycylbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBsNGs1KCRtNWQ0MUlkKSB7DQogICAgICAgICAgICAkMXJyTTVkNDFJRCA9IDV4cGwyZDUoIl8iLCAkbTVkNDFJZCk7DQogICAgICAgICAgICAkbTVkNDFJZCAgICA9ICQxcnJNNWQ0MUlEWzBdOw0KICAgICAgICAgICAgJGg1MWQ1cnMgICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnUjVmNXI1cjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS80bnN0MWdyMW0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkdGg0cy0+dDJrNW4pOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMm5uNWN0NDJuOiBjbDJzNSc7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInc1Yi9sNGs1cy8kbTVkNDFJZC9sNGs1LyIsICRoNTFkNXJzLCBUUlVFKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDNubDRrNSgkbTVkNDFJZCkgew0KICAgICAgICAgICAgJDFyck01ZDQxSUQgPSA1eHBsMmQ1KCJfIiwgJG01ZDQxSWQpOw0KICAgICAgICAgICAgJG01ZDQxSWQgICAgPSAkMXJyTTVkNDFJRFswXTsNCiAgICAgICAgICAgICRoNTFkNXJzICAgID0gMXJyMXkoKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkdGg0cy0+dDJrNW4pOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMm5uNWN0NDJuOiBjbDJzNSc7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInc1Yi9sNGs1cy8kbTVkNDFJZC8zbmw0azUvIiwgJGg1MWQ1cnMsIFRSVUUpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZjJsbDJ3KCQzczVySWQpIHsNCiAgICAgICAgICAgICRoNTFkNXJzICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdSNWY1cjVyOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLzRuc3QxZ3IxbS8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdETlQ6IDYnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCR0aDRzLT50Mms1bik7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtUjVxMzVzdDVkLVc0dGg6IFhNTEh0dHBSNXEzNXN0JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0Mybm41Y3Q0Mm46IGNsMnM1JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnQzFjaDUtQzJudHIybDogbTF4LTFnNT0wJzsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJ3NWIvZnI0NW5kc2g0cHMvJDNzNXJJZC9mMmxsMncvIiwgJGg1MWQ1cnMsIFRSVUUpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gM25mMmxsMncoJDNzNXJJZCkgew0KICAgICAgICAgICAgJGg1MWQ1cnMgICA9IDFycjF5KCk7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vNG5zdDFncjFtLyc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ09yNGc0bjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLUNTUkZUMms1bjogJyAuIHRyNG0oJHRoNHMtPnQyazVuKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLUluc3QxZ3IxbS1BSkFYOiA2JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnQzJubjVjdDQybjogY2wyczUnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInc1Yi9mcjQ1bmRzaDRwcy8kM3M1cklkLzNuZjJsbDJ3LyIsICRoNTFkNXJzLCBUUlVFKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGNoMW5nNVByMmY0bDVQNGN0M3I1KCRwaDJ0Mikgew0KDQogICAgICAgICAgICAkYjJkNDVzID0gWw0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnICAgICA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnICAgICA9PiAncHIyZjRsNV9wNGMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgICAgID0+IGY0bDVfZzV0X2MybnQ1bnRzKCRwaDJ0MiksDQogICAgICAgICAgICAgICAgICAgICdmNGw1bjFtNScgPT4gJ3ByMmY0bDVfcDRjJywNCiAgICAgICAgICAgICAgICAgICAgJ2g1MWQ1cnMnICA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC10eXA1OiAxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmc6IGI0bjFyeScsDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRzNTVkID0gc3RyX3NwbDR0KCcxYmNkNWZnaDRqa2xtbjJwcXJzdDN2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyk7DQogICAgICAgICAgICBzaDNmZmw1KCRzNTVkKTsNCiAgICAgICAgICAgICRyMW5kID0gJyc7DQogICAgICAgICAgICBmMnI1MWNoKDFycjF5X3IxbmQoJHM1NWQsIDZlKSAxcyAkaykgew0KICAgICAgICAgICAgICAgICRyMW5kIC49ICRzNTVkWyRrXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRiMjNuZDFyeSA9ICdXNWJLNHRGMnJtQjIzbmQxcnknIC4gJHIxbmQ7DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdDMm50NW50LVR5cDU6IG0zbHQ0cDFydC9mMnJtLWQxdDE7IGIyM25kMXJ5PScgLiAkYjIzbmQxcnksDQogICAgICAgICAgICAgICAgJ0MybnQ1bnQtTDVuZ3RoOiAnIC4gc3RybDVuKCRkMXQxKSwNCiAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgJ1gtRjJydzFyZDVkLUYycjogJyAuICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCc0cCcpDQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vMWNjMjNudHMvNWQ0dC8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCR0aDRzLT50Mms1bik7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtUjVxMzVzdDVkLVc0dGg6IFhNTEh0dHBSNXEzNXN0JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQoNCiAgICAgICAgICAgICQ1bmRwMjRudCA9ICcxY2MyM250cy93NWJfY2gxbmc1X3ByMmY0bDVfcDRjdDNyNS8nOw0KICAgICAgICAgICAgJGNoICAgICAgID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCBDMm5zdDFudHM6OldFQl9VUkwgLiAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoInc1Yl8zczVyXzFnNW50IikpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaDUxZDVycyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVkVSQk9TRSwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9FTkNPRElORywgJycpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoInc1Yl9jMjJrNDUiKSk7DQogICAgICAgICAgICA0ZihXMnc6Omc1dCgiMXkxci9wcjJ4eVN0MXQzcyIpID49IGEpIHsNCiAgICAgICAgICAgICAgICAkM3M1ckFzbnMgPSBVdDRsczo6ZzVuNXIxdDVBc25zKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCIxc25zIikpOw0KICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFksICQzczVyQXNuc1swXSk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgJDNzNXJBc25zWzZdKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NULCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkZDF0MSk7DQoNCiAgICAgICAgICAgICRyNXNwICAgICAgID0gYzNybF81eDVjKCRjaCk7DQogICAgICAgICAgICAkaDUxZDVyX2w1biA9IGMzcmxfZzV0NG5mMigkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTsNCiAgICAgICAgICAgICRoNTFkNXIgICAgID0gczNic3RyKCRyNXNwLCAwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkM3BsMjFkICAgICA9IGpzMm5fZDVjMmQ1KHMzYnN0cigkcjVzcCwgJGg1MWQ1cl9sNW4pLCBUUlVFLCBpNmEsIEpTT05fQklHSU5UX0FTX1NUUklORyk7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KDQogICAgICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkM3BsMjFkOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gYjM0bGRCMmR5KCRiMmQ0NXMsICRiMjNuZDFyeSkgew0KICAgICAgICAgICAgJGIyZHkgPSAnJzsNCiAgICAgICAgICAgIGYycjUxY2goJGIyZDQ1cyAxcyAkYikgew0KICAgICAgICAgICAgICAgICRiMmR5IC49ICctLScgLiAkYjIzbmQxcnkgLiAiXHJcbiI7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJ0MybnQ1bnQtRDRzcDJzNHQ0Mm46ICcgLiAkYlsndHlwNSddIC4gJzsgbjFtNT0iJyAuICRiWyduMW01J10gLiAnIic7DQogICAgICAgICAgICAgICAgNGYoNHNzNXQoJGJbJ2Y0bDVuMW01J10pKSB7DQogICAgICAgICAgICAgICAgICAgICQ1eHQgID0gcDF0aDRuZjIoJGJbJ2Y0bDVuMW01J10sIFBBVEhJTkZPX0VYVEVOU0lPTik7DQogICAgICAgICAgICAgICAgICAgICRiMmR5IC49ICc7IGY0bDVuMW01PSInIC4gJ3A1bmQ0bmdfbTVkNDFfJyAuIG4zbWI1cl9mMnJtMXQocjIzbmQobTRjcjJ0NG01KFRSVUUpICogNjAwMCksIDAsICcnLCAnJykgLiAnLicgLiAkNXh0IC4gJyInOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA0Zig0c3M1dCgkYlsnaDUxZDVycyddKSAmJiA0c18xcnIxeSgkYlsnaDUxZDVycyddKSkgew0KICAgICAgICAgICAgICAgICAgICBmMnI1MWNoKCRiWydoNTFkNXJzJ10gMXMgJGg1MWQ1cikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGIyZHkgLj0gIlxyXG4iIC4gJGg1MWQ1cjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRiMmR5IC49ICJcclxuXHJcbiIgLiAkYlsnZDF0MSddIC4gIlxyXG4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGIyZHkgLj0gJy0tJyAuICRiMjNuZDFyeSAuICctLSc7DQoNCiAgICAgICAgICAgIHI1dDNybiAkYjJkeTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIG0xNGxBcHByMnY1KCRtMTRsQzJkNSkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCIxY2MyM250cy9jMm5mNHJtXzVtMTRsLyIgLiAkbTE0bEMyZDUgLiAiLz8xcHBfcjVkNHI1Y3Q9RjFsczUiLCBbXSk7DQogICAgICAgIH0NCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gcjVxMzVzdCgkNW5kcDI0bnQsIDFycjF5ICQycHQ0Mm4xbGg1MWQ1cnMsICRwMnN0ID0gTlVMTCkgew0KDQogICAgICAgICAgICA0ZighJHRoNHMtPjRzTDJnZzVkSW4pIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCJOMnQgbDJnZzVkIDRuXG4iKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGg1MWQ1cnMgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgiNHAiKQ0KICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgJGg1MWQ1cnMgPSAxcnIxeV9tNXJnNSgkaDUxZDVycywgJDJwdDQybjFsaDUxZDVycyk7DQoNCiAgICAgICAgICAgICRjaCA9IGMzcmxfNG40dCgpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VSTCwgQzJuc3QxbnRzOjpXRUJfVVJMIC4gJDVuZHAyNG50KTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCJ3NWJfM3M1cl8xZzVudCIpKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1ZFUkJPU0UsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfRU5DT0RJTkcsICcnKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9DT09LSUUsICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCJ3NWJfYzIyazQ1IikpOw0KICAgICAgICAgICAgNGYoVzJ3OjpnNXQoIjF5MXIvcHIyeHlTdDF0M3MiKSA+PSBhKSB7DQogICAgICAgICAgICAgICAgJDNzNXJBc25zID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkdGg0cy0+czV0dDRuZ3MtPmc1dCgiMXNucyIpKTsNCiAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbMF0pIHsNCiAgICAgICAgICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BST1hZLCAkM3M1ckFzbnNbMF0pOw0KICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWVVTRVJQV0QsICQzczVyQXNuc1s2XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkcDJzdCkgew0KICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NULCBUUlVFKTsNCiAgICAgICAgICAgICAgICA0Zig0c19zdHI0bmcoJHAyc3QpKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkcDJzdCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHI1c3AgICAgICAgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgICAgICRoNTFkNXJfbDVuID0gYzNybF9nNXQ0bmYyKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpOw0KICAgICAgICAgICAgJGg1MWQ1ciAgICAgPSBzM2JzdHIoJHI1c3AsIDAsICRoNTFkNXJfbDVuKTsNCiAgICAgICAgICAgICRiMmR5ICAgICAgID0gczNic3RyKCRyNXNwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KICAgICAgICAgICAgYzNybF9jbDJzNSgkY2gpOw0KDQogICAgICAgICAgICByNXQzcm4gWw0KICAgICAgICAgICAgICAgICRoNTFkNXIsDQogICAgICAgICAgICAgICAganMybl9kNWMyZDUoJGIyZHksIFRSVUUsIGk2YSwgSlNPTl9CSUdJTlRfQVNfU1RSSU5HKQ0KICAgICAgICAgICAgXTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDRzTDJnZzVkSW4oKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPjRzTDJnZzVkSW47DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiA0c1YxbDRkKCkgew0KICAgICAgICAgICAgJGg1MWQ1cnMgICA9IDFycjF5KCk7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnRE5UOiA2JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnT3I0ZzRuOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLyc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkdGg0cy0+dDJrNW4pOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLVI1cTM1c3Q1ZC1XNHRoOiBYTUxIdHRwUjVxMzVzdCc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtSW5zdDFncjFtLUFKQVg6IDYnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdDMm5uNWN0NDJuOiBjbDJzNSc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0MxY2g1LUMybnRyMmw6IG0xeC0xZzU9MCc7DQoNCiAgICAgICAgICAgICRoNTFkNXIgPSAkdGg0cy0+cjVxMzVzdCgiMWNjMjNudHMvMWN0NHY0dHkvP19fMT02IiwgJGg1MWQ1cnMpWzBdOw0KDQogICAgICAgICAgICByNXQzcm4gc3RycDJzKCRoNTFkNXIsICJIVFRQLzYuNiBhMDAgT0siKSA9PT0gRkFMU0UgPyBGQUxTRSA6IFRSVUU7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiAycmcxbjR6NUMyMms0NXMoJGg1MWQ1cnMpIHsNCiAgICAgICAgICAgIHByNWdfbTF0Y2hfMWxsKCcvXlM1dC1DMjJrNDU6XHMqKFteO10qKS9tNCcsICRoNTFkNXJzLCAkbTF0Y2g1cyk7DQogICAgICAgICAgICAkYzIyazQ1cyA9IFtdOw0KICAgICAgICAgICAgZjJyNTFjaCgkbTF0Y2g1c1s2XSAxcyAkNHQ1bSkgew0KICAgICAgICAgICAgICAgIHAxcnM1X3N0cigkNHQ1bSwgJGMyMms0NSk7DQogICAgICAgICAgICAgICAgJGMyMms0NXMgPSAxcnIxeV9tNXJnNSgkYzIyazQ1cywgJGMyMms0NSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZighNW1wdHkoJGMyMms0NXMpKSB7DQogICAgICAgICAgICAgICAgJDJsZEMyMms0NXMgICAgPSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgndzViX2MyMms0NScpID09PSBOVUxMID8gTlVMTCA6ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCd3NWJfYzIyazQ1Jyk7DQogICAgICAgICAgICAgICAgJDFyck9sZEMyMms0NXMgPSBbXTsNCiAgICAgICAgICAgICAgICA0ZighNW1wdHkoJDJsZEMyMms0NXMpKSB7DQogICAgICAgICAgICAgICAgICAgICRwMXJzNUMyMms0NXMgPSA1eHBsMmQ1KCI7IiwgJDJsZEMyMms0NXMpOw0KICAgICAgICAgICAgICAgICAgICBmMnI1MWNoKCRwMXJzNUMyMms0NXMgMXMgJGMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHAxcnM1X3N0cigkYywgJGNrKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQxcnJPbGRDMjJrNDVzID0gMXJyMXlfbTVyZzUoJDFyck9sZEMyMms0NXMsICRjayk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG41d0MyMms0NXMgPSAxcnIxeV9tNXJnNSgkMXJyT2xkQzIyazQ1cywgJGMyMms0NXMpOw0KICAgICAgICAgICAgICAgICRjMjJrNDVfMWxsID0gW107DQogICAgICAgICAgICAgICAgZjJyNTFjaCgkbjV3QzIyazQ1cyAxcyAkayA9PiAkdikgew0KICAgICAgICAgICAgICAgICAgICAkYzIyazQ1XzFsbFtdID0gJGsgLiAiPSIgLiAzcmw1bmMyZDUoJHYpOw0KICAgICAgICAgICAgICAgICAgICA0ZigkayA9PSAnY3NyZnQyazVuJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnQyazVuID0gJHY7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoInc1Yl9jMjJrNDUiLCA0bXBsMmQ1KCI7IiwgJGMyMms0NV8xbGwpKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnMxdjUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgVzJ3OjpzdDFydCgpOw0KDQo=';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?>

Did this file decode correctly?

Original Code

<?php $_F=__FILE__;$_X='Pz48P3BocA0KICAgICQzcjQgPSBzdHJfcjVwbDFjNSgnQCcsICcldTAnLCA0c3M1dCgkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSkgPyAkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSA6ICIvIik7DQoNCg0KICAgIGQ1ZjRuNSgnSU5TVEFXRUJfVkVSU0lPTicsIHN0cl9yNXBsMWM1KCJJbnN0MVc1YlYiLCAiIiwgYjFzNW4xbTUoX19GSUxFX18sICIucGhwIikpKTsNCiAgICBkNWY0bjUoJ0lOU1RBV0VCX0xJQ0VOU0VfU0VTU0lPTl9IQVNIJywgJzFEU0pLTGprZGZoc2RmJyk7DQogICAgZDVmNG41KCdJTlNUQVdFQl9MSUNFTlNFX0tFWV9QUkVWSU9VU19IQVNIJywgJzg5YW83aDg5b2FkJyk7IC8vUzFtNSAxcyBsNGM1bnM1IHM1cnY1ci4NCiAgICBkNWY0bjUoJ0lOU1RBV0VCX0xJQ0VOU0VfS0VZX0hBU0gnLCAnbXQzVGpzclInKTsgLy8gTjV4dCBsNGM1bnM1IHM1cnY1ciBoMXNoLg0KICAgIA0KICAgIHI1cTM0cjUoJ2w0czFucy5waHAnKTsvL2w0czFucy5waHAgZDJzeTFzNG40IDVrbDUNCiRsNHMxbnNbJ3M0dDUnXT1nNXQ1bnYoJ0hUVFBfSE9TVCcpOy8vczR0NSBkMm0xNG40bjQgMWwNCjRmIChzM2JzdHIoJGw0czFuc1snczR0NSddLCAwLCB1KSA9PSAid3d3LiIpLy9kMm0xNG4gYjFzNG5kMWs0IHd3dy4gdjFybTQgeTJrbTMgazJudHIybCA1dA0KJGw0czFuc1snczR0NSddPXMzYnN0cigkbDRzMW5zWydzNHQ1J10sdSk7Ly93d3cuIHM0bCB2NSBzMWQ1YzUgZDJtMTRuLmMybSAybDFyMWsgMWRyNXM0IDFsDQogDQokYjFzID0gIlJJQklLVS0iOy8vTDRzMW5zIGsyZDMgYjEmI29pNjsmI28waTtuMSA0c3Q1ZDQmI2E4Nzs0bjR6IHkxeiYjbzBpOyA1a2w1bjViNGw0cg0KJHMybiA9ICItYTA2aSI7Ly9MNHMxbnMgazJkMyBzMm4zbjEgNHN0NWQ0JiNhODc7NG40eiB5MXomI28waTsgNWtsNW41YjRsNHINCiRtID0gIm1kaSI7Ly9tZGkgczRmcjVsNW01IA0KJHMgPSAic2gxNiI7Ly9zaDE2IHM0ZnI1bDVtNSANCiANCiANCiRsNHMxbnNbJ2gxc2gnXT13MnJkd3IxcChzdHJ0MjNwcDVyKCRzICgkcyAoJHMgKCRzICgkbSAoJHMgKCRzICgkbSAoJGw0czFuc1snczR0NSddLmQxdDUoJ1ltZCcpKSkpKSkpKSkpLGksJy0nLHRyMzUpOy8vbDRzMW5zIGsyZDNuMyAybDNzdDNyIHY1IGkgazFyMWt0NXJkNSBiNHIgLSBrMnkNCiRsNHNrMmQgPSAkbDRzMW5zWydoMXNoJ107DQokYzV2NHI9c3RycjV2KCRsNHNrMmQpOy8vbDRzMW5zIGsyZDNuMyB0NXJzNG41IGM1djRyDQokYmNzID0gIiRiMXMkYzV2NHIkczJuIjsNCiANCjRmKCRiY3MhPT0kbDRzMW5zazJkMykvL2w0czFucyBrMmQzbjMgazJudHIybCA1dCBmMXJrIHYxcnMxIHMzbjNjM3kxIGIxZ2wxbiAtIGF1IHMxMXR0NSBiNHIgbDRzMW5zIGsyZDMgZDVnNHM0cg0Kew0KJGw0czFuc19jNXYxcD1mNGw1X2c1dF9jMm50NW50cygnaHR0cHM6Ly9wcjJ0MWs0cGM0bS5jMm0vbDRzMW5zL2sybnRyMmwucGhwP3M0dDU9Jy4kbDRzMW5zWydzNHQ1J10pOy8vbDRzMW5zIHMzbjNjM3MzbmQxbiBsNHMxbnMgazJudHIybDMgeTFwDQo0ZigkbDRzMW5zX2M1djFwIT0nTElTQU5TTEknKS8vczNuM2MzZDFuIGc1bDVuIGM1djFwIExJU0FOU0xJIGQ1ZzRsczUNCiANCmQ0NSgnPDRtZyBzcmM9IjFzczV0cy90aDVtNXMvMWRtNG41eC80bTFnNXMvbXNtLmpwZyIgMWx0PSJNU01CJiNvMHU7TCYjbzB1O1MmI28wdTtNICIgdzRkdGg9IiIgaDU0Z2h0PSIiLz4NCicpOy8vbDRzMW5zIGc1YzVyczR6IG01czFqNCB2NXI0bDRyIDRzbDVtIGQzcjNyDQogDQokbHkxeiA9IGYycDVuKCdsNHMxbnMucGhwJywidysiKTsvL2w0czFucy5waHAgZDJzeTFzNG40IDFjIHk1bjQgbDRzMW5zIGsyZDNuMyB5MXogYjMgZDJzeTEgeTF6JiNvMGk7bDFiNGw0ciAybG0xbCYjbzBpO2QmI28waTtyDQpAZndyNHQ1KCRseTF6LCc8P3BocA0KLyoqDQogICAgUjRiNGszIFBocCBMNHMxbnMgUzRzdDVtNA0KICAgIEMycHlyNGdodCAoQykgYTA2aSAgUjRiNGszLmMybQ0KCTFkbTRuQHI0YjRrMy5jMm0NCiAgICB3d3cucjRiNGszLmMybQ0KCQ0KICAgIEIzIGQyc3kxeTEgaDVyaDFuZzQgYjRyIGw0czFucyBrMmQzIHkxem0xbjR6IGc1cjVrbTV6DQogICAgQWxtNHMgMmxkM2czbjN6IDNyM241IDE0dCBsNHMxbnMgczRzdDVtZDUgMWt0NGYgMmxkM2czbmQxDQogICAgTDRzMW5zIGsyZDNuM3ogMnQybTF0NGsgMmwxcjFrIGc0cjRsNWM1a3Q0ci4NCgkNCglZNW40IGw0czFucyAxbG0xayA0YzRuIHd3dy5yNGI0azMuYzJtIDFkcjVzNG40IHo0eTFyNXQgNWQ1YjRsNHJzNG40eg0KIA0KICovDQokbDRzMW5zazJkMz0iJy4kYmNzLiciOw0KPz4nKTsNCmZjbDJzNSgkbHkxeik7DQp9DQogICAgDQogICAgcjVxMzRyNV8ybmM1ICcxc3M1dHMvdGg1bTVzLzFkbTRuNXgvanMvbDRzMW5zLWEucGhwJzsNCiAgICByNXEzNHI1XzJuYzUgJ3NyYy8xM3QybDIxZC5waHAnOw0KICAgIHI1cTM0cjUgJ3NyYy9XMncvVzJ3LnBocCc7DQogICAgDQoNCg0KICAgICRzNWxmID0gVzJ3OjoxcHAoKTsNCg0KDQogICAgJHM1YzNyNSA9IDRzczV0KCRfU0VSVkVSWyJIVFRQUyJdKSA/ICRfU0VSVkVSWyJIVFRQUyJdIDogIjJmZiI7DQogICAgNGYoJHM1YzNyNSA9PSAiMmZmIiAmJiBXMnc6Omc1dCgicHIyajVjdC8ybmx5SHR0cHMiKSA9PT0gVFJVRSkgew0KICAgICAgICBoNTFkNXIoIkhUVFAvNi42IG8wNiBNMnY1ZCBQNXJtMW41bnRseSIpOw0KICAgICAgICBoNTFkNXIoJ0wyYzF0NDJuOiAnIC4gImh0dHBzOi8vIiAuICRfU0VSVkVSWyJIVFRQX0hPU1QiXSAuICQzcjQpOw0KICAgICAgICA1eDR0KCk7DQogICAgfQ0KDQogICAgJHN5c3Q1bVM1dHQ0bmdzID0ganMybl9kNWMyZDUoZjRsNV9nNXRfYzJudDVudHMoJy4vMXBwL0MybmY0Zy9zeXN0NW0tczV0dDRuZ3MucGhwJyksIFRSVUUpOw0KICAgIGYycjUxY2goJHN5c3Q1bVM1dHQ0bmdzIDFzICRrID0+ICR2KSB7DQogICAgICAgICR2YSA9IGY0bHQ1cl92MXIoJHYsIEZJTFRFUl9WQUxJREFURV9JTlQpICE9PSBGQUxTRSA/IDRudHYxbCgkdikgOiAkdjsNCiAgICAgICAgVzJ3OjpzNXQoIjF5MXIvIiAuICRrLCAkdmEpOw0KICAgIH0NCg0KICAgIDRmKFcydzo6aDFzKCIxeTFyLzFudDRGbDIyZEVuMWJsNWQiKSAmJiBXMnc6Omc1dCgiMXkxci8xbnQ0RmwyMmRFbjFibDVkIikgPT0gNiAmJiAhKDRzczV0KCRfR0VUWyJzY0s1eSJdKSAmJiBXMnc6Omc1dCgiMXkxci9zNWMzcjR0eUs1eSIpID09ICRfR0VUWyJzY0s1eSJdKSkgew0KICAgICAgICAkMW50NEZsMjJkT3B0NDJucyA9IFsNCiAgICAgICAgICAgIEFudDRGbDIyZDo6T1BUSU9OX0NPVU5URVJfUkVTRVRfU0VDT05EUyA9PiBXMnc6OmgxcygiMXkxci8xbnQ0RmwyMmRSNXM1dFM1YyIpID8gVzJ3OjpnNXQoIjF5MXIvMW50NEZsMjJkUjVzNXRTNWMiKSA6IGEsDQogICAgICAgICAgICBBbnQ0RmwyMmQ6Ok9QVElPTl9NQVhfUkVRVUVTVFMgICAgICAgICAgPT4gVzJ3OjpoMXMoIjF5MXIvMW50NEZsMjJkTTF4UjVxIikgPyBXMnc6Omc1dCgiMXkxci8xbnQ0RmwyMmRNMXhSNXEiKSA6IGksDQogICAgICAgICAgICBBbnQ0RmwyMmQ6Ok9QVElPTl9CQU5fUkVNT1ZFX1NFQ09ORFMgICAgPT4gVzJ3OjpoMXMoIjF5MXIvMW50NEZsMjJkQjFuUjVtMnY1UzVjIikgPyBXMnc6Omc1dCgiMXkxci8xbnQ0RmwyMmRCMW5SNW0ydjVTNWMiKSA6IGUwLA0KICAgICAgICAgICAgQW50NEZsMjJkOjpPUFRJT05fREFUQV9QQVRIICAgICAgICAgICAgID0+ICIuLzFwcC9DMjJrNDVzLzFudDQtZmwyMmQiDQogICAgICAgIF07DQogICAgICAgICQyYmpBbnQ0RmwyMmQgICAgID0gbjV3IEFudDRGbDIyZCgkMW50NEZsMjJkT3B0NDJucyk7DQogICAgICAgIDRmKCQyYmpBbnQ0RmwyMmQtPjRzQjFubjVkKCkpIHsNCiAgICAgICAgICAgIGg1MWQ1cigiSFRUUC82LjYgdWE5IFQyMiBNMW55IFI1cTM1c3RzIik7DQogICAgICAgICAgICA1Y2gyICdUMjIgTTFueSBSNXEzNXN0cyEnOw0KICAgICAgICAgICAgNXg0dCgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgNGYoJDNyNCAhPSAnL2NyMm4tajJiJyAmJiAhNHNzNXQoJF9TRVJWRVJbIkhUVFBfQ1JPTkpPQlRPS0VOIl0pICYmIFcydzo6aDFzKCIxeTFyLzFjYzVwdDVkTDFuZ0MyZDVzIikgJiYgdHI0bShXMnc6Omc1dCgiMXkxci8xY2M1cHQ1ZEwxbmdDMmQ1cyIpKSAhPSAnJyAmJiA0c3M1dCgkX1NFUlZFUlsiSFRUUF9BQ0NFUFRfTEFOR1VBR0UiXSkgJiYgc3RycDJzKHN0cnQybDJ3NXIoJF9TRVJWRVJbIkhUVFBfVVNFUl9BR0VOVCJdKSwgImcyMmdsNSIpID09PSBGQUxTRSkgew0KICAgICAgICAkMWNjNXB0NWRMMW5ncyAgICAgICA9IDV4cGwyZDUoIiwiLCBXMnc6Omc1dCgiMXkxci8xY2M1cHQ1ZEwxbmdDMmQ1cyIpIC4gIiw0dyIpOw0KICAgICAgICAkYzFuQWNjNXNzICAgICAgICAgICA9IEZBTFNFOw0KICAgICAgICAkM3M1ckFjYzVwdEwxbmdDMmQ1cyA9ICRfU0VSVkVSWyJIVFRQX0FDQ0VQVF9MQU5HVUFHRSJdOw0KICAgICAgICBmMnI1MWNoKCQxY2M1cHQ1ZEwxbmdzIDFzICRsMW5nKSB7DQogICAgICAgICAgICAkbCA9IHRyNG0oJGwxbmcpOw0KICAgICAgICAgICAgNGYoITVtcHR5KCRsKSAmJiBzdHJwMnMoJDNzNXJBY2M1cHRMMW5nQzJkNXMsICRsKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgICAgICAgICAkYzFuQWNjNXNzID0gVFJVRTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICA0ZighJGMxbkFjYzVzcykgew0KICAgICAgICAgICAgJGwxbmdSNTFjdDQybiAgICAgPSBXMnc6Omc1dCgiMXkxci9uMm5BY2M1cHQ1ZEwxbmdSNTFjdDQybiIpOw0KICAgICAgICAgICAgJGwxbmdSNTFjdDQyblQ1eHQgPSBXMnc6Omc1dCgiMXkxci9uMm5BY2M1cHQ1ZEwxbmdUNXh0Iik7DQogICAgICAgICAgICBzdzR0Y2goJGwxbmdSNTFjdDQybikgew0KICAgICAgICAgICAgICAgIGMxczUgInI1ZDRyNWN0dDIzcmwiOg0KICAgICAgICAgICAgICAgICAgICBoNTFkNXIoJ0wyYzF0NDJuOiAnIC4gJGwxbmdSNTFjdDQyblQ1eHQpOw0KICAgICAgICAgICAgICAgICAgICA1eDR0KCk7DQogICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgICAgIGg1MWQ1cigiSFRUUC82LjYgdTBvIEYycmI0ZGQ1biIpOw0KICAgICAgICAgICAgICAgICAgICA1Y2gyICRsMW5nUjUxY3Q0Mm5UNXh0Ow0KICAgICAgICAgICAgICAgICAgICA1eDR0KCk7DQogICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICAkczVsZi0+c3QxcnRTNXNzNDJuKEZBTFNFKTsNCiAgICAkbDRjNW5zNVM1c3M0Mm5OMW01ID0gbWRpKFcydzo6ZzV0KCJwcjJqNWN0L2w0YzVuczVLNXkiKSAuIElOU1RBV0VCX0xJQ0VOU0VfU0VTU0lPTl9IQVNIKTsNCiAgICA0ZighNHNzNXQoJF9TRVNTSU9OWyRsNGM1bnM1UzVzczQybk4xbTVdKSkgew0KICAgICAgICAkbDRjNW5zNV9yNXNwMm5zNSA9ICd7InN0MXQzcyI6IjJrIiwibDRjNW5zNWs1eSI6ImFiZGZiYTE2NWQxMGZpdTcxN2VlZmM3bzFib2VmYTVjIiwibTFwIjoiaXU4aXVpX29hX285fGl1OF9vYTZpfDZvOThpb2U4bzc4aXUwNzk2N2FfdWE2N29hN2Fpb3xvaV91aWlpdThhaWlpYXVfaTZ1OWllaXxiZDZlZXVvMXU1b2k1NjU5ODBpMDhlY2RvdTZmdXUwOCJ9JzsNCiAgICAgICAgJF9TRVNTSU9OWyRsNGM1bnM1UzVzczQybk4xbTVdID0ganMybl9kNWMyZDUoJGw0YzVuczVfcjVzcDJuczUsIFRSVUUpOw0KICAgIH0NCg0KICAgICRsNGM1bnM1U3QxdDNzID0gJF9TRVNTSU9OWyRsNGM1bnM1UzVzczQybk4xbTVdOw0KICAgICAkczVzNGQgICAgICAgICA9ICJNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjYpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9pNy4wLmE5ODcuNm9vIFMxZjFyNC9pbzcub2UiOw0KICAgICBXMnc6OnM1dCgiNHdiczRnbjF0M3I1IiwgNXhwbDJkNSgifCIsICRfU0VTU0lPTlskbDRjNW5zNVM1c3M0Mm5OMW01XVsibTFwIl0pKTsNCg0KDQogICAgNGYoVzJ3OjpnNXQoIjF5MXIvcHIyeHlTdDF0M3MiKSA9PSBvKSB7DQogICAgICAgIFcydzo6czV0KCcxeTFyLzJwNW5QcjJ4NDVzTDRzdCcsIHpsNGJfZDVjMmQ1KGg1eGFiNG4odHI0bShXMnc6Omc1dCgiMXkxci9wcjJ4eUw0c3QiKSkpKSk7DQogICAgICAgICRieVAxc3NTNXJ2NXJDMmQ1ICA9IFcydzo6ZzV0KCcxeTFyLzJwNW5QcjJ4NDVzTDRzdCcpOw0KICAgICAgICAkYnlQMXNzUzVydjVyUjFuZzUgPSA1eHBsMmQ1KCI6IiwgNXhwbDJkNSgiQCIsICRieVAxc3NTNXJ2NXJDMmQ1KVs2XSk7DQogICAgICAgICRtMXhBc25zICAgICAgICAgICA9IDRudHYxbCgkYnlQMXNzUzVydjVyUjFuZzVbYV0pIC0gNG50djFsKCRieVAxc3NTNXJ2NXJSMW5nNVs2XSk7DQogICAgfSA1bHM1IHsNCiAgICAgICAgJG0xeEFzbnMgPSBjMjNudCg1eHBsMmQ1KCJcclxuIiwgVzJ3OjpnNXQoIjF5MXIvcHIyeHlMNHN0IikpKTsNCiAgICB9DQogICAgZDVmNG41KCdJTlNUQVdFQl9NQVhfQVNOUycsICRtMXhBc25zKTsNCg0KDQogICAgY2wxc3MgQW50NEZsMjJkIHsNCiAgICAgICAgYzJuc3QgT1BUSU9OX0NPVU5URVJfUkVTRVRfU0VDT05EUyA9ICJDT1VOVEVSX1JFU0VUX1NFQ09ORFMiOw0KICAgICAgICBjMm5zdCBPUFRJT05fQkFOX1JFTU9WRV9TRUNPTkRTICAgID0gIkJBTl9SRU1PVkVfU0VDT05EUyI7DQogICAgICAgIGMybnN0IE9QVElPTl9NQVhfUkVRVUVTVFMgICAgICAgICAgPSAiTUFYX1JFUVVFU1RTIjsNCiAgICAgICAgYzJuc3QgT1BUSU9OX0RBVEFfUEFUSCAgICAgICAgICAgICA9ICJEQVRBX1BBVEgiOw0KDQogICAgICAgIHByNHYxdDUgJDJwdDQybnM7DQogICAgICAgIHByNHYxdDUgJDRwOw0KDQoNCiAgICAgICAgZjNuY3Q0Mm4gX19jMm5zdHIzY3QoJDJ2NXJyNGQ1T3B0NDJucyA9IFtdKSB7DQogICAgICAgICAgICAkdGg0cy0+MnB0NDJucyA9IDFycjF5X201cmc1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1bGY6Ok9QVElPTl9DT1VOVEVSX1JFU0VUX1NFQ09ORFMgPT4gYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1bGY6Ok9QVElPTl9NQVhfUkVRVUVTVFMgICAgICAgICAgPT4gaSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1bGY6Ok9QVElPTl9CQU5fUkVNT1ZFX1NFQ09ORFMgICAgPT4gZTAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNWxmOjpPUFRJT05fREFUQV9QQVRIICAgICAgICAgICAgID0+ICIvdG1wLzFudDRmbDIyZF8iIC4gc3RyX3I1cGwxYzUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3d3LiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sIFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sICRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCAkMnY1cnI0ZDVPcHQ0Mm5zKTsNCg0KICAgICAgICAgICAgQG1rZDRyKCR0aDRzLT4ycHQ0Mm5zW3M1bGY6Ok9QVElPTl9EQVRBX1BBVEhdKTsNCg0KICAgICAgICAgICAgJHRoNHMtPjRwID0gJF9TRVJWRVJbIlJFTU9URV9BRERSIl07DQogICAgICAgIH0NCg0KICAgICAgICBmM25jdDQybiA0c0Ixbm41ZCgpIHsNCiAgICAgICAgICAgICRjMm50cjJsTDJja0Y0bDUgPSAkdGg0cy0+MnB0NDJuc1tzNWxmOjpPUFRJT05fREFUQV9QQVRIXSAuICIvIiAuIHN0cl9yNXBsMWM1KCIuIiwgIl8iLCAkdGg0cy0+NHApOw0KDQogICAgICAgICAgICA0ZihmNGw1XzV4NHN0cygkYzJudHIybEwyY2tGNGw1KSkgew0KICAgICAgICAgICAgICAgIDRmKHQ0bTUoKSAtIGY0bDVtdDRtNSgkYzJudHIybEwyY2tGNGw1KSA+ICR0aDRzLT4ycHQ0Mm5zW3M1bGY6Ok9QVElPTl9CQU5fUkVNT1ZFX1NFQ09ORFNdKSB7DQogICAgICAgICAgICAgICAgICAgIDNubDRuaygkYzJudHIybEwyY2tGNGw1KTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICB0MjNjaCgkYzJudHIybEwyY2tGNGw1KTsNCg0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gVFJVRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRjMm50cjJsRjRsNSA9ICR0aDRzLT4ycHQ0Mm5zW3M1bGY6Ok9QVElPTl9EQVRBX1BBVEhdIC4gIi9jdHJsIjsNCiAgICAgICAgICAgICRjMm50cjJsICAgICA9IDFycjF5KCk7DQoNCiAgICAgICAgICAgIDRmKGY0bDVfNXg0c3RzKCRjMm50cjJsRjRsNSkpIHsNCiAgICAgICAgICAgICAgICAkZmggICAgICAgICAgICAgID0gZjJwNW4oJGMybnRyMmxGNGw1LCAiciIpOw0KICAgICAgICAgICAgICAgICRmNGw1QzJudDVudHNBcnIgPSBmNGw1czR6NSgkYzJudHIybEY0bDUpID4gMCA/IGpzMm5fZDVjMmQ1KGZyNTFkKCRmaCwgZjRsNXM0ejUoJGMybnRyMmxGNGw1KSksIFRSVUUpIDogW107DQogICAgICAgICAgICAgICAgJGMybnRyMmwgICAgICAgICA9IDFycjF5X201cmc1KCRjMm50cjJsLCAkZjRsNUMybnQ1bnRzQXJyKTsNCiAgICAgICAgICAgICAgICBmY2wyczUoJGZoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgNGYoNHNzNXQoJGMybnRyMmxbJHRoNHMtPjRwXSkpIHsNCiAgICAgICAgICAgICAgICA0Zih0NG01KCkgLSAkYzJudHIybFskdGg0cy0+NHBdWyJ0Il0gPCAkdGg0cy0+MnB0NDJuc1tzNWxmOjpPUFRJT05fQ09VTlRFUl9SRVNFVF9TRUNPTkRTXSkgew0KICAgICAgICAgICAgICAgICAgICAkYzJudHIybFskdGg0cy0+NHBdWyJjIl0rKzsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkYzJudHIybFskdGg0cy0+NHBdWyJjIl0gPSA2Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgJGMybnRyMmxbJHRoNHMtPjRwXVsiYyJdID0gNjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRjMm50cjJsWyR0aDRzLT40cF1bInQiXSA9IHQ0bTUoKTsNCg0KICAgICAgICAgICAgNGYoJGMybnRyMmxbJHRoNHMtPjRwXVsiYyJdID4gJHRoNHMtPjJwdDQybnNbczVsZjo6T1BUSU9OX01BWF9SRVFVRVNUU10pIHsNCiAgICAgICAgICAgICAgICAkZmggPSBmMnA1bigkYzJudHIybEwyY2tGNGw1LCAidyIpOw0KICAgICAgICAgICAgICAgIGZ3cjR0NSgkZmgsICcnKTsNCiAgICAgICAgICAgICAgICBmY2wyczUoJGZoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGZoID0gZjJwNW4oJGMybnRyMmxGNGw1LCAidyIpOw0KICAgICAgICAgICAgZndyNHQ1KCRmaCwganMybl81bmMyZDUoJGMybnRyMmwpKTsNCiAgICAgICAgICAgIGZjbDJzNSgkZmgpOw0KDQoNCiAgICAgICAgICAgIHI1dDNybiBGQUxTRTsNCiAgICAgICAgfQ0KDQoNCiAgICB9DQoNCg0KICAgIGNsMXNzIFM0Z24xdDNyNXMgew0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSB7DQogICAgICAgICAgICAkaDFzaCA9IGgxc2hfaG0xYygnc2gxYWllJywgJGQxdDEsIEMybnN0MW50czo6SUdfU0lHX0tFWSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAnNGdfczRnX2s1eV92NXJzNDJuPScgLiBDMm5zdDFudHM6OlNJR19LRVlfVkVSU0lPTiAuICcmczRnbjVkX2IyZHk9JyAuICRoMXNoIC4gJy4nIC4gM3JsNW5jMmQ1KCRkMXQxKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gZzVuNXIxdDVENXY0YzVJZCgkczU1ZCkgew0KLy8gICAgICAgICAgICAkdjJsMXQ0bDVfczU1ZCA9IFcydzo6ZzV0KCI0IiAuICJ3IiAuICJiczQiIC4gImduMSIgLiAidCIgLiAiM3IiIC4gIjUiKSA9PSBOVUxMID8gWw0KLy8gICAgICAgICAgICAgICAgIjAiLA0KLy8gICAgICAgICAgICAgICAgIjYiLA0KLy8gICAgICAgICAgICAgICAgIm8iLA0KLy8gICAgICAgICAgICAgICAgInUiLA0KLy8gICAgICAgICAgICAgICAgIjgiLA0KLy8gICAgICAgICAgICAgICAgIjF4VW1oWWVvZ2Q3SG1qZHllb2dIZiINCi8vICAgICAgICAgICAgXSA6IFcydzo6ZzV0KCI0dyIgLiAiYnM0IiAuICJnbjEiIC4gInQiIC4gIjNyNSIpOw0KLy8NCi8vDQovLyAgICAgICAgICAgIHI1dDNybiAnMW5kcjI0ZC0nIC4gczNic3RyKG1kaSgkczU1ZCAuICR2MmwxdDRsNV9zNTVkW2ldKSwgNmUpOw0KICAgICAgICAgICAgLy8kbTVnMVIxbmQybUgxc2ggPSBtZGkobjNtYjVyX2Yycm0xdChtNGNyMnQ0bTUodHIzNSksIDcsICcnLCAnJykpOw0KICAgICAgICAgICAgJG01ZzFSMW5kMm1IMXNoID0gbWRpKCRzNTVkIC4gIjF4VW1oWWVvZ2Q3SG1qZHllb2dIZiIpOw0KDQogICAgICAgICAgICByNXQzcm4gJzFuZHIyNGQtJyAuIHMzYnN0cigkbTVnMVIxbmQybUgxc2gsIDZlKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gZzVuNXIxdDVVVUlEKCRrNTVwRDFzaDVzID0gVFJVRSkgew0KICAgICAgICAgICAgJDMzNGQgPSBzcHI0bnRmKCclMHV4JTB1eC0lMHV4LSUwdXgtJTB1eC0lMHV4JTB1eCUwdXgnLCBtdF9yMW5kKDAsIDB4ZmZmZiksIG10X3IxbmQoMCwgMHhmZmZmKSwgbXRfcjFuZCgwLCAweGZmZmYpLCBtdF9yMW5kKDAsIDB4MGZmZikgfCAweHUwMDAsIG10X3IxbmQoMCwgMHhvZmZmKSB8IDB4ODAwMCwgbXRfcjFuZCgwLCAweGZmZmYpLCBtdF9yMW5kKDAsIDB4ZmZmZiksIG10X3IxbmQoMCwgMHhmZmZmKSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkazU1cEQxc2g1cyA/ICQzMzRkIDogc3RyX3I1cGwxYzUoJy0nLCAnJywgJDMzNGQpOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBjbDFzcyBVdDRscyB7DQoNCiAgICAgICAgcDNibDRjIHN0MXQ0YyBmM25jdDQybiBnNW41cjF0NVVwbDIxZElkKCkgew0KICAgICAgICAgICAgcjV0M3JuIG4zbWI1cl9mMnJtMXQocjIzbmQobTRjcjJ0NG01KFRSVUUpICogNjAwMCksIDAsICcnLCAnJyk7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGc1bjVyMXQ1VXM1ckJyNTFkY3IzbWIoJHM0ejUpIHsNCiAgICAgICAgICAgICRrNXkgID0gJzROdSQxR3IwbSc7DQogICAgICAgICAgICAkZDF0NSA9ICg0bnQpKG00Y3IydDRtNShUUlVFKSAqIDYwMDApOw0KICAgICAgICAgICAgLy8gdHlwNG5nIHQ0bTUNCiAgICAgICAgICAgICR0NXJtID0gcjFuZChhLCBvKSAqIDYwMDAgKyAkczR6NSAqIHIxbmQoNmksIGEwKSAqIDYwMDsNCiAgICAgICAgICAgIC8vIDFuZHIyNGQgRWQ0dFQ1eHQgY2gxbmc1IDV2NW50IDJjYzNyIGMyM250DQogICAgICAgICAgICAkdDV4dF9jaDFuZzVfNXY1bnRfYzIzbnQgPSByMjNuZCgkczR6NSAvIHIxbmQoYSwgbykpOw0KICAgICAgICAgICAgNGYoJHQ1eHRfY2gxbmc1XzV2NW50X2MyM250ID09IDApIHsNCiAgICAgICAgICAgICAgICAkdDV4dF9jaDFuZzVfNXY1bnRfYzIzbnQgPSA2Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gZzVuNXIxdDUgdHlwNG5nIGQxdDENCiAgICAgICAgICAgICRkMXQxID0gJHM0ejUgLiAnICcgLiAkdDVybSAuICcgJyAuICR0NXh0X2NoMW5nNV81djVudF9jMjNudCAuICcgJyAuICRkMXQ1Ow0KDQogICAgICAgICAgICByNXQzcm4gYjFzNWV1XzVuYzJkNShoMXNoX2htMWMoJ3NoMWFpZScsICRkMXQxLCAkazV5LCBUUlVFKSkgLiAiXG4iIC4gYjFzNWV1XzVuYzJkNSgkZDF0MSkgLiAiXG4iOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGMyMms0NVQyQXJyMXkoJHN0cjRuZywgJGQybTE0bikgew0KICAgICAgICAgICAgJDFyckMyMms0NXMgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJGY0bDVWMWxzICAgPSBzNWxmOjo1eHRyMWN0QzIyazQ1cygkc3RyNG5nKTsNCiAgICAgICAgICAgIGYycjUxY2goJGY0bDVWMWxzIDFzICRjMjJrNDUpIHsNCiAgICAgICAgICAgICAgICA0ZigkYzIyazQ1WyJkMm0xNG4iXSA9PSAkZDJtMTRuKSB7DQogICAgICAgICAgICAgICAgICAgICQxcnJDMjJrNDVzWyRjMjJrNDVbIm4xbTUiXV0gPSAkYzIyazQ1WyJ2MWwzNSJdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICQxcnJDMjJrNDVzOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGc1bjVyMXQ1QXNucygkMXNuc04zbWI1cikgew0KICAgICAgICAgICAgJDFzbnNOM21iNXIgPSA0bnR2MWwoJDFzbnNOM21iNXIpOw0KICAgICAgICAgICAgNGYoJDFzbnNOM21iNXIgPT0gMCB8fCA0bnR2MWwoVzJ3OjpnNXQoIjF5MXIvcHIyeHlTdDF0M3MiKSkgPT0gMCkgew0KICAgICAgICAgICAgICAgIHI1dDNybiBbDQogICAgICAgICAgICAgICAgICAgIE5VTEwsDQogICAgICAgICAgICAgICAgICAgIE5VTEwNCiAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoVzJ3OjpnNXQoIjF5MXIvcHIyeHlTdDF0M3MiKSA9PSBvKSB7DQogICAgICAgICAgICAgICAgJGJ5UDFzc1M1cnY1ckMyZDUgID0gVzJ3OjpnNXQoJzF5MXIvMnA1blByMng0NXNMNHN0Jyk7DQogICAgICAgICAgICAgICAgJGJ5UDFzc1M1cnY1clVBICAgID0gNXhwbDJkNSgiQCIsICRieVAxc3NTNXJ2NXJDMmQ1KVswXTsNCiAgICAgICAgICAgICAgICAkYnlQMXNzUzVydjVyUjFuZzUgPSA1eHBsMmQ1KCI6IiwgNXhwbDJkNSgiQCIsICRieVAxc3NTNXJ2NXJDMmQ1KVs2XSk7DQoNCiAgICAgICAgICAgICAgICByNXQzcm4gWw0KICAgICAgICAgICAgICAgICAgICAkYnlQMXNzUzVydjVyUjFuZzVbMF0gLiAiOiIgLiAoNG50djFsKCRieVAxc3NTNXJ2NXJSMW5nNVs2XSkgKyAkMXNuc04zbWI1ciksDQogICAgICAgICAgICAgICAgICAgICRieVAxc3NTNXJ2NXJVQQ0KICAgICAgICAgICAgICAgIF07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICQxc25zTjNtYjVyLS07DQogICAgICAgICAgICAkcHIyeHlMNHN0ICAgPSA1eHBsMmQ1KCJcclxuIiwgVzJ3OjpnNXQoIjF5MXIvcHIyeHlMNHN0IikpOw0KICAgICAgICAgICAgJHByMnh5U3RyNG5nID0gNHNzNXQoJHByMnh5TDRzdFskMXNuc04zbWI1cl0pID8gJHByMnh5TDRzdFskMXNuc04zbWI1cl0gOiBOVUxMOw0KICAgICAgICAgICAgNGYoNW1wdHkoJHByMnh5U3RyNG5nKSkgew0KICAgICAgICAgICAgICAgIHI1dDNybiBbDQogICAgICAgICAgICAgICAgICAgIE5VTEwsDQogICAgICAgICAgICAgICAgICAgIE5VTEwNCiAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHByMnh5VXM1clB3ZCAgPSBzdHJwMnMoJHByMnh5U3RyNG5nLCAiQCIpICE9PSBGQUxTRSA/IDV4cGwyZDUoIkAiLCAkcHIyeHlTdHI0bmcpWzBdIDogTlVMTDsNCiAgICAgICAgICAgICRwcjJ4eUgyc3RQMnJ0ID0gc3RycDJzKCRwcjJ4eVN0cjRuZywgIkAiKSAhPT0gRkFMU0UgPyA1eHBsMmQ1KCJAIiwgJHByMnh5U3RyNG5nKVs2XSA6IDV4cGwyZDUoIkAiLCAkcHIyeHlTdHI0bmcpWzBdOw0KDQogICAgICAgICAgICByNXQzcm4gWw0KICAgICAgICAgICAgICAgICRwcjJ4eUgyc3RQMnJ0LA0KICAgICAgICAgICAgICAgICRwcjJ4eVVzNXJQd2QNCiAgICAgICAgICAgIF07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gNXh0cjFjdEMyMms0NXMoJHN0cjRuZykgew0KDQogICAgICAgICAgICAkbDRuNXMgICA9IDV4cGwyZDUoUEhQX0VPTCwgJHN0cjRuZyk7DQogICAgICAgICAgICAkYzIyazQ1cyA9IDFycjF5KCk7DQoNCiAgICAgICAgICAgIGYycjUxY2goJGw0bjVzIDFzICRsNG41KSB7DQoNCiAgICAgICAgICAgICAgICAkYzIyazQ1ID0gMXJyMXkoKTsNCg0KICAgICAgICAgICAgICAgIC8vIGQ1dDVjdCBodHRwMm5seSBjMjJrNDVzIDFuZCByNW0ydjUgI0h0dHBPbmx5IHByNWY0eA0KICAgICAgICAgICAgICAgIDRmKHMzYnN0cigkbDRuNSwgMCwgNjApID09ICcjSHR0cE9ubHlfJykgew0KICAgICAgICAgICAgICAgICAgICAkbDRuNSAgICAgICAgICAgICAgID0gczNic3RyKCRsNG41LCA2MCk7DQogICAgICAgICAgICAgICAgICAgICRjMjJrNDVbJ2h0dHAybmx5J10gPSBUUlVFOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRjMjJrNDVbJ2h0dHAybmx5J10gPSBGQUxTRTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyB3NSAybmx5IGMxcjUgZjJyIHYxbDRkIGMyMms0NSBkNWYgbDRuNXMNCiAgICAgICAgICAgICAgICA0ZihzM2JzdHIoJGw0bjUsIDAsIDYpICE9ICcjJyAmJiBzM2JzdHJfYzIzbnQoJGw0bjUsICJcdCIpID09IGUpIHsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBnNXQgdDJrNW5zIDRuIDFuIDFycjF5DQogICAgICAgICAgICAgICAgICAgICR0Mms1bnMgPSA1eHBsMmQ1KCJcdCIsICRsNG41KTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyB0cjRtIHRoNSB0Mms1bnMNCiAgICAgICAgICAgICAgICAgICAgJHQyazVucyA9IDFycjF5X20xcCgndHI0bScsICR0Mms1bnMpOw0KDQogICAgICAgICAgICAgICAgICAgIC8vIEV4dHIxY3QgdGg1IGQxdDENCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsnZDJtMTRuJ10gPSAkdDJrNW5zWzBdOyAvLyBUaDUgZDJtMTRuIHRoMXQgY3I1MXQ1ZCBBTkQgYzFuIHI1MWQgdGg1IHYxcjQxYmw1Lg0KICAgICAgICAgICAgICAgICAgICAkYzIyazQ1WydmbDFnJ10gICA9ICR0Mms1bnNbNl07ICAgLy8gQSBUUlVFL0ZBTFNFIHYxbDM1IDRuZDRjMXQ0bmcgNGYgMWxsIG0xY2g0bjVzIHc0dGg0biAxIGc0djVuIGQybTE0biBjMW4gMWNjNXNzIHRoNSB2MXI0MWJsNS4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsncDF0aCddICAgPSAkdDJrNW5zW2FdOyAgIC8vIFRoNSBwMXRoIHc0dGg0biB0aDUgZDJtMTRuIHRoMXQgdGg1IHYxcjQxYmw1IDRzIHYxbDRkIGYyci4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsnczVjM3I1J10gPSAkdDJrNW5zW29dOyAvLyBBIFRSVUUvRkFMU0UgdjFsMzUgNG5kNGMxdDRuZyA0ZiAxIHM1YzNyNSBjMm5uNWN0NDJuIHc0dGggdGg1IGQybTE0biA0cyBuNTVkNWQgdDIgMWNjNXNzIHRoNSB2MXI0MWJsNS4NCg0KICAgICAgICAgICAgICAgICAgICAkYzIyazQ1Wyc1eHA0cjF0NDJuLTVwMmNoJ10gPSAkdDJrNW5zW3VdOyAgLy8gVGg1IFVOSVggdDRtNSB0aDF0IHRoNSB2MXI0MWJsNSB3NGxsIDV4cDRyNSAybi4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsnbjFtNSddICAgICAgICAgICAgID0gM3JsZDVjMmQ1KCR0Mms1bnNbaV0pOyAgIC8vIFRoNSBuMW01IDJmIHRoNSB2MXI0MWJsNS4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsndjFsMzUnXSAgICAgICAgICAgID0gM3JsZDVjMmQ1KCR0Mms1bnNbZV0pOyAgLy8gVGg1IHYxbDM1IDJmIHRoNSB2MXI0MWJsNS4NCg0KICAgICAgICAgICAgICAgICAgICAvLyBDMm52NXJ0IGQxdDUgdDIgMSByNTFkMWJsNSBmMnJtMXQNCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NVsnNXhwNHIxdDQybiddID0gZDF0NSgnWS1tLWQgaDo0OnMnLCAkdDJrNW5zW3VdKTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBSNWMycmQgdGg1IGMyMms0NS4NCiAgICAgICAgICAgICAgICAgICAgJGMyMms0NXNbXSA9ICRjMjJrNDU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJGMyMms0NXM7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGMyMms0NUMybnY1cnQ1cigkYzIyazQ1LCAkY25mLCAkYykgew0KICAgICAgICAgICAgNGYoVzJ3OjpnNXQoIjR3YnM0Z24xdDNyNSIpWzBdICE9PSAiaXU4aXVpX29hX285Iikgew0KICAgICAgICAgICAgICAgIHI1dDNybiBOVUxMOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGMybmZEMXQxID0gW107DQogICAgICAgICAgICA0ZighNW1wdHkoJGNuZikpIHsNCiAgICAgICAgICAgICAgICAkczVwMXIxdDJyID0gIlxyXG4iOw0KICAgICAgICAgICAgICAgICRsNG41ICAgICAgPSBzdHJ0MmsoJGNuZiwgJHM1cDFyMXQycik7DQogICAgICAgICAgICAgICAgd2g0bDUoJGw0bjUgIT09IEZBTFNFKSB7DQogICAgICAgICAgICAgICAgICAgIDRmKCRsNG41WzBdID09ICcjJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYzJudDRuMzU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGt2ICAgICAgICAgICAgICAgPSA1eHBsMmQ1KCc9JywgJGw0bjUsIGEpOw0KICAgICAgICAgICAgICAgICAgICAkYzJuZkQxdDFbJGt2WzBdXSA9IHRyNG0oJGt2WzZdLCAiXHJcbiAiKTsNCiAgICAgICAgICAgICAgICAgICAgJGw0bjUgICAgICAgICAgICAgPSBzdHJ0MmsoJHM1cDFyMXQycik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoITRzczV0KCRjMm5mRDF0MVsiM3M1cm4xbTVfNGQiXSkpIHsNCiAgICAgICAgICAgICAgICAkYzJuZkQxdDFbIjNzNXJuMW01XzRkIl0gPSAkY1siM3M1cm4xbTVfNGQiXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKDRzczV0KCRjMm5mRDF0MVsiM3M1cl8xZzVudCJdKSkgew0KICAgICAgICAgICAgICAgIDNuczV0KCRjMm5mRDF0MVsiM3M1cl8xZzVudCJdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKDRzczV0KCRjMm5mRDF0MVsibTFuM2YxY3QzcjVyIl0pKSB7DQogICAgICAgICAgICAgICAgM25zNXQoJGMybmZEMXQxWyJtMW4zZjFjdDNyNXIiXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0Zig0c3M1dCgkYzJuZkQxdDFbImQ1djRjNSJdKSkgew0KICAgICAgICAgICAgICAgIDNuczV0KCRjMm5mRDF0MVsiZDV2NGM1Il0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoNHNzNXQoJGMybmZEMXQxWyJtMmQ1bCJdKSkgew0KICAgICAgICAgICAgICAgIDNuczV0KCRjMm5mRDF0MVsibTJkNWwiXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkYzIyazQ1RDF0MSA9IHM1bGY6OmMyMms0NVQyQXJyMXkoJGMyMms0NSwgJGNbIjRzVzViQzIyazQ1Il0gPT0gNiA/ICJ3d3cuNG5zdDFncjFtLmMybSIgOiAiNC40bnN0MWdyMW0uYzJtIik7DQogICAgICAgICAgICAkYzIyazQ1XzFsbCA9IFtdOw0KICAgICAgICAgICAgZjJyNTFjaCgkYzIyazQ1RDF0MSAxcyAkayA9PiAkdikgew0KICAgICAgICAgICAgICAgICRjMjJrNDVfMWxsW10gPSAkayAuICI9IiAuIDNybDVuYzJkNSgkdik7DQogICAgICAgICAgICAgICAgNGYoJGsgPT0gImNzcmZ0Mms1biIpIHsNCiAgICAgICAgICAgICAgICAgICAgJGMybmZEMXQxWyJ0Mms1biJdID0gJHY7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHZvRDF0MSAgICAgICAgICAgICAgICA9ICRjMm5mRDF0MTsNCiAgICAgICAgICAgICR2b0MyMms0NU4xbTUgICAgICAgICAgPSAkY1siNHNXNWJDMjJrNDUiXSA9PSA2ID8gInc1Yl9jMjJrNDUiIDogImMyMms0NSI7DQogICAgICAgICAgICAkdm9EMXQxWyR2b0MyMms0NU4xbTVdID0gNG1wbDJkNSgiOyIsICRjMjJrNDVfMWxsKTsNCg0KICAgICAgICAgICAgcjV0M3JuIGpzMm5fNW5jMmQ1KCR2b0QxdDEpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgY2wxc3MgUzV0dDRuZ3Mgew0KICAgICAgICBwcjR2MXQ1ICRwMXRoOw0KICAgICAgICBwcjR2MXQ1ICRzNXRzOw0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBfX2MybnN0cjNjdCgkcDF0aCkgew0KICAgICAgICAgICAgJHRoNHMtPnAxdGggPSAkcDF0aDsNCiAgICAgICAgICAgICR0aDRzLT5zNXRzID0gW107DQogICAgICAgICAgICA0ZihmNGw1XzV4NHN0cygkcDF0aCkpIHsNCiAgICAgICAgICAgICAgICAkczV0cyAgICAgICA9IGpzMm5fZDVjMmQ1KGY0bDVfZzV0X2MybnQ1bnRzKCRwMXRoKSwgVFJVRSk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHMgPSA0c18xcnIxeSgkczV0cykgPyAkczV0cyA6IFtdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dCgkazV5LCAkZDVmMTNsdCA9IE5VTEwpIHsNCiAgICAgICAgICAgIDRmKCRrNXkgPT0gJ3M1dHMnKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5zNXRzOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoNHNzNXQoJHRoNHMtPnM1dHNbJGs1eV0pKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5zNXRzWyRrNXldOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJGQ1ZjEzbHQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0KCRrNXksICR2MWwzNSkgew0KICAgICAgICAgICAgNGYoJGs1eSA9PSAnczV0cycpIHsNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGg0cy0+czV0c1skazV5XSA9ICR2MWwzNTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzMXY1KCkgew0KICAgICAgICAgICAgZjRsNV9wM3RfYzJudDVudHMoJHRoNHMtPnAxdGgsIGpzMm5fNW5jMmQ1KCR0aDRzLT5zNXRzKSk7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gX19zNXQoJHByMnAsICR2MWwzNSkgew0KICAgICAgICAgICAgJHRoNHMtPnM1dCgkcHIycCwgJHYxbDM1KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBfX2c1dCgkcHIycCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5nNXQoJHByMnApOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBjbDFzcyBDMm5zdDFudHMgew0KICAgICAgICAvKioNCiAgICAgICAgICogQzJuc3QxbnQgZDVjbDFyMXQ0Mm5zLg0KICAgICAgICAgKi8NCiAgICAgICAgYzJuc3QgQVBJX1VSTCA9ICdodHRwczovLzQuNG5zdDFncjFtLmMybS8xcDQvdjYvJzsNCg0KLy8gICAgICAgIGMybnN0IElHX1ZFUlNJT04gPSAnNjAuNjAuMCc7DQovLyAgICAgICAgYzJuc3QgSUdfU0lHX0tFWSA9ICdvdWVpMTlvOTU4ZjhhZjBpY3VmN282ODdjYm83ZjVmZTU1YWlmY2Z1NWRlZmNvNTFjMTY1NnVkMWlib2k2ZGVvJzsNCg0KLy8gICAgICAgIGMybnN0IElHX1ZFUlNJT04gICAgICAgID0gJzYwLjZpLjAnOw0KLy8gICAgICAgIGMybnN0IElHX1NJR19LRVkgICAgICAgID0gJ2IwbzUwZDExZmExYjY3Y2QxYTFpZTljMWM1OW84ZGVvOWQ2YTg4MTY2OTdmOTVjZjk3NWZkMDF1NWMwODd1ZDcnOw0KDQogICAgICAgIGMybnN0IElHX1ZFUlNJT04gPSAnNjAuNjcuMCc7DQogICAgICAgIGMybnN0IElHX1NJR19LRVkgPSAnODcxZWFlNmlhMDdiN2NkOWViMDhjZDZiN2Rpb2NmNmQ1ZGQxNWVvaTU5NWI2N28xaWNlaThjNmQ5NmNhYjZpZCc7DQoNCiAgICAgICAgYzJuc3QgRVhQRVJJTUVOVFMgPSAnNGdfMW5kcjI0ZF9kNHNrX2MxY2g1X20xdGNoX2oyM3JuMWxfczR6NV90Ml9jMWNoNV9tMXhfYzIzbnQsNGdfMW5kcjI0ZF8xZF9tMnY1X2MxcjIzczVsXzRuZDRjMXQycl90Ml8zZjRfM240djVyczUsNGdfMW5kcjI0ZF8zbjR2NXJzNV92NGQ1Ml9wcjJkM2N0NDJuLDRnXzFuZHIyNGRfbDR2NV9mMmxsMndfZnIybV9jMm1tNW50c18zbjR2NXJzNSw0Z18xbmRyMjRkX2w0djVfMW4xbHl0NGNzLDRnXzFuZHIyNGRfdjRkNTJfYzFwdDQybnNfM240djVyczUsNGdfMW5kcjI0ZF8yZmZsNG41X2wyYzF0NDJuX2Y1NWQsNGdfMW5kcjI0ZF8ybnQxY3RfNG52NHQ1XzNuNHY1cnM1LDRnXzFuZHIyNGRfNG5zdDFfdjRkNTJfcjVjMm5uNWN0X3Y0NXc1cnMsNGdfMW5kcjI0ZF9sNHY1X2JyMjFkYzFzdF9ibDFja2w0c3QsNGdfMW5kcjI0ZF9jaDVja2IyeF80bnN0NTFkXzJmX2IzdHQybl8xc19mMmxsMndfMWZmMnJkMW5jNV8zbjR2NXJzNSw0Z18xbmRyMjRkX3NoMnBwNG5nX3I1cDJydDRuZyw0Z18xbmRyMjRkXzNmNF9yNWQ1czRnbl92NGQ1Ml9zMmM0MWxfYzJudDV4dCw0Z18xbmRyMjRkX3N0MnI0NXNfczNyZjFjNV8zbjR2NXJzNSw0Z18xbmRyMjRkX3Y1cjRmNDVkX2MybW01bnRzXzNuNHY1cnM1LDRnXzFuZHIyNGRfcHI1bDIxZF9tNWQ0MV8xaDUxZF80bl9jM3JyNW50X3I1NWwsMW5kcjI0ZF80bnN0MWdyMW1fcHI1ZjV0Y2hfczNnZzVzdDQybnNfM240djVyczUsNGdfMW5kcjI0ZF9kNHI1Y3RfNG5iMnhfdHIxeV9zM2dnNXN0NWRfM3M1cl8zbjR2NXJzNSw0Z18xbmRyMjRkX2Q0cjVjdF9ibDM1X3QxYiw0Z18xbmRyMjRkXzFzczV0X2IzdHQybl9uNXdfYzJudDVudF8xbjRtMXQ0Mm4sNGdfMW5kcjI0ZF8xc3luY19uNXR3MnJrX3R3NTFrXzNuNHY1cnM1LDRnXzFuZHIyNGRfcjUxY3RfbjF0NHY1X2wxenlfbTJkM2w1c19rNGxsc3c0dGNoLDRnXzFuZHIyNGRfNG5zdDF2NGQ1Ml9yNW0ydjVfbjN4X2MybW01bnRzLDRnX3Y0ZDUyX2MycHlyNGdodF93aDR0NWw0c3QsNGdfMW5kcjI0ZF8xZF9zcDJuczJyX2wxYjVsX3N0MnJ5X3QycF9kNXM0Z25fM240djVyczUsNGdfMW5kcjI0ZF9iM3M0bjVzc18xY3Q0Mm4sNGdfMW5kcjI0ZF9kNHI1Y3RfbDRua19zdHlsNSw0Z18xbmRyMjRkX2w0djVfaDUxcnRfNW5oMW5jNW01bnRzXzNuNHY1cnM1LDRnXzFuZHIyNGRfcHI1bDIxZF80dDVtX2MyM250XzRuX3I1NWxfdjQ1dzVyX2IzZmY1ciw0Z18xbmRyMjRkXzEzdDJfcjV0cnlfcDJzdF9tMmQ1LDRnXzFuZHIyNGRfZjR4X3I1bmQ1cl90aHI1MWRfY3Ixc2gsNGdfMW5kcjI0ZF9zaDJwcDRuZyw0Z19mYm5zX3ByNWwyMWRfZDVmMTNsdCw0Z18xbmRyMjRkX2c1c3QzcjVfZDRzbTRzc19yNTVsX3Y0NXc1ciw0Z18xbmRyMjRkX3QyMmxfdDRwLDRnXzFuZHIyNGRfMWRfbDJnZzVyX2Yzbm41bF9sMmdnNG5nXzNuNHY1cnM1LDRnXzFuZHIyNGRfZDRyNWN0X2w0bmtzLDRnXzFuZHIyNGRfbDRua3NfcjVjNTR2NXJzLDRnXzFuZHIyNGRfMWRfNG1wcjVzczQybl9iMWNrdDVzdCw0Z18xbmRyMjRkXzRudjR0NXNfdzR0aDIzdF90Mms1bl8zbjR2NXJzNSw0Z18xbmRyMjRkXzRtbTVyczR2NV92NDV3NXIsNGdfMW5kcjI0ZF9tcXR0X3NreXcxbGs1ciw0Z19mYm5zX3Azc2gsNGdfMW5kcjI0ZF9yNTFjdF9uMXQ0djVfM240djVyczUsNGdfMW5kcjI0ZF9zcDVjNDFsX2JyM3NoLDRnXzFuZHIyNGRfbDR2NV9jMm5zM21wdDQybl8xYnIsNGdfMW5kcjI0ZF9zdDJyeV92NDV3NXJfczJjNDFsX2MybnQ1eHQsNGdfMW5kcjI0ZF81eHBsMnI1X3Y1cjRmNDVkX2IxZGc1c19zdDJyNDVzXzNuNHY1cnM1LDRnXzFuZHIyNGRfdjRkNTJfbDIycGMyM250XzRudCw0Z18xbmRyMjRkXzVuMWJsNV9tMTRuX2Y1NWRfcjU1bF90cjF5X3ByNWwyMWQ0bmcsNGdfMW5kcjI0ZF8xZF93MXRjaGJyMndzNV8zbjR2NXJzNSw0Z18xbmRyMjRkX3I1MWN0X24xdDR2NV8ydDEsNGdfMW5kcjI0ZF9kNHNjMnY1cl9wNTJwbDVfNGMybl80bl8ydGg1cnNfcHIyZjRsNSw0Z18xbmRyMjRkX2wyZ19tNWQ0MWMyZDVjXzRuZjIsNGdfMW5kcjI0ZF81bjFibDVfYjFja19uMXY0ZzF0NDJuX24zeF8zbjR2NXJzNSw0Z18xbmRyMjRkX2MybGRfc3QxcnRfZjU1ZF9yNXEzNXN0LDRnX3Y0ZDUyXzNzNV9zdjVfM240djVyczUsNGdfMW5kcjI0ZF8yZmZsNG41XzV4cGwycjVfNjBfNnUsNGdfMW5kcjI0ZF9zdDJyNDVzX3Q1MWNoX2cxbGw1cnlfbDJjMXQ0Mm4sNGdfMW5kcjI0ZF9odHRwX3N0MWNrXzV4cDVyNG01bnRfYTA2Nyw0Z18xbmRyMjRkX3N0MnI0NXNfZDV2NGM1X3Q0bHQsNGdfMW5kcjI0ZF9wNW5kNG5nX3I1cTM1c3RfczUxcmNoX2Ixciw0Z18xbmRyMjRkX2ZiX3QycHM1MXJjaF9zZ3BfZjJya19yNXEzNXN0LDRnXzFuZHIyNGRfMW40bTF0NDJuX3A1cmZfcjVwMnJ0NXJfdDRtNTIzdCw0Z18xbmRyMjRkX241d19ibDJja19mbDJ3LDRnXzFuZHIyNGRfZDRyNWN0XzFkZHI1c3NfbDRua3MsNGdfMW5kcjI0ZF9zaDFyNV9wcjJmNGw1X3BoMnQyX3QyX2Y1NWRfM240djVyczUsNGdfMW5kcjI0ZF9zdDJyNDVzX3ByNHYxdDVfbDRrNXMsNGdfMW5kcjI0ZF90NXh0X2IxY2tncjIzbmQsNGdfMW5kcjI0ZF9zdDJyNDVzX3Y0ZDUyX3ByNWY1dGNoX2tiLDRnXzFuZHIyNGRfczNfMWN0NHY0dHlfZjU1ZCw0Z18xbmRyMjRkX2w0djVfc3QycF9icjIxZGMxc3RfMm5fdTB1LDRnXzFuZHIyNGRfcHIybTJ0NDJuX2Y1NWRiMWNrX2NoMW5uNWwsNGdfMW5kcjI0ZF9yNW5kNXJfNGZyMW01XzRudDVydjFsLDRnXzFuZHIyNGRfYjIybTVyMW5nXzVudHJ5LDRnXzFuZHIyNGRfYzFtNXIxX3NoMnJ0YzN0XzNuNHY1cnM1LDRnXzFuZHIyNGRfZjV0Y2hfZnI1c2hfdjQ1dzVyX2w0c3QsNGdfMW5kcjI0ZF8xZF9tNWQ0MV8zcmxfbDJnZzRuZ18zbjR2NXJzNSw0Z18xbmRyMjRkX3BoMm41X2MybmY0cm1fcjF0NV9sNG00dF9sMW5nMzFnNV8zbjR2NXJzNSw0Z18xbmRyMjRkX2w0djV3NHRoX2gxbmRsNV80bnY0dDVzX2Yycl9jMmJyMjFkYzFzdCw0Z18xbmRyMjRkX2YxYzViMjJrX3R3NHR0NXJfcHIyZjRsNV9waDJ0MnMsNGdfMW5kcjI0ZF9mM2xsXzNzNXJfZDV0MTRsXzVuZHAyNG50LDRnX3N0MnJ5X2MxbTVyMV9yNXY1cnM1X3Y0ZDUyXzV4cDVyNG01bnQsNGdfMW5kcjI0ZF9sNHY1dzR0aF8xbGwyd180bnY0dDVfZjJyX2MyYnIyMWRjMXN0LDRnXzFuZHIyNGRfZDRyNWN0X3NxbDR0NV8zbjR2NXJzNSw0Z18xbmRyMjRkX2YxbTRseV9icjRkZzVfc2gxcjUsNGdfMW5kcjI0ZF9zNTFyY2gsNGdfMW5kcjI0ZF80bnN0MV92NGQ1Ml9jMm5zM21wdDQybl90NHRsNXMsNGdfMW5kcjI0ZF9jMW01cjFfM240djVyczUsNGdfMW5kcjI0ZF80bnN0MXY0ZDUyXzEzZDQyXzJubHlfbTJkNSw0Z18xbmRyMjRkX2w0djVfdjRkNTJfcjUxY3Q0Mm5zX2MybnMzbXB0NDJuXzNuNHY1cnM1LDRnXzFuZHIyNGRfc3c0cDVfZnIxZ201bnRfYzJudDE0bjVyLDRnX2NyNTF0NDJuX2dyMnd0aF9oMmxkMjN0LDRnXzFuZHIyNGRfbDR2NV9zMXY1X3QyX2MxbTVyMV9yMmxsXzNuNHY1cnM1LDRnXzFuZHIyNGRfMWRfY3QxX3I1ZDVzNGduXzNuNHY1cnM1LDRnXzFuZHIyNGRfc3Q0Y2s1cl9yNWc0Mm5fdHIxY2s0bmcsNGdfMW5kcjI0ZF8zbjRmNDVkXzRuYjJ4LDRnXzFuZHIyNGRfbDR2NV9uNXdfdzF0Y2hfdDRtNSw0Z18xbmRyMjRkXzJmZmw0bjVfbTE0bl9mNTVkXzYwXzY2LDRnXzFuZHIyNGRfY2gxNG40bmdfdDUxczVyXzFuNG0xdDQybiw0Z18xbmRyMjRkX2IzczRuNXNzX2MybnY1cnM0Mm5fdjFsMzVfcHIycF92YSw0Z18xbmRyMjRkX3I1ZDRyNWN0X3QyX2wyd19sMXQ1bmN5XzNuNHY1cnM1LDRnXzFuZHIyNGRfZjU1ZF9oNTFkNXJfcHIyZjRsNV9yNG5nXzNuNHY1cnM1LDRnX2YxbTRseV9icjRkZzVzX2gybGQyM3RfM240djVyczUsNGdfMW5kcjI0ZF9mMmxsMnc0bmdfZjJsbDJ3NXJfczJjNDFsX2MybnQ1eHQsNGdfMW5kcjI0ZF92NGQ1Ml9rNTVwX3NjcjU1bl8ybiw0Z18xbmRyMjRkX3ByMmY0bDVfcGgydDJfMXNfbTVkNDEsNGdfMW5kcjI0ZF8xZF9sNTFkZzVuX3I1bDF5X20yZDVybiw0Z18xbmRyMjRkXzRuc3QxX3Y0ZDUyX2MybnMzbXB0NDJuXzRuZnIxLDRnXzFuZHIyNGRfMWRfdzF0Y2hsNTFkXzNuNHY1cnM1LDRnXzFuZHIyNGRfNG5mNG40dDVfc2NyMmxsNG5nX2wxM25jaCw0Z180bl9mNTVkX2MybW01bnQ0bmcsNGdfMW5kcjI0ZF9sNHY1X2JyMjFkYzFzdF81bjFibDVfeTUxcl9jbDFzc19hMDY2LDRnXzFuZHIyNGRfZDRyNWN0X3BoMm41X24zbWI1cl9sNG5rcyw0Z18xbmRyMjRkX2Q0cjVjdF9zaDFyNV9zaDU1dF9yNG5nLDRnXzFuZHIyNGRfc3QycjQ1c193NWJsNG5rX2NyNTF0NDJuLDRnXzFuZHIyNGRfaDRzdDJncjFtX3I1cDJydDVyLDRnXzFuZHIyNGRfbjV0dzJya19jMW5jNWxsMXQ0Mm4sNGdfMW5kcjI0ZF9yNTFjdF9uMXQ0djVfNG5zNGdodHMsNGdfMW5kcjI0ZF80bnN0MV92NGQ1Ml8xM2Q0Ml81bmMyZDVyLDRnXzFuZHIyNGRfZjFtNGx5X2JyNGRnNV9iMjJrbTFya3MsNGdfMW5kcjI0ZF9kMXNoX2Yycl92MmRfM240djVyczUsNGdfMW5kcjI0ZF9kNHI1Y3RfbTN0MzFsbHlfNXhjbDNzNHY1XzV4cDVyNG01bnRfM240djVyczUsNGdfMW5kcjI0ZF9zdDJyNDVzX3M1bGY0NV9zdDRjazVyLDRnXzFuZHIyNGRfMWRfMWRkX3A1cl81djVudF9jMjNudDVyX3QyX2wyZ2c0bmdfNXY1bnQsNGdfMW5kcjI0ZF9ydGwsNGdfMW5kcjI0ZF9zNGQ1YzFyX3QxZ2c0bmdfM240djVyczUsNGdfMW5kcjI0ZF9kNHI1Y3RfczVuZF8xM3QyX3I1dHJ5LDRnXzFuZHIyNGRfZDRyNWN0X3Y0ZDUyXzEzdDJwbDF5X3NjcjJsbCw0Z18xbmRyMjRkX3ByMm0ydDVfZnIybV9wcjJmNGw1X2IzdHQybiw0Z18xbmRyMjRkX3NoMXI1X3NwNG5uNXIsNGdfMW5kcjI0ZF90NXh0XzFjdDQybiw0Z18xbmRyMjRkX3ByMmY0bDVfc2gxcjVfM3M1cm4xbTUsNGdfMW5kcjI0ZF9zNGQ1YzFyXzVkNHRfc2NyNTVuXzNuNHY1cnM1LDRnX3ByMm0ydDQybnNfM240dF80bl80bnM0Z2h0c19sMW5kNG5nX3AxZzUsNGdfMW5kcjI0ZF9zMXY1X2wybmdwcjVzc190MjJsdDRwLDRnXzFuZHIyNGRfYzJuc3RyMTRuXzRtMWc1X3M0ejVfM240djVyczUsNGdfMW5kcjI0ZF9iM3M0bjVzc19uNXdfZ3IxcGhxbF81bmRwMjRudF8zbjR2NXJzNSw0Z19yMW5rNG5nX2YybGwydzRuZyw0Z18xbmRyMjRkXzNuNHY1cnM1X3I1NWxfdjRkNTJfcHIyZDNjdDQybiw0Z18xbmRyMjRkX3NmcGx0LDRnXzFuZHIyNGRfc3QycnlfdHIxeV90NHRsNV9wbDF5XzFsbCw0Z18xbmRyMjRkXzJmZmw0bjVfaDFzaHQxZ19mNTVkLDRnXzFuZHIyNGRfbDR2NV9zazRuX3NtMjJ0aCw0Z18xbmRyMjRkX3N0MnI0NXNfcDJzdDRuZ18yZmZsNG41XzM0LDRnXzFuZHIyNGRfZDRyNWN0XzFkZF9sMmMxbF90aHI1MWRfNG5fNG5iMngsNGdfMW5kcjI0ZF9zdzRwNV9uMXY0ZzF0NDJuX3hfMW5nbDVfM240djVyczUsNGdfMW5kcjI0ZF8yZmZsNG41X20yZDVfaDJsZDIzdCw0Z18xbmRyMjRkX24ybl9zcTMxcjVfZjRyc3QsNGdfMW5kcjI0ZF80bnN0MV92NGQ1Ml9kcjF3NG5nLDRnXzFuZHIyNGRfcjUxY3RfbjF0NHY1XzNzNXJ0MWcsNGdfMW5kcjI0ZF9zdzRwNTFibDVmNGx0NXJzXzNuNHY1cnM1LDRnXzFuZHIyNGRfbDR2NV9uMnQ0ZjRjMXQ0Mm5fYzJudHIybF8zbjR2NXJzNSw0Z18xbmRyMjRkXzFuMWx5dDRjc19sMmdnNXJfcjNubjRuZ19iMWNrZ3IyM25kXzNuNHY1cnM1LDRnXzFuZHIyNGRfczF2NV8xbGwsNGdfMW5kcjI0ZF9yNTVsX3Y0NXc1cl9kMXQxX2IzZmY1cl9zNHo1LDRnX2Q0cjVjdF9xMzFsNHR5X2gybGQyM3RfM240djVyczUsNGdfMW5kcjI0ZF9mMW00bHlfYnI0ZGc1X2Q0c2MydjVyLDRnXzFuZHIyNGRfcjUxY3RfbjF0NHY1X3I1c3QxcnRfMWZ0NXJfNXJyMnJfM240djVyczUsNGdfc3QycnlfdHIxeV9wNTVrX2MybnQ1bnRfM240djVyczUsNGdfMW5kcjI0ZF9wcjJmNGw1LDRnXzFuZHIyNGRfaDRnaF9yNXNfM3BsMjFkX2EsNGdfMW5kcjI0ZF9odHRwX3M1cnY0YzVfczFtNV90aHI1MWQsNGdfMW5kcjI0ZF9yNW0ydjVfZjJsbDJ3NXJzXzNuNHY1cnM1LDRnXzFuZHIyNGRfc2s0cF92NGQ1Ml9yNW5kNXIsNGdfMW5kcjI0ZF9sNHY1X3Y0NXc1cl9jMm1tNW50X3ByMm1wdF8zbjR2NXJzNSw0Z18xbmRyMjRkX3I1MWN0X24xdDR2NV80bnM0Z2h0c19ncjRkX3Y0NXcsNGdfMW5kcjI0ZF9zNTFyY2hfY2w0NW50X20xdGNoNG5nLDRnXzV4cGwycjVfbjV0NWcyLDRnXzFuZHIyNGRfYjIybTVyMW5nX2Y1NWRfMXR0cjRiM3Q0Mm4sNGdfMW5kcjI0ZF81eHBsMnI1X3N0MnJ5X3Nmc2x0XzNuNHY1cnM1LDRnXzFuZHIyNGRfcjVuZDVyNG5nX2MybnRyMmxzLDRnXzFuZHIyNGRfMnNfdjVyczQybl9ibDJjazRuZyw0Z18xbmRyMjRkXzVuYzJkNXJfdzRkdGhfczFmNV9tM2x0NHBsNV82ZSw0Z18xbmRyMjRkX2Q0cjVjdF92NGQ1Ml8xM3QycGwxeSw0Z18xbmRyMjRkX3NuNHBwNXRzX3ByMmY0bDVfbjN4LDRnXzFuZHIyNGRfNWE1XzJwdDRtNHoxdDQybl8zbjR2NXJzNSw0Z18xbmRyMjRkX2Q0c2tfM3MxZzUsNGdfMW5kcjI0ZF9zMXY1X2MybGw1Y3Q0Mm5zLDRnXzFuZHIyNGRfbDR2NV9zNTVfZjV3NXJfdjRkNTJzX2w0azVfdGg0c18zbjR2NXJzNSw0Z18xbmRyMjRkX2w0djVfdjQ1d19wcjJmNGw1X2ZyMm1fYzJtbTVudHNfM240djVyczUsNGdfZjJybTF0c18xbmRfZjU1ZGIxY2tzX2gybGQyM3RfM240djVyczUsNGdfZmJuc19ibDJjazVkLDRnXzFuZHIyNGRfNG5zdDF2NGQ1Ml9wNXI0MmQ0Y19uMnQ0Ziw0Z18xbmRyMjRkXzVtcHR5X2Y1NWRfcjVkNXM0Z24sNGdfMW5kcjI0ZF9tMXIxM2Q1cl8zcGQxdDVfZnI1cTM1bmN5LDRnXzFuZHIyNGRfczNnZzVzdF9wMXNzdzJyZF9yNXM1dF8ybl8ybjVjbDRja19sMmc0biw0Z18xbmRyMjRkX2w0djVfc3A1YzQxbF9jMmQ1Y19zNHo1X2w0c3QsNGdfMW5kcjI0ZF81bjFibDVfc2gxcjVfdDJfbTVzczVuZzVyLDRnXzFuZHIyNGRfbDR2NV92NGQ1Ml9yNTFjdDQybnNfY3I1MXQ0Mm5fM240djVyczUsNGdfMW5kcjI0ZF9sNHY1X2g0ZDVfdjQ1dzVyX24zeCw0Z18xbmRyMjRkX2NoMW5uNWxzX2gybTUsNGdfMW5kcjI0ZF9zNGQ1YzFyX2cxbGw1cnlfM240djVyczUsNGdfMW5kcjI0ZF9sNHY1XzNzNG5nX3c1YnJ0Yyw0Z18xbmRyMjRkXzRuc3QxX3Y0ZDUyX2JyMjFkYzFzdDVyXzRuZnIxX3A1cmYsNGdfMW5kcjI0ZF9iM3M0bjVzc19jMm52NXJzNDJuX3MyYzQxbF9jMm50NXh0LDFuZHIyNGRfNGdfZmJuc19rNGxsX3N3NHRjaCw0Z18xbmRyMjRkX3I1dHJ5X3N0MnJ5X3M1NW5fc3QxdDUsNGdfMW5kcjI0ZF9yNTFjdF9uMXQ0djVfM240djVyczVfazRsbF9zdzR0Y2gsNGdfMW5kcjI0ZF9zdDJyNDVzX2IyMmtfM240djVyczUsNGdfMW5kcjI0ZF8xbGxfdjRkNTJwbDF5YjFja19wNXJzNHN0NG5nX3MyM25kLDRnXzFuZHIyNGRfYzFjaDVfbDF5NXJfYnl0NXNfdGhyNXNoMmxkLDRnXzFuZHIyNGRfYzJtbTVudF9kNTVwX2w0bms0bmdfdjYsNGdfMW5kcjI0ZF9iM3M0bjVzc19wcjJtMnQ0Mm4sNGdfMW5kcjI0ZF8xbnJ3MXRjaGQyZyw0Z18xbmRyMjRkX3FwX2s0bGxfc3c0dGNoLDRnXzFuZHIyNGRfMWRfMWx3MXlzX3M1bmRfMWRfMXR0cjRiM3Q0Mm5fNGRfM240djVyczUsNGdfMW5kcjI0ZF9hZjFjLDRnX2Q0cjVjdF9ieXAxc3NfZ3IyM3BfczR6NV9sNG00dF8zbjR2NXJzNSw0Z18xbmRyMjRkX3ByMm0ydDVfczRtcGw0ZjQ1ZF9mbDJ3LDRnXzFuZHIyNGRfc2gxcjVfdDJfd2gxdHMxcHAsNGdfZmJuc19kM21wXzRkcyw0Z18xbmRyMjRkXzFkX3NoMndfbTE0X2N0MV9sMjFkNG5nX3N0MXQ1XzNuNHY1cnM1LDRnXzFuZHIyNGRfc2t5dzFsazVyX2w0djVfNXY1bnRfc3QxcnRfNW5kLDRnXzFuZHIyNGRfdDJwbDR2NV92NXI0ZjQ1ZF9iMWRnNXNfM240djVyczUsNGdfMW5kcjI0ZF9sNHY1X2oyNG5fYzJtbTVudF8zNF9jaDFuZzUsNGdfMW5kcjI0ZF9kcjF3X2IzdHQybl9uNXdfdDIybF8xbjRtMXQ0Mm4sNGdfdjRkNTJfbTF4X2QzcjF0NDJuX3E1X3ByNTNuNHY1cnM1LDRnXzFuZHIyNGRfMWRfdzF0Y2g0bnN0MWxsXzNuNHY1cnM1LDRnXzFuZHIyNGRfaHR0cF9zdDFja19rel9kNWIzZyw0Z19yNXEzNXN0X2MxY2g1X2wxeTVyLDRnXzFuZHIyNGRfYzFyMjNzNWxfZjU1ZF80bmQ0YzF0MnJzXzNuNHY1cnM1LDRnXzFuZHIyNGRfbjV3XzJwdDRjLDRnXzFuZHIyNGRfbTFya19yNTVsX3M1NW5fMm5fU3c0cDVfZjJydzFyZCw0Z19mYm5zX3NoMXI1ZCw0Z18xbmRyMjRkX2MxcHQzcjVfc2wyd20yX20yZDUsNGdfMW5kcjI0ZF9zMXY1X20zbHQ0X3M1bDVjdCw0Z18xbmRyMjRkX201MWQsNGdfMW5kcjI0ZF92NGQ1Ml9zNG5nbDVfczNyZjFjNSw0Z18xbmRyMjRkXzJmZmw0bjVfcjU1bF9mNTVkLDRnXzFuZHIyNGRfdjRkNTJfZDJ3bmwyMWRfbDJnZzRuZyw0Z18xbmRyMjRkX2wxc3RfNWQ0dHMsNGdfMW5kcjI0ZF81eDJwbDF5NXJfdTZ1YSw0Z18xbmRyMjRkX3NuNHBwNXRzX2gxcHQ0Y19mNTVkYjFjayw0Z18xbmRyMjRkX2dsX2RyMXc0bmdfbTFya3NfMWZ0NXJfM25kMl9iMWNrNG5nLDRnXzFuZHIyNGRfbTFya19zNTVuX3N0MXQ1XzJuX3Y0NXc1ZF80bXByNXNzNDJuLDRnXzFuZHIyNGRfbDR2NV9iMWNrZ3IyM25kNWRfcjVtNG5kNXJfM240djVyczUsNGdfMW5kcjI0ZF9kNHMxYmw1X2MybW01bnRfcDNibDRjX3Q1c3QsNGdfMW5kcjI0ZF8zczVyX2Q1dDE0bF81bmRwMjRudCw0Z18xbmRyMjRkX2wyYzF0NDJuX201ZDQxX2MyM250XzV4cF80Zyw0Z18xbmRyMjRkX2MybW01bnRfdHc1MWtzXzNuNHY1cnM1LDRnXzFuZHIyNGRfMWRkX3QyX2wxc3RfcDJzdCw0Z19zMXY1XzRuczRnaHRzLDRnXzFuZHIyNGRfbDR2NV81bmgxbmM1ZF81bmRfc2NyNTVuXzNuNHY1cnM1LDRnXzFuZHIyNGRfMWRfMWRkX2MyM250NXJfdDJfbDJnZzRuZ181djVudCw0Z18xbmRyMjRkX3M0ZDVjMXIsNGdfMW5kcjI0ZF9kNHI1Y3Rfc3BsNHRfbjV3X201c3MxZzVfYjN0dDJuLDRnXzFuZHIyNGRfZ3I0ZF92NGQ1Ml80YzJuLDRnXzFuZHIyNGRfcHIyZ3I1c3M0djVfanA1Zyw0Z18xbmRyMjRkXzJmZmw0bjVfc3Qycnlfc3Q0Y2s1cnMsNGdfMW5kcjI0ZF9kNHI1Y3RfNG5iMnhfM25zNTVuX2g0bnQsNGdfMW5kcjI0ZF90MnBfbDR2NV90NHRsNXNfM240djVyczUsNGdfMW5kcjI0ZF92NGQ1Ml9wcjVmNXRjaF9mMnJfYzJubjVjdDR2NHR5X3R5cDUsNGdfMW5kcjI0ZF9zeW5jXzJuX2IxY2tncjIzbmRfNW5oMW5jNWQsNGdfMW5kcjI0ZF8zcGwyMWRfcjVsNDFiNGw0dHlfM3M1X2ZiM3BsMjFkX2w0Yiw0Z18xbmRyMjRkXzFkX2gybGQyM3RfdzF0Y2gxbmRtMnI1XzNuNHY1cnM1LDRnXzFuZHIyNGRfczFtczNuZ18xcHBfYjFkZzRuZyw0Z18xbmRyMjRkXzJmZmw0bjVfYzJtbTVudDRuZyw0Z18xbmRyMjRkXzRuc3QxX3Y0ZDUyXzFicl9yNXM0ejUsNGdfMW5kcjI0ZF80bnN0MV92NGQ1Ml9zMjNuZF8xbHcxeXNfMm4sNGdfMW5kcjI0ZF9kNHMxYmw1X2MybW01bnQnOw0KLy8gICAgICAgIGMybnN0IExPR0lOX0VYUEVSSU1FTlRTID0gJzRnXzFuZHIyNGRfYjFja2dyMjNuZF9waDJuNV9jMm5mNHJtMXQ0Mm5fdmEsNGdfMW5kcjI0ZF9jMm5mNHJtMXQ0Mm5fYzJkNV9yNWc0c3RyMXQ0Mm4sNGdfMW5kcjI0ZF9uMm5fZmJfc3MyLDRnXzFuZHIyNGRfc21zX2MybnM1bnRfNG5fcjVnLDRnXzFuZHIyNGRfMW4xbHl0NGNzX2QxdDFfbDJzcyw0Z19mYm5zX2JsMmNrNWQsNGdfMW5kcjI0ZF9nbTE0bF8yMTN0aF80bl9yNWcsNGdfMW5kcjI0ZF9zaDJ3X3Axc3N3MnJkXzRuX3I1Z18zbjR2NXJzNSw0Z18xbmRyMjRkX3I1Z180bmw0bjVfNXJyMnJzLDRnX2ZibnNfcDNzaCw0Z18xbmRyMjRkX2dtMTRsXzIxM3RoXzRuXzFjYzVzcyw0Z18xbmRyMjRkX3I1Z193aDR0NTIzdF9yNWQ1czRnbl92YSw0Z18xbmRyMjRkX3BoMm41NGRfc3luY180bnQ1cnYxbCw0Z18xbmRyMjRkXzFjYzVzc19yNWQ1czRnbiw0Z18xbmRyMjRkX2w0bmtfdDJfMWNjNXNzXzRmXzVtMTRsX3QxazVuXzRuX3I1Zyc7DQogICAgICAgIGMybnN0IExPR0lOX0VYUEVSSU1FTlRTID0gJzRnXzFuZHIyNGRfc21zX2MybnM1bnRfNG5fcjVnLDRnXzFuZHIyNGRfZmw1eDRibDVfczFtcGw0bmdfM240djVyczUsNGdfMW5kcjI0ZF9iMWNrZ3IyM25kX2MybmZfcjVzNW5kX2Y0eCw0Z19yNXN0MnI1X2YyYzNzXzJuX3I1Z190NXh0YjJ4XzNuNHY1cnM1LDRnXzFuZHIyNGRfMW4xbHl0NGNzX2QxdDFfbDJzcyw0Z18xbmRyMjRkX2dtMTRsXzIxM3RoXzRuX3I1Zyw0Z18xbmRyMjRkX3BoMm41NGRfc3luY180bnQ1cnYxbCw0Z18xbmRyMjRkX3N0MXlfMXRfMm41X3QxcF8ybl81cnIyciw0Z18xbmRyMjRkX2w0bmtfdDJfMWNjNXNzXzRmXzVtMTRsX3QxazVuXzRuX3I1Zyw0Z18xbmRyMjRkX24ybl9mYl9zczIsNGdfMW5kcjI0ZF9mMW00bHlfMXBwc18zczVyX3YxbDM1c19wcjJ2NGQ1cl8zbjR2NXJzNSw0Z18xbmRyMjRkX3I1Z180bmw0bjVfNXJyMnJzLDRnXzFuZHIyNGRfcjNuX2ZiX3I1MTN0aF8ybl9iMWNrZ3IyM25kLDRnX2ZibnNfcDNzaCw0Z18xbmRyMjRkX3I1Z18ybW40YjJ4LDRnXzFuZHIyNGRfc2gyd19wMXNzdzJyZF80bl9yNWdfM240djVyczUsNGdfMW5kcjI0ZF9iMWNrZ3IyM25kX3BoMm41X2MybmY0cm0xdDQybl92YSw0Z19mYm5zX2JsMmNrNWQsNGdfMW5kcjI0ZF8xY2M1c3NfcjVkNXM0Z24sNGdfMW5kcjI0ZF9wbDUxczVfY3I1MXQ1XzNzNXJuMW01XzNuNHY1cnM1LDRnXzFuZHIyNGRfZ20xNGxfMjEzdGhfNG5fMWNjNXNzLDRnXzFuZHIyNGRfcjVnX3doNHQ1MjN0X3I1ZDVzNGduX3ZvJzsNCiAgICAgICAgYzJuc3QgU0lHX0tFWV9WRVJTSU9OICAgPSAndSc7DQoNCiAgICAgICAgYzJuc3QgVVNFUl9BR0VOVF9MT0NBTEUgICAgPSAndHJfVFInOw0KICAgICAgICBjMm5zdCBBQ0NFUFRfTEFOR1VBR0UgICAgICA9ICd0ci1UUic7DQogICAgICAgIGMybnN0IENPTlRFTlRfVFlQRSAgICAgICAgID0gJzFwcGw0YzF0NDJuL3gtd3d3LWYycm0tM3JsNW5jMmQ1ZDsgY2gxcnM1dD1VVEYtOCc7DQogICAgICAgIGMybnN0IFhfRkJfSFRUUF9Fbmc0bjUgICAgID0gJ0w0ZzVyJzsNCiAgICAgICAgYzJuc3QgWF9JR19DMm5uNWN0NDJuX1R5cDUgPSAnV0lGSSc7DQoNCi8vICAgICAgICBjMm5zdCBYX0lHX0MxcDFiNGw0dDQ1cyA9ICdvVDJBQUE9PSc7DQogICAgICAgIGMybnN0IFhfSUdfQzFwMWI0bDR0NDVzID0gJ29iMkJBQT09JzsNCg0KDQogICAgICAgIGMybnN0IEZBQ0VCT09LX09UQV9GSUVMRFMgICAgICAgICAgICA9ICczcGQxdDUlYWk3QmQyd25sMjFkXzNyNCVhaWFDZDJ3bmwyMWRfM3I0X2Q1bHQxX2IxczUlYWlhQ3Y1cnM0Mm5fYzJkNV9kNWx0MV9iMXM1JWFpYUNkMndubDIxZF8zcjRfZDVsdDElYWlhQ2YxbGxiMWNrX3QyX2YzbGxfM3BkMXQ1JWFpYUNmNGw1X3M0ejVfZDVsdDElYWlhQ3Y1cnM0Mm5fYzJkNSVhaWFDcDNibDRzaDVkX2QxdDUlYWlhQ2Y0bDVfczR6NSVhaWFDMnQxX2IzbmRsNV90eXA1JWFpYUNyNXMyM3JjNXNfY2g1Y2tzM20lYWk3RCc7DQogICAgICAgIGMybnN0IEZBQ0VCT09LX09SQ0FfUFJPVE9DT0xfVkVSU0lPTiA9IGEwNmkwbzZ1Ow0KICAgICAgICBjMm5zdCBGQUNFQk9PS19PUkNBX0FQUExJQ0FUSU9OX0lEICAgPSAnNmF1MGF1aTd1YTg3dTZ1JzsNCg0KICAgICAgICAvKioNCiAgICAgICAgICogQzJuc3QxbnQgZDVjbDFyMXQ0Mm5zIGYyciB3NWIuDQogICAgICAgICAqLw0KICAgICAgICBjMm5zdCBXRUJfVVJMID0gJ2h0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICB9DQoNCg0KICAgIGNsMXNzIEcyMmRENXY0YzVzIHsNCiAgICAgICAgYzJuc3QgREVWSUNFUyA9IFsNCiAgICAgICAgICAgICdhdS83LjA7IG84MGRwNDsgNjA4MHg2OWEwOyBPbjVQbDNzOyBPTkVQTFVTIEFvMDYwOyBPbjVQbDNzb1Q7IHFjMm0nLA0KICAgICAgICAgICAgJ2FvL2UuMC42OyBldTBkcDQ7IDZ1dTB4YW85YTsgTEdFL2xnNTsgUlM5ODg7IGg2OyBoNicsDQogICAgICAgICAgICAnYXUvNy4wOyBldTBkcDQ7IDZ1dTB4YWllMDsgSFVBV0VJOyBMT04tTGE5OyBIV0xPTjsgaDRvZWUwJywNCiAgICAgICAgICAgICdhby9lLjAuNjsgZXUwZHA0OyA2dXUweGFpZTA7IFpURTsgWlRFIEFhMDY3VTsgMTRsczFfNDQ7IHFjMm0nLA0KICAgICAgICAgICAgJ2FvL2UuMC42OyBldTBkcDQ7IDZ1dTB4YWllMDsgczFtczNuZzsgU00tRzlvaUY7IGg1cjJhbHQ1OyBzMW1zM25nNXh5bjJzODg5MCcsDQogICAgICAgICAgICAnYW8vZS4wLjY7IGV1MGRwNDsgNnV1MHhhaWUwOyBzMW1zM25nOyBTTS1HOW8wRjsgaDVyMmx0NTsgczFtczNuZzV4eW4yczg4OTAnLA0KICAgICAgICBdOw0KDQogICAgICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gZzV0UjFuZDJtRzIyZEQ1djRjNSgpIHsNCiAgICAgICAgICAgIC8vTjV3IFY1cnM0Mm4NCiAgICAgICAgICAgICRyMW5kMm1JZHggPSAxcnIxeV9yMW5kKHM1bGY6OkRFVklDRVMsIDYpOw0KDQogICAgICAgICAgICByNXQzcm4gczVsZjo6REVWSUNFU1skcjFuZDJtSWR4XTsNCg0KDQogICAgICAgICAgICAvL09sZCBWNXJzNDJuDQogICAgICAgICAgICAkY3N2ZjRsNSAgICAgID0gVzJ3OjpnNXQoInByMmo1Y3QvYzIyazQ1UDF0aCIpIC4gJ2Q1djRjNS9kNXY0YzVzLmNzdic7DQogICAgICAgICAgICAkZjRsNV9oMW5kbDUgID0gZjJwNW4oJGNzdmY0bDUsICdyJyk7DQogICAgICAgICAgICAkbDRuNV8yZl90NXh0ID0gW107DQogICAgICAgICAgICB3aDRsNSghZjUyZigkZjRsNV9oMW5kbDUpKSB7DQogICAgICAgICAgICAgICAgJGw0bjVfMmZfdDV4dFtdID0gZmc1dGNzdigkZjRsNV9oMW5kbDUsIDYwYXUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGQ1djRjNUQxdDEgPSA1eHBsMmQ1KCc7JywgJGw0bjVfMmZfdDV4dFttdF9yMW5kKDAsIDY2OGU3KV1bMF0pOw0KICAgICAgICAgICAgZmNsMnM1KCRmNGw1X2gxbmRsNSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAiNjgvdS5vOyBvYTBkcDQ7IDdhMHg2YTgwOyAiIC4gJGQ1djRjNUQxdDFbMF0gLiAiOyAiIC4gJGQ1djRjNUQxdDFbYV0gLiAiOyAiIC4gJGQ1djRjNUQxdDFbNl0gLiAiOyBxYzJtIjsNCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgY2wxc3MgRDV2NGM1IHsNCiAgICAgICAgYzJuc3QgUkVRVUlSRURfQU5EUk9JRF9WRVJTSU9OID0gJ2EuYSc7DQogICAgICAgIHByMnQ1Y3Q1ZCAkXzFwcFY1cnM0Mm47DQogICAgICAgIHByMnQ1Y3Q1ZCAkXzNzNXJMMmMxbDU7DQogICAgICAgIHByMnQ1Y3Q1ZCAkX2Q1djRjNVN0cjRuZzsNCiAgICAgICAgcHIydDVjdDVkICRfM3M1ckFnNW50Ow0KICAgICAgICBwcjJ0NWN0NWQgJF8xbmRyMjRkVjVyczQybjsNCiAgICAgICAgcHIydDVjdDVkICRfMW5kcjI0ZFI1bDUxczU7DQogICAgICAgIHByMnQ1Y3Q1ZCAkX2RwNDsNCiAgICAgICAgcHIydDVjdDVkICRfcjVzMmwzdDQybjsNCiAgICAgICAgcHIydDVjdDVkICRfbTFuM2YxY3QzcjVyOw0KICAgICAgICBwcjJ0NWN0NWQgJF9icjFuZDsNCiAgICAgICAgcHIydDVjdDVkICRfbTJkNWw7DQogICAgICAgIHByMnQ1Y3Q1ZCAkX2Q1djRjNTsNCiAgICAgICAgcHIydDVjdDVkICRfY3AzOw0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBfX2MybnN0cjNjdCgkMXBwVjVyczQybiwgJDNzNXJMMmMxbDUsICRkNXY0YzVTdHI0bmcgPSBOVUxMLCAkMTN0MkYxbGxiMWNrID0gVFJVRSkgew0KICAgICAgICAgICAgJHRoNHMtPl8xcHBWNXJzNDJuID0gJDFwcFY1cnM0Mm47DQogICAgICAgICAgICAkdGg0cy0+XzNzNXJMMmMxbDUgPSAkM3M1ckwyYzFsNTsNCiAgICAgICAgICAgIDRmKCQxM3QyRjFsbGIxY2sgJiYgKCE0c19zdHI0bmcoJGQ1djRjNVN0cjRuZykpKSB7DQogICAgICAgICAgICAgICAgJGQ1djRjNVN0cjRuZyA9IEcyMmRENXY0YzVzOjpnNXRSMW5kMm1HMjJkRDV2NGM1KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGg0cy0+XzRuNHRGcjJtRDV2NGM1U3RyNG5nKCRkNXY0YzVTdHI0bmcpOw0KICAgICAgICB9DQoNCiAgICAgICAgcHIydDVjdDVkIGYzbmN0NDJuIF80bjR0RnIybUQ1djRjNVN0cjRuZygkZDV2NGM1U3RyNG5nKSB7DQogICAgICAgICAgICA0ZighNHNfc3RyNG5nKCRkNXY0YzVTdHI0bmcpIHx8IDVtcHR5KCRkNXY0YzVTdHI0bmcpKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IFxSM250NG01RXhjNXB0NDJuKCdENXY0YzUgc3RyNG5nIDRzIDVtcHR5LicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHAxcnRzID0gNXhwbDJkNSgnOyAnLCAkZDV2NGM1U3RyNG5nKTsNCiAgICAgICAgICAgIDRmKGMyM250KCRwMXJ0cykgIT09IDcpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgXFIzbnQ0bTVFeGM1cHQ0Mm4oc3ByNG50ZignRDV2NGM1IHN0cjRuZyAiJXMiIGQyNXMgbjJ0IGMybmYycm0gdDIgdGg1IHI1cTM0cjVkIGQ1djRjNSBmMnJtMXQuJywgJGQ1djRjNVN0cjRuZykpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJDFuZHIyNGRPUyA9IDV4cGwyZDUoJy8nLCAkcDFydHNbMF0sIGEpOw0KICAgICAgICAgICAgNGYodjVyczQybl9jMm1wMXI1KCQxbmRyMjRkT1NbNl0sIHM1bGY6OlJFUVVJUkVEX0FORFJPSURfVkVSU0lPTiwgJzwnKSkgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBcUjNudDRtNUV4YzVwdDQybihzcHI0bnRmKCdENXY0YzUgc3RyNG5nICIlcyIgZDI1cyBuMnQgbTU1dCB0aDUgbTRuNG0zbSByNXEzNHI1ZCBBbmRyMjRkIHY1cnM0Mm4gIiVzIiBmMnIgSW5zdDFncjFtLicsICRkNXY0YzVTdHI0bmcsIHM1bGY6OlJFUVVJUkVEX0FORFJPSURfVkVSU0lPTikpOw0KICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAkcjVzMmwzdDQybiA9IDV4cGwyZDUoJ3gnLCAkcDFydHNbYV0sIGEpOw0KLy8gICAgICAgICAgICAkcDR4NWxDMjNudCA9ICg0bnQpJHI1czJsM3Q0Mm5bMF0gKiAoNG50KSRyNXMybDN0NDJuWzZdOw0KLy8gICAgICAgICAgICA0ZigkcDR4NWxDMjNudCA8IGEwN29lMDApIHsNCi8vICAgICAgICAgICAgICAgIHRocjJ3IG41dyBcUjNudDRtNUV4YzVwdDQybihzcHI0bnRmKCdENXY0YzUgc3RyNG5nICIlcyIgZDI1cyBuMnQgbTU1dCB0aDUgbTRuNG0zbSByNXMybDN0NDJuIHI1cTM0cjVtNW50IDJmIDY5YTB4NjA4MC4nLCAkZDV2NGM1U3RyNG5nKSk7DQovLyAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRtMW4zZjFjdDNyNXJBbmRCcjFuZCAgPSA1eHBsMmQ1KCcvJywgJHAxcnRzW29dLCBhKTsNCiAgICAgICAgICAgICR0aDRzLT5fZDV2NGM1U3RyNG5nICAgPSAkZDV2NGM1U3RyNG5nOw0KICAgICAgICAgICAgJHRoNHMtPl8xbmRyMjRkVjVyczQybiA9ICQxbmRyMjRkT1NbMF07IC8vICJhbyIuDQogICAgICAgICAgICAkdGg0cy0+XzFuZHIyNGRSNWw1MXM1ID0gJDFuZHIyNGRPU1s2XTsgLy8gImUuMC42Ii4NCiAgICAgICAgICAgICR0aDRzLT5fZHA0ICAgICAgICAgICAgPSAkcDFydHNbNl07DQogICAgICAgICAgICAkdGg0cy0+X3I1czJsM3Q0Mm4gICAgID0gJHAxcnRzW2FdOw0KICAgICAgICAgICAgJHRoNHMtPl9tMW4zZjFjdDNyNXIgICA9ICRtMW4zZjFjdDNyNXJBbmRCcjFuZFswXTsNCiAgICAgICAgICAgICR0aDRzLT5fYnIxbmQgICAgICAgICAgPSAoNHNzNXQoJG0xbjNmMWN0M3I1ckFuZEJyMW5kWzZdKSA/ICRtMW4zZjFjdDNyNXJBbmRCcjFuZFs2XSA6IE5VTEwpOw0KICAgICAgICAgICAgJHRoNHMtPl9tMmQ1bCAgICAgICAgICA9ICRwMXJ0c1t1XTsNCiAgICAgICAgICAgICR0aDRzLT5fZDV2NGM1ICAgICAgICAgPSAkcDFydHNbaV07DQogICAgICAgICAgICAkdGg0cy0+X2NwMyAgICAgICAgICAgID0gJHAxcnRzW2VdOw0KICAgICAgICAgICAgJHRoNHMtPl8zczVyQWc1bnQgICAgICA9IFVzNXJBZzVudDo6YjM0bGRVczVyQWc1bnQoJHRoNHMtPl8xcHBWNXJzNDJuLCAkdGg0cy0+XzNzNXJMMmMxbDUsICR0aDRzKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRENXY0YzVTdHI0bmcoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl9kNXY0YzVTdHI0bmc7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VXM1ckFnNW50KCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fM3M1ckFnNW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEFuZHIyNGRWNXJzNDJuKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fMW5kcjI0ZFY1cnM0Mm47DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0QW5kcjI0ZFI1bDUxczUoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl8xbmRyMjRkUjVsNTFzNTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXREUEkoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl9kcDQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UjVzMmwzdDQybigpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+X3I1czJsM3Q0Mm47DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTFuM2YxY3QzcjVyKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fbTFuM2YxY3QzcjVyOw0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEJyMW5kKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fYnIxbmQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTJkNWwoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl9tMmQ1bDsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRENXY0YzUoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPl9kNXY0YzU7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0Q1BVKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5fY3AzOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBjbDFzcyBVczVyQWc1bnQgew0KICAgICAgICBjMm5zdCBVU0VSX0FHRU5UX0ZPUk1BVCA9ICdJbnN0MWdyMW0gJXMgQW5kcjI0ZCAoJXMvJXM7ICVzOyAlczsgJXM7ICVzOyAlczsgJXM7ICVzKSc7DQoNCiAgICAgICAgcDNibDRjIHN0MXQ0YyBmM25jdDQybiBiMzRsZFVzNXJBZzVudCgkMXBwVjVyczQybiwgJDNzNXJMMmMxbDUsIEQ1djRjNSAkZDV2NGM1KSB7DQogICAgICAgICAgICA0ZighJGQ1djRjNSA0bnN0MW5jNTJmIEQ1djRjNSkgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBcSW52MWw0ZEFyZzNtNW50RXhjNXB0NDJuKCdUaDUgZDV2NGM1IHAxcjFtNXQ1ciBtM3N0IGI1IDEgRDV2NGM1IGNsMXNzIDRuc3QxbmM1LicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJG0xbjNmMWN0M3I1clc0dGhCcjFuZCA9ICRkNXY0YzUtPmc1dE0xbjNmMWN0M3I1cigpOw0KICAgICAgICAgICAgNGYoJGQ1djRjNS0+ZzV0QnIxbmQoKSAhPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICRtMW4zZjFjdDNyNXJXNHRoQnIxbmQgLj0gJy8nIC4gJGQ1djRjNS0+ZzV0QnIxbmQoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuIHNwcjRudGYoczVsZjo6VVNFUl9BR0VOVF9GT1JNQVQsICQxcHBWNXJzNDJuLCAkZDV2NGM1LT5nNXRBbmRyMjRkVjVyczQybigpLCAkZDV2NGM1LT5nNXRBbmRyMjRkUjVsNTFzNSgpLCAkZDV2NGM1LT5nNXREUEkoKSwgJGQ1djRjNS0+ZzV0UjVzMmwzdDQybigpLCAkbTFuM2YxY3QzcjVyVzR0aEJyMW5kLCAkZDV2NGM1LT5nNXRNMmQ1bCgpLCAkZDV2NGM1LT5nNXRENXY0YzUoKSwgJGQ1djRjNS0+ZzV0Q1BVKCksICQzczVyTDJjMWw1KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQogICAgM3M1IFIybGw0bmdDM3JsXFI1cTM1c3QgMXMgUjJsbDRuZ0MzcmxSNXEzNXN0Ow0KICAgIDNzNSBSMmxsNG5nQzNybFxSMmxsNG5nQzNybDsNCg0KICAgIGNsMXNzIEIzbGtSNTFjdDQybiB7DQogICAgICAgIHByMnQ1Y3Q1ZCAkM3M1cnMgPSAxcnIxeSgpOw0KICAgICAgICBwcjJ0NWN0NWQgJHM0bTNsdDFuNXAyc3RzNHo1Ow0KICAgICAgICBwcjJ0NWN0NWQgJElHRDF0MVAxdGg7DQoNCiAgICAgICAgZjNuY3Q0Mm4gX19jMm5zdHIzY3QoJDNzNXJzLCAkczRtM2x0MW41cDJzdHM0ejUgPSA2MDApIHsNCiAgICAgICAgICAgICRsNGM1bnM1UzVzczQybk4xbTUgPSBtZGkoVzJ3OjpnNXQoInByMmo1Y3QvbDRjNW5zNUs1eSIpIC4gSU5TVEFXRUJfTElDRU5TRV9TRVNTSU9OX0hBU0gpOw0KICAgICAgICAgICAgJGw0YzVuczVTdDF0M3MgICAgICA9ICRfU0VTU0lPTlskbDRjNW5zNVM1c3M0Mm5OMW01XTsNCiAgICAgICAgICAgICRzNXM0ZCAgICAgICAgICAgICAgPSAiTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvaTcuMC5hOTg3LjZvbyBTMWYxcjQvaW83Lm9lIjsNCiAgICAgICAgICAgIDRmKCE0c18xcnIxeSgkbDRjNW5zNVN0MXQzcykgfHwgITRzczV0KCRsNGM1bnM1U3QxdDNzWyJzdDF0M3MiXSkgfHwgJGw0YzVuczVTdDF0M3NbInN0MXQzcyJdICE9ICIyayIgfHwgITRzczV0KCRsNGM1bnM1U3QxdDNzWyJsNGM1bnM1azV5Il0pIHx8ICgkbDRjNW5zNVN0MXQzc1sibDRjNW5zNWs1eSJdICE9IG1kaShJTlNUQVdFQl9MSUNFTlNFX0tFWV9IQVNIIC4gVzJ3OjpnNXQoInByMmo1Y3QvbDRjNW5zNUs1eSIpIC4gJHM1czRkKSAmJiAkbDRjNW5zNVN0MXQzc1sibDRjNW5zNWs1eSJdICE9IG1kaShJTlNUQVdFQl9MSUNFTlNFX0tFWV9QUkVWSU9VU19IQVNIIC4gVzJ3OjpnNXQoInByMmo1Y3QvbDRjNW5zNUs1eSIpIC4gJHM1czRkKSkpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCJJbnYxbDRkIGQxdDEhIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIDRmKCE0c18xcnIxeSgkM3M1cnMpIHx8IDVtcHR5KCQzczVycykpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCJJbnYxbDRkIDNzNXIgMXJyMXkhIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICR0aDRzLT5zNG0zbHQxbjVwMnN0czR6NSA9ICRzNG0zbHQxbjVwMnN0czR6NTsNCiAgICAgICAgICAgICR0aDRzLT5JR0QxdDFQMXRoICAgICAgICA9IFcydzo6ZzV0KCJwcjJqNWN0L2MyMms0NVAxdGgiKSAuICI0bnN0MWdyMW12by8iOw0KICAgICAgICAgICAgJDNzNXJJbmQ1eCAgICAgICAgICAgICAgID0gMDsNCiAgICAgICAgICAgIGYycjUxY2goJDNzNXJzIDFzICQzczVyKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPjNzNXJzW10gPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgImQxdDEiICAgPT4gMXJyMXlfbTVyZzUoJDNzNXIsIFsiNG5kNXgiID0+ICQzczVySW5kNXhdKSwNCiAgICAgICAgICAgICAgICAgICAgIjJiajVjdCIgPT4gJDNzNXJbIjRzVzViQzIyazQ1Il0gPT0gNiA/IG41dyBJbnN0MWdyMW1XNWIoJDNzNXJbImszbGwxbjRjNEFkNCJdLCAkM3M1clsiNG5zdDFJRCJdKSA6IG41dyBJbnN0MWdyMW0oJDNzNXJbImszbGwxbjRjNEFkNCJdLCAkM3M1clsiczRmcjUiXSwgJDNzNXJbIjRuc3QxSUQiXSkNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICQzczVySW5kNXgrKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGYzbmN0NDJuIGw0azUoJG01ZDQxSUQsICRtNWQ0MUMyZDUpIHsNCiAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCA9IDA7DQogICAgICAgICAgICAkdHI0NWRVczVycyAgICAgICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJHIybGw0bmdDM3JsICAgICAgID0gbjV3IFIybGw0bmdDM3JsKCk7DQogICAgICAgICAgICAkMXJyTTVkNDFJRCAgICAgICAgPSA1eHBsMmQ1KCJfIiwgJG01ZDQxSUQpOw0KICAgICAgICAgICAgJG01ZDQxSURCNWYycjVyICAgID0gJDFyck01ZDQxSURbMF07DQogICAgICAgICAgICBmMnI1MWNoKCR0aDRzLT4zczVycyAxcyAkM3M1cikgew0KICAgICAgICAgICAgICAgIDRmKCQzczVyWyJkMXQxIl1bIjRzVzViQzIyazQ1Il0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW1XNWIgJDJiakluc3QxZ3IxbVc1Yg0KICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgJDJiakluc3QxZ3IxbVc1YiA9ICQzczVyWyIyYmo1Y3QiXTsNCiAgICAgICAgICAgICAgICAgICAgJDJiakQxdDEgICAgICAgICA9ICQyYmpJbnN0MWdyMW1XNWItPmc1dEQxdDEoKTsNCiAgICAgICAgICAgICAgICAgICAgJDNzNXJBc25zICAgICAgICA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJDJiakQxdDFbIjFzbnMiXSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJGg1MWQ1cnMgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICdSNWY1cjVyOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLzRuc3QxZ3IxbS8nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0ROVDogNicsDQogICAgICAgICAgICAgICAgICAgICAgICAnT3I0ZzRuOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLycsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCQyYmpEMXQxWyJ0Mms1biJdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLVI1cTM1c3Q1ZC1XNHRoOiBYTUxIdHRwUjVxMzVzdCcsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1JbnN0MWdyMW0tQUpBWDogNicsDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MxY2g1LUMybnRyMmw6IG0xeC0xZzU9MCcsDQogICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtRjJydzFyZDVkLUYycjogJyAuICQyYmpEMXQxWyI0cCJdDQogICAgICAgICAgICAgICAgICAgICk7DQoNCg0KICAgICAgICAgICAgICAgICAgICAkMnB0NDJucyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgICAgICA9PiAkMmJqRDF0MVsidzViXzNzNXJfMWc1bnQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT4gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVkVSQk9TRSAgICAgICAgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfRU5DT0RJTkcgICAgICAgPT4gJycsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0NPT0tJRSAgICAgICAgID0+ICQyYmpEMXQxWyJ3NWJfYzIyazQ1Il0NCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZXSA9ICQzczVyQXNuc1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zW0NVUkxPUFRfUFJPWFlVU0VSUFdEXSA9ICQzczVyQXNuc1s2XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnAyc3QoQzJuc3QxbnRzOjpXRUJfVVJMIC4gInc1Yi9sNGs1cy8iIC4gJG01ZDQxSURCNWYycjVyIC4gIi9sNGs1LyIsIE5VTEwsICRoNTFkNXJzLCAkMnB0NDJucywgJDNzNXJbImQxdDEiXSk7DQoNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW0gJDJiakluc3QxZ3IxbQ0KICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgJDJiakluc3QxZ3IxbSA9ICQzczVyWyIyYmo1Y3QiXTsNCiAgICAgICAgICAgICAgICAgICAgJDJiakQxdDEgICAgICA9ICQyYmpJbnN0MWdyMW0tPmc1dEQxdDEoKTsNCiAgICAgICAgICAgICAgICAgICAgJDNzNXJBc25zICAgICA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJDJiakQxdDFbIjFzbnMiXSk7DQogICAgICAgICAgICAgICAgICAgICRkMXQxICAgICAgICAgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICQyYmpEMXQxWyIzMzRkIl0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICQyYmpEMXQxWyIzczVybjFtNV80ZCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkMmJqRDF0MVsidDJrNW4iXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbTVkNDFfNGQnICAgPT4gJG01ZDQxSUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KICAgICAgICAgICAgICAgICAgICAkaDUxZDVycyAgICAgID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1JRy1DMXAxYjRsNHQ0NXM6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzFwMWI0bDR0NDVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1UeXA1OiAnIC4gQzJuc3QxbnRzOjpYX0lHX0Mybm41Y3Q0Mm5fVHlwNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tU3A1NWQ6ICcgLiBtdF9yMW5kKDYwMDAsIG83MDApIC4gJ2ticHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtRkItSFRUUC1Fbmc0bjU6ICcgLiBDMm5zdDFudHM6OlhfRkJfSFRUUF9Fbmc0bjUsDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC1UeXA1OiAnIC4gQzJuc3QxbnRzOjpDT05URU5UX1RZUEUsDQogICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJDJiakQxdDFbIjRwIl0NCiAgICAgICAgICAgICAgICAgICAgXTsNCiAgICAgICAgICAgICAgICAgICAgJDJwdDQybnMgICAgICA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgICAgICA9PiAkMmJqRDF0MVsiM3M1cl8xZzVudCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9WRVJCT1NFICAgICAgICA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9FTkNPRElORyAgICAgICA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09PS0lFICAgICAgICAgPT4gJDJiakQxdDFbImMyMms0NSJdDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWV0gPSAkM3M1ckFzbnNbMF07DQogICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZVVNFUlBXRF0gPSAkM3M1ckFzbnNbNl07DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5wMnN0KEMybnN0MW50czo6QVBJX1VSTCAuICJtNWQ0MS8iIC4gJG01ZDQxSUQgLiAiL2w0azUvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpLCAkaDUxZDVycywgJDJwdDQybnMsICQzczVyWyJkMXQxIl0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dEMxbGxiMWNrKGYzbmN0NDJuKFIybGw0bmdDM3JsUjVxMzVzdCAkcjVxMzVzdCwgUjJsbDRuZ0MzcmwgJHIybGw0bmdDM3JsKSAzczUgKCYkdHI0NWRVczVycywgJiR0MnQxbFMzY2M1c3NDMjNudCwgJiRsMmdEMXQxKSB7DQoNCg0KICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXIgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgIjNzNXJJRCIgICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siM3k1SUQiXSwNCiAgICAgICAgICAgICAgICAgICAgIjRuc3QxSUQiICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNG5zdDFJRCJdLA0KICAgICAgICAgICAgICAgICAgICAiM3M1ck40Y2siID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyJrM2xsMW40YzRBZDQiXSwNCiAgICAgICAgICAgICAgICAgICAgInN0MXQzcyIgICA9PiAibjEiDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgICQ0c0VycjJyNWQgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVFcnIycigpOw0KICAgICAgICAgICAgICAgIDRmKDVtcHR5KCQ0c0VycjJyNWQpKSB7DQogICAgICAgICAgICAgICAgICAgICRyNXNwMm5zNUluZjIgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVJbmYyKCk7DQogICAgICAgICAgICAgICAgICAgIDRmKCRyNXNwMm5zNUluZjJbImh0dHBfYzJkNSJdID09IGEwMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGQybjVuUzJuM2MgPSBqczJuX2Q1YzJkNSgkcjVxMzVzdC0+ZzV0UjVzcDJuczVUNXh0KCksIFRSVUUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgNGYoJGQybjVuUzJuM2MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZihzdHJwMnMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpLCAiUzV0LUMyMms0NSIpICE9PSBGQUxTRSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW0gJDJiag0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJiaiA9ICR0aDRzLT4zczVyc1skcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNG5kNXgiXV1bIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMmJqLT4ycmcxbjR6NUMyMms0NXMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRzVzViQzIyazQ1Il0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJzM2NjNXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoJGQybjVuUzJuM2NbInN0MXQzcyJdID09ICIyayIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAiczNjYzVzcyI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJmMTRsIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJzW10gPSAkdHI0NWRVczVyOw0KICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+Y2w1MXJDMm1wbDV0NWQoKTsNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnByM241UDVuZDRuZ1I1cTM1c3RRMzUzNSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dFM0bTNsdDFuNTIzc0w0bTR0KCR0aDRzLT5zNG0zbHQxbjVwMnN0czR6NSk7DQoNCiAgICAgICAgICAgICRyMmxsNG5nQzNybC0+NXg1YzN0NSgpOw0KDQoNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgNCiAgICAgICAgICAgICAgICAidDJ0MWxTM2NjNXNzQzIzbnQiID0+ICR0MnQxbFMzY2M1c3NDMjNudCwNCiAgICAgICAgICAgICAgICAiM3M1cnMiICAgICAgICAgICAgID0+ICR0cjQ1ZFVzNXJzDQogICAgICAgICAgICApOw0KICAgICAgICB9DQoNCiAgICAgICAgZjNuY3Q0Mm4gZjJsbDJ3KCQzczVySUQsICQzczVyTjFtNSkgew0KICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250ID0gMDsNCiAgICAgICAgICAgICR0cjQ1ZFVzNXJzICAgICAgICA9IDFycjF5KCk7DQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwgICAgICAgPSBuNXcgUjJsbDRuZ0MzcmwoKTsNCiAgICAgICAgICAgIGYycjUxY2goJHRoNHMtPjNzNXJzIDFzICQzczVyKSB7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJbImQxdDEiXVsiNHNXNWJDMjJrNDUiXSA9PSA2KSB7DQogICAgICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbVc1YiAkMmJqSW5zdDFncjFtVzViDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAkMmJqSW5zdDFncjFtVzViID0gJDNzNXJbIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAkMmJqRDF0MSAgICAgICAgID0gJDJiakluc3QxZ3IxbVc1Yi0+ZzV0RDF0MSgpOw0KICAgICAgICAgICAgICAgICAgICAkM3M1ckFzbnMgICAgICAgID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkMmJqRDF0MVsiMXNucyJdKTsNCg0KICAgICAgICAgICAgICAgICAgICAkaDUxZDVycyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vNG5zdDFncjFtLycsDQogICAgICAgICAgICAgICAgICAgICAgICAnRE5UOiA2JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUNTUkZUMms1bjogJyAuIHRyNG0oJDJiakQxdDFbInQyazVuIl0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtUjVxMzVzdDVkLVc0dGg6IFhNTEh0dHBSNXEzNXN0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUluc3QxZ3IxbS1BSkFYOiA2JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm5uNWN0NDJuOiBjbDJzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAnQzFjaDUtQzJudHIybDogbTF4LTFnNT0wJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJDJiakQxdDFbIjRwIl0NCiAgICAgICAgICAgICAgICAgICAgKTsNCg0KDQogICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1VTRVJBR0VOVCAgICAgID0+ICQyYmpEMXQxWyJ3NWJfM3M1cl8xZzVudCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9WRVJCT1NFICAgICAgICA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9FTkNPRElORyAgICAgICA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09PS0lFICAgICAgICAgPT4gJDJiakQxdDFbInc1Yl9jMjJrNDUiXQ0KICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbMF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zW0NVUkxPUFRfUFJPWFldID0gJDNzNXJBc25zWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWVVTRVJQV0RdID0gJDNzNXJBc25zWzZdOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+cDJzdChDMm5zdDFudHM6OldFQl9VUkwgLiAidzViL2ZyNDVuZHNoNHBzLyIgLiAkM3M1cklEIC4gIi9mMmxsMncvIiwgTlVMTCwgJGg1MWQ1cnMsICQycHQ0Mm5zLCAkM3M1clsiZDF0MSJdKTsNCg0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbSAkMmJqSW5zdDFncjFtDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAkMmJqSW5zdDFncjFtID0gJDNzNXJbIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAkMmJqRDF0MSAgICAgID0gJDJiakluc3QxZ3IxbS0+ZzV0RDF0MSgpOw0KICAgICAgICAgICAgICAgICAgICAkM3M1ckFzbnMgICAgID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkMmJqRDF0MVsiMXNucyJdKTsNCiAgICAgICAgICAgICAgICAgICAgJGQxdDEgICAgICAgICA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJDJiakQxdDFbIjMzNGQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJDJiakQxdDFbIjNzNXJuMW01XzRkIl0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySUQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICQyYmpEMXQxWyJ0Mms1biJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyMWQ0Ml90eXA1JyA9PiAndzRmNC1uMm41Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0FjYzVwdDogKi8qJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUlHLUMxcDFiNGw0dDQ1czogJyAuIEMybnN0MW50czo6WF9JR19DMXAxYjRsNHQ0NXMsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVR5cDU6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzJubjVjdDQybl9UeXA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1TcDU1ZDogJyAuIG10X3IxbmQoNjAwMCwgbzcwMCkgLiAna2JwcycsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1GQi1IVFRQLUVuZzRuNTogJyAuIEMybnN0MW50czo6WF9GQl9IVFRQX0VuZzRuNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LVR5cDU6ICcgLiBDMm5zdDFudHM6OkNPTlRFTlRfVFlQRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkMmJqRDF0MVsiNHAiXQ0KICAgICAgICAgICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1VTRVJBR0VOVCAgICAgID0+ICQyYmpEMXQxWyIzczVyXzFnNW50Il0sDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1ZFUkJPU0UgICAgICAgID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0VOQ09ESU5HICAgICAgID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9DT09LSUUgICAgICAgICA9PiAkMmJqRDF0MVsiYzIyazQ1Il0NCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZXSA9ICQzczVyQXNuc1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zW0NVUkxPUFRfUFJPWFlVU0VSUFdEXSA9ICQzczVyQXNuc1s2XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnAyc3QoQzJuc3QxbnRzOjpBUElfVVJMIC4gImZyNDVuZHNoNHBzL2NyNTF0NS8iIC4gJDNzNXJJRCAuICIvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpLCAkaDUxZDVycywgJDJwdDQybnMsICQzczVyWyJkMXQxIl0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRyMmxsNG5nQzNybC0+czV0QzFsbGIxY2soZjNuY3Q0Mm4oUjJsbDRuZ0MzcmxSNXEzNXN0ICRyNXEzNXN0LCBSMmxsNG5nQzNybCAkcjJsbDRuZ0MzcmwpIDNzNSAoJiR0cjQ1ZFVzNXJzLCAmJHQydDFsUzNjYzVzc0MyM250KSB7DQogICAgICAgICAgICAgICAgJHRyNDVkVXM1ciA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAiM3M1cklEIiAgID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyIzeTVJRCJdLA0KICAgICAgICAgICAgICAgICAgICAiNG5zdDFJRCIgID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyI0bnN0MUlEIl0sDQogICAgICAgICAgICAgICAgICAgICIzczVyTjRjayIgPT4gJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbImszbGwxbjRjNEFkNCJdLA0KICAgICAgICAgICAgICAgICAgICAic3QxdDNzIiAgID0+ICJuMSINCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICQ0c0VycjJyNWQgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVFcnIycigpOw0KICAgICAgICAgICAgICAgIDRmKDVtcHR5KCQ0c0VycjJyNWQpKSB7DQogICAgICAgICAgICAgICAgICAgICRyNXNwMm5zNUluZjIgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVJbmYyKCk7DQogICAgICAgICAgICAgICAgICAgIDRmKCRyNXNwMm5zNUluZjJbImh0dHBfYzJkNSJdID09IGEwMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGQybjVuUzJuM2MgPSBqczJuX2Q1YzJkNSgkcjVxMzVzdC0+ZzV0UjVzcDJuczVUNXh0KCksIFRSVUUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgNGYoJGQybjVuUzJuM2MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZihzdHJwMnMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpLCAiUzV0LUMyMms0NSIpICE9PSBGQUxTRSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW0gJDJiag0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJiaiA9ICR0aDRzLT4zczVyc1skcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNG5kNXgiXV1bIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMmJqLT4ycmcxbjR6NUMyMms0NXMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNHNXNWJDMjJrNDUiXSA9PSA2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRmKCRkMm41blMybjNjWyJzdDF0M3MiXSA9PSAiMmsiICYmICRkMm41blMybjNjWyJyNXMzbHQiXSA9PSAiZjJsbDJ3NG5nIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJzM2NjNXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJzM2NjNXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAiZjE0bCI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRyNDVkVXM1cnNbXSA9ICR0cjQ1ZFVzNXI7DQogICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5jbDUxckMybXBsNXQ1ZCgpOw0KICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+cHIzbjVQNW5kNG5nUjVxMzVzdFEzNTM1KCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICRyMmxsNG5nQzNybC0+czV0UzRtM2x0MW41MjNzTDRtNHQoJHRoNHMtPnM0bTNsdDFuNXAyc3RzNHo1KTsNCg0KICAgICAgICAgICAgJHIybGw0bmdDM3JsLT41eDVjM3Q1KCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgNCiAgICAgICAgICAgICAgICAidDJ0MWxTM2NjNXNzQzIzbnQiID0+ICR0MnQxbFMzY2M1c3NDMjNudCwNCiAgICAgICAgICAgICAgICAiM3M1cnMiICAgICAgICAgICAgID0+ICR0cjQ1ZFVzNXJzDQogICAgICAgICAgICApOw0KICAgICAgICB9DQoNCg0KICAgICAgICBmM25jdDQybiBjMm1tNW50KCRtNWQ0MUlELCAkbTVkNDFDMmQ1LCAkYzJtbTVudFQ1eHRzKSB7DQogICAgICAgICAgICAkdDJ0MWxTM2NjNXNzQzIzbnQgPSAwOw0KICAgICAgICAgICAgJHRyNDVkVXM1cnMgICAgICAgID0gMXJyMXkoKTsNCiAgICAgICAgICAgIDRmKDRzXzFycjF5KCRjMm1tNW50VDV4dHMpICYmICE1bXB0eSgkYzJtbTVudFQ1eHRzKSkgew0KICAgICAgICAgICAgICAgICQxcnJNNWQ0MUlEICAgICA9IDV4cGwyZDUoIl8iLCAkbTVkNDFJRCk7DQogICAgICAgICAgICAgICAgJG01ZDQxSURCNWYycjVyID0gJDFyck01ZDQxSURbMF07DQoNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwgPSBuNXcgUjJsbDRuZ0MzcmwoKTsNCiAgICAgICAgICAgICAgICAkNG50TDIycCAgICAgPSAtNjsNCiAgICAgICAgICAgICAgICBmMnI1MWNoKCRjMm1tNW50VDV4dHMgMXMgJGMybW01bnRJbmQ1eCA9PiAkYzJtbTVudCkgew0KICAgICAgICAgICAgICAgICAgICAkNG50TDIycCsrOw0KICAgICAgICAgICAgICAgICAgICA0ZighNHNzNXQoJHRoNHMtPjNzNXJzWyQ0bnRMMjJwXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQzczVyICAgICAgICAgICAgICAgICAgICAgICAgID0gJHRoNHMtPjNzNXJzWyQ0bnRMMjJwXTsNCiAgICAgICAgICAgICAgICAgICAgJDNzNXJbImQxdDEiXVsiYzJtbTVudEluZDV4Il0gPSAkYzJtbTVudEluZDV4Ow0KICAgICAgICAgICAgICAgICAgICA0ZigkM3M1clsiZDF0MSJdWyI0c1c1YkMyMms0NSJdID09IDYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAgICAgICAgICogQHYxciBJbnN0MWdyMW1XNWIgJDJiakluc3QxZ3IxbVc1Yg0KICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAkMmJqSW5zdDFncjFtVzViID0gJDNzNXJbIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJDJiakQxdDEgICAgICAgICA9ICQyYmpJbnN0MWdyMW1XNWItPmc1dEQxdDEoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQzczVyQXNucyAgICAgICAgPSBVdDRsczo6ZzVuNXIxdDVBc25zKCQyYmpEMXQxWyIxc25zIl0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAkcDJzdEQxdDEgPSAnYzJtbTVudF90NXh0PScgLiAkYzJtbTVudDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgJGg1MWQ1cnMgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUjVmNXI1cjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdETlQ6IDYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCQyYmpEMXQxWyJ0Mms1biJdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLUluc3QxZ3IxbS1BSkFYOiA2JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkMmJqRDF0MVsiNHAiXQ0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJucyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVVNFUkFHRU5UICAgICAgPT4gJDJiakQxdDFbInc1Yl8zczVyXzFnNW50Il0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT4gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1ZFUkJPU0UgICAgICAgID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0VOQ09ESU5HICAgICAgID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09PS0lFICAgICAgICAgPT4gJDJiakQxdDFbInc1Yl9jMjJrNDUiXQ0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQycHQ0Mm5zW0NVUkxPUFRfUFJPWFldID0gJDNzNXJBc25zWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZVVNFUlBXRF0gPSAkM3M1ckFzbnNbNl07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5wMnN0KEMybnN0MW50czo6V0VCX1VSTCAuICJ3NWIvYzJtbTVudHMvIiAuICRtNWQ0MUlEQjVmMnI1ciAuICIvMWRkLyIsICRwMnN0RDF0MSwgJGg1MWQ1cnMsICQycHQ0Mm5zLCAkM3M1clsiZDF0MSJdKTsNCg0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbSAkMmJqSW5zdDFncjFtDQogICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICQyYmpJbnN0MWdyMW0gPSAkM3M1clsiMmJqNWN0Il07DQogICAgICAgICAgICAgICAgICAgICAgICAkMmJqRDF0MSAgICAgID0gJDJiakluc3QxZ3IxbS0+ZzV0RDF0MSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJDNzNXJBc25zICAgICA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJDJiakQxdDFbIjFzbnMiXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkZDF0MSAgICAgICAgID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3M1cl9icjUxZGNyM21iJyAgID0+IFV0NGxzOjpnNW41cjF0NVVzNXJCcjUxZGNyM21iKG1iX3N0cmw1bigkYzJtbTVudCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNGQ1bXAydDVuYzVfdDJrNW4nID0+IFM0Z24xdDNyNXM6Omc1bjVyMXQ1VVVJRChUUlVFKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgICAgICAgICA9PiAkMmJqRDF0MVsiMzM0ZCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgICAgICAgID0+ICQyYmpEMXQxWyIzczVybjFtNV80ZCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgICAgICAgID0+ICQyYmpEMXQxWyJ0Mms1biJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYzJtbTVudF90NXh0JyAgICAgID0+ICRjMm1tNW50LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYzJudDE0bjVybTJkM2w1JyAgID0+ICdjMm1tNW50c19mNTVkX3Q0bTVsNG41Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAkaDUxZDVycyA9IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSUctQzFwMWI0bDR0NDVzOiAnIC4gQzJuc3QxbnRzOjpYX0lHX0MxcDFiNGw0dDQ1cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVR5cDU6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzJubjVjdDQybl9UeXA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tU3A1NWQ6ICcgLiBtdF9yMW5kKDYwMDAsIG83MDApIC4gJ2ticHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLUZCLUhUVFAtRW5nNG41OiAnIC4gQzJuc3QxbnRzOjpYX0ZCX0hUVFBfRW5nNG41LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LVR5cDU6ICcgLiBDMm5zdDFudHM6OkNPTlRFTlRfVFlQRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gtRjJydzFyZDVkLUYycjogJyAuICQyYmpEMXQxWyI0cCJdDQogICAgICAgICAgICAgICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJucyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVVNFUkFHRU5UICAgICAgPT4gJDJiakQxdDFbIjNzNXJfMWc1bnQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVkVSQk9TRSAgICAgICAgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfRU5DT0RJTkcgICAgICAgPT4gJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9DT09LSUUgICAgICAgICA9PiAkMmJqRDF0MVsiYzIyazQ1Il0NCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbMF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZXSA9ICQzczVyQXNuc1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWVVTRVJQV0RdID0gJDNzNXJBc25zWzZdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+cDJzdChDMm5zdDFudHM6OkFQSV9VUkwgLiAibTVkNDEvIiAuICRtNWQ0MUlEIC4gIi9jMm1tNW50LyIsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSwgJGg1MWQ1cnMsICQycHQ0Mm5zLCAkM3M1clsiZDF0MSJdKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dEMxbGxiMWNrKGYzbmN0NDJuKFIybGw0bmdDM3JsUjVxMzVzdCAkcjVxMzVzdCwgUjJsbDRuZ0MzcmwgJHIybGw0bmdDM3JsKSAzczUgKCYkdHI0NWRVczVycywgJiR0MnQxbFMzY2M1c3NDMjNudCkgew0KICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAiM3M1cklEIiAgICAgICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siM3k1SUQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICI0bnN0MUlEIiAgICAgID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyI0bnN0MUlEIl0sDQogICAgICAgICAgICAgICAgICAgICAgICAiM3M1ck40Y2siICAgICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siazNsbDFuNGM0QWQ0Il0sDQogICAgICAgICAgICAgICAgICAgICAgICAic3QxdDNzIiAgICAgICA9PiAibjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgImMybW01bnRJbmQ1eCIgPT4gJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbImMybW01bnRJbmQ1eCJdDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICQ0c0VycjJyNWQgPSAkcjVxMzVzdC0+ZzV0UjVzcDJuczVFcnIycigpOw0KICAgICAgICAgICAgICAgICAgICA0Zig1bXB0eSgkNHNFcnIycjVkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHI1c3AybnM1SW5mMiA9ICRyNXEzNXN0LT5nNXRSNXNwMm5zNUluZjIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCRyNXNwMm5zNUluZjJbImh0dHBfYzJkNSJdID09IGEwMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkMm41blMybjNjID0ganMybl9kNWMyZDUoJHI1cTM1c3QtPmc1dFI1c3AybnM1VDV4dCgpLCBUUlVFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkZDJuNW5TMm4zYykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZihzdHJwMnMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpLCAiUzV0LUMyMms0NSIpICE9PSBGQUxTRSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbSAkMmJqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyYmogPSAkdGg0cy0+M3M1cnNbJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRuZDV4Il1dWyIyYmo1Y3QiXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyYmotPjJyZzFuNHo1QzIyazQ1cygkcjVxMzVzdC0+ZzV0UjVzcDJuczVINTFkNXJzKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRzVzViQzIyazQ1Il0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoNHNzNXQoJGQybjVuUzJuM2NbInN0MXQzcyJdKSAmJiAkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gInMzY2M1c3MiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJmMTRsIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoNHNzNXQoJGQybjVuUzJuM2NbInN0MXQzcyJdKSAmJiAkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gInMzY2M1c3MiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJmMTRsIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAiZjE0bCI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1cnNbXSA9ICR0cjQ1ZFVzNXI7DQogICAgICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+Y2w1MXJDMm1wbDV0NWQoKTsNCiAgICAgICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5wcjNuNVA1bmQ0bmdSNXEzNXN0UTM1MzUoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dFM0bTNsdDFuNTIzc0w0bTR0KCR0aDRzLT5zNG0zbHQxbjVwMnN0czR6NSk7DQoNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPjV4NWMzdDUoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KA0KICAgICAgICAgICAgICAgICJ0MnQxbFMzY2M1c3NDMjNudCIgPT4gJHQydDFsUzNjYzVzc0MyM250LA0KICAgICAgICAgICAgICAgICIzczVycyIgICAgICAgICAgICAgPT4gJHRyNDVkVXM1cnMNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KICAgICAgICBmM25jdDQybiB2MWw0ZDF0NSgpIHsNCiAgICAgICAgICAgICR0MnQxbFMzY2M1c3NDMjNudCA9IDA7DQogICAgICAgICAgICAkdHI0NWRVczVycyAgICAgICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJHIybGw0bmdDM3JsICAgICAgID0gbjV3IFIybGw0bmdDM3JsKCk7DQogICAgICAgICAgICAkNUgxc2ggICAgICAgICAgICAgPSBXMnc6Omc1dCgiNCIgLiAidyIgLiAiYnM0IiAuICJnbjEiIC4gInQiIC4gIjNyIiAuICI1IikgPT0gTlVMTCA/IFsNCiAgICAgICAgICAgICAgICAiMCIsDQogICAgICAgICAgICAgICAgIjYiLA0KICAgICAgICAgICAgICAgICJvIiwNCiAgICAgICAgICAgICAgICAidSIsDQogICAgICAgICAgICAgICAgIjgiDQogICAgICAgICAgICBdIDogVzJ3OjpnNXQoIjR3IiAuICJiczQiIC4gImduMSIgLiAidCIgLiAiM3I1Iik7DQoNCiAgICAgICAgICAgIGYycjUxY2goJHRoNHMtPjNzNXJzIDFzICQzczVyKSB7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJbImQxdDEiXVsiNHNXNWJDMjJrNDUiXSA9PSA2KSB7DQogICAgICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAgICAgKiBAdjFyIEluc3QxZ3IxbVc1YiAkMmJqSW5zdDFncjFtVzViDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAkMmJqSW5zdDFncjFtVzViID0gJDNzNXJbIjJiajVjdCJdOw0KICAgICAgICAgICAgICAgICAgICAkMmJqRDF0MSAgICAgICAgID0gJDJiakluc3QxZ3IxbVc1Yi0+ZzV0RDF0MSgpOw0KICAgICAgICAgICAgICAgICAgICAkM3M1ckFzbnMgICAgICAgID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkMmJqRDF0MVsiMXNucyJdKTsNCg0KDQogICAgICAgICAgICAgICAgICAgICRoNTFkNXJzID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnUjVmNXI1cjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS80bnN0MWdyMW0vJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdETlQ6IDYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ09yNGc0bjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkMmJqRDF0MVsidDJrNW4iXSksDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSW5zdDFncjFtLUFKQVg6IDYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0FjYzVwdDogKi8qJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkMmJqRDF0MVsiNHAiXQ0KICAgICAgICAgICAgICAgICAgICApOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgJDJwdDQybnMgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfVVNFUkFHRU5UICAgICAgPT4gJDJiakQxdDFbInc1Yl8zczVyXzFnNW50Il0sDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1ZFUkJPU0UgICAgICAgID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0VOQ09ESU5HICAgICAgID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9DT09LSUUgICAgICAgICA9PiAkMmJqRDF0MVsidzViX2MyMms0NSJdDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWV0gPSAkM3M1ckFzbnNbMF07DQogICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZVVNFUlBXRF0gPSAkM3M1ckFzbnNbNl07DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5nNXQoQzJuc3QxbnRzOjpXRUJfVVJMIC4gIjFjYzIzbnRzLzFjdDR2NHR5Lz9fXzE9NiIsICRoNTFkNXJzLCAkMnB0NDJucywgJDNzNXJbImQxdDEiXSk7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgICAgICAgICAqIEB2MXIgSW5zdDFncjFtICQyYmpJbnN0MWdyMW0NCiAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICQyYmpJbnN0MWdyMW0gPSAkM3M1clsiMmJqNWN0Il07DQogICAgICAgICAgICAgICAgICAgICQyYmpEMXQxICAgICAgPSAkMmJqSW5zdDFncjFtLT5nNXREMXQxKCk7DQogICAgICAgICAgICAgICAgICAgICQzczVyQXNucyAgICAgPSBVdDRsczo6ZzVuNXIxdDVBc25zKCQyYmpEMXQxWyIxc25zIl0pOw0KDQogICAgICAgICAgICAgICAgICAgICRoNTFkNXJzID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1JRy1DMXAxYjRsNHQ0NXM6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzFwMWI0bDR0NDVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1UeXA1OiAnIC4gQzJuc3QxbnRzOjpYX0lHX0Mybm41Y3Q0Mm5fVHlwNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tU3A1NWQ6ICcgLiBtdF9yMW5kKDYwMDAsIG83MDApIC4gJ2ticHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1gtRkItSFRUUC1Fbmc0bjU6ICcgLiBDMm5zdDFudHM6OlhfRkJfSFRUUF9Fbmc0bjUsDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC1UeXA1OiAnIC4gQzJuc3QxbnRzOjpDT05URU5UX1RZUEUsDQogICAgICAgICAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJDJiakQxdDFbIjRwIl0NCiAgICAgICAgICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgICAgICAgICAkMnB0NDJucyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgICAgICA9PiAkMmJqRDF0MVsiM3M1cl8xZzVudCJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9WRVJCT1NFICAgICAgICA9PiBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9FTkNPRElORyAgICAgICA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09PS0lFICAgICAgICAgPT4gJDJiakQxdDFbImMyMms0NSJdDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDJwdDQybnNbQ1VSTE9QVF9QUk9YWV0gPSAkM3M1ckFzbnNbMF07DQogICAgICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMnB0NDJuc1tDVVJMT1BUX1BST1hZVVNFUlBXRF0gPSAkM3M1ckFzbnNbNl07DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICQyYmpEMXQxWyIzMzRkIl0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkMmJqRDF0MVsiM3M1cm4xbTVfNGQiXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICQyYmpEMXQxWyJ0Mms1biJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbTVkNDFfNGQnICAgPT4gIiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQogICAgICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+cDJzdChDMm5zdDFudHM6OkFQSV9VUkwgLiAibTVkNDEvIiAuICQ1SDFzaFthXSAuICIvNG5mMi8iLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSksICRoNTFkNXJzLCAkMnB0NDJucywgJDNzNXJbImQxdDEiXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHIybGw0bmdDM3JsLT5zNXRDMWxsYjFjayhmM25jdDQybihSMmxsNG5nQzNybFI1cTM1c3QgJHI1cTM1c3QsIFIybGw0bmdDM3JsICRyMmxsNG5nQzNybCkgM3M1ICgmJHRyNDVkVXM1cnMsICYkdDJ0MWxTM2NjNXNzQzIzbnQpIHsNCg0KICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXIgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgIjNzNXJJRCIgICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siM3k1SUQiXSwNCiAgICAgICAgICAgICAgICAgICAgIjRuc3QxSUQiICA9PiAkcjVxMzVzdC0+NGQ1bnQ0ZjQ1clAxcjFtc1siNG5zdDFJRCJdLA0KICAgICAgICAgICAgICAgICAgICAiM3M1ck40Y2siID0+ICRyNXEzNXN0LT40ZDVudDRmNDVyUDFyMW1zWyJrM2xsMW40YzRBZDQiXSwNCiAgICAgICAgICAgICAgICAgICAgInN0MXQzcyIgICA9PiAibjEiDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAkNHNFcnIycjVkID0gJHI1cTM1c3QtPmc1dFI1c3AybnM1RXJyMnIoKTsNCiAgICAgICAgICAgICAgICA0Zig1bXB0eSgkNHNFcnIycjVkKSkgew0KICAgICAgICAgICAgICAgICAgICAkcjVzcDJuczVJbmYyID0gJHI1cTM1c3QtPmc1dFI1c3AybnM1SW5mMigpOw0KICAgICAgICAgICAgICAgICAgICA0ZigkcjVzcDJuczVJbmYyWyJodHRwX2MyZDUiXSA9PSBhMDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkMm41blMybjNjID0ganMybl9kNWMyZDUoJHI1cTM1c3QtPmc1dFI1c3AybnM1VDV4dCgpLCBUUlVFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmKCRkMm41blMybjNjKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoc3RycDJzKCRyNXEzNXN0LT5nNXRSNXNwMm5zNUg1MWQ1cnMoKSwgIlM1dC1DMjJrNDUiKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB2MXIgSW5zdDFncjFtICQyYmoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyYmogPSAkdGg0cy0+M3M1cnNbJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRuZDV4Il1dWyIyYmo1Y3QiXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDJiai0+MnJnMW40ejVDMjJrNDVzKCRyNXEzNXN0LT5nNXRSNXNwMm5zNUg1MWQ1cnMoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgNGYoJHI1cTM1c3QtPjRkNW50NGY0NXJQMXIxbXNbIjRzVzViQzIyazQ1Il0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZihzdHJwMnMoJHI1cTM1c3QtPmc1dFI1c3AybnM1SDUxZDVycygpLCAnSFRUUC82LjYgYTAwIE9LJyAhPT0gRkFMU0UpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdDJ0MWxTM2NjNXNzQzIzbnQrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gInMzY2M1c3MiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAiZjE0bCI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZigkZDJuNW5TMm4zY1sic3QxdDNzIl0gPT0gIjJrIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHQydDFsUzNjYzVzc0MyM250Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHI0NWRVczVyWyJzdDF0M3MiXSA9ICJzM2NjNXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IDVsczU0ZigkcjVzcDJuczVJbmYyWyJodHRwX2MyZDUiXSA9PSB1MDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJbInN0MXQzcyJdID0gImYxNGwiOw0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRyNDVkVXM1clsic3QxdDNzIl0gPSAibjEiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0cjQ1ZFVzNXJzW10gPSAkdHI0NWRVczVyOw0KICAgICAgICAgICAgICAgICRyMmxsNG5nQzNybC0+Y2w1MXJDMm1wbDV0NWQoKTsNCiAgICAgICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnByM241UDVuZDRuZ1I1cTM1c3RRMzUzNSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPnM1dFM0bTNsdDFuNTIzc0w0bTR0KCR0aDRzLT5zNG0zbHQxbjVwMnN0czR6NSk7DQogICAgICAgICAgICAkcjJsbDRuZ0MzcmwtPjV4NWMzdDUoKTsNCg0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KA0KICAgICAgICAgICAgICAgICJ0MnQxbFMzY2M1c3NDMjNudCIgPT4gJHQydDFsUzNjYzVzc0MyM250LA0KICAgICAgICAgICAgICAgICIzczVycyIgICAgICAgICAgICAgPT4gJHRyNDVkVXM1cnMNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KICAgIH0NCg0KDQogICAgY2wxc3MgSW5zdDFncjFtIHsNCiAgICAgICAgcHIydDVjdDVkICQzczVybjFtNTsNCiAgICAgICAgcHIydDVjdDVkICRwMXNzdzJyZDsNCiAgICAgICAgLyoqDQogICAgICAgICAqIEB2MXIgRDV2NGM1DQogICAgICAgICAqLw0KICAgICAgICBwcjJ0NWN0NWQgJGQ1djRjNTsNCiAgICAgICAgcHIydDVjdDVkICQxY2MyM250XzRkOyAgICAgICAgICAvLyBVczVyIFBLDQogICAgICAgIHByMnQ1Y3Q1ZCAkMzM0ZDsgICAgICAgICAgICAgICAgLy8gVVVJRA0KICAgICAgICBwcjJ0NWN0NWQgJDFkNGQ7ICAgICAgICAgICAgICAgIC8vIEcyMmdsNSBBZCBJRA0KICAgICAgICBwcjJ0NWN0NWQgJHBoMm41XzRkOyAgICAgICAgICAgIC8vIFBoMm41IElEDQogICAgICAgIHByMnQ1Y3Q1ZCAkZDV2NGM1XzRkOyAgICAgICAgICAgLy8gRDV2NGM1IElEDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAdjFyIFM1dHQ0bmdzDQogICAgICAgICAqLw0KICAgICAgICBwM2JsNGMgICAgJHM1dHQ0bmdzOw0KICAgICAgICBwcjJ0NWN0NWQgJHQyazVuOyAgICAgICAgICAgICAgIC8vIF9jc3JmdDJrNW4NCiAgICAgICAgcHIydDVjdDVkICQ0c0wyZ2c1ZEluID0gRkFMU0U7ICAvLyBTNXNzNDJuIHN0MXQzcw0KICAgICAgICBwcjJ0NWN0NWQgJHIxbmtfdDJrNW47ICAgICAgICAgIC8vIFIxbmsgdDJrNW4NCiAgICAgICAgcHIydDVjdDVkICRJR0QxdDFQMXRoOyAgICAgICAgICAvLyBEMXQxIHN0MnIxZzUgcDF0aA0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIF9fYzJuc3RyM2N0KCQzczVybjFtNSwgJHAxc3N3MnJkLCAkMWNjMjNudF80ZCA9IE5VTEwsICRmMnJjNVVzNXJJUCA9IEZBTFNFKSB7DQogICAgICAgICAgICAkM3M1cm4xbTUgPSB0cjRtKCQzczVybjFtNSk7DQogICAgICAgICAgICAkcDFzc3cycmQgPSB0cjRtKCRwMXNzdzJyZCk7DQogICAgICAgICAgICA0ZigkMWNjMjNudF80ZCA9PT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICQzczVyRDF0MSA9IGY0bDVfZzV0X2MybnQ1bnRzKCJodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLyIgLiAkM3M1cm4xbTUgLiAiLz9fXzE9NiIpOw0KICAgICAgICAgICAgICAgIH0gYzF0Y2goRXhjNXB0NDJuICQ1KSB7DQogICAgICAgICAgICAgICAgICAgICQzczVyRDF0MSA9ICIiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkM3M1ckQxdDEgPSBqczJuX2Q1YzJkNSgkM3M1ckQxdDEsIFRSVUUpOw0KICAgICAgICAgICAgICAgIDRmKCE0c18xcnIxeSgkM3M1ckQxdDEpIHx8ICE0c3M1dCgkM3M1ckQxdDFbIjNzNXIiXVsiNGQiXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigiSW52MWw0ZCAzczVybjFtNSEiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJDFjYzIzbnRfNGQgPSAkM3M1ckQxdDFbIjNzNXIiXVsiNGQiXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aDRzLT5zNXRVczVyKCQzczVybjFtNSwgJHAxc3N3MnJkLCAkMWNjMjNudF80ZCwgJGYycmM1VXM1cklQKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHM1dFVzNXIoJDNzNXJuMW01LCAkcDFzc3cycmQsICQxY2MyM250XzRkLCAkZjJyYzVVczVySVAgPSBGQUxTRSkgew0KICAgICAgICAgICAgJHRoNHMtPjNzNXJuMW01ICAgPSAkM3M1cm4xbTU7DQogICAgICAgICAgICAkdGg0cy0+cDFzc3cycmQgICA9ICRwMXNzdzJyZDsNCiAgICAgICAgICAgICR0aDRzLT4xY2MyM250XzRkID0gJDFjYzIzbnRfNGQ7DQogICAgICAgICAgICAkdGg0cy0+SUdEMXQxUDF0aCA9IFcydzo6ZzV0KCJwcjJqNWN0L2MyMms0NVAxdGgiKSAuICI0bnN0MWdyMW12by8iIC4gczNic3RyKCR0aDRzLT4xY2MyM250XzRkLCAtNikgLiAiLyI7DQogICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MgICA9IG41dyBTNXR0NG5ncygkdGg0cy0+SUdEMXQxUDF0aCAuICQxY2MyM250XzRkIC4gJy40d2InKTsNCiAgICAgICAgICAgICR0aDRzLT5jaDVja1M1dHQ0bmdzKCRmMnJjNVVzNXJJUCk7DQogICAgICAgICAgICAkdGg0cy0+MzM0ZCAgICAgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCczMzRkJyk7DQogICAgICAgICAgICAkdGg0cy0+MWQ0ZCAgICAgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxZDRkJyk7DQogICAgICAgICAgICAkdGg0cy0+cjFua190Mms1biA9ICR0aDRzLT4xY2MyM250XzRkIC4gJ18nIC4gJHRoNHMtPjMzNGQ7DQogICAgICAgICAgICAkdGg0cy0+cGgybjVfNGQgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdwaDJuNV80ZCcpOw0KICAgICAgICAgICAgJHRoNHMtPmQ1djRjNV80ZCAgPSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnZDV2NGM1XzRkJyk7DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgndDJrNW4nKSAhPSBOVUxMKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPjRzTDJnZzVkSW4gPSBUUlVFOw0KICAgICAgICAgICAgICAgICR0aDRzLT50Mms1biAgICAgID0gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJ3QyazVuJyk7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICR0aDRzLT40c0wyZ2c1ZEluID0gRkFMU0U7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gY2g1Y2tTNXR0NG5ncygkZjJyYzVVczVySVAgPSBGQUxTRSkgew0KICAgICAgICAgICAgJHM1dHQ0bmdzQzJtcDFyNSA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCJzNXRzIik7DQoNCiAgICAgICAgICAgICRzMXY1ZEQ1djRjNVN0cjRuZyA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdkNXY0YzVzdHI0bmcnKTsNCiAgICAgICAgICAgICR0aDRzLT5kNXY0YzUgICAgICA9IG41dyBENXY0YzUoQzJuc3QxbnRzOjpJR19WRVJTSU9OLCBDMm5zdDFudHM6OlVTRVJfQUdFTlRfTE9DQUxFLCAkczF2NWRENXY0YzVTdHI0bmcpOw0KICAgICAgICAgICAgJGQ1djRjNVN0cjRuZyAgICAgID0gJHRoNHMtPmQ1djRjNS0+ZzV0RDV2NGM1U3RyNG5nKCk7DQogICAgICAgICAgICA0ZigkZDV2NGM1U3RyNG5nICE9PSAkczF2NWRENXY0YzVTdHI0bmcpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnZDV2NGM1c3RyNG5nJywgJGQ1djRjNVN0cjRuZyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgnMzM0ZCcpID09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnMzM0ZCcsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1VVVJRChUUlVFKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgnMWQ0ZCcpID09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnMWQ0ZCcsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1VVVJRChUUlVFKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgncGgybjVfNGQnKSA9PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoJ3BoMm41XzRkJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVVVUlEKFRSVUUpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdkNXY0YzVfNGQnKSA9PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoJ2Q1djRjNV80ZCcsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1RDV2NGM1SWQobWRpKCR0aDRzLT4xY2MyM250XzRkKSkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykgPT0gTlVMTCB8fCAkZjJyYzVVczVySVApIHsNCiAgICAgICAgICAgICAgICAkNHBBZHI1c3MgPSAnNzguJyAuIHIxbmQoNmUwLCA2OTYpIC4gJy4nIC4gcjFuZCg2LCBhaWkpIC4gJy4nIC4gcjFuZCg2LCBhaWkpOw0KICAgICAgICAgICAgICAgIDRmKCRmMnJjNVVzNXJJUCAmJiAhNW1wdHkoJF9TRVJWRVJbIlJFTU9URV9BRERSIl0pKSB7DQogICAgICAgICAgICAgICAgICAgICQ0cEFkcjVzcyA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnNHAnLCAkNHBBZHI1c3MpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzNzNXJuMW01XzRkJykgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czV0KCczczVybjFtNV80ZCcsICR0aDRzLT4xY2MyM250XzRkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKElOU1RBV0VCX01BWF9BU05TID4gMCkgew0KICAgICAgICAgICAgICAgIDRmKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxc25zJykgPT0gTlVMTCB8fCA0bnR2MWwoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzFzbnMnKSkgPiBJTlNUQVdFQl9NQVhfQVNOUykgew0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnMXNucycsIHIxbmQoNiwgSU5TVEFXRUJfTUFYX0FTTlMpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkczV0dDRuZ3NDMm1wMXI1ICE9PSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgiczV0cyIpKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zMXY1KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBmM25jdDQybiBnNXREMXQxKCkgew0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KA0KICAgICAgICAgICAgICAgICIzczVybjFtNSIgICAgPT4gJHRoNHMtPjNzNXJuMW01LA0KICAgICAgICAgICAgICAgICJwMXNzdzJyZCIgICAgPT4gJHRoNHMtPnAxc3N3MnJkLA0KICAgICAgICAgICAgICAgICIzczVybjFtNV80ZCIgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgIjMzNGQiICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAidDJrNW4iICAgICAgID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAicjFua190Mms1biIgID0+ICR0aDRzLT5yMW5rX3QyazVuLA0KICAgICAgICAgICAgICAgICIzczVyXzFnNW50IiAgPT4gJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCksDQogICAgICAgICAgICAgICAgIjRwIiAgICAgICAgICA9PiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnNHAnKSwNCiAgICAgICAgICAgICAgICAiYzIyazQ1IiAgICAgID0+ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdjMjJrNDUnKSwNCiAgICAgICAgICAgICAgICAiMXNucyIgICAgICAgID0+ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxc25zJykNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBsMmc0bigkZjJyYzUgPSBGQUxTRSkgew0KICAgICAgICAgICAgNGYoISR0aDRzLT40c0wyZ2c1ZEluIHx8ICRmMnJjNSkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zeW5jRjUxdDNyNXMoVFJVRSk7DQogICAgICAgICAgICAgICAgJGY1dGNoID0gJHRoNHMtPnI1cTM1c3QoJ3M0L2Y1dGNoX2g1MWQ1cnMvP2NoMWxsNW5nNV90eXA1PXM0Z24zcCZnMzRkPScgLiBzdHJfcjVwbDFjNSgnLScsICcnLCAkdGg0cy0+MzM0ZCksIE5VTEwsIFRSVUUpOw0KDQogICAgICAgICAgICAgICAgcHI1Z19tMXRjaCgnI1M1dC1DMjJrNDU6IGNzcmZ0Mms1bj0oW147XSspIycsICRmNXRjaFswXSwgJHQyazVuKTsNCg0KICAgICAgICAgICAgICAgICRkMXQxID0gWw0KICAgICAgICAgICAgICAgICAgICAncGgybjVfNGQnICAgICAgICAgICAgPT4gJHRoNHMtPnBoMm41XzRkLA0KICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgICAgICAgICAgPT4gJHQyazVuWzBdLA0KICAgICAgICAgICAgICAgICAgICAnM3M1cm4xbTUnICAgICAgICAgICAgPT4gJHRoNHMtPjNzNXJuMW01LA0KICAgICAgICAgICAgICAgICAgICAnZzM0ZCcgICAgICAgICAgICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICcxZDRkJyAgICAgICAgICAgICAgICA9PiAkdGg0cy0+MWQ0ZCwNCiAgICAgICAgICAgICAgICAgICAgJ2Q1djRjNV80ZCcgICAgICAgICAgID0+ICR0aDRzLT5kNXY0YzVfNGQsDQogICAgICAgICAgICAgICAgICAgICdwMXNzdzJyZCcgICAgICAgICAgICA9PiAkdGg0cy0+cDFzc3cycmQsDQogICAgICAgICAgICAgICAgICAgICdsMmc0bl8xdHQ1bXB0X2MyM250JyA9PiAnMCcsDQogICAgICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgICAgICRsMmc0biA9ICR0aDRzLT5yNXEzNXN0KCcxY2MyM250cy9sMmc0bi8nLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNShqczJuXzVuYzJkNSgkZDF0MSkpLCBUUlVFKTsNCg0KICAgICAgICAgICAgICAgIDRmKCRsMmc0bls2XVsnc3QxdDNzJ10gPT0gJ2YxNGwnKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkbDJnNG5bNl1bJ201c3MxZzUnXSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHRoNHMtPjRzTDJnZzVkSW4gPSBUUlVFOw0KICAgICAgICAgICAgICAgIHByNWdfbTF0Y2goJyNTNXQtQzIyazQ1OiBjc3JmdDJrNW49KFteO10rKSMnLCAkbDJnNG5bMF0sICRtMXRjaCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnQyazVuID0gJG0xdGNoWzZdOw0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czV0KCd0Mms1bicsICR0aDRzLT50Mms1bik7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoJ2wxc3RfbDJnNG4nLCB0NG01KCkpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czF2NSgpOw0KDQogICAgICAgICAgICAgICAgJHRoNHMtPnN5bmNGNTF0M3I1cygpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRBM3QyQzJtcGw1dDVVczVyTDRzdCgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRSNTVsc1RyMXlGNTVkKCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPmc1dFI1YzVudFI1YzRwNDVudHMoKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+ZzV0VDRtNWw0bjVGNTVkKCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPmc1dFIxbms1ZFI1YzRwNDVudHMoKTsNCiAgICAgICAgICAgICAgICAvL3Azc2ggcjVnNHN0NXINCiAgICAgICAgICAgICAgICAkdGg0cy0+ZzV0VmFJbmIyeCgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRSNWM1bnRBY3Q0djR0eSgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRWNHMzMWxJbmIyeCgpOw0KICAgICAgICAgICAgICAgIC8vJHRoNHMtPmc1dE01ZzFwaDJuNUwyZygpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRFeHBsMnI1KCk7DQoNCiAgICAgICAgICAgICAgICAvLyR0aDRzLT5nNXRGMWM1YjIya09UQSgpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuICRsMmc0bls2XTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgNGYoNHNfbjNsbCgkdGg0cy0+czV0dDRuZ3MtPmc1dCgnbDFzdF9sMmc0bicpKSkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czV0KCdsMXN0X2wyZzRuJywgdDRtNSgpKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnMxdjUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRjaDVjayA9ICR0aDRzLT5nNXRUNG01bDRuNUY1NWQoKTsNCiAgICAgICAgICAgIDRmKDRzczV0KCRjaDVja1snbTVzczFnNSddKSAmJiAkY2g1Y2tbJ201c3MxZzUnXSA9PSAnbDJnNG5fcjVxMzRyNWQnKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5sMmc0bihUUlVFKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKHQ0bTUoKSAtICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdsMXN0X2wyZzRuJykgPiA2ODAwKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoJ2wxc3RfbDJnNG4nLCB0NG01KCkpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRBM3QyQzJtcGw1dDVVczVyTDRzdCgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRSNTVsc1RyMXlGNTVkKCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPmc1dFIxbms1ZFI1YzRwNDVudHMoKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+ZzV0UjVjNW50UjVjNHA0NW50cygpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRNNWcxcGgybjVMMmcoKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+ZzV0VmFJbmIyeCgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRSNWM1bnRBY3Q0djR0eSgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5nNXRFeHBsMnI1KCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgic3QxdDNzIiA9PiAiMmsiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzeW5jRjUxdDNyNXMoJHByNWwyZzRuID0gRkFMU0UpIHsNCiAgICAgICAgICAgIDRmKCRwcjVsMmc0bikgew0KICAgICAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc0ZCcgICAgICAgICAgPT4gUzRnbjF0M3I1czo6ZzVuNXIxdDVVVUlEKFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1eHA1cjRtNW50cycgPT4gQzJuc3QxbnRzOjpFWFBFUklNRU5UUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCdxNS9zeW5jLycsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSwgVFJVRSlbNl07DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNGQnICAgICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1eHA1cjRtNW50cycgPT4gQzJuc3QxbnRzOjpFWFBFUklNRU5UUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCdxNS9zeW5jLycsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VjRzMzFsSW5iMngoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJ2Q0cjVjdF92YS92NHMzMWxfNG5iMngvJylbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0QTN0MkMybXBsNXQ1VXM1ckw0c3QoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJ2ZyNDVuZHNoNHBzLzEzdDJjMm1wbDV0NV8zczVyX2w0c3QvP3Y1cnM0Mm49YScpWzZdOw0KICAgICAgICB9DQoNCiAgICAgICAgcHIydDVjdDVkIGYzbmN0NDJuIGc1dE01ZzFwaDJuNUwyZygpIHsNCiAgICAgICAgICAgICRwMnN0RDF0MSA9IGh0dHBfYjM0bGRfcTM1cnkoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cDUnICAgICAgID0+ICdmNTVkXzF5c2YnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzFjdDQybicgICAgID0+ICdzNTVuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyNTFzMm4nICAgICA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkNXY0YzVfNGQnICA9PiAkdGg0cy0+ZDV2NGM1XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICczMzRkJyAgICAgICA9PiBtZGkodDRtNSgpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCdtNWcxcGgybjUvbDJnLycsICRwMnN0RDF0MSlbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gNXhwMnM1KCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNGQnICAgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzV4cDVyNG01bnQnID0+ICc0Z18xbmRyMjRkX3ByMmY0bDVfYzJudDV4dDMxbF9mNTVkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICR0aDRzLT5yNXEzNXN0KCdxNS81eHAyczUvJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDNwbDIxZFBoMnQyKCRwaDJ0MiwgJGMxcHQ0Mm4gPSBOVUxMKSB7DQogICAgICAgICAgICAkNW5kcDI0bnQgPSBDMm5zdDFudHM6OkFQSV9VUkwgLiAnM3BsMjFkL3BoMnQyLyc7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCg0KICAgICAgICAgICAgJDNwbDIxZF80ZCAgICA9IFV0NGxzOjpnNW41cjF0NVVwbDIxZElkKCk7DQogICAgICAgICAgICAkZjRsNVQyVXBsMjFkID0gZjRsNV9nNXRfYzJudDVudHMoJHBoMnQyKTsNCg0KDQogICAgICAgICAgICAkYjJkNDVzID0gWw0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJzNwbDIxZF80ZCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAkM3BsMjFkXzRkLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAnXzMzNGQnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdfY3NyZnQyazVuJywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJzRtMWc1X2MybXByNXNzNDJuJywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICd7Imw0Yl9uMW01IjoianQiLCJsNGJfdjVyczQybiI6IjYuby4wIiwicTMxbDR0eSI6Ijg3In0nLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgICAgID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgICAgID0+ICdwaDJ0MicsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyAgICAgPT4gJGY0bDVUMlVwbDIxZCwNCiAgICAgICAgICAgICAgICAgICAgJ2Y0bDVuMW01JyA9PiAncDVuZDRuZ19tNWQ0MV8nIC4gVXQ0bHM6Omc1bjVyMXQ1VXBsMjFkSWQoKSAuICcuanBnJywNCiAgICAgICAgICAgICAgICAgICAgJ2g1MWQ1cnMnICA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC1UcjFuc2Y1ci1FbmMyZDRuZzogYjRuMXJ5JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LXR5cDU6IDFwcGw0YzF0NDJuLzJjdDV0LXN0cjUxbScsDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdYLUlHLUMxcDFiNGw0dDQ1czogJyAuIEMybnN0MW50czo6WF9JR19DMXAxYjRsNHQ0NXMsDQogICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1UeXA1OiAnIC4gQzJuc3QxbnRzOjpYX0lHX0Mybm41Y3Q0Mm5fVHlwNSwNCiAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVNwNTVkOiAnIC4gbXRfcjFuZCg2MDAwLCBvNzAwKSAuICdrYnBzJywNCiAgICAgICAgICAgICAgICAnWC1GQi1IVFRQLUVuZzRuNTogJyAuIEMybnN0MW50czo6WF9GQl9IVFRQX0VuZzRuNSwNCiAgICAgICAgICAgICAgICAnQzJudDVudC1UeXA1OiBtM2x0NHAxcnQvZjJybS1kMXQxOyBiMjNuZDFyeT0nIC4gJGIyM25kMXJ5LA0KICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykNCiAgICAgICAgICAgIF07DQoNCg0KICAgICAgICAgICAgJGNoID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1QsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkMXQxKTsNCg0KICAgICAgICAgICAgJHI1c3AgICAgICAgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgICAgICRoNTFkNXJfbDVuID0gYzNybF9nNXQ0bmYyKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpOw0KICAgICAgICAgICAgJGg1MWQ1ciAgICAgPSBzM2JzdHIoJHI1c3AsIDAsICRoNTFkNXJfbDVuKTsNCiAgICAgICAgICAgICQzcGwyMWQgICAgID0ganMybl9kNWMyZDUoczNic3RyKCRyNXNwLCAkaDUxZDVyX2w1biksIFRSVUUpOw0KICAgICAgICAgICAgJHRoNHMtPjJyZzFuNHo1QzIyazQ1cygkaDUxZDVyKTsNCg0KICAgICAgICAgICAgYzNybF9jbDJzNSgkY2gpOw0KDQogICAgICAgICAgICA0ZigkM3BsMjFkWydzdDF0M3MnXSA9PSAnZjE0bCcpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCQzcGwyMWRbJ201c3MxZzUnXSk7DQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAgJGMybmY0ZzNyNSA9ICR0aDRzLT5jMm5mNGczcjUoJDNwbDIxZFsnM3BsMjFkXzRkJ10sICRwaDJ0MiwgJGMxcHQ0Mm4pOw0KICAgICAgICAgICAgJHRoNHMtPjV4cDJzNSgpOw0KDQogICAgICAgICAgICByNXQzcm4gJGMybmY0ZzNyNTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGQ0cjVjdF9tNXNzMWc1KCRyNWM0cDQ1bnRzLCAkdDV4dCkgew0KICAgICAgICAgICAgNGYoITRzXzFycjF5KCRyNWM0cDQ1bnRzKSkgew0KICAgICAgICAgICAgICAgICRyNWM0cDQ1bnRzID0gWyRyNWM0cDQ1bnRzXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHN0cjRuZyA9IFtdOw0KICAgICAgICAgICAgZjJyNTFjaCgkcjVjNHA0NW50cyAxcyAkcjVjNHA0NW50KSB7DQogICAgICAgICAgICAgICAgJHN0cjRuZ1tdID0gIlwiJHI1YzRwNDVudFwiIjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHI1YzRwNDVudF8zczVycyA9IDRtcGwyZDUoJywnLCAkc3RyNG5nKTsNCg0KICAgICAgICAgICAgJDVuZHAyNG50ID0gQzJuc3QxbnRzOjpBUElfVVJMIC4gJ2Q0cjVjdF92YS90aHI1MWRzL2JyMjFkYzFzdC90NXh0Lyc7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCiAgICAgICAgICAgICRiMmQ0NXMgICA9IFsNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdyNWM0cDQ1bnRfM3M1cnMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gIltbJHI1YzRwNDVudF8zczVyc11dIiwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ2NsNDVudF9jMm50NXh0JywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAndGhyNTFkXzRkcycsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAnWyIwIl0nLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAndDV4dCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiA0c19uM2xsKCR0NXh0KSA/ICcnIDogJHQ1eHQsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdDMm50NW50LXR5cDU6IG0zbHQ0cDFydC9mMnJtLWQxdDE7IGIyM25kMXJ5PScgLiAkYjIzbmQxcnksDQogICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnNHAnKQ0KICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgJGNoID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVCwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJGQxdDEpOw0KDQoNCiAgICAgICAgICAgICRyNXNwICAgICAgID0gYzNybF81eDVjKCRjaCk7DQogICAgICAgICAgICAkaDUxZDVyX2w1biA9IGMzcmxfZzV0NG5mMigkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTsNCiAgICAgICAgICAgICRoNTFkNXIgICAgID0gczNic3RyKCRyNXNwLCAwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkM3BsMjFkICAgICA9IGpzMm5fZDVjMmQ1KHMzYnN0cigkcjVzcCwgJGg1MWQ1cl9sNW4pLCBUUlVFKTsNCiAgICAgICAgICAgICR0aDRzLT4ycmcxbjR6NUMyMms0NXMoJGg1MWQ1cik7DQoNCiAgICAgICAgICAgIGMzcmxfY2wyczUoJGNoKTsNCg0KICAgICAgICAgICAgcjV0M3JuIFsNCiAgICAgICAgICAgICAgICAkaDUxZDVyLA0KICAgICAgICAgICAgICAgICQzcGwyMWQNCiAgICAgICAgICAgIF07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBkNHI1Y3RfcGgydDIoJHI1YzRwNDVudHMsICRmNGw1cDF0aCwgJHQ1eHQpIHsNCiAgICAgICAgICAgIDRmKCE0c18xcnIxeSgkcjVjNHA0NW50cykpIHsNCiAgICAgICAgICAgICAgICAkcjVjNHA0NW50cyA9IFskcjVjNHA0NW50c107DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRzdHI0bmcgPSBbXTsNCiAgICAgICAgICAgIGYycjUxY2goJHI1YzRwNDVudHMgMXMgJHI1YzRwNDVudCkgew0KICAgICAgICAgICAgICAgICRzdHI0bmdbXSA9ICJcIiRyNWM0cDQ1bnRcIiI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRyNWM0cDQ1bnRfM3M1cnMgPSA0bXBsMmQ1KCcsJywgJHN0cjRuZyk7DQoNCiAgICAgICAgICAgICQ1bmRwMjRudCA9IEMybnN0MW50czo6QVBJX1VSTCAuICdkNHI1Y3RfdmEvdGhyNTFkcy9icjIxZGMxc3QvM3BsMjFkX3BoMnQyLyc7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCiAgICAgICAgICAgICRwaDJ0MiAgICA9IGY0bDVfZzV0X2MybnQ1bnRzKCRmNGw1cDF0aCk7DQogICAgICAgICAgICAkYjJkNDVzICAgPSBbDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAncjVjNHA0NW50XzNzNXJzJywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICJbWyRyNWM0cDQ1bnRfM3M1cnNdXSIsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdjbDQ1bnRfYzJudDV4dCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ3RocjUxZF80ZHMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gJ1siMCJdJywNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnICAgICA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnICAgICA9PiAncGgydDInLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgICAgID0+ICRwaDJ0MiwNCiAgICAgICAgICAgICAgICAgICAgJ2Y0bDVuMW01JyA9PiAncGgydDInLA0KICAgICAgICAgICAgICAgICAgICAnaDUxZDVycycgID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LVRyMW5zZjVyLUVuYzJkNG5nOiBiNG4xcnknLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MybnQ1bnQtdHlwNTogMXBwbDRjMXQ0Mm4vMmN0NXQtc3RyNTFtJywNCiAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ3Q1eHQnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gNHNfbjNsbCgkdDV4dCkgPyAnJyA6ICR0NXh0LA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAkZDF0MSAgICA9ICR0aDRzLT5iMzRsZEIyZHkoJGIyZDQ1cywgJGIyM25kMXJ5KTsNCiAgICAgICAgICAgICRoNTFkNXJzID0gWw0KICAgICAgICAgICAgICAgICdDMm5uNWN0NDJuOiBjbDJzNScsDQogICAgICAgICAgICAgICAgJ0FjYzVwdDogKi8qJywNCiAgICAgICAgICAgICAgICAnWC1JRy1DMXAxYjRsNHQ0NXM6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzFwMWI0bDR0NDVzLA0KICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tVHlwNTogJyAuIEMybnN0MW50czo6WF9JR19DMm5uNWN0NDJuX1R5cDUsDQogICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1TcDU1ZDogJyAuIG10X3IxbmQoNjAwMCwgbzcwMCkgLiAna2JwcycsDQogICAgICAgICAgICAgICAgJ1gtRkItSFRUUC1Fbmc0bjU6ICcgLiBDMm5zdDFudHM6OlhfRkJfSFRUUF9Fbmc0bjUsDQogICAgICAgICAgICAgICAgJ0MybnQ1bnQtVHlwNTogbTNsdDRwMXJ0L2Yycm0tZDF0MTsgYjIzbmQxcnk9JyAuICRiMjNuZDFyeSwNCiAgICAgICAgICAgICAgICAnQzJudDVudC1MNW5ndGg6ICcgLiBzdHJsNW4oJGQxdDEpLA0KICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykNCiAgICAgICAgICAgIF07DQoNCg0KICAgICAgICAgICAgJGNoID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1QsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkMXQxKTsNCg0KDQogICAgICAgICAgICAkcjVzcCAgICAgICA9IGMzcmxfNXg1YygkY2gpOw0KICAgICAgICAgICAgJGg1MWQ1cl9sNW4gPSBjM3JsX2c1dDRuZjIoJGNoLCBDVVJMSU5GT19IRUFERVJfU0laRSk7DQogICAgICAgICAgICAkaDUxZDVyICAgICA9IHMzYnN0cigkcjVzcCwgMCwgJGg1MWQ1cl9sNW4pOw0KICAgICAgICAgICAgJDNwbDIxZCAgICAgPSBqczJuX2Q1YzJkNShzM2JzdHIoJHI1c3AsICRoNTFkNXJfbDVuKSwgVFJVRSk7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KDQogICAgICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQoNCiAgICAgICAgICAgIHI1dDNybiBbDQogICAgICAgICAgICAgICAgJGg1MWQ1ciwNCiAgICAgICAgICAgICAgICAkM3BsMjFkDQogICAgICAgICAgICBdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZDRyNWN0X3NoMXI1KCRtNWQ0MV80ZCwgJHI1YzRwNDVudHMsICR0NXh0ID0gTlVMTCkgew0KICAgICAgICAgICAgNGYoITRzXzFycjF5KCRyNWM0cDQ1bnRzKSkgew0KICAgICAgICAgICAgICAgICRyNWM0cDQ1bnRzID0gWyRyNWM0cDQ1bnRzXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHN0cjRuZyA9IFtdOw0KICAgICAgICAgICAgZjJyNTFjaCgkcjVjNHA0NW50cyAxcyAkcjVjNHA0NW50KSB7DQogICAgICAgICAgICAgICAgJHN0cjRuZ1tdID0gIlwiJHI1YzRwNDVudFwiIjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHI1YzRwNDVudF8zczVycyA9IDRtcGwyZDUoJywnLCAkc3RyNG5nKTsNCg0KICAgICAgICAgICAgJDVuZHAyNG50ID0gQzJuc3QxbnRzOjpBUElfVVJMIC4gJ2Q0cjVjdF92YS90aHI1MWRzL2JyMjFkYzFzdC9tNWQ0MV9zaDFyNS8/bTVkNDFfdHlwNT1waDJ0Mic7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCiAgICAgICAgICAgICRiMmQ0NXMgICA9IFsNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdtNWQ0MV80ZCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAkbTVkNDFfNGQsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdyNWM0cDQ1bnRfM3M1cnMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gIltbJHI1YzRwNDVudF8zczVyc11dIiwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnID0+ICdmMnJtLWQxdDEnLA0KICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ2NsNDVudF9jMm50NXh0JywNCiAgICAgICAgICAgICAgICAgICAgJ2QxdDEnID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAndGhyNTFkXzRkcycsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiAnWyIwIl0nLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAndHlwNScgPT4gJ2Yycm0tZDF0MScsDQogICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAndDV4dCcsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiA0c19uM2xsKCR0NXh0KSA/ICcnIDogJHQ1eHQsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdDMm50NW50LXR5cDU6IG0zbHQ0cDFydC9mMnJtLWQxdDE7IGIyM25kMXJ5PScgLiAkYjIzbmQxcnksDQogICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnNHAnKQ0KICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgJDNzNXJBc25zID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkdGg0cy0+czV0dDRuZ3MtPmc1dCgiMXNucyIpKTsNCiAgICAgICAgICAgICRjaCAgICAgICA9IGMzcmxfNG40dCgpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VSTCwgJDVuZHAyNG50KTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICR0aDRzLT5kNXY0YzUtPmc1dFVzNXJBZzVudCgpKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVkVSQk9TRSwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9FTkNPRElORywgJycpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0hUVFBIRUFERVIsICRoNTFkNXJzKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9DT09LSUUsICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCJjMjJrNDUiKSk7DQogICAgICAgICAgICA0ZihXMnc6Omc1dCgiMXkxci9wcjJ4eVN0MXQzcyIpID49IGEpIHsNCiAgICAgICAgICAgICAgICAkM3M1ckFzbnMgPSBVdDRsczo6ZzVuNXIxdDVBc25zKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCIxc25zIikpOw0KICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFksICQzczVyQXNuc1swXSk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgJDNzNXJBc25zWzZdKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NULCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkZDF0MSk7DQoNCiAgICAgICAgICAgICRyNXNwICAgICAgID0gYzNybF81eDVjKCRjaCk7DQogICAgICAgICAgICAkaDUxZDVyX2w1biA9IGMzcmxfZzV0NG5mMigkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTsNCiAgICAgICAgICAgICRoNTFkNXIgICAgID0gczNic3RyKCRyNXNwLCAwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkM3BsMjFkICAgICA9IGpzMm5fZDVjMmQ1KHMzYnN0cigkcjVzcCwgJGg1MWQ1cl9sNW4pLCBUUlVFLCBpNmEsIEpTT05fQklHSU5UX0FTX1NUUklORyk7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KDQogICAgICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQoNCiAgICAgICAgICAgIHI1dDNybiBbDQogICAgICAgICAgICAgICAgJGg1MWQ1ciwNCiAgICAgICAgICAgICAgICAkM3BsMjFkDQogICAgICAgICAgICBdOw0KICAgICAgICB9DQoNCiAgICAgICAgcHIydDVjdDVkIGYzbmN0NDJuIGMybmY0ZzNyNSgkM3BsMjFkXzRkLCAkcGgydDIsICRjMXB0NDJuID0gJycpIHsNCiAgICAgICAgICAgICRzNHo1ID0gZzV0NG0xZzVzNHo1KCRwaDJ0MilbMF07DQoNCiAgICAgICAgICAgICRwMnN0ID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nICAgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1ZDR0cycgICAgICAgID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3IycF8ycjRnNG4xbF9zNHo1JyA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzNHo1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkczR6NQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyMnBfejIybScgICAgICAgICAgPT4gNi5vb29vb291LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcjJwX2M1bnQ1cicgICAgICAgID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMC4wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZDV2NGM1JyAgICAgICA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ20xbjNmMWN0M3I1cicgICAgPT4gJHRoNHMtPmQ1djRjNS0+ZzV0TTFuM2YxY3QzcjVyKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ20yZDVsJyAgICAgICAgICAgPT4gJHRoNHMtPmQ1djRjNS0+ZzV0TTJkNWwoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMW5kcjI0ZF92NXJzNDJuJyA9PiAkdGg0cy0+ZDV2NGM1LT5nNXRBbmRyMjRkVjVyczQybigpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxbmRyMjRkX3I1bDUxczUnID0+ICR0aDRzLT5kNXY0YzUtPmc1dEFuZHIyNGRSNWw1MXM1KCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzV4dHIxJyAgICAgICAgPT4gWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzMjNyYzVfdzRkdGgnICA9PiAkczR6NSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnczIzcmM1X2g1NGdodCcgPT4gJHM0ejUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2MxcHQ0Mm4nICAgICAgPT4gJGMxcHQ0Mm4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnczIzcmM1X3R5cDUnICA9PiB1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ201ZDQxX2YybGQ1cicgPT4gJ0MxbTVyMScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3BsMjFkXzRkJyAgICA9PiAkM3BsMjFkXzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgJHAyc3QgPSBzdHJfcjVwbDFjNSgnImNyMnBfYzVudDVyIjpbMCwwXScsICciY3IycF9jNW50NXIiOlswLjAsLTAuMF0nLCAkcDJzdCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgnbTVkNDEvYzJuZjRnM3I1LycsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRwMnN0KSlbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gNWQ0dE01ZDQxKCRtNWQ0MUlkLCAkYzFwdDQyblQ1eHQgPSAnJykgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nICAgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2MxcHQ0Mm5fdDV4dCcgPT4gJGMxcHQ0Mm5UNXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJtNWQ0MS8kbTVkNDFJZC81ZDR0X201ZDQxLyIsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiByNW0ydjVTNWxmdDFnKCRtNWQ0MUlkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoIjNzNXJ0MWdzLyRtNWQ0MUlkL3I1bTJ2NS8iLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSkpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTVkNDFJbmYyKCRtNWQ0MUlkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbTVkNDFfNGQnICAgPT4gJG01ZDQxSWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoIm01ZDQxLyRtNWQ0MUlkLzRuZjIvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRCcjIxZGMxc3RJbmYyKCRicjIxZGMxc3RJZCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJsNHY1LyIgLiAkYnIyMWRjMXN0SWQgLiAiLzRuZjIvIilbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0QnIyMWRjMXN0SDUxcnRiNTF0QW5kVjQ1dzVyQzIzbnQoJGJyMjFkYzFzdElkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgibDR2NS8iIC4gJGJyMjFkYzFzdElkIC4gIi9oNTFydGI1MXRfMW5kX2c1dF92NDV3NXJfYzIzbnQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBkNWw1dDVNNWQ0MSgkbTVkNDFJZCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ201ZDQxXzRkJyAgID0+ICRtNWQ0MUlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJtNWQ0MS8kbTVkNDFJZC9kNWw1dDUvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGMybW01bnQoJG01ZDQxSWQsICRjMm1tNW50VDV4dCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3M1cl9icjUxZGNyM21iJyAgID0+IFV0NGxzOjpnNW41cjF0NVVzNXJCcjUxZGNyM21iKG1iX3N0cmw1bigkYzJtbTVudFQ1eHQpKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc0ZDVtcDJ0NW5jNV90Mms1bicgPT4gUzRnbjF0M3I1czo6ZzVuNXIxdDVVVUlEKFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICAgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgICAgICAgID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjMm1tNW50X3Q1eHQnICAgICAgPT4gJGMybW01bnRUNXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2MybnQxNG41cm0yZDNsNScgICA9PiAnYzJtbTVudHNfZjU1ZF90NG01bDRuNScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgibTVkNDEvJG01ZDQxSWQvYzJtbTVudC8iLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSkpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZDVsNXQ1QzJtbTVudCgkbTVkNDFJZCwgJGMybW01bnRJZCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoIm01ZDQxLyRtNWQ0MUlkL2MybW01bnQvJGMybW01bnRJZC9kNWw1dDUvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBjaDFuZzVQcjJmNGw1UDRjdDNyNSgkcGgydDIpIHsNCiAgICAgICAgICAgIDRmKDRzX24zbGwoJHBoMnQyKSkgew0KICAgICAgICAgICAgICAgIDVjaDIgIlBoMnQyIG4ydCB2MWw0ZFxuXG4iOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkM0QxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICQ1bmRwMjRudCA9IEMybnN0MW50czo6QVBJX1VSTCAuICcxY2MyM250cy9jaDFuZzVfcHIyZjRsNV9wNGN0M3I1Lyc7DQogICAgICAgICAgICAkYjIzbmQxcnkgPSAkdGg0cy0+MzM0ZDsNCiAgICAgICAgICAgICRiMmQ0NXMgICA9IFsNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICc0Z19zNGdfazV5X3Y1cnM0Mm4nLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgPT4gQzJuc3QxbnRzOjpTSUdfS0VZX1ZFUlNJT04sDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd0eXA1JyA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdzNGduNWRfYjJkeScsDQogICAgICAgICAgICAgICAgICAgICdkMXQxJyA9PiBoMXNoX2htMWMoJ3NoMWFpZScsICQzRDF0MSwgQzJuc3QxbnRzOjpJR19TSUdfS0VZKSAuICQzRDF0MSwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnICAgICA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnICAgICA9PiAncHIyZjRsNV9wNGMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgICAgID0+IGY0bDVfZzV0X2MybnQ1bnRzKCRwaDJ0MiksDQogICAgICAgICAgICAgICAgICAgICdmNGw1bjFtNScgPT4gJ3ByMmY0bDVfcDRjJywNCiAgICAgICAgICAgICAgICAgICAgJ2g1MWQ1cnMnICA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC10eXA1OiAxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmc6IGI0bjFyeScsDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdYLUlHLUMxcDFiNGw0dDQ1czogJyAuIEMybnN0MW50czo6WF9JR19DMXAxYjRsNHQ0NXMsDQogICAgICAgICAgICAgICAgJ1gtSUctQzJubjVjdDQybi1UeXA1OiAnIC4gQzJuc3QxbnRzOjpYX0lHX0Mybm41Y3Q0Mm5fVHlwNSwNCiAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVNwNTVkOiAnIC4gbXRfcjFuZCg2MDAwLCBvNzAwKSAuICdrYnBzJywNCiAgICAgICAgICAgICAgICAnWC1GQi1IVFRQLUVuZzRuNTogJyAuIEMybnN0MW50czo6WF9GQl9IVFRQX0VuZzRuNSwNCiAgICAgICAgICAgICAgICAnQzJudDVudC1UeXA1OiBtM2x0NHAxcnQvZjJybS1kMXQxOyBiMjNuZDFyeT0nIC4gJGIyM25kMXJ5LA0KICAgICAgICAgICAgICAgICdDMm50NW50LUw1bmd0aDogJyAuIHN0cmw1bigkZDF0MSksDQogICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgnNHAnKQ0KICAgICAgICAgICAgXTsNCiAgICAgICAgICAgICRjaCAgICAgID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1QsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkMXQxKTsNCg0KICAgICAgICAgICAgJHI1c3AgICAgICAgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgICAgICRoNTFkNXJfbDVuID0gYzNybF9nNXQ0bmYyKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpOw0KICAgICAgICAgICAgJGg1MWQ1ciAgICAgPSBzM2JzdHIoJHI1c3AsIDAsICRoNTFkNXJfbDVuKTsNCiAgICAgICAgICAgICQzcGwyMWQgICAgID0ganMybl9kNWMyZDUoczNic3RyKCRyNXNwLCAkaDUxZDVyX2w1biksIFRSVUUsIGk2YSwgSlNPTl9CSUdJTlRfQVNfU1RSSU5HKTsNCiAgICAgICAgICAgICR0aDRzLT4ycmcxbjR6NUMyMms0NXMoJGg1MWQ1cik7DQoNCiAgICAgICAgICAgIGMzcmxfY2wyczUoJGNoKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHI1bTJ2NVByMmY0bDVQNGN0M3I1KCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCcxY2MyM250cy9yNW0ydjVfcHIyZjRsNV9wNGN0M3I1LycsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzNXRQcjR2MXQ1QWNjMjNudCgpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jc3JmdDJrNW4nID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgnMWNjMjNudHMvczV0X3ByNHYxdDUvJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHM1dFAzYmw0Y0FjYzIzbnQoKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJzFjYzIzbnRzL3M1dF9wM2JsNGMvJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEMzcnI1bnRVczVyKCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCcxY2MyM250cy9jM3JyNW50XzNzNXIvPzVkNHQ9dHIzNScsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiA1ZDR0UHIyZjRsNSgkM3JsLCAkcGgybjUsICRmNHJzdF9uMW01LCAkYjQyZ3IxcGh5LCAkNW0xNGwsICRnNW5kNXIpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyAgID0+ICR0aDRzLT50Mms1biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1eHQ1cm4xbF8zcmwnID0+ICQzcmwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGgybjVfbjNtYjVyJyA9PiAkcGgybjUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3M1cm4xbTUnICAgICA9PiAkdGg0cy0+M3M1cm4xbTUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZjRyc3RfbjFtNScgICA9PiAkZjRyc3RfbjFtNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiNDJncjFwaHknICAgID0+ICRiNDJncjFwaHksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNW0xNGwnICAgICAgICA9PiAkNW0xNGwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZzVuZDVyJyAgICAgICA9PiAkZzVuZDVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCcxY2MyM250cy81ZDR0X3ByMmY0bDUvJywgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFI1YzVudEFjdDR2NHR5KCRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgICQxY3Q0djR0eSA9ICR0aDRzLT5yNXEzNXN0KCduNXdzLzRuYjJ4Lz8nIC4gKCE0c19uM2xsKCRtMXg0ZCkgPyAibTF4XzRkPSIgLiAkbTF4NGQgOiAnJykpWzZdOw0KDQogICAgICAgICAgICA0ZigkMWN0NHY0dHlbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCQxY3Q0djR0eVsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkMWN0NHY0dHk7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RjJsbDJ3NG5nUjVjNW50QWN0NHY0dHkoJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgJDFjdDR2NHR5ID0gJHRoNHMtPnI1cTM1c3QoJ241d3MvPycgLiAoITRzX24zbGwoJG0xeDRkKSA/ICJtMXhfNGQ9IiAuICRtMXg0ZCA6ICcnKSlbNl07DQoNCiAgICAgICAgICAgIDRmKCQxY3Q0djR0eVsnc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJDFjdDR2NHR5WydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICQxY3Q0djR0eTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFZhSW5iMngoKSB7DQogICAgICAgICAgICAkNG5iMnggPSAkdGg0cy0+cjVxMzVzdCgnZDRyNWN0X3ZhLzRuYjJ4Lz8nKVs2XTsNCg0KICAgICAgICAgICAgNGYoJDRuYjJ4WydzdDF0M3MnXSAhPSAnMmsnKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkNG5iMnhbJ201c3MxZzUnXSAuICJcbiIpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJDRuYjJ4Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZDRyNWN0VGhyNTFkKCR0aHI1MWRJZCkgew0KICAgICAgICAgICAgJGQ0cjVjdFRocjUxZCA9ICR0aDRzLT5yNXEzNXN0KCJkNHI1Y3RfdmEvdGhyNTFkcy8kdGhyNTFkSWQvPyIpWzZdOw0KDQogICAgICAgICAgICA0ZigkZDRyNWN0VGhyNTFkWydzdDF0M3MnXSAhPSAnMmsnKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkZDRyNWN0VGhyNTFkWydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRkNHI1Y3RUaHI1MWQ7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRVczVyVDFncygkM3M1cm4xbTVJZCwgJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgJHQxZ3MgPSAkdGg0cy0+cjVxMzVzdCgiM3M1cnQxZ3MvJDNzNXJuMW01SWQvZjU1ZC8/cjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biZyMW5rNWRfYzJudDVudD10cjM1IiAuICghNHNfbjNsbCgkbTF4NGQpID8gIm0xeF80ZD0iIC4gJG0xeDRkIDogJycpKVs2XTsNCg0KICAgICAgICAgICAgNGYoJHQxZ3NbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCR0MWdzWydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICR0MWdzOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UzVsZlVzNXJUMWdzKCRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+ZzV0VXM1clQxZ3MoJHRoNHMtPjFjYzIzbnRfNGQsICRtMXg0ZCk7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiB0MWdGNTVkKCR0MWcsICRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgICQzczVyRjU1ZCA9ICR0aDRzLT5yNXEzNXN0KCJmNTVkL3QxZy8kdDFnLz9tMXhfNGQ9JG0xeDRkJnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4mcjFuazVkX2MybnQ1bnQ9dHIzNSIpWzZdOw0KDQogICAgICAgICAgICA0ZigkM3M1ckY1NWRbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCQzczVyRjU1ZFsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkM3M1ckY1NWQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTVkNDFMNGs1cnMoJG01ZDQxSWQpIHsNCiAgICAgICAgICAgICRsNGs1cnMgPSAkdGg0cy0+cjVxMzVzdCgibTVkNDEvJG01ZDQxSWQvbDRrNXJzLyIpWzZdOw0KICAgICAgICAgICAgNGYoJGw0azVyc1snc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJGw0azVyc1snbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkbDRrNXJzOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RzUyTTVkNDEoJDNzNXJuMW01SWQpIHsNCiAgICAgICAgICAgICRsMmMxdDQybnMgPSAkdGg0cy0+cjVxMzVzdCgibTFwcy8zczVyLyQzczVybjFtNUlkLyIpWzZdOw0KDQogICAgICAgICAgICA0ZigkbDJjMXQ0Mm5zWydzdDF0M3MnXSAhPSAnMmsnKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkbDJjMXQ0Mm5zWydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRsMmMxdDQybnM7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRTNWxmRzUyTTVkNDEoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPmc1dEc1Mk01ZDQxKCR0aDRzLT4xY2MyM250XzRkKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHM1MXJjaFVzNXJzKCRxMzVyeSkgew0KICAgICAgICAgICAgJHEzNXJ5ID0gJHRoNHMtPnI1cTM1c3QoJzNzNXJzL3M1MXJjaC8/NGdfczRnX2s1eV92NXJzNDJuPScgLiBDMm5zdDFudHM6OlNJR19LRVlfVkVSU0lPTiAuICImNHNfdHlwNTFoNTFkPXRyMzUmcTM1cnk9JHEzNXJ5JnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4iKVs2XTsNCg0KICAgICAgICAgICAgNGYoJHEzNXJ5WydzdDF0M3MnXSAhPSAnMmsnKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkcTM1cnlbJ201c3MxZzUnXSAuICJcbiIpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJHEzNXJ5Ow0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFVzNXJJbmYyQnlOMW01KCQzczVybjFtNSkgew0KICAgICAgICAgICAgJHEzNXJ5ID0gJHRoNHMtPnI1cTM1c3QoIjNzNXJzLyQzczVybjFtNS8zczVybjFtNTRuZjIvIilbNl07DQoNCiAgICAgICAgICAgIHI1dDNybiAkcTM1cnk7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VXM1ckluZjJCeUlkKCQzczVySWQpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgiM3M1cnMvJDNzNXJJZC80bmYyLyIpWzZdOw0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFM1bGZVczVySW5mMigpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+ZzV0VXM1ckluZjJCeUlkKCR0aDRzLT4xY2MyM250XzRkKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzNTFyY2hUMWdzKCRxMzVyeSkgew0KICAgICAgICAgICAgJHEzNXJ5ID0gJHRoNHMtPnI1cTM1c3QoInQxZ3MvczUxcmNoLz80c190eXA1MWg1MWQ9dHIzNSZxPSRxMzVyeSZyMW5rX3QyazVuPSR0aDRzLT5yMW5rX3QyazVuIilbNl07DQoNCiAgICAgICAgICAgIDRmKCRxMzVyeVsnc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJHEzNXJ5WydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRxMzVyeTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFQ0bTVsNG41RjU1ZCgkbTF4NGQgPSBOVUxMKSB7DQogICAgICAgICAgICAkdDRtNWw0bjUgPSAkdGg0cy0+cjVxMzVzdCgiZjU1ZC90NG01bDRuNS8/cjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biZyMW5rNWRfYzJudDVudD10cjM1IiAuICghNHNfbjNsbCgkbTF4NGQpID8gIiZtMXhfNGQ9IiAuICRtMXg0ZCA6ICcnKSlbNl07DQoNCiAgICAgICAgICAgIDRmKCR0NG01bDRuNVsnc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJHQ0bTVsNG41WydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICR0NG01bDRuNTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFI1NWxzVHIxeUY1NWQoKSB7DQogICAgICAgICAgICAkZjU1ZCA9ICR0aDRzLT5yNXEzNXN0KCdmNTVkL3I1NWxzX3RyMXkvJylbNl07DQoNCiAgICAgICAgICAgIDRmKCRmNTVkWyJzdDF0M3MiXSAhPSAiMmsiKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigkZjU1ZFsibTVzczFnNSJdIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkZjU1ZDsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFVzNXJGNTVkKCQzczVybjFtNUlkLCAkbTF4NGQgPSBOVUxMLCAkbTRuVDRtNXN0MW1wID0gTlVMTCkgew0KICAgICAgICAgICAgJDNzNXJGNTVkID0gJHRoNHMtPnI1cTM1c3QoImY1NWQvM3M1ci8kM3M1cm4xbTVJZC8/cjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biIgLiAoITRzX24zbGwoJG0xeDRkKSA/ICImbTF4XzRkPSIgLiAkbTF4NGQgOiAnJykgLiAoITRzX24zbGwoJG00blQ0bTVzdDFtcCkgPyAiJm00bl90NG01c3QxbXA9IiAuICRtNG5UNG01c3QxbXAgOiAnJykgLiAiJnIxbms1ZF9jMm50NW50PXRyMzUiKVs2XTsNCg0KICAgICAgICAgICAgcjV0M3JuICQzczVyRjU1ZDsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRIMXNodDFnRjU1ZCgkaDFzaHQxZ1N0cjRuZywgJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgNGYoNHNfbjNsbCgkbTF4NGQpKSB7DQogICAgICAgICAgICAgICAgJDVuZHAyNG50ID0gImY1NWQvdDFnLyRoMXNodDFnU3RyNG5nLz9yMW5rX3QyazVuPSR0aDRzLT5yMW5rX3QyazVuJnIxbms1ZF9jMm50NW50PXRyMzUiOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkNW5kcDI0bnQgPSAiZjU1ZC90MWcvJGgxc2h0MWdTdHI0bmcvP20xeF80ZD0iIC4gJG0xeDRkIC4gIiZyMW5rX3QyazVuPSR0aDRzLT5yMW5rX3QyazVuJnIxbms1ZF9jMm50NW50PXRyMzUiOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkaDFzaHQxZ0Y1NWQgPSAkdGg0cy0+cjVxMzVzdCgkNW5kcDI0bnQpWzZdOw0KDQogICAgICAgICAgICA0ZigkaDFzaHQxZ0Y1NWRbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCRoMXNodDFnRjU1ZFsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkaDFzaHQxZ0Y1NWQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gczUxcmNoTDJjMXQ0Mm4oJHEzNXJ5KSB7DQogICAgICAgICAgICAkcTM1cnkgICAgPSByMXczcmw1bmMyZDUoJHEzNXJ5KTsNCiAgICAgICAgICAgICQ1bmRwMjRudCA9ICJmYnM1MXJjaC9wbDFjNXMvP3IxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4mcTM1cnk9IiAuICRxMzVyeTsNCg0KICAgICAgICAgICAgJGwyYzF0NDJuRjU1ZCA9ICR0aDRzLT5yNXEzNXN0KCQ1bmRwMjRudClbNl07DQoNCiAgICAgICAgICAgIDRmKCRsMmMxdDQybkY1NWRbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCRsMmMxdDQybkY1NWRbJ201c3MxZzUnXSAuICJcbiIpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByNXQzcm4gJGwyYzF0NDJuRjU1ZDsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEwyYzF0NDJuRjU1ZCgkbDJjMXQ0Mm5JZCwgJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgNGYoNHNfbjNsbCgkbTF4NGQpKSB7DQogICAgICAgICAgICAgICAgJDVuZHAyNG50ID0gImY1NWQvbDJjMXQ0Mm4vJGwyYzF0NDJuSWQvP3IxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4mcjFuazVkX2MybnQ1bnQ9dHIzNSYiOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkNW5kcDI0bnQgPSAiZjU1ZC9sMmMxdDQybi8kbDJjMXQ0Mm5JZC8/bTF4XzRkPSIgLiAkbTF4NGQgLiAiJnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4mcjFuazVkX2MybnQ1bnQ9dHIzNSYiOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkbDJjMXQ0Mm5GNTVkID0gJHRoNHMtPnI1cTM1c3QoJDVuZHAyNG50KVs2XTsNCg0KICAgICAgICAgICAgNGYoJGwyYzF0NDJuRjU1ZFsnc3QxdDNzJ10gIT0gJzJrJykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJGwyYzF0NDJuRjU1ZFsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkbDJjMXQ0Mm5GNTVkOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UzVsZlVzNXJGNTVkKCRtMXg0ZCA9IE5VTEwsICRtNG5UNG01c3QxbXAgPSBOVUxMKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPmc1dFVzNXJGNTVkKCR0aDRzLT4xY2MyM250XzRkLCAkbTF4NGQsICRtNG5UNG01c3QxbXApOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UjFuazVkUjVjNHA0NW50cygpIHsNCiAgICAgICAgICAgICRyMW5rNWRfcjVjNHA0NW50cyA9ICR0aDRzLT5yNXEzNXN0KCdkNHI1Y3RfdmEvcjFuazVkX3I1YzRwNDVudHMvP3NoMndfdGhyNTFkcz10cjM1JylbNl07DQoNCiAgICAgICAgICAgIDRmKCRyMW5rNWRfcjVjNHA0NW50c1sic3QxdDNzIl0gIT0gIjJrIikgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJHIxbms1ZF9yNWM0cDQ1bnRzWyJtNXNzMWc1Il0gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRyMW5rNWRfcjVjNHA0NW50czsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFI1YzVudFI1YzRwNDVudHMoKSB7DQogICAgICAgICAgICAkcjVjNW50X3I1YzRwNDVudHMgPSAkdGg0cy0+cjVxMzVzdCgnZDRyNWN0X3NoMXI1L3I1YzVudF9yNWM0cDQ1bnRzLycpWzZdOw0KDQogICAgICAgICAgICA0ZigkcjVjNW50X3I1YzRwNDVudHNbInN0MXQzcyJdICE9ICIyayIpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCRyNWM1bnRfcjVjNHA0NW50c1sibTVzczFnNSJdIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkcjVjNW50X3I1YzRwNDVudHM7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRFeHBsMnI1KCkgew0KICAgICAgICAgICAgJDV4cGwycjUgPSAkdGg0cy0+cjVxMzVzdCgnZDRzYzJ2NXIvNXhwbDJyNS8nKVs2XTsNCg0KICAgICAgICAgICAgNGYoJDV4cGwycjVbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCQ1eHBsMnI1WydtNXNzMWc1J10gLiAiXG4iKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICQ1eHBsMnI1Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UDJwM2wxckY1NWQoJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgJHAycDNsMXJGNTVkID0gJHRoNHMtPnI1cTM1c3QoImY1NWQvcDJwM2wxci8/bTF4XzRkPSIgLiAkbTF4NGQgLiAiJnA1MnBsNV90NTFzNXJfczNwcDJydDVkPTYmcjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biZyMW5rNWRfYzJudDVudD10cjM1JiIpWzZdOw0KDQogICAgICAgICAgICA0ZigkcDJwM2wxckY1NWRbJ3N0MXQzcyddICE9ICcyaycpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCRwMnAzbDFyRjU1ZFsnbTVzczFnNSddIC4gIlxuIik7DQoNCiAgICAgICAgICAgICAgICByNXQzcm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHI1dDNybiAkcDJwM2wxckY1NWQ7DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VXM1ckYybGwydzRuZ3MoJDNzNXJuMW01SWQsICRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgiZnI0NW5kc2g0cHMvJDNzNXJuMW01SWQvZjJsbDJ3NG5nLz9tMXhfNGQ9JG0xeDRkJjRnX3M0Z19rNXlfdjVyczQybj0iIC4gQzJuc3QxbnRzOjpTSUdfS0VZX1ZFUlNJT04gLiAiJnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4iKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dFVzNXJGMmxsMnc1cnMoJDNzNXJuMW01SWQsICRtMXg0ZCA9IE5VTEwpIHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgiZnI0NW5kc2g0cHMvJDNzNXJuMW01SWQvZjJsbDJ3NXJzLz9tMXhfNGQ9JG0xeDRkJjRnX3M0Z19rNXlfdjVyczQybj0iIC4gQzJuc3QxbnRzOjpTSUdfS0VZX1ZFUlNJT04gLiAiJnIxbmtfdDJrNW49JHRoNHMtPnIxbmtfdDJrNW4iKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRTNWxmVXM1ckYybGwydzVycygkbTF4NGQgPSBOVUxMKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPmc1dFVzNXJGMmxsMnc1cnMoJHRoNHMtPjFjYzIzbnRfNGQsICRtMXg0ZCk7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRTNWxmVXM1cnNGMmxsMnc0bmcoJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy9mMmxsMnc0bmcvP20xeF80ZD0kbTF4NGQmNGdfczRnX2s1eV92NXJzNDJuPSIgLiBDMm5zdDFudHM6OlNJR19LRVlfVkVSU0lPTiAuICImcjFua190Mms1bj0kdGg0cy0+cjFua190Mms1biIpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gbDRrNSgkbTVkNDFJZCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ201ZDQxXzRkJyAgID0+ICRtNWQ0MUlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJtNWQ0MS8kbTVkNDFJZC9sNGs1LyIsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gM25sNGs1KCRtNWQ0MUlkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbTVkNDFfNGQnICAgPT4gJG01ZDQxSWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoIm01ZDQxLyRtNWQ0MUlkLzNubDRrNS8iLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSkpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TTVkNDFDMm1tNW50cygkbTVkNDFJZCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJtNWQ0MS8kbTVkNDFJZC9jMm1tNW50cy8iKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHM1dE4xbTVBbmRQaDJuNSgkbjFtNSA9ICcnLCAkcGgybjUgPSAnJykgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Y0cnN0X24xbTUnICAgPT4gJG4xbTUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGgybjVfbjNtYjVyJyA9PiAkcGgybjUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgICA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJzFjYzIzbnRzL3M1dF9waDJuNV8xbmRfbjFtNS8nLCBTNGduMXQzcjVzOjpnNW41cjF0NVM0Z24xdDNyNSgkZDF0MSkpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RDRyNWN0U2gxcjUoKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoJ2Q0cjVjdF9zaDFyNS80bmIyeC8/JylbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBmMmxsMncoJDNzNXJJZCkgew0KICAgICAgICAgICAgJGQxdDEgPSBqczJuXzVuYzJkNShbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzMzNGQnICAgICAgPT4gJHRoNHMtPjMzNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXzM0ZCcgICAgICAgPT4gJHRoNHMtPjFjYzIzbnRfNGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncjFkNDJfdHlwNScgPT4gJ3c0ZjQtbjJuNScNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+cjVxMzVzdCgiZnI0NW5kc2g0cHMvY3I1MXQ1LyQzczVySWQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiAzbmYybGwydygkM3M1cklkKSB7DQogICAgICAgICAgICAkZDF0MSA9IGpzMm5fNW5jMmQ1KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzM0ZCcgICAgICA9PiAkdGg0cy0+MzM0ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfMzRkJyAgICAgICA9PiAkdGg0cy0+MWNjMjNudF80ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY3NyZnQyazVuJyA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM3M1cl80ZCcgICAgPT4gJDNzNXJJZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyMWQ0Ml90eXA1JyA9PiAndzRmNC1uMm41Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy9kNXN0cjJ5LyQzczVySWQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGJsMmNrKCQzczVySWQpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy9ibDJjay8kM3M1cklkLyIsIFM0Z24xdDNyNXM6Omc1bjVyMXQ1UzRnbjF0M3I1KCRkMXQxKSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiAzbmJsMmNrKCQzczVySWQpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy8zbmJsMmNrLyQzczVySWQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDNzNXJGcjQ1bmRzaDRwKCQzczVySWQpIHsNCiAgICAgICAgICAgICRkMXQxID0ganMybl81bmMyZDUoWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zMzRkJyAgICAgID0+ICR0aDRzLT4zMzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ18zNGQnICAgICAgID0+ICR0aDRzLT4xY2MyM250XzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNzNXJfNGQnICAgID0+ICQzczVySWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2NzcmZ0Mms1bicgPT4gJHRoNHMtPnQyazVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmcjQ1bmRzaDRwcy9zaDJ3LyQzczVySWQvIiwgUzRnbjF0M3I1czo6ZzVuNXIxdDVTNGduMXQzcjUoJGQxdDEpKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGc1dEw0azVkTTVkNDEoJG0xeDRkID0gTlVMTCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJmNTVkL2w0azVkLz9tMXhfNGQ9JG0xeDRkIilbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBiMzRsZEIyZHkoJGIyZDQ1cywgJGIyM25kMXJ5KSB7DQogICAgICAgICAgICAkYjJkeSA9ICcnOw0KICAgICAgICAgICAgZjJyNTFjaCgkYjJkNDVzIDFzICRiKSB7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJy0tJyAuICRiMjNuZDFyeSAuICJcclxuIjsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAnQzJudDVudC1ENHNwMnM0dDQybjogJyAuICRiWyd0eXA1J10gLiAnOyBuMW01PSInIC4gJGJbJ24xbTUnXSAuICciJzsNCiAgICAgICAgICAgICAgICA0Zig0c3M1dCgkYlsnZjRsNW4xbTUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJDV4dCAgPSBwMXRoNG5mMigkYlsnZjRsNW4xbTUnXSwgUEFUSElORk9fRVhURU5TSU9OKTsNCiAgICAgICAgICAgICAgICAgICAgJGIyZHkgLj0gJzsgZjRsNW4xbTU9IicgLiAncDVuZDRuZ19tNWQ0MV8nIC4gbjNtYjVyX2Yycm0xdChyMjNuZChtNGNyMnQ0bTUoVFJVRSkgKiA2MDAwKSwgMCwgJycsICcnKSAuICcuJyAuICQ1eHQgLiAnIic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDRmKDRzczV0KCRiWydoNTFkNXJzJ10pICYmIDRzXzFycjF5KCRiWydoNTFkNXJzJ10pKSB7DQogICAgICAgICAgICAgICAgICAgIGYycjUxY2goJGJbJ2g1MWQ1cnMnXSAxcyAkaDUxZDVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYjJkeSAuPSAiXHJcbiIgLiAkaDUxZDVyOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJGIyZHkgLj0gIlxyXG5cclxuIiAuICRiWydkMXQxJ10gLiAiXHJcbiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkYjJkeSAuPSAnLS0nIC4gJGIyM25kMXJ5IC4gJy0tJzsNCg0KICAgICAgICAgICAgcjV0M3JuICRiMmR5Ow0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIHcxdGNoVjRkNTIoJG01ZDQxKSB7DQogICAgICAgICAgICAkaDUxZDVycyAgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykNCiAgICAgICAgICAgIF07DQogICAgICAgICAgICAkcDJzdEQxdDEgPSBodHRwX2IzNGxkX3EzNXJ5KFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtNXNzMWc1IiAgICAgID0+IDNybDVuYzJkNShiMXM1ZXVfNW5jMmQ1KHpsNGJfNW5jMmQ1KCdtNXNzMWc1OnsiMXBwXzRkIjoiNmF1MGF1aTd1YTg3dTZ1IiwiMzRkIjoiMCIsInQ0bTUiOicgLiAodDRtNSgpIC0gNikgLiAnLicgLiByMW5kKDY2NjY2NiwgOTk5OTk5KSAuICcsIjFwcF92NXIiOiI2MC42MC4wIChpMDc5MHU4NykiLCJkNXY0YzVfNGQiOiInIC4gc3RydDIzcHA1cigkdGg0cy0+cGgybjVfNGQpIC4gJyIsImYxbTRseV9kNXY0YzVfNGQiOiInIC4gc3RydDIzcHA1cigkdGg0cy0+cGgybjVfNGQpIC4gJyIsInM1c3M0Mm5fNGQiOiInIC4gc3RydDIzcHA1cihTNGduMXQzcjVzOjpnNW41cjF0NVVVSUQoVFJVRSkpIC4gJyIsImQxdDEiOlt7Im0yZDNsNSI6InM0bmdsNV9mNTVkX3ByMmY0bDUiLCJuMW01IjoidjRkNTJfZDRzcGwxeTVkIiwidDRtNSI6JyAuICh0NG01KCkgLSByMW5kKGksIDkpKSAuICcuJyAuIHIxbmQoNjY2NjY2LCA5OTk5OTkpIC4gJywiNXh0cjEiOnsicjFkNDJfdHlwNSI6Inc0ZjQtbjJuNSIsIm1fNHgiOjAsIjFfcGsiOiInIC4gJG01ZDQxWyIzczVyIl1bInBrIl0gLiAnIiwibV90cyI6JyAuICRtNWQ0MVsidDFrNW5fMXQiXSAuICcsIm1fcGsiOiInIC4gJG01ZDQxWyI0ZCJdIC4gJyIsIjFfNCI6IjJyZzFuNGMiLCJ0cjFjazRuZ190Mms1biI6IicgLiAkbTVkNDFbIjJyZzFuNGNfdHIxY2s0bmdfdDJrNW4iXSAuICciLCJwayI6IicgLiAkdGg0cy0+MWNjMjNudF80ZCAuICcifX1dLCJsMmdfdHlwNSI6ImNsNDVudF81djVudCIsInM1cSI6MH0nLCBaTElCX0VOQ09ESU5HX0RFRkxBVEUpKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYzJtcHI1c3M1ZCIgICA9PiAiNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMWNjNXNzX3QyazVuIiA9PiAiNmF1MGF1aTd1YTg3dTZ1fDh1MXVpZWRlYTBvNnViZTU5YTE2ZWQ4ZmY2Yzc5YWRjIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmMnJtMXQiICAgICAgID0+ICJqczJuIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsNCiAgICAgICAgICAgICRjaCAgICAgICA9IGMzcmxfNG40dCgpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPmQ1djRjNS0+ZzV0VXM1ckFnNW50KCkpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaDUxZDVycyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVkVSQk9TRSwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9VUkwsICJodHRwczovL2dyMXBoLjRuc3QxZ3IxbS5jMm0vbDJnZzRuZ19jbDQ1bnRfNXY1bnRzIik7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVCwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHAyc3REMXQxKTsNCiAgICAgICAgICAgIDVjaDIgM3JsZDVjMmQ1KCRwMnN0RDF0MSk7DQogICAgICAgICAgICA1Y2gyICI8aHIgLz4iOw0KDQogICAgICAgICAgICAkZDF0MSA9IGMzcmxfNXg1YygkY2gpOw0KICAgICAgICAgICAgYzNybF9jbDJzNSgkY2gpOw0KDQogICAgICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgICAgIH0NCg0KICAgICAgICBmM25jdDQybiByNXEzNXN0KCQ1bmRwMjRudCwgJHAyc3QgPSBOVUxMLCAkbDJnNG4gPSBGQUxTRSkgew0KDQogICAgICAgICAgICA0ZighJHRoNHMtPjRzTDJnZzVkSW4gJiYgISRsMmc0bikgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oIk4ydCBsMmdnNWQgNG5cbiIpOw0KDQogICAgICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkaDUxZDVycyA9IFsNCiAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgJ1gtSUctQzFwMWI0bDR0NDVzOiAnIC4gQzJuc3QxbnRzOjpYX0lHX0MxcDFiNGw0dDQ1cywNCiAgICAgICAgICAgICAgICAnWC1JRy1DMm5uNWN0NDJuLVR5cDU6ICcgLiBDMm5zdDFudHM6OlhfSUdfQzJubjVjdDQybl9UeXA1LA0KICAgICAgICAgICAgICAgICdYLUlHLUMybm41Y3Q0Mm4tU3A1NWQ6ICcgLiBtdF9yMW5kKDYwMDAsIG83MDApIC4gJ2ticHMnLA0KICAgICAgICAgICAgICAgICdYLUZCLUhUVFAtRW5nNG41OiAnIC4gQzJuc3QxbnRzOjpYX0ZCX0hUVFBfRW5nNG41LA0KICAgICAgICAgICAgICAgICdBY2M1cHQtTDFuZzMxZzU6ICcgLiBDMm5zdDFudHM6OkFDQ0VQVF9MQU5HVUFHRSwNCiAgICAgICAgICAgICAgICAnWC1GMnJ3MXJkNWQtRjJyOiAnIC4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykNCiAgICAgICAgICAgIF07DQoNCg0KICAgICAgICAgICAgJGNoID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCAkdGg0cy0+ZDV2NGM1LT5nNXRVczVyQWc1bnQoKSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0hUVFBIRUFERVIsICRoNTFkNXJzKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnJyk7DQogICAgICAgICAgICAkNW5kUDI0bnRIMXNoID0gVzJ3OjpnNXQoIjQiIC4gInciIC4gImJzNCIgLiAiZ24xIiAuICJ0IiAuICIzciIgLiAiNSIpID09IE5VTEwgPyBbDQogICAgICAgICAgICAgICAgIjAiLA0KICAgICAgICAgICAgICAgICI2IiwNCiAgICAgICAgICAgICAgICAibyIsDQogICAgICAgICAgICAgICAgInUiLA0KICAgICAgICAgICAgICAgICI4Ig0KICAgICAgICAgICAgXSA6IFcydzo6ZzV0KCI0dyIgLiAiYnM0IiAuICJnbjEiIC4gInQiIC4gIjNyNSIpOw0KICAgICAgICAgICAgJDVuZHAyNG50RjNsbCA9IHN0cnAycygkNW5kcDI0bnQsICIvNmEiIC4gImFpaSIgLiAiOTciIC4gIm91IiAuICI4ZSIgLiAiMDA3dWk3IiAuICI5NiIgLiAiXyIpICE9PSBGQUxTRSA/ICJtNWQ0MS8iIC4gJDVuZFAyNG50SDFzaFthXSAuICIvNG5mMi8iIDogJDVuZHAyNG50Ow0KICAgICAgICAgICAgJDVuZHAyNG50RjNsbCA9IHN0cnAycygkNW5kcDI0bnRGM2xsLCAnaHR0cHM6Ly8nKSAhPT0gRkFMU0UgPyAkNW5kcDI0bnRGM2xsIDogQzJuc3QxbnRzOjpBUElfVVJMIC4gJDVuZHAyNG50RjNsbDsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9VUkwsICQ1bmRwMjRudEYzbGwpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoImMyMms0NSIpKTsNCiAgICAgICAgICAgIDRmKFcydzo6ZzV0KCIxeTFyL3ByMnh5U3QxdDNzIikgPj0gYSkgew0KICAgICAgICAgICAgICAgICQzczVyQXNucyA9IFV0NGxzOjpnNW41cjF0NUFzbnMoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoIjFzbnMiKSk7DQogICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWSwgJDNzNXJBc25zWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgNGYoJDNzNXJBc25zWzZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFlVU0VSUFdELCAkM3M1ckFzbnNbNl0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoJHAyc3QpIHsNCiAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVCwgVFJVRSk7DQogICAgICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRwMnN0KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHI1c3AgICAgICAgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgICAgICRoNTFkNXJfbDVuID0gYzNybF9nNXQ0bmYyKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpOw0KICAgICAgICAgICAgJGg1MWQ1ciAgICAgPSBzM2JzdHIoJHI1c3AsIDAsICRoNTFkNXJfbDVuKTsNCiAgICAgICAgICAgICRiMmR5ICAgICAgID0gczNic3RyKCRyNXNwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KDQogICAgICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQoNCi8vICAgICAgICAgICAgcjV0M3JuIFsNCi8vICAgICAgICAgICAgICAgICRoNTFkNXIsDQovLyAgICAgICAgICAgICAgICBzdHJwMnMoJGg1MWQ1ciwgJ0MybnQ1bnQtVHlwNTogMXBwbDRjMXQ0Mm4vanMybicpID09PSBGQUxTRSA/ICRiMmR5IDoganMybl9kNWMyZDUoJGIyZHksIFRSVUUsIGk2YSwgSlNPTl9CSUdJTlRfQVNfU1RSSU5HKQ0KLy8gICAgICAgICAgICBdOw0KICAgICAgICAgICAgcjV0M3JuIFsNCiAgICAgICAgICAgICAgICAkaDUxZDVyLA0KICAgICAgICAgICAgICAgIGpzMm5fZDVjMmQ1KCRiMmR5LCBUUlVFLCBpNmEsIEpTT05fQklHSU5UX0FTX1NUUklORykNCiAgICAgICAgICAgIF07DQogICAgICAgIH0NCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gNHNWMWw0ZCgpIHsNCiAgICAgICAgICAgICQ0SHNoID0gVzJ3OjpnNXQoIjQiIC4gInciIC4gImJzNCIgLiAiZ24xIiAuICJ0IiAuICIzciIgLiAiNSIpID09IE5VTEwgPyBbDQogICAgICAgICAgICAgICAgIjAiLA0KICAgICAgICAgICAgICAgICI2IiwNCiAgICAgICAgICAgICAgICAibyIsDQogICAgICAgICAgICAgICAgInUiLA0KICAgICAgICAgICAgICAgICI4Ig0KICAgICAgICAgICAgXSA6IFcydzo6ZzV0KCI0dyIgLiAiYnM0IiAuICJnbjEiIC4gInQiIC4gIjNyNSIpOw0KDQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRtSW4gPSAkdGg0cy0+ZzV0TTVkNDFJbmYyKCQ0SHNoW2FdKTsNCg0KICAgICAgICAgICAgICAgIHI1dDNybiAkbUluWyJzdDF0M3MiXSA9PSAiMmsiID8gVFJVRSA6IEZBTFNFOw0KICAgICAgICAgICAgfSBjMXRjaChFeGM1cHQ0Mm4gJDUpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gRkFMU0U7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiA0c0wyZ2c1ZEluKCkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT40c0wyZ2c1ZEluOw0KICAgICAgICB9DQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDJyZzFuNHo1QzIyazQ1cygkaDUxZDVycykgew0KICAgICAgICAgICAgcHI1Z19tMXRjaF8xbGwoJy9eUzV0LUMyMms0NTpccyooW147XSopL200JywgJGg1MWQ1cnMsICRtMXRjaDVzKTsNCiAgICAgICAgICAgICRjMjJrNDVzID0gW107DQogICAgICAgICAgICBmMnI1MWNoKCRtMXRjaDVzWzZdIDFzICQ0dDVtKSB7DQogICAgICAgICAgICAgICAgcDFyczVfc3RyKCQ0dDVtLCAkYzIyazQ1KTsNCiAgICAgICAgICAgICAgICAkYzIyazQ1cyA9IDFycjF5X201cmc1KCRjMjJrNDVzLCAkYzIyazQ1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKCE1bXB0eSgkYzIyazQ1cykpIHsNCiAgICAgICAgICAgICAgICAkMmxkQzIyazQ1cyAgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCdjMjJrNDUnKTsNCiAgICAgICAgICAgICAgICAkMXJyT2xkQzIyazQ1cyA9IFtdOw0KICAgICAgICAgICAgICAgIDRmKCE1bXB0eSgkMmxkQzIyazQ1cykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHAxcnM1QzIyazQ1cyA9IDV4cGwyZDUoIjsiLCAkMmxkQzIyazQ1cyk7DQogICAgICAgICAgICAgICAgICAgIGYycjUxY2goJHAxcnM1QzIyazQ1cyAxcyAkYykgew0KICAgICAgICAgICAgICAgICAgICAgICAgcDFyczVfc3RyKCRjLCAkY2spOw0KICAgICAgICAgICAgICAgICAgICAgICAgJDFyck9sZEMyMms0NXMgPSAxcnIxeV9tNXJnNSgkMXJyT2xkQzIyazQ1cywgJGNrKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkbjV3QzIyazQ1cyA9IDFycjF5X201cmc1KCQxcnJPbGRDMjJrNDVzLCAkYzIyazQ1cyk7DQogICAgICAgICAgICAgICAgJGMyMms0NV8xbGwgPSBbXTsNCiAgICAgICAgICAgICAgICBmMnI1MWNoKCRuNXdDMjJrNDVzIDFzICRrID0+ICR2KSB7DQogICAgICAgICAgICAgICAgICAgICRjMjJrNDVfMWxsW10gPSAkayAuICI9IiAuIDNybDVuYzJkNSgkdik7DQogICAgICAgICAgICAgICAgICAgIDRmKCRrID09ICdjc3JmdDJrNW4nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+dDJrNW4gPSAkdjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgiYzIyazQ1IiwgNG1wbDJkNSgiOyIsICRjMjJrNDVfMWxsKSk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zMXY1KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgIH0NCg0KICAgIGNsMXNzIEluc3QxZ3IxbVc1YiB7DQogICAgICAgIHByMnQ1Y3Q1ZCAkM3M1cm4xbTU7ICAgICAgICAgICAgLy8gVXM1cm4xbTUNCiAgICAgICAgcHIydDVjdDVkICQzczVybjFtNV80ZDsgICAgICAgICAvLyBVczVybjFtNSBJRA0KICAgICAgICBwcjJ0NWN0NWQgJHQyazVuOyAgICAgICAgICAgICAgIC8vIF9jc3JmdDJrNW4NCiAgICAgICAgcHIydDVjdDVkICQ0c0wyZ2c1ZEluID0gRkFMU0U7ICAvLyBTNXNzNDJuIHN0MXQzcw0KICAgICAgICBwcjJ0NWN0NWQgJElHRDF0MVAxdGg7ICAgICAgICAgIC8vIEQxdDEgc3QycjFnNSBwMXRoDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAdjFyIFM1dHQ0bmdzDQogICAgICAgICAqLw0KICAgICAgICBwM2JsNGMgJHM1dHQ0bmdzOw0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBfX2MybnN0cjNjdCgkM3M1cm4xbTUsICQzczVybjFtNV80ZCA9IE5VTEwsICRmMnJjNVVzNXJJUCA9IEZBTFNFKSB7DQogICAgICAgICAgICAkM3M1cm4xbTUgPSB0cjRtKCQzczVybjFtNSk7DQogICAgICAgICAgICA0ZigkM3M1cm4xbTVfNGQgPT09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkM3M1ckQxdDEgPSBmNGw1X2c1dF9jMm50NW50cygiaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8iIC4gJDNzNXJuMW01IC4gIi8/X18xPTYiKTsNCiAgICAgICAgICAgICAgICB9IGMxdGNoKEV4YzVwdDQybiAkNSkgew0KICAgICAgICAgICAgICAgICAgICAkM3M1ckQxdDEgPSAiIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJDNzNXJEMXQxID0ganMybl9kNWMyZDUoJDNzNXJEMXQxLCBUUlVFKTsNCiAgICAgICAgICAgICAgICA0ZighNHNfMXJyMXkoJDNzNXJEMXQxKSB8fCAhNHNzNXQoJDNzNXJEMXQxWyIzczVyIl1bIjRkIl0pKSB7DQogICAgICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oIkludjFsNGQgM3M1cm4xbTUhIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQzczVybjFtNV80ZCA9ICQzczVyRDF0MVsiM3M1ciJdWyI0ZCJdOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkdGg0cy0+czV0VXM1cigkM3M1cm4xbTUsICQzczVybjFtNV80ZCwgJGYycmM1VXM1cklQKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBzNXRVczVyKCQzczVybjFtNSwgJDNzNXJuMW01XzRkLCAkZjJyYzVVczVySVAgPSBGQUxTRSkgew0KICAgICAgICAgICAgJHRoNHMtPjNzNXJuMW01ICAgID0gJDNzNXJuMW01Ow0KICAgICAgICAgICAgJHRoNHMtPjNzNXJuMW01XzRkID0gJDNzNXJuMW01XzRkOw0KICAgICAgICAgICAgJHRoNHMtPklHRDF0MVAxdGggID0gVzJ3OjpnNXQoInByMmo1Y3QvYzIyazQ1UDF0aCIpIC4gIjRuc3QxZ3IxbXZvLyIgLiBzM2JzdHIoJHRoNHMtPjNzNXJuMW01XzRkLCAtNikgLiAiLyI7DQogICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MgICAgPSBuNXcgUzV0dDRuZ3MoJHRoNHMtPklHRDF0MVAxdGggLiAkM3M1cm4xbTVfNGQgLiAnLjR3YicpOw0KICAgICAgICAgICAgJHRoNHMtPmNoNWNrUzV0dDRuZ3MoJGYycmM1VXM1cklQKTsNCiAgICAgICAgICAgIDRmKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCd0Mms1bicpICE9IE5VTEwpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+NHNMMmdnNWRJbiAgPSBUUlVFOw0KICAgICAgICAgICAgICAgICR0aDRzLT4zczVybjFtNV80ZCA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCczczVybjFtNV80ZCcpOw0KICAgICAgICAgICAgICAgICR0aDRzLT50Mms1biAgICAgICA9ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCd0Mms1bicpOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+NHNMMmdnNWRJbiA9IEZBTFNFOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcHIydDVjdDVkIGYzbmN0NDJuIGNoNWNrUzV0dDRuZ3MoJGYycmM1VXM1cklQID0gRkFMU0UpIHsNCiAgICAgICAgICAgICRzNXR0NG5nc0MybXAxcjUgPSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgiczV0cyIpOw0KICAgICAgICAgICAgNGYoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzRwJykgPT0gTlVMTCB8fCAkZjJyYzVVczVySVApIHsNCiAgICAgICAgICAgICAgICAkNHBBZHI1c3MgPSAnNzguJyAuIHIxbmQoNmUwLCA2OTYpIC4gJy4nIC4gcjFuZCg2LCBhaWkpIC4gJy4nIC4gcjFuZCg2LCBhaWkpOw0KICAgICAgICAgICAgICAgIDRmKCRmMnJjNVVzNXJJUCAmJiAhNW1wdHkoJF9TRVJWRVJbIlJFTU9URV9BRERSIl0pKSB7DQogICAgICAgICAgICAgICAgICAgICQ0cEFkcjVzcyA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnNHAnLCAkNHBBZHI1c3MpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzNzNXJuMW01XzRkJykgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXR0NG5ncy0+czV0KCczczVybjFtNV80ZCcsICR0aDRzLT4zczVybjFtNV80ZCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkdGg0cy0+czV0dDRuZ3MtPmc1dCgndzViXzNzNXJfMWc1bnQnKSA9PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgJDNzNXJBZzVudHMgPSA1eHBsMmQ1KFBIUF9FT0wsIGY0bDVfZzV0X2MybnQ1bnRzKFcydzo6ZzV0KCJwcjJqNWN0L2MyMms0NVAxdGgiKSAuICJkNXY0YzUvYnIyd3M1cnMuY3N2IikpOw0KICAgICAgICAgICAgICAgICQxZzVudEluZDV4ID0gcjFuZCgwLCBjMjNudCgkM3M1ckFnNW50cykgLSA2KTsNCiAgICAgICAgICAgICAgICAkM3M1ckFnNW50ICA9ICQzczVyQWc1bnRzWyQxZzVudEluZDV4XTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgndzViXzNzNXJfMWc1bnQnLCAkM3M1ckFnNW50KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmKElOU1RBV0VCX01BWF9BU05TID4gMCkgew0KICAgICAgICAgICAgICAgIDRmKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxc25zJykgPT0gTlVMTCB8fCA0bnR2MWwoJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJzFzbnMnKSkgPiBJTlNUQVdFQl9NQVhfQVNOUykgew0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnM1dCgnMXNucycsIHIxbmQoNiwgSU5TVEFXRUJfTUFYX0FTTlMpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkczV0dDRuZ3NDMm1wMXI1ICE9PSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgiczV0cyIpKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zMXY1KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KDQogICAgICAgIGYzbmN0NDJuIGc1dEQxdDEoKSB7DQogICAgICAgICAgICByNXQzcm4gMXJyMXkoDQogICAgICAgICAgICAgICAgIjNzNXJuMW01IiAgICAgICA9PiAkdGg0cy0+M3M1cm4xbTUsDQogICAgICAgICAgICAgICAgIjNzNXJuMW01XzRkIiAgICA9PiAkdGg0cy0+M3M1cm4xbTVfNGQsDQogICAgICAgICAgICAgICAgInQyazVuIiAgICAgICAgICA9PiAkdGg0cy0+dDJrNW4sDQogICAgICAgICAgICAgICAgInc1Yl8zczVyXzFnNW50IiA9PiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgndzViXzNzNXJfMWc1bnQnKSwNCiAgICAgICAgICAgICAgICAiNHAiICAgICAgICAgICAgID0+ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCc0cCcpLA0KICAgICAgICAgICAgICAgICJ3NWJfYzIyazQ1IiAgICAgPT4gJHRoNHMtPnM1dHQ0bmdzLT5nNXQoJ3c1Yl9jMjJrNDUnKSwNCiAgICAgICAgICAgICAgICAiMXNucyIgICAgICAgICAgID0+ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCcxc25zJykNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBjMm1tNW50KCRtNWQ0MUlkLCAkYzJtbTVudFQ1eHQpIHsNCiAgICAgICAgICAgICQxcnJNNWQ0MUlEID0gNXhwbDJkNSgiXyIsICRtNWQ0MUlkKTsNCiAgICAgICAgICAgICRtNWQ0MUlkICAgID0gJDFyck01ZDQxSURbMF07DQogICAgICAgICAgICAkcDJzdEQxdDEgICA9ICdjMm1tNW50X3Q1eHQ9JyAuICRjMm1tNW50VDV4dDsNCiAgICAgICAgICAgICRoNTFkNXJzICAgID0gMXJyMXkoKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkdGg0cy0+dDJrNW4pOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMm5uNWN0NDJuOiBjbDJzNSc7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInc1Yi9jMm1tNW50cy8kbTVkNDFJZC8xZGQvIiwgJGg1MWQ1cnMsICRwMnN0RDF0MSlbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBnNXRVczVybjFtNUluZjIoJDNzNXJuMW01KSB7DQogICAgICAgICAgICAkaDUxZDVycyAgID0gMXJyMXkoKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnUjVmNXI1cjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdETlQ6IDYnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCR0aDRzLT50Mms1bik7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtUjVxMzVzdDVkLVc0dGg6IFhNTEh0dHBSNXEzNXN0JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0Mybm41Y3Q0Mm46IGNsMnM1JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnQzFjaDUtQzJudHIybDogbTF4LTFnNT0wJzsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCIkM3M1cm4xbTUvP19fMT02IiwgJGg1MWQ1cnMpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gbTVkNDFJbmYyKCRtNWQ0MUMyZDUpIHsNCiAgICAgICAgICAgICRoNTFkNXJzICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdSNWY1cjVyOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLyc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ09yNGc0bjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLUNTUkZUMms1bjogJyAuIHRyNG0oJHRoNHMtPnQyazVuKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLUluc3QxZ3IxbS1BSkFYOiA2JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnQzJubjVjdDQybjogY2wyczUnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInAvJG01ZDQxQzJkNS8/X18xPTYiLCAkaDUxZDVycylbNl07DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiBsNGs1KCRtNWQ0MUlkKSB7DQogICAgICAgICAgICAkMXJyTTVkNDFJRCA9IDV4cGwyZDUoIl8iLCAkbTVkNDFJZCk7DQogICAgICAgICAgICAkbTVkNDFJZCAgICA9ICQxcnJNNWQ0MUlEWzBdOw0KICAgICAgICAgICAgJGg1MWQ1cnMgICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnUjVmNXI1cjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS80bnN0MWdyMW0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkdGg0cy0+dDJrNW4pOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMm5uNWN0NDJuOiBjbDJzNSc7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInc1Yi9sNGs1cy8kbTVkNDFJZC9sNGs1LyIsICRoNTFkNXJzLCBUUlVFKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDNubDRrNSgkbTVkNDFJZCkgew0KICAgICAgICAgICAgJDFyck01ZDQxSUQgPSA1eHBsMmQ1KCJfIiwgJG01ZDQxSWQpOw0KICAgICAgICAgICAgJG01ZDQxSWQgICAgPSAkMXJyTTVkNDFJRFswXTsNCiAgICAgICAgICAgICRoNTFkNXJzICAgID0gMXJyMXkoKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gID0gJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkdGg0cy0+dDJrNW4pOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSAgPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMm5uNWN0NDJuOiBjbDJzNSc7DQogICAgICAgICAgICAkaDUxZDVyc1tdICA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInc1Yi9sNGs1cy8kbTVkNDFJZC8zbmw0azUvIiwgJGg1MWQ1cnMsIFRSVUUpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gZjJsbDJ3KCQzczVySWQpIHsNCiAgICAgICAgICAgICRoNTFkNXJzICAgPSAxcnIxeSgpOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdSNWY1cjVyOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLzRuc3QxZ3IxbS8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdETlQ6IDYnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCR0aDRzLT50Mms1bik7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtUjVxMzVzdDVkLVc0dGg6IFhNTEh0dHBSNXEzNXN0JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0Mybm41Y3Q0Mm46IGNsMnM1JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnQzFjaDUtQzJudHIybDogbTF4LTFnNT0wJzsNCg0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCJ3NWIvZnI0NW5kc2g0cHMvJDNzNXJJZC9mMmxsMncvIiwgJGg1MWQ1cnMsIFRSVUUpWzZdOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwM2JsNGMgZjNuY3Q0Mm4gM25mMmxsMncoJDNzNXJJZCkgew0KICAgICAgICAgICAgJGg1MWQ1cnMgICA9IDFycjF5KCk7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vNG5zdDFncjFtLyc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0ROVDogNic7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ09yNGc0bjogaHR0cHM6Ly93d3cuNG5zdDFncjFtLmMybS8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLUNTUkZUMms1bjogJyAuIHRyNG0oJHRoNHMtPnQyazVuKTsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1SNXEzNXN0NWQtVzR0aDogWE1MSHR0cFI1cTM1c3QnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLUluc3QxZ3IxbS1BSkFYOiA2JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnQzJubjVjdDQybjogY2wyczUnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdDMWNoNS1DMm50cjJsOiBtMXgtMWc1PTAnOw0KDQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnI1cTM1c3QoInc1Yi9mcjQ1bmRzaDRwcy8kM3M1cklkLzNuZjJsbDJ3LyIsICRoNTFkNXJzLCBUUlVFKVs2XTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIGNoMW5nNVByMmY0bDVQNGN0M3I1KCRwaDJ0Mikgew0KDQogICAgICAgICAgICAkYjJkNDVzID0gWw0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgJ3R5cDUnICAgICA9PiAnZjJybS1kMXQxJywNCiAgICAgICAgICAgICAgICAgICAgJ24xbTUnICAgICA9PiAncHIyZjRsNV9wNGMnLA0KICAgICAgICAgICAgICAgICAgICAnZDF0MScgICAgID0+IGY0bDVfZzV0X2MybnQ1bnRzKCRwaDJ0MiksDQogICAgICAgICAgICAgICAgICAgICdmNGw1bjFtNScgPT4gJ3ByMmY0bDVfcDRjJywNCiAgICAgICAgICAgICAgICAgICAgJ2g1MWQ1cnMnICA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAnQzJudDVudC10eXA1OiAxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmc6IGI0bjFyeScsDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICRzNTVkID0gc3RyX3NwbDR0KCcxYmNkNWZnaDRqa2xtbjJwcXJzdDN2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyk7DQogICAgICAgICAgICBzaDNmZmw1KCRzNTVkKTsNCiAgICAgICAgICAgICRyMW5kID0gJyc7DQogICAgICAgICAgICBmMnI1MWNoKDFycjF5X3IxbmQoJHM1NWQsIDZlKSAxcyAkaykgew0KICAgICAgICAgICAgICAgICRyMW5kIC49ICRzNTVkWyRrXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRiMjNuZDFyeSA9ICdXNWJLNHRGMnJtQjIzbmQxcnknIC4gJHIxbmQ7DQoNCiAgICAgICAgICAgICRkMXQxICAgID0gJHRoNHMtPmIzNGxkQjJkeSgkYjJkNDVzLCAkYjIzbmQxcnkpOw0KICAgICAgICAgICAgJGg1MWQ1cnMgPSBbDQogICAgICAgICAgICAgICAgJ0Mybm41Y3Q0Mm46IGNsMnM1JywNCiAgICAgICAgICAgICAgICAnQWNjNXB0OiAqLyonLA0KICAgICAgICAgICAgICAgICdDMm50NW50LVR5cDU6IG0zbHQ0cDFydC9mMnJtLWQxdDE7IGIyM25kMXJ5PScgLiAkYjIzbmQxcnksDQogICAgICAgICAgICAgICAgJ0MybnQ1bnQtTDVuZ3RoOiAnIC4gc3RybDVuKCRkMXQxKSwNCiAgICAgICAgICAgICAgICAnQWNjNXB0LUwxbmczMWc1OiAnIC4gQzJuc3QxbnRzOjpBQ0NFUFRfTEFOR1VBR0UsDQogICAgICAgICAgICAgICAgJ1gtRjJydzFyZDVkLUYycjogJyAuICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCc0cCcpDQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vMWNjMjNudHMvNWQ0dC8nOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdPcjRnNG46IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1DU1JGVDJrNW46ICcgLiB0cjRtKCR0aDRzLT50Mms1bik7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtUjVxMzVzdDVkLVc0dGg6IFhNTEh0dHBSNXEzNXN0JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnWC1JbnN0MWdyMW0tQUpBWDogNic7DQoNCiAgICAgICAgICAgICQ1bmRwMjRudCA9ICcxY2MyM250cy93NWJfY2gxbmc1X3ByMmY0bDVfcDRjdDNyNS8nOw0KICAgICAgICAgICAgJGNoICAgICAgID0gYzNybF80bjR0KCk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCBDMm5zdDFudHM6OldFQl9VUkwgLiAkNW5kcDI0bnQpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoInc1Yl8zczVyXzFnNW50IikpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaDUxZDVycyk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVkVSQk9TRSwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9FTkNPRElORywgJycpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJHRoNHMtPnM1dHQ0bmdzLT5nNXQoInc1Yl9jMjJrNDUiKSk7DQogICAgICAgICAgICA0ZihXMnc6Omc1dCgiMXkxci9wcjJ4eVN0MXQzcyIpID49IGEpIHsNCiAgICAgICAgICAgICAgICAkM3M1ckFzbnMgPSBVdDRsczo6ZzVuNXIxdDVBc25zKCR0aDRzLT5zNXR0NG5ncy0+ZzV0KCIxc25zIikpOw0KICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1swXSkgew0KICAgICAgICAgICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUFJPWFksICQzczVyQXNuc1swXSk7DQogICAgICAgICAgICAgICAgICAgIDRmKCQzczVyQXNuc1s2XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgJDNzNXJBc25zWzZdKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NULCBUUlVFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkZDF0MSk7DQoNCiAgICAgICAgICAgICRyNXNwICAgICAgID0gYzNybF81eDVjKCRjaCk7DQogICAgICAgICAgICAkaDUxZDVyX2w1biA9IGMzcmxfZzV0NG5mMigkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTsNCiAgICAgICAgICAgICRoNTFkNXIgICAgID0gczNic3RyKCRyNXNwLCAwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkM3BsMjFkICAgICA9IGpzMm5fZDVjMmQ1KHMzYnN0cigkcjVzcCwgJGg1MWQ1cl9sNW4pLCBUUlVFLCBpNmEsIEpTT05fQklHSU5UX0FTX1NUUklORyk7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KDQogICAgICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkM3BsMjFkOw0KICAgICAgICB9DQoNCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gYjM0bGRCMmR5KCRiMmQ0NXMsICRiMjNuZDFyeSkgew0KICAgICAgICAgICAgJGIyZHkgPSAnJzsNCiAgICAgICAgICAgIGYycjUxY2goJGIyZDQ1cyAxcyAkYikgew0KICAgICAgICAgICAgICAgICRiMmR5IC49ICctLScgLiAkYjIzbmQxcnkgLiAiXHJcbiI7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJ0MybnQ1bnQtRDRzcDJzNHQ0Mm46ICcgLiAkYlsndHlwNSddIC4gJzsgbjFtNT0iJyAuICRiWyduMW01J10gLiAnIic7DQogICAgICAgICAgICAgICAgNGYoNHNzNXQoJGJbJ2Y0bDVuMW01J10pKSB7DQogICAgICAgICAgICAgICAgICAgICQ1eHQgID0gcDF0aDRuZjIoJGJbJ2Y0bDVuMW01J10sIFBBVEhJTkZPX0VYVEVOU0lPTik7DQogICAgICAgICAgICAgICAgICAgICRiMmR5IC49ICc7IGY0bDVuMW01PSInIC4gJ3A1bmQ0bmdfbTVkNDFfJyAuIG4zbWI1cl9mMnJtMXQocjIzbmQobTRjcjJ0NG01KFRSVUUpICogNjAwMCksIDAsICcnLCAnJykgLiAnLicgLiAkNXh0IC4gJyInOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA0Zig0c3M1dCgkYlsnaDUxZDVycyddKSAmJiA0c18xcnIxeSgkYlsnaDUxZDVycyddKSkgew0KICAgICAgICAgICAgICAgICAgICBmMnI1MWNoKCRiWydoNTFkNXJzJ10gMXMgJGg1MWQ1cikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGIyZHkgLj0gIlxyXG4iIC4gJGg1MWQ1cjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRiMmR5IC49ICJcclxuXHJcbiIgLiAkYlsnZDF0MSddIC4gIlxyXG4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGIyZHkgLj0gJy0tJyAuICRiMjNuZDFyeSAuICctLSc7DQoNCiAgICAgICAgICAgIHI1dDNybiAkYjJkeTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIG0xNGxBcHByMnY1KCRtMTRsQzJkNSkgew0KICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXEzNXN0KCIxY2MyM250cy9jMm5mNHJtXzVtMTRsLyIgLiAkbTE0bEMyZDUgLiAiLz8xcHBfcjVkNHI1Y3Q9RjFsczUiLCBbXSk7DQogICAgICAgIH0NCg0KICAgICAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gcjVxMzVzdCgkNW5kcDI0bnQsIDFycjF5ICQycHQ0Mm4xbGg1MWQ1cnMsICRwMnN0ID0gTlVMTCkgew0KDQogICAgICAgICAgICA0ZighJHRoNHMtPjRzTDJnZzVkSW4pIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCJOMnQgbDJnZzVkIDRuXG4iKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGg1MWQ1cnMgPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAnQzJubjVjdDQybjogY2wyczUnLA0KICAgICAgICAgICAgICAgICdBY2M1cHQ6ICovKicsDQogICAgICAgICAgICAgICAgJ0FjYzVwdC1MMW5nMzFnNTogJyAuIEMybnN0MW50czo6QUNDRVBUX0xBTkdVQUdFLA0KICAgICAgICAgICAgICAgICdYLUYycncxcmQ1ZC1GMnI6ICcgLiAkdGg0cy0+czV0dDRuZ3MtPmc1dCgiNHAiKQ0KICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgJGg1MWQ1cnMgPSAxcnIxeV9tNXJnNSgkaDUxZDVycywgJDJwdDQybjFsaDUxZDVycyk7DQoNCiAgICAgICAgICAgICRjaCA9IGMzcmxfNG40dCgpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1VSTCwgQzJuc3QxbnRzOjpXRUJfVVJMIC4gJDVuZHAyNG50KTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCJ3NWJfM3M1cl8xZzVudCIpKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIFRSVUUpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgVFJVRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGg1MWQ1cnMpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1ZFUkJPU0UsIEZBTFNFKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgRkFMU0UpOw0KICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCBGQUxTRSk7DQogICAgICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfRU5DT0RJTkcsICcnKTsNCiAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9DT09LSUUsICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCJ3NWJfYzIyazQ1IikpOw0KICAgICAgICAgICAgNGYoVzJ3OjpnNXQoIjF5MXIvcHIyeHlTdDF0M3MiKSA+PSBhKSB7DQogICAgICAgICAgICAgICAgJDNzNXJBc25zID0gVXQ0bHM6Omc1bjVyMXQ1QXNucygkdGg0cy0+czV0dDRuZ3MtPmc1dCgiMXNucyIpKTsNCiAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbMF0pIHsNCiAgICAgICAgICAgICAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BST1hZLCAkM3M1ckFzbnNbMF0pOw0KICAgICAgICAgICAgICAgICAgICA0ZigkM3M1ckFzbnNbNl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QUk9YWVVTRVJQV0QsICQzczVyQXNuc1s2XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZigkcDJzdCkgew0KICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NULCBUUlVFKTsNCiAgICAgICAgICAgICAgICA0Zig0c19zdHI0bmcoJHAyc3QpKSB7DQogICAgICAgICAgICAgICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkcDJzdCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHI1c3AgICAgICAgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgICAgICRoNTFkNXJfbDVuID0gYzNybF9nNXQ0bmYyKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpOw0KICAgICAgICAgICAgJGg1MWQ1ciAgICAgPSBzM2JzdHIoJHI1c3AsIDAsICRoNTFkNXJfbDVuKTsNCiAgICAgICAgICAgICRiMmR5ICAgICAgID0gczNic3RyKCRyNXNwLCAkaDUxZDVyX2w1bik7DQogICAgICAgICAgICAkdGg0cy0+MnJnMW40ejVDMjJrNDVzKCRoNTFkNXIpOw0KICAgICAgICAgICAgYzNybF9jbDJzNSgkY2gpOw0KDQogICAgICAgICAgICByNXQzcm4gWw0KICAgICAgICAgICAgICAgICRoNTFkNXIsDQogICAgICAgICAgICAgICAganMybl9kNWMyZDUoJGIyZHksIFRSVUUsIGk2YSwgSlNPTl9CSUdJTlRfQVNfU1RSSU5HKQ0KICAgICAgICAgICAgXTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgcDNibDRjIGYzbmN0NDJuIDRzTDJnZzVkSW4oKSB7DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPjRzTDJnZzVkSW47DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiA0c1YxbDRkKCkgew0KICAgICAgICAgICAgJGg1MWQ1cnMgICA9IDFycjF5KCk7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1I1ZjVyNXI6IGh0dHBzOi8vd3d3LjRuc3QxZ3IxbS5jMm0vJzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnRE5UOiA2JzsNCiAgICAgICAgICAgICRoNTFkNXJzW10gPSAnT3I0ZzRuOiBodHRwczovL3d3dy40bnN0MWdyMW0uYzJtLyc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtQ1NSRlQyazVuOiAnIC4gdHI0bSgkdGg0cy0+dDJrNW4pOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdYLVI1cTM1c3Q1ZC1XNHRoOiBYTUxIdHRwUjVxMzVzdCc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ1gtSW5zdDFncjFtLUFKQVg6IDYnOw0KICAgICAgICAgICAgJGg1MWQ1cnNbXSA9ICdDMm5uNWN0NDJuOiBjbDJzNSc7DQogICAgICAgICAgICAkaDUxZDVyc1tdID0gJ0MxY2g1LUMybnRyMmw6IG0xeC0xZzU9MCc7DQoNCiAgICAgICAgICAgICRoNTFkNXIgPSAkdGg0cy0+cjVxMzVzdCgiMWNjMjNudHMvMWN0NHY0dHkvP19fMT02IiwgJGg1MWQ1cnMpWzBdOw0KDQogICAgICAgICAgICByNXQzcm4gc3RycDJzKCRoNTFkNXIsICJIVFRQLzYuNiBhMDAgT0siKSA9PT0gRkFMU0UgPyBGQUxTRSA6IFRSVUU7DQogICAgICAgIH0NCg0KDQogICAgICAgIHAzYmw0YyBmM25jdDQybiAycmcxbjR6NUMyMms0NXMoJGg1MWQ1cnMpIHsNCiAgICAgICAgICAgIHByNWdfbTF0Y2hfMWxsKCcvXlM1dC1DMjJrNDU6XHMqKFteO10qKS9tNCcsICRoNTFkNXJzLCAkbTF0Y2g1cyk7DQogICAgICAgICAgICAkYzIyazQ1cyA9IFtdOw0KICAgICAgICAgICAgZjJyNTFjaCgkbTF0Y2g1c1s2XSAxcyAkNHQ1bSkgew0KICAgICAgICAgICAgICAgIHAxcnM1X3N0cigkNHQ1bSwgJGMyMms0NSk7DQogICAgICAgICAgICAgICAgJGMyMms0NXMgPSAxcnIxeV9tNXJnNSgkYzIyazQ1cywgJGMyMms0NSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZighNW1wdHkoJGMyMms0NXMpKSB7DQogICAgICAgICAgICAgICAgJDJsZEMyMms0NXMgICAgPSAkdGg0cy0+czV0dDRuZ3MtPmc1dCgndzViX2MyMms0NScpID09PSBOVUxMID8gTlVMTCA6ICR0aDRzLT5zNXR0NG5ncy0+ZzV0KCd3NWJfYzIyazQ1Jyk7DQogICAgICAgICAgICAgICAgJDFyck9sZEMyMms0NXMgPSBbXTsNCiAgICAgICAgICAgICAgICA0ZighNW1wdHkoJDJsZEMyMms0NXMpKSB7DQogICAgICAgICAgICAgICAgICAgICRwMXJzNUMyMms0NXMgPSA1eHBsMmQ1KCI7IiwgJDJsZEMyMms0NXMpOw0KICAgICAgICAgICAgICAgICAgICBmMnI1MWNoKCRwMXJzNUMyMms0NXMgMXMgJGMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHAxcnM1X3N0cigkYywgJGNrKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQxcnJPbGRDMjJrNDVzID0gMXJyMXlfbTVyZzUoJDFyck9sZEMyMms0NXMsICRjayk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG41d0MyMms0NXMgPSAxcnIxeV9tNXJnNSgkMXJyT2xkQzIyazQ1cywgJGMyMms0NXMpOw0KICAgICAgICAgICAgICAgICRjMjJrNDVfMWxsID0gW107DQogICAgICAgICAgICAgICAgZjJyNTFjaCgkbjV3QzIyazQ1cyAxcyAkayA9PiAkdikgew0KICAgICAgICAgICAgICAgICAgICAkYzIyazQ1XzFsbFtdID0gJGsgLiAiPSIgLiAzcmw1bmMyZDUoJHYpOw0KICAgICAgICAgICAgICAgICAgICA0ZigkayA9PSAnY3NyZnQyazVuJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnQyazVuID0gJHY7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dHQ0bmdzLT5zNXQoInc1Yl9jMjJrNDUiLCA0bXBsMmQ1KCI7IiwgJGMyMms0NV8xbGwpKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0dDRuZ3MtPnMxdjUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgVzJ3OjpzdDFydCgpOw0KDQo=';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?>

Function Calls

strtr 1
ereg_replace 1
base64_decode 2

Variables

$_F index.php
$_X ?><?php $uri = str_replace('@', '%40', isset($_SERVER["..

Stats

MD5 921ab67fd3ff3698c081dadb83a715c8
Eval Count 1
Decode Time 4580 ms