3N4XMPXxEs6eZsy78Fgo4butfcAiwoDtG9P · data · 2.7c767379.chunk.js_27
{
    "2.7c767379.chunk.js_27": "base64:bl0pKSl9dmFyIHU7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgdC52YWx1ZSl0aHJvdyh1PW5ldyBFcnJvcigiQXR0cmlidXRlIHZhbHVlIG5vdCBzcGVjaWZpZWQuIikpLmF0dHJpYnV0ZT10LHV9fWZ1bmN0aW9uIHYoZSx0KXtpZih0PXR8fHt9LCJ1bmRlZmluZWQiPT09dHlwZW9mIGUubmFtZSYmZS5pZCYmZS5pZCBpbiBvLm9pZHMmJihlLm5hbWU9by5vaWRzW2UuaWRdKSwidW5kZWZpbmVkIj09PXR5cGVvZiBlLmlkKXtpZighKGUubmFtZSYmZS5uYW1lIGluIG8ub2lkcykpdGhyb3coUz1uZXcgRXJyb3IoIkV4dGVuc2lvbiBJRCBub3Qgc3BlY2lmaWVkLiIpKS5leHRlbnNpb249ZSxTO2UuaWQ9by5vaWRzW2UubmFtZV19aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZS52YWx1ZSlyZXR1cm4gZTtpZigia2V5VXNhZ2UiPT09ZS5uYW1lKXt2YXIgcj0wLHM9MCx1PTA7ZS5kaWdpdGFsU2lnbmF0dXJlJiYoc3w9MTI4LHI9NyksZS5ub25SZXB1ZGlhdGlvbiYmKHN8PTY0LHI9NiksZS5rZXlFbmNpcGhlcm1lbnQmJihzfD0zMixyPTUpLGUuZGF0YUVuY2lwaGVybWVudCYmKHN8PTE2LHI9NCksZS5rZXlBZ3JlZW1lbnQmJihzfD04LHI9MyksZS5rZXlDZXJ0U2lnbiYmKHN8PTQscj0yKSxlLmNSTFNpZ24mJihzfD0yLHI9MSksZS5lbmNpcGhlck9ubHkmJihzfD0xLHI9MCksZS5kZWNpcGhlck9ubHkmJih1fD0xMjgscj03KTt2YXIgYz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpOzAhPT11P2MrPVN0cmluZy5mcm9tQ2hhckNvZGUocykrU3RyaW5nLmZyb21DaGFyQ29kZSh1KTowIT09cyYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUocykpLGUudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxjKX1lbHNlIGlmKCJiYXNpY0NvbnN0cmFpbnRzIj09PWUubmFtZSllLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSksZS5jQSYmZS52YWx1ZS52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CT09MRUFOLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KSkpLCJwYXRoTGVuQ29uc3RyYWludCJpbiBlJiZlLnZhbHVlLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS5wYXRoTGVuQ29uc3RyYWludCkuZ2V0Qnl0ZXMoKSkpO2Vsc2UgaWYoImV4dEtleVVzYWdlIj09PWUubmFtZSl7ZS52YWx1ZT1pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW10pO3ZhciBmPWUudmFsdWUudmFsdWU7Zm9yKHZhciBsIGluIGUpITA9PT1lW2xdJiYobCBpbiBhP2YucHVzaChpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIoYVtsXSkuZ2V0Qnl0ZXMoKSkpOi0xIT09bC5pbmRleE9mKCIuIikmJmYucHVzaChpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIobCkuZ2V0Qnl0ZXMoKSkpKX1lbHNlIGlmKCJuc0NlcnRUeXBlIj09PWUubmFtZSl7cj0wLHM9MDtlLmNsaWVudCYmKHN8PTEyOCxyPTcpLGUuc2VydmVyJiYoc3w9NjQscj02KSxlLmVtYWlsJiYoc3w9MzIscj01KSxlLm9ianNpZ24mJihzfD0xNixyPTQpLGUucmVzZXJ2ZWQmJihzfD04LHI9MyksZS5zc2xDQSYmKHN8PTQscj0yKSxlLmVtYWlsQ0EmJihzfD0yLHI9MSksZS5vYmpDQSYmKHN8PTEscj0wKTtjPVN0cmluZy5mcm9tQ2hhckNvZGUocik7MCE9PXMmJihjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpKSxlLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CSVRTVFJJTkcsITEsYyl9ZWxzZSBpZigic3ViamVjdEFsdE5hbWUiPT09ZS5uYW1lfHwiaXNzdWVyQWx0TmFtZSI9PT1lLm5hbWUpe2UudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKTtmb3IodmFyIGg9MDtoPGUuYWx0TmFtZXMubGVuZ3RoOysraCl7Yz0obT1lLmFsdE5hbWVzW2hdKS52YWx1ZTtpZig3PT09bS50eXBlJiZtLmlwKXtpZihudWxsPT09KGM9bi51dGlsLmJ5dGVzRnJvbUlQKG0uaXApKSl0aHJvdyhTPW5ldyBFcnJvcignRXh0ZW5zaW9uICJpcCIgdmFsdWUgaXMgbm90IGEgdmFsaWQgSVB2NCBvciBJUHY2IGFkZHJlc3MuJykpLmV4dGVuc2lvbj1lLFN9ZWxzZSA4PT09bS50eXBlJiYoYz1tLm9pZD9pLm9pZFRvRGVyKGkub2lkVG9EZXIobS5vaWQpKTppLm9pZFRvRGVyKGMpKTtlLnZhbHVlLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLG0udHlwZSwhMSxjKSl9fWVsc2UgaWYoIm5zQ29tbWVudCI9PT1lLm5hbWUmJnQuY2VydCl7aWYoIS9eW1x4MDAtXHg3Rl0qJC8udGVzdChlLmNvbW1lbnQpfHxlLmNvbW1lbnQubGVuZ3RoPDF8fGUuY29tbWVudC5sZW5ndGg+MTI4KXRocm93IG5ldyBFcnJvcignSW52YWxpZCAibnNDb21tZW50IiBjb250ZW50LicpO2UudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklBNVNUUklORywhMSxlLmNvbW1lbnQpfWVsc2UgaWYoInN1YmplY3RLZXlJZGVudGlmaWVyIj09PWUubmFtZSYmdC5jZXJ0KXt2YXIgcD10LmNlcnQuZ2VuZXJhdGVTdWJqZWN0S2V5SWRlbnRpZmllcigpO2Uuc3ViamVjdEtleUlkZW50aWZpZXI9cC50b0hleCgpLGUudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9DVEVUU1RSSU5HLCExLHAuZ2V0Qnl0ZXMoKSl9ZWxzZSBpZigiYXV0aG9yaXR5S2V5SWRlbnRpZmllciI9PT1lLm5hbWUmJnQuY2VydCl7ZS52YWx1ZT1pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW10pO2Y9ZS52YWx1ZS52YWx1ZTtpZihlLmtleUlkZW50aWZpZXIpe3ZhciBkPSEwPT09ZS5rZXlJZGVudGlmaWVyP3QuY2VydC5nZW5lcmF0ZVN1YmplY3RLZXlJZGVudGlmaWVyKCkuZ2V0Qnl0ZXMoKTplLmtleUlkZW50aWZpZXI7Zi5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywwLCExLGQpKX1pZihlLmF1dGhvcml0eUNlcnRJc3N1ZXIpe3ZhciBnPVtpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsNCwhMCxbeSghMD09PWUuYXV0aG9yaXR5Q2VydElzc3Vlcj90LmNlcnQuaXNzdWVyOmUuYXV0aG9yaXR5Q2VydElzc3VlcildKV07Zi5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywxLCEwLGcpKX1pZihlLnNlcmlhbE51bWJlcil7dmFyIHY9bi51dGlsLmhleFRvQnl0ZXMoITA9PT1lLnNlcmlhbE51bWJlcj90LmNlcnQuc2VyaWFsTnVtYmVyOmUuc2VyaWFsTnVtYmVyKTtmLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDIsITEsdikpfX1lbHNlIGlmKCJjUkxEaXN0cmlidXRpb25Qb2ludHMiPT09ZS5uYW1lKXtlLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSk7Zj1lLnZhbHVlLnZhbHVlO3ZhciBtLGI9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKSxfPWkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywwLCEwLFtdKTtmb3IoaD0wO2g8ZS5hbHROYW1lcy5sZW5ndGg7KytoKXtjPShtPWUuYWx0TmFtZXNbaF0pLnZhbHVlO2lmKDc9PT1tLnR5cGUmJm0uaXApe2lmKG51bGw9PT0oYz1uLnV0aWwuYnl0ZXNGcm9tSVAobS5pcCkpKXRocm93KFM9bmV3IEVycm9yKCdFeHRlbnNpb24gImlwIiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBJUHY0IG9yIElQdjYgYWRkcmVzcy4nKSkuZXh0ZW5zaW9uPWUsU31lbHNlIDg9PT1tLnR5cGUmJihjPW0ub2lkP2kub2lkVG9EZXIoaS5vaWRUb0RlcihtLm9pZCkpOmkub2lkVG9EZXIoYykpO18udmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsbS50eXBlLCExLGMpKX1iLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDAsITAsW19dKSksZi5wdXNoKGIpfXZhciBTO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGUudmFsdWUpdGhyb3coUz1uZXcgRXJyb3IoIkV4dGVuc2lvbiB2YWx1ZSBub3Qgc3BlY2lmaWVkLiIpKS5leHRlbnNpb249ZSxTO3JldHVybiBlfWZ1bmN0aW9uIG0oZSx0KXtzd2l0Y2goZSl7Y2FzZSBhWyJSU0FTU0EtUFNTIl06dmFyIHI9W107cmV0dXJuIHZvaWQgMCE9PXQuaGFzaC5hbGdvcml0aG1PaWQmJnIucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIodC5oYXNoLmFsZ29yaXRobU9pZCkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk5VTEwsITEsIiIpXSldKSksdm9pZCAwIT09dC5tZ2YuYWxnb3JpdGhtT2lkJiZyLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDEsITAsW2kuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKHQubWdmLmFsZ29yaXRobU9pZCkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIodC5tZ2YuaGFzaC5hbGdvcml0aG1PaWQpLmdldEJ5dGVzKCkpLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5OVUxMLCExLCIiKV0pXSldKSksdm9pZCAwIT09dC5zYWx0TGVuZ3RoJiZyLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDIsITAsW2kuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5JTlRFR0VSLCExLGkuaW50ZWdlclRvRGVyKHQuc2FsdExlbmd0aCkuZ2V0Qnl0ZXMoKSldKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLHIpO2RlZmF1bHQ6cmV0dXJuIGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5OVUxMLCExLCIiKX19ZnVuY3Rpb24gYihlKXt2YXIgdD1pLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbXSk7aWYoMD09PWUuYXR0cmlidXRlcy5sZW5ndGgpcmV0dXJuIHQ7Zm9yKHZhciByPWUuYXR0cmlidXRlcyxvPTA7bzxyLmxlbmd0aDsrK28pe3ZhciBhPXJbb10scz1hLnZhbHVlLHU9aS5UeXBlLlVURjg7InZhbHVlVGFnQ2xhc3MiaW4gYSYmKHU9YS52YWx1ZVRhZ0NsYXNzKSx1PT09aS5UeXBlLlVURjgmJihzPW4udXRpbC5lbmNvZGVVdGY4KHMpKTt2YXIgYz0hMTsidmFsdWVDb25zdHJ1Y3RlZCJpbiBhJiYoYz1hLnZhbHVlQ29uc3RydWN0ZWQpO3ZhciBmPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGEudHlwZSkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFVCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsdSxjLHMpXSldKTt0LnZhbHVlLnB1c2goZil9cmV0dXJuIHR9by5jZXJ0aWZpY2F0ZUZyb21QZW09ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4ucGVtLmRlY29kZShlKVswXTtpZigiQ0VSVElGSUNBVEUiIT09YS50eXBlJiYiWDUwOSBDRVJUSUZJQ0FURSIhPT1hLnR5cGUmJiJUUlVTVEVEIENFUlRJRklDQVRFIiE9PWEudHlwZSl7dmFyIHM9bmV3IEVycm9yKCdDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0ZSBmcm9tIFBFTTsgUEVNIGhlYWRlciB0eXBlIGlzIG5vdCAiQ0VSVElGSUNBVEUiLCAiWDUwOSBDRVJUSUZJQ0FURSIsIG9yICJUUlVTVEVEIENFUlRJRklDQVRFIi4nKTt0aHJvdyBzLmhlYWRlclR5cGU9YS50eXBlLHN9aWYoYS5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT1hLnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0ZSBmcm9tIFBFTTsgUEVNIGlzIGVuY3J5cHRlZC4iKTt2YXIgdT1pLmZyb21EZXIoYS5ib2R5LHIpO3JldHVybiBvLmNlcnRpZmljYXRlRnJvbUFzbjEodSx0KX0sby5jZXJ0aWZpY2F0ZVRvUGVtPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e3R5cGU6IkNFUlRJRklDQVRFIixib2R5OmkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5wdWJsaWNLZXlGcm9tUGVtPWZ1bmN0aW9uKGUpe3ZhciB0PW4ucGVtLmRlY29kZShlKVswXTtpZigiUFVCTElDIEtFWSIhPT10LnR5cGUmJiJSU0EgUFVCTElDIEtFWSIhPT10LnR5cGUpe3ZhciByPW5ldyBFcnJvcignQ291bGQgbm90IGNvbnZlcnQgcHVibGljIGtleSBmcm9tIFBFTTsgUEVNIGhlYWRlciB0eXBlIGlzIG5vdCAiUFVCTElDIEtFWSIgb3IgIlJTQSBQVUJMSUMgS0VZIi4nKTt0aHJvdyByLmhlYWRlclR5cGU9dC50eXBlLHJ9aWYodC5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT10LnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBwdWJsaWMga2V5IGZyb20gUEVNOyBQRU0gaXMgZW5jcnlwdGVkLiIpO3ZhciBhPWkuZnJvbURlcih0LmJvZHkpO3JldHVybiBvLnB1YmxpY0tleUZyb21Bc24xKGEpfSxvLnB1YmxpY0tleVRvUGVtPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e3R5cGU6IlBVQkxJQyBLRVkiLGJvZHk6aS50b0RlcihvLnB1YmxpY0tleVRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5wdWJsaWNLZXlUb1JTQVB1YmxpY0tleVBlbT1mdW5jdGlvbihlLHQpe3ZhciByPXt0eXBlOiJSU0EgUFVCTElDIEtFWSIsYm9keTppLnRvRGVyKG8ucHVibGljS2V5VG9SU0FQdWJsaWNLZXkoZSkpLmdldEJ5dGVzKCl9O3JldHVybiBuLnBlbS5lbmNvZGUocix7bWF4bGluZTp0fSl9LG8uZ2V0UHVibGljS2V5RmluZ2VycHJpbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcixhPSh0PXR8fHt9KS5tZHx8bi5tZC5zaGExLmNyZWF0ZSgpO3N3aXRjaCh0LnR5cGV8fCJSU0FQdWJsaWNLZXkiKXtjYXNlIlJTQVB1YmxpY0tleSI6cj1pLnRvRGVyKG8ucHVibGljS2V5VG9SU0FQdWJsaWNLZXkoZSkpLmdldEJ5dGVzKCk7YnJlYWs7Y2FzZSJTdWJqZWN0UHVibGljS2V5SW5mbyI6cj1pLnRvRGVyKG8ucHVibGljS2V5VG9Bc24xKGUpKS5nZXRCeXRlcygpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZpbmdlcnByaW50IHR5cGUgIicrdC50eXBlKyciLicpfWEuc3RhcnQoKSxhLnVwZGF0ZShyKTt2YXIgcz1hLmRpZ2VzdCgpO2lmKCJoZXgiPT09dC5lbmNvZGluZyl7dmFyIHU9cy50b0hleCgpO3JldHVybiB0LmRlbGltaXRlcj91Lm1hdGNoKC8uezJ9L2cpLmpvaW4odC5kZWxpbWl0ZXIpOnV9aWYoImJpbmFyeSI9PT10LmVuY29kaW5nKXJldHVybiBzLmdldEJ5dGVzKCk7aWYodC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2RpbmcgIicrdC5lbmNvZGluZysnIi4nKTtyZXR1cm4gc30sby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21QZW09ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4ucGVtLmRlY29kZShlKVswXTtpZigiQ0VSVElGSUNBVEUgUkVRVUVTVCIhPT1hLnR5cGUpe3ZhciBzPW5ldyBFcnJvcignQ291bGQgbm90IGNvbnZlcnQgY2VydGlmaWNhdGlvbiByZXF1ZXN0IGZyb20gUEVNOyBQRU0gaGVhZGVyIHR5cGUgaXMgbm90ICJDRVJUSUZJQ0FURSBSRVFVRVNUIi4nKTt0aHJvdyBzLmhlYWRlclR5cGU9YS50eXBlLHN9aWYoYS5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT1hLnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0aW9uIHJlcXVlc3QgZnJvbSBQRU07IFBFTSBpcyBlbmNyeXB0ZWQuIik7dmFyIHU9aS5mcm9tRGVyKGEuYm9keSxyKTtyZXR1cm4gby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21Bc24xKHUsdCl9LG8uY2VydGlmaWNhdGlvblJlcXVlc3RUb1BlbT1mdW5jdGlvbihlLHQpe3ZhciByPXt0eXBlOiJDRVJUSUZJQ0FURSBSRVFVRVNUIixib2R5OmkudG9EZXIoby5jZXJ0aWZpY2F0aW9uUmVxdWVzdFRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5jcmVhdGVDZXJ0aWZpY2F0ZT1mdW5jdGlvbigpe3ZhciBlPXt2ZXJzaW9uOjIsc2VyaWFsTnVtYmVyOiIwMCIsc2lnbmF0dXJlT2lkOm51bGwsc2lnbmF0dXJlOm51bGwsc2lnaW5mbzp7fX07cmV0dXJuIGUuc2lnaW5mby5hbGdvcml0aG1PaWQ9bnVsbCxlLnZhbGlkaXR5PXt9LGUudmFsaWRpdHkubm90QmVmb3JlPW5ldyBEYXRlLGUudmFsaWRpdHkubm90QWZ0ZXI9bmV3IERhdGUsZS5pc3N1ZXI9e30sZS5pc3N1ZXIuZ2V0RmllbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHAoZS5pc3N1ZXIsdCl9LGUuaXNzdWVyLmFkZEZpZWxkPWZ1bmN0aW9uKHQpe2coW3RdKSxlLmlzc3Vlci5hdHRyaWJ1dGVzLnB1c2godCl9LGUuaXNzdWVyLmF0dHJpYnV0ZXM9W10sZS5pc3N1ZXIuaGFzaD1udWxsLGUuc3ViamVjdD17fSxlLnN1YmplY3QuZ2V0RmllbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHAoZS5zdWJqZWN0LHQpfSxlLnN1YmplY3QuYWRkRmllbGQ9ZnVuY3Rpb24odCl7ZyhbdF0pLGUuc3ViamVjdC5hdHRyaWJ1dGVzLnB1c2godCl9LGUuc3ViamVjdC5hdHRyaWJ1dGVzPVtdLGUuc3ViamVjdC5oYXNoPW51bGwsZS5leHRlbnNpb25zPVtdLGUucHVibGljS2V5PW51bGwsZS5tZD1udWxsLGUuc2V0U3ViamVjdD1mdW5jdGlvbih0LHIpe2codCksZS5zdWJqZWN0LmF0dHJpYnV0ZXM9dCxkZWxldGUgZS5zdWJqZWN0LnVuaXF1ZUlkLHImJihlLnN1YmplY3QudW5pcXVlSWQ9ciksZS5zdWJqZWN0Lmhhc2g9bnVsbH0sZS5zZXRJc3N1ZXI9ZnVuY3Rpb24odCxyKXtnKHQpLGUuaXNzdWVyLmF0dHJpYnV0ZXM9dCxkZWxldGUgZS5pc3N1ZXIudW5pcXVlSWQsciYmKGUuaXNzdWVyLnVuaXF1ZUlkPXIpLGUuaXNzdWVyLmhhc2g9bnVsbH0sZS5zZXRFeHRlbnNpb25zPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXYodFtyXSx7Y2VydDplfSk7ZS5leHRlbnNpb25zPXR9LGUuZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKHQpeyJzdHJpbmciPT09dHlwZW9mIHQmJih0PXtuYW1lOnR9KTtmb3IodmFyIHIsbj1udWxsLGk9MDtudWxsPT09biYmaTxlLmV4dGVuc2lvbnMubGVuZ3RoOysraSlyPWUuZXh0ZW5zaW9uc1tpXSx0LmlkJiZyLmlkPT09dC5pZD9uPXI6dC5uYW1lJiZyLm5hbWU9PT10Lm5hbWUmJihuPXIpO3JldHVybiBufSxlLnNpZ249ZnVuY3Rpb24odCxyKXtlLm1kPXJ8fG4ubWQuc2hhMS5jcmVhdGUoKTt2YXIgcz1hW2UubWQuYWxnb3JpdGhtKyJXaXRoUlNBRW5jcnlwdGlvbiJdO2lmKCFzKXt2YXIgdT1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRlIGRpZ2VzdC4gVW5rbm93biBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0gT0lELiIpO3Rocm93IHUuYWxnb3JpdGhtPWUubWQuYWxnb3JpdGhtLHV9ZS5zaWduYXR1cmVPaWQ9ZS5zaWdpbmZvLmFsZ29yaXRobU9pZD1zLGUudGJzQ2VydGlmaWNhdGU9by5nZXRUQlNDZXJ0aWZpY2F0ZShlKTt2YXIgYz1pLnRvRGVyKGUudGJzQ2VydGlmaWNhdGUpO2UubWQudXBkYXRlKGMuZ2V0Qnl0ZXMoKSksZS5zaWduYXR1cmU9dC5zaWduKGUubWQpfSxlLnZlcmlmeT1mdW5jdGlvbih0KXt2YXIgcj0hMTtpZighZS5pc3N1ZWQodCkpe3ZhciBzPXQuaXNzdWVyLHU9ZS5zdWJqZWN0O3Rocm93KHk9bmV3IEVycm9yKCJUaGUgcGFyZW50IGNlcnRpZmljYXRlIGRpZCBub3QgaXNzdWUgdGhlIGdpdmVuIGNoaWxkIGNlcnRpZmljYXRlOyB0aGUgY2hpbGQgY2VydGlmaWNhdGUncyBpc3N1ZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmVudCdzIHN1YmplY3QuIikpLmV4cGVjdGVkSXNzdWVyPXMuYXR0cmlidXRlcyx5LmFjdHVhbElzc3Vlcj11LmF0dHJpYnV0ZXMseX12YXIgYz10Lm1kO2lmKG51bGw9PT1jKXtpZih0LnNpZ25hdHVyZU9pZCBpbiBhKXN3aXRjaChhW3Quc2lnbmF0dXJlT2lkXSl7Y2FzZSJzaGExV2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5zaGExLmNyZWF0ZSgpO2JyZWFrO2Nhc2UibWQ1V2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5tZDUuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiI6Yz1uLm1kLnNoYTI1Ni5jcmVhdGUoKTticmVhaztjYXNlInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjpjPW4ubWQuc2hhMzg0LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5zaGE1MTIuY3JlYXRlKCk7YnJlYWs7Y2FzZSJSU0FTU0EtUFNTIjpjPW4ubWQuc2hhMjU2LmNyZWF0ZSgpfWlmKG51bGw9PT1jKXRocm93KHk9bmV3IEVycm9yKCJDb3VsZCBub3QgY29tcHV0ZSBjZXJ0aWZpY2F0ZSBkaWdlc3QuIFVua25vd24gc2lnbmF0dXJlIE9JRC4iKSkuc2lnbmF0dXJlT2lkPXQuc2lnbmF0dXJlT2lkLHk7dmFyIGY9dC50YnNDZXJ0aWZpY2F0ZXx8by5nZXRUQlNDZXJ0aWZpY2F0ZSh0KSxsPWkudG9EZXIoZik7Yy51cGRhdGUobC5nZXRCeXRlcygpKX1pZihudWxsIT09Yyl7dmFyIGg7c3dpdGNoKHQuc2lnbmF0dXJlT2lkKXtjYXNlIGEuc2hhMVdpdGhSU0FFbmNyeXB0aW9uOmg9dm9pZCAwO2JyZWFrO2Nhc2UgYVsiUlNBU1NBLVBTUyJdOnZhciBwLGQseTtpZih2b2lkIDA9PT0ocD1hW3Quc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuaGFzaC5hbGdvcml0aG1PaWRdKXx8dm9pZCAwPT09bi5tZFtwXSl0aHJvdyh5PW5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUdGIGhhc2ggZnVuY3Rpb24uIikpLm9pZD10LnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmhhc2guYWxnb3JpdGhtT2lkLHkubmFtZT1wLHk7aWYodm9pZCAwPT09KGQ9YVt0LnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1nZltkXSl0aHJvdyh5PW5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUdGIGZ1bmN0aW9uLiIpKS5vaWQ9dC5zaWduYXR1cmVQYXJhbWV0ZXJzLm1nZi5hbGdvcml0aG1PaWQseS5uYW1lPWQseTtpZihkPW4ubWdmW2RdLmNyZWF0ZShuLm1kW3BdLmNyZWF0ZSgpKSx2b2lkIDA9PT0ocD1hW3Quc2lnbmF0dXJlUGFyYW1ldGVycy5oYXNoLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1kW3BdKXRocm93e21lc3NhZ2U6IlVuc3VwcG9ydGVkIFJTQVNTQS1QU1MgaGFzaCBmdW5jdGlvbi4iLG9pZDp0LnNpZ25hdHVyZVBhcmFtZXRlcnMuaGFzaC5hbGdvcml0aG1PaWQsbmFtZTpwfTtoPW4ucHNzLmNyZWF0ZShuLm1kW3BdLmNyZWF0ZSgpLGQsdC5zaWduYXR1cmVQYXJhbWV0ZXJzLnNhbHRMZW5ndGgpfXI9ZS5wdWJsaWNLZXkudmVyaWZ5KGMuZGlnZXN0KCkuZ2V0Qnl0ZXMoKSx0LnNpZ25hdHVyZSxoKX1yZXR1cm4gcn0sZS5pc0lzc3Vlcj1mdW5jdGlvbih0KXt2YXIgcj0hMSxuPWUuaXNzdWVyLGk9dC5zdWJqZWN0O2lmKG4uaGFzaCYmaS5oYXNoKXI9bi5oYXNoPT09aS5oYXNoO2Vsc2UgaWYobi5hdHRyaWJ1dGVzLmxlbmd0aD09PWkuYXR0cmlidXRlcy5sZW5ndGgpe3ZhciBvLGE7cj0hMDtmb3IodmFyIHM9MDtyJiZzPG4uYXR0cmlidXRlcy5sZW5ndGg7KytzKW89bi5hdHRyaWJ1dGVzW3NdLGE9aS5hdHRyaWJ1dGVzW3NdLG8udHlwZT09PWEudHlwZSYmby52YWx1ZT09PWEudmFsdWV8fChyPSExKX1yZXR1cm4gcn0sZS5pc3N1ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNJc3N1ZXIoZSl9LGUuZ2VuZXJhdGVTdWJqZWN0S2V5SWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiBvLmdldFB1YmxpY0tleUZpbmdlcnByaW50KGUucHVibGljS2V5LHt0eXBlOiJSU0FQdWJsaWNLZXkifSl9LGUudmVyaWZ5U3ViamVjdEtleUlkZW50aWZpZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YS5zdWJqZWN0S2V5SWRlbnRpZmllcixyPTA7cjxlLmV4dGVuc2lvbnMubGVuZ3RoOysrcil7dmFyIGk9ZS5leHRlbnNpb25zW3JdO2lmKGkuaWQ9PT10KXt2YXIgbz1lLmdlbmVyYXRlU3ViamVjdEtleUlkZW50aWZpZXIoKS5nZXRCeXRlcygpO3JldHVybiBuLnV0aWwuaGV4VG9CeXRlcyhpLnN1YmplY3RLZXlJZGVudGlmaWVyKT09PW99fXJldHVybiExfSxlfSxvLmNlcnRpZmljYXRlRnJvbUFzbjE9ZnVuY3Rpb24oZSx0KXt2YXIgcj17fSxzPVtdO2lmKCFpLnZhbGlkYXRlKGUsYyxyLHMpKXRocm93KGg9bmV3IEVycm9yKCJDYW5ub3QgcmVhZCBYLjUwOSBjZXJ0aWZpY2F0ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBhbiBYNTA5djMgQ2VydGlmaWNhdGUuIikpLmVycm9ycz1zLGg7aWYoaS5kZXJUb09pZChyLnB1YmxpY0tleU9pZCkhPT1vLm9pZHMucnNhRW5jcnlwdGlvbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWFkIHB1YmxpYyBrZXkuIE9JRCBpcyBub3QgUlNBLiIpO3ZhciB1PW8uY3JlYXRlQ2VydGlmaWNhdGUoKTt1LnZlcnNpb249ci5jZXJ0VmVyc2lvbj9yLmNlcnRWZXJzaW9uLmNoYXJDb2RlQXQoMCk6MDt2YXIgZj1uLnV0aWwuY3JlYXRlQnVmZmVyKHIuY2VydFNlcmlhbE51bWJlcik7dS5zZXJpYWxOdW1iZXI9Zi50b0hleCgpLHUuc2lnbmF0dXJlT2lkPW4uYXNuMS5kZXJUb09pZChyLmNlcnRTaWduYXR1cmVPaWQpLHUuc2lnbmF0dXJlUGFyYW1ldGVycz1kKHUuc2lnbmF0dXJlT2lkLHIuY2VydFNpZ25hdHVyZVBhcmFtcywhMCksdS5zaWdpbmZvLmFsZ29yaXRobU9pZD1uLmFzbjEuZGVyVG9PaWQoci5jZXJ0aW5mb1NpZ25hdHVyZU9pZCksdS5zaWdpbmZvLnBhcmFtZXRlcnM9ZCh1LnNpZ2luZm8uYWxnb3JpdGhtT2lkLHIuY2VydGluZm9TaWduYXR1cmVQYXJhbXMsITEpLHUuc2lnbmF0dXJlPXIuY2VydFNpZ25hdHVyZTt2YXIgbD1bXTtpZih2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTFVVENUaW1lJiZsLnB1c2goaS51dGNUaW1lVG9EYXRlKHIuY2VydFZhbGlkaXR5MVVUQ1RpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTJHZW5lcmFsaXplZFRpbWUmJmwucHVzaChpLmdlbmVyYWxpemVkVGltZVRvRGF0ZShyLmNlcnRWYWxpZGl0eTJHZW5lcmFsaXplZFRpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTNVVENUaW1lJiZsLnB1c2goaS51dGNUaW1lVG9EYXRlKHIuY2VydFZhbGlkaXR5M1VUQ1RpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTRHZW5lcmFsaXplZFRpbWUmJmwucHVzaChpLmdlbmVyYWxpemVkVGltZVRvRGF0ZShyLmNlcnRWYWxpZGl0eTRHZW5lcmFsaXplZFRpbWUpKSxsLmxlbmd0aD4yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYWQgbm90QmVmb3JlL25vdEFmdGVyIHZhbGlkaXR5IHRpbWVzOyBtb3JlIHRoYW4gdHdvIHRpbWVzIHdlcmUgcHJvdmlkZWQgaW4gdGhlIGNlcnRpZmljYXRlLiIpO2lmKGwubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhZCBub3RCZWZvcmUvbm90QWZ0ZXIgdmFsaWRpdHkgdGltZXM7IHRoZXkgd2VyZSBub3QgcHJvdmlkZWQgYXMgZWl0aGVyIFVUQ1RpbWUgb3IgR2VuZXJhbGl6ZWRUaW1lLiIpO2lmKHUudmFsaWRpdHkubm90QmVmb3JlPWxbMF0sdS52YWxpZGl0eS5ub3RBZnRlcj1sWzFdLHUudGJzQ2VydGlmaWNhdGU9ci50YnNDZXJ0aWZpY2F0ZSx0KXt2YXIgaDtpZih1Lm1kPW51bGwsdS5zaWduYXR1cmVPaWQgaW4gYSlzd2l0Y2goYVt1LnNpZ25hdHVyZU9pZF0pe2Nhc2Uic2hhMVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhMS5jcmVhdGUoKTticmVhaztjYXNlIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQubWQ1LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnUubWQ9bi5tZC5zaGEyNTYuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6dS5tZD1uLm1kLnNoYTM4NC5jcmVhdGUoKTticmVhaztjYXNlInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhNTEyLmNyZWF0ZSgpO2JyZWFrO2Nhc2UiUlNBU1NBLVBTUyI6dS5tZD1uLm1kLnNoYTI1Ni5jcmVhdGUoKX1pZihudWxsPT09dS5tZCl0aHJvdyhoPW5ldyBFcnJvcigiQ291bGQgbm90IGNvbXB1dGUgY2VydGlmaWNhdGUgZGlnZXN0LiBVbmtub3duIHNpZ25hdHVyZSBPSUQuIikpLnNpZ25hdHVyZU9pZD11LnNpZ25hdHVyZU9pZCxoO3ZhciB5PWkudG9EZXIodS50YnNDZXJ0aWZpY2F0ZSk7dS5tZC51cGRhdGUoeS5nZXRCeXRlcygpKX12YXIgdj1uLm1kLnNoYTEuY3JlYXRlKCk7dS5pc3N1ZXIuZ2V0RmllbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHAodS5pc3N1ZXIsZSl9LHUuaXNzdWVyLmFkZEZpZWxkPWZ1bmN0aW9uKGUpe2coW2VdKSx1Lmlzc3Vlci5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuaXNzdWVyLmF0dHJpYnV0ZXM9by5SRE5BdHRyaWJ1dGVzQXNBcnJheShyLmNlcnRJc3N1ZXIsdiksci5jZXJ0SXNzdWVyVW5pcXVlSWQmJih1Lmlzc3Vlci51bmlxdWVJZD1yLmNlcnRJc3N1ZXJVbmlxdWVJZCksdS5pc3N1ZXIuaGFzaD12LmRpZ2VzdCgpLnRvSGV4KCk7dmFyIG09bi5tZC5zaGExLmNyZWF0ZSgpO3JldHVybiB1LnN1YmplY3QuZ2V0RmllbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHAodS5zdWJqZWN0LGUpfSx1LnN1YmplY3QuYWRkRmllbGQ9ZnVuY3Rpb24oZSl7ZyhbZV0pLHUuc3ViamVjdC5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuc3ViamVjdC5hdHRyaWJ1dGVzPW8uUkROQXR0cmlidXRlc0FzQXJyYXkoci5jZXJ0U3ViamVjdCxtKSxyLmNlcnRTdWJqZWN0VW5pcXVlSWQmJih1LnN1YmplY3QudW5pcXVlSWQ9ci5jZXJ0U3ViamVjdFVuaXF1ZUlkKSx1LnN1YmplY3QuaGFzaD1tLmRpZ2VzdCgpLnRvSGV4KCksci5jZXJ0RXh0ZW5zaW9ucz91LmV4dGVuc2lvbnM9by5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNGcm9tQXNuMShyLmNlcnRFeHRlbnNpb25zKTp1LmV4dGVuc2lvbnM9W10sdS5wdWJsaWNLZXk9by5wdWJsaWNLZXlGcm9tQXNuMShyLnN1YmplY3RQdWJsaWNLZXlJbmZvKSx1fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uc0Zyb21Bc24xPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLnZhbHVlLmxlbmd0aDsrK3IpZm9yKHZhciBuPWUudmFsdWVbcl0saT0wO2k8bi52YWx1ZS5sZW5ndGg7KytpKXQucHVzaChvLmNlcnRpZmljYXRlRXh0ZW5zaW9uRnJvbUFzbjEobi52YWx1ZVtpXSkpO3JldHVybiB0fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uRnJvbUFzbjE9ZnVuY3Rpb24oZSl7dmFyIHQ9e307aWYodC5pZD1pLmRlclRvT2lkKGUudmFsdWVbMF0udmFsdWUpLHQuY3JpdGljYWw9ITEsZS52YWx1ZVsxXS50eXBlPT09aS5UeXBlLkJPT0xFQU4/KHQuY3JpdGljYWw9MCE9PWUudmFsdWVbMV0udmFsdWUuY2hhckNvZGVBdCgwKSx0LnZhbHVlPWUudmFsdWVbMl0udmFsdWUpOnQudmFsdWU9ZS52YWx1ZVsxXS52YWx1ZSx0LmlkIGluIGEpaWYodC5uYW1lPWFbdC5pZF0sImtleVVzYWdlIj09PXQubmFtZSl7dmFyIHI9MCxvPTA7KHU9aS5mcm9tRGVyKHQudmFsdWUpKS52YWx1ZS5sZW5ndGg+MSYmKHI9dS52YWx1ZS5jaGFyQ29kZUF0KDEpLG89dS52YWx1ZS5sZW5ndGg+Mj91LnZhbHVlLmNoYXJDb2RlQXQoMik6MCksdC5kaWdpdGFsU2lnbmF0dXJlPTEyOD09PSgxMjgmciksdC5ub25SZXB1ZGlhdGlvbj02ND09PSg2NCZyKSx0LmtleUVuY2lwaGVybWVudD0zMj09PSgzMiZyKSx0LmRhdGFFbmNpcGhlcm1lbnQ9MTY9PT0oMTYmciksdC5rZXlBZ3JlZW1lbnQ9OD09PSg4JnIpLHQua2V5Q2VydFNpZ249ND09PSg0JnIpLHQuY1JMU2lnbj0yPT09KDImciksdC5lbmNpcGhlck9ubHk9MT09PSgxJnIpLHQuZGVjaXBoZXJPbmx5PTEyOD09PSgxMjgmbyl9ZWxzZSBpZigiYmFzaWNDb25zdHJhaW50cyI9PT10Lm5hbWUpeyh1PWkuZnJvbURlcih0LnZhbHVlKSkudmFsdWUubGVuZ3RoPjAmJnUudmFsdWVbMF0udHlwZT09PWkuVHlwZS5CT09MRUFOP3QuY0E9MCE9PXUudmFsdWVbMF0udmFsdWUuY2hhckNvZGVBdCgwKTp0LmNBPSExO3ZhciBzPW51bGw7dS52YWx1ZS5sZW5ndGg+MCYmdS52YWx1ZVswXS50eXBlPT09aS5UeXBlLklOVEVHRVI/cz11LnZhbHVlWzBdLnZhbHVlOnUudmFsdWUubGVuZ3RoPjEmJihzPXUudmFsdWVbMV0udmFsdWUpLG51bGwhPT1zJiYodC5wYXRoTGVuQ29uc3RyYWludD1pLmRlclRvSW50ZWdlcihzKSl9ZWxzZSBpZigiZXh0S2V5VXNhZ2UiPT09dC5uYW1lKWZvcih2YXIgdT1pLmZyb21EZXIodC52YWx1ZSksYz0wO2M8dS52YWx1ZS5sZW5ndGg7KytjKXt2YXIgZj1pLmRlclRvT2lkKHUudmFsdWVbY10udmFsdWUpO2YgaW4gYT90W2FbZl1dPSEwOnRbZl09ITB9ZWxzZSBpZigibnNDZXJ0VHlwZSI9PT10Lm5hbWUpe3I9MDsodT1pLmZyb21EZXIodC52YWx1ZSkpLnZhbHVlLmxlbmd0aD4xJiYocj11LnZhbHVlLmNoYXJDb2RlQXQoMSkpLHQuY2xpZW50PTEyOD09PSgxMjgmciksdC5zZXJ2ZXI9NjQ9PT0oNjQmciksdC5lbWFpbD0zMj09PSgzMiZyKSx0Lm9ianNpZ249MTY9PT0oMTYmciksdC5yZXNlcnZlZD04PT09KDgmciksdC5zc2xDQT00PT09KDQmciksdC5lbWFpbENBPTI9PT0oMiZyKSx0Lm9iakNBPTE9PT0oMSZyKX1lbHNlIGlmKCJzdWJqZWN0QWx0TmFtZSI9PT10Lm5hbWV8fCJpc3N1ZXJBbHROYW1lIj09PXQubmFtZSl7dmFyIGw7dC5hbHROYW1lcz1bXTt1PWkuZnJvbURlcih0LnZhbHVlKTtmb3IodmFyIGg9MDtoPHUudmFsdWUubGVuZ3RoOysraCl7dmFyIHA9e3R5cGU6KGw9dS52YWx1ZVtoXSkudHlwZSx2YWx1ZTpsLnZhbHVlfTtzd2l0Y2godC5hbHROYW1lcy5wdXNoKHApLGwudHlwZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDY6YnJlYWs7Y2FzZSA3OnAuaXA9bi51dGlsLmJ5dGVzVG9JUChsLnZhbHVlKTticmVhaztjYXNlIDg6cC5vaWQ9aS5kZXJUb09pZChsLnZhbHVlKX19fWVsc2UgaWYoInN1YmplY3RLZXlJZGVudGlmaWVyIj09PXQubmFtZSl7dT1pLmZyb21EZXIodC52YWx1ZSk7dC5zdWJqZWN0S2V5SWRlbnRpZmllcj1uLnV0aWwuYnl0ZXNUb0hleCh1LnZhbHVlKX1yZXR1cm4gdH0sby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21Bc24xPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e30scz1bXTtpZighaS52YWxpZGF0ZShlLGgscixzKSl0aHJvdyhjPW5ldyBFcnJvcigiQ2Fubm90IHJlYWQgUEtDUyMxMCBjZXJ0aWZpY2F0ZSByZXF1ZXN0LiBBU04uMSBvYmplY3QgaXMgbm90IGEgUEtDUyMxMCBDZXJ0aWZpY2F0aW9uUmVxdWVzdC4iKSkuZXJyb3JzPXMsYztpZihpLmRlclRvT2lkKHIucHVibGljS2V5T2lkKSE9PW8ub2lkcy5yc2FFbmNyeXB0aW9uKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYWQgcHVibGljIGtleS4gT0lEIGlzIG5vdCBSU0EuIik7dmFyIHU9by5jcmVhdGVDZXJ0aWZpY2F0aW9uUmVxdWVzdCgpO2lmKHUudmVyc2lvbj1yLmNzclZlcnNpb24/ci5jc3JWZXJzaW9uLmNoYXJDb2RlQXQoMCk6MCx1LnNpZ25hdHVyZU9pZD1uLmFzbjEuZGVyVG9PaWQoci5jc3JTaWduYXR1cmVPaWQpLHUuc2lnbmF0dXJlUGFyYW1ldGVycz1kKHUuc2lnbmF0dXJlT2lkLHIuY3NyU2lnbmF0dXJlUGFyYW1zLCEwKSx1LnNpZ2luZm8uYWxnb3JpdGhtT2lkPW4uYXNuMS5kZXJUb09pZChyLmNzclNpZ25hdHVyZU9pZCksdS5zaWdpbmZvLnBhcmFtZXRlcnM9ZCh1LnNpZ2luZm8uYWxnb3JpdGhtT2lkLHIuY3NyU2lnbmF0dXJlUGFyYW1zLCExKSx1LnNpZ25hdHVyZT1yLmNzclNpZ25hdHVyZSx1LmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbz1yLmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyx0KXt2YXIgYztpZih1Lm1kPW51bGwsdS5zaWduYXR1cmVPaWQgaW4gYSlzd2l0Y2goYVt1LnNpZ25hdHVyZU9pZF0pe2Nhc2Uic2hhMVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhMS5jcmVhdGUoKTticmVhaztjYXNlIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQubWQ1LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnUubWQ9bi5tZC5zaGEyNTYuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6dS5tZD1uLm1kLnNoYTM4NC5jcmVhdGUoKTticmVhaztjYXNlInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhNTEyLmNyZWF0ZSgpO2JyZWFrO2Nhc2UiUlNBU1NBLVBTUyI6dS5tZD1uLm1kLnNoYTI1Ni5jcmVhdGUoKX1pZihudWxsPT09dS5tZCl0aHJvdyhjPW5ldyBFcnJvcigiQ291bGQgbm90IGNvbXB1dGUgY2VydGlmaWNhdGlvbiByZXF1ZXN0IGRpZ2VzdC4gVW5rbm93biBzaWduYXR1cmUgT0lELiIpKS5zaWduYXR1cmVPaWQ9dS5zaWduYXR1cmVPaWQsYzt2YXIgZj1pLnRvRGVyKHUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKTt1Lm1kLnVwZGF0ZShmLmdldEJ5dGVzKCkpfXZhciBsPW4ubWQuc2hhMS5jcmVhdGUoKTtyZXR1cm4gdS5zdWJqZWN0LmdldEZpZWxkPWZ1bmN0aW9uKGUpe3JldHVybiBwKHUuc3ViamVjdCxlKX0sdS5zdWJqZWN0LmFkZEZpZWxkPWZ1bmN0aW9uKGUpe2coW2VdKSx1LnN1YmplY3QuYXR0cmlidXRlcy5wdXNoKGUpfSx1LnN1YmplY3QuYXR0cmlidXRlcz1vLlJETkF0dHJpYnV0ZXNBc0FycmF5KHIuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvU3ViamVjdCxsKSx1LnN1YmplY3QuaGFzaD1sLmRpZ2VzdCgpLnRvSGV4KCksdS5wdWJsaWNLZXk9by5wdWJsaWNLZXlGcm9tQXNuMShyLnN1YmplY3RQdWJsaWNLZXlJbmZvKSx1LmdldEF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gcCh1LGUpfSx1LmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlKXtnKFtlXSksdS5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuYXR0cmlidXRlcz1vLkNSSUF0dHJpYnV0ZXNBc0FycmF5KHIuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvQXR0cmlidXRlc3x8W10pLHV9LG8uY3JlYXRlQ2VydGlmaWNhdGlvblJlcXVlc3Q9ZnVuY3Rpb24oKXt2YXIgZT17dmVyc2lvbjowLHNpZ25hdHVyZU9pZDpudWxsLHNpZ25hdHVyZTpudWxsLHNpZ2luZm86e319O3JldHVybiBlLnNpZ2luZm8uYWxnb3JpdGhtT2lkPW51bGwsZS5zdWJqZWN0PXt9LGUuc3ViamVjdC5nZXRGaWVsZD1mdW5jdGlvbih0KXtyZXR1cm4gcChlLnN1YmplY3QsdCl9LGUuc3ViamVjdC5hZGRGaWVsZD1mdW5jdGlvbih0KXtnKFt0XSksZS5zdWJqZWN0LmF0dHJpYnV0ZXMucHVzaCh0KX0sZS5zdWJqZWN0LmF0dHJpYnV0ZXM9W10sZS5zdWJqZWN0Lmhhc2g9bnVsbCxlLnB1YmxpY0tleT1udWxsLGUuYXR0cmlidXRlcz1bXSxlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gcChlLHQpfSxlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbih0KXtnKFt0XSksZS5hdHRyaWJ1dGVzLnB1c2godCl9LGUubWQ9bnVsbCxlLnNldFN1YmplY3Q9ZnVuY3Rpb24odCl7Zyh0KSxlLnN1YmplY3QuYXR0cmlidXRlcz10LGUuc3ViamVjdC5oYXNoPW51bGx9LGUuc2V0QXR0cmlidXRlcz1mdW5jdGlvbih0KXtnKHQpLGUuYXR0cmlidXRlcz10fSxlLnNpZ249ZnVuY3Rpb24odCxyKXtlLm1kPXJ8fG4ubWQuc2hhMS5jcmVhdGUoKTt2YXIgcz1hW2UubWQuYWxnb3JpdGhtKyJXaXRoUlNBRW5jcnlwdGlvbiJdO2lmKCFzKXt2YXIgdT1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRpb24gcmVxdWVzdCBkaWdlc3QuIFVua25vd24gbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIE9JRC4iKTt0aHJvdyB1LmFsZ29yaXRobT1lLm1kLmFsZ29yaXRobSx1fWUuc2lnbmF0dXJlT2lkPWUuc2lnaW5mby5hbGdvcml0aG1PaWQ9cyxlLmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbz1vLmdldENlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyhlKTt2YXIgYz1pLnRvRGVyKGUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKTtlLm1kLnVwZGF0ZShjLmdldEJ5dGVzKCkpLGUuc2lnbmF0dXJlPXQuc2lnbihlLm1kKX0sZS52ZXJpZnk9ZnVuY3Rpb24oKXt2YXIgdD0hMSxyPWUubWQ7aWYobnVsbD09PXIpe2lmKGUuc2lnbmF0dXJlT2lkIGluIGEpc3dpdGNoKGFbZS5zaWduYXR1cmVPaWRdKXtjYXNlInNoYTFXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLnNoYTEuY3JlYXRlKCk7YnJlYWs7Y2FzZSJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLm1kNS5jcmVhdGUoKTticmVhaztjYXNlInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjpyPW4ubWQuc2hhMjU2LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iOnI9bi5tZC5zaGEzODQuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLnNoYTUxMi5jcmVhdGUoKTticmVhaztjYXNlIlJTQVNTQS1QU1MiOnI9bi5tZC5zaGEyNTYuY3JlYXRlKCl9aWYobnVsbD09PXIpdGhyb3coaD1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRpb24gcmVxdWVzdCBkaWdlc3QuIFVua25vd24gc2lnbmF0dXJlIE9JRC4iKSkuc2lnbmF0dXJlT2lkPWUuc2lnbmF0dXJlT2lkLGg7dmFyIHM9ZS5jZXJ0aWZpY2F0aW9uUmVxdWVzdEluZm98fG8uZ2V0Q2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKGUpLHU9aS50b0RlcihzKTtyLnVwZGF0ZSh1LmdldEJ5dGVzKCkpfWlmKG51bGwhPT1yKXt2YXIgYztzd2l0Y2goZS5zaWduYXR1cmVPaWQpe2Nhc2UgYS5zaGExV2l0aFJTQUVuY3J5cHRpb246YnJlYWs7Y2FzZSBhWyJSU0FTU0EtUFNTIl06dmFyIGYsbCxoO2lmKHZvaWQgMD09PShmPWFbZS5zaWduYXR1cmVQYXJhbWV0ZXJzLm1nZi5oYXNoLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1kW2ZdKXRocm93KGg9bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNR0YgaGFzaCBmdW5jdGlvbi4iKSkub2lkPWUuc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuaGFzaC5hbGdvcml0aG1PaWQsaC5uYW1lPWYsaDtpZih2b2lkIDA9PT0obD1hW2Uuc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuYWxnb3JpdGhtT2lkXSl8fHZvaWQgMD09PW4ubWdmW2xdKXRocm93KGg9bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNR0YgZnVuY3Rpb24uIikpLm9pZD1lLnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmFsZ29yaXRobU9pZCxoLm5hbWU9bCxoO2lmKGw9bi5tZ2ZbbF0uY3JlYXRlKG4ubWRbZl0uY3JlYXRlKCkpLHZvaWQgMD09PShmPWFbZS5zaWduYXR1cmVQYXJhbWV0ZXJzLmhhc2guYWxnb3JpdGhtT2lkXSl8fHZvaWQgMD09PW4ubWRbZl0pdGhyb3coaD1uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFJTQVNTQS1QU1MgaGFzaCBmdW5jdGlvbi4iKSkub2lkPWUuc2lnbmF0dXJlUGFyYW1ldGVycy5oYXNoLmFsZ29yaXRobU9pZCxoLm5hbWU9ZixoO2M9bi5wc3MuY3JlYXRlKG4ubWRbZl0uY3JlYXRlKCksbCxlLnNpZ25hdHVyZVBhcmFtZXRlcnMuc2FsdExlbmd0aCl9dD1lLnB1YmxpY0tleS52ZXJpZnkoci5kaWdlc3QoKS5nZXRCeXRlcygpLGUuc2lnbmF0dXJlLGMpfXJldHVybiB0fSxlfTt2YXIgXz1uZXcgRGF0ZSgiMTk1MC0wMS0wMVQwMDowMDowMFoiKSxTPW5ldyBEYXRlKCIyMDUwLTAxLTAxVDAwOjAwOjAwWiIpO2Z1bmN0aW9uIEUoZSl7cmV0dXJuIGU+PV8mJmU8Uz9pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuVVRDVElNRSwhMSxpLmRhdGVUb1V0Y1RpbWUoZSkpOmkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5HRU5FUkFMSVpFRFRJTUUsITEsaS5kYXRlVG9HZW5lcmFsaXplZFRpbWUoZSkpfW8uZ2V0VEJTQ2VydGlmaWNhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9RShlLnZhbGlkaXR5Lm5vdEJlZm9yZSkscj1FKGUudmFsaWRpdHkubm90QWZ0ZXIpLGE9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS52ZXJzaW9uKS5nZXRCeXRlcygpKV0pLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5JTlRFR0VSLCExLG4udXRpbC5oZXhUb0J5dGVzKGUuc2VyaWFsTnVtYmVyKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlU="
}

