xiaomianao666

小程序:歌词适配

Mar 1st, 2024
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@歌词适配@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5q2M6K+N6YCC6YWNIiwiYXV0aG9yIjoiVGhvbWFz5ZayIiwidXJsIjoiaGlrZXI6Ly9lbXB0eT9wPWZ5cGFnZSIsInZlcnNpb24iOjIwMjQwMjI1LCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6Im11c2ljIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6JC5yZXF1aXJlKCdob21lP3J1bGU95q2M6K+N6YCC6YWNJyk7Iiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/cz0qKiIsImdyb3VwIjoi4pGg5o6o6I2QIiwic2VhcmNoRmluZCI6ImpzOlxuc2V0UmVzdWx0KFt7XG4gICAgdGl0bGU6IFwi5pCc57SiID0+IFwiICsgTVlfS0VZV09SRCxcbiAgICBkZXNjOiAn6YCa6L+HXCLpq5jnuqfmkJzntKJcIumhtemdouaQnOe0oicsXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzX3QyKSA9PiB7XG4gICAgICAgIGlmIChnZXRNeVZhcignc19wbGF0Zm9ybScsICdsaWInKSA9PSAnbGliJylcbiAgICAgICAgICAgIHB1dE15VmFyKCdzX3BsYXRmb3JtJywgZ2V0SXRlbSgnc19wbGF0Zm9ybScsICdrdycpKTtcbiAgICAgICAgcHV0TXlWYXIoJ3NfdDInLCBzX3QyKTtcbiAgICAgICAgcmV0dXJuIFwiaGlrZXI6Ly9wYWdlL3NlYXJjaCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cD1meXBhZ2UmcnVsZT3mrYzor43pgILphY1cIjtcbiAgICB9LCBNWV9LRVlXT1JEKSxcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IFwi6auY57qn5pCc57SiXCJcbiAgICB9XG59XSk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoGxpYlwiLFwicGF0aFwiOlwibGliXCIsXCJydWxlXCI6XCJhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKCdhZGRsaXN0Jyk7XFxuICAgIGNsZWFyTXlWYXIoJ2FkZHBpdGNoJyk7XFxufSkpO1xcbmNvbnN0IGVtcHR5ID0gJ2hpa2VyOi8vZW1wdHk/cD1meXBhZ2UnO1xcbmNvbnN0IENvbG9yID0gKHRlc3QsIGNvbG9yKSA9PiB7XFxuICAgIHJldHVybiAnPGZvbnQgY29sb3I9XFxcIiMnICsgKGNvbG9yIHx8ICdGQTcyOTgnKSArICdcXFwiPicgKyB0ZXN0ICsgJzwvZnJvbnQ+JztcXG59XFxuY29uc3QgU3Ryb25nID0gKHRlc3QpID0+IHtcXG4gICAgcmV0dXJuICc8c3Ryb25nPicgKyB0ZXN0ICsgJzwvc3Ryb25nPic7XFxufVxcbmNvbnN0IFJpY2ggPSAodGVzdCkgPT4ge1xcbiAgICByZXR1cm4gXFxcIuKAmOKAmOKAmeKAmVxcXCIgKyBTdHJpbmcodGVzdClcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXG58KDx8XFxcXHMrKWJyXFxcXHMqXFxcXC8/XFxcXHMqPi9naSwgJ1xcXFxuJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXHIvZywgJ1xcXFxyJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXGYvZywgJ1xcXFxmJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXHQvZywgJ1xcXFx0JylcXG4gICAgICAgIC5yZXBsYWNlKC8mKGx0fGd0fG5ic3B8YW1wfHF1b3QpOy9naSwgKCQwLCAkMSkgPT4gKHtcXG4gICAgICAgICAgICAnbHQnOiAnPCcsXFxuICAgICAgICAgICAgJ2d0JzogJz4nLFxcbiAgICAgICAgICAgICduYnNwJzogJyAnLFxcbiAgICAgICAgICAgICdhbXAnOiAnJicsXFxuICAgICAgICAgICAgJ3F1b3QnOiAnXFxcIidcXG4gICAgICAgIH1bJDEudG9Mb3dlckNhc2UoKV0pKVxcbiAgICAgICAgLnJlcGxhY2UoLzxcXFxcLz9lbVtePl0qPi9naSwgJycpO1xcbn1cXG5jb25zdCBSID0gKHgsIHopID0+IHtcXG4gICAgdCA9IFxcXCJcXFwiO1xcbiAgICB6ID0geiB8fCBcXFwiMTIzNDU2Nzg5MGFiY2RlZlxcXCI7XFxuICAgIGZvciAoaSA9IDA7IGkgPCB4OyBpKyspIHtcXG4gICAgICAgIHQgKz0geltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB6Lmxlbmd0aCldO1xcbiAgICB9XFxuICAgIHJldHVybiB0XFxufVxcbmNvbnN0IFNpemUgPSBzaXplID0+IHtcXG4gICAgaWYgKCFzaXplKSByZXR1cm4gJ+aXoOazleiuoeeulyc7XFxuICAgIHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJ107XFxuICAgIGxldCBpID0gMDtcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcbiAgICAgICAgc2l6ZSAvPSAxMDI0O1xcbiAgICAgICAgaSsrO1xcbiAgICB9XFxuICAgIHNpemUgPSBpID8gc2l6ZS50b0ZpeGVkKDIpIDogc2l6ZTtcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXG59XFxuY29uc3QgTG9hZGluZyA9ICgpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHVybDogXFxcInRvYXN0Oi8v5Yqg6L295LitLi4uXFxcIixcXG4gICAgICAgIGltZzogXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS93ZWlzeXIvaW1nL0xvYWRpbmcxLmdpZlxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xX2NlbnRlclxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGNsczogXFxcImxvYWRpbmdfZ2lmXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgc2V0UHJlUmVzdWx0KGQpO1xcbn07XFxuTHJjID0gKGxyYywgdGltZSkgPT4ge1xcbiAgICBuID0gU3RyaW5nKGxyYykucmVwbGFjZSgvXFxcXHMqKChcXFxcbnwoXFxcXHUwMDNjfDwpXFxcXC8/KGJyfHApXFxcXC8/KFxcXFx1MDAzZXw+KSlcXFxccyopK1xcXFxzKi9naSwgJ1xcXFxuJykudHJpbSgpLnNwbGl0KC9cXFxcbi8pO1xcbiAgICByZXR1cm4gbi5tYXAoKGxpbmVMeXJpYywgaSkgPT4ge1xcbiAgICAgICAgaXRpbWUgPSBpIC8gbi5sZW5ndGggKiAodGltZSB8fCAyMDApO1xcbiAgICAgICAgbSA9IE1hdGguZmxvb3IoaXRpbWUgLyA2MCk7XFxuICAgICAgICBzID0gKHRpbWUgJSA2MCkudG9GaXhlZCgzKTtcXG4gICAgICAgIHJldHVybiBgWyR7bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7cy5wYWRTdGFydCg2LCAnMCcpfV1gICsgbGluZUx5cmljXFxuICAgIH0pLmpvaW4oJ1xcXFxuJyk7XFxufVxcblxcblxcbmlkID0gXFxcImdjc3AxOTk5XFxcIjtcXG5wbGF0Zm9ybXMgPSBbXFxcImxpYlxcXCIsIFxcXCJxcVxcXCIsIFxcXCJ3eVxcXCIsIFxcXCJrZ1xcXCIsIFxcXCJrd1xcXCIsIFxcXCJtZ1xcXCIsIFxcXCI1c1xcXCIsIFxcXCJteVxcXCIsIFxcXCJxdFxcXCJdO1xcbnBsYXRmb3JtID0gZ2V0TXlWYXIoJ3BsYXRmb3JtJywgZ2V0SXRlbSgncGxhdGZvcm0nLCAna3cnKSk7XFxuaWYgKHBsYXRmb3JtID09ICdsaWInKSB7XFxuICAgIHZhciBuZXdBcnIgPSBwbGF0Zm9ybXMuc2xpY2UoMSwgOCk7XFxuICAgIHZhciByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5ld0Fyci5sZW5ndGgpO1xcbiAgICB2YXIgcGxhdGZvcm0gPSBuZXdBcnJbcmFuZG9tSW5kZXhdO1xcbiAgICBwdXRNeVZhcigncGxhdGZvcm0nLCBwbGF0Zm9ybSk7XFxufVxcbnRzID0gW1xcXCLjgJDmtYHnlYXpn7PotKjjgJFcXFwiLCBcXFwi44CQ5qCH5YeG6Z+z6LSo44CRXFxcIiwgXFxcIuOAkOmrmOWTgemfs+i0qOOAkVxcXCIsIFxcXCLjgJDml6DmjZ/pn7PotKjjgJFcXFwiLCBcXFwi44CQ6auY5ZOB5peg5o2f44CRXFxcIiwgXFxcIuOAkOeri+S9k+aXoOaNn+OAkVxcXCJdO1xcbnF0cyA9IFtcXFwibGliXFxcIiwgXFxcImJkXFxcIiwgXFxcImt6XFxcIiwgXFxcIm5pXFxcIiwgXFxcImczXFxcIiwgXFxcImJ6XFxcIiwgXFxcInN0XFxcIiwgXFxcImJsbVxcXCIsIFxcXCJmcFxcXCIsIFxcXCJodFxcXCIsIFxcXCIxdFxcXCIsIFxcXCI5dFxcXCIsIFxcXCJreVxcXCIsIFxcXCI1bmRcXFwiLCBcXFwiYml1XFxcIiwgXFxcIm11c1xcXCIsIFxcXCJqYW1cXFwiLCBcXFwianVpXFxcIiwgXFxcInkzXFxcIiwgXFxcIjM2NVxcXCIsIFxcXCJkajFcXFwiLCBcXFwiZGoyXFxcIiwgXFxcImRqM1xcXCIsIFxcXCJkajRcXFwiLCBcXFwiZGo1XFxcIiwgXFxcImRqNlxcXCIsIFxcXCJkajdcXFwiLCBcXFwiZGo4XFxcIiwgXFxcImRqOVxcXCJdO1xcblxcblxcblxcbmNvbnN0IExhenkgPSAocGxhdGZvcm0sIHQxLCB0MiwgdDMpID0+IHtcXG4gICAgaWYgKHQxID09IDIgfHwgdDEgPT0gMylcXG4gICAgICAgIHJldHVybiAkKGVtcHR5KS5ydWxlKChhLCBiLCBjKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShhICsgXFxcIj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxhenkoYiwgYyk7XFxuICAgICAgICB9LCBwbGF0Zm9ybSwgdDEsIHQyKVxcbiAgICBlbHNlXFxuICAgICAgICByZXR1cm4gJChcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLmxhenlSdWxlKChhLCBiLCBjKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShhICsgXFxcIj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxhenkoMCwgYiwgYyk7XFxuICAgICAgICB9LCBwbGF0Zm9ybSwgdDIsIHQzIHx8IDApO1xcbn1cXG5cXG5cXG5cXG5cXG5cXG5cXG5jb25zdCBFeHRyYSA9IChfLCByMSwgcjIsIHIzKSA9PiB7XFxuICAgIGlmIChyMSkge1xcbiAgICAgICAgXy50aXRsZSA9IFJpY2goXy50aXRsZSkucmVwbGFjZShcXFwi4oCY4oCY4oCZ4oCZXFxcIiwgJycpO1xcbiAgICAgICAgXy5pbWcgPSBTdHJpbmcoXy5pbWcpLnJlcGxhY2UoL3tzaXplfS9naSwgJzQ4MCcpO1xcbiAgICAgICAgXy5jb250ZW50ID0gXy5jb250ZW50ICsgJyc7XFxuICAgICAgICBfLnp5aWQgPSBfLnp5aWQgKyAnJztcXG4gICAgICAgIGlmICghXy5kZXNjKSBfLmRlc2MgPSB0aGlzX3BsYXRmb3JtO1xcbiAgICB9XFxuICAgIHQxID0gTnVtYmVyKF8uY29udGVudC5yZXBsYWNlKC9eKFxcXFxkP1xcXFxEXFxcXGQ/KSskLywgJzAnKSkgPCAyID8gMCA6IDE7XFxuICAgIF8uZXh0cmEgPSB7XFxuICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgY2xzOiBpZCArICc6YWRkbGlzdCcsXFxuICAgICAgICBsb25nQ2xpY2s6IFtcXG4gICAgICAgICAgICAvKntcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuKYhSDliIbkuqvpk77mjqUg4piFXFxcIixcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoYSwgYiwgYykgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5jb3B5dXJsKGEsIGIsIGMpO1xcbiAgICAgICAgICAgIH0sIF8uZGVzYywgXy5jb250ZW50LCBfLnp5aWQpXFxuICAgICAgICB9LCAqL1xcbiAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLimIUg5pS26JePXFxcIiArICh0MSA/ICfmrYzljZUnIDogJ+WNleabsicpICsgXFxcIiDimIVcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodDEsIF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxvZ0RhdGEoXywgdDEpO1xcbiAgICAgICAgICAgICAgICB9LCB0MSwgXylcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4piFIOaJuemHj+aUtuiXjyDimIVcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoY2xzSWQsIHNpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2g6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2k6IHNpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGZpbmRJdGVtc0J5Q2xzKGNsc0lkKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL19jYXRjaC9JbXBvcnQudHh0XFxcIiwgSlNPTi5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcmVseTIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU95q2M6K+N6YCC6YWNXFxcIjtcXG4gICAgICAgICAgICAgICAgfSwgaWQgKyAnOmFkZGxpc3QnLCB0MSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICBdXFxuICAgIH07XFxuICAgIGlmIChyMykge1xcbiAgICAgICAgXy51cmwgPSByMztcXG4gICAgICAgIF8uZXh0cmEubG9uZ0NsaWNrLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4piFIOS4i+i9veatjOabsiDimIVcXFwiLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChuYW1lcywgdXJscykgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChuYW1lcywgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgobmFtZXMsIHVybHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGkgPSBuYW1lcy5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsc1tpXTtcXG4gICAgICAgICAgICAgICAgfSwgbmFtZXMsIHVybHMpO1xcbiAgICAgICAgICAgIH0sIHIzLm5hbWVzLCByMy51cmxzKVxcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBfLnVybCA9IExhenkoXy5kZXNjLCBfLmNvbnRlbnQsIF8uenlpZCk7XFxuICAgICAgICBpZiAoIXQxKSBfLmV4dHJhLmxvbmdDbGljay51bnNoaWZ0KHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuKYhSDkuIvovb3mrYzmm7Ig4piFXFxcIixcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgfSwgTGF6eShfLmRlc2MsIF8uY29udGVudCwgXy56eWlkLCAxKSlcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIF8uY29sX3R5cGUgPSAnY2FyZF9waWNfMyc7XFxuICAgIGlmIChyMikgcmV0dXJuIF87XFxuICAgIGQucHVzaChfKTtcXG59XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuJC5leHBvcnRzID0ge1xcblxcblxcblxcbiAgICBsb2dEYXRhOiBmdW5jdGlvbihuZXdEYXRhLCBzaSwgbmFtZSkge1xcbiAgICAgICAgaWYgKG5ld0RhdGEuenlpZCA9PT0gXFxcInVuZGVmaW5lZFxcXCIpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4jeaUr+aMgeaUtuiXj35cXFwiO1xcblxcbiAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbiAgICAgICAgaWYgKHp5ID09PSBcXFwiXFxcIikgenkgPSB7XFxuICAgICAgICAgICAgXFxcIuWFqOmDqFxcXCI6IFtdXFxuICAgICAgICB9LCBzdG9yYWdlMC5zZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSwgenkpO1xcbiAgICAgICAgbGV0IHp1ID0gT2JqZWN0LmtleXMoenkpO1xcblxcblxcbiAgICAgICAgcmV0dXJuICQoenUuY29uY2F0KFxcXCLmlrDnu4RcXFwiKSwgMywgXFxcIumAieaLqee7hFxcXCIpLnNlbGVjdCgoenksIHp1LCBuZXdEYXRhLCBzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5paw57uEXFxcIikge1xcbiAgICAgICAgICAgICAgICBpZiAoIXp1LmluY2x1ZGVzKGlucHV0KSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQobmFtZSwgXFxcIuivt+i+k+WFpeaWsOe7hOWQjeensFxcXCIpLmlucHV0KCh6eSwgenUsIG5ld0RhdGEsIHNpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKS5tYXRjaCgvXlxcXFxkK3xeXFxcXHMqKOaWsOe7hCk/XFxcXHMqJC8pKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v57uE5ZCN5LiN6IO95Li656m6ICYg5pyA5YmN6Z2i5LiN6IO95piv5pWw5a2XICYg5Lmf5LiN6IO95Y+r5paw57uEXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dS5jb25jYXQoXFxcIuacgOWQjumdolxcXCIpLCAzLCAn6K+36YCJ5oup5paw57uE5L2N572uJykuc2VsZWN0KCh6eSwgaW5wdXQyLCBuZXdEYXRhcywgc2kpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGF0YSA9IEFycmF5LmlzQXJyYXkobmV3RGF0YXMpID8gbmV3RGF0YXMgOiBbbmV3RGF0YXNdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuacgOWQjumdolxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2lucHV0Ml0gPSBuZXdEYXRhO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIHp5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpbnB1dDJdID0gbmV3RGF0YTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpXSA9IHp5W2ldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBqc29uO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld0RhdGFzKSkgYmFjayh0cnVlKSwgdG9hc3QoJ+aIkOWKnycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgenksIGlucHV0LCBuZXdEYXRhLCBzaSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCB6eSwgenUsIG5ld0RhdGEsIHNpLCBuYW1lKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIbnu4TlkI3np7Dph43lpI3kuoZ+XFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB6eSA9IHp5W2lucHV0XTtcXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdEYXRhKSkge1xcbiAgICAgICAgICAgICAgICB6eSA9IHp5LmNvbmNhdChuZXdEYXRhKTtcXG4gICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICAgICAgdG9hc3QoJ+aIkOWKnycpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSwgaW5wdXQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB6dSA9IHp5Lm1hcChpdCA9PiBpdC50aXRsZSk7XFxuICAgICAgICAgICAgcmV0dXJuICQoenUuY29uY2F0KFxcXCLmnIDlkI7pnaJcXFwiKSwgMiwgJ+ivt+mAieaLqei1hOa6kOS9jee9ricpLnNlbGVjdCgoenksIHp1LCBpbnB1dDIsIG5ld0RhdGEsIHNpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5pyA5ZCO6Z2iXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgenkucHVzaChuZXdEYXRhKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGkgPSB6dS5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHp5LnNwbGljZShpLCAwLCBuZXdEYXRhKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSwgaW5wdXQyKTtcXG4gICAgICAgICAgICB9LCB6eSwgenUsIGlucHV0LCBuZXdEYXRhLCBzaSk7XFxuICAgICAgICB9LCB6eSwgenUsIG5ld0RhdGEsIHNpKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgc2V0RGF0YTogZnVuY3Rpb24oc2ksIHp5Miwga2V5KSB7XFxuICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICBpZiAoa2V5KSB7XFxuICAgICAgICAgICAgenlba2V5XSA9IHp5MjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgenkgPSB6eTI7XFxuICAgICAgICB9XFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSwgenkpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aIkOWKn1xcXCI7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGNvcHl1cmw6IGZ1bmN0aW9uKHNpLCB6eWlkKSB7XFxuICAgICAgICBjdXJsID0gXFxcImh0dHBzOi8vd3d3Lmt1d28uY24vXFxcIlxcbiAgICAgICAgaWYgKFN0cmluZyh6eWlkKS50cmltKCkubWF0Y2goL15cXFxcZCskLykpIHtcXG4gICAgICAgICAgICBpZiAoc2kgPT0gJzEnKVxcbiAgICAgICAgICAgICAgICBjdXJsICs9IFxcXCJwbGF5X2RldGFpbC9cXFwiO1xcbiAgICAgICAgICAgIGVsc2UgaWYgKHNpID09IDIpXFxuICAgICAgICAgICAgICAgIGN1cmwgKz0gXFxcImFsYnVtX2RldGFpbC9cXFwiO1xcbiAgICAgICAgICAgIGVsc2UgaWYgKHNpID09IDMpXFxuICAgICAgICAgICAgICAgIGN1cmwgKz0gXFxcIm12cGxheS9cXFwiO1xcbiAgICAgICAgICAgIGVsc2UgaWYgKHNpID09IDQpXFxuICAgICAgICAgICAgICAgIGN1cmwgKz0gXFxcInBsYXlsaXN0X2RldGFpbC9cXFwiO1xcbiAgICAgICAgICAgIGVsc2UgaWYgKHNpID09IDUpXFxuICAgICAgICAgICAgICAgIGN1cmwgKz0gXFxcInNpbmdlcl9kZXRhaWwvXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBjdXJsICsgenlpZDtcXG4gICAgfSxcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaFpbWFnZVwiLFwicGF0aFwiOlwiaW1hZ2VcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKGltYWdlaWQpIHtcXG4gICAgc3dpdGNoIChTdHJpbmcoaW1hZ2VpZCkpIHtcXG4gICAgICAgIGNhc2UgJ3p6JzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vcmUvODYucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ+icnOeNvic6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vY2RuLnUxLmh1bHV4aWEuY29tL2c0L00wMi82My83NC9yQkFBZG1RU2Q3LUFYN2VCQUFCbDVZRkNkek0wNjEuanBnJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ+S6keWQrCc6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2FsYnVtLmJpbGlpbWcuY29tL2Jmcy9uZXdfZHluLzJhZDgzNjZiYTM0YWFjZDhmMjYwN2YwMGRlNjQzN2U3MTY2NjEyODA1OS5wbmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAn5L2c6ICFJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHA6Ly8zNi4yNDguMTEuMjQ1L2c/Yj1xcSZlaz1BUVBEaWN2MTVpYmtHS2YzaHJMTHpXNUZJNnlGMTRqT01ZM0ZqMEtKd2E0WjBrNXlRYVdGWFFjRm1mdWlic2JLQ1o1SGliOGh5ZnBpYVVtdzd6YnZJUGhVJnM9MCZtVHlwZT1mcmllbmRsaXN0JztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ2tnMic6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIzLzEyLzI4LzQvMTEwXzQ1ODA2NjgwY2YzMmRkNmZlZDYzMjM0NDJiNmNlOWQ5X2Nvbl8xMzB4MTMwLnBuZyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICdrdzInOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyNC8wMS8xMC82LzExMF80ZGM2MjgzNDFhM2RhNjg4Y2I1OWVkYTczNzJmNTlhNl9jb25fMTMweDEzMC5wbmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcblxcblxcbiAgICAgICAgY2FzZSAncXEnOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMy8xMi8yMS8wLzJfYjc1OTZhNjc3N2I3YzYyZDA2MDk0YmZiOGQ1YmNmZGRfY29uXzEzMHgxMzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ3d5JzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjQvMDEvMDkvMC8xMTBfOWQ4MDU4ZTg0MDRkZjg1NmU5OTg3NmM3Yzk3NWEwZTVfY29uXzEzMHgxMzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ2tnJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjQvMDEvMDIvMy8xMTBfNGY5NTFkNDJhYzBkZDU3NmE1M2RiODE2MjFiZTJmNTNfY29uXzEzMHgxMzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ2t3JzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjMvMTIvMjgvMi8xMTBfOWZmNDVlYTBhZGY2NTAyZmViZGNjMzg0ZGYzNTUyNjlfY29uXzEzMHgxMzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ21nJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjQvMDEvMDMvNC8xMTBfMjI0Y2U5NDI5ODE0MjE2YjE3ZmIzYWQ5ZTlhMTA0NzJfY29uXzEzMHgxMzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJzVzJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjMvMTIvMjgvMC8xMTBfYzVjNGFmNDdmNjBmOTE2Zjg4YzMwMTEwMDE4ZTNhNjRfY29uXzEzMHgxMzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG4gICAgICAgIGNhc2UgJ+iuvue9ric6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LzMwLnN2Zyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICfmlLbol48nOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3JlLzEyOS5wbmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAndG9wJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS93ZWlzeXIvaW1nL1RvcEltZzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ2FkZCc6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2Nkbi5pY29uLWljb25zLmNvbS9pY29uczIvMzcvUE5HLzUxMi9hZGRwcm9wZXJ0eV9hJUMzJUIxYWRpcl8zNjI1LnBuZyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9pbWFnZXMvcnVsZV90eXBlX2F1ZGlvJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKdtnFxXCIsXCJwYXRoXCI6XCJxcVwiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJykpLnJ1bGUpO1xcbmNvbnN0IHRoaXNfcGxhdGZvcm0gPSBcXFwicXFcXFwiO1xcbmZ1bmN0aW9uIGFqYXgodXJsLCBoZWFkKSB7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKHVybCwgT2JqZWN0LmFzc2lnbih7XFxuICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3kucXEuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IE1TSUUgOS4wOyBXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IFRyaWRlbnQvNS4wKVxcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IFxcXCJxbV9rZXlzdD1RX0hfTF81RkJNUnMtdWljcElRbzhZbXQzdjB3MWYwREF5SndRTWRMSlBWS21tT1FaUlFaa3V6OEFmQjFROyB1aW49OTQ4MTY4ODI3O1xcXCJcXG4gICAgICAgIH1cXG4gICAgfSwgaGVhZCB8fCB7fSkpKTtcXG59XFxuJC5leHBvcnRzID0ge1xcblxcblxcbiAgICBpVGFnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGFqYXgoXFxcImh0dHBzOi8vYy55LnFxLmNvbS9zcGxjbG91ZC9mY2dpLWJpbi9mY2dfZ2V0X2Rpc3NfdGFnX2NvbmYuZmNnP2Zvcm1hdD1qc29uXFxcIikuZGF0YS5jYXRlZ29yaWVzLm1hcChfID0+IHtcXG4gICAgICAgICAgICBuYW1lID0gXy5jYXRlZ29yeUdyb3VwTmFtZS5yZXBsYWNlKCfng63pl6gnLCAn5o6o6I2QJyk7XFxuICAgICAgICAgICAgaVRhZ1tuYW1lXSA9IHt9O1xcbiAgICAgICAgICAgIF8uaXRlbXMubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoXy5jYXRlZ29yeU5hbWUgPT0gJ+WFqOmDqCcpXFxuICAgICAgICAgICAgICAgICAgICBpVGFnW25hbWVdW1xcXCLmnIDmlrBcXFwiXSA9IF8uY2F0ZWdvcnlJZCArIFxcXCImc29ydElkPTJcXFwiO1xcbiAgICAgICAgICAgICAgICBpVGFnW25hbWVdW18uY2F0ZWdvcnlOYW1lXSA9IF8uY2F0ZWdvcnlJZDtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl0gPSB7fTtcXG4gICAgICAgIGFqYXgoJ2h0dHBzOi8vdS55LnFxLmNvbS9jZ2ktYmluL211c2ljdS5mY2c/ZGF0YT17XFxcInRvcExpc3RcXFwiOntcXFwibW9kdWxlXFxcIjpcXFwibXVzaWNUb3BsaXN0LlRvcGxpc3RJbmZvU2VydmVyXFxcIixcXFwibWV0aG9kXFxcIjpcXFwiR2V0QWxsXFxcIixcXFwicGFyYW1cXFwiOnt9fX0nKS50b3BMaXN0LmRhdGEuZ3JvdXAubWFwKF8gPT4ge1xcbiAgICAgICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdW18uZ3JvdXBOYW1lXSA9IFtdO1xcbiAgICAgICAgICAgIF8udG9wbGlzdC5tYXAoX18gPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoX18udGl0bGUgIT0gXFxcIk1W5qacXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bXy5ncm91cE5hbWVdLnB1c2goRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfXy50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF9fLmhlYWRQaWNVcmwgfHwgX18uZnJvbnRQaWNVcmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfXy50b3BJZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSwgMSkpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInFxX2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0MiwgaXN1cmwpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDor6bmg4UgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3UueS5xcS5jb20vY2dpLWJpbi9tdXNpY3UuZmNnXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICBjb21tOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY3Q6ICcxOScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY3Y6ICcxODU5J1xcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIHJlcToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZTogJ211c2ljLnBmX3NvbmdfZGV0YWlsX3N2cicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0X3NvbmdfZGV0YWlsX3lxcScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29uZ19taWQ6IHQxXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgXyA9IGFqYXgodSwge1xcbiAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgIH0pLnJlcS5kYXRhLnRyYWNrX2luZm87XFxuICAgICAgICAgICAgICAgIG5hbWUgPSBfLm5hbWU7XFxuICAgICAgICAgICAgICAgIGFydGlzdCA9IF8uc2luZ2VyLm1hcChfID0+IF8ubmFtZSkuam9pbihcXFwiJlxcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHsgLy8g5LiL6L29XFxuICAgICAgICAgICAgICAgICAgICBmID0gXy5maWxlO1xcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gW107XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZi5zaXplXzEyOG1wMyAhPSAwKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzFdICsgU2l6ZShmLnNpemVfMTI4bXAzKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZi5zaXplXzMyMG1wMyAhPSAwKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzJdICsgU2l6ZShmLnNpemVfMzIwbXAzKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZi5zaXplX2ZsYWMgIT0gMClcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1szXSArIFNpemUoZi5zaXplX2ZsYWMpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChmLnNpemVfaGlyZXMgIT0gMClcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1s0XSArIFNpemUoZi5zaXplX2hpcmVzKSk7XFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChhcnIsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKGFyciwgdDEsIG5hbWUsIGFydGlzdCwgaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5HZXRNdXNpY1VybChcXFwiZG93blxcXCIsIFxcXCJxcVxcXCIsIHQxLCBpLCBuYW1lLCBhcnRpc3QsIGlkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLm1hdGNoKFxcXCJ0b2FzdDovL1xcXCIpKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJyLCB0MSwgbmFtZSwgYXJ0aXN0LCBfLmlkKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyDmrYzor41cXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9IGFqYXgoXFxcImh0dHA6Ly9jLnkucXEuY29tL2x5cmljL2ZjZ2ktYmluL2ZjZ19xdWVyeV9seXJpY19uZXcuZmNnP2Zvcm1hdD1qc29uJm5vYmFzZTY0PTEmc29uZ21pZD1cXFwiICsgdDEpLmx5cmljO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFscmMubWF0Y2goL1xcXFxbXFxcXGQrXFxcXDpcXFxcZCsvKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxyYyA9IExyYyhscmMsIF8uaW50ZXJ2YWwpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g6ZO+5o6lXFxuICAgICAgICAgICAgICAgIGlmIChfLnBheS5wYXlfcGxheSkge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJvcGVuXFxcIiwgXFxcInFxXFxcIiwgdDEsIDAsIG5hbWUsIGFydGlzdCwgXy5pZCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1ICs9IGA/ZGF0YT17XFxcInJlcV8wXFxcIjp7XFxcIm1vZHVsZVxcXCI6XFxcInZrZXkuR2V0VmtleVNlcnZlclxcXCIsXFxcIm1ldGhvZFxcXCI6XFxcIkNnaUdldFZrZXlcXFwiLFxcXCJwYXJhbVxcXCI6e1xcXCJndWlkXFxcIjpcXFwiMFxcXCIsXFxcInBsYXRmb3JtXFxcIjpcXFwiMjBcXFwiLFxcXCJmaWxlbmFtZVxcXCI6W1xcXCJNNTAwJHt0MSt0MX0ubXAzXFxcIl0sXFxcInNvbmdtaWRcXFwiOltcXFwiJHt0MX1cXFwiXX19fWA7XFxuICAgICAgICAgICAgICAgICAgICBfID0gYWpheCh1KS5yZXFfMC5kYXRhO1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gXy5taWR1cmxpbmZvWzBdLnB1cmw7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsICYmIHVybCAhPSBcXFwiXFxcIikgdXJsID0gXy5zaXBbMF0gKyB1cmw7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOlxcbiAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cHM6Ly9jLnkucXEuY29tL3NwbGNsb3VkL2ZjZ2ktYmluL2ZjZ19nZXRfZGlzc19ieV90YWcuZmNnP2Zvcm1hdD1qc29uJmNhdGVnb3J5SWQ9XFxcIiArIHQxICsgXFxcIiZzaW49XFxcIiArICgoTVlfUEFHRSAtIDEpICogMzApICsgXFxcIiZlaW49XFxcIiArICgoTVlfUEFHRSAqIDMwKSAtIDEpO1xcbiAgICAgICAgICAgICAgICBhamF4KHVybCkuZGF0YS5saXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLmRpc3NuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltZ3VybCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmRpc3NpZFxcbiAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgICAgIF8gPSBhamF4KFxcXCJodHRwOi8vYy55LnFxLmNvbS9xem9uZS9mY2ctYmluL2ZjZ191Y2NfZ2V0Y2RpbmZvX2J5aWRzX2NwLmZjZz9mb3JtYXQ9anNvbiZ0eXBlPTEmdXRmOD0xJmRpc3N0aWQ9XFxcIiArIHQxKS5jZGxpc3RbMF0uc29uZ2xpc3Q7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzMnOiAvLyDmjpLooYxcXG4gICAgICAgICAgICAgICAgXyA9IGFqYXgoYGh0dHBzOi8vdS55LnFxLmNvbS9jZ2ktYmluL211c2ljdS5mY2c/ZGF0YT17XFxcImRldGFpbFxcXCI6e1xcXCJtb2R1bGVcXFwiOlxcXCJtdXNpY1RvcGxpc3QuVG9wbGlzdEluZm9TZXJ2ZXJcXFwiLFxcXCJtZXRob2RcXFwiOlxcXCJHZXREZXRhaWxcXFwiLFxcXCJwYXJhbVxcXCI6e1xcXCJ0b3BJZFxcXCI6JHt0MX0sXFxcIm9mZnNldFxcXCI6JHsoTVlfUEFHRS0xKSozMH0sXFxcIm51bVxcXCI6MzAsXFxcInBlcmlvZFxcXCI6XFxcIlxcXCJ9fX1gKS5kZXRhaWwuZGF0YS5zb25nSW5mb0xpc3Q7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IChfLm5hbWUgfHwgXy5zb25nbmFtZSkgKyAnIC0gJyArIF8uc2luZ2VyLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgIGltZzogYGh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMCR7Xy5hbGJ1bW1pZHx8KF8uYWxidW0/Xy5hbGJ1bS5taWQ6XFxcIlxcXCIpfS5qcGdgLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IF8ucGF5LnBheXBsYXksXFxuICAgICAgICAgICAgenlpZDogXy5taWQgfHwgXy5zb25nbWlkXFxuICAgICAgICB9LCAxKSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSwgcnVuKSB7XFxuICAgICAgICBpZiAoaXNVICE9IFxcXCJ1cmxcXFwiKSB7XFxuICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgIGxpYjogKF8pID0+IHRydWUsXFxuICAgICAgICAgICAgICAgIHBhaWQ6IChfKSA9PiBfLnBheS5wYXlfcGxheSA9PSAnMScsXFxuICAgICAgICAgICAgICAgIGZyZWU6IChfKSA9PiBfLnBheS5wYXlfcGxheSA9PSAnMCdcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc3VybCA9IChzdHlwZSkgPT4gYWpheChcXFwiaHR0cDovL3U2LnkucXEuY29tL2NnaS1iaW4vbXVzaWN1LmZjZ1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcImJvZHlcXFwiOiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICBcXFwicmVxXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJtb2R1bGVcXFwiOiBcXFwibXVzaWMuc2VhcmNoLlNlYXJjaENnaVNlcnZpY2VcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJtZXRob2RcXFwiOiBcXFwiRG9TZWFyY2hGb3JRUU11c2ljTGl0ZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcInBhcmFtXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicXVlcnlcXFwiOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic2VhcmNoX3R5cGVcXFwiOiBzdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm51bV9wZXJfcGFnZVxcXCI6IDMwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicGFnZV9udW1cXFwiOiBNWV9QQUdFXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgXFxcIm1ldGhvZFxcXCI6IFxcXCJQT1NUXFxcIlxcbiAgICAgICAgICAgIH0pLnJlcS5kYXRhLmJvZHk7XFxuICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdXJsKDApLml0ZW1fc29uZztcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX1tpc1VdKF8pKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAnIC0gJyArIF8uc2luZ2VyLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGBodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSMzAweDMwME0wMDAke18uYWxidW1taWR8fChfLmFsYnVtP18uYWxidW0ubWlkOlxcXCJcXFwiKX0uanBnYCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXy5wYXkucGF5X3BsYXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8ubWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gc3VybCgzKS5pdGVtX3NvbmdsaXN0O1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uZGlzc25hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmxvZ28sXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmRpc3NpZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICB2YXIgYm9keSA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0OiAnMTknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdjogJzE4NTknXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiAnbXVzaWMucGZfc29uZ19kZXRhaWxfc3ZyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0X3NvbmdfZGV0YWlsX3lxcScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb25nX21pZDoga2V5d29yZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBfID0gYWpheChcXFwiaHR0cHM6Ly91LnkucXEuY29tL2NnaS1iaW4vbXVzaWN1LmZjZ1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICB9KS5yZXEuZGF0YS50cmFja19pbmZvO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAnIC0gJyArIF8uc2luZ2VyLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogYGh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMCR7Xy5hbGJ1bT9fLmFsYnVtLm1pZDpcXFwiXFxcIn0uanBnYCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBfLnBheS5wYXlwbGF5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8ubWlkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBfID0gYWpheChcXFwiaHR0cDovL2MueS5xcS5jb20vcXpvbmUvZmNnLWJpbi9mY2dfdWNjX2dldGNkaW5mb19ieWlkc19jcC5mY2c/Zm9ybWF0PWpzb24mdHlwZT0xJnV0Zjg9MSZkaXNzdGlkPVxcXCIgKyBrZXl3b3JkKS5jZGxpc3RbMF07XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFJpY2goXy5kaXNzbmFtZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmxvZ28sXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmRpc3N0aWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9LFxcblxcblxcblxcbiAgICByZWZyZXNoX2xvZ2luOiBmdW5jdGlvbihjb29raWUsIHJ1bikge1xcbiAgICAgICAgQyA9IFN0cmluZyhjb29raWUpLnRyaW0oKTtcXG4gICAgICAgIGMgPSBDLnNwbGl0KC9xbV9rZXlzdD0vaSk7XFxuICAgICAgICBrZXkgPSAoY1sxXSB8fCBjWzBdKS5zcGxpdChcXFwiO1xcXCIpWzBdO1xcbiAgICAgICAgYyA9IEMuc3BsaXQoL3Vpbj0vaSk7XFxuICAgICAgICB1aW4gPSAoY1sxXSB8fCBjWzBdKS5zcGxpdChcXFwiO1xcXCIpWzBdO1xcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdXX1gnKSkge1xcbiAgICAgICAgICAgIGJvZHkgPSB7XFxuICAgICAgICAgICAgICAgIFxcXCJjb21tXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImZQZXJzb25hbGl0eVxcXCI6IFxcXCIwXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ0bWVMb2dpblR5cGVcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwidG1lTG9naW5NZXRob2RcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwicXFcXFwiOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJhdXRoc3RcXFwiOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjdFxcXCI6IFxcXCIxMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiY3ZcXFwiOiBcXFwiMTIwODAwMDhcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInZcXFwiOiBcXFwiMTIwODAwMDhcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInRtZUFwcElEXFxcIjogXFxcInFxbXVzaWNcXFwiXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIFxcXCJyZXExXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIm1vZHVsZVxcXCI6IFxcXCJtdXNpYy5sb2dpbi5Mb2dpblNlcnZlclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcIkxvZ2luXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJwYXJhbVxcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29kZVxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJvcGVuaWRcXFwiOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwicmVmcmVzaF90b2tlblxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzdHJfbXVzaWNpZFxcXCI6IHVpbixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwibXVzaWNrZXlcXFwiOiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVuaW9uaWRcXFwiOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwicmVmcmVzaF9rZXlcXFwiOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwibG9naW5Nb2RlXFxcIjogMlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBib2R5ID0ge1xcbiAgICAgICAgICAgICAgICAncmVxMSc6IHtcXG4gICAgICAgICAgICAgICAgICAgICdtb2R1bGUnOiAnUVFDb25uZWN0TG9naW4uTG9naW5TZXJ2ZXInLFxcbiAgICAgICAgICAgICAgICAgICAgJ21ldGhvZCc6ICdRUUxvZ2luJyxcXG4gICAgICAgICAgICAgICAgICAgICdwYXJhbSc6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnZXhwaXJlZF9pbic6IDc3NzYwMDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ211c2ljaWQnOiB1aW4sXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ211c2lja2V5Jzoga2V5XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XFxuICAgICAgICB1cmwgPSBcXFwiaHR0cHM6Ly91LnkucXEuY29tL2NnaS1iaW4vbXVzaWNzLmZjZz9zaWduPXp6YVxcXCIgKyBSKDE2KSArIG1kNSgnQ0pCUEFDclJ1Tnk3JyArIGJvZHkpO1xcbiAgICAgICAgXyA9IEpTT04ucGFyc2UocG9zdCh1cmwsIHtcXG4gICAgICAgICAgICBib2R5OiBib2R5XFxuICAgICAgICB9KSlbJ3JlcTEnXTtcXG4gICAgICAgIGlmIChfLmNvZGUgPT0gMCkge1xcbiAgICAgICAgICAgIGtleSA9IF8uZGF0YS5tdXNpY2tleTtcXG4gICAgICAgICAgICBpZiAocnVuKSByZXR1cm4gW2tleSwgdWluXTtcXG4gICAgICAgICAgICBwdXRNeVZhcigndmlwcnVsZV9jMCcsIGtleSk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3ZpcHJ1bGVfYzEnLCB1aW4pO1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoJ2ppZXhpP3J1bGU95q2M6K+N6YCC6YWNJykuc2V0RWRpdDIoXFxcInFxXFxcIik7XFxuICAgICAgICB9IGVsc2UgaWYgKF8uY29kZSA9PSAxMDAwNikge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liLfmlrDlpKrpopHnuYHkuoZcXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yi35paw5aSx6LSlXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSxcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaRUR1jmlLbol49cIixcInBhdGhcIjpcImNvbGxlY3Rpb25cIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScsIHt9KSkucnVsZSk7XFxubGV0IGNfcGxhdGZvcm0gPSBnZXRNeVZhcignY19wbGF0Zm9ybScsICdsaWInKS50cmltKCk7XFxubGV0IHNpID0gZ2V0TXlWYXIoJ3NpJywgJzAnKS50cmltKCk7XFxubGV0IGNfdDIgPSBnZXRNeVZhcignY190MicsICdsaWInKS50cmltKCk7XFxubGV0IGNfdDEgPSBzaSA9PSAnMCc7XFxuZCA9IFt7XFxuICAgIHRpdGxlOiBjX3QxID8gXFxcIuWNleabslxcXCIgOiBcXFwi5q2M5Y2VXFxcIixcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaSkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoJ3NpJywgc2kpO1xcbiAgICAgICAgY2xlYXJNeVZhcignY190MicpO1xcbiAgICAgICAgY2xlYXJNeVZhcigndGknKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICB9LCBjX3QxID8gJzEnIDogJzAnKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3hpdXRhblxcXCJcXG59LCB7XFxuICAgIHRpdGxlOiBcXFwi5pS26JePXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9jb2xsZWN0aW9uP3J1bGU95q2M6K+N6YCC6YWNXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2Rvd25sb2FkXFxcIlxcbn0sIHtcXG4gICAgdGl0bGU6IFxcXCLljoblj7JcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2hpc3Rvcnk/cnVsZT3mrYzor43pgILphY1cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fNVxcXCIsXFxuICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25faGlzXFxcIlxcbn0sIHtcXG4gICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKF8pID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoJ3NfcGxhdGZvcm0nKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoJ3NfdDMnKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoJ3NfdDQnKTtcXG4gICAgICAgIGlmIChfLmJhY2spXFxuICAgICAgICAgICAgcmV0dXJuIGJhY2soZmFsc2UpLCAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICBlbHNlXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wPWZ5cGFnZSZydWxlPeatjOivjemAgumFjVxcXCI7XFxuICAgIH0sIE1ZX1BBUkFNUyksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvbWVudV9zZWFyY2gyXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHBhZ2VUaXRsZTogXFxcIumrmOe6p+aQnOe0olxcXCIsXFxuICAgICAgICBiYWNrOiAxXFxuICAgIH1cXG59LCB7XFxuICAgIHRpdGxlOiBcXFwi6K6+572uXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVMaXN0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wYWdlVGl0bGU96Kej5p6Q566h55CGJnJ1bGU95q2M6K+N6YCC6YWNXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy/orr7nva5cXFwiXFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbn1dO1xcbnBsYXRmb3Jtcy5tYXAocGxhdGZvcm0gPT4ge1xcbiAgICBpZiAoY19wbGF0Zm9ybSA9PSBwbGF0Zm9ybSlcXG4gICAgICAgIHBsYXRmb3JtID0gUmljaChTdHJvbmcoQ29sb3IocGxhdGZvcm0pKSk7XFxuICAgIHJldHVybiBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBsYXRmb3JtLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwbGF0Zm9ybSkgPT4ge1xcbiAgICAgICAgICAgIGlmICghcGxhdGZvcm0ubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignY19wbGF0Zm9ybScsIHBsYXRmb3JtKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY190MicpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBwbGF0Zm9ybSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pO1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxufSk7XFxuaWYgKHNpID09ICcwJykge1xcbiAgICBzd2l0Y2ggKGNfcGxhdGZvcm0pIHtcXG4gICAgICAgIGNhc2UgJzVzJzpcXG4gICAgICAgICAgICBjdGFiID0gW1xcXCJsaWJcXFwiLCBcXFwieWNcXFwiLCBcXFwiZmNcXFwiLCBcXFwiYnpcXFwiXTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ215JzpcXG4gICAgICAgICAgICBjdGFiID0gW1xcXCJsaWJcXFwiLCBcXFwid3lcXFwiLCBcXFwia3dcXFwiLCBcXFwibWdcXFwiXTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ3F0JzpcXG4gICAgICAgICAgICBjdGFiID0gcXRzO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICBjdGFiID0gW1xcXCJsaWJcXFwiLCBcXFwicGFpZFxcXCIsIFxcXCJmcmVlXFxcIl07XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgIH1cXG59IGVsc2Uge1xcbiAgICBjdGFiID0gW1xcXCJsaWJcXFwiXTtcXG4gICAgaWYgKGNfcGxhdGZvcm0gIT0gJ3F0JylcXG4gICAgICAgIGN0YWIucHVzaChcXFwic29uZ3NcXFwiLCBcXFwiaG90c1xcXCIpO1xcbn1cXG5jdGFiLm1hcChwbGF0Zm9ybSA9PiB7XFxuICAgIGlmIChjX3QyID09IHBsYXRmb3JtKVxcbiAgICAgICAgcGxhdGZvcm0gPSBSaWNoKFN0cm9uZyhDb2xvcihwbGF0Zm9ybSkpKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwbGF0Zm9ybSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICBpZiAoIXBsYXRmb3JtLm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2NfdDInLCBwbGF0Zm9ybSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIHBsYXRmb3JtKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSk7XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG59LCB7XFxuICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG59LCB7XFxuICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG59LCB7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snXFxufSwge1xcbiAgICBjb2xfdHlwZTogJ3BpY18xX2NlbnRlcicsXFxuICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL3J1bGVfdHlwZV9hdWRpb1xcXCIsXFxuICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snXFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaydcXG59KTtcXG5sZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuaWYgKHp5ID09PSBcXFwiXFxcIiB8fCBKU09OLnN0cmluZ2lmeSh6eSkgPT0gJ3t9JykgenkgPSB7XFxuICAgIFxcXCLlhajpg6hcXFwiOiBbXVxcbn0sIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpLCB6eSk7XFxubGV0IHp1ID0gW107XFxuZm9yIChpIGluIHp5KSB6dS5wdXNoKGkpO1xcblxcblxcblxcblxcblxcblxcblxcblxcbmxldCB0aSA9IGdldE15VmFyKCd0aScsICcwJyk7XFxuenUubWFwKChuYW1lLCBpaSkgPT4ge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpID09IGlpID8gUmljaChTdHJvbmcoQ29sb3IobmFtZSkpKSA6IG5hbWUsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlpKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3RpJywgaWkpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBpaSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yig6ZmkIFxcXCIgKyBuYW1lLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCLnoa7lrprliKDpmaTliIbnu4QgXFxcIiArIG5hbWUgKyBcXFwiIOWQl++8n1xcXFxu5q2k5pON5L2c5LiN5Y+v6YCG77yM6LCo5oWO6YCJ5oup44CCXFxcIikuY29uZmlybSgoc2ksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHp5W25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3RpJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNpLCBuYW1lKVxcbiAgICAgICAgICAgICAgICB9LCBzaSwgbmFtZSlcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5omT5byA5Li65LqM57qnXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHNpLCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKChzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eVtuYW1lXS5tYXAoXyA9PiBFeHRyYShfKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2ksIG5hbWUpXFxuICAgICAgICAgICAgICAgIH0sIHNpLCBuYW1lKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLkv67mlLnlkI3np7BcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5paw55qE57uE5ZCNXFxcIikuaW5wdXQoKHNpLCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgaW4genkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gbmFtZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpbnB1dF0gPSB6eVtpXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpXSA9IHp5W2ldXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBqc29uO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaSwgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHNpLCBuYW1lKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmm7TmlLnmjpLluo9cXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIHp1LCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpID0genUuaW5kZXhPZihuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgIHp1LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKHp1LmNvbmNhdChcXFwi5pyA5ZCO6Z2iXFxcIiksIDIsICfor7fpgInmi6notYTmupDkvY3nva4nKS5zZWxlY3QoKHNpLCB6dSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIG9mIHp1KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uW25hbWVdID0genlbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndGknLCB6dS5pbmRleE9mKGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uW2ldID0genlbaV1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxcXCLmnIDlkI7pnaJcXFwiID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25bbmFtZV0gPSB6eVtuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3RpJywgenUubGVuZ3RoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBqc29uO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaSwgenUsIG5hbWUpO1xcbiAgICAgICAgICAgICAgICB9LCBzaSwgenUsIG5hbWUpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWIhue7hOWQiOW5tlxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwgenUsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGkgPSB6dS5pbmRleE9mKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgenUuc3BsaWNlKGksIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoenUsIDMsICfpgInmi6nopoHlkIjlubbnmoTliIbnu4QnKS5zZWxlY3QoKHNpLCB6dSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIG9mIHp1KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eVtpXSA9IHp5W2ldLmNvbmNhdCh6eVtuYW1lXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndGknLCB6dS5pbmRleE9mKGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uW2ldID0genlbaV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5ID0ganNvbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenkpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2ksIHp1LCBuYW1lKTtcXG4gICAgICAgICAgICAgICAgfSwgc2ksIHp1LCBuYW1lKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliIbkuqsgXFxcIiArIG5hbWUsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaDogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2k6IHNpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSlbbmFtZV1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHNoYXJlUGFzdGUodCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8v5q2M6K+N6YCC6YWN5pS26JeP5Y+j5Luk77yM5omT5byA5rW36ZiU5Y2z5Y+v5a+85YWlXFxcXG7vv6VQYXN0Ze+/pVxcXCIgKyB1ICsgYEBpbXBvcnQ9anM6JC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldFJ1bGUoaW5wdXQsMik7YDtcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIbkuqvlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBzaSwgbmFtZSlcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5zd2l0Y2ggKGNfdDIpIHtcXG4gICAgY2FzZSAnZnJlZSc6XFxuICAgICAgICBjX3QyID0gJzAnXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAncGFpZCc6XFxuICAgICAgICBjX3QyID0gJzEnXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnc29uZ3MnOlxcbiAgICAgICAgY190MiA9ICcyJ1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ2hvdHMnOlxcbiAgICAgICAgY190MiA9ICczJ1xcbiAgICAgICAgYnJlYWs7XFxufVxcbmlmIChKU09OLnN0cmluZ2lmeSh6dSkgPT0gJ1tcXFwi5YWo6YOoXFxcIl0nICYmIHp5W1xcXCLlhajpg6hcXFwiXS5sZW5ndGggPT0gMCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeaciX5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIilcXG4gICAgfSk7XFxufSBlbHNlIHtcXG4gICAgaWYgKHp5W3p1W3RpXV0ubGVuZ3RoID09PSAwKSB7XFxuICAgICAgICBkZWxldGUgenlbenVbdGldXTtcXG4gICAgICAgIGNsZWFyTXlWYXIoJ3RpJyk7XFxuICAgICAgICAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGlpID0gMDtcXG4gICAgICAgIHp5W3p1W3RpXV0ubWFwKChfLCBpKSA9PiB7XFxuICAgICAgICAgICAgaWYgKCgoY19wbGF0Zm9ybSA9PSAnbGliJyB8fCBjX3BsYXRmb3JtID09IF8uZGVzYykgJiYgKGNfdDIgPT0gJ2xpYicgfHwgY190MiA9PSBfLmNvbnRlbnQpKSB8fCAoY19wbGF0Zm9ybSA9PSAnbGliJyAmJiAoKGNfdDIgPT0gXy5jb250ZW50KSB8fCAoY190MiA9PSAnMCcgJiYgXy5jb250ZW50ICE9ICcxJykpKSkge1xcbiAgICAgICAgICAgICAgICBfLmV4dHJhID0ge1xcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyAnOmFkZGxpc3QnLFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuS/ruaUuVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwga2V5LCBpLCBfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbXFxcIuS/ruaUueWQjeensFxcXCIsIFxcXCLkv67mlLnlsIHpnaJcXFwiXSwgMSwgJ+mAieaLqeimgeS/ruaUueeahOWPguaVsCcpLnNlbGVjdCgoc2ksIGtleSwgaSwgXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlLCB0ZXh0XSA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIuS/ruaUueWQjeensFxcXCI6IFsndGl0bGUnLCAn6K+36L6T5YWl5paw55qE5ZCN56ewJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCLkv67mlLnlsIHpnaJcXFwiOiBbXy5pbWcgPyAnaW1nJyA6ICdwaWMnLCAn6K+36L6T5YWl5q2j56Gu55qE5bCB6Z2i5Zyw5Z2AJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9W2lucHV0XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gX1t0eXBlXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChuYW1lLCB0ZXh0KS5pbnB1dCgoc2ksIGtleSwgaSwgdHlwZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSlba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlbaV1bdHlwZV0gPSBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSwga2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwga2V5LCBpLCB0eXBlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCBrZXksIGksIF8pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwgenVbdGldLCBpLCBfKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLlj5jmm7RcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIHp1LCBrZXksIGksIHp5aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFtcXFwi5pu05pS55o6S5bqPXFxcIiwgXFxcIuWIh+aNouWIhue7hFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLywgXFxcIuaJuemHj+aNoue7hFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sIDEsICfpgInmi6nopoHlj5jmm7TnmoTkuovku7YnKS5zZWxlY3QoKHNpLCB6dSwga2V5LCBpLCB6eWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfmm7TmlLnmjpLluo8nOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSlba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp1ID0genkubWFwKF8gPT4gXy50aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0genlbaV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eS5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6dS5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dS5jb25jYXQoXFxcIuacgOWQjumdolxcXCIpLCAyLCAn6K+36YCJ5oup6LWE5rqQ5L2N572uJykuc2VsZWN0KChzaSwga2V5LCB6eSwgenUsIGRhdGEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIHp1KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6dVtpXSA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5wdXNoKGRhdGEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ucHVzaCh6eVtpXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcXFwi5pyA5ZCO6Z2iXFxcIiA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnB1c2goZGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5ID0ganNvbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenksIGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwga2V5LCB6eSwgenUsIGRhdGEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIh+aNouWIhue7hCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IHp1LmluZGV4T2Yoa2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp1LnNwbGljZShpaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dS5jb25jYXQoJ+aWsOe7hCcpLCAzLCAn6K+36YCJ5oup6LWE5rqQ5L2N572uJykuc2VsZWN0KChzaSwga2V5LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2tleV0ubWFwKChfLCBpaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWkgIT0gaSkganNvbi5wdXNoKF8pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRhdGEgPSBfO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2tleV0gPSBqc29uO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgn5paw57uEJyA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeaWsOe7hOWQjeensFxcXCIpLmlucHV0KChzaSwgenksIGRhdGEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC50cmltKCkubWF0Y2goL15cXFxcZCt8XlxcXFxzKijmlrDnu4QpP1xcXFxzKiQvKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v57uE5ZCN5LiN6IO95Li656m6ICYg5pyA5YmN6Z2i5LiN6IO95piv5pWw5a2XXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2lucHV0XSA9IFtkYXRhXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIHp5LCBkYXRhKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlbaW5wdXRdLnB1c2goZGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCBrZXksIGkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+aJuemHj+aNoue7hCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKChzaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImFkZGxpc3Q/cnVsZT10Z3jpn7PkuZBcXFwiKShzaSwgMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwga2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCB6dSwga2V5LCBpLCB6eWlkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIHp1LCB6dVt0aV0sIGksIF8uenlpZClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliIbkuqtcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoXywgc2ksIGtleSwgenlpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFxcXCLliIbkuqvpk77mjqVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCLliIbkuqvlj6Pku6RcXFwiLCBcXFwi5om56YeP5YiG5LqrXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgMSwgJ+mAieaLqeimgeWPmOabtOeahOS6i+S7ticpLnNlbGVjdCgoXywgc2ksIGtleSwgenlpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5YiG5Lqr6ZO+5o6lJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLmNvcHl1cmwoc2ksIHp5aWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIhuS6q+WPo+S7pCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2g6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2k6IHNpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IF8udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogW19dXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly/mrYzor43pgILphY3mlLbol4/lj6Pku6TvvIzmiZPlvIDmtbfpmJTljbPlj6/lr7zlhaVcXFxcbu+/pVRleHTvv6VcXFwiICsgdCArIGBAaW1wb3J0PWpzOiQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRSdWxlKGlucHV0LDIpO2A7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5om56YeP5YiG5LqrJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaDogMCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaTogc2ksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpW2tleV1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvX2NhdGNoL0ltcG9ydC50eHRcXFwiLCBKU09OLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9yZWx5MiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cnVsZT3mrYzor43pgILphY1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXywgc2ksIGtleSwgenlpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF8sIHNpLCB6dVt0aV0sIF8uenlpZClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliKDpmaRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIGtleSwgaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuehruWumuWIoOmZpFxcXCIgKyBuYW1lICsgXFxcIuWQl++8n1xcXCIpLmNvbmZpcm0oKHNpLCBrZXksIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKVtrZXldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenksIGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwga2V5LCBpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwgenVbdGldLCBpLCBfLnRpdGxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKF8uY29udGVudC5yZXBsYWNlKC9eKFxcXFxkKlxcXFxEK1xcXFxkKikrJC8sICcwJykpIDwgMikgXy5leHRyYS5sb25nQ2xpY2sudW5zaGlmdCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKYhSDkuIvovb3mrYzmm7Ig4piFXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgTGF6eShfLmRlc2MsIF8uY29udGVudCwgXy56eWlkLCAxKSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmICghXy51cmwpIF8udXJsID0gTGF6eShfLmRlc2MsIF8uY29udGVudCwgXy56eWlkKTtcXG4gICAgICAgICAgICAgICAgXy5jb2xfdHlwZSA9ICdjYXJkX3BpY18zJztcXG4gICAgICAgICAgICAgICAgZC5wdXNoKF8pO1xcbiAgICAgICAgICAgICAgICBpaSsrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKCFpaSkgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnIl+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpXFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaPpq5jnuqfmkJzntKJcIixcInBhdGhcIjpcInNlYXJjaFwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5sZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxubGV0IHNfcGxhdGZvcm0gPSBnZXRNeVZhcignc19wbGF0Zm9ybScsICdsaWInKVxcbmxldCBzX3QxID0gZ2V0TXlWYXIoJ3NfdDEnLCBnZXRJdGVtKCdzX3QxJywgJzAnKSlcXG5sZXQgc190MiA9IGdldE15VmFyKCdzX3QyJywgJycpO1xcbmxldCBzX3QzID0gZ2V0TXlWYXIoJ3NfdDMnLCAnbGliJyk7XFxubGV0IHNfdDQsIHJlZ2lkLCBpc1AgPSBNWV9QQUdFID09IDEsXFxuICAgIGlzVSA9IC9odHRwcz86XFxcXC9cXFxcLy8udGVzdChzX3QyKTtcXG5cXG5cXG5cXG5pZiAoc190MSA9PSAnMCcpIHtcXG4gICAgc3dpdGNoIChzX3BsYXRmb3JtKSB7XFxuICAgICAgICBjYXNlICdsaWInOlxcbiAgICAgICAgICAgIHNfdDMgPSBnZXRNeVZhcignc190MycsICdrdycpO1xcbiAgICAgICAgICAgIHRhYnMgPSBbJ2t3JywgJ2tnJ107XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICc1cyc6XFxuICAgICAgICAgICAgdGFicyA9IFsnbGliJywgJ3ljJywgJ2ZjJywgJ2J6J107XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICdteSc6XFxuICAgICAgICAgICAgc190NCA9IGdldE15VmFyKCdzX3Q0JywgJzEnKSA9PSAnMSc7XFxuICAgICAgICAgICAgc190MyA9IGdldE15VmFyKCdzX3QzJywgJ3d5Jyk7XFxuICAgICAgICAgICAgaWYgKCFzX3QzLm1hdGNoKC93eXxrd3xtZy8pICYmIHNfdDQpXFxuICAgICAgICAgICAgICAgIHNfdDMgPSAnd3knO1xcbiAgICAgICAgICAgIHRhYnMgPSBbXFxcInd5XFxcIiwgXFxcImt3XFxcIiwgXFxcIm1nXFxcIiwgXFxcIjF0XFxcIiwgXFxcImRiXFxcIiwgXFxcIjV5XFxcIiwgXFxcIjVmXFxcIl0uc2xpY2UoMCwgc190NCA/IDMgOiA3KTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ3F0JzpcXG4gICAgICAgICAgICBzX3QzID0gZ2V0TXlWYXIoJ3NfdDMnLCAnYmQnKTtcXG4gICAgICAgICAgICB0YWJzID0gcXRzLnNsaWNlKDEpO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICBpZiAoc190MyA9PSAna3cnIHx8IHNfdDMgPT0gJ2tnJykge1xcbiAgICAgICAgICAgICAgICBzX3QzID0gJ2xpYic7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRhYnMgPSBbJ2xpYicsICdwYWlkJywgJ2ZyZWUnXTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcbn0gZWxzZSB7XFxuICAgIHRhYnMgPSBbJ2xpYiddO1xcbiAgICBzX3QzID0gJ2xpYic7XFxufVxcblxcblxcblxcbmlmIChpc1ApIHtcXG4gICAgaWYgKGlzVSkge1xcbiAgICAgICAgbGV0IHJlZ3MgPSBbXFxuICAgICAgICAgICAgW1xcXCJxcVxcXCIsIC95XFxcXC5xcVxcXFwuY29tL2ksIC8uKihcXFxcL2RldGFpbHNcXFxcLy4qaWQ9fFxcXFwvcGxheWxpc3RcXFxcLykoXFxcXGQrKS9pLCAvW1xcXFwvXFxcXD9cXFxcJl1zb25nKERldGFpbFxcXFwvfG1pZFxcXFw9KShbYS16MC05XSspL2ldLFxcbiAgICAgICAgICAgIFtcXFwid3lcXFwiLCAvbXVzaWNcXFxcLjE2M1xcXFwuY29tL2ksIC9cXFxcL3BsYXlsaXN0KFxcXFwvfFxcXFw/aWQ9KShcXFxcZCspL2ksIC9zb25nXFxcXD8oLipcXFxcJik/aWQ9KFxcXFxkKykvaV0sXFxuICAgICAgICAgICAgW1xcXCJrd1xcXCIsIC9rdXdvXFxcXC5jbi9pLCAvXFxcXC9wbGF5bGlzdChfZGV0YWlsKT9cXFxcLyhcXFxcZCspL2ksIC9cXFxcLyh5aW55dWV8cGxheV9kZXRhaWwpXFxcXC8oXFxcXGQrKS9pXSxcXG4gICAgICAgICAgICBbXFxcIm1nXFxcIiwgL21pZ3VcXFxcLmNuL2ksIC9cXFxcL3BsYXlsaXN0XFxcXC8oLippZD0pPyhcXFxcZCspL2ksIC9cXFxcL3NvbmdcXFxcLyguKmlkPSk/KFthLXowLTldKykvaV0sXFxuICAgICAgICAgICAgLy8gW1xcXCJrZ1xcXCIsIC4uLl1cXG4gICAgICAgICAgICBbXFxcIjVzXFxcIiwgLzVzaW5nXFxcXC4vaSwgLy4qKHNvbmdsaXN0LippZD0pKFthLXowLTldKykvaSwgLy4qKFxcXFw/c29uZy4qPz18XFxcXC8pKFthLXowLTldKykoXFxcXCZzb25nLio/PXxcXFxcLykoW2EtejAtOV0rKS9pXSxcXG4gICAgICAgIF07XFxuICAgICAgICBmb3IgKFtwbGF0Zm9ybSwgcmVnMSwgcmVnMiwgcmVnM10gb2YgcmVncykge1xcbiAgICAgICAgICAgIGlmIChzX3QyLm1hdGNoKHJlZzEpKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBzX3BsYXRmb3JtID0gcGxhdGZvcm07XFxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0ID0gc190Mi5tYXRjaChyZWcyKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNfdDEgPSAnMSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaWQgPSBtYXRbMl07XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdCA9IHNfdDIubWF0Y2gocmVnMykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzX3QxID0gJzAnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lkID0gbWF0WzJdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PSAnNXMnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWdpZC5tYXRjaCgvXFxcXEQvKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lkID0gbWF0WzRdICsgJyMnICsgcmVnaWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lkICs9ICcjJyArIG1hdFs0XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgc190MiA9IHJlZ2lkXFxuICAgIH0gZWxzZSBpZiAoc190Mi50cmltKCkpIHtcXG4gICAgICAgIGxldCBpaSA9IGhpc3RvcnkuaW5kZXhPZihzX3QyKTtcXG4gICAgICAgIGlmIChpaSA+IC0xKSB7XFxuICAgICAgICAgICAgaGlzdG9yeS5zcGxpY2UoaWksIDEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGhpc3RvcnkubGVuZ3RoID4gMjApIHtcXG4gICAgICAgICAgICBoaXN0b3J5LnNwbGljZShoaXN0b3J5Lmxlbmd0aCAtIDEsIDEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaGlzdG9yeS51bnNoaWZ0KHNfdDIpO1xcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIGhpc3RvcnkpO1xcbiAgICB9XFxuXFxuXFxuXFxuICAgIGQgPSBbe1xcbiAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG4gICAgICAgIHRpdGxlOiAnMCcsXFxuICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKShcXFwidG9wXFxcIiksXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKF8pID0+IHtcXG4gICAgICAgICAgICBpZiAoXy5iYWNrKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gYmFjayh0cnVlKSwgJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvY29sbGVjdGlvbiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cnVsZT3mrYzor43pgILphY1cXFwiO1xcbiAgICAgICAgfSwgTVlfUEFSQU1TKSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBcXFwiVEdY5pS26JePXFxcIixcXG4gICAgICAgICAgICBiYWNrOiAxXFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBTdHJvbmcoXFxcIuaQnOe0olxcXCIgKyAoc190MSA9PT0gJzAnID8gXFxcIuWNleabslxcXCIgOiBcXFwi5q2M5Y2VXFxcIikpLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzX3QxKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDEnLCBzX3QxKTtcXG4gICAgICAgICAgICAvLyBjbGVhck15VmFyKCdzX3QzJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgc190MSA9PT0gJzAnID8gJzEnIDogJzAnKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIixcXG4gICAgICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25feGl1dGFuXFxcIlxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogU3Ryb25nKFxcXCLmiJHnmoTmlLbol49cXFwiKSxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vY29sbGVjdGlvbj9ydWxlPeatjOivjemAgumFjVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfM1xcXCIsXFxuICAgICAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2Rvd25sb2FkXFxcIlxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogU3Ryb25nKFxcXCLljoblj7LorrDlvZVcXFwiKSxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vaGlzdG9yeT9ydWxlPeatjOivjemAgumFjVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfM1xcXCIsXFxuICAgICAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2hpc1xcXCJcXG4gICAgfV07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ/CflI0nLFxcbiAgICAgICAgZGVzYzogJ+aQnOe0ouWFs+mUruivjSAvIOWIhuS6q+mTvuaOpScsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHNfcGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICBzX3QyID0gaW5wdXQudHJpbSgpO1xcbiAgICAgICAgICAgIGlmIChzX3QyICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QyJywgc190Mik7XFxuICAgICAgICAgICAgICAgIGlmIChzX3BsYXRmb3JtID09ICdsaWInKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfcGxhdGZvcm0nLCBnZXRJdGVtKCdzX3BsYXRmb3JtJywgJ2t3JykpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBzX3BsYXRmb3JtKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFwiOnNlYXJjaFxcXCIsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwic190MlxcXCIpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3NfdDInLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgLyog5LiN5aW955SoXFxuICAgICAgICAgICAgJC50b1N0cmluZygoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBTdHJpbmcoaW5wdXQpLnRyaW0oKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKFxcXCJzX3QyXFxcIikgIT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QyJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKGlkICsgJzpjbWQ6a2V5Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQgIT0gXFxcIlxcXCIgJiYgIS9odHRwcz86XFxcXC9cXFxcLy8udGVzdChpbnB1dCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly9tc2VhcmNoY2RuLmt1Z291LmNvbS9uZXcvYXBwL2kvc2VhcmNoLnBocD9jbWQ9MzAyJmtleXdvcmQ9XFxcIiArIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBKU09OLnBhcnNlKGZldGNoKHUpKS5kYXRhXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLmtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGlkLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4dHJhID0gZmluZEl0ZW0oaWQrXFxcIjpzZWFyY2hcXFwiKS5leHRyYTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZGVmYXVsdFZhbHVlID0ga2V5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBpZCwgXy5rZXl3b3JkKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgJzpjbWQ6a2V5J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkICsgJzpzZWFyY2gnLCBkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlkKVxcbiAgICAgICAgICAqL1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgIH0pO1xcbiAgICBwbGF0Zm9ybXMubWFwKHBsYXRmb3JtID0+IHtcXG4gICAgICAgIGlmIChzX3BsYXRmb3JtID09IHBsYXRmb3JtKVxcbiAgICAgICAgICAgIHBsYXRmb3JtID0gUmljaChTdHJvbmcoQ29sb3IocGxhdGZvcm0pKSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwbGF0Zm9ybSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBsYXRmb3JtKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmICghcGxhdGZvcm0ubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfcGxhdGZvcm0nLCBwbGF0Zm9ybSk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3QzJyk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3Q0Jyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBwbGF0Zm9ybSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgfSk7XFxuICAgIGlmIChzX3QxID09ICcwJyAmJiBzX3BsYXRmb3JtID09ICdteScpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFJpY2goU3Ryb25nKENvbG9yKHNfdDQgPyAn5pawJyA6ICfml6cnLCAnMzM5OWNjJykpKSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNfdDQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDQnLCBzX3Q0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHNfdDQgPyAnMCcgOiAnMScpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHRhYnMubWFwKG5hbWUgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogc190MyA9PSBuYW1lID8gUmljaChTdHJvbmcoQ29sb3IobmFtZSkpKSA6IG5hbWUsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDMnLCB0aWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgbmFtZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICB9LCB7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgIH0pO1xcbiAgICBMb2FkaW5nKCk7XFxuICAgIGlmIChpc1UpIHtcXG4gICAgICAgIGlmICghcmVnaWQpIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLpk77mjqXmoLzlvI/mnKrmlLblvZVcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB9KTtcXG4gICAgICAgIGVsc2Ugc190MyA9IFxcXCJ1cmxcXFwiO1xcbiAgICB9XFxufSBlbHNlIGQgPSBbXTtcXG5cXG5cXG5cXG5pZiAoc19wbGF0Zm9ybSAhPSBcXFwibGliXFxcIiAmJiAhL15cXFxccyokLy50ZXN0KHNfdDIpKSB7XFxuICAgIGlmIChzX3QyLnRyaW0oKSAmJiAoIWlzVSB8fCBpc1ApKSB7XFxuICAgICAgICBpZiAoaXNVKVxcbiAgICAgICAgICAgIHNldFBhZ2VUaXRsZSgn6auY57qn5pCc57SiIC0gJyArIHNfcGxhdGZvcm0gKyAoc190MSA9PSAnMScgPyAn5q2M5Y2VJyA6ICfljZXmm7InKSk7XFxuICAgICAgICBlbHNlXFxuICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfpq5jnuqfmkJzntKIgLSAnICsgc190MiArICcjJyArIE1ZX1BBR0UpO1xcbiAgICAgICAgJC5yZXF1aXJlKHNfcGxhdGZvcm0gKyBcXFwiP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2VhcmNoKHNfdDEsIHNfdDIsIHNfdDMsIHNfdDQpO1xcbiAgICB9XFxufSBlbHNlIGlmIChpc1ApIHtcXG4gICAgc2V0UGFnZVRpdGxlKCfpq5jnuqfmkJzntKInKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPuWOhuWPsuaQnOe0ojwvYj48L3NwYW4+JyxcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2ZpbmRcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCLnoa7lrprmuIXpmaTlhajpg6jmkJzntKLorrDlvZXvvJ9cXFwiKS5jb25maXJtKChpZCkgPT4ge1xcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIpO1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhpZCArIFxcXCI6a2V5XFxcIik7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkICsgXFxcIjpzZWFyY2hIaXN0b3J5XFxcIiwge1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0sIGlkKSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjpzZWFyY2hIaXN0b3J5XFxcIixcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA9PT0gMCkgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZWxzZSBoaXN0b3J5Lm1hcCgoa2V5LCBpLCBpZCkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZToga2V5LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoc19wbGF0Zm9ybSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoc19wbGF0Zm9ybSA9PSAnbGliJykgcHV0TXlWYXIoJ3NfcGxhdGZvcm0nLCBnZXRJdGVtKCdzX3BsYXRmb3JtJywgJ2t3JykpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDInLCBrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXJNeVZhcignc190MycpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dHJhID0gZmluZEl0ZW0oXFxcImdjc3AxOTk5OnNlYXJjaFxcXCIpLmV4dHJhO1xcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZGVmYXVsdFZhbHVlID0ga2V5O1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIH0sIHNfcGxhdGZvcm0sIGtleSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjprZXk6XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAgY2xzOiBpZCArIFxcXCI6a2V5XFxcIixcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliKDpmaTlhbPplK7or406XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpZCwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgW10pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpaSA9IGhpc3RvcnkuaW5kZXhPZihrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpc3Rvcnkuc3BsaWNlKGlpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgaGlzdG9yeSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShpZCArIFxcXCI6a2V5OlxcXCIgKyBrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA9PT0gMCkgYWRkSXRlbUFmdGVyKGlkICsgXFxcIjpzZWFyY2hIaXN0b3J5XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGlkLCBrZXkpXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBSZXNvdSA9IChpZCwgc19wbGF0Zm9ybSwgcGxhdGZvcm0sIHJlc291KSA9PiB7XFxuICAgICAgICBEID0gW107XFxuICAgICAgICByZXNvdS5tYXAobmFtZSA9PiB7XFxuICAgICAgICAgICAgRC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc19wbGF0Zm9ybSwgcGxhdGZvcm0sIGtleXdvcmQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzX3BsYXRmb3JtID09ICdsaWInKSBwdXRNeVZhcignc19wbGF0Zm9ybScsIHBsYXRmb3JtKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QxJywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QyJywga2V5d29yZCk7XFxuICAgICAgICAgICAgICAgICAgICAvLyBjbGVhck15VmFyKCdzX3QzJyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICB9LCBzX3BsYXRmb3JtLCBwbGF0Zm9ybSwgbmFtZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBpZCArICc6cmVzb3U6a2V5J1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBEO1xcbiAgICB9O1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7lpKflrrbpg73lnKjmkJw8L2I+PC9zcGFuPicsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLCBzX3BsYXRmb3JtLCBwbGF0Zm9ybSwgUmVzb3UpID0+IHtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoaWQgKyAnOnJlc291OmtleScpO1xcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybSAhPSAna2cnKSB7XFxuICAgICAgICAgICAgICAgIHNyZWMgPSBbXTtcXG4gICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cDovL3NlYXJjaHJlYy5rdXdvLmNuL3NyZWMucz9zZWFyY2hyZWNhcGk9MCZpZD0wXFxcIikpLmFic2xpc3QubWFwKGFibGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBhYmxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyZWMucHVzaChfLndvcmQpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIE1ZX1BBR0UgPSAxO1xcbiAgICAgICAgICAgICAgICBzcmVjID0gJC5yZXF1aXJlKFxcXCJrZz9ydWxlPeatjOivjemAgumFjVxcXCIpLnNlYXJjaChcXFwiMFxcXCIsIFxcXCJcXFwiLCBcXFwibGliXFxcIiwgXFxcInNyZWNcXFwiKS5tYXAoXyA9PiBfLk9yaVNvbmdOYW1lKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkICsgJzpyZXNvdScsIFJlc291KGlkLCBzX3BsYXRmb3JtLCBwbGF0Zm9ybSwgc3JlYykpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9LCBpZCwgc19wbGF0Zm9ybSwgc190MywgUmVzb3UpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL3J1bGVfdHlwZV9jb21pY3NcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFwiOnJlc291XFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgc3JlYyA9IHN0b3JhZ2UwLmdldE15VmFyKHNfdDMgKyBcXFwiX3NyZWNcXFwiKTtcXG4gICAgaWYgKHNyZWMgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIGlmIChzX3QzICE9IFxcXCJrZ1xcXCIpIHtcXG4gICAgICAgICAgICBzcmVjID0gZmV0Y2goJ2h0dHA6Ly9ob3R3b3JkLmt1d28uY24vaG90d29yZC5zP2VuY29kaW5nPXV0ZjgmdGFiaWQ9MScpLnNwbGl0KC9cXFxcbi8pLm1hcCh0ZXh0ID0+IHRleHQudHJpbSgpLnJlcGxhY2UoL15URVhUPXwoXFxcXHMrXFxcXGQrKXsyfSQvZ2ksICcnKSk7XFxuICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaCgnaHR0cDovL3NlYXJjaHJlY3Rlcm0ua3V3by5jbi9yZWN0ZXJtLnM/ZW5jb2Rpbmc9dXRmOCZ2ZXJzaW9uPTEnKSkuY29udGVudC5tYXAoXyA9PiBzcmVjLnB1c2goXy5xdWVyeV93b3JkKSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHNyZWMgPSBbXTtcXG4gICAgICAgICAgICBzcmVjX3QgPSBmZXRjaChcXFwiaHR0cDovL2dhdGV3YXkua3Vnb3UuY29tL2FwaS92My9zZWFyY2gvaG90X3RhYj9zaWduYXR1cmU9ZWU0NGVkYjlkNzE1NTgyMTQxMmQyMjBiY2FmNTA5ZGQmYXBwaWQ9MTAwNSZjbGllbnR2ZXI9MTAwMjYmcGxhdD0wXFxcIiwge1xcbiAgICAgICAgICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJkZmlkXFxcIjogXFxcIi1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIm1pZFxcXCI6IFIoMzIsIFxcXCIxMjM0NTY3ODkwXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICBcXFwiY2xpZW50dGltZVxcXCI6IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwieC1yb3V0ZXJcXFwiOiBcXFwibXNlYXJjaC5rdWdvdS5jb21cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBKU09OLnBhcnNlKHNyZWNfdCkuZGF0YS5saXN0Lm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgciA9IF8ubmFtZSA9PSBcXFwi57u86Im654Ot5pCcXFxcIjtcXG4gICAgICAgICAgICAgICAgXy5rZXl3b3Jkcy5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzcmVjLnB1c2gociA/IF8ua2V5d29yZC5zcGxpdChcXFwiIFxcXCIpWzBdIDogXy5rZXl3b3JkKTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICB9XFxuICAgICAgICBzcmVjID0gc3JlYy5maWx0ZXIoKGEsIGIsIGMpID0+IGMuaW5kZXhPZihhKSA9PT0gYiAmJiBhLnRyaW0oKSAhPT0gXFxcIlxcXCIpO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoc190MyArIFxcXCJfc3JlY1xcXCIsIHNyZWMpO1xcbiAgICB9XFxuICAgIGQgPSBkLmNvbmNhdChSZXNvdShpZCwgc19wbGF0Zm9ybSwgc190Mywgc3JlYykpO1xcbn1cXG5cXG5NWV9QQUdFID09IDEgPyBzZXRQcmVSZXN1bHQoZCkgOiBzZXRSZXN1bHQoZCk7XFxuZGVsZXRlSXRlbUJ5Q2xzKCdsb2FkaW5nX2dpZicpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p23d3lcIixcInBhdGhcIjpcInd5XCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9IFxcXCJ3eVxcXCI7XFxuJC5leHBvcnRzID0ge1xcbiAgICBpVGFnOiBmdW5jdGlvbihydW4pIHtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdID0ge307XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5o6o6I2QXFxcIl0gPSBcXFwicGVyc29uYWxpemVkP1xcXCI7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5pyA5pawXFxcIl0gPSBcXFwiXFxcIjtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLlrpjmlrlcXFwiXSA9IFxcXCLlrpjmlrlcXFwiO1xcbiAgICAgICAgQXJyID0gW1xcXCLor63np41cXFwiLCBcXFwi6aOO5qC8XFxcIiwgXFxcIuWcuuaZr1xcXCIsIFxcXCLmg4XmhJ9cXFwiLCBcXFwi5Li76aKYXFxcIl07XFxuICAgICAgICBmb3IgKGtleSBvZiBBcnIpIGlUYWdba2V5XSA9IHt9O1xcbiAgICAgICAgJC5yZXF1aXJlKCd3eT9ydWxlPeatjOivjemAgumFjScpLmFqYXgoXFxcInBsYXlsaXN0L2NhdGxpc3RcXFwiKS5zdWIubWFwKF8gPT5cXG4gICAgICAgICAgICBpVGFnW0FycltfLmNhdGVnb3J5XV1bXy5uYW1lXSA9IF8ubmFtZVxcbiAgICAgICAgKTtcXG4gICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdID0ge307XFxuICAgICAgICBpZiAocnVuKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdW1xcXCLlhajpg6hcXFwiXSA9ICQucmVxdWlyZSgnd3k/cnVsZT3mrYzor43pgILphY0nKS5hamF4KFxcXCJ0b3BsaXN0P1xcXCIpLmxpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgaW1nOiBfLmNvdmVySW1nVXJsLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IDMsXFxuICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgfSwgMSwgMSkpO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInd5X2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0Mikge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOivpuaDhVxcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJ3eT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgyKFxcXCIvdjMvc29uZy9kZXRhaWxcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICBjOiBgW3tcXFwiaWRcXFwiOiR7dDF9fV1gXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBhID0gXy5zb25nc1swXTtcXG4gICAgICAgICAgICAgICAgbmFtZSA9IGEubmFtZTtcXG4gICAgICAgICAgICAgICAgYXJ0aXN0ID0gYS5hci5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oXFxcIiZcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbdHNbMV0gKyBTaXplKGEubCA/IGEubC5zaXplIDogYS5tLnNpemUpXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMl0gKyBTaXplKGEuaC5zaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5zcSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1szXSArIFNpemUoYS5zcS5zaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5ocilcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1s0XSArIFNpemUoYS5oci5zaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChhcnIsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKGFyciwgdDEsIG5hbWUsIGFydGlzdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBhcnIuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJkb3duXFxcIiwgXFxcInd5XFxcIiwgdDEsIGksIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgYS5pZCwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyDmrYzor41cXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9ICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4MihcXFwiL3NvbmcvbHlyaWNcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHQxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGx2OiAtMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrdjogLTEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHY6IC0xXFxuICAgICAgICAgICAgICAgICAgICB9KS5scmMubHlyaWM7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoKGEuZmVlID09IDAgfHwgYS5mZWUgPT0gOCkgJiYgKF8ucHJpdmlsZWdlc1swXS5zdCA+IC0xKSlcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGBodHRwOi8vbXVzaWMuMTYzLmNvbS9zb25nL21lZGlhL291dGVyL3VybD9pZD0ke3QxfS5tcDNgO1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcIm9wZW5cXFwiLCBcXFwid3lcXFwiLCB0MSwgMCwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyBcXFwiI2lzTXVzaWM9dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvL+mmlumhtVxcbiAgICAgICAgICAgICAgICBpZiAoIXQxLm1hdGNoKC9cXFxcPy8pKSB0MSA9IFxcXCJ0b3AvcGxheWxpc3Q/Y2F0PVxcXCIgKyB0MSArIFxcXCImXFxcIjtcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZSgnd3k/cnVsZT3mrYzor43pgILphY0nKS5hamF4KHQxKTtcXG4gICAgICAgICAgICAgICAgKF8ucmVzdWx0IHx8IF8ucGxheWxpc3RzKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVySW1nVXJsIHx8IF8ucGljVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMic6IC8vIOWPkeeOsFxcbiAgICAgICAgICAgIGNhc2UgJzMnOiAvLyDmjpLooYxcXG4gICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSlcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcInd5P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChcXFwiZ2QvdjYvXFxcIiArIHQxLCA5OTk5OSkucGxheWxpc3QudHJhY2tzO1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBfID0gW107XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArICcgLSAnICsgXy5hci5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSxcXG4gICAgICAgICAgICBpbWc6IF8uYWwucGljVXJsLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICgoXy5mZWUgPT0gMCB8fCBfLmZlZSA9PSA4KSAmJiAoXy5wcml2aWxlZ2UgPyAoXy5wcml2aWxlZ2Uuc3QgPiAtMSkgOiAxKSkgPyAwIDogMSxcXG4gICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICB9LCAxKSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSkge1xcbiAgICAgICAgaWYgKGlzVSAhPSBcXFwidXJsXFxcIikge1xcbiAgICAgICAgICAgIF9fID0ge1xcbiAgICAgICAgICAgICAgICBsaWI6IChfKSA9PiB0cnVlLFxcbiAgICAgICAgICAgICAgICBwYWlkOiAoXykgPT4gKChfLmZlZSA9PSAwIHx8IF8uZmVlID09IDgpICYmIChfLnByaXZpbGVnZSA/IChfLnByaXZpbGVnZS5zdCA+IC0xKSA6IDEpKSA/IDAgOiAxLFxcbiAgICAgICAgICAgICAgICBmcmVlOiAoXykgPT4gKChfLmZlZSA9PSAwIHx8IF8uZmVlID09IDgpICYmIChfLnByaXZpbGVnZSA/IChfLnByaXZpbGVnZS5zdCA+IC0xKSA6IDEpKSA/IDEgOiAwXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBzdXJsID0gKHN0eXBlKSA9PiAkLnJlcXVpcmUoXFxcInd5P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheDIoXFxcIi9zZWFyY2gvZ2V0XFxcIiwge1xcbiAgICAgICAgICAgICAgICBzOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICBsaW1pdDogMzAsXFxuICAgICAgICAgICAgICAgIG9mZnNldDogKE1ZX1BBR0UgLSAxKSAqIDMwLFxcbiAgICAgICAgICAgICAgICB0eXBlOiBzdHlwZSxcXG4gICAgICAgICAgICAgICAgc3RyYXRlZ3k6IDUsXFxuICAgICAgICAgICAgICAgIHF1ZXJ5Q29ycmVjdDogdHJ1ZVxcbiAgICAgICAgICAgIH0pLnJlc3VsdDtcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHN1cmwoMSkuc29uZ3M7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVID09PSAxKSByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX1tpc1VdKF8pKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAnIC0gJyArIF8uYXIubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5hbC5waWNVcmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICgoXy5mZWUgPT0gMCB8fCBfLmZlZSA9PSA4KSAmJiAoXy5wcml2aWxlZ2UgPyAoXy5wcml2aWxlZ2Uuc3QgPiAtMSkgOiAxKSkgPyAwIDogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHN1cmwoMTAwMCkucGxheWxpc3RzO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVSA9PT0gMSkgcmV0dXJuIGxpc3Q7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7IC8vIOaQnOe0oiDliIbkuqvpk77mjqVcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4MihcXFwiL3YzL3NvbmcvZGV0YWlsXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IGBbe1xcXCJpZFxcXCI6JHtrZXl3b3JkfX1dYFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBhID0gXy5zb25nc1swXTtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYS5uYW1lICsgJyAtICcgKyBhLmFyLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogYS5hbC5waWNVcmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKChhLmZlZSA9PSAwIHx8IGEuZmVlID09IDgpICYmIChfLnByaXZpbGVnZXNbMF0uc3QgPiAtMSkpID8gMCA6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogYS5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJnZC92Ni9cXFwiICsga2V5d29yZCwgMCkucGxheWxpc3Q7XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uY292ZXJJbWdVcmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4vKiBNeUZyZWVNUDPmrYzljZXop6PmnpDltKnkuobvvIzkuI3mmL7npLpcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ215J1xcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuKi9cXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgYWpheDogZnVuY3Rpb24ocGF0aCwgbikge1xcbiAgICAgICAgaWYgKHBhdGgubWF0Y2goL15nZFxcXFwvdjZcXFxcLy8pKSB7XFxuICAgICAgICAgICAgdXJsID0gcGF0aC5yZXBsYWNlKC9eZ2QoXFxcXC92NlxcXFwvKShcXFxcZCspLywgXFxcImh0dHBzOi8vbXVzaWMuMTYzLmNvbS9hcGkkMXBsYXlsaXN0L2RldGFpbD9pZD0kMiZuPVxcXCIpICsgbjtcXG4gICAgICAgIH0gZWxzZSBpZiAocGF0aC5tYXRjaCgvXmh0dHBzPzpcXFxcL1xcXFwvLykpIHtcXG4gICAgICAgICAgICB1cmwgPSBwYXRoO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAocGF0aC5tYXRjaCgvXFxcXD8vKSkgcGF0aCArPSBcXFwibGltaXQ9MzAmb2Zmc2V0PVxcXCIgKyAoKE1ZX1BBR0UgLSAxKSAqIDMwKTtcXG4gICAgICAgICAgICB1cmwgPSBcXFwiaHR0cHM6Ly9wbC1mZS5jbi9jbG91ZC1tdXNpYy1hcGkvXFxcIiArIHBhdGg7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTAyLjAuMC4wIFNhZmFyaS81MzcuMzZcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogXFxcIm9zPXBjOyBNVVNJQ19VPTAwQjRDMUUzRkQ3NzQxMDc4MEVGMUMwODQwRDA4RjNGNUU3MDMwRTJEMDUyQ0E4RUM5OEE3MzY4RjdBN0Y2NjQ5QjIxNkU5NTMzQTFBMTc0RDcyQ0NBREY5OTU1NDIyOEU4NTJERTQ2QkJEMkVBMkE2QjJBMTQzM0EzREY0OEI2MkVBQTc2RkMxOENENTkyNTZGRUY2RTc2RDM5RkI0MkRGNzZDRTUwNjhDNjlFMzk0NEUzQTZFOEUzQzI2MTM1REJFMEQ5NzkxRkNFMEJENTI0QkQyN0Y2MjI2RkQ2NDYwQjA1NjQ2QTU0OUE1QzQyOUY1RTAxRUJBNEUyRDhENjE1QkQ3MTVBN0QyNDVCMTNEOUU1NzBFODdEMEFEQTYwOEE2MDdGMkZBRUYyMkFGOEVFOTRGODI3QUYxNTBFOUUxQzUxN0NCMEYxNTg4RUY4RjFENjE5NDdDNDM3ODQ5ODVDRjc0RjY5NDU4NzQ4OTYwQ0U5MjA1M0NBNzJCNUZFRjkyQzkzRjEyRjM2NzE0RjBCMzQ2QzJFQUY4OUZBQTUxNkE4OTc0RThDRjUzRDU0OTJERTk1RUQ4NTkxQ0NDRjQ1QUVCNjI3QzkzQjBDRDM3MEFFRkI2NTZFQURBRDAzMUY2ODhBNkJCMkNFM0M5RkEzMUJENjE2NkExNkFCRUJFREFERkNGRUZCRENFRDVENEUxMkZGRjE0MDNDNEYyQjVBM0YyNDIyRUY5RDA4NzhDMEI1MkQwODk2N0Q1OEUyRTlEQUNFNzU0NDA0RTJENkUxRjgxRjUyQTFGMTczNUNBOUZCQjg1RDc1OEY4MUUwQTdDQkE0MUM1NzM5RDI5RTI4NEY2ODQzMEVCMTNFNEY0OTM4OTA4NDAwMzFEM0JEMjdFXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgLy8gd2VhcGlcXG4gICAgYWpheDI6IGZ1bmN0aW9uKHBhdGgsIGpzb24sIGhlYWQpIHtcXG4gICAgICAgIENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vYXNzZXRzL2NyeXB0by1qYXZhLmpzXFxcIik7XFxuICAgICAgICBzdHJfa2V5ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFwiMENvSlVtNlF5dzhXOGp1ZFxcXCIpO1xcbiAgICAgICAgc3RyX2l2ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFwiMDEwMjAzMDQwNTA2MDcwOFxcXCIpO1xcbiAgICAgICAgYWVzID0gd29yZCA9PiBDcnlwdG9VdGlsLkFFUy5lbmNyeXB0KHdvcmQsIHN0cl9rZXksIHtcXG4gICAgICAgICAgICBtb2RlOiBcXFwiQUVTL0NCQy9QS0NTN1BhZGRpbmdcXFwiLFxcbiAgICAgICAgICAgIGl2OiBzdHJfaXZcXG4gICAgICAgIH0pLnRvQmFzZTY0KF9iYXNlNjQuTk9fV1JBUCk7XFxuXFxuICAgICAgICBwYXJhbXMgPSBhZXMoYWVzKEpTT04uc3RyaW5naWZ5KGpzb24pKSk7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShwb3N0UEMocGF0aC5yZXBsYWNlKFxcXCIvXFxcIiwgXFxcImh0dHBzOi8vaW50ZXJmYWNlLm11c2ljLjE2My5jb20vd2VhcGkvXFxcIiksIHtcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxcbiAgICAgICAgICAgICAgICBlbmNTZWNLZXk6IFxcXCJiZjUwZDBiY2Y1NjgzM2IwNmQ4ZDEyMTk0OTZhNDUyYTFkODYwZmQ1OGExNGMwYWFmYmEzZTc3MDEwNGNhNzdkYzY4NTZjYjMxMGVkMzMwOTAzOWU2ODY1MDgxYmU0ZGRjMmRmNTI2NjMzNzNiMjBiNzBhYzI1YjRkMGM2Y2E0NjZkYWVmNmI1MDE3NGU5MzUzNmUyZDU4MGM0OWU3MDY0OWFkMTkzNjU4NDg5OWU4NTcyMmViODNjZWRkZmI0ZjU2YzExNzJmY2E1ZTYwNTkyZDBlNmVlM2U4ZTAyYmUxZmU2ZTUzZjI4NWIwMzg5MTYyZDhlNmRkYzU1Mzg1N2NkXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZCB8fCB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9LFxcblxcblxcblxcbiAgICAvLyBlYXBpXFxuICAgIGFqYXgzOiBmdW5jdGlvbihwYXRoLCBqc29uLCBoZWFkKSB7XFxuICAgICAgICBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXCIpO1xcblxcbiAgICAgICAgcGFyYW1zID0gW3BhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24pXTtcXG4gICAgICAgIHBhcmFtcy5wdXNoKG1kNShcXG4gICAgICAgICAgICBcXFwibm9ib2R5XFxcIiArXFxuICAgICAgICAgICAgcGFyYW1zLmpvaW4oXFxcInVzZVxcXCIpICtcXG4gICAgICAgICAgICBcXFwibWQ1Zm9yZW5jcnlwdFxcXCJcXG4gICAgICAgICkpO1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocG9zdFBDKHBhdGgucmVwbGFjZShcXFwiL1xcXCIsIFxcXCJodHRwczovL2ludGVyZmFjZS5tdXNpYy4xNjMuY29tL2VcXFwiKSwge1xcbiAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBDcnlwdG9VdGlsLkFFUy5lbmNyeXB0KFxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmpvaW4oXFxcIi0zNmNkNDc5YjZiNS1cXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcImU4MmNrZW5oOGRpY2hlbjhcXFwiKSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IFxcXCJBRVMvRUNCL1BLQ1M3UGFkZGluZ1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICkudG9IZXgoKVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZCB8fCB7fVxcblxcbiAgICAgICAgfSkpO1xcbiAgICB9LFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKduGtnXCIsXCJwYXRoXCI6XCJrZ1wiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJykpLnJ1bGUpO1xcbmNvbnN0IHRoaXNfcGxhdGZvcm0gPSBcXFwia2dcXFwiO1xcbiQuZXhwb3J0cyA9IHtcXG5cXG5cXG4gICAgaVRhZzogZnVuY3Rpb24oKSB7XFxuICAgICAgICBfID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cDovL3d3dzIua3Vnb3Uua3Vnb3UuY29tL3l1ZWt1L3Y5L3NwZWNpYWwvZ2V0U3BlY2lhbD9pc19zbWFydHk9MVxcXCIpKS5kYXRhO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl0gPSB7XFxuICAgICAgICAgICAg5pyA5pawOiBcXFwiXFxcIlxcbiAgICAgICAgfTtcXG4gICAgICAgIGl0cyA9IF8uaG90VGFnLmRhdGE7XFxuICAgICAgICBmb3IgKGkgaW4gaXRzKSB7XFxuICAgICAgICAgICAgaXQgPSBpdHNbaV07XFxuICAgICAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1baXQuc3BlY2lhbF9uYW1lXSA9IGl0LnNwZWNpYWxfaWQ7XFxuICAgICAgICB9XFxuICAgICAgICBfID0gXy50YWdpZHM7XFxuICAgICAgICBmb3IgKG5hbWUgaW4gXykge1xcbiAgICAgICAgICAgIGlUYWdbbmFtZV0gPSB7fTtcXG4gICAgICAgICAgICBfW25hbWVdLmRhdGEubWFwKFxcbiAgICAgICAgICAgICAgICBfID0+IGlUYWdbbmFtZV1bXy5uYW1lXSA9IF8uaWRcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgfVxcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl0gPSB7fTtcXG4gICAgICAgIEpTT04ucGFyc2UoZmV0Y2goJ2h0dHA6Ly9tb2JpbGVjZG5iai5rdWdvdS5jb20vYXBpL3YzL3JhbmsvbGlzdCcpKS5kYXRhLmluZm8ubWFwKF8gPT4ge1xcbiAgICAgICAgICAgIG5hbWUgPSBbbnVsbCwgXFxcIuaOqOiNkOamnFxcXCIsIFxcXCLmlrDmrYzmppxcXFwiLCBcXFwi54m56Imy5qacXFxcIiwgXFxcIuWFqOeQg+amnFxcXCIsIFxcXCLmm7Lpo47mppxcXFwiXVtfLmNsYXNzaWZ5XTtcXG4gICAgICAgICAgICBpZiAoIWlUYWdbXFxcIuaOkuihjFxcXCJdW25hbWVdKSBpVGFnW1xcXCLmjpLooYxcXFwiXVtuYW1lXSA9IFtdO1xcbiAgICAgICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdW25hbWVdLnB1c2goRXh0cmEoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXy5yYW5rbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBfLmltZ3VybCxcXG4gICAgICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICAgICAgenlpZDogXy5yYW5raWQsXFxuICAgICAgICAgICAgfSwgMSwgMSkpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwia2dfaVRhZ1xcXCIsIGlUYWcpO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBsYXp5OiBmdW5jdGlvbihwbGF0Zm9ybSwgdDEsIHQyKSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzogLy8g6K+m5oOFXFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcImtnP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChbe1xcbiAgICAgICAgICAgICAgICAgICAgaGFzaDogdDFcXG4gICAgICAgICAgICAgICAgfV0pWzBdO1xcbiAgICAgICAgICAgICAgICBbYXJ0aXN0LCBuYW1lXSA9IF8ubmFtZS5zcGxpdCgnIC0gJyk7XFxuICAgICAgICAgICAgICAgIGFsYnVtX2lkID0gXy5yZWNvbW1lbmRfYWxidW1faWQ7XFxuICAgICAgICAgICAgICAgIGFsYnVtX2F1ZGlvX2lkID0gXy5hbGJ1bV9hdWRpb19pZDtcXG4gICAgICAgICAgICAgICAgcmVsYXRlX2dvb2RzID0gXy5yZWxhdGVfZ29vZHMuc2xpY2UoMCwgNCk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gcmVsYXRlX2dvb2RzLm1hcCgoXywgaSkgPT4gdHNbaSArIDFdICsgU2l6ZShfLmluZm8uZmlsZXNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGFyciwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgoYXJyLCB0MSwgbmFtZSwgYXJ0aXN0LCByZWxhdGVfZ29vZHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5HZXRNdXNpY1VybChcXFwiZG93blxcXCIsIFxcXCJrZ1xcXCIsIHQxLCBpLCBuYW1lLCBhcnRpc3QsIHJlbGF0ZV9nb29kcyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgdDEsIG5hbWUsIGFydGlzdCwgcmVsYXRlX2dvb2RzKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB1ID0gYGh0dHBzOi8vd3d3YXBpLmt1Z291LmNvbS95eS9pbmRleC5waHA/cj1wbGF5JTJGZ2V0ZGF0YSZoYXNoPSR7dDF9JmFsYnVtX2lkPSR7Xy5yZWNvbW1lbmRfYWxidW1faWR9Jm1pZD0ke1IoMzIpfSZwbGF0aWQ9NGA7XFxuICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoKHUpKS5kYXRhO1xcbiAgICAgICAgICAgICAgICBscmMgPSBfLmx5cmljcztcXG4gICAgICAgICAgICAgICAgaWYgKCFscmMpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwOi8va3Jjcy5rdWdvdS5jb20vc2VhcmNoP3Zlcj0xJm1hbj15ZXMmY2xpZW50PW1vYmkma2V5d29yZD0mZHVyYXRpb249Jmhhc2g9XFxcIiArIHQxICsgXFxcIiZhbGJ1bV9hdWRpb19pZD1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fID0gSlNPTi5wYXJzZShmZXRjaCh1KSkuY2FuZGlkYXRlc1swXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX18gJiYgX18uaWQgJiYgX18uYWNjZXNza2V5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cDovL2x5cmljcy5rdWdvdS5jb20vZG93bmxvYWQ/dmVyPTEmY2xpZW50PXBjJmlkPVxcXCIgKyBfXy5pZCArIFxcXCImYWNjZXNza2V5PVxcXCIgKyBfXy5hY2Nlc3NrZXkgKyBcXFwiJmZtdD1scmMmY2hhcnNldD11dGY4XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJjID0gYmFzZTY0RGVjb2RlKEpTT04ucGFyc2UoZmV0Y2godSkpLmNvbnRlbnQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBpZiAoXy5wcml2aWxlZ2UgPT0gMCB8fCBfLnByaXZpbGVnZSA9PSA4KSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSBfLnBsYXlfdXJsIHx8IF8ucGxheV9iYWNrdXBfdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cmwgPSAkLnJlcXVpcmUoXFxcImtnP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwodDEsICcxMjgnLCBhbGJ1bV9pZCwgYWxidW1fYXVkaW9faWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vbS5rdWdvdS5jb20vYXBwL2kvZ2V0U29uZ0luZm8ucGhwP2NtZD1wbGF5SW5mbyZoYXNoPVxcXCIgKyB0MSkpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBlbHNlXFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcIm9wZW5cXFwiLCBcXFwia2dcXFwiLCB0MSwgMCwgbmFtZSwgYXJ0aXN0LCByZWxhdGVfZ29vZHMpO1xcbiAgICAgICAgICAgICAgICBpZiAodXJsLm1hdGNoKFxcXCJ0b2FzdDovL1xcXCIpKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOmmlumhtVxcbiAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cDovL3d3dzIua3Vnb3Uua3Vnb3UuY29tL3l1ZWt1L3Y5L3NwZWNpYWwvZ2V0U3BlY2lhbD9pc19hamF4PTEmY2RuPWNkbiZ0PTUmcGFnZXNpemU9MzAmYz1cXFwiICsgdDEgKyBcXFwiJnA9XFxcIiArIE1ZX1BBR0U7XFxuICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmV0Y2godXJsKSkuc3BlY2lhbF9kYi5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5zcGVjaWFsbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgenlpZDogXy5zcGVjaWFsaWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMic6IC8vIOWPkeeOsFxcbiAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBfID0gZXhlY3V0ZVdlYlJ1bGUoYGh0dHA6Ly93d3cyLmt1Z291Lmt1Z291LmNvbS95dWVrdS92OS9zcGVjaWFsL3NpbmdsZS8ke3QxfS01LTk5OTk5Lmh0bWw/anNvbj10cnVlYCwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGdsb2JhbC5kYXRhKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuanMnLCAnLmNzcycsICcuanBnJywgJy5wbmcnLCAnLmdpZicsICcuc3ZnJywgJy5pY28nXVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJrZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoSlNPTi5wYXJzZShfKSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBfID0gW107XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzMnOiAvLyDmjpLooYxcXG4gICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2goYGh0dHA6Ly9tb2JpbGVjZG5iai5rdWdvdS5jb20vYXBpL3YzL3Jhbmsvc29uZz9wYWdlc2l6ZT0zMCZwYWdlPSR7TVlfUEFHRX0mcmFua2lkPSR7dDF9YCkpLmRhdGEuaW5mbztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBkID0gW107XFxuICAgICAgICBfLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICB0aXRsZTogKF8uZmlsZW5hbWUgfHwgXy5uYW1lKS5zcGxpdCgnIC0gJykucmV2ZXJzZSgpLmpvaW4oJyAtICcpLFxcbiAgICAgICAgICAgIGltZzogXy5hbGJ1bV9zaXphYmxlX2NvdmVyIHx8IF8uaW5mby5pbWFnZSxcXG4gICAgICAgICAgICBjb250ZW50OiAoXy5wcml2aWxlZ2UgPT0gMCB8fCBfLnByaXZpbGVnZSA9PSA4KSA/IDAgOiAxLFxcbiAgICAgICAgICAgIHp5aWQ6IF8uaGFzaFxcbiAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBzZWFyY2g6IGZ1bmN0aW9uKHBsYXRmb3JtLCBrZXl3b3JkLCBpc1UsIHJ1bikge1xcbiAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgbGliOiAoXykgPT4gdHJ1ZSxcXG4gICAgICAgICAgICBwYWlkOiAoXykgPT4gKF8ucHJpdmlsZWdlICE9IDAgJiYgXy5wcml2aWxlZ2UgIT0gOCksXFxuICAgICAgICAgICAgZnJlZTogKF8pID0+IChfLnByaXZpbGVnZSA9PSAwIHx8IF8ucHJpdmlsZWdlID09IDgpXFxuICAgICAgICB9O1xcbiAgICAgICAgc3VybCA9IChzdHlwZSkgPT4gSlNPTi5wYXJzZShmZXRjaChgaHR0cDovL21vYmlsZWNkbi5rdWdvdS5jb20vYXBpL3YzL3NlYXJjaC8ke3N0eXBlfT9mb3JtYXQ9anNvbiZrZXl3b3JkPSR7a2V5d29yZH0mcGFnZT0ke01ZX1BBR0V9JnBhZ2VzaXplPTMwYCkpLmRhdGEuaW5mbztcXG4gICAgICAgIHN1cmwyID0gKHBsYXRmb3JtKSA9PiB7XFxuICAgICAgICAgICAgbWlkID0gUigzMik7XFxuICAgICAgICAgICAgYXJyID0gW1xcbiAgICAgICAgICAgICAgICBcXFwic3JjYXBwaWQ9MjkxOVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJjbGllbnR2ZXI9MTAwMFxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJjbGllbnR0aW1lPVxcXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcXG4gICAgICAgICAgICAgICAgXFxcIm1pZD1cXFwiICsgbWlkLFxcbiAgICAgICAgICAgICAgICBcXFwidXVpZD1cXFwiICsgbWlkLFxcbiAgICAgICAgICAgICAgICBcXFwiZGZpZD0tXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcImFwcGlkPTEwNThcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwidG9rZW49XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJpZD0wXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcImtleXdvcmQ9XFxcIiArIGtleXdvcmQsXFxuICAgICAgICAgICAgICAgIFxcXCJwYWdlPVxcXCIgKyBNWV9QQUdFLFxcbiAgICAgICAgICAgICAgICBcXFwicGFnZXNpemU9MzBcXFwiLFxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybVxcbiAgICAgICAgICAgIF0uc29ydCgpO1xcbiAgICAgICAgICAgIHNpZ25hdHVyZSA9IFxcXCJOVlBoNW9vNzE1ejVESVdBZVFsaE1Ec1dYWFFWNGh3dFxcXCI7XFxuICAgICAgICAgICAgc2lnbmF0dXJlID0gbWQ1KHNpZ25hdHVyZSArIGFyci5qb2luKFxcXCJcXFwiKSArIHNpZ25hdHVyZSk7XFxuICAgICAgICAgICAgdXJsID0gXFxcImh0dHBzOi8vZ2F0ZXdheS5rdWdvdS5jb20vY29tcGxleHNlYXJjaC92My9zZWFyY2gvc29uZz9cXFwiICsgYXJyLmpvaW4oXFxcIiZcXFwiKSArIFxcXCImc2lnbmF0dXJlPVxcXCIgKyBzaWduYXR1cmU7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2godXJsKSkuZGF0YS5saXN0cztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgaWYgKGlzVSA9PSAnZnJlZScpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdXJsMihcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocnVuID09ICdydW4nKSByZXR1cm4gbGlzdFswXTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgPSBzdXJsKCdzb25nJyk7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gc3VybDIoXFxcInBsYXRmb3JtPVdlYkZpbHRlclxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1biA9PSAnc3JlYycpIHJldHVybiBsaXN0O1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxpc3QgPSAkLnJlcXVpcmUoXFxcImtnP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChsaXN0KTtcXG4gICAgICAgICAgICAgICAgbGlzdC5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX19baXNVXShfKSkgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoXy5maWxlbmFtZSB8fCBfLm5hbWUpLnNwbGl0KCcgLSAnKS5yZXZlcnNlKCkuam9pbignIC0gJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmFsYnVtX3NpemFibGVfY292ZXIgfHwgXy5pbmZvLmltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChfLnByaXZpbGVnZSA9PSAwIHx8IF8ucHJpdmlsZWdlID09IDgpID8gMCA6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5oYXNoXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgc3VybCgnc3BlY2lhbCcpLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnNwZWNpYWxuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltZ3VybHx8Xy5pbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgenlpZDogXy5zcGVjaWFsaWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfSxcXG5cXG5cXG4gICAgYWpheDogZnVuY3Rpb24ocmVzb3VyY2UpIHtcXG4gICAgICAgIHJlc291cmNlID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIFxcXCJyZWxhdGVcXFwiOiAxLFxcbiAgICAgICAgICAgIFxcXCJ1c2VyaWRcXFwiOiBcXFwiMjYyNjQzMTUzNlxcXCIsXFxuICAgICAgICAgICAgXFxcInZpcFxcXCI6IDEsXFxuICAgICAgICAgICAgXFxcInRva2VuXFxcIjogXFxcIlxcXCIsXFxuICAgICAgICAgICAgXFxcImFwcGlkXFxcIjogMTAwMSxcXG4gICAgICAgICAgICBcXFwiYmVoYXZpb3JcXFwiOiBcXFwicGxheVxcXCIsXFxuICAgICAgICAgICAgXFxcImFyZWFfY29kZVxcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgICAgICBcXFwiY2xpZW50dmVyXFxcIjogXFxcIjg5OTBcXFwiLFxcbiAgICAgICAgICAgIFxcXCJuZWVkX2hhc2hfb2Zmc2V0XFxcIjogMSxcXG4gICAgICAgICAgICBcXFwicmVzb3VyY2VcXFwiOiByZXNvdXJjZS5tYXAoXyA9PiAoe1xcbiAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiAwLFxcbiAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IFxcXCJhdWRpb1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJoYXNoXFxcIjogXy5oYXNoIHx8IF8uRmlsZUhhc2hcXG4gICAgICAgICAgICB9KSlcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHA6Ly9tZWRpYS5zdG9yZS5rdWdvdS5jb20vdjEvZ2V0X3Jlc19wcml2aWxlZ2VcXFwiLCB7XFxuICAgICAgICAgICAgYm9keTogcmVzb3VyY2UsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pKS5kYXRhO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBHZXRNdXNpY1VybDogZnVuY3Rpb24oaGFzaCwgcXVhbGl0eSwgYWxidW1faWQsIGFsYnVtX2F1ZGlvX2lkLCB1c2VyaWQsIHRva2VuLCBhcHBpZCwgc2lnbmtleSkge1xcbiAgICAgICAgbWlkID0gUigzMik7XFxuICAgICAgICBkYXRlID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuICAgICAgICBoYXNoID0gU3RyaW5nKGhhc2gpLnRvTG93ZXJDYXNlKCk7XFxuICAgICAgICBxdWFsaXR5ID0gcXVhbGl0eSB8fCBcXFwiMTI4XFxcIjtcXG4gICAgICAgIGFsYnVtX2lkID0gYWxidW1faWQgfHwgXFxcIlxcXCI7XFxuICAgICAgICBhbGJ1bV9hdWRpb19pZCA9IGFsYnVtX2F1ZGlvX2lkIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgdXNlcmlkID0gdXNlcmlkIHx8IFxcXCIwXFxcIjtcXG4gICAgICAgIHRva2VuID0gdG9rZW4gfHwgXFxcIlxcXCI7XFxuICAgICAgICBhcHBpZCA9IGFwcGlkIHx8IFxcXCIxMDA1XFxcIjtcXG4gICAgICAgIHNpZ25rZXkgPSBzaWdua2V5IHx8IFxcXCJPSWx3aWVrczI4ZGsyazA5Mmxrc2kyVUlrcFxcXCI7XFxuXFxuICAgICAgICBwYXJhbXMgPSBbXFxuICAgICAgICAgICAgJ3F1YWxpdHk9JyArIHF1YWxpdHksXFxuICAgICAgICAgICAgJ2hhc2g9JyArIGhhc2gsXFxuICAgICAgICAgICAgJ21pZD0nICsgbWlkLFxcbiAgICAgICAgICAgICdhcHBpZD0nICsgYXBwaWQsXFxuICAgICAgICAgICAgJ3VzZXJpZD0nICsgdXNlcmlkLFxcbiAgICAgICAgICAgICdrZXk9JyArIG1kNShoYXNoICsgXFxcIjU3YWUxMmViNjg5MDIyM2UzNTVjY2ZjYjc0ZWRmNzBkXFxcIiArIGFwcGlkICsgbWlkICsgdXNlcmlkKSxcXG4gICAgICAgICAgICAnYWxidW1faWQ9JyArIGFsYnVtX2lkLFxcbiAgICAgICAgICAgICdhbGJ1bV9hdWRpb19pZD0nICsgYWxidW1fYXVkaW9faWQsXFxuICAgICAgICAgICAgJ2NsaWVudHRpbWU9JyArIE1hdGguZmxvb3IoZGF0ZSAvIDEwMDApLFxcbiAgICAgICAgICAgICdvcGVuX3RpbWU9JyArICQuZGF0ZUZvcm1hdChkYXRlLCAneXl5eU1NZGQnKSxcXG4gICAgICAgICAgICAndG9rZW49JyArIHRva2VuLFxcbiAgICAgICAgICAgICdhcmVhX2NvZGU9MScsXFxuICAgICAgICAgICAgJ21vZHVsZT0nLFxcbiAgICAgICAgICAgICdzc2FfZmxhZz1pc19mcm9tdHJhY2snLFxcbiAgICAgICAgICAgICdjbGllbnR2ZXI9MTA1MTgnLCAvLzEyMDI5XFxuICAgICAgICAgICAgJ3ZpcFR5cGU9NicsXFxuICAgICAgICAgICAgJ3B0eXBlPTAnLFxcbiAgICAgICAgICAgICdhdXRoPScsXFxuICAgICAgICAgICAgJ210eXBlPTAnLFxcbiAgICAgICAgICAgICdiZWhhdmlvcj1wbGF5JyxcXG4gICAgICAgICAgICAncGlkPTInLFxcbiAgICAgICAgICAgICdkZmlkPS0nLFxcbiAgICAgICAgICAgICdwaWR2ZXJzaW9uPTMwMDEnXFxuICAgICAgICBdLnNvcnQoKTtcXG4gICAgICAgIHNpZ25hdHVyZSA9IG1kNShzaWdua2V5ICsgcGFyYW1zLmpvaW4oXFxcIlxcXCIpICsgc2lnbmtleSk7XFxuICAgICAgICBib2R5XyA9IGZldGNoKFxcXCJodHRwczovL2dhdGV3YXkua3Vnb3UuY29tL3Y1L3VybD9cXFwiICsgcGFyYW1zLmpvaW4oXFxcIiZcXFwiKSArIFxcXCImc2lnbmF0dXJlPVxcXCIgKyBzaWduYXR1cmUsIHtcXG4gICAgICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiQW5kcm9pZDcxMi1BbmRyb2lkUGhvbmUtMTA1MTgtMTgtMC1OZXRNdXNpYy13aWZpXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIktHLVRIYXNoXFxcIjogXFxcIjNlNWVjNmJcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiS0ctUmVjXFxcIjogXFxcIjFcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiS0ctUkNcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ4LXJvdXRlclxcXCI6IFxcXCJ0cmFja2VyLmt1Z291LmNvbVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGJvZHlfKVtcXFwidXJsXFxcIl1bMF07XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9seG11c2ljcy9seC1tdXNpYy1hcGktc2VydmVyLXB5dGhvbi9ibG9iL21haW4vbW9kdWxlcy9rZy9saXRlX3NpZ25pbi5weVxcbiAgICBMaXRlX1NpZ25pbjogZnVuY3Rpb24odXNlcmlkLCB0b2tlbiwgc2lnbmtleSwgaXNqeCkge1xcbiAgICAgICAgTVlfUEFHRSA9IDE7XFxuICAgICAgICBtaXhzb25naWQgPSAkLnJlcXVpcmUoXFxcImtnP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2VhcmNoKFxcXCIwXFxcIiwgXFxcIlxcXCIsIFxcXCJmcmVlXFxcIiwgXFxcInJ1blxcXCIpW1xcXCJNaXhTb25nSURcXFwiXTtcXG4gICAgICAgIF9ib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIFxcXCJtaXhzb25naWRcXFwiOiBOdW1iZXIobWl4c29uZ2lkKVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBtaWQgPSBSKDMyLCBcXFwiMTIzNDU2Nzg5MFxcXCIpO1xcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcbiAgICAgICAgcGFyYW1zID0gW1xcbiAgICAgICAgICAgICd1c2VyaWQ9JyArIHVzZXJpZCxcXG4gICAgICAgICAgICAndG9rZW49JyArIHRva2VuLFxcbiAgICAgICAgICAgICdjbGllbnR0aW1lPScgKyBNYXRoLmZsb29yKGRhdGUgLyAxMDAwKSxcXG4gICAgICAgICAgICAnYXBwaWQ9MzExNicsXFxuICAgICAgICAgICAgJ2NsaWVudHZlcj0xMDUxOCcsXFxuICAgICAgICAgICAgJ21pZD0nICsgbWlkLFxcbiAgICAgICAgICAgICd1dWlkPScgKyBtZDUobWlkKSxcXG4gICAgICAgICAgICAnZGZpZD0tJ1xcbiAgICAgICAgXS5zb3J0KCk7XFxuICAgICAgICBzaWduYXR1cmUgPSBtZDUoXFxuICAgICAgICAgICAgc2lnbmtleSArXFxuICAgICAgICAgICAgcGFyYW1zLmpvaW4oXFxcIlxcXCIpICtcXG4gICAgICAgICAgICBfYm9keSArXFxuICAgICAgICAgICAgc2lnbmtleVxcbiAgICAgICAgKTtcXG5cXG4gICAgICAgIHJlcSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vZ2F0ZXdheS5rdWdvdS5jb20vdjIvcmVwb3J0L2xpc3Rlbl9zb25nP1xcXCIgKyBwYXJhbXMuam9pbihcXFwiJlxcXCIpICsgXFxcIiZzaWduYXR1cmU9XFxcIiArIHNpZ25hdHVyZSwge1xcbiAgICAgICAgICAgIFxcXCJtZXRob2RcXFwiOiBcXFwiUE9TVFxcXCIsXFxuICAgICAgICAgICAgXFxcImJvZHlcXFwiOiBfYm9keSxcXG4gICAgICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiQW5kcm9pZDcxMi1BbmRyb2lkUGhvbmUtMTA1MTgtMTgtMC1OZXRNdXNpYy13aWZpXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIktHLVRIYXNoXFxcIjogXFxcIjNlNWVjNmJcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiS0ctUmVjXFxcIjogXFxcIjFcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiS0ctUkNcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ4LXJvdXRlclxcXCI6IFxcXCJ5b3V0aC5rdWdvdS5jb21cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpO1xcbiAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT0gMSkge1xcbiAgICAgICAgICAgIGlmIChpc2p4KSB7XFxuICAgICAgICAgICAgICAgIGp4bGlzdCA9IHN0b3JhZ2UwLmdldEl0ZW0oJ2p4bGlzdF9rZycsIFtdKVxcbiAgICAgICAgICAgICAgICAgICAgLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KF8udGl0bGUgKyBfLnVybCkgPT0gXFxcImM4NzdhZTcyYjk3YmMyNjcyMGFkOGIxYTM5MzYyZDQ3XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLnRpbWUgPSBkYXRlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLnNpZ25pbiA9IDA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0X2tnJywganhsaXN0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+etvuWIsOaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+etvuWIsOaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIGlmIChyZXEuZXJyb3JfY29kZSA9PSAxMzAwMTIpIHsgLy8g562+5Yiw6L+H5LqG77yfICAgICAgXFxuICAgICAgICAgICAgaWYgKGlzangpIHtcXG4gICAgICAgICAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0X2tnJywgW10pXFxuICAgICAgICAgICAgICAgICAgICAubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZDUoXy50aXRsZSArIF8udXJsKSA9PSBcXFwiYzg3N2FlNzJiOTdiYzI2NzIwYWQ4YjFhMzkzNjJkNDdcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8udGltZSA9IGRhdGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uc2lnbmluID0gMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCdqeGxpc3Rfa2cnLCBqeGxpc3QpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v562+5Yiw5aSx6LSl77ya5LuK5aSp5bey57uP562+5Yiw6L+H5LqG77yfXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v562+5Yiw5aSx6LSl77ya5LuK5aSp5bey57uP562+5Yiw6L+H5LqG77yfXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nrb7liLDlpLHotKXvvJpcXFwiICsgcmVxLmVycm9yX21zZztcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKduWt3XCIsXCJwYXRoXCI6XCJrd1wiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJykpLnJ1bGUpO1xcbmNvbnN0IHRoaXNfcGxhdGZvcm0gPSBcXFwia3dcXFwiO1xcbmNvbnN0IHBjYXBpID0gXFxcImh0dHBzOi8vd3d3Lmt1d28uY24vYXBpL3d3dy9cXFwiO1xcbmZ1bmN0aW9uIGFqYXgodXJsKSB7XFxuICAgIENvb2tpZSA9IEpTT04ucGFyc2UoZmV0Y2hQQygnaHR0cHM6Ly93d3cua3V3by5jbi9mYXZpY29uLmljbz92PTEnLCB7XFxuICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICB9KSkuaGVhZGVyc1snc2V0LWNvb2tpZSddO1xcbiAgICBDb29raWUgPSBTdHJpbmcoQ29va2llKS5yZXBsYWNlKC87LiovLCAnJyk7XFxuICAgIFtlLCB0XSA9IENvb2tpZS5zcGxpdCgnPScpO1xcbiAgICB0ID0gdW5lc2NhcGUodCk7XFxuICAgIGZvciAodmFyIG4gPSBcXFwiXFxcIiwgaSA9IDA7IGkgPCBlLmxlbmd0aDsgaSsrKSBuICs9IGUuY2hhckNvZGVBdChpKS50b1N0cmluZygpO1xcbiAgICBuID0gU3RyaW5nKG4pO1xcbiAgICB2YXIgciA9IE1hdGguZmxvb3Iobi5sZW5ndGggLyA1KSxcXG4gICAgICAgIG8gPSBwYXJzZUludChuLmNoYXJBdChyKSArIG4uY2hhckF0KDIgKiByKSArIG4uY2hhckF0KDMgKiByKSArIG4uY2hhckF0KDQgKiByKSArIG4uY2hhckF0KDUgKiByKSksXFxuICAgICAgICBsID0gTWF0aC5jZWlsKGUubGVuZ3RoIC8gMiksXFxuICAgICAgICBjID0gTWF0aC5wb3coMiwgMzEpIC0gMTtcXG4gICAgdmFyIGQgPSBNYXRoLnJvdW5kKDFlOSAqIE1hdGgucmFuZG9tKCkpICUgMWU4O1xcbiAgICBmb3IgKG4gKz0gZDsgbi5sZW5ndGggPiAxMDspXFxuICAgICAgICBuID0gKHBhcnNlSW50KG4uc3Vic3RyaW5nKDAsIDEwKSkgKyBwYXJzZUludChuLnN1YnN0cmluZygxMCwgbi5sZW5ndGgpKSkudG9TdHJpbmcoKTtcXG4gICAgbiA9IChvICogbiArIGwpICUgYztcXG4gICAgdmFyIGggPSBcXFwiXFxcIixcXG4gICAgICAgIGYgPSBcXFwiXFxcIjtcXG4gICAgZm9yIChpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXFxuICAgICAgICBmICs9IChoID0gcGFyc2VJbnQodC5jaGFyQ29kZUF0KGkpIF4gTWF0aC5mbG9vcihuIC8gYyAqIDI1NSkpKSA8IDE2ID8gXFxcIjBcXFwiICsgaC50b1N0cmluZygxNikgOiBoLnRvU3RyaW5nKDE2KSxcXG4gICAgICAgIG4gPSAobyAqIG4gKyBsKSAlIGM7XFxuICAgIGZvciAoZCA9IGQudG9TdHJpbmcoMTYpOyBkLmxlbmd0aCA8IDg7KVxcbiAgICAgICAgZCA9IFxcXCIwXFxcIiArIGQ7XFxuICAgIFNlY3JldCA9IGYgKyBkO1xcbiAgICB1cmwgKz0gYGh0dHBzU3RhdHVzPTEmcmVxSWQ9JHtSKDgpfS0ke1IoNCl9LSR7Uig0KX0tJHtSKDQpfS0ke1IoMTIpfSZwbGF0PXdlYl93d3cmZnJvbT1gO1xcbiAgICBnZXRkYXRhID0gKGFqYXhlcnIpID0+IHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8gPSBKU09OLnBhcnNlKGZldGNoUEModXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8va3V3by5jbi8nLFxcbiAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6IENvb2tpZSxcXG4gICAgICAgICAgICAgICAgICAgICdTZWNyZXQnOiBTZWNyZXRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGFqYXhlcnIgPCAyID8gZ2V0ZGF0YShhamF4ZXJyICsgMSkgOiBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZ2V0ZGF0YSgwKTtcXG59XFxuJC5leHBvcnRzID0ge1xcbiAgICBpVGFnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdID0ge307XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5q+P5pel5o6o6I2QXFxcIl0gPSBcXFwicmNtL2luZGV4L3BsYXlsaXN0P2lkPXJjbVxcXCI7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5pyA5paw57K+6YCJXFxcIl0gPSBcXFwiY2xhc3NpZnkvcGxheWxpc3QvZ2V0UmNtUGxheUxpc3Q/b3JkZXI9bmV3XFxcIjtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLng63pl6jnsr7pgIlcXFwiXSA9IFxcXCJjbGFzc2lmeS9wbGF5bGlzdC9nZXRSY21QbGF5TGlzdD9vcmRlcj1ob3RcXFwiO1xcbiAgICAgICAgYWpheChwY2FwaSArIFxcXCJwbGF5bGlzdC9nZXRUYWdMaXN0P1xcXCIpLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpZiAoXy5kYXRhLmxlbmd0aCkge1xcbiAgICAgICAgICAgICAgICBfLm5hbWUgPSBfLm5hbWUucmVwbGFjZSgn5rWB5rS+JywgJycpO1xcbiAgICAgICAgICAgICAgICBpVGFnW18ubmFtZV0gPSB7fTtcXG4gICAgICAgICAgICAgICAgXy5kYXRhLm1hcChfXyA9PlxcbiAgICAgICAgICAgICAgICAgICAgaVRhZ1tfLm5hbWVdW19fLm5hbWVdID0gXFxcImNsYXNzaWZ5L3BsYXlsaXN0L2dldFRhZ1BsYXlMaXN0P2lkPVxcXCIgKyBfXy5pZFxcbiAgICAgICAgICAgICAgICApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl0gPSB7fTtcXG4gICAgICAgIGFqYXgocGNhcGkgKyBcXFwiYmFuZy9iYW5nL2JhbmdNZW51P1xcXCIpLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXVtfLm5hbWVdID0gXy5saXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBfLnBpYyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICAgICAgenlpZDogXy5zb3VyY2VpZFxcbiAgICAgICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImt3X2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0Mikge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOatjOabsuivpuaDhVxcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgaSA9IDE7XFxuICAgICAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cDovL2RhdGFjZW50ZXIua3V3by5jbi9kLmM/Y21rZXk9cGxpc3RfcGwyMDEyJmZ0PW11c2ljJnJlc2VuYz11dGY4Jmlkcz1cXFwiICsgdDEpKVswXTtcXG4gICAgICAgICAgICAgICAgICAgIG4gPSBfLk5fTUlORk87XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgb2YgWzEyOCwgMzIwLCAyMDAwLCA0MDAwXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IG5ldyBSZWdFeHAoJ2JpdHJhdGU6JyArIGsgKyAnLGZvcm1hdDpbXixdKyxzaXplOihbXjtdKyknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVnID0gbi5tYXRjaChyZWcpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzW2ldICsgcmVnWzFdLnJlcGxhY2UoL1xcXFxzKm1iL2ksIFxcXCIgTUJcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChhcnIsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKGFyciwgdDEsIG5hbWUsIGFydGlzdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBhcnIuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJkb3duXFxcIiwgXFxcImt3XFxcIiwgdDEsIGksIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgdDEsIF8ubmFtZSwgXy5hcnRpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIOatjOivjVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgYWpheChcXFwiaHR0cDovL20ua3V3by5jbi9uZXdoNS9zaW5nbGVzL3NvbmdpbmZvYW5kbHJjP211c2ljSWQ9XFxcIiArIHQxICsgXFxcIiZcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9IF8ubHJjbGlzdC5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbSA9IE1hdGguZmxvb3IoXy50aW1lIC8gNjApO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAoXy50aW1lICUgNjApLnRvRml4ZWQoMyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBbJHttLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHtzLnBhZFN0YXJ0KDYsICcwJyl9XWAgKyBfLmxpbmVMeXJpY1xcbiAgICAgICAgICAgICAgICAgICAgfSkuam9pbignXFxcXG4nKTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XFxuICAgICAgICAgICAgICAgICAgICBscmMgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIF9fID0gXy5zb25naW5mbztcXG4gICAgICAgICAgICAgICAgLy8g6ZO+5o6lXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhamF4KHBjYXBpLnJlcGxhY2UoLyhhcGlcXFxcLykvLCAnJDF2MS8nKSArIFxcXCJtdXNpYy9wbGF5VXJsP21pZD1cXFwiICsgdDEgKyBcXFwiJnR5cGU9bXVzaWMmXFxcIikudXJsO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpc192aXBNdXNpYykge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJvcGVuXFxcIiwgXFxcImt3XFxcIiwgdDEsIDAsIF9fLnNvbmdOYW1lLCBfXy5hcnRpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh1cmwubWF0Y2goXFxcInRvYXN0Oi8vXFxcIikpIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzogLy8g6aaW6aG1XFxuICAgICAgICAgICAgICAgIGlmICghdDEubWF0Y2goJ2lkPXJjbScpIHx8IE1ZX1BBR0UgPT09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSBhamF4KHBjYXBpICsgdDEgKyBcXFwiJnBuPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZybj0zMCZcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIChfLmRhdGEgfHwgXy5saXN0KS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgICAgIF8gPSBhamF4KHBjYXBpICsgXFxcInBsYXlsaXN0L3BsYXlMaXN0SW5mbz9waWQ9XFxcIiArIHQxICsgXFxcIiZwbj1cXFwiICsgTVlfUEFHRSArIFxcXCImcm49MzAmXFxcIik7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzMnOiAvLyDmjpLooYxcXG4gICAgICAgICAgICAgICAgXyA9IGFqYXgocGNhcGkgKyBcXFwiYmFuZy9iYW5nL211c2ljTGlzdD9iYW5nSWQ9XFxcIiArIHQxICsgXFxcIiZwbj1cXFwiICsgTVlfUEFHRSArIFxcXCImcm49MzAmXFxcIik7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5tdXNpY0xpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgIHRpdGxlOiAoXy5zb25nTmFtZSB8fCBfLm5hbWUpICsgJyAtICcgKyBfLmFydGlzdCxcXG4gICAgICAgICAgICBpbWc6IF8ucGljIHx8IF8uaW1nIHx8IGZldGNoKCdodHRwOi8vYXJ0aXN0cGljc2VydmVyLmt1d28uY24vcGljLndlYj90eXBlPXJpZF9waWMmcGljdHlwZT11cmwmc2l6ZT01MDAmcmlkPScgKyBfLmlkKSxcXG4gICAgICAgICAgICBjb250ZW50OiBfLmlzTGlzdGVuRmVlID09IHRydWUgPyAxIDogMCxcXG4gICAgICAgICAgICB6eWlkOiBfLmlkIHx8IF8ucmlkXFxuICAgICAgICB9LCAxKSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSwgcnVuKSB7XFxuICAgICAgICBpZiAoaXNVICE9IFxcXCJ1cmxcXFwiKSB7XFxuICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgIGxpYjogKF8pID0+IHRydWUsXFxuICAgICAgICAgICAgICAgIHBhaWQ6IChfKSA9PiBfLnRwYXkgPT0gJzEnLFxcbiAgICAgICAgICAgICAgICBmcmVlOiAoXykgPT4gXy50cGF5ID09ICcwJ1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgc3VybCA9IChzdHlwZSkgPT4gYWpheChwY2FwaSArIFxcXCJzZWFyY2gvc2VhcmNoXFxcIiArIHN0eXBlICsgXFxcIkJ5a2V5V29yZD9rZXk9XFxcIiArIGtleXdvcmQgKyBcXFwiJnBuPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZybj0zMCZcXFwiKS5saXN0O1xcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICAvLyBzdXJsKCdNdXNpYycpLm1hcCgpO1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHA6Ly9zZWFyY2gua3V3by5jbi9yLnM/Y2xpZW50PWt0JmFsbD1cXFwiICsga2V5d29yZCArIFxcXCImcG49XFxcIiArIChNWV9QQUdFIC0gMSkgKyBcXFwiJnJuPTMwJnVpZD0wJnZlcj1rd3BsYXllcmhkX2FyXzguNS40LjUmZnQ9bXVzaWMmY2x1c3Rlcj0wJnN0cmF0ZWd5PTIwMTImZW5jb2Rpbmc9dXRmOCZyZm9ybWF0PWpzb24mdmVybWVyZ2U9MSZtb2JpPTFcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVSAhPSAnZnJlZScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9IFxcXCImdmlwdmVyPTFcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IEpTT04ucGFyc2UoZmV0Y2godXJsKSkuYWJzbGlzdDtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoXyBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fW2lzVV0oXykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1biA9PSAncnVuJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfLlNPTkdOQU1FLm1hdGNoKCfniYfmrrUnKSkgcmV0dXJuIF87XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWQgPSBfLk1VU0lDUklELnNwbGl0KCdfJylbMV0gKyAnJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLndlYl9hbGJ1bXBpY19zaG9ydCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZyA9IFxcXCJodHRwczovL2ltZzIua3V3by5jbi9zdGFyL2FsYnVtY292ZXIvXFxcIiArIF8ud2ViX2FsYnVtcGljX3Nob3J0LnJlcGxhY2UoL14xMjAvLCAnNTAwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZyA9IGZldGNoKCdodHRwOi8vYXJ0aXN0cGljc2VydmVyLmt1d28uY24vcGljLndlYj90eXBlPXJpZF9waWMmcGljdHlwZT11cmwmc2l6ZT01MDAmcmlkPScgKyByaWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltZyA9PSBcXFwiTk9fUElDXFxcIiAmJiBfLndlYl9hcnRpc3RwaWNfc2hvcnQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcgPSBcXFwiaHR0cDovL2ltZzEua3V3by5jbi9zdGFyL3N0YXJoZWFkcy9cXFwiICsgXy53ZWJfYXJ0aXN0cGljX3Nob3J0LnJlcGxhY2UoL14xMjAvLCAnNTAwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uU09OR05BTUUgKyAnIC0gJyArIF8uQVJUSVNULFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IF8udHBheSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiByaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdXJsKCdQbGF5TGlzdCcpO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBfID0gYWpheChcXFwiaHR0cDovL20ua3V3by5jbi9uZXdoNS9zaW5nbGVzL3NvbmdpbmZvYW5kbHJjP211c2ljSWQ9XFxcIiArIGtleXdvcmQgKyBcXFwiJlxcXCIpLnNvbmdpbmZvO1xcbiAgICAgICAgICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc29uZ05hbWUgKyAnIC0gJyArIF8uYXJ0aXN0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5waWNcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXgocGNhcGkucmVwbGFjZSgvKGFwaVxcXFwvKS8sICckMXYxLycpICsgXFxcIm11c2ljL3BsYXlVcmw/bWlkPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZ0eXBlPW11c2ljJlxcXCIpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfXy5jb250ZW50ID0gMDtcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHZpcCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fLmNvbnRlbnQgPSAxO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgX18uenlpZCA9IGtleXdvcmQ7XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYShfXywgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICAgICAgXyA9IGFqYXgocGNhcGkgKyBcXFwicGxheWxpc3QvcGxheUxpc3RJbmZvP3BpZD1cXFwiICsga2V5d29yZCArIFxcXCImcG49MSZybj0xJlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9LFxcblxcblxcblxcbiAgICBkZXM6IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgIHJldHVybiBleGVjdXRlV2ViUnVsZShcXFwiXFxcIiwgJC50b1N0cmluZygodCkgPT4ge1xcbiAgICAgICAgICAgIGNvbnN0IEJ1ZmZlciA9IHtcXG4gICAgICAgICAgICAgICAgZnJvbTogdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByID0gdC5sZW5ndGg7XFxuICAgICAgICAgICAgICAgICAgICBlID0gbmV3IFVpbnQ4QXJyYXkocik7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgcjsgbisrKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVbbl0gPSB0LmNoYXJDb2RlQXQobik7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJhbmdlID0gdCA9PiBBcnJheS5mcm9tKG5ldyBBcnJheSh0KS5rZXlzKCkpO1xcbiAgICAgICAgICAgIExvbmcgPSB0ID0+IHtcXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IEJpZ0ludCh0KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiByLnRvU3RyaW5nKCksXFxuICAgICAgICAgICAgICAgICAgICBpc05lZ2F0aXZlOiAoKSA9PiByIDwgMCxcXG4gICAgICAgICAgICAgICAgICAgIG5vdDogKCkgPT4gTG9uZyh+ciksXFxuICAgICAgICAgICAgICAgICAgICBsb3c6IE51bWJlcihyKSxcXG4gICAgICAgICAgICAgICAgICAgIG9yOiB0ID0+IExvbmcociB8IEJpZ0ludCh0KSksXFxuICAgICAgICAgICAgICAgICAgICB4b3I6IHQgPT4gTG9uZyhyIF4gQmlnSW50KHQpKSxcXG4gICAgICAgICAgICAgICAgICAgIGFuZDogdCA9PiBMb25nKHIgJiBCaWdJbnQodCkpLFxcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxzOiB0ID0+IHIgPT09IEJpZ0ludCh0KSxcXG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0TGVmdDogdCA9PiBMb25nKHIgPDwgQmlnSW50KHQpKSxcXG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0UmlnaHQ6IHQgPT4gTG9uZyhyID4+IEJpZ0ludCh0KSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgTG9uZ0FycmF5ID0gdCA9PiB0Lm1hcCh0ID0+IExvbmcodCkpO1xcbiAgICAgICAgICAgIGFycmF5RSA9IExvbmdBcnJheShbXFxuICAgICAgICAgICAgICAgIDMxLCAwLCAxLCAyLCAzLCA0LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDMsIDQsIDUsIDYsIDcsIDgsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgNywgOCwgOSwgMTAsIDExLCAxMiwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDI3LCAyOCwgMjksIDMwLCAzMSwgMzAsIC0xLCAtMVxcbiAgICAgICAgICAgIF0pXFxuICAgICAgICAgICAgYXJyYXlJUCA9IExvbmdBcnJheShbXFxuICAgICAgICAgICAgICAgIDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksIDEsXFxuICAgICAgICAgICAgICAgIDU5LCA1MSwgNDMsIDM1LCAyNywgMTksIDExLCAzLFxcbiAgICAgICAgICAgICAgICA2MSwgNTMsIDQ1LCAzNywgMjksIDIxLCAxMywgNSxcXG4gICAgICAgICAgICAgICAgNjMsIDU1LCA0NywgMzksIDMxLCAyMywgMTUsIDcsXFxuICAgICAgICAgICAgICAgIDU2LCA0OCwgNDAsIDMyLCAyNCwgMTYsIDgsIDAsXFxuICAgICAgICAgICAgICAgIDU4LCA1MCwgNDIsIDM0LCAyNiwgMTgsIDEwLCAyLFxcbiAgICAgICAgICAgICAgICA2MCwgNTIsIDQ0LCAzNiwgMjgsIDIwLCAxMiwgNCxcXG4gICAgICAgICAgICAgICAgNjIsIDU0LCA0NiwgMzgsIDMwLCAyMiwgMTQsIDZcXG4gICAgICAgICAgICBdKVxcbiAgICAgICAgICAgIGFycmF5SVBfMSA9IExvbmdBcnJheShbXFxuICAgICAgICAgICAgICAgIDM5LCA3LCA0NywgMTUsIDU1LCAyMywgNjMsIDMxLFxcbiAgICAgICAgICAgICAgICAzOCwgNiwgNDYsIDE0LCA1NCwgMjIsIDYyLCAzMCxcXG4gICAgICAgICAgICAgICAgMzcsIDUsIDQ1LCAxMywgNTMsIDIxLCA2MSwgMjksXFxuICAgICAgICAgICAgICAgIDM2LCA0LCA0NCwgMTIsIDUyLCAyMCwgNjAsIDI4LFxcbiAgICAgICAgICAgICAgICAzNSwgMywgNDMsIDExLCA1MSwgMTksIDU5LCAyNyxcXG4gICAgICAgICAgICAgICAgMzQsIDIsIDQyLCAxMCwgNTAsIDE4LCA1OCwgMjYsXFxuICAgICAgICAgICAgICAgIDMzLCAxLCA0MSwgOSwgNDksIDE3LCA1NywgMjUsXFxuICAgICAgICAgICAgICAgIDMyLCAwLCA0MCwgOCwgNDgsIDE2LCA1NiwgMjRcXG4gICAgICAgICAgICBdKVxcbiAgICAgICAgICAgIGFycmF5THMgPSBbXFxuICAgICAgICAgICAgICAgIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDIsXFxuICAgICAgICAgICAgICAgIDEsIDIsIDIsIDIsIDIsIDIsIDIsIDFcXG4gICAgICAgICAgICBdXFxuICAgICAgICAgICAgYXJyYXlMc01hc2sgPSBMb25nQXJyYXkoWzAsIDEwNDg1NzcsIDMxNDU3MzFdKVxcbiAgICAgICAgICAgIGFycmF5TWFzayA9IHJhbmdlKDY0KS5tYXAodCA9PiBNYXRoLnBvdygyLCB0KSlcXG4gICAgICAgICAgICBhcnJheU1hc2tbNjNdICo9IC0xXFxuICAgICAgICAgICAgYXJyYXlQID0gTG9uZ0FycmF5KFtcXG4gICAgICAgICAgICAgICAgMTUsIDYsIDE5LCAyMCwgMjgsIDExLCAyNywgMTYsXFxuICAgICAgICAgICAgICAgIDAsIDE0LCAyMiwgMjUsIDQsIDE3LCAzMCwgOSxcXG4gICAgICAgICAgICAgICAgMSwgNywgMjMsIDEzLCAzMSwgMjYsIDIsIDgsXFxuICAgICAgICAgICAgICAgIDE4LCAxMiwgMjksIDUsIDIxLCAxMCwgMywgMjRcXG4gICAgICAgICAgICBdKVxcbiAgICAgICAgICAgIGFycmF5UENfMSA9IExvbmdBcnJheShbXFxuICAgICAgICAgICAgICAgIDU2LCA0OCwgNDAsIDMyLCAyNCwgMTYsIDgsIDAsXFxuICAgICAgICAgICAgICAgIDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksIDEsXFxuICAgICAgICAgICAgICAgIDU4LCA1MCwgNDIsIDM0LCAyNiwgMTgsIDEwLCAyLFxcbiAgICAgICAgICAgICAgICA1OSwgNTEsIDQzLCAzNSwgNjIsIDU0LCA0NiwgMzgsXFxuICAgICAgICAgICAgICAgIDMwLCAyMiwgMTQsIDYsIDYxLCA1MywgNDUsIDM3LFxcbiAgICAgICAgICAgICAgICAyOSwgMjEsIDEzLCA1LCA2MCwgNTIsIDQ0LCAzNixcXG4gICAgICAgICAgICAgICAgMjgsIDIwLCAxMiwgNCwgMjcsIDE5LCAxMSwgM1xcbiAgICAgICAgICAgIF0pXFxuICAgICAgICAgICAgYXJyYXlQQ18yID0gTG9uZ0FycmF5KFtcXG4gICAgICAgICAgICAgICAgMTMsIDE2LCAxMCwgMjMsIDAsIDQsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgMiwgMjcsIDE0LCA1LCAyMCwgOSwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAyMiwgMTgsIDExLCAzLCAyNSwgNywgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAxNSwgNiwgMjYsIDE5LCAxMiwgMSwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICA0MCwgNTEsIDMwLCAzNiwgNDYsIDU0LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDI5LCAzOSwgNTAsIDQ0LCAzMiwgNDcsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgNDMsIDQ4LCAzOCwgNTUsIDMzLCA1MiwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICA0NSwgNDEsIDQ5LCAzNSwgMjgsIDMxLCAtMSwgLTFcXG4gICAgICAgICAgICBdKVxcbiAgICAgICAgICAgIG1hdHJpeE5TQm94ID0gW1xcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxNCwgNCwgMywgMTUsIDIsIDEzLCA1LCAzLFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDE0LCA2LCA5LCAxMSwgMiwgMCwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDQsIDEsIDEwLCAxMiwgMTUsIDYsIDksIDEwLFxcbiAgICAgICAgICAgICAgICAgICAgMSwgOCwgMTIsIDcsIDgsIDExLCA3LCAwLFxcbiAgICAgICAgICAgICAgICAgICAgMCwgMTUsIDEwLCA1LCAxNCwgNCwgOSwgMTAsXFxuICAgICAgICAgICAgICAgICAgICA3LCA4LCAxMiwgMywgMTMsIDEsIDMsIDYsXFxuICAgICAgICAgICAgICAgICAgICAxNSwgMTIsIDYsIDExLCAyLCA5LCA1LCAwLFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMiwgMTEsIDE0LCAxLCA3LCA4LCAxM1xcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxNSwgMCwgOSwgNSwgNiwgMTAsIDEyLCA5LFxcbiAgICAgICAgICAgICAgICAgICAgOCwgNywgMiwgMTIsIDMsIDEzLCA1LCAyLFxcbiAgICAgICAgICAgICAgICAgICAgMSwgMTQsIDcsIDgsIDExLCA0LCAwLCAzLFxcbiAgICAgICAgICAgICAgICAgICAgMTQsIDExLCAxMywgNiwgNCwgMSwgMTAsIDE1LFxcbiAgICAgICAgICAgICAgICAgICAgMywgMTMsIDEyLCAxMSwgMTUsIDMsIDYsIDAsXFxuICAgICAgICAgICAgICAgICAgICA0LCAxMCwgMSwgNywgOCwgNCwgMTEsIDE0LFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDgsIDAsIDYsIDIsIDE1LCA5LCA1LFxcbiAgICAgICAgICAgICAgICAgICAgNywgMSwgMTAsIDEyLCAxNCwgMiwgNSwgOVxcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxMCwgMTMsIDEsIDExLCA2LCA4LCAxMSwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDksIDQsIDEyLCAyLCAxNSwgMywgMiwgMTQsXFxuICAgICAgICAgICAgICAgICAgICAwLCA2LCAxMywgMSwgMywgMTUsIDQsIDEwLFxcbiAgICAgICAgICAgICAgICAgICAgMTQsIDksIDcsIDEyLCA1LCAwLCA4LCA3LFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDEsIDIsIDQsIDMsIDYsIDEyLCAxMSxcXG4gICAgICAgICAgICAgICAgICAgIDAsIDEzLCA1LCAxNCwgNiwgOCwgMTUsIDIsXFxuICAgICAgICAgICAgICAgICAgICA3LCAxMCwgOCwgMTUsIDQsIDksIDExLCA1LFxcbiAgICAgICAgICAgICAgICAgICAgOSwgMCwgMTQsIDMsIDEwLCA3LCAxLCAxMlxcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICA3LCAxMCwgMSwgMTUsIDAsIDEyLCAxMSwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDE0LCA5LCA4LCAzLCA5LCA3LCA0LCA4LFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDYsIDIsIDEsIDYsIDExLCAxMiwgMixcXG4gICAgICAgICAgICAgICAgICAgIDMsIDAsIDUsIDE0LCAxMCwgMTMsIDE1LCA0LFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDMsIDQsIDksIDYsIDEwLCAxLCAxMixcXG4gICAgICAgICAgICAgICAgICAgIDExLCAwLCAyLCA1LCAwLCAxMywgMTQsIDIsXFxuICAgICAgICAgICAgICAgICAgICA4LCAxNSwgNywgNCwgMTUsIDEsIDEwLCA3LFxcbiAgICAgICAgICAgICAgICAgICAgNSwgNiwgMTIsIDExLCAzLCA4LCA5LCAxNFxcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAyLCA0LCA4LCAxNSwgNywgMTAsIDEzLCA2LFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMSwgMywgMTIsIDExLCA3LCAxNCwgMCxcXG4gICAgICAgICAgICAgICAgICAgIDEyLCAyLCA1LCA5LCAxMCwgMTMsIDAsIDMsXFxuICAgICAgICAgICAgICAgICAgICAxLCAxMSwgMTUsIDUsIDYsIDgsIDksIDE0LFxcbiAgICAgICAgICAgICAgICAgICAgMTQsIDExLCA1LCA2LCA0LCAxLCAzLCAxMCxcXG4gICAgICAgICAgICAgICAgICAgIDIsIDEyLCAxNSwgMCwgMTMsIDIsIDgsIDUsXFxuICAgICAgICAgICAgICAgICAgICAxMSwgOCwgMCwgMTUsIDcsIDE0LCA5LCA0LFxcbiAgICAgICAgICAgICAgICAgICAgMTIsIDcsIDEwLCA5LCAxLCAxMywgNiwgM1xcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxMiwgOSwgMCwgNywgOSwgMiwgMTQsIDEsXFxuICAgICAgICAgICAgICAgICAgICAxMCwgMTUsIDMsIDQsIDYsIDEyLCA1LCAxMSxcXG4gICAgICAgICAgICAgICAgICAgIDEsIDE0LCAxMywgMCwgMiwgOCwgNywgMTMsXFxuICAgICAgICAgICAgICAgICAgICAxNSwgNSwgNCwgMTAsIDgsIDMsIDExLCA2LFxcbiAgICAgICAgICAgICAgICAgICAgMTAsIDQsIDYsIDExLCA3LCA5LCAwLCA2LFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMiwgMTMsIDEsIDksIDE1LCAzLCA4LFxcbiAgICAgICAgICAgICAgICAgICAgMTUsIDMsIDEsIDE0LCAxMiwgNSwgMTEsIDAsXFxuICAgICAgICAgICAgICAgICAgICAyLCAxMiwgMTQsIDcsIDUsIDEwLCA4LCAxM1xcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICA0LCAxLCAzLCAxMCwgMTUsIDEyLCA1LCAwLFxcbiAgICAgICAgICAgICAgICAgICAgMiwgMTEsIDksIDYsIDgsIDcsIDYsIDksXFxuICAgICAgICAgICAgICAgICAgICAxMSwgNCwgMTIsIDE1LCAwLCAzLCAxMCwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDE0LCAxMywgNywgOCwgMTMsIDE0LCAxLCAyLFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDYsIDE0LCA5LCA0LCAxLCAyLCAxNCxcXG4gICAgICAgICAgICAgICAgICAgIDExLCAxMywgNSwgMCwgMSwgMTAsIDgsIDMsXFxuICAgICAgICAgICAgICAgICAgICAwLCAxMSwgMywgNSwgOSwgNCwgMTUsIDIsXFxuICAgICAgICAgICAgICAgICAgICA3LCA4LCAxMiwgMTUsIDEwLCA3LCA2LCAxMlxcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxMywgNywgMTAsIDAsIDYsIDksIDUsIDE1LFxcbiAgICAgICAgICAgICAgICAgICAgOCwgNCwgMywgMTAsIDExLCAxNCwgMTIsIDUsXFxuICAgICAgICAgICAgICAgICAgICAyLCAxMSwgOSwgNiwgMTUsIDEyLCAwLCAzLFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMSwgMTQsIDEzLCAxLCAyLCA3LCA4LFxcbiAgICAgICAgICAgICAgICAgICAgMSwgMiwgMTIsIDE1LCAxMCwgNCwgMCwgMyxcXG4gICAgICAgICAgICAgICAgICAgIDEzLCAxNCwgNiwgOSwgNywgOCwgOSwgNixcXG4gICAgICAgICAgICAgICAgICAgIDE1LCAxLCA1LCAxMiwgMywgMTAsIDE0LCA1LFxcbiAgICAgICAgICAgICAgICAgICAgOCwgNywgMTEsIDAsIDQsIDEzLCAyLCAxMVxcbiAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgXVxcbiAgICAgICAgICAgIGJpdFRyYW5zZm9ybSA9ICh0LCByLCBlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBuID0gTG9uZygwKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlKHIpLmZvckVhY2gociA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB0W3JdLmlzTmVnYXRpdmUoKSB8fCBlLmFuZChhcnJheU1hc2tbdFtyXS5sb3ddKS5lcXVhbHMoMCkgfHwgKG4gPSBuLm9yKGFycmF5TWFza1tyXSkpXFxuICAgICAgICAgICAgICAgIH0pLCBuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIERFUzY0ID0gKHQsIHIpID0+IHtcXG4gICAgICAgICAgICAgICAgZSA9IFtdLFxcbiAgICAgICAgICAgICAgICAgICAgbiA9IFtdO1xcbiAgICAgICAgICAgICAgICBmID0gYml0VHJhbnNmb3JtKGFycmF5SVAsIDY0LCByKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5bMF0gPSBmLmFuZCg0Mjk0OTY3Mjk1KSxcXG4gICAgICAgICAgICAgICAgICAgIG5bMV0gPSBmLmFuZCgtNDI5NDk2NzI5Nikuc2hpZnRSaWdodCgzMiksXFxuICAgICAgICAgICAgICAgICAgICByYW5nZSgxNikuZm9yRWFjaChyID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IExvbmcoMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IExvbmcoblsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBiaXRUcmFuc2Zvcm0oYXJyYXlFLCA2NCwgaSkueG9yKHRbcl0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSg4KS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0XSA9IGkuc2hpZnRSaWdodCg4ICogdCkuYW5kKDI1NSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlKDgpLnJldmVyc2UoKS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYuc2hpZnRMZWZ0KDQpLm9yKG1hdHJpeE5TQm94W3RdW2VbdF1dKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGJpdFRyYW5zZm9ybShhcnJheVAsIDMyLCBmKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IExvbmcoblswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5bMF0gPSBMb25nKG5bMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuWzFdID0gby54b3IoaSlcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgbi5yZXZlcnNlKCksXFxuICAgICAgICAgICAgICAgICAgICBmID0gblsxXS5zaGlmdExlZnQoMzIpLmFuZCgtNDI5NDk2NzI5Nikub3IoblswXS5hbmQoNDI5NDk2NzI5NSkpLFxcbiAgICAgICAgICAgICAgICAgICAgZiA9IGJpdFRyYW5zZm9ybShhcnJheUlQXzEsIDY0LCBmKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzdWJLZXlzID0gKHQsIHIpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IG4gPSBiaXRUcmFuc2Zvcm0oYXJyYXlQQ18xLCA1NiwgdCk7XFxuICAgICAgICAgICAgICAgIHJhbmdlKDE2KS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbiA9IG4uYW5kKGFycmF5THNNYXNrW2FycmF5THNbdF1dKS5zaGlmdExlZnQoMjggLSBhcnJheUxzW3RdKS5vcihuLmFuZChhcnJheUxzTWFza1thcnJheUxzW3RdXS5ub3QoKSkuc2hpZnRSaWdodChhcnJheUxzW3RdKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgclt0XSA9IGJpdFRyYW5zZm9ybShhcnJheVBDXzIsIDY0LCBuKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBiID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICBjb25zdCByID0gQnVmZmVyLmZyb20oXFxcInlsenN4a3dtXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBuID0gTG9uZygwKTtcXG4gICAgICAgICAgICAgICAgcmFuZ2UoOCkuZm9yRWFjaCh0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIG4gPSBMb25nKHJbdF0pLnNoaWZ0TGVmdCg4ICogdCkub3IobilcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGNvbnN0IG8gPSBNYXRoLmZsb29yKHQubGVuZ3RoIC8gOCksXFxuICAgICAgICAgICAgICAgICAgICBpID0gcmFuZ2UoMTYpLm1hcCgoKSA9PiBMb25nKDApKTtcXG4gICAgICAgICAgICAgICAgc3ViS2V5cyhuLCBpKTtcXG4gICAgICAgICAgICAgICAgY29uc3QgZiA9IHJhbmdlKG8pLm1hcCgoKSA9PiBMb25nKDApKTtcXG4gICAgICAgICAgICAgICAgcmFuZ2UobykuZm9yRWFjaChyID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlKDgpLmZvckVhY2goZSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZltyXSA9IExvbmcodFtlICsgOCAqIHJdKS5zaGlmdExlZnQoOCAqIGUpLm9yKGZbcl0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IFtdO1xcbiAgICAgICAgICAgICAgICByYW5nZShvKS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc1t0XSA9IERFUzY0KGksIGZbdF0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdC5zbGljZSg4ICogbyk7XFxuICAgICAgICAgICAgICAgIGxldCBoID0gTG9uZygwKTtcXG4gICAgICAgICAgICAgICAgcmFuZ2UodC5sZW5ndGggJSA4KS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaCA9IExvbmcodVt0XSkuc2hpZnRMZWZ0KDggKiB0KS5vcihoKVxcbiAgICAgICAgICAgICAgICB9KSwgc1tvXSA9IERFUzY0KGksIGgpO1xcbiAgICAgICAgICAgICAgICBjb25zdCBhID0gW107XFxuICAgICAgICAgICAgICAgIGxldCBjID0gMDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHMuZm9yRWFjaCh0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlKDgpLmZvckVhY2gociA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYVtjXSA9IHQuc2hpZnRSaWdodCg4ICogcikuYW5kKDI1NSkubG93O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGMrK1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSksIGE7XFxuICAgICAgICAgICAgfShCdWZmZXIuZnJvbSh0KSk7XFxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5idG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYikpO1xcbiAgICAgICAgfSwgdCkpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p26bWdcIixcInBhdGhcIjpcIm1nXCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9IFxcXCJtZ1xcXCI7XFxuXFxuZnVuY3Rpb24gYWpheCh1cmksIHNpemUsIGhlYWQpIHtcXG4gICAgdXJpID0gU3RyaW5nKHVyaSk7XFxuICAgIGlmICh1cmkubWF0Y2goL3BsYXlsaXN0XFxcXC8obGlzdHxzb25nc0luZm8pfGJpbGxib2FyZFxcXFwvaG9tZXxzZWFyY2hcXFxcL3NvbmcvKSAmJiAhdXJpLm1hdGNoKCdjb2x1bW5JZD0zODE5OTU4OCcpKVxcbiAgICAgICAgdXJpICs9IFxcXCImcGFnZU51bT1cXFwiICsgTVlfUEFHRSArIFxcXCImcGFnZVNpemU9XFxcIiArIChzaXplIHx8IDMwKTtcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vbS5tdXNpYy5taWd1LmNuL21pZ3VtdXNpYy9oNS9cXFwiICsgdXJpLCB7XFxuICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IE9iamVjdC5hc3NpZ24oe1xcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vbS5tdXNpYy5taWd1LmNuL3Y0L1xcXCIsXFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBNT0JJTEVfVUEsXFxuICAgICAgICAgICAgXFxcIkJ5XFxcIjogbWQ1KE1PQklMRV9VQSksXFxuICAgICAgICAgICAgXFxcImNoYW5uZWxcXFwiOiBcXFwiMDE0MDAwRFxcXCIsXFxuICAgICAgICB9LCBoZWFkIHx8IHt9KVxcbiAgICB9KSkuZGF0YTtcXG59XFxuJC5leHBvcnRzID0ge1xcbiAgICBpVGFnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdID0ge307XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5pyA5paw5q2M5Y2VXFxcIl0gPSBcXFwicGxheWxpc3QvbGlzdD9jb2x1bW5JZD0xNTEyNzI3MiZ0YWdJZD1cXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIummlumhteaOqOiNkFxcXCJdID0gXFxcImhvbWUvc29uZ2xpc3RcXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIue9rumhtueDremXqFxcXCJdID0gXFxcInBsYXlsaXN0L2xpc3Q/Y29sdW1uSWQ9MzgxOTk1ODhcXFwiO1xcbiAgICAgICAgYWpheChcXFwicGxheWxpc3QvYWxsVGFnXFxcIikudGFncy5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgaVRhZ1tfLnRhZ05hbWVdID0ge307XFxuICAgICAgICAgICAgXy50YWdzLm1hcChfXyA9PlxcbiAgICAgICAgICAgICAgICBpVGFnW18udGFnTmFtZV1bX18udGFnTmFtZV0gPSBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5pyA5paw5q2M5Y2VXFxcIl0gKyBfXy50YWdJZFxcbiAgICAgICAgICAgICk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdID0ge307XFxuICAgICAgICBhamF4KFxcXCJiaWxsYm9hcmQvdHJlZVxcXCIpLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpZiAoIS/kuZDCt+amnC8udGVzdChfLmNvbHVtblRpdGxlKSkge1xcbiAgICAgICAgICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXVtfLmNvbHVtblRpdGxlXSA9IF8uYmlsbEJvYXJkVm9zLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLmNvbHVtblRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6JyArIF8uY29sdW1uU21hbGxQaWMsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAzLFxcbiAgICAgICAgICAgICAgICAgICAgenlpZDogXy5wYXRoTmFtZVxcbiAgICAgICAgICAgICAgICB9LCAxLCAxKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwibWdfaVRhZ1xcXCIsIGlUYWcpO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBsYXp5OiBmdW5jdGlvbihwbGF0Zm9ybSwgdDEsIHQyKSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzogLy8g5q2M5puy6K+m5oOFXFxuICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL20ubXVzaWMubWlndS5jbi9taWd1L3JlbW90aW5nL2Ntc19kZXRhaWxfdGFnP2NwaWQ9XFxcIiArIHQxLCB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL20ubXVzaWMubWlndS5jbi92My9cXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgICAgICBuYW1lID0gXy5zb25nTmFtZTtcXG4gICAgICAgICAgICAgICAgYXJ0aXN0ID0gXy5zaW5nZXJOYW1lLmpvaW4oXFxcIiZcXFwiKTtcXG4gICAgICAgICAgICAgICAgdXJsID0gXy5saXNRcSB8fCBfLmxpc3RlblVybDtcXG4gICAgICAgICAgICAgICAgdDMgPSBfLnFxLnByb2R1Y3RJZDtcXG4gICAgICAgICAgICAgICAgdDQgPSBfLnNvbmdJZDtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChmID0gXy5hdWRpdGlvbnMpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi5saXNCcVNpemUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzFdICsgU2l6ZShmLmxpc0JxU2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLmxpc0hRU2l6ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMl0gKyBTaXplKGYubGlzSFFTaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYubGlzU1FTaXplKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1szXSArIFNpemUoZi5saXNTUVNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi5saXMyNEJpdFNpemUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzRdICsgU2l6ZShmLmxpczI0Qml0U2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJtZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgyKFxcXCIyXFxcIiwgdDQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBfLmNvZGVSYXRlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBfLm5ld1JhdGVGb3JtYXRzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLlBRKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1sxXSArIFNpemUodFswXS5hbmRyb2lkU2l6ZSB8fCB0WzBdLnNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi5IUSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMl0gKyBTaXplKHRbMV0uYW5kcm9pZFNpemUgfHwgdFsxXS5zaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYuU1EpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzNdICsgU2l6ZSh0WzJdLmFuZHJvaWRTaXplIHx8IHRbMl0uc2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLlpRKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1s0XSArIFNpemUodFszXS5hbmRyb2lkU2l6ZSB8fCB0WzJdLnNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGFyciwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgoYXJyLCB0MSwgbmFtZSwgYXJ0aXN0KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGFyci5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcImRvd25cXFwiLCBcXFwibWdcXFwiLCB0MSwgaSwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLm1hdGNoKFxcXCJ0b2FzdDovL1xcXCIpKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJyLCB0MSwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBscmMgPSBfLmx5cmljTHJjO1xcbiAgICAgICAgICAgICAgICBpZiAoIXVybCkge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJvcGVuXFxcIiwgXFxcIm1nXFxcIiwgdDEsIDAsIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgaWYgKCFscmMpXFxuICAgICAgICAgICAgICAgICAgICBscmMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL211c2ljLm1pZ3UuY24vdjMvYXBpL211c2ljL2F1ZGlvUGxheWVyL2dldEx5cmljP2NvcHlyaWdodElkPVxcXCIgKyB0MSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJoZWFkZXJzXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL2FwcC5jLm5mLm1pZ3UuY24vXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pKS5seXJpYztcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDpppbpobVcXG4gICAgICAgICAgICAgICAgXyA9IGFqYXgodXJpKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFfKSBfID0ge1xcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIChfLml0ZW1zIHx8IF9bMF0uaXRlbXMpLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgfHwgXy50aXRsZSB8fCBfLnBsYXlMaXN0TmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWcgfHwgXy5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkIHx8IF8ucGxheUxpc3RJZFxcbiAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHQyID0gYWpheChgcGxheWxpc3QvaW5mbz9zb25nTGlzdElkPSR7dDF9YCkuY29udGVudENvdW50O1xcbiAgICAgICAgICAgICAgICAgICAgXyA9IGFqYXgoYHBsYXlsaXN0L3NvbmdzSW5mbz9wYWx5bGlzdElkPSR7dDF9YCwgdDIpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgXyA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICczJzogLy8g5o6S6KGMXFxuICAgICAgICAgICAgICAgIF8gPSBhamF4KGBiaWxsYm9hcmQvaG9tZT9wYXRoTmFtZT0ke3QxfWApLnNvbmdzO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgICAgIGQgPSBbXTtcXG4gICAgICAgIF8uaXRlbXMubWFwKF8gPT4ge1xcbiAgICAgICAgICAgIGlmIChfLmZ1bGxTb25nKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAoXy5zaW5nZXJzID8gJyAtICcgKyBfLnNpbmdlcnMubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJykgOiAnJyksXFxuICAgICAgICAgICAgICAgIGltZzogJ2h0dHBzOicgKyBfLm1lZGl1bVBpYyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogXy5mdWxsU29uZy52aXBGbGFnLFxcbiAgICAgICAgICAgICAgICB6eWlkOiBfLmNvcHlyaWdodElkXFxuICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgaXNVKSB7XFxuICAgICAgICBpZiAoaXNVICE9IFxcXCJ1cmxcXFwiKSB7XFxuICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgIGxpYjogKF8pID0+IHRydWUsXFxuICAgICAgICAgICAgICAgIHBhaWQ6IChfKSA9PiBfLmZ1bGxTb25nLnZpcEZsYWcgPT0gJzEnLFxcbiAgICAgICAgICAgICAgICBmcmVlOiAoXykgPT4gXy5mdWxsU29uZy52aXBGbGFnID09ICcwJ1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgc3VybCA9IChzdHlwZSwgZXJyaSkgPT4ge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFqYXgoXFxcInNlYXJjaC9cXFwiICsgc3R5cGUgKyBcXFwiP3RleHQ9XFxcIiArIGtleXdvcmQpLml0ZW1zO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJpIDwgMykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXJsKHN0eXBlLCBlcnJpICsgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHN1cmwoJ3NvbmcnLCAwKTtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmZ1bGxTb25nICYmIF9fW2lzVV0oXykpIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArIChfLnNpbmdlcnMgPyAnIC0gJyArIF8uc2luZ2Vycy5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSA6ICcnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6JyArIF8ubWVkaXVtUGljLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBfLmZ1bGxTb25nLnZpcEZsYWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uY29weXJpZ2h0SWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdXJsKCdzb25nTGlzdCcsIDApO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJtZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgyKFxcXCIyXFxcIiwga2V5d29yZCk7XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc29uZ05hbWUgKyAnIC0gJyArIF8uc2luZ2VyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5hbGJ1bUltZ3NbMF0uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IF8udmlwVHlwZSA/IDEgOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uY29weXJpZ2h0SWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIF8gPSBhamF4KGBwbGF5bGlzdC9pbmZvP3NvbmdMaXN0SWQ9JHtrZXl3b3JkfWApO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnBsYXlMaXN0TmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnBsYXlMaXN0SWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9LFxcblxcblxcblxcbiAgICBhamF4OiBhamF4LFxcbiAgICBhamF4MjogZnVuY3Rpb24ocmVzb3VyY2VUeXBlLCByZXNvdXJjZUlkKSB7XFxuICAgICAgICAvLyBjLm11c2ljYXBwLm1pZ3UuY25cXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwcC5jLm5mLm1pZ3UuY24vTUlHVU0yLjAvdjEuMC9jb250ZW50L3Jlc291cmNlaW5mby5kbz9uZWVkU2ltcGxlPTAxJnJlc291cmNlVHlwZT1cXFwiICsgcmVzb3VyY2VUeXBlICsgXFxcIiZyZXNvdXJjZUlkPVxcXCIgKyByZXNvdXJjZUlkKSkucmVzb3VyY2VbMF07XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbs1c1wiLFwicGF0aFwiOlwiNXNcIixcInJ1bGVcIjpcImV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScpKS5ydWxlKTtcXG5jb25zdCB0aGlzX3BsYXRmb3JtID0gXFxcIjVzXFxcIjtcXG5sZXQgYWpheCA9IHVyaSA9PiBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwOi8vbW9iaWxlYXBpLjVzaW5nLmt1Z291LmNvbS9cXFwiICsgdXJpKSkuZGF0YTtcXG4kLmV4cG9ydHMgPSB7XFxuICAgIGlUYWc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl0gPSB7fTtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLmnIDng61cXFwiXSA9IFxcXCJcXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIuacgOaWsFxcXCJdID0gXFxcIiZ0eXBlPTFcXFwiO1xcbiAgICAgICAgbGV0IGxpc3QgPSBwZGZhKGZldGNoKFxcXCJodHRwOi8vNXNpbmcua3Vnb3UuY29tL2dkL2dkTGlzdFxcXCIpLCBcXFwiYm9keSYmLnJfbGlzdF90XFxcIik7XFxuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICBsZXQgdDEgPSBwZGZoKGl0ZW0sIFxcXCJoMyYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgIGlUYWdbdDFdID0ge307XFxuICAgICAgICAgICAgcGRmYShpdGVtLCBcXFwidWwmJmxpXFxcIikubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgdDIgPSBwZGZoKGl0LCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICBpVGFnW3QxXVt0Ml0gPSB0MjtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdID0ge307XFxuICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXVtcXFwi5YWo6YOoXFxcIl0gPSBhamF4KFxcXCJyYW5rL2xpc3RcXFwiKVxcbiAgICAgICAgICAgIC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogXy5waG90b0JpZyB8fCBfLnBob3RvLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiAzLFxcbiAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgfSwgMSwgMSkpO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bXFxcIuWIhuWMulxcXCJdID0gW1xcXCLlj6Tpo45cXFwiLCBcXFwi5rWB6KGMXFxcIiwgXFxcIuasp+e+jlxcXCIsIFxcXCLml6Xor61cXFwiLCBcXFwi5rCR6LCjXFxcIiwgXFxcIuWKqOa8qy/muLjmiI9cXFwiLCBcXFwi5pGH5ruaXFxcIiwgXFxcIuW9seinhlxcXCIsIFxcXCLnlLXlrZBcXFwiLCBcXFwi5rCR5pePXFxcIiwgXFxcIuW5v+aSreWJp1xcXCIsIFxcXCJISVAtSE9QXFxcIl1cXG4gICAgICAgICAgICAubWFwKG5hbWUgPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBudWxsLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiAzLFxcbiAgICAgICAgICAgICAgICB6eWlkOiBuYW1lXFxuICAgICAgICAgICAgfSwgMSwgMSkpO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcIjVzX2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0Mikge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOatjOabsuivpuaDhVxcbiAgICAgICAgICAgICAgICBbdDEsIHR5cGVdID0gdDEuc3BsaXQoJyMnKTtcXG4gICAgICAgICAgICAgICAgZ2V0TXVzaWNJbmZvID0gdVR5cGUgPT4gYWpheChgc29uZy8ke3VUeXBlfT9zb25naWQ9JHt0MX0mc29uZ3R5cGU9JHt0eXBlfWApO1xcbiAgICAgICAgICAgICAgICBfID0gZ2V0TXVzaWNJbmZvKFxcXCJnZXRTb25nVXJsXFxcIik7XFxuICAgICAgICAgICAgICAgIGFyciA9IFtdO1xcbiAgICAgICAgICAgICAgICBhcnIyID0gW107XFxuICAgICAgICAgICAgICAgIGlmIChfLmxxdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMV0gKyBTaXplKF8ubHFzaXplKSksIGFycjIucHVzaChfLmxxdXJsICsgJyNpc011c2ljPXRydWUjJyk7XFxuICAgICAgICAgICAgICAgIGlmIChfLmhxdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMl0gKyBTaXplKF8uaHFzaXplKSksIGFycjIucHVzaChfLmhxdXJsICsgJyNpc011c2ljPXRydWUjJyk7XFxuICAgICAgICAgICAgICAgIGlmIChfLnNxdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbM10gKyBTaXplKF8uc3FzaXplKSksIGFycjIucHVzaChfLnNxdXJsICsgJyNpc011c2ljPXRydWUjJyk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXJyLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KChhcnIsIGFycjIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgYXJyMltpXTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgYXJyMik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g5q2M6K+NXFxuICAgICAgICAgICAgICAgIHR5cGUyID0ge1xcbiAgICAgICAgICAgICAgICAgICAgeWM6IDEsXFxuICAgICAgICAgICAgICAgICAgICBmYzogMixcXG4gICAgICAgICAgICAgICAgICAgIGJ6OiAzXFxuICAgICAgICAgICAgICAgIH1bdHlwZV07XFxuICAgICAgICAgICAgICAgIHVybCA9IGBodHRwOi8vc2VydmljZS41c2luZy5rdWdvdS5jb20vc29uZy9kZXRhaWw/c29uZ0lkPSR7dDF9JnNvbmdUeXBlPSR7dHlwZTJ9YDtcXG4gICAgICAgICAgICAgICAgbHJjID0gSlNPTi5wYXJzZShmZXRjaFBDKHVybCkpLmRhdGEubHlyaWNzO1xcbiAgICAgICAgICAgICAgICBpZiAoIWxyYykgbHJjID0gZ2V0TXVzaWNJbmZvKFxcXCJuZXdnZXRcXFwiKS5keW5hbWljV29yZHM7XFxuICAgICAgICAgICAgICAgIC8vIOmTvuaOpVxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM6IGFycixcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IGFycjIsXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogU3RyaW5nKGxyYykucmVwbGFjZSgvPGJyXFxcXC8/Pi9naSwgXFxcIlxcXFxuXFxcIilcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvL+mmlumhtVxcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKFxcXCJodHRwOi8vNXNpbmcua3Vnb3UuY29tL2dkL2dkTGlzdD8mdGFnTmFtZT1cXFwiICsgdDEgKyBcXFwiJnBhZ2U9XFxcIiArIE1ZX1BBR0UpO1xcbiAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5hbGJ1bVxcXCIpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXRlbSwgXFxcIi5qeF9uYW1lJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaW1nID0gcGRmaChpdGVtLCBcXFwiaW1nJiZzcmNcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB6eWlkID0gcGRmaChpdGVtLCBcXFwiYSwxJiZzb25nbGlzdGlkXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogenlpZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzInOiAvLyDlj5HnjrBcXG4gICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgXyA9IGFqYXgoXFxcInNvbmcvZ2V0c29uZ2xpc3Rzb25nP2lkPVxcXCIgKyB0MSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBfID0gW107XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzMnOiAvLyDmjpLooYxcXG4gICAgICAgICAgICAgICAgaWYgKHQxID09IFxcXCJsaXN0MjVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gXFxcInNvbmdsaXN0L2hvdHN1cHBvcnRyYW5rbGlzdD9wYWdlPVxcXCI7XFxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQxID09IFxcXCJ5Y1xcXCIgfHwgdDEgPT0gXFxcImZjXFxcIiB8fCB0MSA9PSBcXFwibGlzdDIzXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IFxcXCJyYW5rL2RldGFpbD9pZD1cXFwiICsgdDEgKyBcXFwiJnBhZ2VpbmRleD1cXFwiO1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICB1cmkgPSBcXFwicmFuay9zdHlsZXJhbms/c3R5bGU9XFxcIiArIHQxICsgXFxcIiZwYWdlaW5kZXg9XFxcIjtcXG4gICAgICAgICAgICAgICAgXyA9IGFqYXgodXJpICsgTVlfUEFHRSArIFxcXCImcGFnZVNpemU9MzBcXFwiKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBkID0gW107XFxuICAgICAgICAoXy5zb25ncyB8fCBfKS5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgaWYgKF8uU1QgPT0gdW5kZWZpbmVkIHx8IF8uU1QgPiAwKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAoXy5zb25nTmFtZSB8fCBfLlNOKSArICcgLSAnICsgKF8ubmlja25hbWUgfHwgXy51c2VyLk5OKSxcXG4gICAgICAgICAgICAgICAgaW1nOiBfLmltYWdlIHx8IChfLnVzZXIgPyBfLnVzZXIuSSA6IFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgY29udGVudDogXy5zb25nS2luZCB8fCBfLlNLLFxcbiAgICAgICAgICAgICAgICB6eWlkOiAoXy5zb25nSWQgfHwgXy5JRCkgKyAnIycgKyAoXy5zb25nS2luZCB8fCBfLlNLKVxcbiAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSkge1xcbiAgICAgICAgaWYgKGlzVSAhPSBcXFwidXJsXFxcIikge1xcbiAgICAgICAgICAgIGZpbHRlciA9IHtcXG4gICAgICAgICAgICAgICAgbGliOiAwLFxcbiAgICAgICAgICAgICAgICB5YzogMSxcXG4gICAgICAgICAgICAgICAgZmM6IDIsXFxuICAgICAgICAgICAgICAgIGJ6OiAzXFxuICAgICAgICAgICAgfVtpc1VdO1xcbiAgICAgICAgICAgIHN1cmwgPSAoc3R5cGUpID0+IEpTT04ucGFyc2UoZmV0Y2hQQyhcXFwiaHR0cDovL3NlYXJjaC41c2luZy5rdWdvdS5jb20vaG9tZS9qc29uP2tleXdvcmQ9XFxcIiArIGtleXdvcmQgKyBcXFwiJnNvcnQ9MSZwYWdlPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZmaWx0ZXI9XFxcIiArIGZpbHRlciArIFxcXCImdHlwZT1cXFwiICsgc3R5cGUpKS5saXN0O1xcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gc3VybCgnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfLCBKU09OLnBhcnNlKGZldGNoUEMoYGh0dHA6Ly9zZXJ2aWNlLjVzaW5nLmt1Z291LmNvbS9zb25nL2RldGFpbD9zb25nSWQ9JHtfLnNvbmdJZH0mc29uZ1R5cGU9JHtfLnR5cGV9YCkpLmRhdGEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc29uZ05hbWUgKyAnIC0gJyArIF8ubmlja05hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXy50eXBlRW5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uc29uZ0lkICsgJyMnICsgXy50eXBlRW5hbWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdXJsKCcxJyk7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8ucGljdHVyZVVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uc29uZ0xpc3RJZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBbdDEsIHQyXSA9IGtleXdvcmQuc3BsaXQoJyMnKTtcXG4gICAgICAgICAgICAgICAgICAgIHQzID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHljOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjOiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ6OiAzXFxuICAgICAgICAgICAgICAgICAgICB9W3QyXTtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoUEMoYGh0dHA6Ly9zZXJ2aWNlLjVzaW5nLmt1Z291LmNvbS9zb25nL2RldGFpbD9zb25nSWQ9JHt0MX0mc29uZ1R5cGU9JHt0M31gKSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5zb25nTmFtZSArICcgLSAnICsgXy5uaWNrTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogdDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDoga2V5d29yZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICAgICAgXyA9IGFqYXgoXFxcInNvbmcvZ2V0c29uZ2xpc3Q/aWQ9XFxcIiArIGtleXdvcmQpO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLlQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLlAgfHwgXy51c2VyLmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLklEXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKdvG15XCIsXCJwYXRoXCI6XCJteVwiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJykpLnJ1bGUpO1xcbmNvbnN0IHRoaXNfcGxhdGZvcm0gPSBcXFwibXlcXFwiO1xcbmZ1bmN0aW9uIGFqYXgocGF0aCwgYm9keSwgaG9zdCkge1xcbiAgICB1cmwgPSAoaG9zdCB8fCBcXFwiaHR0cHM6Ly9hcGlcXFwiKSArIFxcXCIubGl1bWluZ3llLmNuL20vYXBpL1xcXCIgKyBwYXRoO1xcbiAgICBpZiAoIWhvc3QpIHtcXG4gICAgICAgIGJvZHkuX3QgPSBEYXRlLm5vdygpICsgJydcXG4gICAgICAgIGJvZHkudG9rZW4gPSAkLnJlcXVpcmUoXFxcIm15P3J1bGU95q2M6K+N6YCC6YWNXFxcIikubmV3X3Rva2VuKGJvZHkpO1xcbiAgICAgICAgaWYgKGJvZHkucXVhbGl0eSAhPSB1bmRlZmluZWQpXFxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkVXJsKHVybCwgYm9keSk7XFxuICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XFxuICAgIH1cXG4gICAgXyA9IEpTT04ucGFyc2UocG9zdCh1cmwsIHtcXG4gICAgICAgIGJvZHk6IGJvZHksXFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBNT0JJTEVfVUEsXFxuICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwczovL3Rvb2wubGl1bWluZ3llLmNuJyxcXG4gICAgICAgIH1cXG4gICAgfSkpO1xcbiAgICBfLmRhdGEuY29kZSA9IF8uY29kZTtcXG4gICAgXy5kYXRhLm1zZyA9IF8ubXNnO1xcbiAgICByZXR1cm4gXy5kYXRhO1xcbn1cXG4kLmV4cG9ydHMgPSB7XFxuXFxuICAgIGlUYWc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgLyog5LiN6IO96Kej5p6Qd3nmrYzljZXkuoZcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKCd3eT9ydWxlPeatjOivjemAgumFjScpLmlUYWcoMSk7XFxuICAgICAgICAgICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdW1xcXCLlhajpg6hcXFwiXSA9ICQucmVxdWlyZSgnd3k/cnVsZT3mrYzor43pgILphY0nKS5hamF4KFxcXCJ0b3BsaXN0P1xcXCIpLmxpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDMsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgICovXFxuICAgICAgICBhcnIgPSBcXFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVojXFxcIi5zcGxpdChcXFwiXFxcIik7XFxuICAgICAgICBhcnIudW5zaGlmdChcXFwi5o6o6I2QXFxcIik7XFxuICAgICAgICBhcnIubWFwKCh0LCBpKSA9PiB7XFxuICAgICAgICAgICAgaVRhZ1t0XSA9IHt9O1xcbiAgICAgICAgICAgIGlUYWdbdF1bXFxcIk15RnJlZU1QM1xcXCJdID0gU3RyaW5nKGkpO1xcbiAgICAgICAgfSlcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJteV9pVGFnXFxcIiwgaVRhZyk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGxhenk6IGZ1bmN0aW9uKHBsYXRmb3JtLCB0MSwgdDIpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDor6bmg4VcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbdHNbMF0gKyA5NiwgdHNbMV0gKyAxMjgsIHRzWzJdICsgMzIwLCB0c1szXSArIDIwMDBdO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXJyLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh0MSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHQyID0gaW5wdXQuc3BsaXQoJ+OAkScpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGFqYXgoXFxcImxpbmtcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0MSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGl0eTogdDJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBKU09OLnBhcnNlKGZldGNoKHVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmhlYWRlcnMubG9jYXRpb25bMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB0MSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbHJjID0gYWpheChcXFwibHlyaWNcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogdDFcXG4gICAgICAgICAgICAgICAgfSkubHJjO1xcbiAgICAgICAgICAgICAgICB1cmxzID0gW107XFxuICAgICAgICAgICAgICAgIGZvciAocXVhbGl0eSBvZiBbOTYsIDEyOCwgMzIwLCAyMDAwXSlcXG4gICAgICAgICAgICAgICAgICAgIHVybHMucHVzaChhamF4KFxcXCJsaW5rXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0MSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFsaXR5OiBxdWFsaXR5ICsgJydcXG4gICAgICAgICAgICAgICAgICAgIH0pICsgJyNpc011c2ljPXRydWUjJyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiB1cmxzLFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM6IHRzLnNsaWNlKDAsIDQpLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMSc6IC8v6aaW6aG1XFxuICAgICAgICAgICAgICAgIC8qXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXQxLm1hdGNoKC9cXFxcPy8pKSB0MSA9IFxcXCJ0b3AvcGxheWxpc3Q/Y2F0PVxcXCIgKyB0MSArIFxcXCImXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoJ3d5P3J1bGU95q2M6K+N6YCC6YWNJykuYWpheCh0MSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXy5yZXN1bHQgfHwgXy5wbGF5bGlzdHMpLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCB8fCBfLnBpY1VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAgICAgXyA9IGFqYXgoXFxcImFydGlzdC9saXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbDogdDEsXFxuICAgICAgICAgICAgICAgICAgICBwYWdlOiBNWV9QQUdFXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAoXy5saXN0IHx8IFtdKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBfLnBpYyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDMsIC8vIDJcXG4gICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMic6IC8vIOWPkeeOsFxcbiAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKVxcbiAgICAgICAgICAgICAgICAgICAgXyA9IGFqYXgoXFxcInNlYXJjaC9wbGF5bGlzdFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcImRcXFwiICsgdDFcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBfID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q6IFtdXFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICczJzogLy8g5o6S6KGMXFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpXFxuICAgICAgICAgICAgICAgICAgICBfID0gYWpheChcXFwiYXJ0aXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0MVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIF8gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDogW11cXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5saXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgKF8uYXJ0aXN0ID8gJyAtICcgKyBfLmFydGlzdC5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSA6IFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBpbWc6IF8ucGljIHx8IChfLmFsYnVtICYmIF8uYWxidW0ucGljID8gXy5hbGJ1bS5waWMgOiBcXFwiXFxcIiksXFxuICAgICAgICAgICAgY29udGVudDogJ3d5JyxcXG4gICAgICAgICAgICB6eWlkOiBfLmhhc2ggfHwgXy5pZFxcbiAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgaWYgKF8ubGlzdC5sZW5ndGggPT0gMCAmJiBfLm5hbWUpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBfLmRlc2NyaXB0aW9uLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBzZWFyY2g6IGZ1bmN0aW9uKHBsYXRmb3JtLCBrZXl3b3JkLCBzdHlwZSwgaXNOZXcpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgc3R5cGUgPSBzdHlwZSB8fCAnd3knO1xcbiAgICAgICAgICAgICAgICBzdHlwZTIgPSB7XFxuICAgICAgICAgICAgICAgICAgICAnd3knOiAnWVFEJyxcXG4gICAgICAgICAgICAgICAgICAgICdrdyc6ICdZUUInLFxcbiAgICAgICAgICAgICAgICAgICAgJ21nJzogaXNOZXcgPyAnWVFNJyA6ICdtaWd1JyxcXG4gICAgICAgICAgICAgICAgICAgICcxdCc6ICcxdGluZycsXFxuICAgICAgICAgICAgICAgICAgICAnZGInOiAnZG91YmFuJyxcXG4gICAgICAgICAgICAgICAgICAgICc1eSc6ICd3dXNpbmd5YycsXFxuICAgICAgICAgICAgICAgICAgICAnNWYnOiAnd3VzaW5nZmMnXFxuICAgICAgICAgICAgICAgIH1bc3R5cGVdO1xcblxcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXcpIHtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSBhamF4KCdzZWFyY2gnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3R5cGUyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogTVlfUEFHRSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2OiAnYmV0YSdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IF8ubGlzdCB8fCBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAoXy5hcnRpc3QgPyAnIC0gJyArIF8uYXJ0aXN0Lm1hcChfID0+IF8ubmFtZSkuam9pbignJicpIDogXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5waWMgfHwgXy5hbGJ1bS5waWMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogc3R5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5oYXNoIHx8IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBcXFwidGV4dD1cXFwiICsga2V5d29yZCArIFxcXCImcGFnZT1cXFwiICsgTVlfUEFHRSArIFxcXCImdHlwZT1cXFwiICsgc3R5cGUyO1xcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9ICQucmVxdWlyZShcXFwibXk/cnVsZT3mrYzor43pgILphY1cXFwiKS5vbGRfZW5jb2RlKGJvZHkpO1xcbiAgICAgICAgICAgICAgICAgICAgXyA9IGFqYXgoJ3NlYXJjaCcsIGJvZHksIFxcXCJodHRwOi8vYXBpMlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IF8ubGlzdCB8fCBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExhenkoJ215JywgXy5pZClcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy51cmxfbTRhKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzLnB1c2goXy51cmxfbTRhICsgJyNpc011c2ljPXRydWUjJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2godHNbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLnVybF8xMjgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHMucHVzaChfLnVybF8xMjggKyAnI2lzTXVzaWM9dHJ1ZSMnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCh0c1sxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8udXJsXzMyMClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJscy5wdXNoKF8udXJsXzMyMCArICcjaXNNdXNpYz10cnVlIycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKHRzWzJdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy51cmxfZmxhYylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJscy5wdXNoKF8udXJsX2ZsYWMgKyAnI2lzTXVzaWM9dHJ1ZSMnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCh0c1szXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgJyAtICcgKyBfLmFydGlzdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVyIHx8IF8ucGljLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBzdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogdXJscyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IG5hbWVzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBseXJpYzogXy5scmNcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwICYmIF8uY29kZSA9PSA0MDMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubXNnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IF8uY29kZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZWFyY2goMSwga2V5d29yZCwgMSkubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIG5ld190b2tlbjogZnVuY3Rpb24oYm9keSkge1xcbiAgICAgICAgW3QsIGUsIEFzXSA9IFtcXG4gICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgIFxcXCIyMDIzMDMyNy5cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwieUd6NG45WEU5eFl5Mk9qNVViN0U2dTlhNXA1YUlXWlllNTNPcnE1d0U1VWduamJXcTA0MTBXVHZtTEJPMVoyTlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJwVzhqZy9ta2U2Y08xRjRDVHVhaXN3aFpmUUd6TXlxNU5KUkxQVkl2RHhsQTc9RTNZclNVb0gwYjJCWEtuOXRkK1xcXCJcXG4gICAgICAgICAgICBdLFxcbiAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgXFxcIjIwMjIxMjIyLlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJIMmh1dXdYZjh3TjlDeDVLM2xFUWtkZzRWVENKcUliNDQwUVFYOTVPUXllMUQwOTIyOTJCSTZyZ2pGZ0s5bWN4XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlFzVm10NHJwcVBGSnlXY2cxWS9TUkF1TE1UZWRCMzc1WFpORGxPR3hqNmIydmFuOT1DOFVoSEtFK3dpZklrb3owXFxcIlxcbiAgICAgICAgICAgIF1cXG4gICAgICAgIF1bMF07XFxuICAgICAgICB2YXIgYSwgYiwgYywgZCxcXG4gICAgICAgICAgICB2ID0gMCxcXG4gICAgICAgICAgICB0ayA9IFxcXCJcXFwiO1xcbiAgICAgICAgZSA9IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShib2R5KSkuc3BsaXQoXFxcIlxcXCIpXFxuICAgICAgICAgICAgLm1hcCgodCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5jaGFyQ29kZUF0KDApIF4gZS5jaGFyQ29kZUF0KE1hdGguZmxvb3IoaSAlIDY0KSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgaSA9IGUubGVuZ3RoICUgM1xcbiAgICAgICAgZG8ge1xcbiAgICAgICAgICAgIGEgPSBlW3YrK11cXG4gICAgICAgICAgICBiID0gZVt2KytdXFxuICAgICAgICAgICAgYyA9IGVbdisrXVxcbiAgICAgICAgICAgIGQgPSBhIDw8IDE2IHwgYiA8PCA4IHwgY1xcbiAgICAgICAgICAgIGEgPSBkID4+IDE4ICYgNjNcXG4gICAgICAgICAgICBiID0gZCA+PiAxMiAmIDYzXFxuICAgICAgICAgICAgYyA9IGQgPj4gNiAmIDYzXFxuICAgICAgICAgICAgZCA9IGQgJiA2M1xcbiAgICAgICAgICAgIHRrICs9IEFzLmNoYXJBdChhKSArIEFzLmNoYXJBdChiKSArIEFzLmNoYXJBdChjKSArIEFzLmNoYXJBdChkKVxcbiAgICAgICAgfSB3aGlsZSAodiA8IGUubGVuZ3RoKVxcbiAgICAgICAgcmV0dXJuIHQgKyBtZDUoaSA9PSAwID8gdGsgOiB0ay5zbGljZSgwLCBpIC0gMykgKyAnPT09Jy5zbGljZShpIHx8IDMpKVxcbiAgICB9LFxcblxcblxcblxcbiAgICBvbGRfZW5jb2RlOiBmdW5jdGlvbihlKSB7XFxuICAgICAgICB2YXIgcCA9IG1kNShcXFwiPEc2c1gsTGt+XjI6WSU0WlxcXCIpO1xcbiAgICAgICAgdmFyIGEgPSBtZDUocC5zdWJzdHIoMTYsIDMyKSk7XFxuICAgICAgICB2YXIgdCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCArIDg2NDAwID4+IDA7XFxuICAgICAgICB2YXIgdCA9IHQgKyBtZDUoZSArIGEpLnN1YnN0cigwLCAxNikgKyBlO1xcbiAgICAgICAgdmFyIEUgPSBlID0gXFxcIlxcXCI7XFxuICAgICAgICB2YXIgUjQgPSBSKDQpO1xcbiAgICAgICAgZm9yIChpIGluIHQpIHtcXG4gICAgICAgICAgICBpID0gdC5jaGFyQ29kZUF0KGkpXFxuICAgICAgICAgICAgaWYgKGkgPCAxMjgpIHtcXG4gICAgICAgICAgICAgICAgZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkgPj4gMTIgfCAyMjQpXFxuICAgICAgICAgICAgICAgIGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpID4+IDYgJiA2MyB8IDEyOClcXG4gICAgICAgICAgICAgICAgZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkgJiA2MyB8IDEyOClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgYSA9IG1kNShwLnN1YnN0cigwLCAxNikpO1xcbiAgICAgICAgdmFyIGEgPSBhICsgbWQ1KGEgKyBSNCk7XFxuICAgICAgICBwID0gW107XFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHBbaV0gPSBpO1xcbiAgICAgICAgSSA9IGIgPSBjID0gdCA9IDA7XFxuICAgICAgICBmb3IgKGkgaW4gcCkge1xcbiAgICAgICAgICAgIEkgPSAoSSArIHBbaV0gKyBhW2kgJSA2NF0uY2hhckNvZGVBdCgpKSAlIDI1NlxcbiAgICAgICAgICAgIFggPSBwW2ldXFxuICAgICAgICAgICAgcFtpXSA9IHBbSV1cXG4gICAgICAgICAgICBwW0ldID0gWFxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChpIGluIGUpIHtcXG4gICAgICAgICAgICBJID0gTnVtYmVyKGkpICsgMTtcXG4gICAgICAgICAgICBYID0gcFtJXTtcXG4gICAgICAgICAgICBiID0gKGIgKyBYKSAlIDI1NjtcXG4gICAgICAgICAgICBwW0ldID0gcFtiXTtcXG4gICAgICAgICAgICBwW2JdID0gWDtcXG4gICAgICAgICAgICBFICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXFxuICAgICAgICAgICAgICAgIGVbaV0uY2hhckNvZGVBdCgpIF5cXG4gICAgICAgICAgICAgICAgcFsocFtJXSArIHBbYl0pICUgMjU2XVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgWiA9IFxcXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fXFxcIjtcXG4gICAgICAgIGZvciAoXFxuICAgICAgICAgICAgdmFyIE8gPSBcXFwiXFxcIjsgRS5jaGFyQXQodCB8IDApIHx8IChaID0gJz0nLCB0ICUgMSk7IE8gKz0gWi5jaGFyQXQoNjMgJiBjID4+IDggLSB0ICUgMSAqIDgpXFxuICAgICAgICApIGMgPSBjIDw8IDggfCBFLmNoYXJDb2RlQXQodCArPSAwLjc1KTtcXG4gICAgICAgIHJldHVybiBcXFwiZGF0YT1cXFwiICsgUjQgKyBPICsgXFxcIiZ2PTJcXFwiO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p29cXRcIixcInBhdGhcIjpcInF0XCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9ICdxdCc7XFxuanVpY2VzID0gXyA9PiBfLnJlc3BvbnNlO1xcbnFpYW5xaWFuID0gKHVyaSwganNvbikgPT4ge1xcbiAgICBqc29uLmFwcGlkID0gXFxcIjE2MDczMzYwXFxcIjtcXG4gICAganNvbi50aW1lc3RhbXAgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxZTMpO1xcbiAgICBib2R5ID0gT2JqZWN0LmtleXMoanNvbikuc29ydCgpXFxuICAgICAgICAubWFwKGtleSA9PiBrZXkgKyAnPScgKyBqc29uW2tleV0pLmpvaW4oJyYnKTtcXG4gICAgYm9keSArPSBcXFwiJnNpZ249XFxcIiArIG1kNShib2R5ICsgXFxcIjBiNTBiMDJmZDBkNzNhOWM0YzhjM2E3ODFjMzA4NDVmXFxcIik7XFxuICAgIHUgPSBgaHR0cHM6Ly9tdXNpYy45MXEuY29tL3YxLyR7dXJpfT9gICsgYm9keTtcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2godSkpLmRhdGE7XFxufVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgcGxhdGZvcm0yKSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzpcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0yKSkge1xcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZzMnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cDovL3d3dy5nZ2dtdXNpYy5jb20vXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleXdvcmQpLnJlcGxhY2UoLy0vZywgJ18yZCcpLnJlcGxhY2UoLyUvZywgJ18nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2hDb2RlQnlXZWJWaWV3KHUgKyBcXFwic2VhcmNoLVxcXCIgKyBrZXl3b3JkICsgXFxcIi0xLmh0bVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jsb2NrUnVsZXMnOiBbJy5qcycsICcuY3NzJywgJy5wbmcnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogNTAwMFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiZsaS5tZWRpYVtkYXRhLXRpZF1cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBkZmgoaXRlbSwgXFxcImEsMSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUuc3BsaXQoXFxcIiAtIFxcXCIpLnJldmVyc2UoKS5qb2luKCcgLSAnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogdSArIHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZzMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcGRmaChpdGVtLCBcXFwiYSwxJiZocmVmXFxcIikucmVwbGFjZSgvXFxcXEQvZywgJycpICsgJyNnMydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnonOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2goXFxcImh0dHBzOi8vZGViZW56aS5jb20vP3M9XFxcIiArIGtleXdvcmQpLCBcXFwiYm9keSYmaDIuZW50cnktdGl0bGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiYSwwJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9waWMucm1iLmJkc3RhdGljLmNvbS9iamgvMzliOTY0YjJiMDg3YTA1YzM5YTU2YTJlMzhjMDQwMTkzMzguanBlZycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2J6JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJmhyZWZcXFwiKS5yZXBsYWNlKC9cXFxcRC9nLCAnJykgKyAnI2J6J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdiZCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcWlhbnFpYW4oXFxcInNlYXJjaFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDoga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU5vOiBNWV9QQUdFXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudHlwZVRyYWNrLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfLmlzVmlwKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy50aXRsZSArICcgLSAnICsgXy5hcnRpc3QubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8ucGljLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2JkJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWQgKyAnI2JkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3p6JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gJ2h0dHBzOi8venoxMjMuY29tJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBvc3QodSArICcvYWpheC8nLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IFxcXCJhY3Q9c2VhcmNoJmtleT1cXFwiICsga2V5d29yZCArIFxcXCImbGFuZz0mcGFnZT1cXFwiICsgTVlfUEFHRVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKS5kYXRhLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubW5hbWUgKyAnIC0gJyArIF8uc25hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogdSArIF8ucGljLnJlcGxhY2UoL1xcXFw/LiovLCAnJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICd6eicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWQgKyAnI3p6J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ25pJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSBodG0gPSBcXFwiLTEuaHRtXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGh0bSA9IFxcXCItMS1cXFwiICsgTVlfUEFHRSArIFxcXCIuaHRtXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleXdvcmQpLnJlcGxhY2UoLy0vZywgJ18yZCcpLnJlcGxhY2UoLyUvZywgJ18nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2hDb2RlQnlXZWJWaWV3KFxcXCJodHRwczovL3d3dy5oaWZpbmkuY29tL3NlYXJjaC1cXFwiICsga2V5d29yZCArIGh0bSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmxvY2tSdWxlcyc6IFsnLmpzJywgJy5jc3MnLCAnLnBuZyddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiA1MDAwXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmxpLm1lZGlhW2RhdGEtdGlkXVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGl0ZW0sIFxcXCJhLDImJlRleHRcXFwiKSAhPSBcXFwi54m55L6bXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZmgoaXRlbSwgXFxcImEsMSYmVGV4dFxcXCIpLnNwbGl0KFxcXCLjgItcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUuc3BsaXQoXFxcIuOAilxcXCIpLnJldmVyc2UoKS5qb2luKCcgLSAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly93d3cuaGlmaW5pLmNvbS9cXFwiICsgcGRmaChpdGVtLCBcXFwiaW1nJiZzcmNcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnbmknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHBkZmgoaXRlbSwgXFxcImEsMSYmaHJlZlxcXCIpLnJlcGxhY2UoL1xcXFxEL2csICcnKSArICcjbmknXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZwJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKFxcXCJodHRwczovL3d3dy5mYW5ncGkubmV0L3MvXFxcIiArIGtleXdvcmQpLCBcXFwiYm9keSYmW2NsYXNzPXJvd11cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiZGl2LDEmJlRleHRcXFwiKSArICcgLSAnICsgcGRmaChpdGVtLCBcXFwiZGl2LDImJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnZnAnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZnAnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHBkZmgoaXRlbSwgXFxcImEsMCYmaHJlZlxcXCIpLnJlcGxhY2UoL1xcXFxEL2csICcnKSArICcjZnAnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaChgaHR0cDovL3d3dy5zb25ndGFzdGUuY28vZGFuY2Uvc2VhcmNoP2tleT0ke2tleXdvcmR9JnBhZ2U9JHtNWV9QQUdFfWApLCBcXFwiYm9keSYmLm1saXN0JiZsaVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCIudGQzJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIikucmVwbGFjZSgncGljZGF0YScsICdhdHRhY2htZW50JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnc3QnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcGRmaChpdGVtLCBcXFwiLnRkMyYmYSYmaHJlZlxcXCIpLnJlcGxhY2UoLy4qXFxcXC8vLCAnJykgKyAnI3N0J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdodCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaChcXFwiaHR0cDovL20uaHRxeXkuY29tL3NlYXJjaC9yZXN1bHQ/aWQ9XFxcIiArIGtleXdvcmQpLCBcXFwiYm9keSYmbGlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiYSwwJiZUZXh0XFxcIikgKyAnIC0gJyArIHBkZmgoaXRlbSwgXFxcImVtLDAmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIikgKyAnMEBoZWFkZXJzPXtcXFwicmVmZXJlclxcXCI6XFxcImh0dHA6Ly9tLmh0cXl5LmNvbVxcXCJ9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnaHQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHBkZmgoaXRlbSwgXFxcIi5wbGF5JiZkYXRhLWlkXFxcIikgKyAnI2h0J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxdCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaChgaHR0cHM6Ly9zby4xdGluZy5jb20vc29uZy9qc29uP3E9JHtrZXl3b3JkfSZwYWdlPSR7TVlfUEFHRX0mc2l6ZT0zMGApKS5yZXN1bHRzLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc29uZ19uYW1lICsgJyAtICcgKyBfLnNpbmdlcl9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczonICsgXy5hbGJ1bV9jb3ZlcixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJzF0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5zb25nX2lkICsgJyMxdCdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICc5dCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZldGNoKGBodHRwOi8vbmV3Ljlza3kuY29tL2FwaS93ZWliby9jb250ZW50L3NlYXJjaD9jb250ZW50PSR7a2V5d29yZH1gKSkuZGF0YS5zb25nX2xpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9eTiQvaS50ZXN0KF8uaXNfc3RhdGlvbikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly9uZXcuOXNreS5jb20vYXBpL3NvbmcvZGV0YWlsP2lkPVxcXCIgKyBfLnNvbmdfaWQgKyBcXFwiJmlzX2xvZ2luPU5cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoKHUpKS5kYXRhO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc29uZ19uYW1lICsgJyAtICcgKyBfLm11c2ljaWFuX25hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5kaXNjX2ltZ191cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICc5dCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uc29uZ19pZCArICcjOXQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW18uc29uZ191cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJjOiBfLmx5cmljX3VybCB8fCBMcmMoXy5kZXNpZ25fbm90ZXMpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzVuZCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaChcXFwiaHR0cDovL20uNW5kLmNvbS9zby9zX1xcXCIgKyBrZXl3b3JkKSwgXFxcImJvZHkmJi5saXN0LXNvbmcmJmxpXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcIi5zb25nJiZUZXh0XFxcIikgKyAnIC0gJyArIHBkZmgoaXRlbSwgXFxcIi5hcnRpc3QmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJzVuZCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcGRmaChpdGVtLCBcXFwiYSYmaHJlZlxcXCIpLnJlcGxhY2UoLy4qXFxcXC98XFxcXC4uKi9nLCAnJykgKyAnIzVuZCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYml1JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaChcXFwiaHR0cHM6Ly9iaXUubW9lL2luZGV4LnBocD9tPSZjPVNvbmcmYT1zZWFyY2gmZGF0YT1cXFwiICsga2V5d29yZCArIFxcXCImcD1cXFwiICsgTVlfUEFHRSksIFxcXCJib2R5JiZ0Ym9keSYmdHJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXVfc2lkID0gcGRmaChpdGVtLCBcXFwiYSwwJiZocmVmXFxcIikucmVwbGFjZSgvXFxcXEQrLywgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiYSwwJiZIdG1sXFxcIikucmVwbGFjZSgvXFxcXHMqPHNwYW5bXFxcXHNcXFxcU10rL2ksIFxcXCJcXFwiKSArICcgLSAnICsgcGRmaChpdGVtLCBcXFwiYSwxJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IFxcXCJodHRwczovL2JpdS5tb2UvU29uZy9zaG93Q292ZXIvc2lkL1xcXCIgKyBiaXVfc2lkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2JpdScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBiaXVfc2lkICsgJyNiaXUnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JsbSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaChgaHR0cHM6Ly9ibGFja2JsbS5iYWlsZW1pLmNvbS9pbmRleC5waHAvZGFuY2Uvc2VhcmNoP2tleT0ke2tleXdvcmR9JnBhZ2U9JHtNWV9QQUdFfWApKS5kYW5jZWxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBfLmRvd251cmwgfHwgXy5wbGF5dXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsICYmIF8ubmFtZSkgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArICcgLSAnICsgKF8uc2luZ2VyIHx8IF8udXBfdXNlciksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uY292ZXIgfHwgXy51cF91c2VyX2xvZ28sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnYmxtJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uc29uZ2lkICsgJyNibG0nXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXVzJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaChcXFwiaHR0cHM6Ly9za3ltdXMub3JnL3RyYWNrcy9cXFwiICsga2V5d29yZCArIFxcXCIvXFxcIiArIE1ZX1BBR0UpLCBcXFwiYm9keSYmLmYtdGFibGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiLmFydGlzdC1uYW1lJiZUZXh0XFxcIikgKyAnIC0gJyArIHBkZmgoaXRlbSwgXFxcIi50cmFjay1uYW1lJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIikucmVwbGFjZSgvXiguKykvLCAnaHR0cHM6JDEnKSB8fCAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ211cycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ211cycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiAndW5kZWZpbmVkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFtcXFwiaHR0cHM6XFxcIiArIHBkZmgoaXRlbSwgXFxcIi5tcDMmJmhyZWZcXFwiKSArICcjaXNNdXNpYz10cnVlIyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2phbSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9zb2xyY2xvdWQuamFtZW5kby5jb20vc29sci9qYW1jb20/d3Q9anNvbiZyb3dzPTMwJnE9XFxcIiArIGtleXdvcmQgKyBcXFwiJnN0YXJ0PVxcXCIgKyAoKE1ZX1BBR0UgLSAxKSAqIDMwKSkpLnJlc3BvbnNlLmRvY3MubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cHM6Ly9wcm9kLTEuc3RvcmFnZS5qYW1lbmRvLmNvbS9kb3dubG9hZC90cmFjay9cXFwiICsgXy5pZCArIFxcXCIvbXAzNVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUucmVwbGFjZShfLmFydGlzdF9uYW1lICsgJyAtICcsICcnKSArICcgLSAnICsgXy5hcnRpc3RfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXFxcImh0dHBzOi8vdXNlcmNvbnRlbnQuamFtZW5kby5jb20vP3R5cGU9YWxidW0maWQ9XFxcIiArIF8uYWxidW1faWQucmVwbGFjZSgvXFxcXEQvZywgJycpICsgXFxcIiZ3aWR0aD01MDAmdHJhY2tpZD1cXFwiICsgXy5pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdqYW0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogJ3VuZGVmaW5lZCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqdWknOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBldmFsKHBvc3QoJ2h0dHBzOi8vbmV3Lm15ZnJlZW1wM2p1aWNlcy5jYy9hcGkvYXBpX3NlYXJjaC5waHA/Y2FsbGJhY2s9anVpY2VzJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBcXFwicT1cXFwiICsga2V5d29yZCArIFxcXCImcGFnZT1cXFwiICsgTVlfUEFHRVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IFxcXCJodHRwczovL25wbGF5LmlkbXAzcy5jb20vc3RyZWFtL1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSBcXFwiQUJDREVGR0hKS01OUFFSU1RVVldYWVphYmNkZWZnaGprbW5wcXJzdHV2eHl6MTIzXFxcIjtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBqdWlfZCh0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09IHQpIHJldHVybiBvWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPCAwICYmICh0ICo9IC0xLCBlICs9IFxcXCItXFxcIik7IDAgPCB0OykgdmFsID0gcGFyc2VJbnQodCAlIDQ4KSwgdCA9IHBhcnNlSW50KHQgLyA0OCksIGUgKz0gb1t2YWxdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfID0gbGlzdFtpXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldHR5SWQgPSBqdWlfZChfLm93bmVyX2lkKSArIFxcXCI6XFxcIiArIGp1aV9kKF8uaWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy50aXRsZSArICcgLSAnICsgXy5hcnRpc3QsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnanVpJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnanVpJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8ucHJldHR5SWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdSArIHByZXR0eUlkICsgJyNpc011c2ljPXRydWUjJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAneTMnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICRzb25nX2RhdGEgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzb25nX2xpc3QgPSAoaSwgaWkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9ICRzb25nX2RhdGFbaV0uc3BsaXQoXFxcInx8XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfID0gaXRlbS5zcGxpdChcXFwifFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9bNF0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cDovL3Rpbmc2Lnl5bXAzLm5ldDo4Mi9cXFwiICsgU3RyaW5nKF9bNF0pLnJlcGxhY2UoJy53bWEnLCAnLm1wMycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9bMV0gKyAnIC0gJyArIF9bM10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCd5MycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAneTMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnByZXR0eUlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaFBDKFxcXCJodHRwOi8vd3d3Lnl5bXAzLmNvbS9wL2dldHNlci5hc3B4P2tleT1cXFwiICsga2V5d29yZCArIFxcXCImcGFnZT1cXFwiICsgTVlfUEFHRSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMzY1JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICQzNjVfU2VhcmNoUmVzdWx0KHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZhKFxcXCI8Ym9keT5cXFwiICsgdCArIFxcXCI8L2JvZHk+XFxcIiwgXFxcImJvZHkmJmxpXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGV2YWwoXFxcIiQzNjVfXFxcIiArIGZldGNoKFxcXCJodHRwOi8vaGl0Lnl1ZTM2NS5jb20vc2VhcmNoLmFzcD9ybmQ9XFxcIiArIE1hdGgucmFuZG9tKCkgKyBcXFwiJmtleXdvcmRzPVxcXCIgKyBlc2NhcGUoa2V5d29yZCkgKyBcXFwiJnQ9MVxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c2ljSWQgPSBwZGZoKGl0ZW0sIFxcXCJhLDAmJmhyZWZcXFwiKS5yZXBsYWNlKC8uKlxcXFwvfFxcXFwuLiovZywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHA6Ly85Ni5pZXJnZS5jbi9cXFwiICsgcGFyc2VJbnQoTXVzaWNJZCAvIDMwMDAwKSArIFxcXCIvXFxcIiArIHBhcnNlSW50KE11c2ljSWQgLyAyMDAwKSArIFxcXCIvXFxcIiArIE11c2ljSWQgKyBcXFwiLm1wM1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcIi5uYW1lJiZUZXh0XFxcIikgKyAnIC0gJyArIHBkZmgoaXRlbSwgXFxcIi5zaW5nZXImJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnMzY1JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJzM2NScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogJ3VuZGVmaW5lZCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAna3onOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3NsaWRlci5rei9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZldGNoKHUgKyBcXFwidmtfYXV0aC5waHA/cT1cXFwiICsga2V5d29yZCkpW1xcXCJhdWRpb3NcXFwiXVtcXFwiXFxcIl0ubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnRpdF9hcnQuc3BsaXQoJyAtICcpLnJldmVyc2UoKS5qb2luKCcgLSAnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgna3onKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAna3onLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uenlpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFsoXy51cmwubWF0Y2goL2h0dHBzPzovKT9cXFwiXFxcIjp1KSArXy51cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2t5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBvc3QoJ2h0dHA6Ly9hcGkua3VhaXlpbjEyMy5uZXQvcS9zZWFyY2gnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IFxcXCJxPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZjbGllbnRfdj0yLjcuMSZwYWdlPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZwbGF0Zm9ybT1BbmRyb2lkXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNsaWVudC12XFxcIjogXFxcIjIuNy4xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJkZXZpY2UtaWRcXFwiOiBSKDE2KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJwbGF0Zm9ybVxcXCI6IFxcXCJBbmRyb2lkXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIm9raHR0cC8zLjE0LjRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvbm5lY3Rpb25cXFwiOiBcXFwiS2VlcC1BbGl2ZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29udGVudC1UeXBlXFxcIjogXFxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKS5kYXRhLm11c2ljX2xpc3Qucm93cy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnRpdGxlICsgJyAtICcgKyBfLnVzZXJfaW5mby5uaWNrbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAna3knLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnp5aWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbXy5wbGF5X3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBseXJpYzogXy5scmNfdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGoxJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly93d3cuenp6ZGouY29tXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaFBDKHUgKyBcXFwiL211c2ljL3NlYXJjaC1cXFwiICsga2V5d29yZCArIFxcXCI/Y2F0X2lkPTAmcGFnZT1cXFwiICsgTVlfUEFHRSksIFxcXCJib2R5JiZ0Ym9keSYmdHJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5tYXRjaCgvYWx0PVxcXCIoLis/KVxcXCIvKVsxXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogdSArIGl0ZW0ubWF0Y2goL3NyYz1cXFwiKC4rPylcXFwiLylbMV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGoxJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGl0ZW0ubWF0Y2goL2RhdGEtaWQ9XFxcIihcXFxcZCspXFxcIi8pWzFdICsgJyNkajEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqMic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2hQQyhcXFwiaHR0cHM6Ly93d3cuZGp1dS5jb20vc2VhcmNoP211c2ljbmFtZT1cXFwiICsga2V5d29yZCArIFxcXCImbGlzdD0yJmNpZD0wJnBhZ2U9XFxcIiArIE1ZX1BBR0UpLCBcXFwiYm9keSYmLmxpc3RfbXVzaWNsaXN0JiZ0cltjbGFzc11cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5tYXRjaCgvdGl0bGU9XFxcIiguKz8pXFxcIi8pWzFdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBcXFwiaHR0cHM6XFxcIiArIGl0ZW0ubWF0Y2goL3NyYz1cXFwiKC4rPylcXFwiLylbMV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGoyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGl0ZW0ubWF0Y2goL3ZhbHVlPVxcXCIoXFxcXGQrKVxcXCIvKVsxXSArICcjZGoyJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajMnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cDovL3d3dy5sYWxhZGouY29tXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaFBDKHUgKyBcXFwiL3NlYXJjaD9zZWFyY2g9XFxcIiArIGtleXdvcmQgKyBcXFwiJnBhZ2U9XFxcIiArIE1ZX1BBR0UpLCBcXFwiYm9keSYmLmxpc3RfbXVzaWNsaXN0JiZ0cltjbGFzc11cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiLnQxJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHUgKyBpdGVtLm1hdGNoKC9zcmM9XFxcIiguKz8pXFxcIi8pWzFdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqMycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBpdGVtLm1hdGNoKC92YWx1ZT1cXFwiKFxcXFxkKylcXFwiLylbMV0gKyAnI2RqMydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGo0JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaFBDKFxcXCJodHRwczovL20uYWhhZGouY29tL3NlYXJjaC8/a2V5PVxcXCIgKyBrZXl3b3JkICsgXFxcIiZwYWdlPVxcXCIgKyBNWV9QQUdFICsgXFxcIi5odG1sXFxcIiksIFxcXCJib2R5JiYueWlueXVlX2xpc3QmJmxpXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBwZGZoKGl0ZW0sIFxcXCJoMyYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cHM6Ly9zdC45Mmt1LmNvbS96d2NzL1xcXCIgKyB0aXRsZSArIFxcXCIubXA0XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBwZGZoKGl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqNCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJmhyZWZcXFwiKS5yZXBsYWNlKC9cXFxcRC9nLCAnJykgKyAnI2RqNCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1swXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGo1JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gJ2h0dHBzOi8vd3d3LmRqLm5ldC8nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBwb3N0KHUgKyAnc2VhcmNoLnBocD9tb2Q9bXVzaWMmZm9ybWhhc2g9OGM5NjRlOGEmc3JjaHR4dD0nICsgZW5jb2RlU3RyKGtleXdvcmQsICdHQksnKSArICcmc2VhcmNoc3VibWl0PXllcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9Z2JrJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHUgKyBKU09OLnBhcnNlKF8pLmhlYWRlcnMubG9jYXRpb25bMF0gKyBcXFwiJnBhZ2U9XFxcIiArIE1ZX1BBR0U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2godXJsKSwgXFxcImJvZHkmJi5tdXNpYy1saXN0JiZsaVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCJhLDEmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogdSArIHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIikucmVwbGFjZShcXFwiJnNpemU9c21hbGxcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGo1JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHBkZmgoaXRlbSwgXFxcImEsMSYmaHJlZlxcXCIpLm1hdGNoKC9pZD0oXFxcXGQrKS8pWzFdICsgJyNkajUnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqNic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9ICdodHRwOi8vd3d3LjM2ZGouY29tL2Uvc2VhcmNoLyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXyA9IHBvc3QodSArICdpbmRleC5waHAnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWQ6ICcxLDIsMyw0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0OiAnJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3c6ICd0aXRsZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1waWQ6ICcxJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSArPSBKU09OLnBhcnNlKF8pLmhlYWRlcnMubG9jYXRpb25bMF0gKyBcXFwiJnBhZ2U9XFxcIiArIChNWV9QQUdFIC0gMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2godSksIFxcXCJib2R5JiYjcGxheWxpc3QmJmxpXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcImEsMCYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ2RqNicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqNicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBpdGVtLm1hdGNoKC92YWx1ZT1cXFwiKFxcXFxkKylcXFwiLylbMV0gKyAnI2RqNidcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGo3JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gJ2h0dHBzOi8vd3d3LjdpZGouY29tL2Uvc2VhcmNoLydcXG4gICAgICAgICAgICAgICAgICAgICAgICBfID0gcG9zdCh1ICsgJ2luZGV4LnBocCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmQ6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93OiAndGl0bGUnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ICs9IEpTT04ucGFyc2UoXykuaGVhZGVycy5sb2NhdGlvblswXSArIFxcXCImcGFnZT1cXFwiICsgKE1ZX1BBR0UgLSAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaCh1KSwgXFxcImJvZHkmJmxpW2RhdGEtaWRdXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcImEsMCYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ2RqNycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqNycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBpdGVtLm1hdGNoKC9kYXRhLWlkPVxcXCIoXFxcXGQrKVxcXCIvKVsxXSArICcjZGo3J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajgnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAnaHR0cHM6Ly93d3cuZGp1OC5jb20vJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gZmV0Y2hQQyh1ICsgJ2tleS9tbF8nICsgZW5jb2RlU3RyKGtleXdvcmQsICdHQksnKSArICdfJyArIE1ZX1BBR0UgKyAnLmh0bWwnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAndGV4dC9odG1sOyBjaGFyc2V0PWdiMjMxMicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVmZXJlcic6IHVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGl0ZW0sIFxcXCJib2R5JiYjZGpvdXImJmxpW29ubW91c2VvdmVyXVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdkajgnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogaXRlbS5tYXRjaCgvdmFsdWU9XFxcIihcXFxcZCspXFxcIi8pWzFdICsgJyNkajgnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqOSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9ICdodHRwczovL3d3dy5kanl5eS5jb20vc2VhcmNoLnBocD9hYz1kaiZrZXk9JyArIGtleXdvcmQgKyAnJnBhZ2VzPScgKyBNWV9QQUdFO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoUEModSksIFxcXCJib2R5JiZsaVtkYXRhLWlkXSBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiYSwwJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnZGo5JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGo5JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGl0ZW0ubWF0Y2goL2RhdGEtaWQ9XFxcIihcXFxcZCspXFxcIi8pWzFdICsgJyNkajknXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmjqXlj6PplJnor69+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rKh5pyJ5Y+v5Lul5pCc57Si5q2M5Y2V55qE5o6l5Y+jflxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0Mikge1xcbiAgICAgICAgW3QxLCBwbGF0Zm9ybSwgdHlwZV0gPSB0MS5zcGxpdCgnIycpO1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZzMnOlxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly93d3cuZ2dnbXVzaWMuY29tL1xcXCI7XFxuICAgICAgICAgICAgICAgIGl0ZW0gPSBwZGZoKGZldGNoKHUgKyBcXFwidGhyZWFkLVxcXCIgKyB0MSArIFxcXCIuaHRtXFxcIiksIFxcXCJkaXYubWVzc2FnZS5icmVhay1hbGwmJkh0bWxcXFwiKTtcXG4gICAgICAgICAgICAgICAgXFxuZXZhbChcXFwidXJsPVxcXCIraXRlbS5tYXRjaCgvdXJsOlxcXFxzKihbXlxcXFxuLF0rKS8pWzFdLnJlcGxhY2UoXFxcImJhc2U2NF9kZWNvZGVcXFwiLCBcXFwiYmFzZTY0RGVjb2RlXFxcIikpO1xcbmlmKCF1cmwubWF0Y2goL2h0dHAvKSl7XFxudXJsID0gdSt1cmxcXG59XFxuZWxzZXtcXG51PVxcXCJcXFwiXFxufVxcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBscmMgPSBpdGVtLnNwbGl0KFxcXCI8L2g1PlxcXCIpWzFdLnNwbGl0KFxcXCI8aDVcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgaWYgKGxyYy5tYXRjaCgvXFxcXFtcXFxcZCs6XFxcXGQrLykpXFxuICAgICAgICAgICAgICAgICAgICBscmMgPSBscmMucmVwbGFjZSgvKFxcXFxzKjxcXFxcLz9wPikrL2dpLCBcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gTHJjKGxyYyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZXI6IHVcXG4gICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnYnonOlxcbiAgICAgICAgICAgICAgICBpdGVtID0gZmV0Y2goXFxcImh0dHBzOi8vZGViZW56aS5jb20vdS9cXFwiICsgdDEgKyBcXFwiL1xcXCIpO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwZGZoKGl0ZW0sIFxcXCJhdWRpbyYmc3JjXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxyYyA9IHBkZmgoaXRlbSwgXFxcIi5lbnRyeS1jb250ZW50JiZIdG1sXFxcIikuc3BsaXQoXFxcIjxzdHJvbmc+5q2M6K+N77yaPC9zdHJvbmc+XFxcIilbMV07XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogTHJjKGxyYylcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2JkJzpcXG4gICAgICAgICAgICAgICAgXyA9IHFpYW5xaWFuKFxcXCJzb25nL3RyYWNrbGlua1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIFRTSUQ6IHQxXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgXy5wYXRoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW18ucGF0aCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHJjOiBfLmx5cmljXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICd6eic6XFxuICAgICAgICAgICAgICAgIHUgPSAnaHR0cHM6Ly96ejEyMy5jb20nO1xcbiAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShwb3N0KHUgKyAnL2FqYXgvJywge1xcbiAgICAgICAgICAgICAgICAgICAgYm9keTogXFxcImFjdD1zb25naW5mbyZpZD1cXFwiICsgdDEgKyBcXFwiJmxhbmc9XFxcIlxcbiAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgdXJsID0gdSArIF8ubXAzO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IEpTT04ucGFyc2UodSkuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlcjogdVxcbiAgICAgICAgICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogXy5scmMucmVwbGFjZSgvXFxcXHIvZywgJycpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICduaSc6XFxuICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cHM6Ly93d3cuaGlmaW5pLmNvbS9cXFwiO1xcbiAgICAgICAgICAgICAgICBpdGVtID0gcGRmaChmZXRjaCh1ICsgYHRocmVhZC0ke3QxfS5odG1gKSwgXFxcImRpdi5tZXNzYWdlLmJyZWFrLWFsbCYmSHRtbFxcXCIpO1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1ICsgaXRlbS5tYXRjaCgvdXJsOlxcXFxzKltcXFwiJ10oW15cXFwiJ10rKS8pWzFdO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBscmMgPSBpdGVtLnJlcGxhY2UoL15bXFxcXHNcXFxcU10rPzxcXFxcL2g1Pnw8aDVbXj5dKj5bXFxcXHNcXFxcU10rL2dpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogTHJjKGxyYylcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2ZwJzpcXG4gICAgICAgICAgICAgICAgdXJsID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly93d3cuZmFuZ3BpLm5ldC9hcGkvcGxheV91cmw/aWQ9XFxcIiArIHQxICsgXFxcIiZqc29uPTFcXFwiKSkuZGF0YS51cmw7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogXFxcImh0dHBzOi8vd3d3LmZhbmdwaS5uZXQvZG93bmxvYWQvbHJjL1xcXCIgKyB0MVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnc3QnOlxcbiAgICAgICAgICAgICAgICBpdGVtID0gZmV0Y2hQQyhcXFwiaHR0cDovL3d3dy5zb25ndGFzdGUuY28vc29uZy9cXFwiICsgdDEpO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwZGZoKGl0ZW0sIFxcXCJzb3VyY2UsMCYmc3JjXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGV2YWwoU3RyaW5nKGl0ZW0ubWF0Y2goL2xyYyA9IGBbXFxcXHNcXFxcU10qP2A7LylbMF0pKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBMcmMobHJjKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnaHQnOlxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly9tLmh0cXl5LmNvbS9wbGF5L1xcXCIgKyB0MTtcXG4gICAgICAgICAgICAgICAgY29kZSA9IGV4ZWN1dGVXZWJSdWxlKHUsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7XFxuICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbyddXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cDovL2Y1Lmh0cXl5LmNvbS9wbGF5OS9cXFwiICsgdDEgKyBcXFwiL21wMy9cXFwiICsgY29kZTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlcjogdVxcbiAgICAgICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJzF0JzpcXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3d3dy4xdGluZy5jb21cXFwiO1xcbiAgICAgICAgICAgICAgICBwYXRoID0gZXhlY3V0ZVdlYlJ1bGUoYGh0dHBzOi8vaDUuMXRpbmcuY29tL3NvbmcvYCArIHQxLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnX3NvbmdfbWV0YS5zb25nX3BhdGg7XFxuICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbyddXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1ICsgXFxcIi9hcGkvYXVkaW8/XFxcIiArIHBhdGg7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsLCBoZWFkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGZldGNoKHVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVyOiB1XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBKU09OLnBhcnNlKHUpLmhlYWRlcnMubG9jYXRpb25bMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIHUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxyYyA9IHUgKyBcXFwiL3RvdWNoL2FwaS9seXJpYy9cXFwiICsgdDE7XFxuICAgICAgICAgICAgICAgIGxyYyA9IEpTT04ucGFyc2UoZmV0Y2gobHJjKSkubHlyaWNfY29udGVudDtcXG4gICAgICAgICAgICAgICAgaWYgKCFscmMubWF0Y2goL1xcXFxbXFxcXGQrOlxcXFxkKy8pKVxcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gTHJjKGxyYyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZXI6IHVcXG4gICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnOXQnOlxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly9uZXcuOXNreS5jb20vYXBpL3NvbmcvZGV0YWlsP2lkPVxcXCIgKyB0MSArIFxcXCImaXNfbG9naW49TlxcXCI7XFxuICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoKHUpKS5kYXRhO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgXy5zb25nX3VybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtfLnNvbmdfdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBscmM6IF8ubHlyaWNfdXJsIHx8IExyYyhfLmRlc2lnbl9ub3RlcylcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJzVuZCc6XFxuICAgICAgICAgICAgICAgIGl0ZW0gPSBmZXRjaChgaHR0cDovL20uNW5kLmNvbS90aW5nLyR7dDF9Lmh0bWxgKTtcXG4gICAgICAgICAgICAgICAgZXZhbChpdGVtLm1hdGNoKC9tcDMgPSAuKj87LylbMF0pO1xcbiAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cDovL21wZ2UuNW5kLmNvbS8nICsgbXAzO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBscmMgPSBwZGZoKGl0ZW0sIFxcXCIjbHJjY29udCYmSHRtbFxcXCIpLnJlcGxhY2UoLzxcXFxcIS0tLio/LS0+fDxiclxcXFwvPz4vZ2ksICdcXFxcbicpXFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdiaXUnOlxcbiAgICAgICAgICAgICAgICB1cmwgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2JpdS5tb2UvU29uZy9wbGF5U0lEL3NpZC9cXFwiICsgdDEpKS51cmxpbmZvLnVybDtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbHJjID0gcGRmaChmZXRjaChcXFwiaHR0cHM6Ly9iaXUubW9lL3NcXFwiICsgdDEpLCBcXFwiLmFtLXBvcHVwLWJkJiZIdG1sXFxcIikucmVwbGFjZSgvPChidXR0b24pLio/XFxcXDE+fDxcXFxcLz9iclxcXFwvPz4vZ2ksIFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnYmxtJzpcXG4gICAgICAgICAgICAgICAgdSA9ICdodHRwczovL2JsYWNrYmxtLmJhaWxlbWkuY29tL2luZGV4LnBocC9kYW5jZS9wbGF5L2lkLycgKyB0MTtcXG4gICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2godSkpO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBfLmRvd251cmwgfHwgXy5wbGF5dXJsO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGoxJzpcXG4gICAgICAgICAgICAgICAgaXRlbSA9IGZldGNoUEMoXFxcImh0dHA6Ly93d3cuenp6ZGouY29tL211c2ljL2luZm8tXFxcIiArIHQxKTtcXG4gICAgICAgICAgICAgICAgdXJsID0gcGRmaChpdGVtLCBcXFwiYXVkaW8mJnNyY1xcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGoyJzpcXG4gICAgICAgICAgICAgICAgdXJpID0gSlNPTi5wYXJzZShmZXRjaFBDKFxcXCJodHRwczovL3d3dy5kanV1LmNvbS93YXAvcGxheS9wbGF5P2lkPVxcXCIgKyB0MSkpLmRhdGEubGlzdGVudXJsO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBgaHR0cDovL21wNC5kanV1LmNvbS8ke3VyaX0ubTRhYDtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqMyc6XFxuICAgICAgICAgICAgICAgIHVybCA9IEpTT04ucGFyc2UoZmV0Y2hQQyhcXFwiaHR0cDovL3d3dy5sYWxhZGouY29tL2luZGV4L2luZGV4L2dldF9jb29raWVcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogYHNvbmdfbGlzdD10aGluazpbe1xcXCJpZFxcXCI6XFxcIiR7dDF9XFxcIn1dO2BcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSkpLmRhdGFbMF0ucGF0aDtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqNCc6XFxuICAgICAgICAgICAgICAgIHVyaSA9IGV4ZWN1dGVXZWJSdWxlKFxcXCJodHRwczovL3d3dy5haGFkai5jb20vbXVzaWMvXFxcIiArIHQxICsgXFxcIi5odG1sXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGFuY2VGaWxlUGF0aDtcXG4gICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmpzJywgJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IGBodHRwczovL3N0Ljkya3UuY29tL2AgKyB1cmk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzBdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdkajUnOlxcbiAgICAgICAgICAgICAgICBfID0gcG9zdCgnaHR0cHM6Ly9tLmRqLm5ldC90ZW1wbGF0ZS96aHpoX2R6bXVzaWMvYWpheC8/YWN0aW9uPWdldHVybCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IFxcXCJpZD1cXFwiICsgdDFcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczovL2RqbmV0LnNyYy5kai5uZXQ6NDQzMS9cXFwiICsgSlNPTi5wYXJzZShfKS5kYXRhWzBdLnNyYztcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqNic6XFxuICAgICAgICAgICAgICAgIHVyaSA9IGV4ZWN1dGVXZWJSdWxlKFxcXCJodHRwOi8vd3d3LjM2ZGouY29tL3BsYXkvXFxcIiArIHQxICsgXFxcIi5odG1sXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5wbGF5dXJsO1xcbiAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuanMnLCAnLmNzcycsICcuanBnJywgJy5wbmcnLCAnLmdpZicsICcuc3ZnJywgJy5pY28nLCAnL2UvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IGBodHRwOi8vdG4xLjcyZGphcHAuY246ODM5OS9gICsgdXJpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGo3JzpcXG4gICAgICAgICAgICAgICAgdXJsID0gZXhlY3V0ZVdlYlJ1bGUoXFxcImh0dHBzOi8vd3d3LjdpZGouY29tL2RqL1xcXCIgKyB0MSArIFxcXCIuaHRtbFxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYXl1cmw7XFxuICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbyddXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGo4JzpcXG4gICAgICAgICAgICAgICAgdSA9ICdodHRwczovL3d3dy5kanU4LmNvbSc7XFxuICAgICAgICAgICAgICAgIGl0ZW0gPSB1ICsgJy9pay96Lz8nICsgZXhlY3V0ZVdlYlJ1bGUodSArICcvZGlzY28vJyArIHQxICsgJy8nLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdXJsO1xcbiAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuanMnLCAnLmNzcycsICcuanBnJywgJy5wbmcnLCAnLmdpZicsICcuc3ZnJywgJy5pY28nXVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaXRlbSA9IGZldGNoQ29kZUJ5V2ViVmlldyhpdGVtLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBkZmgoaXRlbSwgXFxcImF1ZGlvJiZzcmNcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqOSc6XFxuICAgICAgICAgICAgICAgIHVybCA9IGV4ZWN1dGVXZWJSdWxlKCdodHRwczovL20uZGp5eXkuY29tL3BsYXkvJyArIHQxICsgJy5odG1sJywgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheXVybDtcXG4gICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmpzJywgJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzBdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoueoi+W6j+mmlumhtVwiLFwicGF0aFwiOlwiaG9tZVwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5kID0gW107XFxudHJ5IHtcXG4gICAgaVRhZyA9IHN0b3JhZ2UwLmdldE15VmFyKHBsYXRmb3JtICsgXFxcIl9pVGFnXFxcIik7XFxuICAgIGlmIChpVGFnID09IFxcXCJcXFwiKVxcbiAgICAgICAgaVRhZyA9IHt9LFxcbiAgICAgICAgJC5yZXF1aXJlKHBsYXRmb3JtICsgJz9ydWxlPeatjOivjemAgumFjScpLmlUYWcoKTtcXG4gICAgdGlkID0gZ2V0TXlWYXIoJ3RpZCcsICfmjqjojZAnKTtcXG4gICAgdHJyID0gT2JqZWN0LmtleXMoaVRhZ1t0aWRdKTtcXG4gICAgdGlpID0gZ2V0TXlWYXIoJ3RpaScsICcwJyk7XFxuICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICQucmVxdWlyZSgnbm90aWNlP3J1bGU95q2M6K+N6YCC6YWNJykoKTtcXG4gICAgICAgIE9iamVjdC5rZXlzKGlUYWcpLm1hcCgobmFtZSwgaWkpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGlkID09IG5hbWUgPyBSaWNoKFN0cm9uZyhDb2xvcihuYW1lKSkpIDogbmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd0aWQnLCB0aWQpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigndGlpJyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+5YiH5o2i5o6l5Y+jPC9iPjwvc3Bhbj4nLFxcbiAgICAgICAgICAgIHVybDogJChwbGF0Zm9ybXMuc2xpY2UoMCwgOCkubWFwKHRpdGxlID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlID09IHBsYXRmb3JtKVxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBSaWNoKFN0cm9uZyhDb2xvcih0aXRsZSkpKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpdGxlXFxuICAgICAgICAgICAgfSksIDIsICfpgInmi6nmjqXlj6PlubPlj7AnKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0Lm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdwbGF0Zm9ybScsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3RpZCcpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigndGlpJyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKShwbGF0Zm9ybSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+VEdY5pS26JePPC9iPjwvc3Bhbj4nLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9jb2xsZWN0aW9uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPeatjOivjemAgumFjVxcXCIsXFxuICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ+aUtuiXjycpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCJUR1jmlLbol49cXFwiLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7op6PmnpDnrqHnkIY8L2I+PC9zcGFuPicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVMaXN0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wYWdlVGl0bGU96Kej5p6Q566h55CGJnJ1bGU95q2M6K+N6YCC6YWNXFxcIixcXG4gICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgn6K6+572uJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfwn5SNJyxcXG4gICAgICAgICAgICBkZXNjOiAn5pCc57Si5YWz6ZSu6K+NIC8g5YiG5Lqr6ZO+5o6lJyxcXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHNfcGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfcGxhdGZvcm0nLCBzX3BsYXRmb3JtKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QyJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc19wbGF0Zm9ybScpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3NfdDMnKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc190NCcpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2gjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3A9ZnlwYWdlJnJ1bGU95q2M6K+N6YCC6YWNXFxcIjtcXG4gICAgICAgICAgICB9LCBwbGF0Zm9ybSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjpzZWFyY2gxXFxcIixcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBcXFwi6auY57qn5pCc57SiXFxcIixcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwic190MlxcXCIpLFxcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdzX3QyJywgaW5wdXQpXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+aIkeeahOaUtuiXjycsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9jb2xsZWN0aW9uP3J1bGU95q2M6K+N6YCC6YWNJyxcXG4gICAgICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5Y6G5Y+y6K6w5b2VJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2hpc3Rvcnk/cnVsZT3mrYzor43pgILphY0nLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb24zJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfpq5jnuqfmkJzntKInLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3NfcGxhdGZvcm0nKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc190MycpO1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3Q0Jyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cD1meXBhZ2UmcnVsZT3mrYzor43pgILphY1cXFwiO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb24yJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PGZvbnQgY29sb3I9I2ZmNjYwMT4nICsgdGlkICsgJzwvZm9udD48L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgdHJyLm1hcCgobmFtZSwgaWkpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGlpID09IGlpID8gUmljaChTdHJvbmcoQ29sb3IobmFtZSkpKSA6IG5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGlpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndGlpJywgdGlpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIGlpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICB9KTtcXG4gICAgICAgIExvYWRpbmcoKTtcXG4gICAgfVxcbiAgICB1cmkgPSBpVGFnW3RpZF1bdHJyW3RpaV1dO1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJpKSkgJC5yZXF1aXJlKHBsYXRmb3JtICsgXFxcIj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxhenkoMSwgdXJpKTtcXG4gICAgZWxzZSBkID0gZC5jb25jYXQodXJpKTtcXG59IGNhdGNoIChmZXRjaF9lcnJvcikge1xcbiAgICAvLyBlcnJvcihmZXRjaF9lcnJvcik7XFxuICAgIGQgPSBbe1xcbiAgICAgICAgdGl0bGU6IFxcXCLnvZHnu5zlvILluLggLyDmjqXlj6PltKnmuoPkuoZcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuaNouS4quaOpeWPo+eci+eci+OAglxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9XTtcXG4gICAgcGxhdGZvcm1zLnNsaWNlKDEsIDgpXFxuICAgICAgICAuZmlsdGVyKHRpdGxlID0+IHRpdGxlICE9IHBsYXRmb3JtKVxcbiAgICAgICAgLm1hcCh0aXRsZSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCcsXFxuICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3BsYXRmb3JtJywgdGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigndGlkJyk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCd0aWknKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCB0aXRsZSlcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbn1cXG5NWV9QQUdFID09IDEgPyBzZXRQcmVSZXN1bHQoZCkgOiBzZXRSZXN1bHQoZCk7XFxuZGVsZXRlSXRlbUJ5Q2xzKCdsb2FkaW5nX2dpZicpO1xcblxcblxcblxcbi8vIOamguW/teeJiOetvuWIsOaPkOmGklxcbmlmIChnZXRNeVZhcignUnVsZV9ub3VwZGF0ZScsICcnKSA9PSAnMScgJiYgTVlfUEFHRSA9PSAxKSB7XFxuICAgIHRpbWUgPSArJC5kYXRlRm9ybWF0KG5ldyBEYXRlKCkuZ2V0VGltZSgpLCAneXl5eU1NZGQnKTtcXG4gICAga2dfbGl0ZSA9IHN0b3JhZ2UwLmdldEl0ZW0oJ2p4bGlzdF9rZycsIFtdKVxcbiAgICAgICAgLmZpbmQoXyA9PiBtZDUoXy50aXRsZSArIF8udXJsKSA9PSBcXFwiYzg3N2FlNzJiOTdiYzI2NzIwYWQ4YjFhMzkzNjJkNDdcXFwiKTtcXG4gICAgaWYgKGdldEl0ZW0oJ3VwZGF0ZTEnLCAnMScpID09ICcxJyAmJiBrZ19saXRlKSB7XFxuICAgICAgICBpZiAoJC5kYXRlRm9ybWF0KGtnX2xpdGUudGltZSwgJ3l5eXlNTWRkJykgPCB0aW1lKSB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnW+mFt+eLl+amguW/teeJiF0g5ZCs5q2M6aKG5Lya5ZGYJyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogJ+avj+aXpeWQrOatjOWNs+WPr+mihuWPljHml6Xphbfni5fmpoLlv7XniYhWSVAnLFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBtYXQgPSBhZXNEZWNvZGUoJ2hrNjY2NjY2NjEwOScsIF8uamlleGkpLm1hdGNoKC9cXFwiKFteXFxcIl0rKVxcXCIsIFxcXCIoLispXFxcIiwgXFxcIjMxMTZcXFwiLCBcXFwiKC4rKVxcXCIvKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImtnP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuTGl0ZV9TaWduaW4obWF0WzFdLCBtYXRbMl0sIG1hdFszXSwgdHJ1ZSk7XFxuICAgICAgICAgICAgICAgIH0sIGtnX2xpdGUpLFxcbiAgICAgICAgICAgICAgICBjYW5jZWw6ICQudG9TdHJpbmcoKF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIF8udGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgXy5zaWduaW4gPSAxO1xcbiAgICAgICAgICAgICAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0X2tnJywgW10pO1xcbiAgICAgICAgICAgICAgICAgICAganhsaXN0LnVuc2hpZnQoXyk7XFxuICAgICAgICAgICAgICAgICAgICBqeGxpc3QgPSBqeGxpc3QuZmlsdGVyKChvYmosIGluZGV4LCBhcnIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmZpbmRJbmRleChvID0+IG1kNShvYmoudGl0bGUgKyBvYmoudXJsKSA9PT0gbWQ1KG8udGl0bGUgKyBvLnVybCkpID09PSBpbmRleDtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0X2tnJywganhsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ku4rml6XkuI3lho3mj5DnpLrvvIzor7flnKjorr7nva7pobXmiYvliqjnrb7liLBcXFwiXFxuICAgICAgICAgICAgICAgIH0sIGtnX2xpdGUpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIOS7iuWkqeW3sue7j+etvuWIsOi/h+S6hlxcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy8g5rKh5pyJ5qaC5b+154mI6Kej5p6QIC8g5LiN5o+Q56S6562+5YiwXFxuICAgIH1cXG4gICAgaWYgKGdldEl0ZW0oJ3VwZGF0ZTInLCAnMCcpID09ICcxJyAmJiAoIWtnX2xpdGUgfHwgJC5kYXRlRm9ybWF0KGtnX2xpdGUudGltZSwgJ3l5eXlNTWRkJykgPT0gdGltZSkpIHtcXG4gICAgICAgIHFxX2xpdGUgPSBzdG9yYWdlMC5nZXRJdGVtKCdqeGxpc3RfcXEnLCBbXSlcXG4gICAgICAgICAgICAuZmluZChfID0+IG1kNShfLnRpdGxlICsgXy51cmwpID09IFxcXCJlMmMxYTRiZjhkNThkMTcwM2E1ZTgxMDllMWY5MGNjMFxcXCIpO1xcbiAgICAgICAgaWYgKHFxX2xpdGUpIHtcXG4gICAgICAgICAgICBpZiAoJC5kYXRlRm9ybWF0KHFxX2xpdGUudGltZSArIDUuM2U4LCAneXl5eU1NZGQnKSA8IHRpbWUpIHtcXG4gICAgICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1tRUemfs+S5kF0g5Yi35pawY29va2llJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICfmr4/kuIPlpKnpnIDopoHliLfmlrDkuIDmrKFjb29raWUnLFxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZSA9IGFlc0RlY29kZSgnaGs2NjY2NjY2MTA5JywgXy5qaWV4aSkubWF0Y2goL0Nvb2tpZTogXFxcIihbXlxcXCJdKykvKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJxcT9ydWxlPeatjOivjemAgumFjVxcXCIpLnJlZnJlc2hfbG9naW4oY29va2llKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHFxX2xpdGUpLFxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiAkLnRvU3RyaW5nKChfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXy50aW1lICs9IDguNmU3O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF8uc2lnbmluID0gMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3QgPSBzdG9yYWdlMC5nZXRJdGVtKCdqeGxpc3RfcXEnLCBbXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0LnVuc2hpZnQoXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0ID0ganhsaXN0LmZpbHRlcigob2JqLCBpbmRleCwgYXJyKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnIuZmluZEluZGV4KG8gPT4gbWQ1KG9iai50aXRsZSArIG9iai51cmwpID09PSBtZDUoby50aXRsZSArIG8udXJsKSkgPT09IGluZGV4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ2p4bGlzdF9xcScsIGp4bGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S7iuaXpeS4jeWGjeaPkOekuu+8jOivt+WcqOiuvue9rumhteaJi+WKqOetvuWIsFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHFxX2xpdGUpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIC8vIOi/mOayoeWIsOetvuWIsOaXtumXtFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8g5rKh5pyJcXHop6PmnpBcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRpuinhOWImee8lui+kVwiLFwicGF0aFwiOlwicnVsZUVkaXRcIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScsIHt9KSkucnVsZSk7XFxuZCA9IFtdO1xcbmp4X3MxID0gZ2V0TXlWYXIoJ2p4X3MxJywgJzAnKSA9PSAnMCc7XFxuanhfczIgPSBnZXRNeVZhcignanhfczInLCAnMCcpID09ICcwJztcXG5qeF9zMyA9IGdldE15VmFyKCdqeF9zMicsICcwJykgPT0gJzEnO1xcbmp4X3R5cGUgPSBnZXRNeVZhcignanhfdHlwZScsICdrdycpO1xcbmp4X29wZW4gPSBnZXRNeVZhcignanhfb3BlbicsICcxJykgPT0gJzEnO1xcbmp4X2Rvd24gPSBnZXRNeVZhcignanhfZG93bicsICcwJykgPT0gJzEnO1xcbmp4X3RpZCA9IGdldE15VmFyKCdqeF90aWQnLCBNWV9QQVJBTVMubmV3ID8gJ+WfuuacrCcgOiAn6aKE6KeIJyk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+6Kej5p6Q5bmz5Y+wPC9iPjwvc3Bhbj4nLFxcbiAgICB1cmw6ICQocGxhdGZvcm1zLnNsaWNlKDEsIDYpLm1hcCh0aXRsZSA9PiB7XFxuICAgICAgICBpZiAodGl0bGUgPT0ganhfdHlwZSlcXG4gICAgICAgICAgICB0aXRsZSA9IFJpY2goU3Ryb25nKENvbG9yKHRpdGxlKSkpO1xcbiAgICAgICAgcmV0dXJuIHRpdGxlXFxuICAgIH0pLCAxLCAn6YCJ5oup5o6l5Y+j5bmz5Y+wJykuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgIGlmICghaW5wdXQubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdqeF90eXBlJywgaW5wdXQpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0pLFxcbiAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKShqeF90eXBlKSxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+5ZCv55So6K+V5ZCsPC9iPjwvc3Bhbj4nLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEssIG9wZW4pID0+IHtcXG4gICAgICAgIGlmIChLKSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X29wZW4nLCBvcGVuKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXmv4DmtLvlr4bljJlcXFwiKS5pbnB1dCgob3BlbikgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTEnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MxJywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9vcGVuJywgb3Blbik7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mv4DmtLvlpLHotKVcXFwiO1xcbiAgICAgICAgICAgIH0sIG9wZW4pO1xcbiAgICAgICAgfVxcbiAgICB9LCBqeF9zMSwganhfb3BlbiA/ICcwJyA6ICcxJyksXFxuICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChqeF9vcGVuID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPuWQr+eUqOS4i+i9vTwvYj48L3NwYW4+JyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChLLCBkb3duKSA9PiB7XFxuICAgICAgICBpZiAoSykge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdqeF9kb3duJywgZG93bik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5r+A5rS75a+G5YyZXFxcIikuaW5wdXQoKGRvd24pID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20xJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMScsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfZG93bicsIGRvd24pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5r+A5rS75aSx6LSlXFxcIjtcXG4gICAgICAgICAgICB9LCBkb3duKTtcXG4gICAgICAgIH1cXG4gICAgfSwganhfczEsIGp4X2Rvd24gPyAnMCcgOiAnMScpLFxcbiAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfZG93biA/IDU1IDogNjMpICsgJy5zdmcnLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMydcXG59KTtcXG5bXFxcIumihOiniFxcXCIsIFxcXCLln7rmnKxcXFwiLCBcXFwi6Z+z6LSoXFxcIiwgXFxcIuino+aekFxcXCIsIFxcXCLmi5PlsZVcXFwiXS5tYXAobmFtZSA9PiB7XFxuICAgIGkgPSBqeF90aWQgPT0gbmFtZVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFJpY2goU3Ryb25nKGkgPyBDb2xvcihuYW1lKSA6IG5hbWUpKSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGlkLCB0aWksIGZlZykgPT4ge1xcbiAgICAgICAgICAgIGlmICh0aWkpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3RpZCcsIHRpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIG5hbWUsICFpLCAhanhfczIpLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzUnXFxuICAgIH0pO1xcbn0pO1xcbnN3aXRjaCAoanhfdGlkKSB7XFxuICAgIGNhc2UgJ+mihOiniCc6XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoZ2V0TXlWYXIoJ2p4X3RpdGxlJykpLFxcbiAgICAgICAgICAgIGRlc2M6IFtcXFwibXAzXFxcIiwgXFxcImhxXFxcIiwgXFxcInNxXFxcIiwgXFxcImhyXFxcIiwvKiBcXFwienFcXFwiKi9dLm1hcCh0ID0+IGdldE15VmFyKFxcXCJqeF9cXFwiICsgdCkgIT0gXFxcIlxcXCIgPyAn4piFJyA6ICfimIYnKS5qb2luKFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiBnZXRNeVZhcignanhfaW1nJykgfHwgJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ2p4X2Rlc2MnKSArICfkuKgnICsgZ2V0TXlWYXIoJ2p4X3VybCcpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcignanhfY29udGVudCcsICdcXFxcblxcXFxuXFxcXG5cXFxcblxcXFxuJykucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfkvb/nlKjmnYPpmZAnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSykgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoSykgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTEnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMScsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0sIGp4X3MxKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczEgPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCcsXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfnvJbovpHmnYPpmZAnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSykgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoSykgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0sIGp4X3MyKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczIgPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WfuuacrCc6XFxuICAgICAgICBbXFxuICAgICAgICAgICAgWyflv4XloavvvIzmupDmoIfor4YnLCAndXJsJ10sXFxuICAgICAgICAgICAgWyflv4XloavvvIzmupDlkI3np7AnLCAndGl0bGUnXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOa6kOWbvuaghycsICdpbWcnXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOa6kOWIhue7hCcsICdkZXNjJ10sXFxuICAgICAgICAgICAgWyfpgInloavvvIzmupDms6jph4onLCAnY29udGVudCddXFxuICAgICAgICBdLm1hcChbYSwgYl0gPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGRlc2M6IGEsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwianhfXFxcIiArIGIpLFxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGBwdXRNeVZhcihcXFwianhfJHtifVxcXCIsIGlucHV0KWAsXFxuICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IHRydWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Z+z6LSoJzpcXG4gICAgICAgIFtcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOagh+WHhumfs+i0qOOAguS+i++8mnQyPVxcXCIxMjhrXFxcIicsICdtcDMnXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOmrmOWTgemfs+i0qOOAguS+i++8mnQyPVxcXCIzMjBrXFxcIicsICdocSddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM5peg5o2f6Z+z6LSo44CC5L6L77yadDI9XFxcIjIwMDBrXFxcIicsICdzcSddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM6auY5ZOB5peg5o2f44CC5L6L77yadDI9XFxcIjQwMDBrXFxcIicsICdociddLFxcbiAgICAgICAgICAgLy8gWyfpgInloavvvIznq4vkvZPml6DmjZ/jgILkvovvvJp0Mj1cXFwiMjAwMDBrXFxcIicsICd6cSddXFxuICAgICAgICBdLm1hcChbYSwgYl0gPT4ge1xcbiAgICAgICAgICAgIF8gPSB7XFxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogdHJ1ZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoanhfczIgfHwganhfczMpIHtcXG4gICAgICAgICAgICAgICAgXy5kZWZhdWx0VmFsdWUgPSBhZXNEZWNvZGUoJ2hrNjY2NjY2NjEwOScsIGdldE15VmFyKFxcXCJqeF9cXFwiICsgYikpO1xcbiAgICAgICAgICAgICAgICBfLm9uQ2hhbmdlID0gJC50b1N0cmluZygobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKG5hbWUsIGdldFByaXZhdGVKUyhpbnB1dC50cmltKCkpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIobmFtZSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBcXFwianhfXFxcIiArIGIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIF8uZGVmYXVsdFZhbHVlID0gXFxcIuayoeacieadg+mZkO+8jOivt+ino+mUgeOAglxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgZGVzYzogYSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiBfXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfop6PmnpAnOlxcbiAgICAgICAgXyA9IHtcXG4gICAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBoZWlnaHQ6IDdcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChqeF9zMiB8fCBqeF9zMykge1xcbiAgICAgICAgICAgIF8uZGVmYXVsdFZhbHVlID0gYWVzRGVjb2RlKCdoazY2NjY2NjYxMDknLCBnZXRNeVZhcihcXFwianhfamlleGlcXFwiKSk7XFxuICAgICAgICAgICAgXy5vbkNoYW5nZSA9ICQudG9TdHJpbmcoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIobmFtZSwgZ2V0UHJpdmF0ZUpTKGlucHV0LnRyaW0oKSkpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIobmFtZSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgXFxcImp4X2ppZXhpXFxcIik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIF8uZGVmYXVsdFZhbHVlID0gXFxcIuayoeacieadg+mZkO+8jOivt+ino+mUgeOAglxcXCJcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgZGVzYzogJ+WPmOmHj++8mnQxICYgdDIgJiBuYW1lICYgYXJ0aXN0XFxcXG5cXFxcbuivtOaYju+8muWPr+S7peS7jumfs+i0qOmCo+mHjOS8oOWPmOmHj+i/h+adpeOAglxcXFxuXFxcXG7ojrflj5Z1cmzlsLHooYzvvIznpLrkvovvvJpcXFxcbnVyaSA9IGBodHRwczovL2JhaWR1LmNvbT9hPSR7dDF9JmI9JHt0Mn0mYz0ke25hbWV9JmQ9JHthdXRob3J9YDtcXFxcbnVybCA9IEpTT04ucGFyc2UoZmV0Y2godXJpKSkudXJsOycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICAgICAgZXh0cmE6IF9cXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aLk+WxlSc6XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5aGr5YaZ5a+G5YyZ5ZCO77yM5Y+v5Lul5a+56Z+z5rqQ5YGa5LiA5Lqb6ZmQ5Yi244CCJyxcXG4gICAgICAgICAgICBkZXNjOiAn5a+G5YyZ5peg5rOV6L+95Zue77yM5aGr6K6w5b6X5L2P55qE77yBJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKCfnvJbovpHmupDnmoTpmZDliLYnKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaG9tZV9pY29uX2VkaXQnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICflj6/ku6XnnIvvvIzlj6/ku6XnvJbovpEo5aSn54ix5peg55aGKScsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChLKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChLKSByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MyJywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfbTInLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mm7TmlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0sIGp4X3MyKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X3MyID8gNTUgOiA2MykgKyAnLnN2ZydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+WPr+S7peeci++8jOS4jeiDvee8lui+kSjpmLLmraLkuozmlLkpJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEsxLCBLMikgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ2p4X20yJykgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+356Gu6K6k5a+G5YyZXFxcIikuaW5wdXQoKGlucHV0MikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gaW5wdXQyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X20yJywgbWQ1KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChLMSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLmk43kvZznsbvlnovvvJrmm7TmlLnlr4bljJlcXFxcbuivt+i+k+WFpeWOn+WvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+356Gu6K6k5a+G5YyZXFxcIikuaW5wdXQoKGlucHV0MikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBpbnB1dDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MyJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X20yJywgbWQ1KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4blpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WOn+WvhuWMmemqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChLMikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLmk43kvZznsbvlnovvvJrmnYPpmZDpmY3nuqdcXFxcbuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lr4bljJnplJnor6/vvIzpmY3nuqflpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGp4X3MzLCAhanhfczIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczIgPyA2MyA6IGp4X3MzID8gNTUgOiA2MykgKyAnLnN2ZydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+S4jeiDveeci++8jOS4jeiDvee8lui+kSjog73nlKjlsLHooYwpJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEsxLCBLMikgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ2p4X20yJykgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+356Gu6K6k5a+G5YyZXFxcIikuaW5wdXQoKGlucHV0MikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gaW5wdXQyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X20yJywgbWQ1KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChLMSAmJiBLMikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLmk43kvZznsbvlnovvvJrmm7TmlLnlr4bljJlcXFxcbuivt+i+k+WFpeWOn+WvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+356Gu6K6k5a+G5YyZXFxcIikuaW5wdXQoKGlucHV0MikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBpbnB1dDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MyJywgJzInKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X20yJywgbWQ1KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4blpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WOn+WvhuWMmemqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcyJyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgIWp4X3MzLCAhanhfczIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczIgPyA2MyA6IGp4X3MzID8gNjMgOiA1NSkgKyAnLnN2ZydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKCfkvb/nlKjmupDnmoTpmZDliLYnKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaG9tZV9pY29uX2NvZGUnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmsqHmnInpqozor4Eo5LiN5pCe6Iqx55qEKScsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChLKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChLKSByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMScpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MxJywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfbTEnLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0sIGp4X3MxKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X3MxID8gNTUgOiA2MykgKyAnLnN2ZydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+a/gOa0u+mqjOivgSjpqozor4HkuIDkuIspJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEspID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdqeF9tMScpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+ehruiupOWvhuWMmVxcXCIpLmlucHV0KChpbnB1dDIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IGlucHV0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MxJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9tMScsIG1kNShpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSykge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MxJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuaTjeS9nOexu+Wei++8muabtOaUueWvhuWMmVxcXFxu6K+36L6T5YWl5Y6f5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMScpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fnoa7orqTlr4bljJlcXFwiKS5pbnB1dCgoaW5wdXQyKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IGlucHV0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczEnLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfbTEnLCBtZDUoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y6f5a+G5YyZ6aqM6K+B5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwganhfczEpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczEgPyA2MyA6IDU1KSArICcuc3ZnJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5pe25pWI6aqM6K+BKOetieW+heWujOWWhCknLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LzYzLnN2ZydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhDb2xvcign5L+d5a2Y5bm26YCA5Ye6JykpKSxcXG4gICAgZGVzYzogJ+S4iuasoee8lui+ke+8micgKyAkLmRhdGVGb3JtYXQoTnVtYmVyKGdldE15VmFyKFxcXCJqeF90aW1lXFxcIikpIHx8IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCAneXl5eS1NTS1kZCBoaDptbTpzcycpLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgaWYgKGdldE15VmFyKCdqeF9tMicpICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMicpKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldEVkaXQoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aqM6K+B5aSx6LSl77yM5LiN5pSv5oyB5L+d5a2Y77yM6K+35bem5LiK6KeS5omL5Yqo6YCA5Ye644CCXFxcIjtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRFZGl0KCk7XFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgIH1cXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaXop4TliJnliJfooahcIixcInBhdGhcIjpcInJ1bGVMaXN0XCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nLCB7fSkpLnJ1bGUpO1xcbmQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+aWsOWinuino+aekCcsXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIFtcXFwidHlwZVxcXCIsIFxcXCJvcGVuXFxcIiwgXFxcImRvd25cXFwiLCBcXFwiaW1nXFxcIiwgXFxcInRpdGxlXFxcIiwgXFxcImRlc2NcXFwiLCBcXFwidXJsXFxcIiwgXFxcImNvbnRlbnRcXFwiLCBcXFwibXAzXFxcIiwgXFxcImhxXFxcIiwgXFxcInNxXFxcIiwgXFxcImhyXFxcIiwgXFxcInpxXFxcIiwgXFxcImppZXhpXFxcIiwgXFxcInMxXFxcIiwgXFxcIm0xXFxcIiwgXFxcInMyXFxcIiwgXFxcIm0yXFxcIiwgXFxcInRpbWVcXFwiLCBcXFwidGlkXFxcIiwgXFxcInVpZFxcXCJdLm1hcCh0ID0+IHtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCdqeF8nICsgdClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcnVsZUVkaXQjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3BhZ2VUaXRsZT3op4TliJnnvJbovpEmcnVsZT3mrYzor43pgILphY0nXFxuICAgIH0pLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbmV3OiAxXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+WIhuS6q+mAieS4rScsXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHp5ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImp4bGlzdDJcXFwiLCB7fSk7XFxuICAgICAgICB6dSA9IE9iamVjdC5rZXlzKHp5KTtcXG4gICAgICAgIGlmICh6dS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnInpgInkuK3op6PmnpBcXFwiO1xcbiAgICAgICAgfSBlbHNlIGlmICh6dS5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgIF8gPSB6eVt6dVswXV07XFxuICAgICAgICAgICAgaWYgKF8ubTEgJiYgXy5tMSAhPSBcXFwiXFxcIiAmJiBfLm0xLmxlbmd0aCA9PSAzMikgXy5zMSA9IFxcXCIxXFxcIiwgXy5vcGVuID0gXFxcIjBcXFwiLCBfLmRvd24gPSBcXFwiMFxcXCI7XFxuICAgICAgICAgICAgaWYgKF8ubTIgJiYgXy5tMiAhPSBcXFwiXFxcIiAmJiBfLm0xLmxlbmd0aCA9PSAzMiAmJiBfLnMyID09IFxcXCIwXFxcIikgXy5zMiA9IFxcXCIyXFxcIjtcXG4gICAgICAgICAgICBfXyA9IHt9O1xcbiAgICAgICAgICAgIF9fW18udHlwZV0gPSBbX107XFxuICAgICAgICAgICAgX18gPSBKU09OLnN0cmluZ2lmeShfXyk7XFxuICAgICAgICAgICAgXyA9IGJhc2U2NEVuY29kZShfXyk7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcignanhsaXN0MicpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly/mrYzor43pgILphY3op6PmnpDlj6Pku6TvvIzmiZPlvIDmtbfpmJTljbPlj6/lr7zlhaVcXFxcbu+/pVRleHTvv6VcXFwiICsgXyArICdAaW1wb3J0PWpzOiQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRSdWxlKGlucHV0KTsnO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBqc29uID0ge307XFxuICAgICAgICAgICAgZm9yIChrZXkgb2YgenUpIHtcXG4gICAgICAgICAgICAgICAgXyA9IHp5W2tleV07XFxuICAgICAgICAgICAgICAgIGlmICghanNvbltfLnR5cGVdKSB7XFxuICAgICAgICAgICAgICAgICAgICBqc29uW18udHlwZV0gPSBbXTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoXy5tMSAmJiBfLm0xICE9IFxcXCJcXFwiICYmIFN0cmluZyhfLm0xKS5sZW5ndGggPT0gMzIpIHtcXG4gICAgICAgICAgICAgICAgICAgIF8uczEgPSBcXFwiMVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICBfLm9wZW4gPSBcXFwiMFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICBfLmRvd24gPSBcXFwiMFxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKF8ubTIgJiYgXy5tMiAhPSBcXFwiXFxcIiAmJiBTdHJpbmcoXy5tMikubGVuZ3RoID09IDMyICYmIF8uczIgPT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBfLnMyID0gXFxcIjJcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGpzb25bXy50eXBlXS5wdXNoKF8pO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgdCA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgcmV0dXJuICQoW1xcXCLliarotLTmnb9cXFwiLCBcXFwi57qv5paH5pysXFxcIl0sIDEsICfpgInmi6nliIbkuqvmoLzlvI8nKS5zZWxlY3QoKHQpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLliarotLTmnb9cXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICB1ID0gc2hhcmVQYXN0ZSh0LCAn5LqR5Ymq6LS05p2/NicpO1xcbiAgICAgICAgICAgICAgICAgICAgdCA9IFxcXCJQYXN0ZVxcXCI7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1ID0gdDtcXG4gICAgICAgICAgICAgICAgICAgIHQgPSBcXFwiVGV4dFxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignanhsaXN0MicpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL+atjOivjemAgumFjeino+aekOWPo+S7pO+8jOaJk+W8gOa1t+mYlOWNs+WPr+WvvOWFpVxcXFxu77+lXFxcIiArIHQgKyBcXFwi77+lXFxcIiArIHUgKyAnQGltcG9ydD1qczokLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0UnVsZShpbnB1dCk7JztcXG4gICAgICAgICAgICB9LCB0KTtcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBuZXc6IDFcXG4gICAgfVxcbn0pO1xcbmxldCBqeF9wbGF0Zm9ybSA9IGdldE15VmFyKCdqeF9wbGF0Zm9ybScsICdsaWInKTtcXG5wbGF0Zm9ybXMuc2xpY2UoMCwgNikubWFwKHBsYXRmb3JtID0+IHtcXG4gICAgaWYgKGp4X3BsYXRmb3JtID09IHBsYXRmb3JtKVxcbiAgICAgICAgcGxhdGZvcm0yID0gUmljaChTdHJvbmcoQ29sb3IocGxhdGZvcm0pKSk7XFxuICAgIGVsc2VcXG4gICAgICAgIHBsYXRmb3JtMiA9IHBsYXRmb3JtO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBsYXRmb3JtMixcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICBpZiAoIXBsYXRmb3JtLm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3BsYXRmb3JtJywgcGxhdGZvcm0pO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBwbGF0Zm9ybSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5Yig6ZmkJyArIHBsYXRmb3JtLnJlcGxhY2UoJ2xpYicsICflhajpg6gnKSArICfop6PmnpAnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygocGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCLnoa7lrprliKDpmaTigJxcXFwiICsgcGxhdGZvcm0ucmVwbGFjZSgnbGliJywgJ+WFqOmDqCcpICsgXFxcIuino+aekOKAneWQl++8n1xcXFxu5q2k5pON5L2c5LiN5Y+v6YCG77yM6K+36LCo5oWO6YCJ5oup44CCXFxcIikuY29uZmlybSgocGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm0gPT0gJ2xpYicpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtcyA9IFsncXEnLCAnd3knLCAna2cnLCAna3cnLCAnbWcnXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtcyA9IFtwbGF0Zm9ybV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwbGF0Zm9ybSBvZiBwbGF0Zm9ybXMpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKCdqeGxpc3RfJyArIHBsYXRmb3JtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9LCBwbGF0Zm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sIHBsYXRmb3JtKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0pO1xcbmp4bGlzdCA9IFtdO1xcbmlmIChqeF9wbGF0Zm9ybSA9PSBcXFwibGliXFxcIikge1xcbiAgICBwbGF0Zm9ybXMuc2xpY2UoMSwgNikubWFwKHBsYXRmb3JtID0+IHtcXG4gICAgICAgIGp4bGlzdCA9IGp4bGlzdC5jb25jYXQoc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyBwbGF0Zm9ybSwgW10pKTtcXG4gICAgfSk7XFxufSBlbHNlIHtcXG4gICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyBqeF9wbGF0Zm9ybSwgW10pO1xcbn1cXG5pZiAoanhsaXN0Lmxlbmd0aCA9PSAwKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogUmljaChTdHJvbmcoQ29sb3IoXFxcIuayoeacieino+aekFxcXCIpKSksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59IGVsc2Uge1xcbiAgICBqeGxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgaSA9IE9iamVjdC5rZXlzKHN0b3JhZ2UwLmdldE15VmFyKFxcXCJqeGxpc3QyXFxcIiwge30pKS5pbmRleE9mKG1kNShfLnR5cGUgKyAnOicgKyBfLnRpdGxlICsgJzonICsgXy51cmwpKSA9PSAtMTtcXG4gICAgICAgIGQxID0gW1xcXCJtcDNcXFwiLCBcXFwiaHFcXFwiLCBcXFwic3FcXFwiLCBcXFwiaHJcXFwiXS5tYXAodCA9PiBfW3RdID8gJ+KYhScgOiAn4piGJykuam9pbihcXFwiXFxcIik7XFxuICAgICAgICBkMiA9IFxcXCLlkK/nlKjkuIvovb1cXFwiXFxuICAgICAgICBpZiAoXy5kb3duID09ICcxJykge1xcbiAgICAgICAgICAgIGQxID0gQ29sb3IoZDEsIFxcXCIyRTVEOEVcXFwiKTtcXG4gICAgICAgICAgICBkMiA9IFxcXCLnpoHnlKjkuIvovb1cXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKGkgPyBfLnRpdGxlIDogQ29sb3IoXy50aXRsZSkpLFxcbiAgICAgICAgICAgIGRlc2M6IGQxLFxcbiAgICAgICAgICAgIHVybDogJChbXFxcIuWIhuS6q1xcXCIsIFxcXCLnvJbovpFcXFwiLCBcXFwi5Yig6ZmkXFxcIiwgXFxcIuenu+WKqFxcXCJdLmNvbmNhdChbZDIsIGkgPyAn6YCJ5Lit6Kej5p6QJyA6ICflj5bmtojpgInkuK0nXSksIDIsICfpgInmi6nmianlsZXmk43kvZwnKS5zZWxlY3QoKHR5cGUsIHRpdGxlLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyB0eXBlLCBbXSk7XFxuICAgICAgICAgICAgICAgIHp1ID0ganhsaXN0Lm1hcChfID0+IG1kNShfLnR5cGUgKyAnOicgKyBfLnRpdGxlICsgJzonICsgXy51cmwpKTtcXG4gICAgICAgICAgICAgICAgbSA9IG1kNSh0eXBlICsgJzonICsgdGl0bGUgKyAnOicgKyB1cmwpO1xcbiAgICAgICAgICAgICAgICBpID0genUuaW5kZXhPZihtKTtcXG4gICAgICAgICAgICAgICAgXyA9IGp4bGlzdFtpXTtcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5YiG5LqrJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5tMSAmJiBfLm0xICE9IFxcXCJcXFwiICYmIF8ubTEubGVuZ3RoID09IDMyKSBfLnMxID0gXFxcIjFcXFwiLCBfLm9wZW4gPSBcXFwiMFxcXCIsIF8uZG93biA9IFxcXCIwXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5tMiAmJiBfLm0yICE9IFxcXCJcXFwiICYmIF8ubTEubGVuZ3RoID09IDMyICYmIF8uczIgPT0gXFxcIjBcXFwiKSBfLnMyID0gXFxcIjJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgX19bdHlwZV0gPSBbX107XFxuICAgICAgICAgICAgICAgICAgICAgICAgX18gPSBKU09OLnN0cmluZ2lmeShfXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXyA9IGJhc2U2NEVuY29kZShfXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8v5q2M6K+N6YCC6YWN6Kej5p6Q5Y+j5Luk77yM5omT5byA5rW36ZiU5Y2z5Y+v5a+85YWlXFxcXG7vv6VUZXh077+lXFxcIiArIF8gKyAnQGltcG9ydD1qczokLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0UnVsZShpbnB1dCk7JztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+e8lui+kSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xcXCJ0eXBlXFxcIiwgXFxcIm9wZW5cXFwiLCBcXFwiZG93blxcXCIsIFxcXCJpbWdcXFwiLCBcXFwidGl0bGVcXFwiLCBcXFwiZGVzY1xcXCIsIFxcXCJ1cmxcXFwiLCBcXFwiY29udGVudFxcXCIsIFxcXCJtcDNcXFwiLCBcXFwiaHFcXFwiLCBcXFwic3FcXFwiLCBcXFwiaHJcXFwiLCBcXFwienFcXFwiLCBcXFwiamlleGlcXFwiLCBcXFwiczFcXFwiLCBcXFwibTFcXFwiLCBcXFwiczJcXFwiLCBcXFwibTJcXFwiLCBcXFwidGltZVxcXCIsIFxcXCJ0aWRcXFwiLCBcXFwidWlkXFxcIl0ubWFwKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdqeF8nICsgdClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfdWlkJywgbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoXykubWFwKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfJyArIHQsIF9bdF0gfHwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3J1bGVFZGl0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wYWdlVGl0bGU96KeE5YiZ57yW6L6RJnJ1bGU95q2M6K+N6YCC6YWNJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuehruWumuWIoOmZpFxcXCIgKyBfLnR5cGUgKyBcXFwi6Kej5p6Q4oCcXFxcIiArIF8udGl0bGUgKyAn4oCd5ZCX77yfXFxcXG7mraTmk43kvZzkuI3lj6/pgIbvvIzor7fosKjmhY7pgInmi6njgIInKS5jb25maXJtKCh0eXBlLCBqeGxpc3QsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0XycgKyB0eXBlLCBqeGxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHlwZSwganhsaXN0LCBpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+enu+WKqCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB6dSA9IGp4bGlzdC5tYXAoXyA9PiBfLnRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dS5jb25jYXQoXFxcIuacgOWQjumdolxcXCIpLCAyLCAn6K+36YCJ5oup56e75Yqo5L2N572uJykuc2VsZWN0KCh0eXBlLCBqeGxpc3QsIF8sIHp1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB6dS5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gLTEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3QucHVzaChfKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0LnNwbGljZShpLCAwLCBfKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwianhsaXN0X1xcXCIgKyB0eXBlLCBqeGxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHlwZSwganhsaXN0LCBfLCB6dSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfpgInkuK3op6PmnpAnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdDIgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwianhsaXN0MlxcXCIsIHt9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3QyW21dID0gXztcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwianhsaXN0MlxcXCIsIGp4bGlzdDIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WPlua2iOmAieS4rSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0MiA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJqeGxpc3QyXFxcIiwge30pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqeGxpc3QyW21dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJqeGxpc3QyXFxcIiwganhsaXN0Mik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5ZCv55So5LiL6L29JzpcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+emgeeUqOS4i+i9vSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uczEgPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uZG93biA9IF8uZG93biA9PSAnMScgPyAnMCcgOiAnMSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLmRvd24gPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5r+A5rS75a+G5YyZXFxcIikuaW5wdXQoKGp4bGlzdCwgaSwgXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gXy5tMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uczEgPSAnMCc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5vcGVuID0gJzEnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdFtpXSA9IF87XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0XycgKyBfLnR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly/mv4DmtLvmiJDlip/vvIzmrKLov47kvb/nlKgnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvhuWMmemUmeivr++8jOaXoOazleWQr+eUqFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGp4bGlzdCwgaSwgXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5kb3duID0gJzAnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdFtpXSA9IF87XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0XycgKyB0eXBlLCBqeGxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIF8udHlwZSwgXy50aXRsZSwgXy51cmwpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6IF8uaW1nIHx8ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgpXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IF8udHlwZSArICfkuKgnICsgXy5kZXNjICsgJ+S4qCcgKyBfLnVybCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHR5cGUsIHRpdGxlLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyB0eXBlLCBbXSk7XFxuICAgICAgICAgICAgICAgIHp1ID0ganhsaXN0Lm1hcChfID0+IG1kNShfLnR5cGUgKyAnOicgKyBfLnRpdGxlICsgJzonICsgXy51cmwpKTtcXG4gICAgICAgICAgICAgICAgbSA9IG1kNSh0eXBlICsgJzonICsgdGl0bGUgKyAnOicgKyB1cmwpO1xcbiAgICAgICAgICAgICAgICBpID0genUuaW5kZXhPZihtKTtcXG4gICAgICAgICAgICAgICAganhfb3BlbiA9IChfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5zMSA9PSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfLm9wZW4gPSBfLm9wZW4gPT0gJzEnID8gJzAnIDogJzEnO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLm9wZW4gPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXmv4DmtLvlr4bljJlcXFwiKS5pbnB1dCgoanhsaXN0LCBpLCBfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IF8ubTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uczEgPSAnMCc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLm9wZW4gPSAnMSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3RbaV0gPSBfO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0XycgKyBfLnR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8v5r+A5rS75oiQ5Yqf77yM5qyi6L+O5L2/55SoJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+G5YyZ6ZSZ6K+v77yM5peg5rOV5ZCv55SoXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBqeGxpc3QsIGksIF8pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfLm9wZW4gPSAnMCdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGp4bGlzdFtpXSA9IF87XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCdqeGxpc3RfJyArIHR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBqeF9vcGVuKGp4bGlzdFtpXSk7XFxuICAgICAgICAgICAgfSwgXy50eXBlLCBfLnRpdGxlLCBfLnVybCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChfLm9wZW4gPT0gJzEnID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikafop6PmnpDlpITnkIZcIixcInBhdGhcIjpcImppZXhpXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSB7XFxuXFxuICAgIEdldE11c2ljVXJsOiBmdW5jdGlvbih1VHlwZSwgcGxhdGZvcm0sIHQxLCB0MiwgbmFtZSwgYXJ0aXN0LCByZWxhdGVfZ29vZHMpIHtcXG4gICAgICAgIHF1YWxpdHkgPSBbXFxcIm1wM1xcXCIsIFxcXCJocVxcXCIsIFxcXCJzcVxcXCIsIFxcXCJoclxcXCJdW3QyIHx8IDBdIHx8IFxcXCJtcDNcXFwiO1xcbiAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwianhsaXN0X1xcXCIgKyBwbGF0Zm9ybSwgW10pLmZpbHRlcihfID0+IF9bdVR5cGVdID09PSBcXFwiMVxcXCIgJiYgXy5zMSA9PT0gXFxcIjBcXFwiICYmIGFlc0RlY29kZSgnaGs2NjY2NjY2MTA5JywgX1txdWFsaXR5XSkpO1xcbiAgICAgICAgaWYgKGp4bGlzdC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnInlj6/nlKjnmoRcXFwiICsgKHVUeXBlID09IFxcXCJvcGVuXFxcIiA/IFxcXCLor5XlkKxcXFwiIDogXFxcIuS4i+i9vVxcXCIpICsgXFxcIuino+aekFxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKF8gb2YganhsaXN0KSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgdXJsID0gZmFsc2VcXG4gICAgICAgICAgICAgICAgZXZhbChTdHJpbmcoYWVzRGVjb2RlKCdoazY2NjY2NjYxMDknLCBfW3F1YWxpdHldKSkpO1xcbiAgICAgICAgICAgICAgICBldmFsKFN0cmluZyhhZXNEZWNvZGUoJ2hrNjY2NjY2NjEwOScsIF8uamlleGkpKSk7XFxuICAgICAgICAgICAgICAgIGlmICh1cmwgJiYgdXJsICE9IFxcXCJcXFwiICYmICF1cmwubWF0Y2goXFxcIuS4i+i9veWksei0pVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoanhFcnJvcikge1xcbiAgICAgICAgICAgICAgICAvLyBsb2coZXJyb3IoanhFcnJvcikpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/op6PmnpDlpLHotKVcXFwiXFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNldFJ1bGU6IGZ1bmN0aW9uKGlucHV0LCBUeXBlKSB7XFxuICAgICAgICBbbG9nVCwgdHlwZSwgdGV4dF0gPSBTdHJpbmcoaW5wdXQpLnNwbGl0KFxcXCLvv6VcXFwiKTtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHR5cGUpKSB7XFxuICAgICAgICAgICAgY2FzZSAnUGFzdGUnOlxcbiAgICAgICAgICAgICAgICB0ZXh0ID0gcGFyc2VQYXN0ZSh0ZXh0KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnTGFuem91JzpcXG4gICAgICAgICAgICAgICAgW3VybCwgcHdkXSA9IHRleHQuc3BsaXQoXFxcIiMjXFxcIik7XFxuICAgICAgICAgICAgICAgIGR1cmwgPSAkLnJlcXVpcmUoJ2xhbnpvdT9ydWxlPeatjOivjemAgumFjScpLm9uZV91cmwodXJsLCBwd2QsIDEpO1xcbiAgICAgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nKGZldGNoKGR1cmwpKTtcXG4gICAgICAgICAgICAgICAgaWYgKChzcCA9IHRleHQuc3BsaXQoXFxcIu+/pVxcXCIpKS5sZW5ndGggPT0gMykge1xcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNwWzJdLnNwbGl0KFxcXCJAXFxcIilbMF0udHJpbSgpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL19jYXRjaC9JbXBvcnQudHh0XFxcIiwgYmFzZTY0RGVjb2RlKHRleHQpKTtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3JlbHlcXFwiICsgKFR5cGUgfHwgMSkgKyBcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPeatjOivjemAgumFjVxcXCI7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNldEVkaXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgXyA9IHtcXG4gICAgICAgICAgICB0eXBlOiBnZXRNeVZhcihcXFwianhfdHlwZVxcXCIsIFxcXCJrd1xcXCIpLFxcbiAgICAgICAgICAgIG9wZW46IGdldE15VmFyKFxcXCJqeF9vcGVuXFxcIiwgXFxcIjFcXFwiKSxcXG4gICAgICAgICAgICBkb3duOiBnZXRNeVZhcihcXFwianhfZG93blxcXCIsIFxcXCIwXFxcIiksXFxuXFxuICAgICAgICAgICAgaW1nOiBnZXRNeVZhcihcXFwianhfaW1nXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcihcXFwianhfdGl0bGVcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgZGVzYzogZ2V0TXlWYXIoXFxcImp4X2Rlc2NcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdXJsOiBnZXRNeVZhcihcXFwianhfdXJsXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGdldE15VmFyKFxcXCJqeF9jb250ZW50XFxcIiwgXFxcIlxcXCIpLFxcblxcbiAgICAgICAgICAgIG1wMzogZ2V0TXlWYXIoXFxcImp4X21wM1xcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBocTogZ2V0TXlWYXIoXFxcImp4X2hxXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHNxOiBnZXRNeVZhcihcXFwianhfc3FcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgaHI6IGdldE15VmFyKFxcXCJqeF9oclxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB6cTogZ2V0TXlWYXIoXFxcImp4X3pxXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIGppZXhpOiBnZXRNeVZhcihcXFwianhfamlleGlcXFwiLCBcXFwiXFxcIiksXFxuXFxuICAgICAgICAgICAgczE6IGdldE15VmFyKFxcXCJqeF9zMVxcXCIsIFxcXCIwXFxcIiksXFxuICAgICAgICAgICAgbTE6IGdldE15VmFyKFxcXCJqeF9tMVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBzMjogZ2V0TXlWYXIoXFxcImp4X3MyXFxcIiwgXFxcIjBcXFwiKSxcXG4gICAgICAgICAgICBtMjogZ2V0TXlWYXIoXFxcImp4X20yXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKCkuZ2V0VGltZSgpXFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF8udGl0bGUgIT0gXFxcIlxcXCIgJiYgXy51cmwgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBmb3IgKHQgaW4gXykge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdqeF8nICsgdCk7XFxuICAgICAgICAgICAgICAgIGlmIChfW3RdID09IFxcXCJcXFwiIHx8IF9bdF0gPT0gXFxcIlZmYW5haHMveTBpWnhjU0wwUEpBY1E9PVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBfW3RdO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGp4bGlzdCA9IHN0b3JhZ2UwLmdldEl0ZW0oJ2p4bGlzdF8nICsgXy50eXBlLCBbXSk7XFxuICAgICAgICAgICAgdWlkcyA9IGp4bGlzdC5tYXAoX18gPT4gbWQ1KF9fLnR5cGUgKyAnOicgKyBfXy50aXRsZSArICc6JyArIF9fLnVybCkpO1xcbiAgICAgICAgICAgIGkgPSB1aWRzLmluZGV4T2YoZ2V0TXlWYXIoJ2p4X3VpZCcsICctMScpKTtcXG4gICAgICAgICAgICBpZiAoaSA9PSAtMSkge1xcbiAgICAgICAgICAgICAgICBqeGxpc3QucHVzaChfKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBqeGxpc3Quc3BsaWNlKGksIDEsIF8pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjbGVhck15VmFyKCdqeF90aWQnKTtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCdqeF91aWQnKTtcXG4gICAgICAgICAgICBqeGxpc3QgPSBqeGxpc3QuZmlsdGVyKChvYmosIGluZGV4LCBhcnIpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyci5maW5kSW5kZXgobyA9PiBtZDUob2JqLnRpdGxlICsgb2JqLnVybCkgPT09IG1kNShvLnRpdGxlICsgby51cmwpKSA9PT0gaW5kZXg7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0XycgKyBfLnR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgcmV0dXJuIGJhY2sodHJ1ZSksICd0b2FzdDovL+S/neWtmOaIkOWKnyc7XFxuICAgICAgICB9IGVsc2UgaWYgKF8udGl0bGUgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35aGr5YaZ5rqQ5ZCN56ewJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+Whq+WGmea6kOagh+ivhic7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuXFxuXFxuXFxuICAgIHNldEVkaXQyOiBmdW5jdGlvbih0eXBlLCBydW4pIHtcXG4gICAgICAgIF8gPSB7XFxuICAgICAgICAgICAgXFxcInMxXFxcIjogXFxcIjBcXFwiLFxcbiAgICAgICAgICAgIFxcXCJzMlxcXCI6IFxcXCIwXFxcIixcXG4gICAgICAgICAgICBcXFwiaW1nXFxcIjogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKHR5cGUpLFxcbiAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogU3RyaW5nKHR5cGUpLnJlcGxhY2UoLzIkLywgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIFxcXCJ0aW1lXFxcIjogbmV3IERhdGUoKS5nZXRUaW1lKCksXFxuICAgICAgICAgICAgXFxcIm9wZW5cXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgXFxcImRvd25cXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgXFxcImRlc2NcXFwiOiBcXFwi5LyY6YCJXFxcIixcXG4gICAgICAgIH1cXG4gICAgICAgIEMwID0gU3RyaW5nKGdldE15VmFyKCd2aXBydWxlX2MwJywgJycpKS50cmltKCk7XFxuICAgICAgICBDMSA9IFN0cmluZyhnZXRNeVZhcigndmlwcnVsZV9jMScsICcnKSkudHJpbSgpO1xcbiAgICAgICAgQzIgPSBTdHJpbmcoZ2V0TXlWYXIoJ3ZpcHJ1bGVfYzInLCAnJykpLnRyaW0oKTtcXG4gICAgICAgIGdldGtnamlleGkgPSAodGl0bGUsIHVybCwgdXNlcmlkLCB0b2tlbiwgYXBwaWQsIHNpZ25rZXkpID0+IHtcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKF8sIHtcXG4gICAgICAgICAgICAgICAgXFxcInRpdGxlXFxcIjogdGl0bGUsXFxuICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiB1cmwsXFxuICAgICAgICAgICAgICAgIFxcXCJtcDNcXFwiOiBcXFwiQnQ3dytxaDl3QWRiRUtoVW1TNTQ1dz09XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcImhxXFxcIjogXFxcImhTM2RyWWtwN09JMXhLT2MyQmtmcVE9PVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJzcVxcXCI6IFxcXCJQd1hydnZ6bTA0ZnRvQ25VV2twSkZ3PT1cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiaHJcXFwiOiBcXFwiNS9tSzlUY1oxaThoL1k5ejFOSGh6dz09XFxcIixcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBfLmppZXhpID0gZ2V0UHJpdmF0ZUpTKGBfID0gcmVsYXRlX2dvb2RzW3QyXTtcXG51cmwgPSAkLnJlcXVpcmUoXFxcImtnP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXy5oYXNoLCBfLnF1YWxpdHksIF8uYWxidW1faWQsIF8uYWxidW1fYXVkaW9faWQsIFxcXCIke3VzZXJpZH1cXFwiLCBcXFwiJHt0b2tlbn1cXFwiLCBcXFwiJHthcHBpZH1cXFwiLCBcXFwiJHtzaWdua2V5fVxcXCIpO2ApO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgICAgICAgIGNhc2UgJ3FxJzpcXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfLCB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwidGl0bGVcXFwiOiBcXFwiUVHpn7PkuZBcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IFxcXCJodHRwczovL3UueS5xcS5jb21cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIm1wM1xcXCI6IFxcXCJVVksza0t6ck56dnlMa09UajZGbU9rbWI5WjY5QUsvWVFhc2Vlc2ZzOEE4PVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiaHFcXFwiOiBcXFwicTVBTXZwZGtLeWFSYkF5aFlxd2tnVW1iOVo2OUFLL1lRYXNlZXNmczhBOD1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInNxXFxcIjogXFxcInhWQ3B6aGFLQ0N4L09ONHBsTzQ1dXlxZ0pFTGRsVzhrekxCV1JBandkT0U9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJoclxcXCI6IFxcXCJNNmFYTHJnd2hUeURNUG1LRzFZV3FpcWdKRUxkbFc4a3pMQldSQWp3ZE9FPVxcXCIsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBjID0gQzAuc3BsaXQoL3FtX2tleXN0PS9pKTtcXG4gICAgICAgICAgICAgICAgYzAgPSAoY1sxXSB8fCBjWzBdKS5zcGxpdChcXFwiO1xcXCIpWzBdO1xcbiAgICAgICAgICAgICAgICBjID0gQzEuc3BsaXQoL3Vpbj0vaSk7XFxuICAgICAgICAgICAgICAgIGMxID0gKGNbMV0gfHwgY1swXSkuc3BsaXQoXFxcIjtcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgaWYgKCFjMCB8fCAhYzEgfHwgIShjMC5tYXRjaCgnV19YJykgfHwgYzAubWF0Y2goJ1FfSF9MJykpKSByZXR1cm4gXFxcInRvYXN0Oi8vY29va2ll5qC85byP6ZSZ6K+vXFxcIjtcXG4gICAgICAgICAgICAgICAgXy5zaWduaW4gPSAwO1xcbiAgICAgICAgICAgICAgICBfLmppZXhpID0gZ2V0UHJpdmF0ZUpTKGB1ID0gXy51cmwgKyBcXFxcYC9jZ2ktYmluL211c2ljdS5mY2c/ZGF0YT17XFxcInJlcV8wXFxcIjp7XFxcIm1vZHVsZVxcXCI6XFxcInZrZXkuR2V0VmtleVNlcnZlclxcXCIsXFxcIm1ldGhvZFxcXCI6XFxcIkNnaUdldFZrZXlcXFwiLFxcXCJwYXJhbVxcXCI6e1xcXCJndWlkXFxcIjpcXFwiMFxcXCIsXFxcInBsYXRmb3JtXFxcIjpcXFwiMjBcXFwiLFxcXCJmaWxlbmFtZVxcXCI6W1xcXCIkXFxcXHtoK3QxK3QxK2V9XFxcIl0sXFxcInNvbmdtaWRcXFwiOltcXFwiJFxcXFx7dDF9XFxcIl19fX1cXFxcYDtcXG5fID0gSlNPTi5wYXJzZShmZXRjaCh1LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIENvb2tpZTogXFxcInFtX2tleXN0PSR7YzB9OyB1aW49JHtjMX07XFxcIlxcbiAgICB9XFxufSkpLnJlcV8wLmRhdGE7XFxudXJsID0gXy5taWR1cmxpbmZvWzBdLnB1cmw7XFxuaWYgKHVybCAmJiB1cmwgIT0gXFxcIlxcXCIpIHVybCA9IF8uc2lwWzBdICsgdXJsO2ApO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICd3eSc6XFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oXywge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInRpdGxlXFxcIjogXFxcIue9keaYk+S6kemfs+S5kFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogXFxcImh0dHBzOi8vbXVzaWMuMTYzLmNvbVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwibXAzXFxcIjogXFxcIktmVVBnMnBiS3BJdVh4cUcxMUUzRXpVWFR6SURiWHdXWnRNSVZZcU9VNjQ9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJocVxcXCI6IFxcXCI1Z2JRYTZSdVZ0bDJITElyOEduSkFJdGd3NGVwUkl4VzZjNkV6RzNNeGZZPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwic3FcXFwiOiBcXFwiY0pIQlNDZUphNDZHRjdOVUphRVVPa1JYOUlpTURMaFpRcXoydGkyYTZMYz1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImhyXFxcIjogXFxcIktFSi94ZDZ2RVAzeStacE0vQ2JwSjFYMnAyb2JQOHRJbWNYRWk5RHlRSEU9XFxcIixcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGMgPSBDMC5zcGxpdCgvTVVTSUNfVT0oW147XFxcXHMnXFxcIl0rKS9pKTtcXG4gICAgICAgICAgICAgICAgYzAgPSBjID8gY1sxXSA6IGZhbHNlO1xcbiAgICAgICAgICAgICAgICBpZiAoIWMwKSByZXR1cm4gXFxcInRvYXN0Oi8vY29va2ll5qC85byP6ZSZ6K+vXFxcIjtcXG4gICAgICAgICAgICAgICAgXy5qaWV4aSA9IGdldFByaXZhdGVKUyhgdXJsID0gJC5yZXF1aXJlKFxcXCJ3eT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgzKFxcXCIvYXBpL3NvbmcvZW5oYW5jZS9wbGF5ZXIvdXJsL3YxXFxcIiwge1xcbiAgICBpZHM6IFxcXFxgWyRcXFxce3QxfV1cXFxcYCxcXG4gICAgbGV2ZWw6IGxldmVsLFxcbiAgICBlbmNvZGVUeXBlOiBcXFwiZmxhY1xcXCJcXG59LCB7XFxuICAgIENvb2tpZTogXFxcIk1VU0lDX1U9JHtjMH07XFxcIlxcbn0pLmRhdGFbMF0udXJsLnNwbGl0KFxcXCI/XFxcIilbMF07YCk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJ2tnJzpcXG4gICAgICAgICAgICAgICAgYyA9IEMwLnNwbGl0KC91c2VyaWQ9L2kpO1xcbiAgICAgICAgICAgICAgICBjMCA9IChjWzFdIHx8IGNbMF0pLnNwbGl0KFxcXCI7XFxcIilbMF07XFxuICAgICAgICAgICAgICAgIGMgPSBDMS5zcGxpdCgvdG9rZW49L2kpO1xcbiAgICAgICAgICAgICAgICBjMSA9IChjWzFdIHx8IGNbMF0pLnNwbGl0KFxcXCI7XFxcIilbMF07XFxuICAgICAgICAgICAgICAgIGlmICghYzAgfHwgIWMxKSByZXR1cm4gXFxcInRvYXN0Oi8vY29va2ll5qC85byP6ZSZ6K+vXFxcIjtcXG4gICAgICAgICAgICAgICAgZ2V0a2dqaWV4aShcXFwi6YW354uX6Z+z5LmQXFxcIiwgXFxcImh0dHBzOi8vd3d3Lmt1Z291LmNvbVxcXCIsIGMwLCBjMSwgXFxcIlxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAna2cyJzpcXG4gICAgICAgICAgICAgICAgYyA9IEMwLnNwbGl0KC91c2VyaWQ9L2kpO1xcbiAgICAgICAgICAgICAgICBjMCA9IChjWzFdIHx8IGNbMF0pLnNwbGl0KFxcXCI7XFxcIilbMF07XFxuICAgICAgICAgICAgICAgIGMgPSBDMS5zcGxpdCgvdG9rZW49L2kpO1xcbiAgICAgICAgICAgICAgICBjMSA9IChjWzFdIHx8IGNbMF0pLnNwbGl0KFxcXCI7XFxcIilbMF07XFxuICAgICAgICAgICAgICAgIGMgPSBDMi5zcGxpdCgvYXBwaWQ9L2kpO1xcbiAgICAgICAgICAgICAgICBjMiA9IChjWzFdIHx8IGNbMF0pLnNwbGl0KFxcXCI7XFxcIilbMF07XFxuICAgICAgICAgICAgICAgIGlmICghYzAgfHwgIWMxKSByZXR1cm4gXFxcInRvYXN0Oi8vY29va2ll5qC85byP6ZSZ6K+vXFxcIjtcXG4gICAgICAgICAgICAgICAgaWYgKG1kNShjMikgIT0gXFxcIjc4YzYwYzM1ZTU5MGJlZThlMTRiYWU0NGJkZTUxMjc3XFxcIikgcmV0dXJuIFxcXCJ0b2FzdDovL3NpZ25rZXnplJnor69cXFwiO1xcbiAgICAgICAgICAgICAgICBnZXRrZ2ppZXhpKFxcXCLphbfni5fmpoLlv7XniYhcXFwiLCBcXFwiaHR0cHM6Ly9nYXRld2F5Lmt1Z291LmNvbVxcXCIsIGMwLCBjMSwgXFxcIjMxMTZcXFwiLCBjMik7XFxuICAgICAgICAgICAgICAgIF8uc2lnbmluID0gMDtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAna3cnOlxcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKF8sIHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ0aXRsZVxcXCI6IFxcXCLphbfmiJHpn7PkuZBcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IFxcXCJodHRwOi8vbW9iaS5rdXdvLmNuXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJtcDNcXFwiOiBcXFwiUlhsblpOeVlJVWIxM011a0lrOVJUUT09XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJocVxcXCI6IFxcXCJWTStwYVRGdXBzMWFlU29uK3owaDJnPT1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInNxXFxcIjogXFxcIlBHQW5DUUNqdUpYemJpYStwKzBIdFE9PVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiaHJcXFwiOiBcXFwidHExcFg0VC9ZMTN2VGVBM1pmS1huVlgycDJvYlA4dEltY1hFaTlEeVFIRT1cXFwiLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKCFDMCkgcmV0dXJuIFxcXCJ0b2FzdDovL2Nvb2tpZeagvOW8j+mUmeivr1xcXCI7XFxuICAgICAgICAgICAgICAgIF8uamlleGkgPSBnZXRQcml2YXRlSlMoQzApO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICdrdzInOlxcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKF8sIHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ0aXRsZVxcXCI6IFxcXCLms6Lngrnpn7PkuZBcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IFxcXCJodHRwczovL2JkLWFwaS5rdXdvLmNuXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJtcDNcXFwiOiBcXFwibG9xNmVub0F2SmthZ0xBODZTRWlIQ0I2VmpNcHJ2SFQ4TEZ2dWdidWZxUT1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImhxXFxcIjogXFxcImVrL2JtVTA5dlhEcVBMSHJUSERqdlNCNlZqTXBydkhUOExGdnVnYnVmcVE9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJzcVxcXCI6IFxcXCJQdzRWWkJ5QUFRb3ZpUDdxWm9LVXVpVHlRZGxkamwrOThHRE5XOFd2aXBzPVxcXCIsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBjID0gQzAuc3BsaXQoL3VpZD0vaSk7XFxuICAgICAgICAgICAgICAgIGMwID0gKGNbMV0gfHwgY1swXSkuc3BsaXQoXFxcIjtcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgYyA9IEMxLnNwbGl0KC90b2tlbj0vaSk7XFxuICAgICAgICAgICAgICAgIGMxID0gKGNbMV0gfHwgY1swXSkuc3BsaXQoXFxcIjtcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgYyA9IEMyLnNwbGl0KC9kZXZJZD0vaSk7XFxuICAgICAgICAgICAgICAgIGMyID0gKGNbMV0gfHwgY1swXSkuc3BsaXQoXFxcIjtcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgaWYgKCFjMCB8fCAhYzEgfHwgIWMyKSByZXR1cm4gXFxcInRvYXN0Oi8vY29va2ll5qC85byP6ZSZ6K+vXFxcIjtcXG4gICAgICAgICAgICAgICAgXy5qaWV4aSA9IGdldFByaXZhdGVKUyhgdXJsID0gSlNPTi5wYXJzZShmZXRjaChfLnVybCArIFxcXCIvYXBpL3NlcnZpY2UvbXVzaWMvZG93bmxvYWRJbmZvL1xcXCIgKyB0MSArIFxcXCI/aXNNdj0wJmZvcm1hdD1cXFwiICsgdDMgKyBcXFwiJmJyPVxcXCIgKyB0MiArIFxcXCImbGV2ZWw9XFxcIiwge1xcbiAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICdVc2VyLUFnZW50JzogJ29raHR0cC8zLjEwLjAnLFxcbiAgICAgICAgJ2NoYW5uZWwnOiAncXEnLFxcbiAgICAgICAgJ3BsYXQnOiAnYXInLFxcbiAgICAgICAgJ25ldCc6ICd3aWZpJyxcXG4gICAgICAgICd2ZXInOiAnMy4xLjInLFxcbiAgICAgICAgJ3VpZCc6ICcke2MwfScsXFxuICAgICAgICAndG9rZW4nOiAnJHtjMX0nLFxcbiAgICAgICAgJ2RldklkJzogJyR7YzJ9J1xcbiAgICB9XFxufSkpLmRhdGEudXJsO2ApO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICdtZyc6XFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oXywge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInRpdGxlXFxcIjogXFxcIuWSquWSlemfs+S5kFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogXFxcImh0dHBzOi8vbS5tdXNpYy5taWd1LmNuXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJtcDNcXFwiOiBcXFwiaFMzZHJZa3A3T0kxeEtPYzJCa2ZxUT09XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJocVxcXCI6IFxcXCJQd1hydnZ6bTA0ZnRvQ25VV2twSkZ3PT1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInNxXFxcIjogXFxcIjUvbUs5VGNaMWk4aC9ZOXoxTkhoenc9PVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiaHJcXFwiOiBcXFwidzVsUW55WFZhaEpzWUdlVWUrcE51dz09XFxcIixcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGMgPSBDMC5zcGxpdCgvU0VTU0lPTj0vaSk7XFxuICAgICAgICAgICAgICAgIGMwID0gKGNbMV0gfHwgY1swXSkuc3BsaXQoXFxcIjtcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgaWYgKCFjMCkgcmV0dXJuIFxcXCJ0b2FzdDovL2Nvb2tpZeagvOW8j+mUmeivr1xcXCI7XFxuICAgICAgICAgICAgICAgIF8uamlleGkgPSBnZXRQcml2YXRlSlMoYGhlYWRlcnMgPSB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXy51cmwgKyBcXFwiL3Y0L1xcXCIsXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IE1PQklMRV9VQSxcXG4gICAgICAgIFxcXCJCeVxcXCI6IG1kNShNT0JJTEVfVUEpLFxcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IFxcXCJTRVNTSU9OPSR7YzB9XFxcIlxcbiAgICB9XFxufTtcXG51ID0gXy51cmwgKyBcXFwiL21pZ3VtdXNpYy9oNS9wbGF5L2F1dGgvZ2V0U29uZ1BsYXlJbmZvP3R5cGU9XFxcIiArIHQyICsgXFxcIiZjb3B5cmlnaHRJZD1cXFwiICsgdDE7XFxudXJsID0gXFxcImh0dHBzOlxcXCIgKyBKU09OLnBhcnNlKGZldGNoKHUsIGhlYWRlcnMpKS5kYXRhLnBsYXlVcmw7YCk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwianhsaXN0X1xcXCIgKyBfLnR5cGUsIFtdKTtcXG4gICAgICAgIGp4bGlzdC51bnNoaWZ0KF8pO1xcbiAgICAgICAganhsaXN0ID0ganhsaXN0LmZpbHRlcigob2JqLCBpbmRleCwgYXJyKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIGFyci5maW5kSW5kZXgobyA9PiBtZDUob2JqLnRpdGxlICsgb2JqLnVybCkgPT09IG1kNShvLnRpdGxlICsgby51cmwpKSA9PT0gaW5kZXg7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImp4bGlzdF9cXFwiICsgXy50eXBlLCBqeGxpc3QpO1xcbiAgICAgICAgaWYgKHJ1bikgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIHJldHVybiBiYWNrKHRydWUpLCBcXFwidG9hc3Q6Ly/lr7zlhaXmiJDlip9cXFwiO1xcbiAgICB9LFxcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRqOino+aekOWvvOWFpVwiLFwicGF0aFwiOlwicmVseTFcIixcInJ1bGVcIjpcImpzOlxcbmluZGV4ID0gMDtcXG5pbmRleDIgPSAwO1xcbmpzb24gPSBKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL19jYXRjaC9JbXBvcnQudHh0XFxcIikpO1xcbmZvciAoa2V5IGluIGpzb24pIHtcXG4gICAgaWYgKGpzb25ba2V5XS5sZW5ndGggIT0gMCkge1xcbiAgICAgICAgaW5kZXggKz0ganNvbltrZXldLmxlbmd0aDtcXG4gICAgICAgIGp4bGlzdCA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImp4bGlzdF9cXFwiICsga2V5LCBbXSk7XFxuICAgICAgICBpbmRleDMgPSBqeGxpc3QubGVuZ3RoO1xcbiAgICAgICAganhsaXN0ID0ganNvbltrZXldLmNvbmNhdChqeGxpc3QpO1xcbiAgICAgICAganhsaXN0ID0ganhsaXN0LmZpbHRlcigob2JqLCBpbmRleCwgYXJyKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIGFyci5maW5kSW5kZXgobyA9PiBtZDUob2JqLnRpdGxlICsgb2JqLnVybCkgPT09IG1kNShvLnRpdGxlICsgby51cmwpKSA9PT0gaW5kZXg7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGluZGV4MiArPSBqeGxpc3QubGVuZ3RoIC0gaW5kZXgzO1xcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwianhsaXN0X1xcXCIgKyBrZXksIGp4bGlzdCk7XFxuICAgIH1cXG59XFxudG9hc3QoXFxcIuino+aekOWvvOWFpeaIkOWKn++8jOWQiOiuoSBcXFwiICsgaW5kZXggKyBcXFwiIOS4qu+8jOWvvOWFpSBcXFwiICsgaW5kZXgyICsgXFxcIiDkuKpcXFwiKTtcXG5iYWNrKGZhbHNlKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRqeaUtuiXj+WvvOWFpVwiLFwicGF0aFwiOlwicmVseTJcIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScsIHt9KSkucnVsZSk7XFxuXyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvX2NhdGNoL0ltcG9ydC50eHRcXFwiKSk7XFxuc2V0UGFnZVRpdGxlKCfmibnph4/mk43kvZzvvJrmlLbol48nICsgW1xcXCLlr7zlhaVcXFwiLCBcXFwi5YiG5LqrXFxcIiwgXFxcIuWIoOmZpFxcXCJdW18udHlwZV0pO1xcblxcblxcblxcbmFkZGxpc3QgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwiYWRkbGlzdFxcXCIsIFtdKTtcXG5pZiAoYWRkbGlzdC5sZW5ndGggPT0gMCAmJiBfLnBpdGNoID09IDEgJiYgZ2V0TXlWYXIoJ2FkZHBpdGNoJykgIT0gJzEnKSB7XFxuICAgIGZvciAoaSA9IDA7IGkgPCBfLmRhdGEubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGFkZGxpc3QucHVzaChpKTtcXG4gICAgfVxcbiAgICBwdXRNeVZhcignYWRkbGlzdCcsIGFkZGxpc3QpO1xcbiAgICBwdXRNeVZhcignYWRkcGl0Y2gnLCAnMScpO1xcbn1cXG5kID0gXy5kYXRhLm1hcCgoXywgaSkgPT4ge1xcbiAgICBkZWxldGUgXy5leHRyYTtcXG4gICAgXy5jb2xfdHlwZSA9ICdjYXJkX3BpY18zJztcXG4gICAgXy50aXRsZSA9IGFkZGxpc3QuaW5jbHVkZXMoaSkgPyBSaWNoKFN0cm9uZyhDb2xvcihfLnRpdGxlKSkpIDogXy50aXRsZTtcXG4gICAgXy51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChhZGRsaXN0LCBpKSA9PiB7XFxuICAgICAgICBpZiAoYWRkbGlzdC5pbmNsdWRlcyhpKSkgYWRkbGlzdCA9IGFkZGxpc3QuZmlsdGVyKEkgPT4gSSAhPT0gaSk7XFxuICAgICAgICBlbHNlIGFkZGxpc3QucHVzaChpKTtcXG4gICAgICAgIHB1dE15VmFyKCdhZGRsaXN0JywgYWRkbGlzdCk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICB9LCBhZGRsaXN0LCBpKTtcXG4gICAgcmV0dXJuIF87XFxufSk7XFxuaWYgKGQubGVuZ3RoID09IGFkZGxpc3QubGVuZ3RoKSB7XFxuICAgIHRpdGxlID0gJ+KYhSDlj5bmtojlhajpgIkg4piFJztcXG4gICAgdXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKCdhZGRsaXN0Jyk7XFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgfSk7XFxufSBlbHNlIHtcXG4gICAgdGl0bGUgPSAn4piFIOmAieaLqeWFqOmDqCDimIUnO1xcbiAgICB1cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsZW4pID0+IHtcXG4gICAgICAgIGFkZGxpc3QgPSBbXTtcXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgYWRkbGlzdC5wdXNoKGkpO1xcbiAgICAgICAgcHV0TXlWYXIoJ2FkZGxpc3QnLCBhZGRsaXN0KTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0sIGQubGVuZ3RoKTtcXG59XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfnoa7lrprpgInmi6knLFxcbiAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzMnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGFkZGxpc3QsIHNpLCB0eXBlLCBuYW1lKSA9PiB7XFxuICAgICAgICBpZiAoYWRkbGlzdC5sZW5ndGggPT09IDApIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnInpgInkuK3mrYzmm7JcXFwiO1xcblxcbiAgICAgICAgbmV3RGF0YXMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL19jYXRjaC9JbXBvcnQudHh0XFxcIikpLmRhdGE7XFxuICAgICAgICBuZXdEYXRhcyA9IGFkZGxpc3QubWFwKGkgPT4ge1xcbiAgICAgICAgICAgIF8gPSBuZXdEYXRhc1tpXTtcXG4gICAgICAgICAgICBkZWxldGUgXy5leHRyYTtcXG4gICAgICAgICAgICBkZWxldGUgXy5jb2xfdHlwZTtcXG4gICAgICAgICAgICByZXR1cm4gXztcXG4gICAgICAgIH0pO1xcbiAgICAgICAgY2xlYXJNeVZhcignYWRkbGlzdCcpO1xcbiAgICAgICAgY2xlYXJNeVZhcignYWRkcGl0Y2gnKTtcXG4gICAgICAgIGlmICh0eXBlID09PSAwKVxcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxvZ0RhdGEobmV3RGF0YXMsIHNpLCBuYW1lIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IDEpXFxuICAgICAgICAgICAgcmV0dXJuICQobmFtZSB8fCBcXFwiXFxcIiwgXFxcIuehruWumuWIhue7hOWQjeensFxcXCIpLmlucHV0KChzaSwgbmV3RGF0YXMpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaXRjaDogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzaTogc2ksXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaW5wdXQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogbmV3RGF0YXNcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHQgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgdSA9IHNoYXJlUGFzdGUodCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly/mrYzor43pgILphY3mlLbol4/lj6Pku6TvvIzmiZPlvIDmtbfpmJTljbPlj6/lr7zlhaVcXFxcbu+/pVBhc3Rl77+lXFxcIiArIHUgKyBgQGltcG9ydD1qczokLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0UnVsZShpbnB1dCwyKTtgO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIbkuqvlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgc2ksIG5ld0RhdGFzKTtcXG5cXG4gICAgfSwgYWRkbGlzdCwgXy5zaSwgXy50eXBlLCBfLm5hbWUpLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICB9LCB1cmwpXFxuICAgICAgICB9XVxcbiAgICB9LFxcbiAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnYWRkJylcXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmuKnppqjmj5DnpLpcIixcInBhdGhcIjpcIm5vdGljZVwiLFwicnVsZVwiOlwiJC5leHBvcnRzID0gZnVuY3Rpb24oKSB7XFxuICAgIGYgPSBcXFwiR3JheVxcXCI7XFxuICAgIHQgPSBmYWxzZTtcXG4gICAgYXJyID0gW107XFxuICAgIHVwID0gZ2V0TXlWYXIoJ1J1bGVfbm91cGRhdGUnLCAnJyk7XFxuICAgIGlmICh1cCAhPSAnMScpIHtcXG4gICAgICAgIHZlcnNpb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vaG9tZUDmrYzor43pgILphY1cXFwiKSkudmVyc2lvbjtcXG4gICAgICAgIGlmICh1cCA9PSAnJykge1xcbiAgICAgICAgICAgIFt1cmwsIHYsIHJ1bl0gPSAkLnJlcXVpcmUoXFxcImxhbnpvdT9ydWxlPeatjOivjemAgumFjVxcXCIpLmxpc3Rfb25lKFxcXCJodHRwczovL3d3ci5sYW56b3VpLmNvbS9iMDNyMzc5aGNcXFwiLCBcXFwiZ2NzcFxcXCIpO1xcbiAgICAgICAgICAgIC8qXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1biA9PSAndHJ1ZScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgKi9cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdXJsID0gZmFsc2U7XFxuICAgICAgICAgICAgdiA9IHZlcnNpb24gKyAxO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHZlcnNpb24gPCB2KSB7XFxuICAgICAgICAgICAgZiA9IFxcXCJyZWRcXFwiO1xcbiAgICAgICAgICAgIHQgPSBcXFwi5qOA5rWL5Yiw5paw54mI5pu05paw77yM54K55Ye75LqG6Kej6K+m5oOF44CCXFxcIjtcXG4gICAgICAgICAgICBUID0gXFxcIuabtOaWsOWGheWuuVxcXCI7XFxuICAgICAgICAgICAgaWYgKHVwID09ICcnKSB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCd1cGRhdGUwJywgJzEnKSA9PSAnMScpIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmm7TmlrDmj5DnpLonLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ+ajgOa1i+WIsOS9oOeahOinhOWImeeJiOacrOWwj+S6juacjeWKoeWZqOeJiOacrO+8jOaYr+WQpueri+WNs+abtOaWsO+8nycsXFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChkYSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAkLnJlcXVpcmUoXFxcImxhbnpvdT9ydWxlPeatjOivjemAgumFjVxcXCIpLm9uZV91cmwoZGEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdSdWxlX25vdXBkYXRlJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcIlxcXFx1NmQ3N1xcXFx1OTYxNFxcXFx1ODljNlxcXFx1NzU0Y1xcXFx1ZmZlNWhvbWVfcnVsZV91cmxcXFxcdWZmZTVcXFwiICsgZ2V0UGF0aChmKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybClcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdSdWxlX25vdXBkYXRlJywgdXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdXJsID0gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKCh1cCwgdmVyc2lvbikgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsYW56b3U/cnVsZT3mrYzor43pgILphY1cXFwiKS5vbmVfaW5mbyh1cCwgXFxcImdjc3BcXFwiLCB2ZXJzaW9uKTtcXG4gICAgICAgICAgICB9LCB1cmwgfHwgdXAsIHZlcnNpb24pO1xcbiAgICAgICAgICAgIGFyci5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfnqIvluo/orr7nva4nLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9pbnN0YWxsI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wYWdlVGl0bGU956iL5bqP6K6+572uJztcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ1J1bGVfbm91cGRhdGUnLCAnMScpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmICghdCkge1xcbiAgICAgICAgVCA9IFxcXCLnqIvluo/orr7nva5cXFwiO1xcbiAgICAgICAgdXJsID0gXFxcImhpa2VyOi8vcGFnZS9pbnN0YWxsI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxuICAgICAgICBob3VyID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xcbiAgICAgICAgaWYgKGhvdXIgPCA1KSB7XFxuICAgICAgICAgICAgdCA9IFxcXCLmt7HlpJzvvIznjrDlnKjnmoTlpJzvvIznhqzlvpflj6rmmK/ov5jmnKrmlLnlj5jnmoTkuaDmg69cXFwiO1xcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTEpIHtcXG4gICAgICAgICAgICB0ID0gXFxcIuaXqeWuie+8jOa4heaZqOeGueW+rueahOmYs+WFie+8jCDmmK/kvaDlnKjlvq7nrJHlkJdcXFwiO1xcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTQpIHtcXG4gICAgICAgICAgICB0ID0gXFxcIuWNiOWlve+8jOS8tOmaj+edgOeGn+aCieeahOS5kOabsu+8jOiBhuWQrOedgOWKqOS6uueahOaXi+W+i1xcXCI7XFxuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOSkge1xcbiAgICAgICAgICAgIHQgPSBcXFwi5aSV5pqu77yM5Ly85riF6aOO6YaJ5pma6Zye77yM5LiN57uP5oSP6Ze055uI56yR5Zue55y4XFxcIjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdCA9IFxcXCLlpJzmmZrvvIzkuIDkuKrlronpnZnnmoTop5LokL3vvIzpnZnpnZnlnLDogYblkKzlpJzmm7JcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0LmZvbnRjb2xvcihmKS5zbWFsbCgpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IFQsXFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGxvbmdDbGljazogYXJyXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiTneWlj+abtOaWsFwiLFwicGF0aFwiOlwibGFuem91XCIsXCJydWxlXCI6XCJqczpcXG5oZWFkID0ge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICAgICBcXFwidXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0c1xcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCA4LjAuMDsgTUkgNXMgUGx1cyBCdWlsZC9PUFIxLjE3MDYyMy4wMzI7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzEuMC4zNTc4Ljk5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIixcXG4gICAgICAgIFxcXCJDb29raWVcXFwiOiBcXFwiZG93bl9pcD0xXFxcIixcXG4gICAgICAgIFxcXCJhY2NlcHRcXFwiOiBcXFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFxcXCIsXFxuICAgIH0sXFxuICAgIG1ldGhvZDogJ0dFVCdcXG59O1xcbm9uZV91cmwgPSBmdW5jdGlvbih1cmwsIHB3ZCwgcnVuLCBub1RwLCBIdG1sKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBoZWFkLmhlYWRlcnMucmVmZXJlciA9IHVybC5zcGxpdChcXFwiP1xcXCIpWzBdO1xcbiAgICAgICAgaXNUcCA9ICF1cmwubWF0Y2goXFxcIi90cC9cXFwiKTtcXG4gICAgICAgIGlmIChpc1RwICYmICFub1RwKSB7XFxuICAgICAgICAgICAgZGEgPSB1cmwucmVwbGFjZSgvXiguKj9cXFxcLmNvbSkvLCAnJDEvdHAnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZGEgPSB1cmw7XFxuICAgICAgICB9XFxuICAgICAgICBodG1sID0gU3RyaW5nKEh0bWwgfHwgZmV0Y2goZGEsIGhlYWQpKTtcXG4gICAgICAgIGlmIChodG1sID09IFxcXCJcXFwiICYmIGlzVHAgJiYgIW5vVHApIHtcXG4gICAgICAgICAgICByZXR1cm4gb25lX3VybCh1cmwsIHB3ZCwgcnVuLCB0cnVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgcGF0aCA9IGh0bWwubWF0Y2goL2xpbmsgPSBbJ1xcXCJdKFteXFxcIiddKykvaSlbMV07XFxuICAgICAgICAgICAgaG9zdCA9IHVybC5tYXRjaCgvXiguKj9cXFxcLmNvbVxcXFwvKS8pWzFdO1xcbiAgICAgICAgICAgIHJldHVybiBvbmVfdXJsKGhvc3QgKyBwYXRoLCBwd2QsIHJ1bik7XFxuICAgICAgICB9IGNhdGNoIChlcnIwKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgcGF0aCA9IGh0bWwubWF0Y2goLycoXFxcXD8uKz8pJy8pWzFdO1xcbiAgICAgICAgICAgICAgICBob3N0ID0gXFxcImh0dHBzOi8vZGV2ZWxvcGVyLmxhbnpvdWcuY29tXFxcIjtcXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIxKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFsdWVcXFxcOyhbXFxcXHNcXFxcU10rPylcXFxcJFxcXFwoL2kpWzFdKTtcXG4gICAgICAgICAgICAgICAgZXZhbCgnYm9keT0nICsgaHRtbC5tYXRjaCgvW1xcXFxzXFxcXFNdKmRhdGEgOihbXFxcXHNcXFxcU10qP1xcXFx9KSxcXFxccysvKVsxXSk7XFxuICAgICAgICAgICAgICAgIHUgPSBTdHJpbmcodXJsKS5yZXBsYWNlKC9cXFxcLmNvbS4qLywgXFxcIi5jb20vYWpheG0ucGhwXFxcIik7XFxuICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKHBvc3QodSwge1xcbiAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWQuaGVhZGVyc1xcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIHBhdGggPSBfLnVybDtcXG4gICAgICAgICAgICAgICAgaG9zdCA9IF8uZG9tO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHUgPSBob3N0ICsgXFxcIi9maWxlL1xcXCIgKyBwYXRoO1xcbiAgICAgICAgayA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcbiAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICAgICAgfSkpLmhlYWRlcnMubG9jYXRpb247XFxuICAgICAgICBrID0gQXJyYXkuaXNBcnJheShrKSA/IGtbMF0gOiBrO1xcbiAgICAgICAgaWYgKHJ1bikgcmV0dXJuIGs7XFxuICAgICAgICBsZXQgZiA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL19maWxlU2VsZWN0X3J1bGUuanNvblxcXCI7XFxuICAgICAgICBkb3dubG9hZEZpbGUoaywgZik7XFxuICAgICAgICByZXR1cm4gZjtcXG4gICAgfSBjYXRjaCAoZXJyMikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxufTtcXG4kLmV4cG9ydHMgPSB7XFxuICAgIGxpc3Rfb25lOiBmdW5jdGlvbih1cmwsIHB3ZCwgcnVuKSB7XFxuICAgICAgICBzcmMgPSBmZXRjaCh1cmwsIGhlYWQpO1xcbiAgICAgICAgZXZhbChzcmMubWF0Y2goL3ZhciBwZ3M7KFtcXFxcc1xcXFxTXSo/cGdzLis7KS8pWzFdKTtcXG4gICAgICAgIGV2YWwoJ2JvZHk9JyArIHNyYy5tYXRjaCgvZGF0YSA6KFtcXFxcc1xcXFxTXSo/XFxcXH0pLylbMV0pO1xcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcXFwuY29tLiovLCBcXFwiLmNvbS9maWxlbW9yZWFqYXgucGhwXFxcIik7XFxuICAgICAgICBsaXN0ID0gSlNPTi5wYXJzZShwb3N0KHVybCwge1xcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZC5oZWFkZXJzXFxuICAgICAgICB9KSkudGV4dDtcXG4gICAgICAgIGlmIChydW4pIHJldHVybiBsaXN0O1xcbiAgICAgICAgXyA9IGxpc3RbMF07XFxuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvZmlsZW1vLiovLCAndHAvJyArIF8uaWQpO1xcbiAgICAgICAgdiA9IF8ubmFtZV9hbGwubWF0Y2goL1xcXFxbKC4rKS8pWzFdO1xcbiAgICAgICAgW3YsIHJ1bl0gPSB2LnNwbGl0KFxcXCJdXFxcIik7XFxuICAgICAgICByZXR1cm4gW3VybCwgdiwgcnVuXTtcXG4gICAgfSxcXG4gICAgb25lX3VybDogb25lX3VybCxcXG4gICAgb25lX2luZm86IGZ1bmN0aW9uKHVybCwgcHdkLCB2ZXJzaW9uKSB7XFxuICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbiB8fCBcXFwi5pyq55+l54mI5pysXFxcIjtcXG4gICAgICAgIHZlcnNpb24gPSBTdHJpbmcodmVyc2lvbikucmVwbGFjZSgvKFxcXFxkXFxcXGQpKFxcXFxkXFxcXGQpJC8sIFxcXCItJDEtJDJcXFwiKTtcXG4gICAgICAgIGl0ZW0gPSBmZXRjaCh1cmwsIGhlYWQpO1xcbiAgICAgICAgdCA9IHBkZmgoaXRlbSwgXFxcIi5tZCYmVGV4dFxcXCIpIHx8IHBkZmgoaXRlbSwgXFxcInRpdGxlJiZUZXh0XFxcIik7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHQgPSBTdHJpbmcodCkuc3BsaXQoXFxcIltcXFwiKVsxXS5zcGxpdChcXFwiXVxcXCIpWzBdO1xcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxcbiAgICAgICAgdCA9IFN0cmluZyh0KS5yZXBsYWNlKC8oXFxcXGRcXFxcZCkoXFxcXGRcXFxcZCkkLywgXFxcIi0kMS0kMlxcXCIpO1xcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBkZXNjOiBcXFwiPGI+4oCc4oCcXFxcIiArIHZlcnNpb24gKyBcXFwiID0+IFxcXCIgKyB0ICsgXFxcIuKAneKAnTwvYj5cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmlnX2JpZ19ibGFua19ibG9ja1xcXCJcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiLm1kbyYmSHRtbFxcXCIpLnJlcGxhY2UoLyg8XFxcXC9zcGFuPik/XFxcXHMqPHNwYW4+L2dpLCBcXFwiPGJyPlxcXCIpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwiPGI+4oCc4oCc56Gu5a6a5pu05paw4oCd4oCdPC9iPlxcXCIuYmlnKCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIikubGF6eVJ1bGUoKHVybCwgcHdkLCBpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignUnVsZV9ub3VwZGF0ZScpID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhY2sodHJ1ZSksIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgb25lX3VybFxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbGFuem91P3J1bGU95q2M6K+N6YCC6YWNXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBLID0gb25lX3VybCh1cmwsIHB3ZCwgMSwgMCwgaXRlbSk7XFxuICAgICAgICAgICAgICAgIGlmICghSykge1xcbiAgICAgICAgICAgICAgICAgICAgSyA9IG9uZV91cmwodXJsLCBwd2QsIDEpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICghSykge1xcbiAgICAgICAgICAgICAgICAgICAgSyA9IG9uZV91cmwodXJsLnNwbGl0KFxcXCI/XFxcIilbMF0sIHB3ZCwgMSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKEspIHtcXG4gICAgICAgICAgICAgICAgICAgIGYgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9fZmlsZVNlbGVjdF9ydWxlLmpzb25cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRGaWxlKEssIGYpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ1J1bGVfbm91cGRhdGUnLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFxcdTZkNzdcXFxcdTk2MTRcXFxcdTg5YzZcXFxcdTc1NGNcXFxcdWZmZTVob21lX3J1bGVfdXJsXFxcXHVmZmU1XFxcIiArIGdldFBhdGgoZik7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6I635Y+W5LiL6L296ZO+5o6l5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIHVybCwgcHdkLCBpdGVtKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueoi+W6j+iuvue9rlwiLFwicGF0aFwiOlwiaW5zdGFsbFwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5fID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2hvbWVA5q2M6K+N6YCC6YWNXFxcIikpO1xcbmQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICBpbWc6IF8uaWNvbixcXG4gICAgY29sX3R5cGU6ICdwaWNfMV9jZW50ZXInLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICB9LFxcbiAgICB1cmw6ICQoW1xcbiAgICAgICAgXFxcIlvphbfni5fmpoLlv7XniYhdIOWQrOatjOmihuS8muWRmFxcXCIsXFxuICAgICAgICBcXFwiW1FR6Z+z5LmQXSDliLfmlrBjb29raWVcXFwiLFxcbiAgICAgICAgXFxcIlvlvq7pn7PkuZBdIOeZveWrlnFxJnd5XFxcIlxcbiAgICBdLCAxLCBcXFwi6YCJ5oup5omp5bGV5pON5L2cXFxcIikuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCd2aXBydWxlX2MnICsgaSk7XFxuICAgICAgICB9XFxuICAgICAgICBzd2l0Y2ggKGlucHV0KSB7XFxuICAgICAgICAgICAgY2FzZSAnW1FR6Z+z5LmQXSDliLfmlrBjb29raWUnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKCh0eXBlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ2JhY2snKSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdiYWNrJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFjayhmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ+WIt+aWsGNvb2tpZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBzdG9yYWdlMC5nZXRJdGVtKCdqeGxpc3RfcXEnLCBbXSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoXyA9PiBtZDUoXy50aXRsZSArIF8udXJsKSA9PSBcXFwiZTJjMWE0YmY4ZDU4ZDE3MDNhNWU4MTA5ZTFmOTBjYzBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5q+P5LiD5aSp6ZyA6KaB5Yi35paw5LiA5qyhJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ2Nvb2tpZSDpnIDopoHljIXlkKsgcW1fa2V5c3Qg5ZKMIHVpbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHRhcmVhJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3ZpcHJ1bGVfYzAnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBgcHV0TXlWYXIoXFxcInZpcHJ1bGVfYzBcXFwiLCBpbnB1dCk7YCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5LuO6Kej5p6Q6I635Y+WXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9zZWFyY2g2XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5sYXp5UnVsZSgoXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5zaWduaW4gPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUgPSBhZXNEZWNvZGUoJ2hrNjY2NjY2NjEwOScsIF8uamlleGkpLm1hdGNoKC9Db29raWU6IFxcXCIoW15cXFwiXSspLylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd2aXBydWxlX2MwJywgY29va2llKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ato+WcqOiwg+eUqOino+aekOWPguaVsCc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuWlveWDj+i/mOayoeWIsOWIt+aWsOaXtumXtO+8jOehruWumuiOt+WPluWQl++8n1xcXCIpLmNvbmZpcm0oKF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZSA9IGFlc0RlY29kZSgnaGs2NjY2NjY2MTA5JywgXy5qaWV4aSkubWF0Y2goL0Nvb2tpZTogXFxcIihbXlxcXCJdKykvKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd2aXBydWxlX2MwJywgY29va2llKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2j5Zyo6LCD55So6Kej5p6Q5Y+C5pWwJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnIlRUemfs+S5kOeahOino+aekFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXylcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuehruWumuWIt+aWsFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fbWVudTZcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLmxhenlSdWxlKChfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUgPSBTdHJpbmcoZ2V0TXlWYXIoJ3ZpcHJ1bGVfYzAnKSkudHJpbSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvb2tpZSAmJiBjb29raWUgIT0gXFxcIlxcXCIgJiYgY29va2llLm1hdGNoKFxcXCJxbV9rZXlzdD1cXFwiKSAmJiBjb29raWUubWF0Y2goXFxcInVpbj1cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSA9ICQucmVxdWlyZShcXFwicXE/cnVsZT3mrYzor43pgILphY1cXFwiKS5yZWZyZXNoX2xvZ2luKGNvb2tpZSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXJpKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKChba2V5LCB1aW5dKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUgPSBgcW1fa2V5c3Q9JHtrZXl9OyB1aW49JHt1aW59O2BcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSgn5Yi35paw5oiQ5YqfJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ2Nvb2tpZeWIt+aWsOaIkOWKnycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICc8YnI+PGg2IHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj4nICsgY29va2llICsgXFxcIjwvaDY+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWkjeWItmNvb2tpZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLmxhenlSdWxlKChjb29raWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdiYWNrJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYWNrKHRydWUpLCBcXFwiY29weTovL1xcXCIgKyBjb29raWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvb2tpZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fY2xvdWQ2XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5a+85YWl6L+b6Kej5p6QXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIikubGF6eVJ1bGUoKGtleSwgdWluKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignYmFjaycsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndmlwcnVsZV9jMCcsIGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndmlwcnVsZV9jMScsIHVpbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldEVkaXQyKFxcXCJxcVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBrZXksIHVpbiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fZG93bmxvYWQ2XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdXJpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL2Nvb2tpZeagvOW8j+mUmeivr1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF8pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiAn5Yi35paw5oiQ5YqfJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICdb6YW354uX5qaC5b+154mIXSDlkKzmrYzpoobkvJrlkZgnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKCh0eXBlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ+WQrOatjOmihuS8muWRmCcpO1xcbiAgICAgICAgICAgICAgICAgICAgXyA9IHN0b3JhZ2UwLmdldEl0ZW0oJ2p4bGlzdF9rZycsIFtdKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKF8gPT4gbWQ1KF8udGl0bGUgKyBfLnVybCkgPT0gXFxcImM4NzdhZTcyYjk3YmMyNjcyMGFkOGIxYTM5MzYyZDQ3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBkID0gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5q+P5aSp5Y+q6IO96aKG5Y+W5LiA5qyhJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1dO1xcbiAgICAgICAgICAgICAgICAgICAgWyd1c2VyaWQnLCAndG9rZW4nLCAnc2lnbmtleSddLm1hcCgodCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHRhcmVhJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3ZpcHJ1bGVfYycgKyBpKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBgcHV0TXlWYXIoXFxcInZpcHJ1bGVfYyR7aX1cXFwiLCBpbnB1dCk7YCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5LuO6Kej5p6Q6I635Y+WXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3NlYXJjaDZcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8yX3JvdW5kXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5sYXp5UnVsZSgoXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uc2lnbmluID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQgPSBhZXNEZWNvZGUoJ2hrNjY2NjY2NjEwOScsIF8uamlleGkpLm1hdGNoKC9cXFwiKFteXFxcIl0rKVxcXCIsIFxcXCIoLispXFxcIiwgXFxcIjMxMTZcXFwiLCBcXFwiKC4rKVxcXCIvKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndmlwcnVsZV9jMCcsIG1hdFsxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3ZpcHJ1bGVfYzEnLCBtYXRbMl0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd2aXBydWxlX2MyJywgbWF0WzNdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraPlnKjosIPnlKjop6PmnpDlj4LmlbAnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuK5aSp5bey57uP562+5Yiw6L+H5LqGJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnInmpoLlv7XniYjnmoTop6PmnpBcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBfKVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi56Gu5a6a6aKG5Y+WXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX21lbnU2XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIikubGF6eVJ1bGUoKF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmlkID0gZ2V0TXlWYXIoJ3ZpcHJ1bGVfYzAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBnZXRNeVZhcigndmlwcnVsZV9jMScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdua2V5ID0gZ2V0TXlWYXIoJ3ZpcHJ1bGVfYzInKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShzaWdua2V5KSA9PSBcXFwiNzhjNjBjMzVlNTkwYmVlOGUxNGJhZTQ0YmRlNTEyNzdcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9ICQuZGF0ZUZvcm1hdChuZXcgRGF0ZSgpLmdldFRpbWUoKSwgJ3l5eXlNTWRkJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MiA9ICQuZGF0ZUZvcm1hdChfLnRpbWUsICd5eXl5TU1kZCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ID0gYWVzRGVjb2RlKCdoazY2NjY2NjYxMDknLCBfLmppZXhpKS5tYXRjaCgvXFxcIihbXlxcXCJdKylcXFwiLCBcXFwiKC4rKVxcXCIsIFxcXCIzMTE2XFxcIiwgXFxcIiguKylcXFwiLyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXR4ID0gdXNlcmlkID09IG1hdFsxXSAmJiB0b2tlbiA9PSBtYXRbMl07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0eCAmJiB0MSA8IHQyICYmIF8uc2lnbmluID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuK5aSp5bey57uP562+5Yiw6L+H5LqGJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwia2c/cnVsZT3mrYzor43pgILphY1cXFwiKS5MaXRlX1NpZ25pbihcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0eFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vc2lnbmtleemUmeivr1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBfKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJ1vlvq7pn7PkuZBdIOeZveWrlnFxJnd5JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLovpPlhaVhZXPlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBcXFwiYzAwNGMwODRmOTA5MjIyNDRjYTg1MmZjMzY4YTZlY2VcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoJ2dldCDlvq7pn7PkuZBjb29raWUgaW5nLi4uJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChTdHJpbmcoYWVzRGVjb2RlKGlucHV0LCBcXFwiZTlkUXp4cW5kQzN4bzNiQTdyS25JcnVKT1F5cnkyMzVpazFhblN5aE1RMWZuV21qVTAzbVhVVXZUSVdvYUI1eWFZcTRUMjFYaDFINFEveERjZ1BJemVSRzQ1M0tFMmpnNjVPK01CaERzV1lRZ1p0NFRNNHJkMjBOMGI4aUFvYWlUTThxeENMbjRyNmNwWmdFMFRPVmwyWWZyL1hTT3UzTHQvZXNZZldJbEJDWm1pajhta3lWa21BUVJIZjA3SlVzXFxcIikpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndmlwcnVsZV9jMCcsIF9fLmNvb2tpZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3ZpcHJ1bGVfYzEnLCBfXy5jb29raWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQxID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldEVkaXQyKFxcXCJxcVxcXCIsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd2aXBydWxlX2MwJywgX18ud3ljb29raWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQyID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldEVkaXQyKFxcXCJ3eVxcXCIsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvvOWFpeaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lr4bljJnplJnor69cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgIH0pXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgU3RyaW5nKF8udmVyc2lvbikucmVwbGFjZSgvKFxcXFxkXFxcXGQpKFxcXFxkXFxcXGQpJC8sIFxcXCItJDEtJDJcXFwiKS5mb250Y29sb3IoXFxcInJlZFxcXCIpLnNtYWxsKCkgKyBcXFwiPC9iPlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi6buY6K6k6K6+572uPGJyPjxicj48c21hbGw+5bCP56iL5bqP6buY6K6k6K6+572uPC9zbWFsbD5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImNhcmRfcGljXzJcXFwiLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9ob21lX3BpYzNcXFwiLFxcbiAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIikucnVsZSgodHlwZSkgPT4ge1xcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG4gICAgICAgIGQgPSBbXTtcXG4gICAgICAgIGxpbmUgPSAoKSA9PiBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0pO1xcblxcblxcblxcbiAgICAgICAgbGluZSgpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxiPum7mOiupOS4u+mhtTwvYj4nLnNtYWxsKCksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9zeXN0ZW0vNDIucG5nJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICB9KTtcXG4gICAgICAgIHBsYXRmb3JtID0gZ2V0SXRlbSgncGxhdGZvcm0nLCAna3cnKTtcXG4gICAgICAgIHBsYXRmb3Jtcy5zbGljZSgwLCA4KS5tYXAodGl0bGUgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSA9PSBwbGF0Zm9ybSA/IFJpY2goU3Ryb25nKENvbG9yKHRpdGxlKSkpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF80JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgncGxhdGZvcm0nLCB0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCB0aXRsZSlcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcblxcblxcblxcbiAgICAgICAgbGluZSgpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxiPum7mOiupOaQnOe0ojwvYj4nLnNtYWxsKCksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9zeXN0ZW0vNDMucG5nJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICB9KTtcXG4gICAgICAgIHNfcGxhdGZvcm0gPSBnZXRJdGVtKCdzX3BsYXRmb3JtJywgJ2t3Jyk7XFxuICAgICAgICBwbGF0Zm9ybXMuc2xpY2UoMSwgNikubWFwKHRpdGxlID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgPT0gc19wbGF0Zm9ybSA/IFJpY2goU3Ryb25nKENvbG9yKHRpdGxlKSkpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF81JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnc19wbGF0Zm9ybScsIHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgfSk7XFxuXFxuXFxuICAgICAgICBsaW5lKCk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGI+5by556qX5o+Q56S6PC9iPicuc21hbGwoKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL3N5c3RlbS80MS5wbmcnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgdTAgPSBnZXRJdGVtKCd1cGRhdGUwJywgJzEnKSA9PSAnMSc7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGI+5bCP56iL5bqP5pu05pawPC9iPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodTApID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgndXBkYXRlMCcsIHUwKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHUwID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAodTAgPyA1NSA6IDYzKSArICcuc3ZnJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICB1MSA9IGdldEl0ZW0oJ3VwZGF0ZTEnLCAnMScpID09ICcxJztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7mpoLlv7XniYjnrb7liLA8L2I+JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh1MSkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCd1cGRhdGUxJywgdTEpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgdTEgPyAnMCcgOiAnMScpLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArICh1MSA/IDU1IDogNjMpICsgJy5zdmcnXFxuICAgICAgICB9KTtcXG4gICAgICAgIHUyID0gZ2V0SXRlbSgndXBkYXRlMicsICcwJykgPT0gJzEnO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxiPnFx6Z+z5LmQ5Yi35pawPC9iPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodTIpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgndXBkYXRlMicsIHUyKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHUyID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAodTIgPyA1NSA6IDYzKSArICcuc3ZnJ1xcbiAgICAgICAgfSk7XFxuXFxuXFxuXFxuXFxuICAgICAgICBsaW5lKCk7XFxuXFxuXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0pLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgcGFnZVRpdGxlOiAn56iL5bqP6buY6K6k6YWN572uJ1xcbiAgICB9XFxufSk7XFxuYXJyID0gW1xcXCJUR1jmlLbol49cXFwiLCBcXFwi6auY57qn5pCc57SiXFxcIiwgXFxcIuino+aekOeuoeeQhlxcXCIsIFxcXCLnqIvluo/pppbpobVcXFwiXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi5Li76aG15YWD57SgPGJyPjxicj48c21hbGw+5L+d5a2Y5YWD57Sg5YiwXFxcXFxcXCLmiJHnmoTkuLvpobVcXFxcXFxcIjwvc21hbGw+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18yXFxcIixcXG4gICAgdXJsOiAkKGFyciwgMSwgJ+mAieaLqeimgeS/neWtmOeahOWFg+e0oCcpLnNlbGVjdCgoYXJyKSA9PiB7XFxuICAgICAgICBwYXNzd29yZCA9IFtcXG4gICAgICAgICAgICBcXFwi5rW36ZiU6KeG55WM77yM5oiR55qE5Li76aG144CM5q2M6K+N6YCC6YWNX1RHWOaUtuiXj+OAjeWFg+e0oO+/pW15X2hvbWVfc2luZ2xl77+lZXlKdVlXMWxJam9pNXEyTTZLK042WUNDNllXTlgxUkhXT2FVdHVpWGp5SXNJblJwZEd4bElqb2lWRWRZNXBTMjZKZVBJaXdpZFhKc0lqb2lhR2xyWlhJNkx5OXdZV2RsTDJOdmJHeGxZM1JwYjI0amJtOUlhWE4wYjNKNUl5TnViMUpsWTI5eVpFaHBjM1J2Y25ralAzQmhaMlZVYVhSc1pUMVVSMWptbExib2w0OG1jblZzWlQzbXJZem9yNDNwZ0lMcGhZMGlMQ0pwWTI5dUlqb2lhR2xyWlhJNkx5OXBiV0ZuWlhNdmNuVnNaVjkwZVhCbFgyRjFaR2x2SW4wPVxcXCIsXFxuICAgICAgICAgICAgXFxcIua1t+mYlOinhueVjO+8jOaIkeeahOS4u+mhteOAjOatjOivjemAgumFjV/pq5jnuqfmkJzntKLjgI3lhYPntKDvv6VteV9ob21lX3NpbmdsZe+/pWV5SnVZVzFsSWpvaTVxMk02SytONllDQzZZV05YK21ybU9lNnArYVFuT2Uwb2lJc0luUnBkR3hsSWpvaTZhdVk1N3FuNXBDYzU3U2lJaXdpZFhKc0lqb2lhR2xyWlhJNkx5OXdZV2RsTDNObFlYSmphQ051YjBocGMzUnZjbmtqSTI1dlVtVmpiM0prU0dsemRHOXllU00vY0QxbWVYQmhaMlVtY25Wc1pUM21yWXpvcjQzcGdJTHBoWTBpTENKcFkyOXVJam9pYUdsclpYSTZMeTlwYldGblpYTXZiV1Z1ZFY5elpXRnlZMmd5SW4wPVxcXCIsXFxuICAgICAgICAgICAgXFxcIua1t+mYlOinhueVjO+8jOaIkeeahOS4u+mhteOAjOatjOivjemAgumFjV/op6PmnpDnrqHnkIbjgI3lhYPntKDvv6VteV9ob21lX3NpbmdsZe+/pWV5SnVZVzFsSWpvaTVxMk02SytONllDQzZZV05YK2lubythZWtPZXVvZWVRaGlJc0luUnBkR3hsSWpvaTZLZWo1cDZRNTY2aDU1Q0dJaXdpZFhKc0lqb2lhR2xyWlhJNkx5OXdZV2RsTDNKMWJHVk1hWE4wSTI1dlNHbHpkRzl5ZVNNamJtOVNaV052Y21SSWFYTjBiM0o1SXo5d1lXZGxWR2wwYkdVOTZLZWo1cDZRNTY2aDU1Q0dKbkoxYkdVOTVxMk02SytONllDQzZZV05JaXdpYVdOdmJpSTZJbWhwYTJWeU9pOHZhVzFoWjJWekwybGpiMjVmYldWdWRUWWlmUT09XFxcIixcXG4gICAgICAgICAgICBcXFwi5rW36ZiU6KeG55WM77yM5oiR55qE5Li76aG144CM5q2M6K+N6YCC6YWN44CN5YWD57Sg77+lbXlfaG9tZV9zaW5nbGXvv6VleUp1WVcxbElqb2k1cTJNNksrTjZZQ0M2WVdOSWl3aWRHbDBiR1VpT2lMbXJZem9yNDNwZ0lMcGhZMGlMQ0oxY213aU9pSm9hV3RsY2pvdkwyaHZiV1ZBNXEyTTZLK042WUNDNllXTklpd2lhV052YmlJNkltaDBkSEE2THk5dGJXSnBlaTV4Y0dsakxtTnVMMjF0WW1sNlgzQnVaeTgxY3pkS01qaFZPVWRJVm1salJEZG5kWFo1WW1GelpUZzJTR2hJUXpFeWIwOUVZblJ5YzJkTE4wTjRjbW8xVVhCTU5tZExibmxwWW1WYVJIZEZTMGxXUzFWUGRGQnZTR040Y0daM1lUQndiMjVhTVdsaE5XNXNRUzh3UDNkNFgyWnRkRDF3Ym1jaWZRPT1cXFwiXFxuICAgICAgICBdW2Fyci5pbmRleE9mKGlucHV0KV07XFxuICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKChwYXNzd29yZCkgPT4ge1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goXFxcImhpa2VyOi8vYXNzZXRzL2hvbWUuanNcXFwiKSk7XFxuICAgICAgICAgICAgSGlrZXJIb21lLmxvYWQoXFxcImltcG9ydFxcXCIsIHBhc3N3b3JkKTtcXG4gICAgICAgIH0sIHBhc3N3b3JkKTtcXG4gICAgfSwgYXJyKSxcXG4gICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaG9tZV9waWMxXFxcIixcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi5oiR5piv5Lya5ZGYPGJyPjxicj48c21hbGw+6YWN572u5Lya5ZGY6LSm5Y+3PC9zbWFsbD5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImNhcmRfcGljXzJcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlwcnVsZSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9jYXJkX2JnXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHBhZ2VUaXRsZTogJ+S8muWRmOmFjee9ridcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLmlK/mjIHkvZzogIU8YnI+PGJyPjxzbWFsbD7mm7TmlrDnmoTliqjlipt+PC9zbWFsbD5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImNhcmRfcGljXzJcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZG9uYXRlI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL3BsYWNlaG9sZGVyXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHBhZ2VUaXRsZTogJ+aNkOi1oC/mlK/mjIEnXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwiPGI+5Y+N6aaIUee+pO+8mjM2NTk3NjEzNDwvYj5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLnNtYWxsKCksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIHVybDogXFxcImh0dHA6Ly9xbS5xcS5jb20vY2dpLWJpbi9xbS9xcj9fd3Y9MTAyNyZrPXg4cjZtMGJZWW9uX3BDZ1QwQlJjMW9od1pta2tZNjFRJmF1dGhLZXk9RHBtVWlvQ3Z4NDVXalJSQm5iUlQyRHNKN0xMNkROWTN1YXUlMkJGS1BnUiUyRlNLejRFZ1lxVWpFVTV0Sk5pJTJCa05QbCZub3ZlcmlmeT0wJmdyb3VwX2NvZGU9MzY1OTc2MTM0XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pSv5oyB5L2c6ICFXCIsXCJwYXRoXCI6XCJkb25hdGVcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmjZDotaAv5pSv5oyBXFxcIixcXG4gICAgZGVzYzogXFxcIui/meS4quaNkOi1oOS4jeiDveS4uuS9oOW4puadpeeJueadg++8jOS9huaCqOeahOaUr+aMgeaYr+aIkeabtOaWsOWIm+S9nOeahOWKqOWKm+OAglxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIHVybDogXFxcInRvYXN0Oi8v5oSf6LCi5oKo55qE5pSv5oyBXFxcIlxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwicGljXzFfZnVsbFxcXCIsXFxuICAgIHVybDogXFxcImh0dHBzOi8vZ2l0ZWUuY29tL1Rob21hc1lvdS9oYWlrdW8vcmF3L21hc3Rlci9JTUdfMjAyNDAxMTJfMDgxMzU1LnBuZ1xcXCIsXFxuICAgIHBpY191cmw6IFxcXCJodHRwczovL2dpdGVlLmNvbS9UaG9tYXNZb3UvaGFpa3VvL3Jhdy9tYXN0ZXIvSU1HXzIwMjQwMTEyXzA4MTM1NS5wbmdcXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIuWbvueJh+WKoOi9vee8k+aFouivt+eojeetiVxcXCIuc21hbGwoKS5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS8muWRmOmFjee9rlwiLFwicGF0aFwiOlwidmlwcnVsZVwiLFwicnVsZVwiOlwianM6XFxuZCA9IFtdO1xcbl8gPSB7XFxuICAgIFxcXCJxcVxcXCI6IFxcXCJRUemfs+S5kFxcXCIsXFxuICAgIFxcXCJ3eVxcXCI6IFxcXCLnvZHmmJPkupHpn7PkuZBcXFwiLFxcbiAgICBcXFwia2dcXFwiOiBcXFwi6YW354uX6Z+z5LmQXFxcIixcXG4gICAgXFxcImtnMlxcXCI6IFxcXCLphbfni5fmpoLlv7XniYhcXFwiLFxcbiAgICBcXFwia3dcXFwiOiBcXFwi6YW35oiR6Z+z5LmQXFxcIixcXG4gICAgXFxcImt3MlxcXCI6IFxcXCLms6Lngrnpn7PkuZBcXFwiLFxcbiAgICBcXFwibWdcXFwiOiBcXFwi5ZKq5ZKV6Z+z5LmQXFxcIixcXG4gICAgXFxcIuS9nOiAhVxcXCI6IFxcXCLmjZDotaDkuJPlsZ5cXFwiLFxcbiAgICAvLyBcXFwi6Jyc542+XFxcIjogXFxcIuicnOeNvumfs+S5kFxcXCIsXFxuICAgIC8vIFxcXCLkupHlkKxcXFwiOiBcXFwi5LqR5ZCs6Z+z5LmQXFxcIixcXG59XFxueiA9IE9iamVjdC5rZXlzKF8pO1xcbmZvciAocCBvZiB6KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBfW3BdLmJpZygpLmZvbnRjb2xvcihcXFwicHVycGxlXFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImNhcmRfcGljXzJcXFwiLFxcbiAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykocCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogX1twXSArICfphY3nva4nXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIikubGF6eVJ1bGUoKHR5cGUpID0+IHtcXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAncXEnOlxcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gWydjb29raWXmnInmlYjmnJ835aSp77yM5bey5pSv5oyB5Yi35pawY29va2llJywgJ+W8ueeql+aPkOekuum7mOiupOWFs+mXre+8jOivt+aJi+WKqOW8gOWQrycsIFsncW1fa2V5c3QnLCAndWluJ11dO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJ3d5JzpcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IFsnd2VhcGnlt7LmlLnmiJBlYXBpJywgJ+W6lOivpeaJgOaciemfs+i0qOmDveiDveiOt+WPluS6hicsIFsnTVVTSUNfVSddXTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICdrZyc6XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbJ+WPr+S7peaKk+e9kemhteerr+eahGNvb2tpZScsICfjgIAnLCBbJ3VzZXJpZCcsICd0b2tlbiddXTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICdrZzInOlxcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gWyflt7LmlK/mjIHmr4/lpKnnrb7liLDpoobkvJrlkZgnLCAnc2lnbmtleeWFs+mUruivjUxuVDZ4cCcsIFsndXNlcmlkJywgJ3Rva2VuJywgJ3NpZ25rZXknXV07XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAna3cnOlxcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gWyfoh6rlt7Hlhplqc+iOt+WPlicsICdodHRwczovL2dpdGh1Yi5jb20veWhzajA5MTkvbXVzaWNfYXBpL2Jsb2IvbWFpbi9saWIvYXBpL2t1d28vbW9kdWxlL3NvbmcuZGFydCcsIFsncmlk5Lyg5Y+C5Li677yadDFcXFxcbmJy5Lyg5Y+C5Li677yadDJcXFxcbmRlc+iwg+eUqO+8miQucmVxdWlyZShcXFwia3c/cnVsZT3mrYzor43pgILphY1cXFwiKS5kZXMoc3RyKTsnXV07XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAna3cyJzpcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IFsn5LuOQVBQ5oqT5YyFJywgJ+OAgCcsIFsndWlkJywgJ3Rva2VuJywgJ2RldmlkJ11dO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJ21nJzpcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IFsn5LuO572R6aG155m75b2VJywgJ+OAgCcsIFsnU0VTU0lPTiddXTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICfkvZzogIUnOlxcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJ3RvYXN0Oi8v6YKi5ZWK77yM5L2c6ICF5LiN5oOz5pS25Yiw5b6L5biI5Ye977yM5pqC5LiN5pSv5oyBJztcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodHlwZSAhPSAn5L2c6ICFJykge1xcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCd2aXBydWxlX2MnICsgaSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdXJsID0gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKCh0eXBlLCBbdGl0bGUsIGRlc2MsIGNvb2tpZXNdKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkID0gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1dO1xcbiAgICAgICAgICAgICAgICAgICAgY29va2llcy5tYXAoKHQsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiB0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHR5cGUgPT0gJ2t3JyA/IDcgOiAzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigndmlwcnVsZV9jJyArIGkpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGBwdXRNeVZhcihcXFwidmlwcnVsZV9jJHtpfVxcXCIsIGlucHV0KTtgLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJznoa7lrprlr7zlhaXigJ3igJ1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIikubGF6eVJ1bGUoKHR5cGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRFZGl0Mih0eXBlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0eXBlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgfSwgdHlwZSwgYXJyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgIH0sIHApLFxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifV0iLCJpY29uIjoiaHR0cDovL21tYml6LnFwaWMuY24vbW1iaXpfcG5nLzVzN0oyOFU5R0hWaWNEN2d1dnliYXNlODZIaEhDMTJvT0RidHJzZ0s3Q3hyajVRcEw2Z0tueWliZVpEd0VLSVZLVU90UG9IY3hwZndhMHBvbloxaWE1bmxBLzA/d3hfZm10PXBuZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment