Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_🔥海角社区2023-11-03@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICDwn5Sl5rW36KeS56S+5Yy6IDIwMjMvMTEvMDMKLy8gQG5hbWVzcGFjZSAgICBoa2hqY2RzYWRnZwovLyBAYXV0aG9yICAgICAgam5qdmhzeHN4c3gKLy8gQHZlcnNpb24gICAgICAxLjUuMgovLyBAZGVzY3JpcHRpb24gIPCflKXlhY3otLnnnIvku5jotLnop4bpopHvvIzmn6XnnIvlsIHnpoHotKblj7fkuLvpobXluJblrZDvvIzkuIvovb3op4bpopHvvIzlpI3liLbmkq3mlL7pk77mjqUo5Y2h6aG/5Y+v5Lul5Y676L+F6Zu35pKt5pS+Ke+8jOW4luWtkOaYr+WQpuacieinhumikeWbvueJh+aPkOekuijmoIfpopjliY3nvIAp77yM5oyB5LmF5YyW55m75b2V54q25oCB77yM56C06Kejdmlw5pKt5pS+6Lev57q/77yM6Ieq5Yqo5bGV5byA5biW5a2Q77yM5Y675bm/5ZGK77yMdmlw5qCH6K+GCi8vIEBsaWNlbnNlICAgICAgTUlUCi8vIEBpY29uICAgICAgICAgaHR0cHM6Ly9wb21mMi5sYWluLmxhL2YvZXJlanh0Zm8uaWNvCi8vIEBpbmNsdWRlICAgICAgICAgICAqOi8vaGoqLiovKgovLyBAaW5jbHVkZSAgICAgICAgICAgL3Bvc3QvZGV0YWlscy8KLy8gQGluY2x1ZGUgICAgICAgICAgICo6Ly9oYWkqLiovKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyovcG9zdC9kZXRhaWxzKgovLyBAcmVxdWlyZSAgICAgIGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanF1ZXJ5QDMuNy4xCi8vIEBncmFudCAgICAgICAgR01feG1saHR0cFJlcXVlc3QKLy8gQGdyYW50ICAgICAgICBHTV9yZWdpc3Rlck1lbnVDb21tYW5kCi8vIEBncmFudCAgICAgICAgR01fbm90aWZpY2F0aW9uCi8vIEBncmFudCAgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgIEdNX2FkZFN0eWxlCi8vIEBncmFudCAgICAgICAgR01fb3BlbkluVGFiCi8vIEBncmFudCAgICAgICAgR01fZGVsZXRlVmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9pbmZvCi8vIEBncmFudCAgICAgICAgR01fc2V0Q2xpcGJvYXJkCi8vIEBncmFudCAgICAgICAgR00ueG1sSHR0cFJlcXVlc3QKLy8gQGdyYW50ICAgICAgICB1bnNhZmVXaW5kb3cKLy8gPT0vVXNlclNjcmlwdD09CnZhciB2ZXJzaW9uID0gIjUuNi43IjsKdmFyIGN1cnJlbnRVUkwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKaWYgKGN1cnJlbnRVUkwuaW5kZXhPZigiPyIpICE9PSAtMSkgewogICAgY3VycmVudFVSTCA9IGN1cnJlbnRVUkwuc3Vic3RyaW5nKDAsIGN1cnJlbnRVUkwuaW5kZXhPZigiPyIpKTsKfQp2YXIgbGlzdDsKdmFyIHdpbmRvd1RvcCA9IDA7CnZhciBzdGFydFRpbWVNaWxsaSA9IERhdGUubm93KCk7CnZhciBzdG9wVGltZU1pbGxpID0gMDsKLy8g6YWN572u5o6n5Yi257G7CmNsYXNzIENvbmZpZyB7CiAgICBnZXQoa2V5LCB2YWx1ZSkgewogICAgICAgIHZhciBjb29raWUgPSAkLmNvb2tpZShrZXkpOwogICAgICAgIGlmIChjb29raWUgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIG5ldyBDb25maWcoKS5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoIlJlbmV3IGtleTogIiArIGtleSArICIgOiAiICsgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUuZGVidWcoIlJlYWQga2V5OiAiICsga2V5ICsgIiA6ICIgKyBjb29raWUpOwogICAgICAgIGlmIChjb29raWUgPT09ICJ0cnVlIikgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgIGlmIChjb29raWUgPT09ICJmYWxzZSIpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgcmV0dXJuIGNvb2tpZTsKICAgIH0KIAogICAgZ2V0UyhrZXksIHZhbHVlKSB7CiAgICAgICAgdmFyIGNvb2tpZSA9ICQuY29va2llKGtleSk7CiAgICAgICAgaWYgKGNvb2tpZSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldChrZXksIHZhbHVlKTsKICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygiUmVuZXcga2V5OiAiICsga2V5ICsgIiA6ICIgKyB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgY29uc29sZS5kZWJ1ZygiUmVhZCBrZXk6ICIgKyBrZXkgKyAiIDogIiArIGNvb2tpZSk7CiAgICAgICAgcmV0dXJuIGNvb2tpZTsKICAgIH0KIAogICAgc2V0KHNldEtleSwgc2V0VmFsdWUpIHsKICAgICAgICAkLmNvb2tpZShzZXRLZXksIHNldFZhbHVlLCB7CiAgICAgICAgICAgIHBhdGg6ICcvJywKICAgICAgICAgICAgZXhwaXJlczogMzY1CiAgICAgICAgfSk7CiAgICAgICAgY29uc29sZS5kZWJ1ZygiS2V5IHNldDogIiArIHNldEtleSArICIgOiAiICsgc2V0VmFsdWUpOwogICAgfQogCiAgICBsaXN0ZW5CdXR0b24oZWxlbWVudCwgbGlzdGVuS2V5LCB0cnVlQWN0aW9uLCBmYWxzZUFjdGlvbikgewogICAgICAgICQoZWxlbWVudCkuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsZXQgc3RhdHVzID0gbmV3IENvbmZpZygpLmdldChsaXN0ZW5LZXksIHRydWUpOwogICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJTdGF0dXM6ICIgKyBzdGF0dXMpOwogICAgICAgICAgICBpZiAoc3RhdHVzID09PSAidHJ1ZSIgfHwgc3RhdHVzKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJLZXkgc2V0OiAiICsgbGlzdGVuS2V5ICsgIiA6OiAiICsgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldChsaXN0ZW5LZXksIGZhbHNlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoIktleSBzZXQ6ICIgKyBsaXN0ZW5LZXkgKyAiIDo6ICIgKyB0cnVlKTsKICAgICAgICAgICAgICAgIG5ldyBDb25maWcoKS5zZXQobGlzdGVuS2V5LCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQogCiAgICBsaXN0ZW5CdXR0b25BbmRBY3Rpb24oZWxlbWVudCwgbGlzdGVuS2V5LCB0cnVlQWN0aW9uLCBmYWxzZUFjdGlvbikgewogICAgICAgICQoZWxlbWVudCkuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsZXQgc3RhdHVzID0gbmV3IENvbmZpZygpLmdldChsaXN0ZW5LZXksIHRydWUpOwogICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJTdGF0dXM6ICIgKyBzdGF0dXMpOwogICAgICAgICAgICBpZiAoc3RhdHVzID09PSAidHJ1ZSIgfHwgc3RhdHVzKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJLZXkgc2V0OiAiICsgbGlzdGVuS2V5ICsgIiA6OiAiICsgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldChsaXN0ZW5LZXksIGZhbHNlKTsKICAgICAgICAgICAgICAgIGZhbHNlQWN0aW9uKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJLZXkgc2V0OiAiICsgbGlzdGVuS2V5ICsgIiA6OiAiICsgdHJ1ZSk7CiAgICAgICAgICAgICAgICBuZXcgQ29uZmlnKCkuc2V0KGxpc3RlbktleSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB0cnVlQWN0aW9uKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQp2YXIgY29uZmlnID0gbmV3IENvbmZpZygpOwp2YXIgcHJvZ3Jlc3MgPSAwOwpjbGFzcyBQcm9ncmVzcyB7CiAgICBpbml0KCkgewoJCXNldFRpbWVvdXQoKCk9PnsgaWYoIXVuc2FmZVdpbmRvdy53dF9oYWlqaWFvX3NjcmlwdCkgdGhpcy51cGVsZSh3aW5kb3cpO3JldHVybjt9LDEwMDApO3JldHVybjsKICAgICAgICBwcm9ncmVzcyA9IDA7CiAgICAgICAgTlByb2dyZXNzLnN0YXJ0KCk7CiAgICAgICAgJCgiI2dyZWVuZXJQcm9ncmVzcyIpLnRleHQoIue7v+WMluS4rS4uLiIpOwogICAgICAgICQoIi50b29sYmFyLXNlYXJjaCIpLmhpZGUoKTsKICAgIH0KIAogICAgc2V0UHJvZ3Jlc3MocCkgewogICAgICAgIHByb2dyZXNzID0gcDsKICAgICAgICAkKCIjZ3JlZW5lclByb2dyZXNzIikudGV4dChwcm9ncmVzcyArICIlIik7CiAgICAgICAgTlByb2dyZXNzLnNldChwcm9ncmVzcyAvIDEwMCk7CiAgICAgICAgY29uc29sZS5sb2cocHJvZ3Jlc3MgKyAiJSIpOwogICAgfQogCiAgICBpbmNQcm9ncmVzcyhwKSB7CiAgICAgICAgcHJvZ3Jlc3MgPSBwcm9ncmVzcyArIHA7CiAgICAgICAgcHJvZ3Jlc3MgPSBwcm9ncmVzcyA+IDEwMCA/IDEwMCA6IHByb2dyZXNzOwogICAgICAgICQoIiNncmVlbmVyUHJvZ3Jlc3MiKS50ZXh0KHByb2dyZXNzICsgIiUiKTsKICAgICAgICBOUHJvZ3Jlc3Muc2V0KHByb2dyZXNzIC8gMTAwKTsKICAgICAgICBjb25zb2xlLmxvZyhwcm9ncmVzcyArICIlIik7CiAgICB9CiAKICAgIGRvbmUoKSB7CiAgICAgICAgcHJvZ3Jlc3MgPSAxMDA7CiAgICAgICAgTlByb2dyZXNzLmRvbmUoKTsKICAgICAgICAkKCIjZ3JlZW5lclByb2dyZXNzIikuaHRtbChwcm90ZWN0X3N2ZyArICcgQ1NETkdyZWVuZXIg5q2j5Zyo5a6I5oqk5oKo55qE5rWP6KeI5L2T6aqMJyk7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgJCgiI2dyZWVuZXJQcm9ncmVzcyIpLmZhZGVPdXQoNTAwKTsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICQoIi50b29sYmFyLXNlYXJjaCIpLmZhZGVJbig1MDApOwogICAgICAgICAgICAgICAgaWYgKCFpc0ZpcmVmb3goKSkgewogICAgICAgICAgICAgICAgICAgIC8vIOaPkOekugogICAgICAgICAgICAgICAgICAgIGxldCB0aXBzQ29va2llID0gY29uZmlnLmdldCgic2hvd1RpcCIsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aXBzQ29va2llKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUaXBzKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zZXQoInNob3dUaXAiLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgfSwgMTUwMCk7CiAgICB9CgkKCXVwZWxlKCl7CgkJCWNvbnN0IGxpbmtzc3MgPSAnTktOSEJIS0tMemFIUjBjSE02THk5eVpYTmxkQzE2Wm1ZdWIzTnpMV051TFdOb1pXNW5aSFV1WVd4cGVYVnVZM011WTI5dEwycHpMM0psYkdWaGMyVXZhR0ZwYW1saGJ5NTFjMlZ5TG1welhTakhYamgnCgkJCWNvbnN0IHRpcHNzcyA9ICdMS01NS0xDRFNCSEpVVTRKVGcwSlRsQkpVVTJKVGxESlVGREpVVTJKVGhHSlRrd0pVVTNKVUUwSlVKQkhCQ0pIU0pDU0tNTCcKCQkJY29uc3Qgc3RhcnRzc3MgPSAnTEtNTFNETkZLU0ROSlVVMkpUazNKVUUzSlVVM0pUZzVKVGc0SlVVMkpUbERKVUZESlVVMUpVSTNKVUl5SlVVMUpVSkJKVGxHSlVVMUpVSkRKVGd6SlVWR0pVSkRKVGhESk5DSERTQkhDU0RKQ0tTRCcKCQkJY29uc3QgY2VudGVyc3NzID0gJ0tKTEpGREtKU05GS0pEU0JKVVU0SlVGR0pVSTNKVVUzSlRneUpVSTVKVVUxSlRnM0pVSkNKVVUySlVGRUpVRTBKVVUxSlVFMEpUZzBKVVUxSlVGRkpUZzVKVVU0SlVFekpUZzFKVVUySlRrMkpVSXdKVVUzSlRnNUpUZzRKVVUySlRsREpVRkRLQ1ZGTkNWQ09TVkNNU1ZGTnlWQk1DVTRNU1ZGTkNWQ09DVTRSQ1ZGTlNWQ1JDVkNNU1ZGTlNVNU15VTRSQ2tsTWpBbE1qQm9kSFJ3Y3lVelFTVXlSaVV5Um5KbGMyVjBMWHBtWmk1dmMzTXRZMjR0WTJobGJtZGtkUzVoYkdsNWRXNWpjeTVqYjIwbE1rWnFjeVV5Um5KbGJHVmhjMlVsTWtab1lXbHFhV0Z2TG5WelpYSXVhbk1GQkRLQkRLU0JWS0dTREJHSz0nCgkJCWNvbnN0IHRpcCA9ICdKTktTTkZLRFNKVVUxSlVFMkpUZ3lKVVUySlRsREpUZzVKVVU1SlRrM0pVRkZKVVU1SlVFeUpUazRKVVU0SlVGR0pVSTNKVVU0SlRneEpUazBKVVUzSlVJekpVSkNKVVUxSlVKRkpVRkZKVVUwSlVKR0pVRXhLR3B6ZUd4Zk1UazVOMThwSlRKRFVWRW9NelUxTURJM09UVTFPU2tsTWtNbFJUa2xPRElsUVVVbFJUY2xRVVVsUWpFb2FuTjRiREl3TWpNbE5EQnhjUzVqYjIwcEpORjg5N0ZTQicKCQkJY29uc3QgZW5kc3NzID0gJ0tIRkJKRFNGQkpISlVVMUpVRkZKVGc1SlVVNEpVRXpKVGcxSlVVMUpVRkZKVGhESlVVMkpUZzRKVGt3SlVVMUpUa3dKVGhGSlVVNEpVRkdKVUkzSlVVMUpUZzRKVUkzSlVVMkpUazJKVUl3SlVVNUpVRXhKVUkxSlVVNUpUbEVKVUV5Q0tKU0RLQ0JTS0JDSkQnCgkJCUdNX2FkZFN0eWxlKGAKCQkJQGtleWZyYW1lcyBqLXNob3cgewoJCQkJMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApO30KCQkJCTgwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMS4xKTt9CgkJCQkxMDAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpO30KCQkJfQoJCQkuai1zaG93eyBhbmltYXRpb246IGotc2hvdyAwLjNzIGVhc2UgMSBmb3J3YXJkczt9CgkJCQkueHNqeCwjanN4bC1tYXNre3Bvc2l0aW9uOiBmaXhlZDsgdG9wOiAwOyBsZWZ0OiAwOyByaWdodDogMDsgYm90dG9tOiAwOyB6LWluZGV4OiA5OTk5OTk4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwZDY7fQoJCQkJLnhzangsI2pzeGwtYm94eyBwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTt3aWR0aDogMjQwcHg7bWluLWhlaWdodDoxMzBweDtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtib3JkZXItcmFkaXVzOjEwcHg7ei1pbmRleDogOTk5OTk5OTtwYWRkaW5nOjEwcHggMTVweDt9CgkJCQkueHNqeCwjanN4bC1ib3ggLnRpdGxle2ZvbnQtc2l6ZTogMTZweDt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC13ZWlnaHQ6IDYwMDt9CgkJCQkueHNqeCwjanN4bC1ib3ggLmNvbnRlbnR7dGV4dC1hbGlnbjogY2VudGVyO21hcmdpbjogMTRweCAwO2ZvbnQtc2l6ZTogMTJweDtjb2xvcjogIzJhMmEyYTtmb250LXdlaWdodDogNTAwO30KCQkJCS54c2p4LCNqc3hsLWJveCBheyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtjb2xvcjogIzFFODhFNTt9CgkJCQkueHNqeCwjanN4bC1ib3ggLmNvbnRlbnQgcHtjb2xvcjogI2ZmNDc1Nzt0ZXh0LWFsaWduOiBsZWZ0O30KCQkJCS54c2p4LCNqc3hsLWJveCAuYnRuLWJveHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7fQoJCQlgKQoJCQkkKCdib2R5JykuYXBwZW5kKGAKCQkJCTxkaXYgY2xhc3M9J3hqc3hzbCcgaWQ9ImpzeGwtbWFzayI+PC9kaXY+CgkJCQk8ZGl2IGlkPSJqc3hsLWJveCIgY2xhc3M9Imotc2hvdyI+CgkJCQkJPGRpdiBjbGFzcz0idGl0bGUgeGpzc3hsIj4ke2RlY29kZVVSSUNvbXBvbmVudChhdG9iKHRpcHNzcy5yZXBsYWNlKCdIQkNKSFNKQ1NLTUwnLCcnKS5yZXBsYWNlKCdMS01NS0xDRFNCSCcsJycpKSl9PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0iY29udGVudCB4eGpzeGwiPiR7ZGVjb2RlVVJJQ29tcG9uZW50KGF0b2Ioc3RhcnRzc3MucmVwbGFjZSgnSk5DSERTQkhDU0RKQ0tTRCcsJycpLnJlcGxhY2UoJ0xLTUxTRE5GS1NETicsJycpKSl9PGEgaHJlZj0iJHthdG9iKGxpbmtzc3MucmVwbGFjZSgnWFNqSFhqaCcsJycpLnJlcGxhY2UoJ05LTkhCSEtLTHonLCcnKSl9Ij4ke2RlY29kZVVSSUNvbXBvbmVudChhdG9iKGNlbnRlcnNzcy5yZXBsYWNlKCdGQkRLQkRLU0JWS0dTREJHSycsJycpLnJlcGxhY2UoJ0tKTEpGREtKU05GS0pEU0InLCcnKSkpfTwvYT48ZGl2PiR7ZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IodGlwLnJlcGxhY2UoJ0pOS1NORktEUycsJycpLnJlcGxhY2UoJ0pORjg5N0ZTQicsJycpKSl9PC9kaXY+IDxwPiR7ZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IoZW5kc3NzLnJlcGxhY2UoJ0NLSlNES0NCU0tCQ0pEJywnJykucmVwbGFjZSgnS0hGQkpEU0ZCSkgnLCcnKSkpfTwvcD48L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJidG4tYm94IHhqc3N4bCI+CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJYCkKCQkJJCgnI2pzeGwtYm94Jykub24oJ2NsaWNrJywgKCk9PnsgbG9jYXRpb24uaHJlZiA9IGF0b2IobGlua3Nzcy5yZXBsYWNlKCdYU2pIWGpoJywnJykucmVwbGFjZSgnTktOSEJIS0tMeicsJycpKX0pCgkJfQp9CnZhciBwcm9ncmVzc29yID0gbmV3IFByb2dyZXNzKCk7cHJvZ3Jlc3Nvci5pbml0KCk7aWYoIXByb2dyZXNzb3IubmFtZXMpIHJldHVybjsKLy8g6Ieq5a6a5LmJIENTUwovLyDov5vluqbmnaEKJCgnaGVhZCcpLmFwcGVuZCgiPHN0eWxlPiNucHJvZ3Jlc3N7cG9pbnRlci1ldmVudHM6bm9uZX0jbnByb2dyZXNzIC5iYXJ7YmFja2dyb3VuZDojZjQ0NDQ0O3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAzMTt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MnB4fSNucHJvZ3Jlc3MgLnBlZ3tkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMCU7Ym94LXNoYWRvdzowIDAgMTBweCAjZjQ0NDQ0LDAgMCA1cHggI2Y0NDQ0NDtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDNkZWcpIHRyYW5zbGF0ZSgwLC00cHgpOy1tcy10cmFuc2Zvcm06cm90YXRlKDNkZWcpIHRyYW5zbGF0ZSgwLC00cHgpO3RyYW5zZm9ybTpyb3RhdGUoM2RlZykgdHJhbnNsYXRlKDAsLTRweCl9I25wcm9ncmVzcyAuc3Bpbm5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAzMTt0b3A6MTVweDtyaWdodDoxNXB4fSNucHJvZ3Jlc3MgLnNwaW5uZXItaWNvbnt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6c29saWQgMnB4IHRyYW5zcGFyZW50O2JvcmRlci10b3AtY29sb3I6I2Y0NDQ0NDtib3JkZXItbGVmdC1jb2xvcjojZjQ0NDQ0O2JvcmRlci1yYWRpdXM6NTAlOy13ZWJraXQtYW5pbWF0aW9uOm5wcm9ncmVzcy1zcGlubmVyIC40cyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOm5wcm9ncmVzcy1zcGlubmVyIC40cyBsaW5lYXIgaW5maW5pdGV9Lm5wcm9ncmVzcy1jdXN0b20tcGFyZW50e292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubnByb2dyZXNzLWN1c3RvbS1wYXJlbnQgI25wcm9ncmVzcyAuYmFyLC5ucHJvZ3Jlc3MtY3VzdG9tLXBhcmVudCAjbnByb2dyZXNzIC5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlfUAtd2Via2l0LWtleWZyYW1lcyBucHJvZ3Jlc3Mtc3Bpbm5lcnswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBucHJvZ3Jlc3Mtc3Bpbm5lcnswJXt0cmFuc2Zvcm06cm90YXRlKDApfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX08L3N0eWxlPiIpOwovLyDorr7nva7nqpflj6MKJCgnaGVhZCcpLmFwcGVuZCgiPHN0eWxlPi5ibGFja19vdmVybGF5e3RvcDowJTtsZWZ0OjAlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojMDAwO3otaW5kZXg6MTAwMTstbW96LW9wYWNpdHk6MC44O29wYWNpdHk6LjEwO2ZpbHRlcjphbHBoYShvcGFjaXR5PTg4KX0uYmxhY2tfb3ZlcmxheSwud2hpdGVfY29udGVudHtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGV9LndoaXRlX2NvbnRlbnR7ei1pbmRleDo5OTk5IWltcG9ydGFudDt0b3A6MjUlO2xlZnQ6MjUlO3dpZHRoOjY1MHB4O2hlaWdodDo2MCU7cGFkZGluZzoyMHB4O2JvcmRlcjowcHg7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuOSk7ei1pbmRleDoxMDAyO292ZXJmbG93OmF1dG99PC9zdHlsZT4iKTsKLy8g5o+Q56S65p2hCiQoJ2hlYWQnKS5hcHBlbmQoIjxzdHlsZT4udHJpcHNjb257cGFkZGluZzoxMHB4fTwvc3R5bGU+Iik7Ci8vIOaMiemSru+8iOaXp++8iQokKCdoZWFkJykuYXBwZW5kKCI8c3R5bGU+I3RvZ2dsZS1idXR0b257ZGlzcGxheTpub25lfS5idXR0b24tbGFiZWx7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6ODJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MzBweDtjdXJzb3I6cG9pbnRlcn0uY2lyY2xle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uYnV0dG9uLWxhYmVsIC50ZXh0e2xpbmUtaGVpZ2h0OjMwcHg7Zm9udC1zaXplOjE4cHg7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9Lm9ue2NvbG9yOiNmZmY7ZGlzcGxheTpub25lO3RleHQtaW5kZW50OjEwcHh9Lm9mZntjb2xvcjojZmZmO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtaW5kZW50OjUzcHh9LmJ1dHRvbi1sYWJlbCAuY2lyY2xle2xlZnQ6MDt0cmFuc2l0aW9uOmFsbCAuM3N9I3RvZ2dsZS1idXR0b246Y2hlY2tlZCtsYWJlbC5idXR0b24tbGFiZWwgLmNpcmNsZXtsZWZ0OjUwcHh9I3RvZ2dsZS1idXR0b246Y2hlY2tlZCtsYWJlbC5idXR0b24tbGFiZWwgLm9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfSN0b2dnbGUtYnV0dG9uOmNoZWNrZWQrbGFiZWwuYnV0dG9uLWxhYmVsIC5vZmZ7ZGlzcGxheTpub25lfSN0b2dnbGUtYnV0dG9uOmNoZWNrZWQrbGFiZWwuYnV0dG9uLWxhYmVse2JhY2tncm91bmQtY29sb3I6Izc4ZDY5MH08L3N0eWxlPiIpOwovLyDkv53lrZjmjInpkq4KJCgnaGVhZCcpLmFwcGVuZCgiPHN0eWxlPi5zYXZlQnV0dG9ue2JhY2tncm91bmQtY29sb3I6IzE5YTRlZDtib3JkZXI6bm9uZTtjb2xvcjojZmZmO3BhZGRpbmc6NXB4IDE1cHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjE0cHg7Y3Vyc29yOnBvaW50ZXJ9PC9zdHlsZT4iKTsKLy8gU3RhciDmoLflvI8KJCgnaGVhZCcpLmFwcGVuZCgiPHN0eWxlPi5naXZlTWVPbmVTdGFyOmhvdmVye2NvbG9yOiNGRjY5QjQ7fTwvc3R5bGU+Iik7Ci8vIOiuvue9rueql+WPo+aWh+Wtl+aViOaenAppZiAoaXNGaXJlZm94KCkpIHsKICAgICQoJ2hlYWQnKS5hcHBlbmQoIjxzdHlsZT4uY29uZmlnQ29udGFpbmVyIGxhYmVse2ZvbnQtc2l6ZToxNXB4fS5jb25maWdDb250YWluZXIgcHtmb250LXNpemU6MTVweH0uZ2l2ZU1lT25lU3Rhcntmb250LXNpemU6MTVweH0uY29uZmlnQ29udGFpbmVyIC50aXRsZXtmb250LXNpemU6MjBweH0uY29uZmlnQ29udGFpbmVyIC5ib2xke2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luLWJvdHRvbTo1cHh9PC9zdHlsZT4iKTsKfSBlbHNlIHsKICAgICQoJ2hlYWQnKS5hcHBlbmQoIjxzdHlsZT4uY29uZmlnQ29udGFpbmVyIGxhYmVse2ZvbnQtc2l6ZTo1cHh9LmNvbmZpZ0NvbnRhaW5lciBwe2ZvbnQtc2l6ZToxMHB4fS5naXZlTWVPbmVTdGFye2ZvbnQtc2l6ZToxNXB4fS5jb25maWdDb250YWluZXIgLnRpdGxle2ZvbnQtc2l6ZToyMHB4fS5jb25maWdDb250YWluZXIgLmJvbGR7Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW4tYm90dG9tOjVweH08L3N0eWxlPiIpOwp9Ci8vIFNWRwovL3ZhciBzYXZlX3N2ZyA9ICc8c3ZnIHQ9IjE1OTUwODI2NTAxNzMiIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMTA3NSAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iMjA3OCIgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxNDAiPjxwYXRoIGQ9Ik03NTMuNzYzOTAyIDY4NS44MzAyNDRhNDguOTUyMTk1IDQ4Ljk1MjE5NSAwIDAgMSA0OS4xNTItNDguNzAyNDM5YzgxLjQyMDQ4OCAwIDE0MS4xNjIxNDYtNjUuMzg2MTQ2IDE0MS4xNjIxNDctMTQ2LjA1NzM2NiAwLTQzLjUwNzUxMi0xMy4wMzcyNjgtODIuNDE5NTEyLTQzLjQ1NzU2MS0xMDkuMjQzMzE3YTE0Mi4zNjA5NzYgMTQyLjM2MDk3NiAwIDAgMC0yMC4yODAxOTUtMTQuOTM1NDE1IDE1OC4wNDU2NTkgMTU4LjA0NTY1OSAwIDAgMC0xMS4yMzkwMjUtNi4yNDM5MDJsLTIuNzQ3MzE3LTEuMjk4NzMyYTE1NS44NDc4MDUgMTU1Ljg0NzgwNSAwIDAgMC05LjE5MTAyNC0zLjk5NjA5N2MtMS4zNDg2ODMtMC41NDk0NjMtMi42OTczNjYtMC45OTkwMjQtNC4wOTYtMS40OTg1MzdhMTUyLjM1MTIyIDE1Mi4zNTEyMiAwIDAgMC04LjQ5MTcwNy0yLjg0NzIxOWMtMS45NDgwOTgtMC41OTk0MTUtMy44OTYxOTUtMC45OTkwMjQtNS44NDQyOTMtMS40OTg1MzctMi40OTc1NjEtMC41OTk0MTUtNC45NDUxNzEtMS4yNDg3OC03LjQ5MjY4My0xLjc0ODI5My0yLjU5NzQ2My0wLjQ5OTUxMi01LjM0NDc4LTAuODk5MTIyLTguMDQyMTQ2LTEuMjQ4NzgtMS45NDgwOTgtMC4yNDk3NTYtMy44NDYyNDQtMC41OTk0MTUtNS44NDQyOTMtMC43OTkyMmExNTMuMTUwNDM5IDE1My4xNTA0MzkgMCAwIDAtMTQuNDM1OTAzLTAuNzQ5MjY4Yy0xLjQ5ODUzNyAwLTIuOTk3MDczIDAuMTk5ODA1LTQuNTQ1NTYxIDAuMjQ5NzU2YTI2NS4zOTA4MjkgMjY1LjM5MDgyOSAwIDAgMC01LjU5NDUzNi0yNC41MjYwNDljLTAuNDk5NTEyLTEuOTk4MDQ5LTEuMjk4NzMyLTMuODQ2MjQ0LTEuODk4MTQ2LTUuODQ0MjkyYTI2Ny40Mzg4MjkgMjY3LjQzODgyOSAwIDAgMC01Ljk0NDE5Ni0xNy45ODI0MzljLTAuNjQ5MzY2LTEuNzk4MjQ0LTEuNDk4NTM3LTMuNDk2NTg1LTIuMTk3ODUzLTUuMjk0ODNhMjgzLjEyMzUxMiAyODMuMTIzNTEyIDAgMCAwLTcuNzQyNDM5LTE3LjczMjY4M0w3NzIuNzQ1MzY2IDI2OS43MzY1ODVhMjgyLjk3MzY1OSAyODIuOTczNjU5IDAgMCAwLTkuNzkwNDM5LTE3LjgzMjU4NUM3MTQuMzAyNDM5IDE3MS41ODI0MzkgNjI1Ljg4ODc4IDEyNC44NzgwNDkgNTI0LjQ4NzgwNSAxMjQuODc4MDQ5Yy0xMDEuNDAwOTc2IDAtMTg5LjkxNDUzNyA0Ni42NTQ0MzktMjM4LjUxNzA3MyAxMjYuOTc2LTMuNDk2NTg1IDUuNzk0MzQxLTYuNjkzNDYzIDExLjc4ODQ4OC05Ljc5MDQzOSAxNy44MzI1ODVsLTIuMTk3ODU0IDQuMDk2YTI4My41MjMxMjIgMjgzLjUyMzEyMiAwIDAgMC03Ljc0MjQzOSAxNy43MzI2ODNsLTIuMTk3ODU0IDUuMjQ0ODc4Yy0yLjI0NzgwNSA1Ljg5NDI0NC00LjE0NTk1MSAxMS45ODgyOTMtNS45OTQxNDYgMTguMDMyMzktMC41NDk0NjMgMS45OTgwNDktMS4yOTg3MzIgMy44NDYyNDQtMS44NDgxOTUgNS44NDQyOTNhMjY2LjczOTUxMiAyNjYuNzM5NTEyIDAgMCAwLTUuNTk0NTM3IDI0LjQ3NjA5OGMtMS40OTg1MzcgMC0yLjk5NzA3My0wLjE5OTgwNS00LjU0NTU2MS0wLjE5OTgwNS00Ljg5NTIyIDAtOS42OTA1MzcgMC4yOTk3MDctMTQuNDg1ODUzIDAuNzQ5MjY4LTEuOTk4MDQ5IDAuMTk5ODA1LTMuODQ2MjQ0IDAuNDk5NTEyLTUuNzk0MzQyIDAuNzk5MjItMi42OTczNjYgMC4zNDk2NTktNS40NDQ2ODMgMC42OTkzMTctOC4wOTIwOTcgMS4yNDg3OC0yLjQ5NzU2MSAwLjQ5OTUxMi00Ljk5NTEyMiAxLjE0ODg3OC03LjQ5MjY4MyAxLjc0ODI5My0xLjg5ODE0NiAwLjQ5OTUxMi0zLjg0NjI0NCAwLjg5OTEyMi01Ljc5NDM0MiAxLjQ5ODUzNmExNTMuNjQ5OTUxIDE1My42NDk5NTEgMCAwIDAtOC40OTE3MDcgMi43OTcyNjlsLTQuMDk2IDEuNDk4NTM2YTE2NC4yODk1NjEgMTY0LjI4OTU2MSAwIDAgMC05LjI0MDk3NiAzLjk5NjA5OGwtMi42OTczNjYgMS4zNDg2ODNhMTQ1LjU1Nzg1NCAxNDUuNTU3ODU0IDAgMCAwLTMxLjQ2OTI2OCAyMS4xNzkzMTdDMTE3Ljg4NDg3OCA0MDguNjAwOTc2IDEwNC44OTc1NjEgNDQ3LjU2MjkyNyAxMDQuODk3NTYxIDQ5MS4wNzA0MzljMCA4MC42NzEyMiA1OS43NDE2NTkgMTQ2LjA1NzM2NiAxNDEuMTYyMTQ2IDE0Ni4wNTczNjZhNDguOTUyMTk1IDQ4Ljk1MjE5NSAwIDAgMSA0OS4xNTIgNDguNzAyNDM5IDQ4Ljk1MjE5NSA0OC45NTIxOTUgMCAwIDEtNDkuMTUyIDQ4LjcwMjQzOWMtMTM1LjcxNzQ2MyAwLTI0NS43MTAwNDktMTA4Ljk5MzU2MS0yNDUuNzEwMDQ4LTI0My40NjIyNDQgMC0xMDkuNjkyODc4IDczLjIyODQ4OC0yMDIuNDAyMzQxIDE3My44MzAyNDMtMjMyLjg3MjU4NUEzNzUuODMyOTc2IDM3NS44MzI5NzYgMCAwIDEgNTI0LjQ4NzgwNSAyMC4zMzAxNDZhMzc1Ljg4MjkyNyAzNzUuODgyOTI3IDAgMCAxIDM1MC4zMDc5MDIgMjM3Ljg2NzcwOGMxMDAuNjAxNzU2IDMwLjQ3MDI0NCAxNzMuODMwMjQ0IDEyMy4xNzk3MDcgMTczLjgzMDI0NCAyMzIuODcyNTg1IDAgMTM0LjQ2ODY4My0xMDkuOTkyNTg1IDI0My40NjIyNDQtMjQ1LjcxMDA0OSAyNDMuNDYyMjQ0YTQ4Ljk1MjE5NSA0OC45NTIxOTUgMCAwIDEtNDkuMTAyMDQ4LTQ4LjcwMjQzOXoiIHAtaWQ9IjIwNzkiPjwvcGF0aD48cGF0aCBkPSJNNDg3Ljk3MzQ2MyAzODYuMTIyOTI3YTQ5LjEwMjA0OSA0OS4xMDIwNDkgMCAwIDEgNzIuOTI4NzgxIDAuMDk5OTAybDE0Ny4zNTYwOTcgMTYyLjA0MTc1NmM2Ljk5MzE3MSA3Ljc0MjQzOSAxMS40ODg3OCAxOS40MzEwMjQgMTIuNTM3NzU3IDMwLjEyMDU4NmwwLjI0OTc1NiAxMi45MzczNjZjMCAxOS40ODA5NzYtMjAuNDggMzkuNjYxMjY4LTM5LjIxMTcwOCAzOS42NjEyNjhoLTEwNC44OTc1NjF2MjYyLjk5MzE3MWE1Mi40NDg3OCA1Mi40NDg3OCAwIDEgMS0xMDQuODk3NTYxIDB2LTI2Mi45OTMxNzFoLTEwNC44OTc1NjFjLTEzLjg4NjQzOSAwLTM5LjIxMTcwNy0yMS43Mjg3OC0zOS4yMTE3MDctMzkuNjYxMjY4di0xMi45ODczMTdjMC0xMi40ODc4MDUgNC43OTUzMTctMjEuMjc5MjIgMTIuNjM3NjU5LTI5LjkyMDc4MWwxNDcuMzU2MDk3LTE2Mi4yOTE1MTJ6IiBwLWlkPSIyMDgwIj48L3BhdGg+PC9zdmc+JzsKdmFyIHN0YXJfc3ZnXzEgPSAnPHN2ZyB0PSIxNTk1MDgzNjMxNjg1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwNTEgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjIxNzMiIHdpZHRoPSIxNDAiIGhlaWdodD0iMTQwIj48cGF0aCBkPSJNNTI1LjgzNzgzOCA4NTIuNDEwODExTDE5OS4yNjQ4NjUgMTAwMS44NTk0NTlsNDEuNTEzNTEzLTM1Ny4wMTYyMTZMMCAzODEuOTI0MzI0bDM1MS40ODEwODEtNjkuMTg5MTg5TDUyNS44Mzc4MzggMGwxNzQuMzU2NzU3IDMxMi43MzUxMzVMMTA1MS42NzU2NzYgMzgxLjkyNDMyNGwtMjQwLjc3ODM3OSAyNjIuOTE4OTE5IDQxLjUxMzUxNCAzNTcuMDE2MjE2eiIgZmlsbD0iI0ZGRDU2NiIgcC1pZD0iMjE3NCI+PC9wYXRoPjwvc3ZnPic7CnZhciBzdGFyX3N2Z18yID0gJyA8c3ZnIHQ9IjE1OTUwODM3MTUzMTIiIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iNzg0OCIgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxNDAiPjxwYXRoIGQ9Ik0xMDE0LjAwMTM0NyA4NjYuMDkwMjM2TDgxMC4yMzU2OSA2NjIuMzI0NTc5bDE0NS40OTc2NDMtODQuMTI2NTk5YzExLjM3Nzc3OC02LjU1MDg0MiAxNy45Mjg2Mi0xOC45NjI5NjMgMTYuODk0Mjc2LTMyLjA2NDY0Ny0xLjAzNDM0My0xMy4xMDE2ODQtOS4zMDkwOTEtMjQuNDc5NDYxLTIxLjM3NjQzMS0yOS4zMDYzOTdsLTY0OC4xODg1NTItMjU4LjU4NTg1OWMtMTIuNzU2OTAyLTUuMTcxNzE3LTI3LjIzNzcxLTIuMDY4Njg3LTM2Ljg5MTU4MiA3LjU4NTE4Ni05LjY1Mzg3MiA5LjY1Mzg3Mi0xMi43NTY5MDIgMjQuMTM0NjgtNy41ODUxODUgMzYuODkxNTgybDI1OC41ODU4NTggNjQ4LjUzMzMzM2M0LjgyNjkzNiAxMi4wNjczNCAxNi4yMDQ3MTQgMjAuNjg2ODY5IDI5LjMwNjM5NyAyMS4zNzY0MzEgMTMuMTAxNjg0IDEuMDM0MzQzIDI1LjUxMzgwNS01LjUxNjQ5OCAzMi4wNjQ2NDctMTYuODk0Mjc2bDg0LjEyNjU5OS0xNDUuNDk3NjQzIDIwMy43NjU2NTcgMjAzLjc2NTY1N2M2LjU1MDg0MiA2LjU1MDg0MiAxNS4xNzAzNyA5Ljk5ODY1MyAyNC4xMzQ2OCA5Ljk5ODY1MyA4Ljk2NDMxIDAgMTcuOTI4NjItMy40NDc4MTEgMjQuMTM0NjgtOS45OTg2NTNsOTkuMjk2OTctOTkuMjk2OTdjMTMuNDQ2NDY1LTEzLjQ0NjQ2NSAxMy40NDY0NjUtMzUuMTY3Njc3IDAtNDguNjE0MTQxek0xNTAuMzI0NTc5IDEwMi4wNTUyMTljLTEzLjQ0NjQ2NS0xMy40NDY0NjUtMzUuMTY3Njc3LTEzLjQ0NjQ2NS00OC4yNjkzNiAwLTEzLjQ0NjQ2NSAxMy40NDY0NjUtMTMuNDQ2NDY1IDM1LjE2NzY3NyAwIDQ4LjI2OTM2bDc2LjE5NjYzMyA3Ni4xOTY2MzNjNi41NTA4NDIgNi41NTA4NDIgMTUuNTE1MTUyIDkuOTk4NjUzIDI0LjEzNDY4IDkuOTk4NjUzczE3LjU4MzgzOC0zLjQ0NzgxMSAyNC4xMzQ2OC05Ljk5ODY1M2MxMy40NDY0NjUtMTMuNDQ2NDY1IDEzLjQ0NjQ2NS0zNS4xNjc2NzcgMC00OC4yNjkzNkwxNTAuMzI0NTc5IDEwMi4wNTUyMTl6TTE3Ni4xODMxNjUgMzM4LjU3NTA4NGMwLTE4Ljk2Mjk2My0xNS4xNzAzNy0zNC4xMzMzMzMtMzQuMTMzMzMzLTM0LjEzMzMzM0gzNC4xMzMzMzNjLTE4Ljk2Mjk2MyAwLTM0LjEzMzMzMyAxNS4xNzAzNy0zNC4xMzMzMzMgMzQuMTMzMzMzczE1LjE3MDM3IDM0LjEzMzMzMyAzNC4xMzMzMzMgMzQuMTMzMzM0aDEwNy41NzE3MThjMTguOTYyOTYzIDAgMzQuNDc4MTE0LTE1LjE3MDM3IDM0LjQ3ODExNC0zNC4xMzMzMzR6TTE2Mi4zOTE5MTkgNDQ0LjQyMjg5NmwtNzYuMTk2NjMzIDc1Ljg1MTg1MWMtMTMuNDQ2NDY1IDEzLjQ0NjQ2NS0xMy40NDY0NjUgMzUuMTY3Njc3IDAgNDguMjY5MzYxIDYuNTUwODQyIDYuNTUwODQyIDE1LjUxNTE1MiA5Ljk5ODY1MyAyNC4xMzQ2OCA5Ljk5ODY1M3MxNy41ODM4MzgtMy40NDc4MTEgMjQuMTM0NjgtOS45OTg2NTNsNzYuMTk2NjMzLTc2LjE5NjYzM2MxMy40NDY0NjUtMTMuNDQ2NDY1IDEzLjQ0NjQ2NS0zNS4xNjc2NzcgMC00OC4yNjkzNjEtMTMuNDQ2NDY1LTEzLjEwMTY4NC0zNS4xNjc2NzctMTMuMTAxNjg0LTQ4LjI2OTM2IDAuMzQ0Nzgyek0zMzguNTc1MDg0IDE3Ni4xODMxNjVjMTguOTYyOTYzIDAgMzQuMTMzMzMzLTE1LjE3MDM3IDM0LjEzMzMzNC0zNC4xMzMzMzNWMzQuMTMzMzMzYzAtMTguOTYyOTYzLTE1LjE3MDM3LTM0LjEzMzMzMy0zNC4xMzMzMzQtMzQuMTMzMzMzcy0zNC4xMzMzMzMgMTUuMTcwMzctMzQuMTMzMzMzIDM0LjEzMzMzM3YxMDcuNTcxNzE4YzAgMTguOTYyOTYzIDE1LjE3MDM3IDM0LjQ3ODExNCAzNC4xMzMzMzMgMzQuNDc4MTE0ek00NjguNTU3NTc2IDIyMC42NTk5MzNjOC42MTk1MjkgMCAxNy41ODM4MzgtMy40NDc4MTEgMjQuMTM0NjgtOS45OTg2NTRMNTY4Ljg4ODg4OSAxMzQuNDY0NjQ2YzEzLjQ0NjQ2NS0xMy40NDY0NjUgMTMuNDQ2NDY1LTM1LjE2NzY3NyAwLTQ4LjI2OTM2LTEzLjQ0NjQ2NS0xMy40NDY0NjUtMzUuMTY3Njc3LTEzLjQ0NjQ2NS00OC4yNjkzNiAwbC03Ni4xOTY2MzMgNzYuMTk2NjMzYy0xMy40NDY0NjUgMTMuNDQ2NDY1LTEzLjQ0NjQ2NSAzNS4xNjc2NzcgMCA0OC4yNjkzNiA2LjU1MDg0MiA2LjU1MDg0MiAxNS41MTUxNTIgOS45OTg2NTMgMjQuMTM0NjggOS45OTg2NTR6IiBmaWxsPSIjMmMyYzJjIiBwLWlkPSI3ODQ5Ij48L3BhdGg+PC9zdmc+JzsKdmFyIHN0YXJfc3ZnXzMgPSAnIDxzdmcgdD0iMTU5NTA4MzkyNTQzOCIgY2xhc3M9Imljb24iIHZpZXdCb3g9IjAgMCAxMjA0IDEwMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwLWlkPSI0ODA5IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjE0MCI+PHBhdGggZD0iTTEwODguODY0MzQ4IDYxOC4xMzcwMWExNTU1LjAwOTM4NCAxNTU1LjAwOTM4NCAwIDAgMS0xNTAuMjczMDA0IDE2Ny4xMzczMDhjLTUyLjg4MTY0MiA1MS4xOTUyMTItMTA3LjkzMTU1MiAxMDEuMTg1ODMtMTYzLjY0Mzk4OSAxNDcuMjYxNTIxLTMzLjg0OTA2OSAyNy41MjQ5NTUtNjAuMjI5NjYxIDQ4LjY2NTU2Ni03Ni4xOTA1MjEgNjAuMjI5NjYxYTE2Mi45ODE0NjIgMTYyLjk4MTQ2MiAwIDAgMS0xOTEuODkxNjk5IDBjLTE1LjUzOTI1My0xMi4wNDU5MzItNDIuMTYwNzYzLTMyLjY0NDQ3Ni03Ni4xOTA1MjEtNjAuODMxOTU3YTI2MzguNDgwNzU0IDI2MzguNDgwNzU0IDAgMCAxLTE2NC4zNjY3NDUtMTQ3LjI2MTUyMSAxNTc5LjEwMTI0OSAxNTc5LjEwMTI0OSAwIDAgMS0xNTAuMjczMDA0LTE2NS44MTIyNTdBNDY4LjEwNDkyNCA0NjguMTA0OTI0IDAgMCAxIDAuMTUyOTk4IDM0NC43NTQ1NzkgMzE1LjU0MzE5MyAzMTUuNTQzMTkzIDAgMCAxIDEwOS4wNDgyMjUgOTYuMzY3NDU3YTM5OS40NDMxMTEgMzk5LjQ0MzExMSAwIDAgMSA0OTMuODgzMjE5LTIwLjQ3ODA4NCAzOTguNjYwMTI1IDM5OC42NjAxMjUgMCAwIDEgNDkzLjg4MzIxOSAyMC40NzgwODRBMzE1LjQ4Mjk2NCAzMTUuNDgyOTY0IDAgMCAxIDEyMDQuNzQ2MjE1IDM0My4zMDkwNjdhNDY2Ljg0MDEwMSA0NjYuODQwMTAxIDAgMCAxLTExNS43MDExNzggMjc0LjY0NzI1NHoiIGZpbGw9IiNGRTRCODMiIHAtaWQ9IjQ4MTAiPjwvcGF0aD48L3N2Zz4nOwp2YXIgc3Rhcl9zdmdfNCA9ICcgPHN2ZyB0PSIxNTk1MDg0MDg5MTE1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjgwMDgiIHdpZHRoPSIxNDAiIGhlaWdodD0iMTQwIj48cGF0aCBkPSJNNTEyIDQ2LjU0NTQ1NUMyNTYgNDYuNTQ1NDU1IDQ2LjU0NTQ1NSAyNTYgNDYuNTQ1NDU1IDUxMnMyMDkuNDU0NTQ1IDQ2NS40NTQ1NDUgNDY1LjQ1NDU0NSA0NjUuNDU0NTQ1IDQ2NS40NTQ1NDUtMjA5LjQ1NDU0NSA0NjUuNDU0NTQ1LTQ2NS40NTQ1NDVTNzY4IDQ2LjU0NTQ1NSA1MTIgNDYuNTQ1NDU1eiBtMCA4MzcuODE4MTgxYy0yMDQuOCAwLTM3Mi4zNjM2MzYtMTY3LjU2MzYzNi0zNzIuMzYzNjM2LTM3Mi4zNjM2MzZzMTY3LjU2MzYzNi0zNzIuMzYzNjM2IDM3Mi4zNjM2MzYtMzcyLjM2MzYzNiAzNzIuMzYzNjM2IDE2Ny41NjM2MzYgMzcyLjM2MzYzNiAzNzIuMzYzNjM2LTE2Ny41NjM2MzYgMzcyLjM2MzYzNi0zNzIuMzYzNjM2IDM3Mi4zNjM2MzZ6IiBmaWxsPSIjMDBDNUM1IiBwLWlkPSI4MDA5Ij48L3BhdGg+PHBhdGggZD0iTTY1Ni4yOTA5MDkgNTg2LjQ3MjcyN2MtNzkuMTI3MjczIDY5LjgxODE4Mi0yMDkuNDU0NTQ1IDY5LjgxODE4Mi0yODguNTgxODE4IDAtMTguNjE4MTgyLTEzLjk2MzYzNi00MS44OTA5MDktMTMuOTYzNjM2LTYwLjUwOTA5MSA0LjY1NDU0Ni0xMy45NjM2MzYgMTMuOTYzNjM2LTEzLjk2MzYzNiA0MS44OTA5MDkgNC42NTQ1NDUgNjAuNTA5MDkxIDU1Ljg1NDU0NSA1MS4yIDEyNS42NzI3MjcgNzQuNDcyNzI3IDIwMC4xNDU0NTUgNzQuNDcyNzI3czE0NC4yOTA5MDktMjcuOTI3MjczIDIwMC4xNDU0NTUtNzQuNDcyNzI3YzE4LjYxODE4Mi0xMy45NjM2MzYgMTguNjE4MTgyLTQxLjg5MDkwOSA0LjY1NDU0NS02MC41MDkwOTFzLTQxLjg5MDkwOS0xOC42MTgxODItNjAuNTA5MDkxLTQuNjU0NTQ2ek0zNTguNCA0NjAuOGMyNy45MjcyNzMgMCA1MS4yLTIzLjI3MjcyNyA1MS4yLTUxLjJzLTIzLjI3MjcyNy01NS44NTQ1NDUtNTEuMi01NS44NTQ1NDVjLTI3LjkyNzI3MyAwLTUxLjIgMjMuMjcyNzI3LTUxLjIgNTEuMnMyMy4yNzI3MjcgNTUuODU0NTQ1IDUxLjIgNTUuODU0NTQ1ek02NjUuNiA0NjAuOGMyNy45MjcyNzMgMCA1MS4yLTIzLjI3MjcyNyA1MS4yLTUxLjJzLTIzLjI3MjcyNy01MS4yLTUxLjItNTEuMi01MS4yIDIzLjI3MjcyNy01MS4yIDUxLjIgMjMuMjcyNzI3IDUxLjIgNTEuMiA1MS4yeiIgZmlsbD0iIzAwQzVDNSIgcC1pZD0iODAxMCI+PC9wYXRoPjwvc3ZnPic7CnZhciBzdGFyX3N2ZyA9IHN0YXJfc3ZnXzEgKyBzdGFyX3N2Z18yICsgc3Rhcl9zdmdfMyArIHN0YXJfc3ZnXzQ7CnZhciBkb25hdGVfc3ZnID0gJzxzdmcgdD0iMTU5Mjk4MjUwODI1OCIgY2xhc3M9Imljb24iIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwLWlkPSI0MjA3IiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiPjxwYXRoIGQ9Ik02NjQuNDggMjM0LjQzMmEzMiAzMiAwIDAgMC00NS4yNDgtMC44bC03Ni4yNTYgNzMuNi03My4zNDQtNzMuMjE2YTMyIDMyIDAgMSAwLTQ1LjI0OCA0NS4zMTJsNzIuMzg0IDcyLjI1NmgtNDkuMjhhMzIgMzIgMCAwIDAgMCA2NGg2My43NzZ2MzJoLTYzLjc3NmEzMiAzMiAwIDAgMCAwIDY0aDYzLjc3NnY2NS42NjRhMzIgMzIgMCAxIDAgNjQgMHYtNjUuNjY0aDY0LjI4OGEzMiAzMiAwIDEgMCAwLTY0aC02NC4yODh2LTMyaDY0LjI4OGEzMiAzMiAwIDEgMCAwLTY0aC01MC4zNjhsNzQuNDY0LTcxLjg3MmEzMi4wMzIgMzIuMDMyIDAgMCAwIDAuODMyLTQ1LjI4eiBtMjc1LjIgNTAzLjU1MmE5MDE3LjU2OCA5MDE3LjU2OCAwIDAgMC0xNDEuNjY0LTU2LjczNiAzNjguNTEyIDM2OC41MTIgMCAwIDAgOTcuNTY4LTI0OC42MDhjMC0yMDIuOTEyLTE2NS4xMi0zNjgtMzY4LjA2NC0zNjhzLTM2OCAxNjUuMDg4LTM2OCAzNjhjMCAxNi4yMjQgMS4wMjQgMzIuMzUyIDMuMDcyIDQ3Ljk2OCAyLjMwNCAxNy41MDQgMTguNDk2IDI5LjY2NCAzNS45MDQgMjcuNTg0YTMyIDMyIDAgMCAwIDI3LjU4NC0zNS45MDQgMzA0LjUxMiAzMDQuNTEyIDAgMCAxLTIuNTYtMzkuNjQ4YzAtMTY3LjYxNiAxMzYuMzg0LTMwNCAzMDQtMzA0IDE2Ny42NDggMCAzMDQuMDY0IDEzNi4zODQgMzA0LjA2NCAzMDRhMzAwLjU0NCAzMDAuNTQ0IDAgMCAxLTk2LjEyOCAyMjEuNDcyYy0wLjc2OCAwLjczNi0xLjA4OCAxLjc2LTEuODI0IDIuNTI4LTQyLjg0OC0xNS45MzYtNzkuMzI4LTI4LjQ4LTkzLjc2LTMwLjY1Ni0yNC44OTYtMy45MDQtNDguNjcyIDcuNjE2LTYzLjEwNCAyOC44OTYtMTIuMDMyIDE3Ljc5Mi0xNS4wNzIgMzguODE2LTguMDk2IDU2LjI1NiA0LjI4OCAxMC42NTYgMjAuNTEyIDMyLjg5NiAzOS43NzYgNTcuMjgtNDYuNDMyLTAuMDY0LTExNy4zMTItNi4zMzYtMTkyLjgzMi0zNS40ODgtMzEuMjY0LTEyLjA2NC02OS40NC01Mi42NC0xMDMuMTM2LTg4LjQxNi00Ny45NjgtNTAuOTc2LTkzLjI4LTk5LjEwNC0xNDIuNTYtOTkuMTA0LTE4LjMzNiAwLTM1Ljc0NCA2Ljg0OC01MC4zMzYgMTkuNzc2LTE4LjI0IDE2LjIyNC0zNS4xMzYgNDguMzItMTIgMTA5LjI0OCA0Mi42MjQgMTEyLjE2IDIwOC41NDQgMjg1LjEyIDM0MS43MjggMjg1LjEyaDQ3OC4xNDRhMzIgMzIgMCAwIDAgMzItMzJ2LTE2MGEzMS44NCAzMS44NCAwIDAgMC0xOS43NzYtMjkuNTY4eiBtLTQ0LjE2IDE1Ny42aC00NDUuMTJsLTEuMDI0IDMydi0zMmMtOTcuNiAwLTI0Ny4wNzItMTUyLjEyOC0yODEuOTItMjQzLjg3Mi0xMC4xMTItMjYuNjU2LTYuNzItMzcuNDA4LTUuMzQ0LTM4LjYyNCA0LjEyOC0zLjY0OCA2LjUyOC0zLjY0OCA3Ljg0LTMuNjQ4IDIxLjYzMiAwIDY0LjYwOCA0NS42MzIgOTUuOTY4IDc4Ljk0NCA0MC4yMjQgNDIuNzUyIDgxLjg1NiA4Ni45NDQgMTI2LjY1NiAxMDQuMjU2IDg1LjIxNiAzMi44OTYgMTY0Ljg5NiAzOS44MDggMjE2LjczNiAzOS44MDggNDEuMzc2IDAgNjcuNTg0LTQuMzUyIDY4LjY3Mi00LjU0NGEzMiAzMiAwIDAgMCAxOS4xMzYtNTIuMTZjLTI3LjAwOC0zMi4wOTYtNTguNTkyLTcxLjgwOC02Ny4yOTYtODUuMzQ0IDAuMjg4LTAuNTc2IDAuNTEyLTEuMDI0IDAuMzUyLTEuMTUyIDIyLjg0OCAzLjQ4OCAxNjIuNDMyIDU3Ljk1MiAyNjUuMjggOTkuODR2MTA2LjQ5NnoiIHAtaWQ9IjQyMDgiPjwvcGF0aD48L3N2Zz4nOwp2YXIgc2V0X3N2ZyA9ICc8c3ZnIHQ9IjE1OTI5ODI5NzAzNzUiIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iMTAxMTIiIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZD0iTTI1NiAxMDIuNGg1MTJsMjU2IDI1Ni01MTIgNTYzLjJMMCAzNTguNHoiIGZpbGw9IiMyNkNENjMiIHAtaWQ9IjEwMTEzIj48L3BhdGg+PHBhdGggZD0iTTI1NiAxMDIuNGwyNTYgMjU2SDB6TTc2OCAxMDIuNGwyNTYgMjU2SDUxMnpNNTEyIDkyMS42bDIwNC44LTU2My4ySDMwNy4yeiIgZmlsbD0iIzE0QTM0NSIgcC1pZD0iMTAxMTQiPjwvcGF0aD48L3N2Zz4nOwp2YXIgc2F2ZV9zdmcgPSAnPHN2ZyB0PSIxNjI5NDQ4NTg4MzUxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijc4NDkiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNNTEyIDBDMjI5LjIgMCAwIDIyOS4yIDAgNTEyczIyOS4yIDUxMiA1MTIgNTEyIDUxMi0yMjkuMiA1MTItNTEyUzc5NC44IDAgNTEyIDB6IG0wIDk0NS4yQzI3My4xIDk0NS4yIDc4LjggNzUwLjkgNzguOCA1MTJTMjczLjEgNzguOCA1MTIgNzguOCA5NDUuMiAyNzMuMSA5NDUuMiA1MTIgNzUwLjkgOTQ1LjIgNTEyIDk0NS4yeiIgcC1pZD0iNzg1MCIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik02ODAuOSAzNTkuNEw0NjEgNTgyLjMgMzQxLjYgNDczLjZjLTE2LTE0LjYtNDEtMTMuNC01NS42IDIuNi0xNC43IDE2LjEtMTMuNSA0MSAyLjYgNTUuNkw0MzYgNjY2LjFjNy41IDYuOCAxNyAxMC4yIDI2LjUgMTAuMiAxMC4yIDAgMjAuMy0zLjkgMjgtMTEuN0w3MzcgNDE0LjdjMTUuMy0xNS41IDE1LjEtNDAuNC0wLjQtNTUuNy0xNS41LTE1LjItNDAuNS0xNS4xLTU1LjcgMC40eiIgcC1pZD0iNzg1MSIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjwvc3ZnPic7CnZhciBzZXR0aW5nc19zdmcgPSAnPHN2ZyB0PSIxNjI5NDMzMzYwNDYyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI4NzAiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNMTAwNi40MzggMTcuNTQ4Yy0wLjAzMiAwLTQzMC40My0xMTIuOTY2LTc4MC40NSAyMzcuMDIyLTI4OC45OSAyODkuMDA4LTMzLjUyMiA1NzYuOTY2LTMzLjUyMiA1NzYuOTY2czI4Ny45NTggMjU1LjQ4NCA1NzYuOTUyLTMzLjU1QzExMTkuNDM2IDQ0OC4wMTIgMTAwNi40NjggMTcuNjEyIDEwMDYuNDM4IDE3LjU0OHoiIGZpbGw9IiM5RUQzNkEiIHAtaWQ9IjI4NzEiPjwvcGF0aD48cGF0aCBkPSJNMTAwNi40MzggMTcuNTQ4bC00Mi42NzQtOC4yMTZjMC4wMzIgMC4wNjIgMTEyLjk5OCA0MzguNjc4LTIzNi45OSA3ODguNjUyLTk2LjM0NCA5Ni40MDYtMTkyLjU5OCAxMzIuMjA4LTI3OC4xMDQgMTM3LjE0NCA5NS40MSA1LjUgMjA4LTI0LjM2OCAzMjAuNzQ4LTEzNy4xNDRDMTExOS40MzYgNDQ4LjAxMiAxMDA2LjQ2OCAxNy42MTIgMTAwNi40MzggMTcuNTQ4eiIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iLjIiIHAtaWQ9IjI4NzIiPjwvcGF0aD48cGF0aCBkPSJNNjAwLjQwNiA0MjMuNjEyYy04LjMwOC04LjM0LTIxLjgzNi04LjM0LTMwLjE0OCAwTDYuNCA5ODcuNDI2Yy04LjMyNiA4LjM3Mi04LjMyNiAyMS44NjggMCAzMC4xOCA4LjMyNiA4LjMwOCAyMS44MjIgOC4zMDggMzAuMTYyIDBMNjAwLjQwNiA0NTMuNzZjOC4zNC04LjM0MiA4LjM0LTIxLjgzOCAwLTMwLjE0OHoiIGZpbGw9IiM4QUMwNTQiIHAtaWQ9IjI4NzMiPjwvcGF0aD48L3N2Zz4nOwp2YXIgcHJvdGVjdF9zdmcgPSAnPHN2ZyB0PSIxNjI5NTYwNTM4ODA1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjMyMTIiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNODAwLjMgMjA1LjFMNTM0LjggMTE2Yy0xNi01LjQtMzMuMy01LjMtNDkuMiAwLjJsLTI2NC41IDkyLjNjLTI5LjMgMTAtNDkgMzcuNS00OS4xIDY4LjRsMS43IDI2NS40YzAuNyA4MSAzMS4xIDE1OC45IDg1LjYgMjE4LjkgMjUgMjcuNyA1Ni45IDUxLjUgOTcuOCA3Mi43bDE0NCA3NC42YzkgNC43IDE5LjcgNC42IDI4LjctMC4yTDY3Mi41IDgzMmM0MC40LTIxLjYgNzIuMi00NS43IDk2LjktNzMuOCA1My42LTYwLjYgODMtMTM4LjkgODIuNi0yMTkuOGwtMS43LTI2NS42Yy0wLjUtMzAuOS0yMC41LTU4LjEtNTAtNjcuN3oiIGZpbGw9IiMwN0MxNjAiIHAtaWQ9IjMyMTMiPjwvcGF0aD48cGF0aCBkPSJNNDc0LjEgNjUyYy03LjEgMC0xMy44LTIuOC0xOC45LTcuOGwtMTUxLTE1MS4xYy0xMC40LTEwLjQtMTAuNC0yNy40IDAtMzcuOHMyNy40LTEwLjQgMzcuOCAwbDEzMi4xIDEzMi4yIDIwNy43LTIwNy43YzEwLjQtMTAuNCAyNy40LTEwLjQgMzcuOCAwIDEwLjQgMTAuNCAxMC40IDI3LjQgMCAzNy44TDQ5MyA2NDQuMmMtNSA1LTExLjggNy44LTE4LjkgNy44eiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMzIxNCI+PC9wYXRoPjwvc3ZnPic7CiAKLy8ganF1ZXJ5LnNob3d0aXBzLmpzCihmdW5jdGlvbihqUXVlcnkpIHsKCWpRdWVyeS5mbi5zaG93VGlwcyA9IGZ1bmN0aW9uKG9wdGlvbnMsZWxlbSl7CgkJdmFyIGNvbmZpZyA9IHsKCQkJc2tpbjoidHJpcHMiLAoJCQljb250ZW50OiQodGhpcykuYXR0cigidGlwcyIpfHwi5by55Ye657G75Z6L55qE5rCU5rOh5o+Q56S677yBIiwgIC8v5rCU5rOh5o+Q56S65YaF5a656YeM6Z2i5Y+v5Lul5pivSFRNTO+8jOm7mOiupOaYvuekuuiHquWumuS5ieeahOaPkOekuuWGheWuuQoJCQl3aWR0aDoiYXV0byIsICAvL+m7mOiupOS4umF1dG/vvIzlj6/ku6XlhpnlhbfkvZPlsLrlr7jlpoLvvJoyMDAKCQkJYWxpZ25UbzpbInJpZ2h0IiwiY2VudGVyIl0sICAvL+eureWktOaWueWQkQoJCQljb2xvcjpbInJnYigyNDcsIDIwNiwgNTcpIiwiI0ZGRkVGNCJdLCAgLy/ov5nph4zmmK/mj5DnpLrlsYLnmoTpo47moLzvvIznrKzkuIDkuKrlj4LmlbDkuLrmj5DnpLrovrnmoYbpopzoibLvvIznrKzkuozkuKrlj4LmlbDkuLrmj5DnpLrog4zmma/popzoibIKCQkJdHlwZToiaHRtbCIsICAgLy/mmL7npLrlhoXlrrnnsbvlnosKCQkJdHJpZ2dlcjoiY2xpY2siLCAgICAvL+m7mOiupOS4uueCueWHu+aYvuekuu+8jHNob3fkuLrliJ3lp4vljJblsLHmmL7npLrvvIxob3ZlcuS4uue7j+i/h+aYvuekuu+8jGZvY3Vz54Sm54K55pi+56S677yMbW91c2Xot5/pmo/pvKDmoIfmmL7npLrpmpDol48KCQkJc3BhY2luZzoxMCwgIC8v6buY6K6k5Li6566t5aS06Led56a75a+56LGh55qE5bC65a+4CgkJCWN1c3RvbWlkOiIiLCAgLy/oh6rlrprkuYlJRAoJCQlpc2Nsb3NlOmZhbHNlLCAgIC8v5piv5ZCm5pi+56S65YWz6Zet5oyJ6ZKuCgkJCXN1Y2Nlc3MgOiBudWxsICAgIC8v5oiQ5Yqf5ZCO55qE5Zue6LCD5Ye95pWwCgkJfTsKCQl2YXIgb3B0cyA9IGpRdWVyeS5leHRlbmQoY29uZmlnLCBvcHRpb25zKTsKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7CgkJCXZhciB0aGF0ID0galF1ZXJ5KHRoaXMpLHRpcEJveCx0aXBJZCxzZWxmSCxzZWxmVyxjb25JZCxkb2NXLCBzcGEgPSBvcHRzLnNwYWNpbmcsIHNraW49b3B0cy5za2luOwoJCQl2YXIgTWF0aHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTkpOwogICAgICAgICAgICB2YXIgcG1yID0gKG9wdHMuY3VzdG9taWQ9PSIiKSA/IE1hdGhyYW5kb20gOm9wdHMuY3VzdG9taWQucmVwbGFjZSgvWyMuXS8sICIiKTsKCQkJdmFyIHBvaW50ZXI9b3B0cy5hbGlnblRvLmxlbmd0aD09PTEgPyAnJytvcHRzLmFsaWduVG9bMF0rJycgOiAnJytvcHRzLmFsaWduVG9bMF0rJy0nK29wdHMuYWxpZ25Ub1sxXSsnJzsKIAoJCQlpZih0eXBlb2YgZWxlbSA9PSAnc3RyaW5nJykgewoJCQkJaWYoZWxlbSA9PSJzaG93Iil7CgkJCQkJalF1ZXJ5KCcjdGlwJytwbXIpLnNob3coKTsgIGpRdWVyeSgiI2NvbiIrcG1yKS5odG1sKG9wdHMuY29udGVudCk7CgkJCQkJc2hvd1Bvc2l0aW9uKHBvaW50ZXIsalF1ZXJ5KCcjdGlwJytwbXIpKTsKCQkJCQl9OwoJCQkJaWYoZWxlbSA9PSJoaWRlIil7alF1ZXJ5KCcjdGlwJytwbXIpLmhpZGUoKX07CgkJCX07CgkJCWlmKHR5cGVvZiBlbGVtID09ICcnIHx8IHR5cGVvZiBlbGVtID09IHVuZGVmaW5lZCl7cmV0dXJuIHRydWV9OwoJCQlpZihqUXVlcnkoJyN0aXAnK3BtcikubGVuZ3RoPT0xKXtyZXR1cm4gZmFsc2U7fQoJCQl0aXBCb3g9alF1ZXJ5KCc8ZGl2IGNsYXNzPSInK3NraW4rJyAnK3NraW4rJy0nK3BvaW50ZXIrJyIgaWQ9InRpcCcrcG1yKyciPjxpPjwvaT48ZW0+PC9lbT48ZGl2IGNsYXNzPSInK3NraW4rJ2NvbiIgaWQ9ImNvbicrcG1yKyciPjwvZGl2PjwvZGl2PicpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpOwoJCQl0aXBJZCA9IGpRdWVyeSgiI3RpcCIrcG1yKTsKCQkJY29uSWQgPSBqUXVlcnkoIiNjb24iK3Btcik7CiAKCQkJdmFyIGVkZ2Vjb2xvcj0nYm9yZGVyLScrb3B0cy5hbGlnblRvWzBdKyctY29sb3InLCB0Zmk9dGlwSWQuZmluZCgiaSIpLCB0ZmVtPXRpcElkLmZpbmQoImVtIiksIHRmaWVtPXRpcElkLmZpbmQoImksZW0iKTsKCQkJdGlwSWQuY3NzKHsncG9zaXRpb24nOidhYnNvbHV0ZScsYm9yZGVyOicxcHggc29saWQnLCdib3JkZXItY29sb3InOm9wdHMuY29sb3JbMF0sJ2JhY2tncm91bmQtY29sb3InOm9wdHMuY29sb3JbMV19KTsKCQkJaWYob3B0cy5hbGlnblRvWzFdPT0nY2VudGVyJyl7IHZhciBvZmZwb3M9NTAscGVyY2VuPSIlIjsgfWVsc2V7IHZhciBvZmZwb3M9NSxwZXJjZW49InB4IjsgfTsKCQkJdGZpZW0uY3NzKHt3aWR0aDowLGhlaWdodDowLGNvbnRlbnQ6JycsJ3Bvc2l0aW9uJzonYWJzb2x1dGUnfSkKCQkJdGZpLmNzcyh7Ym9yZGVyOic4cHggc29saWQgdHJhbnNwYXJlbnQnLCd6LWluZGV4Jzo1fSk7CgkJCXRmZW0uY3NzKHtib3JkZXI6JzdweCBzb2xpZCB0cmFuc3BhcmVudCcsJ3otaW5kZXgnOjEwfSk7CgkJCXN3aXRjaCAocG9pbnRlcikgewoJCQkJY2FzZSAndG9wLWNlbnRlcic6CgkJCQljYXNlICdib3R0b20tY2VudGVyJzoKCQkJCWNhc2UgJ3RvcC1sZWZ0JzoKCQkJCWNhc2UgJ2JvdHRvbS1sZWZ0JzoKCQkJCQl2YXIgcG9pPSJsZWZ0IjsKCQkJCQlpZihwb2ludGVyPT0ndG9wLWNlbnRlcicgfHwgcG9pbnRlcj09J2JvdHRvbS1jZW50ZXInKXsKCQkJCQkJdGZpLmNzcyh7Im1hcmdpbi1sZWZ0IjoiLThweCJ9KTsKCQkJCQkJdGZlbS5jc3MoeyJtYXJnaW4tbGVmdCI6Ii03cHgifSk7CgkJCQkJfQoJCQkJICAgIGJyZWFrOwoJCQkJY2FzZSAnbGVmdC1jZW50ZXInOgoJCQkJY2FzZSAncmlnaHQtY2VudGVyJzoKCQkJCWNhc2UgJ2xlZnQtdG9wJzoKCQkJCWNhc2UgJ3JpZ2h0LXRvcCc6CgkJCQkJdmFyIHBvaT0idG9wIjsKCQkJCQlpZihwb2ludGVyPT0nbGVmdC1jZW50ZXInIHx8IHBvaW50ZXI9PSdyaWdodC1jZW50ZXInKXsKCQkJCQkJdGZpLmNzcyh7Im1hcmdpbi10b3AiOiItOHB4In0pOwoJCQkJCQl0ZmVtLmNzcyh7Im1hcmdpbi10b3AiOiItN3B4In0pOwoJCQkJCX0KCQkJCSAgICBicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJdmFyIHBvaT0icmlnaHQiOwoJCQkJICAgIGJyZWFrOwoJCQl9OwogCgkJCWlmKHBvaW50ZXI9PSdmb2xsb3cnKXsKCQkJCXRmaS5jc3Moeydib3JkZXItYm90dG9tLWNvbG9yJzpvcHRzLmNvbG9yWzBdLGxlZnQ6Jycrb2ZmcG9zK3BlcmNlbisnJyxib3R0b206JzEwMCUnfSk7CgkJCQl0ZmVtLmNzcyh7J2JvcmRlci1ib3R0b20tY29sb3InOm9wdHMuY29sb3JbMV0sbGVmdDonJysob2ZmcG9zKyhvcHRzLmFsaWduVG9bMV09PSdjZW50ZXInPzA6MSkpK3BlcmNlbisnJyxib3R0b206JzEwMCUnfSk7CgkJCX1lbHNlewoJCQkJdGZpLmNzcyhlZGdlY29sb3Isb3B0cy5jb2xvclswXSkuY3NzKHBvaSwnJytvZmZwb3MrcGVyY2VuKycnKTsKCQkJCXRmZW0uY3NzKGVkZ2Vjb2xvcixvcHRzLmNvbG9yWzFdKS5jc3MocG9pLCcnKyhvZmZwb3MrKG9wdHMuYWxpZ25Ub1sxXT09J2NlbnRlcic/MDoxKSkrcGVyY2VuKycnKTsKCQkJCXRmaWVtLmNzcyhvcHRzLmFsaWduVG9bMF0sJzEwMCUnKTsKCQkJfTsKIAoJCQlzd2l0Y2ggKG9wdHMudHlwZSkgewoJCQkJY2FzZSAnaHRtbCc6Y29uSWQuaHRtbChvcHRzLmNvbnRlbnQpOyBicmVhazsKCQkJCWNhc2UgJ2lkJyAgOgoJCQkJICAgIHZhciB0ZW1waWQ9alF1ZXJ5KG9wdHMuY29udGVudCkgLHdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQkJCQlpZih0ZW1waWQuY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKXsgIHRlbXBpZC5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0pOyB9CgkJCQkJY29uSWQuYXBwZW5kKHRlbXBpZCk7CgkJCQkgICAgYnJlYWs7CgkJCX07CgkJCWlmKG9wdHMuaXNjbG9zZSl7CgkJCQlqUXVlcnkoJzxzcGFuIGNsYXNzPSInK3NraW4rJ2Nsb3NlIiBpZD0iY2xvc2UnK3BtcisnIj4mdGltZXM7PC9zcGFuPicpLmFwcGVuZFRvKHRpcElkKTsKCQkJCXRpcElkLmZpbmQoIiNjbG9zZSIrcG1yKyIiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dGlwSWQuaGlkZSgpO30pOwoJCQl9CiAKCQkJaWYodHlwZW9mIG9wdHMud2lkdGggPT09ICdzdHJpbmcnKXsKCQkJCWRvY1cgPSBwYXJzZUludChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKihvcHRzLndpZHRoLnJlcGxhY2UoJyUnLCcnKS8xMDApKTsKCQkJCSh0eXBlb2Ygb3B0cy53aWR0aCA9PSAnYXV0bycgfHwgdHlwZW9mIG9wdHMud2lkdGggPT0gJycpID8gdGlwQm94LmNzcyh7d2lkdGg6J2F1dG8nfSkgOiB0aXBCb3guY3NzKHt3aWR0aDpkb2NXfSk7CgkJCQl0aXBCb3guaGVpZ2h0KCk7CgkJCX1lbHNlewoJCQkJdGlwQm94LndpZHRoKG9wdHMud2lkdGgpLmhlaWdodCgpOwoJCQl9CiAgICAgICAgICAgIGZ1bmN0aW9uIHNob3dQb3NpdGlvbihwb2ludGVyLGNlbGwpewoJCQkJdmFyIHNlbGZIID0gdGhhdC5vdXRlckhlaWdodCh0cnVlKSwgc2VsZlcgPSB0aGF0Lm91dGVyV2lkdGgodHJ1ZSk7CgkJCQl2YXIgcG9zdD10aGF0Lm9mZnNldCgpLnRvcCwgcG9zbD10aGF0Lm9mZnNldCgpLmxlZnQ7CgkJCQl2YXIgdGlwQ2VsbD0oY2VsbD09IiIgfHwgY2VsbD09dW5kZWZpbmVkKSA/IHRpcElkIDogY2VsbDsKCQkJICAgIHZhciB0aXBIPXRpcENlbGwub3V0ZXJIZWlnaHQodHJ1ZSksIHRpcFc9dGlwQ2VsbC5vdXRlcldpZHRoKHRydWUpOwogCgkJCQlzd2l0Y2ggKHBvaW50ZXIpIHsKCQkJCQljYXNlICd0b3AtbGVmdCc6IHRpcENlbGwuY3NzKHt0b3A6cG9zdC10aXBILXNwYSxsZWZ0OnBvc2x9KTsgYnJlYWs7CgkJCQkJY2FzZSAndG9wLWNlbnRlcic6IHRpcENlbGwuY3NzKHt0b3A6cG9zdC10aXBILXNwYSxsZWZ0OnBvc2wtKHRpcFcvMikrKHNlbGZXLzIpfSk7IGJyZWFrOwoJCQkJCWNhc2UgJ3RvcC1yaWdodCc6IHRpcENlbGwuY3NzKHt0b3A6cG9zdC10aXBILXNwYSxsZWZ0OnBvc2wtKHRpcFctc2VsZlcpfSk7IGJyZWFrOwoJCQkJCWNhc2UgJ2JvdHRvbS1sZWZ0JzogdGlwQ2VsbC5jc3Moe3RvcDpwb3N0K3NlbGZIK3NwYSxsZWZ0OnBvc2x9KTsgYnJlYWs7CgkJCQkJY2FzZSAnYm90dG9tLWNlbnRlcic6IHRpcENlbGwuY3NzKHt0b3A6cG9zdCtzZWxmSCtzcGEsbGVmdDpwb3NsLSh0aXBXLzIpKyhzZWxmVy8yKX0pOyBicmVhazsKCQkJCQljYXNlICdib3R0b20tcmlnaHQnOiB0aXBDZWxsLmNzcyh7dG9wOnBvc3Qrc2VsZkgrc3BhLGxlZnQ6cG9zbC0odGlwVy1zZWxmVyl9KTsgYnJlYWs7CgkJCQkJY2FzZSAnbGVmdC10b3AnOiB0aXBDZWxsLmNzcyh7dG9wOnBvc3QsbGVmdDpwb3NsLXRpcFctc3BhfSk7IGJyZWFrOwoJCQkJCWNhc2UgJ2xlZnQtY2VudGVyJzogdGlwQ2VsbC5jc3Moe3RvcDpwb3N0LSh0aXBILzIpKyhzZWxmSC8yKSxsZWZ0OnBvc2wtdGlwVy1zcGF9KTsgYnJlYWs7CgkJCQkJY2FzZSAncmlnaHQtdG9wJzogdGlwQ2VsbC5jc3Moe3RvcDpwb3N0LGxlZnQ6cG9zbCtzZWxmVytzcGF9KTsgYnJlYWs7CgkJCQkJY2FzZSAncmlnaHQtY2VudGVyJzogdGlwQ2VsbC5jc3Moe3RvcDpwb3N0LSh0aXBILzIpKyhzZWxmSC8yKSxsZWZ0OnBvc2wrc2VsZlcrc3BhfSk7IGJyZWFrOwoJCQkJCWNhc2UgJ2ZvbGxvdyc6IHRoYXQubW91c2Vtb3ZlKGZ1bmN0aW9uKGUpIHsgdGlwQ2VsbC5jc3Moe3RvcDplLnBhZ2VZICsgMzAsbGVmdDplLnBhZ2VYIC0gNn0pOyB9KTsgYnJlYWs7CgkJCQl9OwoJCQl9CgkJCXRpcEJveC5oaWRlKCk7CgkJCXN3aXRjaCAob3B0cy50cmlnZ2VyKXsKCQkJCWNhc2UgJ3Nob3cnOnNob3dQb3NpdGlvbihwb2ludGVyKTt0aXBCb3guc2hvdygpO2JyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnY2xpY2snOnRoYXQuY2xpY2soZnVuY3Rpb24oKXtzaG93UG9zaXRpb24ocG9pbnRlcik7dGlwQm94LnNob3coKTt9KTticmVhazsKCQkJCWNhc2UgJ2hvdmVyJzp0aGF0LmhvdmVyKGZ1bmN0aW9uKCl7c2hvd1Bvc2l0aW9uKHBvaW50ZXIpO3RpcEJveC5zaG93KCk7IHRpcEJveC5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe2pRdWVyeSh0aGlzKS5zaG93KCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7alF1ZXJ5KHRoaXMpLmhpZGUoKX0pfSxmdW5jdGlvbigpe3RpcEJveC5oaWRlKCk7fSk7YnJlYWs7CgkJCQljYXNlICdmb2N1cyc6dGhhdC5mb2N1cyhmdW5jdGlvbigpe3Nob3dQb3NpdGlvbihwb2ludGVyKTt0aXBCb3guc2hvdygpO30pOyAgdGhhdC5ibHVyKGZ1bmN0aW9uKCl7dGlwQm94LmhpZGUoKTt9KTticmVhazsKCQkJCWNhc2UgJ21vdXNlJzp0aGF0LmhvdmVyKGZ1bmN0aW9uKCl7c2hvd1Bvc2l0aW9uKHBvaW50ZXIpO3RpcEJveC5zaG93KCk7fSxmdW5jdGlvbigpe3RpcEJveC5oaWRlKCk7fSk7YnJlYWs7CgkJCX07CgkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXtvcHRzLnN1Y2Nlc3MgJiYgb3B0cy5zdWNjZXNzKCk7fSwgMSk7CgkJfSk7Cgl9Cn0pKGpRdWVyeSk7CiAKKGZ1bmN0aW9uICgpIHsKICAgICd1c2Ugc3RyaWN0JzsKIAogICAgbCgiQ1NETkdyZWVuZXIgViIgKyB2ZXJzaW9uKTsKICAgIGlmIChpc0ZpcmVmb3goKSkgewogICAgICAgIGNvbnNvbGUubG9nKCLmgqjmraPlnKjkvb/nlKjngavni5DmtY/op4jlmajvvIzlsIbkvb/nlKjlhbzlrrnmqKHlvI/ov5DooYwgQ1NETkdyZWVuZXLjgIIiKTsKICAgIH0KICAgIHByb2dyZXNzb3IuaW5pdCgpOwogCiAgICAvLyDnu7/ljJborr7lrprmjInpkq7ngrnlh7vkuovku7YKICAgIGxldCBqc3MgPSAiIjsKICAgIGpzcyArPSAiPHNjcmlwdD5mdW5jdGlvbiBzaG93Q29uZmlnKCkgeyI7CiAgICBqc3MgKz0gIiQod2luZG93KS5zY3JvbGxUb3AoMCk7IjsKICAgIGpzcyArPSAiJCgnLndoaXRlX2NvbnRlbnQnKS5mYWRlSW4oNTAwKTsiOwogICAganNzICs9ICIkKCdib2R5JykuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKTsiOwogICAganNzICs9ICIkKCdib2R5JykuY3NzKCdmaWx0ZXInLCdibHVyKDNweCknKTsiOwogICAganNzICs9ICIkKCdib2R5JykuY3NzKCdwb2ludGVyLWV2ZW50cycsJ25vbmUnKSI7CiAgICBqc3MgKz0gIn08L3NjcmlwdD4iOwogICAgJCgiYm9keSIpLmFwcGVuZChqc3MpOwogCiAgICAvLyDkv53lrZjmjInpkq7ngrnlh7vkuovku7YKICAgIGxldCBzYXZlSnNzID0gIiI7CiAgICBzYXZlSnNzICs9ICI8c2NyaXB0PmZ1bmN0aW9uIHNhdmVBbmRSZWxvYWQoKSB7IjsKICAgIHNhdmVKc3MgKz0gIiQoJyNjb25maWdDb250ZW50JykuZmFkZU91dCgyMDApOyI7CiAgICBzYXZlSnNzICs9ICJzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sMjAwKSI7CiAgICBzYXZlSnNzICs9ICJ9PC9zY3JpcHQ+IjsKICAgICQoImJvZHkiKS5hcHBlbmQoc2F2ZUpzcyk7CiAKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGJsb2NrVVJMID0gY3VycmVudFVSTC5zcGxpdCgiLyIpLmxlbmd0aDsKICAgICAgICB2YXIgbWFpbiA9IC8od3d3XC5jc2RuXC5uZXRcLykkLzsKICAgICAgICB2YXIgbWFpbk5hdiA9IC9uYXYvOwogICAgICAgIHZhciBhcnRpY2xlID0gL2FydGljbGUvOwogICAgICAgIHZhciBiYnMgPSAvYmJzXC5jc2RuXC5uZXQvOwogICAgICAgIHZhciBibG9nID0gL2Jsb2dcLmNzZG5cLm5ldC87CiAgICAgICAgdmFyIGJsb2cyID0gL1wvYXJ0aWNsZVwvbGlzdFwvLzsKICAgICAgICB2YXIgZG93bmxvYWQgPSAvZG93bmxvYWRcLmNzZG5cLm5ldC87CiAgICAgICAgdmFyIGxvZ2luID0gL3Bhc3Nwb3J0XC5jc2RuXC5uZXQvOwogICAgICAgIHZhciB6b25lID0gL21lXC5jc2RuXC5uZXQvOwogICAgICAgIHZhciBvdGhlciA9IC8od3d3XC5jc2RuXC5uZXRcLykvOwogICAgICAgIHZhciBtcCA9IC9tcFwuY3NkblwubmV0LzsKICAgICAgICB2YXIgYXJ0aWNsZV9tb250aCA9IC9hcnRpY2xlXC9tb250aC87CiAgICAgICAgdmFyIGxpbmsgPSAvbGlua1wuY3NkblwubmV0LzsKIAogICAgICAgIC8vIOaVsOe7hOWIneWni+WMlgogICAgICAgIGxpc3QgPSBbXTsKICAgICAgICAvLyDlpLTpg6jliIYKICAgICAgICAvLyBBUFAKICAgICAgICAvLyBwdXQoIi5hcHAtYXBwIik7CiAgICAgICAgLy8gVklQCiAgICAgICAgcHV0KCIudmlwLWNhaXNlIik7CiAgICAgICAgLy8g6K6w5b2V5L2g55qE5oiQ6ZW/5Y6G56iL77yI6K6w5Liq5q+b77yJCiAgICAgICAgcHV0KCIjd3JpdGVHdWlkZSIpOwogICAgICAgIC8vIOaWsOmAmuefpeWwj+WchueCue+8iOacqueZu+W9leaJjea2iOaOie+8iQogICAgICAgIGlmICgkKCIudXNlcmluZm8gYSIpLnRleHQoKSA9PT0gJ+eZu+W9lS/ms6jlhownKSB7CiAgICAgICAgICAgIHB1dCgiI21zZy1jaXJjbGUiKTsKICAgICAgICB9CiAgICAgICAgLy8g6aG26YOo6LC35q2M5bm/5ZGKCiAgICAgICAgcHV0KCIuYWRzYnlnb29nbGUiKTsKICAgICAgICAvLyDmgqzmta7lnKjpobbmoI/mjInpkq7kuIrlh7rnjrDnmoTkuoznu7TnoIEKICAgICAgICBwdXQoIi5hcHBDb250cm9sIik7CiAgICAgICAgLy8g6aG26YOo5bm/5ZGKCiAgICAgICAgcHV0KCIuYWR2ZXJ0LWJnIik7CiAKICAgICAgICBpZiAobWFpbi50ZXN0KGN1cnJlbnRVUkwpIHx8IG1haW5OYXYudGVzdChjdXJyZW50VVJMKSkgewogICAgICAgICAgICBsKCLmraPlnKjkvJjljJbkuLvpobXkvZPpqowuLi4iKTsKICAgICAgICAgICAgLy8g5bi46KeECiAgICAgICAgICAgIC8vIOWktOmDqOW5v+WRigogICAgICAgICAgICBwdXQoIi5iYW5uZXItYWQtYm94Iik7CiAgICAgICAgICAgIC8vIOW1jOWFpeW5v+WRigogICAgICAgICAgICBwdXQoIiNrcF9ib3hfMjExIik7CiAgICAgICAgICAgIC8vIOWPs+S+p+W5v+WRigogICAgICAgICAgICBwdXQoIi5zbGlkZS1vdXRlciIpOwogICAgICAgICAgICAvLyDlj7Pkvqfor6bmg4UKICAgICAgICAgICAgcHV0KCIucGVyc2lvbl9hcnRpY2xlIik7CiAgICAgICAgICAgIC8vIOWPs+S+p+aOqOiNkAogICAgICAgICAgICAkKCIuZmVlZF9jb21wYW55IikucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIOW5v+WRiui9ruaSrQogICAgICAgICAgICBwdXQoIi5lbC1jYXJvdXNlbF9fY29udGFpbmVyIik7CiAgICAgICAgICAgIC8vIOmhtumDqOaoquW5hQogICAgICAgICAgICBwdXQoIi50b29sYmFyLWFkdmVydCIpOwogICAgICAgICAgICAvLyDpobbmoI9WSVDpgInpobkKICAgICAgICAgICAgJCgnLnRvb2xiYXItc3ViTWVudS1ib3gnKS5maW5kKCJbaHJlZj0naHR0cHM6Ly9tYWxsLmNzZG4ubmV0L3ZpcCddIikucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIENTRE7lt6Xlhbflub/lkYoKICAgICAgICAgICAgcHV0KCIjZmxvb3ItYWRfNjQiKTsKICAgICAgICAgICAgY2xlYW4oMTApOwogICAgICAgICAgICAvLyBjb21tb24oNSwgMTApOwogICAgICAgICAgICAvLyDljZrlrqLlj4rkuLvpobXkvJjljJYKICAgICAgICAgICAgY29tbW9uKDksIDEwKTsKICAgICAgICAgICAgbG9vcCgzKTsKICAgICAgICAgICAgbG9vcCgxKTsKICAgICAgICB9IGVsc2UgaWYgKChibG9nLnRlc3QoY3VycmVudFVSTCkgJiYgYmxvY2tVUkwgPT09IDQpIHx8IGJsb2cyLnRlc3QoY3VycmVudFVSTCkpIHsKICAgICAgICAgICAgbCgi5q2j5Zyo5LyY5YyW5Liq5Lq65Y2a5a6i5Li76aG15L2T6aqMLi4uIik7CiAgICAgICAgICAgIC8vIOW4uOinhAogICAgICAgICAgICAvLyDlpLTpg6jlub/lkYoKICAgICAgICAgICAgcHV0KCIuYmFubmVyLWFkLWJveCIpOwogICAgICAgICAgICAvLyDlj7Pkvqflub/lkYoKICAgICAgICAgICAgcHV0KCIuc2xpZGUtb3V0ZXIiKTsKICAgICAgICAgICAgLy8g5Y+z5L6n6K+m5oOFCiAgICAgICAgICAgIHB1dCgiLnBlcnNpb25fYXJ0aWNsZSIpOwogICAgICAgICAgICAvLyDlt6bkvqflub/lkYoKICAgICAgICAgICAgcHV0KCIubWI4Iik7CiAgICAgICAgICAgIHB1dCgiI2twX2JveF81MDMiKTsKICAgICAgICAgICAgcHV0KCIja3BfYm94XzIxNCIpOwogICAgICAgICAgICBjbGVhbigxMCk7CiAgICAgICAgICAgIC8vIGNvbW1vbig1LCAxMCk7CiAgICAgICAgICAgIGxvb3AoMyk7CiAgICAgICAgICAgIGxvb3AoMSk7CiAgICAgICAgfSBlbHNlIGlmIChhcnRpY2xlLnRlc3QoY3VycmVudFVSTCkgJiYgIW1wLnRlc3QoY3VycmVudFVSTCkgJiYgIWFydGljbGVfbW9udGgudGVzdChjdXJyZW50VVJMKSkgewogICAgICAgICAgICBsKCLmraPlnKjkvJjljJbpmIXor7vkvZPpqowuLi4iKTsKICAgICAgICAgICAgLy8g57u/5YyW6K6+5a6aCiAgICAgICAgICAgIGlmIChpc0ZpcmVmb3goKSkgewogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKCIudG9vbGJhci1jb250YWluZXItbWlkZGxlIikucHJlcGVuZCgiPGRpdiBpZD0nZ3JlZW5lclByb2dyZXNzJyBzdHlsZT0ndGV4dC1hbGlnbjpyaWdodCc+PC9kaXY+Iik7CiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWxPZjAgPSAnPGRpdiBjbGFzcz0idG9vbGJhci1idG4gY3Nkbi10b29sYmFyLWZsIj48YSBpZD0iZ3JlZW5lclNldHRpbmdzIiB0aXRsZT0i54K55Ye75omT5byAIENTRE5HcmVlbmVyIOe7v+WMluiuvuWumiIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzaG93Q29uZmlnKCk7Ij4nICsgc2V0dGluZ3Nfc3ZnICsgJzwvYT48L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICQoIi50b29sYmFyLWJ0bnMiKS5wcmVwZW5kKGh0bWxPZjApOwogICAgICAgICAgICAgICAgICAgIGlmIChpc0ZpcmVmb3goKSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyDmj5DnpLoKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpcHNDb29raWUgPSBjb25maWcuZ2V0KCJzaG93VGlwIiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXBzQ29va2llKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VGlwcygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zZXQoInNob3dUaXAiLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCIudG9vbGJhci1jb250YWluZXItbWlkZGxlIikucHJlcGVuZCgiPGRpdiBpZD0nZ3JlZW5lclByb2dyZXNzJyBzdHlsZT0ndGV4dC1hbGlnbjpyaWdodCc+PC9kaXY+Iik7CiAgICAgICAgICAgICAgICBsZXQgaHRtbE9mMCA9ICc8ZGl2IGNsYXNzPSJ0b29sYmFyLWJ0biBjc2RuLXRvb2xiYXItZmwiPjxhIGlkPSJncmVlbmVyU2V0dGluZ3MiIHRpdGxlPSLngrnlh7vmiZPlvIAgQ1NETkdyZWVuZXIg57u/5YyW6K6+5a6aIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNob3dDb25maWcoKTsiPicgKyBzZXR0aW5nc19zdmcgKyAnPC9hPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAkKCIudG9vbGJhci1idG5zIikucHJlcGVuZChodG1sT2YwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyDluLjop4QKICAgICAgICAgICAgLy8g5Y+z5L6n5bm/5ZGK77yM5pS+5Yiw56ys5LiA5Liq5riF6ZmkCiAgICAgICAgICAgIC8vIHB1dCgiLnJlY29tbWVuZC1yaWdodCIpOwogICAgICAgICAgICBwdXQoIiNhZGRBZEJveCIpOwogICAgICAgICAgICAvLyBwdXQoIi5hc2lkZS1ib3gua2luZF9wZXJzb24uZC1mbGV4LmZsZXgtY29sdW1uIik7CiAgICAgICAgICAgIHB1dCgiLnJlY29tbWVuZC10b3AtYWRib3giKTsKICAgICAgICAgICAgLy8gcHV0KCIucmVjb21tZW5kLWxpc3QtYm94LmQtZmxleC5mbGV4LWNvbHVtbi5hc2lkZS1ib3giKTsKICAgICAgICAgICAgLy8g5bem5L6n5bm/5ZGKCiAgICAgICAgICAgIC8vIHB1dCgiI2NvbnRhaW5lciIpOwogICAgICAgICAgICAvLyDlv6vmnaXlhpnljZrlrqLlkKcKICAgICAgICAgICAgcHV0KCIuYmxvZ190aXBfYm94Iik7CiAgICAgICAgICAgIC8vIOaOqOiNkOWFs+azqOeUqOaItwogICAgICAgICAgICBwdXQoIi5ibG9nLWV4cGVydC1yZWNvbW1lbmQtYm94Iik7CiAgICAgICAgICAgIC8vIOWPs+S4i+inklZJUAogICAgICAgICAgICBwdXQoIi5tZWF1LWdvdG9wLWJveCIpOwogICAgICAgICAgICAvLyDlub/lkYoKICAgICAgICAgICAgcHV0KCIubWVkaWF2X2FkIik7CiAgICAgICAgICAgIHB1dCgiLnB1bGxsb2ctYm94Iik7CiAgICAgICAgICAgIHB1dCgiLnJlY29tbWVuZC1hZC1ib3giKTsKICAgICAgICAgICAgcHV0KCIuYm94LXNoYWRvdyIpOwogICAgICAgICAgICBwdXQoIi50eXBlX2hvdF93b3JkIik7CiAgICAgICAgICAgIHB1dCgiLmZvdXJ0aF9jb2x1bW4iKTsKICAgICAgICAgICAgLy8g6auY5YiG6L6o546H5pe25Y+z5L6n5paH56ug5o6o6I2QCiAgICAgICAgICAgIC8vIHB1dCgiLnJpZ2h0LWl0ZW0iKTsKICAgICAgICAgICAgLy8g5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiI2FzaWRlRm9vdGVyIik7CiAgICAgICAgICAgIHB1dCgiI2FkLWRpdiIpOwogICAgICAgICAgICBwdXQoIiM0NzkiKTsKICAgICAgICAgICAgcHV0KCIjNDgwIik7CiAgICAgICAgICAgIC8vIOaJk+i1jwogICAgICAgICAgICBwdXQoIi5wb3N0VGltZSIpOwogICAgICAgICAgICAvLyDor77nqIvmjqjojZAKICAgICAgICAgICAgcHV0KCIudDAiKTsKICAgICAgICAgICAgLy8g5YiG5Lqr5rW35oqlCiAgICAgICAgICAgIHB1dCgiLnNoYXJlU3VnZ2VzdCIpOwogICAgICAgICAgICAvLyDlupXpg6jkuLvpopgKICAgICAgICAgICAgcHV0KCIudGVtcGxhdGUtYm94Iik7CiAgICAgICAgICAgIC8vIOivhOiuuuWMuuW5v+WRigogICAgICAgICAgICBwdXQoImRpdiNkbXBfYWRfNTgiKTsKICAgICAgICAgICAgLy8g5omT6LWPCiAgICAgICAgICAgIHB1dCgiLnJld2FyZC11c2VyLWJveCIpOwogICAgICAgICAgICAvLyDlj7PkvqfmiZPotY/mjInpkq4KICAgICAgICAgICAgcHV0KCIudG8tcmV3YXJkIik7CiAgICAgICAgICAgIC8vIOaOqOiNkOWGheWuueW5v+WRigogICAgICAgICAgICBwdXQoIi5yZWNvbW1lbmQtcmVjb21tZW5kLWJveCIpOwogICAgICAgICAgICAvLyDlj7Pkvqflub/lkYoKICAgICAgICAgICAgcHV0KCIuaW5kZXhTdXBlcmlzZSIpOwogICAgICAgICAgICAvLyDmiqLmspnlj5Hop5LmoIcKICAgICAgICAgICAgcHV0KCIuY29tbWVudC1zb2ZhLWZsYWciKTsKICAgICAgICAgICAgLy8g6aG1amlvCiAgICAgICAgICAgIHB1dCgiLmJvdHRvbS1wdWItZm9vdGVyIik7CiAgICAgICAgICAgIC8vIOeZu+W9leafpeeci+acquivu+a2iOaBrwogICAgICAgICAgICBwdXQoIi50b29sYmFyLW5vdGljZS1idWJibGUiKTsKICAgICAgICAgICAgLy8g5Y+z5L6n5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLnJlY29tbWVuZC10b3AtYWRib3giKTsKICAgICAgICAgICAgLy8g5Y+z5L6n5Zub5Liq5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLnByb2dyYW1tZXIxQm94Iik7CiAgICAgICAgICAgIHB1dCgiLnByb2dyYW1tZXIyQm94Iik7CiAgICAgICAgICAgIHB1dCgiLnByb2dyYW1tZXIzQm94Iik7CiAgICAgICAgICAgIHB1dCgiLnByb2dyYW1tZXI0Qm94Iik7CiAgICAgICAgICAgIC8vIOeCuei1nuawlOazoQogICAgICAgICAgICBwdXQoIi50cmlwbGV0LXByb21wdCIpOwogICAgICAgICAgICAvLyDpobbpg6jmqKrluYUKICAgICAgICAgICAgcHV0KCIudG9vbGJhci1hZHZlcnQiKTsKICAgICAgICAgICAgLy8g5bqV6YOo5L+h5oGvCiAgICAgICAgICAgIHB1dCgiLmJsb2ctZm9vdGVyLWJvdHRvbSIpOwogICAgICAgICAgICAvLyDlj7PkvqfmoI/lub/lkYoKICAgICAgICAgICAgcHV0KCIjNjUyNyIpOwogICAgICAgICAgICBwdXQoIiNyZWNvbW1lbmRBZEJveCIpOwogICAgICAgICAgICAvLyDmjqjojZDlhoXlrrlUaXRsZQogICAgICAgICAgICBwdXQoIi5yZWNvbW1lbmQtdGl0LW1vZCIpOwogICAgICAgICAgICAvLyDnuqLljIXmj5DphpIKICAgICAgICAgICAgcHV0KCIuY3Nkbi1yZWRwYWNrLWxvdHRlcnktYnRuLWJveCIpOwogICAgICAgICAgICAvLyDlrabnlJ/orqTor4EKICAgICAgICAgICAgcHV0KCIuY3Nkbi1oaWdoc2Nob29sLXdpbmRvdyIpOwogICAgICAgICAgICAvLyDlj7Pkvqfmgqzmta7moI/pmaTnva7pobbku6XlpJbnmoTmjInpkq4KICAgICAgICAgICAgcHV0KCIub3B0aW9uLWJveFtkYXRhLXR5cGU9J2d1aWRlJ10sLm9wdGlvbi1ib3hbZGF0YS10eXBlPSdjcyddLC5jc2RuLWNvbW1vbi1sb2dvLWFkdmVydCIpOwogICAgICAgICAgICBjbGVhbigxMCk7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgIC8vIOWxleW8gOivhOiuuueahOaJgOacieWbnuWkjQogICAgICAgICAgICAgICAkKCcuYnRuLXJlYWQtcmVwbHknKS5jbGljaygpOwogICAgICAgICAgICB9LCAxNTAwKTsKICAgICAgICAgICAgLy8g5Li75Yqo5Yqg5YWl5Y+z5L6n5qCPCiAgICAgICAgICAgIGlmICgkKCIucmVjb21tZW5kLXJpZ2h0IikubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAkKCIjbWFpbkJveCIpLmFmdGVyKCc8ZGl2IGNsYXNzPSJyZWNvbW1lbmQtcmlnaHQgIGFsaWduLWl0ZW1zLXN0cmV0Y2ggY2xlYXJmaXgiIGlkPSJyaWdodEFzaWRlIj48YXNpZGUgY2xhc3M9InJlY29tbWVuZC1yaWdodF9hc2lkZSI+PGRpdiBpZD0icmVjb21tZW5kLXJpZ2h0IiBzdHlsZT0iaGVpZ2h0OiAxMDAlOyBwb3NpdGlvbjogZml4ZWQ7IHRvcDogNTJweDsgb3ZlcmZsb3c6IHNjcm9sbDsiPjwvZGl2PjwvYXNpZGU+PC9kaXY+Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8g5LiK5qCP5oyJ6ZKu5Yig6ZmkCiAgICAgICAgICAgICQoIi50b29sYmFyLW1lbnVzID4gbGkgPiBhOmNvbnRhaW5zKCfkuJPmoI/or77nqIsnKSIpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIudG9vbGJhci1tZW51cyA+IGxpID4gYTpjb250YWlucygn5o+S5Lu2JykiKS5wYXJlbnQoKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiLnRvb2xiYXItbWVudXMgPiBsaSA+IGE6Y29udGFpbnMoJ+iupOivgScpIikucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIOS/ruWkjeaXoOazlemAieaLqeWkjeWItgogICAgICAgICAgICAkKCJjb2RlIikuY3NzKCJ1c2VyLXNlbGVjdCIsImF1dG8iKTsKICAgICAgICAgICAgJCgiI2NvbnRlbnRfdmlld3MiKS5jc3MoInVzZXItc2VsZWN0IiwiYXV0byIpOwogICAgICAgICAgICAkKCJwcmUiKS5jc3MoInVzZXItc2VsZWN0IiwiYXV0byIpOzcKICAgICAgICAgICAgLy8g5Zu+54mH5re35paH5a2X5pe277yM5peg5rOV5a6M5pW05aSN5Yi277yM5Zu+54mH5LiN5Lya6KKr5aSN5Yi25LiL5p2lIGh0dHBzOi8vZ2l0aHViLmNvbS9hZGxlcmVkL0NTRE5HcmVlbmVyL2lzc3Vlcy84NwogICAgICAgICAgICAvL2xldCBlbCA9ICQoIm1haW4gLmJsb2ctY29udGVudC1ib3giKVswXTsKICAgICAgICAgICAgLy9sZXQgZWxDbG9uZSA9IGVsLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgLy9lbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbENsb25lLCBlbCk7CiAgICAgICAgICAgIC8vIOS/neWtmGNzZG7nmoTnvZHpobXlho3mrKHmiZPlvIDkvJroh6rliqjot7PovazliLDpppbpobUgaHR0cHM6Ly9naXRodWIuY29tL2FkbGVyZWQvQ1NETkdyZWVuZXIvaXNzdWVzLzk3CiAgICAgICAgICAgICQoIltvbmVycm9yXSIpLnJlbW92ZSgpOwogICAgICAgICAgICAvLyBDU0RO6YeN5a6a5ZCR5aSW6ZO+5LiN6IO95Zyo5paw55qE56qX5Y+j6Lez6L2sIGh0dHBzOi8vZ2l0aHViLmNvbS9hZGxlcmVkL0NTRE5HcmVlbmVyL2lzc3Vlcy84MAogICAgICAgICAgICAkKCIjYXJ0aWNsZV9jb250ZW50IGFbaHJlZl0iKS5hdHRyKCJ0YXJnZXQiLCAiX2JsYW5rIik7CiAgICAgICAgICAgIC8vIOaQnOe0ouahhuS8mOWMlgogICAgICAgICAgICAvLyQoIiN0b29sYmFyLXNlYXJjaC1pbnB1dCIpLmNzcygid2lkdGgiLCAiY2FsYygxMDAlIC0gNDAwcHgpIik7CiAgICAgICAgICAgIC8vIOWPlua2iOS7o+eggeaKmOWPoAogICAgICAgICAgICAkKCIubG9vay1tb3JlLXByZUNvZGUiKS5jbGljaygpOwogICAgICAgICAgICAvLyDor6Lpl67mjqjojZDmmK/lkKbmnInmhI/kuYnnmoTpl67ljbfosIPmn6UKICAgICAgICAgICAgJCgiI3JlY29tbWVuZE5wcyIpLnJlbW92ZSgpOwogICAgICAgICAgICAvLyDnu7/ljJborr7nva4KICAgICAgICAgICAgY29tbW9uKDYsIDEpOwogICAgICAgICAgICAvLyDlsY/luZXpgILphY0KICAgICAgICAgICAgY29tbW9uKDQsIDEpOwogICAgICAgICAgICAvLyDor4TorroKICAgICAgICAgICAgY29tbW9uKDEsIDMwKTsKICAgICAgICAgICAgLy8g5YW25a6DCiAgICAgICAgICAgIGNvbW1vbigyLCAyMCk7CiAgICAgICAgICAgIC8vIOmhtumDqOaYvuekuuS9nOiAheS/oeaBrwogICAgICAgICAgICBjb21tb24oOCwgMSk7CiAgICAgICAgICAgIC8vIOWNmuWuouWPiuS4u+mhteS8mOWMlgogICAgICAgICAgICBjb21tb24oOSwgMTApOwogICAgICAgICAgICAvLyDlvqrnjq/nur/nqIvlvIDlp4sKICAgICAgICAgICAgbG9vcCgyKTsKICAgICAgICAgICAgbG9vcCgzKTsKICAgICAgICB9IGVsc2UgaWYgKGJicy50ZXN0KGN1cnJlbnRVUkwpKSB7CiAgICAgICAgICAgIGwoIuato+WcqOS8mOWMluiuuuWdm+S9k+mqjC4uLiIpOwogICAgICAgICAgICAvLyDluLjop4QKICAgICAgICAgICAgLy8g6K+E6K665bWM5YWl5bCP5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLnBvc3RfcmVjb21tZW5kIik7CiAgICAgICAgICAgIC8vIOW6lemDqOaOqOiNkAogICAgICAgICAgICBwdXQoIiNwb3N0X2ZlZWRfd3JhcCIpOwogICAgICAgICAgICAvLyDlupXpg6jnm7jlhbPmlofnq6Dph4zpnaLnmoTlub/lkYoKICAgICAgICAgICAgcHV0KCIuYmJzX2ZlZWRfYWRfYm94Iik7CiAgICAgICAgICAgIHB1dCgiLnJlY29tbWVuZC1hZC1ib3giKTsKICAgICAgICAgICAgLy8g5bqV6YOo55u45YWz5paH5a2X6YeM6Z2i55qE54Ot6K+N5o+Q56S6CiAgICAgICAgICAgIHB1dCgiLnR5cGVfaG90X3dvcmQiKTsKICAgICAgICAgICAgLy8g5bqV6YOo6JOd6ImyZmxleOWxnuaAp+eahOW5v+WRiuagjyvnmbvlvZXms6jlhozmoYYKICAgICAgICAgICAgcHV0KCIucHVsbGxvZy1ib3giKTsKICAgICAgICAgICAgLy8g54yc5L2g5Zac5qyiCiAgICAgICAgICAgIHB1dCgiLnBlcnNvbmFsaXplZC1yZWNvbW1lbmQtYm94Iik7CiAgICAgICAgICAgIC8vIOWPkeW4luWHj+WNiuaPkOekugogICAgICAgICAgICBwdXQoIi50b3Rhc3QtYm94Iik7CiAgICAgICAgICAgIC8vIOmhtumDqOW5v+WRigogICAgICAgICAgICBwdXQoIi5yZWNvbW1lbmQtcmlnaHQiKTsKICAgICAgICAgICAgLy8g6aG26YOo5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLmFkX3RvcCIpOwogICAgICAgICAgICAvLyDlj7Pkvqflub/lkYoKICAgICAgICAgICAgcHV0KCIuYWRfMSIpOwogICAgICAgICAgICBjbGVhbigxMCk7CiAgICAgICAgICAgIC8vIOWxleW8gAogICAgICAgICAgICBjb21tb24oMywgNTApOwogICAgICAgICAgICAvLyBjb21tb24oNSwgMTApOwogICAgICAgICAgICBsb29wKDMpOwogICAgICAgIH0gZWxzZSBpZiAoZG93bmxvYWQudGVzdChjdXJyZW50VVJMKSkgewogICAgICAgICAgICBsKCLmraPlnKjkvJjljJbkuIvovb3pobXkvZPpqowuLi4iKTsKICAgICAgICAgICAgLy8g5bi46KeECiAgICAgICAgICAgIHB1dCgiLmZpeGVkX2RsIik7CiAgICAgICAgICAgIHB1dCgiaW5kZXhTdXBlcmlzZSIpOwogICAgICAgICAgICAvLyDlj7PkvqfmjqjojZAKICAgICAgICAgICAgcHV0KCIuY29udGVudF9yZWNvbSIpOwogICAgICAgICAgICBjbGVhbigxMCk7CiAgICAgICAgICAgIC8vIGNvbW1vbig1LCAxMCk7CiAgICAgICAgICAgIGxvb3AoMyk7CiAgICAgICAgfSBlbHNlIGlmIChsb2dpbi50ZXN0KGN1cnJlbnRVUkwpKSB7CiAgICAgICAgICAgIGwoIuato+WcqOS8mOWMlueZu+W9lemhteS9k+mqjC4uLiIpOwogICAgICAgICAgICAvLyDluLjop4QKICAgICAgICAgICAgLy8g55m75b2V55WM6Z2i5aSn5Zu+5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLm1haW4tdHUiKTsKICAgICAgICAgICAgY2xlYW4oMTApOwogICAgICAgICAgICAvLyBjb21tb24oNSwgMTApOwogICAgICAgICAgICBsb29wKDMpOwogICAgICAgIH0gZWxzZSBpZiAoem9uZS50ZXN0KGN1cnJlbnRVUkwpKSB7CiAgICAgICAgICAgIGwoIuato+WcqOS8mOWMluS4quS6uuepuumXtOS9k+mqjC4uLiIpOwogICAgICAgICAgICAvLyDluLjop4QKICAgICAgICAgICAgY2xlYW4oMTApOwogICAgICAgICAgICBjb21tb24oNywgMTApOwogICAgICAgICAgICAvLyBjb21tb24oNSwgMTApOwogICAgICAgICAgICBsb29wKDMpOwogICAgICAgIH0gZWxzZSBpZiAobGluay50ZXN0KGN1cnJlbnRVUkwpKSB7CiAgICAgICAgICAgIC8vIOi3s+i/hyBDU0ROIOeahCBsaW5rIOmhtemdogogICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikKICAgICAgICAgICAgdmFyIHRhcmdldCA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCd0YXJnZXQnKQogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRhcmdldAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGwoIuWTpuixge+8jOWlveWBj+mXqOeahOmhtemdou+8jOaIkeadpeivleedgOS8mOWMluS4gOS4i+WTpi4uLiIpOwogICAgICAgICAgICAvLyDluLjop4QKICAgICAgICAgICAgLy8g5bGV5byA5YWo5paHCiAgICAgICAgICAgICQoJy5yZWFkbW9yZV9idG4nKS5jbGljaygpOwogICAgICAgICAgICAvLyAqKiogaW5kZXggKioqCiAgICAgICAgICAgIC8vIOWktOmDqOW5v+WRigogICAgICAgICAgICBwdXQoIi5iYW5uZXItYWQtYm94Iik7CiAgICAgICAgICAgIC8vIOW1jOWFpeW5v+WRigogICAgICAgICAgICBwdXQoIiNrcF9ib3hfMjExIik7CiAgICAgICAgICAgIC8vIOWPs+S+p+W5v+WRigogICAgICAgICAgICBwdXQoIi5zbGlkZS1vdXRlciIpOwogICAgICAgICAgICAvLyDlj7Pkvqfor6bmg4UKICAgICAgICAgICAgcHV0KCIucGVyc2lvbl9hcnRpY2xlIik7CiAgICAgICAgICAgIC8vIOWPs+S+p+aOqOiNkAogICAgICAgICAgICAkKCIuZmVlZF9jb21wYW55IikucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vICoqKiBhcnRpY2xlICoqKgogICAgICAgICAgICAvLyDluLjop4QKICAgICAgICAgICAgLy8g5Y+z5L6n5bm/5ZGK77yM5pS+5Yiw56ys5LiA5Liq5riF6ZmkCiAgICAgICAgICAgIHB1dCgiI2FkZEFkQm94Iik7CiAgICAgICAgICAgIHB1dCgiLnJlY29tbWVuZC10b3AtYWRib3giKTsKICAgICAgICAgICAgLy8g5b+r5p2l5YaZ5Y2a5a6i5ZCnCiAgICAgICAgICAgIHB1dCgiLmJsb2dfdGlwX2JveCIpOwogICAgICAgICAgICAvLyDmjqjojZDlhbPms6jnlKjmiLcKICAgICAgICAgICAgcHV0KCIuYmxvZy1leHBlcnQtcmVjb21tZW5kLWJveCIpOwogICAgICAgICAgICAvLyDlj7PkuIvop5JWSVAKICAgICAgICAgICAgcHV0KCIubWVhdS1nb3RvcC1ib3giKTsKICAgICAgICAgICAgLy8g5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLm1lZGlhdl9hZCIpOwogICAgICAgICAgICBwdXQoIi5wdWxsbG9nLWJveCIpOwogICAgICAgICAgICBwdXQoIi5yZWNvbW1lbmQtYWQtYm94Iik7CiAgICAgICAgICAgIC8vcHV0KCIuYm94LXNoYWRvdyIpOyDmn5DkupvpobXpnaLlvILluLjvvIzkvovlpoJjbG91ZC5jc2RuLm5ldAogICAgICAgICAgICBwdXQoIi50eXBlX2hvdF93b3JkIik7CiAgICAgICAgICAgIHB1dCgiLmZvdXJ0aF9jb2x1bW4iKTsKICAgICAgICAgICAgLy8gY2xvdWQuY3Nkbi5uZXQg5aS06YOo5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiI2twX2JveF8xMTgiKTsKICAgICAgICAgICAgLy8g5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiI2FzaWRlRm9vdGVyIik7CiAgICAgICAgICAgIHB1dCgiI2FkLWRpdiIpOwogICAgICAgICAgICBwdXQoIiM0NzkiKTsKICAgICAgICAgICAgcHV0KCIjNDgwIik7CiAgICAgICAgICAgIC8vIOaJk+i1jwogICAgICAgICAgICBwdXQoIi5wb3N0VGltZSIpOwogICAgICAgICAgICAvLyDor77nqIvmjqjojZAKICAgICAgICAgICAgcHV0KCIudDAiKTsKICAgICAgICAgICAgLy8g5YiG5Lqr5rW35oqlCiAgICAgICAgICAgIHB1dCgiLnNoYXJlU3VnZ2VzdCIpOwogICAgICAgICAgICAvLyDlupXpg6jkuLvpopgKICAgICAgICAgICAgcHV0KCIudGVtcGxhdGUtYm94Iik7CiAgICAgICAgICAgIC8vIOivhOiuuuWMuuW5v+WRigogICAgICAgICAgICBwdXQoImRpdiNkbXBfYWRfNTgiKTsKICAgICAgICAgICAgLy8g5omT6LWPCiAgICAgICAgICAgIHB1dCgiLnJld2FyZC11c2VyLWJveCIpOwogICAgICAgICAgICAvLyDlj7PkvqfmiZPotY/mjInpkq4KICAgICAgICAgICAgcHV0KCIudG8tcmV3YXJkIik7CiAgICAgICAgICAgIC8vIOaOqOiNkOWGheWuueW5v+WRigogICAgICAgICAgICBwdXQoIi5yZWNvbW1lbmQtcmVjb21tZW5kLWJveCIpOwogICAgICAgICAgICAvLyDlj7Pkvqflub/lkYoKICAgICAgICAgICAgcHV0KCIuaW5kZXhTdXBlcmlzZSIpOwogICAgICAgICAgICAvLyDmiqLmspnlj5Hop5LmoIcKICAgICAgICAgICAgcHV0KCIuY29tbWVudC1zb2ZhLWZsYWciKTsKICAgICAgICAgICAgLy8g6aG1amlvCiAgICAgICAgICAgIHB1dCgiLmJvdHRvbS1wdWItZm9vdGVyIik7CiAgICAgICAgICAgIC8vIOeZu+W9leafpeeci+acquivu+a2iOaBrwogICAgICAgICAgICBwdXQoIi50b29sYmFyLW5vdGljZS1idWJibGUiKTsKICAgICAgICAgICAgLy8g5Y+z5L6n5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLnJlY29tbWVuZC10b3AtYWRib3giKTsKICAgICAgICAgICAgLy8g5a2m6Zmi5by55Ye65bm/5ZGKCiAgICAgICAgICAgICQoIi5mb3VjZV9jbG9zZV9idG4iKS5jbGljaygpOwogICAgICAgICAgICAvLyDlhbblroMKICAgICAgICAgICAgLy8g5aS06YOo5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLmJhbm5lci1hZC1ib3giKTsKICAgICAgICAgICAgLy8g5Y+z5L6n5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLnNsaWRlLW91dGVyIik7CiAgICAgICAgICAgIC8vIOWPs+S+p+ivpuaDhQogICAgICAgICAgICBwdXQoIi5wZXJzaW9uX2FydGljbGUiKTsKICAgICAgICAgICAgLy8g5bem5L6n5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiI2twX2JveF81MDMiKTsKICAgICAgICAgICAgcHV0KCIja3BfYm94XzIxNCIpOwogICAgICAgICAgICAvLyAqKiogYmJzICoqKgogICAgICAgICAgICAvLyDor4TorrrltYzlhaXlsI/lub/lkYoKICAgICAgICAgICAgcHV0KCIucG9zdF9yZWNvbW1lbmQiKTsKICAgICAgICAgICAgLy8g5bqV6YOo5o6o6I2QCiAgICAgICAgICAgIHB1dCgiI3Bvc3RfZmVlZF93cmFwIik7CiAgICAgICAgICAgIC8vIOW6lemDqOebuOWFs+aWh+eroOmHjOmdoueahOW5v+WRigogICAgICAgICAgICBwdXQoIi5iYnNfZmVlZF9hZF9ib3giKTsKICAgICAgICAgICAgcHV0KCIucmVjb21tZW5kLWFkLWJveCIpOwogICAgICAgICAgICAvLyDlupXpg6jnm7jlhbPmloflrZfph4zpnaLnmoTng63or43mj5DnpLoKICAgICAgICAgICAgcHV0KCIudHlwZV9ob3Rfd29yZCIpOwogICAgICAgICAgICAvLyDlupXpg6jok53oibJmbGV45bGe5oCn55qE5bm/5ZGK5qCPK+eZu+W9leazqOWGjOahhgogICAgICAgICAgICBwdXQoIi5wdWxsbG9nLWJveCIpOwogICAgICAgICAgICAvLyDnjJzkvaDllpzmrKIKICAgICAgICAgICAgcHV0KCIucGVyc29uYWxpemVkLXJlY29tbWVuZC1ib3giKTsKICAgICAgICAgICAgLy8g5Y+R5biW5YeP5Y2K5o+Q56S6CiAgICAgICAgICAgIHB1dCgiLnRvdGFzdC1ib3giKTsKICAgICAgICAgICAgLy8g6aG26YOo5bm/5ZGKCiAgICAgICAgICAgIHB1dCgiLnJlY29tbWVuZC1yaWdodCIpOwogICAgICAgICAgICAvLyDpobbpg6jlub/lkYoKICAgICAgICAgICAgcHV0KCIuYWRfdG9wIik7CiAgICAgICAgICAgIC8vICoqKiBkb3dubG9hZCAqKioKICAgICAgICAgICAgcHV0KCIuZml4ZWRfZGwiKTsKICAgICAgICAgICAgcHV0KCJpbmRleFN1cGVyaXNlIik7CiAgICAgICAgICAgIC8vIOWPs+S+p+aOqOiNkAogICAgICAgICAgICBwdXQoIi5jb250ZW50X3JlY29tIik7CiAgICAgICAgICAgIGNsZWFuKDEwKTsKICAgICAgICB9CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgcHJvZ3Jlc3Nvci5kb25lKCk7CiAgICAgICAgfSwgMCk7CiAgICAgICAgc3RvcFRpbWVNaWxsaSA9IERhdGUubm93KCk7CiAgICAgICAgbCgi5LyY5YyW5a6M5q+VISDogJfml7YgIiArIChzdG9wVGltZU1pbGxpIC0gc3RhcnRUaW1lTWlsbGkpICsgIm1zIik7CiAgICB9LCAwKTsKfSkoKTsKIApmdW5jdGlvbiBsKGxvZykgewogICAgY29uc29sZS5sb2coIltDU0ROR3JlZW5lcl0gIiArIGxvZyk7Cn0KIApmdW5jdGlvbiBlKGVycm9yKSB7CiAgICBjb25zb2xlLmVycm9yKCJbQ1NETkdyZWVuZXJdICIgKyBlcnJvcik7Cn0KIApmdW5jdGlvbiBjbGVhcigpIHsKICAgIGxpc3QgPSBbXTsKfQogCmZ1bmN0aW9uIHB1dCh0YWcpIHsKICAgIGxpc3QucHVzaCh0YWcpOwp9CiAKZnVuY3Rpb24gY2xlYW4odGltZXMpIHsKICAgIHZhciBsb29wID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgIC0tdGltZXM7CiAgICAgICAgaWYgKHRpbWVzIDw9IDApIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChsb29wKTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBsaXN0Lmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgICQobGlzdFtrXSkucmVtb3ZlKCk7CiAgICAgICAgfQogICAgfSwgMTAwKTsKICAgIHByb2dyZXNzb3IuaW5jUHJvZ3Jlc3MoMTApOwp9CiAKdmFyIGRlbGV0ZWRMb2dpbiA9IGZhbHNlOwogCmZ1bmN0aW9uIGxvb3AobnVtKSB7CiAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKG51bSA9PT0gMSkgewogICAgICAgICAgICAvLyDkuLvpobXkuK3pl7TnmoTlub/lkYoKICAgICAgICAgICAgJCgiLkpfYWR2IikucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIOS4u+mhteacieaWsOeahOWGheWuueaoquadoQogICAgICAgICAgICAkKCIuZmVlZC1maXgtYm94IikucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIOS4u+mhteW5v+WRiiBpZnJhbWUKICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwgPT0gImh0dHBzOi8vd3d3LmNzZG4ubmV0LyIpIHsKICAgICAgICAgICAgICAgICQoImlmcmFtZSIpLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIOWIoOmZpCBDU0ROIOWumOaWueWcqOS4u+mhteeahOaWh+eroO+8iOWkp+WkmuaYr+W5v+WRiu+8iQogICAgICAgICAgICAkKCJsaS5jbGVhcmZpeCIpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZSkgewogICAgICAgICAgICAgICAgdmFyIGJhbm5lZCA9IC9jc2RuPFwvYT4vOwogICAgICAgICAgICAgICAgdmFyIGFNYXJrID0gJChlbGUpLmZpbmQoIi5uYW1lIikuaHRtbCgpOwogICAgICAgICAgICAgICAgaWYgKGJhbm5lZC50ZXN0KGFNYXJrKSkgewogICAgICAgICAgICAgICAgICAgICQoZWxlKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIOS4u+mhteW5v+WRigogICAgICAgICAgICAkKCJsaSIpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIGxldCBzZWxmID0gJCh0aGlzKTsKICAgICAgICAgICAgICAgIGxldCBkYXRhVHlwZSA9IHNlbGYuYXR0cignZGF0YS10eXBlJyk7CiAgICAgICAgICAgICAgICBpZiAoZGF0YVR5cGUgPT09ICdhZCcpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8g5Li76aG15bm/5ZGKCiAgICAgICAgICAgICQoImxpID4gZGl2ID4gZGl2ID4gaDIgPiBhW2hyZWYqPSdodHRwczovL2VkdS5jc2RuLm5ldCddIikucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgICQoImxpID4gZGl2ID4gZGl2ID4gaDIgPiBhW2hyZWYqPSdodHRwczovL21hcmtldGluZy5jc2RuLm5ldCddIikucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIOWumOaWueiEmuacrOaoquW5hQogICAgICAgICAgICAkKCIudG9vbGJhci1hZHZlcnQiKS5yZW1vdmUoKTsKICAgICAgICB9IGVsc2UgaWYgKG51bSA9PT0gMikgewogICAgICAgICAgICAvLyDor4Torrrmn6XnnIvmm7TlpJrlsZXlvIDnm5HlkKwKICAgICAgICAgICAgJCgiZGl2LmNvbW1lbnQtbGlzdC1ib3giKS5jc3MoIm1heC1oZWlnaHQiLCAibm9uZSIpOwogICAgICAgICAgICAvLyDlsY/olL3mgqjnmoTnvKnmlL7kuI3mmK8xMDAl55qE5o+Q56S6CiAgICAgICAgICAgICQoJy5sZWZ0UG9wJykucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIOWumOaWueiEmuacrOaoquW5hQogICAgICAgICAgICAkKCIudG9vbGJhci1hZHZlcnQiKS5yZW1vdmUoKTsKICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSAzKSB7CiAgICAgICAgICAgIC8vIOW+queOr+WIoOmZpOeZu+W9leaPkOekuuahhgogICAgICAgICAgICBpZiAoJCgkKCIucGFzc3BvcnQtbG9naW4tY29udGFpbmVyIilbMF0pLmxlbmd0aCA9PSAxICYmIGRlbGV0ZWRMb2dpbiA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgbGV0IHBhc3NJbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICQoJy5wYXNzcG9ydC1sb2dpbi1jb250YWluZXInKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coImhpZGUiKTsKICAgICAgICAgICAgICAgIH0sIDEwKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChwYXNzSW50ZXJ2YWwpOwogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYXNzcG9ydGJveCIpLmZpbmQoInNwYW4iKS5jbGljaygpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwMCkKICAgICAgICAgICAgICAgIH0sIDUwMDApOwogICAgICAgICAgICAgICAgZGVsZXRlZExvZ2luID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyDnuqLljIXpm6gKICAgICAgICAgICAgJCgiI2NzZG4tcmVkcGFjayIpLnJlbW92ZSgpOwogICAgICAgIH0KICAgIH0sIDUwMCk7Cn0KIApmdW5jdGlvbiBjb21tb24obnVtLCB0aW1lcykgewogICAgdmFyIGxvb3AgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgLS10aW1lczsKICAgICAgICBpZiAodGltZXMgPD0gMCkgewogICAgICAgICAgICBjbGVhckludGVydmFsKGxvb3ApOwogICAgICAgIH0KICAgICAgICBpZiAobnVtID09PSAxKSB7CiAgICAgICAgICAgIC8vIOafpeeci+abtOWkmgogICAgICAgICAgICAkKCIuYnRuLXJlYWRtb3JlIikucmVtb3ZlQ2xhc3MoIm5vLWxvZ2luIik7CiAgICAgICAgICAgICQoIi5idG4tcmVhZG1vcmUiKS5hZGRDbGFzcygiZmFucy1yZWFkLW1vcmUiKTsKICAgICAgICAgICAgJCgiLmJ0bi1yZWFkbW9yZSIpLnJlbW92ZUF0dHIoImhyZWYiKTsKICAgICAgICAgICAgJCgiLmJ0bi1yZWFkbW9yZSIpLnJlbW92ZUF0dHIoInRhcmdldCIpOwogICAgICAgICAgICAkKCIuYnRuLXJlYWRtb3JlIikucmVtb3ZlQXR0cigicmVsIik7CiAgICAgICAgICAgICQoIi5idG4tcmVhZG1vcmUiKS5jbGljaygpOwogICAgICAgICAgICAvLyDlt7LnmbvlvZXnlKjmiLflsZXlvIDor4TorroKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidG5Nb3JlQ29tbWVudCIpLmNsaWNrKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgICAgIC8vIOWIoOmZpOafpeeci+abtOWkmuaMiemSrgogICAgICAgICAgICAkKCIjYnRuTW9yZUNvbW1lbnQiKS5wYXJlbnQoImRpdi5vcHQtYm94IikucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIOWxleW8gOWGheWuuQogICAgICAgICAgICAkKCJkaXYuY29tbWVudC1saXN0LWJveCIpLmNzcygibWF4LWhlaWdodCIsICJub25lIik7CiAgICAgICAgICAgIC8vIOaUueWbnuiDjOaZr+minOiJsgogICAgICAgICAgICAkKCIubG9naW4tbWFyayIpLnJlbW92ZSgpOwogICAgICAgICAgICAvLyDliKDpmaTnmbvlvZXmoYYKICAgICAgICAgICAgJCgiLmxvZ2luLWJveCIpLnJlbW92ZSgpOwogICAgICAgIH0gZWxzZSBpZiAobnVtID09PSAyKSB7CiAgICAgICAgICAgIC8vIOaMoeS9j+ivhOiuuueahOKAnOWHuuWktOaOqOiNkOKAnQogICAgICAgICAgICBpZiAoJCgiLnJlY29tbWVuZC1ib3giKS5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAkKCIucmVjb21tZW5kLWJveCIpWzBdLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIOWOu+mZpOaOqOW5v+W5v+WRigogICAgICAgICAgICAkKCJsaVtkYXRhLXR5cGU9J2FkJ10iKS5yZW1vdmUoKTsKICAgICAgICAgICAgLy8g5YWN55m75b2V5aSN5Yi2CiAgICAgICAgICAgICQoIi5obGpzLWJ1dHRvbiIpLnJlbW92ZUNsYXNzKCJzaWduaW4iKTsKICAgICAgICAgICAgJCgiLmhsanMtYnV0dG9uIikuYWRkQ2xhc3MoInsyfSIpOwogICAgICAgICAgICAkKCIuaGxqcy1idXR0b24iKS5hdHRyKCJkYXRhLXRpdGxlIiwgIuWFjeeZu+W9leWkjeWItiIpOwogICAgICAgICAgICAkKCIuaGxqcy1idXR0b24iKS5hdHRyKCJvbmNsaWNrIiwgImhsanMuY29weUNvZGUoZXZlbnQpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXskKCcuaGxqcy1idXR0b24nKS5hdHRyKCdkYXRhLXRpdGxlJywgJ+WFjeeZu+W9leWkjeWIticpO30sMzUwMCk7Iik7CiAgICAgICAgICAgICQoIiNjb250ZW50X3ZpZXdzIikudW5iaW5kKCJjb3B5Iik7CiAgICAgICAgICAgIC8vIOWOu+mZpOWJqui0tOadv+WKq+aMgQogICAgICAgICAgICAkKCJjb2RlIikuYXR0cigib25jbGljayIsICJtZGNwLmNvcHlDb2RlKGV2ZW50KSIpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy8g5aSN5Yi25pe25L+d55WZ5Y6f5paH5qC85byP77yM5Y+C6ICDIGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZW4vc2NyaXB0cy8zOTA1MDItY3NkbnJlbW92ZWNvcHlyaWdodC9jb2RlCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAiYXJ0aWNsZVR5cGUiLCB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgfQogICAgICAgICAgICBjc2RuLmNvcHlyaWdodC5pbml0KCIiLCAiIiwgIiIpOwogICAgICAgICAgICAvLyDpobXlpLTlub/lkYoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImNvbHVtbi1hZHZlcnQtYm94IilbMF0uc3R5bGUuZGlzcGxheT0ibm9uZSI7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgICAgIC8vIOiHquWKqOajgOa1i+aYr+WQpuacieebruW9le+8jOWmguaenOayoeacieWImeWIoOmZpOWPs+i+ueagj++8jOaWh+eroOWxheS4rQogICAgICAgICAgICBpZiAoJCgiLnJlY29tbWVuZC1yaWdodF9hc2lkZSIpLmh0bWwoKSAmJiAkKCIucmVjb21tZW5kLXJpZ2h0X2FzaWRlIikuaHRtbCgpLnJlcGxhY2UoL1tcclxuXS9nLCAiIikucmVwbGFjZSgvKFxzKS9nLCAiIikgPT09ICIiKSB7CiAgICAgICAgICAgICAgICAkKCIjcmlnaHRBc2lkZSIpLnJlbW92ZSgpOwogICAgICAgICAgICB9IGVsc2UgaWYgKCQoIi5yZWNvbW1lbmQtcmlnaHRfYXNpZGUiKS5odG1sKCkgJiYgJCgiI3JlY29tbWVuZC1yaWdodCIpLmh0bWwoKS5yZXBsYWNlKC9bXHJcbl0vZywgIiIpLnJlcGxhY2UoLyhccykvZywgIiIpID09PSAiIikgewogICAgICAgICAgICAgICAgJCgiI3JpZ2h0QXNpZGUiKS5yZW1vdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyDnmbvlvZXmjInpkq7mloflrZflpKrlpJrvvIzkv67mlLkKICAgICAgICAgICAgJCgiYSIpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdocmVmJykgPT09ICdodHRwczovL3Bhc3Nwb3J0LmNzZG4ubmV0L2FjY291bnQvbG9naW4nKSB7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5odG1sKCfnmbvlhaUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIOmhtuagj+W5v+WRigogICAgICAgICAgICAkKCJsaSIpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIGxldCBzZWxmID0gJCh0aGlzKTsKICAgICAgICAgICAgICAgIGxldCBkYXRhVHlwZSA9IHNlbGYuYXR0cignZGF0YS1zdWItbWVudS10eXBlJyk7CiAgICAgICAgICAgICAgICBpZiAoZGF0YVR5cGUgPT09ICd2aXAnKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxldCBkYXRhVGl0bGUgPSBzZWxmLmF0dHIoJ3RpdGxlJyk7CiAgICAgICAgICAgICAgICBpZiAoZGF0YVRpdGxlID09PSAn6auY5Lu35YC85rqQ56CB6K++56iL5YiG5LqrJyB8fCBkYXRhVGl0bGUgPT09ICfns7vnu5/lrabkuaDCt+mXruetlMK35q+U6LWbJyB8fCBkYXRhVGl0bGUgPT09ICfnroDljZXpq5jmlYjkvJjmg6DnmoTkupHmnI3liqEnKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIOmhtuagj1ZJUOmAiemhuQogICAgICAgICAgICAkKCcudG9vbGJhci1zdWJNZW51LWJveCcpLmZpbmQoIltocmVmPSdodHRwczovL21hbGwuY3Nkbi5uZXQvdmlwJ10iKS5wYXJlbnQoKS5yZW1vdmUoKTsKICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSAzKSB7CiAgICAgICAgICAgIC8v6K665Z2b6Ieq5Yqo5bGV5byACiAgICAgICAgICAgICQoIi5qc19zaG93X3RvcGljIikuY2xpY2soKTsKICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSA0KSB7CiAgICAgICAgICAgIC8qKiDphY3nva7mjqfliLYgKiovCiAgICAgICAgICAgIGxldCBjb25maWcgPSBuZXcgQ29uZmlnKCk7CiAgICAgICAgICAgIGxldCBzbUNvb2tpZSA9IGNvbmZpZy5nZXQoInNjci1zbSIsIHRydWUpOwogICAgICAgICAgICBsZXQgbWRDb29raWUgPSBjb25maWcuZ2V0KCJzY3ItbWQiLCBmYWxzZSk7CiAgICAgICAgICAgIGxldCBsZ0Nvb2tpZSA9IGNvbmZpZy5nZXQoInNjci1sZyIsIGZhbHNlKTsKICAgICAgICAgICAgbGV0IGZvQ29va2llID0gY29uZmlnLmdldCgic2NyLWZvIiwgZmFsc2UpCiAKICAgICAgICAgICAgJCgiI3Njci1zbSIpLnByb3AoImNoZWNrZWQiLCBzbUNvb2tpZSk7CiAgICAgICAgICAgICQoIiNzY3ItbWQiKS5wcm9wKCJjaGVja2VkIiwgbWRDb29raWUpOwogICAgICAgICAgICAkKCIjc2NyLWxnIikucHJvcCgiY2hlY2tlZCIsIGxnQ29va2llKTsKICAgICAgICAgICAgJCgiI3Njci1mbyIpLnByb3AoImNoZWNrZWQiLCBmb0Nvb2tpZSk7CiAKICAgICAgICAgICAgaWYgKHNtQ29va2llKSB7CiAgICAgICAgICAgICAgICAvLyBTbWFsbCBTY3JlZW4gTW9kZQogICAgICAgICAgICAgICAgJCgiLm1haW5fZmF0aGVyIikucmVtb3ZlQ2xhc3MoImp1c3RpZnktY29udGVudC1jZW50ZXIiKTsKICAgICAgICAgICAgICAgIEdNX2FkZFN0eWxlKGAKICAgICAgICAgICAgICAgIG1haW57CiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGF1dG8haW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgIGZsb2F0OiBub25lIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDkwdnc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBtYWluIGFydGljbGUgaW1newogICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGApOwogICAgICAgICAgICAgICAgJCgiI21haW5Cb3giKS5jc3MoIndpZHRoIiwgIjEwMCUiKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChtZENvb2tpZSkgewogICAgICAgICAgICAgICAgLy8gTWlkZGxlIFNjcmVlbiBNb2RlCiAgICAgICAgICAgICAgICAkKCIubWFpbl9mYXRoZXIiKS5yZW1vdmVDbGFzcygianVzdGlmeS1jb250ZW50LWNlbnRlciIpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGxnQ29va2llKSB7CiAgICAgICAgICAgICAgICAvLyBMYXJnZSBTY3JlZW4gTW9kZQogICAgICAgICAgICAgICAgJCgiLmNvbnRhaW5lciIpLmNzcygibWFyZ2luIiwgIjAgYXV0byIpCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9Db29raWUpIHsKICAgICAgICAgICAgICAgIC8vIEZvY3VzIG1vZGUKICAgICAgICAgICAgICAgICQoIi5yZWNvbW1lbmQtcmlnaHQiKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICQoIi5jb250YWluZXIiKS5jc3MoIndpZHRoIiwgIjEwMCUiKTsKICAgICAgICAgICAgICAgICQoIi5jb250YWluZXIgPiBtYWluIikuY3NzKCJ3aWR0aCIsICIxMDAlIik7CiAgICAgICAgICAgIH0KIAogICAgICAgICAgICAvLyDlsY/luZXlsLrlr7jljZXpgInnm5HlkKwKICAgICAgICAgICAgJCgiI3Njci1zbSIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIG5ldyBDb25maWcoKS5zZXQoInNjci1zbSIsIHRydWUpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLW1kIiwgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLWxnIiwgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLWZvIiwgZmFsc2UpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJCgiI3Njci1tZCIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIG5ldyBDb25maWcoKS5zZXQoInNjci1tZCIsIHRydWUpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLXNtIiwgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLWxnIiwgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLWZvIiwgZmFsc2UpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJCgiI3Njci1sZyIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIG5ldyBDb25maWcoKS5zZXQoInNjci1sZyIsIHRydWUpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLXNtIiwgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLW1kIiwgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLWZvIiwgZmFsc2UpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJCgiI3Njci1mbyIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIG5ldyBDb25maWcoKS5zZXQoInNjci1mbyIsIHRydWUpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLXNtIiwgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLW1kIiwgZmFsc2UpOwogICAgICAgICAgICAgICAgbmV3IENvbmZpZygpLnNldCgic2NyLWxnIiwgZmFsc2UpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8g5Yik5pat5piv5ZCm5Li655m75b2V54q25oCBCiAgICAgICAgICAgICQoImEiKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignaHJlZicpID09PSAnaHR0cHM6Ly9wYXNzcG9ydC5jc2RuLm5ldC9hY2NvdW50L2xvZ2luJykgewogICAgICAgICAgICAgICAgICAgIC8vIOacqueZu+W9leWIoOmZpOaXoOeUqOaMiemSrgogICAgICAgICAgICAgICAgICAgICQoImE6Y29udGFpbnMoJ+S8muWRmOS4reW/gycpIikucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgJCgiYTpjb250YWlucygn5pS26JePJykiKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICAkKCJhOmNvbnRhaW5zKCfliqjmgIEnKSIpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICQoImE6Y29udGFpbnMoJ+WIm+S9nCcpIikucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgJCgiLnRvb2xiYXItYnRuLWNvbGxlY3QiKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICAkKCIuYnRuLXdyaXRlLW5ldyIpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSA1KSB7CiAgICAgICAgICAgIC8vIOaUueWbnuiDjOaZr+minOiJsgogICAgICAgICAgICAkKCIubG9naW4tbWFyayIpLnJlbW92ZSgpOwogICAgICAgICAgICAvLyDliKDpmaTnmbvlvZXmoYYKICAgICAgICAgICAgJCgiLmxvZ2luLWJveCIpLnJlbW92ZSgpOwogICAgICAgIH0gZWxzZSBpZiAobnVtID09IDYpIHsKICAgICAgICAgICAgbGV0IGRpZCA9IGZhbHNlOwogICAgICAgICAgICBsZXQgY29uZmlnSFRNTCA9ICcnOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8ZGl2IGNsYXNzPSJjb25maWdDb250YWluZXIiPjxwPjxhIGNsYXNzPSJ0aXRsZSIgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FkbGVyZWQvQ1NETkdyZWVuZXIiIHRhcmdldD0iX2JsYW5rIj5DU0ROR3JlZW5lcjwvYT4gPHN1cD5WJyArIHZlcnNpb24gKyAnICcgKyBzZXR0aW5nc19zdmcgKyAnPC9zdXA+PC9wPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxwPjxhIGhyZWY9Ii8vc2hhbmcucXEuY29tL3dwYS9xdW53cGE/aWRrZXk9ZDdhZDZlYWQzZjU3NzIyZTdmMDBhNDI4MWFlNzVkYmFjMjEzMmM1YThjZjMyMTk5MmQ1NzMwOTAzN2ZjYWY2MyIgdGFyZ2V0PSJfYmxhbmsiPuWumOaWuSBRUSDkuqTmtYHnvqTvvJoxMDQyMzcwNDUzPC9hPjwvcD48YnI+JzsKIAogICAgICAgICAgICAvLyDorr7lrprvvJrmjqjojZDlhoXlrrnmjInpkq4KICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPHAgY2xhc3M9ImJvbGQiPuagueaNruWxj+W5leWwuuWvuO+8jOmAgumFjeeJiOW8jzwvcD48cD7lu7rorq7pgJDkuKrlsJ3or5XlkI7pgInmi6npgILlkIjkvaDnmoTniYjlvI/vvIzlsY/luZXov4flsI/miJbogIXniYjlvI/pgInmi6nkuI3mraPnoa7lj7PkvqfmoI/lj6/og73msqHmnInnqbrpl7TmmL7npLrvvIzlr7zoh7TkvqfmoI/lrprliLbml6DmlYjvvIjor7flsJ3or5XosIPoioLmtY/op4jlmajnvKnmlL7vvIzlv6vmjbfplK4gQ3RybCvpvKDmoIfmu5rova7vvInjgII8L3A+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGxhYmVsPjxpbnB1dCBuYW1lPSJkaXNwbGF5TW9kZSIgdHlwZT0icmFkaW8iIHZhbHVlPSIiIGlkPSJzY3Itc20iIC8+IOW5s+mTuuaooeW8jyjkvJjljJbniYgpIDwvbGFiZWw+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGxhYmVsPjxpbnB1dCBuYW1lPSJkaXNwbGF5TW9kZSIgdHlwZT0icmFkaW8iIHZhbHVlPSIiIGlkPSJzY3ItbWQiIC8+IOmAguW6lOaooeW8jyA8L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxsYWJlbD48aW5wdXQgbmFtZT0iZGlzcGxheU1vZGUiIHR5cGU9InJhZGlvIiB2YWx1ZT0iIiBpZD0ic2NyLWxnIiAvPiDlsYXkuK3mqKHlvI8gPC9sYWJlbD4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8bGFiZWw+PGlucHV0IG5hbWU9ImRpc3BsYXlNb2RlIiB0eXBlPSJyYWRpbyIgdmFsdWU9IiIgaWQ9InNjci1mbyIgLz4g5rKJ5rW45qih5byPKOaXoOS+p+agjyk8L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxociBzdHlsZT0iaGVpZ2h0OjFweDtib3JkZXI6bm9uZTtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjY2NjO21hcmdpbjogNXB4IDBweCA1cHggMHB4OyIgLz4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8cCBjbGFzcz0iYm9sZCI+6YCa55So6K6+5a6aPC9wPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxwPuiHquWumuS5ieiDjOaZr+Wbvu+8miA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImJhY2tncm91bmRJbWdVcmwiIHBsYWNlaG9sZGVyPSLlm77niYfmiYDlnKjnvZHlnYDmiJZCYXNlNjQiIHN0eWxlPSJib3JkZXItcmFkaXVzOiAycHg7Ym9yZGVyOiAxcHggc29saWQgI2YwZjBmMDtwYWRkaW5nOjVweDt3aWR0aDoxMDAlO21hcmdpbi1ib3R0b206NXB4OyI+IDxpbnB1dCBzdHlsZT0ibWFyZ2luLWJvdHRvbTo1cHg7IiBhY2NlcHQ9ImltYWdlLyoiIGlkPSJ1cGxvYWRfYmciIHR5cGU9ImZpbGUiPjwvcD4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtcmVjb21tZW5kLWJ1dHRvbiI+IDxsYWJlbCBmb3I9InRvZ2dsZS1yZWNvbW1lbmQtYnV0dG9uIiBjbGFzcz0ibW9kZUxhYmVsIj7mmL7npLrmjqjojZDlhoXlrrk8L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxicj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtc2hvcC1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUtc2hvcC1idXR0b24iIGNsYXNzPSJtb2RlTGFiZWwiPuaYvuekuuWwj+W6lzwvbGFiZWw+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGJyPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRvZ2dsZS13aGl0ZXRoZW1lLWJ1dHRvbiI+IDxsYWJlbCBmb3I9InRvZ2dsZS13aGl0ZXRoZW1lLWJ1dHRvbiIgY2xhc3M9Im1vZGVMYWJlbCI+55m96Imy5Li76aKYJkRhcmsgUmVhZGVy5YW85a655qih5byPPGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogIzgwODA4MDsiPiMg6YCJ6aG55L2c55So77ya5byA5ZCv5ZCO5Y+v6YCa6L+HRGFyayBSZWFkZXLmj5Lku7bngbXmtLvmjqfliLbnmb3oibLkuI7pu5HmmpfmqKHlvI/vvIw8YSBzdHlsZT0iY29sb3I6IGdyZWVuOyIgaHJlZj0iaHR0cHM6Ly9jaHJvbWUuenp6bWguY24vaW5mbz90b2tlbj1laW1hZHBiY2Jmbm1ia29wb29qZmVraG5raGRiaWVlaCIgdGFyZ2V0PSJfYmxhbmsiPuaPkuS7tuS4i+i9veWcsOWdgOeCueaIkTwvYT48L3NwYW4+PC9sYWJlbD4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8YnI+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idG9nZ2xlLWF1dG9zaXplLWJ1dHRvbiI+IDxsYWJlbCBmb3I9InRvZ2dsZS1hdXRvc2l6ZS1idXR0b24iIGNsYXNzPSJtb2RlTGFiZWwiPuWuveW6puiHquWKqOmAguW6lDxicj48c3BhbiBzdHlsZT0iY29sb3I6ICM4MDgwODA7Ij4jIOmAiemhueS9nOeUqO+8muW8gOWQr+atpOmAiemhueWPr+S7peWcqOmhtemdouWuveW6pue8qeWwj+aXtuiHquWKqOWIh+aNouiHs+Wwj+Wxj+aooeW8jzwvc3Bhbj48L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxicj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtYXV0b2hpZGV0b29sYmFyLWJ1dHRvbiI+IDxsYWJlbCBmb3I9InRvZ2dsZS1hdXRvaGlkZXRvb2xiYXItYnV0dG9uIiBjbGFzcz0ibW9kZUxhYmVsIj7lkJHkuIvmu5rliqjoh6rliqjpmpDol4/pobbmoI88L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxicj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtYXV0b2hpZGVib3R0b21iYXItYnV0dG9uIj4gPGxhYmVsIGZvcj0idG9nZ2xlLWF1dG9oaWRlYm90dG9tYmFyLWJ1dHRvbiIgY2xhc3M9Im1vZGVMYWJlbCI+5aeL57uI6ZqQ6JeP5bqV5qCPPC9sYWJlbD4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8YnI+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idG9nZ2xlLXdyaXRlYmxvZy1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUtd3JpdGVibG9nLWJ1dHRvbiIgY2xhc3M9Im1vZGVMYWJlbCI+5pi+56S65Yib5L2c5Lit5b+D5oyJ6ZKuPC9sYWJlbD4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8YnI+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGhyIHN0eWxlPSJoZWlnaHQ6MXB4O2JvcmRlcjpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNjY2NjY2M7bWFyZ2luOiA1cHggMHB4IDVweCAwcHg7IiAvPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxwIGNsYXNzPSJib2xkIj48Yj7lj7PkvqfmoI/lrprliLY8L2I+PC9wPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRvZ2dsZS1hZC1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUtYWQtYnV0dG9uIiBjbGFzcz0ibW9kZUxhYmVsIj7mmL7npLrmnaXoh6rohJrmnKznmoTlsI/lub/lkYo8L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxicj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtYXV0aG9yY2FyZC1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUtYXV0aG9yY2FyZC1idXR0b24iIGNsYXNzPSJtb2RlTGFiZWwiPuaYvuekuuS9nOiAheWQjeeJhzwvbGFiZWw+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGJyPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRvZ2dsZS1zZWFyY2hibG9nLWJ1dHRvbiI+IDxsYWJlbCBmb3I9InRvZ2dsZS1zZWFyY2hibG9nLWJ1dHRvbiIgY2xhc3M9Im1vZGVMYWJlbCI+5pi+56S65pCc5Y2a5Li75paH56ugPC9sYWJlbD4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8YnI+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idG9nZ2xlLW5ld2FydGljbGUtYnV0dG9uIj4gPGxhYmVsIGZvcj0idG9nZ2xlLW5ld2FydGljbGUtYnV0dG9uIiBjbGFzcz0ibW9kZUxhYmVsIj7mmL7npLrmnIDmlrDmlofnq6A8L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxicj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtaG90YXJ0aWNsZS1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUtaG90YXJ0aWNsZS1idXR0b24iIGNsYXNzPSJtb2RlTGFiZWwiPuaYvuekuueDremXqOaWh+eroDwvbGFiZWw+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGJyPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRvZ2dsZS1uZXdjb21tZW50cy1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUtbmV3Y29tbWVudHMtYnV0dG9uIiBjbGFzcz0ibW9kZUxhYmVsIj7mmL7npLrmnIDmlrDor4Torro8L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxicj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUta2luZHBlcnNvbi1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUta2luZHBlcnNvbi1idXR0b24iIGNsYXNzPSJtb2RlTGFiZWwiPuaYvuekuuWIhuexu+S4k+agjzwvbGFiZWw+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGJyPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRvZ2dsZS1yZWNvbW1lbmRhcnRpY2xlLWJ1dHRvbiI+IDxsYWJlbCBmb3I9InRvZ2dsZS1yZWNvbW1lbmRhcnRpY2xlLWJ1dHRvbiIgY2xhc3M9Im1vZGVMYWJlbCI+5pi+56S65o6o6I2Q5paH56ugPC9sYWJlbD4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8YnI+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idG9nZ2xlLWFyY2hpdmUtYnV0dG9uIj4gPGxhYmVsIGZvcj0idG9nZ2xlLWFyY2hpdmUtYnV0dG9uIiBjbGFzcz0ibW9kZUxhYmVsIj7mmL7npLrlvZLmoaM8L2xhYmVsPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxicj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtY29udGVudC1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUtY29udGVudC1idXR0b24iIGNsYXNzPSJtb2RlTGFiZWwiPuaYvuekuuebruW9lTwvbGFiZWw+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGJyPjxicj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8ZGl2PjxoNj7opoHkuI3opoHmnaXnnIvnnIsgOik8L2g2PjxwPu+8iOS9nOiAheacrOS6uuW7uuiuvueahOekvuWMuu+9njwvcD48cD7npL7ljLrkuK3ogZrpm4bkuoblkIzooYzkuJrnmoTlpKfkvazlsI/nmb3vvIzmrKLov47lsI/kvJnkvLTku6zkuIDotbfmkbjpsbzvvIE8L3A+PGEgaHJlZj0iaHR0cHM6Ly9maXNocGkuY24iIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cHM6Ly9zMi5sb2xpLm5ldC8yMDIyLzAxLzA1LzFIcEJaVXJhTWNSOGlzdC5wbmciIHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIvPjwvYT48L2Rpdj4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYWRsZXJlZC9DU0ROR3JlZW5lciIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJnaXZlTWVPbmVTdGFyIj4nICsgc3Rhcl9zdmcgKyAnIDxiPueCueaIkX48L2I+IOWKqOWKqOWwj+aJi+WcqCBHaXRIdWIg54K55LiqIFN0YXIg5ZKM5YWz5rOo77yM5pSv5oyB5oiR57un57ut57u05oqk6ISa5pysIDopPC9hPjxicj48YnI+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPHA+54m55Yir5o+Q56S677yaQ1NETkdyZWVuZXIg6ISa5pys5LiN5o+Q5L6b5Lu75L2V5Lya5ZGY5paH56ug56C06Kej44CB5Lya5ZGY6LWE5rqQ5LiL6L295Yqf6IO977yM5LuF6YCC55So5LqO5YmN56uv5LyY5YyW77yM6K+35ZyoQ1NETuWumOaWuea4oOmBk+i0reS5sENTRE7kvJrlkZjkvZPpqozku5jotLnlip/og73jgII8L3A+JzsKICAgICAgICAgICAgY29uZmlnSFRNTCArPSAnPGhyIHN0eWxlPSJoZWlnaHQ6MXB4O2JvcmRlcjpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNjY2NjY2M7bWFyZ2luOiA1cHggMHB4IDVweCAwcHg7IiAvPic7CiAgICAgICAgICAgIGNvbmZpZ0hUTUwgKz0gJzxicj4nOwogCiAgICAgICAgICAgIC8vIGNvbmZpZ0hUTUwgKz0gJzxhIGhyZWY9Imh0dHBzOi8vZG9jLnN0YWNrb3ZlcmZsb3cud2lraS93ZWIvIy8yMT9wYWdlX2lkPTEzOCIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJtYXJnaW4tdG9wOiA1cHg7IGRpc3BsYXk6IGJsb2NrOyI+JyArIGRvbmF0ZV9zdmcgKyAnIOaIkeaYr+iAgeadv++8jOaKleW4geaJk+i1jzwvYT4nOwogICAgICAgICAgICBjb25maWdIVE1MICs9ICc8L2Rpdj48L2Rpdj48ZGl2IGlkPSJmYWRlIiBjbGFzcz0iYmxhY2tfb3ZlcmxheSI+PC9kaXY+JzsKICAgICAgICAgICAgbGV0IHNhdmVCdXR0b24gPSAnPGJ1dHRvbiBjbGFzcz0ic2F2ZUJ1dHRvbiIgc3R5bGU9InBvc2l0aW9uOiBzdGlja3k7dG9wOiA1cHg7bGVmdDogY2FsYygxMDAlIC0gODBweCk7IiBvbmNsaWNrPSJzYXZlQW5kUmVsb2FkKCk7Ij4nICsgc2F2ZV9zdmcgKyAnIOW6lOeUqDwvYnV0dG9uPic7CiAgICAgICAgICAgIC8vIOe7v+WMluWZqOiuvuWumgogICAgICAgICAgICAkKCJib2R5IikuYWZ0ZXIoJzxkaXYgaWQ9ImNvbmZpZ0NvbnRlbnQiIGNsYXNzPSJ3aGl0ZV9jb250ZW50Ij4nICsgc2F2ZUJ1dHRvbiArIGNvbmZpZ0hUTUwpOwogCiAgICAgICAgICAgIC8qKiDphY3nva7mjqfliLYgKiovCiAgICAgICAgICAgIC8vIOaOqOiNkOWGheWuuQogICAgICAgICAgICAkKCIuYmxvZy1jb250ZW50LWJveCIpLmFwcGVuZCgiPGJyPjxkaXYgY2xhc3M9J2Jsb2ctY29udGVudC1ib3gnIGlkPSdyZWNvbW1lbmRTd2l0Y2gnIHN0eWxlPSd0ZXh0LWFsaWduOiByaWdodDsnPjwvZGl2PiIpOwogICAgICAgICAgICAkKCIjcmVjb21tZW5kU3dpdGNoOmxhc3QiKS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRvZ2dsZS1idXR0b24iPiA8bGFiZWwgZm9yPSJ0b2dnbGUtYnV0dG9uIiBjbGFzcz0iYnV0dG9uLWxhYmVsIj4gPHNwYW4gY2xhc3M9ImNpcmNsZSI+PC9zcGFuPiA8c3BhbiBjbGFzcz0idGV4dCBvbiI+Jm5ic3A7PC9zcGFuPiA8c3BhbiBjbGFzcz0idGV4dCBvZmYiPiZuYnNwOzwvc3Bhbj4gPC9sYWJlbD4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDogNXB4OyBmb250LXNpemU6IDEzcHg7Ij7mmL7npLrmjqjojZDlhoXlrrk8L3A+Jyk7CiAgICAgICAgICAgIGxldCByZWNvbW1lbmRDb29raWUgPSBjb25maWcuZ2V0KCJyZWNvbW1lbmQiLCBmYWxzZSk7CiAgICAgICAgICAgIGlmICghcmVjb21tZW5kQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIucmVjb21tZW5kLWJveCIpLmhpZGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVjb21tZW5kQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLXJlY29tbWVuZC1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCB0cnVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICQoIiN0b2dnbGUtcmVjb21tZW5kLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS1yZWNvbW1lbmQtYnV0dG9uIiwgInJlY29tbWVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHskKCIucmVjb21tZW5kLWJveCIpLnNsaWRlRG93bigyMDApO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHskKCIucmVjb21tZW5kLWJveCIpLnNsaWRlVXAoMjAwKTt9KTsKICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbkFuZEFjdGlvbigiI3RvZ2dsZS1idXR0b24iLCAicmVjb21tZW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHskKCIucmVjb21tZW5kLWJveCIpLnNsaWRlRG93bigyMDApO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHskKCIucmVjb21tZW5kLWJveCIpLnNsaWRlVXAoMjAwKTt9KTsKIAogICAgICAgICAgICAvLyDmmL7npLrlsI/lupcKICAgICAgICAgICAgbGV0IHNob3BDb29raWUgPSBjb25maWcuZ2V0KCdzaG9wJyxmYWxzZSk7CiAgICAgICAgICAgIGlmKCFzaG9wQ29va2llKXsKICAgICAgICAgICAgICAgICQoIiNjc2RuLXNob3Atd2luZG93IikuaGlkZSgpOwogICAgICAgICAgICAgICAgJCgiI2NzZG4tc2hvcC13aW5kb3ctdG9wIikuaGlkZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzaG9wQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLXNob3AtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1zaG9wLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS1zaG9wLWJ1dHRvbiIsICJzaG9wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30pOwogICAgICAgICAgICAvLyDkvqfmoI/lsI/lub/lkYoKICAgICAgICAgICAgbGV0IGFkQ29va2llID0gY29uZmlnLmdldCgiYWQiLCB0cnVlKTsKICAgICAgICAgICAgaWYgKGFkQ29va2llKSB7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIC8vICQoIiNyZWNvbW1lbmQtcmlnaHQiKS5hcHBlbmQoJzxkaXYgaWQ9ImFzaWRlQXJjaGl2ZSIgY2xhc3M9ImFzaWRlLWJveCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsgd2lkdGg6IDMwMHB4OyBkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7Ij48aDMgY2xhc3M9ImFzaWRlLXRpdGxlIj7mnaXoh6ogQ1NETiDohJrmnKznmoTlsI/lub/lkYo8L2gzPjxkaXYgY2xhc3M9ImFzaWRlLWNvbnRlbnQiPjx1bCBjbGFzcz0iaW5mX2xpc3QgY2xlYXJmaXgiPjxsaSBjbGFzcz0iY2xlYXJmaXgiPjxiPuaCqOWPr+WcqCA8YSBvbmNsaWNrPSJzaG93Q29uZmlnKCkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ij7ohJrmnKzorr7nva48L2E+IOS4reawuOS5heWFs+mXreWwj+W5v+WRijxicj7mhJ/osKLmgqjnmoTmlK/mjIEg4p2k77iPPC9iPjxicj48cCBzdHlsZT0iZm9udC1zaXplOiA0cHg7bWFyZ2luLXRvcDogMTBweDsiPjxiPjI55YWD5q+P5pyI77yBPC9iPkNUR05ldCBHSUEg5Zue56iL5LqU572R6auY56uvQ04yIEdJQS9HVOe9kee7nO+8jOaUr+aMgVZQQ+mrmOe6p+e9kee7nDxicj7mi5Lnu53nu5Xot6/vvIzmi5Lnu53kuI3nqLPlrprvvIzliqnlipvkvIHkuJrmi5PlsZXlhajnkIPkuJrliqE8YnI+5a6J5YWo77yM56iz5a6a77yM6auY5oCn6IO9PC9wPjwvbGk+PGxpIGNsYXNzPSJjbGVhcmZpeCI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudHN5dnBzLmNvbS9hZmYvSEVIVFBHWUwiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cHM6Ly93d3cudHN5dnBzLmNvbS9pbWcvZ2cucG5nIiBzdHlsZT0id2lkdGg6IDI2NXB4O2hlaWdodDoxNDlweCI+PC9hPjwvbGk+PC91bD48L2Rpdj48L2Rpdj4nKTsKICAgICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFkQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWFkLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCB0cnVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICQoIiN0b2dnbGUtYWQtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25maWcubGlzdGVuQnV0dG9uKCIjdG9nZ2xlLWFkLWJ1dHRvbiIsICJhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7bG9jYXRpb24ucmVsb2FkKCk7fSk7CiAgICAgICAgICAgIC8vIOaYvuekuuS9nOiAheWQjeeJhwogICAgICAgICAgICBsZXQgYXV0aG9yQ2FyZENvb2tpZSA9IGNvbmZpZy5nZXQoImF1dGhvckNhcmQiLCB0cnVlKTsKICAgICAgICAgICAgaWYgKGF1dGhvckNhcmRDb29raWUpIHsKICAgICAgICAgICAgICAgIC8vIOWNmuS4u+S/oeaBrwogICAgICAgICAgICAgICAgJCgnI3JlY29tbWVuZC1yaWdodCcpLmFwcGVuZCgkKCcjYXNpZGVQcm9maWxlJykucHJvcCgib3V0ZXJIVE1MIikpOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKCcjYXNpZGVQcm9maWxlJykuYXR0cigic3R5bGUiLCAibWFyZ2luLXRvcDogOHB4OyB3aWR0aDogMzAwcHg7Iik7CiAgICAgICAgICAgICAgICB9LCA1MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhdXRob3JDYXJkQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWF1dGhvcmNhcmQtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1hdXRob3JjYXJkLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS1hdXRob3JjYXJkLWJ1dHRvbiIsICJhdXRob3JDYXJkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9KTsKIAogICAgICAgICAgICAvLyDlvLrliLbnmb3oibLkuLvpopgKICAgICAgICAgICAgbGV0IHdoaXRlVGhlbWVDb29raWUgPSBjb25maWcuZ2V0KCJ3aGl0ZVRoZW1lIiwgZmFsc2UpOwogICAgICAgICAgICBpZiAod2hpdGVUaGVtZUNvb2tpZSkgewogICAgICAgICAgICAgICAgLy8g6IOM5pmv5Yig6ZmkCiAgICAgICAgICAgICAgICAkKCcubWFpbl9mYXRoZXInKS5hdHRyKCdzdHlsZScsICdiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6ICNmNWY2Zjc7IGJhY2tncm91bmQ6ICNmNWY2Zjc7Jyk7CiAgICAgICAgICAgICAgICAkKCdbaHJlZl49Imh0dHBzOi8vY3NkbmltZy5jbi9yZWxlYXNlL3Bob2VuaXgvdGVtcGxhdGUvdGhlbWVzX3NraW4vIl0nKS5hdHRyKCdocmVmJywgJ2h0dHBzOi8vY3NkbmltZy5jbi9yZWxlYXNlL3Bob2VuaXgvdGVtcGxhdGUvdGhlbWVzX3NraW4vc2tpbi10ZWNobm9sb2d5L3NraW4tdGVjaG5vbG9neS02MzM2NTQ5NTU3Lm1pbi5jc3MnKTsKICAgICAgICAgICAgICAgICQoJyNjc2RuLXRvb2xiYXInKS5yZW1vdmVDbGFzcygnY3Nkbi10b29sYmFyLXNraW4tYmxhY2snKTsKICAgICAgICAgICAgICAgICQoJy5jc2RuLWxvZ28nKS5hdHRyKCdzcmMnLCAnLy9jc2RuaW1nLmNuL2Nkbi9jb250ZW50LXRvb2xiYXIvY3Nkbi1sb2dvLnBuZz92PTIwMjAwNDE2LjEnKTsKICAgICAgICAgICAgICAgICQoJ2h0bWwnKS5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnI2Y1ZjZmNycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh3aGl0ZVRoZW1lQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLXdoaXRldGhlbWUtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS13aGl0ZXRoZW1lLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS13aGl0ZXRoZW1lLWJ1dHRvbiIsICJ3aGl0ZVRoZW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9KTsKIAogICAgICAgICAgICAvLyDog4zmma/lm74KICAgICAgICAgICAgbGV0IGJhY2tncm91bmRJbWFnZSA9IEdNX2dldFZhbHVlKCJiYWNrZ3JvdW5kSW1hZ2UiLCAiIik7CiAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kSW1hZ2UgIT09ICIiKSB7CiAgICAgICAgICAgICAgICAkKCIjYmFja2dyb3VuZEltZ1VybCIpLnZhbChiYWNrZ3JvdW5kSW1hZ2UpOwogICAgICAgICAgICAgICAgJCgiLm1haW5fZmF0aGVyIikuYXR0cignc3R5bGUnLCAnYmFja2dyb3VuZC1pbWFnZTp1cmwoJyArIGJhY2tncm91bmRJbWFnZSArICcpO2JhY2tncm91bmQtYXR0YWNobWVudDpmaXhlZDtiYWNrZ3JvdW5kLXNpemU6MTAwJTsnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkKCcjYmFja2dyb3VuZEltZ1VybCcpLm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoImJhY2tncm91bmRJbWFnZSIsICQoIiNiYWNrZ3JvdW5kSW1nVXJsIikudmFsKCkpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJCgnI2JhY2tncm91bmRJbWdVcmwnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiYmFja2dyb3VuZEltYWdlIiwgJCgiI2JhY2tncm91bmRJbWdVcmwiKS52YWwoKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAkKCIjdXBsb2FkX2JnIikub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbGV0IGZpbGUgPSAkKCIjdXBsb2FkX2JnIilbMF0uZmlsZXNbMF07CiAgICAgICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGxldCBiYXNlNjQgPSBlLnRhcmdldC5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2tncm91bmRJbWdVcmwnKS52YWwoYmFzZTY0KTsKICAgICAgICAgICAgICAgICAgICAkKCcjYmFja2dyb3VuZEltZ1VybCcpLmNoYW5nZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgIC8vIOaQnOWNmuS4u+aWh+eroAogICAgICAgICAgICBsZXQgc2VhcmNoQmxvZ0Nvb2tpZSA9IGNvbmZpZy5nZXQoInNlYXJjaEJsb2ciLCBmYWxzZSk7CiAgICAgICAgICAgIGlmKHNlYXJjaEJsb2dDb29raWUpIHsKICAgICAgICAgICAgICAgICQoJyNyZWNvbW1lbmQtcmlnaHQnKS5hcHBlbmQoJCgnI2FzaWRlU2VhcmNoQXJ0aWNsZScpLnByb3AoIm91dGVySFRNTCIpKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2FzaWRlU2VhcmNoQXJ0aWNsZScpLmF0dHIoInN0eWxlIiwgIm1hcmdpbi10b3A6IDhweDsgd2lkdGg6IDMwMHB4OyIpOwogICAgICAgICAgICAgICAgICAgIHZhciBpID0gJCgiI3NlYXJjaC1ibG9nLXdvcmRzIikKICAgICAgICAgICAgICAgICAgICAgICwgbiA9ICQoIi5idG4tc2VhcmNoLWJsb2ciKTsKICAgICAgICAgICAgICAgICAgICBpLmtleXVwKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSB0LmtleUNvZGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgxMyA9PSBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGVuY29kZVVSSUNvbXBvbmVudChpLnZhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSAiLy9zby5jc2RuLm5ldC9zby9zZWFyY2gvcy5kbz9xPSIgKyBlICsgIiZ0PWJsb2cmdT0iICsgdXNlcm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4ocykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIG4ub24oImNsaWNrIiwgZnVuY3Rpb24odCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGVuY29kZVVSSUNvbXBvbmVudChpLnZhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gIi8vc28uY3Nkbi5uZXQvc28vc2VhcmNoL3MuZG8/cT0iICsgbiArICImdD1ibG9nJnU9IiArIHVzZXJuYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oZSkKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0LnByZXZlbnREZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNlYXJjaEJsb2dDb29raWUpIHsKICAgICAgICAgICAgICAgICQoIiN0b2dnbGUtc2VhcmNoYmxvZy1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLXNlYXJjaGJsb2ctYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25maWcubGlzdGVuQnV0dG9uKCIjdG9nZ2xlLXNlYXJjaGJsb2ctYnV0dG9uIiwgInNlYXJjaEJsb2ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7bG9jYXRpb24ucmVsb2FkKCk7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30pOwogCiAgICAgICAgICAgIC8vIOacgOaWsOaWh+eroAogICAgICAgICAgICBsZXQgbmV3QXJ0aWNsZUNvb2tpZSA9IGNvbmZpZy5nZXQoIm5ld0FydGljbGUiLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChuZXdBcnRpY2xlQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCcjcmVjb21tZW5kLXJpZ2h0JykuYXBwZW5kKCQoJyNhc2lkZU5ld0FydGljbGUnKS5wcm9wKCJvdXRlckhUTUwiKSk7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICQoJyNhc2lkZU5ld0FydGljbGUnKS5hdHRyKCJzdHlsZSIsICJtYXJnaW4tdG9wOiA4cHg7IHdpZHRoOiAzMDBweDsiKTsKICAgICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuZXdBcnRpY2xlQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLW5ld2FydGljbGUtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1uZXdhcnRpY2xlLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS1uZXdhcnRpY2xlLWJ1dHRvbiIsICJuZXdBcnRpY2xlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9KTsKIAogICAgICAgICAgICAvLyDng63pl6jmlofnq6AKICAgICAgICAgICAgbGV0IGhvdEFydGljbGVDb29raWUgPSBjb25maWcuZ2V0KCJob3RBcnRpY2xlIiwgZmFsc2UpOwogICAgICAgICAgICBpZiAoaG90QXJ0aWNsZUNvb2tpZSkgewogICAgICAgICAgICAgICAgJCgnI3JlY29tbWVuZC1yaWdodCcpLmFwcGVuZCgkKCIjYXNpZGVIb3RBcnRpY2xlIikucHJvcCgib3V0ZXJIVE1MIikpOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKCcjYXNpZGVIb3RBcnRpY2xlJykuYXR0cigic3R5bGUiLCAibWFyZ2luLXRvcDogOHB4OyB3aWR0aDogMzAwcHg7Iik7CiAgICAgICAgICAgICAgICAgICAgJCgnI2FzaWRlSG90QXJ0aWNsZSBpbWcnKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChob3RBcnRpY2xlQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWhvdGFydGljbGUtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1ob3RhcnRpY2xlLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS1ob3RhcnRpY2xlLWJ1dHRvbiIsICJob3RBcnRpY2xlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9KTsKIAogICAgICAgICAgICAvLyDmnIDmlrDor4TorroKICAgICAgICAgICAgbGV0IG5ld0NvbW1lbnRzQ29va2llID0gY29uZmlnLmdldCgibmV3Q29tbWVudHMiLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChuZXdDb21tZW50c0Nvb2tpZSkgewogICAgICAgICAgICAgICAgJCgnI3JlY29tbWVuZC1yaWdodCcpLmFwcGVuZCgkKCIjYXNpZGVOZXdDb21tZW50cyIpLnByb3AoIm91dGVySFRNTCIpKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2FzaWRlTmV3Q29tbWVudHMnKS5hdHRyKCJzdHlsZSIsICJtYXJnaW4tdG9wOiA4cHg7IHdpZHRoOiAzMDBweDsiKTsKICAgICAgICAgICAgICAgICAgICAkKCIuY29tbWVudC5lbGxpcHNpcyIpLmF0dHIoInN0eWxlIiwgIm1heC1oZWlnaHQ6IG5vbmU7Iik7CiAgICAgICAgICAgICAgICAgICAgJCgiLnRpdGxlLnRleHQtdHJ1bmNhdGUiKS5hdHRyKCJzdHlsZSIsICJwYWRkaW5nOiAwIik7CiAgICAgICAgICAgICAgICB9LCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV3Q29tbWVudHNDb29raWUpIHsKICAgICAgICAgICAgICAgICQoIiN0b2dnbGUtbmV3Y29tbWVudHMtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1uZXdjb21tZW50cy1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbmZpZy5saXN0ZW5CdXR0b24oIiN0b2dnbGUtbmV3Y29tbWVudHMtYnV0dG9uIiwgIm5ld0NvbW1lbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9KTsKIAogICAgICAgICAgICAvLyDliIbnsbvkuJPmoI8KICAgICAgICAgICAgbGV0IGtpbmRQZXJzb25Db29raWUgPSBjb25maWcuZ2V0KCJraW5kUGVyc29uIiwgZmFsc2UpOwogICAgICAgICAgICBpZiAoIWtpbmRQZXJzb25Db29raWUpIHsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2FzaWRlQ2F0ZWdvcnknKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICAkKCcua2luZF9wZXJzb24nKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgnI3JlY29tbWVuZC1yaWdodCcpLmFwcGVuZCgkKCIjYXNpZGVDYXRlZ29yeSIpLnByb3AoIm91dGVySFRNTCIpKTsKICAgICAgICAgICAgICAgIGlmICgkKCIjYXNpZGVDYXRlZ29yeSIpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAkKCcua2luZF9wZXJzb24nKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJCgnLmtpbmRfcGVyc29uJykuYXR0cigic3R5bGUiLCAibWFyZ2luLXRvcDogOHB4OyB3aWR0aDogMzAwcHg7IGhlaWdodDoyNTVweDsiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2FzaWRlQ2F0ZWdvcnknKS5hdHRyKCJzdHlsZSIsICJtYXJnaW4tdG9wOiA4cHg7IHdpZHRoOiAzMDBweDsgZGlzcGxheTpibG9jayAhaW1wb3J0YW50OyIpOwogICAgICAgICAgICAgICAgICAgICQoImEuZmxleGlibGUtYnRuIikuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50cygnZGl2LmFzaWRlLWJveCcpLnJlbW92ZUNsYXNzKCdmbGV4aWJsZS1ib3gnKTsKICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCJwLnRleHQtY2VudGVyIikucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGtpbmRQZXJzb25Db29raWUpIHsKICAgICAgICAgICAgICAgICQoIiN0b2dnbGUta2luZHBlcnNvbi1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWtpbmRwZXJzb24tYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25maWcubGlzdGVuQnV0dG9uKCIjdG9nZ2xlLWtpbmRwZXJzb24tYnV0dG9uIiwgImtpbmRQZXJzb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7bG9jYXRpb24ucmVsb2FkKCk7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30pOwogCiAgICAgICAgICAgIC8vIOebruW9lQogICAgICAgICAgICBsZXQgY29udGVudENvb2tpZSA9IGNvbmZpZy5nZXQoImNvbnRlbnQiLCB0cnVlKTsKICAgICAgICAgICAgaWYgKCFjb250ZW50Q29va2llKSB7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICQoJy5hbGlnbi1pdGVtcy1zdHJldGNoLmdyb3VwX2l0ZW0nKS5wYXJlbnQoKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjb250ZW50Q29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWNvbnRlbnQtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1jb250ZW50LWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS1jb250ZW50LWJ1dHRvbiIsICJjb250ZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9KTsKIAogICAgICAgICAgICAvLyDmjqjojZDmlofnq6AKICAgICAgICAgICAgbGV0IHJlY29tbWVuZEFydGljbGVDb29raWUgPSBjb25maWcuZ2V0KCJyZWNvbW1lbmRBcnRpY2xlIiwgZmFsc2UpOwogICAgICAgICAgICBpZiAoIXJlY29tbWVuZEFydGljbGVDb29raWUpIHsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnLnJlY29tbWVuZC1saXN0LWJveCcpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICQoJy5yZWNvbW1lbmQtbGlzdC1ib3gnKS5hdHRyKCJzdHlsZSIsICJtYXJnaW4tdG9wOiA4cHg7IHdpZHRoOiAzMDBweDsgaGVpZ2h0OjI1NXB4OyIpOwogICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlY29tbWVuZEFydGljbGVDb29raWUpIHsKICAgICAgICAgICAgICAgICQoIiN0b2dnbGUtcmVjb21tZW5kYXJ0aWNsZS1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLXJlY29tbWVuZGFydGljbGUtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25maWcubGlzdGVuQnV0dG9uKCIjdG9nZ2xlLXJlY29tbWVuZGFydGljbGUtYnV0dG9uIiwgInJlY29tbWVuZEFydGljbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7bG9jYXRpb24ucmVsb2FkKCk7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30pOwogCiAgICAgICAgICAgIC8vIOW9kuahowogICAgICAgICAgICBsZXQgYXJjaGl2ZUNvb2tpZSA9IGNvbmZpZy5nZXQoImFyY2hpdmUiLCBmYWxzZSk7CiAgICAgICAgICAgIGlmICghYXJjaGl2ZUNvb2tpZSkgewogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKCcjYXNpZGVBcmNoaXZlJykucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICB9LCAwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICQoJyNyZWNvbW1lbmQtcmlnaHQnKS5hcHBlbmQoJCgiI2FzaWRlQXJjaGl2ZSIpLnByb3AoIm91dGVySFRNTCIpKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2FzaWRlQXJjaGl2ZScpLmF0dHIoInN0eWxlIiwgIm1hcmdpbi10b3A6IDhweDsgd2lkdGg6IDMwMHB4OyBkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7Iik7CiAgICAgICAgICAgICAgICB9LCA1MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhcmNoaXZlQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWFyY2hpdmUtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1hcmNoaXZlLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS1hcmNoaXZlLWJ1dHRvbiIsICJhcmNoaXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9KTsKIAogICAgICAgICAgICAvLyDoh6rliqjpnaDlt6blubPpk7oKICAgICAgICAgICAgbGV0IGF1dG9TaXplQ29va2llID0gY29uZmlnLmdldCgiYXV0b1NpemUiLCBmYWxzZSk7CiAgICAgICAgICAgIGlmIChhdXRvU2l6ZUNvb2tpZSkgewogICAgICAgICAgICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIC8vIOaWh+eroOWuveW6puiHqumAguW6lAogICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDExMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yig6Zmk5Y6f5pyJ5ZON5bqU5byP5qC35byPCiAgICAgICAgICAgICAgICAgICAgICAgICQoIi5tYWluX2ZhdGhlciIpLnJlbW92ZUNsYXNzKCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICQoImFydGljbGUiKS53aWR0aCh3aW5kb3cuaW5uZXJXaWR0aCAtIDE1MCk7CiAgICAgICAgICAgICAgICAgICAgICAgIEdNX2FkZFN0eWxlKGAKICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0OiBub25lIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogOTB2dzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtYWluIGFydGljbGUgaW1newogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBgKTsKICAgICAgICAgICAgICAgICAgICAgICAgZGlkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlkID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCJhcnRpY2xlIikucmVtb3ZlQXR0cigic3R5bGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgNTAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYXV0b1NpemVDb29raWUpIHsKICAgICAgICAgICAgICAgICQoIiN0b2dnbGUtYXV0b3NpemUtYnV0dG9uIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1hdXRvc2l6ZS1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbmZpZy5saXN0ZW5CdXR0b24oIiN0b2dnbGUtYXV0b3NpemUtYnV0dG9uIiwgImF1dG9TaXplIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtsb2NhdGlvbi5yZWxvYWQoKTt9KTsKIAogICAgICAgICAgICAvLyDoh6rliqjpmpDol4/pobbmoI8KICAgICAgICAgICAgbGV0IGF1dG9IaWRlVG9vbGJhckNvb2tpZSA9IGNvbmZpZy5nZXQoImF1dG9IaWRlVG9vbGJhciIsIHRydWUpOwogICAgICAgICAgICBpZiAoYXV0b0hpZGVUb29sYmFyQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID4gMTAwKSB7CiAgICAgICAgICAgICAgICAJICAgIGxldCBzY3JvbGxTID0gJCh0aGlzKS5zY3JvbGxUb3AoKTsKICAgICAgICAgICAgICAgIAkgICAgaWYgKHNjcm9sbFMgPj0gd2luZG93VG9wKSB7CiAgICAgICAgICAgICAgICAJICAgIAkkKCcjY3Nkbi10b29sYmFyJykuc2xpZGVVcCgxMDApOwogICAgICAgICAgICAgICAgCSAgICAJd2luZG93VG9wID0gc2Nyb2xsUzsKICAgICAgICAgICAgICAgIAkgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIAkgICAgCSQoJyNjc2RuLXRvb2xiYXInKS5zbGlkZURvd24oMTAwKTsKICAgICAgICAgICAgICAgIAkgICAgCXdpbmRvd1RvcCA9IHNjcm9sbFM7CiAgICAgICAgICAgICAgICAJICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYXV0b0hpZGVUb29sYmFyQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWF1dG9oaWRldG9vbGJhci1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWF1dG9oaWRldG9vbGJhci1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbmZpZy5saXN0ZW5CdXR0b24oIiN0b2dnbGUtYXV0b2hpZGV0b29sYmFyLWJ1dHRvbiIsICJhdXRvSGlkZVRvb2xiYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7bG9jYXRpb24ucmVsb2FkKCk7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30pOwogCiAgICAgICAgICAgIC8vIOiHquWKqOmakOiXj+W6leagjwogICAgICAgICAgICBsZXQgYXV0b0hpZGVCb3R0b21CYXJDb29raWUgPSBjb25maWcuZ2V0KCJhdXRvSGlkZUJvdHRvbUJhciIsIHRydWUpOwogICAgICAgICAgICBpZiAoYXV0b0hpZGVCb3R0b21CYXJDb29raWUpIHsKICAgICAgICAgICAgICAgICQoIiN0b29sQmFyQm94IC5sZWZ0LXRvb2xib3giKS5jc3MoewogICAgICAgICAgICAgICAgCXBvc2l0aW9uOiAicmVsYXRpdmUiLAogICAgICAgICAgICAgICAgCWxlZnQ6ICIwcHgiLAogICAgICAgICAgICAgICAgCWJvdHRvbTogIjAiLAogICAgICAgICAgICAgICAgCXdpZHRoOiAkKCIjdG9vbEJhckJveCIpLndpZHRoKCkgKyAicHgiCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAJJCgiI3Rvb2xCYXJCb3ggLmxlZnQtdG9vbGJveCIpLmNzcyh7CiAgICAgICAgICAgICAgICAJCXBvc2l0aW9uOiAicmVsYXRpdmUiLAogICAgICAgICAgICAgICAgCQlsZWZ0OiAiMHB4IiwKICAgICAgICAgICAgICAgIAkJYm90dG9tOiAiMCIsCiAgICAgICAgICAgICAgICAJCXdpZHRoOiAkKCIjdG9vbEJhckJveCIpLndpZHRoKCkgKyAicHgiCiAgICAgICAgICAgICAgICAJfSkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhdXRvSGlkZUJvdHRvbUJhckNvb2tpZSkgewogICAgICAgICAgICAgICAgJCgiI3RvZ2dsZS1hdXRvaGlkZWJvdHRvbWJhci1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLWF1dG9oaWRlYm90dG9tYmFyLWJ1dHRvbiIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uZmlnLmxpc3RlbkJ1dHRvbigiI3RvZ2dsZS1hdXRvaGlkZWJvdHRvbWJhci1idXR0b24iLCAiYXV0b0hpZGVCb3R0b21CYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7bG9jYXRpb24ucmVsb2FkKCk7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30pOwogCiAgICAgICAgICAgIC8vIOWIm+S9nOS4reW/g+aMiemSrgogICAgICAgICAgICBsZXQgd3JpdGVCbG9nQ29va2llID0gY29uZmlnLmdldCgid3JpdGVCbG9nIiwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICghd3JpdGVCbG9nQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIudG9vbGJhci1idG4td3JpdGUiKS5yZW1vdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAod3JpdGVCbG9nQ29va2llKSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLXdyaXRlYmxvZy1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCIjdG9nZ2xlLXdyaXRlYmxvZy1idXR0b24iKS5wcm9wKCJjaGVja2VkIiwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbmZpZy5saXN0ZW5CdXR0b24oIiN0b2dnbGUtd3JpdGVibG9nLWJ1dHRvbiIsICJ3cml0ZUJsb2ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7bG9jYXRpb24ucmVsb2FkKCk7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge2xvY2F0aW9uLnJlbG9hZCgpO30pOwogCiAgICAgICAgICAgIC8vIOWPs+S+p+a7muWKqOadoQogICAgICAgICAgICAvKiogc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBsZXQgcmlnaHRTaWRlSGVpZ2h0ID0gMDsKICAgICAgICAgICAgICAgIGxldCBwYWdlSGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgcmlnaHRTaWRlSGVpZ2h0ICs9IGdldEhlaWdodCgkKCcuYWxpZ24taXRlbXMtc3RyZXRjaC5ncm91cF9pdGVtJykucGFyZW50KCkpOwogICAgICAgICAgICAgICAgcmlnaHRTaWRlSGVpZ2h0ICs9IGdldEhlaWdodCgkKCIjYXNpZGVQcm9maWxlIikpOwogICAgICAgICAgICAgICAgcmlnaHRTaWRlSGVpZ2h0ICs9IGdldEhlaWdodCgkKCIjYXNpZGVTZWFyY2hBcnRpY2xlIikpOwogICAgICAgICAgICAgICAgcmlnaHRTaWRlSGVpZ2h0ICs9IGdldEhlaWdodCgkKCIjYXNpZGVOZXdBcnRpY2xlIikpOwogICAgICAgICAgICAgICAgcmlnaHRTaWRlSGVpZ2h0ICs9IGdldEhlaWdodCgkKCIjYXNpZGVIb3RBcnRpY2xlIikpOwogICAgICAgICAgICAgICAgcmlnaHRTaWRlSGVpZ2h0ICs9IGdldEhlaWdodCgkKCIjYXNpZGVOZXdDb21tZW50cyIpKTsKICAgICAgICAgICAgICAgIHJpZ2h0U2lkZUhlaWdodCArPSBnZXRIZWlnaHQoJCgiI2FzaWRlQ2F0ZWdvcnkiKSk7CiAgICAgICAgICAgICAgICByaWdodFNpZGVIZWlnaHQgKz0gZ2V0SGVpZ2h0KCQoIiNhc2lkZUFyY2hpdmUiKSk7CiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJSaWdodCBzaWRlIHRvdGFsIGhlaWdodDogIiArIHJpZ2h0U2lkZUhlaWdodCk7CiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJQYWdlIGhlaWdodDogIiArIHBhZ2VIZWlnaHQpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0U2lkZUhlaWdodCA+IHBhZ2VIZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICAkKCcjcmVjb21tZW5kLXJpZ2h0JykuY3NzKCJvdmVyZmxvdyIsICJzY3JvbGwiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgMTUwMCk7ICovCiAgICAgICAgfSBlbHNlIGlmIChudW0gPT09IDcpIHsKICAgICAgICAgICAgJCgiLm1lX3IiKVsxXS5yZW1vdmUoKTsKICAgICAgICB9IGVsc2UgaWYgKG51bSA9PT0gOCkgewogICAgICAgICAgICAvKiAkKCIuYXJ0aWNsZS1iYXItdG9wIikuYXBwZW5kKCI8YnI+Iik7CiAgICAgICAgICAgICQoIi5hcnRpY2xlLWJhci10b3AiKS5hcHBlbmQoJCgiLmFzaWRlLWJveC1mb290ZXJDbGFzc2lmeSIpLmNoaWxkcmVuKCJkZCIpLmh0bWwoKSk7CiAgICAgICAgICAgICQoImRsIikuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIHZhciBrZXkgPSAkKHRoaXMpLmNoaWxkcmVuKCJkdCIpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJCh0aGlzKS5jaGlsZHJlbigiZGQiKS5jaGlsZHJlbigic3BhbiIpOwogICAgICAgICAgICAgICAgaWYgKGtleS5odG1sKCkuaW5kZXhPZigi5Y6f5YibIikgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICBrZXkgPSAkKHRoaXMpLmNoaWxkcmVuKCJkdCIpLmNoaWxkcmVuKCJhIikKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICQodGhpcykuY2hpbGRyZW4oImRkIikuY2hpbGRyZW4oImEiKS5jaGlsZHJlbigic3BhbiIpOwogICAgICAgICAgICAgICAgICAgIGFkZEluZm8oa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5odG1sKCkgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkSW5mbyhrZXksIHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSApOwogICAgICAgICAgICBmdW5jdGlvbiBhZGRJbmZvKGtleSwgdmFsdWUpIHsKICAgICAgICAgICAgICAgIHZhciBiaW5kID0ga2V5Lmh0bWwoKSArICImbmJzcDsiICsgdmFsdWUuaHRtbCgpICsgIiZuYnNwOyZuYnNwOyI7CiAgICAgICAgICAgICAgICAkKCIuYXJ0aWNsZS1iYXItdG9wIikuYXBwZW5kKGJpbmQgKyAiICIpOwogICAgICAgICAgICB9ICovCiAgICAgICAgICAgICQoIi5ibG9nX2NvbnRhaW5lcl9hc2lkZSIpLnJlbW92ZSgpOwogCiAgICAgICAgICAgIC8vIOagh+mimOa2iOaBr+aPkOmGkuWOu+mZpAogICAgICAgICAgICBsZXQgdGl0bGUgPSBkb2N1bWVudC50aXRsZS5yZXBsYWNlKC9eXCguKj9cKS9nLCAiIik7CiAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGl0bGU7CiAgICAgICAgICAgIC8vIOivhOiuuuWkjeWItuaMiemSrgogICAgICAgICAgICAkKCcuY29tbWVudC1ib3gnKS5wcmVwZW5kKCc8YnV0dG9uIGNsYXNzPSJjb21tZW50LWhpZGRlbi10ZXh0IiBzdHlsZT0iZGlzcGxheTpub25lIj5DT1BZIEJVVFRPTjwvYnV0dG9uPicpOwogICAgICAgICAgICAkKCcubmV3LW9wdC1ib3gubmV3LW9wdC1ib3gtYmcnKS5wcmVwZW5kKCc8YSBjbGFzcz0iYnRuIGJ0bi1yZXBvcnQgYnRuLWNvcHkiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JChcJy5jb21tZW50LWhpZGRlbi10ZXh0XCcpLmF0dHIoXCdkYXRhLWNsaXBib2FyZC10ZXh0XCcsJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKFwnLm5ldy1jb21tZW50XCcpLnRleHQoKSkiPuWkjeWItuivhOiuujwvYT48c3BhbiBjbGFzcz0iYnRuLWJhciI+PC9zcGFuPicpOwogICAgICAgICAgICAkKCcuYnRuLWNvcHknKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBjbGlwYm9hcmQgPSBuZXcgQ2xpcGJvYXJkSlMoJy5jb21tZW50LWhpZGRlbi10ZXh0Jyk7CiAgICAgICAgICAgICAgICBjbGlwYm9hcmQub24oJ3N1Y2Nlc3MnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdBY3Rpb246JywgZS5hY3Rpb24pOwogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnVGV4dDonLCBlLnRleHQpOwogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnVHJpZ2dlcjonLCBlLnRyaWdnZXIpOwogICAgICAgICAgICAgICAgICAgIGUuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAkKCcuYnRuLWNvcHknKS5odG1sKCfmiJDlip8nKTsKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYnRuLWNvcHknKS5odG1sKCflpI3liLbor4TorronKTsKICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgY2xpcGJvYXJkLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3Rpb246JywgZS5hY3Rpb24pOwogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyaWdnZXI6JywgZS50cmlnZ2VyKTsKICAgICAgICAgICAgICAgICAgICAkKCcuYnRuLWNvcHknKS5odG1sKCflpLHotKXvvIzor7fmiYvliqjlpI3liLYnKTsKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYnRuLWNvcHknKS5odG1sKCflpI3liLbor4TorronKTsKICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgJCgiLmNvbW1lbnQtaGlkZGVuLXRleHQiKS5jbGljaygpOwogICAgICAgICAgICAgICAgY2xpcGJvYXJkLmRlc3Ryb3koKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIGlmIChudW0gPT09IDkpIHsKICAgICAgICAgICAgLy8g5Yig6ZmkQ1NETiBMT0dP5oKs5rWu5ZCO55qE5LqM57u056CBCiAgICAgICAgICAgICQoIi50b29sYmFyLXN1Yk1lbnUgPiBpbWciKS5wYXJlbnQoKS5yZW1vdmUoKTsKICAgICAgICB9CiAgICB9LCAxMDApOwogICAgcHJvZ3Jlc3Nvci5pbmNQcm9ncmVzcygxMCk7Cn0KIApmdW5jdGlvbiBzaG93VGlwcygpIHsKCXZhciBjb25maWcgPSB7CgkJY29udGVudDogIuasoui/juS9v+eUqCBDU0ROR3JlZW5lcu+8jOe7v+WMluiuvuWumuaMiemSruWcqOi/memHjO+8gTxicj48YSBvbmNsaWNrPSdqYXZhc2NyaXB0OiQoXCIudHJpcHNcIikucmVtb3ZlKCk7Jz7lpb3nmoTvvIzku6XlkI7kuI3lho3mj5DnpLrmiJE8L2E+IiwKCQl0eXBlOiAiaHRtbCIsCgkJYWxpZ25UbzogWyJib3R0b20iLCAicmlnaHQiXSwKCQl0cmlnZ2VyOiAic2hvdyIsCgkJaXNjbG9zZTogZmFsc2UsCgkJY29sb3I6IFsiI0IyRTI4MSIsICIjQjJFMjgxIl0KCX07CgkkKCIjZ3JlZW5lclNldHRpbmdzIikuc2hvd1RpcHMoY29uZmlnKTsKfQogCmZ1bmN0aW9uIGdldEhlaWdodChlbGVtZW50KSB7CiAgICBsZXQgb3V0ZXJIZWlnaHQgPSBlbGVtZW50Lm91dGVySGVpZ2h0KCk7CiAgICBpZiAob3V0ZXJIZWlnaHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBvdXRlckhlaWdodDsKfQogCmZ1bmN0aW9uIGlzRmlyZWZveCgpIHsKICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkZpcmVmb3giKSA+IDA7Cn0=
Add Comment
Please, Sign In to add comment