Changelog:

{
    "2020.03.29 15:15": "base64:bl0pKSl9dmFyIHU7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgdC52YWx1ZSl0aHJvdyh1PW5ldyBFcnJvcigiQXR0cmlidXRlIHZhbHVlIG5vdCBzcGVjaWZpZWQuIikpLmF0dHJpYnV0ZT10LHV9fWZ1bmN0aW9uIHYoZSx0KXtpZih0PXR8fHt9LCJ1bmRlZmluZWQiPT09dHlwZW9mIGUubmFtZSYmZS5pZCYmZS5pZCBpbiBvLm9pZHMmJihlLm5hbWU9by5vaWRzW2UuaWRdKSwidW5kZWZpbmVkIj09PXR5cGVvZiBlLmlkKXtpZighKGUubmFtZSYmZS5uYW1lIGluIG8ub2lkcykpdGhyb3coUz1uZXcgRXJyb3IoIkV4dGVuc2lvbiBJRCBub3Qgc3BlY2lmaWVkLiIpKS5leHRlbnNpb249ZSxTO2UuaWQ9by5vaWRzW2UubmFtZV19aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZS52YWx1ZSlyZXR1cm4gZTtpZigia2V5VXNhZ2UiPT09ZS5uYW1lKXt2YXIgcj0wLHM9MCx1PTA7ZS5kaWdpdGFsU2lnbmF0dXJlJiYoc3w9MTI4LHI9NyksZS5ub25SZXB1ZGlhdGlvbiYmKHN8PTY0LHI9NiksZS5rZXlFbmNpcGhlcm1lbnQmJihzfD0zMixyPTUpLGUuZGF0YUVuY2lwaGVybWVudCYmKHN8PTE2LHI9NCksZS5rZXlBZ3JlZW1lbnQmJihzfD04LHI9MyksZS5rZXlDZXJ0U2lnbiYmKHN8PTQscj0yKSxlLmNSTFNpZ24mJihzfD0yLHI9MSksZS5lbmNpcGhlck9ubHkmJihzfD0xLHI9MCksZS5kZWNpcGhlck9ubHkmJih1fD0xMjgscj03KTt2YXIgYz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpOzAhPT11P2MrPVN0cmluZy5mcm9tQ2hhckNvZGUocykrU3RyaW5nLmZyb21DaGFyQ29kZSh1KTowIT09cyYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUocykpLGUudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxjKX1lbHNlIGlmKCJiYXNpY0NvbnN0cmFpbnRzIj09PWUubmFtZSllLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSksZS5jQSYmZS52YWx1ZS52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CT09MRUFOLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KSkpLCJwYXRoTGVuQ29uc3RyYWludCJpbiBlJiZlLnZhbHVlLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS5wYXRoTGVuQ29uc3RyYWludCkuZ2V0Qnl0ZXMoKSkpO2Vsc2UgaWYoImV4dEtleVVzYWdlIj09PWUubmFtZSl7ZS52YWx1ZT1pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW10pO3ZhciBmPWUudmFsdWUudmFsdWU7Zm9yKHZhciBsIGluIGUpITA9PT1lW2xdJiYobCBpbiBhP2YucHVzaChpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIoYVtsXSkuZ2V0Qnl0ZXMoKSkpOi0xIT09bC5pbmRleE9mKCIuIikmJmYucHVzaChpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIobCkuZ2V0Qnl0ZXMoKSkpKX1lbHNlIGlmKCJuc0NlcnRUeXBlIj09PWUubmFtZSl7cj0wLHM9MDtlLmNsaWVudCYmKHN8PTEyOCxyPTcpLGUuc2VydmVyJiYoc3w9NjQscj02KSxlLmVtYWlsJiYoc3w9MzIscj01KSxlLm9ianNpZ24mJihzfD0xNixyPTQpLGUucmVzZXJ2ZWQmJihzfD04LHI9MyksZS5zc2xDQSYmKHN8PTQscj0yKSxlLmVtYWlsQ0EmJihzfD0yLHI9MSksZS5vYmpDQSYmKHN8PTEscj0wKTtjPVN0cmluZy5mcm9tQ2hhckNvZGUocik7MCE9PXMmJihjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpKSxlLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CSVRTVFJJTkcsITEsYyl9ZWxzZSBpZigic3ViamVjdEFsdE5hbWUiPT09ZS5uYW1lfHwiaXNzdWVyQWx0TmFtZSI9PT1lLm5hbWUpe2UudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKTtmb3IodmFyIGg9MDtoPGUuYWx0TmFtZXMubGVuZ3RoOysraCl7Yz0obT1lLmFsdE5hbWVzW2hdKS52YWx1ZTtpZig3PT09bS50eXBlJiZtLmlwKXtpZihudWxsPT09KGM9bi51dGlsLmJ5dGVzRnJvbUlQKG0uaXApKSl0aHJvdyhTPW5ldyBFcnJvcignRXh0ZW5zaW9uICJpcCIgdmFsdWUgaXMgbm90IGEgdmFsaWQgSVB2NCBvciBJUHY2IGFkZHJlc3MuJykpLmV4dGVuc2lvbj1lLFN9ZWxzZSA4PT09bS50eXBlJiYoYz1tLm9pZD9pLm9pZFRvRGVyKGkub2lkVG9EZXIobS5vaWQpKTppLm9pZFRvRGVyKGMpKTtlLnZhbHVlLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLG0udHlwZSwhMSxjKSl9fWVsc2UgaWYoIm5zQ29tbWVudCI9PT1lLm5hbWUmJnQuY2VydCl7aWYoIS9eW1x4MDAtXHg3Rl0qJC8udGVzdChlLmNvbW1lbnQpfHxlLmNvbW1lbnQubGVuZ3RoPDF8fGUuY29tbWVudC5sZW5ndGg+MTI4KXRocm93IG5ldyBFcnJvcignSW52YWxpZCAibnNDb21tZW50IiBjb250ZW50LicpO2UudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklBNVNUUklORywhMSxlLmNvbW1lbnQpfWVsc2UgaWYoInN1YmplY3RLZXlJZGVudGlmaWVyIj09PWUubmFtZSYmdC5jZXJ0KXt2YXIgcD10LmNlcnQuZ2VuZXJhdGVTdWJqZWN0S2V5SWRlbnRpZmllcigpO2Uuc3ViamVjdEtleUlkZW50aWZpZXI9cC50b0hleCgpLGUudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9DVEVUU1RSSU5HLCExLHAuZ2V0Qnl0ZXMoKSl9ZWxzZSBpZigiYXV0aG9yaXR5S2V5SWRlbnRpZmllciI9PT1lLm5hbWUmJnQuY2VydCl7ZS52YWx1ZT1pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW10pO2Y9ZS52YWx1ZS52YWx1ZTtpZihlLmtleUlkZW50aWZpZXIpe3ZhciBkPSEwPT09ZS5rZXlJZGVudGlmaWVyP3QuY2VydC5nZW5lcmF0ZVN1YmplY3RLZXlJZGVudGlmaWVyKCkuZ2V0Qnl0ZXMoKTplLmtleUlkZW50aWZpZXI7Zi5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywwLCExLGQpKX1pZihlLmF1dGhvcml0eUNlcnRJc3N1ZXIpe3ZhciBnPVtpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsNCwhMCxbeSghMD09PWUuYXV0aG9yaXR5Q2VydElzc3Vlcj90LmNlcnQuaXNzdWVyOmUuYXV0aG9yaXR5Q2VydElzc3VlcildKV07Zi5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywxLCEwLGcpKX1pZihlLnNlcmlhbE51bWJlcil7dmFyIHY9bi51dGlsLmhleFRvQnl0ZXMoITA9PT1lLnNlcmlhbE51bWJlcj90LmNlcnQuc2VyaWFsTnVtYmVyOmUuc2VyaWFsTnVtYmVyKTtmLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDIsITEsdikpfX1lbHNlIGlmKCJjUkxEaXN0cmlidXRpb25Qb2ludHMiPT09ZS5uYW1lKXtlLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSk7Zj1lLnZhbHVlLnZhbHVlO3ZhciBtLGI9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKSxfPWkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywwLCEwLFtdKTtmb3IoaD0wO2g8ZS5hbHROYW1lcy5sZW5ndGg7KytoKXtjPShtPWUuYWx0TmFtZXNbaF0pLnZhbHVlO2lmKDc9PT1tLnR5cGUmJm0uaXApe2lmKG51bGw9PT0oYz1uLnV0aWwuYnl0ZXNGcm9tSVAobS5pcCkpKXRocm93KFM9bmV3IEVycm9yKCdFeHRlbnNpb24gImlwIiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBJUHY0IG9yIElQdjYgYWRkcmVzcy4nKSkuZXh0ZW5zaW9uPWUsU31lbHNlIDg9PT1tLnR5cGUmJihjPW0ub2lkP2kub2lkVG9EZXIoaS5vaWRUb0RlcihtLm9pZCkpOmkub2lkVG9EZXIoYykpO18udmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsbS50eXBlLCExLGMpKX1iLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDAsITAsW19dKSksZi5wdXNoKGIpfXZhciBTO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGUudmFsdWUpdGhyb3coUz1uZXcgRXJyb3IoIkV4dGVuc2lvbiB2YWx1ZSBub3Qgc3BlY2lmaWVkLiIpKS5leHRlbnNpb249ZSxTO3JldHVybiBlfWZ1bmN0aW9uIG0oZSx0KXtzd2l0Y2goZSl7Y2FzZSBhWyJSU0FTU0EtUFNTIl06dmFyIHI9W107cmV0dXJuIHZvaWQgMCE9PXQuaGFzaC5hbGdvcml0aG1PaWQmJnIucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIodC5oYXNoLmFsZ29yaXRobU9pZCkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk5VTEwsITEsIiIpXSldKSksdm9pZCAwIT09dC5tZ2YuYWxnb3JpdGhtT2lkJiZyLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDEsITAsW2kuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKHQubWdmLmFsZ29yaXRobU9pZCkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIodC5tZ2YuaGFzaC5hbGdvcml0aG1PaWQpLmdldEJ5dGVzKCkpLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5OVUxMLCExLCIiKV0pXSldKSksdm9pZCAwIT09dC5zYWx0TGVuZ3RoJiZyLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDIsITAsW2kuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5JTlRFR0VSLCExLGkuaW50ZWdlclRvRGVyKHQuc2FsdExlbmd0aCkuZ2V0Qnl0ZXMoKSldKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLHIpO2RlZmF1bHQ6cmV0dXJuIGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5OVUxMLCExLCIiKX19ZnVuY3Rpb24gYihlKXt2YXIgdD1pLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbXSk7aWYoMD09PWUuYXR0cmlidXRlcy5sZW5ndGgpcmV0dXJuIHQ7Zm9yKHZhciByPWUuYXR0cmlidXRlcyxvPTA7bzxyLmxlbmd0aDsrK28pe3ZhciBhPXJbb10scz1hLnZhbHVlLHU9aS5UeXBlLlVURjg7InZhbHVlVGFnQ2xhc3MiaW4gYSYmKHU9YS52YWx1ZVRhZ0NsYXNzKSx1PT09aS5UeXBlLlVURjgmJihzPW4udXRpbC5lbmNvZGVVdGY4KHMpKTt2YXIgYz0hMTsidmFsdWVDb25zdHJ1Y3RlZCJpbiBhJiYoYz1hLnZhbHVlQ29uc3RydWN0ZWQpO3ZhciBmPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGEudHlwZSkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFVCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsdSxjLHMpXSldKTt0LnZhbHVlLnB1c2goZil9cmV0dXJuIHR9by5jZXJ0aWZpY2F0ZUZyb21QZW09ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4ucGVtLmRlY29kZShlKVswXTtpZigiQ0VSVElGSUNBVEUiIT09YS50eXBlJiYiWDUwOSBDRVJUSUZJQ0FURSIhPT1hLnR5cGUmJiJUUlVTVEVEIENFUlRJRklDQVRFIiE9PWEudHlwZSl7dmFyIHM9bmV3IEVycm9yKCdDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0ZSBmcm9tIFBFTTsgUEVNIGhlYWRlciB0eXBlIGlzIG5vdCAiQ0VSVElGSUNBVEUiLCAiWDUwOSBDRVJUSUZJQ0FURSIsIG9yICJUUlVTVEVEIENFUlRJRklDQVRFIi4nKTt0aHJvdyBzLmhlYWRlclR5cGU9YS50eXBlLHN9aWYoYS5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT1hLnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0ZSBmcm9tIFBFTTsgUEVNIGlzIGVuY3J5cHRlZC4iKTt2YXIgdT1pLmZyb21EZXIoYS5ib2R5LHIpO3JldHVybiBvLmNlcnRpZmljYXRlRnJvbUFzbjEodSx0KX0sby5jZXJ0aWZpY2F0ZVRvUGVtPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e3R5cGU6IkNFUlRJRklDQVRFIixib2R5OmkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5wdWJsaWNLZXlGcm9tUGVtPWZ1bmN0aW9uKGUpe3ZhciB0PW4ucGVtLmRlY29kZShlKVswXTtpZigiUFVCTElDIEtFWSIhPT10LnR5cGUmJiJSU0EgUFVCTElDIEtFWSIhPT10LnR5cGUpe3ZhciByPW5ldyBFcnJvcignQ291bGQgbm90IGNvbnZlcnQgcHVibGljIGtleSBmcm9tIFBFTTsgUEVNIGhlYWRlciB0eXBlIGlzIG5vdCAiUFVCTElDIEtFWSIgb3IgIlJTQSBQVUJMSUMgS0VZIi4nKTt0aHJvdyByLmhlYWRlclR5cGU9dC50eXBlLHJ9aWYodC5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT10LnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBwdWJsaWMga2V5IGZyb20gUEVNOyBQRU0gaXMgZW5jcnlwdGVkLiIpO3ZhciBhPWkuZnJvbURlcih0LmJvZHkpO3JldHVybiBvLnB1YmxpY0tleUZyb21Bc24xKGEpfSxvLnB1YmxpY0tleVRvUGVtPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e3R5cGU6IlBVQkxJQyBLRVkiLGJvZHk6aS50b0RlcihvLnB1YmxpY0tleVRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5wdWJsaWNLZXlUb1JTQVB1YmxpY0tleVBlbT1mdW5jdGlvbihlLHQpe3ZhciByPXt0eXBlOiJSU0EgUFVCTElDIEtFWSIsYm9keTppLnRvRGVyKG8ucHVibGljS2V5VG9SU0FQdWJsaWNLZXkoZSkpLmdldEJ5dGVzKCl9O3JldHVybiBuLnBlbS5lbmNvZGUocix7bWF4bGluZTp0fSl9LG8uZ2V0UHVibGljS2V5RmluZ2VycHJpbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcixhPSh0PXR8fHt9KS5tZHx8bi5tZC5zaGExLmNyZWF0ZSgpO3N3aXRjaCh0LnR5cGV8fCJSU0FQdWJsaWNLZXkiKXtjYXNlIlJTQVB1YmxpY0tleSI6cj1pLnRvRGVyKG8ucHVibGljS2V5VG9SU0FQdWJsaWNLZXkoZSkpLmdldEJ5dGVzKCk7YnJlYWs7Y2FzZSJTdWJqZWN0UHVibGljS2V5SW5mbyI6cj1pLnRvRGVyKG8ucHVibGljS2V5VG9Bc24xKGUpKS5nZXRCeXRlcygpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZpbmdlcnByaW50IHR5cGUgIicrdC50eXBlKyciLicpfWEuc3RhcnQoKSxhLnVwZGF0ZShyKTt2YXIgcz1hLmRpZ2VzdCgpO2lmKCJoZXgiPT09dC5lbmNvZGluZyl7dmFyIHU9cy50b0hleCgpO3JldHVybiB0LmRlbGltaXRlcj91Lm1hdGNoKC8uezJ9L2cpLmpvaW4odC5kZWxpbWl0ZXIpOnV9aWYoImJpbmFyeSI9PT10LmVuY29kaW5nKXJldHVybiBzLmdldEJ5dGVzKCk7aWYodC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2RpbmcgIicrdC5lbmNvZGluZysnIi4nKTtyZXR1cm4gc30sby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21QZW09ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4ucGVtLmRlY29kZShlKVswXTtpZigiQ0VSVElGSUNBVEUgUkVRVUVTVCIhPT1hLnR5cGUpe3ZhciBzPW5ldyBFcnJvcignQ291bGQgbm90IGNvbnZlcnQgY2VydGlmaWNhdGlvbiByZXF1ZXN0IGZyb20gUEVNOyBQRU0gaGVhZGVyIHR5cGUgaXMgbm90ICJDRVJUSUZJQ0FURSBSRVFVRVNUIi4nKTt0aHJvdyBzLmhlYWRlclR5cGU9YS50eXBlLHN9aWYoYS5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT1hLnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0aW9uIHJlcXVlc3QgZnJvbSBQRU07IFBFTSBpcyBlbmNyeXB0ZWQuIik7dmFyIHU9aS5mcm9tRGVyKGEuYm9keSxyKTtyZXR1cm4gby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21Bc24xKHUsdCl9LG8uY2VydGlmaWNhdGlvblJlcXVlc3RUb1BlbT1mdW5jdGlvbihlLHQpe3ZhciByPXt0eXBlOiJDRVJUSUZJQ0FURSBSRVFVRVNUIixib2R5OmkudG9EZXIoby5jZXJ0aWZpY2F0aW9uUmVxdWVzdFRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5jcmVhdGVDZXJ0aWZpY2F0ZT1mdW5jdGlvbigpe3ZhciBlPXt2ZXJzaW9uOjIsc2VyaWFsTnVtYmVyOiIwMCIsc2lnbmF0dXJlT2lkOm51bGwsc2lnbmF0dXJlOm51bGwsc2lnaW5mbzp7fX07cmV0dXJuIGUuc2lnaW5mby5hbGdvcml0aG1PaWQ9bnVsbCxlLnZhbGlkaXR5PXt9LGUudmFsaWRpdHkubm90QmVmb3JlPW5ldyBEYXRlLGUudmFsaWRpdHkubm90QWZ0ZXI9bmV3IERhdGUsZS5pc3N1ZXI9e30sZS5pc3N1ZXIuZ2V0RmllbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHAoZS5pc3N1ZXIsdCl9LGUuaXNzdWVyLmFkZEZpZWxkPWZ1bmN0aW9uKHQpe2coW3RdKSxlLmlzc3Vlci5hdHRyaWJ1dGVzLnB1c2godCl9LGUuaXNzdWVyLmF0dHJpYnV0ZXM9W10sZS5pc3N1ZXIuaGFzaD1udWxsLGUuc3ViamVjdD17fSxlLnN1YmplY3QuZ2V0RmllbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHAoZS5zdWJqZWN0LHQpfSxlLnN1YmplY3QuYWRkRmllbGQ9ZnVuY3Rpb24odCl7ZyhbdF0pLGUuc3ViamVjdC5hdHRyaWJ1dGVzLnB1c2godCl9LGUuc3ViamVjdC5hdHRyaWJ1dGVzPVtdLGUuc3ViamVjdC5oYXNoPW51bGwsZS5leHRlbnNpb25zPVtdLGUucHVibGljS2V5PW51bGwsZS5tZD1udWxsLGUuc2V0U3ViamVjdD1mdW5jdGlvbih0LHIpe2codCksZS5zdWJqZWN0LmF0dHJpYnV0ZXM9dCxkZWxldGUgZS5zdWJqZWN0LnVuaXF1ZUlkLHImJihlLnN1YmplY3QudW5pcXVlSWQ9ciksZS5zdWJqZWN0Lmhhc2g9bnVsbH0sZS5zZXRJc3N1ZXI9ZnVuY3Rpb24odCxyKXtnKHQpLGUuaXNzdWVyLmF0dHJpYnV0ZXM9dCxkZWxldGUgZS5pc3N1ZXIudW5pcXVlSWQsciYmKGUuaXNzdWVyLnVuaXF1ZUlkPXIpLGUuaXNzdWVyLmhhc2g9bnVsbH0sZS5zZXRFeHRlbnNpb25zPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXYodFtyXSx7Y2VydDplfSk7ZS5leHRlbnNpb25zPXR9LGUuZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKHQpeyJzdHJpbmciPT09dHlwZW9mIHQmJih0PXtuYW1lOnR9KTtmb3IodmFyIHIsbj1udWxsLGk9MDtudWxsPT09biYmaTxlLmV4dGVuc2lvbnMubGVuZ3RoOysraSlyPWUuZXh0ZW5zaW9uc1tpXSx0LmlkJiZyLmlkPT09dC5pZD9uPXI6dC5uYW1lJiZyLm5hbWU9PT10Lm5hbWUmJihuPXIpO3JldHVybiBufSxlLnNpZ249ZnVuY3Rpb24odCxyKXtlLm1kPXJ8fG4ubWQuc2hhMS5jcmVhdGUoKTt2YXIgcz1hW2UubWQuYWxnb3JpdGhtKyJXaXRoUlNBRW5jcnlwdGlvbiJdO2lmKCFzKXt2YXIgdT1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRlIGRpZ2VzdC4gVW5rbm93biBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0gT0lELiIpO3Rocm93IHUuYWxnb3JpdGhtPWUubWQuYWxnb3JpdGhtLHV9ZS5zaWduYXR1cmVPaWQ9ZS5zaWdpbmZvLmFsZ29yaXRobU9pZD1zLGUudGJzQ2VydGlmaWNhdGU9by5nZXRUQlNDZXJ0aWZpY2F0ZShlKTt2YXIgYz1pLnRvRGVyKGUudGJzQ2VydGlmaWNhdGUpO2UubWQudXBkYXRlKGMuZ2V0Qnl0ZXMoKSksZS5zaWduYXR1cmU9dC5zaWduKGUubWQpfSxlLnZlcmlmeT1mdW5jdGlvbih0KXt2YXIgcj0hMTtpZighZS5pc3N1ZWQodCkpe3ZhciBzPXQuaXNzdWVyLHU9ZS5zdWJqZWN0O3Rocm93KHk9bmV3IEVycm9yKCJUaGUgcGFyZW50IGNlcnRpZmljYXRlIGRpZCBub3QgaXNzdWUgdGhlIGdpdmVuIGNoaWxkIGNlcnRpZmljYXRlOyB0aGUgY2hpbGQgY2VydGlmaWNhdGUncyBpc3N1ZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmVudCdzIHN1YmplY3QuIikpLmV4cGVjdGVkSXNzdWVyPXMuYXR0cmlidXRlcyx5LmFjdHVhbElzc3Vlcj11LmF0dHJpYnV0ZXMseX12YXIgYz10Lm1kO2lmKG51bGw9PT1jKXtpZih0LnNpZ25hdHVyZU9pZCBpbiBhKXN3aXRjaChhW3Quc2lnbmF0dXJlT2lkXSl7Y2FzZSJzaGExV2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5zaGExLmNyZWF0ZSgpO2JyZWFrO2Nhc2UibWQ1V2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5tZDUuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiI6Yz1uLm1kLnNoYTI1Ni5jcmVhdGUoKTticmVhaztjYXNlInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjpjPW4ubWQuc2hhMzg0LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5zaGE1MTIuY3JlYXRlKCk7YnJlYWs7Y2FzZSJSU0FTU0EtUFNTIjpjPW4ubWQuc2hhMjU2LmNyZWF0ZSgpfWlmKG51bGw9PT1jKXRocm93KHk9bmV3IEVycm9yKCJDb3VsZCBub3QgY29tcHV0ZSBjZXJ0aWZpY2F0ZSBkaWdlc3QuIFVua25vd24gc2lnbmF0dXJlIE9JRC4iKSkuc2lnbmF0dXJlT2lkPXQuc2lnbmF0dXJlT2lkLHk7dmFyIGY9dC50YnNDZXJ0aWZpY2F0ZXx8by5nZXRUQlNDZXJ0aWZpY2F0ZSh0KSxsPWkudG9EZXIoZik7Yy51cGRhdGUobC5nZXRCeXRlcygpKX1pZihudWxsIT09Yyl7dmFyIGg7c3dpdGNoKHQuc2lnbmF0dXJlT2lkKXtjYXNlIGEuc2hhMVdpdGhSU0FFbmNyeXB0aW9uOmg9dm9pZCAwO2JyZWFrO2Nhc2UgYVsiUlNBU1NBLVBTUyJdOnZhciBwLGQseTtpZih2b2lkIDA9PT0ocD1hW3Quc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuaGFzaC5hbGdvcml0aG1PaWRdKXx8dm9pZCAwPT09bi5tZFtwXSl0aHJvdyh5PW5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUdGIGhhc2ggZnVuY3Rpb24uIikpLm9pZD10LnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmhhc2guYWxnb3JpdGhtT2lkLHkubmFtZT1wLHk7aWYodm9pZCAwPT09KGQ9YVt0LnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1nZltkXSl0aHJvdyh5PW5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUdGIGZ1bmN0aW9uLiIpKS5vaWQ9dC5zaWduYXR1cmVQYXJhbWV0ZXJzLm1nZi5hbGdvcml0aG1PaWQseS5uYW1lPWQseTtpZihkPW4ubWdmW2RdLmNyZWF0ZShuLm1kW3BdLmNyZWF0ZSgpKSx2b2lkIDA9PT0ocD1hW3Quc2lnbmF0dXJlUGFyYW1ldGVycy5oYXNoLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1kW3BdKXRocm93e21lc3NhZ2U6IlVuc3VwcG9ydGVkIFJTQVNTQS1QU1MgaGFzaCBmdW5jdGlvbi4iLG9pZDp0LnNpZ25hdHVyZVBhcmFtZXRlcnMuaGFzaC5hbGdvcml0aG1PaWQsbmFtZTpwfTtoPW4ucHNzLmNyZWF0ZShuLm1kW3BdLmNyZWF0ZSgpLGQsdC5zaWduYXR1cmVQYXJhbWV0ZXJzLnNhbHRMZW5ndGgpfXI9ZS5wdWJsaWNLZXkudmVyaWZ5KGMuZGlnZXN0KCkuZ2V0Qnl0ZXMoKSx0LnNpZ25hdHVyZSxoKX1yZXR1cm4gcn0sZS5pc0lzc3Vlcj1mdW5jdGlvbih0KXt2YXIgcj0hMSxuPWUuaXNzdWVyLGk9dC5zdWJqZWN0O2lmKG4uaGFzaCYmaS5oYXNoKXI9bi5oYXNoPT09aS5oYXNoO2Vsc2UgaWYobi5hdHRyaWJ1dGVzLmxlbmd0aD09PWkuYXR0cmlidXRlcy5sZW5ndGgpe3ZhciBvLGE7cj0hMDtmb3IodmFyIHM9MDtyJiZzPG4uYXR0cmlidXRlcy5sZW5ndGg7KytzKW89bi5hdHRyaWJ1dGVzW3NdLGE9aS5hdHRyaWJ1dGVzW3NdLG8udHlwZT09PWEudHlwZSYmby52YWx1ZT09PWEudmFsdWV8fChyPSExKX1yZXR1cm4gcn0sZS5pc3N1ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNJc3N1ZXIoZSl9LGUuZ2VuZXJhdGVTdWJqZWN0S2V5SWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiBvLmdldFB1YmxpY0tleUZpbmdlcnByaW50KGUucHVibGljS2V5LHt0eXBlOiJSU0FQdWJsaWNLZXkifSl9LGUudmVyaWZ5U3ViamVjdEtleUlkZW50aWZpZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YS5zdWJqZWN0S2V5SWRlbnRpZmllcixyPTA7cjxlLmV4dGVuc2lvbnMubGVuZ3RoOysrcil7dmFyIGk9ZS5leHRlbnNpb25zW3JdO2lmKGkuaWQ9PT10KXt2YXIgbz1lLmdlbmVyYXRlU3ViamVjdEtleUlkZW50aWZpZXIoKS5nZXRCeXRlcygpO3JldHVybiBuLnV0aWwuaGV4VG9CeXRlcyhpLnN1YmplY3RLZXlJZGVudGlmaWVyKT09PW99fXJldHVybiExfSxlfSxvLmNlcnRpZmljYXRlRnJvbUFzbjE9ZnVuY3Rpb24oZSx0KXt2YXIgcj17fSxzPVtdO2lmKCFpLnZhbGlkYXRlKGUsYyxyLHMpKXRocm93KGg9bmV3IEVycm9yKCJDYW5ub3QgcmVhZCBYLjUwOSBjZXJ0aWZpY2F0ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBhbiBYNTA5djMgQ2VydGlmaWNhdGUuIikpLmVycm9ycz1zLGg7aWYoaS5kZXJUb09pZChyLnB1YmxpY0tleU9pZCkhPT1vLm9pZHMucnNhRW5jcnlwdGlvbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWFkIHB1YmxpYyBrZXkuIE9JRCBpcyBub3QgUlNBLiIpO3ZhciB1PW8uY3JlYXRlQ2VydGlmaWNhdGUoKTt1LnZlcnNpb249ci5jZXJ0VmVyc2lvbj9yLmNlcnRWZXJzaW9uLmNoYXJDb2RlQXQoMCk6MDt2YXIgZj1uLnV0aWwuY3JlYXRlQnVmZmVyKHIuY2VydFNlcmlhbE51bWJlcik7dS5zZXJpYWxOdW1iZXI9Zi50b0hleCgpLHUuc2lnbmF0dXJlT2lkPW4uYXNuMS5kZXJUb09pZChyLmNlcnRTaWduYXR1cmVPaWQpLHUuc2lnbmF0dXJlUGFyYW1ldGVycz1kKHUuc2lnbmF0dXJlT2lkLHIuY2VydFNpZ25hdHVyZVBhcmFtcywhMCksdS5zaWdpbmZvLmFsZ29yaXRobU9pZD1uLmFzbjEuZGVyVG9PaWQoci5jZXJ0aW5mb1NpZ25hdHVyZU9pZCksdS5zaWdpbmZvLnBhcmFtZXRlcnM9ZCh1LnNpZ2luZm8uYWxnb3JpdGhtT2lkLHIuY2VydGluZm9TaWduYXR1cmVQYXJhbXMsITEpLHUuc2lnbmF0dXJlPXIuY2VydFNpZ25hdHVyZTt2YXIgbD1bXTtpZih2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTFVVENUaW1lJiZsLnB1c2goaS51dGNUaW1lVG9EYXRlKHIuY2VydFZhbGlkaXR5MVVUQ1RpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTJHZW5lcmFsaXplZFRpbWUmJmwucHVzaChpLmdlbmVyYWxpemVkVGltZVRvRGF0ZShyLmNlcnRWYWxpZGl0eTJHZW5lcmFsaXplZFRpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTNVVENUaW1lJiZsLnB1c2goaS51dGNUaW1lVG9EYXRlKHIuY2VydFZhbGlkaXR5M1VUQ1RpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTRHZW5lcmFsaXplZFRpbWUmJmwucHVzaChpLmdlbmVyYWxpemVkVGltZVRvRGF0ZShyLmNlcnRWYWxpZGl0eTRHZW5lcmFsaXplZFRpbWUpKSxsLmxlbmd0aD4yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYWQgbm90QmVmb3JlL25vdEFmdGVyIHZhbGlkaXR5IHRpbWVzOyBtb3JlIHRoYW4gdHdvIHRpbWVzIHdlcmUgcHJvdmlkZWQgaW4gdGhlIGNlcnRpZmljYXRlLiIpO2lmKGwubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhZCBub3RCZWZvcmUvbm90QWZ0ZXIgdmFsaWRpdHkgdGltZXM7IHRoZXkgd2VyZSBub3QgcHJvdmlkZWQgYXMgZWl0aGVyIFVUQ1RpbWUgb3IgR2VuZXJhbGl6ZWRUaW1lLiIpO2lmKHUudmFsaWRpdHkubm90QmVmb3JlPWxbMF0sdS52YWxpZGl0eS5ub3RBZnRlcj1sWzFdLHUudGJzQ2VydGlmaWNhdGU9ci50YnNDZXJ0aWZpY2F0ZSx0KXt2YXIgaDtpZih1Lm1kPW51bGwsdS5zaWduYXR1cmVPaWQgaW4gYSlzd2l0Y2goYVt1LnNpZ25hdHVyZU9pZF0pe2Nhc2Uic2hhMVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhMS5jcmVhdGUoKTticmVhaztjYXNlIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQubWQ1LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnUubWQ9bi5tZC5zaGEyNTYuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6dS5tZD1uLm1kLnNoYTM4NC5jcmVhdGUoKTticmVhaztjYXNlInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhNTEyLmNyZWF0ZSgpO2JyZWFrO2Nhc2UiUlNBU1NBLVBTUyI6dS5tZD1uLm1kLnNoYTI1Ni5jcmVhdGUoKX1pZihudWxsPT09dS5tZCl0aHJvdyhoPW5ldyBFcnJvcigiQ291bGQgbm90IGNvbXB1dGUgY2VydGlmaWNhdGUgZGlnZXN0LiBVbmtub3duIHNpZ25hdHVyZSBPSUQuIikpLnNpZ25hdHVyZU9pZD11LnNpZ25hdHVyZU9pZCxoO3ZhciB5PWkudG9EZXIodS50YnNDZXJ0aWZpY2F0ZSk7dS5tZC51cGRhdGUoeS5nZXRCeXRlcygpKX12YXIgdj1uLm1kLnNoYTEuY3JlYXRlKCk7dS5pc3N1ZXIuZ2V0RmllbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHAodS5pc3N1ZXIsZSl9LHUuaXNzdWVyLmFkZEZpZWxkPWZ1bmN0aW9uKGUpe2coW2VdKSx1Lmlzc3Vlci5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuaXNzdWVyLmF0dHJpYnV0ZXM9by5SRE5BdHRyaWJ1dGVzQXNBcnJheShyLmNlcnRJc3N1ZXIsdiksci5jZXJ0SXNzdWVyVW5pcXVlSWQmJih1Lmlzc3Vlci51bmlxdWVJZD1yLmNlcnRJc3N1ZXJVbmlxdWVJZCksdS5pc3N1ZXIuaGFzaD12LmRpZ2VzdCgpLnRvSGV4KCk7dmFyIG09bi5tZC5zaGExLmNyZWF0ZSgpO3JldHVybiB1LnN1YmplY3QuZ2V0RmllbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHAodS5zdWJqZWN0LGUpfSx1LnN1YmplY3QuYWRkRmllbGQ9ZnVuY3Rpb24oZSl7ZyhbZV0pLHUuc3ViamVjdC5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuc3ViamVjdC5hdHRyaWJ1dGVzPW8uUkROQXR0cmlidXRlc0FzQXJyYXkoci5jZXJ0U3ViamVjdCxtKSxyLmNlcnRTdWJqZWN0VW5pcXVlSWQmJih1LnN1YmplY3QudW5pcXVlSWQ9ci5jZXJ0U3ViamVjdFVuaXF1ZUlkKSx1LnN1YmplY3QuaGFzaD1tLmRpZ2VzdCgpLnRvSGV4KCksci5jZXJ0RXh0ZW5zaW9ucz91LmV4dGVuc2lvbnM9by5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNGcm9tQXNuMShyLmNlcnRFeHRlbnNpb25zKTp1LmV4dGVuc2lvbnM9W10sdS5wdWJsaWNLZXk9by5wdWJsaWNLZXlGcm9tQXNuMShyLnN1YmplY3RQdWJsaWNLZXlJbmZvKSx1fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uc0Zyb21Bc24xPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLnZhbHVlLmxlbmd0aDsrK3IpZm9yKHZhciBuPWUudmFsdWVbcl0saT0wO2k8bi52YWx1ZS5sZW5ndGg7KytpKXQucHVzaChvLmNlcnRpZmljYXRlRXh0ZW5zaW9uRnJvbUFzbjEobi52YWx1ZVtpXSkpO3JldHVybiB0fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uRnJvbUFzbjE9ZnVuY3Rpb24oZSl7dmFyIHQ9e307aWYodC5pZD1pLmRlclRvT2lkKGUudmFsdWVbMF0udmFsdWUpLHQuY3JpdGljYWw9ITEsZS52YWx1ZVsxXS50eXBlPT09aS5UeXBlLkJPT0xFQU4/KHQuY3JpdGljYWw9MCE9PWUudmFsdWVbMV0udmFsdWUuY2hhckNvZGVBdCgwKSx0LnZhbHVlPWUudmFsdWVbMl0udmFsdWUpOnQudmFsdWU9ZS52YWx1ZVsxXS52YWx1ZSx0LmlkIGluIGEpaWYodC5uYW1lPWFbdC5pZF0sImtleVVzYWdlIj09PXQubmFtZSl7dmFyIHI9MCxvPTA7KHU9aS5mcm9tRGVyKHQudmFsdWUpKS52YWx1ZS5sZW5ndGg+MSYmKHI9dS52YWx1ZS5jaGFyQ29kZUF0KDEpLG89dS52YWx1ZS5sZW5ndGg+Mj91LnZhbHVlLmNoYXJDb2RlQXQoMik6MCksdC5kaWdpdGFsU2lnbmF0dXJlPTEyOD09PSgxMjgmciksdC5ub25SZXB1ZGlhdGlvbj02ND09PSg2NCZyKSx0LmtleUVuY2lwaGVybWVudD0zMj09PSgzMiZyKSx0LmRhdGFFbmNpcGhlcm1lbnQ9MTY9PT0oMTYmciksdC5rZXlBZ3JlZW1lbnQ9OD09PSg4JnIpLHQua2V5Q2VydFNpZ249ND09PSg0JnIpLHQuY1JMU2lnbj0yPT09KDImciksdC5lbmNpcGhlck9ubHk9MT09PSgxJnIpLHQuZGVjaXBoZXJPbmx5PTEyOD09PSgxMjgmbyl9ZWxzZSBpZigiYmFzaWNDb25zdHJhaW50cyI9PT10Lm5hbWUpeyh1PWkuZnJvbURlcih0LnZhbHVlKSkudmFsdWUubGVuZ3RoPjAmJnUudmFsdWVbMF0udHlwZT09PWkuVHlwZS5CT09MRUFOP3QuY0E9MCE9PXUudmFsdWVbMF0udmFsdWUuY2hhckNvZGVBdCgwKTp0LmNBPSExO3ZhciBzPW51bGw7dS52YWx1ZS5sZW5ndGg+MCYmdS52YWx1ZVswXS50eXBlPT09aS5UeXBlLklOVEVHRVI/cz11LnZhbHVlWzBdLnZhbHVlOnUudmFsdWUubGVuZ3RoPjEmJihzPXUudmFsdWVbMV0udmFsdWUpLG51bGwhPT1zJiYodC5wYXRoTGVuQ29uc3RyYWludD1pLmRlclRvSW50ZWdlcihzKSl9ZWxzZSBpZigiZXh0S2V5VXNhZ2UiPT09dC5uYW1lKWZvcih2YXIgdT1pLmZyb21EZXIodC52YWx1ZSksYz0wO2M8dS52YWx1ZS5sZW5ndGg7KytjKXt2YXIgZj1pLmRlclRvT2lkKHUudmFsdWVbY10udmFsdWUpO2YgaW4gYT90W2FbZl1dPSEwOnRbZl09ITB9ZWxzZSBpZigibnNDZXJ0VHlwZSI9PT10Lm5hbWUpe3I9MDsodT1pLmZyb21EZXIodC52YWx1ZSkpLnZhbHVlLmxlbmd0aD4xJiYocj11LnZhbHVlLmNoYXJDb2RlQXQoMSkpLHQuY2xpZW50PTEyOD09PSgxMjgmciksdC5zZXJ2ZXI9NjQ9PT0oNjQmciksdC5lbWFpbD0zMj09PSgzMiZyKSx0Lm9ianNpZ249MTY9PT0oMTYmciksdC5yZXNlcnZlZD04PT09KDgmciksdC5zc2xDQT00PT09KDQmciksdC5lbWFpbENBPTI9PT0oMiZyKSx0Lm9iakNBPTE9PT0oMSZyKX1lbHNlIGlmKCJzdWJqZWN0QWx0TmFtZSI9PT10Lm5hbWV8fCJpc3N1ZXJBbHROYW1lIj09PXQubmFtZSl7dmFyIGw7dC5hbHROYW1lcz1bXTt1PWkuZnJvbURlcih0LnZhbHVlKTtmb3IodmFyIGg9MDtoPHUudmFsdWUubGVuZ3RoOysraCl7dmFyIHA9e3R5cGU6KGw9dS52YWx1ZVtoXSkudHlwZSx2YWx1ZTpsLnZhbHVlfTtzd2l0Y2godC5hbHROYW1lcy5wdXNoKHApLGwudHlwZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDY6YnJlYWs7Y2FzZSA3OnAuaXA9bi51dGlsLmJ5dGVzVG9JUChsLnZhbHVlKTticmVhaztjYXNlIDg6cC5vaWQ9aS5kZXJUb09pZChsLnZhbHVlKX19fWVsc2UgaWYoInN1YmplY3RLZXlJZGVudGlmaWVyIj09PXQubmFtZSl7dT1pLmZyb21EZXIodC52YWx1ZSk7dC5zdWJqZWN0S2V5SWRlbnRpZmllcj1uLnV0aWwuYnl0ZXNUb0hleCh1LnZhbHVlKX1yZXR1cm4gdH0sby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21Bc24xPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e30scz1bXTtpZighaS52YWxpZGF0ZShlLGgscixzKSl0aHJvdyhjPW5ldyBFcnJvcigiQ2Fubm90IHJlYWQgUEtDUyMxMCBjZXJ0aWZpY2F0ZSByZXF1ZXN0LiBBU04uMSBvYmplY3QgaXMgbm90IGEgUEtDUyMxMCBDZXJ0aWZpY2F0aW9uUmVxdWVzdC4iKSkuZXJyb3JzPXMsYztpZihpLmRlclRvT2lkKHIucHVibGljS2V5T2lkKSE9PW8ub2lkcy5yc2FFbmNyeXB0aW9uKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYWQgcHVibGljIGtleS4gT0lEIGlzIG5vdCBSU0EuIik7dmFyIHU9by5jcmVhdGVDZXJ0aWZpY2F0aW9uUmVxdWVzdCgpO2lmKHUudmVyc2lvbj1yLmNzclZlcnNpb24/ci5jc3JWZXJzaW9uLmNoYXJDb2RlQXQoMCk6MCx1LnNpZ25hdHVyZU9pZD1uLmFzbjEuZGVyVG9PaWQoci5jc3JTaWduYXR1cmVPaWQpLHUuc2lnbmF0dXJlUGFyYW1ldGVycz1kKHUuc2lnbmF0dXJlT2lkLHIuY3NyU2lnbmF0dXJlUGFyYW1zLCEwKSx1LnNpZ2luZm8uYWxnb3JpdGhtT2lkPW4uYXNuMS5kZXJUb09pZChyLmNzclNpZ25hdHVyZU9pZCksdS5zaWdpbmZvLnBhcmFtZXRlcnM9ZCh1LnNpZ2luZm8uYWxnb3JpdGhtT2lkLHIuY3NyU2lnbmF0dXJlUGFyYW1zLCExKSx1LnNpZ25hdHVyZT1yLmNzclNpZ25hdHVyZSx1LmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbz1yLmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyx0KXt2YXIgYztpZih1Lm1kPW51bGwsdS5zaWduYXR1cmVPaWQgaW4gYSlzd2l0Y2goYVt1LnNpZ25hdHVyZU9pZF0pe2Nhc2Uic2hhMVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhMS5jcmVhdGUoKTticmVhaztjYXNlIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQubWQ1LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnUubWQ9bi5tZC5zaGEyNTYuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6dS5tZD1uLm1kLnNoYTM4NC5jcmVhdGUoKTticmVhaztjYXNlInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhNTEyLmNyZWF0ZSgpO2JyZWFrO2Nhc2UiUlNBU1NBLVBTUyI6dS5tZD1uLm1kLnNoYTI1Ni5jcmVhdGUoKX1pZihudWxsPT09dS5tZCl0aHJvdyhjPW5ldyBFcnJvcigiQ291bGQgbm90IGNvbXB1dGUgY2VydGlmaWNhdGlvbiByZXF1ZXN0IGRpZ2VzdC4gVW5rbm93biBzaWduYXR1cmUgT0lELiIpKS5zaWduYXR1cmVPaWQ9dS5zaWduYXR1cmVPaWQsYzt2YXIgZj1pLnRvRGVyKHUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKTt1Lm1kLnVwZGF0ZShmLmdldEJ5dGVzKCkpfXZhciBsPW4ubWQuc2hhMS5jcmVhdGUoKTtyZXR1cm4gdS5zdWJqZWN0LmdldEZpZWxkPWZ1bmN0aW9uKGUpe3JldHVybiBwKHUuc3ViamVjdCxlKX0sdS5zdWJqZWN0LmFkZEZpZWxkPWZ1bmN0aW9uKGUpe2coW2VdKSx1LnN1YmplY3QuYXR0cmlidXRlcy5wdXNoKGUpfSx1LnN1YmplY3QuYXR0cmlidXRlcz1vLlJETkF0dHJpYnV0ZXNBc0FycmF5KHIuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvU3ViamVjdCxsKSx1LnN1YmplY3QuaGFzaD1sLmRpZ2VzdCgpLnRvSGV4KCksdS5wdWJsaWNLZXk9by5wdWJsaWNLZXlGcm9tQXNuMShyLnN1YmplY3RQdWJsaWNLZXlJbmZvKSx1LmdldEF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gcCh1LGUpfSx1LmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlKXtnKFtlXSksdS5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuYXR0cmlidXRlcz1vLkNSSUF0dHJpYnV0ZXNBc0FycmF5KHIuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvQXR0cmlidXRlc3x8W10pLHV9LG8uY3JlYXRlQ2VydGlmaWNhdGlvblJlcXVlc3Q9ZnVuY3Rpb24oKXt2YXIgZT17dmVyc2lvbjowLHNpZ25hdHVyZU9pZDpudWxsLHNpZ25hdHVyZTpudWxsLHNpZ2luZm86e319O3JldHVybiBlLnNpZ2luZm8uYWxnb3JpdGhtT2lkPW51bGwsZS5zdWJqZWN0PXt9LGUuc3ViamVjdC5nZXRGaWVsZD1mdW5jdGlvbih0KXtyZXR1cm4gcChlLnN1YmplY3QsdCl9LGUuc3ViamVjdC5hZGRGaWVsZD1mdW5jdGlvbih0KXtnKFt0XSksZS5zdWJqZWN0LmF0dHJpYnV0ZXMucHVzaCh0KX0sZS5zdWJqZWN0LmF0dHJpYnV0ZXM9W10sZS5zdWJqZWN0Lmhhc2g9bnVsbCxlLnB1YmxpY0tleT1udWxsLGUuYXR0cmlidXRlcz1bXSxlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gcChlLHQpfSxlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbih0KXtnKFt0XSksZS5hdHRyaWJ1dGVzLnB1c2godCl9LGUubWQ9bnVsbCxlLnNldFN1YmplY3Q9ZnVuY3Rpb24odCl7Zyh0KSxlLnN1YmplY3QuYXR0cmlidXRlcz10LGUuc3ViamVjdC5oYXNoPW51bGx9LGUuc2V0QXR0cmlidXRlcz1mdW5jdGlvbih0KXtnKHQpLGUuYXR0cmlidXRlcz10fSxlLnNpZ249ZnVuY3Rpb24odCxyKXtlLm1kPXJ8fG4ubWQuc2hhMS5jcmVhdGUoKTt2YXIgcz1hW2UubWQuYWxnb3JpdGhtKyJXaXRoUlNBRW5jcnlwdGlvbiJdO2lmKCFzKXt2YXIgdT1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRpb24gcmVxdWVzdCBkaWdlc3QuIFVua25vd24gbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIE9JRC4iKTt0aHJvdyB1LmFsZ29yaXRobT1lLm1kLmFsZ29yaXRobSx1fWUuc2lnbmF0dXJlT2lkPWUuc2lnaW5mby5hbGdvcml0aG1PaWQ9cyxlLmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbz1vLmdldENlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyhlKTt2YXIgYz1pLnRvRGVyKGUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKTtlLm1kLnVwZGF0ZShjLmdldEJ5dGVzKCkpLGUuc2lnbmF0dXJlPXQuc2lnbihlLm1kKX0sZS52ZXJpZnk9ZnVuY3Rpb24oKXt2YXIgdD0hMSxyPWUubWQ7aWYobnVsbD09PXIpe2lmKGUuc2lnbmF0dXJlT2lkIGluIGEpc3dpdGNoKGFbZS5zaWduYXR1cmVPaWRdKXtjYXNlInNoYTFXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLnNoYTEuY3JlYXRlKCk7YnJlYWs7Y2FzZSJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLm1kNS5jcmVhdGUoKTticmVhaztjYXNlInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjpyPW4ubWQuc2hhMjU2LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iOnI9bi5tZC5zaGEzODQuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLnNoYTUxMi5jcmVhdGUoKTticmVhaztjYXNlIlJTQVNTQS1QU1MiOnI9bi5tZC5zaGEyNTYuY3JlYXRlKCl9aWYobnVsbD09PXIpdGhyb3coaD1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRpb24gcmVxdWVzdCBkaWdlc3QuIFVua25vd24gc2lnbmF0dXJlIE9JRC4iKSkuc2lnbmF0dXJlT2lkPWUuc2lnbmF0dXJlT2lkLGg7dmFyIHM9ZS5jZXJ0aWZpY2F0aW9uUmVxdWVzdEluZm98fG8uZ2V0Q2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKGUpLHU9aS50b0RlcihzKTtyLnVwZGF0ZSh1LmdldEJ5dGVzKCkpfWlmKG51bGwhPT1yKXt2YXIgYztzd2l0Y2goZS5zaWduYXR1cmVPaWQpe2Nhc2UgYS5zaGExV2l0aFJTQUVuY3J5cHRpb246YnJlYWs7Y2FzZSBhWyJSU0FTU0EtUFNTIl06dmFyIGYsbCxoO2lmKHZvaWQgMD09PShmPWFbZS5zaWduYXR1cmVQYXJhbWV0ZXJzLm1nZi5oYXNoLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1kW2ZdKXRocm93KGg9bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNR0YgaGFzaCBmdW5jdGlvbi4iKSkub2lkPWUuc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuaGFzaC5hbGdvcml0aG1PaWQsaC5uYW1lPWYsaDtpZih2b2lkIDA9PT0obD1hW2Uuc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuYWxnb3JpdGhtT2lkXSl8fHZvaWQgMD09PW4ubWdmW2xdKXRocm93KGg9bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNR0YgZnVuY3Rpb24uIikpLm9pZD1lLnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmFsZ29yaXRobU9pZCxoLm5hbWU9bCxoO2lmKGw9bi5tZ2ZbbF0uY3JlYXRlKG4ubWRbZl0uY3JlYXRlKCkpLHZvaWQgMD09PShmPWFbZS5zaWduYXR1cmVQYXJhbWV0ZXJzLmhhc2guYWxnb3JpdGhtT2lkXSl8fHZvaWQgMD09PW4ubWRbZl0pdGhyb3coaD1uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFJTQVNTQS1QU1MgaGFzaCBmdW5jdGlvbi4iKSkub2lkPWUuc2lnbmF0dXJlUGFyYW1ldGVycy5oYXNoLmFsZ29yaXRobU9pZCxoLm5hbWU9ZixoO2M9bi5wc3MuY3JlYXRlKG4ubWRbZl0uY3JlYXRlKCksbCxlLnNpZ25hdHVyZVBhcmFtZXRlcnMuc2FsdExlbmd0aCl9dD1lLnB1YmxpY0tleS52ZXJpZnkoci5kaWdlc3QoKS5nZXRCeXRlcygpLGUuc2lnbmF0dXJlLGMpfXJldHVybiB0fSxlfTt2YXIgXz1uZXcgRGF0ZSgiMTk1MC0wMS0wMVQwMDowMDowMFoiKSxTPW5ldyBEYXRlKCIyMDUwLTAxLTAxVDAwOjAwOjAwWiIpO2Z1bmN0aW9uIEUoZSl7cmV0dXJuIGU+PV8mJmU8Uz9pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuVVRDVElNRSwhMSxpLmRhdGVUb1V0Y1RpbWUoZSkpOmkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5HRU5FUkFMSVpFRFRJTUUsITEsaS5kYXRlVG9HZW5lcmFsaXplZFRpbWUoZSkpfW8uZ2V0VEJTQ2VydGlmaWNhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9RShlLnZhbGlkaXR5Lm5vdEJlZm9yZSkscj1FKGUudmFsaWRpdHkubm90QWZ0ZXIpLGE9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS52ZXJzaW9uKS5nZXRCeXRlcygpKV0pLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5JTlRFR0VSLCExLG4udXRpbC5oZXhUb0J5dGVzKGUuc2VyaWFsTnVtYmVyKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlU=",
    "2020.03.29 15:15": "base64:bl0pKSl9dmFyIHU7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgdC52YWx1ZSl0aHJvdyh1PW5ldyBFcnJvcigiQXR0cmlidXRlIHZhbHVlIG5vdCBzcGVjaWZpZWQuIikpLmF0dHJpYnV0ZT10LHV9fWZ1bmN0aW9uIHYoZSx0KXtpZih0PXR8fHt9LCJ1bmRlZmluZWQiPT09dHlwZW9mIGUubmFtZSYmZS5pZCYmZS5pZCBpbiBvLm9pZHMmJihlLm5hbWU9by5vaWRzW2UuaWRdKSwidW5kZWZpbmVkIj09PXR5cGVvZiBlLmlkKXtpZighKGUubmFtZSYmZS5uYW1lIGluIG8ub2lkcykpdGhyb3coUz1uZXcgRXJyb3IoIkV4dGVuc2lvbiBJRCBub3Qgc3BlY2lmaWVkLiIpKS5leHRlbnNpb249ZSxTO2UuaWQ9by5vaWRzW2UubmFtZV19aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZS52YWx1ZSlyZXR1cm4gZTtpZigia2V5VXNhZ2UiPT09ZS5uYW1lKXt2YXIgcj0wLHM9MCx1PTA7ZS5kaWdpdGFsU2lnbmF0dXJlJiYoc3w9MTI4LHI9NyksZS5ub25SZXB1ZGlhdGlvbiYmKHN8PTY0LHI9NiksZS5rZXlFbmNpcGhlcm1lbnQmJihzfD0zMixyPTUpLGUuZGF0YUVuY2lwaGVybWVudCYmKHN8PTE2LHI9NCksZS5rZXlBZ3JlZW1lbnQmJihzfD04LHI9MyksZS5rZXlDZXJ0U2lnbiYmKHN8PTQscj0yKSxlLmNSTFNpZ24mJihzfD0yLHI9MSksZS5lbmNpcGhlck9ubHkmJihzfD0xLHI9MCksZS5kZWNpcGhlck9ubHkmJih1fD0xMjgscj03KTt2YXIgYz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpOzAhPT11P2MrPVN0cmluZy5mcm9tQ2hhckNvZGUocykrU3RyaW5nLmZyb21DaGFyQ29kZSh1KTowIT09cyYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUocykpLGUudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLkJJVFNUUklORywhMSxjKX1lbHNlIGlmKCJiYXNpY0NvbnN0cmFpbnRzIj09PWUubmFtZSllLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSksZS5jQSYmZS52YWx1ZS52YWx1ZS5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CT09MRUFOLCExLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KSkpLCJwYXRoTGVuQ29uc3RyYWludCJpbiBlJiZlLnZhbHVlLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS5wYXRoTGVuQ29uc3RyYWludCkuZ2V0Qnl0ZXMoKSkpO2Vsc2UgaWYoImV4dEtleVVzYWdlIj09PWUubmFtZSl7ZS52YWx1ZT1pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW10pO3ZhciBmPWUudmFsdWUudmFsdWU7Zm9yKHZhciBsIGluIGUpITA9PT1lW2xdJiYobCBpbiBhP2YucHVzaChpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIoYVtsXSkuZ2V0Qnl0ZXMoKSkpOi0xIT09bC5pbmRleE9mKCIuIikmJmYucHVzaChpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIobCkuZ2V0Qnl0ZXMoKSkpKX1lbHNlIGlmKCJuc0NlcnRUeXBlIj09PWUubmFtZSl7cj0wLHM9MDtlLmNsaWVudCYmKHN8PTEyOCxyPTcpLGUuc2VydmVyJiYoc3w9NjQscj02KSxlLmVtYWlsJiYoc3w9MzIscj01KSxlLm9ianNpZ24mJihzfD0xNixyPTQpLGUucmVzZXJ2ZWQmJihzfD04LHI9MyksZS5zc2xDQSYmKHN8PTQscj0yKSxlLmVtYWlsQ0EmJihzfD0yLHI9MSksZS5vYmpDQSYmKHN8PTEscj0wKTtjPVN0cmluZy5mcm9tQ2hhckNvZGUocik7MCE9PXMmJihjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpKSxlLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5CSVRTVFJJTkcsITEsYyl9ZWxzZSBpZigic3ViamVjdEFsdE5hbWUiPT09ZS5uYW1lfHwiaXNzdWVyQWx0TmFtZSI9PT1lLm5hbWUpe2UudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKTtmb3IodmFyIGg9MDtoPGUuYWx0TmFtZXMubGVuZ3RoOysraCl7Yz0obT1lLmFsdE5hbWVzW2hdKS52YWx1ZTtpZig3PT09bS50eXBlJiZtLmlwKXtpZihudWxsPT09KGM9bi51dGlsLmJ5dGVzRnJvbUlQKG0uaXApKSl0aHJvdyhTPW5ldyBFcnJvcignRXh0ZW5zaW9uICJpcCIgdmFsdWUgaXMgbm90IGEgdmFsaWQgSVB2NCBvciBJUHY2IGFkZHJlc3MuJykpLmV4dGVuc2lvbj1lLFN9ZWxzZSA4PT09bS50eXBlJiYoYz1tLm9pZD9pLm9pZFRvRGVyKGkub2lkVG9EZXIobS5vaWQpKTppLm9pZFRvRGVyKGMpKTtlLnZhbHVlLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLG0udHlwZSwhMSxjKSl9fWVsc2UgaWYoIm5zQ29tbWVudCI9PT1lLm5hbWUmJnQuY2VydCl7aWYoIS9eW1x4MDAtXHg3Rl0qJC8udGVzdChlLmNvbW1lbnQpfHxlLmNvbW1lbnQubGVuZ3RoPDF8fGUuY29tbWVudC5sZW5ndGg+MTI4KXRocm93IG5ldyBFcnJvcignSW52YWxpZCAibnNDb21tZW50IiBjb250ZW50LicpO2UudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklBNVNUUklORywhMSxlLmNvbW1lbnQpfWVsc2UgaWYoInN1YmplY3RLZXlJZGVudGlmaWVyIj09PWUubmFtZSYmdC5jZXJ0KXt2YXIgcD10LmNlcnQuZ2VuZXJhdGVTdWJqZWN0S2V5SWRlbnRpZmllcigpO2Uuc3ViamVjdEtleUlkZW50aWZpZXI9cC50b0hleCgpLGUudmFsdWU9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9DVEVUU1RSSU5HLCExLHAuZ2V0Qnl0ZXMoKSl9ZWxzZSBpZigiYXV0aG9yaXR5S2V5SWRlbnRpZmllciI9PT1lLm5hbWUmJnQuY2VydCl7ZS52YWx1ZT1pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuU0VRVUVOQ0UsITAsW10pO2Y9ZS52YWx1ZS52YWx1ZTtpZihlLmtleUlkZW50aWZpZXIpe3ZhciBkPSEwPT09ZS5rZXlJZGVudGlmaWVyP3QuY2VydC5nZW5lcmF0ZVN1YmplY3RLZXlJZGVudGlmaWVyKCkuZ2V0Qnl0ZXMoKTplLmtleUlkZW50aWZpZXI7Zi5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywwLCExLGQpKX1pZihlLmF1dGhvcml0eUNlcnRJc3N1ZXIpe3ZhciBnPVtpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsNCwhMCxbeSghMD09PWUuYXV0aG9yaXR5Q2VydElzc3Vlcj90LmNlcnQuaXNzdWVyOmUuYXV0aG9yaXR5Q2VydElzc3VlcildKV07Zi5wdXNoKGkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywxLCEwLGcpKX1pZihlLnNlcmlhbE51bWJlcil7dmFyIHY9bi51dGlsLmhleFRvQnl0ZXMoITA9PT1lLnNlcmlhbE51bWJlcj90LmNlcnQuc2VyaWFsTnVtYmVyOmUuc2VyaWFsTnVtYmVyKTtmLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDIsITEsdikpfX1lbHNlIGlmKCJjUkxEaXN0cmlidXRpb25Qb2ludHMiPT09ZS5uYW1lKXtlLnZhbHVlPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbXSk7Zj1lLnZhbHVlLnZhbHVlO3ZhciBtLGI9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtdKSxfPWkuY3JlYXRlKGkuQ2xhc3MuQ09OVEVYVF9TUEVDSUZJQywwLCEwLFtdKTtmb3IoaD0wO2g8ZS5hbHROYW1lcy5sZW5ndGg7KytoKXtjPShtPWUuYWx0TmFtZXNbaF0pLnZhbHVlO2lmKDc9PT1tLnR5cGUmJm0uaXApe2lmKG51bGw9PT0oYz1uLnV0aWwuYnl0ZXNGcm9tSVAobS5pcCkpKXRocm93KFM9bmV3IEVycm9yKCdFeHRlbnNpb24gImlwIiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBJUHY0IG9yIElQdjYgYWRkcmVzcy4nKSkuZXh0ZW5zaW9uPWUsU31lbHNlIDg9PT1tLnR5cGUmJihjPW0ub2lkP2kub2lkVG9EZXIoaS5vaWRUb0RlcihtLm9pZCkpOmkub2lkVG9EZXIoYykpO18udmFsdWUucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsbS50eXBlLCExLGMpKX1iLnZhbHVlLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDAsITAsW19dKSksZi5wdXNoKGIpfXZhciBTO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGUudmFsdWUpdGhyb3coUz1uZXcgRXJyb3IoIkV4dGVuc2lvbiB2YWx1ZSBub3Qgc3BlY2lmaWVkLiIpKS5leHRlbnNpb249ZSxTO3JldHVybiBlfWZ1bmN0aW9uIG0oZSx0KXtzd2l0Y2goZSl7Y2FzZSBhWyJSU0FTU0EtUFNTIl06dmFyIHI9W107cmV0dXJuIHZvaWQgMCE9PXQuaGFzaC5hbGdvcml0aG1PaWQmJnIucHVzaChpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIodC5oYXNoLmFsZ29yaXRobU9pZCkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk5VTEwsITEsIiIpXSldKSksdm9pZCAwIT09dC5tZ2YuYWxnb3JpdGhtT2lkJiZyLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDEsITAsW2kuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKHQubWdmLmFsZ29yaXRobU9pZCkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuT0lELCExLGkub2lkVG9EZXIodC5tZ2YuaGFzaC5hbGdvcml0aG1PaWQpLmdldEJ5dGVzKCkpLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5OVUxMLCExLCIiKV0pXSldKSksdm9pZCAwIT09dC5zYWx0TGVuZ3RoJiZyLnB1c2goaS5jcmVhdGUoaS5DbGFzcy5DT05URVhUX1NQRUNJRklDLDIsITAsW2kuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5JTlRFR0VSLCExLGkuaW50ZWdlclRvRGVyKHQuc2FsdExlbmd0aCkuZ2V0Qnl0ZXMoKSldKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLHIpO2RlZmF1bHQ6cmV0dXJuIGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5OVUxMLCExLCIiKX19ZnVuY3Rpb24gYihlKXt2YXIgdD1pLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbXSk7aWYoMD09PWUuYXR0cmlidXRlcy5sZW5ndGgpcmV0dXJuIHQ7Zm9yKHZhciByPWUuYXR0cmlidXRlcyxvPTA7bzxyLmxlbmd0aDsrK28pe3ZhciBhPXJbb10scz1hLnZhbHVlLHU9aS5UeXBlLlVURjg7InZhbHVlVGFnQ2xhc3MiaW4gYSYmKHU9YS52YWx1ZVRhZ0NsYXNzKSx1PT09aS5UeXBlLlVURjgmJihzPW4udXRpbC5lbmNvZGVVdGY4KHMpKTt2YXIgYz0hMTsidmFsdWVDb25zdHJ1Y3RlZCJpbiBhJiYoYz1hLnZhbHVlQ29uc3RydWN0ZWQpO3ZhciBmPWkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5TRVFVRU5DRSwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLk9JRCwhMSxpLm9pZFRvRGVyKGEudHlwZSkuZ2V0Qnl0ZXMoKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFVCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsdSxjLHMpXSldKTt0LnZhbHVlLnB1c2goZil9cmV0dXJuIHR9by5jZXJ0aWZpY2F0ZUZyb21QZW09ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4ucGVtLmRlY29kZShlKVswXTtpZigiQ0VSVElGSUNBVEUiIT09YS50eXBlJiYiWDUwOSBDRVJUSUZJQ0FURSIhPT1hLnR5cGUmJiJUUlVTVEVEIENFUlRJRklDQVRFIiE9PWEudHlwZSl7dmFyIHM9bmV3IEVycm9yKCdDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0ZSBmcm9tIFBFTTsgUEVNIGhlYWRlciB0eXBlIGlzIG5vdCAiQ0VSVElGSUNBVEUiLCAiWDUwOSBDRVJUSUZJQ0FURSIsIG9yICJUUlVTVEVEIENFUlRJRklDQVRFIi4nKTt0aHJvdyBzLmhlYWRlclR5cGU9YS50eXBlLHN9aWYoYS5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT1hLnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0ZSBmcm9tIFBFTTsgUEVNIGlzIGVuY3J5cHRlZC4iKTt2YXIgdT1pLmZyb21EZXIoYS5ib2R5LHIpO3JldHVybiBvLmNlcnRpZmljYXRlRnJvbUFzbjEodSx0KX0sby5jZXJ0aWZpY2F0ZVRvUGVtPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e3R5cGU6IkNFUlRJRklDQVRFIixib2R5OmkudG9EZXIoby5jZXJ0aWZpY2F0ZVRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5wdWJsaWNLZXlGcm9tUGVtPWZ1bmN0aW9uKGUpe3ZhciB0PW4ucGVtLmRlY29kZShlKVswXTtpZigiUFVCTElDIEtFWSIhPT10LnR5cGUmJiJSU0EgUFVCTElDIEtFWSIhPT10LnR5cGUpe3ZhciByPW5ldyBFcnJvcignQ291bGQgbm90IGNvbnZlcnQgcHVibGljIGtleSBmcm9tIFBFTTsgUEVNIGhlYWRlciB0eXBlIGlzIG5vdCAiUFVCTElDIEtFWSIgb3IgIlJTQSBQVUJMSUMgS0VZIi4nKTt0aHJvdyByLmhlYWRlclR5cGU9dC50eXBlLHJ9aWYodC5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT10LnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBwdWJsaWMga2V5IGZyb20gUEVNOyBQRU0gaXMgZW5jcnlwdGVkLiIpO3ZhciBhPWkuZnJvbURlcih0LmJvZHkpO3JldHVybiBvLnB1YmxpY0tleUZyb21Bc24xKGEpfSxvLnB1YmxpY0tleVRvUGVtPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e3R5cGU6IlBVQkxJQyBLRVkiLGJvZHk6aS50b0RlcihvLnB1YmxpY0tleVRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5wdWJsaWNLZXlUb1JTQVB1YmxpY0tleVBlbT1mdW5jdGlvbihlLHQpe3ZhciByPXt0eXBlOiJSU0EgUFVCTElDIEtFWSIsYm9keTppLnRvRGVyKG8ucHVibGljS2V5VG9SU0FQdWJsaWNLZXkoZSkpLmdldEJ5dGVzKCl9O3JldHVybiBuLnBlbS5lbmNvZGUocix7bWF4bGluZTp0fSl9LG8uZ2V0UHVibGljS2V5RmluZ2VycHJpbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcixhPSh0PXR8fHt9KS5tZHx8bi5tZC5zaGExLmNyZWF0ZSgpO3N3aXRjaCh0LnR5cGV8fCJSU0FQdWJsaWNLZXkiKXtjYXNlIlJTQVB1YmxpY0tleSI6cj1pLnRvRGVyKG8ucHVibGljS2V5VG9SU0FQdWJsaWNLZXkoZSkpLmdldEJ5dGVzKCk7YnJlYWs7Y2FzZSJTdWJqZWN0UHVibGljS2V5SW5mbyI6cj1pLnRvRGVyKG8ucHVibGljS2V5VG9Bc24xKGUpKS5nZXRCeXRlcygpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZpbmdlcnByaW50IHR5cGUgIicrdC50eXBlKyciLicpfWEuc3RhcnQoKSxhLnVwZGF0ZShyKTt2YXIgcz1hLmRpZ2VzdCgpO2lmKCJoZXgiPT09dC5lbmNvZGluZyl7dmFyIHU9cy50b0hleCgpO3JldHVybiB0LmRlbGltaXRlcj91Lm1hdGNoKC8uezJ9L2cpLmpvaW4odC5kZWxpbWl0ZXIpOnV9aWYoImJpbmFyeSI9PT10LmVuY29kaW5nKXJldHVybiBzLmdldEJ5dGVzKCk7aWYodC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2RpbmcgIicrdC5lbmNvZGluZysnIi4nKTtyZXR1cm4gc30sby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21QZW09ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4ucGVtLmRlY29kZShlKVswXTtpZigiQ0VSVElGSUNBVEUgUkVRVUVTVCIhPT1hLnR5cGUpe3ZhciBzPW5ldyBFcnJvcignQ291bGQgbm90IGNvbnZlcnQgY2VydGlmaWNhdGlvbiByZXF1ZXN0IGZyb20gUEVNOyBQRU0gaGVhZGVyIHR5cGUgaXMgbm90ICJDRVJUSUZJQ0FURSBSRVFVRVNUIi4nKTt0aHJvdyBzLmhlYWRlclR5cGU9YS50eXBlLHN9aWYoYS5wcm9jVHlwZSYmIkVOQ1JZUFRFRCI9PT1hLnByb2NUeXBlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgY29udmVydCBjZXJ0aWZpY2F0aW9uIHJlcXVlc3QgZnJvbSBQRU07IFBFTSBpcyBlbmNyeXB0ZWQuIik7dmFyIHU9aS5mcm9tRGVyKGEuYm9keSxyKTtyZXR1cm4gby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21Bc24xKHUsdCl9LG8uY2VydGlmaWNhdGlvblJlcXVlc3RUb1BlbT1mdW5jdGlvbihlLHQpe3ZhciByPXt0eXBlOiJDRVJUSUZJQ0FURSBSRVFVRVNUIixib2R5OmkudG9EZXIoby5jZXJ0aWZpY2F0aW9uUmVxdWVzdFRvQXNuMShlKSkuZ2V0Qnl0ZXMoKX07cmV0dXJuIG4ucGVtLmVuY29kZShyLHttYXhsaW5lOnR9KX0sby5jcmVhdGVDZXJ0aWZpY2F0ZT1mdW5jdGlvbigpe3ZhciBlPXt2ZXJzaW9uOjIsc2VyaWFsTnVtYmVyOiIwMCIsc2lnbmF0dXJlT2lkOm51bGwsc2lnbmF0dXJlOm51bGwsc2lnaW5mbzp7fX07cmV0dXJuIGUuc2lnaW5mby5hbGdvcml0aG1PaWQ9bnVsbCxlLnZhbGlkaXR5PXt9LGUudmFsaWRpdHkubm90QmVmb3JlPW5ldyBEYXRlLGUudmFsaWRpdHkubm90QWZ0ZXI9bmV3IERhdGUsZS5pc3N1ZXI9e30sZS5pc3N1ZXIuZ2V0RmllbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHAoZS5pc3N1ZXIsdCl9LGUuaXNzdWVyLmFkZEZpZWxkPWZ1bmN0aW9uKHQpe2coW3RdKSxlLmlzc3Vlci5hdHRyaWJ1dGVzLnB1c2godCl9LGUuaXNzdWVyLmF0dHJpYnV0ZXM9W10sZS5pc3N1ZXIuaGFzaD1udWxsLGUuc3ViamVjdD17fSxlLnN1YmplY3QuZ2V0RmllbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHAoZS5zdWJqZWN0LHQpfSxlLnN1YmplY3QuYWRkRmllbGQ9ZnVuY3Rpb24odCl7ZyhbdF0pLGUuc3ViamVjdC5hdHRyaWJ1dGVzLnB1c2godCl9LGUuc3ViamVjdC5hdHRyaWJ1dGVzPVtdLGUuc3ViamVjdC5oYXNoPW51bGwsZS5leHRlbnNpb25zPVtdLGUucHVibGljS2V5PW51bGwsZS5tZD1udWxsLGUuc2V0U3ViamVjdD1mdW5jdGlvbih0LHIpe2codCksZS5zdWJqZWN0LmF0dHJpYnV0ZXM9dCxkZWxldGUgZS5zdWJqZWN0LnVuaXF1ZUlkLHImJihlLnN1YmplY3QudW5pcXVlSWQ9ciksZS5zdWJqZWN0Lmhhc2g9bnVsbH0sZS5zZXRJc3N1ZXI9ZnVuY3Rpb24odCxyKXtnKHQpLGUuaXNzdWVyLmF0dHJpYnV0ZXM9dCxkZWxldGUgZS5pc3N1ZXIudW5pcXVlSWQsciYmKGUuaXNzdWVyLnVuaXF1ZUlkPXIpLGUuaXNzdWVyLmhhc2g9bnVsbH0sZS5zZXRFeHRlbnNpb25zPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXYodFtyXSx7Y2VydDplfSk7ZS5leHRlbnNpb25zPXR9LGUuZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKHQpeyJzdHJpbmciPT09dHlwZW9mIHQmJih0PXtuYW1lOnR9KTtmb3IodmFyIHIsbj1udWxsLGk9MDtudWxsPT09biYmaTxlLmV4dGVuc2lvbnMubGVuZ3RoOysraSlyPWUuZXh0ZW5zaW9uc1tpXSx0LmlkJiZyLmlkPT09dC5pZD9uPXI6dC5uYW1lJiZyLm5hbWU9PT10Lm5hbWUmJihuPXIpO3JldHVybiBufSxlLnNpZ249ZnVuY3Rpb24odCxyKXtlLm1kPXJ8fG4ubWQuc2hhMS5jcmVhdGUoKTt2YXIgcz1hW2UubWQuYWxnb3JpdGhtKyJXaXRoUlNBRW5jcnlwdGlvbiJdO2lmKCFzKXt2YXIgdT1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRlIGRpZ2VzdC4gVW5rbm93biBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0gT0lELiIpO3Rocm93IHUuYWxnb3JpdGhtPWUubWQuYWxnb3JpdGhtLHV9ZS5zaWduYXR1cmVPaWQ9ZS5zaWdpbmZvLmFsZ29yaXRobU9pZD1zLGUudGJzQ2VydGlmaWNhdGU9by5nZXRUQlNDZXJ0aWZpY2F0ZShlKTt2YXIgYz1pLnRvRGVyKGUudGJzQ2VydGlmaWNhdGUpO2UubWQudXBkYXRlKGMuZ2V0Qnl0ZXMoKSksZS5zaWduYXR1cmU9dC5zaWduKGUubWQpfSxlLnZlcmlmeT1mdW5jdGlvbih0KXt2YXIgcj0hMTtpZighZS5pc3N1ZWQodCkpe3ZhciBzPXQuaXNzdWVyLHU9ZS5zdWJqZWN0O3Rocm93KHk9bmV3IEVycm9yKCJUaGUgcGFyZW50IGNlcnRpZmljYXRlIGRpZCBub3QgaXNzdWUgdGhlIGdpdmVuIGNoaWxkIGNlcnRpZmljYXRlOyB0aGUgY2hpbGQgY2VydGlmaWNhdGUncyBpc3N1ZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmVudCdzIHN1YmplY3QuIikpLmV4cGVjdGVkSXNzdWVyPXMuYXR0cmlidXRlcyx5LmFjdHVhbElzc3Vlcj11LmF0dHJpYnV0ZXMseX12YXIgYz10Lm1kO2lmKG51bGw9PT1jKXtpZih0LnNpZ25hdHVyZU9pZCBpbiBhKXN3aXRjaChhW3Quc2lnbmF0dXJlT2lkXSl7Y2FzZSJzaGExV2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5zaGExLmNyZWF0ZSgpO2JyZWFrO2Nhc2UibWQ1V2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5tZDUuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiI6Yz1uLm1kLnNoYTI1Ni5jcmVhdGUoKTticmVhaztjYXNlInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjpjPW4ubWQuc2hhMzg0LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOmM9bi5tZC5zaGE1MTIuY3JlYXRlKCk7YnJlYWs7Y2FzZSJSU0FTU0EtUFNTIjpjPW4ubWQuc2hhMjU2LmNyZWF0ZSgpfWlmKG51bGw9PT1jKXRocm93KHk9bmV3IEVycm9yKCJDb3VsZCBub3QgY29tcHV0ZSBjZXJ0aWZpY2F0ZSBkaWdlc3QuIFVua25vd24gc2lnbmF0dXJlIE9JRC4iKSkuc2lnbmF0dXJlT2lkPXQuc2lnbmF0dXJlT2lkLHk7dmFyIGY9dC50YnNDZXJ0aWZpY2F0ZXx8by5nZXRUQlNDZXJ0aWZpY2F0ZSh0KSxsPWkudG9EZXIoZik7Yy51cGRhdGUobC5nZXRCeXRlcygpKX1pZihudWxsIT09Yyl7dmFyIGg7c3dpdGNoKHQuc2lnbmF0dXJlT2lkKXtjYXNlIGEuc2hhMVdpdGhSU0FFbmNyeXB0aW9uOmg9dm9pZCAwO2JyZWFrO2Nhc2UgYVsiUlNBU1NBLVBTUyJdOnZhciBwLGQseTtpZih2b2lkIDA9PT0ocD1hW3Quc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuaGFzaC5hbGdvcml0aG1PaWRdKXx8dm9pZCAwPT09bi5tZFtwXSl0aHJvdyh5PW5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUdGIGhhc2ggZnVuY3Rpb24uIikpLm9pZD10LnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmhhc2guYWxnb3JpdGhtT2lkLHkubmFtZT1wLHk7aWYodm9pZCAwPT09KGQ9YVt0LnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1nZltkXSl0aHJvdyh5PW5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUdGIGZ1bmN0aW9uLiIpKS5vaWQ9dC5zaWduYXR1cmVQYXJhbWV0ZXJzLm1nZi5hbGdvcml0aG1PaWQseS5uYW1lPWQseTtpZihkPW4ubWdmW2RdLmNyZWF0ZShuLm1kW3BdLmNyZWF0ZSgpKSx2b2lkIDA9PT0ocD1hW3Quc2lnbmF0dXJlUGFyYW1ldGVycy5oYXNoLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1kW3BdKXRocm93e21lc3NhZ2U6IlVuc3VwcG9ydGVkIFJTQVNTQS1QU1MgaGFzaCBmdW5jdGlvbi4iLG9pZDp0LnNpZ25hdHVyZVBhcmFtZXRlcnMuaGFzaC5hbGdvcml0aG1PaWQsbmFtZTpwfTtoPW4ucHNzLmNyZWF0ZShuLm1kW3BdLmNyZWF0ZSgpLGQsdC5zaWduYXR1cmVQYXJhbWV0ZXJzLnNhbHRMZW5ndGgpfXI9ZS5wdWJsaWNLZXkudmVyaWZ5KGMuZGlnZXN0KCkuZ2V0Qnl0ZXMoKSx0LnNpZ25hdHVyZSxoKX1yZXR1cm4gcn0sZS5pc0lzc3Vlcj1mdW5jdGlvbih0KXt2YXIgcj0hMSxuPWUuaXNzdWVyLGk9dC5zdWJqZWN0O2lmKG4uaGFzaCYmaS5oYXNoKXI9bi5oYXNoPT09aS5oYXNoO2Vsc2UgaWYobi5hdHRyaWJ1dGVzLmxlbmd0aD09PWkuYXR0cmlidXRlcy5sZW5ndGgpe3ZhciBvLGE7cj0hMDtmb3IodmFyIHM9MDtyJiZzPG4uYXR0cmlidXRlcy5sZW5ndGg7KytzKW89bi5hdHRyaWJ1dGVzW3NdLGE9aS5hdHRyaWJ1dGVzW3NdLG8udHlwZT09PWEudHlwZSYmby52YWx1ZT09PWEudmFsdWV8fChyPSExKX1yZXR1cm4gcn0sZS5pc3N1ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNJc3N1ZXIoZSl9LGUuZ2VuZXJhdGVTdWJqZWN0S2V5SWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiBvLmdldFB1YmxpY0tleUZpbmdlcnByaW50KGUucHVibGljS2V5LHt0eXBlOiJSU0FQdWJsaWNLZXkifSl9LGUudmVyaWZ5U3ViamVjdEtleUlkZW50aWZpZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YS5zdWJqZWN0S2V5SWRlbnRpZmllcixyPTA7cjxlLmV4dGVuc2lvbnMubGVuZ3RoOysrcil7dmFyIGk9ZS5leHRlbnNpb25zW3JdO2lmKGkuaWQ9PT10KXt2YXIgbz1lLmdlbmVyYXRlU3ViamVjdEtleUlkZW50aWZpZXIoKS5nZXRCeXRlcygpO3JldHVybiBuLnV0aWwuaGV4VG9CeXRlcyhpLnN1YmplY3RLZXlJZGVudGlmaWVyKT09PW99fXJldHVybiExfSxlfSxvLmNlcnRpZmljYXRlRnJvbUFzbjE9ZnVuY3Rpb24oZSx0KXt2YXIgcj17fSxzPVtdO2lmKCFpLnZhbGlkYXRlKGUsYyxyLHMpKXRocm93KGg9bmV3IEVycm9yKCJDYW5ub3QgcmVhZCBYLjUwOSBjZXJ0aWZpY2F0ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBhbiBYNTA5djMgQ2VydGlmaWNhdGUuIikpLmVycm9ycz1zLGg7aWYoaS5kZXJUb09pZChyLnB1YmxpY0tleU9pZCkhPT1vLm9pZHMucnNhRW5jcnlwdGlvbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWFkIHB1YmxpYyBrZXkuIE9JRCBpcyBub3QgUlNBLiIpO3ZhciB1PW8uY3JlYXRlQ2VydGlmaWNhdGUoKTt1LnZlcnNpb249ci5jZXJ0VmVyc2lvbj9yLmNlcnRWZXJzaW9uLmNoYXJDb2RlQXQoMCk6MDt2YXIgZj1uLnV0aWwuY3JlYXRlQnVmZmVyKHIuY2VydFNlcmlhbE51bWJlcik7dS5zZXJpYWxOdW1iZXI9Zi50b0hleCgpLHUuc2lnbmF0dXJlT2lkPW4uYXNuMS5kZXJUb09pZChyLmNlcnRTaWduYXR1cmVPaWQpLHUuc2lnbmF0dXJlUGFyYW1ldGVycz1kKHUuc2lnbmF0dXJlT2lkLHIuY2VydFNpZ25hdHVyZVBhcmFtcywhMCksdS5zaWdpbmZvLmFsZ29yaXRobU9pZD1uLmFzbjEuZGVyVG9PaWQoci5jZXJ0aW5mb1NpZ25hdHVyZU9pZCksdS5zaWdpbmZvLnBhcmFtZXRlcnM9ZCh1LnNpZ2luZm8uYWxnb3JpdGhtT2lkLHIuY2VydGluZm9TaWduYXR1cmVQYXJhbXMsITEpLHUuc2lnbmF0dXJlPXIuY2VydFNpZ25hdHVyZTt2YXIgbD1bXTtpZih2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTFVVENUaW1lJiZsLnB1c2goaS51dGNUaW1lVG9EYXRlKHIuY2VydFZhbGlkaXR5MVVUQ1RpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTJHZW5lcmFsaXplZFRpbWUmJmwucHVzaChpLmdlbmVyYWxpemVkVGltZVRvRGF0ZShyLmNlcnRWYWxpZGl0eTJHZW5lcmFsaXplZFRpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTNVVENUaW1lJiZsLnB1c2goaS51dGNUaW1lVG9EYXRlKHIuY2VydFZhbGlkaXR5M1VUQ1RpbWUpKSx2b2lkIDAhPT1yLmNlcnRWYWxpZGl0eTRHZW5lcmFsaXplZFRpbWUmJmwucHVzaChpLmdlbmVyYWxpemVkVGltZVRvRGF0ZShyLmNlcnRWYWxpZGl0eTRHZW5lcmFsaXplZFRpbWUpKSxsLmxlbmd0aD4yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYWQgbm90QmVmb3JlL25vdEFmdGVyIHZhbGlkaXR5IHRpbWVzOyBtb3JlIHRoYW4gdHdvIHRpbWVzIHdlcmUgcHJvdmlkZWQgaW4gdGhlIGNlcnRpZmljYXRlLiIpO2lmKGwubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhZCBub3RCZWZvcmUvbm90QWZ0ZXIgdmFsaWRpdHkgdGltZXM7IHRoZXkgd2VyZSBub3QgcHJvdmlkZWQgYXMgZWl0aGVyIFVUQ1RpbWUgb3IgR2VuZXJhbGl6ZWRUaW1lLiIpO2lmKHUudmFsaWRpdHkubm90QmVmb3JlPWxbMF0sdS52YWxpZGl0eS5ub3RBZnRlcj1sWzFdLHUudGJzQ2VydGlmaWNhdGU9ci50YnNDZXJ0aWZpY2F0ZSx0KXt2YXIgaDtpZih1Lm1kPW51bGwsdS5zaWduYXR1cmVPaWQgaW4gYSlzd2l0Y2goYVt1LnNpZ25hdHVyZU9pZF0pe2Nhc2Uic2hhMVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhMS5jcmVhdGUoKTticmVhaztjYXNlIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQubWQ1LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnUubWQ9bi5tZC5zaGEyNTYuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6dS5tZD1uLm1kLnNoYTM4NC5jcmVhdGUoKTticmVhaztjYXNlInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhNTEyLmNyZWF0ZSgpO2JyZWFrO2Nhc2UiUlNBU1NBLVBTUyI6dS5tZD1uLm1kLnNoYTI1Ni5jcmVhdGUoKX1pZihudWxsPT09dS5tZCl0aHJvdyhoPW5ldyBFcnJvcigiQ291bGQgbm90IGNvbXB1dGUgY2VydGlmaWNhdGUgZGlnZXN0LiBVbmtub3duIHNpZ25hdHVyZSBPSUQuIikpLnNpZ25hdHVyZU9pZD11LnNpZ25hdHVyZU9pZCxoO3ZhciB5PWkudG9EZXIodS50YnNDZXJ0aWZpY2F0ZSk7dS5tZC51cGRhdGUoeS5nZXRCeXRlcygpKX12YXIgdj1uLm1kLnNoYTEuY3JlYXRlKCk7dS5pc3N1ZXIuZ2V0RmllbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHAodS5pc3N1ZXIsZSl9LHUuaXNzdWVyLmFkZEZpZWxkPWZ1bmN0aW9uKGUpe2coW2VdKSx1Lmlzc3Vlci5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuaXNzdWVyLmF0dHJpYnV0ZXM9by5SRE5BdHRyaWJ1dGVzQXNBcnJheShyLmNlcnRJc3N1ZXIsdiksci5jZXJ0SXNzdWVyVW5pcXVlSWQmJih1Lmlzc3Vlci51bmlxdWVJZD1yLmNlcnRJc3N1ZXJVbmlxdWVJZCksdS5pc3N1ZXIuaGFzaD12LmRpZ2VzdCgpLnRvSGV4KCk7dmFyIG09bi5tZC5zaGExLmNyZWF0ZSgpO3JldHVybiB1LnN1YmplY3QuZ2V0RmllbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHAodS5zdWJqZWN0LGUpfSx1LnN1YmplY3QuYWRkRmllbGQ9ZnVuY3Rpb24oZSl7ZyhbZV0pLHUuc3ViamVjdC5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuc3ViamVjdC5hdHRyaWJ1dGVzPW8uUkROQXR0cmlidXRlc0FzQXJyYXkoci5jZXJ0U3ViamVjdCxtKSxyLmNlcnRTdWJqZWN0VW5pcXVlSWQmJih1LnN1YmplY3QudW5pcXVlSWQ9ci5jZXJ0U3ViamVjdFVuaXF1ZUlkKSx1LnN1YmplY3QuaGFzaD1tLmRpZ2VzdCgpLnRvSGV4KCksci5jZXJ0RXh0ZW5zaW9ucz91LmV4dGVuc2lvbnM9by5jZXJ0aWZpY2F0ZUV4dGVuc2lvbnNGcm9tQXNuMShyLmNlcnRFeHRlbnNpb25zKTp1LmV4dGVuc2lvbnM9W10sdS5wdWJsaWNLZXk9by5wdWJsaWNLZXlGcm9tQXNuMShyLnN1YmplY3RQdWJsaWNLZXlJbmZvKSx1fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uc0Zyb21Bc24xPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLnZhbHVlLmxlbmd0aDsrK3IpZm9yKHZhciBuPWUudmFsdWVbcl0saT0wO2k8bi52YWx1ZS5sZW5ndGg7KytpKXQucHVzaChvLmNlcnRpZmljYXRlRXh0ZW5zaW9uRnJvbUFzbjEobi52YWx1ZVtpXSkpO3JldHVybiB0fSxvLmNlcnRpZmljYXRlRXh0ZW5zaW9uRnJvbUFzbjE9ZnVuY3Rpb24oZSl7dmFyIHQ9e307aWYodC5pZD1pLmRlclRvT2lkKGUudmFsdWVbMF0udmFsdWUpLHQuY3JpdGljYWw9ITEsZS52YWx1ZVsxXS50eXBlPT09aS5UeXBlLkJPT0xFQU4/KHQuY3JpdGljYWw9MCE9PWUudmFsdWVbMV0udmFsdWUuY2hhckNvZGVBdCgwKSx0LnZhbHVlPWUudmFsdWVbMl0udmFsdWUpOnQudmFsdWU9ZS52YWx1ZVsxXS52YWx1ZSx0LmlkIGluIGEpaWYodC5uYW1lPWFbdC5pZF0sImtleVVzYWdlIj09PXQubmFtZSl7dmFyIHI9MCxvPTA7KHU9aS5mcm9tRGVyKHQudmFsdWUpKS52YWx1ZS5sZW5ndGg+MSYmKHI9dS52YWx1ZS5jaGFyQ29kZUF0KDEpLG89dS52YWx1ZS5sZW5ndGg+Mj91LnZhbHVlLmNoYXJDb2RlQXQoMik6MCksdC5kaWdpdGFsU2lnbmF0dXJlPTEyOD09PSgxMjgmciksdC5ub25SZXB1ZGlhdGlvbj02ND09PSg2NCZyKSx0LmtleUVuY2lwaGVybWVudD0zMj09PSgzMiZyKSx0LmRhdGFFbmNpcGhlcm1lbnQ9MTY9PT0oMTYmciksdC5rZXlBZ3JlZW1lbnQ9OD09PSg4JnIpLHQua2V5Q2VydFNpZ249ND09PSg0JnIpLHQuY1JMU2lnbj0yPT09KDImciksdC5lbmNpcGhlck9ubHk9MT09PSgxJnIpLHQuZGVjaXBoZXJPbmx5PTEyOD09PSgxMjgmbyl9ZWxzZSBpZigiYmFzaWNDb25zdHJhaW50cyI9PT10Lm5hbWUpeyh1PWkuZnJvbURlcih0LnZhbHVlKSkudmFsdWUubGVuZ3RoPjAmJnUudmFsdWVbMF0udHlwZT09PWkuVHlwZS5CT09MRUFOP3QuY0E9MCE9PXUudmFsdWVbMF0udmFsdWUuY2hhckNvZGVBdCgwKTp0LmNBPSExO3ZhciBzPW51bGw7dS52YWx1ZS5sZW5ndGg+MCYmdS52YWx1ZVswXS50eXBlPT09aS5UeXBlLklOVEVHRVI/cz11LnZhbHVlWzBdLnZhbHVlOnUudmFsdWUubGVuZ3RoPjEmJihzPXUudmFsdWVbMV0udmFsdWUpLG51bGwhPT1zJiYodC5wYXRoTGVuQ29uc3RyYWludD1pLmRlclRvSW50ZWdlcihzKSl9ZWxzZSBpZigiZXh0S2V5VXNhZ2UiPT09dC5uYW1lKWZvcih2YXIgdT1pLmZyb21EZXIodC52YWx1ZSksYz0wO2M8dS52YWx1ZS5sZW5ndGg7KytjKXt2YXIgZj1pLmRlclRvT2lkKHUudmFsdWVbY10udmFsdWUpO2YgaW4gYT90W2FbZl1dPSEwOnRbZl09ITB9ZWxzZSBpZigibnNDZXJ0VHlwZSI9PT10Lm5hbWUpe3I9MDsodT1pLmZyb21EZXIodC52YWx1ZSkpLnZhbHVlLmxlbmd0aD4xJiYocj11LnZhbHVlLmNoYXJDb2RlQXQoMSkpLHQuY2xpZW50PTEyOD09PSgxMjgmciksdC5zZXJ2ZXI9NjQ9PT0oNjQmciksdC5lbWFpbD0zMj09PSgzMiZyKSx0Lm9ianNpZ249MTY9PT0oMTYmciksdC5yZXNlcnZlZD04PT09KDgmciksdC5zc2xDQT00PT09KDQmciksdC5lbWFpbENBPTI9PT0oMiZyKSx0Lm9iakNBPTE9PT0oMSZyKX1lbHNlIGlmKCJzdWJqZWN0QWx0TmFtZSI9PT10Lm5hbWV8fCJpc3N1ZXJBbHROYW1lIj09PXQubmFtZSl7dmFyIGw7dC5hbHROYW1lcz1bXTt1PWkuZnJvbURlcih0LnZhbHVlKTtmb3IodmFyIGg9MDtoPHUudmFsdWUubGVuZ3RoOysraCl7dmFyIHA9e3R5cGU6KGw9dS52YWx1ZVtoXSkudHlwZSx2YWx1ZTpsLnZhbHVlfTtzd2l0Y2godC5hbHROYW1lcy5wdXNoKHApLGwudHlwZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDY6YnJlYWs7Y2FzZSA3OnAuaXA9bi51dGlsLmJ5dGVzVG9JUChsLnZhbHVlKTticmVhaztjYXNlIDg6cC5vaWQ9aS5kZXJUb09pZChsLnZhbHVlKX19fWVsc2UgaWYoInN1YmplY3RLZXlJZGVudGlmaWVyIj09PXQubmFtZSl7dT1pLmZyb21EZXIodC52YWx1ZSk7dC5zdWJqZWN0S2V5SWRlbnRpZmllcj1uLnV0aWwuYnl0ZXNUb0hleCh1LnZhbHVlKX1yZXR1cm4gdH0sby5jZXJ0aWZpY2F0aW9uUmVxdWVzdEZyb21Bc24xPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e30scz1bXTtpZighaS52YWxpZGF0ZShlLGgscixzKSl0aHJvdyhjPW5ldyBFcnJvcigiQ2Fubm90IHJlYWQgUEtDUyMxMCBjZXJ0aWZpY2F0ZSByZXF1ZXN0LiBBU04uMSBvYmplY3QgaXMgbm90IGEgUEtDUyMxMCBDZXJ0aWZpY2F0aW9uUmVxdWVzdC4iKSkuZXJyb3JzPXMsYztpZihpLmRlclRvT2lkKHIucHVibGljS2V5T2lkKSE9PW8ub2lkcy5yc2FFbmNyeXB0aW9uKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYWQgcHVibGljIGtleS4gT0lEIGlzIG5vdCBSU0EuIik7dmFyIHU9by5jcmVhdGVDZXJ0aWZpY2F0aW9uUmVxdWVzdCgpO2lmKHUudmVyc2lvbj1yLmNzclZlcnNpb24/ci5jc3JWZXJzaW9uLmNoYXJDb2RlQXQoMCk6MCx1LnNpZ25hdHVyZU9pZD1uLmFzbjEuZGVyVG9PaWQoci5jc3JTaWduYXR1cmVPaWQpLHUuc2lnbmF0dXJlUGFyYW1ldGVycz1kKHUuc2lnbmF0dXJlT2lkLHIuY3NyU2lnbmF0dXJlUGFyYW1zLCEwKSx1LnNpZ2luZm8uYWxnb3JpdGhtT2lkPW4uYXNuMS5kZXJUb09pZChyLmNzclNpZ25hdHVyZU9pZCksdS5zaWdpbmZvLnBhcmFtZXRlcnM9ZCh1LnNpZ2luZm8uYWxnb3JpdGhtT2lkLHIuY3NyU2lnbmF0dXJlUGFyYW1zLCExKSx1LnNpZ25hdHVyZT1yLmNzclNpZ25hdHVyZSx1LmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbz1yLmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyx0KXt2YXIgYztpZih1Lm1kPW51bGwsdS5zaWduYXR1cmVPaWQgaW4gYSlzd2l0Y2goYVt1LnNpZ25hdHVyZU9pZF0pe2Nhc2Uic2hhMVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhMS5jcmVhdGUoKTticmVhaztjYXNlIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQubWQ1LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnUubWQ9bi5tZC5zaGEyNTYuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6dS5tZD1uLm1kLnNoYTM4NC5jcmVhdGUoKTticmVhaztjYXNlInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp1Lm1kPW4ubWQuc2hhNTEyLmNyZWF0ZSgpO2JyZWFrO2Nhc2UiUlNBU1NBLVBTUyI6dS5tZD1uLm1kLnNoYTI1Ni5jcmVhdGUoKX1pZihudWxsPT09dS5tZCl0aHJvdyhjPW5ldyBFcnJvcigiQ291bGQgbm90IGNvbXB1dGUgY2VydGlmaWNhdGlvbiByZXF1ZXN0IGRpZ2VzdC4gVW5rbm93biBzaWduYXR1cmUgT0lELiIpKS5zaWduYXR1cmVPaWQ9dS5zaWduYXR1cmVPaWQsYzt2YXIgZj1pLnRvRGVyKHUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKTt1Lm1kLnVwZGF0ZShmLmdldEJ5dGVzKCkpfXZhciBsPW4ubWQuc2hhMS5jcmVhdGUoKTtyZXR1cm4gdS5zdWJqZWN0LmdldEZpZWxkPWZ1bmN0aW9uKGUpe3JldHVybiBwKHUuc3ViamVjdCxlKX0sdS5zdWJqZWN0LmFkZEZpZWxkPWZ1bmN0aW9uKGUpe2coW2VdKSx1LnN1YmplY3QuYXR0cmlidXRlcy5wdXNoKGUpfSx1LnN1YmplY3QuYXR0cmlidXRlcz1vLlJETkF0dHJpYnV0ZXNBc0FycmF5KHIuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvU3ViamVjdCxsKSx1LnN1YmplY3QuaGFzaD1sLmRpZ2VzdCgpLnRvSGV4KCksdS5wdWJsaWNLZXk9by5wdWJsaWNLZXlGcm9tQXNuMShyLnN1YmplY3RQdWJsaWNLZXlJbmZvKSx1LmdldEF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gcCh1LGUpfSx1LmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlKXtnKFtlXSksdS5hdHRyaWJ1dGVzLnB1c2goZSl9LHUuYXR0cmlidXRlcz1vLkNSSUF0dHJpYnV0ZXNBc0FycmF5KHIuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvQXR0cmlidXRlc3x8W10pLHV9LG8uY3JlYXRlQ2VydGlmaWNhdGlvblJlcXVlc3Q9ZnVuY3Rpb24oKXt2YXIgZT17dmVyc2lvbjowLHNpZ25hdHVyZU9pZDpudWxsLHNpZ25hdHVyZTpudWxsLHNpZ2luZm86e319O3JldHVybiBlLnNpZ2luZm8uYWxnb3JpdGhtT2lkPW51bGwsZS5zdWJqZWN0PXt9LGUuc3ViamVjdC5nZXRGaWVsZD1mdW5jdGlvbih0KXtyZXR1cm4gcChlLnN1YmplY3QsdCl9LGUuc3ViamVjdC5hZGRGaWVsZD1mdW5jdGlvbih0KXtnKFt0XSksZS5zdWJqZWN0LmF0dHJpYnV0ZXMucHVzaCh0KX0sZS5zdWJqZWN0LmF0dHJpYnV0ZXM9W10sZS5zdWJqZWN0Lmhhc2g9bnVsbCxlLnB1YmxpY0tleT1udWxsLGUuYXR0cmlidXRlcz1bXSxlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gcChlLHQpfSxlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbih0KXtnKFt0XSksZS5hdHRyaWJ1dGVzLnB1c2godCl9LGUubWQ9bnVsbCxlLnNldFN1YmplY3Q9ZnVuY3Rpb24odCl7Zyh0KSxlLnN1YmplY3QuYXR0cmlidXRlcz10LGUuc3ViamVjdC5oYXNoPW51bGx9LGUuc2V0QXR0cmlidXRlcz1mdW5jdGlvbih0KXtnKHQpLGUuYXR0cmlidXRlcz10fSxlLnNpZ249ZnVuY3Rpb24odCxyKXtlLm1kPXJ8fG4ubWQuc2hhMS5jcmVhdGUoKTt2YXIgcz1hW2UubWQuYWxnb3JpdGhtKyJXaXRoUlNBRW5jcnlwdGlvbiJdO2lmKCFzKXt2YXIgdT1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRpb24gcmVxdWVzdCBkaWdlc3QuIFVua25vd24gbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIE9JRC4iKTt0aHJvdyB1LmFsZ29yaXRobT1lLm1kLmFsZ29yaXRobSx1fWUuc2lnbmF0dXJlT2lkPWUuc2lnaW5mby5hbGdvcml0aG1PaWQ9cyxlLmNlcnRpZmljYXRpb25SZXF1ZXN0SW5mbz1vLmdldENlcnRpZmljYXRpb25SZXF1ZXN0SW5mbyhlKTt2YXIgYz1pLnRvRGVyKGUuY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKTtlLm1kLnVwZGF0ZShjLmdldEJ5dGVzKCkpLGUuc2lnbmF0dXJlPXQuc2lnbihlLm1kKX0sZS52ZXJpZnk9ZnVuY3Rpb24oKXt2YXIgdD0hMSxyPWUubWQ7aWYobnVsbD09PXIpe2lmKGUuc2lnbmF0dXJlT2lkIGluIGEpc3dpdGNoKGFbZS5zaWduYXR1cmVPaWRdKXtjYXNlInNoYTFXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLnNoYTEuY3JlYXRlKCk7YnJlYWs7Y2FzZSJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLm1kNS5jcmVhdGUoKTticmVhaztjYXNlInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjpyPW4ubWQuc2hhMjU2LmNyZWF0ZSgpO2JyZWFrO2Nhc2Uic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iOnI9bi5tZC5zaGEzODQuY3JlYXRlKCk7YnJlYWs7Y2FzZSJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6cj1uLm1kLnNoYTUxMi5jcmVhdGUoKTticmVhaztjYXNlIlJTQVNTQS1QU1MiOnI9bi5tZC5zaGEyNTYuY3JlYXRlKCl9aWYobnVsbD09PXIpdGhyb3coaD1uZXcgRXJyb3IoIkNvdWxkIG5vdCBjb21wdXRlIGNlcnRpZmljYXRpb24gcmVxdWVzdCBkaWdlc3QuIFVua25vd24gc2lnbmF0dXJlIE9JRC4iKSkuc2lnbmF0dXJlT2lkPWUuc2lnbmF0dXJlT2lkLGg7dmFyIHM9ZS5jZXJ0aWZpY2F0aW9uUmVxdWVzdEluZm98fG8uZ2V0Q2VydGlmaWNhdGlvblJlcXVlc3RJbmZvKGUpLHU9aS50b0RlcihzKTtyLnVwZGF0ZSh1LmdldEJ5dGVzKCkpfWlmKG51bGwhPT1yKXt2YXIgYztzd2l0Y2goZS5zaWduYXR1cmVPaWQpe2Nhc2UgYS5zaGExV2l0aFJTQUVuY3J5cHRpb246YnJlYWs7Y2FzZSBhWyJSU0FTU0EtUFNTIl06dmFyIGYsbCxoO2lmKHZvaWQgMD09PShmPWFbZS5zaWduYXR1cmVQYXJhbWV0ZXJzLm1nZi5oYXNoLmFsZ29yaXRobU9pZF0pfHx2b2lkIDA9PT1uLm1kW2ZdKXRocm93KGg9bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNR0YgaGFzaCBmdW5jdGlvbi4iKSkub2lkPWUuc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuaGFzaC5hbGdvcml0aG1PaWQsaC5uYW1lPWYsaDtpZih2b2lkIDA9PT0obD1hW2Uuc2lnbmF0dXJlUGFyYW1ldGVycy5tZ2YuYWxnb3JpdGhtT2lkXSl8fHZvaWQgMD09PW4ubWdmW2xdKXRocm93KGg9bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNR0YgZnVuY3Rpb24uIikpLm9pZD1lLnNpZ25hdHVyZVBhcmFtZXRlcnMubWdmLmFsZ29yaXRobU9pZCxoLm5hbWU9bCxoO2lmKGw9bi5tZ2ZbbF0uY3JlYXRlKG4ubWRbZl0uY3JlYXRlKCkpLHZvaWQgMD09PShmPWFbZS5zaWduYXR1cmVQYXJhbWV0ZXJzLmhhc2guYWxnb3JpdGhtT2lkXSl8fHZvaWQgMD09PW4ubWRbZl0pdGhyb3coaD1uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFJTQVNTQS1QU1MgaGFzaCBmdW5jdGlvbi4iKSkub2lkPWUuc2lnbmF0dXJlUGFyYW1ldGVycy5oYXNoLmFsZ29yaXRobU9pZCxoLm5hbWU9ZixoO2M9bi5wc3MuY3JlYXRlKG4ubWRbZl0uY3JlYXRlKCksbCxlLnNpZ25hdHVyZVBhcmFtZXRlcnMuc2FsdExlbmd0aCl9dD1lLnB1YmxpY0tleS52ZXJpZnkoci5kaWdlc3QoKS5nZXRCeXRlcygpLGUuc2lnbmF0dXJlLGMpfXJldHVybiB0fSxlfTt2YXIgXz1uZXcgRGF0ZSgiMTk1MC0wMS0wMVQwMDowMDowMFoiKSxTPW5ldyBEYXRlKCIyMDUwLTAxLTAxVDAwOjAwOjAwWiIpO2Z1bmN0aW9uIEUoZSl7cmV0dXJuIGU+PV8mJmU8Uz9pLmNyZWF0ZShpLkNsYXNzLlVOSVZFUlNBTCxpLlR5cGUuVVRDVElNRSwhMSxpLmRhdGVUb1V0Y1RpbWUoZSkpOmkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5HRU5FUkFMSVpFRFRJTUUsITEsaS5kYXRlVG9HZW5lcmFsaXplZFRpbWUoZSkpfW8uZ2V0VEJTQ2VydGlmaWNhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9RShlLnZhbGlkaXR5Lm5vdEJlZm9yZSkscj1FKGUudmFsaWRpdHkubm90QWZ0ZXIpLGE9aS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLkNPTlRFWFRfU1BFQ0lGSUMsMCwhMCxbaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLklOVEVHRVIsITEsaS5pbnRlZ2VyVG9EZXIoZS52ZXJzaW9uKS5nZXRCeXRlcygpKV0pLGkuY3JlYXRlKGkuQ2xhc3MuVU5JVkVSU0FMLGkuVHlwZS5JTlRFR0VSLCExLG4udXRpbC5oZXhUb0J5dGVzKGUuc2VyaWFsTnVtYmVyKSksaS5jcmVhdGUoaS5DbGFzcy5VTklWRVJTQUwsaS5UeXBlLlNFUVVFTkNFLCEwLFtpLmNyZWF0ZShpLkNsYXNzLlU="
}

github/deemru/w8io/169f3d6 
3.32 ms