Files
tvbox_collect/gitee-source/movie/js/GZYS.js
T
2026-06-29 03:41:14 +00:00

1 line
38 KiB
JavaScript

dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+eTnOWtkCcsCiAgICBob3N0OiAnaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20nLAogICAgdXJsOiAnL0FwcC9JbmRleExpc3QvaW5kZXhMaXN0JywKICAgIC8vICAgaG9tZVVybDogJ2h0dHA6Ly8xMjQuMjIyLjExNi41L2hvbWVkYXRhL2hvbWUuanNvbicsCiAgICBzZWFyY2hVcmw6ICcvQXBwL0luZGV4L2ZpbmRNb3JlVm9kIyoqJywKICAgIHNlYXJjaGFibGU6IDIsCiAgICBxdWlja1NlYXJjaDogMSwKICAgIGZpbHRlcmFibGU6IDEsCiAgICBjbGFzc19uYW1lOiAn55S15b2xJueUteinhuWJpybliqjmvKsm57u86Im6JuefreWJpycsCiAgICBjbGFzc191cmw6ICcxJjImNCYzJjY0JywKICAgIGZpbHRlcjogJ0g0c0lBQUFBQUFBQUErMmE3VTRhUVJTRy8zc1ZodC9iWkhmNVdub3JqV2xvNFlmcGh3bHFFMk5NdEdvTFdJc21GYlJpMnFZcW9CZ3h0VlZSOEdaMmR1VXVPbWNoZnVEdURISTJ4SmhENGhHWXlUenY3aGxtNTd5WjZhRmgvZ3BvZ2VmREw1eTM4SnErZnVjMHZrbE84ZVpBUEpXTUI1UzdUZS9qNzVKZWJSL2lieWVUZDhaMUgvOW1NQmlKTFpaYjgrV3VzVzdHaEM1cTRGN2p6UDMrUXNoMnFiWHhTUWpwZE1HU1dyc2IxdW1oa05UcGdyNm1YTTA2YTRxdnFkMEZTN0txSmJ2NVZVZ3lMeGZzUnNIS0h5b3MrOU5hdXVSM1UySE5FN2JaVUt5RkhQL0UwaFhGK3JQbWZPRU1wL0EvK0hTMWRPVDgyN20wY3dkMlpnT3Z0ckJqRmF0Q3RaMHU2RnovcUhEcDRseTN1MkJKNW1tUkxSZk0rbmR4dXBkcnJMNnJXUGthVHdMYitzVnZlQTN1YmF0U3RiWjIrQjJHQWREVGJ2R2ZlWjRYNjJoM3VVKzY4ODNJOWFkYkN0eFhvcWxrUE9XMUVybTFQZUtWU0ZmMWtCRGhkUENCRXBSUmduNVFkQmxGOTRPaXlTaWFIeFJWUnZFaisxcE1RdUVkZktBWU1vcmhCeVVxbzBUOW9FUmtsQWlhb3FuUHREQTdPNWFSd2dvUElRaEJDRG9FRFFKK2FxZ3E1NXZudnlVU1ZKWGpWR0NxUUZkQmh3cUtWTkNtUmlCRUlSZ1E4SE1wMW9zc0xSWlRGUjQwQ0RxRUlJUVFoRENFQ0lRb0JBTUNYcGJSbXl3RFpCa2d5d0JaQnNneVFKWUJzZ3lRWllBc0EyUVplRm5XNXJGVnFJaFQ2T056Y1h6eWxkZGowYVhwRVQ4VldiWnNOb3AyNXJPSUUwWm41MlBWenE5S0tIb01mVEg1SXN1VUpKZ0lsbUtuajZ6NVJRa2xpcWFVVnRuWnVZUmlvQk16dDJMTjVpVVVmRjR5SmZrZDAxVDB4YVRYelhwR2h0RjgrTW5ZMzJTWkNlS25XWDJQTmRaa3Z4bjBUYlBubXEzdlRkblZvQ2VhblQyMEczdXluNlpMYnZwZW9jZFNFNTVMdEV0YmYydTBmWDdCVnRMQ05UcnhjalNCZjd3VlozbHhLZUhFRTRtSlVYNkZQc0RzK1FNSmJQejFXQXFQYXUydnM3VFlIdkpHZVUwTjU5MUllMHorMUg4MGZsdXh4cjdVeVc4anY0MzhOazhTK1cyRDhOdWdnaE9uay95MkxncjViUStra045R2ZwdXJCUExiSGlLTC9MYUIrVzJiRGJOZVlwbVMwRDdRL2RrM3l6QkJmemJOTWt6SW54MnpESU0zRUoxOXJBeUQ5bHphbTFnWkJ1M3RXWDlQMkhaZWhzR2JlODZtV0laQnUzdlh1M0NodGVPQzZYc3hJR3NIQVhzNjFrNklySjB1Q0ZrN25pU3lkdHhKWk8xNDZDQnJ4eE5DMWc1Wk8wSUtXVHZkRkxKMmJra2dhNGVzbllGYU8rYnBBVlRDMmJKMXNTODg1NEEvZzlJMkt1UWs5REdVNFk3MUlrZTVlRWw5SjR0S2J3VHM2WlRlUVNxOXV5QlVlbnVTcVBSMkoxSHA3YUdEU205UENKWGVWSG9MS1ZSNmQxT285TDRsZ1VwdktyMEhlNnJDMlJmeml1NHFJOXlsNitpREZYQ3FJbGZyZ1lRK1c4SDNmM3hqMWdQSnArTVZQWkJjVGxqMFBTdW94a2ZBbmtDTlB6VHpIK1N0UHhDc1JBQUEnLAogICAgLy8gbGltaXQ6IDYsCiAgICAvL2RvdWJsZTogZmFsc2UsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgbGF6eTogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICBsZXQgZCA9IFtdOwogICAgICAgIC8vY29uc29sZS5sb2coIndhbmd6aGk9PT0iK2lucHV0KQogICAgICAgIHZhciB2b2RfaWQgPSBpbnB1dC5zcGxpdCgiLyIpWzBdOwogICAgICAgIHZhciB2dXJsX2lkID0gaW5wdXQuc3BsaXQoIi8iKVsxXTsKICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGlucHV0LnNwbGl0KCI/IilbMV0KCiAgICAgICAgZnVuY3Rpb24gRW5jcnlwdChwbGFpblRleHQpIHsKICAgICAgICAgICAgbGV0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCJtdlhCU1c3ZWtyZUl0TnNUIik7CiAgICAgICAgICAgIGxldCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCIyVTNJckpMOHN6QUtwMEZqIik7CiAgICAgICAgICAgIC8vIOWwhuaWh+acrOWKoOWvhuS4uiBBRVMvQ0JDL1BLQ1M1UGFkZGluZyDmoLzlvI8KICAgICAgICAgICAgbGV0IGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHBsYWluVGV4dCwga2V5LCB7CiAgICAgICAgICAgICAgICBpdjogaXYsCiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQywKICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIOiOt+WPluWKoOWvhue7k+aenOW5tui9rOS4uiBIZXgg5qC85byPCiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRIZXggPSBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTsKICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZEhleC50b1VwcGVyQ2FzZSgpOyAvLyDov5Tlm57lpKflhpkgSGV4IOagvOW8jwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gRGVjcnlwdCh3b3JkLCBrZXksIGl2KSB7CiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHdvcmQpOwoKICAgICAgICAgICAgLy8g5L2/55SoQUVTL0NCQy9QS0NTNVBhZGRpbmfmqKHlvI/ov5vooYzop6Plr4YKICAgICAgICAgICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7CiAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0OiBlbmNyeXB0ZWRIZXhTdHIKICAgICAgICAgICAgfSwga2V5LCB7CiAgICAgICAgICAgICAgICBpdjogaXYsCiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQywgLy8g5L2/55SoQ0JD5qih5byPCiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgLy8g5L2/55SoUEtDUyM35aGr5YWFCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8g5bCG6Kej5a+G5ZCO55qE5pWw5o2u6L2s5o2i5Li65Y6f5aeL5paH5pysCiAgICAgICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTsKCiAgICAgICAgICAgIC8vIOi/lOWbnuino+WvhuWQjueahOaWh+acrAogICAgICAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyOwogICAgICAgIH0KICAgICAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwOyAvL2xvZyh0aW1lc3RhbXApCiAgICAgICAgdmFyIHQgPSB0aW1lc3RhbXAudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdOyAvL2xvZyh0KQogICAgICAgIHZhciByZXF1ZXN0X2tleSA9IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgImRvbWFpbl90eXBlIjogIjgiLAogICAgICAgICAgICAidm9kX2lkIjogdm9kX2lkLAogICAgICAgICAgICAidHlwZSI6ICJwbGF5IiwKICAgICAgICAgICAgInJlc29sdXRpb24iOiByZXNvbHV0aW9uLAogICAgICAgICAgICAidnVybF9pZCI6IHZ1cmxfaWQKICAgICAgICB9KTsgLy9sb2cocmVxdWVzdF9rZXkpCiAgICAgICAgdmFyIHJlcXVlc3Rfa2V5MiA9IEVuY3J5cHQocmVxdWVzdF9rZXkpOyAvL2xvZyhyZXF1ZXN0X2tleTIpCiAgICAgICAgdmFyIHNpZ25hdHVyZSA9ICd0b2tlbl9pZD0sdG9rZW49MWJlODZlOGUxOGE5ZmExOGIyYjhkNTQzMjY5OWRhZDAuYWMwMDhlZDY1MGZkMDg3YmZiZWNmMmZkYTlkODJlOTgzNTI1M2VmMjQ4NDNlNmIxOGZjZDEyOGIxMDc2MzQ5N2JjZjlkNTNlOTU5ZjUzNzdjZGUwMzhjMjBjY2Y5ZDE3ZjYwNGM5YjhiYjZlNjEwNDFkZWY4NjcyOWIyZmM3NDA4YmQyNDFlMjNjMjEzYWM1N2YwMjI2ZWU2NTZlMmJiMGE1ODNhZTBlNGYzYmY2YzZhYjZjNDkwYzlhNmYwZDhjZGZkMzY2YWFjZjVkODMxOTM2NzFhOGY3N2NkMWFmMWZmMmU5MTQ1ZGU5MmVjNDNlYzg3Y2Y0YmRjNTYzZjZlOTE5ZmUzMjg2MWIwZTkzYjExOGVjMzdkODAzNWZiYjNjLjU5ZGQwNWM1ZDlhOGFlNzI2NTI4NzgzMTI4MjE4ZjE1ZmU2ZjJjMGM4MTQ1ZWRkYWIxMTJiMzc0ZmNmZTNkNzkscGhvbmVfdHlwZT0xLHJlcXVlc3Rfa2V5PScgKyByZXF1ZXN0X2tleTIgKyAnLGFwcF9pZD0xLHRpbWU9JyArIHQgKyAnLGtleXM9Wkg4Z3BkcDlieGp1RzJOSzk3c29sM283VWl6KzllVkVhVk1sRTJGazNqN0VSZXNNM1lIbkVDWlVIN0JPTk5UanB5N1JWTmkvWWltR3VOWXJpQzdDbXN3djRQTllpRll6dzlRaGxxWkt3TmZDTTZJVXBGWjBUNHJaeDhHNzh6a3YydE5WYmZZQzRxTlFlZEdpMDduV1ozM2RsU3VWeFJPVmZZNUp4T1dITUkwPSomenZkdmR2ZGRiZmlra2t1bXRtZHdxcHBwP3w0WSFzITJicic7IC8vbG9nKHNpZ25hdHVyZSkKICAgICAgICB2YXIgc2lnbmF0dXJlMiA9IG1kNShzaWduYXR1cmUpOyAvL2xvZyhzaWduYXR1cmUyKQogICAgICAgIHZhciBib2R5ID0gJ3Rva2VuPTFiZTg2ZThlMThhOWZhMThiMmI4ZDU0MzI2OTlkYWQwLmFjMDA4ZWQ2NTBmZDA4N2JmYmVjZjJmZGE5ZDgyZTk4MzUyNTNlZjI0ODQzZTZiMThmY2QxMjhiMTA3NjM0OTdiY2Y5ZDUzZTk1OWY1Mzc3Y2RlMDM4YzIwY2NmOWQxN2Y2MDRjOWI4YmI2ZTYxMDQxZGVmODY3MjliMmZjNzQwOGJkMjQxZTIzYzIxM2FjNTdmMDIyNmVlNjU2ZTJiYjBhNTgzYWUwZTRmM2JmNmM2YWI2YzQ5MGM5YTZmMGQ4Y2RmZDM2NmFhY2Y1ZDgzMTkzNjcxYThmNzdjZDFhZjFmZjJlOTE0NWRlOTJlYzQzZWM4N2NmNGJkYzU2M2Y2ZTkxOWZlMzI4NjFiMGU5M2IxMThlYzM3ZDgwMzVmYmIzYy41OWRkMDVjNWQ5YThhZTcyNjUyODc4MzEyODIxOGYxNWZlNmYyYzBjODE0NWVkZGFiMTEyYjM3NGZjZmUzZDc5JnRva2VuX2lkPSZwaG9uZV90eXBlPTEmdGltZT0nICsgdCArICcmcGhvbmVfbW9kZWw9eGlhb21pLTIyMDIxMjExcmMma2V5cz1aSDhncGRwOWJ4anVHMk5LOTdzb2wzbzdVaXolMkI5ZVZFYVZNbEUyRmszajdFUmVzTTNZSG5FQ1pVSDdCT05OVGpweTdSVk5pJTJGWWltR3VOWXJpQzdDbXN3djRQTllpRll6dzlRaGxxWkt3TmZDTTZJVXBGWjBUNHJaeDhHNzh6a3YydE5WYmZZQzRxTlFlZEdpMDduV1ozM2RsU3VWeFJPVmZZNUp4T1dITUkwJTNEJnJlcXVlc3Rfa2V5PScgKyByZXF1ZXN0X2tleTIgKyAnJnNpZ25hdHVyZT0nICsgc2lnbmF0dXJlMiArICcmYXBwX2lkPTEmYWRfdmVyc2lvbj0xJzsgLy9sb2coYm9keSkKCiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20vQXBwL1Jlc291cmNlL1Z1cmxEZXRhaWwvc2hvd09uZScsIHsKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnLAogICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjQwNjAyNScsCiAgICAgICAgICAgICAgICAnUGFja2FnZU5hbWUnOiAnY29tLnVmMDc2YmYwYzI0Ni5xZTQzOWYwZDVlLm04YWFmNTZiNzI1YS5pZmViNjQ3MzQ2ZicsCiAgICAgICAgICAgICAgICAnVmVyJzogJzEuOS4yJywKICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vYXBpLjh1dGR0Y3EuY29tJywKICAgICAgICAgICAgICAgICdYLUN1c3RvbWVyLUNsaWVudC1JcCc6ICcxMjcuMC4wLjEnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLAogICAgICAgICAgICAgICAgJ0hvc3QnOiAnYXBpLjh1dGR0Y3EuY29tJywKICAgICAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ0tlZXAtQWxpdmUnLAogICAgICAgICAgICAgICAgLy8nQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAogICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnb2todHRwLzMuMTIuMCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYm9keTogYm9keSwKICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgIHJlamVjdENvZGluZzogdHJ1ZQogICAgICAgIH0pOyAvL2xvZyhodG1sKQoKICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsKICAgICAgICAvLyAvL2NvbnNvbGUubG9nKCJkZGRkZGQ9PT09PSIrSlNPTi5zdHJpbmdpZnkoZGF0YSkpCiAgICAgICAgdmFyIHJlc3BvbnNlX2tleSA9IGRhdGEucmVzcG9uc2Vfa2V5OyAvL2xvZyhyZXNwb25zZV9rZXkpCiAgICAgICAgdmFyIGtleXMgPSBkYXRhLmtleXM7IC8vbG9nKGtleXMpCgogICAgICAgIHZhciBib2R5a2V5ID0gIk1JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQWU2aEtyV0xpMXpRbWpUVDFvemJFNFFkRmVKR054dWJ4bGQ2R3JGR3hpbXhmTXNNQjZCcEpocGNUb3VBcXl3QUZwcGlLZXRVQkJiWHdZc1lVMXdOcjY0OFhWbVBtQ01DeTRyWTh2ZGxpRm5iTVVqMDg2RFU2Wisvb1hCZFdVMy9iMUcwRE4zRTl3VUxSU3djS1pUM3dqL2NDSTF2c0NtM2dqMlI1U3FrQTlZMENBd0VBQVFLQmdBSkgrNEN4VjAvekJWY0xpQkNIdlNBTm0wbDdIZXR5YlRoL2oycDBZMXNUWHJvNEFMd0FhQ1RVZXFkQmpXaUxTbzlsTndESEZ5cTh6WDkwK2dOeGE3YzVFcWNXVjlGbWxWWHI4VmhmQnpjWm8xblhlTmRYRlQ3dFEyeWFoL29kdGRjeCt2Uk1TR0pkMXQvNWs1YkRkOXdBdllkSURibE1BZyt3aUtLWjVLY2RBa0VBMWNDYWtFTjROZXhrRjV0SFBSclI2WE9ZL1hIZmtxWHhFaE1xbU5iQjlVMzRzYVRKbkxXSUhDOElYeXM2UW16ejMwVHR6Q2p1T3FLUlJ5K0ZNTTRUZHdKQkFKUVpGUGpzR0MrUnFjRzVVdlZNaU1QaG53ZS9iWEVlaFNoSzg2eUpLL2cvVWlLck84N2gzYUV1NWdjSnFCeWdUcTNCQkJvSDJtZDNwci9XK2hVTVdCc0NRUUNoZmhUSXJkRGluS2k2bFJ4cmRCbm4wT2hqZzJjd3VxSzV6elU5cC9OK1M5eDdDazh3VUk1M0RLbThqVUpFOFdBRzdXTGovb0NPV0VoK2ljNk5Jd1RkQWtFQWowWDhuaHg2QVhzZ0NZUnFsMWtsYnF0Vm1MOCs5NUtaSzdQbkxXRy9JZmpRVXkzcFBHb1NhWjdmZHF1RzhicThveWY1K2R6akUvb1RYY0J5Uys2WFJRSkFQLzVjaXkxYkwzTmhVaHNhT1Z5NTVNSFhuUGpkY1RYMEZhTGkreWJYWklmSVEyUDRyYjE5bVZxMWZlTWJDWGh6K0wxckc4b2F0NWxZS2ZwZThrODNaQT09IjsgLy9sb2coYm9keWtleSkKICAgICAgICB2YXIgYm9keWtleWl2ID0gSlNPTi5wYXJzZShSU0EuZGVjb2RlKGtleXMsIGJvZHlrZXkpKTsgLy9sb2coYm9keWtleWl2KQogICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShib2R5a2V5aXYua2V5KTsgLy9sb2coa2V5KQogICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGJvZHlrZXlpdi5pdik7IC8vbG9nKGl2KQogICAgICAgIHZhciBodG1sMiA9IERlY3J5cHQocmVzcG9uc2Vfa2V5LCBrZXksIGl2KTsgLy9sb2coaHRtbDIpCiAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UoaHRtbDIpLnVybDsgLy9sb2codXJsKQogICAgICAgIGlucHV0ID0gewogICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgIGhlYWRlcjogcnVsZS5oZWFkZXJzCiAgICAgICAgfQogICAgICAgIHNldFJlc3VsdChkKQogICAgfSksCiAgICAvLyAgIOaOqOiNkDogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgIC8vICAgICBsZXQgZCA9IFtdOwogICAgLy8gICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KSkKICAgIC8vICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7CiAgICAvLyAgICAgICBpdGVtLmRhdGFzLmZvckVhY2goaXQgPT4gewogICAgLy8gICAgICAgICBsZXQgaWQgPSBgaHR0cDovLzExNC4xMzIuNTUuMjMvYmwvbWIvYXBpLnBocC9wcm92aWRlL3ZvZC8/YWM9dmlkZW9saXN0JndkPSR7aXQudGl0bGV9JmA7CiAgICAvLyAgICAgICAgIGQucHVzaCh7CiAgICAvLyAgICAgICAgICAgdXJsOiBpZCwKICAgIC8vICAgICAgICAgICB0aXRsZTogaXQudGl0bGUsCiAgICAvLyAgICAgICAgICAgaW1nOiBpdC5waWMsCiAgICAvLyAgICAgICAgICAgZGVzYzogaXQuYWNyLAogICAgLy8gICAgICAgICB9KQogICAgLy8gICAgICAgfSk7CiAgICAvLyAgICAgfSk7CiAgICAvLyAgICAgc2V0UmVzdWx0KGQpCiAgICAvLyAgIH0pLAogICAg5LiA57qnOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGxldCBkID0gW107CgogICAgICAgIGZ1bmN0aW9uIEVuY3J5cHQocGxhaW5UZXh0KSB7CiAgICAgICAgICAgIGxldCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgibXZYQlNXN2VrcmVJdE5zVCIpOwogICAgICAgICAgICBsZXQgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgiMlUzSXJKTDhzekFLcDBGaiIpOwogICAgICAgICAgICAvLyDlsIbmlofmnKzliqDlr4bkuLogQUVTL0NCQy9QS0NTNVBhZGRpbmcg5qC85byPCiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChwbGFpblRleHQsIGtleSwgewogICAgICAgICAgICAgICAgaXY6IGl2LAogICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsCiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyDojrflj5bliqDlr4bnu5PmnpzlubbovazkuLogSGV4IOagvOW8jwogICAgICAgICAgICBsZXQgZW5jcnlwdGVkSGV4ID0gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7CiAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWRIZXgudG9VcHBlckNhc2UoKTsgLy8g6L+U5Zue5aSn5YaZIEhleCDmoLzlvI8KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIERlY3J5cHQod29yZCwga2V5LCBpdikgewogICAgICAgICAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZSh3b3JkKTsKCiAgICAgICAgICAgIC8vIOS9v+eUqEFFUy9DQkMvUEtDUzVQYWRkaW5n5qih5byP6L+b6KGM6Kej5a+GCiAgICAgICAgICAgIGxldCBkZWNyeXB0ID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoewogICAgICAgICAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkSGV4U3RyCiAgICAgICAgICAgIH0sIGtleSwgewogICAgICAgICAgICAgICAgaXY6IGl2LAogICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIC8vIOS9v+eUqENCQ+aooeW8jwogICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3IC8vIOS9v+eUqFBLQ1MjN+Whq+WFhQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIOWwhuino+WvhuWQjueahOaVsOaNrui9rOaNouS4uuWOn+Wni+aWh+acrAogICAgICAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7CgogICAgICAgICAgICAvLyDov5Tlm57op6Plr4blkI7nmoTmlofmnKwKICAgICAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0cjsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGdldGJvZHkzKGtleSwgdCkgewogICAgICAgICAgICB2YXIgc2lnbmF0dXJlID0gJ3Rva2VuX2lkPSx0b2tlbj0xYmU4NmU4ZTE4YTlmYTE4YjJiOGQ1NDMyNjk5ZGFkMC5hYzAwOGVkNjUwZmQwODdiZmJlY2YyZmRhOWQ4MmU5ODM1MjUzZWYyNDg0M2U2YjE4ZmNkMTI4YjEwNzYzNDk3YmNmOWQ1M2U5NTlmNTM3N2NkZTAzOGMyMGNjZjlkMTdmNjA0YzliOGJiNmU2MTA0MWRlZjg2NzI5YjJmYzc0MDhiZDI0MWUyM2MyMTNhYzU3ZjAyMjZlZTY1NmUyYmIwYTU4M2FlMGU0ZjNiZjZjNmFiNmM0OTBjOWE2ZjBkOGNkZmQzNjZhYWNmNWQ4MzE5MzY3MWE4Zjc3Y2QxYWYxZmYyZTkxNDVkZTkyZWM0M2VjODdjZjRiZGM1NjNmNmU5MTlmZTMyODYxYjBlOTNiMTE4ZWMzN2Q4MDM1ZmJiM2MuNTlkZDA1YzVkOWE4YWU3MjY1Mjg3ODMxMjgyMThmMTVmZTZmMmMwYzgxNDVlZGRhYjExMmIzNzRmY2ZlM2Q3OSxwaG9uZV90eXBlPTEscmVxdWVzdF9rZXk9JyArIGtleSArICcsYXBwX2lkPTEsdGltZT0nICsgdCArICcsa2V5cz1xRHBvdEUyYmVkaW1LM1FHcWx5VjVpZVhYQzNFaGFQTFErSU9KeUhuSGZsQ2o1dy83RVNLN0ZneXdNdnJnanhieDBHa2xFRkxJNCtKc2hneVNlNjMzT0lSc3R1a3R3ZGlDeTNDVCtmTFNwdXhCSkRJbGZYUURhZUgzaWcxd2lCMEpzWjYwMVhIaUZ3ZUdNdTR0WmZuU3BIZzNPbm9MNm56L3V1clVpZjJPSzQ9KiZ6dmR2ZHZkZGJmaWtra3VtdG1kd3FwcHA/fDRZIXMhMmJyJzsgLy9sb2coc2lnbmF0dXJlKQogICAgICAgICAgICB2YXIgc2lnbmF0dXJlMiA9IG1kNShzaWduYXR1cmUpLnRvVXBwZXJDYXNlKCk7IC8vbG9nKHNpZ25hdHVyZTIpCiAgICAgICAgICAgIHZhciBib2R5ID0gJ3Rva2VuPTFiZTg2ZThlMThhOWZhMThiMmI4ZDU0MzI2OTlkYWQwLmFjMDA4ZWQ2NTBmZDA4N2JmYmVjZjJmZGE5ZDgyZTk4MzUyNTNlZjI0ODQzZTZiMThmY2QxMjhiMTA3NjM0OTdiY2Y5ZDUzZTk1OWY1Mzc3Y2RlMDM4YzIwY2NmOWQxN2Y2MDRjOWI4YmI2ZTYxMDQxZGVmODY3MjliMmZjNzQwOGJkMjQxZTIzYzIxM2FjNTdmMDIyNmVlNjU2ZTJiYjBhNTgzYWUwZTRmM2JmNmM2YWI2YzQ5MGM5YTZmMGQ4Y2RmZDM2NmFhY2Y1ZDgzMTkzNjcxYThmNzdjZDFhZjFmZjJlOTE0NWRlOTJlYzQzZWM4N2NmNGJkYzU2M2Y2ZTkxOWZlMzI4NjFiMGU5M2IxMThlYzM3ZDgwMzVmYmIzYy41OWRkMDVjNWQ5YThhZTcyNjUyODc4MzEyODIxOGYxNWZlNmYyYzBjODE0NWVkZGFiMTEyYjM3NGZjZmUzZDc5JnRva2VuX2lkPSZwaG9uZV90eXBlPTEmdGltZT0nICsgdCArICcmcGhvbmVfbW9kZWw9eGlhb21pLTIyMDIxMjExcmMma2V5cz1xRHBvdEUyYmVkaW1LM1FHcWx5VjVpZVhYQzNFaGFQTFElMkJJT0p5SG5IZmxDajV3JTJGN0VTSzdGZ3l3TXZyZ2p4YngwR2tsRUZMSTQlMkJKc2hneVNlNjMzT0lSc3R1a3R3ZGlDeTNDVCUyQmZMU3B1eEJKRElsZlhRRGFlSDNpZzF3aUIwSnNaNjAxWEhpRndlR011NHRaZm5TcEhnM09ub0w2bnolMkZ1dXJVaWYyT0s0JTNEJnJlcXVlc3Rfa2V5PScgKyBrZXkgKyAnJnNpZ25hdHVyZT0nICsgc2lnbmF0dXJlMiArICcmYXBwX2lkPTEmYWRfdmVyc2lvbj0xJzsKICAgICAgICAgICAgcmV0dXJuIGJvZHkKICAgICAgICB9CiAgICAgICAgY29uc3QgYm9keWtleSA9ICJNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0FlNmhLcldMaTF6UW1qVFQxb3piRTRRZEZlSkdOeHVieGxkNkdyRkd4aW14Zk1zTUI2QnBKaHBjVG91QXF5d0FGcHBpS2V0VUJCYlh3WXNZVTF3TnI2NDhYVm1QbUNNQ3k0clk4dmRsaUZuYk1VajA4NkRVNlorL29YQmRXVTMvYjFHMEROM0U5d1VMUlN3Y0taVDN3ai9jQ0kxdnNDbTNnajJSNVNxa0E5WTBDQXdFQUFRS0JnQUpIKzRDeFYwL3pCVmNMaUJDSHZTQU5tMGw3SGV0eWJUaC9qMnAwWTFzVFhybzRBTHdBYUNUVWVxZEJqV2lMU285bE53REhGeXE4elg5MCtnTnhhN2M1RXFjV1Y5Rm1sVlhyOFZoZkJ6Y1pvMW5YZU5kWEZUN3RRMnlhaC9vZHRkY3grdlJNU0dKZDF0LzVrNWJEZDl3QXZZZElEYmxNQWcrd2lLS1o1S2NkQWtFQTFjQ2FrRU40TmV4a0Y1dEhQUnJSNlhPWS9YSGZrcVh4RWhNcW1OYkI5VTM0c2FUSm5MV0lIQzhJWHlzNlFtenozMFR0ekNqdU9xS1JSeStGTU00VGR3SkJBSlFaRlBqc0dDK1JxY0c1VXZWTWlNUGhud2UvYlhFZWhTaEs4NnlKSy9nL1VpS3JPODdoM2FFdTVnY0pxQnlnVHEzQkJCb0gybWQzcHIvVytoVU1XQnNDUVFDaGZoVElyZERpbktpNmxSeHJkQm5uME9oamcyY3d1cUs1enpVOXAvTitTOXg3Q2s4d1VJNTNES204alVKRThXQUc3V0xqL29DT1dFaCtpYzZOSXdUZEFrRUFqMFg4bmh4NkFYc2dDWVJxbDFrbGJxdFZtTDgrOTVLWks3UG5MV0cvSWZqUVV5M3BQR29TYVo3ZmRxdUc4YnE4b3lmNStkempFL29UWGNCeVMrNlhSUUpBUC81Y2l5MWJMM05oVWhzYU9WeTU1TUhYblBqZGNUWDBGYUxpK3liWFpJZklRMlA0cmIxOW1WcTFmZU1iQ1hoeitMMXJHOG9hdDVsWUtmcGU4azgzWkE9PSI7CgogICAgICAgIGZ1bmN0aW9uIGdldGh0bWwodSwgYm9keSwgaGVhZGVycykgewogICAgICAgICAgICB2YXIgaGQgPSBmZXRjaCh1LCB7CiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLAogICAgICAgICAgICAgICAgYm9keTogYm9keSwKICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgcmVqZWN0Q29kaW5nOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgYmFubmVyID0gSlNPTi5wYXJzZShoZCkuZGF0YTsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlX2tleSA9IGJhbm5lci5yZXNwb25zZV9rZXk7IC8vbG9nKCkKICAgICAgICAgICAgdmFyIGtleXMgPSBiYW5uZXIua2V5czsgLy9sb2coa2V5cykKICAgICAgICAgICAgdmFyIGJvZHlrZXlpdiA9IEpTT04ucGFyc2UoUlNBLmRlY29kZShrZXlzLCBib2R5a2V5KSk7CiAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShib2R5a2V5aXYua2V5KTsKICAgICAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoYm9keWtleWl2Lml2KTsKICAgICAgICAgICAgdmFyIGh0bWwgPSBEZWNyeXB0KHJlc3BvbnNlX2tleSwga2V5LCBpdik7CiAgICAgICAgICAgIHJldHVybiBodG1sCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBocXN1YihNWV9DQVRFKSB7CiAgICAgICAgICAgIHZhciBzdWJzID0gWyI1IiwgIjEyIiwgIjMwIiwgIjIyIiwgIiJdCiAgICAgICAgICAgIHZhciB0aWRzID0gWyIxIiwgIjIiLCAiNCIsICIzIiwgIjY0Il0KICAgICAgICAgICAgbGV0IGluZGV4ID0gdGlkcy5pbmRleE9mKE1ZX0NBVEUpOwogICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3Vic1tpbmRleF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICIiOyAvLyDmiJbogIXmoLnmja7pnIDopoHov5Tlm57lhbbku5blgLwKICAgICAgICB9CiAgICAgICAgdmFyIGhlYWRlcnMgPSB7CiAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJywKICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjQwNjAyNScsCiAgICAgICAgICAgICdQYWNrYWdlTmFtZSc6ICdjb20udWYwNzZiZjBjMjQ2LnFlNDM5ZjBkNWUubThhYWY1NmI3MjVhLmlmZWI2NDczNDZmJywKICAgICAgICAgICAgJ1Zlcic6ICcxLjkuMicsCiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vYXBpLjh1dGR0Y3EuY29tJywKICAgICAgICAgICAgJ1gtQ3VzdG9tZXItQ2xpZW50LUlwJzogJzEyNy4wLjAuMScsCiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKICAgICAgICAgICAgJ0hvc3QnOiAnYXBpLjh1dGR0Y3EuY29tJywKICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnS2VlcC1BbGl2ZScsCiAgICAgICAgICAgIC8vJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnb2todHRwLzMuMTIuMCcKICAgICAgICB9CiAgICAgICAgdmFyIHRpZCA9IE1ZX0NBVEU7CiAgICAgICAgdmFyIHN1YiA9IGhxc3ViKE1ZX0NBVEUpCiAgICAgICAgdmFyIHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMDsKICAgICAgICB2YXIgdCA9IHRpbWVzdGFtcC50b1N0cmluZygpLnNwbGl0KCcuJylbMF07CiAgICAgICAgdmFyIHJlcXVlc3Rfa2V5ID0gSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAiYXJlYSI6IChNWV9GTC5hcmVhIHx8IDApLnRvU3RyaW5nKCksCiAgICAgICAgICAgICJzdWIiOiAoTVlfRkwuc3ViIHx8IHN1YikudG9TdHJpbmcoKSwKICAgICAgICAgICAgInllYXIiOiAoTVlfRkwueWVhciB8fCAwKS50b1N0cmluZygpLAogICAgICAgICAgICAicGFnZVNpemUiOiAiMzAiLAogICAgICAgICAgICAic29ydCI6IChNWV9GTC5zb3J0IHx8ICJkX2lkIikudG9TdHJpbmcoKSwKICAgICAgICAgICAgInBhZ2UiOiBNWV9QQUdFLAogICAgICAgICAgICAidGlkIjogdGlkCiAgICAgICAgfSk7CiAgICAgICAgdmFyIHJlcXVlc3Rfa2V5MiA9IEVuY3J5cHQocmVxdWVzdF9rZXkpOwogICAgICAgIHZhciBib2R5ID0gZ2V0Ym9keTMocmVxdWVzdF9rZXkyLCB0KQogICAgICAgIHZhciBodG1sMiA9IGdldGh0bWwoImh0dHBzOi8vYXBpLjh1dGR0Y3EuY29tL0FwcC9JbmRleExpc3QvaW5kZXhMaXN0IiwgYm9keSwgaGVhZGVycykKICAgICAgICAvL2NvbnNvbGUubG9nKCJ0dHR0dGxpZWI9PSIraHRtbDIpCiAgICAgICAgdmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5saXN0OyAvL2xvZyhsaXN0KQogICAgICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHsKICAgICAgICAgICAgZC5wdXNoKHsKICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnZvZF9uYW1lLAogICAgICAgICAgICAgICAgZGVzYzogZGF0YS52b2RfY29udGludSA9PSAwID8gJ+eUteW9sScgOiAn5pu05paw6IezJyArIGRhdGEudm9kX2NvbnRpbnUgKyAn6ZuGJywKICAgICAgICAgICAgICAgIHllYXI6IGRhdGEudm9kX3Njcm9lLAogICAgICAgICAgICAgICAgaW1nOiBkYXRhLnZvZF9waWMsCiAgICAgICAgICAgICAgICB1cmw6IGAke2RhdGEudm9kX2lkfS8ke2RhdGEudm9kX2NvbnRpbnV9YCwKICAgICAgICAgICAgfSkKICAgICAgICB9KQogICAgICAgIHNldFJlc3VsdChkKQogICAgfSksCiAgICDkuoznuqc6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgLy8gdmFyIGQgPSBbXTsKICAgICAgICBmdW5jdGlvbiBFbmNyeXB0KHBsYWluVGV4dCkgewogICAgICAgICAgICBsZXQga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoIm12WEJTVzdla3JlSXROc1QiKTsKICAgICAgICAgICAgbGV0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoIjJVM0lySkw4c3pBS3AwRmoiKTsKICAgICAgICAgICAgLy8g5bCG5paH5pys5Yqg5a+G5Li6IEFFUy9DQkMvUEtDUzVQYWRkaW5nIOagvOW8jwogICAgICAgICAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQocGxhaW5UZXh0LCBrZXksIHsKICAgICAgICAgICAgICAgIGl2OiBpdiwKICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLAogICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8g6I635Y+W5Yqg5a+G57uT5p6c5bm26L2s5Li6IEhleCDmoLzlvI8KICAgICAgICAgICAgbGV0IGVuY3J5cHRlZEhleCA9IGVuY3J5cHRlZC5jaXBoZXJ0ZXh0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpOwogICAgICAgICAgICByZXR1cm4gZW5jcnlwdGVkSGV4LnRvVXBwZXJDYXNlKCk7IC8vIOi/lOWbnuWkp+WGmSBIZXgg5qC85byPCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBEZWNyeXB0KHdvcmQsIGtleSwgaXYpIHsKICAgICAgICAgICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2Uod29yZCk7CgogICAgICAgICAgICAvLyDkvb/nlKhBRVMvQ0JDL1BLQ1M1UGFkZGluZ+aooeW8j+i/m+ihjOino+WvhgogICAgICAgICAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHsKICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0cgogICAgICAgICAgICB9LCBrZXksIHsKICAgICAgICAgICAgICAgIGl2OiBpdiwKICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCAvLyDkvb/nlKhDQkPmqKHlvI8KICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyAvLyDkvb/nlKhQS0NTIzfloavlhYUKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyDlsIbop6Plr4blkI7nmoTmlbDmja7ovazmjaLkuLrljp/lp4vmlofmnKwKICAgICAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpOwoKICAgICAgICAgICAgLy8g6L+U5Zue6Kej5a+G5ZCO55qE5paH5pysCiAgICAgICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZXRib2R5MihrZXksIHQpIHsKICAgICAgICAgICAgdmFyIHNpZ25hdHVyZSA9ICd0b2tlbl9pZD0sdG9rZW49MWJlODZlOGUxOGE5ZmExOGIyYjhkNTQzMjY5OWRhZDAuYWMwMDhlZDY1MGZkMDg3YmZiZWNmMmZkYTlkODJlOTgzNTI1M2VmMjQ4NDNlNmIxOGZjZDEyOGIxMDc2MzQ5N2JjZjlkNTNlOTU5ZjUzNzdjZGUwMzhjMjBjY2Y5ZDE3ZjYwNGM5YjhiYjZlNjEwNDFkZWY4NjcyOWIyZmM3NDA4YmQyNDFlMjNjMjEzYWM1N2YwMjI2ZWU2NTZlMmJiMGE1ODNhZTBlNGYzYmY2YzZhYjZjNDkwYzlhNmYwZDhjZGZkMzY2YWFjZjVkODMxOTM2NzFhOGY3N2NkMWFmMWZmMmU5MTQ1ZGU5MmVjNDNlYzg3Y2Y0YmRjNTYzZjZlOTE5ZmUzMjg2MWIwZTkzYjExOGVjMzdkODAzNWZiYjNjLjU5ZGQwNWM1ZDlhOGFlNzI2NTI4NzgzMTI4MjE4ZjE1ZmU2ZjJjMGM4MTQ1ZWRkYWIxMTJiMzc0ZmNmZTNkNzkscGhvbmVfdHlwZT0xLHJlcXVlc3Rfa2V5PScgKyBrZXkgKyAnLGFwcF9pZD0xLHRpbWU9JyArIHQgKyAnLGtleXM9UW14aTVjaVdYYlF6a3I3bytTVU5pVXVReFFFZjgvQVZ5VVdZNFQvQkdoY1hCSVV6NG5PeUhCR2Y5QTRLYk0waUtGM3lwOU03V0FZMHJyczVQemRUQU9CNDVwbGNTMnpaMHdVaWJjWHVHSjI5VlZHUldLR3dFOXp1MnZMd2hmZ2pUYWFEcFhvNHJieSs3R3hYVGt0ekpteHZuZU9VZFllSGkrUFpzVGhsdlBJPSomenZkdmR2ZGRiZmlra2t1bXRtZHdxcHBwP3w0WSFzITJicic7IC8vbG9nKHNpZ25hdHVyZSkKICAgICAgICAgICAgdmFyIHNpZ25hdHVyZTIgPSBtZDUoc2lnbmF0dXJlKTsgLy9sb2coc2lnbmF0dXJlMikKICAgICAgICAgICAgdmFyIGJvZHkgPSAndG9rZW49MWJlODZlOGUxOGE5ZmExOGIyYjhkNTQzMjY5OWRhZDAuYWMwMDhlZDY1MGZkMDg3YmZiZWNmMmZkYTlkODJlOTgzNTI1M2VmMjQ4NDNlNmIxOGZjZDEyOGIxMDc2MzQ5N2JjZjlkNTNlOTU5ZjUzNzdjZGUwMzhjMjBjY2Y5ZDE3ZjYwNGM5YjhiYjZlNjEwNDFkZWY4NjcyOWIyZmM3NDA4YmQyNDFlMjNjMjEzYWM1N2YwMjI2ZWU2NTZlMmJiMGE1ODNhZTBlNGYzYmY2YzZhYjZjNDkwYzlhNmYwZDhjZGZkMzY2YWFjZjVkODMxOTM2NzFhOGY3N2NkMWFmMWZmMmU5MTQ1ZGU5MmVjNDNlYzg3Y2Y0YmRjNTYzZjZlOTE5ZmUzMjg2MWIwZTkzYjExOGVjMzdkODAzNWZiYjNjLjU5ZGQwNWM1ZDlhOGFlNzI2NTI4NzgzMTI4MjE4ZjE1ZmU2ZjJjMGM4MTQ1ZWRkYWIxMTJiMzc0ZmNmZTNkNzkmdG9rZW5faWQ9JnBob25lX3R5cGU9MSZ0aW1lPScgKyB0ICsgJyZwaG9uZV9tb2RlbD14aWFvbWktMjIwMjEyMTFyYyZrZXlzPVFteGk1Y2lXWGJRemtyN28lMkJTVU5pVXVReFFFZjglMkZBVnlVV1k0VCUyRkJHaGNYQklVejRuT3lIQkdmOUE0S2JNMGlLRjN5cDlNN1dBWTBycnM1UHpkVEFPQjQ1cGxjUzJ6WjB3VWliY1h1R0oyOVZWR1JXS0d3RTl6dTJ2THdoZmdqVGFhRHBYbzRyYnklMkI3R3hYVGt0ekpteHZuZU9VZFllSGklMkJQWnNUaGx2UEklM0QmcmVxdWVzdF9rZXk9JyArIGtleSArICcmc2lnbmF0dXJlPScgKyBzaWduYXR1cmUyICsgJyZhcHBfaWQ9MSZhZF92ZXJzaW9uPTEnOyAvL2xvZyhib2R5KQogICAgICAgICAgICByZXR1cm4gYm9keQogICAgICAgIH0KICAgICAgICBjb25zdCBib2R5a2V5ID0gIk1JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQWU2aEtyV0xpMXpRbWpUVDFvemJFNFFkRmVKR054dWJ4bGQ2R3JGR3hpbXhmTXNNQjZCcEpocGNUb3VBcXl3QUZwcGlLZXRVQkJiWHdZc1lVMXdOcjY0OFhWbVBtQ01DeTRyWTh2ZGxpRm5iTVVqMDg2RFU2Wisvb1hCZFdVMy9iMUcwRE4zRTl3VUxSU3djS1pUM3dqL2NDSTF2c0NtM2dqMlI1U3FrQTlZMENBd0VBQVFLQmdBSkgrNEN4VjAvekJWY0xpQkNIdlNBTm0wbDdIZXR5YlRoL2oycDBZMXNUWHJvNEFMd0FhQ1RVZXFkQmpXaUxTbzlsTndESEZ5cTh6WDkwK2dOeGE3YzVFcWNXVjlGbWxWWHI4VmhmQnpjWm8xblhlTmRYRlQ3dFEyeWFoL29kdGRjeCt2Uk1TR0pkMXQvNWs1YkRkOXdBdllkSURibE1BZyt3aUtLWjVLY2RBa0VBMWNDYWtFTjROZXhrRjV0SFBSclI2WE9ZL1hIZmtxWHhFaE1xbU5iQjlVMzRzYVRKbkxXSUhDOElYeXM2UW16ejMwVHR6Q2p1T3FLUlJ5K0ZNTTRUZHdKQkFKUVpGUGpzR0MrUnFjRzVVdlZNaU1QaG53ZS9iWEVlaFNoSzg2eUpLL2cvVWlLck84N2gzYUV1NWdjSnFCeWdUcTNCQkJvSDJtZDNwci9XK2hVTVdCc0NRUUNoZmhUSXJkRGluS2k2bFJ4cmRCbm4wT2hqZzJjd3VxSzV6elU5cC9OK1M5eDdDazh3VUk1M0RLbThqVUpFOFdBRzdXTGovb0NPV0VoK2ljNk5Jd1RkQWtFQWowWDhuaHg2QVhzZ0NZUnFsMWtsYnF0Vm1MOCs5NUtaSzdQbkxXRy9JZmpRVXkzcFBHb1NhWjdmZHF1RzhicThveWY1K2R6akUvb1RYY0J5Uys2WFJRSkFQLzVjaXkxYkwzTmhVaHNhT1Z5NTVNSFhuUGpkY1RYMEZhTGkreWJYWklmSVEyUDRyYjE5bVZxMWZlTWJDWGh6K0wxckc4b2F0NWxZS2ZwZThrODNaQT09IjsKCiAgICAgICAgZnVuY3Rpb24gZ2V0aHRtbCh1LCBib2R5LCBoZWFkZXJzKSB7CiAgICAgICAgICAgIHZhciBoZCA9IGZldGNoKHUsIHsKICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsCiAgICAgICAgICAgICAgICBib2R5OiBib2R5LAogICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICByZWplY3RDb2Rpbmc6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBiYW5uZXIgPSBKU09OLnBhcnNlKGhkKS5kYXRhOwogICAgICAgICAgICB2YXIgcmVzcG9uc2Vfa2V5ID0gYmFubmVyLnJlc3BvbnNlX2tleTsgLy9sb2coKQogICAgICAgICAgICB2YXIga2V5cyA9IGJhbm5lci5rZXlzOyAvL2xvZyhrZXlzKQogICAgICAgICAgICB2YXIgYm9keWtleWl2ID0gSlNPTi5wYXJzZShSU0EuZGVjb2RlKGtleXMsIGJvZHlrZXkpKTsKICAgICAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGJvZHlrZXlpdi5rZXkpOwogICAgICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShib2R5a2V5aXYuaXYpOwogICAgICAgICAgICB2YXIgaHRtbCA9IERlY3J5cHQocmVzcG9uc2Vfa2V5LCBrZXksIGl2KTsKICAgICAgICAgICAgcmV0dXJuIGh0bWwKICAgICAgICB9CiAgICAgICAgY29uc3QgaGVhZGVycyA9IHsKICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnLAogICAgICAgICAgICAnVmVyc2lvbic6ICcyNDA2MDI1JywKICAgICAgICAgICAgJ1BhY2thZ2VOYW1lJzogJ2NvbS51ZjA3NmJmMGMyNDYucWU0MzlmMGQ1ZS5tOGFhZjU2YjcyNWEuaWZlYjY0NzM0NmYnLAogICAgICAgICAgICAnVmVyJzogJzEuOS4yJywKICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20nLAogICAgICAgICAgICAnWC1DdXN0b21lci1DbGllbnQtSXAnOiAnMTI3LjAuMC4xJywKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLAogICAgICAgICAgICAnSG9zdCc6ICdhcGkuOHV0ZHRjcS5jb20nLAogICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdLZWVwLUFsaXZlJywKICAgICAgICAgICAgLy8nQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAogICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdva2h0dHAvMy4xMi4wJwogICAgICAgIH0KICAgICAgICAvLyB2YXIgTVlfVVJMID0gTVlfVVJMLnNwbGl0KCIjIyIpWzFdOyAvL2xvZyhNWV9VUkwpCiAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKCdodHRwczovL2FwaS44dXRkdGNxLmNvbS8nLCAnJyk7CiAgICAgICAgLy9jb25zb2xlLmxvZygiaW5wdXQtLS0tPT09PSIraW5wdXQpCgogICAgICAgIC8vIHZhciB2b2RfY29udGludSA9IGlucHV0LnNwbGl0KCIvIilbMV07IC8vbG9nKHZvZF9pZCkKICAgICAgICB2YXIgdm9kX2lkID0gaW5wdXQuc3BsaXQoIi8iKVswXTsKICAgICAgICAvL2NvbnNvbGUubG9nKCJ2b2QtLS0tPT09PSIrdm9kX2lkKQogICAgICAgIHZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICAgICAgdmFyIHQgPSB0aW1lc3RhbXAudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdOwogICAgICAgIHZhciByZXF1ZXN0X2tleSA9IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgInRva2VuX2lkIjogIjM5MzY2OCIsCiAgICAgICAgICAgICJ2b2RfaWQiOiB2b2RfaWQsCiAgICAgICAgICAgICJtb2JpbGVfdGltZSI6IHQsCiAgICAgICAgICAgICJ0b2tlbiI6ICIxYmU4NmU4ZTE4YTlmYTE4YjJiOGQ1NDMyNjk5ZGFkMC5hYzAwOGVkNjUwZmQwODdiZmJlY2YyZmRhOWQ4MmU5ODM1MjUzZWYyNDg0M2U2YjE4ZmNkMTI4YjEwNzYzNDk3YmNmOWQ1M2U5NTlmNTM3N2NkZTAzOGMyMGNjZjlkMTdmNjA0YzliOGJiNmU2MTA0MWRlZjg2NzI5YjJmYzc0MDhiZDI0MWUyM2MyMTNhYzU3ZjAyMjZlZTY1NmUyYmIwYTU4M2FlMGU0ZjNiZjZjNmFiNmM0OTBjOWE2ZjBkOGNkZmQzNjZhYWNmNWQ4MzE5MzY3MWE4Zjc3Y2QxYWYxZmYyZTkxNDVkZTkyZWM0M2VjODdjZjRiZGM1NjNmNmU5MTlmZTMyODYxYjBlOTNiMTE4ZWMzN2Q4MDM1ZmJiM2MuNTlkZDA1YzVkOWE4YWU3MjY1Mjg3ODMxMjgyMThmMTVmZTZmMmMwYzgxNDVlZGRhYjExMmIzNzRmY2ZlM2Q3OSIKICAgICAgICB9KTsKICAgICAgICB2YXIgcmVxdWVzdF9rZXkyID0gRW5jcnlwdChyZXF1ZXN0X2tleSk7CiAgICAgICAgdmFyIGJvZHkgPSBnZXRib2R5MihyZXF1ZXN0X2tleTIsIHQpCiAgICAgICAgdmFyIGh0bWwgPSBnZXRodG1sKCJodHRwczovL2FwaS44dXRkdGNxLmNvbS9BcHAvSW5kZXhQbGF5L3BsYXlJbmZvIiwgYm9keSwgaGVhZGVycykKICAgICAgICB2YXIgZGF0YTIgPSBKU09OLnBhcnNlKGh0bWwpLnZvZEluZm87IC8vY29uc29sZS5sb2coImh3dWR3dWRnLT09PT0iK0pTT04uc3RyaW5naWZ5KGRhdGEyKSkKICAgICAgICB2YXIgcmVxdWVzdF9rZXkzID0gSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAidnVybF9jbG91ZF9pZCI6ICIyIiwKICAgICAgICAgICAgInZvZF9kX2lkIjogdm9kX2lkCiAgICAgICAgfSk7IC8vbG9nKHJlcXVlc3Rfa2V5MykKICAgICAgICB2YXIgcmVxdWVzdF9rZXk0ID0gRW5jcnlwdChyZXF1ZXN0X2tleTMpOyAvL2xvZyhyZXF1ZXN0X2tleTQpCiAgICAgICAgdmFyIGJvZHkyID0gZ2V0Ym9keTIocmVxdWVzdF9rZXk0LCB0KQoKICAgICAgICB2YXIgaHRtbDMgPSBnZXRodG1sKCJodHRwczovL2FwaS44dXRkdGNxLmNvbS9BcHAvUmVzb3VyY2UvVnVybC9zaG93IiwgYm9keTIsIGhlYWRlcnMpOyAvL2xvZyhodG1sMykKCiAgICAgICAgdmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwzKS5saXN0OwogICAgICAgIGxldCBubm5tbSA9IFtdOwogICAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgICAgLy8g6I635Y+WcGxheeWvueixoeeahOaJgOacieWAvAogICAgICAgICAgICBjb25zdCBwbGF5UGFyYW1zID0gT2JqZWN0LnZhbHVlcyhpdGVtLnBsYXkpOwogICAgICAgICAgICBsZXQgbGFzdFBhcmFtID0gbnVsbDsKCiAgICAgICAgICAgIC8vIOS7juaVsOe7hOeahOacgOWQjuS4gOS4quWFg+e0oOW8gOWni++8jOWQkeWJjeafpeaJvu+8jOebtOWIsOaJvuWIsOS4gOS4qumdnuepuueahHBhcmFt5YC8CiAgICAgICAgICAgIGZvciAobGV0IGkgPSBwbGF5UGFyYW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICBpZiAocGxheVBhcmFtc1tpXS5wYXJhbSkgewogICAgICAgICAgICAgICAgICAgIGxhc3RQYXJhbSA9IHBsYXlQYXJhbXNbaV0ucGFyYW07CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIOS9v+eUqOato+WImeihqOi+vuW8j+WMuemFjXZ1cmxfaWQKICAgICAgICAgICAgY29uc3QgdnVybElkTWF0Y2ggPSBsYXN0UGFyYW0ubWF0Y2goL3Z1cmxfaWQ9KFxkKykvKTsKICAgICAgICAgICAgY29uc3QgcmVzb2x1dGlvbiA9IGxhc3RQYXJhbS5tYXRjaCgvcmVzb2x1dGlvbj0oXGQrKS8pOwogICAgICAgICAgICAvLyDlpoLmnpzljLnphY3miJDlip/vvIzlsIZ0aXRsZeWSjHZ1cmxfaWTnu4TlkIjlkI5wdXNo5YiwcmVzdWx05pWw57uECiAgICAgICAgICAgIGlmICh2dXJsSWRNYXRjaCkgewogICAgICAgICAgICAgICAgbm5ubW0ucHVzaChgJHtpdGVtLnRpdGxlfSQke3ZvZF9pZH0vJHt2dXJsSWRNYXRjaFsxXX0/JHtyZXNvbHV0aW9uWzFdfWApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgVk9EID0gewogICAgICAgICAgICB0aXRsZTogZGF0YTIudm9kX25hbWUsCiAgICAgICAgICAgIHR5cGU6IGRhdGEyLnZpZGVvVGFnLnRvU3RyaW5nKCksCiAgICAgICAgICAgIGRlc2M6IGRhdGEyLnZvZF91c2VfY29udGVudCwKICAgICAgICAgICAgdm9kX2FjdG9yOiBkYXRhMi52b2RfYWN0b3IsCiAgICAgICAgICAgIHZvZF9hcmVhOiBkYXRhMi52b2RfYXJlYSwKICAgICAgICAgICAgdm9kX2RpcmVjdG9yOiBkYXRhMi52b2RfZGlyZWN0b3IsCiAgICAgICAgICAgIGltZzogZGF0YTIudm9kX3BpYywKICAgICAgICAgICAgdm9kX3BsYXlfZnJvbTogJ+eTnOWtkEhEJywKICAgICAgICAgICAgdm9kX3BsYXlfdXJsOiBubm5tbS5qb2luKCcjJykKICAgICAgICB9CiAgICB9KSwKICAgIOaQnOe0ojogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICBsZXQgZCA9IFtdOwoKICAgICAgICBmdW5jdGlvbiBFbmNyeXB0KHBsYWluVGV4dCkgewogICAgICAgICAgICBsZXQga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoIm12WEJTVzdla3JlSXROc1QiKTsKICAgICAgICAgICAgbGV0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoIjJVM0lySkw4c3pBS3AwRmoiKTsKICAgICAgICAgICAgLy8g5bCG5paH5pys5Yqg5a+G5Li6IEFFUy9DQkMvUEtDUzVQYWRkaW5nIOagvOW8jwogICAgICAgICAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQocGxhaW5UZXh0LCBrZXksIHsKICAgICAgICAgICAgICAgIGl2OiBpdiwKICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLAogICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8g6I635Y+W5Yqg5a+G57uT5p6c5bm26L2s5Li6IEhleCDmoLzlvI8KICAgICAgICAgICAgbGV0IGVuY3J5cHRlZEhleCA9IGVuY3J5cHRlZC5jaXBoZXJ0ZXh0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpOwogICAgICAgICAgICByZXR1cm4gZW5jcnlwdGVkSGV4LnRvVXBwZXJDYXNlKCk7IC8vIOi/lOWbnuWkp+WGmSBIZXgg5qC85byPCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBEZWNyeXB0KHdvcmQsIGtleSwgaXYpIHsKICAgICAgICAgICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2Uod29yZCk7CgogICAgICAgICAgICAvLyDkvb/nlKhBRVMvQ0JDL1BLQ1M1UGFkZGluZ+aooeW8j+i/m+ihjOino+WvhgogICAgICAgICAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHsKICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0cgogICAgICAgICAgICB9LCBrZXksIHsKICAgICAgICAgICAgICAgIGl2OiBpdiwKICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCAvLyDkvb/nlKhDQkPmqKHlvI8KICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyAvLyDkvb/nlKhQS0NTIzfloavlhYUKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyDlsIbop6Plr4blkI7nmoTmlbDmja7ovazmjaLkuLrljp/lp4vmlofmnKwKICAgICAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpOwoKICAgICAgICAgICAgLy8g6L+U5Zue6Kej5a+G5ZCO55qE5paH5pysCiAgICAgICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZXRib2R5MyhrZXksIHQpIHsKICAgICAgICAgICAgdmFyIHNpZ25hdHVyZSA9ICd0b2tlbl9pZD0sdG9rZW49MWJlODZlOGUxOGE5ZmExOGIyYjhkNTQzMjY5OWRhZDAuYWMwMDhlZDY1MGZkMDg3YmZiZWNmMmZkYTlkODJlOTgzNTI1M2VmMjQ4NDNlNmIxOGZjZDEyOGIxMDc2MzQ5N2JjZjlkNTNlOTU5ZjUzNzdjZGUwMzhjMjBjY2Y5ZDE3ZjYwNGM5YjhiYjZlNjEwNDFkZWY4NjcyOWIyZmM3NDA4YmQyNDFlMjNjMjEzYWM1N2YwMjI2ZWU2NTZlMmJiMGE1ODNhZTBlNGYzYmY2YzZhYjZjNDkwYzlhNmYwZDhjZGZkMzY2YWFjZjVkODMxOTM2NzFhOGY3N2NkMWFmMWZmMmU5MTQ1ZGU5MmVjNDNlYzg3Y2Y0YmRjNTYzZjZlOTE5ZmUzMjg2MWIwZTkzYjExOGVjMzdkODAzNWZiYjNjLjU5ZGQwNWM1ZDlhOGFlNzI2NTI4NzgzMTI4MjE4ZjE1ZmU2ZjJjMGM4MTQ1ZWRkYWIxMTJiMzc0ZmNmZTNkNzkscGhvbmVfdHlwZT0xLHJlcXVlc3Rfa2V5PScgKyBrZXkgKyAnLGFwcF9pZD0xLHRpbWU9JyArIHQgKyAnLGtleXM9cURwb3RFMmJlZGltSzNRR3FseVY1aWVYWEMzRWhhUExRK0lPSnlIbkhmbENqNXcvN0VTSzdGZ3l3TXZyZ2p4YngwR2tsRUZMSTQrSnNoZ3lTZTYzM09JUnN0dWt0d2RpQ3kzQ1QrZkxTcHV4QkpESWxmWFFEYWVIM2lnMXdpQjBKc1o2MDFYSGlGd2VHTXU0dFpmblNwSGczT25vTDZuei91dXJVaWYyT0s0PSomenZkdmR2ZGRiZmlra2t1bXRtZHdxcHBwP3w0WSFzITJicic7IC8vbG9nKHNpZ25hdHVyZSkKICAgICAgICAgICAgdmFyIHNpZ25hdHVyZTIgPSBtZDUoc2lnbmF0dXJlKTsgLy9sb2coc2lnbmF0dXJlMikKICAgICAgICAgICAgdmFyIGJvZHkgPSAndG9rZW49MWJlODZlOGUxOGE5ZmExOGIyYjhkNTQzMjY5OWRhZDAuYWMwMDhlZDY1MGZkMDg3YmZiZWNmMmZkYTlkODJlOTgzNTI1M2VmMjQ4NDNlNmIxOGZjZDEyOGIxMDc2MzQ5N2JjZjlkNTNlOTU5ZjUzNzdjZGUwMzhjMjBjY2Y5ZDE3ZjYwNGM5YjhiYjZlNjEwNDFkZWY4NjcyOWIyZmM3NDA4YmQyNDFlMjNjMjEzYWM1N2YwMjI2ZWU2NTZlMmJiMGE1ODNhZTBlNGYzYmY2YzZhYjZjNDkwYzlhNmYwZDhjZGZkMzY2YWFjZjVkODMxOTM2NzFhOGY3N2NkMWFmMWZmMmU5MTQ1ZGU5MmVjNDNlYzg3Y2Y0YmRjNTYzZjZlOTE5ZmUzMjg2MWIwZTkzYjExOGVjMzdkODAzNWZiYjNjLjU5ZGQwNWM1ZDlhOGFlNzI2NTI4NzgzMTI4MjE4ZjE1ZmU2ZjJjMGM4MTQ1ZWRkYWIxMTJiMzc0ZmNmZTNkNzkmdG9rZW5faWQ9JnBob25lX3R5cGU9MSZ0aW1lPScgKyB0ICsgJyZwaG9uZV9tb2RlbD14aWFvbWktMjIwMjEyMTFyYyZrZXlzPXFEcG90RTJiZWRpbUszUUdxbHlWNWllWFhDM0VoYVBMUSUyQklPSnlIbkhmbENqNXclMkY3RVNLN0ZneXdNdnJnanhieDBHa2xFRkxJNCUyQkpzaGd5U2U2MzNPSVJzdHVrdHdkaUN5M0NUJTJCZkxTcHV4QkpESWxmWFFEYWVIM2lnMXdpQjBKc1o2MDFYSGlGd2VHTXU0dFpmblNwSGczT25vTDZueiUyRnV1clVpZjJPSzQlM0QmcmVxdWVzdF9rZXk9JyArIGtleSArICcmc2lnbmF0dXJlPScgKyBzaWduYXR1cmUyICsgJyZhcHBfaWQ9MSZhZF92ZXJzaW9uPTEnOwogICAgICAgICAgICByZXR1cm4gYm9keQogICAgICAgIH0KICAgICAgICBjb25zdCBib2R5a2V5ID0gIk1JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQWU2aEtyV0xpMXpRbWpUVDFvemJFNFFkRmVKR054dWJ4bGQ2R3JGR3hpbXhmTXNNQjZCcEpocGNUb3VBcXl3QUZwcGlLZXRVQkJiWHdZc1lVMXdOcjY0OFhWbVBtQ01DeTRyWTh2ZGxpRm5iTVVqMDg2RFU2Wisvb1hCZFdVMy9iMUcwRE4zRTl3VUxSU3djS1pUM3dqL2NDSTF2c0NtM2dqMlI1U3FrQTlZMENBd0VBQVFLQmdBSkgrNEN4VjAvekJWY0xpQkNIdlNBTm0wbDdIZXR5YlRoL2oycDBZMXNUWHJvNEFMd0FhQ1RVZXFkQmpXaUxTbzlsTndESEZ5cTh6WDkwK2dOeGE3YzVFcWNXVjlGbWxWWHI4VmhmQnpjWm8xblhlTmRYRlQ3dFEyeWFoL29kdGRjeCt2Uk1TR0pkMXQvNWs1YkRkOXdBdllkSURibE1BZyt3aUtLWjVLY2RBa0VBMWNDYWtFTjROZXhrRjV0SFBSclI2WE9ZL1hIZmtxWHhFaE1xbU5iQjlVMzRzYVRKbkxXSUhDOElYeXM2UW16ejMwVHR6Q2p1T3FLUlJ5K0ZNTTRUZHdKQkFKUVpGUGpzR0MrUnFjRzVVdlZNaU1QaG53ZS9iWEVlaFNoSzg2eUpLL2cvVWlLck84N2gzYUV1NWdjSnFCeWdUcTNCQkJvSDJtZDNwci9XK2hVTVdCc0NRUUNoZmhUSXJkRGluS2k2bFJ4cmRCbm4wT2hqZzJjd3VxSzV6elU5cC9OK1M5eDdDazh3VUk1M0RLbThqVUpFOFdBRzdXTGovb0NPV0VoK2ljNk5Jd1RkQWtFQWowWDhuaHg2QVhzZ0NZUnFsMWtsYnF0Vm1MOCs5NUtaSzdQbkxXRy9JZmpRVXkzcFBHb1NhWjdmZHF1RzhicThveWY1K2R6akUvb1RYY0J5Uys2WFJRSkFQLzVjaXkxYkwzTmhVaHNhT1Z5NTVNSFhuUGpkY1RYMEZhTGkreWJYWklmSVEyUDRyYjE5bVZxMWZlTWJDWGh6K0wxckc4b2F0NWxZS2ZwZThrODNaQT09IjsKCiAgICAgICAgZnVuY3Rpb24gZ2V0aHRtbCh1LCBib2R5LCBoZWFkZXJzKSB7CiAgICAgICAgICAgIHZhciBoZCA9IGZldGNoKHUsIHsKICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsCiAgICAgICAgICAgICAgICBib2R5OiBib2R5LAogICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICByZWplY3RDb2Rpbmc6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBiYW5uZXIgPSBKU09OLnBhcnNlKGhkKS5kYXRhOwogICAgICAgICAgICB2YXIgcmVzcG9uc2Vfa2V5ID0gYmFubmVyLnJlc3BvbnNlX2tleTsgLy9sb2coKQogICAgICAgICAgICAvL2NvbnNvbGUubG9nKCJyZXNwb25zZV9rZXk9PSIrcmVzcG9uc2Vfa2V5KQogICAgICAgICAgICB2YXIga2V5cyA9IGJhbm5lci5rZXlzOyAvL2xvZyhrZXlzKQogICAgICAgICAgICB2YXIgYm9keWtleWl2ID0gSlNPTi5wYXJzZShSU0EuZGVjb2RlKGtleXMsIGJvZHlrZXkpKTsKICAgICAgICAgICAgLy9jb25zb2xlLmxvZygicnNheHh4eD09IitKU09OLnN0cmluZ2lmeShib2R5a2V5aXYpKQogICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoYm9keWtleWl2LmtleSk7CiAgICAgICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGJvZHlrZXlpdi5pdik7CiAgICAgICAgICAgIHZhciBodG1sID0gRGVjcnlwdChyZXNwb25zZV9rZXksIGtleSwgaXYpOwogICAgICAgICAgICAvL2NvbnNvbGUubG9nKCJuc2tqc253a2pkbmVqZD09PXFxeHh4cT0iK0pTT04uc3RyaW5naWZ5KGh0bWwpKQogICAgICAgICAgICByZXR1cm4gaHRtbAogICAgICAgIH0KICAgICAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwOwogICAgICAgIHZhciB0ID0gdGltZXN0YW1wLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTsKICAgICAgICB2YXIgdXJsID0gaW5wdXQuc3BsaXQoIiMiKVswXTsgLy91cmwKICAgICAgICB2YXIgcmVxdWVzdF9rZXkxMSA9IGlucHV0LnNwbGl0KCIjIilbMV0KCiAgICAgICAgdmFyIHJlcXVlc3Rfa2V5ID0gSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAia2V5d29yZHMiOiByZXF1ZXN0X2tleTExLAogICAgICAgICAgICAib3JkZXJfdmFsIjogIjEiCiAgICAgICAgfSkKICAgICAgICAvL2NvbnNvbGUubG9nKCJuc2tqc253a2pkbmVqZD09PXFxeHh4cT10dHR0IityZXF1ZXN0X2tleSkKICAgICAgICB2YXIgcmVxdWVzdF9rZXkyID0gRW5jcnlwdChyZXF1ZXN0X2tleSk7CiAgICAgICAgdmFyIGJvZHkgPSBnZXRib2R5MyhyZXF1ZXN0X2tleTIsIHQpCiAgICAgICAgdmFyIGhlYWRlcnMgPSB7CiAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJywKICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjQwNjAyNScsCiAgICAgICAgICAgICdQYWNrYWdlTmFtZSc6ICdjb20udWYwNzZiZjBjMjQ2LnFlNDM5ZjBkNWUubThhYWY1NmI3MjVhLmlmZWI2NDczNDZmJywKICAgICAgICAgICAgJ1Zlcic6ICcxLjkuMicsCiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vYXBpLjh1dGR0Y3EuY29tJywKICAgICAgICAgICAgJ1gtQ3VzdG9tZXItQ2xpZW50LUlwJzogJzEyNy4wLjAuMScsCiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKICAgICAgICAgICAgJ0hvc3QnOiAnYXBpLjh1dGR0Y3EuY29tJywKICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnS2VlcC1BbGl2ZScsCiAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ29raHR0cC8zLjEyLjAnCiAgICAgICAgfQogICAgICAgIHZhciBodG1sID0gZ2V0aHRtbCh1cmwsIGJvZHksIGhlYWRlcnMpCiAgICAgICAgLy9jb25zb2xlLmxvZygibnNranNud2tqZG5lamQ9PT09IitodG1sKQoKICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbCkubGlzdDsgLy9sb2cobGlzdCkKICAgICAgICAvL2NvbnNvbGUubG9nKCJuc2tqc253a2pkbmVqZD09PXFxcXFxPSIrbGlzdCkKICAgICAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7CiAgICAgICAgICAgIGQucHVzaCh7CiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS52b2RfbmFtZSwKICAgICAgICAgICAgICAgIGRlc2M6IGRhdGEudm9kX2NvbnRpbnUgPT0gMCA/ICfnlLXlvbEnIDogJ+abtOaWsOiHsycgKyBkYXRhLnZvZF9jb250aW51ICsgJ+mbhicsCiAgICAgICAgICAgICAgICBjb250ZW50OiBkYXRhLnZvZF9hZGR0aW1lLAogICAgICAgICAgICAgICAgaW1nOiBkYXRhLnZvZF9waWMsCiAgICAgICAgICAgICAgICB1cmw6IGAke2RhdGEudm9kX2lkfS8ke2RhdGEudm9kX2NvbnRpbnV9YCwKICAgICAgICAgICAgfSkKICAgICAgICB9KQogICAgICAgIHNldFJlc3VsdChkKQogICAgfSksCn0=