xiaomianao666

小程序:加解密工具

Mar 20th, 2024
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@加解密工具@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5Yqg6Kej5a+G5bel5YW3IiwiYXV0aG9yIjoiUngmUmVib3JuJkBMb3lEZ0lrJnd6aGpnb29kJkpva2VyIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSNmeUFsbCIsInZlcnNpb24iOjI2LCJjb2xfdHlwZSI6InJpY2hfdGV4dCIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidG9vbCIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxubGV0IG5ld1dpbmRvdyA9IHRydWVcbmxldCBob21lUGFnZSA9IEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2hvbWU/cnVsZT3liqDop6Plr4blt6XlhbcnKSkucnVsZVxuZXZhbChob21lUGFnZSkiLCJzZWFyY2hfdXJsIjoiIiwiZ3JvdXAiOiLmiJHnmoTlsI/nqIvluo8iLCJzZWFyY2hGaW5kIjoiIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiVW5pY29kZVwiLFwicGF0aFwiOlwidW5pY29kZVwiLFwicnVsZVwiOlwianM6XFxubGV0IHVuaWNvZGUgPSB7fTtcXG51bmljb2RlLmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZW5jb2RlID0gZXNjYXBlKG9iai5kZWNUZXh0LnJlcGxhY2UoLyV1L2csIFxcXCJcXFxcXFxcXHVcXFwiKSk7XFxuICAgIHJldHVybiBlbmNvZGU7XFxufVxcbnVuaWNvZGUuZGVjb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBkZWNvZGUgPSB1bmVzY2FwZShvYmouZW5jVGV4dC5yZXBsYWNlKC9cXFxcXFxcXHUvZywgXFxcIiV1XFxcIikpO1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4kLmV4cG9ydHMudW5pY29kZSA9IHVuaWNvZGVcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQmFzZTY0XCIsXCJwYXRoXCI6XCJiYXNlNjRcIixcInJ1bGVcIjpcImpzOlxcbmxldCBiYXNlNjQgPSB7fTtcXG5iYXNlNjQuZW5jb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIC8vIGxldCBlbmNvZGUgPSBlbmNvZGVVUklDb21wb25lbnQoYmFzZTY0RW5jb2RlKG9iai5kZWNUZXh0KSk7XFxuICAgIGxldCBlbmNvZGUgPSBiYXNlNjRFbmNvZGUob2JqLmRlY1RleHQpO1xcbiAgICByZXR1cm4gZW5jb2RlO1xcbn1cXG5iYXNlNjQuZGVjb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBkZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQoYmFzZTY0RGVjb2RlKG9iai5lbmNUZXh0KSk7XFxuICAgIHJldHVybiBkZWNvZGU7XFxufVxcbiQuZXhwb3J0cy5iYXNlNjQgPSBiYXNlNjRcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQVNDSUlcIixcInBhdGhcIjpcImFzY2lpXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgYXNjaWkgPSB7fTtcXG5hc2NpaS51bmljb2RlMSA9IGZ1bmN0aW9uKHN0cikge1xcbiAgICB2YXIgdmFsdWUgPSAnJztcXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJiMnICsgc3RyLmNoYXJDb2RlQXQoaSkgKyAnOyc7XFxuICAgIH1cXG4gICAgcmV0dXJuIHZhbHVlO1xcbn1cXG5hc2NpaS5yZWNvbnZlcnQgPSBmdW5jdGlvbihzdHIpIHtcXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLyhcXFxcXFxcXHUpKFxcXFx3ezEsNH0pL2dpLCBmdW5jdGlvbigkMCkge1xcbiAgICAgICAgcmV0dXJuIChTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KChlc2NhcGUoJDApLnJlcGxhY2UoLyglNUN1KShcXFxcd3sxLDR9KS9nLCBcXFwiJDJcXFwiKSksIDE2KSkpO1xcbiAgICB9KTtcXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLygmI3gpKFxcXFx3ezEsNH0pOy9naSwgZnVuY3Rpb24oJDApIHtcXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVzY2FwZSgkMCkucmVwbGFjZSgvKCUyNiUyM3gpKFxcXFx3ezEsNH0pKCUzQikvZywgXFxcIiQyXFxcIiksIDE2KSk7XFxuICAgIH0pO1xcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvKCYjKShcXFxcZHsxLDZ9KTsvZ2ksIGZ1bmN0aW9uKCQwKSB7XFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlc2NhcGUoJDApLnJlcGxhY2UoLyglMjYlMjMpKFxcXFxkezEsNn0pKCUzQikvZywgXFxcIiQyXFxcIikpKTtcXG4gICAgfSk7XFxuXFxuICAgIHJldHVybiBzdHI7XFxufVxcbi8vICQuZXhwb3J0cy51bmljb2RlMSA9IHVuaWNvZGUxO1xcbi8vICQuZXhwb3J0cy5yZWNvbnZlcnQgPSByZWNvbnZlcnQ7XFxuYXNjaWkuZW5jb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBlbmNvZGUgPSB0aGlzLnVuaWNvZGUxKG9iai5kZWNUZXh0KTtcXG4gICAgcmV0dXJuIGVuY29kZTtcXG59XFxuYXNjaWkuZGVjb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBkZWNvZGUgPSB0aGlzLnJlY29udmVydChvYmouZW5jVGV4dCk7XFxuICAgIHJldHVybiBkZWNvZGU7XFxufVxcbiQuZXhwb3J0cy5hc2NpaSA9IGFzY2lpO1wifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCLojrflj5bliIbnsbvlpLTpg6hcIixcInBhdGhcIjpcImNsYXNzaWNIZWFkZXJcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkID0gW107XFxubGV0IHNlbGVjdENvbG9yID0gJyNDMDRBMkYnXFxuLy8g5pqX5qmZIEUzOEM0QVxcblxcbmZ1bmN0aW9uIHB1dEtleUludG9NYXAoa2V5LCB2YWx1ZSkge1xcbiAgICBjb25zdCBrZXlNYXAgPSBKU09OLnBhcnNlKGdldFZhcigoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKStcXFwiX2FsbF9rZXlfTWFwXFxcIiksIFxcXCJ7fVxcXCIpKTtcXG4gICAga2V5TWFwW2tleV0gPSB2YWx1ZTtcXG4gICAgcHV0VmFyKChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIl9hbGxfa2V5X01hcFxcXCIpLCBKU09OLnN0cmluZ2lmeShrZXlNYXApKTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0SGVhZGVyRnJvbUpTT05PYmplY3Qob2JqKSB7XFxuICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGtleSA9PSBnZXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSwgT2JqZWN0LmtleXMob2JqKVswXSkgPyBcXFwiPGI+4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBzZWxlY3RDb2xvciArXFxcIic+XFxcIiArIGtleSArIFxcXCI8L2ZvbnQ+PC9iPlxcXCIgOiBrZXksXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIiksIGtleSk7XFxuICAgICAgICAgICAgICAgIHB1dFZhcigoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfY3VyX2luZGV4XFxcIiksIGtleSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIGtleSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pO1xcbiAgICBsZXQga2V5ID0gZ2V0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIiksIE9iamVjdC5rZXlzKG9iailbMF0pO1xcbiAgICBwdXRWYXIoKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2N1cl9pbmRleFxcXCIpLCBrZXkpO1xcbiAgICBnZXROZXh0SGVhZGVyRnJvbUpTT05BcnJheShrZXksIG9ialtrZXldKTtcXG4gICAgcmV0dXJuIGQ7XFxufVxcblxcbmZ1bmN0aW9uIGdldE5leHRIZWFkZXJGcm9tSlNPTkFycmF5KGtleSwgYXJyYXkpIHtcXG4gICAgaWYgKGFycmF5ID09IHVuZGVmaW5lZCB8fCBhcnJheS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGxldCBuZXh0SGVhZGVyID0ge307XFxuICAgIGxldCBkZWZhdWx0VmFsdWUgPSBcXFwiXFxcIjtcXG4gICAgZGVmYXVsdFZhbHVlID0gYXJyYXlbMF07XFxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXlbMF0pID09PSAnW29iamVjdCBPYmplY3RdJykge1xcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gT2JqZWN0LmtleXMoYXJyYXlbMF0pWzBdO1xcbiAgICB9XFxuICAgIHB1dEtleUludG9NYXAoKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiQEBcXFwiICsga2V5KSwgZ2V0VmFyKChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSksIGRlZmF1bHRWYWx1ZSkpXFxuICAgIHB1dFZhcigoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfY3VyX2luZGV4XFxcIiksIGtleSArIFxcXCJAQFxcXCIgKyBnZXRWYXIoKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiQEBcXFwiICsga2V5KSwgZGVmYXVsdFZhbHVlKSk7XFxuICAgIGZvciAobGV0IHZhbHVlIG9mIGFycmF5KSB7XFxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcXG4gICAgICAgICAgICAvLyBsb2coXFxcInZhbHVlS2V5czogXFxcIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh2YWx1ZSlbMF0pKVxcbiAgICAgICAgICAgIGxldCB2YWx1ZUtleSA9IE9iamVjdC5rZXlzKHZhbHVlKVswXTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdmFsdWVLZXkgPT0gZ2V0VmFyKChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSksIGRlZmF1bHRWYWx1ZSkgPyBcXFwiPGI+4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBzZWxlY3RDb2xvciArXFxcIic+XFxcIiArIHZhbHVlS2V5ICsgXFxcIjwvZm9udD48L2I+XFxcIiA6IHZhbHVlS2V5LFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHZhbHVlS2V5LCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHB1dEtleUludG9NYXAoa2V5LCB2YWx1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleU1hcCA9IEpTT04ucGFyc2UoZ2V0VmFyKChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIl9hbGxfa2V5X01hcFxcXCIpLCBcXFwie31cXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5TWFwW2tleV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfYWxsX2tleV9NYXBcXFwiLCBKU09OLnN0cmluZ2lmeShrZXlNYXApKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSwgdmFsdWVLZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2N1cl9pbmRleFxcXCIsIGtleSArIFxcXCJAQFxcXCIgKyB2YWx1ZUtleSk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRLZXlJbnRvTWFwKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiQEBcXFwiICsga2V5LCBnZXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXksIFxcXCJkZWZhdWx0VmFsdWVcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgdmFsdWVLZXksIGtleSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBuZXh0SGVhZGVyW3ZhbHVlS2V5XSA9IHZhbHVlW3ZhbHVlS2V5XTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlID09IGdldFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSwgZGVmYXVsdFZhbHVlKSA/IFxcXCI8Yj7igJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcIiArIHNlbGVjdENvbG9yICtcXFwiJz5cXFwiICsgdmFsdWUgKyBcXFwiPC9mb250PjwvYj5cXFwiIDogdmFsdWUsXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodmFsdWUsIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHV0S2V5SW50b01hcChrZXksIHZhbHVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5TWFwID0gSlNPTi5wYXJzZShnZXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfYWxsX2tleV9NYXBcXFwiLCBcXFwie31cXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5TWFwW2tleV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfYWxsX2tleV9NYXBcXFwiLCBKU09OLnN0cmluZ2lmeShrZXlNYXApKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSwgdmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0S2V5SW50b01hcChnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSwgZ2V0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiQEBcXFwiICsga2V5LCBcXFwiZGVmYXVsdFZhbHVlXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfY3VyX2luZGV4XFxcIiwga2V5ICsgXFxcIkBAXFxcIiArIHZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgdmFsdWUsIGtleSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgfSk7XFxuICAgIGlmIChuZXh0SGVhZGVyICE9PSB1bmRlZmluZWQgJiYgbmV4dEhlYWRlci5sZW5ndGggIT0gMCkge1xcbiAgICAgICAgZ2V0TmV4dEhlYWRlckZyb21KU09OQXJyYXkoa2V5ICsgXFxcIkBAXFxcIiArIGdldFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIkBAXFxcIiArIGtleSwgZGVmYXVsdFZhbHVlKSwgbmV4dEhlYWRlcltnZXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQFxcXCIgKyBrZXksIGRlZmF1bHRWYWx1ZSldKTtcXG4gICAgfVxcbn1cXG5cXG5sZXQgaGVhZGVyID0ge1xcbiAgICAvKipcXG4gICAgICog5Y+v6Ieq5a6a5LmJ5b2T5YmN5YiG57G75aS06YOoIGlk77yI5YW25a6e5rKh5ZWl55So77yM5bCx5piv5Li65LqG6LCD6K+V5LiN5ZCM6KeE5YiZ5Yy65YiG5LiA5LiL6ICM5bey77yJXFxuICAgICAqL1xcbiAgICBzZXRJZDogZnVuY3Rpb24oaWQpIHtcXG5cXHQgICAgICBwdXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBpZClcXG4gICAgfSxcXG4gICAgZ2V0SWQ6IGZ1bmN0aW9uKCkge1xcblxcdCAgICAgIHJldHVybiBnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpO1xcbiAgICB9LFxcbiAgICAvKipcXG4gICAgICog6I635Y+W5YiG57G75aS06YOo77yM6L+U5Zue6KeG55WMIHNldFJlc3VsdCDnlKjnmoTmlbDnu4RcXG4gICAgICovXFxuICAgIGdldDogZnVuY3Rpb24ob2JqKSB7XFxuICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0SGVhZGVyRnJvbUpTT05PYmplY3Qob2JqKTtcXG4gICAgICAgIC8vbG9nKFxcXCLjgJDlrZDpobXpnaLjgJFcXFwiICsgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSlcXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgICog6aG16Z2i5YWz6Zet5pe26ZyA6KaB5rOo5YaM55qE55Sf5ZG95ZGo5pyf77yM5byV5YWl5L6d6LWW5ZCO5ZyoIGFkZExpc3RlbmVyIOS4reiwg+eUqOWNs+WPr1xcbiAgICAgICog5L6L77yaXFxuICAgICAgICAgY29uc3QgeyBoZWFkZXIgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NsYXNzaWNIZWFkZXJcXFwiKTtcXG4gICAgICAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKGhlYWRlcikgPT4ge1xcbiAgICAgICAgICBoZWFkZXIub25DbG9zZSgpO1xcbiAgICAgICAgfSwgaGVhZGVyKSk7XFxuICAgICAgKi9cXG4gICAgb25DbG9zZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICAvLyBwdXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJcXFwiLCBcXFwi57yW56CBXFxcIik7XFxuICAgICAgICAvLyBwdXRWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJAQOe8lueggVxcXCIsIFxcXCLkvZvmm7BcXFwiKTtcXG4gICAgICAgIGxldCBhbGxLZXlBcnIgPSBPYmplY3Qua2V5cyhKU09OLnBhcnNlKGdldFZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpICsgXFxcIl9hbGxfa2V5X01hcFxcXCIsIFxcXCJ7fVxcXCIpKSk7XFxuICAgICAgICBmb3IgKGxldCBpIGluIGFsbEtleUFycikge1xcbiAgICAgICAgICAgIGNsZWFyVmFyKGFsbEtleUFycltpXSk7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCLjgJDmuIXnkIblkI7jgJFcXFwiKyBhbGxLZXlBcnJbaV0gKyBcXFwiOiBcXFwiK0pTT04uc3RyaW5naWZ5KGdldFZhcihhbGxLZXlBcnJbaV0sIFxcXCJcXFwiKSkpXFxuICAgICAgICB9XFxuICAgICAgICBjbGVhclZhcihnZXRWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiLCBcXFwiY2xhc3NpY1xcXCIpKVxcbiAgICAgICAgY2xlYXJWYXIoZ2V0VmFyKFxcXCJDbGFzc2ljSGVhZGVyLmlkXFxcIiwgXFxcImNsYXNzaWNcXFwiKSArIFxcXCJfYWxsX2tleV9NYXBcXFwiKVxcbiAgICAgICAgY2xlYXJWYXIoXFxcIkNsYXNzaWNIZWFkZXIuaWRcXFwiKVxcbiAgICB9LFxcbiAgICAvKipcXG4gICAgICog6I635Y+W5b2T5YmN5bey6YCJ5aSa57qn5YiG57G777yM6L+U5Zue55qE5pWw5o2u5qC85byP5Li677ya5LiA57qn5YiG57G7QEDkuoznuqfliIbnsbtAQC4uLu+8jOWPr+iHquihjOWBmuaYoOWwhOiOt+WPliB1cmxcXG4gICAgICovXFxuICAgIGdldEN1cnJlbnRJbmRleDogZnVuY3Rpb24oKSB7XFxuICAgICAgICByZXR1cm4gZ2V0VmFyKGdldFZhcihcXFwiQ2xhc3NpY0hlYWRlci5pZFxcXCIsIFxcXCJjbGFzc2ljXFxcIikgKyBcXFwiX2N1cl9pbmRleFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgfVxcbn1cXG4kLmV4cG9ydHMuaGVhZGVyID0gaGVhZGVyXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIue8lueggeexu+mhtemdolwiLFwicGF0aFwiOlwiZW5jb2RlXCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiBzZXRFbmNvZGVQYWdlKGQsIG9iaikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLnvJbnoIFcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWOn+aWh1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcihcXFwiZGVjb2RlLXRleHRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiZGVjb2RlLXRleHRcXFwiLGlucHV0KSdcXG4gICAgICAgIH0sXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgIG9iai5kZWNUZXh0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJvYmouZGVjVGV4dDogXFxcIiArIG9iai5kZWNUZXh0KVxcbiAgICAgICAgICAgIHZhciBlbmNvZGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICB2YXIgdG9vbCA9IHt9O1xcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoudG9vbHMpIHtcXG4gICAgICAgICAgICAgICAgLy8gbG9nKG9iai50eXBlKVxcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IG9iai50eXBlLnNwbGl0KFxcXCJAQFxcXCIpLnBvcCgpXFxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09IGtleSkge1xcbiAgICAgICAgICAgICAgICAgICAgdG9vbCA9IG9iai50b29sc1trZXldO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZW5jb2RlID0gdG9vbC5lbmNvZGUob2JqKTtcXG4gICAgICAgICAgICAvLyBsb2coXFxcImVuY29kZTogXFxcIiArIGVuY29kZSlcXG4gICAgICAgICAgICBwdXRWYXIoJ2VuY29kZS10ZXh0JywgZW5jb2RlKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liqDlr4bmiJDlip8nO1xcbiAgICAgICAgfSwgb2JqKSxcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuino+eggVxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl5a+G5paHXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKFxcXCJlbmNvZGUtdGV4dFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJlbmNvZGUtdGV4dFxcXCIsaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgb2JqLmVuY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5lbmNUZXh0OiBcXFwiICsgb2JqLmVuY1RleHQpXFxuICAgICAgICAgICAgdmFyIGRlY29kZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciB0b29sID0ge307XFxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9iai50b29scykge1xcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IG9iai50eXBlLnNwbGl0KFxcXCJAQFxcXCIpLnBvcCgpXFxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09IGtleSkge1xcbiAgICAgICAgICAgICAgICAgICAgdG9vbCA9IG9iai50b29sc1trZXldO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZGVjb2RlID0gdG9vbC5kZWNvZGUob2JqKTtcXG4gICAgICAgICAgICBwdXRWYXIoJ2RlY29kZS10ZXh0JywgZGVjb2RlKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/op6Plr4bmiJDlip8nO1xcbiAgICAgICAgfSwgb2JqKSxcXG4gICAgfSk7XFxuXFxuICAgIC8vIGh0dHBzOi8vZ2l0ZWUuY29tL0NoZXJpc2hSeC9pbWFnZXdhcmVob3VzZS9yYXcvbWFzdGVyL2ltYWdlLzMyZDI5ZTJmYmNkZjhkODMwNzFkZWVjN2Y2YWE0YjdjLnBuZ1xcbiAgICBsZXQgY3BJbWdVcmwgPSBcXFwiaHR0cHM6Ly9pY29uZm9udC50eXJhbnRnLmNvbS9hcGkvaWxsdXN0cmF0ZS5zdmc/c3ZnX3N0cmluZz0lM0NzdmclMjBjbGFzcyUzRCUyMmljb24lMjIlMjBzdHlsZSUzRCUyMndpZHRoJTNBJTIwMWVtJTNCaGVpZ2h0JTNBJTIwMWVtJTNCdmVydGljYWwtYWxpZ24lM0ElMjBtaWRkbGUlM0JmaWxsJTNBJTIwY3VycmVudENvbG9yJTNCb3ZlcmZsb3clM0ElMjBoaWRkZW4lM0IlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDI0JTIwMTAyNCUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTg2Ni4xMzMzMzMlMjA5MTkuNDY2NjY3aC00MDUuMzMzMzMzYy0yOS44NjY2NjclMjAwLTUzLjMzMzMzMy0yMy40NjY2NjctNTMuMzMzMzMzLTUzLjMzMzMzNHYtNjE4LjY2NjY2NmMwLTI5Ljg2NjY2NyUyMDIzLjQ2NjY2Ny01My4zMzMzMzMlMjA1My4zMzMzMzMtNTMuMzMzMzM0aDQwNS4zMzMzMzNjMjkuODY2NjY3JTIwMCUyMDUzLjMzMzMzMyUyMDIzLjQ2NjY2NyUyMDUzLjMzMzMzNCUyMDUzLjMzMzMzNHY2MTguNjY2NjY2YzAlMjAyOS44NjY2NjctMjMuNDY2NjY3JTIwNTMuMzMzMzMzLTUzLjMzMzMzNCUyMDUzLjMzMzMzNHolMjIlMjBmaWxsJTNEJTIyJTIzNjlDMEZGJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNzcwLjEzMzMzMyUyMDQyOC44aC0yMTMuMzMzMzMzYy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzM3M4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzM0aDIxMy4zMzMzMzNjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzNCUyMDIxLjMzMzMzNHMtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzNCUyMDIxLjMzMzMzM3pNNzcwLjEzMzMzMyUyMDU1Ni44aC0yMTMuMzMzMzMzYy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzM3M4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzM0aDIxMy4zMzMzMzNjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzNCUyMDIxLjMzMzMzNHMtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzNCUyMDIxLjMzMzMzM3pNNzcwLjEzMzMzMyUyMDY4NC44aC0yMTMuMzMzMzMzYy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzM3M4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzM0aDIxMy4zMzMzMzNjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzNCUyMDIxLjMzMzMzNHMtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzNCUyMDIxLjMzMzMzM3olMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNTY3LjQ2NjY2NyUyMDgzNC4xMzMzMzNoLTQwNS4zMzMzMzRjLTI5Ljg2NjY2NyUyMDAtNTMuMzMzMzMzLTIzLjQ2NjY2Ny01My4zMzMzMzMtNTMuMzMzMzMzdi02MTguNjY2NjY3YzAtMjkuODY2NjY3JTIwMjMuNDY2NjY3LTUzLjMzMzMzMyUyMDUzLjMzMzMzMy01My4zMzMzMzNoNDA1LjMzMzMzNGMyOS44NjY2NjclMjAwJTIwNTMuMzMzMzMzJTIwMjMuNDY2NjY3JTIwNTMuMzMzMzMzJTIwNTMuMzMzMzMzdjYxOC42NjY2NjdjMCUyMDI5Ljg2NjY2Ny0yMy40NjY2NjclMjA1My4zMzMzMzMtNTMuMzMzMzMzJTIwNTMuMzMzMzMzeiUyMiUyMGZpbGwlM0QlMjIlMjMxODkwRkYlMjIlMjAlMkYlM0UlM0NwYXRoJTIwZCUzRCUyMk00NzEuNDY2NjY3JTIwMzQzLjQ2NjY2N2gtMjEzLjMzMzMzNGMtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzRzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzM2gyMTMuMzMzMzM0YzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzMlMjAyMS4zMzMzMzNzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzR6TTQ3MS40NjY2NjclMjA0NzEuNDY2NjY3aC0yMTMuMzMzMzM0Yy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzNHM4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzMzaDIxMy4zMzMzMzRjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzMyUyMDIxLjMzMzMzM3MtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzMyUyMDIxLjMzMzMzNHpNNDcxLjQ2NjY2NyUyMDU5OS40NjY2NjdoLTIxMy4zMzMzMzRjLTEyLjglMjAwLTIxLjMzMzMzMy04LjUzMzMzMy0yMS4zMzMzMzMtMjEuMzMzMzM0czguNTMzMzMzLTIxLjMzMzMzMyUyMDIxLjMzMzMzMy0yMS4zMzMzMzNoMjEzLjMzMzMzNGMxMi44JTIwMCUyMDIxLjMzMzMzMyUyMDguNTMzMzMzJTIwMjEuMzMzMzMzJTIwMjEuMzMzMzMzcy0xMC42NjY2NjclMjAyMS4zMzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzM0eiUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlMjAlMkYlM0UlM0MlMkZzdmclM0VcXFwiXFxuICAgIGxldCBjbGVhckltZ1VybCA9IFxcXCJodHRwczovL2ljb25mb250LnR5cmFudGcuY29tL2FwaS9pbGx1c3RyYXRlLnN2Zz9zdmdfc3RyaW5nPSUzQ3N2ZyUyMGNsYXNzJTNEJTIyaWNvbiUyMiUyMHN0eWxlJTNEJTIyd2lkdGglM0ElMjAxZW0lM0JoZWlnaHQlM0ElMjAxZW0lM0J2ZXJ0aWNhbC1hbGlnbiUzQSUyMG1pZGRsZSUzQmZpbGwlM0ElMjBjdXJyZW50Q29sb3IlM0JvdmVyZmxvdyUzQSUyMGhpZGRlbiUzQiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwMjQlMjAxMDI0JTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTc5LjIlMjA1ODguOGg3MTAuNGMyNS42JTIwMCUyMDMyLTE5LjIlMjAyNS42LTM4LjRMODMyJTIwMzY0LjhjLTEyLjgtMTkuMi0zOC40LTM4LjQtNjQtMzguNEg2MjAuOFY2NGMwLTI1LjYtMTkuMi00NC44LTQ0LjgtNDQuOEg0OTIuOGMtMTkuMiUyMDAtMzguNCUyMDE5LjItMzguNCUyMDQ0Ljh2MjYyLjRIMzAwLjhjLTI1LjYlMjAwLTUxLjIlMjAxOS4yLTU3LjYlMjAzOC40TDE1My42JTIwNTUwLjRjLTYuNCUyMDE5LjIlMjAwJTIwMzguNCUyMDI1LjYlMjAzOC40bTY5MS4yJTIwNjRIMjE3LjZjNi40JTIwNjQlMjAwJTIwMTQ3LjItNTEuMiUyMDE5OC40LTc2LjglMjA2NC01MS4yJTIwMTQwLjglMjA2LjQlMjAxNjYuNGgxMDguOGMxMi44LTEyLjglMjA3MC40LTEwMi40JTIwODkuNi0xOTIlMjAwLTE5LjIlMjA2LjQtMzIlMjA2LjQtMzIlMjAwJTIwMTIuOCUyMDAlMjAxOS4yLTYuNCUyMDMyLTYuNCUyMDU3LjYtMjUuNiUyMDE3Mi44LTM4LjQlMjAxOTJoODMuMmMxMi44LTEyLjglMjA3MC40LTEwMi40JTIwODkuNi0xOTIlMjAwLTE5LjIlMjA2LjQtMzIlMjA2LjQtMzIlMjAwJTIwMTIuOCUyMDAlMjAxOS4yLTYuNCUyMDMyLTYuNCUyMDU3LjYtMjUuNiUyMDE3Mi44LTM4LjQlMjAxOTJoMTAyLjRjMTIuOC0xMi44JTIwNzAuNC0xMDIuNCUyMDg5LjYtMTkyJTIwMC0xOS4yJTIwNi40LTMyJTIwNi40LTMyJTIwMCUyMDEyLjglMjAwJTIwMTkuMi02LjQlMjAzMi02LjQlMjA1Ny42LTI1LjYlMjAxNzIuOC0zOC40JTIwMTkySDcwNGMxMi44LTEyLjglMjA3MC40LTEwMi40JTIwODkuNi0xOTIlMjAwLTE5LjIlMjA2LjQtMzIlMjA2LjQtMzIlMjAwJTIwMTIuOCUyMDAlMjAxOS4yLTYuNCUyMDMyLTYuNCUyMDU3LjYtMjUuNiUyMDE3Mi44LTM4LjQlMjAxOTJoMTAyLjRzNzAuNC0yNS42JTIwNTcuNi0xMDIuNGMtMTkuMi0xMTUuMi0yNS42LTE3OS4yLTQ0LjgtMjYyLjQlMjIlMjBmaWxsJTNEJTIyJTIzNzM2N0QxJTIyJTIwJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIlxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfmuIXnqbrljp/mlocnLFxcbiAgICAgICAgaW1nOiBjbGVhckltZ1VybCxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIgKyBcXFwiQGxhenlSdWxlPS5qczpwdXRWYXIoJ2RlY29kZS10ZXh0JywgJycpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5riF56m65oiQ5YqfJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMidcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+a4heepuuWvhuaWhycsXFxuICAgICAgICBpbWc6IGNsZWFySW1nVXJsLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIiArIFxcXCJAbGF6eVJ1bGU9LmpzOnB1dFZhcignZW5jb2RlLXRleHQnLCAnJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/muIXnqbrmiJDlip8nXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl8yJ1xcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5aSN5Yi25Y6f5paHJyxcXG4gICAgICAgIGltZzogY3BJbWdVcmwsXFxuICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZGVjID0gZ2V0VmFyKFxcXCJkZWNvZGUtdGV4dFxcXCIpO1xcbiAgICAgICAgICAgIGlmIChkZWMpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGRlYztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YaF5a655Li656m677yBXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICdpY29uXzInXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflpI3liLblr4bmlocnLFxcbiAgICAgICAgaW1nOiBjcEltZ1VybCxcXG4gICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBlbmMgPSBnZXRWYXIoXFxcImVuY29kZS10ZXh0XFxcIik7XFxuICAgICAgICAgICAgaWYgKGVuYykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgZW5jO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lhoXlrrnkuLrnqbrvvIFcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMidcXG4gICAgfSk7XFxufVxcbiQuZXhwb3J0cy5zZXRFbmNvZGVQYWdlID0gc2V0RW5jb2RlUGFnZVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCLliqDlr4bnsbvpobXpnaJcIixcInBhdGhcIjpcImNyeXB0b1wiLFwicnVsZVwiOlwianM6XFxuLy8gY29uc3QgeyBDb25maWdNYXBwaW5nIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXNcXFwiKTtcXG4vLyBsb2coSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoQ3J5cHRvLkNvbmZpZ01hcHBpbmcpKSlcXG5jb25zdCB7IGJ1aWxkQUVTVWkgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2Flc3VpXFxcIik7XFxuY29uc3QgeyBidWlsZFJTQVVpIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9yc2F1aVxcXCIpO1xcbmZ1bmN0aW9uIHNldENyeXB0b1BhZ2UoZCwgb2JqKSB7XFxuICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwi5a+556ew5Yqg5a+GXFxcIikgJiYgIW9iai50eXBlLmluY2x1ZGVzKFxcXCLpnZ7lr7nnp7DliqDlr4ZcXFwiKSkge1xcbiAgICAgICAgYnVpbGRBRVNVaShkLCBvYmopXFxuICAgIH0gZWxzZSBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIumdnuWvueensOWKoOWvhlxcXCIpKSB7XFxuICAgICAgICBidWlsZFJTQVVpKGQsIG9iailcXG4gICAgfVxcbn1cXG4kLmV4cG9ydHMuc2V0Q3J5cHRvUGFnZSA9IHNldENyeXB0b1BhZ2VcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQUVTXCIsXCJwYXRoXCI6XCJhZXNcIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxubGV0IENyeXB0byA9IHtcXG4gICAgQ29uZmlnTWFwcGluZzoge1xcbiAgICAgICAgZW5jVHlwZToge1xcbiAgICAgICAgICAgIFxcXCJBRVNcXFwiOiBDcnlwdG9KUy5BRVMuZW5jcnlwdCxcXG4gICAgICAgICAgICBcXFwiREVTXFxcIjogQ3J5cHRvSlMuREVTLmVuY3J5cHQsXFxuICAgICAgICAgICAgXFxcIjNERVNcXFwiOiBDcnlwdG9KUy5UcmlwbGVERVMuZW5jcnlwdCxcXG4gICAgICAgIH0sXFxuICAgICAgICBkZWNUeXBlOiB7XFxuICAgICAgICAgICAgXFxcIkFFU1xcXCI6IENyeXB0b0pTLkFFUy5kZWNyeXB0LFxcbiAgICAgICAgICAgIFxcXCJERVNcXFwiOiBDcnlwdG9KUy5ERVMuZGVjcnlwdCxcXG4gICAgICAgICAgICBcXFwiM0RFU1xcXCI6IENyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0LFxcbiAgICAgICAgfSxcXG4gICAgICAgIG1vZGU6IHtcXG4gICAgICAgICAgICBcXFwiQ0JDXFxcIjogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgXFxcIkVDQlxcXCI6IENyeXB0b0pTLm1vZGUuRUNCLFxcbiAgICAgICAgICAgIFxcXCJDRkJcXFwiOiBDcnlwdG9KUy5tb2RlLkNGQixcXG4gICAgICAgICAgICBcXFwiQ1RSXFxcIjogQ3J5cHRvSlMubW9kZS5DVFIsXFxuICAgICAgICAgICAgXFxcIk9GQlxcXCI6IENyeXB0b0pTLm1vZGUuT0ZCXFxuICAgICAgICB9LFxcbiAgICAgICAgcGFkOiB7XFxuICAgICAgICAgICAgXFxcIlBrY3M3XFxcIjogQ3J5cHRvSlMucGFkLlBrY3M3LFxcbiAgICAgICAgICAgIFxcXCJaZXJvUGFkZGluZ1xcXCI6IENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyxcXG4gICAgICAgICAgICBcXFwiTm9QYWRkaW5nXFxcIjogQ3J5cHRvSlMucGFkLk5vUGFkZGluZyxcXG4gICAgICAgICAgICBcXFwiSXNvOTc5NzFcXFwiOiBDcnlwdG9KUy5wYWQuSXNvOTc5NzEsXFxuICAgICAgICAgICAgXFxcIkFuc2lYOTIzXFxcIjogQ3J5cHRvSlMucGFkLkFuc2lYOTIzLFxcbiAgICAgICAgICAgIC8vIFxcXCJJc28xMDEyNlxcXCI6IENyeXB0b0pTLnBhZC5Jc28xMDEyNixcXG4gICAgICAgIH0sXFxuICAgICAgICBlbmNvZGU6IHtcXG4gICAgICAgICAgICBcXFwiQmFzZTY0XFxcIjogXFxcIkJhc2U2NFxcXCIsXFxuICAgICAgICAgICAgXFxcIkhFWFxcXCI6IFxcXCJIRVhcXFwiXFxuICAgICAgICB9LFxcbiAgICAgICAgYmxvY2tTaXplOiB7XFxuICAgICAgICAgICAgXFxcIkFFU1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgXFxcIkFFUy0xMjhcXFwiOiAxMjgsXFxuICAgICAgICAgICAgICAgIFxcXCJBRVMtMTkyXFxcIjogMTkyLFxcbiAgICAgICAgICAgICAgICBcXFwiQUVTLTI1NlxcXCI6IDI1NixcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAga2V5RW5jb2RlVHlwZToge1xcbiAgICAgICAgICAgIFxcXCJVVEYtOFxcXCI6IFxcXCJVVEYtOFxcXCIsXFxuICAgICAgICAgICAgXFxcIkhleFxcXCI6IFxcXCJIZXhcXFwiLFxcbiAgICAgICAgICAgIFxcXCJMYXRpbjFcXFwiOiBcXFwiTGF0aW4xXFxcIlxcbiAgICAgICAgfSxcXG4gICAgICAgIGl2RW5jb2RlVHlwZToge1xcbiAgICAgICAgICAgIFxcXCJVVEYtOFxcXCI6IFxcXCJVVEYtOFxcXCIsXFxuICAgICAgICAgICAgXFxcIkhleFxcXCI6IFxcXCJIZXhcXFwiLFxcbiAgICAgICAgICAgIFxcXCJMYXRpbjFcXFwiOiBcXFwiTGF0aW4xXFxcIlxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBjb25maWc6IHtcXG4gICAgICAgIHR5cGU6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJjcnlwdG9fdHlwZVxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIkFFU1xcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgbW9kZToge1xcbiAgICAgICAgICAgIGtleTogXFxcImNyeXB0b19zZWxlY3RfbW9kZVxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIkNCQ1xcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgcGFkOiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiY3J5cHRvX3NlbGVjdF9wYWRcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJQa2NzN1xcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgaXY6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJjcnlwdG9faW5wdXRfaXZcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIGVuY29kZToge1xcbiAgICAgICAgICAgIGtleTogXFxcImNyeXB0b19vdXRwdXRfZW5jb2RlXFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBDcnlwdG8uQ29uZmlnTWFwcGluZy5lbmNvZGVbXFxcIkJhc2U2NFxcXCJdKVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAga2V5OiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiY3J5cHRvX2tleVxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgdGV4dDoge1xcbiAgICAgICAgICAgIGtleTogXFxcImNyeXB0b190ZXh0XFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBjaXBoZXJUZXh0OiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiY3J5cHRvX2NpcGhlcl90ZXh0XFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBibG9ja1NpemU6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJjcnlwdG9fYmxvY2tfc2l6ZVxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIkFFUy0xMjhcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgfSxcXG4gICAgICAgIGtleUVuY29kZVR5cGU6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJjcnlwdG9fa2V5X2VuY29kZV90eXBlXFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICAvLyBUT0RPIOatpOWkhOS4jeefpeS4uuS9lSBDcnlwdG8uQ29uZmlnTWFwcGluZy5rZXlFbmNvZGVUeXBlW1xcXCJVVEYtOFxcXCJdIOS8muaKpSBDcnlwdG8gdW5kZWZpbmVkXFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJVVEYtOFxcXCIpXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBpdkVuY29kZVR5cGU6IHtcXG4gICAgICAgICAgICBrZXk6IFxcXCJjcnlwdG9faXZfZW5jb2RlX3R5cGVcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJVVEYtOFxcXCIpXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgIH0sXFxuICAgIG9uQ2xvc2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgbGV0IGNvbmZpZ0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZyk7XFxuICAgICAgICBmb3IgKGxldCBjb25mS2V5IG9mIGNvbmZpZ0tleXMpIHtcXG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5jb25maWdbY29uZktleV0ua2V5O1xcbiAgICAgICAgICAgIGNsZWFyVmFyKGtleSk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGJ1aWxkQ29uZmlnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGxldCBtb2RlID0gdGhpcy5jb25maWcubW9kZS5nZXQoKTtcXG4gICAgICAgIGxldCBwYWQgPSB0aGlzLmNvbmZpZy5wYWQuZ2V0KCk7XFxuICAgICAgICBsZXQgaXYgPSB0aGlzLmNvbmZpZy5pdi5nZXQoKTtcXG4gICAgICAgIGxldCBjb25mID0ge307XFxuICAgICAgICBjb25mLm1vZGUgPSB0aGlzLkNvbmZpZ01hcHBpbmcubW9kZVttb2RlXTtcXG4gICAgICAgIGNvbmYucGFkZGluZyA9IHRoaXMuQ29uZmlnTWFwcGluZy5wYWRbcGFkXVxcbiAgICAgICAgaWYgKG1vZGUgIT0gXFxcIkVDQlxcXCIgJiYgaXYubGVuZ3RoICE9IDApIHtcXG4gICAgICAgICAgICBjb25mLml2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5pdkVuY29kZVR5cGUuZ2V0KCkgPT0gXFxcIkhleFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgaXYgPSBpdi5yZXBsYWNlKFxcXCJbSEVYXTpcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgY29uZi5pdiA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoaXYpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcuaXZFbmNvZGVUeXBlLmdldCgpID09IFxcXCJMYXRpbjFcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGNvbmYuaXYgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGl2KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gY29uZlxcbiAgICB9LFxcbiAgICBlbmNyeXB0b3I6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgLy8g5Y6f5paHXFxuICAgICAgICBsZXQgdGV4dCA9IG9iai5kZWNUZXh0O1xcbiAgICAgICAgaWYgKHRleHQpIHtcXG4gICAgICAgICAgICBsZXQga2V5U3RyaW5nID0gdGhpcy5jb25maWcua2V5LmdldCgpXFxuICAgICAgICAgICAgbGV0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleVN0cmluZyk7XFxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCkgPT0gXFxcIkhleFxcXCIpIHtcXG4gICAgICAgICAgICAgICAga2V5U3RyaW5nID0ga2V5U3RyaW5nLnJlcGxhY2UoXFxcIltIRVhdOlxcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICBrZXkgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGtleVN0cmluZyk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5rZXlFbmNvZGVUeXBlLmdldCgpID09IFxcXCJMYXRpbjFcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGtleSA9IENyeXB0b0pTLmVuYy5MYXRpbjEucGFyc2Uoa2V5U3RyaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgbGV0IGNvbmYgPSB0aGlzLmJ1aWxkQ29uZmlnKClcXG4gICAgICAgICAgICAgICAgbGV0IGVuY3J5cHRlZCA9IHRoaXMuQ29uZmlnTWFwcGluZy5lbmNUeXBlW3RoaXMuY29uZmlnLnR5cGUuZ2V0KCldKHRleHQsIGtleSwgY29uZik7XFxuICAgICAgICAgICAgICAgIGxldCBlbmNvZGUgPSB0aGlzLmNvbmZpZy5lbmNvZGUuZ2V0KClcXG4gICAgICAgICAgICAgICAgbGV0IGNpcGhlclRleHQgPSBlbmNyeXB0ZWQudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgaWYgKGVuY29kZSA9PT0gJ0hFWCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNpcGhlclRleHQgPSBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKGNpcGhlclRleHQpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyDlr4bmlodcXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuY2lwaGVyVGV4dC5zZXQoY2lwaGVyVGV4dClcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlclRleHQ7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihlLm1lc3NhZ2UpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuaYjuaWh+S4jeiDveS4uuepuu+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGRlY3J5cHRvcjogZnVuY3Rpb24ob2JqKSB7XFxuICAgICAgICBsZXQgdGV4dCA9IG9iai5lbmNUZXh0O1xcbiAgICAgICAgaWYgKHRleHQpIHtcXG4gICAgICAgICAgICBsZXQgZW5jb2RlID0gdGhpcy5jb25maWcuZW5jb2RlLmdldCgpXFxuICAgICAgICAgICAgbGV0IGNpcGhlclRleHQ7XFxuICAgICAgICAgICAgaWYgKGVuY29kZSA9PT0gJ0Jhc2U2NCcpIHtcXG4gICAgICAgICAgICAgICAgY2lwaGVyVGV4dCA9IHRleHRcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuY29kZSA9PT0gJ0hFWCcpIHtcXG4gICAgICAgICAgICAgICAgY2lwaGVyVGV4dCA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KENyeXB0b0pTLmVuYy5IZXgucGFyc2UodGV4dCkpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBrZXlTdHJpbmcgPSB0aGlzLmNvbmZpZy5rZXkuZ2V0KClcXG4gICAgICAgICAgICBsZXQga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5U3RyaW5nKTtcXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcua2V5RW5jb2RlVHlwZS5nZXQoKSA9PSBcXFwiSGV4XFxcIikge1xcbiAgICAgICAgICAgICAgICBrZXlTdHJpbmcgPSBrZXlTdHJpbmcucmVwbGFjZShcXFwiW0hFWF06XFxcIiwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgICAgIGtleSA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2Uoa2V5U3RyaW5nKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCkgPT0gXFxcIkxhdGluMVxcXCIpIHtcXG4gICAgICAgICAgICAgICAga2V5ID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5wYXJzZShrZXlTdHJpbmcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBsZXQgY29uZiA9IHRoaXMuYnVpbGRDb25maWcoKVxcbiAgICAgICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gdGhpcy5Db25maWdNYXBwaW5nLmRlY1R5cGVbdGhpcy5jb25maWcudHlwZS5nZXQoKV0oY2lwaGVyVGV4dCwga2V5LCBjb25mKTtcXG4gICAgICAgICAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHRlZC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICAgICAgICAgIGlmICghZGVjcnlwdGVkU3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+ajgOafpeWvhumSpSBrZXnjgIHlgY/np7vph48gaXYg5Lul5Y+K5a+G5paH5piv5ZCm5q2j56Gu77yBXFxcIik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudGV4dC5zZXQoZGVjcnlwdGVkU3RyKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuino+WvhuWksei0pe+8gVxcXCIgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlr4bmlofkuI3og73kuLrnqbrvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBjaGVja0tleTogZnVuY3Rpb24ob2JqKSB7XFxuICAgICAgICBsZXQga2V5ID0gQ3J5cHRvLmNvbmZpZy5rZXkuZ2V0KCk7XFxuICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5a+G6ZKlIGtleSDkuI3og73kuLrnqbrvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHR5cGUgPSBDcnlwdG8uY29uZmlnLnR5cGUuZ2V0KCk7XFxuICAgICAgICBsZXQgYmxvY2tTaXplID0gMTI4O1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBibG9ja1NpemUgPSBDcnlwdG8uQ29uZmlnTWFwcGluZ1tcXFwiYmxvY2tTaXplXFxcIl1bdHlwZV1bQ3J5cHRvLmNvbmZpZy5ibG9ja1NpemUuZ2V0KCldXFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJjaGVja0tleSNibG9ja1NpemU6XFxcIiArIGJsb2NrU2l6ZSlcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICBpZiAodHlwZSA9PT0gXFxcIkRFU1xcXCIpIHtcXG4gICAgICAgICAgICBibG9ja1NpemUgPSA2NDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChDcnlwdG8uY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCkgPT0gXFxcIkhleFxcXCIpIHtcXG4gICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZShcXFwiW0hFWF06XFxcIiwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgYmxvY2tTaXplID0gYmxvY2tTaXplICogMjtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vIOiuvue9ruaVsOaNruWdl+mVv+W6plxcbiAgICAgICAgbGV0IGtleVNpemUgPSBrZXkubGVuZ3RoICogODtcXG4gICAgICAgIC8vIGxvZyhcXFwiY2hlY2tLZXkja2V5U2l6ZTpcXFwiICsga2V5U2l6ZSlcXG4gICAgICAgIC8vIGxvZyhcXFwiY2hlY2tLZXkja2V5U2l6ZS84OlxcXCIgKyBrZXlTaXplLzgpXFxuICAgICAgICAvLyBsb2coXFxcImNoZWNrS2V5I2Jsb2NrU2l6ZTpcXFwiICsgYmxvY2tTaXplKVxcbiAgICAgICAgLy8gbG9nKFxcXCJjaGVja0tleSNibG9ja1NpemUvODpcXFwiICsgYmxvY2tTaXplIC8gOClcXG4gICAgICAgIGlmIChrZXlTaXplIDwgYmxvY2tTaXplKSB7XFxuICAgICAgICAgICAgb2JqLmZyb20gPSBDcnlwdG8uY29uZmlnLmtleUVuY29kZVR5cGUua2V5XFxuICAgICAgICAgICAgbGV0IG5ld0tleSA9IENyeXB0by5maWxsS2V5cyhvYmosIGtleSwgYmxvY2tTaXplIC8gOCk7XFxuICAgICAgICAgICAgQ3J5cHRvLmNvbmZpZy5rZXkuc2V0KG5ld0tleSlcXG4gICAgICAgICAgICAvLyBsb2coXFxcImNoZWNrS2V5I25ld0tleTogXFxcIiArIG5ld0tleSlcXG4gICAgICAgICAgICAvLyBsb2coXFxcImNoZWNrS2V5I25ld0tleS5TaXplOiBcXFwiICsgbmV3S2V5Lmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflr4bpkqUga2V5IOmVv+W6pui/h+efre+8jOW3suiHquWKqCBgXFxcXFxcXFx4MDBgIOepuuWhq+WFhe+8jOivt+WGjeasoeaJp+ihjOWKoC/op6Plr4YnKVxcbiAgICAgICAgfSBlbHNlIGlmIChrZXlTaXplID4gYmxvY2tTaXplKSB7XFxuICAgICAgICAgICAgLy8gVE9ETyDotoXlh7rpg6jliIblsIbooqvlv73nlaVcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuWvhumSpSBrZXkg6ZW/5bqmIFxcXCIgKyBrZXkubGVuZ3RoICsgXFxcIiDov4fplb/vvIzplb/luqblupTkuLogXFxcIiArIGJsb2NrU2l6ZSAvIDggKyBcXFwi77yM6K+36Ieq6KGM5qOA5p+l77yM54S25ZCO6YeN5paw5omn6KGM5YqgL+ino+WvhlxcXCIpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgY2hlY2tJdjogZnVuY3Rpb24ob2JqKSB7XFxuICAgICAgICBsZXQgaXYgPSBDcnlwdG8uY29uZmlnLml2LmdldCgpO1xcbiAgICAgICAgbGV0IG1vZGUgPSBDcnlwdG8uY29uZmlnLm1vZGUuZ2V0KCk7XFxuICAgICAgICBpZiAobW9kZSA9PT0gJ0VDQicpIHtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXYubGVuZ3RoID09PSAwKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlgY/np7vph48gaXYg5LiN6IO95Li656m677yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0eXBlID0gQ3J5cHRvLmNvbmZpZy50eXBlLmdldCgpO1xcbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IDEyODtcXG4gICAgICAgIGlmICh0eXBlID09PSAnREVTJyB8fCB0eXBlID09PSAnM0RFUycpIHtcXG4gICAgICAgICAgICBibG9ja1NpemUgPSA2NDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChDcnlwdG8uY29uZmlnLml2RW5jb2RlVHlwZS5nZXQoKSA9PSBcXFwiSGV4XFxcIikge1xcbiAgICAgICAgICAgIGl2ID0gaXYucmVwbGFjZShcXFwiW0hFWF06XFxcIiwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgYmxvY2tTaXplID0gYmxvY2tTaXplICogMjtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vIOiuvue9ruaVsOaNruWdl+mVv+W6plxcbiAgICAgICAgbGV0IGl2U2l6ZSA9IGl2Lmxlbmd0aCAqIDg7XFxuICAgICAgICBpZiAoaXZTaXplIDwgYmxvY2tTaXplKSB7XFxuICAgICAgICAgICAgb2JqLmZyb20gPSBDcnlwdG8uY29uZmlnLml2RW5jb2RlVHlwZS5rZXlcXG4gICAgICAgICAgICBsZXQgbmV3SXYgPSBDcnlwdG8uZmlsbEtleXMob2JqLCBpdiwgYmxvY2tTaXplIC8gOCk7XFxuICAgICAgICAgICAgQ3J5cHRvLmNvbmZpZy5pdi5zZXQobmV3SXYpXFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlgY/np7vph48gaXYg6ZW/5bqm6L+H55+t77yM5bey6Ieq5YqoIGBcXFxcXFxcXHgwMGAg56m65aGr5YWF77yM6K+35YaN5qyh5omn6KGM5YqgL+ino+WvhlxcXCIpXFxuICAgICAgICB9IGVsc2UgaWYgKGl2U2l6ZSA+IGJsb2NrU2l6ZSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5YGP56e76YePIGl2IOmVv+W6piBcXFwiICsgaXYubGVuZ3RoICsgXFxcIiDov4fplb/vvIzplb/luqblupTkuLogXFxcIiArIGJsb2NrU2l6ZSAvIDggKyBcXFwi77yM6K+36Ieq6KGM5qOA5p+l77yM54S25ZCO6YeN5paw5omn6KGM5YqgL+ino+WvhlxcXCIpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOWvhumSpSBgXFxcXHgwMGAg56m65aGr5YWFXFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkg5a+G6ZKlXFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBrZXlTaXplIOWhq+WFhemVv+W6piwg5YC8OiAxMjgsIDE5MiwgMjU2XFxuICAgICAqL1xcbiAgICBmaWxsS2V5czogZnVuY3Rpb24ob2JqLCBrZXksIGtleVNpemUpIHtcXG4gICAgICAgIGxldCBUb29sID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpO1xcbiAgICAgICAgbGV0IGVuY29kZVR5cGUgPSBcXFwiVVRGLThcXFwiXFxuICAgICAgICBpZiAob2JqLmZyb20gPT0gQ3J5cHRvLmNvbmZpZy5rZXlFbmNvZGVUeXBlLmtleSkge1xcbiAgICAgICAgICAgIGVuY29kZVR5cGUgPSBDcnlwdG8uY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCk7XFxuICAgICAgICB9IGVsc2UgaWYgKG9iai5mcm9tID09IENyeXB0by5jb25maWcuaXZFbmNvZGVUeXBlLmtleSkge1xcbiAgICAgICAgICAgIGVuY29kZVR5cGUgPSBDcnlwdG8uY29uZmlnLml2RW5jb2RlVHlwZS5nZXQoKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlbmNvZGVUeXBlID09IFxcXCJIZXhcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJbSEVYXTpcXFwiICsgVG9vbC5maWxsWmVyb1BhZGRpbmcoa2V5LCBrZXlTaXplKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBUb29sLmZpbGxOdWxsUGFkZGluZyhrZXksIGtleVNpemUpO1xcbiAgICB9LFxcbiAgICBBRVM6IHtcXG4gICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIENyeXB0by5jb25maWcudHlwZS5zZXQoXFxcIkFFU1xcXCIpXFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJBRVMtRW5jcnlwdC1vYmo6XFxcIiArIEpTT04uc3RyaW5naWZ5KG9iaikpXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0by5lbmNyeXB0b3Iob2JqKTtcXG4gICAgICAgIH0sXFxuICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgICAgICBDcnlwdG8uY29uZmlnLnR5cGUuc2V0KFxcXCJBRVNcXFwiKVxcbiAgICAgICAgICAgIHJldHVybiBDcnlwdG8uZGVjcnlwdG9yKG9iaik7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIERFUzoge1xcbiAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24ob2JqKSB7XFxuICAgICAgICAgICAgQ3J5cHRvLmNvbmZpZy50eXBlLnNldChcXFwiREVTXFxcIilcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvLmVuY3J5cHRvcihvYmopO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIENyeXB0by5jb25maWcudHlwZS5zZXQoXFxcIkRFU1xcXCIpXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0by5kZWNyeXB0b3Iob2JqKTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgXFxcIjNERVNcXFwiOiB7XFxuICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgICAgICBDcnlwdG8uY29uZmlnLnR5cGUuc2V0KFxcXCIzREVTXFxcIilcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvLmVuY3J5cHRvcihvYmopO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIENyeXB0by5jb25maWcudHlwZS5zZXQoXFxcIjNERVNcXFwiKVxcbiAgICAgICAgICAgIHJldHVybiBDcnlwdG8uZGVjcnlwdG9yKG9iaik7XFxuICAgICAgICB9XFxuXFxuICAgIH0sXFxufVxcblxcbiQuZXhwb3J0cyA9IENyeXB0bztcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi57yW56CB57G7566X5rOV5qih5p2/XCIsXCJwYXRoXCI6XCJ0ZW1wbGF0ZV9lbmNvZGVcIixcInJ1bGVcIjpcImpzOlxcbmxldCB0ZW1wbGF0ZSA9IHt9O1xcbi8vIOe8lueggVxcbnRlbXBsYXRlLmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsb2coXFxcIuaIkeaYr+WOn+aWh1xcXCIrIG9iai5kZWNUZXh0KVxcbiAgICBsZXQgZW5jb2RlID0gXFxcIuWOn+aWh+mAmui/h+WKoOWvhuW+l+WIsOeahOWvhuaWh+Wtl+espuS4slxcXCI7XFxuICAgIHJldHVybiBlbmNvZGU7XFxufVxcbi8vIOino+eggVxcbnRlbXBsYXRlLmRlY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsb2coXFxcIuaIkeaYr+WvhuaWh1xcXCIrIG9iai5lbmNUZXh0KVxcbiAgICBsZXQgZGVjb2RlID0gXFxcIuWvhuaWh+mAmui/h+ino+WvhuW+l+WIsOeahOWOn+aWh+Wtl+espuS4slxcXCI7XFxuICAgIHJldHVybiBkZWNvZGU7XFxufVxcbi8vIOWvvOWHuue7meWklumDqOmAmui/hyByZXF1aXJlIOaWueazleS9v+eUqFxcbiQuZXhwb3J0cy50ZW1wbGF0ZSA9IHRlbXBsYXRlXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkFFUy1VSVwiLFwicGF0aFwiOlwiYWVzdWlcIixcInJ1bGVcIjpcImpzOlxcbmZ1bmN0aW9uIGJ1aWxkQUVTVWkoZCwgb2JqKSB7XFxuICAgIGxldCBjb25maWcgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgb2JqLnJ1bGVUaXRsZSkuY29uZmlnO1xcbiAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIkFFU1xcXCIpKSB7XFxuICAgICAgICBjb25maWcudHlwZS5zZXQoXFxcIkFFU1xcXCIpXFxuICAgIH1cXG4gICAgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCJERVNcXFwiKSAmJiAhb2JqLnR5cGUuaW5jbHVkZXMoXFxcIjNERVNcXFwiKSkge1xcbiAgICAgICAgY29uZmlnLnR5cGUuc2V0KFxcXCJERVNcXFwiKVxcbiAgICB9XFxuICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwiM0RFU1xcXCIpKSB7XFxuICAgICAgICBjb25maWcudHlwZS5zZXQoXFxcIjNERVNcXFwiKVxcbiAgICAgICAgLy8gaHR0cHM6Ly90b29sLmxtZWVlLmNvbS9qaWFtaS9kZXMzIOivtOaYju+8mjNERVPmlbDmja7lnZfplb/luqbkuLo2NOS9je+8jOaJgOS7pUlW6ZW/5bqm6ZyA6KaB5Li6OOS4quWtl+espu+8iEVDQuaooeW8j+S4jeeUqElW77yJ77yM5a+G6ZKl6ZW/5bqm5Li6MTbmiJYyNOS4quWtl+espu+8iDjkuKrlrZfnrKbku6XlhoXliJnnu5PmnpzkuI5ERVPnm7jlkIzvvInvvIxJVuS4juWvhumSpei2hei/h+mVv+W6puWImeaIquWPlu+8jOS4jei2s+WImeWcqOacq+WwvuWhq+WFhSdcXFxcMCfooaXotrNcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLliqDlr4ZcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeaYjuaWh1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcihcXFwiY3J5cHRvX3RleHRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiY3J5cHRvX3RleHRcXFwiLGlucHV0KSdcXG4gICAgICAgIH0sXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgIG9iai5kZWNUZXh0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgLy8gbG9nKFxcXCJvYmouZGVjVGV4dDogXFxcIiArIG9iai5kZWNUZXh0KVxcbiAgICAgICAgICAgIGxldCB0b2FzdFRleHQgPSBcXFwi5Yqg5a+G5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB2YXIgY2lwaGVyVGV4dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCBDcnlwdG8gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgb2JqLnJ1bGVUaXRsZSk7XFxuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IENyeXB0by5jb25maWc7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgQ3J5cHRvLmNoZWNrS2V5KG9iaik7XFxuICAgICAgICAgICAgICAgIENyeXB0by5jaGVja0l2KG9iaik7XFxuICAgICAgICAgICAgICAgIG9iai50b29sc1tcXFwiQUVTXFxcIl0gPSBDcnlwdG8uQUVTO1xcbiAgICAgICAgICAgICAgICBvYmoudG9vbHNbXFxcIkRFU1xcXCJdID0gQ3J5cHRvLkRFUztcXG4gICAgICAgICAgICAgICAgb2JqLnRvb2xzW1xcXCIzREVTXFxcIl0gPSBDcnlwdG9bXFxcIjNERVNcXFwiXTtcXG4gICAgICAgICAgICAgICAgdmFyIHRvb2wgPSB7fTtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9iai50b29scykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCIzREVTXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sID0gb2JqLnRvb2xzW1xcXCIzREVTXFxcIl07XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoa2V5KSAmJiAhb2JqLnR5cGUuaW5jbHVkZXMoXFxcIjNERVNcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2wgPSBvYmoudG9vbHNba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBjaXBoZXJUZXh0ID0gdG9vbC5lbmNyeXB0KG9iaik7XFxuICAgICAgICAgICAgICAgIC8vIGxvZyhcXFwiY2lwaGVyVGV4dDogXFxcIiArIGNpcGhlclRleHQpXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBjaXBoZXJUZXh0ID0gZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICB0b2FzdFRleHQgPSBcXFwi5Yqg5a+G5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY29uZmlnLmNpcGhlclRleHQuc2V0KGNpcGhlclRleHQpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyArIHRvYXN0VGV4dDtcXG4gICAgICAgIH0sIG9iaiksXFxuICAgIH0pO1xcbiAgICBidWlsZENvbmZpZ3NVSShkLCBvYmopO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLop6Plr4ZcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWvhuaWh1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcihcXFwiY3J5cHRvX2NpcGhlcl90ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcImNyeXB0b19jaXBoZXJfdGV4dFxcXCIsaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgb2JqLmVuY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5lbmNUZXh0OiBcXFwiICsgb2JqLmVuY1RleHQpXFxuICAgICAgICAgICAgbGV0IHRvYXN0VGV4dCA9IFxcXCLop6Plr4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIGxldCBDcnlwdG8gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgb2JqLnJ1bGVUaXRsZSk7XFxuICAgICAgICAgICAgdmFyIHRleHQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgY29uZmlnID0gQ3J5cHRvLmNvbmZpZztcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBDcnlwdG8uY2hlY2tLZXkob2JqKTtcXG4gICAgICAgICAgICAgICAgQ3J5cHRvLmNoZWNrSXYob2JqKTtcXG4gICAgICAgICAgICAgICAgb2JqLnRvb2xzW1xcXCJBRVNcXFwiXSA9IENyeXB0by5BRVM7XFxuICAgICAgICAgICAgICAgIG9iai50b29sc1tcXFwiREVTXFxcIl0gPSBDcnlwdG8uREVTXFxuICAgICAgICAgICAgICAgIHZhciB0b29sID0ge307XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoudG9vbHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhrZXkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbCA9IG9iai50b29sc1trZXldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIGxvZyhvYmouZW5jVGV4dClcXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRvb2wuZGVjcnlwdChvYmopO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgdGV4dCA9IGUubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgdG9hc3RUZXh0ID0gXFxcIuino+WvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvbmZpZy50ZXh0LnNldCh0ZXh0KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycgKyB0b2FzdFRleHQ7XFxuICAgICAgICB9LCBvYmopLFxcbiAgICB9KTtcXG59XFxuXFxuZnVuY3Rpb24gYnVpbGRDb25maWdzVUkoZCwgb2JqKSB7XFxuICAgIGxldCBDcnlwdG8gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgb2JqLnJ1bGVUaXRsZSk7XFxuICAgIGxldCBDb25maWdNYXBwaW5nID0gQ3J5cHRvLkNvbmZpZ01hcHBpbmc7XFxuICAgIGxldCBjb25maWcgPSBDcnlwdG8uY29uZmlnO1xcbiAgICBsZXQgbWFwcGluZ0tleXMgPSBPYmplY3Qua2V5cyhDb25maWdNYXBwaW5nKTtcXG4gICAgbGV0IG1vZGVzID0gT2JqZWN0LmtleXMoQ29uZmlnTWFwcGluZ1tcXFwibW9kZVxcXCJdKTtcXG4gICAgLy8gbG9nKEpTT04uc3RyaW5naWZ5KG1vZGVzKSlcXG4gICAgbGV0IHBhZGRpbmdzID0gT2JqZWN0LmtleXMoQ29uZmlnTWFwcGluZ1tcXFwicGFkXFxcIl0pO1xcbiAgICAvLyBsb2coSlNPTi5zdHJpbmdpZnkocGFkZGluZ3MpKVxcbiAgICBsZXQgZW5jb2RlcyA9IE9iamVjdC5rZXlzKENvbmZpZ01hcHBpbmdbXFxcImVuY29kZVxcXCJdKTtcXG4gICAgLy8gbG9nKEpTT04uc3RyaW5naWZ5KGVuY29kZXMpKVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3Ryb25nPjxmb250IGNvbG9yPVxcXCJibGFja1xcXCI+5qih5byPPC9mb250Pjwvc3Ryb25nPicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSlcXG4gICAgZm9yIChsZXQgbW9kZSBvZiBtb2Rlcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogbW9kZSA9PSBjb25maWcubW9kZS5nZXQoKSA/IFxcXCLigJjigJhcXFwiICsgbW9kZSArIFxcXCLigJnigJlcXFwiIDogbW9kZSxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKG1vZGUsIGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25maWcubW9kZS5zZXQobW9kZSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgbW9kZSwgY29uZmlnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgfSlcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiYmxhY2tcXFwiPuWhq+WFhTwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pXFxuICAgIGZvciAobGV0IHBhZGRpbmcgb2YgcGFkZGluZ3MpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBhZGRpbmcgPT0gY29uZmlnLnBhZC5nZXQoKSA/IFxcXCLigJjigJhcXFwiICsgcGFkZGluZyArIFxcXCLigJnigJlcXFwiIDogcGFkZGluZyxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHBhZGRpbmcsIGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25maWcucGFkLnNldChwYWRkaW5nKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBwYWRkaW5nLCBjb25maWcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KVxcblxcbiAgICBpZiAoY29uZmlnLnR5cGUuZ2V0KCkgPT0gJ0FFUycpIHtcXG4gICAgICAgIGxldCBibG9ja1NpemVzID0gT2JqZWN0LmtleXMoQ29uZmlnTWFwcGluZ1tcXFwiYmxvY2tTaXplXFxcIl1bY29uZmlnLnR5cGUuZ2V0KCldKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3Ryb25nPjxmb250IGNvbG9yPVxcXCJibGFja1xcXCI+5pWw5o2u5Z2XPC9mb250Pjwvc3Ryb25nPicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSlcXG4gICAgICAgIGZvciAobGV0IGJsb2NrU2l6ZSBvZiBibG9ja1NpemVzKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGJsb2NrU2l6ZSA9PSBjb25maWcuYmxvY2tTaXplLmdldCgpID8gXFxcIuKAmOKAmFxcXCIgKyBibG9ja1NpemUgKyBcXFwi4oCZ4oCZXFxcIiA6IGJsb2NrU2l6ZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChibG9ja1NpemUsIGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmJsb2NrU2l6ZS5zZXQoYmxvY2tTaXplKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBibG9ja1NpemUsIGNvbmZpZyksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiYmxhY2tcXFwiPuWvhuaWh+e8lueggTwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pXFxuICAgIGZvciAobGV0IGVuY29kZSBvZiBlbmNvZGVzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBlbmNvZGUgPT0gY29uZmlnLmVuY29kZS5nZXQoKSA/IFxcXCLigJjigJhcXFwiICsgZW5jb2RlICsgXFxcIuKAmeKAmVxcXCIgOiBlbmNvZGUsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChlbmNvZGUsIGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25maWcuZW5jb2RlLnNldChlbmNvZGUpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBlbmNvZGUsIGNvbmZpZyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgLy8gQUVTIOWvhumSpSBrZXkgMTYvMjQvMzIg5a2X56ymID0+IDEyOC8xOTIvMjU2IGJpdFxcbiAgICBsZXQgYmxvY2tTaXplID0gMTI4O1xcbiAgICB0cnkge1xcbiAgICAgICAgYmxvY2tTaXplID0gQ29uZmlnTWFwcGluZ1tcXFwiYmxvY2tTaXplXFxcIl1bY29uZmlnLnR5cGUuZ2V0KCldW2NvbmZpZy5ibG9ja1NpemUuZ2V0KCldXFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGlmIChjb25maWcudHlwZS5nZXQoKSA9PT0gXFxcIkRFU1xcXCIpIHtcXG4gICAgICAgIGJsb2NrU2l6ZSA9IDY0O1xcbiAgICB9XFxuICAgIG9iai5ibG9ja1NpemUgPSBibG9ja1NpemU7XFxuICAgIGxldCBrZXlMZW4gPSBibG9ja1NpemUgLyA4O1xcbiAgICBsZXQga2V5TGVuU3RyID0ga2V5TGVuICsgXFxcIiDkuKrlrZfnrKZcXFwiXFxuICAgIGlmIChjb25maWcua2V5RW5jb2RlVHlwZS5nZXQoKSA9PSAnSGV4Jykge1xcbiAgICAgICAga2V5TGVuU3RyID0gKGtleUxlbiAqIDIpICsgXFxcIiDkuKrljYHlha3ov5vliLblrZfnrKZcXFwiO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIumaj+acuiBrZXlcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuWvhumSpSBrZXksIOW/hemhuyBcXFwiICsga2V5TGVuU3RyLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgLypoZWlnaHQ6IC0xLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsKi9cXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZy5rZXkuZ2V0KCksXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25maWcua2V5LnNldChpbnB1dClcXG4gICAgICAgICAgICB9LCBjb25maWcpXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChvYmosIGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgIGxldCBUb29sID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpO1xcbiAgICAgICAgICAgIGxldCBrZXlMZW4gPSBvYmouYmxvY2tTaXplIC8gODtcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnR5cGUuZ2V0KCkgPT09ICdERVMnKSB7XFxuICAgICAgICAgICAgICAgIGtleUxlbiA9IDg7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCByYW5kb21LZXkgPSBUb29sLnJhbmRvbVN0cmluZyhrZXlMZW4pO1xcbiAgICAgICAgICAgIGlmIChjb25maWcua2V5RW5jb2RlVHlwZS5nZXQoKSA9PSAnSGV4Jykge1xcbiAgICAgICAgICAgICAgICBsZXQgaGV4ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvaGV4P3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpLmhleDtcXG4gICAgICAgICAgICAgICAgb2JqLmRlY1RleHQgPSByYW5kb21LZXlcXG4gICAgICAgICAgICAgICAgcmFuZG9tS2V5ID0gaGV4LmVuY29kZShvYmopXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvbmZpZy5rZXkuc2V0KHJhbmRvbUtleSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICB9LCBvYmosIGNvbmZpZylcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcImJsYWNrXFxcIj7lr4bpkqXnvJbnoIE8L2ZvbnQ+PC9zdHJvbmc+JyxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoY29uZmlnKSA9PiB7XFxuICAgICAgICAgICAgY29uZmlnLmtleUVuY29kZVR5cGUuc2V0KFxcXCJVVEYtOFxcXCIpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6YeN572u5oiQ5Yqf77yBXFxcIjtcXG4gICAgICAgIH0sIGNvbmZpZyksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pXFxuICAgIGxldCBrZXlFbmNvZGVUeXBlcyA9IE9iamVjdC5rZXlzKENvbmZpZ01hcHBpbmdbXFxcImtleUVuY29kZVR5cGVcXFwiXSk7XFxuICAgIC8vIGxvZyhKU09OLnN0cmluZ2lmeShrZXlFbmNvZGVUeXBlcykpXFxuICAgIGZvciAobGV0IGtleUVuY29kZVR5cGUgb2Yga2V5RW5jb2RlVHlwZXMpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGtleUVuY29kZVR5cGUgPT0gY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCkgPyBcXFwi4oCY4oCYXFxcIiArIGtleUVuY29kZVR5cGUgKyBcXFwi4oCZ4oCZXFxcIiA6IGtleUVuY29kZVR5cGUsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChrZXlFbmNvZGVUeXBlLCBjb25maWcsIG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdG9hc3RUZXh0ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICBsZXQgaGV4ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvaGV4P3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpLmhleDtcXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGNvbmZpZy5rZXkuZ2V0KCk7XFxuICAgICAgICAgICAgICAgIGxldCBvbGRLZXlFbmNvZGVUeXBlID0gY29uZmlnLmtleUVuY29kZVR5cGUuZ2V0KCk7XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAob2xkS2V5RW5jb2RlVHlwZSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiVVRGLThcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXlFbmNvZGVUeXBlID09IFxcXCJIZXhcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5kZWNUZXh0ID0ga2V5XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoICE9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcua2V5LnNldChoZXguZW5jb2RlKG9iaikpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmtleUVuY29kZVR5cGUuc2V0KGtleUVuY29kZVR5cGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIkhleFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcua2V5RW5jb2RlVHlwZS5zZXQoa2V5RW5jb2RlVHlwZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdFRleHQgPSAndG9hc3Q6Ly/lvZPliY3kuI3mlK/mjIEgSGV4IOi9rOWFtuS7lue8luegge+8jOiLpemcgOimgemHjee9rumAiemhueivt+eCueWHu1vlr4bpkqXnvJbnoIFdJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9hc3RUZXh0O1xcbiAgICAgICAgICAgIH0sIGtleUVuY29kZVR5cGUsIGNvbmZpZywgb2JqKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbiAgICBpZiAoY29uZmlnLm1vZGUuZ2V0KCkgIT09IFxcXCJFQ0JcXFwiKSB7XFxuICAgICAgICBsZXQgaXZTaXplID0gKGNvbmZpZy50eXBlLmdldCgpID09PSBcXFwiREVTXFxcIiB8fCBjb25maWcudHlwZS5nZXQoKSA9PT0gXFxcIjNERVNcXFwiKSA/IDY0IDogMTI4O1xcbiAgICAgICAgb2JqLml2U2l6ZSA9IGl2U2l6ZTtcXG4gICAgICAgIGxldCBpdkxlbiA9IGl2U2l6ZSAvIDg7XFxuICAgICAgICBsZXQgaXZMZW5TdHIgPSBpdkxlbiArIFxcXCIg5Liq5a2X56ymXFxcIlxcbiAgICAgICAgaWYgKGNvbmZpZy5pdkVuY29kZVR5cGUuZ2V0KCkgPT0gJ0hleCcpIHtcXG4gICAgICAgICAgICBpdkxlblN0ciA9IChpdkxlbiAqIDIpICsgXFxcIiDkuKrljYHlha3ov5vliLblrZfnrKZcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIumaj+acuiBpdlxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIuWBj+enu+mHjyBpdiwg5b+F6aG7IFxcXCIgKyBpdkxlblN0cixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAvKmhlaWdodDogLTEsXFxuICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsKi9cXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcuaXYuZ2V0KCksXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKChjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pdi5zZXQoaW5wdXQpXFxuICAgICAgICAgICAgICAgIH0sIGNvbmZpZylcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHVybDogJC50b1N0cmluZygob2JqLCBjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IFRvb2wgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT1cXFwiICsgb2JqLnJ1bGVUaXRsZSk7XFxuICAgICAgICAgICAgICAgIGxldCBpdkxlbiA9IG9iai5pdlNpemUgLyA4O1xcbiAgICAgICAgICAgICAgICBsZXQgcmFuZG9tSXYgPSBUb29sLnJhbmRvbVN0cmluZyhpdkxlbik7XFxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuaXZFbmNvZGVUeXBlLmdldCgpID09ICdIZXgnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGV4ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvaGV4P3J1bGU9XFxcIiArIG9iai5ydWxlVGl0bGUpLmhleDtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5kZWNUZXh0ID0gcmFuZG9tSXZcXG4gICAgICAgICAgICAgICAgICAgIHJhbmRvbUl2ID0gaGV4LmVuY29kZShvYmopXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY29uZmlnLml2LnNldChyYW5kb21Jdik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIH0sIG9iaiwgY29uZmlnKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiYmxhY2tcXFwiPuWBj+enu+mHj+e8lueggTwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoY29uZmlnKSA9PiB7XFxuICAgICAgICAgICAgICAgIGNvbmZpZy5pdkVuY29kZVR5cGUuc2V0KFxcXCJVVEYtOFxcXCIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ph43nva7miJDlip/vvIFcXFwiO1xcbiAgICAgICAgICAgIH0sIGNvbmZpZyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBpdkVuY29kZVR5cGVzID0gT2JqZWN0LmtleXMoQ29uZmlnTWFwcGluZ1tcXFwiaXZFbmNvZGVUeXBlXFxcIl0pO1xcbiAgICAgICAgLy8gbG9nKEpTT04uc3RyaW5naWZ5KGtleUVuY29kZVR5cGVzKSlcXG4gICAgICAgIGZvciAobGV0IGl2RW5jb2RlVHlwZSBvZiBpdkVuY29kZVR5cGVzKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl2RW5jb2RlVHlwZSA9PSBjb25maWcuaXZFbmNvZGVUeXBlLmdldCgpID8gXFxcIuKAmOKAmFxcXCIgKyBpdkVuY29kZVR5cGUgKyBcXFwi4oCZ4oCZXFxcIiA6IGl2RW5jb2RlVHlwZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpdkVuY29kZVR5cGUsIGNvbmZpZywgb2JqKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdG9hc3RUZXh0ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhleCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hleD9ydWxlPVxcXCIgKyBvYmoucnVsZVRpdGxlKS5oZXg7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaXYgPSBjb25maWcuaXYuZ2V0KCk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb2xkSXZFbmNvZGVUeXBlID0gY29uZmlnLml2RW5jb2RlVHlwZS5nZXQoKTtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2xkSXZFbmNvZGVUeXBlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiVVRGLThcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXZFbmNvZGVUeXBlID09IFxcXCJIZXhcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZGVjVGV4dCA9IGl2XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXYubGVuZ3RoICE9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLml2LnNldChoZXguZW5jb2RlKG9iaikpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLml2RW5jb2RlVHlwZS5zZXQoaXZFbmNvZGVUeXBlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJIZXhcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXYubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pdkVuY29kZVR5cGUuc2V0KGl2RW5jb2RlVHlwZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdFRleHQgPSAndG9hc3Q6Ly/lvZPliY3kuI3mlK/mjIEgSGV4IOi9rOWFtuS7lue8luegge+8jOiLpemcgOimgemHjee9rumAiemhueivt+eCueWHu1vlgY/np7vph4/nvJbnoIFdJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvYXN0VGV4dDtcXG4gICAgICAgICAgICAgICAgfSwgaXZFbmNvZGVUeXBlLCBjb25maWcsIG9iaiksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGNvbmZpZy5pdi5zZXQoXFxcIlxcXCIpO1xcbiAgICB9XFxufVxcbiQuZXhwb3J0cy5idWlsZEFFU1VpID0gYnVpbGRBRVNVaVwifSx7XCJjb2xfdHlwZVwiOlwicmljaF90ZXh0XCIsXCJuYW1lXCI6XCJSU0EtVUlcIixcInBhdGhcIjpcInJzYXVpXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgbmF2aWdhdG9yID0ge307XFxubGV0IHdpbmRvdyA9IHtcXG4gICAgbmF2aWdhdG9yOiBuYXZpZ2F0b3JcXG59O1xcblxcbmZ1bmN0aW9uIGJ1aWxkUlNBVWkoZCwgb2JqKSB7XFxuICAgIC8qZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPHAgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPuebruWJjeaXoOazleWunueOsO+8jOaVrOivt+acn+W+he+8iOWSleWSleWSle+8iX48L3A+JyxcXG4gICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICB9KSovXFxuICAgIC8vIGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2V5cGFpckAxLjAuMy9pbmRleC5taW4uanNcXG4gICAgLy8gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3d3d3R5cm8vY3J5cHRpY29AbWFzdGVyL2NyeXB0aWNvLm1pbi5qc1xcbiAgICAvLyBsZXQgY3J5cHRpY28gPSByZXF1ZXN0KFxcXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvd3d3dHlyby9jcnlwdGljb0BtYXN0ZXIvY3J5cHRpY28ubWluLmpzXFxcIilcXG4gICAgLy8gZXZhbChjcnlwdGljbylcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIua4heepulxcXCIsXFxuICAgICAgICAgICAgZGVzYzogJ+ivt+i+k+WFpSBQRU0g5qC85byP55qE5YWs6ZKl5oiW56eB6ZKl77yM5LulIFxcXCItLS0tLUJFR0lOIFhYWCBLRVktLS0tLVxcXCIg5byA5aS077yMXFxcIi0tLS0tRU5EIFhYIEtFWS0tLS0tXFxcIiDnu5PlsL7vvIjkuZ/lj6/ku6XmsqHmnInov5nkuKTkuKrmoIfor4bvvIknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcInJzYV9wdWJfb3JfcHJpX2tleVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRNeVZhcihcXFwicnNhX3B1Yl9vcl9wcmlfa2V5XFxcIixpbnB1dCknXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJyc2FfcHViX29yX3ByaV9rZXlcXFwiKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIG9iailcXG4gICAgICAgIH1cXG4gICAgICAgIC8qLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi55Sf5oiQXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpS/nlJ/miJDnp4HpkqVcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcihcXFwicnNhX3ByaV9rZXlcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcInJzYV9wcmlfa2V5XFxcIixpbnB1dCknXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHVybDogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIG9iailcXG4gICAgICAgICAgICB9Ki9cXG4gICAgKVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmuIXnqbpcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpemcgOimgeWKoOWvhuaIluino+WvhueahOWGheWuuVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJyc2FfaGFuZGxlX3RleHRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dE15VmFyKFxcXCJyc2FfaGFuZGxlX3RleHRcXFwiLGlucHV0KSdcXG4gICAgICAgIH0sXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInJzYV9oYW5kbGVfdGV4dFxcXCIpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgb2JqKVxcbiAgICB9KVxcbiAgICBvYmoubW9kZXMgPSBbXFxcIuato+W4uOaooeW8j1xcXCIsIFxcXCLlj5jmgIHmqKHlvI9cXFwiXVxcbiAgICBvYmouY2hvaWNlcyA9IFtcXFwi5pivXFxcIiwgXFxcIuWQplxcXCJdXFxuXFxuICAgIGZ1bmN0aW9uIGlzTm9ybWFsTW9kZShvYmosIG1vZGUpIHtcXG4gICAgICAgIHJldHVybiBtb2RlID09IGdldE15VmFyKFxcXCJyc2Ffc2VsZWN0X21vZGVcXFwiLCBvYmoubW9kZXNbMF0pXFxuICAgIH1cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiYmxhY2tcXFwiPuaooeW8jzwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pXFxuICAgIGZvciAobGV0IG1vZGUgb2Ygb2JqLm1vZGVzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpc05vcm1hbE1vZGUob2JqLCBtb2RlKSA/IFxcXCLigJjigJhcXFwiICsgbW9kZSArIFxcXCLigJnigJlcXFwiIDogbW9kZSxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKG1vZGUpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInJzYV9zZWxlY3RfbW9kZVxcXCIsIG1vZGUpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIG1vZGUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3Ryb25nPjxmb250IGNvbG9yPVxcXCJibGFja1xcXCI+5YiG5q615Yqg5a+GPC9mb250Pjwvc3Ryb25nPicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSlcXG5cXG4gICAgZnVuY3Rpb24gaXNMb25nKG9iaiwgbG9uZ1N0YXQpIHtcXG4gICAgICAgIHJldHVybiBnZXRNeVZhcihcXFwicnNhX2xvbmdfc3RhdHVzXFxcIiwgb2JqLmNob2ljZXNbMV0pID09IGxvbmdTdGF0XFxuICAgIH1cXG4gICAgZm9yIChsZXQgbG9uZ1N0YXQgb2Ygb2JqLmNob2ljZXMpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGlzTG9uZyhvYmosIGxvbmdTdGF0KSA/IFxcXCLigJjigJhcXFwiICsgbG9uZ1N0YXQgKyBcXFwi4oCZ4oCZXFxcIiA6IGxvbmdTdGF0LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgobG9uZ1N0YXQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInJzYV9sb25nX3N0YXR1c1xcXCIsIGxvbmdTdGF0KVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBsb25nU3RhdCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAoaXNOb3JtYWxNb2RlKG9iaiwgb2JqLm1vZGVzWzBdKSA/IFxcXCLlhazpkqVcXFwiIDogXFxcIuengemSpVxcXCIpICsgXFxcIuWKoOWvhlxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICBleHRyYToge30sXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKG9iaiwgaXNOb3JtYWxNb2RlLCBpc0xvbmcpID0+IHtcXG4gICAgICAgICAgICBsZXQgaGFuZGxlVGV4dCA9IGdldE15VmFyKFxcXCJyc2FfaGFuZGxlX3RleHRcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICBsZXQga2V5ID0gZ2V0TXlWYXIoXFxcInJzYV9wdWJfb3JfcHJpX2tleVxcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLS0tLS1CRUdJTi4qP0tFWS0tLS0tLywgJycpXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8tLS0tLUVORC4qP0tFWS0tLS0tLywgJycpO1xcbiAgICAgICAgICAgIC8vIGxvZyhrZXkpXFxuICAgICAgICAgICAgaWYgKGhhbmRsZVRleHQgPT09ICcnKSByZXR1cm4gJ3RvYXN0Oi8v5b6F5aSE55CG5paH5pys6L6T5YWl5Li656m677yM6K+35qOA5p+lISdcXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnJykgcmV0dXJuICd0b2FzdDovL+WvhumSpei+k+WFpeS4uuepuu+8jOivt+ajgOafpSEnXFxuICAgICAgICAgICAgbGV0IHRvYXN0VGV4dCA9IFxcXCLliqDlr4bmiJDlip9cXFwiXFxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFxcXCJcXFwiXFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgbGV0IG1vZGVzID0gb2JqLm1vZGVzXFxuICAgICAgICAgICAgICAgIGxldCBjaG9pY2VzID0gb2JqLmNob2ljZXNcXG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBpc05vcm1hbE1vZGUob2JqLCBtb2Rlc1swXSkgPyAxIDogMlxcbiAgICAgICAgICAgICAgICBsZXQgbG9uZ1N0YXQgPSBpc0xvbmcob2JqLCBjaG9pY2VzWzBdKSA/IDIgOiAxXFxuICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBcXFwiUlNBL0VDQi9QS0NTMVBhZGRpbmdcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgIGxvbmc6IGxvbmdTdGF0LFxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2s6IHRydWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByc2FFbmNyeXB0KGhhbmRsZVRleHQsIGtleSwgb3B0aW9ucylcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIC8vbG9nKGUubWVzc2FnZSlcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZS5tZXNzYWdlXFxuICAgICAgICAgICAgICAgIHRvYXN0VGV4dCA9IFxcXCLliqDlr4blpLHotKVcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJyc2FfcmVzdWx0X3RleHRcXFwiLCByZXN1bHQpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyB0b2FzdFRleHRcXG4gICAgICAgIH0sIG9iaiwgaXNOb3JtYWxNb2RlLCBpc0xvbmcpXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAoaXNOb3JtYWxNb2RlKG9iaiwgb2JqLm1vZGVzWzBdKSA/IFxcXCLnp4HpkqVcXFwiIDogXFxcIuWFrOmSpVxcXCIpICsgXFxcIuino+WvhlxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICBleHRyYToge30sXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKG9iaiwgaXNOb3JtYWxNb2RlLCBpc0xvbmcpID0+IHtcXG4gICAgICAgICAgICBsZXQgaGFuZGxlVGV4dCA9IGdldE15VmFyKFxcXCJyc2FfaGFuZGxlX3RleHRcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICBsZXQga2V5ID0gZ2V0TXlWYXIoXFxcInJzYV9wdWJfb3JfcHJpX2tleVxcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLS0tLS1CRUdJTi4qP0tFWS0tLS0tLywgJycpXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8tLS0tLUVORC4qP0tFWS0tLS0tLywgJycpO1xcbiAgICAgICAgICAgIGlmIChoYW5kbGVUZXh0ID09PSAnJykgcmV0dXJuICd0b2FzdDovL+W+heWkhOeQhuaWh+acrOi+k+WFpeS4uuepuu+8jOivt+ajgOafpSEnXFxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJycpIHJldHVybiAndG9hc3Q6Ly/lr4bpkqXovpPlhaXkuLrnqbrvvIzor7fmo4Dmn6UhJ1xcbiAgICAgICAgICAgIGxldCB0b2FzdFRleHQgPSBcXFwi6Kej5a+G5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBtb2RlcyA9IG9iai5tb2Rlc1xcbiAgICAgICAgICAgICAgICBsZXQgY2hvaWNlcyA9IG9iai5jaG9pY2VzXFxuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gaXNOb3JtYWxNb2RlKG9iaiwgbW9kZXNbMF0pID8gMSA6IDJcXG4gICAgICAgICAgICAgICAgbGV0IGxvbmdTdGF0ID0gaXNMb25nKG9iaiwgY2hvaWNlc1swXSkgPyAyIDogMVxcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogXFxcIlJTQS9FQ0IvUEtDUzFQYWRkaW5nXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXFxuICAgICAgICAgICAgICAgICAgICBsb25nOiBsb25nU3RhdCxcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrOiB0cnVlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcnNhRGVjcnlwdChoYW5kbGVUZXh0LCBrZXksIG9wdGlvbnMpXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBlLm1lc3NhZ2VcXG4gICAgICAgICAgICAgICAgdG9hc3RUZXh0ID0gXFxcIuino+WvhuWksei0pVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInJzYV9yZXN1bHRfdGV4dFxcXCIsIHJlc3VsdClcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyB0b2FzdFRleHRcXG4gICAgICAgIH0sIG9iaiwgaXNOb3JtYWxNb2RlLCBpc0xvbmcpXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5aSN5Yi2XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLliqDlr4bmiJbop6Plr4bnmoTlhoXlrrnlsIbmmL7npLrlnKjmraRcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwicnNhX3Jlc3VsdF90ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRNeVZhcihcXFwicnNhX3Jlc3VsdF90ZXh0XFxcIixpbnB1dCknXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAvLyBvYmouZW5jVGV4dCA9IGlucHV0O1xcbiAgICAgICAgICAgIC8vIGxvZyhcXFwib2JqLmVuY1RleHQ6IFxcXCIgKyBvYmouZW5jVGV4dClcXG4gICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgaW5wdXRcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuXFxuXFxufVxcbiQuZXhwb3J0cy5idWlsZFJTQVVpID0gYnVpbGRSU0FVaVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInV0aWxpeVwiLFwicnVsZVwiOlwianM6XFxubGV0IFRvb2wgPSB7XFxuICByYW5kb21TdHJpbmc6IGZ1bmN0aW9uKGxlbil7XFxuICAgICAgbGV0IGNoYXJzID0gJ0FCQ0RFRkdISktNTlBRUlNUV1hZWmFiY2RlZmhpamttbnByc3R3eHl6MTIzNDU2Nzg5JyBcXG4gICAgICBsZXQgbWF4TGVuID0gY2hhcnMubGVuZ3RoXFxuICAgICAgbGV0IHN0ciA9ICcnXFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xcbiAgICAgICAgc3RyICs9IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtYXhMZW4pKVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gc3RyXFxuICB9LFxcbiAgZmlsbE51bGxQYWRkaW5nOiBmdW5jdGlvbiAoc3RyLCBsZW4pIHtcXG4gICAgLy8gc3RyLnBhZFN0YXJ0KHRhcmdldExlbmd0aCBbLCBwYWRTdHJpbmddKVxcbiAgICAvLyBzdHIucGFkRW5kKHRhcmdldExlbmd0aCBbLCBwYWRTdHJpbmddKVxcbiAgICBpZihzdHIubGVuZ3RoID49IGxlbikge1xcbiAgICAgIHJldHVybiBzdHI7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0ciArIEFycmF5KCBsZW4gLSBzdHIubGVuZ3RoICsgMSApLmpvaW4oXFxcIlxcXFx4MDBcXFwiKTtcXG4gIH0sXFxuICBmaWxsWmVyb1BhZGRpbmc6IGZ1bmN0aW9uIChzdHIsIGxlbikge1xcbiAgICAvLyBzdHIucGFkU3RhcnQodGFyZ2V0TGVuZ3RoIFssIHBhZFN0cmluZ10pXFxuICAgIC8vIHN0ci5wYWRFbmQodGFyZ2V0TGVuZ3RoIFssIHBhZFN0cmluZ10pXFxuICAgIGlmKHN0ci5sZW5ndGggPj0gbGVuKSB7XFxuICAgICAgcmV0dXJuIHN0cjtcXG4gICAgfVxcbiAgICByZXR1cm4gc3RyICsgQXJyYXkoIGxlbiAtIHN0ci5sZW5ndGggKyAxICkuam9pbihcXFwiMFxcXCIpO1xcbiAgfSxcXG59XFxuJC5leHBvcnRzID0gVG9vbDtcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi5pWj5YiX5ZOI5biM57G76aG16Z2iXCIsXCJwYXRoXCI6XCJoYXNoXCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCB7IGJ1aWxkSGFzaFVpIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9oYXNodWlcXFwiKTtcXG5mdW5jdGlvbiBzZXRIYXNoUGFnZShkLCBvYmopIHtcXG4gICAgYnVpbGRIYXNoVWkoZCwgb2JqKTtcXG59XFxuJC5leHBvcnRzLnNldEhhc2hQYWdlID0gc2V0SGFzaFBhZ2VcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiSGV4XCIsXCJwYXRoXCI6XCJoZXhcIixcInJ1bGVcIjpcImpzOlxcbmxldCBoZXggPSB7fTtcXG4vLyDnvJbnoIFcXG5oZXguZW5jb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgIC8vIGxvZyhcXFwi5oiR5piv5Y6f5paHXFxcIisgb2JqLmRlY1RleHQpXFxuICAgIGxldCB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShvYmouZGVjVGV4dCk7XFxuICAgIGxldCBlbmNvZGUgPSBcXFwiW0hFWF06XFxcIiArIENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XFxuICAgIHJldHVybiBlbmNvZGU7XFxufVxcbi8vIOino+eggVxcbmhleC5kZWNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgLy8gbG9nKFxcXCLmiJHmmK/lr4bmlodcXFwiKyBvYmouZW5jVGV4dClcXG4gICAgb2JqLmVuY1RleHQgPSBvYmouZW5jVGV4dC5yZXBsYWNlKFxcXCJbSEVYXTpcXFwiLCBcXFwiXFxcIilcXG4gICAgbGV0IHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2Uob2JqLmVuY1RleHQpO1xcbiAgICBsZXQgZGVjb2RlID0gQ3J5cHRvSlMuZW5jLlV0Zjguc3RyaW5naWZ5KHdvcmRBcnJheSk7XFxuICAgIC8qQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkod29yZEFycmF5KTsqL1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4vLyDlr7zlh7rnu5nlpJbpg6jpgJrov4cgcmVxdWlyZSDmlrnms5Xkvb/nlKhcXG4kLmV4cG9ydHMuaGV4ID0gaGV4XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkhhc2gtVUlcIixcInBhdGhcIjpcImhhc2h1aVwiLFwicnVsZVwiOlwianM6XFxuZnVuY3Rpb24gYnVpbGRFbXRweUhhc2hVaShkLCBvYmopIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPHAgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPuato+WcqOi3r+S4iu+8jOaVrOivt+acn+W+he+8iOWSleWSleWSle+8iX48L3A+JyxcXG4gICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICB9KVxcbn1cXG5mdW5jdGlvbiBidWlsZEhhc2hVaShkLCBvYmopIHtcXG4gICAgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCJTSEEzXFxcIikgJiYgIW9iai50eXBlLmluY2x1ZGVzKFxcXCJITUFDXFxcIikpIHtcXG4gICAgICAgIGJ1aWxkRW10cHlIYXNoVWkoZCwgb2JqKTtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5ZOI5biML+aVo+WIl1xcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl5Y6f5paHXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKFxcXCJoYXNoX3RleHRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiaGFzaF90ZXh0XFxcIixpbnB1dCknXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAvLyBvYmouZGVjVGV4dCA9IGlucHV0O1xcbiAgICAgICAgICAgIC8vIGxvZyhcXFwib2JqLmRlY1RleHQ6IFxcXCIgKyBvYmouZGVjVGV4dClcXG4gICAgICAgICAgICBsZXQgdG9hc3RUZXh0ID0gXFxcIuWKoOWvhuaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgbGV0IGhhc2hfcmVzdWx0ID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHRvb2wgPSB7fTtcXG4gICAgICAgICAgICBsZXQgdG9vbFNlbGVjdHMgPSBvYmoudHlwZS5zcGxpdChcXFwiQEBcXFwiKTtcXG4gICAgICAgICAgICBsZXQgdG9vbFNlbGVjdCA9IHRvb2xTZWxlY3RzW3Rvb2xTZWxlY3RzLmxlbmd0aCAtIDFdO1xcbiAgICAgICAgICAgIGxldCBIYXNoQWxnb3JpdGhtID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvaGFzaGFsZ29yaXRobT9ydWxlPVxcXCIgKyBvYmoucnVsZVRpdGxlKTtcXG4gICAgICAgICAgICBIYXNoQWxnb3JpdGhtLmNvbmZpZy50eXBlLnNldCh0b29sU2VsZWN0KVxcbiAgICAgICAgICAgIHRvb2wgPSBIYXNoQWxnb3JpdGhtO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGhhc2hfcmVzdWx0ID0gdG9vbC5oYXNoKCk7XFxuICAgICAgICAgICAgICAgIC8vIGxvZyhcXFwiaGFzaF9yZXN1bHQ6IFxcXCIgKyBoYXNoX3Jlc3VsdClcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGhhc2hfcmVzdWx0ID0gZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICB0b2FzdFRleHQgPSBcXFwi5Yqg5a+G5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgSGFzaEFsZ29yaXRobS5jb25maWcucmVzdWx0VGV4dC5zZXQoaGFzaF9yZXN1bHQpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyArIHRvYXN0VGV4dDtcXG4gICAgICAgIH0sIG9iaiksXFxuICAgIH0pO1xcbiAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIkhNQUNcXFwiKSB8fCBvYmoudHlwZS5pbmNsdWRlcyhcXFwiUEJLREYyXFxcIikpIHtcXG4gICAgICAgIGJ1aWxkQ29uZmlnc1VJKGQsIG9iaik7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5aSN5Yi2XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLlk4jluIzlgLxcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIC8vIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoXFxcImhhc2hfcmVzdWx0X3RleHRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiaGFzaF9yZXN1bHRfdGV4dFxcXCIsaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgLy8gb2JqLmVuY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5lbmNUZXh0OiBcXFwiICsgb2JqLmVuY1RleHQpXFxuICAgICAgICAgICAgaWYgKGlucHV0KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBpbnB1dDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YaF5a655Li656m677yBXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICB9KTtcXG4gICAgXFxufVxcbmZ1bmN0aW9uIGJ1aWxkQ29uZmlnc1VJKGQsIG9iaikge1xcbiAgICAvLyBITUFDIHx8IFBCS0RGMlxcbiAgICBsZXQgSGFzaEFsZ29yaXRobSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hhc2hhbGdvcml0aG0/cnVsZT1cXFwiICsgb2JqLnJ1bGVUaXRsZSk7XFxuICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwiSE1BQ1xcXCIpKSB7XFxuICAgICAgICAvLyBITUFDLXh4eFxcbiAgICAgICAgYnVpbGRIbWFjQ29uZmlnc1VJKGQsIG9iaiwgSGFzaEFsZ29yaXRobS5jb25maWcpXFxuICAgIH0gZWxzZSBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIlBCS0RGMlxcXCIpKSB7XFxuICAgICAgICAvLyBQQktERjJcXG4gICAgICAgIGJ1aWxkUEJLREYyQ29uZmlnc1VJKGQsIG9iaiwgSGFzaEFsZ29yaXRobS5NYXBwaW5nLCBIYXNoQWxnb3JpdGhtLmNvbmZpZylcXG4gICAgfVxcbn1cXG5mdW5jdGlvbiBidWlsZEhtYWNDb25maWdzVUkgKGQsIG9iaiwgY29uZmlnKSB7XFxuICAgIC8vIG9iai50eXBlLmluY2x1ZGVzKFxcXCJITUFDXFxcIilcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6ZqP5py6IGtleVxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5a+G6ZKlIGtleVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBoZWlnaHQ6IC0xLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcua2V5LmdldCgpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKChjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLmtleS5zZXQoaW5wdXQpXFxuICAgICAgICAgICAgfSwgY29uZmlnKVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZnVuY3Rpb24gYnVpbGRQQktERjJDb25maWdzVUkoZCwgb2JqLCBtYXBwaW5nLCBjb25maWcpIHtcXG4gICAgLy8gb2JqLnR5cGUuaW5jbHVkZXMoXFxcIlBCS0RGMlxcXCIpXFxuICAgIGxldCBrZXlTaXplcyA9IE9iamVjdC5rZXlzKG1hcHBpbmdbXFxcImtleVNpemVcXFwiXSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcImJsYWNrXFxcIj5LRVnplb/luqY8L2ZvbnQ+PC9zdHJvbmc+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbiAgICBmb3IgKGxldCBrZXlTaXplIG9mIGtleVNpemVzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBrZXlTaXplID09IGNvbmZpZy5rZXlTaXplLmdldCgpID8gXFxcIuKAmOKAmFxcXCIgKyBrZXlTaXplICsgXFxcIuKAmeKAmVxcXCIgOiBrZXlTaXplLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoa2V5U2l6ZSwgY29uZmlnKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjb25maWcua2V5U2l6ZS5zZXQoa2V5U2l6ZSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBrZXlTaXplLCBjb25maWcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLpmo/mnLogc2FsdFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi55uQIHNhbHTvvIzlu7rorq7oh7PlsJHkuLogOCDlrZfoioLvvIzkuJTopoHkuLrpmo/mnLrmlbDjgIJcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgaGVpZ2h0OiAtMSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnLnNhbHQuZ2V0KCksXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25maWcuc2FsdC5zZXQoaW5wdXQpXFxuICAgICAgICAgICAgfSwgY29uZmlnKVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6L+t5Luj5qyh5pWwXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLov63ku6PmrKHmlbAo6YCJ5aGrKe+8jOW7uuiuruiHs+WwkeS4uiA1MDAwMCDmrKHvvIzpmaTpnZ7mnInkuKXmoLznmoTmgKfog73opoHmsYLjgIJcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgaGVpZ2h0OiAtMSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnLml0ZXJhdGlvbnMuZ2V0KCksXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKGNvbmZpZykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25maWcuaXRlcmF0aW9ucy5zZXQoaW5wdXQpXFxuICAgICAgICAgICAgfSwgY29uZmlnKVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuJC5leHBvcnRzLmJ1aWxkSGFzaFVpID0gYnVpbGRIYXNoVWlcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiSGFzaOeul+azlVwiLFwicGF0aFwiOlwiaGFzaGFsZ29yaXRobVwiLFwicnVsZVwiOlwianM6XFxuZXZhbChnZXRDcnlwdG9KUygpKTtcXG5sZXQgSGFzaEFsZ29yaXRobSA9IHtcXG5cXHRNYXBwaW5nOiB7XFxuXFx0XFx0aGFzaFR5cGU6IHtcXG5cXHRcXHRcXHRcXFwiTUQ1XFxcIjogQ3J5cHRvSlMuTUQ1LFxcblxcdFxcdFxcdFxcXCJTSEEtMVxcXCI6IENyeXB0b0pTLlNIQTEsXFxuXFx0XFx0XFx0XFxcIlNIQS0yMjRcXFwiOiBDcnlwdG9KUy5TSEEyMjQsXFxuXFx0XFx0XFx0XFxcIlNIQS0yNTZcXFwiOiBDcnlwdG9KUy5TSEEyNTYsXFxuXFx0XFx0XFx0XFxcIlNIQS0zODRcXFwiOiBDcnlwdG9KUy5TSEEzODQsXFxuXFx0XFx0XFx0XFxcIlNIQS01MTJcXFwiOiBDcnlwdG9KUy5TSEE1MTIsXFxuXFx0XFx0XFx0XFxcIkhNQUMtTUQ1XFxcIjogQ3J5cHRvSlMuSG1hY01ENSxcXG5cXHRcXHRcXHRcXFwiSE1BQy1TSEExXFxcIjogQ3J5cHRvSlMuSG1hY1NIQTEsXFxuXFx0XFx0XFx0XFxcIkhNQUMtU0hBMjI0XFxcIjogQ3J5cHRvSlMuSG1hY1NIQTIyNCwgXFxuXFx0XFx0XFx0XFxcIkhNQUMtU0hBMjU2XFxcIjogQ3J5cHRvSlMuSG1hY1NIQTI1NiwgXFxuXFx0XFx0XFx0XFxcIkhNQUMtU0hBMzg0XFxcIjogQ3J5cHRvSlMuSG1hY1NIQTM4NCwgXFxuXFx0XFx0XFx0XFxcIkhNQUMtU0hBNTEyXFxcIjogQ3J5cHRvSlMuSG1hY1NIQTUxMixcXG5cXHRcXHRcXHRcXFwiUEJLREYyXFxcIjogQ3J5cHRvSlMuUEJLREYyLFxcblxcdFxcdH0sXFxuICAgICAgICBrZXlTaXplOiB7XFxuICAgICAgICAgICAgXFxcIjEyOOS9jVxcXCI6IDEyOCxcXG4gICAgICAgICAgICBcXFwiMjU25L2NXFxcIjogMjU2LFxcbiAgICAgICAgICAgIFxcXCI1MTLkvY1cXFwiOiA1MTIsXFxuICAgICAgICB9LFxcblxcdH0sXFxuXFx0Y29uZmlnOiB7XFxuICAgICAgICB0eXBlOiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiaGFzaF90eXBlXFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIk1ENVxcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIGtleToge1xcbiAgICAgICAgICAgIGtleTogXFxcImhhc2hfaG1hY19rZXlcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcblxcdFxcdHRleHQ6IHtcXG5cXHRcXHRcXHRrZXk6IFxcXCJoYXNoX3RleHRcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuXFx0XFx0fSxcXG5cXHRcXHRyZXN1bHRUZXh0OiB7XFxuXFx0XFx0XFx0a2V5OiBcXFwiaGFzaF9yZXN1bHRfdGV4dFxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG5cXHRcXHR9LFxcbiAgICAgICAga2V5U2l6ZToge1xcbiAgICAgICAgICAgIGtleTogXFxcImhhc2hfa2V5X3NpemVcXFwiLFxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFyKHRoaXMua2V5LCBcXFwiMTI45L2NXFxcIik7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIodGhpcy5rZXksIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICB9LFxcbiAgICAgICAgc2FsdDoge1xcbiAgICAgICAgICAgIGtleTogXFxcImhhc2hfc2FsdFxcXCIsXFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYXIodGhpcy5rZXksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0aGlzLmtleSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgIH0sXFxuICAgICAgICBpdGVyYXRpb25zOiB7XFxuICAgICAgICAgICAga2V5OiBcXFwiaGFzaF9pdGVyYXRpb25zXFxcIixcXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhcih0aGlzLmtleSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHRoaXMua2V5LCBuZXdWYWx1ZSk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgfSxcXG5cXHR9LFxcbiAgICBvbkNsb3NlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGxldCBjb25maWdLZXlzID0gT2JqZWN0LmtleXModGhpcy5jb25maWcpO1xcbiAgICAgICAgZm9yKGxldCBjb25mS2V5IG9mIGNvbmZpZ0tleXMpIHtcXG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5jb25maWdbY29uZktleV0ua2V5O1xcbiAgICAgICAgICAgIGNsZWFyVmFyKGtleSk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFx0aGFzaDogZnVuY3Rpb24gKCkge1xcblxcdFxcdGxldCB0ZXh0ID0gdGhpcy5jb25maWcudGV4dC5nZXQoKTtcXG5cXHRcXHRsZXQgdHlwZSA9IHRoaXMuY29uZmlnLnR5cGUuZ2V0KCk7XFxuXFx0XFx0bGV0IGhhc2ggPSB7fTtcXG5cXHRcXHRpZiAodGV4dCkge1xcbiAgICAgICAgICAgIGlmICh0eXBlLmluY2x1ZGVzKFxcXCJITUFDXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgLy8gSE1BQy14eHhcXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuY29uZmlnLmtleS5nZXQoKTtcXG4gICAgICAgICAgICAgICAgaGFzaCA9IHRoaXMuTWFwcGluZy5oYXNoVHlwZVt0eXBlXSh0ZXh0LCBrZXkpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLmluY2x1ZGVzKFxcXCJQQktERjJcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAvLyBQQktERjJcXG4gICAgICAgICAgICAgICAgbGV0IGtleVNpemUgPSB0aGlzLk1hcHBpbmcua2V5U2l6ZVt0aGlzLmNvbmZpZy5rZXlTaXplLmdldCgpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHNhbHQgPSB0aGlzLmNvbmZpZy5zYWx0LmdldCgpO1xcbiAgICAgICAgICAgICAgICBsZXQgaXRlcmF0aW9ucyA9IHRoaXMuY29uZmlnLml0ZXJhdGlvbnMuZ2V0KCk7XFxuICAgICAgICAgICAgICAgIGlmICghc2FsdCkge1xcbiAgICAgICAgICAgICAgICBcXHR0aHJvdyBuZXcgRXJyb3IoXFxcIuebkCBzYWx0IOS4jeiDveS4uuepuu+8gVxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgc2FsdCA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHNhbHQpXFxuICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID0gIHtcXG4gICAgICAgICAgICAgICAgXFx0XFx0a2V5U2l6ZToga2V5U2l6ZSAvIDMyXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMpIHtcXG4gICAgICAgICAgICAgICAgXFx0b3B0aW9ucy5pdGVyYXRpb25zID0gaXRlcmF0aW9ucztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBoYXNoID0gdGhpcy5NYXBwaW5nLmhhc2hUeXBlW3R5cGVdKHRleHQsIHNhbHQsIG9wdGlvbnMpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG5cXHRcXHRcXHRcXHRoYXNoID0gdGhpcy5NYXBwaW5nLmhhc2hUeXBlW3R5cGVdKHRleHQpO1xcbiAgICAgICAgICAgIH1cXG5cXHRcXHRcXHQvLyDlr4bmlodcXG5cXHRcXHRcXHRsZXQgaGFzaFJlc3VsdCA9IGhhc2gudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAvLyBsb2coXFxcImhhc2gjaGFzaF9yZXN1bHQ6IFxcXCIgKyBoYXNoUmVzdWx0KVxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdFRleHQuc2V0KGhhc2hSZXN1bHQpO1xcblxcdFxcdFxcdHJldHVybiBoYXNoUmVzdWx0O1xcblxcdFxcdH0gZWxzZSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLljp/mlofkuI3og73kuLrnqbrvvIFcXFwiKVxcbiAgICAgICAgfVxcblxcdH1cXG59O1xcbiQuZXhwb3J0cyA9IEhhc2hBbGdvcml0aG1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWFvemfs1wiLFwicGF0aFwiOlwicm9hclwiLFwicnVsZVwiOlwianM6XFxubGV0IHJvYXIgPSB7fTtcXG5yb2FyLmVuY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICAvLyBsb2coXFxcIltyb2FyXW9iai5kZWNUZXh0OiBcXFwiICsgb2JqLmRlY1RleHQpXFxuICAgIGxldCBlbmNvZGUgPSByZXF1ZXN0KCdodHRwOi8vaGkucGNtb2UubmV0L2JlYXIucGhwJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdYLVRva2VuJzogJzIwM0I2MUQzNTA2OCcsXFxuICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vaGkucGNtb2UubmV0JyxcXG4gICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXFxuICAgICAgICAgICAgLy8nVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IE5vdGU5IEJ1aWxkL1FLUTEuMTkxMjIyLjAwMjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS83Ny4wLjM4NjUuMTIwIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDU2MTQgTW9iaWxlIFNhZmFyaS81MzcuMzYnLFxcbiAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwOi8vaGkucGNtb2UubmV0J1xcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6ICdtb2RlPVJvYXImY29kZT1FbmNvZGUmdHh0PScgKyBvYmouZGVjVGV4dCxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICAvLyBsb2coXFxcIltyb2FyXWVuY29kZTogXFxcIiArIGVuY29kZSlcXG4gICAgcmV0dXJuIGVuY29kZTtcXG59XFxucm9hci5kZWNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgbGV0IGRlY29kZSA9IHJlcXVlc3QoJ2h0dHA6Ly9oaS5wY21vZS5uZXQvYmVhci5waHAnLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ1gtVG9rZW4nOiAnMjAzQjYxRDM1MDY4JyxcXG4gICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9oaS5wY21vZS5uZXQnLFxcbiAgICAgICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JyxcXG4gICAgICAgICAgICAvLydVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgTm90ZTkgQnVpbGQvUUtRMS4xOTEyMjIuMDAyOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc3LjAuMzg2NS4xMjAgTVFRQnJvd3Nlci82LjIgVEJTLzA0NTYxNCBNb2JpbGUgU2FmYXJpLzUzNy4zNicsXFxuICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHA6Ly9oaS5wY21vZS5uZXQnXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ21vZGU9Um9hciZjb2RlPURlY29kZSZ0eHQ9JyArIG9iai5lbmNUZXh0LFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuICAgIHJldHVybiBkZWNvZGU7XFxufVxcbiQuZXhwb3J0cy5yb2FyID0gcm9hclwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi54aK5puwXCIsXCJwYXRoXCI6XCJiZWFyXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgYmVhciA9IHt9O1xcbmJlYXIuZW5jb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIC8vIGxvZyhcXFwiW2JlYXJdb2JqLmRlY1RleHQ6IFxcXCIgKyBvYmouZGVjVGV4dClcXG4gICAgbGV0IGVuY29kZSA9IHJlcXVlc3QoJ2h0dHA6Ly9oaS5wY21vZS5uZXQvYmVhci5waHAnLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ1gtVG9rZW4nOiAnMjAzQjYxRDM1MDY4JyxcXG4gICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9oaS5wY21vZS5uZXQnLFxcbiAgICAgICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JyxcXG4gICAgICAgICAgICAvLydVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgTm90ZTkgQnVpbGQvUUtRMS4xOTEyMjIuMDAyOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc3LjAuMzg2NS4xMjAgTVFRQnJvd3Nlci82LjIgVEJTLzA0NTYxNCBNb2JpbGUgU2FmYXJpLzUzNy4zNicsXFxuICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHA6Ly9oaS5wY21vZS5uZXQnXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ21vZGU9QmVhciZjb2RlPUVuY29kZSZ0eHQ9JyArIG9iai5kZWNUZXh0LFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuICAgIC8vIGxvZyhcXFwiW2JlYXJdZW5jb2RlOiBcXFwiICsgZW5jb2RlKVxcbiAgICByZXR1cm4gZW5jb2RlO1xcbn1cXG5iZWFyLmRlY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZGVjb2RlID0gcmVxdWVzdCgnaHR0cDovL2hpLnBjbW9lLm5ldC9iZWFyLnBocCcsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnWC1Ub2tlbic6ICcyMDNCNjFEMzUwNjgnLFxcbiAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2hpLnBjbW9lLm5ldCcsXFxuICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxcbiAgICAgICAgICAgIC8vJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEwOyBOb3RlOSBCdWlsZC9RS1ExLjE5MTIyMi4wMDI7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzcuMC4zODY1LjEyMCBNUVFCcm93c2VyLzYuMiBUQlMvMDQ1NjE0IE1vYmlsZSBTYWZhcmkvNTM3LjM2JyxcXG4gICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cDovL2hpLnBjbW9lLm5ldCdcXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAnbW9kZT1CZWFyJmNvZGU9RGVjb2RlJnR4dD0nICsgb2JqLmVuY1RleHQsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGRlY29kZTtcXG59XFxuJC5leHBvcnRzLmJlYXIgPSBiZWFyXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpppbpobVcIixcInBhdGhcIjpcImhvbWVcIixcInJ1bGVcIjpcImpzOlxcbnNldFBhZ2VUaXRsZSgn5Yqg6Kej5a+G5bel5YW3JylcXG5jb25zdCB7XFxuICAgIGhlYWRlclxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jbGFzc2ljSGVhZGVyXFxcIik7XFxuY29uc3Qge1xcbiAgICBzZXRFbmNvZGVQYWdlXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VuY29kZVxcXCIpO1xcbmNvbnN0IHtcXG4gICAgc2V0Q3J5cHRvUGFnZVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jcnlwdG9cXFwiKTtcXG5jb25zdCB7XFxuICAgIHNldEhhc2hQYWdlXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hhc2hcXFwiKTtcXG5jb25zdCB7XFxuICAgIHNldE90aGVyUGFnZVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9vdGhlclxcXCIpO1xcbi8vIGNvbnN0IHsgQ3J5cHRvIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXNcXFwiKTtcXG4vKipcXG4gKiAxLiDlvJXlhaXnrpfms5Xkvp3otZZcXG4gKi9cXG5jb25zdCB7XFxuICAgIGJ1ZGRoYVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9idWRkaGFcXFwiKTtcXG5jb25zdCB7XFxuICAgIG5ld0J1ZGRoYVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9uZXdCdWRkaGFcXFwiKTtcXG5jb25zdCB7XFxuICAgIGJlYXJcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYmVhclxcXCIpO1xcbmNvbnN0IHtcXG4gICAgcm9hclxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9yb2FyXFxcIik7XFxuY29uc3Qge1xcbiAgICB1bmljb2RlXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3VuaWNvZGVcXFwiKTtcXG5jb25zdCB7XFxuICAgIHVyaVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91cmlcXFwiKTtcXG5jb25zdCB7XFxuICAgIHVyaWNvbXBvbmVudFxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91cmljb21wb25lbnRcXFwiKTtcXG5jb25zdCB7XFxuICAgIGJhc2U2NFxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9iYXNlNjRcXFwiKTtcXG5jb25zdCB7XFxuICAgIGFzY2lpXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FzY2lpXFxcIik7XFxuY29uc3Qge1xcbiAgICBoZXhcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvaGV4XFxcIik7XFxuXFxubGV0IHJ1bGVUaXRsZSA9IE1ZX1JVTEUudGl0bGU7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKChoZWFkZXIsIHJ1bGVUaXRsZSkgPT4ge1xcbiAgICBwdXRWYXIoXFxcImVuY29kZS10ZXh0XFxcIiwgXFxcIlxcXCIpO1xcbiAgICBwdXRWYXIoXFxcImRlY29kZS10ZXh0XFxcIiwgXFxcIlxcXCIpO1xcbiAgICBoZWFkZXIub25DbG9zZSgpO1xcbiAgICBsZXQgQ3J5cHRvID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIHJ1bGVUaXRsZSk7XFxuICAgIENyeXB0by5vbkNsb3NlKCk7XFxuICAgIGNsZWFyTXlWYXIoXFxcInJzYV9wdWJfb3JfcHJpX2tleVxcXCIpXFxuICAgIGNsZWFyTXlWYXIoXFxcInJzYV9oYW5kbGVfdGV4dFxcXCIpXFxuICAgIGNsZWFyTXlWYXIoXFxcInJzYV9zZWxlY3RfbW9kZVxcXCIpXFxuICAgIGNsZWFyTXlWYXIoXFxcInJzYV9sb25nX3N0YXR1c1xcXCIpXFxuICAgIGNsZWFyTXlWYXIoXFxcInJzYV9yZXN1bHRfdGV4dFxcXCIpO1xcbiAgICBsZXQgSGFzaEFsZ29yaXRobSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2hhc2hhbGdvcml0aG0/cnVsZT1cXFwiICsgcnVsZVRpdGxlKTtcXG4gICAgSGFzaEFsZ29yaXRobS5vbkNsb3NlKCk7XFxufSwgaGVhZGVyLCBydWxlVGl0bGUpKVxcblxcbmxldCBkID0gW107XFxuLypkLnB1c2goe1xcbiAgICBkZXNjOiBcXFwiMFxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiXFxufSkqL1xcbnRyeSB7XFxuICAgIGlmICghbmV3V2luZG93KSB7XFxuXFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTsgaSsrKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxicj48YmlnIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj48Yj7wn5SR5Yqg6Kej5a+G5bel5YW38J+UkTwvYj48L2JpZz4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG59XFxubGV0IGNsYXNzaWMgPSB7XFxuICAgIFxcXCLnvJbnoIHovazmjaJcXFwiOiBbe1xcbiAgICAgICAgICAgIFxcXCLkvZvnhorlhb3mm7BcXFwiOiBbXFxcIuS9m+absFxcXCIsIFxcXCLmlrDkvZvmm7BcXFwiLCBcXFwi54aK5puwXFxcIiwgXFxcIuWFvemfs1xcXCJdXFxuICAgICAgICB9LFxcbiAgICAgICAgXFxcIlVuaWNvZGVcXFwiLFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIFxcXCJVUkxcXFwiOiBbXFxcIlVSSVxcXCIsIFxcXCJVUklDb21wb25lbnRcXFwiXVxcbiAgICAgICAgfSxcXG4gICAgICAgIFxcXCJCYXNlNjRcXFwiLCBcXFwiQVNDSUlcXFwiLCBcXFwiSGV4XFxcIlxcbiAgICBdLFxcbiAgICBcXFwi5Yqg5a+GL+ino+WvhlxcXCI6IFt7XFxuICAgICAgICAgICAgXFxcIuWvueensOWKoOWvhlxcXCI6IFtcXFwiQUVTXFxcIiwgXFxcIkRFU1xcXCIsIFxcXCIzREVTXFxcIl1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgXFxcIumdnuWvueensOWKoOWvhlxcXCI6IFtcXFwiUlNBXFxcIl1cXG4gICAgICAgIH1cXG4gICAgXSxcXG4gICAgXFxcIuaVo+WIly/lk4jluIxcXFwiOiBbXFxuICAgICAgICBcXFwiTUQ1XFxcIixcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBcXFwiU0hBXFxcIjogW1xcXCJTSEEtMVxcXCIsIFxcXCJTSEEtMjI0XFxcIiwgXFxcIlNIQS0yNTZcXFwiLCBcXFwiU0hBLTM4NFxcXCIsIFxcXCJTSEEtNTEyXFxcIiwgLypcXFwiU0hBMy01MTJcXFwiKi8gXVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBcXFwiSE1BQ1xcXCI6IFtcXFwiSE1BQy1NRDVcXFwiLCBcXFwiSE1BQy1TSEExXFxcIiwgXFxcIkhNQUMtU0hBMjI0XFxcIiwgXFxcIkhNQUMtU0hBMjU2XFxcIiwgXFxcIkhNQUMtU0hBMzg0XFxcIiwgXFxcIkhNQUMtU0hBNTEyXFxcIl1cXG4gICAgICAgIH0sXFxuICAgICAgICBcXFwiUEJLREYyXFxcIlxcbiAgICBdLFxcbiAgICBcXFwi5YW25LuW6L2s5o2iXFxcIjogW1xcbiAgICAgICAgXFxcIlY26Kej5a+GXFxcIixcXG4gICAgICAgIFxcXCJQcml2YXRlSlNcXFwiLFxcbiAgICAgICAgXFxcIuaXtumXtOaIs1xcXCIsXFxuICAgIF1cXG59XFxuZCA9IGQuY29uY2F0KGhlYWRlci5nZXQoY2xhc3NpYykpXFxudmFyIHR5cGUgPSBoZWFkZXIuZ2V0Q3VycmVudEluZGV4KCk7XFxudHJ5IHtcXG4gICAgaWYgKG5ld1dpbmRvdykge1xcbiAgICAgICAgLypmb3IgKGxldCBpID0gMDsgaSA8IDE7IGkrKykge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSovXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+6YCJ6aG5PC9iPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn54K55oiR5YyW5Li65paw56qX5Y+jJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9ob21lI2dhbWVUaGVtZSMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIG5ld1dpbmRvdzogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgLy8gbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG59XFxuXFxuLyoqXFxuICogMi4g5ZyoIHRvb2xzIOWKoOWFpemUruWAvOWvue+8jOeUqOS6juaYoOWwhOeul+azle+8jOagvOW8j+S4uiDliIbnsbvkuK3nmoTmm7/mjaLlgLzvvIjljbMgZnlBbGwg55qE5YC877yJOiDlvJXlhaXnmoTnrpfms5Xkvp3otZbnmoTlr7nosaHlkI1cXG4gKi9cXG52YXIgb2JqID0ge1xcbiAgICBydWxlVGl0bGU6IHJ1bGVUaXRsZSxcXG4gICAgdHlwZTogdHlwZSxcXG4gICAgdG9vbHM6IHtcXG4gICAgICAgIFxcXCLkvZvmm7BcXFwiOiBidWRkaGEsXFxuICAgICAgICBcXFwi5paw5L2b5puwXFxcIjogbmV3QnVkZGhhLFxcbiAgICAgICAgXFxcIueGiuabsFxcXCI6IGJlYXIsXFxuICAgICAgICBcXFwi5YW96Z+zXFxcIjogcm9hcixcXG4gICAgICAgIFxcXCJVbmljb2RlXFxcIjogdW5pY29kZSxcXG4gICAgICAgIFxcXCJVUklcXFwiOiB1cmksXFxuICAgICAgICBcXFwiVVJJQ29tcG9uZW50XFxcIjogdXJpY29tcG9uZW50LFxcbiAgICAgICAgXFxcIkJhc2U2NFxcXCI6IGJhc2U2NCxcXG4gICAgICAgIFxcXCJBU0NJSVxcXCI6IGFzY2lpLFxcbiAgICAgICAgXFxcIkhleFxcXCI6IGhleCxcXG4gICAgICAgIC8vIFxcXCJBRVNcXFwiOiBDcnlwdG8uQUVTLFxcbiAgICAgICAgLy8gXFxcIkRFU1xcXCI6IENyeXB0by5ERVMsXFxuICAgIH0sXFxufVxcblxcbi8qKlxcbiAqIDMuIOa3u+WKoOWtkOmhtemdouWGmeiHquW3seeahOeul+azle+8jOaooeadv+ivt+WPguiAg+KAnOeul+azleaooeadv+KAnei/meS4quWtkOmhtemdouaIluW3suacieeahOWtkOmhtemdolxcbiAqXFxuICog5rOo77ya5q2k5aSH5rOo5ZCO55qE5omA5pyJ5Luj56CB5ZCE5L2N6YO95LiN6ZyA6KaB5YqoXFxuICovXFxuLy8gbG9nKG9iai50eXBlKVxcbmlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwi57yW56CB6L2s5o2iXFxcIikpIHtcXG4gICAgc2V0RW5jb2RlUGFnZShkLCBvYmopO1xcbn0gZWxzZSBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIuWKoOWvhi/op6Plr4ZcXFwiKSkge1xcbiAgICBzZXRDcnlwdG9QYWdlKGQsIG9iaik7XFxufSBlbHNlIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwi5pWj5YiXL+WTiOW4jFxcXCIpKSB7XFxuICAgIHNldEhhc2hQYWdlKGQsIG9iaik7XFxufSBlbHNlIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwi5YW25LuW6L2s5o2iXFxcIikpIHtcXG4gICAgc2V0T3RoZXJQYWdlKGQsIG9iaik7XFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwicmljaF90ZXh0XCIsXCJuYW1lXCI6XCJPdGhlci1VSVwiLFwicGF0aFwiOlwib3RoZXJ1aVwiLFwicnVsZVwiOlwiLy8ganM6XFxuZnVuY3Rpb24gYnVpbGRFbXB0eU90aGVyVWkoZCwgb2JqKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxwIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7mraPlnKjot6/kuIrvvIzmlazor7fmnJ/lvoXvvIjlkpXlkpXlkpXvvIl+PC9wPicsXFxuICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgfSlcXG59XFxuXFxuZnVuY3Rpb24gYnVpbGRDb250cm9sbGVyVWkoZCwgb2JqKSB7XFxuICAgIC8vIGh0dHBzOi8vZ2l0ZWUuY29tL0NoZXJpc2hSeC9pbWFnZXdhcmVob3VzZS9yYXcvbWFzdGVyL2ltYWdlLzMyZDI5ZTJmYmNkZjhkODMwNzFkZWVjN2Y2YWE0YjdjLnBuZ1xcbiAgICBsZXQgY3BJbWdVcmwgPSBcXFwiaHR0cHM6Ly9pY29uZm9udC50eXJhbnRnLmNvbS9hcGkvaWxsdXN0cmF0ZS5zdmc/c3ZnX3N0cmluZz0lM0NzdmclMjBjbGFzcyUzRCUyMmljb24lMjIlMjBzdHlsZSUzRCUyMndpZHRoJTNBJTIwMWVtJTNCaGVpZ2h0JTNBJTIwMWVtJTNCdmVydGljYWwtYWxpZ24lM0ElMjBtaWRkbGUlM0JmaWxsJTNBJTIwY3VycmVudENvbG9yJTNCb3ZlcmZsb3clM0ElMjBoaWRkZW4lM0IlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDI0JTIwMTAyNCUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTg2Ni4xMzMzMzMlMjA5MTkuNDY2NjY3aC00MDUuMzMzMzMzYy0yOS44NjY2NjclMjAwLTUzLjMzMzMzMy0yMy40NjY2NjctNTMuMzMzMzMzLTUzLjMzMzMzNHYtNjE4LjY2NjY2NmMwLTI5Ljg2NjY2NyUyMDIzLjQ2NjY2Ny01My4zMzMzMzMlMjA1My4zMzMzMzMtNTMuMzMzMzM0aDQwNS4zMzMzMzNjMjkuODY2NjY3JTIwMCUyMDUzLjMzMzMzMyUyMDIzLjQ2NjY2NyUyMDUzLjMzMzMzNCUyMDUzLjMzMzMzNHY2MTguNjY2NjY2YzAlMjAyOS44NjY2NjctMjMuNDY2NjY3JTIwNTMuMzMzMzMzLTUzLjMzMzMzNCUyMDUzLjMzMzMzNHolMjIlMjBmaWxsJTNEJTIyJTIzNjlDMEZGJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNzcwLjEzMzMzMyUyMDQyOC44aC0yMTMuMzMzMzMzYy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzM3M4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzM0aDIxMy4zMzMzMzNjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzNCUyMDIxLjMzMzMzNHMtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzNCUyMDIxLjMzMzMzM3pNNzcwLjEzMzMzMyUyMDU1Ni44aC0yMTMuMzMzMzMzYy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzM3M4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzM0aDIxMy4zMzMzMzNjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzNCUyMDIxLjMzMzMzNHMtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzNCUyMDIxLjMzMzMzM3pNNzcwLjEzMzMzMyUyMDY4NC44aC0yMTMuMzMzMzMzYy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzM3M4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzM0aDIxMy4zMzMzMzNjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzNCUyMDIxLjMzMzMzNHMtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzNCUyMDIxLjMzMzMzM3olMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNTY3LjQ2NjY2NyUyMDgzNC4xMzMzMzNoLTQwNS4zMzMzMzRjLTI5Ljg2NjY2NyUyMDAtNTMuMzMzMzMzLTIzLjQ2NjY2Ny01My4zMzMzMzMtNTMuMzMzMzMzdi02MTguNjY2NjY3YzAtMjkuODY2NjY3JTIwMjMuNDY2NjY3LTUzLjMzMzMzMyUyMDUzLjMzMzMzMy01My4zMzMzMzNoNDA1LjMzMzMzNGMyOS44NjY2NjclMjAwJTIwNTMuMzMzMzMzJTIwMjMuNDY2NjY3JTIwNTMuMzMzMzMzJTIwNTMuMzMzMzMzdjYxOC42NjY2NjdjMCUyMDI5Ljg2NjY2Ny0yMy40NjY2NjclMjA1My4zMzMzMzMtNTMuMzMzMzMzJTIwNTMuMzMzMzMzeiUyMiUyMGZpbGwlM0QlMjIlMjMxODkwRkYlMjIlMjAlMkYlM0UlM0NwYXRoJTIwZCUzRCUyMk00NzEuNDY2NjY3JTIwMzQzLjQ2NjY2N2gtMjEzLjMzMzMzNGMtMTIuOCUyMDAtMjEuMzMzMzMzLTguNTMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzRzOC41MzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzMzLTIxLjMzMzMzM2gyMTMuMzMzMzM0YzEyLjglMjAwJTIwMjEuMzMzMzMzJTIwOC41MzMzMzMlMjAyMS4zMzMzMzMlMjAyMS4zMzMzMzNzLTEwLjY2NjY2NyUyMDIxLjMzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzR6TTQ3MS40NjY2NjclMjA0NzEuNDY2NjY3aC0yMTMuMzMzMzM0Yy0xMi44JTIwMC0yMS4zMzMzMzMtOC41MzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzNHM4LjUzMzMzMy0yMS4zMzMzMzMlMjAyMS4zMzMzMzMtMjEuMzMzMzMzaDIxMy4zMzMzMzRjMTIuOCUyMDAlMjAyMS4zMzMzMzMlMjA4LjUzMzMzMyUyMDIxLjMzMzMzMyUyMDIxLjMzMzMzM3MtMTAuNjY2NjY3JTIwMjEuMzMzMzMzLTIxLjMzMzMzMyUyMDIxLjMzMzMzNHpNNDcxLjQ2NjY2NyUyMDU5OS40NjY2NjdoLTIxMy4zMzMzMzRjLTEyLjglMjAwLTIxLjMzMzMzMy04LjUzMzMzMy0yMS4zMzMzMzMtMjEuMzMzMzM0czguNTMzMzMzLTIxLjMzMzMzMyUyMDIxLjMzMzMzMy0yMS4zMzMzMzNoMjEzLjMzMzMzNGMxMi44JTIwMCUyMDIxLjMzMzMzMyUyMDguNTMzMzMzJTIwMjEuMzMzMzMzJTIwMjEuMzMzMzMzcy0xMC42NjY2NjclMjAyMS4zMzMzMzMtMjEuMzMzMzMzJTIwMjEuMzMzMzM0eiUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlMjAlMkYlM0UlM0MlMkZzdmclM0VcXFwiXFxuICAgIGxldCBjbGVhckltZ1VybCA9IFxcXCJodHRwczovL2ljb25mb250LnR5cmFudGcuY29tL2FwaS9pbGx1c3RyYXRlLnN2Zz9zdmdfc3RyaW5nPSUzQ3N2ZyUyMGNsYXNzJTNEJTIyaWNvbiUyMiUyMHN0eWxlJTNEJTIyd2lkdGglM0ElMjAxZW0lM0JoZWlnaHQlM0ElMjAxZW0lM0J2ZXJ0aWNhbC1hbGlnbiUzQSUyMG1pZGRsZSUzQmZpbGwlM0ElMjBjdXJyZW50Q29sb3IlM0JvdmVyZmxvdyUzQSUyMGhpZGRlbiUzQiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwMjQlMjAxMDI0JTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTc5LjIlMjA1ODguOGg3MTAuNGMyNS42JTIwMCUyMDMyLTE5LjIlMjAyNS42LTM4LjRMODMyJTIwMzY0LjhjLTEyLjgtMTkuMi0zOC40LTM4LjQtNjQtMzguNEg2MjAuOFY2NGMwLTI1LjYtMTkuMi00NC44LTQ0LjgtNDQuOEg0OTIuOGMtMTkuMiUyMDAtMzguNCUyMDE5LjItMzguNCUyMDQ0Ljh2MjYyLjRIMzAwLjhjLTI1LjYlMjAwLTUxLjIlMjAxOS4yLTU3LjYlMjAzOC40TDE1My42JTIwNTUwLjRjLTYuNCUyMDE5LjIlMjAwJTIwMzguNCUyMDI1LjYlMjAzOC40bTY5MS4yJTIwNjRIMjE3LjZjNi40JTIwNjQlMjAwJTIwMTQ3LjItNTEuMiUyMDE5OC40LTc2LjglMjA2NC01MS4yJTIwMTQwLjglMjA2LjQlMjAxNjYuNGgxMDguOGMxMi44LTEyLjglMjA3MC40LTEwMi40JTIwODkuNi0xOTIlMjAwLTE5LjIlMjA2LjQtMzIlMjA2LjQtMzIlMjAwJTIwMTIuOCUyMDAlMjAxOS4yLTYuNCUyMDMyLTYuNCUyMDU3LjYtMjUuNiUyMDE3Mi44LTM4LjQlMjAxOTJoODMuMmMxMi44LTEyLjglMjA3MC40LTEwMi40JTIwODkuNi0xOTIlMjAwLTE5LjIlMjA2LjQtMzIlMjA2LjQtMzIlMjAwJTIwMTIuOCUyMDAlMjAxOS4yLTYuNCUyMDMyLTYuNCUyMDU3LjYtMjUuNiUyMDE3Mi44LTM4LjQlMjAxOTJoMTAyLjRjMTIuOC0xMi44JTIwNzAuNC0xMDIuNCUyMDg5LjYtMTkyJTIwMC0xOS4yJTIwNi40LTMyJTIwNi40LTMyJTIwMCUyMDEyLjglMjAwJTIwMTkuMi02LjQlMjAzMi02LjQlMjA1Ny42LTI1LjYlMjAxNzIuOC0zOC40JTIwMTkySDcwNGMxMi44LTEyLjglMjA3MC40LTEwMi40JTIwODkuNi0xOTIlMjAwLTE5LjIlMjA2LjQtMzIlMjA2LjQtMzIlMjAwJTIwMTIuOCUyMDAlMjAxOS4yLTYuNCUyMDMyLTYuNCUyMDU3LjYtMjUuNiUyMDE3Mi44LTM4LjQlMjAxOTJoMTAyLjRzNzAuNC0yNS42JTIwNTcuNi0xMDIuNGMtMTkuMi0xMTUuMi0yNS42LTE3OS4yLTQ0LjgtMjYyLjQlMjIlMjBmaWxsJTNEJTIyJTIzNzM2N0QxJTIyJTIwJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIlxcblxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfmuIXnqbrovpPlhaUnLFxcbiAgICAgICAgaW1nOiBjbGVhckltZ1VybCxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIgKyBcXFwiQGxhenlSdWxlPS5qczpwdXRNeVZhcignb3RoZXIuZW5jb2RlLnRleHQnLCAnJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/muIXnqbrmiJDlip8nXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl8yJ1xcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5riF56m66L6T5Ye6JyxcXG4gICAgICAgIGltZzogY2xlYXJJbWdVcmwsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiICsgXFxcIkBsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ290aGVyLmRlY29kZS50ZXh0JywgJycpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5riF56m65oiQ5YqfJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMidcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WkjeWItui+k+WFpScsXFxuICAgICAgICBpbWc6IGNwSW1nVXJsLFxcbiAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGRlYyA9IGdldE15VmFyKFxcXCJvdGhlci5lbmNvZGUudGV4dFxcXCIpO1xcbiAgICAgICAgICAgIGlmIChkZWMpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGRlYztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YaF5a655Li656m677yBXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICdpY29uXzInXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflpI3liLbovpPlh7onLFxcbiAgICAgICAgaW1nOiBjcEltZ1VybCxcXG4gICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBlbmMgPSBnZXRNeVZhcihcXFwib3RoZXIuZGVjb2RlLnRleHRcXFwiKTtcXG4gICAgICAgICAgICBpZiAoZW5jKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBlbmM7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WGheWuueS4uuepuu+8gVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl8yJ1xcbiAgICB9KTtcXG59XFxuXFxuZnVuY3Rpb24gYnVpbGRPdGhlclVpKGQsIG9iaikge1xcbiAgICBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIuaXtumXtOaIs1xcXCIpKSB7XFxuICAgICAgICBidWlsZEVtcHR5T3RoZXJVaShkLCBvYmopO1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGlmIChvYmoudHlwZS5pbmNsdWRlcyhcXFwiVjbop6Plr4ZcXFwiKSkge1xcbiAgICAgICAgYnVpbGREZWNvZGVWNlVJKGQsIG9iaik7XFxuICAgIH0gZWxzZSBpZiAob2JqLnR5cGUuaW5jbHVkZXMoXFxcIlByaXZhdGVKU1xcXCIpKSB7XFxuICAgICAgICBidWlsZFByaXZhdGVKc1VpKGQsIG9iaik7XFxuICAgIH1cXG4gICAgaWYgKG9iai50eXBlLmluY2x1ZGVzKFxcXCJWNuino+WvhlxcXCIpIHx8IG9iai50eXBlLmluY2x1ZGVzKFxcXCJQcml2YXRlSlNcXFwiKSkge1xcbiAgICAgICAgYnVpbGRDb250cm9sbGVyVWkoZCwgb2JqKTtcXG4gICAgfVxcbn1cXG4vLyBUT0RPIOa3u+WKoOa4hemZpCBWYXIg5Y+Y6YePXFxuZnVuY3Rpb24gYnVpbGREZWNvZGVWNlVJKGQsIG9iaikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLop6Pmt7fmt4ZcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpSBqaWFtaS5jb20udjYg55qE5a+G5paHXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcIm90aGVyLmVuY29kZS50ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRNeVZhcihcXFwib3RoZXIuZW5jb2RlLnRleHRcXFwiLCBpbnB1dCknXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAvLyBvYmouZGVjVGV4dCA9IGlucHV0O1xcbiAgICAgICAgICAgIC8vIGxvZyhcXFwib2JqLmRlY1RleHQ6IFxcXCIgKyBvYmouZGVjVGV4dClcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICcnKSByZXR1cm4gJ3RvYXN0Oi8v6L6T5YWl5Li656m677yM6K+35qOA5p+lISdcXG4gICAgICAgICAgICBsZXQgdG9hc3RUZXh0ID0gXFxcIuino+a3t+a3huaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgbGV0IGRlY19yZXN1bHQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICgvXmh0dHAocyopOlxcXFwvXFxcXC8vLnRlc3QoaW5wdXQudHJpbSgpKSkgPyByZXF1ZXN0KGlucHV0KSA6IGlucHV0O1xcbiAgICAgICAgICAgICAgICBkZWNfcmVzdWx0ID0gZmV0Y2goYmFzZTY0RGVjb2RlKFxcXCJhSFIwY0hNNkx5OW5ZWFJ6WW5rdGJtbHVaUzFpYkhWemFDNTJaWEpqWld3dVlYQndMMkZ3YVM5Mk5nPT1cXFwiKSwge1xcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvZGVcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvLyBsb2coXFxcImhhc2hfcmVzdWx0OiBcXFwiICsgaGFzaF9yZXN1bHQpXFxuICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAnJykgdG9hc3RUZXh0ID0gXFxcIuino+a3t+a3huWksei0pVxcXCI7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBkZWNfcmVzdWx0ID0gZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICB0b2FzdFRleHQgPSBcXFwi6Kej5re35reG5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcIm90aGVyLmRlY29kZS50ZXh0XFxcIiwgZGVjX3Jlc3VsdClcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgdG9hc3RUZXh0O1xcbiAgICAgICAgfSwgb2JqKSxcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuS7o+eggeafpeeci1xcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi57uT5p6c6L6T5Ye6XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcIm90aGVyLmRlY29kZS50ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRNeVZhcihcXFwib3RoZXIuZGVjb2RlLnRleHRcXFwiLCBpbnB1dCknXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAvLyBvYmouZW5jVGV4dCA9IGlucHV0O1xcbiAgICAgICAgICAgIC8vIGxvZyhcXFwib2JqLmVuY1RleHQ6IFxcXCIgKyBvYmouZW5jVGV4dClcXG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGNhY2hlUGF0aCA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL0NyeXB0b1Rvb2wuY2FjaGUnO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoY2FjaGVQYXRoLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnZWRpdEZpbGU6Ly8nICsgY2FjaGVQYXRoO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lhoXlrrnkuLrnqbrvvIFcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgIH0pO1xcbn1cXG5cXG5mdW5jdGlvbiBidWlsZFByaXZhdGVKc1VpKGQsIG9iaikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLliqDlr4ZcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeS7o+eggeaYjuaWh1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgLy8gdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJvdGhlci5lbmNvZGUudGV4dFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcIm90aGVyLmVuY29kZS50ZXh0XFxcIiwgaW5wdXQpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgLy8gb2JqLmRlY1RleHQgPSBpbnB1dDtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIm9iai5kZWNUZXh0OiBcXFwiICsgb2JqLmRlY1RleHQpXFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnJykgcmV0dXJuICd0b2FzdDovL+i+k+WFpeS4uuepuu+8jOivt+ajgOafpSEnXFxuICAgICAgICAgICAgbGV0IHRvYXN0VGV4dCA9IFxcXCLliqDlr4bku6PnoIHmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIGxldCBkZWNfcmVzdWx0ID0gJ2V2YWxQcml2YXRlSlMoXFxcXFxcXCInICsgZ2V0UHJpdmF0ZUpTKGlucHV0KSArICdcXFwiKSc7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcIm90aGVyLmRlY29kZS50ZXh0XFxcIiwgZGVjX3Jlc3VsdClcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgdG9hc3RUZXh0O1xcbiAgICAgICAgfSwgb2JqKSxcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuS7o+eggeafpeeci1xcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi57uT5p6c6L6T5Ye6XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAvLyB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcIm90aGVyLmRlY29kZS50ZXh0XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRNeVZhcihcXFwib3RoZXIuZGVjb2RlLnRleHRcXFwiLCBpbnB1dCknXFxuICAgICAgICB9LFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAvLyBvYmouZW5jVGV4dCA9IGlucHV0O1xcbiAgICAgICAgICAgIC8vIGxvZyhcXFwib2JqLmVuY1RleHQ6IFxcXCIgKyBvYmouZW5jVGV4dClcXG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGNhY2hlUGF0aCA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL0NyeXB0b1Rvb2wuY2FjaGUnO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoY2FjaGVQYXRoLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnZWRpdEZpbGU6Ly8nICsgY2FjaGVQYXRoO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lhoXlrrnkuLrnqbrvvIFcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgIH0pO1xcbn1cXG5cXG4kLmV4cG9ydHMuYnVpbGRPdGhlclVpID0gYnVpbGRPdGhlclVpXCJ9LHtcImNvbF90eXBlXCI6XCJyaWNoX3RleHRcIixcIm5hbWVcIjpcIuWFtuS7lui9rOaNoumhtemdolwiLFwicGF0aFwiOlwib3RoZXJcIixcInJ1bGVcIjpcImNvbnN0IHsgYnVpbGRPdGhlclVpIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9vdGhlcnVpXFxcIik7XFxuZnVuY3Rpb24gc2V0T3RoZXJQYWdlKGQsIG9iaikge1xcbiAgICBidWlsZE90aGVyVWkoZCwgb2JqKTtcXG59XFxuJC5leHBvcnRzLnNldE90aGVyUGFnZSA9IHNldE90aGVyUGFnZVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5L2b5puwXCIsXCJwYXRoXCI6XCJidWRkaGFcIixcInJ1bGVcIjpcImpzOlxcbmxldCBidWRkaGEgPSB7fTtcXG5idWRkaGEuZW5jb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIC8vIGxvZyhcXFwiW2J1ZGRoYV1vYmouZGVjVGV4dDogXFxcIiArIG9iai5kZWNUZXh0KVxcbiAgICBsZXQgZW5jb2RlID0gcmVxdWVzdChcXFwiaHR0cHM6Ly93d3cua2V5ZmMubmV0L2Jicy90b29scy90dWRvdS5hc3B4XFxcIix7XFxuICAgIGhlYWRlcnM6e1xcbiAgICAgICAgXFxcInJlZmVyZXJcXFwiOlxcXCJodHRwczovL3d3dy5rZXlmYy5uZXQvYmJzL3Rvb2xzL3R1ZG91Y29kZS5hc3B4XFxcIixcXG4gICAgICAgIC8vXFxcInVzZXItYWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTE7IE1pIDEwIFBybykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzg4LjAuNDMyNC4xNTIgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwiLFxcbiAgICAgICAgXFxcImNvbnRlbnQtdHlwZVxcXCI6XFxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcXCIsXFxuICAgICAgICAvL1xcXCJDb29raWVcXFwiOlxcXCJsYXN0b2x1cGRhdGU9OTg5NzkyNTA2O0FTUFNFU1NJT05JRENHUkNDQ1FEPUNHSURPR01CTUNBSktKTkNBR1BQR0ZOUDtkbnQ9cmVmZXJlcj1zaG93dG9waWMuYXNweCUzZnRvcGljaWQlM2QyMzk0NCUyNnBhZ2UlM2QxJTI2Zm9ydW1wYWdlJTNkMVxcXCJcXG4gICAgICAgIH0sXFxuICAgIGJvZHk6XFxcIm9yaWduYWxNc2c9XFxcIitlbmNvZGVVUkkob2JqLmRlY1RleHQpK1xcXCImYWN0aW9uPUVuY29kZVxcXCIsXFxuICAgIG1ldGhvZDpcXFwiUE9TVFxcXCJcXG4gICAgfSlcXG4gICAgLy8gbG9nKFxcXCJbYnVkZGhhXWVuY29kZTogXFxcIiArIGVuY29kZSlcXG4gICAgcmV0dXJuIGVuY29kZS5zcGxpdChcXFwiQ0RBVEFbXFxcIilbMV0uc3BsaXQoXFxcIl1cXFwiKVswXTtcXG59XFxuYnVkZGhhLmRlY29kZSA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICBsZXQgZGVjb2RlID0gcmVxdWVzdChcXFwiaHR0cHM6Ly93d3cua2V5ZmMubmV0L2Jicy90b29scy90dWRvdS5hc3B4XFxcIix7XFxuICAgIGhlYWRlcnM6e1xcbiAgICAgICAgXFxcInJlZmVyZXJcXFwiOlxcXCJodHRwczovL3d3dy5rZXlmYy5uZXQvYmJzL3Rvb2xzL3R1ZG91Y29kZS5hc3B4XFxcIixcXG4gICAgICAgIC8vXFxcInVzZXItYWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTE7IE1pIDEwIFBybykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzg4LjAuNDMyNC4xNTIgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwiLFxcbiAgICAgICAgXFxcImNvbnRlbnQtdHlwZVxcXCI6XFxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcXCIsXFxuICAgICAgICAvL1xcXCJDb29raWVcXFwiOlxcXCJsYXN0b2x1cGRhdGU9OTg5NzkyNTA2O0FTUFNFU1NJT05JRENHUkNDQ1FEPUNHSURPR01CTUNBSktKTkNBR1BQR0ZOUDtkbnQ9cmVmZXJlcj1zaG93dG9waWMuYXNweCUzZnRvcGljaWQlM2QyMzk0NCUyNnBhZ2UlM2QxJTI2Zm9ydW1wYWdlJTNkMVxcXCJcXG4gICAgICAgIH0sXFxuICAgIGJvZHk6XFxcIm9yaWduYWxNc2c9XFxcIitlbmNvZGVVUkkob2JqLmVuY1RleHQpK1xcXCImYWN0aW9uPURlY29kZVxcXCIsXFxuICAgIG1ldGhvZDpcXFwiUE9TVFxcXCJcXG4gICAgfSlcXG4gICAgcmV0dXJuIGRlY29kZS5zcGxpdChcXFwiQ0RBVEFbXFxcIilbMV0uc3BsaXQoXFxcIl1cXFwiKVswXTtcXG59XFxuJC5leHBvcnRzLmJ1ZGRoYSA9IGJ1ZGRoYVwifSx7XCJjb2xfdHlwZVwiOlwicmljaF90ZXh0XCIsXCJuYW1lXCI6XCJVUklcIixcInBhdGhcIjpcInVyaVwiLFwicnVsZVwiOlwianM6XFxubGV0IHVyaSA9IHt9O1xcbnVyaS5lbmNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgbGV0IGVuY29kZSA9IGVuY29kZVVSSShvYmouZGVjVGV4dCk7XFxuICAgIHJldHVybiBlbmNvZGU7XFxufVxcbnVyaS5kZWNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgbGV0IGRlY29kZSA9IGRlY29kZVVSSShvYmouZW5jVGV4dCk7XFxuICAgIHJldHVybiBkZWNvZGU7XFxufVxcbiQuZXhwb3J0cy51cmkgPSB1cmlcIn0se1wiY29sX3R5cGVcIjpcInJpY2hfdGV4dFwiLFwibmFtZVwiOlwiVVJJQ29tcG9uZW50XCIsXCJwYXRoXCI6XCJ1cmljb21wb25lbnRcIixcInJ1bGVcIjpcImpzOlxcbmxldCB1cmljb21wb25lbnQgPSB7fTtcXG51cmljb21wb25lbnQuZW5jb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBlbmNvZGUgPSBlbmNvZGVVUklDb21wb25lbnQob2JqLmRlY1RleHQpO1xcbiAgICByZXR1cm4gZW5jb2RlO1xcbn1cXG51cmljb21wb25lbnQuZGVjb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBkZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQob2JqLmVuY1RleHQpO1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4kLmV4cG9ydHMudXJpY29tcG9uZW50ID0gdXJpY29tcG9uZW50XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlrDkvZvmm7BcIixcInBhdGhcIjpcIm5ld0J1ZGRoYVwiLFwicnVsZVwiOlwianM6XFxubGV0IG5ld0J1ZGRoYSA9IHt9O1xcbm5ld0J1ZGRoYS5lbmNvZGUgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgLy8gbG9nKFxcXCJbYnVkZGhhXW9iai5kZWNUZXh0OiBcXFwiICsgb2JqLmRlY1RleHQpXFxuICAgIGxldCBlbmNvZGUgPSByZXF1ZXN0KCdodHRwOi8vaGkucGNtb2UubmV0L2JlYXIucGhwJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdYLVRva2VuJzogJzA3Qjk3QUE2NDRFOCcsXFxuICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vaGkucGNtb2UubmV0JyxcXG4gICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXFxuICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEwOyBOb3RlOSBCdWlsZC9RS1ExLjE5MTIyMi4wMDI7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzcuMC4zODY1LjEyMCBNUVFCcm93c2VyLzYuMiBUQlMvMDQ1NjE0IE1vYmlsZSBTYWZhcmkvNTM3LjM2JyxcXG4gICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cDovL2hpLnBjbW9lLm5ldC9idWRkaGEuaHRtbCdcXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAnbW9kZT1CdWRkaGEmY29kZT1FbmNvZGUmdHh0PScgKyBvYmouZGVjVGV4dCxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICAvLyBsb2coXFxcIltidWRkaGFdZW5jb2RlOiBcXFwiICsgZW5jb2RlKVxcbiAgICByZXR1cm4gZW5jb2RlO1xcbn1cXG5uZXdCdWRkaGEuZGVjb2RlID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgIGxldCBkZWNvZGUgPSByZXF1ZXN0KCdodHRwOi8vaGkucGNtb2UubmV0L2JlYXIucGhwJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdYLVRva2VuJzogJzA3Qjk3QUE2NDRFOCcsXFxuICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vaGkucGNtb2UubmV0JyxcXG4gICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXFxuICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEwOyBOb3RlOSBCdWlsZC9RS1ExLjE5MTIyMi4wMDI7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzcuMC4zODY1LjEyMCBNUVFCcm93c2VyLzYuMiBUQlMvMDQ1NjE0IE1vYmlsZSBTYWZhcmkvNTM3LjM2JyxcXG4gICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cDovL2hpLnBjbW9lLm5ldC9idWRkaGEuaHRtbCdcXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAnbW9kZT1CdWRkaGEmY29kZT1EZWNvZGUmdHh0PScgKyBvYmouZW5jVGV4dCxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICByZXR1cm4gZGVjb2RlO1xcbn1cXG4kLmV4cG9ydHMubmV3QnVkZGhhID0gbmV3QnVkZGhhXCJ9XSIsImljb24iOiJodHRwczovL2ljb25mb250LnR5cmFudGcuY29tL2FwaS9pbGx1c3RyYXRlLnN2Zz9zdmdfc3RyaW5nPSUzQ3N2ZyUyMGNsYXNzJTNEJTIyaWNvbiUyMiUyMHN0eWxlJTNEJTIyd2lkdGglM0ElMjAxZW0lM0JoZWlnaHQlM0ElMjAxZW0lM0J2ZXJ0aWNhbC1hbGlnbiUzQSUyMG1pZGRsZSUzQmZpbGwlM0ElMjBjdXJyZW50Q29sb3IlM0JvdmVyZmxvdyUzQSUyMGhpZGRlbiUzQiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwMjQlMjAxMDI0JTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNNjk5LjM5MiUyMDQwNC44YzAlMjAyNy40NTYlMjAyMi4wOCUyMDQ5LjcyOCUyMDQ5LjI4JTIwNDkuNzkyYTQ5LjYlMjA0OS42JTIwMCUyMDAlMjAwJTIwNDkuNDcyLTQ5LjcyOGMwLTMzLjE1Mi0xNi41MTItNDkuNzkyLTQ5LjQwOC00OS43OTJzLTQ5LjM0NCUyMDE2LjU3Ni00OS4zNDQlMjA0OS43Mjh6TTE5MiUyMDk2MHYtMTg3LjY0OGwyNzQuMTc2LTI3Ni4xNmEyODcuMTY4JTIwMjg3LjE2OCUyMDAlMjAwJTIwMS01LjUwNC01Mi43MzZDNDYwLjY3MiUyMDMwNC44MzIlMjA1NzIuNjcyJTIwMTkyJTIwNzEwLjMzNiUyMDE5MlM5NjAlMjAzMDQuODMyJTIwOTYwJTIwNDQzLjUyYzAlMjAxMzguNjI0LTExMiUyMDI1MS4zOTItMjQ5LjYlMjAyNTEuMzkyLTI2LjU2JTIwMC01Mi43MzYtNC4yMjQtNzcuODg4LTEyLjU0NGwtOC4xMjgtMi43NTItMzAuNTI4JTIwMi42MjR2OTAuNjg4SDUwNC45NnY5MC42MjRINDE0LjkxMlY5NjBIMTkyeiUyMG01MTguNC03MTMuNDcyYy0xMDcuODQlMjAwLTE5NS41ODQlMjA4OC4zMi0xOTUuNTg0JTIwMTk2LjkyOCUyMDAlMjAxNC43MiUyMDEuNiUyMDI5LjMxMiUyMDQuODY0JTIwNDMuNzEyJTIwNC4wMzIlMjAxNy43MjglMjAwLjc2OCUyMDMxLjU1Mi05LjkyJTIwNDIuMjRsLTI2My42MTYlMjAyNjUuNTM2djExMC41MjhoMTE0LjU2VjgwOC45Nmg5MC4wNDh2LTkwLjYyNGg4OC45NlY2MzkuNTUyYzEwLjM2OC0zLjIlMjAzOC41MjgtMTEuMTM2JTIwNjMuODcyLTExLjEzNiUyMDglMjAwJTIwMTUuMDQlMjAwLjc2OCUyMDIwLjk5MiUyMDIuMzA0JTIwMzYuMjg4JTIwOS40NzIlMjA4My43MTIlMjA5LjYlMjA4NS43NiUyMDkuNiUyMDEwNy43NzYlMjAwJTIwMTk1LjQ1Ni04OC4zMiUyMDE5NS40NTYtMTk2Ljg2NCUyMDAtMTA4LjU0NC04Ny42OC0xOTYuOTI4LTE5NS40NTYtMTk2LjkyOHolMjIlMjBmaWxsJTNEJTIyJTIzNjY2NjY2JTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTkyJTIwNjRoNjR2MzIwSDE5MlY2NHolMjIlMjBmaWxsJTNEJTIyJTIzMDE4MkZGJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNjkuNDQlMjAxNzEuNzEybDMyLTU1LjQyNCUyMDI3Ny4xMiUyMDE2MC0zMiUyMDU1LjQyNC0yNzcuMTItMTYweiUyMiUyMGZpbGwlM0QlMjIlMjMwMTgyRkYlMjIlMjAlMkYlM0UlM0NwYXRoJTIwZCUzRCUyMk0zNDYuNTYlMjAxMTYuMjg4bDMyJTIwNTUuNDI0LTI3Ny4xMiUyMDE2MC0zMi01NS40MjQlMjAyNzcuMTItMTYweiUyMiUyMGZpbGwlM0QlMjIlMjMwMTgyRkYlMjIlMjAlMkYlM0UlM0MlMkZzdmclM0UiLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment