Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@茄子@eyJmaXJzdEhlYWRlciI6ImNsYXNzIiwibGFzdF9jaGFwdGVyX3J1bGUiOiIiLCJ0aXRsZSI6IuiMhOWtkCIsImF1dGhvciI6Iua1geiLjyIsInVybCI6Imhpa2VyOi8vZW1wdHkiLCJ2ZXJzaW9uIjoxLCJjb2xfdHlwZSI6Im1vdmllXzIiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InZpZGVvIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6IFxudmFyIGQgPSBbXTtcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvaG9tZScpKS5ydWxlKTtcbnNldFJlc3VsdChkKSIsInNlYXJjaF91cmwiOiJoaWtlcjovL2VtcHR5P3BhZ2U9ZnlwYWdlJmt3PSoqIiwiZ3JvdXAiOiLwn6qc5rWL6K+VIiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGt5PU1ZX1VSTC5zcGxpdCgnPScpWzJdO1xucHV0TXlWYXIoJ2tleXdvcmQnLGt5KVxuJC5yZXF1aXJlKFwic2VhcmNoXCIpIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMyIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiKiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJhZXNcIixcInBhdGhcIjpcImFlc1wiLFwicnVsZVwiOlwiLy/liqDovb1DcnlwdG9KU+W6k1xcbmV2YWwoZ2V0Q3J5cHRvSlMoKSlcXG4vLzEz5L2N5pe26Ze05oizXFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgKTtcXG4vL+eugOWNleWMuemFjVxcbmxldCBzcCA9IChpdCwgcywgZSkgPT4gU3RyaW5nKGl0LnNwbGl0KHMpWzFdKS5zcGxpdChlKVswXTtcXG4vL+minOiJslxcbmZ1bmN0aW9uIHN0cm9uZyhkLCBjKSB7XFxuICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj0jJyArIChjIHx8ICcwMDAwMDAnKSArICc+JyArIGQgKyAnPC9mb250Pjwvc3Ryb25nPic7XFxufVxcbi8v55Sf5oiQ5pe26Ze05oizXFxuZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVzdGFtcCgpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcbn1cXG4vL21kNeWKoOWvhlxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxufVxcbi8vc2hhMjU25Yqg5a+GXFxuZnVuY3Rpb24gc2hhMjU2KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuU0hBMjU2KHN0cikudG9TdHJpbmcoKTtcXG59XFxuLy/popzoibJcXG5mdW5jdGlvbiBjb2xvcih0eHQpIHtcXG4gICAgcmV0dXJuICAnPGI+PGZvbnQgY29sb3I9JyArICcjRkY2Njk5JyArICc+JyArIHR4dCArICc8L2ZvbnQ+PC9iPidcXG59XFxuLy/ojITlrZDop6Plr4blh73mlbBcXG5mdW5jdGlvbiBxekRlY3J5cHQod29yZCkge1xcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwieWluc3UxMjM0NWFiY2RlZlxcXCIpO1xcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCJrZWppMTIzNDU2OTk5OTk5XFxcIik7XFxuICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKHdvcmQpO1xcbiAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXG4gICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0clxcbiAgICB9LCBrZXksIHtcXG4gICAgICAgIGl2OiBpdixcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgIH0pO1xcbiAgICBpZiAoZGVjcnlwdCkge1xcbiAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0cjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOino+WvhuWksei0pe+8jOi/lOWbnm51bGzmiJbplJnor6/kv6Hmga9cXG4gICAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxufVxcblxcblxcbi8vIOeMq+WSquino+WvhuWHveaVsFxcbmZ1bmN0aW9uIERlY3J5cHQod29yZCkge1xcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiNjI1MjIyZjkxNDllOTYxZFxcXCIpO1xcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCI1ZWZkdGY2MDYwZTJvMzMwXFxcIik7XFxuICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHdvcmQpO1xcbiAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXG4gICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0clxcbiAgICB9LCBrZXksIHtcXG4gICAgICAgIGl2OiBpdixcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgIH0pO1xcbiAgICBpZiAoZGVjcnlwdCkge1xcbiAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0cjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOino+WvhuWksei0pe+8jOi/lOWbnm51bGzmiJbplJnor6/kv6Hmga9cXG4gICAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxufVxcblxcbi8vIOeMq+WSquWKoOWvhuWHveaVsFxcbmZ1bmN0aW9uIEVuY3J5cHQocGxhaW50ZXh0KSB7XFxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCI2MjUyMjJmOTE0OWU5NjFkXFxcIik7XFxuICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjVlZmR0ZjYwNjBlMm8zMzBcXFwiKTtcXG4gICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHBsYWludGV4dCwga2V5LCB7XFxuICAgICAgICBpdjogaXYsXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICB9KTtcXG4gICAgdmFyIGNpcGhlcnRleHQgPSBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTtcXG4gICAgcmV0dXJuIGNpcGhlcnRleHQudG9VcHBlckNhc2UoKTtcXG59XFxuXFxudmFyIGxhenkgPSAkKCcnKS5pbWFnZSgoKSA9PiB7XFxuY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFwiKTtcXG5cXHRsZXQgaWQgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KFxcXCJmNWQ5NjVkZjc1MzM2MjcwXFxcIik7XFxuXFx0bGV0IGl2ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFwiOTdiNjAzOTRhYmMyZmJlMVxcXCIpO1xcblxcdGxldCB0ZXh0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUlucHV0U3RyZWFtKGlucHV0KTtcXG5cXHRsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5BRVMuZGVjcnlwdCh0ZXh0RGF0YSwgaWQsIHtcXG4gIFxcdG1vZGU6IFxcXCJBRVMvQ0JDL1BLQ1M3UGFkZGluZ1xcXCIsXFxuXFx0XFx0aXY6IGl2XFxuXFx0fSk7XFxuXFx0cmV0dXJuIGVuY3J5cHRlZC50b0lucHV0U3RyZWFtKCk7XFxufSlcXG5cXG4vL+inhumikeivt+axglxcbnZhciB2b2QgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbnZhciB1cmwgPUpTT04ucGFyc2UoZmV0Y2goaW5wdXQpKS52aWRlbztcXG5yZXR1cm4gdXJsK2AjaXNWaWRlbz10cnVlI2BcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIHJldHVybiAndG9hc3Q6Ly/or7fmsYLlpLHotKUnXFxufVxcbn0pXFxuLy/lm77niYfor7fmsYJcXG52YXIgcGljcyA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG5sZXQgaW1nPSBKU09OLnBhcnNlKGZldGNoKGlucHV0KSkuY29udGVudC5yZXBsYWNlKC9cXFxcJC9nLCcnKS5yZXBsYWNlKC/liIblibIvZywnJykuc3BsaXQoJ0AnKTtcXG5yZXR1cm4gJ3BpY3M6Ly8nK2ltZy5qb2luKCcmJicpO1xcbn0pXFxuLy/njKvlkqrmvKvnlLvop6PmnpBcXG52YXIgbWFvbWltYW5odWFqeD0kKCcnKS5sYXp5UnVsZSgoKSA9PiB7IFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJ1c2VyX2lkXFxcIjoxNzkwMzY4LFxcXCJsaXN0X2lkXFxcIjonK2lucHV0Kyd9Jyk7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL2NvbWljL3dhdGNoP3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxubGV0IHBpY0Fycj1bXTtcXG5sZXQgbGVuPSBsaXN0Lmxlbmd0aC0xO1xcbmZvciAoaSA9IDA7IGkgPD0gbGVuOyBpKyspIHtcXG4gICAgICAgcGljQXJyW2ldID0gbGlzdFtpXS5pbWFnZTtcXG4gICAgIH1cXG5yZXR1cm4gJ3BpY3M6Ly8nK3BpY0Fyci5qb2luKCcmJicpO1xcbn0pXFxuXFxuLy/njKvlkqpGTeino+aekFxcbnZhciBtYW9taWZtang9JCgnJykubGF6eVJ1bGUoKCkgPT4geyBcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwiaWRcXFwiOicraW5wdXQrJ30nKTtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvYm9vay9kZXRhaWw/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxudmFyIHVybD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGFbMF0uY29udGVudDtcXG5yZXR1cm4gdXJsXFxufSlcXG5cXG4vL+eMq+WSquino+aekFxcbnZhciBtYW9taWp4PSQoJycpLmxhenlSdWxlKCgpID0+IHsgXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcImlkXFxcIjonK2lucHV0Kyd9Jyk7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL3ZpZGVvL2RldGFpbD9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG4vL+S4i+i9vVxcbi8vdmFyIGRvd249SlNPTi5wYXJzZShodG1sMikuZGF0YS52aWRlb3NbMF0uZG93bjtcXG4vL+aWh+S7tlxcbnZhciB1cmw9SlNPTi5wYXJzZShodG1sMikuZGF0YS52aWRlb3NbMF0uZmlsZTtcXG5yZXR1cm4gdXJsXFxufSlcXG5cXG4vL+m6u+ixhuWKoOWvhuWHveaVsFxcbmZ1bmN0aW9uIG1kRW5jcnlwdChwbGFpbnRleHQpIHtcXG4gICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIlZxMjM0ekJlU2RHZ1lYelZURWZubmpqZG1hVGtrN0E0XFxcIik7XFxuICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIi1wOUJbflBuUHMxNzMxNTBcXFwiKTtcXG4gICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHBsYWludGV4dCwga2V5LCB7XFxuICAgICAgICBpdjogaXYsXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyAvLyDms6jmhI/ov5nph4zlupTor6XmmK9DcnlwdG9KUy5wYWQuTm9QYWRkaW5nXFxuICAgIH0pO1xcbiAgICB2YXIgY2lwaGVydGV4dCA9IGVuY3J5cHRlZC5jaXBoZXJ0ZXh0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5CYXNlNjQpO1xcbiAgICByZXR1cm4gY2lwaGVydGV4dDtcXG59XFxuXFxuLy8g6bq76LGG6Kej5a+G5Ye95pWwXFxuZnVuY3Rpb24gbWREZWNyeXB0KHdvcmQpIHtcXG4gICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIlZxMjM0ekJlU2RHZ1lYelZURWZubmpqZG1hVGtrN0E0XFxcIik7XFxuICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIi1wOUJbflBuUHNcXFwiK2l2MCk7XFxuICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKHdvcmQpO1xcbiAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXG4gICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0clxcbiAgICB9LCBrZXksIHtcXG4gICAgICAgIGl2OiBpdixcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3IC8vIOazqOaEj+i/memHjOW6lOivpeaYr0NyeXB0b0pTLnBhZC5Ob1BhZGRpbmdcXG4gICAgfSk7XFxuICAgIGlmIChkZWNyeXB0KSB7XFxuICAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy8g6Kej5a+G5aSx6LSl77yM6L+U5ZuebnVsbOaIlumUmeivr+S/oeaBr1xcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG59XFxuXFxuLy/purvosYblm77niYfop6Plr4ZcXG52YXIgbWRsYXp5ID0gJCgnJykuaW1hZ2UoKCkgPT4ge1xcbmNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vYXNzZXRzL2NyeXB0by1qYXZhLmpzXFxcIik7XFxuXFx0bGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcInBuaFhnTjBVXFxcIik7XFxuXFx0bGV0IGl2ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFwiR1k0Z0V2QkRcXFwiKTtcXG5cXHRsZXQgdGV4dERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VJbnB1dFN0cmVhbShpbnB1dCkuYmFzZTY0RGVjb2RlKCk7XFxuXFx0bGV0IGVuY3J5cHRlZCA9IENyeXB0b1V0aWwuREVTLmRlY3J5cHQodGV4dERhdGEsIGtleSwge1xcbiAgXFx0bW9kZTogXFxcIkRFUy9DQkMvUEtDUzdQYWRkaW5nXFxcIixcXG5cXHRcXHRpdjogaXZcXG5cXHR9KTtcXG5cXHRsZXQgYmFzZTY0VGV4dCA9IGVuY3J5cHRlZC50b1N0cmluZygpLnNwbGl0KFxcXCJiYXNlNjQsXFxcIilbMV07XFxuICAgIGxldCBlbmNyeXB0ZWQwID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlQmFzZTY0KGJhc2U2NFRleHQsIF9iYXNlNjQuTk9fV1JBUCk7XFxuICAgIHJldHVybiBlbmNyeXB0ZWQwLnRvSW5wdXRTdHJlYW0oKTtcXG59KVxcblxcbi8vOTF0duinhumikeino+aekFxcbnZhciB0dnZvZCA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG5ldmFsKGdldENyeXB0b0pTKCkpXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXG59XFxudmFyIHQwID1NYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSsxO1xcbnZhciB3c1NlY3JldD1tZDUoJ0U5TXBDN0Q1QXFXdmptWEwzaEdrUTJYalpOb2hBUScraW5wdXQucmVwbGFjZSgvaHR0cChzKT86XFxcXC9cXFxcLy4qP1xcXFwvL2csJy8nKSt0MCk7XFxudmFyIHVybD1pbnB1dCsnP3dzU2VjcmV0PScrd3NTZWNyZXQrJyZ3c1RpbWU9Jyt0MDtcXG53cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdmlkZW8wLm0zdTgnLCByZXF1ZXN0KHVybCkpO1xcbnJldHVybiBnZXRQYXRoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvMC5tM3U4JykrJyMnK3VybDtcXG59KVxcbi8vbHV0dWJl5Zu+54mH6Kej5a+GXFxudmFyIGx1bGF6eSA9ICQoJycpLmltYWdlKCgpID0+IHtcXG5jb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXCIpO1xcblxcdGxldCBrZXkgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VIZXgoXFxcImIyZjM4NDI4NjZmOTU4M2QxZWNlNjFjNGUwNTVjMjU1XFxcIik7XFxuXFx0bGV0IGl2ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSGV4KFxcXCJlMDFlZGU2MzMxZDM3YWZjYzdiZTA1NTk3ZDY1NGQyMlxcXCIpO1xcblxcdGxldCB0ZXh0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUlucHV0U3RyZWFtKGlucHV0KTtcXG5cXHRsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5BRVMuZGVjcnlwdCh0ZXh0RGF0YSwga2V5LCB7XFxuICBcXHRtb2RlOiBcXFwiQUVTL0NCQy9QS0NTN1BhZGRpbmdcXFwiLFxcblxcdFxcdGl2OiBpdlxcblxcdH0pO1xcblxcdHJldHVybiBlbmNyeXB0ZWQudG9JbnB1dFN0cmVhbSgpO1xcbn0pXFxuLy9pbnPlm77niYfop6Plr4bvvIxiYXNlNjRcXG52YXIgaW5zbGF6eSA9ICQoJycpLmltYWdlKCgpID0+IHtcXG4gICAgY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFwiKTtcXG4gICAgbGV0IHRleHREYXRhID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSW5wdXRTdHJlYW0oaW5wdXQpO1xcbiAgICBsZXQgYmFzZTY0VGV4dCA9IHRleHREYXRhLnRvU3RyaW5nKCkuc3BsaXQoXFxcImJhc2U2NCxcXFwiKVsxXTtcXG4gICAgbGV0IGVuY3J5cHRlZDAgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VCYXNlNjQoYmFzZTY0VGV4dCwgX2Jhc2U2NC5OT19XUkFQKTtcXG4gICAgcmV0dXJuIGVuY3J5cHRlZDAudG9JbnB1dFN0cmVhbSgpO1xcbn0pXFxuXFxuXFxuLy/mtbfop5Llm77niYfop6Plr4ZcXG52YXIgbiA9IGZ1bmN0aW9uKGUpIHtcXG4gICAgZm9yIChvID0gXFxcIlxcXCIsIGkgPSAwLCBhID0gMCwgdm9pZCAwOyBpIDwgZS5sZW5ndGg7KSB7XFxuICAgICAgICB2YXIgdCwgbiwgbywgaSwgYTtcXG4gICAgICAgICh0ID0gZS5jaGFyQ29kZUF0KGkpKSA8IDEyOCA/IChvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodCksIGkrKykgOiAxOTEgPCB0ICYmIHQgPCAyMjQgPyAoYSA9IGUuY2hhckNvZGVBdChpICsgMSksIG8gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoMzEgJiB0KSA8PCA2IHwgNjMgJiBhKSwgaSArPSAyKSA6IChhID0gZS5jaGFyQ29kZUF0KGkgKyAxKSwgbiA9IGUuY2hhckNvZGVBdChpICsgMiksIG8gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoMTUgJiB0KSA8PCAxMiB8ICg2MyAmIGEpIDw8IDYgfCA2MyAmIG4pLCBpICs9IDMpO1xcbiAgICB9XFxuICAgIHJldHVybiBvO1xcbn07XFxudmFyIGRlY3J5cHREYXRhID0gZnVuY3Rpb24odCkge1xcbiAgICB2YXIgbywgaSwgYSwgciwgcywgYywgdSA9IFxcXCJcXFwiLFxcbiAgICAgICAgZCA9IDAsXFxuICAgICAgICB0dCA9IFxcXCJBQkNEKkVGR0hJSktMTU5PUFFSU1RVVldYI1laYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwXFxcIlxcbiAgICBmb3IgKHQgPSB0LnJlcGxhY2UoL1teQS1aYS16MC05XFxcXCpcXFxcI10vZywgXFxcIlxcXCIpOyBkIDwgdC5sZW5ndGg7KSBhID0gdHQuaW5kZXhPZih0LmNoYXJBdChkKyspKSwgbyA9ICgxNSAmIChyID0gdHQuaW5kZXhPZih0LmNoYXJBdChkKyspKSkpIDw8IDQgfCAocyA9IHR0LmluZGV4T2YodC5jaGFyQXQoZCsrKSkpID4+IDIsIGkgPSAoMyAmIHMpIDw8IDYgfCAoYyA9IHR0LmluZGV4T2YodC5jaGFyQXQoZCsrKSkpLCB1ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYSA8PCAyIHwgciA+PiA0KSwgNjQgIT0gcyAmJiAodSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG8pKSwgNjQgIT0gYyAmJiAodSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcXG4gICAgcmV0dXJuIG4odSk7XFxufTtcXG5cXG4kLmV4cG9ydHMuaW1hZ2VEZWNyeXB0ID0gZnVuY3Rpb24oKSB7XFxuICAgIGxldCBqYXZhSW1wb3J0ID0gbmV3IEphdmFJbXBvcnRlcigpO1xcbiAgICBqYXZhSW1wb3J0LmltcG9ydFBhY2thZ2UoXFxuICAgICAgICBQYWNrYWdlcy5jb20uZXhhbXBsZS5oaWtlcnZpZXcudXRpbHNcXG4gICAgKTtcXG4gICAgd2l0aChqYXZhSW1wb3J0KSB7XFxuICAgICAgICBsZXQgYnl0ZXMgPSBGaWxlVXRpbC50b0J5dGVzKGlucHV0KTtcXG4gICAgICAgIGJ5dGVzID0gbmV3IGphdmEubGFuZy5TdHJpbmcoYnl0ZXMsICdVVEYtOCcpXFxuICAgICAgICBsZXQgcmVzID0gZGVjcnlwdERhdGEoYnl0ZXMgKyBcXFwiXFxcIik7XFxuICAgICAgICByZXMgPSBuZXcgamF2YS5sYW5nLlN0cmluZyhyZXMpXFxuICAgICAgICByZXMgPSByZXMuc3BsaXQoXFxcImJhc2U2NCxcXFwiKVsxXTtcXG4gICAgICAgIHJldHVybiBGaWxlVXRpbC50b0lucHV0U3RyZWFtKF9iYXNlNjQuZGVjb2RlKHJlcywgX2Jhc2U2NC5OT19XUkFQKSk7XFxuICAgIH1cXG59XFxuXFxuXFxuZnVuY3Rpb24gcGFnZUFkZChwYWdlKSB7XFxuICAgIGlmIChnZXRNeVZhcihcXFwicGFnZVxcXCIpKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwicGFnZVxcXCIsIChwYXJzZUludChwYWdlKSArIDEpICsgJycpO1xcbiAgICB9XFxuICAgIHJldHVybjtcXG59IC8v57+76aG1XFxuXFxuZnVuY3Rpb24gcGFnZU1vdmV0byhwYWdlLCBwYWdlcykge1xcbiAgICB2YXIgbG9uZ0NsaWNrID0gW3tcXG4gICAgICAgIHRpdGxlOiBcXFwi6aaW6aG1XFxcIixcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwicGFnZVxcXCIsIFxcXCIxXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSksXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5LiK6aG1XFxcIixcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKChwYWdlKSA9PiB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPiAxKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwYWdlXFxcIiwgKHBhcnNlSW50KHBhZ2UpIC0gMSkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHBhZ2UpLFxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIuW9k+WJjeesrFxcXCIgKyBwYWdlICsgXFxcIumhtVxcXCIsXFxuICAgICAgICBqczogXFxcIlxcXCIsXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6Lez6L2sXFxcIixcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicGFnZVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pLFxcbiAgICB9XTtcXG4gICAgaWYgKHR5cGVvZihwYWdlcykgIT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIHZhciBleHRyYTEgPSB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLlsL7pobVcXFwiICsgcGFnZXMsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHBhZ2VzKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwYWdlXFxcIiwgcGFnZXMpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIH0sIHBhZ2VzKSxcXG4gICAgICAgIH07XFxuICAgICAgICBsb25nQ2xpY2sucHVzaChleHRyYTEpXFxuICAgIH1cXG4gICAgcmV0dXJuIGxvbmdDbGlja1xcbn0gLy/plb/mjInot7PpobVcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWIhuexu1wiLFwicGF0aFwiOlwiQ2F0ZVwiLFwicnVsZVwiOlwiZnVuY3Rpb24gc3Ryb25nKGQsIGMpIHtcXG4gICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPSMnICsgKGMgfHwgJzAwMDAwMCcpICsgJz4nICsgZCArICc8L2ZvbnQ+PC9zdHJvbmc+JztcXG59XFxuLy/liJfooagsY29s6buY6K6k5Li6J3Njcm9sbF9idXR0b24nXFxuZnVuY3Rpb24gQ2F0ZShsaXN0LG4sZCxjb2wpIHtcXG4gICAgaWYoIWNvbCl7XFxuICAgICAgICBjb2w9J3Njcm9sbF9idXR0b24nO1xcbiAgICB9XFxuICAgIHZhciBpbmRleF9uPWxpc3RbMF0uaWQuc3BsaXQoJyYnKVswXTtcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGE9PntcXG4gICAgICAgIHZhciB0aXRsZSA9IGRhdGEudGl0bGUuc3BsaXQoJyYnKTtcXG4gICAgICAgIHZhciBpZD1kYXRhLmlkLnNwbGl0KCcmJyk7XFxuICAgICAgICBpZihkYXRhLmltZyE9bnVsbCl7XFxuICAgICAgICAgICAgdmFyIGltZz1kYXRhLmltZy5zcGxpdCgnJicpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgdmFyIGltZz1bXTtcXG4gICAgICAgIH1cXG4gICAgICAgIHRpdGxlLmZvckVhY2goKHRpdGxlLGluZGV4KT0+e1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOihnZXRNeVZhcihuLGluZGV4X24pPT1pZFtpbmRleF0/c3Ryb25nKHRpdGxlLCAnRkY2Njk5JykgOiB0aXRsZSksXFxuICAgICAgICAgICAgICAgIGltZzppbWdbaW5kZXhdLFxcbiAgICAgICAgICAgICAgICB1cmw6JChpZFtpbmRleF0pLmxhenlSdWxlKChuLHRpdGxlLGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIobiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIG4sdGl0bGUsaWRbaW5kZXhdKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTpjb2wsXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaycsXFxuICAgIH0pO1xcbiAgICB9KVxcbiAgICByZXR1cm4gZDtcXG59XFxuJC5leHBvcnRzLkNhdGUgPSBDYXRlO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiMDDpppbpobVcIixcInBhdGhcIjpcImhvbWVcIixcInJ1bGVcIjpcImpzOlxcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC5wdXNoKHvCoMKgwqBcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57SiIFxcXCIsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoJ2tleXdvcmQnLGlucHV0KVxcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoP3BhZ2U9ZnlwYWdlJmt3PVxcXCIgKyBpbnB1dFxcbiAgICB9KSxcXG4gICAgICAgIMKgwqDCoGRlc2M6IFxcXCLor7fovpPlhaXmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgwqDCoMKgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIH0pXFxufTtcXG52YXIgcGc9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJyk7XFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpOyBcXG52YXIgYzE9IFt7dGl0bGU6ICfpppbpobUm57u85ZCIJyxpZDogJzEmMiYzJjQmNScsaW1nOidodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMjcuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzEzNy5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEzLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTQuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzEyMi5zdmcnfV07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAkLnJlcXVpcmUoXFxcIkNhdGVcXFwiKS5DYXRlKGMxLCdjMScsZCwnaWNvbl8yX3JvdW5kJyk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdsaW5lJyxcXG59LHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcbn1cXG4se1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxufSk7XFxufVxcbnZhciDliIbnsbs9Z2V0TXlWYXIoJ2MxJywgJzEnKTtcXG5pZijliIbnsbs9PTEpe1xcbiQucmVxdWlyZShcXFwidmlkZW9cXFwiKVxcbn1lbHNlIGlmKOWIhuexuz09Mil7XFxuJC5yZXF1aXJlKFxcXCJ6b25naGVcXFwiKVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic2VhcmNoXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCc9JylbMV0ucmVwbGFjZSgnJmt3JywnJyk7XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIGRhdGE9SlNPTi5wYXJzZShnZXRJdGVtKCdzZWFyY2gnKSkuY29uZmlnO1xcbnZhciB1cmxfbj1kYXRhWzBdLmFwaStkYXRhWzBdLnBsYXRmb3JtO1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIHZhciB1cmw9ZGF0YS5hcGkrZGF0YS5wbGF0Zm9ybTtcXG4gICAgICAgIGlmKChkYXRhLnRpdGxlIT0n56aP5YipJykmKCFkYXRhLnBsYXRmb3JtLmluY2x1ZGVzKCd5dWVwYW8nKSkpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+aQnOe0ouWIhuexuycsdXJsX24pPT11cmw/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSx1cmwsY2F0ZSkgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfmkJzntKLliIbnsbsnLCB1cmwpO1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfmkJzntKLliIbnsbvlkI0nLHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsdXJsLCfmkJzntKLliIbnsbsnKSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGtleTon5pCc57Si5YiG57G7OiAnK2dldE15VmFyKCfmkJzntKLliIbnsbsnLHVybF9uKSxcXG4gICAgICAgICAgICAgIHdvcmQ6J+aQnOe0ouWIhuexu+WQjTogJytnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyksXFxuICAgICAgICAgICAgICBrZXl3b3JkOmdldE15VmFyKCdrZXl3b3JkJyksXFxuICAgICAgICAgIH1cXG4gICAgfSlcXG4gICAgfVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snLFxcbiAgICB9KTtcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCfmkJzntKLliIbnsbsnLCdodHRwOi8vMDAzLjIycy5sb2wvc2VhcmNoY29uZmlnL3ZpZGVvLnR4dCcpKSkuc2VhcmNoYXBpO1xcbnZhciB1cmxfbj0naHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AvJytsaXN0WzBdLnBsYXRmb3JtKycucGhwJztcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICB2YXIgdXJsPSdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcC8nK2RhdGEucGxhdGZvcm0rJy5waHAnO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnLHVybF9uKT09dXJsP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsdXJsLGNhdGUpID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJykrJ+aQnOe0ouWIl+ihqCcsIHVybCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLHVybCxnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJykrJ+aQnOe0ouWIl+ihqCcpLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAga2V5OmdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSsn5pCc57Si5YiX6KGoJyxcXG4gICAgICAgICAgICAgIHVybDp1cmwsXFxuICAgICAgICAgICAgICB3ejpkYXRhLnBsYXRmb3JtLFxcbiAgICAgICAgICAgICAga2V5d29yZDpnZXRNeVZhcigna2V5d29yZCcpLFxcbiAgICAgICAgICB9XFxuICAgIH0pXFxufSlcXG59XFxudmFyIHNlYXJjaF91cmw9Z2V0TXlWYXIoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnLHVybF9uKSsnP2tleXdvcmQ9JytnZXRNeVZhcigna2V5d29yZCcpKycmcGFnZT0nK3BnO1xcbi8vbG9nKHNlYXJjaF91cmwpXFxudmFyIGhvc3Q9c2VhcmNoX3VybC5zcGxpdCgnPycpWzBdO1xcbnRyeXtcXG5pZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSfop4bpopEnKXtcXG52YXIgQXJyPVsnbHVzaXInLCc1MWxpZXFpJywndGFuZ3RvdXRpYW8nLCc1MGR1JywndGlrdG9rJywneGluZ2JhJywnYW53YW5namllbWknLCdxaXlvdScsJ2Nhb2xpdXNoZXF1JywnOTFwYW9mdScsJ21laXJpZGFzYWknLCdwb3JuaHViJywnZG91eWlubWF4JywnNTFsdW9saScsJzkxcG9ybl9zZmt0dicsJ3NodWlndW9wYWknLCdzaWZhbmdrdHYnLCd3ZWltaXF1YW4nLCdoZWlsaWFvYmR5JywnNTFjaGlndWEnXTtcXG52YXIgQnJyPVsnbHV0dWJlJ107XFxudmFyIENycj1bJ2lucyddO1xcbnZhciBwbGF0Zm9ybT1ob3N0Lm1hdGNoKC90b3BcXFxcLy4qXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxuLy9sb2cocGxhdGZvcm0pXFxudmFyIGl0ZW09SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcbml0ZW0uZm9yRWFjaChkYXRhID0+IHtcXG4gICAgaWYoQXJyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9ZWxzZSBpZihCcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsdWxhenksXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgIH1lbHNlIGlmKENyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2luc2xhenksXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgIH1lbHNle1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+WFqOe9keegtOinoycpe1xcbiAgICB2YXIgQXJyPVsndHR0JywnbG9hbndvcmQnLCdsb2Fud29yZF8yJywnOTFzaG9ydCcsJ3NlcG9uZScsJ2x1c2lyJywnY2FwZScsJ2RlZ3JlZScsJ2J1cm1hJ107XFxuICB2YXIgcGxhdGZvcm09aG9zdC5tYXRjaCgvdG9wXFxcXC8uKlxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzRdO1xcbiAgdmFyIGl0ZW09SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcbiAvLyBsb2coaXRlbSlcXG5pdGVtLmZvckVhY2goZGF0YSA9PiB7XFxuICAgIGlmKEFyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2V7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSlcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSfnn63op4bpopEnKXtcXG4gICAgdmFyIEFycj1bJ3Rpa3RvazE4bmV3JywnOTFkc3B3ZWInLCdkb3V5aW5tYXgnLCc5MXBvcm5fc2lmYW5na3R2JywnZmFudGFzaSddO1xcbiAgdmFyIHBsYXRmb3JtPWhvc3QubWF0Y2goL3RvcFxcXFwvLipcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVsyXTtcXG4gIHZhciBpdGVtPUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXG4gLy8gbG9nKGl0ZW0pXFxuaXRlbS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICBpZihBcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSlcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G7JykuaW5jbHVkZXMoJ2FjdHJlc3MnKXwoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n55Wq5Y+3Jyl8KGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+S4iee6pycpKXtcXG4gICAgdmFyIEFycj1bJ3NodWlndW9wYWknXTtcXG4gIHZhciBwbGF0Zm9ybT1ob3N0Lm1hdGNoKC90b3BcXFxcLy4qXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxuICB2YXIgaXRlbT1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxuIC8vIGxvZyhpdGVtKVxcbml0ZW0uZm9yRWFjaChkYXRhID0+IHtcXG4gICAgaWYoQXJyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2V7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5ZCD55OcJyl7XFxuICB2YXIgd3o9aG9zdC5tYXRjaCgvdG9wXFxcXC8uKlxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzNdO1xcbiAgdmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcbiAvLyBsb2coaXRlbSlcXG5pZih3ej09J2hhaWppYW8nKXtcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiAgZGF0YS5pbWFnZSArIFxcXCJAanM9XFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYmxhY2tlcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG59ZWxzZXtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6ICgod3o9PSc1MWNnJyl8KHd6PT0naGxiZHknKXwod3o9PSd0aWt0b2sxOCcpKT8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbiB9XFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5bCP6K+0Jyl7XFxuICB2YXIgd3o9aG9zdC5tYXRjaCgvdG9wXFxcXC8uKlxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzNdO1xcbiAgdmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3hpYW9zaHVvZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+a8q+eUuycpe1xcbiAgdmFyIHd6PWhvc3QubWF0Y2goL3RvcFxcXFwvLipcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVsyXTtcXG4gIHZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hbmh1YWVyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5Zu+54mHJyl7XFxuICB2YXIgd3o9aG9zdC5tYXRjaCgvdG9wXFxcXC8uKlxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzJdO1xcbiAgdmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogd3o9PSd0aWt0b2sxOCc/KGRhdGEuaW1hZ2UrbGF6eSk6ZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90dXBpYW5lcmppXFxcIiknLFxcbiAgICAgICAgICAgIHVybDogd3o9PSd0dXphYyc/ZGF0YS5pbWFnZTooaG9zdCsnP2lkPScrZGF0YS5pZCtwaWNzKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbn1cXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiMDLnu7zlkIhcIixcInBhdGhcIjpcInpvbmdoZVwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbi8vbG9nKGdldEl0ZW0oJ2RhdGEnKSlcXG5cXG4gLy8gdmFyIGxpc3Q9Z2V0SXRlbSgnZGF0YScpLnNwbGl0KCfnu7zlkIjmlbDmja7lvIDlp4snKVsxXS5zcGxpdCgn57u85ZCI5pWw5o2u57uT5p2fJylbMF0uc3BsaXQoJ+aNouihjCcpO1xcbiB2YXIgbGlzdD1nZXRJdGVtKCdkYXRhJykuc3BsaXQoJ+e7vOWQiOaVsOaNruW8gOWniycpWzFdLnNwbGl0KCdBVueZvuenkScpWzBdLnJlcGxhY2UoL+WIhuWJsue6vy9nLCfmjaLooYwnKS5zcGxpdCgn5o2i6KGMJyk7XFxuICBsaXN0LmZvckVhY2goZGF0YT0+e1xcbiAgICAgIHZhciBxZD1zcChkYXRhLCBcXFwicWQoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgdHA9c3AoZGF0YSwgXFxcInRwKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIG1jPXNwKGRhdGEsIFxcXCJtYyhcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB3ej1zcChkYXRhLCBcXFwiZ2pjKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHltPXNwKGRhdGEsIFxcXCJ5bShcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBseD1zcChkYXRhLCBcXFwibHgoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgcWI9cWQrJyAgJyttYysnICAnK3d6KycgICcreW0rJyAgJytseDtcXG4gICAgICBpZihseD09J+S6jOe6p+iPnOWNlScpe1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjIycrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihseD09J+m7keaWmScpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYobHg9PSflm73lhoXnm7Tmkq0nKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvemhpYm9lcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKChseD09J+WbveWkluebtOaSrScpfChseD09J+inhumikScpKXtcXG4gICAgICAgICAgaWYoIW1jLmluY2x1ZGVzKCflhajnvZHmkJwnKSl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3N5dmlkZW9cXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfVxcbiAgICAgIH1lbHNlIGlmKGx4LmluY2x1ZGVzKCflpbMnKSZseC5pbmNsdWRlcygn5LyYJykmKHd6IT0nbWlzc2F2Jykpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9udnlvdWVyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5biW5a2QJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3RpZWVyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKGx4PT0n55u05pKtJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS96aGlib2p1aGVlcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICB3ejptYyxcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYobHg9PSfmvKvnlLsnKXtcXG4gICAgICAgICAgaWYobWM9PSfnjKvlkqrmvKvnlLsnKXtcXG4gICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW9taW1hbmh1YVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcbiAgICAgIH0pXFxuICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW5odWFlcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgfVxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5bCP6K+0Jyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3hpYW9zaHVvZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihseD09J+WbvueJhycpe1xcbiAgICAgICAgICBpZihtYz09J+eMq+WSque+juWbvicpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW9taW1laXR1XFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxuICAgICAgICAgIH0pXFxuICAgICAgICAgIH1lbHNlIGlmKG1jIT0n576O5Zu+6Imy5Zu+Jyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3BpY2VyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB9KVxcbiAgICAgICAgICB9XFxuICAgICAgfWVsc2UgaWYobHg9PSfmnInlo7DlsI/or7QnKXtcXG4gICAgICAgICAgaWYobWM9PSfnjKvlkqpGTScpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW9taUZNXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxuICAgICAgICAgIH0pXFxuICAgICAgICAgIH1cXG4gICAgICB9XFxuICB9KVxcbi8qXFxudmFyIHppeW9uZz1nZXRJdGVtKCdkYXRhJykucmVwbGFjZSgnLScsJycpLnNwbGl0KCfliIblibLnur8nKVsxXS5zcGxpdCgn5o2i6KGMJyk7XFxuICB6aXlvbmcuZm9yRWFjaChkYXRhPT57XFxuICAgICAgdmFyIHFkPXNwKGRhdGEsIFxcXCJxZChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB0cD1zcChkYXRhLCBcXFwidHAoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgbWM9c3AoZGF0YSwgXFxcIm1jKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHd6PXNwKGRhdGEsIFxcXCJnamMoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgeW09c3AoZGF0YSwgXFxcInltKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIGx4PXNwKGRhdGEsIFxcXCJseChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBxYj1xZCsnICAnK21jKycgICcrd3orJyAgJyt5bSsnICAnK2x4O1xcbiAgICAgIGlmKG1jLmluY2x1ZGVzKCfpibTotY8nKSl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9XFxuICAgICAgfSlcXG4gICAgICAqL1xcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLop4bpopHliIbnsbtcIixcInBhdGhcIjpcInZpZGVvZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG52YXIg6KeG6aKR5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG5sZXQgZGF0YT0gSlNPTi5wYXJzZSjop4bpopHliIbnsbspO1xcbi8vbG9nKGRhdGEpXFxudmFyIGtleXM9T2JqZWN0LmtleXMoZGF0YSkuc2xpY2UoMik7XFxuLy9sb2coa2V5cylcXG52YXIga2V5X249a2V5c1swXTtcXG5rZXlzLmZvckVhY2goa2V5ID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+inhumikeWIhuexuycrd3osa2V5X24pPT1rZXk/c3Ryb25nKGtleSwnRkY2Njk5Jyk6a2V5LFxcbiAgICAgICAgICAgIHVybDokKGtleSkubGF6eVJ1bGUoKGtleSx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfop4bpopHliIbnsbsnK3d6LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwga2V5LHd6KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgIH0pXFxuICAgIH0pXFxuZGF0YVtnZXRNeVZhcign6KeG6aKR5YiG57G7Jyt3eixrZXlfbildLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3ZvZGVyamkxXFxcIiknLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMycsXFxuICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P3NvcnQ9JHtkYXRhLmlkfSZwYWdlPWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIuinhumikeS6jOe6p1wiLFwicGF0aFwiOlwidm9kZXJqaTFcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXVxcbnZhciBob3N0PU1ZX1BBUkFNUy5ob3N0K3BnO1xcbnZhciB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudHJ5e1xcbiAgICB2YXIgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkudmlkZW9zO1xcbiAgLy8gIGxvZyhsaXN0KVxcbmlmKCh3ej09J3hiaycpfCh3ej09J21kJykpe1xcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gfSlcXG59ZWxzZSBpZih3ej09J21hb21pJyl7XFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgIH0pXFxuIH0pXFxufWVsc2UgaWYod3o9PSd4Y2wnKXtcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgfSlcXG4gfSlcXG59ZWxzZSBpZih3ej09J3Fpc2VtYW8nKXtcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOmRhdGEuZHVyYXRpb24sXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgfSlcXG4gfSlcXG59ZWxzZSBpZih3ej09JzkxcGYnKXtcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOnBhcnNlSW50KGRhdGEuZHVyYXRpb24vNjApKyc6JytwYXJzZUludChkYXRhLmR1cmF0aW9uJTYwKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgIH0pXFxuIH0pXFxufWVsc2V7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiAoZGF0YS5kYXRlLmluY2x1ZGVzKCctJyk/ZGF0YS5kYXRlOmRhdGEuY3JlYXRlZF9kYXRlKSsnXFxcXHRcXFxcdFxcXFx0XFxcXHQnKyhkYXRhLmR1cmF0aW9uPT1udWxsPycnOmRhdGEuZHVyYXRpb24pLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuIH0pXFxuIH1cXG4gXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi6buR5paZ5YiG57G7XCIsXCJwYXRoXCI6XCJibGFja2VyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG5pZihNWV9QQUdFPT0xKXtcXG52YXIg6buR5paZ5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjpu5HmlpnliIbnsbspLmNhdGVnb3JpZXM7XFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpO1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfpu5HmlpnliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfpu5HmlpnliIbnsbsnK3d6LCBpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbn1cXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+m7keaWmeWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxuLy9sb2cobGlzdClcXG5pZih3ej09J2hhaWppYW8nKXtcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiAgZGF0YS5pbWFnZSArIFxcXCJAanM9XFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYmxhY2tlcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG59ZWxzZXtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6ICgod3o9PSc1MWNnJyl8KHd6PT0naGxiZHknKSk/KGRhdGEuaW1hZ2UrbGF6eSk6ZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYmxhY2tlcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG4gfVxcbiB9Y2F0Y2goZSl7XFxuICAgICBsb2coZS5tZXNzYWdlKVxcbiB9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIum7keaWmeS6jOe6p1wiLFwicGF0aFwiOlwiYmxhY2tlcmppMVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG52YXIgdXJsPU1ZX1BBUkFNUy5ob3N0O1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudHJ5e1xcbnZhciBkYXRhPSBKU09OLnBhcnNlKGZldGNoKHVybCkpO1xcbi8vbG9nKGRhdGEpXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOnBkZmgoZGF0YS50aXRsZUNvZGUsJ2gxJiZUZXh0Jyk9PScnP3BkZmgoZGF0YS50aXRsZUNvZGUsJ2gyJiZUZXh0Jyk6cGRmaChkYXRhLnRpdGxlQ29kZSwnaDEmJlRleHQnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgICAgIGlmKHd6PT0nY2d3Jyl7XFxuICAgICAgICAgICAgdmFyIHZpZGVvcz1kYXRhLnZpZGVvLnJlcGxhY2UoL1xcXFwkL2csJycpLnNwbGl0KCdAJyk7XFxuICAgICAgICB2YXIgaW1nPWRhdGEuaW1nY29kZS5tYXRjaCgvc3JjXFxcXD1cXFxcXFxcIi4qP1xcXFxcXFwiLio/YWx0LylbMF0uc3BsaXQoJ1xcXCInKVsxXTtcXG4gICAgdmlkZW9zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgICAgICB2YXIgbj1pbmRleCsxO1xcbiAgICAgICAgaWYoaXRlbSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifop4bpopEnK24sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOmltZyxcXG4gICAgICAgICAgICB1cmw6aXRlbS5yZXBsYWNlKCfliIblibInLCcnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnLFxcbiAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLmltZ2NvZGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxuICAgICAgICB9KVxcbiAgICAgICAgfWVsc2UgaWYod3o9PSdndGwnKXtcXG4gICAgICAgIHZhciB2aWRlb3M9ZGF0YS52aWRlby5yZXBsYWNlKC9cXFxcJC9nLCcnKS5zcGxpdCgnQCcpO1xcbiAgICAgICAgdmFyIGltZz1kYXRhLnBpY0NvZGUubWF0Y2goL3NyY1xcXFw9XFxcXFxcXCIuKj9cXFxcXFxcIi4qP2FsdC8pWzBdLnNwbGl0KCdcXFwiJylbMV07XFxuICAgIHZpZGVvcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgdmFyIG49aW5kZXgrMTtcXG4gICAgICAgIGlmKGl0ZW0pe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJytuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzppbWcsXFxuICAgICAgICAgICAgdXJsOml0ZW0ucmVwbGFjZSgn5YiG5YmyJywnJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEucGljQ29kZSxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0JyxcXG4gICAgICAgIH0pXFxuICAgICAgICB9ZWxzZSBpZih3ej09J3Rpa3RvazE4Jyl7XFxuICAgICAgICB2YXIgdmlkZW9zPWRhdGEudmlkZW8ucmVwbGFjZSgvXFxcXCQvZywnJykuc3BsaXQoJ0AnKTtcXG4gICAgICAgIHZhciBpbWdzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9cXFxcJC9nLCcnKS5zcGxpdCgnQOWIhuWJsicpO1xcbiAgICB2aWRlb3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgIHZhciBuPWluZGV4KzE7XFxuICAgICAgICBpZihpdGVtKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScrbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6aW1nc1swXStsYXp5LFxcbiAgICAgICAgICAgIHVybDppdGVtLnJlcGxhY2UoJ+WIhuWJsicsJycpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMScsXFxuICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgICAgIHZhciB0ZXh0cz1kYXRhLmltZ2NvZGUucmVwbGFjZSgvXFxcXDxwXFxcXD4vLCcmJiY8cD4nKS5yZXBsYWNlKC9cXFxcPFxcXFwvcFxcXFw+LywnJiYmPC9wPicpLnNwbGl0KCcmJiYnKTtcXG4gICAgICAvLyAgbG9nKHRleHRzKVxcbiAgICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ3AmJlRleHQnKSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGlmIChwZGZoKGl0ZW0sICdoMSYmVGV4dCcpKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdwJiZUZXh0JyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKHBkZmgoaXRlbSwgJ2gyJiZUZXh0JykpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICB9KVxcbiAgICB2YXIgaW1ncz1kYXRhLnBpY0NvZGUucmVwbGFjZSgvXFxcXCQvZywnJykuc3BsaXQoJ0DliIblibInKTtcXG4gICAgaW1ncy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgaWYoaXRlbSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGltZzppdGVtK2xhenksXFxuICAgICAgICAgICAgdXJsOml0ZW0rbGF6eSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcbiAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgICAgICB9ZWxzZSBpZih3ej09JzUxY2cnKXtcXG4gICAgICAgIHZhciBuPTBcXG4gICAgICAgIHZhciB0ZXh0cz1kYXRhLmltZ2NvZGUucmVwbGFjZSgvcHN0eWxlL2csJ3Agc3R5bGUnKS5yZXBsYWNlKC9cXFxcPFxcXFwvcC4qP1xcXFw+XFxcXDxwLio/XFxcXD4vZywnPC9wPiYmPHA+Jykuc3BsaXQoJyYmJyk7XFxuICAgICAgIC8vIGxvZyh0ZXh0cylcXG4gICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykhPScnKXtcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpKS52aWRlbztcXG4gICAgICAgIG4rKztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0gICcgKyBuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzogdXJsLnBpYyArIGxhenksXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFwvXFxcXC8uKnBsYXlcXFxcLi8sJy8vbG9uZy4nKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxuICAgICAgICB9KTtcXG4gICAgICAgfVxcbiAgICAgICB9KVxcbiAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICBpZiAocGRmaChpdGVtLCAncCYmVGV4dCcpKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdwJiZUZXh0JyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgdmFyIGltZ3MgPSBwZGZhKGl0ZW0sICdwJiZpbWcnKS5tYXAoaCA9PiBwZGZoKGgsICdpbWcmJmRhdGEteGtya2xsZ2wnKSk7XFxuICAgIGltZ3MuZm9yRWFjaChpdGVtMiA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcXG4gICAgICAgICAgICBpbWc6IGl0ZW0yICsgbGF6eSxcXG4gICAgICAgICAgICB1cmw6IGl0ZW0yICsgbGF6eSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnXFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxuICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykhPScnKXtcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpKS52aWRlbztcXG4gICAgICAgIG4rKztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0gICcgKyBuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzogdXJsLnBpYyArIGxhenksXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFwvXFxcXC8uKnBsYXlcXFxcLi8sJy8vbG9uZy4nKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICB9KVxcbiAgICAgICAgfWVsc2UgaWYod3o9PSdobGJkeScpe1xcbiAgICAgICAgICAgIHZhciBuPTBcXG4gICAgICAgIHZhciB0ZXh0cz1kYXRhLnBpY0NvZGUucmVwbGFjZSgvXFxcXDxcXFxcL3BcXFxcPlxcXFxuXFxcXDxwXFxcXD4vZywnPC9wPiYmPHA+Jykuc3BsaXQoJyYmJyk7XFxuICAgICAgIC8vIGxvZyh0ZXh0cylcXG4gICAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgaWYocGRmaChpdGVtLCcuZHBsYXllciYmY29uZmlnJykhPScnKXtcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZjb25maWcnKSkudmlkZW87XFxuICAgICAgICBuKys7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc6KeG6aKR4oCd4oCdICAnICsgbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMgKyBsYXp5LFxcbiAgICAgICAgICAgIHVybDogdXJsLnVybC5yZXBsYWNlKC9cXFxcL1xcXFwvLipwbGF5XFxcXC4vLCcvL2xvbmcuJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcbiAgICAgICAgfSk7XFxuICAgICAgIH1cXG4gICAgICAgfSlcXG4gICAgICAgdmFyIG49MDtcXG4gICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ3AmJlRleHQnKSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHZhciBpbWdzID0gcGRmYShpdGVtLCAncCYmaW1nJykubWFwKGggPT4gcGRmaChoLCAnaW1nJiZvbmxvYWQnKSk7XFxuICAgIGltZ3MuZm9yRWFjaChpdGVtMiA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcXG4gICAgICAgICAgICBpbWc6IGl0ZW0yLnNwbGl0KFxcXCIodGhpcywnXFxcIilbMV0uc3BsaXQoXFxcIicpXFxcIilbMF0gKyBsYXp5LFxcbiAgICAgICAgICAgIHVybDogaXRlbTIuc3BsaXQoXFxcIih0aGlzLCdcXFwiKVsxXS5zcGxpdChcXFwiJylcXFwiKVswXSArIGxhenksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZjb25maWcnKSE9Jycpe1xcbiAgICAgICAgbGV0IHVybD1KU09OLnBhcnNlKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmNvbmZpZycpKS52aWRlbztcXG4gICAgICAgIG4rKztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0gICcgKyBuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzogdXJsLnBpYyArIGxhenksXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFwvXFxcXC8uKnBsYXlcXFxcLi8sJy8vbG9uZy4nKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxuICAgICAgICB9KTtcXG4gICAgICAgfVxcbiAgICB9KVxcbiAgICAgICAgfWVsc2UgaWYod3o9PSdoYWlqaWFvJyl7XFxuICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgIHZhciB2aWRlb3M9ZGF0YS52aWRlby5yZXBsYWNlKC9cXFxcJC9nLCcnKS5zcGxpdCgnQCcpO1xcbiAgICAgICAgdmFyIGltZz1kYXRhLnBpY0NvZGUubWF0Y2goL3hrcmtsbGdsXFxcXD1cXFxcXFxcIi4qP1xcXFxcXFwiLio/YWx0LylbMF0uc3BsaXQoJ1xcXCInKVsxXTtcXG4gICAgdmlkZW9zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgICAgICB2YXIgbj1pbmRleCsxO1xcbiAgICAgICAgaWYoaXRlbSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifop4bpopEnK24sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOmltZysgXFxcIkBqcz1cXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcbiAgICAgICAgICAgIHVybDppdGVtLnJlcGxhY2UoJ+WIhuWJsicsJycpKycjaXNWaWRlbz10cnVlIycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAgICAgdmFyIHRleHRzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9wc3R5bGUvZywncCBzdHlsZScpLnJlcGxhY2UoL1xcXFw8XFxcXC9wXFxcXD4vZywnPC9wPiYmJykuc3BsaXQoJyYmJyk7XFxuICAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICBpZiAocGRmaChpdGVtLCAncCYmVGV4dCcpKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdwJiZUZXh0JyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgICB2YXIgaW1nPWl0ZW0ubWF0Y2goL3hrcmtsbGdsXFxcXD1cXFxcXFxcIi4qP1xcXFxcXFwiLio/YWx0Lyk7XFxuICAgICAgaWYoaW1nKXtcXG4gICAgIC8vIGxvZyhpbWcpXFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgaW1nOmltZ1swXS5zcGxpdCgnXFxcIicpWzFdKyBcXFwiQGpzPVxcXCIgKyAkLnRvU3RyaW5nKChydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuaW1hZ2VEZWNyeXB0KCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxuICAgICAgICAgIHVybDppbWdbMF0uc3BsaXQoJ1xcXCInKVsxXSsgXFxcIkBqcz1cXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcbiAgICAgICAgICBjb2xfdHlwZToncGljXzFfZnVsbCdcXG4gICAgICB9KVxcbiAgICAgICB9XFxuICAgIH0pXFxuICAgIH1jYXRjaHt9XFxuICAgICAgICB9ZWxzZSBpZih3ej09J2thbmxpYW8nKXtcXG4gICAgICAgICAgICB2YXIgdGV4dHM9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL1xcXFw8YnJcXFxcPi9nLCcmJicpLnNwbGl0KCcmJicpO1xcbiAgICAgICAgICAgIHZhciBuPTA7XFxuICAgICAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpIT0nJyl7XFxuICAgICAgICBsZXQgdXJsPUpTT04ucGFyc2UocGRmaChpdGVtLCcuZHBsYXllciYmZGF0YS1jb25maWcnKSkudmlkZW87XFxuICAgICAgICBuKys7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn6KeG6aKRICcgKyBuLFxcbiAgICAgICAgICAgLy8gZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljLFxcbiAgICAgICAgICAgIHVybDogdXJsLnVybC5yZXBsYWNlKC9cXFxcL1xcXFwvLipwbGF5XFxcXC4vLCcvL2xvbmcuJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuICAgICAgICB9KTtcXG4gICAgICAgfVxcbiAgICAgICB9KVxcbiAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnBpY0NvZGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgXFxuICAgICAgICB9Y2F0Y2h7fVxcbiAgICAgICAgXFxuICAgICAgICBcXG4gICAgICAgIC8qXFxuICAgICAgICB0cnl7XFxuICAgICAgICB2YXIgdmlkZW89ZGF0YS52aWRlb2NvZGUucmVwbGFjZSgvXFxcXDxcXFxcL3ZpZGVvXFxcXD4vZywnPC92aWRlbz4mJicpLnNwbGl0KCcmJicpO1xcbiAgICAgICAgdmlkZW8uZm9yRWFjaCgoaXRlbSxpbmRleCkgPT4ge1xcbiAgICAgICAgICAgaWYocGRmaChpdGVtLCAndmlkZW8mJnNyYycpKXtcXG4gICAgICAgICAgICB2YXIgbj1pbmRleCsxO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+inhumikScrbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgJ3ZpZGVvJiZwb3N0ZXInKSxcXG4gICAgICAgICAgICB1cmw6IHBkZmgoaXRlbSwgJ3ZpZGVvJiZzcmMnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIH1jYXRjaHt9XFxuICAgICAgICBcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScsXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOnBkZmgoZGF0YS52aWRlb2NvZGUsJ3ZpZGVvJiZwb3N0ZXInKSxcXG4gICAgICAgICAgICB1cmw6cGRmaChkYXRhLnZpZGVvY29kZSwndmlkZW8mJnNyYycpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidjYXJkX3BpY18xJ1xcbiAgICAgICAgICAgIFxcbiAgICAgICAgfSlcXG4gICAgICAgICovXFxuICAgICAgXFxuICAgICAgIFxcbiAgICAgICAgXFxuICAgICAgICAvKlxcbiAgICAgICAgaWYod3o9PSdjZ3cnKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEuaW1nY29kZSxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0JyxcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICAqL1xcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5Zu95YaF55u05pKt5YiG57G7XCIsXCJwYXRoXCI6XCJ6aGlib2VyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIOebtOaSreWIhuexuz1mZXRjaChob3N0Kyc/Z2V0cGluZ3RhaScpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo55u05pKt5YiG57G7KS5waW5ndGFpO1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOmRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvemhpYm9lcmppMVxcXCIpJyxcXG4gICAgICAgICAgIGNvbF90eXBlOidjYXJkX3BpY18zJyxcXG4gICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/cGluZ3RhaT0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgIH0pXFxufSlcXG59XFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIuWbveWGheebtOaSreS6jOe6p1wiLFwicGF0aFwiOlwiemhpYm9lcmppMVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdDtcXG5sZXQgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnRyeXtcXG5sZXQgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuemh1Ym87XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnXFxuICAgICAgICB9KVxcbiB9KVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuWbveWkluebtOaSreWIhuexu1wiLFwicGF0aFwiOlwiZ3Vvd2FpZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1VSTC5zcGxpdCgnIyMnKVsxXS5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9VUkwuc3BsaXQoJyMjJylbMl07XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVszXTtcXG52YXIg5Zu95aSW55u05pKt5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjlm73lpJbnm7Tmkq3liIbnsbspLmNhdGVnb3JpZXM7XFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpXFxuaWYoTVlfUEFHRT09MSl7XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osIGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pXFxufVxcblxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogKChkYXRhLmltYWdlLmluY2x1ZGVzKCd1cGxvYWQnKXxkYXRhLmltYWdlLmluY2x1ZGVzKCduZXcuJykpJiFkYXRhLmltYWdlLmluY2x1ZGVzKCd0b29sbW0nKSk/KGRhdGEuaW1hZ2UrbGF6eSk6ZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gfSlcXG4gfWNhdGNoKGUpe1xcbiAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbiB9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLlpbMg5LyY5YiG57G7XCIsXCJwYXRoXCI6XCJudnlvdWVyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgaXRlbT1yZXF1ZXN0KGhvc3QrJz9hY3RyZXNzPSZwYWdlPScrcGcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2UoaXRlbSkuYWN0cmVzc2VzO1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzpkYXRhLm51bWJlcixcXG4gICAgICAgICAgICBpbWc6ZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL252eW91ZXJqaTFcXFwiKScsXFxuICAgICAgICAgICBjb2xfdHlwZTonY2FyZF9waWNfMycsXFxuICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P3NvcnQ9JHtkYXRhLmlkfSZwYWdlPWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxuXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi5aWzIOS8mOS6jOe6p1wiLFwicGF0aFwiOlwibnZ5b3VlcmppMVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciBob3N0PU1ZX1BBUkFNUy5ob3N0K3BnO1xcbnZhciB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudHJ5e1xcbmxldCBsaXN0PSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS52aWRlb3M7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZXRpbWU9PW51bGw/Jyc6ZGF0YS5jcmVhdGV0aW1lKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiB9KVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuW4luWtkOWIhuexu1wiLFwicGF0aFwiOlwidGllZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciDluJblrZDliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOW4luWtkOWIhuexuykuY2F0ZWdvcmllcztcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKCk7XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+W4luWtkOWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+W4luWtkOWIhuexuycrd3osIGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pXFxufVxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5biW5a2Q5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICAvL2ltZzogJ2h0dHBzOi8vaW1hZ2VzLnhvb3dicy5jb20vdXBsb2FkXzAxJytkYXRhLmltYWdlLnNwbGl0KCd1cGxvYWRfMDEnKVsxXSxcXG4gICAgICAgICAgICBpbWc6ZGF0YS5pbWFnZStsYXp5LFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjIycrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbiB9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLnm7Tmkq3ogZrlkIjliIbnsbtcIixcInBhdGhcIjpcInpoaWJvanVoZWVyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgd3o9TVlfUEFSQU1TLnd6O1xcbmlmKHd6PT0n55u05pKt6IGa5ZCIJyl7XFxuICAgIGhvc3Q9J2h0dHA6Ly9hcGkudmlwbWlzc3MuY29tOjgxL3hjZHN3LydcXG59ZWxzZXtcXG4gICAgaG9zdD0naHR0cDovL2FwaS5tYWl5b3V4LmNvbTo4MS9tZi8nXFxufVxcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciDnm7Tmkq3ogZrlkIg9cmVxdWVzdChob3N0Kydqc29uLnR4dCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo55u05pKt6IGa5ZCIKS5waW5ndGFpO1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzpkYXRhLk51bWJlcixcXG4gICAgICAgICAgICBpbWc6ZGF0YS54aW5pbWcsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvemhpYm9qdWhlZXJqaTFcXFwiKScsXFxuICAgICAgICAgICBjb2xfdHlwZTonY2FyZF9waWNfMycsXFxuICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9JHtkYXRhLmFkZHJlc3N9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgIH0pXFxufSlcXG59XFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIuebtOaSreiBmuWQiOS6jOe6p1wiLFwicGF0aFwiOlwiemhpYm9qdWhlZXJqaTFcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxudHJ5e1xcbmxldCBsaXN0PSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS56aHVibztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgaWYoIWRhdGEudGl0bGUuaW5jbHVkZXMoJzk5OTknKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWcsXFxuICAgICAgICAgICAgdXJsOiBkYXRhLmFkZHJlc3MsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiB9KVxcbn1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLmvKvnlLvliIbnsbtcIixcInBhdGhcIjpcIm1hbmh1YWVyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG5pZihNWV9QQUdFPT0xKXtcXG52YXIg5ryr55S75YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjmvKvnlLvliIbnsbspLmNhdGVnb3JpZXM7XFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+a8q+eUu+WIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+a8q+eUu+WIhuexuycrd3osIGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pXFxufVxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5ryr55S75YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFuaHVhZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG4gfWNhdGNoKGUpe1xcbiAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbiB9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIua8q+eUu+ebruW9lVwiLFwicGF0aFwiOlwibWFuaHVhZXJqaTFcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxubGV0IHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG50cnl7XFxubGV0IGxpc3Q9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLmNoYXB0ZXJzO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCtwaWNzLFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInXFxuICAgICAgICB9KVxcbiB9KVxcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOifnrKwx56ug6aKE6KeIJyxcXG4gICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxuICAgICAgfSlcXG4gbGV0IGltZz0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuY29udGVudC5yZXBsYWNlKC9cXFxcJC9nLCcnKS5yZXBsYWNlKC/liIblibIvZywnJykuc3BsaXQoJ0AnKTtcXG4gaW1nLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGltZzpkYXRhLFxcbiAgICAgICAgICAgIHVybDogJ3BpY3M6Ly8nK2ltZy5qb2luKCcmJicpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSlcXG4gfSlcXG4gXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi54yr5ZKq5ryr55S7XCIsXCJwYXRoXCI6XCJtYW9taW1hbmh1YVwiLFwicnVsZVwiOlwiIGpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudHJ5e1xcbnZhciDnjKvlkqrmvKvnlLs9IFt7dGl0bGU6ICfmjqjojZAm5pyA5pawJueyvuWNjicsaWQ6ICdyZWNvbW1lbmQmdXBkYXRlJnBvcHVsYXInfV07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAkLnJlcXVpcmUoXFxcIkNhdGVcXFwiKS5DYXRlKOeMq+WSqua8q+eUuywn54yr5ZKq5ryr55S7JyxkKTtcXG59XFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJwYWdlXFxcIjonK3BnKyd9Jyk7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL2NvbWljLycrZ2V0TXlWYXIoJ+eMq+WSqua8q+eUuycsJ3JlY29tbWVuZCcpKyc/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxuLy9sb2coaHRtbDIpXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLnRodW1iLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hb21pbWFuaHVhZXJqaVxcXCIpJyxcXG4gICAgICAgICAgLy91cmw6ZGF0YS5pZCttYW9taW1hbmh1YWp4LFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuWwj+ivtOWIhuexu1wiLFwicGF0aFwiOlwieGlhb3NodW9lcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIOWwj+ivtOWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5bCP6K+05YiG57G7KS5jYXRlZ29yaWVzO1xcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKTtcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5bCP6K+05YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5bCP6K+05YiG57G7Jyt3eiwgaWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG59XFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCflsI/or7TliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkubGlzdDtcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3hpYW9zaHVvZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbiB9Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLlsI/or7TkuoznuqdcIixcInBhdGhcIjpcInhpYW9zaHVvZXJqaTFcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxubGV0IHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG50cnl7XFxuICAgIGlmKCh3ej09J2ppbmppc2h1d3UnKXwod3o9PSdsZWJvJyl8KHd6PT0naHVhbnhpYW5nJyl8KHd6PT0namt1bicpKXtcXG4gICAgICAgIGxldCBub3ZlbD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkubm92ZWw7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOm5vdmVsLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZXtcXG5sZXQgaWQ9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLmlkO1xcbiBsb2FkUmVhZENvbnRlbnRQYWdlKGlkKVxcbiB9XFxufWNhdGNoe1xcbiAgICB0b2FzdCgn6LCB54m55LmI55yL5bCP6K+05ZWK77yBJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIueMq+WSqua8q+eUu+S6jOe6p1wiLFwicGF0aFwiOlwibWFvbWltYW5odWFlcmppXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIGlkPU1ZX1BBUkFNUy5pZDtcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcImlkXFxcIjonK2lkKycsXFxcInBhZ2VcXFwiOicrcGcrJyxcXFwic29ydFxcXCI6MH0nKTtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvY29taWMvbGlzdHM/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBkYXRhLmlkK21hb21pbWFuaHVhangsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcIixcXG4gICAgfSlcXG4gICAgfSlcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIueMq+WSque+juWbvlwiLFwicGF0aFwiOlwibWFvbWltZWl0dVwiLFwicnVsZVwiOlwiIGpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudHJ5e1xcbnZhciDnjKvlkqrnvo7lm749IFt7dGl0bGU6ICfng63pl6gm6Zey6IGK6K6o6K66JuiVvuS4neWls+WQjCbnvo7ohb/njonotrMm5beo5Lmz576O6IO4JueUt+WQjCbljp/liJvoh6rmi40m5Yqo5ryrJuiupOivgSZzbSbor77loIIm5oiR5aa7JumrmOa9ruiEuCbnvZHnuqLlpKflkpYm5Yi25pyN6K+x5oORJuicnOaxgee+juiHgCcsaWQ6ICcwJjMmNyY5JjEwJjIyJjEmOCYyNiY2JjMxJjIzJjImMTgmNCYyMSd9XTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICQucmVxdWlyZShcXFwiQ2F0ZVxcXCIpLkNhdGUo54yr5ZKq576O5Zu+LCfnjKvlkqrnvo7lm74nLGQpO1xcbn1cXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcInBhZ2VcXFwiOicrcGcrJyxcXFwiY2F0ZVxcXCI6JytnZXRNeVZhcign54yr5ZKq576O5Zu+JywnMCcpKycsXFxcInR5cGVcXFwiOjF9Jyk7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL3YyL3Bvc3QvaG9tZT9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgaWYoZGF0YS5pbWFnZXMpe1xcbiAgICAgICAgXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS50aW1lLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZXNbMF0uaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZShkYXRhID0+IHtcXG4gICAgICAgICAgbGV0IHBpY0Fycj1bXTtcXG4gICAgICAgICAgbGV0IGltZz1kYXRhLmltYWdlcztcXG4gICAgICAgICAgbGV0IGxlbj0gaW1nLmxlbmd0aC0xO1xcbiAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBsZW47IGkrKykge1xcbiAgICAgICAgICAgICAgICBwaWNBcnJbaV0gPSBpbWdbaV0uaW1hZ2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNBcnIuam9pbihcXFwiJiZcXFwiKVxcbiAgICAgICAgfSxkYXRhKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMydcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuIH0pXFxuIH1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLnjKvlkqpGTVwiLFwicGF0aFwiOlwibWFvbWlGTVwiLFwicnVsZVwiOlwiIGpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIOeMq+WSqkZNPSBbe3RpdGxlOiAn6YO95biC5r+A5oOFJuWutuW6reS5sSDkvKYm5Y+m57G75bCP6K+0JumdkuaYpeagoeWbrSbmg4Ug6Imy56yR6K+dJuS6uiDlprvkubEg5LymJuaApyDniLHmioDlt6cm546E5bm75aWH5bm7JyxpZDogJzgmOSYxMCYxMSYxMiYxMyYxNCYxNSd9XTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICQucmVxdWlyZShcXFwiQ2F0ZVxcXCIpLkNhdGUo54yr5ZKqRk0sJ+eMq+WSqkZNJyxkKTtcXG59XFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJwYWdlXFxcIjonK3BnKycsXFxcImNhdGVfaWRcXFwiOicrZ2V0TXlWYXIoJ+eMq+WSqkZNJywnOCcpKycsXFxcInN0YXR1c1xcXCI6MCxcXFwidHlwZVxcXCI6MCxcXFwibmV3XFxcIjowfScpO1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9ib29rL2luZGV4P3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLnRodW1iLFxcbiAgICAgICAgICAgIHVybDogZGF0YS5pZCttYW9taWZtangsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnXFxuICAgICAgICB9KVxcbiB9KVxcblxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiMDHpppbpobXop4bpopFcIixcInBhdGhcIjpcInZpZGVvXCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxuICB2YXIgbGlzdD1nZXRJdGVtKCdzaG91eWUnKS5zcGxpdCgn6aaW6aG15pWw5o2u5byA5aeLJylbMV0uc3BsaXQoJ+mmlumhteaVsOaNrue7k+adnycpWzBdLnNwbGl0KCfmjaLooYwnKTtcXG4gIGxpc3QuZm9yRWFjaChkYXRhPT57XFxuICAgICAgdmFyIHFkPXNwKGRhdGEsIFxcXCJxZChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB0cD1zcChkYXRhLCBcXFwidHAoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgbWM9c3AoZGF0YSwgXFxcIm1jKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHd6PXNwKGRhdGEsIFxcXCJnamMoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgeW09c3AoZGF0YSwgXFxcInltKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIGx4PXNwKGRhdGEsIFxcXCJseChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBxYj1xZCsnICAnK21jKycgICcrd3orJyAgJyt5bSsnICAnK2x4O1xcbiAgICAgIGlmKHFkPT0n6bq76LGGVFYnKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFkb3VcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXG4gICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKHFkPT0nOTFUVicpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS85MXR2XFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxuICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihxZD09J+eMq+WSqicpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW9taVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcbiAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYocWQ9PSfnjKvlkqrljp/liJsnKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFvbWl5dWFuY2h1YW5nXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxuICAgICAgfSlcXG4gICAgICB9ZWxzZXtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zeXZpZGVvXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1cXG4gIH0pXFxuICAgICAgXFxuICAgICAgdmFyIGxpc3QxPWdldEl0ZW0oJ3Nob3V5ZScpLnNwbGl0KCfliIblibLnur8nKVsxXS5zcGxpdCgn5o2i6KGMJyk7XFxuICBsaXN0MS5mb3JFYWNoKGRhdGE9PntcXG4gICAgICB2YXIgcWQ9c3AoZGF0YSwgXFxcInFkKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHRwPXNwKGRhdGEsIFxcXCJ0cChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBtYz1zcChkYXRhLCBcXFwibWMoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgd3o9c3AoZGF0YSwgXFxcImdqYyhcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB5bT1zcChkYXRhLCBcXFwieW0oXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgbHg9c3AoZGF0YSwgXFxcImx4KFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHFiPXFkKycgICcrbWMrJyAgJyt3eisnICAnK3ltKycgICcrbHg7XFxuICAgICAgaWYodHAhPW51bGwpe1xcbiAgICAgICAgICBpZigod3o9PSd4aWFuZ2ppYW8nKXwod3o9PSc5MWRzcCcpfCh3ej09J3Rpa3RvazE4Jyl8KHd6PT0nb2dmYXAnKXwod3o9PSd0aWt0b2sxOGxvbmcnKXwod3o9PSd4aWFvaHVsaScpKXtcXG4gICAgIH1lbHNle1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3N5dmlkZW9cXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfVxcbiAgICAgIH1cXG4gICAgICB9KVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgaWYoZ2V0TXlWYXIoJ2EnKSA9PSAnJyl7XFxuICAgIHZhciBzaG91eWU9cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMDMuMjJzLmxvbC9lbmNyeXB0L2FwaS5waHA/cGF0aD1xaWV6aS9zaG91eWUnKSlcXG4gICAgdmFyIGRhdGE9cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMDMuMjJzLmxvbC9lbmNyeXB0L2FwaS5waHA/cGF0aD1xaWV6aS96b25naGUnKSlcXG4gICAgdmFyIHNlYXJjaD1mZXRjaCgnaHR0cDovLzAwMy4yMnMubG9sL3NlYXJjaGNvbmZpZy92aXBhcGkvdmlwY29uZmlnLnR4dCcpXFxuICAgLy8gdmFyIGt1b3poYW49cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMDQuMjJzLmxvbC9lbmNyeXB0L2FwaS5waHA/cGF0aD1xaWV6aS9oZWlrZWppJykpXFxuICAgLy8gdmFyIHl1bWluZz1xekRlY3J5cHQocmVxdWVzdCgnaHR0cDovLzAxLnhrYTNhLnRvcC9lbmNyeXB0L2FwaS5waHA/cGF0aD15dW1pbmcveXVtaW5nJykpXFxuICAvLyAgdmFyIGdvbmdnYW89cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMDMuMjJzLmxvbC9lbmNyeXB0L2FwaS5waHA/cGF0aD1xaWV6aS9xeicpKVxcbiAgICBwdXRNeVZhcignYScsJzEnKVxcbiAgICBzZXRJdGVtKCdzaG91eWUnLHNob3V5ZSlcXG4gICAgc2V0SXRlbSgnZGF0YScsZGF0YSlcXG4gICAgc2V0SXRlbSgnc2VhcmNoJyxzZWFyY2gpXFxuICAgIHJlZnJlc2hQYWdlKClcXG4gICAgdG9hc3QoJ+aVsOaNruW3suabtOaWsCcpXFxuICAgIC8qXFxuICAgIFxcbiAgICDln5/lkI3mm7/mjaLljLnphY3ooajovr7lvI9odHRwcz86Ly8oYXBpMT9cXFxcLik/KGNoYW5nZmFwaWFvcGlhb3x5aWx1c2h1bmZlbmd8cGhwamlla291fGFwaWppZWtvdSlcXFxcLnRvcCgvYXBpKT/jgIpcXG7nur/ot6/pm4blkIhodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcHxodHRwczovL2FwaS5jaGFuZ2ZhcGlhb3BpYW8udG9wfGh0dHA6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3B8aHR0cDovL2FwaS5jaGFuZ2ZhcGlhb3BpYW8udG9wfGh0dHA6Ly9hcGkxLmFwaWppZWtvdS50b3AvYXBpfGh0dHA6Ly9hcGkucGhwamlla291LnRvcHxodHRwOi8vMDA0LjIycy5sb2wvYXBp44CKXFxu5aSx5pWI5Z+f5ZCN6ZuG5ZCIaHR0cHM6Ly9hcGkueWlsdXNodW5mZW5nLnRvcHxodHRwOi8vYXBpLnlpbHVzaHVuZmVuZy50b3B8aHR0cDovL2FwaTExLnBocGppZWtvdS50b3DjgIpcXG7mnIDmlrDmjqXlj6Pln5/lkI1odHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcOOAilxcbiovXFxuICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi54yr5ZKqQVZcIixcInBhdGhcIjpcIm1hb21pYXZcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9VUkwuc3BsaXQoJyMjJylbMV0ucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfVVJMLnNwbGl0KCcjIycpWzJdO1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbM107XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIOWbveWkluebtOaSreWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5Zu95aSW55u05pKt5YiG57G7KS5jYXRlZ29yaWVzO1xcbnZhciBpbmRleF9uPWRhdGFbMF0uaWRcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZD9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osIGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZCx3eiksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbn1cXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaChlKXtcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG4gfVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6bq76LGGVFZcIixcInBhdGhcIjpcIm1hZG91XCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG4vL21kNeWKoOWvhlxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxufVxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTsgXFxubGV0IHBnPSBNWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIG1kPSBbe3RpdGxlOiAn6aaW6aG1JumikemBkybmoIfnrb4nLGlkOiAnMSYyJjMnLGltZzonaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTExLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTIuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMy5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTE0LnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMjIuc3ZnJ31dO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJDYXRlXFxcIikuQ2F0ZShtZCwnbWQnLGQpO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnbGluZScsXFxufSx7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXG59XFxuLHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcbn0pO1xcbn1cXG5sZXQg5YiG57G7PWdldE15VmFyKCdtZCcsICcxJyk7XFxuXFxuaWYo5YiG57G7PT0xKXtcXG52YXIgc2lnbiA9IG1kNSgnbGlzdF9yb3c9MjAmcGFnZT0nK3BnKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MicrJyZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTtcXG52YXIgZGF0YTA9e1xcbiAgICAgICBcXFwiZW5jb2RlX3NpZ25cXFwiOnNpZ24sXFxuICAgICAgIFxcXCJsaXN0X3Jvd1xcXCI6XFxcIjIwXFxcIixcXG4gICAgICAgXFxcInBhZ2VcXFwiOnBnLFxcbiAgICAgICBcXFwidGltZXN0YW1wXFxcIjp0LFxcbiAgICAgICBcXFwidHlwZVxcXCI6XFxcIjJcXFwifTtcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXG52YXIgdXJsPSdodHRwczovL2FwaS5uenAxdmUuY29tL3ZpZGVvL2xpc3RjYWNoZSc7XFxuXFxufWVsc2V7XFxudmFyIHNpZ24gPSBtZDUoJ3RpbWVzdGFtcD0nK3QrJyZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTtcXG52YXIgZGF0YTA9e1xcbiAgICAgICAgXFxcImVuY29kZV9zaWduXFxcIjogc2lnbixcXG4gICAgICAgIFxcXCJ0aW1lc3RhbXBcXFwiOiB0XFxuICAgIH07XFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxuaWYo5YiG57G7PT0yKXtcXG52YXIgdXJsID0gJ2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vY2hhbm5lbCc7XFxufWVsc2UgaWYo5YiG57G7PT0zKXtcXG52YXIgdXJsID0gJ2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vdGFncyc7XFxufVxcbn07XFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcblxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxuaWYo5YiG57G7PT0xKXtcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIHZhciB0YWc9ZGF0YS50YWdzO1xcbiAgICAgIHZhciBzdHIxPScnO1xcbiAgICAgZm9yKGkgaW4gdGFnKXtcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcbn1cXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIHBpY191cmw6ZGF0YS5wYW5vcmFtYS5yZXBsYWNlKCdfc3luYy53ZWJwJywnLmpwZycpLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsLFxcbn0pXFxufSlcXG59ZWxzZSBpZijliIbnsbs9PTIpe1xcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5uYW1lLFxcbiAgICAgICAgICAgICAgICBkZXNjOmRhdGEudG90YWwrJ+S4queJh+WEvycsXFxuICAgICAgICAgICAgICAgcGljX3VybDpkYXRhLmltYWdlLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fM1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFkb3VwaW5kYW9cXFwiKScsXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxuICAgICAgICAgIH1cXG59KVxcbn0pXFxufWVsc2UgaWYo5YiG57G7PT0zKXtcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXG4gICAgICAgICAgICAgICAgLy9waWNfdXJsOmRhdGEudGh1bWIsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYWRvdWJpYW9xaWFuXFxcIiknLFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcbiAgICAgICAgICB9XFxufSlcXG59KVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIum6u+ixhumikemBk1wiLFwicGF0aFwiOlwibWFkb3VwaW5kYW9cIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG4vL21kNeWKoOWvhlxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxufVxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTtcXG52YXIgdDAgPSBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCk7XFxubGV0IGlkPU1ZX1BBUkFNUy5pZDtcXG5sZXQgcD1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIHNpZ24gPSBtZDUoJ2NoYW5uZWw9JytpZCsnJmxpc3Rfcm93PTYwJnBhZ2U9JytwKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MiZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgLy9sb2coc2lnbilcXG5cXG5sZXQgZGF0YTA9e1xcbiAgICAgICAgXFxcImNoYW5uZWxcXFwiOiBpZCxcXG4gICAgICAgIFxcXCJlbmNvZGVfc2lnblxcXCI6IHNpZ24sXFxuICAgICAgICBcXFwibGlzdF9yb3dcXFwiOiBcXFwiNjBcXFwiLFxcbiAgICAgICAgXFxcInBhZ2VcXFwiOiBwLFxcbiAgICAgICAgXFxcInRpbWVzdGFtcFxcXCI6IHQsXFxuICAgICAgICBcXFwidHlwZVxcXCI6IFxcXCIyXFxcIlxcbiAgICB9XFxuLy9sb2coZGF0YTApXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxuLy9sb2coZGF0YSlcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXG52YXIgdXJsID0gJ2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vbGlzdGNhY2hlJztcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxuLy9sb2coaHRtbClcXG5cXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcbi8vbG9nKGh0bWwxKVxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcbi8vbG9nKGl2MCk7XFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxuLy9sb2coaHRtbDIpXFxuXFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxuLy9sb2cobGlzdCk7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxudmFyIHRhZz1kYXRhLnRhZ3M7XFxuICAgICAgdmFyIHN0cjE9Jyc7XFxuICAgICBmb3IoaSBpbiB0YWcpe1xcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxufVxcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgcGljX3VybDpkYXRhLnBhbm9yYW1hLnJlcGxhY2UoJ19zeW5jLndlYnAnLCcuanBnJykucmVwbGFjZSgnX2xvbmdQcmV2aWV3JywnJyksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwsXFxufSlcXG59KVxcbn1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpurvosYbmoIfnrb5cIixcInBhdGhcIjpcIm1hZG91Ymlhb3FpYW5cIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG4vL21kNeWKoOWvhlxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxufVxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTtcXG52YXIgdDAgPSBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCk7XFxubGV0IGlkPU1ZX1BBUkFNUy5pZDtcXG5sZXQgcD1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIHNpZ24gPSBtZDUoJ2xpc3Rfcm93PTYwJnBhZ2U9JytwKycmdGFncz0nK2lkKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MiZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgLy9sb2coc2lnbilcXG5cXG5sZXQgZGF0YTA9e1xcbiAgICAgICAgXFxcImVuY29kZV9zaWduXFxcIjogc2lnbixcXG4gICAgICAgIFxcXCJsaXN0X3Jvd1xcXCI6IFxcXCI2MFxcXCIsXFxuICAgICAgICBcXFwicGFnZVxcXCI6IHAsXFxuICAgICAgICBcXFwidGFnc1xcXCI6IGlkLFxcbiAgICAgICAgXFxcInRpbWVzdGFtcFxcXCI6IHQsXFxuICAgICAgICBcXFwidHlwZVxcXCI6IFxcXCIyXFxcIlxcbiAgICB9XFxuLy9sb2coZGF0YTApXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxuLy9sb2coZGF0YSlcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXG52YXIgdXJsID0gJ2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vbGlzdGNhY2hlJztcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxuLy9sb2coaHRtbClcXG5cXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcbi8vbG9nKGh0bWwxKVxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcbi8vbG9nKGl2MCk7XFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxuLy9sb2coaHRtbDIpXFxuXFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxuLy9sb2cobGlzdCk7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxudmFyIHRhZz1kYXRhLnRhZ3M7XFxuICAgICAgdmFyIHN0cjE9Jyc7XFxuICAgICBmb3IoaSBpbiB0YWcpe1xcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxufVxcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgcGljX3VybDpkYXRhLnBhbm9yYW1hLnJlcGxhY2UoJ19zeW5jLndlYnAnLCcuanBnJykucmVwbGFjZSgnX2xvbmdQcmV2aWV3JywnJyksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwsXFxufSlcXG59KVxcbn1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI5MVRWXCIsXCJwYXRoXCI6XCI5MXR2XCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG4vL21kNeWKoOWvhlxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxufVxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTsgXFxubGV0IHBnPSBNWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIHR2PSBbe3RpdGxlOiAn6aaW6aG1JumikemBkybmoIfnrb4nLGlkOiAnMSYyJjMnLGltZzonaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTExLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTIuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMy5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTE0LnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMjIuc3ZnJ31dO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJDYXRlXFxcIikuQ2F0ZSh0diwndHYnLGQpO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnbGluZScsXFxufSx7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXG59XFxuLHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcbn0pO1xcbn1cXG5sZXQg5YiG57G7PWdldE15VmFyKCd0dicsICcxJyk7XFxuXFxuaWYo5YiG57G7PT0xKXtcXG52YXIgc2lnbiA9IG1kNSgnbGlzdF9yb3c9MjAmcGFnZT0nK3BnKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MicrJyZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgXFxudmFyIGRhdGEwPXtcXG4gICAgICAgXFxcImVuY29kZV9zaWduXFxcIjpzaWduLFxcbiAgICAgICBcXFwibGlzdF9yb3dcXFwiOlxcXCIyMFxcXCIsXFxuICAgICAgIFxcXCJwYWdlXFxcIjpwZyxcXG4gICAgICAgXFxcInRpbWVzdGFtcFxcXCI6dCxcXG4gICAgICAgXFxcInR5cGVcXFwiOlxcXCIyXFxcIn07XFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxudmFyIHVybD0naHR0cHM6Ly90dnYuempxZmFydC5jbi92aWRlby9saXN0Y2FjaGUnO1xcblxcbn1lbHNle1xcbnZhciBzaWduID0gbWQ1KCd0aW1lc3RhbXA9Jyt0KycmbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IFxcbnZhciBkYXRhMD17XFxuICAgICAgICBcXFwiZW5jb2RlX3NpZ25cXFwiOiBzaWduLFxcbiAgICAgICAgXFxcInRpbWVzdGFtcFxcXCI6IHRcXG4gICAgfTtcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXG5pZijliIbnsbs9PTIpe1xcbnZhciB1cmwgPSAnaHR0cHM6Ly90dnYuempxZmFydC5jbi92aWRlby9jaGFubmVsJztcXG59ZWxzZSBpZijliIbnsbs9PTMpe1xcbnZhciB1cmwgPSAnaHR0cHM6Ly90dnYuempxZmFydC5jbi92aWRlby90YWdzJztcXG59XFxufTtcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXG5pZijliIbnsbs9PTEpe1xcbnZhciBodG1sMz1mZXRjaChKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmZpbGVfbmFtZSk7XFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwzKS5kYXRhO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgdmFyIHRhZz1kYXRhLnRhZ3M7XFxuICAgICAgdmFyIHN0cjE9Jyc7XFxuICAgICBmb3IoaSBpbiB0YWcpe1xcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxufVxcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgXFxuICAgICAgICAgICAgICAgaW1nOmRhdGEudGh1bWIrbWRsYXp5LFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsK3R2dm9kLFxcbn0pXFxufSlcXG59ZWxzZSBpZijliIbnsbs9PTIpe1xcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5uYW1lLFxcbiAgICAgICAgICAgICAgICBkZXNjOmRhdGEudG90YWwrJ+S4queJh+WEvycsXFxuICAgICAgICAgICAgICAgcGljX3VybDpkYXRhLmltYWdlLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fM1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvOTF0dnBpbmRhb1xcXCIpJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXG4gICAgICAgICAgfVxcbn0pXFxufSlcXG59ZWxzZSBpZijliIbnsbs9PTMpe1xcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YTtcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxuICAgICAgICAgICAgICAgIC8vaW1nOmRhdGEudGh1bWIrbWRsYXp5LFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvOTF0dmJpYW9xaWFuXFxcIiknLFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcbiAgICAgICAgICB9XFxufSlcXG59KVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjkxdHbmoIfnrb5cIixcInBhdGhcIjpcIjkxdHZiaWFvcWlhblwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbi8vbWQ15Yqg5a+GXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXG59XFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpO1xcbnZhciB0MCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKTtcXG5sZXQgaWQ9TVlfUEFSQU1TLmlkO1xcbmxldCBwPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgc2lnbiA9IG1kNSgnbGlzdF9yb3c9NjAmcGFnZT0nK3ArJyZ0YWdzPScraWQrJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyAvL2xvZyhzaWduKVxcblxcbmxldCBkYXRhMD17XFxuICAgICAgICBcXFwiZW5jb2RlX3NpZ25cXFwiOiBzaWduLFxcbiAgICAgICAgXFxcImxpc3Rfcm93XFxcIjogXFxcIjYwXFxcIixcXG4gICAgICAgIFxcXCJwYWdlXFxcIjogcCxcXG4gICAgICAgIFxcXCJ0YWdzXFxcIjogaWQsXFxuICAgICAgICBcXFwidGltZXN0YW1wXFxcIjogdCxcXG4gICAgICAgIFxcXCJ0eXBlXFxcIjogXFxcIjJcXFwiXFxuICAgIH1cXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXG52YXIgdXJsID0gJ2h0dHBzOi8vdHZ2LnpqcWZhcnQuY24vdmlkZW8vbGlzdGNhY2hlJztcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXG52YXIgaHRtbDM9ZmV0Y2goSlNPTi5wYXJzZShodG1sMikuZGF0YS5maWxlX25hbWUpO1xcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMykuZGF0YTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXG52YXIgdGFnPWRhdGEudGFncztcXG4gICAgICB2YXIgc3RyMT0nJztcXG4gICAgIGZvcihpIGluIHRhZyl7XFxuICAgIHZhciBzdHIxID0gc3RyMSt0YWdbaV0ubmFtZSsnICAgJztcXG59XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgICAgZGVzYzpzdHIxLCBcXG4gICAgICAgICAgICAgICBpbWc6ZGF0YS50aHVtYittZGxhenksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwrdHZ2b2QsXFxufSlcXG59KVxcbn1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI5MXR26aKR6YGTXCIsXCJwYXRoXCI6XCI5MXR2cGluZGFvXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxuLy9tZDXliqDlr4ZcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcbn1cXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7XFxudmFyIHQwID0gTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApO1xcbmxldCBpZD1NWV9QQVJBTVMuaWQ7XFxubGV0IHA9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciBzaWduID0gbWQ1KCdjaGFubmVsPScraWQrJyZsaXN0X3Jvdz02MCZwYWdlPScrcCsnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTImbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IFxcbmxldCBkYXRhMD17XFxuICAgICAgICBcXFwiY2hhbm5lbFxcXCI6IGlkLFxcbiAgICAgICAgXFxcImVuY29kZV9zaWduXFxcIjogc2lnbixcXG4gICAgICAgIFxcXCJsaXN0X3Jvd1xcXCI6IFxcXCI2MFxcXCIsXFxuICAgICAgICBcXFwicGFnZVxcXCI6IHAsXFxuICAgICAgICBcXFwidGltZXN0YW1wXFxcIjogdCxcXG4gICAgICAgIFxcXCJ0eXBlXFxcIjogXFxcIjJcXFwiXFxuICAgIH1cXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXG52YXIgdXJsID0gJ2h0dHBzOi8vdHZ2LnpqcWZhcnQuY24vdmlkZW8vbGlzdGNhY2hlJztcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXG52YXIgaHRtbDM9ZmV0Y2goSlNPTi5wYXJzZShodG1sMikuZGF0YS5maWxlX25hbWUpO1xcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMykuZGF0YTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXG52YXIgdGFnPWRhdGEudGFncztcXG4gICAgICB2YXIgc3RyMT0nJztcXG4gICAgIGZvcihpIGluIHRhZyl7XFxuICAgIHZhciBzdHIxID0gc3RyMSt0YWdbaV0ubmFtZSsnICAgJztcXG59XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgICAgZGVzYzpzdHIxLFxcbiAgICAgICAgICAgICAgIGltZzpkYXRhLnRodW1iK21kbGF6eSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCt0dnZvZCxcXG59KVxcbn0pXFxufWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIueMq+WSqlwiLFwicGF0aFwiOlwibWFvbWlcIixcInJ1bGVcIjpcIiBqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciDnjKvlkqo9IFt7dGl0bGU6ICfnjKvlkqrljp/liJsmQUnliLbkvZwm5LiN6ZuF6KeG6aKRJuS6mua0suaXoCDnoIEm5oqW6Z+z5aa56ZuG5ZCIJueDreWJp+aIkOS6uueJiCbpn6nlm73kuInnuqcm5Lq65rCU5aWzIOS8mCcsaWQ6ICcxMCYxNiY1JjkmMTEmMTImMTMmNid9XTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICQucmVxdWlyZShcXFwiQ2F0ZVxcXCIpLkNhdGUo54yr5ZKqLCfnjKvlkqonLGQpO1xcbn1cXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcInNwZWNpYWxfaWRcXFwiOicrZ2V0TXlWYXIoJ+eMq+WSqicsJzEwJykrJyxcXFwicGFnZVxcXCI6JytwZysnfScpO1xcbnRyeXtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvc3BlY2lhbC92aWRlbz9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS52aWRlb19uYW1lLFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS5jcmVhdGVfYXQsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDpkYXRhLnZpZGVvX2lkK21hb21pangsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiB9KVxcbiB9Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi54yr5ZKq5Y6f5YibXCIsXCJwYXRoXCI6XCJtYW9taXl1YW5jaHVhbmdcIixcInJ1bGVcIjpcIiBqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciDnjKvlkqrljp/liJs9IFt7dGl0bGU6ICfmnIDmlrAm54Ot6ZeoJyxpZDogJzMmMSd9XTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICQucmVxdWlyZShcXFwiQ2F0ZVxcXCIpLkNhdGUo54yr5ZKq5Y6f5YibLCfnjKvlkqrljp/liJsnLGQpO1xcbn1cXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcInVzZXJfaWRcXFwiOjE3OTAzNjgsXFxcInR5cGVcXFwiOicrZ2V0TXlWYXIoJ+eMq+WSquWOn+WImycsJzMnKSsnLFxcXCJwYWdlXFxcIjonK3BnKyd9Jyk7XFxudHJ5e1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9vcmlnaW5hbC9pbmRleD9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOmRhdGEuY3JlYXRlX2F0LFxcbiAgICAgICAgICAgIGltZzogZGF0YS52aWRlb19pbWcsXFxuICAgICAgICAgICAgdXJsOmRhdGEubTN1OCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxuICAgICAgICAgICAgZXh0cmE6IHsgXFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbXFxuICAgICAgICAgICAge3RpdGxlOiAn5LiL6L29JywganM6ICQudG9TdHJpbmcoKHVybCk9PnsgcmV0dXJuICAnZG93bmxvYWQ6Ly8nK3VybH0sZGF0YS5kb3duKX1cXG4gICAgICAgICAgICBdXFxuICAgICAgICAgICB9XFxuICAgICAgfSlcXG4gfSlcXG4gfWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIummlumhteinhumikeWIhuexu1wiLFwicGF0aFwiOlwic3l2aWRlb1wiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbmlmKHd6PT0nYmFvbWFkcycpe1xcbiAgICB2YXIgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpLnJlcGxhY2UoJ2Jhb21hZHMnLCdiYW9tYS9iYW9tYWRzJyk7XFxufVxcbnZhciDpppbpobXop4bpopHliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOmmlumhteinhumikeWIhuexuykuY2F0ZWdvcmllcztcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKClcXG5pZihNWV9QQUdFPT0xKXtcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign6aaW6aG16KeG6aKR5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign6aaW6aG16KeG6aKR5YiG57G7Jyt3eiwgaWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG59XFxuXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCfpppbpobXop4bpopHliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICBpZigod3o9PSdsdXR1YmUnKXwod3o9PSdwYWxpJykpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2x1bGF6eSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2UgaWYod3ouaW5jbHVkZXMoJ2t1YWltYW8nKXwod3o9PSdmZWQnKXwod3o9PSdzYXZzcCcpfCh3ej09J21tc3AnKXwod3o9PSdjbWF2Jyl8KHd6PT0naHNjazInKXx3ei5pbmNsdWRlcygneGlhbmdqaWFvJykpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5jcmVhdGV0aW1lPT1udWxsPycnOmRhdGEuY3JlYXRldGltZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZSBpZih3ej09J2lucycpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2luc2xhenksXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgIH1lbHNle1xcbiAgICAgICAgaWYoZGF0YS5pbWFnZSl7XFxuICAgICAgICB2YXIgaW1nPWRhdGEuaW1hZ2U7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSsnICAnKyhkYXRhLmR1cmF0aW9uPT1udWxsPycnOmRhdGEuZHVyYXRpb24pLFxcbiAgICAgICAgICAgIGltZzogKGltZy5pbmNsdWRlcygndXBsb2FkJyl8fGltZy5pbmNsdWRlcygnbmV3LicpKT8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgfVxcbiB9KVxcbiB9Y2F0Y2goZSl7XFxuICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxuIH1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi5Zu+54mH5LqM57qnXCIsXCJwYXRoXCI6XCJ0dXBpYW5lcmppXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcbmxldCB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudHJ5e1xcbiBsZXQgaW1nPSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS5jb250ZW50LnJlcGxhY2UoL1xcXFwkL2csJycpLnJlcGxhY2UoL+WIhuWJsi9nLCcnKS5zcGxpdCgnQCcpO1xcbiBpbWcuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOmRhdGEsXFxuICAgICAgICAgICAgdXJsOiAncGljczovLycraW1nLmpvaW4oJyYmJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xX2Z1bGwnXFxuICAgICAgICB9KVxcbiB9KVxcbiBcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLlm77niYfliIbnsbtcIixcInBhdGhcIjpcInBpY2VyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpLnJlcGxhY2UoJ2NvbWljJywncGljdHVyZScpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG5pZihNWV9QQUdFPT0xKXtcXG52YXIg5Zu+54mH5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjlm77niYfliIbnsbspLmNhdGVnb3JpZXM7XFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+WbvueJh+WIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+WbvueJh+WIhuexuycrd3osIGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pXFxufVxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5Zu+54mH5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogd3o9PSd0aWt0b2sxOCc/KGRhdGEuaW1hZ2UrbGF6eSk6ZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90dXBpYW5lcmppXFxcIiknLFxcbiAgICAgICAgICAgIHVybDogd3o9PSd0dXphYyc/ZGF0YS5pbWFnZTooaG9zdCsnP2lkPScrZGF0YS5pZCtwaWNzKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbiB9Y2F0Y2goZSl7XFxuICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxuIH1cXG5zZXRSZXN1bHQoZClcIn1dIiwiaWNvbiI6Imh0dHBzOi8vaW1nMTAuMzYwYnV5aW1nLmNvbS9pbWd6b25lL2pmcy90MS8xNjY1MzUvNC80MzY1NS82NzQ2LzY3OTEwOTAwRjhhNDM2NWE0L2Y4OTJlOWVkZTM3YWNlMzgucG5nIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment