xiaomianao666

小程序:AI聚集

Apr 30th, 2024
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@AI聚集@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiQUnogZrpm4YiLCJhdXRob3IiOiIiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyNmeWNsYXNzIyNmeXBhZ2UiLCJ2ZXJzaW9uIjo1NCwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IummlumhtSbosYzosYYm6Iy25p2v54uQJuaQnOeJhybpnZLpuqYm55S15b2x54uXJuiMtuadr+iZjiblnJ/mi6jpvKAiLCJ0eXBlIjoidG9vbCIsImNsYXNzX3VybCI6ImhvbWUmaHR0cHM6Ly93d3cud2FuZG91LnByby8maHR0cHM6Ly9jdXBmb3guYXBwLyZodHRwOi8vc291cGlhbi5kZS8maHR0cHM6Ly93d3cucWltYWl0di5jb20vJmh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS95aW5na3UvJmh0dHBzOi8vd3d3LjcyNTk5OC5jb20veWluZ2t1Jmh0dHBzOi8vd3d3LnRic2R5LmNvbS9tL2luZGV4Lmh0bWwiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBteXVybCA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdO1xuXG5sZXQgYW5jaG9ySWQgPSBteXVybDtcbmxldCBqcyA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS94NWFpXCIpKE1ZX1JVTEUudGl0bGUsIGFuY2hvcklkKTtcblxuZnVuY3Rpb24gbG9hZFVybChteXVybCwgbXlydWxlLCBtKSB7XG4gICAgc2V0UmVzdWx0KFt7XG4gICAgICAgIGNvbF90eXBlOiBcIng1X3dlYnZpZXdfc2luZ2xlXCIsXG4gICAgICAgIHVybDogbXl1cmwsXG4gICAgICAgIGRlc2M6IFwiZmxvYXQmJnRvcFwiLCAgICAgICAgXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBmbG9hdFZpZGVvOiB0cnVlLFxuICAgICAgICAgICAgY2FuQmFjazogdHJ1ZSxcbiAgICAgICAgICAgIHVybEludGVyY2VwdG9yOiAkLnRvU3RyaW5nKChNWV9SVUxFLG1vYmFuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiAn5LqR55uY5rGH5b2xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdXJsICsgJz8/ZnlwYWdlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dClcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vd3d3LnFpbWFpdHYuY29tL2luZGV4LnBocD9zJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXCJib2R5JiZpZnJhbWVcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoYXJyWzBdLCAnaWZyYW1lJiZzcmMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgTVlfUlVMRSxtb2JhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1PSdoaWtlcjovL2VtcHR5P3U9JyArIHVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1PW1vYmFuPT0nMCc/dTp1KycjaW1tZXJzaXZlVGhlbWUjJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IE1ZX1JVTEUudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2x54mH6K+m5oOFJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IE1ZX1JVTEUuZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZVJ1bGU6IE1ZX1JVTEUucHJlUnVsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXM6IE1ZX1JVTEUucGFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZFJ1bGU6IE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybCwgTVlfUlVMRSxtb2JhbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovL2N1cGZveC5hcHAvXCIpICYmICFpbnB1dC5zdGFydHNXaXRoKFwiaHR0cHM6Ly81MXNvdWp1LmNvbS9cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vXCIpICYmICFpbnB1dC5zdGFydHNXaXRoKFwiaHR0cHM6Ly93d3cud2FuZG91LnByby9cIikgJiYgIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwOi8vc291cGlhbi54eXovXCIpICYmICFpbnB1dC5zdGFydHNXaXRoKFwiaHR0cHM6Ly93d3cucWltYWl0di5jb20vXCIpICYmICFcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc3RhcnRzV2l0aChcImh0dHBzOi8vd3d3LjcyNTk5OC5jb20vXCIpICYmICFpbnB1dC5pbmNsdWRlcyhcInNlYXJjaFwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBNWV9SVUxFLG1vYmFuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdT0naGlrZXI6Ly9lbXB0eT91PScgKyB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdT1tb2Jhbj09JzAnP3U6dSsnI2ltbWVyc2l2ZVRoZW1lIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZTogTVlfUlVMRS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9seeJh+ivpuaDhScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IE1ZX1JVTEUuZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlUnVsZTogTVlfUlVMRS5wcmVSdWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kUnVsZTogTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGlucHV0LCBNWV9SVUxFLG1vYmFuKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIE1ZX1JVTEUsZ2V0SXRlbSgnYWknLCcwJykpLFxuICAgICAgICAgICAganM6IGpzLFxuICAgICAgICB9XG4gICAgfV0pO1xufVxuXG5pZiAobXl1cmwgPT0gJ2hvbWUnKSB7XG4gICAgcmVmcmVzaFg1RGVzYygnMCcpXG4gICAgJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvcHJvJylcbn0gZWxzZSB7XG4gICAgbG9hZFVybChteXVybCwgTVlfUlVMRSk7XG59Iiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHkjIyoqIiwiZ3JvdXAiOiLikaHpn7Pop4bpopEiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xubGV0IGtleSA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLngrnmiJHlvIDlp4vogZrlkIjmkJzntKJcIiArIGtleSxcbiAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL3NvdXBcIixcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IFwi5pCc57SiXCIgKyBrZXksXG4gICAgICAgIGtleToga2V5XG4gICAgfVxufSk7XG5cbnNldFJlc3VsdChkKTsiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwiZGV0YWlsX2ZpbmRfcnVsZSI6ImpzOlxubG9nKE1ZX1VSTClcblxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9wJykpLnJ1bGUpIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6InZhciB1YT0nJztcbnJlcXVpcmUoJ2h0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2pzL+mihOWkhOeQhi5qcycpOyIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqfop6PmnpBcIixcInBhdGhcIjpcInBcIixcInJ1bGVcIjpcImpzOlxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIHVwZGF0ZUl0ZW0oJ3BhcnNldCcsIHtcXG4gICAgICAgIHRpdGxlOiBnZXRJdGVtKCfll4XmjqInLCAn6KeG6aKR5ZeF5o6iJyksXFxuICAgIH0pO1xcbiAgICBjbGVhck15VmFyKCd3ZWJ1cmwnKTtcXG4gICAgcHV0TXlWYXIoJ2JtJywgJzAnKTtcXG4gICAgLy9iYWNrKGZhbHNlKVxcbn0pKTtcXG5cXG5cXG52YXIgQml0VFM9W107XFxuXFxuLy9wdXRNeVZhcihcXFwibXViYW5cXFwiLCB75ZCN56ewOifmnoHlrqLlvbHop4YnfSlcXG5cXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3p0b29scycpKS5ydWxlKVxcblxcbnZhciB1cmwgPSAnJztcXG5pZiAoZ2V0TXlWYXIoJ3dlYnVybCcsICcnKSA9PSAnJykge1xcbiAgICAvL01ZX1VSTCA9IE1ZX1VSTC5yZXBsYWNlKCcjaW1tZXJzaXZlVGhlbWUjJywgJycpO1xcbiAgICBNWV9VUkw9TVlfVVJMLmluY2x1ZGVzKCcjJyk/TVlfVVJMLnNwbGl0KCcjJylbMF06TVlfVVJMO1xcbiAgICB2YXIgdT1nZXRQYXJhbShcXFwidVxcXCIpXFxuICAgIGlmKHU9PXVuZGVmaW5lZCl7XFxuICAgICAgICB1PU1ZX1VSTFxcbiAgICB9XFxuICAgIGxvZygndTonK3UpXFxuICAgIHVybCA9IGdldFR1cmwodSk7XFxuICAgIHB1dE15VmFyKCd3ZWJ1cmwnLCB1cmwpO1xcblxcbiAgICB2YXIga2V5cyA9IE1ZX1BBUkFNUztcXG4gICAgdmFyIGZyb20gPSBrZXlzLmZyb20gPyBrZXlzLmZyb20gOiAnJztcXG4gICAgdmFyIGR0aXRsZSA9IGtleXMucGFnZVRpdGxlID8ga2V5cy5wYWdlVGl0bGUgOiAnJztcXG59IGVsc2Uge1xcbiAgICB1cmwgPSBnZXRNeVZhcignd2VidXJsJyk7XFxufVxcbnZhciBkdXJsPXVybDtcXG5sb2coJ+S6jOe6p+mhtemdojonICsgZHVybCk7XFxuXFxuaWYgKGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMScpIHtcXG4gICAgdmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KS5tYXRjaCgvciBwbGF5ZXJfLio/PSguKj8pPC8pWzFdKVxcbiAgICAgICAgICAgIHZhciB1cmwgPSBodG1sLnVybFxcbiAgICAgICAgICAgIGlmIChodG1sLmVuY3J5cHQgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKHVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gJzInKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKGJhc2U2NERlY29kZSh1cmwpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKC9tM3U4fG1wNC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZpZGVvOi8vJyArIGlucHV0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAndmlkZW86Ly8nICsgaW5wdXRcXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG4gICAgdHJ5IHtcXG4gICAgICAgIE1ZX1VSTCA9ICdoaWtlcjovL2VtcHR5IyMnICsgdXJsXFxuICAgICAgICByZXF1aXJlKGNvbmZpZy7oh6rliqjljLnphY0pO1xcbiAgICAgICAg6Ieq5Yqo5LqM57qnKGxhenkpO1xcbiAgICAgICAgcHV0TXlWYXIoJ2JtJywgJzEnKVxcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIHB1dE15VmFyKCdibScsICcwJylcXG4gICAgfVxcbn1cXG5cXG5cXG5sb2coJ+aooeadvzonICsgZ2V0TXlWYXIoJ2JtJywgJzAnKSlcXG5cXG5pZiAoZ2V0TXlWYXIoJ2JtJywgJzAnKSA9PSAnMCcpIHtcXG5cXG4gICAgdmFyIGQgPSBbXTtcXG4gICAgTVlfVVJMID0gdXJsXFxuXFxuICAgIGZ1bmN0aW9uIGdldFRpdGxlKGh0bWwsIHMpIHtcXG4gICAgICAgIHZhciB0aXRsZSA9ICcnO1xcbiAgICAgICAgdmFyIHRpdGxlcyA9IHBkZmEoaHRtbCwgcyk7XFxuICAgICAgICAvL2xvZyh0aXRsZXMpO1xcbiAgICAgICAgaWYgKHRpdGxlcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aXRsZVxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChsZXQgeCBvZiB0aXRsZXMpIHtcXG4gICAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnPGZvbnQnKSkge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBkZmgoeCwgJ2gxLS1mb250JiZUZXh0Jyk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh4LmluY2x1ZGVzKCc8c3BhbicpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gcGRmaCh4LCAnaDEtLXNwYW4mJlRleHQnKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBkZmgoeCwgJ1RleHQnKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRpdGxlICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aXRsZVxcbiAgICB9XFxuXFxuICAgIHZhciBodG1sID0gZmV0Y2hQQyh1cmwpXFxuICAgIHZhciB0aXRsZSA9IGdldFRpdGxlKGh0bWwsICdib2R5JiZoMScpO1xcbiAgICBpZiAodGl0bGUgPT0gJycpIHtcXG4gICAgICAgIHRpdGxlID0gZ2V0VGl0bGUoaHRtbCwgXFxcImJvZHkmJmgzW2NsYXNzKj0ndGl0bGUnXVxcXCIpO1xcbiAgICB9XFxuICAgIGlmICh0aXRsZSA9PSAnJykge1xcbiAgICAgICAgdGl0bGUgPSBnZXRUaXRsZShodG1sLCBcXFwiaGVhZCYmdGl0bGVcXFwiKTtcXG4gICAgfVxcblxcbiAgICBpZiAoZHRpdGxlICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBzZXRQYWdlVGl0bGUoZHRpdGxlKVxcbiAgICB9IGVsc2UgaWYgKGZyb20gPT0gJ2hvbWUnIHx8Z2V0UGFnZVRpdGxlKCkuaW5jbHVkZXMoJ+ivpuaDhScpKSB7XFxuICAgICAgICBpZiAodGl0bGUgIT0gJycpIHtcXG4gICAgICAgICAgICBpZiAodGl0bGUuaW5jbHVkZXMoJy0nKSkge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnNwbGl0KCctJylbMF0udHJpbSgpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0aXRsZSlcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBsZXQgYWxpc3QgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiZhXFxcIik7XFxuXFxuICAgIGxldCBhcnIgPSBhbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAvL2h0bWw6IGl0LFxcbiAgICAgICAgICAgIHRleHQ6IHBkZmgoaXQsIFxcXCJhJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCJhJiZ0aXRsZVxcXCIpLFxcbiAgICAgICAgICAgIGhyZWY6IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybClcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIC8vbG9nKGFycik7XFxuICAgIGxldCBkZWJ1ZyA9IGZhbHNlO1xcblxcbiAgICBmdW5jdGlvbiBjbGVhclRleHQoaXQpIHtcXG4gICAgICAgIHJldHVybiBpdC5yZXBsYWNlKC/nrKx86ZuGfOeroC9nLCBcXFwiXFxcIik7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gaXNNb3ZpZShpdCkge1xcbiAgICAgICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5vZmlsZShpdCkpIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdGl0ID0gaXQudGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgICAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaXQgPT0gXFxcIlxcXCIgfHwgaXQubGVuZ3RoID4gOCkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8v5o6S6ZmkXFxuICAgICAgICBsZXQgcmVnID0gL1xcXFwufOmrmOa4heebtOaSrXzlhpnnnJ/mjqjojZB85b2x6ZmifOW9seinhnzok53lhYnnlLXlvbF86auY5riF55S15b2xfOesrOS4gOWto3znrKzkuozlraN856ys5LiJ5a2jfOesrOWbm+Wto3znrKzkupTlraMvO1xcbiAgICAgICAgaWYgKHRpdCAhPSBcXFwiXFxcIiAmJiAhdGl0LmluY2x1ZGVzKGl0KSB8fCByZWcudGVzdChpdCkpIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaXQubWF0Y2goL+WOn+eUu3zlpIfnlKh86JOd5YWJfOi2hea4hXzpq5jmuIV85q2j54mHfOmfqeeJiHw0S3w0a3wxMDgwUHw3MjBQfFRDfEhEfEJEfOS4reWtly8pXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gbm90Q2hhcHRlcihpdCkge1xcbiAgICAgICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaXQudGV4dC5tYXRjaCgvWzAtOV1cXFxcLlswLTld5YiGLyk7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gaXNDaGFwdGVyKGl0LCBwcmUsIG5leHQpIHtcXG4gICAgICAgIGlmIChub3RDaGFwdGVyKGl0KSkge1xcbiAgICAgICAgICAgIC8v5LyY5YWI5o6S6ZmkXFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy/liKTmlq3mmK/kuI3mmK/nlLXlvbFcXG4gICAgICAgIGlmIChpc01vdmllKGl0KSkge1xcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGlzQ2hhcHRlcjAoaXQsIHByZSkgfHwgaXNDaGFwdGVyMChpdCwgbmV4dCk7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0Q2hhcHRlck51bShpdCkge1xcbiAgICAgICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIC0xO1xcbiAgICAgICAgfVxcbiAgICAgICAgaXQgPSBpdC50ZXh0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGl0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIC0xO1xcbiAgICAgICAgfVxcbiAgICAgICAgaXQgPSBjbGVhclRleHQoaXQpO1xcbiAgICAgICAgbGV0IHJlZyA9IC9eWzAtOV0qJC87XFxuICAgICAgICBpZiAoIXJlZy50ZXN0KGl0KSkge1xcbiAgICAgICAgICAgIHJldHVybiAtMTtcXG4gICAgICAgIH1cXG4gICAgICAgIGl0ID0gcGFyc2VJbnQoaXQpO1xcbiAgICAgICAgaWYgKGlzTmFOKGl0KSkge1xcbiAgICAgICAgICAgIHJldHVybiAtMTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpdCA+IDE5MDAgJiYgaXQgPCAyMTAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIC0xO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGl0O1xcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIGlzQ2hhcHRlcjAoaXQsIGJyb3RoZXIpIHtcXG4gICAgICAgIC8qaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKHtcXG4gICAgICAgICAgICAgICAgaXQ6IGl0LFxcbiAgICAgICAgICAgICAgICBicm90aGVyOiBicm90aGVyXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9Ki9cXG4gICAgICAgIGl0ID0gZ2V0Q2hhcHRlck51bShpdCk7XFxuICAgICAgICAvL2lmIChkZWJ1ZykgbG9nKGl0KTtcXG4gICAgICAgIGlmIChpdCA8IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICBicm90aGVyID0gZ2V0Q2hhcHRlck51bShicm90aGVyKTtcXG4gICAgICAgIC8vaWYgKGRlYnVnKSBsb2coYnJvdGhlcik7XFxuICAgICAgICBpZiAoYnJvdGhlciA8IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaXQgLSBicm90aGVyIDwgMiAmJiBpdCAtIGJyb3RoZXIgPiAtMjtcXG4gICAgfVxcblxcbiAgICBsZXQgdGZwdXNoID0gZ2V0SXRlbSgnd2VicHVzaCcsICcwJyk7XFxuXFxuICAgIGxldCBfd2ViID0gJC50b1N0cmluZygodGZwdXNoKSA9PiB7XFxuICAgICAgICBsZXQgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICBsZXQgcmVnID0gL1xcXFwuaHRtbHxcXFxcLmNzc3xcXFxcLmpzLztcXG4gICAgICAgIGZvciAobGV0IGsgaW4gdXJscykge1xcbiAgICAgICAgICAgIGlmICghcmVnLnRlc3QodXJsc1trXSkgJiYgdXJsc1trXS5tYXRjaCgvXFxcXC5tcDR8XFxcXC5tM3U4LykpIHtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2codXJsc1trXSk7XFxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIGZ5X2JyaWRnZV9hcHAuZ2V0SGVhZGVyVXJsKHVybHNba10ucmVwbGFjZSgvLio/dXJsPS8sIFxcXCJcXFwiKSkgKyBcXFwiI2lnbm9yZUltZz10cnVlI1xcXCI7XFxuICAgICAgICAgICAgICAgIGlmICh0ZnB1c2ggPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKSArIFxcXCIjaWdub3JlSW1nPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBwbGF5ID0gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGRvY3VtZW50LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwbGF5XFxuICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sIHRmcHVzaCk7XFxuXFxuICAgIGZ1bmN0aW9uIF9fd2ViKG1vZGUpIHtcXG4gICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh0ZnB1c2gpID0+IHtcXG4gICAgICAgICAgICBsZXQgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICAgICAgbGV0IHJlZyA9IC9cXFxcLmh0bWx8XFxcXC5jc3N8XFxcXC5qcy87XFxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiB1cmxzKSB7XFxuICAgICAgICAgICAgICAgIGlmICghcmVnLnRlc3QodXJsc1trXSkgJiYgdXJsc1trXS5tYXRjaCgvXFxcXC5tcDR8XFxcXC5tM3U4LykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKHVybHNba10pO1xcbiAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKSArIFxcXCIjaWdub3JlSW1nPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZnB1c2ggPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ5X2JyaWRnZV9hcHAuZ2V0SGVhZGVyVXJsKHVybHNba10ucmVwbGFjZSgvLio/dXJsPS8sIFxcXCJcXFwiKSkgKyBcXFwiI2lnbm9yZUltZz10cnVlI1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwbGF5ID0gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3B1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZG9jdW1lbnQudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwbGF5XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgbW9kZSk7XFxuICAgIH1cXG5cXG4gICAgJC5leHRlbmQoe1xcbiAgICAgICAgbHdlYjogX193ZWJcXG4gICAgfSlcXG5cXG4gICAgbGV0IHdlYiA9IGdldEl0ZW0oJ3dlYicsICcwJyk7XFxuICAgIHZhciBwdXNodHlwZSA9IFsn5YiX6KGoJywgJ+WNlembhiddXFxuICAgIHZhciBwYXJzZXR5cGUgPSBbJ1dlYuWXheaOojowJywgJ+inhumikeWXheaOojoxJywgJ2Rt55uS5a2QOjInXVxcbiAgICBsb2coJ+aOqOmAgeexu+WeizonICsgcHVzaHR5cGVbcGFyc2VJbnQodGZwdXNoKV0pXFxuICAgIGxvZygn5ZeF5o6i57G75Z6LOicgKyBwYXJzZXR5cGVbcGFyc2VJbnQod2ViKV0uc3BsaXQoJzonKVswXSlcXG5cXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgIGxldCB0ID0gaXQudGV4dDtcXG4gICAgICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcHJlID0gaSA9PSAwID8gbnVsbCA6IGFycltpIC0gMV07XFxuICAgICAgICBsZXQgbmV4dCA9IGkgPT0gKGFyci5sZW5ndGggLSAxKSA/IG51bGwgOiBhcnJbaSArIDFdO1xcbiAgICAgICAgaWYgKGlzQ2hhcHRlcihpdCwgcHJlLCBuZXh0KSkge1xcbiAgICAgICAgICAgIGlmICh0ZnB1c2ggPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIC8qdmFyIHVybHggPSBcXFwid2ViUnVsZTovL1xcXCIgKyBpdC5ocmVmICsgXFxcIkBcXFwiICsgX3dlYjtcXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJheCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycubTRhJywgJy5tcDMnLCAnLmZsdicsICcuYXZpJywgJy4zZ3AnLCAnLm1wZWcnLCAnLndtdicsICcubW92JywgJy5ybXZiJywgJy5naWYnLCAnLmpwZWcnLCAnLnBuZycsICcuaWNvJywgJy5zdmcnXVxcbiAgICAgICAgICAgICAgICB9OyovXFxuICAgICAgICAgICAgICAgIHZhciB1cmx4ID0gJ2hpa2VyOi8vcGFnZS9wdXNoPyZwdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBnZXRQYWdlVGl0bGUoKSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBpdC50ZXh0ICsgJyQnICsgaXQuaHJlZixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjb250ZW50XFxcIjogTVlfVVJMLnRpdGxlLFxcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogaXQuaHJlZixcXG4gICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAod2ViID09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybHggPSBcXFwid2ViUnVsZTovL1xcXCIgKyBpdC5ocmVmICsgXFxcIkBcXFwiICsgX3dlYjtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5tNGEnLCAnLm1wMycsICcuZmx2JywgJy5hdmknLCAnLjNncCcsICcubXBlZycsICcud212JywgJy5tb3YnLCAnLnJtdmInLCAnLmdpZicsICcuanBlZycsICcucG5nJywgJy5pY28nLCAnLnN2ZyddXFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdlYiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmx4ID0gXFxcInZpZGVvOi8vXFxcIiArIGl0LmhyZWY7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmF4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2ViID09ICcyJykge1xcbiAgICAgICAgICAgICAgICAgICAgbGF6eSA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvbGF6eVRvWDU/cnVsZT1kbeebkuWtkCcpLnZpZGVvWDUoKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdXJseCA9IGl0LmhyZWYgKyBsYXp5XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmF4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgIHVybDogdXJseCxcXG4gICAgICAgICAgICAgICAgcGg6IHQgKyBcXFwiJFxcXCIgKyBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYXhcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZiAoZC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgLy/ljLnphY3lpLHotKVcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgZmxvYXRWaWRlbzogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogW1xcXCIuZ2lmXFxcIiwgXFxcIi9hZC9cXFwiLCBcXFwiZ29vZ2xlXFxcIiwgXFxcIi9zaC90by9cXFwiLCBcXFwiLkdJRlxcXCJdXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICB0b2FzdChcXFwiQUnljLnphY3lpLHotKXvvIzlt7Lkvb/nlKhYNeWKoOi9vVxcXCIpO1xcbiAgICAgICAgbG9nKFxcXCLlvZPliY3pobXpnaLlnLDlnYA6IFxcXCIgKyB1cmwpXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvL+S4uue6v+i3r+WKoOWIhuWJsue6v1xcbiAgICAgICAgbGV0IGQyID0gW107XFxuICAgICAgICBsZXQgbXRhYiA9IFtdO1xcblxcbiAgICAgICAgZCA9IHVuaXF1ZShkKVxcbiAgICAgICAgLy9sb2coQml0VFMpXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBkMi5wdXNoKGRbaV0pO1xcbiAgICAgICAgICAgIG10YWIucHVzaChkW2ldLnBoKTtcXG4gICAgICAgICAgICBpZiAoaSA8IGQubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBkW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBwYXJzZUludChjbGVhclRleHQoaXQudGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgbGV0IG5leHQgPSBkW2kgKyAxXTtcXG4gICAgICAgICAgICAgICAgbGV0IHQyID0gcGFyc2VJbnQoY2xlYXJUZXh0KG5leHQudGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyIC0gdDEgPiAxIHx8IHQxIC0gdDIgPiAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBtdGFiLnB1c2goJyMnKTtcXG4gICAgICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkMi5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZXQgcGxheWwgPSBtdGFiLmpvaW4oJyMnKS5yZXBsYWNlKC8jIyMvZywgJyQkJCQkJCcpO1xcblxcblxcbiAgICAgICAgbGV0IGZyb20gPSBbXTtcXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGxheWwuc3BsaXQoJyQkJCcpLmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgZnJvbS5wdXNoKFxcXCLmkq3mlL7liJfooahcXFwiICsgW2ogKyAxXSk7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcHVzaCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IGdldFBhZ2VUaXRsZSgpLFxcbiAgICAgICAgICAgIFxcXCJmcm9tXFxcIjogZnJvbS5qb2luKCckJCQnKSxcXG4gICAgICAgICAgICBcXFwidXJsXFxcIjogcGxheWwucmVwbGFjZSgvXFxcXCYvZywgJ++8hu+8hicpLFxcbiAgICAgICAgICAgIFxcXCJjb250ZW50XFxcIjogTVlfUlVMRS50aXRsZVxcbiAgICAgICAgfSk7XFxuICAgICAgICAvL2xvZyhwdXNoKTtcXG5cXG4gICAgICAgIGQyLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5o6o6YCB5pys6aG1PT5UVkJveFxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkKHB1c2gpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9wdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pO1xcblxcblxcbiAgICAgICAgZDIudW5zaGlmdCh7XFxuICAgICAgICAgICAgdGl0bGU6IChnZXRJdGVtKCd3ZWJwdXNoJywgJzAnKSA9PSAnMScgPyAn5Y2V5o6o8J+foicgOiAn5Y2V5o6o8J+UtCcpLFxcbiAgICAgICAgICAgIHVybDogYGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOmdldEl0ZW0oJ3dlYnB1c2gnLCcwJyk9PScxJz9zZXRJdGVtKCd3ZWJwdXNoJywnMCcpOnNldEl0ZW0oJ3dlYnB1c2gnLCcxJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnYCxcXG5cXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGQyLnNwbGljZSgyLCAwLCB7XFxuICAgICAgICAgICAgdGl0bGU6IHBhcnNldHlwZVtwYXJzZUludCh3ZWIpXS5zcGxpdCgnOicpWzBdLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpbmYpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ3dlYnB1c2gnLCAnMCcpID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WNleaOqOaooeW8j+W8gOWQr+aXoOazleS/ruaUuSdcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgYWxsX2NvbHMgPSBpbmZcXG4gICAgICAgICAgICAgICAgbGV0IGNvbCA9IHN0b3JhZ2UwLmdldEl0ZW0oJ+WXheaOoicsICdXZWLll4XmjqInKTtcXG4gICAgICAgICAgICAgICAgbGV0IOWXheaOoiA9IGFsbF9jb2xzLm1hcCgoaXQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdC5zcGxpdCgnOicpWzBdID09PSBjb2wgPyAn4p6h77iPJyArIGl0IDogaXQ7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBsZXQgdGlwcyA9ICfor7fpgInmi6nll4XmjqLmqKHlvI8nO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCjll4XmjqIsIDEsIHRpcHMpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL+Keoe+4jy9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCfll4XmjqInLCBpbnB1dC5zcGxpdCgnOicpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlID0gaW5wdXQuc3BsaXQoJzonKVsxXVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnd2ViJywgbW9kZSlcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvbGRJZHMgPSAoZmluZEl0ZW1zQnlDbHMoJ3BsYXlzJykpLm1hcChpdCA9PiBpdC5leHRyYS5pZCk7XFxuICAgICAgICAgICAgICAgICAgICBvbGRJZHMuZm9yRWFjaCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJ3ZWJSdWxlOi8vXFxcIiArIHggKyBcXFwiQFxcXCIgKyAkLmx3ZWIoJzAnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5tNGEnLCAnLm1wMycsICcuZmx2JywgJy5hdmknLCAnLjNncCcsICcubXBlZycsICcud212JywgJy5tb3YnLCAnLnJtdmInLCAnLmdpZicsICcuanBlZycsICcucG5nJywgJy5pY28nLCAnLnN2ZyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJ2aWRlbzovL1xcXCIgKyB4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6ICdwbGF5cycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnMicpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHggKyAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2xhenlUb1g1P3J1bGU9ZG3nm5LlrZAnKS52aWRlb1g1KCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgncGFyc2UnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0b3JhZ2UwLmdldEl0ZW0oJ+WXheaOoicsICdXZWLll4XmjqInKSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+WXheaOouaWueW8j+S4ujonICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgcGFyc2V0eXBlKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3BhcnNlJyxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGQyLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPuKaoe+4jycgKyBkdXJsICsgJzwvc21hbGw+JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIHVybDogZHVybCxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMScpIHtcXG5cXG4gICAgICAgICAgICBkMi51bnNoaWZ0KHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGdldFBhZ2VUaXRsZSgpLFxcbiAgICAgICAgICAgICAgICBpbWc6ICcgaHR0cHM6Ly9waWMzLjU4Y2RuLmNvbS5jbi9ub3dhdGVyL3dlYmltL2JpZy9uX3YyODFkNjBiZDEyN2U4NGNkMjg4MDdkNTExNDNlYWE2MWYuZ2lmQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBzZXRSZXN1bHQoZDIpXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLogZrlkIjmkJzntKJcIixcInBhdGhcIjpcInByb1wiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG5cXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHvCoMKgwqDCoMKgwqDCoFxcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7wqDCoMKgwqDCoFxcbn1cXG5cXG52YXIgaW1ncyA9IFsnaHR0cHM6Ly93d3cud2FuZG91LnByby9mYXZpY29uLmljbycsICdodHRwczovL2JqLmJjZWJvcy5jb20vYmFpZHUtcm1iLXZpZGVvLWNvdmVyLTEvNzRmMTNkMDYyMGY3MmIwMGE0ZTliNjdmM2RhYjk2ZDEucG5nJywgJ2h0dHBzOi8vYmouYmNlYm9zLmNvbS9iYWlkdS1ybWItdmlkZW8tY292ZXItMS83M2I4Y2Y2YWUwNzgzMDNhNTcyZTc2Yzc5ZGQ5M2U3YS5wbmcnLCAnaHR0cHM6Ly93d3cucWltYWl0di5jb20vZmF2aWNvbi5pY28nLCAnaHR0cHM6Ly93d3cudGJzZHkuY29tL3Jlcy9tcnMvMS9pbWcvOTgzNjM1LzIwMjIvMDEvMDEvMTAxLmpwZyddXFxuXFxuXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBbJ+ixjOixhicsICfojLbmna/ni5AnLCAn5pCc54mHJywgJ+mdkum6picsICflnJ/mi6jpvKAnXS5tYXAoKHgsIGkpID0+IHtcXG4gICAgICAgIHZhciBpeCA9IHN0b3JhZ2UwLmdldE15VmFyKCdpbmRleCcsIDApO1xcbiAgICAgICAgdmFyIHRpdGxlID0gaXggPT0gaSA/IGDigJzigJzigJ3igJ08Zm9udCBjb2xvcj0ke2dldFJhbmdlQ29sb3JzKCl9PmAgKyB4ICsgJzwvZm9udD4nIDogeDtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgICAgICAgICBpbWc6IGltZ3NbaV0sXFxuICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignaW5kZXgnLCBpKVxcbiAgICAgICAgICAgICAgICAvL2NsZWFyTXlWYXIoJ3NvdScpXFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3BhZ2UnKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmiJDlip8nXFxuICAgICAgICAgICAgfSwgaSksXFxuICAgICAgICB9KVxcbiAgICB9KVxcblxcbiAgICB2YXIgd2ViID0gZ2V0SXRlbSgnd2ViJywgJzAnKVxcbiAgICAvL2xvZyh3ZWIpXFxuICAgIHZhciB0aXRsZSA9ICcnXFxuICAgIHN3aXRjaCAod2ViKSB7XFxuICAgICAgICBjYXNlICcwJzpcXG4gICAgICAgICAgICB0aXRsZSA9ICdXZWLll4XmjqInXFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICcxJzpcXG4gICAgICAgICAgICB0aXRsZSA9ICfop4bpopHll4XmjqInXFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICcyJzpcXG4gICAgICAgICAgICB0aXRsZSA9ICdkbeebkuWtkCdcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcbiAgICBzZXRJdGVtKCfll4XmjqInLCB0aXRsZSlcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5o6o6YCBJyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6aaW6aG15Yqg6L29OlxcXCIgKyBnZXRJdGVtKCdob21lJywgJ+WFsycpLFxcbiAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2hvbWUnLCAn5YWzJykgPT0gJ+WFsycpIHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnaG9tZScsICflvIAnKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2hvbWUnLCAn5YWzJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgd2ViID0gZ2V0SXRlbSgnd2ViJywgJzAnKVxcbiAgICAgICAgICAgIHN3aXRjaCAod2ViKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzAnOlxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnd2ViJywgJzEnKVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOlxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnd2ViJywgJzInKVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzInOlxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnd2ViJywgJzAnKVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6ICdwYXJzZXQnXFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAn5qih5p2/OicgKyAoZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/ICflhbPpl60nIDogJ+W8gOWQrycpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBpZiAoZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJykge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhaScsICcxJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhaScsICcwJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6ICdhaW1iJ1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuXFxuXFxuXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWFs+mUruivje+8jOWwvemHj+WwkeWtl+S4jeimgeWkmuWtl1xcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcigncGFnZScpXFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcImR1cmxcXFwiKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgIH0pKTtcXG5cXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uUmVmcmVzaFxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJkdXJsXFxcIik7XFxuICAgIH0pKTtcXG59XFxuXFxubGV0IHMgPSBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpO1xcbmxldCByID0gXFxcIlxcXCI7XFxuXFxudmFyIGluZGV4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2luZGV4JywgMClcXG5cXG5zd2l0Y2ggKHBhcnNlSW50KGluZGV4KSkge1xcbiAgICBjYXNlIDA6XFxuICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3dhbmRvdScpKS5ydWxlKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgMTpcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvY3VwZm94JykpLnJ1bGUpXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAyOlxcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9zb3VwaWFuJykpLnJ1bGUpXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAzOlxcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9xaW1haXR2JykpLnJ1bGUpXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSA0OlxcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS90YnNkeScpKS5ydWxlKVxcbiAgICAgICAgYnJlYWs7XFxufVxcblxcblxcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuW3peWFt1wiLFwicGF0aFwiOlwidG9vbFwiLFwicnVsZVwiOlwiZnVuY3Rpb24gd3JhcCh0ZXh0LCBzKSB7XFxuICAgIHJldHVybiB0ZXh0LmluY2x1ZGVzKFxcXCLigJzigJzigJ3igJ1cXFwiKSA/IHRleHQgOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKFxcXCI8ZW0+fDwvZW0+XFxcIiwgXFxcImdcXFwiKSwgXFxcIlxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFwiZ1xcXCIpLCBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCIpXFxufVxcblxcbmZ1bmN0aW9uIHdyYXAxKHRleHQsIHMpIHtcXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKFxcXCI8ZW0+fDwvZW0+XFxcIiwgXFxcImdcXFwiKSwgXFxcIlxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFwiZ1xcXCIpLCBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCIpXFxufVxcblxcbmZ1bmN0aW9uIHJlbW92ZWh0bWwodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC88W148XSs/Pi9nLCAnJylcXG59XFxuXFxuZnVuY3Rpb24gbWVyZ2UodGV4dCwgcywgbSkge1xcbiAgICBpZiAobSA9PSAwKSB7XFxuICAgICAgICB0ZXh0ID0gJ+KAnOKAnOKAneKAnScgKyB0ZXh0ICsgJy0nICsgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogI0ZGNTczM1xcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB0ZXh0ID0gdGV4dCArICctJyArIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICNGRjU3MzNcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIlxcbiAgICB9XFxuICAgIHJldHVybiB0ZXh0XFxufVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgd3JhcDogd3JhcCxcXG4gICAgd3JhcDE6IHdyYXAxLFxcbiAgICByZWh0bWw6IHJlbW92ZWh0bWwsXFxuICAgIG1lcmdlOiBtZXJnZVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic291cFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLmtleSAmJiBnZXRNeVZhcihcXFwidXNlXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG4gICAgcHV0TXlWYXIoXFxcInVzZVxcXCIsIFxcXCIxXFxcIik7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ1c2VcXFwiKTtcXG4gICAgfSkpO1xcbn1cXG4kLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9wcm8nKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwieDVcIixcInBhdGhcIjpcIng1XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcInVcXFwiKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgZmxvYXRWaWRlbzogdHJ1ZSxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBibG9ja1J1bGVzOiBbXFxcIi5naWZcXFwiLCBcXFwiL2FkL1xcXCIsIFxcXCJnb29nbGVcXFwiLCBcXFwiL3NoL3RvL1xcXCIsIFxcXCIuR0lGXFxcIl1cXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjMu5pCc54mHXCIsXCJwYXRoXCI6XCJzb3VwaWFuXCIsXCJydWxlXCI6XCJqczpcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICB2YXIgaHRtbCA9IGZldGNoKGBodHRwOi8vc291cGlhbi5kZS9zZWFyY2g/a2V5PSR7c31gKVxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5saXN0LXJvdy1pbmZvJylcXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXAxXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgICAgIC8vbG9nKGl0KVxcbiAgICAgICAgLy9sZXQgbmFtZSA9IGl0Lm1vdmllX25hbWU7XFxuICAgICAgICBsZXQgbmFtZSA9IHBkZmgoaXQsICdoNCYmVGV4dCcpO1xcbiAgICAgICAgbGV0IHdlYiA9IHBkZmgoaXQsICdhJiZ0aXRsZScpLnJlcGxhY2UobmFtZSwnJykudHJpbSgpO1xcbiAgICAgICAgXFxuICAgICAgICBsZXQgaW1nID0gcGRmaChpdCwgJ2ltZyYmc3JjJyk7XFxuICAgICAgICBsZXQgdXJsID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgIHZhciB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1cmwpXFxuICAgICAgICB1ID0gZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB3cmFwMSh3ZWIrJy0nK25hbWUsIHMpLFxcbiAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgLy9kZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5pCc54mHPC9mb250PlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTpuYW1lLFxcbiAgICAgICAgICAgICAgICB3ZWI6d2ViLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKVxcbn0gZWxzZSB7XFxuXFxufVxcblxcbmlmIChnZXRJdGVtKCdob21lJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgIHZhciBodG1sID0gcmVxdWVzdCgnaHR0cDovL3NvdXBpYW4uZGUvJywge30pXFxuXFxuXFxuICAgIGZ1bmN0aW9uIHNldExpc3RzKGl0ZW0pIHtcXG4gICAgICAgIHZhciB0aXRsZSA9IGl0ZW0uc3BsaXQoJy0nKVswXVxcbiAgICAgICAgdmFyIHQgPSBpdGVtLnNwbGl0KCctJylbMV1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW9yZS8xMC5wbmcnXFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIGBib2R5JiYubGlzdC1oZWFkZXI6bWF0Y2hlcygke3R9KSsqJiZhYClcXG5cXG4gICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnLnBvc3Rlci1pdGVtLXRpdGxlJiZUZXh0JylcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBwZGZoKHgsICdpbWcmJnNyYycpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKChuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbilcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgbmFtZSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBbJ+eDremXqOeUteW9sS3nlLXlvbEnLCAn54Ot6Zeo55S16KeG5YmnLeeUteinhuWJpycsICfng63pl6jnu7zoibot57u86Im6JywgJ+eDremXqOWKqOa8qy3liqjmvKsnXS5tYXAoeCA9PiB7XFxuICAgICAgICBzZXRMaXN0cyh4KVxcbiAgICB9KVxcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjEu6LGM6LGGXCIsXCJwYXRoXCI6XCJ3YW5kb3VcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkdXJsID0gZ2V0TXlWYXIoXFxcImR1cmxcXFwiLCBcXFwiXFxcIik7XFxuaWYgKGR1cmwgIT0gJycpIHtcXG5cXG4gICAgZHVybCA9ICdodHRwczovL3d3dy53YW5kb3UucHJvJyArIGR1cmwucmVwbGFjZSgnLmh0bWwnLCAnJylcXG4gICAgbGV0IHVybCA9IGR1cmw7XFxuICAgIGxldCBpZCA9IHVybDtcXG4gICAgbGV0IGh0bWwgPSBmZXRjaCh1cmwpO1xcbiAgICB2YXIgcnVsZSA9IE1ZX1JVTEUudGl0bGVcXG4gICAgdmFyIG5hbWU9cGRmaChodG1sLCAnLm1vdmllLWNvbnRlbnQmJnAmJlRleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgaW1nOiBwZGZoKGh0bWwsICcubW92aWUtaW1nJiZpbWcmJnNyYycpLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICBkZXNjOiBwZGZoKGh0bWwsICcuYm90dG9tJiZwJiZUZXh0JyksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UveDU/dT0nICsgYmFzZTY0RW5jb2RlKHVybCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAvL3NldFJlc3VsdChkKTtcXG5cXG4gICAgbGV0IHRleHQgPSBwZGZoKGh0bWwsIFxcXCJib2R5JiYjX19ORVhUX0RBVEFfXyYmSHRtbFxcXCIpO1xcbiAgICAvL2xvZyh0ZXh0KTtcXG4gICAgbGV0IGVyamkgPSBKU09OLnBhcnNlKHRleHQpO1xcbiAgICAvL2xvZyhlcmppKTtcXG4gICAgbGV0IGxpc3QgPSBlcmppLnByb3BzLnBhZ2VQcm9wcy5kYXRhLnBsYXlEYXRhO1xcblxcbiAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgd3JhcFxcbiAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgIGxpc3QgPSBsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gaXQuZGF0YV91cmw7XFxuICAgICAgICAgICAgICAgIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImdT1cXFwiICsgYmFzZTY0RW5jb2RlKHUpO1xcbiAgICAgICAgICAgICAgICB1ID0gZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQuc2l0ZV9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOml0LnNpdGVfaWNvbixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiAnaG9tZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2ViOml0LnNpdGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgLy9hZGRJdGVtQWZ0ZXIoaWQsIGxpc3QpO1xcbiAgICAgICAgICAgICAgICBkID0gZC5jb25jYXQobGlzdCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKVxcbn1cXG5cXG5sZXQgciA9IFxcXCJcXFwiO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuXFxuICAgIGpzb24gPSBcXFwiaHR0cHM6Ly9hcGkueGlhbW0uY2MvbW92aWUvZ2V0c2VhcmNobGlzdC9rZXl3b3Jkcy9cXFwiICsgcyArIFxcXCIvcGFnZS8xL3Jvd3MvMTYuanNvblxcXCI7XFxuICAgIGRhdGEgPSBKU09OLnBhcnNlKGZldGNoKGpzb24pKS5kYXRhO1xcbiAgICBsZXQge1xcbiAgICAgICAgd3JhcFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBmb3IgKGxldCBpdCBvZiBkYXRhKSB7XFxuICAgICAgICBsZXQgbmFtZSA9IGl0Lm1vdmllX25hbWU7XFxuICAgICAgICAvL2xvZyhuYW1lKVxcbiAgICAgICAgbGV0IGltZyA9IGl0Lm1vdmllX2ltZ191cmw7XFxuICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vd3d3LndhbmRvdS5wcm9cXFwiICsgaXQubW92aWVfdXJsLnJlcGxhY2UoXFxcIi5odG1sXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgLy9sb2codXJsKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogd3JhcChuYW1lLCBzKSxcXG4gICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocnVsZSwgaWQsIHMsbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gZmluZEl0ZW1zQnlDbHMoaWQpO1xcbiAgICAgICAgICAgICAgICBpZiAoISFjbHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhpZClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IHVybDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2godXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IHBkZmgoaHRtbCwgXFxcImJvZHkmJiNfX05FWFRfREFUQV9fJiZIdG1sXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyh0ZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcmppID0gSlNPTi5wYXJzZSh0ZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGVyamkpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBlcmppLnByb3BzLnBhZ2VQcm9wcy5kYXRhLnBsYXlEYXRhO1xcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBpdC5kYXRhX3VybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImdT1cXFwiICsgYmFzZTY0RW5jb2RlKHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQuc2l0ZV9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOml0LnNpdGVfaWNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiAnaG9tZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTpuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWI6aXQuc2l0ZV9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCwgbGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUsIHVybCwgcyxuYW1lKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfbGVmdF9waWNcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7osYzosYY8L2ZvbnQ+XFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHVybCxcXG4gICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKVxcbn0gZWxzZSB7XFxuXFxufVxcblxcblxcbmlmIChnZXRJdGVtKCdob21lJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgIHZhciBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LndhbmRvdS5wcm8vJylcXG4gICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKHBkZmgoaHRtbCwgXFxcImJvZHkmJiNfX05FWFRfREFUQV9fJiZIdG1sXFxcIikpO1xcblxcblxcblxcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnNwbGl0KCcjJylbMF1cXG4gICAgICAgIHZhciBrZXkgPSBpdGVtLnNwbGl0KCcjJylbMV1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW9yZS8xMC5wbmcnXFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdmFyIGxpc3QgPSBqc29uLnByb3BzLnBhZ2VQcm9wcy5mYWxsYmFja1trZXldLmRhdGFcXG5cXG4gICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0geC5ob3RfbmFtZVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IHguaG90X2ltZ191cmwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IHguaG90X3JhdGUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4sIHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R1cmwnLCB1KVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lLCB4LmhvdF91cmwpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgWyfng63pl6jnlLXlvbEjaW5kZXgtZ2V0TW92aWVMaXN0LW1vdmllJywgJ+eDremXqOWJp+mbhiNpbmRleC1nZXRUdkxpc3QtdHYtMjgnXS5tYXAoeCA9PiB7XFxuICAgICAgICBzZXRMaXN0cyh4KVxcbiAgICB9KVxcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjIu6Iy25p2v54uQXCIsXCJwYXRoXCI6XCJjdXBmb3hcIixcInJ1bGVcIjpcImpzOlxcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UveHRvb2xzJykpLnJ1bGUpXFxuXFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXAxLFxcbiAgICAgICAgcmVodG1sXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgIHZhciBqc29uID0gc2VhcmNoKHMsIHN0b3JhZ2UwLmdldE15VmFyKCdwYWdlJywgTVlfUEFHRSkpXFxuICAgIGlmIChKU09OLnN0cmluZ2lmeShqc29uKSAhPSBcXFwie31cXFwiKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IGpzb24ucmVzb3VyY2VzO1xcbiAgICAgICAgbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgIC8vbG9nKGl0LndlYnNpdGUrJy0nK3JlaHRtbChpdC50ZXh0KSlcXG4gICAgICAgICAgICB2YXIgdT1cXFwiaGlrZXI6Ly9wYWdlL3A/dT1cXFwiICsgYmFzZTY0RW5jb2RlKGl0LnVybClcXG4gICAgICAgICAgICB1PWdldEl0ZW0oJ2FpJywnMCcpPT0nMCc/dTp1KycjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwMShpdC53ZWJzaXRlKyctJytyZWh0bWwoaXQudGV4dCksIHMpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgaW1nOml0Lmljb24sXFxuICAgICAgICAgICAgICAgIGRlc2M6IGl0LndlYnNpdGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiByZWh0bWwoaXQudGV4dCksXFxuICAgICAgICAgICAgICAgICAgICB3ZWI6aXQud2Vic2l0ZSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBcXG4gICAgc2V0UmVzdWx0KGQpXFxufSBlbHNlIHtcXG4gICAgXFxufVxcblxcbmlmKGdldEl0ZW0oJ2hvbWUnLCflhbMnKT09J+W8gCcpe1xcblxcbnZhciBodG1sID0gZmV0Y2hQQygnaHR0cHM6Ly9jdXBmb3guYXBwLycsIHt9KVxcblxcblxcbmZ1bmN0aW9uIHNldExpc3RzKGl0ZW0pIHtcXG4gICAgdmFyIHRpdGxlID0gaXRlbS5zcGxpdCgnLScpWzBdXFxuICAgIHZhciB0ID0gaXRlbS5zcGxpdCgnLScpWzFdXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICBpbWc6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW9yZS8xMC5wbmcnXFxuICAgIH0pXFxuXFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBgYm9keSYmIyR7dH0mJi5tb3ZpZS1saXN0LWl0ZW1gKVxcblxcbiAgICBsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnLm1vdmllLXRpdGxlJiZUZXh0JylcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgaW1nOiBwZGZoKHgsICdpbWcmJnNyYycpLFxcbiAgICAgICAgICAgIGRlc2M6cGRmaCh4LCcubW92aWUtcmF0aW5nJiZUZXh0JyksXFxuICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobikgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbilcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgbmFtZSlcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufVxcblxcblsn54Ot5pKt5paw5YmnLXR2JywgJ+eDremXqOeUteW9sS1tb3ZpZScsICfng63mkq3liqjmvKstYW5pbWUnLCAn54Ot5pKt57u86Im6LXNob3cnLCAn54Ot5pKt57qq5b2V54mHLWRvY3VtZW50YXJ5J10ubWFwKHggPT4ge1xcbiAgICBzZXRMaXN0cyh4KVxcbn0pXFxuXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Ye95pWwXCIsXCJwYXRoXCI6XCJ4dG9vbHNcIixcInJ1bGVcIjpcImpzOlxcbmZ1bmN0aW9uIGVuY29kZVVURjgocykge1xcbnZhciBpLCByID0gW10sIGMsIHg7XFxuZm9yIChpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspXFxuaWYgKChjID0gcy5jaGFyQ29kZUF0KGkpKSA8IDB4ODApIHIucHVzaChjKTtcXG5lbHNlIGlmIChjIDwgMHg4MDApIHIucHVzaCgweEMwICsgKGMgPj4gNiAmIDB4MUYpLCAweDgwICsgKGMgJiAweDNGKSk7XFxuZWxzZSB7XFxuaWYgKCh4ID0gYyBeIDB4RDgwMCkgPj4gMTAgPT0gMCkgLy/lr7nlm5vlrZfoioJVVEYtMTbovazmjaLkuLpVbmljb2RlXFxuYyA9ICh4IDw8IDEwKSArIChzLmNoYXJDb2RlQXQoKytpKSBeIDB4REMwMCkgKyAweDEwMDAwLFxcbnIucHVzaCgweEYwICsgKGMgPj4gMTggJiAweDcpLCAweDgwICsgKGMgPj4gMTIgJiAweDNGKSk7XFxuZWxzZSByLnB1c2goMHhFMCArIChjID4+IDEyICYgMHhGKSk7XFxuci5wdXNoKDB4ODAgKyAoYyA+PiA2ICYgMHgzRiksIDB4ODAgKyAoYyAmIDB4M0YpKTtcXG59O1xcbnJldHVybiByO1xcbn1cXG5cXG5mdW5jdGlvbiBzaGExKHMpIHtcXG52YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGVuY29kZVVURjgocykpXFxudmFyIGksIGosIHQ7XFxudmFyIGwgPSAoKGRhdGEubGVuZ3RoICsgOCkgPj4+IDYgPDwgNCkgKyAxNiwgcyA9IG5ldyBVaW50OEFycmF5KGwgPDwgMik7XFxucy5zZXQobmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIpKSwgcyA9IG5ldyBVaW50MzJBcnJheShzLmJ1ZmZlcik7XFxuZm9yICh0ID0gbmV3IERhdGFWaWV3KHMuYnVmZmVyKSwgaSA9IDA7IGkgPCBsOyBpKyspc1tpXSA9IHQuZ2V0VWludDMyKGkgPDwgMik7XFxuc1tkYXRhLmxlbmd0aCA+PiAyXSB8PSAweDgwIDw8ICgyNCAtIChkYXRhLmxlbmd0aCAmIDMpICogOCk7XFxuc1tsIC0gMV0gPSBkYXRhLmxlbmd0aCA8PCAzO1xcbnZhciB3ID0gW10sIGYgPSBbXFxuZnVuY3Rpb24gKCkgeyByZXR1cm4gbVsxXSAmIG1bMl0gfCB+bVsxXSAmIG1bM107IH0sXFxuZnVuY3Rpb24gKCkgeyByZXR1cm4gbVsxXSBeIG1bMl0gXiBtWzNdOyB9LFxcbmZ1bmN0aW9uICgpIHsgcmV0dXJuIG1bMV0gJiBtWzJdIHwgbVsxXSAmIG1bM10gfCBtWzJdICYgbVszXTsgfSxcXG5mdW5jdGlvbiAoKSB7IHJldHVybiBtWzFdIF4gbVsyXSBeIG1bM107IH1cXG5dLCByb2wgPSBmdW5jdGlvbiAobiwgYykgeyByZXR1cm4gbiA8PCBjIHwgbiA+Pj4gKDMyIC0gYyk7IH0sXFxuayA9IFsxNTE4NTAwMjQ5LCAxODU5Nzc1MzkzLCAtMTg5NDAwNzU4OCwgLTg5OTQ5NzUxNF0sXFxubSA9IFsxNzMyNTg0MTkzLCAtMjcxNzMzODc5LCBudWxsLCBudWxsLCAtMTAwOTU4OTc3Nl07XFxubVsyXSA9IH5tWzBdLCBtWzNdID0gfm1bMV07XFxuZm9yIChpID0gMDsgaSA8IHMubGVuZ3RoOyBpICs9IDE2KSB7XFxudmFyIG8gPSBtLnNsaWNlKDApO1xcbmZvciAoaiA9IDA7IGogPCA4MDsgaisrKVxcbndbal0gPSBqIDwgMTYgPyBzW2kgKyBqXSA6IHJvbCh3W2ogLSAzXSBeIHdbaiAtIDhdIF4gd1tqIC0gMTRdIF4gd1tqIC0gMTZdLCAxKSxcXG50ID0gcm9sKG1bMF0sIDUpICsgZltqIC8gMjAgfCAwXSgpICsgbVs0XSArIHdbal0gKyBrW2ogLyAyMCB8IDBdIHwgMCxcXG5tWzFdID0gcm9sKG1bMV0sIDMwKSwgbS5wb3AoKSwgbS51bnNoaWZ0KHQpO1xcbmZvciAoaiA9IDA7IGogPCA1OyBqKyspbVtqXSA9IG1bal0gKyBvW2pdIHwgMDtcXG59O1xcbnQgPSBuZXcgRGF0YVZpZXcobmV3IFVpbnQzMkFycmF5KG0pLmJ1ZmZlcik7XFxuZm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspbVtpXSA9IHQuZ2V0VWludDMyKGkgPDwgMik7XFxuXFxudmFyIGhleCA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChuZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkobSkuYnVmZmVyKSwgZnVuY3Rpb24gKGUpIHtcXG5yZXR1cm4gKGUgPCAxNiA/IFxcXCIwXFxcIiA6IFxcXCJcXFwiKSArIGUudG9TdHJpbmcoMTYpO1xcbn0pLmpvaW4oXFxcIlxcXCIpO1xcbnJldHVybiBoZXg7XFxufVxcblxcblxcbmZ1bmN0aW9uIHNlYXJjaChzLCBwYWdlKSB7XFxuICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSlcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcCA9IDBcXG4gICAgfSBlbHNlIGlmIChwYWdlID09IDIpIHtcXG4gICAgICAgIHAgPSAxOVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcCA9IHBhcnNlSW50KHBhZ2UpICsgMjBcXG4gICAgfVxcbiAgICBzdG9yYWdlMC5wdXRNeVZhcigncGFnZScsIHApXFxuICAgIHNzID0gcyArICdVUkJCUkdST1VOJ1xcbiAgICB0ayA9IENyeXB0b0pTLlNIQTEoc3MpLnRvU3RyaW5nKCk7XFxuICAgIHZhciBqID0gZmV0Y2goYGh0dHBzOi8vYXBpLmN1cGZveC5hcHAvYXBpL3YyL3NlYXJjaC8/dGV4dD0ke3N9JnR5cGU9MCZmcm9tPSR7cH0mc2l6ZT0yMCZkb3ViYW5faWQ9MCZ0b2tlbj0ke3RrfWApXFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UoailcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICB2YXIganNvbiA9IHt9XFxuICAgIH1cXG4gICAgcmV0dXJuIGpzb25cXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI0Lumdkum6plwiLFwicGF0aFwiOlwicWltYWl0dlwiLFwicnVsZVwiOlwianM6XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgTVlfVVJMID0gXFxcImh0dHBzOi8vd3d3LnFpbWFpdHYuY29tL2luZGV4LnBocD9zPWFwaSZjPWFwaSZtPWdldHBsYXlsaXN0JnRpdGxlPVxcXCIgKyBzICsgXFxcIiZpZD11bmRlZmluZWQmcGFnZT1cXFwiK01ZX1BBR0U7XFxuICAgIGxldCBodG1sID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlgtUmVxdWVzdGVkLVdpdGhcXFwiOiBcXFwiWE1MSHR0cFJlcXVlc3RcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICB2YXIgaW5mbyA9ICcnXFxuICAgIHRyeSB7XFxuICAgICAgICBpbmZvID0gSlNPTi5wYXJzZShodG1sKS5pbmZvO1xcbiAgICB9IGNhdGNoIHtcXG5cXG4gICAgfVxcbiAgICBpZiAoaW5mbyAhPSBudWxsKSB7XFxuICAgICAgICB2YXIgZGF0YSA9IHBkZmEoaW5mbywgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGRhdGEgPSBbXVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzbWFsbD7ml6Dnu5Pmnpw8L3NhbWxsPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIHNldFJlc3VsdChkKVxcbiAgICB9XFxuXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwMVxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBmb3IgKGxldCBpdCBvZiBkYXRhKSB7XFxuICAgICAgICBsZXQgdCA9IHBkZmgoaXQsIFxcXCJoNCYmVGV4dFxcXCIpO1xcbiAgICAgICAgbGV0IHdlYiA9IHBkZmgoaXQsICcubGFiZWwtMSYmVGV4dCcpO1xcbiAgICAgICAgbGV0IGltZyA9IHBkKGl0LCAnaW1nJiZzcmMnKTtcXG4gICAgICAgIGlmICghdCkge1xcbiAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/dT1cXFwiICsgYmFzZTY0RW5jb2RlKHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIpKVxcbiAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogd3JhcDEod2ViICsgJy0nICsgdCwgcyksXFxuICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICBpbWc6aW1nLFxcbiAgICAgICAgICAgIC8vZGVzYzogKHBkZmEoaXQsIFxcXCJhJiZzcGFuXFxcIikgfHwgW10pLm1hcChpID0+IHBkZmgoaSwgXFxcIlRleHRcXFwiKSkuam9pbihcXFwiIFxcXCIpLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBwZChpdCwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiB0LFxcbiAgICAgICAgICAgICAgICB3ZWI6d2ViLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKVxcbn0gZWxzZSB7XFxuXFxufVxcblxcbmlmIChnZXRJdGVtKCdob21lJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgIGZ1bmN0aW9uIHNldExpc3RzKGl0ZW0pIHtcXG4gICAgICAgIHZhciB0aXRsZSA9IGl0ZW0uc3BsaXQoJy0nKVswXVxcbiAgICAgICAgdmFyIHQgPSBpdGVtLnNwbGl0KCctJylbMV1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW9yZS8xMC5wbmcnXFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGZldGNoKGBodHRwOi8vd3d3LnFpbWFpdHYuY29tL2luZGV4LnBocD9zPW1vdmllJmM9aG9tZSZtPWdldG1vdmllJnR5cGU9JUU3JTgzJUFEJUU5JTk3JUE4JmNhdGlkPSR7dH1gKSkuaHRtbFxcblxcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIGBib2R5JiYubW92aWUtbGlzdC1pdGVtYClcXG5cXG4gICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnLm1vdmllLXRpdGxlJiZUZXh0JylcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBwZGZoKHgsICdpbWcmJnNyYycpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKHgsICcubW92aWUtcmF0aW5nJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIFsn54Ot5pKt55S15b2xLTEnLCAn54Ot5pKt55S16KeG5YmnLTInLCAn54Ot5pKt5Yqo5ryrLTMnLCAn54Ot5pKt57u86Im6LTUnXS5tYXAoeCA9PiB7XFxuICAgICAgICBzZXRMaXN0cyh4KVxcbiAgICB9KVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWHveaVsDJcIixcInBhdGhcIjpcInp0b29sc1wiLFwicnVsZVwiOlwianM6XFxuLy91cmzop6PmnpBcXG5mdW5jdGlvbiB1cmxQYXJzZSh1KSB7XFxuICAgIHZhciBkaWN0ID0ge31cXG4gICAgZGljdC5Tb3VyY2UgPSB1O1xcbiAgICBsZXQgcGFyYW1zID0gKHVybCkgPT4ge1xcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XFxuICAgICAgICBsZXQgcmVnID0gLyhbXj89Jl0rKT0oW14/PSZdKykvZztcXG4gICAgICAgIHVybC5yZXBsYWNlKHJlZywgZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNbYXJndW1lbnRzWzFdXSA9IGFyZ3VtZW50c1syXTtcXG4gICAgICAgIH0pXFxuICAgICAgICByZXR1cm4gcXVlcnlQYXJhbXNcXG4gICAgfVxcbiAgICB2YXIgamF2YVVybCA9IEphdmFJbXBvcnRlcihqYXZhLm5ldC5VUkwpO1xcbiAgICB3aXRoKGphdmFVcmwpIHtcXG4gICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKHUpO1xcbiAgICAgICAgZGljdC5Qcm90b2NvbCA9IHVybC5nZXRQcm90b2NvbCgpO1xcbiAgICAgICAgZGljdC5Ib3N0ID0gdXJsLmdldEhvc3QoKTtcXG4gICAgICAgIGRpY3QuUG9ydCA9IHVybC5nZXRQb3J0KCk7XFxuICAgICAgICBkaWN0LkZpbGUgPSB1cmwuZ2V0RmlsZSgpO1xcbiAgICAgICAgZGljdC5QYXRoID0gdXJsLmdldFBhdGgoKTtcXG4gICAgICAgIGRpY3QuUmVmID0gdXJsLmdldFJlZigpO1xcbiAgICAgICAgZGljdC5Ib3N0cyA9IGAke3VybC5nZXRQcm90b2NvbCgpfTovLyR7dXJsLmdldEhvc3QoKX1gXFxuICAgIH1cXG4gICAgZGljdC5QYXJhbXMgPSBwYXJhbXModSk7XFxuICAgIHJldHVybiBkaWN0O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpbmdJbkFycmF5KHN0ciwgYXJyKSB7XFxuICAgIHJldHVybiBhcnIuc29tZShpdGVtID0+IHN0ci5pbmNsdWRlcyhpdGVtKSk7XFxufVxcblxcblxcbi8v5o6S6Zmk5rKh6Lev5b6EXFxuZnVuY3Rpb24gbm9maWxlKHUpIHtcXG4gICAgdXJsID0gdS5ocmVmXFxuICAgIGlmIChzdHJpbmdJbkFycmF5KHVybCwgWydtYWduZXQnLCAnZWQyayddKSkge1xcbiAgICAgICAgQml0VFMucHVzaCh1KTtcXG4gICAgICAgIHJldHVybiB0cnVlXFxuICAgIH1cXG4gICAgdmFyIHUgPSB1cmxQYXJzZSh1cmwpXFxuICAgIGlmICh1LkZpbGUgPT0gJycgfHwgdS5GaWxlID09ICcvJyB8fCB1LlJlZiAhPSBudWxsKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZVxcbiAgICB9XFxufVxcbi8v5Y676YeNXFxuZnVuY3Rpb24gdW5pcXVlKGFycikge1xcbiAgICBjb25zdCByZXMgPSBuZXcgTWFwKClcXG4gICAgcmV0dXJuIGFyci5maWx0ZXIoKGEpID0+ICFyZXMuaGFzKGEudXJsKSAmJiByZXMuc2V0KGEudXJsLCAxKSlcXG59XFxuXFxuLy/ph43lrprlkJHlj6/nlKjpk77mjqVcXG5mdW5jdGlvbiBnZXRUdXJsKHUpIHtcXG4gICAgLy9sb2codSlcXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciB1cmwgPSBiYXNlNjREZWNvZGUodSk7XFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgdmFyIHVybCA9IHVcXG4gICAgfVxcbiAgICBpZiAoIXVybC5pbmNsdWRlcygnaHR0cCcpIHx8IHVybCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgIHVybCA9IHVcXG4gICAgfVxcbiAgICB1cmwgPSB1cmwuaW5jbHVkZXMoJz8nKSA/IHVybC5zcGxpdCgnPycpWzBdIDogdXJsXFxuICAgIGxvZygndXJsOicgKyB1cmwpXFxuICAgIHZhciBmaWxlID0gdXJsUGFyc2UodXJsKS5GaWxlXFxuICAgIHZhciB0dXJsID0gJydcXG4gICAgbGV0IGhlYWQgPSBKU09OLnBhcnNlKHJlcXVlc3QodXJsLCB7XFxuICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICB9KSk7XFxuICAgIC8vbG9nKGhlYWQpXFxuICAgIGlmIChoZWFkLnVybCAhPSB1bmRlZmluZWQgfHwgaGVhZC51cmwgIT0gJycpIHtcXG4gICAgICAgIHZhciBqdXJscCA9IHVybFBhcnNlKGhlYWQudXJsKVxcbiAgICAgICAgaWYgKGp1cmxwLkZpbGUgPT0gJy8nIHx8IGp1cmxwLkZpbGUgPT0gJycpIHtcXG4gICAgICAgICAgICB0dXJsID0ganVybHAuSG9zdHMgKyBmaWxlXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHR1cmwgPSBoZWFkLnVybFxcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdHVybCA9IHVybFxcbiAgICB9XFxuICAgIC8vbG9nKCd0dXJsOicrdHVybClcXG4gICAgdHVybCA9IHR1cmwucmVwbGFjZSgvXFxcXD9mcm9tLiskL2dtLCAnJyk7XFxuXFxuICAgIHR1cmwgPSB2aWRlb1JlZkRldGFpbCh0dXJsKVxcbiAgICAvL2xvZyh0dXJsKVxcbiAgICByZXR1cm4gdHVybFxcbn1cXG5cXG5cXG5mdW5jdGlvbiB2aWRlb1JlZkRldGFpbCh1cmwpIHtcXG4gICAgaWYgKHN0cmluZ0luQXJyYXkodXJsLCBbXFxcIjYwODBcXFwiXSkpIHtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXCJ2cGxheVxcXCIsIFxcXCJ2aWRlb1xcXCIpO1xcbiAgICB9IGVsc2UgaWYgKHN0cmluZ0luQXJyYXkodXJsLCBbXFxcInpodWlqdVxcXCJdKSkge1xcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoXFxcInZvZHBsYXlcXFwiLCBcXFwidm9kZGV0YWlsXFxcIik7XFxuICAgIH0gZWxzZSBpZiAoc3RyaW5nSW5BcnJheSh1cmwsIFtcXFwicnJldHNcXFwiXSkpIHtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXCJwbGF5XFxcIiwgXFxcInByb2plY3RcXFwiKVxcbiAgICB9XFxuICAgIHJldHVybiB1cmw7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5o6o6YCBXCIsXCJwYXRoXCI6XCJwdXNoXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgaXRlbXMgPSBbXTtcXG5sZXQgcHVzaGluID0gZGVjb2RlVVJJQ29tcG9uZW50KGdldFBhcmFtKFxcXCJwdXNodXJsXFxcIikpO1xcbmxldCB0dmlwID0gZ2V0SXRlbSgnaGlrZXJ0dmJveHNldCcsICcnKTtcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICflvZPliY1JUO+8micgKyB0dmlwLFxcbiAgICB1cmw6IFxcXCJpbnB1dDovL1xcXCIgKyBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJ2h0dHA6Ly8nICsgZ2V0SVAoKSArICc6OTk3OCcpICsgXFxcIi8vLy/or7fovpPlhaVUVkJveOerr+eahElQ5Zyw5Z2A77yM5aaCaHR0cDovL1xcXCIgKyBnZXRJUCgpICsgXFxcIjo5OTc4LmpzOnNldEl0ZW0oJ2hpa2VydHZib3hzZXQnLGlucHV0KTtyZWZyZXNoUGFnZSgpXFxcIixcXG4gICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG59KTtcXG52YXIgcHVybCA9IHB1c2hpbjtcXG5cXG5pZiAocHVzaGluLmluY2x1ZGVzKCdcXFxcbicpICYmICFwdXNoaW4uc3RhcnRzV2l0aCgneycpKSB7XFxuICAgIHB1cmwgPSBwdXNoaW4ucmVwbGFjZShcXFwiXFxcXG5cXFwiLCAnJCcpO1xcbn1cXG5pZiAocHVzaGluLnN0YXJ0c1dpdGgoJ2h0dHAnKSAmJiBwdXNoaW4uaW5jbHVkZXMoJzt7JykpIHtcXG4gICAgcHVybCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIua1t+mYlOebtOmTvuaOqOmAgVxcXCIsXFxuICAgICAgICBcXFwidXJsXFxcIjogcHVzaGluXFxuICAgIH0pXFxufVxcbmlmIChwdXNoaW4uc3RhcnRzV2l0aCgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJykpIHtcXG4gICAgbGV0IHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcbiAgICBwdXJsID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgXFxcInVybFxcXCI6IHB1c2hpbixcXG4gICAgICAgIFxcXCJyZWZyZXNoX3Rva2VuXFxcIjogcmVmdG9rZW5cXG4gICAgfSlcXG59XFxuaWYgKHB1c2hpbi5pbmNsdWRlcygnOjUyMDIwJykpIHtcXG4gICAgaWYgKHB1c2hpbi5pbmNsdWRlcygncmVkaXJlY3RQbGF5VXJsJykpIHtcXG4gICAgICAgIHB1cmwgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwi5rW36ZiU5oqV5bGP55u06ZO+XFxcIixcXG4gICAgICAgICAgICBcXFwidXJsXFxcIjogcHVzaGluXFxuICAgICAgICB9KVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcHVybCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCLmtbfpmJTnvZHpobXmipXlsY9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwdXNoaW5cXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuXFxuLy9sb2coJ+aOqOmAgScrcHVybCk7XFxudmFyIHN0YXRlID0gcmVxdWVzdCh0dmlwICsgJy9hY3Rpb24nLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgICAgIC8vJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxcbiAgICAgICAgJ1JlZmVyZXInOiB0dmlwXFxuICAgIH0sXFxuICAgIHRpbWVvdXQ6IDIwMDAsXFxuICAgIGJvZHk6ICdkbz1wdXNoJnVybD0nICsgcHVybC5yZXBsYWNlKC9cXFxcJi9nLCAn77yG77yGJyksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7XFxuLy9sb2coc3RhdGUpO1xcbmlmIChzdGF0ZSA9PSAnb2snKSB7XFxuICAgIC8vbG9nKHN0YXRlKTtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKchVxcXCIgKyBzdGF0ZSxcXG4gICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIGJhY2soZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICB9KTtcXG59IGVsc2Uge1xcbiAgICAvL2xvZyhzdGF0ZSk7XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLinY5cXFwiICsgc3RhdGUsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG4gICAgfSk7XFxuXFxufVxcbnNldFJlc3VsdChpdGVtcyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLorr7nva5cIixcInBhdGhcIjpcInNldHRpbmdcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICforr7nva5JUOWcsOWdgCcsXFxuICAgICAgICB1cmw6IFxcXCJpbnB1dDovL1xcXCIgKyBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJ2h0dHA6Ly8nICsgZ2V0SVAoKSArICc6OTk3OCcpICsgXFxcIi8vLy/or7fovpPlhaV0dmJveOaOqOmAgUlQ5Zyw5Z2A77yM5aaCaHR0cDovL1xcXCIgKyBnZXRJUCgpICsgXFxcIjo5OTc4LmpzOnNldEl0ZW0oJ2hpa2VydHZib3hzZXQnLGlucHV0KTtyZWZyZXNoUGFnZSgpXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ2hpa2VydHZib3hzZXQnLCAnJyksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0pO1xcbn1cXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIng1YWlcIixcInBhdGhcIjpcIng1YWlcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHJ1bGUsIGFuY2hvcklkKSB7XFxuICAgIHJldHVybiAkLnRvU3RyaW5nKChydWxlLCBhbmNob3JJZCwgbW9iYW4pID0+IHtcXG4gICAgICAgIGlmICh3aW5kb3cuY2hlY2swID09IG51bGwpIHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBjaGVjazAoKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXFxcImh0bWxcXFwiKS5pbm5lckhUTUw7XFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKFxcXCJodG1sMFxcXCIsIGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLnBhcnNlTGF6eVJ1bGVBc3luYygkJCQoKS5sYXp5UnVsZSgocnVsZSwgdXJsLCBhbmNob3JJZCwgbW9iYW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBnZXRWYXIoXFxcImh0bWwwXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXVybCA9ICcnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclZhcihcXFwiaHRtbDBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coJ3VybDonICsgdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vY3VwZm94LmFwcC9wYWdlP3VybD0nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2V1cmwgPSB1cmwucmVwbGFjZSgvLit1cmw9KC4qPykmLisvZ20sICckMScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdXJsID0gYmFzZTY0RGVjb2RlKGJhc2V1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2lmcmFtZScsIGl1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ2l1cmw6JyArIGl1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl1cmwubGVuZ3RoID4gMCA/IFxcXCIxXFxcIiA6IFxcXCIwXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIHJ1bGUsIGxvY2F0aW9uLmhyZWYsIGFuY2hvcklkLCBtb2JhbiksICQkJC50b1N0cmluZygocnVsZSxtb2JhbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZyhpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2ZiYS5sb2cocnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXFxcIjBcXFwiID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jaGVja2MgPSB3aW5kb3cuY2hlY2tjICsgMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAod2luZG93LmNoZWNrYyA+IDEyMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyhcXFwi5omn6KGM6LaF6L+HMzDnp5LvvIzml6Dms5Xop6PmnpBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHdpbmRvdy5jaGVjazAsIDI1MCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBmYmEuZ2V0VmFyKCdpZnJhbWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZygnbW9iYW4nK21vYmFuKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtb2Jhbj09JzEnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD11cmwrJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IHJ1bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9seeJh+ivpuaDhScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9wP3J1bGU9JyArIHJ1bGUgKyAnJnU9JyArIHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRSdWxlOiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jaGVja3VybCA9IGxvY2F0aW9uLmhyZWY7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrdTAoKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmNoZWNrdXJsICE9IGxvY2F0aW9uLmhyZWYpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2hhc2jlj5HnlJ/kuoblj5jljJZcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2hlY2tjID0gMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2swKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2t1MCwgMjUwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3UwKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSxydWxlLG1vYmFuKSk7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5sb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQod2luZG93LmNoZWNrMCwgMjUwKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB3aW5kb3cuY2hlY2tjID0gMDtcXG4gICAgICAgICAgICB3aW5kb3cuY2hlY2swID0gY2hlY2swO1xcbiAgICAgICAgICAgIGNoZWNrMCgpO1xcbiAgICAgICAgfVxcbiAgICB9LCBydWxlLCBhbmNob3JJZCwgZ2V0SXRlbSgnYWknLCcwJykpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjUu6Iy25p2v6JmOXCIsXCJwYXRoXCI6XCJhaW9iYlwiLFwicnVsZVwiOlwianM6XFxubGV0IGR1cmwgPSBnZXRNeVZhcihcXFwiZHVybFxcXCIsIFxcXCJcXFwiKTtcXG5pZiAoZHVybCAhPSAnJykge1xcbiAgICBNWV9VUkwgPSBkdXJsXFxuICAgIGxvZyhkdXJsKVxcblxcbiAgICBsZXQgdXJsID0gZHVybDtcXG4gICAgbGV0IGlkID0gdXJsO1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaCh1cmwpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIHZhciBodG1sID0gJydcXG4gICAgfVxcbiAgICB2YXIgcnVsZSA9IE1ZX1JVTEUudGl0bGVcXG4gICAgaWYgKGh0bWwgPT0gdW5kZWZpbmVkIHx8IGh0bWwgPT0gJycpIHtcXG4gICAgICAgIHRvYXN0KCfml6DmlbDmja4nKVxcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJkdXJsXFxcIik7XFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgIH0gZWxzZSB7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGh0bWwsICdoNCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGltZzogcGQoaHRtbCwgJ2ltZyYmc3JjJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICAgICAgZGVzYzogcGRmaChodG1sLCAnYm9keSYmLnB1YlRpbWUmJlRleHQnKSxcXG4gICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG5cXG5cXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllWnkmJmEnKVxcbiAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICBtZXJnZVxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJ3VsJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG1lcmdlKHQsICfor6bmg4UnLCAxKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL29uTGluZS5wbmcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206ICdob21lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkID0gZC5jb25jYXQobGlzdClcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfml6DotYTmupAnLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBzZXRSZXN1bHQoZClcXG4gICAgfVxcblxcbn1cXG5zID0gZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKTtcXG5cXG5sZXQgciA9IFxcXCJcXFwiO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuXFxuICAgIHZhciB1cmwgPSBwb3N0KGBodHRwczovL3d3dy43MjU5OTguY29tL2tleXdvcmRzLmh0bWxgLCB7XFxuICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAga2V5d29yZHM6IHMsXFxuICAgICAgICAgICAgdHlwZTogJ21vdmllJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgIH0pXFxuICAgIHZhciBqc29uID0gSlNPTi5wYXJzZSh1cmwpXFxuICAgIHZhciB0dXJsID0ganNvbi51cmwucmVwbGFjZSgvLVxcXFxkKy5odG1sJC8sICctJyArIE1ZX1BBR0UgKyAnLmh0bWwnKVxcbiAgICBNWV9VUkwgPSB0dXJsXFxuICAgIHZhciBodG1sID0gZmV0Y2godHVybClcXG5cXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuZWFjaCcpXFxuICAgIC8vbG9nKGxpc3QpXFxuXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuXFxuICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgICAgIGxldCBuYW1lID0gcGRmaChpdCwgJ2EmJnRpdGxlJyk7XFxuICAgICAgICBsZXQgaW1nID0gcGQoaXQsICdpbWcmJnNyYycpO1xcbiAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGltZyA9IFxcXCJodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL3ByZWxvYWRJbWcucG5nXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB1cmwgPSBwZChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgIGxldCBkZXNjID0gcGRmYShpdCwgJ2JvZHkmJi5pbmZvJiZhJykubWFwKHggPT4gcGRmaCh4LCAnYSYmVGV4dCcpKS5qb2luKCcgJyk7XFxuICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKGl0LCAnLm5vU2NvcmUmJlRleHQnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHdyYXAobmFtZSwgcyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgZGVzYzogJ+ivhOWIhjonICsgc2NvcmUgKyAnXFxcXG4nICsgZGVzYyxcXG4gICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocnVsZSwgdXJsLCBzKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBmaW5kSXRlbXNCeUNscyh1cmwpO1xcbiAgICAgICAgICAgICAgICBpZiAoISFjbHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyh1cmwpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5tb3ZpZVp5JiZhJylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2w/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsICd1bCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJoaWtlcjovL3BhZ2UvcD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZ1PVxcXCIgKyBiYXNlNjRFbmNvZGUodSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtZXJnZSh0LCAn6K+m5oOFJywgMSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS9zdGF0aWMvc2VhcmNoL2ltYWdlcy9vbkxpbmUucG5nJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiAnaG9tZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkLCBsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5peg6LWE5rqQJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSwgdXJsLCBzKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBzZXRSZXN1bHQoZClcXG59IGVsc2Uge1xcblxcbn1cXG5cXG5pZiAoZ2V0SXRlbSgnaG9tZScsICflhbMnKSA9PSAn5byAJykge1xcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgICAgICBNWV9VUkwgPSAnaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS8nO1xcbiAgICAgICAgdmFyIHRpdGxlID0gaXRlbS5zcGxpdCgnIycpWzBdXFxuICAgICAgICB2YXIga2V5ID0gaXRlbS5zcGxpdCgnIycpWzFdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2goYGh0dHBzOi8vd3d3LjcyNTk5OC5jb20veWluZ2t1LWxpc3QvJHtrZXl9LTAtMC0wLTAtMC0wLmh0bWxgKVxcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuZWFjaCcpXFxuXFxuICAgICAgICBsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgICAgICB2YXIgbmFtZSA9IHBkZmgoeCwgJ2EmJnRpdGxlJylcXG4gICAgICAgICAgICBsZXQgaW1nID0gcGQoeCwgJ2ltZyYmc3JjJyk7XFxuICAgICAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBpbWcgPSBcXFwiaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS9zdGF0aWMvc2VhcmNoL2ltYWdlcy9wcmVsb2FkSW1nLnBuZ1xcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCB1cmwgPSBwZCh4LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgIGxldCBzY29yZSA9IHBkZmgoeCwgJy5ub1Njb3JlJiZUZXh0Jyk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBzY29yZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobiwgdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZHVybCcsIHUpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBbJ+eUteW9sSMxJywgJ+eUteinhuWJpyMyJywgJ+WKqOa8qyMzJywgJ+e6quW9leeJhyM0J10ubWFwKHggPT4ge1xcblxcbiAgICAgICAgc2V0TGlzdHMoeClcXG4gICAgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI2LueUteW9seeLl1wiLFwicGF0aFwiOlwiZHlkb2dcIixcInJ1bGVcIjpcImpzOlxcbk1ZX1VSTD0naHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL3NvTW9yZS9hbGwtYWxsLWFsbC1hbGwtJztcXG5sZXQgZHVybCA9IGdldE15VmFyKFxcXCJkdXJsXFxcIiwgXFxcIlxcXCIpO1xcbmlmIChkdXJsICE9ICcnKSB7XFxuICAgIC8vbG9nKGR1cmwpXFxuXFxuICAgIGxldCB1cmwgPSBkdXJsO1xcbiAgICBsZXQgaWQgPSB1cmw7XFxuICAgIGxldCBuYW1lID0gcztcXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2godXJsKTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICB2YXIgaHRtbCA9ICcnXFxuICAgIH1cXG4gICAgdmFyIHJ1bGUgPSBNWV9SVUxFLnRpdGxlXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChodG1sLCAnaDQmJlRleHQnKSxcXG4gICAgICAgIGltZzogcGRmaChodG1sLCAnaW1nJiZkYXRhLXVybCcpLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICBkZXNjOiBwZGZoKGh0bWwsICdib2R5JiYucHViVGltZSYmVGV4dCcpLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBsZXQgaHRtbCA9IGZldGNoKGBodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vU3BpZGVyTW92aWUvenkvJHtuYW1lfWAsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAneC1yZXF1ZXN0ZWQtd2l0aCc6ICdYTUxIdHRwUmVxdWVzdCdcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllWnkmJmEnKVxcbiAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgd3JhcDFcXG4gICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICBsaXN0ID0gbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJ2xpLDAmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHdlYj1wZGZoKGl0LCAnbGksMSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHdyYXAxKHdlYisnLScrdCwgcyksXFxuICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL29uTGluZS5wbmcnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTp0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYjp3ZWIsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkID0gZC5jb25jYXQobGlzdClcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XFxucyA9IGdldE15VmFyKFxcXCJzb3VcXFwiLCBcXFwiXFxcIik7XFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICB2YXIgcGFnZSA9IE1ZX1BBR0U7XFxuICAgIHZhciB1cmwgPSBgaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL3NvLyR7c30vcGFnZV8ke3BhZ2V9Lmh0bWxgO1xcbiAgICAvL2xvZyh1cmwpXFxuICAgIHZhciBodG1sID0gZmV0Y2godXJsKVxcblxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5lYWNoJylcXG4gICAgLy9sb2cobGlzdClcXG5cXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXBcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG5cXG4gICAgZm9yIChsZXQgaXQgb2YgbGlzdCkge1xcbiAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCAnYSYmdGl0bGUnKTtcXG4gICAgICAgIGxldCBpbWcgPSBwZChpdCwgJ2ltZyYmZGF0YS11cmwnKTtcXG4gICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBpbWcgPSBcXFwiaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL1ZpZXcvaW1hZ2VzL2JsYW5rX2JnLnBuZ1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdXJsID0gcGQoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICBsZXQgZGVzYyA9IHBkZmEoaXQsICdib2R5JiYuaW5mbyYmYScpLm1hcCh4ID0+IHBkZmgoeCwgJ2EmJlRleHQnKSkuam9pbignICcpO1xcbiAgICAgICAgbGV0IHNjb3JlID0gcGRmaChpdCwgJy5ub1Njb3JlJiZUZXh0Jyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB3cmFwKG5hbWUsIHMpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnLFxcbiAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgIGRlc2M6ICfor4TliIY6JyArIHNjb3JlICsgJ1xcXFxuJyArIGRlc2MsXFxuICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHJ1bGUsIHVybCwgcywgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gZmluZEl0ZW1zQnlDbHModXJsKTtcXG4gICAgICAgICAgICAgICAgaWYgKCEhY2xzKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHModXJsKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChgaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL1NwaWRlck1vdmllL3p5LyR7bmFtZX1gLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAneC1yZXF1ZXN0ZWQtd2l0aCc6ICdYTUxIdHRwUmVxdWVzdCdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllWnkmJmEnKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwMVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJ2xpLDAmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3ZWI9cGRmaChpdCwgJ2xpLDEmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImdT1cXFwiICsgYmFzZTY0RW5jb2RlKHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcDEod2ViKyctJyt0LCBzKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL29uTGluZS5wbmcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTp0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWI6d2ViLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCwgbGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUsIHVybCwgcywgbmFtZSksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHVybCxcXG4gICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgc2V0UmVzdWx0KGQpXFxufSBlbHNlIHtcXG5cXG59XFxuXFxuaWYgKGdldEl0ZW0oJ2hvbWUnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgZnVuY3Rpb24gc2V0TGlzdHMoaXRlbSkge1xcbiAgICAgICAgTVlfVVJMID0gJ2h0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS8nO1xcbiAgICAgICAgdmFyIHRpdGxlID0gaXRlbS5zcGxpdCgnIycpWzBdXFxuICAgICAgICB2YXIga2V5ID0gaXRlbS5zcGxpdCgnIycpWzFdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcXG4gICAgICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xcbiAgICAgICAgLy92YXIgaHRtbCA9IGZldGNoKGBodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vbVJlY29tbWQvJHtrZXl9YCk7XFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGBodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vc29Nb3JlLyR7a2V5fS1hbGwtYWxsLSR7eWVhcn0tYCk7XFxuXFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5lYWNoJylcXG5cXG4gICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnYSYmdGl0bGUnKVxcbiAgICAgICAgICAgIGxldCBpbWcgPSBwZCh4LCAnaW1nJiZkYXRhLXVybCcpO1xcbiAgICAgICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgaW1nID0gXFxcImh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9WaWV3L2ltYWdlcy9ibGFua19iZy5wbmdcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgdXJsID0gcGQoeCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKHgsICcubm9TY29yZSYmVGV4dCcpO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgZGVzYzogc2NvcmUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4sIHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R1cmwnLCB1KVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lLCB1cmwpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gaG9tZSgpIHtcXG4gICAgICAgIFsn55S15b2xI21vdmllJywgJ+eUteinhuWJpyN0dicsICfnuqrlvZXniYcjZG9jJywgJ+WKqOa8qyNjb21pYyddLm1hcCh4ID0+IHtcXG5cXG4gICAgICAgICAgICBzZXRMaXN0cyh4KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBcXG4gICAgdmFyIHBhZ2U9TVlfUEFHRTtcXG4gICAgbGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsIE1ZX1VSTCk7XFxuICAgIGlmKHBhZ2U+MSl7XFxuICAgICAgICAvL2xvZyh0cnVlX3VybClcXG4gICAgICAgIHRydWVfdXJsPXRydWVfdXJsK2AvcGFnZV8ke3BhZ2V9Lmh0bWxgXFxuICAgICAgICAvL2xvZyh0cnVlX3VybClcXG4gICAgfVxcbiAgICB2YXIgaHRtbCA9ZmV0Y2godHJ1ZV91cmwpLnJlcGxhY2UoJyUnLCcnKTtcXG4gICAgLy9sb2coaHRtbClcXG4gICAgXFxuICAgIFxcbiAgICBjb25zdCDliIbnsbvpopzoibIgPSBnZXRSYW5nZUNvbG9ycygpO1xcbiAgICBjb25zdCDlpKfnsbvlrprkvY0gPSAnLndfMTAwJztcXG4gICAgY29uc3Qg5ou85o6l5YiG57G7ID0gJ2JvZHkmJi55X2ZpbHRlck1lbnU6bnRoLWNoaWxkKG4rMik+ZGl2PmRpdic7XFxuICAgIGNvbnN0IOWwj+exu+WumuS9jSA9ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjliIbnsbspKSc7XFxuICAgIGNvbnN0IOWIhuexu+agh+mimCA9ICdhJiZUZXh0JztcXG4gICAgY29uc3Qg5YiG57G76ZO+5o6lID0gJ2EmJmhyZWYnO1xcblxcbiAgICAvL+WKqOaAgeWIhuexu1xcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2R0ZmwnKSkucnVsZSk7XFxuICAgIFxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5lYWNoJylcXG5cXG4gICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICB2YXIgbmFtZSA9IHBkZmgoeCwgJ2EmJnRpdGxlJylcXG4gICAgICAgIGxldCBpbWcgPSBwZCh4LCAnaW1nJiZzcmN8fGltZyYmZGF0YS11cmwnKTtcXG4gICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBpbWcgPSBcXFwiaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL1ZpZXcvaW1hZ2VzL2JsYW5rX2JnLnBuZ1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdXJsID0gcGQoeCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgIGxldCBzY29yZSA9IHBkZmgoeCwgJy5ub1Njb3JlJiZUZXh0Jyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgIGRlc2M6IHNjb3JlLFxcbiAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4sIHUpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdkdXJsJywgdSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgbmFtZSwgdXJsKVxcbiAgICAgICAgfSlcXG4gICAgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIHliIbnsbtcIixcInBhdGhcIjpcImR0ZmxcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0wqBlbXB0ecKgPcKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuaWbCoCh0eXBlb2Yo5ou85o6l5YiG57G7KcKgIT3CoCd1bmRlZmluZWQnwqAmJsKg5ou85o6l5YiG57G7wqAhPcKgJycpwqB7XFxuwqDCoMKgwqB2YXLCoGNhdGVnb3JpZXPCoD3CoHBkZmEoaHRtbCzCoOWkp+exu+WumuS9jSkuY29uY2F0KHBkZmEoaHRtbCzCoOaLvOaOpeWIhuexuykpXFxufcKgZWxzZcKge1xcbsKgwqDCoMKgdmFywqBjYXRlZ29yaWVzwqA9wqBwZGZhKGh0bWwswqDlpKfnsbvlrprkvY0pXFxufVxcblxcbmxldMKgaW5pdF9jYXRlwqA9wqBbXVxcblxcbmZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICBpbml0X2NhdGUucHVzaChcXFwiMFxcXCIpXFxufVxcblxcbmNvbnN0wqBmb2xkwqA9wqBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLMKgXFxcIjBcXFwiKVxcbmNvbnN0wqBjYXRlX3RlbXBfanNvbsKgPcKgZ2V0TXlWYXIoTVlfUlVMRS50aXRsZSzCoEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuY29uc3TCoGNhdGVfdGVtcMKgPcKgSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG5cXG5cXG5pZsKgKHBhcnNlSW50KHBhZ2UpwqA9PT3CoDEpwqB7XFxuICAgIGQucHVzaCh7XFxuICAgIGNvbF90eXBlOidiaWdfYmxhbmtfYmxvY2snXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgIGNvbF90eXBlOidiaWdfYmxhbmtfYmxvY2snXFxuICAgIH0pXFxuICAgIFxcbsKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgdGl0bGU6wqBmb2xkwqA9PT3CoCcxJ8KgP8KgJ+KAnOKAnOKAneKAnTxiPifCoCvCoCdXJy5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKcKgK8KgJzwvYj4nwqA6wqAn4oCc4oCc4oCd4oCdPGI+J8KgK8KgJ00nLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpwqArwqAnPC9iPicsXFxuwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQoKS5sYXp5UnVsZSgoZm9sZCnCoD0+wqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoTVlfUlVMRS5ncm91cCzCoGZvbGTCoD09PcKgJzEnwqA/wqAnMCfCoDrCoCcxJyk7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoH0swqBmb2xkKSxcXG7CoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxuwqDCoMKgwqB9KVxcbsKgwqDCoMKgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSzCoGluZGV4KcKgPT7CoHtcXG7CoMKgwqDCoMKgwqDCoMKgbGV0wqBzdWJfY2F0ZWdvcmllc8KgPcKgcGRmYShjYXRlZ29yeSzCoOWwj+exu+WumuS9jSk7XFxuwqDCoMKgwqDCoMKgwqDCoGlmwqAoaW5kZXjCoD09PcKgMCnCoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLMKga2V5KcKgPT7CoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldMKgdGl0bGXCoD3CoHBkZmgoaXRlbSzCoOWIhuexu+agh+mimClcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZcKgPcKgdGl0bGUucmVwbGFjZShuZXfCoFJlZ0V4cCjmjpLpmaQswqBcXFwiZ1xcXCIpLMKgXFxcIlxcXCIpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZTrCoGtleS50b1N0cmluZygpwqA9PT3CoGNhdGVfdGVtcFtpbmRleF3CoD/CoFxcXCLigJzigJzigJ3igJ1cXFwiwqArwqB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKcKgOsKgdGl0bGUsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQocGQoaXRlbSzCoOWIhuexu+mTvuaOpSnCoCvCoCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldMKgbmV3X2NhdGXCoD3CoFtdXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLMKgaW5kZXgpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmV3X2NhdGUucHVzaChpbmRleMKgPT09wqAwwqA/wqBwYXJhbXMua2V5LnRvU3RyaW5nKCnCoDrCoFxcXCIwXFxcIilcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dE15VmFyKE1ZX1JVTEUudGl0bGUswqBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoTVlfUlVMRS51cmwswqBpbnB1dClcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWZyZXNoUGFnZSh0cnVlKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0swqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2F0ZV90ZW1wOsKgY2F0ZV90ZW1wLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtleTrCoGtleSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdlOsKgcGFnZSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgJ3Njcm9sbF9idXR0b24nLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb2xfdHlwZTrCoFxcXCJibGFua19ibG9ja1xcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXG7CoMKgwqDCoMKgwqDCoMKgfcKgZWxzZcKgaWbCoChmb2xkwqA9PT3CoCcxJynCoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLMKga2V5KcKgPT7CoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldMKgdGl0bGXCoD3CoHBkZmgoaXRlbSzCoOWIhuexu+agh+mimClcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZcKgPcKgdGl0bGUucmVwbGFjZShuZXfCoFJlZ0V4cCjmjpLpmaQswqBcXFwiZ1xcXCIpLMKgXFxcIlxcXCIpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZTrCoGtleS50b1N0cmluZygpwqA9PT3CoGNhdGVfdGVtcFtpbmRleF3CoD/CoFxcXCLigJzigJzigJ3igJ1cXFwiwqArwqB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKcKgOsKgdGl0bGUsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQocGQoaXRlbSzCoOWIhuexu+mTvuaOpSnCoCvCoCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XcKgPcKgcGFyYW1zLmtleS50b1N0cmluZygpXFxuXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoTVlfUlVMRS50aXRsZSzCoEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dE15VmFyKE1ZX1JVTEUudXJsLMKgaW5wdXQpXFxuXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UodHJ1ZSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm7CoFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LMKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhdGVfdGVtcDrCoGNhdGVfdGVtcCxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbmRleDrCoGluZGV4LFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtleTrCoGtleSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdlOsKgcGFnZSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgJ3Njcm9sbF9idXR0b24nLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb2xfdHlwZTrCoFxcXCJibGFua19ibG9ja1xcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXG7CoMKgwqDCoMKgwqDCoMKgfVxcbsKgwqDCoMKgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI3LuWcn+aLqOm8oFwiLFwicGF0aFwiOlwidGJzZHlcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkdXJsID0gZ2V0TXlWYXIoXFxcImR1cmxcXFwiLCBcXFwiXFxcIik7XFxuaWYgKGR1cmwgIT0gJycpIHtcXG4gICAgTVlfVVJMID0gZHVybDtcXG4gICAgLy9sb2coZHVybClcXG5cXG4gICAgbGV0IHVybCA9IGR1cmw7XFxuICAgIGxldCBpZCA9IHVybDtcXG4gICAgbGV0IG5hbWUgPSBzO1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICB2YXIgaHRtbCA9ICcnXFxuICAgIH1cXG5cXG4gICAgdmFyIHJ1bGUgPSBNWV9SVUxFLnRpdGxlXFxuICAgIGxldCBkZXNjID0gcGRmaChodG1sLCAnLnZpZGVvX3Bsb3RfaW5mb19jb250ZW50JiZUZXh0Jyk7XFxuICAgIGxldCBzY29yZSA9IHBkZmgoaHRtbCwgJy52aWRlb19wb2ludCYmVGV4dCcpO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgoaHRtbCwgJy52aWRlb19pbmZvX3RpdGxlX3RleHQmJlRleHQnKSxcXG4gICAgICAgIGltZzogcGRmaChodG1sLCAnLnZpZGVvX2NvdmVyX2ltZ19ib3gmJmltZyYmc3JjJyksXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJyxcXG4gICAgICAgIGRlc2M6ICfor4TliIY6JyArIHNjb3JlICsgJ1xcXFxu5Li75ryUOicgKyBkZXNjLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG5cXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYudmlkZW9fZG93bmxvYWRfbGlua19pdGVtJylcXG4gICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgIHdyYXAxXFxuICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2w/cnVsZT1cXFwiICsgcnVsZSk7XFxuXFxuICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsICcudmlkZW9fZG93bmxvYWRfbGlua19uYW1lX3RleHQmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHdlYiA9IHBkZmgoaXQsICcucmVzb3VyY2Vfd2Vic2l0ZV9uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgIGxldCBpbWcgPSBwZChpdCwgJy52aWRlb19sYWJlbHMmJmltZyYmc3JjJyk7XFxuXFxuICAgICAgICAgICAgICAgIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImdT1cXFwiICsgYmFzZTY0RW5jb2RlKHUpO1xcbiAgICAgICAgICAgICAgICB1ID0gZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcDEod2ViICsgJy0nICsgdCwgcyksXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2ViOiB3ZWIsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkID0gZC5jb25jYXQobGlzdClcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XFxucyA9IGdldE15VmFyKFxcXCJzb3VcXFwiLCBcXFwiXFxcIik7XFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICB2YXIgcGFnZSA9IE1ZX1BBR0U7XFxuICAgIE1ZX1VSTCA9IGBodHRwczovL3d3dy50YnNkeS5jb20vc2VhcmNoLmh0bWw/a2V5d29yZD0ke3N9JnBhZ2VkPSR7cGFnZX0mY2F0ZWdvcnk9YDtcXG4gICAgLy9sb2coTVlfVVJMKVxcbiAgICBsZXQgaHRtbCA9IGZldGNoKE1ZX1VSTCwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLnNlYXJjaF9yZXN1bHRfaXRlbScpXFxuXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuXFxuICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgICAgIGxldCBuYW1lID0gcGRmaChpdCwgJy5zZWFyY2hfcmVzdWx0X3RpdGxlJiZUZXh0Jyk7XFxuICAgICAgICBsZXQgaW1nID0gcGQoaXQsICdpbWcmJnNyYycpO1xcbiAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGltZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHVybCA9IHBkKGl0LCAnYSYmaHJlZicpO1xcbiAgICAgICAgbGV0IGRlc2MgPSBwZGZhKGl0LCAnYm9keSYmLnNlYXJjaF9yZXN1bHRfaXRlbSYmLnNlYXJjaF9yZXN1bHRfc3ViX2luZm9fbGluZSYmLnZpZGVvX2FjdG9yJykubWFwKHggPT4gcGRmaCh4LCAnc3BhbiYmVGV4dCcpKS5qb2luKCcgJyk7XFxuICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKGl0LCAnLnNlYXJjaF92aWRlb19pbWdfcG9pbnQmJlRleHQnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHdyYXAobmFtZSwgcyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgZGVzYzogJ+ivhOWIhjonICsgc2NvcmUgKyAnXFxcXG7kuLvmvJQ6JyArIGRlc2MsXFxuICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHJ1bGUsIHVybCwgcywgbmFtZSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gZmluZEl0ZW1zQnlDbHModXJsKTtcXG4gICAgICAgICAgICAgICAgaWYgKCEhY2xzKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHModXJsKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLnZpZGVvX2Rvd25sb2FkX2xpbmtfaXRlbScpXFxuICAgICAgICAgICAgICAgICAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9VUkwgPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwMVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJy52aWRlb19kb3dubG9hZF9saW5rX25hbWVfdGV4dCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHdlYiA9IHBkZmgoaXQsICcucmVzb3VyY2Vfd2Vic2l0ZV9uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1nID0gcGQoaXQsICcudmlkZW9fbGFiZWxzJiZpbWcmJnNyYycpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJoaWtlcjovL3BhZ2UvcD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZ1PVxcXCIgKyBiYXNlNjRFbmNvZGUodSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwMSh3ZWIgKyAnLScgKyB0LCBzKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYjogd2ViLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCwgbGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUsIHVybCwgcywgbmFtZSksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHVybCxcXG4gICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgc2V0UmVzdWx0KGQpXFxufSBlbHNlIHtcXG5cXG59XFxuXFxuaWYgKGdldEl0ZW0oJ2hvbWUnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgbGV0IGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cudGJzZHkuY29tLycsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgICAgICBNWV9VUkwgPSAnaHR0cHM6Ly93d3cudGJzZHkuY29tLyc7XFxuICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLm5hbWU7XFxuICAgICAgICB2YXIga2V5ID0gaXRlbS5zZWxlY3Q7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiBpdGVtLmltZyxcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgYGJvZHkmJi5jb250YWluZXJfbWFpbl9ob3RfJHtrZXl9JiYuaG90X3Jlc291cmNlX29uZWApXFxuXFxuICAgICAgICBsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgICAgICB2YXIgbmFtZSA9IHBkZmgoeCwgJy5yZXNvdXJjZV9uYW1lJiZUZXh0JylcXG4gICAgICAgICAgICBsZXQgaW1nID0gcGQoeCwgJy5yZXNvdXJjZV9wb3N0ZXJzJiZzcmMnKTtcXG4gICAgICAgICAgICBpZiAoaW1nID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGltZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgdXJsID0gcGQoeCwgJ2EmJmhyZWYnKTtcXG5cXG4gICAgICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKHgsICcudXBkYXRlX3RpcHx8LnJlc291cmNlX3Njb3JlfHxpbWcmJlRleHQnKTtcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIGRlc2M6IHNjb3JlLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKChuLCB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbilcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdkdXJsJywgdSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgbmFtZSwgdXJsKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIFt7XFxuICAgICAgICBuYW1lOiAn54Ot6Zeo55S16KeG5YmnJyxcXG4gICAgICAgIHNlbGVjdDogJ3R2cycsXFxuICAgICAgICBpbWc6ICdodHRwczovL3d3dy50YnNkeS5jb20vaW1nL21yc3cvd2ViL2luZGV4L2luZGV4X3R2LnN2ZycsXFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6ICfng63pl6jnlLXlvbEnLFxcbiAgICAgICAgc2VsZWN0OiAnbW92aWVzJyxcXG4gICAgICAgIGltZzogJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9pbWcvbXJzdy93ZWIvaW5kZXgvaW5kZXhfbXYuc3ZnJ1xcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiAn54Ot6Zeo5Yqo5ryrJyxcXG4gICAgICAgIHNlbGVjdDogJ2FuaW1lcycsXFxuICAgICAgICBpbWc6ICdodHRwczovL3d3dy50YnNkeS5jb20vaW1nL21yc3cvd2ViL2luZGV4L2luZGV4X3Nob3cuc3ZnJ1xcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiAn54Ot6Zeo57u86Im6JyxcXG4gICAgICAgIHNlbGVjdDogJ3ZhcmlldHlzJyxcXG4gICAgICAgIGltZzogJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9pbWcvbXJzdy93ZWIvaW5kZXgvaW5kZXhfcmVjb3Jkcy5zdmcnXFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6ICfng63pl6jnuqrlvZXniYcnLFxcbiAgICAgICAgc2VsZWN0OiAnZG9jdW1lbnRhcnlzJyxcXG4gICAgICAgIGltZzogJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9pbWcvbXJzdy93ZWIvaW5kZXgvaW5kZXhfcmVjb3Jkcy5zdmcnLFxcbiAgICB9XS5tYXAoeCA9PiB7XFxuXFxuICAgICAgICBzZXRMaXN0cyh4KVxcbiAgICB9KVxcbn1cIn1dIiwiaWNvbiI6IiIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment