Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@百度网盘2@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi55m+5bqm572R55uYMiIsImF1dGhvciI6ImR5MjAyMCIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2Z5cGFnZSIsInZlcnNpb24iOjIwMjUwMjE2MTAsImNvbF90eXBlIjoibW92aWVfMyIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidmlkZW8iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczovL2NsZWFySXRlbSgnaGlzdG9yeScpO1xudmFyIGQgPSBbXTtcbi8v5Y6f54mI5L2c6ICFSm9l5L2sLOaVtOWQiFpIQU/lpKfkvazniYjmnKxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XG4gICAgY2xlYXJNeVZhcigncGF0aHMnKTtcbn0pKTtcblxubGV0IGxhc3RUaW1lID0gZ2V0SXRlbSgnZ2V0VGltZScpO1xubGV0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcbnNldEl0ZW0oJ2dldFRpbWUnLCBjdXJyZW50VGltZSArICcnKTtcbmlmIChsYXN0VGltZSA9PSAndW5kZWZpbmVkJyB8fCBjdXJyZW50VGltZSAtIGxhc3RUaW1lID49IDg2NDAwMDAwKSB7XG4gICAgbGV0IHBhdGhHaXRlZSA9ICdodHRwczovL2dpdGVlLmNvbS9taXN0eXdhdGVyL2hpa2VyX2luZm8vcmF3L21hc3Rlci8lRTclOTklQkUlRTUlQkElQTYlRTclQkQlOTElRTclOUIlOTguanNvbic7XG4gICAgbGV0IGh0bWxHaXRlZSA9IGZldGNoUEMocGF0aEdpdGVlKTsgXG4gICAgbGV0IHZlcnNpb24gPSBodG1sR2l0ZWUubWF0Y2goL3ZlcnNpb25cIjooXFxkKykvKVsxXTtcbiAgICBpZiAoTVlfUlVMRS52ZXJzaW9uIDwgdmVyc2lvbikge1xuICAgICAgICBjb25maXJtKHtcbiAgICAgICAgICAgIHRpdGxlOiBcIuacieaWsOeJiOacrFwiLFxuICAgICAgICAgICAgY29udGVudDogJ+WvvOWFpeaWsOeJiOacrOWQlz8nLFxuICAgICAgICAgICAgY29uZmlybSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJydWxlOi8vNXJXMzZaaVU2S2VHNTVXTTZhYVc2YUcxNmFLUjZZR1Q2S2VFNVlpWjQ0Q1E1NW0rNWJxbTU3MlI1NXVZNDRDUjc3K2xhRzl0WlY5eWRXeGxYM1Z5Yk8rL3BXaDBkSEJ6T2k4dloybDBaV1V1WTI5dEwyMXBjM1I1ZDJGMFpYSXZhR2xyWlhKZmFXNW1ieTl5WVhjdmJXRnpkR1Z5TCtlWnZ1VzZwdWU5a2VlYm1DNXFjMjl1XCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FuY2VsKCkge31cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5pZiAoZ2V0SXRlbShcImZpcnN0XCIpICE9IE1ZX1JVTEUudmVyc2lvbikge1xuICAgICQucmVxdWlyZShcIuivtOaYjlwiKTtcbn0gZWxzZSB7XG4gICAgcmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcblxuICAgIGlmIChNWV9QQUdFID09IDEpIHtcbiAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiAn8J+UjScsXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQ9PScnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdwYXRocycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQ9PScgJykge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclZhcigncGF0aHMnKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2tleXdvcmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcigna2V5d29yZCcsIGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2xpc3RzXCIpLnN0b3JlSGlzdG9yeVNlYXJjaChpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvbGlzdHNcIikuY29kZVBhcnNlU2VhcmNoVXJsKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xuICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXG4gICAgICAgICAgICBkZXNjOiAn5YWz6ZSu6K+NfEDlhbPplK7or4185YiG5Lqr6ZO+5o6lfOepuuagvDrmuIXpmaQnLFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdrZXl3b3JkJywgJycpLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiAn6K6+572uJyxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9sb2dpbicsXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICBpZDogJ+iuvue9ridcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChnZXRJdGVtKFwiYWNjZXNzX3Rva2VuXCIpID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJ3Rva2Vu5LiN5a2Y5ZyoLOmcgOimgXRva2Vu55m75b2VJyxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9sb2dpbicsXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGdldEl0ZW0oXCJCRFVTU1wiKSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6ICdjb29raWXkuI3lrZjlnKgs6ZyA6KaB572R6aG155m75b2VJyxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9sb2dpbicsXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGdldEl0ZW0oXCJhY2Nlc3NfdG9rZW5cIikgIT0gJ3VuZGVmaW5lZCcgJiYgZ2V0SXRlbShcIkJEVVNTXCIpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9saXN0c1wiKS5jb2RlTGlzdCgpO1xuICAgIH1cbn1cbnNldFJlc3VsdChkKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjZnlwYWdlIyMqKiIsImdyb3VwIjoi4pGg5o6o6I2QIiwic2VhcmNoRmluZCI6ImpzOlxucmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcblxudmFyIGQgPSBbXTtcbnZhciBrZXkgPSBcIjRPVG9TY1VGT2FlVlRySEVcIjtcbnZhciBpdiA9IFwiOUNMR2FvMXZIS3FtMTdPelwiO1xudmFyIHVybFNlYXJjaCA9ICdodHRwczovL21pYW9zb3UuZnVuL2FwaS9zZWNlbmRzZWFyY2g/bmFtZT0nICsgTVlfVVJMLnNwbGl0KCcjIycpLmF0KC0xKSArICcmcGFnZU5vPScgKyBNWV9QQUdFICsgJyZ0eXBlPSZmcm9tPWJhaWR1JztcbmxvZyh1cmxTZWFyY2gpO1xudmFyIGh0bWwgPSBmZXRjaFBDKHVybFNlYXJjaCk7XG52YXIganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7XG52YXIgbGlzdCA9IGpzb24uZGF0YS5saXN0O1xubGlzdC5mb3JFYWNoKChsaXN0KSA9PiB7XG4gICAgdmFyIHVybCA9IGRlKGtleSwgaXYsIGxpc3QudXJsLCAnQUVTL0NCQy9QS0NTN1BhZGRpbmcnKTtcbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTogbGlzdC5uYW1lLnJlcGxhY2UoLzwuKj8+L2csICcnKSxcbiAgICAgICAgZGVzYzogbGlzdC5nbXRDcmVhdGUgKyBcIiBcIiArIGxpc3QuZnJvbS5yZXBsYWNlKC9hbGkuKi8sICfpmL/ph4zkupHnm5gnKS5yZXBsYWNlKC9iYWlkdS4qLywgJ+eZvuW6pue9keebmCcpLnJlcGxhY2UoL3F1YXJrLiovLCAn5aS45YWL572R55uYJykucmVwbGFjZSgvdWMuKi8sICdVQ+e9keebmCcpLFxuICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgoKSA9PiB7XG4gICAgICAgICAgICBwdXRWYXIoJ3VybEJhaWR1JywgaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuIFwiaGlrZXI6Ly9wYWdlL2xpc3Q/cnVsZT3nmb7luqbnvZHnm5gmcmVhbHVybD1cIiArIGlucHV0O1xuICAgICAgICB9KSxcbiAgICB9KTtcbn0pO1xuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6Ii8qPCQ+XG5AaW5jbHVkZSBzdGFydFxuaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2xvYmFsVmFyLmpzb25cbkBpbmNsdWRlIGVuZFxuPCQ+Ki8iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwidGV4dF8yXCIsXCJuYW1lXCI6XCLorr7nva5cIixcInBhdGhcIjpcImxvZ2luXCIsXCJydWxlXCI6XCJqczpcXG5yYyhmZXRjaFBDKCdodHRwczovL2dpdGVlLmNvbS9taXN0eXdhdGVyL2hpa2VyX2luZm8vcmF3L21hc3Rlci9naXRodWJwcm94eS5qc29uJykgKyAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21pc3R5d2F0ZXIvaGlrZXIvbWFpbi9mJywgMjQpO1xcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHNiKFxcXCJ0b2tlbueZu+W9leWSjOe9kemhteeZu+W9lemDvemcgOimgeeZu+W9lVxcXCIsICdGRjAwMDAnKSxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLojrflj5Z0b2tlblxcXCIsXFxuICAgIHVybDogXFxcImh0dHBzOi8vb3BlbmFwaS5iYWlkdS5jb20vb2F1dGgvMi4wL2F1dGhvcml6ZT9yZXNwb25zZV90eXBlPWNvZGUmY2xpZW50X2lkPWlZQ2VDOWcwOGg1dnVQOVVxdlBIS0tTVnJLRlhHYTF2JnJlZGlyZWN0X3VyaT1odHRwczovL2FsaXN0Lm5uLmNpL3Rvb2wvYmFpZHUvY2FsbGJhY2smc2NvcGU9YmFzaWMsbmV0ZGlzayZxcmNvZGU9MVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIue9kemhteeZu+W9lVxcXCIsXFxuICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIHNldFBhZ2VUaXRsZShcXFwi55m75b2V6LSm5Y+3XFxcIik7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICgpID0+IGNsZWFyTXlWYXIoXFxcImNvb2tpZVxcXCIpKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJznoa7orqTnmbvlvZXigJ3igJ1cXFwiLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBiZHdwX2Nvb2tpZSA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvYmR3cF9jb29raWUudHh0XFxcIikgfHwgXFxcIlxcXCI7IC8vbG9nKGJkd3BfY29va2llKVxcbiAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0ge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiQW5kcm9pZFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3Bhbi5iYWlkdS5jb20vXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBiZHdwX2Nvb2tpZSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8vd2FwcGFzcy5iYWlkdS5jb20vdjMvbG9naW4vYXBpL2F1dGg/bm90anVtcD0xJnJldHVybl90eXBlPTUmdHBsPW5ldGRpc2smdT1odHRwczovL3Bhbi5iYWlkdS5jb20vYnV5L2FkL2hvbWU/dXNlQ2FudmFzPTEmcGF0aG5hbWU9L3NoYXJlX3dhcFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcixcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXFxcIkdFVFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UoaHRtbCkuaGVhZGVycy5sb2NhdGlvblswXTsgLy9sb2codXJsKVxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXIsXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFxcXCJHRVRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHZhciBzZXRjb29raWUgPSBKU09OLnBhcnNlKGh0bWwpLmhlYWRlcnNbXFxcInNldC1jb29raWVcXFwiXS50b1N0cmluZygpOyAvL2xvZyhzZXRjb29raWUpXFxuICAgICAgICAgICAgICAgIGlmIChiZHdwX2Nvb2tpZS5pbmNsdWRlcyhcXFwiQkRVU1M9XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChiZHdwX2Nvb2tpZS5pbmNsdWRlcyhcXFwiQkRVU1M9XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQkRVU1MgPSBiZHdwX2Nvb2tpZS5tYXRjaCgvKEJEVVNTPS4qPyk7LylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKEJEVVNTKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIkJEVVNTXFxcIiwgQkRVU1MpXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coXFxcIkJEVVNT6K6+572u5oiQ5YqfXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXRjb29raWUuaW5jbHVkZXMoXFxcIlNUT0tFTj1cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTVE9LRU4gPSBzZXRjb29raWUubWF0Y2goL1NUT0tFTj1cXFxcdyovKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coU1RPS0VOKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIlNUT0tFTlxcXCIsIFNUT0tFTilcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhcXFwiU1RPS0VO6K6+572u5oiQ5YqfXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLnmbvlvZXmiJDlip9cXFwiKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08c21hbGw+54K55Ye75aS05YOP5Y+v5Lul6YCA5Ye66LSm5Y+36YeN5paw55m75b2VPC9zbWFsbD5cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCB1cmwgPSAnaHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9wYXNzcG9ydD9sb2dpbiZhdXRoc2l0ZT0xJnRwbD1uZXRkaXNrJm92ZXJzZWFzPTEmcmVnZG9tZXN0aWM9MSZzbXNMb2dpbkxpbms9MSZkaXNwbGF5PW1vYmlsZSZ1PWh0dHBzOi8vcGFuLmJhaWR1LmNvbS93YXAvaG9tZT9sb2dpbmZvcm09cGFzcyZyZWFsTmFtZT0xJndhcEJlaGF2aW9yTG9nPXdhcF9jbGlja193ZWxjb21lX2xvZ2luJmJyYW5jaFR5cGU9U01TbG9naW4jL29uZV9rZXlfaDVfbmV3J1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJyxcXG4gICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICBkZXNjOiAnbGlzdCYmc2NyZWVuLTE1MCcsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgdWE6ICdBbmRyb2lkJyxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2soKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvID0gZmJhLmdldENvb2tpZSh1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjby5pbmNsdWRlcygnU1RPS0VOPScpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wYXJzZUxhenlSdWxlKCQkJCgpLmxhenlSdWxlKChjbykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2Jkd3BfY29va2llLnR4dCcsIGNvKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCdDb29raWXojrflj5bmiJDlip/vvIzor7fnoa7orqTnmbvlvZUnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjbykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2soKTtcXG4gICAgICAgICAgICAgICAgfSwgdXJsKVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICB9KTtcXG4gICAgICAgIHNldFJlc3VsdChkKVxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbn0pO1xcbi8vY2xlYXJJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiKVxcbi8vY2xlYXJJdGVtKFxcXCJyZWZyZXNoX3Rva2VuXFxcIilcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcInRva2Vu55m75b2VXFxcIixcXG4gICAgdXJsOiAkKGdldEl0ZW0oJ3JlZnJlc2hfdG9rZW4nKSwgXFxcIuWhq+WGmeiOt+WPluWIsOeahHRva2VuXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbSgncmVmcmVzaF90b2tlbicsIGlucHV0KTtcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vb3BlbmFwaS5iYWlkdS5jb20vb2F1dGgvMi4wL3Rva2VuXFxcIiwge1xcbiAgICAgICAgICAgIFxcXCJncmFudF90eXBlXFxcIjogXFxcInJlZnJlc2hfdG9rZW5cXFwiLFxcbiAgICAgICAgICAgIFxcXCJyZWZyZXNoX3Rva2VuXFxcIjogaW5wdXQsXFxuICAgICAgICAgICAgXFxcImNsaWVudF9pZFxcXCI6IFxcXCJpWUNlQzlnMDhoNXZ1UDlVcXZQSEtLU1ZyS0ZYR2ExdlxcXCIsXFxuICAgICAgICAgICAgXFxcImNsaWVudF9zZWNyZXRcXFwiOiBcXFwialhpRk1PUFZQQ1dsTzJNNUN3V1F6ZmZwTlBhR1RSQkdcXFwiXFxuICAgICAgICB9KSkpO1xcbiAgICAgICAgaWYgKCFyZXMuYWNjZXNzX3Rva2VuKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mUmeivr++8ge+8ge+8gVxcXCJcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuXFxcIiwgcmVzLmFjY2Vzc190b2tlbilcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJyZWZyZXNoX3Rva2VuXFxcIiwgcmVzLnJlZnJlc2hfdG9rZW4pXFxuICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgfVxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiQ29va2ll55m75b2VXFxcIixcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcImNvb2tpZVRtcFxcXCIpLCBcXFwi5aGr5YaZQ29va2llXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmICghaW5wdXQuaW5jbHVkZXMoXFxcIkFBQUFcXFwiKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vQ29va2ll6ZSZ6K+vXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pbmNsdWRlcyhcXFwiQkRVU1M9XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBCRFVTUyA9IGlucHV0Lm1hdGNoKC8oQkRVU1M9Lio/KTsvKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIkJEVVNTXFxcIiwgQkRVU1MpXFxuICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwiQkRVU1Porr7nva7miJDlip9cXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pbmNsdWRlcyhcXFwiU1RPS0VOPVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgU1RPS0VOID0gaW5wdXQubWF0Y2goL1NUT0tFTj1cXFxcdyovKVswXTtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIlNUT0tFTlxcXCIsIFNUT0tFTilcXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCJTVE9LRU7orr7nva7miJDlip9cXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmuIXpmaR0b2tlblxcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICByZXR1cm4gJCgn56Gu6K6k5riF6Zmk5ZCXPycpLmNvbmZpcm0oKCkgPT4ge1xcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwiYWNjZXNzX3Rva2VuXFxcIik7XFxuICAgICAgICAgICAgdG9hc3QoXFxcIuW3sua4hemZpHRva2VuXFxcIik7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0pO1xcbiAgICAgICAgICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIua4hemZpGNvb2tpZVxcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICByZXR1cm4gJCgn56Gu6K6k5riF6Zmk5ZCXPycpLmNvbmZpcm0oKCkgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcImNvb2tpZVRtcFxcXCIsZ2V0SXRlbShcXFwiQkRVU1NcXFwiKSArICc7JyArIGdldEl0ZW0oXFxcIlNUT0tFTlxcXCIpKTtcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcIkJEVVNTXFxcIik7XFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJTVE9LRU5cXFwiKTtcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcIlBUT0tFTlxcXCIpO1xcbiAgICAgICAgICAgIHRvYXN0KFxcXCLlt7LmuIXpmaRjb29raWVcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIumAieaLqeaOpeWPo++8mlxcXCIgKyAoZ2V0SXRlbShcXFwiamtcXFwiLCBcXFwiMFxcXCIpID09IFxcXCIwXFxcIiA/IFxcXCLlrpjmlrnmjqXlj6PvvJrkuI3mmK92aXDkvJrpmZDpgJ/vvIznqLPlrppcXFwiIDogXFxcIueZvuW6pue9keebmFRW5o6l5Y+jXFxcIiksXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHNldEl0ZW0oXFxcImprXFxcIiwgZ2V0SXRlbShcXFwiamtcXFwiLCBcXFwiMFxcXCIpID09IFxcXCIwXFxcIiA/IFxcXCIxXFxcIiA6IFxcXCIwXFxcIilcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLku6PnoIFcIixcInBhdGhcIjpcImNvZGVcIixcInJ1bGVcIjpcIiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcbiAgICBsZXQge1xcbiAgICAgICAgZ2V0SHptXFxuICAgIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9jb2RlJylcXG4gICAgbGV0IHJvb3QgPSAnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvaWNvblN5c3RlbS8nO1xcbiAgICBpZiAoY29udGVudC5pc2RpciA9PSAxKSB7XFxuICAgICAgICBpbWcgPSAnaHR0cHM6Ly9zdGF0aWNzbnMuY2RuLmJjZWJvcy5jb20vYW1pcy8yMDI0LTgvMTcyMjU5MjQwMjk2MC8lRTYlOTYlODclRTQlQkIlQjYlRTUlQTQlQjklMjAoMikucG5nJztcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxldCBmaWxlcyA9ICczZ3B8YWl8YXBlfGFwa3xhdml8YXZpZnxiYXR8Y2htfGNzc3xkbWd8ZG9jfGVwdWJ8ZXhjfGV4ZXxmNHZ8ZmxhY3xmbHZ8Z2lmfGhpa2VyfGh0bXxodG1sfGljb3xpZmZ8aWxibXxpc298amZpZnxqcGV8anBlZ3xqcGd8anN8anNvbnxqeHJ8a3V4fGxvZ3xtM3U4fG00YXxtNHZ8bWt2fG1uZ3xtb3Z8bXAzfG1wNHxtcGVnfG1wZ3xvZ2d8b3B1c3xvdGZ8cGN4fHBkZnxwaHB8cGpwfHBqcGVnfHBtcHxwbmd8cHBtfHBwdHxwc2R8cHNwfHFzdnxyYW18cmFyfHJlZ3xybXxybXZifHNhaXxzdmd8c3Znenxzd2Z8dGFibGV8dGlmfHRpZmZ8dHN8dHRmfHR4dHx1Zm98d2F2fHdlYm18d2VicHx3bXZ8eGJtfHhjZnx4bHN8eGxzeHx4cG18emlwJy5zcGxpdCgnfCcpO1xcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5zZXJ2ZXJfZmlsZW5hbWU7XFxuICAgICAgICBsZXQgaHptID0gZ2V0SHptKGZpbGVOYW1lKTtcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcucG5nJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArICfmlofku7YucG5nJ1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBpbWdcXG59XFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxuICAgIHZhciBleHQgPSAoZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKSkudG9Mb3dlckNhc2UoKTtcXG4gICAgaWYgKC9eclxcXFxkK3xeN3ovaS50ZXN0KGV4dCkpIHtcXG4gICAgICAgIGV4dCA9ICdyYXInO1xcbiAgICB9IGVsc2UgaWYgKC9ebWQvaS50ZXN0KGV4dCkpIHtcXG4gICAgICAgIGV4dCA9ICdpc28nO1xcbiAgICB9IGVsc2UgaWYgKC9ebWQvaS50ZXN0KGV4dCkpIHtcXG4gICAgICAgIGV4dCA9ICdpc28nO1xcbiAgICB9IGVsc2UgaWYgKC9eaHR8bWh0L2kudGVzdChleHQpKSB7XFxuICAgICAgICBleHQgPSAnaHRtbCc7XFxuICAgIH0gZWxzZSBpZiAoL154bHxeZXQvaS50ZXN0KGV4dCkpIHtcXG4gICAgICAgIGV4dCA9ICd4bHN4JztcXG4gICAgfSBlbHNlIGlmICgvXmxvZ3xebHJjL2kudGVzdChleHQpKSB7XFxuICAgICAgICBleHQgPSAndHh0JztcXG4gICAgfSBlbHNlIGlmICgvXigzZ3B8YXZpfGY0dnxmbHZ8a3V4fG0zdTh8bTR2fG1rdnxtb3Z8bXA0fG1wZWd8bXBnfHBtcHxxc3Z8cmFtfHJtfHJtdmJ8c3dmfHRzfHdlYm18d212KS9pLnRlc3QoZXh0KSkge1xcbiAgICAgICAgZXh0ID0gJ21rdic7XFxuICAgIH1cXG4gICAgcmV0dXJuIGV4dDtcXG59XFxuJC5leHBvcnRzLmdldExpbmsgPSBmdW5jdGlvbihleHQsIGlkLCBwYXRoLCBpbWcpIHtcXG4gICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGV4dCwgaWQsIHBhdGgsIGltZykgPT4ge1xcbiAgICAgICAgbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKCdoaXN0b3J5JywgW10pO1xcbiAgICAgICAgbGV0IGRhdGFQYXRoPWAke3BhdGh9QEAke2lkfUBAJHtleHR9QEAke2ltZ31gO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGlzdG9yeS5pbmNsdWRlcyhkYXRhUGF0aCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoKGRhdGFQYXRoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnaGlzdG9yeScsIGhpc3RvcnkpO1xcbiAgICAgICAgaWYgKC9zaGFyZS8udGVzdChKU09OLnN0cmluZ2lmeShwYXRoKSkgJiYgZXh0ID09ICdtb3ZpZScpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gZ2V0VmFyKCd1cmxCYWlkdScpIHx8IGdldFZhcigna2V5d29yZCcpO1xcbiAgICAgICAgICAgIHZhciB1ayA9IGdldFZhcignc2hhcmVfdWsnKTtcXG4gICAgICAgICAgICB2YXIgc2hhcmVpZCA9IGdldFZhcignc2hhcmVfaWQnKTtcXG4gICAgICAgICAgICB2YXIgZnNfaWQgPSBpZDtcXG4gICAgICAgICAgICB2YXIganNUb2tlbiA9IGdldFZhcignanNUb2tlbicpO1xcblxcbiAgICAgICAgICAgIHZhciBzdXJsID0gdXJsLnJlcGxhY2UoL1xcXFw/cHdkPS4qLywgJycpLm1hdGNoKC9cXFxcL3NcXFxcLyguKikvKVsxXTtcXG4gICAgICAgICAgICB2YXIgaGVhZGVyID0ge1xcbiAgICAgICAgICAgICAgICAnQ29va2llJzogZ2V0VmFyKCdjaycpLFxcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI2LjAuMC4wIFNhZmFyaS81MzcuMzYnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciB1cmwzMSA9ICdodHRwczovL3Bhbi5iYWlkdS5jb20vc2hhcmUvdHBsY29uZmlnP3N1cmw9JyArIHN1cmwgKyAnJmZpZWxkcz1jZnJvbV9pZCxFc3BhY2VfaW5mbyxjYXJkX2luZm8sc2lnbix0aW1lc3RhbXAnXFxuICAgICAgICAgICAgdmFyIGh0bWwzMSA9IHJlcXVlc3QodXJsMzEsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIGh0bWwzMiA9IEpTT04ucGFyc2UoaHRtbDMxKS5kYXRhO1xcbiAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBodG1sMzIudGltZXN0YW1wO1xcbiAgICAgICAgICAgIHZhciBzaWduID0gaHRtbDMyLnNpZ247XFxuICAgICAgICAgICAgdmFyIHBsYXk0ODAgPSAnaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3NoYXJlL3N0cmVhbWluZz91az0nICsgdWsgKyAnJmZpZD0nICsgZnNfaWQgKyAnJnNpZ249JyArIHNpZ24gKyAnJnRpbWVzdGFtcD0nICsgdGltZXN0YW1wICsgJyZzaGFyZWlkPScgKyBzaGFyZWlkICsgJyZ0eXBlPU0zVThfQVVUT180ODAmanNUb2tlbj0nICsganNUb2tlbjtcXG4gICAgICAgICAgICBsb2cocGxheTQ4MCk7XFxuICAgICAgICAgICAgdmFyIHBsYXk3MjAgPSAnaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3NoYXJlL3N0cmVhbWluZz91az0nICsgdWsgKyAnJmZpZD0nICsgZnNfaWQgKyAnJnNpZ249JyArIHNpZ24gKyAnJnRpbWVzdGFtcD0nICsgdGltZXN0YW1wICsgJyZzaGFyZWlkPScgKyBzaGFyZWlkICsgJyZ0eXBlPU0zVThfQVVUT183MjAmanNUb2tlbj0nICsganNUb2tlbjtcXG4gICAgICAgICAgICB2YXIgcGxheTEwODAgPSAnaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3NoYXJlL3N0cmVhbWluZz91az0nICsgdWsgKyAnJmZpZD0nICsgZnNfaWQgKyAnJnNpZ249JyArIHNpZ24gKyAnJnRpbWVzdGFtcD0nICsgdGltZXN0YW1wICsgJyZzaGFyZWlkPScgKyBzaGFyZWlkICsgJyZ0eXBlPU0zVThfQVVUT18xMDgwJmpzVG9rZW49JyArIGpzVG9rZW47XFxuICAgICAgICAgICAgdmFyIHBsYXkySyA9ICdodHRwczovL3Bhbi5iYWlkdS5jb20vc2hhcmUvc3RyZWFtaW5nP3VrPScgKyB1ayArICcmZmlkPScgKyBmc19pZCArICcmc2lnbj0nICsgc2lnbiArICcmdGltZXN0YW1wPScgKyB0aW1lc3RhbXAgKyAnJnNoYXJlaWQ9JyArIHNoYXJlaWQgKyAnJnR5cGU9TTNVOF9BVVRPXzJLJmpzVG9rZW49JyArIGpzVG9rZW47XFxuICAgICAgICAgICAgdmFyIHBsYXk0SyA9ICdodHRwczovL3Bhbi5iYWlkdS5jb20vc2hhcmUvc3RyZWFtaW5nP3VrPScgKyB1ayArICcmZmlkPScgKyBmc19pZCArICcmc2lnbj0nICsgc2lnbiArICcmdGltZXN0YW1wPScgKyB0aW1lc3RhbXAgKyAnJnNoYXJlaWQ9JyArIHNoYXJlaWQgKyAnJnR5cGU9TTNVOF9BVVRPXzRLJmpzVG9rZW49JyArIGpzVG9rZW47XFxuXFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgdXJsczogW3BsYXkxMDgwLCBwbGF5NEssIHBsYXkySywgcGxheTcyMCwgcGxheTQ4MCArICcjaXNWaWRlbz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICBuYW1lczogWycxMDgwUCcsICc0SycsICcySycsICc3MjBQJywgJzQ4MFAnXSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczogW2hlYWRlciwgaGVhZGVyLCBoZWFkZXIsIGhlYWRlciwgaGVhZGVyXVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGVsc2UgaWYgKC9zaGFyZS8udGVzdChKU09OLnN0cmluZ2lmeShwYXRoKSkpIHtcXG5cXG4gICAgICAgIH0gZWxzZSBpZiAoIS9zaGFyZS8udGVzdChKU09OLnN0cmluZ2lmeShwYXRoKSkgfHwgZXh0ICE9ICdpbWcnKSB7XFxuICAgICAgICAgICAgLy9jbGVhckl0ZW0oJ2prJyk7XFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2prJywgJzAnKSA9PSAnMScmJmV4dCA9PSAnbW92aWUnKSB7XFxuICAgICAgICAgICAgICAgIC8v5pKt5pS+5o6l5Y+j5p2l6Ieq55m+5bqm572R55uYVFZcXG4gICAgICAgICAgICAgICAgdmFyIGJkdHZtID0gcmVxdWVzdCgnaHR0cHM6Ly9wYW4uYmFpZHUuY29tL2FwaS9tZWRpYWluZm8/dHlwZT1NM1U4X0ZMVl8yNjRfNDgwJnBhdGg9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXRoKSArICcmY2xpZW50dHlwZT04MCZvcmlnaW49ZGxuYScsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29va2llJzogZ2V0SXRlbShcXFwiQkRVU1NcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICduZXRkaXNrOzEuNC4yOzIyMDIxMjExUkM7YW5kcm9pZC1hbmRyb2lkOzEyO0pTYnJpZGdlNC40LjA7am9pbnRCcmlkZ2U7MS4xLjA7J1xcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCdcXG4gICAgICAgICAgICAgICAgfSk7IC8vbG9nKGJkdHZtKVxcbiAgICAgICAgICAgICAgICB2YXIgcmVzdHZtID0gSlNPTi5wYXJzZShiZHR2bSkuaW5mby5kbGluazsgLy9sb2cocmVzdHZtKTtcXG4gICAgICAgICAgICAgICAgbGV0IHVybDIgPSByZXF1ZXN0KHJlc3R2bSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIm5ldGRpc2s7MS40LjI7MjIwMjEyMTFSQzthbmRyb2lkLWFuZHJvaWQ7MTI7SlNicmlkZ2U0LjQuMDtqb2ludEJyaWRnZTsxLjEuMDtcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSYW5nZVxcXCI6IFxcXCJieXRlcz0wLTBcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcXG4gICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgIH0pOyAvL2xvZyh1cmwyKVxcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gSlNPTi5wYXJzZSh1cmwyKS51cmxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBzdGFydFByb3h5U2VydmVyKCQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGJhc2U2NERlY29kZShNWV9QQVJBTVMudXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKFxcXCLmiJHlnKjku6PnkIZcXFwiICsgdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogMzAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkxvY2F0aW9uXFxcIjogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1ICsgXFxcIj91cmw9XFxcIiArIGJhc2U2NEVuY29kZSh1cmwpICsgXFxcIiNpc1ZpZGVvPXRydWUjI2Zhc3RQbGF5TW9kZSMjdGhyZWFkcz0xMCNcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwibmV0ZGlzazsxLjQuMjsyMjAyMTIxMVJDO2FuZHJvaWQtYW5kcm9pZDsxMjtKU2JyaWRnZTQuNC4wO2pvaW50QnJpZGdlOzEuMS4wO1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBidWlsZFVybCgnaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vbXVsdGltZWRpYScsIHtcXG4gICAgICAgICAgICAgICAgICAgICdhY2Nlc3NfdG9rZW4nOiBnZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKSxcXG4gICAgICAgICAgICAgICAgICAgICdtZXRob2QnOiAnZmlsZW1ldGFzJyxcXG4gICAgICAgICAgICAgICAgICAgICdmc2lkcyc6IGBbJHtpZH1dYCxcXG4gICAgICAgICAgICAgICAgICAgICdkbGluayc6ICcxJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ3Bhbi5iYWlkdS5jb20nXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZShodG1sKS5saXN0WzBdLmRsaW5rICsgJyZhY2Nlc3NfdG9rZW49JyArIGdldEl0ZW0oJ2FjY2Vzc190b2tlbicpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkVXJsKCdodHRwczovL3Bhbi5iYWlkdS5jb20vcmVzdC8yLjAveHBhbi9tdWx0aW1lZGlhJywge1xcbiAgICAgICAgICAgICAgICAnYWNjZXNzX3Rva2VuJzogZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJyksXFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiAnZmlsZW1ldGFzJyxcXG4gICAgICAgICAgICAgICAgJ2ZzaWRzJzogYFske2lkfV1gLFxcbiAgICAgICAgICAgICAgICAnZGxpbmsnOiAnMSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ3Bhbi5iYWlkdS5jb20nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZShodG1sKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChleHQgPT0gJ21vdmllJykge1xcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMgKyAnI2lzVmlkZW89dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAncGFuLmJhaWR1LmNvbSdcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gJ21wMycpIHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBidWlsZFJlc3BvbnNlKHJlcywgbHlyaWMpIHtcXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbcmVzICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAncGFuLmJhaWR1LmNvbSdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgaWYgKGx5cmljKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5seXJpYyA9IGx5cmljO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXNwb25zZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvbnN0IF9saXN0aWQgPSBwYXRoLnJlcGxhY2UoL1xcXFwvW15cXFxcL10rJC8sIFxcXCIvXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgX2xpc3QgPSBzdG9yYWdlMC5nZXRWYXIoX2xpc3RpZCk7XFxuICAgICAgICAgICAgaWYgKF9saXN0ICYmIF9saXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLnNwbGl0KCcvJykuYXQoLTEpLnJlcGxhY2UoL1xcXFwubXAzJC8sICcubHJjJyk7XFxuICAgICAgICAgICAgICAgIGxldCBmc19pZDtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaXRlbSBvZiBfbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2VydmVyX2ZpbGVuYW1lID09PSBmaWxlbmFtZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzX2lkID0gaXRlbS5mc19pZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoZnNfaWQpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybGx5cmljID0gYnVpbGRVcmwoJ2h0dHBzOi8vcGFuLmJhaWR1LmNvbS9yZXN0LzIuMC94cGFuL211bHRpbWVkaWEnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2FjY2Vzc190b2tlbic6IGdldEl0ZW0oJ2FjY2Vzc190b2tlbicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXRob2QnOiAnZmlsZW1ldGFzJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnZnNpZHMnOiBgWyR7ZnNfaWR9XWAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RsaW5rJzogJzEnXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0bWxseXJpYyA9IHJlcXVlc3QodXJsbHlyaWMsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ3Bhbi5iYWlkdS5jb20nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNseXJpYyA9IEpTT04ucGFyc2UoaHRtbGx5cmljKS5saXN0WzBdLmRsaW5rICsgJyZhY2Nlc3NfdG9rZW49JyArIGdldEl0ZW0oJ2FjY2Vzc190b2tlbicpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHR4dGx5cmljID0gZmV0Y2hQQyhyZXNseXJpYyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoL++/vS8udGVzdCh0eHRseXJpYykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eHRseXJpYyA9IGZldGNoUEMocmVzbHlyaWMsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdjaGFyc2V0PUdCMjMxMidcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC/vv70vLnRlc3QodHh0bHlyaWMpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHh0bHlyaWMgPSBmZXRjaFBDKHJlc2x5cmljLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnY2hhcnNldD1HQksnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidWlsZFJlc3BvbnNlKHJlcywgdHh0bHlyaWMpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBidWlsZFJlc3BvbnNlKHJlcyk7XFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSAnbHJjJykge1xcbiAgICAgICAgICAgIHJldHVybiByZXM7XFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSAnYXVkaW8nKSB7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgdXJsczogW3JlcyArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdwYW4uYmFpZHUuY29tJ1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSAnaW1nJykge1xcbiAgICAgICAgICAgIC8vaWYgKHR5cGVvZihyZXMpICE9ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgICAgLy8gICAgcmV0dXJuICdwaWNzOi8vJyArIHJlcyArIGAjLmpwZzt7VXNlci1BZ2VudEBwYW4uYmFpZHUuY29tfWBcXG4gICAgICAgICAgICAvL30gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICdwaWNzOi8vJyArIGltZy5yZXBsYWNlKC9jXFxcXGQrX3VcXFxcZCsvLCAnYzMwMDBfdTIwMDAnKTtcXG4gICAgICAgICAgICAvL31cXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09ICd0eHQnKSB7XFxuICAgICAgICAgICAgdmFyIGxhenkgPSAkKCcjcmVhZFRoZW1lIycpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICBkb3dubG9hZEZpbGUoTVlfVVJMLCAnaGlrZXI6Ly9maWxlcy9jYWNoZS90bXAudHh0Jyk7XFxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdG1wLnR4dCcpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEucmVwbGFjZSgvKOOAgOOAgHwgICAgKS9nLCAnPHA+44CA44CAJyksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTaXplOiAxOCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHJlcyArIGxhenk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgcmVzICsgYDt7VXNlci1BZ2VudEBwYW4uYmFpZHUuY29tfWA7XFxuICAgICAgICB9XFxuICAgIH0sIGV4dCwgaWQsIHBhdGgsIGltZyk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwibGlzdFwiLFwicGF0aFwiOlwibGlzdFwiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJWYXIoJ3VybEJhaWR1JylcXG4gICAgY2xlYXJWYXIoJ3BhdGhzJyk7XFxuICAgIGNsZWFyVmFyKCdyZWFsdXJsJyk7XFxuXFxufSkpO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxudmFyIGQgPSBbXTtcXG50cnkge1xcbiAgICBpZiAoZ2V0VmFyKCdyZWFsdXJsJykpIHtcXG4gICAgICAgIE1ZX1VSTCA9IGdldFZhcigncmVhbHVybCcpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgTVlfVVJMID0gTVlfVVJMLnNwbGl0KCdyZWFsdXJsPScpWzFdLnJlcGxhY2UoL2hpa2VyLio/IyMvLCAnJyk7XFxuICAgICAgICBsb2coTVlfVVJMKTtcXG4gICAgICAgIGV2YWwoJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbGlzdHNcXFwiKS5jb2RlU2hhcmUpO1xcbiAgICAgICAgcHV0VmFyKCdyZWFsdXJsJywgTVlfVVJMKTtcXG4gICAgfVxcbiAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9saXN0cz9ydWxlPeeZvuW6pue9keebmFxcXCIpLmNvZGVMaXN0KCk7XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB0b2FzdCgn6ZO+5o6l6ZSZ6K+v5oiW6ICF5YiG5Lqr5bey5aSx5pWIIScpXFxufVxcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueZvuW6puS4i+i9veWZqFwiLFwicGF0aFwiOlwiQmFpZHVNdWx0aVRocmVhZGVkRG93bmxvYWRlclwiLFwicnVsZVwiOlwiLy9ieSBMb3lEZ0lrIOS9rFxcbmNvbnN0IEZpbGVzID0gamF2YS5uaW8uZmlsZS5GaWxlcztcXG5jb25zdCBQYXRocyA9IGphdmEubmlvLmZpbGUuUGF0aHM7XFxuY29uc3QgQnVmZmVyZWRJbnB1dFN0cmVhbSA9IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbVxcbmNvbnN0IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtID0gamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbVxcbmNvbnN0IEZpbGVPdXRwdXRTdHJlYW0gPSBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07XFxuLy9jb25zdCBqYXZhLnV0aWwuQXJyYXlMaXN0O1xcbi8vY29uc3QgamF2YS51dGlsLkxpc3Q7XFxuY29uc3QgRXhlY3V0b3JTZXJ2aWNlID0gamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlO1xcbmNvbnN0IEV4ZWN1dG9ycyA9IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycztcXG5jb25zdCBUaW1lVW5pdCA9IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0XFxuY29uc3QgUnVubmFibGUgPSBqYXZhLmxhbmcuUnVubmFibGU7XFxuY29uc3QgQXRvbWljQm9vbGVhbiA9IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuO1xcbmNvbnN0IFVSTCA9IGphdmEubmV0LlVSTDtcXG5jb25zdCBMb25nID0gamF2YS5sYW5nLkxvbmc7XFxuXFxuY29uc3QgT2tHbyA9IGNvbS5senkub2tnby5Pa0dvO1xcbmNvbnN0IEh0dHBzVXRpbHMgPSBjb20ubHp5Lm9rZ28uaHR0cHMuSHR0cHNVdGlscztcXG5jb25zdCBBcnJheXMgPSBqYXZhLnV0aWwuQXJyYXlzO1xcbmNvbnN0IENvbXBhcmF0b3IgPSBqYXZhLnV0aWwuQ29tcGFyYXRvcjtcXG5jb25zdCBCVUZGRVJfU0laRSA9IDQwOTY7XFxuY29uc3QgRmlsZSA9IGphdmEuaW8uRmlsZTtcXG5jb25zdCBUaHJlYWQgPSBqYXZhLmxhbmcuVGhyZWFkO1xcbmNvbnN0IFJhbmRvbUFjY2Vzc0ZpbGUgPSBqYXZhLmlvLlJhbmRvbUFjY2Vzc0ZpbGU7XFxuY29uc3QgT2tIdHRwQ2xpZW50ID0gUGFja2FnZXMub2todHRwMy5Pa0h0dHBDbGllbnQ7XFxuY29uc3QgRmlsZUlucHV0U3RyZWFtID0gamF2YS5pby5GaWxlSW5wdXRTdHJlYW07XFxuLyoqXFxuICog5L2/55So5aSa57q/56iL5YiG5Z2X5LiL6L295paH5Lu277yM5pSv5oyB6Ieq5a6a5LmJIEhlYWRlcnPvvIzlubblsIbliIblnZflhYjlhpnlhaXkuLTml7bmlofku7bvvIzlho3lkIjlubbjgIJcXG4gKlxcbiAqIEBwYXJhbSB1cmwgICAgICAgICDmlofku7bkuIvovb3lnLDlnYBcXG4gKiBAcGFyYW0gb3V0cHV0UGF0aCAg5paH5Lu25pyA57uI5L+d5a2Y6Lev5b6EXFxuICogQHBhcmFtIGNodW5rU2l6ZSAgIOavj+S4que6v+eoi+S4i+i9veeahOWIhuWdl+Wkp+Wwj++8iOWNleS9je+8muWtl+iKgu+8iVxcbiAqIEBwYXJhbSB0aHJlYWRDb3VudCDkuIvovb3kvb/nlKjnmoTnur/nqIvmlbBcXG4gKiBAcGFyYW0gcmV0cnlDb3VudCAg5q+P5Liq5YiG5Z2X5LiL6L295aSx6LSl55qE5pyA5aSn6YeN6K+V5qyh5pWwXFxuICogQHBhcmFtIGhlYWRlcnMgICAgIOmcgOimgea3u+WKoOWIsOivt+axguS4reeahOiHquWumuS5ieivt+axguWktO+8iOWPr+S4uiBudWxsIOihqOekuuS4jemcgOimge+8iVxcbiAqL1xcbmZ1bmN0aW9uIGRvd25sb2FkRmlsZShcXG4gICAgdXJsLFxcbiAgICBvdXRwdXRQYXRoLFxcbiAgICBmaWxlbmFtZSxcXG4gICAgY29uZmlnXFxuKSB7XFxuICAgIGxldCB7XFxuICAgICAgICBjaHVua1NpemUsXFxuICAgICAgICB0aHJlYWRDb3VudCxcXG4gICAgICAgIHJldHJ5Q291bnQsXFxuICAgICAgICBoZWFkZXJzXFxuICAgIH0gPSBjb25maWcgfHwge307XFxuICAgIGxldCBoZWFkID0gaGVhZGVycyB8fCB7fTtcXG4gICAgY2h1bmtTaXplID0gY2h1bmtTaXplIHx8IDIgKiAxMDI0ICogMTAyNDtcXG4gICAgdGhyZWFkQ291bnQgPSB0aHJlYWRDb3VudCB8fCA0O1xcbiAgICByZXRyeUNvdW50ID0gcmV0cnlDb3VudCB8fCAzO1xcbiAgICBoZWFkZXJzID0gbmV3IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwKCk7XFxuICAgIGZvciAobGV0IGsgaW4gaGVhZCkge1xcbiAgICAgICAgaGVhZGVycy5wdXQoaywgaGVhZFtrXSk7XFxuICAgIH1cXG4gICAgbGV0IGV4ZWN1dG9yU2VydmljZSA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2wodGhyZWFkQ291bnQpO1xcbiAgICBsZXQgZnV0dXJlcyA9IFtdXFxuICAgIGxldCBkb3dubG9hZEZhaWxlZCA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTtcXG4gICAgbGV0IGZpbGVTaXplO1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IGZpbGVpbmZvID0gZ2V0RmlsZUluZm8odXJsLCBoZWFkKTtcXG4gICAgICAgIGZpbGVTaXplID0gZmlsZWluZm8uc2l6ZTtcXG4gICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUgfHwgZmlsZWluZm8ubmFtZSB8fCBtZDUodXJsKTtcXG4gICAgICAgIGlmICghZmlsZVNpemUgfHwgTnVtYmVyLmlzTmFOKGZpbGVTaXplKSkge1xcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxcXCLmlofku7blpKflsI/ojrflj5blpLHotKVcXFwiKTtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKFxcXCLojrflj5bmlofku7blpKflsI/lpLHotKU6IFxcXCIgKyBlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgZXhlY3V0b3JTZXJ2aWNlLnNodXRkb3duTm93KCk7XFxuICAgICAgICByZXR1cm47XFxuICAgIH1cXG4gICAgaWYgKGZpbGVTaXplIDw9IDApIHtcXG4gICAgICAgIGxvZyhcXFwi5peg5rOV6I635Y+W5paH5Lu25aSn5bCP5oiW5paH5Lu25aSn5bCP5Li6MO+8jOS4i+i9vee7iOatouOAglxcXCIpO1xcbiAgICAgICAgZXhlY3V0b3JTZXJ2aWNlLnNodXRkb3duTm93KCk7XFxuICAgICAgICByZXR1cm47XFxuICAgIH1cXG4gICAgb3V0cHV0UGF0aCA9IG91dHB1dFBhdGggKyBcXFwiL1xcXCIgKyBmaWxlbmFtZTtcXG5cXG4gICAgbGV0IHRlbXBEaXIgPSBuZXcgRmlsZShvdXRwdXRQYXRoICsgXFxcIi50bXBcXFwiKTtcXG4gICAgaWYgKCF0ZW1wRGlyLmV4aXN0cygpKSB7XFxuICAgICAgICB0ZW1wRGlyLm1rZGlyKCk7XFxuICAgIH1cXG5cXG4gICAgbGV0IGNodW5rQ291bnQgPSBNYXRoLmNlaWwoZmlsZVNpemUgLyBjaHVua1NpemUpO1xcbiAgICBsZXQgb2Zmc2V0ID0gMDtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua0NvdW50OyBpKyspIHtcXG4gICAgICAgIC8vIOi1t+Wni+S9jee9rlxcbiAgICAgICAgbGV0IHN0YXJ0ID0gb2Zmc2V0O1xcbiAgICAgICAgLy8g57uT5p2f5L2N572u77yI5pyA5ZCO5LiA5Liq57q/56iL5Y+v6IO95YiwIGZpbGVTaXplIC0gMSDvvIlcXG4gICAgICAgIGxldCBlbmQgPSAoaSA9PSBjaHVua0NvdW50IC0gMSkgPyAoZmlsZVNpemUgLSAxKSA6IChvZmZzZXQgKyBjaHVua1NpemUgLSAxKTtcXG4gICAgICAgIG9mZnNldCA9IGVuZCArIDE7XFxuXFxuXFxuICAgICAgICBsZXQgdGVtcEZpbGUgPSBuZXcgRmlsZSh0ZW1wRGlyLCBcXFwiY2h1bmtfXFxcIiArIHN0YXJ0ICsgXFxcIl9cXFwiICsgZW5kICsgXFxcIi50bXBcXFwiKTtcXG5cXG5cXG4gICAgICAgIGxldCBmaW5hbFN0YXJ0ID0gc3RhcnQ7XFxuICAgICAgICBsZXQgZmluYWxFbmQgPSBlbmQ7XFxuICAgICAgICBsZXQgZmluYWxUZW1wRmlsZSA9IHRlbXBGaWxlO1xcblxcbiAgICAgICAgbGV0IGZ1dHVyZSA9IGV4ZWN1dG9yU2VydmljZS5zdWJtaXQobmV3IFJ1bm5hYmxlKCgpID0+IHtcXG4gICAgICAgICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XFxuXFxuICAgICAgICAgICAgd2hpbGUgKCFkb3dubG9hZEZhaWxlZC5nZXQoKSAmJiBhdHRlbXB0cyA8IHJldHJ5Q291bnQgJiYgIXN1Y2Nlc3MpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkQ2h1bmsodXJsLCBmaW5hbFN0YXJ0LCBmaW5hbEVuZCwgZmluYWxUZW1wRmlsZSwgaGVhZGVycyk7XFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMrKztcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhcXFwi57q/56iLIFxcXCIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIiDkuIvovb3liIblnZcgW1xcXCIgKyBmaW5hbFN0YXJ0ICsgXFxcIiAtIFxcXCIgKyBmaW5hbEVuZCArIFxcXCJdIOWksei0pe+8jOmHjeivlSBcXFwiICtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0cyArIFxcXCIvXFxcIiArIHJldHJ5Q291bnQgKyBcXFwi77yM5Y6f5Zug77yaXFxcIiArIGUudG9TdHJpbmcoKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ZW1wdHMgPj0gcmV0cnlDb3VudCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOagh+iusOaVtOS4quS4i+i9vei/h+eoi+Wksei0pVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkLnNldCh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmipvlh7rlvILluLjvvIznu4jmraLlvZPliY3ku7vliqFcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIue6v+eoiyBcXFwiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiIOi2heWHuuacgOWkp+mHjeivleasoeaVsO+8jOS4i+i9veWksei0peOAgkVycm9yOlxcXCIgKyBlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfSkpO1xcbiAgICAgICAgZnV0dXJlcy5wdXNoKGZ1dHVyZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIGZvciAobGV0IGYgb2YgZnV0dXJlcykge1xcbiAgICAgICAgICAgIGYuZ2V0KCk7IC8vIOWmguaenOacieW8guW4uO+8jOS8muWcqOi/memHjOaKm+WHulxcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBsb2coXFxcIuaJp+ihjOS4i+i9veS7u+WKoeaXtuWHuueOsOW8guW4uDogXFxcIiArIGUudG9TdHJpbmcoKSk7XFxuICAgICAgICBkb3dubG9hZEZhaWxlZC5zZXQodHJ1ZSk7XFxuICAgIH0gZmluYWxseSB7XFxuICAgICAgICAvLyDlhbPpl63nur/nqIvmsaBcXG4gICAgICAgIGV4ZWN1dG9yU2VydmljZS5zaHV0ZG93bk5vdygpO1xcbiAgICB9XFxuXFxuICAgIC8vIOWQiOW5tuWIhuWdl+aWh+S7tlxcbiAgICBpZiAoIWRvd25sb2FkRmFpbGVkLmdldCgpKSB7XFxuICAgICAgICBtZXJnZUNodW5rcyh0ZW1wRGlyLCBvdXRwdXRQYXRoKTtcXG4gICAgICAgIC8vIOWIoOmZpOS4tOaXtuaWh+S7tuWkueWPiuWFtuS4reeahOaWh+S7tlxcbiAgICAgICAgZGVsZXRlVGVtcEZpbGVzKHRlbXBEaXIpO1xcbiAgICAgICAgbG9nKFxcXCLmlofku7bkuIvovb3lubblkIjlubblrozmiJDvvIzkv53lrZjot6/lvoTvvJpcXFwiICsgb3V0cHV0UGF0aCk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDlpoLmnpzkuIvovb3lpLHotKXvvIzmuIXnqbrkuLTml7bnm67lvZVcXG4gICAgICAgIGRlbGV0ZVRlbXBGaWxlcyh0ZW1wRGlyKTtcXG4gICAgICAgIGxvZyhcXFwi5LiL6L295aSx6LSl77yM5Li05pe25paH5Lu25bey5Yig6Zmk44CCXFxcIik7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZ2V0RmlsZUluZm8odXJsLCBoZWFkZXJzKSB7XFxuICAgIGxldCBoZWFkID0gSlNPTi5wYXJzZShmZXRjaCh1cmwsIHtcXG4gICAgICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oe30sIGhlYWRlcnMpLFxcbiAgICAgICAgb25seUhlYWRlcnM6IHRydWUsXFxuICAgICAgICBtZXRob2Q6IFxcXCJIRUFEXFxcIlxcbiAgICB9KSkuaGVhZGVycztcXG4gICAgT2JqZWN0LmtleXMoaGVhZCkuZm9yRWFjaCh2ID0+IHtcXG4gICAgICAgIGhlYWRbdl0gPSBoZWFkW3ZdWzBdO1xcbiAgICB9KTtcXG4gICAgbGV0IGZpbGVpbmZvID0ge1xcbiAgICAgICAgbWQ1OiBoZWFkW1xcXCJjb250ZW50LW1kNVxcXCJdLFxcbiAgICAgICAgc2l6ZTogTnVtYmVyKGhlYWRbXFxcIngtYnMtZmlsZS1zaXplXFxcIl0gfHwgaGVhZFtcXFwiY29udGVudC1sZW5ndGhcXFwiXSksXFxuICAgICAgICBuYW1lOiAvZmlsZW5hbWU9XFxcIiguKj8pXFxcIi8udGVzdChoZWFkW1xcXCJjb250ZW50LWRpc3Bvc2l0aW9uXFxcIl0pID8gUmVnRXhwLiQxIDogXFxcIlxcXCJcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZpbGVpbmZvO1xcbn1cXG5cXG5mdW5jdGlvbiBtZXJnZUNodW5rcyh0ZW1wRGlyLCBvdXRwdXRQYXRoKSB7XFxuICAgIGxldCBvdXRwdXRGaWxlID0gbmV3IEZpbGUob3V0cHV0UGF0aCk7XFxuICAgIGxldCByYWYgPSBudWxsO1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IHJhZiA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlKG91dHB1dEZpbGUsIFxcXCJyd1xcXCIpO1xcblxcbiAgICAgICAgbGV0IGNodW5rRmlsZXMgPSB0ZW1wRGlyLmxpc3RGaWxlcyhuZXcgamF2YS5pby5GaWxlbmFtZUZpbHRlcigoZGlyLCBuYW1lKSA9PiBuYW1lLmVuZHNXaXRoKFxcXCIudG1wXFxcIikpKTtcXG4gICAgICAgIGlmIChjaHVua0ZpbGVzID09IG51bGwpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuaXoOazleiOt+WPluS4tOaXtuaWh+S7tuWkueS4reeahOWIhuWdl+aWh+S7tuOAglxcXCIpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgQXJyYXlzLnNvcnQoY2h1bmtGaWxlcywgQ29tcGFyYXRvci5jb21wYXJpbmdMb25nKGZpbGUgPT4ge1xcbiAgICAgICAgICAgIGxldCBuYW1lID0gZmlsZS5nZXROYW1lKCk7XFxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gTG9uZy5wYXJzZUxvbmcobmFtZS5zcGxpdChcXFwiX1xcXCIpWzFdKTtcXG4gICAgICAgICAgICByZXR1cm4gc3RhcnQ7XFxuICAgICAgICB9KSk7XFxuXFxuXFxuICAgICAgICBmb3IgKGxldCBjaHVua0ZpbGUgb2YgY2h1bmtGaWxlcykge1xcbiAgICAgICAgICAgIGxldCBmaXMsIGJpcztcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBsZXQgZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShjaHVua0ZpbGUpO1xcbiAgICAgICAgICAgICAgICBsZXQgYmlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oZmlzKTtcXG5cXG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IGphdmEubGFuZy5yZWZsZWN0LkFycmF5Lm5ld0luc3RhbmNlKGphdmEubGFuZy5CeXRlLlRZUEUsIEJVRkZFUl9TSVpFKTtcXG4gICAgICAgICAgICAgICAgbGV0IGxlbjtcXG4gICAgICAgICAgICAgICAgd2hpbGUgKChsZW4gPSBiaXMucmVhZChidWZmZXIpKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmFmLndyaXRlKGJ1ZmZlciwgMCwgbGVuKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZmluYWxseSB7XFxuICAgICAgICAgICAgICAgIGZpcyAmJiBmaXMuY2xvc2UoKTtcXG4gICAgICAgICAgICAgICAgYmlzICYmIGJpcy5jbG9zZSgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKFxcXCLlkIjlubbliIblnZfmlofku7bml7blh7rplJnvvJpcXFwiICsgZS50b1N0cmluZygpKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICAgIHJhZiAmJiByYWYuY2xvc2UoKTtcXG4gICAgfVxcbn1cXG5jb25zdCBkb3dubG9hZENsaWVudCA9IG5ldyBPa0h0dHBDbGllbnQuQnVpbGRlcigpXFxuICAgIC5jb25uZWN0VGltZW91dCgzMCwgVGltZVVuaXQuU0VDT05EUylcXG4gICAgLnJlYWRUaW1lb3V0KDUwLCBUaW1lVW5pdC5TRUNPTkRTKVxcbiAgICAud3JpdGVUaW1lb3V0KDQwLCBUaW1lVW5pdC5TRUNPTkRTKVxcbiAgICAuc3NsU29ja2V0RmFjdG9yeShIdHRwc1V0aWxzLmdldFNzbFNvY2tldEZhY3RvcnkoKS5zU0xTb2NrZXRGYWN0b3J5LCBIdHRwc1V0aWxzLlVuU2FmZVRydXN0TWFuYWdlcilcXG4gICAgLmhvc3RuYW1lVmVyaWZpZXIoSHR0cHNVdGlscy5VblNhZmVIb3N0bmFtZVZlcmlmaWVyKVxcbiAgICAuYnVpbGQoKTtcXG5cXG5mdW5jdGlvbiBkb3dubG9hZENodW5rKFxcbiAgICB1cmwsXFxuICAgIHN0YXJ0LFxcbiAgICBlbmQsXFxuICAgIHRlbXBGaWxlLFxcbiAgICBoZWFkZXJzXFxuKSB7XFxuXFxuICAgIGxldCByZXF1ZXN0ID0gT2tHby5nZXQodXJsKTtcXG4gICAgLy8g5aaC5p6c5pyJ6Ieq5a6a5LmJIEhlYWRlcnPvvIzliJnmt7vliqBcXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xcbiAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgaGVhZGVycy5lbnRyeVNldCgpKSB7XFxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzKGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICAvL2xvZyhPYmplY3Qua2V5cyhyZXF1ZXN0KSlcXG4gICAgcmVxdWVzdC5oZWFkZXJzKFxcXCJSYW5nZVxcXCIsIFxcXCJieXRlcz1cXFwiICsgc3RhcnQgKyBcXFwiLVxcXCIgKyBlbmQpO1xcbiAgICByZXF1ZXN0LmNsaWVudChkb3dubG9hZENsaWVudCk7XFxuICAgIC8vIOaJp+ihjOWQjOatpeivt+axgu+8jOiOt+WPluWTjeW6lFxcbiAgICBsZXQgcmVzcG9uc2UgPSByZXF1ZXN0LmV4ZWN1dGUoKTtcXG4gICAgaWYgKHJlc3BvbnNlID09IG51bGwgfHwgfn4ocmVzcG9uc2UuY29kZSgpIC8gMTAwKSAhPSAyKSB7XFxuICAgICAgICBsb2cofn4ocmVzcG9uc2UuY29kZSgpIC8gMTAwKSlcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5pyN5Yqh5Zmo6L+U5Zue5byC5bi477yMSFRUUCBjb2RlID0gXFxcIiArXFxuICAgICAgICAgICAgKHJlc3BvbnNlID09IG51bGwgPyBcXFwibnVsbFxcXCIgOiByZXNwb25zZS5jb2RlKCkpKTtcXG4gICAgfVxcblxcbiAgICAvLyDlsIblk43lupTkvZPlhpnlhaXkuLTml7bmlofku7ZcXG4gICAgbGV0IGlzID0gbnVsbCxcXG4gICAgICAgIGJpcyA9IG51bGwsXFxuICAgICAgICBmb3MgPSBudWxsO1xcbiAgICB0cnkge1xcbiAgICAgICAgaXMgPSByZXNwb25zZS5ib2R5KCk7XFxuICAgICAgICBiaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShpcy5ieXRlU3RyZWFtKCkpO1xcbiAgICAgICAgZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGVtcEZpbGUpO1xcblxcbiAgICAgICAgbGV0IGJ1ZmZlciA9IGphdmEubGFuZy5yZWZsZWN0LkFycmF5Lm5ld0luc3RhbmNlKGphdmEubGFuZy5CeXRlLlRZUEUsIEJVRkZFUl9TSVpFKTtcXG4gICAgICAgIGxldCBsZW47XFxuICAgICAgICB3aGlsZSAoKGxlbiA9IGJpcy5yZWFkKGJ1ZmZlcikpICE9IC0xKSB7XFxuICAgICAgICAgICAgZm9zLndyaXRlKGJ1ZmZlciwgMCwgbGVuKTtcXG4gICAgICAgIH1cXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICAgIGlzICYmIGlzLmNsb3NlKCk7XFxuICAgICAgICBiaXMgJiYgYmlzLmNsb3NlKCk7XFxuICAgICAgICBmb3MgJiYgZm9zLmNsb3NlKCk7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZGVsZXRlVGVtcEZpbGVzKHRlbXBEaXIpIHtcXG4gICAgaWYgKHRlbXBEaXIuZXhpc3RzKCkgJiYgdGVtcERpci5pc0RpcmVjdG9yeSgpKSB7XFxuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIHRlbXBEaXIubGlzdEZpbGVzKCkgfHwgW10pIHtcXG4gICAgICAgICAgICBmaWxlLmRlbGV0ZSgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGVtcERpci5kZWxldGUoKTtcXG4gICAgfVxcbn1cXG5sZXQgaXNEb3dubG9hZCA9IGZhbHNlO1xcbiQuZXhwb3J0cy5kb3dubG9hZEZpbGUgPSBmdW5jdGlvbih1cmwsXFxuICAgIG91dHB1dFBhdGgsXFxuICAgIGZpbGVuYW1lLFxcbiAgICBjb25maWcpIHtcXG4gICAgaWYgKGlzRG93bmxvYWQpIHJldHVybiBmYWxzZTtcXG4gICAgaXNEb3dubG9hZCA9IHRydWU7XFxuICAgIGRvd25sb2FkRmlsZSh1cmwsXFxuICAgICAgICBvdXRwdXRQYXRoLFxcbiAgICAgICAgZmlsZW5hbWUsXFxuICAgICAgICBjb25maWcpO1xcbiAgICBpc0Rvd25sb2FkID0gZmFsc2U7XFxuICAgIHJldHVybiB0cnVlO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImxpc3RzXCIsXCJwYXRoXCI6XCJsaXN0c1wiLFwicnVsZVwiOlwiLy/ni5fmtanlpKfkvazmj5DkvptcXG4vL+WIhuS6q+mTvuaOpei9rOeggeaSreaUvu+8jOaOpeWPo+adpeiHqueZvuW6pue9keebmOe9kemhteeJiHBjIHVhXFxuJC5leHBvcnRzLmNvZGVIaXN0b3J5VmlldyA9IGZ1bmN0aW9uKG15VVJMKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+ingueci+iusOW9lScsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgobXlVUkwpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignc2VsZWN0JywgJ3ZpZXcnKTtcXG4gICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbGlzdHNcXFwiKS5zZWxlY3RIaXN0b3J5KG15VVJMKTtcXG4gICAgICAgIH0sIG15VVJMKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmuIXpmaTop4LnnIvorrDlvZUnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oJ2hpc3RvcnlWaWV3Jyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG4kLmV4cG9ydHMuY29kZUhpc3RvcnlTZWFyY2ggPSBmdW5jdGlvbihteVVSTCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfmkJzntKLorrDlvZUnLFxcbiAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobXlVUkwpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignc2VsZWN0JywgJ3NlYXJjaCcpO1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9saXN0c1xcXCIpLnNlbGVjdEhpc3RvcnkobXlVUkwpO1xcbiAgICAgICAgfSwgbXlVUkwpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+a4hemZpOaQnOe0ouiusOW9lScsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbSgnaGlzdG9yeVNlYXJjaCcpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuJC5leHBvcnRzLnNlbGVjdEhpc3RvcnkgPSBmdW5jdGlvbihteVVSTCkge1xcbiAgICBpZiAodHlwZW9mKG15VVJMKSA9PSAndW5kZWZpbmVkJykgbXlVUkwgPSAnJztcXG4gICAgY29uc3QgaGlrZXJQb3AgPSAkLnJlcXVpcmUoXFxcImh0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL1BvcHVwLmpzXFxcIik7XFxuICAgIGxldCBzb3VyY2VMaXN0ID0gZ2V0TXlWYXIoJ3NlbGVjdCcpID09ICdzZWFyY2gnID8gc3RvcmFnZTAuZ2V0SXRlbSgnaGlzdG9yeVNlYXJjaCcsIFtdKSA6IHN0b3JhZ2UwLmdldEl0ZW0oJ2hpc3RvcnlWaWV3JywgW10pO1xcbiAgICBzb3VyY2VMaXN0ID0gc291cmNlTGlzdC5yZXZlcnNlKCk7XFxuICAgIGhpa2VyUG9wLnNldFVzZVN0YXJ0QWN0aXZpdHkoZmFsc2UpO1xcbiAgICBsZXQgc3BlbiA9IGdldE15VmFyKCdzZWxlY3QnKSA9PSAnc2VhcmNoJyA/IDMgOiAxO1xcbiAgICBsZXQgaW5wdXRCb3g7XFxuICAgIGxldCBwb3AgPSBoaWtlclBvcC5zZWxlY3RCb3R0b21SZXMoe1xcbiAgICAgICAgb3B0aW9uczogc291cmNlTGlzdCxcXG4gICAgICAgIGNvbHVtbnM6IHNwZW4sXFxuICAgICAgICB0aXRsZTogXFxcIuW9k+WJjeWQiOiuoTpcXFwiICsgc291cmNlTGlzdC5sZW5ndGgsXFxuICAgICAgICBub0F1dG9EaXNtaXNzOiB0cnVlLFxcbiAgICAgICAgLy90b1Bvc2l0aW9uOiBpbmRleCxcXG4gICAgICAgIGV4dHJhSW5wdXRCb3g6IChpbnB1dEJveCA9IG5ldyBoaWtlclBvcC5SZXNFeHRyYUlucHV0Qm94KHtcXG4gICAgICAgICAgICBoaW50OiBcXFwi5YWz6ZSu5a2X562b6YCJXFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2UocywgbWFuYWdlKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VyY2VMaXN0RmlsdGVyXFxcIiwgcyk7XFxuICAgICAgICAgICAgICAgIHRtcExpc3QgPSBzb3VyY2VMaXN0LmZpbHRlcih4ID0+IHgudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzLnRvTG93ZXJDYXNlKCkpKTtcXG4gICAgICAgICAgICAgICAgbGV0IGZsaXN0ID0gdG1wTGlzdDtcXG4gICAgICAgICAgICAgICAgbWFuYWdlLmxpc3QubGVuZ3RoID0gMDtcXG4gICAgICAgICAgICAgICAgZmxpc3QuZm9yRWFjaCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZS5saXN0LnB1c2goeCk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBtYW5hZ2UuY2hhbmdlKCk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzb3VyY2VMaXN0RmlsdGVyXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZVxcbiAgICAgICAgfSkpLFxcbiAgICAgICAgbG9uZ0NsaWNrKHMsIGksIG1hbmFnZSkge30sXFxuICAgICAgICBjbGljayhzLCBpLCBtYW5hZ2UpIHtcXG4gICAgICAgICAgICBwb3AuZGlzbWlzcygpO1xcbiAgICAgICAgICAgIGxldCBpbnB1dCA9IHM7XFxuICAgICAgICAgICAgaWYgKHRtcExpc3RbaV0gPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdzZWxlY3QnKSA9PSAnc2VhcmNoJykge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdrZXl3b3JkJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZVBhcnNlU2VhcmNoVXJsKGlucHV0LCBteVVSTCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IC9odHRwLy50ZXN0KGlucHV0LnNwbGl0KCdAQCcpWzBdKSA/IGlucHV0LnNwbGl0KCdAQCcpWzBdIDogaW5wdXQuc3BsaXQoJ0BAJylbMV07XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbGlzdHNcXFwiKS5jb2RlUGFyc2VVcmwoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+a6kOWIl+ihqOe0ouW8leW8guW4uCdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgbWVudUNsaWNrKG1hbmFnZSkge1xcbiAgICAgICAgICAgIGxldCBtZW51YXJyID0gW1xcXCLmoLflvI9cXFwiLCBnZXRJdGVtKCdzZWxlY3RPcmRlcicsICdhc2MnKSA9PSBcXFwiYXNjXFxcIiA/IFxcXCLmraPluo9cXFwiIDogXFxcIuWAkuW6j1xcXCIsIFxcXCLmjpLluo9cXFwiXTtcXG4gICAgICAgICAgICBoaWtlclBvcC5zZWxlY3RDZW50ZXIoe1xcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBtZW51YXJyLFxcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiAyLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuivt+mAieaLqVxcXCIsXFxuICAgICAgICAgICAgICAgIGNsaWNrKHMsIGkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlbiA9IHNwZW4gPT0gMSA/IDIgOiAoc3BlbiA9PSAyID8gMyA6IDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZS5jaGFuZ2VDb2x1bW5zKHNwZW4pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hbmFnZS5zY3JvbGxUb1Bvc2l0aW9uKGluZGV4LCBmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0T3JkZXIgPSBnZXRJdGVtKCdzZWxlY3RPcmRlcicsICdhc2MnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2UubGlzdC5yZXZlcnNlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3JkZXIgPSBzZWxlY3RPcmRlciA9PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3NlbGVjdE9yZGVyJywgc2VsZWN0T3JkZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZS5jaGFuZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL21hbmFnZS5zY3JvbGxUb1Bvc2l0aW9uKGluZGV4LCB0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0dHlwZSA9IFtcXFwi5pu05paw5pe26Ze0XFxcIiwgXFxcIuaOpeWPo+WQjeensFxcXCIsIFxcXCLkvb/nlKjpopHnjodcXFwiXS5tYXAodiA9PiB2ID09IGdldEl0ZW0oJ3NvdXJjZUxpc3RTb3J0JywgJ+abtOaWsOaXtumXtCcpID8gdiArIFxcXCLiiJpcXFwiIDogdik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlbGVjdE9wdGlvbnMoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwidGl0bGVcXFwiOiBcXFwi6YCJ5oup5o6S5bqP5pa55byPXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm9wdGlvbnNcXFwiOiBzb3J0dHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNvbFxcXCI6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJqc1xcXCI6IGBzZXRJdGVtKCdzb3VyY2VMaXN0U29ydCcsIGlucHV0LnJlcGxhY2UoXFxcIuKImlxcXCIsXFxcIlxcXCIpKTsndG9hc3Q6Ly/mjpLluo/mlrnlvI/lnKjkuIvmrKHnlJ/mlYjvvJonICsgaW5wdXQucmVwbGFjZShcXFwi4oiaXFxcIixcXFwiXFxcIilgXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaWtlclBvcC5jYW5CaW9tZXRyaWMoKSAhPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6LCD55So55Sf54mp5a2m6aqM6K+B5Ye66ZSZXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvcCA9IGhpa2VyUG9wLmNoZWNrQnlCaW9tZXRyaWMoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcign5bey6aqM6K+B5oyH57q5JywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIumqjOivgeaIkOWKn++8jOmHjeaWsOeCueWIh+aNouermea6kOWQp1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbn1cXG4kLmV4cG9ydHMuc3RvcmVIaXN0b3J5VmlldyA9IGZ1bmN0aW9uKGlucHV0LCB0aXRsZSkge1xcbiAgICBsZXQgaGlzdG9yeVZpZXcgPSBzdG9yYWdlMC5nZXRJdGVtKCdoaXN0b3J5VmlldycsIFtdKTtcXG4gICAgaWYgKCFoaXN0b3J5Vmlldy5pbmNsdWRlcyh0aXRsZSArICdAQCcgKyBpbnB1dCkpIHtcXG4gICAgICAgIGhpc3RvcnlWaWV3LnB1c2godGl0bGUgKyAnQEAnICsgaW5wdXQpO1xcbiAgICB9XFxuICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ2hpc3RvcnlWaWV3JywgaGlzdG9yeVZpZXcpO1xcbn1cXG4kLmV4cG9ydHMuc3RvcmVIaXN0b3J5U2VhcmNoID0gZnVuY3Rpb24oaW5wdXQpIHtcXG4gICAgbGV0IGhpc3RvcnlTZWFyY2ggPSBzdG9yYWdlMC5nZXRJdGVtKCdoaXN0b3J5U2VhcmNoJywgW10pO1xcbiAgICBpZiAoIWhpc3RvcnlTZWFyY2guaW5jbHVkZXMoaW5wdXQpKSB7XFxuICAgICAgICBoaXN0b3J5U2VhcmNoLnB1c2goaW5wdXQpO1xcbiAgICB9XFxuICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ2hpc3RvcnlTZWFyY2gnLCBoaXN0b3J5U2VhcmNoKTtcXG59XFxuJC5leHBvcnRzLmNvZGVQYXJzZVVybCA9IGZ1bmN0aW9uKGlucHV0KSB7XFxuICAgIGlmICgvYmFpZHUvLnRlc3QoaW5wdXQpKSB7XFxuICAgICAgICBwdXRWYXIoJ3VybEJhaWR1JywgaW5wdXQpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvbGlzdD9ydWxlPeeZvuW6pue9keebmCZyZWFsdXJsPVxcXCIgKyBpbnB1dDtcXG4gICAgfSBlbHNlIGlmICgvYWxpeXVuZHJpdmV8YWxpcGFufHF1YXJrfHVjXFxcXC4vLnRlc3QoaW5wdXQpKSB7XFxuICAgICAgICBjb25zdCBjb25maWcgPSB7XFxuICAgICAgICAgICAg5L6d6LWWOiAnaHR0cHM6Ly9jb2RlYmVyZy5vcmcvc3JjNDg1OTc5NjIvaGsvcmF3L2JyYW5jaC9KdS9TcmNQYXJzZVMuanMnXFxuICAgICAgICB9O1xcbiAgICAgICAgcmVxdWlyZShjb25maWcu5L6d6LWWLm1hdGNoKC9odHRwKHMpPzpcXFxcL1xcXFwvLipcXFxcLy8pWzBdICsgJ1NyY1BhcnNlUy5qcycpO1xcbiAgICAgICAgcmV0dXJuIFNyY1BhcnNlUy7ogZrpmIUoaW5wdXQpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICB9XFxufVxcbiQuZXhwb3J0cy5jb2RlUGFyc2VTZWFyY2hVcmwgPSBmdW5jdGlvbihpbnB1dCwgbXlVUkwpIHtcXG4gICAgaWYgKHR5cGVvZihteVVSTCkgPT0gJ3VuZGVmaW5lZCcpIG15VVJMID0gJyc7XFxuICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKCdodHRwczovL3Bhbi5iYWlkdS5jb20nKSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBldmFsKCQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZVNoYXJlKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICB0b2FzdCgn6ZO+5o6l6ZSZ6K+v5oiW6ICF5peg5rOV6K6/6ZeuIScpO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbScpIHx8IGlucHV0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vcGFuLnF1YXJrLmNuLycpIHx8IGlucHV0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vZHJpdmUudWMuY24vJykpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0ge1xcbiAgICAgICAgICAgICAgICDkvp3otZY6ICdodHRwczovL2NvZGViZXJnLm9yZy9zcmM0ODU5Nzk2Mi9oay9yYXcvYnJhbmNoL0p1L1NyY1BhcnNlUy5qcydcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJlcXVpcmUoY29uZmlnLuS+nei1li5tYXRjaCgvaHR0cChzKT86XFxcXC9cXFxcLy4qXFxcXC8vKVswXSArICdTcmNQYXJzZVMuanMnKTtcXG4gICAgICAgICAgICByZXR1cm4gU3JjUGFyc2VTLuiBmumYhShpbnB1dCk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgdG9hc3QoJ+mTvuaOpemUmeivr+aIluiAheaXoOazleiuv+mXriEnKTtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKCdAJykpIHtcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2hQQygnaHR0cHM6Ly9wYW4uYmFpZHUuY29tL2FwaS9zZWFyY2g/Y2xpZW50dHlwZT0wJmFwcF9pZD0md2ViPTEmZHAtbG9naWQ9Jm9yZGVyPW5hbWUmZGVzYz0wJm51bT05OTk5JnBhZ2U9MSZyZWN1cnNpb249MSZrZXk9JyArIGlucHV0LnNsaWNlKDEpLnRyaW0oKSk7XFxuICAgICAgICB2YXIgbGlzdFNlYXJjaCA9IEpTT04ucGFyc2UoaHRtbCkubGlzdDtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dFZhcigncGF0aHMnLCBbe1xcbiAgICAgICAgICAgIHBhdGg6ICcvc2VhcmNoJyxcXG4gICAgICAgICAgICBuYW1lOiAn8J+PoCdcXG4gICAgICAgIH1dKTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dFZhcignZmlsZV9saXN0JywgbGlzdFNlYXJjaCk7XFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgfSBlbHNlIGlmIChteVVSTC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2Uvc2VhcmNoJykpIHtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2VhcmNoP2Z5cGFnZSc7XFxuXFxuICAgIH1cXG59XFxuJC5leHBvcnRzLmNvZGVIaXN0b3J5UGFuID0gJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGxldCBoaXN0b3J5ID0gc3RvcmFnZTAuZ2V0SXRlbSgnaGlzdG9yeScsIFtdKTtcXG4gICAgaGlzdG9yeTEgPSBoaXN0b3J5LmZpbHRlcih4ID0+IC9AQC8udGVzdCh4KSk7XFxuICAgIGhpc3RvcnkyID0gaGlzdG9yeS5maWx0ZXIoeCA9PiAhL0BALy50ZXN0KHgpKTtcXG4gICAgaGlzdG9yeSA9IHNvcnRBcnJheShoaXN0b3J5MSkuY29uY2F0KGhpc3RvcnkyKTtcXG4gICAgaGlzdG9yeU5ldyA9IGhpc3RvcnkubWFwKGggPT4gL0BALy50ZXN0KGgpID8gaC5zcGxpdCgnQEAnKVswXS5zcGxpdCgnLycpLmF0KC0xKS5yZXBsYWNlKC9cXFxcPy4qLywgJycpIDogaCk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+e9keebmOiusOW9lScsXFxuICAgICAgICB1cmw6ICQoaGlzdG9yeU5ldywgMSwgJ+mAieaLqeebruW9lScpLnNlbGVjdCgoaGlzdG9yeSwgaGlzdG9yeU5ldykgPT4ge1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlUGF0aE9iamVjdHMocGF0aCkge1xcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKS5maWx0ZXIocCA9PiBwLnRyaW0oKSAhPT0gJycpO1xcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbe1xcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogJy8nLFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ/Cfj6AnXFxuICAgICAgICAgICAgICAgIH1dO1xcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFBhdGggPSAnJztcXG4gICAgICAgICAgICAgICAgcGFydHMuZm9yRWFjaChwYXJ0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXRoICs9IGAvJHtwYXJ0fWA7XFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3VycmVudFBhdGgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFydFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoIS9AQC8udGVzdChoaXN0b3J5W2hpc3RvcnlOZXcuaW5kZXhPZihpbnB1dCldKSkge1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRWYXIoJ3BhdGhzJywgZ2VuZXJhdGVQYXRoT2JqZWN0cyhpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgICAgICAgICAgZ2V0SWNvbixcXG4gICAgICAgICAgICAgICAgICAgIGdldEh6bSxcXG4gICAgICAgICAgICAgICAgICAgIGdldExpbmtcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2NvZGUnKTtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBoaXN0b3J5W2hpc3RvcnlOZXcuaW5kZXhPZihpbnB1dCldO1xcbiAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TGluayhpbnB1dC5zcGxpdCgnQEAnKVsyXSwgaW5wdXQuc3BsaXQoJ0BAJylbMV0sIGlucHV0LnNwbGl0KCdAQCcpWzBdLCBpbnB1dC5zcGxpdCgnQEAnKVszXSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBoaXN0b3J5LCBoaXN0b3J5TmV3KSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGNsczogJ3BsYXlsaXN0IOe9keebmOiusOW9lScsXFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+a4hemZpOe9keebmOiusOW9lScsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbSgnaGlzdG9yeScpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59KTtcXG5cXG4kLmV4cG9ydHMuY29kZVNoYXJlID0gJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGlmICh0eXBlb2YoaW5wdXQpICE9ICd1bmRlZmluZWQnICYmIGlucHV0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vcGFuLmJhaWR1LmNvbS9zaGFyZScpKSB7XFxuICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoJ3NoYXJlL2luaXQ/c3VybD0nLCAncy8xJykucmVwbGFjZSgnJnB3ZCcsICc/cHdkJyk7XFxuICAgIH1cXG4gICAgdmFyIGh0bWwxMSA9IHJlcXVlc3QodHlwZW9mKGlucHV0KSAhPSAndW5kZWZpbmVkJyA/IGlucHV0IDogTVlfVVJMLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgQ29va2llOiAnI25vQ29va2llIydcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6ICdIRUFEJyxcXG4gICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgIH0pO1xcbiAgICB2YXIgdXJsMTEgPSBKU09OLnBhcnNlKGh0bWwxMSkudXJsO1xcbiAgICB2YXIgaHRtbDIxID0gcmVxdWVzdCgnaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3NoYXJlL3ZlcmlmeT9zdXJsPScgKyB1cmwxMS5zcGxpdCgnP3N1cmw9JylbMV0uc3BsaXQoJyZwd2Q9JylbMF0sIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBSZWZlcmVyOiB1cmwxMVxcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6ICdwd2Q9JyArIHVybDExLnNwbGl0KCcmcHdkPScpWzFdICsgJyZ2Y29kZT0mdmNvZGVfc3RyPScsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgdmFyIHJhbmRzayA9IEpTT04ucGFyc2UoaHRtbDIxKS5yYW5kc2s7XFxuICAgIHZhciBodG1sMzEgPSByZXF1ZXN0KHR5cGVvZihpbnB1dCkgIT0gJ3VuZGVmaW5lZCcgPyBpbnB1dCA6IE1ZX1VSTCwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdDb29raWUnOiBnZXRJdGVtKCdCRFVTUycpICsgJzsgJyArIGdldEl0ZW0oJ1NUT0tFTicpICsgJzsgJyArICdCRENMTkQ9JyArIHJhbmRzayxcXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI2LjAuMC4wIFNhZmFyaS81MzcuMzYnXFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcXG4gICAgICAgIHJlZGlyZWN0OiBmYWxzZVxcbiAgICB9KTtcXG4gICAgdmFyIGh0bWwzMiA9IGh0bWwzMS5tYXRjaCgvbG9jYWxzXFxcXC5tc2V0XFxcXCgoLiopXFxcXCkvKVsxXTtcXG4gICAgdmFyIGh0bWwzMyA9IEpTT04ucGFyc2UoaHRtbDMyKTtcXG4gICAgdmFyIGZpbGVfbGlzdCA9IGh0bWwzMy5maWxlX2xpc3Q7XFxuICAgIHZhciBpc2RpciA9IGZpbGVfbGlzdFswXS5pc2RpcjtcXG4gICAgdmFyIHVrID0gaHRtbDMzLnNoYXJlX3VrO1xcbiAgICB2YXIgc2hhcmVpZCA9IGh0bWwzMy5zaGFyZWlkO1xcbiAgICB2YXIgZnNfaWQgPSBmaWxlX2xpc3RbMF0uZnNfaWQ7XFxuICAgIHZhciBwYXRoID0gZmlsZV9saXN0WzBdLnBhdGg7XFxuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvc2hhcmVsaW5rJykpIHtcXG4gICAgICAgIHBhdGggPSBgL3NoYXJlbGluayR7dWt9LSR7ZnNfaWR9JHtwYXRofWA7XFxuICAgIH1cXG4gICAgdmFyIGpzVG9rZW4gPSBodG1sMzEuc3BsaXQoXFxcImpzVG9rZW4lMjAlM0QlMjBhJTdEJTNCZm4lMjglMjJcXFwiKVsxXS5zcGxpdChcXFwiJTIyJTI5JykpXFxcIilbMF07XFxuICAgIHB1dFZhcignY2snLCBnZXRJdGVtKCdCRFVTUycpICsgJzsgJyArIGdldEl0ZW0oJ1NUT0tFTicpICsgJzsgJyArICdCRENMTkQ9JyArIHJhbmRzayk7XFxuICAgIHB1dFZhcigncmFuZHNrJywgcmFuZHNrKTtcXG4gICAgcHV0VmFyKCdqc1Rva2VuJywganNUb2tlbik7XFxuICAgIHB1dFZhcignc2hhcmVfdWsnLCB1ayk7XFxuICAgIHB1dFZhcignc2hhcmVfaWQnLCBzaGFyZWlkICsgJycpO1xcbiAgICBzdG9yYWdlMC5wdXRWYXIoJ3BhdGhzJywgW3tcXG4gICAgICAgIHBhdGg6IHBhdGgsXFxuICAgICAgICBuYW1lOiAn8J+PoCdcXG4gICAgfV0pO1xcbiAgICBzdG9yYWdlMC5wdXRWYXIoJ2ZpbGVfbGlzdCcsIGZpbGVfbGlzdCk7XFxufSk7XFxuXFxuJC5leHBvcnRzLmNvZGVMaXN0ID0gZnVuY3Rpb24oKSB7XFxuICAgIHBhdGhzID0gc3RvcmFnZTAuZ2V0VmFyKCdwYXRocycpO1xcbiAgICBpZiAoIXBhdGhzIHx8IHBhdGhzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICBwYXRocyA9IFt7XFxuICAgICAgICAgICAgcGF0aDogJy8nLFxcbiAgICAgICAgICAgIG5hbWU6ICfwn4+gJ1xcbiAgICAgICAgfV07XFxuICAgIH1cXG4gICAgbG9nKHBhdGhzKTtcXG4gICAgdmFyIHBhdGggPSBwYXRocy5hdCgtMSkucGF0aDtcXG4gICAgaWYgKC9zZWFyY2gvLnRlc3QocGF0aCkgJiYgIXN0b3JhZ2UwLmdldFZhcignZmlsZV9saXN0JykpIHtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dFZhcignZmlsZV9saXN0Jywgc3RvcmFnZTAuZ2V0VmFyKCdmaWxlX2xpc3RfdG1wJykpO1xcbiAgICB9XFxuICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoLyYvZywgJyUyNicpLnJlcGxhY2UoL1xcXFwrL2csICclMkInKTtcXG4gICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ2N0eXBlJywgJ2F2YXRhcicpID09ICdhdmF0YXInID8gJ2F2YXRhcicgOiBnZXRNeVZhcignY3R5cGUnLCAnYXZhdGFyJykgPT0gJ21vdmllXzMnID8gJ21vdmllXzMnIDogJ21vdmllXzEnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVN0YXRlKG5ld1N0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignY3R5cGUnLCBuZXdTdGF0ZSk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXRoLCBuZXdTdGF0ZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIHBhdGhzID0gc3RvcmFnZTAuZ2V0VmFyKCdwYXRocycpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXBhdGhzIHx8IHBhdGhzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICBwYXRocyA9IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogJy8nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICfwn4+gJ1xcbiAgICAgICAgICAgICAgICAgICAgfV07XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIHBhdGggPSBwYXRocy5hdCgtMSkucGF0aDtcXG4gICAgICAgICAgICAgICAgdmFyIGN0eXBlID0gZ2V0TXlWYXIocGF0aCwgJ2F2YXRhcicpO1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGN0eXBlKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdhdmF0YXInOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKCdtb3ZpZV8zJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdtb3ZpZV8zJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgnbW92aWVfMV92ZXJ0aWNhbF9waWMnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vdmllXzFfdmVydGljYWxfcGljJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgnYXZhdGFyJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKCdhdmF0YXInKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ21lZGlhJywgJzAnKSA9PSAnMScgPyAn5b2x6KeGJyA6ICflhajpg6gnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdtZWRpYScsIFN0cmluZygxIC0gZ2V0TXlWYXIoJ21lZGlhJywgJzAnKSkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcblxcblxcbiAgICAgICAgdmFyIHNvcnRUbXAgPSBnZXRNeVZhcihwYXRoICsgJ19zb3J0JywgJzAnKTtcXG4gICAgICAgIHZhciBzb3J0U3R5bGUgPSBbJ+m7mOiupOato+W6jycsICfpu5jorqTlgJLluo8nLCAn6Iux5paH5q2j5bqPJywgJ+iLseaWh+WAkuW6jycsICfmi7zpn7PmraPluo8nLCAn5ou86Z+z5YCS5bqPJywgJ+aVsOWtl+ato+W6jycsICfmlbDlrZflgJLluo8nLCAn5pe26Ze05q2j5bqPJywgJ+aXtumXtOWAkuW6jyddO1xcbiAgICAgICAgc29ydFN0eWxlW3NvcnRUbXBdID0gJ+Keoe+4jycgKyBzb3J0U3R5bGVbc29ydFRtcF07XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBzb3J0U3R5bGVbc29ydFRtcF0uc2xpY2UoMSksIC8vLnJlcGxhY2UoJ+ato+W6jycsICfihpEnKS5yZXBsYWNlKCflgJLluo8nLCAn4oaTJyksXFxuICAgICAgICAgICAgdXJsOiAkKHNvcnRTdHlsZSwgMiwgJ+aOkuW6jycpLnNlbGVjdCgoc29ydFN0eWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBwYXRocyA9IHN0b3JhZ2UwLmdldFZhcigncGF0aHMnKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFwYXRocyB8fCBwYXRocy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICcvJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn8J+PoCdcXG4gICAgICAgICAgICAgICAgICAgIH1dO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gcGF0aHMuYXQoLTEpLnBhdGg7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhdGggKyAnX3NvcnQnLCBNWV9JTkRFWCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgc29ydFN0eWxlKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnc29ydCdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ/CflI0nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBpbnB1dCA9IGdldFZhcigna2V5d29yZCcpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2hcXFwiLy8uY29kZVBhcnNlU2VhcmNoVXJsKGlucHV0KTtcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG4gICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZUhpc3RvcnlTZWFyY2goTVlfVVJMKTtcXG4gICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZUhpc3RvcnlWaWV3KE1ZX1VSTCk7XFxuICAgICAgICBldmFsKCQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZUhpc3RvcnlQYW4pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXRocywgaSwgcGF0aCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiAhL3NoYXJlLy50ZXN0KHBhdGgpICYmICEvc2VhcmNoLy50ZXN0KHBhdGhzWzBdLnBhdGgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigncGF0aHMnKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PSAwICYmICgvc2hhcmUvLnRlc3QocGF0aCkgfHwgL3NlYXJjaC8udGVzdChwYXRoc1swXS5wYXRoKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRWYXIoJ2ZpbGVfbGlzdCcsIHN0b3JhZ2UwLmdldFZhcignZmlsZV9saXN0X3RtcCcpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0VmFyKCdwYXRocycsIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpLCBwYXRoKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W8gOaWsOmhtemdoicsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHBhdGhzTmV3KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignZXJqaScpID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCflt7Lnu4/mmK/kuoznuqfpobXpnaLkuoYhJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0VmFyKCdwYXRoc1RtcCcsIHN0b3JhZ2UwLmdldFZhcigncGF0aHMnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJykucnVsZSgocGF0aHNOZXcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZXJqaScsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2ZpcnN0TGlzdE5ldycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2ZpcnN0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dFZhcigncGF0aHMnLCBzdG9yYWdlMC5nZXRWYXIoJ3BhdGhzVG1wJykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZXJqaScsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2V0TXlWYXIoJ2ZpcnN0TGlzdE5ldycpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0VmFyKCdwYXRocycsIHBhdGhzTmV3KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZmlyc3RMaXN0TmV3JywgJzEnKTt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9saXN0c1xcXCIpLmNvZGVMaXN0KCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHBhdGhzTmV3KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSksXFxuICAgICAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGdldEljb24sXFxuICAgICAgICAgICAgZ2V0SHptLFxcbiAgICAgICAgICAgIGdldExpbmtcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9jb2RlJyk7XFxuICAgICAgICBpZiAoIXN0b3JhZ2UwLmdldFZhcignZmlsZV9saXN0JykpIHtcXG4gICAgICAgICAgICBpZiAoL3NoYXJlLy50ZXN0KHBhdGgpKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmxfdG1wID0gJ2h0dHBzOi8vcGFuLmJhaWR1LmNvbS9zaGFyZS9saXN0P3VrPScgKyBnZXRWYXIoJ3NoYXJlX3VrJykgKyAnJnNoYXJlaWQ9JyArIGdldFZhcignc2hhcmVfaWQnKSArICcmZGlyPScgKyBwYXRoO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmxfdG1wID0gYnVpbGRVcmwoJ2h0dHBzOi8vcGFuLmJhaWR1LmNvbS9yZXN0LzIuMC94cGFuL2ZpbGUnLCB7XFxuICAgICAgICAgICAgICAgICAgICAnYWNjZXNzX3Rva2VuJzogZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJyksXFxuICAgICAgICAgICAgICAgICAgICAnbWV0aG9kJzogJ2xpc3QnLFxcbiAgICAgICAgICAgICAgICAgICAgJ2Rpcic6IHBhdGgsXFxuICAgICAgICAgICAgICAgICAgICAnd2ViJzogJ3dlYicsXFxuICAgICAgICAgICAgICAgICAgICAnbGltaXQnOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgJ2xpbWl0JzogMjAwXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL2xvZyh1cmxfdG1wKTtcXG4gICAgICAgICAgICBpZiAoL3NoYXJlLy50ZXN0KHBhdGgpKSB7XFxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2h0dHBzOi8vcGFuLmJhaWR1LmNvbS9zaGFyZS9saXN0P3VrPScgKyBnZXRWYXIoJ3NoYXJlX3VrJykgKyAnJnNoYXJlaWQ9JyArIGdldFZhcignc2hhcmVfaWQnKSArICcmZGlyPScgKyBwYXRoLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6ICdCRENMTkQ9JyArIGdldFZhcigncmFuZHNrJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyNi4wLjAuMCBTYWZhcmkvNTM3LjM2J1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdCh1cmxfdG1wLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb29raWU6IGdldFZhcignY2snKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICduZXRkaXNrOzExLjEwLjQ7UmVkbWkrSzMwO2FuZHJvaWQtYW5kcm9pZDs5O0pTYnJpZGdlNC40LjA7am9pbnRCcmlkZ2U7MS4xLjA7J1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vbG9nKHJlcyk7XFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKCdtZWRpYScsICcwJykgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gcmVzLmxpc3QuZmlsdGVyKGggPT4gaC5jYXRlZ29yeSA9PSAnMScgfHwgaC5pc2RpciA9PSAnMScgfHwgaC5jYXRlZ29yeSA9PSAnMicpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gcmVzLmxpc3Q7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICgvc2hhcmUvLnRlc3QocGF0aCkpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QuZmlsdGVyKHggPT4geC5pc2RpciA9PT0gMSkucmV2ZXJzZSgpLmNvbmNhdChsaXN0LmZpbHRlcih4ID0+IHguaXNkaXIgPT09IDApLnJldmVyc2UoKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IHN0b3JhZ2UwLmdldFZhcignZmlsZV9saXN0Jyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0VmFyKCdmaWxlX2xpc3RfdG1wJywgbGlzdCk7XFxuICAgICAgICAgICAgY2xlYXJWYXIoJ2ZpbGVfbGlzdCcpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGlzdCA9IGxpc3Quc2xpY2UoKE1ZX1BBR0UgLSAxKSAqIDEzMCwgTVlfUEFHRSAqIDEzMCk7XFxuICAgICAgICAvL2xvZyhsaXN0KTtcXG4gICAgICAgIC8qaWYgKGxpc3QubGVuZ3RoID4gMCYmc29ydFRtcCE9Nikge1xcbiAgICAgICAgICAgIGZvcih2YXIgayBpbiBsaXN0KXtcXG4gICAgICAgICAgICAgICAgaWYgKGxpc3Rba10uaXNkaXIgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoayA9PSBsaXN0Lmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0VG1wID0gJzYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHNzICsgJ19zb3J0JywgJzYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9Ki9cXG4gICAgICAgIGNvbnN0IGdldFNvcnRlZExpc3QgPSAobGlzdCwga2V5LCBvcmRlciwgaXNSZXZlcnNlKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIHNvcnRBcnJheShsaXN0LmZpbHRlcih4ID0+IHguaXNkaXIgPT0gMSksIGtleSwgb3JkZXIsIGlzUmV2ZXJzZSlcXG4gICAgICAgICAgICAgICAgLmNvbmNhdChzb3J0QXJyYXkobGlzdC5maWx0ZXIoeCA9PiB4LmlzZGlyID09IDApLCBrZXksIG9yZGVyLCBpc1JldmVyc2UpKTtcXG4gICAgICAgIH07XFxuICAgICAgICBjb25zdCBzb3J0TWFwID0ge1xcbiAgICAgICAgICAgICcwJzogbGlzdCA9PiBsaXN0LFxcbiAgICAgICAgICAgICcxJzogbGlzdCA9PiBsaXN0LmZpbHRlcih4ID0+IHguaXNkaXIgPT09IDEpLnJldmVyc2UoKS5jb25jYXQobGlzdC5maWx0ZXIoeCA9PiB4LmlzZGlyID09PSAwKS5yZXZlcnNlKCkpLFxcbiAgICAgICAgICAgICcyJzogbGlzdCA9PiBnZXRTb3J0ZWRMaXN0KGxpc3QsICdzZXJ2ZXJfZmlsZW5hbWUnLCAxKSxcXG4gICAgICAgICAgICAnMyc6IGxpc3QgPT4gZ2V0U29ydGVkTGlzdChsaXN0LCAnc2VydmVyX2ZpbGVuYW1lJywgMSwgMSksXFxuICAgICAgICAgICAgJzQnOiBsaXN0ID0+IGdldFNvcnRlZExpc3QobGlzdCwgJ3NlcnZlcl9maWxlbmFtZScsIDIpLFxcbiAgICAgICAgICAgICc1JzogbGlzdCA9PiBnZXRTb3J0ZWRMaXN0KGxpc3QsICdzZXJ2ZXJfZmlsZW5hbWUnLCAyLCAxKSxcXG4gICAgICAgICAgICAnNic6IGxpc3QgPT4gZ2V0U29ydGVkTGlzdChsaXN0LCAnc2VydmVyX2ZpbGVuYW1lJywgMyksXFxuICAgICAgICAgICAgJzcnOiBsaXN0ID0+IGdldFNvcnRlZExpc3QobGlzdCwgJ3NlcnZlcl9maWxlbmFtZScsIDMsIDEpLFxcbiAgICAgICAgICAgICc4JzogbGlzdCA9PiBnZXRTb3J0ZWRMaXN0KGxpc3QsICdzZXJ2ZXJfbXRpbWUnLCAzLCAxKSxcXG4gICAgICAgICAgICAnOSc6IGxpc3QgPT4gZ2V0U29ydGVkTGlzdChsaXN0LCAnc2VydmVyX210aW1lJywgMylcXG4gICAgICAgIH07XFxuICAgICAgICBjb25zdCBfbGlzdCA9IHNvcnRUbXAgPyBzb3J0TWFwW3NvcnRUbXBdKGxpc3QpIDogbGlzdDtcXG4gICAgICAgIGlmIChfbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgdmFyIF9saXN0aWQgPSBfbGlzdC5hdCgtMSkucGF0aC5yZXBsYWNlKC9cXFxcL1teXFxcXC9dKyQvLCBcXFwiL1xcXCIpO1xcbiAgICAgICAgfVxcbiAgICAgICAgX2xpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAvL2xvZyhpdGVtKTtcXG4gICAgICAgICAgICBpdGVtLnBhdGggPSBpdGVtLnBhdGgucmVwbGFjZSgvJi9nLCAnJTI2JykucmVwbGFjZSgvXFxcXCsvZywgJyUyQicpO1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0uc2VydmVyX2ZpbGVuYW1lO1xcbiAgICAgICAgICAgIGlmIChzdG9yYWdlMC5nZXRWYXIoX2xpc3RpZCkgIT0gJ3VuZGVmaW5lZCcgJiYgc3RvcmFnZTAuZ2V0VmFyKF9saXN0aWQpICE9ICcnKSB7fSBlbHNlIGlmICgvXFxcXC5tcDMkL2kudGVzdCh0aXRsZSkpIHtcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0VmFyKF9saXN0aWQsIF9saXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZihpdGVtLnRodW1icykgIT0gJ3VuZGVmaW5lZCcgJiYgL1xcXFwuKDNncHxhdml8ZjR2fGZsdnxrdXh8bTN1OHxtNHZ8bWt2fG1vdnxtcDR8bXBlZ3xtcGd8cG1wfHFzdnxyYW18cm18cm12Ynxzd2Z8dHN8d2VibXx3bXZ8anBnfGpwZWd8anBlfGp4cnxwbmd8dGlmfHRpZmZ8YXZpZnx4Ym18cGpwfHN2Z3p8aWNvfHN2Z3xqZmlmfHdlYnB8cGpwZWd8Z2lmfGlmZnxpbGJtfHBwbXxwY3h8eGNmfHhwbXxwc2R8bW5nfHNhaXxwc3B8dWZvKSQvaS50ZXN0KGl0ZW0uc2VydmVyX2ZpbGVuYW1lKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgaW1nID0gaXRlbS50aHVtYnMudXJsMjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgaW1nID0gZ2V0SWNvbihpdGVtKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGl0ZW0uaXNkaXIgPT0gMSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghL3NoYXJlfHNlYXJjaC8udGVzdChpdGVtLnBhdGgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKCdoaXN0b3J5JywgW10pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGlzdG9yeS5pbmNsdWRlcyhpdGVtLnBhdGgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcnkgPSBoaXN0b3J5LmZpbHRlcih4ID0+IGl0ZW0ucGF0aC5pbmRleE9mKHgpID09IC0xKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoKGl0ZW0ucGF0aCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ2hpc3RvcnknLCBoaXN0b3J5KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLnNlcnZlcl9maWxlbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRWYXIoJ3BhdGhzJywgcGF0aHMpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0sIHBhdGhzKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9cXFxcLigzZ3B8YXZpfGY0dnxmbHZ8a3V4fG0zdTh8bTR2fG1rdnxtb3Z8bXA0fG1wZWd8bXBnfHBtcHxxc3Z8cmFtfHJtfHJtdmJ8c3dmfHRzfHdlYm18d212KS9pLnRlc3QodGl0bGUpKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKCdtb3ZpZScsIGl0ZW0uZnNfaWQsIGl0ZW0ucGF0aCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXFxcXC4oZmxhY3xtNGF8bXAzfG9nZ3xvcHVzfHdhdikvaS50ZXN0KHRpdGxlKSkge1xcbiAgICAgICAgICAgICAgICBpZiAoL1xcXFwubXAzL2kudGVzdCh0aXRsZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKCdtcDMnLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoJ2F1ZGlvJywgaXRlbS5mc19pZCwgaXRlbS5wYXRoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKC9cXFxcLih0eHR8bG9nfGpzb258bHJjKS9pLnRlc3QodGl0bGUpKSB8fCAoL1xcXFwuKGJhdHxyZWcpL2kudGVzdCh0aXRsZSkgJiYgaXRlbS5jYXRlZ29yeSA9PSA2KSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluaygndHh0JywgaXRlbS5mc19pZCwgaXRlbS5wYXRoKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9cXFxcLihqcGd8anBlZ3xqcGV8anhyfHBuZ3x0aWZ8dGlmZnxhdmlmfHhibXxwanB8c3ZnenxpY298c3ZnfGpmaWZ8d2VicHxwanBlZ3xnaWZ8aWZmfGlsYm18cHBtfHBjeHx4Y2Z8eHBtfHBzZHxtbmd8c2FpfHBzcHx1Zm8pL2kudGVzdCh0aXRsZSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoJ2ltZycsIGl0ZW0uZnNfaWQsIGl0ZW0ucGF0aCwgaW1nKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluaygnJywgaXRlbS5mc19pZCwgaXRlbS5wYXRoLCBpbWcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvKmlmICh1cmxfdG1wLnNwbGl0KCdkaXI9JylbMV0ubWF0Y2goL1xcXFwvL2cpLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdjdHlwZScsICdhdmF0YXInKTtcXG4gICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICB2YXIgY3R5cGUgPSBnZXRNeVZhcihwYXRoLCAnYXZhdGFyJyk7XFxuICAgICAgICAgICAgdmFyIHNqID0gdGltZXN0YW1wVG9EYXRlKHBhcnNlSW50KGl0ZW0uc2VydmVyX210aW1lKSAqIDEwMDApO1xcbiAgICAgICAgICAgIHZhciBkZXNjID0gIWl0ZW0uaXNkaXIgPyBnZnMoaXRlbS5zaXplKSA6IHNqO1xcbiAgICAgICAgICAgIGlmIChjdHlwZSA9PSAnYXZhdGFyJykge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGNvbG9yUih0aXRsZSwgJ0ZGMzM5OScpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R5cGUgPT0gJ21vdmllXzFfdmVydGljYWxfcGljJykge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGNvbG9yKHRpdGxlLCAnRkYzMzk5Jyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciB6aHVhbmN1biA9IGZ1bmN0aW9uKHVrLCBzaGFyZWlkLCBmc19pZCwgcmFuZHNrKSB7XFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3NoYXJlL3RyYW5zZmVyJywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ0FuZHJvaWQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vcGFuLmJhaWR1LmNvbScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6IGdldEl0ZW0oJ0JEVVNTJykgKyAnOyAnICsgJ0JEQ0xORD0nICsgcmFuZHNrLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6ICdmcm9tPScgKyB1ayArICcmc2hhcmVpZD0nICsgc2hhcmVpZCArICcmb25kdXA9bmV3Y29weSZwYXRoPS/miJHnmoTotYTmupAvJmZzaWRsaXN0PVsnICsgZnNfaWQgKyAnXScsXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwxID0gSlNPTi5wYXJzZShodG1sKVxcbiAgICAgICAgICAgICAgICBpZiAoaHRtbDEuZXJybm8gPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICB0b2FzdCgn5bey6L2s5a2YJylcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0KGh0bWwxLnNob3dfbXNnKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBzaGFuY2h1ID0gZnVuY3Rpb24ocGF0aCkge1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vcGFuLmJhaWR1LmNvbS9hcGkvZmlsZW1hbmFnZXI/b3BlcmE9ZGVsZXRlJmNsaWVudHR5cGU9MScsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdBbmRyb2lkJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29va2llJzogZ2V0SXRlbSgnQkRVU1MnKSArICc7ICcgKyBnZXRJdGVtKCdTVE9LRU4nKSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBib2R5OiAnZmlsZWxpc3Q9W1xcXCInICsgcGF0aCArICdcXFwiXScsXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwxID0gSlNPTi5wYXJzZShodG1sKTtcXG4gICAgICAgICAgICAgICAgaWYgKGh0bWwxLmVycm5vID09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ+W3suWIoOmZpCcpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB0b2FzdCgn5Yig6Zmk5aSx6LSlJylcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgcmVuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuaWh+S7tuWQjeWKoOaWh+S7tuWQjue8gFxcXCIpLmlucHV0KChwYXRoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFza2lkID0gSlNPTi5wYXJzZShyZXF1ZXN0KCdodHRwczovL3Bhbi5iYWlkdS5jb20vYXBpL2ZpbGVtYW5hZ2VyP29wZXJhPXJlbmFtZSZjbGllbnR0eXBlPTEnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdBbmRyb2lkJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6IGdldEl0ZW0oJ0JEVVNTJykgKyAnOyAnICsgZ2V0SXRlbSgnU1RPS0VOJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiAnZmlsZWxpc3Q9W3tcXFwicGF0aFxcXCI6XFxcIicgKyBwYXRoLnJlcGxhY2UoLyYvZywgJyUyNicpICsgJ1xcXCIsXFxcIm5ld25hbWVcXFwiOlxcXCInICsgaW5wdXQgKyAnXFxcIn1dJmFzeW5jPTInLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICB9KSkudGFza2lkO1xcblxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KCdodHRwczovL3Bhbi5iYWlkdS5jb20vYXBpL3Rhc2txdWVyeT90YXNraWQ9JyArIHRhc2tpZCArICcmY2xpZW50dHlwZT0xJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnQW5kcm9pZCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb29raWUnOiBnZXRJdGVtKCdCRFVTUycpICsgJzsgJyArIGdldEl0ZW0oJ1NUT0tFTicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwxID0gSlNPTi5wYXJzZShodG1sKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0bWwxLmVycm5vID09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCflt7Lph43lkb3lkI0nKVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn6YeN5ZG95ZCN5aSx6LSlJylcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIH0sIHBhdGgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgeWx4eiA9IGZ1bmN0aW9uKHBhdGgsIHJlc3R2aSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYmR0dmkgPSByZXF1ZXN0KCdodHRwczovL2QucGNzLmJhaWR1LmNvbS9yZXN0LzIuMC9wY3MvZmlsZT9hcHBfaWQ9MjUwNTI4Jm1ldGhvZD1sb2NhdGVkb3dubG9hZCZwYXRoPScgKyBlbmNvZGVVUklDb21wb25lbnQocGF0aCkgKyAnJmNsaWVudHR5cGU9MTcmdmVyc2lvbj0yLjIuOTEuMTM2JnVzZT0xJywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb29raWUnOiBnZXRJdGVtKFxcXCJCRFVTU1xcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ25ldGRpc2s7UDJTUDsyLjIuOTEuMTM2O25ldGRpc2s7MTEuMzAuMjsyMjAyMTIxMVJDO2FuZHJvaWQtYW5kcm9pZDsxMjtKU2JyaWRnZTQuNC4wO2pvaW50QnJpZGdlOzEuMS4wOydcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnXFxuICAgICAgICAgICAgICAgIH0pOyAvL2xvZyhiZHR2aSlcXG4gICAgICAgICAgICAgICAgdmFyIHJlc3R2aSA9IEpTT04ucGFyc2UoYmR0dmkpLnVybHNbMF0udXJsOyAvL2xvZyhyZXN0dmkpXFxuICAgICAgICAgICAgICAgIHZhciBmcGF0aCA9IChwYXRoLm1hdGNoKC9cXFxcLy9nKSB8fCBbXSkubGVuZ3RoIDw9IDEgPyBcXFwi6L2v5Lu2XFxcIiA6IHBhdGgubWF0Y2goL1xcXFwvKC4qKVxcXFwvLylbMV1cXG4gICAgICAgICAgICAgICAgdmFyIHJlc3R2aSA9IChwYXRoLm1hdGNoKC9cXFxcLy9nKSB8fCBbXSkubGVuZ3RoIDw9IDEgPyByZXN0dmkucmVwbGFjZSgnbXRfc2NlbmUnLCAnZnBhdGg9JyArIGZwYXRoICsgJyZtdF9zY2VuZScpIDogcmVzdHZpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhyZXN0dmkpXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKHJlc3R2aSwgXFxcIuS4i+i9veWcsOWdgFxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLlvIDlp4vkuIvovb3mlofku7ZcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBCYWlkdU11bHRpVGhyZWFkZWREb3dubG9hZGVyID0gR00uZGVmaW5lTW9kdWxlKFxcXCJCYWlkdU11bHRpVGhyZWFkZWREb3dubG9hZGVyXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQmFpZHVNdWx0aVRocmVhZGVkRG93bmxvYWRlci5kb3dubG9hZEZpbGUoaW5wdXQsIFxcXCIvc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2Rvd25sb2FkL1xcXCIsIG51bGwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIm5ldGRpc2s7UDJTUDsyLjIuOTEuMTM2O25ldGRpc2s7MTEuMzAuMjsyMjAyMTIxMVJDO2FuZHJvaWQtYW5kcm9pZDsxMjtKU2JyaWRnZTQuNC4wO2pvaW50QnJpZGdlOzEuMS4wO1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSYW5nZVxcXCI6IFxcXCIwLTFcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRDb3VudDogNlxcbiAgICAgICAgICAgICAgICAgICAgfSkgPyBcXFwidG9hc3Q6Ly/kuIvovb3lrozmiJBcXFwiIDogXFxcInRvYXN0Oi8v6K+3562J5b6F5LiL6L2957uT5p2fXFxcIjtcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKC9zaGFyZS8udGVzdChwYXRoKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmEgPSB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6L2s5a2Y5pKt5pS+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodWssIHNoYXJlaWQsIGZzX2lkLCByYW5kc2ssIHRpdGxlLCB6aHVhbmN1biwgZ2V0TGluaykgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aHVhbmN1bih1aywgc2hhcmVpZCwgZnNfaWQsIHJhbmRzayk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dFZhcigncGF0aHMnLCBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogJy8nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ/Cfj6AnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICcv5oiR55qE6LWE5rqQLycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn5oiR55qE6LWE5rqQJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZ2V0VmFyKCdzaGFyZV91aycpLCBnZXRWYXIoJ3NoYXJlX2lkJyksIGl0ZW0uZnNfaWQsIGdldFZhcigncmFuZHNrJyksIGl0ZW0uc2VydmVyX2ZpbGVuYW1lLCB6aHVhbmN1biwgZ2V0TGluaylcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+i9rOWtmCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVrLCBzaGFyZWlkLCBmc19pZCwgcmFuZHNrLCB6aHVhbmN1bikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aHVhbmN1bih1aywgc2hhcmVpZCwgZnNfaWQsIHJhbmRzayk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZ2V0VmFyKCdzaGFyZV91aycpLCBnZXRWYXIoJ3NoYXJlX2lkJyksIGl0ZW0uZnNfaWQsIGdldFZhcigncmFuZHNrJyksIHpodWFuY3VuKVxcbiAgICAgICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBleHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WIoOmZpCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGl0ZW0sIHNoYW5jaHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coaXRlbS5wYXRoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhbmNodShpdGVtLnBhdGgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXRlbSwgc2hhbmNodSlcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+mHjeWRveWQjScsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGl0ZW0sIHJlbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuYW1lKGl0ZW0ucGF0aCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXRlbSwgcmVuYW1lKVxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5LiL6L29JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoaXRlbSwgeWx4eikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geWx4eihpdGVtLnBhdGgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0ZW0sIHlseHopXFxuICAgICAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChpdGVtLmlzZGlyID09IDEpIHtcXG4gICAgICAgICAgICAgICAgLy9sb2coaXRlbS5wYXRoKTtcXG4gICAgICAgICAgICAgICAgZXh0cmEubG9uZ0NsaWNrLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvIDmlrDpobXpnaInLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGl0ZW0sIHBhdGhzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdlcmppJykgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn5bey57uP5piv5LqM57qn6aG16Z2i5LqGIScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dFZhcigncGF0aHNUbXAnLCBwYXRocyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKS5ydWxlKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdlcmppJywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdmaXJzdExpc3ROZXcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2ZpcnN0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0VmFyKCdwYXRocycsIHN0b3JhZ2UwLmdldFZhcigncGF0aHNUbXAnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZXJqaScsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdldE15VmFyKCdmaXJzdExpc3ROZXcnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoc05ldyA9IHN0b3JhZ2UwLmdldFZhcigncGF0aHMnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhdGhzTmV3IHx8IHBhdGhzTmV3Lmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzTmV3ID0gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICcvJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICfwn4+gJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHNOZXcucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uc2VydmVyX2ZpbGVuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpdGVtLnBhdGhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRWYXIoJ3BhdGhzJywgcGF0aHNOZXcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdmaXJzdExpc3ROZXcnLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZUxpc3QoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIGl0ZW0sIHBhdGhzKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogY3R5cGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICAgICB0b2FzdCgn5Ye6546w6ZSZ6K+v77yM6K+35p+l55yL5pel5b+XJylcXG4gICAgfVxcbiAgICAvL31cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJzZWFyY2hcIixcInBhdGhcIjpcInNlYXJjaFwiLFwicnVsZVwiOlwianM6XFxucmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG52YXIgZCA9IFtdO1xcbmxldCBob3N0ID0gJ2JhaWR1eXVucGFuJztcXG5jb25zdCBwYXRoID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvTG95RGdJay9hbGlTaW1wbGVSdWxlcy5qc29uXFxcIjtcXG5sZXQganNvblNlYXJjaCA9IEpTT04ucGFyc2UocmVhZEZpbGUocGF0aCkgfHwgXFxcIltdXFxcIik7XFxuXFxuZnVuY3Rpb24geWFuemhlbmcoc3RyLCB1cmwsIHQsIHMpIHtcXG4gICAgaWYgKCF0KSB0ID0gaG9zdDtpZighcyl7cz0n5bCR5aWzJzt9XFxuICAgIHJldHVybiAkLnRvU3RyaW5nKChzdHIsIHVybCwgdCwgcykgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9IFxcXCIjRkYwMDAwXFxcIj4nICsgJ+eCueWHu+aQnOe0oicsXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JykucnVsZSgoc3RyLCB1cmwsIHQsIHMpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJ2xpc3QmJnNjcmVlbicsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVhOiBNT0JJTEVfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc3RyLCB1cmwsIHQsIHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoLXdvcmQnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSBzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoLWJ0bicpOyAvLyDpgJrov4fpgInmi6nlmajojrflj5bmkJzntKLmjInpkq5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hCdXR0b24uY2xpY2soKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrKCkge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzdHIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wdXRWYXIodCArIHMsIGN1cnJlbnRVcmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wYXJzZUxhenlSdWxlKCQkJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrLCA1MDApO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgc3RyLCB1cmwsIHQsIHMpLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICB9LCBzdHIsIHVybCwgdCwgcyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuICAgIH0sIHN0ciwgdXJsLCB0LCBzKTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0SHRtbENvbnRlbnQodXJsUywgdSkge1xcbiAgICBsZXQgaHRtbCA9IGdldE15VmFyKHVybFMpO1xcbiAgICBpZiAoIWh0bWwpIHtcXG4gICAgICAgIGh0bWwgPSBmZXRjaFBDKHVybFMpO1xcbiAgICAgICAgcHV0TXlWYXIodXJsUywgaHRtbCk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGh0bWw7XFxufVxcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn8J+UjScsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHIsIG15VVJMKSA9PiB7XFxuICAgICAgICAgICAgaWYgKCFpbnB1dCkge1xcbiAgICAgICAgICAgICAgICBjbGVhclZhcigncGF0aHMnKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2tleXdvcmQnLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuc3RvcmVIaXN0b3J5U2VhcmNoKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgbG9nKG15VVJMKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZVBhcnNlU2VhcmNoVXJsKGlucHV0LCBteVVSTCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgTVlfUlVMRS50aXRsZSwgTVlfVVJMKSxcXG4gICAgICAgIGRlc2M6ICflhbPplK7or418QOWFs+mUruivjXzliIbkuqvpk77mjqV856m655m9Oua4hemZpCcsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ2tleXdvcmQnLCAn5bCR5aWzJyksXFxuICAgICAgICB9XFxuICAgIH0pO1xcbmxvZygpO1xcbiAgICBsZXQgZGF0YUNsYXNzID0gW3tcXG4gICAgICAgIHRpdGxlOiAn56eS5pCcJua3t+WQiOebmCZEWUQm5LqR55uYNEsnICsganNvblNlYXJjaC5tYXAoaCA9PiAnJicraC5uYW1lKS5qb2luKCcnKSxcXG4gICAgICAgIGlkOiAnaHR0cHM6Ly9taWFvc291LmZ1biZodHRwczovL2h1bmhlcGFuLmNvbSZodHRwOi8vd3d3LmR5ZGhoeS5jb20maHR0cHM6Ly93d3cuY29kZWxpY2VuY2UuY24nICsganNvblNlYXJjaC5tYXAoaCA9PiAnJicraC5iYXNpY1VybCkuam9pbignJyksXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAn57u85ZCI5YWo6YOoJumYv+mHjOS6keebmCbnmb7luqbkupHnm5gm5aS45YWL5LqR55uYJlVD572R55uYJyxcXG4gICAgICAgIGlkOiAnJmFsaSZiYWlkdSZxdWFyayZ1YydcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6ICfnu7zlkIgm5paH5Lu25aS5JuaWh+ahoybop4bpopEm5Zu+54mHJuWOi+e8qeWMhSbpn7PpopEm5YW25a6DJyxcXG4gICAgICAgIGlkOiAnJmZvbGRlciZkb2MmdmlkZW8maW1hZ2UmcGFja2FnZSZtdXNpYyZvdGhlcidcXG4gICAgfV07XFxuICAgIGRhdGFDbGFzcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgY2xhc3NUb3AoaW5kZXgsIGl0ZW0sIGhvc3QsIGQsIDEsIDAsICdjJywgJycsICcnLCAwLCAyKTtcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn8J+UjScsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG15VVJMKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGlucHV0ID0gZ2V0VmFyKCdrZXl3b3JkJywn5bCR5aWzJyk7XFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZVBhcnNlU2VhcmNoVXJsKGlucHV0LCBteVVSTCk7XFxuICAgICAgICB9LCBNWV9VUkwpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTtcXG5cXG4gICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbGlzdHNcXFwiKS5jb2RlSGlzdG9yeVNlYXJjaChNWV9VUkwpO1xcbiAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9saXN0c1xcXCIpLmNvZGVIaXN0b3J5VmlldyhNWV9VUkwpO1xcbiAgICBldmFsKCQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZUhpc3RvcnlQYW4pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgfSk7XFxufVxcbmxldCBpbmRleCA9IGdldE15VmFyKGhvc3QgKyAnY2luZGV4MCcsICcwJyk7XFxubGV0IGMwID0gZ2V0TXlWYXIoaG9zdCArICdjMCcsICdodHRwczovL21pYW9zb3UuZnVuJyk7XFxudmFyIGJhc2ljVXJsID0gYzA7XFxubGV0IGMxID0gZ2V0TXlWYXIoaG9zdCArICdjMScsICcnKTtcXG5sZXQgYzIgPSBnZXRNeVZhcihob3N0ICsgJ2MyJywgJycpO1xcbmxldCB1cmxTO1xcbnZhciBzID0gZ2V0VmFyKCdrZXl3b3JkJywn5bCR5aWzJykudHJpbSgpO1xcbmxldCBrZXl3b3JkID0gcztcXG52YXIgcGFnZSA9IE1ZX1BBR0U7XFxubGV0IGh0bWw7XFxuc3dpdGNoIChjMCkge1xcbiAgICBjYXNlICdodHRwczovL21pYW9zb3UuZnVuJzpcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBsZXQga2V5ID0gXFxcIjRPVG9TY1VGT2FlVlRySEVcXFwiO1xcbiAgICAgICAgICAgIGxldCBpdiA9IFxcXCI5Q0xHYW8xdkhLcW0xN096XFxcIjtcXG4gICAgICAgICAgICB1cmxTID0gJ2h0dHBzOi8vbWlhb3NvdS5mdW4vYXBpL3NlY2VuZHNlYXJjaD9uYW1lPScgKyBrZXl3b3JkICsgJyZwYWdlTm89JyArIE1ZX1BBR0UgKyAnJnR5cGU9JyArIGMyICsgJyZmcm9tPScgKyBjMTtcXG4gICAgICAgICAgICBsb2codXJsUyk7XFxuICAgICAgICAgICAgaHRtbCA9IGdldEh0bWxDb250ZW50KHVybFMpO1xcbiAgICAgICAgICAgIHRyeXtsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7XFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBqc29uLmRhdGEubGlzdDtcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGxpc3QpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGRlKGtleSwgaXYsIGxpc3QudXJsLCAnQUVTL0NCQy9QS0NTN1BhZGRpbmcnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gbGlzdC5uYW1lLnJlcGxhY2UoLzwuKj8+L2csICcnKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoZ2V0VmFyKCdrZXl3b3JkJyksICdnaScpLCBtID0+IGNvbG9yUihtLCAnRkYwMDAwJykpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5mcm9tLnJlcGxhY2UoL2FsaS4qLywgJ+mYv+mHjOS6keebmCcpLnJlcGxhY2UoL2JhaWR1LiovLCAn55m+5bqm572R55uYJykucmVwbGFjZSgvcXVhcmsuKi8sICflpLjlhYvnvZHnm5gnKS5yZXBsYWNlKC91Yy4qLywgJ1VD572R55uYJyksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQodXJsICsgJyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbGlzdHNcXFwiKS5zdG9yZUhpc3RvcnlWaWV3KGlucHV0LCB0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZVBhcnNlVXJsKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSk7fWNhdGNoKGUpe31cXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgY2FzZSAnaHR0cHM6Ly93d3cuY29kZWxpY2VuY2UuY24nOlxcbiAgICAgICAge1xcbiAgICAgICAgICAgIHVybFMgPSBjMCArICcvJyArIHMgKyAnP3BhZ2U9JyArIHBhZ2U7XFxuICAgICAgICAgICAgbG9nKHVybFMpO1xcbiAgICAgICAgICAgIGlmIChnZXRNeVZhcihob3N0ICsgdXJsUykgJiYgL2RhdGFfc2l6ZS8udGVzdChnZXRNeVZhcihob3N0ICsgdXJsUykpKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSBnZXRNeVZhcihob3N0ICsgdXJsUyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbCh5YW56aGVuZygnLnInLCBjMCwgYzAsIHMpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3RVcmwgPSBnZXRWYXIoYzAgKyBzKTtcXG4gICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VXJsKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VhcmNoVXJsID0gcmVkaXJlY3RVcmwgKyBcXFwiP3A9XFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChzZWFyY2hVcmwpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaG9zdCArIHVybFMsIGh0bWwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYubGlzdCYmdWxcXFwiKTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1dGl0bGUgPSBwZGZoKGl0LCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgdXNlcmlhbCA9IHBkZmgoaXQsIFxcXCJsaSYmZGF0YV9zaXplXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGQoaXQsIFxcXCJhJiZocmVmXFxcIiwgYzApO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHV0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgoYzAsIHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybHJlZCA9IGMwICsgcGRmaChyZXF1ZXN0KGlucHV0KSwgXFxcIi5kb3duJiZhJiZocmVmXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybHJlZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IEpTT04ucGFyc2UoaHRtbCkuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9saXN0c1xcXCIpLnN0b3JlSGlzdG9yeVZpZXcodXJsLCB0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZVBhcnNlVXJsKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBjMCwgdXRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IHVzZXJpYWwsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgY2FzZSAnaHR0cHM6Ly9odW5oZXBhbi5jb20nOlxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGxldCB0ID0gYzEgPT0gJycgPyAnJyA6IChjMSA9PSAnYmFpZHUnID8gJ0JEWScgOiAoYzEgPT0gJ3F1YXJrJyA/ICdRVUFSSycgOiAoYzEgPT0gJ2FsaScgPyAnQUxZJyA6IChjMSA9PSAndWMnID8gJ1VDJyA6ICcnKSkpKTtcXG4gICAgICAgICAgICB1cmxTID0gYGh0dHBzOi8vaHVuaGVwYW4uY29tL3NlYXJjaD9mcm9tPXdlYiZxPSR7a2V5d29yZH0mcGFnZT0ke3BhZ2V9JnNpemU9NTAmdHlwZT0ke3R9YDtcXG4gICAgICAgICAgICBsb2codXJsUyk7XFxuICAgICAgICAgICAgaHRtbCA9IGdldE15VmFyKHVybFMpO1xcbiAgICAgICAgICAgIGlmICghaHRtbCkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gcG9zdCgnaHR0cHM6Ly9odW5oZXBhbi5jb20vdjEvc2VhcmNoJywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJodHRwczovL2h1bmhlcGFuLmNvbS9cXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJxXFxcIjoga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBcXFwid2ViXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwicGFnZVxcXCI6IE1ZX1BBR0UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcInNpemVcXFwiOiA1MCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IHQsXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKHVybFMsIGh0bWwpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRyeXtsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7XFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBqc29uLmRhdGEubGlzdC5maWx0ZXIoeCA9PiAhL+OAkOW5tOi0p+iKguOAkS8udGVzdCh4LmRpc2tfbmFtZSkpO1xcbiAgICAgICAgICAgIGxpc3QuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmRpc2tfbmFtZS5yZXBsYWNlKC88ZW0+KC4qPyk8XFxcXC9lbT4vZywgbSA9PiBjb2xvclIobS5yZXBsYWNlKC88XFxcXC8/ZW0+L2csICcnKSwgJ0ZGMDAwMCcpKSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IC9hbGkvLnRlc3QobGlzdC5saW5rKSA/ICfpmL/ph4zkupHnm5gnIDogKC9iYWlkdS4qLy50ZXN0KGxpc3QubGluaykgPyAn55m+5bqm572R55uYJyA6ICgvcXVhcmsuKi8udGVzdChsaXN0LmxpbmspID8gJ+WkuOWFi+e9keebmCcgOiAoL3VjLy50ZXN0KGxpc3QubGluaykgPyAnVUPnvZHnm5gnIDogJycpKSksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQobGlzdC5saW5rICsgJyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbGlzdHNcXFwiKS5zdG9yZUhpc3RvcnlWaWV3KGlucHV0LCB0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZVBhcnNlVXJsKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGxpc3QuZGlza19uYW1lLnJlcGxhY2UoLzxcXFxcLz9lbT4vZywgJycpKSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSk7fWNhdGNoKGUpe31cXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgY2FzZSAnaHR0cDovL3d3dy5keWRoaHkuY29tJzpcXG4gICAgICAgIHtcXG4gICAgICAgICAgICB1cmxTID0gYGh0dHA6Ly93d3cuZHlkaGh5LmNvbS9wYWdlLyR7cGFnZX0vP3M9JHtzfWA7XFxuICAgICAgICAgICAgbG9nKHVybFMpO1xcbiAgICAgICAgICAgIGh0bWwgPSBnZXRIdG1sQ29udGVudCh1cmxTKTtcXG4gICAgICAgICAgICBsZXQgbGlzdCA9IHBkZmEoaHRtbCwgJy5jb250ZW50LWxpc3QmJi5wb3N0Jyk7XFxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChsaXN0KSA9PiB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChsaXN0LCBcXFwiLmVudHJ5LXRpdGxlJiZUZXh0XFxcIikucmVwbGFjZShcXFwi6Zi/6YeM5LqR55uYIC0gXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogcGRmaChsaXN0LCBcXFwiLmVudHJ5LXN1bW1hcnkmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogcGRmaChsaXN0LCBcXFwiaW1nJiZkYXRhLXNyY3x8c3JjXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkjIycgKyBwZGZoKGxpc3QsIFxcXCJhJiZocmVmXFxcIikgKyAnI25vSGlzdG9yeSMnKS5ydWxlKChjMCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJjKGZjKCdodHRwczovL2dpdGVlLmNvbS9taXN0eXdhdGVyL2hpa2VyX2luZm8vcmF3L21hc3Rlci9naXRodWJwcm94eS5qc29uJykgKyAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21pc3R5d2F0ZXIvaGlrZXIvbWFpbi9mJywgMjQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChNWV9VUkwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZVBhZ2UgPSBwZGZoKGh0bWwsICdoMS5lbnRyeS10aXRsZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZhKGh0bWwsICdib2R5JiZmaWVsZHNldCcpLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmYShodG1sLCAnYm9keSYmZmllbGRzZXQnKS5mb3JFYWNoKChpdCwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cm9uZ1IoKGluZGV4ID09IDAgPyAn572R55uY5LiL6L29JyA6ICfno4HlipvkuIvovb0nKSwgJzA3YTdlMScpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb25fZG93bjUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmYShpdCwgJ2JvZHkmJmZpZWxkc2V0PionKS5zbGljZSgxKS5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmEoaXRlbSwgJ2JvZHkmJmxpJykubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZhKGl0ZW0sICdib2R5JiZsaScpLmZvckVhY2goKGxpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzbWFsbChwZGZoKGxpLCAnYm9keSYmVGV4dCcpLCA1NTU1NTUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChwZGZoKGxpLCAnYSYmaHJlZicpKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbGlzdHNcXFwiKS5zdG9yZUhpc3RvcnlWaWV3KGlucHV0LCB0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9saXN0c1xcXCIpLmNvZGVQYXJzZVVybChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGl0bGVQYWdlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgoaXRlbSwgJ2EmJmhyZWYnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJChwZGZoKGl0ZW0sICdhJiZocmVmJykpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuc3RvcmVIaXN0b3J5VmlldyhpbnB1dCwgdGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9saXN0c1xcXCIpLmNvZGVQYXJzZVVybChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aXRsZVBhZ2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAnYSYmaHJlZicpID8gc21hbGwocGRmaChpdGVtLCAnYm9keSYmVGV4dCcpLCA1NTU1NTUpIDogc21hbGwocGRmaChpdGVtLCAnYm9keSYmVGV4dCcpLCAnMDdhN2UxJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZmEoaHRtbCwgJ2JvZHkmJi5lbnRyeS1jb250ZW50PionKS5maWx0ZXIoeCA9PiAhL3N0eWxlfGRpdi8udGVzdCh4KSkuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChpdGVtLCAnYSYmaHJlZicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gcGRmaChpdGVtLCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwd2QgPSAvcGFuXFxcXC5iYWlkdS8udGVzdChpdGVtKSAmJiAhL3B3ZC8udGVzdCh1cmwpICYmIC/lr4bnoIEvLnRlc3QoaXRlbSkgPyBwZGZoKGl0ZW0sICdib2R5JiZUZXh0JykubWF0Y2goL+WvhueggS4qPyhbYS16MC05XXs0fSkvKVsxXSA6ICcnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHB3ZCA/IHVybCArICc/cHdkPScgKyBwd2QgOiB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJCh1cmwpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9saXN0c1xcXCIpLnN0b3JlSGlzdG9yeVZpZXcoaW5wdXQsIHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xpc3RzXFxcIikuY29kZVBhcnNlVXJsKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aXRsZVBhZ2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdhJiZocmVmJykgPyBzbWFsbChwZGZoKGl0ZW0sICdib2R5JiZUZXh0JyksIDU1NTU1NSkgOiBzbWFsbChwZGZoKGl0ZW0sICdib2R5JiZUZXh0JyksICcwN2E3ZTEnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmlnX2JpZ19ibGFua19ibG9jaycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdiaWdfYmlnX2JsYW5rX2Jsb2NrJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBjMCksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICBkZWZhdWx0OlxcbiAgICAgICAge1xcbiAgICAgICAgICAgIC8vdHJ5IHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBjb252ZXJ0VG9UZW1wbGF0ZVN0cmluZyhjb2RlKSB7XFxuICAgICAgICAgICAgICAgIGxldCB0ZW1wbGF0ZVN0cmluZyA9IGNvZGVcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXFxcXCIvZywgJ1xcXCInKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcXFxcXFxcXC4vZywgJ1xcXFwuJylcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXFxcXFxcXFxcXFxcXC8vZywgJ1xcXFxcXFxcLycpXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxuL2csICdcXFxcbicpXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXlxcXCJ8XFxcIiQvZywgJycpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGVTdHJpbmc7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlRmluZChqc29uZGF0YSkge1xcbiAgICAgICAgICAgICAgICBqc29uZGF0YSA9IGBcXG4gICAgICAgICAgICAgICAgdmFyIGJhc2ljVXJsID0gJHtKU09OLnN0cmluZ2lmeShiYXNpY1VybCl9O1xcbiAgICAgICAgICAgICAgICBsZXQgcyA9ICR7SlNPTi5zdHJpbmdpZnkocyl9O1xcbiAgICAgICAgICAgICAgICBsZXQgcGFnZSA9ICR7SlNPTi5zdHJpbmdpZnkocGFnZSl9O1xcbiAgICAgICAgICAgICAgICAke2pzb25kYXRhfVxcbiAgICAgICAgICAgIGA7XFxuICAgICAgICAgICAgICAgIC8vbG9nKGpzb25kYXRhKTtcXG4gICAgICAgICAgICAgICAgbGV0IGV2YWxGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihgXFxuICAgICAgICAgICAgICAgIHJldHVybiAoZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgICAgICAke2pzb25kYXRhfVxcbiAgICAgICAgICAgICAgICB9KSgpO1xcbiAgICAgICAgICAgIGApO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZhbEZ1bmN0aW9uKCk7O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBkZWFsUnVsZUZvckh0bWwoaHRtbCwgcnVsZSwgYmFzaWNVcmwpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCFydWxlKSByZXR1cm47XFxuICAgICAgICAgICAgICAgIHJ1bGUgPSBydWxlLnNwbGl0KFxcXCJAanM9XFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlMCA9IHJ1bGUuYXQoMCk7XFxuICAgICAgICAgICAgICAgIGxldCB0ID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGlmIChydWxlMCkge1xcbiAgICAgICAgICAgICAgICAgICAgdCA9IHBkZmgoaHRtbCwgcnVsZTApO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdCA9IGh0bWxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAocnVsZS5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFxcXCJpbnB1dFxcXCIsIFxcXCIkJFxcXCIsIFxcXCJiYXNpY1VybFxcXCIsICdcXFwidXNlIHN0cmljdFxcXCI7cmV0dXJuICcgKyBydWxlLmF0KDEpKSh0LCBodG1sLCBiYXNpY1VybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlU2VhcmNoSHRtbCh1cmwsIHJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaCh1cmwpO1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBydWxlLnNwbGl0KFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IHBkZmEoaHRtbCwgcnVsZXMuYXQoMCkpO1xcbiAgICAgICAgICAgICAgICBpZiAoIWxpc3QgfHwgIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwiSFRNTDrliJfooajop6PmnpDkuLrnqbpcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IFtdO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VybCA9IGRlYWxSdWxlRm9ySHRtbChpdCwgcnVsZXMuYXQoMiksIHVybCk7XFxuICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBkZWFsUnVsZUZvckh0bWwoaXQsIHJ1bGVzLmF0KDEpLCB1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogY3VybC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikgPyBjdXJsIDogKGdldEhvbWUodXJsKSArIGN1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlYWxSdWxlRm9ySHRtbChpdCwgcnVsZXMuYXQoMyksIHVybCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogZGVhbFJ1bGVGb3JIdG1sKGl0LCBydWxlcy5hdCg0KSwgdXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL3RyeSB7XFxuICAgICAgICAgICAgdmFyIGpzb25kYXRhID0ganNvblNlYXJjaFtpbmRleCAtIDRdO1xcbiAgICAgICAgICAgIGJhc2ljVXJsID0ganNvbmRhdGEuYmFzaWNVcmw7XFxuICAgICAgICAgICAgbGV0IGRhdGFGaW5kQWxpVXJsO1xcbiAgICAgICAgICAgIGxldCBkYXRhRmluZCA9IFtdO1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBiYXNpY1VybC5yZXBsYWNlKCcqKicsIHMpLnJlcGxhY2UoJ2Z5cGFnZScsIHBhZ2UpO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGlmIChqc29uZGF0YS5ydWxlVHlwZSA9PSAnSFRNTCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRhdGFGaW5kID0gcGFyc2VTZWFyY2hIdG1sKHVybCwganNvbmRhdGEuZmluZCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBkYXRhRmluZCA9IHBhcnNlRmluZChqc29uZGF0YS5maW5kKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkYXRhRmluZCA9IGRhdGFGaW5kLmZpbHRlcih4ID0+IC9odHRwfG1hZ25ldC8udGVzdCh4LnVybCkpO1xcbiAgICAgICAgICAgICAgICBkYXRhRmluZC5mb3JFYWNoKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0eHRMYXp5UnVsZSA9IFxcXCJAbGF6eVJ1bGU9LmpzOihcXFxcbigpID0+IHtcXFxcbmxldCB0aXRsZT1pbnB1dC5zcGxpdCgnQEAnKVsxXTtpbnB1dD1pbnB1dC5zcGxpdCgnQEAnKVswXTtcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHR4dEhpc3RvcnlWaWV3ID0gXFxcIjtsZXQgaGlzdG9yeVZpZXcgPSBzdG9yYWdlMC5nZXRJdGVtKCdoaXN0b3J5VmlldycsIFtdKTtcXFxcbmlmICghaGlzdG9yeVZpZXcuaW5jbHVkZXModGl0bGUrJ0BAJytpbnB1dCkpIHtcXFxcbmhpc3RvcnlWaWV3LnB1c2godGl0bGUrJ0BAJytpbnB1dCk7XFxcXG59XFxcXG5zdG9yYWdlMC5zZXRJdGVtKCdoaXN0b3J5VmlldycsIGhpc3RvcnlWaWV3KTtcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHR4dFBhcnNlVXJsID0gJ2lmICgvYmFpZHUvLnRlc3QoaW5wdXQpKSB7XFxcXG5wdXRWYXIoXFxcXFxcXCJ1cmxCYWlkdVxcXFxcXFwiLCBpbnB1dCk7XFxcXG5yZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UvbGlzdD9ydWxlPVxcXFxcXFxcdTc2N2VcXFxcXFxcXHU1ZWE2XFxcXFxcXFx1N2Y1MVxcXFxcXFxcdTc2ZDgmcmVhbHVybD1cXFxcXFxcIiArIGlucHV0O1xcXFxufSBlbHNlIHtcXFxcbiBpZiAoL2FsaXl1bmRyaXZlfGFsaXBhbnxxdWFya3x1Y1xcXFxcXFxcLi8udGVzdChpbnB1dCkpIHtcXFxcbmNvbnN0IGNvbmZpZyA9IHvkvp3otZY6IFxcXFxcXFwiaHR0cHM6Ly9jb2RlYmVyZy5vcmcvc3JjNDg1OTc5NjIvaGsvcmF3L2JyYW5jaC9KdS9TcmNQYXJzZVMuanNcXFxcXFxcIn07XFxcXG5yZXF1aXJlKGNvbmZpZy7kvp3otZYubWF0Y2goL2h0dHAocyk/OlxcXFxcXFxcL1xcXFxcXFxcLy4qXFxcXFxcXFwvLylbMF0gKyBcXFxcXFxcIlNyY1BhcnNlUy5qc1xcXFxcXFwiKTtcXFxcbnJldHVybiBTcmNQYXJzZVMu6IGa6ZiFKGlucHV0KTtcXFxcbn0gZWxzZSB7XFxcXG5yZXR1cm4gaW5wdXQ7XFxcXG59XFxcXG59XFxcXG59XFxcXG4pKCknO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHR4dElucHV0RGVhbCA9ICc7aWYodHlwZW9mKGlucHV0KT09XFxcIm9iamVjdFxcXCIpe2lucHV0PWlucHV0WzBdO30nO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdC5pbWcgJiYgIWl0LnBpY191cmwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5jb2xfdHlwZSA9ICd0ZXh0XzEnO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaXQudXJsID0gaXQudXJsICsgJ0BAJyArIGl0LnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgaXQudXJsID0gaXQudXJsICsgdHh0TGF6eVJ1bGU7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWpzb25kYXRhLmZpbmRBbGlVcmwpIHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbmRhdGEucnVsZVR5cGUgIT0gJ0hUTUwnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQudXJsID0gaXQudXJsICsganNvbmRhdGEuZmluZEFsaVVybC5yZXBsYWNlKC9yZXR1cm4vLCAnaW5wdXQ9JykgKyB0eHRJbnB1dERlYWw7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25kYXRhLmZpbmRBbGlVcmwuc3RhcnRzV2l0aChcXFwiQGpzPVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQudXJsID0gaXQudXJsICsgJ2lucHV0PScgKyBqc29uZGF0YS5maW5kQWxpVXJsLnJlcGxhY2UoL0Bqcz0vLCAnJykgKyB0eHRJbnB1dERlYWw7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXC5qcy8udGVzdChqc29uZGF0YS5maW5kQWxpVXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganMgPSBqc29uZGF0YS5maW5kQWxpVXJsLnNwbGl0KCcuanM6JylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganMgPSAnaW5wdXQnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC51cmwgPSBpdC51cmwgKyAnaW5wdXQ9cGRmaChmZXRjaChpbnB1dCksXFxcIicgKyBqc29uZGF0YS5maW5kQWxpVXJsLnNwbGl0KCcuanMnKVswXSArICdcXFwiKTsnICsgJ2lucHV0PScgKyBqcyArIHR4dElucHV0RGVhbDtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGl0LnVybCA9IGl0LnVybCArIHR4dEhpc3RvcnlWaWV3ICsgdHh0UGFyc2VVcmw7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhkYXRhRmluZCk7XFxuICAgICAgICAgICAgICAgIGlmIChkYXRhRmluZC5sZW5ndGggIT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgZCA9IGQuY29uY2F0KGRhdGFGaW5kKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICd+fn7msqHmnInkuoZ+fn4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICd+fn7msqHmnInkuoZ+fn4nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6K+05piOXCIsXCJwYXRoXCI6XCLor7TmmI5cIixcInJ1bGVcIjpcImpzOlxcbmxldCB0aW1lID0gZ2V0SXRlbShcXFwiZmlyc3RcXFwiLCBcXFwiXFxcIikgPyA2IDogMjA7XFxubGV0IGlkID0gRGF0ZS5ub3coKTtcXG5sZXQgY29udGVudCA9IGBcXG4gICAgMS4g5pys5bCP56iL5bqP5omA5pyJ5Luj56CB5YWo6YOo5byA5rqQ77yM5LiU5pys6KeE5YiZ5Li65a2m5Lmg55uu55qE77yM6K+35LqO5a+85YWlMjTlsI/ml7blhoXliKDpmaTvvIHvvIHvvIFcXG4gICAgMi4g5pys5bCP56iL5bqPPGI+5a6M5YWo5YWN6LS5PC9iPu+8jOWmguaenOS9oOaYr+S7mOi0uei0reS5sOeahOaBreWWnOS9oOiiq+mql+S6huOAglxcbiAgICAzLiDmnKzlsI/nqIvluo/nmoTmoLjlv4Pku6PnoIHmmK/lnKhqb2XniYjjgIznmb7luqbnvZHnm5jjgI3nmoTln7rnoYDkuIrmlbTlkIjkuoZ6aGFv5aSn5L2s55qE54mI5pys77yM5oSf6LCi5Lik5L2N5aSn5L2s44CCXFxuICAgIDQuIOaQnOe0oua6kOiwg+eUqOS6huOAjOS6keebmOWQmy7nroDjgI3nmoTmkJzntKLop4TliJnvvIzmhJ/osKJATG95RGdJa+Wkp+S9rOOAglxcbiAgICBcXG4gICAgPGI+5byA5aeL5L2/55So5pys6KeE5YiZ5Y2z5Luj6KGo6YG15a6I6KeE5YiZ5p2h5L6LPC9iPlxcbiAgICDlvZPliY3niYjmnKzvvJoke01ZX1JVTEUudmVyc2lvbn1cXG4gICAgICAgIGA7XFxubGV0IHVwZGF0ZUluZm8gPSAn5pS55oiQ56m65qC85riF5pCc57Si6K+NLOS/ruWkjeaQnOe0ouaXoOazlei/m+S6jOe6p+mhtemdoic7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08c3Ryb25nPuS9v+eUqOWJjemhu+efpTwvc3Ryb25nPlxcXCIuYmlnKCksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogY29udGVudC50cmltKCkucmVwbGFjZSgvXFxcXG5cXFxccyo/L2csIFxcXCI8YnI+XFxcIiksXFxuICAgIFxcXCJjb2xfdHlwZVxcXCI6IFxcXCJyaWNoX3RleHRcXFwiXFxufSwge1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiXFxufSwge1xcbiAgICB0aXRsZTogdGltZSArIFxcXCLnp5LlkI7nu6fnu61cXFwiLFxcbiAgICB1cmw6IFxcXCJ0b2FzdDovL+ivt+iupOecn+mYheivu+S7peS4iuWGheWuuVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogaWQgKyBcXFwidGltZXJcXFwiXFxuICAgIH1cXG59KTtcXG5pZiAodXBkYXRlSW5mbykge1xcbiAgICBjb25maXJtKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pu05paw5YaF5a65XFxcIixcXG4gICAgICAgIGNvbnRlbnQ6IHVwZGF0ZUluZm8sXFxuICAgICAgICBjb25maXJtKCkge30sXFxuICAgICAgICBjYW5jZWwoKSB7fVxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1xcbndoaWxlICh0aW1lICE9IDApIHtcXG4gICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCgxMDAwKTtcXG4gICAgdGltZSAtPSAxO1xcbiAgICB1cGRhdGVJdGVtKGlkICsgXFxcInRpbWVyXFxcIiwge1xcbiAgICAgICAgdGl0bGU6IHRpbWUgKyBcXFwi56eS5ZCO57un57utXFxcIlxcbiAgICB9KTtcXG59XFxudXBkYXRlSXRlbShpZCArIFxcXCJ0aW1lclxcXCIsIHtcXG4gICAgdGl0bGU6IFxcXCLigJzigJzmiJHlkIzmhI/ku6XkuIropoHmsYLigJ3igJ1cXFwiLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgIHNldEl0ZW0oXFxcImZpcnN0XFxcIiwgU3RyaW5nKHYpKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oSf6LCi5oKo55qE55CG6KejXFxcIjtcXG4gICAgfSwgTVlfUlVMRS52ZXJzaW9uKSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbn0pO1wifV0iLCJpY29uIjoiaHR0cHM6Ly9wYW5uc3MuYmRzdGF0aWMuY29tL20tc3RhdGljL2Jhc2Uvc3RhdGljL2ltYWdlcy9mYXZpY29uLmljbyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment