xiaomianao666

小程序:bilili

Sep 13th, 2023
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@bilili@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiYmlsaWxpIiwiYXV0aG9yIjoi5L6g5ZCNIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjZnlwYWdlIiwidmVyc2lvbiI6MTMsImNvbF90eXBlIjoibW92aWVfMV92ZXJ0aWNhbF9waWMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InZpZGVvIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG52YXIgZCA9IFtdO1xudmFyIHBhZ2UgPSBNWV9QQUdFO1xuaXNMb2dpbiA9IEpTT04ucGFyc2UoJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2FwaVwiKS5pc0xvZ2dlZEluKCkpO1xuLy8g6aqM6K+B55m75b2VXG5pZiAoaXNMb2dpbi50eXBlID09PSB0cnVlKSB7XG4gICAgYmlsaURhdGUgPSBKU09OLnBhcnNlKHJlcXVlc3QoXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XCIpKTtcbiAgICBjb29raWUgPSBiaWxpRGF0ZS5jb29raWU7XG4gICAgdXNlck5hbWUgPSBiaWxpRGF0ZS51c2VyTmFtZTtcbiAgICBtaWQgPSBiaWxpRGF0ZS51c2VyTWlkO1xuICAgIHVzZXJGYWNlID0gYmlsaURhdGUuZmFjZSArIFwiQFJlZmVyZXI9XCI7XG4gICAgaWYgKHBhZ2UgPT0gMSkge1xuICAgICAgICB2YXIgVGFiID0gWyfng63mmKAnLCAn54mH5bqTJywgJ+aOqOmAgScsJ+eDremXqCcsICforqLpmIUnLCAn5YWz5rOoJywgJ+aUtuiXjycsICfotrPov7knLCfliqjmgIEnXTtcbiAgICAgICAgVGFiID0gVGFiLm1hcCgoaXQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdCA9PT0gZ2V0SXRlbSgn6aaW6aG1JywgJ+aOqOmAgScpID8gJ/CfkYknICsgaXQgOiBpdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVwiYmx1ZVwiPicgKyB1c2VyTmFtZSxcbiAgICAgICAgICAgIGRlc2M6JzwvZm9udD7irZA8Zm9udCBjb2xvcj1cIiMxOUI4OURcIj7lvZPliY3vvJonICsgZ2V0SXRlbSgn6aaW6aG1JywgJ+aOqOmAgScpICsgJzwvZm9udD7irZAnLFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChUYWIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJChUYWIsIDMpLnNlbGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv8J+RiS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ+mmlumhtScsIGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRvYXN0Oi8v5YiH5o2i6aaW6aG15Li6OlwiICsgaW5wdXQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIFRhYiksXG4gICAgICAgICAgICBpbWc6IHVzZXJGYWNlID09PSB1bmRlZmluZWQgPyAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vdmllLzIwLnN2ZycgOiB1c2VyRmFjZSxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcImF2YXRhclwiLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICBpZDogJ+mmlumhteaYvuekuidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xuICAgICAgICB9KVxuICAgIH1cbiAgICAvLyDljLnphY3pppbpobXpgInpoblcbiAgICBzd2l0Y2ggKGdldEl0ZW0oJ+mmlumhtScsICfmjqjpgIEnKSkge1xuICAgICAgICBjYXNlICfng63mmKAnOlxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9VcGRhdGVUYWJsZXMnKSkucnVsZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAn54mH5bqTJzpcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvdmF1bHQnKSkucnVsZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAn5o6o6YCBJzpcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZmVlZCcpKS5ydWxlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICfng63pl6gnOlxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9ob3RWaWRlbycpKS5ydWxlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICforqLpmIUnOlxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9zdWJzY3JpcHRpb24nKSkucnVsZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAn5YWz5rOoJzpcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYXR0ZW50aW9uJykpLnJ1bGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ+aUtuiXjyc6XG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2NvbGVjdGlvbicpKS5ydWxlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICfotrPov7knOlxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS90cmFjaycpKS5ydWxlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICfliqjmgIEnOlxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9sYXRldE5ld3MnKSkucnVsZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvVXBkYXRlVGFibGVzJykpLnJ1bGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufSBlbHNlIHtcbiAgICBsZXQgYSA9IFtdXG4gICAgbGV0IHRpbWUgPSAxMFxuICAgIGEucHVzaCh7XG4gICAgICAgIHRpdGxlOiBgICAgICAgICAgICAgICAgICAgICAg5L2/55So5YmN6aG755+lXG7mnKzop4TliJnosIPnlKhodHRwczovL2dpdGh1Yi5jb20vU29jaWFsU2lzdGVyWWkvYmlsaWJpbGktQVBJLWNvbGxlY3TnmoRhcGnvvIzmiYDmnInku6PnoIHlhajpg6jlvIDmupDvvIzlubbkuJTkuI3lrZjlnKjkuIrkvKDnlKjmiLfkv6Hmga/nmoTooYzkuLpcbuacrOinhOWImeS4uuWtpuS5oOebrueahO+8jOivt+S6juWvvOWFpTI05bCP5pe25YaF5Yig6Zmk77yB77yB77yBICAgICAgICAgICAgICAgICAgICAgICAgXG7lvIDlp4vkvb/nlKjmnKzop4TliJnljbPku6PooajpgbXlrojop4TliJkgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgYCxcbiAgICAgICAgXCJjb2xfdHlwZVwiOiBcImxvbmdfdGV4dFwiLFxuICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgaWQ6IFwidGV4dFwiXG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIHRpdGxlOiB0aW1lICsgXCLnp5LlkI7nu6fnu61cIixcbiAgICAgICAgY29sX3R5cGU6IFwidGV4dF8xXCIsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBpZDogXCJ0aW1lclwiXG4gICAgICAgIH1cbiAgICB9KVxuICAgIHNldFJlc3VsdChhKVxuICAgIHdoaWxlICh0aW1lICE9IDApIHtcbiAgICAgICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCgxMDAwKVxuICAgICAgICB0aW1lIC09IDFcbiAgICAgICAgdXBkYXRlSXRlbShcInRpbWVyXCIsIHtcbiAgICAgICAgICAgIHRpdGxlOiB0aW1lICsgXCLnp5LlkI7nu6fnu61cIlxuICAgICAgICB9KVxuICAgIH1cbiAgICBhZGRJdGVtQWZ0ZXIoXCJ0aW1lclwiLCB7XG4gICAgICAgIHRpdGxlOiBcIueZu+mZhlwiLFxuICAgICAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL2xvZ2luXCIsXG4gICAgICAgIGNvbF90eXBlOiBcInRleHRfY2VudGVyXzFcIlxuICAgIH0pXG4gICAgZGVsZXRlSXRlbShcInRleHRcIilcbiAgICBkZWxldGVJdGVtKFwidGltZXJcIilcbn1cbnNldFJlc3VsdChkKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjKiojI2Z5cGFnZSIsImdyb3VwIjoi4pGp57K+5ZOBIiwic2VhcmNoRmluZCI6ImpzOlxuTVlfVVJMID0gTVlfVVJMLnNwbGl0KCcjIycpO1xubGV0IHNlYXdvcmQgPSBNWV9VUkxbMV07XG52YXIgZCA9IFtdO1xuaWYgKE1ZX1BBR0U9PTEpIHtcbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTogXCJ1cOaQnD0+XCIgKyBzZWF3b3JkLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBTZWFyY2g/ZnlwYWdlJyxcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgIHNlYXdvcmQ6IHNlYXdvcmRcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcInZpZGVv5pCcPT5cIiArIHNlYXdvcmQsXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS92aWRlb1NlYXJjaD9meXBhZ2UnLFxuICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgc2Vhd29yZDogc2Vhd29yZFxuICAgICAgICB9XG4gICAgfSk7XG59XG5sZXQge2dldFNlYXJjaFJlc309JC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2FwaVwiKTtcbi8vIOeVquWJp1xubGlzdDE9Z2V0U2VhcmNoUmVzKCdtZWRpYV9iYW5ndW1pJyxzZWF3b3JkLE1ZX1BBR0UsMTIpLnJlc3VsdDtcbi8vIOW9seinhlxubGlzdDI9Z2V0U2VhcmNoUmVzKCdtZWRpYV9mdCcsc2Vhd29yZCxNWV9QQUdFLDEyKS5yZXN1bHQ7XG5pZiAobGlzdDEpIHtcbiAgICBsaXN0MS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoIWl0ZW0uY292ZXIubWF0Y2goL2h0dHBzLykpIHtcbiAgICAgICAgICAgIOWwgemdoiA9IGl0ZW0uY292ZXIucmVwbGFjZSgnaHR0cCcsJ2h0dHBzJykgKyBcIkBSZWZlcmVyPVwiO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIOWwgemdoiA9IGl0ZW0uY292ZXIrIFwiQFJlZmVyZXI9XCI7XG4gICAgICAgIH1cbiAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLnJlcGxhY2UoLzxlbSBjbGFzcz1cImtleXdvcmRcIj4vZywgJycpLnJlcGxhY2UoLzxcXC9lbT4vZywgJycpLFxuICAgICAgICAgICAgaW1nOiDlsIHpnaIsXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZmlsbWVyamkjaW1tZXJzaXZlVGhlbWUjJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0uZGVzYyxcbiAgICAgICAgICAgIGRlc2M6IGl0ZW0uc3R5bGVzLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICBzZWFzb25faWQ6IGl0ZW0uc2Vhc29uX2lkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuaWYgKGxpc3QyKSB7XG4gICAgbGlzdDIuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKCFpdGVtLmNvdmVyLm1hdGNoKC9odHRwcy8pKSB7XG4gICAgICAgICAgICDlsIHpnaIgPSBpdGVtLmNvdmVyLnJlcGxhY2UoJ2h0dHAnLCdodHRwcycpICsgXCJAUmVmZXJlcj1cIjtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICDlsIHpnaIgPSBpdGVtLmNvdmVyKyBcIkBSZWZlcmVyPVwiO1xuICAgICAgICB9XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZS5yZXBsYWNlKC88ZW0gY2xhc3M9XCJrZXl3b3JkXCI+L2csICcnKS5yZXBsYWNlKC88XFwvZW0+L2csICcnKSxcbiAgICAgICAgICAgIGltZzog5bCB6Z2iLFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2ZpbG1lcmppI2ltbWVyc2l2ZVRoZW1lIycsXG4gICAgICAgICAgICBjb250ZW50OiBpdGVtLmRlc2MsXG4gICAgICAgICAgICBkZXNjOiBpdGVtLnN0eWxlcyxcbiAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgc2Vhc29uX2lkOiBpdGVtLnNlYXNvbl9pZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbnNldFJlc3VsdChkKTtcbiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IioiLCJ1YSI6InBjIiwicHJlUnVsZSI6ImpzOlxuLy8g5Zu+54mH6aKE5aSE55CGXG5pbWdMb2NhdGlvbiA9IHtcbiAgICBcIuW3suaUtuiXj1wiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lt7LmlLbol48ucG5nJyxcbiAgICBcIuacquaUtuiXj1wiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/mnKrmlLbol48ucG5nJyxcbiAgICBcIueojeWQjuWGjeeci1wiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/nqI3lkI7lho3nnIsucG5nJyxcbiAgICBcIuacqueCuei1nlwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/mnKrngrnotZ4ucG5nJyxcbiAgICBcIuW3sueCuei1nlwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lt7LngrnotZ4ucG5nJyxcbiAgICBcIua3u+WKoOWFs+azqFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/mt7vliqDlhbPms6gucG5nJyxcbiAgICBcIuW3suWFs+azqFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lt7LlhbPms6gucG5nJyxcbiAgICBcIuS4k+agj1wiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/kuJPmoI8ucG5nJyxcbiAgICBcIuafpeeci+ivhOiuulwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/mn6XnnIvor4TorroucG5nJyxcbiAgICBcIuWRqOi+uVwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lkajovrkucG5nJyxcbiAgICBcIuWPjOi+uVwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lj4zovrkucG5nJyxcbiAgICBcIuWIl+ihqFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/liJfooagucG5nJyxcbiAgICBcIuiuoumYhVwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/orqLpmIUucG5nJyxcbiAgICBcIuaXpeWOhlwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/ml6XljoYucG5nJyxcbiAgICBcIuWKqOaAgVwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/liqjmgIEucG5nJyxcbiAgICBcIuWKqOaAgei2s+i/uVwiOidodHRwczovL2NkbjMuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9uYXR1cmUtMTY5LzMyL2dyYXNzX3R1cmZfcGxhbnRfbGF3bl9uYXR1cmVfbWVhZG93X2dhcmRlbl9uYXR1cmFsX2Vudmlyb25tZW50LTEyOC5wbmdAUmVmZXJlcj0nLFxuICAgIFwi5ZCI6ZuG5paH5Lu25aS5XCI6J2h0dHBzOi8vY2RuNC5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2NvbW1lbmx5LW5lZWRlZC80MDAvSWNvbi0xNy0xMjgucG5nQFJlZmVyZXI9JyxcbiAgICBcIuWIhlDliJfooajpoblcIjonaHR0cHM6Ly9jZG4xLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvbWluaW1hbC11aS0yLzI0L3BsYXlfbWVkaWFfYnV0dG9uLTEyOC5wbmdAUmVmZXJlcj0nXG59XG5zdG9yYWdlMC5wdXRNeVZhcign5Zu+5qCHJywgaW1nTG9jYXRpb24pO1xuLy8g5aaC5p6c5LuF5LuF5oOz5L2/55So5aSn5Lya5ZGYY29va2ll55So5p2l5pKt5pS+6KeG6aKR5LiN5p+l55yL5LuW5Lq66ZqQ56eB77yM6YKj5LmI5YaN5Yqg5LiK54us56uL55qEYmZfY29va2ll5Y2z5Y+v77yM5bCG5pyq5a6a5LmJ5pS55oiQ5LuW5Lq66LSm5Y+355qEY29va2ll5Y2z5Y+vXG5wdXRNeVZhcignYmZfY29va2llJyxcIuacquWumuS5iVwiKTtcblxuLy8qIOS4i+mdouS7o+eggeeUqOS6juiHquWKqOaLieWPluWbvuagh++8jOaXoOWliCAqL1xuaWYgKCFmaWxlRXhpc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMnKXx8IWZpbGVFeGlzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS90dWJpYW8nKSkge1xuICAgICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9zYXZlTG9jYWxcIikuc2F2ZUxvY2FsKCk7XG59XG4iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YiG57G754mH5bqTXCIsXCJwYXRoXCI6XCJ2YXVsdFwiLFwicnVsZVwiOlwi6aG26YOo5aSn57G7ID0gWyflm73liJsnLCAn55S16KeGJywgJ+e6quW9leeJhycsICfnu7zoibonLCAn55Wq5YmnJywgJ+eUteW9sSddXFxuaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAvLyDmipjlj6DlvIDlhbNcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflhbMnID8gJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZGMDAwMFxcXCI+4oioPC9zcGFuPjwvYj4nIDogJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzFhYWQxOVxcXCI+4oinPC9zcGFuPjwvYj4nLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcign5oqY5Y+gJywgJ+WFsycpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCfmipjlj6AnLCAn5byAJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIH0pXFxuICAgIOmhtumDqOWkp+exuy5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGxpID09IGdldE15VmFyKCflpKfnsbsnLCAn5Zu95YibJykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgbGkgKyAnPC9mb250PjwvYj4nIDogbGksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcign5aSn57G7JywgbGkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9LCBsaSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIH0pXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgfSlcXG59XFxuLy8g6aG26YOo5YiG57G75Y+C5pWw5pig5bCEXFxuc3dpdGNoIChnZXRNeVZhcign5aSn57G7JywgJ+WbveWImycpKSB7XFxuICAgIGNhc2UgJ+WbveWImyc6XFxuICAgICAgICBzZWFzb25UeXBlID0gNDtcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9ndW9jaHVhbmcvaW5kZXgnKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eUteinhic6XFxuICAgICAgICBzZWFzb25UeXBlID0gNTtcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS90di9pbmRleCcpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaggPSBwZGZhKGh0bWwsICcuZmlsdGVyLWxpc3QmJi5maWx0ZXItYmxvY2snKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoID0gcGRmYSh1bCwgJ3VsJiZsaScpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcijnrZvpgInmnaHku7YsICflhajpg6gnKSA9PSBwZGZoKGxpLCAnbGkmJlRleHQnKSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMWFhZDE5PicgKyBwZGZoKGxpLCAnbGkmJlRleHQnKSArICc8L2ZvbnQ+PC9iPicgOiBwZGZoKGxpLCAnbGkmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGksIOetm+mAieadoeS7tiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn57qq5b2V54mHJzpcXG4gICAgICAgIHNlYXNvblR5cGUgPSAzO1xcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2RvY3VtZW50YXJ5L2luZGV4LycpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaggPSBwZGZhKGh0bWwsICcuZmlsdGVyLWxpc3QmJi5maWx0ZXItYmxvY2snKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoID0gcGRmYSh1bCwgJ3VsJiZsaScpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcijnrZvpgInmnaHku7YsICflhajpg6gnKSA9PSBwZGZoKGxpLCAnbGkmJlRleHQnKSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMWFhZDE5PicgKyBwZGZoKGxpLCAnbGkmJlRleHQnKSArICc8L2ZvbnQ+PC9iPicgOiBwZGZoKGxpLCAnbGkmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGksIOetm+mAieadoeS7tiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn57u86Im6JzpcXG4gICAgICAgIHNlYXNvblR5cGUgPSA3O1xcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL3ZhcmlldHkvaW5kZXgnKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eVquWJpyc6XFxuICAgICAgICBzZWFzb25UeXBlID0gMTtcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9hbmltZS9pbmRleCcpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaggPSBwZGZhKGh0bWwsICcuZmlsdGVyLWxpc3QmJi5maWx0ZXItYmxvY2snKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoID0gcGRmYSh1bCwgJ3VsJiZsaScpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcijnrZvpgInmnaHku7YsICflhajpg6gnKSA9PSBwZGZoKGxpLCAnbGkmJlRleHQnKSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMWFhZDE5PicgKyBwZGZoKGxpLCAnbGkmJlRleHQnKSArICc8L2ZvbnQ+PC9iPicgOiBwZGZoKGxpLCAnbGkmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGksIOetm+mAieadoeS7tiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn55S15b2xJzpcXG4gICAgICAgIHNlYXNvblR5cGUgPSAyO1xcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL21vdmllL2luZGV4Jyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDQ7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYW5pbWUvaW5kZXgnKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxufVxcbi8vIOWtkOWIhuexu+WPguaVsOaYoOWwhFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+exu+WeiycsICflhajpg6gnKSkge1xcbiAgICBjYXNlICfmraPniYcnOlxcbiAgICAgICAgc2Vhc29uX3ZlcnNpb24gPSAxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eUteW9sSc6XFxuICAgICAgICBzZWFzb25fdmVyc2lvbiA9IDI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YW25LuWJzpcXG4gICAgICAgIHNlYXNvbl92ZXJzaW9uID0gMztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgc2Vhc29uX3ZlcnNpb24gPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5zd2l0Y2ggKGdldE15VmFyKCfphY3pn7MnLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAn5Y6f5aOwJzpcXG4gICAgICAgIHNwb2tlbl9sYW5ndWFnZV90eXBlID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfkuK3mlofphY3pn7MnOlxcbiAgICAgICAgc3Bva2VuX2xhbmd1YWdlX3R5cGUgPSAyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBzcG9rZW5fbGFuZ3VhZ2VfdHlwZSA9IC0xO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+WcsOWMuicsICflhajpg6gnKSkge1xcbiAgICBjYXNlICfkuK3lm73lpKfpmYYnOlxcbiAgICAgICAgYXJlYSA9IDE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pel5pysJzpcXG4gICAgICAgIGFyZWEgPSAyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e+juWbvSc6XFxuICAgICAgICBhcmVhID0gMztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfoi7Hlm70nOlxcbiAgICAgICAgYXJlYSA9IDQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Lit5Zu95riv5Y+wJzpcXG4gICAgICAgIGFyZWEgPSBbNiwgN107XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Z+p5Zu9JzpcXG4gICAgICAgIGFyZWEgPSA4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+azleWbvSc6XFxuICAgICAgICBhcmVhID0gOTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfms7Dlm70nOlxcbiAgICAgICAgYXJlYSA9IDEwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+ilv+ePreeJmSc6XFxuICAgICAgICBhcmVhID0gMTM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5b635Zu9JzpcXG4gICAgICAgIGFyZWEgPSAxNTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmhI/lpKfliKknOlxcbiAgICAgICAgYXJlYSA9IDM1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WFtuS7lic6XFxuICAgICAgICAvLyDlj6rmmK/nlarliafnmoTmg4XlhrVf5YWxNTXvvIzopoHlh4/ljrvlh7rnjrDnmoTigJTigJTnrpfkuobvvIznm7TmjqXlnKjliqjmgIHliIbnsbvnmoTml7blgJnljrvmjonkuoZcXG4gICAgICAgIGFyZWEgPSBbMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTVdO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBhcmVhID0gLTE7XFxuICAgICAgICBicmVhaztcXG59XFxuc3dpdGNoIChnZXRNeVZhcign54q25oCBJywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJ+WujOe7kyc6XFxuICAgICAgICBpc19maW5pc2ggPSAxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+i/nui9vSc6XFxuICAgICAgICBpc19maW5pc2ggPSAwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBpc19maW5pc2ggPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5zd2l0Y2ggKGdldE15VmFyKCflh7rlk4EnLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAn5aSu6KeGJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gNDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdCQkMnOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSAxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aOoue0oumikemBkyc6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Zu95a625Zyw55CGJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnTkhLJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfljoblj7LpopHpgZMnOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WNq+inhic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Ieq5Yi2JzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gOTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdJVFYnOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ1NLWSc6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnWkRGJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5ZCI5L2c5py65p6EJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Zu95YaF5YW25LuWJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Zu95aSW5YW25a6DJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTM7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gLTE7XFxuICAgICAgICBicmVhaztcXG59XFxuc3dpdGNoIChnZXRNeVZhcign54mI5p2DJywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJ+eLrOWutic6XFxuICAgICAgICBjb3B5cmlnaHQgPSAzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WFtuS7lic6XFxuICAgICAgICBjb3B5cmlnaHQgPSBbMSwgMiwgNF07XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIGNvcHlyaWdodCA9IC0xO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+S7mOi0uScsICflhajpg6gnKSkge1xcbiAgICBjYXNlICflhY3otLknOlxcbiAgICAgICAgc2Vhc29uX3N0YXR1cyA9IDE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5LuY6LS5JzpcXG4gICAgICAgIHNlYXNvbl9zdGF0dXMgPSBbMiwgNl07XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5aSn5Lya5ZGYJzpcXG4gICAgICAgIHNlYXNvbl9zdGF0dXMgPSBbNCwgNl07XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIHNlYXNvbl9zdGF0dXMgPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5zd2l0Y2ggKGdldE15VmFyKCflraPluqYnLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAnMeaciCc6XFxuICAgICAgICBzZWFzb25fbW9udGggPSAxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJzTmnIgnOlxcbiAgICAgICAgc2Vhc29uX21vbnRoID0gNDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICc35pyIJzpcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IDc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnMTDmnIgnOlxcbiAgICAgICAgc2Vhc29uX21vbnRoID0gMTA7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IC0xO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbi8vIOWIpOaWreWSjOaYoOWwhOW5tOS7vVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+Wkp+exuycsICflm73liJsnKSkge1xcbiAgICBjYXNlICflm73liJsnOlxcbiAgICBjYXNlICfnlarliacnOlxcbiAgICAgICAgLy8g55Wq5Ymn5ZKM5Zu95Yib44CQ5Lmf5piv5Y+r5YGa5bm05Lu95L2G5Y+C5pWw5ZCN44CB5qC85byP5ZKM5YW25LuW5YiG57G75LiN5LiA5qC344CRXFxuICAgICAgICBhbmltZV95ZWFyID0gZ2V0TXlWYXIoJ+W5tOS7vScsICflhajpg6gnKTtcXG4gICAgICAgIHN3aXRjaCAoYW5pbWVfeWVhci5pbmNsdWRlcygnLScpKSB7XFxuICAgICAgICAgICAgY2FzZSB0cnVlOlxcbiAgICAgICAgICAgICAgICBlYXJseSA9IGFuaW1lX3llYXIuc3BsaXQoJy0nKVsxXTtcXG4gICAgICAgICAgICAgICAgbGF0ZXIgPSBhbmltZV95ZWFyLnNwbGl0KCctJylbMF07XFxuICAgICAgICAgICAgICAgIHllYXIgPSBgWyR7ZWFybHl9LCR7TnVtYmVyKGxhdGVyKSArIDF9KWA7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgZmFsc2U6XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYW5pbWVfeWVhcikge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOTDlubTku6MnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSAnWzE5OTAsMjAwMCknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnODDlubTku6MnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSAnWzE5ODAsMTk5MCknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5pu05pepJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gJ1ssMTk4MCknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5YWo6YOoJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gLTE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSBgWyR7YW5pbWVfeWVhcn0sJHtOdW1iZXIoYW5pbWVfeWVhcikgKyAxfSlgO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICAvLyDpmaTkuobnlarliaflkozlm73liJvnmoTlhbbku5bliIbnsbtcXG4gICAgICAgIHR2X3llYXIgPSBnZXRNeVZhcign5bm05Lu9JywgJ+WFqOmDqCcpO1xcbiAgICAgICAgc3dpdGNoICh0dl95ZWFyLmluY2x1ZGVzKCctJykpIHtcXG4gICAgICAgICAgICBjYXNlIHRydWU6XFxuICAgICAgICAgICAgICAgIGVhcmx5ID0gdHZfeWVhci5zcGxpdCgnLScpWzFdO1xcbiAgICAgICAgICAgICAgICBsYXRlciA9IHR2X3llYXIuc3BsaXQoJy0nKVswXTtcXG4gICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gYFske2Vhcmx5fS0wMS0wMSAwMDowMDowMCwke051bWJlcihsYXRlcikgKyAxfS0wMS0wMSAwMDowMDowMClgXFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgZmFsc2U6XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHZfeWVhcikge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOTDlubTku6MnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9ICdbMTk5MC0wMS0wMSAwMDowMDowMCwyMDAwLTAxLTAxIDAwOjAwOjAwKSdcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzgw5bm05LujJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSAnWzE5ODAtMDEtMDEgMDA6MDA6MDAsMTk5MC0wMS0wMSAwMDowMDowMCknXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfmm7Tml6knOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9ICdbLDE5ODAtMDEtMDEgMDA6MDA6MDApJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WFqOmDqCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gLTE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9IGBbJHt0dl95ZWFyfS0wMS0wMSAwMDowMDowMCwke051bWJlcih0dl95ZWFyKSArIDF9LTAxLTAxIDAwOjAwOjAwKWA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG59XFxuc3dpdGNoIChnZXRNeVZhcign6aOO5qC8JywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJ+eUteW9sSc6XFxuICAgICAgICBzdHlsZV9pZCA9IC0xMDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAvLyDnlarliafmoI/nm65cXG4gICAgY2FzZSAn5Y6f5YibJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5ryr55S75pS5JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5bCP6K+05pS5JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5ri45oiP5pS5JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn54m55pGEJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5biD6KKL5oiPJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn54Ot6KGAJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56m/6LaKJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5aWH5bm7JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTg7XFxuICAgICAgICBicmVhaztcXG4gICAgLy8g5ZKL6Lez5LqG5LiA5Liq5o2PflxcbiAgICBjYXNlICfmiJjmlpcnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyMDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmkJ7nrJEnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfml6XluLgnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyMjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnp5HlubsnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyMztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfokIzns7snOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyNDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmsrvmhIgnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyNTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmoKHlm60nOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyNjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflsJHlhL8nOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyNztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfms6HpnaInOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyODtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmgYvniLEnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAyOTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflsJHlpbMnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzMDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfprZTms5UnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflhpLpmaknOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzMjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfljoblj7InOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzMztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmnrbnqbonOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzNDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmnLrmiJgnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzNTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnpZ7prZQnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzNjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflo7DmjqcnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzNztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfov5DliqgnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzODtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflirHlv5cnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDAzOTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfpn7PkuZAnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0MDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmjqjnkIYnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0MTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnpL7lm6InOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0MjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmmbrmlpcnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0MztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflgqzms6onOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0NDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnvo7po58nOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0NTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflgbblg48nOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0NjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfkuZnlpbMnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0NztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfogYzlnLonOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDA0ODtcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAvLyDnu7zoibrmoI/nm67jgIHnlLXlvbFcXG4gICAgY2FzZSAn5Ymn5oOFJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Zac5YmnJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn54ix5oOFJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yqo5L2cJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oGQ5oCWJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn54qv572qJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oOK5oKaJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oKs55aRJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oiY5LqJJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yqo55S7JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Lyg6K6wJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5a625bqtJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5q2M6IieJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn57qq5a6eJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn54G+6Zq+JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Lq65paHJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56eR5oqAJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5a6H5a6ZJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6JCM5a6gJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56S+5LyaJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yqo54mpJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Ieq54S2JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yy755aXJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yab5LqLJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn572q5qGIJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56We56eYJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5peF6KGMJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5q2m5L6gJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Z2S5pilJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6YO95biCJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Y+k6KOFJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6LCN5oiYJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn57uP5YW4JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oOF5oSfJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56We6K+dJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5bm05LujJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yac5p2RJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YiR5L6mJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yab5peFJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6K6/6LCIJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6ISx5Y+j56eAJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn55yf5Lq656eAJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6YCJ56eAJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5peF5ri4JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pma5LyaJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5ryU5ZSx5LyaJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Lqy5a2QJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YW75oiQJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5paH5YyWJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAxMDA7XFxuICAgICAgICBicmVhaztcXG4gICAgLy8g55S15b2x5qCP55uuXFxuICAgIGNhc2UgJ+efreeJhyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMTA0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBzdHlsZV9pZCA9IC0xO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbi8vIOaYoOWwhOecn+Wunuivt+axguWcsOWdgFxcbnN3aXRjaCAoc2Vhc29uVHlwZSkge1xcbiAgICBjYXNlIDQ6XFxuICAgICAgICAvLyDlm73liJtcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9zZWFzb25fdmVyc2lvbj0nICsgc2Vhc29uX3ZlcnNpb24gKyAnJmlzX2ZpbmlzaD0nICsgaXNfZmluaXNoICsgJyZjb3B5cmlnaHQ9JyArIGNvcHlyaWdodCArICcmc2Vhc29uX3N0YXR1cz0nICsgc2Vhc29uX3N0YXR1cyArICcmeWVhcj0nICsgeWVhciArICcmc3R5bGVfaWQ9JyArIHN0eWxlX2lkICsgJyZvcmRlcj0zJnN0PTQmc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTQmcGFnZXNpemU9MzAmdHlwZT0xJ1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgNTpcXG4gICAgICAgIC8vIOeUteinhuWJp1xcbiAgICAgICAgdHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0P2FyZWE9JyArIGFyZWEgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmcmVsZWFzZV9kYXRlPScgKyByZWxlYXNlX2RhdGUgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJm9yZGVyPTImc3Q9NSZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9NSZwYWdlc2l6ZT0zMCZ0eXBlPTEnXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSA3OlxcbiAgICAgICAgLy8g57u86Im6XFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3N0YXR1cz0nICsgc2Vhc29uX3N0YXR1cyArICcmc3R5bGVfaWQ9JyArIHN0eWxlX2lkICsgJyZvcmRlcj0yJnN0PTcmc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTcmcGFnZXNpemU9MzAmdHlwZT0xJztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIDE6XFxuICAgICAgICAvLyDnlarliadcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9zZWFzb25fdmVyc2lvbj0nICsgc2Vhc29uX3ZlcnNpb24gKyAnJnNwb2tlbl9sYW5ndWFnZV90eXBlPScgKyBzcG9rZW5fbGFuZ3VhZ2VfdHlwZSArICcmYXJlYT0nICsgYXJlYSArICcmaXNfZmluaXNoPScgKyBpc19maW5pc2ggKyAnJmNvcHlyaWdodD0nICsgY29weXJpZ2h0ICsgJyZzZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZzZWFzb25fbW9udGg9JyArIHNlYXNvbl9tb250aCArICcmeWVhcj0nICsgeWVhciArICcmc3R5bGVfaWQ9JyArIHN0eWxlX2lkICsgJyZvcmRlcj0zJnN0PTEmc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTEmcGFnZXNpemU9MzAmdHlwZT0xJztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIDM6XFxuICAgICAgICAvLyDnuqrlvZXniYdcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9zdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJnByb2R1Y2VyX2lkPScgKyBwcm9kdWNlcl9pZCArICcmcmVsZWFzZV9kYXRlPScgKyByZWxlYXNlX2RhdGUgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJm9yZGVyPTImc3Q9MyZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9MyZwYWdlc2l6ZT0zMCZ0eXBlPTEnXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAyOlxcbiAgICAgICAgLy8g55S15b2xXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/YXJlYT0nICsgYXJlYSArICcmc3R5bGVfaWQ9JyArIHN0eWxlX2lkICsgJyZyZWxlYXNlX2RhdGU9JyArIHJlbGVhc2VfZGF0ZSArICcmc2Vhc29uX3N0YXR1cz0nICsgc2Vhc29uX3N0YXR1cyArICcmb3JkZXI9MiZzdD0yJnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT0yJnBhZ2VzaXplPTMwJnR5cGU9MSdcXG4gICAgICAgIGJyZWFrO1xcbn1cXG50cnVlX3VybCA9IGVuY29kZVVSSSh0cnVlX3VybCk7XFxubGlzdCA9IEpTT04ucGFyc2UoZmV0Y2godHJ1ZV91cmwpKS5kYXRhLmxpc3Q7XFxudHJ5IHtcXG4gICAgbGlzdC5mb3JFYWNoKG1vdmllID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG1vdmllLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcbiAgICAgICAgICAgIGltZzogbW92aWUuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICBkZXNjOiBtb3ZpZS5vcmRlcixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHNlYXNvbl9pZDogbW92aWUuc2Vhc29uX2lkXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgbG9nKCflt7Lnu4/mirXovr7pobXlupUnICsgTVlfUEFHRSk7XFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi54Ot5pig5pe26Ze06KGoXCIsXCJwYXRoXCI6XCJVcGRhdGVUYWJsZXNcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGNvbG9yKHRleHQsIGNvbG9yKSB7XFxuXFxuwqAgwqAgdGV4dCArPSBcXFwiXFxcIjtcXG5cXG7CoCDCoCBpZiAodGV4dC5pbmRleE9mKFxcXCLigJzigJzigJ3igJ1cXFwiKSA9PT0gMCkge1xcblxcbsKgIMKgIMKgIMKgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcblxcbsKgIMKgIH1cXG5cXG7CoCDCoCByZXR1cm4gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFwiICsgY29sb3IgKyBcXFwiJz5cXFwiICsgdGV4dCArIFxcXCI8L2ZvbnQ+XFxcIjtcXG5cXG59XFxuXFxudmFyIHRhYnMgPSB7XFxuXFxuwqAgwqAgXFxcIueVquWJp1xcXCI6IDEsXFxuXFxuwqAgwqAgXFxcIue6quW9leeJh1xcXCI6IDMsXFxuXFxuwqAgwqAgXFxcIuWbveWIm1xcXCI6IDRcXG5cXG59XFxuXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcblxcbsKgIMKgIE9iamVjdC5rZXlzKHRhYnMpLmZvckVhY2goaXRlbSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogKGdldE15VmFyKFxcXCJqdWppXFxcIiwgXFxcIuWbveWIm1xcXCIpID09IGl0ZW0gPyBjb2xvcihpdGVtLCBcXFwicmVkXFxcIikgOiBpdGVtKSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6ICQoKS5sYXp5UnVsZSgoYSkgPT4ge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHB1dE15VmFyKFxcXCJqdWppXFxcIiwgYSlcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSgpXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouaIkOWKn1xcXCJcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9LCBpdGVtKSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuXFxuwqAgwqAgwqAgwqAgfSlcXG5cXG7CoCDCoCB9KVxcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcblxcbsKgIMKgIH0pXFxuXFxuwqAgwqAgbGV0IGRheXMgPSA3XFxuXFxuwqAgwqAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXlzOyBpKyspIHtcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcImZyb21cXFwiLCBcXFwiMVxcXCIpID09IGkgKyBcXFwiXFxcIiA/IGNvbG9yKGkgKyBcXFwi5aSp5YmNXFxcIiwgXFxcInJlZFxcXCIpIDogaSArIFxcXCLlpKnliY1cXFwiKSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6ICQoKS5sYXp5UnVsZSgoaSkgPT4ge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHB1dE15VmFyKFxcXCJmcm9tXFxcIiwgaSArIFxcXCJcXFwiKVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKClcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgaSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcblxcbsKgIMKgIMKgIMKgIH0pXFxuXFxuwqAgwqAgfVxcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcblxcbsKgIMKgIH0pXFxuXFxuwqAgwqAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXlzOyBpKyspIHtcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcInRvXFxcIiwgXFxcIjFcXFwiKSA9PSBpICsgXFxcIlxcXCIgPyBjb2xvcihpICsgXFxcIuWkqeWQjlxcXCIsIFxcXCJyZWRcXFwiKSA6IGkgKyBcXFwi5aSp5ZCOXFxcIiksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCkubGF6eVJ1bGUoKGkpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwdXRNeVZhcihcXFwidG9cXFwiLCBpICsgXFxcIlxcXCIpXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UoKVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9LCBpKSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuXFxuwqAgwqAgwqAgwqAgfSlcXG5cXG7CoCDCoCB9XFxuXFxuXFxuwqAgwqAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0TW92aWVzKHRhYnNbZ2V0TXlWYXIoXFxcImp1amlcXFwiLCBcXFwi5Zu95YibXFxcIildLCBnZXRNeVZhcihcXFwiZnJvbVxcXCIsIFxcXCIxXFxcIiksIGdldE15VmFyKFxcXCJ0b1xcXCIsIFxcXCIxXFxcIikpLmZvckVhY2goaXRlbSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogaXRlbS5kYXRlICsgXFxcIiDlkahcXFwiICsgaXRlbS5kYXlfb2Zfd2VlayxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG5cXG7CoCDCoCDCoCDCoCB9KVxcblxcbsKgIMKgIMKgIMKgIGl0ZW0uZXBpc29kZXMuZm9yRWFjaChpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBpLnRpdGxlLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGltZzogaS5jb3ZlcisnQFJlZmVyZXI9JyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXNjOmkucHViX2luZGV4Lm1hdGNoKC/ljbPlsIYvKT8n4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JytpLnB1Yl9pbmRleCsnXFxcXG4nK2kucHViX3RpbWUrJzwvZm9udD4nOiBpLnB1Yl9pbmRleCsgJ1xcXFxuJyArIGkucHViX3RpbWUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2ZpbG1lcmppI2ltbWVyc2l2ZVRoZW1lI1xcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBcXFwic2Vhc29uX2lkXFxcIjogaS5zZWFzb25faWRcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSlcXG5cXG7CoCDCoCDCoCDCoCB9KVxcblxcbsKgIMKgIH0pXFxuXFxufVxcblxcblxcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi55m75b2VXCIsXCJwYXRoXCI6XCJsb2dpblwiLFwicnVsZVwiOlwianM6XFxyXFxudmFyIGQgPSBbXTtcXHJcXG5kLnB1c2goe1xcclxcbiAgICB0aXRsZTogJ+eZu+mZhuivtOaYjicsXFxyXFxuICAgIGRlc2M6XFxcIumhtemdouS4i+aWueeZu+mZhuaIkOWKn+WQju+8jOWGjeeCueWHu+ehruiupOeZu+W9leWNs+WPr1xcXCIsXFxyXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcclxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxyXFxufSx7XFxyXFxuICAgIHRpdGxlOiAn55m76ZmG5oiQ5Yqf5ZCO77yM5YaN54K55oiR77yBJyxcXHJcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXHJcXG4gICAgICAgIGJhY2sodHJ1ZSk7XFxyXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aaC5p6c5rKh5pyJ55m76ZmG5oiQ5Yqf77yM5bu66K6u5L2g5LiL5qyh55m76ZmG5oiQ5Yqf5ZCO5LiN6KaB54K56YKj5LmI5b+rfidcXHJcXG4gICAgfSksXFxyXFxuICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcclxcbn0sIHtcXHJcXG4gICAgdXJsOiBcXFwiaHR0cHM6Ly9tLmJpbGliaWxpLmNvbS9cXFwiLFxcclxcbiAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXHJcXG4gICAgZGVzYzogXFxcImxpc3QmJnNjcmVlbi0zMDBcXFwiLFxcclxcbiAgICBleHRyYToge1xcclxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcclxcbiAgICAgICAgICAgIHZhciB0b2tlbl90aW1lciA9IGZ1bmN0aW9uICgpIHtcXHJcXG4gICAgICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSBKU09OLnN0cmluZ2lmeSh7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29va2llOiBmYmEuZ2V0Q29va2llKFxcXCJodHRwczovL20uYmlsaWJpbGkuY29tL1xcXCIpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW92aWUvMjAuc3ZnJ1xcclxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICBmYmEud3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIiwgc2V0dGluZ3MpO1xcclxcbiAgICAgICAgICAgICAgICB9LCAxMDApXFxyXFxuICAgICAgICAgICAgfTtcXHJcXG4gICAgICAgICAgICB0b2tlbl90aW1lcigpO1xcclxcbiAgICAgICAgfSksXFxyXFxuICAgICAgICBjYW5CYWNrOiB0cnVlXFxyXFxuICAgIH1cXHJcXG59KVxcclxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuW9seinhuS6jOe6p1wiLFwicGF0aFwiOlwiZmlsbWVyamlcIixcInJ1bGVcIjpcImpzOlxcbi8vIOaVsOaNruWumuS9jVxcbnZhciBkID0gW107XFxuaWYgKE1ZX1BBUkFNUy5zZWFzb25faWQpIHtcXG4gICAgc2Vhc29uX2lkID0gTVlfUEFSQU1TLnNlYXNvbl9pZCArIFxcXCJcXFwiO1xcbiAgICBEYXRhID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy92aWV3L3dlYi9zZWFzb24/c2Vhc29uX2lkPScgKyBzZWFzb25faWQpKS5yZXN1bHQ7XFxufSBlbHNlIHtcXG4gICAgRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvdmlldy93ZWIvc2Vhc29uP2VwX2lkPScgKyBNWV9QQVJBTVMuZXBfaWQpKS5yZXN1bHQ7XFxufVxcbmlmICghRGF0YS5jb3Zlci5tYXRjaCgvaHR0cHMvKSkge1xcbiAgICDlsIHpnaIgPSBEYXRhLmNvdmVyLnJlcGxhY2UoJ2h0dHAnLCAnaHR0cHMnKSArIFxcXCJAUmVmZXJlcj1cXFwiO1xcbn0gZWxzZSB7XFxuICAgIOWwgemdoiA9IERhdGEuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIjtcXG59XFxudHJ5IHtcXG4gICAg5Zyw5Yy6ID0gRGF0YS5hcmVhc1swXS5uYW1lO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAg5Zyw5Yy6ID0gJ+WcsOWMuuaaguaXoCc7XFxufVxcbueugOS7iyA9IERhdGEuZXZhbHVhdGU7XFxuLy8g5q2j54mHXFxu57G75Z6LID0gRGF0YS5wb3NpdGl2ZS50aXRsZTtcXG7kuIrmmKDml7bpl7QgPSBEYXRhLnB1Ymxpc2gucHViX3RpbWU7XFxudHJ5IHtcXG4gICAg5b6X5YiGID0gRGF0YS5yYXRpbmcuc2NvcmU7XFxufSBjYXRjaCAoZSkge1xcbiAgICDlvpfliIYgPSAn5pqC5peg5b6XJztcXG59XFxu6L+95Ymn5pel5Y6GID0gRGF0YS5uZXdfZXAuZGVzYztcXG7mm7TmlrDov5vluqYgPSBEYXRhLm5ld19lcC50aXRsZTtcXG7lvbHniYflkI3np7AgPSBEYXRhLnRpdGxlO1xcbuesrOS6jOagh+mimCA9IERhdGEuc2hhcmVfc3ViX3RpdGxlO1xcbuWJp+mbhuWIl+ihqCA9IERhdGEuZXBpc29kZXMuZmlsdGVyKChsaXN0KSA9PiB7XFxuICAgIC8vIOi/h+a7pOmihOWRiuOAgeiKsee1rlxcbiAgICBpZiAoZ2V0SXRlbSgncHJldmlld1N3aXRjaCcsICdmb2xkJykgPT09ICdmb2xkJyAmJiBsaXN0LmJhZGdlLm1hdGNoKC/pooR86Iqx57WuLykpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxufSk7XFxu55+t6K6vID0gXFxcIuKtkFxcXCIgKyDnsbvlnosgKyBcXFwi4q2QXFxcIiArIOesrOS6jOagh+mimCArICdcXFxcbicgKyDlnLDljLogKyAnLScgKyDlvpfliIYgKyAn5YiGXFxcXG4tJyArIOS4iuaYoOaXtumXtCArICctJztcXG4vLyDph43lrprkuYnkuoznuqfpobXpnaLmlbDmja5cXG5zZXRQYWdlVGl0bGUo5b2x54mH5ZCN56ewKTtcXG5zZXRQYWdlUGljVXJsKOWwgemdoik7XFxuLy8g5YmN572u5Y+C5pWw5ZKM6aKE5aSE55CGLS0tXFxuaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXG4vLyDlhajlsYBsYXp54oCU4oCU55u06ZO+K+aWreaPklxcbnZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICB2aWRlb1Bhcm1zID0gZmluZEl0ZW0oaW5wdXQpO1xcbiAgICBhaWQgPSB2aWRlb1Bhcm1zLmV4dHJhLmFpZDtcXG4gICAgYnZpZCA9IHZpZGVvUGFybXMuZXh0cmEuYnZpZDtcXG4gICAgY2lkID0gdmlkZW9QYXJtcy5leHRyYS5jaWQ7XFxuICAgIGJhZGdlID0gdmlkZW9QYXJtcy5leHRyYS5iYWRnZTtcXG4gICAgLy8g5o+Q5Lqk5Y6G5Y+y6K6w5b2VXFxuICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnJlcG9ydFByb2Nlc3MoYWlkLCBjaWQpO1xcbiAgICB2aXBTdGF0dXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudmlwU3RhdHVzO1xcbiAgICBpZiAodmlwU3RhdHVzID09IDEpIHtcXG4gICAgICAgIC8vIOWkp+S8muWRmFxcbiAgICAgICAgaWYgKGJhZGdlLm1hdGNoKC/ku5jotLkvKSkge1xcbiAgICAgICAgICAgIHJldHVybiAkKFsn6a2U5pat6Kej5p6QJywgJ+W3sui0reS5sCddLCAxKS5zZWxlY3QoKGlucHV0LCBhaWQsIGNpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+mtlOaWreino+aekCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCB7fSkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShsaW5rKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGxpbmssIGFpZCwgY2lkKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIDExNikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDmma7pgJrnlKjmiLdcXG4gICAgICAgIGlmIChnZXRNeVZhcignYmZfY29va2llJywgJ+acquWumuS5iScpID09ICfmnKrlrprkuYknKSB7XFxuICAgICAgICAgICAgaWYgKGJhZGdlLm1hdGNoKC/kvJrlkZh85LuY6LS5LykpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UoaW5wdXQpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIOWFseS6q+S8muWRmOadg+mZkFxcbiAgICAgICAgICAgIGlmIChiYWRnZS5tYXRjaCgv5LuY6LS5LykpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoWyfprZTmlq3op6PmnpAnLCAn5bey6LSt5LmwJ10sIDEpLnNlbGVjdCgoaW5wdXQsIGFpZCwgY2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+mtlOaWreino+aekCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywge30pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKGxpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIDExNikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIGxpbmssIGFpZCwgY2lkKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG59KTtcXG52YXIgQ29sb3IgPSBcXFwiIzE5Qjg5RFxcXCI7XFxudmFyIOavj+mhtembhuaVsCA9IDMwO1xcbnZhciDmkJzntKLmqKHlvI8gPSAn5YiG57uEJztcXG52YXIg6LCD55So5ZCN56ewID0gJ+eugOW9sSc7XFxucHV0TXlWYXIoJ+aKmOWPoCcsICflhbMnKTtcXG5wdXRNeVZhcign5pel5Y6GJywgJ+WFsycpO1xcbnB1dE15VmFyKCdEYXRhJywgRGF0YSk7XFxucHV0TXlWYXIoJ2xhenknLCBsYXp5KTtcXG4vLyDmuIXpmaTlj5jph49cXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKCfliIbpm4botbcnKTtcXG4gICAgY2xlYXJNeVZhcign5YiG6ZuG57uIJyk7XFxuICAgIGNsZWFyTXlWYXIoJ+aKmOWPoCcpO1xcbiAgICBjbGVhck15VmFyKCfml6XljoYnKTtcXG4gICAgY2xlYXJNeVZhcignRGF0YScpO1xcbiAgICBjbGVhck15VmFyKCdsYXp5Jyk7XFxuICAgIGNsZWFyTXlWYXIoJ+WJp+mbhuWIl+ihqCcpO1xcbn0pKVxcbi8vIOiuvue9ruWKqOaAgeacgOaWsOeroOiKglxcbnNldExhc3RDaGFwdGVyUnVsZSgnanM6JyArICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2dldFVwZGF0ZScpKS5ydWxlKTtcXG59KSk7XFxuLy8g6aG16Z2i5YaF5a655q2j5paHLS0tXFxuLy8g5Z+65pys5L+h5oGv5qih5Z2XXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IOefreiuryxcXG4gICAgZGVzYzog566A5LuLID09ICcnID8gJ+aaguaXoOeugOS7iycgOiDnroDku4suc3Vic3RyaW5nKDAsIDQ1KSArICfigJjigJjigJnigJnigKY8Zm9udCBjb2xvcj1cXFwiIzFDMUMxQ1xcXCI+6K+m5oOFPC9mb250PicsXFxuICAgIGltZzog5bCB6Z2iLFxcbiAgICB1cmw6ICQoKS5ydWxlKCjnroDku4spID0+IHtcXG4gICAgICAgIHJlcyA9IHt9O1xcbiAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICflvbHniYfnroDku4vvvJonICsgJ1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnICsg566A5LuLLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICByZXMuZGF0YSA9IGQ7XFxuICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgIH0sIOeugOS7iyksXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cicsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfpooTlkYrjgIHoirHnta7lvIDlhbMnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKSA9PSAnZm9sZCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3ByZXZpZXdTd2l0Y2gnLCAnb3BlbicpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aKE5ZGK5bey57uP5YiH5o2i5Li65bGV56S6flxcXCI7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mihOWRiuS4jeWGjeWxleekun5cXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1dXFxuICAgIH1cXG59KTtcXG4vLyDmm7TmlrDml6XljobmqKHlnZdcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+aXpeWOhicsXFxuICAgIGltZzogaW1nTGluay7ml6XljoYsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgo6L+95Ymn5pel5Y6GLCDmm7TmlrDov5vluqYpID0+IHtcXG4gICAgICAgIGlmIChnZXRNeVZhcign5pel5Y6GJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgZGVsZXRlSXRlbSgn6L+95Ymn5pel5Y6GJyk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+aXpeWOhicsICflhbMnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCfmmL7npLrmqKHlvI8nLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiDov73liafml6XljoYubWF0Y2goL+WujOe7k3zmnJ/lvoUvKSA/IOi/veWJp+aXpeWOhiA6IOi/veWJp+aXpeWOhiArICc8YnI+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+5pu05paw6IezJyArICjmm7TmlrDov5vluqYubWF0Y2goL1tcXFxcdTRlMDAtXFxcXHU5ZmE1XS8pID8g5pu05paw6L+b5bqmIDogKCfnrKwnICsgKOabtOaWsOi/m+W6piA9PSAnJyA/IDAgOiDmm7TmlrDov5vluqYpICsgJ+ivnScpKSArICc8L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICfov73liafml6XljoYnXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBwdXRNeVZhcign5pel5Y6GJywgJ+W8gCcpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNouaXpeWOhuS4ujonICsgZ2V0TXlWYXIoJ+aXpeWOhicsICflvIAnKVxcbiAgICB9LCDov73liafml6XljoYsIOabtOaWsOi/m+W6piksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81J1xcbn0pO1xcbi8vIOiuoumYheaooeWdl1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6K6i6ZiFJyxcXG4gICAgaW1nOiBpbWdMaW5rLuiuoumYhSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHNlbGVjdGlvbkxpc3QgPSBbJ+iuoumYhScsICflj5bmtojorqLpmIUnXTtcXG4gICAgICAgIHJldHVybiAkKHNlbGVjdGlvbkxpc3QsIDIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgc2Vhc29uX2lkID0gSlNPTi5wYXJzZShnZXRNeVZhcignRGF0YScpKS5zZWFzb25faWQ7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09ICforqLpmIUnKSB7XFxuICAgICAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnN1YnNjcmliZUZpbG0oc2Vhc29uX2lkKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5jYW5jZWxTdWJzY3JpYmVGaWxtKHNlYXNvbl9pZCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgcmVzO1xcbiAgICAgICAgfSk7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNSdcXG59KTtcXG4vLyDor4TorrrmqKHlnZdcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+ivhOiuuicsXFxuICAgIGltZzogaW1nTGluay7mn6XnnIvor4TorrosXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eScpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgTGlzdCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ0RhdGEnKSkuZXBpc29kZXM7XFxuICAgICAgICAgICAgTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uc2hhcmVfY29weSArICc8Zm9udCBjb2xvcj1cXFwiIzMzY2NjY1xcXCI+XFx04p6uPC9mb250PicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uY292ZXIgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IGl0ZW0uYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81J1xcbn0pO1xcblxcbi8vIOeyvuW9qee7p+e7reaooeWdl1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5ZGo6L65JyxcXG4gICAgaW1nOiBpbWdMaW5rLuWRqOi+uSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIERhdGEgPSBKU09OLnBhcnNlKGdldE15VmFyKCdEYXRhJykpO1xcbiAgICAgICAgLy8g5pyJ5Lqb5rKh5pyJ55u05o6l5Y675o6J5oeS5b6X5aSE55CGflxcbiAgICAgICAgaWYgKERhdGEuc2VjdGlvbikge1xcbiAgICAgICAgICAgIOWRqOi+ueaVsOe7hCA9IFtcXFwi8J+Pt++4j+ebuOWFs+ezu+WIl1xcXCIsIFxcXCLwn6SjUFYm6Iqx57WuXFxcIiwgXFxcIvCfjYnnq5blsY/kuZ/nsr7lvalcXFwiLCBcXFwi8J+UpeeyvuW9qeS6jOWIm1xcXCJdO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICDlkajovrnmlbDnu4QgPSBbXFxcIvCfj7fvuI/nm7jlhbPns7vliJdcXFwiXTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vIOWRqOi+ueaVsOe7hCA9IFtcXFwi8J+Pt++4j+ebuOWFs+ezu+WIl1xcXCIsIFxcXCLwn6SjUFYm6Iqx57WuXFxcIiwgXFxcIuerluWxj+S5n+eyvuW9qVxcXCIsIFxcXCLnsr7lvankuozliJtcXFwiXTtcXG4gICAgICAgIHJldHVybiAkKOWRqOi+ueaVsOe7hCwgMSwgJ+GDpueyvuW9qee7p+e7rScpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgRGF0YSA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ0RhdGEnKSk7XFxuICAgICAgICAgICAgbGF6eSA9IGdldE15VmFyKCdsYXp5Jyk7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAn8J+Pt++4j+ebuOWFs+ezu+WIlycpIHtcXG4gICAgICAgICAgICAgICAg57O75YiX5ZCN56ewID0gRGF0YS5zZWFzb25fdGl0bGVcXG4gICAgICAgICAgICAgICAg57O75YiX5pWw5o2uID0gRGF0YS5zZWFzb25zO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKOezu+WIl+aVsOaNrikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn4+377iP55u45YWz57O75YiXJyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAo57O75YiX5pWw5o2uID09IFtdIHx8IOezu+WIl+aVsOaNriA9PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7irZDor6XlvbHniYfmsqHmnInnm7jlhbPns7vliJflk6Z+4q2QPC9mb250PjwvYmlnPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ3RvYXN0Oi8v6YO95rKh5pyJ77yM77yM5L2g54K55ZWl5ZGAficsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAg57O75YiX5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Quc2Vhc29uX3RpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IChsaXN0Lmhvcml6b250YWxfY292ZXJfMTYxMCA9PSAnJyA/IChsaXN0Lmhvcml6b250YWxfY292ZXJfMTY5ID09ICcnID8gbGlzdC5jb3ZlciA6IGxpc3QuaG9yaXpvbnRhbF9jb3Zlcl8xNjkpIDogbGlzdC5ob3Jpem9udGFsX2NvdmVyXzE2MTApICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBsaXN0Lm5ld19lcC5pbmRleF9zaG93LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImVwX2lkXFxcIjogbGlzdC5uZXdfZXAuaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KGQpO1xcbiAgICAgICAgICAgICAgICB9LCDns7vliJfmlbDmja4pXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/CfpKNQViboirHnta4nKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBQVuWSjOiKsee1ruaVsOaNriA9IERhdGEuc2VjdGlvblswXS5lcGlzb2RlcztcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgoUFblkozoirHnta7mlbDmja4sIGxhenkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn6SjUFYm6Iqx57WuJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBW5ZKM6Iqx57Wu5pWw5o2uID09IFtdIHx8IFBW5ZKM6Iqx57Wu5pWw5o2uID09ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiaWc+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4q2Q6K+l5b2x54mHL+inhumikeayoeacieebuOWFs1BW5ZKM6Iqx57Wu5ZOmfuKtkDwvZm9udD48L2JpZz4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIFBW5ZKM6Iqx57Wu5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5zdWJ0aXRsZSArICdcXFxcbicgKyBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIFBW5ZKM6Iqx57Wu5pWw5o2uLCBsYXp5KVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rKh5pyJ5pWw5o2u5ZOmfidcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn42J56uW5bGP5Lmf57K+5b2pJykge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAg56uW5bGP5Lmf57K+5b2p5pWw5o2uID0gRGF0YS5zZWN0aW9uWzFdLmVwaXNvZGVzO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoKS5ydWxlKCjnq5blsY/kuZ/nsr7lvanmlbDmja4sIGxhenkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn42J56uW5bGP5Lmf57K+5b2pJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKOerluWxj+S5n+eyvuW9qeaVsOaNriA9PSBbXSB8fCDnq5blsY/kuZ/nsr7lvanmlbDmja4gPT0gJycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7irZDor6XlvbHniYcv6KeG6aKR5rKh5pyJ55u45YWz56uW5bGP55+t6KeG6aKR5ZOmfuKtkDwvZm9udD48L2JpZz4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIOerluWxj+S5n+eyvuW9qeaVsOaNri5mb3JFYWNoKGxpc3QgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbGlzdC5saW5rICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Quc3VidGl0bGUgKyAnXFxcXG4nICsgbGlzdC5sb25nX3RpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QubGluayxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQ6IGxpc3QuY2lkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlOiBsaXN0LmJhZGdlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCDnq5blsY/kuZ/nsr7lvanmlbDmja4sIGxhenkpXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/msqHmnInmlbDmja7lk6Z+J1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/CflKXnsr7lvankuozliJsnKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICDnsr7lvankuozliJvmlbDmja4gPSBEYXRhLnNlY3Rpb25bMl0uZXBpc29kZXM7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKOeyvuW9qeS6jOWIm+aVsOaNriwgbGF6eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ/CflKXnsr7lvankuozliJsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAo57K+5b2p5LqM5Yib5pWw5o2uID09IFtdIHx8IOeyvuW9qeS6jOWIm+aVsOaNriA9PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8YmlnPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKtkOivpeW9seeJhy/op4bpopHmsqHmnInkuozliJvkvZzlk4Hlk6Z+4q2QPC9mb250PjwvYmlnPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICd0b2FzdDovL+mDveayoeacie+8jO+8jOS9oOeCueWVpeWRgH4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aVrOivt+acn+W+hX4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAg57K+5b2p5LqM5Yib5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOmSiOWvuemDqOWIhuWPguaVsOe8uuWkseeahOaDheWGteWmguWHoeS6uuS/ruS7meS8oOWGmeeahO+8jO+8jFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5haWQgPT0gMCB8fCBsaXN0LmNpZCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWVkZW9EYXRhID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgbGlzdC5saW5rLnNwbGl0KCdhdicpWzFdLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6ICdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcXFwiR0VUXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQgPSB2aWVkZW9EYXRhLmFpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQgPSB2aWVkZW9EYXRhLmJ2aWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQgPSB2aWVkZW9EYXRhLmNpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZCA9IGxpc3QuYWlkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZCA9IGxpc3QuYnZpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZCA9IGxpc3QuY2lkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5zdWJ0aXRsZSArICdcXFxcbicgKyBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGJ2aWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkOiBjaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIOeyvuW9qeS6jOWIm+aVsOaNriwgbGF6eSlcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeacieaVsOaNruWTpn4nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ato+WcqOi/m+WFpVxcXCIgKyBpbnB1dCArIFxcXCLnlYzpnaIuLi5cXFwiO1xcbiAgICAgICAgfSlcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiAn57K+5b2p57un57utJ1xcbiAgICB9XFxufSk7XFxuLy8g5pi+56S65qih5byP5pu05pS55qih5Z2XXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSxcXG4gICAgaW1nOiBnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JykgPT0gJ+WIl+ihqCcgPyBpbWdMaW5rLuWIl+ihqCA6IGltZ0xpbmsu5Y+M6L65LFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoID0gSlNPTi5wYXJzZShnZXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJykpO1xcbiAgICAgICAgaWYgKGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSA9PSAn5YiX6KGoJykge1xcbiAgICAgICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGVsID0+IHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShlbC5saW5rLCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JylcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoLmZvckVhY2goZWwgPT4ge1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGVsLmxpbmssIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNldEl0ZW0oJ+aooeW8jycsICfliJfooagnKVxcbiAgICAgICAgfVxcbiAgICAgICAgaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXG4gICAgICAgIHVwZGF0ZUl0ZW0oJ+aYvuekuuaooeW8jycsIHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpLFxcbiAgICAgICAgICAgIGltZzogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnID8gaW1nTGluay7liJfooaggOiBpbWdMaW5rLuWPjOi+uSxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNouaooeW8j+S4ujonICsgZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogJ+aYvuekuuaooeW8jydcXG4gICAgfVxcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJyxcXG59KTtcXG4vLyDpgInmj5LmqKHlnZfigJTigJTlsYDpg6jliLfmlrDniYhcXG7mnaXmupAgPSAnYmwnO1xcbnB1dE15VmFyKCfnroDmj5InLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgbGV0IHRpdGxlQXJyID0gW11cXG4gICAgc2V0RmlsZSA9IHJlYWRGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICB0cnkge1xcbiAgICAgICAgZXZhbCgnanNvbj0nICsgc2V0RmlsZSk7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonICsgZS5tZXNzYWdlKTtcXG4gICAgfVxcbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XFxuICAgIGxldCBiYXJyeTEgPSBbJ+Kcje+4j+i+heWKqSddO1xcbiAgICBsZXQgYmFycnkyID0gWyfwn5Om77iP6a2U5patJ107XFxuICAgIGxldCBiYXJyeTMgPSBbJ/CflI3mkJzntKInXTtcXG4gICAgdGl0bGVBcnIgPSBiYXJyeTMuY29uY2F0KHRpdGxlQXJyKTtcXG4gICAgdGl0bGVBcnIgPSBiYXJyeTIuY29uY2F0KHRpdGxlQXJyKTtcXG4gICAgdGl0bGVBcnIgPSBiYXJyeTEuY29uY2F0KHRpdGxlQXJyKTtcXG4gICAgZXZhbCgnb3A9anNvbi5zZXR0aW5ncy4nICsg5p2l5rqQKTtcXG4gICAgdGl0bGVBcnIgPSB0aXRsZUFyci5tYXAoKGl0KSA9PiB7XFxuICAgICAgICByZXR1cm4gaXQgPT09IG9wID8gJ/CfkYknICsgaXQgOiBpdDtcXG4gICAgfSk7XFxuICAgIHB1dE15VmFyKCfop6PmnpDmlbDnu4QnLCB0aXRsZUFycik7XFxuICAgIHB1dE15VmFyKCdzZXRGaWxlJywgc2V0RmlsZSk7XFxufSkpXFxuZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6Kej5p6Q77ya8J+UmDxmb250IGNvbG9yPVxcXCInICsgQ29sb3IgKyAnXFxcIj4nICsgb3AgKyAnPC9mb250PlxcXFx0XFxcXHTpobXnoIHvvJo8Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArICgoZ2V0TXlWYXIoJ+WIhumbhui1tycsICfpppbpobUnKSA9PSAn6aaW6aG1JykgPyAn6aaW6aG1JyA6IChnZXRNeVZhcign5YiG6ZuG6LW3JykgKyAnLScgKyBnZXRNeVZhcign5YiG6ZuG57uIJykpKSArICc8L2ZvbnQ+JyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChqc29uLCDmnaXmupAsIENvbG9yLCBvcCwg5b2x54mH5ZCN56ewLCDmkJzntKLmqKHlvI8sIOiwg+eUqOWQjeensCkgPT4ge1xcbiAgICAgICAgZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcbiAgICAgICAgcmV0dXJuICQoZXZhbChnZXRNeVZhcign6Kej5p6Q5pWw57uEJykpLCAzKS5zZWxlY3QoKGpzb24sIOadpea6kCwgQ29sb3IsIG9wLCDlvbHniYflkI3np7AsIOaQnOe0ouaooeW8jywg6LCD55So5ZCN56ewKSA9PiB7XFxuICAgICAgICAgICAgc2V0RmlsZSA9IGdldE15VmFyKCdzZXRGaWxlJyk7XFxuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC/wn5GJL2csICcnKTtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICfinI3vuI/ovoXliqknKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2hvbWU/cnVsZT3phY3nva7liqnmiYsnKSkucnVsZSk7XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/Cfk6bvuI/prZTmlq0nKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAn8J+UjeaQnOe0oicpIHtcXG4gICAgICAgICAgICAgICAgaWYgKOaQnOe0ouaooeW8jyA9PSAn5YiG57uEJykge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3NlYXJjaD9zPVxcXCIgKyDlvbHniYflkI3np7AgKyBcXFwiJmdyb3VwPVxcXCIgKyDosIPnlKjlkI3np7A7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vc2VhcmNoP3M9XFxcIiArIOW9seeJh+WQjeensCArIFxcXCImcnVsZT1cXFwiICsg6LCD55So5ZCN56ewO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vIOWOn+WFiOeahOmFjee9rlxcbiAgICAgICAgICAgIG9yaWdpblNldHRpbmdzID0gSlNPTi5zdHJpbmdpZnkoanNvbi5zZXR0aW5ncyk7XFxuICAgICAgICAgICAgLy8g5L+u5pS56YWN572uXFxuICAgICAgICAgICAgZXZhbCgnanNvbi5zZXR0aW5ncy4nICsg5p2l5rqQICsgJz1pbnB1dDsnKTtcXG4gICAgICAgICAgICBzZXRGaWxlID0gc2V0RmlsZS5yZXBsYWNlKG9yaWdpblNldHRpbmdzLCBKU09OLnN0cmluZ2lmeShqc29uLnNldHRpbmdzKSk7XFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJywgc2V0RmlsZSk7XFxuICAgICAgICAgICAgLy8g5Yi35paw5YWD57SgXFxuICAgICAgICAgICAgZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ29wJywge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+ino+aekO+8mvCflJg8Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArIG9wICsgJzwvZm9udD5cXFxcdFxcXFx06aG156CB77yaPGZvbnQgY29sb3I9XFxcIicgKyBDb2xvciArICdcXFwiPicgKyAoKGdldE15VmFyKCfliIbpm4botbcnLCAn6aaW6aG1JykgPT0gJ+mmlumhtScpID8gJ+mmlumhtScgOiAoZ2V0TXlWYXIoJ+WIhumbhui1tycpICsgJy0nICsgZ2V0TXlWYXIoJ+WIhumbhue7iCcpKSkgKyAnPC9mb250PicsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouino+aekOWPo+S4ujpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9LCBqc29uLCDmnaXmupAsIENvbG9yLCBvcCwg5b2x54mH5ZCN56ewLCDmkJzntKLmqKHlvI8sIOiwg+eUqOWQjeensClcXG4gICAgfSwganNvbiwg5p2l5rqQLCBDb2xvciwgb3AsIOW9seeJh+WQjeensCwg5pCc57Si5qih5byPLCDosIPnlKjlkI3np7ApLFxcbiAgICBpbWc6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L3R1Ymlhby9iaWxpYmlsaS5zdmcnLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogJ29wJ1xcbiAgICB9XFxufSk7XFxuLy8g5rua5Yqo5Ymn6ZuG5p2h5qCPXFxu5Ymn6ZuG6ZW/5bqmID0g5Ymn6ZuG5YiX6KGoLmxlbmd0aDtcXG5pZiAo5Ymn6ZuG6ZW/5bqmID4g5q+P6aG16ZuG5pWwKSB7XFxuICAgIHB1dE15VmFyKCfliLfmlrDpgInpm4YnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIHB1dE15VmFyKCfliIbpm4botbcnLCBzdGFydCk7XFxuICAgICAgICBwdXRNeVZhcign5YiG6ZuG57uIJywgZW5kKTtcXG4gICAgICAgIGV2YWwoZ2V0TXlWYXIoJ+eugOaPkicpKTtcXG4gICAgICAgIHVwZGF0ZUl0ZW0oJ29wJywge1xcbiAgICAgICAgICAgIHRpdGxlOiAn6Kej5p6Q77ya8J+UmDxmb250IGNvbG9yPVxcXCInICsgQ29sb3IgKyAnXFxcIj4nICsgb3AgKyAnPC9mb250PlxcXFx0XFxcXHTpobXnoIHvvJo8Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArICgoZ2V0TXlWYXIoJ+WIhumbhui1tycsICfpppbpobUnKSA9PSAn6aaW6aG1JykgPyAn6aaW6aG1JyA6IChnZXRNeVZhcign5YiG6ZuG6LW3JykgKyAnLScgKyBnZXRNeVZhcign5YiG6ZuG57uIJykpKSArICc8L2ZvbnQ+JyxcXG4gICAgICAgIH0pXFxuICAgICAgICAvLyDliKDpmaRcXG4gICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ+aYvuekuueahOWJp+mbhuWIl+ihqCcpKTtcXG4gICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGVsID0+IHtcXG4gICAgICAgICAgICBkZWxldGVJdGVtKGVsLmxpbmspO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAvLyDmt7vliqBcXG4gICAgICAgIGxhenkgPSBnZXRNeVZhcignbGF6eScpO1xcbiAgICAgICAg5Ymn6ZuG5YiX6KGoID0gSlNPTi5wYXJzZShnZXRNeVZhcign5Ymn6ZuG5YiX6KGoJykpO1xcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoID0g5Ymn6ZuG5YiX6KGoLnNsaWNlKHN0YXJ0IC0gMSwgZW5kKTtcXG4gICAgICAgIG5ld0FycmF5ID0gW107XFxuICAgICAgICBpbmRleCA9IDE7XFxuICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaguZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICBpZiAoZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnKSB7XFxuICAgICAgICAgICAgICAgIG5ld0FycmF5LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBidmlkOiBsaXN0LmJ2aWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBuZXdBcnJheS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogbGlzdC5saW5rICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGluZGV4ICs9IDE7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGFkZEl0ZW1BZnRlcihnZXRNeVZhcign5pyr6aG1JyksIG5ld0FycmF5KTtcXG4gICAgICAgIHB1dE15VmFyKCfmmL7npLrnmoTliafpm4bliJfooagnLCDmmL7npLrnmoTliafpm4bliJfooagpO1xcbiAgICB9KSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICB0aXRsZTogJ+KItycsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiAn5Y2g5L2N56ymJyxcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcHV0TXlWYXIoJ+WIhumbhui1tycsIDEpO1xcbiAgICBwdXRNeVZhcign5YiG6ZuG57uIJywg5q+P6aG16ZuG5pWwKTtcXG4gICAgcHV0TXlWYXIoJ+WJp+mbhuWIl+ihqCcsIOWJp+mbhuWIl+ihqCk7XFxuICAgIOaAu+mhteaVsCA9IE1hdGguY2VpbCjliafpm4bplb/luqYgLyDmr4/pobXpm4bmlbApO1xcbiAgICBzdGFydCA9IDE7XFxuICAgIGVuZCA9IOavj+mhtembhuaVsDtcXG4gICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0g5oC76aG15pWwOyBwYWdlKyspIHtcXG4gICAgICAgIGlmIChlbmQgPiDliafpm4bplb/luqYpIHtcXG4gICAgICAgICAgICBlbmQgPSDliafpm4bplb/luqY7XFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBzdGFydCArICctJyArIGVuZCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoc3RhcnQsIGVuZCwgQ29sb3IsIOadpea6kCkgPT4ge1xcbiAgICAgICAgICAgICAgICBldmFsKGdldE15VmFyKCfliLfmlrDpgInpm4YnKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgc3RhcnQsIGVuZCwgQ29sb3IsIOadpea6kCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogc3RhcnQgKyAnLScgKyBlbmRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmIChlbmQgPCDliafpm4bplb/luqYpIHtcXG4gICAgICAgICAgICBzdGFydCArPSDmr4/pobXpm4bmlbA7XFxuICAgICAgICAgICAgZW5kICs9IOavj+mhtembhuaVsDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICAvLyDorrDlvZXmnKvpobXnmoRpZFxcbiAgICBwdXRNeVZhcign5pyr6aG1Jywgc3RhcnQgKyAnLScgKyBlbmQpO1xcbn0gZWxzZSB7XFxuICAgIHB1dE15VmFyKCfliIbpm4botbcnLCAxKTtcXG4gICAgcHV0TXlWYXIoJ+WIhumbhue7iCcsIOWJp+mbhumVv+W6pik7XFxufVxcbi8vIOWxleekuuWJp+mbhjpcXG7mmL7npLrnmoTliafpm4bliJfooaggPSDliafpm4bliJfooaguc2xpY2UoMCwgZ2V0TXlWYXIoJ+WIhumbhue7iCcpKTtcXG5wdXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJywg5pi+56S655qE5Ymn6ZuG5YiX6KGoKTtcXG5pbmRleCA9IDE7XFxu5pi+56S655qE5Ymn6ZuG5YiX6KGoLmZvckVhY2gobGlzdCA9PiB7XFxuICAgIGlmIChnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JykgPT0gJ+WIl+ihqCcpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxuICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxuICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBpbmRleCArPSAxO1xcbn0pO1xcbnNldFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInVw5Li76aG1XCIsXCJwYXRoXCI6XCJ1cEhvbWVcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuLy8g6aKE5aSE55CGXFxucHV0TXlWYXIoJ3VwSW5mbycsICflhbMnKTtcXG5zZXRQYWdlVGl0bGUoTVlfUEFSQU1TLnRpdGxlKTtcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbi8vIOmYsuatouWPjeeIrOiZq++8jOS7juS4iuS4gOS4qumhtemdouS8oOmAkuaVsOaNruKAlOKAlOWPjeeIrOiZq+S4pemHjVxcbnVwTWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXCJcXFwiO1xcbnVwTmFtZSA9IE1ZX1BBUkFNUy50aXRsZTtcXG51cEZhY2UgPSBNWV9QQVJBTVMuZmFjZTtcXG5yZWxhdGlvbiA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnVzZXJNYXBwaW5nKHVwTWlkKTtcXG4vLyDlpLTlg4/moI9cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCJibHVlXFxcIj4nICsgdXBOYW1lICsgJzwvZm9udD4nLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHVwTWlkKSA9PiB7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ3VwSW5mbycsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW0oJ3VwSW5mbycpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKCd1cEluZm8nLCAn5YWzJyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIC8vIOeUqOaIt+WfuuacrOS/oeaBr1xcbiAgICAgICAgICAgICAgICBxdWVyeUpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICBtaWQ6IHVwTWlkLFxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm06ICd3ZWInLFxcbiAgICAgICAgICAgICAgICAgICAgd2ViX2xvY2F0aW9uOiAxNTUwMTAxXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRXYmlFbmMocXVlcnlKc29uKTtcXG4gICAgICAgICAgICAgICAgaW5mb0xpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvd2JpL2FjYy9pbmZvPycgKyBwYXJtcztcXG4gICAgICAgICAgICAgICAgdXBEYXRhID0gSlNPTi5wYXJzZShmZXRjaChpbmZvTGluaywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWVcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgIHVwTmFtZSA9IHVwRGF0YS5uYW1lO1xcbiAgICAgICAgICAgICAgICB1cFNleCA9IHVwRGF0YS5zZXg7XFxuICAgICAgICAgICAgICAgIHVwU2lnbiA9IHVwRGF0YS5zaWduO1xcbiAgICAgICAgICAgICAgICB1cEJpcnRoZGF5ID0gdXBEYXRhLmJpcnRoZGF5O1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgdXBTY2hvb2wgPSB1cERhdGEuc2Nob29sLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwU2Nob29sID0gJyc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHVwSWRlbnRpZmljYXRpb24gPSB1cERhdGEub2ZmaWNpYWwudGl0bGU7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwSWRlbnRpZmljYXRpb24gPSAnJztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoJ2N1cnJlbnRVcCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAndXA6JyArIHVwTmFtZSArICdcXFxcbm1pZDonICsgdXBNaWQgKyAnXFxcXG7mgKfliKs6JyArIHVwU2V4ICsgJ1xcXFxu55Sf5pelOicgKyAodXBCaXJ0aGRheSA9PSAnJyA/ICfmnKrloavlhpknIDogdXBCaXJ0aGRheSkgKyAnXFxcXG4nICsgKHVwU2Nob29sID09ICcnID8gJycgOiAn5a2m5qChOicgKyB1cFNjaG9vbCArICdcXFxcbicpICsgKHVwU2lnbiA9PSAnJyA/ICdcXFxcbicgOiB1cFNpZ24gKyAnXFxcXG4nKSArICh1cElkZW50aWZpY2F0aW9uID09ICcnID8gJycgOiAn6K6k6K+BOicpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xvbmdfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndXBJbmZvJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignY3VycmVudFVwJywge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflpb3lg4/lh7rkuobngrnmhI/lpJbvvJ/ku4DkuYjpg73mnKjmnInlkaJ+JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3VwSW5mbydcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHB1dE15VmFyKCd1cEluZm8nLCAn5byAJyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+h5oGv5oqY5Y+gOicgKyBnZXRNeVZhcigndXBJbmZvJywgJ+W8gCcpXFxuICAgIH0sIHVwTWlkKSxcXG4gICAgaW1nOiB1cEZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6ICdjdXJyZW50VXAnXFxuICAgIH1cXG59LCB7XFxuICAgIGNvbF90eXBlOiAnbGluZSdcXG59KTtcXG4vLyDlhazlkYpcXG5ub3RpY2VUZXh0ID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvbm90aWNlP21pZD0nICsgdXBNaWQgKyAnJmpzb25wPWpzb25wJywge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICB9XFxufSkpLmRhdGE7XFxuaWYgKG5vdGljZVRleHQgIT0gJycpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5YWs5ZGKJyxcXG4gICAgICAgIHVybDogJCgpLnJ1bGUoKG5vdGljZVRleHQpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5YWs5ZGK77yaJyArICdcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JyArIG5vdGljZVRleHQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxuICAgICAgICB9LCBub3RpY2VUZXh0KSxcXG4gICAgICAgIGRlc2M6IG5vdGljZVRleHQgPT0gJycgPyAn5pqC5peg5YWs5ZGKJyA6IG5vdGljZVRleHQsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgIH0pO1xcbn1cXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2xpbmUnXFxufSwge1xcbiAgICB0aXRsZTogcmVsYXRpb24sXFxuICAgIGltZzogcmVsYXRpb24gPT0gJ+acquWFs+azqCcgPyBpbWdMaW5rLua3u+WKoOWFs+azqCA6IGltZ0xpbmsu5bey5YWz5rOoLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5jaGFuZ2VVc2VyUmVsYXRpb24odXBNaWQsIDExKVxcbiAgICB9LCB1cE1pZCksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiAncmVsYXRpb24nXFxuICAgIH1cXG59LCB7XFxuICAgIHRpdGxlOiAn5Yqo5oCBJyxcXG4gICAgaW1nOiBpbWdMaW5rLuWKqOaAgSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkKSA9PiB7XFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9wPWZ5cGFnZScpLnJ1bGUoKHVwTWlkKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBsYXRlbmV3cyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldER5bmFtaWNEYXRhKCd1cFNwYWNlJywgdXBNaWQpO1xcbiAgICAgICAgICAgIGV2YWwoJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuc2hvd0R5bmFtaWNEYXRhKCkpO1xcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIH0sIHVwTWlkKVxcbiAgICB9LCB1cE1pZCksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG59LCB7XFxuICAgIHRpdGxlOiAn5LiT5qCPJyxcXG4gICAgaW1nOiBpbWdMaW5rLuS4k+agjyxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2FjdGljbGVMaXN0P3A9ZnlwYWdlXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbWlkOiB1cE1pZFxcbiAgICB9XFxufSlcXG4vLyDnlKjmiLfop4bpopEt5ZCI6ZuG44CB57O75YiXXFxudXBWaWRlbyA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvc3BhY2Uvc2Vhc29uc19zZXJpZXNfbGlzdD9taWQ9JyArIHVwTWlkICsgJyZwYWdlX251bT0xJnBhZ2Vfc2l6ZT0xMCcsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiXFxuICAgIH1cXG59KSkuZGF0YS5pdGVtc19saXN0cztcXG4vLyDop4bpopHlkIjpm4bjgIHns7vliJdcXG50cnkge1xcbiAgICB1cFZpZGVvLnNlYXNvbnNfbGlzdC5mb3JFYWNoKGxpc3QgPT4ge1xcbiAgICAgICAgc2Vhc29uX2lkID0gbGlzdC5tZXRhLnNlYXNvbl9pZDtcXG4gICAgICAgIC8vIOagh+mimC3ot7Povazmm7TlpJpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiIzMzY2NjY1xcXCI+JyArIGxpc3QubWV0YS5uYW1lLnN1YnN0cmluZygwLCAzMCkgKyAnPC9mb250PlxcXFx0XFxcXHQ8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj4nICsgbGlzdC5tZXRhLnRvdGFsICsgJzwvZm9udD5cXHTinq4nLFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7lkIjpm4bmlofku7blpLksXFxuICAgICAgICAgICAgLy8gaW1nOiBsaXN0Lm1ldGEuY292ZXIrJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCh1cE1pZCwgc2Vhc29uX2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5P2Z5cGFnZScpLnJ1bGUoKHVwTWlkLCBzZWFzb25faWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9wb2x5bWVyL3NwYWNlL3NlYXNvbnNfYXJjaGl2ZXNfbGlzdD9taWQ9JyArIHVwTWlkICsgJyZzZWFzb25faWQ9JyArIHNlYXNvbl9pZCArICcmc29ydF9yZXZlcnNlPWZhbHNlJnBhZ2VfbnVtPScgKyBNWV9QQUdFICsgJyZwYWdlX3NpemU9MzAnO1xcbiAgICAgICAgICAgICAgICAgICAgVmlkZW8gPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICBtYXhQYWdlID0gTWF0aC5jZWlsKFZpZGVvLnBhZ2UudG90YWwgLyBWaWRlby5wYWdlLnBhZ2Vfc2l6ZSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA8PSBtYXhQYWdlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvZPliY0656ysJyArIFZpZGVvLnBhZ2UucGFnZV9udW0gKyAn6aG1XFxcXHRcXFxcdFxcXFx05YWx5pyJJyArIG1heFBhZ2UgKyAn6aG1LCcgKyBWaWRlby5wYWdlLnRvdGFsICsgJ+adoeaVsOaNricsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvLmFyY2hpdmVzLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgIH0sIHVwTWlkLCBzZWFzb25faWQpXFxuICAgICAgICAgICAgfSwgdXBNaWQsIHNlYXNvbl9pZClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKGxpc3QuYXJjaGl2ZXMgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIGxvZyhsaXN0Lm1ldGEubmFtZSArICfkuLrnqbonKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKGxpc3QuYXJjaGl2ZXMubGVuZ3RoIDwgMikge1xcbiAgICAgICAgICAgICAgICBsaXN0LmFyY2hpdmVzLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3Quc3RhdC52aWV3LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdC5hcmNoaXZlcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLlpb3lrrbkvJnvvIzov5nlrrbkvJnmsqHmnInlkIjpm4bop4bpopHvvIFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuimgeS4jeWOu+eCueWHu+WFqOmDqOinhumikeeci+eci35cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5hcmNoaXZlc1tpXS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuYXJjaGl2ZXNbaV0ucGljICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aSreaUvumHj++8micgKyBsaXN0LmFyY2hpdmVzW2ldLnN0YXQudmlldyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFyY2hpdmVzW2ldLmFpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59IGNhdGNoIChlKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WQiOmbhuS4uuepuicsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGRlc2M6ICdTb3JyeSzmsqHmnInmlbDmja7lkaJ+JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIH0pO1xcbn1cXG50cnkge1xcbiAgICB1cFZpZGVvLnNlcmllc19saXN0LmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICBzZXJpZXNfaWQgPSBsaXN0Lm1ldGEuc2VyaWVzX2lkO1xcbiAgICAgICAgLy8g5qCH6aKYLei3s+i9rOabtOWkmlxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCIjMzNjY2NjXFxcIj4nICsgbGlzdC5tZXRhLm5hbWUuc3Vic3RyaW5nKDAsIDMwKSArICc8L2ZvbnQ+XFxcXHRcXFxcdDxmb250IGNvbG9yPVxcXCJyZWRcXFwiPicgKyBsaXN0Lm1ldGEudG90YWwgKyAnPC9mb250PlxcdOKericsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWQiOmbhuaWh+S7tuWkuSxcXG4gICAgICAgICAgICAvLyBpbWc6IGxpc3QubWV0YS5jb3ZlcisnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkLCBzZXJpZXNfaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHk/ZnlwYWdlJykucnVsZSgodXBNaWQsIHNlcmllc19pZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3Nlcmllcy9hcmNoaXZlcz9taWQ9JyArIHVwTWlkICsgJyZzZXJpZXNfaWQ9JyArIHNlcmllc19pZCArICcmb25seV9ub3JtYWw9dHJ1ZSZzb3J0PWRlc2MmcG49JyArIE1ZX1BBR0UgKyAnJnBzPTMwJztcXG4gICAgICAgICAgICAgICAgICAgIFZpZGVvID0gSlNPTi5wYXJzZShmZXRjaCh1LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgICAgICAgICAgbWF4UGFnZSA9IE1hdGguY2VpbChWaWRlby5wYWdlLnRvdGFsIC8gVmlkZW8ucGFnZS5zaXplKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFIDw9IG1heFBhZ2UpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9k+WJjTrnrKwnICsgVmlkZW8ucGFnZS5udW0gKyAn6aG1XFxcXHRcXFxcdFxcXFx05YWx5pyJJyArIG1heFBhZ2UgKyAn6aG1LCcgKyBWaWRlby5wYWdlLnRvdGFsICsgJ+adoeaVsOaNricsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvLmFyY2hpdmVzLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgIH0sIHVwTWlkLCBzZXJpZXNfaWQpXFxuICAgICAgICAgICAgfSwgdXBNaWQsIHNlcmllc19pZClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKGxpc3QuYXJjaGl2ZXMgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIGxvZyhsaXN0Lm1ldGEubmFtZSArICfkuLrnqbonKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKGxpc3QuYXJjaGl2ZXMubGVuZ3RoIDwgMikge1xcbiAgICAgICAgICAgICAgICBsaXN0LmFyY2hpdmVzLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3Quc3RhdC52aWV3LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdC5hcmNoaXZlcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLlpb3lrrbkvJnvvIzov5nlrrbkvJnmsqHmnInlkIjpm4bop4bpopHvvIFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuimgeS4jeWOu+eCueWHu+WFqOmDqOinhumikeeci+eci35cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5hcmNoaXZlc1tpXS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuYXJjaGl2ZXNbaV0ucGljICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aSreaUvumHj++8micgKyBsaXN0LmFyY2hpdmVzW2ldLnN0YXQudmlldyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFyY2hpdmVzW2ldLmFpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59IGNhdGNoIChlKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+ezu+WIl+S4uuepuicsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGRlc2M6ICdTb3JyeSzmsqHmnInmlbDmja7lkaJ+JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIH0pO1xcbn1cXG4vLyB1cOaKleeov1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnVEHnmoTop4bpopEs54K55Ye75bGV5byA5YWo6YOoJyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkKSA9PiB7XFxuICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKHVwTWlkKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBxdWVyeUpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICBtaWQ6IHVwTWlkLFxcbiAgICAgICAgICAgICAgICAgICAgcHM6IDMwLFxcbiAgICAgICAgICAgICAgICAgICAgdGlkOiBnZXRNeVZhcignX3RpZCcsICcwJyksXFxuICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3R5cGU6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgcG46IGdldE15VmFyKCdfcGFnZScsICcxJyksXFxuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAncHViZGF0ZScsXFxuICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogJ3dlYicsXFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZWJfbG9jYXRpb246IDE1NTAxMDEsXFxuICAgICAgICAgICAgICAgICAgICBvcmRlcl9hdm9pZGVkOiB0cnVlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRXYmlFbmMocXVlcnlKc29uKTtcXG4gICAgICAgICAgICAgICAgZGF0YUxpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvd2JpL2FyYy9zZWFyY2g/JyArIHBhcm1zO1xcbiAgICAgICAgICAgICAgICB1cFZpZGVvRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goZGF0YUxpbmssIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgICAgICB0bGlzdCA9IHVwVmlkZW9EYXRhLmxpc3QudGxpc3Q7XFxuICAgICAgICAgICAgICAgIHZsaXN0ID0gdXBWaWRlb0RhdGEubGlzdC52bGlzdDtcXG4gICAgICAgICAgICAgICAgLy8g5YiG57G75ZKM6aG156CBXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ190aWQnLCAnMCcpID09IDAgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+5YWo6YOoPC9mb250PicgOiAn5YWo6YOoJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignX3RpZCcsICgwICsgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignX3BhZ2UnLCAoMSArIFxcXCJcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIGluIHRsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAodGxpc3RbaXRlbV0udGlkICsgXFxcIlxcXCIpID09IGdldE15VmFyKCdfdGlkJywgJzAnKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj4nICsgKHRsaXN0W2l0ZW1dLm5hbWUgKyBgKCR7dGxpc3RbaXRlbV0uY291bnR9KWApICsgJzwvZm9udD4nIDogKHRsaXN0W2l0ZW1dLm5hbWUgKyBgKCR7dGxpc3RbaXRlbV0uY291bnR9KWApLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCh0aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ190aWQnLCAodGlkICsgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ19wYWdlJywgKDEgKyBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0bGlzdFtpdGVtXS50aWQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIG1heFBhZ2UgPSBNYXRoLmNlaWwodXBWaWRlb0RhdGEucGFnZS5jb3VudCAvIHVwVmlkZW9EYXRhLnBhZ2UucHMpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSBtYXhQYWdlOyBwYWdlKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChwYWdlICsgXFxcIlxcXCIpID09IGdldE15VmFyKCdfcGFnZScsICcxJykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JyArIChwYWdlICsgXFxcIlxcXCIpICsgJzwvZm9udD4nIDogKHBhZ2UgKyBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHBhZ2UpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ19wYWdlJywgKHBhZ2UgKyBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBwYWdlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g5bmz6ZO66KeG6aKRXFxuICAgICAgICAgICAgICAgIHZsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdWJ0aW1lID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQoaXRlbS5jcmVhdGVkKTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpdGVtLnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgaXRlbS5wbGF5ICsgJ1xcXFxuJyArIHB1YnRpbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogaXRlbS5haWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfpobXpnaLotbDkuKLkuoYuLi4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9pMC5oZHNsYi5jb20vYmZzL2dlbmVyYWwvZjdiNjY3MDExYTQ2NjE1NzMyYzcwMWY0YmIxZDA3Zjc5M2Y4ZDFkZi5wbmdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5aSq6aKR57mB5LqG77yB56iN5ZCO5YaN6K+VficsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgIH0sIHVwTWlkKVxcbiAgICB9LCB1cE1pZClcXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ1cOaQnOe0olwiLFwicGF0aFwiOlwidXBTZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbnNlYXdvcmQgPSBNWV9QQVJBTVMuc2Vhd29yZDtcXG52YXIgZCA9IFtdO1xcbnJlc3VsdERhdGE9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0U2VhcmNoUmVzKCdiaWxpX3VzZXInLHNlYXdvcmQsTVlfUEFHRSwzNik7XFxuaWYgKE1ZX1BBR0UgPD0gcmVzdWx0RGF0YS5udW1QYWdlcykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflvZPliY0656ysJyArIHJlc3VsdERhdGEucGFnZSArICfpobVcXFxcdFxcXFx0XFxcXHTlhbHmnIknICsgcmVzdWx0RGF0YS5udW1QYWdlcyArICfpobUsJyArIHJlc3VsdERhdGEubnVtUmVzdWx0cyArICfmnaHmlbDmja4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB9KTtcXG4gICAgcmVzdWx0RGF0YS5yZXN1bHQuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCI8YmlnPjxmb250IGNvbG9yPSdibHVlJz5cXFwiICsgbGlzdC51bmFtZSArIFxcXCI8L2ZvbnQ+PC9iaWc+PHNtYWxsPlxcXCIgKyBsaXN0LnVzaWduICsgXFxcIjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovLycgKyBsaXN0LnVwaWMgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1pZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudW5hbWUsXFxuICAgICAgICAgICAgICAgIGZhY2U6ICdodHRwczovLycgKyBsaXN0LnVwaWNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxufVxcbnNldFNlYXJjaFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInZpZGVv5pCc57SiXCIsXCJwYXRoXCI6XCJ2aWRlb1NlYXJjaFwiLFwicnVsZVwiOlwianM6XFxuc2Vhd29yZCA9IE1ZX1BBUkFNUy5zZWF3b3JkO1xcbnZhciBkID0gW107XFxudmFyIHJlc3VsdERhdGE9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0U2VhcmNoUmVzKCd2aWRlbycsc2Vhd29yZCxNWV9QQUdFLDQyKTtcXG52YXIge3RpbWVDb252ZXJ0fT0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKTtcXG5pZiAoTVlfUEFHRSA8PSByZXN1bHREYXRhLm51bVBhZ2VzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+W9k+WJjTrnrKwnICsgcmVzdWx0RGF0YS5wYWdlICsgJ+mhtVxcXFx0XFxcXHRcXFxcdOWFseaciScgKyByZXN1bHREYXRhLm51bVBhZ2VzICsgJ+mhtSwnICsgcmVzdWx0RGF0YS5udW1SZXN1bHRzICsgJ+adoeaVsOaNricsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIH0pO1xcbiAgICByZXN1bHREYXRhLnJlc3VsdC5mb3JFYWNoKGxpc3QgPT4ge1xcbiAgICAgICAgLy8gdGl0bGU9bGlzdC50aXRsZS5yZXBsYWNlKCc8ZW0gY2xhc3M9XFxcXFxcXCJrZXl3b3JkXFxcXFxcXCI+JywnPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JykucmVwbGFjZSgnPC9lbT4nLCc8L2ZvbnQ+JylcXG4gICAgICAgIHRpdGxlID0gbGlzdC50aXRsZS5yZXBsYWNlKC88ZW0gY2xhc3M9XFxcXFxcXCJrZXl3b3JkXFxcXFxcXCI+L2csICcnKS5yZXBsYWNlKC88XFxcXC9lbT4vZywgJycpXFxuICAgICAgICBwYnRpbWU9dGltZUNvbnZlcnQobGlzdC5wdWJkYXRlKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vJyArIGxpc3QucGljICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPuaSreaUvumHjzonK2xpc3QucGxheSsnXFxcXHRcXFxcdFxcXFx05by55bmVOicrbGlzdC5kYW5tYWt1KydcXFxcdFxcXFx0XFxcXHTllpzmrKI6JytsaXN0Lmxpa2UrJ1xcXFxu5Y+R5biD5pe26Ze0OicrcGJ0aW1lKyc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIC8vIOinhumikeagh+ivhlxcbiAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcbiAgICAgICAgICAgICAgICBidmlkOmxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn1cXG5zZXRTZWFyY2hSZXN1bHQoZCk7XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX2xlZnRfcGljXCIsXCJuYW1lXCI6XCLmjqjpgIFcIixcInBhdGhcIjpcImZlZWRcIixcInJ1bGVcIjpcIiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldEZlZWQoKS5mb3JFYWNoKGl0ZW0gPT4ge1xcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgaW1nOiBpdGVtLnBpYysnQFJlZmVyZXI9JyxcXG5cXG7CoCDCoCDCoCDCoCBkZXNjOiAndXA6JyArIGl0ZW0ub3duZXIubmFtZSArICdcXFxcbicgKyBpdGVtLnN0YXQudmlldyArIFxcXCLmkq3mlL7igLtcXFwiICsgaXRlbS5zdGF0Lmxpa2UgKyBcXFwi54K56LWeXFxcIixcXG5cXG7CoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCAvLyBpZOWFtuWunuaYr2FpZFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGFpZDogaXRlbS5pZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjaWQ6IGl0ZW0uY2lkLFxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KVxcblxcbn0pXFxuXFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkFQSVwiLFwicGF0aFwiOlwiYXBpXCIsXCJydWxlXCI6XCIvLyBwYXJ0MTrogZrlkIjlh73mlbAtLS0tLS0tLS0tLS0tLS0tXFxuLy8g55m75b2V6aqM6K+BXFxuJC5leHBvcnRzLmlzTG9nZ2VkSW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIGlmIChmaWxlRXhpc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkge1xcbiAgICAgICAgYmlsaURhdGUgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSk7XFxuICAgICAgICB2YXIgY29va2llID0gYmlsaURhdGUuY29va2llO1xcbiAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXZcXFwiLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICBpZiAodXNlcmluZm8uaXNMb2dpbiA9PT0gZmFsc2UpIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwidXNlck5hbWVcXFwiOiAn5pyq55m75b2VJyxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJNaWRcXFwiOiAnJyxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJGYWNlXFxcIjogJycsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogZmFsc2VcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBiaWxpRGF0ZS51c2VyTmFtZSA9IHVzZXJpbmZvLnVuYW1lO1xcbiAgICAgICAgICAgIGJpbGlEYXRlLnVzZXJNaWQgPSB1c2VyaW5mby5taWQ7XFxuICAgICAgICAgICAgLy8gMe+8muS8muWRmOW8gOmAmu+8mzDvvJrmnKrlvIDpgJpcXG4gICAgICAgICAgICBiaWxpRGF0ZS52aXBTdGF0dXMgPSB1c2VyaW5mby52aXBTdGF0dXM7XFxuICAgICAgICAgICAgYmlsaURhdGUuZmFjZSA9IHVzZXJpbmZvLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIjtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dCcsIEpTT04uc3RyaW5naWZ5KGJpbGlEYXRlKSk7XFxuICAgICAgICAgICAgLy8gcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJOYW1lXFxcIjogYmlsaURhdGUudXNlck5hbWUsXFxuICAgICAgICAgICAgICAgIFxcXCJ1c2VyTWlkXFxcIjogYmlsaURhdGUudXNlck1pZCxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJGYWNlXFxcIjogYmlsaURhdGUuZmFjZSxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiB0cnVlXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIFxcXCJ1c2VyTmFtZVxcXCI6ICfmnKrnmbvlvZUnLFxcbiAgICAgICAgICAgIFxcXCJ1c2VyTWlkXFxcIjogJycsXFxuICAgICAgICAgICAgXFxcInVzZXJGYWNlXFxcIjogJycsXFxuICAgICAgICAgICAgXFxcInR5cGVcXFwiOiBmYWxzZVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuLy8g5ZOU5ZOp6KeG6aKR6Kej5p6Q77ya6I635Y+W5pKt5pS+5Zyw5Z2AK+aPkOS6pOaSreaUvuiusOW9lVxcbiQuZXhwb3J0cy5iaWxpTGF6eSA9IGZ1bmN0aW9uIChpZCwgY2lkLCBxbikge1xcbiAgICAvLyDph43nva7ljp/nlJ/lvLnluZXnu5/kuIDlvLnluZXlpKflsI/jgIHkv67mlLnmraXplb9cXG4gICAgZnVuY3Rpb24gb3ZlcnJpZGVTYXZlKGRtKSB7XFxuICAgICAgICB2YXIgZGFubXVEYXRhID0gcmVxdWVzdChkbSk7XFxuICAgICAgICAvLyDlrZfkvZPlpKflsI/jgIHlvLnluZXmraXplb9cXG4gICAgICAgIHZhciBkYW5tdVNldHRpbmc9SlNPTi5wYXJzZShyZWFkRmlsZSgnaGlrZXI6Ly9maWxlcy9kbeebkuWtkC9zZXR0aW5ncy5qc29uJykpO1xcbiAgICAgICAgdmFyIHNpemUgPSBkYW5tdVNldHRpbmcuZm9udFNpemU7XFxuICAgICAgICB2YXIgc3RlcCA9IGRhbm11U2V0dGluZy5zdGVwO1xcbiAgICAgICAgdmFyIGRhdGEgPSAnJztcXG4gICAgICAgIHRkID0gcGRmYShkYW5tdURhdGEsICdpJiZkJyk7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRkLmxlbmd0aDsgaSs9c3RlcCkge1xcbiAgICAgICAgICAgIHRpbWVwb2ludCA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVswXTtcXG4gICAgICAgICAgICBjdCA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVsxXTtcXG4gICAgICAgICAgICBjb2xvciA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVszXTtcXG4gICAgICAgICAgICAvLyDlvLnluZXlhoXlrrlcXG4gICAgICAgICAgICBjb250ZW50ID0gcGRmaCh0ZFtpXSwgJ2QmJlRleHQnKTtcXG4gICAgICAgICAgICBpZiAoY29udGVudC5pbmRleE9mKCc8JykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCc+JykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCcmJykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCdcXFxcdTAwMDAnKSAhPSAtMSB8fCBjb250ZW50LmluZGV4T2YoJ1xcXFxiJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRlbXBkYXRhID0gYDxkIHA9XFxcIiR7TWF0aC5yb3VuZCh0aW1lcG9pbnQpfSwke2N0fSwke3NpemV9LCR7Y29sb3J9LDBcXFwiPiR7Y29udGVudH08L2Q+XFxcXG5gO1xcbiAgICAgICAgICAgIGRhdGEgKz0gdGVtcGRhdGE7XFxuICAgICAgICB9XFxuICAgICAgICBkYW5tdXN0ciA9IGA8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/PlxcXFxuPGk+XFxcXG4ke2RhdGF9PC9pPmA7XFxuICAgICAgICBzYXZlRmlsZShkbSwgZGFubXVzdHIpO1xcbiAgICB9XFxuICAgIC8vIOWIpOaWreaYr+WQpumHjeWGmVxcbiAgICB2YXIgZG09J2h0dHBzOi8vY29tbWVudC5iaWxpYmlsaS5jb20vJyArIGNpZCArICcueG1sJztcXG4gICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywnZmFsc2UnKT09J3RydWUnKSB7XFxuICAgICAgICBmaWxlID0gJ2h0dHBzOi8vY29tbWVudC5iaWxpYmlsaS5jb20vJyArIGNpZCArICcueG1sJztcXG4gICAgICAgIGRtID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvZGFubXUvJyArICdiaWxpX2Zyb21fJyArIGdldFBhZ2VUaXRsZSgpICsgJy54bWwnO1xcbiAgICAgICAgZG93bmxvYWRGaWxlKGZpbGUsIGRtKTtcXG4gICAgICAgIG92ZXJyaWRlU2F2ZShkbSk7XFxuICAgIH1cXG4gICAgdmFyIGRhdGEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRVcmwoaWQsIGNpZCwgcW4pO1xcbiAgICAvLyDmj5DkuqTljoblj7LorrDlvZVcXG4gICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikucmVwb3J0UHJvY2VzcyhpZCwgY2lkKTtcXG4gICAgLy8gcXVhbGl0eU51bT1kYXNoLmF1ZGlvLmxlbmd0aDvkuI3pnIDopoHkuobvvIzmib7liLDkuobmm7Tlpb3nmoTliKTmlq3mlrnms5XvvIzomb3nhLbmiJHlubbkuI3nn6XpgZPov5nkupvlj4LmlbDnmoTlkKvkuYnmmK/ku4DkuYhcXG4gICAgdmlkZW9MaXN0ID0gW107XFxuICAgIGF1ZGlvTGlzdCA9IFtdO1xcbiAgICBuYW1lTGlzdCA9IFtdO1xcbiAgICBoZWFkZXJzID0gW107XFxuICAgIHRyeSB7XFxuICAgICAgICBkYXRhLmF1ZGlvLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgYXVkaW9MaXN0LnB1c2goaXRlbS5iYXNlVXJsKTtcXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goe1xcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb21cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGRhdGEudmlkZW8uZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBpZiAoaXRlbS5jb2RlY2lkID09IDcpIHtcXG4gICAgICAgICAgICAgICAgdmlkZW9MaXN0LnB1c2goaXRlbS5iYXNlVXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09IDEyNikge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgn5p2c5q+U6KeG55WMJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAxMjUpIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJ0hEUiDnnJ/lvanoibInKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDEyMCkge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNEvotoXmuIUnKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDExNikge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnMTA4MFA2MOmrmOW4p+eOhycpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTEyKSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcxMDgwUCvpq5jnoIHnjocnKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDgwKSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcxMDgwUOmrmOa4hScpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gNzQpIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzcyMFA2MOmrmOW4p+eOhycpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gNjQpIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzcyMFDpq5jmuIUnKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDMyKSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCc0ODBQ5riF5pmwJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAxNikge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnMzYwUOa1geeVhScpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gNikge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnMjQwUOaegemAnycpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHVybHM6IHZpZGVvTGlzdCxcXG4gICAgICAgICAgICBhdWRpb1VybHM6IGF1ZGlvTGlzdCxcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcbiAgICAgICAgICAgIG5hbWVzOiBuYW1lTGlzdCxcXG4gICAgICAgICAgICBkYW5tdTogZG1cXG4gICAgICAgIH0pXFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgdXJsczogW2RhdGEuZHVybFswXS51cmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICBuYW1lczogW2RhdGEucXVhbGl0eSArIFxcXCJcXFwiXSxcXG4gICAgICAgICAgICBkYW5tdTogZG0sXFxuICAgICAgICAgICAgaGVhZGVyczogW3tcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcbi8vIOeojeWQjuWcqOeci+KAlOKAlOaAu+aTjeS9nOWIpOaWrVxcbiQuZXhwb3J0cy5qdWRnZVRvdmlldyA9IGZ1bmN0aW9uIChhaWQpIHtcXG4gICAgc2VsZWN0aW9uID0gWyfmt7vliqAnLCAn56e76ZmkJ107XFxuICAgIHJldHVybiAkKHNlbGVjdGlvbiwgMSkuc2VsZWN0KChhaWQpID0+IHtcXG4gICAgICAgIGlmIChpbnB1dCA9PSAn5re75YqgJykge1xcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmFkZFRvdmlldyhhaWQpO1xcbiAgICAgICAgICAgIGlmIChyZXMgPT0gMCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5re75Yqg5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+i0puWPt+acqueZu+W9lVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTExKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC00MDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+axgumUmeivr1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSA5MDAwMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiX6KGo5bey5ruhXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDkwMDAzKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nqL/ku7blt7Lnu4/ooqvliKDpmaRcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmRlbFRvdmlldyhhaWQpO1xcbiAgICAgICAgICAgIGlmIChyZXMgPT0gMCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v56e76Zmk5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+i0puWPt+acqueZu+W9lVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTExKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC00MDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+axgumUmeivr1xcXCJcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyq55+l6ZSZ6K+vXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSwgYWlkKVxcbn1cXG4vLyDmk43kvZznlKjmiLflhbPns7tcXG4kLmV4cG9ydHMuY2hhbmdlVXNlclJlbGF0aW9uID0gZnVuY3Rpb24gKG1pZCwgcmVfc3JjKSB7XFxuICAgIHNlbGVjdGlvbiA9IFsn5YWz5rOoJywgJ+WPluWFsycsICfmgoTmgoTlhbPms6gnLCAn5Y+W5raI5oKE5oKE5YWz5rOoJywgJ+aLiem7kScsICflj5bmtojmi4npu5EnLCAn6Lii5Ye657KJ5LidJywgJ+enu+WKqOWIhue7hCddO1xcbiAgICByZXR1cm4gJChzZWxlY3Rpb24sIDIpLnNlbGVjdCgobWlkLCByZV9zcmMpID0+IHtcXG4gICAgICAgIGlmIChpbnB1dCA9PSAn56e75Yqo5YiG57uEJykge1xcbiAgICAgICAgICAgIGJlZm9yZVRhZ2lkcyA9IFtdO1xcbiAgICAgICAgICAgIGdyb3VwcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFVzZXJHcm91cChtaWQpO1xcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncm91cHMpID09ICd7fScpIHtcXG4gICAgICAgICAgICAgICAgYmVmb3JlVGFnaWRzLnB1c2goMCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBncm91cHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZVRhZ2lkcy5wdXNoKHBhcnNlSW50KHByb3ApKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyDojrflj5bmiJHnmoTliIbnu4RcXG4gICAgICAgICAgICBmb2N1c0dyb3VwTGlzdCA9IFtdO1xcbiAgICAgICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldE15QXR0ZW50aW9uR3JvdXBMaXN0KCkuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgZm9jdXNHcm91cExpc3QucHVzaChsaXN0Lm5hbWUgKyAnICcgKyBsaXN0LnRhZ2lkKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gJChmb2N1c0dyb3VwTGlzdCwgMSkuc2VsZWN0KChiZWZvcmVUYWdpZHMsIG1pZCkgPT4ge1xcbiAgICAgICAgICAgICAgICBhZnRlclRhZ2lkcyA9IFtdO1xcbiAgICAgICAgICAgICAgICBhZnRlclRhZ2lkcy5wdXNoKHBhcnNlSW50KGlucHV0LnNwbGl0KCcgJylbMV0pKTtcXG4gICAgICAgICAgICAgICAgZmlkcyA9IFtdO1xcbiAgICAgICAgICAgICAgICBmaWRzLnB1c2goTnVtYmVyKG1pZCkpO1xcbiAgICAgICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5tb3ZlVXNlcnMoYmVmb3JlVGFnaWRzLCBhZnRlclRhZ2lkcywgZmlkcyk7XFxuICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+enu+WKqOeUqOaIt+WIsFxcXCIgKyBpbnB1dC5zcGxpdCgnICcpWzBdICsgXFxcIuWIhue7hOaIkOWKn1xcXCJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTEwMSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+i0puWPt+acqueZu+W9lVxcXCJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTExMSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL2NzcmbmoKHpqozlpLHotKVcXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC00MDApIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7fmsYLplJnor69cXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDIyMTA0KSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5peg5p2D6ZmQXFxcIlxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjEwNSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acquWFs+azqFxcXCJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mnKrnn6XplJnor69cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBiZWZvcmVUYWdpZHMsIG1pZCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSAn5YWz5rOoJykge1xcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09ICflj5blhbMnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhY3QgPSAyO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+aChOaChOWFs+azqCcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGFjdCA9IDM7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSAn5Y+W5raI5oKE5oKE5YWz5rOoJykge1xcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNDtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09ICfmi4npu5EnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhY3QgPSA1O1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPlua2iOaLiem7kScpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGFjdCA9IDY7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSAn6Lii5Ye657KJ5LidJykge1xcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYWRkQXR0ZW50aW9uKG1pZCwgYWN0LCByZV9zcmMpO1xcbiAgICAgICAgICAgIHJlbGF0aW9uID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudXNlck1hcHBpbmcobWlkKTtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdyZWxhdGlvbicsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHJlbGF0aW9uLFxcbiAgICAgICAgICAgICAgICBpbWc6IHJlbGF0aW9uID09ICfmnKrlhbPms6gnID8gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLua3u+WKoOWFs+azqCA6IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7lt7LlhbPms6hcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyBpbnB1dCArIFxcXCLmiJDlip9cXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTEwMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6LSm5Y+35pyq55m75b2VXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMTEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL2NzcmbmoKHpqozlpLHotKVcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTQwMCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+35rGC6ZSZ6K+vXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDIyMDAxKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuI3og73lr7noh6rlt7Hov5vooYzmraTmk43kvZxcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gMjIwMDMpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+eUqOaIt+S9jeS6jum7keWQjeWNlVxcXCJcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyq55+l6ZSZ6K+vXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSwgbWlkLCByZV9zcmMpXFxufVxcbi8vIOaYoOWwhOeUqOaIt+WFs+ezu1xcbiQuZXhwb3J0cy51c2VyTWFwcGluZyA9IGZ1bmN0aW9uIChtaWQpIHtcXG4gICAgcmVsYXRpb25SZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRSZWxhdGlvbihtaWQpO1xcbiAgICBpZiAocmVsYXRpb25SZXMucmVsYXRpb24uYXR0cmlidXRlID09IDApIHtcXG4gICAgICAgIHJlbGF0aW9uID0gJ+acquWFs+azqCdcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMSkge1xcbiAgICAgICAgcmVsYXRpb24gPSAn5oKE5oKE5YWz5rOoJ1xcbiAgICB9IGVsc2UgaWYgKHJlbGF0aW9uUmVzLnJlbGF0aW9uLmF0dHJpYnV0ZSA9PSAyKSB7XFxuICAgICAgICByZWxhdGlvbiA9ICflt7LlhbPms6gnXFxuICAgIH0gZWxzZSBpZiAocmVsYXRpb25SZXMucmVsYXRpb24uYXR0cmlidXRlID09IDYpIHtcXG4gICAgICAgIHJlbGF0aW9uID0gJ+W3suS6kueyiSdcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMTI4KSB7XFxuICAgICAgICByZWxhdGlvbiA9ICflt7Lmi4npu5EnXFxuICAgIH1cXG4gICAgcmV0dXJuIHJlbGF0aW9uO1xcbn1cXG4vLyDngrnotZ7mk43kvZzpgLvovpFcXG4kLmV4cG9ydHMubGlrZUxvZ2ljID0gZnVuY3Rpb24gKGFpZCkge1xcbiAgICBoYXNMaWtlID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuaGFzTGlrZShhaWQpO1xcbiAgICBpZiAoaGFzTGlrZSA9PSAwKSB7XFxuICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5zZXRMaWtlKGFpZCwgMSk7XFxuICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgYWlkKSkuZGF0YS5zdGF0Lmxpa2U7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2V0TGlrZScsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlICsgMSkgKyAnJyxcXG4gICAgICAgICAgICAgICAgaW1nOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5bey54K56LWeXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+eCuei1nuaIkOWKn1xcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ngrnotZ7lh7rplJnkuoZ+XFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnNldExpa2UoYWlkLCAyKTtcXG4gICAgICAgIGlmIChyZXMgPT0gMCkge1xcbiAgICAgICAgICAgIGxpa2UgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXc/YWlkPVxcXCIgKyBhaWQpKS5kYXRhLnN0YXQubGlrZTtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdzZXRMaWtlJywge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogKGxpa2UgLSAxKSArICcnLFxcbiAgICAgICAgICAgICAgICBpbWc6IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mnKrngrnotZ5cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+W5raI54K56LWe5oiQ5YqfXFxcIjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPlua2iOeCuei1nuWHuumUmeS6hn5cXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcbi8vIOaUtuiXj+aTjeS9nOmAu+i+kVxcbiQuZXhwb3J0cy5mYXZvdXJMb2dpYyA9IGZ1bmN0aW9uIChhaWQsIG1pZCkge1xcbiAgICBoYXNGYXZvdXIgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5oYXNGYXZvdXIoYWlkKTtcXG4gICAgaWYgKGhhc0Zhdm91cikge1xcbiAgICAgICAgLy8g56e75Ye65pS26JePXFxuICAgICAgICBmYXZvdXJJZExpc3QgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRGYXZvdXJJZExpc3QoYWlkLCBtaWQpO1xcbiAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuc2V0RmF2b3VyKGFpZCwgJycsIGZhdm91cklkTGlzdCk7XFxuICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgYWlkKSkuZGF0YS5zdGF0LmZhdm9yaXRlO1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3NldEZhdm91cicsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlIC0gMSkgKyAnJyxcXG4gICAgICAgICAgICAgICAgaW1nOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5pyq5pS26JePXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPlua2iOaUtuiXj+aIkOWKn1xcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj5bmtojmlLbol4/lh7rplJnkuoZ+XFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOmAieaLqeaUtuiXj1xcbiAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0Q29sbGVjdGlvbkdyb3VwTGlzdCgpWzBdLm1lZGlhTGlzdFJlc3BvbnNlLmxpc3Q7XFxuICAgICAgICBHcm91cExpc3QgPSBbXTtcXG4gICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIEdyb3VwTGlzdC5wdXNoKGl0ZW0udGl0bGUgKyAnICcgKyBpdGVtLmlkKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuICQoR3JvdXBMaXN0LCAxKS5zZWxlY3QoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgIHNlbGVjdElkID0gcGFyc2VJbnQoaW5wdXQuc3BsaXQoJyAnKVsxXSlcXG4gICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5zZXRGYXZvdXIoYWlkLCBzZWxlY3RJZCwgJycpO1xcbiAgICAgICAgICAgIGlmIChyZXMgPT0gMCkge1xcbiAgICAgICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgYWlkKSkuZGF0YS5zdGF0LmZhdm9yaXRlO1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdzZXRGYXZvdXInLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpa2UgKyAxKSArICcnLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5bey5pS26JePXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pS26JeP5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pS26JeP5Ye66ZSZ5LqGflxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgYWlkKTtcXG4gICAgfVxcbn1cXG5cXG4vLyBwYXJ0MjrmlaPoo4VBUEktLS0tLS0tLS0tLS0tLS0tXFxuLy8g6I635Y+W5pCc57Si57uT5p6cXFxuJC5leHBvcnRzLmdldFNlYXJjaFJlcyA9IGZ1bmN0aW9uIChzZWFyY2hfdHlwZSxzZWF3b3JkLHBhZ2UscGFnZVNpemUpIHtcXG4gICAgcXVlcnlKc29uID0ge1xcbiAgICAgICAgX19yZWZyZXNoX186dHJ1ZSxcXG4gICAgICAgIF9leHRyYTonJyxcXG4gICAgICAgIGNvbnRleHQ6JycsXFxuICAgICAgICBwYWdlOnBhZ2UsXFxuICAgICAgICBwYWdlX3NpemU6cGFnZVNpemUsXFxuICAgICAgICBvcmRlcjonJyxcXG4gICAgICAgIGR1cmF0aW9uOicnLFxcbiAgICAgICAgZnJvbV9zb3VyY2U6JycsXFxuICAgICAgICBmcm9tX3NwbWlkOjMzMy4zMzcsXFxuICAgICAgICBwbGF0Zm9ybToncGMnLFxcbiAgICAgICAgaGlnaGxpZ2h0OjEsXFxuICAgICAgICBzaW5nbGVfY29sdW1uOjAsXFxuICAgICAgICBrZXl3b3JkOnNlYXdvcmQsXFxuICAgICAgICBzZWFyY2hfdHlwZTpzZWFyY2hfdHlwZSxcXG4gICAgICAgIHByZWxvYWQ6dHJ1ZSxcXG4gICAgICAgIGNvbTJjbzp0cnVlXFxuICAgIH1cXG4gICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRXYmlFbmMocXVlcnlKc29uKTtcXG4gICAgZGF0YUxpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS93Ymkvc2VhcmNoL3R5cGU/JyArIHBhcm1zO1xcbiAgICBjb29raWU9SlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZTtcXG4gICAgcmVzID0gSlNPTi5wYXJzZShmZXRjaChkYXRhTGluaywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIkdFVFxcXCJcXG4gICAgfSkpLmRhdGE7XFxuICAgIHJldHVybiByZXM7XFxufVxcbi8vIOinhumikeaOqOiNkFxcbiQuZXhwb3J0cy5nZXRGZWVkID0gZnVuY3Rpb24gKCkge1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2luZGV4L3RvcC9mZWVkL3JjbWRcXFwiO1xcbiAgICB2YXIgcmVzID0gSlNPTi5wYXJzZShmZXRjaCh1LCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWVcXG4gICAgICAgIH1cXG4gICAgfSkpO1xcbiAgICByZXR1cm4gcmVzLmRhdGEuaXRlbVxcbn1cXG4vLyDojrflj5bmkq3mlL7lnLDlnYBcXG4kLmV4cG9ydHMuZ2V0VXJsID0gZnVuY3Rpb24gKGF2aWQsIGNpZCwgcW4pIHtcXG4gICAgaWYgKGdldE15VmFyKCdiZl9jb29raWUnLCAn5pyq5a6a5LmJJykgPT0gJ+acquWumuS5iScpIHtcXG4gICAgICAgIHZhciBDb29raWUgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgQ29va2llID0gZ2V0TXlWYXIoJ2JmX2Nvb2tpZScpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgdSA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcGxheWVyL3BsYXl1cmxcXFwiLCB7XFxuICAgICAgICAgICAgXFxcImF2aWRcXFwiOiBhdmlkLFxcbiAgICAgICAgICAgIFxcXCJjaWRcXFwiOiBjaWQsXFxuICAgICAgICAgICAgXFxcInFuXFxcIjogcW4sXFxuICAgICAgICAgICAgXFxcImZudmVyXFxcIjogMCxcXG4gICAgICAgICAgICAvLyBcXFwiZm52YWxcXFwiOiA0MDQ4LFxcbiAgICAgICAgICAgIFxcXCJmbnZhbFxcXCI6IDE2LFxcbiAgICAgICAgICAgIFxcXCJmb3Vya1xcXCI6IDFcXG4gICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBDb29raWU6IENvb2tpZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh1KS5kYXRhLmRhc2hcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvLyDkuIDkurrkuYvkuIvnrKzkuIDlraPnmoTnrKwx77yMMumbhuKAlOKAlOWPr+S7peiOt+WPluWkp+S8muWRmOWJp+mbhueahOWJjTNtaW5cXG4gICAgICAgICAgICBsb2coJ+WwneivleabtOaUueivt+axguaOpeWPoy4uLicpO1xcbiAgICAgICAgICAgIGxldCB1ID0gcmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9wbGF5ZXIvd2ViL3BsYXl1cmxcXFwiLCB7XFxuICAgICAgICAgICAgICAgIFxcXCJhdmlkXFxcIjogYXZpZCxcXG4gICAgICAgICAgICAgICAgXFxcImNpZFxcXCI6IGNpZCxcXG4gICAgICAgICAgICAgICAgXFxcInFuXFxcIjogcW4sXFxuICAgICAgICAgICAgICAgIFxcXCJmbnZlclxcXCI6IDAsXFxuICAgICAgICAgICAgICAgIC8vIFxcXCJmbnZhbFxcXCI6IDQwNDgsXFxuICAgICAgICAgICAgICAgIFxcXCJmbnZhbFxcXCI6IDE2LFxcbiAgICAgICAgICAgICAgICBcXFwiZm91cmtcXFwiOiAxXFxuICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgQ29va2llOiBDb29raWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgLy8g5LuZ546L55qE5pel5bi456ys5LiJ5a2j56ysMTDpm4bvvIzmsqHmnIlkYXNo77yM5pyN5LqGXFxuICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UodSkucmVzdWx0LmRhc2gpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodSkucmVzdWx0LmRhc2g7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgbG9nKCflsJ3or5XotbDljZXnur/ot6/nlLvotKh+Jyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHUpLnJlc3VsdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgICAgIGxvZygnY29va2ll5pyJ5rKh5pyJ5Y+v6IO95aSx5pWI5LqG5ZGificpO1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG4vLyDmj5DkuqTmkq3mlL7orrDlvZVcXG4kLmV4cG9ydHMucmVwb3J0UHJvY2VzcyA9IGZ1bmN0aW9uIChhdmlkLCBjaWQpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCByZXMgPSBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvcmVwb3J0XFxcIiwge1xcbiAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgIFxcXCJhaWRcXFwiOiBhdmlkLFxcbiAgICAgICAgICAgIFxcXCJjaWRcXFwiOiBjaWQsXFxuICAgICAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmLFxcbiAgICAgICAgICAgIFxcXCJwcm9ncmVzc1xcXCI6IDBcXG4gICAgICAgIH0sXFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgQ29va2llOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuICAgICAgICB9XFxuICAgIH0pXFxufVxcblxcbi8vIOiOt+WPluivhOiuulxcbiQuZXhwb3J0cy5nZXRDb21tZW50cyA9IGZ1bmN0aW9uIChpZCwgdHlwZSwgcGFnZSkge1xcbiAgICBsZXQgdSA9IGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL3JlcGx5XFxcIiwge1xcbiAgICAgICAgXFxcInR5cGVcXFwiOiB0eXBlLFxcbiAgICAgICAgXFxcIm9pZFxcXCI6IGlkLFxcbiAgICAgICAgXFxcInBuXFxcIjogcGFnZVxcbiAgICB9KTtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QodSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIENvb2tpZTogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmRhdGEucmVwbGllc1xcbn1cXG4vLyDmt7vliqDnqI3lkI7lnKjnnIvigJTigJTnnJ/nmoTpurvkuobvvIzkuLrku4DkuYhmZXRjaOWwsemUmeWRon5cXG4kLmV4cG9ydHMuYWRkVG92aWV3ID0gZnVuY3Rpb24gKGFpZCkge1xcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvaGlzdG9yeS90b3ZpZXcvYWRkXFxcIjtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGFpZCxcXG4gICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZixcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXG59XFxuLy8g5Yig6Zmk56iN5ZCO5Zyo55yLXFxuJC5leHBvcnRzLmRlbFRvdmlldyA9IGZ1bmN0aW9uIChhaWQpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCB1ID0gXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvaGlzdG9yeS90b3ZpZXcvZGVsXFxcIjtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGFpZCxcXG4gICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZixcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXG59XFxuLy8g6K6i6ZiF5b2x6KeGKOi/veeVquOAgei/veWJpylcXG4kLmV4cG9ydHMuc3Vic2NyaWJlRmlsbSA9IGZ1bmN0aW9uIChzZWFzb25faWQpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvd2ViL2ZvbGxvdy9hZGRcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwic2Vhc29uX2lkXFxcIjogc2Vhc29uX2lkLFxcbiAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmLFxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kOiBcXFwiUE9TVFxcXCJcXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5yZXN1bHQudG9hc3Q7XFxufVxcbi8vIOWPlua2iOiuoumYhVxcbiQuZXhwb3J0cy5jYW5jZWxTdWJzY3JpYmVGaWxtID0gZnVuY3Rpb24gKHNlYXNvbl9pZCkge1xcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy93ZWIvZm9sbG93L2RlbFxcXCI7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJzZWFzb25faWRcXFwiOiBzZWFzb25faWQsXFxuICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmYsXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWVcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLnJlc3VsdC50b2FzdDtcXG59XFxuLyrmk43kvZznlKjmiLflhbPns7tcXG5maWQ655So5oi3bWlkXFxuYWN0OuaTjeS9nOS7o+eggVxcbnJlX3NyY++8muWFs+azqOadpea6kFxcbiovXFxuJC5leHBvcnRzLmFkZEF0dGVudGlvbiA9IGZ1bmN0aW9uIChtaWQsIGFjdCwgcmVfc3JjKSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi9tb2RpZnlcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwiZmlkXFxcIjogbWlkLFxcbiAgICAgICAgXFxcImFjdFxcXCI6IGFjdCxcXG4gICAgICAgIFxcXCJyZV9zcmNcXFwiOiByZV9zcmMsXFxuICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmZcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXG59XFxuLy8g56e75Yqo5YWz5rOo55So5oi35YiG57uEXFxuJC5leHBvcnRzLm1vdmVVc2VycyA9IGZ1bmN0aW9uIChiZWZvcmVUYWdpZHMsIGFmdGVyVGFnaWRzLCBmaWRzKSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWdzL21vdmVVc2Vyc1xcXCI7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJiZWZvcmVUYWdpZHNcXFwiOiBiZWZvcmVUYWdpZHMudG9TdHJpbmcoKSxcXG4gICAgICAgIFxcXCJhZnRlclRhZ2lkc1xcXCI6IGFmdGVyVGFnaWRzLnRvU3RyaW5nKCksXFxuICAgICAgICBcXFwiZmlkc1xcXCI6IGZpZHMudG9TdHJpbmcoKSxcXG4gICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kOiBcXFwiUE9TVFxcXCJcXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcbn1cXG4vLyDojrflj5bnlKjmiLflhbPns7tcXG4kLmV4cG9ydHMuZ2V0UmVsYXRpb24gPSBmdW5jdGlvbiAobWlkKSB7XFxuICAgIC8vIGh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FjYy9yZWxhdGlvbj9taWQ9LOaXp+aOpeWPo1xcbiAgICBwYXJtcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFdiaUVuYyh7bWlkOm1pZH0pO1xcbiAgICBpbmZvTGluayA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS93YmkvYWNjL3JlbGF0aW9uPycgKyBwYXJtcztcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChpbmZvTGluaywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWVcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGFcXG59XFxuLy8g5p+l6K+i55uu5qCH55So5oi35omA5Zyo55qE5YiG57uEXFxuJC5leHBvcnRzLmdldFVzZXJHcm91cCA9IGZ1bmN0aW9uIChtaWQpIHtcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vdGFnL3VzZXI/ZmlkPVxcXCIgKyBtaWQsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YVxcbn1cXG4vLyDojrflj5blhbPms6jliIbnu4RcXG4kLmV4cG9ydHMuZ2V0TXlBdHRlbnRpb25Hcm91cExpc3QgPSBmdW5jdGlvbiAoKSB7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWdzP2pzb25wPWpzb25wXFxcIiwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLFxcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCJcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGE7XFxufVxcbi8vIOaYr+WQpueCuei1nlxcbiQuZXhwb3J0cy5oYXNMaWtlID0gZnVuY3Rpb24gKGFpZCkge1xcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvYXJjaGl2ZS9oYXMvbGlrZVxcXCIsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBhaWRcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YVxcbn1cXG4vLyDmmK/lkKbmlLbol49cXG4kLmV4cG9ydHMuaGFzRmF2b3VyID0gZnVuY3Rpb24gKGFpZCkge1xcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2Zhdi92aWRlby9mYXZvdXJlZFxcXCIsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBhaWRcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YS5mYXZvdXJlZFxcbn1cXG4vLyDop4bpopHngrnotZ5cXG4kLmV4cG9ydHMuc2V0TGlrZSA9IGZ1bmN0aW9uIChhaWQsIGRlYWxXYXkpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCByZXMgPSBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvYXJjaGl2ZS9saWtlXFxcIiwge1xcbiAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgIFxcXCJhaWRcXFwiOiBhaWQsXFxuICAgICAgICAgICAgXFxcImxpa2VcXFwiOiBkZWFsV2F5LFxcbiAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICAgICAgfSxcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmNvZGU7XFxufVxcbi8vIOiOt+WPluaUtuiXj+WIl+ihqFxcbiQuZXhwb3J0cy5nZXRDb2xsZWN0aW9uR3JvdXBMaXN0ID0gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gY29sbGVjdGlvbnMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2xpc3Q0bmF2aWdhdGVcXFwiLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUsXFxuICAgICAgICB9XFxuICAgIH0pKS5kYXRhO1xcbn1cXG4vLyDmlLbol48v5Y+W5raI6KeG6aKRQVBJXFxuJC5leHBvcnRzLnNldEZhdm91ciA9IGZ1bmN0aW9uIChhaWQsIGFkZF9tZWRpYV9pZHMsIGRlbF9tZWRpYV9pZHMpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCByZXMgPSBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS9tZWRpYWxpc3QvZ2F0ZXdheS9jb2xsL3Jlc291cmNlL2RlYWxcXFwiLCB7XFxuICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgXFxcInJpZFxcXCI6IGFpZCxcXG4gICAgICAgICAgICBcXFwidHlwZVxcXCI6IDIsXFxuICAgICAgICAgICAgXFxcImFkZF9tZWRpYV9pZHNcXFwiOiBhZGRfbWVkaWFfaWRzLnRvU3RyaW5nKCksXFxuICAgICAgICAgICAgXFxcImRlbF9tZWRpYV9pZHNcXFwiOiBkZWxfbWVkaWFfaWRzLnRvU3RyaW5nKCksXFxuICAgICAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmXFxuICAgICAgICB9LFxcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLFxcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXCJcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcbn1cXG4vLyDojrflj5bop4bpopHmiYDlnKjmlLbol4/lpLlcXG4kLmV4cG9ydHMuZ2V0RmF2b3VySWRMaXN0ID0gZnVuY3Rpb24gKGFpZCwgdXNlck1pZCkge1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2NyZWF0ZWQvbGlzdC1hbGxcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwidHlwZVxcXCI6IDIsXFxuICAgICAgICBcXFwicmlkXFxcIjogYWlkLFxcbiAgICAgICAgXFxcInVwX21pZFxcXCI6IHVzZXJNaWQsXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUsXFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZmF2b3VySWRMaXN0ID0gW107XFxuICAgIEpTT04ucGFyc2UocmVzKS5kYXRhLmxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgaWYgKGl0ZW0uZmF2X3N0YXRlID09IDEpIHtcXG4gICAgICAgICAgICBmYXZvdXJJZExpc3QucHVzaChpdGVtLmlkKTtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIGZhdm91cklkTGlzdDtcXG59XFxuLy8g54Ot5pig5Ymn6ZuG5pe26Ze06L20XFxuJC5leHBvcnRzLmdldE1vdmllcyA9IGZ1bmN0aW9uICh0eXBlLCBiZWZvcmUsIGFmdGVyKSB7XFxuICAgIGxldCB1ID0gYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy93ZWIvdGltZWxpbmVcXFwiLCB7XFxuICAgICAgICBcXFwidHlwZXNcXFwiOiB0eXBlLFxcbiAgICAgICAgXFxcImJlZm9yZVxcXCI6IGJlZm9yZSxcXG4gICAgICAgIFxcXCJhZnRlclxcXCI6IGFmdGVyXFxuICAgIH0pXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QodSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuICAgICAgICB9XFxuICAgIH0pKVxcbiAgICByZXR1cm4gcmVzLnJlc3VsdFxcbn1cXG4vLyDojrflj5bkuJPmoI/mlofnq6BcXG4kLmV4cG9ydHMuZ2V0VXNlckFydGljbGUgPSBmdW5jdGlvbiAodXBNaWQsIHBhZ2UpIHtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYXJ0aWNsZVxcXCI7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJtaWRcXFwiOiB1cE1pZCxcXG4gICAgICAgIFxcXCJwblxcXCI6IHBhZ2UsXFxuICAgICAgICBcXFwicHNcXFwiOiAxMixcXG4gICAgICAgIFxcXCJzb3J0XFxcIjogJ3B1Ymxpc2hfdGltZSdcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZSxcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb21cXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmRhdGE7XFxufVxcbi8vIOiOt+WPluWKqOaAgeaVsOaNrlxcbiQuZXhwb3J0cy5nZXREeW5hbWljRGF0YSA9IGZ1bmN0aW9uIChmcm9tLCB1cE1pZCkge1xcbiAgICB2YXIgbmV4dEluZm8gPSB7fTtcXG4gICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgaWYgKGZyb20gPT0gJ3VwU3BhY2UnKSB7XFxuICAgICAgICAgICAgdmFyIHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcG9seW1lci93ZWItZHluYW1pYy92MS9mZWVkL3NwYWNlP29mZnNldD0maG9zdF9taWQ9XFxcIiArIHVwTWlkICsgXFxcIiZ0aW1lem9uZV9vZmZzZXQ9LTQ4MFxcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9hbGw/dGltZXpvbmVfb2Zmc2V0PS00ODAmdHlwZT1hbGxcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGF0ZW5ld3MgPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLFxcbiAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgbmV4dEluZm8ub2Zmc2V0ID0gbGF0ZW5ld3Mub2Zmc2V0O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaWYgKGZyb20gPT0gJ3VwU3BhY2UnKSB7XFxuICAgICAgICAgICAgdmFyIHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcG9seW1lci93ZWItZHluYW1pYy92MS9mZWVkL3NwYWNlP29mZnNldD1cXFwiICsgc3RvcmFnZTAuZ2V0TXlWYXIoSlNPTi5zdHJpbmdpZnkoTVlfUEFHRSkpLm9mZnNldCArIFxcXCImaG9zdF9taWQ9XFxcIiArIHVwTWlkICsgXFxcIiZ0aW1lem9uZV9vZmZzZXQ9LTQ4MFxcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9hbGw/dGltZXpvbmVfb2Zmc2V0PS00ODAmdHlwZT1hbGwmb2Zmc2V0PVxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShNWV9QQUdFKSkub2Zmc2V0O1xcbiAgICAgICAgfVxcbiAgICAgICAgbGF0ZW5ld3MgPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICBuZXh0SW5mby5vZmZzZXQgPSBsYXRlbmV3cy5vZmZzZXQ7XFxuICAgIH1cXG4gICAgc3RvcmFnZTAucHV0TXlWYXIoSlNPTi5zdHJpbmdpZnkoTVlfUEFHRSArIDEpLCBuZXh0SW5mbyk7XFxuICAgIHJldHVybiBsYXRlbmV3cztcXG59XFxuXFxuLy8g4oCU4oCU54m55Yir55qE6KGM5Li644CB5bel5YW35Ye95pWw4oCU4oCUXFxuLy8g5bGV56S65Yqo5oCB5pWw5o2uKOi/lOWbnuWHveaVsOaWueazleeahOWPr+aJp+ihjOWtl+espuS4silcXG4kLmV4cG9ydHMuc2hvd0R5bmFtaWNEYXRhID0gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBpbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbiAgICAgICAgbGF0ZW5ld3MuaXRlbXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICBpZiAobGlzdC50eXBlID09ICdEWU5BTUlDX1RZUEVfQVYnKSB7XFxuICAgICAgICAgICAgICAgIC8vIOaKleeov+inhumike+8iOW9k+WJjeWPkeW4g++8ieKImlxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOic8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IucHViX3RpbWUgKyAnLScgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfYWN0aW9uICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3VwSG9tZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAvLyDkuI3kuIDlrprmnInmloflrZfllYpcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcbi9nLCAnPGJyPicpICsgJzxicj48YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vIOi/meS4quS4jeiDveeUqGxvbmdfdGV4dFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5iYXNpYy5jb21tZW50X2lkX3N0cixcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6JzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPueVmeiogDonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmNvbW1lbnQuY291bnQgKyAnXFxcXHRcXFxcdOWIhuS6qzonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmZvcndhcmQuY291bnQgKyAnXFxcXHRcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOmltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdC50eXBlID09ICdEWU5BTUlDX1RZUEVfRk9SV0FSRCcpIHtcXG4gICAgICAgICAgICAgICAgLy8g5byV55So77yM5aSa5Ye65LqGb3JpZ+aMh+WQkeS4gOS4qijov4fljrsp5bey5Y+R5biD55qE6KeG6aKRLOWHhuehrueahOivtOaYr+W8leeUqOS5i+WJjeeahOW4luWtkOS4jeS4gOWumuaYr+inhumikeKImlxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6JzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBIb21lJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcbi9nLCAnPGJyPicpICsgJzxicj48YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QuYmFzaWMuY29tbWVudF9pZF9zdHIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Lmf5piv57qv5paH5a2X77yM5Zug5Li65Y+q5piv5paH5a2XK+W8leeUqOaXqeW3suaKleeov+eahOinhumikVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDE3XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvLyDlvJXnlKjnmoTlhoXlrrnigJTigJTmiKrmlq3vvIjmoLnmja7kuI3lkIznmoTlvJXnlKjnsbvlnovov5vooYzlpITnkIbvvIlcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnPHNtYWxsPjxzbWFsbD7kuIvpnaLlhoXlrrnmnaXoh6rlvJXnlKjnmoTluJblrZAsdXDmmK86PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCI+JyArIGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSArICc8L2E+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKGxpc3Qub3JpZy50eXBlID09ICdEWU5BTUlDX1RZUEVfQVYnKSB7XFxuICAgICAgICAgICAgICAgICAgICAvLyDlvJXnlKjop4bpopHor7Tor7RcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0Lm9yaWcudHlwZSA9PSAnRFlOQU1JQ19UWVBFX1dPUkQnKSB7XFxuICAgICAgICAgICAgICAgICAgICAvLyDlvJXnlKjmloflrZfor7Tor7RcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQpLnJlcGxhY2UoL1xcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXCI+5p+l55yL6K+E6K66PC9hPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6K+E6K66aWTmnaXmupDpg73kuI3kuIDmoLdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3Qub3JpZy5pZF9zdHIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe6r+aWh+Wtl1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxN1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3Qub3JpZy50eXBlID09ICdEWU5BTUlDX1RZUEVfRFJBVycpIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIOW8leeUqOWbvueJh+ivtOivtFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuZHJhdy5pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmRyYXcuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uc3JjICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzNfc3F1YXJlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnNyYyArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+WPr+iDvei/mOacieacqumAgumFjeeahOivtOivtOexu+WeiycpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIOWIhuWJslxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPueVmeiogDonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmNvbW1lbnQuY291bnQgKyAnXFxcXHRcXFxcdOWIhuS6qzonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmZvcndhcmQuY291bnQgKyAnXFxcXHRcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOmltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdC50eXBlID09ICdEWU5BTUlDX1RZUEVfV09SRCcpIHtcXG4gICAgICAgICAgICAgICAgLy8g57qv5paH5a2XXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6JzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5mYWNlXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYyA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQpLnJlcGxhY2UoL1xcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXCI+5p+l55yL6K+E6K66PC9hPicsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5iYXNpYy5jb21tZW50X2lkX3N0cixcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnuq/mloflrZdcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxN1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+55WZ6KiAOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuY29tbWVudC5jb3VudCArICdcXFxcdFxcXFx05YiG5LqrOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuZm9yd2FyZC5jb3VudCArICdcXFxcdFxcXFx05Zac5qyiOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQubGlrZS5jb3VudCArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6aW1nTGluay7liqjmgIHotrPov7ksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9EUkFXJykge1xcbiAgICAgICAgICAgICAgICAvLyDlm77niYfor7Tor7RcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzonPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLnB1Yl90aW1lICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3VwSG9tZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmJhc2ljLmNvbW1lbnRfaWRfc3RyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOebuOewv++8iOWbvueJh+WKqOaAge+8iVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDExXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuZHJhdy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uc3JjICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfM19zcXVhcmUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbS5zcmMgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj7nlZnoqIA6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5jb21tZW50LmNvdW50ICsgJ1xcXFx0XFxcXHTliIbkuqs6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5mb3J3YXJkLmNvdW50ICsgJ1xcXFx0XFxcXHTllpzmrKI6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5saWtlLmNvdW50ICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzppbWdMaW5rLuWKqOaAgei2s+i/uSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSlcXG59XFxuLy8g5pe26Ze05pel5pyf6L2s5o2i5Ye95pWwXFxuJC5leHBvcnRzLnRpbWVDb252ZXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcXG4gICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShlLCB0KSB7XFxuICAgICAgICBlID0gbmV3IERhdGUoZSAqIDEwMDApOyAvL+aXtumXtOaIs+S4ujEw5L2N6ZyAKjEwMDDvvIzml7bpl7TmiLPkuLoxM+S9jeeahOivneS4jemcgOS5mDEwMDBcXG4gICAgICAgIHJldHVybiB0LnJlcGxhY2UoL3l5eXl8WVlZWS8sIGUuZ2V0RnVsbFllYXIoKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgveXl8WVkvLCByKGUuZ2V0RnVsbFllYXIoKSAlIDEwMCwgMikpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL21tfE1NLywgcihlLmdldE1vbnRoKCkgKyAxLCAyKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvbXxNL2csIGUuZ2V0TW9udGgoKSArIDEpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2RkfERELywgcihlLmdldERhdGUoKSwgMikpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2R8RC9nLCBlLmdldERhdGUoKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvaGh8SEgvLCByKGUuZ2V0SG91cnMoKSwgMikpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2h8SC9nLCBlLmdldEhvdXJzKCkpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2lpfElJLywgcihlLmdldE1pbnV0ZXMoKSwgMikpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2l8SS9nLCBlLmdldE1pbnV0ZXMoKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvc3N8U1MvLCByKGUuZ2V0U2Vjb25kcygpLCAyKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvc3xTL2csIGUuZ2V0U2Vjb25kcygpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC93L2csIGUuZ2V0RGF5KCkpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL1cvZywgW1xcXCLml6VcXFwiLCBcXFwi5LiAXFxcIiwgXFxcIuS6jFxcXCIsIFxcXCLkuIlcXFwiLCBcXFwi5ZubXFxcIiwgXFxcIuS6lFxcXCIsIFxcXCLlha1cXFwiXVtlLmdldERheSgpXSlcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiByKGUsIHQpIHtcXG4gICAgICAgIGZvciAodmFyIHIgPSAwLCBuID0gdCAtIChlICsgXFxcIlxcXCIpLmxlbmd0aDsgciA8IG47IHIrKykgZSA9IFxcXCIwXFxcIiArIGU7XFxuICAgICAgICByZXR1cm4gZSArIFxcXCJcXFwiXFxuICAgIH1cXG4gICAgcmV0dXJuIGZvcm1hdERhdGUodGltZSwgJ1lZWVktTU0tREQgaGg6aWk6c3MnKTtcXG4gICAgLy8gY29uc29sZS5sb2coZm9ybWF0RGF0ZSgxNjY0MDg5NTMyLCAnWVlZWS1NTS1ERCBoaDppaTpzcycpKTtcXG59XFxuLy8g56eS5pWw5YiG6ZKf6KGo6L6+6L2s5o2i5Ye95pWwXFxuJC5leHBvcnRzLmZvcm1hdFNlY29uZHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xcbiAgICBsZXQgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTsgLy8g6K6h566X5YiG6ZKf5pWwXFxuICAgIGxldCByZW1haW5pbmdTZWNvbmRzID0gc2Vjb25kcyAlIDYwOyAvLyDorqHnrpfliankvZnnmoTnp5LmlbBcXG4gICAgbGV0IGZvcm1hdHRlZFRpbWUgPSBgJHttaW51dGVzfToke1N0cmluZyhyZW1haW5pbmdTZWNvbmRzKS5wYWRTdGFydCgyLCAnMCcpfWA7XFxuICAgIHJldHVybiBmb3JtYXR0ZWRUaW1lO1xcbn1cXG5cXG4vLyBC56uZV2Jp562+5ZCN566X5rOVKEFmdGVyIDIwMjMtMyxnZXQgcmVxdWVzdCB3aXRoIHdiaS4pXFxuJC5leHBvcnRzLmdldFdiaUVuYyA9IGZ1bmN0aW9uIChxdWVyeUpzb24pIHtcXG4gICAgY29uc3QgbWl4aW5LZXlFbmNUYWIgPSBbXFxuICAgICAgICA0NiwgNDcsIDE4LCAyLCA1MywgOCwgMjMsIDMyLCAxNSwgNTAsIDEwLCAzMSwgNTgsIDMsIDQ1LCAzNSwgMjcsIDQzLCA1LCA0OSxcXG4gICAgICAgIDMzLCA5LCA0MiwgMTksIDI5LCAyOCwgMTQsIDM5LCAxMiwgMzgsIDQxLCAxMywgMzcsIDQ4LCA3LCAxNiwgMjQsIDU1LCA0MCxcXG4gICAgICAgIDYxLCAyNiwgMTcsIDAsIDEsIDYwLCA1MSwgMzAsIDQsIDIyLCAyNSwgNTQsIDIxLCA1NiwgNTksIDYsIDYzLCA1NywgNjIsIDExLFxcbiAgICAgICAgMzYsIDIwLCAzNCwgNDQsIDUyXFxuICAgIF07XFxuXFxuICAgIC8vIOWvuSBpbWdLZXkg5ZKMIHN1YktleSDov5vooYzlrZfnrKbpobrluo/miZPkubHnvJbnoIFcXG4gICAgZnVuY3Rpb24gZ2V0TWl4aW5LZXkob3JpZykge1xcbiAgICAgICAgbGV0IHRlbXAgPSAnJztcXG4gICAgICAgIG1peGluS2V5RW5jVGFiLmZvckVhY2goKG4pID0+IHtcXG4gICAgICAgICAgICB0ZW1wICs9IG9yaWdbbl1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIHRlbXAuc2xpY2UoMCwgMzIpO1xcbiAgICB9XFxuXFxuICAgIC8vIOS4uuivt+axguWPguaVsOi/m+ihjCB3Ymkg562+5ZCNXFxuICAgIGZ1bmN0aW9uIGVuY1diaShwYXJhbXMsIGltZ19rZXksIHN1Yl9rZXkpIHtcXG4gICAgICAgIGNvbnN0IG1peGluX2tleSA9IGdldE1peGluS2V5KGltZ19rZXkgKyBzdWJfa2V5KSxcXG4gICAgICAgICAgICBjdXJyX3RpbWUgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSxcXG4gICAgICAgICAgICBjaHJfZmlsdGVyID0gL1shJ1xcXFwoXFxcXCkqXS9nXFxuICAgICAgICBsZXQgcXVlcnkgPSBbXTtcXG4gICAgICAgIHBhcmFtcyA9IE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7IHd0czogY3Vycl90aW1lIH0pOyAgICAvLyDmt7vliqAgd3RzIOWtl+autVxcbiAgICAgICAgLy8g5oyJ54WnIGtleSDph43mjpLlj4LmlbBcXG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcykuc29ydCgpLmZvckVhY2goKGtleSkgPT4ge1xcbiAgICAgICAgICAgIHF1ZXJ5LnB1c2goXFxuICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICtcXG4gICAgICAgICAgICAgICAgJz0nICtcXG4gICAgICAgICAgICAgICAgLy8g6L+H5rukIHZhbHVlIOS4reeahCBcXFwiIScoKSpcXFwiIOWtl+esplxcbiAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoKCcnICsgcGFyYW1zW2tleV0pLnJlcGxhY2UoY2hyX2ZpbHRlciwgJycpKVxcbiAgICAgICAgICAgIClcXG4gICAgICAgIH0pXFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LmpvaW4oJyYnKTtcXG4gICAgICAgIGNvbnN0IHdiaV9zaWduID0gbWQ1KHF1ZXJ5ICsgbWl4aW5fa2V5KTsgLy8g6K6h566XIHdfcmlkXFxuICAgICAgICByZXR1cm4gcXVlcnkgKyAnJndfcmlkPScgKyB3Ymlfc2lnbjtcXG4gICAgfVxcblxcbiAgICAvLyDojrflj5bmnIDmlrDnmoQgaW1nX2tleSDlkowgc3ViX2tleVxcbiAgICBmdW5jdGlvbiBnZXRXYmlLZXlzKCkge1xcbiAgICAgICAgY29uc3QganNvbl9jb250ZW50ID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXYnLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJ1xcbiAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICBpbWdfdXJsID0ganNvbl9jb250ZW50LndiaV9pbWcuaW1nX3VybDtcXG4gICAgICAgIHN1Yl91cmwgPSBqc29uX2NvbnRlbnQud2JpX2ltZy5zdWJfdXJsO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICBpbWdfa2V5OiBpbWdfdXJsLnN1YnN0cmluZyhpbWdfdXJsLmxhc3RJbmRleE9mKCcvJykgKyAxLCBpbWdfdXJsLmxlbmd0aCkuc3BsaXQoJy4nKVswXSxcXG4gICAgICAgICAgICBzdWJfa2V5OiBzdWJfdXJsLnN1YnN0cmluZyhzdWJfdXJsLmxhc3RJbmRleE9mKCcvJykgKyAxLCBzdWJfdXJsLmxlbmd0aCkuc3BsaXQoJy4nKVswXVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGNvbnN0IHdiaV9rZXlzID0gZ2V0V2JpS2V5cygpO1xcblxcbiAgICBjb25zdCBxdWVyeSA9IGVuY1diaShcXG4gICAgICAgIHF1ZXJ5SnNvbixcXG4gICAgICAgIHdiaV9rZXlzLmltZ19rZXksXFxuICAgICAgICB3Ymlfa2V5cy5zdWJfa2V5XFxuICAgICk7XFxuICAgIHJldHVybiBxdWVyeTtcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ2aWRlb1BhZ2VcIixcInBhdGhcIjpcInZpZGVvXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbi8vIOmihOWkhOeQhlxcbnB1dE15VmFyKCflip/og73mipjlj6AnLCAn5YWzJyk7XFxuaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXG5haWQgPSBNWV9QQVJBTVMuYWlkICsgXFxcIlxcXCI7XFxuLy8gYnZpZCA9IE1ZX1BBUkFNUy5idmlkICsgXFxcIlxcXCI7XFxubWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXCJcXFwiO1xcbnZhciB7Zm9ybWF0U2Vjb25kc309JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIik7XFxudHJ5IHtcXG4gICAgLy/ojrflj5bop4bpopHliIZQ5L+h5oGvXFxuICAgIHZhciBwID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgYWlkKSkuZGF0YTtcXG4gICAgaGFzTGlrZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmhhc0xpa2UoYWlkKTtcXG4gICAgaGFzRmF2b3VyID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuaGFzRmF2b3VyKGFpZCk7XFxuICAgIHNldFBhZ2VUaXRsZShwLnRpdGxlKTtcXG4gICAgc2V0UGFnZVBpY1VybChwLnBpYyArICdAUmVmZXJlcj0nKTtcXG4gICAgLy8g5Y+q5pyJMVDnmoTmg4XlhrVcXG4gICAgaWYgKHAucGFnZXMubGVuZ3RoID09IDEpIHtcXG4gICAgICAgIGNpZCA9IHAucGFnZXNbMF0uY2lkO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IHAucGljICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFpZCwgY2lkLCBxbikgPT4ge1xcbiAgICAgICAgICAgICAgICAvLyDnnJ/nprvkuobkuKrlpKfosLHvvIzmmI7mmI7mm7/mjaLmjonkuobvvIx1YeWtl+espuS4suWPiOWPmOWbnuadpeS6hu+8jOWPiOimgeWkhOeQhuS4gOasoVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICB9LCBhaWQgKyBcXFwiXFxcIiwgY2lkICsgXFxcIlxcXCIsICcxMTInKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICBkZXNjOifmkq3mlL7ph486JytwLnN0YXQudmlldysnXFxcXHRcXFxcdFxcXFx05by55bmV5pWwOicrcC5zdGF0LmRhbm1ha3UrJ1xcXFxu5Y+R5biD5pel5pyfOicrJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQocC5jdGltZSksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6J2FpZC0nK2FpZCsnfGNpZC0nK2NpZCxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nI25vSGlzdG9yeSM/cnVsZT1kbeebkuWtkCc7XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W8ueW5leaOp+WIticsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKSA9PSAndHJ1ZScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuS4jeWPl2Rt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIblj5fliLBkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiYmx1ZVxcXCI+JyArIHAub3duZXIubmFtZSArICc8L2ZvbnQ+JyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcIixcXG4gICAgICAgICAgICBpbWc6IHAub3duZXIuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBtaWQ6IHAub3duZXIubWlkLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5vd25lci5uYW1lLFxcbiAgICAgICAgICAgICAgICBmYWNlOiBwLm93bmVyLmZhY2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vIOiZveeEtuWPquaciTFQLOS9huWPr+iDveWkhOS6juWQiOmbhuinhumikeS4re+8jOW+gOW+gOWcqHVw5LiK5Lyg5Lit5bGe5LqO5LiA5aWX5b2x54mHXFxuICAgICAgICBpZiAocC51Z2Nfc2Vhc29uKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OB5omA5bGe5ZCI6ZuG77yaPGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL2NvbGxlY3Rpb25WaWVkb1xcXCI+JytwLnVnY19zZWFzb24udGl0bGUrJzwvYT4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvY29sbGVjdGlvblZpZWRvI25vSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7IFxcXCJ0ZXh0U2l6ZVxcXCI6IDEyLCBhaWQ6IGFpZCB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQubGlrZSxcXG4gICAgICAgICAgICBpbWc6IGhhc0xpa2UgPT0gMSA/IGltZ0xpbmsu5bey54K56LWeIDogaW1nTGluay7mnKrngrnotZ4sXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubGlrZUxvZ2ljKGFpZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3NldExpa2UnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQuZmF2b3JpdGUsXFxuICAgICAgICAgICAgaW1nOiBoYXNGYXZvdXIgPyBpbWdMaW5rLuW3suaUtuiXjyA6IGltZ0xpbmsu5pyq5pS26JePLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgdXBNaWQgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlck1pZDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmZhdm91ckxvZ2ljKGFpZCwgdXBNaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRGYXZvdXInXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn56iN5ZCO5YaN55yLJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu56iN5ZCO5YaN55yLLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmp1ZGdlVG92aWV3KGFpZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+ivhOiuuicsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5p+l55yL6K+E6K66LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiBhaWQsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IHAuZGVzYyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxvbmdfdGV4dFxcXCIsXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOWtmOWcqOWkmumbhuWIhlBcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHAudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBwLnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgIGRlc2M6J+aSreaUvumHjzonK3Auc3RhdC52aWV3KydcXFxcdFxcXFx0XFxcXHTlvLnluZXmlbA6JytwLnN0YXQuZGFubWFrdSsnXFxcXG7lj5HluIPml6XmnJ86JyskLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS50aW1lQ29udmVydChwLmN0aW1lKSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgocCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9meXBhZ2UnKS5ydWxlKChwKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwLmRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgfSwgcClcXG4gICAgICAgICAgICB9LCBwKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ2Rt55uS5a2QJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmcjbm9IaXN0b3J5Iz9ydWxlPWRt55uS5a2QJztcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5by55bmV5o6n5Yi2JywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5LiN5Y+XZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuWPl+WIsGRt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCJibHVlXFxcIj4nICsgcC5vd25lci5uYW1lICsgJzwvZm9udD4nLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFwiLFxcbiAgICAgICAgICAgIGltZzogcC5vd25lci5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIG1pZDogcC5vd25lci5taWQsXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwLm93bmVyLm5hbWUsXFxuICAgICAgICAgICAgICAgIGZhY2U6IHAub3duZXIuZmFjZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IHAuc3RhdC5saWtlLFxcbiAgICAgICAgICAgIGltZzogaGFzTGlrZSA9PSAxID8gaW1nTGluay7lt7LngrnotZ4gOiBpbWdMaW5rLuacqueCuei1nixcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5saWtlTG9naWMoYWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnc2V0TGlrZSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IHAuc3RhdC5mYXZvcml0ZSxcXG4gICAgICAgICAgICBpbWc6IGhhc0Zhdm91ciA/IGltZ0xpbmsu5bey5pS26JePIDogaW1nTGluay7mnKrmlLbol48sXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICB1cE1pZCA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTWlkO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZmF2b3VyTG9naWMoYWlkLCB1cE1pZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3NldEZhdm91cidcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfnqI3lkI7lho3nnIsnLFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7nqI3lkI7lho3nnIssXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuanVkZ2VUb3ZpZXcoYWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL6K+E6K66JyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7mn6XnnIvor4TorrosXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IGFpZCxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiAxXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn6YCJ6ZuG5YiX6KGoJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICBkZXNjOic8c21hbGw+PHNtYWxsPuWFsScgKyBwLnZpZGVvcyArICfmnaHop4bpopE8L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5YiX6KGoLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9KTtcXG4gICAgICAgIHAucGFnZXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBjaWQgPSBpdGVtLmNpZDtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5wYXJ0LFxcbiAgICAgICAgICAgICAgICBkZXNjOmZvcm1hdFNlY29uZHMoaXRlbS5kdXJhdGlvbiksXFxuICAgICAgICAgICAgICAgIC8vIGltZzppbWdMaW5rLuWIhlDliJfooajpobksXFxuICAgICAgICAgICAgICAgIGltZzppdGVtLmZpcnN0X2ZyYW1lKydAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoYWlkLCBjaWQsIHFuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICAgICAgfSwgYWlkICsgXFxcIlxcXCIsIGNpZCArIFxcXCJcXFwiLCAnMTE2JyksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6J2FpZC0nK2FpZCsnfGNpZC0nK2NpZCxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+mhtemdoui1sOS4ouS6hi4uLicsXFxuICAgICAgICBpbWc6ICdodHRwczovL2kwLmhkc2xiLmNvbS9iZnMvZ2VuZXJhbC9mN2I2NjcwMTFhNDY2MTU3MzJjNzAxZjRiYjFkMDdmNzkzZjhkMWRmLnBuZ0BSZWZlcmVyPScsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGRlc2M6ICflpKfmpoLnjofop4bpopHooqvlsIHnpoHvvIzmiJbogIV1cOW3sui3kei3r34nLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCJcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcImxvbmdfdGV4dFwiLFwibmFtZVwiOlwi6K+E6K66XCIsXCJwYXRoXCI6XCJDb21tZW50c1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG52YXIgaWQgPSBNWV9QQVJBTVMuaWQ7XFxudmFyIHR5cGUgPSBNWV9QQVJBTVMudHlwZTtcXG5sb2coaWQpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgLy8g6LKM5Ly85pqC5pe25Y+q6IO95paH5a2XK+aVsOWtl1xcbiAgICBkLnVuc2hpZnQoe1xcbiAgICAgICAgdGl0bGU6IFxcXCLlj5HmnaHor4TorrrlkKdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKGlkLHR5cGUpID0+IHtcXG4gICAgICAgICAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICAgICAgICAgIHBvc3QoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvcmVwbHkvYWRkXFxcIiwge1xcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IHR5cGUsXFxuICAgICAgICAgICAgICAgICAgICBcXFwib2lkXFxcIjogaWQsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmYsXFxuICAgICAgICAgICAgICAgICAgICBcXFwibWVzc2FnZVxcXCI6IGlucHV0XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIH0sIGlkLHR5cGUpXFxuICAgIH0pXFxufVxcbmxldCBkYXRhID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0Q29tbWVudHMoaWQsdHlwZSxNWV9QQUdFKTtcXG4vLyBsb2coZGF0YSk7XFxuaWYoZGF0YSl7XFxuICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubWVtYmVyLnVuYW1lLFxcbiAgICAgICAgICAgIGltZzogaXRlbS5tZW1iZXIuYXZhdGFyKydAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9wYWdlL3VwSG9tZScsXFxuICAgICAgICAgICAgZGVzYzonPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JytpdGVtLnJlcGx5X2NvbnRyb2wubG9jYXRpb24gKyBcXFwiIFxcXCIgKyBpdGVtLnJlcGx5X2NvbnRyb2wudGltZV9kZXNjKyc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIG1pZDogaXRlbS5tZW1iZXIubWlkLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5tZW1iZXIudW5hbWUsXFxuICAgICAgICAgICAgICAgIGZhY2U6IGl0ZW0ubWVtYmVyLmF2YXRhclxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLmNvbnRlbnQubWVzc2FnZSxcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufWVsc2V7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WlveWDj+ayoeacieivhOiuuuS6huWVpu+8jO+8gScsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZCk7XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLorqLpmIXliJfooahcIixcInBhdGhcIjpcInN1YnNjcmlwdGlvblwiLFwicnVsZVwiOlwiaWYgKGdldEl0ZW0oJ+iuoumYheexu+WeiycsICcxJykgPT0gJzEnKSB7XFxuXFxuwqAgwqAgdHlwZXJOYW1lID0gJ+i/veeVqic7XFxuXFxufSBlbHNlIHtcXG5cXG7CoCDCoCB0eXBlck5hbWUgPSAn6L+95YmnJztcXG5cXG59XFxuXFxuZC5wdXNoKHtcXG5cXG7CoCDCoCB0aXRsZTogJ+i/veeVqicgPT0gdHlwZXJOYW1lID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXCJyZWRcXFwiPui/veeVqjwvZm9udD4nIDogJ+i/veeVqicsXFxuXFxuwqAgwqAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcbsKgIMKgIMKgIMKgIHNldEl0ZW0oJ+iuoumYheexu+WeiycsICcxJylcXG5cXG7CoCDCoCDCoCDCoCByZWZyZXNoUGFnZSh0cnVlKTtcXG5cXG7CoCDCoCDCoCDCoCByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcblxcbsKgIMKgIH0pLFxcblxcbsKgIMKgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG5cXG59LHtcXG5cXG7CoCDCoCB0aXRsZTogJ+i/veWJpycgPT0gdHlwZXJOYW1lID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXCJyZWRcXFwiPui/veWJpzwvZm9udD4nIDogJ+i/veWJpycsXFxuXFxuwqAgwqAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcbsKgIMKgIMKgIMKgIHNldEl0ZW0oJ+iuoumYheexu+WeiycsICcyJylcXG5cXG7CoCDCoCDCoCDCoCByZWZyZXNoUGFnZSh0cnVlKTtcXG5cXG7CoCDCoCDCoCDCoCByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcblxcbsKgIMKgIH0pLFxcblxcbsKgIMKgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG5cXG59KTtcXG5cXG5zdWJzY3JpcHRpb25zID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYmFuZ3VtaS9mb2xsb3cvbGlzdD90eXBlPVxcXCIgKyBnZXRJdGVtKCforqLpmIXnsbvlnosnLCAnMScpICsgXFxcIiZmb2xsb3dfc3RhdHVzPTAmcG49XFxcIiArIHBhZ2UgKyBcXFwiJnBzPTE1JnZtaWQ9XFxcIiArIG1pZCwge1xcblxcbsKgIMKgIGhlYWRlcnM6IHtcXG5cXG7CoCDCoCDCoCDCoCBcXFwiQ29va2llXFxcIjogY29va2llXFxuXFxuwqAgwqAgfVxcblxcbn0pKS5kYXRhO1xcblxcbmlmIChwYWdlID09IDEpIHtcXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIHRpdGxlOiBcXFwi5b2T5YmNXFxcIiArIHR5cGVyTmFtZSArIFxcXCLmlbDph486XFxcIiArIHN1YnNjcmlwdGlvbnMudG90YWwsXFxuXFxuwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcblxcbsKgIMKgIH0pXFxuXFxufVxcblxcbnN1YnNjcmlwdGlvbnMubGlzdC5mb3JFYWNoKGxpc3QgPT4ge1xcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3QudGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2ZpbG1lcmppI2ltbWVyc2l2ZVRoZW1lI1xcXCIsXFxuXFxuwqAgwqAgwqAgwqAgZGVzYzogbGlzdC5ldmFsdWF0ZS5zdWJzdHJpbmcoMCwgMTIpICsgJ+KAmOKAmOKAmeKAmeKApjxmb250IGNvbG9yPVxcXCIjMUMxQzFDXFxcIj7or6bmg4U8L2ZvbnQ+JyArICdcXFxcbicgKyBsaXN0LnNlYXNvbl90eXBlX25hbWUgKyAnfCcgKyAobGlzdC5hcmVhcz09PXVuZGVmaW5lZD8nJzpsaXN0LmFyZWFzWzBdLm5hbWUgKyAnXFxcXG4nKSArIChsaXN0LnByb2dyZXNzID09ICcnID8gJ+WwmuacquingueciycgOiBsaXN0LnByb2dyZXNzKSArIChsaXN0Lm5ld19lcC5pbmRleF9zaG93PT09dW5kZWZpbmVkPycnOid8JysobGlzdC5uZXdfZXAuaW5kZXhfc2hvdy5tYXRjaCgv5pu05pawfOWNs+Wwhi8pID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXCJyZWRcXFwiPicgKyBsaXN0Lm5ld19lcC5pbmRleF9zaG93ICsgJzwvZm9udD4nOiBsaXN0Lm5ld19lcC5pbmRleF9zaG93KSksXFxuXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBzZWFzb25faWQ6IGxpc3Quc2Vhc29uX2lkXFxuXFxuwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIH0pO1xcblxcbn0pO1xcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YWz5rOo5YiX6KGoXCIsXCJwYXRoXCI6XCJhdHRlbnRpb25cIixcInJ1bGVcIjpcImlmIChNWV9QQUdFID09IDEpIHtcXG5cXG7CoCDCoCBmb2N1c0dyb3Vwcz0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRNeUF0dGVudGlvbkdyb3VwTGlzdCgpO1xcblxcbsKgIMKgIHB1dE15VmFyKCd0ZW1wSWQnLCBKU09OLnN0cmluZ2lmeShmb2N1c0dyb3Vwc1sxXS50YWdpZCkpO1xcblxcbsKgIMKgIGZvY3VzR3JvdXBzLmZvckVhY2gobGlzdCA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC50YWdpZCA9PSBnZXRJdGVtKCflhbPms6jliIbnu4QnLCBKU09OLnN0cmluZ2lmeShmb2N1c0dyb3Vwc1sxXS5pZCkpID8gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdyZWQnPlxcXCIgKyBsaXN0Lm5hbWUgKyBsaXN0LmNvdW50ICsgXFxcIjwvZm9udD5cXFwiIDogbGlzdC5uYW1lICsgbGlzdC5jb3VudCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgobGlzdCkgPT4ge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNldEl0ZW0oJ+WFs+azqOWIhue7hCcsIEpTT04uc3RyaW5naWZ5KGxpc3QudGFnaWQpKTtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSh0cnVlKTtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gXFxcInRvYXN0Oi8v5YiH5o2i5YWz5rOo5YiG57uE5Li6OlxcXCIgKyBsaXN0Lm5hbWU7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgbGlzdCksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCB9KTtcXG5cXG7CoCDCoCAvLyDmnKvlsL7ooaXlhYXmgoTmgoTlhbPms6jliIbnu4RcXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIHRpdGxlOiAn5oKE5oKE5YWz5rOoJyA9PSBnZXRJdGVtKCflhbPms6jliIbnu4QnLCBKU09OLnN0cmluZ2lmeShmb2N1c0dyb3Vwc1swXS5pZCkpID8gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdyZWQnPuaChOaChOWFs+azqDwvZm9udD5cXFwiIDogXFxcIuaChOaChOWFs+azqFxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHNldEl0ZW0oJ+WFs+azqOWIhue7hCcsIFxcXCLmgoTmgoTlhbPms6hcXFwiKTtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSh0cnVlKTtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gXFxcInRvYXN0Oi8v5YiH5o2i5YWz5rOo5YiG57uE5Li6OlxcXCIgKyBcXFwi5oKE5oKE5YWz5rOoXFxcIjtcXG5cXG7CoCDCoCDCoCDCoCB9KSxcXG5cXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcblxcbsKgIMKgIH0se1xcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbGluZSdcXG5cXG7CoCDCoCB9KTtcXG5cXG59XFxuXFxuaWYgKGdldEl0ZW0oJ+WFs+azqOWIhue7hCcpPT0n5oKE5oKE5YWz5rOoJykge1xcblxcbsKgIMKgIGdyb3VwQ29udGVudCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3doaXNwZXJzP3BuPVxcXCIrcGFnZStcXFwiJnBzPTIwJmpzb25wPWpzb25wXFxcIiwge1xcblxcbsKgIMKgIMKgIMKgIGhlYWRlcnM6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFwiQ29va2llXFxcIjogY29va2llXFxuXFxuwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIH0pKS5kYXRhLmxpc3Q7XFxuXFxuwqAgwqAgZ3JvdXBDb250ZW50LmZvckVhY2gobGlzdCA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogXFxcIjxiaWc+PGZvbnQgY29sb3I9J2JsdWUnPlxcXCIgKyBsaXN0LnVuYW1lICsgXFxcIjwvZm9udD48L2JpZz48c21hbGw+XFxcIiArIGxpc3Quc2lnbiArIFxcXCI8L3NtYWxsPlxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ2F2YXRhcicsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBtaWQ6IGxpc3QubWlkLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnVuYW1lLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGZhY2U6IGxpc3QuZmFjZVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCB9KTtcXG5cXG59ZWxzZXtcXG5cXG7CoCDCoCBncm91cENvbnRlbnQgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWc/bWlkPVxcXCIgKyBtaWQgKyBcXFwiJnRhZ2lkPVxcXCIgKyBnZXRJdGVtKCflhbPms6jliIbnu4QnLCBnZXRNeVZhcigndGVtcElkJykpICsgXFxcIiZwbj1cXFwiICsgcGFnZSArIFxcXCImcHM9MjAmanNvbnA9anNvbnBcXFwiLCB7XFxuXFxuwqAgwqAgwqAgwqAgaGVhZGVyczoge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG5cXG7CoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgfSkpLmRhdGE7XFxuXFxuwqAgwqAgZ3JvdXBDb250ZW50LmZvckVhY2gobGlzdCA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogXFxcIjxiaWc+PGZvbnQgY29sb3I9J2JsdWUnPlxcXCIgKyBsaXN0LnVuYW1lICsgXFxcIjwvZm9udD48L2JpZz48c21hbGw+XFxcIiArIGxpc3Quc2lnbiArIFxcXCI8L3NtYWxsPlxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ2F2YXRhcicsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBtaWQ6IGxpc3QubWlkLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnVuYW1lLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGZhY2U6IGxpc3QuZmFjZVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCB9KTtcXG5cXG59XFxuXFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlLbol4/liJfooahcIixcInBhdGhcIjpcImNvbGVjdGlvblwiLFwicnVsZVwiOlwiaWYgKHBhZ2UgPT0gMSkge1xcclxcbiAgICBkLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6ICfmiJHliJvlu7rnmoTmlLbol4/lpLknID09IGdldEl0ZW0oJ+aUtuiXj+exu+WeiycsICfmiJHliJvlu7rnmoTmlLbol4/lpLknKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7miJHliJvlu7rnmoTmlLbol4/lpLk8L2ZvbnQ+JyA6ICfmiJHliJvlu7rnmoTmlLbol4/lpLknLFxcclxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcclxcbiAgICAgICAgICAgIHNldEl0ZW0oJ+aUtuiXj+exu+WeiycsICfmiJHliJvlu7rnmoTmlLbol4/lpLknKVxcclxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcclxcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxyXFxuICAgICAgICB9KSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXHJcXG4gICAgfSwge1xcclxcbiAgICAgICAgdGl0bGU6ICfnqI3lkI7lnKjnnIsnID09IGdldEl0ZW0oJ+aUtuiXj+exu+WeiycsICfmiJHliJvlu7rnmoTmlLbol4/lpLknKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7nqI3lkI7lnKjnnIs8L2ZvbnQ+JyA6ICfnqI3lkI7lnKjnnIsnLFxcclxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcclxcbiAgICAgICAgICAgIHNldEl0ZW0oJ+aUtuiXj+exu+WeiycsICfnqI3lkI7lnKjnnIsnKVxcclxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcclxcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxyXFxuICAgICAgICB9KSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXHJcXG4gICAgfSk7XFxyXFxufVxcclxcbmlmIChnZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn5oiR5Yib5bu655qE5pS26JeP5aS5JykgPT0gJ+aIkeWIm+W7uueahOaUtuiXj+WkuScpIHtcXHJcXG4gICAgdHJ5IHtcXHJcXG4gICAgICAgIGlmIChwYWdlID09IDEpIHtcXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICAvLyBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxyXFxuICAgICAgICAgICAgfSwgKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIGNvbGxlY3Rpb25zID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjMvZmF2L2ZvbGRlci9saXN0NG5hdmlnYXRlXFxcIiwge1xcclxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXHJcXG4gICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH0pKS5kYXRhO1xcclxcbiAgICAgICAgZ3JvdXBzID0gY29sbGVjdGlvbnNbMF0ubWVkaWFMaXN0UmVzcG9uc2UubGlzdDtcXHJcXG4gICAgICAgIHB1dE15VmFyKCd0ZW1wSWQnLCBKU09OLnN0cmluZ2lmeShncm91cHNbMF0uaWQpKTtcXHJcXG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGxpc3QgPT4ge1xcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmlkID09IGdldEl0ZW0oJ+aUtuiXj+WkuScsIEpTT04uc3RyaW5naWZ5KGdyb3Vwc1swXS5pZCkpID8gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdyZWQnPlxcXCIgKyBsaXN0LnRpdGxlICsgXFxcIjwvZm9udD5cXFwiIDogbGlzdC50aXRsZSxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGxpc3QpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ+aUtuiXj+WkuScsIEpTT04uc3RyaW5naWZ5KGxpc3QuaWQpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouaUtuiXj+WkueS4ujpcXFwiICsgbGlzdC50aXRsZTtcXHJcXG4gICAgICAgICAgICAgICAgfSwgbGlzdCksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgfSk7XFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcclxcbiAgICAgICAgfSk7XFxyXFxuICAgICAgICBncm91cENvbnRlbnQgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvcmVzb3VyY2UvbGlzdD9tZWRpYV9pZD1cXFwiICsgZ2V0SXRlbSgn5pS26JeP5aS5JywgZ2V0TXlWYXIoJ3RlbXBJZCcpKSArIFxcXCImcG49XFxcIiArIHBhZ2UgKyBcXFwiJnBzPTIwJmtleXdvcmQ9Jm9yZGVyPW10aW1lJnR5cGU9MCZ0aWQ9MCZwbGF0Zm9ybT13ZWImanNvbnA9anNvbnBcXFwiLCB7XFxyXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcclxcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgfSkpLmRhdGEubWVkaWFzO1xcclxcbiAgICAgICAgZ3JvdXBDb250ZW50LmZvckVhY2gobGlzdCA9PiB7XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxyXFxuICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcclxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcclxcbiAgICAgICAgICAgICAgICBkZXNjOiAnVVA6JyArIGxpc3QudXBwZXIubmFtZSArICdcXFxcbicgKyBsaXN0LmludHJvLFxcclxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmlkLFxcclxcbiAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0LnVwcGVyLm1pZFxcclxcbiAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgfSk7XFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgfSBjYXRjaCAoZSkge1xcclxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+WFhOW8n++8jOS9oOehruiupOS9oOacieaUtuiXj+WQl++8jOW/q+WOu+aUtuiXj+S4gOS4quinhumikX4nKTtcXHJcXG4gICAgfVxcclxcbn0gZWxzZSB7XFxyXFxuICAgIGxhdGVyVmlld3MgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9oaXN0b3J5L3Rvdmlldy93ZWI/anNvbnA9anNvbnBcXFwiLCB7XFxyXFxuICAgICAgICBoZWFkZXJzOiB7XFxyXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcclxcbiAgICAgICAgfVxcclxcbiAgICB9KSkuZGF0YTtcXHJcXG4gICAgY291bnQgPSBsYXRlclZpZXdzLmNvdW50O1xcclxcbiAgICBkLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IFxcXCLlhbHmnIlcXFwiICsgY291bnQgKyBcXFwi5p2h5b6F55yL6KeG6aKR6K6w5b2VXFxcIixcXHJcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcclxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcclxcbiAgICB9KTtcXHJcXG4gICAgbGF0ZXJWaWV3cy5saXN0LmZvckVhY2gobGlzdCA9PiB7XFxyXFxuICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcclxcbiAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyBcXFwiQFJlZmVyZXI9XFxcIixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcclxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIsXFxyXFxuICAgICAgICAgICAgZGVzYzogJ1VQOicgKyBsaXN0Lm93bmVyLm5hbWUgKyAnXFxcXG4nICsgbGlzdC5kZXNjLFxcclxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxyXFxuICAgICAgICAgICAgICAgIG1pZDogbGlzdC5vd25lci5taWRcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgfSk7XFxyXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Laz6L+5XCIsXCJwYXRoXCI6XCJ0cmFja1wiLFwicnVsZVwiOlwidmFyIG5leHRJbmZvID0ge307XFxuXFxuaWYgKHBhZ2UgPT0gMSkge1xcblxcbsKgIMKgIGhpc3RvcmllcyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvaGlzdG9yeS9jdXJzb3I/bWF4PTAmdmlld19hdD0wJmJ1c2luZXNzPVxcXCIsIHtcXG5cXG7CoCDCoCDCoCDCoCBoZWFkZXJzOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KSkuZGF0YTtcXG5cXG7CoCDCoCBuZXh0SW5mby5tYXggPSBoaXN0b3JpZXMuY3Vyc29yLm1heDtcXG5cXG7CoCDCoCBuZXh0SW5mby52aWV3X2F0ID0gaGlzdG9yaWVzLmN1cnNvci52aWV3X2F0O1xcblxcbsKgIMKgIG5leHRJbmZvLmJ1c2luZXNzID0gaGlzdG9yaWVzLmN1cnNvci5idXNpbmVzcztcXG5cXG59IGVsc2Uge1xcblxcbsKgIMKgIGhpc3RvcmllcyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvaGlzdG9yeS9jdXJzb3I/bWF4PVxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShwYWdlKSkubWF4ICsgXFxcIiZ2aWV3X2F0PVxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShwYWdlKSkudmlld19hdCArIFxcXCImYnVzaW5lc3M9XFxcIiArIHN0b3JhZ2UwLmdldE15VmFyKEpTT04uc3RyaW5naWZ5KHBhZ2UpKS5idXNpbmVzcywge1xcblxcbsKgIMKgIMKgIMKgIGhlYWRlcnM6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFwiQ29va2llXFxcIjogY29va2llXFxuXFxuwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIH0pKS5kYXRhO1xcblxcbsKgIMKgIG5leHRJbmZvLm1heCA9IGhpc3Rvcmllcy5jdXJzb3IubWF4O1xcblxcbsKgIMKgIG5leHRJbmZvLnZpZXdfYXQgPSBoaXN0b3JpZXMuY3Vyc29yLnZpZXdfYXQ7XFxuXFxuwqAgwqAgbmV4dEluZm8uYnVzaW5lc3MgPSBoaXN0b3JpZXMuY3Vyc29yLmJ1c2luZXNzO1xcblxcbn1cXG5cXG5zdG9yYWdlMC5wdXRNeVZhcihKU09OLnN0cmluZ2lmeShwYWdlICsgMSksIG5leHRJbmZvKTtcXG5cXG5oaXN0b3JpZXMubGlzdC5mb3JFYWNoKGxpc3QgPT4ge1xcblxcbsKgIMKgIHZpZXdUaW1lPXBidGltZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnRpbWVDb252ZXJ0KGxpc3Qudmlld19hdCk7XFxuXFxuwqAgwqAgaWYgKGxpc3QuaGlzdG9yeS5idXNpbmVzcyA9PSAnYXJ0aWNsZScpIHtcXG5cXG7CoCDCoCDCoCDCoCAvLyDkuJPmoI/mlofnq6BcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnNob3dfdGl0bGU9PScnP2xpc3QudGl0bGU6bGlzdC5zaG93X3RpdGxlLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlcnNbMF0gKyBcXFwiQFJlZmVyZXI9XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlRGV0YWlsXFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBkZXNjOiAobGlzdC5hdXRob3JfbmFtZT09Jyc/dmlld1RpbWU6J1VQOicgKyBsaXN0LmF1dGhvcl9uYW1lKydcXFxcbicgKSsgdmlld1RpbWUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZDogbGlzdC5oaXN0b3J5Lm9pZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgfSBlbHNlIGlmKGxpc3QuaGlzdG9yeS5idXNpbmVzcyA9PSAnYXJ0aWNsZS1saXN0Jyl7XFxuXFxuwqAgwqAgwqAgwqAgLy8g5paH56ug5YiX6KGo77yf77yI5Y+N5q2jaWTlrZjmlL7kvY3nva7kuI3kuIDmoLfvvIlcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnNob3dfdGl0bGU9PScnP2xpc3QudGl0bGU6bGlzdC5zaG93X3RpdGxlLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlcnNbMF0gKyBcXFwiQFJlZmVyZXI9XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlRGV0YWlsXFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBkZXNjOiAobGlzdC5hdXRob3JfbmFtZT09Jyc/dmlld1RpbWU6J1VQOicgKyBsaXN0LmF1dGhvcl9uYW1lKydcXFxcbicgKSsgdmlld1RpbWUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZDogbGlzdC5oaXN0b3J5LmNpZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgfWVsc2UgaWYobGlzdC5oaXN0b3J5LmJ1c2luZXNzID09ICdwZ2MnKXtcXG5cXG7CoCDCoCDCoCDCoCAvLyDns7vliJfliafpm4bvvIjljZXpm4bvvIlcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnNob3dfdGl0bGU9PScnP2xpc3QudGl0bGU6bGlzdC5zaG93X3RpdGxlLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2ZpbG1lcmppI2ltbWVyc2l2ZVRoZW1lI1xcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogKGxpc3QuYXV0aG9yX25hbWU9PScnP2xpc3QudGFnX25hbWUrJ1xcXFx0XFxcXHQnK2xpc3QubmV3X2Rlc2MrJ1xcXFxuJyt2aWV3VGltZTonVVA6JyArIGxpc3QuYXV0aG9yX25hbWUrJ1xcXFxuJyt2aWV3VGltZSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcF9pZDpsaXN0Lmhpc3RvcnkuZXBpZFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCB9ZWxzZSB7XFxuXFxuwqAgwqAgwqAgwqAgLy8g5pmu6YCadmlkZW9cXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnNob3dfdGl0bGU9PScnP2xpc3QudGl0bGU6bGlzdC5zaG93X3RpdGxlLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBkZXNjOiAobGlzdC5hdXRob3JfbmFtZT09Jyc/bGlzdC50YWdfbmFtZSsnXFxcXHRcXFxcdCcrbGlzdC5uZXdfZGVzYysnXFxcXG4nK3ZpZXdUaW1lOidVUDonICsgbGlzdC5hdXRob3JfbmFtZSsnXFxcXG4nK3ZpZXdUaW1lKSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFpZDogbGlzdC5oaXN0b3J5Lm9pZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgfVxcblxcbn0pO1xcblxcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Yqo5oCBXCIsXCJwYXRoXCI6XCJsYXRldE5ld3NcIixcInJ1bGVcIjpcImQucHVzaCh7XFxuXFxuwqAgwqAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcblxcbn0pO1xcblxcbmxhdGVuZXdzPSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldER5bmFtaWNEYXRhKCdteUhvbWUnKTtcXG5cXG5ldmFsKCQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnNob3dEeW5hbWljRGF0YSgpKTtcXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4k+agj+WIl+ihqFwiLFwicGF0aFwiOlwiYWN0aWNsZUxpc3RcIixcInJ1bGVcIjpcImpzOlxcblxcbnZhciBkPVtdO1xcblxcbnBhZ2U9TVlfUEFHRTtcXG5cXG51cE1pZCA9IE1ZX1BBUkFNUy5taWQgKyBcXFwiXFxcIjtcXG5cXG5hcnRpY2xlTGlzdD0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRVc2VyQXJ0aWNsZSh1cE1pZCxwYWdlKTtcXG5cXG5hcnRpY2xlTnVtPWFydGljbGVMaXN0LmNvdW50O1xcblxcbmlmIChhcnRpY2xlTnVtPT11bmRlZmluZWQpIHtcXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIHRpdGxlOiAn6L+ZdXDmsqHmnInkuJPmoI/mlofnq6AnLFxcblxcbsKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuXFxuwqAgwqAgfSk7XFxuXFxufWVsc2V7XFxuXFxuwqAgwqAgbWF4UGFnZSA9IE1hdGguY2VpbChhcnRpY2xlTnVtIC8gYXJ0aWNsZUxpc3QucHMpO1xcblxcbsKgIMKgIGlmIChwYWdlIDw9IG1heFBhZ2UpIHtcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiAn5b2T5YmNOuesrCcgKyBhcnRpY2xlTGlzdC5wbiArICfpobVcXFxcdFxcXFx0XFxcXHTlhbHmnIknICsgbWF4UGFnZSArICfpobUsJyArIGFydGljbGVOdW0gKyAn5p2h5pWw5o2uJyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIMKgIMKgIGFydGljbGVMaXN0LmFydGljbGVzLmZvckVhY2gobGlzdCA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgcGJ0aW1lPSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnRpbWVDb252ZXJ0KGxpc3QucHVibGlzaF90aW1lKTtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnRpdGxlLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5iYW5uZXJfdXJsPT0nJz8gKGxpc3QuaW1hZ2VfdXJscysgJ0BSZWZlcmVyPScpOihsaXN0LmJhbm5lcl91cmwrICdAUmVmZXJlcj0nKSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXNjOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPicrbGlzdC5zdGF0cy52aWV3KyfnnIvov4dcXFxcdFxcXFx0JytsaXN0LnN0YXRzLmxpa2UrJ+WWnOasolxcXFx0XFxcXHQnK2xpc3Quc3RhdHMuZmF2b3JpdGUrJ+aUtuiXj1xcXFxuJyArIHBidGltZSsnPC9zbWFsbD4nLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2FydGljbGVEZXRhaWxcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLy8g5LiT5qCP5paH56ugaWRcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZDogbGlzdC5pZFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCB9XFxuXFxufVxcblxcbnNldFJlc3VsdChkKTtcXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4k+agj+aWh+eroFg1XCIsXCJwYXRoXCI6XCJhcnRpY2xlRGV0YWlsXCIsXCJydWxlXCI6XCJqczpcXG5cXG52YXIgZCA9IFtdO1xcblxcbnBhZ2UgPSBNWV9QQUdFO1xcblxcbmN2aWQgPSBNWV9QQVJBTVMuaWQgKyBcXFwiXFxcIjtcXG5cXG5kLnB1c2goe1xcblxcbsKgIMKgIHVybDogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9yZWFkL2N2XFxcIitjdmlkLFxcblxcbsKgIMKgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcblxcbsKgIMKgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuXFxuwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCBjYW5CYWNrOiB0cnVlXFxuXFxuwqAgwqAgfVxcblxcbn0pXFxuXFxuc2V0UmVzdWx0KGQpO1xcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi57u85ZCI54Ot6ZeoXCIsXCJwYXRoXCI6XCJob3RWaWRlb1wiLFwicnVsZVwiOlwibGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9wb3B1bGFyP3BuPVxcXCIgKyBNWV9QQUdFLCB7XFxuXFxuwqAgwqAgaGVhZGVyczoge1xcblxcbsKgIMKgIMKgIMKgIENvb2tpZTogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcblxcbsKgIMKgIH1cXG5cXG59KSkuZGF0YVxcblxcbnJlcy5saXN0LmZvckVhY2goaXRlbSA9PiB7XFxuXFxuwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCB0aXRsZTogaXRlbS50aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCBpbWc6IGl0ZW0ucGljKyBcXFwiQFJlZmVyZXI9XFxcIixcXG5cXG7CoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcblxcbsKgIMKgIMKgIMKgIGRlc2M6IGl0ZW0ucHViX2xvY2F0aW9uLFxcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwibW92aWVfMlxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFwiYWlkXFxcIjogaXRlbS5haWQsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcImNpZFxcXCI6IGl0ZW0uY2lkLFxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KVxcblxcbn0pXFxuXFxuXFxuXCJ9LHtcIm5hbWVcIjpcIuWTlOWTqeacgOaWsOeroOiKglwiLFwicGF0aFwiOlwiZ2V0VXBkYXRlXCIsXCJydWxlXCI6XCJpZiAoTVlfUEFSQU1TLnNlYXNvbl9pZCkge1xcbiAgICBzZWFzb25faWQgPSBNWV9QQVJBTVMuc2Vhc29uX2lkICsgXFxcIlxcXCI7XFxuICAgIERhdGEgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9zZWFzb25faWQ9JyArIHNlYXNvbl9pZCkpLnJlc3VsdDtcXG59IGVsc2Uge1xcbiAgICBEYXRhID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy92aWV3L3dlYi9zZWFzb24/ZXBfaWQ9JyArIE1ZX1BBUkFNUy5lcF9pZCkpLnJlc3VsdDtcXG59XFxu6L+95Ymn5pel5Y6GID0gRGF0YS5uZXdfZXAuZGVzYztcXG7mm7TmlrDov5vluqYgPSBEYXRhLm5ld19lcC50aXRsZTtcXG7mm7TmlrDnirbmgIEgPSDov73liafml6XljoYubWF0Y2goL+WujOe7k3zmnJ/lvoUvKSA/IOi/veWJp+aXpeWOhiA6ICfmm7TmlrDoh7MnICsgKOabtOaWsOi/m+W6pi5tYXRjaCgvW1xcXFx1NGUwMC1cXFxcdTlmYTVdLykgPyDmm7TmlrDov5vluqYgOiAoJ+esrCcgKyAo5pu05paw6L+b5bqmID09ICcnID8gMCA6IOabtOaWsOi/m+W6pikpICsgJ+ivnScpXFxuc2V0UmVzdWx0KOabtOaWsOeKtuaAgSk7XCJ9LHtcIm5hbWVcIjpcInVw5ZCI6ZuG6KeG6aKRXCIsXCJwYXRoXCI6XCJjb2xsZWN0aW9uVmllZG9cIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuLy8g6aKE5aSE55CGXFxucHV0TXlWYXIoJ+WKn+iDveaKmOWPoCcsICflhbMnKTtcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbmFpZCA9IE1ZX1BBUkFNUy5haWQgKyBcXFwiXFxcIjtcXG4vLyBidmlkID0gTVlfUEFSQU1TLmJ2aWQgKyBcXFwiXFxcIjtcXG4vLyBtaWQgPSBNWV9QQVJBTVMubWlkICsgXFxcIlxcXCI7XFxudHJ5IHtcXG4gICAgLy/ojrflj5bop4bpopHliIZQ5L+h5oGvXFxuICAgIHZhciBwID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgYWlkKSkuZGF0YTtcXG4gICAgLy8g5ZCI6ZuG5L+h5oGvXFxuICAgIHZhciB2aWRlb0RhdGEgPSBwLnVnY19zZWFzb247XFxuICAgIHNldFBhZ2VUaXRsZSh2aWRlb0RhdGEudGl0bGUpO1xcbiAgICBzZXRQYWdlUGljVXJsKHZpZGVvRGF0YS5jb3ZlciArICdAUmVmZXJlcj0nKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB2aWRlb0RhdGEudGl0bGUsXFxuICAgICAgICBkZXNjOnZpZGVvRGF0YS5pbnRybyxcXG4gICAgICAgIGltZzogdmlkZW9EYXRhLmNvdmVyICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoaW50cm8pID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9meXBhZ2UnKS5ydWxlKChpbnRybykgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGludHJvLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgfSwgaW50cm8pXFxuICAgICAgICB9LCB2aWRlb0RhdGEuaW50cm8pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmcjbm9IaXN0b3J5Iz9ydWxlPWRt55uS5a2QJztcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5by55bmV5o6n5Yi2JywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJykgPT0gJ3RydWUnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5LiN5Y+XZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuWPl+WIsGRt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCJibHVlXFxcIj4nICsgcC5vd25lci5uYW1lICsgJzwvZm9udD4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuICAgICAgICBpbWc6IHAub3duZXIuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+5YWx5pyJJyArIHZpZGVvRGF0YS5lcF9jb3VudCArICfmnaHop4bpopHmlbDmja48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbWlkOiBwLm93bmVyLm1pZCxcXG4gICAgICAgICAgICB0aXRsZTogcC5vd25lci5uYW1lLFxcbiAgICAgICAgICAgIGZhY2U6IHAub3duZXIuZmFjZVxcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgIH0pO1xcbiAgICB2YXIgaW5kZXggPSAxO1xcbiAgICBzdG9yYWdlMC5wdXRWYXIoJ3ZpZGVvU2VjdGlvbnMnLCB2aWRlb0RhdGEuc2VjdGlvbnMpO1xcbiAgICB2aWRlb0RhdGEuc2VjdGlvbnMuZm9yRWFjaChlbCA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn8J+TgScgKyBlbC50aXRsZSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdpc0ZvbGRfJytpbmRleCwgJ3knKSA9PSAneScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdpc0ZvbGRfJytpbmRleCwgJ24nKTtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscygnc2VjdGlvbicgKyBpbmRleCArICctcGFydCcpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaKmOWPoCc7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignaXNGb2xkXycraW5kZXgsICd5Jyk7XFxuICAgICAgICAgICAgICAgICAgICB2aWRlb1NlY3Rpb25zID0gc3RvcmFnZTAuZ2V0VmFyKCd2aWRlb1NlY3Rpb25zJyk7XFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uUGFydExpc3QgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvU2VjdGlvbnNbaW5kZXggLSAxXS5lcGlzb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFpZCA9IGl0ZW0uYWlkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpZCA9IGl0ZW0uY2lkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQgPSBpdGVtLmFyYy5zdGF0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25QYXJ0TGlzdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ1cXFxcdFxcXFx0XFxcXHQ8c21hbGw+PC9mb250PuKWtu+4jicgKyBpdGVtLnRpdGxlICsgJ1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdDwvZm9udD48L3NtYWxsPjxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9Z3JheT7mkq3mlL7ph4/vvJonICsgc3RhdC52aWV3ICsgJ1xcXFx0XFxcXHRcXFxcdOW8ueW5le+8micgKyBzdGF0LmRhbm1ha3UgKyAnXFxcXHRcXFxcdFxcXFx05Zac5qyi77yaJyArIHN0YXQubGlrZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgcW4pLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBhaWQgKyBcXFwiXFxcIiwgY2lkICsgXFxcIlxcXCIsICcxMTYnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UsIGNsczogJ3NlY3Rpb24nICsgaW5kZXggKyAnLXBhcnQnLGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignU2VjdGlvbicgKyBpbmRleCwgc2VjdGlvblBhcnRMaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LlsZXlvIAnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgaW5kZXgpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgICAgICBleHRyYTogeyBpZDogJ1NlY3Rpb24nICsgaW5kZXggfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBlbC5lcGlzb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGFpZCA9IGl0ZW0uYWlkO1xcbiAgICAgICAgICAgIGNpZCA9IGl0ZW0uY2lkO1xcbiAgICAgICAgICAgIHN0YXQgPSBpdGVtLmFyYy5zdGF0O1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdXFxcXHRcXFxcdFxcXFx0PHNtYWxsPjwvZm9udD7ilrbvuI4nICsgaXRlbS50aXRsZSArICdcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQ8L2ZvbnQ+PC9zbWFsbD48c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPWdyYXk+5pKt5pS+6YeP77yaJyArIHN0YXQudmlldyArICdcXFxcdFxcXFx0XFxcXHTlvLnluZXvvJonICsgc3RhdC5kYW5tYWt1ICsgJ1xcXFx0XFxcXHRcXFxcdOWWnOasou+8micgKyBzdGF0Lmxpa2UgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoYWlkLCBjaWQsIHFuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICAgICAgfSwgYWlkICsgXFxcIlxcXCIsIGNpZCArIFxcXCJcXFwiLCAnMTE2JyksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlLCBjbHM6ICdzZWN0aW9uJyArIGluZGV4ICsgJy1wYXJ0JyxpZDonYWlkLScrYWlkKyd8Y2lkLScrY2lkIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpbmRleCsrO1xcbiAgICB9KVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgbG9nKGUpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfpobXpnaLotbDkuKLkuoYuLi4nLFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9pMC5oZHNsYi5jb20vYmZzL2dlbmVyYWwvZjdiNjY3MDExYTQ2NjE1NzMyYzcwMWY0YmIxZDA3Zjc5M2Y4ZDFkZi5wbmdAUmVmZXJlcj0nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBkZXNjOiAn5aSn5qaC546H6KeG6aKR6KKr5bCB56aB77yM5oiW6ICFdXDlt7Lot5Hot69+JyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiXFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XFxuXCJ9LHtcIm5hbWVcIjpcIuWbvuagh+S4i+i9vVwiLFwicGF0aFwiOlwic2F2ZUxvY2FsXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMuc2F2ZUxvY2FsID0gKCkgPT4ge1xcbiAgICBjb25zdCBiYXNlNjRUb0hleCA9IChiYXNlNjRTdHIpID0+IHtcXG4gICAgICAgIC8vIOWIoOmZpOWJjee8gOW5tuino+eggUJhc2U2NOWtl+espuS4slxcbiAgICAgICAgdmFyIGJpbmFyeVN0ciA9IHdpbmRvdzAuYXRvYihiYXNlNjRTdHIuc3BsaXQoJywnKVsxXSk7XFxuXFxuICAgICAgICAvLyDovazmjaLkuLoxNui/m+WItuWtl+espuS4slxcbiAgICAgICAgdmFyIGhleFN0ciA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW5hcnlTdHIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICB2YXIgaGV4ID0gYmluYXJ5U3RyLmNoYXJDb2RlQXQoaSkudG9TdHJpbmcoMTYpO1xcbiAgICAgICAgICAgIGhleFN0ciArPSAoaGV4Lmxlbmd0aCA9PT0gMiA/IGhleCA6ICcwJyArIGhleCk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaGV4U3RyO1xcbiAgICB9O1xcbiAgICBzaG93TG9hZGluZyhcXFwi5Zu+5qCH5Yid5aeL5YyW5LitLi4uXFxcIik7XFxuICAgIHZhciB0dWJpYW8gPSB7fTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIC8vIOWJqui0tOadv+e6v+i3r1xcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vbmV0Y3V0LmNuL3AvYTFmY2YwZDNiMGEyN2YxMycpO1xcbiAgICAgICAgZGF0YSA9IGh0bWwubWF0Y2goL3suKm5vdGVfY29udGVudC4qdXBkYXRlZF9hdC4qfS8pWzBdO1xcbiAgICAgICAgZXZhbCgndHViaWFvID0nICsgSlNPTi5wYXJzZShkYXRhKS5ub3RlX2NvbnRlbnQpO1xcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBsb2coJ+WJqui0tOadv+WHuumUmSzliIfmjaLmiZjnrqHnur/ot68nKTtcXG4gICAgICAgIHJvdXRlID0gW1xcbiAgICAgICAgICAgICdodHRwczovL2dpdGNvZGUubmV0L3FxXzIzODQ3ODE5L2hpa2VyLy0vcmF3L21hc3Rlci90dWJpYW8uanNvbicsXFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0ZWEuY29tL2N5L2hpa2VyL3Jhdy9jb21taXQvYmUyMTYwYzZhMDFkYjg3M2Q5Zjk2ODFiYTdlODZlZWJmYTExOGQ4Ni90dWJpYW8uanNvbicsXFxuICAgICAgICAgICAgJ2h0dHBzOi8vcmF3LmNvZGVodWIuY24vcC9oaWtlci9kL3R1Ymlhby9naXQvcmF3L21hc3Rlci90dWJpYW8uanNvbj90b2tlbj1HR2RsSXVWR3FZM2IzTHlkSW93cmtzYlVCQ2ZNeXgyZkYzMVdVWmVvNG0nLFxcbiAgICAgICAgICAgICdodHRwczovL2dpdGVlLmNvbS9teHhsLWN5L2hpa2VyL3Jhdy9tYXN0ZXIvdHViaWFvLmpzb24nXFxuICAgICAgICBdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3R1YmlhbyA9JyArIHJlcXVlc3Qocm91dGVbaV0pKTtcXG4gICAgICAgICAgICAgICAgaWYgKHR1Ymlhb1tcXFwi5LqU5aSnXFxcIl0gJiYgdHViaWFvW1xcXCLlk5Tlk6lcXFwiXSkge1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+e6v+i3r++8micgKyB0dWJpYW9baV0gKyAn6KKr5aKZ5LqGLi4uJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZygn57q/6Lev77yaJyArIHR1Ymlhb1tpXSArICflh7rplJnkuoYuLi4nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciB3dWRhID0gdHViaWFvW1xcXCLkupTlpKdcXFwiXTtcXG4gICAgICAgIHZhciBiaWxpID0gdHViaWFvW1xcXCLlk5Tlk6lcXFwiXTtcXG4gICAgICAgIHZhciBpbmRleCA9IDA7XFxuICAgICAgICBmb3IgKGxldCBpdGVtIGluIHd1ZGEpIHtcXG4gICAgICAgICAgICB3cml0ZUhleEZpbGUoYGhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvdHViaWFvLyR7aXRlbX0uc3ZnYCwgYmFzZTY0VG9IZXgod3VkYVtpdGVtXSkpO1xcbiAgICAgICAgICAgIGxvZyhg5Yid5aeL5YyW56ysJHtpbmRleCsrfeS4quWbvuaghzoke2l0ZW19Li4uYCk7XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGxldCBpdGVtIGluIGJpbGkpIHtcXG4gICAgICAgICAgICB3cml0ZUhleEZpbGUoYGhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMvJHtpdGVtfS5wbmdgLCBiYXNlNjRUb0hleChiaWxpW2l0ZW1dKSk7XFxuICAgICAgICAgICAgbG9nKGDliJ3lp4vljJbnrKwke2luZGV4Kyt95Liq5Zu+5qCHOiR7aXRlbX0uLi5gKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHNob3dMb2FkaW5nKCflm77moIfliJ3lp4vljJblrozmiJDvvJrlhbHorqEnICsgaW5kZXggKyAn5Liq5Zu+5qCHJyk7XFxuICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBzaG93TG9hZGluZygn5Zu+5qCH5Yid5aeL5YyW5aSx6LSlJyk7XFxuICAgICAgICBsb2coJ+Wbvuagh+WIneWni+WMluWksei0pTonICsgZSk7XFxuICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICB9XFxuXFxufTtcXG5cIn1dIiwiaWNvbiI6Imhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvdHViaWFvL2JpbGliaWxpLnN2ZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment