Advertisement
xiaomianao666

邀您一起看:酷扑TV

Dec 15th, 2021
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥酷扑TV@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkpTT07mjqXlj6PmlbDmja5cIixcInBhdGhcIjpcIlJlc0NvZGVcIixcInJ1bGVcIjpcIntbXX1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic2VhclwiLFwicnVsZVwiOlwidmFyIHJlcyA9IHt9O1xcbnZhciBpdGVtcyA9IFtdO1xcbi8v6K6+572u5pCc57Si57q/56iLXFxudmFyIHNzbW9kZSA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuc3Ntb2RlO1xcbnZhciBrZXkgPSBNWV9VUkwuc3BsaXQoJyQkJCcpWzFdO1xcbi8vc2V0RXJyb3IobGUpO1xcbmlmIChzc21vZGUgPT0gJzAnKSB7XFxuICAgIHNldFBhZ2VUaXRsZShrZXkgKyAnIOeahOaQnOe0oue7k+aenCcpXFxufTtcXG4vL3ZhciBodG1sID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvUmVzQ29kZScsIHt9KSkucnVsZSk7XFxudmFyIGh0bWwgPSBKU09OLnBhcnNlKGZldGNoQ2FjaGUoJ2h0dHBzOi8vaW5tZW1vcnkuY29kaW5nLm5ldC9wL0luTWVtb3J5L2QvTUJyb3dzZXIvZ2l0L3Jhdy9tYXN0ZXIvQXBwRmlsZS9BUFDlvbHop4bliJfooagnLCAyNCkpO1xcblxcbnZhciBkbGlzdCA9IGh0bWwuZGF0YTtcXG5cXG5mdW5jdGlvbiByYW5kb21Tb3J0MyhhcnIpIHtcXG4gICAgYXJyLnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gYXJyO1xcbn1cXG5cXG4vL+aJk+S5semhuuW6j1xcbnZhciByYW5kb20gPSB0cnVlO1xcbmlmIChzc21vZGUgPT0gJzEnIHx8IE1ZX1RZUEUgPT0gJ2hvbWUnKSB7XFxuICAgIGZvciAodmFyIGwgPSAwOyBsIDwgZGxpc3QubGVuZ3RoOyBsKyspIHtcXG4gICAgICAgIHZhciBsaXN0ID0gZGxpc3RbbF0ubGlzdDtcXG4gICAgICAgIHZhciB0eXRpdCA9IGRsaXN0W2xdLnRpdGxlXFxuICAgICAgICBpZiAocmFuZG9tKSB7XFxuICAgICAgICAgICAgbGV0IGsgPSBnZXRWYXIoTVlfUlVMRS50aXRsZSArIFxcXCItXFxcIiArIHR5dGl0LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgaWYgKGsgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IHJhbmRvbVNvcnQzKGxpc3QpXFxuICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnRpdGxlICsgXFxcIi1cXFwiICsgdHl0aXQsIEpTT04uc3RyaW5naWZ5KGxpc3QpKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxpc3QgPSBKU09OLnBhcnNlKGspXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcblxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IE1ZX1RZUEUgPT0gXFxcImhvbWVcXFwiID8gXFxcIueCueWHu+afpeeciyBcXFwiICsgdHl0aXQgKyBcXFwiIOWIhuexuyDigJzigJxcXFwiICsga2V5ICsgXFxcIuKAneKAnSDnmoTogZrmkJznu5PmnpxcXFwiIDogXFxcIueCueWHu+afpeeciyBcXFwiICsgdHl0aXQgKyBcXFwiIOWIhuexuyBcXFwiICsga2V5ICsgXFxcIiDnmoTogZrmkJznu5PmnpxcXFwiLFxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSQkJCcgKyBrZXkgKyAnJCQkZnlwYWdlJCQkJykucnVsZSgobGlzdCwgdHl0aXQpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IHt9O1xcbiAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgLy/lj5bmkJzntKLnur/nqIvorr7nva5cXG4gICAgICAgICAgICAgICAgdmFyIHNzeGMgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLnNzY291bnQ7XFxuICAgICAgICAgICAgICAgIC8v6K6+572u6LaF5pe25pe26Ze077yM6LaK5bCP6LaK5b+r77yM5Y2V5L2N5q+r56eSXFxuICAgICAgICAgICAgICAgIC8vdmFyIHRpbWVvdSA9IDUwMDA7XFxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBNWV9VUkwuc3BsaXQoJyQkJCcpWzFdO1xcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gTVlfVVJMLnNwbGl0KCckJCQnKVsyXTtcXG4gICAgICAgICAgICAgICAgdmFyIGxlID0gcGFyc2VJbnQobnVtICogc3N4Yyk7XFxuICAgICAgICAgICAgICAgIHZhciBEYXRhID0gW107XFxuICAgICAgICAgICAgICAgIHZhciBUaXQgPSBbXTtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGxlIC0gc3N4YzsgaiA8IGxlOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChqIDwgbGlzdC5sZW5ndGgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IGxpc3Rbal0udXJsO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvQVBQ5b2x6KeGLy50ZXN0KHR5dGl0KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluay5pbmRleE9mKCdhcGkucGhwL2FwcC8nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICdzZWFyY2g/cGc9MSZ0ZXh0PScgKyBrZXkgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluay5pbmRleE9mKCd4Z2FwcC5waHAvdjEvJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnc2VhcmNoP3BnPTEmdGV4dD0nICsga2V5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdChsaW5rKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnL2xpc3Q/cGFnZT1meXBhZ2UmbGltaXQ9MTAmd2Q9JyArIGtleTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICc/cGFnZT0xJmxpbWl0PTEwJndkPScgKyBrZXk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9UVuW9seinhi8udGVzdCh0eXRpdCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC8xOWp4fDI5M3lzfHpoYWlrYW55c3xqaVxcXFwtZGluZ1xcXFwtaGV8cGhvZWJlfHl1bmJvXFxcXC5ieGlufGxhbnJlbnRrfGhldGFveXN8cHh1bnwxMzlcXFxcLjE1NXxma2tkeXwwNTYxNTh8YWl4aXhpfHJ1b3hpbmV3fGZlaWZhbjEyM3xzaXFpdHYvLnRlc3QobGluaykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnP2FjPWxpc3Qmem09JyArIGtleSArICcmcGFnZT0xJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnP2FjPWxpc3Qmd2Q9JyArIGtleSArICcmcGFnZT0xJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0RhdGEucHVzaCh7dXJsOiBobXVybCxvcHRpb25zOiB7aGVhZGVyczoge1xcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwifSx0aW1lb3V0OiB0aW1lb3V9fSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0YS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBobXVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBUaXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdDogbGlzdFtqXS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluazogbGluayxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwbm06IHR5dGl0XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9IC8vaWZcXG4gICAgICAgICAgICAgICAgfSAvL2ZvciBqXFxuXFxuICAgICAgICAgICAgICAgIC8vLS0t5Luj56CB5YiG55WM57q/LS0tLSBcXG4gICAgICAgICAgICAgICAgaWYgKERhdGEgIT0gJycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBiaHRtbCA9IGJhdGNoRmV0Y2goRGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAvL3dyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwRXJyb3IuanNvblxcXCIsSlNPTi5zdHJpbmdpZnkoYmh0bWwpKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYmh0bWwubGVuZ3RoOyBrKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGJodG1sW2tdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZygwLCAyKSA9PSAnXFxcXHJcXFxcbicgPyBodG1sLnJlcGxhY2UoJ1xcXFxyXFxcXG4nLCAnJykgOiBodG1sO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9idHdhZi8udGVzdChodG1sKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goRGF0YVtrXS51cmwgKyAnJmJ0d2FmJyArIGh0bWwubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7fSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodG1sID09IFxcXCJcXFwiIHx8IGh0bWwgPT0gbnVsbCB8fCBodG1sLnN1YnN0cmluZygwLCA1KSA9PSAnZXJyb3InIHx8ICFodG1sLnN0YXJ0c1dpdGgoJ3snKSkge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBUaXRba10udGl0ICsgJyAnICsgJ+acquaQnOe0ouWIsO+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IERhdGFba10udXJsICsgYEBsYXp5UnVsZT0uanM6aW5wdXQuc3BsaXQoJzsnKVswXWAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChodG1sLmxlbmd0aCA8IDgwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFRpdFtrXS50aXQgKyAnICcgKyAn6L+U5Zue5pWw5o2u5LiN5a6M5pW077yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogRGF0YVtrXS51cmwgKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZXQgPSBUaXRba10udHlwbm07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZG9taW4gPSBUaXRba10ubGluaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh0bWwubGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBodG1sLmxpc3Q7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLmxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhLmxpc3Q7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QubGVuZ3RoIDwgMSkge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFRpdFtrXS50aXQgKyAnICcgKyAn5YiX6KGo5bCP5LqOMe+8jOaXoOazleWxleekuu+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBEYXRhW2tdLnVybCArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1RW5b2x6KeGLy50ZXN0KHR5cGV0KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS5waWM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSBsaXN0W2ldLm5leHRsaW5rO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS5zdGF0ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9BUFDlvbHop4YvLnRlc3QodHlwZXQpKSB7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZG9taW4uaW5kZXhPZignYXBpLnBocC9hcHAvJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS52b2RfcGljO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9mYW50dWFuLy50ZXN0KHRkb21pbikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gJ2h0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL2FwaS5waHAvYXBwL3ZpZGVvX2RldGFpbD9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAndmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW0gPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZG9taW4uaW5kZXhPZigneGdhcHAucGhwL3YxLycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnZvZF9uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAndmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW0gPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS52b2RfcGljO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdCh0ZG9taW4pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICcvZGV0YWlsSUQ/dm9kX2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICcvZGV0YWlsP3ZvZF9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0uc3RhdGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2codmlkKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IE1ZX1RZUEUgPT0gXFxcImhvbWVcXFwiID8gdGl0bGUucmVwbGFjZShrZXksICfigJzigJwnICsga2V5ICsgJ+KAneKAnScpICsgJ1xcXFxuJyArIHJlbSA6IHRpdGxlICsgcmVtLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwaWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHZpZCArICc7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JykucnVsZSgodHlwZXQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJzI1NSYmZmxvYXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG15dXJsID0gTVlfVVJMLm1hdGNoKC8oW1xcXFxTXSo/OlxcXFwvXFxcXC9bXFxcXFNdKj8pXFxcXC8vKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvQVBQ5b2x6KeGLy50ZXN0KHR5cGV0KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvVFblvbHop4YvLnRlc3QodHlwZXQpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdHZtb3ZsaXN0Jywge30pKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gaXRlbXM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHR5cGV0KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb250ZW50OiByZW0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHR5cGV0ICsgJyA9PiAnICsgVGl0W2tdLnRpdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy9mb3IgaVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vaWYgbGlzdC5sZW5ndGhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IC8vZm9yIGsgYmh0bWwubGVuZ3RoXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXG4gICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcbiAgICAgICAgICAgIH0sIGxpc3QsIHR5dGl0KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG4gICAgICAgIH0pO1xcblxcbiAgICB9IC8vZm9yIGlcXG59OyAvL2VuZCBtb2RlIDFcXG5cXG5pZiAoc3Ntb2RlID09ICcwJyB8fCBNWV9UWVBFID09ICdob21lJykge1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IGRsaXN0W2ldLmxpc3Q7XFxuICAgICAgICB2YXIgdHl0aXQgPSBkbGlzdFtpXS50aXRsZVxcbiAgICAgICAgaWYgKHJhbmRvbSkge1xcbiAgICAgICAgICAgIGxldCBrID0gZ2V0VmFyKE1ZX1JVTEUudGl0bGUgKyBcXFwiLVxcXCIgKyB0eXRpdCwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGlmIChrID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxpc3QgPSByYW5kb21Tb3J0MyhsaXN0KVxcbiAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS50aXRsZSArIFxcXCItXFxcIiArIHR5dGl0LCBKU09OLnN0cmluZ2lmeShsaXN0KSlcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsaXN0ID0gSlNPTi5wYXJzZShrKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBNWV9UWVBFID09IFxcXCJob21lXFxcIiA/IFxcXCIg6YCJ5oup5LiA5LiqIFxcXCIrZGxpc3RbaV0udGl0bGUrXFxcIiDpobnnm67mn6XnnIsg4oCc4oCcXFxcIiArIGtleSArIFxcXCLigJ3igJ0g55qE5pCc57Si57uT5p6cXFxcIiA6IFxcXCIg6YCJ5oup5LiA5LiqIFxcXCIrZGxpc3RbaV0udGl0bGUrXFxcIiDpobnnm67mn6XnnIsgXFxcIiArIGtleSArIFxcXCIg55qE5pCc57Si57uT5p6cXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgdmFyIGxpbmsgPSBsaXN0W2pdLnVybDtcXG5cXG4gICAgICAgICAgICBpZiAoL0FQUOW9seinhi8udGVzdCh0eXRpdCkpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGxpbmsuaW5kZXhPZignYXBpLnBocC9hcHAvJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnc2VhcmNoP3BnPWZ5cGFnZSZ0ZXh0PScgKyBrZXkgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluay5pbmRleE9mKCd4Z2FwcC5waHAvdjEvJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnc2VhcmNoP3BnPWZ5cGFnZSZ0ZXh0PScgKyBrZXk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGxpbmspKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICcvbGlzdD9wYWdlPWZ5cGFnZSZsaW1pdD0xMCZ3ZD0nICsga2V5O1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9wYWdlPWZ5cGFnZSZsaW1pdD0xMCZ3ZD0nICsga2V5O1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICgvVFblvbHop4YvLnRlc3QodHl0aXQpKSB7XFxuICAgICAgICAgICAgICAgIGlmICgvMTlqeHwyOTN5c3x6aGFpa2FueXN8amlcXFxcLWRpbmdcXFxcLWhlfHBob2ViZXx5dW5ib1xcXFwuYnhpbnxsYW5yZW50a3xoZXRhb3lzfHB4dW58MTM5XFxcXC4xNTV8ZmtrZHl8MDU2MTU4fGFpeGl4aXxydW94aW5ld3xmZWlmYW4xMjN8c2lxaXR2Ly50ZXN0KGxpbmspKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9hYz1saXN0JnptPScgKyBrZXkgKyAnJnBhZ2U9ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnP2FjPWxpc3Qmd2Q9JyArIGtleSArICcmcGFnZT1meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlzdFtqXS50aXRsZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBsaXN0W2pdLmltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I3gjJyArIGhtdXJsICsgJyN4IycgKyBsaW5rICsgJyN4IycgKyB0eXRpdCArICcjeCMnICsga2V5ICsgJyN4IycpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2Uvc2VhcmVyaicpO1xcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3JvdW5kX3NtYWxsXzQnXFxuICAgICAgICAgICAgICAgIC8vY29sX3R5cGU6ICd0ZXh0XzMnXFxuICAgICAgICAgICAgICAgIC8vbGluazpsaW5rLFxcbiAgICAgICAgICAgICAgICAvL3R5cGU6IGlcXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgIH0gLy9mb3IgalxcblxcblxcbiAgICB9IC8vZm9yIGlcXG5cXG59IC8vZW5kIG1vZGUgMFxcblxcblxcbnJlcy5kYXRhID0gaXRlbXM7XFxuc2V0SG9tZVJlc3VsdChyZXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiQVBQ5YiG57G75YiX6KGoXCIsXCJwYXRoXCI6XCJhcHBsaXN0ZGF0YVwiLFwicnVsZVwiOlwiaWYgKGh0bWwubGlzdCkge1xcbiAgICB2YXIgbGlzdCA9IGh0bWwubGlzdDtcXG59IGVsc2UgaWYgKGh0bWwuZGF0YSAmJiBodG1sLmRhdGEubGlzdCkge1xcbiAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcbn0gZWxzZSB7XFxuICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhO1xcbn1cXG4vL2xvZyhsaXN0KTtcXG5mb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXG4gICAgdmFyIGltZyA9IGxpc3RbaV0udm9kX3BpYztcXG4gICAgdmFyIHVybCA9IGxpc3RbaV0udm9kX2lkO1xcbiAgICB2YXIgZGVzYyA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxuICAgIGlmIChodG1sLmxpc3QpIHtcXG4gICAgICAgIC8vbG9nKCdodG1sLmxpc3QnKTtcXG4gICAgICAgIGlmICgvZmFudHVhbi8udGVzdChtdXJsKSkge1xcbiAgICAgICAgICAgIHZhciBsaW5rID0gJ2h0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL2FwaS5waHAvYXBwL3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JztcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIGlmIChodG1sLmRhdGEgJiYgaHRtbC5kYXRhLmxpc3QpIHtcXG4gICAgICAgIC8vbG9nKCdodG1sLmRhdGEubGlzdCcpO1xcbiAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdChtdXJsKSkge1xcbiAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICcvZGV0YWlsSUQ/dm9kX2lkPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX0nO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnL2RldGFpbD92b2RfaWQ9JyArIHVybCArICcmcmVsX2xpbWl0PTEwO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSc7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvL2xvZygnZWxzZScpO1xcbiAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JztcXG4gICAgfVxcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgIHBpY191cmw6IGltZyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgdXJsOiAkKGxpbmspLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnMjU1JiZmbG9hdCcsXFxuICAgICAgICAgICAgICAgIHVybDogJycsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmVmcmVzaFg1V2ViVmlldygnJyk7XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxuICAgICAgICAgICAgdmFyIG15dXJsID0gTVlfVVJMLm1hdGNoKC8oW1xcXFxTXSo/OlxcXFwvXFxcXC9bXFxcXFNdKj8pXFxcXC8vKVsxXTtcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9hcHBtb3ZsaXN0Jywge30pKS5ydWxlKTtcXG4gICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcbiAgICAgICAgICAgIHNldEhvbWVSZXN1bHQocmVzKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfM19tYXJxdWVlJ1xcbiAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJUVuWIl+ihqOino+aekFwiLFwicGF0aFwiOlwidHZsaXN0ZGF0YVwiLFwicnVsZVwiOlwidmFyIGxpc3QgPSBodG1sLmRhdGE7XFxuZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udGl0bGU7XFxuICAgIHZhciBpbWcgPSBsaXN0W2ldLnBpYztcXG4gICAgdmFyIHVybCA9IGxpc3RbaV0ubmV4dGxpbms7XFxuICAgIHZhciBkZXNjID0gbGlzdFtpXS5zdGF0ZTtcXG4gICAgdXJsID0gdXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSA/IHVybCA6IG11cmwgKyAnP2FjPWRldGFpbCZpZHM9JyArIHVybDtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICBwaWNfdXJsOiBpbWcgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgIHVybDogJCh1cmwpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoZ2V0UmVzQ29kZSgpKTtcXG4gICAgICAgICAgICB2YXIgbXl1cmwgPSBNWV9VUkwubWF0Y2goLyhbXFxcXFNdKj86XFxcXC9cXFxcL1tcXFxcU10qPylcXFxcLy8pWzFdO1xcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICAgICAgICAgIGRlc2M6ICcyNTUmJmZsb2F0JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAnJyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZWZyZXNoWDVXZWJWaWV3KCcnKTtcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90dm1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgIHJlcy5kYXRhID0gaXRlbXM7XFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zX21hcnF1ZWUnXFxuICAgIH0pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkFQUOeugOS7i+S4jumAiembhlwiLFwicGF0aFwiOlwiYXBwbW92bGlzdFwiLFwicnVsZVwiOlwiaWYgKGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxuICAgIHZhciBjb250cyA9IGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyO1xcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXG4gICAgICAgIHZhciB0YWJzID0gaHRtbC5kYXRhLnZvZF9wbGF5X2Zyb20uc3BsaXQoJyQkJCcpO1xcbiAgICB9XFxufSBlbHNlIGlmIChodG1sLmRhdGEudm9kX2luZm8gJiYgaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXG4gICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxuICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxuICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGxheV91cmwuc3BsaXQoJyQkJCcpO1xcbiAgICAgICAgdmFyIHRhYnMgPSBodG1sLmRhdGEudm9kX2luZm8udm9kX3BsYXlfZnJvbS5zcGxpdCgnJCQkJyk7XFxuICAgIH1cXG59IGVsc2Uge1xcbiAgICB2YXIgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfbGlzdDtcXG4gICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9wbGF5X3VybC5zcGxpdCgnJCQkJyk7XFxuICAgICAgICB2YXIgdGFicyA9IGh0bWwuZGF0YS52b2RfcGxheV9mcm9tLnNwbGl0KCckJCQnKTtcXG4gICAgfVxcbn1cXG5cXG4vL2xvZyhjb250cyk7XFxuXFxudmFyIHRodW1iID0gaHRtbC5kYXRhLnZvZF9pbmZvID8gaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF9waWMgOiBodG1sLmRhdGEudm9kX3BpYztcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9kbnBsdWdpbicsIHt9KSkucnVsZSk7XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiAn5Ymn5oOF566A5LuL77yaJyxcXG4gICAgZGVzYzogaHRtbC5kYXRhLnZvZF9pbmZvID8gaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF9jb250ZW50IDogaHRtbC5kYXRhLnZvZF9jb250ZW50LFxcbiAgICBwaWNfdXJsOiB0aHVtYixcXG4gICAgdXJsOiBkbnB1ZyxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXG59KTtcXG52YXIgamllayA9ICcnO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgY29udHMubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKGNvbnRzW2ldLnVybHMpIHtcXG4gICAgICAgIHZhciBsaXN0ID0gY29udHNbaV0udXJscztcXG4gICAgfSBlbHNlIGlmIChjb250c1tpXS51cmwpIHtcXG4gICAgICAgIHZhciBsaXN0ID0gY29udHNbaV0udXJsLnNwbGl0KFxcXCIjXFxcIik7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2ldLnNwbGl0KFxcXCIjXFxcIik7XFxuICAgIH1cXG4gICAgLy9zZXRFcnJvcihsaXN0Lmxlbmd0aCk7XFxuICAgIGlmIChodG1sLmRhdGEudm9kX3VybF93aXRoX3BsYXllcikge1xcbiAgICAgICAgdmFyIHB0YWIgPSBjb250c1tpXS5jb2RlID8gY29udHNbaV0uY29kZSA6IHRhYnNbaV07XFxuICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLnZvZF9pbmZvICYmIGh0bWwuZGF0YS52b2RfaW5mby52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxuICAgICAgICB2YXIgcHRhYiA9IGNvbnRzW2ldLmNvZGUgPyBjb250c1tpXS5jb2RlIDogdGFic1tpXTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHZhciBwdGFiID0gY29udHNbaV0uZnJvbSA/IGNvbnRzW2ldLmZyb20gOiB0YWJzW2ldO1xcbiAgICB9XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHB0YWIgKyAnIPCflJcnICsgW2kgKyAxXSArICcvJyArIFtjb250cy5sZW5ndGhdLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuICAgIH0pO1xcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgIGlmIChjb250c1tpXS51cmxzKSB7XFxuICAgICAgICAgICAgdmFyIHZsaW5rID0gbGlzdFtqXS51cmw7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtqXS5uYW1lO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdmxpbmsgPSBsaXN0W2pdLnNwbGl0KFxcXCIkXFxcIilbMV07XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtqXS5zcGxpdChcXFwiJFxcXCIpWzBdO1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAoaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGppZWsgPSBjb250c1tpXS5wYXJzZV9hcGk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChodG1sLmRhdGEudm9kX2luZm8gJiYgaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGppZWsgPSBjb250c1tpXS5wYXJzZV9hcGk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRzW2ldLnBsYXllcl9pbmZvLnBhcnNlMiAmJiAoY29udHNbaV0ucGxheWVyX2luZm8ucGFyc2UyKS5pbmRleE9mKFxcXCI9XFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBqaWVrID0gKGNvbnRzW2ldLnBsYXllcl9pbmZvLnBhcnNlMikubWF0Y2goLy4qP3VybD18Lio/dj18Lio/dmlkPS8pWzBdLnJlcGxhY2UoXFxcIi4uXFxcIiwgXFxcIi5cXFwiKS5yZXBsYWNlKCdqc29uYnMnLCAnJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHNbaV0ucGxheWVyX2luZm8ucGFyc2UgJiYgKGNvbnRzW2ldLnBsYXllcl9pbmZvLnBhcnNlKS5pbmRleE9mKFxcXCI9XFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBqaWVrID0gKGNvbnRzW2ldLnBsYXllcl9pbmZvLnBhcnNlKS5tYXRjaCgvLio/dXJsPXwuKj92PXwuKj92aWQ9LylbMF0ucmVwbGFjZShcXFwiLi5cXFwiLCBcXFwiLlxcXCIpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGppZWsgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL3NldEVycm9yKGppZWspOyAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgaWYgKGppZWsgIT0gJycgJiYgamllayAhPSBudWxsKSB7XFxuICAgICAgICAgICAgaWYgKGppZWsuc3Vic3RyaW5nKDAsIDQpID09ICdodHRwJykge1xcbiAgICAgICAgICAgICAgICBqaWVrID0gamllaztcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGppZWsuc3Vic3RyaW5nKDAsIDIpID09ICdcXFxcL1xcXFwvJykge1xcbiAgICAgICAgICAgICAgICBqaWVrID0gJ2h0dHBzOicgKyBqaWVrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8v5a+55aSx5pWI5o6l5Y+j6L+b6KGM5pu/5o2iXFxuICAgICAgICBpZiAoL2Nva2Vtdi8udGVzdChteXVybCkgJiYgL2Nva2VxaWV8eGlufDkwbW0vLnRlc3QocHRhYikpIHtcXG4gICAgICAgICAgICBqaWVrID0gJ2h0dHBzOi8vcGxheWVyLjkwbW0ubWUvcGxheS5waHA/dXJsPSc7XFxuICAgICAgICB9IGVsc2UgaWYgKC9qc29uXFxcXC5tM3U4XFxcXC50di8udGVzdChqaWVrKSkge1xcbiAgICAgICAgICAgIGppZWsgPSAnaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JztcXG4gICAgICAgIH0gZWxzZSBpZiAoL2NqdDUyMS8udGVzdChteXVybCkpIHtcXG4gICAgICAgICAgICBqaWVrID0gY29udHNbaV0ucGxheWVyX2luZm8ucGFyc2U7XFxuICAgICAgICB9XFxuICAgICAgICAvL+WjsOaYjumTvuaOpVxcbiAgICAgICAgdmFyIGxpbmsgPSBqaWVrICsgdmxpbms7XFxuICAgICAgICBpZiAoL1xcXFwubTN1OHxcXFxcLm1wNHxvYmpcXFxcL3Rvcy8udGVzdCh2bGluaykgJiYgL2h0dHAvLnRlc3QodmxpbmspKSB7XFxuICAgICAgICAgICAgbGluayA9IHZsaW5rO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2cobGluayk7XFxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPD0gNCkge1xcbiAgICAgICAgICAgIHZhciBjbHQgPSAndGV4dF8yJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIGNsdCA9IGlzTmFOKHRpdGxlKSA/ICdmbGV4X2J1dHRvbicgOiAndGV4dF81J1xcbiAgICAgICAgfTtcXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocHRhYiwgbGluaywgbXl1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb3BlbnVybChyZXN1cmwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1cmwubWF0Y2goL3lvdWt1fG1ndHZ8aXhpZ3VhfHFxLmNvbXxxaXlpfG1pZ3V8YmlsaWJpbGl8c29odXxwcHR2fGxlfDE5MDUuY29tLykgJiYgcmVzdXJsLnNlYXJjaCgvaHRtbHxiaWxpYmlsaS8pICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuRG4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLmVuRG47XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuRG4gPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn6LCD55So5pat5o+S6Kej5p6QJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcInZhciBjb25maWcgPVxcXCIgKyBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocmVzdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VybFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB2YXIgc3JjdXJsID0gbGluaztcXG4gICAgICAgICAgICAgICAgLy9sb2coc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgLy/liqjmgIHop6PmnpDku6PnoIHlvIDlp4tcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIC8v5aSE55CG5oyH5a6a6KeG6aKR5LiO57q/6LevXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFwubTN1OHxcXFxcLm1wNHxvYmpcXFxcL3Rvcy8udGVzdChzcmN1cmwpICYmIC9odHRwLy50ZXN0KHNyY3VybCkgJiYgIS9cXFxcLmh0bWwvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvd2tmaWxlLy50ZXN0KHNyY3VybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNyY3VybCArICc7e1JlZmVyZXJAaHR0cHM6Ly9mYW50dWFuLndrZmlsZS5jb20vfSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9kdW9kdW96eS8udGVzdChwdGFiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IGZldGNoKCdodHRwczovL3BsYXllci5kdW9kdW96eS5jb20vZGRwbGF5L2FwaS5waHA/dXJsPScgKyBzcmN1cmwsIHt9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikudXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAvXFxcXD0vLnRlc3Qoc3JjdXJsKSA/IHNyY3VybC5zcGxpdCgnPScpWzFdIDogc3JjdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyY3VybC5pbmRleE9mKFxcXCIvc2hhcmUvXFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IHNyY3VybC5zcGxpdChcXFwiL3NoYXJlXFxcIilbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYyA9IGZldGNoKHNyY3VybCwge30pLnJlcGxhY2UoXFxcInZhciBwdXJsXFxcIiwgXFxcInZhciBtYWluXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYy5pbmRleE9mKFxcXCJtYWluXFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXQgPSBmYy5tYXRjaCgvdmFyIG1haW4uKj87LylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKG1hdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxheSA9IChtYWluLmluZGV4T2YoXFxcImh0dHBcXFwiKSAhPSAtMSA/IG1haW4gOiBsaW5rICsgbWFpbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFpbiA9IGZjLm1hdGNoKC91cmw6Lio/W1xcXFwnXFxcXFxcXCJdKC4qPylbXFxcXCdcXFxcXFxcIl0vKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF5ID0gKG1haW4uaW5kZXhPZihcXFwiaHR0cFxcXCIpICE9IC0xID8gbWFpbiA6IGxpbmsgKyBtYWluKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAneDVXZWJWaWV3Oi8vJyArIChzcmN1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5rGf5rmW5b2x6KeG57q/6LevXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHB0YWIgPT0gJ3JlbnJlbm1pJyAmJiBteXVybC5zZWFyY2goL2poZHl3LykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vY2FjaGUxLmpoZHl3LnZpcDo4MDkxL3JybWkucGhwP3VybD0nICsgc3JjdXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGh0bWwpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHRhYiA9PSAnZnFmaWxtJyAmJiBteXVybC5zZWFyY2goL2poZHl3LykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vd3d3LmpoZHl3LnZpcC9qaWV4aS9mcS5waHA/dXJsPScgKyBzcmN1cmwuc3BsaXQoJ3VybD0nKVsxXSArICcmbmV4dD0nO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdycnNwJyAmJiBteXVybC5zZWFyY2goL2poZHl3LykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vd3d3LmpoZHl3LnZpcC9qaWV4aS9yci5waHA/dXJsPScgKyBzcmN1cmwuc3BsaXQoJ3VybD0nKVsxXSArICcmbmV4dD0nO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvamh5dW5cXFxcLnBocC8udGVzdChzcmN1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ3g1V2ViVmlldzovLycrc3JjdXJsLnJlcGxhY2UoJ2h0dHA6Ly9zdmlwLmpoeXVuLmp4LmNuOjEyMzQvamh5dW4ucGhwP3VybD0nLCAnaHR0cHM6Ly9hcGkuamhkeXcudmlwLz91cmw9Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpobGluID0gc3JjdXJsLnJlcGxhY2UoJ2h0dHA6Ly9zdmlwLmpoeXVuLmp4LmNuOjEyMzQvamh5dW4ucGhwP3VybD0nLCAnaHR0cHM6Ly9hcGkuamhkeXcudmlwLz91cmw9Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRG9tRm9ySHRtbChyZXF1ZXN0KGpobGluKSwgJyN2aWRlbyYmc291cmNlJiZzcmMnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+axn+a5lue6v+i3r+e7k+adn1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdhbGl6eScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9IGZldGNoKCdodHRwczovL2ZvdWJpbi5jb20vamlleGkucGhwP3VybD0nICsgc3JjdXJsLnNwbGl0KCd1cmw9JylbMV0sIHt9KS5tYXRjaCgvXFxcXFxcXCJ1cmxcXFxcXFxcIjpcXFxcXFxcIiguKj8pXFxcXFxcXCIvKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLzk4M3ZpcC8udGVzdChzcmN1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2goc3JjdXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL3hcXFxcLW5cXFxcLmNjfG5oZHo2NjYvLnRlc3Qoc3JjdXJsKSAmJiAvXFxcXC5odG1sfGJpbGliaWxpLy50ZXN0KHNyY3VybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybChzcmN1cmwuc3Vic3RyaW5nKHNyY3VybC5pbmRleE9mKCc9aHR0cCcpICsgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgLy/lpITnkIbmjIflrprop4bpopHlkoznur/ot6/nu5PmnZ9cXG4gICAgICAgICAgICAgICAgICAgIC8vLS0tLeWIhuWJsue6vy0tLS0vL1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjb2RlID0gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0YXR1c0NvZGU6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHNjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29kZS5zdGF0dXNDb2RlID09ICczMDInIHx8IHNjb2RlLnN0YXR1c0NvZGUgPT0gJzMwMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+aJk+W8gOino+aekOaciTMwMumHjeWumuWQkeeahOmTvuaOpVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWR1cmwgPSBzY29kZS5oZWFkZXJzLmxvY2F0aW9uWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXD1odHRwLy50ZXN0KHJlZHVybCkgJiYgL2h0bWx8YmlsaWJpbGkvLnRlc3QocmVkdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChyZWR1cmwsIHt9KSkudXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFw9aHR0cC8udGVzdChyZWR1cmwpICYmIC9cXFxcLm0zdTh8XFxcXC5tcDR8XFxcXC5mbHYvLnRlc3QocmVkdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVkdXJsLnN1YnN0cmluZyhyZWR1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWR1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIGh0bWwgPSByZXF1ZXN0KHNyY3VybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBzY29kZS5ib2R5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXDxib2R5Ly50ZXN0KGh0bWwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn5bCd6K+V572R6aG16Kej5p6QJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVDYWNoZSgnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vbHprMjM1NTkvUHVibGljUnVsZS9yYXcvbWFzdGVyL3g1cnVsZS5qcycsIDI0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg1cnVsZShzcmN1cmwsc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gb3BlbnVybChzcmN1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vanNvbuino+aekOeahOWPlumTvuaOpVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9IGh0bWwubWF0Y2goL1tcXFxcJ1xcXFxcXFwiXXVybFtcXFxcJ1xcXFxcXFwiXTouKj9bXFxcXCdcXFxcXFxcIl0oLio/KVtcXFxcJ1xcXFxcXFwiXS8pWzFdLnJlcGxhY2UoL1xcXFxcXFxcL2csICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9odHRwLy50ZXN0KHB1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHRhYiA9PSAnYmlsaWJpbGknKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS8mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHRhYiA9PSAnbWd0dicpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIycgKyAnO3tSZWZlcmVyQHd3dy5tZ3R2LmNvbSYmVXNlci1BZ2VudEBNb3ppbGxhLzUuMH0nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFw9aHR0cC8udGVzdChzcmN1cmwpICYmIC9cXFxcLmh0bWx8YmlsaWJpbGkvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwoc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v6Z2eaHR0cOW8gOWktOeahOaJk+W8gOWOn+mTvuaOpSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgLy/miqXplJnliKTmlq3lpITnkIZcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcmN1cmwuc3Vic3RyaW5nKDAsIDIpID09ICdcXFxcL1xcXFwvJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKCdodHRwczonICsgc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFw9aHR0cC8udGVzdChzcmN1cmwpICYmIC9cXFxcLmh0bWx8YmlsaWJpbGkvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIHNyY3VybC5zcGxpdCgnPScpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAneDVXZWJWaWV3Oi8vJytzcmN1cmxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL+WKqOaAgeino+aekOS7o+eggee7k+adn1xcbiAgICAgICAgICAgIH0sIHB0YWIsIGxpbmssIG15dXJsKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogY2x0XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlRW566A5LuL5LiO6YCJ6ZuGXCIsXCJwYXRoXCI6XCJ0dm1vdmxpc3RcIixcInJ1bGVcIjpcInZhciB0YWJzID0gT2JqZWN0LmtleXMoaHRtbC52aWRlb2xpc3QpO1xcbnZhciB0aHVtYiA9IGh0bWwuaW1nX3VybDtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9kbnBsdWdpbicsIHt9KSkucnVsZSk7XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiAn5Ymn5oOF566A5LuL77yaJyxcXG4gICAgZGVzYzogaHRtbC5pbnRybyxcXG4gICAgcGljX3VybDogdGh1bWIsXFxuICAgIHVybDogZG5wdWcsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxufSk7XFxuXFxuZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBsaXN0ID0gaHRtbC52aWRlb2xpc3RbdGFic1tpXV07XFxuICAgIHZhciBwdGFiID0gdGFic1tpXTtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogcHRhYiArICcg8J+UlycgKyBbaSArIDFdICsgJy8nICsgW3RhYnMubGVuZ3RoXSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbiAgICB9KTtcXG5cXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxuICAgICAgICB2YXIgc3JjdXJsID0gbGlzdFtqXS51cmw7XFxuICAgICAgICBpZiAoLzI5M2p4MS8udGVzdChzcmN1cmwpKSB7XFxuICAgICAgICAgICAgc3JjdXJsID0gc3JjdXJsLnJlcGxhY2UoJzI5M2p4MScsICdqeCcpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtqXS50aXRsZTtcXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA8PSA0KSB7XFxuICAgICAgICAgICAgdmFyIGNsdCA9ICd0ZXh0XzInO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgY2x0ID0gaXNOYU4odGl0bGUpID8gJ2ZsZXhfYnV0dG9uJyA6ICd0ZXh0XzUnXFxuICAgICAgICB9O1xcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwdGFiLCBzcmN1cmwsIG15dXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9wZW51cmwocmVzdXJsKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdXJsLm1hdGNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICYmIHJlc3VybC5zZWFyY2goL2h0bWx8YmlsaWJpbGkvKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbkRuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKS5lbkRuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbkRuID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+iwg+eUqOaWreaPkuino+aekCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKFxcXCJ2YXIgY29uZmlnID1cXFwiICsgZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHJlc3VybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1cmxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgLy9sb2coc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgLy/liqjmgIHop6PmnpDku6PnoIHlvIDlp4tcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXC5tM3U4fFxcXFwubXA0fG9ialxcXFwvdG9zLy50ZXN0KHNyY3VybCkgJiYgL2h0dHAvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAvXFxcXD0vLnRlc3Qoc3JjdXJsKSA/IHNyY3VybC5zcGxpdCgnPScpWzFdIDogc3JjdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjdXJsLmluZGV4T2YoXFxcIi9zaGFyZS9cXFwiKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gc3JjdXJsLnNwbGl0KFxcXCIvc2hhcmVcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZjID0gZmV0Y2goc3JjdXJsLCB7fSkucmVwbGFjZShcXFwidmFyIHB1cmxcXFwiLCBcXFwidmFyIG1haW5cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZjLmluZGV4T2YoXFxcIm1haW5cXFwiKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdCA9IGZjLm1hdGNoKC92YXIgbWFpbi4qPzsvKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwobWF0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF5ID0gKG1haW4uaW5kZXhPZihcXFwiaHR0cFxcXCIpICE9IC0xID8gbWFpbiA6IGxpbmsgKyBtYWluKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWluID0gZmMubWF0Y2goL3VybDouKj9bXFxcXCdcXFxcXFxcIl0oLio/KVtcXFxcJ1xcXFxcXFwiXS8pWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXkgPSAobWFpbi5pbmRleE9mKFxcXCJodHRwXFxcIikgIT0gLTEgPyBtYWluIDogbGluayArIG1haW4pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGF5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd4NVdlYlZpZXc6Ly8nICsgKHNyY3VybClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHB0YWIgPT0gJ2FsaXp5Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gZmV0Y2goJ2h0dHBzOi8vZm91YmluLmNvbS9qaWV4aS5waHA/dXJsPScgKyBzcmN1cmwsIHt9KS5tYXRjaCgvXFxcXFxcXCJ1cmxcXFxcXFxcIjpcXFxcXFxcIiguKj8pXFxcXFxcXCIvKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLzE5anhcXFxcLnZpcHxuZnlpbmdzaGkvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwucmVwbGFjZSgnaHR0cDovLycsICdodHRwczovLycpLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL3RpdGFuLm1ndHYvLnRlc3QocHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9vYmpcXFxcL3Rvcy8udGVzdChwdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgLy8tLS0t5YiG5Ymy57q/LS0tLS8vXFxuICAgICAgICAgICAgICAgICAgICB2YXIgc2NvZGUgPSBKU09OLnBhcnNlKGZldGNoKHNyY3VybCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBNT0JJTEVfVUFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoU3RhdHVzQ29kZTogdHJ1ZVxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb2RlLnN0YXR1c0NvZGUgPT0gJzMwMicgfHwgc2NvZGUuc3RhdHVzQ29kZSA9PSAnMzAxJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gc2NvZGUuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgaHRtbCA9IHJlcXVlc3Qoc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHNjb2RlLmJvZHk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9cXFxcXFxcInVybFxcXFxcXFwiXFxcXDpcXFxcXFxcImh0dHAvLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1cmwgPSBodG1sLm1hdGNoKC9cXFxcXFxcInVybFxcXFxcXFwiOlxcXFxcXFwiKC4qPylcXFxcXFxcIi8pWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5zdGFydHNXaXRoKCd7JykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1cmwgPSBzcmN1cmwuc3Vic3RyaW5nKHNyY3VybC5pbmRleE9mKCc9aHR0cCcpICsgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgcHVybCA9IHNyY3VybFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGUoJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL2x6azIzNTU5L1B1YmxpY1J1bGUvcmF3L21hc3Rlci94NXJ1bGUuanMnLCAyNCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4NXJ1bGUoc3JjdXJsLHNyY3VybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICd4NVdlYlZpZXc6Ly8nKyhzcmN1cmwpIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmICgvdGl0YW4ubWd0di8udGVzdChwdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJyArICc7e1JlZmVyZXJAd3d3Lm1ndHYuY29tJiZVc2VyLUFnZW50QE1vemlsbGEvNS4wfSc7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9vYmpcXFxcL3Rvcy8udGVzdChwdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcmN1cmwuc3Vic3RyaW5nKDAsIDIpID09ICdcXFxcL1xcXFwvJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKCdodHRwczonICsgc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFw9aHR0cC8udGVzdChzcmN1cmwpICYmIC9cXFxcLmh0bWx8YmlsaWJpbGkvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIHNyY3VybC5zcGxpdCgnPScpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybClcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL+WKqOaAgeino+aekOS7o+eggee7k+adn1xcbiAgICAgICAgICAgIH0sIHB0YWIsIHNyY3VybCwgbXl1cmwpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBjbHRcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YiX6KGo5qih5byP5pCc57Si5LqM57qnXCIsXCJwYXRoXCI6XCJzZWFyZXJqXCIsXCJydWxlXCI6XCJ2YXIgcmVzID0ge307XFxudmFyIGl0ZW1zID0gW107XFxudmFyIHNwbCA9IGdldFJlc0NvZGUoKS5zcGxpdCgnI3gjJyk7XFxudmFyIHR5cGV0ID0gc3BsWzNdO1xcbnZhciB0ZG9taW4gPSBzcGxbMl07XFxudmFyIGtleSA9IHNwbFs0XTtcXG5cXG5pZiAoL3ZpcG12Ly50ZXN0KHRkb21pbikpIHtcXG4gICAgdmFyIGJodG1sID0gcmVxdWVzdChzcGxbMV0pO1xcbn0gZWxzZSB7XFxuICAgIHZhciBiaHRtbCA9IGZldGNoKHNwbFsxXSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG50cnkge1xcbiAgICBiaHRtbCA9IGJodG1sLnN0YXJ0c1dpdGgoJ1xcXFxyXFxcXG4nKSA/IGJodG1sLnJlcGxhY2UoJ1xcXFxyXFxcXG4nLCAnJykgOiBiaHRtbDtcXG59IGNhdGNoIChlKSB7fVxcbmlmICgvYnR3YWYvLnRlc3QoYmh0bWwpKSB7XFxuICAgIC8qXFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6J+acieWuneWhlOmqjOivge+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHNwbFsxXSArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAqL1xcblxcbiAgICBiaHRtbCA9IGZldGNoKHNwbFsxXSArICcmYnR3YWYnICsgYmh0bWwubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7fSk7XFxuXFxufVxcblxcbmlmIChiaHRtbCA9PSBcXFwiXFxcIiB8fCBiaHRtbCA9PSBudWxsIHx8IGJodG1sLnN1YnN0cmluZygwLCA1KSA9PSAnZXJyb3InIHx8ICFiaHRtbC5zdGFydHNXaXRoKCd7JykpIHtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+acquaQnOe0ouWIsOebuOWFs+i1hOa6kO+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxuICAgICAgICB1cmw6IHNwbFsxXSArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuICAgIH0pO1xcbn0gZWxzZSBpZiAoYmh0bWwubGVuZ3RoIDwgODApIHtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+i/lOWbnuaVsOaNruS4jeWujOaVtO+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxuICAgICAgICB1cmw6IHNwbFsxXSArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuICAgIH0pO1xcbn0gZWxzZSB7XFxuICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShiaHRtbCk7XFxuICAgIC8vbG9nKHNwbFsxXSk7XFxuICAgIGlmIChodG1sLmxpc3QpIHtcXG4gICAgICAgIHZhciBsaXN0ID0gaHRtbC5saXN0O1xcbiAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YS5saXN0KSB7XFxuICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcbiAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YSkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBodG1sLmRhdGE7XFxuICAgIH1cXG5cXG4gICAgaWYgKGxpc3QubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmnKrmkJzntKLliLDvvIzngrnlh7vorr/pl67ljp/nvZHpobUnLFxcbiAgICAgICAgICAgIHVybDogc3BsWzFdICsgYEBsYXp5UnVsZT0uanM6aW5wdXQuc3BsaXQoJzsnKVswXWAsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcblxcbiAgICAgICAgICAgIGlmICgvQVBQ5b2x6KeGLy50ZXN0KHR5cGV0KSkge1xcbiAgICAgICAgICAgICAgICBpZiAodGRvbWluLmluZGV4T2YoJ2FwaS5waHAvYXBwLycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnZvZF9uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvZmFudHVhbi8udGVzdCh0ZG9taW4pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9ICdodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS9hcGkucGhwL2FwcC92aWRlb19kZXRhaWw/aWQ9JyArIGxpc3RbaV0udm9kX2lkICsgJyZ0b2tlbj0nO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXG4gICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGRvbWluLmluZGV4T2YoJ3hnYXBwLnBocC92MS8nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnZvZF9waWM7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgbGlzdFtpXS52b2RfaWQ7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXG4gICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnZvZF9uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvaW9wZW55dW4vLnRlc3QodGRvbWluKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnL2RldGFpbElEP3ZvZF9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnL2RldGFpbD92b2RfaWQ9JyArIGxpc3RbaV0udm9kX2lkICsgJyZ0b2tlbj0nO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxuICAgICAgICAgICAgICAgICAgICAvL3ZhciBjb249bGlzdFtpXS50eXBlLnR5cGVfZGVzO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICgvVFblvbHop4YvLnRlc3QodHlwZXQpKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udGl0bGU7XFxuICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnBpYztcXG4gICAgICAgICAgICAgICAgLy92YXIgdmlkPXRkb21pbisnL2RldGFpbD92b2RfaWQ9JytsaXN0W2ldLm5leHRsaW5rKycmcmVsX2xpbWl0PTEwJztcXG4gICAgICAgICAgICAgICAgdmFyIHZpZCA9IGxpc3RbaV0ubmV4dGxpbms7XFxuICAgICAgICAgICAgICAgIHZhciByZW0gPSBsaXN0W2ldLnN0YXRlO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBjb249bGlzdFtpXS5zdGF0ZTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZS5yZXBsYWNlKGtleSwgJ+KAnOKAnCcgKyBrZXkgKyAn4oCd4oCdJyksXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IHBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodmlkKyc7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JykucnVsZSgodHlwZXQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJzI1NSYmZmxvYXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFg1V2ViVmlldygnJyk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbXl1cmwgPSBNWV9VUkwubWF0Y2goLyhbXFxcXFNdKj86XFxcXC9cXFxcL1tcXFxcU10qPylcXFxcLy8pWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9BUFDlvbHop4YvLnRlc3QodHlwZXQpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvYXBwbW92bGlzdCcsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9UVuW9seinhi8udGVzdCh0eXBldCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90dm1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXG4gICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQocmVzKTtcXG4gICAgICAgICAgICAgICAgfSwgdHlwZXQpLFxcbiAgICAgICAgICAgICAgICAvL2NvbnRlbnQ6cmVtLFxcbiAgICAgICAgICAgICAgICBkZXNjOiByZW0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IC8vZm9yIGlcXG4gICAgfSAvL2Vsc2UgbGlzdC5sZW5ndGhcXG59XFxuXFxucmVzLmRhdGEgPSBpdGVtcztcXG5zZXRIb21lUmVzdWx0KHJlcyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJBUFDpppbpobXliJfooahcIixcInBhdGhcIjpcImFwcGluZGV4ZGF0YVwiLFwicnVsZVwiOlwiaWYgKGh0bWwubGlzdCkge1xcbiAgICB2YXIgbGlzdCA9IGh0bWwubGlzdDtcXG59IGVsc2UgaWYgKGh0bWwuZGF0YSAmJiBodG1sLmRhdGEubGlzdCkge1xcbiAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcbn0gZWxzZSB7XFxuICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhO1xcbn1cXG5cXG5mb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKGxpc3RbaV0udm9kX2xpc3QpIHtcXG4gICAgICAgIHZhciBsaXN0cyA9IGxpc3RbaV0udm9kX2xpc3Q7XFxuICAgICAgICB2YXIgdHlwZW5hbWUgPSBsaXN0W2ldLnZvZF90eXBlX25hbWU7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgbGlzdHMgPSBsaXN0W2ldLnZsaXN0O1xcbiAgICAgICAgdmFyIHR5cGVuYW1lID0gbGlzdFtpXS50eXBlX25hbWVcXG4gICAgfVxcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0eXBlbmFtZSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcblxcbiAgICB9KTtcXG5cXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0cy5sZW5ndGg7IGorKykge1xcbiAgICAgICAgdmFyIHRpdGxlID0gbGlzdHNbal0udm9kX25hbWU7XFxuICAgICAgICB2YXIgaW1nID0gbGlzdHNbal0udm9kX3BpYztcXG4gICAgICAgIHZhciB1cmwgPSBsaXN0c1tqXS52b2RfaWQ7XFxuICAgICAgICB2YXIgZGVzYyA9IGxpc3RzW2pdLnZvZF9yZW1hcmtzO1xcbiAgICAgICAgaWYgKGh0bWwubGlzdCkge1xcbiAgICAgICAgICAgIGlmICgvZmFudHVhbi8udGVzdChtdXJsKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9ICdodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS9hcGkucGhwL2FwcC92aWRlb19kZXRhaWw/aWQ9JyArIHVybCArICcmdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSc7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YSAmJiBodG1sLmRhdGEubGlzdCkge1xcbiAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICcvZGV0YWlsP3ZvZF9pZD0nICsgdXJsICsgJyZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdChtdXJsKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnL2RldGFpbElEP3ZvZF9pZD0nICsgdXJsICsgJyZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAndmlkZW9fZGV0YWlsP2lkPScgKyB1cmwgKyAnJnRva2VuPTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX0nO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBpbWcgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICB1cmw6ICQobGluaykucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzI1NSYmZmxvYXQnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoWDVXZWJWaWV3KCcnKTtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxuICAgICAgICAgICAgICAgIHZhciBteXVybCA9IE1ZX1VSTC5tYXRjaCgvKFtcXFxcU10qPzpcXFxcL1xcXFwvW1xcXFxTXSo/KVxcXFwvLylbMV07XFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcbiAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZSdcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aaW5qyh5a+85YWl562J5b6FXCIsXCJwYXRoXCI6XCJ3YWl0XCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjYW5Vc2UoKSB7XFxuICAgIC8v5aaC5p6c5pu05paw5LqG6KeE5YiZ5Lmf6KaB6ZmQ5rWB77yM5Y+v5Lul5L+u5pS5a2V5XFxuICAgIGxldCBrZXkgPSBcXFwibG9jazRcXFwiXFxuICAgIC8v562J5b6F5YiG6ZKf5pWwXFxuICAgIGxldCB3YWl0TWluID0gMjBcXG4gICAgXFxuICAgIGxldCBtaW4gPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwICogNjAgKiB3YWl0TWluKVxcbiAgICBsZXQgdW5sb2NrID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBtaW47XFxuICAgIGxldCB0aW1lID0gZ2V0SXRlbShrZXksIFxcXCJcXFwiKTtcXG4gICAgaWYgKHRpbWUgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHNldEl0ZW0oa2V5LCBcXFwiXFxcIiArIHVubG9jaylcXG4gICAgICAgIGxldCBzdCA9IG5ldyBEYXRlKHVubG9jaykudG9Mb2NhbGVTdHJpbmcoKS5yZXBsYWNlKC86XFxcXGR7MSwyfSQvLCAnICcpO1xcbiAgICAgICAgbGV0IG1zZyA9IFxcXCLov5nmmK/mgqjnrKzkuIDmrKHkvb/nlKjor6XniYjmnKzop4TliJnvvIzkuLrpgb/lhY3nrKzkuIDmrKHlr7zlhaXkvb/nlKjkurrmlbDmv4Dlop7vvIzop4TliJnlsIblnKhcXFwiICsgc3QgKyBcXFwi6Kej6ZSB5L2/55So44CCPGJyPjxicj7lpb3op4TliJnkuI3mgJXmmZrvvIzor7fogJDlv4PnrYnlvoXvvIHor6Xmj5DnpLrku4XlnKjnrKzkuIDmrKHlr7zlhaXvvIjmm7TmlrDvvInml7blh7rnjrDvvIzlkI7nu63kvb/nlKjov4fnqIvkuK3kuI3kvJrlh7rnjrDvvIFcXFwiXFxuICAgICAgICBzZXRSZXN1bHQoW3tcXG4gICAgICAgICAgICB0aXRsZTogbXNnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICAgICAgfV0pXFxuICAgICAgICByZXR1cm4gZmFsc2VcXG4gICAgfSBlbHNlIGlmIChwYXJzZUludCh0aW1lKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgpKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbGV0IHN0ID0gbmV3IERhdGUocGFyc2VJbnQodGltZSkpLnRvTG9jYWxlU3RyaW5nKCkucmVwbGFjZSgvOlxcXFxkezEsMn0kLywgJyAnKTtcXG4gICAgICAgIGxldCBtc2cgPSBcXFwi5Li66YG/5YWN5L2/55So5Lq65pWw5r+A5aKe77yM6KeE5YiZ5bCG5ZyoXFxcIiArIHN0ICsgXFxcIuino+mUgeS9v+eUqOOAgjxicj48YnI+5aW96KeE5YiZ5LiN5oCV5pma77yM6K+36ICQ5b+D562J5b6F77yB6K+l5o+Q56S65LuF5Zyo56ys5LiA5qyh5a+85YWl77yI5pu05paw77yJ5pe25Ye6546w77yM5ZCO57ut5L2/55So6L+H56iL5Lit5LiN5Lya5Ye6546w77yBXFxcIlxcbiAgICAgICAgc2V0UmVzdWx0KFt7XFxuICAgICAgICAgICAgdGl0bGU6IG1zZyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxuICAgIH1cXG59XFxuJC5leHBvcnRzID0gY2FuVXNlKCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlq3lv7Xmj5Lku7bosIPnlKhcIixcInBhdGhcIjpcImRucGx1Z2luXCIsXCJydWxlXCI6XCJ2YXIgZG5wdWcgPSAkKCkucnVsZSgoKSA9PiB7XFxuICAgIHZhciBkID0gW107XFxuICAgIHNldFBhZ2VUaXRsZSgn5pat5b+15o+S5Lu26K6+572uJylcXG4gICAgdmFyIGVuRG4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLmVuRG47XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aWreW/teaPkuS7tuiwg+eUqCcsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+W9k+WJje+8micgKyAnKCcgKyAoZW5EbiA9PSAxID8gJ+W3suWQr+eUqCcgOiAn5bey56aB55SoJykgKyAnKScsXFxuICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIG1kID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKS5lbkRuO1xcblxcbiAgICAgICAgICAgIGlmIChtZCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIHt9KS5yZXBsYWNlKCdcXFxcXFxcImVuRG5cXFxcXFxcIjpcXFxcXFxcIjFcXFxcXFxcIicsICdcXFxcXFxcImVuRG5cXFxcXFxcIjpcXFxcXFxcIjBcXFxcXFxcIicpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIGZpbGVVcmwpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LnpoHnlKjmlq3mj5LosIPnlKjvvIEnO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIHt9KS5yZXBsYWNlKCdcXFxcXFxcImVuRG5cXFxcXFxcIjpcXFxcXFxcIjBcXFxcXFxcIicsICdcXFxcXFxcImVuRG5cXFxcXFxcIjpcXFxcXFxcIjFcXFxcXFxcIicpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhmaWxlVXJsKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFwiLCBmaWxlVXJsKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5byA5ZCv5pat5o+S6LCD55So77yBJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfnrqHnkIbop6PmnpAnLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjQHJ1bGU9anM6dGhpcy5kPVtdO3JlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvanhJdGVtLmpzJyk7anhJdGVtLmp4TGlzdCgpO3NldFJlc3VsdChkKVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+e6v+i3r+mFjee9ricsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1JvdXRlLnNldFBhcnNlKCk7c2V0UmVzdWx0KGQpO1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXG4gICAgfSk7XFxuICAgIHNldFJlc3VsdChkKVxcbn0pO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6K6+572u6aG15Luj56CBXCIsXCJwYXRoXCI6XCJzZXR0aW5nXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBzZXRqc29uID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKTtcXG52YXIgc3NtZCA9IHNldGpzb24uc3Ntb2RlO1xcbnZhciBzc3hjID0gc2V0anNvbi5zc2NvdW50O1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5pCc57Si5qih5byP6K6+572uJyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5b2T5YmN77yaJyArICcoJyArIChzc21kID09IDEgPyAn6IGa5ZCI57uT5p6cJyA6ICflvJXmk47liJfooagnKSArICcpJyxcXG4gICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgdmFyIG1kID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKS5zc21vZGU7XFxuXFxuICAgICAgICBpZiAobWQgPT0gMSkge1xcbiAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIHt9KS5yZXBsYWNlKCdcXFxcXFxcInNzbW9kZVxcXFxcXFwiOlxcXFxcXFwiMVxcXFxcXFwiJywgJ1xcXFxcXFwic3Ntb2RlXFxcXFxcXCI6XFxcXFxcXCIwXFxcXFxcXCInKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIGZpbGVVcmwpO1xcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouS4uuaQnOe0ouW8leaTjuWIl+ihqOWNlemAieaooeW8j+aIkOWKn++8gSc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIHt9KS5yZXBsYWNlKCdcXFxcXFxcInNzbW9kZVxcXFxcXFwiOlxcXFxcXFwiMFxcXFxcXFwiJywgJ1xcXFxcXFwic3Ntb2RlXFxcXFxcXCI6XFxcXFxcXCIxXFxcXFxcXCInKTtcXG4gICAgICAgICAgICAvL2xvZyhmaWxlVXJsKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIGZpbGVVcmwpO1xcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouS4uuiBmuWQiOaQnOe0ouaooeW8j+aIkOWKn++8gSdcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0pXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfmkJzntKLnur/nqIvorr7nva4nLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICflvZPliY3nur/nqIsnICsgc3N4YyArICcgICcgKyAn5L2g6L6T5YWl55qE5pivJyArIHBhcnNlSW50KGdldFZhcignYXBwbXNzeGNzZXQnLCAnJykpLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+iuvue9ruaQnOe0oue6v+eoiycsXFxuICAgIHVybDogXFxcImlucHV0Oi8vXFxcIiArICcnICsgXFxcIi8vLy/or7fovpPlhaXkuIDkuKrmlbTmlbDmlbDlrZfvvIzmjqjojZDmnIDlpKfkuI3opoHotoXov4cxNeOAgi5qczpwdXRWYXIoJ2FwcG1zc3hjc2V0JyxpbnB1dCk7cmVmcmVzaFBhZ2UoKVxcXCIsXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5L+d5a2Y57q/56iL6K6+572uJyxcXG4gICAgdXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgdmFyIG51bSA9IHBhcnNlSW50KGdldFZhcignYXBwbXNzeGNzZXQnKSkudG9TdHJpbmcoKTtcXG4gICAgICAgIGlmIChudW0gPT0gJ05hTicpIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6L6T5YWl55qE5YC85aW95YOP5LiN5q2j56Gu44CCJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIGZpbGVVcmwgPSBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcIiwge30pLnJlcGxhY2UoL1xcXFxcXFwic3Njb3VudFxcXFxcXFwiOlxcXFxcXFwiW1xcXFxTXSpcXFxcXFxcIi8sICdcXFxcXFxcInNzY291bnRcXFxcXFxcIjpcXFxcXFxcIicgKyBudW0gKyAnXFxcXFxcXCInKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIGZpbGVVcmwpO1xcbiAgICAgICAgICAgIC8vcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+d5a2Y6K6+572u5pCc57Si57q/56iL5a6M5oiQ77yBJztcXG4gICAgICAgIH1cXG5cXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5pu05paw55u45YWzJyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5qOA5rWL5pu05pawJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobG9jdmVyKSA9PiB7XFxuICAgICAgICB2YXIgcmVtZiA9IGZldGNoQ2FjaGUoJ2h0dHBzOi8vY29kZWJlcmcub3JnL2x6azIzNTU5L2Nsb3VkcnVsZS9yYXcvYnJhbmNoL21hc3Rlci9hcHBtb3ZpZS50eHQnLCAyNCk7XFxuICAgICAgICBpZiAoL++/pWJhc2U2NC8udGVzdChyZW1mKSkge1xcbiAgICAgICAgICAgIHZhciByZW12ID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUocmVtZi5zcGxpdCgnQCcpWzJdKSkudmVyc2lvbjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIHJlbXYgPSBKU09OLnBhcnNlKHJlbWYuc3BsaXQoJ2hvbWVfcnVsZe+/pScpWzFdKS52ZXJzaW9uO1xcbiAgICAgICAgfVxcbiAgICAgICAgbG9nKCfov5znqIvniYjmnKzvvJonICsgcmVtdik7XFxuICAgICAgICBsb2coJ+acrOWcsOeJiOacrO+8micgKyBsb2N2ZXIpO1xcbiAgICAgICAgaWYgKGxvY3ZlciAhPSByZW12KSB7XFxuICAgICAgICAgICAgcHV0VmFyKCdhcHBudmVyJywgcmVtZik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyJ5paw54mI5pys77yM54K55a+85YWl5pu05paw5Y+v5pu05paw6KeE5YiZ44CCJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aaguaXoOaWsOeJiOacrOOAgidcXG4gICAgICAgIH1cXG4gICAgfSwgbG9jdmVyKSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInXFxufSk7XFxuaWYgKGdldFZhcignYXBwbnZlcicpKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WvvOWFpeabtOaWsCcsXFxuICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpPT57XFxuICAgICAgICAgICByZXR1cm4gZ2V0VmFyKCdhcHBudmVyJyk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpXCJ9XSxcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwiQVBQ5b2x6KeGKFApXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9lbXB0eSQkQVBQ5b2x6KeGJCRodHRwOi8vMS4xMTYuMzYuNjY6MTA4MC9hcGkucGhwL2FwcC8kJGluZGV4X3ZpZGVvP3Rva2VuPSQkO2dldDtVVEYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCAxMe+8m++8myBNaSAxMCBQcm8pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OC4wLjQzMjQuMTUyIE1vYmlsZSBTYWZhcmkvNTM3LjM2fVwiLFwiY29sX3R5cGVcIjpcIm1vdmllXzFcIixcImZpbmRfcnVsZVwiOlwianM6XFxudmFyIHJlcyA9IHt9O1xcbnZhciBpdGVtcyA9IFtdO1xcbnZhciB0eXBldCA9IE1ZX1VSTC5zcGxpdCgnJCQnKVsxXTtcXG52YXIgbXVybCA9IE1ZX1VSTC5zcGxpdCgnJCQnKVsyXTtcXG52YXIgdHVybCA9IG11cmwgKyBNWV9VUkwuc3BsaXQoJyQkJylbM107XFxuXFxuaWYgKC9UVuW9seinhi8udGVzdCh0eXBldCkpIHtcXG4gICAgdmFyIHBnID0gTVlfVVJMLm1hdGNoKC9wYWdlXFxcXD0oW1xcXFxkXSopLylbMV07XFxuICAgIGlmIChwZyA9PSAxKSB7XFxuICAgICAgICB2YXIgdHlwdCA9ICgn55S15b2xJui/nue7reWJpybnu7zoibom5Yqo5ryrJykuc3BsaXQoJyYnKTtcXG4gICAgICAgIHZhciB0eXBsID0gKCdtb3ZpZSZ0dnBsYXkmdHZzaG93JmNvbWljJykuc3BsaXQoJyYnKTtcXG5cXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIHZhciB0eXVybCA9IG11cmwgKyAnP2FjPWxpc3QmY2xhc3M9JyArIHR5cGxbaV0gKyAnJnBhZ2U9ZnlwYWdlJmFyZWE9JnR5cGU9JnN0YXJ0PSc7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0eXB0W2ldLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodHl1cmwpLnJ1bGUoKG11cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIG11cmwgPSBtdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90dmxpc3RkYXRhJywge30pKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gaXRlbXM7XFxuICAgICAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgICAgICAgICAgICAgIH0sIG11cmwpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGZldGNoKHR1cmwpKTtcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3R2bGlzdGRhdGEnLCB7fSkpLnJ1bGUpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbn0gZWxzZSBpZiAoL0FQUOW9seinhi8udGVzdCh0eXBldCkpIHtcXG5cXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChtdXJsLnNlYXJjaCgvYXBpLnBocFxcXFwvYXBwLykgIT0gLTEpIHtcXG5cXG4gICAgICAgICAgICB2YXIgdHlwY29kZSA9IHJlcXVlc3QobXVybCArIFxcXCJuYXY/dG9rZW49XFxcIiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJEYXJ0LzIuMTMgKGRhcnQ6aW8pXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKHR5cGNvZGUuaW5kZXhPZign5qOA5rWL5LitJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgdHlwY29kZSA9IGZldGNoKG11cmwgKyBcXFwibmF2P3Rva2VuPVxcXCIgKyAnJmJ0d2FmJyArIHR5cGNvZGUubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7fSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciB0eXBlYyA9IEpTT04ucGFyc2UodHlwY29kZSkubGlzdDtcXG5cXG4gICAgICAgIH0gZWxzZSBpZiAobXVybC5zZWFyY2goL3hnYXBwLnBocFxcXFwvdjEvKSAhPSAtMSkge1xcblxcbiAgICAgICAgICAgIHZhciB0eXBjb2RlID0gcmVxdWVzdChtdXJsICsgXFxcIm5hdj90b2tlbj1cXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAodHlwY29kZS5pbmRleE9mKCfmo4DmtYvkuK0nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICB0eXBjb2RlID0gZmV0Y2gobXVybCArIFxcXCJuYXY/dG9rZW49XFxcIiArICcmYnR3YWYnICsgdHlwY29kZS5tYXRjaCgvYnR3YWYoLio/KVxcXFxcXFwiLylbMV0sIHt9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHR5cGVjID0gSlNPTi5wYXJzZSh0eXBjb2RlKS5kYXRhO1xcblxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdHlwY29kZSA9IHJlcXVlc3QobXVybCArIFxcXCIvdHlwZXNcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAodHlwY29kZS5pbmRleE9mKCfmo4DmtYvkuK0nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICB0eXBjb2RlID0gZmV0Y2gobXVybCArIFxcXCIvdHlwZXNcXFwiICsgJz9idHdhZicgKyB0eXBjb2RlLm1hdGNoKC9idHdhZiguKj8pXFxcXFxcXCIvKVsxXSwge30pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgdHlwZWMgPSBKU09OLnBhcnNlKHR5cGNvZGUpLmRhdGEubGlzdDtcXG5cXG4gICAgICAgIH1cXG4gICAgICAgIHZhciB0eXBldCA9IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHR5cGVsID0gXFxcIlxcXCI7XFxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHR5cGVjLmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgdHlwZXQgKz0gdHlwZWNbal0udHlwZV9uYW1lO1xcbiAgICAgICAgICAgIHR5cGVsICs9IHR5cGVjW2pdLnR5cGVfaWQ7XFxuICAgICAgICAgICAgaWYgKGogPCB0eXBlYy5sZW5ndGggLSAxKSB7XFxuICAgICAgICAgICAgICAgIHR5cGV0ICs9IFxcXCImXFxcIjtcXG4gICAgICAgICAgICAgICAgdHlwZWwgKz0gXFxcIiZcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHZhciB0eXB0ID0gdHlwZXQuc3BsaXQoJyYnKTtcXG4gICAgICAgIHZhciB0eXBsID0gdHlwZWwuc3BsaXQoJyYnKTtcXG5cXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChtdXJsLmluZGV4T2YoJ2FwaS5waHAvYXBwLycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIGlmICgvZmFudHVhbi8udGVzdChtdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5dXJsID0gJ2h0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL2FwaS5waHAvYXBwL3ZpZGVvP3BnPWZ5cGFnZSZ0aWQ9JyArIHR5cGxbaV0gKyAnJmNsYXNzPSZhcmVhPSZsYW5nPSZ5ZWFyPSZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXVybCA9IG11cmwgKyAndmlkZW8/cGc9ZnlwYWdlJnRpZD0nICsgdHlwbFtpXSArICcmY2xhc3M9JmFyZWE9Jmxhbmc9JnllYXI9JnRva2VuPTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX0nO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChtdXJsLmluZGV4T2YoJ3hnYXBwLnBocC92MS8nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdHl1cmwgPSBtdXJsICsgJ3ZpZGVvP3BnPWZ5cGFnZSZ0aWQ9JyArIHR5cGxbaV0gKyAnJmNsYXNzPSZhcmVhPSZsYW5nPSZ5ZWFyPTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX0nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICgvaW9wZW55dW4vLnRlc3QobXVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXVybCA9IG11cmwgKyAnL2xpc3Q/dHlwZT0nICsgdHlwbFtpXSArICcmY2xhc3M9Jmxhbmc9JmFyZWE9JnllYXI9JmJ5PSZwYWdlPWZ5cGFnZSZsaW1pdD05O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSdcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXVybCA9IG11cmwgKyAnP3R5cGU9JyArIHR5cGxbaV0gKyAnJmNsYXNzPSZsYW5nPSZhcmVhPSZ5ZWFyPSZieT0mcGFnZT1meXBhZ2UmbGltaXQ9OTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX0nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0eXB0W2ldLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodHl1cmwpLnJ1bGUoKG11cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIG11cmwgPSBtdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc2NvZGUgPSBnZXRSZXNDb2RlKCk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzY29kZS5pbmRleE9mKCfmo4DmtYvkuK0nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2NvZGUgPSBmZXRjaChNWV9VUkwgKyAnJmJ0d2FmJyArIHJlc2NvZGUubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7fSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UocmVzY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9hcHBsaXN0ZGF0YScsIHt9KSkucnVsZSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcbiAgICAgICAgICAgICAgICB9LCBtdXJsKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuXFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QodHVybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiRGFydC8yLjEzIChkYXJ0OmlvKVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmIChodG1sLmluZGV4T2YoJ+ajgOa1i+S4rScpICE9IC0xKSB7XFxuICAgICAgICAgICAgaHRtbCA9IGZldGNoKHR1cmwgKyAnJmJ0d2FmJyArIGh0bWwubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoaHRtbCk7XFxuICAgICAgICAvL2xvZyhodG1sKTtcXG4gICAgICAgIC8vaWYgKG11cmwuaW5kZXhPZigneGdhcHAucGhwL3YxLycpICE9IC0xKSB7XFxuICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9hcHBpbmRleGRhdGEnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgLy99IGVsc2Uge1xcbiAgICAgICAgLy9sb2coaHRtbCk7XFxuICAgICAgICAvL2V2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2FwcGxpc3RkYXRhJywge30pKS5ydWxlKTtcXG4gICAgICAgIC8vfVxcbiAgICB9IGNhdGNoIChlKSB7fVxcblxcbn1cXG5cXG5yZXMuZGF0YSA9IGl0ZW1zO1xcbnNldEhvbWVSZXN1bHQocmVzKTtcIixcImdyb3VwXCI6XCIj5rWL6K+V8J+NgFwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiZXZhbFByaXZhdGVKUygnSjZiWHpzaFYxSGROVWRKSzRULzFqMjRIVVQ1TVJnSUpsM3p5a0ZlcWduaVF3TjVTdjluL0NJOU5TT2pYZzhOOXBvK3NkVGJZMjkyQmJDUnJZUG1LZnRsV29KTzFmOU85c3ZpbUVDUTBXaDBwUFNJU21wK2VwaVZ5MWo0OE1XMFcwUU1sNWQwSHpjZVJIZEYzMHBzQ1ZBQ3pUY3ZCR2wxNU1kWUgrajRkd2t3dUswTDhTZGtrY2gyTlRpa1NXZEEzTXdRNVZFVTNRMkMva2pqSjN0cG9NLy96bjdGUlJIV1RFSXU4TWNXbE5tYmtITHdwdHpPR09EUlJ2YWk0ZXBhbUhNVzAyQm40N3JPSXBmb3c4RnBRY2tyWERFY0Zub0pEUDBmcHU3SENDTDFSendrR3BoUHZ1SEtCSjFJZ2hNa0NJbFZNRkxzSXpjY1ZiVFpsbkpvQVdXWFc5R01YYzhHaE1obUFteUJLY1ZCYlloVC9JRWt5NmZma2NtU2FXdjFnQ3Q2VDBkL2R3L2ZuUmgxM1JxMWhkdlYremhBaHVJcXRhZTRRUVBnS2dKcUJuYzBrMTljZS8wTmpvb25BcEcyRVkzRjd6Q3dncndYbjhBTmVJYmNoVEM0clF2eEoyU1J5SFkxT0tSSlowRGN6QkRsVVJUZERZTCtTT01uZTJtZ3ovL09mc1ZGRWRaTVFpN3d4eGFVMlpsWDJwMm9iUDh0SW1jWEVpOUR5UUhFPScpXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIkpTT07mjqXlj6PmlbDmja5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiUmVzQ29kZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ7W119XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInNlYXJcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIHJlcyA9IHt9O1xcXFxudmFyIGl0ZW1zID0gW107XFxcXG4vL+iuvue9ruaQnOe0oue6v+eoi1xcXFxudmFyIHNzbW9kZSA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuc3Ntb2RlO1xcXFxudmFyIGtleSA9IE1ZX1VSTC5zcGxpdCgnJCQkJylbMV07XFxcXG4vL3NldEVycm9yKGxlKTtcXFxcbmlmIChzc21vZGUgPT0gJzAnKSB7XFxcXG4gICAgc2V0UGFnZVRpdGxlKGtleSArICcg55qE5pCc57Si57uT5p6cJylcXFxcbn07XFxcXG4vL3ZhciBodG1sID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvUmVzQ29kZScsIHt9KSkucnVsZSk7XFxcXG52YXIgaHRtbCA9IEpTT04ucGFyc2UoZmV0Y2hDYWNoZSgnaHR0cHM6Ly9pbm1lbW9yeS5jb2RpbmcubmV0L3AvSW5NZW1vcnkvZC9NQnJvd3Nlci9naXQvcmF3L21hc3Rlci9BcHBGaWxlL0FQUOW9seinhuWIl+ihqCcsIDI0KSk7XFxcXG5cXFxcbnZhciBkbGlzdCA9IGh0bWwuZGF0YTtcXFxcblxcXFxuZnVuY3Rpb24gcmFuZG9tU29ydDMoYXJyKSB7XFxcXG4gICAgYXJyLnNvcnQoZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAtIDAuNTtcXFxcbiAgICB9KTtcXFxcbiAgICByZXR1cm4gYXJyO1xcXFxufVxcXFxuXFxcXG4vL+aJk+S5semhuuW6j1xcXFxudmFyIHJhbmRvbSA9IHRydWU7XFxcXG5pZiAoc3Ntb2RlID09ICcxJyB8fCBNWV9UWVBFID09ICdob21lJykge1xcXFxuICAgIGZvciAodmFyIGwgPSAwOyBsIDwgZGxpc3QubGVuZ3RoOyBsKyspIHtcXFxcbiAgICAgICAgdmFyIGxpc3QgPSBkbGlzdFtsXS5saXN0O1xcXFxuICAgICAgICB2YXIgdHl0aXQgPSBkbGlzdFtsXS50aXRsZVxcXFxuICAgICAgICBpZiAocmFuZG9tKSB7XFxcXG4gICAgICAgICAgICBsZXQgayA9IGdldFZhcihNWV9SVUxFLnRpdGxlICsgXFxcXFxcXCItXFxcXFxcXCIgKyB0eXRpdCwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAoayA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgbGlzdCA9IHJhbmRvbVNvcnQzKGxpc3QpXFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcIi1cXFxcXFxcIiArIHR5dGl0LCBKU09OLnN0cmluZ2lmeShsaXN0KSlcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgbGlzdCA9IEpTT04ucGFyc2UoaylcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuXFxcXG5cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogTVlfVFlQRSA9PSBcXFxcXFxcImhvbWVcXFxcXFxcIiA/IFxcXFxcXFwi54K55Ye75p+l55yLIFxcXFxcXFwiICsgdHl0aXQgKyBcXFxcXFxcIiDliIbnsbsg4oCc4oCcXFxcXFxcXCIgKyBrZXkgKyBcXFxcXFxcIuKAneKAnSDnmoTogZrmkJznu5PmnpxcXFxcXFxcIiA6IFxcXFxcXFwi54K55Ye75p+l55yLIFxcXFxcXFwiICsgdHl0aXQgKyBcXFxcXFxcIiDliIbnsbsgXFxcXFxcXCIgKyBrZXkgKyBcXFxcXFxcIiDnmoTogZrmkJznu5PmnpxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSQkJCcgKyBrZXkgKyAnJCQkZnlwYWdlJCQkJykucnVsZSgobGlzdCwgdHl0aXQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0ge307XFxcXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxcXG4gICAgICAgICAgICAgICAgLy/lj5bmkJzntKLnur/nqIvorr7nva5cXFxcbiAgICAgICAgICAgICAgICB2YXIgc3N4YyA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuc3Njb3VudDtcXFxcbiAgICAgICAgICAgICAgICAvL+iuvue9rui2heaXtuaXtumXtO+8jOi2iuWwj+i2iuW/q++8jOWNleS9jeavq+enklxcXFxuICAgICAgICAgICAgICAgIC8vdmFyIHRpbWVvdSA9IDUwMDA7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IE1ZX1VSTC5zcGxpdCgnJCQkJylbMV07XFxcXG4gICAgICAgICAgICAgICAgdmFyIG51bSA9IE1ZX1VSTC5zcGxpdCgnJCQkJylbMl07XFxcXG4gICAgICAgICAgICAgICAgdmFyIGxlID0gcGFyc2VJbnQobnVtICogc3N4Yyk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIERhdGEgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgVGl0ID0gW107XFxcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGxlIC0gc3N4YzsgaiA8IGxlOyBqKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBsaXN0Lmxlbmd0aCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBsaXN0W2pdLnVybDtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9BUFDlvbHop4YvLnRlc3QodHl0aXQpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmsuaW5kZXhPZignYXBpLnBocC9hcHAvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICdzZWFyY2g/cGc9MSZ0ZXh0PScgKyBrZXkgKyAnJnRva2VuPSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5rLmluZGV4T2YoJ3hnYXBwLnBocC92MS8nKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJ3NlYXJjaD9wZz0xJnRleHQ9JyArIGtleTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGxpbmspKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJy9saXN0P3BhZ2U9ZnlwYWdlJmxpbWl0PTEwJndkPScgKyBrZXk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9wYWdlPTEmbGltaXQ9MTAmd2Q9JyArIGtleTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1RW5b2x6KeGLy50ZXN0KHR5dGl0KSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvMTlqeHwyOTN5c3x6aGFpa2FueXN8amlcXFxcXFxcXC1kaW5nXFxcXFxcXFwtaGV8cGhvZWJlfHl1bmJvXFxcXFxcXFwuYnhpbnxsYW5yZW50a3xoZXRhb3lzfHB4dW58MTM5XFxcXFxcXFwuMTU1fGZra2R5fDA1NjE1OHxhaXhpeGl8cnVveGluZXd8ZmVpZmFuMTIzfHNpcWl0di8udGVzdChsaW5rKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9hYz1saXN0JnptPScgKyBrZXkgKyAnJnBhZ2U9MSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICc/YWM9bGlzdCZ3ZD0nICsga2V5ICsgJyZwYWdlPTEnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vRGF0YS5wdXNoKHt1cmw6IGhtdXJsLG9wdGlvbnM6IHtoZWFkZXJzOiB7XFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFxcXFxcXFwiRGFydC8yLjEzIChkYXJ0OmlvKVxcXFxcXFwifSx0aW1lb3V0OiB0aW1lb3V9fSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRhLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaG11cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogXFxcXFxcXCJEYXJ0LzIuMTMgKGRhcnQ6aW8pXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgVGl0LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdDogbGlzdFtqXS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBsaW5rLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cG5tOiB0eXRpdFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gLy9pZlxcXFxuICAgICAgICAgICAgICAgIH0gLy9mb3IgalxcXFxuXFxcXG4gICAgICAgICAgICAgICAgLy8tLS3ku6PnoIHliIbnlYznur8tLS0tIFxcXFxuICAgICAgICAgICAgICAgIGlmIChEYXRhICE9ICcnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBiaHRtbCA9IGJhdGNoRmV0Y2goRGF0YSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwRXJyb3IuanNvblxcXFxcXFwiLEpTT04uc3RyaW5naWZ5KGJodG1sKSk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBiaHRtbC5sZW5ndGg7IGsrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBiaHRtbFtrXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcoMCwgMikgPT0gJ1xcXFxcXFxcclxcXFxcXFxcbicgPyBodG1sLnJlcGxhY2UoJ1xcXFxcXFxcclxcXFxcXFxcbicsICcnKSA6IGh0bWw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9idHdhZi8udGVzdChodG1sKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaChEYXRhW2tdLnVybCArICcmYnR3YWYnICsgaHRtbC5tYXRjaCgvYnR3YWYoLio/KVxcXFxcXFxcXFxcXFxcXCIvKVsxXSwge30pO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHRtbCA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IGh0bWwgPT0gbnVsbCB8fCBodG1sLnN1YnN0cmluZygwLCA1KSA9PSAnZXJyb3InIHx8ICFodG1sLnN0YXJ0c1dpdGgoJ3snKSkge1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBUaXRba10udGl0ICsgJyAnICsgJ+acquaQnOe0ouWIsO+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogRGF0YVtrXS51cmwgKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5sZW5ndGggPCA4MCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogVGl0W2tdLnRpdCArICcgJyArICfov5Tlm57mlbDmja7kuI3lrozmlbTvvIzngrnlh7vorr/pl67ljp/nvZHpobUnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IERhdGFba10udXJsICsgYEBsYXp5UnVsZT0uanM6aW5wdXQuc3BsaXQoJzsnKVswXWAsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoaHRtbCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coaHRtbCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGV0ID0gVGl0W2tdLnR5cG5tO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZG9taW4gPSBUaXRba10ubGluaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHRtbC5saXN0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gaHRtbC5saXN0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLmxpc3QpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBodG1sLmRhdGEubGlzdDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5sZW5ndGggPCAxKSB7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogVGl0W2tdLnRpdCArICcgJyArICfliJfooajlsI/kuo4x77yM5peg5rOV5bGV56S677yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogRGF0YVtrXS51cmwgKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9UVuW9seinhi8udGVzdCh0eXBldCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnRpdGxlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnBpYztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gbGlzdFtpXS5uZXh0bGluaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS5zdGF0ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL0FQUOW9seinhi8udGVzdCh0eXBldCkpIHtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZG9taW4uaW5kZXhPZignYXBpLnBocC9hcHAvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9mYW50dWFuLy50ZXN0KHRkb21pbikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSAnaHR0cHM6Ly9mYW50dWFuLndrZmlsZS5jb20vYXBpLnBocC9hcHAvdmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAndmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRkb21pbi5pbmRleE9mKCd4Z2FwcC5waHAvdjEvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICd2aWRlb19kZXRhaWw/aWQ9JyArIGxpc3RbaV0udm9kX2lkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnZvZF9uYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS52b2RfcGljO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KHRkb21pbikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnL2RldGFpbElEP3ZvZF9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJy9kZXRhaWw/dm9kX2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnN0YXRlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2codmlkKTtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IE1ZX1RZUEUgPT0gXFxcXFxcXCJob21lXFxcXFxcXCIgPyB0aXRsZS5yZXBsYWNlKGtleSwgJ+KAnOKAnCcgKyBrZXkgKyAn4oCd4oCdJykgKyAnXFxcXFxcXFxuJyArIHJlbSA6IHRpdGxlICsgcmVtLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IHBpYyArICdAUmVmZXJlcj0nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCh2aWQgKyAnO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfScpLnJ1bGUoKHR5cGV0KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShnZXRSZXNDb2RlKCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICcyNTUmJmZsb2F0JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG15dXJsID0gTVlfVVJMLm1hdGNoKC8oW1xcXFxcXFxcU10qPzpcXFxcXFxcXC9cXFxcXFxcXC9bXFxcXFxcXFxTXSo/KVxcXFxcXFxcLy8pWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL0FQUOW9seinhi8udGVzdCh0eXBldCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9UVuW9seinhi8udGVzdCh0eXBldCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3R2bW92bGlzdCcsIHt9KSkucnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHlwZXQpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29udGVudDogcmVtLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHR5cGV0ICsgJyA9PiAnICsgVGl0W2tdLnRpdCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy9mb3IgaVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy9pZiBsaXN0Lmxlbmd0aFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IC8vZm9yIGsgYmh0bWwubGVuZ3RoXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXFxcbiAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxcXG4gICAgICAgICAgICB9LCBsaXN0LCB0eXRpdCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICB9IC8vZm9yIGlcXFxcbn07IC8vZW5kIG1vZGUgMVxcXFxuXFxcXG5pZiAoc3Ntb2RlID09ICcwJyB8fCBNWV9UWVBFID09ICdob21lJykge1xcXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgdmFyIGxpc3QgPSBkbGlzdFtpXS5saXN0O1xcXFxuICAgICAgICB2YXIgdHl0aXQgPSBkbGlzdFtpXS50aXRsZVxcXFxuICAgICAgICBpZiAocmFuZG9tKSB7XFxcXG4gICAgICAgICAgICBsZXQgayA9IGdldFZhcihNWV9SVUxFLnRpdGxlICsgXFxcXFxcXCItXFxcXFxcXCIgKyB0eXRpdCwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAoayA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgbGlzdCA9IHJhbmRvbVNvcnQzKGxpc3QpXFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcIi1cXFxcXFxcIiArIHR5dGl0LCBKU09OLnN0cmluZ2lmeShsaXN0KSlcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgbGlzdCA9IEpTT04ucGFyc2UoaylcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IE1ZX1RZUEUgPT0gXFxcXFxcXCJob21lXFxcXFxcXCIgPyBcXFxcXFxcIiDpgInmi6nkuIDkuKogXFxcXFxcXCIrZGxpc3RbaV0udGl0bGUrXFxcXFxcXCIg6aG555uu5p+l55yLIOKAnOKAnFxcXFxcXFwiICsga2V5ICsgXFxcXFxcXCLigJ3igJ0g55qE5pCc57Si57uT5p6cXFxcXFxcXCIgOiBcXFxcXFxcIiDpgInmi6nkuIDkuKogXFxcXFxcXCIrZGxpc3RbaV0udGl0bGUrXFxcXFxcXCIg6aG555uu5p+l55yLIFxcXFxcXFwiICsga2V5ICsgXFxcXFxcXCIg55qE5pCc57Si57uT5p6cXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9IGxpc3Rbal0udXJsO1xcXFxuXFxcXG4gICAgICAgICAgICBpZiAoL0FQUOW9seinhi8udGVzdCh0eXRpdCkpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAobGluay5pbmRleE9mKCdhcGkucGhwL2FwcC8nKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJ3NlYXJjaD9wZz1meXBhZ2UmdGV4dD0nICsga2V5ICsgJyZ0b2tlbj0nO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluay5pbmRleE9mKCd4Z2FwcC5waHAvdjEvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICdzZWFyY2g/cGc9ZnlwYWdlJnRleHQ9JyArIGtleTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGxpbmspKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJy9saXN0P3BhZ2U9ZnlwYWdlJmxpbWl0PTEwJndkPScgKyBrZXk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9wYWdlPWZ5cGFnZSZsaW1pdD0xMCZ3ZD0nICsga2V5O1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgvVFblvbHop4YvLnRlc3QodHl0aXQpKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKC8xOWp4fDI5M3lzfHpoYWlrYW55c3xqaVxcXFxcXFxcLWRpbmdcXFxcXFxcXC1oZXxwaG9lYmV8eXVuYm9cXFxcXFxcXC5ieGlufGxhbnJlbnRrfGhldGFveXN8cHh1bnwxMzlcXFxcXFxcXC4xNTV8ZmtrZHl8MDU2MTU4fGFpeGl4aXxydW94aW5ld3xmZWlmYW4xMjN8c2lxaXR2Ly50ZXN0KGxpbmspKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnP2FjPWxpc3Qmem09JyArIGtleSArICcmcGFnZT1meXBhZ2UnO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnP2FjPWxpc3Qmd2Q9JyArIGtleSArICcmcGFnZT1meXBhZ2UnO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0W2pdLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgIGltZzogbGlzdFtqXS5pbWcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I3gjJyArIGhtdXJsICsgJyN4IycgKyBsaW5rICsgJyN4IycgKyB0eXRpdCArICcjeCMnICsga2V5ICsgJyN4IycpLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9zZWFyZXJqJyk7XFxcXG4gICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3JvdW5kX3NtYWxsXzQnXFxcXG4gICAgICAgICAgICAgICAgLy9jb2xfdHlwZTogJ3RleHRfMydcXFxcbiAgICAgICAgICAgICAgICAvL2xpbms6bGluayxcXFxcbiAgICAgICAgICAgICAgICAvL3R5cGU6IGlcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIH0gLy9mb3IgalxcXFxuXFxcXG5cXFxcbiAgICB9IC8vZm9yIGlcXFxcblxcXFxufSAvL2VuZCBtb2RlIDBcXFxcblxcXFxuXFxcXG5yZXMuZGF0YSA9IGl0ZW1zO1xcXFxuc2V0SG9tZVJlc3VsdChyZXMpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIkFQUOWIhuexu+WIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJhcHBsaXN0ZGF0YVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJpZiAoaHRtbC5saXN0KSB7XFxcXG4gICAgdmFyIGxpc3QgPSBodG1sLmxpc3Q7XFxcXG59IGVsc2UgaWYgKGh0bWwuZGF0YSAmJiBodG1sLmRhdGEubGlzdCkge1xcXFxuICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhLmxpc3Q7XFxcXG59IGVsc2Uge1xcXFxuICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhO1xcXFxufVxcXFxuLy9sb2cobGlzdCk7XFxcXG5mb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnZvZF9uYW1lO1xcXFxuICAgIHZhciBpbWcgPSBsaXN0W2ldLnZvZF9waWM7XFxcXG4gICAgdmFyIHVybCA9IGxpc3RbaV0udm9kX2lkO1xcXFxuICAgIHZhciBkZXNjID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXFxcbiAgICBpZiAoaHRtbC5saXN0KSB7XFxcXG4gICAgICAgIC8vbG9nKCdodG1sLmxpc3QnKTtcXFxcbiAgICAgICAgaWYgKC9mYW50dWFuLy50ZXN0KG11cmwpKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9ICdodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS9hcGkucGhwL2FwcC92aWRlb19kZXRhaWw/aWQ9JyArIHVybCArICcmdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAndmlkZW9fZGV0YWlsP2lkPScgKyB1cmwgKyAnJnRva2VuPTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX0nO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIGlmIChodG1sLmRhdGEgJiYgaHRtbC5kYXRhLmxpc3QpIHtcXFxcbiAgICAgICAgLy9sb2coJ2h0bWwuZGF0YS5saXN0Jyk7XFxcXG4gICAgICAgIGlmICgvaW9wZW55dW4vLnRlc3QobXVybCkpIHtcXFxcbiAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICcvZGV0YWlsSUQ/dm9kX2lkPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX0nO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJy9kZXRhaWw/dm9kX2lkPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX0nO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy9sb2coJ2Vsc2UnKTtcXFxcbiAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JztcXFxcbiAgICB9XFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgcGljX3VybDogaW1nICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgIHVybDogJChsaW5rKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXFxcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6ICcyNTUmJmZsb2F0JyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICcnLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hYNVdlYlZpZXcoJycpO1xcXFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxcXG4gICAgICAgICAgICB2YXIgbXl1cmwgPSBNWV9VUkwubWF0Y2goLyhbXFxcXFxcXFxTXSo/OlxcXFxcXFxcL1xcXFxcXFxcL1tcXFxcXFxcXFNdKj8pXFxcXFxcXFwvLylbMV07XFxcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9hcHBtb3ZsaXN0Jywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgIHJlcy5kYXRhID0gaXRlbXM7XFxcXG4gICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBkZXNjOiBkZXNjLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZSdcXFxcbiAgICB9KTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJUVuWIl+ihqOino+aekFxcXCIsXFxcInBhdGhcXFwiOlxcXCJ0dmxpc3RkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBsaXN0ID0gaHRtbC5kYXRhO1xcXFxuZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgdmFyIHRpdGxlID0gbGlzdFtpXS50aXRsZTtcXFxcbiAgICB2YXIgaW1nID0gbGlzdFtpXS5waWM7XFxcXG4gICAgdmFyIHVybCA9IGxpc3RbaV0ubmV4dGxpbms7XFxcXG4gICAgdmFyIGRlc2MgPSBsaXN0W2ldLnN0YXRlO1xcXFxuICAgIHVybCA9IHVybC5zdGFydHNXaXRoKCdodHRwJykgPyB1cmwgOiBtdXJsICsgJz9hYz1kZXRhaWwmaWRzPScgKyB1cmw7XFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgcGljX3VybDogaW1nICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgIHVybDogJCh1cmwpLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIHJlcyA9IHt9O1xcXFxuICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoZ2V0UmVzQ29kZSgpKTtcXFxcbiAgICAgICAgICAgIHZhciBteXVybCA9IE1ZX1VSTC5tYXRjaCgvKFtcXFxcXFxcXFNdKj86XFxcXFxcXFwvXFxcXFxcXFwvW1xcXFxcXFxcU10qPylcXFxcXFxcXC8vKVsxXTtcXFxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnMjU1JiZmbG9hdCcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAnJyxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZWZyZXNoWDVXZWJWaWV3KCcnKTtcXFxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3R2bW92bGlzdCcsIHt9KSkucnVsZSk7XFxcXG4gICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcXFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgZGVzYzogZGVzYyxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zX21hcnF1ZWUnXFxcXG4gICAgfSk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQVBQ566A5LuL5LiO6YCJ6ZuGXFxcIixcXFwicGF0aFxcXCI6XFxcImFwcG1vdmxpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwiaWYgKGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxcXG4gICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxcXG4gICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXFxcbiAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXFxcbiAgICAgICAgdmFyIHRhYnMgPSBodG1sLmRhdGEudm9kX3BsYXlfZnJvbS5zcGxpdCgnJCQkJyk7XFxcXG4gICAgfVxcXFxufSBlbHNlIGlmIChodG1sLmRhdGEudm9kX2luZm8gJiYgaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXFxcbiAgICB2YXIgY29udHMgPSBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcjtcXFxcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcXFxuICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGxheV91cmwuc3BsaXQoJyQkJCcpO1xcXFxuICAgICAgICB2YXIgdGFicyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGxheV9mcm9tLnNwbGl0KCckJCQnKTtcXFxcbiAgICB9XFxcXG59IGVsc2Uge1xcXFxuICAgIHZhciBjb250cyA9IGh0bWwuZGF0YS52b2RfcGxheV9saXN0O1xcXFxuICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxcXG4gICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9wbGF5X3VybC5zcGxpdCgnJCQkJyk7XFxcXG4gICAgICAgIHZhciB0YWJzID0gaHRtbC5kYXRhLnZvZF9wbGF5X2Zyb20uc3BsaXQoJyQkJCcpO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuLy9sb2coY29udHMpO1xcXFxuXFxcXG52YXIgdGh1bWIgPSBodG1sLmRhdGEudm9kX2luZm8gPyBodG1sLmRhdGEudm9kX2luZm8udm9kX3BpYyA6IGh0bWwuZGF0YS52b2RfcGljO1xcXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvZG5wbHVnaW4nLCB7fSkpLnJ1bGUpO1xcXFxuaXRlbXMucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfliafmg4XnroDku4vvvJonLFxcXFxuICAgIGRlc2M6IGh0bWwuZGF0YS52b2RfaW5mbyA/IGh0bWwuZGF0YS52b2RfaW5mby52b2RfY29udGVudCA6IGh0bWwuZGF0YS52b2RfY29udGVudCxcXFxcbiAgICBwaWNfdXJsOiB0aHVtYixcXFxcbiAgICB1cmw6IGRucHVnLFxcXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxcXG59KTtcXFxcbnZhciBqaWVrID0gJyc7XFxcXG5mb3IgKHZhciBpID0gMDsgaSA8IGNvbnRzLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgaWYgKGNvbnRzW2ldLnVybHMpIHtcXFxcbiAgICAgICAgdmFyIGxpc3QgPSBjb250c1tpXS51cmxzO1xcXFxuICAgIH0gZWxzZSBpZiAoY29udHNbaV0udXJsKSB7XFxcXG4gICAgICAgIHZhciBsaXN0ID0gY29udHNbaV0udXJsLnNwbGl0KFxcXFxcXFwiI1xcXFxcXFwiKTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2ldLnNwbGl0KFxcXFxcXFwiI1xcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgLy9zZXRFcnJvcihsaXN0Lmxlbmd0aCk7XFxcXG4gICAgaWYgKGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxcXG4gICAgICAgIHZhciBwdGFiID0gY29udHNbaV0uY29kZSA/IGNvbnRzW2ldLmNvZGUgOiB0YWJzW2ldO1xcXFxuICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLnZvZF9pbmZvICYmIGh0bWwuZGF0YS52b2RfaW5mby52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxcXG4gICAgICAgIHZhciBwdGFiID0gY29udHNbaV0uY29kZSA/IGNvbnRzW2ldLmNvZGUgOiB0YWJzW2ldO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHZhciBwdGFiID0gY29udHNbaV0uZnJvbSA/IGNvbnRzW2ldLmZyb20gOiB0YWJzW2ldO1xcXFxuICAgIH1cXFxcbiAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHB0YWIgKyAnIPCflJcnICsgW2kgKyAxXSArICcvJyArIFtjb250cy5sZW5ndGhdLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcbiAgICB9KTtcXFxcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXFxcbiAgICAgICAgaWYgKGNvbnRzW2ldLnVybHMpIHtcXFxcbiAgICAgICAgICAgIHZhciB2bGluayA9IGxpc3Rbal0udXJsO1xcXFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtqXS5uYW1lO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmFyIHZsaW5rID0gbGlzdFtqXS5zcGxpdChcXFxcXFxcIiRcXFxcXFxcIilbMV07XFxcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2pdLnNwbGl0KFxcXFxcXFwiJFxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgaWYgKGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGppZWsgPSBjb250c1tpXS5wYXJzZV9hcGk7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcXFxuICAgICAgICAgICAgICAgIHZhciBqaWVrID0gY29udHNbaV0ucGFyc2VfYXBpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoY29udHNbaV0ucGxheWVyX2luZm8ucGFyc2UyICYmIChjb250c1tpXS5wbGF5ZXJfaW5mby5wYXJzZTIpLmluZGV4T2YoXFxcXFxcXCI9XFxcXFxcXCIpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBqaWVrID0gKGNvbnRzW2ldLnBsYXllcl9pbmZvLnBhcnNlMikubWF0Y2goLy4qP3VybD18Lio/dj18Lio/dmlkPS8pWzBdLnJlcGxhY2UoXFxcXFxcXCIuLlxcXFxcXFwiLCBcXFxcXFxcIi5cXFxcXFxcIikucmVwbGFjZSgnanNvbmJzJywgJycpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHNbaV0ucGxheWVyX2luZm8ucGFyc2UgJiYgKGNvbnRzW2ldLnBsYXllcl9pbmZvLnBhcnNlKS5pbmRleE9mKFxcXFxcXFwiPVxcXFxcXFwiKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgamllayA9IChjb250c1tpXS5wbGF5ZXJfaW5mby5wYXJzZSkubWF0Y2goLy4qP3VybD18Lio/dj18Lio/dmlkPS8pWzBdLnJlcGxhY2UoXFxcXFxcXCIuLlxcXFxcXFwiLCBcXFxcXFxcIi5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGppZWsgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvL3NldEVycm9yKGppZWspOyAgICAgICAgICAgICAgICBcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICAgICAgaWYgKGppZWsgIT0gJycgJiYgamllayAhPSBudWxsKSB7XFxcXG4gICAgICAgICAgICBpZiAoamllay5zdWJzdHJpbmcoMCwgNCkgPT0gJ2h0dHAnKSB7XFxcXG4gICAgICAgICAgICAgICAgamllayA9IGppZWs7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGppZWsuc3Vic3RyaW5nKDAsIDIpID09ICdcXFxcXFxcXC9cXFxcXFxcXC8nKSB7XFxcXG4gICAgICAgICAgICAgICAgamllayA9ICdodHRwczonICsgamllaztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvL+WvueWkseaViOaOpeWPo+i/m+ihjOabv+aNolxcXFxuICAgICAgICBpZiAoL2Nva2Vtdi8udGVzdChteXVybCkgJiYgL2Nva2VxaWV8eGlufDkwbW0vLnRlc3QocHRhYikpIHtcXFxcbiAgICAgICAgICAgIGppZWsgPSAnaHR0cHM6Ly9wbGF5ZXIuOTBtbS5tZS9wbGF5LnBocD91cmw9JztcXFxcbiAgICAgICAgfSBlbHNlIGlmICgvanNvblxcXFxcXFxcLm0zdThcXFxcXFxcXC50di8udGVzdChqaWVrKSkge1xcXFxuICAgICAgICAgICAgamllayA9ICdodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD0nO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKC9janQ1MjEvLnRlc3QobXl1cmwpKSB7XFxcXG4gICAgICAgICAgICBqaWVrID0gY29udHNbaV0ucGxheWVyX2luZm8ucGFyc2U7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLy/lo7DmmI7pk77mjqVcXFxcbiAgICAgICAgdmFyIGxpbmsgPSBqaWVrICsgdmxpbms7XFxcXG4gICAgICAgIGlmICgvXFxcXFxcXFwubTN1OHxcXFxcXFxcXC5tcDR8b2JqXFxcXFxcXFwvdG9zLy50ZXN0KHZsaW5rKSAmJiAvaHR0cC8udGVzdCh2bGluaykpIHtcXFxcbiAgICAgICAgICAgIGxpbmsgPSB2bGluaztcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvL2xvZyhsaW5rKTtcXFxcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoIDw9IDQpIHtcXFxcbiAgICAgICAgICAgIHZhciBjbHQgPSAndGV4dF8yJztcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciBjbHQgPSBpc05hTih0aXRsZSkgPyAnZmxleF9idXR0b24nIDogJ3RleHRfNSdcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocHRhYiwgbGluaywgbXl1cmwpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvcGVudXJsKHJlc3VybCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdXJsLm1hdGNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICYmIHJlc3VybC5zZWFyY2goL2h0bWx8YmlsaWJpbGkvKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuRG4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLmVuRG47XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5EbiA9PSAnMScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+iwg+eUqOaWreaPkuino+aekCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcXFxcXCJ2YXIgY29uZmlnID1cXFxcXFxcIiArIGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShyZXN1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdXJsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VybFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgc3JjdXJsID0gbGluaztcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhzcmN1cmwpO1xcXFxuICAgICAgICAgICAgICAgIC8v5Yqo5oCB6Kej5p6Q5Luj56CB5byA5aeLXFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy/lpITnkIbmjIflrprop4bpopHkuI7nur/ot69cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9cXFxcXFxcXC5tM3U4fFxcXFxcXFxcLm1wNHxvYmpcXFxcXFxcXC90b3MvLnRlc3Qoc3JjdXJsKSAmJiAvaHR0cC8udGVzdChzcmN1cmwpICYmICEvXFxcXFxcXFwuaHRtbC8udGVzdChzcmN1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL3drZmlsZS8udGVzdChzcmN1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNyY3VybCArICc7e1JlZmVyZXJAaHR0cHM6Ly9mYW50dWFuLndrZmlsZS5jb20vfSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2R1b2R1b3p5Ly50ZXN0KHB0YWIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBmZXRjaCgnaHR0cHM6Ly9wbGF5ZXIuZHVvZHVvenkuY29tL2RkcGxheS9hcGkucGhwP3VybD0nICsgc3JjdXJsLCB7fSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikudXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gL1xcXFxcXFxcPS8udGVzdChzcmN1cmwpID8gc3JjdXJsLnNwbGl0KCc9JylbMV0gOiBzcmN1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyY3VybC5pbmRleE9mKFxcXFxcXFwiL3NoYXJlL1xcXFxcXFwiKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IHNyY3VybC5zcGxpdChcXFxcXFxcIi9zaGFyZVxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmMgPSBmZXRjaChzcmN1cmwsIHt9KS5yZXBsYWNlKFxcXFxcXFwidmFyIHB1cmxcXFxcXFxcIiwgXFxcXFxcXCJ2YXIgbWFpblxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmMuaW5kZXhPZihcXFxcXFxcIm1haW5cXFxcXFxcIikgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdCA9IGZjLm1hdGNoKC92YXIgbWFpbi4qPzsvKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChtYXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxheSA9IChtYWluLmluZGV4T2YoXFxcXFxcXCJodHRwXFxcXFxcXCIpICE9IC0xID8gbWFpbiA6IGxpbmsgKyBtYWluKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFpbiA9IGZjLm1hdGNoKC91cmw6Lio/W1xcXFxcXFxcJ1xcXFxcXFxcXFxcXFxcXCJdKC4qPylbXFxcXFxcXFwnXFxcXFxcXFxcXFxcXFxcIl0vKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXkgPSAobWFpbi5pbmRleE9mKFxcXFxcXFwiaHR0cFxcXFxcXFwiKSAhPSAtMSA/IG1haW4gOiBsaW5rICsgbWFpbilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGF5O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAneDVXZWJWaWV3Oi8vJyArIChzcmN1cmwpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+axn+a5luW9seinhue6v+i3r1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHB0YWIgPT0gJ3JlbnJlbm1pJyAmJiBteXVybC5zZWFyY2goL2poZHl3LykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly9jYWNoZTEuamhkeXcudmlwOjgwOTEvcnJtaS5waHA/dXJsPScgKyBzcmN1cmwuc3BsaXQoJ3VybD0nKVsxXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhodG1sKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGh0bWwpLnVybDtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdmcWZpbG0nICYmIG15dXJsLnNlYXJjaCgvamhkeXcvKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwczovL3d3dy5qaGR5dy52aXAvamlleGkvZnEucGhwP3VybD0nICsgc3JjdXJsLnNwbGl0KCd1cmw9JylbMV0gKyAnJm5leHQ9JztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdycnNwJyAmJiBteXVybC5zZWFyY2goL2poZHl3LykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly93d3cuamhkeXcudmlwL2ppZXhpL3JyLnBocD91cmw9JyArIHNyY3VybC5zcGxpdCgndXJsPScpWzFdICsgJyZuZXh0PSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2poeXVuXFxcXFxcXFwucGhwLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICd4NVdlYlZpZXc6Ly8nK3NyY3VybC5yZXBsYWNlKCdodHRwOi8vc3ZpcC5qaHl1bi5qeC5jbjoxMjM0L2poeXVuLnBocD91cmw9JywgJ2h0dHBzOi8vYXBpLmpoZHl3LnZpcC8/dXJsPScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpobGluID0gc3JjdXJsLnJlcGxhY2UoJ2h0dHA6Ly9zdmlwLmpoeXVuLmp4LmNuOjEyMzQvamh5dW4ucGhwP3VybD0nLCAnaHR0cHM6Ly9hcGkuamhkeXcudmlwLz91cmw9Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEb21Gb3JIdG1sKHJlcXVlc3QoamhsaW4pLCAnI3ZpZGVvJiZzb3VyY2UmJnNyYycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/msZ/muZbnur/ot6/nu5PmnZ9cXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdhbGl6eScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gZmV0Y2goJ2h0dHBzOi8vZm91YmluLmNvbS9qaWV4aS5waHA/dXJsPScgKyBzcmN1cmwuc3BsaXQoJ3VybD0nKVsxXSwge30pLm1hdGNoKC9cXFxcXFxcXFxcXFxcXFwidXJsXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiKC4qPylcXFxcXFxcXFxcXFxcXFwiLylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybDtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvOTgzdmlwLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKHNyY3VybCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IE1PQklMRV9VQVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkuaGVhZGVycy5sb2NhdGlvblswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgveFxcXFxcXFxcLW5cXFxcXFxcXC5jY3xuaGR6NjY2Ly50ZXN0KHNyY3VybCkgJiYgL1xcXFxcXFxcLmh0bWx8YmlsaWJpbGkvLnRlc3Qoc3JjdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwoc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAvL+WkhOeQhuaMh+WumuinhumikeWSjOe6v+i3r+e7k+adn1xcXFxuICAgICAgICAgICAgICAgICAgICAvLy0tLS3liIblibLnur8tLS0tLy9cXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjb2RlID0gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogXFxcXFxcXCJEYXJ0LzIuMTMgKGRhcnQ6aW8pXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoU3RhdHVzQ29kZTogdHJ1ZVxcXFxuICAgICAgICAgICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHNjb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb2RlLnN0YXR1c0NvZGUgPT0gJzMwMicgfHwgc2NvZGUuc3RhdHVzQ29kZSA9PSAnMzAxJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/miZPlvIDop6PmnpDmnIkzMDLph43lrprlkJHnmoTpk77mjqVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWR1cmwgPSBzY29kZS5oZWFkZXJzLmxvY2F0aW9uWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9cXFxcXFxcXD1odHRwLy50ZXN0KHJlZHVybCkgJiYgL2h0bWx8YmlsaWJpbGkvLnRlc3QocmVkdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKHJlZHVybCwge30pKS51cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9cXFxcXFxcXD1odHRwLy50ZXN0KHJlZHVybCkgJiYgL1xcXFxcXFxcLm0zdTh8XFxcXFxcXFwubXA0fFxcXFxcXFxcLmZsdi8udGVzdChyZWR1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVybC5zdWJzdHJpbmcocmVkdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVybFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgaHRtbCA9IHJlcXVlc3Qoc3JjdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gc2NvZGUuYm9keTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXFxcXFw8Ym9keS8udGVzdChodG1sKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn5bCd6K+V572R6aG16Kej5p6QJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZUNhY2hlKCdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9semsyMzU1OS9QdWJsaWNSdWxlL3Jhdy9tYXN0ZXIveDVydWxlLmpzJywgMjQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4NXJ1bGUoc3JjdXJsLHNyY3VybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gb3BlbnVybChzcmN1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2pzb27op6PmnpDnmoTlj5bpk77mjqVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9IGh0bWwubWF0Y2goL1tcXFxcXFxcXCdcXFxcXFxcXFxcXFxcXFwiXXVybFtcXFxcXFxcXCdcXFxcXFxcXFxcXFxcXFwiXTouKj9bXFxcXFxcXFwnXFxcXFxcXFxcXFxcXFxcIl0oLio/KVtcXFxcXFxcXCdcXFxcXFxcXFxcXFxcXFwiXS8pWzFdLnJlcGxhY2UoL1xcXFxcXFxcXFxcXFxcXFwvZywgJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvaHR0cC8udGVzdChwdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHRhYiA9PSAnYmlsaWJpbGknKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLyYmVXNlci1BZ2VudEBNb3ppbGxhLzUuMH0nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHB0YWIgPT0gJ21ndHYnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIycgKyAnO3tSZWZlcmVyQHd3dy5tZ3R2LmNvbSYmVXNlci1BZ2VudEBNb3ppbGxhLzUuMH0nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvXFxcXFxcXFw9aHR0cC8udGVzdChzcmN1cmwpICYmIC9cXFxcXFxcXC5odG1sfGJpbGliaWxpLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwoc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL+mdnmh0dHDlvIDlpLTnmoTmiZPlvIDljp/pk77mjqUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8v5oql6ZSZ5Yik5pat5aSE55CGXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcmN1cmwuc3Vic3RyaW5nKDAsIDIpID09ICdcXFxcXFxcXC9cXFxcXFxcXC8nKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybCgnaHR0cHM6JyArIHNyY3VybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFxcXFxcPWh0dHAvLnRlc3Qoc3JjdXJsKSAmJiAvXFxcXFxcXFwuaHRtbHxiaWxpYmlsaS8udGVzdChzcmN1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBzcmN1cmwuc3BsaXQoJz0nKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybChzcmN1cmwpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAneDVXZWJWaWV3Oi8vJytzcmN1cmxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvL+WKqOaAgeino+aekOS7o+eggee7k+adn1xcXFxuICAgICAgICAgICAgfSwgcHRhYiwgbGluaywgbXl1cmwpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IGNsdFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiVFbnroDku4vkuI7pgInpm4ZcXFwiLFxcXCJwYXRoXFxcIjpcXFwidHZtb3ZsaXN0XFxcIixcXFwicnVsZVxcXCI6XFxcInZhciB0YWJzID0gT2JqZWN0LmtleXMoaHRtbC52aWRlb2xpc3QpO1xcXFxudmFyIHRodW1iID0gaHRtbC5pbWdfdXJsO1xcXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvZG5wbHVnaW4nLCB7fSkpLnJ1bGUpO1xcXFxuaXRlbXMucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfliafmg4XnroDku4vvvJonLFxcXFxuICAgIGRlc2M6IGh0bWwuaW50cm8sXFxcXG4gICAgcGljX3VybDogdGh1bWIsXFxcXG4gICAgdXJsOiBkbnB1ZyxcXFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJ1xcXFxufSk7XFxcXG5cXFxcbmZvciAodmFyIGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xcXFxuICAgIHZhciBsaXN0ID0gaHRtbC52aWRlb2xpc3RbdGFic1tpXV07XFxcXG4gICAgdmFyIHB0YWIgPSB0YWJzW2ldO1xcXFxuICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogcHRhYiArICcg8J+UlycgKyBbaSArIDFdICsgJy8nICsgW3RhYnMubGVuZ3RoXSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXFxcbiAgICAgICAgdmFyIHNyY3VybCA9IGxpc3Rbal0udXJsO1xcXFxuICAgICAgICBpZiAoLzI5M2p4MS8udGVzdChzcmN1cmwpKSB7XFxcXG4gICAgICAgICAgICBzcmN1cmwgPSBzcmN1cmwucmVwbGFjZSgnMjkzangxJywgJ2p4Jyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtqXS50aXRsZTtcXFxcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoIDw9IDQpIHtcXFxcbiAgICAgICAgICAgIHZhciBjbHQgPSAndGV4dF8yJztcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciBjbHQgPSBpc05hTih0aXRsZSkgPyAnZmxleF9idXR0b24nIDogJ3RleHRfNSdcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocHRhYiwgc3JjdXJsLCBteXVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9wZW51cmwocmVzdXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1cmwubWF0Y2goL3lvdWt1fG1ndHZ8aXhpZ3VhfHFxLmNvbXxxaXlpfG1pZ3V8YmlsaWJpbGl8c29odXxwcHR2fGxlfDE5MDUuY29tLykgJiYgcmVzdXJsLnNlYXJjaCgvaHRtbHxiaWxpYmlsaS8pICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5EbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuZW5EbjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbkRuID09ICcxJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn6LCD55So5pat5o+S6Kej5p6QJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChcXFxcXFxcInZhciBjb25maWcgPVxcXFxcXFwiICsgZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWcuY2opKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHJlc3VybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1cmxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKHNyY3VybCk7XFxcXG4gICAgICAgICAgICAgICAgLy/liqjmgIHop6PmnpDku6PnoIHlvIDlp4tcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFxcXFxcLm0zdTh8XFxcXFxcXFwubXA0fG9ialxcXFxcXFxcL3Rvcy8udGVzdChzcmN1cmwpICYmIC9odHRwLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAvXFxcXFxcXFw9Ly50ZXN0KHNyY3VybCkgPyBzcmN1cmwuc3BsaXQoJz0nKVsxXSA6IHNyY3VybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjdXJsLmluZGV4T2YoXFxcXFxcXCIvc2hhcmUvXFxcXFxcXCIpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gc3JjdXJsLnNwbGl0KFxcXFxcXFwiL3NoYXJlXFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYyA9IGZldGNoKHNyY3VybCwge30pLnJlcGxhY2UoXFxcXFxcXCJ2YXIgcHVybFxcXFxcXFwiLCBcXFxcXFxcInZhciBtYWluXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYy5pbmRleE9mKFxcXFxcXFwibWFpblxcXFxcXFwiKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0ID0gZmMubWF0Y2goL3ZhciBtYWluLio/Oy8pWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKG1hdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF5ID0gKG1haW4uaW5kZXhPZihcXFxcXFxcImh0dHBcXFxcXFxcIikgIT0gLTEgPyBtYWluIDogbGluayArIG1haW4pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWluID0gZmMubWF0Y2goL3VybDouKj9bXFxcXFxcXFwnXFxcXFxcXFxcXFxcXFxcIl0oLio/KVtcXFxcXFxcXCdcXFxcXFxcXFxcXFxcXFwiXS8pWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxheSA9IChtYWluLmluZGV4T2YoXFxcXFxcXCJodHRwXFxcXFxcXCIpICE9IC0xID8gbWFpbiA6IGxpbmsgKyBtYWluKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYXk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd4NVdlYlZpZXc6Ly8nICsgKHNyY3VybClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdhbGl6eScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gZmV0Y2goJ2h0dHBzOi8vZm91YmluLmNvbS9qaWV4aS5waHA/dXJsPScgKyBzcmN1cmwsIHt9KS5tYXRjaCgvXFxcXFxcXFxcXFxcXFxcInVybFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiguKj8pXFxcXFxcXFxcXFxcXFxcIi8pWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLzE5anhcXFxcXFxcXC52aXB8bmZ5aW5nc2hpLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwucmVwbGFjZSgnaHR0cDovLycsICdodHRwczovLycpLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogTU9CSUxFX1VBXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKS5oZWFkZXJzLmxvY2F0aW9uWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC90aXRhbi5tZ3R2Ly50ZXN0KHB1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL29ialxcXFxcXFxcL3Rvcy8udGVzdChwdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAvLy0tLS3liIblibLnur8tLS0tLy9cXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjb2RlID0gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogTU9CSUxFX1VBXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0YXR1c0NvZGU6IHRydWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvZGUuc3RhdHVzQ29kZSA9PSAnMzAyJyB8fCBzY29kZS5zdGF0dXNDb2RlID09ICczMDEnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9IHNjb2RlLmhlYWRlcnMubG9jYXRpb25bMF07XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBodG1sID0gcmVxdWVzdChzcmN1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBzY29kZS5ib2R5O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coaHRtbCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFxcXFxcXFxcXFxcXCJ1cmxcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFw6XFxcXFxcXFxcXFxcXFxcImh0dHAvLnRlc3QoaHRtbCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9IGh0bWwubWF0Y2goL1xcXFxcXFxcXFxcXFxcXCJ1cmxcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIoLio/KVxcXFxcXFxcXFxcXFxcXCIvKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5zdGFydHNXaXRoKCd7JykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9IHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgcHVybCA9IHNyY3VybFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVDYWNoZSgnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vbHprMjM1NTkvUHVibGljUnVsZS9yYXcvbWFzdGVyL3g1cnVsZS5qcycsIDI0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDVydWxlKHNyY3VybCxzcmN1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICd4NVdlYlZpZXc6Ly8nKyhzcmN1cmwpIFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvdGl0YW4ubWd0di8udGVzdChwdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvb2JqXFxcXFxcXFwvdG9zLy50ZXN0KHB1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybFxcXFxuICAgICAgICAgICAgICAgICAgICB9O1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoc3JjdXJsLnN1YnN0cmluZygwLCAyKSA9PSAnXFxcXFxcXFwvXFxcXFxcXFwvJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwoJ2h0dHBzOicgKyBzcmN1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9cXFxcXFxcXD1odHRwLy50ZXN0KHNyY3VybCkgJiYgL1xcXFxcXFxcLmh0bWx8YmlsaWJpbGkvLnRlc3Qoc3JjdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gc3JjdXJsLnNwbGl0KCc9JylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybChzcmN1cmwuc3Vic3RyaW5nKHNyY3VybC5pbmRleE9mKCc9aHR0cCcpICsgMSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwoc3JjdXJsKVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8v5Yqo5oCB6Kej5p6Q5Luj56CB57uT5p2fXFxcXG4gICAgICAgICAgICB9LCBwdGFiLCBzcmN1cmwsIG15dXJsKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBjbHRcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWIl+ihqOaooeW8j+aQnOe0ouS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJzZWFyZXJqXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciByZXMgPSB7fTtcXFxcbnZhciBpdGVtcyA9IFtdO1xcXFxudmFyIHNwbCA9IGdldFJlc0NvZGUoKS5zcGxpdCgnI3gjJyk7XFxcXG52YXIgdHlwZXQgPSBzcGxbM107XFxcXG52YXIgdGRvbWluID0gc3BsWzJdO1xcXFxudmFyIGtleSA9IHNwbFs0XTtcXFxcblxcXFxuaWYgKC92aXBtdi8udGVzdCh0ZG9taW4pKSB7XFxcXG4gICAgdmFyIGJodG1sID0gcmVxdWVzdChzcGxbMV0pO1xcXFxufSBlbHNlIHtcXFxcbiAgICB2YXIgYmh0bWwgPSBmZXRjaChzcGxbMV0sIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFxcXFxcXFwiRGFydC8yLjEzIChkYXJ0OmlvKVxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn1cXFxcbnRyeSB7XFxcXG4gICAgYmh0bWwgPSBiaHRtbC5zdGFydHNXaXRoKCdcXFxcXFxcXHJcXFxcXFxcXG4nKSA/IGJodG1sLnJlcGxhY2UoJ1xcXFxcXFxcclxcXFxcXFxcbicsICcnKSA6IGJodG1sO1xcXFxufSBjYXRjaCAoZSkge31cXFxcbmlmICgvYnR3YWYvLnRlc3QoYmh0bWwpKSB7XFxcXG4gICAgLypcXFxcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6J+acieWuneWhlOmqjOivge+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogc3BsWzFdICsgYEBsYXp5UnVsZT0uanM6aW5wdXQuc3BsaXQoJzsnKVswXWAsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICovXFxcXG5cXFxcbiAgICBiaHRtbCA9IGZldGNoKHNwbFsxXSArICcmYnR3YWYnICsgYmh0bWwubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcXFxcXFxcXFwiLylbMV0sIHt9KTtcXFxcblxcXFxufVxcXFxuXFxcXG5pZiAoYmh0bWwgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBiaHRtbCA9PSBudWxsIHx8IGJodG1sLnN1YnN0cmluZygwLCA1KSA9PSAnZXJyb3InIHx8ICFiaHRtbC5zdGFydHNXaXRoKCd7JykpIHtcXFxcbiAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICfmnKrmkJzntKLliLDnm7jlhbPotYTmupDvvIzngrnlh7vorr/pl67ljp/nvZHpobUnLFxcXFxuICAgICAgICB1cmw6IHNwbFsxXSArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcbiAgICB9KTtcXFxcbn0gZWxzZSBpZiAoYmh0bWwubGVuZ3RoIDwgODApIHtcXFxcbiAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICfov5Tlm57mlbDmja7kuI3lrozmlbTvvIzngrnlh7vorr/pl67ljp/nvZHpobUnLFxcXFxuICAgICAgICB1cmw6IHNwbFsxXSArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcbiAgICB9KTtcXFxcbn0gZWxzZSB7XFxcXG4gICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGJodG1sKTtcXFxcbiAgICAvL2xvZyhzcGxbMV0pO1xcXFxuICAgIGlmIChodG1sLmxpc3QpIHtcXFxcbiAgICAgICAgdmFyIGxpc3QgPSBodG1sLmxpc3Q7XFxcXG4gICAgfSBlbHNlIGlmIChodG1sLmRhdGEubGlzdCkge1xcXFxuICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcXFxuICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhKSB7XFxcXG4gICAgICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhO1xcXFxuICAgIH1cXFxcblxcXFxuICAgIGlmIChsaXN0Lmxlbmd0aCA8IDEpIHtcXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+acquaQnOe0ouWIsO+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxcXG4gICAgICAgICAgICB1cmw6IHNwbFsxXSArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuXFxcXG4gICAgICAgICAgICBpZiAoL0FQUOW9seinhi8udGVzdCh0eXBldCkpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAodGRvbWluLmluZGV4T2YoJ2FwaS5waHAvYXBwLycpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnZvZF9waWM7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvZmFudHVhbi8udGVzdCh0ZG9taW4pKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gJ2h0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL2FwaS5waHAvYXBwL3ZpZGVvX2RldGFpbD9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZG9taW4uaW5kZXhPZigneGdhcHAucGhwL3YxLycpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnZvZF9waWM7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAndmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZDtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdCh0ZG9taW4pKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJy9kZXRhaWxJRD92b2RfaWQ9JyArIGxpc3RbaV0udm9kX2lkICsgJyZ0b2tlbj0nO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICcvZGV0YWlsP3ZvZF9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgvVFblvbHop4YvLnRlc3QodHlwZXQpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS50aXRsZTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS5waWM7XFxcXG4gICAgICAgICAgICAgICAgLy92YXIgdmlkPXRkb21pbisnL2RldGFpbD92b2RfaWQ9JytsaXN0W2ldLm5leHRsaW5rKycmcmVsX2xpbWl0PTEwJztcXFxcbiAgICAgICAgICAgICAgICB2YXIgdmlkID0gbGlzdFtpXS5uZXh0bGluaztcXFxcbiAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS5zdGF0ZTtcXFxcbiAgICAgICAgICAgICAgICAvL3ZhciBjb249bGlzdFtpXS5zdGF0ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLnJlcGxhY2Uoa2V5LCAn4oCc4oCcJyArIGtleSArICfigJ3igJ0nKSxcXFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBwaWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodmlkKyc7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9JykucnVsZSgodHlwZXQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHt9O1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJzI1NSYmZmxvYXQnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoWDVXZWJWaWV3KCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIG15dXJsID0gTVlfVVJMLm1hdGNoKC8oW1xcXFxcXFxcU10qPzpcXFxcXFxcXC9cXFxcXFxcXC9bXFxcXFxcXFxTXSo/KVxcXFxcXFxcLy8pWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL0FQUOW9seinhi8udGVzdCh0eXBldCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9UVuW9seinhi8udGVzdCh0eXBldCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3R2bW92bGlzdCcsIHt9KSkucnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcXFxuICAgICAgICAgICAgICAgIH0sIHR5cGV0KSxcXFxcbiAgICAgICAgICAgICAgICAvL2NvbnRlbnQ6cmVtLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IHJlbSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH0gLy9mb3IgaVxcXFxuICAgIH0gLy9lbHNlIGxpc3QubGVuZ3RoXFxcXG59XFxcXG5cXFxcbnJlcy5kYXRhID0gaXRlbXM7XFxcXG5zZXRIb21lUmVzdWx0KHJlcyk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQVBQ6aaW6aG15YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImFwcGluZGV4ZGF0YVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJpZiAoaHRtbC5saXN0KSB7XFxcXG4gICAgdmFyIGxpc3QgPSBodG1sLmxpc3Q7XFxcXG59IGVsc2UgaWYgKGh0bWwuZGF0YSAmJiBodG1sLmRhdGEubGlzdCkge1xcXFxuICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhLmxpc3Q7XFxcXG59IGVsc2Uge1xcXFxuICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhO1xcXFxufVxcXFxuXFxcXG5mb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICBpZiAobGlzdFtpXS52b2RfbGlzdCkge1xcXFxuICAgICAgICB2YXIgbGlzdHMgPSBsaXN0W2ldLnZvZF9saXN0O1xcXFxuICAgICAgICB2YXIgdHlwZW5hbWUgPSBsaXN0W2ldLnZvZF90eXBlX25hbWU7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgdmFyIGxpc3RzID0gbGlzdFtpXS52bGlzdDtcXFxcbiAgICAgICAgdmFyIHR5cGVuYW1lID0gbGlzdFtpXS50eXBlX25hbWVcXFxcbiAgICB9XFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiB0eXBlbmFtZSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG5cXFxcbiAgICB9KTtcXFxcblxcXFxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGlzdHMubGVuZ3RoOyBqKyspIHtcXFxcbiAgICAgICAgdmFyIHRpdGxlID0gbGlzdHNbal0udm9kX25hbWU7XFxcXG4gICAgICAgIHZhciBpbWcgPSBsaXN0c1tqXS52b2RfcGljO1xcXFxuICAgICAgICB2YXIgdXJsID0gbGlzdHNbal0udm9kX2lkO1xcXFxuICAgICAgICB2YXIgZGVzYyA9IGxpc3RzW2pdLnZvZF9yZW1hcmtzO1xcXFxuICAgICAgICBpZiAoaHRtbC5saXN0KSB7XFxcXG4gICAgICAgICAgICBpZiAoL2ZhbnR1YW4vLnRlc3QobXVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9ICdodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS9hcGkucGhwL2FwcC92aWRlb19kZXRhaWw/aWQ9JyArIHVybCArICcmdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICd2aWRlb19kZXRhaWw/aWQ9JyArIHVybCArICcmdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhICYmIGh0bWwuZGF0YS5saXN0KSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnL2RldGFpbD92b2RfaWQ9JyArIHVybCArICcmcmVsX2xpbWl0PTEwO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KG11cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJy9kZXRhaWxJRD92b2RfaWQ9JyArIHVybCArICcmcmVsX2xpbWl0PTEwO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICd2aWRlb19kZXRhaWw/aWQ9JyArIHVybCArICcmdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiBpbWcgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgIHVybDogJChsaW5rKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0ge307XFxcXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzI1NSYmZmxvYXQnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hYNVdlYlZpZXcoJycpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShnZXRSZXNDb2RlKCkpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBteXVybCA9IE1ZX1VSTC5tYXRjaCgvKFtcXFxcXFxcXFNdKj86XFxcXFxcXFwvXFxcXFxcXFwvW1xcXFxcXFxcU10qPylcXFxcXFxcXC8vKVsxXTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9hcHBtb3ZsaXN0Jywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcXFxuICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQocmVzKTtcXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgZGVzYzogZGVzYyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfM19tYXJxdWVlJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6aaW5qyh5a+85YWl562J5b6FXFxcIixcXFwicGF0aFxcXCI6XFxcIndhaXRcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gY2FuVXNlKCkge1xcXFxuICAgIC8v5aaC5p6c5pu05paw5LqG6KeE5YiZ5Lmf6KaB6ZmQ5rWB77yM5Y+v5Lul5L+u5pS5a2V5XFxcXG4gICAgbGV0IGtleSA9IFxcXFxcXFwibG9jazRcXFxcXFxcIlxcXFxuICAgIC8v562J5b6F5YiG6ZKf5pWwXFxcXG4gICAgbGV0IHdhaXRNaW4gPSAyMFxcXFxuICAgIFxcXFxuICAgIGxldCBtaW4gPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwICogNjAgKiB3YWl0TWluKVxcXFxuICAgIGxldCB1bmxvY2sgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG1pbjtcXFxcbiAgICBsZXQgdGltZSA9IGdldEl0ZW0oa2V5LCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICBpZiAodGltZSA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHNldEl0ZW0oa2V5LCBcXFxcXFxcIlxcXFxcXFwiICsgdW5sb2NrKVxcXFxuICAgICAgICBsZXQgc3QgPSBuZXcgRGF0ZSh1bmxvY2spLnRvTG9jYWxlU3RyaW5nKCkucmVwbGFjZSgvOlxcXFxcXFxcZHsxLDJ9JC8sICcgJyk7XFxcXG4gICAgICAgIGxldCBtc2cgPSBcXFxcXFxcIui/meaYr+aCqOesrOS4gOasoeS9v+eUqOivpeeJiOacrOinhOWIme+8jOS4uumBv+WFjeesrOS4gOasoeWvvOWFpeS9v+eUqOS6uuaVsOa/gOWinu+8jOinhOWImeWwhuWcqFxcXFxcXFwiICsgc3QgKyBcXFxcXFxcIuino+mUgeS9v+eUqOOAgjxicj48YnI+5aW96KeE5YiZ5LiN5oCV5pma77yM6K+36ICQ5b+D562J5b6F77yB6K+l5o+Q56S65LuF5Zyo56ys5LiA5qyh5a+85YWl77yI5pu05paw77yJ5pe25Ye6546w77yM5ZCO57ut5L2/55So6L+H56iL5Lit5LiN5Lya5Ye6546w77yBXFxcXFxcXCJcXFxcbiAgICAgICAgc2V0UmVzdWx0KFt7XFxcXG4gICAgICAgICAgICB0aXRsZTogbXNnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicmljaF90ZXh0XFxcXFxcXCJcXFxcbiAgICAgICAgfV0pXFxcXG4gICAgICAgIHJldHVybiBmYWxzZVxcXFxuICAgIH0gZWxzZSBpZiAocGFyc2VJbnQodGltZSkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSkge1xcXFxuICAgICAgICByZXR1cm4gdHJ1ZVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGxldCBzdCA9IG5ldyBEYXRlKHBhcnNlSW50KHRpbWUpKS50b0xvY2FsZVN0cmluZygpLnJlcGxhY2UoLzpcXFxcXFxcXGR7MSwyfSQvLCAnICcpO1xcXFxuICAgICAgICBsZXQgbXNnID0gXFxcXFxcXCLkuLrpgb/lhY3kvb/nlKjkurrmlbDmv4Dlop7vvIzop4TliJnlsIblnKhcXFxcXFxcIiArIHN0ICsgXFxcXFxcXCLop6PplIHkvb/nlKjjgII8YnI+PGJyPuWlveinhOWImeS4jeaAleaZmu+8jOivt+iAkOW/g+etieW+he+8geivpeaPkOekuuS7heWcqOesrOS4gOasoeWvvOWFpe+8iOabtOaWsO+8ieaXtuWHuueOsO+8jOWQjue7reS9v+eUqOi/h+eoi+S4reS4jeS8muWHuueOsO+8gVxcXFxcXFwiXFxcXG4gICAgICAgIHNldFJlc3VsdChbe1xcXFxuICAgICAgICAgICAgdGl0bGU6IG1zZyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInJpY2hfdGV4dFxcXFxcXFwiXFxcXG4gICAgICAgIH1dKVxcXFxuICAgICAgICByZXR1cm4gZmFsc2VcXFxcbiAgICB9XFxcXG59XFxcXG4kLmV4cG9ydHMgPSBjYW5Vc2UoKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xmj5Lku7bosIPnlKhcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZG5wbHVnaW5cXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGRucHVnID0gJCgpLnJ1bGUoKCkgPT4ge1xcXFxuICAgIHZhciBkID0gW107XFxcXG4gICAgc2V0UGFnZVRpdGxlKCfmlq3lv7Xmj5Lku7borr7nva4nKVxcXFxuICAgIHZhciBlbkRuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKS5lbkRuO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn5pat5b+15o+S5Lu26LCD55SoJyxcXFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+W9k+WJje+8micgKyAnKCcgKyAoZW5EbiA9PSAxID8gJ+W3suWQr+eUqCcgOiAn5bey56aB55SoJykgKyAnKScsXFxcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBtZCA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuZW5EbjtcXFxcblxcXFxuICAgICAgICAgICAgaWYgKG1kID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgZmlsZVVybCA9IGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcXFxcXCIsIHt9KS5yZXBsYWNlKCdcXFxcXFxcXFxcXFxcXFwiZW5EblxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIjFcXFxcXFxcXFxcXFxcXFwiJywgJ1xcXFxcXFxcXFxcXFxcXCJlbkRuXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiMFxcXFxcXFxcXFxcXFxcXCInKTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwgZmlsZVVybCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LnpoHnlKjmlq3mj5LosIPnlKjvvIEnO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgZmlsZVVybCA9IGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcXFxcXCIsIHt9KS5yZXBsYWNlKCdcXFxcXFxcXFxcXFxcXFwiZW5EblxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIjBcXFxcXFxcXFxcXFxcXFwiJywgJ1xcXFxcXFxcXFxcXFxcXCJlbkRuXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiMVxcXFxcXFxcXFxcXFxcXCInKTtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhmaWxlVXJsKTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwgZmlsZVVybCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LlvIDlkK/mlq3mj5LosIPnlKjvvIEnXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+euoeeQhuino+aekCcsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9qeEl0ZW0uanMnKTtqeEl0ZW0uanhMaXN0KCk7c2V0UmVzdWx0KGQpXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcXFxuICAgIH0pO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn57q/6Lev6YWN572uJyxcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I0BydWxlPWpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7Um91dGUuc2V0UGFyc2UoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcXFxuICAgIH0pO1xcXFxuICAgIHNldFJlc3VsdChkKVxcXFxufSk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K6+572u6aG15Luj56CBXFxcIixcXFwicGF0aFxcXCI6XFxcInNldHRpbmdcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnZhciBzZXRqc29uID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKTtcXFxcbnZhciBzc21kID0gc2V0anNvbi5zc21vZGU7XFxcXG52YXIgc3N4YyA9IHNldGpzb24uc3Njb3VudDtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfmkJzntKLmqKHlvI/orr7nva4nLFxcXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+W9k+WJje+8micgKyAnKCcgKyAoc3NtZCA9PSAxID8gJ+iBmuWQiOe7k+aenCcgOiAn5byV5pOO5YiX6KGoJykgKyAnKScsXFxcXG4gICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICB2YXIgbWQgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLnNzbW9kZTtcXFxcblxcXFxuICAgICAgICBpZiAobWQgPT0gMSkge1xcXFxuICAgICAgICAgICAgdmFyIGZpbGVVcmwgPSBmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXFxcXFwiLCB7fSkucmVwbGFjZSgnXFxcXFxcXFxcXFxcXFxcInNzbW9kZVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIjFcXFxcXFxcXFxcXFxcXFwiJywgJ1xcXFxcXFxcXFxcXFxcXCJzc21vZGVcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIwXFxcXFxcXFxcXFxcXFxcIicpO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcXFxcXCIsIGZpbGVVcmwpO1xcXFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLkuLrmkJzntKLlvJXmk47liJfooajljZXpgInmqKHlvI/miJDlip/vvIEnO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmFyIGZpbGVVcmwgPSBmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXFxcXFwiLCB7fSkucmVwbGFjZSgnXFxcXFxcXFxcXFxcXFxcInNzbW9kZVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIjBcXFxcXFxcXFxcXFxcXFwiJywgJ1xcXFxcXFxcXFxcXFxcXCJzc21vZGVcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIicpO1xcXFxuICAgICAgICAgICAgLy9sb2coZmlsZVVybCk7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwgZmlsZVVybCk7XFxcXG4gICAgICAgICAgICBiYWNrKHRydWUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouS4uuiBmuWQiOaQnOe0ouaooeW8j+aIkOWKn++8gSdcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcXFxufSlcXFxcblxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+aQnOe0oue6v+eoi+iuvue9ricsXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5b2T5YmN57q/56iLJyArIHNzeGMgKyAnICAnICsgJ+S9oOi+k+WFpeeahOaYrycgKyBwYXJzZUludChnZXRWYXIoJ2FwcG1zc3hjc2V0JywgJycpKSxcXFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXFxcbn0pO1xcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn6K6+572u5pCc57Si57q/56iLJyxcXFxcbiAgICB1cmw6IFxcXFxcXFwiaW5wdXQ6Ly9cXFxcXFxcIiArICcnICsgXFxcXFxcXCIvLy8v6K+36L6T5YWl5LiA5Liq5pW05pWw5pWw5a2X77yM5o6o6I2Q5pyA5aSn5LiN6KaB6LaF6L+HMTXjgIIuanM6cHV0VmFyKCdhcHBtc3N4Y3NldCcsaW5wdXQpO3JlZnJlc2hQYWdlKClcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbn0pO1xcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5L+d5a2Y57q/56iL6K6+572uJyxcXFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIHZhciBudW0gPSBwYXJzZUludChnZXRWYXIoJ2FwcG1zc3hjc2V0JykpLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIGlmIChudW0gPT0gJ05hTicpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ovpPlhaXnmoTlgLzlpb3lg4/kuI3mraPnoa7jgIInO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmFyIGZpbGVVcmwgPSBmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXFxcXFwiLCB7fSkucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcInNzY291bnRcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCJbXFxcXFxcXFxTXSpcXFxcXFxcXFxcXFxcXFwiLywgJ1xcXFxcXFxcXFxcXFxcXCJzc2NvdW50XFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiJyArIG51bSArICdcXFxcXFxcXFxcXFxcXFwiJyk7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwgZmlsZVVybCk7XFxcXG4gICAgICAgICAgICAvL3JlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv53lrZjorr7nva7mkJzntKLnur/nqIvlrozmiJDvvIEnO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+abtOaWsOebuOWFsycsXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5qOA5rWL5pu05pawJyxcXFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKChsb2N2ZXIpID0+IHtcXFxcbiAgICAgICAgdmFyIHJlbWYgPSBmZXRjaENhY2hlKCdodHRwczovL2NvZGViZXJnLm9yZy9semsyMzU1OS9jbG91ZHJ1bGUvcmF3L2JyYW5jaC9tYXN0ZXIvYXBwbW92aWUudHh0JywgMjQpO1xcXFxuICAgICAgICBpZiAoL++/pWJhc2U2NC8udGVzdChyZW1mKSkge1xcXFxuICAgICAgICAgICAgdmFyIHJlbXYgPSBKU09OLnBhcnNlKGJhc2U2NERlY29kZShyZW1mLnNwbGl0KCdAJylbMl0pKS52ZXJzaW9uO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmFyIHJlbXYgPSBKU09OLnBhcnNlKHJlbWYuc3BsaXQoJ2hvbWVfcnVsZe+/pScpWzFdKS52ZXJzaW9uO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxvZygn6L+c56iL54mI5pys77yaJyArIHJlbXYpO1xcXFxuICAgICAgICBsb2coJ+acrOWcsOeJiOacrO+8micgKyBsb2N2ZXIpO1xcXFxuICAgICAgICBpZiAobG9jdmVyICE9IHJlbXYpIHtcXFxcbiAgICAgICAgICAgIHB1dFZhcignYXBwbnZlcicsIHJlbWYpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnInmlrDniYjmnKzvvIzngrnlr7zlhaXmm7TmlrDlj6/mm7TmlrDop4TliJnjgIInO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aaguaXoOaWsOeJiOacrOOAgidcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIGxvY3ZlciksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInXFxcXG59KTtcXFxcbmlmIChnZXRWYXIoJ2FwcG52ZXInKSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn5a+85YWl5pu05pawJyxcXFxcbiAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgoKT0+e1xcXFxuICAgICAgICAgICByZXR1cm4gZ2V0VmFyKCdhcHBudmVyJyk7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9XVwifSIsInBpY1VybCI6Imh0dHBzOi8vaW5tZW1vcnkuY29kaW5nLm5ldC9wL0luTWVtb3J5L2QvTUJyb3dzZXIvZ2l0L3Jhdy9tYXN0ZXIvQXBwRmlsZS9BcHBJY29uL+mFt+aJkVRWLnBuZyIsInRpdGxlIjoi6YW35omRVFYifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement