xiaomianao666

小程序:加解密工具

Aug 25th, 2023
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@加解密工具@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5Yqg6Kej5a+G5bel5YW3IiwiYXV0aG9yIjoiUngmUmVib3JuJkBMb3lEZ0lrJnd6aGpnb29kJkpva2VyIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSNmeUFsbCIsInZlcnNpb24iOjI2LCJjb2xfdHlwZSI6InJpY2hfdGV4dCIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoib3RoZXIiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbmxldCBuZXdXaW5kb3cgPSB0cnVlXG5sZXQgaG9tZVBhZ2UgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9ob21lP3J1bGU95Yqg6Kej5a+G5bel5YW3JykpLnJ1bGVcbmV2YWwoaG9tZVBhZ2UpIiwic2VhcmNoX3VybCI6IiIsImdyb3VwIjoi5YW25a6DIiwic2VhcmNoRmluZCI6IiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIlVuaWNvZGVcIixcInBhdGhcIjpcInVuaWNvZGVcIixcInJ1bGVcIjpcImpzOlxcbmxldCB1bmljb2RlID0ge307XFxudW5pY29kZS5lbmNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgbGV0IGVuY29kZSA9IGVzY2FwZShvYmouZGVjVGV4dC5yZXBsYWNlKC8ldS9nLCBcXFwiXFxcXFxcXFx1XFxcIikpO1xcbiAgICByZXR1cm4gZW5jb2RlO1xcbn1cXG51bmljb2RlLmRlY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZGVjb2RlID0gdW5lc2NhcGUob2JqLmVuY1RleHQucmVwbGFjZSgvXFxcXFxcXFx1L2csIFxcXCIldVxcXCIpKTtcXG4gICAgcmV0dXJuIGRlY29kZTtcXG59XFxuJC5leHBvcnRzLnVuaWNvZGUgPSB1bmljb2RlXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkJhc2U2NFwiLFwicGF0aFwiOlwiYmFzZTY0XCIsXCJydWxlXCI6XCJqczpcXG5sZXQgYmFzZTY0ID0ge307XFxuYmFzZTY0LmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICAvLyBsZXQgZW5jb2RlID0gZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NEVuY29kZShvYmouZGVjVGV4dCkpO1xcbiAgICBsZXQgZW5jb2RlID0gYmFzZTY0RW5jb2RlKG9iai5kZWNUZXh0KTtcXG4gICAgcmV0dXJuIGVuY29kZTtcXG59XFxuYmFzZTY0LmRlY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50KGJhc2U2NERlY29kZShvYmouZW5jVGV4dCkpO1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4kLmV4cG9ydHMuYmFzZTY0ID0gYmFzZTY0XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkFTQ0lJXCIsXCJwYXRoXCI6XCJhc2NpaVwiLFwicnVsZVwiOlwianM6XFxubGV0IGFzY2lpID0ge307XFxuYXNjaWkudW5pY29kZTEgPSBmdW5jdGlvbihzdHIpIHtcXG4gICAgdmFyIHZhbHVlID0gJyc7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyYjJyArIHN0ci5jaGFyQ29kZUF0KGkpICsgJzsnO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG59XFxuYXNjaWkucmVjb252ZXJ0ID0gZnVuY3Rpb24oc3RyKSB7XFxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oXFxcXFxcXFx1KShcXFxcd3sxLDR9KS9naSwgZnVuY3Rpb24oJDApIHtcXG4gICAgICAgIHJldHVybiAoU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCgoZXNjYXBlKCQwKS5yZXBsYWNlKC8oJTVDdSkoXFxcXHd7MSw0fSkvZywgXFxcIiQyXFxcIikpLCAxNikpKTtcXG4gICAgfSk7XFxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oJiN4KShcXFxcd3sxLDR9KTsvZ2ksIGZ1bmN0aW9uKCQwKSB7XFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlc2NhcGUoJDApLnJlcGxhY2UoLyglMjYlMjN4KShcXFxcd3sxLDR9KSglM0IpL2csIFxcXCIkMlxcXCIpLCAxNikpO1xcbiAgICB9KTtcXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLygmIykoXFxcXGR7MSw2fSk7L2dpLCBmdW5jdGlvbigkMCkge1xcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZXNjYXBlKCQwKS5yZXBsYWNlKC8oJTI2JTIzKShcXFxcZHsxLDZ9KSglM0IpL2csIFxcXCIkMlxcXCIpKSk7XFxuICAgIH0pO1xcblxcbiAgICByZXR1cm4gc3RyO1xcbn1cXG4vLyAkLmV4cG9ydHMudW5pY29kZTEgPSB1bmljb2RlMTtcXG4vLyAkLmV4cG9ydHMucmVjb252ZXJ0ID0gcmVjb252ZXJ0O1xcbmFzY2lpLmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZW5jb2RlID0gdGhpcy51bmljb2RlMShvYmouZGVjVGV4dCk7XFxuICAgIHJldHVybiBlbmNvZGU7XFxufVxcbmFzY2lpLmRlY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZGVjb2RlID0gdGhpcy5yZWNvbnZlcnQob2JqLmVuY1RleHQpO1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4kLmV4cG9ydHMuYXNjaWkgPSBhc2NpaTtcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi6I635Y+W5YiG57G75aS06YOoXCIsXCJwYXRoXCI6XCJjbGFzc2ljSGVhZGVyXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgZCA9IFtdO1xcbmxldCBzZWxlY3RDb2xvciA9ICcjQzA0QTJGJ1xcbi8vIOaal+apmSBFMzhDNEFcXG5cXG5mdW5jdGlvbiBwdXRLZXlJbnRvTWFwKGtleSwgdmFsdWUpIHtcXG4gICAgY29uc3Qga2V5TWFwID0gSlNPTi5wYXJzZShnZXRWYXIoKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikrXFxcIl9hbGxfa2V5X01hcFxcXCIpLCBcXFwie31cXFwiKSk7XFxuICAgIGtleU1hcFtrZXldID0gdmFsdWU7XFxuICAgIHB1dFZhcigoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfYWxsX2tleV9NYXBcXFwiKSwgSlNPTi5zdHJpbmdpZnkoa2V5TWFwKSk7XFxufVxcblxcbmZ1bmN0aW9uIGdldEhlYWRlckZyb21KU09OT2JqZWN0KG9iaikge1xcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBrZXkgPT0gZ2V0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIiksIE9iamVjdC5rZXlzKG9iailbMF0pID8gXFxcIjxiPuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFwiICsgc2VsZWN0Q29sb3IgK1xcXCInPlxcXCIgKyBrZXkgKyBcXFwiPC9mb250PjwvYj5cXFwiIDoga2V5LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoa2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpLCBrZXkpO1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2N1cl9pbmRleFxcXCIpLCBrZXkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBrZXkpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KTtcXG4gICAgbGV0IGtleSA9IGdldFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpLCBPYmplY3Qua2V5cyhvYmopWzBdKTtcXG4gICAgcHV0VmFyKChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIl9jdXJfaW5kZXhcXFwiKSwga2V5KTtcXG4gICAgZ2V0TmV4dEhlYWRlckZyb21KU09OQXJyYXkoa2V5LCBvYmpba2V5XSk7XFxuICAgIHJldHVybiBkO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXROZXh0SGVhZGVyRnJvbUpTT05BcnJheShrZXksIGFycmF5KSB7XFxuICAgIGlmIChhcnJheSA9PSB1bmRlZmluZWQgfHwgYXJyYXkubGVuZ3RoID09IDApIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICBsZXQgbmV4dEhlYWRlciA9IHt9O1xcbiAgICBsZXQgZGVmYXVsdFZhbHVlID0gXFxcIlxcXCI7XFxuICAgIGRlZmF1bHRWYWx1ZSA9IGFycmF5WzBdO1xcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycmF5WzBdKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IE9iamVjdC5rZXlzKGFycmF5WzBdKVswXTtcXG4gICAgfVxcbiAgICBwdXRLZXlJbnRvTWFwKChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSksIGdldFZhcigoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXkpLCBkZWZhdWx0VmFsdWUpKVxcbiAgICBwdXRWYXIoKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2N1cl9pbmRleFxcXCIpLCBrZXkgKyBcXFwiQEBcXFwiICsgZ2V0VmFyKChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSksIGRlZmF1bHRWYWx1ZSkpO1xcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiBhcnJheSkge1xcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJ2YWx1ZUtleXM6IFxcXCIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXModmFsdWUpWzBdKSlcXG4gICAgICAgICAgICBsZXQgdmFsdWVLZXkgPSBPYmplY3Qua2V5cyh2YWx1ZSlbMF07XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlS2V5ID09IGdldFZhcigoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXkpLCBkZWZhdWx0VmFsdWUpID8gXFxcIjxiPuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFwiICsgc2VsZWN0Q29sb3IgK1xcXCInPlxcXCIgKyB2YWx1ZUtleSArIFxcXCI8L2ZvbnQ+PC9iPlxcXCIgOiB2YWx1ZUtleSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh2YWx1ZUtleSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwdXRLZXlJbnRvTWFwKGtleSwgdmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlNYXAgPSBKU09OLnBhcnNlKGdldFZhcigoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfYWxsX2tleV9NYXBcXFwiKSwgXFxcInt9XFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleU1hcFtrZXldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2FsbF9rZXlfTWFwXFxcIiwgSlNPTi5zdHJpbmdpZnkoa2V5TWFwKSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXksIHZhbHVlS2V5KTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIl9jdXJfaW5kZXhcXFwiLCBrZXkgKyBcXFwiQEBcXFwiICsgdmFsdWVLZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0S2V5SW50b01hcChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSwgZ2V0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiQEBcXFwiICsga2V5LCBcXFwiZGVmYXVsdFZhbHVlXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHZhbHVlS2V5LCBrZXkpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbmV4dEhlYWRlclt2YWx1ZUtleV0gPSB2YWx1ZVt2YWx1ZUtleV07XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZSA9PSBnZXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXksIGRlZmF1bHRWYWx1ZSkgPyBcXFwiPGI+4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBzZWxlY3RDb2xvciArXFxcIic+XFxcIiArIHZhbHVlICsgXFxcIjwvZm9udD48L2I+XFxcIiA6IHZhbHVlLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHZhbHVlLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHB1dEtleUludG9NYXAoa2V5LCB2YWx1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleU1hcCA9IEpTT04ucGFyc2UoZ2V0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2FsbF9rZXlfTWFwXFxcIiwgXFxcInt9XFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleU1hcFtrZXldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2FsbF9rZXlfTWFwXFxcIiwgSlNPTi5zdHJpbmdpZnkoa2V5TWFwKSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXksIHZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dEtleUludG9NYXAoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXksIGdldFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSwgXFxcImRlZmF1bHRWYWx1ZVxcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2N1cl9pbmRleFxcXCIsIGtleSArIFxcXCJAQFxcXCIgKyB2YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHZhbHVlLCBrZXkpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pO1xcbiAgICBpZiAobmV4dEhlYWRlciAhPT0gdW5kZWZpbmVkICYmIG5leHRIZWFkZXIubGVuZ3RoICE9IDApIHtcXG4gICAgICAgIGdldE5leHRIZWFkZXJGcm9tSlNPTkFycmF5KGtleSArIFxcXCJAQFxcXCIgKyBnZXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXksIGRlZmF1bHRWYWx1ZSksIG5leHRIZWFkZXJbZ2V0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiQEBcXFwiICsga2V5LCBkZWZhdWx0VmFsdWUpXSk7XFxuICAgIH1cXG59XFxuXFxubGV0IGhlYWRlciA9IHtcXG4gICAgLyoqXFxuICAgICAqIOWPr+iHquWumuS5ieW9k+WJjeWIhuexu+WktOmDqCBpZO+8iOWFtuWunuayoeWVpeeUqO+8jOWwseaYr+S4uuS6huiwg+ivleS4jeWQjOinhOWImeWMuuWIhuS4gOS4i+iAjOW3su+8iVxcbiAgICAgKi9cXG4gICAgc2V0SWQ6IGZ1bmN0aW9uKGlkKSB7XFxuXFx0ICAgICAgcHV0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgaWQpXFxuICAgIH0sXFxuICAgIGdldElkOiBmdW5jdGlvbigpIHtcXG5cXHQgICAgICByZXR1cm4gZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKTtcXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOiOt+WPluWIhuexu+WktOmDqO+8jOi/lOWbnuinhueVjCBzZXRSZXN1bHQg55So55qE5pWw57uEXFxuICAgICAqL1xcbiAgICBnZXQ6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgbGV0IHJlc3VsdCA9IGdldEhlYWRlckZyb21KU09OT2JqZWN0KG9iaik7XFxuICAgICAgICAvL2xvZyhcXFwi44CQ5a2Q6aG16Z2i44CRXFxcIiArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9LFxcbiAgICAvKipcXG4gICAgICAqIOmhtemdouWFs+mXreaXtumcgOimgeazqOWGjOeahOeUn+WRveWRqOacn++8jOW8leWFpeS+nei1luWQjuWcqCBhZGRMaXN0ZW5lciDkuK3osIPnlKjljbPlj69cXG4gICAgICAqIOS+i++8mlxcbiAgICAgICAgIGNvbnN0IHsgaGVhZGVyIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jbGFzc2ljSGVhZGVyXFxcIik7XFxuICAgICAgICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKChoZWFkZXIpID0+IHtcXG4gICAgICAgICAgaGVhZGVyLm9uQ2xvc2UoKTtcXG4gICAgICAgIH0sIGhlYWRlcikpO1xcbiAgICAgICovXFxuICAgIG9uQ2xvc2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgLy8gcHV0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiXFxcIiwgXFxcIue8lueggVxcXCIpO1xcbiAgICAgICAgLy8gcHV0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiQEDnvJbnoIFcXFwiLCBcXFwi5L2b5puwXFxcIik7XFxuICAgICAgICBsZXQgYWxsS2V5QXJyID0gT2JqZWN0LmtleXMoSlNPTi5wYXJzZShnZXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfYWxsX2tleV9NYXBcXFwiLCBcXFwie31cXFwiKSkpO1xcbiAgICAgICAgZm9yIChsZXQgaSBpbiBhbGxLZXlBcnIpIHtcXG4gICAgICAgICAgICBjbGVhclZhcihhbGxLZXlBcnJbaV0pO1xcbiAgICAgICAgICAgIC8vIGxvZyhcXFwi44CQ5riF55CG5ZCO44CRXFxcIisgYWxsS2V5QXJyW2ldICsgXFxcIjogXFxcIitKU09OLnN0cmluZ2lmeShnZXRWYXIoYWxsS2V5QXJyW2ldLCBcXFwiXFxcIikpKVxcbiAgICAgICAgfVxcbiAgICAgICAgY2xlYXJWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSlcXG4gICAgICAgIGNsZWFyVmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2FsbF9rZXlfTWFwXFxcIilcXG4gICAgICAgIGNsZWFyVmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIilcXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOiOt+WPluW9k+WJjeW3sumAieWkmue6p+WIhuexu++8jOi/lOWbnueahOaVsOaNruagvOW8j+S4uu+8muS4gOe6p+WIhuexu0BA5LqM57qn5YiG57G7QEAuLi7vvIzlj6/oh6rooYzlgZrmmKDlsITojrflj5YgdXJsXFxuICAgICAqL1xcbiAgICBnZXRDdXJyZW50SW5kZXg6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgcmV0dXJuIGdldFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIl9jdXJfaW5kZXhcXFwiLCBcXFwiXFxcIik7XFxuICAgIH1cXG59XFxuJC5leHBvcnRzLmhlYWRlciA9IGhlYWRlclwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCLnvJbnoIHnsbvpobXpnaJcIixcInBhdGhcIjpcImVuY29kZVwiLFwicnVsZVwiOlwianM6XFxuZnVuY3Rpb24gc2V0RW5jb2RlUGFnZShkLCBvYmopIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi57yW56CBXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXljp/mlodcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoXFxcImRlY29kZS10ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcImRlY29kZS10ZXh0XFxcIixpbnB1dCknXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICBvYmouZGVjVGV4dCA9IGlucHV0O1xcbiAgICAgICAgICAgIC8vIGxvZyhcXFwib2JqLmRlY1RleHQ6IFxcXCIgKyBvYmouZGVjVGV4dClcXG4gICAgICAgICAgICB2YXIgZW5jb2RlID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgdmFyIHRvb2wgPSB7fTtcXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqLnRvb2xzKSB7XFxuICAgICAgICAgICAgICAgIC8vIGxvZyhvYmoudHlwZSlcXG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBvYmoudHlwZS5zcGxpdChcXFwiQEBcXFwiKS5wb3AoKVxcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBrZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRvb2wgPSBvYmoudG9vbHNba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGVuY29kZSA9IHRvb2wuZW5jb2RlKG9iaik7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJlbmNvZGU6IFxcXCIgKyBlbmNvZGUpXFxuICAgICAgICAgICAgcHV0VmFyKCdlbmNvZGUtdGV4dCcsIGVuY29kZSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Yqg5a+G5oiQ5YqfJztcXG4gICAgICAgIH0sIG9iaiksXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLop6PnoIFcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWvhuaWh1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcihcXFwiZW5jb2RlLXRleHRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiZW5jb2RlLXRleHRcXFwiLGlucHV0KSdcXG4gICAgICAgIH0sXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgIG9iai5lbmNUZXh0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJvYmouZW5jVGV4dDogXFxcIiArIG9iai5lbmNUZXh0KVxcbiAgICAgICAgICAgIHZhciBkZWNvZGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICB2YXIgdG9vbCA9IHt9O1xcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoudG9vbHMpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBvYmoudHlwZS5zcGxpdChcXFwiQEBcXFwiKS5wb3AoKVxcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBrZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRvb2wgPSBvYmoudG9vbHNba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGRlY29kZSA9IHRvb2wuZGVjb2RlKG9iaik7XFxuICAgICAgICAgICAgcHV0VmFyKCdkZWNvZGUtdGV4dCcsIGRlY29kZSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6Kej5a+G5oiQ5YqfJztcXG4gICAgICAgIH0sIG9iaiksXFxuICAgIH0pO1xcblxcbiAgICAvLyBodHRwczovL2dpdGVlLmNvbS9DaGVyaXNoUngvaW1hZ2V3YXJlaG91c2UvcmF3L21hc3Rlci9pbWFnZS8zMmQyOWUyZmJjZGY4ZDgzMDcxZGVlYzdmNmFhNGI3Yy5wbmdcXG4gICAgbGV0IGNwSW1nVXJsID0gXFxcImh0dHBzOi8vaWNvbmZvbnQudHlyYW50Zy5jb20vYXBpL2lsbHVzdHJhdGUuc3ZnP3N2Z19zdHJpbmc9JTNDc3ZnJTIwY2xhc3MlM0QlMjJpY29uJTIyJTIwc3R5bGUlM0QlMjJ3aWR0aCUzQSUyMDFlbSUzQmhlaWdodCUzQSUyMDFlbSUzQnZlcnRpY2FsLWFsaWduJTNBJTIwbWlkZGxlJTNCZmlsbCUzQSUyMGN1cnJlbnRDb2xvciUzQm92ZXJmbG93JTNBJTIwaGlkZGVuJTNCJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAyNCUyMDEwMjQlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk04NjYuMTMzMzMzJTIwOTE5LjQ2NjY2N2gtNDA1LjMzMzMzM2MtMjkuODY2NjY3JTIwMC01My4zMzMzMzMtMjMuNDY2NjY3LTUzLjMzMzMzMy01My4zMzMzMzR2LTYxOC42NjY2NjZjMC0yOS44NjY2NjclMjAyMy40NjY2NjctNTMuMzMzMzMzJTIwNTMuMzMzMzMzLTUzLjMzMzMzNGg0MDUuMzMzMzMzYzI5Ljg2NjY2NyUyMDAlMjA1My4zMzMzMzMlMjAyMy40NjY2NjclMjA1My4zMzMzMzQlMjA1My4zMzMzMzR2NjE4LjY2NjY2NmMwJTIwMjkuODY2NjY3LTIzLjQ2NjY2NyUyMDUzLjMzMzMzMy01My4zMzMzMzQlMjA1My4zMzMzMzR6JTIyJTIwZmlsbCUzRCUyMiUyMzY5QzBGRiUyMiUyMCUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTc3MC4xMzMzMzMlMjA0MjguOGgtMjEzLjMzMzMzM2MtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzNGgyMTMuMzMzMzMzYzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzQlMjAyMS4zMzMzMzRzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzQlMjAyMS4zMzMzMzN6TTc3MC4xMzMzMzMlMjA1NTYuOGgtMjEzLjMzMzMzM2MtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzNGgyMTMuMzMzMzMzYzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzQlMjAyMS4zMzMzMzRzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzQlMjAyMS4zMzMzMzN6TTc3MC4xMzMzMzMlMjA2ODQuOGgtMjEzLjMzMzMzM2MtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzNGgyMTMuMzMzMzMzYzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzQlMjAyMS4zMzMzMzRzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzQlMjAyMS4zMzMzMzN6JTIyJTIwZmlsbCUzRCUyMiUyM0ZGRkZGRiUyMiUyMCUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTU2Ny40NjY2NjclMjA4MzQuMTMzMzMzaC00MDUuMzMzMzM0Yy0yOS44NjY2NjclMjAwLTUzLjMzMzMzMy0yMy40NjY2NjctNTMuMzMzMzMzLTUzLjMzMzMzM3YtNjE4LjY2NjY2N2MwLTI5Ljg2NjY2NyUyMDIzLjQ2NjY2Ny01My4zMzMzMzMlMjA1My4zMzMzMzMtNTMuMzMzMzMzaDQwNS4zMzMzMzRjMjkuODY2NjY3JTIwMCUyMDUzLjMzMzMzMyUyMDIzLjQ2NjY2NyUyMDUzLjMzMzMzMyUyMDUzLjMzMzMzM3Y2MTguNjY2NjY3YzAlMjAyOS44NjY2NjctMjMuNDY2NjY3JTIwNTMuMzMzMzMzLTUzLjMzMzMzMyUyMDUzLjMzMzMzM3olMjIlMjBmaWxsJTNEJTIyJTIzMTg5MEZGJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNDcxLjQ2NjY2NyUyMDM0My40NjY2NjdoLTIxMy4zMzMzMzRjLTEyLjglMjAwLTIxLjMzMzMzMy04LjUzMzMzMy0yMS4zMzMzMzMtMjEuMzMzMzM0czguNTMzMzMzLTIxLjMzMzMzMyUyMDIxLjMzMzMzMy0yMS4zMzMzMzNoMjEzLjMzMzMzNGMxMi44JTIwMCUyMDIxLjMzMzMzMyUyMDguNTMzMzMzJTIwMjEuMzMzMzMzJTIwMjEuMzMzMzMzcy0xMC42NjY2NjclMjAyMS4zMzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzM0ek00NzEuNDY2NjY3JTIwNDcxLjQ2NjY2N2gtMjEzLjMzMzMzNGMtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzRzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzM2gyMTMuMzMzMzM0YzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzMlMjAyMS4zMzMzMzNzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzR6TTQ3MS40NjY2NjclMjA1OTkuNDY2NjY3aC0yMTMuMzMzMzM0Yy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzNHM4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzMzaDIxMy4zMzMzMzRjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzMyUyMDIxLjMzMzMzM3MtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzMyUyMDIxLjMzMzMzNHolMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIlxcbiAgICBsZXQgY2xlYXJJbWdVcmwgPSBcXFwiaHR0cHM6Ly9pY29uZm9udC50eXJhbnRnLmNvbS9hcGkvaWxsdXN0cmF0ZS5zdmc/c3ZnX3N0cmluZz0lM0NzdmclMjBjbGFzcyUzRCUyMmljb24lMjIlMjBzdHlsZSUzRCUyMndpZHRoJTNBJTIwMWVtJTNCaGVpZ2h0JTNBJTIwMWVtJTNCdmVydGljYWwtYWxpZ24lM0ElMjBtaWRkbGUlM0JmaWxsJTNBJTIwY3VycmVudENvbG9yJTNCb3ZlcmZsb3clM0ElMjBoaWRkZW4lM0IlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDI0JTIwMTAyNCUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTE3OS4yJTIwNTg4LjhoNzEwLjRjMjUuNiUyMDAlMjAzMi0xOS4yJTIwMjUuNi0zOC40TDgzMiUyMDM2NC44Yy0xMi44LTE5LjItMzguNC0zOC40LTY0LTM4LjRINjIwLjhWNjRjMC0yNS42LTE5LjItNDQuOC00NC44LTQ0LjhINDkyLjhjLTE5LjIlMjAwLTM4LjQlMjAxOS4yLTM4LjQlMjA0NC44djI2Mi40SDMwMC44Yy0yNS42JTIwMC01MS4yJTIwMTkuMi01Ny42JTIwMzguNEwxNTMuNiUyMDU1MC40Yy02LjQlMjAxOS4yJTIwMCUyMDM4LjQlMjAyNS42JTIwMzguNG02OTEuMiUyMDY0SDIxNy42YzYuNCUyMDY0JTIwMCUyMDE0Ny4yLTUxLjIlMjAxOTguNC03Ni44JTIwNjQtNTEuMiUyMDE0MC44JTIwNi40JTIwMTY2LjRoMTA4LjhjMTIuOC0xMi44JTIwNzAuNC0xMDIuNCUyMDg5LjYtMTkyJTIwMC0xOS4yJTIwNi40LTMyJTIwNi40LTMyJTIwMCUyMDEyLjglMjAwJTIwMTkuMi02LjQlMjAzMi02LjQlMjA1Ny42LTI1LjYlMjAxNzIuOC0zOC40JTIwMTkyaDgzLjJjMTIuOC0xMi44JTIwNzAuNC0xMDIuNCUyMDg5LjYtMTkyJTIwMC0xOS4yJTIwNi40LTMyJTIwNi40LTMyJTIwMCUyMDEyLjglMjAwJTIwMTkuMi02LjQlMjAzMi02LjQlMjA1Ny42LTI1LjYlMjAxNzIuOC0zOC40JTIwMTkyaDEwMi40YzEyLjgtMTIuOCUyMDcwLjQtMTAyLjQlMjA4OS42LTE5MiUyMDAtMTkuMiUyMDYuNC0zMiUyMDYuNC0zMiUyMDAlMjAxMi44JTIwMCUyMDE5LjItNi40JTIwMzItNi40JTIwNTcuNi0yNS42JTIwMTcyLjgtMzguNCUyMDE5Mkg3MDRjMTIuOC0xMi44JTIwNzAuNC0xMDIuNCUyMDg5LjYtMTkyJTIwMC0xOS4yJTIwNi40LTMyJTIwNi40LTMyJTIwMCUyMDEyLjglMjAwJTIwMTkuMi02LjQlMjAzMi02LjQlMjA1Ny42LTI1LjYlMjAxNzIuOC0zOC40JTIwMTkyaDEwMi40czcwLjQtMjUuNiUyMDU3LjYtMTAyLjRjLTE5LjItMTE1LjItMjUuNi0xNzkuMi00NC44LTI2Mi40JTIyJTIwZmlsbCUzRCUyMiUyMzczNjdEMSUyMiUyMCUyRiUzRSUzQyUyRnN2ZyUzRVxcXCJcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5riF56m65Y6f5paHJyxcXG4gICAgICAgIGltZzogY2xlYXJJbWdVcmwsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiICsgXFxcIkBsYXp5UnVsZT0uanM6cHV0VmFyKCdkZWNvZGUtdGV4dCcsICcnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+a4heepuuaIkOWKnydcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpY29uXzInXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfmuIXnqbrlr4bmlocnLFxcbiAgICAgICAgaW1nOiBjbGVhckltZ1VybCxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIgKyBcXFwiQGxhenlSdWxlPS5qczpwdXRWYXIoJ2VuY29kZS10ZXh0JywgJycpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5riF56m65oiQ5YqfJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMidcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WkjeWItuWOn+aWhycsXFxuICAgICAgICBpbWc6IGNwSW1nVXJsLFxcbiAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGRlYyA9IGdldFZhcihcXFwiZGVjb2RlLXRleHRcXFwiKTtcXG4gICAgICAgICAgICBpZiAoZGVjKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBkZWM7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WGheWuueS4uuepuu+8gVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl8yJ1xcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5aSN5Yi25a+G5paHJyxcXG4gICAgICAgIGltZzogY3BJbWdVcmwsXFxuICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZW5jID0gZ2V0VmFyKFxcXCJlbmNvZGUtdGV4dFxcXCIpO1xcbiAgICAgICAgICAgIGlmIChlbmMpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGVuYztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YaF5a655Li656m677yBXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICdpY29uXzInXFxuICAgIH0pO1xcbn1cXG4kLmV4cG9ydHMuc2V0RW5jb2RlUGFnZSA9IHNldEVuY29kZVBhZ2VcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi5Yqg5a+G57G76aG16Z2iXCIsXCJwYXRoXCI6XCJjcnlwdG9cIixcInJ1bGVcIjpcImpzOlxcbi8vIGNvbnN0IHsgQ29uZmlnTWFwcGluZyB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzXFxcIik7XFxuLy8gbG9nKEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKENyeXB0by5Db25maWdNYXBwaW5nKSkpXFxuY29uc3QgeyBidWlsZEFFU1VpIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXN1aVxcXCIpO1xcbmNvbnN0IHsgYnVpbGRSU0FVaSB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvcnNhdWlcXFwiKTtcXG5mdW5jdGlvbiBzZXRDcnlwdG9QYWdlKGQsIG9iaikge1xcbiAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIuWvueensOWKoOWvhlxcXCIpICYmICFvYmoudHlwZS5pbmNsdWRlcyhcXFwi6Z2e5a+556ew5Yqg5a+GXFxcIikpIHtcXG4gICAgICAgIGJ1aWxkQUVTVWkoZCwgb2JqKVxcbiAgICB9IGVsc2UgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCLpnZ7lr7nnp7DliqDlr4ZcXFwiKSkge1xcbiAgICAgICAgYnVpbGRSU0FVaShkLCBvYmopXFxuICAgIH1cXG59XFxuJC5leHBvcnRzLnNldENyeXB0b1BhZ2UgPSBzZXRDcnlwdG9QYWdlXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkFFU1wiLFwicGF0aFwiOlwiYWVzXCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKGdldENyeXB0b0pTKCkpO1xcbmxldCBDcnlwdG8gPSB7XFxuICAgIENvbmZpZ01hcHBpbmc6IHtcXG4gICAgICAgIGVuY1R5cGU6IHtcXG4gICAgICAgICAgICBcXFwiQUVTXFxcIjogQ3J5cHRvSlMuQUVTLmVuY3J5cHQsXFxuICAgICAgICAgICAgXFxcIkRFU1xcXCI6IENyeXB0b0pTLkRFUy5lbmNyeXB0LFxcbiAgICAgICAgICAgIFxcXCIzREVTXFxcIjogQ3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQsXFxuICAgICAgICB9LFxcbiAgICAgICAgZGVjVHlwZToge1xcbiAgICAgICAgICAgIFxcXCJBRVNcXFwiOiBDcnlwdG9KUy5BRVMuZGVjcnlwdCxcXG4gICAgICAgICAgICBcXFwiREVTXFxcIjogQ3J5cHRvSlMuREVTLmRlY3J5cHQsXFxuICAgICAgICAgICAgXFxcIjNERVNcXFwiOiBDcnlwdG9KUy5UcmlwbGVERVMuZGVjcnlwdCxcXG4gICAgICAgIH0sXFxuICAgICAgICBtb2RlOiB7XFxuICAgICAgICAgICAgXFxcIkNCQ1xcXCI6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgIFxcXCJFQ0JcXFwiOiBDcnlwdG9KUy5tb2RlLkVDQixcXG4gICAgICAgICAgICBcXFwiQ0ZCXFxcIjogQ3J5cHRvSlMubW9kZS5DRkIsXFxuICAgICAgICAgICAgXFxcIkNUUlxcXCI6IENyeXB0b0pTLm1vZGUuQ1RSLFxcbiAgICAgICAgICAgIFxcXCJPRkJcXFwiOiBDcnlwdG9KUy5tb2RlLk9GQlxcbiAgICAgICAgfSxcXG4gICAgICAgIHBhZDoge1xcbiAgICAgICAgICAgIFxcXCJQa2NzN1xcXCI6IENyeXB0b0pTLnBhZC5Qa2NzNyxcXG4gICAgICAgICAgICBcXFwiWmVyb1BhZGRpbmdcXFwiOiBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcsXFxuICAgICAgICAgICAgXFxcIk5vUGFkZGluZ1xcXCI6IENyeXB0b0pTLnBhZC5Ob1BhZGRpbmcsXFxuICAgICAgICAgICAgXFxcIklzbzk3OTcxXFxcIjogQ3J5cHRvSlMucGFkLklzbzk3OTcxLFxcbiAgICAgICAgICAgIFxcXCJBbnNpWDkyM1xcXCI6IENyeXB0b0pTLnBhZC5BbnNpWDkyMyxcXG4gICAgICAgICAgICAvLyBcXFwiSXNvMTAxMjZcXFwiOiBDcnlwdG9KUy5wYWQuSXNvMTAxMjYsXFxuICAgICAgICB9LFxcbiAgICAgICAgZW5jb2RlOiB7XFxuICAgICAgICAgICAgXFxcIkJhc2U2NFxcXCI6IFxcXCJCYXNlNjRcXFwiLFxcbiAgICAgICAgICAgIFxcXCJIRVhcXFwiOiBcXFwiSEVYXFxcIlxcbiAgICAgICAgfSxcXG4gICAgICAgIGJsb2NrU2l6ZToge1xcbiAgICAgICAgICAgIFxcXCJBRVNcXFwiOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJBRVMtMTI4XFxcIjogMTI4LFxcbiAgICAgICAgICAgICAgICBcXFwiQUVTLTE5MlxcXCI6IDE5MixcXG4gICAgICAgICAgICAgICAgXFxcIkFFUy0yNTZcXFwiOiAyNTYsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIGtleUVuY29kZVR5cGU6IHtcXG4gICAgICAgICAgICBcXFwiVVRGLThcXFwiOiBcXFwiVVRGLThcXFwiLFxcbiAgICAgICAgICAgIFxcXCJIZXhcXFwiOiBcXFwiSGV4XFxcIixcXG4gICAgICAgICAgICBcXFwiTGF0aW4xXFxcIjogXFxcIkxhdGluMVxcXCJcXG4gICAgICAgIH0sXFxuICAgICAgICBpdkVuY29kZVR5cGU6IHtcXG4gICAgICAgICAgICBcXFwiVVRGLThcXFwiOiBcXFwiVVRGLThcXFwiLFxcbiAgICAgICAgICAgIFxcXCJIZXhcXFwiOiBcXFwiSGV4XFxcIixcXG4gICAgICAgICAgICBcXFwiTGF0aW4xXFxcIjogXFxcIkxhdGluMVxcXCJcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgY29uZmlnOiB7XFxuICAgICAgICB0eXBlOiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiY3J5cHRvX3R5cGVcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJBRVNcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1vZGU6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJjcnlwdG9fc2VsZWN0X21vZGVcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJDQkNcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHBhZDoge1xcbiAgICAgICAgICAgIGtleTogXFxcImNyeXB0b19zZWxlY3RfcGFkXFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiUGtjczdcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIGl2OiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiY3J5cHRvX2lucHV0X2l2XFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBlbmNvZGU6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJjcnlwdG9fb3V0cHV0X2VuY29kZVxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgQ3J5cHRvLkNvbmZpZ01hcHBpbmcuZW5jb2RlW1xcXCJCYXNlNjRcXFwiXSlcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIGtleToge1xcbiAgICAgICAgICAgIGtleTogXFxcImNyeXB0b19rZXlcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHRleHQ6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJjcnlwdG9fdGV4dFxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgY2lwaGVyVGV4dDoge1xcbiAgICAgICAgICAgIGtleTogXFxcImNyeXB0b19jaXBoZXJfdGV4dFxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgYmxvY2tTaXplOiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiY3J5cHRvX2Jsb2NrX3NpemVcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJBRVMtMTI4XFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgIH0sXFxuICAgICAgICBrZXlFbmNvZGVUeXBlOiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiY3J5cHRvX2tleV9lbmNvZGVfdHlwZVxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgLy8gVE9ETyDmraTlpITkuI3nn6XkuLrkvZUgQ3J5cHRvLkNvbmZpZ01hcHBpbmcua2V5RW5jb2RlVHlwZVtcXFwiVVRGLThcXFwiXSDkvJrmiqUgQ3J5cHRvIHVuZGVmaW5lZFxcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiVVRGLThcXFwiKVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgaXZFbmNvZGVUeXBlOiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiY3J5cHRvX2l2X2VuY29kZV90eXBlXFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiVVRGLThcXFwiKVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICB9LFxcbiAgICBvbkNsb3NlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGxldCBjb25maWdLZXlzID0gT2JqZWN0LmtleXModGhpcy5jb25maWcpO1xcbiAgICAgICAgZm9yIChsZXQgY29uZktleSBvZiBjb25maWdLZXlzKSB7XFxuICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuY29uZmlnW2NvbmZLZXldLmtleTtcXG4gICAgICAgICAgICBjbGVhclZhcihrZXkpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBidWlsZENvbmZpZzogZnVuY3Rpb24oKSB7XFxuICAgICAgICBsZXQgbW9kZSA9IHRoaXMuY29uZmlnLm1vZGUuZ2V0KCk7XFxuICAgICAgICBsZXQgcGFkID0gdGhpcy5jb25maWcucGFkLmdldCgpO1xcbiAgICAgICAgbGV0IGl2ID0gdGhpcy5jb25maWcuaXYuZ2V0KCk7XFxuICAgICAgICBsZXQgY29uZiA9IHt9O1xcbiAgICAgICAgY29uZi5tb2RlID0gdGhpcy5Db25maWdNYXBwaW5nLm1vZGVbbW9kZV07XFxuICAgICAgICBjb25mLnBhZGRpbmcgPSB0aGlzLkNvbmZpZ01hcHBpbmcucGFkW3BhZF1cXG4gICAgICAgIGlmIChtb2RlICE9IFxcXCJFQ0JcXFwiICYmIGl2Lmxlbmd0aCAhPSAwKSB7XFxuICAgICAgICAgICAgY29uZi5pdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcuaXZFbmNvZGVUeXBlLmdldCgpID09IFxcXCJIZXhcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGl2ID0gaXYucmVwbGFjZShcXFwiW0hFWF06XFxcIiwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgICAgIGNvbmYuaXYgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGl2KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLml2RW5jb2RlVHlwZS5nZXQoKSA9PSBcXFwiTGF0aW4xXFxcIikge1xcbiAgICAgICAgICAgICAgICBjb25mLml2ID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5wYXJzZShpdik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGNvbmZcXG4gICAgfSxcXG4gICAgZW5jcnlwdG9yOiBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgIC8vIOWOn+aWh1xcbiAgICAgICAgbGV0IHRleHQgPSBvYmouZGVjVGV4dDtcXG4gICAgICAgIGlmICh0ZXh0KSB7XFxuICAgICAgICAgICAgbGV0IGtleVN0cmluZyA9IHRoaXMuY29uZmlnLmtleS5nZXQoKVxcbiAgICAgICAgICAgIGxldCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXlTdHJpbmcpO1xcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5rZXlFbmNvZGVUeXBlLmdldCgpID09IFxcXCJIZXhcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGtleVN0cmluZyA9IGtleVN0cmluZy5yZXBsYWNlKFxcXCJbSEVYXTpcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAga2V5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShrZXlTdHJpbmcpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcua2V5RW5jb2RlVHlwZS5nZXQoKSA9PSBcXFwiTGF0aW4xXFxcIikge1xcbiAgICAgICAgICAgICAgICBrZXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGtleVN0cmluZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBjb25mID0gdGhpcy5idWlsZENvbmZpZygpXFxuICAgICAgICAgICAgICAgIGxldCBlbmNyeXB0ZWQgPSB0aGlzLkNvbmZpZ01hcHBpbmcuZW5jVHlwZVt0aGlzLmNvbmZpZy50eXBlLmdldCgpXSh0ZXh0LCBrZXksIGNvbmYpO1xcbiAgICAgICAgICAgICAgICBsZXQgZW5jb2RlID0gdGhpcy5jb25maWcuZW5jb2RlLmdldCgpXFxuICAgICAgICAgICAgICAgIGxldCBjaXBoZXJUZXh0ID0gZW5jcnlwdGVkLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgICAgIGlmIChlbmNvZGUgPT09ICdIRVgnKSB7XFxuICAgICAgICAgICAgICAgICAgICBjaXBoZXJUZXh0ID0gQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkoQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZShjaXBoZXJUZXh0KSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g5a+G5paHXFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmNpcGhlclRleHQuc2V0KGNpcGhlclRleHQpXFxuICAgICAgICAgICAgICAgIHJldHVybiBjaXBoZXJUZXh0O1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLmmI7mlofkuI3og73kuLrnqbrvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBkZWNyeXB0b3I6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgbGV0IHRleHQgPSBvYmouZW5jVGV4dDtcXG4gICAgICAgIGlmICh0ZXh0KSB7XFxuICAgICAgICAgICAgbGV0IGVuY29kZSA9IHRoaXMuY29uZmlnLmVuY29kZS5nZXQoKVxcbiAgICAgICAgICAgIGxldCBjaXBoZXJUZXh0O1xcbiAgICAgICAgICAgIGlmIChlbmNvZGUgPT09ICdCYXNlNjQnKSB7XFxuICAgICAgICAgICAgICAgIGNpcGhlclRleHQgPSB0ZXh0XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmNvZGUgPT09ICdIRVgnKSB7XFxuICAgICAgICAgICAgICAgIGNpcGhlclRleHQgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHRleHQpKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQga2V5U3RyaW5nID0gdGhpcy5jb25maWcua2V5LmdldCgpXFxuICAgICAgICAgICAgbGV0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleVN0cmluZyk7XFxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCkgPT0gXFxcIkhleFxcXCIpIHtcXG4gICAgICAgICAgICAgICAga2V5U3RyaW5nID0ga2V5U3RyaW5nLnJlcGxhY2UoXFxcIltIRVhdOlxcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICBrZXkgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGtleVN0cmluZyk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5rZXlFbmNvZGVUeXBlLmdldCgpID09IFxcXCJMYXRpbjFcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGtleSA9IENyeXB0b0pTLmVuYy5MYXRpbjEucGFyc2Uoa2V5U3RyaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgbGV0IGNvbmYgPSB0aGlzLmJ1aWxkQ29uZmlnKClcXG4gICAgICAgICAgICAgICAgbGV0IGRlY3J5cHRlZCA9IHRoaXMuQ29uZmlnTWFwcGluZy5kZWNUeXBlW3RoaXMuY29uZmlnLnR5cGUuZ2V0KCldKGNpcGhlclRleHQsIGtleSwgY29uZik7XFxuICAgICAgICAgICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0ZWQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcbiAgICAgICAgICAgICAgICBpZiAoIWRlY3J5cHRlZFN0cikge1xcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fmo4Dmn6Xlr4bpkqUga2V544CB5YGP56e76YePIGl2IOS7peWPiuWvhuaWh+aYr+WQpuato+ehru+8gVxcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnRleHQuc2V0KGRlY3J5cHRlZFN0cilcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0clxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLop6Plr4blpLHotKXvvIFcXFwiICsgZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5a+G5paH5LiN6IO95Li656m677yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgY2hlY2tLZXk6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgbGV0IGtleSA9IENyeXB0by5jb25maWcua2V5LmdldCgpO1xcbiAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDApIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuWvhumSpSBrZXkg5LiN6IO95Li656m677yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0eXBlID0gQ3J5cHRvLmNvbmZpZy50eXBlLmdldCgpO1xcbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IDEyODtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgYmxvY2tTaXplID0gQ3J5cHRvLkNvbmZpZ01hcHBpbmdbXFxcImJsb2NrU2l6ZVxcXCJdW3R5cGVdW0NyeXB0by5jb25maWcuYmxvY2tTaXplLmdldCgpXVxcbiAgICAgICAgICAgIC8vIGxvZyhcXFwiY2hlY2tLZXkjYmxvY2tTaXplOlxcXCIgKyBibG9ja1NpemUpXFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJERVNcXFwiKSB7XFxuICAgICAgICAgICAgYmxvY2tTaXplID0gNjQ7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoQ3J5cHRvLmNvbmZpZy5rZXlFbmNvZGVUeXBlLmdldCgpID09IFxcXCJIZXhcXFwiKSB7XFxuICAgICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoXFxcIltIRVhdOlxcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgICAgIGJsb2NrU2l6ZSA9IGJsb2NrU2l6ZSAqIDI7XFxuICAgICAgICB9XFxuICAgICAgICAvLyDorr7nva7mlbDmja7lnZfplb/luqZcXG4gICAgICAgIGxldCBrZXlTaXplID0ga2V5Lmxlbmd0aCAqIDg7XFxuICAgICAgICAvLyBsb2coXFxcImNoZWNrS2V5I2tleVNpemU6XFxcIiArIGtleVNpemUpXFxuICAgICAgICAvLyBsb2coXFxcImNoZWNrS2V5I2tleVNpemUvODpcXFwiICsga2V5U2l6ZS84KVxcbiAgICAgICAgLy8gbG9nKFxcXCJjaGVja0tleSNibG9ja1NpemU6XFxcIiArIGJsb2NrU2l6ZSlcXG4gICAgICAgIC8vIGxvZyhcXFwiY2hlY2tLZXkjYmxvY2tTaXplLzg6XFxcIiArIGJsb2NrU2l6ZSAvIDgpXFxuICAgICAgICBpZiAoa2V5U2l6ZSA8IGJsb2NrU2l6ZSkge1xcbiAgICAgICAgICAgIG9iai5mcm9tID0gQ3J5cHRvLmNvbmZpZy5rZXlFbmNvZGVUeXBlLmtleVxcbiAgICAgICAgICAgIGxldCBuZXdLZXkgPSBDcnlwdG8uZmlsbEtleXMob2JqLCBrZXksIGJsb2NrU2l6ZSAvIDgpO1xcbiAgICAgICAgICAgIENyeXB0by5jb25maWcua2V5LnNldChuZXdLZXkpXFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJjaGVja0tleSNuZXdLZXk6IFxcXCIgKyBuZXdLZXkpXFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJjaGVja0tleSNuZXdLZXkuU2l6ZTogXFxcIiArIG5ld0tleS5sZW5ndGggKiA4KVxcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5a+G6ZKlIGtleSDplb/luqbov4fnn63vvIzlt7Loh6rliqggYFxcXFxcXFxceDAwYCDnqbrloavlhYXvvIzor7flho3mrKHmiafooYzliqAv6Kej5a+GJylcXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5U2l6ZSA+IGJsb2NrU2l6ZSkge1xcbiAgICAgICAgICAgIC8vIFRPRE8g6LaF5Ye66YOo5YiG5bCG6KKr5b+955WlXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlr4bpkqUga2V5IOmVv+W6piBcXFwiICsga2V5Lmxlbmd0aCArIFxcXCIg6L+H6ZW/77yM6ZW/5bqm5bqU5Li6IFxcXCIgKyBibG9ja1NpemUgLyA4ICsgXFxcIu+8jOivt+iHquihjOajgOafpe+8jOeEtuWQjumHjeaWsOaJp+ihjOWKoC/op6Plr4ZcXFwiKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGNoZWNrSXY6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgbGV0IGl2ID0gQ3J5cHRvLmNvbmZpZy5pdi5nZXQoKTtcXG4gICAgICAgIGxldCBtb2RlID0gQ3J5cHRvLmNvbmZpZy5tb2RlLmdldCgpO1xcbiAgICAgICAgaWYgKG1vZGUgPT09ICdFQ0InKSB7XFxuICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGl2Lmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5YGP56e76YePIGl2IOS4jeiDveS4uuepuu+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdHlwZSA9IENyeXB0by5jb25maWcudHlwZS5nZXQoKTtcXG4gICAgICAgIGxldCBibG9ja1NpemUgPSAxMjg7XFxuICAgICAgICBpZiAodHlwZSA9PT0gJ0RFUycgfHwgdHlwZSA9PT0gJzNERVMnKSB7XFxuICAgICAgICAgICAgYmxvY2tTaXplID0gNjQ7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoQ3J5cHRvLmNvbmZpZy5pdkVuY29kZVR5cGUuZ2V0KCkgPT0gXFxcIkhleFxcXCIpIHtcXG4gICAgICAgICAgICBpdiA9IGl2LnJlcGxhY2UoXFxcIltIRVhdOlxcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgICAgIGJsb2NrU2l6ZSA9IGJsb2NrU2l6ZSAqIDI7XFxuICAgICAgICB9XFxuICAgICAgICAvLyDorr7nva7mlbDmja7lnZfplb/luqZcXG4gICAgICAgIGxldCBpdlNpemUgPSBpdi5sZW5ndGggKiA4O1xcbiAgICAgICAgaWYgKGl2U2l6ZSA8IGJsb2NrU2l6ZSkge1xcbiAgICAgICAgICAgIG9iai5mcm9tID0gQ3J5cHRvLmNvbmZpZy5pdkVuY29kZVR5cGUua2V5XFxuICAgICAgICAgICAgbGV0IG5ld0l2ID0gQ3J5cHRvLmZpbGxLZXlzKG9iaiwgaXYsIGJsb2NrU2l6ZSAvIDgpO1xcbiAgICAgICAgICAgIENyeXB0by5jb25maWcuaXYuc2V0KG5ld0l2KVxcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5YGP56e76YePIGl2IOmVv+W6pui/h+efre+8jOW3suiHquWKqCBgXFxcXFxcXFx4MDBgIOepuuWhq+WFhe+8jOivt+WGjeasoeaJp+ihjOWKoC/op6Plr4ZcXFwiKVxcbiAgICAgICAgfSBlbHNlIGlmIChpdlNpemUgPiBibG9ja1NpemUpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuWBj+enu+mHjyBpdiDplb/luqYgXFxcIiArIGl2Lmxlbmd0aCArIFxcXCIg6L+H6ZW/77yM6ZW/5bqm5bqU5Li6IFxcXCIgKyBibG9ja1NpemUgLyA4ICsgXFxcIu+8jOivt+iHquihjOajgOafpe+8jOeEtuWQjumHjeaWsOaJp+ihjOWKoC/op6Plr4ZcXFwiKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDlr4bpkqUgYFxcXFx4MDBgIOepuuWhq+WFhVxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IOWvhumSpVxcbiAgICAgKiBAcGFyYW0ge051bWJlcn0ga2V5U2l6ZSDloavlhYXplb/luqYsIOWAvDogMTI4LCAxOTIsIDI1NlxcbiAgICAgKi9cXG4gICAgZmlsbEtleXM6IGZ1bmN0aW9uKG9iaiwga2V5LCBrZXlTaXplKSB7XFxuICAgICAgICBsZXQgVG9vbCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPVxcXCIgKyBvYmoucnVsZVRpdGxlKTtcXG4gICAgICAgIGxldCBlbmNvZGVUeXBlID0gXFxcIlVURi04XFxcIlxcbiAgICAgICAgaWYgKG9iai5mcm9tID09IENyeXB0by5jb25maWcua2V5RW5jb2RlVHlwZS5rZXkpIHtcXG4gICAgICAgICAgICBlbmNvZGVUeXBlID0gQ3J5cHRvLmNvbmZpZy5rZXlFbmNvZGVUeXBlLmdldCgpO1xcbiAgICAgICAgfSBlbHNlIGlmIChvYmouZnJvbSA9PSBDcnlwdG8uY29uZmlnLml2RW5jb2RlVHlwZS5rZXkpIHtcXG4gICAgICAgICAgICBlbmNvZGVUeXBlID0gQ3J5cHRvLmNvbmZpZy5pdkVuY29kZVR5cGUuZ2V0KCk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZW5jb2RlVHlwZSA9PSBcXFwiSGV4XFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiW0hFWF06XFxcIiArIFRvb2wuZmlsbFplcm9QYWRkaW5nKGtleSwga2V5U2l6ZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gVG9vbC5maWxsTnVsbFBhZGRpbmcoa2V5LCBrZXlTaXplKTtcXG4gICAgfSxcXG4gICAgQUVTOiB7XFxuICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgICAgICBDcnlwdG8uY29uZmlnLnR5cGUuc2V0KFxcXCJBRVNcXFwiKVxcbiAgICAgICAgICAgIC8vIGxvZyhcXFwiQUVTLUVuY3J5cHQtb2JqOlxcXCIgKyBKU09OLnN0cmluZ2lmeShvYmopKVxcbiAgICAgICAgICAgIHJldHVybiBDcnlwdG8uZW5jcnlwdG9yKG9iaik7XFxuICAgICAgICB9LFxcbiAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24ob2JqKSB7XFxuICAgICAgICAgICAgQ3J5cHRvLmNvbmZpZy50eXBlLnNldChcXFwiQUVTXFxcIilcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvLmRlY3J5cHRvcihvYmopO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBERVM6IHtcXG4gICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIENyeXB0by5jb25maWcudHlwZS5zZXQoXFxcIkRFU1xcXCIpXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0by5lbmNyeXB0b3Iob2JqKTtcXG4gICAgICAgIH0sXFxuICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgICAgICBDcnlwdG8uY29uZmlnLnR5cGUuc2V0KFxcXCJERVNcXFwiKVxcbiAgICAgICAgICAgIHJldHVybiBDcnlwdG8uZGVjcnlwdG9yKG9iaik7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIFxcXCIzREVTXFxcIjoge1xcbiAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24ob2JqKSB7XFxuICAgICAgICAgICAgQ3J5cHRvLmNvbmZpZy50eXBlLnNldChcXFwiM0RFU1xcXCIpXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0by5lbmNyeXB0b3Iob2JqKTtcXG4gICAgICAgIH0sXFxuICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgICAgICBDcnlwdG8uY29uZmlnLnR5cGUuc2V0KFxcXCIzREVTXFxcIilcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvLmRlY3J5cHRvcihvYmopO1xcbiAgICAgICAgfVxcblxcbiAgICB9LFxcbn1cXG5cXG4kLmV4cG9ydHMgPSBDcnlwdG87XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIue8lueggeexu+eul+azleaooeadv1wiLFwicGF0aFwiOlwidGVtcGxhdGVfZW5jb2RlXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgdGVtcGxhdGUgPSB7fTtcXG4vLyDnvJbnoIFcXG50ZW1wbGF0ZS5lbmNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgbG9nKFxcXCLmiJHmmK/ljp/mlodcXFwiKyBvYmouZGVjVGV4dClcXG4gICAgbGV0IGVuY29kZSA9IFxcXCLljp/mlofpgJrov4fliqDlr4blvpfliLDnmoTlr4bmloflrZfnrKbkuLJcXFwiO1xcbiAgICByZXR1cm4gZW5jb2RlO1xcbn1cXG4vLyDop6PnoIFcXG50ZW1wbGF0ZS5kZWNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgbG9nKFxcXCLmiJHmmK/lr4bmlodcXFwiKyBvYmouZW5jVGV4dClcXG4gICAgbGV0IGRlY29kZSA9IFxcXCLlr4bmlofpgJrov4fop6Plr4blvpfliLDnmoTljp/mloflrZfnrKbkuLJcXFwiO1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4vLyDlr7zlh7rnu5nlpJbpg6jpgJrov4cgcmVxdWlyZSDmlrnms5Xkvb/nlKhcXG4kLmV4cG9ydHMudGVtcGxhdGUgPSB0ZW1wbGF0ZVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCJBRVMtVUlcIixcInBhdGhcIjpcImFlc3VpXCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiBidWlsZEFFU1VpKGQsIG9iaikge1xcbiAgICBsZXQgY29uZmlnID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpLmNvbmZpZztcXG4gICAgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCJBRVNcXFwiKSkge1xcbiAgICAgICAgY29uZmlnLnR5cGUuc2V0KFxcXCJBRVNcXFwiKVxcbiAgICB9XFxuICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwiREVTXFxcIikgJiYgIW9iai50eXBlLmluY2x1ZGVzKFxcXCIzREVTXFxcIikpIHtcXG4gICAgICAgIGNvbmZpZy50eXBlLnNldChcXFwiREVTXFxcIilcXG4gICAgfVxcbiAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIjNERVNcXFwiKSkge1xcbiAgICAgICAgY29uZmlnLnR5cGUuc2V0KFxcXCIzREVTXFxcIilcXG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbC5sbWVlZS5jb20vamlhbWkvZGVzMyDor7TmmI7vvJozREVT5pWw5o2u5Z2X6ZW/5bqm5Li6NjTkvY3vvIzmiYDku6VJVumVv+W6pumcgOimgeS4ujjkuKrlrZfnrKbvvIhFQ0LmqKHlvI/kuI3nlKhJVu+8ie+8jOWvhumSpemVv+W6puS4ujE25oiWMjTkuKrlrZfnrKbvvIg45Liq5a2X56ym5Lul5YaF5YiZ57uT5p6c5LiOREVT55u45ZCM77yJ77yMSVbkuI7lr4bpkqXotoXov4fplb/luqbliJnmiKrlj5bvvIzkuI3otrPliJnlnKjmnKvlsL7loavlhYUnXFxcXDAn6KGl6LazXFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5Yqg5a+GXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXmmI7mlodcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoXFxcImNyeXB0b190ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcImNyeXB0b190ZXh0XFxcIixpbnB1dCknXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICBvYmouZGVjVGV4dCA9IGlucHV0O1xcbiAgICAgICAgICAgIC8vIGxvZyhcXFwib2JqLmRlY1RleHQ6IFxcXCIgKyBvYmouZGVjVGV4dClcXG4gICAgICAgICAgICBsZXQgdG9hc3RUZXh0ID0gXFxcIuWKoOWvhuaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgdmFyIGNpcGhlclRleHQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgQ3J5cHRvID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpO1xcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBDcnlwdG8uY29uZmlnO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIENyeXB0by5jaGVja0tleShvYmopO1xcbiAgICAgICAgICAgICAgICBDcnlwdG8uY2hlY2tJdihvYmopO1xcbiAgICAgICAgICAgICAgICBvYmoudG9vbHNbXFxcIkFFU1xcXCJdID0gQ3J5cHRvLkFFUztcXG4gICAgICAgICAgICAgICAgb2JqLnRvb2xzW1xcXCJERVNcXFwiXSA9IENyeXB0by5ERVM7XFxuICAgICAgICAgICAgICAgIG9iai50b29sc1tcXFwiM0RFU1xcXCJdID0gQ3J5cHRvW1xcXCIzREVTXFxcIl07XFxuICAgICAgICAgICAgICAgIHZhciB0b29sID0ge307XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoudG9vbHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwiM0RFU1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbCA9IG9iai50b29sc1tcXFwiM0RFU1xcXCJdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai50eXBlLmluY2x1ZGVzKGtleSkgJiYgIW9iai50eXBlLmluY2x1ZGVzKFxcXCIzREVTXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sID0gb2JqLnRvb2xzW2tleV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY2lwaGVyVGV4dCA9IHRvb2wuZW5jcnlwdChvYmopO1xcbiAgICAgICAgICAgICAgICAvLyBsb2coXFxcImNpcGhlclRleHQ6IFxcXCIgKyBjaXBoZXJUZXh0KVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgY2lwaGVyVGV4dCA9IGUubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgdG9hc3RUZXh0ID0gXFxcIuWKoOWvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvbmZpZy5jaXBoZXJUZXh0LnNldChjaXBoZXJUZXh0KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycgKyB0b2FzdFRleHQ7XFxuICAgICAgICB9LCBvYmopLFxcbiAgICB9KTtcXG4gICAgYnVpbGRDb25maWdzVUkoZCwgb2JqKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6Kej5a+GXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXlr4bmlodcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoXFxcImNyeXB0b19jaXBoZXJfdGV4dFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJjcnlwdG9fY2lwaGVyX3RleHRcXFwiLGlucHV0KSdcXG4gICAgICAgIH0sXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgIG9iai5lbmNUZXh0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJvYmouZW5jVGV4dDogXFxcIiArIG9iai5lbmNUZXh0KVxcbiAgICAgICAgICAgIGxldCB0b2FzdFRleHQgPSBcXFwi6Kej5a+G5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICBsZXQgQ3J5cHRvID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpO1xcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IENyeXB0by5jb25maWc7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgQ3J5cHRvLmNoZWNrS2V5KG9iaik7XFxuICAgICAgICAgICAgICAgIENyeXB0by5jaGVja0l2KG9iaik7XFxuICAgICAgICAgICAgICAgIG9iai50b29sc1tcXFwiQUVTXFxcIl0gPSBDcnlwdG8uQUVTO1xcbiAgICAgICAgICAgICAgICBvYmoudG9vbHNbXFxcIkRFU1xcXCJdID0gQ3J5cHRvLkRFU1xcbiAgICAgICAgICAgICAgICB2YXIgdG9vbCA9IHt9O1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqLnRvb2xzKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoa2V5KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2wgPSBvYmoudG9vbHNba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyBsb2cob2JqLmVuY1RleHQpXFxuICAgICAgICAgICAgICAgIHRleHQgPSB0b29sLmRlY3J5cHQob2JqKTtcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIHRleHQgPSBlLm1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgIHRvYXN0VGV4dCA9IFxcXCLop6Plr4blpLHotKVcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25maWcudGV4dC5zZXQodGV4dClcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgdG9hc3RUZXh0O1xcbiAgICAgICAgfSwgb2JqKSxcXG4gICAgfSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ1aWxkQ29uZmlnc1VJKGQsIG9iaikge1xcbiAgICBsZXQgQ3J5cHRvID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpO1xcbiAgICBsZXQgQ29uZmlnTWFwcGluZyA9IENyeXB0by5Db25maWdNYXBwaW5nO1xcbiAgICBsZXQgY29uZmlnID0gQ3J5cHRvLmNvbmZpZztcXG4gICAgbGV0IG1hcHBpbmdLZXlzID0gT2JqZWN0LmtleXMoQ29uZmlnTWFwcGluZyk7XFxuICAgIGxldCBtb2RlcyA9IE9iamVjdC5rZXlzKENvbmZpZ01hcHBpbmdbXFxcIm1vZGVcXFwiXSk7XFxuICAgIC8vIGxvZyhKU09OLnN0cmluZ2lmeShtb2RlcykpXFxuICAgIGxldCBwYWRkaW5ncyA9IE9iamVjdC5rZXlzKENvbmZpZ01hcHBpbmdbXFxcInBhZFxcXCJdKTtcXG4gICAgLy8gbG9nKEpTT04uc3RyaW5naWZ5KHBhZGRpbmdzKSlcXG4gICAgbGV0IGVuY29kZXMgPSBPYmplY3Qua2V5cyhDb25maWdNYXBwaW5nW1xcXCJlbmNvZGVcXFwiXSk7XFxuICAgIC8vIGxvZyhKU09OLnN0cmluZ2lmeShlbmNvZGVzKSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiYmxhY2tcXFwiPuaooeW8jzwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pXFxuICAgIGZvciAobGV0IG1vZGUgb2YgbW9kZXMpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG1vZGUgPT0gY29uZmlnLm1vZGUuZ2V0KCkgPyBcXFwi4oCY4oCYXFxcIiArIG1vZGUgKyBcXFwi4oCZ4oCZXFxcIiA6IG1vZGUsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChtb2RlLCBjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLm1vZGUuc2V0KG1vZGUpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIG1vZGUsIGNvbmZpZyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcImJsYWNrXFxcIj7loavlhYU8L2ZvbnQ+PC9zdHJvbmc+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbiAgICBmb3IgKGxldCBwYWRkaW5nIG9mIHBhZGRpbmdzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwYWRkaW5nID09IGNvbmZpZy5wYWQuZ2V0KCkgPyBcXFwi4oCY4oCYXFxcIiArIHBhZGRpbmcgKyBcXFwi4oCZ4oCZXFxcIiA6IHBhZGRpbmcsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYWRkaW5nLCBjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnBhZC5zZXQocGFkZGluZylcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgcGFkZGluZywgY29uZmlnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgfSlcXG5cXG4gICAgaWYgKGNvbmZpZy50eXBlLmdldCgpID09ICdBRVMnKSB7XFxuICAgICAgICBsZXQgYmxvY2tTaXplcyA9IE9iamVjdC5rZXlzKENvbmZpZ01hcHBpbmdbXFxcImJsb2NrU2l6ZVxcXCJdW2NvbmZpZy50eXBlLmdldCgpXSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiYmxhY2tcXFwiPuaVsOaNruWdlzwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pXFxuICAgICAgICBmb3IgKGxldCBibG9ja1NpemUgb2YgYmxvY2tTaXplcykge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBibG9ja1NpemUgPT0gY29uZmlnLmJsb2NrU2l6ZS5nZXQoKSA/IFxcXCLigJjigJhcXFwiICsgYmxvY2tTaXplICsgXFxcIuKAmeKAmVxcXCIgOiBibG9ja1NpemUsXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoYmxvY2tTaXplLCBjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5ibG9ja1NpemUuc2V0KGJsb2NrU2l6ZSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgYmxvY2tTaXplLCBjb25maWcpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcImJsYWNrXFxcIj7lr4bmlofnvJbnoIE8L2ZvbnQ+PC9zdHJvbmc+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbiAgICBmb3IgKGxldCBlbmNvZGUgb2YgZW5jb2Rlcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZW5jb2RlID09IGNvbmZpZy5lbmNvZGUuZ2V0KCkgPyBcXFwi4oCY4oCYXFxcIiArIGVuY29kZSArIFxcXCLigJnigJlcXFwiIDogZW5jb2RlLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoZW5jb2RlLCBjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLmVuY29kZS5zZXQoZW5jb2RlKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgZW5jb2RlLCBjb25maWcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIC8vIEFFUyDlr4bpkqUga2V5IDE2LzI0LzMyIOWtl+espiA9PiAxMjgvMTkyLzI1NiBiaXRcXG4gICAgbGV0IGJsb2NrU2l6ZSA9IDEyODtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGJsb2NrU2l6ZSA9IENvbmZpZ01hcHBpbmdbXFxcImJsb2NrU2l6ZVxcXCJdW2NvbmZpZy50eXBlLmdldCgpXVtjb25maWcuYmxvY2tTaXplLmdldCgpXVxcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBpZiAoY29uZmlnLnR5cGUuZ2V0KCkgPT09IFxcXCJERVNcXFwiKSB7XFxuICAgICAgICBibG9ja1NpemUgPSA2NDtcXG4gICAgfVxcbiAgICBvYmouYmxvY2tTaXplID0gYmxvY2tTaXplO1xcbiAgICBsZXQga2V5TGVuID0gYmxvY2tTaXplIC8gODtcXG4gICAgbGV0IGtleUxlblN0ciA9IGtleUxlbiArIFxcXCIg5Liq5a2X56ymXFxcIlxcbiAgICBpZiAoY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCkgPT0gJ0hleCcpIHtcXG4gICAgICAgIGtleUxlblN0ciA9IChrZXlMZW4gKiAyKSArIFxcXCIg5Liq5Y2B5YWt6L+b5Yi25a2X56ymXFxcIjtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLpmo/mnLoga2V5XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLlr4bpkqUga2V5LCDlv4XpobsgXFxcIiArIGtleUxlblN0cixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIC8qaGVpZ2h0OiAtMSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLCovXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcua2V5LmdldCgpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKChjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLmtleS5zZXQoaW5wdXQpXFxuICAgICAgICAgICAgfSwgY29uZmlnKVxcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygob2JqLCBjb25maWcpID0+IHtcXG4gICAgICAgICAgICBsZXQgVG9vbCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPVxcXCIgKyBvYmoucnVsZVRpdGxlKTtcXG4gICAgICAgICAgICBsZXQga2V5TGVuID0gb2JqLmJsb2NrU2l6ZSAvIDg7XFxuICAgICAgICAgICAgaWYgKGNvbmZpZy50eXBlLmdldCgpID09PSAnREVTJykge1xcbiAgICAgICAgICAgICAgICBrZXlMZW4gPSA4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgcmFuZG9tS2V5ID0gVG9vbC5yYW5kb21TdHJpbmcoa2V5TGVuKTtcXG4gICAgICAgICAgICBpZiAoY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCkgPT0gJ0hleCcpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGhleCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hleD9ydWxlPVxcXCIgKyBvYmoucnVsZVRpdGxlKS5oZXg7XFxuICAgICAgICAgICAgICAgIG9iai5kZWNUZXh0ID0gcmFuZG9tS2V5XFxuICAgICAgICAgICAgICAgIHJhbmRvbUtleSA9IGhleC5lbmNvZGUob2JqKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25maWcua2V5LnNldChyYW5kb21LZXkpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgfSwgb2JqLCBjb25maWcpXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3Ryb25nPjxmb250IGNvbG9yPVxcXCJibGFja1xcXCI+5a+G6ZKl57yW56CBPC9mb250Pjwvc3Ryb25nPicsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgIGNvbmZpZy5rZXlFbmNvZGVUeXBlLnNldChcXFwiVVRGLThcXFwiKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mHjee9ruaIkOWKn++8gVxcXCI7XFxuICAgICAgICB9LCBjb25maWcpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbiAgICBsZXQga2V5RW5jb2RlVHlwZXMgPSBPYmplY3Qua2V5cyhDb25maWdNYXBwaW5nW1xcXCJrZXlFbmNvZGVUeXBlXFxcIl0pO1xcbiAgICAvLyBsb2coSlNPTi5zdHJpbmdpZnkoa2V5RW5jb2RlVHlwZXMpKVxcbiAgICBmb3IgKGxldCBrZXlFbmNvZGVUeXBlIG9mIGtleUVuY29kZVR5cGVzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBrZXlFbmNvZGVUeXBlID09IGNvbmZpZy5rZXlFbmNvZGVUeXBlLmdldCgpID8gXFxcIuKAmOKAmFxcXCIgKyBrZXlFbmNvZGVUeXBlICsgXFxcIuKAmeKAmVxcXCIgOiBrZXlFbmNvZGVUeXBlLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoa2V5RW5jb2RlVHlwZSwgY29uZmlnLCBvYmopID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHRvYXN0VGV4dCA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgbGV0IGhleCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hleD9ydWxlPVxcXCIgKyBvYmoucnVsZVRpdGxlKS5oZXg7XFxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBjb25maWcua2V5LmdldCgpO1xcbiAgICAgICAgICAgICAgICBsZXQgb2xkS2V5RW5jb2RlVHlwZSA9IGNvbmZpZy5rZXlFbmNvZGVUeXBlLmdldCgpO1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9sZEtleUVuY29kZVR5cGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIlVURi04XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5RW5jb2RlVHlwZSA9PSBcXFwiSGV4XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZGVjVGV4dCA9IGtleVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmtleS5zZXQoaGV4LmVuY29kZShvYmopKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5rZXlFbmNvZGVUeXBlLnNldChrZXlFbmNvZGVUeXBlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJIZXhcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmtleUVuY29kZVR5cGUuc2V0KGtleUVuY29kZVR5cGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3RUZXh0ID0gJ3RvYXN0Oi8v5b2T5YmN5LiN5pSv5oyBIEhleCDovazlhbbku5bnvJbnoIHvvIzoi6XpnIDopoHph43nva7pgInpobnor7fngrnlh7tb5a+G6ZKl57yW56CBXSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvYXN0VGV4dDtcXG4gICAgICAgICAgICB9LCBrZXlFbmNvZGVUeXBlLCBjb25maWcsIG9iaiksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGNvbmZpZy5tb2RlLmdldCgpICE9PSBcXFwiRUNCXFxcIikge1xcbiAgICAgICAgbGV0IGl2U2l6ZSA9IChjb25maWcudHlwZS5nZXQoKSA9PT0gXFxcIkRFU1xcXCIgfHwgY29uZmlnLnR5cGUuZ2V0KCkgPT09IFxcXCIzREVTXFxcIikgPyA2NCA6IDEyODtcXG4gICAgICAgIG9iai5pdlNpemUgPSBpdlNpemU7XFxuICAgICAgICBsZXQgaXZMZW4gPSBpdlNpemUgLyA4O1xcbiAgICAgICAgbGV0IGl2TGVuU3RyID0gaXZMZW4gKyBcXFwiIOS4quWtl+esplxcXCJcXG4gICAgICAgIGlmIChjb25maWcuaXZFbmNvZGVUeXBlLmdldCgpID09ICdIZXgnKSB7XFxuICAgICAgICAgICAgaXZMZW5TdHIgPSAoaXZMZW4gKiAyKSArIFxcXCIg5Liq5Y2B5YWt6L+b5Yi25a2X56ymXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLpmo/mnLogaXZcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCLlgY/np7vph48gaXYsIOW/hemhuyBcXFwiICsgaXZMZW5TdHIsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgLypoZWlnaHQ6IC0xLFxcbiAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLCovXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnLml2LmdldCgpLFxcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoY29uZmlnKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjb25maWcuaXYuc2V0KGlucHV0KVxcbiAgICAgICAgICAgICAgICB9LCBjb25maWcpXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaiwgY29uZmlnKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBUb29sID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICBsZXQgaXZMZW4gPSBvYmouaXZTaXplIC8gODtcXG4gICAgICAgICAgICAgICAgbGV0IHJhbmRvbUl2ID0gVG9vbC5yYW5kb21TdHJpbmcoaXZMZW4pO1xcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLml2RW5jb2RlVHlwZS5nZXQoKSA9PSAnSGV4Jykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhleCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hleD9ydWxlPVxcXCIgKyBvYmoucnVsZVRpdGxlKS5oZXg7XFxuICAgICAgICAgICAgICAgICAgICBvYmouZGVjVGV4dCA9IHJhbmRvbUl2XFxuICAgICAgICAgICAgICAgICAgICByYW5kb21JdiA9IGhleC5lbmNvZGUob2JqKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNvbmZpZy5pdi5zZXQocmFuZG9tSXYpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICB9LCBvYmosIGNvbmZpZylcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcImJsYWNrXFxcIj7lgY/np7vph4/nvJbnoIE8L2ZvbnQ+PC9zdHJvbmc+JyxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25maWcuaXZFbmNvZGVUeXBlLnNldChcXFwiVVRGLThcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6YeN572u5oiQ5Yqf77yBXFxcIjtcXG4gICAgICAgICAgICB9LCBjb25maWcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pXFxuICAgICAgICBsZXQgaXZFbmNvZGVUeXBlcyA9IE9iamVjdC5rZXlzKENvbmZpZ01hcHBpbmdbXFxcIml2RW5jb2RlVHlwZVxcXCJdKTtcXG4gICAgICAgIC8vIGxvZyhKU09OLnN0cmluZ2lmeShrZXlFbmNvZGVUeXBlcykpXFxuICAgICAgICBmb3IgKGxldCBpdkVuY29kZVR5cGUgb2YgaXZFbmNvZGVUeXBlcykge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdkVuY29kZVR5cGUgPT0gY29uZmlnLml2RW5jb2RlVHlwZS5nZXQoKSA/IFxcXCLigJjigJhcXFwiICsgaXZFbmNvZGVUeXBlICsgXFxcIuKAmeKAmVxcXCIgOiBpdkVuY29kZVR5cGUsXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaXZFbmNvZGVUeXBlLCBjb25maWcsIG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvYXN0VGV4dCA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoZXggPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9oZXg/cnVsZT1cXFwiICsgb2JqLnJ1bGVUaXRsZSkuaGV4O1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl2ID0gY29uZmlnLml2LmdldCgpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9sZEl2RW5jb2RlVHlwZSA9IGNvbmZpZy5pdkVuY29kZVR5cGUuZ2V0KCk7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9sZEl2RW5jb2RlVHlwZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIlVURi04XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl2RW5jb2RlVHlwZSA9PSBcXFwiSGV4XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmRlY1RleHQgPSBpdlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl2Lmxlbmd0aCAhPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pdi5zZXQoaGV4LmVuY29kZShvYmopKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pdkVuY29kZVR5cGUuc2V0KGl2RW5jb2RlVHlwZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiSGV4XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl2Lmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuaXZFbmNvZGVUeXBlLnNldChpdkVuY29kZVR5cGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3RUZXh0ID0gJ3RvYXN0Oi8v5b2T5YmN5LiN5pSv5oyBIEhleCDovazlhbbku5bnvJbnoIHvvIzoi6XpnIDopoHph43nva7pgInpobnor7fngrnlh7tb5YGP56e76YeP57yW56CBXSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2FzdFRleHQ7XFxuICAgICAgICAgICAgICAgIH0sIGl2RW5jb2RlVHlwZSwgY29uZmlnLCBvYmopLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBjb25maWcuaXYuc2V0KFxcXCJcXFwiKTtcXG4gICAgfVxcbn1cXG4kLmV4cG9ydHMuYnVpbGRBRVNVaSA9IGJ1aWxkQUVTVWlcIn0se1wiY29sX3R5cGVcIjpcInJpY2hfdGV4dFwiLFwibmFtZVwiOlwiUlNBLVVJXCIsXCJwYXRoXCI6XCJyc2F1aVwiLFwicnVsZVwiOlwianM6XFxubGV0IG5hdmlnYXRvciA9IHt9O1xcbmxldCB3aW5kb3cgPSB7XFxuICAgIG5hdmlnYXRvcjogbmF2aWdhdG9yXFxufTtcXG5cXG5mdW5jdGlvbiBidWlsZFJTQVVpKGQsIG9iaikge1xcbiAgICAvKmQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxwIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7nm67liY3ml6Dms5Xlrp7njrDvvIzmlazor7fmnJ/lvoXvvIjlkpXlkpXlkpXvvIl+PC9wPicsXFxuICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgfSkqL1xcbiAgICAvLyBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2tleXBhaXJAMS4wLjMvaW5kZXgubWluLmpzXFxuICAgIC8vIGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC93d3d0eXJvL2NyeXB0aWNvQG1hc3Rlci9jcnlwdGljby5taW4uanNcXG4gICAgLy8gbGV0IGNyeXB0aWNvID0gcmVxdWVzdChcXFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3d3d3R5cm8vY3J5cHRpY29AbWFzdGVyL2NyeXB0aWNvLm1pbi5qc1xcXCIpXFxuICAgIC8vIGV2YWwoY3J5cHRpY28pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmuIXnqbpcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6ICfor7fovpPlhaUgUEVNIOagvOW8j+eahOWFrOmSpeaIluengemSpe+8jOS7pSBcXFwiLS0tLS1CRUdJTiBYWFggS0VZLS0tLS1cXFwiIOW8gOWktO+8jFxcXCItLS0tLUVORCBYWCBLRVktLS0tLVxcXCIg57uT5bC+77yI5Lmf5Y+v5Lul5rKh5pyJ6L+Z5Lik5Liq5qCH6K+G77yJJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJyc2FfcHViX29yX3ByaV9rZXlcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcInJzYV9wdWJfb3JfcHJpX2tleVxcXCIsaW5wdXQpJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwicnNhX3B1Yl9vcl9wcmlfa2V5XFxcIilcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBvYmopXFxuICAgICAgICB9XFxuICAgICAgICAvKiwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIueUn+aIkFxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaUv55Sf5oiQ56eB6ZKlXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoXFxcInJzYV9wcmlfa2V5XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJyc2FfcHJpX2tleVxcXCIsaW5wdXQpJ1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBvYmopXFxuICAgICAgICAgICAgfSovXFxuICAgIClcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5riF56m6XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXpnIDopoHliqDlr4bmiJbop6Plr4bnmoTlhoXlrrlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwicnNhX2hhbmRsZV90ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRNeVZhcihcXFwicnNhX2hhbmRsZV90ZXh0XFxcIixpbnB1dCknXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICBjbGVhck15VmFyKFxcXCJyc2FfaGFuZGxlX3RleHRcXFwiKVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0sIG9iailcXG4gICAgfSlcXG4gICAgb2JqLm1vZGVzID0gW1xcXCLmraPluLjmqKHlvI9cXFwiLCBcXFwi5Y+Y5oCB5qih5byPXFxcIl1cXG4gICAgb2JqLmNob2ljZXMgPSBbXFxcIuaYr1xcXCIsIFxcXCLlkKZcXFwiXVxcblxcbiAgICBmdW5jdGlvbiBpc05vcm1hbE1vZGUob2JqLCBtb2RlKSB7XFxuICAgICAgICByZXR1cm4gbW9kZSA9PSBnZXRNeVZhcihcXFwicnNhX3NlbGVjdF9tb2RlXFxcIiwgb2JqLm1vZGVzWzBdKVxcbiAgICB9XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcImJsYWNrXFxcIj7mqKHlvI88L2ZvbnQ+PC9zdHJvbmc+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbiAgICBmb3IgKGxldCBtb2RlIG9mIG9iai5tb2Rlcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXNOb3JtYWxNb2RlKG9iaiwgbW9kZSkgPyBcXFwi4oCY4oCYXFxcIiArIG1vZGUgKyBcXFwi4oCZ4oCZXFxcIiA6IG1vZGUsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChtb2RlKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJyc2Ffc2VsZWN0X21vZGVcXFwiLCBtb2RlKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBtb2RlKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiYmxhY2tcXFwiPuWIhuauteWKoOWvhjwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pXFxuXFxuICAgIGZ1bmN0aW9uIGlzTG9uZyhvYmosIGxvbmdTdGF0KSB7XFxuICAgICAgICByZXR1cm4gZ2V0TXlWYXIoXFxcInJzYV9sb25nX3N0YXR1c1xcXCIsIG9iai5jaG9pY2VzWzFdKSA9PSBsb25nU3RhdFxcbiAgICB9XFxuICAgIGZvciAobGV0IGxvbmdTdGF0IG9mIG9iai5jaG9pY2VzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpc0xvbmcob2JqLCBsb25nU3RhdCkgPyBcXFwi4oCY4oCYXFxcIiArIGxvbmdTdGF0ICsgXFxcIuKAmeKAmVxcXCIgOiBsb25nU3RhdCxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGxvbmdTdGF0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJyc2FfbG9uZ19zdGF0dXNcXFwiLCBsb25nU3RhdClcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgbG9uZ1N0YXQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogKGlzTm9ybWFsTW9kZShvYmosIG9iai5tb2Rlc1swXSkgPyBcXFwi5YWs6ZKlXFxcIiA6IFxcXCLnp4HpkqVcXFwiKSArIFxcXCLliqDlr4ZcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChvYmosIGlzTm9ybWFsTW9kZSwgaXNMb25nKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGhhbmRsZVRleHQgPSBnZXRNeVZhcihcXFwicnNhX2hhbmRsZV90ZXh0XFxcIiwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgbGV0IGtleSA9IGdldE15VmFyKFxcXCJyc2FfcHViX29yX3ByaV9rZXlcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLy0tLS0tQkVHSU4uKj9LRVktLS0tLS8sICcnKVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLS0tLS1FTkQuKj9LRVktLS0tLS8sICcnKTtcXG4gICAgICAgICAgICAvLyBsb2coa2V5KVxcbiAgICAgICAgICAgIGlmIChoYW5kbGVUZXh0ID09PSAnJykgcmV0dXJuICd0b2FzdDovL+W+heWkhOeQhuaWh+acrOi+k+WFpeS4uuepuu+8jOivt+ajgOafpSEnXFxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJycpIHJldHVybiAndG9hc3Q6Ly/lr4bpkqXovpPlhaXkuLrnqbrvvIzor7fmo4Dmn6UhJ1xcbiAgICAgICAgICAgIGxldCB0b2FzdFRleHQgPSBcXFwi5Yqg5a+G5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBtb2RlcyA9IG9iai5tb2Rlc1xcbiAgICAgICAgICAgICAgICBsZXQgY2hvaWNlcyA9IG9iai5jaG9pY2VzXFxuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gaXNOb3JtYWxNb2RlKG9iaiwgbW9kZXNbMF0pID8gMSA6IDJcXG4gICAgICAgICAgICAgICAgbGV0IGxvbmdTdGF0ID0gaXNMb25nKG9iaiwgY2hvaWNlc1swXSkgPyAyIDogMVxcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogXFxcIlJTQS9FQ0IvUEtDUzFQYWRkaW5nXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXFxuICAgICAgICAgICAgICAgICAgICBsb25nOiBsb25nU3RhdCxcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrOiB0cnVlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcnNhRW5jcnlwdChoYW5kbGVUZXh0LCBrZXksIG9wdGlvbnMpXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAvL2xvZyhlLm1lc3NhZ2UpXFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGUubWVzc2FnZVxcbiAgICAgICAgICAgICAgICB0b2FzdFRleHQgPSBcXFwi5Yqg5a+G5aSx6LSlXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwicnNhX3Jlc3VsdF90ZXh0XFxcIiwgcmVzdWx0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgdG9hc3RUZXh0XFxuICAgICAgICB9LCBvYmosIGlzTm9ybWFsTW9kZSwgaXNMb25nKVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogKGlzTm9ybWFsTW9kZShvYmosIG9iai5tb2Rlc1swXSkgPyBcXFwi56eB6ZKlXFxcIiA6IFxcXCLlhazpkqVcXFwiKSArIFxcXCLop6Plr4ZcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChvYmosIGlzTm9ybWFsTW9kZSwgaXNMb25nKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGhhbmRsZVRleHQgPSBnZXRNeVZhcihcXFwicnNhX2hhbmRsZV90ZXh0XFxcIiwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgbGV0IGtleSA9IGdldE15VmFyKFxcXCJyc2FfcHViX29yX3ByaV9rZXlcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLy0tLS0tQkVHSU4uKj9LRVktLS0tLS8sICcnKVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLS0tLS1FTkQuKj9LRVktLS0tLS8sICcnKTtcXG4gICAgICAgICAgICBpZiAoaGFuZGxlVGV4dCA9PT0gJycpIHJldHVybiAndG9hc3Q6Ly/lvoXlpITnkIbmlofmnKzovpPlhaXkuLrnqbrvvIzor7fmo4Dmn6UhJ1xcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICcnKSByZXR1cm4gJ3RvYXN0Oi8v5a+G6ZKl6L6T5YWl5Li656m677yM6K+35qOA5p+lISdcXG4gICAgICAgICAgICBsZXQgdG9hc3RUZXh0ID0gXFxcIuino+WvhuaIkOWKn1xcXCJcXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gXFxcIlxcXCJcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBsZXQgbW9kZXMgPSBvYmoubW9kZXNcXG4gICAgICAgICAgICAgICAgbGV0IGNob2ljZXMgPSBvYmouY2hvaWNlc1xcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IGlzTm9ybWFsTW9kZShvYmosIG1vZGVzWzBdKSA/IDEgOiAyXFxuICAgICAgICAgICAgICAgIGxldCBsb25nU3RhdCA9IGlzTG9uZyhvYmosIGNob2ljZXNbMF0pID8gMiA6IDFcXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25maWc6IFxcXCJSU0EvRUNCL1BLQ1MxUGFkZGluZ1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZzogbG9uZ1N0YXQsXFxuICAgICAgICAgICAgICAgICAgICBibG9jazogdHJ1ZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJzYURlY3J5cHQoaGFuZGxlVGV4dCwga2V5LCBvcHRpb25zKVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZS5tZXNzYWdlXFxuICAgICAgICAgICAgICAgIHRvYXN0VGV4dCA9IFxcXCLop6Plr4blpLHotKVcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJyc2FfcmVzdWx0X3RleHRcXFwiLCByZXN1bHQpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgdG9hc3RUZXh0XFxuICAgICAgICB9LCBvYmosIGlzTm9ybWFsTW9kZSwgaXNMb25nKVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIuWkjeWItlxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5Yqg5a+G5oiW6Kej5a+G55qE5YaF5a655bCG5pi+56S65Zyo5q2kXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcInJzYV9yZXN1bHRfdGV4dFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcInJzYV9yZXN1bHRfdGV4dFxcXCIsaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgLy8gb2JqLmVuY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5lbmNUZXh0OiBcXFwiICsgb2JqLmVuY1RleHQpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGlucHV0XFxuICAgICAgICB9KVxcbiAgICB9KVxcblxcblxcbn1cXG4kLmV4cG9ydHMuYnVpbGRSU0FVaSA9IGJ1aWxkUlNBVWlcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi5bel5YW3XCIsXCJwYXRoXCI6XCJ1dGlsaXlcIixcInJ1bGVcIjpcImpzOlxcbmxldCBUb29sID0ge1xcbiAgcmFuZG9tU3RyaW5nOiBmdW5jdGlvbihsZW4pe1xcbiAgICAgIGxldCBjaGFycyA9ICdBQkNERUZHSEpLTU5QUVJTVFdYWVphYmNkZWZoaWprbW5wcnN0d3h5ejEyMzQ1Njc4OScgXFxuICAgICAgbGV0IG1heExlbiA9IGNoYXJzLmxlbmd0aFxcbiAgICAgIGxldCBzdHIgPSAnJ1xcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcXG4gICAgICAgIHN0ciArPSBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWF4TGVuKSlcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0clxcbiAgfSxcXG4gIGZpbGxOdWxsUGFkZGluZzogZnVuY3Rpb24gKHN0ciwgbGVuKSB7XFxuICAgIC8vIHN0ci5wYWRTdGFydCh0YXJnZXRMZW5ndGggWywgcGFkU3RyaW5nXSlcXG4gICAgLy8gc3RyLnBhZEVuZCh0YXJnZXRMZW5ndGggWywgcGFkU3RyaW5nXSlcXG4gICAgaWYoc3RyLmxlbmd0aCA+PSBsZW4pIHtcXG4gICAgICByZXR1cm4gc3RyO1xcbiAgICB9XFxuICAgIHJldHVybiBzdHIgKyBBcnJheSggbGVuIC0gc3RyLmxlbmd0aCArIDEgKS5qb2luKFxcXCJcXFxceDAwXFxcIik7XFxuICB9LFxcbiAgZmlsbFplcm9QYWRkaW5nOiBmdW5jdGlvbiAoc3RyLCBsZW4pIHtcXG4gICAgLy8gc3RyLnBhZFN0YXJ0KHRhcmdldExlbmd0aCBbLCBwYWRTdHJpbmddKVxcbiAgICAvLyBzdHIucGFkRW5kKHRhcmdldExlbmd0aCBbLCBwYWRTdHJpbmddKVxcbiAgICBpZihzdHIubGVuZ3RoID49IGxlbikge1xcbiAgICAgIHJldHVybiBzdHI7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0ciArIEFycmF5KCBsZW4gLSBzdHIubGVuZ3RoICsgMSApLmpvaW4oXFxcIjBcXFwiKTtcXG4gIH0sXFxufVxcbiQuZXhwb3J0cyA9IFRvb2w7XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIuaVo+WIl+WTiOW4jOexu+mhtemdolwiLFwicGF0aFwiOlwiaGFzaFwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgeyBidWlsZEhhc2hVaSB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvaGFzaHVpXFxcIik7XFxuZnVuY3Rpb24gc2V0SGFzaFBhZ2UoZCwgb2JqKSB7XFxuICAgIGJ1aWxkSGFzaFVpKGQsIG9iaik7XFxufVxcbiQuZXhwb3J0cy5zZXRIYXNoUGFnZSA9IHNldEhhc2hQYWdlXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkhleFwiLFwicGF0aFwiOlwiaGV4XCIsXCJydWxlXCI6XCJqczpcXG5sZXQgaGV4ID0ge307XFxuLy8g57yW56CBXFxuaGV4LmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAvLyBsb2coXFxcIuaIkeaYr+WOn+aWh1xcXCIrIG9iai5kZWNUZXh0KVxcbiAgICBsZXQgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uob2JqLmRlY1RleHQpO1xcbiAgICBsZXQgZW5jb2RlID0gXFxcIltIRVhdOlxcXCIgKyBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xcbiAgICByZXR1cm4gZW5jb2RlO1xcbn1cXG4vLyDop6PnoIFcXG5oZXguZGVjb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgIC8vIGxvZyhcXFwi5oiR5piv5a+G5paHXFxcIisgb2JqLmVuY1RleHQpXFxuICAgIG9iai5lbmNUZXh0ID0gb2JqLmVuY1RleHQucmVwbGFjZShcXFwiW0hFWF06XFxcIiwgXFxcIlxcXCIpXFxuICAgIGxldCB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKG9iai5lbmNUZXh0KTtcXG4gICAgbGV0IGRlY29kZSA9IENyeXB0b0pTLmVuYy5VdGY4LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xcbiAgICAvKkNyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHdvcmRBcnJheSk7Ki9cXG4gICAgcmV0dXJuIGRlY29kZTtcXG59XFxuLy8g5a+85Ye657uZ5aSW6YOo6YCa6L+HIHJlcXVpcmUg5pa55rOV5L2/55SoXFxuJC5leHBvcnRzLmhleCA9IGhleFwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCJIYXNoLVVJXCIsXCJwYXRoXCI6XCJoYXNodWlcIixcInJ1bGVcIjpcImpzOlxcbmZ1bmN0aW9uIGJ1aWxkRW10cHlIYXNoVWkoZCwgb2JqKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxwIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7mraPlnKjot6/kuIrvvIzmlazor7fmnJ/lvoXvvIjlkpXlkpXlkpXvvIl+PC9wPicsXFxuICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgfSlcXG59XFxuZnVuY3Rpb24gYnVpbGRIYXNoVWkoZCwgb2JqKSB7XFxuICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwiU0hBM1xcXCIpICYmICFvYmoudHlwZS5pbmNsdWRlcyhcXFwiSE1BQ1xcXCIpKSB7XFxuICAgICAgICBidWlsZEVtdHB5SGFzaFVpKGQsIG9iaik7XFxuICAgICAgICByZXR1cm47XFxuICAgIH1cXG4gICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWTiOW4jC/mlaPliJdcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWOn+aWh1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcihcXFwiaGFzaF90ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcImhhc2hfdGV4dFxcXCIsaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgLy8gb2JqLmRlY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5kZWNUZXh0OiBcXFwiICsgb2JqLmRlY1RleHQpXFxuICAgICAgICAgICAgbGV0IHRvYXN0VGV4dCA9IFxcXCLliqDlr4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIGxldCBoYXNoX3Jlc3VsdCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB0b29sID0ge307XFxuICAgICAgICAgICAgbGV0IHRvb2xTZWxlY3RzID0gb2JqLnR5cGUuc3BsaXQoXFxcIkBAXFxcIik7XFxuICAgICAgICAgICAgbGV0IHRvb2xTZWxlY3QgPSB0b29sU2VsZWN0c1t0b29sU2VsZWN0cy5sZW5ndGggLSAxXTtcXG4gICAgICAgICAgICBsZXQgSGFzaEFsZ29yaXRobSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hhc2hhbGdvcml0aG0/cnVsZT1cXFwiICsgb2JqLnJ1bGVUaXRsZSk7XFxuICAgICAgICAgICAgSGFzaEFsZ29yaXRobS5jb25maWcudHlwZS5zZXQodG9vbFNlbGVjdClcXG4gICAgICAgICAgICB0b29sID0gSGFzaEFsZ29yaXRobTtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBoYXNoX3Jlc3VsdCA9IHRvb2wuaGFzaCgpO1xcbiAgICAgICAgICAgICAgICAvLyBsb2coXFxcImhhc2hfcmVzdWx0OiBcXFwiICsgaGFzaF9yZXN1bHQpXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBoYXNoX3Jlc3VsdCA9IGUubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgdG9hc3RUZXh0ID0gXFxcIuWKoOWvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIEhhc2hBbGdvcml0aG0uY29uZmlnLnJlc3VsdFRleHQuc2V0KGhhc2hfcmVzdWx0KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycgKyB0b2FzdFRleHQ7XFxuICAgICAgICB9LCBvYmopLFxcbiAgICB9KTtcXG4gICAgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCJITUFDXFxcIikgfHwgb2JqLnR5cGUuaW5jbHVkZXMoXFxcIlBCS0RGMlxcXCIpKSB7XFxuICAgICAgICBidWlsZENvbmZpZ3NVSShkLCBvYmopO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWkjeWItlxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5ZOI5biM5YC8XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKFxcXCJoYXNoX3Jlc3VsdF90ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcImhhc2hfcmVzdWx0X3RleHRcXFwiLGlucHV0KSdcXG4gICAgICAgIH0sXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIC8vIG9iai5lbmNUZXh0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJvYmouZW5jVGV4dDogXFxcIiArIG9iai5lbmNUZXh0KVxcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WGheWuueS4uuepuu+8gVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgfSk7XFxuICAgIFxcbn1cXG5mdW5jdGlvbiBidWlsZENvbmZpZ3NVSShkLCBvYmopIHtcXG4gICAgLy8gSE1BQyB8fCBQQktERjJcXG4gICAgbGV0IEhhc2hBbGdvcml0aG0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9oYXNoYWxnb3JpdGhtP3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpO1xcbiAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIkhNQUNcXFwiKSkge1xcbiAgICAgICAgLy8gSE1BQy14eHhcXG4gICAgICAgIGJ1aWxkSG1hY0NvbmZpZ3NVSShkLCBvYmosIEhhc2hBbGdvcml0aG0uY29uZmlnKVxcbiAgICB9IGVsc2UgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCJQQktERjJcXFwiKSkge1xcbiAgICAgICAgLy8gUEJLREYyXFxuICAgICAgICBidWlsZFBCS0RGMkNvbmZpZ3NVSShkLCBvYmosIEhhc2hBbGdvcml0aG0uTWFwcGluZywgSGFzaEFsZ29yaXRobS5jb25maWcpXFxuICAgIH1cXG59XFxuZnVuY3Rpb24gYnVpbGRIbWFjQ29uZmlnc1VJIChkLCBvYmosIGNvbmZpZykge1xcbiAgICAvLyBvYmoudHlwZS5pbmNsdWRlcyhcXFwiSE1BQ1xcXCIpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIumaj+acuiBrZXlcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuWvhumSpSBrZXlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgaGVpZ2h0OiAtMSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnLmtleS5nZXQoKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoY29uZmlnKSA9PiB7XFxuICAgICAgICAgICAgICAgIGNvbmZpZy5rZXkuc2V0KGlucHV0KVxcbiAgICAgICAgICAgIH0sIGNvbmZpZylcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbmZ1bmN0aW9uIGJ1aWxkUEJLREYyQ29uZmlnc1VJKGQsIG9iaiwgbWFwcGluZywgY29uZmlnKSB7XFxuICAgIC8vIG9iai50eXBlLmluY2x1ZGVzKFxcXCJQQktERjJcXFwiKVxcbiAgICBsZXQga2V5U2l6ZXMgPSBPYmplY3Qua2V5cyhtYXBwaW5nW1xcXCJrZXlTaXplXFxcIl0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3Ryb25nPjxmb250IGNvbG9yPVxcXCJibGFja1xcXCI+S0VZ6ZW/5bqmPC9mb250Pjwvc3Ryb25nPicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSlcXG4gICAgZm9yIChsZXQga2V5U2l6ZSBvZiBrZXlTaXplcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZToga2V5U2l6ZSA9PSBjb25maWcua2V5U2l6ZS5nZXQoKSA/IFxcXCLigJjigJhcXFwiICsga2V5U2l6ZSArIFxcXCLigJnigJlcXFwiIDoga2V5U2l6ZSxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGtleVNpemUsIGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmtleVNpemUuc2V0KGtleVNpemUpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwga2V5U2l6ZSwgY29uZmlnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6ZqP5py6IHNhbHRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuebkCBzYWx077yM5bu66K6u6Iez5bCR5Li6IDgg5a2X6IqC77yM5LiU6KaB5Li66ZqP5py65pWw44CCXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGhlaWdodDogLTEsXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZy5zYWx0LmdldCgpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKChjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnNhbHQuc2V0KGlucHV0KVxcbiAgICAgICAgICAgIH0sIGNvbmZpZylcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIui/reS7o+asoeaVsFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi6L+t5Luj5qyh5pWwKOmAieWhqynvvIzlu7rorq7oh7PlsJHkuLogNTAwMDAg5qyh77yM6Zmk6Z2e5pyJ5Lil5qC855qE5oCn6IO96KaB5rGC44CCXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGhlaWdodDogLTEsXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZy5pdGVyYXRpb25zLmdldCgpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKChjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLml0ZXJhdGlvbnMuc2V0KGlucHV0KVxcbiAgICAgICAgICAgIH0sIGNvbmZpZylcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbiQuZXhwb3J0cy5idWlsZEhhc2hVaSA9IGJ1aWxkSGFzaFVpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkhhc2jnrpfms5VcIixcInBhdGhcIjpcImhhc2hhbGdvcml0aG1cIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxubGV0IEhhc2hBbGdvcml0aG0gPSB7XFxuXFx0TWFwcGluZzoge1xcblxcdFxcdGhhc2hUeXBlOiB7XFxuXFx0XFx0XFx0XFxcIk1ENVxcXCI6IENyeXB0b0pTLk1ENSxcXG5cXHRcXHRcXHRcXFwiU0hBLTFcXFwiOiBDcnlwdG9KUy5TSEExLFxcblxcdFxcdFxcdFxcXCJTSEEtMjI0XFxcIjogQ3J5cHRvSlMuU0hBMjI0LFxcblxcdFxcdFxcdFxcXCJTSEEtMjU2XFxcIjogQ3J5cHRvSlMuU0hBMjU2LFxcblxcdFxcdFxcdFxcXCJTSEEtMzg0XFxcIjogQ3J5cHRvSlMuU0hBMzg0LFxcblxcdFxcdFxcdFxcXCJTSEEtNTEyXFxcIjogQ3J5cHRvSlMuU0hBNTEyLFxcblxcdFxcdFxcdFxcXCJITUFDLU1ENVxcXCI6IENyeXB0b0pTLkhtYWNNRDUsXFxuXFx0XFx0XFx0XFxcIkhNQUMtU0hBMVxcXCI6IENyeXB0b0pTLkhtYWNTSEExLFxcblxcdFxcdFxcdFxcXCJITUFDLVNIQTIyNFxcXCI6IENyeXB0b0pTLkhtYWNTSEEyMjQsIFxcblxcdFxcdFxcdFxcXCJITUFDLVNIQTI1NlxcXCI6IENyeXB0b0pTLkhtYWNTSEEyNTYsIFxcblxcdFxcdFxcdFxcXCJITUFDLVNIQTM4NFxcXCI6IENyeXB0b0pTLkhtYWNTSEEzODQsIFxcblxcdFxcdFxcdFxcXCJITUFDLVNIQTUxMlxcXCI6IENyeXB0b0pTLkhtYWNTSEE1MTIsXFxuXFx0XFx0XFx0XFxcIlBCS0RGMlxcXCI6IENyeXB0b0pTLlBCS0RGMixcXG5cXHRcXHR9LFxcbiAgICAgICAga2V5U2l6ZToge1xcbiAgICAgICAgICAgIFxcXCIxMjjkvY1cXFwiOiAxMjgsXFxuICAgICAgICAgICAgXFxcIjI1NuS9jVxcXCI6IDI1NixcXG4gICAgICAgICAgICBcXFwiNTEy5L2NXFxcIjogNTEyLFxcbiAgICAgICAgfSxcXG5cXHR9LFxcblxcdGNvbmZpZzoge1xcbiAgICAgICAgdHlwZToge1xcbiAgICAgICAgICAgIGtleTogXFxcImhhc2hfdHlwZVxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJNRDVcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBrZXk6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJoYXNoX2htYWNfa2V5XFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG5cXHRcXHR0ZXh0OiB7XFxuXFx0XFx0XFx0a2V5OiBcXFwiaGFzaF90ZXh0XFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcblxcdFxcdH0sXFxuXFx0XFx0cmVzdWx0VGV4dDoge1xcblxcdFxcdFxcdGtleTogXFxcImhhc2hfcmVzdWx0X3RleHRcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuXFx0XFx0fSxcXG4gICAgICAgIGtleVNpemU6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJoYXNoX2tleV9zaXplXFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIjEyOOS9jVxcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgfSxcXG4gICAgICAgIHNhbHQ6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJoYXNoX3NhbHRcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICB9LFxcbiAgICAgICAgaXRlcmF0aW9uczoge1xcbiAgICAgICAgICAgIGtleTogXFxcImhhc2hfaXRlcmF0aW9uc1xcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgIH0sXFxuXFx0fSxcXG4gICAgb25DbG9zZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICBsZXQgY29uZmlnS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuY29uZmlnKTtcXG4gICAgICAgIGZvcihsZXQgY29uZktleSBvZiBjb25maWdLZXlzKSB7XFxuICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuY29uZmlnW2NvbmZLZXldLmtleTtcXG4gICAgICAgICAgICBjbGVhclZhcihrZXkpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcblxcdGhhc2g6IGZ1bmN0aW9uICgpIHtcXG5cXHRcXHRsZXQgdGV4dCA9IHRoaXMuY29uZmlnLnRleHQuZ2V0KCk7XFxuXFx0XFx0bGV0IHR5cGUgPSB0aGlzLmNvbmZpZy50eXBlLmdldCgpO1xcblxcdFxcdGxldCBoYXNoID0ge307XFxuXFx0XFx0aWYgKHRleHQpIHtcXG4gICAgICAgICAgICBpZiAodHlwZS5pbmNsdWRlcyhcXFwiSE1BQ1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgIC8vIEhNQUMteHh4XFxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLmNvbmZpZy5rZXkuZ2V0KCk7XFxuICAgICAgICAgICAgICAgIGhhc2ggPSB0aGlzLk1hcHBpbmcuaGFzaFR5cGVbdHlwZV0odGV4dCwga2V5KVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcXFwiUEJLREYyXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgLy8gUEJLREYyXFxuICAgICAgICAgICAgICAgIGxldCBrZXlTaXplID0gdGhpcy5NYXBwaW5nLmtleVNpemVbdGhpcy5jb25maWcua2V5U2l6ZS5nZXQoKV07XFxuICAgICAgICAgICAgICAgIGxldCBzYWx0ID0gdGhpcy5jb25maWcuc2FsdC5nZXQoKTtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ZXJhdGlvbnMgPSB0aGlzLmNvbmZpZy5pdGVyYXRpb25zLmdldCgpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXNhbHQpIHtcXG4gICAgICAgICAgICAgICAgXFx0dGhyb3cgbmV3IEVycm9yKFxcXCLnm5Agc2FsdCDkuI3og73kuLrnqbrvvIFcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHNhbHQgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShzYWx0KVxcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9ICB7XFxuICAgICAgICAgICAgICAgIFxcdFxcdGtleVNpemU6IGtleVNpemUgLyAzMlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChpdGVyYXRpb25zKSB7XFxuICAgICAgICAgICAgICAgIFxcdG9wdGlvbnMuaXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaGFzaCA9IHRoaXMuTWFwcGluZy5oYXNoVHlwZVt0eXBlXSh0ZXh0LCBzYWx0LCBvcHRpb25zKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuXFx0XFx0XFx0XFx0aGFzaCA9IHRoaXMuTWFwcGluZy5oYXNoVHlwZVt0eXBlXSh0ZXh0KTtcXG4gICAgICAgICAgICB9XFxuXFx0XFx0XFx0Ly8g5a+G5paHXFxuXFx0XFx0XFx0bGV0IGhhc2hSZXN1bHQgPSBoYXNoLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJoYXNoI2hhc2hfcmVzdWx0OiBcXFwiICsgaGFzaFJlc3VsdClcXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRUZXh0LnNldChoYXNoUmVzdWx0KTtcXG5cXHRcXHRcXHRyZXR1cm4gaGFzaFJlc3VsdDtcXG5cXHRcXHR9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5Y6f5paH5LiN6IO95Li656m677yBXFxcIilcXG4gICAgICAgIH1cXG5cXHR9XFxufTtcXG4kLmV4cG9ydHMgPSBIYXNoQWxnb3JpdGhtXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlhb3pn7NcIixcInBhdGhcIjpcInJvYXJcIixcInJ1bGVcIjpcImpzOlxcbmxldCByb2FyID0ge307XFxucm9hci5lbmNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgLy8gbG9nKFxcXCJbcm9hcl1vYmouZGVjVGV4dDogXFxcIiArIG9iai5kZWNUZXh0KVxcbiAgICBsZXQgZW5jb2RlID0gcmVxdWVzdCgnaHR0cDovL2hpLnBjbW9lLm5ldC9iZWFyLnBocCcsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnWC1Ub2tlbic6ICcyMDNCNjFEMzUwNjgnLFxcbiAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2hpLnBjbW9lLm5ldCcsXFxuICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxcbiAgICAgICAgICAgIC8vJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEwOyBOb3RlOSBCdWlsZC9RS1ExLjE5MTIyMi4wMDI7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzcuMC4zODY1LjEyMCBNUVFCcm93c2VyLzYuMiBUQlMvMDQ1NjE0IE1vYmlsZSBTYWZhcmkvNTM3LjM2JyxcXG4gICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cDovL2hpLnBjbW9lLm5ldCdcXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAnbW9kZT1Sb2FyJmNvZGU9RW5jb2RlJnR4dD0nICsgb2JqLmRlY1RleHQsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgLy8gbG9nKFxcXCJbcm9hcl1lbmNvZGU6IFxcXCIgKyBlbmNvZGUpXFxuICAgIHJldHVybiBlbmNvZGU7XFxufVxcbnJvYXIuZGVjb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBkZWNvZGUgPSByZXF1ZXN0KCdodHRwOi8vaGkucGNtb2UubmV0L2JlYXIucGhwJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdYLVRva2VuJzogJzIwM0I2MUQzNTA2OCcsXFxuICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vaGkucGNtb2UubmV0JyxcXG4gICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXFxuICAgICAgICAgICAgLy8nVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IE5vdGU5IEJ1aWxkL1FLUTEuMTkxMjIyLjAwMjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS83Ny4wLjM4NjUuMTIwIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDU2MTQgTW9iaWxlIFNhZmFyaS81MzcuMzYnLFxcbiAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwOi8vaGkucGNtb2UubmV0J1xcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6ICdtb2RlPVJvYXImY29kZT1EZWNvZGUmdHh0PScgKyBvYmouZW5jVGV4dCxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4kLmV4cG9ydHMucm9hciA9IHJvYXJcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueGiuabsFwiLFwicGF0aFwiOlwiYmVhclwiLFwicnVsZVwiOlwianM6XFxubGV0IGJlYXIgPSB7fTtcXG5iZWFyLmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICAvLyBsb2coXFxcIltiZWFyXW9iai5kZWNUZXh0OiBcXFwiICsgb2JqLmRlY1RleHQpXFxuICAgIGxldCBlbmNvZGUgPSByZXF1ZXN0KCdodHRwOi8vaGkucGNtb2UubmV0L2JlYXIucGhwJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdYLVRva2VuJzogJzIwM0I2MUQzNTA2OCcsXFxuICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vaGkucGNtb2UubmV0JyxcXG4gICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXFxuICAgICAgICAgICAgLy8nVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IE5vdGU5IEJ1aWxkL1FLUTEuMTkxMjIyLjAwMjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS83Ny4wLjM4NjUuMTIwIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDU2MTQgTW9iaWxlIFNhZmFyaS81MzcuMzYnLFxcbiAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwOi8vaGkucGNtb2UubmV0J1xcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6ICdtb2RlPUJlYXImY29kZT1FbmNvZGUmdHh0PScgKyBvYmouZGVjVGV4dCxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICAvLyBsb2coXFxcIltiZWFyXWVuY29kZTogXFxcIiArIGVuY29kZSlcXG4gICAgcmV0dXJuIGVuY29kZTtcXG59XFxuYmVhci5kZWNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgbGV0IGRlY29kZSA9IHJlcXVlc3QoJ2h0dHA6Ly9oaS5wY21vZS5uZXQvYmVhci5waHAnLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ1gtVG9rZW4nOiAnMjAzQjYxRDM1MDY4JyxcXG4gICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9oaS5wY21vZS5uZXQnLFxcbiAgICAgICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JyxcXG4gICAgICAgICAgICAvLydVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgTm90ZTkgQnVpbGQvUUtRMS4xOTEyMjIuMDAyOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc3LjAuMzg2NS4xMjAgTVFRQnJvd3Nlci82LjIgVEJTLzA0NTYxNCBNb2JpbGUgU2FmYXJpLzUzNy4zNicsXFxuICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHA6Ly9oaS5wY21vZS5uZXQnXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ21vZGU9QmVhciZjb2RlPURlY29kZSZ0eHQ9JyArIG9iai5lbmNUZXh0LFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuICAgIHJldHVybiBkZWNvZGU7XFxufVxcbiQuZXhwb3J0cy5iZWFyID0gYmVhclwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aaW6aG1XCIsXCJwYXRoXCI6XCJob21lXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoJ+WKoOino+WvhuW3peWFtycpXFxuY29uc3Qge1xcbiAgICBoZWFkZXJcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY2xhc3NpY0hlYWRlclxcXCIpO1xcbmNvbnN0IHtcXG4gICAgc2V0RW5jb2RlUGFnZVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9lbmNvZGVcXFwiKTtcXG5jb25zdCB7XFxuICAgIHNldENyeXB0b1BhZ2VcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY3J5cHRvXFxcIik7XFxuY29uc3Qge1xcbiAgICBzZXRIYXNoUGFnZVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9oYXNoXFxcIik7XFxuY29uc3Qge1xcbiAgICBzZXRPdGhlclBhZ2VcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvb3RoZXJcXFwiKTtcXG4vLyBjb25zdCB7IENyeXB0byB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzXFxcIik7XFxuLyoqXFxuICogMS4g5byV5YWl566X5rOV5L6d6LWWXFxuICovXFxuY29uc3Qge1xcbiAgICBidWRkaGFcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYnVkZGhhXFxcIik7XFxuY29uc3Qge1xcbiAgICBuZXdCdWRkaGFcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbmV3QnVkZGhhXFxcIik7XFxuY29uc3Qge1xcbiAgICBiZWFyXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2JlYXJcXFwiKTtcXG5jb25zdCB7XFxuICAgIHJvYXJcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvcm9hclxcXCIpO1xcbmNvbnN0IHtcXG4gICAgdW5pY29kZVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91bmljb2RlXFxcIik7XFxuY29uc3Qge1xcbiAgICB1cmlcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXJpXFxcIik7XFxuY29uc3Qge1xcbiAgICB1cmljb21wb25lbnRcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXJpY29tcG9uZW50XFxcIik7XFxuY29uc3Qge1xcbiAgICBiYXNlNjRcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYmFzZTY0XFxcIik7XFxuY29uc3Qge1xcbiAgICBhc2NpaVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hc2NpaVxcXCIpO1xcbmNvbnN0IHtcXG4gICAgaGV4XFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hleFxcXCIpO1xcblxcbmxldCBydWxlVGl0bGUgPSBNWV9SVUxFLnRpdGxlO1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoaGVhZGVyLCBydWxlVGl0bGUpID0+IHtcXG4gICAgcHV0VmFyKFxcXCJlbmNvZGUtdGV4dFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgcHV0VmFyKFxcXCJkZWNvZGUtdGV4dFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgaGVhZGVyLm9uQ2xvc2UoKTtcXG4gICAgbGV0IENyeXB0byA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXCIgKyBydWxlVGl0bGUpO1xcbiAgICBDcnlwdG8ub25DbG9zZSgpO1xcbiAgICBjbGVhck15VmFyKFxcXCJyc2FfcHViX29yX3ByaV9rZXlcXFwiKVxcbiAgICBjbGVhck15VmFyKFxcXCJyc2FfaGFuZGxlX3RleHRcXFwiKVxcbiAgICBjbGVhck15VmFyKFxcXCJyc2Ffc2VsZWN0X21vZGVcXFwiKVxcbiAgICBjbGVhck15VmFyKFxcXCJyc2FfbG9uZ19zdGF0dXNcXFwiKVxcbiAgICBjbGVhck15VmFyKFxcXCJyc2FfcmVzdWx0X3RleHRcXFwiKTtcXG4gICAgbGV0IEhhc2hBbGdvcml0aG0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9oYXNoYWxnb3JpdGhtP3J1bGU9XFxcIiArIHJ1bGVUaXRsZSk7XFxuICAgIEhhc2hBbGdvcml0aG0ub25DbG9zZSgpO1xcbn0sIGhlYWRlciwgcnVsZVRpdGxlKSlcXG5cXG5sZXQgZCA9IFtdO1xcbi8qZC5wdXNoKHtcXG4gICAgZGVzYzogXFxcIjBcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIlxcbn0pKi9cXG50cnkge1xcbiAgICBpZiAoIW5ld1dpbmRvdykge1xcblxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE7IGkrKykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaydcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08YnI+PGJpZyBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+PGI+8J+UkeWKoOino+WvhuW3peWFt/CflJE8L2I+PC9iaWc+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxufVxcbmxldCBjbGFzc2ljID0ge1xcbiAgICBcXFwi57yW56CB6L2s5o2iXFxcIjogW3tcXG4gICAgICAgICAgICBcXFwi5L2b54aK5YW95puwXFxcIjogW1xcXCLkvZvmm7BcXFwiLCBcXFwi5paw5L2b5puwXFxcIiwgXFxcIueGiuabsFxcXCIsIFxcXCLlhb3pn7NcXFwiXVxcbiAgICAgICAgfSxcXG4gICAgICAgIFxcXCJVbmljb2RlXFxcIixcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBcXFwiVVJMXFxcIjogW1xcXCJVUklcXFwiLCBcXFwiVVJJQ29tcG9uZW50XFxcIl1cXG4gICAgICAgIH0sXFxuICAgICAgICBcXFwiQmFzZTY0XFxcIiwgXFxcIkFTQ0lJXFxcIiwgXFxcIkhleFxcXCJcXG4gICAgXSxcXG4gICAgXFxcIuWKoOWvhi/op6Plr4ZcXFwiOiBbe1xcbiAgICAgICAgICAgIFxcXCLlr7nnp7DliqDlr4ZcXFwiOiBbXFxcIkFFU1xcXCIsIFxcXCJERVNcXFwiLCBcXFwiM0RFU1xcXCJdXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIFxcXCLpnZ7lr7nnp7DliqDlr4ZcXFwiOiBbXFxcIlJTQVxcXCJdXFxuICAgICAgICB9XFxuICAgIF0sXFxuICAgIFxcXCLmlaPliJcv5ZOI5biMXFxcIjogW1xcbiAgICAgICAgXFxcIk1ENVxcXCIsXFxuICAgICAgICB7XFxuICAgICAgICAgICAgXFxcIlNIQVxcXCI6IFtcXFwiU0hBLTFcXFwiLCBcXFwiU0hBLTIyNFxcXCIsIFxcXCJTSEEtMjU2XFxcIiwgXFxcIlNIQS0zODRcXFwiLCBcXFwiU0hBLTUxMlxcXCIsIC8qXFxcIlNIQTMtNTEyXFxcIiovIF1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgXFxcIkhNQUNcXFwiOiBbXFxcIkhNQUMtTUQ1XFxcIiwgXFxcIkhNQUMtU0hBMVxcXCIsIFxcXCJITUFDLVNIQTIyNFxcXCIsIFxcXCJITUFDLVNIQTI1NlxcXCIsIFxcXCJITUFDLVNIQTM4NFxcXCIsIFxcXCJITUFDLVNIQTUxMlxcXCJdXFxuICAgICAgICB9LFxcbiAgICAgICAgXFxcIlBCS0RGMlxcXCJcXG4gICAgXSxcXG4gICAgXFxcIuWFtuS7lui9rOaNolxcXCI6IFtcXG4gICAgICAgIFxcXCJWNuino+WvhlxcXCIsXFxuICAgICAgICBcXFwiUHJpdmF0ZUpTXFxcIixcXG4gICAgICAgIFxcXCLml7bpl7TmiLNcXFwiLFxcbiAgICBdXFxufVxcbmQgPSBkLmNvbmNhdChoZWFkZXIuZ2V0KGNsYXNzaWMpKVxcbnZhciB0eXBlID0gaGVhZGVyLmdldEN1cnJlbnRJbmRleCgpO1xcbnRyeSB7XFxuICAgIGlmIChuZXdXaW5kb3cpIHtcXG4gICAgICAgIC8qZm9yIChsZXQgaSA9IDA7IGkgPCAxOyBpKyspIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaydcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0qL1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiPumAiemhuTwvYj4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICB9KVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+eCueaIkeWMluS4uuaWsOeql+WPoycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvaG9tZSNnYW1lVGhlbWUjJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBuZXdXaW5kb3c6IHRydWUsXFxuICAgICAgICAgICAgICAgIC8vIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxufVxcblxcbi8qKlxcbiAqIDIuIOWcqCB0b29scyDliqDlhaXplK7lgLzlr7nvvIznlKjkuo7mmKDlsITnrpfms5XvvIzmoLzlvI/kuLog5YiG57G75Lit55qE5pu/5o2i5YC877yI5Y2zIGZ5QWxsIOeahOWAvO+8iTog5byV5YWl55qE566X5rOV5L6d6LWW55qE5a+56LGh5ZCNXFxuICovXFxudmFyIG9iaiA9IHtcXG4gICAgcnVsZVRpdGxlOiBydWxlVGl0bGUsXFxuICAgIHR5cGU6IHR5cGUsXFxuICAgIHRvb2xzOiB7XFxuICAgICAgICBcXFwi5L2b5puwXFxcIjogYnVkZGhhLFxcbiAgICAgICAgXFxcIuaWsOS9m+absFxcXCI6IG5ld0J1ZGRoYSxcXG4gICAgICAgIFxcXCLnhormm7BcXFwiOiBiZWFyLFxcbiAgICAgICAgXFxcIuWFvemfs1xcXCI6IHJvYXIsXFxuICAgICAgICBcXFwiVW5pY29kZVxcXCI6IHVuaWNvZGUsXFxuICAgICAgICBcXFwiVVJJXFxcIjogdXJpLFxcbiAgICAgICAgXFxcIlVSSUNvbXBvbmVudFxcXCI6IHVyaWNvbXBvbmVudCxcXG4gICAgICAgIFxcXCJCYXNlNjRcXFwiOiBiYXNlNjQsXFxuICAgICAgICBcXFwiQVNDSUlcXFwiOiBhc2NpaSxcXG4gICAgICAgIFxcXCJIZXhcXFwiOiBoZXgsXFxuICAgICAgICAvLyBcXFwiQUVTXFxcIjogQ3J5cHRvLkFFUyxcXG4gICAgICAgIC8vIFxcXCJERVNcXFwiOiBDcnlwdG8uREVTLFxcbiAgICB9LFxcbn1cXG5cXG4vKipcXG4gKiAzLiDmt7vliqDlrZDpobXpnaLlhpnoh6rlt7HnmoTnrpfms5XvvIzmqKHmnb/or7flj4LogIPigJznrpfms5XmqKHmnb/igJ3ov5nkuKrlrZDpobXpnaLmiJblt7LmnInnmoTlrZDpobXpnaJcXG4gKlxcbiAqIOazqO+8muatpOWkh+azqOWQjueahOaJgOacieS7o+eggeWQhOS9jemDveS4jemcgOimgeWKqFxcbiAqL1xcbi8vIGxvZyhvYmoudHlwZSlcXG5pZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIue8lueggei9rOaNolxcXCIpKSB7XFxuICAgIHNldEVuY29kZVBhZ2UoZCwgb2JqKTtcXG59IGVsc2UgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCLliqDlr4Yv6Kej5a+GXFxcIikpIHtcXG4gICAgc2V0Q3J5cHRvUGFnZShkLCBvYmopO1xcbn0gZWxzZSBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIuaVo+WIly/lk4jluIxcXFwiKSkge1xcbiAgICBzZXRIYXNoUGFnZShkLCBvYmopO1xcbn0gZWxzZSBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIuWFtuS7lui9rOaNolxcXCIpKSB7XFxuICAgIHNldE90aGVyUGFnZShkLCBvYmopO1xcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInJpY2hfdGV4dFwiLFwibmFtZVwiOlwiT3RoZXItVUlcIixcInBhdGhcIjpcIm90aGVydWlcIixcInJ1bGVcIjpcIi8vIGpzOlxcbmZ1bmN0aW9uIGJ1aWxkRW1wdHlPdGhlclVpKGQsIG9iaikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICc8cCBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+5q2j5Zyo6Lev5LiK77yM5pWs6K+35pyf5b6F77yI5ZKV5ZKV5ZKV77yJfjwvcD4nLFxcbiAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxuICAgIH0pXFxufVxcblxcbmZ1bmN0aW9uIGJ1aWxkQ29udHJvbGxlclVpKGQsIG9iaikge1xcbiAgICAvLyBodHRwczovL2dpdGVlLmNvbS9DaGVyaXNoUngvaW1hZ2V3YXJlaG91c2UvcmF3L21hc3Rlci9pbWFnZS8zMmQyOWUyZmJjZGY4ZDgzMDcxZGVlYzdmNmFhNGI3Yy5wbmdcXG4gICAgbGV0IGNwSW1nVXJsID0gXFxcImh0dHBzOi8vaWNvbmZvbnQudHlyYW50Zy5jb20vYXBpL2lsbHVzdHJhdGUuc3ZnP3N2Z19zdHJpbmc9JTNDc3ZnJTIwY2xhc3MlM0QlMjJpY29uJTIyJTIwc3R5bGUlM0QlMjJ3aWR0aCUzQSUyMDFlbSUzQmhlaWdodCUzQSUyMDFlbSUzQnZlcnRpY2FsLWFsaWduJTNBJTIwbWlkZGxlJTNCZmlsbCUzQSUyMGN1cnJlbnRDb2xvciUzQm92ZXJmbG93JTNBJTIwaGlkZGVuJTNCJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAyNCUyMDEwMjQlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk04NjYuMTMzMzMzJTIwOTE5LjQ2NjY2N2gtNDA1LjMzMzMzM2MtMjkuODY2NjY3JTIwMC01My4zMzMzMzMtMjMuNDY2NjY3LTUzLjMzMzMzMy01My4zMzMzMzR2LTYxOC42NjY2NjZjMC0yOS44NjY2NjclMjAyMy40NjY2NjctNTMuMzMzMzMzJTIwNTMuMzMzMzMzLTUzLjMzMzMzNGg0MDUuMzMzMzMzYzI5Ljg2NjY2NyUyMDAlMjA1My4zMzMzMzMlMjAyMy40NjY2NjclMjA1My4zMzMzMzQlMjA1My4zMzMzMzR2NjE4LjY2NjY2NmMwJTIwMjkuODY2NjY3LTIzLjQ2NjY2NyUyMDUzLjMzMzMzMy01My4zMzMzMzQlMjA1My4zMzMzMzR6JTIyJTIwZmlsbCUzRCUyMiUyMzY5QzBGRiUyMiUyMCUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTc3MC4xMzMzMzMlMjA0MjguOGgtMjEzLjMzMzMzM2MtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzNGgyMTMuMzMzMzMzYzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzQlMjAyMS4zMzMzMzRzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzQlMjAyMS4zMzMzMzN6TTc3MC4xMzMzMzMlMjA1NTYuOGgtMjEzLjMzMzMzM2MtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzNGgyMTMuMzMzMzMzYzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzQlMjAyMS4zMzMzMzRzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzQlMjAyMS4zMzMzMzN6TTc3MC4xMzMzMzMlMjA2ODQuOGgtMjEzLjMzMzMzM2MtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzNGgyMTMuMzMzMzMzYzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzQlMjAyMS4zMzMzMzRzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzQlMjAyMS4zMzMzMzN6JTIyJTIwZmlsbCUzRCUyMiUyM0ZGRkZGRiUyMiUyMCUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTU2Ny40NjY2NjclMjA4MzQuMTMzMzMzaC00MDUuMzMzMzM0Yy0yOS44NjY2NjclMjAwLTUzLjMzMzMzMy0yMy40NjY2NjctNTMuMzMzMzMzLTUzLjMzMzMzM3YtNjE4LjY2NjY2N2MwLTI5Ljg2NjY2NyUyMDIzLjQ2NjY2Ny01My4zMzMzMzMlMjA1My4zMzMzMzMtNTMuMzMzMzMzaDQwNS4zMzMzMzRjMjkuODY2NjY3JTIwMCUyMDUzLjMzMzMzMyUyMDIzLjQ2NjY2NyUyMDUzLjMzMzMzMyUyMDUzLjMzMzMzM3Y2MTguNjY2NjY3YzAlMjAyOS44NjY2NjctMjMuNDY2NjY3JTIwNTMuMzMzMzMzLTUzLjMzMzMzMyUyMDUzLjMzMzMzM3olMjIlMjBmaWxsJTNEJTIyJTIzMTg5MEZGJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNDcxLjQ2NjY2NyUyMDM0My40NjY2NjdoLTIxMy4zMzMzMzRjLTEyLjglMjAwLTIxLjMzMzMzMy04LjUzMzMzMy0yMS4zMzMzMzMtMjEuMzMzMzM0czguNTMzMzMzLTIxLjMzMzMzMyUyMDIxLjMzMzMzMy0yMS4zMzMzMzNoMjEzLjMzMzMzNGMxMi44JTIwMCUyMDIxLjMzMzMzMyUyMDguNTMzMzMzJTIwMjEuMzMzMzMzJTIwMjEuMzMzMzMzcy0xMC42NjY2NjclMjAyMS4zMzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzM0ek00NzEuNDY2NjY3JTIwNDcxLjQ2NjY2N2gtMjEzLjMzMzMzNGMtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzRzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzM2gyMTMuMzMzMzM0YzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzMlMjAyMS4zMzMzMzNzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzR6TTQ3MS40NjY2NjclMjA1OTkuNDY2NjY3aC0yMTMuMzMzMzM0Yy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzNHM4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzMzaDIxMy4zMzMzMzRjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzMyUyMDIxLjMzMzMzM3MtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzMyUyMDIxLjMzMzMzNHolMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIlxcbiAgICBsZXQgY2xlYXJJbWdVcmwgPSBcXFwiaHR0cHM6Ly9pY29uZm9udC50eXJhbnRnLmNvbS9hcGkvaWxsdXN0cmF0ZS5zdmc/c3ZnX3N0cmluZz0lM0NzdmclMjBjbGFzcyUzRCUyMmljb24lMjIlMjBzdHlsZSUzRCUyMndpZHRoJTNBJTIwMWVtJTNCaGVpZ2h0JTNBJTIwMWVtJTNCdmVydGljYWwtYWxpZ24lM0ElMjBtaWRkbGUlM0JmaWxsJTNBJTIwY3VycmVudENvbG9yJTNCb3ZlcmZsb3clM0ElMjBoaWRkZW4lM0IlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDI0JTIwMTAyNCUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTE3OS4yJTIwNTg4LjhoNzEwLjRjMjUuNiUyMDAlMjAzMi0xOS4yJTIwMjUuNi0zOC40TDgzMiUyMDM2NC44Yy0xMi44LTE5LjItMzguNC0zOC40LTY0LTM4LjRINjIwLjhWNjRjMC0yNS42LTE5LjItNDQuOC00NC44LTQ0LjhINDkyLjhjLTE5LjIlMjAwLTM4LjQlMjAxOS4yLTM4LjQlMjA0NC44djI2Mi40SDMwMC44Yy0yNS42JTIwMC01MS4yJTIwMTkuMi01Ny42JTIwMzguNEwxNTMuNiUyMDU1MC40Yy02LjQlMjAxOS4yJTIwMCUyMDM4LjQlMjAyNS42JTIwMzguNG02OTEuMiUyMDY0SDIxNy42YzYuNCUyMDY0JTIwMCUyMDE0Ny4yLTUxLjIlMjAxOTguNC03Ni44JTIwNjQtNTEuMiUyMDE0MC44JTIwNi40JTIwMTY2LjRoMTA4LjhjMTIuOC0xMi44JTIwNzAuNC0xMDIuNCUyMDg5LjYtMTkyJTIwMC0xOS4yJTIwNi40LTMyJTIwNi40LTMyJTIwMCUyMDEyLjglMjAwJTIwMTkuMi02LjQlMjAzMi02LjQlMjA1Ny42LTI1LjYlMjAxNzIuOC0zOC40JTIwMTkyaDgzLjJjMTIuOC0xMi44JTIwNzAuNC0xMDIuNCUyMDg5LjYtMTkyJTIwMC0xOS4yJTIwNi40LTMyJTIwNi40LTMyJTIwMCUyMDEyLjglMjAwJTIwMTkuMi02LjQlMjAzMi02LjQlMjA1Ny42LTI1LjYlMjAxNzIuOC0zOC40JTIwMTkyaDEwMi40YzEyLjgtMTIuOCUyMDcwLjQtMTAyLjQlMjA4OS42LTE5MiUyMDAtMTkuMiUyMDYuNC0zMiUyMDYuNC0zMiUyMDAlMjAxMi44JTIwMCUyMDE5LjItNi40JTIwMzItNi40JTIwNTcuNi0yNS42JTIwMTcyLjgtMzguNCUyMDE5Mkg3MDRjMTIuOC0xMi44JTIwNzAuNC0xMDIuNCUyMDg5LjYtMTkyJTIwMC0xOS4yJTIwNi40LTMyJTIwNi40LTMyJTIwMCUyMDEyLjglMjAwJTIwMTkuMi02LjQlMjAzMi02LjQlMjA1Ny42LTI1LjYlMjAxNzIuOC0zOC40JTIwMTkyaDEwMi40czcwLjQtMjUuNiUyMDU3LjYtMTAyLjRjLTE5LjItMTE1LjItMjUuNi0xNzkuMi00NC44LTI2Mi40JTIyJTIwZmlsbCUzRCUyMiUyMzczNjdEMSUyMiUyMCUyRiUzRSUzQyUyRnN2ZyUzRVxcXCJcXG5cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5riF56m66L6T5YWlJyxcXG4gICAgICAgIGltZzogY2xlYXJJbWdVcmwsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiICsgXFxcIkBsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ290aGVyLmVuY29kZS50ZXh0JywgJycpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5riF56m65oiQ5YqfJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMidcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+a4heepuui+k+WHuicsXFxuICAgICAgICBpbWc6IGNsZWFySW1nVXJsLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIiArIFxcXCJAbGF6eVJ1bGU9LmpzOnB1dE15VmFyKCdvdGhlci5kZWNvZGUudGV4dCcsICcnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+a4heepuuaIkOWKnydcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpY29uXzInXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflpI3liLbovpPlhaUnLFxcbiAgICAgICAgaW1nOiBjcEltZ1VybCxcXG4gICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkZWMgPSBnZXRNeVZhcihcXFwib3RoZXIuZW5jb2RlLnRleHRcXFwiKTtcXG4gICAgICAgICAgICBpZiAoZGVjKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBkZWM7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WGheWuueS4uuepuu+8gVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl8yJ1xcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5aSN5Yi26L6T5Ye6JyxcXG4gICAgICAgIGltZzogY3BJbWdVcmwsXFxuICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZW5jID0gZ2V0TXlWYXIoXFxcIm90aGVyLmRlY29kZS50ZXh0XFxcIik7XFxuICAgICAgICAgICAgaWYgKGVuYykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgZW5jO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lhoXlrrnkuLrnqbrvvIFcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMidcXG4gICAgfSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ1aWxkT3RoZXJVaShkLCBvYmopIHtcXG4gICAgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCLml7bpl7TmiLNcXFwiKSkge1xcbiAgICAgICAgYnVpbGRFbXB0eU90aGVyVWkoZCwgb2JqKTtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIlY26Kej5a+GXFxcIikpIHtcXG4gICAgICAgIGJ1aWxkRGVjb2RlVjZVSShkLCBvYmopO1xcbiAgICB9IGVsc2UgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCJQcml2YXRlSlNcXFwiKSkge1xcbiAgICAgICAgYnVpbGRQcml2YXRlSnNVaShkLCBvYmopO1xcbiAgICB9XFxuICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwiVjbop6Plr4ZcXFwiKSB8fCBvYmoudHlwZS5pbmNsdWRlcyhcXFwiUHJpdmF0ZUpTXFxcIikpIHtcXG4gICAgICAgIGJ1aWxkQ29udHJvbGxlclVpKGQsIG9iaik7XFxuICAgIH1cXG59XFxuLy8gVE9ETyDmt7vliqDmuIXpmaQgVmFyIOWPmOmHj1xcbmZ1bmN0aW9uIGJ1aWxkRGVjb2RlVjZVSShkLCBvYmopIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6Kej5re35reGXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaUgamlhbWkuY29tLnY2IOeahOWvhuaWh1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJvdGhlci5lbmNvZGUudGV4dFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcIm90aGVyLmVuY29kZS50ZXh0XFxcIiwgaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgLy8gb2JqLmRlY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5kZWNUZXh0OiBcXFwiICsgb2JqLmRlY1RleHQpXFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnJykgcmV0dXJuICd0b2FzdDovL+i+k+WFpeS4uuepuu+8jOivt+ajgOafpSEnXFxuICAgICAgICAgICAgbGV0IHRvYXN0VGV4dCA9IFxcXCLop6Pmt7fmt4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIGxldCBkZWNfcmVzdWx0ID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAoL15odHRwKHMqKTpcXFxcL1xcXFwvLy50ZXN0KGlucHV0LnRyaW0oKSkpID8gcmVxdWVzdChpbnB1dCkgOiBpbnB1dDtcXG4gICAgICAgICAgICAgICAgZGVjX3Jlc3VsdCA9IGZldGNoKGJhc2U2NERlY29kZShcXFwiYUhSMGNITTZMeTluWVhSellua3RibWx1WlMxaWJIVnphQzUyWlhKalpXd3VZWEJ3TDJGd2FTOTJOZz09XFxcIiksIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb2RlXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLy8gbG9nKFxcXCJoYXNoX3Jlc3VsdDogXFxcIiArIGhhc2hfcmVzdWx0KVxcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gJycpIHRvYXN0VGV4dCA9IFxcXCLop6Pmt7fmt4blpLHotKVcXFwiO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgZGVjX3Jlc3VsdCA9IGUubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgdG9hc3RUZXh0ID0gXFxcIuino+a3t+a3huWksei0pVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJvdGhlci5kZWNvZGUudGV4dFxcXCIsIGRlY19yZXN1bHQpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyArIHRvYXN0VGV4dDtcXG4gICAgICAgIH0sIG9iaiksXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLku6PnoIHmn6XnnItcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIue7k+aenOi+k+WHulxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJvdGhlci5kZWNvZGUudGV4dFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcIm90aGVyLmRlY29kZS50ZXh0XFxcIiwgaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgLy8gb2JqLmVuY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5lbmNUZXh0OiBcXFwiICsgb2JqLmVuY1RleHQpXFxuICAgICAgICAgICAgaWYgKGlucHV0KSB7XFxuICAgICAgICAgICAgICAgIGxldCBjYWNoZVBhdGggPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9DcnlwdG9Ub29sLmNhY2hlJztcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGNhY2hlUGF0aCwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VkaXRGaWxlOi8vJyArIGNhY2hlUGF0aDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YaF5a655Li656m677yBXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICB9KTtcXG59XFxuXFxuZnVuY3Rpb24gYnVpbGRQcml2YXRlSnNVaShkLCBvYmopIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5Yqg5a+GXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXku6PnoIHmmI7mlodcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwib3RoZXIuZW5jb2RlLnRleHRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dE15VmFyKFxcXCJvdGhlci5lbmNvZGUudGV4dFxcXCIsIGlucHV0KSdcXG4gICAgICAgIH0sXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgIC8vIG9iai5kZWNUZXh0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJvYmouZGVjVGV4dDogXFxcIiArIG9iai5kZWNUZXh0KVxcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJycpIHJldHVybiAndG9hc3Q6Ly/ovpPlhaXkuLrnqbrvvIzor7fmo4Dmn6UhJ1xcbiAgICAgICAgICAgIGxldCB0b2FzdFRleHQgPSBcXFwi5Yqg5a+G5Luj56CB5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICBsZXQgZGVjX3Jlc3VsdCA9ICdldmFsUHJpdmF0ZUpTKFxcXFxcXFwiJyArIGdldFByaXZhdGVKUyhpbnB1dCkgKyAnXFxcIiknO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJvdGhlci5kZWNvZGUudGV4dFxcXCIsIGRlY19yZXN1bHQpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyArIHRvYXN0VGV4dDtcXG4gICAgICAgIH0sIG9iaiksXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLku6PnoIHmn6XnnItcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIue7k+aenOi+k+WHulxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJvdGhlci5kZWNvZGUudGV4dFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcIm90aGVyLmRlY29kZS50ZXh0XFxcIiwgaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgLy8gb2JqLmVuY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5lbmNUZXh0OiBcXFwiICsgb2JqLmVuY1RleHQpXFxuICAgICAgICAgICAgaWYgKGlucHV0KSB7XFxuICAgICAgICAgICAgICAgIGxldCBjYWNoZVBhdGggPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9DcnlwdG9Ub29sLmNhY2hlJztcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGNhY2hlUGF0aCwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VkaXRGaWxlOi8vJyArIGNhY2hlUGF0aDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YaF5a655Li656m677yBXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICB9KTtcXG59XFxuXFxuJC5leHBvcnRzLmJ1aWxkT3RoZXJVaSA9IGJ1aWxkT3RoZXJVaVwifSx7XCJjb2xfdHlwZVwiOlwicmljaF90ZXh0XCIsXCJuYW1lXCI6XCLlhbbku5bovazmjaLpobXpnaJcIixcInBhdGhcIjpcIm90aGVyXCIsXCJydWxlXCI6XCJjb25zdCB7IGJ1aWxkT3RoZXJVaSB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvb3RoZXJ1aVxcXCIpO1xcbmZ1bmN0aW9uIHNldE90aGVyUGFnZShkLCBvYmopIHtcXG4gICAgYnVpbGRPdGhlclVpKGQsIG9iaik7XFxufVxcbiQuZXhwb3J0cy5zZXRPdGhlclBhZ2UgPSBzZXRPdGhlclBhZ2VcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS9m+absFwiLFwicGF0aFwiOlwiYnVkZGhhXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgYnVkZGhhID0ge307XFxuYnVkZGhhLmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICAvLyBsb2coXFxcIltidWRkaGFdb2JqLmRlY1RleHQ6IFxcXCIgKyBvYmouZGVjVGV4dClcXG4gICAgbGV0IGVuY29kZSA9IHJlcXVlc3QoXFxcImh0dHBzOi8vd3d3LmtleWZjLm5ldC9iYnMvdG9vbHMvdHVkb3UuYXNweFxcXCIse1xcbiAgICBoZWFkZXJzOntcXG4gICAgICAgIFxcXCJyZWZlcmVyXFxcIjpcXFwiaHR0cHM6Ly93d3cua2V5ZmMubmV0L2Jicy90b29scy90dWRvdWNvZGUuYXNweFxcXCIsXFxuICAgICAgICAvL1xcXCJ1c2VyLWFnZW50XFxcIjpcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDExOyBNaSAxMCBQcm8pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OC4wLjQzMjQuMTUyIE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIixcXG4gICAgICAgIFxcXCJjb250ZW50LXR5cGVcXFwiOlxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiLFxcbiAgICAgICAgLy9cXFwiQ29va2llXFxcIjpcXFwibGFzdG9sdXBkYXRlPTk4OTc5MjUwNjtBU1BTRVNTSU9OSURDR1JDQ0NRRD1DR0lET0dNQk1DQUpLSk5DQUdQUEdGTlA7ZG50PXJlZmVyZXI9c2hvd3RvcGljLmFzcHglM2Z0b3BpY2lkJTNkMjM5NDQlMjZwYWdlJTNkMSUyNmZvcnVtcGFnZSUzZDFcXFwiXFxuICAgICAgICB9LFxcbiAgICBib2R5OlxcXCJvcmlnbmFsTXNnPVxcXCIrZW5jb2RlVVJJKG9iai5kZWNUZXh0KStcXFwiJmFjdGlvbj1FbmNvZGVcXFwiLFxcbiAgICBtZXRob2Q6XFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIC8vIGxvZyhcXFwiW2J1ZGRoYV1lbmNvZGU6IFxcXCIgKyBlbmNvZGUpXFxuICAgIHJldHVybiBlbmNvZGUuc3BsaXQoXFxcIkNEQVRBW1xcXCIpWzFdLnNwbGl0KFxcXCJdXFxcIilbMF07XFxufVxcbmJ1ZGRoYS5kZWNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgbGV0IGRlY29kZSA9IHJlcXVlc3QoXFxcImh0dHBzOi8vd3d3LmtleWZjLm5ldC9iYnMvdG9vbHMvdHVkb3UuYXNweFxcXCIse1xcbiAgICBoZWFkZXJzOntcXG4gICAgICAgIFxcXCJyZWZlcmVyXFxcIjpcXFwiaHR0cHM6Ly93d3cua2V5ZmMubmV0L2Jicy90b29scy90dWRvdWNvZGUuYXNweFxcXCIsXFxuICAgICAgICAvL1xcXCJ1c2VyLWFnZW50XFxcIjpcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDExOyBNaSAxMCBQcm8pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OC4wLjQzMjQuMTUyIE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIixcXG4gICAgICAgIFxcXCJjb250ZW50LXR5cGVcXFwiOlxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiLFxcbiAgICAgICAgLy9cXFwiQ29va2llXFxcIjpcXFwibGFzdG9sdXBkYXRlPTk4OTc5MjUwNjtBU1BTRVNTSU9OSURDR1JDQ0NRRD1DR0lET0dNQk1DQUpLSk5DQUdQUEdGTlA7ZG50PXJlZmVyZXI9c2hvd3RvcGljLmFzcHglM2Z0b3BpY2lkJTNkMjM5NDQlMjZwYWdlJTNkMSUyNmZvcnVtcGFnZSUzZDFcXFwiXFxuICAgICAgICB9LFxcbiAgICBib2R5OlxcXCJvcmlnbmFsTXNnPVxcXCIrZW5jb2RlVVJJKG9iai5lbmNUZXh0KStcXFwiJmFjdGlvbj1EZWNvZGVcXFwiLFxcbiAgICBtZXRob2Q6XFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBkZWNvZGUuc3BsaXQoXFxcIkNEQVRBW1xcXCIpWzFdLnNwbGl0KFxcXCJdXFxcIilbMF07XFxufVxcbiQuZXhwb3J0cy5idWRkaGEgPSBidWRkaGFcIn0se1wiY29sX3R5cGVcIjpcInJpY2hfdGV4dFwiLFwibmFtZVwiOlwiVVJJXCIsXCJwYXRoXCI6XCJ1cmlcIixcInJ1bGVcIjpcImpzOlxcbmxldCB1cmkgPSB7fTtcXG51cmkuZW5jb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBlbmNvZGUgPSBlbmNvZGVVUkkob2JqLmRlY1RleHQpO1xcbiAgICByZXR1cm4gZW5jb2RlO1xcbn1cXG51cmkuZGVjb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBkZWNvZGUgPSBkZWNvZGVVUkkob2JqLmVuY1RleHQpO1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4kLmV4cG9ydHMudXJpID0gdXJpXCJ9LHtcImNvbF90eXBlXCI6XCJyaWNoX3RleHRcIixcIm5hbWVcIjpcIlVSSUNvbXBvbmVudFwiLFwicGF0aFwiOlwidXJpY29tcG9uZW50XCIsXCJydWxlXCI6XCJqczpcXG5sZXQgdXJpY29tcG9uZW50ID0ge307XFxudXJpY29tcG9uZW50LmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZW5jb2RlID0gZW5jb2RlVVJJQ29tcG9uZW50KG9iai5kZWNUZXh0KTtcXG4gICAgcmV0dXJuIGVuY29kZTtcXG59XFxudXJpY29tcG9uZW50LmRlY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50KG9iai5lbmNUZXh0KTtcXG4gICAgcmV0dXJuIGRlY29kZTtcXG59XFxuJC5leHBvcnRzLnVyaWNvbXBvbmVudCA9IHVyaWNvbXBvbmVudFwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5paw5L2b5puwXCIsXCJwYXRoXCI6XCJuZXdCdWRkaGFcIixcInJ1bGVcIjpcImpzOlxcbmxldCBuZXdCdWRkaGEgPSB7fTtcXG5uZXdCdWRkaGEuZW5jb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIC8vIGxvZyhcXFwiW2J1ZGRoYV1vYmouZGVjVGV4dDogXFxcIiArIG9iai5kZWNUZXh0KVxcbiAgICBsZXQgZW5jb2RlID0gcmVxdWVzdCgnaHR0cDovL2hpLnBjbW9lLm5ldC9iZWFyLnBocCcsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnWC1Ub2tlbic6ICcwN0I5N0FBNjQ0RTgnLFxcbiAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2hpLnBjbW9lLm5ldCcsXFxuICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgTm90ZTkgQnVpbGQvUUtRMS4xOTEyMjIuMDAyOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc3LjAuMzg2NS4xMjAgTVFRQnJvd3Nlci82LjIgVEJTLzA0NTYxNCBNb2JpbGUgU2FmYXJpLzUzNy4zNicsXFxuICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHA6Ly9oaS5wY21vZS5uZXQvYnVkZGhhLmh0bWwnXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ21vZGU9QnVkZGhhJmNvZGU9RW5jb2RlJnR4dD0nICsgb2JqLmRlY1RleHQsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgLy8gbG9nKFxcXCJbYnVkZGhhXWVuY29kZTogXFxcIiArIGVuY29kZSlcXG4gICAgcmV0dXJuIGVuY29kZTtcXG59XFxubmV3QnVkZGhhLmRlY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZGVjb2RlID0gcmVxdWVzdCgnaHR0cDovL2hpLnBjbW9lLm5ldC9iZWFyLnBocCcsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnWC1Ub2tlbic6ICcwN0I5N0FBNjQ0RTgnLFxcbiAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2hpLnBjbW9lLm5ldCcsXFxuICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgTm90ZTkgQnVpbGQvUUtRMS4xOTEyMjIuMDAyOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc3LjAuMzg2NS4xMjAgTVFRQnJvd3Nlci82LjIgVEJTLzA0NTYxNCBNb2JpbGUgU2FmYXJpLzUzNy4zNicsXFxuICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHA6Ly9oaS5wY21vZS5uZXQvYnVkZGhhLmh0bWwnXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ21vZGU9QnVkZGhhJmNvZGU9RGVjb2RlJnR4dD0nICsgb2JqLmVuY1RleHQsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGRlY29kZTtcXG59XFxuJC5leHBvcnRzLm5ld0J1ZGRoYSA9IG5ld0J1ZGRoYVwifV0iLCJpY29uIjoiaHR0cHM6Ly9pY29uZm9udC50eXJhbnRnLmNvbS9hcGkvaWxsdXN0cmF0ZS5zdmc/c3ZnX3N0cmluZz0lM0NzdmclMjBjbGFzcyUzRCUyMmljb24lMjIlMjBzdHlsZSUzRCUyMndpZHRoJTNBJTIwMWVtJTNCaGVpZ2h0JTNBJTIwMWVtJTNCdmVydGljYWwtYWxpZ24lM0ElMjBtaWRkbGUlM0JmaWxsJTNBJTIwY3VycmVudENvbG9yJTNCb3ZlcmZsb3clM0ElMjBoaWRkZW4lM0IlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDI0JTIwMTAyNCUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTY5OS4zOTIlMjA0MDQuOGMwJTIwMjcuNDU2JTIwMjIuMDglMjA0OS43MjglMjA0OS4yOCUyMDQ5Ljc5MmE0OS42JTIwNDkuNiUyMDAlMjAwJTIwMCUyMDQ5LjQ3Mi00OS43MjhjMC0zMy4xNTItMTYuNTEyLTQ5Ljc5Mi00OS40MDgtNDkuNzkycy00OS4zNDQlMjAxNi41NzYtNDkuMzQ0JTIwNDkuNzI4ek0xOTIlMjA5NjB2LTE4Ny42NDhsMjc0LjE3Ni0yNzYuMTZhMjg3LjE2OCUyMDI4Ny4xNjglMjAwJTIwMCUyMDEtNS41MDQtNTIuNzM2QzQ2MC42NzIlMjAzMDQuODMyJTIwNTcyLjY3MiUyMDE5MiUyMDcxMC4zMzYlMjAxOTJTOTYwJTIwMzA0LjgzMiUyMDk2MCUyMDQ0My41MmMwJTIwMTM4LjYyNC0xMTIlMjAyNTEuMzkyLTI0OS42JTIwMjUxLjM5Mi0yNi41NiUyMDAtNTIuNzM2LTQuMjI0LTc3Ljg4OC0xMi41NDRsLTguMTI4LTIuNzUyLTMwLjUyOCUyMDIuNjI0djkwLjY4OEg1MDQuOTZ2OTAuNjI0SDQxNC45MTJWOTYwSDE5MnolMjBtNTE4LjQtNzEzLjQ3MmMtMTA3Ljg0JTIwMC0xOTUuNTg0JTIwODguMzItMTk1LjU4NCUyMDE5Ni45MjglMjAwJTIwMTQuNzIlMjAxLjYlMjAyOS4zMTIlMjA0Ljg2NCUyMDQzLjcxMiUyMDQuMDMyJTIwMTcuNzI4JTIwMC43NjglMjAzMS41NTItOS45MiUyMDQyLjI0bC0yNjMuNjE2JTIwMjY1LjUzNnYxMTAuNTI4aDExNC41NlY4MDguOTZoOTAuMDQ4di05MC42MjRoODguOTZWNjM5LjU1MmMxMC4zNjgtMy4yJTIwMzguNTI4LTExLjEzNiUyMDYzLjg3Mi0xMS4xMzYlMjA4JTIwMCUyMDE1LjA0JTIwMC43NjglMjAyMC45OTIlMjAyLjMwNCUyMDM2LjI4OCUyMDkuNDcyJTIwODMuNzEyJTIwOS42JTIwODUuNzYlMjA5LjYlMjAxMDcuNzc2JTIwMCUyMDE5NS40NTYtODguMzIlMjAxOTUuNDU2LTE5Ni44NjQlMjAwLTEwOC41NDQtODcuNjgtMTk2LjkyOC0xOTUuNDU2LTE5Ni45Mjh6JTIyJTIwZmlsbCUzRCUyMiUyMzY2NjY2NiUyMiUyMCUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTE5MiUyMDY0aDY0djMyMEgxOTJWNjR6JTIyJTIwZmlsbCUzRCUyMiUyMzAxODJGRiUyMiUyMCUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTY5LjQ0JTIwMTcxLjcxMmwzMi01NS40MjQlMjAyNzcuMTIlMjAxNjAtMzIlMjA1NS40MjQtMjc3LjEyLTE2MHolMjIlMjBmaWxsJTNEJTIyJTIzMDE4MkZGJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNMzQ2LjU2JTIwMTE2LjI4OGwzMiUyMDU1LjQyNC0yNzcuMTIlMjAxNjAtMzItNTUuNDI0JTIwMjc3LjEyLTE2MHolMjIlMjBmaWxsJTNEJTIyJTIzMDE4MkZGJTIyJTIwJTJGJTNFJTNDJTJGc3ZnJTNFIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment