xiaomianao666

小程序:JavDB

Mar 26th, 2024
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@JavDB@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiSmF2REIiLCJhdXRob3IiOiJSIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly9qYXZkYjM2NS5jb20vIyNmeXBhZ2UiLCJ2ZXJzaW9uIjoyMDI0MDEyNSwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxudmFyIGQgPSBbXTtcbmFkZExpc3RlbmVyKFwib25DbG9zZVwiLCAkLnRvU3RyaW5nKCgpID0+IHtcbiAgICBsZXQga2V5cyA9IGxpc3RNeVZhcktleXMoKTtcbiAgICBmb3IgKGxldCBpdCBvZiBrZXlzKSB7XG4gICAgICAgIGNsZWFyTXlWYXIoaXQpO1xuICAgIH1cbn0pKTtcblxudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7wqBcbiAgICByZXR1cm4gJyNGRjY2OTknO8KgwqDCoMKgwqDCoMKgXG4gICAgLy9yZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7wqDCoMKgwqDCoFxufVxuY29uc3Qg5LiL5LiA6aG1ID0gXCJwZChodG1sLCAnYTptYXRjaGVzKOS4i+S4gCkmJmhyZWYnKVwiO1xuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3lpJykpLnJ1bGUpXG5NWV9VUkwgPSBNWV9VUkwuc3BsaXQoJyMjJylbMV1cbmxldCB0cnVlX3VybCA9IGdldFRydWVsaW5rKE1ZX1JVTEUudXJsLCBNWV9VUkwsIHBhZ2UpO1xuTVlfVVJMID0gdHJ1ZV91cmw7XG5sb2codHJ1ZV91cmwpO1xuXG52YXIgaHRtbCA9IGZldGNoKHRydWVfdXJsLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBjb29raWU6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfY29va2llLnR4dCcpIHx8ICcnLFxuICAgIH0sXG4gICAgcmVkaXJlY3Q6IGZhbHNlXG59KTtcbmlmICgvcmVkaXJlY3RlZC8udGVzdChodG1sKSYmIS9cXC9mYzIvLnRlc3QodHJ1ZV91cmwpKSB7XG4gICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2Nvb2tpZS50eHQnLCAnJyk7XG4gICAgaHRtbCA9IGZldGNoKHRydWVfdXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JykgfHwgJycsXG4gICAgICAgIH0sXG4gICAgICAgIHJlZGlyZWN0OiBmYWxzZVxuICAgIH0pXG59XG52YXIg5a6a5L2N5L+h5oGvID0gW3tcbiAgICDlpKfnsbvlrprkvY06ICcubmF2YmFyLXN0YXJ0JiYubmF2YmFyLWxpbmsnLFxuICAgIOWinuWKoDogWyc8YSBocmVmPVwiJyArIE1ZX0hPTUUgKyAnXCI+6aaW6aG1PC9BPicsICc8YSBocmVmPVwiL2Fib3V0XCI+5pS26JePPC9BPicsICc8YSBocmVmPVwiL3VzZXJzXCI+5oiR55qEPC9BPicsIF0sXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo8J+UpSkpJyxcbiAgICDpk77mjqXlpITnkIY6ICh1KSA9PiB7XG4gICAgICAgIGxldCB1cmwgPSB1LnJlcGxhY2UoL3R5cGUoXFwvXFxkKylcXC5odG1sLywgJ3Nob3ckMS0tLS0tLS0tLS0tLmh0bWwnKTtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgIH1cbn0sIHtcbiAgICDkuIDnuqflrprkvY06ICdib2R5JiYudGFic3x8LmJ1dHRvbnMuaGFzLWFkZG9ucycsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo54Ot5pKtfDI1MHzlsIHpnaJ854yc5L2gKSknLFxufSwge1xuICAgIOS4gOe6p+WumuS9jTogJyN0YWdzJiZkdCcsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo5pu05aSaKSknLFxufSwge1xuICAgIOS4gOe6p+WumuS9jTogJy5hY3Rvci1maWx0ZXImJi5maWx0ZXItc2xpZGVyOm1hdGNoZXMo6Lqr6auYKScsXG4gICAg5bCP57G7OiAnYm9keSYmLmZpbHRlci1zbGlkZXInLFxuICAgIOihpeWFhTogW1xuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTQ3JmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xMzAtMTQ3JyxcbiAgICAgICAgJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTE0NyUyQzE2MCZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTQ3LTE2MCcsXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xNjAlMkMxNjUmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjE2MC0xNjUnLFxuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTY1JTJDMTY5JmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNjUtMTY5JyxcbiAgICAgICAgJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTE2OSUyQzE3NSZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTY5LTE3NScsXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xNzUlMkMxODUmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjE3NS0xODUnLFxuICAgIF0sXG4gICAg5qCH6aKYOiAnVGV4dCcsXG4gICAg6ZO+5o6lOiAnaW5wdXQmJmlkLmpzOmlucHV0LnJlcGxhY2UoXCJhZi1oZWlnaHQtaW5wdXRcIixcIi9hY3RvcnMvY2Vuc29yZWRcIiknLFxufSwge1xuICAgIOS4gOe6p+WumuS9jTogJy5hY3Rvci1maWx0ZXImJi5maWx0ZXItc2xpZGVyOm1hdGNoZXMo572p5p2vKScsXG4gICAg5bCP57G7OiAnYm9keSYmLmZpbHRlci1zbGlkZXInLFxuICAgIOihpeWFhTogW1xuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD0wJTJDMSZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkEnLFxuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD0xJTJDMyZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkJDJyxcbiAgICAgICAgJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9MyUyQzQmYnVzdD03MCUyQzExNSZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj5EJyxcbiAgICAgICAgJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9NCUyQzYmYnVzdD03MCUyQzExNSZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj5FRicsXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTYlMkM4JmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+R0gnLFxuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD04JTJDMTAmYnVzdD03MCUyQzExNSZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj5JSicsXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTEwJTJDMTUmYnVzdD03MCUyQzExNSZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj5LficsXG4gICAgXSxcbiAgICDmoIfpopg6ICdUZXh0JyxcbiAgICDpk77mjqU6ICdpbnB1dCYmaWQuanM6aW5wdXQucmVwbGFjZShcImFmLWN1cC1pbnB1dFwiLFwiL2FjdG9ycy9jZW5zb3JlZFwiKScsXG59XVxuY29uc3QgZGMgPSBkeW5hbWljQ2xhc3Moe1xuICAgIOWIhuexu+minOiJsjogZ2V0UmFuZ2VDb2xvcnMoKVxufSk7XG5kYy7lvIDlkK/mipjlj6AoZmFsc2UpXG5kYy7lvIDlkK/mkJzntKIoKVxuZGMu5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeS/oeaBrylcblxuXG5pZiAodHJ1ZV91cmwuaW5jbHVkZXMoJy9hYm91dCcpKSB7XG4gICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS/mlLbol48nKSkucnVsZSlcbn0gZWxzZSBpZiAodHJ1ZV91cmwuaW5jbHVkZXMoJy91c2VycycpKSB7XG4gICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS91c2VycycpKS5ydWxlKVxufSBlbHNlIHtcbiAgICB2YXIgcGFyc2VSdWxlID0ge1xuICAgICAgICBsaXN0OiAnYm9keSYmLml0ZW0nLCAvL+e7n+S4gGl0ZW1cbiAgICAgICAgdGl0bGU6ICcudmlkZW8tdGl0bGUmJlRleHQnLFxuICAgICAgICBkZXNjMTogJy50YWcmJlRleHQnLFxuICAgICAgICBkZXNjOiAnLm1ldGEmJlRleHQnLFxuICAgICAgICBpbWc6ICdpbWd8fGEmJnNyY3x8ZGF0YS1vcmlnaW5hbCcsXG4gICAgICAgIHVybDogJ2EmJmhyZWYnLFxuICAgICAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxuICAgICAgICBpbXQ6IGZhbHNlLFxuICAgICAgICAvL2JhY2tpbWc6IHRydWUsXG4gICAgfVxuXG4gICAgdmFyIHBhcnNlUnVsZTEgPSB7XG4gICAgICAgIGxpc3Q6ICdib2R5JiYuYWN0b3ItYm94JywgLy/nu5/kuIBpdGVtXG4gICAgICAgIHRpdGxlOiAnYSYmdGl0bGUnLFxuICAgICAgICBkZXNjOiAnLm1ldGEmJlRleHQnLFxuICAgICAgICBpbWc6ICdpbWd8fGEmJnNyY3x8ZGF0YS1vcmlnaW5hbCcsXG4gICAgICAgIHVybDogJ2EmJmhyZWYnLFxuICAgICAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzMnLFxuICAgICAgICBpbXQ6IGZhbHNlLFxuICAgICAgICAvL2JhY2tpbWc6IHRydWUsXG4gICAgfVxuXG4gICAgdmFyIHBhcnNlUnVsZTIgPSB7XG4gICAgICAgIGxpc3Q6ICcjc2VyaWVzJiYuYm94JywgLy/nu5/kuIBpdGVtXG4gICAgICAgIHRpdGxlOiAnc3Ryb25nJiZUZXh0JyxcbiAgICAgICAgZGVzYzogJ3NwYW4mJlRleHQnLFxuICAgICAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2FwaS5idHN0dS5jbi9zamJ6L2FwaS5waHAjXCIpJyxcbiAgICAgICAgdXJsOiAnYSYmaHJlZicsXG4gICAgICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICAgICAgaW10OiBmYWxzZSxcbiAgICAgICAgLy9iYWNraW1nOiB0cnVlLFxuICAgIH1cblxuICAgIHZhciBwYXJzZVJ1bGUzID0ge1xuICAgICAgICBsaXN0OiAnI21ha2VycyYmLmJveCcsIC8v57uf5LiAaXRlbVxuICAgICAgICB0aXRsZTogJ3N0cm9uZyYmVGV4dCcsXG4gICAgICAgIGRlc2M6ICdzcGFuJiZUZXh0JyxcbiAgICAgICAgaW1nOiAnYSYmaHJlZi5qczppbnB1dC5yZXBsYWNlKGlucHV0LFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3ZpZS8zMC5zdmdcIiknLFxuICAgICAgICB1cmw6ICdhJiZocmVmJyxcbiAgICAgICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxuICAgICAgICBpbXQ6IGZhbHNlLFxuICAgICAgICAvL2JhY2tpbWc6IHRydWUsXG4gICAgfVxuICAgIENyZWF0ZS5ydWxlTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUpO1xuICAgIENyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTEpO1xuICAgIENyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTIpO1xuICAgIENyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTMpO1xuICAgIGF1dG9QYWdlKCk7XG59XG5cbnNldFJlc3VsdChkKSIsInNlYXJjaF91cmwiOiJoaWtlcjovL2VtcHR5IyMqKiIsImdyb3VwIjoi5oiR55qE5bCP56iL5bqPIiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGQgPSBbXTtcbmxldCBIT01FID0gXCJoaWtlcjovL2VtcHR5IyNcIiArIE1ZX1JVTEUudXJsLnNwbGl0KFwiIyNcIilbMV07XG5sZXQga2V5ID0gTVlfVVJMLnNwbGl0KFwiIyNcIilbMV07XG5kLnB1c2goe1xuICAgIHRpdGxlOiBcIueCueaIkeW8gOWni+iBmuWQiOaQnOe0olwiICsga2V5LFxuICAgIHVybDogSE9NRSArIFwiL3NlYXJjaD9mPWFsbCZwYWdlPWZ5cGFnZSZxPVwiICsga2V5ICsgJ0BydWxlPWpzOiQucmVxdWlyZShcInlqXCIpJyxcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IGtleSxcbiAgICAgICAga2V5OiBrZXlcbiAgICB9XG59KTtcblxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IioiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIvL0BMb3lEZ0lr5aSn5L2s5YaZ55qE6Ieq5Yqo5pu05paw77yM5aSN5Yi26buP6LS05bCx5a6M5LqL77yM5oSf6LCi5aSn5L2s55qE5YiG5LqrXG4vKlxuICAgICAgICAgICAgbGV0IE1ZX0hPTUUgPSBNWV9SVUxFLnVybC5tYXRjaCgvaHR0cHM/OlxcL1xcL1teIy8/Jl0rLylbMF07XG4gICAgICAgICAgICBsZXQgaHRtbCA9IEpTT04ucGFyc2UoZmV0Y2goTVlfSE9NRSx7b25seUhlYWRlcnM6dHJ1ZSx0aW1lb3V0OjUwMDB9KSk7XG5pZiAoaHRtbC5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICBjb25maXJtKHtcbiAgICAgICAgdGl0bGU6IFwi572R5Z2A5LiN6YCaLOaYr+WQpuabtOaWsFwiLFxuICAgICAgICBjb250ZW50OiBcIue/u+WimeWQjuWGjeeCueWHu+ehruWumlxcbuaIluiHquihjOajgOafpee9keWdgFwiLFxuICAgICAgICBjb25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeW9uZ2ppdSA9IFwiaHR0cHM6Ly9qYXZkYi5jb21cIjtcbiAgICAgICAgICAgIGxldCBodG1sID1KU09OLnBhcnNlKGZldGNoKHlvbmdqaXUse29ubHlIZWFkZXJzOnRydWUsdGltZW91dDozMDAwfSkpO1xuICAgICAgICAgICAgaWYgKGh0bWwuc3RhdHVzQ29kZSA9PSAwIHx8ICFodG1sKSB7XG4gICAgICAgICAvL3JldHVybiBcInRvYXN0Oi8v5pu05paw5aSx6LSlLOivt+e/u+WimSzosKLosKJcIlxuICAgICAgICAgICAgICAgY29uZmlybSh7dGl0bGU6J+abtOaWsOWksei0pScsIGNvbnRlbnQ6J+ivt+e/u+WimeWQjuWGjeabtOaWsO+8jOiwouiwoicsIFxuICAgICAgICAgICAgICAgICAgIGNvbmZpcm06JC50b1N0cmluZygoKT0+e3JlZnJlc2hQYWdlKCl9KSwgXG4gICAgICAgICAgICAgICAgICAgY2FuY2VsOiQudG9TdHJpbmcoKCk9Pnt9KX0pXG4gICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgc2hvd0xvYWRpbmcoXCLmraPlnKjojrflj5blj6/nlKjln5/lkI1cIik7XG4gICAgICAgICAgICB2YXIgaG9tZSA9IE1ZX1JVTEUudXJsLm1hdGNoKC9odHRwcz86XFwvXFwvW14jLz8mXSsvKVswXTtcbiAgICAgICAgICAgIHZhciBodG0gPSBmZXRjaCh5b25naml1KVxuICAgICAgICAgICAgdmFyIGhvc3QgPSBwZGZoKGh0bSwgXCJib2R5JiZkYXRhLWRvbWFpblwiKTtcbiAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XG4gICAgICAgICAgICBpZiAoIWhvc3QpIHJldHVybiBcInRvYXN0Oi8v6I635Y+W5aSx6LSlXCI7XG4gICAgICAgICAgICBpZiAoaG9tZSA9PSBob3N0KSByZXR1cm4gXCJ0b2FzdDovL+aYr+acgOaWsOe9keWdgO+8jOivt+eojeWQjuWIt+aWsOivleivlVwiO1xuICAgICAgICAgICAgdG9hc3QoaG9zdCk7XG4gICAgICAgICAgICAvKGh0dHBzPzpcXC9cXC9bXiMvPyZdKykvLnRlc3QoTVlfUlVMRS51cmwpO1xuICAgICAgICAgICAgTVlfUlVMRS51cmwgPSBNWV9SVUxFLnVybC5yZXBsYWNlKFJlZ0V4cC4kMSwgaG9zdCk7XG4gICAgICAgICAgICByZXR1cm4gXCJydWxlOi8vXCIgKyBiYXNlNjRFbmNvZGUoXCLmtbfpmJTop4bnlYzvv6Vob21lX3J1bGXvv6VcIiArIEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbmNlbDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/wn5iHXCI7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgIH1cbiovXG5pZiAocmVxdWVzdCgnaGlrZXI6Ly9ob21lQOejgeWKm+WQmy7nroAnKSA9PSAnbnVsbCcpIHtcbiAgICBjb25maXJtKHtcbiAgICAgICAgdGl0bGU6ICfkvp3otZbmo4DmtYsnLFxuICAgICAgICBjb250ZW50OiAn5qOA5rWL5Yiw57y65bCR56OB5Yqb5ZCbLueugFxcbuivt+WvvOWFpSEnLFxuICAgICAgICBjb25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VQYXN0ZShcIuS6kTZvb29vbGUveHh4eHh4L2p1bWdqdXVjenhidXZzYWlcIik7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG4vKnJlZ2lzdGVyRE5TKHtcbiAgICAnamF2ZGIuY29tJzogJ2h0dHBzOi8vMS4xLjEuMS9kbnMtcXVlcnknLFxuICAgICdqYXZkYjM2NS5jb20nOiAnaHR0cHM6Ly8xLjEuMS4xL2Rucy1xdWVyeSdcbn0pOyovIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoOS4gOe6p+WIhuexu+WIl+ihqFwiLFwicGF0aFwiOlwieWlcIixcInJ1bGVcIjpcImpzOlxcbi8qXFxuYnkgzrEoemV0YWxwaGEpXFxu5LiA57qn5bCB6KOFXFxu5Yqo5oCB5YiG57G7IOWIl+ihqOWIm+W7uiDoh6rliqjkuIvkuIDpobVcXG52ZXIgMjAyMzEwMTcgMS4wXFxuKi9cXG5cXG4vL+maj+acuuminOiJslxcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge8KgXFxuICAgIHJldHVybiAnI0ZGNjY5OSc7wqDCoMKgwqDCoMKgwqBcXG4gICAgLy9yZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7wqDCoMKgwqDCoFxcbn1cXG5cXG4vL+WKqOaAgeWIhuexu1xcbmZ1bmN0aW9uIGR5bmFtaWNDbGFzcyhvcHRpb25zKSB7XFxuICAgIGNvbnN0IG9iaiA9IHtcXG4gICAgICAgIC8v6buY6K6k5YC8XFxuICAgICAgICBsYXlvdXQ6IFxcXCJ1bmRlZmluZWRcXFwiLFxcbiAgICAgICAgaHRtbDogXFxcImVtcHR5XFxcIixcXG4gICAgICAgIHBhZ2U6IDAsXFxuICAgICAgICDliIbnsbvpopzoibI6IFxcXCIjRkE3Mjk4XFxcIixcXG4gICAgICAgIOaKmOWPoDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oinXFxcIi5mb250Y29sb3IoXFxcIiMxYWFkMTlcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIOWxleW8gDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oioXFxcIi5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIG9wZW46IHRydWUsXFxuICAgICAgICBzdGF0ZTogTVlfUlVMRS51cmwsXFxuICAgICAgICBzZWFyY2g6IGZhbHNlLFxcbiAgICAgICAgY2xlYXJzOiBbXSxcXG4gICAgICAgIGNsZWFyYWxsOiBbXFxcInlpX2ZpcnN0cGFnZVxcXCJdLFxcbiAgICAgICAgZGVidWc6IGZhbHNlLFxcblxcbiAgICAgICAg6aKE6K6+KHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBwYXJhbSA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbSkuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcXG4gICAgICAgICAgICAgICAgLy8g5a+55q+P5Liq5bGe5oCn5ZCN5omn6KGM5pON5L2cXFxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1bcHJvcGVydHldOyAvLyDojrflj5blsZ7mgKflgLxcXG4gICAgICAgICAgICAgICAgLy8g5Zyo6L+Z6YeM5omn6KGM5oKo55qE5pON5L2cXFxuICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wZXJ0eSArIFxcXCI6XFxcIiArIHZhbHVlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGV2YWxKU1J1bGUoaXRlbSxcXG4gICAgICAgICAgICBqc1J1bGUpIHtcXG4gICAgICAgICAgICBsZXQgcnVsZSA9IGpzUnVsZS5yZXBsYWNlKFxcXCJAanM6XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIHJ1bGUgPSBydWxlLnRyaW0oKTtcXG4gICAgICAgICAgICAvL2xvZygkLnN0cmluZ2lmeShydWxlKSlcXG4gICAgICAgICAgICBsZXQgaW5wdXQgPSBpdGVtO1xcbiAgICAgICAgICAgIGlmIChydWxlLnN0YXJ0c1dpdGgoXFxcIihcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgLyoqXFxuICAgICAgICAgICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcbiAgICAgICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIFxcXCIoKCkgPT4ge1xcXCIgKyBydWxlICsgXFxcIn0pKClcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHRpdGxlUnVsZSA9IGNhdGVnb3J5IHx8IFxcXCJhJiZUZXh0XFxcIjtcXG4gICAgICAgICAgICBpZiAodGl0bGVSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHRpdGxlUnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoc3JjLCB0aXRsZVJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VXJsKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHVybFJ1bGUgPSBjYXRlZ29yeS7pk77mjqUgfHwgXFxcImEmJmhyZWZcXFwiO1xcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwZChzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhdGVnb3J5LumTvuaOpeWkhOeQhiA9PSBcXFwiZnVuY3Rpb25cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IGNhdGVnb3J5LumTvuaOpeWkhOeQhih1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdXJsIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzTnVsbChwYXJhbSkge1xcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PSBudWxsKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNCb29sZWFuKHZhcmlhYmxlKSB7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YXJpYWJsZSAhPT0gXFxcImJvb2xlYW5cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5byA5ZCv5oqY5Y+g6K+35Lyg5YWl5biD5bCU5YC8XFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIOa4hemZpChsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAobGlzdC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLmuIXpmaTmiqXplJk66K+35Lyg5YiX6KGoXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuY2xlYXJzID0gbGlzdDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlhajmuIUobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGMgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIGxpc3QgPSBjLmNvbmNhdChsaXN0KTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyYWxsID0gbGlzdDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDmupDnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLmh0bWwgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnlYzpnaIoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLmxheW91dCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOmhteeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeKtuaAgShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlvIDlkK/mkJzntKIoaW5wdXQpIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5zZWFyY2ggPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlvIDlkK/mipjlj6AoaW5wdXQpIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5pc0Jvb2xlYW4oaW5wdXQpO1xcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIHNldFRpdGxlKGssIGksIHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gayA9PSBpID8gXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyB0LmZvbnRjb2xvcih0aGlzLuWIhuexu+minOiJsikgOiB0O1xcbiAgICAgICAgfSxcXG4gICAgICAgIGFjdGlvbihvYmopIHtcXG4gICAgICAgICAgICByZXR1cm4gW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmuIXpmaTnirbmgIFcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsb2cob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIob2JqLnN0YXRlKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5hbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5jbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgfSwgb2JqKSxcXG4gICAgICAgICAgICB9LCBdO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGNoZWNrUGFyYW0oKSB7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IHt9O1xcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2UgPT0gMCAmJiB0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpemhteeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHRoaXMucGFnZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSBwYWdlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmh0bWwgPT0gXFxcImVtcHR5XFxcIiAmJiB0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpea6kOeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IHRoaXMuaHRtbDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSBodG1sO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dCA9PSBcXFwidW5kZWZpbmVkXFxcIiAmJiB0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeeVjOmdolxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IHRoaXMubGF5b3V0O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IGQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIG9iajtcXG4gICAgICAgIH0sXFxuICAgICAgICDliJvlu7rliqjmgIHliIbnsbsocnVsZU9iaikge1xcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgIGxldCBjYXRlcyA9IFtdO1xcbiAgICAgICAgICAgIGlmIChydWxlT2JqID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBydWxlT2JqID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP5byA5aeLXFxuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLmNoZWNrUGFyYW0oKTtcXG4gICAgICAgICAgICBjb25zdCBwYWdlID0gcGFyYW0u6aG156CBO1xcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBwYXJhbS7mupDnoIE7XFxuICAgICAgICAgICAgY29uc3QgZCA9IHBhcmFtLueVjOmdojtcXG4gICAgICAgICAgICBjb25zdCDnirbmgIEgPSB0aGlzLnN0YXRlO1xcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoO1xcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIGNvbnN0IOaKmOWPoOeKtuaAgSA9IHRoaXMub3BlbjtcXG4gICAgICAgICAgICB2YXIg5bGV5byAID0gdGhpcy7lsZXlvIA7XFxuICAgICAgICAgICAgdmFyIOaKmOWPoCA9IHRoaXMu5oqY5Y+gO1xcbiAgICAgICAgICAgIHZhciDlhajmuIUgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIHZhciDmuIXpmaQgPSB0aGlzLmNsZWFycztcXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+e7k+adn1xcbiAgICAgICAgICAgIGxldCBpbml0X2NhdGUgPSBuZXcgQXJyYXkoMjApLmZpbGwoXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKFxcbiAgICAgICAgICAgICAgICBnZXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnM9JytpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pCc57Si5YWz6ZSu6K+NXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdO1xcbiAgICAgICAgICAgIHJ1bGVPYmouZm9yRWFjaCgoeCkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh4KVxcbiAgICAgICAgICAgICAgICBpZiAoeC5qc29uICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICAgICAgeC5qc29uLm1hcChrID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goSlNPTi5zdHJpbmdpZnkoaykucmVwbGFjZSgvXlxcXFxbfFxcXFxdJC9nLCAnJykpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgLy9jYXRlZ29yaWVzLnB1c2goeC5qc29uKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh4LuS4gOe6p+WumuS9jSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmV2YWxKU1J1bGUoaHRtbCwgeC7kuIDnuqflrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5aSn57G75a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuWkp+exu+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbcGRmYShodG1sLCB4LuWkp+exu+WumuS9jSkuam9pbignXFxcXG4nKV07XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG5cXG5cXG4gICAgICAgICAgICAgICAgdmFyIOS4gOe6pyA9IGxpc3QubWFwKChzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgc2xpc3QgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghKFxcXCLlsI/nsbtcXFwiIGluIHgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgeC7lsI/nsbsgPSBcXFwiYm9keSYmYTpub3QoOm1hdGNoZXMo6aaW6aG1KSk6bm90KGE6bm90KFtocmVmXSkpXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWwj+exuy5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShzLCB4LuWwj+exuyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gcGRmYShzLCB4LuWwj+exuyk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAvLy0t6aKd5aSW5aSE55CGLS1cXG4gICAgICAgICAgICAgICAgICAgIGlmICgoJ+WinuWKoCcgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC7lop7liqAuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgu5aKe5YqgID0gZXZhbCh4LuWinuWKoCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0geC7lop7liqAuY29uY2F0KHNsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmICgoJ+ihpeWFhScgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC7ooaXlhYUuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgu6KGl5YWFID0gZXZhbCh4LuihpeWFhSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gc2xpc3QuY29uY2F0KHgu6KGl5YWFKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIOWumuS9jSA9IHNsaXN0Lm1hcCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgeC7moIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmdldFVybChpdGVtLCB4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCdleHQnIGluIHgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialsnZXh0J10gPSB4LmV4dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiDlrprkvY07XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvL2xvZyjkuIDnuqcpXFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6py5sZW5ndGgpXFxuICAgICAgICAgICAgICAgIGlmICjkuIDnuqcubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCjkuIDnuqcuam9pbihcXFwiXFxcXG5cXFwiKSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICDkuIDnuqcuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChpdGVtLmpvaW4oXFxcIixcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL2xvZyhjYXRlZ29yaWVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmICjmipjlj6DnirbmgIEpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT09IFxcXCIxXFxcIiA/IOaKmOWPoCA6IOWxleW8gCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aXRsZSwgZm9sZCwgdSwgYWxsLCBleHBzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAsIGZvbGQpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFvlsZXlvIAsIOaKmOWPoF0gPSBleHBzO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGQgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeCA9IGZpbmRJdGVtc0J5Q2xzKHRpdGxlICsgJ2NhdGVfYnV0dG9uJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2NhdGVfYnV0dG9uJywgY3gpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyh0aXRsZSArICdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ggPSBzdG9yYWdlMC5nZXRNeVZhcignY2F0ZV9idXR0b24nLCBbXSkubWFwKHggPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Wydjb2xfdHlwZSddID0geFsnY29sX3R5cGUnXSA/IHhbJ2NvbF90eXBlJ10gOiB4Wyd0eXBlJ107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcih0aXRsZSArICdjYXRlX2xpbmUnLCBjeClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qYWxsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHRpdGxlICsgJ2NhdGVfZXhwJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb2xkID09IDEgPyDlsZXlvIAgOiDmipjlj6AsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCA9PT0gXFxcIjFcXFwiID8gXFxcIjBcXFwiIDogXFxcIjFcXFwiKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfUlVMRS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDlhajmuIUsIFvlsZXlvIAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDmipjlj6BcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9leHAnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IHRoaXMuYWN0aW9uKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGw6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsOiDmuIXpmaQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhjYXRlZ29yeSlcXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJfY2F0ZWdvcmllcyA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgLyppZiAo5bCP57G75a6a5L2NLmluY2x1ZGVzKFxcXCI7XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVswXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJfY2F0ZWdvcmllcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NLnNwbGl0KFxcXCI7XFxcIilbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyovXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhpbmRleClcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gSlNPTi5wYXJzZShgWyR7Y2F0ZWdvcnl9XWApO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coc3ViX2NhdGVnb3JpZXMpXFxuICAgICAgICAgICAgICAgICAgICAvLyBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICAvL31cXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5aSn57G7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHRpdGxlID0gcGRmaChpdGVtLCBf5aSn57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXRlbS50aXRsZTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3UmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gJydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcnM6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHVybCA9IHBkKGl0ZW0sIF/lpKfnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKOWkp+exu+WkhOeQhikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IOS4gOe6p+WIhuexu+WkhOeQhih1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2codXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfbGluZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lsI/nsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhcG9zID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKGl0ZW0uaW5jbHVkZXMoJ3R5cGU9XFxcIkBleHRyYVxcXCInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcG9zID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6ZmE5Yqg5a6a5L2NJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYXBvcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIFxcXCJhJiZzdGF0ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIFxcXCJhJiZ2YWx1ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gaXRlbS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc3dpdGNoICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpzb24gPSBwZChpdGVtLCDliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnZhciBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEAnKT97XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOuWIhuexu+mTvuaOpS5zcGxpdCgnQEAnKVswXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnN0YXRlLCBwYXJhbXMuanNvbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZm9sZCA9PT0gXFxcIjFcXFwiIHx8IOaKmOWPoOeKtuaAgSA9PSBmYWxzZSkge1xcbiAgICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChjYXRlcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2NhdGVfYnV0dG9uJywgY2F0ZXMpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2V0UHJlUmVzdWx0ICE9ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gZC5jb25jYXQoaXRlbXMpO1xcbiAgICAgICAgICAgICAgICAvL+a4heepuue7p+aJv+aVsOe7hFxcbiAgICAgICAgICAgICAgICBkLmxlbmd0aCA9IDA7XFxuICAgICAgICAgICAgICAgIHNldFByZVJlc3VsdChpdGVtcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaChpdGVtKTtcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICB9O1xcbiAgICBvYmou6aKE6K6+KG9wdGlvbnMpO1xcbiAgICByZXR1cm4gb2JqO1xcbn1cXG5cXG52YXIg54q25oCBID1cXG4gICAgdHlwZW9mIOeKtuaAgeagh+iusCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDnirbmgIHmoIforrAgIT0gXFxcIlxcXCIgPyDnirbmgIHmoIforrAgOiBNWV9SVUxFLnVybDtcXG5cXG5sZXQgZHRfZGVidWcgPSBmYWxzZTtcXG5cXG5hZGRMaXN0ZW5lcihcXG4gICAgXFxcIm9uQ2xvc2VcXFwiLFxcbiAgICAkLnRvU3RyaW5nKCgpID0+IHt9KVxcbik7XFxuXFxudmFyIENyZWF0ZSA9IHtcXG4gICAgbmV4dFBhZ2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZygnbjonK25leHQpXFxuICAgICAgICAgICAgaWYgKG5leHQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuIvkuIDpobXpk77mjqXkuLrnqbonKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIGlmICh0cnVlX3VybCA9PSBuZXh0KSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAvL2xvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbG9nKFxcXCLplJnor6/kv6Hmga86XFxcIiArIGUubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoKG5leHQgPT0gXFxcIlxcXCIgfHwgbmV4dCA9PSB1bmRlZmluZWQpICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIG5leHQgPSB0cnVlX3VybDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9yZXN1bHQ9ZmFsc2U7XFxuICAgICAgICAgICAgbmV4dCA9IGdldE15VmFyKOeKtuaAgSk7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZygnbCcrdHJ1ZV91cmwpXFxuICAgICAgICAvL2xvZygnbicrbmV4dClcXG4gICAgICAgIGlmIChwYWdlICE9IDEpIHtcXG4gICAgICAgICAgICBpZiAodHJ1ZV91cmwgPT0gbmV4dCAmJiAhcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgICAgIC8vcHV0TXlWYXIo54q25oCBLCBuZXh0KTtcXG4gICAgfSxcXG4gICAgZ2V0QmFja0ltYWdlOiBmdW5jdGlvbihpbWd1cmwpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBpbWd1cmw7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHJlc3VsdCA9IC91cmwoPzpcXFxccyspP1xcXFwoKC4qPylcXFxcKS9nXFxuICAgICAgICAgICAgICAgIC5leGVjKGltZ3VybClbMV1cXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLygnfFxcXCJ8JnF1b3Q7KS9nbSwgXFxcIlxcXCIpO1xcbiAgICAgICAgfSBjYXRjaCB7fVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgfSxcXG4gICAgaHR0cEhhbmRsZTogZnVuY3Rpb24oaW5wdXQpIHtcXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi8vXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOlxcXCIgKyBpbnB1dDtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIE1ZX0hPTUUgKyBpbnB1dDtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgaW1nSGFuZGxlOiBmdW5jdGlvbihpdGVtLCBydWxlKSB7XFxuICAgICAgICB2YXIgaW1nID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS5pbWcuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGltZyA9IGV2YWwocnVsZS5pbWcpO1xcbiAgICAgICAgfSBlbHNlIGlmIChydWxlLmJhY2tpbWcpIHtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmdldEJhY2tJbWFnZShpbWcpO1xcbiAgICAgICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICBpZiAoIWltZy5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgaW1nID0gcGQoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaW1nICsgcnVsZS5yZWY7XFxuICAgIH0sXFxuICAgIHVybEhhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGhyZWYgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChydWxlLnVybC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgaHJlZiA9IGV2YWwocnVsZS51cmwpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBocmVmID0gcGQoaXRlbSwgcnVsZS51cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaHJlZiA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIiA6IGhyZWY7XFxuICAgICAgICByZXR1cm4gaHJlZjtcXG4gICAgfSxcXG4gICAgc2V0Q29udGVudDogZnVuY3Rpb24oaXRlbSwgaW5wdXQpIHtcXG4gICAgICAgIGxldCBvdXRwdXQgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBvdXRwdXQgPSBldmFsKGlucHV0KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgb3V0cHV0ID0gcGRmaChpdGVtLCBpbnB1dCk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gb3V0cHV0O1xcbiAgICB9LFxcbiAgICByZWZyZXNoOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGFkZExpc3RlbmVyKFxcbiAgICAgICAgICAgIFxcXCJvblJlZnJlc2hcXFwiLFxcbiAgICAgICAgICAgICQudG9TdHJpbmcoKHUpID0+IHtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwieWlsaXN0XFxcIik7XFxuICAgICAgICAgICAgICAgIC8vdmFyIHAgPSBzdG9yYWdlMC5nZXRNeVZhcignc3BhZ2UnLCAnJyk7XFxuICAgICAgICAgICAgICAgIC8vcHV0TXlWYXIodSwgcCk7XFxuICAgICAgICAgICAgfSwg54q25oCBKVxcbiAgICAgICAgKTtcXG4gICAgfSxcXG4gICAgZ2V0Qm9vbGVhblZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XFxuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4odmFsdWUpIDogKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogdHJ1ZSk7XFxuICAgIH0sXFxuICAgIGRlYnVnbG9nOiBmdW5jdGlvbihpLCBpdGVtLCBydWxlLCBvYmopIHtcXG4gICAgICAgIGxvZygnLS0tLS0tLS0tLScgKyAoaSArIDEpICsgJzrosIPor5XlvIDlp4stLS0tLS0tLS0tJyk7XFxuICAgICAgICBpZiAoaXRlbS5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHtcXG4gICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSk7XFxuICAgICAgICB9XFxuICAgICAgICBsb2coJ2l0ZW3lhoXlrrk6XFxcXHJcXFxcbicgKyBpdGVtICsgJ1xcXFxyXFxcXG4nICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdHRpdGxl5a6a5L2NOiAgJHtydWxlLnRpdGxlfSAgLS0tPiDnu5Pmnpw6ICAke29iai50aXRsZX1gICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdGRlc2PlrprkvY06ICAke3J1bGUuZGVzY30gIC0tLT4g57uT5p6cOiAgJHtvYmouZGVzY31gICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdGltZ+WumuS9jTogICR7cnVsZS5pbWd9ICAtLS0+IOe7k+aenDogICR7b2JqLmltZ31gICtcXG4gICAgICAgICAgICAocnVsZS5jb250ZW50ICE9IHVuZGVmaW5lZCA/IGBcXFxcblxcXFx0Y29udGVudOWumuS9jTogICR7cnVsZS5jb250ZW50fSAgLS0tPiDnu5Pmnpw6ICAke29iai5jb250ZW50fWAgOiAnJykgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0dXJs5a6a5L2NOiAgJHtydWxlLnVybH0gIC0tLT4g57uT5p6cOiAgJHtvYmoudXJsfWBcXG4gICAgICAgICk7XFxuICAgICAgICBsb2coJy0tLS0tLS0tLS0nICsgKGkgKyAxKSArICc66LCD6K+V57uT5p2fLS0tLS0tLS0tLScpO1xcbiAgICB9LFxcbiAgICBqc29uTGlzdDogZnVuY3Rpb24oYXJyLCBqc29uLCBydWxlKSB7XFxuICAgICAgICBpZiAoanNvbi5jb25zdHJ1Y3RvciAhPSBPYmplY3QpIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uKTtcXG4gICAgICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoanNvbltydWxlLmxpc3RdID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIGFyci5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge30sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZywgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGpzb25bcnVsZS5saXN0XS5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gZXZhbChydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IGV2YWwocnVsZS5kZXNjKTtcXG4gICAgICAgICAgICB2YXIgY29udGVudCA9IGV2YWwocnVsZS5jb250ZW50KTtcXG4gICAgICAgICAgICB2YXIgaW1nID0gZXZhbChydWxlLmltZykgKyBydWxlLnJlZjtcXG4gICAgICAgICAgICB2YXIgaHJlZiA9IGV2YWwocnVsZS51cmwpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIgOiBocmVmO1xcbiAgICAgICAgICAgIHZhciBsYXp5ID0gcnVsZS5sYXp5ID8gcnVsZS5sYXp5IDogXFxcIlxcXCI7XFxuXFxuICAgICAgICAgICAgdmFyIGRkID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiA6ICcnKSArIHVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9O1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSBocmVmICsgbGF6eTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIHJ1bGVMaXN0OiBmdW5jdGlvbihhcnIsIGh0bWwsIHJ1bGUpIHtcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLFxcbiAgICAgICAgICAgIHJ1bGUubGlzdCk7XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLFxcbiAgICAgICAgICAgIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjKTtcXG4gICAgICAgICAgICB2YXIgZGVzYzEgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjMSk7XFxuICAgICAgICAgICAgdmFyIGRlc2MyID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYzIpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy51cmxIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5jb250ZW50KTtcXG5cXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgdmFyIGxhenkgPSBydWxlLmxhenkgPyBydWxlLmxhenkgOiBcXFwiXFxcIjtcXG4gICAgICAgICAgICB2YXIgZGQgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYzEgKyBcXFwiXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFwiICsgZGVzYyxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSB1cmwgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlLCBwYXJhbSkge1xcbiAgICAgICAgcGFyYW0gPSBwYXJhbSA/IHBhcmFtIDoge307XFxuICAgICAgICB2YXIgYXV0byA9IHBhcmFtLmF1dG8gPyBwYXJhbS5hdXRvIDogZmFsc2U7XFxuICAgICAgICB2YXIgc2hvdyA9IHBhcmFtLnNob3cgPyBwYXJhbS5zaG93IDogZmFsc2U7XFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgLy90aGlzLnNwYWdlLnNldCh0cnVlX3VybCk7XFxuICAgICAgICB9XFxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIHJ1bGUubGlzdCk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKHRoaXMubmV4dFBhZ2UoKSlcXG4gICAgICAgIGlmICgoc3RvcmFnZTAuZ2V0TXlWYXIoJ3lpX2lzbmV4dCcsICd0JykgPT0gJ3QnICYmIGxpc3QubGVuZ3RoID4gMCkgfHwgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZWxpbmVcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgICAgICAgICB2YXIgaW1nID0gdGhpcy5pbWdIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnVybEhhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5jb250ZW50KTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlkID0gXFxcImxhc3RpZF9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICAgICAgICAgIGNscyA9IFxcXCJsYXN0bWFya1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsICsgJz9wYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwieWpcXFwiKScsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGNscyxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEgJiYgc2hvdykge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZWxpbmVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08c21hbGw+5Yqg6L295LitLi4uPC9zbWFsbD5cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbnVtXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbShcXFwicGFnZW51bVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuWIsOW6leS6hjwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJsYXN0XFxcIixcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8qXFxuICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgaWYgKHRoaXMubmV4dFBhZ2UoKSkge1xcbiAgICAgICAgICAgIC8vbG9nKCd0Jyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsICd0Jyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vbG9nKCdmJyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsICdmJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoYXV0bykge1xcbiAgICAgICAgICAgIC8vY3JlYXRlTmV4dFBhZ2UoKTtcXG4gICAgICAgICAgICBhdXRvUGFnZSgpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbn07XFxuXFxudmFyIGV4dE1ldGhvZCA9IHtcXG4gICAgVG9QYXJhbXM6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIGpzb24gPSBhcmd1bWVudHNbMF07XFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoanNvbilcXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IGtleSArIFxcXCI9XFxcIiArIGpzb25ba2V5XSlcXG4gICAgICAgICAgICAuam9pbihcXFwiJlxcXCIpO1xcbiAgICB9LFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odSkge1xcbiAgICAgICAgdmFyIGRpY3QgPSB7fTtcXG4gICAgICAgIGRpY3QuU291cmNlID0gdTtcXG4gICAgICAgIGxldCBwYXJhbXMgPSAodXJsKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XFxuICAgICAgICAgICAgbGV0IHJlZyA9IC8oW14/PSZdKyk9KFtePz0mXSspL2c7XFxuICAgICAgICAgICAgdXJsLnJlcGxhY2UocmVnLCBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbYXJndW1lbnRzWzFdXSA9IGFyZ3VtZW50c1syXTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlQYXJhbXM7XFxuICAgICAgICB9O1xcbiAgICAgICAgdmFyIGphdmFVcmwgPSBKYXZhSW1wb3J0ZXIoamF2YS5uZXQuVVJMKTtcXG4gICAgICAgIHdpdGgoamF2YVVybCkge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKHUpO1xcbiAgICAgICAgICAgIGRpY3QuUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3QgPSB1cmwuZ2V0SG9zdCgpO1xcbiAgICAgICAgICAgIGRpY3QuUG9ydCA9IHVybC5nZXRQb3J0KCk7XFxuICAgICAgICAgICAgZGljdC5GaWxlID0gdXJsLmdldEZpbGUoKTtcXG4gICAgICAgICAgICBkaWN0LlBhdGggPSB1cmwuZ2V0UGF0aCgpO1xcbiAgICAgICAgICAgIGRpY3QuUmVmID0gdXJsLmdldFJlZigpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdHMgPSBgJHtkaWN0LlByb3RvY29sfTovLyR7dXJsLmdldEhvc3QoKX1gO1xcbiAgICAgICAgfVxcbiAgICAgICAgZGljdC5QYXJhbXMgPSBwYXJhbXModSk7XFxuICAgICAgICByZXR1cm4gZGljdDtcXG4gICAgfSxcXG4gICAgaXNFcXVhbDogZnVuY3Rpb24oeCwgeSkge1xcbiAgICAgICAgY29uc3Qgb2sgPSBPYmplY3Qua2V5cyxcXG4gICAgICAgICAgICB0eCA9IHR5cGVvZiB4LFxcbiAgICAgICAgICAgIHR5ID0gdHlwZW9mIHk7XFxuICAgICAgICByZXR1cm4geCAmJiB5ICYmIHR4ID09PSBcXFwib2JqZWN0XFxcIiAmJiB0eCA9PT0gdHkgP1xcbiAgICAgICAgICAgIG9rKHgpLmxlbmd0aCA9PT0gb2soeSkubGVuZ3RoICYmXFxuICAgICAgICAgICAgb2soeCkuZXZlcnkoKGtleSkgPT4gdGhpcy5pc0VxdWFsKHhba2V5XSwgeVtrZXldKSkgOiB4ID09PSB5O1xcbiAgICB9LFxcbiAgICBmaW5kRGlmZmVyZW50SW5kZXg6IGZ1bmN0aW9uKHN0cjEsIHN0cjIpIHtcXG4gICAgICAgIGNvbnN0IGRpZmZDaGFycyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcXG4gICAgICAgICAgICAgICAgZGlmZkNoYXJzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXFxuICAgICAgICAgICAgICAgICAgICBzMTogc3RyMVtpXSxcXG4gICAgICAgICAgICAgICAgICAgIHMyOiBzdHIyW2ldLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGlmZkNoYXJzO1xcbiAgICB9LFxcbiAgICByZXBsYWNlQ2hhckF0OiBmdW5jdGlvbihzdHIsIGluZGV4LCByZXBsYWNlbWVudCkge1xcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdHIubGVuZ3RoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgY29uc3QgYXJyID0gc3RyLnNwbGl0KFxcXCJcXFwiKTtcXG4gICAgICAgIGFycltpbmRleF0gPSByZXBsYWNlbWVudDtcXG4gICAgICAgIHJldHVybiBhcnIuam9pbihcXFwiXFxcIik7XFxuICAgIH0sXFxuICAgIGdldE9iamVjdEtleXNEaWZmOiBmdW5jdGlvbihvYmoxLCBvYmoyKSB7XFxuICAgICAgICBjb25zdCBkaWZmZXJlbnRLZXlzID0gW107XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xcbiAgICAgICAgICAgIGlmICghb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IG9iajFba2V5XSAhPT0gb2JqMltrZXldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoyKSB7XFxuICAgICAgICAgICAgaWYgKCFvYmoxLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50S2V5cy5wdXNoKGtleSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZlcmVudEtleXM7XFxuICAgIH0sXFxuICAgIGdldE5leHRVcmw6IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBwYXJhbXMpIHtcXG4gICAgICAgIHZhciB1MSA9IHRoaXMudXJsUGFyc2Uoc291cmNlKTtcXG4gICAgICAgIHZhciB1MiA9IHRoaXMudXJsUGFyc2UodGFyZ2V0KTtcXG4gICAgICAgIHZhciBwYSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgcGEgPSBwYXJhbXMuaGFzT3duUHJvcGVydHkoXFxcIueJueW+gVxcXCIpID8gcGFyYW1zLueJueW+gSA6IHVuZGVmaW5lZDtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBuZXh0dXJsID0gc291cmNlO1xcbiAgICAgICAgdmFyIGNhID0gT2JqZWN0LmtleXModTIuUGFyYW1zKS5sZW5ndGggPT0gMCA/IFxcXCJcXFwiIDogXFxcIj9cXFwiO1xcbiAgICAgICAgaWYgKHBhICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHZhciBycyA9IFN0cmluZyh1Mi5QYXRoKS5yZXBsYWNlKG5ldyBSZWdFeHAocGEpLCBcXFwiJDFmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBycyArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VxdWFsKHUxLlBhcmFtcywgdTIuUGFyYW1zKSkge1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1MS5QYXRoKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1Mi5QYXRoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZGYgPSB0aGlzLmZpbmREaWZmZXJlbnRJbmRleChTdHJpbmcodTEuUGF0aCksIFN0cmluZyh1Mi5QYXRoKSk7XFxuICAgICAgICAgICAgICAgIGlmIChkdF9kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGRmKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoZGYubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGRmWzBdLmluZGV4O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBkZi5maWx0ZXIoKHgpID0+IC9cXFxcZCsvLnRlc3QoeC5zMikpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSB0aGlzLnJlcGxhY2VDaGFyQXQoU3RyaW5nKHUyLlBhdGgpLCByZSwgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBlcCA9IHRoaXMuZ2V0T2JqZWN0S2V5c0RpZmYodTEuUGFyYW1zLCB1Mi5QYXJhbXMpXFxuICAgICAgICAgICAgICAgIGlmIChlcC5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdTEuUGFyYW1zW2VwWzBdXSA9ICdmeXBhZ2UnXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coZXApO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBlcSA9IFN0cmluZyh1MS5QYXRoKS5yZXBsYWNlKC9cXFxcZCsvLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgIG5leHR1cmwgPSB1MS5Ib3N0cyArIGVxICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUxLlBhcmFtcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0dXJsKVxcbiAgICAgICAgcmV0dXJuIG5leHR1cmw7XFxuICAgIH0sXFxufTtcXG5cXG5mdW5jdGlvbiBnZXRUcnVlbGluayhtYXJrLCB1cmwsIHBhZ2UpIHtcXG4gICAgdmFyIHAgPSBnZXRNeVZhcihtYXJrLCB1cmwpLnJlcGxhY2UoXFxcImZ5cGFnZVxcXCIsIHBhZ2UpO1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICByZXR1cm4gZ2V0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHApO1xcbiAgICB9IGVsc2UgaWYgKHAgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHJldHVybiBwO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgfVxcbn1cXG4vL+aehOW7ulxcbmZ1bmN0aW9uIGNyZWF0ZU5leHRQYWdlKCkge1xcbiAgICBsZXQgc3RhcnRudW0gPSAxO1xcbiAgICB2YXIgb2JqID0gYXJndW1lbnRzWzBdO1xcbiAgICBpZiAodHJ1ZV91cmwgIT0gZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiLCBcXFwiXFxcIikpIHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKTtcXG4gICAgfVxcbiAgICBpZiAocGFnZSA9PSBzdGFydG51bSAmJiBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKG5leHQpO1xcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgbnh1cmwgPSBleHRNZXRob2QuZ2V0TmV4dFVybCh0cnVlX3VybCwgbmV4dCwgb2JqKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibnh1cmw6XFxcIiArIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcijnirbmgIEsIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIG54dXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhdXRvUGFnZSgpIHtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICBcXG4gICAgICAgIG5leHQgPSBcXFwiXFxcIjtcXG4gICAgfVxcbiAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIo54q25oCBLCBuZXh0KTtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoeS6jOe6p+WklumDqOino+aekFwiLFwicGF0aFwiOlwidG9vbFwiLFwicnVsZVwiOlwiLy92YXIgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwg5pCc57Si5qCH562+KTtcXG4vL3ZhciB0aXRsZSA9IE1ZX1BBUkFNUy50aXRsZTtcXG4vL2xvZyh0aXRsZSlcXG5cXG4vL1RoaXNzQVZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNmNjcyODBcXFwiPiBUaGlzQVY8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuNC5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2xvZ29zLWFuZC1icmFuZHMvNTEyLzIzMl9OaW50ZW5kb19Td2l0Y2hfbG9nby0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly90aGlzYXYuY29tL2NuL1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAvL2xvZyhhdilcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhdiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wKSdcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgdGltZW91dDogNTAwMFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvZXZhbC4qP1xcXFxuLylbMF0pXFxuICAgICAgICAgICAgLy8g6I635Y+W55S76LSo5YiX6KGo77yM5bm25Y675pyA6auY55S76LSoXFxuICAgICAgICAgICAgbGV0IGdyb3VwX3F1YWxpdHkgPSBmZXRjaChzb3VyY2UsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIm9yaWdpblxcXCI6IFxcXCJodHRwczovL3RoaXNhdi5jb21cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGhnaGVzdF9xdWFsaXR5ID0gZ3JvdXBfcXVhbGl0eS5tYXRjaCgvXiguKilcXFxcLm0zdTgkL2dtKVxcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UucmVwbGFjZShcXFwicGxheWxpc3QubTN1OFxcXCIsIGhnaGVzdF9xdWFsaXR5W2hnaGVzdF9xdWFsaXR5Lmxlbmd0aCAtIDFdKSArICc7e09yaWdpbkBodHRwczovL3RoaXNhdi5jb219J1xcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgIH1cXG4gICAgfSwg6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL572R5Z2AJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly90aGlzYXYuY29tL2NuL1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfV1cXG4gICAgfVxcbn0pO1xcblxcbi8vTUlTU0FWXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjZjY3MjgwXFxcIj4gTUlTU0FWPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjEuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9mcnVpdHMtbi12ZWdldGFibGVzLWNvbG9yZWQtZ3JhZGllbnQvMTI4L2NhdWxpZmxvd2VyLTEyOC5wbmcnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbWlzc2F2LnRvL3NlYXJjaC9tb3ZpZS9cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgICAgIHZhciB1cmxzID0gW107XFxuICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDBcXG4gICAgICAgICAgICB9KSwgXFxcIi52aWRlb3MtbGlzdCYmYXJ0aWNsZVxcXCIpO1xcbiAgICAgICAgICAgIGZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICAgICAgICAgICAgICB1cmxzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBwZGZoKGxpc3Rbal0sIFxcXCJhJiZocmVmXFxcIilcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHBsYXlzID0gYmYodXJscykubWFwKGggPT4gaC5tYXRjaCgvc3JjPVxcXCIoLio/KVxcXCIvKVsxXS5zcGxpdChcXFwiJlxcXCIpWzBdLnJlcGxhY2UoXFxcIj9pZD1cXFwiLCBcXFwiaGxzL1xcXCIpICsgXFxcIi5tM3U4XFxcIilcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICB1cmxzOiBwbGF5c1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL21pc3Nhdi50by9zZWFyY2gvbW92aWUvXFxcIiArIOivhuWIq+eggS5yZXBsYWNlKC9cXFxcLXxcXFxcXy8sIFxcXCIlMjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybHMgPSBbXTtcXG4gICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiA1MDAwXFxuICAgICAgICAgICAgICAgIH0pLCBcXFwiLnZpZGVvcy1saXN0JiZhcnRpY2xlXFxcIik7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgdXJscy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBkZmgobGlzdFtqXSwgXFxcImEmJmhyZWZcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgcGxheXMgPSBiZih1cmxzKS5tYXAoaCA9PiBoLm1hdGNoKC9zcmM9XFxcIiguKj8pXFxcIi8pWzFdLnNwbGl0KFxcXCImXFxcIilbMF0ucmVwbGFjZShcXFwiP2lkPVxcXCIsIFxcXCJobHMvXFxcIikgKyBcXFwiLm0zdThcXFwiKVxcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogcGxheXNcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ5q2k5b2x54mHXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSwg6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL572R5Z2AJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly9taXNzYXYudG8vc2VhcmNoL21vdmllL1xcXCIgKyDor4bliKvnoIFcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuXFxuLy9uamF2XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjZjY3MjgwXFxcIj4gbkphdi50djwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4yLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvc29jaWFsLWljb25zLTMzLzEyOC9GYWNlYm9va19NZXNzZW5nZXItMTI4LnBuZycsXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbmphdi50di96aC92L1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAvL2xvZyhhdilcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2goYXYsIHtcXG4gICAgICAgICAgICB0aW1lb3V0OiA1MDAwXFxuICAgICAgICB9KVxcbiAgICAgICAgaWYgKCFodG1sIHx8IGh0bWwuaW5jbHVkZXMoXFxcIuivt+ajgOafpeWcsOWdgOagj+S4reeahOe9keWdgFxcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ2aWRlbzovL1xcXCIgKyBhdjtcXG4gICAgICAgIH1cXG4gICAgfSwg6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdmlkZW9FeGNsdWRlUnVsZXM6IFsnMjQwJ10sXFxuICAgICAgICBibG9ja1J1bGVzOiBbJyouZG9wcGlvY2RuLionXSxcXG4gICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAvL3ZpZGVvUnVsZXM6IFsnKm0zdTgqJ10sXFxuICAgICAgICBjYWNoZU0zdTg6IHRydWUsXFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvnvZHlnYAnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL25qYXYudHYvemgvdi9cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH1dXFxuICAgIH1cXG59KTtcXG5cXG4vL2F2MDFcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNmNjcyODBcXFwiPiBBVjAxPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjIuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9vd2wtMTAvNTAwL25pbTUzMl8xMV9wdXJwbGVfb3dsX2tpZF9iaXJ0aGRheV9mYWNlX2V5ZS0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly93d3cuYXYwMS50di9cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgLy9sb2coYXYpXFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgdGltZW91dDogNTAwMFxcbiAgICAgICAgfSlcXG4gICAgICAgIHZhciBjb2RlID0gcGRmaChodG1sLCAnI3BseXJfdmlkZW8mJnBvc3RlcicpXFxuICAgICAgICBsb2coY29kZSlcXG4gICAgICAgIGlmICghY29kZSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mjILmoq/miJbmsqHmnInmraTlvbHniYdcXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidmlkZW86Ly9cXFwiICsgYXY7XFxuICAgICAgICB9XFxuICAgIH0sIOivhuWIq+eggSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHZpZGVvRXhjbHVkZVJ1bGVzOiBbJ2RvcHBpb2NkbiddLFxcbiAgICAgICAgdmlkZW9FeGNsdWRlUnVsZXM6IFsnMjQwJ10sXFxuICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWyc0ODAnXSxcXG4gICAgICAgIGJsb2NrUnVsZXM6IFsnLmRvcHBpb2Nkbi4nXSxcXG4gICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAvL3ZpZGVvUnVsZXM6IFsnKm0zdTgqJ10sXFxuICAgICAgICBjYWNoZU0zdTg6IHRydWUsXFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvnvZHlnYAnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3d3dy5hdjAxLnR2L1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfV1cXG4gICAgfVxcbn0pO1xcblxcbi8vSmFibGVcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNmNjcyODBcXFwiPiBKYWJsZTwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4zLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvY2F0LXBvd2VyLXByZW1pdW0vMTIwL2NhdF9mb29kbG92ZS0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly9qYWJsZS50di92aWRlb3MvXFxcIiArIOivhuWIq+eggSArIFxcXCIvXFxcIjtcXG4gICAgICAgIC8vbG9nKGF2KVxcbiAgICAgICAgLy8gcmVxdWVzdChcXFwiaHR0cHM6Ly9qYWJsZS50di9cXFwiKVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDBcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHZhciB1cmwgPSBodG1sLm1hdGNoKC9odHRwcz86XFxcXC9cXFxcL1xcXFxTKz9cXFxcLm0zdTgvKVswXVxcbiAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnInmjILmoq/lrZDmiJbmsqHmnInmraTlvbHniYdcXFwiXFxuICAgICAgICB9XFxuICAgIH0sIOivhuWIq+eggSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+e9keWdgCcsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vamFibGUudHYvdmlkZW9zL1xcXCIgKyDor4bliKvnoIEgKyBcXFwiL1xcXCI7XFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfV1cXG4gICAgfVxcbn0pO1xcblxcbi8vVGhpc3NBVuegtOino1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2Y2NzI4MFxcXCI+54Sh56K856C06KejPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjQuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9zb2NpYWwtbWVkaWEtZmxhdC03LzY0L1NvY2lhbC1tZWRpYV9TbmFwY2hhdC0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly90aGlzYXYuY29tL2NuL1xcXCIgKyDor4bliKvnoIEgKyBcXFwiLXVuY2Vuc29yZWQtbGVha1xcXCI7XFxuICAgICAgICAvL2xvZyhhdilcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhdiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wKSdcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgdGltZW91dDogNTAwMFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvZXZhbC4qP1xcXFxuLylbMF0pXFxuICAgICAgICAgICAgLy8g6I635Y+W55S76LSo5YiX6KGo77yM5bm25Y675pyA6auY55S76LSoXFxuICAgICAgICAgICAgbGV0IGdyb3VwX3F1YWxpdHkgPSBmZXRjaChzb3VyY2UsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIm9yaWdpblxcXCI6IFxcXCJodHRwczovL3RoaXNhdi5jb21cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGhnaGVzdF9xdWFsaXR5ID0gZ3JvdXBfcXVhbGl0eS5tYXRjaCgvXiguKilcXFxcLm0zdTgkL2dtKVxcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UucmVwbGFjZShcXFwicGxheWxpc3QubTN1OFxcXCIsIGhnaGVzdF9xdWFsaXR5W2hnaGVzdF9xdWFsaXR5Lmxlbmd0aCAtIDFdKSArICc7e09yaWdpbkBodHRwczovL3RoaXNhdi5jb219J1xcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgIH1cXG4gICAgfSwg6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL572R5Z2AJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly90aGlzYXYuY29tL2NuL1xcXCIgKyDor4bliKvnoIEgKyBcXFwiLXVuY2Vuc29yZWQtbGVha1xcXCI7XFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfV1cXG4gICAgfVxcbn0pO1xcblxcbi8vbmphduegtOino1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2Y2NzI4MFxcXCI+IG5KYXbnoLTop6M8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuMC5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL0N1dGVNb25zdGVyc1BORy8xMjgvYmx1ZV9tb25zdGVyLnBuZycsXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbmphdi50di96aC92L1xcXCIgKyDor4bliKvnoIEgKyBcXFwiLXVuY2Vuc29yZWQtbGVha2VkXFxcIjtcXG4gICAgICAgIC8vbG9nKGF2KVxcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhdiwge1xcbiAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDBcXG4gICAgICAgIH0pXFxuICAgICAgICBpZiAoIWh0bWwgfHwgaHRtbC5pbmNsdWRlcyhcXFwi6K+35qOA5p+l5Zyw5Z2A5qCP5Lit55qE572R5Z2AXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIlxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIiArIGF2O1xcbiAgICAgICAgfVxcbiAgICB9LCDor4bliKvnoIEpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWycyNDAnXSxcXG4gICAgICAgIGJsb2NrUnVsZXM6IFsnKi5kb3BwaW9jZG4uKiddLFxcbiAgICAgICAgYmxvY2tSdWxlczogWydkbW0uY28uanAnXSxcXG4gICAgICAgIC8vdmlkZW9SdWxlczogWycqbTN1OConXSxcXG4gICAgICAgIGNhY2hlTTN1ODogdHJ1ZSxcXG4gICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+e9keWdgCcsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vbmphdi50di96aC92L1xcXCIgKyDor4bliKvnoIEgKyBcXFwiLXVuY2Vuc29yZWQtbGVha2VkXFxcIjtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuXFxuLy9TdXBqYXZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNmNjcyODBcXFwiPlN1cGphdjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4zLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvbG9nb3MtYnJhbmRzLTMvMjQvbG9nb19icmFuZF9icmFuZHNfbG9nb3Nfc2tyaWxsLTEyOC5wbmcnLFxcbiAgICB1cmw6IFxcXCJ4NTovL2h0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsg6K+G5Yir56CBLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICflj6zllKTpm6jop4EnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgLypcXG4gICAgICAgICAgICAgICAgb3BlbkFwcEludGVudCgnY29tLnl1amlhbi5SZXNpZGVNZW51RGVtbycsICdjbi55dWppYW4uTWFpbkFjdGl2aXR5Jywge2ludGVudERhdGE6ICdodHRwczovL3N1cGphdi5jb20vemgvP3M9JyArIOivhuWIq+eggX0pXFxuICAgICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwieWpicm93c2VyOi8vc2VhcmNoP3E9aHR0cHM6Ly9zdXBqYXYuY29tL3poLz9zPVxcXCIgKyDor4bliKvnoIFcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvnvZHlnYAnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3N1cGphdi5jb20vemgvP3M9XFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH1dXFxuICAgIH1cXG59KTtcXG5cXG4vL+iBmuaQnFxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2Y2NzI4MFxcXCI+6IGa5pCcIOKAoiBSPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjQuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9lc3NlbnRpYWxzLTcyLzI0LzAwMl8tX1NlYXJjaC0xMjgucG5nJyxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9zZWFyY2g/cz1cXFwiICsg6K+G5Yir56CBICsgXFxcIiZydWxlPeWlveeci+inhumikSZzaW1wbGU9ZmFsc2VcXFwiLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICdKYXYuR3VydScsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vamF2Lmd1cnUvP3M9XFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICdKYXZCYW5nZXJzJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly93d3cuamF2YmFuZ2Vycy5jb20vc2VhcmNoL1xcXCIgKyDor4bliKvnoIEgKyAnLyc7XFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5aSN5Yi26K+G5Yir56CBJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfV1cXG4gICAgfVxcbn0pO1xcblxcblxcbi8v56OB5Yqb5ZCbLueugFxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2Y2NzI4MFxcXCI+56OB5Yqb5ZCbLueugDwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG40Lmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvc2hvcHBpbmctZG9vZGxlLzUxMi9TaG9wcGluZy0zMS0xMjgucG5nJyxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NvdT9ydWxlPeejgeWKm+WQmy7nroAmcD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIOivhuWIq+eggSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgIHRpdGxlOiAn6LC35q2M5pCc57SiJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ1lhbmRleOaQnOe0oicsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8veWFuZGV4LmNvbS9zZWFyY2gvdG91Y2gvP3RleHQ9XFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICflpI3liLbor4bliKvnoIEnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKE1ZX0hPTUUpID0+IHtcXG4gICAgdmFyIGlucCA9IGZldGNoKGlucHV0LHt9KTsgXFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIrcGRmYShpbnAsICcucHJldmlldy1pbWFnZXMmJmEsMTonKS5tYXAoaW1nID0+cGQoaW1nLCAnYSYmaHJlZicpK1xcXCJAUmVmZXJlcj1cXFwiLCkuam9pbihcXFwiJiZcXFwiKSAgXFxufSxNWV9IT01FKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LiA57qn6aG16Z2i5YaF5a65XCIsXCJwYXRoXCI6XCJ5alwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5cXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICgpID0+IHtcXG4gICAgY2xlYXJNeVZhcihcXFwidXJsXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcIm5leHRQYWdlXFxcIik7XFxuICAgIGNsZWFySXRlbSgnbm93JylcXG4gICAgY2xlYXJJdGVtKCdubycpXFxuICAgIGNsZWFySXRlbSgncGFnZXMnKVxcbn0pO1xcbmFkZExpc3RlbmVyKFxcXCJvblJlZnJlc2hcXFwiLCAoKSA9PiB7XFxuICAgIGNsZWFyTXlWYXIoXFxcInVybFxcXCIpO1xcbiAgICBjbGVhck15VmFyKFxcXCJuZXh0UGFnZVxcXCIpO1xcbiAgICBjbGVhckl0ZW0oJ25vdycpO1xcbiAgICBjbGVhckl0ZW0oJ25vJyk7XFxuICAgIGNsZWFySXRlbSgncGFnZXMnKVxcbn0pO1xcblxcbk1ZX1VSTCA9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJyk7XFxubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoXFxcInVybFxcXCIsIE1ZX1VSTCk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxuLy/ojrflj5bkuIrmrKHnvJPlrZjnmoTkuIvpobXpk77mjqVcXG5sZXQgbmV4dFBhZ2UgPSBnZXRNeVZhcihcXFwibmV4dFBhZ2VcXFwiLCBcXFwiXFxcIik7XFxuLy/lpoLmnpzmnInkuIvkuIDpobXkuJTkuI3mmK/nrKzkuIDpobXlsLHkvb/nlKjkuIvkuIDpobXpk77mjqVcXG5pZiAobmV4dFBhZ2UgJiYgTVlfUEFHRSA+IDEpIHtcXG4gICAgdHJ1ZV91cmwgPSBuZXh0UGFnZTtcXG59XFxubG9nKHRydWVfdXJsKTtcXG52YXIgaHRtbCA9IGZldGNoKHRydWVfdXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JyksXFxuICAgIH1cXG59KTtcXG5cXG50cnkge1xcbiAgICAvL+e8k+WtmOS4i+S4gOmhtVxcbiAgICBsZXQgbmV4dFVybCA9IHBkKGh0bWwsIFxcXCJhOmNvbnRhaW5zKOS4i+S4gCkmJmhyZWZcXFwiKTtcXG4gICAgcHV0TXlWYXIoXFxcIm5leHRQYWdlXFxcIiwgbmV4dFVybCB8fCBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIpO1xcbiAgICAvL2xvZyhcXFwi5LiL5LiA6aG177yaXFxcIiArIG5leHRVcmwpXFxufSBjYXRjaCAoZSkge1xcbiAgICAvL2NsZWFyTXlWYXIoXFxcIm5leHRQYWdlXFxcIik7XFxuICAgIGxldCBuZXh0VXJsID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICB0b2FzdChcXFwi5aW95YOP5rKh5pyJ5LiL5LiA6aG15LqG77yBXFxcIik7XFxufVxcblxcbnZhciBwYWdlcztcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIC8v5ryU5ZGY5Zu+XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgaW1nID0gcGRmaChodG1sLCBcXFwiLnNlY3Rpb24tY29sdW1ucyYmLmltYWdlJiYuYXZhdGFyJiZzdHlsZVxcXCIpO1xcbiAgICAgICAgdmFyIOaPj+i/sDEgPSBwZGZoKGh0bWwsIFxcXCIuYWN0b3Itc2VjdGlvbi1uYW1lJiZUZXh0XFxcIik7XFxuICAgICAgICB2YXIg5o+P6L+wMiA9IHBkZmgoaHRtbCwgXFxcIi5zZWN0aW9uLW1ldGEsLTEmJlRleHRcXFwiKTtcXG4gICAgICAgIHZhciBudW0gPSDmj4/ov7AyLm1hdGNoKC9cXFxcZCsvKVswXTtcXG4gICAgICAgIHZhciBwYWdlcyA9IE1hdGguZmxvb3IobnVtIC8gNDApO1xcbiAgICAgICAgaWYgKG51bSAlIDQwICE9PSAwKSB7XFxuICAgICAgICAgICAgcGFnZXMgKz0gMTtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCJKYXZEQlxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIjBcXFwiLFxcbiAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfMlxcXCIsXFxuICAgICAgICB9KTtcXG4gICAgICAgIHZhciBsaXN0QWN0b3JzID0gSlNPTi5wYXJzZShmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2FjdG9yLnR4dCcpIHx8ICdbXScpO1xcbiAgICAgICAgaWYgKGxpc3RBY3RvcnMuaW5kZXhPZijmj4/ov7AxICsgJ0BAJyArIGltZyArICdAQCcgKyBNWV9VUkwpID09ICctMScpIHtcXG4gICAgICAgICAgICB2YXIg5o+P6L+wMyA9ICfinpXliqDlhaXmlLbol48nXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciDmj4/ov7AzID0gJ+KdpO+4j+W3suaUtuiXjydcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNmZTVjNGJcXFwiPuemu+aAneS6lOmmlsK35YW25ZubXFxcXG5cXFxcdFxcXFx0XFxcXHTllJDCt+WFg+eouVxcXFxu5pu+57uP5rKn5rW36Zq+5Li65rC077yMXFxcXG7pmaTljbTlt6vlsbHkuI3mmK/kupHjgIJcXFxcbuWPluasoeiKseS4m+aHkuWbnumhvu+8jFxcXFxu5Y2K57yY5L+u6YGT5Y2K57yY5ZCb44CCXFxcXG5cXFxcbjwvZm9udD48L3NtYWxsPjxiPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI0ZGNjY5OVxcXCI+JyArIOaPj+i/sDEuc2xpY2UoMCwgMTApICsgJ1xcXFxuJyArIOaPj+i/sDIgKyAnXFxcXG4nICsg5o+P6L+wMyxcXG4gICAgICAgICAgICAvL3RpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjZmU1YzRiXFxcIj7nprvmgJ3kupTpppbCt+WFtuWbm8K35ZSQwrflhYPnqLlcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx05pu+57uP5rKn5rW36Zq+5Li65rC077yMXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdOmZpOWNtOW3q+WxseS4jeaYr+S6keOAglxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTlj5bmrKHoirHkuJvmh5Llm57pob7vvIxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx05Y2K57yY5L+u6YGT5Y2K57yY5ZCb44CCXFxcXG48L2ZvbnQ+PC9zbWFsbD48Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNGRjY2OTlcXFwiPiAnICsg5o+P6L+wMS5zbGljZSgwLCAxMCkgKyAnPC9mb250Pjwvc21hbGw+PGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjI0ZGNjY5OVxcXCI+XFxcXG4gJyArIOaPj+i/sDIgKyAnPC9mb250Pjwvc21hbGw+PGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjRkY2Njk5XFxcIj5cXFxcbuS5n+iuuOaciScgKyBwYWdlcyArICfpobXvvIzmsqHpqpfkvaDlkKc8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgc3RyID0gZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9hY3Rvci50eHQnKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFzdHIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2FjdG9yLnR4dCcsIEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShzdHIpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuaW5kZXhPZihuYW1lKSA9PSAnLTEnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9hY3Rvci50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY29weShuYW1lKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIOaPj+i/sDEgKyAnQEAnICsgaW1nICsgJ0BAJyArIE1ZX1VSTCksXFxuICAgICAgICAgICAgZGVzYzogJzAnLFxcbiAgICAgICAgICAgIC8vaW1nOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18yXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwiZ3JhZGllbnRcXFwiOiB0cnVlLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9IGNhdGNoIHt9XFxuICAgIGlmICh0eXBlb2YgcGFnZXMgIT09ICd1bmRlZmluZWQnICYmIHBhZ2VzICE9PSBudWxsKSB7XFxuICAgICAgICBzZXRJdGVtKCdwYWdlcycsIHBhZ2VzLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxuXFxuICAgIC8v5ryU5ZGY5YiG57G7XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgY2F0ZWdvcnkgPSBwZGZhKGh0bWwsIFxcXCIuYWN0b3ItdGFncyYmLnRhZ1xcXCIpXFxuICAgICAgICBsZXQgbm8gPSBnZXRJdGVtKCdubycsICflhajpg6gnKTtcXG4gICAgICAgIGNhdGVnb3J5LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiVGV4dFxcXCIpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBwZChpdGVtLCBcXFwiYSYmaHJlZlxcXCIpICE9PSAnJyA/IHBkKGl0ZW0sIFxcXCJhJiZocmVmXFxcIikgOiBwZChpdGVtLCBcXFwiYnV0dG9uJiZvbmNsaWNrLmpzOmlucHV0LnNwbGl0KCdcXFxcJycpWzFdXFxcIik7XFxuICAgICAgICAgICAgdXJsID0gdXJsLmluY2x1ZGVzKCc/cGFnZScpID8gdXJsIDogKHVybC5pbmNsdWRlcygnPycpID8gdXJsICsgXFxcIiZwYWdlPTFcXFwiIDogdXJsICsgXFxcIj9wYWdlPTFcXFwiKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBubyA9PSB0aXRsZSA/ICfigJzigJzigJ3igJ08Yj4nICsgdGl0bGUuZm9udGNvbG9yKCcjRkY2Njk5JykgOiAn4oCc4oCc4oCd4oCdJyArIHRpdGxlLmZvbnRjb2xvcignIzAwMDAwMCcpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCArICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJub1xcXCIsIHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfSwgdGl0bGUpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9IGNhdGNoIHt9XFxuICAgIC8v5YiG5YmyXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KVxcbn1cXG5cXG52YXIgcGFnZXMgPSBnZXRJdGVtKCdwYWdlcycpO1xcblxcbnRyeSB7XFxuICAgIGxldCBub3cgPSBnZXRJdGVtKCdub3cnKTtcXG4gICAgaWYgKHBhZ2VzID4gMSAmJiBwYWdlcyA8IDM3KSB7XFxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBwYWdlczsgaisrKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHRydWVfdXJsLnJlcGxhY2UoL3BhZ2U9XFxcXGQrLywgJ3BhZ2U9JyArIGopO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBqID09IE1ZX1BBR0UgfHwgbm93ID09IChqICsgJ+mhtScpID8gJ+KAnOKAnOKAneKAnScgKyAoaiArICfpobUnKS5mb250Y29sb3IoJyNGRjY2OTknKSA6IChqICsgJ+mhtScpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodXJsICsgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIm5vd1xcXCIsIChqICsgJ+mhtScpKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCBqKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKHBhZ2VzID4gMzcpIHtcXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDw9IDYxOyBqICs9IChqID09IDEpID8gMiA6IDMpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvcGFnZT1cXFxcZCsvLCAncGFnZT0nICsgaik7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGogPT0gTVlfUEFHRSB8fCBub3cgPT0gKGogKyAn6aG1JykgPyAn4oCc4oCc4oCd4oCdJyArIChqICsgJ+mhtScpLmZvbnRjb2xvcignI0ZGNjY5OScpIDogKGogKyAn6aG1JyksXFxuICAgICAgICAgICAgICAgIHVybDogJCh1cmwgKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwibm93XFxcIiwgKGogKyAn6aG1JykpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIGopLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH1cXG59IGNhdGNoIHt9XFxuXFxuXFxubGV0IGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuaXRlbScpO1xcbmlmIChsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgbGlzdC5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaCh4LCAnLnZpZGVvLXRpdGxlJiZUZXh0JyksXFxuICAgICAgICAgICAgZGVzYzogcGRmaCh4LCAnLm1ldGEmJlRleHQnKSxcXG4gICAgICAgICAgICBpbWc6IHBkKHgsICdpbWd8fGEmJnNyY3x8ZGF0YS1vcmlnaW5hbCcpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9laj91cmw9JyArIHBkKHgsICdhJiZocmVmJykgKyAnI25vSGlzdG9yeSMnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBwZGZoKHgsICcudmlkZW8tdGl0bGUmJlRleHQnKSxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSlcXG59IGVsc2Uge1xcbiAgICAvKmZ1bmN0aW9uIGdldEJpZ1RleHQodGV4dCwgY291bnQpIHtcXG4gICAgICAgIGlmIChjb3VudCA+IDApIHtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuYmlnKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IC1jb3VudDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNtYWxsKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRleHQ7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIGdldEJpZ1RleHQoXFxcIjxiaWc+PGZvbnQgY29sb3I9JyNGRUJENkYnPuW3sue7j+i2hei/h+S6huacgOe7iOmhteeggTwvZm9udD48L2JpZz48YnI+PHNtYWxsPjxmb250IGNvbG9yPScjRkI2QzczJz7kuI3kv6Hngrnlh7vmiZPlvIDnvZHpobU8L2ZvbnQ+PC9zbWFsbD5cXFwiLCA1KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRydWVfdXJsKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWVfdXJsXFxuICAgICAgICB9LCB0cnVlX3VybCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KSovXFxufVxcblxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LqM57qn6aG16Z2i5YaF5a65XCIsXCJwYXRoXCI6XCJlalwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXVxcbk1ZX1VSTCA9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJyk7XFxubG9nKE1ZX1VSTCk7XFxudmFyIGlkID0gTVlfVVJMLnNwbGl0KCcvJykuYXQoLTEpO1xcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JyksXFxuICAgIH1cXG59KTtcXG52YXIgYXV0aGVudGljaXR5X3Rva2VuID0gcGRmaChodG1sLCAnaW5wdXRbbmFtZT1cXFwiYXV0aGVudGljaXR5X3Rva2VuXFxcIl0mJnZhbHVlJyk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eScsIHt9KSkucnVsZSk7XFxudmFyIHRpdGxlID0gcGRmaChodG1sLCAnaDImJlRleHQnKTtcXG5pZiAodGl0bGUgIT09IG51bGwpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPG1pZGRsZT48Zm9udCBjb2xvcj0jRkZBNTAwPicgKyB0aXRsZSArICc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+WkjeWItuagh+mimCcsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfnmb7luqbnv7vor5EnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwieDU6Ly9odHRwczovL2ZhbnlpLmJhaWR1LmNvbS8janAvemgvXFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdEZWVwbOe/u+ivkScsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vd3d3LmRlZXBsLmNvbS96aC90cmFuc2xhdG9yLW1vYmlsZSNqYS96aC9cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgfSwgdGl0bGUpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+iwt+atjOe/u+ivkScsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vdHJhbnNsYXRlLmdvb2dsZS5jb20vP2hsPXpoLUNOJnNsPWphJnRsPXpoLUNOJnRleHQ9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pXFxufVxcblxcbnZhciDor4bliKvnoIEgPSBwZGZoKGh0bWwsICdib2R5JiYuZmlyc3QtYmxvY2smJi52YWx1ZSYmVGV4dCcpO1xcbnZhciBpbWcgPSBwZChodG1sLCAnLmNvbHVtbi12aWRlby1jb3ZlciYmaW1nJiZzcmMnKTtcXG5kLnB1c2goe1xcbiAgICBpbWc6IGltZyxcXG4gICAgdXJsOiBpbWcsXFxuICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfpm6jop4FTdXBqYXYnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgLy9vcGVuQXBwSW50ZW50KCdjb20ueXVqaWFuLlJlc2lkZU1lbnVEZW1vJywgJ2NuLnl1amlhbi5NYWluQWN0aXZpdHknLCB7aW50ZW50RGF0YTogJ2h0dHBzOi8vc3VwamF2LmNvbS96aC8/cz0nICsg6K+G5Yir56CBfSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ5amJyb3dzZXI6Ly9zZWFyY2g/cT1odHRwczovL3N1cGphdi5jb20vemgvP3M9XFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+e9keWdgCcsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsg6K+G5Yir56CBXFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5aSN5Yi25Zu+54mHJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoaW1nKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBpbWdcXG4gICAgICAgICAgICB9LCBpbWcpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdG9vbCcsIHt9KSkucnVsZSk7XFxuXFxuXFxubGV0IGluZm8gPSBwZGZhKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeVquiZn3zml6XmnJ985pmC6ZW3KScpO1xcbmluZm8uZm9yRWFjaCgobGlzdCwgaW5kZXgpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3QsICdzdHJvbmcmJlRleHQnKSxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPSM5MzcwREI+JyArIHBkZmgobGlzdCwgJy52YWx1ZSYmVGV4dCcpICsgJzwvZm9udD4nLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICBcXFwiY29weTovL1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgdG9hc3QoJ+eVquWPt+W3suWkjeWIticpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCDor4bliKvnoIEpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfosLfmrYzmkJzntKInLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9XFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfno4HlipvmkJzmoIfpopgnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NvdT9ydWxlPeejgeWKm+WQmy7nroAmcD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBpZiAoaW5kZXggPT0gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChodG1sLCAnLmJ1dHRvbl90byYmc3BhbiwxJiZUZXh0JyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCwgYXV0aGVudGljaXR5X3Rva2VuLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgZmV0Y2hQQygnaHR0cHM6Ly9qYXZkYjM2NS5jb20vdi8nICsgaWQgKyAnL3Jldmlld3Mvd2FudF90b193YXRjaCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnYWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0LCAqLyo7IHE9MC4wMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdvcmlnaW4nOiAnaHR0cHM6Ly9qYXZkYjM2NS5jb20nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZWZlcmVyJzogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4LWNzcmYtdG9rZW4nOiBhdXRoZW50aWNpdHlfdG9rZW4sXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Nvb2tpZSc6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfY29va2llLnR4dCcpLFxcbiBcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhlbnRpY2l0eV90b2tlbic6IGF1dGhlbnRpY2l0eV90b2tlbixcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdG9hc3QoJ+eCueS6huS5n+eZveeCuSzkuI3otbfkvZznlKgnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIGlkLCBhdXRoZW50aWNpdHlfdG9rZW4sIE1ZX1VSTCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgdmFyIGxpc3RWaWRlb3MgPSBKU09OLnBhcnNlKGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfdmlkZW8udHh0JykgfHwgJ1tdJyk7XFxuICAgICAgICB2YXIgc3RyID0gdGl0bGUgKyAnQEAnICsgaW1nICsgJ0BAJyArIE1ZX1VSTDtcXG4gICAgICAgIGlmIChsaXN0VmlkZW9zLmluZGV4T2Yoc3RyKSA9PSAnLTEnKSB7XFxuICAgICAgICAgICAgdmFyIHQgPSAn4p6V5Yqg5YWl5pS26JePJ1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdCA9ICfinaTvuI/lt7LmlLbol48nXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9I0ZGMDAwMD4nICsgdCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfdmlkZW8udHh0Jyk7XFxuICAgICAgICAgICAgICAgIGlmICghc3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFtuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl92aWRlby50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2Uoc3RyKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmluZGV4T2YobmFtZSkgPT0gJy0xJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfdmlkZW8udHh0JywgSlNPTi5zdHJpbmdpZnkobGlzdCkpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBzdHIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgIH0pXFxufSk7XFxuLy/mvJTlkZhcXG52YXIgYXJ0cyA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5wYW5lbC1ibG9jazpjb250YWlucyjmvJTlk6E6KSYmYScpO1xcbmlmIChhcnRzLmxlbmd0aCA+IDApIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5ryU5ZOhOlxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvnvZHlnYAnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vdGhpc2F2LmNvbS9jbi9cXFwiICsg6K+G5Yir56CBICsgXFxcIi11bmNlbnNvcmVkLWxlYWtcXFwiO1xcbiAgICAgICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICAgICAgfV1cXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGFydHNbaV0sICdUZXh0Jyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2MxMzE0MVxcXCI+JyArIHRpdGxlICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGFydHNbaV0sICdhJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsIC8v6ZO+5o6lXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJywgLy/nu4Tku7bmoLflvI9cXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WkjeWItua8lOWRmCcsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgdGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICB9LCB0aXRsZSlcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfosLfmrYzmkJzntKInLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVxcXCIgKyB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eZvuW6puaQnOe0oicsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vd3d3LmJhaWR1LmNvbS9zP3dkPVxcXCIgKyB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ejgeWKm+aQnOa8lOWRmCcsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zb3U/cnVsZT3no4HlipvlkJsu566AJnA9ZnlwYWdlJnNlYXJjaFRlcm1zPVxcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgfSwgdGl0bGUpXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgfSlcXG59XFxuXFxuLy/nsbvliKtcXG52YXIgYXJ0cyA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5wYW5lbC1ibG9jazpjb250YWlucyjpoZ7liKUpJiZhJyk7XFxuaWYgKGFydHMubGVuZ3RoID4gMCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLpoZ7liKU6XFxcIixcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgdmlkZW9FeGNsdWRlUnVsZXM6IFsnMjQwJ10sXFxuICAgICAgICAgICAgYmxvY2tSdWxlczogWycuZG9wcGlvY2RuLiddLFxcbiAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAgICAgLy92aWRlb1J1bGVzOiBbJyptM3U4KiddLFxcbiAgICAgICAgICAgIGNhY2hlTTN1ODogdHJ1ZSxcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL572R5Z2AJyxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL25qYXYudHYvemgvdi9cXFwiICsg6K+G5Yir56CBICsgXFxcIi11bmNlbnNvcmVkLWxlYWtlZFxcXCI7XFxuICAgICAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzAwOEI4QlxcXCI+JyArIHBkZmgoYXJ0c1tpXSwgJ1RleHQnKSArICc8L2ZvbnQ+PC9taWRkbGU+PC9iPicsXFxuICAgICAgICAgICAgdXJsOiBwZChhcnRzW2ldLCAnYSYmaHJlZicpICsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLCAvL+mTvuaOpVxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBwZGZoKGFydHNbaV0sICdUZXh0JylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KVxcbn1cXG5cXG4vL+ezu+WIl1xcbnZhciBhcnRzID0gcGRmYShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOezu+WIlykmJmEnKTtcXG5pZiAoYXJ0cy5sZW5ndGggPiAwKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuezu+WIlzpcXFwiLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICBmb3IgKHZhciBpIGluIGFydHMpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMDA4QjhCXFxcIj4nICsgcGRmaChhcnRzW2ldLCAnVGV4dCcpICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGFydHNbaV0sICdhJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsIC8v6ZO+5o6lXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHBkZmgoYXJ0c1tpXSwgJ1RleHQnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pXFxufVxcbi8v5a+85ryUXFxudHJ5IHtcXG4gICAgdmFyIGRpcmVjdG9yID0gcGRmaChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjlsI7mvJQpJiYudmFsdWUmJlRleHQnKTtcXG4gICAgaWYgKGRpcmVjdG9yKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5bCO5ryUOlxcXCIsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+JyArIGRpcmVjdG9yICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOWwjua8lCkmJmEmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywgLy/pk77mjqVcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLCAvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogZGlyZWN0b3JcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaycsXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbn0gY2F0Y2gge31cXG4vL+eJh+WVhlxcbnRyeSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIueJh+WVhjpcXFwiLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICB2YXIgbWFrZXJzID0gcGRmaChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjniYfllYYpJiYudmFsdWUmJlRleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+JyArIG1ha2VycyArICc8L2ZvbnQ+PC9taWRkbGU+PC9iPicsXFxuICAgICAgICB1cmw6IHBkKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeJh+WVhikmJmEmJmhyZWYnKSArICcmcGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywgLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogbWFrZXJzXFxuICAgICAgICB9XFxuICAgIH0pXFxufSBjYXRjaCB7fVxcblxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxufSlcXG5cXG50cnkge1xcbiAgICB2YXIg55+t6KmVID0gcGRmaChodG1sLCBcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZUZXh0XFxcIilcXG4gICAgdmFyIGNpbGkgPSBwZGZhKGh0bWwsICdib2R5JiYuaXRlbS5jb2x1bW5zLmlzLWRlc2t0b3AnKTtcXG4gICAgdmFyIHRhYnMgPSBbXFxcIuejgemPiChcXFwiICsgY2lsaS5sZW5ndGggKyBcXFwiKVxcXCIsIFxcXCLpoJDopr1cXFwiLCDnn63oqZVdO1xcblxcbiAgICBmdW5jdGlvbiBzZXRUYWJzKHRhYnMsIHRhYnVybCkge1xcbiAgICAgICAgdmFyIENvbG9yMSA9IFxcXCIjMTNCNjZBXFxcIjtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIGdldEhlYWQodGl0bGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIicgKyBDb2xvcjEgKyAnXFxcIj4nICsgdGl0bGUgKyAnPC9mb250Pjwvc3Ryb25nPic7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgQ29sb3IyID0gXFxcIiNmNjcyODBcXFwiO1xcblxcbiAgICAgICAgZnVuY3Rpb24gZ2V0SGVhcih0aXRsZSkge1xcbiAgICAgICAgICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yMiArICdcXFwiPicgKyB0aXRsZSArICc8L2ZvbnQ+PC9zdHJvbmc+JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZvciAodmFyIGkgaW4gdGFicykge1xcbiAgICAgICAgICAgIHZhciB0YWJuYW1lID0gdGFic1tpXTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIodGFidXJsLCAnMScpID09IGkgPyBnZXRIZWFkKHRhYm5hbWUpIDogZ2V0SGVhcih0YWJuYW1lKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGFibmFtZSwgdGFidXJsLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcih0YWJ1cmwsIGkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIHRhYm5hbWUsIHRhYnVybCwgaSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBsaXN0cyA9IFtdO1xcblxcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXG4gICAgICAgIGZ1bmN0aW9uIHBsYXlMaXN0cygpIHtcXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAvL+mihOiniOinhumikVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08bWlkZGxlPjxmb250IGNvbG9yPWJsYWNrPvCfk7rpoJDopr3oppbpoLvikaA8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogTVlfVVJMICsgJCgnJykubGF6eVJ1bGUoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoaHRtbCwgXFxcIi5tZXNzYWdlLWJvZHkmJnNvdXJjZSYmc3JjXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpICYmIHVybCAhPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczpcXFwiICsgdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5rKS5pyJ6aCQ6Ka95ZKvXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aykuaciemgkOimveWSr1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCDor4bliKvnoIEpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPG1pZGRsZT48Zm9udCBjb2xvcj1ibGFjaz7wn5O66aCQ6Ka96KaW6aC74pGhPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiArICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gXFxcImh0dHBzOi8vamF2c3VidGl0bGVkLmNvbS96aC9zZWFyY2g/a2V5d29yZHM9XFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZXVybCA9IFxcXCJodHRwczovL2phdnN1YnRpdGxlZC5jb20vXFxcIiArIHBkZmgocmVxdWVzdChzZWFyY2gpLCBcXFwiYm9keSYmLnZpZGVvYm94JiZhJiZocmVmXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlsaXN0ID0gZmV0Y2goY29kZXVybCkubWF0Y2goL2h0dHBzPzpcXFxcL1xcXFwvXFxcXFMrXFxcXC5tM3U4LylbMF1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXloZCA9IGZldGNoKHBsYXlsaXN0KS5tYXRjaCgvW15cXFwiXFxcXG5dK1xcXFwubTN1OC9nKS5wb3AoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGxheWxpc3QucmVwbGFjZShcXFwicGxheWxpc3QubTN1OFxcXCIsIHBsYXloZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKS5pyJ6aCQ6Ka95ZKvXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIOivhuWIq+eggSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAvL+mihOiniOWbvueJh1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3IgPSBwZGZhKGh0bWwsIFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW1cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW0sMDo5XFxcIilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxtaWRkbGU+PGZvbnQgY29sb3I9I0ZGOEMwMD7wn6eW8J+Pu+KAjeKZgO+4j+aoo+WTgeWcluWDjzog5YWx5pyJJyArIGxpc3IubGVuZ3RoICsgJ+W8teWclueJh/CfkYc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBNWV9VUkwgKyAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGljcyA9IHBkZmEoaHRtbCwgXFxcIi5wcmV2aWV3LWltYWdlcyYmLnRpbGUtaXRlbVxcXCIpLm1hcChpdGVtID0+IHBkZmgoaXRlbSwgXFxcImEmJmhyZWZcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwZGZoKGl0ZW0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzNfc3F1YXJlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIC8v56OB5Yqb5YaF5a65XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBjaWxpLmZvckVhY2godmlkZW8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHBkZmgodmlkZW8sICdhJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBwZGZoKHZpZGVvLCAnLm1ldGEmJlRleHQnKS5tYXRjaCgvXFxcXGQrKD86XFxcXC5cXFxcZCspP1tnbV0oYik/L2kpWzBdXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gJzAuMDBHQidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHBkZmgodmlkZW8sICcudGFncyYmVGV4dCcpXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC4/dG9ycmVudC9nLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcLj9tcDQvZ2ksICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwuP2F2aS9naSwgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC4/aGQvZ2ksICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwuP21rdi9naSwgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXF8/c2QvZ2ksICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxkKyg/OlxcXFwuXFxcXGQrKT9bZ21dKGIpPy9naSwgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXGQr5YCL5paH5Lu2L2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxzL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL0BbXFxcXHU0ZTAwLVxcXFx1OWZhNV0rL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL0AvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXCwvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgv44CQLio/44CRL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxbLio/XFxcXF0vZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC4/W1xcXFx1NGUwMC1cXFxcdTlmYTVcXFxcdTA4MDAtXFxcXHU0ZTAwXFxcXHUzMDQwLVxcXFx1MzBmZl0rL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwuP1tcXFxcdTMwNDAtXFxcXHUzMDlGXFxcXHUzMEEwLVxcXFx1MzBGRl0rL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXFxcZCtcXFxcLS8sICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXFxcLSsvLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxcXF8rLywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXCgvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXCkvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC0kLywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXCMkLywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXChcXFxcdytcXFxcKS9nLCAnJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHRhZyArICfwn5OAXFxcXHQnICsgc2l6ZSArICdcXFxcdFxcXFx08J+Xk1xcXFx0JyArIHBkZmgodmlkZW8sICcudGltZSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiAnaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL09jcXBqLnBuZycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGQodmlkZW8sICdhJiZocmVmJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDIpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwZChodG1sLCBcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZhJiZkYXRhLXVybFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IGZldGNoKHVybClcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShoLCBcXFwiLm1lc3NhZ2UtYm9keSYmLnJldmlldy1pdGVtOmhhcygucmV2aWV3LXRpdGxlKVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSAnPG1pZGRsZT48Zm9udCBjb2xvcj0jRkY4QzAwPicgKyBwZGZoKGl0ZW0sIFxcXCIucmV2aWV3LXRpdGxlLS0ubGlrZXMtLS5yZXBvcnQmJlRleHRcXFwiKSArICc8L2ZvbnQ+PC9taWRkbGU+JztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGVzYyArICc8YnI+JyArICc8c21hbGw+PGZvbnQgY29sb3I9I2ZmNjg3Nz5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JyArIHBkZmgoaXRlbSwgXFxcIi5jb250ZW50JiZUZXh0XFxcIikgKyAnPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSMxM0I2NkE+5pu05aSa55+t6KmV5Y+v5oiQ5Li6VklQ5oiW6Iez5a6Y5pa5QXBw5Lit5p+l55yLPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkFwcEludGVudCgneHh4LnBvcm5odWIuZnVjaycsICd4eHgucG9ybmh1Yi5mdWNrLk1haW5BY3Rpdml0eScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudERhdGE6IOivhuWIq+eggVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsg6K+G5Yir56CBXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwg6K+G5Yir56CBKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBwbGF5TGlzdHMoKVxcbiAgICB9XFxuXFxuICAgIHNldFRhYnModGFicywgTVlfVVJMKTtcXG4gICAgc2V0TGlzdHMobGlzdHMsIGdldE15VmFyKE1ZX1VSTCwgJzEnKSk7XFxufSBjYXRjaCAoZSkge31cXG5cXG50cnkge1xcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5tZXNzYWdlOm1hdGNoZXMo6YKE5Ye65ryU6YGOKSYmLnRpbGUtc21hbGwmJmEnKTtcXG4gICAgaWYgKGxpc3QubGVuZ3RoICE9IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNmNjcyODA7XFxcIj48Yj5UQSjlgJEp6YKE5Ye65ryU6YGOPC9zcGFuPicsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcImh0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS8xMDAucG5nXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgbGlzdC5mb3JFYWNoKHZpZGVvID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpICsgJyAnICsgcGRmaCh2aWRlbywgJ2EmJnRpdGxlJyk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICBpbWc6IHBkKHZpZGVvLCAnaW1nJiZzcmMnKSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkKHZpZGVvLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMycsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gY2F0Y2ggKGVycikge307XFxuXFxuXFxuXFxuXFxudHJ5IHtcXG4gICAgdmFyIGxpc3QyID0gcGRmYShodG1sLCAnYm9keSYmLm1lc3NhZ2U6bWF0Y2hlcyjkvaDlj6/og73kuZ/llpzmraEpJiYudGlsZS1zbWFsbCYmYScpOyAvL+WIl+ihqFxcbiAgICBpZiAobGlzdDIubGVuZ3RoICE9IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNmNjcyODA7XFxcIj48Yj7kvaDlj6/og73kuZ/llpzmraE8L3NwYW4+JyxcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEwMC5wbmdcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBsaXN0Mi5mb3JFYWNoKHZpZGVvID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpICsgJyAnICsgcGRmaCh2aWRlbywgJ2EmJnRpdGxlJyk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICBpbWc6IHBkKHZpZGVvLCAnaW1nJiZzcmMnKSArIFxcXCJAUmVmZXJlcj1cXFwiLCAvL+WbvueJh1xcbiAgICAgICAgICAgICAgICB1cmw6IHBkKHZpZGVvLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsIC8v6ZO+5o6lXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMycsIC8v57uE5Lu25qC35byPXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gY2F0Y2ggKGVycikge307XFxuXFxuXFxuLyp2YXIg6K+G5Yir56CBID0gZ2V0UGFnZVRpdGxlKCkuc3BsaXQoXFxcIiBcXFwiKVswXS5yZXBsYWNlKFxcXCJGQzJcXFwiLCBcXFwiRkMyLVBQVlxcXCIpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiZmMy6ZyA6KaBVklQ55m75b2VXFxcIixcXG4gICAgZGVzYzogXFxcIjMwMOWkp+a0i++8jOS4jeeci+S5n+e9ou+8jOiwt+atjOaQnOe0ouS4gOS4i1xcXCIsXFxuICAgIHVybDogXFxcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9XFxcIiArIOivhuWIq+eggSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdG9vbCcsIHt9KSkucnVsZSk7Ki9cXG5cXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaUtuiXj1wiLFwicGF0aFwiOlwi5pS26JePXCIsXCJydWxlXCI6XCJbJ+a8lOWRmCcsICflvbHniYcnXS5mb3JFYWNoKChsaXN0LCBpbmRleCkgPT4ge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGluZGV4ID09IGdldE15VmFyKCdjb2xsZWN0JywgJzAnKSA/ICfigJjigJjigJnigJk8Yj48Zm9udCBjb2xvcj1cXFwiI0ZGNjY5OVxcXCI+JyArIGxpc3QgOiBsaXN0LFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpbmRleCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdjb2xsZWN0JywgaW5kZXgpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgaW5kZXgpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTtcXG59KTtcXG52YXIgdSA9IGdldE15VmFyKCdjb2xsZWN0JywgJzAnKSA9PSAnMCcgPyAnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9hY3Rvci50eHQnIDogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfdmlkZW8udHh0JztcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoZmV0Y2hQQyh1KSB8fCAnW10nKTtcXG5saXN0LmZvckVhY2goKGxpc3QpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBsaXN0LnNwbGl0KCdAQCcpWzBdLFxcbiAgICAgICAgaW1nOiBsaXN0LnNwbGl0KCdAQCcpWzFdLFxcbiAgICAgICAgdXJsOiBnZXRNeVZhcignY29sbGVjdCcsICcwJykgPT0gJzAnID8gJ2hpa2VyOi8vcGFnZS95aicgOiAnaGlrZXI6Ly9wYWdlL2VqJyxcXG4gICAgICAgIGNvbF90eXBlOiBnZXRNeVZhcignY29sbGVjdCcsICcwJykgPT0gJzAnID8gJ2NhcmRfcGljXzMnIDogJ21vdmllXzInLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB1cmw6IGxpc3Quc3BsaXQoJ0BAJylbMl0sXFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+WPlua2iOaUtuiXjycsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChsaXN0LCB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoZmV0Y2hQQyh1KSB8fCAnW10nKTtcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcih4ID0+IHggIT0gbGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgfSwgbGlzdCwgdSlcXG4gICAgICAgICAgICB9XSxcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ1c2Vyc1wiLFwicGF0aFwiOlwidXNlcnNcIixcInJ1bGVcIjpcInJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxudmFyIGRhdGFDbGFzczAgPSBbe1xcbiAgICB0aXRsZTogJ+W9seeJhybmlLbol48m5biz6JmfJyxcXG4gICAgaWQ6ICcwJjEmMidcXG59XTtcXG5kYXRhQ2xhc3MwLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgIGNsYXNzVG9wKGluZGV4LCBpdGVtLCAnbXknLCBkLCAxKTtcXG59KTtcXG52YXIgaW5kZXgwID0gZ2V0TXlWYXIoJ215Y2luZGV4MCcsICcwJyk7XFxudmFyIF9jID0gZ2V0TXlWYXIoJ215YzAnLCAnMCcpO1xcbmlmIChfYyAhPSBnZXRNeVZhcignbXlfYycsICcwJykpIHtcXG4gICAgY2xlYXJNeVZhcignbXljMScpO1xcbiAgICBwdXRNeVZhcignbXljaW5kZXgxJywgJzAnKTtcXG59XFxuc3dpdGNoIChpbmRleDApIHtcXG4gICAgY2FzZSAnMCc6XFxuICAgICAgICB2YXIgZGF0YUNsYXNzMSA9IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfov5HmnJ/ngI/opr0m5oOz55yL55qE5b2x54mHJueci+mBjueahOW9seeJhybmiJHnmoTmuIXllq4m5pS26JeP55qE5riF5ZauJyxcXG4gICAgICAgICAgICBpZDogJ3JlY2VudF92aWRlb3Mmd2FudF93YXRjaF92aWRlb3Mmd2F0Y2hlZF92aWRlb3MmbGlzdHMmZmF2b3JpdGVfbGlzdHMnXFxuICAgICAgICB9XTtcXG4gICAgICAgIHZhciBteWMxID0gJ3JlY2VudF92aWRlb3MnO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJzEnOlxcbiAgICAgICAgdmFyIGRhdGFDbGFzczEgPSBbe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5ryU5ZOhJuezu+WIlybniYfllYYm5bCO5ryUJueVquiZnycsXFxuICAgICAgICAgICAgaWQ6ICdjb2xsZWN0aW9uX2FjdG9ycyZjb2xsZWN0aW9uX3NlcmllcyZjb2xsZWN0aW9uX21ha2VycyZjb2xsZWN0aW9uX2RpcmVjdG9ycyZjb2xsZWN0aW9uX2NvZGVzJ1xcbiAgICAgICAgfV07XFxuICAgICAgICB2YXIgbXljMSA9ICdjb2xsZWN0aW9uX2FjdG9ycyc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnMic6XFxuICAgICAgICB2YXIgZGF0YUNsYXNzMSA9IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICflgIvkurrkv6Hmga8m5pSv5LuY6KiY6YyEJueZu+W9lSbpgIDlh7onLFxcbiAgICAgICAgICAgIGlkOiAncHJvZmlsZSZ0cmFuc2FjdGlvbl9sb2dzJmxvZ2luJmxvZ291dCdcXG4gICAgICAgIH1dO1xcbiAgICAgICAgdmFyIG15YzEgPSAncHJvZmlsZSc7XFxuICAgICAgICBicmVhaztcXG59XFxuZGF0YUNsYXNzMS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICBjbGFzc1RvcChwYXJzZUludChpbmRleCkgKyAxLCBpdGVtLCAnbXknLCBkLCAxLCAxKTtcXG59KTtcXG5cXG5odG1sID0gZmV0Y2goJ2h0dHBzOi8vamF2ZGIzNjUuY29tL3VzZXJzLycgKyBnZXRNeVZhcignbXljMScsIG15YzEpLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JyksXFxuICAgIH0sXFxuICAgIHJlZGlyZWN0OiBmYWxzZVxcbn0pO1xcblxcbmlmICgvdmlkZW9zLy50ZXN0KGdldE15VmFyKCdteWMxJywgbXljMSkpKSB7XFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllLWxpc3QmJi5pdGVtJyk7XFxuICAgIGxpc3QuZm9yRWFjaCgobGlzdCkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChsaXN0LCAnLnZpZGVvLXRpdGxlJiZUZXh0JyksXFxuICAgICAgICAgICAgaW1nOiBwZChsaXN0LCAnaW1nJiZzcmMnKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWonLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgdXJsOiBwZChsaXN0LCAnYSYmaHJlZicpLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG59IGVsc2UgaWYgKC9jb2xsZWN0aW9uLy50ZXN0KGdldE15VmFyKCdteWMxJywgbXljMSkpKSB7XFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmZGl2LmJveCcpO1xcbiAgICBsaXN0LmZvckVhY2goKGxpc3QpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgobGlzdCwgJ3N0cm9uZyYmVGV4dCcpLFxcbiAgICAgICAgICAgIGltZzogcGQobGlzdCwgJ2ltZyYmc3JjJyksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3lpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHVybDogcGQobGlzdCwgJ2EmJmhyZWYnKSxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxufSBlbHNlIGlmICgvbG9naW4vLnRlc3QoZ2V0TXlWYXIoJ215YzEnLCBteWMxKSkpIHtcXG4gICAgaWYoZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0Jykpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogc2IoJ+i0puWPt+W3sueZu+W9lScsJ2ZmMDAwMCcpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfngrnlh7vnmbvlvZXotKblj7cnLFxcbiAgICAgICAgdXJsOiAkKCdodHRwczovL2phdmRiMzY1LmNvbS9sb2dpbicpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXFxuICAgICAgICAgICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnbGlzdCYmc2NyZWVuJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrKCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0YWdzJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbyA9IGZiYS5nZXRDb29raWUodSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZygnY286Ojo6OjonICsgY28pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY28uaW5jbHVkZXMoJ3JlbWVtYmVyX21lX3Rva2VuJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wYXJzZUxhenlSdWxlKCQkJCgpLmxhenlSdWxlKChjbykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JywgY28pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCfotKblj7flt7LnmbvlvZUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY28pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2soKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIE1ZX1VSTClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfSk7XFxufWVsc2UgaWYgKC9sb2dvdXQvLnRlc3QoZ2V0TXlWYXIoJ215YzEnLCBteWMxKSkpIHtcXG4gICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2Nvb2tpZS50eHQnLCAnJyk7XFxuICAgIHRvYXN0KCfotKblj7flt7Lnmbvlh7onKTtcXG59XFxucHV0TXlWYXIoJ215X2MnLCBfYyk7XCJ9XSIsImljb24iOiJodHRwczovL2MwLmpkYnN0YXRpYy5jb20vaW1hZ2VzL2xvZ29fMTIweDEyMC5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment