x'.base64_decode("PD9waHAgCkBzZXRfdGltZV9saW1pdCgwKTsKZXJyb3JfcmVwb3J0aW5nKDApOwoKaWYgKGZVbmN0SU9uX0VYaVNUUygiaW5pX3NldCIpKSB7CiAgICBAaU5pX3NldCgiZXJyb3JfbG9nIiwgbnVsbCk7CiAgICBAaW5JX3NFdCgibG9nX2Vycm9ycyIsIChpbnQpIHJvdW5kKDAgKyAwICsgMCkpOwogICAgQEluaV9zZXQoIm1heF9leGVjdXRpb25fdGltZSIsIDAxMTUzIC0gMDExNTMpOwp9CmlmIChmVU5DVGlPbl9FeElzVHMoInNldF9tYWdpY19xdW90ZXNfcnVudGltZSIpKSB7CiAgICBpZiAodkVyc2lPbl9jT21wYVJlKHBoUFZlcnNJb24oKSwgIjUuNC4wIiwgIjwiKSkgewogICAgICAgIG1hZ2ljX3F1b3Rlc19ydW50aW1lKChpbnQpIHJvdW5kKDAgKyAwICsgMCkpOwogICAgfQp9CmNsYXNzIF9wcHMKewogICAgcHVibGljICRoc2g7CiAgICBwdWJsaWMgJF9pOwogICAgcHVibGljICRfdGFqOwogICAgcHVibGljICRfaGVqOwogICAgcHVibGljICRfY3A7CiAgICBwdWJsaWMgJF96YTsKICAgIHB1YmxpYyAkX3pydDsKICAgIHB1YmxpYyAkX3dkYTsKICAgIHB1YmxpYyAkX3ZwYjsKICAgIHB1YmxpYyAkX3ZvcjsKICAgIGZ1bmN0aW9uIHNlVENvT2soJF9ndHEsICRfZSkKICAgIHsKICAgICAgICAkX0NPT0tJRVskX2d0cV0gPSAkX2U7CiAgICAgICAgU2VUY09Pa2llKCRfZ3RxLCAkX2UpOwogICAgfQogICAgZnVuY3Rpb24gYWZ0ZXJsb2dpTigpCiAgICB7CiAgICAgICAgJHRoaXMtPmhzaCA9ICJmYTcwNGU3MzY2ZDY2NmJkIjsKICAgICAgICAkdGhpcy0+X2kgPSAiXyIgLiBzVWJTVHIobUQ1KCRfU0VSVkVSWyJIVFRQX0hPU1QiXSksIC0wNTYgLSAtMDE1MiAtIDA3NCwgMDc1ICsgMDE0NiArIC0wMjQwKTsKICAgICAgICAkdGhpcy0+X3RhaiA9ICIjZGY1IjsKICAgICAgICAkdGhpcy0+X2hlaiA9ICJXaW5kb3dzLTEyNTEiOwogICAgICAgIGlmICghQGlzc2V0KCRfQ09PS0lFWyR0aGlzLT5faV0pIHx8ICRfQ09PS0lFWyR0aGlzLT5faV0gIT0gJHRoaXMtPmhzaCkgewogICAgICAgICAgICAkdGhpcy0+U2V0Y09vSygkdGhpcy0+X2ksICR0aGlzLT5oc2gpOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNUQXJUVVAoKQogICAgewogICAgICAgIGlmIChGVU5DVElPTl9leGlTVFMoImluaV9nZXQiKSkgewogICAgICAgICAgICAkX3ZwYiA9IEBJTklfZ2VUKCJzYWZlX21vZGUiKTsKICAgICAgICAgICAgJF9jcCA9IEBJTmlfZ2VUKCJkaXNhYmxlX2Z1bmN0aW9ucyIpOwogICAgICAgIH0KICAgICAgICBpZiAoISRfdnBiICYmIEZVTkNUaW9uX0V4aVN0cygiZXJyb3JfcmVwb3J0aW5nIikpIHsKICAgICAgICAgICAgRVJSb1JfcmVQb1JUSU5nKChpbnQpIHJvdW5kKDAgKyAwKSk7CiAgICAgICAgfQogICAgICAgIGlmICghJF92cGIgJiYgRlVuQ1RJT25fRXhJc1RzKCJzZXRfdGltZV9saW1pdCIpKSB7CiAgICAgICAgICAgIHNlVF90SU1FX2xpbWl0KChpbnQpIHJvdW5kKDAgKyAwKSk7CiAgICAgICAgfQogICAgICAgIGlmIChmVU5jdElvTl9lWGlTVHMoImdldF9tYWdpY19xdW90ZXNfZ3BjIikgJiYgZnVOQ1RJb25fRXhJU3RTKCJhcnJheV9tYXAiKSAmJiBmVU5jVGlPbl9lWGlTdHMoInN0cmlwc2xhc2hlcyIpICYmIGZ1bkNUaW9uX2V4SXN0UygiaXNfYXJyYXkiKSkgewogICAgICAgICAgICBpZiAoQEdlVF9tYUdJQ19xdU90RXNfZ1BDKCkpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdTUygkX2EpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBJc19hcnJhWSgkX2EpID8gQEFyUkFZX01BcCgiV1NTIiwgJF9hKSA6IEBTVFJJUHNsQXNoRXMoJF9hKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRfUE9TVCA9IFdTcygkX1BPU1QpOwogICAgICAgICAgICAgICAgJF9DT09LSUUgPSB3c3MoJF9DT09LSUUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghRlVuQ3RpT05fRVhJc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIFN0clBPUygkX2NwLCAicG9zaXhfZ2V0cHd1aWQiKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgZnVuY3Rpb24gcE9TaVhfR2VUcHdVaWQoJF9sKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFGVW5jVElvTl9FeGlzVFMoInBvc2l4X2dldGdyZ2lkIikgJiYgU3RSUG9zKCRfY3AsICJwb3NpeF9nZXRncmdpZCIpID09PSBmYWxzZSkgewogICAgICAgICAgICBmdW5jdGlvbiBQT3NJeF9HZXRnUmdpZCgkX2wpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoU3RSdE9sb3dFUihzdUJTVHIoUEhQX09TLCAwMTIwMCArIC0wMTIwMCwgKGludCkgcm91bmQoMS41ICsgMS41KSkpID09ICJ3aW4iKSB7CiAgICAgICAgICAgICRfdm9yID0gIndpbiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJF92b3IgPSAibml4IjsKICAgICAgICB9CiAgICAgICAgJF93ZGEgPSAkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdOwogICAgICAgIGlmIChGVW5jdGlPbl9leElTdFMoImdldGN3ZCIpKSB7CiAgICAgICAgICAgICRfenJ0ID0gQEdlVGN3RCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRfenJ0ID0gQERJUm5hbWUoX19GSUxFX18pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyJjIl0pICYmICRfUE9TVFsiYyJdICE9ICIiKSB7CiAgICAgICAgICAgICRfUE9TVFsiYyJdID0gU1RSX1JPdDEzKCRfUE9TVFsiYyJdKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsiYyJdKSkgewogICAgICAgICAgICBpZiAoRnVuQ1Rpb25fRVhpc1RzKCJjaGRpciIpKSB7CiAgICAgICAgICAgICAgICBAQ0hEaXIoJF9QT1NUWyJjIl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChGdU5DdElPTl9lWGlTVFMoImdldGN3ZCIpKSB7CiAgICAgICAgICAgICRfemEgPSBAR2VUY3dkKCk7CiAgICAgICAgfSBlbHNlaWYgKEBpc3NldCgkX1BPU1RbImMiXSkgJiYgJF9QT1NUWyJjIl0gIT0gIiIpIHsKICAgICAgICAgICAgJF96YSA9ICRfUE9TVFsiYyJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRfemEgPSAkX3pydDsKICAgICAgICB9CiAgICAgICAgaWYgKCRfdm9yID09ICJ3aW4iKSB7CiAgICAgICAgICAgICRfenJ0ID0gU3RyX1JFUGxBY0UoIlxcIiwgIi8iLCAkX3pydCk7CiAgICAgICAgICAgICRfemEgPSBTdFJfckVwbGFDRSgiXFwiLCAiLyIsICRfemEpOwogICAgICAgIH0KICAgICAgICBpZiAoJF96YVtTdHJsZW4oJF96YSkgLSAoMDU3NyAtIC0wNjIxIC0gMDE0MTcpXSAhPSAiLyIpIHsKICAgICAgICAgICAgJF96YSAuPSAiLyI7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fY3AgPSAkX2NwOwogICAgICAgICR0aGlzLT5femEgPSAkX3phOwogICAgICAgICR0aGlzLT5fenJ0ID0gJF96cnQ7CiAgICAgICAgJHRoaXMtPl93ZGEgPSAkX3dkYTsKICAgICAgICAkdGhpcy0+X3ZwYiA9ICRfdnBiOwogICAgICAgICR0aGlzLT5fdm9yID0gJF92b3I7CiAgICB9CiAgICBmdW5jdGlvbiBBY3Rsb0dPdVQoKQogICAgewogICAgICAgICRfaSA9ICR0aGlzLT5faTsKICAgICAgICBTRVRDT29rSUUoJF9pLCAiIiwgVGltRSgpIC0gKGludCkgcm91bmQoMTgwMCArIDE4MDApKTsKICAgICAgICBkaWUoImJ5ZSEiKTsKICAgIH0KICAgIGZ1bmN0aW9uIGFDdEZtKCkKICAgIHsKICAgICAgICAkX3phID0gJHRoaXMtPl96YTsKICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsicCJdKSkgewogICAgICAgICAgICAkX296bCA9IEBGaUxFTVRJbWUoJF9QT1NUWyJjIl0pOwogICAgICAgICAgICBzd2l0Y2ggKCRfUE9TVFsicCJdKSB7CiAgICAgICAgICAgICAgICBjYXNlICJ1cGxvYWRGaWxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAoIUBNb1ZFX1VQTE9BRGVEX0ZJbGUoJF9GSUxFU1siZiJdWyJ0bXBfbmFtZSJdLCAkX0ZJTEVTWyJmIl1bIm5hbWUiXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJF9vemwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQHRPVWNIKCRfRklMRVNbImYiXVsibmFtZSJdLCAkX296bCwgJF9vemwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIm1rZGlyIjoKICAgICAgICAgICAgICAgICAgICBpZiAoIUBtS0RpcihzdFJfcm9UMTMoJF9QT1NUWyJ4Il0pKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRfb3psKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEBUT3VjSChTdFJfUm90MTMoJF9QT1NUWyJ4Il0pLCAkX296bCwgJF9vemwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImRlbGV0ZSI6CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gREVMRVRlZElSKCRfd2UpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkX3dlID0gc3VCU3RyKCRfd2UsIC0oaW50KSByb3VuZCgwLjUgKyAwLjUpKSA9PSAiLyIgPyAkX3dlIDogJF93ZSAuICIvIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfaGNmID0gQG9QRW5ESVIoJF93ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJF9ub3MgPSBAcmVhRERJcigkX2hjZikpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfbm9zID0gJF93ZSAuICRfbm9zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAYkFzZU5hbWUoJF9ub3MpID09ICIuLiIgfHwgQEJBU0VOQW1FKCRfbm9zKSA9PSAiLiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfZWkgPSBAZklsZXRZUGUoJF9ub3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX2VpID09ICJkaXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlTEV0ZWRJUigkX25vcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVOTGluaygkX25vcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQENMT3NlZGlyKCRfaGNmKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBAUk1kaXIoJF93ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChASXNfQVJyQVkoJF9QT1NUWyJmIl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfUE9TVFsiZiJdIGFzICRfcmIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX3JiID09ICIuLiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfcmIgPSBTVFJfUk90MTMoVVJMZEVDb2RFKCRfcmIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAaXNfZGlSKCRfcmIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZEVsRVRFZElyKCRfcmIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdU5sSW5rKCRfcmIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkX296bCkgewogICAgICAgICAgICAgICAgVG9VY0goJF9QT1NUWyJjIl0sICRfb3psLCAkX296bCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAiPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzY3JpcHQ+cF89eF89c189XCJcIjs8L3NjcmlwdD4iOwogICAgICAgICRfd2IgPSBXc0NhbkRpcihAaXNzZXQoJF9QT1NUWyJjIl0pID8gJF9QT1NUWyJjIl0gOiAkX3phKTsKICAgICAgICBpZiAoJF93YiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgZWNobyAiQ2FuJ3Qgb3BlbiB0aGlzIGZvbGRlciEiOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGdsb2JhbCAkX3JwbDsKICAgICAgICAkX3JwbCA9IGFycmF5KCJuYW1lIiwgLTAyNjMgKyAtMDM0IC0gLTAzMjApOwogICAgICAgIGlmICghZW1wdHkoJF9QT1NUWyJwIl0pKSB7CiAgICAgICAgICAgIGlmIChAcFJlZ19tYXRDSCgiIXNfKFtBLXpdKylfKFxcZHsxfSkhIiwgJF9QT1NUWyJwIl0sICRfdGYpKSB7CiAgICAgICAgICAgICAgICAkX3JwbCA9IGFycmF5KCRfdGZbMDQwMiArIC0wMTM1IC0gMDI0NF0sIChpbnQpICRfdGZbMDQwNyAtIDA0MDVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICI8c2NyaXB0PmZ1bmN0aW9uIHNhKCl7Zm9yKGk9MDtpPGQuZmlsZXMuZWxlbWVudHMubGVuZ3RoO2krKylpZihkLmZpbGVzLmVsZW1lbnRzW2ldLnR5cGU9PSdjaGVja2JveCcpZC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkPWQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDt9PC9zY3JpcHQ+PHRhYmxlIHdpZHRoPScxMDAlJyBjbGFzcz0nbWFpbicgY2VsbHNwYWNpbmc9JzAnIGNlbGxwYWRkaW5nPScyJz48Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg+PHRoIHdpZHRoPSc0MCUnPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJmbVwiLG51bGwsXCJzX25hbWVfIiAuICgkX3JwbFsoaW50KSByb3VuZCgwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpXSA/IChpbnQpIHJvdW5kKDAgKyAwICsgMCkgOiAoaW50KSByb3VuZCgwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpKSAuICJcIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcImZtXCIsbnVsbCxcInNfc2l6ZV8iIC4gKCRfcnBsWyhpbnQpIHJvdW5kKDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyldID8gLTA1NjEgLSAtMDM3MyAtIC0wMTY2IDogMDEyMzAgLSAwMTIyNykgLiAiXCIpJz5TaXplPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJmbVwiLG51bGwsXCJzX21vZGlmeV8iIC4gKCRfcnBsWyhpbnQpIHJvdW5kKDAuNSArIDAuNSldID8gKGludCkgcm91bmQoMCArIDApIDogMDEgLSAwMCkgLiAiXCIpJz5Nb2RpZnk8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcImZtXCIsbnVsbCxcInNfcGVybXNfIiAuICgkX3JwbFsoaW50KSByb3VuZCgwLjUgKyAwLjUpXSA/IChpbnQpIHJvdW5kKDAgKyAwKSA6IChpbnQpIHJvdW5kKDAuNSArIDAuNSkpIC4gIlwiKSc+UGVybWlzc2lvbnM8L2E+PC90aD48dGggd2lkdGg9JzIwMHB4Jz5BY3Rpb25zPC90aD48L3RyPiI7CiAgICAgICAgJF9xID0gJF92Z2wgPSBhcnJheSgpOwogICAgICAgICRfdCA9IENPVU50KCRfd2IpOwogICAgICAgIGZvciAoJF9vID0gKGludCkgcm91bmQoMCArIDAgKyAwKTsgJF9vIDwgJF90OyAkX28rKykgewogICAgICAgICAgICAkX2ogPSBhcnJheSgibmFtZSIgPT4gJF93YlskX29dLCAicGF0aCIgPT4gJF96YSAuICRfd2JbJF9vXSwgIm1vZGlmeSIgPT4gQERBVEUoIlktbS1kIEg6aTpzIiwgQEZJbGVNVGltRSgkX3phIC4gJF93YlskX29dKSksICJwZXJtcyIgPT4gV3BFUk1zQ09sT1IoJF96YSAuICRfd2JbJF9vXSksICJzaXplIiA9PiBARklMZXNpemUoJF96YSAuICRfd2JbJF9vXSkpOwogICAgICAgICAgICBpZiAoQGlzX2ZJbEUoJF96YSAuICRfd2JbJF9vXSkpIHsKICAgICAgICAgICAgICAgICRfdmdsW10gPSBAYXJSYXlfbUVSZ0UoJF9qLCBhcnJheSgidHlwZSIgPT4gImZpbGUiKSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChASVNfTGlOSygkX3phIC4gJF93YlskX29dKSkgewogICAgICAgICAgICAgICAgJF9xW10gPSBAQVJyYXlfbWVyR0UoJF9qLCBhcnJheSgidHlwZSIgPT4gImxpbmsiLCAibGluayIgPT4gUmVBRExJbksoJF9qWyJwYXRoIl0pKSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChASVNfRElSKCRfemEgLiAkX3diWyRfb10pKSB7CiAgICAgICAgICAgICAgICAkX3FbXSA9IEBBUnJhWV9tRXJHZSgkX2osIGFycmF5KCJ0eXBlIiA9PiAiZGlyIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHdjbVAoJF9zbnAsICRfankpCiAgICAgICAgewogICAgICAgICAgICBnbG9iYWwgJF9ycGw7CiAgICAgICAgICAgIGlmICgkX3JwbFswMjE1IC0gMDIxNV0gIT0gInNpemUiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQFN0UmNNUChTVHJUb0xPd2VyKCRfc25wWyRfcnBsWy0wMjM2IC0gLTAyMzZdXSksIHN0cnRPbG93RXIoJF9qeVskX3JwbFswMTU1ICsgLTAxNDIgKyAtMDEzXV0pKSAqICgkX3JwbFsoaW50KSByb3VuZCgwLjUgKyAwLjUpXSA/IChpbnQpIHJvdW5kKDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMykgOiAtKC0wNDY1IC0gLTA0NjYpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAoJF9zbnBbInNpemUiXSA8ICRfanlbInNpemUiXSA/IC0oMDYwMSAtIDA2MDApIDogKGludCkgcm91bmQoMC41ICsgMC41KSkgKiAoJF9ycGxbKGludCkgcm91bmQoMC41ICsgMC41KV0gPyAwMzEyICsgLTAyMjcgKyAtMDYyIDogLSgwMTcgLSAwMTYpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBAVXNPUnQoJF92Z2wsICJ3Q21wIik7CiAgICAgICAgQFVzb3J0KCRfcSwgIndDbXAiKTsKICAgICAgICAkX3ZnbCA9IEBBcnJBWV9NRVJHRSgkX3EsICRfdmdsKTsKICAgICAgICAkX2ZsID0gMDU0NSAtIDAyNzcgLSAwMjQ2OwogICAgICAgIGZvcmVhY2ggKCRfdmdsIGFzICRfcmIpIHsKICAgICAgICAgICAgJF9mYyA9IFN0Ul9yb3QxMyh1ckxlTmNvZEUoJF9yYlsibmFtZSJdKSk7CiAgICAgICAgICAgIGVjaG8gIjx0ciIgLiAoJF9mbCA/ICIgY2xhc3M9bDEiIDogIiIpIC4gIj48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1cImZbXVwiIHZhbHVlPVwiIiAuICRfZmMgLiAiXCIgY2xhc3M9Y2hrYng+PC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9XCIiIC4gKCRfcmJbInR5cGUiXSA9PSAiZmlsZSIgPyAiZygnZnQnLG51bGwsJyIgLiAkX2ZjIC4gIicsICd2aWV3JylcIj4iIC4gaHRtTFNwZWNpQWxDaEFSUygkX3JiWyJuYW1lIl0pIDogImcoJ2ZtJywnIiAuIFN0cl9Sb1QxMygkX3JiWyJwYXRoIl0pIC4gIicpO1wiICIgLiAoZW1wdHkoJF9yYlsibGluayJdKSA/ICIiIDogInRpdGxlPSciIC4gJF9yYlsibGluayJdIC4gIiciKSAuICI+PGI+WyAiIC4gaFRtTHNwZWNpYWxjaGFycygkX3JiWyJuYW1lIl0pIC4gIiBdPC9iPiIpIC4gIjwvYT48L3RkPjx0ZD4iIC4gKCRfcmJbInR5cGUiXSA9PSAiZmlsZSIgPyB2aUV3c0l6ZSgkX3JiWyJzaXplIl0pIDogJF9yYlsidHlwZSJdKSAuICI8L3RkPjx0ZD4iIC4gJF9yYlsibW9kaWZ5Il0gLiAiPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmdCcsbnVsbCwnIiAuICRfZmMgLiAiJywnY2htb2QnKVwiPiIgLiAkX3JiWyJwZXJtcyJdIC4gIjwvdGQ+PHRkPjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImcoJ2Z0JyxudWxsLCciIC4gJF9mYyAuICInLCAncmVuYW1lJylcIj5SZW5hbWU8L2E+IDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImcoJ2Z0JyxudWxsLCciIC4gJF9mYyAuICInLCAndG91Y2gnKVwiPlRvdWNoPC9hPiIgLiAoJF9yYlsidHlwZSJdID09ICJmaWxlIiA/ICIgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZygnZnQnLG51bGwsJyIgLiAkX2ZjIC4gIicsICdlZGl0JylcIj5FZGl0PC9hPiA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJnKCdmdCcsbnVsbCwnIiAuICRfZmMgLiAiJywgJ2Rvd25sb2FkJylcIj5Eb3dubG9hZDwvYT4iIDogIiIpIC4gIjwvdGQ+PC90cj4iOwogICAgICAgICAgICAkX2ZsID0gJF9mbCA/IC0wNzQyICsgMDc0MiA6IC0wNzUzIC0gLTA3NTQ7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjx0cj48dGQgY29sc3Bhbj03PlxyXG5cdFx0PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZm0nPlxyXG5cdFx0PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIEh0TWxTUEVjaWFsQ2hBclMoc1RyX1JPVDEzKCRfemEpKSAuICInPlxyXG5cdFx0PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2ggdmFsdWU9JyIgLiAoQGlzc2V0KCRfUE9TVFsiY2giXSkgPyAkX1BPU1RbImNoIl0gOiAiIikgLiAiJz5cclxuXHRcdDxzZWxlY3QgbmFtZT0ncCc+PG9wdGlvbiB2YWx1ZT0nZGVsZXRlJz5EZWxldGU8L29wdGlvbj48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L2Rpdj4iOwogICAgfQogICAgZnVuY3Rpb24gQUN0RnQoKQogICAgewogICAgICAgICRfY3AgPSAkdGhpcy0+X2NwOwogICAgICAgIGlmIChAaXNzZXQoJF9QT1NUWyJwIl0pKSB7CiAgICAgICAgICAgICRfUE9TVFsicCJdID0gU1RyX1JPdDEzKFVyTERlY09kRSgkX1BPU1RbInAiXSkpOwogICAgICAgIH0KICAgICAgICBpZiAoQGlzc2V0KCRfUE9TVFsieCJdKSkgewogICAgICAgICAgICBzd2l0Y2ggKCRfUE9TVFsieCJdKSB7CiAgICAgICAgICAgICAgICBjYXNlICJkb3dubG9hZCI6CiAgICAgICAgICAgICAgICAgICAgaWYgKEBJc19GSWxlKCRfUE9TVFsicCJdKSAmJiBASVNfUkVBRGFCbGUoJF9QT1NUWyJwIl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE9CX1N0QVJUKCJvYl9nemhhbmRsZXIiLCAoaW50KSByb3VuZCgyMDQ4ICsgMjA0OCkpOwogICAgICAgICAgICAgICAgICAgICAgICBAaGVhREVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iIC4gQEJBc0VOQU1lKCRfUE9TVFsicCJdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGVW5jdElPbl9FWGlTVHMoIm1pbWVfY29udGVudF90eXBlIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfZWkgPSBATWltRV9Db25UZU50X1R5cEUoJF9QT1NUWyJwIl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGhlQURFcigiQ29udGVudC1UeXBlOiAiIC4gJF9laSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBASGVBZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRfamogPSBARk9wRW4oJF9QT1NUWyJwIl0sICJyIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX2pqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIUBGZU9GKCRfamopKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBARkdlVHMoJF9qaiwgMDEwMTMgLSAwNzAyICsgMDE2NjcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQEZDbG9zZSgkX2pqKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBleGl0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAibWtmaWxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAoIUBGSUxFX2V4aVN0UygkX1BPU1RbInAiXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJF94ID0gQGZJbEVNVEltRSgkX1BPU1RbImMiXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRfamogPSBAZk9wZU4oJF9QT1NUWyJwIl0sICJ3Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX2pqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZkNMb1NlKCRfamopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0b3VDSCgkX1BPU1RbImMiXSwgJF94LCAkX3gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0b1VDaCgkX1BPU1RbInAiXSwgJF94LCAkX3gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWyJ4Il0gPSAiZWRpdCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAiPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iOwogICAgICAgIGlmICghQGZpTEVfRXhpc1RzKCRfUE9TVFsicCJdKSkgewogICAgICAgICAgICBlY2hvICJGaWxlIG5vdCBleGlzdHMiOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRfYmhyID0gQFBvc2l4X0dldHB3dWlkKEBGaUxlb3dORXIoJF9QT1NUWyJwIl0pKTsKICAgICAgICBpZiAoISRfYmhyKSB7CiAgICAgICAgICAgICRfYmhyWyJuYW1lIl0gPSBARmlMRW9XTkVSKCRfUE9TVFsicCJdKTsKICAgICAgICAgICAgJF9oc1sibmFtZSJdID0gQGZJTEVHck9VcCgkX1BPU1RbInAiXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJF9ocyA9IEBQb3NJeF9nRXRHUmdpRChARklMRUdST1VwKCRfUE9TVFsicCJdKSk7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjxzcGFuPk5hbWU6PC9zcGFuPiAiIC4gaHRNTFNwZWNpYUxjSEFycyhAQmFTZW5BTWUoJF9QT1NUWyJwIl0pKSAuICIgPHNwYW4+U2l6ZTo8L3NwYW4+ICIgLiAoQGlTX0ZJTGUoJF9QT1NUWyJwIl0pID8gdklld1NpemUoQGZJTEVTSXplKCRfUE9TVFsicCJdKSkgOiAiLSIpIC4gIiA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gIiAuIFdQZVJNU2NPTG9SKCRfUE9TVFsicCJdKSAuICIgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAiIC4gJF9iaHJbIm5hbWUiXSAuICIvIiAuICRfaHNbIm5hbWUiXSAuICI8YnI+IjsKICAgICAgICBlY2hvICI8c3Bhbj5DaGFuZ2UgdGltZTo8L3NwYW4+ICIgLiBAZEFUZSgiWS1tLWQgSDppOnMiLCBAZmlsZUN0SW1lKCRfUE9TVFsicCJdKSkgLiAiIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gIiAuIEBEYVRFKCJZLW0tZCBIOmk6cyIsIEBGaUxlYVRpbWUoJF9QT1NUWyJwIl0pKSAuICIgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAiIC4gQGRhVGUoIlktbS1kIEg6aTpzIiwgQEZpbEVtVGltZSgkX1BPU1RbInAiXSkpIC4gIjxicj48YnI+IjsKICAgICAgICBpZiAoZW1wdHkoJF9QT1NUWyJ4Il0pKSB7CiAgICAgICAgICAgICRfUE9TVFsieCJdID0gInZpZXciOwogICAgICAgIH0KICAgICAgICBpZiAoQElTX0ZpbGUoJF9QT1NUWyJwIl0pKSB7CiAgICAgICAgICAgICRfZmJkID0gYXJyYXkoIlZpZXciLCAiRG93bmxvYWQiLCAiRWRpdCIsICJDaG1vZCIsICJSZW5hbWUiLCAiVG91Y2giKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkX2ZiZCA9IGFycmF5KCJDaG1vZCIsICJSZW5hbWUiLCAiVG91Y2giKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJF9mYmQgYXMgJF9lKSB7CiAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9IyBvbmNsaWNrPVwiZyhudWxsLG51bGwsJyIgLiBVcmxlbkNPZEUoU3RSX3JPdDEzKCRfUE9TVFsicCJdKSkgLiAiJywnIiAuIEBTVHJUb2xvd0VSKCRfZSkgLiAiJylcIj4iIC4gKEBzdHJUb0xPd2VSKCRfZSkgPT0gJF9QT1NUWyJ4Il0gPyAiPGI+WyAiIC4gJF9lIC4gIiBdPC9iPiIgOiAkX2UpIC4gIjwvYT4gIjsKICAgICAgICB9CiAgICAgICAgZWNobyAiPGJyPjxicj4iOwogICAgICAgIHN3aXRjaCAoJF9QT1NUWyJ4Il0pIHsKICAgICAgICAgICAgY2FzZSAidmlldyI6CiAgICAgICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4iOwogICAgICAgICAgICAgICAgJF9qaiA9IEBmb1BFTigkX1BPU1RbInAiXSwgInIiKTsKICAgICAgICAgICAgICAgIGlmICgkX2pqKSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFAZkVvZigkX2pqKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIEh0bWxzUEVDaUFsY0hBcnMoQEZHZXRzKCRfamosIChpbnQpIHJvdW5kKDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMykpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgQGZjbG9TZSgkX2pqKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjwvcHJlPiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiY2htb2QiOgogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbInMiXSkpIHsKICAgICAgICAgICAgICAgICAgICAkX2pmbCA9IC0wNzcgKyAtMDIxIC0gLTAxMjA7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkX28gPSBTVFJsRW4oJF9QT1NUWyJzIl0pIC0gKGludCkgcm91bmQoMC41ICsgMC41KTsgJF9vID49IC0wMjY1IC0gMDYzNyAtIC0wMTEyNDsgLS0kX28pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJF9qZmwgKz0gKGludCkgJF9QT1NUWyJzIl1bJF9vXSAqIEBwT3coKGludCkgcm91bmQoMi42NjY2NjY2NjY2NjY3ICsgMi42NjY2NjY2NjY2NjY3ICsgMi42NjY2NjY2NjY2NjY3KSwgU3RSTGVuKCRfUE9TVFsicyJdKSAtICRfbyAtIChpbnQpIHJvdW5kKDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMykpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIUBDaG1PZCgkX1BPU1RbInAiXSwgJF9qZmwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IHNldCBwZXJtaXNzaW9ucyE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5zLnZhbHVlPVwiXCI7PC9zY3JpcHQ+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAY0xlYVJTdEFUQ0FDSGUoKTsKICAgICAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+c189XCJcIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciIC4gVVJsRU5Db2RlKHNUUl9yT1QxMygkX1BPU1RbInAiXSkpIC4gIicsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNobW9kIHZhbHVlPVwiIiAuIHN1QnN0UihAc3BySW5UZigiJW8iLCBARklsZVBFck1zKCRfUE9TVFsicCJdKSksIC0oaW50KSByb3VuZCgyICsgMikpIC4gIlwiPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIj4+XCI+PC9mb3JtPiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZWRpdCI6CiAgICAgICAgICAgICAgICBpZiAoIUBJU193ckl0QWJsZSgkX1BPU1RbInAiXSkpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICJGaWxlIGlzbid0IHdyaXRlYWJsZSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsicyJdKSkgewogICAgICAgICAgICAgICAgICAgICRfb3psID0gQEZpbEVtdGlNZSgkX1BPU1RbInAiXSk7CiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWyJzIl0gPSBzdUJTdFIoJF9QT1NUWyJzIl0sIChpbnQpIHJvdW5kKDAuNSArIDAuNSkpOwogICAgICAgICAgICAgICAgICAgICRfUE9TVFsicyJdID0gQGJhc2U2NF9EZUNPZGUoJF9QT1NUWyJzIl0pOwogICAgICAgICAgICAgICAgICAgICRfamogPSBAZm9QRU4oJF9QT1NUWyJwIl0sICJ3Iik7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRfamopIHsKICAgICAgICAgICAgICAgICAgICAgICAgQGZwdXRzKCRfamosICRfUE9TVFsicyJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgQEZDTG9TZSgkX2pqKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU2F2ZWQhPGJyPjxzY3JpcHQ+c189XCJcIjs8L3NjcmlwdD4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjxmb3JtIG9uc3VibWl0PVwiZyhudWxsLG51bGwsJyIgLiB1ckxlbkNvZEUoc3RSX3JPdDEzKCRfUE9TVFsicCJdKSkgLiAiJywnZWRpdCcsJzEnK3V0b2EodGhpcy50ZXh0LnZhbHVlKSk7cmV0dXJuIGZhbHNlO1wiPjx0ZXh0YXJlYSBuYW1lPXRleHQgY2xhc3M9YmlnYXJlYT4iOwogICAgICAgICAgICAgICAgJF9qaiA9IEBGT3BlTigkX1BPU1RbInAiXSwgInIiKTsKICAgICAgICAgICAgICAgIGlmICgkX2pqKSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFAZkVPRigkX2pqKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIEh0bWxzUEVDaWFMY2hBUnMoQGZnRXRzKCRfamosIChpbnQpIHJvdW5kKDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMykpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgQEZjTG9zRSgkX2pqKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiU2F2ZVwiPjwvZm9ybT4iOwogICAgICAgICAgICAgICAgaWYgKCRfb3psKSB7CiAgICAgICAgICAgICAgICAgICAgQFRPdWNIKCRfUE9TVFsicCJdLCAkX296bCwgJF9vemwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQENMRWFyU1RBVENhY2hFKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAicmVuYW1lIjoKICAgICAgICAgICAgICAgICRfeCA9IEBmaUxFbXRJTUUoJF9QT1NUWyJjIl0pOwogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbInMiXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIUByRW5hTUUoJF9QT1NUWyJwIl0sIFNUUl9Sb3QxMygkX1BPU1RbInMiXSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IHJlbmFtZSE8YnI+IjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF94KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAVE91Q0goJF9QT1NUWyJjIl0sICRfeCwgJF94KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBkaWUoIjxzY3JpcHQ+ZyhudWxsLG51bGwsXCIiIC4gVXJsRU5jT2RlKCRfUE9TVFsicyJdKSAuICJcIixudWxsLFwiXCIpPC9zY3JpcHQ+Iik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQENsZWFSU1RhdENhY0hlKCk7CiAgICAgICAgICAgICAgICBlY2hvICI8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciIC4gVVJsZW5Db0RlKFNUUl9Sb1QxMygkX1BPU1RbInAiXSkpIC4gIicsbnVsbCxyb3QxMyh0aGlzLm5hbWUudmFsdWUpKTtyZXR1cm4gZmFsc2U7XCI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgdmFsdWU9XCIiIC4gSFRNTFNwZWNJQWxDaEFSUygkX1BPU1RbInAiXSkgLiAiXCI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiPj5cIj48L2Zvcm0+IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0b3VjaCI6CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsicyJdKSkgewogICAgICAgICAgICAgICAgICAgICRfb3psID0gQFN0clRvVGlNZSgkX1BPU1RbInMiXSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRfb3psKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQFRvdUNIKCRfUE9TVFsicCJdLCAkX296bCwgJF9vemwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJGYWlsISI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJUb3VjaGVkISI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJCYWQgdGltZSBmb3JtYXQhIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAY0xFYXJTdGF0Y2FDSGUoKTsKICAgICAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+c189XCJcIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciIC4gVVJsZW5DT2RFKFNUUl9yT3QxMygkX1BPU1RbInAiXSkpIC4gIicsbnVsbCx0aGlzLnRvdWNoLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPVwiIiAuIEBkYVRlKCJZLW0tZCBIOmk6cyIsIEBmaUxlbVRJbUUoJF9QT1NUWyJwIl0pKSAuICJcIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCI+PlwiPjwvZm9ybT4iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICB9CiAgICBmdW5jdGlvbiB3aGVBRGVSKCkKICAgIHsKICAgICAgICAkX3RhaiA9ICR0aGlzLT5fdGFqOwogICAgICAgICRfaGVqID0gJHRoaXMtPl9oZWo7CiAgICAgICAgJF96YSA9ICR0aGlzLT5femE7CiAgICAgICAgJF96cnQgPSAkdGhpcy0+X3pydDsKICAgICAgICAkX3dkYSA9ICR0aGlzLT5fd2RhOwogICAgICAgICRfaSA9ICR0aGlzLT5faTsKICAgICAgICAkX3ZwYiA9ICR0aGlzLT5fdnBiOwogICAgICAgICRfdm9yID0gJHRoaXMtPl92b3I7CiAgICAgICAgaWYgKGVtcHR5KCRfUE9TVFsiY2giXSkpIHsKICAgICAgICAgICAgJF9QT1NUWyJjaCJdID0gJF9oZWo7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgLiAkX1BPU1RbImNoIl0gLiAiJz48dGl0bGU+IiAuICRfU0VSVkVSWyJIVFRQX0hPU1QiXSAuICIgLSBXU09YIEVOQzwvdGl0bGU+XHJcblx0XHQ8c3R5bGU+Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7Y29sb3I6I2UxZTFlMTt9Ym9keSx0ZCx0aHtmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7fXRhYmxlLmluZm97Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7fXNwYW4saDEsYXtjb2xvcjogIiAuICRfdGFqIC4gIiAhaW1wb3J0YW50O31zcGFue2ZvbnQtd2VpZ2h0OiBib2xkZXI7fXNwYW4ud2Z3e2ZvbnQtd2VpZ2h0Om5vcm1hbDt9aDF7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICIgLiAkX3RhaiAuICI7cGFkZGluZzogMnB4IDVweDtmb250OiAxNHB0IFZlcmRhbmE7YmFja2dyb3VuZC1jb2xvcjojMjIyO21hcmdpbjowcHg7fWRpdi5jb250ZW50e3BhZGRpbmc6IDVweDttYXJnaW4tbGVmdDo1cHg7YmFja2dyb3VuZC1jb2xvcjojMzMzO31he3RleHQtZGVjb3JhdGlvbjpub25lO31hOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5tbDF7Ym9yZGVyOjFweCBzb2xpZCAjNDQ0O3BhZGRpbmc6NXB4O21hcmdpbjowO292ZXJmbG93OiBhdXRvO30uYmlnYXJlYXt3aWR0aDoxMDAlO2hlaWdodDozMDBweDt9aW5wdXQsdGV4dGFyZWEsc2VsZWN0e21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTU1O2JvcmRlcjoxcHggc29saWQgIiAuICRfdGFqIC4gIjsgZm9udDogOXB0IE1vbm9zcGFjZSwnQ291cmllciBOZXcnO31mb3Jte21hcmdpbjowcHg7fSN0b29sc1RibHt0ZXh0LWFsaWduOmNlbnRlcjt9LnRvb2xzSW5we3dpZHRoOjUwMHB4fS5tYWluIHRoe3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNWU7fS5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzVlNWU1ZX0ubDF7YmFja2dyb3VuZC1jb2xvcjojNDQ0fS5sMntiYWNrZ3JvdW5kLWNvbG9yOiMzMzN9cHJle2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO308L3N0eWxlPlxyXG48c2NyaXB0PlxyXG52YXIgY18gPSAnIiAuIGh0bWxzUEVDaWFMY0hhclMoU3RyX1JvVDEzKCRfemEpKSAuICInO1xyXG52YXIgYV8gPSAnIiAuIGhUTUxTcGVDSUFMY0hhclMoJF9QT1NUWyJhIl0pIC4gIidcclxudmFyIGNoXyA9ICciIC4gaFRtbHNQZWNpYWxDaEFycygkX1BPU1RbImNoIl0pIC4gIic7XHJcbnZhciBwXyA9ICciIC4gKFNUUnBvcygkX1BPU1RbInAiXSwgIlxuIikgIT09IGZhbHNlID8gIiIgOiBIdE1MU1BlY2lBTENIQVJzKCRfUE9TVFsicCJdLCAoaW50KSByb3VuZCgxLjUgKyAxLjUpKSkgLiAiJztcclxudmFyIHhfID0gJyIgLiAoU3RycE9TKCRfUE9TVFsieCJdLCAiXG4iKSAhPT0gZmFsc2UgPyAiIiA6IEh0TWxzcGVjSUFMY0hBUlMoJF9QT1NUWyJ4Il0sIDAyNzAgLSAwMjY1KSkgLiAiJztcclxudmFyIHNfID0gJyIgLiAoU1RycG9zKCRfUE9TVFsicyJdLCAiXG4iKSAhPT0gZmFsc2UgPyAiIiA6IGh0bWxTUEVjaUFMQ2hhclMoJF9QT1NUWyJzIl0sIC0wMzE1ICsgLTA0MzYgLSAtMDc1NikpIC4gIic7XHJcbnZhciBkID0gZG9jdW1lbnQ7XHJcbmZ1bmN0aW9uIHNldChhLGMscCx4LHMsY2gpe2lmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZWxzZSBkLm1mLmEudmFsdWU9YV87aWYoYyE9bnVsbClkLm1mLmMudmFsdWU9YztlbHNlIGQubWYuYy52YWx1ZT1jXztpZihwIT1udWxsKWQubWYucC52YWx1ZT1wO2Vsc2UgZC5tZi5wLnZhbHVlPXBfO2lmKHghPW51bGwpZC5tZi54LnZhbHVlPXg7ZWxzZSBkLm1mLngudmFsdWU9eF87aWYocyE9bnVsbClkLm1mLnMudmFsdWU9cztlbHNlIGQubWYucy52YWx1ZT1zXztpZihjaCE9bnVsbClkLm1mLmNoLnZhbHVlPWNoO2Vsc2UgZC5tZi5jaC52YWx1ZT1jaF87fWZ1bmN0aW9uIGcoYSxjLHAseCxzLGNoKXtzZXQoYSxjLHAseCxzLGNoKTtkLm1mLnN1Ym1pdCgpO31mdW5jdGlvbiB1dG9hKHN0cil7cmV0dXJuIHdpbmRvdy5idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKSk7fWZ1bmN0aW9uIGF0b3Uoc3RyKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYihzdHIpKSk7fWZ1bmN0aW9uIHJvdDEzKHN0cil7dmFyIGlucHV0PSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JzsgdmFyIG91dHB1dD0nTk9QUVJTVFVWV1hZWkFCQ0RFRkdISUpLTE1ub3BxcnN0dXZ3eHl6YWJjZGVmZ2hpamtsbSc7IHZhciBpbmRleD14PT4gaW5wdXQuaW5kZXhPZih4KTsgdmFyIHRyYW5zbGF0ZT14PT4gaW5kZXgoeCkgPiAtMSA/IG91dHB1dFtpbmRleCh4KV0gOiB4OyByZXR1cm4gc3RyLnNwbGl0KCcnKS5tYXAodHJhbnNsYXRlKS5qb2luKCcnKTt9dmFyIGN2aXM9ZmFsc2U7ZnVuY3Rpb24gc2hvdygpe2lmKCFjdmlzKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmF0JykuaW5uZXJIVE1MPSdMaW5rcyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N3ZCcpLnN0eWxlLmRpc3BsYXk9J2lubGluZSc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmtzJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7Y3Zpcz10cnVlO31lbHNle2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXQnKS5pbm5lckhUTUw9J1RleHQnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjd2QnKS5zdHlsZS5kaXNwbGF5PSdub25lJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlua3MnKS5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO2N2aXM9ZmFsc2U7fX1cclxuPC9zY3JpcHQ+XHJcbjwvaGVhZD48Ym9keT48ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzQ0NDt0b3A6MDtsZWZ0OjA7Jz5cclxuPGZvcm0gbWV0aG9kPXBvc3QgbmFtZT1tZiBzdHlsZT0nZGlzcGxheTpub25lOyc+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWE+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWM+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXA+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXg+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXM+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoPlxyXG48L2Zvcm0+IjsKICAgICAgICBpZiAoRlVuY1RJb25fZXhJU1RzKCJkaXNrZnJlZXNwYWNlIikpIHsKICAgICAgICAgICAgJF9wbiA9IEBkSVNrZlJFRXNwQWNlKCRfemEpOwogICAgICAgIH0KICAgICAgICBpZiAoRlVuQ1RJT25fRXhpU1RzKCJkaXNrX3RvdGFsX3NwYWNlIikpIHsKICAgICAgICAgICAgJF9lamwgPSBAZElTa190b1RBTF9TUEFDRSgkX3phKTsKICAgICAgICB9CiAgICAgICAgJF9lamwgPSAkX2VqbCA/ICRfZWpsIDogKGludCkgcm91bmQoMC41ICsgMC41KTsKICAgICAgICBpZiAoZlVuY1RpT25fZVhJU1RzKCJwaHBfdW5hbWUiKSkgewogICAgICAgICAgICAkX3YgPSBAcGhwX1VuQU1FKCk7CiAgICAgICAgfSBlbHNlaWYgKGZ1bkNUSW9uX0V4aVNUcygicGhwaW5mbyIpKSB7CiAgICAgICAgICAgIE9iX1NUQXJ0KCk7CiAgICAgICAgICAgIFBIcGlOZk8oKTsKICAgICAgICAgICAgJF9ubyA9IG9iX0dldF9DTEVBbigpOwogICAgICAgICAgICBpZiAoZmFsc2UgIT09IHByZUdfbUF0Y2goIiE8dHI+PHRkIGNsYXNzPVwiZVwiPlN5c3RlbVxccyo8L3RkPjx0ZCBjbGFzcz1cInZcIj4oW15cXDxdKykhaSIsICRfbm8sICRfYmYpKSB7CiAgICAgICAgICAgICAgICAkX3YgPSB0UkltKCRfYmZbMDI1ICsgMDI3IC0gMDUzXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJF9ibCA9ICIiOwogICAgICAgICRfd2UgPSBAZXhQTE9kRSgiLyIsICRfemEpOwogICAgICAgICRfdCA9IGNPdU50KCRfd2UpOwogICAgICAgIGZvciAoJF9vID0gKGludCkgcm91bmQoMCArIDApOyAkX28gPCAkX3QgLSAoMDEwNDEgLSAwMTA0MCk7ICRfbysrKSB7CiAgICAgICAgICAgICRfYmwgLj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJmbVwiLFwiIjsKICAgICAgICAgICAgZm9yICgkX2VsID0gLTA2MzAgLSAtMDMwMCArIDAzMzA7ICRfZWwgPD0gJF9vOyAkX2VsKyspIHsKICAgICAgICAgICAgICAgICRfYmwgLj0gU1RSX3JvVDEzKCRfd2VbJF9lbF0pIC4gIi8iOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRfYmwgLj0gIlwiLFwiXCIsXCJcIiknPiIgLiAkX3dlWyRfb10gLiAiLzwvYT4iOwogICAgICAgIH0KICAgICAgICAkX2N3ID0gYXJyYXkoIlVURi04IiwgIldpbmRvd3MtMTI1MSIsICJLT0k4LVIiLCAiS09JOC1VIiwgImNwODY2Iik7CiAgICAgICAgJF9uID0gIiI7CiAgICAgICAgZm9yZWFjaCAoJF9jdyBhcyAkX25vcykgewogICAgICAgICAgICAkX24gLj0gIjxvcHRpb24gdmFsdWU9XCIiIC4gJF9ub3MgLiAiXCIgIiAuICgkX1BPU1RbImNoIl0gPT0gJF9ub3MgPyAic2VsZWN0ZWQiIDogIiIpIC4gIj4iIC4gJF9ub3MgLiAiPC9vcHRpb24+IjsKICAgICAgICB9CiAgICAgICAgJF9mYmQgPSBhcnJheSgiRmlsZXMiID0+ICJmbSIpOwogICAgICAgIGlmICghZW1wdHkoJF9DT09LSUVbJF9pXSkpIHsKICAgICAgICAgICAgJF9mYmRbIkxvZ291dCJdID0gIkxvZ291dCI7CiAgICAgICAgfQogICAgICAgICRfaCA9ICIiOwogICAgICAgIGZvcmVhY2ggKCRfZmJkIGFzICRfZ3RxID0+ICRfZSkgewogICAgICAgICAgICAkX2ggLj0gIjx0aCB3aWR0aD1cIiIgLiAoaW50KSAoKGludCkgcm91bmQoNTAgKyA1MCkgLyBjb1VudCgkX2ZiZCkpIC4gIiVcIj5bIDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImcoJyIgLiAkX2UgLiAiJyxudWxsLCcnLCcnLCcnKVwiPiIgLiAkX2d0cSAuICI8L2E+IF08L3RoPiI7CiAgICAgICAgfQogICAgICAgICRfZGVqID0gIiI7CiAgICAgICAgaWYgKCRfdm9yID09ICJ3aW4iKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKEBSYW5nZSgiYyIsICJ6IikgYXMgJF9zengpIHsKICAgICAgICAgICAgICAgIGlmIChASXNfZElyKCRfc3p4IC4gIjpcXCIpKSB7CiAgICAgICAgICAgICAgICAgICAgJF9kZWogLj0gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImcoJ2ZtJywnIiAuIFNUcl9yb1QxMygkX3N6eCkgLiAiOi8nKVwiPlsgIiAuICRfc3p4IC4gIiBdPC9hPiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRfdXkgPSAkX1NFUlZFUlsiU0VSVkVSX0FERFIiXTsKICAgICAgICBpZiAoZW1wdHkoJF91eSkpIHsKICAgICAgICAgICAgJF91eSA9IEdlVGhvU1RieU5hbWUoJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0pOwogICAgICAgIH0KICAgICAgICBlY2hvICI8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+PGZvbnQgY29sb3I9cmVkPkF0dGVudGlvbjo8L2ZvbnQ+PGJyPlVuYW1lOjxicj5QaHA6PGJyPkhkZDo8YnI+Q3dkOiIgLiAoJF92b3IgPT0gIndpbiIgPyAiPGJyPkRyaXZlczoiIDogIiIpIC4gIjwvc3Bhbj48L3RkPiIgLiAiPHRkPjxhIGhyZWY9JyMnPC9hPjx1PjxiPllhbnogV2Vic2hlbGwhPC9iPiAtIFBSSVY4IFdFQiBTSEVMTCBPUkIgWUFOWiBCWVBBU1MhPC91PjwvYT48YnI+PG5vYnI+IiAuICgkX3YgPyBzdWJzVHIoJF92LCAtMDEgKyAwMSwgKGludCkgcm91bmQoNDAgKyA0MCArIDQwKSkgOiAiTi9BIikgLiAiPC9ub2JyPjxicj4iIC4gQHBIUHZlcnNpT04oKSAuICIgPHNwYW4+U2FmZSBtb2RlOjwvc3Bhbj4gIiAuICgkX3ZwYiA/ICI8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+IiA6ICI8Zm9udCBjb2xvcj1ncmVlbj48Yj5PRkY8L2I+PC9mb250PiIpIC4gIiA8c3Bhbj5EYXRldGltZTo8L3NwYW4+ICIgLiBkYVRFKCJZLW0tZCBIOmk6cyIpIC4gIjxicj4iIC4gKCRfZWpsID8gdklld1NJWmUoJF9lamwpIDogIiIpIC4gIiA8c3Bhbj5GcmVlOjwvc3Bhbj4gIiAuICgkX3BuID8gdklld1NpWmUoJF9wbikgOiAiIikgLiAiICgiIC4gKCRfcG4gJiYgJF9lamwgPyAoaW50KSAoJF9wbiAvICRfZWpsICogKDAxNTcgKyAwMTM2IC0gMDE1MSkpIDogIjAiKSAuICIlKTxicj48c3BhbiBpZD1cImxpbmtzXCIgY2xhc3M9XCJ3ZndcIj4iIC4gJF9ibCAuICIgIiAuIFdQZXJNU0NPTE9yKCRfemEpIC4gIiA8YSBocmVmPSMgb25jbGljaz1cImcoJ2ZtJywnIiAuIFNUcl9yb3QxMygkX3dkYSkgLiAiJywnJywnJywnJylcIj5bIHJvb3QgXTwvYT4gPGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmbScsJyIgLiBTdHJfck9UMTMoJF96cnQpIC4gIicsJycsJycsJycpXCI+WyBob21lIF08L2E+PC9zcGFuPjxzcGFuIGlkPVwiY3dkXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGNsYXNzPVwid2Z3XCI+PGlucHV0IHNpemU9IiAuIChTVHJsZW4oJF96YSkgKyAoaW50KSByb3VuZCgxMSArIDExKSkgLiAiIHR5cGU9dGV4dCB2YWx1ZT1cIiIgLiAkX3phIC4gIlwiPjwvc3Bhbj4gPGEgaHJlZj0jIG9uY2xpY2s9XCJzaG93KCk7XCI+PGZvbnQgY29sb3I9I2ZmZiBpZD1cImJhdFwiPlRleHQ8L2ZvbnQ+PC9hPjxicj4iIC4gJF9kZWogLiAiPC90ZD4iIC4gIjx0ZCB3aWR0aD0xIGFsaWduPXJpZ2h0Pjxub2JyPjxzZWxlY3Qgb25jaGFuZ2U9XCJnKG51bGwsbnVsbCwiIC4gKCFlbXB0eSgkX1BPU1RbInAiXSkgPyAiJyIgLiAkX1BPU1RbInAiXSAuICInIiA6ICJudWxsIikgLiAiLG51bGwsbnVsbCx0aGlzLnZhbHVlKVwiPjxvcHRncm91cCBsYWJlbD1cIlBhZ2UgY2hhcnNldFwiPiIgLiAkX24gLiAiPC9vcHRncm91cD48L3NlbGVjdD48YnI+PHNwYW4+U2VydmVyIElQOjwvc3Bhbj48YnI+IiAuICRfdXkgLiAiPGJyPjxzcGFuPkNsaWVudCBJUDo8L3NwYW4+PGJyPiIgLiAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXSAuICI8L25vYnI+PC90ZD48L3RyPjwvdGFibGU+IiAuICI8dGFibGUgc3R5bGU9XCJib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzO1wiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj4iIC4gJF9oIC4gIjwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPVwibWFyZ2luOjVcIj4iOwogICAgfQogICAgZnVuY3Rpb24gd2ZPb3RFUigpCiAgICB7CiAgICAgICAgJF96YSA9ICR0aGlzLT5femE7CiAgICAgICAgJF9saWEgPSBAaXNfV3JJdGFiTGUoJF96YSkgPyAiIDxmb250IGNvbG9yPSdncmVlbic+KFdyaXRlYWJsZSk8L2ZvbnQ+IiA6ICIgPGZvbnQgY29sb3I9cmVkPihOb3Qgd3JpdGFibGUpPC9mb250PiI7CiAgICAgICAgZWNobyAiPC9kaXY+PHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUgIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMzMzM7Jz48dHI+PHRkPjxmb3JtIG9uc3VibWl0PSdnKG51bGwscm90MTModGhpcy5jLnZhbHVlKSxcIlwiKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nIiAuIEh0TWxTcGVDaWFMY0hBclMoJF96YSkgLiAiJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD48dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdmdCcsbnVsbCxyb3QxMyh0aGlzLmYudmFsdWUpKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD48L3RyPjx0cj48dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdmbScsbnVsbCwnbWtkaXInLHJvdDEzKHRoaXMuZC52YWx1ZSkpO3JldHVybiBmYWxzZTtcIj48c3Bhbj5NYWtlIGRpcjo8L3NwYW4+IiAuICRfbGlhIC4gIjxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPjx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ2Z0JyxudWxsLHJvdDEzKHRoaXMuZi52YWx1ZSksJ21rZmlsZScpO3JldHVybiBmYWxzZTtcIj48c3Bhbj5NYWtlIGZpbGU6PC9zcGFuPiIgLiAkX2xpYSAuICI8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD48L3RyPjx0cj48dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdjZScsbnVsbCx1dG9hKHRoaXMuYy52YWx1ZSkpO3JldHVybiBmYWxzZTtcIj48L2E+PC9mb3JtPjxmb3JtIG1ldGhvZD1wb3N0ID48c3Bhbj5UZXJtaW5hbDo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWNvbW1hbmQgdmFsdWU9JycgYXV0b2NvbXBsZXRlPSdvZmYnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nIG5hbWU9J3N1YmNtZCc+PC9mb3JtPjwvdGQ+PHNwYW4+PC90ZD48dGQ+PGZvcm0gbWV0aG9kPSdwb3N0JyBFTkNUWVBFPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdmbSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIHNUcl9Sb1QxMygkX3phKSAuICInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAgdmFsdWU9J3VwbG9hZEZpbGUnPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoIHZhbHVlPSciIC4gKEBpc3NldCgkX1BPU1RbImNoIl0pID8gJF9QT1NUWyJjaCJdIDogIiIpIC4gIic+PHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPiIgLiAkX2xpYSAuICI8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT1maWxlIG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PGJyICA+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4iOwogICAgfQp9CmZ1bmN0aW9uIHZJZXdTSXplKCRfeHdtLCAkX3lqID0gbnVsbCkKewogICAgaWYgKGlTX0lOdCgkX3h3bSkpIHsKICAgICAgICAkX3h3bSA9IEBzcFJJTnRmKCIldSIsICRfeHdtKTsKICAgIH0KICAgIGlmICgkX3h3bSA+PSAoaW50KSByb3VuZCgzNTc5MTM5NDEuMzMzMzMgKyAzNTc5MTM5NDEuMzMzMzMgKyAzNTc5MTM5NDEuMzMzMzMpKSB7CiAgICAgICAgcmV0dXJuIEBzcFJJTnRmKCIlMS4yZiIsICRfeHdtIC8gKDAxMDAwMDAwMTI0MCArIC0wMTI0MCkpIC4gIiBHQiI7CiAgICB9IGVsc2VpZiAoJF94d20gPj0gMDM3NzcwNzMgLSAwNDAwMDU2MCArIDA0MDAxNDY1KSB7CiAgICAgICAgcmV0dXJuIEBTcHJpblRGKCIlMS4yZiIsICRfeHdtIC8gKGludCkgcm91bmQoMzQ5NTI1LjMzMzMzMzMzICsgMzQ5NTI1LjMzMzMzMzMzICsgMzQ5NTI1LjMzMzMzMzMzKSkgLiAiIE1CIjsKICAgIH0gZWxzZWlmICgkX3h3bSA+PSAoaW50KSByb3VuZCg1MTIgKyA1MTIpKSB7CiAgICAgICAgcmV0dXJuIEBzUFJpblRmKCIlMS4yZiIsICRfeHdtIC8gKGludCkgcm91bmQoMzQxLjMzMzMzMzMzMzMzICsgMzQxLjMzMzMzMzMzMzMzICsgMzQxLjMzMzMzMzMzMzMzKSkgLiAiIEtCIjsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICRfeHdtIC4gIiBCIjsKICAgIH0KfQpmdW5jdGlvbiBXUGVyTXMoJF9sKQp7CiAgICBpZiAoKCRfbCAmIDAxNDAzNzEgLSAwMTM3NzMzICsgMDEzNzM0MikgPT0gMDEzNzYxNSAtIC0wMTYzKSB7CiAgICAgICAgJF9vID0gInMiOwogICAgfSBlbHNlaWYgKCgkX2wgJiAoaW50KSByb3VuZCgyMDQ4MCArIDIwNDgwKSkgPT0gMDExNzc3NCAtIC0wNCkgewogICAgICAgICRfbyA9ICJsIjsKICAgIH0gZWxzZWlmICgoJF9sICYgKGludCkgcm91bmQoMTA5MjIuNjY2NjY2NjY3ICsgMTA5MjIuNjY2NjY2NjY3ICsgMTA5MjIuNjY2NjY2NjY3KSkgPT0gMDEwMDI3MCArIC0wMjcwKSB7CiAgICAgICAgJF9vID0gIi0iOwogICAgfSBlbHNlaWYgKCgkX2wgJiAoaW50KSByb3VuZCg4MTkyICsgODE5MiArIDgxOTIpKSA9PSAoaW50KSByb3VuZCgxMjI4OCArIDEyMjg4KSkgewogICAgICAgICRfbyA9ICJiIjsKICAgIH0gZWxzZWlmICgoJF9sICYgKGludCkgcm91bmQoODE5MiArIDgxOTIpKSA9PSAwMzc2NTUgLSAwNDAxMjEgLSAtMDQwMjQ0KSB7CiAgICAgICAgJF9vID0gImQiOwogICAgfSBlbHNlaWYgKCgkX2wgJiAoaW50KSByb3VuZCgyNzMwLjY2NjY2NjY2NjcgKyAyNzMwLjY2NjY2NjY2NjcgKyAyNzMwLjY2NjY2NjY2NjcpKSA9PSAwMTc1NzQgKyAwMjA0KSB7CiAgICAgICAgJF9vID0gImMiOwogICAgfSBlbHNlaWYgKCgkX2wgJiAoaW50KSByb3VuZCgxMzY1LjMzMzMzMzMzMzMgKyAxMzY1LjMzMzMzMzMzMzMgKyAxMzY1LjMzMzMzMzMzMzMpKSA9PSAwMTAxMTAgKyAtMDExMCkgewogICAgICAgICRfbyA9ICJwIjsKICAgIH0gZWxzZSB7CiAgICAgICAgJF9vID0gInUiOwogICAgfQogICAgJF9vIC49ICRfbCAmIDA3NTIgKyAwNDQgLSAwNDE2ID8gInIiIDogIi0iOwogICAgJF9vIC49ICRfbCAmIChpbnQpIHJvdW5kKDQyLjY2NjY2NjY2NjY2NyArIDQyLjY2NjY2NjY2NjY2NyArIDQyLjY2NjY2NjY2NjY2NykgPyAidyIgOiAiLSI7CiAgICAkX28gLj0gJF9sICYgLTAxMjIzIC0gLTAxMzIzID8gJF9sICYgKGludCkgcm91bmQoNjgyLjY2NjY2NjY2NjY3ICsgNjgyLjY2NjY2NjY2NjY3ICsgNjgyLjY2NjY2NjY2NjY3KSA/ICJzIiA6ICJ4IiA6ICgkX2wgJiAwNTAxNCArIDA0NzI1ICsgLTA1NzQxID8gIlMiIDogIi0iKTsKICAgICRfbyAuPSAkX2wgJiAtMDEwNDQgLSAtMDExMDQgPyAiciIgOiAiLSI7CiAgICAkX28gLj0gJF9sICYgMDIwICsgMDIyIC0gMDIyID8gInciIDogIi0iOwogICAgJF9vIC49ICRfbCAmIChpbnQpIHJvdW5kKDIuNjY2NjY2NjY2NjY2NyArIDIuNjY2NjY2NjY2NjY2NyArIDIuNjY2NjY2NjY2NjY2NykgPyAkX2wgJiAwMTU2NCArIDAxMzY1ICsgLTAxMTUxID8gInMiIDogIngiIDogKCRfbCAmIChpbnQpIHJvdW5kKDUxMiArIDUxMikgPyAiUyIgOiAiLSIpOwogICAgJF9vIC49ICRfbCAmIChpbnQpIHJvdW5kKDEuMzMzMzMzMzMzMzMzMyArIDEuMzMzMzMzMzMzMzMzMyArIDEuMzMzMzMzMzMzMzMzMykgPyAiciIgOiAiLSI7CiAgICAkX28gLj0gJF9sICYgKGludCkgcm91bmQoMC42NjY2NjY2NjY2NjY2NyArIDAuNjY2NjY2NjY2NjY2NjcgKyAwLjY2NjY2NjY2NjY2NjY3KSA/ICJ3IiA6ICItIjsKICAgICRfbyAuPSAkX2wgJiAwMTA2IC0gMDEwNSA/ICRfbCAmIChpbnQpIHJvdW5kKDE3MC42NjY2NjY2NjY2NyArIDE3MC42NjY2NjY2NjY2NyArIDE3MC42NjY2NjY2NjY2NykgPyAidCIgOiAieCIgOiAoJF9sICYgMDc2NSArIDA0NzAgLSAwNDU1ID8gIlQiIDogIi0iKTsKICAgIHJldHVybiAkX287Cn0KZnVuY3Rpb24gd3BFUm1zQ09sb3IoJF9yYikKewogICAgaWYgKCFAaXNfckVBZGFCTEUoJF9yYikpIHsKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPSNGRjAwMDA+IiAuIHdQRXJtcyhmSUxFcEVSTXMoJF9yYikpIC4gIjwvZm9udD4iOwogICAgfSBlbHNlaWYgKCFAaVNfV1JJdGFiTEUoJF9yYikpIHsKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPXdoaXRlPiIgLiB3UEVSbXMoRklsRXBlck1TKCRfcmIpKSAuICI8L2ZvbnQ+IjsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICI8Zm9udCBjb2xvcj0jMjVmZjAwPiIgLiB3cGVSbVMoRmlMZXBFUm1TKCRfcmIpKSAuICI8L2ZvbnQ+IjsKICAgIH0KfQpmdW5jdGlvbiB3U2NhbkRJUigkX3BhLCAkX3UgPSAidXZ4ZiIpCnsKICAgIGlmIChmdW5DVGlvbl9leElTVHMoInNjYW5kaXIiKSkgewogICAgICAgIHJldHVybiBAU2NBbkRJcigkX3BhKTsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCRfaGNmID0gQG9QRU5ESXIoJF9wYSkpIHsKICAgICAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJF9ubSA9IEByZUFkRElSKCRfaGNmKSkpIHsKICAgICAgICAgICAgICAgICRfdmdsW10gPSAkX25tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEBDbE9zZURJcigkX2hjZik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkX3ZnbDsKICAgIH0KfQokX3RjbiA9IG5ldyBfcHBzKCk7CiRfdGNuLT5BRlRFcmxPR2luKCk7CiRfdGNuLT5TVGFSdHVwKCk7CmlmIChAaXNzZXQoJF9QT1NUWyJhIl0pKSB7CiAgICBzd2l0Y2ggKCRfUE9TVFsiYSJdKSB7CiAgICAgICAgY2FzZSAiZm0iOgogICAgICAgICAgICAkX3Rjbi0+V2hlQURlcigpOwogICAgICAgICAgICAkX3Rjbi0+YWNUZm0oKTsKICAgICAgICAgICAgJF90Y24tPndmT290ZXIoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZnQiOgogICAgICAgICAgICBpZiAoQGlzc2V0KCRfUE9TVFsieCJdKSAmJiAkX1BPU1RbIngiXSA9PSAiZG93bmxvYWQiKSB7CiAgICAgICAgICAgICAgICAkX3Rjbi0+YUN0RlQoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRfdGNuLT53SGVBRGVSKCk7CiAgICAgICAgICAgICAgICAkX3Rjbi0+YUNURlQoKTsKICAgICAgICAgICAgICAgICRfdGNuLT53Zm9PdGVSKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAic3IiOgogICAgICAgICAgICAkX3Rjbi0+V2hFQWRFcigpOwogICAgICAgICAgICAkX3Rjbi0+YUN0U3IoKTsKICAgICAgICAgICAgJF90Y24tPndmT09UZXIoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiTG9nb3V0IjoKICAgICAgICAgICAgJF90Y24tPmFjdExvR29VVCgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAkX3Rjbi0+V0hlYURlcigpOwogICAgICAgICAgICAkX3Rjbi0+QWN0Zk0oKTsKICAgICAgICAgICAgJF90Y24tPldGT090RXIoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn0gZWxzZWlmICghQGlzc2V0KCRfUE9TVFsiYSJdKSkgewogICAgJF90Y24tPldIZUFkRVIoKTsKICAgICRfdGNuLT5BY1RmbSgpOwogICAgJF90Y24tPldmT09URVIoKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3N1YmNtZCddKSkgewogICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9J3RleHQtd2hpdGUnPiI7CiAgICAgICAgJGlucHV0ID0gJF9QT1NUWydjb21tYW5kJ107CiAgICAgICAgJG91dHB1dCA9IHNoZWxsX2V4ZWMoJGlucHV0KTsKICAgICAgICBlY2hvICI8YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPiI7CiAgICAgICAgZWNobyAiPGNlbnRlcj5XU08gQllQQVNTIFlBTlohPC9jZW50ZXI+IjsKICAgICAgICBlY2hvICI8YnI+IjsKICAgICAgICBlY2hvICckV1NPWWFuWjogJzsKICAgICAgICBlY2hvICRvdXRwdXQ7CiAgICAgICAgZWNobyAiPC9wcmU+IjsKICAgICAgICBleGl0OwogICAgfQp9")); ?>x