Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@AI聚集@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiQUnogZrpm4YiLCJhdXRob3IiOiIiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyNmeWNsYXNzIyNmeXBhZ2UiLCJ2ZXJzaW9uIjo1NCwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IummlumhtSbosYzosYYm6Iy25p2v54uQJuaQnOeJhybpnZLpuqYm55S15b2x54uXJuiMtuadr+iZjiblnJ/mi6jpvKAm5Yqo5ryr5be05aOrIiwidHlwZSI6InRvb2wiLCJjbGFzc191cmwiOiJob21lJmh0dHBzOi8vd3d3LndhbmRvdS5wcm8vJmh0dHBzOi8vY3VwZm94LmFwcC8maHR0cDovL3NvdXBpYW4uZGUvJmh0dHBzOi8vbS5xbXR2LmFwcC8maHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL3lpbmdrdS8maHR0cHM6Ly93d3cuNzI1OTk4LmNvbS95aW5na3UmaHR0cHM6Ly93d3cudGJzZHkuY29tL20vaW5kZXguaHRtbCZodHRwczovL2RtODQudHYiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBteXVybCA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdO1xuXG5sZXQgYW5jaG9ySWQgPSBteXVybDtcbmxldCBqcyA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS94NWFpXCIpKE1ZX1JVTEUudGl0bGUsIGFuY2hvcklkKTtcblxuZnVuY3Rpb24gbG9hZFVybChteXVybCwgbXlydWxlLCBtKSB7XG4gICAgc2V0UmVzdWx0KFt7XG4gICAgICAgIGNvbF90eXBlOiBcIng1X3dlYnZpZXdfc2luZ2xlXCIsXG4gICAgICAgIHVybDogbXl1cmwsXG4gICAgICAgIGRlc2M6IFwiZmxvYXQmJnRvcFwiLCAgICAgICAgXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBmbG9hdFZpZGVvOiB0cnVlLFxuICAgICAgICAgICAgY2FuQmFjazogdHJ1ZSxcbiAgICAgICAgICAgIHVybEludGVyY2VwdG9yOiAkLnRvU3RyaW5nKChNWV9SVUxFLG1vYmFuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiAn5LqR55uY5rGH5b2xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdXJsICsgJz8/ZnlwYWdlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dClcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihpbnB1dC5zdGFydHNXaXRoKCdodHRwczovL2RtODQudHYvdi8nKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIE1ZX1JVTEUsbW9iYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1PSdoaWtlcjovL2VtcHR5P3U9JyArIHVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1PW1vYmFuPT0nMCc/dTp1KycjaW1tZXJzaXZlVGhlbWUjJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiBNWV9SVUxFLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2x54mH6K+m5oOFJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogTVlfUlVMRS5ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVSdWxlOiBNWV9SVUxFLnByZVJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXM6IE1ZX1JVTEUucGFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRSdWxlOiBNWV9SVUxFLmRldGFpbF9maW5kX3J1bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQsIE1ZX1JVTEUsbW9iYW4pXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKCdodHRwczovL3d3dy5xaW1haXR2LmNvbS9pbmRleC5waHA/cycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gZmV0Y2goaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFwiYm9keSYmaWZyYW1lXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwZGZoKGFyclswXSwgJ2lmcmFtZSYmc3JjJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIE1ZX1JVTEUsbW9iYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdT0naGlrZXI6Ly9lbXB0eT91PScgKyB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdT1tb2Jhbj09JzAnP3U6dSsnI2ltbWVyc2l2ZVRoZW1lIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiBNWV9SVUxFLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9seeJh+ivpuaDhScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiBNWV9SVUxFLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVSdWxlOiBNWV9SVUxFLnByZVJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRSdWxlOiBNWV9SVUxFLmRldGFpbF9maW5kX3J1bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIE1ZX1JVTEUsbW9iYW4pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dC5zdGFydHNXaXRoKCdodHRwczovL2RtODQudHYnKSAmJiAhaW5wdXQuc3RhcnRzV2l0aChcImh0dHBzOi8vY3VwZm94LmFwcC9cIikgJiYgIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovLzUxc291anUuY29tL1wiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaW5wdXQuc3RhcnRzV2l0aChcImh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9cIikgJiYgIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovL3d3dy53YW5kb3UucHJvL1wiKSAmJiAhaW5wdXQuc3RhcnRzV2l0aChcImh0dHA6Ly9zb3VwaWFuLnh5ei9cIikgJiYgIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovL3d3dy5xaW1haXR2LmNvbS9cIikgJiYgIVxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5zdGFydHNXaXRoKFwiaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS9cIikgJiYgIWlucHV0LmluY2x1ZGVzKFwic2VhcmNoXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIE1ZX1JVTEUsbW9iYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1PSdoaWtlcjovL2VtcHR5P3U9JyArIHVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1PW1vYmFuPT0nMCc/dTp1KycjaW1tZXJzaXZlVGhlbWUjJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiBNWV9SVUxFLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2x54mH6K+m5oOFJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogTVlfUlVMRS5ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVSdWxlOiBNWV9SVUxFLnByZVJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXM6IE1ZX1JVTEUucGFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRSdWxlOiBNWV9SVUxFLmRldGFpbF9maW5kX3J1bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQsIE1ZX1JVTEUsbW9iYW4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgTVlfUlVMRSxnZXRJdGVtKCdhaScsJzAnKSksXG4gICAgICAgICAgICBqczoganMsXG4gICAgICAgIH1cbiAgICB9XSk7XG59XG5cbmlmIChteXVybCA9PSAnaG9tZScpIHtcbiAgICByZWZyZXNoWDVEZXNjKCcwJylcbiAgICAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9wcm8nKVxufSBlbHNlIHtcbiAgICBsb2FkVXJsKG15dXJsLCBNWV9SVUxFKTtcbn0iLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjKioiLCJncm91cCI6IjPig6NBSSIsInNlYXJjaEZpbmQiOiJqczpcbnZhciBkID0gW107XG5sZXQga2V5ID0gTVlfVVJMLnNwbGl0KFwiIyNcIilbMV07XG5kLnB1c2goe1xuICAgIHRpdGxlOiBcIueCueaIkeW8gOWni+iBmuWQiOaQnOe0olwiICsga2V5LFxuICAgIHVybDogXCJoaWtlcjovL3BhZ2Uvc291cFwiLFxuICAgIGV4dHJhOiB7XG4gICAgICAgIHBhZ2VUaXRsZTogXCLmkJzntKJcIiArIGtleSxcbiAgICAgICAga2V5OiBrZXlcbiAgICB9XG59KTtcblxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoianM6XG5sb2coTVlfVVJMKVxuXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3AnKSkucnVsZSkiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoidmFyIHVhPScnO1xucmVxdWlyZSgnaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvanMv6aKE5aSE55CGLmpzJyk7IiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p+ino+aekFwiLFwicGF0aFwiOlwicFwiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgdXBkYXRlSXRlbSgncGFyc2V0Jywge1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ+WXheaOoicsICfop4bpopHll4XmjqInKSwgICAgICAgIFxcbiAgICB9KTtcXG4gICAgY2xlYXJNeVZhcignd2VidXJsJyk7XFxuICAgIHB1dE15VmFyKCdibScsICcwJyk7XFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJkdW9zZWxlY3RcXFwiLFtdKTtcXG4gICAgLy9iYWNrKGZhbHNlKVxcbn0pKTtcXG5cXG52YXIgQml0VFMgPSBbXTtcXG5cXG4vL3B1dE15VmFyKFxcXCJtdWJhblxcXCIsIHvlkI3np7A6J+aegeWuouW9seinhid9KVxcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvenRvb2xzJykpLnJ1bGUpXFxuXFxudmFyIHVybCA9ICcnO1xcbnZhciBodG1sID0gJyc7XFxuXFxudmFyIGtleXMgPSBNWV9QQVJBTVM7XFxudmFyIGZyb20gPSBrZXlzLmZyb20gIT0gdW5kZWZpbmVkID8ga2V5cy5mcm9tIDogJyc7XFxudmFyIGR0aXRsZSA9IGtleXMucGFnZVRpdGxlICE9IHVuZGVmaW5lZCA/IGtleXMucGFnZVRpdGxlIDogJyc7XFxuXFxuXFxuaWYgKGdldE15VmFyKCd3ZWJ1cmwnLCAnJykgPT0gJycpIHtcXG4gICAgLy9NWV9VUkwgPSBNWV9VUkwucmVwbGFjZSgnI2ltbWVyc2l2ZVRoZW1lIycsICcnKTtcXG4gICAgTVlfVVJMID0gTVlfVVJMLmluY2x1ZGVzKCcjJykgPyBNWV9VUkwuc3BsaXQoJyMnKVswXSA6IE1ZX1VSTDtcXG4gICAgdmFyIHUgPSBnZXRQYXJhbShcXFwidVxcXCIpXFxuICAgIGlmICh1ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgdSA9IE1ZX1VSTFxcbiAgICB9XFxuICAgIGxvZygndTonICsgdSk7XFxuICAgIHVybCA9IGdldFR1cmwodSk7XFxuICAgIC8v6aKE6K+7XFxuICAgIC8vbG9nKCd1cmw6Jyt1cmwpO1xcbiAgICB2YXIgdGVtcCA9IGZldGNoKHVybCk7XFxuICAgIHZhciBhbCA9IHBkZmEodGVtcCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgaWYgKHRlbXAuc2VhcmNoKC93aW5kb3cubG9jYXRpb24uaHJlZi8pICE9IC0xICYmIGFsLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICBNWV9VUkwgPSB1cmw7XFxuICAgICAgICB2YXIgdGUgPSB0ZW1wLnJlcGxhY2UoLy4raHJlZj1cXFwiKC4qPylcXFwiLisvZywgJzxhIGhyZWY9XFxcIiQxXFxcIj48L2E+Jyk7XFxuICAgICAgICB1cmwgPSBwZCh0ZSwgXFxcImEmJmhyZWZcXFwiKTtcXG4gICAgICAgIGxvZygnanPph43lrprlkJE6JyArIHVybCk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBodG1sID0gdGVtcDtcXG4gICAgfVxcblxcbiAgICBwdXRNeVZhcignd2VidXJsJywgdXJsKTtcXG5cXG59IGVsc2Uge1xcbiAgICB1cmwgPSBnZXRNeVZhcignd2VidXJsJyk7XFxufVxcbnZhciBkdXJsID0gdXJsO1xcbmxvZygn5LqM57qn6aG16Z2iOicgKyBkdXJsKTtcXG5cXG5pZiAoZ2V0SXRlbSgnYWknLCAnMCcpID09ICcxJykge1xcbiAgICB2YXIgbGF6eSA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpLm1hdGNoKC9yIHBsYXllcl8uKj89KC4qPyk8LylbMV0pXFxuICAgICAgICAgICAgdmFyIHVybCA9IGh0bWwudXJsXFxuICAgICAgICAgICAgaWYgKGh0bWwuZW5jcnlwdCA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdW5lc2NhcGUodXJsKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZW5jcnlwdCA9PSAnMicpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdW5lc2NhcGUoYmFzZTY0RGVjb2RlKHVybCkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoL20zdTh8bXA0Ly50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndmlkZW86Ly8nICsgaW5wdXRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICd2aWRlbzovLycgKyBpbnB1dFxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICB0cnkge1xcbiAgICAgICAgbG9nKHVybClcXG4gICAgICAgIE1ZX1VSTCA9ICdoaWtlcjovL2VtcHR5IyMnICsgdXJsXFxuICAgICAgICByZXF1aXJlKGNvbmZpZy7oh6rliqjljLnphY0pO1xcbiAgICAgICAg6Ieq5Yqo5LqM57qnKGxhenkpO1xcbiAgICAgICAgcHV0TXlWYXIoJ2JtJywgJzEnKVxcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIHB1dE15VmFyKCdibScsICcwJylcXG4gICAgfVxcbn1cXG5cXG5cXG5sb2coJ+aooeadvzonICsgZ2V0TXlWYXIoJ2JtJywgJzAnKSlcXG5cXG5pZiAoZ2V0TXlWYXIoJ2JtJywgJzAnKSA9PSAnMCcpIHtcXG5cXG4gICAgdmFyIGQgPSBbXTtcXG4gICAgTVlfVVJMID0gdXJsXFxuXFxuICAgIGZ1bmN0aW9uIGdldFRpdGxlKGh0bWwsIHMpIHtcXG4gICAgICAgIHZhciB0aXRsZSA9ICcnO1xcbiAgICAgICAgdmFyIHRpdGxlcyA9IHBkZmEoaHRtbCwgcyk7XFxuICAgICAgICAvL2xvZyh0aXRsZXMpO1xcbiAgICAgICAgaWYgKHRpdGxlcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aXRsZVxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChsZXQgeCBvZiB0aXRsZXMpIHtcXG4gICAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnPGZvbnQnKSkge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBkZmgoeCwgJ2gxLS1mb250JiZUZXh0Jyk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh4LmluY2x1ZGVzKCc8c3BhbicpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gcGRmaCh4LCAnaDEtLXNwYW4mJlRleHQnKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBkZmgoeCwgJ1RleHQnKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRpdGxlICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aXRsZVxcbiAgICB9XFxuXFxuICAgIGlmIChodG1sID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBodG1sID0gZmV0Y2hQQyh1cmwpXFxuICAgIH1cXG5cXG4gICAgbGV0IGFsaXN0ID0gcGRmYShodG1sLCBcXFwiYm9keSYmYVxcXCIpO1xcbiAgICAvKmlmKGh0bWwuc2VhcmNoKC93aW5kb3cubG9jYXRpb24uaHJlZi8pIT0tMSYmYWxpc3QubGVuZ3RoPT0wKXtcXG4gICAgICAgIE1ZX1VSTD11cmw7XFxuICAgIHZhciB0ZW1wPWh0bWwucmVwbGFjZSgvLitocmVmPVxcXCIoLio/KVxcXCIuKy9nLCc8YSBocmVmPVxcXCIkMVxcXCI+PC9hPicpO1xcbiAgICB1cmw9cGQodGVtcCxcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICBsb2coJ2pz6YeN5a6a5ZCROicrdXJsKTtcXG4gICAgcHV0TXlWYXIoJ3dlYnVybCcsIHVybCk7XFxuICAgIGh0bWwgPSBmZXRjaFBDKHVybCk7XFxuICAgIGFsaXN0ID0gcGRmYShodG1sLCBcXFwiYm9keSYmYVxcXCIpO1xcbiAgICB9Ki9cXG5cXG4gICAgbGV0IGFyciA9IGFsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgIC8vaHRtbDogaXQsXFxuICAgICAgICAgICAgdGV4dDogcGRmaChpdCwgXFxcImEmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdCwgXFxcImEmJnRpdGxlXFxcIiksXFxuICAgICAgICAgICAgaHJlZjogcGQoaXQsIFxcXCJhJiZocmVmXFxcIiwgdXJsKVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG5cXG4gICAgdmFyIHRpdGxlID0gZ2V0VGl0bGUoaHRtbCwgJ2JvZHkmJmgxJyk7XFxuICAgIGlmICh0aXRsZSA9PSAnJykge1xcbiAgICAgICAgdGl0bGUgPSBnZXRUaXRsZShodG1sLCBcXFwiYm9keSYmaDNbY2xhc3MqPSd0aXRsZSddXFxcIik7XFxuICAgIH1cXG4gICAgaWYgKHRpdGxlID09ICcnKSB7XFxuICAgICAgICB0aXRsZSA9IGdldFRpdGxlKGh0bWwsIFxcXCJoZWFkJiZ0aXRsZVxcXCIpO1xcbiAgICB9XFxuICAgIGlmIChkdGl0bGUgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHNldFBhZ2VUaXRsZShkdGl0bGUpO1xcbiAgICB9IGVsc2UgaWYgKGdldFBhZ2VUaXRsZSgpLmluY2x1ZGVzKCfor6bmg4UnKSkge1xcbiAgICAgICAgaWYgKHRpdGxlICE9ICcnKSB7XFxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKCctJykpIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5zcGxpdCgnLScpWzBdLnRyaW0oKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzZXRQYWdlVGl0bGUodGl0bGUpXFxuICAgICAgICB9XFxuICAgIH1cXG5cXG5cXG4gICAgLy9sb2coYXJyKTtcXG4gICAgbGV0IGRlYnVnID0gZmFsc2U7XFxuXFxuICAgIGZ1bmN0aW9uIGNsZWFyVGV4dChpdCkge1xcbiAgICAgICAgcmV0dXJuIGl0LnJlcGxhY2UoL+esrHzpm4Z856ugL2csIFxcXCJcXFwiKTtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBpc01vdmllKGl0KSB7XFxuICAgICAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobm9maWxlKGl0KSkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0aXQgPSBpdC50aXRsZSB8fCBcXFwiXFxcIjtcXG4gICAgICAgIGl0ID0gaXQudGV4dCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChpdCA9PSBcXFwiXFxcIiB8fCBpdC5sZW5ndGggPiA4KSB7XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy/mjpLpmaRcXG4gICAgICAgIGxldCByZWcgPSAvXFxcXC586auY5riF55u05pKtfOWGmeecn+aOqOiNkHzlvbHpmaJ85b2x6KeGfOiTneWFieeUteW9sXzpq5jmuIXnlLXlvbF856ys5LiA5a2jfOesrOS6jOWto3znrKzkuInlraN856ys5Zub5a2jfOesrOS6lOWtoy87XFxuICAgICAgICBpZiAodGl0ICE9IFxcXCJcXFwiICYmICF0aXQuaW5jbHVkZXMoaXQpIHx8IHJlZy50ZXN0KGl0KSkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpdC5tYXRjaCgv5Y6f55S7fOWkh+eUqHzok53lhYl86LaF5riFfOmrmOa4hXzmraPniYd86Z+p54mIfDRLfDRrfDEwODBQfDcyMFB8VEN8SER8QkR85Lit5a2XLylcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBub3RDaGFwdGVyKGl0KSB7XFxuICAgICAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpdC50ZXh0Lm1hdGNoKC9bMC05XVxcXFwuWzAtOV3liIYvKTtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBpc0NoYXB0ZXIoaXQsIHByZSwgbmV4dCkge1xcbiAgICAgICAgaWYgKG5vdENoYXB0ZXIoaXQpKSB7XFxuICAgICAgICAgICAgLy/kvJjlhYjmjpLpmaRcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICAvL+WIpOaWreaYr+S4jeaYr+eUteW9sVxcbiAgICAgICAgaWYgKGlzTW92aWUoaXQpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaXNDaGFwdGVyMChpdCwgcHJlKSB8fCBpc0NoYXB0ZXIwKGl0LCBuZXh0KTtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBnZXRDaGFwdGVyTnVtKGl0KSB7XFxuICAgICAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgICAgICByZXR1cm4gLTE7XFxuICAgICAgICB9XFxuICAgICAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaXQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gLTE7XFxuICAgICAgICB9XFxuICAgICAgICBpdCA9IGNsZWFyVGV4dChpdCk7XFxuICAgICAgICBsZXQgcmVnID0gL15bMC05XSokLztcXG4gICAgICAgIGlmICghcmVnLnRlc3QoaXQpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIC0xO1xcbiAgICAgICAgfVxcbiAgICAgICAgaXQgPSBwYXJzZUludChpdCk7XFxuICAgICAgICBpZiAoaXNOYU4oaXQpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIC0xO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGl0ID4gMTkwMCAmJiBpdCA8IDIxMDApIHtcXG4gICAgICAgICAgICByZXR1cm4gLTE7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaXQ7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gaXNDaGFwdGVyMChpdCwgYnJvdGhlcikge1xcbiAgICAgICAgLyppZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coe1xcbiAgICAgICAgICAgICAgICBpdDogaXQsXFxuICAgICAgICAgICAgICAgIGJyb3RoZXI6IGJyb3RoZXJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0qL1xcbiAgICAgICAgaXQgPSBnZXRDaGFwdGVyTnVtKGl0KTtcXG4gICAgICAgIC8vaWYgKGRlYnVnKSBsb2coaXQpO1xcbiAgICAgICAgaWYgKGl0IDwgMCkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIGJyb3RoZXIgPSBnZXRDaGFwdGVyTnVtKGJyb3RoZXIpO1xcbiAgICAgICAgLy9pZiAoZGVidWcpIGxvZyhicm90aGVyKTtcXG4gICAgICAgIGlmIChicm90aGVyIDwgMCkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpdCAtIGJyb3RoZXIgPCAyICYmIGl0IC0gYnJvdGhlciA+IC0yO1xcbiAgICB9XFxuXFxuICAgIGxldCB0ZnB1c2ggPSBnZXRJdGVtKCd3ZWJwdXNoJywgJzAnKTtcXG5cXG4gICAgbGV0IF93ZWIgPSAkLnRvU3RyaW5nKCh0ZnB1c2gpID0+IHtcXG4gICAgICAgIGxldCB1cmxzID0gX2dldFVybHMoKTtcXG4gICAgICAgIGxldCByZWcgPSAvXFxcXC5odG1sfFxcXFwuY3NzfFxcXFwuanMvO1xcbiAgICAgICAgZm9yIChsZXQgayBpbiB1cmxzKSB7XFxuICAgICAgICAgICAgaWYgKCFyZWcudGVzdCh1cmxzW2tdKSAmJiB1cmxzW2tdLm1hdGNoKC9cXFxcLm1wNHxcXFxcLm0zdTgvKSkge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyh1cmxzW2tdKTtcXG4gICAgICAgICAgICAgICAgLy9yZXR1cm4gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKSArIFxcXCIjaWdub3JlSW1nPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgaWYgKHRmcHVzaCA9PSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmeV9icmlkZ2VfYXBwLmdldEhlYWRlclVybCh1cmxzW2tdLnJlcGxhY2UoLy4qP3VybD0vLCBcXFwiXFxcIikpICsgXFxcIiNpZ25vcmVJbWc9dHJ1ZSNcXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBsYXkgPSBmeV9icmlkZ2VfYXBwLmdldEhlYWRlclVybCh1cmxzW2tdLnJlcGxhY2UoLy4qP3VybD0vLCBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9wdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZG9jdW1lbnQudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IHBsYXlcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSwgdGZwdXNoKTtcXG5cXG4gICAgZnVuY3Rpb24gX193ZWIobW9kZSkge1xcbiAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHRmcHVzaCkgPT4ge1xcbiAgICAgICAgICAgIGxldCB1cmxzID0gX2dldFVybHMoKTtcXG4gICAgICAgICAgICBsZXQgcmVnID0gL1xcXFwuaHRtbHxcXFxcLmNzc3xcXFxcLmpzLztcXG4gICAgICAgICAgICBmb3IgKGxldCBrIGluIHVybHMpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCFyZWcudGVzdCh1cmxzW2tdKSAmJiB1cmxzW2tdLm1hdGNoKC9cXFxcLm1wNHxcXFxcLm0zdTgvKSkge1xcbiAgICAgICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2codXJsc1trXSk7XFxuICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBmeV9icmlkZ2VfYXBwLmdldEhlYWRlclVybCh1cmxzW2tdLnJlcGxhY2UoLy4qP3VybD0vLCBcXFwiXFxcIikpICsgXFxcIiNpZ25vcmVJbWc9dHJ1ZSNcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRmcHVzaCA9PSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKSArIFxcXCIjaWdub3JlSW1nPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBsYXkgPSBmeV9icmlkZ2VfYXBwLmdldEhlYWRlclVybCh1cmxzW2tdLnJlcGxhY2UoLy4qP3VybD0vLCBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBkb2N1bWVudC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IHBsYXlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBtb2RlKTtcXG4gICAgfVxcblxcbiAgICAkLmV4dGVuZCh7XFxuICAgICAgICBsd2ViOiBfX3dlYlxcbiAgICB9KVxcblxcbiAgICBsZXQgd2ViID0gZ2V0SXRlbSgnd2ViJywgJzAnKTtcXG4gICAgdmFyIHB1c2h0eXBlID0gWyfliJfooagnLCAn5Y2V6ZuGJ11cXG4gICAgdmFyIHBhcnNldHlwZSA9IFsnV2Vi5ZeF5o6iOjAnLCAn6KeG6aKR5ZeF5o6iOjEnLCAnZG3nm5LlrZA6MiddXFxuICAgIGxvZygn5o6o6YCB57G75Z6LOicgKyBwdXNodHlwZVtwYXJzZUludCh0ZnB1c2gpXSlcXG4gICAgbG9nKCfll4XmjqLnsbvlnos6JyArIHBhcnNldHlwZVtwYXJzZUludCh3ZWIpXS5zcGxpdCgnOicpWzBdKVxcblxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgbGV0IHQgPSBpdC50ZXh0O1xcbiAgICAgICAgaWYgKCFpdC5ocmVmIHx8IGl0LmhyZWYgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBwcmUgPSBpID09IDAgPyBudWxsIDogYXJyW2kgLSAxXTtcXG4gICAgICAgIGxldCBuZXh0ID0gaSA9PSAoYXJyLmxlbmd0aCAtIDEpID8gbnVsbCA6IGFycltpICsgMV07XFxuICAgICAgICBpZiAoaXNDaGFwdGVyKGl0LCBwcmUsIG5leHQpKSB7XFxuICAgICAgICAgICAgaWYgKHRmcHVzaCA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgLyp2YXIgdXJseCA9IFxcXCJ3ZWJSdWxlOi8vXFxcIiArIGl0LmhyZWYgKyBcXFwiQFxcXCIgKyBfd2ViO1xcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmF4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxuICAgICAgICAgICAgICAgICAgICBjbHM6ICdwbGF5cycsXFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5tNGEnLCAnLm1wMycsICcuZmx2JywgJy5hdmknLCAnLjNncCcsICcubXBlZycsICcud212JywgJy5tb3YnLCAnLnJtdmInLCAnLmdpZicsICcuanBlZycsICcucG5nJywgJy5pY28nLCAnLnN2ZyddXFxuICAgICAgICAgICAgICAgIH07Ki9cXG4gICAgICAgICAgICAgICAgdmFyIHVybHggPSAnaGlrZXI6Ly9wYWdlL3B1c2g/JnB1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGdldFBhZ2VUaXRsZSgpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IGl0LnRleHQgKyAnJCcgKyBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRlbnRcXFwiOiBNWV9VUkwudGl0bGUsXFxuICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJheCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh3ZWIgPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdXJseCA9IFxcXCJ3ZWJSdWxlOi8vXFxcIiArIGl0LmhyZWYgKyBcXFwiQFxcXCIgKyBfd2ViO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJheCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLm00YScsICcubXAzJywgJy5mbHYnLCAnLmF2aScsICcuM2dwJywgJy5tcGVnJywgJy53bXYnLCAnLm1vdicsICcucm12YicsICcuZ2lmJywgJy5qcGVnJywgJy5wbmcnLCAnLmljbycsICcuc3ZnJ11cXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2ViID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybHggPSBcXFwidmlkZW86Ly9cXFwiICsgaXQuaHJlZjtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3ZWIgPT0gJzInKSB7XFxuICAgICAgICAgICAgICAgICAgICBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9sYXp5VG9YNT9ydWxlPWRt55uS5a2QJykudmlkZW9YNSgpO1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmx4ID0gaXQuaHJlZiArIGxhenlcXG4gICAgICAgICAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdCxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmx4LFxcbiAgICAgICAgICAgICAgICBwaDogdCArIFxcXCIkXFxcIiArIGl0LmhyZWYsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJheFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmIChkLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAvL+WMuemFjeWksei0pVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcImZsb2F0JiYxMDAlXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBmbG9hdFZpZGVvOiB0cnVlLFxcbiAgICAgICAgICAgICAgICBjYW5CYWNrOiB0cnVlLFxcbiAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbXFxcIi5naWZcXFwiLCBcXFwiL2FkL1xcXCIsIFxcXCJnb29nbGVcXFwiLCBcXFwiL3NoL3RvL1xcXCIsIFxcXCIuR0lGXFxcIl1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHRvYXN0KFxcXCJBSeWMuemFjeWksei0pe+8jOW3suS9v+eUqFg15Yqg6L29XFxcIik7XFxuICAgICAgICBsb2coXFxcIuW9k+WJjemhtemdouWcsOWdgDogXFxcIiArIHVybClcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8v5Li657q/6Lev5Yqg5YiG5Ymy57q/XFxuICAgICAgICBsZXQgZDIgPSBbXTtcXG4gICAgICAgIGxldCBtdGFiID0gW107XFxuXFxuICAgICAgICBkID0gdW5pcXVlKGQpXFxuICAgICAgICAvL2xvZyhCaXRUUylcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGQyLnB1c2goZFtpXSk7XFxuICAgICAgICAgICAgbXRhYi5wdXNoKGRbaV0ucGgpO1xcbiAgICAgICAgICAgIGlmIChpIDwgZC5sZW5ndGggLSAxKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGRbaV07XFxuICAgICAgICAgICAgICAgIGxldCB0MSA9IHBhcnNlSW50KGNsZWFyVGV4dChpdC50aXRsZSkpO1xcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IGRbaSArIDFdO1xcbiAgICAgICAgICAgICAgICBsZXQgdDIgPSBwYXJzZUludChjbGVhclRleHQobmV4dC50aXRsZSkpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIgLSB0MSA+IDEgfHwgdDEgLSB0MiA+IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIG10YWIucHVzaCgnIycpO1xcbiAgICAgICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxldCBwbGF5bCA9IG10YWIuam9pbignIycpLnJlcGxhY2UoLyMjIy9nLCAnJCQkJCQkJyk7XFxuXFxuXFxuICAgICAgICBsZXQgZnJvbSA9IFtdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwbGF5bC5zcGxpdCgnJCQkJykubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICBmcm9tLnB1c2goXFxcIuaSreaUvuWIl+ihqFxcXCIgKyBbaiArIDFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBwdXNoID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZ2V0UGFnZVRpdGxlKCksXFxuICAgICAgICAgICAgXFxcImZyb21cXFwiOiBmcm9tLmpvaW4oJyQkJCcpLFxcbiAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwbGF5bC5yZXBsYWNlKC9cXFxcJi9nLCAn77yG77yGJyksXFxuICAgICAgICAgICAgXFxcImNvbnRlbnRcXFwiOiBNWV9SVUxFLnRpdGxlXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vbG9nKHB1c2gpO1xcbiAgICAgICAgXFxuICAgICAgICB2YXIgdGNvbmZpZz17XFxuICAgICAgICAgICAgbmFtZTpnZXRQYWdlVGl0bGUoKSxcXG4gICAgICAgICAgICBjb250ZW50Ok1ZX1JVTEUudGl0bGVcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGQyLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5o6o6YCB5pys6aG1PT5UVkJveFxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkKHB1c2gpLmxhenlSdWxlKCh0Y29uZmlnKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBkbGlzdCA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJkdW9zZWxlY3RcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYoZGxpc3QubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICB2YXIgcGxheXM9ZGxpc3QubWFwKHg9PngudGl0bGUrXFxcIiRcXFwiK3gudXJsKS5qb2luKFxcXCIjXFxcIik7XFxuICAgICAgICAgICAgICAgIHZhciBkcHVzaCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogdGNvbmZpZy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImZyb21cXFwiOiBcXFwi5pKt5pS+5YiX6KGoXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwbGF5cyxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjb250ZW50XFxcIjogdGNvbmZpZy5jb250ZW50XFxuICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgIC8vbG9nKGRwdXNoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3B1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChkcHVzaCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcXG4gICAgICAgICAgICB9LHRjb25maWcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICBpZDoncHVzaHMnLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgXFxuICAgICAgICBcXG4gICAgICAgIGQyLnVuc2hpZnQoe1xcbiAgICB0aXRsZTogJ+mAieaOqCcsXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBzZXRJdGVtKCd3ZWJwdXNoJywnMCcpO1xcbiAgICAgICAgXFxuICAgICAgICB1cGRhdGVJdGVtKCdzcHVzaCcsIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+WNleaOqCcsXFxuICAgICAgICB9KTtcXG4gICAgICAgIFxcbiAgICAgICAgaWYgKGZpbmRJdGVtKCdkc2VsZWN0JykuZXh0cmEubW9kZSA9PSAnb3BlbicpIHtcXG4gICAgICAgICAgICB0b2FzdCgn6YCJ5o6o5qih5byP5YWz6ZetJyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImR1b3NlbGVjdFxcXCIsIFtdKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZXQgSWRzID0gKGZpbmRJdGVtc0J5Q2xzKCdwbGF5cycpKS5tYXAoaXQgPT4gaXQuZXh0cmEuaWQpO1xcbiAgICAgICAgSWRzLmZvckVhY2goeCA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gZmluZEl0ZW0oeCkudGl0bGU7XFxuXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgIHVybDogJC5tc20odGl0bGUsIHgpLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICB2YXIgdGl0bGUgPSBmaW5kSXRlbSgnZHNlbGVjdCcpLnRpdGxlO1xcbiAgICAgICAgdXBkYXRlSXRlbSgnZHNlbGVjdCcsIHtcXG4gICAgICAgICAgICB0aXRsZTogYOKAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNDY4MkI0XFxcIj5gICsgdGl0bGUsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbW9kZTogJ29wZW4nXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBcXG4gICAgICAgIHVwZGF0ZUl0ZW0oJ3B1c2hzJywge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5o6o6YCB6YCJ5LitPT5UVkJveCcsXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIHRvYXN0KCfpgInmjqjmqKHlvI/lvIDlkK8nKVxcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgaWQ6ICdkc2VsZWN0JyxcXG4gICAgICAgICdtb2RlJzogJ2Nsb3NlJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuXFxuXFxuICAgICAgICBkMi51bnNoaWZ0KHtcXG4gICAgICAgICAgICB0aXRsZTogKGdldEl0ZW0oJ3dlYnB1c2gnLCAnMCcpID09ICcxJyA/ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiIzAwRkYwMFxcXCI+5Y2V5o6oPC9mb250PicgOiAn5Y2V5o6oJyksXFxuICAgICAgICAgICAgdXJsOiBgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6Z2V0SXRlbSgnd2VicHVzaCcsJzAnKT09JzEnP3NldEl0ZW0oJ3dlYnB1c2gnLCcwJyk6c2V0SXRlbSgnd2VicHVzaCcsJzEnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSdgLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICBpZDonc3B1c2gnLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgZDIuc3BsaWNlKDMsIDAsIHtcXG4gICAgICAgICAgICB0aXRsZTogcGFyc2V0eXBlW3BhcnNlSW50KHdlYildLnNwbGl0KCc6JylbMF0sXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGluZikgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnd2VicHVzaCcsICcwJykgPT0gJzEnfHxmaW5kSXRlbSgnZHNlbGVjdCcpLmV4dHJhLm1vZGUgPT0gJ29wZW4nKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Y2V5o6ofOmAieaOqOaooeW8j+W8gOWQr+aXoOazleS/ruaUuSdcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgYWxsX2NvbHMgPSBpbmZcXG4gICAgICAgICAgICAgICAgbGV0IGNvbCA9IHN0b3JhZ2UwLmdldEl0ZW0oJ+WXheaOoicsICdXZWLll4XmjqInKTtcXG4gICAgICAgICAgICAgICAgbGV0IOWXheaOoiA9IGFsbF9jb2xzLm1hcCgoaXQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC5zcGxpdCgnOicpWzBdID09PSBjb2wgPyAn4p6h77iPJyArIGl0IDogaXQ7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBsZXQgdGlwcyA9ICfor7fpgInmi6nll4XmjqLmqKHlvI8nO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCjll4XmjqIsIDEsIHRpcHMpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL+Keoe+4jy9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCfll4XmjqInLCBpbnB1dC5zcGxpdCgnOicpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlID0gaW5wdXQuc3BsaXQoJzonKVsxXVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnd2ViJywgbW9kZSlcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvbGRJZHMgPSAoZmluZEl0ZW1zQnlDbHMoJ3BsYXlzJykpLm1hcChpdCA9PiBpdC5leHRyYS5pZCk7XFxuICAgICAgICAgICAgICAgICAgICBvbGRJZHMuZm9yRWFjaCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJ3ZWJSdWxlOi8vXFxcIiArIHggKyBcXFwiQFxcXCIgKyAkLmx3ZWIoJzAnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5tNGEnLCAnLm1wMycsICcuZmx2JywgJy5hdmknLCAnLjNncCcsICcubXBlZycsICcud212JywgJy5tb3YnLCAnLnJtdmInLCAnLmdpZicsICcuanBlZycsICcucG5nJywgJy5pY28nLCAnLnN2ZyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJ2aWRlbzovL1xcXCIgKyB4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6ICdwbGF5cycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnMicpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHggKyAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2xhenlUb1g1P3J1bGU9ZG3nm5LlrZAnKS52aWRlb1g1KCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgncGFyc2UnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0b3JhZ2UwLmdldEl0ZW0oJ+WXheaOoicsICdXZWLll4XmjqInKSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+WXheaOouaWueW8j+S4ujonICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgcGFyc2V0eXBlKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3BhcnNlJyxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGQyLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPuKaoe+4jycgKyBkdXJsICsgJzwvc21hbGw+JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIHVybDogZHVybCxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgXFxuICAgICAgICBcXG4gICAgICAgIGlmKE1ZX1BBUkFNUy53ZWI9PVxcXCLlk5Tmu7TlvbHop4ZcXFwiKXtcXG4gICAgICAgICAgICBkMi51bnNoaWZ0KHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6J+WTlOa7tOW9seinhicsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICAgICAgICAgIHVybDpcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbHM/cnVsZT3lk5TlmIDlvbHop4YmdXJsPVxcXCIgKyBkdXJsKycjaW1tZXJzaXZlVGhlbWUjJyxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHZhciBqc3I9SlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9ob21lQOWTlOWYgOW9seinhlxcXCIpKS5wcmVSdWxlXFxuICAgICAgICAgICAgZXZhbChqc3IpXFxuICAgICAgICB9XFxuICAgICAgICBcXG4gICAgICAgIFxcbiAgICAgICAgXFxuICAgICAgICB2YXIgZDMgPSBbXTtcXG5pZiAoZ2V0SXRlbSgnYWknLCAnMCcpID09ICcxJykge1xcblxcbiAgICBkMy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBnZXRQYWdlVGl0bGUoKSxcXG4gICAgICAgIGltZzogJ2h0dHBzOi8vcGljMy41OGNkbi5jb20uY24vbm93YXRlci93ZWJpbS9iaWcvbl92MjgxZDYwYmQxMjdlODRjZDI4ODA3ZDUxMTQzZWFhNjFmLmdpZicsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInLFxcbiAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgIGlkOidkMycsXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChkMylcXG59XFxuICAgICAgICBcXG4gICAgICAgIGlmKGZpbmRJdGVtKCdkMycpIT1udWxsKXtcXG4gICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoJ2QzJywgZDIpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICBzZXRSZXN1bHQoZDIpXFxuICAgICAgICB9XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLogZrlkIjmkJzntKJcIixcInBhdGhcIjpcInByb1wiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG5cXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHvCoMKgwqDCoMKgwqDCoFxcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7wqDCoMKgwqDCoFxcbn1cXG5cXG52YXIgaW1ncyA9IFsnaHR0cHM6Ly93d3cud2FuZG91LnByby9mYXZpY29uLmljbycsICdodHRwczovL2JqLmJjZWJvcy5jb20vYmFpZHUtcm1iLXZpZGVvLWNvdmVyLTEvNzRmMTNkMDYyMGY3MmIwMGE0ZTliNjdmM2RhYjk2ZDEucG5nJywgJ2h0dHBzOi8vYmouYmNlYm9zLmNvbS9iYWlkdS1ybWItdmlkZW8tY292ZXItMS83M2I4Y2Y2YWUwNzgzMDNhNTcyZTc2Yzc5ZGQ5M2U3YS5wbmcnLCAnaHR0cHM6Ly9tLnFtdHYuYXBwL2Zhdmljb24ucG5nJywgJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9yZXMvbXJzLzEvaW1nLzk4MzYzNS8yMDIyLzAxLzAxLzEwMS5qcGcnXVxcblxcbnZhciBuYW1lcz1bJ+ixjOixhicsICfojLbmna/ni5AnLCAn5pCc54mHJywgJ+mdkum6picsICflnJ/mi6jpvKAnXTtcXG5cXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIG5hbWVzLm1hcCgoeCwgaSkgPT4ge1xcbiAgICAgICAgdmFyIGl4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3BhZ2VfaW5kZXgnLCAwKTtcXG4gICAgICAgIHZhciB0aXRsZSA9IGl4ID09IGkgPyBg4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9JHtnZXRSYW5nZUNvbG9ycygpfT5gICsgeCArICc8L2ZvbnQ+JyA6IHg7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgICAgICAgICAgaW1nOiBpbWdzW2ldLFxcbiAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3BhZ2VfaW5kZXgnLCBpKVxcbiAgICAgICAgICAgICAgICAvL2NsZWFyTXlWYXIoJ3NvdScpXFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3BhZ2UnKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmiJDlip8nXFxuICAgICAgICAgICAgfSwgaSksXFxuICAgICAgICB9KVxcbiAgICB9KVxcblxcbiAgICB2YXIgd2ViID0gZ2V0SXRlbSgnd2ViJywgJzAnKVxcbiAgICAvL2xvZyh3ZWIpXFxuICAgIHZhciB0aXRsZSA9ICcnXFxuICAgIHN3aXRjaCAod2ViKSB7XFxuICAgICAgICBjYXNlICcwJzpcXG4gICAgICAgICAgICB0aXRsZSA9ICdXZWLll4XmjqInXFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICcxJzpcXG4gICAgICAgICAgICB0aXRsZSA9ICfop4bpopHll4XmjqInXFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICcyJzpcXG4gICAgICAgICAgICB0aXRsZSA9ICdkbeebkuWtkCdcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcbiAgICBzZXRJdGVtKCfll4XmjqInLCB0aXRsZSlcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5o6o6YCBJyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6aG16Z2i5Yqg6L29OlxcXCIgKyBnZXRJdGVtKCdob21lJywgJ+WFsycpLFxcbiAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2hvbWUnLCAn5YWzJykgPT0gJ+WFsycpIHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnaG9tZScsICflvIAnKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2hvbWUnLCAn5YWzJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgd2ViID0gZ2V0SXRlbSgnd2ViJywgJzAnKVxcbiAgICAgICAgICAgIHN3aXRjaCAod2ViKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzAnOlxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnd2ViJywgJzEnKVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOlxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnd2ViJywgJzInKVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzInOlxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnd2ViJywgJzAnKVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6ICdwYXJzZXQnXFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAn5qih5p2/OicgKyAoZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/ICflhbPpl60nIDogJ+W8gOWQrycpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBpZiAoZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJykge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhaScsICcxJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhaScsICcwJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6ICdhaW1iJ1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuXFxuXFxuXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWFs+mUruivje+8jOWwvemHj+WwkeWtl+S4jeimgeWkmuWtl1xcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcigncGFnZScpXFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcImR1cmxcXFwiKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgIH0pKTtcXG5cXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uUmVmcmVzaFxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJkdXJsXFxcIik7XFxuICAgIH0pKTtcXG59XFxuXFxubGV0IHMgPSBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpO1xcbmxldCByID0gXFxcIlxcXCI7XFxuXFxudmFyIGluZGV4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3BhZ2VfaW5kZXgnLCAwKVxcblxcbnRyeSB7XFxuICAgIHN3aXRjaCAocGFyc2VJbnQoaW5kZXgpKSB7XFxuICAgICAgICBjYXNlIDA6XFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS93YW5kb3UnKSkucnVsZSlcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgMTpcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2N1cGZveCcpKS5ydWxlKVxcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAyOlxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2Uvc291cGlhbicpKS5ydWxlKVxcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAzOlxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvcWltYWl0dicpKS5ydWxlKVxcblxcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSA0OlxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvdGJzZHknKSkucnVsZSlcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcbn0gY2F0Y2goZSkge1xcbiAgICAvL3NldEl0ZW0oJ2hvbWUnLCAn5YWzJylcXG4gICAgbGV0IG5leHRpbmRleD0wO1xcbiAgICBpZihpbmRleD40KXtcXG4gICAgICAgIG5leHRpbmRleD0wO1xcbiAgICB9ZWxzZXtcXG4gICAgICAgIG5leHRpbmRleD1pbmRleCsxO1xcbiAgICB9XFxuICAgIHRvYXN0KG5hbWVzW2luZGV4XStg5Y+R55Sf6ZSZ6K+v77yM6ZSZ6K+v5L+h5oGvOiR7ZS5tZXNzYWdlfWApO1xcbiAgICBsb2cobmFtZXNbaW5kZXhdK2Dlj5HnlJ/plJnor6/vvIzplJnor6/kv6Hmga86JHtlLm1lc3NhZ2V9YCk7XFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdwYWdlX2luZGV4JywgbmV4dGluZGV4KTtcXG4gICAgcmVmcmVzaFBhZ2UoKTtcXG59XFxuXFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5bel5YW3XCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCJmdW5jdGlvbiB3cmFwKHRleHQsIHMpIHtcXG4gICAgcmV0dXJuIHRleHQuaW5jbHVkZXMoXFxcIuKAnOKAnOKAneKAnVxcXCIpID8gdGV4dCA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIilcXG59XFxuXFxuZnVuY3Rpb24gd3JhcDEodGV4dCwgcykge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIilcXG59XFxuXFxuZnVuY3Rpb24gcmVtb3ZlaHRtbCh0ZXh0KSB7XFxuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoLzxbXjxdKz8+L2csICcnKVxcbn1cXG5cXG5mdW5jdGlvbiBtZXJnZSh0ZXh0LCBzLCBtKSB7XFxuICAgIGlmIChtID09IDApIHtcXG4gICAgICAgIHRleHQgPSAn4oCc4oCc4oCd4oCdJyArIHRleHQgKyAnLScgKyBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjRkY1NzMzXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCJcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHRleHQgPSB0ZXh0ICsgJy0nICsgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogI0ZGNTczM1xcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiXFxuICAgIH1cXG4gICAgcmV0dXJuIHRleHRcXG59XFxuXFxuZnVuY3Rpb24gc2V0UGFnZUQoZCwgcGFnZSwgdGl0bGVzLCBjb2xvcikge1xcbiAgICB2YXIgcGFnZWQgPSBnZXRNeVZhcihcXFwicGFnZWRcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICB0aXRsZXMubWFwKCh4LCBpKSA9PiB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBOdW1iZXIocGFnZWQpID09IGkgPyBcXFwi4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9XFxcIiArIGNvbG9yICsgXFxcIj5cXFwiICsgeCArIFxcXCI8L2ZvbnQ+PC9iPlxcXCIgOiBgJHt4fWA7XFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICAgICAgICAgIHVybDogaSArICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBhZ2VkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIGdldE15VmFyKFxcXCJwYWdlZFxcXCIsIFxcXCIwXFxcIilcXG59XFxuXFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICB3cmFwOiB3cmFwLFxcbiAgICB3cmFwMTogd3JhcDEsXFxuICAgIHJlaHRtbDogcmVtb3ZlaHRtbCxcXG4gICAgbWVyZ2U6IG1lcmdlLFxcbiAgICBzZXRwYWdlZDogc2V0UGFnZURcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLpobXpnaJcIixcInBhdGhcIjpcInNvdXBcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuaWYgKE1ZX1BBUkFNUy5rZXkgJiYgZ2V0TXlWYXIoXFxcInVzZVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICBwdXRNeVZhcihcXFwic291XFxcIiwgTVlfUEFSQU1TLmtleSk7XFxuICAgIHB1dE15VmFyKFxcXCJ1c2VcXFwiLCBcXFwiMVxcXCIpO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwidXNlXFxcIik7XFxuICAgIH0pKTtcXG59XFxuJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvcHJvJylcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIng1XCIsXCJwYXRoXCI6XCJ4NVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgdXJsOiB1cmwsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICBkZXNjOiBcXFwiZmxvYXQmJjEwMCVcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGZsb2F0VmlkZW86IHRydWUsXFxuICAgICAgICBjYW5CYWNrOiB0cnVlLFxcbiAgICAgICAgYmxvY2tSdWxlczogW1xcXCIuZ2lmXFxcIiwgXFxcIi9hZC9cXFwiLCBcXFwiZ29vZ2xlXFxcIiwgXFxcIi9zaC90by9cXFwiLCBcXFwiLkdJRlxcXCJdXFxuICAgIH1cXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCIzLuaQnOeJh1wiLFwicGF0aFwiOlwic291cGlhblwiLFwicnVsZVwiOlwianM6XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgdmFyIGh0bWwgPSBmZXRjaChgaHR0cDovL3NvdXBpYW4uZGUvc2VhcmNoP2tleT0ke3N9YClcXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYubGlzdC1yb3ctaW5mbycpXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwMVxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBmb3IgKGxldCBpdCBvZiBsaXN0KSB7XFxuICAgICAgICAvL2xvZyhpdClcXG4gICAgICAgIC8vbGV0IG5hbWUgPSBpdC5tb3ZpZV9uYW1lO1xcbiAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCAnaDQmJlRleHQnKTtcXG4gICAgICAgIGxldCB3ZWIgPSBwZGZoKGl0LCAnYSYmdGl0bGUnKS5yZXBsYWNlKG5hbWUsJycpLnRyaW0oKTtcXG4gICAgICAgIFxcbiAgICAgICAgbGV0IGltZyA9IHBkZmgoaXQsICdpbWcmJnNyYycpO1xcbiAgICAgICAgbGV0IHVybCA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICB2YXIgdSA9IFxcXCJoaWtlcjovL3BhZ2UvcD9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZ1PVxcXCIgKyBiYXNlNjRFbmNvZGUodXJsKVxcbiAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogd3JhcDEod2ViKyctJytuYW1lLCBzKSxcXG4gICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIC8vZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuaQnOeJhzwvZm9udD5cXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6bmFtZSxcXG4gICAgICAgICAgICAgICAgd2ViOndlYixcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59IGVsc2Uge1xcblxcbn1cXG5cXG5pZiAoZ2V0SXRlbSgnaG9tZScsICflhbMnKSA9PSAn5byAJykge1xcbiAgICB2YXIgaHRtbCA9IHJlcXVlc3QoJ2h0dHA6Ly9zb3VwaWFuLmRlLycsIHt9KVxcblxcblxcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnNwbGl0KCctJylbMF1cXG4gICAgICAgIHZhciB0ID0gaXRlbS5zcGxpdCgnLScpWzFdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBgYm9keSYmLmxpc3QtaGVhZGVyOm1hdGNoZXMoJHt0fSkrKiYmYWApXFxuXFxuICAgICAgICBsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgICAgICB2YXIgbmFtZSA9IHBkZmgoeCwgJy5wb3N0ZXItaXRlbS10aXRsZSYmVGV4dCcpXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogcGRmaCh4LCAnaW1nJiZzcmMnKSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIG5hbWUpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgWyfng63pl6jnlLXlvbEt55S15b2xJywgJ+eDremXqOeUteinhuWJpy3nlLXop4bliacnLCAn54Ot6Zeo57u86Im6Lee7vOiJuicsICfng63pl6jliqjmvKst5Yqo5ryrJ10ubWFwKHggPT4ge1xcbiAgICAgICAgc2V0TGlzdHMoeClcXG4gICAgfSlcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCIxLuixjOixhlwiLFwicGF0aFwiOlwid2FuZG91XCIsXCJydWxlXCI6XCJqczpcXG5sZXQgZHVybCA9IGdldE15VmFyKFxcXCJkdXJsXFxcIiwgXFxcIlxcXCIpO1xcbmlmIChkdXJsICE9ICcnKSB7XFxuXFxuICAgIGR1cmwgPSAnaHR0cHM6Ly93d3cud2FuZG91LnBybycgKyBkdXJsLnJlcGxhY2UoJy5odG1sJywgJycpXFxuICAgIGxldCB1cmwgPSBkdXJsO1xcbiAgICBsZXQgaWQgPSB1cmw7XFxuICAgIGxldCBodG1sID0gZmV0Y2godXJsKTtcXG4gICAgdmFyIHJ1bGUgPSBNWV9SVUxFLnRpdGxlXFxuICAgIHZhciBuYW1lID0gcGRmaChodG1sLCAnLm1vdmllLWNvbnRlbnQmJnAmJlRleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgaW1nOiBwZGZoKGh0bWwsICcubW92aWUtaW1nJiZpbWcmJnNyYycpLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICBkZXNjOiBwZGZoKGh0bWwsICcuYm90dG9tJiZwJiZUZXh0JyksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UveDU/dT0nICsgYmFzZTY0RW5jb2RlKHVybCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAvL3NldFJlc3VsdChkKTtcXG5cXG4gICAgbGV0IHRleHQgPSBwZGZoKGh0bWwsIFxcXCJib2R5JiYjX19ORVhUX0RBVEFfXyYmSHRtbFxcXCIpO1xcbiAgICAvL2xvZyh0ZXh0KTtcXG4gICAgbGV0IGVyamkgPSBKU09OLnBhcnNlKHRleHQpO1xcbiAgICAvLyBsb2coZXJqaSk7XFxuICAgIGxldCBsaXN0ID0gZXJqaS5wcm9wcy5wYWdlUHJvcHMuZGF0YS5wbGF5RGF0YTtcXG5cXG4gICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIE1ZX1VSTCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgIHdyYXBcXG4gICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICBsaXN0ID0gbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGl0LmRhdGFfdXJsO1xcbiAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnNpdGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaXQuc2l0ZV9pY29uLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206ICdob21lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2ViOiBpdC5zaXRlX25hbWUsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIC8vYWRkSXRlbUFmdGVyKGlkLCBsaXN0KTtcXG4gICAgICAgICAgICAgICAgZCA9IGQuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XFxuXFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcblxcbiAgICBqc29uID0gXFxcImh0dHBzOi8vYXBpLnhpYW1tLmNjOjk4OTcvbW92aWUvZ2V0c2VhcmNobGlzdC9rZXl3b3Jkcy9cXFwiICsgcyArIFxcXCIvcGFnZS8xL3Jvd3MvMTYuanNvblxcXCI7XFxuICAgIGRhdGEgPSBKU09OLnBhcnNlKGZldGNoKGpzb24pKS5kYXRhO1xcbiAgICBsZXQge1xcbiAgICAgICAgd3JhcFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBmb3IgKGxldCBpdCBvZiBkYXRhKSB7XFxuICAgICAgICBsZXQgbmFtZSA9IGl0Lm1vdmllX25hbWU7XFxuICAgICAgICAvL2xvZyhuYW1lKVxcbiAgICAgICAgbGV0IGltZyA9IGl0Lm1vdmllX2ltZ191cmw7XFxuICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vd3d3LndhbmRvdS5wcm9cXFwiICsgaXQubW92aWVfdXJsLnJlcGxhY2UoXFxcIi5odG1sXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgLy9sb2codXJsKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogd3JhcChuYW1lLCBzKSxcXG4gICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocnVsZSwgaWQsIHMsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IGZpbmRJdGVtc0J5Q2xzKGlkKTtcXG4gICAgICAgICAgICAgICAgaWYgKCEhY2xzKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoaWQpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhodG1sKVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgPSBwZGZoKGh0bWwsIFxcXCJib2R5JiYjX19ORVhUX0RBVEFfXyYmSHRtbFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2codGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJqaSA9IEpTT04ucGFyc2UodGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhlcmppKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gZXJqaS5wcm9wcy5wYWdlUHJvcHMuZGF0YS5wbGF5RGF0YTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gaXQuZGF0YV91cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnNpdGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXQuc2l0ZV9pY29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206ICdob21lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWI6IGl0LnNpdGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoaWQsIGxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlLCB1cmwsIHMsIG5hbWUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV9sZWZ0X3BpY1xcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuixjOixhjwvZm9udD5cXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpXFxufVxcblxcblxcbmlmIChnZXRJdGVtKCdob21lJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgIHZhciBwYWdlID0gTVlfUEFHRTtcXG4gICAgbGV0IHtcXG4gICAgICAgIHNldHBhZ2VkXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuXFxuICAgIHZhciBwaW5kZXggPSBzZXRwYWdlZChkLHBhZ2UsIFtcXFwi6aaW6aG1XFxcIiwgXFxcIuWIhuexu1xcXCJdLCBcXFwiIzQ2ODJCNFxcXCIpO1xcblxcblxcbiAgICAvL+mmlumhtVxcbiAgICBpZiAocGluZGV4ID09IFxcXCIwXFxcIikge1xcblxcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cud2FuZG91LnByby8nKVxcbiAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKHBkZmgoaHRtbCwgXFxcImJvZHkmJiNfX05FWFRfREFUQV9fJiZIdG1sXFxcIikpO1xcblxcbiAgICAgICAgZnVuY3Rpb24gc2V0TGlzdHMoaXRlbSkge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0uc3BsaXQoJyMnKVswXVxcbiAgICAgICAgICAgIHZhciBrZXkgPSBpdGVtLnNwbGl0KCcjJylbMV1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgdmFyIGxpc3QgPSBqc29uLnByb3BzLnBhZ2VQcm9wcy5mYWxsYmFja1trZXldLmRhdGFcXG5cXG4gICAgICAgICAgICBsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB4LmhvdF9uYW1lXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogeC5ob3RfaW1nX3VybCxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IHguaG90X3JhdGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKChuLCB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R1cmwnLCB1KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCB4LmhvdF91cmwpXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFsn54Ot6Zeo55S15b2xI2luZGV4LWdldE1vdmllTGlzdC1tb3ZpZScsICfng63pl6jliafpm4YjaW5kZXgtZ2V0VHZMaXN0LXR2LTI4J10ubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHNldExpc3RzKHgpXFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIGlmIChwaW5kZXggPT0gXFxcIjFcXFwiKSB7XFxuICAgICAgICBcXG4gICAgICAgIHZhciB0eXBlcyA9IHtcXG4gICAgICAgICAgICBcXFwidGFnXFxcIjogW1xcXCLnsbvlnos6MFxcXCIsIFxcXCLllpzliac6MVxcXCIsIFxcXCLniLHmg4U6MlxcXCIsIFxcXCLlpYflubs6NFxcXCIsIFxcXCLniq/nvao6NVxcXCIsIFxcXCLmgqznlpE6NlxcXCIsIFxcXCLljoblj7I6N1xcXCIsIFxcXCLmiJjkuok6OFxcXCIsIFxcXCLliqjkvZw6OVxcXCIsIFxcXCLnp5Hlubs6MTBcXFwiLCBcXFwi5Yqo55S7OjExXFxcIiwgXFxcIuWGkumZqToxMlxcXCIsIFxcXCLngb7pmr46MTVcXFwiLCBcXFwi5oOK5oKaOjE3XFxcIiwgXFxcIuaBkOaAljoxOFxcXCIsIFxcXCLmrYzoiJ46MjJcXFwiLCBcXFwi5q2m5L6gOjI0XFxcIiwgXFxcIumfs+S5kDoyN1xcXCJdLFxcbiAgICAgICAgICAgIFxcXCJjb3VudHJ5XFxcIjogW1xcXCLlnLDljLo6MFxcXCIsIFxcXCLkuK3lm706MVxcXCIsIFxcXCLpn6nlm706M1xcXCIsIFxcXCLml6XmnKw6NFxcXCIsIFxcXCLnvo7lm706NlxcXCIsIFxcXCLoi7Hlm706OVxcXCIsIFxcXCLms5Xlm706MTBcXFwiLCBcXFwi5b635Zu9OjExXFxcIiwgXFxcIuWFtuS7ljoxMlxcXCJdLFxcbiAgICAgICAgICAgIFxcXCJ5ZWFyXFxcIjogW1xcXCLml7bpl7Q6MFxcXCIsIFxcXCIyMDIyOjFcXFwiLCBcXFwiMjAyMjoyXFxcIiwgXFxcIjIwMjA6M1xcXCIsIFxcXCIyMDE5OjRcXFwiLCBcXFwiMjAxMOW5tOS7ozo1XFxcIiwgXFxcIjIwMDDlubTku6M6NlxcXCIsIFxcXCI5MOW5tOS7ozo3XFxcIiwgXFxcIjgw5bm05LujOjhcXFwiLCBcXFwiNzDlubTku6M6OVxcXCIsIFxcXCI2MOW5tOS7ozoxMFxcXCIsIFxcXCLmm7Tml6k6MTFcXFwiXSxcXG4gICAgICAgICAgICBcXFwic29ydFxcXCI6IFtcXFwi57u85ZCI5o6S5bqPOjFcXFwiLCBcXFwi6L+R5pyf54Ot5bqmOjJcXFwiLCBcXFwi6auY5YiG5LyY5YWIOjNcXFwiXVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG9qc29uID0gW3tcXG4gICAgICAgICAgICBuYW1lOiAn55S15b2xJyxcXG4gICAgICAgICAgICBpZDogJ21vdmllJyxcXG4gICAgICAgICAgICBjb250ZW50OiB0eXBlc1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIG5hbWU6ICfnlLXop4bliacnLFxcbiAgICAgICAgICAgIGlkOiAndHYnLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHR5cGVzXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+WKqOa8qycsXFxuICAgICAgICAgICAgaWQ6ICdhbmltZScsXFxuICAgICAgICAgICAgY29udGVudDogdHlwZXNcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBuYW1lOiAn57u86Im6JyxcXG4gICAgICAgICAgICBpZDogJ3ZhcmlldHknLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHR5cGVzXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+e6quW9leeJhycsXFxuICAgICAgICAgICAgaWQ6ICdkb2N1bWVudGFyeScsXFxuICAgICAgICAgICAgY29udGVudDogdHlwZXNcXG4gICAgICAgIH1dXFxuXFxuICAgICAgICB2YXIg5aSn57G7ID0gW107XFxuICAgICAgICBvanNvbi5tYXAoeCA9PiB7XFxuICAgICAgICAgICAg5aSn57G7LnB1c2goeC5uYW1lICsgXFxcIkBcXFwiICsgeC5pZCk7XFxuICAgICAgICB9KVxcbiAgICAgICAgdmFyIGluZGV4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImluZGV4XFxcIiwgJzAnKTtcXG4gICAgICAgIHZhciBqID0gb2pzb25baW5kZXhdO1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhqLmNvbnRlbnQpO1xcblxcbiAgICAgICAgdmFyIHRlbXAgPSB7fTtcXG4gICAgICAgIGtleXMuZm9yRWFjaCh4ID0+IHtcXG4gICAgICAgICAgICB2YXIgdHlwZSA9IHg7XFxuICAgICAgICAgICAgdmFyIGwgPSBqLmNvbnRlbnRbeF07XFxuICAgICAgICAgICAgaWYgKFsndmVyc2lvbiddLmluY2x1ZGVzKHgpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVyblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAobC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIHZhciBucyA9IGwubWFwKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGsuc3BsaXQoJzonKVswXTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IGsuc3BsaXQoJzonKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IHhcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgdGVtcFt4XSA9IG5zO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuXFxuICAgICAgICB2YXIgdCA9IE9iamVjdC52YWx1ZXModGVtcCkubWFwKHggPT4geC5tYXAoeiA9PiBKU09OLnN0cmluZ2lmeSh6KSkuam9pbignIycpKVxcblxcbiAgICAgICAgdmFyIFRydWVKc29uID0ge1xcbiAgICAgICAgICAgIHR5cGU6IEFycmF5KOWkp+exuy5qb2luKCcjJykpLFxcbiAgICAgICAgICAgIGl0ZW06IHQgIT0gXFxcIlxcXCIgPyB0IDogW10sXFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhUcnVlSnNvbilcXG5cXG4gICAgICAgIC8v6ZyA5qC55o2u5a6e6ZmF5L+u5pS5XFxuICAgICAgICBjb25zdCDliIbnsbvpopzoibIgPSBnZXRSYW5nZUNvbG9ycygpO1xcbiAgICAgICAgY29uc3QgSnNvbuWkp+exuyA9ICd0eXBlJztcXG4gICAgICAgIGNvbnN0IEpzb27mi7zmjqUgPSAnaXRlbSc7XFxuICAgICAgICBjb25zdCBKc29u5ouG5YiGID0gJyMnO1xcbiAgICAgICAgY29uc3QgSnNvbuWNlemhuSA9ICdAJztcXG4gICAgICAgIGNvbnN0IEpzb27liJfooaggPSBbXFxcInRhZ1xcXCIsIFxcXCJjb3VudHJ5XFxcIiwgXFxcInllYXJcXFwiLCBcXFwic29ydFxcXCJdOyAvL+WIh+aNoua4hemZpFxcbiAgICAgICAgY29uc3Qg5o6S6ZmkID0gJyc7XFxuICAgICAgICBjb25zdCDliIbnsbvlsZXlvIAgPSAn4oioJztcXG4gICAgICAgIGNvbnN0IOWIhuexu+aKmOWPoCA9ICfiiKcnO1xcblxcbiAgICAgICAgLy/liqjmgIHliIbnsbtcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvamR0ZmwnKSkucnVsZSk7XFxuICAgICAgICB2YXIgdHlwZSA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJteXR5cGVcXFwiLCBcXFwibW92aWVcXFwiKTtcXG4gICAgICAgIHZhciB0YWcgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwidGFnXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgICAgIHZhciBjb3VudHJ5ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImNvdW50cnlcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgdmFyIHllYXIgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwieWVhclxcXCIsIFxcXCIwXFxcIik7XFxuICAgICAgICB2YXIgc29ydCA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJzb3J0XFxcIiwgXFxcIjFcXFwiKTtcXG5cXG4gICAgICAgIC8vbG9nKGAke3R5cGV9OiR7dGFnfSske2NvdW50cnl9KyR7eWVhcn0rJHtzb3J0fWApXFxuICAgICAgICB2YXIganVybCA9IGBodHRwczovL2FwaS54aWFtbS5jYzo5ODk3L21vdmllL2dldCR7dHlwZX1saXN0L3RhZy8ke3RhZ30vY291bnRyeS8ke2NvdW50cnl9L3llYXIvJHt5ZWFyfS9zb3J0LyR7c29ydH0vcGFnZS8ke3BhZ2V9L3Jvd3MvMzAuanNvbmA7XFxuICAgICAgICB2YXIgcGxpc3QgPSBKU09OLnBhcnNlKGZldGNoKGp1cmwpKS5kYXRhXFxuICAgICAgICBwbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgdmFyIG5hbWUgPSB4Lm1vdmllX25hbWU7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogeC5tb3ZpZV9pbWdfdXJsICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IHgubW92aWVfcmF0ZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobiwgdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZHVybCcsIHUpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIG5hbWUsIHgubW92aWVfdXJsKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zX21hcnF1ZWUnXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCIyLuiMtuadr+eLkFwiLFwicGF0aFwiOlwiY3VwZm94XCIsXCJydWxlXCI6XCJqczpcXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3h0b29scycpKS5ydWxlKVxcblxcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwMSxcXG4gICAgICAgIHJlaHRtbFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICB2YXIganNvbiA9IHNlYXJjaChzLCBzdG9yYWdlMC5nZXRNeVZhcigncGFnZScsIE1ZX1BBR0UpKVxcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoanNvbikgIT0gXFxcInt9XFxcIikge1xcbiAgICAgICAgdmFyIGxpc3QgPSBqc29uLnJlc291cmNlcztcXG4gICAgICAgIGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAvL2xvZyhpdC53ZWJzaXRlKyctJytyZWh0bWwoaXQudGV4dCkpXFxuICAgICAgICAgICAgdmFyIHU9XFxcImhpa2VyOi8vcGFnZS9wP3U9XFxcIiArIGJhc2U2NEVuY29kZShpdC51cmwpXFxuICAgICAgICAgICAgdT1nZXRJdGVtKCdhaScsJzAnKT09JzAnP3U6dSsnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogd3JhcDEoaXQud2Vic2l0ZSsnLScrcmVodG1sKGl0LnRleHQpLCBzKSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgIGltZzppdC5pY29uLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBpdC53ZWJzaXRlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogcmVodG1sKGl0LnRleHQpLFxcbiAgICAgICAgICAgICAgICAgICAgd2ViOml0LndlYnNpdGUsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgXFxuICAgIHNldFJlc3VsdChkKVxcbn0gZWxzZSB7XFxuICAgIFxcbn1cXG5cXG5pZihnZXRJdGVtKCdob21lJywn5YWzJyk9PSflvIAnKXtcXG5cXG52YXIgaHRtbCA9IGZldGNoUEMoJ2h0dHBzOi8vY3VwZm94LmFwcC8nLCB7fSlcXG5cXG5cXG5mdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgIHZhciB0aXRsZSA9IGl0ZW0uc3BsaXQoJy0nKVswXVxcbiAgICB2YXIgdCA9IGl0ZW0uc3BsaXQoJy0nKVsxXVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICB9KVxcblxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgYGJvZHkmJiMke3R9JiYubW92aWUtbGlzdC1pdGVtYClcXG5cXG4gICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICB2YXIgbmFtZSA9IHBkZmgoeCwgJy5tb3ZpZS10aXRsZSYmVGV4dCcpXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgIGltZzogcGRmaCh4LCAnaW1nJiZzcmMnKSxcXG4gICAgICAgICAgICBkZXNjOnBkZmgoeCwnLm1vdmllLXJhdGluZyYmVGV4dCcpLFxcbiAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4pID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIG5hbWUpXFxuICAgICAgICB9KVxcbiAgICB9KVxcbn1cXG5cXG5bJ+eDreaSreaWsOWJpy10dicsICfng63pl6jnlLXlvbEtbW92aWUnLCAn54Ot5pKt5Yqo5ryrLWFuaW1lJywgJ+eDreaSree7vOiJui1zaG93JywgJ+eDreaSree6quW9leeJhy1kb2N1bWVudGFyeSddLm1hcCh4ID0+IHtcXG4gICAgc2V0TGlzdHMoeClcXG59KVxcblxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWHveaVsFwiLFwicGF0aFwiOlwieHRvb2xzXCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiBlbmNvZGVVVEY4KHMpIHtcXG52YXIgaSwgciA9IFtdLCBjLCB4O1xcbmZvciAoaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKVxcbmlmICgoYyA9IHMuY2hhckNvZGVBdChpKSkgPCAweDgwKSByLnB1c2goYyk7XFxuZWxzZSBpZiAoYyA8IDB4ODAwKSByLnB1c2goMHhDMCArIChjID4+IDYgJiAweDFGKSwgMHg4MCArIChjICYgMHgzRikpO1xcbmVsc2Uge1xcbmlmICgoeCA9IGMgXiAweEQ4MDApID4+IDEwID09IDApIC8v5a+55Zub5a2X6IqCVVRGLTE26L2s5o2i5Li6VW5pY29kZVxcbmMgPSAoeCA8PCAxMCkgKyAocy5jaGFyQ29kZUF0KCsraSkgXiAweERDMDApICsgMHgxMDAwMCxcXG5yLnB1c2goMHhGMCArIChjID4+IDE4ICYgMHg3KSwgMHg4MCArIChjID4+IDEyICYgMHgzRikpO1xcbmVsc2Ugci5wdXNoKDB4RTAgKyAoYyA+PiAxMiAmIDB4RikpO1xcbnIucHVzaCgweDgwICsgKGMgPj4gNiAmIDB4M0YpLCAweDgwICsgKGMgJiAweDNGKSk7XFxufTtcXG5yZXR1cm4gcjtcXG59XFxuXFxuZnVuY3Rpb24gc2hhMShzKSB7XFxudmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShlbmNvZGVVVEY4KHMpKVxcbnZhciBpLCBqLCB0O1xcbnZhciBsID0gKChkYXRhLmxlbmd0aCArIDgpID4+PiA2IDw8IDQpICsgMTYsIHMgPSBuZXcgVWludDhBcnJheShsIDw8IDIpO1xcbnMuc2V0KG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyKSksIHMgPSBuZXcgVWludDMyQXJyYXkocy5idWZmZXIpO1xcbmZvciAodCA9IG5ldyBEYXRhVmlldyhzLmJ1ZmZlciksIGkgPSAwOyBpIDwgbDsgaSsrKXNbaV0gPSB0LmdldFVpbnQzMihpIDw8IDIpO1xcbnNbZGF0YS5sZW5ndGggPj4gMl0gfD0gMHg4MCA8PCAoMjQgLSAoZGF0YS5sZW5ndGggJiAzKSAqIDgpO1xcbnNbbCAtIDFdID0gZGF0YS5sZW5ndGggPDwgMztcXG52YXIgdyA9IFtdLCBmID0gW1xcbmZ1bmN0aW9uICgpIHsgcmV0dXJuIG1bMV0gJiBtWzJdIHwgfm1bMV0gJiBtWzNdOyB9LFxcbmZ1bmN0aW9uICgpIHsgcmV0dXJuIG1bMV0gXiBtWzJdIF4gbVszXTsgfSxcXG5mdW5jdGlvbiAoKSB7IHJldHVybiBtWzFdICYgbVsyXSB8IG1bMV0gJiBtWzNdIHwgbVsyXSAmIG1bM107IH0sXFxuZnVuY3Rpb24gKCkgeyByZXR1cm4gbVsxXSBeIG1bMl0gXiBtWzNdOyB9XFxuXSwgcm9sID0gZnVuY3Rpb24gKG4sIGMpIHsgcmV0dXJuIG4gPDwgYyB8IG4gPj4+ICgzMiAtIGMpOyB9LFxcbmsgPSBbMTUxODUwMDI0OSwgMTg1OTc3NTM5MywgLTE4OTQwMDc1ODgsIC04OTk0OTc1MTRdLFxcbm0gPSBbMTczMjU4NDE5MywgLTI3MTczMzg3OSwgbnVsbCwgbnVsbCwgLTEwMDk1ODk3NzZdO1xcbm1bMl0gPSB+bVswXSwgbVszXSA9IH5tWzFdO1xcbmZvciAoaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSArPSAxNikge1xcbnZhciBvID0gbS5zbGljZSgwKTtcXG5mb3IgKGogPSAwOyBqIDwgODA7IGorKylcXG53W2pdID0gaiA8IDE2ID8gc1tpICsgal0gOiByb2wod1tqIC0gM10gXiB3W2ogLSA4XSBeIHdbaiAtIDE0XSBeIHdbaiAtIDE2XSwgMSksXFxudCA9IHJvbChtWzBdLCA1KSArIGZbaiAvIDIwIHwgMF0oKSArIG1bNF0gKyB3W2pdICsga1tqIC8gMjAgfCAwXSB8IDAsXFxubVsxXSA9IHJvbChtWzFdLCAzMCksIG0ucG9wKCksIG0udW5zaGlmdCh0KTtcXG5mb3IgKGogPSAwOyBqIDwgNTsgaisrKW1bal0gPSBtW2pdICsgb1tqXSB8IDA7XFxufTtcXG50ID0gbmV3IERhdGFWaWV3KG5ldyBVaW50MzJBcnJheShtKS5idWZmZXIpO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKW1baV0gPSB0LmdldFVpbnQzMihpIDw8IDIpO1xcblxcbnZhciBoZXggPSBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwobmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQzMkFycmF5KG0pLmJ1ZmZlciksIGZ1bmN0aW9uIChlKSB7XFxucmV0dXJuIChlIDwgMTYgPyBcXFwiMFxcXCIgOiBcXFwiXFxcIikgKyBlLnRvU3RyaW5nKDE2KTtcXG59KS5qb2luKFxcXCJcXFwiKTtcXG5yZXR1cm4gaGV4O1xcbn1cXG5cXG5cXG5mdW5jdGlvbiBzZWFyY2gocywgcGFnZSkge1xcbiAgICBldmFsKGdldENyeXB0b0pTKCkpXFxuICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgIHAgPSAwXFxuICAgIH0gZWxzZSBpZiAocGFnZSA9PSAyKSB7XFxuICAgICAgICBwID0gMTlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHAgPSBwYXJzZUludChwYWdlKSArIDIwXFxuICAgIH1cXG4gICAgc3RvcmFnZTAucHV0TXlWYXIoJ3BhZ2UnLCBwKVxcbiAgICBzcyA9IHMgKyAnVVJCQlJHUk9VTidcXG4gICAgdGsgPSBDcnlwdG9KUy5TSEExKHNzKS50b1N0cmluZygpO1xcbiAgICB2YXIgaiA9IGZldGNoKGBodHRwczovL2FwaS5jdXBmb3guYXBwL2FwaS92Mi9zZWFyY2gvP3RleHQ9JHtzfSZ0eXBlPTAmZnJvbT0ke3B9JnNpemU9MjAmZG91YmFuX2lkPTAmdG9rZW49JHt0a31gKVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKGopXFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgdmFyIGpzb24gPSB7fVxcbiAgICB9XFxuICAgIHJldHVybiBqc29uXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiNC7pnZLpuqZcIixcInBhdGhcIjpcInFpbWFpdHZcIixcInJ1bGVcIjpcImpzOlxcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIHZhciB1cmw9XFxcImh0dHA6Ly9tLnFtdHYuYXBwL3Byb2QtYXBpL2FwcC9tb3ZpZS9pbmRleC9zZWFyY2hNb3ZpZUJ5TmFtZVxcXCI7XFxuICAgIFxcbiAgICBsZXQgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJYLVJlcXVlc3RlZC1XaXRoXFxcIjogXFxcIlhNTEh0dHBSZXF1ZXN0XFxcIlxcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6XFxuICAgICAgICAgICAge1xcbiAgXFxcImNvbmRpdGlvblxcXCI6IHMsXFxuICBcXFwicGFnZVNpemVcXFwiOiAyNSxcXG4gIFxcXCJwYWdlTnVtXFxcIjogMVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgXFxuICAgIHZhciBpbmZvID0gJydcXG4gICAgdHJ5IHtcXG4gICAgICAgIGluZm8gPSBKU09OLnBhcnNlKGh0bWwpLmRhdGEucmVjb3JkcztcXG4gICAgfSBjYXRjaCB7XFxuXFxuICAgIH1cXG4gICAgaWYgKGluZm8gIT0gbnVsbCkge1xcbiAgICAgICAgdmFyIGRhdGEgPSBpbmZvO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZGF0YSA9IFtdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPuaXoOe7k+aenDwvc2FtbGw+JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICB9KVxcbiAgICAgICAgc2V0UmVzdWx0KGQpXFxuICAgIH1cXG5cXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXAxXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgIGZvciAobGV0IGl0IG9mIGRhdGEpIHtcXG4gICAgICAgIC8vbG9nKGl0KVxcbiAgICAgICAgbGV0IHQgPSBpdC5uYW1lO1xcbiAgICAgICAgbGV0IHdlYiA9IGl0LndlYnNpdGVOYW1lO1xcbiAgICAgICAgbGV0IGltZyA9IGl0LndlYnNpdGVJY29uO1xcbiAgICAgICAgbGV0IHVybD1pdC51cmk7XFxuICAgICAgICBcXG4gICAgICAgIGlmICghdCkge1xcbiAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/dT1cXFwiICsgYmFzZTY0RW5jb2RlKHVybClcXG4gICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgIFxcbiAgICAgICAgXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIit3cmFwMSh3ZWIgKyAnLScgKyB0LCBzKSxcXG4gICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcIixcXG4gICAgICAgICAgICBpbWc6aXQuY292ZXIsXFxuICAgICAgICAgICAgLy9kZXNjOiAnJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogaXQudXJpLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgIHdlYjp3ZWIsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpXFxufSBlbHNlIHtcXG5cXG59XFxuXFxuaWYgKGdldEl0ZW0oJ2hvbWUnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgZnVuY3Rpb24gc2V0TGlzdHMoaXRlbSkge1xcbiAgICAgICAgdmFyIHRpdGxlID0gaXRlbS5zcGxpdCgnLScpWzBdXFxuICAgICAgICB2YXIgdCA9IGl0ZW0uc3BsaXQoJy0nKVsxXVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9tb3JlLzEwLnBuZydcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UoZmV0Y2hQQyhgaHR0cHM6Ly93d3cucW10di5hcHAvcHJvZC1hcGkvYXBwL21vdmllL2luZGV4L3NlYXJjaEFsbE1vdmllYCkpXFxuICAgICAgIFxcblxcbiAgICAgICAgdmFyIGxpc3QgPSBqc29uLmRhdGFbdF0ucmVjb3JkcztcXG5cXG4gICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0geC50aXRsZTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiB4LmNvdmVyLFxcbiAgICAgICAgICAgICAgICBkZXNjOiB4LnJhdGUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIFsn54Ot5pKt55S15b2xLWxpc3RIb3RNb3ZpZScsICfng63mkq3nlLXop4bliactbGlzdEhvdFR2JywgJ+eDreaSreWKqOa8qy1saXN0SG90Q29taWMnLCAn54Ot5pKt57u86Im6LWxpc3RIb3RWYXJpZXR5J10ubWFwKHggPT4ge1xcbiAgICAgICAgc2V0TGlzdHMoeClcXG4gICAgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbAyXCIsXCJwYXRoXCI6XCJ6dG9vbHNcIixcInJ1bGVcIjpcImpzOlxcbi8vdXJs6Kej5p6QXFxuZnVuY3Rpb24gdXJsUGFyc2UodSkge1xcbiAgICB2YXIgZGljdCA9IHt9XFxuICAgIGRpY3QuU291cmNlID0gdTtcXG4gICAgbGV0IHBhcmFtcyA9ICh1cmwpID0+IHtcXG4gICAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xcbiAgICAgICAgbGV0IHJlZyA9IC8oW14/PSZdKyk9KFtePz0mXSspL2c7XFxuICAgICAgICB1cmwucmVwbGFjZShyZWcsIGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2FyZ3VtZW50c1sxXV0gPSBhcmd1bWVudHNbMl07XFxuICAgICAgICB9KVxcbiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zXFxuICAgIH1cXG4gICAgdmFyIGphdmFVcmwgPSBKYXZhSW1wb3J0ZXIoamF2YS5uZXQuVVJMKTtcXG4gICAgd2l0aChqYXZhVXJsKSB7XFxuICAgICAgICB2YXIgdXJsID0gbmV3IFVSTCh1KTtcXG4gICAgICAgIGRpY3QuUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTtcXG4gICAgICAgIGRpY3QuSG9zdCA9IHVybC5nZXRIb3N0KCk7XFxuICAgICAgICBkaWN0LlBvcnQgPSB1cmwuZ2V0UG9ydCgpO1xcbiAgICAgICAgZGljdC5GaWxlID0gdXJsLmdldEZpbGUoKTtcXG4gICAgICAgIGRpY3QuUGF0aCA9IHVybC5nZXRQYXRoKCk7XFxuICAgICAgICBkaWN0LlJlZiA9IHVybC5nZXRSZWYoKTtcXG4gICAgICAgIGRpY3QuSG9zdHMgPSBgJHt1cmwuZ2V0UHJvdG9jb2woKX06Ly8ke3VybC5nZXRIb3N0KCl9YFxcbiAgICB9XFxuICAgIGRpY3QuUGFyYW1zID0gcGFyYW1zKHUpO1xcbiAgICByZXR1cm4gZGljdDtcXG59XFxuXFxuZnVuY3Rpb24gc3RyaW5nSW5BcnJheShzdHIsIGFycikge1xcbiAgICByZXR1cm4gYXJyLnNvbWUoaXRlbSA9PiBzdHIuaW5jbHVkZXMoaXRlbSkpO1xcbn1cXG5cXG5cXG4vL+aOkumZpOayoei3r+W+hFxcbmZ1bmN0aW9uIG5vZmlsZSh1KSB7XFxuICAgIHVybCA9IHUuaHJlZlxcbiAgICBpZiAoc3RyaW5nSW5BcnJheSh1cmwsIFsnbWFnbmV0JywgJ2VkMmsnXSkpIHtcXG4gICAgICAgIEJpdFRTLnB1c2godSk7XFxuICAgICAgICByZXR1cm4gdHJ1ZVxcbiAgICB9XFxuICAgIHZhciB1ID0gdXJsUGFyc2UodXJsKVxcbiAgICBpZiAodS5GaWxlID09ICcnIHx8IHUuRmlsZSA9PSAnLycgfHwgdS5SZWYgIT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuIHRydWVcXG4gICAgfVxcbn1cXG4vL+WOu+mHjVxcbmZ1bmN0aW9uIHVuaXF1ZShhcnIpIHtcXG4gICAgY29uc3QgcmVzID0gbmV3IE1hcCgpXFxuICAgIHJldHVybiBhcnIuZmlsdGVyKChhKSA9PiAhcmVzLmhhcyhhLnVybCkgJiYgcmVzLnNldChhLnVybCwgMSkpXFxufVxcblxcbi8v6YeN5a6a5ZCR5Y+v55So6ZO+5o6lXFxuZnVuY3Rpb24gZ2V0VHVybCh1KSB7XFxuICAgIC8vbG9nKHUpXFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgdXJsID0gYmFzZTY0RGVjb2RlKHUpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIHZhciB1cmwgPSB1XFxuICAgIH1cXG4gICAgaWYgKCF1cmwuaW5jbHVkZXMoJ2h0dHAnKSB8fCB1cmwgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICB1cmwgPSB1XFxuICAgIH1cXG4gICAgdXJsID0gdXJsLmluY2x1ZGVzKCc/JykgPyB1cmwuc3BsaXQoJz8nKVswXSA6IHVybFxcbiAgICBsb2coJ3VybDonICsgdXJsKVxcbiAgICB2YXIgZmlsZSA9IHVybFBhcnNlKHVybCkuRmlsZVxcbiAgICB2YXIgdHVybCA9ICcnXFxuICAgIGxldCBoZWFkID0gSlNPTi5wYXJzZShyZXF1ZXN0KHVybCwge1xcbiAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgfSkpO1xcbiAgICAvL2xvZyhoZWFkKVxcbiAgICBpZiAoaGVhZC51cmwgIT0gdW5kZWZpbmVkIHx8IGhlYWQudXJsICE9ICcnKSB7XFxuICAgICAgICB2YXIganVybHAgPSB1cmxQYXJzZShoZWFkLnVybClcXG4gICAgICAgIGlmIChqdXJscC5GaWxlID09ICcvJyB8fCBqdXJscC5GaWxlID09ICcnKSB7XFxuICAgICAgICAgICAgdHVybCA9IGp1cmxwLkhvc3RzICsgZmlsZVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0dXJsID0gaGVhZC51cmxcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHR1cmwgPSB1cmxcXG4gICAgfVxcbiAgICAvL2xvZygndHVybDonK3R1cmwpXFxuICAgIHR1cmwgPSB0dXJsLnJlcGxhY2UoL1xcXFw/ZnJvbS4rJC9nbSwgJycpO1xcblxcbiAgICB0dXJsID0gdmlkZW9SZWZEZXRhaWwodHVybClcXG4gICAgLy9sb2codHVybClcXG4gICAgcmV0dXJuIHR1cmxcXG59XFxuXFxuXFxuZnVuY3Rpb24gdmlkZW9SZWZEZXRhaWwodXJsKSB7XFxuICAgIGlmIChzdHJpbmdJbkFycmF5KHVybCwgW1xcXCI2MDgwXFxcIl0pKSB7XFxuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShcXFwidnBsYXlcXFwiLCBcXFwidmlkZW9cXFwiKTtcXG4gICAgfSBlbHNlIGlmIChzdHJpbmdJbkFycmF5KHVybCwgW1xcXCJ6aHVpanVcXFwiXSkpIHtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXCJ2b2RwbGF5XFxcIiwgXFxcInZvZGRldGFpbFxcXCIpO1xcbiAgICB9IGVsc2UgaWYgKHN0cmluZ0luQXJyYXkodXJsLCBbXFxcInJyZXRzXFxcIl0pKSB7XFxuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShcXFwicGxheVxcXCIsIFxcXCJwcm9qZWN0XFxcIilcXG4gICAgfVxcbiAgICByZXR1cm4gdXJsO1xcbn1cXG5cXG5cXG4vL+WkmumAieaooeWdl1xcbmZ1bmN0aW9uIE11bHRpU2VsZWN0TW9kZShuYW1lLCBpZCkge1xcbiAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZGF0YXRpdGxlLCBkYXRhdXJsKSA9PiB7XFxuICAgICAgICBmdW5jdGlvbiB1bmlxdWUoYXJyKSB7XFxuICAgICAgICBjb25zdCByZXMgPSBuZXcgTWFwKClcXG4gICAgICAgIHJldHVybiBhcnIuZmlsdGVyKChhKSA9PiAhcmVzLmhhcyhhLnVybCkgJiYgcmVzLnNldChhLnVybCwgMSkpXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgZHVvc2VsZWN0ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImR1b3NlbGVjdFxcXCIpID8gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImR1b3NlbGVjdFxcXCIpIDogW107XFxuICAgICAgICBpZiAoZHVvc2VsZWN0LmZpbmRJbmRleCh4ID0+IHgudXJsID09PSBkYXRhdXJsKSA9PSAtMSkge1xcbiAgICAgICAgICAgIGR1b3NlbGVjdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGF0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBkYXRhdXJsXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBkdW9zZWxlY3QgPSB1bmlxdWUoZHVvc2VsZWN0KVxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oZGF0YXVybCwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogYOKAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojRkY1NzMzXFxcIj5gICsgZGF0YXRpdGxlXFxuICAgICAgICAgICAgICAgIC8vdGl0bGU6YOKAmOKAmGArZGF0YXRpdGxlK2DigJnigJlgXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUJ5VmFsdWUoYXJyLCB2YWwpIHtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV1bJ3VybCddID09IHZhbCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVtb3ZlQnlWYWx1ZShkdW9zZWxlY3QsIGRhdGF1cmwpXFxuICAgICAgICAgICAgdXBkYXRlSXRlbShkYXRhdXJsLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhdGl0bGVcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJkdW9zZWxlY3RcXFwiLCBkdW9zZWxlY3QpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9LCBuYW1lLCBpZClcXG59XFxuXFxuJC5leHRlbmQoe1xcbiAgICBtc206IE11bHRpU2VsZWN0TW9kZSxcXG59KVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5o6o6YCBXCIsXCJwYXRoXCI6XCJwdXNoXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgaXRlbXMgPSBbXTtcXG5sZXQgcHVzaGluID0gZGVjb2RlVVJJQ29tcG9uZW50KGdldFBhcmFtKFxcXCJwdXNodXJsXFxcIikpO1xcbmxldCB0dmlwID0gZ2V0SXRlbSgnaGlrZXJ0dmJveHNldCcsICcnKTtcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICflvZPliY1JUO+8micgKyB0dmlwLFxcbiAgICB1cmw6IFxcXCJpbnB1dDovL1xcXCIgKyBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJ2h0dHA6Ly8nICsgZ2V0SVAoKSArICc6OTk3OCcpICsgXFxcIi8vLy/or7fovpPlhaVUVkJveOerr+eahElQ5Zyw5Z2A77yM5aaCaHR0cDovL1xcXCIgKyBnZXRJUCgpICsgXFxcIjo5OTc4LmpzOnNldEl0ZW0oJ2hpa2VydHZib3hzZXQnLGlucHV0KTtyZWZyZXNoUGFnZSgpXFxcIixcXG4gICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG59KTtcXG52YXIgcHVybCA9IHB1c2hpbjtcXG5cXG5pZiAocHVzaGluLmluY2x1ZGVzKCdcXFxcbicpICYmICFwdXNoaW4uc3RhcnRzV2l0aCgneycpKSB7XFxuICAgIHB1cmwgPSBwdXNoaW4ucmVwbGFjZShcXFwiXFxcXG5cXFwiLCAnJCcpO1xcbn1cXG5pZiAocHVzaGluLnN0YXJ0c1dpdGgoJ2h0dHAnKSAmJiBwdXNoaW4uaW5jbHVkZXMoJzt7JykpIHtcXG4gICAgcHVybCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIua1t+mYlOebtOmTvuaOqOmAgVxcXCIsXFxuICAgICAgICBcXFwidXJsXFxcIjogcHVzaGluXFxuICAgIH0pXFxufVxcbmlmIChwdXNoaW4uc3RhcnRzV2l0aCgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJykpIHtcXG4gICAgbGV0IHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcbiAgICBwdXJsID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgXFxcInVybFxcXCI6IHB1c2hpbixcXG4gICAgICAgIFxcXCJyZWZyZXNoX3Rva2VuXFxcIjogcmVmdG9rZW5cXG4gICAgfSlcXG59XFxuaWYgKHB1c2hpbi5pbmNsdWRlcygnOjUyMDIwJykpIHtcXG4gICAgaWYgKHB1c2hpbi5pbmNsdWRlcygncmVkaXJlY3RQbGF5VXJsJykpIHtcXG4gICAgICAgIHB1cmwgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwi5rW36ZiU5oqV5bGP55u06ZO+XFxcIixcXG4gICAgICAgICAgICBcXFwidXJsXFxcIjogcHVzaGluXFxuICAgICAgICB9KVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcHVybCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCLmtbfpmJTnvZHpobXmipXlsY9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwdXNoaW5cXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuXFxuLy9sb2coJ+aOqOmAgScrcHVybCk7XFxudmFyIHN0YXRlID0gcmVxdWVzdCh0dmlwICsgJy9hY3Rpb24nLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgICAgIC8vJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxcbiAgICAgICAgJ1JlZmVyZXInOiB0dmlwXFxuICAgIH0sXFxuICAgIHRpbWVvdXQ6IDIwMDAsXFxuICAgIGJvZHk6ICdkbz1wdXNoJnVybD0nICsgcHVybC5yZXBsYWNlKC9cXFxcJi9nLCAn77yG77yGJyksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7XFxuLy9sb2coc3RhdGUpO1xcbmlmIChzdGF0ZSA9PSAnb2snKSB7XFxuICAgIC8vbG9nKHN0YXRlKTtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKchVxcXCIgKyBzdGF0ZSxcXG4gICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIGJhY2soZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICB9KTtcXG59IGVsc2Uge1xcbiAgICAvL2xvZyhzdGF0ZSk7XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLinY5cXFwiICsgc3RhdGUsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG4gICAgfSk7XFxuXFxufVxcbnNldFJlc3VsdChpdGVtcyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLorr7nva5cIixcInBhdGhcIjpcInNldHRpbmdcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICforr7nva5JUOWcsOWdgCcsXFxuICAgICAgICB1cmw6IFxcXCJpbnB1dDovL1xcXCIgKyBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJ2h0dHA6Ly8nICsgZ2V0SVAoKSArICc6OTk3OCcpICsgXFxcIi8vLy/or7fovpPlhaV0dmJveOaOqOmAgUlQ5Zyw5Z2A77yM5aaCaHR0cDovL1xcXCIgKyBnZXRJUCgpICsgXFxcIjo5OTc4LmpzOnNldEl0ZW0oJ2hpa2VydHZib3hzZXQnLGlucHV0KTtyZWZyZXNoUGFnZSgpXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ2hpa2VydHZib3hzZXQnLCAnJyksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0pO1xcbn1cXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIng1YWlcIixcInBhdGhcIjpcIng1YWlcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHJ1bGUsIGFuY2hvcklkKSB7XFxuICAgIHJldHVybiAkLnRvU3RyaW5nKChydWxlLCBhbmNob3JJZCwgbW9iYW4pID0+IHtcXG4gICAgICAgIGlmICh3aW5kb3cuY2hlY2swID09IG51bGwpIHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBjaGVjazAoKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXFxcImh0bWxcXFwiKS5pbm5lckhUTUw7XFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKFxcXCJodG1sMFxcXCIsIGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLnBhcnNlTGF6eVJ1bGVBc3luYygkJCQoKS5sYXp5UnVsZSgocnVsZSwgdXJsLCBhbmNob3JJZCwgbW9iYW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBnZXRWYXIoXFxcImh0bWwwXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXVybCA9ICcnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclZhcihcXFwiaHRtbDBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coJ3VybDonICsgdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vY3VwZm94LmFwcC9wYWdlP3VybD0nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2V1cmwgPSB1cmwucmVwbGFjZSgvLit1cmw9KC4qPykmLisvZ20sICckMScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdXJsID0gYmFzZTY0RGVjb2RlKGJhc2V1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2lmcmFtZScsIGl1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ2l1cmw6JyArIGl1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl1cmwubGVuZ3RoID4gMCA/IFxcXCIxXFxcIiA6IFxcXCIwXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIHJ1bGUsIGxvY2F0aW9uLmhyZWYsIGFuY2hvcklkLCBtb2JhbiksICQkJC50b1N0cmluZygocnVsZSxtb2JhbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZyhpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2ZiYS5sb2cocnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXFxcIjBcXFwiID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jaGVja2MgPSB3aW5kb3cuY2hlY2tjICsgMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAod2luZG93LmNoZWNrYyA+IDEyMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyhcXFwi5omn6KGM6LaF6L+HMzDnp5LvvIzml6Dms5Xop6PmnpBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHdpbmRvdy5jaGVjazAsIDI1MCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBmYmEuZ2V0VmFyKCdpZnJhbWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZygnbW9iYW4nK21vYmFuKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtb2Jhbj09JzEnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD11cmwrJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IHJ1bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9seeJh+ivpuaDhScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9wP3J1bGU9JyArIHJ1bGUgKyAnJnU9JyArIHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRSdWxlOiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jaGVja3VybCA9IGxvY2F0aW9uLmhyZWY7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrdTAoKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmNoZWNrdXJsICE9IGxvY2F0aW9uLmhyZWYpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2hhc2jlj5HnlJ/kuoblj5jljJZcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2hlY2tjID0gMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2swKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2t1MCwgMjUwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3UwKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSxydWxlLG1vYmFuKSk7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5sb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQod2luZG93LmNoZWNrMCwgMjUwKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB3aW5kb3cuY2hlY2tjID0gMDtcXG4gICAgICAgICAgICB3aW5kb3cuY2hlY2swID0gY2hlY2swO1xcbiAgICAgICAgICAgIGNoZWNrMCgpO1xcbiAgICAgICAgfVxcbiAgICB9LCBydWxlLCBhbmNob3JJZCwgZ2V0SXRlbSgnYWknLCcwJykpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjUu6Iy25p2v6JmOXCIsXCJwYXRoXCI6XCJhaW9iYlwiLFwicnVsZVwiOlwianM6XFxubGV0IGR1cmwgPSBnZXRNeVZhcihcXFwiZHVybFxcXCIsIFxcXCJcXFwiKTtcXG5pZiAoZHVybCAhPSAnJykge1xcbiAgICBNWV9VUkwgPSBkdXJsXFxuICAgIGxvZyhkdXJsKVxcblxcbiAgICBsZXQgdXJsID0gZHVybDtcXG4gICAgbGV0IGlkID0gdXJsO1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaCh1cmwpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIHZhciBodG1sID0gJydcXG4gICAgfVxcbiAgICB2YXIgcnVsZSA9IE1ZX1JVTEUudGl0bGVcXG4gICAgaWYgKGh0bWwgPT0gdW5kZWZpbmVkIHx8IGh0bWwgPT0gJycpIHtcXG4gICAgICAgIHRvYXN0KCfml6DmlbDmja4nKVxcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJkdXJsXFxcIik7XFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgIH0gZWxzZSB7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGh0bWwsICdoNCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGltZzogcGQoaHRtbCwgJ2ltZyYmc3JjJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICAgICAgZGVzYzogcGRmaChodG1sLCAnYm9keSYmLnB1YlRpbWUmJlRleHQnKSxcXG4gICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG5cXG5cXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllWnkmJmEnKVxcbiAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICBtZXJnZVxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJ3VsJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG1lcmdlKHQsICfor6bmg4UnLCAxKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL29uTGluZS5wbmcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206ICdob21lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkID0gZC5jb25jYXQobGlzdClcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfml6DotYTmupAnLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBzZXRSZXN1bHQoZClcXG4gICAgfVxcblxcbn1cXG5zID0gZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKTtcXG5cXG5sZXQgciA9IFxcXCJcXFwiO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuXFxuICAgIHZhciB1cmwgPSBwb3N0KGBodHRwczovL3d3dy43MjU5OTguY29tL2tleXdvcmRzLmh0bWxgLCB7XFxuICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAga2V5d29yZHM6IHMsXFxuICAgICAgICAgICAgdHlwZTogJ21vdmllJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgIH0pXFxuICAgIHZhciBqc29uID0gSlNPTi5wYXJzZSh1cmwpXFxuICAgIHZhciB0dXJsID0ganNvbi51cmwucmVwbGFjZSgvLVxcXFxkKy5odG1sJC8sICctJyArIE1ZX1BBR0UgKyAnLmh0bWwnKVxcbiAgICBNWV9VUkwgPSB0dXJsXFxuICAgIHZhciBodG1sID0gZmV0Y2godHVybClcXG5cXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuZWFjaCcpXFxuICAgIC8vbG9nKGxpc3QpXFxuXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuXFxuICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgICAgIGxldCBuYW1lID0gcGRmaChpdCwgJ2EmJnRpdGxlJyk7XFxuICAgICAgICBsZXQgaW1nID0gcGQoaXQsICdpbWcmJnNyYycpO1xcbiAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGltZyA9IFxcXCJodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL3ByZWxvYWRJbWcucG5nXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB1cmwgPSBwZChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgIGxldCBkZXNjID0gcGRmYShpdCwgJ2JvZHkmJi5pbmZvJiZhJykubWFwKHggPT4gcGRmaCh4LCAnYSYmVGV4dCcpKS5qb2luKCcgJyk7XFxuICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKGl0LCAnLm5vU2NvcmUmJlRleHQnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHdyYXAobmFtZSwgcyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgZGVzYzogJ+ivhOWIhjonICsgc2NvcmUgKyAnXFxcXG4nICsgZGVzYyxcXG4gICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocnVsZSwgdXJsLCBzKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBmaW5kSXRlbXNCeUNscyh1cmwpO1xcbiAgICAgICAgICAgICAgICBpZiAoISFjbHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyh1cmwpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5tb3ZpZVp5JiZhJylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2w/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsICd1bCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJoaWtlcjovL3BhZ2UvcD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZ1PVxcXCIgKyBiYXNlNjRFbmNvZGUodSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtZXJnZSh0LCAn6K+m5oOFJywgMSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS9zdGF0aWMvc2VhcmNoL2ltYWdlcy9vbkxpbmUucG5nJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiAnaG9tZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkLCBsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5peg6LWE5rqQJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSwgdXJsLCBzKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBzZXRSZXN1bHQoZClcXG59IGVsc2Uge1xcblxcbn1cXG5cXG5pZiAoZ2V0SXRlbSgnaG9tZScsICflhbMnKSA9PSAn5byAJykge1xcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgICAgICBNWV9VUkwgPSAnaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS8nO1xcbiAgICAgICAgdmFyIHRpdGxlID0gaXRlbS5zcGxpdCgnIycpWzBdXFxuICAgICAgICB2YXIga2V5ID0gaXRlbS5zcGxpdCgnIycpWzFdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2goYGh0dHBzOi8vd3d3LjcyNTk5OC5jb20veWluZ2t1LWxpc3QvJHtrZXl9LTAtMC0wLTAtMC0wLmh0bWxgKVxcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuZWFjaCcpXFxuXFxuICAgICAgICBsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgICAgICB2YXIgbmFtZSA9IHBkZmgoeCwgJ2EmJnRpdGxlJylcXG4gICAgICAgICAgICBsZXQgaW1nID0gcGQoeCwgJ2ltZyYmc3JjJyk7XFxuICAgICAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBpbWcgPSBcXFwiaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS9zdGF0aWMvc2VhcmNoL2ltYWdlcy9wcmVsb2FkSW1nLnBuZ1xcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCB1cmwgPSBwZCh4LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgIGxldCBzY29yZSA9IHBkZmgoeCwgJy5ub1Njb3JlJiZUZXh0Jyk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBzY29yZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobiwgdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZHVybCcsIHUpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBbJ+eUteW9sSMxJywgJ+eUteinhuWJpyMyJywgJ+WKqOa8qyMzJywgJ+e6quW9leeJhyM0J10ubWFwKHggPT4ge1xcblxcbiAgICAgICAgc2V0TGlzdHMoeClcXG4gICAgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI2LueUteW9seeLl1wiLFwicGF0aFwiOlwiZHlkb2dcIixcInJ1bGVcIjpcImpzOlxcbk1ZX1VSTD0naHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL3NvTW9yZS9hbGwtYWxsLWFsbC1hbGwtJztcXG5sZXQgZHVybCA9IGdldE15VmFyKFxcXCJkdXJsXFxcIiwgXFxcIlxcXCIpO1xcbmlmIChkdXJsICE9ICcnKSB7XFxuICAgIC8vbG9nKGR1cmwpXFxuXFxuICAgIGxldCB1cmwgPSBkdXJsO1xcbiAgICBsZXQgaWQgPSB1cmw7XFxuICAgIGxldCBuYW1lID0gcztcXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2godXJsKTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICB2YXIgaHRtbCA9ICcnXFxuICAgIH1cXG4gICAgdmFyIHJ1bGUgPSBNWV9SVUxFLnRpdGxlXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChodG1sLCAnaDQmJlRleHQnKSxcXG4gICAgICAgIGltZzogcGRmaChodG1sLCAnaW1nJiZkYXRhLXVybCcpLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICBkZXNjOiBwZGZoKGh0bWwsICdib2R5JiYucHViVGltZSYmVGV4dCcpLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBsZXQgaHRtbCA9IGZldGNoKGBodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vU3BpZGVyTW92aWUvenkvJHtuYW1lfWAsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAneC1yZXF1ZXN0ZWQtd2l0aCc6ICdYTUxIdHRwUmVxdWVzdCdcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllWnkmJmEnKVxcbiAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgd3JhcDFcXG4gICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICBsaXN0ID0gbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJ2xpLDAmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHdlYj1wZGZoKGl0LCAnbGksMSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHdyYXAxKHdlYisnLScrdCwgcyksXFxuICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL29uTGluZS5wbmcnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTp0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYjp3ZWIsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkID0gZC5jb25jYXQobGlzdClcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XFxucyA9IGdldE15VmFyKFxcXCJzb3VcXFwiLCBcXFwiXFxcIik7XFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICB2YXIgcGFnZSA9IE1ZX1BBR0U7XFxuICAgIHZhciB1cmwgPSBgaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL3NvLyR7c30vcGFnZV8ke3BhZ2V9Lmh0bWxgO1xcbiAgICAvL2xvZyh1cmwpXFxuICAgIHZhciBodG1sID0gZmV0Y2godXJsKVxcblxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5lYWNoJylcXG4gICAgLy9sb2cobGlzdClcXG5cXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXBcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG5cXG4gICAgZm9yIChsZXQgaXQgb2YgbGlzdCkge1xcbiAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCAnYSYmdGl0bGUnKTtcXG4gICAgICAgIGxldCBpbWcgPSBwZChpdCwgJ2ltZyYmZGF0YS11cmwnKTtcXG4gICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBpbWcgPSBcXFwiaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL1ZpZXcvaW1hZ2VzL2JsYW5rX2JnLnBuZ1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdXJsID0gcGQoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICBsZXQgZGVzYyA9IHBkZmEoaXQsICdib2R5JiYuaW5mbyYmYScpLm1hcCh4ID0+IHBkZmgoeCwgJ2EmJlRleHQnKSkuam9pbignICcpO1xcbiAgICAgICAgbGV0IHNjb3JlID0gcGRmaChpdCwgJy5ub1Njb3JlJiZUZXh0Jyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB3cmFwKG5hbWUsIHMpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnLFxcbiAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgIGRlc2M6ICfor4TliIY6JyArIHNjb3JlICsgJ1xcXFxuJyArIGRlc2MsXFxuICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHJ1bGUsIHVybCwgcywgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gZmluZEl0ZW1zQnlDbHModXJsKTtcXG4gICAgICAgICAgICAgICAgaWYgKCEhY2xzKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHModXJsKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChgaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL1NwaWRlck1vdmllL3p5LyR7bmFtZX1gLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAneC1yZXF1ZXN0ZWQtd2l0aCc6ICdYTUxIdHRwUmVxdWVzdCdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllWnkmJmEnKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwMVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJ2xpLDAmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3ZWI9cGRmaChpdCwgJ2xpLDEmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImdT1cXFwiICsgYmFzZTY0RW5jb2RlKHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcDEod2ViKyctJyt0LCBzKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL29uTGluZS5wbmcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTp0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWI6d2ViLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCwgbGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUsIHVybCwgcywgbmFtZSksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHVybCxcXG4gICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgc2V0UmVzdWx0KGQpXFxufSBlbHNlIHtcXG5cXG59XFxuXFxuaWYgKGdldEl0ZW0oJ2hvbWUnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgZnVuY3Rpb24gc2V0TGlzdHMoaXRlbSkge1xcbiAgICAgICAgTVlfVVJMID0gJ2h0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS8nO1xcbiAgICAgICAgdmFyIHRpdGxlID0gaXRlbS5zcGxpdCgnIycpWzBdXFxuICAgICAgICB2YXIga2V5ID0gaXRlbS5zcGxpdCgnIycpWzFdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcXG4gICAgICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xcbiAgICAgICAgLy92YXIgaHRtbCA9IGZldGNoKGBodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vbVJlY29tbWQvJHtrZXl9YCk7XFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGBodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vc29Nb3JlLyR7a2V5fS1hbGwtYWxsLSR7eWVhcn0tYCk7XFxuXFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5lYWNoJylcXG5cXG4gICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnYSYmdGl0bGUnKVxcbiAgICAgICAgICAgIGxldCBpbWcgPSBwZCh4LCAnaW1nJiZkYXRhLXVybCcpO1xcbiAgICAgICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgaW1nID0gXFxcImh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9WaWV3L2ltYWdlcy9ibGFua19iZy5wbmdcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgdXJsID0gcGQoeCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKHgsICcubm9TY29yZSYmVGV4dCcpO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgZGVzYzogc2NvcmUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4sIHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R1cmwnLCB1KVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lLCB1cmwpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gaG9tZSgpIHtcXG4gICAgICAgIFsn55S15b2xI21vdmllJywgJ+eUteinhuWJpyN0dicsICfnuqrlvZXniYcjZG9jJywgJ+WKqOa8qyNjb21pYyddLm1hcCh4ID0+IHtcXG5cXG4gICAgICAgICAgICBzZXRMaXN0cyh4KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBcXG4gICAgdmFyIHBhZ2U9TVlfUEFHRTtcXG4gICAgbGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsIE1ZX1VSTCk7XFxuICAgIGlmKHBhZ2U+MSl7XFxuICAgICAgICAvL2xvZyh0cnVlX3VybClcXG4gICAgICAgIHRydWVfdXJsPXRydWVfdXJsK2AvcGFnZV8ke3BhZ2V9Lmh0bWxgXFxuICAgICAgICAvL2xvZyh0cnVlX3VybClcXG4gICAgfVxcbiAgICB2YXIgaHRtbCA9ZmV0Y2godHJ1ZV91cmwpLnJlcGxhY2UoJyUnLCcnKTtcXG4gICAgLy9sb2coaHRtbClcXG4gICAgXFxuICAgIFxcbiAgICBjb25zdCDliIbnsbvpopzoibIgPSBnZXRSYW5nZUNvbG9ycygpO1xcbiAgICBjb25zdCDlpKfnsbvlrprkvY0gPSAnLndfMTAwJztcXG4gICAgY29uc3Qg5ou85o6l5YiG57G7ID0gJ2JvZHkmJi55X2ZpbHRlck1lbnU6bnRoLWNoaWxkKG4rMik+ZGl2PmRpdic7XFxuICAgIGNvbnN0IOWwj+exu+WumuS9jSA9ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjliIbnsbspKSc7XFxuICAgIGNvbnN0IOWIhuexu+agh+mimCA9ICdhJiZUZXh0JztcXG4gICAgY29uc3Qg5YiG57G76ZO+5o6lID0gJ2EmJmhyZWYnO1xcblxcbiAgICAvL+WKqOaAgeWIhuexu1xcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2R0ZmwnKSkucnVsZSk7XFxuICAgIFxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5lYWNoJylcXG5cXG4gICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICB2YXIgbmFtZSA9IHBkZmgoeCwgJ2EmJnRpdGxlJylcXG4gICAgICAgIGxldCBpbWcgPSBwZCh4LCAnaW1nJiZzcmN8fGltZyYmZGF0YS11cmwnKTtcXG4gICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBpbWcgPSBcXFwiaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL1ZpZXcvaW1hZ2VzL2JsYW5rX2JnLnBuZ1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdXJsID0gcGQoeCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgIGxldCBzY29yZSA9IHBkZmgoeCwgJy5ub1Njb3JlJiZUZXh0Jyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgIGRlc2M6IHNjb3JlLFxcbiAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4sIHUpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdkdXJsJywgdSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgbmFtZSwgdXJsKVxcbiAgICAgICAgfSlcXG4gICAgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIHliIbnsbtcIixcInBhdGhcIjpcImR0ZmxcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0wqBlbXB0ecKgPcKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuaWbCoCh0eXBlb2Yo5ou85o6l5YiG57G7KcKgIT3CoCd1bmRlZmluZWQnwqAmJsKg5ou85o6l5YiG57G7wqAhPcKgJycpwqB7XFxuwqDCoMKgwqB2YXLCoGNhdGVnb3JpZXPCoD3CoHBkZmEoaHRtbCzCoOWkp+exu+WumuS9jSkuY29uY2F0KHBkZmEoaHRtbCzCoOaLvOaOpeWIhuexuykpXFxufcKgZWxzZcKge1xcbsKgwqDCoMKgdmFywqBjYXRlZ29yaWVzwqA9wqBwZGZhKGh0bWwswqDlpKfnsbvlrprkvY0pXFxufVxcblxcbmxldMKgaW5pdF9jYXRlwqA9wqBbXVxcblxcbmZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICBpbml0X2NhdGUucHVzaChcXFwiMFxcXCIpXFxufVxcblxcbmNvbnN0wqBmb2xkwqA9wqBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLMKgXFxcIjBcXFwiKVxcbmNvbnN0wqBjYXRlX3RlbXBfanNvbsKgPcKgZ2V0TXlWYXIoTVlfUlVMRS50aXRsZSzCoEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuY29uc3TCoGNhdGVfdGVtcMKgPcKgSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG5cXG5cXG5pZsKgKHBhcnNlSW50KHBhZ2UpwqA9PT3CoDEpwqB7XFxuICAgIGQucHVzaCh7XFxuICAgIGNvbF90eXBlOidiaWdfYmxhbmtfYmxvY2snXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgIGNvbF90eXBlOidiaWdfYmxhbmtfYmxvY2snXFxuICAgIH0pXFxuICAgIFxcbsKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgdGl0bGU6wqBmb2xkwqA9PT3CoCcxJ8KgP8KgJ+KAnOKAnOKAneKAnTxiPifCoCvCoCdXJy5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKcKgK8KgJzwvYj4nwqA6wqAn4oCc4oCc4oCd4oCdPGI+J8KgK8KgJ00nLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpwqArwqAnPC9iPicsXFxuwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQoKS5sYXp5UnVsZSgoZm9sZCnCoD0+wqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoTVlfUlVMRS5ncm91cCzCoGZvbGTCoD09PcKgJzEnwqA/wqAnMCfCoDrCoCcxJyk7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoH0swqBmb2xkKSxcXG7CoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxuwqDCoMKgwqB9KVxcbsKgwqDCoMKgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSzCoGluZGV4KcKgPT7CoHtcXG7CoMKgwqDCoMKgwqDCoMKgbGV0wqBzdWJfY2F0ZWdvcmllc8KgPcKgcGRmYShjYXRlZ29yeSzCoOWwj+exu+WumuS9jSk7XFxuwqDCoMKgwqDCoMKgwqDCoGlmwqAoaW5kZXjCoD09PcKgMCnCoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLMKga2V5KcKgPT7CoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldMKgdGl0bGXCoD3CoHBkZmgoaXRlbSzCoOWIhuexu+agh+mimClcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZcKgPcKgdGl0bGUucmVwbGFjZShuZXfCoFJlZ0V4cCjmjpLpmaQswqBcXFwiZ1xcXCIpLMKgXFxcIlxcXCIpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZTrCoGtleS50b1N0cmluZygpwqA9PT3CoGNhdGVfdGVtcFtpbmRleF3CoD/CoFxcXCLigJzigJzigJ3igJ1cXFwiwqArwqB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKcKgOsKgdGl0bGUsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQocGQoaXRlbSzCoOWIhuexu+mTvuaOpSnCoCvCoCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldMKgbmV3X2NhdGXCoD3CoFtdXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLMKgaW5kZXgpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmV3X2NhdGUucHVzaChpbmRleMKgPT09wqAwwqA/wqBwYXJhbXMua2V5LnRvU3RyaW5nKCnCoDrCoFxcXCIwXFxcIilcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dE15VmFyKE1ZX1JVTEUudGl0bGUswqBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoTVlfUlVMRS51cmwswqBpbnB1dClcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWZyZXNoUGFnZSh0cnVlKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0swqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2F0ZV90ZW1wOsKgY2F0ZV90ZW1wLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtleTrCoGtleSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdlOsKgcGFnZSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgJ3Njcm9sbF9idXR0b24nLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb2xfdHlwZTrCoFxcXCJibGFua19ibG9ja1xcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXG7CoMKgwqDCoMKgwqDCoMKgfcKgZWxzZcKgaWbCoChmb2xkwqA9PT3CoCcxJynCoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLMKga2V5KcKgPT7CoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldMKgdGl0bGXCoD3CoHBkZmgoaXRlbSzCoOWIhuexu+agh+mimClcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZcKgPcKgdGl0bGUucmVwbGFjZShuZXfCoFJlZ0V4cCjmjpLpmaQswqBcXFwiZ1xcXCIpLMKgXFxcIlxcXCIpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZTrCoGtleS50b1N0cmluZygpwqA9PT3CoGNhdGVfdGVtcFtpbmRleF3CoD/CoFxcXCLigJzigJzigJ3igJ1cXFwiwqArwqB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKcKgOsKgdGl0bGUsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQocGQoaXRlbSzCoOWIhuexu+mTvuaOpSnCoCvCoCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XcKgPcKgcGFyYW1zLmtleS50b1N0cmluZygpXFxuXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoTVlfUlVMRS50aXRsZSzCoEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dE15VmFyKE1ZX1JVTEUudXJsLMKgaW5wdXQpXFxuXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UodHJ1ZSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm7CoFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LMKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhdGVfdGVtcDrCoGNhdGVfdGVtcCxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbmRleDrCoGluZGV4LFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtleTrCoGtleSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdlOsKgcGFnZSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgJ3Njcm9sbF9idXR0b24nLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb2xfdHlwZTrCoFxcXCJibGFua19ibG9ja1xcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXG7CoMKgwqDCoMKgwqDCoMKgfVxcbsKgwqDCoMKgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI3LuWcn+aLqOm8oFwiLFwicGF0aFwiOlwidGJzZHlcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkdXJsID0gZ2V0TXlWYXIoXFxcImR1cmxcXFwiLCBcXFwiXFxcIik7XFxuaWYgKGR1cmwgIT0gJycpIHtcXG4gICAgTVlfVVJMID0gZHVybDtcXG4gICAgLy9sb2coZHVybClcXG5cXG4gICAgbGV0IHVybCA9IGR1cmw7XFxuICAgIGxldCBpZCA9IHVybDtcXG4gICAgbGV0IG5hbWUgPSBzO1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICB2YXIgaHRtbCA9ICcnXFxuICAgIH1cXG5cXG4gICAgdmFyIHJ1bGUgPSBNWV9SVUxFLnRpdGxlXFxuICAgIGxldCBkZXNjID0gcGRmaChodG1sLCAnLnZpZGVvX3Bsb3RfaW5mb19jb250ZW50JiZUZXh0Jyk7XFxuICAgIGxldCBzY29yZSA9IHBkZmgoaHRtbCwgJy52aWRlb19wb2ludCYmVGV4dCcpO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgoaHRtbCwgJy52aWRlb19pbmZvX3RpdGxlX3RleHQmJlRleHQnKSxcXG4gICAgICAgIGltZzogcGRmaChodG1sLCAnLnZpZGVvX2NvdmVyX2ltZ19ib3gmJmltZyYmZGF0YS11cmwnKSxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnLFxcbiAgICAgICAgZGVzYzogJ+ivhOWIhjonICsgc2NvcmUgKyAnXFxcXG7kuLvmvJQ6JyArIGRlc2MsXFxuICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IHVybCxcXG4gICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcblxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi52aWRlb19kb3dubG9hZF9saW5rX2l0ZW0nKVxcbiAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgd3JhcDFcXG4gICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG5cXG4gICAgICAgICAgICBsaXN0ID0gbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJy52aWRlb19kb3dubG9hZF9saW5rX25hbWVfdGV4dCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBsZXQgd2ViID0gcGRmaChpdCwgJy5yZXNvdXJjZV93ZWJzaXRlX25hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgbGV0IGltZyA9IHBkKGl0LCAnLnZpZGVvX2xhYmVscyYmaW1nJiZzcmMnKTtcXG5cXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJoaWtlcjovL3BhZ2UvcD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZ1PVxcXCIgKyBiYXNlNjRFbmNvZGUodSk7XFxuICAgICAgICAgICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwMSh3ZWIgKyAnLScgKyB0LCBzKSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWI6IHdlYixcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQgPSBkLmNvbmNhdChsaXN0KVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKVxcbn1cXG5zID0gZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKTtcXG5sZXQgciA9IFxcXCJcXFwiO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIHZhciBwYWdlID0gTVlfUEFHRTtcXG4gICAgTVlfVVJMID0gYGh0dHBzOi8vd3d3LnRic2R5LmNvbS9zZWFyY2guaHRtbD9rZXl3b3JkPSR7c30mcGFnZWQ9JHtwYWdlfSZjYXRlZ29yeT1gO1xcbiAgICAvL2xvZyhNWV9VUkwpXFxuICAgIGxldCBodG1sID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuc2VhcmNoX3Jlc3VsdF9pdGVtJylcXG5cXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXBcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG5cXG4gICAgZm9yIChsZXQgaXQgb2YgbGlzdCkge1xcbiAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCAnLnNlYXJjaF9yZXN1bHRfdGl0bGUmJlRleHQnKTtcXG4gICAgICAgIGxldCBpbWcgPSBwZChpdCwgJ2ltZyYmc3JjJyk7XFxuICAgICAgICBpZiAoaW1nID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgaW1nID0gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdXJsID0gcGQoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICBsZXQgZGVzYyA9IHBkZmEoaXQsICdib2R5JiYuc2VhcmNoX3Jlc3VsdF9pdGVtJiYuc2VhcmNoX3Jlc3VsdF9zdWJfaW5mb19saW5lJiYudmlkZW9fYWN0b3InKS5tYXAoeCA9PiBwZGZoKHgsICdzcGFuJiZUZXh0JykpLmpvaW4oJyAnKTtcXG4gICAgICAgIGxldCBzY29yZSA9IHBkZmgoaXQsICcuc2VhcmNoX3ZpZGVvX2ltZ19wb2ludCYmVGV4dCcpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogd3JhcChuYW1lLCBzKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJyxcXG4gICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICBkZXNjOiAn6K+E5YiGOicgKyBzY29yZSArICdcXFxcbuS4u+a8lDonICsgZGVzYyxcXG4gICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocnVsZSwgdXJsLCBzLCBuYW1lKSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBmaW5kSXRlbXNCeUNscyh1cmwpO1xcbiAgICAgICAgICAgICAgICBpZiAoISFjbHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyh1cmwpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYudmlkZW9fZG93bmxvYWRfbGlua19pdGVtJylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAxXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSBwZGZoKGl0LCAnLnZpZGVvX2Rvd25sb2FkX2xpbmtfbmFtZV90ZXh0JiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2ViID0gcGRmaChpdCwgJy5yZXNvdXJjZV93ZWJzaXRlX25hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBwZChpdCwgJy52aWRlb19sYWJlbHMmJmltZyYmc3JjJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHdyYXAxKHdlYiArICctJyArIHQsIHMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViOiB3ZWIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkLCBsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSwgdXJsLCBzLCBuYW1lKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBzZXRSZXN1bHQoZClcXG59IGVsc2Uge1xcblxcbn1cXG5cXG5pZiAoZ2V0SXRlbSgnaG9tZScsICflhbMnKSA9PSAn5byAJykge1xcbiAgICBsZXQgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy50YnNkeS5jb20vJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIGZ1bmN0aW9uIHNldExpc3RzKGl0ZW0pIHtcXG4gICAgICAgIE1ZX1VSTCA9ICdodHRwczovL3d3dy50YnNkeS5jb20vJztcXG4gICAgICAgIHZhciB0aXRsZSA9IGl0ZW0ubmFtZTtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtLnNlbGVjdDtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6IGl0ZW0uaW1nLFxcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBgYm9keSYmLmNvbnRhaW5lcl9tYWluX2hvdF8ke2tleX0mJi5ob3RfcmVzb3VyY2Vfb25lYClcXG5cXG4gICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnLnJlc291cmNlX25hbWUmJlRleHQnKVxcbiAgICAgICAgICAgIGxldCBpbWcgPSBwZCh4LCAnLnJlc291cmNlX3Bvc3RlcnMmJmRhdGEtdXJsJyk7XFxuICAgICAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBpbWcgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHVybCA9IHBkKHgsICdhJiZocmVmJyk7XFxuXFxuICAgICAgICAgICAgbGV0IHNjb3JlID0gcGRmaCh4LCAnLnVwZGF0ZV90aXB8fC5yZXNvdXJjZV9zY29yZXx8aW1nJiZUZXh0Jyk7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBzY29yZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobiwgdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZHVybCcsIHUpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBbe1xcbiAgICAgICAgbmFtZTogJ+eDremXqOeUteinhuWJpycsXFxuICAgICAgICBzZWxlY3Q6ICd0dnMnLFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly93d3cudGJzZHkuY29tL2ltZy9tcnN3L3dlYi9pbmRleC9pbmRleF90di5zdmcnLFxcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiAn54Ot6Zeo55S15b2xJyxcXG4gICAgICAgIHNlbGVjdDogJ21vdmllcycsXFxuICAgICAgICBpbWc6ICdodHRwczovL3d3dy50YnNkeS5jb20vaW1nL21yc3cvd2ViL2luZGV4L2luZGV4X212LnN2ZydcXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogJ+eDremXqOWKqOa8qycsXFxuICAgICAgICBzZWxlY3Q6ICdhbmltZXMnLFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly93d3cudGJzZHkuY29tL2ltZy9tcnN3L3dlYi9pbmRleC9pbmRleF9zaG93LnN2ZydcXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogJ+eDremXqOe7vOiJuicsXFxuICAgICAgICBzZWxlY3Q6ICd2YXJpZXR5cycsXFxuICAgICAgICBpbWc6ICdodHRwczovL3d3dy50YnNkeS5jb20vaW1nL21yc3cvd2ViL2luZGV4L2luZGV4X3JlY29yZHMuc3ZnJ1xcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiAn54Ot6Zeo57qq5b2V54mHJyxcXG4gICAgICAgIHNlbGVjdDogJ2RvY3VtZW50YXJ5cycsXFxuICAgICAgICBpbWc6ICdodHRwczovL3d3dy50YnNkeS5jb20vaW1nL21yc3cvd2ViL2luZGV4L2luZGV4X3JlY29yZHMuc3ZnJyxcXG4gICAgfV0ubWFwKHggPT4ge1xcblxcbiAgICAgICAgc2V0TGlzdHMoeClcXG4gICAgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIHliIbnsbtKc29uXCIsXCJwYXRoXCI6XCJqZHRmbFwiLFwicnVsZVwiOlwianM6XFxuY29uc3TCoGVtcHR5wqA9wqBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuXFxuaWbCoCh0eXBlb2YoSnNvbuaLvOaOpSnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoEpzb27mi7zmjqXCoCE9wqAnJynCoHtcXG4gICAgXFxuICAgIHZhciBjYXRlZ29yaWVzanNvbj1UcnVlSnNvbltKc29u5aSn57G7XTtcXG4gICAgXFxuICAgIGlmKFRydWVKc29uW0pzb27mi7zmjqVdLmNvbnN0cnVjdG9yICA9PSBPYmplY3Qpe1xcbiAgICB2YXIgaXRlbWpzb249T2JqZWN0LmtleXMoVHJ1ZUpzb25bSnNvbuaLvOaOpV0pLm1hcCh4PT5PYmplY3QudmFsdWVzKFRydWVKc29uW0pzb27mi7zmjqVdW3hdKS5tYXAoej0+SlNPTi5zdHJpbmdpZnkoeikpLmpvaW4oSnNvbuaLhuWIhikpXFxuICAgIH1lbHNlIGlmKFRydWVKc29uW0pzb27mi7zmjqVdLmNvbnN0cnVjdG9yICA9PSBBcnJheSl7XFxuICAgICB2YXIgaXRlbWpzb249VHJ1ZUpzb25bSnNvbuaLvOaOpV1cXG4gICAgfVxcbiAgIFxcbiAgICBjYXRlZ29yaWVzanNvbj1jYXRlZ29yaWVzanNvbi5jb25jYXQoaXRlbWpzb24pO1xcbiAgICBcXG59wqBlbHNlwqB7XFxuwqDCoMKgwqB2YXLCoGNhdGVnb3JpZXNqc29uPVRydWVKc29uW0pzb27lpKfnsbtdO1xcbn1cXG5cXG4vL2xvZyhjYXRlZ29yaWVzanNvbilcXG5cXG5sZXTCoGluaXRfY2F0ZcKgPcKgW107XFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxuICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIik7XFxufVxcblxcbmNvbnN0wqBmb2xkwqA9wqBnZXRWYXIoTVlfUlVMRS5ncm91cCzCoFxcXCIwXFxcIik7XFxuY29uc3TCoGNhdGVfdGVtcF9qc29uwqA9wqBnZXRWYXIoTVlfUlVMRS50aXRsZSzCoEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpO1xcbmNvbnN0wqBjYXRlX3RlbXDCoD3CoEpTT04ucGFyc2UoY2F0ZV90ZW1wX2pzb24pO1xcblxcbmlmwqAocGFyc2VJbnQocGFnZSnCoD09PcKgMSnCoHtcXG7CoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoHRpdGxlOsKgZm9sZMKgPT09wqAnMSfCoD/CoCfigJzigJzigJ3igJ0nwqArwqDliIbnsbvlsZXlvIAuZm9udGNvbG9yKFxcXCIjRkYwMDAwXFxcIinCoCvCoCcnwqA6wqAn4oCc4oCc4oCd4oCdJ8KgK8Kg5YiG57G75oqY5Y+gLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpwqArwqAnJyxcXG7CoMKgwqDCoMKgwqDCoMKgdXJsOsKgJCgpLmxhenlSdWxlKChmb2xkKcKgPT7CoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRWYXIoTVlfUlVMRS5ncm91cCzCoGZvbGTCoD09PcKgJzEnwqA/wqAnMCfCoDrCoCcxJyk7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoH0swqBmb2xkKSxcXG7CoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxuwqDCoMKgwqB9KTtcXG7CoMKgwqDCoGNhdGVnb3JpZXNqc29uLmZvckVhY2goKGNhdGVnb3J5LMKgaW5kZXgpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqBsZXTCoHN1Yl9jYXRlZ29yaWVzwqA9wqBjYXRlZ29yeS5zcGxpdChKc29u5ouG5YiGKTtcXG7CoMKgwqDCoMKgwqDCoMKgaWbCoChpbmRleMKgPT09wqAwKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0swqBrZXkpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqB0aXRsZcKgPcKgaXRlbS5zcGxpdChKc29u5Y2V6aG5KVswXTtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZcKgPcKgdGl0bGUucmVwbGFjZShuZXfCoFJlZ0V4cCjmjpLpmaQswqBcXFwiZ1xcXCIpLMKgXFxcIlxcXCIpO1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfVxcbiAgICAgICAgICAgICAgICBpZih0aXRsZT09Jycpe1xcbiAgICAgICAgICAgICAgICAgIHJldHVyblxcbiAgICAgICAgICAgICAgICB9XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZTrCoGtleS50b1N0cmluZygpwqA9PT3CoGNhdGVfdGVtcFtpbmRleF3CoD/CoFxcXCLigJzigJzigJ3igJ1cXFwiwqArwqB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKcKgOsKgdGl0bGUsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVybDrCoGl0ZW0uc3BsaXQoSnNvbuWNlemhuSlbMV3CoCvCoCQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcyxsaXN0KcKgPT7CoHtcXG4gICAgXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignaW5kZXgnLHBhcmFtcy5rZXkpXFxuXFxuICAgICAgICAgICAgICAgICAgICBsaXN0Lm1hcChrZXk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGtleSk7XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldMKgbmV3X2NhdGXCoD3CoFtdXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLMKgaW5kZXgpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmV3X2NhdGUucHVzaChpbmRleMKgPT09wqAwwqA/wqBwYXJhbXMua2V5LnRvU3RyaW5nKCnCoDrCoFxcXCIwXFxcIilcXG4gICAgIFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0VmFyKE1ZX1JVTEUudGl0bGUswqBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0VmFyKE1ZX1JVTEUudXJsLMKgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIm15dHlwZVxcXCIsaW5wdXQpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UodHJ1ZSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm7CoFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LMKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhdGVfdGVtcDrCoGNhdGVfdGVtcCxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZXk6wqBrZXksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFnZTrCoHBhZ2UsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0sSnNvbuWIl+ihqCksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgJ3Njcm9sbF9idXR0b24nLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb2xfdHlwZTrCoFxcXCJibGFua19ibG9ja1xcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXG7CoMKgwqDCoMKgwqDCoMKgfcKgZWxzZcKgaWbCoChmb2xkwqA9PT3CoCcxJynCoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLMKga2V5KcKgPT7CoHtcXG4gICAgICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKGl0ZW0pXFxuICAgIFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqB0aXRsZcKgPSBvYmpbJ25hbWUnXVxcbiAgICAgICAgICAgICAgICBcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcbiAgICBcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGl0bGXCoD3CoHRpdGxlLnJlcGxhY2UobmV3wqBSZWdFeHAo5o6S6ZmkLMKgXFxcImdcXFwiKSzCoFxcXCJcXFwiKVxcbiAgICAgICAgICAgXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9XFxuICAgICAgICAgICAgICAgICAgIGlmKHRpdGxlPT0nJyl7XFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxcbiAgICAgICAgICAgICAgICAgICAgfVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGl0bGU6wqBrZXkudG9TdHJpbmcoKcKgPT09wqBjYXRlX3RlbXBbaW5kZXhdwqA/wqBcXFwi4oCc4oCc4oCd4oCdXFxcIsKgK8KgdGl0bGUuZm9udGNvbG9yKOWIhuexu+minOiJsinCoDrCoHRpdGxlLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1cmw6wqAkKGl0ZW0rJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcynCoD0+wqB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmw9b2JqWyd1cmwnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlPW9ialsndHlwZSddXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdwqA9wqBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRWYXIoTVlfUlVMRS50aXRsZSzCoEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dFZhcihNWV9SVUxFLnVybCzCoHVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlIT0nJz90cnVlOmZhbHNlKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleT10eXBlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZT11cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoa2V5LHZhbHVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWZyZXNoUGFnZSh0cnVlKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0swqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2F0ZV90ZW1wOsKgY2F0ZV90ZW1wLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluZGV4OsKgaW5kZXgsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2V5OsKga2V5LFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhZ2U6wqBwYWdlLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgXFxcImJsYW5rX2Jsb2NrXFxcIlxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pO1xcbsKgwqDCoMKgwqDCoMKgwqB9XFxuwqDCoMKgwqB9KVxcbn1cIn1dIiwiaWNvbiI6IiIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment