Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@哔哩Ⓡ@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6ImpzOlxubGV0IGh0bWwgPSBnZXRSZXNDb2RlKClcbi8vIGxvZyhodG1sKVxubGV0IHJlZ2V4ID0gL3dpbmRvd1xcLl9fSU5JVElBTF9TVEFURV9fPSguKj8pO1xcKGZ1bmN0aW9uXFwoXFwpXFx7L1xuLy8gbG9nKE1ZX1VSTClcbmlmKE1ZX1VSTC5zdGFydHNXaXRoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXcvZGV0YWlsJykpIHtcbiAgICBsZXQgY29kZSA9IEpTT04ucGFyc2UoaHRtbClcbiAgICB0cnkge1xuICAgICAgICBpZiAoY29kZS5kYXRhLlZpZXdbJ3JlZGlyZWN0X3VybCddKSB7XG4gICAgICAgICAgICBNWV9VUkwgPSBjb2RlLmRhdGEuVmlld1sncmVkaXJlY3RfdXJsJ107XG4gICAgICAgICAgICBodG1sID0gZmV0Y2goTVlfVVJMLCB7fSk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZyAoZS5tZXNzYWdlKVxuICAgIH1cbn1cbi8vIGxvZyhodG1sKVxuaWYgKE1ZX1VSTC5zdGFydHNXaXRoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5LycpICYmIHJlZ2V4LnRlc3QoaHRtbCkpIHtcbiAgICAvLyDnlarliadcbiAgICAvLyBsb2coJ+WMuemFje+8micgKyBSZWdFeHAuJDEpXG4gICAgbGV0IHJlcyA9IEpTT04ucGFyc2UoUmVnRXhwLiQxKVxuICAgIGxldCByZXN1bHQgPSByZXMubmV3ZXN0RXBcbiAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdCA9IHJlcy5tZWRpYUluZm8ubmV3X2VwXG4gICAgfVxuICAgIHNldFJlc3VsdChcIuabtOaWsOiHs++8muesrFwiICsgcmVzdWx0LnRpdGxlICsgXCLor51cIilcbn0gZWxzZSBpZiAoTVlfVVJMLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FyYy9zZWFyY2gnKSkge1xuICAgIC8vIFVQIOS4u1xuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKGh0bWwpXG4gICAgbGV0IHJlc3VsdCA9IHJlcy5kYXRhLmxpc3Qudmxpc3RbMF0udGl0bGVcbiAgICBzZXRSZXN1bHQoXCLmm7TmlrDoh7PvvJpcIiArIHJlc3VsdClcbn0gZWxzZSB7XG4gICAgc2V0UmVzdWx0KFwiXCIpXG59IiwidGl0bGUiOiLlk5Tlk6nik4ciLCJhdXRob3IiOiIxNjA2MTQyJlJ4JlJlYm9ybiIsInVybCI6Imhpa2VyOi8vZW1wdHkjZnlwYWdlIiwidmVyc2lvbiI6MjExMTIwMTg1NCwiY29sX3R5cGUiOiJtb3ZpZV8xIiwiY2xhc3NfbmFtZSI6IiIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxuZXZhbChKU09OLnBhcnNlKGZldGNoKFwiaGlrZXI6Ly9wYWdlL2NvbW1vblwiKSkucnVsZSk7Iiwic2VhcmNoX3VybCI6Imh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvc2VhcmNoL2FsbC92Mj9rZXl3b3JkPSoqJnBhZ2U9ZnlwYWdlJnBhZ2VzaXplPTIwO2dldDt1dGYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCA3LjDvvJvvvJsgd3YgbGl0ZSBiYWlkdWJveGFwcCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc4LjAuMzkwNC45NiBNb2JpbGUgU2FmYXJpLzUzNy4zNiBUNy8xMC4zIFNlYXJjaENyYWZ0LzIuNi4yIChCYWlkde+8m++8myBQMSA3LjApfSIsImdyb3VwIjoi4pGg5o6o6I2QIiwic2VhcmNoRmluZCI6ImpzOlxuZXZhbChKU09OLnBhcnNlKGZldGNoKFwiaGlrZXI6Ly9wYWdlL3NcIikpLnJ1bGUpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzIiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6ImpzOlxuZXZhbChKU09OLnBhcnNlKGZldGNoKFwiaGlrZXI6Ly9wYWdlL3ljbFwiKSkucnVsZSk7XG4vL+mAmui/h+aQnOe0ouafpeeci+iHquW3seeahHVpZO+8jOeEtuWQjuabv+aNouWNs+WPr1xuaWYgKCFmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9iaWxpL3N0YXJpZC50eHQnLHt9KSl7XG5wdXRWYXIoJ3N0YXJpZCcsJzkyODEyMycpO1xufWVsc2V7XG5cbnB1dFZhcignc3RhcmlkJyxmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9iaWxpL3N0YXJpZC50eHQnLHt9KSk7XG59XG5wdXRWYXIoXCJhY2Nlc3Nfa2V5XCIsZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYmlsaS9hY2Nlc3Nfa2V5LnR4dCcpKTtcbi8v6Ieq5bex5Y67YuermeWuouaIt+err+mmlumhteaKk+WMhe+8jOaJvuWIsGFwcC5iaWxpYmlsaS5jb23lvIDlpLTnmoTpk77mjqXvvIznhLblkI7miophY2Nlc3Nfa2V555qE5YC85aGr5YWl5LiK5pa5Jz0n5ZCO6Z2i5Y2z5Y+vIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS7o+eggS3kuIDnuqdcIixcInBhdGhcIjpcImNvbW1vblwiLFwicnVsZVwiOlwidmFyIHJlcyA9IHt9O1xcbnZhciBkID0gW107XFxudmFyIHBhZ2VudW0gPSBNWV9VUkwuc3BsaXQoJyMnKVsxXTtcXG52YXIgUmVmZXJlciA9ICdAUmVmZXJlcj1odHRwOi8vd3d3LmJpbGliaWxpLmNvbSc7XFxuaWYgKCFmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9iaWxpL3NldHRpbmcudHh0JykpIHtcXG4gICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2JpbGkvc2V0dGluZy50eHQnLCAn5byA5ZCvLOWFs+mXrScpO1xcbn1cXG52YXIgc190eXBlID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYmlsaS9zZXR0aW5nLnR4dCcpO1xcbnB1dFZhcigncmVwbHlfdHlwZScsIHNfdHlwZS5zcGxpdCgnLCcpWzBdKTtcXG5wdXRWYXIoJ2xpa2VfdHlwZScsIHNfdHlwZS5zcGxpdCgnLCcpWzFdKTtcXG4vL+minOiJslxcbnZhciBDb2xvcnMgPSBbXFxcIjRcXFwiLCBcXFwiNVxcXCIsIFxcXCIwXFxcIiwgXFxcIjFcXFwiLCBcXFwiQVxcXCIsIFxcXCIzXFxcIiwgXFxcIjhcXFwiLCBcXFwiOVxcXCIsIFxcXCJCXFxcIiwgXFxcIkNcXFwiLCBcXFwiRFxcXCIsIFxcXCJFXFxcIiwgXFxcIjZcXFwiLCBcXFwiN1xcXCIsIFxcXCJGXFxcIl07XFxudmFyIENvbG9yID0gJyMnO1xcbmlmIChnZXRWYXIoJ1lTJykgPT0gJ+maj+acuicpIHtcXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcXG4gICAgICAgIHZhciBudW0gPSBNYXRoLmNlaWwoKE1hdGgucmFuZG9tKCkgKiAxNSkpIC0gMTtcXG4gICAgICAgIHZhciBDb2xvciA9IENvbG9yICsgQ29sb3JzW251bV07XFxuICAgIH1cXG59IGVsc2Uge1xcbiAgICB2YXIgQ29sb3IgPSBcXFwiI0ZBNzI5OFxcXCI7XFxufVxcblxcbmZ1bmN0aW9uIGdldEhlYWQodGl0bGUpIHtcXG4gICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCInICsgQ29sb3IgKyAnXFxcIj4nICsgdGl0bGUgKyAnPC9mcm9udD48L3N0cm9uZz4nO1xcbn1cXG5cXG52YXIgYzEgPSAnYWxsJmJhbmd1bWkmZ3VvY2hhbiZkb3VnYSZtdXNpYyZrbm93bGVkZ2UmdGVjaCZjYXImbGlmZSZmb29kJmtpY2hpa3UmZmFzaGlvbiZjaW5lcGhpbGUmb3JpZ2luJnJvb2tpZSZnYW1lJmVudCZkYW5jZSZtb3ZpZSZ0diZkb2N1bWVudGFyeSZhbmltYWwmZ3VvY2h1YW5nJztcXG5cXG52YXIgdzEgPSAn5YWo6YOoJueVquWJpyblm73liJsm5Yqo55S7Jumfs+S5kCbnn6Xor4Ym56eR5oqAJuaxvei9pibnlJ/mtLsm576O6aOfJumsvOeVnCbml7blsJom5b2x6KeGJuWOn+WImybmlrDkurom5ri45oiPJuWoseS5kCboiJ7ouYgm55S15b2xJueUteinhuWJpybnuqrlvZXniYcm5Yqo54mp5ZyIJuWbveWIm+ebuOWFsyc7XFxuXFxudmFyIGMyID0gJzIyJjIxMiY3MSYxODImMTM4JjI4JjMzJjE4NSc7XFxuXFxudmFyIHcyID0gJ+msvOeVnCbnvo7po58m57u86Im6JuW9seinhibnlJ/mtLsm6Z+z5LmQJueVquWJpybnlLXop4bliacnO1xcblxcbnZhciB3b3JkMSA9IHcxLnNwbGl0KCcmJyk7XFxudmFyIGNsYXNzMSA9IGMxLnNwbGl0KCcmJyk7XFxudmFyIGxhYjEgPSBnZXRWYXIoJ2xhYjEnLCAn5YWo6YOoJyk7XFxudmFyIGtleTEgPSBnZXRWYXIoJ2tleTEnLCAnYWxsJyk7XFxuXFxudmFyIHdvcmQyID0gdzIuc3BsaXQoJyYnKTtcXG52YXIgY2xhc3MyID0gYzIuc3BsaXQoJyYnKTtcXG52YXIgbGFiMiA9IGdldFZhcignbGFiMicsICfprLznlZwnKTtcXG52YXIga2V5MiA9IGdldFZhcigna2V5MicsICcyMicpO1xcblxcbi8v5LiJ5ZCI5LiAXFxudmFyIHJ4ID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvYmlsaS/lpJrlkIjkuIAudHh0Jywge30pO1xcbnZhciB3ciA9IGBAbGF6eVJ1bGU9LmpzOndyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL+WkmuWQiOS4gC50eHRcXFwiLGlucHV0KTtyZWZyZXNoUGFnZShmYWxzZSk7XFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcImA7XFxudmFyIHNfdGFiID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvYmlsaS/mlLbol48udHh0Jywge30pO1xcbnZhciBzciA9IGBAbGF6eVJ1bGU9LmpzOndyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL+aUtuiXjy50eHRcXFwiLGlucHV0KTtyZWZyZXNoUGFnZShmYWxzZSk7XFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcImA7XFxuXFxuaWYgKE1ZX1VSTC5zcGxpdCgnIycpWzFdID09ICcxJykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHJ4ID09ICdVUOS4uycgPyBnZXRIZWFkKHJ4KSA6ICdVUOS4uycsXFxuICAgICAgICB1cmw6ICdVUOS4uycgKyB3cixcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF80J1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiByeCA9PSAn5o6S6KGM5qacJyA/IGdldEhlYWQocngpIDogJ+aOkuihjOamnCcsXFxuICAgICAgICB1cmw6ICfmjpLooYzmppwnICsgd3IsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfNCdcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcnggPT0gJ+aWsOeVqicgPyBnZXRIZWFkKHJ4KSA6ICfmlrDnlaonLFxcbiAgICAgICAgdXJsOiAn5paw55WqJyArIHdyLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzQnXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHJ4ID09ICfmm7TlpJonID8gZ2V0SGVhZChyeCkgOiAn5pu05aSaJyxcXG4gICAgICAgIHVybDogJ+abtOWkmicgKyB3cixcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF80J1xcbiAgICB9KTtcXG5cXG4gICAgaWYgKHJ4ID09ICfmlLbol48nKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBzX3RhYiA9PSAn6KeG6aKRJyA/IGdldEhlYWQoc190YWIpIDogJ+inhumikScsXFxuICAgICAgICAgICAgdXJsOiAn6KeG6aKRJyArIHNyLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBzX3RhYiA9PSAn6L+955WqJyA/IGdldEhlYWQoc190YWIpIDogJ+i/veeVqicsXFxuICAgICAgICAgICAgdXJsOiAn6L+955WqJyArIHNyLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBzX3RhYiA9PSAn6L+95YmnJyA/IGdldEhlYWQoc190YWIpIDogJ+i/veWJpycsXFxuICAgICAgICAgICAgdXJsOiAn6L+95YmnJyArIHNyLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAoc190YWIgPT0gJ+inhumikScpIHtcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIpKS5ydWxlKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHNfdGFiID09ICfov73nlaonKSB7XFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvZmFuanVcXFwiKSkucnVsZSlcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzX3RhYiA9PSAn6L+95YmnJykge1xcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2RzalxcXCIpKS5ydWxlKVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxufVxcblxcbmlmIChyeCA9PSAn5o6o6I2QJykge1xcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9mZWVkXFxcIikpLnJ1bGUpXFxufVxcblxcbmlmIChyeCA9PSAn5o6S6KGM5qacJykge1xcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9waGJcXFwiKSkucnVsZSlcXG59XFxuXFxuaWYgKHJ4ID09ICdVUOS4uycpIHtcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvdXBcXFwiKSkucnVsZSlcXG59XFxuXFxuaWYgKHJ4ID09ICfml7blhYnmnLonKSB7XFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL3NnalxcXCIpKS5ydWxlKVxcbn1cXG5cXG5pZiAocnggPT0gJ+aWsOeVqicpIHtcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvbmV3YmdtXFxcIikpLnJ1bGUpXFxufVxcblxcbmlmIChyeCA9PSAn57Si5byVJykge1xcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9zeVxcXCIpKS5ydWxlKVxcbn1cXG5cXG5pZiAocnggPT0gJ+abtOWkmicpIHtcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvbW9yZVxcXCIpKS5ydWxlKVxcbn1cXG5cXG5cXG4vL+S4ieWQiOS4gFxcblxcbnJlcy5kYXRhID0gZDtcXG5zZXRSZXN1bHQocmVzKVwifSx7XCJjb2xfdHlwZVwiOlwicGljXzFfY2FyZFwiLFwibmFtZVwiOlwi5Luj56CBLeaOkuihjOamnFwiLFwicGF0aFwiOlwicGhiXCIsXCJydWxlXCI6XCIvL+WIhuexu1xcbiBpZiAoTVlfVVJMLnNwbGl0KCcjJylbMV09PScxJyl7XFxuZm9yICh2YXIgaSBpbiB3b3JkMSl7XFxuICAgIHZhciBhID0gd29yZDFbaV07XFxuICAgIHZhciBiID0gY2xhc3MxW2ldO1xcbiAgICB2YXIgYyA9IGEgKyAnJicgKyBiO1xcbiAgICBkLnB1c2goe1xcbiAgICB0aXRsZTogYT09bGFiMT8gZ2V0SGVhZChhKTphLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGMpPT57XFxuICAgICAgICBwdXRWYXIoXFxcImxhYjFcXFwiLGMuc3BsaXQoJyYnKVswXSk7XFxuICAgICAgICBwdXRWYXIoXFxcImtleTFcXFwiLGMuc3BsaXQoJyYnKVsxXSk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIGMpLFxcbiAgICBjb2xfdHlwZTonZmxleF9idXR0b24nXFxuICAgIH0pO1xcbn1cXG59XFxuLy/liIbnsbtcXG5cXG5kLnB1c2goe1xcbiAgICBkZXNjOicyNTgmJmZsb2F0JyxcXG4gICBcXHRcXHRjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcbn0pO1xcbnZhciB1cmwgPSAnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL3YvcG9wdWxhci9yYW5rL2FsbCc7XFxuXFxudmFyIE1ZX1VSTCA9IHVybC5yZXBsYWNlKCdhbGwnLGdldFZhcigna2V5MScpKTtcXG5cXG52YXIgeW09cmVxdWVzdChNWV9VUkwse30pLnJlcGxhY2UoL1xcXFxcXFxcdTAwMkYvZywnLycpO1xcbmlmKHltLmluY2x1ZGVzKCdyYW5rLXRpcHMnKSl7XFxuXFxuLyrmj5DnpLrkv6Hmga9cXG4gIGQucHVzaCh7XFxuICAgIHRpdGxlOifigJzigJwnK3BhcnNlRG9tRm9ySHRtbCh5bSwnLnJhbmstdGlwcyYmVGV4dCcpKyfigJ3igJ0nLFxcbiAgICBjb2xfdHlwZTondGV4dF8xJ1xcbiAgfSk7XFxu5o+Q56S65L+h5oGvKi9cXG5cXG4gIHZhciBwaT1KU09OLnBhcnNlKHltLnNwbGl0KCdcXFwicmFua0xpc3RcXFwiOicpWzFdLnNwbGl0KCcsXFxcInJhbmtOb3RlXFxcIicpWzBdKTtcXG4gIGZvcih2YXIgaT0wO3BpIT1udWxsJiZpPHBpLmxlbmd0aDtpKyspe1xcbiAgICB2YXIgbnVtID0gaSsxO1xcbiAgICB2YXIgcT1KU09OLnN0cmluZ2lmeShwaVtpXSk7XFxuICAgIGlmICghcGlbaV0udXJsKXtcXG4gICAgICAgdmFyIHJ1cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3L2RldGFpbO+8n++8n2FpZD3vvIbvvIZidmlkPScgKyBwaVtpXS5idmlkO1xcbiAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgIHZhciBydXJsID0gcGlbaV0udXJsO1xcbiAgICB9XFxuXFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOidOby4nK251bSsnICAgICAnK3BpW2ldLnRpdGxlLFxcbiAgICAgICAgcGljX3VybDpwaVtpXS5waWMrUmVmZXJlcixcXG4gICAgICAgIGRlc2M6KCFxLmluY2x1ZGVzKCduYW1lJyk/cGlbaV0ubmV3X2VwLmluZGV4X3Nob3c6KCd1cDogJytwaVtpXS5vd25lci5uYW1lKSksXFxuICAgICAgICB1cmw6J2hpa2VyOi8vcGFnZS9kZXRhaWw/dXJsPScrcnVybCsnI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgICBjb2xfdHlwZToncGljXzFfY2FyZCdcXG4gICAgICB9KTtcXG4vKlxcbmQucHVzaCh7XFxuICAgICAgICB0aXRsZTonTm8uJytudW0rJ1xcXFxuXFxcXG7igJjigJg8c21hbGw+JytwaVtpXS50aXRsZSsnXFxcXG4nKyghcS5pbmNsdWRlcygnbmFtZScpP3BpW2ldLm5ld19lcC5pbmRleF9zaG93OigndXA6ICcrcGlbaV0ub3duZXIubmFtZSkpKyc8L3NtYWxsPicsXFxuICAgICAgICBwaWNfdXJsOnBpW2ldLnBpYytSZWZlcmVyLFxcbiAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICB1cmw6J2hpa2VyOi8vcGFnZS9kZXRhaWw/dXJsPScrcnVybCsnI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgICBjb2xfdHlwZTonY2FyZF9waWNfMSdcXG4gICAgICB9KTtcXG4qL1xcbiAgICAgfVxcbiAgIH1lbHNle1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTon4oCc4oCc6IqC5Yi25LiA54K577yM5LyR5oGv5ZWm77yB4oCd4oCdJyxcXG4gICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgIH0pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS7o+eggS11cPCfkLdcIixcInBhdGhcIjpcInVwXCIsXCJydWxlXCI6XCJjb25zdCBoZWFkQ29sb3I9XFxcIiMzNThjY2RcXFwiO1xcbnZhciB1aWQgPSBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL3VwX2NhY2hlLnR4dFxcXCIse30pO1xcbnZhciBVUF9VUkwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYXJjL3NlYXJjaD9taWQ9dWlkJnBzPTMwJnRpZD0wJmtleXdvcmQ9Jmpzb25wPWpzb25wJnBuPScrcGFnZW51bSsnJm9yZGVyPXB1YmRhdGUnO1xcbnZhciB1cF91cmwgPSBVUF9VUkwucmVwbGFjZShcXFwidWlkXFxcIix1aWQpO1xcbnZhciB4eD1nZXRWYXIoJ2xiMicpLnNwbGl0KCdcXFxcbicpO1xcbi8v5pu05paw5aS05YOPXFxuZm9yICh2YXIgayBpbiB4eCl7XFxuICBpZiAoIXh4W2tdLnNwbGl0KCcjIycpWzFdKXtcXG4gICAgICB0cnl7XFxuICAgICAgIHZhciBwaWMgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS9hY2MvaW5mbz9taWQ9Jyt4eFtrXS5zcGxpdCgnJiYnKVsxXSsnJmpzb25wPWpzb25wJyx7fSkpLmRhdGEuZmFjZTtcXG4gICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICB2YXIgcGljID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkudmMuYmlsaWJpbGkuY29tL2R5bmFtaWNfc3ZyL3YxL2R5bmFtaWNfc3ZyL3NwYWNlX2hpc3Rvcnk/aG9zdF91aWQ9Jyt4eFtrXS5zcGxpdCgnJiYnKVsxXSsnJm5lZWRfdG9wPTEnLHt9KSkuZGF0YS5jYXJkc1swXS5kZXNjLnVzZXJfcHJvZmlsZS5pbmZvLmZhY2U7XFxuICAgICAgIH1cXG4gICAgICB2YXIgZmFjZSA9IHh4W2tdKycjIycrcGljO1xcbiAgICAgIHZhciBmYWNlID0gZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvYmlsaS91cC50eHRcXFwiLHt9KS5yZXBsYWNlKHh4W2tdLGZhY2UpO1xcbiAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL3VwLnR4dFxcXCIsZmFjZSk7XFxuICB9XFxufVxcblxcblxcblxcbmlmIChNWV9VUkwuc3BsaXQoJyMnKVsxXT09JzEnKXtcXG5cXG5kLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTonPHN0cm9uZz4nKyfigJjigJhVUOKAmeKAmScrJzwvc3Ryb25nPicrIChnZXRWYXIoJ1VQJywn5oqY5Y+gJyk9PSflsZXlvIAnPyfwn5mJJzon8J+ZiCcpLFxcbiAgICAgICAgICB1cmw6ICBcXFwiaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0VmFyKCdVUCcsIGdldFZhcignVVAnKT09J+WxleW8gCc/J+aKmOWPoCc6J+WxleW8gCcpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5beyJytnZXRWYXIoJ1VQJywn5bGV5byAJyk7XFxcIixcXG4gICAgICAgICAgY29sX3R5cGU6J3RleHRfNCdcXG4gICAgICAgICAgfSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6KGdldFZhcignVVAnKT09J+e9rumhtic/JzxzdHJvbmc+Jysn4oCc4oCc572u6aG2JysnPC9zdHJvbmc+JzonPHN0cm9uZz4nKyfigJzigJzlj5blhbPigJ3igJ0nKyc8L3N0cm9uZz4nKSxcXG4gICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0VmFyKCdVUCcsIGdldFZhcignVVAnLCflsZXlvIAnKT09J+WPluWFsyc/J+e9rumhtic6J+WPluWFsycpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8vJytnZXRWYXIoJ1VQJywn5bGV5byAJykrJ2luZ34nXFxcIixcXG4gICAgICAgICAgY29sX3R5cGU6J3RleHRfNCdcXG4gICAgICAgICAgfSk7XFxuLy/oh6rlt7HnmoTlhbPms6hcXG52YXIgc3Rhcmpzb24gPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS9hY2MvaW5mbz9taWQ9JytnZXRWYXIoJ3N0YXJpZCcpKycmanNvbnA9anNvbnAnLHt9KSk7XFxuZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOnN0YXJqc29uLmRhdGEubmFtZSxcXG4gICAgICAgIHBpY191cmw6c3Rhcmpzb24uZGF0YS5mYWNlK1JlZmVyZXIsXFxuICAgICAgICB1cmw6XFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcignVVAnLCBnZXRWYXIoJ1VQJyk9PSflhbPms6gnPyfmipjlj6AnOiflhbPms6gnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovLycrZ2V0VmFyKCdVUCcsJ+S4k+azqCcpXFxcIixcXG4gICAgICAgIGNvbF90eXBlOidpY29uXzJfcm91bmQnXFxufSk7XFxuLy/oh6rlt7HnmoTlhbPms6hcXG5cXG5pZiAgKGdldFZhcignVVAnKT09J+WFs+azqCcpe1xcbiAgdmFyIHN1cmwgPSAnaHR0cHM6Ly9zcGFjZS5iaWxpYmlsaS5jb20vaDUvZm9sbG93P3R5cGU9Zm9sbG93Jm1pZD0nK2dldFZhcignc3RhcmlkJyk7XFxudmFyIGlkID0gc3VybC5zcGxpdCgnbWlkPScpWzFdO1xcbnZhciBjb2RlID0gZmV0Y2goc3VybCx7fSk7XFxudmFyIHN0YXJsaXN0ID0gSlNPTi5wYXJzZSgne1xcXCJteScrY29kZS5zcGxpdCgne1xcXCJteScpWzFdLnNwbGl0KCd9fTsnKVswXSsnfX0nKTtcXG5cXG52YXIgc3RhcmxzID0gc3Rhcmxpc3RbJ2xpc3QnXVsnZ2V0Rm9sbG93TGlzdC1wYWdlLW1pZC0nK2lkXVsncmVzdWx0J107XFxuZm9yICggeCBpbiBzdGFybHMpe1xcbiAgdmFyIHl1cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYXJjL3NlYXJjaO+8n++8n21pZD0nK3N0YXJsc1t4XS5taWQrJ++8hu+8hnBzPTMw77yG77yGdGlkPTDvvIbvvIZrZXl3b3JkPe+8hu+8hmpzb25wPWpzb25w77yG77yGcG49ZnlwYWdl77yG77yGb3JkZXI9cHViZGF0ZSc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgIHRpdGxlOnN0YXJsc1t4XS51bmFtZSxcXG4gICAgICAgaW1nOnN0YXJsc1t4XS5mYWNlK1JlZmVyZXIsXFxuICAgICAgIHVybDonaGlrZXI6Ly9wYWdlL2d6Mj91cmw9Jyt5dXJsLFxcbiAgICAgICBjb2xfdHlwZTonaWNvbl9yb3VuZF80J1xcbiAgICAgICB9KTtcXG59XFxufVxcbi8v5YWz5rOo5YiX6KGoXFxuXFxuIGlmICAoZ2V0VmFyKCdVUCcpPT0n5bGV5byAJyl7XFxuICBmb3IgKHZhciBrIGluIHh4KXtcXG4gICAgdmFyIHN0PXVpZD09eHhba10uc3BsaXQoJyYmJylbMV0uc3BsaXQoJyMjJylbMF0/J+Kckyc6Jyc7XFxuICAgIHZhciBwaWMgPSB4eFtrXS5zcGxpdCgnIyMnKVsxXTtcXG4vKuWktOWDj+iOt+WPllxcbiAgICB0cnl7XFxuICAgICB2YXIgcGljID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYWNjL2luZm8/bWlkPScreHhba10uc3BsaXQoJyYmJylbMV0rJyZqc29ucD1qc29ucCcse30pKS5kYXRhLmZhY2U7XFxuICAgIH1jYXRjaChlKXtcXG4gICAgICAgdmFyIHBpYyA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLnZjLmJpbGliaWxpLmNvbS9keW5hbWljX3N2ci92MS9keW5hbWljX3N2ci9zcGFjZV9oaXN0b3J5P2hvc3RfdWlkPScreHhba10uc3BsaXQoJyYmJylbMV0rJyZuZWVkX3RvcD0xJyx7fSkpLmRhdGEuY2FyZHNbMF0uZGVzYy51c2VyX3Byb2ZpbGUuaW5mby5mYWNlO1xcbiAgICB9XFxuKi9cXG4gICBpZiAoIXBpYyl7XFxuICAgICB2YXIgcGljID0gJ2h0dHBzOi8vZ2l0ZWUuY29tL0NoZXJpc2hSeC9pbWFnZXdhcmVob3VzZS9yYXcvbWFzdGVyL2ltYWdlLzEzMDk2NzI1ZmU1NmNlOWNmNjQzYTBlNGNkMGMxNTljLmdpZic7XFxuICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgdGl0bGU6c3QreHhba10uc3BsaXQoJyYmJylbMF0sXFxuICAgICB1cmw6XFxuJ2hpa2VyOi8vZW1wdHkjJyt4eFtrXS5zcGxpdCgnJiYnKVsxXStgQGxhenlSdWxlPS5qczppbnB1dD1pbnB1dC5zcGxpdCgnIycpWzFdO3B1dFZhcjIoJ3VpZCcsaW5wdXQpO3dyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL3VwX2NhY2hlLnR4dFxcXCIsaW5wdXQpO3B1dFZhcignVVAnLCfmipjlj6AnKTtyZWZyZXNoUGFnZShmYWxzZSk7XFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcIjtgLFxcbiAgICAgcGljX3VybDpwaWMrUmVmZXJlcixcXG4gICAgIGNvbF90eXBlOidpY29uX3JvdW5kXzQnXFxuICAgIH0pO1xcbiAgfVxcbiB9XFxuXFxuLy/lj5blhbPnm7jlhbNcXG5cXG4gaWYgIChnZXRWYXIoJ1VQJyk9PSflj5blhbMnKXtcXG4gIGZvcih2YXIgayBpbiB4eCl7XFxuICAgIHZhciBzdD11aWQ9PXh4W2tdLnNwbGl0KCcmJicpWzFdPyfinJMnOicnO1xcbiAgICB2YXIgcGljID0geHhba10uc3BsaXQoJyMjJylbMV07XFxuLyrlpLTlg4/ojrflj5ZcXG4gICAgdHJ5e1xcbiAgICAgdmFyIHBpYyA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FjYy9pbmZvP21pZD0nK3h4W2tdLnNwbGl0KCcmJicpWzFdKycmanNvbnA9anNvbnAnLHt9KSkuZGF0YS5mYWNlO1xcbiAgICB9Y2F0Y2goZSl7XFxuICAgICAgIHZhciBwaWMgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS52Yy5iaWxpYmlsaS5jb20vZHluYW1pY19zdnIvdjEvZHluYW1pY19zdnIvc3BhY2VfaGlzdG9yeT9ob3N0X3VpZD0nK3h4W2tdLnNwbGl0KCcmJicpWzFdKycmbmVlZF90b3A9MScse30pKS5kYXRhLmNhcmRzWzBdLmRlc2MudXNlcl9wcm9maWxlLmluZm8uZmFjZTtcXG4gICAgfVxcbiovXFxuICAgaWYgKCFwaWMpe1xcbiAgICAgdmFyIHBpYyA9ICdodHRwczovL2dpdGVlLmNvbS9DaGVyaXNoUngvaW1hZ2V3YXJlaG91c2UvcmF3L21hc3Rlci9pbWFnZS8xMzA5NjcyNWZlNTZjZTljZjY0M2EwZTRjZDBjMTU5Yy5naWYnO1xcbiAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgIHRpdGxlOifinYwnK3N0K3h4W2tdLnNwbGl0KCcmJicpWzBdLFxcbiAgICAgdXJsOnh4W2tdKyBgQGxhenlSdWxlPS5qczp2YXIgc2M9aW5wdXQrJ1xcXFxcXFxcbic7dmFyIHhyPWdldFZhcignbGIyJykrJ1xcXFxcXFxcbic7dmFyIHh6PXhyLnJlcGxhY2Uoc2MsJycpO3dyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy91cC5qc1xcXCIseHopO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/lj5blhbPmiJDlip/vvIHpk4HlrZDlho3op4Hwn6aGJ2AsXFxuICAgICBwaWNfdXJsOnBpYytSZWZlcmVyLFxcbiAgICAgY29sX3R5cGU6J2ljb25fcm91bmRfNCdcXG4gICAgfSk7XFxuICB9XFxuIH1cXG5cXG4vL+e9rumhtuebuOWFs1xcblxcbiBpZiAgKGdldFZhcignVVAnKT09J+e9rumhticpe1xcbiAgZm9yICh2YXIgayBpbiB4eCl7XFxuICAgIHZhciBzdD11aWQ9PXh4W2tdLnNwbGl0KCcmJicpWzFdPyfinJMnOicnO1xcbiAgICB2YXIgcGljID0geHhba10uc3BsaXQoJyMjJylbMV07XFxuLyrlpLTlg4/ojrflj5ZcXG4gICAgdHJ5e1xcbiAgICAgdmFyIHBpYyA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FjYy9pbmZvP21pZD0nK3h4W2tdLnNwbGl0KCcmJicpWzFdKycmanNvbnA9anNvbnAnLHt9KSkuZGF0YS5mYWNlO1xcbiAgICB9Y2F0Y2goZSl7XFxuICAgICAgIHZhciBwaWMgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS52Yy5iaWxpYmlsaS5jb20vZHluYW1pY19zdnIvdjEvZHluYW1pY19zdnIvc3BhY2VfaGlzdG9yeT9ob3N0X3VpZD0nK3h4W2tdLnNwbGl0KCcmJicpWzFdKycmbmVlZF90b3A9MScse30pKS5kYXRhLmNhcmRzWzBdLmRlc2MudXNlcl9wcm9maWxlLmluZm8uZmFjZTtcXG4gICAgfVxcbiovXFxuICAgaWYgKCFwaWMpe1xcbiAgICAgdmFyIHBpYyA9ICdodHRwczovL2dpdGVlLmNvbS9DaGVyaXNoUngvaW1hZ2V3YXJlaG91c2UvcmF3L21hc3Rlci9pbWFnZS8xMzA5NjcyNWZlNTZjZTljZjY0M2EwZTRjZDBjMTU5Yy5naWYnO1xcbiAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgIHRpdGxlOifwn5SdJytzdCt4eFtrXS5zcGxpdCgnJiYnKVswXSxcXG4gICAgIHVybDp4eFtrXSsgYEBsYXp5UnVsZT0uanM6dmFyIHNjPWlucHV0KydcXFxcXFxcXG4nO3ZhciB4cj1nZXRWYXIoJ2xiMicpKydcXFxcXFxcXG4nO3ZhciB4ej14ci5yZXBsYWNlKHNjLCcnKTt3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvanMvdXAuanNcXFwiLHNjK3h6KTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v572u6aG25oiQ5Yqf8J+UnSdgLFxcbiAgICAgcGljX3VybDpwaWMrUmVmZXJlcixcXG4gICAgIGNvbF90eXBlOidpY29uX3JvdW5kXzQnXFxuICAgIH0pO1xcbiAgfVxcbiB9XFxuXFxuXFxufVxcbi8vZC5wdXNoKHt0aXRsZTp4eH0pO1xcblxcbnZhciBqc29uID0ge307XFxuZXZhbCgnanNvbj0nICsgZmV0Y2godXBfdXJsLHt9KSk7XFxuZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLmRhdGEubGlzdC52bGlzdC5sZW5ndGg7IGkrKylcXG57XFxuIHZhciByID0ge307XFxuIHZhciBqID0ganNvbi5kYXRhLmxpc3Qudmxpc3RbaV07XFxuIHZhciB0ID0gTnVtYmVyKGouY3JlYXRlZCkqMTAwMDtcXG4gXFxuIC8v5pe26Ze05oiz6L2s5o2i5pa55rOVXFxuLypcXG5mdW5jdGlvbiBnZXRMb2NhbFRpbWUoblMpIHsgXFxuICAgICB2YXIgc3NzID0gbmV3IERhdGUocGFyc2VJbnQoblMpKS50b0xvY2FsZVN0cmluZygpLnN1YnN0cigwLDE3KTtcXG4gICAgIHZhciBZTUQgPSBzc3Muc3BsaXQoJ+aXpScpWzBdLnJlcGxhY2UoJ+W5tCcsJy0nKS5yZXBsYWNlKCfmnIgnLCctJyk7XFxuICAgICByZXR1cm4gKFlNRClcXG59XFxuKi9cXG5mdW5jdGlvbiBnZXRMb2NhbFRpbWUoblMpIHsgXFxudmFyIGRhdGUgPSBuZXcgRGF0ZShuUyk7XFxudmFyIFlZID0gZGF0ZS5nZXRGdWxsWWVhcigpKyctJzsgXFxudmFyIE1NID0gKGRhdGUuZ2V0TW9udGgoKSArIDEgPCAxMCA/ICcwJyArIChkYXRlLmdldE1vbnRoKCkgKyAxKSA6IGRhdGUuZ2V0TW9udGgoKSArIDEpKyctJzsgXFxudmFyIEREID0gKGRhdGUuZ2V0RGF0ZSgpIDwgMTAgPyAnMCcgKyAoZGF0ZS5nZXREYXRlKCkpIDogZGF0ZS5nZXREYXRlKCkpOyBcXG52YXIgdGltZSA9IFlZICsgTU0gKyBERDtcXG5yZXR1cm4gdGltZVxcbn1cXG4vL+aXtumXtOaIs+i9rOaNolxcbnZhciB0aW1lID0gZ2V0TG9jYWxUaW1lKHQpO1xcblxcbmlmIChqLnBsYXk+MTAwMDApXFxuICAgIHZhciBwbGF5ID0gKGoucGxheS8xMDAwMCkudG9GaXhlZCgxKSsn5LiHJztcXG5lbHNlXFxuICAgIHZhciBwbGF5ID0gai5wbGF5O1xcblxcbnZhciBwaWNzID0gKGoucGljLmluZGV4T2YoJzonKSE9LTEpP2oucGljOidodHRwczonICsgai5waWM7XFxuXFxuIHIucGljX3VybCA9IHBpY3MrUmVmZXJlcjtcXG5yLnVybD0naGlrZXI6Ly9wYWdlL2RldGFpbD91cmw9aHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3L2RldGFpbO+8n++8n2FpZD3vvIbvvIZidmlkPScgKyBqLmJ2aWQgKycjaW1tZXJzaXZlVGhlbWUjJztcXG4gci50aXRsZSA9IGoudGl0bGU7XFxuIHIuY29sX3R5cGUgPSAnbW92aWVfMV92ZXJ0aWNhbF9waWMnO1xcbiByLmRlc2MgPSAn5pe26ZW/77yaJyArIGoubGVuZ3RoICsgJyAg5pKt5pS+6YeP77yaJyArIHBsYXkgKyAnICDml6XmnJ/vvJonICsgdGltZTtcXG4gaWYgKGoubGVuZ3RoIT1cXFwiMDA6MDBcXFwiKXtkLnB1c2gocil9O1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS7o+eggS3ml7blhYnwn5CUXCIsXCJwYXRoXCI6XCJzZ2pcIixcInJ1bGVcIjpcIi8v5YiG57G7XFxuaWYgKE1ZX1VSTC5zcGxpdCgnIycpWzFdPT0nMScpe1xcbmZvciAodmFyIGkgaW4gd29yZDIpe1xcbiAgICB2YXIgYSA9IHdvcmQyW2ldO1xcbiAgICB2YXIgYiA9IGNsYXNzMltpXTtcXG4gICAgdmFyIGMgPSBhICsgJyYnICsgYjtcXG4gICAgZC5wdXNoKHtcXG4gICAgdGl0bGU6IGE9PWxhYjI/IGdldEhlYWQoYSk6YSxcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChjKT0+e1xcbiAgICAgICAgcHV0VmFyKFxcXCJsYWIyXFxcIixjLnNwbGl0KCcmJylbMF0pO1xcbiAgICAgICAgcHV0VmFyKFxcXCJrZXkyXFxcIixjLnNwbGl0KCcmJylbMV0pO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9LCBjKSxcXG4gICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJ1xcbiAgICB9KTtcXG59XFxufVxcbi8v5YiG57G7XFxuXFxudmFyIG0gPSBOdW1iZXIoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvYmlsaS9tb3V0aHMudHh0XFxcIix7fSkpO1xcbnZhciB0ID0gbTwwPzA6bTtcXG52YXIgbnVtMSA9IE51bWJlcih0KS0xMjtcXG52YXIgbnVtMiA9IE51bWJlcih0KSsxMjtcXG52YXIgbnVtMyA9IE51bWJlcih0KS0xO1xcbnZhciBudW00ID0gTnVtYmVyKHQpKzE7XFxuLy92YXIgdGltZXN0YW1wID0gRGF0ZS5wYXJzZShuZXcgRGF0ZSgpKTtcXG52YXIgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxudmFyIHN0YW1wMSA9IHRpbWVzdGFtcCAtIHQqMzAqMjQqNjAqNjAqMTAwMDtcXG52YXIgc3RhbXAyID0gdGltZXN0YW1wIC0gKHQrMSkqMzAqMjQqNjAqNjAqMTAwMDtcXG4vKlxcbmZ1bmN0aW9uIGdldExvY2FsVGltZShuUykgeyBcXG4gICAgIHZhciBzc3MgPSBuZXcgRGF0ZShwYXJzZUludChuUykpLnRvTG9jYWxlU3RyaW5nKCkuc3Vic3RyKDAsMTcpO1xcbiAgICAgdmFyIG1tID0gc3NzLnNwbGl0KCflubQnKVsxXS5zcGxpdCgn5pyIJylbMF07XFxuICAgICB2YXIgZGQgPSBzc3Muc3BsaXQoJ+aciCcpWzFdLnNwbGl0KCfml6UnKVswXTtcXG4gICAgIHZhciBZWSA9IHNzcy5zcGxpdCgn5bm0JylbMF07XFxuICAgICB2YXIgTU0gPSAobW08IDEwID8gJzAnICsgbW06bW0pO1xcbiAgICAgdmFyIEREID0gKGRkPCAxMCA/ICcwJyArIGRkOmRkKTtcXG4gICAgIHJldHVybiAoWVkrTU0rREQpXFxufVxcbiovXFxuZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKG5TKSB7IFxcbnZhciBkYXRlID0gbmV3IERhdGUoblMpO1xcbnZhciBZWSA9IFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpOyBcXG52YXIgTU0gPSBTdHJpbmcoKGRhdGUuZ2V0TW9udGgoKSArIDEgPCAxMCA/ICcwJyArIChkYXRlLmdldE1vbnRoKCkgKyAxKSA6IGRhdGUuZ2V0TW9udGgoKSArIDEpKTsgXFxudmFyIEREID0gU3RyaW5nKChkYXRlLmdldERhdGUoKSA8IDEwID8gJzAnICsgKGRhdGUuZ2V0RGF0ZSgpKSA6IGRhdGUuZ2V0RGF0ZSgpKSk7IFxcbnZhciB0aW1lID0gWVkgKyBNTSArIEREO1xcbnJldHVybiB0aW1lXFxufVxcbi8v5pe26Ze05oiz6L2s5o2iXFxudmFyIHRpbWUxID0gZ2V0TG9jYWxUaW1lKHN0YW1wMSk7XFxudmFyIHRpbWUyID0gZ2V0TG9jYWxUaW1lKHN0YW1wMik7XFxudmFyIFNHSl9VUkwgPSAnaHR0cHM6Ly9zLnNlYXJjaC5iaWxpYmlsaS5jb20vY2F0ZS9zZWFyY2g/bWFpbl92ZXI9djMmc2VhcmNoX3R5cGU9dmlkZW8mdmlld190eXBlPWhvdF9yYW5rJm9yZGVyPWNsaWNrJmNvcHlfcmlnaHQ9LTEmY2F0ZV9pZD0yMiZwYWdlPScrcGFnZW51bSsnJnBhZ2VzaXplPTEwJnRpbWVfZnJvbT10aW1lMiZ0aW1lX3RvPXRpbWUxJztcXG52YXIgVVJMID0gU0dKX1VSTC5yZXBsYWNlKCd0aW1lMScsdGltZTEpLnJlcGxhY2UoJ3RpbWUyJyx0aW1lMikucmVwbGFjZSgnMjInLGdldFZhcigna2V5MicpIT0nJz9nZXRWYXIoJ2tleTInKTonMjInKTtcXG52YXIganNvbiA9IEpTT04ucGFyc2UocmVxdWVzdChVUkwse30pKTtcXG5cXG5pZiAoTVlfVVJMLnNwbGl0KCcjJylbMV09PScxJyl7XFxuZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6Jysx5bm0JyxcXG4gICAgICAgICAgdXJsOlxcbm51bTErYEBsYXp5UnVsZT0uanM6d3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2JpbGkvbW91dGhzLnR4dCcsaW5wdXQpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5YiH5o2i5oiQ5YqfICdgLFxcbiAgICAgICAgICBjb2xfdHlwZTondGV4dF80J1xcbiAgICAgICB9KTtcXG5kLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTonLTHlubQnLFxcbiAgICAgICAgICB1cmw6XFxubnVtMitgQGxhenlSdWxlPS5qczp3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvYmlsaS9tb3V0aHMudHh0JyxpbnB1dCk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/liIfmjaLmiJDlip8gJ2AsXFxuICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzQnXFxuICAgICAgIH0pO1xcbmQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOicrMeaciCcsXFxuICAgICAgICAgIHVybDpcXG5udW0zK2BAbGF6eVJ1bGU9LmpzOndyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9iaWxpL21vdXRocy50eHQnLGlucHV0KTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+WIh+aNouaIkOWKnyAnYCxcXG4gICAgICAgICAgY29sX3R5cGU6J3RleHRfNCdcXG4gICAgICAgfSk7XFxuZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6Jy0x5pyIJyxcXG4gICAgICAgICAgdXJsOlxcbm51bTQrYEBsYXp5UnVsZT0uanM6d3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2JpbGkvbW91dGhzLnR4dCcsaW5wdXQpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5YiH5o2i5oiQ5YqfICdgLFxcbiAgICAgICAgICBjb2xfdHlwZTondGV4dF80J1xcbiAgICAgICB9KTtcXG5kLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTpnZXRIZWFkKCgn5b2T5YmN5pe26Ze057q/OiAnK3RpbWUyKyd+Jyt0aW1lMSkpLFxcbiAgICAgICAgICBcXG4gICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnXFxuICAgICAgIH0pO1xcbi8qXFxuZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6IGdldExvY2FsVGltZSh0aW1lc3RhbXApLiBzcGxpdCgn5pelJylbMF0sXFxuICAgICAgICAgIFxcbiAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMSdcXG4gICAgICAgfSk7XFxuKi9cXG59XFxuLypcXG5kLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTogZ2V0TG9jYWxUaW1lKHNzcyksXFxuICAgICAgICAgIFxcbiAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMSdcXG4gICAgICAgfSk7XFxuKi9cXG5mb3IgKHZhciBpIGluIGpzb24ucmVzdWx0KVxcbntcXG4gdmFyIHIgPSB7fTtcXG4gdmFyIGogPSBqc29uLnJlc3VsdFtpXTtcXG4gaWYgKGoucGxheT4xMDAwMClcXG4gICAgdmFyIHBsYXkgPSAoai5wbGF5LzEwMDAwKS50b0ZpeGVkKDEpKyfkuIcnO1xcbiBlbHNlXFxuICAgIHZhciBwbGF5ID0gai5wbGF5O1xcbiBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTpqLnRpdGxlLFxcbiAgICAgICAgICBpbWc6J2h0dHBzOicrai5waWMrUmVmZXJlcixcXG4gICAgICAgICAgZGVzYzondXDwn5C3Oicrai5hdXRob3IrJ1xcXFxu5pKt5pS+6YePOiAnK3BsYXkrJyAgICAgICAg5Y+R5biD5pel5pyfOiAnK2oucHViZGF0ZS8qKydcXFxcbuaPj+i/sDonK2ouZGVzY3JpcHRpb24qLyxcXG4gICAgICAgICAgdXJsOlxcbidoaWtlcjovL3BhZ2UvZGV0YWlsP3VybD1odHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXcvZGV0YWls77yf77yfYWlkPe+8hu+8hmJ2aWQ9JyArIGouYnZpZCsnI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgICAgIGNvbF90eXBlOidwaWNfMV9jYXJkJ1xcbiAgICAgICB9KTtcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpobXpnaIt5LqM57qnXCIsXCJwYXRoXCI6XCJkZXRhaWxcIixcInJ1bGVcIjpcImpzOlxcbnZhciByZXMgPSB7fTtcXG52YXIgZCA9IFtdO1xcbi8v6aKc6ImyXFxudmFyIENvbG9ycyA9IFtcXFwiNFxcXCIsIFxcXCI1XFxcIiwgXFxcIjBcXFwiLCBcXFwiMVxcXCIsIFxcXCJBXFxcIiwgXFxcIjNcXFwiLCBcXFwiOFxcXCIsIFxcXCI5XFxcIiwgXFxcIkJcXFwiLCBcXFwiQ1xcXCIsIFxcXCJEXFxcIiwgXFxcIkVcXFwiLCBcXFwiNlxcXCIsIFxcXCI3XFxcIiwgXFxcIkZcXFwiXTtcXG52YXIgQ29sb3IgPSAnIyc7XFxuaWYgKGdldFZhcignWVMnKSA9PSAn6ZqP5py6Jykge1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xcbiAgICAgICAgdmFyIG51bSA9IE1hdGguY2VpbCgoTWF0aC5yYW5kb20oKSAqIDE1KSkgLSAxO1xcbiAgICAgICAgdmFyIENvbG9yID0gQ29sb3IgKyBDb2xvcnNbbnVtXTtcXG4gICAgfVxcbn0gZWxzZSB7XFxuICAgIHZhciBDb2xvciA9IFxcXCIjRkE3Mjk4XFxcIjtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZSkge1xcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIicgKyBDb2xvciArICdcXFwiPicgKyB0aXRsZSArICc8L2Zyb250Pjwvc3Ryb25nPic7XFxufVxcblxcbmQucHVzaCh7XFxuICAgIGRlc2M6ICcyNTgmJmZsb2F0JyxcXG4gICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG59KTtcXG52YXIgYmFuZ3VtaSA9IGdldFJlc0NvZGUoKTtcXG5pZiAoTVlfVVJMLmluZGV4T2YoJ2FwaS5iaWxpJykgPT0gLTEpIHtcXG4gICAgdmFyIGEgPSBmZXRjaChNWV9VUkwsIHt9KTtcXG4gICAgdmFyIGIgPSBKU09OLnBhcnNlKGEuc3BsaXQoJ1xcXCJlcExpc3RcXFwiOicpWzFdLnNwbGl0KCd9XScpWzBdICsgJ31dJyk7XFxuICAgIHZhciBydXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldy9kZXRhaWw/YWlkPSZidmlkPScgKyBiWzBdLmJ2aWQ7XFxuICAgIHZhciBiYW5ndW1pID0gZmV0Y2gocnVybCwge30pO1xcbn1cXG52YXIganNvbiA9IEpTT04ucGFyc2UoYmFuZ3VtaSk7XFxudmFyIHYgPSBqc29uLmRhdGEuVmlldztcXG52YXIgcCA9IHYucGFnZXM7XFxudmFyIGNhcmQgPSBqc29uLmRhdGEuQ2FyZC5jYXJkO1xcbnZhciByZWxhdGVkID0ganNvbi5kYXRhLlJlbGF0ZWQ7XFxudmFyIHRhZ3MgPSBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9iaWxpYmlsaTIudHh0XFxcIiwge30pO1xcbnZhciBzZXR0aW5nMSA9IGBAbGF6eVJ1bGU9LmpzOndyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9iaWxpYmlsaTIudHh0JyxpbnB1dCk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/mraPluLjpobXpnaLliIfmjaLmiJDlip/wn5GM5Y+v6IO95bm25rKh5pyJ5LuA5LmI5Y+Y5YyWJ2A7XFxudmFyIHNldHRpbmcyID0gYEBsYXp5UnVsZT0uanM6d3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2JpbGliaWxpMi50eHQnLGlucHV0KTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+makOiXj+mhtemdouWIh+aNouaIkOWKn/CfkYzlj6/og73lubbmsqHmnInku4DkuYjlj5jljJYnYDtcXG52YXIgdHMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcXG52YXIgbGlrZV91cmwgPSAnaHR0cHM6Ly9hcHAuYmlsaWJpbGkuY29tL3gvdjIvdmlldy9saWtlJztcXG52YXIgY29pbl91cmwgPSAnaHR0cHM6Ly9hcHAuYmlsaWJpbGkuY29tL3gvdjIvdmlldy9jb2luL2FkZCc7XFxudmFyIGNvbnRlbnRfdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLTgnO1xcbnZhciBjX2JvZHlfdHh0ID0gJ2FjY2Vzc19rZXk9JyArIGdldFZhcignYWNjZXNzX2tleScpICsgJyZhaWQ9JyArIGdldFZhcignYWlkJykgKyAnJmFwcGtleT0xZDhiNmU3ZDQ1MjMzNDM2JmF2dHlwZT0xJmJ1aWxkPTYxMzA0MDAmY19sb2NhbGU9emhfQ04mY2hhbm5lbD1tYXN0ZXImZnJvbT03JmZyb21fc3BtaWQ9dG0ucmVjb21tZW5kLjAuMCZtb2JpX2FwcD1hbmRyb2lkJm11bHRpcGx5PTEmcGxhdGZvcm09YW5kcm9pZCZzX2xvY2FsZT16aF9DTiZzZWxlY3RfbGlrZT0xJnNwbWlkPW1haW4udWdjLXZpZGVvLWRldGFpbC4wLjAmc3RhdGlzdGljcz0lN0IlMjJhcHBJZCUyMiUzQTElMkMlMjJwbGF0Zm9ybSUyMiUzQTMlMkMlMjJ2ZXJzaW9uJTIyJTNBJTIyNi4xMy4wJTIyJTJDJTIyYWJ0ZXN0JTIyJTNBJTIyJTIyJTdEJnRzPScgKyB0cyArJyZ1cGlkPTAmc2lnbj04YWJiZGRkODdhNmJkODJlMWU0MmNiM2NmZmQzMmJiOSc7XFxudmFyIGxfYm9keV90eHQgPSAnYWNjZXNzX2tleT0nICsgZ2V0VmFyKCdhY2Nlc3Nfa2V5JykgKyAnJmFpZD0nICsgZ2V0VmFyKCdhaWQnKSArICcmYXBwa2V5PTFkOGI2ZTdkNDUyMzM0MzYmYnVpbGQ9NjEzMDQwMCZjX2xvY2FsZT16aF9DTiZjaGFubmVsPW1hc3RlciZsaWtlPTAmbW9iaV9hcHA9YW5kcm9pZCZwbGF0Zm9ybT1hbmRyb2lkJnNfbG9jYWxlPXpoX0NOJnN0YXRpc3RpY3M9JTdCJTIyYXBwSWQlMjIlM0ExJTJDJTIycGxhdGZvcm0lMjIlM0EzJTJDJTIydmVyc2lvbiUyMiUzQSUyMjYuMTMuMCUyMiUyQyUyMmFidGVzdCUyMiUzQSUyMiUyMiU3RCZ0cz0nICsgdHMgKycmc2lnbj00YTA4NjQ1YzI5OTRlYjY5MmFjMGNmYjBiZDc1NjljNic7XFxuXFxuaWYgKHZbJ3JlZGlyZWN0X3VybCddKSB7XFxuICAgIHZhciByZWRpcmVjdCA9IHZbJ3JlZGlyZWN0X3VybCddO1xcbiAgICB2YXIgeW0gPSBmZXRjaChyZWRpcmVjdCwge30pO1xcblxcbn1cXG5cXG5ldmFsUHJpdmF0ZUpTKFxcXCJYVWlGVDF2WFlXclV3K1ZocG5xbGcwTjB2QVdncGdsaDhNaForOXZQRDk5Tko1VmdlRmRIbXdhS2F3SXk2QzBoNkZGUWhFUTVSaEptVjBFUUhuTDl4eWJQSEFjaEFMN2haRVpkK2hiR0hWNWplRytuSzVRM2llNzhwdUdEYjFUSjRmQUk3ZzZlekxJalFNQnhOLzJYTTkyWU5OUEtESGRoTElNUUdWNjlNcThjVE9XaktwWlFwMC92Z051eGFQUUtFelNkSFFKdWU3dFR4ZFNFdkR0M3MvdHhkRWgvb0d6RkNDTldlWkNVVTUzemhFaEMwNnE2WkZqWkNNK2Q4RnNaNWNYbE5KZW10ZWdNZ0pVTGRUcWFWZFJ3VmhWWCsxdUJROU55MERwc05HeDJMd0hnT2psczlodzE0TGhFcXRoRWU3M3lQQkd2U2dLRUJkU1lnRzdjSzdoWVZURU5lR1RpUkF6S1BRN2pHRXFFSjhhYWRIT0hBZVNhMjVhQmJ6YzgxaGh4Z1h0aWFsWDhVcWVwbjdrNGcyR2tzcW9HM0pWSStxVGZXWnhQV3FOTS8walVYYnJVVENSWm5yekdWb3c2TndQUVhLcTNDREtsOWkrYVp2ZVd6NUlmNUVORVpHaVdsVzV6NGFKU0VjZXhDRHNpWmxvMS9RSklqMnJXb25FMHU1NGFoMi9aWi8vWkdvTUJKK2QxOUdtZXBrTEJEM24ycW9nS25qWmoycmpXcWdQYWRFZWUxWkloWjNTR2JtVGxKZjFBNEJZSXV1UHd2NGRHWmRSb0RXNjRCaEM1anVDbjZ3RG03WW15N0JYZjFzUWFGaW1FbnJTSWlIR2hNK1dLZzNJeVdlY3VoL0drKytNbU42QXh4Y3ZOQXlwOGJDNGh6Qk12WkovbDV0UnlhcG9tZENWNUJwaVhmamtXUm5ib3BJakkrV0tCM2ZDYVl5UmRlTkxFUktuRWxzY0RpejdVZW5McHJoWWMvYTRMc0dlTU1GVlo4WW84L3dHWUgzOEpcXFwiKVxcblxcbnZhciBwdXJsID0gJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92aWRlby8nICsgdi5idmlkO1xcbnZhciBtb2RlID0gZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvYmlsaWJpbGkudHh0XFxcIiwge30pO1xcbnZhciBtb2RlX3VybCA9IGBAbGF6eVJ1bGU9LmpzOndyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9iaWxpYmlsaS50eHQnLGlucHV0KTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+WIh+aNouaIkOWKnywg54K55Liq6KeG6aKR6K+V6K+V5ZCnKF5fXikgJ2A7XFxudmFyIHpsID0gXFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcigncGFnZScsIGdldFZhcigncGFnZScpPT0n55u06ZO+Jz8n5YWz6ZetJzon55u06ZO+Jyk7cmVmcmVzaFBhZ2UoKTtpZihnZXRWYXIoJ3BhZ2UnKT09J+ebtOmTvicpeyd0b2FzdDovL+eCueWHu+S4i+aWueWIh+aNoua4heaZsOW6pvCfpJ8nfWVsc2V7J3RvYXN0Oi8v5bey5YWz6ZetJ31cXFwiO1xcbmlmIChtb2RlID09ICd5aGMnKSB7XFxuICAgIHZhciBsYXp5ID0geWhjXFxufVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiB2LnRpdGxlLFxcbiAgICBkZXNjOiAn5o+P6L+wOiAnICsgdi5kZXNjICsgJ+OAgOexu+WeizogJyArIHYudG5hbWUsXFxuICAgIHVybDogdGFncyA9PSAndXAnID8gJ2ZhbicgKyBzZXR0aW5nMiA6ICd1cCcgKyBzZXR0aW5nMSxcXG4gICAgaW1nOiB2LnBpYyxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnICAnICsgY2FyZC5uYW1lLFxcbiAgICBwaWNfdXJsOiBjYXJkLmZhY2UsXFxuICAgIHVybDogJ2hpa2VyOi8vcGFnZS9nejE/dXJsPWh0dHBzOi8vc3BhY2UuYmlsaWJpbGkuY29tL2g1L2ZvbGxvd++8n++8n3R5cGU9Zm9sbG9377yG77yGbWlkPScgKyBjYXJkLm1pZCxcXG4gICAgY29sX3R5cGU6ICdpY29uXzJfcm91bmQnXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzirZDvuI9TdGFy4oCd4oCdJyxcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSMnICsgY2FyZC5uYW1lICsgJyYmJyArIGNhcmQubWlkICsgYEBsYXp5UnVsZT0uanM6aW5wdXQ9aW5wdXQuc3BsaXQoJyMnKVsxXTt2YXIgcGljID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYWNjL2luZm8/bWlkPScraW5wdXQuc3BsaXQoXFxcIiYmXFxcIilbMV0rJyZqc29ucD1qc29ucCcse30pKS5kYXRhLmZhY2U7aWYoIWdldFZhcignbGIyJykuaW5jbHVkZXMoaW5wdXQuc3BsaXQoJyYmJylbMV0uc3BsaXQoJyMjJylbMF0pKXt2YXIgeHI9Z2V0VmFyKCdsYjInKSsnXFxcXFxcXFxuJytpbnB1dCsnIyMnK3BpYzt3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvanMvdXAuanNcXFwiLHhyKTsndG9hc3Q6Ly/lhbPms6jmiJDlip8nfWVsc2V7J3RvYXN0Oi8v5bm06L275Lq677yM6ICX5a2Q5bC+5rGBJ31gLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXG59KTtcXG5cXG5mdW5jdGlvbiByZXF1ZXN0X2JpbGlfYXBpKGJhc2VVcmwsIFNlY3JldElkLCBTZWNyZXRLZXkpIHtcXG4gICAgaWYgKCFTZWNyZXRJZCB8fCAhU2VjcmV0S2V5KSByZXR1cm4gcmVxdWVzdChiYXNlVXJsKVxcbiAgICBldmFsKGdldENyeXB0b0pTKCkpXFxuICAgIGxldCBub3dEYXRlID0gbmV3IERhdGUoKTtcXG4gICAgbGV0IGRhdGVUaW1lID0gbm93RGF0ZS50b1VUQ1N0cmluZygpO1xcbiAgICBsZXQgc291cmNlID0gJ2JpbGktYXBpJztcXG4gICAgbGV0IGF1dGggPSBcXFwiaG1hYyBpZD1cXFxcXFxcIlxcXCIgKyBTZWNyZXRJZCArIFxcXCJcXFxcXFxcIiwgYWxnb3JpdGhtPVxcXFxcXFwiaG1hYy1zaGExXFxcXFxcXCIsIGhlYWRlcnM9XFxcXFxcXCJ4LWRhdGUgc291cmNlXFxcXFxcXCIsIHNpZ25hdHVyZT1cXFxcXFxcIlxcXCI7XFxuICAgIGxldCBzaWduU3RyID0gXFxcIngtZGF0ZTogXFxcIiArIGRhdGVUaW1lICsgXFxcIlxcXFxuXFxcIiArIFxcXCJzb3VyY2U6IFxcXCIgKyBzb3VyY2U7XFxuICAgIGxldCBzaWduID0gQ3J5cHRvSlMuSG1hY1NIQTEoc2lnblN0ciwgU2VjcmV0S2V5KVxcbiAgICBzaWduID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoc2lnbilcXG4gICAgc2lnbiA9IGF1dGggKyBzaWduICsgXFxcIlxcXFxcXFwiXFxcIlxcbiAgICByZXR1cm4gcmVxdWVzdChiYXNlVXJsLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlNvdXJjZVxcXCI6IHNvdXJjZSxcXG4gICAgICAgICAgICBcXFwiWC1EYXRlXFxcIjogZGF0ZVRpbWUsXFxuICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBzaWduXFxuICAgICAgICB9XFxuICAgIH0pXFxufVxcblxcbmV2YWxQcml2YXRlSlMoXFxcIkw3QXZKNDFDKytrbGxCTVBHOUpSVFV6UXZFakpYd1JyZlJpSm1FQnVmVVRwTHBod2hsNm00cUVmSkdORmNUcXZETm9UWmkrWFd6OEh4dTdVMlU1N3NzQW9CTWZvL2VBNjh6dVZEa1g4L01Wb3BsVHpPcWpVTzZWNXBFTFhZaUZXWFJ4RjJ2bzNWNnEyRENOc1hSUTB5ejR2aDFUcXlMR21RYUtaUkZYcHk1QVFkS1JQay82VXA5dnM5OWJ2YWw0ZVRJWUpxWVlmWXMrclBteGFIOG1pMzI0QThGWjdQNkZKd2UrUW9BMjdZVitXMDkzZEhJVS84R2hvVS9XNmtxMEwrZ2lES0E0WE8zQUNDRXE5a2lxV04vREQ1WWl1T0lXQncxZ296VWdOS3dXUVRkRmdMc01aTmsvajNXQTdoS29GZzhTR0RFenRiQkRoZmdXd0FicFFpVnEvS3NlMVNlaG9DUzd5bTJNMUVhaEp0eFNibUxPNEVnd3diTS9nc054Q2xIcmQ3c3AzMVcrNCttQk42d25wWUtvcmFWbGtTVDVpVFN1TGEyNzNjTTlObm1OZmZSMjlRR2crN3hPVzducTh5MEpuNS9iUEwwQlNaNUF0UnFMcnZyczZOWDlRYVhUaXlZQ1FSVS9HUmtwc280ZDZITXZLTUxXYWh4ak9uRkNSbXVNQitrRzVBWDRSdmNycVZ4ek5lQUp1S0M1bmxFZlhqRFJYb0U1bE04VUtiS1N1TmRSakhUUERwaUcwOFZucmo0TWZxMWFXb0RzbmRQWVVpSUo1T1NwMlpaTE84K0tZSVZlR1d5SVZRYStkaWtyRVM3K2FuRVViT3NMQ3hmZmRBZVRLcmNUVzU4VTZpbGFLcElHWm1BSkpJOTZxSzlaUnNNeU11WVpuUUU1R3BLZXgrMnQ0dzlZNXFGZHdpRDFkTDVhRm9qNmFlZmNaR0dWdy9ZOWdVK1l2bHBoYklSUDZTRUlzbFY5YUgvcU5MUHJrNjBWZnZMT2xNNTVNdmxNWnR5TkRKQmZDVlpZdlNyQUhZSHg5MVY5MmhtT1krMFFlVkVVZUFMbCtIQVVKTnUzV2tjbUYzT0xYWW9OTUh3eldcXFwiKVxcblxcbi8v6Ieq5a6a5LmJYXBp6aG5XFxudmFyIG1BcGkgPSB7XFxuICAgIGF1dGhvcjogJycsXFxuICAgIHR5cGU6JycsXFxuICAgIGlkOicnLFxcbiAgICBiYXNlVXJsOiAnJyxcXG4gICAgc2VjcmV0SWQ6ICcnLFxcbiAgICBzZWNyZXRLZXk6ICcnXFxufVxcbmlmIChtQXBpLmJhc2VVcmwgJiYgbUFwaS5zZWNyZXRJZCAmJiBtQXBpLnNlY3JldEtleSkge1xcbiAgICBwdXRWYXIoJ2FwaScsIEpTT04uc3RyaW5naWZ5KG1BcGkpKVxcbn1cXG5cXG52YXIgYXBpSW5kZXhTdHIgPSBnZXRWYXIoJ2FwaUluZGV4JywgJycpXFxudmFyIGFwaUluZGV4ID0gcGFyc2VJbnQoYXBpSW5kZXhTdHIpXFxuXFxuXFxudHJ5IHtcXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgcGFydCA9IHYudmlkZW9zICE9IDEgPyBwW2ldLnBhcnQgOiAn5b2T5YmN6KeG6aKR5peg6YCJ6ZuG77yM54K55Ye75q2k5aSE5pKt5pS+JztcXG4gICAgICAgIHB1dFZhcignVUEnLCAnO3tVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxcXFxcXO+8m1xcXFxcXFxc77ybIFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzbvvIbvvIbvvIbvvIZSZWZlcmVyQGh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92aWRlb30nKTtcXG4gICAgICAgIGV2YWxQcml2YXRlSlMoXFxcImlmbnpxYU5xTlJrTjZOcUcwZlp4NU1leTQ3N09zTUpPVGJUZDlTYWpNa2Y1UjVPMzk2SjIyRnhrYlFia1hYQ3BnZ2Z1YWQ1byszcDk3TEhXYklwdG93NG8rTVJRdGFQMC84d2l5SkNyWkNhWllXNjR3VTFCNjB4UkJRdGJkSkNFZ1J1SGhvWnNiR0FaQkE0My9UWHhHd0lrQ2NrYlY2bnpIaG05M0RrNURpQzVJNUhuK0NmaUJNRTR5UW8zOU9VSnkzcEdBV2xqRDFzbnB6R2hCajFiM0hyVHZ5a2pGYVNQZ25TL01VZEpNZjBRWklTTkdVOHo1b3ZhblBzSCtGNVdzUWdIZ0lxeFc5ZXZWMyt0Z3lmTFVkRlIwTjREbHRMWXJ3N3ZDUGd6UFFYL3Z3Qk1QeTZZY1Z0U1ZLamI2UXpGYXVUTitKMklSWXJwYXkxNWFrQWtvZmErWXgvZk5UZWY0KzZaYVZ6bVhlWmFFYWowYlEvSFBaaWJ4VHozUytEbVVWZGdZdTBIWE15MENGQ1hTdDMrZU9VTjljK0VtVkFMck5OOE9xV3JQZWtydkYxcU4xVUt2NmtCY0JFUC9Td2t1ZnMzdk0wN2ZXdi9STkpZQjdoRWhzb0l4eXZIUU9pUFlDVEQrZVVzK2ZoK1U5YlJSQVV6UlNsWEN6aFdYakRmQ0pqWS85QjJsNFJwaC9ud29wRU1xaWk1cEpDSlVQVGMvSDRVZnc5Rk9MWm14TUhiRWlXZmZwMHJnYnBIb0tuUm56d1lmZy9SSzduOXpMQWRHQUsvOHVHYTBzbFo1SVQxWFVlcXJQc0NxdDNNSDVHMm15eEJEbHFEMFlRVWI2TldoSTdwampwaW42YlcydGh3ekg0TlQvVHA0Q1dwSGxWeWNCVldzU2doR3lTQkVRUnBCUUtMT1R2MUV2T3hnRnhoOUdZY3U5VDZXUHVmYkVuRGcvTEs5cmdyMnB3b0kzWUlqMHAyQmJCbVg3dk1oUHhLS0xweFppNDNKd1ZmOUh4bjMxTmFZUWkvMFMxelRDZzlTMjZ0VWdBcTQ4cmkrRWkzTUhVa0k2V3NNYkE3M0xuZmdCajc3REFsUWw1UU9rVXYvcEhoeVlsaWlRMlhZYVl4U0graEc0K3RBK0s2dVAwaERLZVFMay9mOXQ3aSs2WU8wVSs4R2kvWHdIQXN0NkNMN0kvS2lCZkZQbk5ZTHhaQng5RTBzUWVySSs4WUtGMkpmVG90dkhmYzlpU2YzTGVBY1V6V3kvR3NZcjIwcXpFMSsyaHFVbnhRYnFpRWpsYU1xZXIvL1FvNThPdytGbXBRcDF3dSs3aGdmcjZSa0s0WXd4a2V3ZVhoT1JmQ0JOcUlCSnp0d1oxZkIwbWJwUk4zY2tuekRpY3JhbW0zaldrRGlZemYvSk0zaFlzM2NyeWxkR3lYcXIyOEo2dTh4TGFTRFhGL3lVUXdiU0ZXSk1zdDQraWpTM0g3RFU1d1lqZ2toRXpoQlZLeDcyNExVbWtwVVRhUlRqMDBKZ0NNc2xIRHl5dkxTTlpXYy9zSW4vdldTQUhVOXEyQ1lSN0M5Q0lrR3VJMGtPS0gwbndLS2kxeFdmOVp3MWl2Z0x4a1VsT0VJRk5wUThYZDRSdmlqakdMcnhRUjJ6bXNycUxqVGhqcG5SOXJ5bDJxdVRtK0htdWllanNHTVdHSVhLa3lwZExZUG52Y0hmSDJjbFdnVTcxVkp4V3J6NktrN0xqSUd6Nm1Gb2o0NVpaN0YvajF0alhNaDhscllCbEtkWGp6bERjczJoczlKOXVBY3hLV2pSWG15OHVLQzRadTdNZlZLMGtjRGZ2dEFmY2tuZW5SZ3doWkZLcFNIeTZIOGZJbDBXbkhQYlVTTjUvUTFJaWs4a2FhQzBNU2JSOEtWNDZ2aEVldlFkUG9leFg3Q2pwU2paa0ZBS1NGLzJrdURYeUdzekx6MmhOT2tHMGkxQm1reGhqYzYzL0FRbHlLaXprMzBNSkJmTlBWRTZ5OXFERXNkWG1MTXNvdUg4cDcwSHlIL0tvZWx5QWtpK1VmZGxLUU5qMTdIb1lHU2luUWtiYjJpRldHOU5ET1d3cmo4WlF1WFRpTktUWEpPckg4bFQxKzE2NEVHalhlNStmemZVbUFNMENMUk1UUi9OcTV6TlZnZTlQRi9WUE5mVTBkTlZjb0xtWVA2RFRVNU96ZzBic294MWE4U2duZHhGUjliU05SelpuelBHSm82SEtHY2ZiVmFTVUZRQ1RkNlVielRkY3BMRFRRcXVad1BGYmRkU29ZamRzRnVrblBDRTJVcDZyay9lMWRoOUtyOG1hRThGWThDT25CdTdCMVdkUGR5dVdlejd4UHRzaHpBSXdSZWtJT21HMG9tU2xieHVYdzBiOVd0UEFYUk1UZVBnYWJEdThCcnowLzRzMGVvQkNSNmN2WGl3S0FYOERGSTl2ejRmbnVyTkxkN2haSWtDdkFuVDNSdy90U3RzUys4ckZVbUcwM2lhUW1KbjN5WGFpWncxTVNIa1JWcVd0RFo4elNBa3Jxb1lBN1EzdXlYZEpNNk1xQ1hFYkNmZ1hsZ1A0Q0E4Z0xyOHR2d2g0blhGbVlTYWFHbEVNWUNoaFZzUDBUb25zZ3lHYzZaSHJGK2tIMmxER1NxeE1OZUIrUVROc05IZ3JFUnJoeDY2eE95bHNJWkV3TENldm5mbVFwL0NMejRNY0N0MEZXemhuSlEyTkFoODExbU93YjQyaTNYT2pudGt0SFQydFFNUVFLQmdkVG5ZakdZS3cwQjQxNDF1ZUJOYXdHYVozbExhWFdUN1l1R1FhRktwWGR6a21pNXNPZGpWUnlTa2pWcEE5WWRFYW5TUTU2ODRTakxaM0J1dFdOa3hJcDNlUXk0M2sreG9raFB2d2pUVllwR2tiYkJHb0NNOHpJQkR4ZXEyMkw5QWtjTllYdXpKYXkvTmczVHVYV1dLQXYwKzh6S2RDUnR2YUlWWWIwME01YkN1UHhsQ0RJZ1ZDalZDSFhpYnFzdVA3akt5UnozdHI5bkNaSVgrK1lDQWErWmRYSzBQMmVnMXRsSnplV2cyMHpVZ0VqT2tuc0lGa2sydUJmTDJVRWpOeGRsbERPSVM3NEdyNEJIYnFURk92RkJhMWpabFBicmZ4dU5ZMXEvSnpTZGNWRzkyMWU0N096OHJGRFB1VkU3TmZ0YTJtRGZRbDdNMEpUTjdUaWVCWWpkYUFYUFM5RE9ZT1BzT1ZXVWxPMVF4Y2V0djVnd2dJMGdJVmhwYVhUSTZBeUMyblk0dkxoZmhVWldyYmtlNnNhR3YrTitRY3JBUy9YcXpOVk8xOG50YmZNdWVsRmlTblRGU2lyWUJOeU5iSjJ5dE9rNUhxTUh4dk83Y0R6TVE3RTJ6ZUpIajhSeXZTQm12VHEwakJkTEJpSUFoN2VKK3gySm9FVy8zQ2JyVGJmT3laeitIRlBzTzdoc3lUekthckRwRHZ3ZDZHbE9LZ1gyU1ZsM1NURDRhTHVYZDB2TndWWnFINkVpUnJsOGFoU3pMd0FEY1lNSVVCRFJ3ZUdZM2xudG12Q1gyMXdLVnRkZUJHVG9US1J6RE9BUk5mcEdOYkZCSzByd3FQd0szdVk0dGlYemhtbXlKbEQ2SzJvV1U0ZzlYWVc4MkFCbGs1Mk1sT2VRWWQxaFdIcmF3cEdwYkhDRWM0aXFzOE4yU2RhYTVCOXFONFRZQjNYTk50aStyTkl0R2c5T3Bhc3U1b2ZmQ0ZGSWJOWm1qVGM5RWxLNE13bk9XOTlDR200MDJNYTQvZWswbFVIUGtyTThVVzZOQ0FESW92QzBrbXJWVW94blMwSFF4c2ZnV1FJbGtOUEQ5RlVmTzRpSmYyZjNpVGd6dDloRTJPZ1QyQ2pLd0twOEhDanVoY2E1RmNzMVNsRGxoU0FLZUhNSDl3MlVmL241dVE2bkIwV1VXQ05zUnY5RE4wTVdmQ3hWN0ZOeFVsYTJ3Y1BJYlV0WVJOam9FOWdveXNDcWZCd283b1hHZ0NaRmxxbTc4dnRxQ2JlSzI4aVh6akZjdCs0OHQwa2M2YkVpcVAyOEtuWUY4bkFWbkZRSTJPSWVRdktiSUhBcy9UWGxzMjYzUWxhamRIVXBNS1pOay9BQktHLytxa1cyZFdRRTlXbVBDZVBPdmRWbUFhUE14Mnk3TG4zajI3VVZSUGxJcG5pTzZyNldQMmRUNGFtZnBhNERUOXc4RGt0SDBqMzlaYTVLYkJqcVlUMzA4RWFYMjd4UnUvcS9OWGNYaGtYUDlJRFp5UlNDY3Vaa3hmNlRaNFFLcEhuNXZ6am91SWFjU1BNVHRhU3RweUZEdk5HSFQreFY2RVl1QnE1ci9nQ2Q2T2hTYkxES3FIenZjQkNEQkxNMk9QNC9FUjJzaHY3R3JMMklic3dLWFFZNVNVSUUxeDluZUgycjVHeDQxUDBiZk9WcG1sTHRCTk1SRVBsTTRqVDBPSmpNdWhEL091RzJoNDlReGVKcVVLcUNxclc4ckFXYktJcUY3REh4RDFsejB6Tm00akVmc1M2L1lMU2xUcDRyM2MrRmVkRHZhUmlHU2lMbkdFODdxNWJFZHdLN1liblZCWU1YNmJkQ0lzSzhRMDdRSmtPeWNVTWZtZENrcVZlOTdSYUNubGFjSFFhZzAyNGVGbldIR0ZPL3J4L3RVdlVaaWMyd0JxNi94Nmo4QUo4RDJsbmduOFg3YWFBcjlRVnNuVEpXWVZrczBodDM0U1lPTWVrL2luQ21NdERza1NyTzcrV1RFZkN1Q0traXA3Vkd6NTJKTXEydnp6bW15S3lvMnFhOFJoVWNjeVhoeW04V0d4Nm91KytTaUpxdTZmTXpzd01HNFR0WC9qTFJmWDI0VDhhb1lwWjNvOTNpOVN4a1FvMHQzT1EyME5IKzRsb0JyV3lrd0FTR0ZxV09YLzU1NUhub0tqR3VoYys2Yk1WRmcvalMzcERKc1huK2ZNdTdlaWRKYXZ5WjZVWmpoMEE4S0w1cjdqekFYbldlNkVpNS80UDZWcE9VSFlYS0E1c3JFY3pGcEhVUDlSZFYzSXVpSzc2R1BxNnBqNU01TGpLZHdONUtCTlh1bDBhZ09lMnBJSVNjbXNIS1BNcmIxTTQyc0Rsb1JRaG5lcE5pbzhBUnYwWUQyUTlHSlBPY0JIVTZFVEhXWXoySWl5bjlQaWpaUjdZU3AycDd5aVFCTkdxaldZR1d1NkxNbFFJZFlSQ0o5cFRSenh1VThybnp4eGs4UFFDRDVwRE1SRUM0WmRNb1NYY21jVmNIeU1DbUFVR21pVFIrT3JBQ3JMcGd5ZHZ0TCtrTUhVdFpIdkg0TWFSN0l4dmlIRkFFUWN6dnFKNkxVa3NpMUVkT0xNSS9Sc1BjTitQNUV4TXIyeGsxNzZQc2QvdWRqdWg1U1NZc2hmZENxZmtvOU54YXppN3lZSTVvbEdFRTRLaVhVcVVrRmQzcXdrdkhJVlVJYVAwNzVRVDJ5WHdWcHNMVEhhRHh6NkZlM28waDRMa2xpTzhnR1dhL2lxa0QvRG5tOHNyeTBqV1ZuUDdDSi83MWtnQjFQWlh3cGdhMDFyRGZZYVZUTVZ5eEdTSXl5dkxTTlpXYy9zSW4vdldTQUhVOWpTSWpJaFJrZ3B4VC9LTXY2aUg4bGxXSEoxdGo4L1JUQ0YwQ2wyZjZXd1RiRkpZY01hRmxubU1pczJBTFZPTlBzNlVNdnNPL1BPdzVDY3I3OXNKemllV0xNVmFPVkc0L2UxVlBUU0F6WTlIODdPQ0pYZXgraUFPb1crS0FucmlCekFWQmRGd3lVcUllbkxKVnNSSDdWdjNOVjczTXFycW4vcGt6QVh0a2lVQVh3cEttVnpkYmVOTGxlYm9rRGtvbXNzcnkwaldWblA3Q0ovNzFrZ0IxUFkzbVRSbVN0U2tIYnhBL0Z0Y2ZoYjMzNEJvejFZdVg0K1pucEJsUlN3eVRURTF1R0xZZmVwWmEwSjlwVGM4WS9HYkU2elh1YStmZDNPWWtrNENwWTVoSU5WQU5HYkdNRDFZUWxwY28vcjNBNnY4SDdzZE81SzdTalo4SVQ1SlNMVnNwQkZVM3l5cWpQY2RWRzlkeUQvTHBHeGJXMjdRQm8vOHUyVmhwa205TGNNdzNoOGhpcDZDekI2VGxwd1QxVDY3WEhrR3o4VWExQytTTC9FRXplcTlLOThWVFNXNEZQeWVjRlk3SVVjNDBBWFBtcHFLSXF0YTdTY2pBWXZEOGhaSDNkM1UxVTUzL1NvY0pIS0RqNFp2MWpibkZUc2pvZGpWMGZIZVlPZHQ1MFBGV2NPeFhZYXo4amdnZGwwNEJFRkZVazBTcGZ2MnpyZE4yNTVLRnIxbTRnVXh5M0tpN3lGQVBoZEtyeUNKL2hqVFJKUWNURG5hNnlQU2ZzZUNEdG9Sa21HdjB5TmRFMGJpOWM0cFdQUWdyVmkwUWpkekgyNVgwTm5KQWtsNVlVaWtQbGxGWlhobjJkUXpMbU1qS1AyUks2TEtSQTVBcEhnT1haV25HdDBBbWNmVXl1dHcwR1lSRzlld29LQVlRMzhKdEt2UnNkVklpNkZjNE15amUyQmJ3dUxvdCtsNll4eFAyRmVrVWtraTk4Z2JRcTBDbHB2YmhaMm41dmM1cUlaMWZ2YlNOdGVOSGkyTnNEVytoVVhFOE9ZaDNBeDl3QUs2QmhNMERpbnhvNk9Wb3o4YWx4cTQ0dHRxa2lBUjdHOEhYem11TU5qTHMrYTkrUUk5cWU2RFNiQUJRajdVRkVoUGNWMWUvZ1BUL3dSL3M1b3lTU0x2MzMwdGpyendvN3BsTG91bmMvc2E3VWVBeEJlclFVcXkyQWw0MURhd0ZMZUsrbWErYU9NYk9lWjhkSUJiR1pqV1JKNmpYWkllTTVka1dvYVk1Y1JSY0NwMDlxRm1taGwvY1dzUVYyL0tmcS9EYTJ1MzhTZlhySTFWSzJlZzdDMk92azVTU2NzbHNSTlEwUWdvdEMrNE1DVVJFTTg5UmU3SUI5L2l3V3YrNzlxSTNTL0huS2Z4cnVGdk9XTjQvd1dIUjY5b2NhaEd4Ty8xdDl1WlFzS0w4Tmg0bUYrTEFGWWpoWitSNElwQlZ0ZVh5NmZHbFc4YVFRMXN6bS9TOWlJaytqWWNra1Nub1ZpWVp0bTJ2R3NaVkNJT2NsMHZyTEhtWk1WeWkvR0o4VDlsL2lTUXErOU5BRG1XU3dSc1c5anJLUjJ1eXdHczlCaEZlc2JWNFhKWEV2eE1NS2pIcHdodFpEUUFGS0tMZmpVNGxMdVAxa0cxR3ozZlFnVkcwQ0tnUXJHeHd5ZzlKTkZ4OGxLMHBkRU9PK0RhWHpUckhvWHhNMGJJc2ZjTFlDd0s1bGxJQ0tBazhaTVQ2TXRhSE12MHk3ZXZNakJaLzFZbHZROWVrTDBmNis3aFc3YkdUaEVPeTd4OUl5eWJibzl4VThrR1EwSXdTeXNiSDc5OWV5ZktubFpaWGRVL254NFduMWExQ1B5Z0sxNEt0aVhUZEZEUTJMZ0NPbjJxb1BaZjdOdElGeGRMNnlhZXArQ3FxMnVFTm9wZzBEenhUekhicVg2RG1jUDdQeWVqSE5PVlVnM3dERjJSd2QzSWt5WUNxZ1puTjZFclcxVjI2b2lsRll5WEZaK3Y3RUhFOEI2TWhMbnh0TEdrUlpaMCtGRkk2S24rWG9lN0xMKzJaYURvNC95eW5rVlI3QkZ1U3FodEtMdnpqZGJ5WW9Ub3dpbTg1YzZScS9SQ1h0d2c5Umc0cVNFUkdqalp5RmNKUS9RNmFKYnYwTHBFeVJuM3FwcDc1dVQzemNiVFNSUlRWanp2Y3VYSUVyZ3IxRC9QdWdGbWhPV2UvMnBCMTVqVTQwaWUrM2M4OW95aWFlSU8vNXNrZHdRUHpnNi9ZSE5WLzFzVlZnT0thVzRJN1FBa2FTT3RkVlBtNkg2d3ZseVhFQ0FOdmhDTUdlbEZBZTFqV3ZkQk11blZSOE4yUkZTQU84TWtJSjZvOEx2VW96S0RrTVFCdDVwL2NXc1FWMi9LZnEvRGEydTM4U2ZYRDUyZ0tENkg4WFZLRmZtREhhb1NoTXNyeTBqV1ZuUDdDSi83MWtnQjFQYW1iMHFhYlQ4M0Q2cW4vYTNHbEh5R3hhbVpnUkhhSzE2dm1aRXphbnVURE96RzFhVXB2RUN0UkI4RU1nYXBhUVhMSzh0STFsWnord2lmKzlaSUFkVDI2dkZwZ2EwWlJMV1JQM2pIMHR5ck5ZQTc1ZUNUZjlkSXFqWUdjQUExcnNVMHplZXBkTVo4TUpYZDUreGJBYVhBL3VKZnNHalBJN3BzUWM4Sm4rZm0zTUxrK05DRUY4THNRME90Z2xJWEwrNjNGUnZ5RzduTWNldkg0aS9YVDBCMUJYTlBMNnI4aTZibmJlK1FKS1lNQTkzUGRiQmNEc0dUVmFMaUpsWWRFT1RmallicExVUkNkbHg5Sy9wdUVYVytcXFwiKVxcbiAgICAgICAgXFxuICAgICAgICBpZiAodlsncmVkaXJlY3RfdXJsJ10pIHtcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICB2YXIgZXAgPSBKU09OLnBhcnNlKHltLnNwbGl0KCdcXFwiZXBMaXN0XFxcIjonKVsxXS5zcGxpdCgnfV0nKVswXSArICd9XScpO1xcbiAgICAgICAgICAgIHB1dFZhcignYWlkJyxTdHJpbmcoZXBbMF0uYWlkKSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG1vZGUgPT0gJ+ebtOmTvicgPyBnZXRIZWFkKCfnm7Tpk74nKSA6ICfnm7Tpk74nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICfnm7Tpk74nICsgbW9kZV91cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn572R6aG1JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBwdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFyKCdsaWtlX3R5cGUnKT09PSflvIDlkK8nKXtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+eCuei1nicsXFxuICAgICAgICAgICAgICAgIHVybDogJChsaWtlX3VybCkubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRzID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudF90eXBlID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOCc7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbF9ib2R5X3R4dCA9ICdhY2Nlc3Nfa2V5PScgKyBnZXRWYXIoJ2FjY2Vzc19rZXknKSArICcmYWlkPScgKyBnZXRWYXIoJ2FpZCcpICsgJyZhcHBrZXk9MWQ4YjZlN2Q0NTIzMzQzNiZidWlsZD02MTMwNDAwJmNfbG9jYWxlPXpoX0NOJmNoYW5uZWw9bWFzdGVyJmxpa2U9MCZtb2JpX2FwcD1hbmRyb2lkJnBsYXRmb3JtPWFuZHJvaWQmc19sb2NhbGU9emhfQ04mc3RhdGlzdGljcz0lN0IlMjJhcHBJZCUyMiUzQTElMkMlMjJwbGF0Zm9ybSUyMiUzQTMlMkMlMjJ2ZXJzaW9uJTIyJTNBJTIyNi4xMy4wJTIyJTJDJTIyYWJ0ZXN0JTIyJTNBJTIyJTIyJTdEJnRzPScgKyB0cyArJyZzaWduPTRhMDg2NDVjMjk5NGViNjkyYWMwY2ZiMGJkNzU2OWM2JztcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsX2NvZGUgPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQse1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOmNvbnRlbnRfdHlwZX0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTpsX2JvZHlfdHh0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhsX2NvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrbF9jb2RlLmRhdGEudG9hc3Q7XFxuICAgICAgICAgICAgICAgIH0sICksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5oqV5biBJyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKGNvaW5fdXJsKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdHMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50X3R5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04JztcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjX2JvZHlfdHh0ID0gJ2FjY2Vzc19rZXk9JyArIGdldFZhcignYWNjZXNzX2tleScpICsgJyZhaWQ9JyArIGdldFZhcignYWlkJykgKyAnJmFwcGtleT0xZDhiNmU3ZDQ1MjMzNDM2JmF2dHlwZT0xJmJ1aWxkPTYxMzA0MDAmY19sb2NhbGU9emhfQ04mY2hhbm5lbD1tYXN0ZXImZnJvbT03JmZyb21fc3BtaWQ9dG0ucmVjb21tZW5kLjAuMCZtb2JpX2FwcD1hbmRyb2lkJm11bHRpcGx5PTEmcGxhdGZvcm09YW5kcm9pZCZzX2xvY2FsZT16aF9DTiZzZWxlY3RfbGlrZT0xJnNwbWlkPW1haW4udWdjLXZpZGVvLWRldGFpbC4wLjAmc3RhdGlzdGljcz0lN0IlMjJhcHBJZCUyMiUzQTElMkMlMjJwbGF0Zm9ybSUyMiUzQTMlMkMlMjJ2ZXJzaW9uJTIyJTNBJTIyNi4xMy4wJTIyJTJDJTIyYWJ0ZXN0JTIyJTNBJTIyJTIyJTdEJnRzPScgKyB0cyArJyZ1cGlkPTAmc2lnbj04YWJiZGRkODdhNmJkODJlMWU0MmNiM2NmZmQzMmJiOSc7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgY19jb2RlID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0LHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOnsnQ29udGVudC1UeXBlJzpjb250ZW50X3R5cGV9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6Y19ib2R5X3R4dCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICBsb2coY19jb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mipXkuoYx5Liq5biBJztcXG4gICAgICAgICAgICAgICAgfSwgKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBcXG5cXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVwLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIHZhciBiYWRnZVR5cGUgPSBlcFtpXVsnYmFkZ2VUeXBlJ10gPT09IDAgPyAoKGVwW2ldWydiYWRnZSddICE9ICcnKSA/ICfwn5KwJyA6ICfwn4aTJykgOiAn8J+Toic7XFxuICAgICAgICAgICAgICAgIHZhciBiYWRnZSA9IGVwW2ldWydiYWRnZSddID8gJ1snICsgZXBbaV1bJ2JhZGdlJ10gKyAnXScgOiAnJ1xcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAnWDUnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9ICd4NVJ1bGU6Ly8nICsganggKyAnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcCcgKyBlcFtpXVsnaWQnXSArICdAJztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXAnICsgZXBbaV1bJ2lkJ107XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIHBpY3MgPSAoZXBbaV1bJ2NvdmVyJ10uaW5kZXhPZignOicpICE9IC0xKSA/IGVwW2ldWydjb3ZlciddIDogJ2h0dHBzOicgKyBlcFtpXVsnY292ZXInXTtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlcyA9IChlcFtpXVsndGl0bGVGb3JtYXQnXSkgPyBlcFtpXVsndGl0bGVGb3JtYXQnXSA6IGVwW2ldWyd0aXRsZSddO1xcbiAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IChlcFtpXVsnbG9uZ1RpdGxlJ10pID8gZXBbaV1bJ2xvbmdUaXRsZSddIDooIGVwW2ldWydsb25nX3RpdGxlJ10/ZXBbaV1bJ2xvbmdfdGl0bGUnXTonJyk7XFxuICAgICAgICAgICAgICAgIGV2YWxQcml2YXRlSlMoXFxcImlmbnpxYU5xTlJrTjZOcUcwZlp4NU1leTQ3N09zTUpPVGJUZDlTYWpNa2ZMSzh0STFsWnord2lmKzlaSUFkVDJOS1hPeE1MMzR0UHNKY2JGZ1lxMkl3ZXFSV2xjdG5ubjQ2ZEpIR0FvUTZTK1R4c1dKWjNFTGJVQUVmMVZ2MnhvTXJrbDNLb3FXdG8xdTd1OVNVdk50ajF1eEM0ZW51WklFM0lPVkpZZnVsclNJdXFuTUU4K2hsVjM4QlN0WkNrSmYwaVczSGRGMmlzQkhFeFRaZjRscEMyS2Y0dUFzUGZScVU4TjlqYlA0K3F6UHJZckcrWWFXdCtpbnc5WmFHTmE2MDdGdXZMZ0grNHZaYm1mL3RHblJ6YVF2ZjByaHZQbmZCZUV5YU1Bem1tdkFNeDR1MG80MnJ4SG1OS1N4LzJWWmxJcStScUNaeEpKM2JLY1FINCtGL2QwRzVZbVh5T1BaUk5ZTTdSb0J6OHplUUUvaHFCclViclNkYjNWdzhTRHNFeFUyaFdPRXIvMDUybjc0U0VkV1dkYzM3azlCTGFWUEpyZFBGcTNyK1poOGY2aVdnNk5YQnJCK3RVbEdTVlRqWmZzTEQyckJmcHVQZVFRV2RBRXJRSmhJRk05NVB4aDNTNEJIdFVvZFozRjIybWl0TEVmODZJUG8xOHlyZ0hNV1ZhUWE0dVFBNFpNRFQxYWhNODVrNis3TFRtUHR6Nk9OQXh2eUlUNzVzQ3hTY2swWHNMbGhHOWdWOHJVMGZsRDNlK2lXZWtqazFYeXJtZGNLZkZIR3l2SWZxV0Q2ek1SQWRGSUl5WHhOM3N0YnROaTNiUU1VWmdiWW1tcjNRbGUwakFIb1pSTUhkbDFCclMxc2RtTGVwV3h5SEM4cjZVMzVIbUJRTkhwZHZ6aTc3V0dHcjQ0UTRNZ3Y1UlhiSjllSk9GR3psaHJUc0RRejN3QVNXelM3SnhHOGNrNWZWMHVUUmNqZ0pQRkNJODZleEQ2NFQ4dG1za2VrV1hNdFpVamxOSVRQOVJPUE5LR253enJoRlYyUnZWcU5HMEVGSXNXMVd1YmF0YXNpSjZmWG1CVEYwZ3RNbUJLMWFzM0pIV1JoS3JnWWdGQVNkK0U0S1VBdU1QTHRRYjBmdGx5UWlBVFZzYVJyRnpia3B1WWxNQXMxUDlWaVVqL0V4b1hxQU1hUThaSnpvdHNQdmp3K0tQRk1mbnc4QjlFUWN2WjdjQW9LS082K25EU3lIZU0xZXcvdW9XSDJYSk5HTDFQVWM5czFUVWJhS3RVYlMyNmhXTkdNckd6RzJ1MTZvVGxEZnh6QjdLTGpteUlpQ2hCNzQ2Q08zVG5aelhwNHMrdjEvcmZnUFl5QVNHakVqUk45cU1hejdJbC9tTFBpRVVEYWpyTitBVSs2VVpsU1VLWmFhbXpqLzR0SnRsbXBBM2kxOUQ3SXN3MWtEekh3THNZZm1ITVNra3YvOERKcFAyVkRQRzJGQW9SWmtsUmNjOWVVZGF1eUwrUWhDUnpSQUJxdnB6ZTJJWVVUTU1Ha1dtVzJ6VUZyZDdWU3NzcnkwaldWblA3Q0ovNzFrZ0IxUFk1WW84MXFpOGhYV0ZHL3NrVmkxWVRwYzBWNjVVZ1o2SkxJQjZLcDJPb3M4M29naVNGTURKaXNUMk9FQzZHVXhoYlZYYnFpS1VWakpjVm42L3NRY1R3eSszMndLVHpXVi8wM2gyUm9XZEoybm9sMHVDTUdZOWFEQ1BVYlpXVWVhZkxLOHRJMWxaeit3aWYrOVpJQWRUMkFMU1pvcGl2TU00SFZORjNtWTJYTDFBM2plc0lBdHhEUi92QjgvQUlsL1dMckdMYmtQMlNKeDhCS20xaFNOb2dXeWQ0eloxd2FKcXBOY0xiMGxwZnR6ajNCdzFrZ3lNWXBTL25GNS80ZDUyWkxrR0d6YVVNTzNLeGloUEkwdlY0LzZWZW1mRk9Md3pYa1JXcnhSeWhGeFBNY3NHQTZlQXBIbzFoYzFrOW0xVi9DVnVXV2N5Z3ErUjFwejRhV29xSktwdHZUUnVndjE0aHdKVCs3cndHV2l0T0ZWdUszTjEwYXJRS1ZaNmtUOVVDdkdLNEdSa3VaamwvZGJKZjRBeGFjOEZmTSt0Ty9vS05ZQjg1MGg2Z0NiVG1MM1RXMkV1RnVTRG9ZNXFrTXkyMmkxdTJlS095dFI0U1JMRkw0THYrcEVxZkhjc29MbWo3L3pJVXFPTkNrcGhTRk02ZGZ5ZENHOWM0VjVBc29tOHFPQm91enRnQnpLVUhUMG83MGJRM1VUaXQxN0Jab1ZjcWNiZUpleWR2VzNIQ2FWWnkyd2h3d04zYjE2VkhsLy9INGcwZ2lLZkY1N2hKZTR6aVNWbkYycFdzR3JSNWR6ck8wcGVxd0FnWnRvQkRvL21hTFhob3ptR2ZZQWM3d3pXbWJYUWVKdi9RQnJvdTI3T0tNRkRBWFAvY2p5RUVCZ0RIYjFyMVZYTUNpbVUwd3cyVlgwQ2o1WFYrZjBKNVc1N0tVT1NlQ2pidnIrVlV4cW8xNnh3OWtyOHRuUTJRejVrTUl3S2tNSVBpT0poSjJCQXArSmFYbGdNWElpNnJ6dDdJY1lkYnlib2M3RWpkdk0rc3EwQTVCZ1RMWTZFQzlCbmRIZWhodjBhajl1Tnp2b2p2a2d0OGQyKzV4TVliZFhCR1htZHl0aDVwQXluOG9MQkNXVURiV2U4MC85OWV0MWlIL0dESkVmb0RMRGY5cCtrNCswUWJ1V2RFcXVUTzFqQ0pGNTFoN1R4SGwvVVlhL21Kd3VkMC9ZOEQ0ZkVZWlgvVjNoR3BPRDlSMlptamc0SXJwUHB3ZWZqOHcwd2djZnlMejlaTW1zMVBvTW4wcUNubk0rVnU2bjZzeENsUGI4eVd4S2t6TWgwZXdFNG5Kb2NoV2JEazVyY2ZyRTAya3lrRlhGdHUremo4SEpnQUhNYldWbmpueVhJNzZVZ3FEUmVqQUh5Rm1XbVZLNldoR2s3bTZac0pxakppMkU1MzRlQjBqQVZZZjZKYnM3aEFxSlBnRWxlT2VBT1U0ekpNc0FWcmlzdDYzaVJKTWFFTVRqTzQ5OCthbU1Pcjc4V3JLRHpodzZSZ0IrTzlVaExQSzA0MllFN05mempDYjc5OTg3dTl3UVY0UWNyaHRsS09YY2w4TWJadEgwYm1iTmJBT3VYdUlGNWRySlVyallTd1ZRQkRBYVVhTFllemVTdXZyUXdGU0Nid2VUVUpHejFqN3VCVXEzbWFCNE9mSzJuN0cyTjFmQ0sxZUVhdzkyVW5sVkRPMFRmMUxJSTA4SEZ0c1JJbjZZMXAzczlWK0xKUTlpVWQ1WkcwTHdVOTA0RTc1UHB1VkxST0JZSFM0bXJCM1J2ck1oQVdDNmpkdFNURmtsdW12K2MyRUpScmJVcmpyNEErWTQwa0FOTjFVdDFyZHZNYi8wcFJPSlhWc0RmYy9BeU01bjNDZmx2RFZxU2dQSTlibEhGZTFtWjc1Q21JTFM2S3pkRjBZbDFNVkhpUFcwanZvZG54S1lUcHM4aEpOK2FJK2gxV1JHenJKS1pKaWNBdE5kc1dWaExmclZ4VkVQU2VtOWpHenNBYVdQa1ZCR1JPNmpXMlNXN20rYlZEdlJQYlZwYjZnU0JJOG9DVVlPbzcvUTBIYWJxbTdSUE1jc0dBNmVBcEhvMWhjMWs5bTFYdzUwSVJ2bjdWeVBKK3JEQjFHYWRLOXFvN0l1RHYxdC9Xano3ZHZwNGQ0UnB1R3Z5NFpRazlQd1Y1dFR0a1gyREdBdFE4ZmFpdkVJSDcwT2hrcHVDdG5Ia2JvelFDOUJZTHhVZGZJTHZQOHFFOTdyWllrK1hjcWE3aHZsQkc2bjNKZzU2czRycVdlWk5sQi9jRzU1Q1N0UlBFSTZSanJBRHB5L3NZblE0UkVONlVsQXltU3JlczJZWFJMVGFFY1lXa0pXOTgyQy9zZllzY2tiaXpsT3NZc0tBRnAzWHNnRFFSRGFhbyt5SE5KQXBlVlJLMW03aDE4cS9LYlF4RmNwbkRiR1gyTVJ1Y1U1UFVQSnBreXZDbEV2Uks3azF4Mm4wemF6QVE0Z1pmRHdzTS9pbnZNUVRLZVFldHpJcjYvWndUekhMQmdPbmdLUjZOWVhOWlBadFYvcUhNNXRZVTFod1JTcmQ4NUtIMk1wZHQ3TVB0V2ZxNE5kT1lXYk5oUFA4eGxMNkxnSEFXbE15QkRac3VHeUh6RTh4eXdZRHA0Q2tlaldGeldUMmJWYjJXSE0xTVZQZU5QMkp6V0tuVTBIUXViYW8vNDFQcUloK0NXQlIzSFVGWVJ4aXBFQlFiS0EvbUFwQk4xcEhDd0JQTWNzR0E2ZUFwSG8xaGMxazltMVVDUjY3aHY1OWVtNG5WUFptalU1azFCOWJJZHpJbDdXckoxZi9TVW13dnE4anlNR204VEpYaUtnRkV5NjIyZW5rVHpITEJnT25nS1I2TllYTlpQWnRWQ3JsUm5nVEVKQnFWMml5czZxeUxUSjFDcGJuNTFjS3RlNThlTktSa2xDRHVYRmMzR3FsWTBDZUc2RjNRTVZ1cUJNRU45cFhzbW53S3hzRTY1L2ErZWxxZWZMS3lsN0krT1p2K0tCSG5ZWDc5V2pCYjMyQkdoR1puZDFRa3kyeEhQdmY0U3grL3RZTjJ6bmNtcFFxU3d4UE1jc0dBNmVBcEhvMWhjMWs5bTFWVXVVR3hST1pTM0tDRTk2bmFVRjc0bVJtcmRPL2pwdElIZ01qQytHNlY3QnhaVEppdE5FTHN0MEZDSituK0FNWVR6SExCZ09uZ0tSNk5ZWE5aUFp0VkJDUytMZllxclNCR0hrZVlsYXFnYndJTXhFZDFPVlB5Smh1VnhBVW5EdHJLVzBDbnZ1cDh6QTNDVStpTVRsVFJmMk5mSmN4ZWo4ZGlqWTV5M2YxblJXUkVPcFltcllYenRmc1I4UitZK1RlWXhBZXV1N3Nnd3VpVENHcXhjeHE4Y1hGMk8remxhWGVtNUh3SE5XOUcvLzNlbnVrNk1LMkJ0dENRQkhyaXBZb0dBMSt2VStkSi9GK0xSMWlCTHQ0eS9Gc1B4ckpQMXh2djAwWkZrWGdjeUdFaWF1YW1Hd1lkbG4zLzgrdEZnWFJJODJyOWdjc0dYVHlnSU9URjl5aUYwZ29DaDROTnlyYTVTUHpTd2dvbjNjc24rTmhBUVJKdlNGc0xYTEg4Ri9mQ1NDandsL3BpMkdHWTRuQlVlazN3SzZjUUdXNkIrb08zaktTVzlRRUcwL09nSFRieXhiUjlFc3BvbG1ObEIvR3FTTDRLT01ZYXdOQzB2Z1ZaZEpCNWJIbHV0Z2puVHZ2N29ZeWZlYSttSU8xakdiWStqVThWTHgxWVpTSEVOU1RqaTI3NFFqMktPckZFenBYcWlRMkpLWmxtRGhiOUxKOE94Vkx4OEFISGNQNm55V09oaVljRnVRTUZ3ZjlVUklHSHJ6cmp6cHBmN2dzS25KbHRUYmtsbDFsc2ZVSFNkNVpTQUY2UUUzYjhvYjV4NUhtWkZVUVJrVTk0UGxDSHRXNUVGd3dIcUx3czF3M0d4ekdNaHRxZkU4eHl3WURwNENrZWpXRnpXVDJiVmVFN3lNN0x4cXc3NzEvM25OYjc4T3ZwNHViRmNpUnY2QnZYY1Y5MVgvd2xBYjY2Z0RxeXhtN0MrakRsODVQTEp3ZElSQmtlcTBVcG1LUnZsakFHVUlvTFAwb0NuakZ4UFZpbnF6bUFtUHlseFJmb3ZWWmM1UlRHY3psOHRpQ0lRRktlN2hQbno4UFVlVHhMMkdVUzk3NTN4UDB1Z2JKTkgwa3RNRkdxWExRck4yMGh5eGp5RktOT3k1R1FMMWRsMzJWOTZjalZRZXVsMms1WElST1BhV3hsNjBqNVh6NkdQVzB2c0NJcEsreGl5eXZMU05aV2Mvc0luL3ZXU0FIVTl1U3dCTXZQeGdqMlRXT0Q5MU5abDVLb0pjK3p1M2pwVlFCRWd5SEd4dGk3U3owT3lzVXRaZ0xFSVc5YWRTZnlpMncvc3JtVG04SDBNNkt6R3RuU2M4YTBWVndUMnFRb25uZ1NSNUs2UVQyc0VaSnJCczVCOFpEQmtqYWZRNHNScFJFYU9ObklWd2xEOURwb2x1L1F1a1RKR2ZlcW1udm01UGZOeHROSkZGTldQTzl5NWNnU3VDdlVQOCs2QVdhRTVlaW5PSTdVQXpsZDhISVMrTFUwN29MaER1Vklhc0k3QWdiZlljYnY4eVpCeXl2TFNOWldjL3NJbi92V1NBSFU5bHNWVmdPS2FXNEk3UUFrYVNPdGRWUG02SDZ3dmx5WEVDQU52aENNR2VsRnl5dkxTTlpXYy9zSW4vdldTQUhVOXQ1WGJxUGZMRzVBQVVFdnJjaFM0V1poY2xmTjBWcTAwMUVDLytVQVhhR1M1YjBoa0pWT1VDdEN3c3pWdXlBZVVNc3J5MGpXVm5QN0NKLzcxa2dCMVBiTEs4dEkxbFp6K3dpZis5WklBZFQycG05S21tMC9OdytxcC8ydHhwUjhoc1dwbVlFUjJpdGVyNW1STTJwN2t3enN4dFdsS2J4QXJVUWZCRElHcVdrRnl5dkxTTlpXYy9zSW4vdldTQUhVOW5NeUdMSUhsQjJRUklZNkR0QWc0bHpMSzh0STFsWnord2lmKzlaSUFkVDJnRHZsNEpOLzEwaXFOZ1p3QURXdXhUVE41NmwweG53d2xkM243RnNCcGNEKzRsK3dhTThqdW14Qnp3bWY1K2Jjd3VUNDBJUVh3dXhEUTYyQ1VoY3Y3cmNWRy9JYnVjeHg2OGZpTDlkUFFIWFpSRWhjZGV4MUtNTGMrZzRJK2pjeHl5dkxTTlpXYy9zSW4vdldTQUhVOWdUdFZPRkY2a3dhbm1zR1NkSDJpYUdjMVluNUs3a0g1VlhENnl0Z3E2bzNKMVFrNkQ3ZGE4dGRHUlp5bGxxV0RzNlVNdnNPL1BPdzVDY3I3OXNKemlkYmszNTQybWpMUkt0eWlFZXl2MXRzNnlhZXArQ3FxMnVFTm9wZzBEenhUenFIMXI4M0p5dXZRczRzVlhrcjNDZkxLOHRJMWxaeit3aWYrOVpJQWRUMnlBSXVNd0R4dklmVUlHOU9adURzSTlxQW5CVzFGaTB1ZGZiVDloZzZVNEI0bGxSdnVLeVM3WkVSekViZS9KZnY4Z05FZDhUU1lCOSs3MnZ5cGlsMnJUYjd5NldGbFpRYTArZkI0NFRFNnF6eGt4UG95MW9jeS9UTHQ2OHlNRm4vVmlXOUQxNlF2Ui9yN3VGYnRzWk9FUTdMdkgwakxKdHVqM0ZUeVFaRFFqQkxLeHNmdjMxN0o4cWVWbGxkMVQrZkhoYWZWclVJL0tBclhncTJKZE4wVUNQeTBkTnJpc3lzS09NdVVNUDRGcFlsSWxDeEF0OVFGYUlhSW9VdGxBYWlZQ3EzUW5NK1JZd2gvNnRKdzNjU3FobUhXazlyQmFqNzFOa0FDVXZPWHI0RFVYOUFaVzJtNGtvaVhkMVhKdUUyS3g3ekVqVzBhbWdmekJaREpvL1lLUitqU0J2cEk4QUJZNjJKTk5VTGEzbXRxV0RPMVhnTDJVbHNkT0RKbEl2VFVxM3oybHQraW51a0xsbGFtWmVmQitKdnFzcXYrTmVZYk9KeHhHbXRuUDdxOXBWMHJSbWYrMU5lKzFPK1I1VXNyYUpLWFBVeVlSYjB5N29vVGtMRzFoNGhHQWdFdFJqVE9rdGtYbkY1QlpUR005UnlRUnVhd2MwYkJPbXRIWDFoY1Q3cnQzdERrc1hKZmZsUHl5c1d6aFBYTE0rRmR4NWRDWVJ5WnpDL3hpeVpyZDFSb1BaMnUrMFF0YnNLMnVnUnB6UTQ2OWxuZHBKaHJ3YWV5aCtvSEJTOEZ5dytzL1hCMzFNSDlLSkFvMEpFQVlaSzIyNTJpRVlIZ28zWHVOMVo4YjlJNWJvb1B6dkwwMUlpK2tBYWhzc3J5MGpXVm5QN0NKLzcxa2dCMVBhanJ1cVkvYkw2djEyMDAybWE2MFN6WmhUbnl5UVpkWDlNNTJvQ0FraWoyL1lOdStIcFg2NzlkbFpTK1dhaHVRRWpqdjQvUk1hSlNmU0tERFI2eWx4TmhNWXdna3pGcFdRVFEwR3FMcWZ3TElJelZzMmdSM05PT3dzbDl5a2FDeGlmRTQ1T1NMUWFZK3NFQjIxTFhLZjJSV0lxYWJLaTdWbEJXdVZxeksvTXhiQ21qS1BXS1VGcEp6YTgwZ01YVW5GNEltM3lxRWZ0MXJmc0tVN1NnNmU0aFpxelJtYlFZZHZFN2NlekYrZjh4Y0Q2eVJja3hPUmRHNnJQT0JLaURNZmc2M2VIdlppVWp1bFBFNUl2SkR4b0tCTlh1bDBhZ09lMnBJSVNjbXNIS0FnVEZGamJ0YkNmZTFUaitpeDJHVVROd3JIVXpxWUozSXF4eUh0T2FyMkhGMW1MNUsvdXBTWTN6VDBiS2pjSHdjc3J5MGpXVm5QN0NKLzcxa2dCMVBaUHhkK3pYQmhJbGg4cHY0eVVyWGJNZ29zTU5pWURCYlVabUd2VVZCOVkvVXE1UXlZUjhqQmEzVDZxcXFkOVBjREdqclRJNlliaEVhNG10aXZWRjFuMUo5ZlVFY1NIV3ZrOGZweW53K0JrWU9lemhJWXdiaGNYcktKTjNYajRYQUEvanQ2SDMyNTRGYzRtUm91N2RZbFl5eXZMU05aV2Mvc0luL3ZXU0FIVTlrS0FyVUtWRjJPbUFFT3RSUFRMb1VyTEs4dEkxbFp6K3dpZis5WklBZFQyaVZTbjJYNk9LOTBSZkVxamtDL3JJU1l6Lzd1Y3A2YU0zVDE5Y0pweEVySExLOHRJMWxaeit3aWYrOVpJQWRUMnNNaWRzSjUvOCtVK1pMWG9va3RTNy9abmEwMmZ2QWhKZ245Z1JqU3p3QzlkQ0J5b1V0OXBZWFBsTnVkZjdoNkJwejZxd1d2TUducjFmWllhMDdiZnI4c3J5MGpXVm5QN0NKLzcxa2dCMVBhanZ1Y3pyUVFVMEkyVUFhOFVKZFB1TWpCSHpZbVdPQm1qbDhLaDIzK1Q2cmx3V1JWZ0Y0N0hHeXdWblZ6cEdDYk9sREw3RHZ6enNPUW5LKy9iQ2M0bkpmanJndDZFblBqWFovbkNKTVB2V002VU12c08vUE93NUNjcjc5c0p6aWR3WjQ1Q1hOR3grUzhPTlJ1MGNRWXlFOWNzejRWM0hsMEpoSEpuTUwvR0xKbXQzVkdnOW5hNzdSQzF1d3JhNkJHbk5EanIyV2Qya21HdkJwN0tINmdjd3k3WW1NSEFEa3N1bU41SHJqbFY0TXNyeTBqV1ZuUDdDSi83MWtnQjFQWjk2dmVGZjVvMDZIbEZoRmtFYmpWTmFIaFZXZ0g0ZlRNdGt1ejViRG4rQUhnbmpwd3lHL2hJTDUwR0lQWG8rdnJZVEFhQnlBQlFXbzVQMXBWdUtEWmNcXFwiKVxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZXMgKyBiYWRnZVR5cGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IHBpY3MsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBiYWRnZStkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBtb2RlID09ICfnm7Tpk74nID8gdHJ1ZV91cmwgOiBwdXJsICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMidcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwdXRWYXIoJ2FpZCcsU3RyaW5nKHYuYWlkKSk7XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6bW9kZSA9PSAn55u06ZO+JyA/IGdldEhlYWQoJ+ebtOmTvicpIDogJ+ebtOmTvicsIC8vJ+ebtOmTvuaSreaUvicsXFxuICAgICAgICAgICAgICAgIHVybDogJ+ebtOmTvicrbW9kZV91cmwsLy9sYXp5MSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG1vZGUgPT0gJ3loYycgPyBnZXRIZWFkKCfokKTngavomasnKSA6ICfokKTngavomasnLFxcbiAgICAgICAgICAgICAgICB1cmw6ICd5aGMnICsgbW9kZV91cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChnZXRWYXIoJ2xpa2VfdHlwZScpPT09J+W8gOWQrycpe1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn54K56LWeJyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKGxpa2VfdXJsKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdHMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50X3R5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04JztcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsX2JvZHlfdHh0ID0gJ2FjY2Vzc19rZXk9JyArIGdldFZhcignYWNjZXNzX2tleScpICsgJyZhaWQ9JyArIGdldFZhcignYWlkJykgKyAnJmFwcGtleT0xZDhiNmU3ZDQ1MjMzNDM2JmJ1aWxkPTYxMzA0MDAmY19sb2NhbGU9emhfQ04mY2hhbm5lbD1tYXN0ZXImbGlrZT0wJm1vYmlfYXBwPWFuZHJvaWQmcGxhdGZvcm09YW5kcm9pZCZzX2xvY2FsZT16aF9DTiZzdGF0aXN0aWNzPSU3QiUyMmFwcElkJTIyJTNBMSUyQyUyMnBsYXRmb3JtJTIyJTNBMyUyQyUyMnZlcnNpb24lMjIlM0ElMjI2LjEzLjAlMjIlMkMlMjJhYnRlc3QlMjIlM0ElMjIlMjIlN0QmdHM9JyArIHRzICsnJnNpZ249NGEwODY0NWMyOTk0ZWI2OTJhYzBjZmIwYmQ3NTY5YzYnO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxfY29kZSA9IEpTT04ucGFyc2UocmVxdWVzdChpbnB1dCx7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6Y29udGVudF90eXBlfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OmxfYm9keV90eHQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOidQT1NUJ1xcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGxfY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytsX2NvZGUuZGF0YS50b2FzdDtcXG4gICAgICAgICAgICAgICAgfSwgKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmipXluIEnLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoY29pbl91cmwpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0cyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRfdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLTgnO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNfYm9keV90eHQgPSAnYWNjZXNzX2tleT0nICsgZ2V0VmFyKCdhY2Nlc3Nfa2V5JykgKyAnJmFpZD0nICsgZ2V0VmFyKCdhaWQnKSArICcmYXBwa2V5PTFkOGI2ZTdkNDUyMzM0MzYmYXZ0eXBlPTEmYnVpbGQ9NjEzMDQwMCZjX2xvY2FsZT16aF9DTiZjaGFubmVsPW1hc3RlciZmcm9tPTcmZnJvbV9zcG1pZD10bS5yZWNvbW1lbmQuMC4wJm1vYmlfYXBwPWFuZHJvaWQmbXVsdGlwbHk9MSZwbGF0Zm9ybT1hbmRyb2lkJnNfbG9jYWxlPXpoX0NOJnNlbGVjdF9saWtlPTEmc3BtaWQ9bWFpbi51Z2MtdmlkZW8tZGV0YWlsLjAuMCZzdGF0aXN0aWNzPSU3QiUyMmFwcElkJTIyJTNBMSUyQyUyMnBsYXRmb3JtJTIyJTNBMyUyQyUyMnZlcnNpb24lMjIlM0ElMjI2LjEzLjAlMjIlMkMlMjJhYnRlc3QlMjIlM0ElMjIlMjIlN0QmdHM9JyArIHRzICsnJnVwaWQ9MCZzaWduPThhYmJkZGQ4N2E2YmQ4MmUxZTQyY2IzY2ZmZDMyYmI5JztcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjX2NvZGUgPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQse1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOmNvbnRlbnRfdHlwZX0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTpjX2JvZHlfdHh0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhjX2NvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aKleS6hjHkuKrluIEnO1xcbiAgICAgICAgICAgICAgICB9LCApLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIGlmICh2LnZpZGVvcyAhPSAxKSB7XFxuICAgICAgICAgICAgICAgIHZhciBydXJsID0gcHVybCArICc/cD0nICsgcFtpXS5wYWdlO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBydXJsID0gcHVybFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGFydCxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vZ2l0ZWUuY29tL0NoZXJpc2hSeC9pbWFnZXdhcmVob3VzZS9yYXcvbWFzdGVyL2ltYWdlLzEzMDk2NzI1ZmU1NmNlOWNmNjQzYTBlNGNkMGMxNTljLmdpZicsXFxuICAgICAgICAgICAgICAgIHVybDogLyptb2RlID09ICdYNScgPyAneDVSdWxlOi8vJyArIGp4ICsgcnVybCArICdAJyArIGxhenkgOiAoKi9tb2RlID09ICfnm7Tpk74nID8gbGF6eTEgOiBydXJsICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHYudmlkZW9zICE9IDEgPyAndGV4dF9jZW50ZXJfMScgOiAnYXZhdGFyJ1xcbiAgICAgICAgICAgIH0pO1xcblxcblxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIFxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICB9KTtcXG4gICAgaWYgKGdldFZhcigncmVwbHlfdHlwZScpPT09J+W8gOWQrycpe1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICc8c3Ryb25nPicgKyAn4oCc4oCc6K+E6K665Yy64oCd4oCdJyArIChnZXRWYXIoJ2xhYmVsJykgPT0gJ+ivhOiuuicgPyAn4oCc4oCcIOKKmeKAneKAnScgOiAn4oCc4oCcIOKKleKAneKAnScpICsgJzwvc3Ryb25nPicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2xhYmVsJywgZ2V0VmFyKCdsYWJlbCcpPT0n6K+E6K66Jz8n5YWz6ZetJzon6K+E6K66Jyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly8nK2dldFZhcignbGFiZWwnLCfor4TorronKVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxzdHJvbmc+JyArICfigJzigJzmjqjojZDljLrigJ3igJ0nICsgKGdldFZhcignbGFiZWwnKSA9PSAn5o6o6I2QJyA/ICfigJzigJwg4oqZ4oCd4oCdJyA6ICfigJzigJwg4oqV4oCd4oCdJykgKyAnPC9zdHJvbmc+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcignbGFiZWwnLCBnZXRWYXIoJ2xhYmVsJyk9PSfmjqjojZAnPyflhbPpl60nOifmjqjojZAnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovLycrZ2V0VmFyKCdsYWJlbCcsJ+aOqOiNkCcpXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbiAgICB9KTtcXG5cXG4gICAgXFxuICAgIGlmIChnZXRWYXIoXFxcImxhYmVsXFxcIikgPT0gJ+ivhOiuuicpIHtcXG4gICAgICAgIHZhciByZWx5ID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvcmVwbHkvbWFpbj9vaWQ9JyArIHYuYWlkICsgJyZ0eXBlPTEnLCB7fSkpO1xcbiAgICAgICAgdmFyIGNvdW50cyA9IHJlbHlbJ2RhdGEnXVsnY3Vyc29yJ11bJ2FsbF9jb3VudCddO1xcbiAgICAgICAgdmFyIHJlcGxpZXMgPSByZWx5LmRhdGEucmVwbGllcztcXG4gICAgICAgIGZvciAodmFyIHggaW4gcmVwbGllcykge1xcbiAgICAgICAgICAgIHZhciByZXBsaWVzeCA9IHJlcGxpZXNbeF07XFxuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSByZXBsaWVzW3hdLmNvbnRlbnQubWVzc2FnZTtcXG4gICAgICAgICAgICB2YXIgbWVtYmVyID0gcmVwbGllc1t4XS5tZW1iZXI7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG1lbWJlci51bmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBtZW1iZXIuYXZhdGFyLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJzxzbWFsbD48c3Ryb25nPicgKyBtZXNzYWdlICsgJzwvc3Ryb25nPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHJlcGx5ID0gcmVwbGllc1t4XS5yZXBsaWVzO1xcbiAgICAgICAgICAgIGZvciAodmFyIHogaW4gcmVwbHkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIG1lc3MgPSByZXBseVt6XS5jb250ZW50Lm1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgIHZhciBtZW0gPSByZXBseVt6XS5tZW1iZXIudW5hbWU7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJzxzbWFsbD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnICsgbWVtICsgJzonICsgbWVzcyArICc8L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9IFxcblxcbiAgICBpZiAoZ2V0VmFyKFxcXCJsYWJlbFxcXCIpID09ICfmjqjojZAnKSB7XFxuICAgICAgICBmb3IgKHZhciByIGluIHJlbGF0ZWQpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcmVsYXRlZFtyXS50aXRsZSxcXG4gICAgICAgICAgICAgICAgaW1nOiByZWxhdGVkW3JdLnBpYyxcXG4gICAgICAgICAgICAgICAgZGVzYzogcmVsYXRlZFtyXS5kZXNjLFxcbiAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3VybD1odHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXcvZGV0YWls77yf77yfYWlkPe+8hu+8hmJ2aWQ9JyArIHJlbGF0ZWRbcl0uYnZpZCArICcjaW1tZXJzaXZlVGhlbWUjJyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8yJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIH1cXG59IGNhdGNoIChlKSB7fVxcblxcbnJlcy5kYXRhID0gZDtcXG5zZXRSZXN1bHQocmVzKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumhtemdoi3lhbPms6gxXCIsXCJwYXRoXCI6XCJnejFcIixcInJ1bGVcIjpcImpzOlxcbnZhciByZXMgPSB7fTt2YXIgZCA9IFtdO1xcbnZhciBpZCA9IE1ZX1VSTC5zcGxpdCgnbWlkPScpWzFdO1xcbnZhciBzdXJsID0gTVlfVVJMO1xcbnZhciBjb2RlID0gZmV0Y2goc3VybCx7fSk7XFxudmFyIHltID0gSlNPTi5wYXJzZSgne1xcXCJteScrY29kZS5zcGxpdCgne1xcXCJteScpWzFdLnNwbGl0KCd9fTsnKVswXSsnfX0nKTtcXG5cXG52YXIgZXAgPSB5bVsnbGlzdCddWydnZXRGb2xsb3dMaXN0LXBhZ2UtbWlkLScraWRdWydyZXN1bHQnXTtcXG5mb3IgKCB4IGluIGVwKXtcXG4gIHZhciB5dXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FyYy9zZWFyY2jvvJ/vvJ9taWQ9JytlcFt4XS5taWQrJ++8hu+8hnBzPTMw77yG77yGdGlkPTDvvIbvvIZrZXl3b3JkPe+8hu+8hmpzb25wPWpzb25w77yG77yGcG49ZnlwYWdl77yG77yGb3JkZXI9cHViZGF0ZSc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgIHRpdGxlOmVwW3hdLnVuYW1lLFxcbiAgICAgICBpbWc6ZXBbeF0uZmFjZSxcXG4gICAgICAgdXJsOidoaWtlcjovL3BhZ2UvZ3oyP3VybD0nK3l1cmwsXFxuICAgICAgIGNvbF90eXBlOidpY29uX3JvdW5kXzQnXFxuICAgICAgIH0pO1xcbn1cXG5yZXMuZGF0YSA9IGQ7XFxuc2V0UmVzdWx0KHJlcyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpobXpnaIt5YWz5rOoMlwiLFwicGF0aFwiOlwiZ3oyXCIsXCJydWxlXCI6XCJqczpcXG52YXIgcmVzID0ge307dmFyIGQgPSBbXTtcXG5jb25zdCBoZWFkQ29sb3I9XFxcIiMzNThjY2RcXFwiO1xcbnZhciBqc29uID0ge307XFxuZXZhbCgnanNvbj0nICsgZmV0Y2goTVlfVVJMLHt9KSk7XFxuZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLmRhdGEubGlzdC52bGlzdC5sZW5ndGg7IGkrKylcXG57XFxuIHZhciByID0ge307XFxuIHZhciBqID0ganNvbi5kYXRhLmxpc3Qudmxpc3RbaV07XFxuIHZhciB0ID0gTnVtYmVyKGouY3JlYXRlZCkqMTAwMDtcXG4gXFxuIC8v5pe26Ze05oiz6L2s5o2i5pa55rOVXFxuIC8qXFxuZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKG5TKSB7IFxcbiAgICAgdmFyIHNzcyA9IG5ldyBEYXRlKHBhcnNlSW50KG5TKSkudG9Mb2NhbGVTdHJpbmcoKS5zdWJzdHIoMCwxNyk7XFxuICAgICB2YXIgWU1EID0gc3NzLnNwbGl0KCfml6UnKVswXS5yZXBsYWNlKCflubQnLCctJykucmVwbGFjZSgn5pyIJywnLScpO1xcbiAgICAgcmV0dXJuIChZTUQpXFxufVxcbiovXFxuZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKG5TKSB7IFxcbnZhciBkYXRlID0gbmV3IERhdGUoblMpO1xcbnZhciBZWSA9IGRhdGUuZ2V0RnVsbFllYXIoKSsnLSc7IFxcbnZhciBNTSA9IChkYXRlLmdldE1vbnRoKCkgKyAxIDwgMTAgPyAnMCcgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgOiBkYXRlLmdldE1vbnRoKCkgKyAxKSsnLSc7IFxcbnZhciBERCA9IChkYXRlLmdldERhdGUoKSA8IDEwID8gJzAnICsgKGRhdGUuZ2V0RGF0ZSgpKSA6IGRhdGUuZ2V0RGF0ZSgpKTsgXFxudmFyIHRpbWUgPSBZWSArIE1NICsgREQ7XFxucmV0dXJuIHRpbWVcXG59XFxuLy/ml7bpl7TmiLPovazmjaJcXG52YXIgdGltZSA9IGdldExvY2FsVGltZSh0KTtcXG5cXG5pZiAoai5wbGF5PjEwMDAwKVxcbiAgICB2YXIgcGxheSA9IChqLnBsYXkvMTAwMDApLnRvRml4ZWQoMSkrJ+S4hyc7XFxuZWxzZVxcbiAgICB2YXIgcGxheSA9IGoucGxheTtcXG5cXG52YXIgcGljcyA9IChqLnBpYy5pbmRleE9mKCc6JykhPS0xKT9qLnBpYzonaHR0cHM6JyArIGoucGljO1xcblxcbiBpZiAoai5sZW5ndGghPVxcXCIwMDowMFxcXCIpe1xcbiAgICBkLnB1c2goe1xcbiAgICAgcGljX3VybCA6IHBpY3MsXFxuICAgICB1cmwgOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD91cmw9aHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3L2RldGFpbO+8n++8n2FpZD3vvIbvvIZidmlkPScgKyBqLmJ2aWQrJyNpbW1lcnNpdmVUaGVtZSMnLFxcbiAgICAgdGl0bGUgOiBqLnRpdGxlLFxcbiAgICAgY29sX3R5cGUgOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICBkZXNjIDogJ+aXtumVv++8micgKyBqLmxlbmd0aCArICcgIOaSreaUvumHj++8micgKyBwbGF5ICsgJyAg5pel5pyf77yaJyArIHRpbWVcXG4gICAgXFxuICAgIH0pO1xcbn1cXG59XFxucmVzLmRhdGEgPSBkO1xcbnNldFJlc3VsdChyZXMpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLku6PnoIHlnZct5pCc57Si5LiA57qnXCIsXCJwYXRoXCI6XCJzXCIsXCJydWxlXCI6XCJ0cnl7XFxudmFyIHJlcyA9IHt9O3ZhciBkID0gW107XFxudmFyIGNvZGUgPSBnZXRSZXNDb2RlKCk7XFxudmFyIHhzPUpTT04ucGFyc2UoY29kZS5zcGxpdCgndmlkZW9cXFwiLFxcXCJkYXRhXFxcIjonKVsxXS5zcGxpdCgnfV0nKVswXSsnfV0nKTtcXG4vL2lmKE1ZX1VSTC5zcGxpdCgncGFnZT0nKVsxXT09JzEmcGFnZXNpemU9MjAnKXtcXG52YXIgcGFnZSA9IE1ZX1VSTC5zcGxpdCgncGFnZT0nKVsxXS5zcGxpdCgnJnBhZ2VzaXplPScpWzBdO1xcbiAgdHJ5e1xcbiAgdmFyIHc9XFxuSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9zZWFyY2gvdHlwZT9rZXl3b3JkPScrTVlfVVJMLnNwbGl0KCdrZXl3b3JkPScpWzFdLnNwbGl0KCcmJylbMF0rJyZwYWdlPScrcGFnZSsnJnNlYXJjaF90eXBlPWJpbGlfdXNlciZvcmRlcj10b3RhbHJhbmsmcGFnZXNpemU9MjAnLHt9KSkuZGF0YS5yZXN1bHQ7XFxuICAgIGZvcihpaT0wO2lpPHcubGVuZ3RoJiZpaTwyO2lpKyspe1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgdGl0bGU6J3Vw77yaJyt3W2lpXS51bmFtZSxcXG4gICAgICBpbWc6J2h0dHBzOicrd1tpaV0udXBpYyxcXG4gICAgICBkZXNjOiflhbPms6jvvJonK3dbaWldLmZhbnMsXFxuICAgICAgY29udGVudDon6KeG6aKR5pWw77yaJyt3W2lpXS52aWRlb3MsXFxuICAgICAgdXJsOlxcbidoaWtlcjovL3BhZ2Uvc3M/dXJsPWh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FyYy9zZWFyY2jvvJ/vvJ9taWQ9Jyt3W2lpXS5taWQrJ++8hu+8hnBzPTMw77yG77yGdGlkPTDvvIbvvIZrZXl3b3JkPe+8hu+8hmpzb25wPWpzb25w77yG77yGcG49ZnlwYWdl77yG77yGb3JkZXI9cHViZGF0ZSMnK3dbaWldLnVuYW1lKycjJyxcXG4gICAgICAgICB9KTtcXG4gICAgfVxcbiAgfWNhdGNoKGUpe1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgdGl0bGU6J+KAmOKAmOaJvuS4jeWIsOS9oOaDs+imgeeahOWViu+8jOimgeS4jeaNouS4quWFs+mUruivje+8n+KAmeKAmScsXFxuICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnXFxuICAgICAgfSk7XFxuICB9XFxudmFyIGZhbiA9IEpTT04ucGFyc2UoY29kZS5zcGxpdCgnbWVkaWFfYmFuZ3VtaVxcXCIsXFxcImRhdGFcXFwiOicpWzFdLnNwbGl0KCd9LHtcXFwicmVzdWx0X3R5cGUnKVswXSk7XFxuICAgZm9yICggeCBpbiBmYW4pe1xcbiAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgdGl0bGU6ZmFuW3hdLnRpdGxlLnJlcGxhY2UoLzxlbSBjbGFzcz1cXFwia2V5d29yZFxcXCI+fDxcXFxcL2VtPi9nLCcnKSxcXG4gICAgICAgICAgIGltZzpmYW5beF0uY292ZXIsXFxuICAgICAgICAgICBkZXNjOmZhblt4XS5kZXNjLFxcbiAgICAgICAgICAgY29udGVudDpmYW5beF0uY3YucmVwbGFjZSgvPGVtIGNsYXNzPVxcXCJrZXl3b3JkXFxcIj58PFxcXFwvZW0+L2csJycpLFxcbiAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvZGV0YWlsP3VybD0nK2Zhblt4XS5nb3RvX3VybCsnI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMV9sZWZ0X3BpYydcXG4gICAgICAgICAgIH0pO1xcbiAgIH1cXG52YXIgZmFuMiA9IEpTT04ucGFyc2UoY29kZS5zcGxpdCgnbWVkaWFfZnRcXFwiLFxcXCJkYXRhXFxcIjonKVsxXS5zcGxpdCgnfSx7XFxcInJlc3VsdF90eXBlJylbMF0pO1xcbiAgIGZvciAoIHggaW4gZmFuMil7XFxuICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICB0aXRsZTpmYW4yW3hdLnRpdGxlLnJlcGxhY2UoLzxlbSBjbGFzcz1cXFwia2V5d29yZFxcXCI+fDxcXFxcL2VtPi9nLCcnKSxcXG4gICAgICAgICAgIGltZzpmYW4yW3hdLmNvdmVyLFxcbiAgICAgICAgICAgZGVzYzpmYW4yW3hdLmRlc2MsXFxuICAgICAgICAgICBjb250ZW50OmZhbjJbeF0uY3YucmVwbGFjZSgvPGVtIGNsYXNzPVxcXCJrZXl3b3JkXFxcIj58PFxcXFwvZW0+L2csJycpLFxcbiAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvZGV0YWlsP3VybD0nK2ZhbjJbeF0uZ290b191cmwrJyNpbW1lcnNpdmVUaGVtZSMnLFxcbiAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzFfbGVmdF9waWMnXFxuICAgICAgICAgICB9KTtcXG4gICB9XFxuLy99XFxuXFxuIGZvciAoIHggaW4geHMpe1xcbiAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgdGl0bGU6eHNbeF0udGl0bGUucmVwbGFjZSgvPGVtIGNsYXNzPVxcXCJrZXl3b3JkXFxcIj58PFxcXFwvZW0+L2csJycpLFxcbiAgICAgICAgICAgaW1nOidodHRwOicreHNbeF0ucGljLFxcbiAgICAgICAgICAgZGVzYzp4c1t4XS5kZXNjcmlwdGlvbixcXG4gICAgICAgICAgIGNvbnRlbnQ6eHNbeF0uYXV0aG9yLFxcbiAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvZGV0YWlsP3VybD1odHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXcvZGV0YWls77yf77yfYWlkPe+8hu+8hmJ2aWQ9Jyt4c1t4XS5idmlkKycjaW1tZXJzaXZlVGhlbWUjJyxcXG5jb2xfdHlwZTonbW92aWVfMV9sZWZ0X3BpYydcXG4gICAgICAgICAgIH0pO1xcbiAgICB9XFxuXFxucmVzLmRhdGEgPSBkO1xcbnNldFJlc3VsdChyZXMpO31jYXRjaChlKXtcXG52YXIgcmVzID0ge307dmFyIGQgPSBbXTtcXG52YXIga2V5d29yZCA9IE1ZX1VSTC5zcGxpdCgna2V5d29yZD0nKVsxXS5zcGxpdCgnJnBhZ2U9JylbMF07XFxudmFyIHVybCA9ICdodHRwczovL2FwcC5iaWxpYmlsaS5jb20veC92Mi9zZWFyY2gvdHlwZT9hcHBrZXk9MWQ4YjZlN2Q0NTIzMzQzNiZidWlsZD02MjcwMjAwJmNfbG9jYWxlPXpoX0NOJmNoYW5uZWw9eGlhb21pJmhpZ2hsaWdodD0xJmtleXdvcmQ9JytrZXl3b3JkKycmbW9iaV9hcHA9YW5kcm9pZCZvcmRlcj10b3RhbHJhbmsmcGxhdGZvcm09YW5kcm9pZCZwbj0xJnBzPTIwJnNfbG9jYWxlPXpoX0NOJnN0YXRpc3RpY3M9JTdCJTIyYXBwSWQlMjIlM0ExJTJDJTIycGxhdGZvcm0lMjIlM0EzJTJDJTIydmVyc2lvbiUyMiUzQSUyMjYuMjcuMCUyMiUyQyUyMmFidGVzdCUyMiUzQSUyMiUyMiU3RCZ0cz0xNjIzMDc2MTQwJnR5cGU9MiZ1c2VyX3R5cGU9MCZzaWduPTUwNjYyMTZmZWJiMjhhNjE5ODEyZTg4ZTVmZjFhMDM0JztcXG52YXIgY29kZSA9IEpTT04ucGFyc2UocmVxdWVzdCh1cmwse30pKTtcXG52YXIgbGlzdCA9IGNvZGUuZGF0YS5pdGVtcztcXG5mb3IgKGxldCB4IG9mIGxpc3Qpe1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOngudGl0bGUsXFxuICAgIGltZzp4LmNvdmVyLFxcbiAgICBkZXNjOnguc2lnbixcXG4gICAgdXJsOlxcbidoaWtlcjovL3BhZ2Uvc3M/dXJsPWh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FyYy9zZWFyY2g/bWlkPScreC5wYXJhbSsn77yG77yGcHM9MzDvvIbvvIZ0aWQ9MO+8hu+8hmtleXdvcmQ977yG77yGanNvbnA9anNvbnDvvIbvvIZwbj1meXBhZ2XvvIbvvIZvcmRlcj1wdWJkYXRlIycreC50aXRsZSsnIycrZ2V0VmFyKCd1YScpLFxcbiAgICBjb2xfdHlwZTonbW92aWVfMV9sZWZ0X3BpYyd9KTtcXG59XFxuc2V0UmVzdWx0KGQpO31cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzFfdmVydGljYWxfcGljXCIsXCJuYW1lXCI6XCLpobXpnaIt5pCc57Si5LqM57qnXCIsXCJwYXRoXCI6XCJzc1wiLFwicnVsZVwiOlwianM6XFxudmFyIGpzb24gPSB7fTtcXG5ldmFsKCdqc29uPScgKyBnZXRSZXNDb2RlKCkpO1xcbnZhciByZXMgPSB7fTtcXG52YXIgZCA9IFtdO1xcbmlmIChNWV9VUkwuaW5kZXhPZigncG49MSYnKSE9LTEpe1xcbmQucHVzaCh7XFxudGl0bGU6J+KAnOKAnOWFs+azqOKAneKAnScsXFxudXJsOidoaWtlcjovL2VtcHR5IycrTVlfVVJMLnNwbGl0KCcjJylbMV0rJyYmJytNWV9VUkwuc3BsaXQoJ21pZD0nKVsxXS5zcGxpdCgnJicpWzBdK2BAbGF6eVJ1bGU9LmpzOmlucHV0PWlucHV0LnNwbGl0KCcjJylbMV07dmFyIHBpYyA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FjYy9pbmZvP21pZD0nK2lucHV0LnNwbGl0KFxcXCImJlxcXCIpWzFdKycmanNvbnA9anNvbnAnLHt9KSkuZGF0YS5mYWNlO2lmKCFnZXRWYXIoJ2xiMicpLmluY2x1ZGVzKGlucHV0LnNwbGl0KCcmJicpWzFdLnNwbGl0KCcmJicpWzBdKSl7dmFyIHhyPWdldFZhcignbGIyJykrJ1xcXFxcXFxcbicraW5wdXQrJyMjJytwaWM7d3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL3VwLmpzXFxcIix4cik7J3RvYXN0Oi8v5YWz5rOo5oiQ5YqfJ31lbHNleyd0b2FzdDovL+W5tOi9u+S6uu+8jOiAl+WtkOWwvuaxgSd9YCxcXG5jb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxufSk7XFxufVxcblxcbmZvciAodmFyIGkgPSAwOyBpIDwganNvbi5kYXRhLmxpc3Qudmxpc3QubGVuZ3RoOyBpKyspXFxue1xcbiB2YXIgciA9IHt9O1xcbiB2YXIgaiA9IGpzb24uZGF0YS5saXN0LnZsaXN0W2ldO1xcbiB2YXIgdCA9IE51bWJlcihqLmNyZWF0ZWQpKjEwMDA7XFxuIFxcbiAvL+aXtumXtOaIs+i9rOaNouaWueazlVxcbmZ1bmN0aW9uIGdldExvY2FsVGltZShuUykgeyBcXG4gICAgIHZhciBzc3MgPSBuZXcgRGF0ZShwYXJzZUludChuUykpLnRvTG9jYWxlU3RyaW5nKCkuc3Vic3RyKDAsMTcpO1xcbiAgICAgdmFyIFlNRCA9IHNzcy5zcGxpdCgn5pelJylbMF0ucmVwbGFjZSgn5bm0JywnLScpLnJlcGxhY2UoJ+aciCcsJy0nKTtcXG4gICAgIHJldHVybiAoWU1EKVxcbn1cXG5cXG4vL+aXtumXtOaIs+i9rOaNolxcbnZhciB0aW1lID0gZ2V0TG9jYWxUaW1lKHQpO1xcblxcbmlmIChqLnBsYXk+MTAwMDApXFxuICAgIHZhciBwbGF5ID0gKGoucGxheS8xMDAwMCkudG9GaXhlZCgxKSsn5LiHJztcXG5lbHNlXFxuICAgIHZhciBwbGF5ID0gai5wbGF5O1xcblxcbnZhciBwaWNzID0gKGoucGljLmluZGV4T2YoJzonKSE9LTEpP2oucGljOidodHRwczonICsgai5waWM7XFxuXFxuIHIucGljX3VybCA9IHBpY3M7XFxuIHIudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/dXJsPWh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldy9kZXRhaWzvvJ/vvJ9haWQ977yG77yGYnZpZD0nK2ouYnZpZCsnI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgIFxcblxcbiByLnRpdGxlID0gai50aXRsZTtcXG4gci5kZXNjID0gJ+aXtumVv++8micgKyBqLmxlbmd0aCArICcgIOaSreaUvumHj++8micgKyBwbGF5ICsgJyAg5pel5pyf77yaJyArIHRpbWU7XFxuIGlmIChqLmxlbmd0aCE9XFxcIjAwOjAwXFxcIil7ZC5wdXNoKHIpfTtcXG59XFxucmVzLmRhdGEgPSBkO1xcbnNldFJlc3VsdChyZXMpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLku6PnoIEt6aKE5aSE55CGXCIsXCJwYXRoXCI6XCJ5Y2xcIixcInJ1bGVcIjpcInB1dFZhcjIoJ3VhJywnO2dldDt1dGYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCA3LjDvvJvvvJsgd3YgbGl0ZSBiYWlkdWJveGFwcCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc4LjAuMzkwNC45NiBNb2JpbGUgU2FmYXJpLzUzNy4zNiBUNy8xMC4zIFNlYXJjaENyYWZ0LzIuNi4yIChCYWlkde+8m++8myBQMSA3LjApfScpO1xcblxcbnB1dFZhcigna2V5JyxmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9iaWxpL2tleS50eHQnKSk7XFxuXFxucHV0VmFyKCdYNScsXFxcIkBsYXp5UnVsZT0uanM6dmFyIGp4ID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvYmlsaS91cF9qeGNhY2hlLnR4dCcse30pO3JlZnJlc2hYNVdlYlZpZXcoangraW5wdXQpOyd0b2FzdDovL+aSreaUvuS4rSdcXFwiKTtcXG5cXG5pZiAoIWZldGNoKCdoaWtlcjovL2ZpbGVzL2JpbGkv5aSa5ZCI5LiALnR4dCcpKSB7XFxuICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2JpbGkv5aSa5ZCI5LiALnR4dCcsJ1VQ5Li7Jyk7XFxuICAgfVxcblxcbmlmICghZmV0Y2goJ2hpa2VyOi8vZmlsZXMvYmlsaS/mlLbol48udHh0JykpIHtcXG4gICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvYmlsaS/mlLbol48udHh0Jywn6KeG6aKRJyk7XFxuICAgfVxcblxcbmlmIChmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy91cC5qc1xcXCIsIHt9KT09Jycpe1xcbiAgICBpZiAoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvYmlsaS91cC50eHRcXFwiLCB7fSkhPScnKXtcXG4gICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL3VwLmpzXFxcIixmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL3VwLnR4dFxcXCIsIHt9KSk7XFxuICAgIH1cXG4gICAgZWxzZXtcXG4gICAgICB2YXIgcGljID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYWNjL2luZm8/bWlkPTEwMzI1Njg4MCZqc29ucD1qc29ucCcse30pKS5kYXRhLmZhY2U7XFxuICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL3VwLmpzXFxcIiwgXFxcIuWMl+WfjiYmMTAzMjU2ODgwIyNcXFwiK3BpYyk7XFxuICAgICAgfVxcbn1cXG5cXG5pZiAoIWZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2JpbGkvdXBfY2FjaGUudHh0XFxcIiwge30pKSB7XFxuICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvYmlsaS91cF9jYWNoZS50eHRcXFwiLCBcXFwiMTAzMjU2ODgwXFxcIik7XFxufVxcblxcbnB1dFZhcjIoJ2xiMicsZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvanMvdXAuanNcXFwiLHt9KSk7XFxuXFxucHV0VmFyKFxcXCLop6PmnpDlj6NcXFwiLGBoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczp2YXIgZCA9IFtdO2QucHVzaCh7ZGVzYzogJzIwMCcsdXJsOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvYmlsaS91cGp4Lmh0bWwnLGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnfSk7dmFyIHRpdGxlcyA9IGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2JpbGkvdXBqeC50eHRcXFwiLCB7fSkuc3BsaXQoL1xcXFxcXFxcbi8pO2Zvcih2YXIgaSA9IDA7IGkgPCB0aXRsZXMubGVuZ3RoOyBpKyspe3ZhciB0ID0gdGl0bGVzW2ldLnNwbGl0KFxcXCImJlxcXCIpO2QucHVzaCh7dGl0bGU6ZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvYmlsaS91cF9qeGNhY2hlLnR4dFxcXCIse30pID09IHRbMV0gPyB0WzBdICsgXFxcIuKAmOKAmO+8iOW9k+WJje+8ieKAmeKAmVxcXCIgOiB0WzBdLGRlc2M6dFsxXSx1cmw6dFsxXSArICdAbGF6eVJ1bGU9LmpzOnB1dFZhcjIoXFxcInVpZFxcXCIsaW5wdXQpO3dyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL3VwX2p4Y2FjaGUudHh0XFxcIixpbnB1dCk7YmFjaygpO1xcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCInLGNvbF90eXBlOiAndGV4dF8xJ30pO31zZXRSZXN1bHQoZCk7YCk7XFxuXFxuaWYgKCFmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL3VwangudHh0XFxcIiwge30pKSB7XFxuICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvYmlsaS91cGp4LnR4dFxcXCIsIFxcXCLlhajnvZFWSVAmJmh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XFxcXG7liqDpgJ8mJmh0dHBzOi8vd3d3LmN1YW4ubGEvbTN1OC5waHA/dXJsPVxcXCIpO1xcbn1cXG5cXG5cXG5sZXQgbG9jYWxIdG1sMiA9IGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2JpbGkvdXBqeC5odG1sXFxcIiwge30pO1xcbmxldCBnaXRIdG1sMiA9IGZldGNoKFxcXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvWnJ1aXJ5L2hpa2Vydmlldy9odG1sL2ppZXhpLmh0bWxcXFwiLCB7fSkucmVwbGFjZSgvamlleGlcXFxcL2ppZXhpL2csXFxcImJpbGkvdXBqeFxcXCIpO1xcbmlmICghbG9jYWxIdG1sMikge1xcbiAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2JpbGkvdXBqeC5odG1sXFxcIiwgZ2l0SHRtbDIpO1xcbiAgdmFyIHRpdGxlcyA9IGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2JpbGkvdXBqeC50eHRcXFwiLCB7fSk7XFxuICB2YXIgdCA9IHRpdGxlcy5zcGxpdChcXFwiJiZcXFwiKVsxXTtcXG4gIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9iaWxpL3VwX2p4Y2FjaGUudHh0XFxcIix0KTtcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLku6PnoIEt5o6o6I2QXCIsXCJwYXRoXCI6XCJmZWVkXCIsXCJydWxlXCI6XCJ2YXIgdXJsID0gJ2h0dHBzOi8vYXBwLmJpbGliaWxpLmNvbS94L2ludGwvZmVlZC9pbmRleD9hY2Nlc3Nfa2V5PScrZ2V0VmFyKFxcXCJhY2Nlc3Nfa2V5XFxcIikrJyZhdXRvcGxheV9jYXJkPTImYnVpbGQ9NjIyNTMwMCZjX2xvY2FsZT16aF9DTiZjaGFubmVsPW1hc3RlciZjb2x1bW49MiZkZXZpY2VfbmFtZT0mZGV2aWNlX3R5cGU9MCZmbHVzaD04JmZudmFsPTQ2NCZmbnZlcj0wJmZvcmNlX2hvc3Q9MCZmb3Vyaz0xJmd1aWRhbmNlPTAmaHR0cHNfdXJsX3JlcT0wJm1vYmlfYXBwPWFuZHJvaWQmbmV0d29yaz13aWZpJnBsYXRmb3JtPWFuZHJvaWQmcGxheWVyX25ldD0xJnB1bGw9ZmFsc2UmcW49ODAmc19sb2NhbGU9emhfQ04mc3RhdGlzdGljcz0lN0IlMjJhcHBJZCUyMiUzQTElMkMlMjJwbGF0Zm9ybSUyMiUzQTMlMkMlMjJ2ZXJzaW9uJTIyJTNBJTIyNi4yMi41JTIyJTJDJTIyYWJ0ZXN0JTIyJTNBJTIyJTIyJTdEJztcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UocmVxdWVzdCh1cmwse30pKS5kYXRhLml0ZW1zO1xcbmZvciAobGV0IHggb2YgbGlzdCl7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6eC50aXRsZSxcXG4gICAgZGVzYzp4LmNvdmVyX2xlZnRfMV9jb250ZW50X2Rlc2NyaXB0aW9uK1xcXCIgXFxcIit4LmNvdmVyX2xlZnRfMl9jb250ZW50X2Rlc2NyaXB0aW9uK1xcXCIgIFxcXCIreC5jb3Zlcl9yaWdodF90ZXh0LFxcbiAgICBwaWM6eC5jb3ZlcitcXFwiQFJlZmVyZXI9aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgIHVybDpcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeWTlOWTqeKThyZ1cmw9aHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3L2RldGFpbO+8n++8n2FpZD1cXFwiK3gucGFyYW0rXFxcIu+8hu+8hmJ2aWQ9XFxcIisnI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLku6PnoIEt5pu05aSaXCIsXCJwYXRoXCI6XCJtb3JlXCIsXCJydWxlXCI6XCJpZiAoTVlfVVJMLnNwbGl0KCcjJylbMV09PScxJykge1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHJ4ID09ICfmjqjojZAnID8gZ2V0SGVhZChyeCkgOiAn5o6o6I2QJyxcXG4gICAgICAgIHVybDogJ+aOqOiNkCcgKyB3cixcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiByeCA9PSAn5pe25YWJ5py6JyA/IGdldEhlYWQocngpIDogJ+aXtuWFifCfkKUnLFxcbiAgICAgICAgdXJsOiAn5pe25YWJ5py6JyArIHdyLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzMnXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfov73nlaonLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9jb2xsZWN0aW9uP2dyb3VwPeKRoOi/veeVqicsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMydcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcnggPT0gJ+e0ouW8lScgPyBnZXRIZWFkKHJ4KSA6ICfntKLlvJUnLFxcbiAgICAgICAgdXJsOiAn57Si5byVJyArIHdyLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldFZhcignWVMnKSA9PSAn6ZqP5py6JyA/IGdldEhlYWQoJ+maj+acuicpIDogZ2V0SGVhZCgn6aqa57KJJyksXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ1lTJywgZ2V0VmFyKCdZUycpPT0n6ZqP5py6Jz8n6aqa57KJJzon6ZqP5py6Jyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/popzoibItLScrZ2V0VmFyKCdZUycsJ+maj+acuicpXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn6Ieq5a6aVUlEJyxcXG4gICAgICAgIHVybDogYGlucHV0Oi8ve1xcXCJ2YWx1ZVxcXCI6XFxcIlxcXCIsIFxcXCJqc1xcXCI6IFxcXCJ3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYmlsaS9zdGFyaWQudHh0JyxpbnB1dCk7d3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2JpbGkv5aSa5ZCI5LiALnR4dCcsJ1VQ5Li7Jyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/kvaDovpPlhaXnmoTmmK8nK2lucHV0XFxcIiwgXFxcImhpbnRcXFwiOiBcXFwi6K+35Zyo5LiL5pa56L6T5YWlVUlEXFxcXG7kuI3nn6XpgZPmgI7kuYjmn6XvvJ9i56uZ54K55byA6Ieq5bex55qE5L+h5oGv77yM6ZW/5oyJdWlk5Y2z5Y+v77yM6K+35aGr5YWl57qv5pWw5a2XXFxcIn1gLFxcbiAgICAgICAgZGVzYzogJ+KAmOKAmOW3sui+k+WFpTog4oCZ4oCZJytnZXRIZWFkKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2JpbGkvc3RhcmlkLnR4dCcpKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn54K56LWea2V5JyxcXG4gICAgICAgIHVybDogYGlucHV0Oi8ve1xcXCJ2YWx1ZVxcXCI6XFxcIlxcXCIsIFxcXCJqc1xcXCI6IFxcXCJ3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYmlsaS9hY2Nlc3Nfa2V5LnR4dCcsaW5wdXQpO3dyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9iaWxpL+WkmuWQiOS4gC50eHQnLCdVUOS4uycpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5L2g6L6T5YWl55qE5pivJytpbnB1dFxcXCIsIFxcXCJoaW50XFxcIjogXFxcIuivt+WcqOS4i+aWuei+k+WFpWtleSjnlKjkuo7ngrnotZ7mipXluIEpXFxcXG7kuI3nn6XpgZPmgI7kuYjmipPvvJ/pgqPlsLHnrpfkuoZcXFwifWAsXFxuICAgICAgICBkZXNjOiAn4oCY4oCY5bey6L6T5YWlOiDigJnigJknK2dldEhlYWQoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYmlsaS9hY2Nlc3Nfa2V5LnR4dCcpKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn6Kej5p6Qa2V5JyxcXG4gICAgICAgIHVybDogYGlucHV0Oi8ve1xcXCJ2YWx1ZVxcXCI6XFxcIlxcXCIsIFxcXCJqc1xcXCI6IFxcXCJ3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYmlsaS9rZXkudHh0JyxpbnB1dCk7d3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2JpbGkv5aSa5ZCI5LiALnR4dCcsJ1VQ5Li7Jyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/kvaDovpPlhaXnmoTmmK8nK2lucHV0XFxcIiwgXFxcImhpbnRcXFwiOiBcXFwi6K+35Zyo5LiL5pa56L6T5YWla2V5KOeUqOS6juino+aekClcXFxcbuS4jeefpemBk+aAjuS5iOaKk++8n+mCo+Wwseeul+S6hlxcXCJ9YCxcXG4gICAgICAgIGRlc2M6ICfigJjigJjlt7LovpPlhaU6IOKAmeKAmScrZ2V0SGVhZChmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9iaWxpL2tleS50eHQnKSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOifor4TorrrljLo6IOKAnOKAnOW3sicrIGdldFZhcigncmVwbHlfdHlwZScpLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0VmFyKCdyZXBseV90eXBlJywgZ2V0VmFyKCdyZXBseV90eXBlJyk9PSflhbPpl60nPyflvIDlkK8nOiflhbPpl60nKTtyZWZyZXNoUGFnZSgpO3dyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9iaWxpL3NldHRpbmcudHh0JyxnZXRWYXIoJ3JlcGx5X3R5cGUnKSsnLCcrZ2V0VmFyKCdsaWtlX3R5cGUnKSk7J3RvYXN0Oi8v5beyJytnZXRWYXIoJ3JlcGx5X3R5cGUnKTtcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfngrnotZ4m5oqV5biBOiDigJzigJzlt7InK2dldFZhcignbGlrZV90eXBlJyksXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2xpa2VfdHlwZScsIGdldFZhcignbGlrZV90eXBlJyk9PSflhbPpl60nPyflvIDlkK8nOiflhbPpl60nKTtyZWZyZXNoUGFnZSgpO3dyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9iaWxpL3NldHRpbmcudHh0JyxnZXRWYXIoJ3JlcGx5X3R5cGUnKSsnLCcrZ2V0VmFyKCdsaWtlX3R5cGUnKSk7J3RvYXN0Oi8v5beyJytnZXRWYXIoJ2xpa2VfdHlwZScpO1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXG4gICAgfSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Luj56CBLeaWsOeVqlwiLFwicGF0aFwiOlwibmV3YmdtXCIsXCJydWxlXCI6XCJpZiAoTVlfVVJMLnNwbGl0KCcjJylbMV09PScxJykge1xcblxcbiAgICBsZXQgdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2MvYXBwL3RpbWVsaW5lP2FjY2Vzc19rZXk9JmFwcGtleT0xZDhiNmU3ZDQ1MjMzNDM2JmJ1aWxkPTYxMzA0MDAmY19sb2NhbGU9emhfQ04mY2hhbm5lbD1tYXN0ZXImZmlsdGVyX3R5cGU9MCZtb2JpX2FwcD1hbmRyb2lkJm5pZ2h0X21vZGU9MCZwbGF0Zm9ybT1hbmRyb2lkJnNfbG9jYWxlPXpoX0NOJnN0YXRpc3RpY3M9JTdCJTIyYXBwSWQlMjIlM0ExJTJDJTIycGxhdGZvcm0lMjIlM0EzJTJDJTIydmVyc2lvbiUyMiUzQSUyMjYuMTMuMCUyMiUyQyUyMmFidGVzdCUyMiUzQSUyMiUyMiU3RCZ0cz0xNjM1OTUyODQwJnNpZ249NmU0ZGY0NTQyZDM4ZWVlMmZhYmYyMTI4ODViOTBjNjQnO1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIHNvdXJjZV9jb2RlID0gSlNPTi5wYXJzZShyZXF1ZXN0KHVybCwge30pKTtcXG4gICAgICAgIHZhciBkYXRlbGluZSA9IFt7XFxuICAgICAgICAgICAgXFxcImNvZGVcXFwiOiBzb3VyY2VfY29kZS5yZXN1bHQuZGF0YVs0XSxcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCLliY3ml6VcXFwiLFxcbiAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIwXFxcIlxcbiAgICAgICAgfSx7XFxuICAgICAgICAgICAgXFxcImNvZGVcXFwiOiBzb3VyY2VfY29kZS5yZXN1bHQuZGF0YVs1XSxcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCLmmKjml6VcXFwiLFxcbiAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIxXFxcIlxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIFxcXCJjb2RlXFxcIjogc291cmNlX2NvZGUucmVzdWx0LmRhdGFbNl0sXFxuICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwi5LuK5pelXFxcIixcXG4gICAgICAgICAgICBcXFwiaWRcXFwiOiBcXFwiMlxcXCJcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBcXFwiY29kZVxcXCI6IHNvdXJjZV9jb2RlLnJlc3VsdC5kYXRhWzddLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuaYjuaXpVxcXCIsXFxuICAgICAgICAgICAgXFxcImlkXFxcIjogXFxcIjNcXFwiXFxuICAgICAgICB9LHtcXG4gICAgICAgICAgICBcXFwiY29kZVxcXCI6IHNvdXJjZV9jb2RlLnJlc3VsdC5kYXRhWzhdLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuWQjuaXpVxcXCIsXFxuICAgICAgICAgICAgXFxcImlkXFxcIjogXFxcIjRcXFwiXFxuICAgICAgICB9XTtcXG4gICAgICAgIGlmICghZ2V0VmFyKCdpZCcpKSB7XFxuICAgICAgICAgICAgcHV0VmFyKCdpZCcsICcyJyk7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgaWQgPSBnZXRWYXIoJ2lkJyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpZCA9PSAnMCcgPyBnZXRIZWFkKCfliY3ml6UnKSA6ICfliY3ml6UnLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcignaWQnLCAnMCcpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8vc3VjY2VzcyEnXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfNSdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaWQgPT0gJzEnID8gZ2V0SGVhZCgn5pio5pelJykgOiAn5pio5pelJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2lkJywgJzEnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL3N1Y2Nlc3MhJ1xcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzUnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGlkID09ICcyJyA/IGdldEhlYWQoJ+S7iuaXpScpIDogJ+S7iuaXpScsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0VmFyKCdpZCcsICcyJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly9zdWNjZXNzISdcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF81J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpZCA9PSAnMycgPyBnZXRIZWFkKCfmmI7ml6UnKSA6ICfmmI7ml6UnLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcignaWQnLCAnMycpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8vc3VjY2VzcyEnXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfNSdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaWQgPT0gJzQnID8gZ2V0SGVhZCgn5ZCO5pelJykgOiAn5ZCO5pelJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2lkJywgJzQnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL3N1Y2Nlc3MhJ1xcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzUnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBsaXN0ID0gZGF0ZWxpbmVbaWRdLmNvZGUuZXBpc29kZXM7XFxuICAgICAgICBmb3IgKGxldCB4IG9mIGxpc3QpIHtcXG4gICAgICAgICAgICBsZXQgdHlwZSA9ICh4LnB1Ymxpc2hlZCA9PSAnMScgPyAn5bey5Y+R5biDJyA6ICfmnKrlj5HluIMnKTtcXG4gICAgICAgICAgICBsb2codHlwZSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogeC50aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmCcgKyB0eXBlICsgJ+KAmeKAmVxcXFxuJyArIHgucHViX2luZGV4ICsgJ1xcXFxu5pu05paw5pe26Ze077yaJyArIGdldEhlYWQoeC5wdWJfdGltZSksXFxuICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/dXJsPScgKyB4LnVybCArICcjaW1tZXJzaXZlVGhlbWUjJyxcXG4gICAgICAgICAgICAgICAgaW1nOiB4LmNvdmVyK1JlZmVyZXIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0SGVhZCgn6ZO+5o6l54K45LqG77yM562J5L+u5aSNJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLku6PnoIEt55Wq5Ymn57Si5byVXCIsXCJwYXRoXCI6XCJzeVwiLFwicnVsZVwiOlwiY29uc3QgeyBDYXRlZ29yaWVzSGVhZGVyIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jYXRlZ29yaWVzLWhlYWRlclxcXCIpXFxuXFxuLyoqXFxuICog6I635Y+W5YiG57G75pWw5o2u5rqQ77yM5Y+v5Yqo5oCB5Y+v6Z2Z5oCB77yM6Ieq5bex5qC55o2u5a6e6ZmF5oOF5Ya15aSE55CGXFxuICogaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2FuaW1lL2luZGV4L1xcbiAqL1xcbmxldCBtQ2F0ZWdvcmllcyA9IHt9XFxubGV0IGNhdEluVmFyID0gZ2V0VmFyKE1ZX1JVTEUudXJsICsgXFxcIiNjYXRlZ29yaWVzXFxcIiwgJycpXFxuaWYgKGdldFZhcihNWV9SVUxFLnVybCArIFxcXCIjY2F0ZWdvcmllc1xcXCIsICcnKSkge1xcbiAgICBtQ2F0ZWdvcmllcyA9IEpTT04ucGFyc2UoY2F0SW5WYXIpXFxufSBlbHNlIHtcXG4gICAgbGV0IGNhdFVybCA9ICdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYW5pbWUvaW5kZXgvJ1xcbiAgICBsZXQgY2F0U3JjID0gcmVxdWVzdChjYXRVcmwpXFxuICAgIC8vIGxvZyhjYXRTcmMpXFxuICAgIGxldCBjYXRSZWdleCA9IC93aW5kb3dcXFxcLl9fSU5JVElBTF9TVEFURV9fPSguKj8pO1xcXFwoZnVuY3Rpb25cXFxcKFxcXFwpXFxcXHsvXFxuICAgIGlmIChjYXRSZWdleC50ZXN0KGNhdFNyYykpIHtcXG4gICAgICAgIC8vIGxvZyhSZWdFeHAuJDEpXFxuICAgICAgICBsZXQgY2F0ZWdvcnkgPSBKU09OLnBhcnNlKFJlZ0V4cC4kMSlcXG4gICAgICAgIGxldCBtRmlsdGVycyA9IGNhdGVnb3J5LmZpbHRlcnM7XFxuICAgICAgICAvLyBsb2cobUZpbHRlcnMpXFxuICAgICAgICBtRmlsdGVycy5tYXAoZmlsdGVyID0+IG1DYXRlZ29yaWVzW2ZpbHRlci5rZXldID0gZmlsdGVyLmxpc3QpXFxuICAgICAgICBsZXQgb3JkZXJzID0gY2F0ZWdvcnkub3JkZXJzXFxuICAgICAgICBsZXQgbU9yZGVycyA9IFtdXFxuICAgICAgICBvcmRlcnMubWFwKG9yZGVyID0+IHtcXG4gICAgICAgICAgICBsZXQgbU9yZGVyID0ge31cXG4gICAgICAgICAgICBtT3JkZXIubmFtZSA9IG9yZGVyLnRpdGxlXFxuICAgICAgICAgICAgbU9yZGVyLnZhbHVlID0gb3JkZXIua2V5XFxuICAgICAgICAgICAgbU9yZGVycy5wdXNoKG1PcmRlcilcXG4gICAgICAgIH0pXFxuICAgICAgICAvLyBsb2cobU9yZGVycylcXG4gICAgICAgIG1DYXRlZ29yaWVzWydvcmRlciddID0gbU9yZGVyc1xcbiAgICB9XFxuICAgIHB1dFZhcihNWV9SVUxFLnVybCArIFxcXCIjY2F0ZWdvcmllc1xcXCIsIEpTT04uc3RyaW5naWZ5KG1DYXRlZ29yaWVzKSlcXG59XFxubGV0IGtleXMgPSBPYmplY3Qua2V5cyhtQ2F0ZWdvcmllcylcXG4vLyBsb2cobUNhdGVnb3JpZXMpXFxuLy8gbG9nKGtleXMpXFxuLyoqXFxuICog57uE5ZCI5b2T5YmN5YiG57G76ZO+5o6lXFxuICovXFxubGV0IHRydWVfdXJsID0gZ2V0VmFyKE1ZX1JVTEUudXJsLCBNWV9VUkwpXFxudHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0PydcXG5mb3IgKGxldCBpdCBvZiBrZXlzKSB7XFxuICAgIGxldCBjYXRfdXJsID0gZ2V0VmFyKE1ZX1JVTEUudXJsICsgXFxcIiNcXFwiICsgaXQsIGl0ID09PSAnb3JkZXJzJyA/ICczJyA6ICctMScpXFxuICAgIHRydWVfdXJsICs9IChjYXRfdXJsID8gJyYnICsgaXQgKyAnPScgKyBjYXRfdXJsIDogJycpXFxufVxcbi8vIGxldCBwYWdlID0gMVxcbmNvbnN0IHBhZ2UgPSBNWV9VUkwuc3BsaXQoJyMnKVsxXVxcbnRydWVfdXJsID0gdHJ1ZV91cmwgK1xcbiAgICAnJnN0PTEmc29ydD0wJnNlYXNvbl90eXBlPTEmcGFnZXNpemU9MjAmdHlwZT0xJyArXFxuICAgICcmcGFnZT0nICsgcGFnZVxcbi8vIGxvZyh0cnVlX3VybClcXG5cXG5jb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcblxcbkNhdGVnb3JpZXNIZWFkZXJcXG4gICAgLnNldFN1YkNhdGVnb3JpZXNJdGVtS2V5KCduYW1lJywgJ3ZhbHVlJylcXG4gICAgLmdldChkLCBtQ2F0ZWdvcmllcywgcGFnZSlcXG4vKipcXG4gKiDojrflj5blvZPliY3liIbnsbvpobXpnaLmupDnoIFcXG4gKi9cXG50cnkge1xcbiAgICB2YXIgc3lsaXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0KHRydWVfdXJsLCB7fSkpLmRhdGEubGlzdDtcXG5cXG4gICAgLyoqXFxuICAgICAqIOWIl+ihqOaVsOaNrua6kFxcbiAgICAgKi9cXG4gICAgZm9yIChsZXQgZGF0YSBvZiBzeWxpc3QpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUgLyorICcvJyArIGRhdGEuaW5kZXhfc2hvdyovICxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLm9yZGVyLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5jb3ZlcitSZWZlcmVyLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/dXJsPScgKyBkYXRhLmxpbmsgKyAnI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJ1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59IGNhdGNoIChlKSB7fVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Luj56CBLeWKqOaAgeWIhuexu+aooeWdl1wiLFwicGF0aFwiOlwiY2F0ZWdvcmllcy1oZWFkZXJcIixcInJ1bGVcIjpcImpzOlxcbi8qKlxcbiAqIOS9v+eUqOivtOaYju+8mlxcbiAqIDEu5o+Q5YmN5bu656uL5aW9IOWIhuexu+aJgOWxnuexu+Wei+WSjOWIhuexu+WIl+ihqCDnmoTlr7nlupTlhbPns7vvvIzljbMgZ2V0IOWHveaVsOS4reeahCBjYXRlZ29yaWVzXFxuICogMi7orr7nva7lrZDliIbnsbvmlbDmja7nmoQga2V577yM6LCD55SoIHNldFN1YkNhdGVnb3JpZXNJdGVtS2V5KHRpdGxlS2V5LCB1cmxLZXkpXFxuICogMy7nhLblkI7osIPnlKggQ2F0ZWdvcmllc0hlYWRlci5nZXQobGF5b3V0LCBjYXRlZ29yaWVzLCBwYWdlKVxcbiAqXFxuICog5pSv5oyB6ZO+5byP6LCD55So77yM5LiA5Y+l6K+d5Y2z5Y+v6LCD55So55Sf5oiQ5YiG57G777yM5Y2z77yaXFxuICogQ2F0ZWdvcmllc0hlYWRlclxcbiAqICAgIC5zZXRTdWJDYXRlZ29yaWVzSXRlbUtleSh0aXRsZUtleSwgdXJsS2V5KVxcbiAqICAgIC5nZXQobGF5b3V0LCBjYXRlZ29yaWVzLCBwYWdlKVxcbiAqXFxuICogQHR5cGUge3tzZXRTdWJDYXRlZ29yaWVzSXRlbUtleTogQ2F0ZWdvcmllc0hlYWRlci5zZXRTdWJDYXRlZ29yaWVzSXRlbUtleSwgZ2V0OiBDYXRlZ29yaWVzSGVhZGVyLmdldCwgY2F0ZWdvcmllc0tleToge3RpdGxlOiBzdHJpbmcsIHVybDogc3RyaW5nfX19XFxuICovXFxubGV0IENhdGVnb3JpZXNIZWFkZXIgPSB7XFxuICAgIGNhdGVnb3JpZXNLZXk6IHtcXG4gICAgICAgIHN1Yl9jYXRlZ29yaWVzOiAnJyxcXG4gICAgICAgIHRpdGxlOiAnJyxcXG4gICAgICAgIHVybDogJycsXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiAxLuiuvue9ruS7juWIhuexu+WIl+ihqOS4reaLv+eahOWtkOWIhuexu+eahOaVsOaNriBrZXnvvIxcXG4gICAgICogICDmoLnmja4ga2V5IOaLv+WIsOaVsOaNruWQju+8jFxcbiAgICAgKiAgIOS8muiHquWKqOi1i+WAvOe7mSBzY3JvbGxfYnV0dG9uIOeahCB7IHRpdGxlOiBpdGVtW3RpdGxlS2V5XSwgdXJsOiBpdGVtW3VybEtleV0gfVxcbiAgICAgKlxcbiAgICAgKiBAcGFyYW0gdGl0bGVfa2V5IHRpdGxlIOeahCBrZXlcXG4gICAgICogQHBhcmFtIHVybF9rZXkgdXJsIOeahCBrZXlcXG4gICAgICovXFxuICAgIHNldFN1YkNhdGVnb3JpZXNJdGVtS2V5IDogKHRpdGxlX2tleSwgdXJsX2tleSkgPT4ge1xcbiAgICAgICAgQ2F0ZWdvcmllc0hlYWRlci5jYXRlZ29yaWVzS2V5LnRpdGxlID0gdGl0bGVfa2V5XFxuICAgICAgICBDYXRlZ29yaWVzSGVhZGVyLmNhdGVnb3JpZXNLZXkudXJsID0gdXJsX2tleVxcbiAgICAgICAgcmV0dXJuIENhdGVnb3JpZXNIZWFkZXI7XFxuICAgIH0sXFxuICAgIHNldFN1YkNhdGVnb3JpZXNLZXk6IChzdWJfY2F0ZWdvcmllc19rZXkpID0+IHtcXG4gICAgICAgIENhdGVnb3JpZXNIZWFkZXIuY2F0ZWdvcmllc0tleS5zdWJfY2F0ZWdvcmllcyA9IHN1Yl9jYXRlZ29yaWVzX2tleVxcbiAgICAgICAgcmV0dXJuIENhdGVnb3JpZXNIZWFkZXI7XFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiAyLuiOt+WPluWIhuexu+WktOmDqFxcbiAgICAgKlxcbiAgICAgKiBAcGFyYW0gbGF5b3V0IOW9k+WJjeeVjOmdou+8jOWNs+W4uOeUqOeahCBkLnB1c2gg55qEIGRcXG4gICAgICogQHBhcmFtIGNhdGVnb3JpZXMg5YiG57G75omA5bGe57G75Z6L5ZKM5YiG57G75YiX6KGo55qE5a+55bqU5YWz57O76KGo77yMXFxuICAgICAqICAgICAgICDlpoLvvJpcXG4gICAgICogICAgICAgIHtcXG4gICAgICogICAgICAgICAgIFxcXCLlubTku71cXFwiOiBbeyBcXFwibmFtZVxcXCI6IFxcXCIyMDIxXFxcIiwgXFxcInZhbHVlXFxcIjogXFxcIjIwMjFcXFwiIH0sIHsgXFxcIm5hbWVcXFwiOiBcXFwiMjAyMFxcXCIsIFxcXCJ2YWx1ZVxcXCI6IFxcXCIyMDIwXFxcIiB9Li4uXSxcXG4gICAgICogICAgICAgICAgIFxcXCLmjpLluo9cXFwiOiBbeyBcXFwibmFtZVxcXCI6IFxcXCLng63luqZcXFwiLCBcXFwidmFsdWVcXFwiOiBcXFwiaG90XFxcIiB9LCB7IFxcXCJuYW1lXFxcIjogXFxcIuaXtumXtFxcXCIsIFxcXCJ2YWx1ZVxcXCI6IFxcXCJ0aW1lXFxcIiB9Li4uXSxcXG4gICAgICogICAgICAgIH1cXG4gICAgICogQHBhcmFtIHBhZ2Ug6aG156CBXFxuICAgICAqIEBwYXJhbSB1cmxMaXN0ZW5lciDpop3lpJblpITnkIYgYnV0dG9uIOeahCB1cmzvvIzpnIDopoEgcmV0dXJuXFxuICAgICAqL1xcbiAgICBnZXQ6IChsYXlvdXQsIGNhdGVnb3JpZXMsIHBhZ2UsIHVybExpc3RlbmVyKSA9PiB7XFxuICAgICAgICAvLyBsb2coY2F0ZWdvcmllcylcXG4gICAgICAgIC8vIOWIhuexu+aJgOWxnuexu+Wei+eahOWIl+ihqO+8jOWmgu+8mlsgXFxcIuW5tOS7vVxcXCIsIFxcXCLmjpLluo9cXFwiIF1cXG4gICAgICAgIGxldCBjYXRlZ29yeV9uYW1lcyA9IE9iamVjdC5rZXlzKGNhdGVnb3JpZXMpXFxuICAgICAgICBsZXQgdHlwZXMgPSBbXVxcbiAgICAgICAgLy8g5qC55o2u5a+55bqU5YWz57O76KGo5ou/5YiG57G75YiX6KGoXFxuICAgICAgICBjYXRlZ29yeV9uYW1lcy5tYXAoY2F0ZWdvcnlfbmFtZSA9PiB7XFxuICAgICAgICAgICAgLy8g6L+Z6YeM5Lya5ou/5YiwIOW5tOS7vSDmjpLluo8uLi4g5YW25Lit5LiA5LiqXFxuICAgICAgICAgICAgdHlwZXMucHVzaChjYXRlZ29yaWVzW2NhdGVnb3J5X25hbWVdKTtcXG4gICAgICAgICAgICAvLyDov5nph4zkuIvpnaLlr7kgdHlwZXMg55qE5YC86L+b6KGM5aSE55CGXFxuICAgICAgICB9KVxcbiAgICAgICAgY2F0ZWdvcmllcyA9IHR5cGVzO1xcbiAgICAgICAgbGV0IGluaXRfY2F0ZSA9IFtdXFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHtcXG4gICAgICAgICAgICBpbml0X2NhdGUucHVzaChcXFwiMFxcXCIpXFxuICAgICAgICB9XFxuXFxuICAgICAgICBjb25zdCBjYXRlX3RlbXBfanNvbiA9IGdldFZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG4gICAgICAgIGlmIChwYXJzZUludChwYWdlKSA9PT0gMSkge1xcbiAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAqIOmBjeWOhuesrCBpbmRleCDlsYLliIbnsbtcXG4gICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgc3ViX2NhdGVnb3J5X25hbWUgPSBjYXRlZ29yeV9uYW1lc1tpbmRleF1cXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzX2tleSA9IENhdGVnb3JpZXNIZWFkZXIuY2F0ZWdvcmllc0tleS5zdWJfY2F0ZWdvcmllc1xcbiAgICAgICAgICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBzdWJfY2F0ZWdvcmllc19rZXkgPyBjYXRlZ29yeVtzdWJfY2F0ZWdvcmllc19rZXldIDogY2F0ZWdvcnk7XFxuICAgICAgICAgICAgICAgIC8vIGxvZyhjYXRlZ29yeSlcXG4gICAgICAgICAgICAgICAgLyoqXFxuICAgICAgICAgICAgICAgICAqIOWcqOesrCBpbmRleCDlsYLliIbnsbvkuK3pgY3ljobor6XlsYLmiYDmnInlrZDliIbnsbtcXG4gICAgICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXRlbVtDYXRlZ29yaWVzSGVhZGVyLmNhdGVnb3JpZXNLZXkudGl0bGVdXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gZXNjYXBlKGl0ZW1bQ2F0ZWdvcmllc0hlYWRlci5jYXRlZ29yaWVzS2V5LnVybF0pXFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsTGlzdGVuZXIpIHVybCA9IHVybExpc3RlbmVyLm9uRGVhbChpdGVtLCBzdWJfY2F0ZWdvcnlfbmFtZSwgdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMwOThBQzFcXFwiPicgKyB0aXRsZSArICc8L3NwYW4+PC9iPicgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnVybCArIFxcXCIjXFxcIiArIHBhcmFtcy5zdWJfY2F0ZWdvcnlfbmFtZSwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcnlfbmFtZTogc3ViX2NhdGVnb3J5X25hbWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgbGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG4kLmV4cG9ydHMuQ2F0ZWdvcmllc0hlYWRlcj1DYXRlZ29yaWVzSGVhZGVyXCJ9XSIsImljb24iOiJodHRwczovL2dpdGVlLmNvbS9DaGVyaXNoUngvaW1hZ2V3YXJlaG91c2UvcmF3L21hc3Rlci9pbWFnZS8xMzA5NjcyNWZlNTZjZTljZjY0M2EwZTRjZDBjMTU5Yy5naWYifQ==
Add Comment
Please, Sign In to add comment