Advertisement
xiaomianao666

邀您一起看:测试

Jun 2nd, 2023
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥测试@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p3N0dWktdm9kbGlzdFwiLFwicGF0aFwiOlwic3R1aS12b2RsaXN0XCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbk1ZX1JVTEUudXJsLm1hdGNoKC9meXBhZ2UvKVswXVxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICcuc3R1aS12b2RsaXN0JiZsaScpO1xcbmZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ2EmJnRpdGxlJyksXFxuICAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcucGljLXRleHQmJlRleHQnKSxcXG4gICAgICAgIGltZzogcGQobGlzdFtqXSwgJy5sYXp5bG9hZHx8YSYmZGF0YS1vcmlnaW5hbCcpKydAUmVmZXJlcj0nLFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqcuYlwiLFwicGF0aFwiOlwiLmJcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuaWYgKGh0bWwuaW5kZXhPZign5qOA5rWL5LitJykgIT0gLTEpIHtcXG4gICAgaHRtbCA9IHJlcXVlc3QoTVlfVVJMICsgJz9idHdhZicgKyBodG1sLm1hdGNoKC9idHdhZiguKj8pXFxcXFxcXCIvKVsxXSwge30pO1xcbn1cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogcGRmaChodG1sLCAnLnN0dWktY29udGVudF9fZGV0YWlsLS1oMSYmVGV4dCcpXFxuICAgICAgICAucmVwbGFjZSgn5Zyw5Yy6JywgJ1xcXFxu5Zyw5Yy6JylcXG4gICAgICAgIC5yZXBsYWNlKCfkuLvmvJQnLCAnXFxcXG7kuLvmvJQnKSxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLmRlc2N8fC5kZXRhaWwtY29udGVudCYmVGV4dCcpLFxcbiAgICBwaWNfdXJsOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxudmFyIOe6v+i3ryA9ICdib2R5JiYuYidcXG52YXIg6YCJ6ZuGID0g57q/6LevXFxudmFyIOe6v+i3r+WQjSA9ICdoMyYmVGV4dCdcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ3VsJiZsaSdcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKJzdHVpLXZvZGxpc3RfX21lZGlhXCIsXCJwYXRoXCI6XCJzdHVpLXZvZGxpc3RfX21lZGlhXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICcuc3R1aS12b2RsaXN0X19tZWRpYSYmbGknKTtcXG5sb2coJ+aQnOe0oue7k+aenCcpXFxubG9nKGxpc3QpXFxuaWYgKGxpc3QubGVuZ3RoID09IDApIHRocm93IFxcXCLmkJzntKLkuLrnqbrvvIzlj6/og73ljLnphY3plJnor69cXFwiXFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnYSYmdGl0bGUnKSxcXG4gICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJy5waWMtdGV4dCYmVGV4dCcpLFxcbiAgICAgICAgaW1nOiBwZChsaXN0W2pdLCAnYSYmZGF0YS1vcmlnaW5hbCcpLFxcbiAgICAgICAgY29udGVudDogcGRmaChsaXN0W2pdLCAnLmRldGFpbC0taDMmJlRleHQnKSxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p215dWktdm9kbGlzdFwiLFwicGF0aFwiOlwibXl1aS12b2RsaXN0XCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdXFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJy5teXVpLXZvZGxpc3QmJmxpJylcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdoNCYmVGV4dCcpLFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLnBpYy10YWd8fC5waWMtdGV4dCYmVGV4dCcpLFxcbiAgICAgICAgaW1nOiBwZChsaXN0W2pdLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJykucmVwbGFjZSgndm9kcGxheScsJ3ZvZGRldGFpbCcpICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgIH0pXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnbmF2LXRhYnNcIixcInBhdGhcIjpcIm5hdi10YWJzXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcuZGF0YSYmVGV4dCcpXFxuICAgICAgICAucmVwbGFjZSgn5Zyw5Yy677yaJywgJyAgJylcXG4gICAgICAgIC5yZXBsYWNlKCflubTku73vvJonLCAnICAnKSArICdcXFxcbicgK1xcbiAgICAgICAgcGRmaChodG1sLCAnLmRhdGEsMSYmVGV4dCcpXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDE1KSArICdcXFxcbicgK1xcbiAgICAgICAgcGRmaChodG1sLCAnLmRhdGEsMiYmVGV4dCcpLFxcbiAgICBkZXNjOiBwZGZoKGh0bWwsICcuZGF0YSwzJiZUZXh0JyksXFxuICAgIGltZzogcGQoaHRtbCwgJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCcpLFxcbiAgICB1cmw6IE1ZX1VSTCxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbn0pO1xcbnZhciDnur/ot68gPSAnLm5hdi10YWJzJiZhJ1xcbnZhciDpgInpm4YgPSAnLnRhYi1jb250ZW50JiYubXl1aS1jb250ZW50X19saXN0fHwuc3R1aS1jb250ZW50X19wbGF5bGlzdCdcXG52YXIg57q/6Lev5ZCNID0gJ1RleHQnXFxudmFyIOmAiembhuWIl+ihqCA9ICd1bCYmbGknXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SibXl1aS12b2RsaXN0X19tZWRpYVwiLFwicGF0aFwiOlwibXl1aS12b2RsaXN0X19tZWRpYVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnI3NlYXJjaExpc3QmJmxpJyk7XFxubG9nKCfmkJzntKLnu5PmnpwnKVxcbmxvZyhsaXN0KVxcbmlmIChsaXN0Lmxlbmd0aCA9PSAwKSB0aHJvdyBcXFwi5pCc57Si5Li656m677yM5Y+v6IO95Yy56YWN6ZSZ6K+vXFxcIlxcbmZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ2EmJnRpdGxlJyksXFxuICAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcucGljLXRleHQmJlRleHQnKSxcXG4gICAgICAgIHBpY191cmw6IHBkKGxpc3Rbal0sICdhJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgICAgICBjb250ZW50OiBwZGZoKGxpc3Rbal0sICcuZGV0YWlsLS1oNCYmVGV4dCcpLFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p3ZvZGxpc3RcIixcInBhdGhcIjpcInZvZGxpc3RcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJy52b2RsaXN0JiZsaScpO1xcbmZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgZC5wdXNoKHtcXG4gICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ2EmJnRpdGxlJyksXFxuICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJ2EmJlRleHQnKSxcXG4gICAgICAgcGljX3VybDogcGQobGlzdFtqXSwgJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCcpKydAUmVmZXJlcj0nLFxcbiAgICAgICB1cmw6IHBkKGxpc3Rbal0sJ2EmJmhyZWYnKSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p21vLXBsYXktbG9hZFwiLFwicGF0aFwiOlwibW8tcGxheS1sb2FkXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcudmlkZW8taW5mby1pdGVtcywyJiZUZXh0JylcXG4gIC5yZXBsYWNlKCfliIbnsbt8JywgJycpXFxuICAucmVwbGFjZSgn5Zyw5Yy677yaJywgJycpXFxuICAucmVwbGFjZSgn5bm05Lu977yaJywgJyAnKS5zdWJzdHJpbmcoMCwgMTgpICsgJ1xcXFxuJyArICdcXFxcbicgKyBcXG4gIHBkZmgoaHRtbCwgJy52aWRlby1pbmZvLWl0ZW1zLDEmJlRleHQnKS5zdWJzdHJpbmcoMCwgMTgpLFxcbiAgICBwaWNfdXJsOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLXNyYycpLFxcbiAgICB1cmw6IE1ZX1VSTCxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbn0pO1xcblxcbnZhciDnur/ot68gPSAnYm9keSYmLm1vZHVsZS10YWItY29udGVudCYmLm1vZHVsZS10YWItaXRlbSdcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5zb3J0LWl0ZW0nXFxudmFyIOe6v+i3r+WQjSA9ICdzcGFuJiZUZXh0J1xcbnZhciDpgInpm4bliJfooaggPSAnYm9keSYmYSdcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqduYXYtdGFiczFcIixcInBhdGhcIjpcIm5hdi10YWJzMVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogcGRmaChodG1sLCAncCwxJiZUZXh0JylcXG4gICAgICAgIC5yZXBsYWNlKCfnsbvlnovvvJonLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKCflnLDljLrvvJonLCAnICcpXFxuICAgICAgICAucmVwbGFjZSgn5bm05Lu977yaJywgJycpXFxuICAgICAgICAucmVwbGFjZSgn6K+t6KiA77yaJywgJycpICtcXG4gICAgICAgICdcXFxcblxcXFxuJyArIHBkZmgoaHRtbCwgJ3AsNCYmVGV4dCcpXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDMwKSxcXG4gICAgZGVzYzogcGRmaChodG1sLCAncCwyJiZUZXh0JyksXFxuICAgIHBpY191cmw6IHBkKGh0bWwsICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWwnKSxcXG4gICAgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXG59KTtcXG5cXG52YXIg57q/6LevID0gJy5uYXYtdGFicyYmYSdcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5zdHVpLWNvbnRlbnRfX3BsYXlsaXN0J1xcbnZhciDnur/ot6/lkI0gPSAnYSYmVGV4dCdcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ3VsJiZsaSdcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJmbGV4X2J1dHRvblwiLFwibmFtZVwiOlwi5a6a5L2N5LqM57qnXCIsXCJwYXRoXCI6XCJlcmppXCIsXCJydWxlXCI6XCJ2YXIgdGFicyA9IFtdXFxudmFyIGxpc3RzID0gW11cXG5cXG5wZGZhKGh0bWwsIOe6v+i3rykuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgZGF0YSA9IHBkZmgoZGF0YSwg57q/6Lev5ZCNKVxcbiAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIilcXG4gICAgfVxcbiAgICB0YWJzLnB1c2goZGF0YSlcXG59KVxcblxcbnBkZmEoaHRtbCwg6YCJ6ZuGKS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICBsaXN0cy5wdXNoKHBkZmEoZGF0YSwg6YCJ6ZuG5YiX6KGoKSlcXG59KVxcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGNsZWFyTXlWYXIoXFxcImxpc3RzXFxcIik7XFxufSkpO1xcbnN0b3JhZ2UwLnB1dE15VmFyKFxcXCJsaXN0c1xcXCIsIGxpc3RzKTtcXG52YXIgbGlzdCA9IGxpc3RzW2dldE15VmFyKE1ZX1VSTCwgJzAnKV07XFxudmFyIOaOkuW6jyA9IGdldE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCAnIzFhYWQxOVxcXCI+5q2j5bqPJyk7XFxudmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxudmFyIOaOkuW6j+WQjSA9ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I65o6S5bqPPC9zcGFuPjwvYj4nXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICcgKyDmjpLluo8gKyAnPC9zcGFuPjwvYj4nLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHRhYnMsIOaOkuW6j+WQjSwgbGF6eSwgZCkgPT4ge1xcbiAgICAgICAgdmFyIGxpc3RzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImxpc3RzXFxcIik7XFxuICAgICAgICB2YXIg56ug6IqCID0gbGlzdHNbZ2V0TXlWYXIoTVlfVVJMLCAnMCcpXTtcXG4gICAgICAgIHZhciDmjpLluo8gPSBnZXRNeVZhcihNWV9VUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwgJyMxYWFkMTlcXFwiPuato+W6jycpO1xcbiAgICAgICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxuICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogTVlfVVJMICsgXFxcIl/mjpLluo9cXFwiLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlRWYm945o6o6YCBXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0YWJzLCBsaXN0cywgZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciDmjqjpgIEgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZ2V0UGFnZVRpdGxlKCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJjb250ZW50XFxcIjogZC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicGljXFxcIjogZC5pbWcgfHwgZC5waWNfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZnJvbVxcXCI6IHRhYnMuam9pbignJCQkJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBzdG9yYWdlMC5nZXRNeVZhcihcXFwibGlzdHNcXFwiKS5tYXAobGkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpLm1hcChsaTEgPT4gcGRmaChsaTEsICdUZXh0JykgKyAnJCcgKyBwZChsaTEsICdhJiZocmVmJykpLmpvaW4oJyMnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCckJCQnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9wdXNoP3J1bGU9WFlR5o6o6YCBJnB1c2h1cmw9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSjmjqjpgIEpKVxcbiAgICAgICAgICAgICAgICAgICAgfSwgdGFicywgbGlzdHMsIGQpXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB0aXRsZTog5o6S5bqP5ZCNLnJlcGxhY2UoJ+aOkuW6jycsIOaPkOekuilcXG4gICAgICAgIH0pXFxuICAgICAgICBpZiAo5o6S5bqPID09ICcjMWFhZDE5XFxcIj7mraPluo8nKSB7XFxuICAgICAgICAgICAg56ug6IqCLnJldmVyc2UoKVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGNwID0g56ug6IqCLm1hcCgoZGF0YSwgc3NpZCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGRhdGEsICdhJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgIHVybDogcGQoZGF0YSwgJ2EmJmhyZWYnKSArIGxhenksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiDnq6DoioIubGVuZ3RoID4gMyA/ICd0ZXh0XzQnIDogJ3RleHRfMicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwZChkYXRhLCAnYSYmaHJlZicpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkZWxldGVJdGVtQnlDbHMoTVlfVVJMICsgXFxcIl/pgInpm4ZcXFwiKTtcXG4gICAgICAgIGFkZEl0ZW1CZWZvcmUoTVlfVVJMICsgXFxcImZvb3RlclxcXCIsIGNwKTtcXG4gICAgICAgIHB1dE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCDmj5DnpLopXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIHRhYnMsIOaOkuW6j+WQjSwgbGF6eSwgZFswXSksXFxuICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf5o6S5bqPXFxcIixcXG4gICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICB0aXRsZTogXFxcIlRWYm945o6o6YCBXFxcIixcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygodGFicywgbGlzdHMsIGQpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIOaOqOmAgSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZ2V0UGFnZVRpdGxlKCksXFxuICAgICAgICAgICAgICAgICAgICBcXFwiY29udGVudFxcXCI6IGQuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJwaWNcXFwiOiBkLmltZyB8fCBkLnBpY191cmwsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiZnJvbVxcXCI6IHRhYnMuam9pbignJCQkJyksXFxuICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImxpc3RzXFxcIikubWFwKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGkubWFwKGxpMSA9PiBwZGZoKGxpMSwgJ1RleHQnKSArICckJyArIHBkKGxpMSwgJ2EmJmhyZWYnKSkuam9pbignIycpXFxuICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCckJCQnKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3B1c2g/cnVsZT1YWVHmjqjpgIEmcHVzaHVybD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KOaOqOmAgSkpXFxuICAgICAgICAgICAgfSwgdGFicywgbGlzdHMsIGRbMF0pXFxuICAgICAgICB9XVxcbiAgICB9XFxufSlcXG5cXG50YWJzLmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZ2V0TXlWYXIoTVlfVVJMLCAnMCcpID09IGlkID8gJ+KAnOKAnCcgKyBkYXRhICsgJ+KAneKAnScgOiBkYXRhLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjnur/ot68sIGxhenksIGlkKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGxpc3RzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImxpc3RzXFxcIik7XFxuICAgICAgICAgICAgdmFyIOaOkuW6jyA9IGdldE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCAnIzFhYWQxOVxcXCI+5q2j5bqPJyk7XFxuICAgICAgICAgICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxuICAgICAgICAgICAg57q/6LevLmZvckVhY2goKGRhdGEsIHhsaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaWQgPT0geGxpZCA/ICfigJzigJwnICsgZGF0YSArICfigJ3igJ0nIDogZGF0YSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf57q/6LevXFxcIiArIHhsaWRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwdXRNeVZhcihNWV9VUkwsIGlkKVxcbiAgICAgICAgICAgIHZhciDnq6DoioIgPSBsaXN0c1tnZXRNeVZhcihNWV9VUkwsICcwJyldO1xcbiAgICAgICAgICAgIGlmICjmjpLluo8gPT0gJyNGRjAwMDBcXFwiPuWAkuW6jycpIHtcXG4gICAgICAgICAgICAgICAg56ug6IqCLnJldmVyc2UoKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgY3AgPSDnq6DoioIubWFwKChkYXRhLCBzc2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBwZChkYXRhLCAnYSYmaHJlZicpICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiDnq6DoioIubGVuZ3RoID4gMyA/ICd0ZXh0XzQnIDogJ3RleHRfMicsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfVVJMICsgXFxcIl/pgInpm4ZcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwZChkYXRhLCAnYSYmaHJlZicpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIik7XFxuICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShNWV9VUkwgKyBcXFwiZm9vdGVyXFxcIiwgY3ApO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0sIHRhYnMsIGxhenksIGlkKSxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogTVlfVVJMICsgXFxcIl/nur/ot69cXFwiICsgaWRcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSlcXG5cXG5pZiAo5o6S5bqPID09ICcjRkYwMDAwXFxcIj7lgJLluo8nKSB7XFxuICAgIGxpc3QucmV2ZXJzZSgpXFxufVxcbmxpc3QuZm9yRWFjaCgoZGF0YSwgaWQpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGRhdGEsICdhJiZUZXh0JyksXFxuICAgICAgICB1cmw6IHBkKGRhdGEsICdhJiZocmVmJykgKyBsYXp5LFxcbiAgICAgICAgY29sX3R5cGU6IGxpc3QubGVuZ3RoID4gMyA/ICd0ZXh0XzQnIDogJ3RleHRfMicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGNsczogTVlfVVJMICsgXFxcIl/pgInpm4ZcXFwiLFxcbiAgICAgICAgICAgIGlkOiBwZChkYXRhLCAnYSYmaHJlZicpXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0pXFxubGV0IG5ld3N0aXAgPSBsaXN0Lmxlbmd0aDtcXG5pZiAobmV3c3RpcCkge1xcbiAgICBzZXRMYXN0Q2hhcHRlclJ1bGUoJ2pzOicgKyAkLnRvU3RyaW5nKCjpgInpm4YsIOmAiembhuWIl+ihqCkgPT4ge1xcbiAgICAgICAgc2V0UmVzdWx0KCfmm7TmlrDoh7M6IOesrCcgKyBwZGZhKGdldFJlc0NvZGUoKSwg6YCJ6ZuGKS5tYXAoZGF0YSA9PiBwZGZhKGRhdGEsIOmAiembhuWIl+ihqCkubGVuZ3RoKS5zb3J0KChhLCBiKSA9PiBiIC0gYSlbMF0gKyBcXFwi6ZuGXFxcIik7XFxuICAgIH0sIOmAiembhiwg6YCJ6ZuG5YiX6KGoKSk7XFxufVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiBNWV9VUkwgKyBcXFwiZm9vdGVyXFxcIlxcbiAgICB9XFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdwbGF5X3NvdXJjZV90YWJcIixcInBhdGhcIjpcInBsYXlfc291cmNlX3RhYlwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogcGRmaChodG1sLCAnLnJlbWFya3MmJlRleHQnKSArXFxuICAgICAgICAnXFxcXG4nICsgcGRmaChodG1sLCAnLnMtdG9wLWluZm8tZGV0YWlsJiZhJiZUZXh0JykgK1xcbiAgICAgICAgcGRmaChodG1sLCAnLnMtdG9wLWluZm8tZGV0YWlsJiZhLDEmJlRleHQnKSArXFxuICAgICAgICBwZGZoKGh0bWwsICcucy10b3AtaW5mby1kZXRhaWwmJmEsMiYmVGV4dCcpICtcXG4gICAgICAgICdcXFxcbuKAnOKAnOeugOS7i++8muS4jeiDveeUqOWwseWIoOaOieWQp+KAneKAnScsXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJy5kZXNjX3R4dCYmVGV4dCcpLnN1YnN0cmluZygwLCAyMCksXFxuICAgIGltZzogcGQoaHRtbCwgJy5pbWctY292ZXJ8fC52b2QtZGV0YWlsLWJqJiZzcmMnKSxcXG4gICAgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXG59KTtcXG52YXIg57q/6LevID0gJy5wbGF5X3NvdXJjZV90YWImJmEnXFxudmFyIOmAiembhiA9ICdib2R5JiYucGxheWVyX2xpc3R8fCNwbGF5bGlzdGJveHx8I3BsYXlzeCdcXG52YXIg57q/6Lev5ZCNID0gJ2EmJlRleHQnXFxudmFyIOmAiembhuWIl+ihqCA9ICd1bCYmbGknXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnZmVkLXBsYXktaXRlbVwiLFwicGF0aFwiOlwiZmVkLXBsYXktaXRlbVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogcGRmaChodG1sLCAnZGQmJmxpLDMmJlRleHQnKSArXFxuICAgICAgICAnXFxcXG4nICsgcGRmaChodG1sLCAnZGQmJmxpLDQmJlRleHQnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAxNSkgKyAnXFxcXG4nICtcXG4gICAgICAgIHBkZmgoaHRtbCwgJ2RkJiZsaSw1JiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpLFxcbiAgICBkZXNjOiBwZGZoKGh0bWwsICdkZCYmbGksNiYmVGV4dCcpLnN1YnN0cmluZygwLCAyNSksXFxuICAgIHBpY191cmw6IHBkKGh0bWwsICcuZmVkLWxhenkmJmRhdGEtb3JpZ2luYWwnKSxcXG4gICAgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxufSk7XFxudmFyIOe6v+i3ryA9ICdib2R5JiYuZmVkLWRyb3AtYnRucydcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5mZWQtcGxheS1pdGVtJ1xcbnZhciDnur/ot6/lkI0gPSAnYSYmVGV4dCdcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ2JvZHkmJi5mZWQtYnRucy1pbmZvJ1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0omRsXCIsXCJwYXRoXCI6XCJkbFwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnYm9keSYmZGwnKTtcXG5sb2coJ+aQnOe0oue7k+aenCcpXFxubG9nKGxpc3QpXFxuaWYgKGxpc3QubGVuZ3RoID09IDApIHRocm93IFxcXCLmkJzntKLkuLrnqbrvvIzlj6/og73ljLnphY3plJnor69cXFwiXFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICBkLnB1c2goe1xcbiAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnaDEmJlRleHQnKSxcXG4gICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLmZlZC1saXN0LXJlbWFya3MmJlRleHQnKSxcXG5cXHQgICAgY29udGVudDogcGRmaChsaXN0W2pdLCAnLmZlZC1wYXJ0LWVzYW4tLXNwYW4mJlRleHQnKSxcXG4gICAgICAgaW1nOiBwZChsaXN0W2pdLCAnYSYmZGF0YS1vcmlnaW5hbCcpLFxcbiAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJylcXG4gIH0pO1xcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIiNNYXBwaW5nXCIsXCJwYXRoXCI6XCJNYXBwaW5nXCIsXCJydWxlXCI6XCJqczpcXG4kLmV4cG9ydHMgPSB7XFxuICAgIFxcXCJob21lXFxcIjogW3tcXG4gICAgICAgICAgICBrZXlzOiBbXFxcIiBiIFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcIi5iXFxcIixcXG4gICAgICAgICAgICAvLyAgICAgYWxsS2V5OiB0cnVlLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcIm5hdi10YWJzXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibmF2LXRhYnNcXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcIm15dWktY29udGVudF9fbGlzdFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcIm15dWktY29udGVudF9fbGlzdFxcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibmF2LXRhYnNcXFwiLCBcXFwic3R1aS1jb250ZW50X19wbGF5bGlzdFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcIm5hdi10YWJzMVxcXCIsXFxuICAgICAgICAgICAgYWxsS2V5OiB0cnVlLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcImgzXFxcIiwgXFxcInN0dWktY29udGVudF9fcGxheWxpc3RcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoM1xcXCIsXFxuICAgICAgICAgICAgYWxsS2V5OiB0cnVlLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcIm15dWktdm9kbGlzdCBcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJteXVpLXZvZGxpc3RcXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcIm1vLW1vdnMtaXRlbVxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcIm1vLW1vdnMtaXRlbVxcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibW9kdWxlLXRhYi1pdGVtXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibW9kdWxlLXRhYi1pdGVtXFxcIixcXG4gICAgICAgICAgICAvLyAgICAgYWxsS2V5OiB0cnVlLFxcbiAgICAgICAgfSx7XFxuICAgICAgICAgICAga2V5czogW1xcXCJ5LXBsYXlMaXN0XFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwieS1wbGF5TGlzdFxcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwic3R1aS12b2RsaXN0IFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcInN0dWktdm9kbGlzdFxcXCIsXFxuICAgICAgICAgICAgLy8gICAgIGFsbEtleTogdHJ1ZSxcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJwbGF5X3NvdXJjZV90YWJcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJwbGF5X3NvdXJjZV90YWJcXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcImZlZC1wbGF5LWl0ZW1cXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJmZWQtcGxheS1pdGVtXFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJtb2R1bGUtaXRlbVxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcIm1vZHVsZS1pdGVtc1xcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwidm9kbGlzdCBcXFwiLCBcXFwibGF6eWxvYWRcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJ2b2RsaXN0XFxcIixcXG4gICAgICAgICAgICBhbGxLZXk6IHRydWUsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibW8tcGxheS1sb2FkXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibW8tcGxheS1sb2FkXFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJmZWQtbGlzdC10aXRsZVxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcImZlZC1saXN0LXRpdGxlXFxcIixcXG4gICAgICAgICAgICAvL2FsbEtleTogdHJ1ZSxcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJwYWNrLXlrcGFja1xcXFxcXFwiXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwicGFjay15a3BhY2tcXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICAgIC8qXFxuICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgIGtleXM6IFtcXFwiaXRlbVxcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaXRlbVxcXCIsXFxuICAgICAgICAgICAgICAgIH0sKi9cXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcImRhdGFfbGlzdFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcImRhdGFfbGlzdFxcXCIsXFxuICAgICAgICB9LFxcbiAgICBdLFxcbiAgICBcXFwic2VhcmNoXFxcIjogW3tcXG4gICAgICAgICAgICBrZXlzOiBbXFxcInN0dWktdm9kbGlzdF9fbWVkaWFcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJzdHVpLXZvZGxpc3RfX21lZGlhXFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJteXVpLXZvZGxpc3RfX21lZGlhXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibXl1aS12b2RsaXN0X19tZWRpYVxcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibW9kdWxlLXNlYXJjaC1pdGVtXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibW9kdWxlLXNlYXJjaC1pdGVtXFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJzdHVpLXZvZGxpc3QgXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwic3R1aS12b2RsaXN0XFxcIixcXG4gICAgICAgICAgICAvLyAgICAgYWxsS2V5OiB0cnVlLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcImRsIFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcImRsXFxcIixcXG4gICAgICAgICAgICBhbGxLZXk6IHRydWUsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibW9kdWxlLWl0ZW1zXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibW9kdWxlLWl0ZW1zXFxcIixcXG4gICAgICAgIH0sXFxuICAgIF1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCIjYXV0b1wiLFwicGF0aFwiOlwiYXV0b1wiLFwicnVsZVwiOlwianM6XFxuZnVuY3Rpb24gZ2V0UGFnZVNvdXJjZShrZXkpIHtcXG4gICAgbGV0IHNyYyA9IHJlcXVlc3QoXFxcImhpa2VyOi8vcGFnZS9cXFwiICsga2V5ICsgXFxcIj9ydWxlPeaooeadv8K3UVxcXCIpO1xcbiAgICBzcmMgPSBKU09OLnBhcnNlKHNyYykucnVsZTtcXG4gICAgcmV0dXJuIHNyYztcXG59XFxuY29uc3Qgc291cmNlTWFwID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvTWFwcGluZz9ydWxlPeaooeadv8K3UVxcXCIpO1xcblxcbmZ1bmN0aW9uIGF1dG9QYWdlKGh0bWxzcmMsIHR5cGUpIHtcXG4gICAgbGV0IHBhZ2VSdWxlcyA9IFtdLFxcbiAgICAgICAgaHRtbFNvdXJjZSA9IGh0bWxzcmMsXFxuICAgICAgICBwYWdlVHlwZSxcXG4gICAgICAgIG1NYXBwaW5nO1xcbiAgICBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBwYWdlVHlwZSA9IHR5cGU7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBwYWdlVHlwZSA9IE1ZX1RZUEU7XFxuICAgIH1cXG4gICAgbU1hcHBpbmcgPSBzb3VyY2VNYXBbcGFnZVR5cGVdO1xcbiAgICBpZiAobU1hcHBpbmcgPT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShtTWFwcGluZykpIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5LiN5a2Y5ZyoXFxcIiArIHBhZ2VUeXBlICsgXFxcIuexu+Wei+eahOaooeadv1xcXCIpO1xcbiAgICB9XFxuICAgIGZvciAobGV0IGl0ZW0gb2YgbU1hcHBpbmcpIHtcXG4gICAgICAgIGlmIChpdGVtLmFsbEtleSkge1xcbiAgICAgICAgICAgIGlmIChpdGVtLmtleXMuZXZlcnkoa2V5ID0+IGh0bWxTb3VyY2UuaW5jbHVkZXMoa2V5KSkpIHtcXG4gICAgICAgICAgICAgICAgcGFnZVJ1bGVzLnB1c2goaXRlbSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAoaXRlbS5rZXlzLnNvbWUoa2V5ID0+IGh0bWxTb3VyY2UuaW5jbHVkZXMoa2V5KSkpIHtcXG4gICAgICAgICAgICAgICAgcGFnZVJ1bGVzLnB1c2goaXRlbSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmKHBhZ2VSdWxlcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgbG9nKFxcXCLmmoLml6DlkIjpgILnmoTmqKHmnb9cXFwiKTtcXG4gICAgfVxcbiAgICBmb3IgKGxldCBwYWdlUnVsZSBvZiBwYWdlUnVsZXMpIHtcXG4gICAgICAgIGxvZyhcXFwi5q2j5Zyo5Yy56YWN77yaXFxcIiArIHBhZ2VSdWxlLnVybCk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGV2YWwuY2FsbChudWxsLCBcXFwiOyhmdW5jdGlvbigpe1xcXCIgKyBnZXRQYWdlU291cmNlKHBhZ2VSdWxlLnVybCkgKyBcXFwifSkoKVxcXCIpO1xcbiAgICAgICAgICAgIGxvZyhcXFwi5Yy56YWN5qih5p2/5oiQ5Yqf77yM5q2j5Zyo57uT5p2f5Yy56YWN6L+b56iLXFxcIik7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKFxcXCLljLnphY3mqKHmnb/plJnor69cXFwiKTtcXG4gICAgICAgICAgICBsb2coZS50b1N0cmluZygpKVxcbiAgICAgICAgICAgIGxvZyhcXFwi5q2j5Zyo5Yy56YWN5LiL5LiA5Liq5qih5p2/Li4uLi4uXFxcIilcXG4gICAgICAgICAgICBpZiAocGFnZVJ1bGUudXJsID09IHBhZ2VSdWxlc1twYWdlUnVsZXMubGVuZ3RoIC0gMV0udXJsKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwi5bey5Yy56YWN5Yiw5pyA5ZCO5LiA5Liq5qih5p2/77yM5pqC5peg5ZCI6YCC55qE5qih5p2/XFxcIik7XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChbXSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxufVxcbiQuZXhwb3J0cy5hdXRvUGFnZSA9IGF1dG9QYWdlO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qncGFjay15a3BhY2tcIixcInBhdGhcIjpcInBhY2steWtwYWNrXCIsXCJydWxlXCI6XCJ2YXIgZCA9W107XFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJ2JvZHkmJi5wYWNrLXlrcGFjaycpO1xcbmZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgZC5wdXNoKHtcXG4gICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ2EmJnRpdGxlJyksXFxuICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJ3NwYW4sLTEmJlRleHQnKSxcXG4gICAgICAgaW1nOiBwZChsaXN0W2pdLCAnLmVjbGF6eSYmZGF0YS1vcmlnaW5hbCcpKydAUmVmZXJlcj0nLFxcbiAgICAgICB1cmw6IHBkKGxpc3Rbal0sJ2EmJmhyZWYnKSsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qnbW9kdWxlLWl0ZW1zXCIsXCJwYXRoXCI6XCJtb2R1bGUtaXRlbXNcIixcInJ1bGVcIjpcIk1ZX1JVTEUudXJsLm1hdGNoKC9meXBhZ2UvKVswXVxcbnZhciBkID0gW11cXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnYm9keSYmLm1vZHVsZS1pdGVtJyk7XFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnc3Ryb25nfHxhJiZUZXh0fHx0aXRsZScpLFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLm1vZHVsZS1pdGVtLXRleHR8fC5tb2R1bGUtaXRlbS1ub3RlJiZUZXh0JyksXFxuICAgICAgICBwaWNfdXJsOiBwZChsaXN0W2pdLCAnaW1nfHwubGF6eSYmZGF0YS1zcmN8fGRhdGEtb3JpZ2luYWx8fHNyYycpICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJykgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCJcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p21vZHVsZS10YWItaXRlbVwiLFwicGF0aFwiOlwibW9kdWxlLXRhYi1pdGVtXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcblxcbnRyeSB7XFxuICAgIHZhciB0aXRsZSA9IHBkZmEoaHRtbCwgJ2JvZHktLWEmJi50YWctbGluaycpO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgdmFyIHRpdGxlID0gJyc7XFxufVxcbnZhciBUID0gW107XFxuZm9yICh2YXIgaSBpbiB0aXRsZSkge1xcbiAgICBULnB1c2gocGRmaCh0aXRsZVtpXSwgJ2EmJlRleHQnKSlcXG59XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFQuam9pbignICAnKSArICdcXFxcbicgK1xcbiAgICAgICAgcGRmaChodG1sLCAnLnZpZGVvLWluZm8taXRlbXMsMSYmVGV4dCcpXFxuICAgICAgICAuc3BsaXQoJy8nKS5qb2luKCcgICcpXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDIwKSArICdcXFxcbicgK1xcbiAgICAgICAgcGRmaChodG1sLCAnLnZpZGVvLWluZm8taXRlbXMmJlRleHQnKVxcbiAgICAgICAgLnNwbGl0KCcvJykuam9pbignICAnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAyMCksXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJy52aWRlby1pbmZvLWl0ZW1zLDImJlRleHQnKSxcXG4gICAgaW1nOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsfHxkYXRhLXNyY3x8c3JjJyksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxudmFyIOe6v+i3ryA9ICdib2R5JiYubW9kdWxlLXRhYi1pdGVtJ1xcbnZhciDpgInpm4YgPSAnYm9keSYmLnNjcm9sbC1ib3gteXx8Lm1vZHVsZS1saXN0J1xcbnZhciDnur/ot6/lkI0gPSAnc3BhbiYmVGV4dCdcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ2JvZHkmJmEnXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SibW9kdWxlLXNlYXJjaC1pdGVtXCIsXCJwYXRoXCI6XCJtb2R1bGUtc2VhcmNoLWl0ZW1cIixcInJ1bGVcIjpcInZhciBkID0gW107XFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJ2JvZHkmJi5tb2R1bGUtc2VhcmNoLWl0ZW0nKTtcXG5sb2coJ+aQnOe0oue7k+aenCcpXFxubG9nKGxpc3QpXFxuaWYgKGxpc3QubGVuZ3RoID09IDApIHRocm93IFxcXCLmkJzntKLkuLrnqbrvvIzlj6/og73ljLnphY3plJnor69cXFwiXFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnaDMmJlRleHQnKSxcXG4gICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJy52aWRlby1zZXJpYWwmJlRleHQnKSxcXG4gICAgICAgIGNvbnRlbnQ6IHBkZmgobGlzdFtqXSwgJy52aWRlby1pbmZvLWF1eCYmVGV4dCcpLFxcbiAgICAgICAgaW1nOiBwZChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsfHxkYXRhLXNyYycpLFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnLnZpZGVvLXNlcmlhbCYmaHJlZicpICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p2l0ZW1cIixcInBhdGhcIjpcIml0ZW1cIixcInJ1bGVcIjpcInZhciBkID0gW107XFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJ2JvZHkmJi5pdGVtJyk7XFxuZm9yIChsZXQgaSBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0W2ldLCAnaW1nJiZhbHQnKSxcXG4gICAgICAgIGRlc2M6IHBkZmgobGlzdFtpXSwgJ3AmJlRleHQnKSxcXG4gICAgICAgIHBpY191cmw6IHBkKGxpc3RbaV0sICdpbWcmJnNyYycpLFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2ldLCAnYSYmaHJlZicpLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJ1xcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wibmFtZVwiOlwi5LiA57qnZGF0YV9saXN0XCIsXCJwYXRoXCI6XCJkYXRhX2xpc3RcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJyNkYXRhX2xpc3QmJmxpJyk7XFxuZm9yIChsZXQgaSBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0W2ldLCAnYSYmdGl0bGUnKSxcXG4gICAgICAgIGRlc2M6IHBkZmgobGlzdFtpXSwgJ2VtJiZUZXh0JyksXFxuICAgICAgICBwaWNfdXJsOiBwZChsaXN0W2ldLCAnaW1nJiZkYXRhLXNyYycpLFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2ldLCAnYSYmaHJlZicpLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJ1xcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p2gzXCIsXCJwYXRoXCI6XCJoM1wiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5pZiAoaHRtbC5pbmRleE9mKCfmo4DmtYvkuK0nKSAhPSAtMSkge1xcbiAgICBodG1sID0gcmVxdWVzdChNWV9VUkwgKyAnP2J0d2FmJyArIGh0bWwubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcIi8pWzFdKTtcXG59XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoaHRtbCwgJy5kYXRhLDImJlRleHQnKVxcbiAgICAgICAgLnJlcGxhY2UoJ+exu+Wei++8micsICcnKVxcbiAgICAgICAgLnJlcGxhY2UoJ+WcsOWMuu+8micsICcnKVxcbiAgICAgICAgLnJlcGxhY2UoJ+W5tOS7ve+8micsICcgJylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTgpICsgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcuZGF0YSwxJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpICsgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcuZGF0YSYmVGV4dCcpXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDE1KSxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLmRldGFpbC1za2V0Y2h8fC5kYXRhLDN8fCNkZXNjJiZUZXh0JyksXFxuICAgIGltZzogcGQoaHRtbCwgJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCcpLFxcbiAgICB1cmw6IE1ZX1VSTCxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbn0pO1xcblxcbnZhciDnur/ot68gPSAnYm9keSYmLnN0dWktcGFubmVsOmhhcyguc3R1aS1jb250ZW50X19wbGF5bGlzdCknXFxudmFyIOmAiembhiA9ICdib2R5JiYuc3R1aS1jb250ZW50X19wbGF5bGlzdCdcXG52YXIg57q/6Lev5ZCNID0gJ2gzJiZUZXh0J1xcbnZhciDpgInpm4bliJfooaggPSAndWwmJmxpJ1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p2ZlZC1saXN0LXRpdGxlXCIsXCJwYXRoXCI6XCJmZWQtbGlzdC10aXRsZVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG5NWV9SVUxFLnVybC5tYXRjaCgvZnlwYWdlLylbMF1cXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnLmZlZC1saXN0LWluZm8mJmxpJyk7XFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICBkLnB1c2goe1xcbiAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnLmZlZC1saXN0LXRpdGxlJiZUZXh0JyksXFxuICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJy5mZWQtdGV4dC1jZW50ZXImJlRleHQnKSxcXG4gICAgICAgaW1nOiBwZChsaXN0W2pdLCAnYSYmZGF0YS1vcmlnaW5hbCcpKydAUmVmZXJlcj0nLFxcbiAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJylcXG4gIH0pO1xcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p215dWktY29udGVudF9fbGlzdFwiLFwicGF0aFwiOlwibXl1aS1jb250ZW50X19saXN0XCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcuZGF0YSwwJiZUZXh0JylcXG4gICAgICAgIC5yZXBsYWNlKCflnLDljLrvvJonLCAnICAnKVxcbiAgICAgICAgLnJlcGxhY2UoJ+W5tOS7ve+8micsICcgICcpICsgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcuZGF0YSwxJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpICsgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcuZGF0YSwyJiZUZXh0JyksXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJy5kYXRhLDMmJlRleHQnKSxcXG4gICAgcGljX3VybDogcGQoaHRtbCwgJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCcpLFxcbiAgICB1cmw6IE1ZX1VSTCxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbn0pO1xcbnZhciDnur/ot68gPSAnYm9keSYmLm15dWktcGFuZWwtYm94OmhhcygubXl1aS1jb250ZW50X19saXN0KSdcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5teXVpLWNvbnRlbnRfX2xpc3QnXFxudmFyIOe6v+i3r+WQjSA9ICdoMyYmVGV4dCdcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ3VsJiZsaSdcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlrZfnrKbkuLLlpITnkIblt6XlhbdcIixcInBhdGhcIjpcInN0cmluZ3Rvb2xcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IG1hdGNoTGlzdCAgPSB7XFxuICAvLyBcXFwiPFxcXCI6XFxcIiZsdDtcXFwiLFxcbiAgLy8gXFxcIj5cXFwiOiBcXFwiJmd0O1xcXCIsXFxuICAvLyBcXFwiJlxcXCI6IFxcXCImYW1wO1xcXCIsXFxuICAvLyAnXFxcIic6IFxcXCImcXVvdDtcXFwiLFxcbiAgLy8gXFxcIidcXFwiOiBcXFwiYWN1dGU7XFxcIixcXG4gIFxcXCIgXFxcIjogXFxcIiZuYnNwO1xcXCIsXFxuICBcXFwiXFxcXG5cXFwiOlxcXCI8YnI+XFxcIlxcbn1cXG4vLyDlrZfnrKbov4fmu6TlmahcXG5mdW5jdGlvbiBodG1sRXNjYXBlKHRleHQpe1xcbiAgbGV0IHJlZ1N0ciA9ICcoJyArIE9iamVjdC5rZXlzKG1hdGNoTGlzdCkudG9TdHJpbmcoKSArICcpJ1xcbiAgcmVnU3RyID0gcmVnU3RyLnJlcGxhY2UoLywvZywgJyl8KCcpICBcXG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAocmVnU3RyLCAnZycpXFxuICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlZ0V4cCwgbWF0Y2ggPT4gbWF0Y2hMaXN0W21hdGNoXSlcXG59XFxuJC5leHBvcnRzLmh0bWxFc2NhcGUgPSBodG1sRXNjYXBlXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIHliIbnsbsxXCIsXCJwYXRoXCI6XCJkdGZsXCIsXCJydWxlXCI6XCJjb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcblxcbmlmICh0eXBlb2Yo5ou85o6l5YiG57G7KSAhPSAndW5kZWZpbmVkJyAmJiDmi7zmjqXliIbnsbsgIT0gJycpIHtcXG4gICAgdmFyIGNhdGVnb3JpZXMgPSBwZGZhKGh0bWwsIOWkp+exu+WumuS9jSkuY29uY2F0KHBkZmEoaHRtbCwg5ou85o6l5YiG57G7KSlcXG59IGVsc2Uge1xcbiAgICB2YXIgY2F0ZWdvcmllcyA9IHBkZmEoaHRtbCwg5aSn57G75a6a5L2NKVxcbn1cXG5cXG5sZXQgaW5pdF9jYXRlID0gW11cXG5cXG5mb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHtcXG4gICAgaW5pdF9jYXRlLnB1c2goXFxcIjBcXFwiKVxcbn1cXG5cXG5jb25zdCBmb2xkID0gZ2V0VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIilcXG5jb25zdCBjYXRlX3RlbXBfanNvbiA9IGdldFZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbmNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoY2F0ZV90ZW1wX2pzb24pXFxuXFxuaWYgKHBhcnNlSW50KHBhZ2UpID09PSAxKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZm9sZCA9PT0gJzEnID8gJ+KAnOKAnOKAneKAnTxiPicgKyAn4oioJy5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArICc8L2I+JyA6ICfigJzigJzigJ3igJ08Yj4nICsgJ+KIpycuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIikgKyAnPC9iPicsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoZm9sZCkgPT4ge1xcbiAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSAnMScgPyAnMCcgOiAnMScpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBmb2xkKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIH0pXFxuICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxuICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0pO1xcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKVxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGQoaXRlbSwg5YiG57G76ZO+5o6lKSArICcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2NhdGUgPSBbXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NhdGUucHVzaChpbmRleCA9PT0gMCA/IHBhcmFtcy5rZXkudG9TdHJpbmcoKSA6IFxcXCIwXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudXJsLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZCA9PT0gJzEnKSB7XFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKVxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGQoaXRlbSwg5YiG57G76ZO+5o6lKSArICcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudXJsLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qn5YWs5YWx5qih5p2/XCIsXCJwYXRoXCI6XCJ5aWppXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDkuIDnuqcoKSB7fTtcXG5PYmplY3QuYXNzaWduKOS4gOe6py5wcm90b3R5cGUsIHtcXG4gICAgY29uc3RydWN0b3I6IOS4gOe6pyxcXG4gICAgdGVzdCgpIHt9LFxcbiAgICDojrflj5bmupDnoIEodXJsLCBoZWFkZXIpIHtcXG4gICAgICAgIHJldHVybiBmZXRjaCh0cnVlX3VybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlciB8fCB7XFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjApJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pIC8vIOm7mOiupOe7n+S4gOS9v+eUqFBDIFVBXFxuICAgIH0sXFxuICAgIOiOt+WPluato+ehrumTvuaOpShwYWdlLCByZWdleCkge1xcbiAgICAgICAgbGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoJ2hlYWRlci51cmwnLCBNWV9VUkwpO1xcbiAgICAgICAgbGV0IOmTvuaOpeWkhOeQhuW3peWFtyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3VybC1wcm9jZXNzb3I/cnVsZT3mqKHmnb/Ct1EnKVxcbiAgICAgICAgdHJ1ZV91cmwgPSDpk77mjqXlpITnkIblt6XlhbdcXG4gICAgICAgICAgICAu6ZO+5o6lKHRydWVfdXJsKVxcbiAgICAgICAgICAgIC7pobXnoIEocGFnZSlcXG4gICAgICAgICAgICAu5o+S5YWl5paw5aSE55CG6KeE5YiZKHJlZ2V4IHx8IFtdKVxcbiAgICAgICAgICAgIC7ojrflj5blpITnkIbnu5PmnpwoKTtcXG4gICAgICAgIHJldHVybiB0cnVlX3VybDtcXG4gICAgfSxcXG4gICAg5omT6YCg5YiG57G7KHJ1bGVMaXN0KSB7XFxuICAgICAgICAvLyAnMCcg5Li66buY6K6k5LiN5oqY5Y+g77yMJzEnIOS4uum7mOiupOaKmOWPoFxcbiAgICAgICAgY29uc3Qg5b2T5YmN5oqY5Y+g54q25oCBID0gZ2V0TXlWYXIoJ2hlYWRlci5mb2xkJywgJzEnKVxcblxcbiAgICAgICAgLy8g5byV5YWl5Yqo5oCB5YiG57G75L6d6LWWXFxuICAgICAgICBsZXQgaHRtbENhdGVnb3JpZXMgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9jYXRlZ29yaWVzLWhlYWRlcj9ydWxlPeaooeadv8K3UScpXFxudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKXtcXG7CoMKgwqDCoMKgwqDCoCByZXR1cm4gJyMnKygnMDAwMDAnKyhNYXRoLnJhbmRvbSgpKjB4MTAwMDAwMDw8MCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbsKgwqDCoMKgwqAgfVxcbiAgICAgICAgaHRtbENhdGVnb3JpZXMu55WM6Z2iKGQpXFxuICAgICAgICAgICAgLy8gLuWIhuexu+mTvuaOpSh0cnVlX3VybClcXG4gICAgICAgICAgICAu5rqQ56CBKGh0bWwpXFxuICAgICAgICAgICAgLumhteeggShwYWdlKVxcbiAgICAgICAgICAgIC7mt7vliqDliIbnsbvlrprkvY0ocnVsZUxpc3QpXFxuICAgICAgICAgICAgLuW8gOWQr+WGhee9ruaKmOWPoOWKn+iDvSgpIC8vIOW/hemhu1xcbiAgICAgICAgICAgIC7mipjlj6Ao5b2T5YmN5oqY5Y+g54q25oCBKSAvLyDlv4XpobtcXG4gICAgICAgICAgICAu6YCJ5Lit55qE5YiG57G76aKc6ImyKGdldFJhbmdlQ29sb3JzKCkpXFxuICAgICAgICAgLy8gICAu6YCJ5Lit55qE5YiG57G76aKc6ImyKCcjMDk4QUMxJylcXG4gICAgICAgICAgICAu5byA5aeL5omT6YCg5YiG57G7KCk7XFxuICAgIH0sXFxuICAgIOeUn+aIkOeJh+WNlShkLCBodG1sKSB7XFxuICAgICAgICBsZXQgbGlzdCA9IHBkZmEoaHRtbCwg5YiX6KGoKTtcXG4gICAgICAgIGZvciAobGV0IGogaW4gbGlzdCkge1xcbiAgICAgICAgICAgIGxldCBpbWcgPSBwZChsaXN0W2pdLCDlm77niYcpO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sIOagh+mimCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwg5o+P6L+wKSxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcgKyAnQFJlZmVyZXI9JyArIGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZChsaXN0W2pdLCDpk77mjqUpLnJlcGxhY2UoJ3ZvZHBsYXknLCd2b2RkZXRhaWwnKSArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufSlcXG5cXG4kLmV4cG9ydHMgPSBuZXcg5LiA57qnKCk7XFxuJC5leHBvcnRzXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIHliIbnsbsyXCIsXCJwYXRoXCI6XCJjYXRlZ29yaWVzLWhlYWRlclwiLFwicnVsZVwiOlwiY29uc3Qgc3ltYm9sTWFwID0ge1xcbiAgICAvLyBjaGVja1BhcmFtczogU3ltYm9sKCdjaGVja1BhcmFtcycpLFxcbiAgICBtTGF5b3V0OiBTeW1ib2woJ21MYXlvdXQnKSxcXG4gICAgdHJ1ZV91cmw6IFN5bWJvbCgndHJ1ZV91cmwnKSxcXG4gICAgbVBhZ2U6IFN5bWJvbCgnbVBhZ2UnKSxcXG4gICAgc3JjOiBTeW1ib2woJ3NyYycpLFxcbiAgICBydWxlT2JqTGlzdDogU3ltYm9sKCdydWxlT2JqTGlzdCcpLFxcbiAgICBtRm9sZDogU3ltYm9sKCdtRm9sZCcpLFxcbiAgICBtRm9sZElubmVyRW5hYmxlOiBTeW1ib2woJ21Gb2xkSW5uZXJFbmFibGUnKSxcXG4gICAgbUZvbGRJbmRleDogU3ltYm9sKCdtRm9sZEluZGV4JyksXFxuICAgIG1Gb2xkTGF5b3V0OiBTeW1ib2woJ21Gb2xkTGF5b3V0JyksXFxuICAgIG1Db2xvcjogU3ltYm9sKCdtQ29sb3InKSxcXG4gICAgbVRhZzogU3ltYm9sKCdtVGFnJyksXFxufVxcblxcbmZ1bmN0aW9uIENhdGVnb3JpZXNIZWFkZXIoY29sb3IpIHtcXG4gICAgLy8gJ3VzZSBzdHJpY3QnO1xcbiAgICAvLyAuLi5cXG4gICAgLy8gdGhpc1tzeW1ib2xNYXAubGlzdFJ1bGVdID0gW11cXG4gICAgLy8gdGhpc1tzeW1ib2xNYXAuc3ViTGlzdFJ1bGVdID0gW11cXG4gICAgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSA9IGNvbG9yIHx8IFxcXCIjRkE3Mjk4XFxcIjtcXG4gICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdID0gW11cXG4gICAgdGhpcy5WQVJNQVAgPSB7XFxuICAgICAgICBDQVRFR09SWTogXFxcImhlYWRlci5jYXRlZ29yeVxcXCIsXFxuICAgICAgICBVUkw6IFxcXCJoZWFkZXIudXJsXFxcIixcXG4gICAgICAgIEZPTEQ6IFxcXCJoZWFkZXIuZm9sZFxcXCIsXFxuICAgIH1cXG4gICAgdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdID0ge1xcbiAgICAgICAgaW5qZWN0SW5kZXg6IDFcXG4gICAgfVxcbiAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZEluZGV4XSA9IDFcXG59XFxuXFxuT2JqZWN0LmFzc2lnbihDYXRlZ29yaWVzSGVhZGVyLnByb3RvdHlwZSwge1xcbiAgICAvLyBPdmVycmlkZSDmnoTpgKDmlrnms5XvvIznm7jlvZPkuo4gZnVuY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gKC4uLikgPT4gey4uLn3vvIxuZXcgZnVuY3Rpb24oKSDnmoTml7blgJnkvJroh6rliqjmiafooYxcXG4gICAgY29uc3RydWN0b3I6IENhdGVnb3JpZXNIZWFkZXIsXFxuICAgIC8vIOWumuS5ieengeacieaWueazlVxcbiAgICBWRVJTSU9OOiAyMDIxMTIwMTE5MDAsXFxuICAgIGNoZWNrUGFyYW1zKCkge1xcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+36LCD55SoIGxheW91dChkKSDkvKDlhaXlvZPliY3nlYzpnaJcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCEodGhpc1tzeW1ib2xNYXAuc3JjXSB8fCB0aGlzW3N5bWJvbE1hcC50cnVlX3VybF0pKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKggdHJ1ZVVybCh1cmwpIOS8oOWFpeW9k+WJjeWIhuexu+eahOmTvuaOpeaIluiwg+eUqCBodG1sKG1IdG1sKSDkvKDlhaXlvZPliY3liIbnsbvpobXpnaLnmoTmupDnoIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tUGFnZV0pIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+iwg+eUqCBwYWdlKG1QYWdlKSDkvKDlhaXlvZPliY3pobXmlbBcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKjnm7jlhbPmlrnms5XkvKDlhaXlrprkvY3op4TliJlcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tRm9sZF0pIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCdcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgbGF5b3V0KG1MYXlvdXQpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdID0gbUxheW91dFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgdHJ1ZVVybCh1cmwpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSA9IHVybFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgcGFnZShtUGFnZSkge1xcbiAgICAgICAgaWYgKHR5cGVvZiAobVBhZ2UpID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIG1QYWdlID0gcGFyc2VJbnQobVBhZ2UpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPSBtUGFnZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgaHRtbChtU3JjKSB7XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5zcmNdID0gbVNyY1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgbGlzdChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcImxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSBbe31dXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddID0gcnVsZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgc3ViTGlzdChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInN1Ykxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXSB8fCAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5saXN0UnVsZSAmJiAhdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfkuIDnuqfliIbnsbsnXSkpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCBsaXN0KHJ1bGUpIOaIliDkuIDnuqfliIbnsbsocnVsZSkg5a6a5L2N5LiA57qn5YiG57G7XFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5zdWJMaXN0UnVsZSA9IHJ1bGVcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5a2Q5YiG57G7J10gPSBydWxlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICB0aXRsZShydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInRpdGxlKHJ1bGUpIGFkZChydWxlT2JqKSDlj6rog73kuozpgInkuIDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0gfHwgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgJiYgIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5LiA57qn5YiG57G7J10pKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggbGlzdChydWxlKSDmiJYg5LiA57qn5YiG57G7KHJ1bGUpIOWumuS9jeS4gOe6p+WIhuexu1xcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0udGl0bGVSdWxlID0gcnVsZVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfliIbnsbvmoIfpopgnXSA9IHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS50aXRsZVJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHVybChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInVybChydWxlKSBhZGQocnVsZU9iaikg5Y+q6IO95LqM6YCJ5LiA77yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdIHx8ICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLmxpc3RSdWxlICYmICF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35YWI6LCD55SoIGxpc3QocnVsZSkg5oiWIOS4gOe6p+WIhuexuyhydWxlKSDlrprkvY3kuIDnuqfliIbnsbtcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnVybFJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+WIhuexu+mTvuaOpSddID0gdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnVybFJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDmmK/lkKblvIDlkK/mipjlj6Dlip/og71cXG4gICAgICpcXG4gICAgICogQHBhcmFtIGVuYWJsZWQgdHJ1ZSDooajnpLrlvIDlkK/vvIxmYWxzZSDooajnpLrnpoHnlKhcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxuICAgICAqL1xcbiAgICBmb2xkSW5uZXIoZW5hYmxlZCkge1xcbiAgICAgICAgaWYgKCEodHlwZW9mIChlbmFibGVkKSA9PT0gJ2Jvb2xlYW4nKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWlIHRydWUg5oiWIGZhbHNlIOihqOekuuW8gOWQr+aIluWFs+mXreaKmOWPoOWKn+iDve+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZElubmVyRW5hYmxlXSA9IGVuYWJsZWRcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDku47nrKwgaW5kZXgg6KGM5byA5aeL5oqY5Y+gXFxuICAgICAqXFxuICAgICAqIEBwYXJhbSBpbmRleCDlvIDlp4vmipjlj6DnmoTooYzmlbBcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxuICAgICAqL1xcbiAgICBmb2xkSW5kZXgoaW5kZXgpIHtcXG4gICAgICAgIGlmICghKHR5cGVvZiAoaW5kZXgpID09PSAnbnVtYmVyJykpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWni+aKmOWPoOihjOivt+S8oOWFpeaVsOWtl++8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5kZXggPCAxKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlp4vmipjlj6DooYzor7fkvKDlhaXlpKfkuo4gMCDnmoTmlbTmlbDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gPSBpbmRleCB8fCAxO1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOaKmOWPoOaMiemSrueahOeVjOmdolxcbiAgICAgKlxcbiAgICAgKiBAcGFyYW0gbGF5b3V0IOS4jiBkLnB1c2gg57uT5p6E5LiA6Ie077yMXFxuICAgICAqICAgICAgICDkvovvvJp7IHRpdGxlOlxcXCLmoIfpopgxXFxcIiwgdXJsOlxcXCJ4eHhcXFwiLCBjb2xfdHlwZTpcXFwic2Nyb2xsX2J1dHRvblxcXCIgfTtcXG4gICAgICogICAgICAgIOWPguaVsOmHh+eUqOWPr+mAieimhuebluaooeW8j++8jOS4jeWGmeeahOWPguaVsOWImeS9v+eUqOm7mOiupDtcXG4gICAgICogICAgICAgIOavlOWmguS8oOWFpSB7IGNvbF90eXBlOlxcXCJ0ZXh0XzFcXFwiIH3vvIzpgqPmnIDnu4jnu5PmnpzlsLHmmK8geyB0aXRsZTpcXFwi5qCH6aKYMVxcXCIsIHVybDpcXFwieHh4XFxcIiwgY29sX3R5cGU6XFxcInRleHRfMVxcXCIgfVxcbiAgICAgKiBAcmV0dXJucyB7Q2F0ZWdvcmllc0hlYWRlcn1cXG4gICAgICovXFxuICAgIGZvbGRMYXlvdXQobGF5b3V0KSB7XFxuICAgICAgICBpZiAodHlwZW9mIGxheW91dCA9PT0gJ29iamVjdCcpIHtcXG4gICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGxheW91dClcXG4gICAgICAgICAgICBsZXQgaW5qZWN0SW5kZXggPSBsYXlvdXQuaW5qZWN0SW5kZXggfHwgbGF5b3V0Wyfmipjlj6DmjInpkq7mj5LlhaXooYwnXVxcbiAgICAgICAgICAgIGlmIChsYXlvdXQudGl0bGUgfHwgbGF5b3V0LnVybCB8fCBsYXlvdXQuY29sX3R5cGUgfHwgaW5qZWN0SW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF1ba2V5XSA9IGxheW91dFtrZXldO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXmraPnoa7nmoTmipjlj6DnlYzpnaLlhYPntKDvvIFcXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBpbmplY3RJbmRleCDmipjlj6DmjInpkq7mj5LlhaXnrKwgaW5qZWN0SW5kZXgg6KGMXFxuICAgICAgICAgICAgaWYgKGluamVjdEluZGV4KSB7XFxuICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoaW5qZWN0SW5kZXgpID09PSAnbnVtYmVyJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM6K+35Lyg5YWl5pWw5a2X77yBXFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXggPCAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuaKmOWPoOaMiemSruaPkuWFpeihjOivt+S8oOWFpeWkp+S6jiAwIOeahOaVtOaVsO+8gVxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGluamVjdEluZGV4ID4gdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0pIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM5LiN5b6X5aSn5LqO5pi+56S65oqY5Y+g6KGM5pWw77yB6K+36LCD55SoIC5mb2xkSW5kZXgoaW5kZXgpIOaIliAu56ys5Yeg6KGM5byA5aeL5oqY5Y+gKGluZGV4KSDkvKDlhaXmraPnoa7nmoTmmL7npLrmipjlj6DooYzmlbBcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5pbmplY3RJbmRleCA9IGluamVjdEluZGV4IHx8IDE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeato+ehrueahOaKmOWPoOeVjOmdouWFg+e0oO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgLy8g5b2T5YmN5piv5ZCm5oqY5Y+gXFxuICAgIGZvbGQoaXNGb2xkKSB7XFxuICAgICAgICBpZiAodHlwZW9mIChpc0ZvbGQpID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIGlzRm9sZCA9IGlzRm9sZCA9PT0gJzEnXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXNGb2xkKSB7XFxuICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRdID0gJzEnO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCc7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBjb2xvcihtQ29sb3IpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gPSBtQ29sb3JcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHRhZyhtVGFnKSB7XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tVGFnXSA9IG1UYWdcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIGFkZChydWxlT2JqKSB7XFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkocnVsZU9iaikpXFxuICAgICAgICBpZiAocnVsZU9iai5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0uY29uY2F0KHJ1bGVPYmopXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5wdXNoKHJ1bGVPYmopXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgZXZhbEpTUnVsZShpdGVtLCBqc1J1bGUpIHtcXG4gICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgIHJ1bGUgPSBydWxlLnRyaW0oKVxcbiAgICAgICAgLy8gbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgbGV0IGlucHV0ID0gaXRlbVxcbiAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgZXZhbCgncmVzdWx0ID0gJyArIHJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcbiAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgIGV2YWwoJ3Jlc3VsdCA9ICcgKyAnKCgpID0+IHsnICsgcnVsZSArICd9KSgpJylcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiAocmVzdWx0IHx8ICcnKVxcbiAgICB9LFxcbiAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICBsZXQgdGl0bGUgPSAnJ1xcbiAgICAgICAgbGV0IHRpdGxlUnVsZSA9IGNhdGVnb3J5LnRpdGxlUnVsZSB8fCAnYSYmVGV4dCdcXG4gICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHNyYywgdGl0bGVSdWxlKVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICB9LFxcbiAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgbGV0IHVybCA9ICcnXFxuICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LnVybFJ1bGUgfHwgJ2EmJmhyZWYnXFxuICAgICAgICBpZiAodHlwZW9mIHVybFJ1bGUgPT09ICdvYmplY3QnKSB7XFxuICAgICAgICAgICAgbGV0IG1VcmxSdWxlID0gdXJsUnVsZS5ydWxlIHx8IHVybFJ1bGVbJ+ino+aekOinhOWImSddIHx8ICdhJiZocmVmJztcXG4gICAgICAgICAgICBpZiAobVVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIG1VcmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgaWYgKHVybFJ1bGUucGFyc2VPcHRpb24pIHtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodXJsUnVsZS5wYXJzZU9wdGlvbikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBhcnNlRG9tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBhcnNlRG9tRm9ySHRtbFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGRmaFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb21Gb3JIdG1sO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlRG9tO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbXFxcIuino+aekOaWueazlVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVybFJ1bGVbXFxcIuino+aekOaWueazlVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21Gb3JIdG1sXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZGZoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbUZvckh0bWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdXJsID0gcGFyc2Uoc3JjLCBtVXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLmRlYWxVcmwpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsUnVsZS5kZWFsVXJsKHVybClcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKHVybClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwYXJzZURvbShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgIH0sXFxuICAgIGJ1aWxkKCkge1xcbiAgICAgICAgLy8g5qOA5rWL5piv5ZCm5Lyg5YWl6ZyA6KaB55qE5Y+C5pWwXFxuICAgICAgICB0aGlzLmNoZWNrUGFyYW1zKClcXG4gICAgICAgIC8vIOavj+S4gOS4quWIhuexu+eahOWUr+S4gOagh+ivhlxcbiAgICAgICAgbGV0IG1UYWcgPSB0aGlzW3N5bWJvbE1hcC5tVGFnXSB8fCBcXFwiXFxcIlxcbiAgICAgICAgLy/nv7vpobUg6ZyA6KaB5qC55o2u5a6e6ZmF5pu/5o2iXFxuICAgICAgICBjb25zdCBodG1sID0gdGhpc1tzeW1ib2xNYXAuc3JjXSB8fCByZXF1ZXN0KHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSlcXG4gICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAvL+iOt+WPluWIl+ihqFxcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubWFwKHJ1bGVPYmogPT4ge1xcbiAgICAgICAgICAgIGxldCBsaXN0ID0gW11cXG4gICAgICAgICAgICBsZXQgbGlzdFJ1bGUgPSBydWxlT2JqLmxpc3RSdWxlIHx8IHJ1bGVPYmpbXFxcIuS4gOe6p+WIhuexu1xcXCJdXFxuICAgICAgICAgICAgaWYgKGxpc3RSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkobGlzdFJ1bGUpKVxcbiAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIGxpc3RSdWxlKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsIGxpc3RSdWxlKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBsb2cobGlzdClcXG4gICAgICAgICAgICBsaXN0Lm1hcChjYXRlZ29yeSA9PiB7XFxuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0OiBjYXRlZ29yeSxcXG4gICAgICAgICAgICAgICAgICAgIHN1Ykxpc3RSdWxlOiBydWxlT2JqLnN1Ykxpc3RSdWxlIHx8IHJ1bGVPYmpbXFxcIuWtkOWIhuexu1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVSdWxlOiBydWxlT2JqLnRpdGxlUnVsZSB8fCBydWxlT2JqW1xcXCLliIbnsbvmoIfpophcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIHVybFJ1bGU6IHJ1bGVPYmoudXJsUnVsZSB8fCBydWxlT2JqW1xcXCLliIbnsbvpk77mjqVcXFwiXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkoY2F0ZWdvcmllcykpXFxuXFxuICAgICAgICBsZXQgaW5pdF9jYXRlID0gW11cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICAgICAgICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIilcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGNvbnN0IGNhdGVfdGVtcF9qc29uID0gZ2V0TXlWYXIobVRhZyArIHRoaXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPT09IDEpIHtcXG5cXG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAvLyDmipjlj6AgVUlcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5uZXJFbmFibGVdICYmIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5pbmplY3RJbmRleCA9PT0gKGluZGV4KzEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZExheW91dCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLnRpdGxlIHx8ICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcxJyA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwMDBcXFwiPuKIqDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxYWFkMTlcXFwiPuKIpzwvc3Bhbj48L2I+JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0udXJsIHx8ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLm1UYWcgKyBwYXJhbXMuVkFSTUFQLkZPTEQsIGdldE15VmFyKHBhcmFtcy5tVGFnICsgcGFyYW1zLlZBUk1BUC5GT0xELCBwYXJhbXMuaXNGb2xkKSA9PT0gJzEnID8gJzAnIDogJzEnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UYWc6IG1UYWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRm9sZDogdGhpc1tzeW1ib2xNYXAubUZvbGRdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5jb2xfdHlwZSB8fCBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XS5wdXNoKGZvbGRMYXlvdXQpXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgLy/lhbfkvZPliJfooajkuIvnmoTliIbnsbtcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5zdWJMaXN0UnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gdGhpcy5ldmFsSlNSdWxlKGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwYXJzZURvbUZvckFycmF5KGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAodGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gfHwgMSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgY2F0ZWdvcnkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2V0VXJsKGl0ZW0sIGNhdGVnb3J5KVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9JyArIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gKyAnPicgKyB0aXRsZSArICcgPC9mb250PjwvYj4nIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy50YWcgKyBwYXJhbXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuaW5kZXggPT09IDAgPyBuZXdfY2F0ZSA6IHBhcmFtcy5jYXRlX3RlbXApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnRhZyArIHBhcmFtcy5WQVJNQVAuVVJMLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSTUFQOiB0aGlzLlZBUk1BUCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogbVRhZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpc1tzeW1ib2xNYXAubVBhZ2VdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRUaXRsZShpdGVtLCBjYXRlZ29yeSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgY2F0ZWdvcnkpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0nICsgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSArICc+JyArIHRpdGxlICsgJyA8L2ZvbnQ+PC9iPicgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5DQVRFR09SWSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5VUkwsIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBtVGFnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzW3N5bWJvbE1hcC5tUGFnZV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuICAgIOeVjOmdoihsYXlvdXQpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dChsYXlvdXQpXFxuICAgIH0sXFxuICAgIOWIhuexu+mTvuaOpSh0cnVlVXJsKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy50cnVlVXJsKHRydWVVcmwpO1xcbiAgICB9LFxcbiAgICDpobXnoIEocGFnZSkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZShwYWdlKTtcXG4gICAgfSxcXG4gICAg5rqQ56CBKGh0bWwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmh0bWwoaHRtbCk7XFxuICAgIH0sXFxuICAgIOWumuS9jeS4gOe6p+WIhuexuyhsaXN0KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5saXN0KGxpc3QpO1xcbiAgICB9LFxcbiAgICDlrprkvY3lrZDliIbnsbsoc3ViTGlzdCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViTGlzdChzdWJMaXN0KTtcXG4gICAgfSxcXG4gICAg5a6a5L2N5YiG57G75qCH6aKYKHRpdGxlKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy50aXRsZSh0aXRsZSk7XFxuICAgIH0sXFxuICAgIOWumuS9jeWIhuexu+mTvuaOpSh1cmwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnVybCh1cmwpO1xcbiAgICB9LFxcbiAgICDlvIDlkK/lhoXnva7mipjlj6Dlip/og70oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkSW5uZXIodHJ1ZSk7XFxuICAgIH0sXFxuICAgIOWFs+mXreWGhee9ruaKmOWPoOWKn+iDvSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmZvbGRJbm5lcihmYWxzZSk7XFxuICAgIH0sXFxuICAgIOesrOWHoOihjOW8gOWni+aKmOWPoChpbmRleCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZEluZGV4KGluZGV4KTtcXG4gICAgfSxcXG4gICAg5oqY5Y+g5oyJ6ZKu5qC35byPKGxheW91dCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZExheW91dChsYXlvdXQpXFxuICAgIH0sXFxuICAgIOaKmOWPoChmb2xkKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkKGZvbGQpO1xcbiAgICB9LFxcbiAgICDpgInkuK3nmoTliIbnsbvpopzoibIoY29sb3IpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yKGNvbG9yKTtcXG4gICAgfSxcXG4gICAg5ZSv5LiA5qCH6K+GKG1UYWcpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnRhZyhtVGFnKVxcbiAgICB9LFxcbiAgICDmt7vliqDliIbnsbvlrprkvY0ocnVsZU9iaikge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHJ1bGVPYmopO1xcbiAgICB9LFxcbiAgICDlvIDlp4vmiZPpgKDliIbnsbsoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZCgpO1xcbiAgICB9LFxcblxcbn0pXFxuJC5leHBvcnRzID0gbmV3IENhdGVnb3JpZXNIZWFkZXIoKTtcXG4kLmV4cG9ydHNcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumTvuaOpeWkhOeQhuW3peWFt1wiLFwicGF0aFwiOlwidXJsLXByb2Nlc3NvclwiLFwicnVsZVwiOlwiLyoqXFxuICog5pys5Zyw572R6aG15o+S5Lu26ZO+5o6lIGhpa2VyOi8vZmlsZXMvcnVsZXMvanMvVXJsUHJvY2Vzc29yLmpzXFxuICog5a2Q6aG16Z2i6ZO+5o6lIGhpa2VyOi8vcGFnZS91cmwtcHJvY2Vzc29yXFxuICog6YGT6ZW/5LuT5bqT6ZO+5o6lIGh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI4NDlcXG4gKiDnoIHkupEgR2l0ZWUg6ZO+5o6lIGh0dHBzOi8vZ2l0ZWUuY29tL3JlYm9ybjAvSGlrZXJSdWxlcy9yYXcvbWFzdGVyL3BsdWdpbnMvVXJsUHJvY2Vzc29yLmpzXFxuICovXFxuZnVuY3Rpb24gVXJsUHJvY2Vzc29yKCkge1xcbiAgICB0aGlzLnBhcmFtcyA9IHt9XFxuICAgIHRoaXMucmVnZXhNYXAgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnKHZvZHR5cGV8dmlkZW90KVxcXFxcXFxcL1xcXFxcXFxcdysnLFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLy1cXFxcZCsuaHRtbC8sICctJyArIHRoaXMucGFyYW1zLnBhZ2UgKyAnLmh0bWwnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygodm9kdHlwZXx2aWRlb3QpXFxcXC9cXFxcdyspLmh0bWwvLCAnJDEtJyArIHRoaXMucGFyYW1zLnBhZ2UgKyAnLmh0bWwnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnXFxcXFxcXFwvP1tcXFxcXFxcXHdcXFxcXFxcXGRdKy0uKj8tLio/LS4qPy0uKj8tLio/LS4qPy0uKj8tXFxcXFxcXFxkKi0tLVxcXFxcXFxcZCouaHRtbCcsXFxuICAgICAgICAgICAgZXhlYzogKCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXGQqKC0tLS5odG1sKS8sIHRoaXMucGFyYW1zLnBhZ2UgKyAnJDEnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygtLS1cXFxcZCsuaHRtbCkvLCB0aGlzLnBhcmFtcy5wYWdlICsgJyQxJyk7IC8vIOaLvOaOpemhteeggVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnKChcXFxcXFxcXC92b2RcXFxcXFxcXC9zaG93KT8oXFxcXFxcXFwvYXJlYVxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPyhcXFxcXFxcXC9ieVxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPyhcXFxcXFxcXC9pZFxcXFxcXFxcL1xcXFxcXFxcZCspPyhcXFxcXFxcXC9sZXR0ZXJcXFxcXFxcXC9bXFxcXFxcXFx3XFxcXFxcXFxkJV0rKT8pKFxcXFxcXFxcL3BhZ2VcXFxcXFxcXC9cXFxcXFxcXGQrKT8oXFxcXFxcXFwveWVhclxcXFxcXFxcL1xcXFxcXFxcZCspP1xcXFxcXFxcLmh0bWwnLFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlZ0V4cCA9IC8oKFxcXFwvdm9kXFxcXC9zaG93KT8oXFxcXC9hcmVhXFxcXC9bXFxcXHdcXFxcZCVdKyk/KFxcXFwvYnlcXFxcL1tcXFxcd1xcXFxkJV0rKT8oXFxcXC9pZFxcXFwvXFxcXGQrKT8oXFxcXC9sZXR0ZXJcXFxcL1tcXFxcd1xcXFxkJV0rKT8pKFxcXFwvcGFnZVxcXFwvXFxcXGQrKT8oXFxcXC95ZWFyXFxcXC9cXFxcZCspP1xcXFwuaHRtbC9cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmVnRXhwLCAnJDEnICsgKFxcXCIvcGFnZS9cXFwiICsgdGhpcy5wYXJhbXMucGFnZSkgKyAnJDgnICsgXFxcIi5odG1sXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIF1cXG59XFxuXFxuT2JqZWN0LmFzc2lnbihVcmxQcm9jZXNzb3IucHJvdG90eXBlLCB7XFxuICAgIGNvbnN0cnVjdG9yOiBVcmxQcm9jZXNzb3IsXFxuICAgIGNoZWNrUGFyYW1zKCkge1xcbiAgICAgICAgaWYgKCF0aGlzLnBhcmFtcy51cmwpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCAuYmFzZVVybCh1cmwpIOS8oOWFpemTvuaOpei/m+ihjOWIneWni+WMliFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzLnBhcmFtcy5wYWdlKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggLnBhZ2UocGFnZSkg5Lyg5YWl6aG156CB6L+b6KGM5Yid5aeL5YyWIVxcXCIpXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGJhc2VVcmwodXJsKXtcXG4gICAgICAgIHRoaXMucGFyYW1zLnVybCA9IHVybFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgcGFnZShwYWdlKXtcXG4gICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSBwYWdlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBhZGRFeHRyYShyZWdFeHApIHtcXG4gICAgICAgIGlmIChyZWdFeHAuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XFxuICAgICAgICAgICAgdGhpcy5yZWdleE1hcCA9IHRoaXMucmVnZXhNYXAuY29uY2F0KHJlZ0V4cClcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdGhpcy5yZWdleE1hcC5wdXNoKHJlZ0V4cClcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBkZWJ1ZygpIHtcXG4gICAgICAgIHRoaXMucGFyYW1zLmRlYnVnID0gdHJ1ZVxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGV4ZWMoKSB7XFxuICAgICAgICB0aGlzLmNoZWNrUGFyYW1zKClcXG4gICAgICAgIGxldCB0cnVlX3VybCA9ICcnXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVnZXhNYXAubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgcmVnT2JqID0gdGhpcy5yZWdleE1hcFtpXTtcXG4gICAgICAgICAgICBsZXQgdXJsRXhwID0gcmVnT2JqLnJlZztcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybEV4cCA9PT0gJ3N0cmluZycpIHtcXG4gICAgICAgICAgICAgICAgdXJsRXhwID0gbmV3IFJlZ0V4cCh1cmxFeHApXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh1cmxFeHAudGVzdCh0aGlzLnBhcmFtcy51cmwpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtcy5kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHVybEV4cC50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRydWVfdXJsID0gcmVnT2JqLmV4ZWMoKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRydWVfdXJsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWVfdXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIOiOt+WPluWkhOeQhue7k+aenCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWMoKVxcbiAgICB9LFxcbiAgICDpk77mjqUodXJsKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsKHVybClcXG4gICAgfSxcXG4gICAg6aG156CBKHBhZ2UpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UocGFnZSlcXG4gICAgfSxcXG4gICAg5o+S5YWl5paw5aSE55CG6KeE5YiZKHJlZ0V4cCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRXh0cmEocmVnRXhwKVxcbiAgICB9LFxcbiAgICDosIPor5XmqKHlvI8oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5kZWJ1ZygpO1xcbiAgICB9XFxufSlcXG4kLmV4cG9ydHM9bmV3IFVybFByb2Nlc3NvcigpXFxuJC5leHBvcnRzXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbBcIixcInBhdGhcIjpcImp4aHNcIixcInJ1bGVcIjpcInZhciBmZnR0ID0gJ013OGdpeUgxQ3FuVHozQjdWSGo3TVR6dmN1WElFcmdyMUQvUHVnRm1oT1d2RjZXVG5LVjU0TTF1VWNrTWx4bkxJVU1iWjdGaXFnTHVSV2Nid0dYaGIrNjdmU01CZHo1VnNmNnpQMWR2OWY0aFF4dG5zV0txQXU1Rlp4dkFaZUZ2OGtpK0FaUHZOc2QvMEpWUkJqVUhDNVFtdENrVmhsTS9rcG4vQkZXdFJyMEgvWkhRUXE0bDRKRE56WG5NWEEwbXl5dkxTTlpXYy9zSW4vdldTQUhVOWtBYmpVNHFTWnNTQXU5YnkwYk13ZENQRHNVNHBwc2tVMzlyQlNQRk5EQnpZeXZYc0pocnp0YWFibmV4V3o2NWNwY3gvSDM0bEVDanVwUDBvTENrbU9ETzRXWlhpMUMyR25BQStoMUk3WURkeXl2TFNOWldjL3NJbi92V1NBSFU5a0JVdjdnZDFRajVvUmFDVVU3cjJJMG1tRmFvRDNROVJwRGhtU2VueFVFSVA3K3pVVTFRVzAvMHl2U0tPTEQvd3JaRVZVY2E3bEQwbWZubUh1Q09QTGcxN1FDQzZ5SjlxSWN4bzNSaC9ZRk1QS2lCMXhvZUROY0NEOTdDczhRQndoZGJ1eDZ4ei9IdE9TbE1HdHU5L0FXbnI1dEkzYVg1K3g4VmNDVndKL3krU1h1OStsOTdXN0tjQVR5RS9BNGZ5OTYzWGdKWTJ6UzQ4RExTL2tpQlUzUTg3M0xseUJLNEs5US96N29CWm9UbGVwWXpkNmJuaHpLZ0RCajUvZlgxc0RLSEFCSXlNczRQcURCeTFFcG16dTNjWFJ2UEdGajF4bWc0c1lUdy9FcGF5eXZMU05aV2Mvc0luL3ZXU0FIVTlxcFJZd1BTVmFlazBTUStMb1ByR1AxMjhhRXFzc2lQSnJYWElHbllzeTNNbXdlUGU0MUhUSTZNaEpsQVZkK0YxVWtZN3dMVG5MNFFTN0dQSnNCdnZmWXAxeFdjZ1ZxRFdrUjdHb05PT01Od295Unk4Yk1QVFpKMnhlcVZDRWhYeUw0Q3N1cWJpbk5YZGRxb2xvWWVBT2txelZrWEQvVlM5MDNmQjJsRHVuMHBqVnpuSE5KUUZoZ2lhNlFMcTJxWmc5VStTVk9pWE95VmcybE5vdklOV3VXZmhjNytUeTdqWHpSNENYQXJjVXIySXRkdHpRdmo0QTAyMjladEJBWGoxQjJrOG9jbUNiVzErZko0K3hKVE9FZW5uQWVNMHpCTDdaZStXOU1GWnI5RW9PZW9Ub3E3VkVxbVVFQmRwS3dRenBzR3RHajlPTHlzMjY0aENJRjhGYzRkSWVPTndoUmp1VWkxTGZwbTJpMHN3SGVsRDFsb0Vlc0N5RDUwMUg3Ull6Q0ZtUHZuOHpuZXdwaGZiTkdBNUpQL2Z4b1JyU053K0pub09DU2dMdUpVZy8vWFN2RFVXTkNrNElHcjVZWFRPU3VPS0xldUxuY1o1MEg4SlJVN2ZDWT0nO1xcbnZhciBzc3l6ID0gJ1Rsb0dubmlrVGhyZnMvNWZETmxrNUNTc2JhR3RBSDdXL3VNWmp1WW9JdXBCNmJDb285Q290TFFIZlBJZEdnYmtieW5LcUwyYVVFMlh5NTU4WDJReEhZdFRVMDl2RCs0b2FDREl1U1pPN254RGJMZlJHZldqN3pxbCt5TWJ2RithSm9EL202UHNmdy9QeVlPQXAvWlZHZHJQemFDQnlmZDBITDVERlZTdytZRjJPQzQwVjhTUDlSeGRGS0tkckJ1UHhDV2R4VUNGckorMWxSeS9UVTNMQzg0QzR4eEVCaGd1ZDdSdEJwMHpaQXJxQkUwNitaM0p0RFAwZUZDei9ENVgwNDA5cVBISzNlMXkvTHVVZ2NjdXhwSG5qWUxFMUdqbFA4d1lBMmhRV2U3eVBuZ2dnUUJIdzMzL2d2YjN0dUNjeEVLVFdnbWFoL1IzMkFIOVpGOGpGN1dlbVQyNmxVaXpWWGUvc3BDZGhEZ0hSL3pVaE9ERDRQTzZnbEk4SlBoZHUrVndmUHlSTEcyRDdDVW8xTDZTSUYrMGZZZjBvVE9XTjEzVVBJVG81K3VaZC9XblFRTFU4Tll4L1dGQ1RoRW5rYnpsbjlZR3Q2MGZSeHNIKzh1TURGZ2FCaUMrejJTcGN4QjlnWjZHWHlwTFNYV2FqK3FFVWJHSktFeCtqSy92NWZucmtJaENkd05ia3A5ZFJrczZkbWxZbEJpZnpvV0Y4Umt1QzNycVB0b1NjQmtNT01adTdHaVZ0b0hFZEhVb3ptblVJZHJVMUxHSXFxOVduRzdYMmEzeUg4czY1bWpMdUxuZDNxMFU4ditMTVBuSEwyL0dqUXVUUUtWaCtSS0VQcUsvSmRyQ2hHTE5yamNIdkxIRGJIRXNockdadVFPZEVwaGJ4L1BraGt2YVl5NEsxTU84NFIxN2d1UnNLcy9WNm5pVVBhTCtYYlE3YzNmcUpTNFZISndsdWRKVERlMDJldWZmR0NtMFBKSVBsQU9nTEhuWDBpekpoQTZxNzM4UjJVd1FjV0JRakp0NzlhRitreXFTZHl0MVFQVlFWamFDM0lwUmY3UGdzRGhFSjdiaTluU2NseUl6Z0o5RENKNFQrOGRHMXhIaEt5WmFzVDdML3g5TGZyMU1nczhuQlpFUjJXOWF4N2lUa05LK1g1QUNVLy9wL1lvUC91QWFuRHRiM0QwaUtVVXVYRkgrSmJiMHgxUDMyMlMydzZCSjQ2bnVOSEJNSFRwVnVXd2haZVp6cmlHaDdxb095d0xXaUV4Qk1LeXhUR0xubUtoN3IwMy95WEtZV0lKbnBCTjJNTXljVkhSWko3UnVtSFY0Q0lzVnJxN2lSUDQ4ODIzUkpWdDlPdHlQN3V1YzN3QkJWM2tjWlV6YmJhWWRXQngxK0F1K09kMnU3bFI2am9PTDgxMG1jSm0vZjdKNVR2R1FQNkhHcGgxWUhIWDRDNzQ1M2E3dVZIcU9neWpqaDVFQmQ3MjBNRUJZMjNjK1RLcS96OVVwV0RET2c0OFpGbndTSWhGcWl0V2RpWmlxc2FZdU4wL1NYd2lLOEVHOWVRMjl1MlhESm9EVzRtbHd0Y1JPN3ZhWDVYY0ZzZ2Y0L21MVTA3bWknXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdtby1tb3ZzLWl0ZW1cIixcInBhdGhcIjpcIm1vLW1vdnMtaXRlbVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+WIhuexu++8micgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSwyLS1zcGFuJiZUZXh0JykgK1xcbiAgICAgICAgJyB8ICcgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSwzLS1zcGFuJiZUZXh0JykgK1xcbiAgICAgICAgJyB8ICcgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSw0LS1zcGFuJiZUZXh0JykgK1xcbiAgICAgICAgJ1xcXFxuJyArIHBkZmgoaHRtbCwgJy5tby1jb2xzLWxheXMmJmxpJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpICtcXG4gICAgICAgICdcXFxcbicgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSwxJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpLFxcbiAgICBkZXNjOiAn5pu05paw5pe26Ze077yaJyArIHBkZmgoaHRtbCwgJy5tby1jb2xzLWxheXMmJmxpLDUmJlRleHQnKS5zdWJzdHJpbmcoMCwgMTUpLFxcbiAgICBpbWc6IHBkKGh0bWwsICcubW8tc2l0dS1waWNzJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxuXFxudmFyIOe6v+i3ryA9ICdib2R5JiYubW8tbW92cy1idG5zJ1xcbnZhciDpgInpm4YgPSAnYm9keSYmLm1vLW1vdnMtaXRlbSdcXG52YXIg57q/6Lev5ZCNID0gJ1RleHQnXFxudmFyIOmAiembhuWIl+ihqCA9ICd1bCYmbGknXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5a2X6aqM6K+B56CBXCIsXCJwYXRoXCI6XCJ5em1cIixcInJ1bGVcIjpcIndoaWxlICgv6L6T5YWl6aqM6K+B56CBfOezu+e7n+WuieWFqOmqjOivgS8udGVzdChodG1sKSkge1xcbiAgICBsZXQgaGVhZGVycyA9IHtcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBNWV9VUkxcXG4gICAgfVxcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2p4aHM/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSk7XFxuICAgIGV2YWxQcml2YXRlSlMoc3N5eik7XFxuXFxuICAgIGxldCB2Y29kZSA9IGdldFZDb2RlMihNWV9IT01FICsgJy9pbmRleC5waHAvdmVyaWZ5L2luZGV4Lmh0bWw/JywgSlNPTi5zdHJpbmdpZnkoaGVhZGVycyksICdudW0nKTtcXG4gICAgZmV0Y2goTVlfSE9NRSArIGh0bWwubWF0Y2goL1xcXFwvaW5kZXgucGhwLio/dmVyaWZ5PS8pWzBdICsgSlNPTi5wYXJzZSh2Y29kZSkucmV0LCB7XFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSlcXG4gICAgdmFyIHl6ID0gTVlfVFlQRSA9PSAnaG9tZScgPyB0cnVlX3VybCA6IE1ZX1VSTFxcbiAgICBsb2coTVlfVFlQRSlcXG4gICAgaHRtbCA9IHJlcXVlc3QoeXosIHtcXG4gICAgICAgIC8vICAgaGVhZGVyczogaGVhZGVyc1xcbiAgICB9KVxcbn1cXG5pZiAoL+mikee5geaTjeS9nC8udGVzdChodG1sKSkge1xcbiAgICBkLnB1c2goe1xcbiAgICB0aXRsZTogJ+e9keermeaQnOe0ouaXtumXtOmXtOmalCcsXFxuICAgIGRlc2M6IFxcXCLkuIvmi4nph43or5VcXFwiXFxufSlcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqd5LXBsYXlMaXN0XCIsXCJwYXRoXCI6XCJ5LXBsYXlMaXN0XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoaHRtbCwgJy5tb2R1bGUtaW5mby1pdGVtLDMmJlRleHQnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAxOCkgK1xcbiAgICAgICAgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcubW9kdWxlLWluZm8taXRlbSwxJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTgpICtcXG4gICAgICAgICdcXFxcbicgK1xcbiAgICAgICAgcGRmaChodG1sLCAnLm1vZHVsZS1pbmZvLWl0ZW0sNCYmVGV4dCcpLFxcbiAgICBpbWc6IHBkKGh0bWwsICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWx8fHNyYycpICtcXG4gICAgICAgICdAUmVmZXJlcj0nLFxcbiAgICB1cmw6IE1ZX1VSTCxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLm1vZHVsZS1pbmZvLWl0ZW0sNXx8Lm1vZHVsZS1pbmZvLWl0ZW0mJlRleHQnKSxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbn0pO1xcblxcbnZhciDnur/ot68gPSAnI3ktcGxheUxpc3QmJnNwYW4nXFxudmFyIOmAiembhiA9ICdib2R5JiYubW9kdWxlLXBsYXktbGlzdCdcXG52YXIg57q/6Lev5ZCNID0gJ1RleHQnXFxudmFyIOmAiembhuWIl+ihqCA9ICdib2R5JiZhJ1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcbnNldFJlc3VsdChkKTtcIn1dLFwicGFyYW1zXCI6XCJ7XFxcIm9uQ2hhbmdlXFxcIjpcXFwicHV0VmFyKCd0ZW1wbGF0ZS11cmwnLGlucHV0KVxcXCJ9XCIsXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIuaooeadv8K3UVwiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImh0dHA6Ly80My4xNDAuMjExLjExOS9pbmRleC5waHAvdm9kL3R5cGUvaWQvMS5odG1sXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgbGF6eSA9ICcnO1xcbmNvbnN0IHtcXG4gICAgYXV0b1BhZ2VcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXV0bz9ydWxlPeaooeadv8K3UVxcXCIpO1xcbmF1dG9QYWdlKGdldFJlc0NvZGUoKSlcIixcImdyb3VwXCI6XCLlt6XlhbdcIixcInVhXCI6XCJhdXRvXCIsXCJwcmVSdWxlXCI6XCJcIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5LiA57qnc3R1aS12b2RsaXN0XFxcIixcXFwicGF0aFxcXCI6XFxcInN0dWktdm9kbGlzdFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9IFtdO1xcXFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxcXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnLnN0dWktdm9kbGlzdCYmbGknKTtcXFxcbmZvciAodmFyIGogaW4gbGlzdCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdhJiZ0aXRsZScpLFxcXFxuICAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcucGljLXRleHQmJlRleHQnKSxcXFxcbiAgICAgICAgaW1nOiBwZChsaXN0W2pdLCAnLmxhenlsb2FkfHxhJiZkYXRhLW9yaWdpbmFsJykrJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS6jOe6py5iXFxcIixcXFwicGF0aFxcXCI6XFxcIi5iXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXFxcbmlmIChodG1sLmluZGV4T2YoJ+ajgOa1i+S4rScpICE9IC0xKSB7XFxcXG4gICAgaHRtbCA9IHJlcXVlc3QoTVlfVVJMICsgJz9idHdhZicgKyBodG1sLm1hdGNoKC9idHdhZiguKj8pXFxcXFxcXFxcXFxcXFxcIi8pWzFdLCB7fSk7XFxcXG59XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcuc3R1aS1jb250ZW50X19kZXRhaWwtLWgxJiZUZXh0JylcXFxcbiAgICAgICAgLnJlcGxhY2UoJ+WcsOWMuicsICdcXFxcXFxcXG7lnLDljLonKVxcXFxuICAgICAgICAucmVwbGFjZSgn5Li75ryUJywgJ1xcXFxcXFxcbuS4u+a8lCcpLFxcXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJy5kZXNjfHwuZGV0YWlsLWNvbnRlbnQmJlRleHQnKSxcXFxcbiAgICBwaWNfdXJsOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxcXG4gICAgdXJsOiBNWV9VUkwsXFxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcXFxufSk7XFxcXG52YXIg57q/6LevID0gJ2JvZHkmJi5iJ1xcXFxudmFyIOmAiembhiA9IOe6v+i3r1xcXFxudmFyIOe6v+i3r+WQjSA9ICdoMyYmVGV4dCdcXFxcbnZhciDpgInpm4bliJfooaggPSAndWwmJmxpJ1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57Sic3R1aS12b2RsaXN0X19tZWRpYVxcXCIsXFxcInBhdGhcXFwiOlxcXCJzdHVpLXZvZGxpc3RfX21lZGlhXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnLnN0dWktdm9kbGlzdF9fbWVkaWEmJmxpJyk7XFxcXG5sb2coJ+aQnOe0oue7k+aenCcpXFxcXG5sb2cobGlzdClcXFxcbmlmIChsaXN0Lmxlbmd0aCA9PSAwKSB0aHJvdyBcXFxcXFxcIuaQnOe0ouS4uuepuu+8jOWPr+iDveWMuemFjemUmeivr1xcXFxcXFwiXFxcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnYSYmdGl0bGUnKSxcXFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLnBpYy10ZXh0JiZUZXh0JyksXFxcXG4gICAgICAgIGltZzogcGQobGlzdFtqXSwgJ2EmJmRhdGEtb3JpZ2luYWwnKSxcXFxcbiAgICAgICAgY29udGVudDogcGRmaChsaXN0W2pdLCAnLmRldGFpbC0taDMmJlRleHQnKSxcXFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS4gOe6p215dWktdm9kbGlzdFxcXCIsXFxcInBhdGhcXFwiOlxcXCJteXVpLXZvZGxpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXVxcXFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxcXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnLm15dWktdm9kbGlzdCYmbGknKVxcXFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ2g0JiZUZXh0JyksXFxcXG4gICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJy5waWMtdGFnfHwucGljLXRleHQmJlRleHQnKSxcXFxcbiAgICAgICAgaW1nOiBwZChsaXN0W2pdLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKS5yZXBsYWNlKCd2b2RwbGF5Jywndm9kZGV0YWlsJykgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICB9KVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5LqM57qnbmF2LXRhYnNcXFwiLFxcXCJwYXRoXFxcIjpcXFwibmF2LXRhYnNcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcuZGF0YSYmVGV4dCcpXFxcXG4gICAgICAgIC5yZXBsYWNlKCflnLDljLrvvJonLCAnICAnKVxcXFxuICAgICAgICAucmVwbGFjZSgn5bm05Lu977yaJywgJyAgJykgKyAnXFxcXFxcXFxuJyArXFxcXG4gICAgICAgIHBkZmgoaHRtbCwgJy5kYXRhLDEmJlRleHQnKVxcXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDE1KSArICdcXFxcXFxcXG4nICtcXFxcbiAgICAgICAgcGRmaChodG1sLCAnLmRhdGEsMiYmVGV4dCcpLFxcXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJy5kYXRhLDMmJlRleHQnKSxcXFxcbiAgICBpbWc6IHBkKGh0bWwsICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWwnKSxcXFxcbiAgICB1cmw6IE1ZX1VSTCxcXFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxcXG59KTtcXFxcbnZhciDnur/ot68gPSAnLm5hdi10YWJzJiZhJ1xcXFxudmFyIOmAiembhiA9ICcudGFiLWNvbnRlbnQmJi5teXVpLWNvbnRlbnRfX2xpc3R8fC5zdHVpLWNvbnRlbnRfX3BsYXlsaXN0J1xcXFxudmFyIOe6v+i3r+WQjSA9ICdUZXh0J1xcXFxudmFyIOmAiembhuWIl+ihqCA9ICd1bCYmbGknXFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKJteXVpLXZvZGxpc3RfX21lZGlhXFxcIixcXFwicGF0aFxcXCI6XFxcIm15dWktdm9kbGlzdF9fbWVkaWFcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICcjc2VhcmNoTGlzdCYmbGknKTtcXFxcbmxvZygn5pCc57Si57uT5p6cJylcXFxcbmxvZyhsaXN0KVxcXFxuaWYgKGxpc3QubGVuZ3RoID09IDApIHRocm93IFxcXFxcXFwi5pCc57Si5Li656m677yM5Y+v6IO95Yy56YWN6ZSZ6K+vXFxcXFxcXCJcXFxcbmZvciAodmFyIGogaW4gbGlzdCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdhJiZ0aXRsZScpLFxcXFxuICAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcucGljLXRleHQmJlRleHQnKSxcXFxcbiAgICAgICAgcGljX3VybDogcGQobGlzdFtqXSwgJ2EmJmRhdGEtb3JpZ2luYWwnKSxcXFxcbiAgICAgICAgY29udGVudDogcGRmaChsaXN0W2pdLCAnLmRldGFpbC0taDQmJlRleHQnKSxcXFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICAgIH0pXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuIDnuqd2b2RsaXN0XFxcIixcXFwicGF0aFxcXCI6XFxcInZvZGxpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbk1ZX1JVTEUudXJsLm1hdGNoKC9meXBhZ2UvKVswXVxcXFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJy52b2RsaXN0JiZsaScpO1xcXFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxcXG4gIGQucHVzaCh7XFxcXG4gICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ2EmJnRpdGxlJyksXFxcXG4gICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnYSYmVGV4dCcpLFxcXFxuICAgICAgIHBpY191cmw6IHBkKGxpc3Rbal0sICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWwnKSsnQFJlZmVyZXI9JyxcXFxcbiAgICAgICB1cmw6IHBkKGxpc3Rbal0sJ2EmJmhyZWYnKSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuoznuqdtby1wbGF5LWxvYWRcXFwiLFxcXCJwYXRoXFxcIjpcXFwibW8tcGxheS1sb2FkXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXFxcblxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogcGRmaChodG1sLCAnLnZpZGVvLWluZm8taXRlbXMsMiYmVGV4dCcpXFxcXG4gIC5yZXBsYWNlKCfliIbnsbt8JywgJycpXFxcXG4gIC5yZXBsYWNlKCflnLDljLrvvJonLCAnJylcXFxcbiAgLnJlcGxhY2UoJ+W5tOS7ve+8micsICcgJykuc3Vic3RyaW5nKDAsIDE4KSArICdcXFxcXFxcXG4nICsgJ1xcXFxcXFxcbicgKyBcXFxcbiAgcGRmaChodG1sLCAnLnZpZGVvLWluZm8taXRlbXMsMSYmVGV4dCcpLnN1YnN0cmluZygwLCAxOCksXFxcXG4gICAgcGljX3VybDogcGQoaHRtbCwgJy5sYXp5bG9hZCYmZGF0YS1zcmMnKSxcXFxcbiAgICB1cmw6IE1ZX1VSTCxcXFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxcXG59KTtcXFxcblxcXFxudmFyIOe6v+i3ryA9ICdib2R5JiYubW9kdWxlLXRhYi1jb250ZW50JiYubW9kdWxlLXRhYi1pdGVtJ1xcXFxudmFyIOmAiembhiA9ICdib2R5JiYuc29ydC1pdGVtJ1xcXFxudmFyIOe6v+i3r+WQjSA9ICdzcGFuJiZUZXh0J1xcXFxudmFyIOmAiembhuWIl+ihqCA9ICdib2R5JiZhJ1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5LqM57qnbmF2LXRhYnMxXFxcIixcXFwicGF0aFxcXCI6XFxcIm5hdi10YWJzMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9IFtdO1xcXFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxcXG5cXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IHBkZmgoaHRtbCwgJ3AsMSYmVGV4dCcpXFxcXG4gICAgICAgIC5yZXBsYWNlKCfnsbvlnovvvJonLCAnJylcXFxcbiAgICAgICAgLnJlcGxhY2UoJ+WcsOWMuu+8micsICcgJylcXFxcbiAgICAgICAgLnJlcGxhY2UoJ+W5tOS7ve+8micsICcnKVxcXFxuICAgICAgICAucmVwbGFjZSgn6K+t6KiA77yaJywgJycpICtcXFxcbiAgICAgICAgJ1xcXFxcXFxcblxcXFxcXFxcbicgKyBwZGZoKGh0bWwsICdwLDQmJlRleHQnKVxcXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDMwKSxcXFxcbiAgICBkZXNjOiBwZGZoKGh0bWwsICdwLDImJlRleHQnKSxcXFxcbiAgICBwaWNfdXJsOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxcXG4gICAgdXJsOiBNWV9VUkwsXFxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcXFxufSk7XFxcXG5cXFxcbnZhciDnur/ot68gPSAnLm5hdi10YWJzJiZhJ1xcXFxudmFyIOmAiembhiA9ICdib2R5JiYuc3R1aS1jb250ZW50X19wbGF5bGlzdCdcXFxcbnZhciDnur/ot6/lkI0gPSAnYSYmVGV4dCdcXFxcbnZhciDpgInpm4bliJfooaggPSAndWwmJmxpJ1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcImZsZXhfYnV0dG9uXFxcIixcXFwibmFtZVxcXCI6XFxcIuWumuS9jeS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJlcmppXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciB0YWJzID0gW11cXFxcbnZhciBsaXN0cyA9IFtdXFxcXG5cXFxcbnBkZmEoaHRtbCwg57q/6LevKS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgIGRhdGEgPSBwZGZoKGRhdGEsIOe6v+i3r+WQjSlcXFxcbiAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxcXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCJcXFxcXFxcIilcXFxcbiAgICB9XFxcXG4gICAgdGFicy5wdXNoKGRhdGEpXFxcXG59KVxcXFxuXFxcXG5wZGZhKGh0bWwsIOmAiembhikuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICBsaXN0cy5wdXNoKHBkZmEoZGF0YSwg6YCJ6ZuG5YiX6KGoKSlcXFxcbn0pXFxcXG5cXFxcbmFkZExpc3RlbmVyKFxcXFxcXFwib25DbG9zZVxcXFxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICBjbGVhck15VmFyKFxcXFxcXFwibGlzdHNcXFxcXFxcIik7XFxcXG59KSk7XFxcXG5zdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcImxpc3RzXFxcXFxcXCIsIGxpc3RzKTtcXFxcbnZhciBsaXN0ID0gbGlzdHNbZ2V0TXlWYXIoTVlfVVJMLCAnMCcpXTtcXFxcbnZhciDmjpLluo8gPSBnZXRNeVZhcihNWV9VUkwgKyBcXFxcXFxcIueroOiKguaOkuW6j1xcXFxcXFwiLCAnIzFhYWQxOVxcXFxcXFwiPuato+W6jycpO1xcXFxudmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXFxcXFwiPuWAkuW6jycgPyAnIzFhYWQxOVxcXFxcXFwiPuato+W6jycgOiAnI0ZGMDAwMFxcXFxcXFwiPuWAkuW6jyc7XFxcXG52YXIg5o6S5bqP5ZCNID0gJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I65o6S5bqPPC9zcGFuPjwvYj4nXFxcXG5cXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAnICsg5o6S5bqPICsgJzwvc3Bhbj48L2I+JyxcXFxcbiAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgodGFicywg5o6S5bqP5ZCNLCBsYXp5LCBkKSA9PiB7XFxcXG4gICAgICAgIHZhciBsaXN0cyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXFxcXFwibGlzdHNcXFxcXFxcIik7XFxcXG4gICAgICAgIHZhciDnq6DoioIgPSBsaXN0c1tnZXRNeVZhcihNWV9VUkwsICcwJyldO1xcXFxuICAgICAgICB2YXIg5o6S5bqPID0gZ2V0TXlWYXIoTVlfVVJMICsgXFxcXFxcXCLnq6DoioLmjpLluo9cXFxcXFxcIiwgJyMxYWFkMTlcXFxcXFxcIj7mraPluo8nKTtcXFxcbiAgICAgICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXFxcXFwiPuWAkuW6jycgPyAnIzFhYWQxOVxcXFxcXFwiPuato+W6jycgOiAnI0ZGMDAwMFxcXFxcXFwiPuWAkuW6jyc7XFxcXG4gICAgICAgIHVwZGF0ZUl0ZW0oe1xcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogTVlfVVJMICsgXFxcXFxcXCJf5o6S5bqPXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCJUVmJveOaOqOmAgVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGFicywgbGlzdHMsIGQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciDmjqjpgIEgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJuYW1lXFxcXFxcXCI6IGdldFBhZ2VUaXRsZSgpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY29udGVudFxcXFxcXFwiOiBkLmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJwaWNcXFxcXFxcIjogZC5pbWcgfHwgZC5waWNfdXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiZnJvbVxcXFxcXFwiOiB0YWJzLmpvaW4oJyQkJCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwidXJsXFxcXFxcXCI6IHN0b3JhZ2UwLmdldE15VmFyKFxcXFxcXFwibGlzdHNcXFxcXFxcIikubWFwKGxpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpLm1hcChsaTEgPT4gcGRmaChsaTEsICdUZXh0JykgKyAnJCcgKyBwZChsaTEsICdhJiZocmVmJykpLmpvaW4oJyMnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJyQkJCcpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPVxcXFxcXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KOaOqOmAgSkpXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRhYnMsIGxpc3RzLCBkKVxcXFxuICAgICAgICAgICAgICAgIH1dXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgdGl0bGU6IOaOkuW6j+WQjS5yZXBsYWNlKCfmjpLluo8nLCDmj5DnpLopXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGlmICjmjpLluo8gPT0gJyMxYWFkMTlcXFxcXFxcIj7mraPluo8nKSB7XFxcXG4gICAgICAgICAgICDnq6DoioIucmV2ZXJzZSgpXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IGNwID0g56ug6IqCLm1hcCgoZGF0YSwgc3NpZCkgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogcGQoZGF0YSwgJ2EmJmhyZWYnKSArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IOeroOiKgi5sZW5ndGggPiAzID8gJ3RleHRfNCcgOiAndGV4dF8yJyxcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1VSTCArIFxcXFxcXFwiX+mAiembhlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBpZDogcGQoZGF0YSwgJ2EmJmhyZWYnKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkZWxldGVJdGVtQnlDbHMoTVlfVVJMICsgXFxcXFxcXCJf6YCJ6ZuGXFxcXFxcXCIpO1xcXFxuICAgICAgICBhZGRJdGVtQmVmb3JlKE1ZX1VSTCArIFxcXFxcXFwiZm9vdGVyXFxcXFxcXCIsIGNwKTtcXFxcbiAgICAgICAgcHV0TXlWYXIoTVlfVVJMICsgXFxcXFxcXCLnq6DoioLmjpLluo9cXFxcXFxcIiwg5o+Q56S6KVxcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICB9LCB0YWJzLCDmjpLluo/lkI0sIGxhenksIGRbMF0pLFxcXFxuICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGlkOiBNWV9VUkwgKyBcXFxcXFxcIl/mjpLluo9cXFxcXFxcIixcXFxcbiAgICAgICAgbG9uZ0NsaWNrOiBbe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwiVFZib3jmjqjpgIFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0YWJzLCBsaXN0cywgZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHZhciDmjqjpgIEgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwibmFtZVxcXFxcXFwiOiBnZXRQYWdlVGl0bGUoKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJjb250ZW50XFxcXFxcXCI6IGQuZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJwaWNcXFxcXFxcIjogZC5pbWcgfHwgZC5waWNfdXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImZyb21cXFxcXFxcIjogdGFicy5qb2luKCckJCQnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJ1cmxcXFxcXFxcIjogc3RvcmFnZTAuZ2V0TXlWYXIoXFxcXFxcXCJsaXN0c1xcXFxcXFwiKS5tYXAobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpLm1hcChsaTEgPT4gcGRmaChsaTEsICdUZXh0JykgKyAnJCcgKyBwZChsaTEsICdhJiZocmVmJykpLmpvaW4oJyMnKVxcXFxuICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCckJCQnKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPVxcXFxcXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KOaOqOmAgSkpXFxcXG4gICAgICAgICAgICB9LCB0YWJzLCBsaXN0cywgZFswXSlcXFxcbiAgICAgICAgfV1cXFxcbiAgICB9XFxcXG59KVxcXFxuXFxcXG50YWJzLmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGdldE15VmFyKE1ZX1VSTCwgJzAnKSA9PSBpZCA/ICfigJzigJwnICsgZGF0YSArICfigJ3igJ0nIDogZGF0YSxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKOe6v+i3rywgbGF6eSwgaWQpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBsaXN0cyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXFxcXFwibGlzdHNcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICB2YXIg5o6S5bqPID0gZ2V0TXlWYXIoTVlfVVJMICsgXFxcXFxcXCLnq6DoioLmjpLluo9cXFxcXFxcIiwgJyMxYWFkMTlcXFxcXFxcIj7mraPluo8nKTtcXFxcbiAgICAgICAgICAgIHZhciDmj5DnpLogPSDmjpLluo8gPT0gJyNGRjAwMDBcXFxcXFxcIj7lgJLluo8nID8gJyMxYWFkMTlcXFxcXFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFxcXFxcIj7lgJLluo8nO1xcXFxuICAgICAgICAgICAg57q/6LevLmZvckVhY2goKGRhdGEsIHhsaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGlkID09IHhsaWQgPyAn4oCc4oCcJyArIGRhdGEgKyAn4oCd4oCdJyA6IGRhdGEsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfVVJMICsgXFxcXFxcXCJf57q/6LevXFxcXFxcXCIgKyB4bGlkXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICBwdXRNeVZhcihNWV9VUkwsIGlkKVxcXFxuICAgICAgICAgICAgdmFyIOeroOiKgiA9IGxpc3RzW2dldE15VmFyKE1ZX1VSTCwgJzAnKV07XFxcXG4gICAgICAgICAgICBpZiAo5o6S5bqPID09ICcjRkYwMDAwXFxcXFxcXCI+5YCS5bqPJykge1xcXFxuICAgICAgICAgICAgICAgIOeroOiKgi5yZXZlcnNlKClcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBjcCA9IOeroOiKgi5tYXAoKGRhdGEsIHNzaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHBkKGRhdGEsICdhJiZocmVmJykgKyBsYXp5LFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTog56ug6IqCLmxlbmd0aCA+IDMgPyAndGV4dF80JyA6ICd0ZXh0XzInLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBNWV9VUkwgKyBcXFxcXFxcIl/pgInpm4ZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwZChkYXRhLCAnYSYmaHJlZicpXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoTVlfVVJMICsgXFxcXFxcXCJf6YCJ6ZuGXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShNWV9VUkwgKyBcXFxcXFxcImZvb3RlclxcXFxcXFwiLCBjcCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSwgdGFicywgbGF6eSwgaWQpLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiBNWV9VUkwgKyBcXFxcXFxcIl/nur/ot69cXFxcXFxcIiArIGlkXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0pXFxcXG5cXFxcbmlmICjmjpLluo8gPT0gJyNGRjAwMDBcXFxcXFxcIj7lgJLluo8nKSB7XFxcXG4gICAgbGlzdC5yZXZlcnNlKClcXFxcbn1cXFxcbmxpc3QuZm9yRWFjaCgoZGF0YSwgaWQpID0+IHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcXFxuICAgICAgICB1cmw6IHBkKGRhdGEsICdhJiZocmVmJykgKyBsYXp5LFxcXFxuICAgICAgICBjb2xfdHlwZTogbGlzdC5sZW5ndGggPiAzID8gJ3RleHRfNCcgOiAndGV4dF8yJyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGNsczogTVlfVVJMICsgXFxcXFxcXCJf6YCJ6ZuGXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogcGQoZGF0YSwgJ2EmJmhyZWYnKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG59KVxcXFxubGV0IG5ld3N0aXAgPSBsaXN0Lmxlbmd0aDtcXFxcbmlmIChuZXdzdGlwKSB7XFxcXG4gICAgc2V0TGFzdENoYXB0ZXJSdWxlKCdqczonICsgJC50b1N0cmluZygo6YCJ6ZuGLCDpgInpm4bliJfooagpID0+IHtcXFxcbiAgICAgICAgc2V0UmVzdWx0KCfmm7TmlrDoh7M6IOesrCcgKyBwZGZhKGdldFJlc0NvZGUoKSwg6YCJ6ZuGKS5tYXAoZGF0YSA9PiBwZGZhKGRhdGEsIOmAiembhuWIl+ihqCkubGVuZ3RoKS5zb3J0KChhLCBiKSA9PiBiIC0gYSlbMF0gKyBcXFxcXFxcIumbhlxcXFxcXFwiKTtcXFxcbiAgICB9LCDpgInpm4YsIOmAiembhuWIl+ihqCkpO1xcXFxufVxcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJiaWdfYmxhbmtfYmxvY2tcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBpZDogTVlfVVJMICsgXFxcXFxcXCJmb290ZXJcXFxcXFxcIlxcXFxuICAgIH1cXFxcbn0pO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS6jOe6p3BsYXlfc291cmNlX3RhYlxcXCIsXFxcInBhdGhcXFwiOlxcXCJwbGF5X3NvdXJjZV90YWJcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcucmVtYXJrcyYmVGV4dCcpICtcXFxcbiAgICAgICAgJ1xcXFxcXFxcbicgKyBwZGZoKGh0bWwsICcucy10b3AtaW5mby1kZXRhaWwmJmEmJlRleHQnKSArXFxcXG4gICAgICAgIHBkZmgoaHRtbCwgJy5zLXRvcC1pbmZvLWRldGFpbCYmYSwxJiZUZXh0JykgK1xcXFxuICAgICAgICBwZGZoKGh0bWwsICcucy10b3AtaW5mby1kZXRhaWwmJmEsMiYmVGV4dCcpICtcXFxcbiAgICAgICAgJ1xcXFxcXFxcbuKAnOKAnOeugOS7i++8muS4jeiDveeUqOWwseWIoOaOieWQp+KAneKAnScsXFxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLmRlc2NfdHh0JiZUZXh0Jykuc3Vic3RyaW5nKDAsIDIwKSxcXFxcbiAgICBpbWc6IHBkKGh0bWwsICcuaW1nLWNvdmVyfHwudm9kLWRldGFpbC1iaiYmc3JjJyksXFxcXG4gICAgdXJsOiBNWV9VUkwsXFxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcXFxufSk7XFxcXG52YXIg57q/6LevID0gJy5wbGF5X3NvdXJjZV90YWImJmEnXFxcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5wbGF5ZXJfbGlzdHx8I3BsYXlsaXN0Ym94fHwjcGxheXN4J1xcXFxudmFyIOe6v+i3r+WQjSA9ICdhJiZUZXh0J1xcXFxudmFyIOmAiembhuWIl+ihqCA9ICd1bCYmbGknXFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuoznuqdmZWQtcGxheS1pdGVtXFxcIixcXFwicGF0aFxcXCI6XFxcImZlZC1wbGF5LWl0ZW1cXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICdkZCYmbGksMyYmVGV4dCcpICtcXFxcbiAgICAgICAgJ1xcXFxcXFxcbicgKyBwZGZoKGh0bWwsICdkZCYmbGksNCYmVGV4dCcpXFxcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpICsgJ1xcXFxcXFxcbicgK1xcXFxuICAgICAgICBwZGZoKGh0bWwsICdkZCYmbGksNSYmVGV4dCcpXFxcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpLFxcXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJ2RkJiZsaSw2JiZUZXh0Jykuc3Vic3RyaW5nKDAsIDI1KSxcXFxcbiAgICBwaWNfdXJsOiBwZChodG1sLCAnLmZlZC1sYXp5JiZkYXRhLW9yaWdpbmFsJyksXFxcXG4gICAgdXJsOiBNWV9VUkwsXFxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXFxcbn0pO1xcXFxudmFyIOe6v+i3ryA9ICdib2R5JiYuZmVkLWRyb3AtYnRucydcXFxcbnZhciDpgInpm4YgPSAnYm9keSYmLmZlZC1wbGF5LWl0ZW0nXFxcXG52YXIg57q/6Lev5ZCNID0gJ2EmJlRleHQnXFxcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ2JvZHkmJi5mZWQtYnRucy1pbmZvJ1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57SiZGxcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGxcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICdib2R5JiZkbCcpO1xcXFxubG9nKCfmkJzntKLnu5PmnpwnKVxcXFxubG9nKGxpc3QpXFxcXG5pZiAobGlzdC5sZW5ndGggPT0gMCkgdGhyb3cgXFxcXFxcXCLmkJzntKLkuLrnqbrvvIzlj6/og73ljLnphY3plJnor69cXFxcXFxcIlxcXFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxcXG4gIGQucHVzaCh7XFxcXG4gICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ2gxJiZUZXh0JyksXFxcXG4gICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLmZlZC1saXN0LXJlbWFya3MmJlRleHQnKSxcXFxcblxcXFx0ICAgIGNvbnRlbnQ6IHBkZmgobGlzdFtqXSwgJy5mZWQtcGFydC1lc2FuLS1zcGFuJiZUZXh0JyksXFxcXG4gICAgICAgaW1nOiBwZChsaXN0W2pdLCAnYSYmZGF0YS1vcmlnaW5hbCcpLFxcXFxuICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKVxcXFxuICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIiNNYXBwaW5nXFxcIixcXFwicGF0aFxcXCI6XFxcIk1hcHBpbmdcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4kLmV4cG9ydHMgPSB7XFxcXG4gICAgXFxcXFxcXCJob21lXFxcXFxcXCI6IFt7XFxcXG4gICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCIgYiBcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiLmJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIC8vICAgICBhbGxLZXk6IHRydWUsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIGtleXM6IFtcXFxcXFxcIm5hdi10YWJzXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIm5hdi10YWJzXFxcXFxcXCIsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIGtleXM6IFtcXFxcXFxcIm15dWktY29udGVudF9fbGlzdFxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJteXVpLWNvbnRlbnRfX2xpc3RcXFxcXFxcIixcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwibmF2LXRhYnNcXFxcXFxcIiwgXFxcXFxcXCJzdHVpLWNvbnRlbnRfX3BsYXlsaXN0XFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIm5hdi10YWJzMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgYWxsS2V5OiB0cnVlLFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCJoM1xcXFxcXFwiLCBcXFxcXFxcInN0dWktY29udGVudF9fcGxheWxpc3RcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaDNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGFsbEtleTogdHJ1ZSxcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwibXl1aS12b2RsaXN0IFxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJteXVpLXZvZGxpc3RcXFxcXFxcIixcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwibW8tbW92cy1pdGVtXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIm1vLW1vdnMtaXRlbVxcXFxcXFwiLFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCJtb2R1bGUtdGFiLWl0ZW1cXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwibW9kdWxlLXRhYi1pdGVtXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAvLyAgICAgYWxsS2V5OiB0cnVlLFxcXFxuICAgICAgICB9LHtcXFxcbiAgICAgICAgICAgIGtleXM6IFtcXFxcXFxcInktcGxheUxpc3RcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwieS1wbGF5TGlzdFxcXFxcXFwiLFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCJzdHVpLXZvZGxpc3QgXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcInN0dWktdm9kbGlzdFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgLy8gICAgIGFsbEtleTogdHJ1ZSxcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwicGxheV9zb3VyY2VfdGFiXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcInBsYXlfc291cmNlX3RhYlxcXFxcXFwiLFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCJmZWQtcGxheS1pdGVtXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImZlZC1wbGF5LWl0ZW1cXFxcXFxcIixcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwibW9kdWxlLWl0ZW1cXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwibW9kdWxlLWl0ZW1zXFxcXFxcXCIsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIGtleXM6IFtcXFxcXFxcInZvZGxpc3QgXFxcXFxcXCIsIFxcXFxcXFwibGF6eWxvYWRcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwidm9kbGlzdFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgYWxsS2V5OiB0cnVlLFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCJtby1wbGF5LWxvYWRcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwibW8tcGxheS1sb2FkXFxcXFxcXCIsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIGtleXM6IFtcXFxcXFxcImZlZC1saXN0LXRpdGxlXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImZlZC1saXN0LXRpdGxlXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAvL2FsbEtleTogdHJ1ZSxcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwicGFjay15a3BhY2tcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcInBhY2steWtwYWNrXFxcXFxcXCIsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIC8qXFxcXG4gICAgICAgICAgICAgICAge1xcXFxuICAgICAgICAgICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCJpdGVtXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaXRlbVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIH0sKi9cXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwiZGF0YV9saXN0XFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImRhdGFfbGlzdFxcXFxcXFwiLFxcXFxuICAgICAgICB9LFxcXFxuICAgIF0sXFxcXG4gICAgXFxcXFxcXCJzZWFyY2hcXFxcXFxcIjogW3tcXFxcbiAgICAgICAgICAgIGtleXM6IFtcXFxcXFxcInN0dWktdm9kbGlzdF9fbWVkaWFcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwic3R1aS12b2RsaXN0X19tZWRpYVxcXFxcXFwiLFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCJteXVpLXZvZGxpc3RfX21lZGlhXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIm15dWktdm9kbGlzdF9fbWVkaWFcXFxcXFxcIixcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwibW9kdWxlLXNlYXJjaC1pdGVtXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIm1vZHVsZS1zZWFyY2gtaXRlbVxcXFxcXFwiLFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBrZXlzOiBbXFxcXFxcXCJzdHVpLXZvZGxpc3QgXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcInN0dWktdm9kbGlzdFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgLy8gICAgIGFsbEtleTogdHJ1ZSxcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAga2V5czogW1xcXFxcXFwiZGwgXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImRsXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBhbGxLZXk6IHRydWUsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIGtleXM6IFtcXFxcXFxcIm1vZHVsZS1pdGVtc1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJtb2R1bGUtaXRlbXNcXFxcXFxcIixcXFxcbiAgICAgICAgfSxcXFxcbiAgICBdXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiI2F1dG9cXFwiLFxcXCJwYXRoXFxcIjpcXFwiYXV0b1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmZ1bmN0aW9uIGdldFBhZ2VTb3VyY2Uoa2V5KSB7XFxcXG4gICAgbGV0IHNyYyA9IHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL3BhZ2UvXFxcXFxcXCIgKyBrZXkgKyBcXFxcXFxcIj9ydWxlPeaooeadv8K3UVxcXFxcXFwiKTtcXFxcbiAgICBzcmMgPSBKU09OLnBhcnNlKHNyYykucnVsZTtcXFxcbiAgICByZXR1cm4gc3JjO1xcXFxufVxcXFxuY29uc3Qgc291cmNlTWFwID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL01hcHBpbmc/cnVsZT3mqKHmnb/Ct1FcXFxcXFxcIik7XFxcXG5cXFxcbmZ1bmN0aW9uIGF1dG9QYWdlKGh0bWxzcmMsIHR5cGUpIHtcXFxcbiAgICBsZXQgcGFnZVJ1bGVzID0gW10sXFxcXG4gICAgICAgIGh0bWxTb3VyY2UgPSBodG1sc3JjLFxcXFxuICAgICAgICBwYWdlVHlwZSxcXFxcbiAgICAgICAgbU1hcHBpbmc7XFxcXG4gICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xcXFxuICAgICAgICBwYWdlVHlwZSA9IHR5cGU7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgcGFnZVR5cGUgPSBNWV9UWVBFO1xcXFxuICAgIH1cXFxcbiAgICBtTWFwcGluZyA9IHNvdXJjZU1hcFtwYWdlVHlwZV07XFxcXG4gICAgaWYgKG1NYXBwaW5nID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkobU1hcHBpbmcpKSB7XFxcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXFxcXFxcIuS4jeWtmOWcqFxcXFxcXFwiICsgcGFnZVR5cGUgKyBcXFxcXFxcIuexu+Wei+eahOaooeadv1xcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgZm9yIChsZXQgaXRlbSBvZiBtTWFwcGluZykge1xcXFxuICAgICAgICBpZiAoaXRlbS5hbGxLZXkpIHtcXFxcbiAgICAgICAgICAgIGlmIChpdGVtLmtleXMuZXZlcnkoa2V5ID0+IGh0bWxTb3VyY2UuaW5jbHVkZXMoa2V5KSkpIHtcXFxcbiAgICAgICAgICAgICAgICBwYWdlUnVsZXMucHVzaChpdGVtKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChpdGVtLmtleXMuc29tZShrZXkgPT4gaHRtbFNvdXJjZS5pbmNsdWRlcyhrZXkpKSkge1xcXFxuICAgICAgICAgICAgICAgIHBhZ2VSdWxlcy5wdXNoKGl0ZW0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGlmKHBhZ2VSdWxlcy5sZW5ndGggPT0gMCkge1xcXFxuICAgICAgICBsb2coXFxcXFxcXCLmmoLml6DlkIjpgILnmoTmqKHmnb9cXFxcXFxcIik7XFxcXG4gICAgfVxcXFxuICAgIGZvciAobGV0IHBhZ2VSdWxlIG9mIHBhZ2VSdWxlcykge1xcXFxuICAgICAgICBsb2coXFxcXFxcXCLmraPlnKjljLnphY3vvJpcXFxcXFxcIiArIHBhZ2VSdWxlLnVybCk7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBldmFsLmNhbGwobnVsbCwgXFxcXFxcXCI7KGZ1bmN0aW9uKCl7XFxcXFxcXCIgKyBnZXRQYWdlU291cmNlKHBhZ2VSdWxlLnVybCkgKyBcXFxcXFxcIn0pKClcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBsb2coXFxcXFxcXCLljLnphY3mqKHmnb/miJDlip/vvIzmraPlnKjnu5PmnZ/ljLnphY3ov5vnqItcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgbG9nKFxcXFxcXFwi5Yy56YWN5qih5p2/6ZSZ6K+vXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSlcXFxcbiAgICAgICAgICAgIGxvZyhcXFxcXFxcIuato+WcqOWMuemFjeS4i+S4gOS4quaooeadvy4uLi4uLlxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgaWYgKHBhZ2VSdWxlLnVybCA9PSBwYWdlUnVsZXNbcGFnZVJ1bGVzLmxlbmd0aCAtIDFdLnVybCkge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIuW3suWMuemFjeWIsOacgOWQjuS4gOS4quaooeadv++8jOaaguaXoOWQiOmAgueahOaooeadv1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoW10pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuXFxcXG59XFxcXG4kLmV4cG9ydHMuYXV0b1BhZ2UgPSBhdXRvUGFnZTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuIDnuqdwYWNrLXlrcGFja1xcXCIsXFxcInBhdGhcXFwiOlxcXCJwYWNrLXlrcGFja1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9W107XFxcXG5NWV9SVUxFLnVybC5tYXRjaCgvZnlwYWdlLylbMF1cXFxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICdib2R5JiYucGFjay15a3BhY2snKTtcXFxcbmZvciAodmFyIGogaW4gbGlzdCkge1xcXFxuICBkLnB1c2goe1xcXFxuICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdhJiZ0aXRsZScpLFxcXFxuICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJ3NwYW4sLTEmJlRleHQnKSxcXFxcbiAgICAgICBpbWc6IHBkKGxpc3Rbal0sICcuZWNsYXp5JiZkYXRhLW9yaWdpbmFsJykrJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgdXJsOiBwZChsaXN0W2pdLCdhJiZocmVmJykrICcjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuIDnuqdtb2R1bGUtaXRlbXNcXFwiLFxcXCJwYXRoXFxcIjpcXFwibW9kdWxlLWl0ZW1zXFxcIixcXFwicnVsZVxcXCI6XFxcIk1ZX1JVTEUudXJsLm1hdGNoKC9meXBhZ2UvKVswXVxcXFxudmFyIGQgPSBbXVxcXFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJ2JvZHkmJi5tb2R1bGUtaXRlbScpO1xcXFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ3N0cm9uZ3x8YSYmVGV4dHx8dGl0bGUnKSxcXFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLm1vZHVsZS1pdGVtLXRleHR8fC5tb2R1bGUtaXRlbS1ub3RlJiZUZXh0JyksXFxcXG4gICAgICAgIHBpY191cmw6IHBkKGxpc3Rbal0sICdpbWd8fC5sYXp5JiZkYXRhLXNyY3x8ZGF0YS1vcmlnaW5hbHx8c3JjJykgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpICsgXFxcXFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuoznuqdtb2R1bGUtdGFiLWl0ZW1cXFwiLFxcXCJwYXRoXFxcIjpcXFwibW9kdWxlLXRhYi1pdGVtXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXFxcblxcXFxudHJ5IHtcXFxcbiAgICB2YXIgdGl0bGUgPSBwZGZhKGh0bWwsICdib2R5LS1hJiYudGFnLWxpbmsnKTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICB2YXIgdGl0bGUgPSAnJztcXFxcbn1cXFxcbnZhciBUID0gW107XFxcXG5mb3IgKHZhciBpIGluIHRpdGxlKSB7XFxcXG4gICAgVC5wdXNoKHBkZmgodGl0bGVbaV0sICdhJiZUZXh0JykpXFxcXG59XFxcXG5cXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFQuam9pbignICAnKSArICdcXFxcXFxcXG4nICtcXFxcbiAgICAgICAgcGRmaChodG1sLCAnLnZpZGVvLWluZm8taXRlbXMsMSYmVGV4dCcpXFxcXG4gICAgICAgIC5zcGxpdCgnLycpLmpvaW4oJyAgJylcXFxcbiAgICAgICAgLnN1YnN0cmluZygwLCAyMCkgKyAnXFxcXFxcXFxuJyArXFxcXG4gICAgICAgIHBkZmgoaHRtbCwgJy52aWRlby1pbmZvLWl0ZW1zJiZUZXh0JylcXFxcbiAgICAgICAgLnNwbGl0KCcvJykuam9pbignICAnKVxcXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDIwKSxcXFxcbiAgICBkZXNjOiBwZGZoKGh0bWwsICcudmlkZW8taW5mby1pdGVtcywyJiZUZXh0JyksXFxcXG4gICAgaW1nOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsfHxkYXRhLXNyY3x8c3JjJyksXFxcXG4gICAgdXJsOiBNWV9VUkwsXFxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcXFxufSk7XFxcXG52YXIg57q/6LevID0gJ2JvZHkmJi5tb2R1bGUtdGFiLWl0ZW0nXFxcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5zY3JvbGwtYm94LXl8fC5tb2R1bGUtbGlzdCdcXFxcbnZhciDnur/ot6/lkI0gPSAnc3BhbiYmVGV4dCdcXFxcbnZhciDpgInpm4bliJfooaggPSAnYm9keSYmYSdcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0om1vZHVsZS1zZWFyY2gtaXRlbVxcXCIsXFxcInBhdGhcXFwiOlxcXCJtb2R1bGUtc2VhcmNoLWl0ZW1cXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICdib2R5JiYubW9kdWxlLXNlYXJjaC1pdGVtJyk7XFxcXG5sb2coJ+aQnOe0oue7k+aenCcpXFxcXG5sb2cobGlzdClcXFxcbmlmIChsaXN0Lmxlbmd0aCA9PSAwKSB0aHJvdyBcXFxcXFxcIuaQnOe0ouS4uuepuu+8jOWPr+iDveWMuemFjemUmeivr1xcXFxcXFwiXFxcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnaDMmJlRleHQnKSxcXFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLnZpZGVvLXNlcmlhbCYmVGV4dCcpLFxcXFxuICAgICAgICBjb250ZW50OiBwZGZoKGxpc3Rbal0sICcudmlkZW8taW5mby1hdXgmJlRleHQnKSxcXFxcbiAgICAgICAgaW1nOiBwZChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsfHxkYXRhLXNyYycpLFxcXFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICcudmlkZW8tc2VyaWFsJiZocmVmJykgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS4gOe6p2l0ZW1cXFwiLFxcXCJwYXRoXFxcIjpcXFwiaXRlbVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9IFtdO1xcXFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxcXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnYm9keSYmLml0ZW0nKTtcXFxcbmZvciAobGV0IGkgaW4gbGlzdCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3RbaV0sICdpbWcmJmFsdCcpLFxcXFxuICAgICAgICBkZXNjOiBwZGZoKGxpc3RbaV0sICdwJiZUZXh0JyksXFxcXG4gICAgICAgIHBpY191cmw6IHBkKGxpc3RbaV0sICdpbWcmJnNyYycpLFxcXFxuICAgICAgICB1cmw6IHBkKGxpc3RbaV0sICdhJiZocmVmJyksXFxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMydcXFxcbiAgICB9KVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5LiA57qnZGF0YV9saXN0XFxcIixcXFwicGF0aFxcXCI6XFxcImRhdGFfbGlzdFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9IFtdO1xcXFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxcXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnI2RhdGFfbGlzdCYmbGknKTtcXFxcbmZvciAobGV0IGkgaW4gbGlzdCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3RbaV0sICdhJiZ0aXRsZScpLFxcXFxuICAgICAgICBkZXNjOiBwZGZoKGxpc3RbaV0sICdlbSYmVGV4dCcpLFxcXFxuICAgICAgICBwaWNfdXJsOiBwZChsaXN0W2ldLCAnaW1nJiZkYXRhLXNyYycpLFxcXFxuICAgICAgICB1cmw6IHBkKGxpc3RbaV0sICdhJiZocmVmJyksXFxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMydcXFxcbiAgICB9KVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5LqM57qnaDNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiaDNcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcXFxuaWYgKGh0bWwuaW5kZXhPZign5qOA5rWL5LitJykgIT0gLTEpIHtcXFxcbiAgICBodG1sID0gcmVxdWVzdChNWV9VUkwgKyAnP2J0d2FmJyArIGh0bWwubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcXFxcXFxcXFwiLylbMV0pO1xcXFxufVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogcGRmaChodG1sLCAnLmRhdGEsMiYmVGV4dCcpXFxcXG4gICAgICAgIC5yZXBsYWNlKCfnsbvlnovvvJonLCAnJylcXFxcbiAgICAgICAgLnJlcGxhY2UoJ+WcsOWMuu+8micsICcnKVxcXFxuICAgICAgICAucmVwbGFjZSgn5bm05Lu977yaJywgJyAnKVxcXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDE4KSArICdcXFxcXFxcXG4nICtcXFxcbiAgICAgICAgcGRmaChodG1sLCAnLmRhdGEsMSYmVGV4dCcpXFxcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpICsgJ1xcXFxcXFxcbicgK1xcXFxuICAgICAgICBwZGZoKGh0bWwsICcuZGF0YSYmVGV4dCcpXFxcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpLFxcXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJy5kZXRhaWwtc2tldGNofHwuZGF0YSwzfHwjZGVzYyYmVGV4dCcpLFxcXFxuICAgIGltZzogcGQoaHRtbCwgJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCcpLFxcXFxuICAgIHVybDogTVlfVVJMLFxcXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXFxcbn0pO1xcXFxuXFxcXG52YXIg57q/6LevID0gJ2JvZHkmJi5zdHVpLXBhbm5lbDpoYXMoLnN0dWktY29udGVudF9fcGxheWxpc3QpJ1xcXFxudmFyIOmAiembhiA9ICdib2R5JiYuc3R1aS1jb250ZW50X19wbGF5bGlzdCdcXFxcbnZhciDnur/ot6/lkI0gPSAnaDMmJlRleHQnXFxcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ3VsJiZsaSdcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS4gOe6p2ZlZC1saXN0LXRpdGxlXFxcIixcXFwicGF0aFxcXCI6XFxcImZlZC1saXN0LXRpdGxlXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG5NWV9SVUxFLnVybC5tYXRjaCgvZnlwYWdlLylbMF1cXFxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICcuZmVkLWxpc3QtaW5mbyYmbGknKTtcXFxcbmZvciAodmFyIGogaW4gbGlzdCkge1xcXFxuICBkLnB1c2goe1xcXFxuICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICcuZmVkLWxpc3QtdGl0bGUmJlRleHQnKSxcXFxcbiAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcuZmVkLXRleHQtY2VudGVyJiZUZXh0JyksXFxcXG4gICAgICAgaW1nOiBwZChsaXN0W2pdLCAnYSYmZGF0YS1vcmlnaW5hbCcpKydAUmVmZXJlcj0nLFxcXFxuICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKVxcXFxuICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS6jOe6p215dWktY29udGVudF9fbGlzdFxcXCIsXFxcInBhdGhcXFwiOlxcXCJteXVpLWNvbnRlbnRfX2xpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcuZGF0YSwwJiZUZXh0JylcXFxcbiAgICAgICAgLnJlcGxhY2UoJ+WcsOWMuu+8micsICcgICcpXFxcXG4gICAgICAgIC5yZXBsYWNlKCflubTku73vvJonLCAnICAnKSArICdcXFxcXFxcXG4nICtcXFxcbiAgICAgICAgcGRmaChodG1sLCAnLmRhdGEsMSYmVGV4dCcpXFxcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpICsgJ1xcXFxcXFxcbicgK1xcXFxuICAgICAgICBwZGZoKGh0bWwsICcuZGF0YSwyJiZUZXh0JyksXFxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLmRhdGEsMyYmVGV4dCcpLFxcXFxuICAgIHBpY191cmw6IHBkKGh0bWwsICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWwnKSxcXFxcbiAgICB1cmw6IE1ZX1VSTCxcXFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxcXG59KTtcXFxcbnZhciDnur/ot68gPSAnYm9keSYmLm15dWktcGFuZWwtYm94OmhhcygubXl1aS1jb250ZW50X19saXN0KSdcXFxcbnZhciDpgInpm4YgPSAnYm9keSYmLm15dWktY29udGVudF9fbGlzdCdcXFxcbnZhciDnur/ot6/lkI0gPSAnaDMmJlRleHQnXFxcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ3VsJiZsaSdcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWtl+espuS4suWkhOeQhuW3peWFt1xcXCIsXFxcInBhdGhcXFwiOlxcXCJzdHJpbmd0b29sXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuY29uc3QgbWF0Y2hMaXN0ICA9IHtcXFxcbiAgLy8gXFxcXFxcXCI8XFxcXFxcXCI6XFxcXFxcXCImbHQ7XFxcXFxcXCIsXFxcXG4gIC8vIFxcXFxcXFwiPlxcXFxcXFwiOiBcXFxcXFxcIiZndDtcXFxcXFxcIixcXFxcbiAgLy8gXFxcXFxcXCImXFxcXFxcXCI6IFxcXFxcXFwiJmFtcDtcXFxcXFxcIixcXFxcbiAgLy8gJ1xcXFxcXFwiJzogXFxcXFxcXCImcXVvdDtcXFxcXFxcIixcXFxcbiAgLy8gXFxcXFxcXCInXFxcXFxcXCI6IFxcXFxcXFwiYWN1dGU7XFxcXFxcXCIsXFxcXG4gIFxcXFxcXFwiIFxcXFxcXFwiOiBcXFxcXFxcIiZuYnNwO1xcXFxcXFwiLFxcXFxuICBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiOlxcXFxcXFwiPGJyPlxcXFxcXFwiXFxcXG59XFxcXG4vLyDlrZfnrKbov4fmu6TlmahcXFxcbmZ1bmN0aW9uIGh0bWxFc2NhcGUodGV4dCl7XFxcXG4gIGxldCByZWdTdHIgPSAnKCcgKyBPYmplY3Qua2V5cyhtYXRjaExpc3QpLnRvU3RyaW5nKCkgKyAnKSdcXFxcbiAgcmVnU3RyID0gcmVnU3RyLnJlcGxhY2UoLywvZywgJyl8KCcpICBcXFxcbiAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChyZWdTdHIsICdnJylcXFxcbiAgcmV0dXJuIHRleHQucmVwbGFjZShyZWdFeHAsIG1hdGNoID0+IG1hdGNoTGlzdFttYXRjaF0pXFxcXG59XFxcXG4kLmV4cG9ydHMuaHRtbEVzY2FwZSA9IGh0bWxFc2NhcGVcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLliqjmgIHliIbnsbsxXFxcIixcXFwicGF0aFxcXCI6XFxcImR0ZmxcXFwiLFxcXCJydWxlXFxcIjpcXFwiY29uc3QgZW1wdHkgPSBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuXFxcXG5pZiAodHlwZW9mKOaLvOaOpeWIhuexuykgIT0gJ3VuZGVmaW5lZCcgJiYg5ou85o6l5YiG57G7ICE9ICcnKSB7XFxcXG4gICAgdmFyIGNhdGVnb3JpZXMgPSBwZGZhKGh0bWwsIOWkp+exu+WumuS9jSkuY29uY2F0KHBkZmEoaHRtbCwg5ou85o6l5YiG57G7KSlcXFxcbn0gZWxzZSB7XFxcXG4gICAgdmFyIGNhdGVnb3JpZXMgPSBwZGZhKGh0bWwsIOWkp+exu+WumuS9jSlcXFxcbn1cXFxcblxcXFxubGV0IGluaXRfY2F0ZSA9IFtdXFxcXG5cXFxcbmZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcXFxuICAgIGluaXRfY2F0ZS5wdXNoKFxcXFxcXFwiMFxcXFxcXFwiKVxcXFxufVxcXFxuXFxcXG5jb25zdCBmb2xkID0gZ2V0VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXFxcXFwiMFxcXFxcXFwiKVxcXFxuY29uc3QgY2F0ZV90ZW1wX2pzb24gPSBnZXRWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXFxcbmNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoY2F0ZV90ZW1wX2pzb24pXFxcXG5cXFxcbmlmIChwYXJzZUludChwYWdlKSA9PT0gMSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBmb2xkID09PSAnMScgPyAn4oCc4oCc4oCd4oCdPGI+JyArICfiiKgnLmZvbnRjb2xvcihcXFxcXFxcIiNGRjAwMDBcXFxcXFxcIikgKyAnPC9iPicgOiAn4oCc4oCc4oCd4oCdPGI+JyArICfiiKcnLmZvbnRjb2xvcihcXFxcXFxcIiMxYWFkMTlcXFxcXFxcIikgKyAnPC9iPicsXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChmb2xkKSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCA9PT0gJzEnID8gJzAnIDogJzEnKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICB9LCBmb2xkKSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICB9KVxcXFxuICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxcXG4gICAgICAgIGxldCBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jSk7XFxcXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xcXFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZijmjpLpmaQpICE9ICd1bmRlZmluZWQnICYmIOaOkumZpCAhPSAnJykge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCJcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGtleS50b1N0cmluZygpID09PSBjYXRlX3RlbXBbaW5kZXhdID8gXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpIDogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChwZChpdGVtLCDliIbnsbvpk77mjqUpICsgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcXFxcXCIwXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudGl0bGUsIEpTT04uc3RyaW5naWZ5KG5ld19jYXRlKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnVybCwgaW5wdXQpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZCA9PT0gJzEnKSB7XFxcXG4gICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimClcXFxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyBcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiICsgdGl0bGUuZm9udGNvbG9yKOWIhuexu+minOiJsikgOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHBkKGl0ZW0sIOWIhuexu+mTvuaOpSkgKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudGl0bGUsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudXJsLCBpbnB1dClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJibGFua19ibG9ja1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5LiA57qn5YWs5YWx5qih5p2/XFxcIixcXFwicGF0aFxcXCI6XFxcInlpamlcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24g5LiA57qnKCkge307XFxcXG5PYmplY3QuYXNzaWduKOS4gOe6py5wcm90b3R5cGUsIHtcXFxcbiAgICBjb25zdHJ1Y3Rvcjog5LiA57qnLFxcXFxuICAgIHRlc3QoKSB7fSxcXFxcbiAgICDojrflj5bmupDnoIEodXJsLCBoZWFkZXIpIHtcXFxcbiAgICAgICAgcmV0dXJuIGZldGNoKHRydWVfdXJsLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXIgfHwge1xcXFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjApJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSAvLyDpu5jorqTnu5/kuIDkvb/nlKhQQyBVQVxcXFxuICAgIH0sXFxcXG4gICAg6I635Y+W5q2j56Gu6ZO+5o6lKHBhZ2UsIHJlZ2V4KSB7XFxcXG4gICAgICAgIGxldCB0cnVlX3VybCA9IGdldE15VmFyKCdoZWFkZXIudXJsJywgTVlfVVJMKTtcXFxcbiAgICAgICAgbGV0IOmTvuaOpeWkhOeQhuW3peWFtyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3VybC1wcm9jZXNzb3I/cnVsZT3mqKHmnb/Ct1EnKVxcXFxuICAgICAgICB0cnVlX3VybCA9IOmTvuaOpeWkhOeQhuW3peWFt1xcXFxuICAgICAgICAgICAgLumTvuaOpSh0cnVlX3VybClcXFxcbiAgICAgICAgICAgIC7pobXnoIEocGFnZSlcXFxcbiAgICAgICAgICAgIC7mj5LlhaXmlrDlpITnkIbop4TliJkocmVnZXggfHwgW10pXFxcXG4gICAgICAgICAgICAu6I635Y+W5aSE55CG57uT5p6cKCk7XFxcXG4gICAgICAgIHJldHVybiB0cnVlX3VybDtcXFxcbiAgICB9LFxcXFxuICAgIOaJk+mAoOWIhuexuyhydWxlTGlzdCkge1xcXFxuICAgICAgICAvLyAnMCcg5Li66buY6K6k5LiN5oqY5Y+g77yMJzEnIOS4uum7mOiupOaKmOWPoFxcXFxuICAgICAgICBjb25zdCDlvZPliY3mipjlj6DnirbmgIEgPSBnZXRNeVZhcignaGVhZGVyLmZvbGQnLCAnMScpXFxcXG5cXFxcbiAgICAgICAgLy8g5byV5YWl5Yqo5oCB5YiG57G75L6d6LWWXFxcXG4gICAgICAgIGxldCBodG1sQ2F0ZWdvcmllcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2NhdGVnb3JpZXMtaGVhZGVyP3J1bGU95qih5p2/wrdRJylcXFxcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCl7XFxcXG7CoMKgwqDCoMKgwqDCoCByZXR1cm4gJyMnKygnMDAwMDAnKyhNYXRoLnJhbmRvbSgpKjB4MTAwMDAwMDw8MCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcXFxuwqDCoMKgwqDCoCB9XFxcXG4gICAgICAgIGh0bWxDYXRlZ29yaWVzLueVjOmdoihkKVxcXFxuICAgICAgICAgICAgLy8gLuWIhuexu+mTvuaOpSh0cnVlX3VybClcXFxcbiAgICAgICAgICAgIC7mupDnoIEoaHRtbClcXFxcbiAgICAgICAgICAgIC7pobXnoIEocGFnZSlcXFxcbiAgICAgICAgICAgIC7mt7vliqDliIbnsbvlrprkvY0ocnVsZUxpc3QpXFxcXG4gICAgICAgICAgICAu5byA5ZCv5YaF572u5oqY5Y+g5Yqf6IO9KCkgLy8g5b+F6aG7XFxcXG4gICAgICAgICAgICAu5oqY5Y+gKOW9k+WJjeaKmOWPoOeKtuaAgSkgLy8g5b+F6aG7XFxcXG4gICAgICAgICAgICAu6YCJ5Lit55qE5YiG57G76aKc6ImyKGdldFJhbmdlQ29sb3JzKCkpXFxcXG4gICAgICAgICAvLyAgIC7pgInkuK3nmoTliIbnsbvpopzoibIoJyMwOThBQzEnKVxcXFxuICAgICAgICAgICAgLuW8gOWni+aJk+mAoOWIhuexuygpO1xcXFxuICAgIH0sXFxcXG4gICAg55Sf5oiQ54mH5Y2VKGQsIGh0bWwpIHtcXFxcbiAgICAgICAgbGV0IGxpc3QgPSBwZGZhKGh0bWwsIOWIl+ihqCk7XFxcXG4gICAgICAgIGZvciAobGV0IGogaW4gbGlzdCkge1xcXFxuICAgICAgICAgICAgbGV0IGltZyA9IHBkKGxpc3Rbal0sIOWbvueJhyk7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sIOagh+mimCksXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCDmj4/ov7ApLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nICsgJ0BSZWZlcmVyPScgKyBpbWcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZChsaXN0W2pdLCDpk77mjqUpLnJlcGxhY2UoJ3ZvZHBsYXknLCd2b2RkZXRhaWwnKSArIFxcXFxcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn0pXFxcXG5cXFxcbiQuZXhwb3J0cyA9IG5ldyDkuIDnuqcoKTtcXFxcbiQuZXhwb3J0c1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWKqOaAgeWIhuexuzJcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY2F0ZWdvcmllcy1oZWFkZXJcXFwiLFxcXCJydWxlXFxcIjpcXFwiY29uc3Qgc3ltYm9sTWFwID0ge1xcXFxuICAgIC8vIGNoZWNrUGFyYW1zOiBTeW1ib2woJ2NoZWNrUGFyYW1zJyksXFxcXG4gICAgbUxheW91dDogU3ltYm9sKCdtTGF5b3V0JyksXFxcXG4gICAgdHJ1ZV91cmw6IFN5bWJvbCgndHJ1ZV91cmwnKSxcXFxcbiAgICBtUGFnZTogU3ltYm9sKCdtUGFnZScpLFxcXFxuICAgIHNyYzogU3ltYm9sKCdzcmMnKSxcXFxcbiAgICBydWxlT2JqTGlzdDogU3ltYm9sKCdydWxlT2JqTGlzdCcpLFxcXFxuICAgIG1Gb2xkOiBTeW1ib2woJ21Gb2xkJyksXFxcXG4gICAgbUZvbGRJbm5lckVuYWJsZTogU3ltYm9sKCdtRm9sZElubmVyRW5hYmxlJyksXFxcXG4gICAgbUZvbGRJbmRleDogU3ltYm9sKCdtRm9sZEluZGV4JyksXFxcXG4gICAgbUZvbGRMYXlvdXQ6IFN5bWJvbCgnbUZvbGRMYXlvdXQnKSxcXFxcbiAgICBtQ29sb3I6IFN5bWJvbCgnbUNvbG9yJyksXFxcXG4gICAgbVRhZzogU3ltYm9sKCdtVGFnJyksXFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIENhdGVnb3JpZXNIZWFkZXIoY29sb3IpIHtcXFxcbiAgICAvLyAndXNlIHN0cmljdCc7XFxcXG4gICAgLy8gLi4uXFxcXG4gICAgLy8gdGhpc1tzeW1ib2xNYXAubGlzdFJ1bGVdID0gW11cXFxcbiAgICAvLyB0aGlzW3N5bWJvbE1hcC5zdWJMaXN0UnVsZV0gPSBbXVxcXFxuICAgIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gPSBjb2xvciB8fCBcXFxcXFxcIiNGQTcyOThcXFxcXFxcIjtcXFxcbiAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSBbXVxcXFxuICAgIHRoaXMuVkFSTUFQID0ge1xcXFxuICAgICAgICBDQVRFR09SWTogXFxcXFxcXCJoZWFkZXIuY2F0ZWdvcnlcXFxcXFxcIixcXFxcbiAgICAgICAgVVJMOiBcXFxcXFxcImhlYWRlci51cmxcXFxcXFxcIixcXFxcbiAgICAgICAgRk9MRDogXFxcXFxcXCJoZWFkZXIuZm9sZFxcXFxcXFwiLFxcXFxuICAgIH1cXFxcbiAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0gPSB7XFxcXG4gICAgICAgIGluamVjdEluZGV4OiAxXFxcXG4gICAgfVxcXFxuICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5kZXhdID0gMVxcXFxufVxcXFxuXFxcXG5PYmplY3QuYXNzaWduKENhdGVnb3JpZXNIZWFkZXIucHJvdG90eXBlLCB7XFxcXG4gICAgLy8gT3ZlcnJpZGUg5p6E6YCg5pa55rOV77yM55u45b2T5LqOIGZ1bmN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICguLi4pID0+IHsuLi5977yMbmV3IGZ1bmN0aW9uKCkg55qE5pe25YCZ5Lya6Ieq5Yqo5omn6KGMXFxcXG4gICAgY29uc3RydWN0b3I6IENhdGVnb3JpZXNIZWFkZXIsXFxcXG4gICAgLy8g5a6a5LmJ56eB5pyJ5pa55rOVXFxcXG4gICAgVkVSU0lPTjogMjAyMTEyMDExOTAwLFxcXFxuICAgIGNoZWNrUGFyYW1zKCkge1xcXFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdKSB7XFxcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCLor7fosIPnlKggbGF5b3V0KGQpIOS8oOWFpeW9k+WJjeeVjOmdolxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICghKHRoaXNbc3ltYm9sTWFwLnNyY10gfHwgdGhpc1tzeW1ib2xNYXAudHJ1ZV91cmxdKSkge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+36LCD55SoIHRydWVVcmwodXJsKSDkvKDlhaXlvZPliY3liIbnsbvnmoTpk77mjqXmiJbosIPnlKggaHRtbChtSHRtbCkg5Lyg5YWl5b2T5YmN5YiG57G76aG16Z2i55qE5rqQ56CBXFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tUGFnZV0pIHtcXFxcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFxcXFxcIuivt+iwg+eUqCBwYWdlKG1QYWdlKSDkvKDlhaXlvZPliY3pobXmlbBcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA8IDEpIHtcXFxcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFxcXFxcIuivt+iwg+eUqOebuOWFs+aWueazleS8oOWFpeWumuS9jeinhOWImVxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAubUZvbGRdKSB7XFxcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCdcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgbGF5b3V0KG1MYXlvdXQpIHtcXFxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0gPSBtTGF5b3V0XFxcXG4gICAgICAgIHJldHVybiB0aGlzXFxcXG4gICAgfSxcXFxcbiAgICB0cnVlVXJsKHVybCkge1xcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC50cnVlX3VybF0gPSB1cmxcXFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXFxcbiAgICB9LFxcXFxuICAgIHBhZ2UobVBhZ2UpIHtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiAobVBhZ2UpID09PSAnc3RyaW5nJykge1xcXFxuICAgICAgICAgICAgbVBhZ2UgPSBwYXJzZUludChtUGFnZSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPSBtUGFnZVxcXFxuICAgICAgICByZXR1cm4gdGhpc1xcXFxuICAgIH0sXFxcXG4gICAgaHRtbChtU3JjKSB7XFxcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnNyY10gPSBtU3JjXFxcXG4gICAgICAgIHJldHVybiB0aGlzXFxcXG4gICAgfSxcXFxcbiAgICBsaXN0KHJ1bGUpIHtcXFxcbiAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCJsaXN0KHJ1bGUpIGFkZChydWxlT2JqKSDlj6rog73kuozpgInkuIDvvIFcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSBbe31dXFxcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5saXN0UnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfkuIDnuqfliIbnsbsnXSA9IHJ1bGVcXFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXFxcbiAgICB9LFxcXFxuICAgIHN1Ykxpc3QocnVsZSkge1xcXFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXFxcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFxcXFxcInN1Ykxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdIHx8ICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLmxpc3RSdWxlICYmICF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddKSkge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+35YWI6LCD55SoIGxpc3QocnVsZSkg5oiWIOS4gOe6p+WIhuexuyhydWxlKSDlrprkvY3kuIDnuqfliIbnsbtcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0uc3ViTGlzdFJ1bGUgPSBydWxlXFxcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5a2Q5YiG57G7J10gPSBydWxlXFxcXG4gICAgICAgIHJldHVybiB0aGlzXFxcXG4gICAgfSxcXFxcbiAgICB0aXRsZShydWxlKSB7XFxcXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubGVuZ3RoID4gMSkge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwidGl0bGUocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdIHx8ICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLmxpc3RSdWxlICYmICF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddKSkge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+35YWI6LCD55SoIGxpc3QocnVsZSkg5oiWIOS4gOe6p+WIhuexuyhydWxlKSDlrprkvY3kuIDnuqfliIbnsbtcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0udGl0bGVSdWxlID0gcnVsZVxcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+WIhuexu+agh+mimCddID0gdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnRpdGxlUnVsZVxcXFxuICAgICAgICByZXR1cm4gdGhpc1xcXFxuICAgIH0sXFxcXG4gICAgdXJsKHJ1bGUpIHtcXFxcbiAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5sZW5ndGggPiAxKSB7XFxcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCJ1cmwocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdIHx8ICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLmxpc3RSdWxlICYmICF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddKSkge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+35YWI6LCD55SoIGxpc3QocnVsZSkg5oiWIOS4gOe6p+WIhuexuyhydWxlKSDlrprkvY3kuIDnuqfliIbnsbtcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0udXJsUnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfliIbnsbvpk77mjqUnXSA9IHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS51cmxSdWxlXFxcXG4gICAgICAgIHJldHVybiB0aGlzXFxcXG4gICAgfSxcXFxcbiAgICAvKipcXFxcbiAgICAgKiDmmK/lkKblvIDlkK/mipjlj6Dlip/og71cXFxcbiAgICAgKlxcXFxuICAgICAqIEBwYXJhbSBlbmFibGVkIHRydWUg6KGo56S65byA5ZCv77yMZmFsc2Ug6KGo56S656aB55SoXFxcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxcXG4gICAgICovXFxcXG4gICAgZm9sZElubmVyKGVuYWJsZWQpIHtcXFxcbiAgICAgICAgaWYgKCEodHlwZW9mIChlbmFibGVkKSA9PT0gJ2Jvb2xlYW4nKSkge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+35Lyg5YWlIHRydWUg5oiWIGZhbHNlIOihqOekuuW8gOWQr+aIluWFs+mXreaKmOWPoOWKn+iDve+8gVxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5uZXJFbmFibGVdID0gZW5hYmxlZFxcXFxuICAgICAgICByZXR1cm4gdGhpc1xcXFxuICAgIH0sXFxcXG4gICAgLyoqXFxcXG4gICAgICog5LuO56ysIGluZGV4IOihjOW8gOWni+aKmOWPoFxcXFxuICAgICAqXFxcXG4gICAgICogQHBhcmFtIGluZGV4IOW8gOWni+aKmOWPoOeahOihjOaVsFxcXFxuICAgICAqIEByZXR1cm5zIHtDYXRlZ29yaWVzSGVhZGVyfVxcXFxuICAgICAqL1xcXFxuICAgIGZvbGRJbmRleChpbmRleCkge1xcXFxuICAgICAgICBpZiAoISh0eXBlb2YgKGluZGV4KSA9PT0gJ251bWJlcicpKSB7XFxcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCLlvIDlp4vmipjlj6DooYzor7fkvKDlhaXmlbDlrZfvvIFcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoaW5kZXggPCAxKSB7XFxcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCLlvIDlp4vmipjlj6DooYzor7fkvKDlhaXlpKfkuo4gMCDnmoTmlbTmlbDvvIFcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZEluZGV4XSA9IGluZGV4IHx8IDE7XFxcXG4gICAgICAgIHJldHVybiB0aGlzXFxcXG4gICAgfSxcXFxcbiAgICAvKipcXFxcbiAgICAgKiDmipjlj6DmjInpkq7nmoTnlYzpnaJcXFxcbiAgICAgKlxcXFxuICAgICAqIEBwYXJhbSBsYXlvdXQg5LiOIGQucHVzaCDnu5PmnoTkuIDoh7TvvIxcXFxcbiAgICAgKiAgICAgICAg5L6L77yaeyB0aXRsZTpcXFxcXFxcIuagh+mimDFcXFxcXFxcIiwgdXJsOlxcXFxcXFwieHh4XFxcXFxcXCIsIGNvbF90eXBlOlxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiIH07XFxcXG4gICAgICogICAgICAgIOWPguaVsOmHh+eUqOWPr+mAieimhuebluaooeW8j++8jOS4jeWGmeeahOWPguaVsOWImeS9v+eUqOm7mOiupDtcXFxcbiAgICAgKiAgICAgICAg5q+U5aaC5Lyg5YWlIHsgY29sX3R5cGU6XFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIiB977yM6YKj5pyA57uI57uT5p6c5bCx5pivIHsgdGl0bGU6XFxcXFxcXCLmoIfpopgxXFxcXFxcXCIsIHVybDpcXFxcXFxcInh4eFxcXFxcXFwiLCBjb2xfdHlwZTpcXFxcXFxcInRleHRfMVxcXFxcXFwiIH1cXFxcbiAgICAgKiBAcmV0dXJucyB7Q2F0ZWdvcmllc0hlYWRlcn1cXFxcbiAgICAgKi9cXFxcbiAgICBmb2xkTGF5b3V0KGxheW91dCkge1xcXFxuICAgICAgICBpZiAodHlwZW9mIGxheW91dCA9PT0gJ29iamVjdCcpIHtcXFxcbiAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMobGF5b3V0KVxcXFxuICAgICAgICAgICAgbGV0IGluamVjdEluZGV4ID0gbGF5b3V0LmluamVjdEluZGV4IHx8IGxheW91dFsn5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGMJ11cXFxcbiAgICAgICAgICAgIGlmIChsYXlvdXQudGl0bGUgfHwgbGF5b3V0LnVybCB8fCBsYXlvdXQuY29sX3R5cGUgfHwgaW5qZWN0SW5kZXgpIHtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxcXFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF1ba2V5XSA9IGxheW91dFtrZXldO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+35Lyg5YWl5q2j56Gu55qE5oqY5Y+g55WM6Z2i5YWD57Sg77yBXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAvLyBpbmplY3RJbmRleCDmipjlj6DmjInpkq7mj5LlhaXnrKwgaW5qZWN0SW5kZXgg6KGMXFxcXG4gICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXgpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGluamVjdEluZGV4KSA9PT0gJ251bWJlcicpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFxcXFxcIuaKmOWPoOaMiemSruaPkuWFpeihjOivt+S8oOWFpeaVsOWtl++8gVxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXggPCAxKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFxcXFxcIuaKmOWPoOaMiemSruaPkuWFpeihjOivt+S8oOWFpeWkp+S6jiAwIOeahOaVtOaVsO+8gVxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXggPiB0aGlzW3N5bWJvbE1hcC5tRm9sZEluZGV4XSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCLmipjlj6DmjInpkq7mj5LlhaXooYzkuI3lvpflpKfkuo7mmL7npLrmipjlj6DooYzmlbDvvIHor7fosIPnlKggLmZvbGRJbmRleChpbmRleCkg5oiWIC7nrKzlh6DooYzlvIDlp4vmipjlj6AoaW5kZXgpIOS8oOWFpeato+ehrueahOaYvuekuuaKmOWPoOihjOaVsFxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0uaW5qZWN0SW5kZXggPSBpbmplY3RJbmRleCB8fCAxO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+35Lyg5YWl5q2j56Gu55qE5oqY5Y+g55WM6Z2i5YWD57Sg77yBXFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxcXG4gICAgfSxcXFxcbiAgICAvLyDlvZPliY3mmK/lkKbmipjlj6BcXFxcbiAgICBmb2xkKGlzRm9sZCkge1xcXFxuICAgICAgICBpZiAodHlwZW9mIChpc0ZvbGQpID09PSAnc3RyaW5nJykge1xcXFxuICAgICAgICAgICAgaXNGb2xkID0gaXNGb2xkID09PSAnMSdcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoaXNGb2xkKSB7XFxcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMSc7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXFxcbiAgICB9LFxcXFxuICAgIGNvbG9yKG1Db2xvcikge1xcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tQ29sb3JdID0gbUNvbG9yXFxcXG4gICAgICAgIHJldHVybiB0aGlzXFxcXG4gICAgfSxcXFxcbiAgICB0YWcobVRhZykge1xcXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tVGFnXSA9IG1UYWdcXFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXFxcbiAgICB9LFxcXFxuICAgIGFkZChydWxlT2JqKSB7XFxcXG4gICAgICAgIC8vIGxvZygkLnN0cmluZ2lmeShydWxlT2JqKSlcXFxcbiAgICAgICAgaWYgKHJ1bGVPYmouY29uc3RydWN0b3IgPT09IEFycmF5KSB7XFxcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0uY29uY2F0KHJ1bGVPYmopXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ucHVzaChydWxlT2JqKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiB0aGlzO1xcXFxuICAgIH0sXFxcXG4gICAgZXZhbEpTUnVsZShpdGVtLCBqc1J1bGUpIHtcXFxcbiAgICAgICAgbGV0IHJ1bGUgPSBqc1J1bGUucmVwbGFjZShcXFxcXFxcIkBqczpcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIilcXFxcbiAgICAgICAgcnVsZSA9IHJ1bGUudHJpbSgpXFxcXG4gICAgICAgIC8vIGxvZygkLnN0cmluZ2lmeShydWxlKSlcXFxcbiAgICAgICAgbGV0IGlucHV0ID0gaXRlbVxcXFxuICAgICAgICBpZiAocnVsZS5zdGFydHNXaXRoKFxcXFxcXFwiKFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgZXZhbCgncmVzdWx0ID0gJyArIHJ1bGUpXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAvKipcXFxcbiAgICAgICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcXFxuICAgICAgICAgICAgICovXFxcXG4gICAgICAgICAgICBldmFsKCdyZXN1bHQgPSAnICsgJygoKSA9PiB7JyArIHJ1bGUgKyAnfSkoKScpXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIChyZXN1bHQgfHwgJycpXFxcXG4gICAgfSxcXFxcbiAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxcXG4gICAgICAgIGxldCB0aXRsZSA9ICcnXFxcXG4gICAgICAgIGxldCB0aXRsZVJ1bGUgPSBjYXRlZ29yeS50aXRsZVJ1bGUgfHwgJ2EmJlRleHQnXFxcXG4gICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFxcXFxcIkBqczpcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdGl0bGVSdWxlKVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoc3JjLCB0aXRsZVJ1bGUpXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgfSxcXFxcbiAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcXFxuICAgICAgICBsZXQgdXJsID0gJydcXFxcbiAgICAgICAgbGV0IHVybFJ1bGUgPSBjYXRlZ29yeS51cmxSdWxlIHx8ICdhJiZocmVmJ1xcXFxuICAgICAgICBpZiAodHlwZW9mIHVybFJ1bGUgPT09ICdvYmplY3QnKSB7XFxcXG4gICAgICAgICAgICBsZXQgbVVybFJ1bGUgPSB1cmxSdWxlLnJ1bGUgfHwgdXJsUnVsZVsn6Kej5p6Q6KeE5YiZJ10gfHwgJ2EmJmhyZWYnO1xcXFxuICAgICAgICAgICAgaWYgKG1VcmxSdWxlLnN0YXJ0c1dpdGgoXFxcXFxcXCJAanM6XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgbVVybFJ1bGUpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2UgPSBwYXJzZURvbTtcXFxcbiAgICAgICAgICAgICAgICBpZiAodXJsUnVsZS5wYXJzZU9wdGlvbikge1xcXFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVybFJ1bGUucGFyc2VPcHRpb24pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJwYXJzZURvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInBkXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJwYXJzZURvbUZvckh0bWxcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJwZGZoXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbUZvckh0bWw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbXFxcXFxcXCLop6PmnpDmlrnms5VcXFxcXFxcIl0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh1cmxSdWxlW1xcXFxcXFwi6Kej5p6Q5pa55rOVXFxcXFxcXCJdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwicGFyc2VEb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJwZFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwicGFyc2VEb21Gb3JIdG1sXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwicGRmaFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb21Gb3JIdG1sO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlRG9tO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHVybCA9IHBhcnNlKHNyYywgbVVybFJ1bGUpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuZGVhbFVybCkge1xcXFxuICAgICAgICAgICAgICAgIHVybCA9IHVybFJ1bGUuZGVhbFVybCh1cmwpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKSB7XFxcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsUnVsZVsn5LqM5qyh5aSE55CGJ10odXJsKVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuc3RhcnRzV2l0aChcXFxcXFxcIkBqczpcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdXJsID0gcGFyc2VEb20oc3JjLCB1cmxSdWxlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gdXJsIHx8IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgfSxcXFxcbiAgICBidWlsZCgpIHtcXFxcbiAgICAgICAgLy8g5qOA5rWL5piv5ZCm5Lyg5YWl6ZyA6KaB55qE5Y+C5pWwXFxcXG4gICAgICAgIHRoaXMuY2hlY2tQYXJhbXMoKVxcXFxuICAgICAgICAvLyDmr4/kuIDkuKrliIbnsbvnmoTllK/kuIDmoIfor4ZcXFxcbiAgICAgICAgbGV0IG1UYWcgPSB0aGlzW3N5bWJvbE1hcC5tVGFnXSB8fCBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgICAgIC8v57+76aG1IOmcgOimgeagueaNruWunumZheabv+aNolxcXFxuICAgICAgICBjb25zdCBodG1sID0gdGhpc1tzeW1ib2xNYXAuc3JjXSB8fCByZXF1ZXN0KHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSlcXFxcbiAgICAgICAgY29uc3QgZW1wdHkgPSBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAvL+iOt+WPluWIl+ihqFxcXFxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW11cXFxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLm1hcChydWxlT2JqID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBsaXN0ID0gW11cXFxcbiAgICAgICAgICAgIGxldCBsaXN0UnVsZSA9IHJ1bGVPYmoubGlzdFJ1bGUgfHwgcnVsZU9ialtcXFxcXFxcIuS4gOe6p+WIhuexu1xcXFxcXFwiXVxcXFxuICAgICAgICAgICAgaWYgKGxpc3RSdWxlLnN0YXJ0c1dpdGgoXFxcXFxcXCJAanM6XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8gbG9nKCQuc3RyaW5naWZ5KGxpc3RSdWxlKSlcXFxcbiAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIGxpc3RSdWxlKVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCBsaXN0UnVsZSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIC8vIGxvZyhsaXN0KVxcXFxuICAgICAgICAgICAgbGlzdC5tYXAoY2F0ZWdvcnkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxpc3Q6IGNhdGVnb3J5LFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJMaXN0UnVsZTogcnVsZU9iai5zdWJMaXN0UnVsZSB8fCBydWxlT2JqW1xcXFxcXFwi5a2Q5YiG57G7XFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVJ1bGU6IHJ1bGVPYmoudGl0bGVSdWxlIHx8IHJ1bGVPYmpbXFxcXFxcXCLliIbnsbvmoIfpophcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybFJ1bGU6IHJ1bGVPYmoudXJsUnVsZSB8fCBydWxlT2JqW1xcXFxcXFwi5YiG57G76ZO+5o6lXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcblxcXFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkoY2F0ZWdvcmllcykpXFxcXG5cXFxcbiAgICAgICAgbGV0IGluaXRfY2F0ZSA9IFtdXFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcXFxuICAgICAgICAgICAgaW5pdF9jYXRlLnB1c2goXFxcXFxcXCIwXFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBjb25zdCBjYXRlX3RlbXBfanNvbiA9IGdldE15VmFyKG1UYWcgKyB0aGlzLlZBUk1BUC5DQVRFR09SWSwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXFxcbiAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXFxcblxcXFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAubVBhZ2VdID09PSAxKSB7XFxcXG5cXFxcbiAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAvLyDmipjlj6AgVUlcXFxcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAubUZvbGRJbm5lckVuYWJsZV0gJiYgdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLmluamVjdEluZGV4ID09PSAoaW5kZXgrMSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvbGRMYXlvdXQgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLnRpdGxlIHx8ICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcxJyA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjRkYwMDAwXFxcXFxcXCI+4oioPC9zcGFuPjwvYj4nIDogJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxYWFkMTlcXFxcXFxcIj7iiKc8L3NwYW4+PC9iPicpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0udXJsIHx8ICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFxcXFxcIikubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5tVGFnICsgcGFyYW1zLlZBUk1BUC5GT0xELCBnZXRNeVZhcihwYXJhbXMubVRhZyArIHBhcmFtcy5WQVJNQVAuRk9MRCwgcGFyYW1zLmlzRm9sZCkgPT09ICcxJyA/ICcwJyA6ICcxJylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRhZzogbVRhZyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZvbGQ6IHRoaXNbc3ltYm9sTWFwLm1Gb2xkXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0uY29sX3R5cGUgfHwgXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaChmb2xkTGF5b3V0KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgICAgIC8v5YW35L2T5YiX6KGo5LiL55qE5YiG57G7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxcXG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LnN1Ykxpc3RSdWxlLnN0YXJ0c1dpdGgoXFxcXFxcXCJAanM6XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gdGhpcy5ldmFsSlNSdWxlKGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGFyc2VEb21Gb3JBcnJheShjYXRlZ29yeS5saXN0LCBjYXRlZ29yeS5zdWJMaXN0UnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8ICh0aGlzW3N5bWJvbE1hcC5tRm9sZEluZGV4XSB8fCAxKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgY2F0ZWdvcnkpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgY2F0ZWdvcnkpXFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0nICsgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSArICc+JyArIHRpdGxlICsgJyA8L2ZvbnQ+PC9iPicgOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaW5kZXggPT09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcXFxcXCIwXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy50YWcgKyBwYXJhbXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuaW5kZXggPT09IDAgPyBuZXdfY2F0ZSA6IHBhcmFtcy5jYXRlX3RlbXApKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5VUkwsIGlucHV0KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBUk1BUDogdGhpcy5WQVJNQVAsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogbVRhZyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXNbc3ltYm9sTWFwLm1QYWdlXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJibGFua19ibG9ja1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpc1tzeW1ib2xNYXAubUZvbGRdID09PSAnMCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGl0ZW0sIGNhdGVnb3J5KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2V0VXJsKGl0ZW0sIGNhdGVnb3J5KVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XS5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9JyArIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gKyAnPicgKyB0aXRsZSArICcgPC9mb250PjwvYj4nIDogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5DQVRFR09SWSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy50YWcgKyBwYXJhbXMuVkFSTUFQLlVSTCwgaW5wdXQpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSTUFQOiB0aGlzLlZBUk1BUCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBtVGFnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpc1tzeW1ib2xNYXAubVBhZ2VdLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XS5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImJsYW5rX2Jsb2NrXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuXFxcXG4gICAg55WM6Z2iKGxheW91dCkge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQobGF5b3V0KVxcXFxuICAgIH0sXFxcXG4gICAg5YiG57G76ZO+5o6lKHRydWVVcmwpIHtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ1ZVVybCh0cnVlVXJsKTtcXFxcbiAgICB9LFxcXFxuICAgIOmhteeggShwYWdlKSB7XFxcXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UocGFnZSk7XFxcXG4gICAgfSxcXFxcbiAgICDmupDnoIEoaHRtbCkge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5odG1sKGh0bWwpO1xcXFxuICAgIH0sXFxcXG4gICAg5a6a5L2N5LiA57qn5YiG57G7KGxpc3QpIHtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdChsaXN0KTtcXFxcbiAgICB9LFxcXFxuICAgIOWumuS9jeWtkOWIhuexuyhzdWJMaXN0KSB7XFxcXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ykxpc3Qoc3ViTGlzdCk7XFxcXG4gICAgfSxcXFxcbiAgICDlrprkvY3liIbnsbvmoIfpopgodGl0bGUpIHtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGUodGl0bGUpO1xcXFxuICAgIH0sXFxcXG4gICAg5a6a5L2N5YiG57G76ZO+5o6lKHVybCkge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy51cmwodXJsKTtcXFxcbiAgICB9LFxcXFxuICAgIOW8gOWQr+WGhee9ruaKmOWPoOWKn+iDvSgpIHtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZElubmVyKHRydWUpO1xcXFxuICAgIH0sXFxcXG4gICAg5YWz6Zet5YaF572u5oqY5Y+g5Yqf6IO9KCkge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkSW5uZXIoZmFsc2UpO1xcXFxuICAgIH0sXFxcXG4gICAg56ys5Yeg6KGM5byA5aeL5oqY5Y+gKGluZGV4KSB7XFxcXG4gICAgICAgIHJldHVybiB0aGlzLmZvbGRJbmRleChpbmRleCk7XFxcXG4gICAgfSxcXFxcbiAgICDmipjlj6DmjInpkq7moLflvI8obGF5b3V0KSB7XFxcXG4gICAgICAgIHJldHVybiB0aGlzLmZvbGRMYXlvdXQobGF5b3V0KVxcXFxuICAgIH0sXFxcXG4gICAg5oqY5Y+gKGZvbGQpIHtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZChmb2xkKTtcXFxcbiAgICB9LFxcXFxuICAgIOmAieS4reeahOWIhuexu+minOiJsihjb2xvcikge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcihjb2xvcik7XFxcXG4gICAgfSxcXFxcbiAgICDllK/kuIDmoIfor4YobVRhZykge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy50YWcobVRhZylcXFxcbiAgICB9LFxcXFxuICAgIOa3u+WKoOWIhuexu+WumuS9jShydWxlT2JqKSB7XFxcXG4gICAgICAgIHJldHVybiB0aGlzLmFkZChydWxlT2JqKTtcXFxcbiAgICB9LFxcXFxuICAgIOW8gOWni+aJk+mAoOWIhuexuygpIHtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGQoKTtcXFxcbiAgICB9LFxcXFxuXFxcXG59KVxcXFxuJC5leHBvcnRzID0gbmV3IENhdGVnb3JpZXNIZWFkZXIoKTtcXFxcbiQuZXhwb3J0c1xcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6ZO+5o6l5aSE55CG5bel5YW3XFxcIixcXFwicGF0aFxcXCI6XFxcInVybC1wcm9jZXNzb3JcXFwiLFxcXCJydWxlXFxcIjpcXFwiLyoqXFxcXG4gKiDmnKzlnLDnvZHpobXmj5Lku7bpk77mjqUgaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy9VcmxQcm9jZXNzb3IuanNcXFxcbiAqIOWtkOmhtemdoumTvuaOpSBoaWtlcjovL3BhZ2UvdXJsLXByb2Nlc3NvclxcXFxuICog6YGT6ZW/5LuT5bqT6ZO+5o6lIGh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI4NDlcXFxcbiAqIOeggeS6kSBHaXRlZSDpk77mjqUgaHR0cHM6Ly9naXRlZS5jb20vcmVib3JuMC9IaWtlclJ1bGVzL3Jhdy9tYXN0ZXIvcGx1Z2lucy9VcmxQcm9jZXNzb3IuanNcXFxcbiAqL1xcXFxuZnVuY3Rpb24gVXJsUHJvY2Vzc29yKCkge1xcXFxuICAgIHRoaXMucGFyYW1zID0ge31cXFxcbiAgICB0aGlzLnJlZ2V4TWFwID0gW1xcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICByZWc6ICcodm9kdHlwZXx2aWRlb3QpXFxcXFxcXFxcXFxcXFxcXC9cXFxcXFxcXFxcXFxcXFxcdysnLFxcXFxuICAgICAgICAgICAgZXhlYzogKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy51cmxcXFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLy1cXFxcXFxcXGQrLmh0bWwvLCAnLScgKyB0aGlzLnBhcmFtcy5wYWdlICsgJy5odG1sJylcXFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygodm9kdHlwZXx2aWRlb3QpXFxcXFxcXFwvXFxcXFxcXFx3KykuaHRtbC8sICckMS0nICsgdGhpcy5wYXJhbXMucGFnZSArICcuaHRtbCcpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIHJlZzogJ1xcXFxcXFxcXFxcXFxcXFwvP1tcXFxcXFxcXFxcXFxcXFxcd1xcXFxcXFxcXFxcXFxcXFxkXSstLio/LS4qPy0uKj8tLio/LS4qPy0uKj8tLio/LVxcXFxcXFxcXFxcXFxcXFxkKi0tLVxcXFxcXFxcXFxcXFxcXFxkKi5odG1sJyxcXFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXGQqKC0tLS5odG1sKS8sIHRoaXMucGFyYW1zLnBhZ2UgKyAnJDEnKVxcXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKC0tLVxcXFxcXFxcZCsuaHRtbCkvLCB0aGlzLnBhcmFtcy5wYWdlICsgJyQxJyk7IC8vIOaLvOaOpemhteeggVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICByZWc6ICcoKFxcXFxcXFxcXFxcXFxcXFwvdm9kXFxcXFxcXFxcXFxcXFxcXC9zaG93KT8oXFxcXFxcXFxcXFxcXFxcXC9hcmVhXFxcXFxcXFxcXFxcXFxcXC9bXFxcXFxcXFxcXFxcXFxcXHdcXFxcXFxcXFxcXFxcXFxcZCVdKyk/KFxcXFxcXFxcXFxcXFxcXFwvYnlcXFxcXFxcXFxcXFxcXFxcL1tcXFxcXFxcXFxcXFxcXFxcd1xcXFxcXFxcXFxcXFxcXFxkJV0rKT8oXFxcXFxcXFxcXFxcXFxcXC9pZFxcXFxcXFxcXFxcXFxcXFwvXFxcXFxcXFxcXFxcXFxcXGQrKT8oXFxcXFxcXFxcXFxcXFxcXC9sZXR0ZXJcXFxcXFxcXFxcXFxcXFxcL1tcXFxcXFxcXFxcXFxcXFxcd1xcXFxcXFxcXFxcXFxcXFxkJV0rKT8pKFxcXFxcXFxcXFxcXFxcXFwvcGFnZVxcXFxcXFxcXFxcXFxcXFwvXFxcXFxcXFxcXFxcXFxcXGQrKT8oXFxcXFxcXFxcXFxcXFxcXC95ZWFyXFxcXFxcXFxcXFxcXFxcXC9cXFxcXFxcXFxcXFxcXFxcZCspP1xcXFxcXFxcXFxcXFxcXFwuaHRtbCcsXFxcXG4gICAgICAgICAgICBleGVjOiAoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHJlZ0V4cCA9IC8oKFxcXFxcXFxcL3ZvZFxcXFxcXFxcL3Nob3cpPyhcXFxcXFxcXC9hcmVhXFxcXFxcXFwvW1xcXFxcXFxcd1xcXFxcXFxcZCVdKyk/KFxcXFxcXFxcL2J5XFxcXFxcXFwvW1xcXFxcXFxcd1xcXFxcXFxcZCVdKyk/KFxcXFxcXFxcL2lkXFxcXFxcXFwvXFxcXFxcXFxkKyk/KFxcXFxcXFxcL2xldHRlclxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPykoXFxcXFxcXFwvcGFnZVxcXFxcXFxcL1xcXFxcXFxcZCspPyhcXFxcXFxcXC95ZWFyXFxcXFxcXFwvXFxcXFxcXFxkKyk/XFxcXFxcXFwuaHRtbC9cXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKHJlZ0V4cCwgJyQxJyArIChcXFxcXFxcIi9wYWdlL1xcXFxcXFwiICsgdGhpcy5wYXJhbXMucGFnZSkgKyAnJDgnICsgXFxcXFxcXCIuaHRtbFxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgXVxcXFxufVxcXFxuXFxcXG5PYmplY3QuYXNzaWduKFVybFByb2Nlc3Nvci5wcm90b3R5cGUsIHtcXFxcbiAgICBjb25zdHJ1Y3RvcjogVXJsUHJvY2Vzc29yLFxcXFxuICAgIGNoZWNrUGFyYW1zKCkge1xcXFxuICAgICAgICBpZiAoIXRoaXMucGFyYW1zLnVybCkge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+35YWI6LCD55SoIC5iYXNlVXJsKHVybCkg5Lyg5YWl6ZO+5o6l6L+b6KGM5Yid5aeL5YyWIVxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICghdGhpcy5wYXJhbXMucGFnZSkge1xcXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwi6K+35YWI6LCD55SoIC5wYWdlKHBhZ2UpIOS8oOWFpemhteeggei/m+ihjOWIneWni+WMliFcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgYmFzZVVybCh1cmwpe1xcXFxuICAgICAgICB0aGlzLnBhcmFtcy51cmwgPSB1cmxcXFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXFxcbiAgICB9LFxcXFxuICAgIHBhZ2UocGFnZSl7XFxcXG4gICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSBwYWdlXFxcXG4gICAgICAgIHJldHVybiB0aGlzXFxcXG4gICAgfSxcXFxcbiAgICBhZGRFeHRyYShyZWdFeHApIHtcXFxcbiAgICAgICAgaWYgKHJlZ0V4cC5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcXFxcbiAgICAgICAgICAgIHRoaXMucmVnZXhNYXAgPSB0aGlzLnJlZ2V4TWFwLmNvbmNhdChyZWdFeHApXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB0aGlzLnJlZ2V4TWFwLnB1c2gocmVnRXhwKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiB0aGlzO1xcXFxuICAgIH0sXFxcXG4gICAgZGVidWcoKSB7XFxcXG4gICAgICAgIHRoaXMucGFyYW1zLmRlYnVnID0gdHJ1ZVxcXFxuICAgICAgICByZXR1cm4gdGhpcztcXFxcbiAgICB9LFxcXFxuICAgIGV4ZWMoKSB7XFxcXG4gICAgICAgIHRoaXMuY2hlY2tQYXJhbXMoKVxcXFxuICAgICAgICBsZXQgdHJ1ZV91cmwgPSAnJ1xcXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVnZXhNYXAubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGxldCByZWdPYmogPSB0aGlzLnJlZ2V4TWFwW2ldO1xcXFxuICAgICAgICAgICAgbGV0IHVybEV4cCA9IHJlZ09iai5yZWc7XFxcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybEV4cCA9PT0gJ3N0cmluZycpIHtcXFxcbiAgICAgICAgICAgICAgICB1cmxFeHAgPSBuZXcgUmVnRXhwKHVybEV4cClcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmICh1cmxFeHAudGVzdCh0aGlzLnBhcmFtcy51cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyYW1zLmRlYnVnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1cmxFeHAudG9TdHJpbmcoKSlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdHJ1ZV91cmwgPSByZWdPYmouZXhlYygpO1xcXFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh0cnVlX3VybCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRydWVfdXJsO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICDojrflj5blpITnkIbnu5PmnpwoKSB7XFxcXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWMoKVxcXFxuICAgIH0sXFxcXG4gICAg6ZO+5o6lKHVybCkge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsKHVybClcXFxcbiAgICB9LFxcXFxuICAgIOmhteeggShwYWdlKSB7XFxcXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UocGFnZSlcXFxcbiAgICB9LFxcXFxuICAgIOaPkuWFpeaWsOWkhOeQhuinhOWImShyZWdFeHApIHtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRXh0cmEocmVnRXhwKVxcXFxuICAgIH0sXFxcXG4gICAg6LCD6K+V5qih5byPKCkge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5kZWJ1ZygpO1xcXFxuICAgIH1cXFxcbn0pXFxcXG4kLmV4cG9ydHM9bmV3IFVybFByb2Nlc3NvcigpXFxcXG4kLmV4cG9ydHNcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWHveaVsFxcXCIsXFxcInBhdGhcXFwiOlxcXCJqeGhzXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBmZnR0ID0gJ013OGdpeUgxQ3FuVHozQjdWSGo3TVR6dmN1WElFcmdyMUQvUHVnRm1oT1d2RjZXVG5LVjU0TTF1VWNrTWx4bkxJVU1iWjdGaXFnTHVSV2Nid0dYaGIrNjdmU01CZHo1VnNmNnpQMWR2OWY0aFF4dG5zV0txQXU1Rlp4dkFaZUZ2OGtpK0FaUHZOc2QvMEpWUkJqVUhDNVFtdENrVmhsTS9rcG4vQkZXdFJyMEgvWkhRUXE0bDRKRE56WG5NWEEwbXl5dkxTTlpXYy9zSW4vdldTQUhVOWtBYmpVNHFTWnNTQXU5YnkwYk13ZENQRHNVNHBwc2tVMzlyQlNQRk5EQnpZeXZYc0pocnp0YWFibmV4V3o2NWNwY3gvSDM0bEVDanVwUDBvTENrbU9ETzRXWlhpMUMyR25BQStoMUk3WURkeXl2TFNOWldjL3NJbi92V1NBSFU5a0JVdjdnZDFRajVvUmFDVVU3cjJJMG1tRmFvRDNROVJwRGhtU2VueFVFSVA3K3pVVTFRVzAvMHl2U0tPTEQvd3JaRVZVY2E3bEQwbWZubUh1Q09QTGcxN1FDQzZ5SjlxSWN4bzNSaC9ZRk1QS2lCMXhvZUROY0NEOTdDczhRQndoZGJ1eDZ4ei9IdE9TbE1HdHU5L0FXbnI1dEkzYVg1K3g4VmNDVndKL3krU1h1OStsOTdXN0tjQVR5RS9BNGZ5OTYzWGdKWTJ6UzQ4RExTL2tpQlUzUTg3M0xseUJLNEs5US96N29CWm9UbGVwWXpkNmJuaHpLZ0RCajUvZlgxc0RLSEFCSXlNczRQcURCeTFFcG16dTNjWFJ2UEdGajF4bWc0c1lUdy9FcGF5eXZMU05aV2Mvc0luL3ZXU0FIVTlxcFJZd1BTVmFlazBTUStMb1ByR1AxMjhhRXFzc2lQSnJYWElHbllzeTNNbXdlUGU0MUhUSTZNaEpsQVZkK0YxVWtZN3dMVG5MNFFTN0dQSnNCdnZmWXAxeFdjZ1ZxRFdrUjdHb05PT01Od295Unk4Yk1QVFpKMnhlcVZDRWhYeUw0Q3N1cWJpbk5YZGRxb2xvWWVBT2txelZrWEQvVlM5MDNmQjJsRHVuMHBqVnpuSE5KUUZoZ2lhNlFMcTJxWmc5VStTVk9pWE95VmcybE5vdklOV3VXZmhjNytUeTdqWHpSNENYQXJjVXIySXRkdHpRdmo0QTAyMjladEJBWGoxQjJrOG9jbUNiVzErZko0K3hKVE9FZW5uQWVNMHpCTDdaZStXOU1GWnI5RW9PZW9Ub3E3VkVxbVVFQmRwS3dRenBzR3RHajlPTHlzMjY0aENJRjhGYzRkSWVPTndoUmp1VWkxTGZwbTJpMHN3SGVsRDFsb0Vlc0N5RDUwMUg3Ull6Q0ZtUHZuOHpuZXdwaGZiTkdBNUpQL2Z4b1JyU053K0pub09DU2dMdUpVZy8vWFN2RFVXTkNrNElHcjVZWFRPU3VPS0xldUxuY1o1MEg4SlJVN2ZDWT0nO1xcXFxudmFyIHNzeXogPSAnVGxvR25uaWtUaHJmcy81ZkRObGs1Q1NzYmFHdEFIN1cvdU1aanVZb0l1cEI2YkNvbzlDb3RMUUhmUElkR2dia2J5bktxTDJhVUUyWHk1NThYMlF4SFl0VFUwOXZEKzRvYUNESXVTWk83bnhEYkxmUkdmV2o3enFsK3lNYnZGK2FKb0QvbTZQc2Z3L1B5WU9BcC9aVkdkclB6YUNCeWZkMEhMNURGVlN3K1lGMk9DNDBWOFNQOVJ4ZEZLS2RyQnVQeENXZHhVQ0ZySisxbFJ5L1RVM0xDODRDNHh4RUJoZ3VkN1J0QnAwelpBcnFCRTA2K1ozSnREUDBlRkN6L0Q1WDA0MDlxUEhLM2UxeS9MdVVnY2N1eHBIbmpZTEUxR2psUDh3WUEyaFFXZTd5UG5nZ2dRQkh3MzMvZ3ZiM3R1Q2N4RUtUV2dtYWgvUjMyQUg5WkY4akY3V2VtVDI2bFVpelZYZS9zcENkaERnSFIvelVoT0RENFBPNmdsSThKUGhkdStWd2ZQeVJMRzJEN0NVbzFMNlNJRiswZllmMG9UT1dOMTNVUElUbzUrdVpkL1duUVFMVThOWXgvV0ZDVGhFbmtiemxuOVlHdDYwZlJ4c0grOHVNREZnYUJpQyt6MlNwY3hCOWdaNkdYeXBMU1hXYWorcUVVYkdKS0V4K2pLL3Y1Zm5ya0loQ2R3TmJrcDlkUmtzNmRtbFlsQmlmem9XRjhSa3VDM3JxUHRvU2NCa01PTVp1N0dpVnRvSEVkSFVvem1uVUlkclUxTEdJcXE5V25HN1gyYTN5SDhzNjVtakx1TG5kM3EwVTh2K0xNUG5ITDIvR2pRdVRRS1ZoK1JLRVBxSy9KZHJDaEdMTnJqY0h2TEhEYkhFc2hyR1p1UU9kRXBoYngvUGtoa3ZhWXk0SzFNTzg0UjE3Z3VSc0tzL1Y2bmlVUGFMK1hiUTdjM2ZxSlM0VkhKd2x1ZEpURGUwMmV1ZmZHQ20wUEpJUGxBT2dMSG5YMGl6SmhBNnE3MzhSMlV3UWNXQlFqSnQ3OWFGK2t5cVNkeXQxUVBWUVZqYUMzSXBSZjdQZ3NEaEVKN2JpOW5TY2x5SXpnSjlEQ0o0VCs4ZEcxeEhoS3laYXNUN0wveDlMZnIxTWdzOG5CWkVSMlc5YXg3aVRrTksrWDVBQ1UvL3AvWW9QL3VBYW5EdGIzRDBpS1VVdVhGSCtKYmIweDFQMzIyUzJ3NkJKNDZudU5IQk1IVHBWdVd3aFplWnpyaUdoN3FvT3l3TFdpRXhCTUt5eFRHTG5tS2g3cjAzL3lYS1lXSUpucEJOMk1NeWNWSFJaSjdSdW1IVjRDSXNWcnE3aVJQNDg4MjNSSlZ0OU90eVA3dXVjM3dCQlYza2NaVXpiYmFZZFdCeDErQXUrT2QydTdsUjZqb09MODEwbWNKbS9mN0o1VHZHUVA2SEdwaDFZSEhYNEM3NDUzYTd1VkhxT2d5ampoNUVCZDcyME1FQlkyM2MrVEtxL3o5VXBXRERPZzQ4WkZud1NJaEZxaXRXZGlaaXFzYVl1TjAvU1h3aUs4RUc5ZVEyOXUyWERKb0RXNG1sd3RjUk83dmFYNVhjRnNnZjQvbUxVMDdtaSdcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuoznuqdtby1tb3ZzLWl0ZW1cXFwiLFxcXCJwYXRoXFxcIjpcXFwibW8tbW92cy1pdGVtXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfliIbnsbvvvJonICsgcGRmaChodG1sLCAnLm1vLWNvbHMtbGF5cyYmbGksMi0tc3BhbiYmVGV4dCcpICtcXFxcbiAgICAgICAgJyB8ICcgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSwzLS1zcGFuJiZUZXh0JykgK1xcXFxuICAgICAgICAnIHwgJyArIHBkZmgoaHRtbCwgJy5tby1jb2xzLWxheXMmJmxpLDQtLXNwYW4mJlRleHQnKSArXFxcXG4gICAgICAgICdcXFxcXFxcXG4nICsgcGRmaChodG1sLCAnLm1vLWNvbHMtbGF5cyYmbGkmJlRleHQnKVxcXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDE1KSArXFxcXG4gICAgICAgICdcXFxcXFxcXG4nICsgcGRmaChodG1sLCAnLm1vLWNvbHMtbGF5cyYmbGksMSYmVGV4dCcpXFxcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpLFxcXFxuICAgIGRlc2M6ICfmm7TmlrDml7bpl7TvvJonICsgcGRmaChodG1sLCAnLm1vLWNvbHMtbGF5cyYmbGksNSYmVGV4dCcpLnN1YnN0cmluZygwLCAxNSksXFxcXG4gICAgaW1nOiBwZChodG1sLCAnLm1vLXNpdHUtcGljcyYmZGF0YS1vcmlnaW5hbCcpLFxcXFxuICAgIHVybDogTVlfVVJMLFxcXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXFxcbn0pO1xcXFxuXFxcXG52YXIg57q/6LevID0gJ2JvZHkmJi5tby1tb3ZzLWJ0bnMnXFxcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5tby1tb3ZzLWl0ZW0nXFxcXG52YXIg57q/6Lev5ZCNID0gJ1RleHQnXFxcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ3VsJiZsaSdcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaVsOWtl+mqjOivgeeggVxcXCIsXFxcInBhdGhcXFwiOlxcXCJ5em1cXFwiLFxcXCJydWxlXFxcIjpcXFwid2hpbGUgKC/ovpPlhaXpqozor4HnoIF857O757uf5a6J5YWo6aqM6K+BLy50ZXN0KGh0bWwpKSB7XFxcXG4gICAgbGV0IGhlYWRlcnMgPSB7XFxcXG4gICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBNT0JJTEVfVUEsXFxcXG4gICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBNWV9VUkxcXFxcbiAgICB9XFxcXG4gICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9qeGhzP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpO1xcXFxuICAgIGV2YWxQcml2YXRlSlMoc3N5eik7XFxcXG5cXFxcbiAgICBsZXQgdmNvZGUgPSBnZXRWQ29kZTIoTVlfSE9NRSArICcvaW5kZXgucGhwL3ZlcmlmeS9pbmRleC5odG1sPycsIEpTT04uc3RyaW5naWZ5KGhlYWRlcnMpLCAnbnVtJyk7XFxcXG4gICAgZmV0Y2goTVlfSE9NRSArIGh0bWwubWF0Y2goL1xcXFxcXFxcL2luZGV4LnBocC4qP3ZlcmlmeT0vKVswXSArIEpTT04ucGFyc2UodmNvZGUpLnJldCwge1xcXFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgIH0pXFxcXG4gICAgdmFyIHl6ID0gTVlfVFlQRSA9PSAnaG9tZScgPyB0cnVlX3VybCA6IE1ZX1VSTFxcXFxuICAgIGxvZyhNWV9UWVBFKVxcXFxuICAgIGh0bWwgPSByZXF1ZXN0KHl6LCB7XFxcXG4gICAgICAgIC8vICAgaGVhZGVyczogaGVhZGVyc1xcXFxuICAgIH0pXFxcXG59XFxcXG5pZiAoL+mikee5geaTjeS9nC8udGVzdChodG1sKSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfnvZHnq5nmkJzntKLml7bpl7Tpl7TpmpQnLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwi5LiL5ouJ6YeN6K+VXFxcXFxcXCJcXFxcbn0pXFxcXG5cXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuoznuqd5LXBsYXlMaXN0XFxcIixcXFwicGF0aFxcXCI6XFxcInktcGxheUxpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKClcXFxcblxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogcGRmaChodG1sLCAnLm1vZHVsZS1pbmZvLWl0ZW0sMyYmVGV4dCcpXFxcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTgpICtcXFxcbiAgICAgICAgJ1xcXFxcXFxcbicgK1xcXFxuICAgICAgICBwZGZoKGh0bWwsICcubW9kdWxlLWluZm8taXRlbSwxJiZUZXh0JylcXFxcbiAgICAgICAgLnN1YnN0cmluZygwLCAxOCkgK1xcXFxuICAgICAgICAnXFxcXFxcXFxuJyArXFxcXG4gICAgICAgIHBkZmgoaHRtbCwgJy5tb2R1bGUtaW5mby1pdGVtLDQmJlRleHQnKSxcXFxcbiAgICBpbWc6IHBkKGh0bWwsICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWx8fHNyYycpICtcXFxcbiAgICAgICAgJ0BSZWZlcmVyPScsXFxcXG4gICAgdXJsOiBNWV9VUkwsXFxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLm1vZHVsZS1pbmZvLWl0ZW0sNXx8Lm1vZHVsZS1pbmZvLWl0ZW0mJlRleHQnKSxcXFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxcXG59KTtcXFxcblxcXFxudmFyIOe6v+i3ryA9ICcjeS1wbGF5TGlzdCYmc3BhbidcXFxcbnZhciDpgInpm4YgPSAnYm9keSYmLm1vZHVsZS1wbGF5LWxpc3QnXFxcXG52YXIg57q/6Lev5ZCNID0gJ1RleHQnXFxcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ2JvZHkmJmEnXFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXFxcbnNldFJlc3VsdChkKTtcXFwifV1cIn0iLCJ0aXRsZSI6Iua1i+ivlSJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement