Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@聚漫🔮@eyJmaXJzdEhlYWRlciI6ImNsYXNzIiwibGFzdF9jaGFwdGVyX3J1bGUiOiIiLCJ0aXRsZSI6IuiBmua8q/CflK4iLCJhdXRob3IiOiIiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IiwidmVyc2lvbiI6MjIxMjMwMTA3LCJjb2xfdHlwZSI6Imljb25fc21hbGxfNCIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoiYWxsIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG5jb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpLFxuICAgIG5ld1dpbmRvdyA9IHJlYWRGaWxlKCduZXdXaW5kb3cnKSxcbiAgICB0eXBlU2hvdyA9IGdldE15VmFyKCd0eXBlU2hvdycsICdAJyksXG4gICAgdHlwZXMgPSB7XG4gICAgICAgICdhbGwnOiAn5LyY6LSoJyxcbiAgICAgICAgJ3ZpZGVvJzogJ+inhumikScsXG4gICAgICAgICdtdXNpYyc6ICfpn7PpopEnLFxuICAgICAgICAnbGl2ZSc6ICfnm7Tmkq0nLFxuICAgICAgICAnY2FydG9vbic6ICfmvKvnlLsnLFxuICAgICAgICAncmVhZCc6ICfpmIXor7snLFxuICAgICAgICAncGljdHVyZSc6ICflj6bnsbsnLFxuICAgICAgICAnbmV3cyc6ICfml6DmkJzntKInLFxuICAgICAgICAndG9vbCc6ICflj6/kuIvovb0nLFxuICAgICAgICAnb3RoZXInOiAn5oq96aOOJ1xuICAgIH1cbmxldCBlbCA9IFt7XG4gICAgICAgIHRpdGxlOiAnICcgKyBRSU5HX1RJVExFLmJvbGQoKSArICcgJm5ic3AgJm5ic3AgJyArICfimpkg6IGa5ryr6K6+572uIOKamScuc21hbGwoKSxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbmZpZz9ydWxlPScgKyBRSU5HX1RJVExFICsgJyYjbm9SZWNvcmRIaXN0b3J5IycsXG4gICAgICAgIGltZzogTVlfUlVMRS5pY29uIHx8ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgIHZlcnNpb246IE1ZX1JVTEUudmVyc2lvblxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBkZXNjOiAnMCcsXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9NYWluLnZpZXc/cnVsZT3mnKzlnLDotYTmupDnrqHnkIYnLFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9jYXJkX2JnJyxcbiAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xuICAgIH0sIHtcbiAgICAgICAgdXJsOiAnXCJoaWtlcjovL3NlYXJjaD9zPVwiK2lucHV0JyxcbiAgICAgICAgZGVzYzogJ+i/meaYr+iBmua8q+eahOaQnOe0ouWTpn5+JyxcbiAgICAgICAgdGl0bGU6ICfmkJzntKInLFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgIHJ1bGVzOiAkLnRvU3RyaW5nKChRSU5HX1RJVExFLCB0eXBlU2hvdykgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNlYXJjaE1vZGUoMSlcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKVxuICAgICAgICAgICAgICAgIGlmICh0eXBlU2hvd1swXSA9PSAnQCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcktleSA9IHR5cGVTaG93LnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHJ1bGVzID0gcnVsZXMuZmlsdGVyKCh2KSA9PiB2LnRpdGxlLmluY2x1ZGVzKGZpbHRlcktleSkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHJ1bGVzID0gcnVsZXMuZmlsdGVyKCh2KSA9PiB2LnR5cGUgPT0gdHlwZVNob3cpXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVzKVxuICAgICAgICAgICAgfSwgUUlOR19USVRMRSwgdHlwZVNob3cpLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcignc2VhcmNoS2V5JywgJycpLFxuICAgICAgICAgICAgb25DaGFuZ2U6IFwicHV0TXlWYXIoJ3NlYXJjaEtleScsaW5wdXQpXCJcbiAgICAgICAgfVxuICAgIH1dLFxuICAgIHJ1bGVzID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSksXG4gICAgcnVsZXNUeXBlID0gcnVsZXMucmVkdWNlKChvYmosIHYpID0+IHtcbiAgICAgICAgbGV0IHR5cGUgPSB2LnR5cGVcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpbdHlwZV0pKVxuICAgICAgICAgICAgICAgIG9ialt0eXBlXSA9IFtdXG4gICAgICAgICAgICBvYmpbdHlwZV0ucHVzaCh2KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmpcbiAgICB9LCB7fSlcbmlmICh0eXBlU2hvd1swXSA9PSAnQCcpIHtcbiAgICBsZXQgZmlsdGVyS2V5ID0gdHlwZVNob3cuc2xpY2UoMSlcbiAgICBpZiAoZmlsdGVyS2V5KSBydWxlcyA9IHJ1bGVzLmZpbHRlcigodikgPT4gdi50aXRsZS5pbmNsdWRlcyhmaWx0ZXJLZXkpKVxufVxuZWwucHVzaCh7XG4gICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEucG5nJyxcbiAgICB0aXRsZTogJ+aUtuiXjycsXG4gICAgdXJsOiBcImhpa2VyOi8vY29sbGVjdGlvbj9ncm91cD3ogZrmvKvwn5SuXCIsXG4gICAgY29sX3R5cGU6IFwiaWNvbl8yXCJcbn0sIHtcbiAgICBpbWc6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvMTM3LnBuZycsXG4gICAgdGl0bGU6ICfljoblj7InLFxuICAgIHVybDogXCJoaWtlcjovL2hpc3RvcnlcIixcbiAgICBjb2xfdHlwZTogXCJpY29uXzJcIlxufSlcbmVsLnB1c2godHlwZVNob3dbMF0gPT0gJ0AnID8ge1xuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICgn5YWo6YOoJyArICh0eXBlU2hvd1sxXSA/ICdbJyArIHR5cGVTaG93LnNsaWNlKDEpICsgJ10nIDogJycpKS5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgKyAnICcgKyAocnVsZXMubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgdXJsOiAkKHR5cGVTaG93LnNsaWNlKDUpLCAn5p+l5om+5bCP56iL5bqP5YWz6ZSu6K+NJykuaW5wdXQoKCkgPT4ge1xuICAgICAgICBwdXRNeVZhcigndHlwZVNob3cnLCAnQCcgKyBpbnB1dClcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcbiAgICB9KSxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXG59IDoge1xuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCd5YWo6YOoICcgKyAocnVsZXMubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgJ0AnKVxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WGjeasoeeCueWHu+OAkOWFqOmDqOOAkeWPr+afpeaJvuWwj+eoi+W6jydcbiAgICB9KSxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXG59KVxuXG5mb3IgKGxldCBrIGluIHR5cGVzKVxuICAgIGlmIChrIGluIHJ1bGVzVHlwZSlcbiAgICAgICAgZWwucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAoayA9PSB0eXBlU2hvdyA/IHR5cGVzW2tdLmJvbGQoKS5mb250Y29sb3IoJyMxMmI2NjgnKSA6IHR5cGVzW2tdKSArICcgJyArIChydWxlc1R5cGVba10ubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgICAgICAgICB1cmw6IGsgPT0gdHlwZVNob3cgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgaylcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXG4gICAgICAgICAgICB9LCBrKSxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcbiAgICAgICAgfSlcbmlmIChnZXRJdGVtKFwicmVhZF9wb2xpY3lcIikgIT09IFwiMVwiKSB7XG4gICAgZWwucHVzaCh7XG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSM4NzFmNzg+5Lul5LiL5pWw5o2u5p2l5rqQ5LqO572R57uc77yM5aaC5oKo5Zac5qyi77yM6K+35pSv5oyB5a6Y5pa5PC9mb250Pjwvc21hbGw+JyxcbiAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48Zm9udCBjb2xvcj0jZjIwYzAwPuacrOinhOWImeS7hemZkOWFjei0ueWtpuS5oOS6pOa1geS9v+eUqO+8jOivt+S6juWvvOWFpeWQjjI05bCP5pe25YaF5Yig6Zmk77yM5Lu75L2V57uE57uH5oiW5Liq5Lq65LiN5b6X5Lul5Lu75L2V5pa55byP5pa55rOV5Lyg5pKt5oiW5ZSu5Y2W5q2k6KeE5YiZ55qE5pW05L2T5oiW6YOo5YiG77yBPC9mb250Pjwvc21hbGw+JyxcbiAgICAgICAgdXJsOiAkKCcjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgICAgIHNldEl0ZW0oXCJyZWFkX3BvbGljeVwiLCBcIjFcIilcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/kvaDlt7LlkIzmhI/or6XljY/orq5cIlxuICAgICAgICB9KSxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xuICAgIH0pXG59XG5cbmlmIChnZXRJdGVtKFwiZGF0YVwiKSAhPT0gXCIxXCIpIHtcbiAgICB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcbiAgICBlbC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Izg3MWY3OD7ngrnlh7vojrflj5bmvKvnlLvmupA8L2ZvbnQ+PC9zbWFsbD4nLFxuICAgICAgICB1cmw6ICQoJyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVybCkgPT4ge1xuICAgICAgICAgICAgc2V0SXRlbShcImRhdGFcIiwgXCIxXCIpXG4gICAgICAgICAgICByZXF1aXJlRG93bmxvYWQoJ2h0dHBzOi8vYWdpdC5haS9EcmVhbU92Ty9KdU1hbi9yYXcvYnJhbmNoL21hc3Rlci9KTScsIHVybClcbiAgICAgICAgICAgIGJhY2soZmFsc2UpXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/mlbDmja7lt7Lojrflj5ZcIlxuICAgICAgICB9LCB1cmwpLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXG4gICAgfSlcbn1cbmlmICh0eXBlU2hvd1swXSAhPSAnQCcpIHJ1bGVzID0gcnVsZXNUeXBlW3R5cGVTaG93XVxubGV0IHsgcGFyYW1IYW5kbGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFLCB7fSlcbnJ1bGVzLmZvckVhY2goKHYpID0+IHtcbiAgICBsZXQgdXJsUGFyYW0gPSB2LnVybC5zcGxpdCgnOycpLFxuICAgICAgICBydWxlVG1wID0ge1xuICAgICAgICAgICAgdGl0bGU6IHYudGl0bGUsIHVybDogdXJsUGFyYW0uc2hpZnQoKSxcbiAgICAgICAgICAgIGNsYXNzX25hbWU6IHYuY2xhc3NfbmFtZSwgY2xhc3NfdXJsOiB2LmNsYXNzX3VybCxcbiAgICAgICAgICAgIGFyZWFfbmFtZTogdi5hcmVhX25hbWUsIGFyZWFfdXJsOiB2LmFyZWFfdXJsLFxuICAgICAgICAgICAgeWVhcl9uYW1lOiB2LnllYXJfbmFtZSwgeWVhcl91cmw6IHYueWVhcl91cmwsXG4gICAgICAgICAgICBzb3J0X25hbWU6IHYuc29ydF9uYW1lLCBzb3J0X3VybDogdi5zb3J0X3VybFxuICAgICAgICB9LFxuICAgICAgICBmeXBhZ2UgPSBydWxlVG1wLnVybC5pbmNsdWRlcygnZnlwYWdlJykgPyAnZnlwYWdlJyA6ICcxJyxcbiAgICAgICAgZG9tYWluID0gKC9eaHR0cHM/OlxcL1xcL1teLz8jXSsvaS5leGVjKHJ1bGVUbXAudXJsKSB8fCBbJ2hpa2VyOi8vZW1wdHknXSlbMF0sXG4gICAgICAgIGQgPSB7XG4gICAgICAgICAgICB0aXRsZTogdi50aXRsZSxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQnLFxuICAgICAgICAgICAgaW1nOiB2Lmljb24gfHwgJ2hpa2VyOi8vaW1hZ2VzL2ljb24xJyxcbiAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBkb21haW4gKyAnLyNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjIyMnICsgZnlwYWdlICtcbiAgICAgICAgICAgICAgICAgICAgJy5qczpsZXQgeyBydW5Db2RlLCBpbmRleFVybCB9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2Z1bmNUb29sc++8n++8n3J1bGU9JyArIFFJTkdfVElUTEUgKyAnXCIsICdcbiAgICAgICAgICAgICAgICAgICAgICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgTVlfUlVMRTogYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KHJ1bGVUbXApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFFJTkdfVElUTEU6IFFJTkdfVElUTEVcbiAgICAgICAgICAgICAgICAgICAgfSkgKyAnKe+8m++8m2luZGV4VXJsKGlucHV0KTsnICsgcGFyYW1IYW5kbGUodXJsUGFyYW0sIHYudWEpLFxuICAgICAgICAgICAgICAgIFJVTEU6IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeSh7IHRpdGxlOiB2LnRpdGxlIH0pKSxcbiAgICAgICAgICAgICAgICBpc0luZGV4OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBpZiAobmV3V2luZG93KSBPYmplY3QuYXNzaWduKGQuZXh0cmEsIHtcbiAgICAgICAgbmV3V2luZG93OiB0cnVlLFxuICAgICAgICB3aW5kb3dJZDogUUlOR19USVRMRSArICdfJyArIGQudGl0bGVcbiAgICB9KVxuICAgIGVsLnB1c2goZClcbn0pXG5zZXRSZXN1bHQoZWwpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/a2V5d29yZD0qKiIsImdyb3VwIjoi6LCq5bGF5LiW5LiK5LuZIiwic2VhcmNoRmluZCI6ImpzOlxuc2V0UmVzdWx0KFt7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6IGa5ryr4oCi6KeG55WM6IGa5pCcXCIsXG4gICAgdXJsOiBcImhpa2VyOi8vc2VhcmNoP3M9XCIgKyBnZXRQYXJhbShcImtleXdvcmRcIiksXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgUUlOR19USVRMRSA9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKSxcbiAgICAgICAgICAgICAgICB0eXBlU2hvdyA9IGdldE15VmFyKCd0eXBlU2hvdycsICdAJylcbiAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpXG4gICAgICAgICAgICBzZXRTZWFyY2hNb2RlKDEpXG4gICAgICAgICAgICBpZiAodHlwZVNob3dbMF0gPT0gJ0AnKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcktleSA9IHR5cGVTaG93LnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSkgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudGl0bGUuaW5jbHVkZXMoZmlsdGVyS2V5KSlcbiAgICAgICAgICAgIH0gZWxzZSBydWxlcyA9IHJ1bGVzLmZpbHRlcigodikgPT4gdi50eXBlID09IHR5cGVTaG93KVxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVzKVxuICAgICAgICB9KVxuICAgIH1cbn1dKVxuIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoicHV0TXlWYXIoJ215Q29sbGVjdGlvbicsIE1ZX1JVTEUudGl0bGUpXG5wdXRNeVZhcigncmVtb3RlVXJsJywgJ2hpa2VyOi8vZmlsZXMvL3J1bGVzL1R6L0pNJylcbmlmIChyZXF1ZXN0KCdoaWtlcjovL2hvbWVA5pys5Zyw6LWE5rqQ566h55CGJykgPT0gJ251bGwnKSB7XG4gICAgY29uZmlybSh7XG4gICAgICAgIHRpdGxlOiAn5L6d6LWW5qOA5rWLJyxcbiAgICAgICAgY29udGVudDogJ+ajgOa1i+WIsOe8uuWwkeaooeadv+S+nei1lizor7flr7zlhaUhJyxcbiAgICAgICAgY29uZmlybTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFwi5rW36ZiU6KeG55WM6aaW6aG16aKR6YGT6KeE5YiZ44CQ5pys5Zyw6LWE5rqQ566h55CG44CR77+laG9tZV9ydWxlX3VybO+/pWh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTM1NTlcIlxuICAgICAgICB9XG4gICAgfSlcbn1cbi8vIFxuLypcbiovIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQ2xhc3NUYWJcIixcInBhdGhcIjpcIkNsYXNzVGFiXCIsXCJydWxlXCI6XCJ2YXIge1xcbiAgICBRSU5HX1RJVExFLCB0aXRsZSwgdXJsLFxcbiAgICBjbGFzc19uYW1lLCBjbGFzc191cmwsXFxuICAgIGFyZWFfbmFtZSwgYXJlYV91cmwsXFxuICAgIHllYXJfbmFtZSwgeWVhcl91cmwsXFxuICAgIHNvcnRfbmFtZSwgc29ydF91cmxcXG59ID0gJC5pbXBvcnRQYXJhbVxcbmNvbnN0IENsYXNzVGFiID0gZnVuY3Rpb24oY2xhc3NBcnJheSwgcGFyYW1zKSB7XFxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGFyYW1zKVxcbiAgICB0aGlzLmFyciA9IGNsYXNzQXJyYXkubWFwKHYgPT4gdGhpcy5pbml0KHYpKVxcbiAgICB0aGlzLnNpZ24gPSAnJCcgKyBRSU5HX1RJVExFICsgJ18nICsgKHRoaXMubmFtZSB8fCAnJykgKyAnXydcXG4gICAgdGhpcy5jb2xvciA9IHRoaXMuY29sb3IgfHwgJyMxMmI2NjgnXFxuICAgIHRoaXMuYm91bmRhcnkgPSB0aGlzLmJvdW5kYXJ5IHx8ICdibGFua19ibG9jaydcXG59XFxuQ2xhc3NUYWIucHJvdG90eXBlID0ge1xcbiAgICBjb25zdHJ1Y3RvcjogQ2xhc3NUYWIsXFxuICAgIGxvYWQoZWwpIHtcXG4gICAgICAgIGxldCBmb2xkZWQgPSB0aGlzLmZvbGQgJiYgZ2V0VmFyKCckZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXG4gICAgICAgIGlmICh0aGlzLmFyci5sZW5ndGggPiAxICYmIHRoaXMuZm9sZCkgZWwucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgKGZvbGRlZCA/ICfilrYnIDogJ+KWvCcpLmZvbnRjb2xvcignIzA0OWVmZicpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgZm9sZGVkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcignJGZvbGRfJyArIHNpZ24sIGZvbGRlZCA/ICcnIDogJ1QnKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgZm9sZGVkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGFyciA9IGZvbGRlZCA/IFt0aGlzLmFyclswXV0gOiB0aGlzLmFyclxcbiAgICAgICAgYXJyLmZvckVhY2goKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgeyBpZCwgY2xhc3NfbmFtZSwgY2xhc3NfdXJsIH0gPSB2LFxcbiAgICAgICAgICAgIHNlbGVjdGVkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRDbGFzcyhpZCkpXFxuICAgICAgICAgICAgY2xhc3NfbmFtZS5mb3JFYWNoKChuYW1lLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBjbGFzc191cmxbaV0sXFxuICAgICAgICAgICAgICAgICAgICBub3cgPSBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IG5hbWUsIHVybDogdXJsIH0pXFxuICAgICAgICAgICAgICAgIGVsLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHNlbGVjdGVkID09IG5vdyA/ICfigJzigJzigJ3igJ0nICsgbmFtZS5mb250Y29sb3IodGhpcy5jb2xvcikuYm9sZCgpIDogbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogc2VsZWN0ZWQgPT0gbm93ID8gJ2hpa2VyOi8vZW1wdHknIDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgaWQsIG5vdykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihzaWduICsgaWQsIG5vdylcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGlkLCBub3cpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgZWwucHVzaCh7IGNvbF90eXBlOiB0aGlzLmJvdW5kYXJ5IH0pXFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICBpbml0KGNsYXNzT2JqZWN0KSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX25hbWUgPT0gJ3N0cmluZycpXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9IGNsYXNzT2JqZWN0LmNsYXNzX25hbWUuc3BsaXQoJyYnKVxcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc09iamVjdC5jbGFzc191cmwgPT0gJ3N0cmluZycpXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfdXJsID0gY2xhc3NPYmplY3QuY2xhc3NfdXJsLnNwbGl0KCcmJykubWFwKCh2KSA9PiB2LnRyaW0oKSlcXG4gICAgICAgIHJldHVybiBjbGFzc09iamVjdFxcbiAgICB9LFxcbiAgICBwdXNoKGNsYXNzT2JqZWN0KSB7XFxuICAgICAgICB0aGlzLmFyci5wdXNoKHRoaXMuaW5pdChjbGFzc09iamVjdCkpXFxuICAgIH0sXFxuICAgIGdldENsYXNzKGlkKSB7XFxuICAgICAgICBsZXQgZGVmYXVsdENsYXNzID0gdGhpcy5hcnIuZmluZChpdGVtID0+IGl0ZW0uaWQgPT0gaWQpXFxuICAgICAgICBkZWZhdWx0Q2xhc3MgPSBKU09OLnN0cmluZ2lmeShkZWZhdWx0Q2xhc3MgPyB7XFxuICAgICAgICAgICAgbmFtZTogZGVmYXVsdENsYXNzLmNsYXNzX25hbWVbMF0sXFxuICAgICAgICAgICAgdXJsOiBkZWZhdWx0Q2xhc3MuY2xhc3NfdXJsWzBdXFxuICAgICAgICB9IDogeyBuYW1lOiAgJ2Nhbm5vdCBmaW5kIGlkOiAnICsgaWQgKyAnIGluIGNsYXNzVGFiOiAnICsgdGhpcy5zaWduLCB1cmw6ICcnfSlcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGdldFZhcih0aGlzLnNpZ24gKyBpZCwgZGVmYXVsdENsYXNzKSlcXG4gICAgfSxcXG4gICAgc2V0VXJsKHVybCkge1xcbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXFxcJFxcXFx7KFtefV0qKVxcXFx9L2csIChfLCBpZCkgPT4gdGhpcy5nZXRDbGFzcyhpZCkudXJsKVxcbiAgICB9XFxufVxcbi8vIOeUn+aIkOWktOmDqOWIhuexu1xcbmxldCBmeUFsbCA9IHVybC5pbmNsdWRlcygnZnlBbGwnKSxcXG4gICAgdGFiSGVhZGVyID0gW11cXG5pZiAoY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcbiAgICBjbGFzc19uYW1lOiBjbGFzc19uYW1lLFxcbiAgICBjbGFzc191cmw6IGNsYXNzX3VybFxcbn0pXFxuaWYgKGFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxuICAgIGNsYXNzX25hbWU6IGFyZWFfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBhcmVhX3VybFxcbn0pXFxuaWYgKHllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxuICAgIGNsYXNzX25hbWU6IHllYXJfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiB5ZWFyX3VybFxcbn0pXFxuaWYgKHNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxuICAgIGNsYXNzX25hbWU6IHNvcnRfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBzb3J0X3VybFxcbn0pXFxuJC5leHBvcnRzID0ge1xcbiAgICBmeUFsbDogZnlBbGwsXFxuICAgIHRhYkhlYWRlcjogbmV3IENsYXNzVGFiKHRhYkhlYWRlciwgeyBuYW1lOiB0aXRsZSwgZm9sZDogcmVhZEZpbGUoJ3RhYkZvbGQnKSwgfSlcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJpY29uXzJfcm91bmRcIixcIm5hbWVcIjpcIuiuvue9rlwiLFwicGF0aFwiOlwiQ29uZmlnXCIsXCJydWxlXCI6XCJqczpcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICdjbGVhck15VmFyKFxcXCJzb3J0RmxhZ1xcXCIpO3JlZnJlc2hQYWdlKCknKVxcbnNldFBhZ2VUaXRsZSgn4pqZIOiBmua8q+iuvue9riDimpknKVxcbmNvbnN0IFFJTkdfVElUTEUgPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJyksXFxuICAgIHVybCA9IGdldE15VmFyKCdyZW1vdGVVcmwnKVxcbmxldCBkYXRhID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSwgdHJ1ZSksXFxuICAgIGVsID0gW3tcXG4gICAgICAgIHRpdGxlOiAnPGI+IOa4hemZpOe8k+WtmO+8jOeri+WNs+abtOaWsCA8c21hbGw+IO+8iOWfuuS6jui/nOeoi+S7k+W6k++8jOayoeS6i+WIq+eCue+8jOWPr+avj+aciOeCueS4gOasoeabtOaWsO+8iScsXFxuICAgICAgICB1cmw6ICQoXFxcIua4hemZpOe8k+WtmO+8jOeri+WNs+abtOaWsFxcXCIpLmNvbmZpcm0oKHVybCkgPT4ge1xcbiAgICAgICAgICAgIC8v6L+c56iL5L6d6LWW57Si5byV5paH5Lu25Luj55CG5Zyw5Z2A5YiX6KGoXFxuICAgICAgICAgICAgbGV0IHJlcXVpcmVsaXN0ID0gWydodHRwczovL3Jhdy5pcWlxLmlvLycsICdodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS8nLCAnaHR0cHM6Ly9naHByb3h5LmNvbS9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vJywgJ2h0dHBzOi8vY2RuLnN0YXRpY2FseS5jb20vZ2gvJywgJ2h0dHBzOi8vZ2l0aHViLmpldm9ucy52aXAvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tLyddXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1aXJlbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICB0cnkgeyAvL+i/nOeoi+S+nei1lue0ouW8lVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IHJlcXVlc3QocmVxdWlyZWxpc3RbaV0gKyAnRHJlYW1Pek8vSk0vbWFpbi9KTScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoU3RhdHVzQ29kZTogdHJ1ZVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnBhcnNlKHJlcykuc3RhdHVzQ29kZSA9PSAyMDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUV4aXN0KHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRmlsZSh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVEb3dubG9hZChyZXF1aXJlbGlzdFtpXSArICdEcmVhbU96Ty9KTS9tYWluL0pNJyx1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZURvd25sb2FkKHJlcXVpcmVsaXN0W2ldICsgJ0RyZWFtT3pPL0pNL21haW4vSk0nLHVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgYmFjayhmYWxzZSlcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5pu05pawJ1xcbiAgICAgICAgfSwgdXJsKSxcXG4gICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb240JyxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcbiAgICB9XSxcXG4gICAgdXBkYXRlSW50ZXJ2YWwgPSByZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScsXFxuICAgIG5ld1dpbmRvdyA9IHJlYWRGaWxlKCduZXdXaW5kb3cnKSxcXG4gICAgdGFiRm9sZCA9IHJlYWRGaWxlKCd0YWJGb2xkJyksXFxuICAgIGRpc2FibGVDdXN0b20gPSByZWFkRmlsZSgnZGlzYWJsZUN1c3RvbScpLFxcbiAgICBlZGl0TW9kZSA9IGRpc2FibGVDdXN0b20gPyAn5a+85YWl5rW36ZiUJyA6IGdldE15VmFyKCdlZGl0TW9kZScsICflkK/nlKgv56aB55SoJylcXG5cXG5lbC5wdXNoKHtcXG4gICAgdGl0bGU6ICcgIPCfkqEg5pu05paw6aKR546HOiAnICsgKHVwZGF0ZUludGVydmFsID09IDAgPyAn5omL5YqoJyA6IHVwZGF0ZUludGVydmFsICsgJ+WkqScpICsgJyAgJyxcXG4gICAgdXJsOiAkKHVwZGF0ZUludGVydmFsLCAn6L6T5YWl5pu05paw6Ze06ZqU77yI5aSp77yJ77yM5Li6MOWImeaJi+WKqOabtOaWsFxcXFxu5pys5Zyw5paH5Lu26ZO+5o6l5peg5pWIJykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgaW5wdXQgPSBwYXJzZUludChpbnB1dClcXG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4oaW5wdXQpKSBpbnB1dCA9IDFcXG4gICAgICAgIGVsc2UgaWYgKGlucHV0IDwgMSkgaW5wdXQgPSAwXFxuICAgICAgICBzYXZlRmlsZSgndXBkYXRlSW50ZXJ2YWwnLCBpbnB1dC50b1N0cmluZygpKVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICcgIPCflqUg54us56uL6aaW6aG1OiAnICsgKG5ld1dpbmRvdyA/ICfmmK8nIDogJ+WQpicpICsgJyAgJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChuZXdXaW5kb3cpID0+IHtcXG4gICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cgPyAnJyA6ICdUJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgbmV3V2luZG93KSxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICcgIPCfkqAg5YiG57G75oqY5Y+gOiAnICsgKHRhYkZvbGQgPyAn5pivJyA6ICflkKYnKSArICcgICcsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGFiRm9sZCkgPT4ge1xcbiAgICAgICAgc2F2ZUZpbGUoJ3RhYkZvbGQnLCB0YWJGb2xkID8gJycgOiAnVCcpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0sIHRhYkZvbGQpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+SvCDlpIfku73mgaLlpI0gICcsXFxuICAgIHVybDogJChbJ+Wkh+S7vScsICfmgaLlpI0nXSwgMSkuc2VsZWN0KChRSU5HX1RJVExFLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKSA9PiB7XFxuICAgICAgICBsZXQgdXJsID0gZ2V0TXlWYXIoJ3JlbW90ZVVybCcpXFxuICAgICAgICBpZiAoIXVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpICYmICF1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKVxcbiAgICAgICAgICAgIHVybCA9ICdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcydcXG4gICAgICAgIGVsc2UgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHVybCA9ICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgaWYgKGlucHV0ID09ICflpIfku70nKSByZXR1cm4gJCgnaGlrZXI6Ly9maWxlcy90bXAvJyArIFFJTkdfVElUTEUgKyAnX2JhY2t1cC5qc29uJywgJ+i+k+WFpeWkh+S7vei3r+W+hCcpXFxuICAgICAgICAgICAgLmlucHV0KCh1cmwsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gcmVxdWVzdCh1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRGF0YSA9IHJlYWRGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGlucHV0LCBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJbnRlcnZhbDogdXBkYXRlSW50ZXJ2YWwsXFxuICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3c6IG5ld1dpbmRvdyxcXG4gICAgICAgICAgICAgICAgICAgIHRhYkZvbGQ6IHRhYkZvbGQsXFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ3VzdG9tOiBkaXNhYmxlQ3VzdG9tLFxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRGF0YTogY3VzdG9tRGF0YSxcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzOiBydWxlc1xcbiAgICAgICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWkh+S7ve+8jOazqOaEj+iLpeS7k+W6k+S4uuWtkOmhtemdouWImeS4jeWkh+S7vSdcXG4gICAgICAgICAgICB9LCB1cmwsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pXFxuICAgICAgICBlbHNlIHJldHVybiAkKCdoaWtlcjovL2ZpbGVzL3RtcC8nICsgUUlOR19USVRMRSArICdfYmFja3VwLmpzb24nLCAn6L6T5YWl5aSH5Lu96Lev5b6EJykuaW5wdXQoKHVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCB7IHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20sIGN1c3RvbURhdGEsIHJ1bGVzIH0gPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpKVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCd1cGRhdGVJbnRlcnZhbCcsIHVwZGF0ZUludGVydmFsKVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3RhYkZvbGQnLCB0YWJGb2xkKVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCdkaXNhYmxlQ3VzdG9tJywgZGlzYWJsZUN1c3RvbSlcXG4gICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIGN1c3RvbURhdGEpXFxuICAgICAgICAgICAgaWYgKHJ1bGVzKSB3cml0ZUZpbGUodXJsLCBydWxlcylcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaBouWkje+8jOWmguaenOS4jeaDs+WQjOatpei/nOeoi+S7k+W6k++8jOWPr+S7peiuvue9ruabtOaWsOmikeeOh+S4uuaJi+WKqCdcXG4gICAgICAgIH0sIHVybClcXG4gICAgfSwgUUlOR19USVRMRSwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcIiM2NjY2NjZcXFwiPjxzbWFsbD7nibnliKvpuKPosKLvvIzlsI/nqIvluo/mj5DkvpvogIXvvJrwn4ia77iPXFxcXG4nXFxuICAgICAgICAvKmRhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB2LmF1dGhvciA/IHNlbGYuY29uY2F0KHYuYXV0aG9yLnNwbGl0KCcmJykpIDogc2VsZiwgW10pXFxuICAgICAgICAuZmlsdGVyKCh2LCBpLCBhcnIpID0+IHYgJiYgYXJyLmluZGV4T2YodikgPT0gaSkuam9pbign44CBJykqLyxcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KVxcbmVsLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuabtOaWsCblj43ppohcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvVXAjbm9SZWZyZXNoIyNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdmVyc2lvbjogTVlfUEFSQU1TLnZlcnNpb24gfHwgXFxcIuiOt+WPlueJiOacrOWksei0pe+8jOiHquihjOafpeeci1xcXCJcXG4gICAgfSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbn0pO1xcbmVsLnB1c2goeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ/Cfk50nLnNtYWxsKCkgKyAnJm5ic3Ag6IGa5ryr6Ieq5a6a5LmJICZuYnNwJy5ib2xkKCkuZm9udGNvbG9yKCcjNzU3NTc1JykgKyAoZGlzYWJsZUN1c3RvbSA/ICfinYwnIDogJ+KtlScpLnNtYWxsKCksXFxuICAgIHVybDogJChbKGRpc2FibGVDdXN0b20gPyAn5ZCv55SoJyA6ICfnpoHnlKgnKSArICflkIjpm4boh6rlrprkuYknLCAn5riF6Zmk6Ieq5a6a5LmJ5pWw5o2uJywgJ+e8lui+kUpTT04nXSwgMSkuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgIHN3aXRjaCAoaW5wdXQuc2xpY2UoMCwgMikpIHtcXG4gICAgICAgICAgICBjYXNlICfmuIXpmaQnOlxcbiAgICAgICAgICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICBjYXNlICflkK/nlKgnOlxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsICcnKVxcbiAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgIGNhc2UgJ+emgeeUqCc6XFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdkaXNhYmxlQ3VzdG9tJywgJ1QnKVxcbiAgICAgICAgICAgICAgICBpbnB1dCArPSAnXFxcXG7lsI/nqIvluo/lkK/nlKgv56aB55So44CB6YeN5paw5o6S5bqP562J5pON5L2c5Z2H5LiN5Lya5L2T546w5Zyo6aaW6aG15bCP56iL5bqP5YiX6KGo5LitJ1xcbiAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgIGNhc2UgJ+e8lui+kSc6XFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcXG4gICAgICAgICAgICAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9maWxlcy8nKSAmJiAhdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSlcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9ICdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcydcXG4gICAgICAgICAgICAgICAgcmV0dXJuICAnaGlrZXI6Ly9wYWdlL2ludGVyZmFjZSNub1JlZnJlc2gjI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPUpTT07nvJbovpHlmagmSnNvbj0nK2Jhc2U2NEVuY29kZSh1cmwpXFxuICAgICAgICB9XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7InICsgaW5wdXRcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9XFxufSk7LypcXG4oZGlzYWJsZUN1c3RvbSA/IFsn5a+85YWl5rW36ZiUJ10gOiBbJ+WQr+eUqC/npoHnlKgnLCAn6YeN5paw5o6S5bqPJywgJ+abtOaUueWbvuaghycsICflr7zlhaXmtbfpmJQnXSkuZm9yRWFjaCgodikgPT4ge1xcbiAgICBlbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB2ID09IGVkaXRNb2RlID8gJ+KAnOKAnOKAneKAnScgKyB2LmJvbGQoKS5mb250Y29sb3IoJyMxMmI2NjgnKSA6IHYsXFxuICAgICAgICB1cmw6IHYgPT0gZWRpdE1vZGUgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh2KSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ2VkaXRNb2RlJywgdilcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9LCB2KSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KTtcXG5pZiAoZWRpdE1vZGUgPT0gJ+WvvOWFpea1t+mYlCcpIGVsLnB1c2goe1xcbiAgICB0aXRsZTogJ+WFqOmDqOWvvOWFpScsXFxuICAgIHVybDogJ+a1t+mYlOinhueVjO+/pWhvbWVfcnVsZV91cmzvv6UnICsgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyB1cmwgOiAnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnKSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH1cXG59KTtcXG4oZGlzYWJsZUN1c3RvbSA/IGRhdGEgOiBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJykpLmZvckVhY2goKHYsIGkpID0+IHtcXG4gICAgbGV0IGQgPSB7IHRpdGxlOiB2LnRpdGxlLCBpbWc6IGRhdGFbaV0uaWNvbiB9XFxuICAgIHN3aXRjaCAoZWRpdE1vZGUpIHtcXG4gICAgICAgIGNhc2UgJ+WQr+eUqC/npoHnlKgnOlxcbiAgICAgICAgICAgIGQudGl0bGUgPSAodi52aXNpYmxlID8gJ/Cfn6IgICcgOiAn8J+UtCAgJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICBydWxlc1tpXS52aXNpYmxlID0gIXJ1bGVzW2ldLnZpc2libGVcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXG4gICAgICAgICAgICBsZXQgc29ydEZsYWcgPSBwYXJzZUludChnZXRNeVZhcignc29ydEZsYWcnLCAnLTEnKSlcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHNvcnRGbGFnID09IGkgPyAn8J+UgyAgJyA6ICcnKSArIGQudGl0bGVcXG4gICAgICAgICAgICBpZiAoc29ydEZsYWcgPT0gLTEpXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NvcnRGbGFnJywgaS50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcbiAgICAgICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMuc3BsaWNlKG5ld0luZGV4LCAwLCBydWxlcy5zcGxpY2Uob2xkSW5kZXgsIDEpWzBdKVxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignc29ydEZsYWcnLCAnLTEnKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIHNvcnRGbGFnLCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICfmm7TmlLnlm77moIcnOlxcbiAgICAgICAgICAgIGQudXJsID0gJCh2Lmljb24gfHwgJycsICfovpPlhaXmlrDlm77moIflnLDlnYDmiJbpopzoibLku6PnoIHvvJonKS5pbnB1dCgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXNbaV0uaWNvbiA9IGlucHV0XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlc1tpXS5pY29uXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+WvvOWFpea1t+mYlCc6XFxuICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpLCB0cnVlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgfVxcbiAgICBlbC5wdXNoKGQpXFxufSkqL1xcbihkaXNhYmxlQ3VzdG9tID8gWyflr7zlhaXmtbfpmJQnXSA6IFsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddKS5mb3JFYWNoKCh2KSA9PiB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignZWRpdE1vZGUnLCB2KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0sIHYpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pO1xcbmlmKGVkaXRNb2RlID09PSAn5a+85YWl5rW36ZiUJykge1xcbiAgICBlbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOifmkJzntKInLFxcbiAgICAgICAgZGVzYzon6L6T5YWl5bCP56iL5bqP5qCH6aKYfOWcsOWdgOi/m+ihjOaQnOe0oi4uLicsXFxuICAgICAgICB1cmw6JC50b1N0cmluZygoKT0+e1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6J2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcignaW1wb3J0U2VhcmNoS2V5JyxpbnB1dClcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0TXlWYXIoJ2ltcG9ydFNlYXJjaEtleScsJycpXFxuICAgICAgICB9LFxcbiAgICB9KTtcXG4gICAgZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WFqOmDqOWvvOWFpSjpnZ7mkJzntKLov4fmu6TlkI7nu5PmnpwpJyxcXG4gICAgICAgIHVybDogJ+a1t+mYlOinhueVjO+/pWhvbWVfcnVsZV91cmzvv6UnICsgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyB1cmwgOiAnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICBleHRyYToge2xpbmVWaXNpYmxlOiBmYWxzZX1cXG4gICAgfSk7XFxufVxcbnZhciBkYXRhcyA9IChkaXNhYmxlQ3VzdG9tID8gZGF0YSA6IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSk7XFxubGV0IHNrID0gZ2V0TXlWYXIoJ2ltcG9ydFNlYXJjaEtleScsJycpO1xcbmlmKGVkaXRNb2RlID09PSAn5a+85YWl5rW36ZiUJyYmc2spIHtcXG4gICAgZGF0YXMgPSBkYXRhcy5maWx0ZXIoaXQ9Pml0LnRpdGxlLmluY2x1ZGVzKHNrKXx8KGl0LnVybCYmaXQudXJsLmluY2x1ZGVzKHNrKSkpO1xcbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXQ9Pml0LnRpdGxlLmluY2x1ZGVzKHNrKXx8KGl0LnVybCYmaXQudXJsLmluY2x1ZGVzKHNrKSkpO1xcbn1cXG5kYXRhcy5mb3JFYWNoKCh2LCBpKSA9PiB7XFxuICAgIGxldCBkID0geyB0aXRsZTogdi50aXRsZSwgaW1nOiBkYXRhW2ldLmljb24gfVxcbiAgICBzd2l0Y2ggKGVkaXRNb2RlKSB7XFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHYudmlzaWJsZSA/ICfwn5+iICAnIDogJ/CflLQgICcpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgcnVsZXNbaV0udmlzaWJsZSA9ICFydWxlc1tpXS52aXNpYmxlXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+mHjeaWsOaOkuW6jyc6XFxuICAgICAgICAgICAgbGV0IHNvcnRGbGFnID0gcGFyc2VJbnQoZ2V0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJykpXFxuICAgICAgICAgICAgZC50aXRsZSA9IChzb3J0RmxhZyA9PSBpID8gJ/CflIMgICcgOiAnJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgaWYgKHNvcnRGbGFnID09IC0xKVxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzb3J0RmxhZycsIGkudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mAieaLqeimgeenu+WKqOWIsOeahOS9jee9ridcXG4gICAgICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob2xkSW5kZXgsIG5ld0luZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn5pu05pS55Zu+5qCHJzpcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLmljb24gPSBpbnB1dFxcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaV0uaWNvblxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICflr7zlhaXmtbfpmJQnOlxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKTtcXG4gICAgICAgICAgICBicmVha1xcbiAgICB9XFxuICAgIGVsLnB1c2goZClcXG59KVxcbnNldFJlc3VsdChlbClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumhtemdoui9veWFpVwiLFwicGF0aFwiOlwiZnJhbWVMb2FkXCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpXFxudmFyIG15Q29sbF9lbCA9IFtdXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvaGlqYWNrRW52P3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcblxcbmlmICghaXNJbmRleCkge1xcbiAgICBpZiAocGFnZVRpdGxlKSBzZXRQYWdlVGl0bGUocGFnZVRpdGxlKVxcbiAgICBzZXRMYXN0Q2hhcHRlclJ1bGUob3JpUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXG4gICAgTVlfUEFSQU1TID0gTVlfUlVMRS5wYXJhbXNcXG59IGVsc2UgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICB0YWJIZWFkZXIubG9hZChteUNvbGxfZWwpXFxuICAgIGlmIChSVUxFLnNlYXJjaF91cmwpIG15Q29sbF9lbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLov5nmmK/ogZrmvKvnmoTmkJzntKLlk6Z+flxcXCIsXFxuICAgICAgICB1cmw6ICdcXFwiaGlrZXI6Ly9zZWFyY2g/cz1cXFwiK2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpXFxuICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzLmZpbmQoKHYpID0+IHYudGl0bGUgPT0gdGl0bGUpXVxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocnVsZXMpXFxuICAgICAgICAgICAgfSwgUUlOR19USVRMRSwgUlVMRS50aXRsZSksXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcignc2VhcmNoS2V5JywgJycpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3NlYXJjaEtleScsaW5wdXQpXFxcIlxcbiAgICAgICAgfSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICB9KVxcbn1cXG4vLyDmraPmlofop6PmnpBcXG52YXIge1xcbiAgICBwYXJhbUhhbmRsZSxcXG4gICAgcnVuUHJlUnVsZSxcXG4gICAgZ2VuRXhVcmwsXFxuICAgIGhpamFja0xhenlSdWxlXFxufSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFKVxcbnJ1blByZVJ1bGUob3JpUlVMRS5wcmVSdWxlKVxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBsZXQgeyBoaWphY2tFbCB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZnVuY1Rvb2xzP3J1bGU9JyArIFFJTkdfVElUTEUpXFxuICAgIHNldFJlc3VsdCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbTAuZGF0YSkpIHBhcmFtMCA9IHBhcmFtMC5kYXRhXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxfZWwsIHBhcmFtMC5tYXAoaGlqYWNrRWwpKVxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbF9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXG4gICAgfVxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcblxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcbn0gZWxzZSB7XFxuICAgIGxldCB7IHJ1bkNvZGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFKSxcXG4gICAgICAgIFtfLCBmaW5kUnVsZSwgZGV0YWlsRmluZFJ1bGVdID0gTVlfUlVMRS5maW5kX3J1bGUubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pKD86PT0+KFtcXFxcc1xcXFxTXSopKT8kLylcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoZ2V0UmVzQ29kZSgpLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLCBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlSW5kZXggPSByZXMudXJsLmluZGV4T2YoJy5qczonKVxcbiAgICAgICAgICAgICAgICBpZiAocmVJbmRleCA+PSAwKSByZXMudXJsID0gcmVzLnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6JyArIGhpamFja0xhenlSdWxlICsgJzsnICsgcmVzLnVybC5zbGljZShyZUluZGV4ICsgNClcXG4gICAgICAgICAgICB9IGVsc2UgIGlmIChkZXRhaWxGaW5kUnVsZSkge1xcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGdlbkV4VXJsKHVybCksXFxuICAgICAgICAgICAgICAgICAgICBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmFzc2lnbihnZW5NeVJ1bGUoKSwgeyBkZXRhaWxfZmluZF9ydWxlOiBkZXRhaWxGaW5kUnVsZSB9KSkpLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBpc0luZGV4ICYmIHRpdGxlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZnJhbWVMb2FkP3J1bGU9JyArIFFJTkdfVElUTEVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSkge1xcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGdlbkV4VXJsKHVybCksXFxuICAgICAgICAgICAgICAgICAgICBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZ2VuTXlSdWxlKCkpKSxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiB0aXRsZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbXlDb2xsX2VsLnB1c2gocmVzKVxcbiAgICB9KVxcbiAgICBzZXRSZXN1bHQobXlDb2xsX2VsKVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaVsOaNrui9veWFpVwiLFwicGF0aFwiOlwiZGF0YUxvYWRcIixcInJ1bGVcIjpcImxldCBzaG93QWxsID0gJC5pbXBvcnRQYXJhbSxcXG4gICAgdXJsID0gZ2V0TXlWYXIoJ3JlbW90ZVVybCcpLFxcbiAgICBkYXRhID0gW11cXG5pZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xcbiAgICAvLyDlpoLmnpzkuLrmnKzlnLDmlofku7bliJnkuI3ov5vooYznvJPlrZhcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCBvcmlEYXRhID0gZmV0Y2godXJsKVxcbiAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpXFxuICAgICAgICAgICAgb3JpRGF0YSA9IEpTT04ucGFyc2Uob3JpRGF0YSkucnVsZVxcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2Uob3JpRGF0YSlcXG4gICAgfSBjYXRjaCAoZSkge31cXG59IGVsc2Uge1xcbiAgICAvLyDojrflj5bov5znqIvmlbDmja7vvIzmo4Dmn6Xpl7TpmpTpu5jorqTkuIDlpKlcXG4gICAgbGV0IGludGVydmFsID0gcGFyc2VJbnQocmVhZEZpbGUoJ3VwZGF0ZUludGVydmFsJykgfHwgJzEnKSxcXG4gICAgICAgIG9sZERhdGEgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnKSxcXG4gICAgICAgIHJlbW90ZURhdGEgPSBbXVxcbiAgICBpZiAoaW50ZXJ2YWwgPT0gMCkgaW50ZXJ2YWwgPSAtMVxcbiAgICB0cnkgeyByZW1vdGVEYXRhID0gSlNPTi5wYXJzZShmZXRjaENhY2hlKHVybCwgMjQgKiBpbnRlcnZhbCwgeyB0aW1lb3V0OiA1MDAwMCB9KSkgfSBjYXRjaCAoZSkge31cXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJlbW90ZURhdGEpKSByZW1vdGVEYXRhID0gW11cXG4gICAgaWYgKHJlbW90ZURhdGEubGVuZ3RoIDwgMykge1xcbiAgICAgICAgbG9nKCfmnKrojrflj5bliLDmlbDmja4nKVxcbiAgICAgICAgaWYgKG9sZERhdGEpIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnLCBvbGREYXRhKVxcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2Uob2xkRGF0YSB8fCAnW10nKVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbG9nKCflt7Lojrflj5bliLDmlbDmja4nKVxcbiAgICAgICAgZGF0YSA9IHJlbW90ZURhdGFcXG4gICAgfVxcbn1cXG5kYXRhID0gZGF0YS5maWx0ZXIoKHYpID0+IHYudGl0bGUgIT0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpICYmICEodi5hdXRob3IgfHwgJycpLmluY2x1ZGVzKCfogZrmvKvnlJ/miJDlmagnKSlcXG5pZiAocmVhZEZpbGUoJ2Rpc2FibGVDdXN0b20nKSkgJC5leHBvcnRzID0gZGF0YVxcbmVsc2UgeyAvLyDlhpnlhaXoh6rlrprkuYnmlbDmja5cXG4gICAgbGV0IGN1c3RvbURhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxuICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxuICAgIGN1c3RvbURhdGEgPSBjdXN0b21EYXRhLnJlZHVjZSgoc2VsZiwgdikgPT4ge1xcbiAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKHZ2KSA9PiB2LnRpdGxlID09IHZ2LnRpdGxlKVxcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXG4gICAgICAgICAgICBzZWxmLnB1c2godilcXG4gICAgICAgICAgICBsZXQgcnVsZSA9IGRhdGEuc3BsaWNlKGluZGV4LCAxKVswXVxcbiAgICAgICAgICAgIGlmIChzaG93QWxsIHx8IHYudmlzaWJsZSlcXG4gICAgICAgICAgICAgICAgcmV3cml0ZURhdGEucHVzaChPYmplY3QuYXNzaWduKHJ1bGUsIHYpKVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHNlbGZcXG4gICAgfSwgW10pXFxuICAgIGRhdGEuZm9yRWFjaCgodikgPT4gY3VzdG9tRGF0YS5wdXNoKHsgdGl0bGU6IHYudGl0bGUsIHZpc2libGU6IHRydWUgfSkpXFxuICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkoY3VzdG9tRGF0YSkpXFxuICAgICQuZXhwb3J0cyA9IHJld3JpdGVEYXRhLmNvbmNhdChkYXRhKVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumTvuaOpeWkhOeQhipcIixcInBhdGhcIjpcInVybFBhcnNlXCIsXCJydWxlXCI6XCIvLyDpppbpobXpk77mjqXmm7/mjaLliIbnsbtcXG5mdW5jdGlvbiBpbmRleFVybChwYXJhbSkge1xcbiAgICBmdW5jdGlvbiBydW5Db2RlKHJ1bGUpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXG4gICAgICAgICAgICByZXR1cm4gY29kZSA/IGV2YWwoY29kZSkgOiBydWxlXFxuICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiBydWxlIH1cXG4gICAgfVxcbiAgICBsZXQgeyBSVUxFLCBwYWdlTnVtLCBRSU5HX1RJVExFIH0gPSBKU09OLnBhcnNlKHBhcmFtLnNwbGl0KCcjIyMnKVsxXSlcXG4gICAgUlVMRSA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKFJVTEUpKVxcbiAgICBwYWdlTnVtID0gcGFyc2VJbnQocGFnZU51bSlcXG4gICAgbGV0IHVybCA9IFJVTEUudXJsXFxuXFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbiAgICB1cmwgPSB0YWJIZWFkZXIuc2V0VXJsKGZ5QWxsID8gdXJsLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybC5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JykpXFxuICAgIHVybCA9IHVybC5yZXBsYWNlKC9meXBhZ2UoPzpAKC0/XFxcXGQrKUApPyg/OlxcXFwqKFxcXFxkKylAKT8vZywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcbiAgICB1cmwgPSAvXihbXFxcXHNcXFxcU10qPykoPzpcXFxcW2ZpcnN0UGFnZT0oW1xcXFxzXFxcXFNdKj8pXFxcXF0pPyg/OihcXFxcLmpzOltcXFxcc1xcXFxTXSo/KSk/JC8uZXhlYyh1cmwpXFxuICAgIGlmIChwYWdlTnVtID09IDEgJiYgdXJsWzJdKSB1cmxbMV0gPSB1cmxbMl1cXG4gICAgaWYgKHVybFszXSAmJiAhdXJsWzFdLmluY2x1ZGVzKCcuanM6JykpIHVybFsxXSArPSB1cmxbM11cXG4gICAgcmV0dXJuIHJ1bkNvZGUodXJsWzFdKVxcbn1cXG5mdW5jdGlvbiBwYXJhbUhhbmRsZSh1cmxQYXJhbSwgdWEsIHVybFRtcCkge1xcbiAgICBsZXQgY2hhcnNldCwgcGFyYW1UbXBcXG4gICAgdHJ5IHsgLy8g6ZO+5o6l55qE57yW56CB44CBVUHlkoxSZWZlcmVy5bqU6K+l5piv6aaW5YWI57un5om/6aaW6aG16ZO+5o6lXFxuICAgICAgICBbLCAsIGNoYXJzZXQsIHBhcmFtVG1wXSA9IHVybFRtcC5zcGxpdCgnOycpXFxuICAgICAgICBwYXJhbVRtcCA9IHBhcmFtVG1wLm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpXFxuICAgIH0gY2F0Y2ggKGUpIHsgcGFyYW1UbXAgPSBbXSB9XFxuICAgIGxldCBVc2VyQWdlbnQgPSBwYXJhbVRtcC5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1VzZXItQWdlbnRAJykpLFxcbiAgICAgICAgUmVmZXJlciA9IHBhcmFtVG1wLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnUmVmZXJlckAnKSlcXG4gICAgdXJsUGFyYW1bMF0gPSB1cmxQYXJhbVswXSB8fCAnR0VUJ1xcbiAgICB1cmxQYXJhbVsxXSA9IHVybFBhcmFtWzFdIHx8IGNoYXJzZXQgfHwgJ1VURi04J1xcbiAgICB0cnkge1xcbiAgICAgICAgdXJsUGFyYW1bMl0gPSB1cmxQYXJhbVsyXS5tYXRjaCgvXnsoLiopfSQvKVsxXS5zcGxpdCgnJiYnKVxcbiAgICB9IGNhdGNoIChlKSB7IHVybFBhcmFtWzJdID0gW10gfVxcbiAgICAvLyDmt7vliqDlhajlsYBVQeWSjOS4iue6p1JlZmVyZXJcXG4gICAgaWYgKCF1cmxQYXJhbVsyXS5zb21lKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1VzZXItQWdlbnRAJykpKSB7XFxuICAgICAgICBpZiAoVXNlckFnZW50KSB1cmxQYXJhbVsyXS5wdXNoKFVzZXJBZ2VudClcXG4gICAgICAgIGVsc2UgaWYgKHVhID09ICdwYycpXFxuICAgICAgICAgICAgdXJsUGFyYW1bMl0ucHVzaCgnVXNlci1BZ2VudEAnICsgUENfVUEucmVwbGFjZSgvOy9nLCAn77yb77ybJykucmVwbGFjZSgvXFxcXD8vLCAn77yf77yfJykpXFxuICAgICAgICBlbHNlIGlmICh1YSA9PSAnbW9iaWxlJylcXG4gICAgICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKCdVc2VyLUFnZW50QCcgKyBNT0JJTEVfVUEucmVwbGFjZSgvOy9nLCAn77yb77ybJykucmVwbGFjZSgvXFxcXD8vLCAn77yf77yfJykpXFxuICAgIH1cXG4gICAgaWYgKFJlZmVyZXIgJiYgIXVybFBhcmFtWzJdLnNvbWUoKHYpID0+IHYuc3RhcnRzV2l0aCgnUmVmZXJlckAnKSkpXFxuICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKFJlZmVyZXIpXFxuICAgIHVybFBhcmFtWzJdID0gJ3snICsgdXJsUGFyYW1bMl0uam9pbignJiYnKSArICd9J1xcbiAgICByZXR1cm4gdXJsUGFyYW0uam9pbignOycpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnW+S4gF0qXCIsXCJwYXRoXCI6XCJlanRvb2xcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGNvdmVyKOagh+mimCwg5L2c6ICFLCDliIbnsbssIOeKtuaAgSwg56ug6IqCLCDmm7TmlrAsIOeugOS7iyzlsIHpnaLlm77niYcsdHJ1ZV91cmwsIGhhc0xpbmUpIHtcXHJcXG52YXIg5qCH6aKYLCDkvZzogIUsIOWIhuexuywg54q25oCBLCDnq6DoioIsIOabtOaWsCwg566A5LuLLOWwgemdouWbvueJhyx0cnVlX3VybCwgaGFzTGluZTtcXHJcXG5cXHR0cnkge1xcclxcblxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0dGl0bGU6ICfigJjigJjigJnigJk8c21hbGw+PGZvbnQgY29sb3I9XFxcIiNGQTcyOThcXFwiPicr5L2c6ICFLnNsaWNlKDAsMTUpK1xcXCImbmJzcDtcXFwiK+eKtuaAgSsnPC9mb250Pjwvc21hbGw+Jysn4oCY4oCY4oCZ4oCZPHNtYWxsPjxmb250IGNvbG9yPVxcXCIjQjE1QkZGXFxcIj4nK1xcXCJcXFxcblxcXCIr5YiG57G7Kyc8L2ZvbnQ+PC9zbWFsbD4nKyfigJjigJjigJnigJk8c21hbGw+PGZvbnQgY29sb3I9XFxcIiNGRjM1OUFcXFwiPicrXFxcIlxcXFxuXFxcIivnq6DoioIrXFxcIiZuYnNwO1xcXCIr5pu05pawKyc8L2ZvbnQ+PC9zbWFsbD4nLFxcclxcblxcdFxcdFxcdGRlc2M6J+KAmOKAmOKAmeKAmTxzbWFsbD4nICvnroDku4srICc8L3NtYWxsPicsXFxyXFxuXFx0XFx0XFx0cGljX3VybDogIOWwgemdouWbvueJhyxcXHJcXG5cXHRcXHRcXHR1cmw6IHRydWVfdXJsLFxcclxcblxcdFxcdFxcdGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXHJcXG5cXHRcXHR9KTtcXG5cXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdGNvbF90eXBlOiAnbGluZV9ibGFuaycsXFxyXFxuXFx0XFx0fSk7XFxuXFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRjb2xfdHlwZTogJ2xpbmUnLFxcclxcblxcdFxcdH0pO1xcclxcblxcdFxcdGlmIChoYXNMaW5lKSB7XFxyXFxuXFx0XFx0XFx0aXRlbS5leHRyYSA9IHtcXHJcXG5cXHRcXHRcXHRcXHRsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG5cXHRcXHRcXHR9XFxyXFxuXFx0XFx0fVxcclxcblxcdFxcdGQucHVzaChpdGVtKTtcXHJcXG5cXHR9IGNhdGNoIChlKSB7fVxcclxcbn1cXHJcXG5mdW5jdGlvbiBjaGFwdGVyKHRpdGxlLHBpY191cmwsY2hhcHRlckxpc3QsIGNoYXB0ZXJUaXRsZSwgY2hhcHRlclVybCwgZGVmYXVsdE9yZGVyLCBoYXNMaW5lLGRvd25sb2FkbGF6eSkge1xcclxcblxcdHZhciBsaXN0ID0gY2hhcHRlckxpc3Q7XFxyXFxuXFx0dmFyIG9yaWdpbmFsID0gW3tcXHJcXG5cXHRcXHR1cmw6IE1ZX1VSTCxcXHJcXG5cXHRcXHRvcmRlcjogZGVmYXVsdE9yZGVyXFxyXFxuXFx0fV07XFxyXFxuXFx0IWZpbGVFeGlzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnKSA/ICh3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJywgSlNPTi5zdHJpbmdpZnkob3JpZ2luYWwpKSkgOiAwO1xcclxcblxcdHZhciBsb2cgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpKTtcXHJcXG5cXHRmb3IgKHZhciBpIGluIGxvZykge1xcclxcblxcdFxcdGlmIChsb2dbaV0udXJsID09IE1ZX1VSTCkge1xcclxcblxcdFxcdFxcdHZhciBub3cgPSBpO1xcclxcblxcdFxcdFxcdHZhciBvcmRlciA9IGxvZ1tpXS5vcmRlcjtcXHJcXG5cXHRcXHRcXHRicmVhaztcXHJcXG5cXHRcXHR9IGVsc2Uge1xcclxcblxcdFxcdFxcdHZhciBub3cgPSAnJztcXHJcXG5cXHRcXHRcXHR2YXIgb3JkZXIgPSBkZWZhdWx0T3JkZXI7XFxyXFxuXFx0XFx0fVxcclxcblxcdH1cXHJcXG5cXHRsZXQgb3JkZXJJdGVtID0ge1xcclxcblxcdFxcdHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArICc8c3Ryb25nPjxmb250IGNvbG9yPVxcXCIjMDk4QUMxXFxcIj4nICsgJ+eroOiKguaOkuW6j+KHhScgKyAnPC9mb250Pjwvc3Ryb25nPicsXFxyXFxuXFx0XFx0dXJsOiBNWV9VUkwgKyBgQGxhenlSdWxlPS5qczp2YXIgbG9nID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnKSk7dmFyIG5vdz0nYCArIG5vdyArIGAnO2lmKG5vdyE9Jycpe3ZhciBub3c9cGFyc2VJbnQobm93KTt2YXIgb3JkZXI9bG9nW25vd10ub3JkZXJ9ZWxzZXt2YXIgbm93PXBhcnNlSW50KGxvZy5sZW5ndGgpO3ZhciBvcmRlcj1gICsgZGVmYXVsdE9yZGVyICsgYDtsb2cucHVzaCh7dXJsOmlucHV0LG9yZGVyOm9yZGVyfSk7fWlmKGxvZ1tub3ddLm9yZGVyKXtsb2dbbm93XS5vcmRlcj0wO31lbHNle2xvZ1tub3ddLm9yZGVyPTE7fTt3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJywgSlNPTi5zdHJpbmdpZnkobG9nKSk7cmVmcmVzaFBhZ2UoKTsnaGlrZXI6Ly9lbXB0eSdgLFxcclxcblxcdFxcdGNvbF90eXBlOiAndGV4dF8yJ1xcclxcblxcdH1cXHJcXG5cXHRpZiAoaGFzTGluZSkge1xcclxcblxcdFxcdG9yZGVySXRlbS50aXRsZSA9IFxcXCLigJzigJzigJ3igJ1cXFwiICsgJzxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIiMwOThBQzFcXFwiPicgKyAn6ZuG5pWw5o6S5bqP4oeFJyArICc8L2ZvbnQ+PC9zdHJvbmc+JztcXHJcXG5cXHRcXHRvcmRlckl0ZW0uY29sX3R5cGUgPSBcXFwidGV4dF8yXFxcIlxcclxcblxcdH1cXHJcXG5cXHRsZXQgY2hhcHRlckxpc3RzID0gbGlzdC5tYXAoKGl0ZW0pPT4oe1xcclxcblxcdFxcdHRpdGxlOiBwZGZoKGl0ZW0sXFxcImEmJlRleHRcXFwiKSxcXHJcXG5cXHRcXHR1cmw6IHBkKGl0ZW0sXFxcImEmJmhyZWZcXFwiKSxcXHJcXG5cXHR9KSk7XFxyXFxuZC5wdXNoKHtcXHJcXG5cXHR0aXRsZTogJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9IFxcXCIjMDk4QUMxXFxcIj4nICsgXFxcIuS4i+i9vea8q+eUu1xcXCIgKyAnPC9mcm9udD48L3N0cm9uZz4nLFxcclxcblxcdHVybDogXFxcImhpa2VyOi8vcGFnZS9kb3dubG9hZC52aWV3I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5IyNub1JlZnJlc2gjP3J1bGU95pys5Zyw6LWE5rqQ566h55CGXFxcIixcXHJcXG5cXHRjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxyXFxuXFx0ZXh0cmE6IHtcXHJcXG5cXHRcXHRjaGFwdGVyTGlzdDogY2hhcHRlckxpc3RzLFxcclxcblxcdFxcdGluZm86e1xcclxcblxcdFxcdFxcdGJvb2tOYW1lOiB0aXRsZSxcXHJcXG5cXHRcXHRcXHRydWxlTmFtZTogTVlfUlVMRS50aXRsZSxcXHJcXG5cXHRcXHRcXHRib29rVG9wUGljOiBwaWNfdXJsLFxcclxcblxcdFxcdFxcdHBhcnNlQ29kZTogZG93bmxvYWRsYXp5XFxyXFxuXFx0XFx0fSxcXHJcXG5cXHRcXHRkZWZhdWx0VmlldzpcXFwiMVxcXCJcXHJcXG5cXHR9XFxyXFxufSk7XFxyXFxuXFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHR0aXRsZTogJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9IFxcXCIjMDk4QUMxXFxcIj4nICsgXFxcIuacrOWcsOS5puaetlxcXCIgKyAnPC9mcm9udD48L3N0cm9uZz4nLFxcclxcblxcdFxcdHVybDogXFxcImhpa2VyOi8vcGFnZS9NYWluLnZpZXc/cnVsZT3mnKzlnLDotYTmupDnrqHnkIZcXFwiLFxcclxcblxcdFxcdGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXHJcXG5cXHR9KTsgIFxcclxcblxcdGQucHVzaChvcmRlckl0ZW0pO1xcclxcblxcdGQucHVzaCh7Y29sX3R5cGU6ICdsaW5lJ30pO1xcdFxcclxcblxcdHZhciBsaXN0ID0gb3JkZXIgPyBsaXN0IDogbGlzdC5yZXZlcnNlKCk7XFxuXFx0aWYoIWxpc3R8fGxpc3Q9PVxcXCJcXFwiKXtcXHJcXG5cXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdHRpdGxlOiAn5q2k5ryr55S75bey5LiL5p62ISEnLFxcclxcblxcdFxcdFxcdGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxyXFxuXFx0XFx0fSk7XFxyXFxuXFx0fVxcclxcblxcdGZvciAodmFyIGkgaW4gbGlzdCkge1xcclxcblxcdFxcdHRyeSB7XFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogcGRmaChsaXN0W2ldLCBjaGFwdGVyVGl0bGUpLFxcclxcblxcdFxcdFxcdFxcdHVybDogcGQobGlzdFtpXSwgY2hhcHRlclVybCkgKyBsYXp5LFxcclxcblxcdFxcdFxcdFxcdGNvbF90eXBlOiAndGV4dF8yJyxcXHJcXG5cXHRcXHRcXHR9KTtcXHJcXG5cXHRcXHR9Y2F0Y2ggKGUpIHt9XFxyXFxuXFx0fVxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBsaW5lKGxpbmVMaXN0LCBsaW5lVGl0bGVSdWxlLCB2YXJLZXkpIHtcXHJcXG5cXHRsZXQgbGlzdCA9IGxpbmVMaXN0XFxyXFxuXFx0dmFyS2V5ID0gdmFyS2V5ID09IG51bGwgPyAoTVlfUlVMRS51cmwgKyAnI2xpbmUtaW5kZXgnKTogdmFyS2V5O1xcclxcblxcdGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoa2V5TGlzdCkgPT4ge1xcclxcblxcdFxcdGZvciAobGV0IGkgaW4ga2V5TGlzdCkge2NsZWFyVmFyKGtleUxpc3RbaV0pfVxcclxcblxcdH0sIFt2YXJLZXksIE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnXSkpXFxyXFxuXFx0bGV0IGxpbmUwVGl0bGUgPSAnJztcXHJcXG5cXHR0cnkge1xcclxcblxcdFxcdGxpbmUwVGl0bGUgPSBwZGZoKGxpc3RbMF0sIGxpbmVUaXRsZVJ1bGUpLnJlcGxhY2UoXFxcIueroOiKguWIl+ihqO+8mlxcXCIsXFxcIlxcXCIpO1xcclxcblxcdH0gY2F0Y2ggKGUpIHt9XFxyXFxuXFx0bG9nKE1ZX1JVTEUudGl0bGUgKyBnZXRNeVZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpKSlcXHJcXG5cXHRmb3IgKGxldCBpIGluIGxpc3QpIHtcXHJcXG5cXHRcXHR0cnkge1xcclxcblxcdFxcdFxcdGxldCBsaW5lVGl0bGUgPSBwZGZoKGxpc3RbaV0sIGxpbmVUaXRsZVJ1bGUpLnJlcGxhY2UoXFxcIueroOiKguWIl+ihqO+8mlxcXCIsXFxcIlxcXCIpO1xcclxcblxcdFxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0XFx0dGl0bGU6IGdldE15VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJyksIGxpbmUwVGl0bGUpID09PSBsaW5lVGl0bGUgPyBcXFwi5YiH5o2iOuKAmOKAmFxcXCIgKyBsaW5lVGl0bGUrXFxcIlxcXCI6bGluZVRpdGxlK1xcXCLigJjigJg65YiH5o2iXFxcIixcXHJcXG5cXHRcXHRcXHRcXHR1cmw6ICQoKS5sYXp5UnVsZSgodmFyS2V5LCBsaW5lSW5kZXgsIGxpbmVUaXRsZSkgPT4ge1xcclxcblxcdFxcdFxcdFxcdFxcdHB1dE15VmFyKHZhcktleSwgbGluZUluZGV4LnRvU3RyaW5nKCkpO1xcclxcblxcdFxcdFxcdFxcdFxcdHB1dE15VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJyksIGxpbmVUaXRsZSk7XFxyXFxuXFx0XFx0XFx0XFx0XFx0bG9nKE1ZX1JVTEUudGl0bGUgKyBnZXRNeVZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpKSk7XFxyXFxuXFx0XFx0XFx0XFx0XFx0cmVmcmVzaFBhZ2UoKTtcXHJcXG5cXHRcXHRcXHRcXHRcXHRyZXR1cm4gXFxcInRvYXN0Oi8v5bey5YiH5o2i6IezXFxcIiArIGxpbmVUaXRsZTtcXHJcXG5cXHRcXHRcXHRcXHR9LCB2YXJLZXksIGksIGxpbmVUaXRsZSksXFxyXFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzInLFxcclxcblxcdFxcdFxcdH0pO1xcclxcblxcdFxcdH0gY2F0Y2ggKGUpIHt9XFxyXFxuXFx0fVxcclxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p1vkuoxdKlwiLFwicGF0aFwiOlwiY29taWNGdW5jdGlvbkZpbGUuanNcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGNvdmVyKGNvdmVyVGl0bGUsIGNvdmVyVGl0bGUxLCBjb3ZlclRpdGxlMiwgY292ZXJUaXRsZTMsIGNvdmVyRGVzYywgY292ZXJQaWMsIGNvdmVyVXJsLCBoYXNMaW5lKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBjb25zdCBDb2xvciA9IFxcXCIjMTlCODlEXFxcIjtcXG4gICAgICAgIHZhciBkZXNfZGVzYyA9IHBkZmgoaHRtbCwgY292ZXJEZXNjKS5yZXBsYWNlKCfnroDjgIDjgIDku4vvvJonLCAnJykucmVwbGFjZSgn5ryr55S7566A5LuL77yaJywgJycpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTw+PGZvbnQgY29sb3I9XFxcIiNGQTcyOThcXFwiPicgKyBwZGZoKGh0bWwsIGNvdmVyVGl0bGUpICsgJ1xcXFxuJyArICfigJjigJjigJnigJk8Pjxmb250IGNvbG9yPVxcXCIjNzM0MzM4XFxcIj4nICsgcGRmaChodG1sLCBjb3ZlclRpdGxlMSkgKyAnXFxcXG4nLFxcbiAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8Pjxmb250IGNvbG9yPVxcXCIjOTU0QTQ1XFxcIj4nICsgcGRmaChodG1sLCBjb3ZlclRpdGxlMikgKyAnXFxcXG4nICsgJ+KAmOKAmOKAmeKAmTw+PGZvbnQgY29sb3I9XFxcIiM5NTRBNDVcXFwiPicgKyBwZGZoKGh0bWwsIGNvdmVyVGl0bGUzKSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBwZChodG1sLCBjb3ZlclBpYyl8fGNvdmVyUGljLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vc2VhcmNoP3M9JytNWV9QQVJBTVMueXRpdGxlKycmcnVsZT3ogZrmvKvwn5SuJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICAvL3ZhciBqaiA9IGdldE15VmFyKFxcXCJqanNcXFwiLCBcXFwi5pS26LW3XFxcIik7XFxuICAgICAgICAvL3ZhciBqanVybCA9ICdoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpnZXRNeVZhcihcXFwiampzXFxcIikgPT0gXFxcIuaUtui1t1xcXCI/cHV0TXlWYXIoXFxcImpqc1xcXCIsXFxcIuWxleW8gFxcXCIpOnB1dE15VmFyKFxcXCJqanNcXFwiLFxcXCLmlLbotbdcXFwiKTtcXFwiaGlrZXI6Ly9lbXB0eVxcXCInO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+eugOS7iyA8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7lsZXlvIA+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgIGltZzogXFxcImh0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9tb3JlLzE5Ny5wbmdcXFwiLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoamppZCwgZGVjaWQsIGRlc19kZXNjKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcihcXFwiampzXFxcIiwgXFxcIuaUtui1t1xcXCIpID09IFxcXCLmlLbotbdcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiampzXFxcIiwgXFxcIuWxleW8gFxcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGpqaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn566A5LuLIDxzbWFsbD48c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMxOUI4OURcXFwiPuaUtui1tz48L3NwYW4+PC9zbWFsbD48L3NtYWxsPidcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMTQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOiAzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZGVjaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYyArICcuLi48L3NwYW4+J1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJqanNcXFwiLCBcXFwi5pS26LW3XFxcIik7XFxuXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogamppZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfnroDku4sgPHNtYWxsPjxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzE5Qjg5RFxcXCI+5bGV5byAPjwvc3Bhbj48L3NtYWxsPjwvc21hbGw+J1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVNwYWNpbmc6IDMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkZWNpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzgwODA4MFxcXCI+JyArIGRlc19kZXNjLnN1YnN0cigwLCAzMCkgKyAnLi4uPC9zcGFuPidcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB9LCBNWV9SVUxFICsgXFxcIl9qamlkXFxcIiwgTVlfUlVMRSArIFxcXCJfZGVjaWRcXFwiLCBkZXNfZGVzYyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFICsgXFxcIl9qamlkXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojODA4MDgwXFxcIj4nICsgZGVzX2Rlc2Muc3Vic3RyKDAsIDMwKSArICcuLi48L3NwYW4+JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgICAgICAgICBsaW5lU3BhY2luZzogMyxcXG4gICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUgKyBcXFwiX2RlY2lkXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9KVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9KVxcbiAgICB9IGNhdGNoIChlKSB7fVxcbn1cXG5cXG5mdW5jdGlvbiBkb3duKFRpdGxlLCBjaGFwdGVyUGljLCBsaXN0LCBjaGFwdGVyVGl0bGUsIGNoYXB0ZXJMaW5lLCBkb3dubG9hZGxhenkpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCBkb0xpc3QgPSBsaXN0Lm1hcCgoaXRlbSkgPT4gKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBjaGFwdGVyVGl0bGUpLFxcbiAgICAgICAgICAgIHVybDogcGQoaXRlbSwgY2hhcHRlckxpbmUpLFxcbiAgICAgICAgfSkpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzFhYWQxOVxcXCI+5LiL6L295ryr55S78J+UuTwvc3Bhbj48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZG93bmxvYWQudmlldyNub1JlY29yZEhpc3RvcnkjI25vUmVmcmVzaCM/cnVsZT3mnKzlnLDotYTmupDnrqHnkIZcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgY2hhcHRlckxpc3Q6IGRvTGlzdCxcXG4gICAgICAgICAgICAgICAgaW5mbzoge1xcbiAgICAgICAgICAgICAgICAgICAgYm9va05hbWU6IHBkZmgoaHRtbCwgVGl0bGUpLFxcbiAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWU6IE1ZX1JVTEUudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBib29rVG9wUGljOiBwZChodG1sLCBjaGFwdGVyUGljKSxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZTogZG93bmxvYWRsYXp5XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWaWV3OiBcXFwiMVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxufVxcblxcbmZ1bmN0aW9uIGNoYXB0ZXIoY2hhcHRlckxpc3QsIGNoYXB0ZXJUaXRsZSwgY2hhcHRlclVybCwgZGVmYXVsdE9yZGVyLCBoYXNMaW5lKSB7XFxuICAgIHZhciBsaXN0ID0gY2hhcHRlckxpc3Q7XFxuICAgIHZhciBvcmlnaW5hbCA9IFt7XFxuICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgIG9yZGVyOiBkZWZhdWx0T3JkZXJcXG4gICAgfV07XFxuICAgICFmaWxlRXhpc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJykgPyAod3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycsIEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsKSkpIDogMDtcXG4gICAgdmFyIGxvZyA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJykpO1xcbiAgICBmb3IgKHZhciBpIGluIGxvZykge1xcbiAgICAgICAgaWYgKGxvZ1tpXS51cmwgPT0gTVlfVVJMKSB7XFxuICAgICAgICAgICAgdmFyIG5vdyA9IGk7XFxuICAgICAgICAgICAgdmFyIG9yZGVyID0gbG9nW2ldLm9yZGVyO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgbm93ID0gJyc7XFxuICAgICAgICAgICAgdmFyIG9yZGVyID0gZGVmYXVsdE9yZGVyO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGxldCBvcmRlckl0ZW0gPSB7XFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyAnPGZvbnQgY29sb3I9XFxcIiNmMzczMzVcXFwiPicgKyAn56ug6IqC5o6S5bqP4oeFJyArICc8L2ZvbnQ+JyxcXG4gICAgICAgIHVybDogTVlfVVJMICsgYEBsYXp5UnVsZT0uanM6dmFyIGxvZyA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJykpO3ZhciBub3c9J2AgKyBub3cgKyBgJztpZihub3chPScnKXt2YXIgbm93PXBhcnNlSW50KG5vdyk7dmFyIG9yZGVyPWxvZ1tub3ddLm9yZGVyfWVsc2V7dmFyIG5vdz1wYXJzZUludChsb2cubGVuZ3RoKTt2YXIgb3JkZXI9YCArIGRlZmF1bHRPcmRlciArIGA7bG9nLnB1c2goe3VybDppbnB1dCxvcmRlcjpvcmRlcn0pO31pZihsb2dbbm93XS5vcmRlcil7bG9nW25vd10ub3JkZXI9MDt9ZWxzZXtsb2dbbm93XS5vcmRlcj0xO307d3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycsIEpTT04uc3RyaW5naWZ5KGxvZykpO3JlZnJlc2hQYWdlKCk7J2hpa2VyOi8vZW1wdHknYCxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfVxcbiAgICBpZiAoaGFzTGluZSkge1xcbiAgICAgICAgb3JkZXJJdGVtLnRpdGxlID0gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyAnPGZvbnQgY29sb3I9XFxcIiNmMzczMzVcXFwiPicgKyAn6ZuG5pWw5o6S5bqP4oeFJyArICc8L2ZvbnQ+JztcXG4gICAgICAgIG9yZGVySXRlbS5jb2xfdHlwZSA9IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICB9XFxuICAgIGQucHVzaChvcmRlckl0ZW0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICB9KTtcXG5cXG4gICAgdmFyIGxpc3QgPSBvcmRlciA/IGxpc3QgOiBsaXN0LnJldmVyc2UoKTtcXG4gICAgZm9yIChsZXQgaSBpbiBsaXN0KSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGxpc3RbaV0sIGNoYXB0ZXJUaXRsZSksXFxuICAgICAgICAgICAgICAgIHVybDogcGQobGlzdFtpXSwgY2hhcHRlclVybCkgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGxpbmUobGluZUxpc3QsIGxpbmVUaXRsZVJ1bGUsIHZhcktleSkge1xcbiAgICBsZXQgbGlzdCA9IGxpbmVMaXN0XFxuICAgIHZhcktleSA9IHZhcktleSA9PSBudWxsID8gKE1ZX1JVTEUudXJsICsgJyNsaW5lLWluZGV4JykgOiB2YXJLZXk7XFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoa2V5TGlzdCkgPT4ge1xcbiAgICAgICAgZm9yIChsZXQgaSBpbiBrZXlMaXN0KSB7XFxuICAgICAgICAgICAgY2xlYXJWYXIoa2V5TGlzdFtpXSlcXG4gICAgICAgIH1cXG5cXG4gICAgfSwgW3ZhcktleSwgTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZSddKSlcXG4gICAgbGV0IGxpbmUwVGl0bGUgPSAnJ1xcbiAgICB0cnkge1xcbiAgICAgICAgbGluZTBUaXRsZSA9IHBkZmgobGlzdFswXSwgbGluZVRpdGxlUnVsZSk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxvZyhNWV9SVUxFLnRpdGxlICsgZ2V0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSkpXFxuICAgIGZvciAobGV0IGkgaW4gbGlzdCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgbGluZVRpdGxlID0gcGRmaChsaXN0W2ldLCBsaW5lVGl0bGVSdWxlKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSwgbGluZTBUaXRsZSkgPT09IGxpbmVUaXRsZSA/IFxcXCLliIfmjaI64oCY4oCYXFxcIiArIGxpbmVUaXRsZSArIFxcXCJcXFwiIDogbGluZVRpdGxlICsgXFxcIuKAmOKAmDrliIfmjaJcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgodmFyS2V5LCBsaW5lSW5kZXgsIGxpbmVUaXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIodmFyS2V5LCBsaW5lSW5kZXgudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZyhNWV9SVUxFLnVybClcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJyksIGxpbmVUaXRsZSlcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhNWV9SVUxFLnRpdGxlICsgZ2V0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5YiH5o2i6IezXFxcIiArIGxpbmVUaXRsZVxcbiAgICAgICAgICAgICAgICB9LCB2YXJLZXksIGksIGxpbmVUaXRsZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBb5YyFXSpcIixcInBhdGhcIjpcImJ6anNcIixcInJ1bGVcIjpcInZhciDmvKvnlLvop6PmnpAgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgdmFyIGlkID0gdHJ1ZTtcXG4gICAgdmFyIGNvZGUgPSByZXF1ZXN0KGlucHV0KVxcbiAgICB2YXIgcGljcyA9IFtdO1xcbiAgICB2YXIgdG9fUmVwZWF0ID0gZmFsc2U7XFxuXFxuXFxuICAgIHdoaWxlIChpZCkge1xcbiAgICAgICAgcGRmYShjb2RlLCBcXFwiLmNoYXB0ZXItbWFpbiYmYW1wLWltZ1xcXCIpXFxuICAgICAgICAgICAgLmZvckVhY2goZGF0YSA9PiBwaWNzLnB1c2gocGRmaChkYXRhLCBcXFwiYW1wLWltZyYmc3JjXFxcIikgKyAnQFJlZmVyZXI9aHR0cHM6Ly93d3cud2VibW90YS5jb20vJykpO1xcbiAgICAgICAgdmFyIG5leHRfUGFnZSA9IHBkZmgoY29kZSwgXFxcIi5uZXh0X2NoYXB0ZXIsLTEmJkh0bWxcXFwiKVxcbiAgICAgICAgaWYgKG5leHRfUGFnZS5pbmNsdWRlcygn5LiL5LiA6aG1JykpIHtcXG4gICAgICAgICAgICBjb2RlID0gcmVxdWVzdChwZGZoKG5leHRfUGFnZSwgXFxcImEmJmhyZWZcXFwiKSlcXG4gICAgICAgICAgICB0b19SZXBlYXQgPSB0cnVlO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZCA9IGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8v5Y676Zmk6YeN5aSN5Zu+54mHXFxuICAgIGlmICh0b19SZXBlYXQpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGljcy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIHdoaWxlIChwaWNzLmluZGV4T2YocGljc1tpXSwgaSArIDEpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIHBpY3Muc3BsaWNlKHBpY3MuaW5kZXhPZihwaWNzW2ldLCBpICsgMSksIDEpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufSlcXG5cXG5sZXQgbGF6eSA9IGBAbGF6eVJ1bGU9LmpzOmAgKyDmvKvnlLvop6PmnpA7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIFb5LqMXSpcIixcInBhdGhcIjpcImR0ZmxcIixcInJ1bGVcIjpcImNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuaWYgKHR5cGVvZijmi7zmjqXliIbnsbspICE9ICd1bmRlZmluZWQnICYmIOaLvOaOpeWIhuexuyAhPSAnJykge1xcbiAgICB2YXIgY2F0ZWdvcmllcyA9IHBkZmEoaHRtbCwg5aSn57G75a6a5L2NKS5jb25jYXQocGRmYShodG1sLCDmi7zmjqXliIbnsbspKVxcbn0gZWxzZSB7XFxuICAgIHZhciBjYXRlZ29yaWVzID0gcGRmYShodG1sLCDlpKfnsbvlrprkvY0pXFxufVxcblxcbmxldCBpbml0X2NhdGUgPSBbXVxcblxcbmZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICBpbml0X2NhdGUucHVzaChcXFwiMFxcXCIpXFxufVxcblxcbmNvbnN0IGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBcXFwiMFxcXCIpXFxuY29uc3QgY2F0ZV90ZW1wX2pzb24gPSBnZXRNeVZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbmNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoY2F0ZV90ZW1wX2pzb24pXFxuXFxuaWYgKHBhcnNlSW50KHBhZ2UpID09PSAxKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZm9sZCA9PT0gJzEnID8gJ+KAnOKAnOKAneKAnTxiPicgKyAn4oioJy5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArICc8L2I+JyA6ICfigJzigJzigJ3igJ08Yj4nICsgJ+KIpycuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIikgKyAnPC9iPicsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoZm9sZCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUuZ3JvdXAsIGZvbGQgPT09ICcxJyA/ICcwJyA6ICcxJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0sIGZvbGQpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgfSlcXG4gICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgIGxldCBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jSk7XFxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcXG4gICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpXFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yo5o6S6ZmkKSAhPSAndW5kZWZpbmVkJyAmJiDmjpLpmaQgIT0gJycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdGl0bGUuZm9udGNvbG9yKOWIhuexu+minOiJsikgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChwZChpdGVtLCDliIbnsbvpk77mjqUpICsgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkobmV3X2NhdGUpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUudXJsLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZCA9PT0gJzEnKSB7XFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKVxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGQoaXRlbSwg5YiG57G76ZO+5o6lKSArICcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuY2F0ZV90ZW1wKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLnVybCwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWKqOaAgVvkuIBdKlwiLFwicGF0aFwiOlwiY2F0ZWdvcmllcy1oZWFkZXJcIixcInJ1bGVcIjpcIi8qKlxcbiAqIOacrOWcsOe9kemhteaPkuS7tumTvuaOpSBoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL2NhdGVnb3JpZXMtaGVhZGVyLmpzXFxuICog5a2Q6aG16Z2i6ZO+5o6lIGhpa2VyOi8vcGFnZS9jYXRlZ29yaWVzLWhlYWRlclxcbiAqIOmBk+mVv+S7k+W6k+mTvuaOpSBodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0yNzA1XFxuICog56CB5LqRIEdpdGVlIOmTvuaOpSBodHRwczovL2dpdGVlLmNvbS9yZWJvcm4wL0hpa2VyUnVsZXMvcmF3L21hc3Rlci9wbHVnaW5zL2NhdGVnb3JpZXMtaGVhZGVyLmpzXFxuICovXFxuLyoqXFxuICogT2JqZWN0LmFzc2lnbiDnlKjms5Xlj4LogIPpk77mjqVcXG4gKlxcbiAqIDEuaHR0cHM6Ly93d3cuZGFpbWFqaWFvbGl1LmNvbS9kYWltYS80NzEzOWE5ZTcxMDA0MDdcXG4gKiAyLmh0dHBzOi8vc2VnbWVudGZhdWx0LmNvbS9hLzExOTAwMDAwMTE3Nzg4NzVcXG4gKiAzLmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cXG4gKi9cXG4vLyDliKnnlKggU3ltYm9sIOWunueOsOengeacieWPmOmHj+WSjOengeacieaWueazle+8jOWklueVjOS4jeWPr+iuv+mXru+8iOWPguiAg+mTvuaOpTLvvIlcXG5jb25zdCBzeW1ib2xNYXAgPSB7XFxuICAgIC8vIGNoZWNrUGFyYW1zOiBTeW1ib2woJ2NoZWNrUGFyYW1zJyksXFxuICAgIG1MYXlvdXQ6IFN5bWJvbCgnbUxheW91dCcpLFxcbiAgICB0cnVlX3VybDogU3ltYm9sKCd0cnVlX3VybCcpLFxcbiAgICBtUGFnZTogU3ltYm9sKCdtUGFnZScpLFxcbiAgICBzcmM6IFN5bWJvbCgnc3JjJyksXFxuICAgIHJ1bGVPYmpMaXN0OiBTeW1ib2woJ3J1bGVPYmpMaXN0JyksXFxuICAgIG1Gb2xkOiBTeW1ib2woJ21Gb2xkJyksXFxuICAgIG1Gb2xkSW5uZXJFbmFibGU6IFN5bWJvbCgnbUZvbGRJbm5lckVuYWJsZScpLFxcbiAgICBtRm9sZEluZGV4OiBTeW1ib2woJ21Gb2xkSW5kZXgnKSxcXG4gICAgbUZvbGRMYXlvdXQ6IFN5bWJvbCgnbUZvbGRMYXlvdXQnKSxcXG4gICAgbUNvbG9yOiBTeW1ib2woJ21Db2xvcicpLFxcbiAgICBtVGFnOiBTeW1ib2woJ21UYWcnKSxcXG59XFxuXFxuZnVuY3Rpb24gQ2F0ZWdvcmllc0hlYWRlcihjb2xvcikge1xcbiAgICAvLyAndXNlIHN0cmljdCc7XFxuICAgIC8vIC4uLlxcbiAgICAvLyB0aGlzW3N5bWJvbE1hcC5saXN0UnVsZV0gPSBbXVxcbiAgICAvLyB0aGlzW3N5bWJvbE1hcC5zdWJMaXN0UnVsZV0gPSBbXVxcbiAgICB0aGlzW3N5bWJvbE1hcC5tQ29sb3JdID0gY29sb3IgfHwgXFxcIiNGQTcyOThcXFwiO1xcbiAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSBbXVxcbiAgICB0aGlzLlZBUk1BUCA9IHtcXG4gICAgICAgIENBVEVHT1JZOiBcXFwiaGVhZGVyLmNhdGVnb3J5XFxcIixcXG4gICAgICAgIFVSTDogXFxcImhlYWRlci51cmxcXFwiLFxcbiAgICAgICAgRk9MRDogXFxcImhlYWRlci5mb2xkXFxcIixcXG4gICAgfVxcbiAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0gPSB7XFxuICAgICAgICBpbmplY3RJbmRleDogMVxcbiAgICB9XFxuICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5kZXhdID0gMVxcbn1cXG5cXG5PYmplY3QuYXNzaWduKENhdGVnb3JpZXNIZWFkZXIucHJvdG90eXBlLCB7XFxuICAgIC8vIE92ZXJyaWRlIOaehOmAoOaWueazle+8jOebuOW9k+S6jiBmdW5jdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAoLi4uKSA9PiB7Li4ufe+8jG5ldyBmdW5jdGlvbigpIOeahOaXtuWAmeS8muiHquWKqOaJp+ihjFxcbiAgICBjb25zdHJ1Y3RvcjogQ2F0ZWdvcmllc0hlYWRlcixcXG4gICAgLy8g5a6a5LmJ56eB5pyJ5pa55rOVXFxuICAgIFZFUlNJT046IDIwMjExMTMwMTkwMCxcXG4gICAgY2hlY2tQYXJhbXMoKSB7XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKggbGF5b3V0KGQpIOS8oOWFpeW9k+WJjeeVjOmdolxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+36LCD55SoIHRydWVVcmwodXJsKSDkvKDlhaXlvZPliY3liIbnsbvnmoTpk77mjqVcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tUGFnZV0pIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+iwg+eUqCBwYWdlKG1QYWdlKSDkvKDlhaXlvZPliY3pobXmlbBcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKjnm7jlhbPmlrnms5XkvKDlhaXlrprkvY3op4TliJlcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tRm9sZF0pIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCdcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgbGF5b3V0KG1MYXlvdXQpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdID0gbUxheW91dFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgdHJ1ZVVybCh1cmwpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSA9IHVybFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgcGFnZShtUGFnZSkge1xcbiAgICAgICAgaWYgKHR5cGVvZiAobVBhZ2UpID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIG1QYWdlID0gcGFyc2VJbnQobVBhZ2UpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPSBtUGFnZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgaHRtbChtU3JjKSB7XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5zcmNdID0gbVNyY1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgbGlzdChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcImxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSBbe31dXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddID0gcnVsZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgc3ViTGlzdChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInN1Ykxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXSB8fCAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5saXN0UnVsZSAmJiAhdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfkuIDnuqfliIbnsbsnXSkpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCBsaXN0KHJ1bGUpIOaIliDkuIDnuqfliIbnsbsocnVsZSkg5a6a5L2N5LiA57qn5YiG57G7XFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5zdWJMaXN0UnVsZSA9IHJ1bGVcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5a2Q5YiG57G7J10gPSBydWxlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICB0aXRsZShydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInRpdGxlKHJ1bGUpIGFkZChydWxlT2JqKSDlj6rog73kuozpgInkuIDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0gfHwgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgJiYgIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5LiA57qn5YiG57G7J10pKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggbGlzdChydWxlKSDmiJYg5LiA57qn5YiG57G7KHJ1bGUpIOWumuS9jeS4gOe6p+WIhuexu1xcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0udGl0bGVSdWxlID0gcnVsZVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfliIbnsbvmoIfpopgnXSA9IHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS50aXRsZVJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHVybChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInVybChydWxlKSBhZGQocnVsZU9iaikg5Y+q6IO95LqM6YCJ5LiA77yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdIHx8ICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLmxpc3RSdWxlICYmICF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35YWI6LCD55SoIGxpc3QocnVsZSkg5oiWIOS4gOe6p+WIhuexuyhydWxlKSDlrprkvY3kuIDnuqfliIbnsbtcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnVybFJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+WIhuexu+mTvuaOpSddID0gdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnVybFJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDmmK/lkKblvIDlkK/mipjlj6Dlip/og71cXG4gICAgICpcXG4gICAgICogQHBhcmFtIGVuYWJsZWQgdHJ1ZSDooajnpLrlvIDlkK/vvIxmYWxzZSDooajnpLrnpoHnlKhcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxuICAgICAqL1xcbiAgICBmb2xkSW5uZXIoZW5hYmxlZCkge1xcbiAgICAgICAgaWYgKCEodHlwZW9mIChlbmFibGVkKSA9PT0gJ2Jvb2xlYW4nKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWlIHRydWUg5oiWIGZhbHNlIOihqOekuuW8gOWQr+aIluWFs+mXreaKmOWPoOWKn+iDve+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZElubmVyRW5hYmxlXSA9IGVuYWJsZWRcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDku47nrKwgaW5kZXgg6KGM5byA5aeL5oqY5Y+gXFxuICAgICAqXFxuICAgICAqIEBwYXJhbSBpbmRleCDlvIDlp4vmipjlj6DnmoTooYzmlbBcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxuICAgICAqL1xcbiAgICBmb2xkSW5kZXgoaW5kZXgpIHtcXG4gICAgICAgIGlmICghKHR5cGVvZiAoaW5kZXgpID09PSAnbnVtYmVyJykpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWni+aKmOWPoOihjOivt+S8oOWFpeaVsOWtl++8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5kZXggPCAxKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlp4vmipjlj6DooYzor7fkvKDlhaXlpKfkuo4gMCDnmoTmlbTmlbDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gPSBpbmRleCB8fCAxO1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOaKmOWPoOaMiemSrueahOeVjOmdolxcbiAgICAgKlxcbiAgICAgKiBAcGFyYW0gbGF5b3V0IOS4jiBkLnB1c2gg57uT5p6E5LiA6Ie077yMXFxuICAgICAqICAgICAgICDkvovvvJp7IHRpdGxlOlxcXCLmoIfpopgxXFxcIiwgdXJsOlxcXCJ4eHhcXFwiLCBjb2xfdHlwZTpcXFwic2Nyb2xsX2J1dHRvblxcXCIgfTtcXG4gICAgICogICAgICAgIOWPguaVsOmHh+eUqOWPr+mAieimhuebluaooeW8j++8jOS4jeWGmeeahOWPguaVsOWImeS9v+eUqOm7mOiupDtcXG4gICAgICogICAgICAgIOavlOWmguS8oOWFpSB7IGNvbF90eXBlOlxcXCJ0ZXh0XzFcXFwiIH3vvIzpgqPmnIDnu4jnu5PmnpzlsLHmmK8geyB0aXRsZTpcXFwi5qCH6aKYMVxcXCIsIHVybDpcXFwieHh4XFxcIiwgY29sX3R5cGU6XFxcInRleHRfMVxcXCIgfVxcbiAgICAgKiBAcmV0dXJucyB7Q2F0ZWdvcmllc0hlYWRlcn1cXG4gICAgICovXFxuICAgIGZvbGRMYXlvdXQobGF5b3V0KSB7XFxuICAgICAgICBpZiAodHlwZW9mIGxheW91dCA9PT0gJ29iamVjdCcpIHtcXG4gICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGxheW91dClcXG4gICAgICAgICAgICBsZXQgaW5qZWN0SW5kZXggPSBsYXlvdXQuaW5qZWN0SW5kZXggfHwgbGF5b3V0Wyfmipjlj6DmjInpkq7mj5LlhaXooYwnXVxcbiAgICAgICAgICAgIGlmIChsYXlvdXQudGl0bGUgfHwgbGF5b3V0LnVybCB8fCBsYXlvdXQuY29sX3R5cGUgfHwgaW5qZWN0SW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF1ba2V5XSA9IGxheW91dFtrZXldO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXmraPnoa7nmoTmipjlj6DnlYzpnaLlhYPntKDvvIFcXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBpbmplY3RJbmRleCDmipjlj6DmjInpkq7mj5LlhaXnrKwgaW5qZWN0SW5kZXgg6KGMXFxuICAgICAgICAgICAgaWYgKGluamVjdEluZGV4KSB7XFxuICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoaW5qZWN0SW5kZXgpID09PSAnbnVtYmVyJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM6K+35Lyg5YWl5pWw5a2X77yBXFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXggPCAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuaKmOWPoOaMiemSruaPkuWFpeihjOivt+S8oOWFpeWkp+S6jiAwIOeahOaVtOaVsO+8gVxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGluamVjdEluZGV4ID4gdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0pIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM5LiN5b6X5aSn5LqO5pi+56S65oqY5Y+g6KGM5pWw77yB6K+36LCD55SoIC5mb2xkSW5kZXgoaW5kZXgpIOaIliAu56ys5Yeg6KGM5byA5aeL5oqY5Y+gKGluZGV4KSDkvKDlhaXmraPnoa7nmoTmmL7npLrmipjlj6DooYzmlbBcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5pbmplY3RJbmRleCA9IGluamVjdEluZGV4IHx8IDE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeato+ehrueahOaKmOWPoOeVjOmdouWFg+e0oO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgLy8g5b2T5YmN5piv5ZCm5oqY5Y+gXFxuICAgIGZvbGQoaXNGb2xkKSB7XFxuICAgICAgICBpZiAodHlwZW9mIChpc0ZvbGQpID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIGlzRm9sZCA9IGlzRm9sZCA9PT0gJzEnXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXNGb2xkKSB7XFxuICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRdID0gJzEnO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCc7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBjb2xvcihtQ29sb3IpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gPSBtQ29sb3JcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHRhZyhtVGFnKSB7XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tVGFnXSA9IG1UYWdcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIGFkZChydWxlT2JqKSB7XFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkocnVsZU9iaikpXFxuICAgICAgICBpZiAocnVsZU9iai5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0uY29uY2F0KHJ1bGVPYmopXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5wdXNoKHJ1bGVPYmopXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgZXZhbEpTUnVsZShpdGVtLCBqc1J1bGUpIHtcXG4gICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgIHJ1bGUgPSBydWxlLnRyaW0oKVxcbiAgICAgICAgLy8gbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgbGV0IGlucHV0ID0gaXRlbVxcbiAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgZXZhbCgncmVzdWx0ID0gJyArIHJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcbiAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgIGV2YWwoJ3Jlc3VsdCA9ICcgKyAnKCgpID0+IHsnICsgcnVsZSArICd9KSgpJylcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiAocmVzdWx0IHx8ICcnKVxcbiAgICB9LFxcbiAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICBsZXQgdGl0bGUgPSAnJ1xcbiAgICAgICAgbGV0IHRpdGxlUnVsZSA9IGNhdGVnb3J5LnRpdGxlUnVsZSB8fCAnYSYmVGV4dCdcXG4gICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHNyYywgdGl0bGVSdWxlKVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICB9LFxcbiAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgbGV0IHVybCA9ICcnXFxuICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LnVybFJ1bGUgfHwgJ2EmJmhyZWYnXFxuICAgICAgICBpZiAodHlwZW9mIHVybFJ1bGUgPT09ICdvYmplY3QnKSB7XFxuICAgICAgICAgICAgbGV0IG1VcmxSdWxlID0gdXJsUnVsZS5ydWxlIHx8IHVybFJ1bGVbJ+ino+aekOinhOWImSddIHx8ICdhJiZocmVmJztcXG4gICAgICAgICAgICBpZiAobVVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIG1VcmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgaWYgKHVybFJ1bGUucGFyc2VPcHRpb24pIHtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodXJsUnVsZS5wYXJzZU9wdGlvbikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBhcnNlRG9tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBhcnNlRG9tRm9ySHRtbFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGRmaFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb21Gb3JIdG1sO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlRG9tO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbXFxcIuino+aekOaWueazlVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVybFJ1bGVbXFxcIuino+aekOaWueazlVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21Gb3JIdG1sXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZGZoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbUZvckh0bWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdXJsID0gcGFyc2Uoc3JjLCBtVXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLmRlYWxVcmwpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsUnVsZS5kZWFsVXJsKHVybClcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKHVybClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwYXJzZURvbShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgIH0sXFxuICAgIGJ1aWxkKCkge1xcbiAgICAgICAgLy8g5qOA5rWL5piv5ZCm5Lyg5YWl6ZyA6KaB55qE5Y+C5pWwXFxuICAgICAgICB0aGlzLmNoZWNrUGFyYW1zKClcXG4gICAgICAgIC8vIOavj+S4gOS4quWIhuexu+eahOWUr+S4gOagh+ivhlxcbiAgICAgICAgbGV0IG1UYWcgPSB0aGlzW3N5bWJvbE1hcC5tVGFnXSB8fCBcXFwiXFxcIlxcbiAgICAgICAgLy/nv7vpobUg6ZyA6KaB5qC55o2u5a6e6ZmF5pu/5o2iXFxuICAgICAgICBjb25zdCBodG1sID0gdGhpc1tzeW1ib2xNYXAuc3JjXSB8fCByZXF1ZXN0KHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSlcXG4gICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAvL+iOt+WPluWIl+ihqFxcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubWFwKHJ1bGVPYmogPT4ge1xcbiAgICAgICAgICAgIGxldCBsaXN0ID0gW11cXG4gICAgICAgICAgICBsZXQgbGlzdFJ1bGUgPSBydWxlT2JqLmxpc3RSdWxlIHx8IHJ1bGVPYmpbXFxcIuS4gOe6p+WIhuexu1xcXCJdXFxuICAgICAgICAgICAgaWYgKGxpc3RSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkobGlzdFJ1bGUpKVxcbiAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIGxpc3RSdWxlKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsIGxpc3RSdWxlKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBsb2cobGlzdClcXG4gICAgICAgICAgICBsaXN0Lm1hcChjYXRlZ29yeSA9PiB7XFxuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0OiBjYXRlZ29yeSxcXG4gICAgICAgICAgICAgICAgICAgIHN1Ykxpc3RSdWxlOiBydWxlT2JqLnN1Ykxpc3RSdWxlIHx8IHJ1bGVPYmpbXFxcIuWtkOWIhuexu1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVSdWxlOiBydWxlT2JqLnRpdGxlUnVsZSB8fCBydWxlT2JqW1xcXCLliIbnsbvmoIfpophcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIHVybFJ1bGU6IHJ1bGVPYmoudXJsUnVsZSB8fCBydWxlT2JqW1xcXCLliIbnsbvpk77mjqVcXFwiXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkoY2F0ZWdvcmllcykpXFxuXFxuICAgICAgICBsZXQgaW5pdF9jYXRlID0gW11cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICAgICAgICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIilcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGNvbnN0IGNhdGVfdGVtcF9qc29uID0gZ2V0TXlWYXIobVRhZyArIHRoaXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPT09IDEpIHtcXG5cXG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAvLyDmipjlj6AgVUlcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5uZXJFbmFibGVdICYmIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5pbmplY3RJbmRleCA9PT0gKGluZGV4KzEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZExheW91dCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLnRpdGxlIHx8ICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcxJyA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwMDBcXFwiPuKIqDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxYWFkMTlcXFwiPuKIpzwvc3Bhbj48L2I+JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0udXJsIHx8ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLm1UYWcgKyBwYXJhbXMuVkFSTUFQLkZPTEQsIGdldE15VmFyKHBhcmFtcy5tVGFnICsgcGFyYW1zLlZBUk1BUC5GT0xELCBwYXJhbXMuaXNGb2xkKSA9PT0gJzEnID8gJzAnIDogJzEnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UYWc6IG1UYWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRm9sZDogdGhpc1tzeW1ib2xNYXAubUZvbGRdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5jb2xfdHlwZSB8fCBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XS5wdXNoKGZvbGRMYXlvdXQpXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgLy/lhbfkvZPliJfooajkuIvnmoTliIbnsbtcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5zdWJMaXN0UnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gdGhpcy5ldmFsSlNSdWxlKGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwYXJzZURvbUZvckFycmF5KGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAodGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gfHwgMSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgY2F0ZWdvcnkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2V0VXJsKGl0ZW0sIGNhdGVnb3J5KVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9JyArIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gKyAnPicgKyB0aXRsZSArICcgPC9mb250PjwvYj4nIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy50YWcgKyBwYXJhbXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuaW5kZXggPT09IDAgPyBuZXdfY2F0ZSA6IHBhcmFtcy5jYXRlX3RlbXApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnRhZyArIHBhcmFtcy5WQVJNQVAuVVJMLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSTUFQOiB0aGlzLlZBUk1BUCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogbVRhZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpc1tzeW1ib2xNYXAubVBhZ2VdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRUaXRsZShpdGVtLCBjYXRlZ29yeSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgY2F0ZWdvcnkpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0nICsgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSArICc+JyArIHRpdGxlICsgJyA8L2ZvbnQ+PC9iPicgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5DQVRFR09SWSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5VUkwsIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBtVGFnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzW3N5bWJvbE1hcC5tUGFnZV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuICAgIOeVjOmdoihsYXlvdXQpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dChsYXlvdXQpXFxuICAgIH0sXFxuICAgIOWIhuexu+mTvuaOpSh0cnVlVXJsKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy50cnVlVXJsKHRydWVVcmwpO1xcbiAgICB9LFxcbiAgICDpobXnoIEocGFnZSkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZShwYWdlKTtcXG4gICAgfSxcXG4gICAg5rqQ56CBKGh0bWwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmh0bWwoaHRtbCk7XFxuICAgIH0sXFxuICAgIOWumuS9jeS4gOe6p+WIhuexuyhsaXN0KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5saXN0KGxpc3QpO1xcbiAgICB9LFxcbiAgICDlrprkvY3lrZDliIbnsbsoc3ViTGlzdCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViTGlzdChzdWJMaXN0KTtcXG4gICAgfSxcXG4gICAg5a6a5L2N5YiG57G75qCH6aKYKHRpdGxlKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy50aXRsZSh0aXRsZSk7XFxuICAgIH0sXFxuICAgIOWumuS9jeWIhuexu+mTvuaOpSh1cmwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnVybCh1cmwpO1xcbiAgICB9LFxcbiAgICDlvIDlkK/lhoXnva7mipjlj6Dlip/og70oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkSW5uZXIodHJ1ZSk7XFxuICAgIH0sXFxuICAgIOWFs+mXreWGhee9ruaKmOWPoOWKn+iDvSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmZvbGRJbm5lcihmYWxzZSk7XFxuICAgIH0sXFxuICAgIOesrOWHoOihjOW8gOWni+aKmOWPoChpbmRleCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZEluZGV4KGluZGV4KTtcXG4gICAgfSxcXG4gICAg5oqY5Y+g5oyJ6ZKu5qC35byPKGxheW91dCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZExheW91dChsYXlvdXQpXFxuICAgIH0sXFxuICAgIOaKmOWPoChmb2xkKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkKGZvbGQpO1xcbiAgICB9LFxcbiAgICDpgInkuK3nmoTliIbnsbvpopzoibIoY29sb3IpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yKGNvbG9yKTtcXG4gICAgfSxcXG4gICAg5ZSv5LiA5qCH6K+GKG1UYWcpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnRhZyhtVGFnKVxcbiAgICB9LFxcbiAgICDmt7vliqDliIbnsbvlrprkvY0ocnVsZU9iaikge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHJ1bGVPYmopO1xcbiAgICB9LFxcbiAgICDlvIDlp4vmiZPpgKDliIbnsbsoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZCgpO1xcbiAgICB9LFxcblxcbn0pXFxuJC5leHBvcnRzID0gbmV3IENhdGVnb3JpZXNIZWFkZXIoKTtcXG4kLmV4cG9ydHNcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumTvuaOpeWkhOeQhlvkuoxdKlwiLFwicGF0aFwiOlwidXJsLXByb2Nlc3NvclwiLFwicnVsZVwiOlwiLyoqXFxuICog5pys5Zyw572R6aG15o+S5Lu26ZO+5o6lIGhpa2VyOi8vZmlsZXMvcnVsZXMvanMvVXJsUHJvY2Vzc29yLmpzXFxuICog5a2Q6aG16Z2i6ZO+5o6lIGhpa2VyOi8vcGFnZS91cmwtcHJvY2Vzc29yXFxuICog6YGT6ZW/5LuT5bqT6ZO+5o6lIGh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI4NDlcXG4gKiDnoIHkupEgR2l0ZWUg6ZO+5o6lIGh0dHBzOi8vZ2l0ZWUuY29tL3JlYm9ybjAvSGlrZXJSdWxlcy9yYXcvbWFzdGVyL3BsdWdpbnMvVXJsUHJvY2Vzc29yLmpzXFxuICovXFxuZnVuY3Rpb24gVXJsUHJvY2Vzc29yKCkge1xcbiAgICB0aGlzLnBhcmFtcyA9IHt9XFxuICAgIHRoaXMucmVnZXhNYXAgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnKHZvZHR5cGV8dmlkZW90KVxcXFxcXFxcL1xcXFxcXFxcdysnLFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLy1cXFxcZCsuaHRtbC8sICctJyArIHRoaXMucGFyYW1zLnBhZ2UgKyAnLmh0bWwnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygodm9kdHlwZXx2aWRlb3QpXFxcXC9cXFxcdyspLmh0bWwvLCAnJDEtJyArIHRoaXMucGFyYW1zLnBhZ2UgKyAnLmh0bWwnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnXFxcXFxcXFwvP1tcXFxcXFxcXHdcXFxcXFxcXGRdKy0uKj8tLio/LS4qPy0uKj8tLio/LS4qPy0uKj8tXFxcXFxcXFxkKi0tLVxcXFxcXFxcZCouaHRtbCcsXFxuICAgICAgICAgICAgZXhlYzogKCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXGQqKC0tLS5odG1sKS8sIHRoaXMucGFyYW1zLnBhZ2UgKyAnJDEnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygtLS1cXFxcZCsuaHRtbCkvLCB0aGlzLnBhcmFtcy5wYWdlICsgJyQxJyk7IC8vIOaLvOaOpemhteeggVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnKChcXFxcXFxcXC92b2RcXFxcXFxcXC9zaG93KT8oXFxcXFxcXFwvYXJlYVxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPyhcXFxcXFxcXC9ieVxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPyhcXFxcXFxcXC9pZFxcXFxcXFxcL1xcXFxcXFxcZCspPyhcXFxcXFxcXC9sZXR0ZXJcXFxcXFxcXC9bXFxcXFxcXFx3XFxcXFxcXFxkJV0rKT8pKFxcXFxcXFxcL3BhZ2VcXFxcXFxcXC9cXFxcXFxcXGQrKT8oXFxcXFxcXFwveWVhclxcXFxcXFxcL1xcXFxcXFxcZCspP1xcXFxcXFxcLmh0bWwnLFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlZ0V4cCA9IC8oKFxcXFwvdm9kXFxcXC9zaG93KT8oXFxcXC9hcmVhXFxcXC9bXFxcXHdcXFxcZCVdKyk/KFxcXFwvYnlcXFxcL1tcXFxcd1xcXFxkJV0rKT8oXFxcXC9pZFxcXFwvXFxcXGQrKT8oXFxcXC9sZXR0ZXJcXFxcL1tcXFxcd1xcXFxkJV0rKT8pKFxcXFwvcGFnZVxcXFwvXFxcXGQrKT8oXFxcXC95ZWFyXFxcXC9cXFxcZCspP1xcXFwuaHRtbC9cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmVnRXhwLCAnJDEnICsgKFxcXCIvcGFnZS9cXFwiICsgdGhpcy5wYXJhbXMucGFnZSkgKyAnJDgnICsgXFxcIi5odG1sXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIF1cXG59XFxuXFxuT2JqZWN0LmFzc2lnbihVcmxQcm9jZXNzb3IucHJvdG90eXBlLCB7XFxuICAgIGNvbnN0cnVjdG9yOiBVcmxQcm9jZXNzb3IsXFxuICAgIGNoZWNrUGFyYW1zKCkge1xcbiAgICAgICAgaWYgKCF0aGlzLnBhcmFtcy51cmwpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCAuYmFzZVVybCh1cmwpIOS8oOWFpemTvuaOpei/m+ihjOWIneWni+WMliFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzLnBhcmFtcy5wYWdlKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggLnBhZ2UocGFnZSkg5Lyg5YWl6aG156CB6L+b6KGM5Yid5aeL5YyWIVxcXCIpXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGJhc2VVcmwodXJsKXtcXG4gICAgICAgIHRoaXMucGFyYW1zLnVybCA9IHVybFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgcGFnZShwYWdlKXtcXG4gICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSBwYWdlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBhZGRFeHRyYShyZWdFeHApIHtcXG4gICAgICAgIGlmIChyZWdFeHAuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XFxuICAgICAgICAgICAgdGhpcy5yZWdleE1hcCA9IHRoaXMucmVnZXhNYXAuY29uY2F0KHJlZ0V4cClcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdGhpcy5yZWdleE1hcC5wdXNoKHJlZ0V4cClcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBkZWJ1ZygpIHtcXG4gICAgICAgIHRoaXMucGFyYW1zLmRlYnVnID0gdHJ1ZVxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGV4ZWMoKSB7XFxuICAgICAgICB0aGlzLmNoZWNrUGFyYW1zKClcXG4gICAgICAgIGxldCB0cnVlX3VybCA9ICcnXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVnZXhNYXAubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgcmVnT2JqID0gdGhpcy5yZWdleE1hcFtpXTtcXG4gICAgICAgICAgICBsZXQgdXJsRXhwID0gcmVnT2JqLnJlZztcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybEV4cCA9PT0gJ3N0cmluZycpIHtcXG4gICAgICAgICAgICAgICAgdXJsRXhwID0gbmV3IFJlZ0V4cCh1cmxFeHApXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh1cmxFeHAudGVzdCh0aGlzLnBhcmFtcy51cmwpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtcy5kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHVybEV4cC50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRydWVfdXJsID0gcmVnT2JqLmV4ZWMoKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRydWVfdXJsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWVfdXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIOiOt+WPluWkhOeQhue7k+aenCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWMoKVxcbiAgICB9LFxcbiAgICDpk77mjqUodXJsKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsKHVybClcXG4gICAgfSxcXG4gICAg6aG156CBKHBhZ2UpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UocGFnZSlcXG4gICAgfSxcXG4gICAg5o+S5YWl5paw5aSE55CG6KeE5YiZKHJlZ0V4cCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRXh0cmEocmVnRXhwKVxcbiAgICB9LFxcbiAgICDosIPor5XmqKHlvI8oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5kZWJ1ZygpO1xcbiAgICB9XFxufSlcXG4kLmV4cG9ydHM9bmV3IFVybFByb2Nlc3NvcigpXFxuJC5leHBvcnRzXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqcqXCIsXCJwYXRoXCI6XCJ5anRvb2xcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGNvbnZlcnQxKHN0cikge1xcbiAgICBsZXQgYyA9IHN0ci5zcGxpdChcXFwiO1xcXCIpXFxuICAgIHJldHVybiB7XFxuICAgICAgICDliJfooag6IGNbMF0sXFxuICAgICAgICDmoIfpopg6IGNbMV0sXFxuICAgICAgICDlm77niYc6IGNbMl0sXFxuICAgICAgICDmj4/ov7A6IGNbM10sXFxuICAgICAgICDpk77mjqU6IGNbNF1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBtZXJnZShzb3VyY2UsIHRhcmdldCkge1xcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSlcXG4gICAgZm9yIChsZXQgaSBpbiBrZXlzKSB7XFxuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBzb3VyY2Vba2V5c1tpXV1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiDkuIDnuqcob2JqKSB7XFxuICAgIHZhciBkID0gW107XFxuICAgIGlmICgkLnR5cGUob2JqKSA9PSBcXFwic3RyaW5nXFxcIikge1xcbiAgICAgICAgb2JqID0gY29udmVydDEob2JqKVxcbiAgICB9XFxuICAgIGlmIChvYmou6KeE5YiZKSB7XFxuICAgICAgICBsZXQgYyA9IGNvbnZlcnQxKG9iai7op4TliJkpXFxuICAgICAgICBtZXJnZShjLCBvYmopXFxuICAgIH1cXG4gICAgbGV0IGFyciA9IHBkZmEoZ2V0UmVzQ29kZSgpLCBvYmou5YiX6KGoKTtcXG4gICAgICAgaWYgKG9iai7liJfooajlpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIGFyciA9IG9iai7pk77mjqXlpITnkIYoYXJyKVxcbiAgICAgICAgfVxcbiAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGxldCB1cmwgPSBwZChpdCwgb2JqLumTvuaOpSlcXG4gICAgICAgIGlmIChvYmou6ZO+5o6l5aSE55CGICE9IG51bGwpIHtcXG4gICAgICAgICAgICB1cmwgPSBvYmou6ZO+5o6l5aSE55CGKHVybClcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXQsIG9iai7moIfpopgpXFxuICAgICAgICBpZiAob2JqLuagh+mimOWkhOeQhiAhPSBudWxsKSB7XFxuICAgICAgICAgICAgdGl0bGUgPSBvYmou5qCH6aKY5aSE55CGKHRpdGxlKVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHBpYyA9IHBkKGl0LCBvYmou5Zu+54mHKVxcbiAgICAgICAgaWYgKG9iai7lm77niYflpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHBpYyA9IG9iai7lm77niYflpITnkIYocGljKVxcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogb2JqLuagh+mimCA/IHBkZmgoaXQsIG9iai7moIfpopgpIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJyNhdXRvQ2FjaGUjJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZGVzYzogb2JqLuaPj+i/sCA/IHBkZmgoaXQsIG9iai7mj4/ov7ApIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogcGljLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHl0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHlwaWM6IHBpYyxcXG4gICAgICAgICAgICAgICAgeXVybDogdXJsLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsJycpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG52YXIgdG9vbCA9IHtcXG4gICAg5LiA57qnOiDkuIDnuqdcXG59XFxuJC5leHBvcnRzID0gdG9vbFwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qnW+S6jF0qXCIsXCJwYXRoXCI6XCJ5aWppXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDkuIDnuqcoKSB7fTtcXHJcXG5PYmplY3QuYXNzaWduKOS4gOe6py5wcm90b3R5cGUsIHtcXHJcXG5cXHRjb25zdHJ1Y3Rvcjog5LiA57qnLFxcclxcblxcdHRlc3QoKSB7fSxcXHJcXG5cXHTojrflj5bmupDnoIEodXJsLCBoZWFkZXIpIHtyZXR1cm4gZmV0Y2godHJ1ZV91cmwsIHtoZWFkZXJzOiBoZWFkZXIgfHwgeydVc2VyLUFnZW50JzogUENfVUF9fSkgfSwvLyDpu5jorqTnu5/kuIDkvb/nlKhNT0JJTEVfVUFcXHJcXG5cXHTmkJzntKLmoYbmnrYocGFnZSkge1xcclxcblxcdFxcdGlmIChwYWdlID09ICcxJykge1xcbi8qXFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogXFxcIuaQnOe0ouacrOinhOWImVxcXCIsXFxyXFxuXFx0XFx0XFx0XFx0dXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnM9JytpbnB1dFxcXCIsXFxyXFxuXFx0XFx0XFx0XFx0ZGVzYzogXFxcIiBcXFwiLFxcclxcblxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiXFxyXFxuXFx0XFx0XFx0fSk7XFxuKi9cXHJcXG5cXHRcXHR9XFxyXFxuXFx0fSxcXHJcXG5cXHTojrflj5bpk77mjqUocGFnZSwgcmVnZXgpIHtcXHJcXG5cXHRcXHRsZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcignaGVhZGVyLnVybCcsIE1ZX1VSTCk7XFxyXFxuXFx0XFx0Ly9sZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gcmVxdWlyZUNhY2hlKGNvbmZpZy7pk77mjqXlpITnkIblt6Xlhbfkvp3otZYpXFxyXFxuXFx0XFx0Ly9sZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gcmVxdWlyZUNhY2hlKCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0yODQ5JylcXHJcXG5cXHRcXHQvL2xldCDpk77mjqXlpITnkIblt6XlhbcgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91cmwtcHJvY2Vzc29yJylcXHJcXG5cXHRcXHRsZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gcmVxdWlyZUNhY2hlKCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0yODQ5JylcXHJcXG5cXHRcXHR0cnVlX3VybCA9IOmTvuaOpeWkhOeQhuW3peWFt1xcclxcblxcdFxcdFxcdC7pk77mjqUodHJ1ZV91cmwpXFxyXFxuXFx0XFx0XFx0LumhteeggShwYWdlKVxcclxcblxcdFxcdFxcdC7mj5LlhaXmlrDlpITnkIbop4TliJkocmVnZXggfHwgW10pXFxyXFxuXFx0XFx0XFx0LuiOt+WPluWkhOeQhue7k+aenCgpO1xcclxcblxcdFxcdHJldHVybiB0cnVlX3VybDtcXHJcXG5cXHR9LFxcclxcblxcdOaJk+mAoOWIhuexuyhydWxlTGlzdCkge1xcclxcblxcdFxcdC8vICBsZXQgaHRtbENhdGVnb3JpZXMgPSByZXF1aXJlQ2FjaGUoY29uZmlnLuWKqOaAgeWIhuexu+S+nei1lilcXHJcXG5cXHRcXHQvL2xldCBodG1sQ2F0ZWdvcmllcyA9IHJlcXVpcmVDYWNoZSgnaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9MjcwNScpXFxyXFxuXFx0XFx0aWYgKCFydWxlTGlzdCkge1xcclxcblxcdFxcdFxcdGxldCDliIbnsbvlrprkvY0gPSBbe1xcclxcblxcdFxcdFxcdFxcdFxcdOS4gOe6p+WIhuexuzog5LiA57qn5a6a5L2NQSxcXHJcXG5cXHRcXHRcXHRcXHRcXHTlrZDliIbnsbs6IOe7n+S4gOWumuS9jUIgfHwg5LiA57qn5a6a5L2NQixcXHJcXG5cXHRcXHRcXHRcXHRcXHTliIbnsbvpk77mjqU6IHvkuozmrKHlpITnkIYodXJsKSB7dHJ5IHtyZXR1cm4g5LiA57qn5aSE55CGQyh1cmwpfSBjYXRjaCAoZSkge3JldHVybiB1cmx9fX1cXHJcXG5cXHRcXHRcXHR9XVxcclxcblxcdFxcdFxcdGlmICjkuoznuqflrprkvY1BICYmICjnu5/kuIDlrprkvY1CIHx8IOS6jOe6p+WumuS9jUIpKSB7XFxyXFxuXFx0XFx0XFx0XFx05YiG57G75a6a5L2NLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdFxcdFxcdOS4gOe6p+WIhuexuzog5LqM57qn5a6a5L2NQSxcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTlrZDliIbnsbs6IOe7n+S4gOWumuS9jUIgfHwg5LqM57qn5a6a5L2NQixcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTliIbnsbvpk77mjqU6IHvkuozmrKHlpITnkIYodXJsKSB7dHJ5IHtyZXR1cm4g5LqM57qn5aSE55CGQyh1cmwpfSBjYXRjaCAoZSkge3JldHVybiB1cmx9fX1cXHJcXG5cXHRcXHRcXHRcXHR9KVxcclxcblxcdFxcdFxcdH1cXHJcXG5cXHRcXHRcXHRpZiAo5LiJ57qn5a6a5L2NQSAmJiAo57uf5LiA5a6a5L2NQiB8fCDkuInnuqflrprkvY1CKSkge1xcclxcblxcdFxcdFxcdFxcdOWIhuexu+WumuS9jS5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTkuIDnuqfliIbnsbs6IOS4iee6p+WumuS9jUEsXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05a2Q5YiG57G7OiDnu5/kuIDlrprkvY1CIHx8IOS4iee6p+WumuS9jUIsXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05YiG57G76ZO+5o6lOiB75LqM5qyh5aSE55CGKHVybCkge3RyeSB7cmV0dXJuIOS4iee6p+WkhOeQhkModXJsKX0gY2F0Y2ggKGUpIHtyZXR1cm4gdXJsfX19XFxyXFxuXFx0XFx0XFx0XFx0fSlcXHJcXG5cXHRcXHRcXHR9XFxyXFxuXFx0XFx0XFx0aWYgKOWbm+e6p+WumuS9jUEgJiYgKOe7n+S4gOWumuS9jUIgfHwg5Zub57qn5a6a5L2NQikpIHtcXHJcXG5cXHRcXHRcXHRcXHTliIbnsbvlrprkvY0ucHVzaCh7XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05LiA57qn5YiG57G7OiDlm5vnuqflrprkvY1BLFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdOWtkOWIhuexuzog57uf5LiA5a6a5L2NQiB8fCDlm5vnuqflrprkvY1CLFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdOWIhuexu+mTvuaOpToge+S6jOasoeWkhOeQhih1cmwpIHt0cnkge3JldHVybiDlm5vnuqflpITnkIZDKHVybCl9IGNhdGNoIChlKSB7cmV0dXJuIHVybH19fVxcclxcblxcdFxcdFxcdFxcdH0pXFxyXFxuXFx0XFx0XFx0fVxcclxcblxcdFxcdFxcdHJ1bGVMaXN0ID0g5YiG57G75a6a5L2NO1xcclxcblxcdFxcdH1cXHJcXG5cXHRcXHQvLyAnMCcg5Li66buY6K6k5LiN5oqY5Y+g77yMJzEnIOS4uum7mOiupOaKmOWPoFxcclxcblxcdFxcdGNvbnN0IOW9k+WJjeaKmOWPoOeKtuaAgSA9IGdldE15VmFyKCdoZWFkZXIuZm9sZCcsICcwJylcXHJcXG5cXHRcXHQvLyDlvJXlhaXliqjmgIHliIbnsbvkvp3otZZcXHJcXG5cXHRcXHRsZXQgaHRtbENhdGVnb3JpZXMgPSByZXF1aXJlQ2FjaGUoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI3MDUnKVxcclxcblxcdFxcdHZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcclxcblxcdFxcdFxcdHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcXHJcXG5cXHRcXHR9IC8vIOmaj+acuumAieS4reeahOWIhuexu+minOiJslxcclxcblxcdFxcdHZhciBjb2xvdXI7XFxyXFxuXFx0XFx0aWYgKOWIhuexu+minOiJsiAhPT0gJycpIHtcXHJcXG5cXHRcXHRcXHRjb2xvdXIgPSDliIbnsbvpopzoibJcXHJcXG5cXHRcXHR9IGVsc2Uge1xcclxcblxcdFxcdFxcdGNvbG91ciA9IGdldFJhbmdlQ29sb3JzKClcXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0aHRtbENhdGVnb3JpZXMu55WM6Z2iKGQpXFxyXFxuXFx0XFx0XFx0Ly8u5YiG57G76ZO+5o6lKHRydWVfdXJsKVxcclxcblxcdFxcdFxcdC7mupDnoIEoaHRtbClcXHJcXG5cXHRcXHRcXHQu6aG156CBKHBhZ2UpXFxyXFxuXFx0XFx0XFx0Lua3u+WKoOWIhuexu+WumuS9jShydWxlTGlzdClcXHJcXG5cXHRcXHRcXHQu5byA5ZCv5YaF572u5oqY5Y+g5Yqf6IO9KCkgLy8g5b+F6aG7XFxyXFxuXFx0XFx0XFx0LuaKmOWPoCjlvZPliY3mipjlj6DnirbmgIEpIC8vIOW/hemhu1xcclxcblxcdFxcdFxcdC7mipjlj6DmjInpkq7moLflvI8oe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiDlvZPliY3mipjlj6DnirbmgIEgPT0gXFxcIjFcXFwiID8gXFxcIuKAnOKAnOKAneKAnTxiaWc+PGI+PGZvbnQgY29sb3I9JyM1OTU5QUInPlxcXCIgKyDliqjmgIHnvKnlsI8gKyBcXFwiPC9mb250PjwvYj48L2JpZz5cXFwiIDogXFxcIuKAnOKAnOKAneKAnTxiaWc+PGI+PGZvbnQgY29sb3I9JyNGNzVENTknPlxcXCIgKyDliqjmgIHmianlsZUgKyBcXFwiPC9mb250PjwvYj48L2JpZz5cXFwiXFxyXFxuXFx0XFx0XFx0fSkgLy8g5Y+v6YCJXFxyXFxuXFx0XFx0XFx0Ly8gLuesrOWHoOihjOW8gOWni+aKmOWPoCgyKSAvLyDlj6/pgIlcXHJcXG5cXHRcXHRcXHQvLyAu5oqY5Y+g5oyJ6ZKu5qC35byPKHsg5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGMOiAyIH0pICAvLyDlj6/pgInvvIzkvYblv4XpobvlhYjosIPnlKggLuesrOWHoOihjOW8gOWni+aKmOWPoChpbmRleCnvvIznhLblkI7lho3kvKDlhaUgeyDmipjlj6DmjInpkq7mj5LlhaXooYw6IGluZGV4IH1cXHJcXG5cXHRcXHRcXHQu6YCJ5Lit55qE5YiG57G76aKc6ImyKGNvbG91cilcXHJcXG5cXHRcXHRcXHQu5byA5aeL5omT6YCg5YiG57G7KCk7XFxyXFxuXFx0fSxcXHJcXG5cXHJcXG5cXHTnlJ/miJDniYfljZUoZCxodG1sKSB7XFxyXFxuXFxyXFxuXFx0XFx0dmFyIOWIl+ihqFxcclxcblxcdFxcdHZhciDmoIfpophcXHJcXG5cXHRcXHR2YXIg5o+P6L+wXFxyXFxuXFx0XFx0dmFyIOWbvueJh1xcclxcblxcdFxcdHZhciDpk77mjqVcXHJcXG5cXHJcXG5cXHRcXHRpZiAo5qGG5p6257G75Z6LID09PSAnbXl1aS12b2RsaXN0Jykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcubXl1aS12b2RsaXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2g0JiZUZXh0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnLnBpYy10YWd8fC5waWMtdGV4dCYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdFxcdC8vbG9nKCfmoYbmnrbnsbvlnovCt215dWktdm9kbGlzdCcpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICcjZGF0YV9saXN0Jykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcjZGF0YV9saXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2EmJnRpdGxlJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnZW0mJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICdpbWcmJmRhdGEtc3JjbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdFxcdC8vbG9nKCfmoYbmnrbnsbvlnovCt2RhdGFfbGlzdCcpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdmZWQtbGlzdC10aXRsZScpIHtcXHJcXG5cXHRcXHRcXHTliJfooaggPSAnLmZlZC1saXN0LWluZm8mJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnLmZlZC1saXN0LXRpdGxlJiZUZXh0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnLmZlZC10ZXh0LWNlbnRlciYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJ2EmJmRhdGEtb3JpZ2luYWwnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHRcXHQvL2xvZygn5qGG5p6257G75Z6LwrcuZmVkLWxpc3QtaW5mbycpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdpdGVtJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiYuaXRlbSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2ltZyYmYWx0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAncCYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJ2ltZyYmc3JjbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdH0gZWxzZSBpZiAo5qGG5p6257G75Z6LID09PSAnbW9kdWxlLWl0ZW1zJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcubW9kdWxlLWl0ZW1zJiYubW9kdWxlLWl0ZW0nO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICdhJiZ0aXRsZSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJy5tb2R1bGUtaXRlbS10ZXh0JiZUZXh0JztcXHJcXG5cXHRcXHRcXHTlm77niYcgPSAnaW1nfHwubGF6eSYmZGF0YS1zcmMnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ3BhY2steWtwYWNrJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiYucGFjay15a3BhY2snO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICdhJiZ0aXRsZSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJ3NwYW4sLTEmJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICcuZWNsYXp5JiZkYXRhLW9yaWdpbmFsJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYSYmaHJlZic7XFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdzdHVpLXZvZGxpc3QnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJy5zdHVpLXZvZGxpc3QmJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnYSYmdGl0bGUnO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9ICcucGljLXRleHQmJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICcubGF6eWxvYWR8fGEmJmRhdGEtb3JpZ2luYWwnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ3ZvZGxpc3QnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJy52b2RsaXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2EmJnRpdGxlJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnYSYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdH0gZWxzZSBpZiAo5qGG5p6257G75Z6LID09PSAn5rWL6K+VJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiZhJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnYm9keSYmYSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJ2JvZHkmJmEnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICdib2R5JiZhJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYm9keSYmYSc7XFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICcnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0g5qGG5p625YiX6KGoO1xcclxcblxcdFxcdFxcdOagh+mimCA9IOahhuaetuagh+mimDtcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSDmoYbmnrbmj4/ov7A7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0g5qGG5p625Zu+54mHO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9IOahhuaetumTvuaOpTtcXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0bGV0IGxpc3QgPSBwZGZhKGh0bWwsIOWIl+ihqCk7XFxyXFxuXFx0XFx0Zm9yIChsZXQgayBpbiBsaXN0KSB7XFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogcGRmaChsaXN0W2tdLCDmoIfpopgpLFxcclxcblxcdFxcdFxcdFxcdGRlc2M6IHBkZmgobGlzdFtrXSwg5o+P6L+wKSxcXHJcXG5cXHRcXHRcXHRcXHRpbWc6IHBkKGxpc3Rba10sIOWbvueJhykgKyAnQFJlZmVyZXI9JyxcXHJcXG5cXHRcXHRcXHRcXHR1cmw6IHBkKGxpc3Rba10sIOmTvuaOpSkrXFxcIiNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI1xcXCIsXFxyXFxuXFx0XFx0XFx0fSk7XFxyXFxuXFx0XFx0fVxcclxcblxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdiaWdfYmlnX2JsYW5rX2Jsb2NrJyxcXHJcXG5cXHRcXHR9KTtcXHJcXG5cXHR9XFxyXFxufSlcXHJcXG5cXHJcXG4kLmV4cG9ydHMgPSBuZXcg5LiA57qnKCk7XFxyXFxuJC5leHBvcnRzXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbDnu4Tku7YqXCIsXCJwYXRoXCI6XCJxc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24g5LyY5YyW6Lev57q/56ug6IqC5pWw5o2uKOWkmui3r+e6v+WQpiwg5rqQ5pWw5o2uLCDot6/nur/liJfooagsIOi3r+e6v+WQjSwg6YCJ6ZuG5oC75YiX6KGoLCDpgInpm4bliJfooagsIOmbhuWQjSwg6ZuGdXJsLCDliY3nvIAsIOagh+mimCwg5Zu+54mHKSB7XFxuXFxuICAgIC8v5b2T5aSa6Lev57q/5ZCmIOmAiembhuaAu+WIl+ihqOS4uuepulxcbiAgICAvL+acgOe7iOi/lOWbniBbe3RpdGxlOiAn6Lev57q/5ZCNJyxsaXN0OiBbe3RpdGxlOifpgInpm4blkI0nLHVybDon6YCJ6ZuGdXJsJywuLi59XSxzanNzOifkuIvovb3otYTmlpknfSwuLi4uXVxcbiAgICAvL+mAiembhuWIl+ihqCDnrKzkuIDpobnmmK9jc3PpgInmi6nlmajvvIzkuYvlkI7lj6/ku6XnlKgk5YiG5Ymy5re75Yqg6KaB5Yig6Zmk56ug6IqC5ZCNXFxuXFxuXFxuICAgIHZhciDnq6DoioJqc29uID0gW107XFxuICAgIHZhciDljZXot6/nur/nq6DoioIgPSAn56ug6IqC5YiX6KGoJ1xcblxcbiAgICB2YXIg5YiX6KGo5ZCNID0gW107XFxuICAgIGlmICgh5aSa6Lev57q/5ZCmKSB7XFxuXFxuICAgICAgICDliJfooajlkI0ucHVzaCjljZXot6/nur/nq6DoioIpXFxuXFxuICAgIH0gZWxzZSB7XFxuXFxuICAgICAgICBwZGZhKOa6kOaVsOaNriwg6Lev57q/5YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgICAgICDliJfooajlkI0ucHVzaChwZGZoKGRhdGEsIOi3r+e6v+WQjSkpXFxuICAgICAgICB9KTtcXG5cXG4gICAgfVxcblxcbiAgICB2YXIg6ZuG5pWw57uEID0gW107XFxuXFxuXFxudmFyIOaOkumZpOeroOiKgiA9IFtdO1xcbmlmKOmAiembhuWIl+ihqC5pbmNsdWRlcygnJCcpKXtcXG7mjpLpmaTnq6DoioIgPSDpgInpm4bliJfooaguc3BsaXQoJyQnKVxcbumAiembhuWIl+ihqCA9IOaOkumZpOeroOiKgi5zaGlmdCgpXFxufVxcblxcbiAgICBpZiAoIeWkmui3r+e6v+WQpikge1xcbiAgICAgICAg6ZuG5pWw57uELnB1c2gocGRmYSjmupDmlbDmja4sIOmAiembhuWIl+ihqCkpXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBwZGZhKOa6kOaVsOaNriwg6YCJ6ZuG5oC75YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgICAgICDpm4bmlbDnu4QucHVzaChwZGZhKGRhdGEsIOmAiembhuWIl+ihqCkpXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcblxcbiAgICBmb3IgKGxldCBpIGluIOmbhuaVsOe7hCkge1xcblxcbiAgICAgICAgdmFyIGRvTGlzdCA9IFtdO1xcblxcbuaOkumZpOeroOiKgi5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgdmFyIOagh+ivhmlkID0g6ZuG5pWw57uEW2ldLmZpbmRJbmRleCjov5Tlm54gPT4g6L+U5ZueLmluZGV4T2YoZGF0YSkgIT0gLTEpO1xcbiAgICBpZiAo5qCH6K+GaWQgIT0gLTEpIHtcXG4gICAgICDpm4bmlbDnu4RbaV0uc3BsaWNlKOagh+ivhmlkLCAxKVxcbiAgICB9O1xcbiAgfSk7XFxuXFxuICAgICAgICBmb3IgKGxldCBpdCBvZiDpm4bmlbDnu4RbaV0pIHtcXG4gICAgICAgICAgICB2YXIgZG9MaXN0dXJsID0gcGRmaChpdCwg6ZuGdXJsKVxcbiAgICAgICAgICAgIGRvTGlzdHVybCA9IGRvTGlzdHVybC5pbmNsdWRlcyhcXFwiaHR0cFxcXCIpID8gZG9MaXN0dXJsIDog5YmN57yAICsgZG9MaXN0dXJsXFxuICAgICAgICAgICAgZG9MaXN0LnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdCwg6ZuG5ZCNKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBkb0xpc3R1cmxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGJvb2tOYW1lID0gIeWkmui3r+e6v+WQpiA/IOagh+mimCA6IOagh+mimCArICctJyArIOWIl+ihqOWQjVtpXVxcblxcbiAgICAgICAg56ug6IqCanNvbi5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTog5YiX6KGo5ZCNW2ldLFxcbiAgICAgICAgICAgIGxpc3Q6IGRvTGlzdCxcXG4gICAgICAgICAgICBzanNzOiB7XFxuICAgICAgICAgICAgICAgIGNoYXB0ZXJMaXN0OiBkb0xpc3QsXFxuICAgICAgICAgICAgICAgIGluZm86IHtcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tOYW1lOiBib29rTmFtZSwgLy/mvKvnlLvlkI3np7AsXFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogTVlfUlVMRS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tUb3BQaWM6IOWbvueJhyxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZTog5ryr55S76Kej5p6QLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmlldzogXFxcIjFcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICByZXR1cm4g56ug6IqCanNvblxcbn1cXG5cXG5cXG5mdW5jdGlvbiDmt7vliqDlpLTpg6jliJfooagoZCwg5qCH6aKYLCDlm77niYcsIOaPj+i/sCwg5L2c6ICFLCDml7bpl7QsIOWIhuexuyzpobVVUkwpIHtcXG5cXG4gICAg5qCH6aKYID0gIeagh+mimCA/ICcnIDog5qCH6aKYICsgJ1xcXFxuJ1xcbiAgICDlm77niYcgPSAh5Zu+54mHID8gJycgOiDlm77niYdcXG4gICAg5o+P6L+wID0gIeaPj+i/sCA/ICcnIDog5o+P6L+wLnJlcGxhY2UoXFxcIuabtOaWsOiHs++8mlxcXCIsICcnKVxcblxcbiAgICDkvZzogIUgPSAh5L2c6ICFID8gJycgOiAnXFxcXG4nICsg5L2c6ICFXFxuICAgIOaXtumXtCA9ICHml7bpl7QgPyAnJyA6ICdcXFxcbicgKyDml7bpl7RcXG4gICAg5YiG57G7ID0gIeWIhuexuyA/ICcnIDogJ1xcXFxuJyArIOWIhuexu1xcblxcblxcbiAgICB2YXIg5aS06YOodGl0bGUgPSBbJ+KAmOKAmOKAmeKAmTxiPicsJzwvYj4gPHNtYWxsPjxmb250IGNvbG9yPSNGQTcyOTg+JywnPC9mb250PicsJzwvc21hbGw+J11cXG4gICAgdmFyIOWktOmDqGRlc2MgPSBbJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPSNmOGVjYzk+JywnPC9mb250PiddXFxuXFxuXFxuXFxuICAgIOWktOmDqHRpdGxlID0g5aS06YOodGl0bGVbMF0r5qCH6aKYK+WktOmDqHRpdGxlWzFdK+aPj+i/sCvlpLTpg6h0aXRsZVsyXSvkvZzogIUr5aS06YOodGl0bGVbM11cXG5cXG4gICAg5aS06YOoZGVzYyA9IOWktOmDqGRlc2NbMF0r5pe26Ze0K+WIhuexuyvlpLTpg6hkZXNjWzFdXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTog5aS06YOodGl0bGUsXFxuICAgICAgICBkZXNjOiDlpLTpg6hkZXNjLFxcbiAgICAgICAgcGljX3VybDog5Zu+54mHLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9zZWFyY2g/cz0nK2dldFBhcmFtKCdOYW1lJykrJyZydWxlPeiBmua8q/CflK4nLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbiAgICB9KTtcXG5cXG59XFxuXFxuXFxuZnVuY3Rpb24g5re75Yqg566A5LuLKGQsIOaVsOaNrua6kCwg6aG1VVJMLCDlm77niYcpIHtcXG4gICAgLy/ojrflj5bmlbDmja5cXG4gICAgdmFyIOeugOS7i+WGheWuuSA9IOaVsOaNrua6kFxcbiAgICDnroDku4vlhoXlrrkgPSDnroDku4vlhoXlrrkucmVwbGFjZShcXFwi566A5LuL77yaXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcIuS7i+e7jTpcXFwiLCBcXFwiXFxcIikucmVwbGFjZShcXFwi5ryr55S7XFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcIuKApuKAplxcXCIsIFxcXCJcXFwiKS5yZXBsYWNlKFxcXCLnroDku4tcXFwiLCBcXFwiXFxcIilcXG5cXG4gICAgdmFyIOeugOS7i+WGheWuueaUtjtcXG4gICAgaWYgKOeugOS7i+WGheWuuS5sZW5ndGggPiA0NSkge1xcbiAgICAgICAg566A5LuL5YaF5a655pS2ID0g566A5LuL5YaF5a65LnN1YnN0cigwLCA0NSkgKyAnLi4uJ1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAg566A5LuL5YaF5a655pS2ID0g566A5LuL5YaF5a65ICsgJy4uLidcXG4gICAgfVxcblxcbiAgICAvL+Wbvuagh+iOt+WPllxcbiAgICBpZiAoIeWbvueJhykge1xcbiAgICAgICAg5Zu+54mHID0gJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9xLzEwNy5wbmcnXFxuICAgIH1cXG5cXG4gICAgLy/pobVVUkwg6I635Y+WXFxuICAgIGlmICgh6aG1VVJMKSB7XFxuICAgICAgICDpobVVUkwgPSBNWV9SVUxFLnRpdGxlXFxuICAgIH1cXG5cXG4gICAgLy/moIfpopjkuI7nroDku4vmoLflvI9cXG4gICAgdmFyIG16dGV4dCA9IFxcXCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8c21hbGw+566A5LuLPC9zbWFsbD48YnI+XFxcIlxcbiAgICB2YXIgYnR0aXRsZSA9ICc8Zm9udCBjb2xvcj1cXFwiIzA5OEFDMVxcXCI+5ryr55S7566A5LuLICA8L2ZvbnQ+PHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI2Y0Nzk4M1xcXCI+566A5LuL5pS2PjwvZm9udD48L3NtYWxsPjwvc21hbGw+J1xcblxcbiAgICAvL+WxleW8gOS4juaUtue8qeaTjeS9nFxcbiAgICB2YXIgamogPSBnZXRNeVZhcijpobVVUkwgKyBcXFwi566A5LuL5pS2XFxcIiwgXFxcIuW3suaUtui1t1xcXCIpO1xcbiAgICB2YXIgamp1cmwgPSAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjnroDku4vlhoXlrrksIOeugOS7i+WGheWuueaUtiwg5pS2LCDmlLblhoXlrrksIOW9k+WJjVVSTCkgPT4ge1xcbiAgICAgICAgdmFyIGpzYmwgPSDlvZPliY1VUkwgKyBcXFwi566A5LuL5pS2XFxcIjtcXG4gICAgICAgIHZhciBqaiA9IGdldE15VmFyKOW9k+WJjVVSTCArIFxcXCLnroDku4vmlLZcXFwiLCBcXFwi5bey5pS26LW3XFxcIik7XFxuICAgICAgICBqaiA9IGpqID09IFxcXCLlt7LmlLbotbdcXFwiID8gXFxcIuWxleW8gFxcXCIgOiBcXFwi5bey5pS26LW3XFxcIjtcXG4gICAgICAgIHB1dE15VmFyKGpzYmwsIGpqKVxcbiAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IOW9k+WJjVVSTCArIFxcXCJfYnRcXFwiXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB0aXRsZTog5pS2LnJlcGxhY2UoXFxcIueugOS7i+aUtlxcXCIsIGpqKVxcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiDlvZPliY1VUkwgKyBcXFwiX216XFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdGl0bGU6IGpqID09IFxcXCLlt7LmlLbotbdcXFwiID8g5pS25YaF5a65LnJlcGxhY2UoXFxcIueugOS7i1xcXCIsIOeugOS7i+WGheWuueaUtikgOiDmlLblhoXlrrkucmVwbGFjZShcXFwi566A5LuLXFxcIiwg566A5LuL5YaF5a65KVxcbiAgICAgICAgfSlcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgfSwg566A5LuL5YaF5a65LCDnroDku4vlhoXlrrnmlLYsIGJ0dGl0bGUsIG16dGV4dCwg6aG1VVJMKVxcblxcblxcbiAgICAvL+agh+mimFxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGJ0dGl0bGUucmVwbGFjZShcXFwi566A5LuL5pS2XFxcIiwgamopLFxcbiAgICAgICAgdXJsOiBqanVybCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIHBpY191cmw6IOWbvueJhyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJfYnRcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICAvL+eugOS7i1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGpqID09IFxcXCLlt7LmlLbotbdcXFwiID8gbXp0ZXh0LnJlcGxhY2UoXFxcIueugOS7i1xcXCIsIOeugOS7i+WGheWuueaUtikgOiBtenRleHQucmVwbGFjZShcXFwi566A5LuLXFxcIiwg566A5LuL5YaF5a65KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJfbXpcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbn1cXG5cXG5mdW5jdGlvbiDmt7vliqDliJfooajnq6DoioIoZCwg5qCH6aKY5pWw5o2uLCDliJfooajmlbDmja4sIOino+aekOS7o+eggSwg6aG1VVJMLCDlm77niYcpIHtcXG5cXG5cXG4gICAgLy9k5LiO5aSW55WMZO+8jOS4uuWQjOWGheWtmOWcsOWdgO+8jOS4jeeUqOi/lOWbnlxcbiAgICAvL+agh+mimOaVsOaNriAg5Y2z5qCH6aKY5ZCN5a2XXFxuICAgIC8v5YiX6KGo5pWw5o2u5b+F6aG75pivSlNPTiAg5qC85byP5pivW3t0aXRsZTonJyx1cmw6JycsfSwuLi4uLl0gIOS4lHVybOW/hemhu+acieWJjee8gFxcblxcbiAgICAvL+Wbvuagh+iOt+WPllxcbiAgICBpZiAoIeWbvueJhykge1xcbiAgICAgICAg5Zu+54mHID0gJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9xLzE4LnBuZydcXG4gICAgfVxcblxcbiAgICAvL+mhtVVSTCDojrflj5ZcXG4gICAgaWYgKCHpobVVUkwpIHtcXG4gICAgICAgIOmhtVVSTCA9IE1ZX1JVTEUudGl0bGVcXG4gICAgfVxcblxcbiAgICAvL+agh+mimOWQjVxcbiAgICB2YXIg5qCH6aKY5ZCNID0gJzxiPui3r+e6vzwvYj4gIDxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9I2Y5OTA2Zj7mjpLluo8gPjwvZm9udD48L3NtYWxsPjwvc21hbGw+J1xcblxcblxcbiAgICB2YXIg5o6S5bqPID0gZ2V0TXlWYXIo6aG1VVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsIFxcXCLmraPluo9cXFwiKTtcXG4gICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAn5YCS5bqPJyA/ICfmraPluo8nIDogJ+WAkuW6jyc7XFxuXFxuICAgIHZhciDmjpLluo91cmwgPSAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjmoIfpopjlkI0sIOagh+mimOaVsOaNriwg5YiX6KGo5pWw5o2uLCDop6PmnpDku6PnoIEsIOmhtVVSTCkgPT4ge1xcbiAgICAgICAgdmFyIOaOkuW6jyA9IGdldE15VmFyKOmhtVVSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCBcXFwi5q2j5bqPXFxcIik7XFxuICAgICAgICB2YXIg5o+Q56S6ID0g5o6S5bqPID09ICflgJLluo8nID8gJ+ato+W6jycgOiAn5YCS5bqPJztcXG4gICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX+aOkuW6j1xcXCJcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHRpdGxlOiDmoIfpopjlkI0ucmVwbGFjZSgn6Lev57q/Jywg5qCH6aKY5pWw5o2uKS5yZXBsYWNlKCfmjpLluo8nLCDmj5DnpLopXFxuICAgICAgICB9KVxcblxcblxcbiAgICAgICAgaWYgKOaPkOekuiA9PSAn5YCS5bqPJykge1xcbiAgICAgICAgICAgIOWIl+ihqOaVsOaNri5yZXZlcnNlKClcXG4gICAgICAgIH1cXG4gICAgICAgIOWIl+ihqOaVsOaNri5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEsIHNzaWQpIHtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogZGF0YS51cmwgKyDop6PmnpDku6PnoIEsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDog6aG1VVJMICsgXFxcIl/pgInpm4ZcXFwiICsgc3NpZFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG5cXG5cXG4gICAgICAgIHB1dE15VmFyKOmhtVVSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCDmj5DnpLopXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIOagh+mimOWQjSwg5qCH6aKY5pWw5o2uLCDliJfooajmlbDmja4sIOino+aekOS7o+eggSwg6aG1VVJMKVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IOagh+mimOWQjS5yZXBsYWNlKCfot6/nur8nLCDmoIfpopjmlbDmja4pLnJlcGxhY2UoJ+aOkuW6jycsIOaOkuW6jyksXFxuICAgICAgICBwaWNfdXJsOiDlm77niYcsXFxuICAgICAgICB1cmw6IOaOkuW6j3VybCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJf5o6S5bqPXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKOaOkuW6jyA9PSAn5YCS5bqPJykge1xcbiAgICAgICAg5YiX6KGo5pWw5o2uLnJldmVyc2UoKVxcbiAgICB9XFxuXFxuICAgIOWIl+ihqOaVsOaNri5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEsIGlkKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogZGF0YS51cmwgKyDop6PmnpDku6PnoIEsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX+mAiembhlxcXCIgKyBpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG5cXG59XFxuXFxuLypcXG5mdW5jdGlvbiDmt7vliqDpmLLmraLnvZHpobUo6aG5dXJsLCBVQSkge1xcblxcbiAgICAvL+S4iue6p+i3s+i9rOWIsOW9k+WJjemhteeahOmTvuaOpeW/hemhu+aYr2hpa2VyOi8vZW1wdHnvvJvkuI3nhLbkuIDliLfmlrDov5jmmK/kvJrph43lpI3liqDovb1cXG4gICAgLy9VQSAnJ+aIlmZhbHNl5oiWJ+aJi+acuicg6buY6K6k5piv5omL5py656uvIDsg55S16ISRICdQQydcXG5cXG4gICAgdmFyIOWIt+aWsOmHjeWkjSA9IE1ZX1JVTEUudGl0bGUgKyBcXFwi572R6aG15rqQ56CBXFxcIlxcbiAgICB2YXIgcGPpk77mjqUgPSDpobl1cmwucmVwbGFjZShcXFwibS5cXFwiLCBcXFwid3d3LlxcXCIpXFxuICAgIHZhciDmiYvmnLrpk77mjqUgPSDpobl1cmwucmVwbGFjZShcXFwid3d3LlxcXCIsIFxcXCJtLlxcXCIpXFxuXFxuICAgIHZhciBjb2RlO1xcbiAgICBpZiAoZ2V0TXlWYXIo5Yi35paw6YeN5aSNLCBcXFwiZmFsc2VcXFwiKSA9PSBcXFwiZmFsc2VcXFwiKSB7XFxuXFxuICAgICAgICBjb2RlID0gVUEgPT0gJ1BDJyA/IGZldGNoKHBj6ZO+5o6lKSA6IHJlcXVlc3Qo5omL5py66ZO+5o6lKTtcXG4gICAgICAgIHB1dE15VmFyKOWIt+aWsOmHjeWkjSwgZ2V0UGFyYW0oJ3VybCcpICsgXFxcIu+/pSbvv6VcXFwiICsgY29kZSlcXG5cXG4gICAgfSBlbHNlIHtcXG5cXG4gICAgICAgIHZhciBwbSA9IGdldE15VmFyKOWIt+aWsOmHjeWkjSkuc3BsaXQoXFxcIu+/pSbvv6VcXFwiKVxcbiAgICAgICAgaWYgKHBtWzBdID09IGdldFBhcmFtKCd1cmwnKSkge1xcbiAgICAgICAgICAgIGNvZGUgPSBwbVsxXVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBjb2RlID0gVUEgPT0gJ1BDJyA/IGZldGNoKHBj6ZO+5o6lKSA6IHJlcXVlc3Qo5omL5py66ZO+5o6lKTtcXG4gICAgICAgICAgICBwdXRNeVZhcijliLfmlrDph43lpI0sIGdldFBhcmFtKCd1cmwnKSArIFxcXCLvv6Um77+lXFxcIiArIGNvZGUpXFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGNvZGVcXG59XFxuKi9cXG5cXG5mdW5jdGlvbiDmt7vliqDpgInmi6not6/nur8oZCwg6Lev57q/5pWw5o2uLCDpobVVUkwsIOWkmui3r+e6v+WQpikge1xcblxcbiAgICAvL+i3r+e6v+aVsOaNriDmoLzlvI9be3RpdGxlOifot6/nur/lkI0nfSwuLi4uXVxcbiAgICAvL+Wkmui3r+e6v+WQpiAgZmFsc2Ug5YiZ5LiN5ZCv55So6YCJ5oup6Lev57q/77ybdHJ1ZSDliJnlkK/nlKhcXG5cXG4gICAgdmFyIOmAieaLqeWIl+ihqCA9IGdldEl0ZW0o6aG1VVJMICsgXFxcIumAieaLqeWIl+ihqFxcXCIsIFxcXCIwXFxcIilcXG5cXG4gICAgaWYgKOWkmui3r+e6v+WQpikge1xcblxcbiAgICAgICAgdmFyIOi3r+e6v+mAieS4rSA9ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj0jMDk4QUMxPumAieS4rTwvZm9udD4nXFxuXFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZ8J+Tljxmb250IGNvbG9yPVxcXCIjRkE3Mjk4XFxcIj4g5Zu+5rqQ5YiX6KGoPC9mb250PiDvvJonLFxcbiAgICAgICAgICAgIHVybDogXFxcInRvYXN0Oi8v54K55oiR5bmy5ZWl5ZGiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuXFxuXFxuICAgICAgICDot6/nur/mlbDmja4uZm9yRWFjaChmdW5jdGlvbihkYXRhLCBpZCkge1xcblxcbiAgICAgICAgICAgIHZhciBqanVybCA9ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKOmhtVVSTCxpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKOmhtVVSTCArICfpgInmi6nliJfooagnLGlkKycnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIH0s6aG1VVJMLGlkKTtcXG5cXG4gICAgICAgICAgICB2YXIg5qCH6aKY5ZCNID0gaWQgPT0g6YCJ5oup5YiX6KGoID8g6Lev57q/6YCJ5LitLnJlcGxhY2UoJ+mAieS4rScsIGRhdGEudGl0bGUpIDogZGF0YS50aXRsZTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTog5qCH6aKY5ZCNLFxcbiAgICAgICAgICAgICAgICB1cmw6IGpqdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX+i3r+e6v1xcXCIgKyBpZFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG5cXG4gICAgfVxcbiAgICByZXR1cm4g6YCJ5oup5YiX6KGoXFxufVxcblxcblxcbmZ1bmN0aW9uIOa3u+WKoOmAieaLqeS4i+i9vShkLCDot6/nur/mlbDmja4sIOWkmui3r+e6v+WQpikge1xcbiAgICBkLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmfCfl7M8Zm9udCBjb2xvcj1cXFwiI2Y0Nzk4M1xcXCI+IOS5puaetjwvZm9udD4gJyxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL0Jvb2tyYWNrLnZpZXc/cnVsZT3mnKzlnLDotYTmupDnrqHnkIYmcnVsZU5hbWU9XFxcIitNWV9SVUxFLnRpdGxlLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSk7XFxuXFxuICAgIC8v6Lev57q/5pWw5o2uIOagvOW8j1t7dGl0bGU6J+i3r+e6v+WQjScsc2pzczon5LiL6L296LWE5paZ5L+h5oGvJ30sLi4uLl1cXG4gICAgLy/lpJrot6/nur/lkKYgIGZhbHNlIOWImeWPquacieKRoOS4quS4i+i9vSDmoIfpopjkuLog54K55Ye75LiL6L2977ybdHJ1ZSDliJnlpJrkuKrkuIvovb1cXG5cXG5pZijlpJrot6/nur/lkKYpe1xcblxcbmQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmfCfk6U8Zm9udCBjb2xvcj1cXFwiI2Y0Nzk4M1xcXCI+IOS4i+i9vTwvZm9udD4g77yaJyxcXG4gICAgICAgIHVybDogXFxcInRvYXN0Oi8v54K55oiR5bmy5ZWl5ZGiXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSk7XFxuXFxufVxcblxcbiAgICDot6/nur/mlbDmja4uZm9yRWFjaChmdW5jdGlvbihkYXRhLCBpZCkge1xcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZS5pbmNsdWRlcygn56ug6IqC5YiX6KGoJykgPyAn54K55Ye75LiL6L29JyA6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2Rvd25sb2FkLnZpZXcjbm9SZWNvcmRIaXN0b3J5IyNub1JlZnJlc2gjI25vSGlzdG9yeSM/cnVsZT3mnKzlnLDotYTmupDnrqHnkIYnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgZXh0cmE6IGRhdGEuc2pzc1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcblxcbiAgICBpZiAo5aSa6Lev57q/5ZCmKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiQ1NT6YCJ5oup5Zmo5qih54mIKlwiLFwicGF0aFwiOlwiZWp3Yi5qc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24g5LiA57qnKOWIl+ihqCwg5qCH6aKYLCDlm77niYcsIOmbhuaVsCwg6ZO+5o6lLCDorr/pl67lpLQpIHtcXG4gICAg6K6/6Zeu5aS0ID0gIeiuv+mXruWktCA/ICcnIDog6K6/6Zeu5aS0XFxuICAgIHZhciBkID0gW107XFxuICAgIHZhciBjb2RlID0gZ2V0Q29kZSgpXFxuICAgIHBkZmEoY29kZSwg5YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoZGF0YSwg5qCH6aKYKSxcXG4gICAgICAgICAgICBkZXNjOiBwZGZoKGRhdGEsIOmbhuaVsCksXFxuICAgICAgICAgICAgcGljX3VybDogcGQoZGF0YSwg5Zu+54mHKXx85Zu+54mHICsgXFxcIkBSZWZlcmVyPVxcXCIgKyDorr/pl67lpLQsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlIycsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8zXFxcIixcXG5leHRyYToge1xcbiAgICAgICAgICAgIG5hbWU6IHBkZmgoZGF0YSwg5qCH6aKYKSxcXG4gICAgICAgICAgICB1cmw6IHBkKGRhdGEsIOmTvuaOpSksXFxuICAgICAgICAgICAgcXo6IE1ZX0hPTUVcXG4gICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG5cXG5cXG5cXG5mdW5jdGlvbiDmkJzntKIo5YiX6KGoLCDmoIfpopgsIOmTvuaOpSwg5o+P6L+wLCDor6bmg4UsIOWbvueJhywg6K6/6Zeu5aS0KSB7XFxuICAgIHZhciBkID0gW107XFxuICAgIOiuv+mXruWktCA9ICHorr/pl67lpLQgPyAnJyA6IOiuv+mXruWktFxcbiAgICBwZGZhKGdldFJlc0NvZGUoKSwg5YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoZGF0YSwg5qCH6aKYKSxcXG4gICAgICAgICAgICBkZXNjOiBwZGZoKGRhdGEsIOaPj+i/sCksXFxuICAgICAgICAgICAgcGljX3VybDogcGQoZGF0YSwg5Zu+54mHKSArIFxcXCJAUmVmZXJlcj1cXFwiICsg6K6/6Zeu5aS0LFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSMnLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBkZmgoZGF0YSwg6K+m5oOFKSxcXG5cXG5leHRyYToge1xcbiAgICAgICAgICAgIG5hbWU6IHBkZmgoZGF0YSwg5qCH6aKYKSxcXG4gICAgICAgICAgICB1cmw6IHBkKGRhdGEsIOmTvuaOpSksXFxuICAgICAgICAgICAgcXo6IE1ZX0hPTUVcXG4gICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiDmnIDmlrAo6YCJ5oup5ZmoLCBVQSkge1xcbiAgICBpZiAoVUEgPT0gXFxcIlBDXFxcIikge1xcbiAgICAgICAgdmFyIGNvZGUgPSBmZXRjaChnZXRQYXJhbSgndXJsJykucmVwbGFjZShcXFwibS5cXFwiLCBcXFwid3d3LlxcXCIpKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHZhciBjb2RlID0gcmVxdWVzdChnZXRQYXJhbSgndXJsJykucmVwbGFjZShcXFwid3d3LlxcXCIsIFxcXCJtLlxcXCIpKTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQocGRmaChjb2RlLCDpgInmi6nlmagpKVxcbn1cXG5cXG5cXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9wYWdlL3FzP3J1bGU96IGa5ryr8J+UrlxcXCIpKS5ydWxlKVxcblxcbmZ1bmN0aW9uIOS6jOe6pyjlpLTpg6jliJfooagsIOagh+mimCwg5Zu+54mHLCDmj4/ov7AsIOiuv+mXruWktCwg5L2c6ICFLCDml7bpl7QsIOWIhuexuywg566A5LuLLCDlpJrot6/nur/lkKYsIOi3r+e6v+WIl+ihqCwg6Lev57q/5ZCNLCDpgInpm4bmgLvliJfooagsIOmAiembhuWIl+ihqCwg6ZuG5ZCNLCDpm4Z1cmwsIOa8q+eUu+ino+aekCzlvZPliY1VUkws5b2T5YmN6aG15ZCNLOWJjee8gCxVQSzpmLLph43ovb3lkKYpIHtcXG4gICAgdmFyIGQgPSBbXTtcXG5cXG4vL+WktOmDqOWIl+ihqCAg5YiZ6buY6K6k5L2/55SoIGNvZGUg5p2l5L2c5Li65aS06YOo5YiX6KGo5pWw5o2uXFxuLy/lpJrot6/nur/lkKYgIHRydWUg5YiZ5L2/55So5aSa6Lev57q/77ybZmFsc2Ug5YiZ5L2/55So56ug6Lev57q/XFxuLy9VQSAg5LiN5aGr5YiZ5L2/55So5omL5py656uvICAnUEMn5YiZ5omL5py656uvXFxuXFxuaWYgKOW9k+WJjemhteWQjSkge1xcbiAgICBzZXRQYWdlVGl0bGUo5b2T5YmN6aG15ZCNKVxcbn1cXG5cXG5pZijpmLLph43ovb3lkKYpe1xcbi8v572R6aG15YaF5a65K+mYsuatoumHjeaLiVxcbiAgICB2YXIgY29kZSA9IOa3u+WKoOmYsuatoue9kemhtSjlvZPliY1VUkwsIFVBKVxcbn1lbHNle1xcbiAgICB2YXIgY29kZSA9IGdldENvZGUoKVxcbn1cXG4gICAgXFxuXFxuICAgIC8v5aS06YOo5YiX6KGo5pWw5o2uXFxuICAgIHZhciDlpLTpg6ggPSAh5aS06YOo5YiX6KGoID8gY29kZSA6IHBkZmEoY29kZSwg5aS06YOo5YiX6KGoKVswXTtcXG4gICAg5qCH6aKYID0gcGRmaCjlpLTpg6gsIOagh+mimClcXG4gICAg5Zu+54mHID0gcGRmaCjlpLTpg6gsIOWbvueJhyl8fOWbvueJh1xcbiAgICBpZiAo5Zu+54mHKSB7XFxuICAgICAgICDlm77niYcgPSDlm77niYcuaW5jbHVkZXMoJ2h0dHAnKSA/IOWbvueJhyA6IOWJjee8gCArIOWbvueJh1xcbiAgICAgICAgaWYgKCHorr/pl67lpLQpIHt9IGVsc2UgaWYgKOiuv+mXruWktC5zdWJzdHIoMCwgMSkgPT0gJ0AnKSB7XFxuICAgICAgICAgICAg5Zu+54mHID0g5Zu+54mHICsg6K6/6Zeu5aS0XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIOWbvueJhyA9IOWbvueJhyArIFxcXCJAUmVmZXJlcj1cXFwiICsg6K6/6Zeu5aS0XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgXFxuXFxu5o+P6L+wID0g5o+P6L+wLmluY2x1ZGVzKCckJykgPyDmj4/ov7Auc3BsaXQoJyQnKVsxXSArIHBkZmgo5aS06YOoLCDmj4/ov7Auc3BsaXQoJyQnKVswXSkgOiBwZGZoKOWktOmDqCwg5o+P6L+wKVxcblxcbuS9nOiAhSA9IOS9nOiAhS5pbmNsdWRlcygnJCcpID8g5L2c6ICFLnNwbGl0KCckJylbMV0gKyBwZGZoKOWktOmDqCwg5L2c6ICFLnNwbGl0KCckJylbMF0pIDogcGRmaCjlpLTpg6gsIOS9nOiAhSlcXG4gICAgXFxu5pe26Ze0ID0g5pe26Ze0LmluY2x1ZGVzKCckJykgPyDml7bpl7Quc3BsaXQoJyQnKVsxXSArIHBkZmgo5aS06YOoLCDml7bpl7Quc3BsaXQoJyQnKVswXSkgOiBwZGZoKOWktOmDqCwg5pe26Ze0KVxcblxcbuWIhuexuyA9IOWIhuexuy5pbmNsdWRlcygnJCcpID8g5YiG57G7LnNwbGl0KCckJylbMV0gKyBwZGZoKOWktOmDqCwg5YiG57G7LnNwbGl0KCckJylbMF0pIDogcGRmaCjlpLTpg6gsIOWIhuexuylcXG5cXG4gICAgXFxuICAgIC8v5aS06YOo5YiX6KGoXFxuICAgIOa3u+WKoOWktOmDqOWIl+ihqChkLCDmoIfpopgsIOWbvueJhywg5o+P6L+wLCDkvZzogIUsIOaXtumXtCwg5YiG57G7LOW9k+WJjVVSTClcXG4gICAgXFxuICAgIC8v6Lev57q/5ZCN5LiO6YCJ6ZuG5pWw5o2uXFxuICAgIHZhciDnq6DoioJqc29uID0g5LyY5YyW6Lev57q/56ug6IqC5pWw5o2uKOWkmui3r+e6v+WQpiwgY29kZSwg6Lev57q/5YiX6KGoLOi3r+e6v+WQjSzpgInpm4bmgLvliJfooags6YCJ6ZuG5YiX6KGoLOmbhuWQjSzpm4Z1cmws5YmN57yALOW9k+WJjemhteWQjSzlm77niYcpXFxuXFxuICAgIC8v566A5LuLXFxuICAgIOa3u+WKoOeugOS7iyhkLCBwZGZoKGNvZGUsIOeugOS7iyksIOW9k+WJjVVSTCwgJycpXFxuXFxuICAgLy/lvZPmsqHmnInnq6DoioLlhoXlrrnvvIzlsLHkuI3mmL7npLpcXG4gICAgaWYgKOeroOiKgmpzb24ubGVuZ3RoID4gMCkge1xcblxcbiAgICAgICAgLy/ot6/nur/pgInmi6lcXG4gICAgICAgIHZhciDpgInmi6nliJfooaggPSDmt7vliqDpgInmi6not6/nur8oZCwg56ug6IqCanNvbiwg5b2T5YmNVVJMLCDlpJrot6/nur/lkKYpXFxuXFxuICAgICAgICAvL+mAieaLqeS4i+i9vVxcbiAgICAgICAg5re75Yqg6YCJ5oup5LiL6L29KGQsIOeroOiKgmpzb24s5aSa6Lev57q/5ZCmKVxcblxcbiAgICAgICAgLy/mjpLluo/kuI7pgInpm4ZcXG4gICAgICAgIHZhciBsYXp5ID0gYEBsYXp5UnVsZT0uanM6YCArIOa8q+eUu+ino+aekDtcXG4gICAgICAgIOa3u+WKoOWIl+ihqOeroOiKgihkLCDnq6DoioJqc29uW+mAieaLqeWIl+ihqF0udGl0bGUsIOeroOiKgmpzb25b6YCJ5oup5YiX6KGoXS5saXN0LCBsYXp5LCDlvZPliY1VUkwsICcnKVxcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxvbmdfdGV4dFxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p+WIl+ihqCpcIixcInBhdGhcIjpcImVqbGJcIixcInJ1bGVcIjpcInZhciB0YWJzID0gW11cXG52YXIgbGlzdHMgPSBbXVxcbnZhciBhcnRzID0gcGRmYShodG1sLCDnur/ot68pO1xcbmFydHMuZm9yRWFjaCgoZGF0YSwgaWQpID0+IHtcXG4gICAgdGFicy5wdXNoKHBkZmgoZGF0YSwg57q/6Lev5ZCNKSlcXG59KVxcbnZhciBjb250cyA9IHBkZmEoaHRtbCwg6YCJ6ZuGKTtcXG5jb250cy5mb3JFYWNoKChkYXRhLCBpZCkgPT4ge1xcbiAgICBsaXN0cy5wdXNoKHBkZmEoZGF0YSwg6YCJ6ZuG5YiX6KGoKSlcXG59KVxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGNsZWFyTXlWYXIoXFxcImxpc3RzXFxcIik7XFxufSkpO1xcbnN0b3JhZ2UwLnB1dE15VmFyKFxcXCJsaXN0c1xcXCIsIGxpc3RzKTtcXG52YXIgbGlzdCA9IGxpc3RzW2dldE15VmFyKE1ZX1VSTCwgJzAnKV07XFxudmFyIOaOkuW6jyA9IGdldE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCAnIzFhYWQxOVxcXCI+5q2j5bqPJyk7XFxudmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxudmFyIOaOkuW6j+WQjSA9ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I65o6S5bqPPC9zcGFuPjwvYj4nXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICcgKyDmjpLluo8gKyAnPC9zcGFuPjwvYj4nLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKOaOkuW6j+WQjSwgbGF6eSkgPT4ge1xcbiAgICAgICAgdmFyIGxpc3RzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImxpc3RzXFxcIik7XFxuICAgICAgICB2YXIg56ug6IqCID0gbGlzdHNbZ2V0TXlWYXIoTVlfVVJMLCAnMCcpXTtcXG4gICAgICAgIHZhciDmjpLluo8gPSBnZXRNeVZhcihNWV9VUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwgJyMxYWFkMTlcXFwiPuato+W6jycpO1xcbiAgICAgICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxuICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogTVlfVVJMICsgXFxcIl/mjpLluo9cXFwiXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB0aXRsZTog5o6S5bqP5ZCNLnJlcGxhY2UoJ+aOkuW6jycsIOaPkOekuilcXG4gICAgICAgIH0pXFxuICAgICAgICBpZiAo5o6S5bqPID09ICcjMWFhZDE5XFxcIj7mraPluo8nKSB7XFxuICAgICAgICAgICAg56ug6IqCLnJldmVyc2UoKVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGNwID0g56ug6IqCLm1hcCgoZGF0YSwgc3NpZCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGRhdGEsICdhJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgIHVybDogcGQoZGF0YSwgJ2EmJmhyZWYnKSArIGxhenksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogTVlfVVJMICsgXFxcIl/pgInpm4ZcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkZWxldGVJdGVtQnlDbHMoTVlfVVJMICsgXFxcIl/pgInpm4ZcXFwiKTtcXG4gICAgICAgIGFkZEl0ZW1CZWZvcmUoTVlfVVJMICsgXFxcImZvb3RlclxcXCIsIGNwKTtcXG4gICAgICAgIHB1dE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCDmj5DnpLopXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIOaOkuW6j+WQjSwgbGF6eSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogTVlfVVJMICsgXFxcIl/mjpLluo9cXFwiXFxuICAgIH1cXG59KVxcbnRhYnMuZm9yRWFjaCgoZGF0YSwgaWQpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBnZXRNeVZhcihNWV9VUkwsICcwJykgPT0gaWQgPyAn4oCc4oCcJyArIGRhdGEgKyAn4oCd4oCdJyA6IGRhdGEsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKOe6v+i3rywgbGF6eSwgaWQpID0+IHtcXG4gICAgICAgICAgICB2YXIgbGlzdHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwibGlzdHNcXFwiKTtcXG4gICAgICAgICAgICB2YXIg5o6S5bqPID0gZ2V0TXlWYXIoTVlfVVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsICcjMWFhZDE5XFxcIj7mraPluo8nKTtcXG4gICAgICAgICAgICB2YXIg5o+Q56S6ID0g5o6S5bqPID09ICcjRkYwMDAwXFxcIj7lgJLluo8nID8gJyMxYWFkMTlcXFwiPuato+W6jycgOiAnI0ZGMDAwMFxcXCI+5YCS5bqPJztcXG5cXG4gICAgICAgICAgICDnur/ot68uZm9yRWFjaCgoZGF0YSwgeGxpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpZCA9PSB4bGlkID8gJ+KAnOKAnCcgKyBkYXRhICsgJ+KAneKAnScgOiBkYXRhLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfVVJMICsgXFxcIl/nur/ot69cXFwiICsgeGxpZFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHB1dE15VmFyKE1ZX1VSTCwgaWQpXFxuICAgICAgICAgICAgdmFyIOeroOiKgiA9IGxpc3RzW2dldE15VmFyKE1ZX1VSTCwgJzAnKV07XFxuICAgICAgICAgICAgaWYgKOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJykge1xcbiAgICAgICAgICAgICAgICDnq6DoioIucmV2ZXJzZSgpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBjcCA9IOeroOiKgi5tYXAoKGRhdGEsIHNzaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGRhdGEsICdhJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHBkKGRhdGEsICdhJiZocmVmJykgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhNWV9VUkwgKyBcXFwiX+mAiembhlxcXCIpO1xcbiAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUoTVlfVVJMICsgXFxcImZvb3RlclxcXCIsIGNwKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCB0YWJzLCBsYXp5LCBpZCksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogTVlfVVJMICsgXFxcIl/nur/ot69cXFwiICsgaWRcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSlcXG5cXG5pZiAo5o6S5bqPID09ICcjRkYwMDAwXFxcIj7lgJLluo8nKSB7XFxuICAgIGxpc3QucmV2ZXJzZSgpXFxufVxcbmxpc3QuZm9yRWFjaCgoZGF0YSwgaWQpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGRhdGEsICdhJiZUZXh0JyksXFxuICAgICAgICB1cmw6IHBkKGRhdGEsICdhJiZocmVmJykgKyBsYXp5LFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBjbHM6IE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59KVxcbmxldCBuZXdzdGlwID0gbGlzdC5sZW5ndGg7XFxuaWYgKG5ld3N0aXApIHtcXG4gICAgc2V0TGFzdENoYXB0ZXJSdWxlKCdqczonICsgJC50b1N0cmluZygobmV3c3RpcCkgPT4ge1xcbiAgICAgICAgc2V0UmVzdWx0KCfmm7TmlrDoh7M6IOesrCcgKyBuZXdzdGlwICsgXFxcIumbhlxcXCIpO1xcbiAgICB9LCBuZXdzdGlwKSk7XFxufVxcblxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiBNWV9VUkwgKyBcXFwiZm9vdGVyXFxcIlxcbiAgICB9XFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnjq/looPliqvmjIFcIixcInBhdGhcIjpcImhpamFja0VudlwiLFwicnVsZVwiOlwidmFyIHsgUlVMRSwgaXNJbmRleCwgcGFnZVRpdGxlIH0gPSBNWV9QQVJBTVNcXG5SVUxFID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoUlVMRSkpXFxudmFyIG9yaVJVTEUgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKS5maW5kKCh2KSA9PiB2LnRpdGxlID09IFJVTEUudGl0bGUpXFxuaWYgKGlzSW5kZXgpIHtcXG4gICAgUlVMRSA9IG9yaVJVTEVcXG4gICAgdmFyIHsgdGFiSGVhZGVyLCBmeUFsbCB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvQ2xhc3NUYWI/cnVsZT0nICsgUUlOR19USVRMRSwgT2JqZWN0LmFzc2lnbih7IFFJTkdfVElUTEU6IFFJTkdfVElUTEUgfSwgUlVMRSkpXFxuICAgIC8vIOWkhOeQhk1ZX1JVTEVcXG4gICAgTVlfUlVMRS5jbGFzc191cmwgPSB0YWJIZWFkZXIuZ2V0Q2xhc3MoZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnKS51cmxcXG4gICAgTVlfUlVMRS5hcmVhX3VybCA9IGZ5QWxsID8gTVlfUlVMRS5jbGFzc191cmwgOiB0YWJIZWFkZXIuZ2V0Q2xhc3MoJ2Z5YXJlYScpLnVybFxcbiAgICBNWV9SVUxFLnllYXJfdXJsID0gZnlBbGwgPyBNWV9SVUxFLmNsYXNzX3VybCA6IHRhYkhlYWRlci5nZXRDbGFzcygnZnl5ZWFyJykudXJsXFxuICAgIE1ZX1JVTEUuc29ydF91cmwgPSBmeUFsbCA/IE1ZX1JVTEUuY2xhc3NfdXJsIDogdGFiSGVhZGVyLmdldENsYXNzKCdmeXNvcnQnKS51cmxcXG4gICAgTVlfUlVMRS51cmwgPSBSVUxFLnVybFxcbiAgICBNWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcbiAgICBNWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuICAgIE1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5maW5kX3J1bGVcXG4gICAgTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUucGFyYW1zID0ge31cXG59IGVsc2Uge1xcbiAgICBSVUxFLnBhZ2VzID0gb3JpUlVMRS5wYWdlc1xcbiAgICAvLyDlpITnkIZNWV9SVUxFXFxuICAgIE1ZX1JVTEUudXJsID0gTVlfUEFSQU1TLnVybFxcbiAgICBNWV9SVUxFLmNvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXG4gICAgTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXG4gICAgTVlfUlVMRS5wYXJhbXMgPSBSVUxFLnBhcmFtc1xcbn1cXG5NWV9SVUxFLnBhZ2VzID0gUlVMRS5wYWdlc1xcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKE1ZX1JVTEUucGFnZXMgfHwgJ1tdJylcXG5NWV9SVUxFLnRpdGxlID0gUlVMRS50aXRsZVxcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxubG9nKE1ZX1JVTEUudXJsKVxcbi8vIOi9veWFpeWHveaVsOW3peWFt1xcbnZhciB7IGdlbk15UnVsZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZnVuY1Rvb2xzP3J1bGU9JyArIFFJTkdfVElUTEUsIHtcXG4gICAgUUlOR19USVRMRTogUUlOR19USVRMRSxcXG4gICAgTVlfUlVMRTogTVlfUlVMRSxcXG4gICAgaXNJbmRleDogaXNJbmRleFxcbn0pXFxuLy8g6Ziy5q2icmVxdWlyZeWkmuasoei/kOihjFxcbmNvbnN0IG15Q29sbF9yZXF1aXJlZCA9IHt9XFxucmVxdWlyZSA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00KSB7XFxuICAgIGlmIChteUNvbGxfcmVxdWlyZWRbcGFyYW0wXSkgcmV0dXJuXFxuICAgIG15Q29sbF9yZXF1aXJlZFtwYXJhbTBdID0gdHJ1ZVxcbiAgICBwYXJhbTIgPSBwYXJhbTIgIT0gbnVsbCA/IHBhcmFtMiA6IDBcXG4gICAgcGFyYW0zID0gTVlfVElDS0VUXFxuICAgIHBhcmFtNCA9IGV2YWxcXG4gICAgcmV0dXJuIG1ldGhvZF9yZXF1aXJlLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpXFxufVxcbnJlcXVpcmVDYWNoZSA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUpIHtcXG4gICAgaWYgKG15Q29sbF9yZXF1aXJlZFtwYXJhbTBdKSByZXR1cm5cXG4gICAgbXlDb2xsX3JlcXVpcmVkW3BhcmFtMF0gPSB0cnVlXFxuICAgIHBhcmFtMyA9IHBhcmFtMyAhPSBudWxsID8gcGFyYW0zIDogMFxcbiAgICBwYXJhbTQgPSBNWV9USUNLRVRcXG4gICAgcGFyYW01ID0gZXZhbFxcbiAgICByZXR1cm4gbWV0aG9kX3JlcXVpcmVDYWNoZS5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUpXFxufVxcbnJjID0gcmVxdWlyZUNhY2hlXFxuLy8g5pyA5paw56ug6IqC6KeE5YiZ546v5aKD5Yqr5oyBXFxuc2V0TGFzdENoYXB0ZXJSdWxlID0gZnVuY3Rpb24ocGFyYW0wKSB7XFxuICAgIGlmIChwYXJhbTAuc3RhcnRzV2l0aChcXFwianM6XFxcIikpIHtcXG4gICAgICAgIHBhcmFtMCA9ICdqczonICsgJC50b1N0cmluZygoUUlOR19USVRMRSwgTVlfUEFSQU1TKSA9PiB7XFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvaGlqYWNrRW52P3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbiAgICAgICAgICAgIHZhciB7IHJ1blByZVJ1bGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFKVxcbiAgICAgICAgICAgIHJ1blByZVJ1bGUob3JpUlVMRS5wcmVSdWxlKVxcbiAgICAgICAgfSwgUUlOR19USVRMRSwgeyB1cmw6IE1ZX1JVTEUudXJsLCBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZ2VuTXlSdWxlKCkpKSwgaXNJbmRleDogaXNJbmRleCB9KSArICc7JyArIHBhcmFtMC5zbGljZSgzKVxcbiAgICB9XFxuICAgIG1ldGhvZF9zZXRMYXN0Q2hhcHRlclJ1bGUuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTApXFxufVxcbi8vIOWKqOaAgeaWsOWinuWHveaVsOWKq+aMgVxcbmFkZEl0ZW1BZnRlciA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xKSB7XFxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtMSkpIHBhcmFtMSA9IHBhcmFtMS5tYXAoaGlqYWNrRWwpXFxuICAgIGVsc2UgcGFyYW0xID0gaGlqYWNrRWwocGFyYW0xKVxcbiAgICBtZXRob2RfYWRkSXRlbUFmdGVyLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEpXFxufVxcbmFkZEl0ZW1CZWZvcmUgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSkge1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbTEpKSBwYXJhbTEgPSBwYXJhbTEubWFwKGhpamFja0VsKVxcbiAgICBlbHNlIHBhcmFtMSA9IGhpamFja0VsKHBhcmFtMSlcXG4gICAgbWV0aG9kX2FkZEl0ZW1CZWZvcmUuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbDlt6XlhbdcIixcInBhdGhcIjpcImZ1bmNUb29sc1wiLFwicnVsZVwiOlwibGV0IHsgUUlOR19USVRMRSwgTVlfUlVMRSwgaXNJbmRleCB9ID0gJC5pbXBvcnRQYXJhbVxcbmlmICghTVlfUlVMRSkgTVlfUlVMRSA9IHt9XFxuXFxuZnVuY3Rpb24gcnVuQ29kZShydWxlKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgW2lucHV0LCBjb2RlXSA9IHJ1bGUuc3BsaXQoJy5qczonKVxcbiAgICAgICAgcmV0dXJuIGNvZGUgPyBldmFsKGNvZGUpIDogcnVsZVxcbiAgICB9IGNhdGNoIChlKSB7IHJldHVybiBydWxlIH1cXG59XFxuLy8g6aaW6aG16ZO+5o6l5pu/5o2i5YiG57G7XFxuZnVuY3Rpb24gaW5kZXhVcmwocGFyYW0pIHtcXG4gICAgTVlfUlVMRSA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKE1ZX1JVTEUpKVxcbiAgICBsZXQgcGFnZU51bSA9IHBhcnNlSW50KHBhcmFtLnNwbGl0KCcjIyMnKVsxXSksXFxuICAgICAgICB1cmwgPSBNWV9SVUxFLnVybCxcXG4gICAgICAgIHsgZnlBbGwsIHRhYkhlYWRlciB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvQ2xhc3NUYWI/cnVsZT0nICsgUUlOR19USVRMRSwgT2JqZWN0LmFzc2lnbih7IFFJTkdfVElUTEU6IFFJTkdfVElUTEUgfSwgTVlfUlVMRSkpXFxuXFxuICAgIHVybCA9IHRhYkhlYWRlci5zZXRVcmwoZnlBbGwgPyB1cmwucmVwbGFjZSgvZnlBbGwvZywgJyQke2Z5QWxsfScpIDogdXJsLnJlcGxhY2UoL2Z5KGNsYXNzfGFyZWF8eWVhcnxzb3J0KS9nLCAnJCR7ZnkkMX0nKSlcXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL2Z5cGFnZSg/OkAoLT9cXFxcZCspQCk/KD86XFxcXCooXFxcXGQrKUApPy9nLCAoXywgc3RhcnQsIHNwYWNlKSA9PiBwYXJzZUludChzdGFydCB8fCAwKSArIDEgKyAocGFnZU51bSAtIDEpICogcGFyc2VJbnQoc3BhY2UgfHwgMSkpXFxuICAgIHVybCA9IC9eKFtcXFxcc1xcXFxTXSo/KSg/OlxcXFxbZmlyc3RQYWdlPShbXFxcXHNcXFxcU10qPylcXFxcXSk/KD86KFxcXFwuanM6W1xcXFxzXFxcXFNdKj8pKT8kLy5leGVjKHVybClcXG4gICAgaWYgKHBhZ2VOdW0gPT0gMSAmJiB1cmxbMl0pIHVybFsxXSA9IHVybFsyXVxcbiAgICBpZiAodXJsWzNdICYmICF1cmxbMV0uaW5jbHVkZXMoJy5qczonKSkgdXJsWzFdICs9IHVybFszXVxcbiAgICByZXR1cm4gcnVuQ29kZSh1cmxbMV0pXFxufVxcblxcbmZ1bmN0aW9uIHBhcmFtSGFuZGxlKHVybFBhcmFtLCB1YSwgdXJsVG1wKSB7XFxuICAgIGxldCBjaGFyc2V0LCBwYXJhbVRtcFxcbiAgICB0cnkgeyAvLyDpk77mjqXnmoTnvJbnoIHjgIFVQeWSjFJlZmVyZXLlupTor6XmmK/pppblhYjnu6fmib/pppbpobXpk77mjqVcXG4gICAgICAgIFssICwgY2hhcnNldCwgcGFyYW1UbXBdID0gdXJsVG1wLnNwbGl0KCc7JylcXG4gICAgICAgIHBhcmFtVG1wID0gcGFyYW1UbXAubWF0Y2goL157KC4qKX0kLylbMV0uc3BsaXQoJyYmJylcXG4gICAgfSBjYXRjaCAoZSkgeyBwYXJhbVRtcCA9IFtdIH1cXG4gICAgbGV0IFVzZXJBZ2VudCA9IHBhcmFtVG1wLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSksXFxuICAgICAgICBSZWZlcmVyID0gcGFyYW1UbXAuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCdSZWZlcmVyQCcpKVxcbiAgICB1cmxQYXJhbVswXSA9IHVybFBhcmFtWzBdIHx8ICdHRVQnXFxuICAgIHVybFBhcmFtWzFdID0gdXJsUGFyYW1bMV0gfHwgY2hhcnNldCB8fCAnVVRGLTgnXFxuICAgIHRyeSB7XFxuICAgICAgICB1cmxQYXJhbVsyXSA9IHVybFBhcmFtWzJdLm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpXFxuICAgIH0gY2F0Y2ggKGUpIHsgdXJsUGFyYW1bMl0gPSBbXSB9XFxuICAgIC8vIOa3u+WKoOWFqOWxgFVB5ZKM5LiK57qnUmVmZXJlclxcbiAgICBpZiAoIXVybFBhcmFtWzJdLnNvbWUoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSkpIHtcXG4gICAgICAgIGlmIChVc2VyQWdlbnQpIHVybFBhcmFtWzJdLnB1c2goVXNlckFnZW50KVxcbiAgICAgICAgZWxzZSBpZiAodWEgPT0gJ3BjJylcXG4gICAgICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKCdVc2VyLUFnZW50QCcgKyBQQ19VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgICAgIGVsc2UgaWYgKHVhID09ICdtb2JpbGUnKVxcbiAgICAgICAgICAgIHVybFBhcmFtWzJdLnB1c2goJ1VzZXItQWdlbnRAJyArIE1PQklMRV9VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgfVxcbiAgICBpZiAoUmVmZXJlciAmJiAhdXJsUGFyYW1bMl0uc29tZSgodikgPT4gdi5zdGFydHNXaXRoKCdSZWZlcmVyQCcpKSlcXG4gICAgICAgIHVybFBhcmFtWzJdLnB1c2goUmVmZXJlcilcXG4gICAgdXJsUGFyYW1bMl0gPSAneycgKyB1cmxQYXJhbVsyXS5qb2luKCcmJicpICsgJ30nXFxuICAgIHJldHVybiB1cmxQYXJhbS5qb2luKCc7JylcXG59XFxuLy8g6aKE5aSE55CG5bm25Yid5aeL5YyWY29uZmlnXFxuZnVuY3Rpb24gcnVuUHJlUnVsZShydWxlKSB7XFxuICAgIGlmICgodHlwZW9mIE1ZX1BBR0UgIT0gJ3VuZGVmaW5lZCcgJiYgIE1ZX1BBR0UgPT0gMSkgJiZcXG4gICAgICAgICAoaXNJbmRleCB8fCAhZ2V0TXlWYXIoJyRwcmVSdWxlXycgKyBNWV9SVUxFLnRpdGxlKSkpIHtcXG4gICAgICAgIGV2YWwocnVsZSlcXG4gICAgICAgIHB1dE15VmFyKCckcHJlUnVsZV8nICsgTVlfUlVMRS50aXRsZSwgJ1QnKVxcbiAgICB9XFxuICAgIGxldCBfY2ZnID0gZ2V0TXlWYXIoJ2luaXRDb25maWcnLCAne30nKVxcbiAgICBpZiAoX2NmZyAmJiBfY2ZnLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoX2NmZylcXG4gICAgfVxcbn1cXG4vLyDmraPmlofop6PmnpDpgJrnlKjlj5jph49cXG5mdW5jdGlvbiBnZW5NeVJ1bGUoKSB7XFxuICAgIGxldCBSVUxFID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSlcXG4gICAgZGVsZXRlIFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG4gICAgZGVsZXRlIFJVTEUucHJlUnVsZVxcbiAgICBkZWxldGUgUlVMRS5wYWdlTGlzdFxcbiAgICBkZWxldGUgUlVMRS5wYWdlc1xcbiAgICByZXR1cm4gUlVMRVxcbn1cXG5cXG5mdW5jdGlvbiBnZW5FeFVybCh1cmwpIHtcXG4gICAgdXJsID0gdXJsLnNwbGl0KCc7JylcXG4gICAgcmV0dXJuIHVybC5zaGlmdCgpICsgJzsnICsgcGFyYW1IYW5kbGUodXJsLCBNWV9SVUxFLnVhLCBNWV9SVUxFLnVybClcXG59XFxuXFxuaGlqYWNrTGF6eVJ1bGUgPSAkLnRvU3RyaW5nKChRSU5HX1RJVExFLCBNWV9QQVJBTVMpID0+IHtcXG4gICAgaWYgKCFNWV9SVUxFKSBNWV9SVUxFID0ge31cXG4gICAgTVlfUEFSQU1TID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoTVlfUEFSQU1TKSlcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvaGlqYWNrRW52P3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbiAgICB2YXIge1xcbiAgICAgICAgcGFyYW1IYW5kbGUsXFxuICAgICAgICBnZW5FeFVybCxcXG4gICAgICAgIGhpamFja0xhenlSdWxlLFxcbiAgICAgICAgaGlqYWNrRWxcXG4gICAgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFKVxcbn0sIFFJTkdfVElUTEUsIGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeSh7IHVybDogTVlfUlVMRS51cmwsIFJVTEU6IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShnZW5NeVJ1bGUoKSkpLCBpc0luZGV4OiBpc0luZGV4IH0pKSlcXG5cXG5mdW5jdGlvbiBoaWphY2tFbChlbCkge1xcbiAgICBpZighZWwgfHwgdHlwZW9mIGVsICE9ICdvYmplY3QnKSByZXR1cm5cXG4gICAgaWYgKCFlbC5leHRyYSkgZWwuZXh0cmEgPSB7fVxcbiAgICBlbC5jb2xfdHlwZSA9IGVsLmNvbF90eXBlIHx8IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgbGV0IE5PV19SVUxFID0gT2JqZWN0LmFzc2lnbihnZW5NeVJ1bGUoKSwgeyBwYXJhbXM6IGVsLmV4dHJhIH0pXFxuXFxuICAgIGlmICh0eXBlb2YgZWwudXJsICE9ICdzdHJpbmcnIHx8XFxuICAgICAgICBbJ3g1X3dlYnZpZXdfc2luZ2xlJywgJ2lucHV0J10uc29tZSgodikgPT4gZWwuY29sX3R5cGUgPT0gdikgfHxcXG4gICAgICAgIFsn5rW36ZiU6KeG55WMJywgJ2phdmFzY3JpcHQ6J10uc29tZSgodikgPT4gZWwudXJsLnN0YXJ0c1dpdGgodikpIHx8XFxuICAgICAgICBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3g1UnVsZScsICd3ZWJSdWxlJyxcXG4gICAgICAgICAgICAnZG93bmxvYWQnLCAnc2hhcmUnLCAnZmlsZVNlbGVjdCcsICd2aWRlbyddLnNvbWUoKHYpID0+IGVsLnVybC5zdGFydHNXaXRoKHYgKyAnOi8vJykpKSB7XFxuICAgICAgICByZXR1cm4gZWxcXG4gICAgfSBlbHNlIGlmIChlbC51cmwuc3RhcnRzV2l0aCgnaW5wdXQ6Ly8nKSkge1xcbiAgICAgICAgbGV0IHBhcmEgPSBKU09OLnBhcnNlKGVsLnVybC5zbGljZSg4KSlcXG4gICAgICAgIGlmIChwYXJhLmpzKSBwYXJhLmpzID0gaGlqYWNrTGF6eVJ1bGUgKyAnOycgKyBwYXJhLmpzXFxuICAgICAgICBlbC51cmwgPSAnaW5wdXQ6Ly8nICsgSlNPTi5zdHJpbmdpZnkocGFyYSlcXG4gICAgICAgIHJldHVybiBlbFxcbiAgICB9IGVsc2UgaWYgKGVsLnVybC5zdGFydHNXaXRoKCdjb25maXJtOi8vJykpIHtcXG4gICAgICAgIGxldCByZUluZGV4ID0gZWwudXJsLmluZGV4T2YoJy5qczonKVxcbiAgICAgICAgaWYgKHJlSW5kZXggPj0gMCkgZWwudXJsID0gZWwudXJsLnNsaWNlKDAsIHJlSW5kZXgpICsgJy5qczonICsgaGlqYWNrTGF6eVJ1bGUgKyAnOycgKyBlbC51cmwuc2xpY2UocmVJbmRleCArIDQpXFxuICAgICAgICByZXR1cm4gZWxcXG4gICAgfSBlbHNlIGlmIChlbC51cmwuc3RhcnRzV2l0aCgnc2VsZWN0Oi8vJykpIHtcXG4gICAgICAgIGxldCBwYXJhID0gSlNPTi5wYXJzZShlbC51cmwuc2xpY2UoOSkpXFxuICAgICAgICBpZiAocGFyYS5qcykgcGFyYS5qcyA9IGhpamFja0xhenlSdWxlICsgJzsnICsgcGFyYS5qc1xcbiAgICAgICAgZWwudXJsID0gJ3NlbGVjdDovLycgKyBKU09OLnN0cmluZ2lmeShwYXJhKVxcbiAgICAgICAgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSBpZiAoZWwudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcbiAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gZWwudXJsLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KUBydWxlPShbXFxcXHNcXFxcU10qKSQvKVxcbiAgICAgICAgZWwudXJsID0gdXJsXFxuICAgICAgICBOT1dfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcbiAgICAgICAgTk9XX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcbiAgICB9IGVsc2UgaWYgKGVsLnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXG4gICAgICAgIGlmIChlbC51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgZWwuZXh0cmEucnVsZSlcXG4gICAgICAgICAgICByZXR1cm4gZWxcXG4gICAgICAgIGxldCBbXywgcGF0aCwgZmxhZywgcGFyYW1zXSA9IGVsLnVybC5tYXRjaCgvXmhpa2VyOlxcXFwvXFxcXC9wYWdlXFxcXC8oLis/KSgjLio/KT8oPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxuICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXG4gICAgICAgIGVsLnVybCA9IChzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAoZWwuZXh0cmEgfHwge30pLnVybCkgfHwgJ2hpa2VyOi8vZW1wdHknICsgZmxhZyArICc/JyArIChwYXJhbXMgfHwgJycpXFxuICAgICAgICBOT1dfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxuICAgICAgICBOT1dfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxuICAgIH0gZWxzZSBpZiAoZWwudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgIGxldCByZUluZGV4ID0gZWwudXJsLmluZGV4T2YoJy5qczonKVxcbiAgICAgICAgaWYgKHJlSW5kZXggPj0gMCkgZWwudXJsID0gZWwudXJsLnNsaWNlKDAsIHJlSW5kZXgpICsgJy5qczonICsgaGlqYWNrTGF6eVJ1bGUgKyAnOycgKyBlbC51cmwuc2xpY2UocmVJbmRleCArIDQpXFxuICAgICAgICByZXR1cm4gZWxcXG4gICAgfSBlbHNlIGlmIChpc0luZGV4KSB7XFxuICAgICAgICBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCAvaGlrZXI6XFxcXC9cXFxcLyg/IWVtcHR5LiskKS8udGVzdChlbC51cmwpKSByZXR1cm4gZWxcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBlbFxcbiAgICB9XFxuICAgIGVsLmV4dHJhID0gT2JqZWN0LmFzc2lnbih7fSwgZWwuZXh0cmEsIHtcXG4gICAgICAgIHVybDogZ2VuRXhVcmwoZWwudXJsKSxcXG4gICAgICAgIFJVTEU6IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShOT1dfUlVMRSkpLFxcbiAgICAgICAgcGFnZVRpdGxlOiBpc0luZGV4ICYmIGVsLnRpdGxlXFxuICAgIH0pXFxuICAgIGVsLnVybCA9ICdoaWtlcjovL3BhZ2UvZnJhbWVMb2FkP3J1bGU9JyArIFFJTkdfVElUTEVcXG4gICAgcmV0dXJuIGVsXFxufVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgcnVuQ29kZTogcnVuQ29kZSxcXG4gICAgaW5kZXhVcmw6IGluZGV4VXJsLFxcbiAgICBwYXJhbUhhbmRsZTogcGFyYW1IYW5kbGUsXFxuICAgIHJ1blByZVJ1bGU6IHJ1blByZVJ1bGUsXFxuICAgIGdlbk15UnVsZTogZ2VuTXlSdWxlLFxcbiAgICBnZW5FeFVybDogZ2VuRXhVcmwsXFxuICAgIGhpamFja0xhenlSdWxlOiBoaWphY2tMYXp5UnVsZSxcXG4gICAgaGlqYWNrRWw6IGhpamFja0VsXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi54ix57Gz5o6o57G76Kej5p6QKlwiLFwicGF0aFwiOlwianNcIixcInJ1bGVcIjpcInZhciDmvKvnlLvop6PmnpAgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gaW5wdXQucmVwbGFjZSgnbScsJ3d3dycpO1xcbiAgICAgICAgICAgIGV2YWwocGRmaChmZXRjaFBDKHVybCksIFxcXCJib2R5JiZzY3JpcHQmJkh0bWxcXFwiKSk7XFxuICAgICAgICAgICAgdmFyIHBpY3MgPSBbXTtcXG4gICAgICAgICAgICBpZiAoY2hhcHRlckltYWdlcy5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgICAgIGNoYXB0ZXJJbWFnZXMuZm9yRWFjaChpbWcgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcGljcy5wdXNoKGltZysnQFJlZmVyZXI9Jyt1cmwpXFxuICAgICAgICAgICAgICAgIH0pfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5zY3JvbGwtaXRlbScpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gcGRmYShodG1sLCAnYm9keSYmI2ltYWdlJyk7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gZmlyc3QuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5mb3JFYWNoKGltZyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY3MucHVzaChwZGZoKGltZywgJ2ltZyYmZGF0YS1zcmN8fHNyYycpKydAUmVmZXJlcj0nK01ZX0hPTUUpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIilcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgdmFyIGxhenkgPSBgQGxhenlSdWxlPS5qczpgICsg5ryr55S76Kej5p6QO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqR5Y+j5LukKlwiLFwicGF0aFwiOlwiaW1wb3J0XCIsXCJydWxlXCI6XCJ3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvL3J1bGVzL1R6L0pNJyxmZXRjaChpbnB1dCkpXFxuJ3RvYXN0Oi8v5bey5LuO5LqR5Y+j5Luk6I635Y+W6IGa5ryr5rqQJ1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pu05paw6K+m5oOFKlwiLFwicGF0aFwiOlwiVXBcIixcInJ1bGVcIjpcImpzOlxcbnZhciByZXMgPSB7fTtcXG52YXIgaXRlbXMgPSBbXTtcXG52YXIgaW1nID0gJ2h0dHBzOi8vYmluZy5pbWcucnVuLzEzNjZ4NzY4LnBocCc7XFxuaXRlbXMucHVzaCh7XFxuICAgIGltZzogaW1nLFxcbiAgICB1cmw6IGltZyArIFxcXCIjLmpwZ1xcXCIsXFxuICAgIGRlc2M6ICcwJyxcXG4gICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcbn0pO1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxoND7jgJDogZrmvKvlj43ppojmlLbpm4bjgJE8L2g0PlxcXCIgKyAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiBncmV5XFxcIj7lm6LlrZA8L3NwYW4+JyxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVEZXRhaWwjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGx2ZXI6IE1ZX1BBUkFNUy52ZXJzaW9uIHx8IFxcXCLojrflj5bniYjmnKzlpLHotKXvvIzoh6rooYzmn6XnnItcXFwiLFxcbiAgICAgICAgaWQ6IFxcXCIyODQ3XFxcIlxcbiAgICB9XFxufSk7XFxuXFxuaWYgKGdldEl0ZW0oXFxcInJlYWRfcG9saWN5XFxcIikgIT09IFxcXCIxXFxcIikge1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSM4NzFmNzg+5pys6KeE5YiZ5pWw5o2u5p2l5rqQ5LqO572R57uc77yM5aaC5oKo5Zac5qyi77yM6K+35pSv5oyB5a6Y5pa5PC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9I2YyMGMwMD7mnKzop4TliJnku4XpmZDlhY3otLnlrabkuaDkuqTmtYHkvb/nlKjvvIzor7fkuo7lr7zlhaXlkI4yNOWwj+aXtuWGheWIoOmZpO+8jOS7u+S9lee7hOe7h+aIluS4quS6uuS4jeW+l+S7peS7u+S9leaWueW8j+aWueazleS8oOaSreaIluWUruWNluatpOinhOWImeeahOaVtOS9k+aIlumDqOWIhu+8gTwvZm9udD48L3NtYWxsPicsXFxuICAgICAgICB1cmw6ICQoJyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcInJlYWRfcG9saWN5XFxcIiwgXFxcIjFcXFwiKVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kvaDlt7LlkIzmhI/or6XljY/orq5cXFwiXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfSlcXG59XFxuXFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5L2/55So6K+05piOXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL0hlbHAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiXFxufSk7XFxuXFxubGV0IG5ld1ZlcnNpb247XFxubGV0IG15VmVyc2lvbiA9IE1ZX1BBUkFNUy52ZXJzaW9uO1xcbnRyeSB7XFxuICAgIG5ld1ZlcnNpb24gPSBKU09OLnBhcnNlKGZldGNoUEMoXFxcImh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9kZXYvZ2V0YnlpZD9pZD0yODQ3XFxcIiwge1xcbiAgICAgICAgdGltZW91dDogMTAwMFxcbiAgICB9KSkucmVzdWx0LnZlcjtcXG59IGNhdGNoIChlKSB7XFxuICAgIHRvYXN0KFxcXCLpgZPplb/ku5PlupPmir3po47kuobvvIzmnKzmrKHmnKrmo4DmtYvliLDmlrDniYjkv6Hmga9cXFwiKTtcXG4gICAgbmV3VmVyc2lvbiA9IG15VmVyc2lvbjtcXG59XFxubGV0IGlzVXBkYXRlID0gTnVtYmVyKG5ld1ZlcnNpb24pID4gTnVtYmVyKG15VmVyc2lvbik7XFxubGV0IGlzVmVyID0gTnVtYmVyKG5ld1ZlcnNpb24pID09PSBOdW1iZXIobXlWZXJzaW9uKTtcXG5pZiAoaXNVcGRhdGUpIHtcXG4gICAgbG9nKCfmnInmlrDniYjmnKw6JyArIG5ld1ZlcnNpb24gKyAnLOW9k+WJjTonICsgbXlWZXJzaW9uKTtcXG59XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiBpc1VwZGF0ZSA/IFxcXCLwn4aZ5paw54mI5pysXFxcIiA6IFxcXCLop4TliJnlj5HluIPpobUm5Y+N6aaIXFxcIixcXG4gICAgdXJsOiBpc1VwZGF0ZSA/IFxcXCJydWxlOi8vNXJXMzZaaVU2S2VHNTVXTTZhYVc2YUcxNmFLUjZZR1Q2S2VFNVlpWjQ0Q1E2SUdhNXJ5cjhKK1VydU9Ba2UrL3BXaHZiV1ZmY25Wc1pWOTFjbXp2djZWb2RIUndPaTh2YUdsclpYSXVibTlyYVdFdWNISmxjM012YUdsclpYSjFiR1V2Y25Wc1pXeHBjM1F1YW5OdmJqOXBaRDB5T0RRM1xcXCIgOiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVEZXRhaWwjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbHZlcjogTVlfUEFSQU1TLnZlcnNpb24gfHwgXFxcIuiOt+WPlueJiOacrOWksei0pe+8jOiHquihjOafpeeci1xcXCIsXFxuICAgICAgICBpZDogXFxcIjI4NDdcXFwiXFxuICAgIH1cXG59KTtcXG5jb25zdCBDb2xvciA9IFxcXCIjMTlCODlEXFxcIjtcXG52YXIgZGVzX2Rlc2MgPSAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzEyMzBdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDliZTpmaTml6DnlKjmupDvvIzmi4nov5znqIvvvIzmm7TmlrDmtbfpmJToh7M3LjI3PC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4nPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzEyMThdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDkvJjljJbkuIvovb3mqKHlvI/vvIzpnIDmm7TmlrDmnIDmlrDniYjmnKzlnLDotYTmupDnrqHnkIbvvIzmi4nov5znqIvvvIzmm7TmlrDmtbfpmJToh7M3LjI2PC9icj7ikaHkv67lpI3pg6jliIZidWc8YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4nPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzExMjZdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDlop7liqBBUFDlm77mupDvvJrmi4nov5znqIvvvIzmm7TmlrDmtbfpmJToh7M3LjIzPC9icj7ikaHkv67lpI3pg6jliIZidWc8YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4nPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzExMTZdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDlop7liqDkuInlm77mupBQU++8muaLiei/nOeoi++8jOabtOaWsOa1t+mYlOiHszcuMjI8L2JyPuKRoeS/ruWkjemDqOWIhmJ1Zzxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbic8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTExM108L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOS/ruWkjeWMheWtkOmDqOWIhua8q+eUu+eroOiKguWIl+ihqOWumuS9jemUmeivr1BT77ya5ouJ6L+c56iLPC9icj7ikaHkv67lpI3pg6jliIZidWc8YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4nPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzExMDhdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDmm7TmlrDogZrmvKvmnKzlnLDkv67lpI3lrZDpobXpnaLliqjmgIHliIbnsbtidWfvvIzkv67lpI3pg6jliIbmupDvvIjlpJrlpJrvvIxDQ++8iTwvYnI+PGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuICAgICc8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTEwMl08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOabtOaNouiBmua8q+acrOS9k++8jOabtOaNoumDqOWIhuagt+W8j++8jOS/ruWkjemDqOWIhua6kOOAguWPr+ebtOaOpeiuoumYheS7k+W6k+mTvuaOpeabtOaWsO+8iFBT77ya6ZqP57yY5pu077yJPC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFsxMDA1XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5pu05o2i6IGa5ryr5pys5L2T77yM5Yqg5YWl5pyA5paw54mI57yT5a2Y5py65Yi25a6e546w5LqM5qyh5omT5byA56eS5byA77yM5L+u5aSN6YOo5YiG5rqQPC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswOTI2XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5pu05o2i6L+c56iL5LuT5bqT77yM5L+u5aSN6YOo5YiG5rqQPC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswODE2XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5pu05paw6IGa5ryr5pys5L2T77yM5L+u5aSN6YOo5YiG5rqQPC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswODA5XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5Yig6Zmk5aSx5pWI5rqQPC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswNzE3XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5aKe5Yqg5Yqo5oCB5YiH5o2i5o6S5bqP77yMUFPvvJrmvKvnlLvlkKc8YnI+4pGh5pCs5qih5p2/UeWKqOaAgeWIhuexuybliqjmgIHmjpLluo/oh7PogZrmvKvvvZxQU++8mumcgOabtOaWsOiBmua8qzwvYnI+PGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuXFxuICAgICc8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMDUyNl08L2gxPjw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDkv67lpI3ljIXlrZDpgInpm4bplJnor68m6Kej5p6Q6ZSZ6K+vPGJyPjxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbiAgICAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzA1MjddPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDmlrDlop7oi6XlubLlm77mupA8YnI+PGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuXFxuICAgICc8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMDUyOV08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOe+juWMlumDqOWIhuWbvua6kDxicj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswNTMwXTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5pu05paw6IGa5ryr5qih5p2/PGJyPjxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbiAgICAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzA2MDJdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDkv67lpI0m576O5YyW5aW95ryrODxicj7ikaHnvo7ljJblhavmnoHvvZxQU++8mumcgOa4heeQhue8k+WtmDwvYnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswNjA2XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5pu05paw5YyF5a2Q77yM5bCd6K+V6Kej5Yaz5pS26JeP6Zeu6aKY77yMUFPvvJrpnIDmm7TmlrDogZrmvKs8YnI+PGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuXFxuICAgICc8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMDYwOF08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOS/ruWkjemsvOiQneiOieaQnOe0ojxicj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswNjE2XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg576O5YyW6YOo5YiG5Zu+5rqQ77yMUFPvvJrpnIDmuIXnkIbnvJPlrZg8YnI+PGJyPjwvPGJsb2NrcXVvdGU+J1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTogJ+abtOaWsOivpuaDhSA8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7lsZXlvIA+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICBpbWc6IFxcXCJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW9yZS8xOTcucG5nXFxcIixcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChqamlkLCBkZWNpZCwgZGVzX2Rlc2MpID0+IHtcXG4gICAgICAgIGlmIChnZXRNeVZhcihcXFwiampzXFxcIiwgXFxcIuaUtui1t1xcXCIpID09IFxcXCLmlLbotbdcXFwiKSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcImpqc1xcXCIsIFxcXCLlsZXlvIBcXFwiKTtcXG5cXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBqamlkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5pu05paw6K+m5oOFIDxzbWFsbD48c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMxOUI4OURcXFwiPuaUtui1tz48L3NwYW4+PC9zbWFsbD48L3NtYWxsPidcXG4gICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgICAgICAgICAgICAgbGluZVNwYWNpbmc6IDMsXFxuICAgICAgICAgICAgICAgICAgICBpZDogZGVjaWRcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzgwODA4MFxcXCI+JyArIGRlc19kZXNjICsgJzwvc3Bhbj4nXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJqanNcXFwiLCBcXFwi5pS26LW3XFxcIik7XFxuXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogamppZFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+abtOaWsOivpuaDhTxzbWFsbD48c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMxOUI4OURcXFwiPuWxleW8gD48L3NwYW4+PC9zbWFsbD48L3NtYWxsPidcXG4gICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgICAgICAgICAgICAgbGluZVNwYWNpbmc6IDMsXFxuICAgICAgICAgICAgICAgICAgICBpZDogZGVjaWRcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzgwODA4MFxcXCI+JyArIGRlc19kZXNjLnN1YnN0cigwLCAxNTApXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9XFxuXFxuICAgIH0sIE1ZX1JVTEUgKyBcXFwiX2pqaWRcXFwiLCBNWV9SVUxFICsgXFxcIl9kZWNpZFxcXCIsIGRlc19kZXNjKSxcXG4gICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IE1ZX1JVTEUgKyBcXFwiX2pqaWRcXFwiXFxuICAgIH1cXG59KTtcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzgwODA4MFxcXCI+JyArIGRlc19kZXNjLnN1YnN0cigwLCAxNTApLFxcbiAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB0ZXh0U2l6ZTogMTQsXFxuICAgICAgICBsaW5lU3BhY2luZzogMyxcXG4gICAgICAgIGlkOiBNWV9SVUxFICsgXFxcIl9kZWNpZFxcXCJcXG4gICAgfVxcbn0pO1xcblxcbnJlcy5kYXRhID0gaXRlbXM7XFxuc2V0SG9tZVJlc3VsdChyZXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5L2/55So5biu5YqpKlwiLFwicGF0aFwiOlwiSGVscFwiLFwicnVsZVwiOlwianM6XFxudmFyIHJlcyA9IHt9O1xcbnZhciBpdGVtcyA9IFtdO1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTon5LqM57qn6aG16Z2i5qCH6aKY5Y+M5Ye75LyY5YyW77yM5Zyo6aG26YOo5YiZ5Y+M5Ye75Yiw5bqV6YOo77yM5ZCm5YiZ5Y+M5Ye75Zue6aG26YOoJyxcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxufSk7XFxuXFxuaXRlbXMucHVzaCh7XFxuICAgIGltZzogJ2h0dHBzOi8vczEuYXgxeC5jb20vMjAyMi8xMS8wNC94TGhnb1IuanBnJyxcXG4gICAgZGVzYzogJzAnLFxcbiAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnXFxufSk7XFxuXFxuaXRlbXMucHVzaCh7XFxuICAgIGltZzogJ2h0dHBzOi8vczEuYXgxeC5jb20vMjAyMi8xMS8wNC94TGhjdzkuanBnJyxcXG4gICAgZGVzYzogJzAnLFxcbiAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnXFxufSk7XFxuXFxucmVzLmRhdGEgPSBpdGVtcztcXG5zZXRIb21lUmVzdWx0KHJlcyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKIqXCIsXCJwYXRoXCI6XCJzZWFyY2hcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGNvbnZlcnQxKHN0cikge1xcbiAgICBsZXQgYyA9IHN0ci5zcGxpdChcXFwiO1xcXCIpXFxuICAgIHJldHVybiB7XFxuICAgICAgICDliJfooag6IGNbMF0sXFxuICAgICAgICDmoIfpopg6IGNbMV0sXFxuICAgICAgICDpk77mjqU6IGNbMl0sXFxuICAgICAgICDmj4/ov7A6IGNbM10sXFxuICAgICAgICDor6bmg4U6IGNbNF0sXFxuICAgICAgICDlm77niYc6IGNbNV1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBtZXJnZShzb3VyY2UsIHRhcmdldCkge1xcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSlcXG4gICAgZm9yIChsZXQgaSBpbiBrZXlzKSB7XFxuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBzb3VyY2Vba2V5c1tpXV1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiDmkJzntKIob2JqKSB7XFxuICAgIHZhciBkID0gW107XFxuICAgIGlmICgkLnR5cGUob2JqKSA9PSBcXFwic3RyaW5nXFxcIikge1xcbiAgICAgICAgb2JqID0gY29udmVydDEob2JqKVxcbiAgICB9XFxuICAgIGlmIChvYmou6KeE5YiZKSB7XFxuICAgICAgICBsZXQgYyA9IGNvbnZlcnQxKG9iai7op4TliJkpXFxuICAgICAgICBtZXJnZShjLCBvYmopXFxuICAgIH1cXG4gICAgbGV0IGFyciA9IHBkZmEoZ2V0UmVzQ29kZSgpLCBvYmou5YiX6KGoKTtcXG4gICAgICAgaWYgKG9iai7liJfooajlpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIGFyciA9IG9iai7pk77mjqXlpITnkIYoYXJyKVxcbiAgICAgICAgfVxcbiAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGxldCB1cmwgPSBwZChpdCwgb2JqLumTvuaOpSlcXG4gICAgICAgIGlmIChvYmou6ZO+5o6l5aSE55CGICE9IG51bGwpIHtcXG4gICAgICAgICAgICB1cmwgPSBvYmou6ZO+5o6l5aSE55CGKHVybClcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXQsIG9iai7moIfpopgpXFxuICAgICAgICBpZiAob2JqLuagh+mimOWkhOeQhiAhPSBudWxsKSB7XFxuICAgICAgICAgICAgdGl0bGUgPSBvYmou5qCH6aKY5aSE55CGKHRpdGxlKVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHBpYyA9IHBkKGl0LCBvYmou5Zu+54mHKVxcbiAgICAgICAgaWYgKG9iai7lm77niYflpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHBpYyA9IG9iai7lm77niYflpITnkIYocGljKVxcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogb2JqLuagh+mimCA/IHBkZmgoaXQsIG9iai7moIfpopgpIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJyNhdXRvQ2FjaGUjJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZGVzYzogb2JqLuaPj+i/sCA/IHBkZmgoaXQsIG9iai7mj4/ov7ApIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29udGVudDogb2JqLuivpuaDhSA/IHBkZmgoaXQsIG9iai7or6bmg4UpIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogcGljLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHl0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHlwaWM6IHBpYyxcXG4gICAgICAgICAgICAgICAgeXVybDogdXJsLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsJycpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG52YXIgdG9vbCA9IHtcXG4gICAg5pCc57SiOiDmkJzntKJcXG59XFxuJC5leHBvcnRzID0gdG9vbFwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Zu+54mH6Kej5a+GKlwiLFwicGF0aFwiOlwiaW1nREVTXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMuaW1nRGVjcnlwdCA9IGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgamF2YUltcG9ydCA9IG5ldyBKYXZhSW1wb3J0ZXIoKTtcXG4gICAgamF2YUltcG9ydC5pbXBvcnRQYWNrYWdlKFxcbiAgICAgICAgUGFja2FnZXMuY29tLmV4YW1wbGUuaGlrZXJ2aWV3LnV0aWxzLFxcbiAgICAgICAgUGFja2FnZXMuamF2YS5sYW5nLFxcbiAgICAgICAgUGFja2FnZXMuamF2YS5zZWN1cml0eSxcXG4gICAgICAgIFBhY2thZ2VzLmphdmEudXRpbCxcXG4gICAgICAgIFBhY2thZ2VzLmphdmEuaW8sXFxuICAgICAgICBQYWNrYWdlcy5qYXZhLnRleHQsXFxuICAgICAgICBQYWNrYWdlcy5qYXZheC5jcnlwdG8sXFxuICAgICAgICBQYWNrYWdlcy5qYXZheC5jcnlwdG8uc3BlY1xcbiAgICApO1xcbiAgICB3aXRoKGphdmFJbXBvcnQpIHtcXG4gICAgICAgIGxldCBieXRlcyA9IEZpbGVVdGlsLnRvQnl0ZXMoaW5wdXQpO1xcbiAgICAgICAgZnVuY3Rpb24gZGVjcnlwdERhdGEoYkFycikge1xcbiAgICAgICAgICAgIHZhciBnZW5lcmF0ZVNlY3JldCA9IFNlY3JldEtleUZhY3RvcnkuZ2V0SW5zdGFuY2UoXFxcImRlc2VkZVxcXCIpLmdlbmVyYXRlU2VjcmV0KG5ldyBERVNlZGVLZXlTcGVjKFN0cmluZygnT1c4NFU4RWVyZGI5OXJ0c1RYV1NJTERPJykuZ2V0Qnl0ZXMoKSkpO1xcbiAgICAgICAgICAgIHZhciBjaXBoZXIgPSBDaXBoZXIuZ2V0SW5zdGFuY2UoXFxcImRlc2VkZS9DQkMvUEtDUzVQYWRkaW5nXFxcIik7XFxuICAgICAgICAgICAgY2lwaGVyLmluaXQoMiwgZ2VuZXJhdGVTZWNyZXQsIG5ldyBJdlBhcmFtZXRlclNwZWMoU3RyaW5nKCdTSzhibmNWdScpLmdldEJ5dGVzKCkpKTtcXG4gICAgICAgICAgICByZXR1cm4gY2lwaGVyLmRvRmluYWwoYkFycik7XFxuICAgICAgICB9XFxuICAgICAgICAvL2RlY3J5cHREYXRh5Li66Kej5a+G5pa55rOVXFxuICAgICAgICBieXRlcyA9IGRlY3J5cHREYXRhKGJ5dGVzKTtcXG4gICAgICAgIHJldHVybiBGaWxlVXRpbC50b0lucHV0U3RyZWFtKGJ5dGVzKTtcXG4gICAgfVxcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkRFUypcIixcInBhdGhcIjpcImRlc1wiLFwicnVsZVwiOlwidmFyIGphdmFJbXBvcnQgPSBuZXcgSmF2YUltcG9ydGVyKCk7XFxuamF2YUltcG9ydC5pbXBvcnRQYWNrYWdlKFxcbiAgICBQYWNrYWdlcy5qYXZhLmxhbmcsXFxuICAgIFBhY2thZ2VzLmphdmEuc2VjdXJpdHksXFxuICAgIFBhY2thZ2VzLmphdmEudXRpbCxcXG4gICAgUGFja2FnZXMuamF2YS5pbyxcXG4gICAgUGFja2FnZXMuamF2YS50ZXh0LFxcbiAgICBQYWNrYWdlcy5qYXZheC5jcnlwdG8sXFxuICAgIFBhY2thZ2VzLmphdmF4LmNyeXB0by5zcGVjXFxuKTtcXG53aXRoKGphdmFJbXBvcnQpIHtcXG4gICBmdW5jdGlvbiBEZShzdHIpIHtcXG4gICAgICAgIHZhciBnZW5lcmF0ZVNlY3JldCA9IFNlY3JldEtleUZhY3RvcnkuZ2V0SW5zdGFuY2UoXFxcImRlc2VkZVxcXCIpLmdlbmVyYXRlU2VjcmV0KG5ldyBERVNlZGVLZXlTcGVjKFN0cmluZygnT1c4NFU4RWVyZGI5OXJ0c1RYV1NJTERPJykuZ2V0Qnl0ZXMoKSkpO1xcbiAgICAgICAgdmFyIGluc3RhbmNlID0gQ2lwaGVyLmdldEluc3RhbmNlKFxcXCJkZXNlZGUvQ0JDL1BLQ1M1UGFkZGluZ1xcXCIpO1xcbiAgICAgICAgaW5zdGFuY2UuaW5pdCgyLCBnZW5lcmF0ZVNlY3JldCwgbmV3IEl2UGFyYW1ldGVyU3BlYyhTdHJpbmcoJ1NLOGJuY1Z1JykuZ2V0Qnl0ZXMoKSkpO1xcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpbnN0YW5jZS5kb0ZpbmFsKF9iYXNlNjQuZGVjb2RlKHN0ciwgMikpKTsgICAgICAgIFxcbiAgICB9XFxufVxcblxcbi8qXFxuZXZhbChnZXRDcnlwdG9KUygpKVxcbnZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgnT1c4NFU4RWVyZGI5OXJ0c1RYV1NJTERPJylcXG52YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgnU0s4Ym5jVnUnKVxcblxcbmZ1bmN0aW9uIERlKGRhdGEsIGVuY29kaW5nKSB7XFxuICAgIHZhciBkZWNyeXB0ZWQgPSBDcnlwdG9KUy5UcmlwbGVERVMuZGVjcnlwdChkYXRhLCBrZXksIHtcXG4gICAgICAgIGl2OiBpdixcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgIH0pO1xcbiAgICBpZiAoIWVuY29kaW5nKSB7XFxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgfVxcbiAgICByZXR1cm4gZGVjcnlwdGVkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5CYXNlNjQpO1xcbn07XFxuKi9cIn1dIiwiaWNvbiI6Imh0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS8yOC5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment