Advertisement
xiaomianao666

邀您一起看:稀饭

Jan 30th, 2023
655
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥稀饭@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p+ino+aekFwiLFwicGF0aFwiOlwicFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmxldCBodG1sID0gcmVxdWVzdCh1cmwpO1xcbmxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG5sZXQgYXJyID0gYWxpc3QubWFwKGl0ID0+IHtcXG4gICAgcmV0dXJuIHtcXG4gICAgICAgIC8vaHRtbDogaXQsXFxuICAgICAgICB0ZXh0OiBwZGZoKGl0LCBcXFwiYSYmVGV4dFxcXCIpLFxcbiAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCJhJiZ0aXRsZVxcXCIpLFxcbiAgICAgICAgaHJlZjogcGQoaXQsIFxcXCJhJiZocmVmXFxcIiwgdXJsKVxcbiAgICB9XFxufSk7XFxuLy9sb2coYXJyKTtcXG5sZXQgZGVidWcgPSBmYWxzZTtcXG5cXG5mdW5jdGlvbiBjbGVhclRleHQoaXQpIHtcXG4gICAgcmV0dXJuIGl0LnJlcGxhY2UoL+esrHzpm4Z856ugL2csIFxcXCJcXFwiKTtcXG59XFxuXFxuZnVuY3Rpb24gaXNNb3ZpZShpdCkge1xcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBsZXQgdGl0ID0gaXQudGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgIGl0ID0gaXQudGV4dCB8fCBcXFwiXFxcIjtcXG4gICAgaWYgKGl0ID09IFxcXCJcXFwiIHx8IGl0Lmxlbmd0aCA+IDgpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICAvL+aOkumZpFxcbiAgICBsZXQgcmVnID0gL1xcXFwufOmrmOa4heebtOaSrXzlhpnnnJ/mjqjojZB85b2x6ZmifOW9seinhnzok53lhYnnlLXlvbF86auY5riF55S15b2xfOesrOS4gOWto3znrKzkuozlraN856ys5LiJ5a2jfOesrOWbm+Wto3znrKzkupTlraMvO1xcbiAgICBpZiAodGl0ICE9IFxcXCJcXFwiICYmICF0aXQuaW5jbHVkZXMoaXQpIHx8IHJlZy50ZXN0KGl0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIHJldHVybiBpdC5tYXRjaCgv5Y6f55S7fOWkh+eUqHzok53lhYl86LaF5riFfOmrmOa4hXzmraPniYd86Z+p54mIfDRLfDRrfDEwODBQfDcyMFB8VEN8SER8QkQvKVxcbn1cXG5cXG5mdW5jdGlvbiBub3RDaGFwdGVyKGl0KSB7XFxuICAgIGlmIChpdCA9PSBudWxsIHx8IGl0LnRleHQgPT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gICAgcmV0dXJuIGl0LnRleHQubWF0Y2goL1swLTldXFxcXC5bMC05XeWIhi8pO1xcbn1cXG5cXG5mdW5jdGlvbiBpc0NoYXB0ZXIoaXQsIHByZSwgbmV4dCkge1xcbiAgICBpZiAobm90Q2hhcHRlcihpdCkpIHtcXG4gICAgICAgIC8v5LyY5YWI5o6S6ZmkXFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgLy/liKTmlq3mmK/kuI3mmK/nlLXlvbFcXG4gICAgaWYgKGlzTW92aWUoaXQpKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXNDaGFwdGVyMChpdCwgcHJlKSB8fCBpc0NoYXB0ZXIwKGl0LCBuZXh0KTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0Q2hhcHRlck51bShpdCkge1xcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgIHJldHVybiAtMTtcXG4gICAgfVxcbiAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgIGlmIChpdCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcmV0dXJuIC0xO1xcbiAgICB9XFxuICAgIGl0ID0gY2xlYXJUZXh0KGl0KTtcXG4gICAgbGV0IHJlZyA9IC9eWzAtOV0qJC87XFxuICAgIGlmICghcmVnLnRlc3QoaXQpKSB7XFxuICAgICAgICByZXR1cm4gLTE7XFxuICAgIH1cXG4gICAgaXQgPSBwYXJzZUludChpdCk7XFxuICAgIGlmIChpc05hTihpdCkpIHtcXG4gICAgICAgIHJldHVybiAtMTtcXG4gICAgfVxcbiAgICBpZiAoaXQgPiAxOTAwICYmIGl0IDwgMjEwMCkge1xcbiAgICAgICAgcmV0dXJuIC0xO1xcbiAgICB9XFxuICAgIHJldHVybiBpdDtcXG59XFxuXFxuZnVuY3Rpb24gaXNDaGFwdGVyMChpdCwgYnJvdGhlcikge1xcbiAgICAvKmlmIChkZWJ1Zykge1xcbiAgICAgICAgbG9nKHtcXG4gICAgICAgICAgICBpdDogaXQsXFxuICAgICAgICAgICAgYnJvdGhlcjogYnJvdGhlclxcbiAgICAgICAgfSk7XFxuICAgIH0qL1xcbiAgICBpdCA9IGdldENoYXB0ZXJOdW0oaXQpO1xcbiAgICAvL2lmIChkZWJ1ZykgbG9nKGl0KTtcXG4gICAgaWYgKGl0IDwgMCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIGJyb3RoZXIgPSBnZXRDaGFwdGVyTnVtKGJyb3RoZXIpO1xcbiAgICAvL2lmIChkZWJ1ZykgbG9nKGJyb3RoZXIpO1xcbiAgICBpZiAoYnJvdGhlciA8IDApIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXQgLSBicm90aGVyIDwgMiAmJiBpdCAtIGJyb3RoZXIgPiAtMjtcXG59XFxuXFxubGV0IF93ZWIgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgbGV0IHVybHMgPSBfZ2V0VXJscygpO1xcbiAgICBsZXQgcmVnID0gL1xcXFwuaHRtbHxcXFxcLmNzc3xcXFxcLmpzLztcXG4gICAgZm9yIChsZXQgayBpbiB1cmxzKSB7XFxuICAgICAgICBpZiAoIXJlZy50ZXN0KHVybHNba10pICYmIHVybHNba10ubWF0Y2goL1xcXFwubXA0fFxcXFwubTN1OC8pKSB7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2codXJsc1trXSk7XFxuICAgICAgICAgICAgcmV0dXJuIGZ5X2JyaWRnZV9hcHAuZ2V0SGVhZGVyVXJsKHVybHNba10ucmVwbGFjZSgvLio/dXJsPS8sIFxcXCJcXFwiKSkgKyBcXFwiI2lnbm9yZUltZz10cnVlI1xcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG59KTtcXG5cXG5sZXQgd2ViID0gZ2V0SXRlbSgnd2ViJywgJzAnKSA9PSBcXFwiMVxcXCI7XFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICBsZXQgdCA9IGl0LnRleHQ7XFxuICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBjb250aW51ZTtcXG4gICAgfVxcbiAgICBsZXQgcHJlID0gaSA9PSAwID8gbnVsbCA6IGFycltpIC0gMV07XFxuICAgIGxldCBuZXh0ID0gaSA9PSAoYXJyLmxlbmd0aCAtIDEpID8gbnVsbCA6IGFycltpICsgMV07XFxuICAgIGlmIChpc0NoYXB0ZXIoaXQsIHByZSwgbmV4dCkpIHtcXG4gICAgICAgIGlmICh3ZWIpIHtcXG4gICAgICAgICAgICB2YXIgdXJseCA9IFxcXCJ3ZWJSdWxlOi8vXFxcIiArIGl0LmhyZWYgKyBcXFwiQFxcXCIgKyBfd2ViO1xcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLm00YScsICcubXAzJywgJy5mbHYnLCAnLmF2aScsICcuM2dwJywgJy5tcGVnJywgJy53bXYnLCAnLm1vdicsICcucm12YicsICcuZ2lmJywgJy5qcGVnJywgJy5wbmcnLCAnLmljbycsICcuc3ZnJ11cXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdXJseCA9IFxcXCJ2aWRlbzovL1xcXCIgKyBpdC5ocmVmO1xcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgdXJsOiB1cmx4LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICBleHRyYTogZXh0cmF4XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5pZiAoZC5sZW5ndGggPT0gMCkge1xcbiAgICAvL+WMuemFjeWksei0pVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgY2FuQmFjazogdHJ1ZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgdG9hc3QoXFxcIkFJ5Yy56YWN5aSx6LSl77yM5bey5L2/55SoWDXliqDovb1cXFwiKTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn0gZWxzZSB7XFxuICAgIC8v5Li657q/6Lev5Yqg5YiG5Ymy57q/XFxuICAgIGxldCBkMiA9IFtdO1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGQyLnB1c2goZFtpXSk7XFxuICAgICAgICBpZiAoaSA8IGQubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgIGxldCBpdCA9IGRbaV07XFxuICAgICAgICAgICAgbGV0IHQxID0gcGFyc2VJbnQoY2xlYXJUZXh0KGl0LnRpdGxlKSk7XFxuICAgICAgICAgICAgbGV0IG5leHQgPSBkW2kgKyAxXTtcXG4gICAgICAgICAgICBsZXQgdDIgPSBwYXJzZUludChjbGVhclRleHQobmV4dC50aXRsZSkpO1xcbiAgICAgICAgICAgIGlmICh0MiAtIHQxID4gMSB8fCB0MSAtIHQyID4gMSkge1xcbiAgICAgICAgICAgICAgICBkMi5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkMi5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgc2V0UmVzdWx0KGQyKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIuaQnOe0oua1i+ivlVwiLFwicGF0aFwiOlwic1wiLFwicnVsZVwiOlwianM6XFxubGV0IHVybCA9IGJhc2U2NERlY29kZShnZXRQYXJhbShcXFwidVxcXCIpKTtcXG5sb2codXJsKTtcXG5sZXQga2V5ID0gZ2V0UGFyYW0oXFxcImtleVxcXCIpO1xcbmxldCBzcCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcIik7XFxuc2V0UmVzdWx0KHNwKHVybCwga2V5LCBcXFwi5pCc57Si5rWL6K+VXFxcIikpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6IGa5ZCI5pCc57SiXCIsXCJwYXRoXCI6XCJwcm9cIixcInJ1bGVcIjpcInZhciBkID0gW107XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWFs+mUruivje+8jOWwvemHj+WwkeWtl+S4jeimgeWkmuWtl1xcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInNvdVxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic29cXFwiKTtcXG4gICAgfSkpO1xcbn1cXG5cXG5sZXQgcyA9IGdldE15VmFyKFxcXCJzb3VcXFwiLCBcXFwiXFxcIik7XFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxuICAgIGxldCB7XFxuICAgICAgICBsb2FkXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIik7XFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgIGxldCBkYXRhID0gbG9hZChwLCByICE9IFxcXCJcXFwiID8gciA6IG51bGwpO1xcblxcbiAgICBsZXQgcGFnZWlkID0gTVlfUlVMRS50aXRsZSArIFxcXCItcGFnZVxcXCIgKyBwO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIHAgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFwiICsgZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxuICAgIGxvZyhkYXRhLmxlbmd0aCk7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIC8v5aSa57q/56iL5Yqg6L29ICAgICAgICBcXG4gICAgICAgIGxldCByZWFsUGFnZSA9IFxcXCJcXFwiID09IHIgPyAxIDogcDtcXG4gICAgICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5maW5kKHMsIHJlYWxQYWdlKTtcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcbiAgICAgICAgICAgICAgICBpZDogXFxcInJ1bGVAXFxcIiArIGl0Lm5hbWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAvL2xvZyhcXFwibGlzdGVuZXI6IFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxuICAgICAgICAgICAgICAgIHBhcmFtLmkgPSBwYXJhbS5pICsgMTtcXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHdyYXAoaXQudGl0bGUsIHMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQucGljX3VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5waWNfdXJsID8gJ21vdmllXzFfdmVydGljYWxfcGljJyA6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGl0LmV4dHJhXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0ocGFnZWlkKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgTVlfUEFHRSArIFxcXCLpobXkuK3vvIzov5vluqbvvJpcXFwiICsgKHBhcmFtLmkgKyAxKSArIFxcXCIvXFxcIiArIHBhcmFtLmFsbCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgICAgIGk6IDAsXFxuICAgICAgICAgICAgICAgIGo6IC0xXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0gZWxzZSB7XFxuICAgIGxldCB7XFxuICAgICAgICBsb2FkXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIik7XFxuICAgIGxldCBkYXRhID0gbG9hZCgtMSwgbnVsbCk7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hbmFnZVxcXCIpKGQsIGRhdGEubWFwKGl0ID0+IGl0Lm5hbWUpKTtcXG4gICAgICAgIGZvciAobGV0IGl0IG9mIGRhdGEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXQubmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi6K+36YCJ5oup5pON5L2cXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbDogMSxcXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtcXFwi6K6/6Zeu6aaW6aG1XFxcIiwgXFxcIuaQnOe0ouatpOermVxcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi6K6/6Zeu6aaW6aG1XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9VUkwgPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwieDU6Ly9cXFwiICsgZ2V0SG9tZSh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2luZ2xlc1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCBpdC51cmwpXFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgUlVMRToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0Lm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLnpoHnlKhcXFwiICsgaXQubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLnoa7orqTliKDpmaTnpoHnlKhcXFwiICsgbmFtZSArIFxcXCLlkJfvvJ9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygobmFtZSwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YT9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL09LXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG5hbWUsIE1ZX1JVTEUudGl0bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXQubmFtZSlcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuiuv+mXrummlumhtVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6IFxcXCIneDU6Ly9cXFwiICsgZ2V0SG9tZShpdC51cmwpICsgXFxcIidcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmkJzntKLmraTmupBcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiBcXFwiJ2hpa2VyOi8vcGFnZS9zaW5nbGVzJ1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlbDmja5cIixcInBhdGhcIjpcImRhdGFcIixcInJ1bGVcIjpcIi8v5bm25Y+R6KeE5YiZ5pWwXFxubGV0IHNpemUwID0gMTA7XFxubGV0IHJ1bGVzVGV4dDAgPSBg56iA6aWtQGh0dHBzOi8vd3d3LnhpZmFueXMuY29tL3lpbmdwaWFuc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbui+vum+n0BodHRwczovL3d3dy5kYWRhZ3VpLm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcbuWfjuW4gkBodHRwczovL3d3dy5jaXR5ZHkuY29tL3NlYXJjaC5odG1sP3dkPSoqXFxubGlidmlvQGh0dHBzOi8vd3d3LmxpYnZpby5tZS9zZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXG7mlrDop4ZAaHR0cHM6Ly93d3cuNjA4MGR5MS5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbueci+eci3lAaHR0cHM6Ly93d3cua2tkeS5saXZlL3ZvZC1zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxu6aWt5ZuiQGh0dHBzOi8vd3d3LmZhbnR1YW5oZC5jb20vc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxcbuWFjeeahEBodHRwczovL3d3dy5mcmVlb2sudmlwL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7niZvpqaxAaHR0cHM6Ly93d3cubml1bWF0di5jYy92b2RzZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxu5YWN6LS5QGh0dHBzOi8vd3d3LnRoZWZyZWUudmlwL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7ojqvmiY7lhZRAaHR0cHM6Ly93d3cubW96aGF0dS5jb20vaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKlxcbumcuembs0BodHRwczovL3BseWluZ3NoaS5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbuWOgumVv0BodHRwczovL3d3dy5jenNwcC5jb20veHNzZWFyY2g/cT0qKlxcblZPRkBodHRwczovL3d3dy52b2ZsaXguY29tL3NlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7nlLXlvbFAaHR0cHM6Ly93d3cuYXBwbW92aWUuY2MvaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxu6L+95YmnQGh0dHA6Ly96amRyLnZpcC92b2Qvc2VhcmNoL3dkLyoqLmh0bWxcXG7nlq/ni5dAaHR0cHM6Ly9tLmZlbmdnb3VkeTMuY29tL2luZGV4LnBocD9zPXZvZC1zZWFyY2gtbmFtZSZ3ZD0qKlxcbuWcqOe6v0BodHRwczovL3p4emoudmlwL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcbuS4g+S4g0BodHRwOi8vYWFhc29mYS5jb20vc2VhcmNoLnBocFxcbuWMl+W3nUBodHRwczovL3d3dy5iY3d6Zy5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0vP3dkPSoqXFxuRUZAaHR0cHM6Ly93d3cucGlsaTUuY24vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxu5b2x5a62QGh0dHA6Ly95c3pqdmlwLmNvbS9pbmRleC5waHAvdm9kL3NlYXJjaC5odG1sP3dkPSoqXFxu5LqU5LqUQGh0dHBzOi8vNTU1ZHkuY2Mvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbua4o+a8q0BodHRwczovL3d3dy5kbTIwMjIuY29tL3ZvZHNlYXJjaC5odG1sP3dkPSoqXFxu5Zyo5a62QGh0dHBzOi8venh6ai52aXAvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxucGlh5bqTQGh0dHBzOi8vbS5waWFrdS5jYy9zLy0tLS0tLS0tLS0tLS0vP3dkPSoqXFxu5p6B5ZOBQGh0dHBzOi8vd3d3LmpweXMubWUvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbuiJvui/qkBodHRwczovL2FpZGkudHYvdnNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcbuS5neW3nkBodHRwOi8vd3d3LmppdXpob3U5MTEuY29tL3NlYXJjaC5waHA/c2VhcmNod29yZD0qKlxcbuWNgeWNg0BodHRwOi8vd3d3LnFpYW5zaGlob3VzZS5jb20vc3JoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbum6pueJh0BodHRwOi8vbS5seTM2OC5jb20vaW5kZXgucGhwP3M9dm9kLW1fcy1uYW1lJndkPSoqXFxu56eB5Lq6QGh0dHBzOi8vc291bWsuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7mmJ/ovrBAaHR0cDovL3d3dy5xaGRkai5jb20uY24veGN5eXNlYXJjaC8qKi0tLS0tLS0tLS0tLS0uaHRtbFxcbkNva2V2WUBodHRwczovL2Nva2Vtdi5tZS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu54ix55yLeUBodHRwczovL2lrYW42LnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9Kiomc3VibWl0PVxcbuW5sumlrXB5QGh0dHBzOi8vd3d3LmdmeXN5czEuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7lpKnnqbp5QGh0dHA6Ly90a3pucC5jb20vdm9kc2VhcmNoLmh0bWw/d2Q9KipcXG7ok53lhYlAaHR0cHM6Ly93d3cubGd5eS5jYy92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu5L2O56uvQGh0dHBzOi8vZGR5cy50di8/cz0qKiZwb3N0X3R5cGU9cG9zdFxcbuWKquWKqkBodHRwczovL3d3dy5udW51eXkzLm9yZy9zby8qKi0qKi0tLmh0bWxgO1xcbmxldCBydWxlc1RleHQgPSBnZXRJdGVtKFxcXCJydWxlc1xcXCIsIHJ1bGVzVGV4dDApO1xcbmxldCBzcCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcIik7XFxucnVsZXMgPSBydWxlc1RleHQuc3BsaXQoXFxcIlxcXFxuXFxcIilcXG4gICAgLmZpbHRlcihpdCA9PiBpdC5pbmNsdWRlcyhcXFwiQFxcXCIpKVxcbiAgICAubWFwKHJ1bGUgPT4ge1xcbiAgICAgICAgbGV0IHMgPSBydWxlLnNwbGl0KFxcXCJAXFxcIik7XFxuICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgIG5hbWU6IHNbMF0sXFxuICAgICAgICAgICAgZmluZDogZnVuY3Rpb24oa2V5LCBwYWdlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBzcChzWzFdLCBrZXksIHNbMF0pO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdXJsOiBzWzFdXFxuICAgICAgICB9O1xcbiAgICB9KTtcXG5cXG5mdW5jdGlvbiBsb2FkKHBhZ2UsIHJ1bGUpIHtcXG4gICAgbGV0IHNpemUgPSBwYWdlIDw9IDAgPyBydWxlcy5sZW5ndGggOiBzaXplMDtcXG4gICAgcGFnZSA9IHBhZ2UgPD0gMCA/IDEgOiBwYWdlO1xcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxuICAgIH1cXG4gICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcbiAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCAmJiBwYWdlID4gMSkge1xcbiAgICAgICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSAmJiBpLnBhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXG4gICAgfVxcbiAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcbiAgICAgICAgcmV0dXJuIFtdO1xcbiAgICB9XFxuICAgIGxldCBsZW4gPSBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgcGFnZSAqIHNpemUpIHtcXG4gICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxuICAgIH1cXG4gICAgcmV0dXJuIHJ1bGVzLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbik7XFxufVxcblxcbmZ1bmN0aW9uIGFkZFJ1bGUobmFtZSwgc3VybCkge1xcbiAgICBzZXRJdGVtKFxcXCJydWxlc1xcXCIsIHJ1bGVzVGV4dCArIFxcXCJcXFxcblxcXCIgKyBuYW1lICsgXFxcIkBcXFwiICsgc3VybCk7XFxufVxcblxcbmZ1bmN0aW9uIGFkZEFsbChpbnB1dCkge1xcbiAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcmV0dXJuIDA7XFxuICAgIH1cXG4gICAgbGV0IGFyciA9IGlucHV0LnNwbGl0KFxcXCJcXFxcblxcXCIpXFxuICAgICAgICAuZmlsdGVyKGl0ID0+IGl0LmluY2x1ZGVzKFxcXCJAXFxcIikpXFxuICAgICAgICAubWFwKHJ1bGUgPT4ge1xcbiAgICAgICAgICAgIGxldCBzID0gcnVsZS5zcGxpdChcXFwiQFxcXCIpO1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIG5hbWU6IHNbMF0sXFxuICAgICAgICAgICAgICAgIHVybDogc1sxXVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9KTtcXG4gICAgbGV0IGV4aXN0ID0gcnVsZXMubWFwKGl0ID0+IGl0LnVybCk7XFxuICAgIGxldCBjID0gMDtcXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBpZiAoIWV4aXN0LmluY2x1ZGVzKGl0LnVybCkpIHtcXG4gICAgICAgICAgICBydWxlc1RleHQgPSBydWxlc1RleHQgKyBcXFwiXFxcXG5cXFwiICsgaXQubmFtZSArIFxcXCJAXFxcIiArIGl0LnVybDtcXG4gICAgICAgICAgICBjKys7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgc2V0SXRlbShcXFwicnVsZXNcXFwiLCBydWxlc1RleHQpO1xcbiAgICByZXR1cm4gYztcXG59XFxuXFxuZnVuY3Rpb24gcmVtb3ZlUnVsZShuYW1lKSB7XFxuICAgIGxldCBuZXdUID0gcnVsZXNUZXh0LnNwbGl0KFxcXCJcXFxcblxcXCIpXFxuICAgICAgICAuZmlsdGVyKGl0ID0+IGl0LmluZGV4T2YobmFtZSArIFxcXCJAXFxcIikgPCAwKVxcbiAgICAgICAgLmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgIHNldEl0ZW0oXFxcInJ1bGVzXFxcIiwgbmV3VCk7XFxufVxcblxcbiQuZXhwb3J0cyA9IHtcXG4gICAgbG9hZDogbG9hZCxcXG4gICAgYWRkUnVsZTogYWRkUnVsZSxcXG4gICAgcmVtb3ZlUnVsZTogcmVtb3ZlUnVsZSxcXG4gICAgYWRkQWxsOiBhZGRBbGxcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLop6PmnpBcIixcInBhdGhcIjpcInNwXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBzZWFyY2godXJsLCBrZXksIHJ1bGUpIHtcXG4gICAgbGV0IGQgPSBbXTtcXG4gICAgbGV0IGh0bWwgPSBcXFwiXFxcIjtcXG4gICAgaWYgKHVybC5pbmNsdWRlcyhcXFwiKipcXFwiKSkge1xcbiAgICAgICAgLy9nZXTor7fmsYJcXG4gICAgICAgIGxldCBvbGQgPSB1cmw7XFxuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShcXFwiKipcXFwiLCBrZXkpO1xcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsKTtcXG4gICAgICAgIC8v6Ieq5Yqo6L+H6aqM6K+B56CB5ZKM6aKR57mB6K6/6Zeu6ZmQ5Yi2XFxuICAgICAgICBsZXQge1xcbiAgICAgICAgICAgIGNoZWNrLCB0ZXN0XFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveXptXFxcIik7XFxuICAgICAgICBpZiAoY2hlY2sodXJsLCBodG1sLCBkKSkge1xcbiAgICAgICAgICAgIGxvZyhcXFwi6YeN6K+V5LqGXFxcIik7XFxuICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogdXJsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTsgICAgICAgICAgIFxcbiAgICAgICAgfSAgICAgICAgIFxcbiAgICAgICAgdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8v6Ieq5Yqo6K+G5YircG9zdOivt+axglxcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsKTtcXG4gICAgICAgIGxldCBmb3JtID0gcGRmaChodG1sLCBcXFwiYm9keSYmZm9ybSYmSHRtbFxcXCIpO1xcbiAgICAgICAgbGV0IGFjdGlvbiA9IHBkKGh0bWwsIFxcXCJmb3JtJiZhY3Rpb25cXFwiLCB1cmwpO1xcbiAgICAgICAgbGV0IGlucHV0cyA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmZvcm0mJmlucHV0XFxcIik7XFxuICAgICAgICBsZXQgYm9keSA9IHt9O1xcbiAgICAgICAgZm9yIChsZXQgaXQgb2YgaW5wdXRzKSB7XFxuICAgICAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCBcXFwiaW5wdXQmJm5hbWVcXFwiKTtcXG4gICAgICAgICAgICBpZiAobmFtZSAmJiBuYW1lICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBkZmgoaXQsIFxcXCJpbnB1dCYmdmFsdWVcXFwiKTtcXG4gICAgICAgICAgICAgICAgYm9keVtuYW1lXSA9IHZhbHVlIHx8IGtleTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBodG1sID0gcG9zdChhY3Rpb24sIHtcXG4gICAgICAgICAgICBib2R5OiBib2R5XFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbiAgICBsZXQgYWxpc3QgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiZhXFxcIik7XFxuICAgIGxldCBhcnIgPSBhbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgbGV0IHQgPSBwZGZoKGl0LCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgbGV0IHQyID0gcGRmaChpdCwgXFxcImEmJnRpdGxlXFxcIik7XFxuICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgIC8vaHRtbDogaXQsXFxuICAgICAgICAgICAgdGV4dDogdDIgJiYgdDIuaW5jbHVkZXMoa2V5KSA/IHQyIDogdCxcXG4gICAgICAgICAgICBocmVmOiBwZChpdCwgXFxcImEmJmhyZWZcXFwiLCB1cmwpXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICBmdW5jdGlvbiBpc1Jlc3VsdChpdCkge1xcbiAgICAgICAgaXQgPSBpdC50ZXh0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGl0ID09IFxcXCJcXFwiIHx8IGl0Lm1hdGNoKC/mkJzntKJ857uT5p6cLykpIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpdC5pbmNsdWRlcyhrZXkpO1xcbiAgICB9XFxuXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICBsZXQgdCA9IGl0LnRleHQ7XFxuICAgICAgICBpZiAoIWl0LmhyZWYgfHwgaXQuaHJlZiA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGlzUmVzdWx0KGl0KSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0LFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcD91PVxcXCIgKyBiYXNlNjRFbmNvZGUoaXQuaHJlZiksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXCIgKyBydWxlICsgXFxcIjwvZm9udD5cXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGQ7XFxufVxcbiQuZXhwb3J0cyA9IHNlYXJjaDtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWinuWIoFwiLFwicGF0aFwiOlwibWFuYWdlXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSBmdW5jdGlvbihkLCBuYW1lcykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCJBSeaKgOacr1xcXCIsXFxuICAgICAgICB1cmw6IFxcXCJjb25maXJtOi8v5Z+65LqOQUnor4bniYfoh6rliqjliIbmnpDmupDnoIHmioDmnK/vvIzku6PnoIHlrozlhajlvIDmupDvvIzmlbDmja7mnaXmupDkuo7ljp/nvZHnq5nvvIzova/ku7blkozop4TliJnkuI3mj5Dkvpvku7vkvZXlhoXlrrkuanM6JydcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcIjBcXFwiID8gXFxcIuinhumikeWXheaOolxcXCIgOiBcXFwiV2Vi6YCa5YWNXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3dlYicsICcxJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCd3ZWInLCAnMCcpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiICsgXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocnIpID0+IHtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoXFxcImFpYWRkXFxcIik7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHJyICsgXFxcImFpc2RlbFxcXCIsIFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl572R56uZ5ZCN56ewXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ25hbWUnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcImFpYWRkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl572R56uZ5pCc57Si5Zyw5Z2AXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3N1cmwnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcImFpYWRkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaPkOS6pOS/neWtmFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VybCA9IGdldE15VmFyKFxcXCJzdXJsXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0TXlWYXIoXFxcIm5hbWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cmwgPT0gXFxcIlxcXCIgfHwgbmFtZSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5a6M5pW05YaF5a65XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGRlY29kZVVSSUNvbXBvbmVudChzdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gci5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIltcXFxcdTRlMDAtXFxcXHU5ZmE1XStcXFwiLCBcXFwiZ1xcXCIpLCBcXFwiKipcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlKG5hbWUsIHIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suS/neWtmFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwiYWlhZGRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBdKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiIC0gXFxcIixcXG4gICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgb3B0aW9uczogbmFtZXMsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLor7fpgInmi6nopoHliKDpmaTnmoTnq5nngrlcXFwiLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCJcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKGl++4j1xcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLnoa7lrprlr7zlh7rmiYDmnInmlbDmja7lkJfvvJ/vvIjlr7zlh7rlkI7lj6/ku6Xngrnlh7vml4HovrnnmoTlr7zlhaXmjInpkq7mibnph4/lr7zlhaXvvIlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFxcbiAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gbG9hZCgtMSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IGRhdGEubWFwKGl0ID0+IGl0Lm5hbWUgKyBcXFwiQFxcXCIgKyBpdC51cmwpLmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgc1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLihpjvuI9cXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl6KaB5om56YeP5a+85YWl55qE5pWw5o2uXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgIGFkZEFsbFxcbiAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIik7XFxuICAgICAgICAgICAgbGV0IGNvdW50ID0gYWRkQWxsKGlucHV0KTtcXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgKGNvdW50ID4gMCA/IFxcXCLmiJDlip/lr7zlhaVcXFwiICsgY291bnQgKyBcXFwi5p2h5pWw5o2uXFxcIiA6IFxcXCLkuIDmnaHkuZ/msqHlr7zlhaVcXFwiKVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyBcXFwiYWlzZGVsXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpqozor4HnoIFcIixcInBhdGhcIjpcInl6bVwiLFwicnVsZVwiOlwiZnVuY3Rpb24gY2hlY2sodXJsLCBodG1sLCBkKSB7XFxuICAgIGxldCByZWxvYWQgPSBmYWxzZTtcXG4gICAgaWYgKC/pqozor4HnoIF857O757uf5a6J5YWo6aqM6K+BLy50ZXN0KGh0bWwpKSB7XFxuICAgICAgICBsZXQgaGVhZGVycyA9IHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IHVybFxcbiAgICAgICAgfTtcXG4gICAgICAgIE1ZX0hPTUUgPSBnZXRIb21lKHVybCk7XFxuICAgICAgICBsZXQgc3N5eiA9ICdUbG9Hbm5pa1RocmZzLzVmRE5sazVDU3NiYUd0QUg3Vy91TVpqdVlvSXVwQjZiQ29vOUNvdExRSGZQSWRHZ2JrYnluS3FMMmFVRTJYeTU1OFgyUXhIWXRUVTA5dkQrNG9hQ0RJdVNaTzdueERiTGZSR2ZXajd6cWwreU1idkYrYUpvRC9tNlBzZncvUHlZT0FwL1pWR2RyUHphQ0J5ZmQwSEw1REZWU3crWUYyT0M0MFY4U1A5UnhkRktLZHJCdVB4Q1dkeFVDRnJKKzFsUnkvVFUzTEM4NEM0eHhFQmhndWQ3UnRCcDB6WkFycUJFMDYrWjNKdERQMGVGQ3ovRDVYMDQwOXFQSEszZTF5L0x1VWdjY3V4cEhuallMRTFHamxQOHdZQTJoUVdlN3lQbmdnZ1FCSHczMy9ndmIzdHVDY3hFS1RXZ21haC9SMzJBSDlaRjhqRjdXZW1UMjZsVWl6VlhlL3NwQ2RoRGdIUi96VWhPREQ0UE82Z2xJOEpQaGR1K1Z3ZlB5UkxHMkQ3Q1VvMUw2U0lGKzBmWWYwb1RPV04xM1VQSVRvNSt1WmQvV25RUUxVOE5ZeC9XRkNUaEVua2J6bG45WUd0NjBmUnhzSCs4dU1ERmdhQmlDK3oyU3BjeEI5Z1o2R1h5cExTWFdhaitxRVViR0pLRXgraksvdjVmbnJrSWhDZHdOYmtwOWRSa3M2ZG1sWWxCaWZ6b1dGOFJrdUMzcnFQdG9TY0JrTU9NWnU3R2lWdG9IRWRIVW96bW5VSWRyVTFMR0lxcTlXbkc3WDJhM3lIOHM2NW1qTHVMbmQzcTBVOHYrTE1QbkhMMi9HalF1VFFLVmgrUktFUHFLL0pkckNoR0xOcmpjSHZMSERiSEVzaHJHWnVRT2RFcGhieC9Qa2hrdmFZeTRLMU1PODRSMTdndVJzS3MvVjZuaVVQYUwrWGJRN2MzZnFKUzRWSEp3bHVkSlREZTAyZXVmZkdDbTBQSklQbEFPZ0xIblgwaXpKaEE2cTczOFIyVXdRY1dCUWpKdDc5YUYra3lxU2R5dDFRUFZRVmphQzNJcFJmN1Bnc0RoRUo3Ymk5blNjbHlJemdKOURDSjRUKzhkRzF4SGhLeVphc1Q3TC94OUxmcjFNZ3M4bkJaRVIyVzlheDdpVGtOSytYNUFDVS8vcC9Zb1AvdUFhbkR0YjNEMGlLVVV1WEZIK0piYjB4MVAzMjJTMnc2Qko0Nm51TkhCTUhUcFZ1V3doWmVaenJpR2g3cW9PeXdMV2lFeEJNS3l4VEdMbm1LaDdyMDMveVhLWVdJSm5wQk4yTU15Y1ZIUlpKN1J1bUhWNENJc1ZycTdpUlA0ODgyM1JKVnQ5T3R5UDd1dWMzd0JCVjNrY1pVemJiYVlkV0J4MStBdStPZDJ1N2xSNmpvT0w4MTBtY0ptL2Y3SjVUdkdRUDZIR3BoMVlISFg0Qzc0NTNhN3VWSHFPZ3lqamg1RUJkNzIwTUVCWTIzYytUS3EvejlVcFdERE9nNDhaRm53U0loRnFpdFdkaVppcXNhWXVOMC9TWHdpSzhFRzllUTI5dTJYREpvRFc0bWx3dGNSTzd2YVg1WGNGc2dmNC9tTFUwN21pJztcXG4gICAgICAgIGV2YWxQcml2YXRlSlMoc3N5eik7XFxuXFxuICAgICAgICBsZXQgdmNvZGUgPSBnZXRWQ29kZTIoTVlfSE9NRSArICcvaW5kZXgucGhwL3ZlcmlmeS9pbmRleC5odG1sPycsIEpTT04uc3RyaW5naWZ5KGhlYWRlcnMpLCAnbnVtJyk7XFxuICAgICAgICBmZXRjaChNWV9IT01FICsgaHRtbC5tYXRjaCgvXFxcXC9pbmRleC5waHAuKj92ZXJpZnk9LylbMF0gKyBKU09OLnBhcnNlKHZjb2RlKS5yZXQsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJlbG9hZCA9IHRydWU7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlbG9hZDtcXG59XFxuXFxuZnVuY3Rpb24gdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKSB7XFxuICAgIGlmICgvNeenknzpopHnuYEvLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmkJzntKLpnIDpl7TpmpQ156eS77yM54K55Ye76YeN5paw5Yqg6L29JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXCIgKyBydWxlICsgXFxcIjwvZm9udD5cXFwiLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh1cmwsIG9sZCwga2V5LCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBzcCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBkID0gc3Aob2xkLCBrZXksIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgd3JhcFxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBkKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIGtleSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHVybCwgZCk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0odXJsKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL09LXFxcIjtcXG4gICAgICAgICAgICB9LCB1cmwsIG9sZCwga2V5LCBydWxlKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICBjaGVjazogY2hlY2ssXFxuICAgIHRlc3Q6IHRlc3RcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInRvb2xcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHdyYXAodGV4dCwgcykge1xcbiAgICByZXR1cm4gdGV4dC5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyB0ZXh0IDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiPGVtPnw8L2VtPlxcXCIsIFxcXCJnXFxcIiksIFxcXCJcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcImdcXFwiKSwgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiKVxcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIHdyYXA6IHdyYXBcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLljZXmkJxcIixcInBhdGhcIjpcInNpbmdsZXNcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInNvXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzb1xcXCIsIFxcXCJcXFwiKVxcbiAgICB9XFxufSk7XFxubGV0IHMgPSBnZXRNeVZhcihcXFwic29cXFwiLCBcXFwiXFxcIik7XFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxuICAgIGxldCB7XFxuICAgICAgICBsb2FkXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIik7XFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgIGxldCBkYXRhID0gbG9hZChwLCBNWV9QQVJBTVMuUlVMRS5uYW1lKTtcXG4gICAgbGV0IGFyciA9IGRhdGFbMF0uZmluZChzLCBwKTtcXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIHMpXFxuICAgICAgICBkLnB1c2goaXQpO1xcbiAgICB9XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic291cFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLmtleSAmJiBnZXRNeVZhcihcXFwidXNlXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG4gICAgcHV0TXlWYXIoXFxcInVzZVxcXCIsIFxcXCIxXFxcIik7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ1c2VcXFwiKTtcXG4gICAgfSkpO1xcbn1cXG4kLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9wcm8nKVwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIkFJ5b2x5pCcXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9lbXB0eVwiLFwiY29sX3R5cGVcIjpcIng1X3dlYnZpZXdfc2luZ2xlXCIsXCJmaW5kX3J1bGVcIjpcImpzOnNldFJlc3VsdChbe1xcbiAgICB1cmw6XFxcImh0dHBzOi8vd3d3LnhpZmFueXMuY29tXFxcIixcXG5kZXNjOlxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuZXh0cmE6e2NhbkJhY2s6IHRydWV9XFxufV0pO1wiLFwiZ3JvdXBcIjpcIuKRokFJXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS6jOe6p+ino+aekFxcXCIsXFxcInBhdGhcXFwiOlxcXCJwXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcXFxcXCJ1XFxcXFxcXCIpKTtcXFxcbmxldCBodG1sID0gcmVxdWVzdCh1cmwpO1xcXFxubGV0IGFsaXN0ID0gcGRmYShodG1sLCBcXFxcXFxcImJvZHkmJmFcXFxcXFxcIik7XFxcXG5sZXQgYXJyID0gYWxpc3QubWFwKGl0ID0+IHtcXFxcbiAgICByZXR1cm4ge1xcXFxuICAgICAgICAvL2h0bWw6IGl0LFxcXFxuICAgICAgICB0ZXh0OiBwZGZoKGl0LCBcXFxcXFxcImEmJlRleHRcXFxcXFxcIiksXFxcXG4gICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFxcXFxcImEmJnRpdGxlXFxcXFxcXCIpLFxcXFxuICAgICAgICBocmVmOiBwZChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIsIHVybClcXFxcbiAgICB9XFxcXG59KTtcXFxcbi8vbG9nKGFycik7XFxcXG5sZXQgZGVidWcgPSBmYWxzZTtcXFxcblxcXFxuZnVuY3Rpb24gY2xlYXJUZXh0KGl0KSB7XFxcXG4gICAgcmV0dXJuIGl0LnJlcGxhY2UoL+esrHzpm4Z856ugL2csIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBpc01vdmllKGl0KSB7XFxcXG4gICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHRpdCA9IGl0LnRpdGxlIHx8IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgaXQgPSBpdC50ZXh0IHx8IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgaWYgKGl0ID09IFxcXFxcXFwiXFxcXFxcXCIgfHwgaXQubGVuZ3RoID4gOCkge1xcXFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxcXG4gICAgfVxcXFxuICAgIC8v5o6S6ZmkXFxcXG4gICAgbGV0IHJlZyA9IC9cXFxcXFxcXC586auY5riF55u05pKtfOWGmeecn+aOqOiNkHzlvbHpmaJ85b2x6KeGfOiTneWFieeUteW9sXzpq5jmuIXnlLXlvbF856ys5LiA5a2jfOesrOS6jOWto3znrKzkuInlraN856ys5Zub5a2jfOesrOS6lOWtoy87XFxcXG4gICAgaWYgKHRpdCAhPSBcXFxcXFxcIlxcXFxcXFwiICYmICF0aXQuaW5jbHVkZXMoaXQpIHx8IHJlZy50ZXN0KGl0KSkge1xcXFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBpdC5tYXRjaCgv5Y6f55S7fOWkh+eUqHzok53lhYl86LaF5riFfOmrmOa4hXzmraPniYd86Z+p54mIfDRLfDRrfDEwODBQfDcyMFB8VEN8SER8QkQvKVxcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBub3RDaGFwdGVyKGl0KSB7XFxcXG4gICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxcXG4gICAgICAgIHJldHVybiB0cnVlO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaXQudGV4dC5tYXRjaCgvWzAtOV1cXFxcXFxcXC5bMC05XeWIhi8pO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBpc0NoYXB0ZXIoaXQsIHByZSwgbmV4dCkge1xcXFxuICAgIGlmIChub3RDaGFwdGVyKGl0KSkge1xcXFxuICAgICAgICAvL+S8mOWFiOaOkumZpFxcXFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxcXG4gICAgfVxcXFxuICAgIC8v5Yik5pat5piv5LiN5piv55S15b2xXFxcXG4gICAgaWYgKGlzTW92aWUoaXQpKSB7XFxcXG4gICAgICAgIHJldHVybiB0cnVlO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaXNDaGFwdGVyMChpdCwgcHJlKSB8fCBpc0NoYXB0ZXIwKGl0LCBuZXh0KTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0Q2hhcHRlck51bShpdCkge1xcXFxuICAgIGlmIChpdCA9PSBudWxsIHx8IGl0LnRleHQgPT0gbnVsbCkge1xcXFxuICAgICAgICByZXR1cm4gLTE7XFxcXG4gICAgfVxcXFxuICAgIGl0ID0gaXQudGV4dCB8fCBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmIChpdCA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHJldHVybiAtMTtcXFxcbiAgICB9XFxcXG4gICAgaXQgPSBjbGVhclRleHQoaXQpO1xcXFxuICAgIGxldCByZWcgPSAvXlswLTldKiQvO1xcXFxuICAgIGlmICghcmVnLnRlc3QoaXQpKSB7XFxcXG4gICAgICAgIHJldHVybiAtMTtcXFxcbiAgICB9XFxcXG4gICAgaXQgPSBwYXJzZUludChpdCk7XFxcXG4gICAgaWYgKGlzTmFOKGl0KSkge1xcXFxuICAgICAgICByZXR1cm4gLTE7XFxcXG4gICAgfVxcXFxuICAgIGlmIChpdCA+IDE5MDAgJiYgaXQgPCAyMTAwKSB7XFxcXG4gICAgICAgIHJldHVybiAtMTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGl0O1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBpc0NoYXB0ZXIwKGl0LCBicm90aGVyKSB7XFxcXG4gICAgLyppZiAoZGVidWcpIHtcXFxcbiAgICAgICAgbG9nKHtcXFxcbiAgICAgICAgICAgIGl0OiBpdCxcXFxcbiAgICAgICAgICAgIGJyb3RoZXI6IGJyb3RoZXJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSovXFxcXG4gICAgaXQgPSBnZXRDaGFwdGVyTnVtKGl0KTtcXFxcbiAgICAvL2lmIChkZWJ1ZykgbG9nKGl0KTtcXFxcbiAgICBpZiAoaXQgPCAwKSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9XFxcXG4gICAgYnJvdGhlciA9IGdldENoYXB0ZXJOdW0oYnJvdGhlcik7XFxcXG4gICAgLy9pZiAoZGVidWcpIGxvZyhicm90aGVyKTtcXFxcbiAgICBpZiAoYnJvdGhlciA8IDApIHtcXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaXQgLSBicm90aGVyIDwgMiAmJiBpdCAtIGJyb3RoZXIgPiAtMjtcXFxcbn1cXFxcblxcXFxubGV0IF93ZWIgPSAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICBsZXQgdXJscyA9IF9nZXRVcmxzKCk7XFxcXG4gICAgbGV0IHJlZyA9IC9cXFxcXFxcXC5odG1sfFxcXFxcXFxcLmNzc3xcXFxcXFxcXC5qcy87XFxcXG4gICAgZm9yIChsZXQgayBpbiB1cmxzKSB7XFxcXG4gICAgICAgIGlmICghcmVnLnRlc3QodXJsc1trXSkgJiYgdXJsc1trXS5tYXRjaCgvXFxcXFxcXFwubXA0fFxcXFxcXFxcLm0zdTgvKSkge1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2codXJsc1trXSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcXFxcXCJcXFxcXFxcIikpICsgXFxcXFxcXCIjaWdub3JlSW1nPXRydWUjXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59KTtcXFxcblxcXFxubGV0IHdlYiA9IGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcXFxcXCIxXFxcXFxcXCI7XFxcXG5cXFxcbmZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgIGxldCB0ID0gaXQudGV4dDtcXFxcbiAgICBpZiAoIWl0LmhyZWYgfHwgaXQuaHJlZiA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIGNvbnRpbnVlO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgcHJlID0gaSA9PSAwID8gbnVsbCA6IGFycltpIC0gMV07XFxcXG4gICAgbGV0IG5leHQgPSBpID09IChhcnIubGVuZ3RoIC0gMSkgPyBudWxsIDogYXJyW2kgKyAxXTtcXFxcbiAgICBpZiAoaXNDaGFwdGVyKGl0LCBwcmUsIG5leHQpKSB7XFxcXG4gICAgICAgIGlmICh3ZWIpIHtcXFxcbiAgICAgICAgICAgIHZhciB1cmx4ID0gXFxcXFxcXCJ3ZWJSdWxlOi8vXFxcXFxcXCIgKyBpdC5ocmVmICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBfd2ViO1xcXFxuICAgICAgICAgICAgdmFyIGV4dHJheCA9IHtcXFxcbiAgICAgICAgICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxcXG4gICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycubTRhJywgJy5tcDMnLCAnLmZsdicsICcuYXZpJywgJy4zZ3AnLCAnLm1wZWcnLCAnLndtdicsICcubW92JywgJy5ybXZiJywgJy5naWYnLCAnLmpwZWcnLCAnLnBuZycsICcuaWNvJywgJy5zdmcnXVxcXFxuICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciB1cmx4ID0gXFxcXFxcXCJ2aWRlbzovL1xcXFxcXFwiICsgaXQuaHJlZjtcXFxcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWZcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiB0LFxcXFxuICAgICAgICAgICAgdXJsOiB1cmx4LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8zXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYTogZXh0cmF4XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbn1cXFxcbmlmIChkLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgLy/ljLnphY3lpLHotKVcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwiZmxvYXQmJjEwMCVcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGNhbkJhY2s6IHRydWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIHRvYXN0KFxcXFxcXFwiQUnljLnphY3lpLHotKXvvIzlt7Lkvb/nlKhYNeWKoOi9vVxcXFxcXFwiKTtcXFxcbiAgICBzZXRSZXN1bHQoZCk7XFxcXG59IGVsc2Uge1xcXFxuICAgIC8v5Li657q/6Lev5Yqg5YiG5Ymy57q/XFxcXG4gICAgbGV0IGQyID0gW107XFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgIGQyLnB1c2goZFtpXSk7XFxcXG4gICAgICAgIGlmIChpIDwgZC5sZW5ndGggLSAxKSB7XFxcXG4gICAgICAgICAgICBsZXQgaXQgPSBkW2ldO1xcXFxuICAgICAgICAgICAgbGV0IHQxID0gcGFyc2VJbnQoY2xlYXJUZXh0KGl0LnRpdGxlKSk7XFxcXG4gICAgICAgICAgICBsZXQgbmV4dCA9IGRbaSArIDFdO1xcXFxuICAgICAgICAgICAgbGV0IHQyID0gcGFyc2VJbnQoY2xlYXJUZXh0KG5leHQudGl0bGUpKTtcXFxcbiAgICAgICAgICAgIGlmICh0MiAtIHQxID4gMSB8fCB0MSAtIHQyID4gMSkge1xcXFxuICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJiaWdfYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJsaW5lX2JsYW5rXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBkMi5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxuICAgIHNldFJlc3VsdChkMik7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMVxcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLmtYvor5VcXFwiLFxcXCJwYXRoXFxcIjpcXFwic1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcXFxcXCJ1XFxcXFxcXCIpKTtcXFxcbmxvZyh1cmwpO1xcXFxubGV0IGtleSA9IGdldFBhcmFtKFxcXFxcXFwia2V5XFxcXFxcXCIpO1xcXFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcXFxcXCIpO1xcXFxuc2V0UmVzdWx0KHNwKHVybCwga2V5LCBcXFxcXFxcIuaQnOe0oua1i+ivlVxcXFxcXFwiKSk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6IGa5ZCI5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInByb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9IFtdO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcXFxcXCIsXFxcXG4gICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBhZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIik7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJzb1xcXFxcXFwiKTtcXFxcbiAgICB9KSk7XFxcXG59XFxcXG5cXFxcbmxldCBzID0gZ2V0TXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG5sZXQgciA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG5pZiAocyAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIGxvYWRcXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFxcXFxcIik7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgd3JhcFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0YSA9IGxvYWQocCwgciAhPSBcXFxcXFxcIlxcXFxcXFwiID8gciA6IG51bGwpO1xcXFxuXFxcXG4gICAgbGV0IHBhZ2VpZCA9IE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcIi1wYWdlXFxcXFxcXCIgKyBwO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgcCArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFxcXFxcIiArIGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICBsb2coZGF0YS5sZW5ndGgpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFxcXFxcIlxcXFxcXFwiID09IHIgPyAxIDogcDtcXFxcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcXFxuICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcInJ1bGVAXFxcXFxcXCIgKyBpdC5uYW1lXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcXFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJsaXN0ZW5lcjogXFxcXFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcXFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcChpdC50aXRsZSwgcyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogaXQuZXh0cmFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcXFxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcXFxcXCIvXFxcXFxcXCIgKyBwYXJhbS5hbGwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBwYXJhbToge1xcXFxuICAgICAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICAgICAgaTogMCxcXFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgbG9hZFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0YSA9IGxvYWQoLTEsIG51bGwpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hbmFnZVxcXFxcXFwiKShkLCBkYXRhLm1hcChpdCA9PiBpdC5uYW1lKSk7XFxcXG4gICAgICAgIGZvciAobGV0IGl0IG9mIGRhdGEpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcInNlbGVjdDovL1xcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLor7fpgInmi6nmk43kvZxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sOiAxLFxcXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBbXFxcXFxcXCLorr/pl67pppbpobVcXFxcXFxcIiwgXFxcXFxcXCLmkJzntKLmraTnq5lcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFxcXFxcIuiuv+mXrummlumhtVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gdXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIng1Oi8vXFxcXFxcXCIgKyBnZXRIb21lKHVybClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NpbmdsZXNcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9LCBpdC51cmwpXFxcXG4gICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXQubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuemgeeUqFxcXFxcXFwiICsgaXQubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIua4qemmqOaPkOekulxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcXFxcXFxcIuehruiupOWIoOmZpOemgeeUqFxcXFxcXFwiICsgbmFtZSArIFxcXFxcXFwi5ZCX77yfXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG5hbWUsIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhP3J1bGU9XFxcXFxcXCIgKyBydWxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGUobmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9PS1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCBNWV9SVUxFLnRpdGxlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXQubmFtZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6K6/6Zeu6aaW6aG1XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogXFxcXFxcXCIneDU6Ly9cXFxcXFxcIiArIGdldEhvbWUoaXQudXJsKSArIFxcXFxcXFwiJ1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0ouatpOa6kFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6IFxcXFxcXFwiJ2hpa2VyOi8vcGFnZS9zaW5nbGVzJ1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmlbDmja5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGF0YVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIvL+W5tuWPkeinhOWImeaVsFxcXFxubGV0IHNpemUwID0gMTA7XFxcXG5sZXQgcnVsZXNUZXh0MCA9IGDnqIDppa1AaHR0cHM6Ly93d3cueGlmYW55cy5jb20veWluZ3BpYW5zZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7ovr7pvp9AaHR0cHM6Ly93d3cuZGFkYWd1aS5tZS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbuWfjuW4gkBodHRwczovL3d3dy5jaXR5ZHkuY29tL3NlYXJjaC5odG1sP3dkPSoqXFxcXG5saWJ2aW9AaHR0cHM6Ly93d3cubGlidmlvLm1lL3NlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcXFxu5paw6KeGQGh0dHBzOi8vd3d3LjYwODBkeTEuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbueci+eci3lAaHR0cHM6Ly93d3cua2tkeS5saXZlL3ZvZC1zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7ppa3lm6JAaHR0cHM6Ly93d3cuZmFudHVhbmhkLmNvbS9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7lhY3nmoRAaHR0cHM6Ly93d3cuZnJlZW9rLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7niZvpqaxAaHR0cHM6Ly93d3cubml1bWF0di5jYy92b2RzZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7lhY3otLlAaHR0cHM6Ly93d3cudGhlZnJlZS52aXAvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu6I6r5omO5YWUQGh0dHBzOi8vd3d3Lm1vemhhdHUuY29tL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9KipcXFxcbumcuembs0BodHRwczovL3BseWluZ3NoaS5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu5Y6C6ZW/QGh0dHBzOi8vd3d3LmN6c3BwLmNvbS94c3NlYXJjaD9xPSoqXFxcXG5WT0ZAaHR0cHM6Ly93d3cudm9mbGl4LmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7nlLXlvbFAaHR0cHM6Ly93d3cuYXBwbW92aWUuY2MvaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7ov73liadAaHR0cDovL3pqZHIudmlwL3ZvZC9zZWFyY2gvd2QvKiouaHRtbFxcXFxu55av54uXQGh0dHBzOi8vbS5mZW5nZ291ZHkzLmNvbS9pbmRleC5waHA/cz12b2Qtc2VhcmNoLW5hbWUmd2Q9KipcXFxcbuWcqOe6v0BodHRwczovL3p4emoudmlwL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcXFxu5LiD5LiDQGh0dHA6Ly9hYWFzb2ZhLmNvbS9zZWFyY2gucGhwXFxcXG7ljJflt51AaHR0cHM6Ly93d3cuYmN3emcuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLz93ZD0qKlxcXFxuRUZAaHR0cHM6Ly93d3cucGlsaTUuY24vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7lvbHlrrZAaHR0cDovL3lzemp2aXAuY29tL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9KipcXFxcbuS6lOS6lEBodHRwczovLzU1NWR5LmNjL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbua4o+a8q0BodHRwczovL3d3dy5kbTIwMjIuY29tL3ZvZHNlYXJjaC5odG1sP3dkPSoqXFxcXG7lnKjlrrZAaHR0cHM6Ly96eHpqLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbnBpYeW6k0BodHRwczovL20ucGlha3UuY2Mvcy8tLS0tLS0tLS0tLS0tLz93ZD0qKlxcXFxu5p6B5ZOBQGh0dHBzOi8vd3d3LmpweXMubWUvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu6Im+6L+qQGh0dHBzOi8vYWlkaS50di92c2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7kuZ3lt55AaHR0cDovL3d3dy5qaXV6aG91OTExLmNvbS9zZWFyY2gucGhwP3NlYXJjaHdvcmQ9KipcXFxcbuWNgeWNg0BodHRwOi8vd3d3LnFpYW5zaGlob3VzZS5jb20vc3JoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu6bqm54mHQGh0dHA6Ly9tLmx5MzY4LmNvbS9pbmRleC5waHA/cz12b2QtbV9zLW5hbWUmd2Q9KipcXFxcbuengeS6ukBodHRwczovL3NvdW1rLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7mmJ/ovrBAaHR0cDovL3d3dy5xaGRkai5jb20uY24veGN5eXNlYXJjaC8qKi0tLS0tLS0tLS0tLS0uaHRtbFxcXFxuQ29rZXZZQGh0dHBzOi8vY29rZW12Lm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbueIseeci3lAaHR0cHM6Ly9pa2FuNi52aXAvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0vP3dkPSoqJnN1Ym1pdD1cXFxcbuW5sumlrXB5QGh0dHBzOi8vd3d3LmdmeXN5czEuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbuWkqeepunlAaHR0cDovL3Rrem5wLmNvbS92b2RzZWFyY2guaHRtbD93ZD0qKlxcXFxu6JOd5YWJQGh0dHBzOi8vd3d3LmxneXkuY2Mvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu5L2O56uvQGh0dHBzOi8vZGR5cy50di8/cz0qKiZwb3N0X3R5cGU9cG9zdFxcXFxu5Yqq5YqqQGh0dHBzOi8vd3d3Lm51bnV5eTMub3JnL3NvLyoqLSoqLS0uaHRtbGA7XFxcXG5sZXQgcnVsZXNUZXh0ID0gZ2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIHJ1bGVzVGV4dDApO1xcXFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcXFxcXCIpO1xcXFxucnVsZXMgPSBydWxlc1RleHQuc3BsaXQoXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIilcXFxcbiAgICAuZmlsdGVyKGl0ID0+IGl0LmluY2x1ZGVzKFxcXFxcXFwiQFxcXFxcXFwiKSlcXFxcbiAgICAubWFwKHJ1bGUgPT4ge1xcXFxuICAgICAgICBsZXQgcyA9IHJ1bGUuc3BsaXQoXFxcXFxcXCJAXFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgbmFtZTogc1swXSxcXFxcbiAgICAgICAgICAgIGZpbmQ6IGZ1bmN0aW9uKGtleSwgcGFnZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBzcChzWzFdLCBrZXksIHNbMF0pO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHVybDogc1sxXVxcXFxuICAgICAgICB9O1xcXFxuICAgIH0pO1xcXFxuXFxcXG5mdW5jdGlvbiBsb2FkKHBhZ2UsIHJ1bGUpIHtcXFxcbiAgICBsZXQgc2l6ZSA9IHBhZ2UgPD0gMCA/IHJ1bGVzLmxlbmd0aCA6IHNpemUwO1xcXFxuICAgIHBhZ2UgPSBwYWdlIDw9IDAgPyAxIDogcGFnZTtcXFxcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXFxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcXFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUgJiYgaS5wYWdlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXFxcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxcXG4gICAgICAgIHJldHVybiBbXTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IGxlbiA9IHNpemU7XFxcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxcXG4gICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBydWxlcy5zbGljZShzdGFydCwgc3RhcnQgKyBsZW4pO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBhZGRSdWxlKG5hbWUsIHN1cmwpIHtcXFxcbiAgICBzZXRJdGVtKFxcXFxcXFwicnVsZXNcXFxcXFxcIiwgcnVsZXNUZXh0ICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIkBcXFxcXFxcIiArIHN1cmwpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBhZGRBbGwoaW5wdXQpIHtcXFxcbiAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHJldHVybiAwO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgYXJyID0gaW5wdXQuc3BsaXQoXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIilcXFxcbiAgICAgICAgLmZpbHRlcihpdCA9PiBpdC5pbmNsdWRlcyhcXFxcXFxcIkBcXFxcXFxcIikpXFxcXG4gICAgICAgIC5tYXAocnVsZSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgcyA9IHJ1bGUuc3BsaXQoXFxcXFxcXCJAXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICBuYW1lOiBzWzBdLFxcXFxuICAgICAgICAgICAgICAgIHVybDogc1sxXVxcXFxuICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgbGV0IGV4aXN0ID0gcnVsZXMubWFwKGl0ID0+IGl0LnVybCk7XFxcXG4gICAgbGV0IGMgPSAwO1xcXFxuICAgIGZvciAobGV0IGl0IG9mIGFycikge1xcXFxuICAgICAgICBpZiAoIWV4aXN0LmluY2x1ZGVzKGl0LnVybCkpIHtcXFxcbiAgICAgICAgICAgIHJ1bGVzVGV4dCA9IHJ1bGVzVGV4dCArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyBpdC5uYW1lICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBpdC51cmw7XFxcXG4gICAgICAgICAgICBjKys7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgc2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIHJ1bGVzVGV4dCk7XFxcXG4gICAgcmV0dXJuIGM7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIHJlbW92ZVJ1bGUobmFtZSkge1xcXFxuICAgIGxldCBuZXdUID0gcnVsZXNUZXh0LnNwbGl0KFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpXFxcXG4gICAgICAgIC5maWx0ZXIoaXQgPT4gaXQuaW5kZXhPZihuYW1lICsgXFxcXFxcXCJAXFxcXFxcXCIpIDwgMClcXFxcbiAgICAgICAgLmpvaW4oXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIik7XFxcXG4gICAgc2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIG5ld1QpO1xcXFxufVxcXFxuXFxcXG4kLmV4cG9ydHMgPSB7XFxcXG4gICAgbG9hZDogbG9hZCxcXFxcbiAgICBhZGRSdWxlOiBhZGRSdWxlLFxcXFxuICAgIHJlbW92ZVJ1bGU6IHJlbW92ZVJ1bGUsXFxcXG4gICAgYWRkQWxsOiBhZGRBbGxcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLop6PmnpBcXFwiLFxcXCJwYXRoXFxcIjpcXFwic3BcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gc2VhcmNoKHVybCwga2V5LCBydWxlKSB7XFxcXG4gICAgbGV0IGQgPSBbXTtcXFxcbiAgICBsZXQgaHRtbCA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgaWYgKHVybC5pbmNsdWRlcyhcXFxcXFxcIioqXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIC8vZ2V06K+35rGCXFxcXG4gICAgICAgIGxldCBvbGQgPSB1cmw7XFxcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXFxcXFwiKipcXFxcXFxcIiwga2V5KTtcXFxcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsKTtcXFxcbiAgICAgICAgLy/oh6rliqjov4fpqozor4HnoIHlkozpopHnuYHorr/pl67pmZDliLZcXFxcbiAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgIGNoZWNrLCB0ZXN0XFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UveXptXFxcXFxcXCIpO1xcXFxuICAgICAgICBpZiAoY2hlY2sodXJsLCBodG1sLCBkKSkge1xcXFxuICAgICAgICAgICAgbG9nKFxcXFxcXFwi6YeN6K+V5LqGXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogdXJsXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7ICAgICAgICAgICBcXFxcbiAgICAgICAgfSAgICAgICAgIFxcXFxuICAgICAgICB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIC8v6Ieq5Yqo6K+G5YircG9zdOivt+axglxcXFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcXFxuICAgICAgICBsZXQgZm9ybSA9IHBkZmgoaHRtbCwgXFxcXFxcXCJib2R5JiZmb3JtJiZIdG1sXFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgYWN0aW9uID0gcGQoaHRtbCwgXFxcXFxcXCJmb3JtJiZhY3Rpb25cXFxcXFxcIiwgdXJsKTtcXFxcbiAgICAgICAgbGV0IGlucHV0cyA9IHBkZmEoaHRtbCwgXFxcXFxcXCJib2R5JiZmb3JtJiZpbnB1dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IGJvZHkgPSB7fTtcXFxcbiAgICAgICAgZm9yIChsZXQgaXQgb2YgaW5wdXRzKSB7XFxcXG4gICAgICAgICAgICBsZXQgbmFtZSA9IHBkZmgoaXQsIFxcXFxcXFwiaW5wdXQmJm5hbWVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAobmFtZSAmJiBuYW1lICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBwZGZoKGl0LCBcXFxcXFxcImlucHV0JiZ2YWx1ZVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBib2R5W25hbWVdID0gdmFsdWUgfHwga2V5O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGh0bWwgPSBwb3N0KGFjdGlvbiwge1xcXFxuICAgICAgICAgICAgYm9keTogYm9keVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBsZXQgYWxpc3QgPSBwZGZhKGh0bWwsIFxcXFxcXFwiYm9keSYmYVxcXFxcXFwiKTtcXFxcbiAgICBsZXQgYXJyID0gYWxpc3QubWFwKGl0ID0+IHtcXFxcbiAgICAgICAgbGV0IHQgPSBwZGZoKGl0LCBcXFxcXFxcImEmJlRleHRcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCB0MiA9IHBkZmgoaXQsIFxcXFxcXFwiYSYmdGl0bGVcXFxcXFxcIik7XFxcXG4gICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAvL2h0bWw6IGl0LFxcXFxuICAgICAgICAgICAgdGV4dDogdDIgJiYgdDIuaW5jbHVkZXMoa2V5KSA/IHQyIDogdCxcXFxcbiAgICAgICAgICAgIGhyZWY6IHBkKGl0LCBcXFxcXFxcImEmJmhyZWZcXFxcXFxcIiwgdXJsKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBpc1Jlc3VsdChpdCkge1xcXFxuICAgICAgICBpdCA9IGl0LnRleHQgfHwgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGl0ID09IFxcXFxcXFwiXFxcXFxcXCIgfHwgaXQubWF0Y2goL+aQnOe0onznu5PmnpwvKSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGl0LmluY2x1ZGVzKGtleSk7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICBsZXQgdCA9IGl0LnRleHQ7XFxcXG4gICAgICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChpc1Jlc3VsdChpdCkpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9wP3U9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUoaXQuaHJlZiksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGQ7XFxcXG59XFxcXG4kLmV4cG9ydHMgPSBzZWFyY2g7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5aKe5YigXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hbmFnZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMgPSBmdW5jdGlvbihkLCBuYW1lcykge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIkFJ5oqA5pyvXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJjb25maXJtOi8v5Z+65LqOQUnor4bniYfoh6rliqjliIbmnpDmupDnoIHmioDmnK/vvIzku6PnoIHlrozlhajlvIDmupDvvIzmlbDmja7mnaXmupDkuo7ljp/nvZHnq5nvvIzova/ku7blkozop4TliJnkuI3mj5Dkvpvku7vkvZXlhoXlrrkuanM6JydcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIlxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcXFxcXCIwXFxcXFxcXCIgPyBcXFxcXFxcIuinhumikeWXheaOolxcXFxcXFwiIDogXFxcXFxcXCJXZWLpgJrlhY1cXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcXFxcXCIwXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCd3ZWInLCAnMScpXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3dlYicsICcwJylcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiICsgXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKChycikgPT4ge1xcXFxuICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKFxcXFxcXFwiYWlhZGRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBhZGRJdGVtQWZ0ZXIocnIgKyBcXFxcXFxcImFpc2RlbFxcXFxcXFwiLCBbe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXnvZHnq5nlkI3np7BcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRNeVZhcignbmFtZScsIGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFxcXFxcImFpYWRkXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXnvZHnq5nmkJzntKLlnLDlnYBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRNeVZhcignc3VybCcsIGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFxcXFxcImFpYWRkXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmj5DkuqTkv53lrZhcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VybCA9IGdldE15VmFyKFxcXFxcXFwic3VybFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0TXlWYXIoXFxcXFxcXCJuYW1lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cmwgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBuYW1lID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ivt+i+k+WFpeWujOaVtOWGheWuuVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGRlY29kZVVSSUNvbXBvbmVudChzdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByLnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIltcXFxcXFxcXHU0ZTAwLVxcXFxcXFxcdTlmYTVdK1xcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiKipcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJ1bGVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJ1bGUobmFtZSwgcik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7Lkv53lrZhcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXFxcXFwiYWlhZGRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgXSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiIC0gXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJzZWxlY3Q6Ly9cXFxcXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIG9wdGlvbnM6IG5hbWVzLFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE56uZ54K5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZVxcXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICByZW1vdmVSdWxlKGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vT0tcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oaX77iPXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIua4qemmqOaPkOekulxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXFxcXFwi56Gu5a6a5a+85Ye65omA5pyJ5pWw5o2u5ZCX77yf77yI5a+85Ye65ZCO5Y+v5Lul54K55Ye75peB6L6555qE5a+85YWl5oyJ6ZKu5om56YeP5a+85YWl77yJXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBsb2FkKC0xKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHMgPSBkYXRhLm1hcChpdCA9PiBpdC5uYW1lICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBpdC51cmwpLmpvaW4oXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImNvcHk6Ly9cXFxcXFxcIiArIHNcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oaY77iPXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIuivt+i+k+WFpeimgeaJuemHj+WvvOWFpeeahOaVsOaNrlxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgIGFkZEFsbFxcXFxuICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgbGV0IGNvdW50ID0gYWRkQWxsKGlucHV0KTtcXFxcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL1xcXFxcXFwiICsgKGNvdW50ID4gMCA/IFxcXFxcXFwi5oiQ5Yqf5a+85YWlXFxcXFxcXCIgKyBjb3VudCArIFxcXFxcXFwi5p2h5pWw5o2uXFxcXFxcXCIgOiBcXFxcXFxcIuS4gOadoeS5n+ayoeWvvOWFpVxcXFxcXFwiKVxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIixcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJibGFua19ibG9ja1xcXFxcXFwiLFxcXFxuICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcImFpc2RlbFxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcblxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIumqjOivgeeggVxcXCIsXFxcInBhdGhcXFwiOlxcXCJ5em1cXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gY2hlY2sodXJsLCBodG1sLCBkKSB7XFxcXG4gICAgbGV0IHJlbG9hZCA9IGZhbHNlO1xcXFxuICAgIGlmICgv6aqM6K+B56CBfOezu+e7n+WuieWFqOmqjOivgS8udGVzdChodG1sKSkge1xcXFxuICAgICAgICBsZXQgaGVhZGVycyA9IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBNT0JJTEVfVUEsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogdXJsXFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIE1ZX0hPTUUgPSBnZXRIb21lKHVybCk7XFxcXG4gICAgICAgIGxldCBzc3l6ID0gJ1Rsb0dubmlrVGhyZnMvNWZETmxrNUNTc2JhR3RBSDdXL3VNWmp1WW9JdXBCNmJDb285Q290TFFIZlBJZEdnYmtieW5LcUwyYVVFMlh5NTU4WDJReEhZdFRVMDl2RCs0b2FDREl1U1pPN254RGJMZlJHZldqN3pxbCt5TWJ2RithSm9EL202UHNmdy9QeVlPQXAvWlZHZHJQemFDQnlmZDBITDVERlZTdytZRjJPQzQwVjhTUDlSeGRGS0tkckJ1UHhDV2R4VUNGckorMWxSeS9UVTNMQzg0QzR4eEVCaGd1ZDdSdEJwMHpaQXJxQkUwNitaM0p0RFAwZUZDei9ENVgwNDA5cVBISzNlMXkvTHVVZ2NjdXhwSG5qWUxFMUdqbFA4d1lBMmhRV2U3eVBuZ2dnUUJIdzMzL2d2YjN0dUNjeEVLVFdnbWFoL1IzMkFIOVpGOGpGN1dlbVQyNmxVaXpWWGUvc3BDZGhEZ0hSL3pVaE9ERDRQTzZnbEk4SlBoZHUrVndmUHlSTEcyRDdDVW8xTDZTSUYrMGZZZjBvVE9XTjEzVVBJVG81K3VaZC9XblFRTFU4Tll4L1dGQ1RoRW5rYnpsbjlZR3Q2MGZSeHNIKzh1TURGZ2FCaUMrejJTcGN4QjlnWjZHWHlwTFNYV2FqK3FFVWJHSktFeCtqSy92NWZucmtJaENkd05ia3A5ZFJrczZkbWxZbEJpZnpvV0Y4Umt1QzNycVB0b1NjQmtNT01adTdHaVZ0b0hFZEhVb3ptblVJZHJVMUxHSXFxOVduRzdYMmEzeUg4czY1bWpMdUxuZDNxMFU4ditMTVBuSEwyL0dqUXVUUUtWaCtSS0VQcUsvSmRyQ2hHTE5yamNIdkxIRGJIRXNockdadVFPZEVwaGJ4L1BraGt2YVl5NEsxTU84NFIxN2d1UnNLcy9WNm5pVVBhTCtYYlE3YzNmcUpTNFZISndsdWRKVERlMDJldWZmR0NtMFBKSVBsQU9nTEhuWDBpekpoQTZxNzM4UjJVd1FjV0JRakp0NzlhRitreXFTZHl0MVFQVlFWamFDM0lwUmY3UGdzRGhFSjdiaTluU2NseUl6Z0o5RENKNFQrOGRHMXhIaEt5WmFzVDdML3g5TGZyMU1nczhuQlpFUjJXOWF4N2lUa05LK1g1QUNVLy9wL1lvUC91QWFuRHRiM0QwaUtVVXVYRkgrSmJiMHgxUDMyMlMydzZCSjQ2bnVOSEJNSFRwVnVXd2haZVp6cmlHaDdxb095d0xXaUV4Qk1LeXhUR0xubUtoN3IwMy95WEtZV0lKbnBCTjJNTXljVkhSWko3UnVtSFY0Q0lzVnJxN2lSUDQ4ODIzUkpWdDlPdHlQN3V1YzN3QkJWM2tjWlV6YmJhWWRXQngxK0F1K09kMnU3bFI2am9PTDgxMG1jSm0vZjdKNVR2R1FQNkhHcGgxWUhIWDRDNzQ1M2E3dVZIcU9neWpqaDVFQmQ3MjBNRUJZMjNjK1RLcS96OVVwV0RET2c0OFpGbndTSWhGcWl0V2RpWmlxc2FZdU4wL1NYd2lLOEVHOWVRMjl1MlhESm9EVzRtbHd0Y1JPN3ZhWDVYY0ZzZ2Y0L21MVTA3bWknO1xcXFxuICAgICAgICBldmFsUHJpdmF0ZUpTKHNzeXopO1xcXFxuXFxcXG4gICAgICAgIGxldCB2Y29kZSA9IGdldFZDb2RlMihNWV9IT01FICsgJy9pbmRleC5waHAvdmVyaWZ5L2luZGV4Lmh0bWw/JywgSlNPTi5zdHJpbmdpZnkoaGVhZGVycyksICdudW0nKTtcXFxcbiAgICAgICAgZmV0Y2goTVlfSE9NRSArIGh0bWwubWF0Y2goL1xcXFxcXFxcL2luZGV4LnBocC4qP3ZlcmlmeT0vKVswXSArIEpTT04ucGFyc2UodmNvZGUpLnJldCwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICByZWxvYWQgPSB0cnVlO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gcmVsb2FkO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpIHtcXFxcbiAgICBpZiAoLzXnp5J86aKR57mBLy50ZXN0KGh0bWwpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+aQnOe0oumcgOmXtOmalDXnp5LvvIzngrnlh7vph43mlrDliqDovb0nLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXFxcXFwiICsgcnVsZSArIFxcXFxcXFwiPC9mb250PlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHVybCwgb2xkLCBrZXksIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgc3AgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBzcChvbGQsIGtleSwgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JhcFxcXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBkKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGl0LnRpdGxlID0gd3JhcChpdC50aXRsZSwga2V5KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHVybCwgZCk7XFxcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vT0tcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0sIHVybCwgb2xkLCBrZXksIHJ1bGUpLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogdXJsXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGNoZWNrOiBjaGVjayxcXFxcbiAgICB0ZXN0OiB0ZXN0XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5bel5YW3XFxcIixcXFwicGF0aFxcXCI6XFxcInRvb2xcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gd3JhcCh0ZXh0LCBzKSB7XFxcXG4gICAgcmV0dXJuIHRleHQuaW5jbHVkZXMoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPyB0ZXh0IDogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKFxcXFxcXFwiPGVtPnw8L2VtPlxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFwiICsgcyArIFxcXFxcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXFxcXFwiKVxcXFxufVxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIHdyYXA6IHdyYXBcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLljZXmkJxcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2luZ2xlc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIHB1dE15VmFyKFxcXFxcXFwic29cXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXlhbPplK7or43vvIzlsL3ph4/lsJHlrZfkuI3opoHlpJrlrZdcXFxcXFxcIixcXFxcbiAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcXFxcXCJzb1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgIH1cXFxcbn0pO1xcXFxubGV0IHMgPSBnZXRNeVZhcihcXFxcXFxcInNvXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxubGV0IHIgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuaWYgKHMgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIGxldCBwID0gTVlfUEFHRTtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBsb2FkXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIHdyYXBcXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFxcXFxcIik7XFxcXG4gICAgbGV0IGRhdGEgPSBsb2FkKHAsIE1ZX1BBUkFNUy5SVUxFLm5hbWUpO1xcXFxuICAgIGxldCBhcnIgPSBkYXRhWzBdLmZpbmQocywgcCk7XFxcXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxcXG4gICAgICAgIGl0LnRpdGxlID0gd3JhcChpdC50aXRsZSwgcylcXFxcbiAgICAgICAgZC5wdXNoKGl0KTtcXFxcbiAgICB9XFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57Si6aG16Z2iXFxcIixcXFwicGF0aFxcXCI6XFxcInNvdXBcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuaWYgKE1ZX1BBUkFNUy5rZXkgJiYgZ2V0TXlWYXIoXFxcXFxcXCJ1c2VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIHB1dE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIE1ZX1BBUkFNUy5rZXkpO1xcXFxuICAgIHB1dE15VmFyKFxcXFxcXFwidXNlXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICBhZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJ1c2VcXFxcXFxcIik7XFxcXG4gICAgfSkpO1xcXFxufVxcXFxuJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvcHJvJylcXFwifV1cIn0iLCJ0aXRsZSI6IueogOmlrSJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement