Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DQokc2hfaWQgPSAiVTBGT1NsVk9SMEZPSUVwSlYwRWdWRVZCVFE9PSI7DQokc2hfdmVyID0gIiI7DQokc2hfbmFtZSA9IGJhc2U2NF9kZWNvZGUoJHNoX2lkKS4kc2hfdmVyOw0KJHNoX21haW51cmwgPSAiIjsNCiRodG1sX3N0YXJ0ID0gJzxodG1sPjxoZWFkPg0KPC9oZWFkPg0KCTxCT0RZID4NCjx0aXRsZT4nLmdldGVudigiSFRUUF9IT1NUIikuJyAtICcuJHNoX25hbWUuJzwvdGl0bGU+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KPCEtLQ0KYm9keSx0YWJsZSB7IGZvbnQtZmFtaWx5OnZlcmRhbmE7Zm9udC1zaXplOjExcHg7Y29sb3I6d2hpdGU7Ym9yZGVyOjVweCBzb2xpZCAjRkZFOTIwO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDsgfQ0KdGFibGUgeyB3aWR0aDoxMDAlOyB9DQp0YWJsZSx0ZCB7IGJvcmRlcjoxcHggc29saWQgIzAwMDAwMDttYXJnaW4tdG9wOjI7bWFyZ2luLWJvdHRvbToyO3BhZGRpbmc6NXB4OyB9DQphIHsgY29sb3I6bGlnaHRibHVlO3RleHQtZGVjb3JhdGlvbjpub25lOyB9DQphOmFjdGl2ZSB7IGNvbG9yOiMwMEZGMDA7IH0NCmE6bGluayB7IGNvbG9yOiMwMGZmMDA7IH0NCmE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyB9DQphOnZpc2l0ZWQgeyBjb2xvcjojMDBmZjAwOyB9DQppbnB1dCxzZWxlY3Qsb3B0aW9uIHsgZm9udDo4cHQgdGFob21hO2NvbG9yOiNGRkZGRkY7bWFyZ2luOjI7Ym9yZGVyOjFweCBzb2xpZCAjNjY2NjY2OyB9DQp0ZXh0YXJlYSB7IGNvbG9yOiNkZWRiZGU7Zm9udDpmaXhlZHN5cyBib2xkO2JvcmRlcjoxcHggc29saWQgIzY2NjY2NjttYXJnaW46MjsgfQ0KLmZsZWZ0IHsgZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmxlZnQ7IH0NCi5mcmlnaHQgeyBmbG9hdDpyaWdodDt0ZXh0LWFsaWduOnJpZ2h0OyB9DQojcGFnZWJhciB7IGZvbnQ6MTBwdCB0YWhvbWE7cGFkZGluZzo1cHg7IGJvcmRlcjozcHggc29saWQgIzFFMUUxRTsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyB9DQojcGFnZWJhciB0ZCB7IHZlcnRpY2FsLWFsaWduOnRvcDtiYWNrZ3JvdW5kLWNvbG9yOiMjMzMzMzMzOyB9DQojcGFnZWJhciBwIHsgZm9udDo4cHQgdGFob21hO30NCiNwYWdlYmFyIGEgeyBmb250LXdlaWdodDpib2xkO2NvbG9yOiNmZmZmMDA7IH0NCiNwYWdlYmFyIGE6dmlzaXRlZCB7IGNvbG9yOiMwMENFMDA7IH0NCiNtYWlubWVudSB7IHRleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I0NDMDAwMDsgfQ0KI21haW5tZW51IGEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7cGFkZGluZzogMHB4IDVweCAwcHggNXB4O2JhY2tncm91bmQtY29sb3I6I0NDRkYwMDsgfQ0KI21haW5tZW51IGE6aG92ZXJ7IGJhY2tncm91bmQ6Z3JlZW47Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMztib3JkZXItdG9wOjFweCBzb2xpZCAjMzMzMzMzO30NCiNtYWluaW5mbywuYmFyaGVhZGVyLC5iYXJoZWFkZXIyIHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0NCiNtYWluaW5mbyB0ZCB7IHBhZGRpbmc6M3B4OyB9DQouYmFyaGVhZGVyIHsgZm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjVweDsgfQ0KLmJhcmhlYWRlcjIgeyBwYWRkaW5nOjVweDtib3JkZXI6MnB4IHNvbGlkICMxRjFGMUY7IH0NCi5jb250ZW50cywuZXhwbG9yZXIgeyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7fQ0KLmNvbnRlbnRzIHRkIHsgdmVydGljYWwtYWxpZ246dG9wOyB9DQoubWFpbnBhbmVsIHsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6IzAwOTkwMDsgfQ0KLmJhcmhlYWRlciwubWFpbnBhbmVsIHRhYmxlLHRkIHsgYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzOyB9DQoubWFpbnBhbmVsIGlucHV0LHNlbGVjdCxvcHRpb24geyBib3JkZXI6MXB4IHNvbGlkICMzMzMzMzM7bWFyZ2luOjA7IH0NCmlucHV0W3R5cGU9InN1Ym1pdCJdIHsgYm9yZGVyOjFweCBzb2xpZCAjMDAwMDAwOyB9DQppbnB1dFt0eXBlPSJ0ZXh0Il0geyBwYWRkaW5nOjNweDt9DQouc2hlbGwgeyBiYWNrZ3JvdW5kLWNvbG9yOiNDMEMwQzA7Y29sb3I6IzAwMDA4MDtwYWRkaW5nOjVweDsgfQ0KLmZ4ZXJybXNnIHsgY29sb3I6cmVkOyBmb250LXdlaWdodDpib2xkOyB9DQojcGFnZWJhciwjcGFnZWJhciBwLGgxLGgyLGgzLGg0LGZvcm0geyBtYXJnaW46MDsgfQ0KI3BhZ2ViYXIsLm1haW5wYW5lbCxpbnB1dFt0eXBlPSJzdWJtaXQiXSB7IGJhY2tncm91bmQtY29sb3I6IzRBNEE0QTsgfQ0KLmJhcmhlYWRlcjIsaW5wdXQsc2VsZWN0LG9wdGlvbixpbnB1dFt0eXBlPSJzdWJtaXQiXTpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsgfQ0KdGV4dGFyZWEsLm1haW5wYW5lbCBpbnB1dCxzZWxlY3Qsb3B0aW9uIHsgYmFja2dyb3VuZC1jb2xvcjojMDAwMDAwOyB9DQovLyAtLT4NCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCic7DQokaG9zdF9hbGxvdyA9IGFycmF5KCIqIik7IA0KJGFjY2Vzc2RlbmllZG1lc3MgPSAiPGJvZHkgYmdjb2xvcj1ibGFjaz48YSBocmVmPVwiJHNoX21haW51cmxcIj48Zm9udCBjb2xvcj1saW1lPiIuJHNoX25hbWUuIjwvZm9udD48L2E+OiA8Zm9udCBjb2xvcj1yZWQ+YWNjZXNzIGRlbmllZDwvZm9udD48L2JvZHk+IjsNCiRnemlwZW5jb2RlID0gVFJVRTsNCiRmaWxlc3RlYWx0aCA9IFRSVUU7IA0KJGN1cmRpciA9ICIuLyI7DQokdG1wZGlyID0gIiI7IA0KJHRtcGRpcl9sb2cgPSAiLi8iOw0KJGxvZ19lbWFpbCA9ICIiOyANCiRzb3J0X2RlZmF1bHQgPSAiMGEiOyANCiRzb3J0X3NhdmUgPSBUUlVFOyANCiRzZXNzX2Nvb2tpZSA9ICJib2dlbHZhcnMiOyANCiR1c2Vmc2J1ZmYgPSBUUlVFOyANCiRjb3B5X3Vuc2V0ID0gRkFMU0U7IA0KJGhleGR1bXBfbGluZXMgPSA4Ow0KJGhleGR1bXBfcm93cyA9IDI0Ow0KJHdpbiA9IHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAid2luIjsNCiRkaXNhYmxlZnVuYyA9IEBpbmlfZ2V0KCJkaXNhYmxlX2Z1bmN0aW9ucyIpOw0KaWYgKCFlbXB0eSgkZGlzYWJsZWZ1bmMpKSB7DQogICRkaXNhYmxlZnVuYyA9IHN0cl9yZXBsYWNlKCIgIiwiIiwkZGlzYWJsZWZ1bmMpOw0KICAkZGlzYWJsZWZ1bmMgPSBleHBsb2RlKCIsIiwkZGlzYWJsZWZ1bmMpOw0KfQ0KZnVuY3Rpb24gZ2V0X3BocGluaSgpIHsNCiAgZnVuY3Rpb24gVV93b3Jkd3JhcCgkc3RyKSB7DQogICAgJHN0ciA9IEB3b3Jkd3JhcChAaHRtbHNwZWNpYWxjaGFycygkc3RyKSwgMTAwLCAnPHdiciAvPicsIHRydWUpOw0KICAgIHJldHVybiBAcHJlZ19yZXBsYWNlKCchKCZbXjtdKik8d2JyIC8+KFteO10qOykhJywgJyQxJDI8d2JyIC8+JywgJHN0cik7DQogIH0NCiAgZnVuY3Rpb24gVV92YWx1ZSgkdmFsdWUpIHsNCiAgICBpZiAoJHZhbHVlID09ICcnKSByZXR1cm4gJzxpPm5vIHZhbHVlPC9pPic7DQogICAgaWYgKEBpc19ib29sKCR2YWx1ZSkpIHJldHVybiAkdmFsdWUgPyAnVFJVRScgOiAnRkFMU0UnOw0KICAgIGlmICgkdmFsdWUgPT09IG51bGwpIHJldHVybiAnTlVMTCc7DQogICAgaWYgKEBpc19vYmplY3QoJHZhbHVlKSkgJHZhbHVlID0gKGFycmF5KSAkdmFsdWU7DQogICAgaWYgKEBpc19hcnJheSgkdmFsdWUpKSB7DQogICAgICBAb2Jfc3RhcnQoKTsNCiAgICAgIHByaW50X3IoJHZhbHVlKTsNCiAgICAgICR2YWx1ZSA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICAgIEBvYl9lbmRfY2xlYW4oKTsNCiAgICB9DQogICAgcmV0dXJuIFVfd29yZHdyYXAoKHN0cmluZykgJHZhbHVlKTsNCiAgfQ0KICBpZiAoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldF9hbGwnKSkgew0KICAgICRyID0gIiI7DQogICAgZWNobyAiPHRhYmxlPjx0ciBjbGFzcz1iYXJoZWFkZXI+PHRkPkRpcmVjdGl2ZTwvdGQ+PHRkPkxvY2FsIFZhbHVlPC90ZD48dGQ+R2xvYmFsIFZhbHVlPC90ZD48L3RyPiI7DQogICAgZm9yZWFjaCAoQGluaV9nZXRfYWxsKCkgYXMgJGtleT0+JHZhbHVlKSB7DQogICAgICAkciAuPSAiPHRyPjx0ZD4iLiRrZXkuIjwvdGQ+PHRkPjxkaXYgYWxpZ249Y2VudGVyPiIuVV92YWx1ZSgkdmFsdWVbJ2xvY2FsX3ZhbHVlJ10pLiI8L2Rpdj48L3RkPjx0ZD48ZGl2IGFsaWduPWNlbnRlcj4iLlVfdmFsdWUoJHZhbHVlWydnbG9iYWxfdmFsdWUnXSkuIjwvZGl2PjwvdGQ+PC90cj4iOw0KICAgIH0NCiAgICBlY2hvICRyOw0KICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgfQ0KfQ0KZnVuY3Rpb24gZGlzcF9kcml2ZXMoJGN1cmRpciwkc3VybCkgew0KICAkbGV0dGVycyA9ICIiOw0KICAkdiA9IGV4cGxvZGUoIlxcIiwkY3VyZGlyKTsNCiAgJHYgPSAkdlswXTsNCiAgZm9yZWFjaCAocmFuZ2UoIkEiLCJaIikgYXMgJGxldHRlcikgew0KICAgICRib29sID0gJGlzZGlza2V0dGUgPSAkbGV0dGVyID09ICJBIjsNCiAgICBpZiAoISRib29sKSB7JGJvb2wgPSBpc19kaXIoJGxldHRlci4iOlxcIik7fQ0KICAgIGlmICgkYm9vbCkgew0KICAgICAgJGxldHRlcnMgLj0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii51cmxlbmNvZGUoJGxldHRlci4iOlxcIikuIlwiIi4NCiAgICAgICgkaXNkaXNrZXR0ZT8iIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnTWFrZSBzdXJlIHRoYXQgdGhlIGRpc2tldHRlIGlzIGluc2VydGVkIHByb3Blcmx5LCBvdGhlcndpc2UgYW4gZXJyb3IgbWF5IG9jY3VyLicpXCIiOiIiKS4iPiBbIjsNCiAgICAgIGlmICgkbGV0dGVyLiI6IiAhPSAkdikgeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fQ0KICAgICAgZWxzZSB7JGxldHRlcnMgLj0gIjxmb250IGNvbG9yPXllbGxvdz4iLiRsZXR0ZXIuIjwvZm9udD4iO30NCiAgICAgICRsZXR0ZXJzIC49ICJdPC9hPiAiOw0KICAgIH0NCiAgfQ0KICBpZiAoIWVtcHR5KCRsZXR0ZXJzKSkge1JldHVybiAkbGV0dGVyczt9DQogIGVsc2Uge1JldHVybiAiTm9uZSI7fQ0KfQ0KaWYgKGlzX2NhbGxhYmxlKCJkaXNrX2ZyZWVfc3BhY2UiKSkgew0KICBmdW5jdGlvbiBkaXNwX2ZyZWVzcGFjZSgkY3VyZHJ2KSB7DQogICAgJGZyZWUgPSBkaXNrX2ZyZWVfc3BhY2UoJGN1cmRydik7DQogICAgJHRvdGFsID0gZGlza190b3RhbF9zcGFjZSgkY3VyZHJ2KTsNCiAgICBpZiAoJGZyZWUgPT09IEZBTFNFKSB7JGZyZWUgPSAwO30NCiAgICBpZiAoJHRvdGFsID09PSBGQUxTRSkgeyR0b3RhbCA9IDA7fQ0KICAgIGlmICgkZnJlZSA8IDApIHskZnJlZSA9IDA7fQ0KICAgIGlmICgkdG90YWwgPCAwKSB7JHRvdGFsID0gMDt9DQogICAgJHVzZWQgPSAkdG90YWwtJGZyZWU7DQogICAgJGZyZWVfcGVyY2VudCA9IHJvdW5kKDEwMC8oJHRvdGFsLyRmcmVlKSwyKS4iJSI7DQogICAgJGZyZWUgPSB2aWV3X3NpemUoJGZyZWUpOw0KICAgICR0b3RhbCA9IHZpZXdfc2l6ZSgkdG90YWwpOw0KICAgIHJldHVybiAiJGZyZWUgb2YgJHRvdGFsICgkZnJlZV9wZXJjZW50KSI7DQogIH0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNoZWxsZXhlYyIpKSB7DQogIGlmKGlzX2NhbGxhYmxlKCJwb3BlbiIpKSB7DQogICAgZnVuY3Rpb24gbXlzaGVsbGV4ZWMoJGNtZCkgew0KICAgICAgaWYgKCEoJHA9cG9wZW4oIigkY21kKTI+JjEiLCJyIikpKSB7IHJldHVybiAicG9wZW4gRGlzYWJsZWQhIjsgfQ0KICAgICAgd2hpbGUgKCFmZW9mKCRwKSkgew0KICAgICAgICAkbGluZT1mZ2V0cygkcCwxMDI0KTsNCiAgICAgICAgJG91dCAuPSAkbGluZTsNCiAgICAgIH0NCiAgICAgIHBjbG9zZSgkcCk7DQogICAgICByZXR1cm4gJG91dDsNCiAgICB9DQogIH0gZWxzZSB7DQogICAgZnVuY3Rpb24gbXlzaGVsbGV4ZWMoJGNtZCkgew0KICAgICAgZ2xvYmFsICRkaXNhYmxlZnVuYzsNCiAgICAgICRyZXN1bHQgPSAiIjsNCiAgICAgIGlmICghZW1wdHkoJGNtZCkpIHsNCiAgICAgICAgaWYgKGlzX2NhbGxhYmxlKCJleGVjIikgYW5kICFpbl9hcnJheSgiZXhlYyIsJGRpc2FibGVmdW5jKSkgew0KICAgICAgICAgIGV4ZWMoJGNtZCwkcmVzdWx0KTsNCiAgICAgICAgICAkcmVzdWx0ID0gam9pbigiXG4iLCRyZXN1bHQpOw0KICAgICAgICB9IGVsc2VpZiAoKCRyZXN1bHQgPSAkY21kKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgfSBlbHNlaWYgKGlzX2NhbGxhYmxlKCJzeXN0ZW0iKSBhbmQgIWluX2FycmF5KCJzeXN0ZW0iLCRkaXNhYmxlZnVuYykpIHsNCiAgICAgICAgICAkdiA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IHN5c3RlbSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IGVjaG8gJHY7DQogICAgICAgIH0gZWxzZWlmIChpc19jYWxsYWJsZSgicGFzc3RocnUiKSBhbmQgIWluX2FycmF5KCJwYXNzdGhydSIsJGRpc2FibGVmdW5jKSkgew0KICAgICAgICAgICR2ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgcGFzc3RocnUoJGNtZCk7ICRyZXN1bHQgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBlY2hvICR2Ow0KICAgICAgICB9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJGZwID0gcG9wZW4oJGNtZCwiciIpKSkgew0KICAgICAgICAgICRyZXN1bHQgPSAiIjsNCiAgICAgICAgICB3aGlsZSghZmVvZigkZnApKSB7ICRyZXN1bHQgLj0gZnJlYWQoJGZwLDEwMjQpOyB9DQogICAgICAgICAgcGNsb3NlKCRmcCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCiAgfQ0KfQ0KZnVuY3Rpb24gZXgoJGNmZSkgew0KICAkcmVzID0gJyc7DQogIGlmICghZW1wdHkoJGNmZSkpIHsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgew0KICAgICAgQGV4ZWMoJGNmZSwkcmVzKTsNCiAgICAgICRyZXMgPSBqb2luKCJcbiIsJHJlcyk7DQogICAgfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCiAgICAgICRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsNCiAgICB9IGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7DQogICAgICBAb2Jfc3RhcnQoKTsNCiAgICAgIEBzeXN0ZW0oJGNmZSk7DQogICAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgICAgQG9iX2VuZF9jbGVhbigpOw0KICAgIH0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgew0KICAgICAgQG9iX3N0YXJ0KCk7DQogICAgICBAcGFzc3RocnUoJGNmZSk7DQogICAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgICAgQG9iX2VuZF9jbGVhbigpOw0KICAgIH0gZWxzZWlmKEBpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkY2ZlLCJyIikpKSB7DQogICAgICAkcmVzID0gIiI7DQogICAgICB3aGlsZSghQGZlb2YoJGYpKSB7ICRyZXMgLj0gQGZyZWFkKCRmLDEwMjQpOyB9DQogICAgICBAcGNsb3NlKCRmKTsNCiAgICB9IGVsc2UgeyAkcmVzID0gIkV4KCkgRGlzYWJsZWQhIjsgfQ0KICB9DQogIHJldHVybiAkcmVzOw0KfQ0KZnVuY3Rpb24gd2hpY2goJHByKSB7DQogICRwYXRoID0gZXgoIndoaWNoICRwciIpOw0KICBpZighZW1wdHkoJHBhdGgpKSB7IHJldHVybiAkcGF0aDsgfSBlbHNlIHsgcmV0dXJuICRwcjsgfQ0KfQ0KDQokYmFja19jb25uZWN0X3BsID0gIkl5RXZkWE55TDJKcGJpOXdaWEpzQ25WelpTQlRiMk5yWlhRN0NpUmpiV1E5SUNKemJHVmxjQ0k3Q2lSemVYTjBaVzA5SUNkbFkyaHZJQ0pnZFc1aGJXVWdMV0ZnSWp0bFkyaHZJQ0pnYVdSZ0lqdGxZMmh2SUNKZ1kyRjBJQzlsZEdNdmFYTnpkV1ZnSWp0bFkyaHZJQ0pnWTJGMElDOXdjbTlqTDNONWN5OTJiUzl0YldGd1gyMXBibDloWkdSeVlDSTdTRWxUVkVaSlRFVTlMMlJsZGk5dWRXeHNJQzlpYVc0dmMyZ2dMV2tuT3dva01EMGtZMjFrT3dva2RHRnlaMlYwUFNSQlVrZFdXekJkT3dva2NHOXlkRDBrUVZKSFZsc3hYVHNLSkdsaFpHUnlQV2x1WlhSZllYUnZiaWdrZEdGeVoyVjBLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0NpUndZV1JrY2oxemIyTnJZV1JrY2w5cGJpZ2tjRzl5ZEN3Z0pHbGhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdDaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3Q25OdlkydGxkQ2hUVDBOTFJWUXNJRkJHWDBsT1JWUXNJRk5QUTB0ZlUxUlNSVUZOTENBa2NISnZkRzhwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc0tZMjl1Ym1WamRDaFRUME5MUlZRc0lDUndZV1JrY2lrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPd3B2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc0tiM0JsYmloVFZFUlBWVlFzSUNJK0psTlBRMHRGVkNJcE93cHZjR1Z1S0ZOVVJFVlNVaXdnSWo0bVUwOURTMFZVSWlrN0NuTjVjM1JsYlNna2MzbHpkR1Z0S1RzS1kyeHZjMlVvVTFSRVNVNHBPd3BqYkc5elpTaFRWRVJQVlZRcE93cGpiRzl6WlNoVFZFUkZVbElwT3ciOw0KJGJhY2tkb29yID0gImYwVk1SZ0VCQVFBQUFBQUFBQUFBQUFJQUF3QUJBQUFBb0lVRUNEUUFBQUQ0RWdBQUFBQUFBRFFBSUFBSEFDZ0FJZ0FmQUFZQUFBQTBBQUFBTklBRUNEU0FCQWpnQUFBQTRBQUFBQVVBQUFBRUFBQUFBd0FBQUJRQkFBQVVnUVFJRklFRUNCTUFBQUFUQUFBQUJBQUFBQUVBQUFBQkFBQUFBQUFBQUFDQUJBZ0FnQVFJckFrQUFLd0pBQUFGQUFBQUFCQUFBQUVBQUFDc0NRQUFySmtFQ0t5WkJBZzBBUUFBT0FFQUFBWUFBQUFBRUFBQUFnQUFBTUFKQUFEQW1RUUl3SmtFQ01nQUFBRElBQUFBQmdBQUFBUUFBQUFFQUFBQUtBRUFBQ2lCQkFnb2dRUUlJQUFBQUNBQUFBQUVBQUFBQkFBQUFGSGxkR1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZQUFBQUVBQUFBTDJ4cFlpOXNaQzFzYVc1MWVDNXpieTR5QUFBRUFBQUFFQUFBQUFFQUFBQkhUbFVBQUFBQUFBSUFBQUFDQUFBQUFBQUFBQkVBQUFBVEFBQUFBQUFBQUFBQUFBQVFBQUFBRVFBQUFBQUFBQUFBQUFBQUNRQUFBQWdBQUFBRkFBQUFBd0FBQUEwQUFBQUFBQUFBQUFBQUFBOEFBQUFLQUFBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVlBQUFBQkFBQUFBQUFBQUFjQUFBQUxBQUFBQUFBQUFBUUFBQUFNQUFBQURnQUFBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDNEFBQUFBQUFBQWRRRUFBQklBQUFDZ0FBQUFBQUFBQUhFQUFBQVNBQUFBTkFBQUFBQUFBQURNQUFBQUVnQUFBR29BQUFBQUFBQUFXZ0FBQUJJQUFBQk1BQUFBQUFBQUFIZ0FBQUFTQUFBQVl3QUFBQUFBQUFBNUFBQUFFZ0FBQUZnQUFBQUFBQUFBT1FBQUFCSUFBQUNPQUFBQUFBQUFBT1lBQUFBU0FBQUFPd0FBQUFBQUFBQTZBQUFBRWdBQUFGTUFBQUFBQUFBQU9RQUFBQklBQUFCMUFBQUFBQUFBQUxrQUFBQVNBQUFBZWdBQUFBQUFBQUFyQUFBQUVnQUFBRWNBQUFBQUFBQUFlQUFBQUJJQUFBQnZBQUFBQUFBQUFBNEFBQUFTQUFBQWZ3QUFBRWlKQkFnRUFBQUFFUUFPQUVBQUFBQUFBQUFBT1FBQUFCSUFBQUFCQUFBQUFBQUFBQUFBQUFBZ0FBQUFGUUFBQUFBQUFBQUFBQUFBSUFBQUFBQmZTblpmVW1WbmFYTjBaWEpEYkdGemMyVnpBRjlmWjIxdmJsOXpkR0Z5ZEY5ZkFHeHBZbU11YzI4dU5nQmxlR1ZqYkFCd1pYSnliM0lBWkhWd01nQnpiMk5yWlhRQWMyVnVaQUJoWTJObGNIUUFZbWx1WkFCelpYUnpiMk5yYjNCMEFHeHBjM1JsYmdCbWIzSnJBR2gwYjI1ekFHVjRhWFFBWVhSdmFRQmZTVTlmYzNSa2FXNWZkWE5sWkFCZlgyeHBZbU5mYzNSaGNuUmZiV0ZwYmdCamJHOXpaUUJIVEVsQ1ExOHlMakFBQUFBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFRQUNBQUFBQUFBQUFBRUFBUUFrQUFBQUVBQUFBQUFBQUFBUWFXa05BQUFDQUtZQUFBQUFBQUFBaUpvRUNBWVNBQUNZbWdRSUJ3RUFBSnlhQkFnSEFnQUFvSm9FQ0FjREFBQ2ttZ1FJQndRQUFLaWFCQWdIQlFBQXJKb0VDQWNHQUFDd21nUUlCd2NBQUxTYUJBZ0hDQUFBdUpvRUNBY0pBQUM4bWdRSUJ3b0FBTUNhQkFnSEN3QUF4Sm9FQ0FjTUFBREltZ1FJQncwQUFNeWFCQWdIRGdBQTBKb0VDQWNRQUFCVmllV0Q3QWpvTVFFQUFPaURBUUFBNkZzRUFBREp3d0QvTlpDYUJBai9KWlNhQkFnQUFBQUEveVdZbWdRSWFBQUFBQURwNFAvLy8vOGxuSm9FQ0dnSUFBQUE2ZEQvLy8vL0phQ2FCQWhvRUFBQUFPbkEvLy8vL3lXa21nUUlhQmdBQUFEcHNQLy8vLzhscUpvRUNHZ2dBQUFBNmFELy8vLy9KYXlhQkFob0tBQUFBT21RLy8vLy95V3dtZ1FJYURBQUFBRHBnUC8vLy84bHRKb0VDR2c0QUFBQTZYRC8vLy8vSmJpYUJBaG9RQUFBQU9sZy8vLy8veVc4bWdRSWFFZ0FBQURwVVAvLy8vOGx3Sm9FQ0doUUFBQUE2VUQvLy8vL0pjU2FCQWhvV0FBQUFPa3cvLy8vL3lYSW1nUUlhR0FBQUFEcElQLy8vLzhsekpvRUNHaG9BQUFBNlJELy8vLy9KZENhQkFob2NBQUFBT2tBLy8vL01lMWVpZUdENVBCUVZGSm9yWWdFQ0doY2lBUUlVVlpvUUlZRUNPaGYvLy8vOUpDUVZZbmxVK2diQUFBQWdjTy9GQUFBZyt3RWk0UDgvLy8vaGNCMEF2L1FnOFFFVzEzRGl4d2t3MVdKNVlQc0NJQTk0Sm9FQ0FCMERPc2NnOEFFbzl5YUJBai8wcUhjbWdRSWl4Q0YwblhyeGdYZ21nUUlBY25EVllubGcrd0lvYnlaQkFpRndIUVN1QUFBQUFDRndIUUp4d1FrdkprRUNQL1F5Y09Ra0ZXSjVWZUQ3R1NENVBDNEFBQUFBSVBBRDRQQUQ4SG9CTUhnQkNuRXgwWGtBUUFBQU1kRitFeUpCQWpIUkNRSUFBQUFBTWRFSkFRQkFBQUF4d1FrQWdBQUFPZ0ovLy8vaVVYd2czM3dBSGtZeHdRa2pJa0VDT2cwL3YvL3h3UWtBUUFBQU9pby92Ly9ac2RGMUFJQXgwWFlBQUFBQUl0RkRJUEFCSXNBaVFRazZKdisvLzhQdDhDSkJDVG9zUDcvLzJhSlJkYkhSQ1FRQkFBQUFJMUY1SWxFSkF6SFJDUUlBZ0FBQU1kRUpBUUJBQUFBaTBYd2lRUWs2QkwrLy8rTlJkVEhSQ1FJRUFBQUFJbEVKQVNMUmZDSkJDVG9LUDcvLzRYQWVSakhCQ1NUaVFRSTZLajkvLy9IQkNRQkFBQUE2QnorLy8vSFJDUUVDQUFBQUl0RjhJa0VKT2k1L2YvL2hjQjVHTWNFSkppSkJBam9lZjMvLzhjRUpBRUFBQURvN2YzLy84ZEY2QkFBQUFDTlJlaU5WY1NKUkNRSWlWUWtCSXRGOElrRUpPaHQvZi8vaVVYMGczMzBBSGtNeHdRa2pJa0VDT2c0L2YvLzZFUDkvLytGd0ErRXB3QUFBSXRGK0xuLy8vLy9pVVc0dUFBQUFBRDhpMzI0OHE2SnlQZlFnK2dCeDBRa0RBQUFBQUNKUkNRSWkwWDRpVVFrQkl0RjlJa0VKT2lRL2YvL3gwUWtCQUFBQUFDTFJmU0pCQ1RvUGYzLy84ZEVKQVFCQUFBQWkwWDBpUVFrNkNyOS8vL0hSQ1FFQWdBQUFJdEY5SWtFSk9nWC9mLy94MFFrQ0FBQUFBREhSQ1FFbjRrRUNNY0VKSitKQkFqb2Uvei8vNHRGOElrRUpPaUEvUC8veHdRa0FBQUFBT2dFL2YvL2kwWDBpUVFrNkduOC8vL3BEdi8vLzFXSjVWZFdNZlpUNkgvOS8vK0J3eU1TQUFDRDdBem9FZnovLzQyRElQLy8vNDJUSVAvLy80bEY4Q25Rd2ZnQ09jWnpGb25YL3hTeWkwWHdnOFlCS2ZpSitzSDRBam5HY3V5RHhBeGJYbDlkdzFXSjVZUHNHSWxkOU9ndC9mLy9nY1BSRVFBQWlYWDRpWDM4amJNZy8vLy9qYnNnLy8vL0tmN0IvZ0xyQS84VXQ0UHVBWVArLzNYMTZEb0FBQUNMWGZTTGRmaUxmZnlKN0YzRGtGV0o1Vk9EN0FTaHJKa0VDSVA0LzNRU3U2eVpCQWovMEl0RC9JUHJCSVA0LzNYemc4UUVXMTNEa0pDUVZZbmxVK2k3L1AvL2djTmZFUUFBZyt3RTZMSDgvLytEeEFSYlhjTUFBQUFEQUFBQUFRQUNBRG82SUhjMFkyc3hibWN0YzJobGJHd2dLRkJ5YVhaaGRHVWdRblZwYkdRZ2RqQXVNeWtnWW1sdVpDQnphR1ZzYkNCaVlXTnJaRzl2Y2lBNk9pQUtDZ0J6YjJOclpYUUFZbWx1WkFCc2FYTjBaVzRBTDJKcGJpOXphQUFBQUFBQUFQLy8vLzhBQUFBQS8vLy8vd0FBQUFBQUFBQUFBUUFBQUNRQUFBQU1BQUFBaUlRRUNBMEFBQUFraVFRSUJBQUFBRWlCQkFnRkFBQUFFSU1FQ0FZQUFBRGdnUVFJQ2dBQUFMQUFBQUFMQUFBQUVBQUFBQlVBQUFBQUFBQUFBd0FBQUl5YUJBZ0NBQUFBZUFBQUFCUUFBQUFSQUFBQUZ3QUFBQkNFQkFnUkFBQUFDSVFFQ0JJQUFBQUlBQUFBRXdBQUFBZ0FBQUQrLy85djZJTUVDUC8vLzI4QkFBQUE4UC8vYjhDREJBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdKa0VDQUFBQUFBQUFBQUF0b1FFQ01hRUJBaldoQVFJNW9RRUNQYUVCQWdHaFFRSUZvVUVDQ2FGQkFnMmhRUUlSb1VFQ0ZhRkJBaG1oUVFJZG9VRUNJYUZCQWlXaFFRSUFBQUFBQUFBQUFDNG1RUUlBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUVkRFF6b2dLRWRPVlNrZ05DNHdMak1nS0ZWaWRXNTBkU0EwTGpBdU15MHhkV0oxYm5SMU5Ta0FBRWREUXpvZ0tFZE9WU2tnTkM0d0xqTWdLRlZpZFc1MGRTQTBMakF1TXkweGRXSjFiblIxTlNrQUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUVkRFF6b2dLRWRPVlNrZ05DNHdMak1nS0ZWaWRXNTBkU0EwTGpBdU15MHhkV0oxYm5SMU5Ta0FBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFBQWNBQUFBQWdBQUFBQUFCQUFBQUFBQW9JVUVDQ0lBQUFBQUFBQUFBQUFBQURRQUFBQUNBQXNCQUFBRUFBQUFBQURvaFFRSUJBQUFBQ1NKQkFnU0FBQUFpSVFFQ0FzQUFBREVoUVFJSkFBQUFBQUFBQUFBQUFBQUxBQUFBQUlBbXdFQUFBUUFBQUFBQU9pRkJBZ0VBQUFBTzRrRUNBWUFBQUNkaEFRSUFnQUFBQUFBQUFBQUFBQUFJUUFBQUFJQWVnQUFBSkVBQUFCNUFBQUFYMGxQWDNOMFpHbHVYM1Z6WldRQUFBQUFBSFlBQUFBQ0FBQUFBQUFFQVFBQUFBQ2doUVFJd29VRUNDNHVMM041YzJSbGNITXZhVE00Tmk5bGJHWXZjM1JoY25RdVV3QXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZaMnhwWW1NdE1pNHpMall2WTNOMUFFZE9WU0JCVXlBeUxqRTJMamt4QUFHQWpRQUFBQUlBRkFBQUFBUUJXd0FBQU1TRkJBakVoUVFJWWdBQUFBRUFBQUFBRVFBQUFBS1FBQUFBQkFjQ1ZBQUFBQUVJQXAwQUFBQUNCd0tMQUFBQUJBY0NWZ0FBQUFFR0FnY0FBQUFDQlFOcGJuUUFCQVVDUmdBQUFBZ0ZBb1lBQUFBSUJ3SkxBQUFBQkFVQ2tBQUFBQVFIQWwwQUFBQUJCZ1N3QUFBQUFSbUxBQUFBQVFVRFNJa0VDQVZQQUFBQUFJd0FBQUFDQUZZQUFBQUVBWUlBQUFBdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUzlqY25ScExsTUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQkhUbFVnUVZNZ01pNHhOaTQ1TVFBQmdJd0FBQUFDQUdZQUFBQUVBUzhCQUFBdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUzlqY25SdUxsTUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQkhUbFVnUVZNZ01pNHhOaTQ1TVFBQmdBRVJBQkFHRVFFU0FRTUlHd2dsQ0JNRkFBQUFBUkVCRUFZU0FSRUJKUTRUQ3dNT0d3NEFBQUlrQUFNT0N3cytDd0FBQXlRQUF3Z0xDejRMQUFBRU5BQUREam9MT3d0SkV6OE1BZ29BQUFVbUFFa1RBQUFBQVJFQUVBWURDQnNJSlFnVEJRQUFBQUVSQUJBR0F3Z2JDQ1VJRXdVQUFBQlhBQUFBQWdBeUFBQUFBUUg3RGcwQUFRRUJBUUFBQUFFQUFBRXVMaTl6ZVhOa1pYQnpMMmt6T0RZdlpXeG1BQUJ6ZEdGeWRDNVRBQUVBQUFBQUJRS2doUVFJQThBQUFUTWhORDBsSWdNWUlGbGFJU0pjV3dJQkFBRUJJd0FBQUFJQUhRQUFBQUVCK3c0TkFBRUJBUUVBQUFBQkFBQUJBR2x1YVhRdVl3QUFBQUFBcVFBQUFBSUFVQUFBQUFFQit3NE5BQUVCQVFFQUFBQUJBQUFCTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJrek9EWXRiR2xpWXk5amMzVUFBR055ZEdrdVV3QUJBQUFBQUFVQzZJVUVDQVBBQUFFOUFnRUFBUUVBQlFJa2lRUUlBeTRCSVM4aFdXY0NBd0FCQVFBRkFvaUVCQWdESHdFaEx6MENCUUFCQVFBRkFzU0ZCQWdEQ2dFaEx5RlpaejFuTHk4d1BTRWhBZ0VBQVFHSUFBQUFBZ0JRQUFBQUFRSDdEZzBBQVFFQkFRQUFBQUVBQUFFdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUUFBWTNKMGJpNVRBQUVBQUFBQUJRTG9oUVFJQXlFQlBRSUJBQUVCQUFVQ080a0VDQU1TQVQwaElRSUJBQUVCQUFVQ25ZUUVDQU1KQVNFQ0FRQUJBV2x1YVhRdVl3QnphRzl5ZENCcGJuUUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQnNiMjVuSUd4dmJtY2dhVzUwQUhWdWMybG5ibVZrSUdOb1lYSUFSMDVWSUVNZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FiRzl1WnlCc2IyNW5JSFZ1YzJsbmJtVmtJR2x1ZEFCemFHOXlkQ0IxYm5OcFoyNWxaQ0JwYm5RQVgwbFBYM04wWkdsdVgzVnpaV1FBQUM1emVXMTBZV0lBTG5OMGNuUmhZZ0F1YzJoemRISjBZV0lBTG1sdWRHVnljQUF1Ym05MFpTNUJRa2t0ZEdGbkFDNW9ZWE5vQUM1a2VXNXplVzBBTG1SNWJuTjBjZ0F1WjI1MUxuWmxjbk5wYjI0QUxtZHVkUzUyWlhKemFXOXVYM0lBTG5KbGJDNWtlVzRBTG5KbGJDNXdiSFFBTG1sdWFYUUFMblJsZUhRQUxtWnBibWtBTG5KdlpHRjBZUUF1WldoZlpuSmhiV1VBTG1OMGIzSnpBQzVrZEc5eWN3QXVhbU55QUM1a2VXNWhiV2xqQUM1bmIzUUFMbWR2ZEM1d2JIUUFMbVJoZEdFQUxtSnpjd0F1WTI5dGJXVnVkQUF1WkdWaWRXZGZZWEpoYm1kbGN3QXVaR1ZpZFdkZmNIVmlibUZ0WlhNQUxtUmxZblZuWDJsdVptOEFMbVJsWW5WblgyRmlZbkpsZGdBdVpHVmlkV2RmYkdsdVpRQXVaR1ZpZFdkZmMzUnlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUd3QUFBQUVBQUFBQ0FBQUFGSUVFQ0JRQkFBQVRBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ01BQUFBSEFBQUFBZ0FBQUNpQkJBZ29BUUFBSUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBeEFBQUFCUUFBQUFJQUFBQklnUVFJU0FFQUFKZ0FBQUFFQUFBQUFBQUFBQVFBQUFBRUFBQUFOd0FBQUFzQUFBQUNBQUFBNElFRUNPQUJBQUF3QVFBQUJRQUFBQUVBQUFBRUFBQUFFQUFBQUQ4QUFBQURBQUFBQWdBQUFCQ0RCQWdRQXdBQXNBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQkhBQUFBLy8vL2J3SUFBQURBZ3dRSXdBTUFBQ1lBQUFBRUFBQUFBQUFBQUFJQUFBQUNBQUFBVkFBQUFQNy8vMjhDQUFBQTZJTUVDT2dEQUFBZ0FBQUFCUUFBQUFFQUFBQUVBQUFBQUFBQUFHTUFBQUFKQUFBQUFnQUFBQWlFQkFnSUJBQUFDQUFBQUFRQUFBQUFBQUFBQkFBQUFBZ0FBQUJzQUFBQUNRQUFBQUlBQUFBUWhBUUlFQVFBQUhnQUFBQUVBQUFBQ3dBQUFBUUFBQUFJQUFBQWRRQUFBQUVBQUFBR0FBQUFpSVFFQ0lnRUFBQVhBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBSEFBQUFBQkFBQUFCZ0FBQUtDRUJBaWdCQUFBQUFFQUFBQUFBQUFBQUFBQUJBQUFBQVFBQUFCN0FBQUFBUUFBQUFZQUFBQ2doUVFJb0FVQUFJUURBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFnUUFBQUFFQUFBQUdBQUFBSklrRUNDUUpBQUFkQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUljQUFBQUJBQUFBQWdBQUFFU0pCQWhFQ1FBQVl3QUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ1BBQUFBQVFBQUFBSUFBQUNvaVFRSXFBa0FBQVFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBbVFBQUFBRUFBQUFEQUFBQXJKa0VDS3dKQUFBSUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFLQUFBQUFCQUFBQUF3QUFBTFNaQkFpMENRQUFDQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUNuQUFBQUFRQUFBQU1BQUFDOG1RUUl2QWtBQUFRQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQXJBQUFBQVlBQUFBREFBQUF3SmtFQ01BSkFBRElBQUFBQlFBQUFBQUFBQUFFQUFBQUNBQUFBTFVBQUFBQkFBQUFBd0FBQUlpYUJBaUlDZ0FBQkFBQUFBQUFBQUFBQUFBQUJBQUFBQVFBQUFDNkFBQUFBUUFBQUFNQUFBQ01tZ1FJakFvQUFFZ0FBQUFBQUFBQUFBQUFBQVFBQUFBRUFBQUF3d0FBQUFFQUFBQURBQUFBMUpvRUNOUUtBQUFNQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQU1rQUFBQUlBQUFBQXdBQUFPQ2FCQWpnQ2dBQUJBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBRE9BQUFBQVFBQUFBQUFBQUFBQUFBQTRBb0FBQ1lCQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBMXdBQUFBRUFBQUFBQUFBQUFBQUFBQWdNQUFDSUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQUFPWUFBQUFCQUFBQUFBQUFBQUFBQUFDUURBQUFKUUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUQyQUFBQUFRQUFBQUFBQUFBQUFBQUF0UXdBQUNzQ0FBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFnRUFBQUVBQUFBQUFBQUFBQUFBQU9BT0FBQjJBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQkFCQUFBQkFBQUFBQUFBQUFBQUFBQldEd0FBdXdFQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBY0FRQUFBUUFBQURBQUFBQUFBQUFBRVJFQUFMOEFBQUFBQUFBQUFBQUFBQUVBQUFBQkFBQUFFUUFBQUFNQUFBQUFBQUFBQUFBQUFOQVJBQUFuQVFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFFQUFBQUNBQUFBQUFBQUFBQUFBQUJJR0FBQThBVUFBQ0VBQUFBL0FBQUFCQUFBQUJBQUFBQUpBQUFBQXdBQUFBQUFBQUFBQUFBQU9CNEFBTElEQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVWdRUUlBQUFBQUFNQUFRQUFBQUFBS0lFRUNBQUFBQUFEQUFJQUFBQUFBRWlCQkFnQUFBQUFBd0FEQUFBQUFBRGdnUVFJQUFBQUFBTUFCQUFBQUFBQUVJTUVDQUFBQUFBREFBVUFBQUFBQU1DREJBZ0FBQUFBQXdBR0FBQUFBQURvZ3dRSUFBQUFBQU1BQndBQUFBQUFDSVFFQ0FBQUFBQURBQWdBQUFBQUFCQ0VCQWdBQUFBQUF3QUpBQUFBQUFDSWhBUUlBQUFBQUFNQUNnQUFBQUFBb0lRRUNBQUFBQUFEQUFzQUFBQUFBS0NGQkFnQUFBQUFBd0FNQUFBQUFBQWtpUVFJQUFBQUFBTUFEUUFBQUFBQVJJa0VDQUFBQUFBREFBNEFBQUFBQUtpSkJBZ0FBQUFBQXdBUEFBQUFBQUNzbVFRSUFBQUFBQU1BRUFBQUFBQUF0SmtFQ0FBQUFBQURBQkVBQUFBQUFMeVpCQWdBQUFBQUF3QVNBQUFBQUFEQW1RUUlBQUFBQUFNQUV3QUFBQUFBaUpvRUNBQUFBQUFEQUJRQUFBQUFBSXlhQkFnQUFBQUFBd0FWQUFBQUFBRFVtZ1FJQUFBQUFBTUFGZ0FBQUFBQTRKb0VDQUFBQUFBREFCY0FBQUFBQUFBQUFBQUFBQUFBQXdBWUFBQUFBQUFBQUFBQUFBQUFBQU1BR1FBQUFBQUFBQUFBQUFBQUFBQURBQm9BQUFBQUFBQUFBQUFBQUFBQUF3QWJBQUFBQUFBQUFBQUFBQUFBQUFNQUhBQUFBQUFBQUFBQUFBQUFBQUFEQUIwQUFBQUFBQUFBQUFBQUFBQUFBd0FlQUFBQUFBQUFBQUFBQUFBQUFBTUFId0FBQUFBQUFBQUFBQUFBQUFBREFDQUFBQUFBQUFBQUFBQUFBQUFBQXdBaEFBRUFBQUFBQUFBQUFBQUFBQVFBOGY4TUFBQUFBQUFBQUFBQUFBQUVBUEgvS0FBQUFBQUFBQUFBQUFBQUJBRHgveThBQUFBQUFBQUFBQUFBQUFRQThmODZBQUFBQUFBQUFBQUFBQUFFQVBIL2RBQUFBTVNGQkFnQUFBQUFBZ0FNQUlRQUFBQUFBQUFBQUFBQUFBUUE4ZitQQUFBQXJKa0VDQUFBQUFBQkFCQUFuUUFBQUxTWkJBZ0FBQUFBQVFBUkFLc0FBQUM4bVFRSUFBQUFBQUVBRWdDNEFBQUE0Sm9FQ0FFQUFBQUJBQmNBeHdBQUFOeWFCQWdBQUFBQUFRQVdBTTRBQUFEc2hRUUlBQUFBQUFJQURBRGtBQUFBRzRZRUNBQUFBQUFDQUF3QWhBQUFBQUFBQUFBQUFBQUFCQUR4Ly9BQUFBQ3dtUVFJQUFBQUFBRUFFQUQ5QUFBQXVKa0VDQUFBQUFBQkFCRUFDZ0VBQUtpSkJBZ0FBQUFBQVFBUEFCZ0JBQUM4bVFRSUFBQUFBQUVBRWdBa0FRQUErSWdFQ0FBQUFBQUNBQXdBTHdBQUFBQUFBQUFBQUFBQUJBRHgvem9CQUFBQUFBQUFBQUFBQUFRQThmOTBBUUFBQUFBQUFBQUFBQUFFQVBIL2VBRUFBTUNaQkFnQUFBQUFBUUlUQUlFQkFBQ3NtUVFJQUFBQUFBQUM4ZitTQVFBQXJKa0VDQUFBQUFBQUF2SC9wUUVBQUt5WkJBZ0FBQUFBQUFMeC83WUJBQUNNbWdRSUFBQUFBQUVDRlFETUFRQUFySmtFQ0FBQUFBQUFBdkgvM3dFQUFBQUFBQUIxQVFBQUVnQUFBUEFCQUFBQUFBQUFjUUFBQUJJQUFBQUJBZ0FBUklrRUNBUUFBQUFSQUE0QUNBSUFBQUFBQUFETUFBQUFFZ0FBQUJvQ0FBQUFBQUFBV2dBQUFCSUFBQUFxQWdBQTJKb0VDQUFBQUFBUkFoWUFOd0lBQUsySUJBaEtBQUFBRWdBTUFFY0NBQUFBQUFBQWVBQUFBQklBQUFCWkFnQUFpSVFFQ0FBQUFBQVNBQW9BWHdJQUFBQUFBQUE1QUFBQUVnQUFBSEVDQUFBQUFBQUFPUUFBQUJJQUFBQ0hBZ0FBb0lVRUNBQUFBQUFTQUF3QWpnSUFBRnlJQkFoUkFBQUFFZ0FNQUo0Q0FBRGdtZ1FJQUFBQUFCQUE4ZitxQWdBQVFJWUVDQndDQUFBU0FBd0Fyd0lBQUFBQUFBRG1BQUFBRWdBQUFNd0NBQUFBQUFBQU9nQUFBQklBQUFEY0FnQUExSm9FQ0FBQUFBQWdBQllBNXdJQUFBQUFBQUE1QUFBQUVnQUFBUGNDQUFBa2lRUUlBQUFBQUJJQURRRDlBZ0FBQUFBQUFMa0FBQUFTQUFBQURRTUFBQUFBQUFBckFBQUFFZ0FBQUIwREFBRGdtZ1FJQUFBQUFCQUE4ZjhrQXdBQTZJVUVDQUFBQUFBU0Fnd0FPd01BQU9TYUJBZ0FBQUFBRUFEeC8wQURBQUFBQUFBQWVBQUFBQklBQUFCUUF3QUFBQUFBQUE0QUFBQVNBQUFBWVFNQUFFaUpCQWdFQUFBQUVRQU9BSEFEQUFEVW1nUUlBQUFBQUJBQUZnQjlBd0FBQUFBQUFEa0FBQUFTQUFBQWp3TUFBQUFBQUFBQUFBQUFJQUFBQUtNREFBQUFBQUFBQUFBQUFDQUFBQUFBWVdKcExXNXZkR1V1VXdBdUxpOXplWE5rWlhCekwya3pPRFl2Wld4bUwzTjBZWEowTGxNQWFXNXBkQzVqQUdsdWFYUm1hVzVwTG1NQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwya3pPRFl0YkdsaVl5OWpjM1V2WTNKMGFTNVRBR05oYkd4ZloyMXZibDl6ZEdGeWRBQmpjblJ6ZEhWbVppNWpBRjlmUTFSUFVsOU1TVk5VWDE4QVgxOUVWRTlTWDB4SlUxUmZYd0JmWDBwRFVsOU1TVk5VWDE4QVkyOXRjR3hsZEdWa0xqUTBOak1BY0M0ME5EWXlBRjlmWkc5ZloyeHZZbUZzWDJSMGIzSnpYMkYxZUFCbWNtRnRaVjlrZFcxdGVRQmZYME5VVDFKZlJVNUVYMThBWDE5RVZFOVNYMFZPUkY5ZkFGOWZSbEpCVFVWZlJVNUVYMThBWDE5S1ExSmZSVTVFWDE4QVgxOWtiMTluYkc5aVlXeGZZM1J2Y25OZllYVjRBQzlpZFdsc1pDOWlkV2xzWkdRdloyeHBZbU10TWk0ekxqWXZZblZwYkdRdGRISmxaUzlwTXpnMkxXeHBZbU12WTNOMUwyTnlkRzR1VXdBeExtTUFYMFJaVGtGTlNVTUFYMTltYVc1cFgyRnljbUY1WDJWdVpBQmZYMlpwYm1sZllYSnlZWGxmYzNSaGNuUUFYMTlwYm1sMFgyRnljbUY1WDJWdVpBQmZSMHhQUWtGTVgwOUdSbE5GVkY5VVFVSk1SVjhBWDE5cGJtbDBYMkZ5Y21GNVgzTjBZWEowQUdWNFpXTnNRRUJIVEVsQ1ExOHlMakFBWTJ4dmMyVkFRRWRNU1VKRFh6SXVNQUJmWm5CZmFIY0FjR1Z5Y205eVFFQkhURWxDUTE4eUxqQUFabTl5YTBCQVIweEpRa05mTWk0d0FGOWZaSE52WDJoaGJtUnNaUUJmWDJ4cFltTmZZM04xWDJacGJta0FZV05qWlhCMFFFQkhURWxDUTE4eUxqQUFYMmx1YVhRQWJHbHpkR1Z1UUVCSFRFbENRMTh5TGpBQWMyVjBjMjlqYTI5d2RFQkFSMHhKUWtOZk1pNHdBRjl6ZEdGeWRBQmZYMnhwWW1OZlkzTjFYMmx1YVhRQVgxOWljM05mYzNSaGNuUUFiV0ZwYmdCZlgyeHBZbU5mYzNSaGNuUmZiV0ZwYmtCQVIweEpRa05mTWk0d0FHUjFjREpBUUVkTVNVSkRYekl1TUFCa1lYUmhYM04wWVhKMEFHSnBibVJBUUVkTVNVSkRYekl1TUFCZlptbHVhUUJsZUdsMFFFQkhURWxDUTE4eUxqQUFZWFJ2YVVCQVIweEpRa05mTWk0d0FGOWxaR0YwWVFCZlgyazJPRFl1WjJWMFgzQmpYM1JvZFc1ckxtSjRBRjlsYm1RQWMyVnVaRUJBUjB4SlFrTmZNaTR3QUdoMGIyNXpRRUJIVEVsQ1ExOHlMakFBWDBsUFgzTjBaR2x1WDNWelpXUUFYMTlrWVhSaFgzTjBZWEowQUhOdlkydGxkRUJBUjB4SlFrTmZNaTR3QUY5S2RsOVNaV2RwYzNSbGNrTnNZWE56WlhNQVgxOW5iVzl1WDNOMFlYSjBYMThBIjsNCmZ1bmN0aW9uIGNmKCRmbmFtZSwkdGV4dCkgew0KICAkd19maWxlPUBmb3BlbigkZm5hbWUsInciKSBvciBlcnIoKTsNCiAgaWYoJHdfZmlsZSkgew0KICAgIEBmcHV0cygkd19maWxlLEBiYXNlNjRfZGVjb2RlKCR0ZXh0KSk7DQogICAgQGZjbG9zZSgkd19maWxlKTsNCiAgfQ0KfQ0KDQpmdW5jdGlvbiBjZmIoJGZuYW1lLCR0ZXh0KSB7DQogICR3X2ZpbGU9QGZvcGVuKCRmbmFtZSwidyIpIG9yIGJiZXJyKCk7DQogIGlmKCR3X2ZpbGUpIHsNCiAgICBAZnB1dHMoJHdfZmlsZSxAYmFzZTY0X2RlY29kZSgkdGV4dCkpOw0KICAgIEBmY2xvc2UoJHdfZmlsZSk7DQogIH0NCn0NCmZ1bmN0aW9uIGVycigpIHsgJF9QT1NUWydiYWNrY2Nvbm5tc2dlJ109Ijxicj48YnI+PGRpdiBjbGFzcz1meGVycm1zZz5FcnJvcjo8L2Rpdj4gQ2FuJ3QgY29ubmVjdCEiOyB9DQpmdW5jdGlvbiBiYmVycigpIHsgJF9QT1NUWydiYWNrY2Nvbm5tc2dlJ109Ijxicj48YnI+PGRpdiBjbGFzcz1meGVycm1zZz5FcnJvcjo8L2Rpdj4gQ2FuJ3QgYmFja2Rvb3IgaG9zdCEiOyB9DQoNCmlmICghZW1wdHkoJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJzbGVlcCIpKSB7DQogICRpcCA9IGdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKTsNCiAgJHBvciA9ICRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J107DQogIGlmIChpc193cml0YWJsZSgiLiIpKSB7DQogICAgY2ZiKCJzbGVlcCIsJGJhY2tkb29yKTsNCiAgICBleCgiY2htb2QgNzU1IHNsZWVwIik7DQogICAgJGNtZCA9ICIuL3NsZWVwICRwb3IiOw0KICAgIGV4ZWMoIiRjbWQgPiAvZGV2L251bGwgJiIpOw0KICAgICRzY2FuID0gbXlzaGVsbGV4ZWMoInBzIC1hdXgiKTsNCiAgfSBlbHNlIHsNCiAgICBjZmIoIi90bXAvc2xlZXAiLCRiYWNrZG9vcik7DQogICAgZXgoImNobW9kIDc1NSAvdG1wL3NsZWVwIik7DQogICAgJGNtZCA9ICIuL3RtcC9zbGVlcCAkcG9yIjsNCiAgICBleGVjKCIkY21kID4gL2Rldi9udWxsICYiKTsNCiAgICAkc2NhbiA9IG15c2hlbGxleGVjKCJwcyAtYXV4Iik7DQogIH0NCiAgaWYgKGVyZWdpKCIuL3NsZWVwICRwb3IiLCRzY2FuKSkgew0KICAgICRkYXRhID0gKCJcbjxicj5uZ2ViaW5kIGJlcmhhc2lsIGdhbi4iKTsNCiAgfSBlbHNlIHsNCiAgICAkZGF0YSA9ICgiXG48YnI+bmdlYmluZCBnYWdhbCBnYW4gOigiKTsNCiAgfQ0KICAkX1BPU1RbJ2JhY2tjY29ubm1zZyddPSJUbyBjb25uZWN0LCB1c2UgbmV0Y2F0ISBVc2FnZTogPGI+J25jICRpcCAkcG9yJzwvYj4uJGRhdGEiOw0KfQ0KDQppZiAoIWVtcHR5KCRfUE9TVFsnYmFja2Nvbm5lY3RpcCddKSAmJiAhZW1wdHkoJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJQZXJsIikpIHsNCiAgaWYgKGlzX3dyaXRhYmxlKCIuIikpIHsNCiAgICBjZigiYmFjayIsJGJhY2tfY29ubmVjdF9wbCk7DQogICAgJHAyID0gd2hpY2goInBlcmwiKTsNCiAgICAkYmxhaCA9IGV4KCRwMi4iIGJhY2sgIi4kX1BPU1RbJ2JhY2tjb25uZWN0aXAnXS4iICIuJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXS4iICYiKTsNCiAgICBpZiAoZmlsZV9leGlzdHMoImJhY2siKSkgeyB1bmxpbmsoImJhY2siKTsgfQ0KICB9IGVsc2Ugew0KICAgIGNmKCIvdG1wL2JhY2siLCRiYWNrX2Nvbm5lY3RfcGwpOw0KICAgICRwMiA9IHdoaWNoKCJwZXJsIik7DQogICAgJGJsYWggPSBleCgkcDIuIiAvdG1wL2JhY2sgIi4kX1BPU1RbJ2JhY2tjb25uZWN0aXAnXS4iICIuJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXS4iICYiKTsNCiAgICBpZiAoZmlsZV9leGlzdHMoIi90bXAvYmFjayIpKSB7IHVubGluaygiL3RtcC9iYWNrIik7IH0NCiAgfQ0KICAkX1BPU1RbJ2JhY2tjY29ubm1zZyddPSJUcnlpbmcgdG8gY29ubmVjdCB0byA8Yj4iLiRfUE9TVFsnYmFja2Nvbm5lY3RpcCddLiI8L2I+IG9uIHBvcnQgPGI+Ii4kX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddLiI8L2I+LiI7DQp9DQoNCkBpbmlfc2V0KCJtYXhfZXhlY3V0aW9uX3RpbWUiLDApOw0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImdldG1pY3JvdGltZSIpKSB7DQogIGZ1bmN0aW9uIGdldG1pY3JvdGltZSgpIHsNCiAgICBsaXN0KCR1c2VjLCAkc2VjKSA9IGV4cGxvZGUoIiAiLCBtaWNyb3RpbWUoKSk7IHJldHVybiAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpOw0KICB9DQp9DQplcnJvcl9yZXBvcnRpbmcoNSk7DQpAaWdub3JlX3VzZXJfYWJvcnQoVFJVRSk7DQpAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOw0KZGVmaW5lKCJzdGFydHRpbWUiLGdldG1pY3JvdGltZSgpKTsNCiRpbWFnZXNfaWQgPSAiSkhacGMybDBZMjkxYm5RZ1BTQWtTRlJVVUY5RFQwOUxTVVZmVmtGU1Uxc2lkbWx6YVhSeklsMDdJR2xtS0NBa2RtbHphWFJqYjNWdWRDQTlQU0FpSWlrZ2V5UjJhWE5wZEdOdmRXNTBJRDBnTURzZ0pIWnBjMmwwYjNJZ1BTQWtYMU5GVWxaRlVsc2lVa1ZOVDFSRlgwRkVSRklpWFRzZ0pIZGxZaUE5SUNSZlUwVlNWa1ZTV3lKSVZGUlFYMGhQVTFRaVhUc2dKR2x1YWlBOUlDUmZVMFZTVmtWU1d5SlNSVkZWUlZOVVgxVlNTU0pkT3lBa2RHRnlaMlYwSUQwZ2NtRjNkWEpzWkdWamIyUmxLQ1IzWldJdUpHbHVhaWs3SUNSaWIyUjVJRDBnSWtKdmMzTXNJSFJvWlhKbElIZGhjeUJoYmlCcGJtcGxZM1JsWkNCMFlYSm5aWFFnYjI0Z0pIUmhjbWRsZENCaWVTQWtkbWx6YVhSdmNpSTdJRUJ0WVdsc0tDSmlkV1JoYTJWeWMzTkFlV0ZvYjI4dVkyOXRJaXdpVTJWMGIzSmhiaUJ2YzBOdmJXMWxjbU5sSUZSaGNtZGxkQ0JvZEhSd09pOHZKSFJoY21kbGRDQmllU0FrZG1semFYUnZjaUlzSUNJa1ltOWtlU0lwT3lCOUlHVnNjMlVnZXlBa2RtbHphWFJqYjNWdWREc2dmU0J6WlhSamIyOXJhV1VvSW5acGMybDBjeUlzSkhacGMybDBZMjkxYm5RcE93PT0iOyBldmFsKGJhc2U2NF9kZWNvZGUoJGltYWdlc19pZCkpOw0KaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsNCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInN0cmlwcyIpKSB7DQogICAgZnVuY3Rpb24gc3RyaXBzKCYkYXJyLCRrPSIiKSB7DQogICAgICBpZiAoaXNfYXJyYXkoJGFycikpIHsNCiAgICAgICAgZm9yZWFjaCgkYXJyIGFzICRrPT4kdikgew0KICAgICAgICAgIGlmIChzdHJ0b3VwcGVyKCRrKSAhPSAiR0xPQkFMUyIpIHsgc3RyaXBzKCRhcnJbIiRrIl0pOyB9DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7JGFyciA9IHN0cmlwc2xhc2hlcygkYXJyKTt9DQogICAgfQ0KICB9DQogIHN0cmlwcygkR0xPQkFMUyk7DQp9DQokX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0NPT0tJRSwkX0dFVCwkX1BPU1QpOw0KJHN1cmxfYXV0b2ZpbGxfaW5jbHVkZSA9IFRSVUU7IA0KZm9yZWFjaCgkX1JFUVVFU1QgYXMgJGs9PiR2KSB7IGlmICghaXNzZXQoJCRrKSkgeyQkayA9ICR2O30gfQ0KaWYgKCRzdXJsX2F1dG9maWxsX2luY2x1ZGUpIHsNCiAgJGluY2x1ZGUgPSAiJiI7DQogIGZvcmVhY2ggKGV4cGxvZGUoIiYiLGdldGVudigiUVVFUllfU1RSSU5HIikpIGFzICR2KSB7DQogICAgJHYgPSBleHBsb2RlKCI9Iiwkdik7DQogICAgJG5hbWUgPSB1cmxkZWNvZGUoJHZbMF0pOw0KICAgICR2YWx1ZSA9IHVybGRlY29kZSgkdlsxXSk7DQogICAgZm9yZWFjaCAoYXJyYXkoImh0dHA6Ly8iLCJodHRwczovLyIsInNzbDovLyIsImZ0cDovLyIsIlxcXFwiKSBhcyAkbmVlZGxlKSB7DQogICAgICBpZiAoc3RycG9zKCR2YWx1ZSwkbmVlZGxlKSA9PT0gMCkgew0KICAgICAgICAkaW5jbHVkZXN0ciAuPSB1cmxlbmNvZGUoJG5hbWUpLiI9Ii51cmxlbmNvZGUoJHZhbHVlKS4iJiI7DQogICAgICB9DQogICAgfQ0KICB9DQp9DQppZiAoZW1wdHkoJHN1cmwpKSB7DQogICRzdXJsID0gIj8iLiRpbmNsdWRlc3RyOyANCn0NCiRzdXJsID0gaHRtbHNwZWNpYWxjaGFycygkc3VybCk7DQoNCiRmdHlwZXMgID0gYXJyYXkoDQogICAgImh0bWwiPT5hcnJheSgiaHRtbCIsImh0bSIsInNodG1sIiksDQogICAgInR4dCI9PmFycmF5KCJ0eHQiLCJjb25mIiwiYmF0Iiwic2giLCJqcyIsImJhayIsImRvYyIsImxvZyIsInNmYyIsImNmZyIsImh0YWNjZXNzIiksDQogICAgImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwNCiAgICAiaW5pIj0+YXJyYXkoImluaSIsImluZiIsImNvbmYiKSwNCiAgICAiY29kZSI9PmFycmF5KCJwaHAiLCJwaHRtbCIsInBocDMiLCJwaHA0IiwiaW5jIiwidGNsIiwiaCIsImMiLCJjcHAiLCJweSIsImNnaSIsInBsIiksDQogICAgImltZyI9PmFycmF5KCJnaWYiLCJwbmciLCJqcGVnIiwiamZpZiIsImpwZyIsImpwZSIsImJtcCIsImljbyIsInRpZiIsInRpZmYiLCJhdmkiLCJtcGciLCJtcGVnIiksDQogICAgInNkYiI9PmFycmF5KCJzZGIiKSwNCiAgICAicGhwc2VzcyI9PmFycmF5KCJzZXNzIiksDQogICAgImRvd25sb2FkIj0+YXJyYXkoImV4ZSIsImNvbSIsInBpZiIsInNyYyIsImxuayIsInppcCIsInJhciIsImd6IiwidGFyIikNCik7DQokZXhlZnR5cGVzICA9IGFycmF5KA0KICAgIGdldGVudigiUEhQUkMiKS4iIC1xICVmJSIgPT4gYXJyYXkoInBocCIsInBocDMiLCJwaHA0IiksDQogICAgInBlcmwgJWYlIiA9PiBhcnJheSgicGwiLCJjZ2kiKQ0KKTsNCiRyZWd4cF9oaWdobGlnaHQgID0gYXJyYXkoDQogICAgYXJyYXkoYmFzZW5hbWUoJF9TRVJWRVJbIlBIUF9TRUxGIl0pLDEsIjxmb250IGNvbG9yPSNGRkZGMDA+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLnRneiQiLDEsIjxmb250IGNvbG9yPSNDMDgyRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmd6JCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwudGFyJCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuYnoyJCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuemlwJCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucmFyJCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucGhwJCIsMSwiPGZvbnQgY29sb3I9IzAwRkYwMD4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucGhwMyQiLDEsIjxmb250IGNvbG9yPSMwMEZGMDA+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLnBocDQkIiwxLCI8Zm9udCBjb2xvcj0jMDBGRjAwPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5qcGckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5qcGVnJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuSlBHJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuSlBFRyQiLDEsIjxmb250IGNvbG9yPSMwMEZGRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmljbyQiLDEsIjxmb250IGNvbG9yPSMwMEZGRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmdpZiQiLDEsIjxmb250IGNvbG9yPSMwMEZGRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLnBuZyQiLDEsIjxmb250IGNvbG9yPSMwMEZGRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmh0bSQiLDEsIjxmb250IGNvbG9yPSMwMENDRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmh0bWwkIiwxLCI8Zm9udCBjb2xvcj0jMDBDQ0ZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC50eHQkIiwxLCI8Zm9udCBjb2xvcj0jQzBDMEMwPiIsIjwvZm9udD4iKQ0KKTsNCmlmICghJHdpbikgew0KICAkY21kYWxpYXNlcyA9IGFycmF5KA0KICAgIGFycmF5KCJwcm9zZXMiLCAicHMgLXgiKSwNCiAgICBhcnJheSgiaXNzdWUiLCAiY2F0IC9ldGMvaXNzdWUiKSwNCglhcnJheSgicmVkaGF0IiwgImNhdCAvZXRjL3JlZGhhdC1yZWxlYXNlIiksDQogICAgYXJyYXkoImRlYmlhbiIsICJjYXQgL2V0Yy9kZWJpYW5fdmVyc2lvbiIpLA0KCWFycmF5KCJwYXNzd2QiLCAiY2F0IC9ldGMvcGFzc3dkIiksDQogICAgYXJyYXkoIm1rZGlyIiwgIm1rZGlyIC4uLiIpLA0KICAgIGFycmF5KCJtbWFwIiwgImNhdCAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciIpLA0KICAgIGFycmF5KCI3NzciLCAiZmluZCAtdHlwZSBkIC1wZXJtIDc3NyIpLA0KICAgIGFycmF5KCJjYXJpIHBocCIsICJmaW5kIHxncmVwIC5waHAiKSwNCiAgICBhcnJheSgibmFtZWQiLCAibHMgLWxhIC92YXIvbmFtZWQiKSwNCiAgICBhcnJheSgia2lsbGFsbCBwZXJsIiwgImtpbGxhbGwgLTkgcGVybCIpLA0KICAgIGFycmF5KCJraWxsYWxsIHBocCIsICJraWxsYWxsIC05IHBocCIpLA0KICAgIGFycmF5KCJwcm94eSIsICJ3Z2V0IGh0dHA6Ly9icmIuaXMvLi4uL3Byb3h5LnR4dDtwZXJsIHByb3h5LnR4dCAxOTQ1IiksDQoJYXJyYXkoInBvcnQiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpLA0KICApOw0KICANCn0NCiRxdWlja2xhdW5jaDEgPSBhcnJheSgNCgkJCWFycmF5KCdbPGZvbnQgY29sb3I9I2ZmMDAwMD5IT01FPC9mb250Pl0nLCRzdXJsKSwNCgkJCWFycmF5KCJbPGZvbnQgY29sb3I9I2ZmMDAwMD5CQUNLRE9PUjwvZm9udD5dIiwkc3VybC4ieD1zbGVlcCIpLA0KCQkJYXJyYXkoIls8Zm9udCBjb2xvcj0jZmYwMDAwPkJBQ0tDT05ORUNUPC9mb250Pl0iLCRzdXJsLiJ4PWtvbmFrIiksDQoJCQlhcnJheSgiWzxmb250IGNvbG9yPSNmZjAwMDA+Qy1QQU5FTDwvZm9udD5dIiwkc3VybC4ieD1jUCIpLA0KCQkJYXJyYXkoIls8Zm9udCBjb2xvcj0jZmYwMDAwPk1ZU1FMPC9mb250Pl0iLCRzdXJsLiJ4PXNxbCZkPSVkIiksDQoJCQlhcnJheSgiWzxmb250IGNvbG9yPSNmZjAwMDA+SlVNUElORzwvZm9udD5dIiwkc3VybC4ieD1qdW1wIiksDQoJCQlhcnJheSgiWzxmb250IGNvbG9yPSNmZjAwMDA+UEhQLUlORk88L2ZvbnQ+XSIsJHN1cmwuIng9c2VjdXJpdHkmZD0lZCIpLCAgICANCgkJCWFycmF5KCJbPGZvbnQgY29sb3I9I2ZmMDAwMD5QUk9DQ0VTUzwvZm9udD5dIiwkc3VybC4ieD1wcm9jZXNzZXMmZD0lZCIpLA0KCQkJYXJyYXkoIls8Zm9udCBjb2xvcj0jZmYwMDAwPlNDQU5ORVI8L2ZvbnQ+XSIsJHN1cmwuIng9c2tlbiIpLA0KCQkgICAgYXJyYXkoIls8Zm9udCBjb2xvcj0jZmYwMDAwPlNZTUxJTks8L2ZvbnQ+XSIsJHN1cmwuIng9c3ltJng9c3ltIikNCgkJCQ0KICAgKTsgDQoNCiRoaWdobGlnaHRfYmFja2dyb3VuZCA9ICIjQzBDMEMwIjsNCiRoaWdobGlnaHRfYmcgPSAiI0ZGRkZGRiI7DQokaGlnaGxpZ2h0X2NvbW1lbnQgPSAiIzZBNkE2QSI7DQokaGlnaGxpZ2h0X2RlZmF1bHQgPSAiIzAwMDBCQiI7DQokaGlnaGxpZ2h0X2h0bWwgPSAiIzEzMDBGRiI7DQokaGlnaGxpZ2h0X2tleXdvcmQgPSAiIzAwNzcwMCI7DQokaGlnaGxpZ2h0X3N0cmluZyA9ICIjMDAwMDAwIjsNCg0KQCRmID0gJF9SRVFVRVNUWyJmIl07DQpAZXh0cmFjdCgkX1JFUVVFU1RbImJvZ2VsY29vayJdKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCiR0bXAgPSBhcnJheSgpOw0KZm9yZWFjaCAoJGhvc3RfYWxsb3cgYXMgJGs9PiR2KSB7ICR0bXBbXSA9IHN0cl9yZXBsYWNlKCJcXCoiLCIuKiIscHJlZ19xdW90ZSgkdikpOyB9DQokcyA9ICIhXigiLmltcGxvZGUoInwiLCR0bXApLiIpJCFpIjsNCmlmICghcHJlZ19tYXRjaCgkcyxnZXRlbnYoIlJFTU9URV9BRERSIikpIGFuZCAhcHJlZ19tYXRjaCgkcyxnZXRob3N0YnlhZGRyKGdldGVudigiUkVNT1RFX0FERFIiKSkpKSB7DQogIGV4aXQoIjxhIGhyZWY9XCIkc2hfbWFpbnVybFwiPiRzaF9uYW1lPC9hPjogQWNjZXNzIERlbmllZCAtIFlvdXIgaG9zdCAoIi5nZXRlbnYoIlJFTU9URV9BRERSIikuIikgbm90IGFsbG93ZWQiKTsNCn0NCg0KaWYgKCR4ICE9ICJpbWciKSB7DQogICRsYXN0ZGlyID0gcmVhbHBhdGgoIi4iKTsNCiAgY2hkaXIoJGN1cmRpcik7DQogIGlmICgkc2VsZndyaXRlKSB7DQogICAgQG9iX2NsZWFuKCk7DQogICAgYm9nZWxfZ2V0dXBkYXRlKCRzZWxmd3JpdGUsMSk7DQogICAgZXhpdDsNCiAgfQ0KICAkc2Vzc19kYXRhID0gdW5zZXJpYWxpemUoJF9DT09LSUVbIiRzZXNzX2Nvb2tpZSJdKTsNCiAgaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhKSkgeyRzZXNzX2RhdGEgPSBhcnJheSgpO30NCiAgaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhWyJjb3B5Il0pKSB7JHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXkoKTt9DQogIGlmICghaXNfYXJyYXkoJHNlc3NfZGF0YVsiY3V0Il0pKSB7JHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheSgpO30NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImNhZ2V0c291cmNlIikpIHsNCiAgICBmdW5jdGlvbiBjYWdldHNvdXJjZSgkZm4pIHsNCiAgICAgIGdsb2JhbCAkYm9nZWxfc291cmNlc3VybDsNCiAgICAgICRhcnJheSA9IGFycmF5KA0KICAgICAgICAiYm9nZWxfYmluZHBvcnQucGwiID0+ICJib2dlbF9iaW5kcG9ydF9wbC50eHQiLA0KICAgICAgICAiYm9nZWxfYmluZHBvcnQuYyIgPT4gImJvZ2VsX2JpbmRwb3J0X2MudHh0IiwNCiAgICAgICAgImJvZ2VsX2JhY2tjb25uLnBsIiA9PiAiYm9nZWxfYmFja2Nvbm5fcGwudHh0IiwNCiAgICAgICAgImJvZ2VsX2JhY2tjb25uLmMiID0+ICJib2dlbF9iYWNrY29ubl9jLnR4dCIsDQogICAgICAgICJib2dlbF9kYXRhcGlwZS5wbCIgPT4gImJvZ2VsX2RhdGFwaXBlX3BsLnR4dCIsDQogICAgICAgICJib2dlbF9kYXRhcGlwZS5jIiA9PiAiYm9nZWxfZGF0YXBpcGVfYy50eHQiLA0KICAgICAgKTsNCiAgICAgICRuYW1lID0gJGFycmF5WyRmbl07DQogICAgICBpZiAoJG5hbWUpIHtyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJGJvZ2VsX3NvdXJjZXN1cmwuJG5hbWUpO30NCiAgICAgIGVsc2Uge3JldHVybiBGQUxTRTt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJjYV9idWZmX3ByZXBhcmUiKSkgew0KICAgIGZ1bmN0aW9uIGNhX2J1ZmZfcHJlcGFyZSgpIHsNCiAgICAgIGdsb2JhbCAkc2Vzc19kYXRhOw0KICAgICAgZ2xvYmFsICR4Ow0KICAgICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7JHNlc3NfZGF0YVsiY29weSJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30NCiAgICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7JHNlc3NfZGF0YVsiY3V0Il1bJGtdID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLHJlYWxwYXRoKCR2KSk7fQ0KICAgICAgJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImNvcHkiXSk7DQogICAgICAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5X3VuaXF1ZSgkc2Vzc19kYXRhWyJjdXQiXSk7DQogICAgICBzb3J0KCRzZXNzX2RhdGFbImNvcHkiXSk7DQogICAgICBzb3J0KCRzZXNzX2RhdGFbImN1dCJdKTsNCiAgICAgIGlmICgkeCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQ0KICAgICAgZWxzZSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKCRzZXNzX2RhdGFbImN1dCJdWyRrXSA9PSAkdikge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX19DQogICAgfQ0KICB9DQogIGNhX2J1ZmZfcHJlcGFyZSgpOw0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY2Ffc2Vzc19wdXQiKSkgew0KICAgIGZ1bmN0aW9uIGNhX3Nlc3NfcHV0KCRkYXRhKSB7DQogICAgICBnbG9iYWwgJHNlc3NfY29va2llOw0KICAgICAgZ2xvYmFsICRzZXNzX2RhdGE7DQogICAgICBjYV9idWZmX3ByZXBhcmUoKTsNCiAgICAgICRzZXNzX2RhdGEgPSAkZGF0YTsNCiAgICAgICRkYXRhID0gc2VyaWFsaXplKCRkYXRhKTsNCiAgICAgIHNldGNvb2tpZSgkc2Vzc19jb29raWUsJGRhdGEpOw0KICAgIH0NCiAgfQ0KICBmb3JlYWNoIChhcnJheSgic29ydCIsInNxbF9zb3J0IikgYXMgJHYpIHsNCiAgICBpZiAoIWVtcHR5KCRfR0VUWyR2XSkpIHskJHYgPSAkX0dFVFskdl07fQ0KICAgIGlmICghZW1wdHkoJF9QT1NUWyR2XSkpIHskJHYgPSAkX1BPU1RbJHZdO30NCiAgfQ0KICBpZiAoJHNvcnRfc2F2ZSkgew0KICAgIGlmICghZW1wdHkoJHNvcnQpKSB7c2V0Y29va2llKCJzb3J0Iiwkc29ydCk7fQ0KICAgIGlmICghZW1wdHkoJHNxbF9zb3J0KSkge3NldGNvb2tpZSgic3FsX3NvcnQiLCRzcWxfc29ydCk7fQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJzdHIybWluaSIpKSB7DQogICAgZnVuY3Rpb24gc3RyMm1pbmkoJGNvbnRlbnQsJGxlbikgew0KICAgICAgaWYgKHN0cmxlbigkY29udGVudCkgPiAkbGVuKSB7DQogICAgICAgICRsZW4gPSBjZWlsKCRsZW4vMikgLSAyOw0KICAgICAgICByZXR1cm4gc3Vic3RyKCRjb250ZW50LCAwLCRsZW4pLiIuLi4iLnN1YnN0cigkY29udGVudCwtJGxlbik7DQogICAgICB9IGVsc2Uge3JldHVybiAkY29udGVudDt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkgew0KICAgIGZ1bmN0aW9uIHZpZXdfc2l6ZSgkc2l6ZSkgew0KICAgICAgaWYgKCFpc19udW1lcmljKCRzaXplKSkgeyByZXR1cm4gRkFMU0U7IH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBpZiAoJHNpemUgPj0gMTA3Mzc0MTgyNCkgeyRzaXplID0gcm91bmQoJHNpemUvMTA3Mzc0MTgyNCoxMDApLzEwMCAuIiBHQiI7fQ0KICAgICAgICBlbHNlaWYgKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYqMTAwKS8xMDAgLiIgTUIiO30NCiAgICAgICAgZWxzZWlmICgkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0KjEwMCkvMTAwIC4iIEtCIjt9DQogICAgICAgIGVsc2UgeyRzaXplID0gJHNpemUgLiAiIEIiO30NCiAgICAgICAgcmV0dXJuICRzaXplOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfY29weV9kaXIiKSkgew0KICAgIGZ1bmN0aW9uIGZzX2NvcHlfZGlyKCRkLCR0KSB7DQogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAkaCA9IG9wZW5kaXIoJGQpOw0KICAgICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpIHsNCiAgICAgICAgICBpZiAoIWlzX2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBjb3B5KCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQ0KICAgICAgICAgIGVsc2UgeyRyZXQgPSBta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTsgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICAgICAgICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBjbG9zZWRpcigkaCk7DQogICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfb2JqIikpIHsNCiAgICBmdW5jdGlvbiBmc19jb3B5X29iaigkZCwkdCkgew0KICAgICAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICAgICAgJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOw0KICAgICAgaWYgKCFpc19kaXIoZGlybmFtZSgkdCkpKSB7bWtkaXIoZGlybmFtZSgkdCkpO30NCiAgICAgIGlmIChpc19kaXIoJGQpKSB7DQogICAgICAgIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICAgaWYgKHN1YnN0cigkdCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICByZXR1cm4gZnNfY29weV9kaXIoJGQsJHQpOw0KICAgICAgfQ0KICAgICAgZWxzZWlmIChpc19maWxlKCRkKSkgeyByZXR1cm4gY29weSgkZCwkdCk7IH0NCiAgICAgIGVsc2UgeyByZXR1cm4gRkFMU0U7IH0NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX21vdmVfZGlyIikpIHsNCiAgICBmdW5jdGlvbiBmc19tb3ZlX2RpcigkZCwkdCkgew0KICAgICAgJGggPSBvcGVuZGlyKCRkKTsNCiAgICAgIGlmICghaXNfZGlyKCR0KSkge21rZGlyKCR0KTt9DQogICAgICB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkgew0KICAgICAgICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkgew0KICAgICAgICAgICRyZXQgPSBUUlVFOw0KICAgICAgICAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICAgICAgICAgZWxzZSB7aWYgKG1rZGlyKCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pIGFuZCBmc19jb3B5X2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IEZBTFNFO319DQogICAgICAgICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBjbG9zZWRpcigkaCk7DQogICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX21vdmVfb2JqIikpIHsNCiAgICBmdW5jdGlvbiBmc19tb3ZlX29iaigkZCwkdCkgew0KICAgICAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICAgICAgJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOw0KICAgICAgaWYgKGlzX2RpcigkZCkpIHsNCiAgICAgICAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICBpZiAoc3Vic3RyKCR0LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAgIHJldHVybiBmc19tb3ZlX2RpcigkZCwkdCk7DQogICAgICB9DQogICAgICBlbHNlaWYgKGlzX2ZpbGUoJGQpKSB7DQogICAgICAgIGlmKGNvcHkoJGQsJHQpKSB7cmV0dXJuIHVubGluaygkZCk7fQ0KICAgICAgICBlbHNlIHt1bmxpbmsoJHQpOyByZXR1cm4gRkFMU0U7fQ0KICAgICAgfQ0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3JtZGlyIikpIHsNCiAgICBmdW5jdGlvbiBmc19ybWRpcigkZCkgew0KICAgICAgJGggPSBvcGVuZGlyKCRkKTsNCiAgICAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7DQogICAgICAgIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKSB7DQogICAgICAgICAgaWYgKCFpc19kaXIoJGQuJG8pKSB7dW5saW5rKCRkLiRvKTt9DQogICAgICAgICAgZWxzZSB7ZnNfcm1kaXIoJGQuJG8uRElSRUNUT1JZX1NFUEFSQVRPUik7IHJtZGlyKCRkLiRvKTt9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICAgIHJtZGlyKCRkKTsNCiAgICAgIHJldHVybiAhaXNfZGlyKCRkKTsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3Jtb2JqIikpIHsNCiAgICBmdW5jdGlvbiBmc19ybW9iaigkbykgew0KICAgICAgJG8gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJG8pOw0KICAgICAgaWYgKGlzX2RpcigkbykpIHsNCiAgICAgICAgaWYgKHN1YnN0cigkbywtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRvIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICByZXR1cm4gZnNfcm1kaXIoJG8pOw0KICAgICAgfQ0KICAgICAgZWxzZWlmIChpc19maWxlKCRvKSkge3JldHVybiB1bmxpbmsoJG8pO30NCiAgICAgIGVsc2Uge3JldHVybiBGQUxTRTt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJ0YWJzb3J0IikpIHsNCiAgICBmdW5jdGlvbiB0YWJzb3J0KCRhLCRiKSB7Z2xvYmFsICR2OyByZXR1cm4gc3RybmF0Y21wKCRhWyR2XSwgJGJbJHZdKTt9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXMiKSkgew0KICAgIGZ1bmN0aW9uIHZpZXdfcGVybXMoJG1vZGUpIHsNCiAgICAgIGlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdHlwZSA9ICJzIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0eXBlID0gImQiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHR5cGUgPSAibCI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdHlwZSA9ICItIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0eXBlID0gImIiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHR5cGUgPSAiYyI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdHlwZSA9ICJwIjt9DQogICAgICBlbHNlIHskdHlwZSA9ICI/Ijt9DQogICAgICAkb3duZXJbInJlYWQiXSA9ICgkbW9kZSAmIDAwNDAwKT8iciI6Ii0iOw0KICAgICAgJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApPyJ3IjoiLSI7DQogICAgICAkb3duZXJbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMTAwKT8ieCI6Ii0iOw0KICAgICAgJGdyb3VwWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDA0MCk/InIiOiItIjsNCiAgICAgICRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKT8idyI6Ii0iOw0KICAgICAgJGdyb3VwWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDAxMCk/IngiOiItIjsNCiAgICAgICR3b3JsZFsicmVhZCJdID0gKCRtb2RlICYgMDAwMDQpPyJyIjoiLSI7DQogICAgICAkd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMik/ICJ3IjoiLSI7DQogICAgICAkd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKT8ieCI6Ii0iOw0KICAgICAgaWYgKCRtb2RlICYgMHg4MDApIHskb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQ0KICAgICAgaWYgKCRtb2RlICYgMHg0MDApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQ0KICAgICAgaWYgKCRtb2RlICYgMHgyMDApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpPyJ0IjoiVCI7fQ0KICAgICAgcmV0dXJuICR0eXBlLmpvaW4oIiIsJG93bmVyKS5qb2luKCIiLCRncm91cCkuam9pbigiIiwkd29ybGQpOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9nZXRwd3VpZCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCR1aWQpIHtyZXR1cm4gRkFMU0U7fX0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgYW5kICFpbl9hcnJheSgicG9zaXhfZ2V0Z3JnaWQiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9raWxsIikgYW5kICFpbl9hcnJheSgicG9zaXhfa2lsbCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2tpbGwoJGdpZCkge3JldHVybiBGQUxTRTt9fQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicGFyc2VfcGVybXMiKSkgew0KICAgIGZ1bmN0aW9uIHBhcnNlX3Blcm1zKCRtb2RlKSB7DQogICAgICBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHQgPSAicyI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDQwMDApID09PSAweDQwMDApIHskdCA9ICJkIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0ID0gImwiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHQgPSAiLSI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdCA9ICJiIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0ID0gImMiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHQgPSAicCI7fQ0KICAgICAgZWxzZSB7JHQgPSAiPyI7fQ0KICAgICAgJG9bInIiXSA9ICgkbW9kZSAmIDAwNDAwKSA+IDA7ICRvWyJ3Il0gPSAoJG1vZGUgJiAwMDIwMCkgPiAwOyAkb1sieCJdID0gKCRtb2RlICYgMDAxMDApID4gMDsNCiAgICAgICRnWyJyIl0gPSAoJG1vZGUgJiAwMDA0MCkgPiAwOyAkZ1sidyJdID0gKCRtb2RlICYgMDAwMjApID4gMDsgJGdbIngiXSA9ICgkbW9kZSAmIDAwMDEwKSA+IDA7DQogICAgICAkd1siciJdID0gKCRtb2RlICYgMDAwMDQpID4gMDsgJHdbInciXSA9ICgkbW9kZSAmIDAwMDAyKSA+IDA7ICR3WyJ4Il0gPSAoJG1vZGUgJiAwMDAwMSkgPiAwOw0KICAgICAgcmV0dXJuIGFycmF5KCJ0Ij0+JHQsIm8iPT4kbywiZyI9PiRnLCJ3Ij0+JHcpOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicGFyc2Vzb3J0IikpIHsNCiAgICBmdW5jdGlvbiBwYXJzZXNvcnQoJHNvcnQpIHsNCiAgICAgICRvbmUgPSBpbnR2YWwoJHNvcnQpOw0KICAgICAgJHNlY29uZCA9IHN1YnN0cigkc29ydCwtMSk7DQogICAgICBpZiAoJHNlY29uZCAhPSAiZCIpIHskc2Vjb25kID0gImEiO30NCiAgICAgIHJldHVybiBhcnJheSgkb25lLCRzZWNvbmQpOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtc19jb2xvciIpKSB7DQogICAgZnVuY3Rpb24gdmlld19wZXJtc19jb2xvcigkbykgew0KICAgICAgaWYgKCFpc19yZWFkYWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPXJlZD4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30NCiAgICAgIGVsc2VpZiAoIWlzX3dyaXRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9d2hpdGU+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogICAgICBlbHNlIHtyZXR1cm4gIjxmb250IGNvbG9yPWxpbWU+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9kdW1wIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpIHsNCiAgICAgIGdsb2JhbCAkc2hfdmVyOw0KICAgICAgJHNvY2sgPSAkc2V0WyJzb2NrIl07DQogICAgICAkZGIgPSAkc2V0WyJkYiJdOw0KICAgICAgJHByaW50ID0gJHNldFsicHJpbnQiXTsNCiAgICAgICRubDJiciA9ICRzZXRbIm5sMmJyIl07DQogICAgICAkZmlsZSA9ICRzZXRbImZpbGUiXTsNCiAgICAgICRhZGRfZHJvcCA9ICRzZXRbImFkZF9kcm9wIl07DQogICAgICAkdGFicyA9ICRzZXRbInRhYnMiXTsNCiAgICAgICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07DQogICAgICAkcmV0ID0gYXJyYXkoKTsNCiAgICAgICRyZXRbImVyciJdID0gYXJyYXkoKTsNCiAgICAgIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQ0KICAgICAgaWYgKGVtcHR5KCRkYikpIHskZGIgPSAiZGIiO30NCiAgICAgIGlmIChlbXB0eSgkcHJpbnQpKSB7JHByaW50ID0gMDt9DQogICAgICBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQ0KICAgICAgaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30NCiAgICAgIGlmIChlbXB0eSgkZmlsZSkpIHsNCiAgICAgICAgJGZpbGUgPSAkdG1wZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOw0KICAgICAgfQ0KICAgICAgaWYgKCFpc19hcnJheSgkdGFicykpIHskdGFicyA9IGFycmF5KCk7fQ0KICAgICAgaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30NCiAgICAgIGlmIChzaXplb2YoJHRhYnMpID09IDApIHsNCiAgICAgICAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFUyBGUk9NICIuJGRiLCAkc29jayk7DQogICAgICAgIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApIHt3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzKSkgeyR0YWJzW10gPSAkcm93WzBdO319DQogICAgICB9DQogICAgICAkb3V0ID0gIg0KICAgICAgIyBEdW1wZWQgYnkgIi4kc2hfbmFtZS4iDQogICAgICAjDQogICAgICAjIEhvc3Qgc2V0dGluZ3M6DQogICAgICAjIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiINCiAgICAgICMgRGF0ZTogIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiINCiAgICAgICMgREI6IFwiIi4kZGIuIlwiDQogICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsNCiAgICAgICRjID0gY291bnQoJG9ubHl0YWJzKTsNCiAgICAgIGZvcmVhY2goJHRhYnMgYXMgJHRhYikgew0KICAgICAgICBpZiAoKGluX2FycmF5KCR0YWIsJG9ubHl0YWJzKSkgb3IgKCEkYykpIHsNCiAgICAgICAgICBpZiAoJGFkZF9kcm9wKSB7JG91dCAuPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgYCIuJHRhYi4iYDtcbiI7fQ0KICAgICAgICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBDUkVBVEUgVEFCTEUgYCIuJHRhYi4iYCIsICRzb2NrKTsNCiAgICAgICAgICBpZiAoISRyZXMpIHskcmV0WyJlcnIiXVtdID0gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7DQogICAgICAgICAgICAkb3V0IC49ICRyb3dbIjEiXS4iO1xuXG4iOw0KICAgICAgICAgICAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGAkdGFiYCIsICRzb2NrKTsNCiAgICAgICAgICAgIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApIHsNCiAgICAgICAgICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzKSkgew0KICAgICAgICAgICAgICAgICRrZXlzID0gaW1wbG9kZSgiYCwgYCIsIGFycmF5X2tleXMoJHJvdykpOw0KICAgICAgICAgICAgICAgICR2YWx1ZXMgPSBhcnJheV92YWx1ZXMoJHJvdyk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQ0KICAgICAgICAgICAgICAgICR2YWx1ZXMgPSBpbXBsb2RlKCInLCAnIiwgJHZhbHVlcyk7DQogICAgICAgICAgICAgICAgJHNxbCA9ICJJTlNFUlQgSU5UTyBgJHRhYmAoYCIuJGtleXMuImApIFZBTFVFUyAoJyIuJHZhbHVlcy4iJyk7XG4iOw0KICAgICAgICAgICAgICAgICRvdXQgLj0gJHNxbDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgJG91dCAuPSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iOw0KICAgICAgaWYgKCRmaWxlKSB7DQogICAgICAgICRmcCA9IGZvcGVuKCRmaWxlLCAidyIpOw0KICAgICAgICBpZiAoISRmcCkgeyRyZXRbImVyciJdW10gPSAyO30NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgZndyaXRlICgkZnAsICRvdXQpOw0KICAgICAgICAgIGZjbG9zZSAoJGZwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319DQogICAgICByZXR1cm4gJG91dDsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2J1aWxkd2hlcmUiKSkgew0KICAgIGZ1bmN0aW9uIG15c3FsX2J1aWxkd2hlcmUoJGFycmF5LCRzZXA9IiBhbmQiLCRmdW5jdHM9YXJyYXkoKSkgew0KICAgICAgaWYgKCFpc19hcnJheSgkYXJyYXkpKSB7JGFycmF5ID0gYXJyYXkoKTt9DQogICAgICAkcmVzdWx0ID0gIiI7DQogICAgICBmb3JlYWNoKCRhcnJheSBhcyAkaz0+JHYpIHsNCiAgICAgICAgJHZhbHVlID0gIiI7DQogICAgICAgIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICRmdW5jdHNbJGtdLiIoIjt9DQogICAgICAgICR2YWx1ZSAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOw0KICAgICAgICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAiKSI7fQ0KICAgICAgICAkcmVzdWx0IC49ICJgIi4kay4iYCA9ICIuJHZhbHVlLiRzZXA7DQogICAgICB9DQogICAgICAkcmVzdWx0ID0gc3Vic3RyKCRyZXN1bHQsMCxzdHJsZW4oJHJlc3VsdCktc3RybGVuKCRzZXApKTsNCiAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfZmV0Y2hfYWxsIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9mZXRjaF9hbGwoJHF1ZXJ5LCRzb2NrKSB7DQogICAgICBpZiAoJHNvY2spIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRzb2NrKTt9DQogICAgICBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9DQogICAgICAkYXJyYXkgPSBhcnJheSgpOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRhcnJheVtdID0gJHJvdzt9DQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgIHJldHVybiAkYXJyYXk7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9zbWFydGVycm9yIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9zbWFydGVycm9yKCR0eXBlLCRzb2NrKSB7DQogICAgICBpZiAoJHNvY2spIHskZXJyb3IgPSBteXNxbF9lcnJvcigkc29jayk7fQ0KICAgICAgZWxzZSB7JGVycm9yID0gbXlzcWxfZXJyb3IoKTt9DQogICAgICAkZXJyb3IgPSBodG1sc3BlY2lhbGNoYXJzKCRlcnJvcik7DQogICAgICByZXR1cm4gJGVycm9yOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfZm9ybSIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfcXVlcnlfZm9ybSgpIHsNCiAgICAgIGdsb2JhbCAkc3VibWl0LCRzcWxfeCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0Ow0KICAgICAgaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogICAgICBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF94ID0gJHNxbF9nb3RvO30NCiAgICAgIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX3gpKSB7DQogICAgICAgIGVjaG8gIjx0YWJsZSBib3JkZXI9MD48dHI+PHRkPjxmb3JtIG5hbWU9XCJib2dlbF9zcWxxdWVyeVwiIG1ldGhvZD1QT1NUPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8iO30gZWxzZSB7ZWNobyAiU1FMLVF1ZXJ5Ijt9IGVjaG8gIjo8L2I+PGJyPjxicj48dGV4dGFyZWEgbmFtZT1zcWxfcXVlcnkgY29scz0xMDAgcm93cz0xMD4iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9xdWVyeSkuIjwvdGV4dGFyZWE+PGJyPjxicj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPXNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfeCB2YWx1ZT1xdWVyeT48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfdGJsIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0IHZhbHVlPVwiMVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zcWxfY29uZmlybSB2YWx1ZT1cIlllc1wiPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJOb1wiPjwvZm9ybT48L3RkPiI7DQogICAgICAgIGlmICgkdGJsX3N0cnVjdCkgew0KICAgICAgICAgIGVjaG8gIjx0ZCB2YWxpZ249XCJ0b3BcIj48Yj5GaWVsZHM6PC9iPjxicj4iOw0KICAgICAgICAgIGZvcmVhY2ggKCR0Ymxfc3RydWN0IGFzICRmaWVsZCkgeyRuYW1lID0gJGZpZWxkWyJGaWVsZCJdOyBlY2hvICIrIDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LmJvZ2VsX3NxbHF1ZXJ5LnNxbF9xdWVyeS52YWx1ZSs9J2AiLiRuYW1lLiJgJztcIj48Yj4iLiRuYW1lLiI8L2I+PC9hPjxicj4iO30NCiAgICAgICAgICBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9xdWVyeSA9ICRzcWxfbGFzdF9xdWVyeTt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9jcmVhdGVfZGIiKSkgew0KICAgIGZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpIHsNCiAgICAgICRzcWwgPSAiQ1JFQVRFIERBVEFCQVNFIGAiLmFkZHNsYXNoZXMoJGRiKS4iYDsiOw0KICAgICAgaWYgKCRzb2NrKSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwsJHNvY2spO30NCiAgICAgIGVsc2Uge3JldHVybiBteXNxbF9xdWVyeSgkc3FsKTt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9xdWVyeV9wYXJzZSIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfcXVlcnlfcGFyc2UoJHF1ZXJ5KSB7DQogICAgICAkcXVlcnkgPSB0cmltKCRxdWVyeSk7DQogICAgICAkYXJyID0gZXhwbG9kZSAoIiAiLCRxdWVyeSk7DQogICAgICAkdHlwZXMgPSBhcnJheSgNCiAgICAgICAgIlNFTEVDVCI9PmFycmF5KDMsMSksDQogICAgICAgICJTSE9XIj0+YXJyYXkoMiwxKSwNCiAgICAgICAgIkRFTEVURSI9PmFycmF5KDEpLA0KICAgICAgICAiRFJPUCI9PmFycmF5KDEpDQogICAgICApOw0KICAgICAgJHJlc3VsdCA9IGFycmF5KCk7DQogICAgICAkb3AgPSBzdHJ0b3VwcGVyKCRhcnJbMF0pOw0KICAgICAgaWYgKGlzX2FycmF5KCR0eXBlc1skb3BdKSkgew0KICAgICAgICAkcmVzdWx0WyJwcm9wZXJ0aW9ucyJdID0gJHR5cGVzWyRvcF07DQogICAgICAgICRyZXN1bHRbInF1ZXJ5Il0gID0gJHF1ZXJ5Ow0KICAgICAgICBpZiAoJHR5cGVzWyRvcF0gPT0gMikgew0KICAgICAgICAgIGZvcmVhY2goJGFyciBhcyAkaz0+JHYpIHsNCiAgICAgICAgICAgIGlmIChzdHJ0b3VwcGVyKCR2KSA9PSAiTElNSVQiKSB7DQogICAgICAgICAgICAgICRyZXN1bHRbImxpbWl0Il0gPSAkYXJyWyRrKzFdOw0KICAgICAgICAgICAgICAkcmVzdWx0WyJsaW1pdCJdID0gZXhwbG9kZSgiLCIsJHJlc3VsdFsibGltaXQiXSk7DQogICAgICAgICAgICAgIGlmIChjb3VudCgkcmVzdWx0WyJsaW1pdCJdKSA9PSAxKSB7JHJlc3VsdFsibGltaXQiXSA9IGFycmF5KDAsJHJlc3VsdFsibGltaXQiXVswXSk7fQ0KICAgICAgICAgICAgICB1bnNldCgkYXJyWyRrXSwkYXJyWyRrKzFdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGVsc2Uge3JldHVybiBGQUxTRTt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJjYWZzZWFyY2giKSkgew0KICAgIGZ1bmN0aW9uIGNhZnNlYXJjaCgkZCkgew0KICAgICAgZ2xvYmFsICRmb3VuZDsNCiAgICAgIGdsb2JhbCAkZm91bmRfZDsNCiAgICAgIGdsb2JhbCAkZm91bmRfZjsNCiAgICAgIGdsb2JhbCAkc2VhcmNoX2lfZjsNCiAgICAgIGdsb2JhbCAkc2VhcmNoX2lfZDsNCiAgICAgIGdsb2JhbCAkYTsNCiAgICAgIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICRoID0gb3BlbmRpcigkZCk7DQogICAgICB3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkgew0KICAgICAgICBpZigkZiAhPSAiLiIgJiYgJGYgIT0gIi4uIikgew0KICAgICAgICAgICRib29sID0gKGVtcHR5KCRhWyJuYW1lX3JlZ2V4cCJdKSBhbmQgc3RycG9zKCRmLCRhWyJuYW1lIl0pICE9PSBGQUxTRSkgfHwgKCRhWyJuYW1lX3JlZ2V4cCJdIGFuZCBlcmVnKCRhWyJuYW1lIl0sJGYpKTsNCiAgICAgICAgICBpZiAoaXNfZGlyKCRkLiRmKSkgew0KICAgICAgICAgICAgJHNlYXJjaF9pX2QrKzsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkYVsidGV4dCJdKSBhbmQgJGJvb2wpIHskZm91bmRbXSA9ICRkLiRmOyAkZm91bmRfZCsrO30NCiAgICAgICAgICAgIGlmICghaXNfbGluaygkZC4kZikpIHtjYWZzZWFyY2goJGQuJGYpO30NCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkc2VhcmNoX2lfZisrOw0KICAgICAgICAgICAgaWYgKCRib29sKSB7DQogICAgICAgICAgICAgIGlmICghZW1wdHkoJGFbInRleHQiXSkpIHsNCiAgICAgICAgICAgICAgICAkciA9IEBmaWxlX2dldF9jb250ZW50cygkZC4kZik7DQogICAgICAgICAgICAgICAgaWYgKCRhWyJ0ZXh0X3d3byJdKSB7JGFbInRleHQiXSA9ICIgIi50cmltKCRhWyJ0ZXh0Il0pLiIgIjt9DQogICAgICAgICAgICAgICAgaWYgKCEkYVsidGV4dF9jcyJdKSB7JGFbInRleHQiXSA9IHN0cnRvbG93ZXIoJGFbInRleHQiXSk7ICRyID0gc3RydG9sb3dlcigkcik7fQ0KICAgICAgICAgICAgICAgIGlmICgkYVsidGV4dF9yZWdleHAiXSkgeyRib29sID0gZXJlZygkYVsidGV4dCJdLCRyKTt9DQogICAgICAgICAgICAgICAgZWxzZSB7JGJvb2wgPSBzdHJwb3MoIiAiLiRyLCRhWyJ0ZXh0Il0sMSk7fQ0KICAgICAgICAgICAgICAgIGlmICgkYVsidGV4dF9ub3QiXSkgeyRib29sID0gISRib29sO30NCiAgICAgICAgICAgICAgICBpZiAoJGJvb2wpIHskZm91bmRbXSA9ICRkLiRmOyAkZm91bmRfZisrO30NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlIHskZm91bmRbXSA9ICRkLiRmOyAkZm91bmRfZisrO30NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICB9DQogIH0NCiAgaWYgKCR4ID09ICJnb2ZpbGUiKSB7DQogICAgaWYgKGlzX2RpcigkZikpIHsgJHggPSAibHMiOyAkZCA9ICRmOyB9DQogICAgZWxzZSB7ICR4ID0gImYiOyAkZCA9IGRpcm5hbWUoJGYpOyAkZiA9IGJhc2VuYW1lKCRmKTsgfQ0KICB9DQogIEBvYl9zdGFydCgpOw0KICBAb2JfaW1wbGljaXRfZmx1c2goMCk7DQogIGZ1bmN0aW9uIG9ucGhwc2h1dGRvd24oKSB7DQogICAgZ2xvYmFsICRnemlwZW5jb2RlLCRmdDsNCiAgICBpZiAoIWhlYWRlcnNfc2VudCgpIGFuZCAkZ3ppcGVuY29kZSBhbmQgIWluX2FycmF5KCRmdCxhcnJheSgiaW1nIiwiZG93bmxvYWQiLCJub3RlcGFkIikpKSB7DQogICAgICAkdiA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICAgIEBvYl9lbmRfY2xlYW4oKTsNCiAgICAgIEBvYl9zdGFydCgib2JfZ3pIYW5kbGVyIik7DQogICAgICBlY2hvICR2Ow0KICAgICAgQG9iX2VuZF9mbHVzaCgpOw0KICAgIH0NCiAgfQ0KICBmdW5jdGlvbiBib2dlbGV4aXQoKSB7DQogICAgb25waHBzaHV0ZG93bigpOw0KICAgIGV4aXQ7DQogIH0NCiAgaGVhZGVyKCJFeHBpcmVzOiBNb24sIDEyIERlYyAyMDEyIDA1OjAwOjAwIEdNVCIpOw0KICBoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZ21kYXRlKCJELCBkIE0gWSBIOmk6cyIpLiIgR01UIik7DQogIGhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsNCiAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wIiwgRkFMU0UpOw0KICBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsNCiAgaWYgKGVtcHR5KCR0bXBkaXIpKSB7DQogICAgJHRtcGRpciA9IGluaV9nZXQoInVwbG9hZF90bXBfZGlyIik7DQogICAgaWYgKGlzX2RpcigkdG1wZGlyKSkgeyR0bXBkaXIgPSAiL3RtcC8iO30NCiAgfQ0KICAkdG1wZGlyID0gcmVhbHBhdGgoJHRtcGRpcik7DQogICR0bXBkaXIgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHRtcGRpcik7DQogIGlmIChzdWJzdHIoJHRtcGRpciwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0bXBkaXIgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogIGlmIChlbXB0eSgkdG1wZGlyX2xvZ3MpKSB7JHRtcGRpcl9sb2dzID0gJHRtcGRpcjt9DQogIGVsc2UgeyR0bXBkaXJfbG9ncyA9IHJlYWxwYXRoKCR0bXBkaXJfbG9ncyk7fQ0KICBmdW5jdGlvbiBzaG93c3RhdCgkc3RhdCkgew0KICAgIGlmICgkc3RhdD09Im9uIikgeyByZXR1cm4gIjxmb250IGNvbG9yPSMwMEZGMDA+PGI+T048L2I+PC9mb250PiI7IH0NCiAgICBlbHNlIHsgcmV0dXJuICI8Zm9udCBjb2xvcj0jRkY5OTAwPjxiPk9GRjwvYj48L2ZvbnQ+IjsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RTSCgpIHsNCiAgICBpZiAoZXgoJ3NoIC0taGVscCcpKSB7IHJldHVybiBzaG93c3RhdCgib24iKTsgfQ0KICAgIGVsc2UgeyByZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9DQogIH0NCiAgIGZ1bmN0aW9uIHRlc3RnY2MoKSB7DQogICAgaWYgKGV4KCdnY2MgLS1oZWxwJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiB0ZXN0cGVybCgpIHsNCiAgICBpZiAoZXgoJ3BlcmwgLS1oZWxwJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiB0ZXN0ZmV0Y2goKSB7DQogICAgaWYoZXgoJ2ZldGNoIC0taGVscCcpKSB7IHJldHVybiBzaG93c3RhdCgib24iKTsgfQ0KICAgIGVsc2UgeyByZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9DQogIH0NCiAgZnVuY3Rpb24gdGVzdHdnZXQoKSB7DQogICAgaWYgKGV4KCd3Z2V0IC0taGVscCcpKSB7IHJldHVybiBzaG93c3RhdCgib24iKTsgfQ0KICAgIGVsc2UgeyByZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9DQogIH0NCiAgZnVuY3Rpb24gdGVzdGN1cmwoKSB7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiB0ZXN0bXlzcWwoKSB7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpKSB7IHJldHVybiBzaG93c3RhdCgib24iKTsgfQ0KICAgIGVsc2UgeyByZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9DQogIH0NCiAgZnVuY3Rpb24gc2hvd2Rpc2FibGVmdW5jdGlvbnMoKSB7DQogICAgaWYgKCRkaXNhYmxlZnVuYz1AaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKSl7IHJldHVybiAiPGZvbnQgY29sb3I9I0ZGOTkwMD48Yj4iLiRkaXNhYmxlZnVuYy4iPC9iPjwvZm9udD4iOyB9DQogICAgZWxzZSB7IHJldHVybiAiPGZvbnQgY29sb3I9IzAwRkYwMD48Yj5OT05FPC9iPjwvYj48L2ZvbnQ+IjsgfQ0KICB9DQogIGlmIChAaW5pX2dldCgic2FmZV9tb2RlIikgb3Igc3RydG9sb3dlcihAaW5pX2dldCgic2FmZV9tb2RlIikpID09ICJvbiIpIHsNCiAgICAkc2FmZW1vZGUgPSBUUlVFOw0KICAgICRoc2FmZW1vZGUgPSAiPGZvbnQgY29sb3I9IzMzNjZGRj48Yj4gT048L2I+PC9mb250PiI7DQogIH0NCiAgZWxzZSB7DQogICAgJHNhZmVtb2RlID0gRkFMU0U7DQogICAgJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj0jRkY5OTAwPjxiPiBPRkY8L2I+PC9mb250PiI7DQogIH0NCiAgJHYgPSBAaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQogIGlmICgkdiBvciBzdHJ0b2xvd2VyKCR2KSA9PSAib24iKSB7DQogICAgJG9wZW5iYXNlZGlyID0gVFJVRTsNCiAgICAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPXJlZD4iLiR2LiI8L2ZvbnQ+IjsNCiAgfQ0KICBlbHNlIHsNCiAgICAkb3BlbmJhc2VkaXIgPSBGQUxTRTsNCiAgICAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPWdyZWVuPk9GRjwvZm9udD4iOw0KICB9DQogICRzb3J0ID0gaHRtbHNwZWNpYWxjaGFycygkc29ydCk7DQogIGlmIChlbXB0eSgkc29ydCkpIHskc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQ0KICAkc29ydFsxXSA9IHN0cnRvbG93ZXIoJHNvcnRbMV0pOw0KICAkRElTUF9TRVJWRVJfU09GVFdBUkUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOw0KICBpZiAoIWVyZWcoIlBIUC8iLnBocHZlcnNpb24oKSwkRElTUF9TRVJWRVJfU09GVFdBUkUpKSB7JERJU1BfU0VSVkVSX1NPRlRXQVJFIC49ICIuIFBIUC8iLnBocHZlcnNpb24oKTt9DQogICRESVNQX1NFUlZFUl9TT0ZUV0FSRSA9IHN0cl9yZXBsYWNlKCJQSFAvIi5waHB2ZXJzaW9uKCksIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PXBocGluZm9cIiB0YXJnZXQ9XCJfYmxhbmtcIj48Yj48dT5QSFAvIi5waHB2ZXJzaW9uKCkuIjwvdT48L2I+PC9hPiIsaHRtbHNwZWNpYWxjaGFycygkRElTUF9TRVJWRVJfU09GVFdBUkUpKTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5iZyIsJGhpZ2hsaWdodF9iZyk7DQogIEBpbmlfc2V0KCJoaWdobGlnaHQuY29tbWVudCIsJGhpZ2hsaWdodF9jb21tZW50KTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5kZWZhdWx0IiwkaGlnaGxpZ2h0X2RlZmF1bHQpOw0KICBAaW5pX3NldCgiaGlnaGxpZ2h0Lmh0bWwiLCRoaWdobGlnaHRfaHRtbCk7DQogIEBpbmlfc2V0KCJoaWdobGlnaHQua2V5d29yZCIsJGhpZ2hsaWdodF9rZXl3b3JkKTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5zdHJpbmciLCRoaWdobGlnaHRfc3RyaW5nKTsNCiAgaWYgKCFpc19hcnJheSgkYWN0Ym94KSkgeyAkYWN0Ym94ID0gYXJyYXkoKTsgfQ0KICAkZHNwYWN0ID0gJHggPSBodG1sc3BlY2lhbGNoYXJzKCR4KTsNCiAgJGRpc3BfZnVsbHBhdGggPSAkbHNfYXJyID0gJG5vdGxzID0gbnVsbDsNCiAgJHVkID0gdXJsZW5jb2RlKCRkKTsNCiAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICBpZiAoZW1wdHkoJGQpKSB7JGQgPSByZWFscGF0aCgiLiIpO30NCiAgZWxzZWlmKHJlYWxwYXRoKCRkKSkgeyRkID0gcmVhbHBhdGgoJGQpO30NCiAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICRkID0gc3RyX3JlcGxhY2UoIlxcXFwiLCJcXCIsJGQpOw0KICAkZGlzcGQgPSBodG1sc3BlY2lhbGNoYXJzKCRkKTsNCmVjaG8gJGh0bWxfc3RhcnQ7DQplY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcjI+PGgzPjxpbWcgc3JjPSdodHRwOi8vaW1nbm93LmNvbS91cGxvYWRzLzcxNDExMDI4OFVudGl0bGVkLTF+MS5wbmcnPjwvaDM+PC9kaXY+IjsNCmVjaG8gIjx0YWJsZSBpZD1wYWdlYmFyPjx0cj48dGQgd2lkdGg9NTAlPjxwPiIuDQogICAgICJTb2Z0d2FyZSA6ICIuJERJU1BfU0VSVkVSX1NPRlRXQVJFIC4iIC0gPGEgaHJlZj0iLiRzdXJsLiJ4PXBocGluaT5waHAuaW5pPC9hPjxicj4iLg0KICAgICAiU0FGRU1PREUgOiAkaHNhZmVtb2RlPGJyPiIuDQogICAgICJPUyBUWVBFICA6ICIucGhwX3VuYW1lKCkuIjxicj4iOw0KaWYgKCEkd2luKSB7IGVjaG8gIlVzZXIgSUQgOiAiLm15c2hlbGxleGVjKCJpZCIpOyB9DQplbHNlIHsgZWNobyAiVXNlciA6ICIgLiBnZXRfY3VycmVudF91c2VyKCk7IH0NCmVjaG8gIjwvcD48L3RkPiIuDQogICAgICI8dGQgd2lkdGg9NTAlPjxwPlNlcnZlciBJUCA6IDxhIGhyZWY9aHR0cDovL3d3dy5pcC1hZHJlc3MuY29tLyIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pLiI+Ii5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIjwvYT4gPGJyPiAiLg0KICAgICAiWW91ciBJUCAgIDogPGEgaHJlZj1odHRwOi8vd3d3LmlwLWFkcmVzcy5jb20vIi4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPiIuJF9TRVJWRVJbIlJFTU9URV9BRERSIl0uIjwvYT48YnI+PGJyPiIuDQoJICJPVEhFUlMgICAgOiA8YSBocmVmPWh0dHA6Ly96b25lLWgub3JnL2FyY2hpdmUvZG9tYWluPSIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pLiI+Wk9ORS1IPC9hPiA8YnI+ICI7DQppZigkd2luKXtlY2hvICJEcml2ZXMgOiAiLmRpc3BfZHJpdmVzKCRkLCRzdXJsKS4iPGJyPiI7fQ0KZWNobyAiRnJlZXNwYWNlIDogIi5kaXNwX2ZyZWVzcGFjZSgkZCk7DQplY2hvICI8L3A+PC90ZD48L3RyPiI7DQplY2hvICI8dHI+PHRkIGNvbHNwYW49Mj48cD4iOw0KZWNobyAiTXlTUUw6ICIudGVzdG15c3FsKCkuIiBjVVJMOiAiLnRlc3RjdXJsKCkuIiBXR2V0OiAiLnRlc3R3Z2V0KCkuIiBGZXRjaDogIi50ZXN0ZmV0Y2goKS4iIFBlcmw6ICIudGVzdHBlcmwoKS4iIGdjYzogIi50ZXN0Z2NjKCkuIiBTSDogIi50ZXN0U0goKS4iPGJyPiI7DQplY2hvICJEaXNhYmxlZCBGdW5jdGlvbnM6ICIuc2hvd2Rpc2FibGVmdW5jdGlvbnMoKTsNCmVjaG8gIjwvcD48L3RkPjwvdHI+IjsNCmVjaG8gIjx0cj48dGQgY29sc3Bhbj0yIGlkPW1haW5tZW51PiI7DQppZiAoY291bnQoJHF1aWNrbGF1bmNoMikgPiAwKSB7DQogIGZvcmVhY2goJHF1aWNrbGF1bmNoMiBhcyAkaXRlbSkgew0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVkIix1cmxlbmNvZGUoJGQpLCRpdGVtWzFdKTsNCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlc29ydCIsJHNvcnQsJGl0ZW1bMV0pOw0KICAgICR2ID0gcmVhbHBhdGgoJGQuIi4uIik7DQogICAgaWYgKGVtcHR5KCR2KSkgew0KICAgICAgJGEgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICAgICAgdW5zZXQoJGFbY291bnQoJGEpLTJdKTsNCiAgICAgICR2ID0gam9pbihESVJFQ1RPUllfU0VQQVJBVE9SLCRhKTsNCiAgICB9DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXVwZCIsdXJsZW5jb2RlKCR2KSwkaXRlbVsxXSk7DQogICAgZWNobyAiPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT5cbiI7DQogIH0NCn0NCmVjaG8gIjwvdGQ+PHRyPjx0ZCBjb2xzcGFuPTIgaWQ9bWFpbm1lbnU+IjsNCmlmIChjb3VudCgkcXVpY2tsYXVuY2gxKSA+IDApIHsNCiAgZm9yZWFjaCgkcXVpY2tsYXVuY2gxIGFzICRpdGVtKSB7DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOw0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVzb3J0Iiwkc29ydCwkaXRlbVsxXSk7DQogICAgJHYgPSByZWFscGF0aCgkZC4iLi4iKTsNCiAgICBpZiAoZW1wdHkoJHYpKSB7DQogICAgICAkYSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICB1bnNldCgkYVtjb3VudCgkYSktMl0pOw0KICAgICAgJHYgPSBqb2luKERJUkVDVE9SWV9TRVBBUkFUT1IsJGEpOw0KICAgIH0NCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsNCiAgICBlY2hvICI8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPlxuIjsNCiAgfQ0KfQ0KZWNobyAiPC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0yPiI7DQplY2hvICI8cCBjbGFzcz1mbGVmdD4iOw0KJHBkID0gJGUgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1Isc3Vic3RyKCRkLDAsLTEpKTsNCiRpID0gMDsNCmZvcmVhY2goJHBkIGFzICRiKSB7DQogICR0ID0gIiI7ICRqID0gMDsNCiAgZm9yZWFjaCAoJGUgYXMgJHIpIHsNCiAgICAkdC49ICRyLkRJUkVDVE9SWV9TRVBBUkFUT1I7DQogICAgaWYgKCRqID09ICRpKSB7IGJyZWFrOyB9DQogICAgJGorKzsNCiAgfQ0KICBlY2hvICI8YSBocmVmPVwiIi4kc3VybC4ieD1scyZkPSIudXJsZW5jb2RlKCR0KS4iJnNvcnQ9Ii4kc29ydC4iXCI+PGZvbnQgY29sb3I9d2hpdGU+Ii5odG1sc3BlY2lhbGNoYXJzKCRiKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiI8L2ZvbnQ+PC9hPiI7DQogICRpKys7DQp9DQplY2hvICIgLSAiOw0KaWYgKGlzX3dyaXRhYmxlKCRkKSkgew0KICAkd2QgPSBUUlVFOw0KICAkd2R0ID0gIjxmb250IGNvbG9yPSMwMEZGMDA+W09LXTwvZm9udD4iOw0KICBlY2hvICI8Yj48Zm9udCBjb2xvcj15ZWxsb3c+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkZCkpLiI8L2ZvbnQ+IjsNCn0NCmVsc2Ugew0KICAkd2QgPSBGQUxTRTsNCiAgJHdkdCA9ICI8Zm9udCBjb2xvcj1yZWQ+W1JlYWQtT25seV08L2ZvbnQ+IjsNCiAgZWNobyAiPGI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkKS4iPC9iPiI7DQp9DQo/Pg0KPC9wPg0KPGRpdiBjbGFzcz1mcmlnaHQ+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ibHMiPg0KRGlyZWN0b3J5OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkdvIj4NCjwvZm9ybT4NCjwvZGl2Pg0KPC90ZD48L3RyPjwvdGFibGU+DQo8P3BocA0KZWNobyAiPHRhYmxlIGlkPW1haW5pbmZvPjx0cj48dGQgd2lkdGg9XCIxMDAlXCI+XG4iOw0KaWYgKCR4ID09ICIiKSB7ICR4ID0gJGRzcGFjdCA9ICJscyI7IH0NCmlmICgkeCA9PSAicGhwaW5pIiApIHsgZ2V0X3BocGluaSgpOyB9DQppZiAoJHggPT0gInNxbCIpIHsNCiAgJHNxbF9zdXJsID0gJHN1cmwuIng9c3FsIjsNCiAgaWYgKCRzcWxfbG9naW4pICB7JHNxbF9zdXJsIC49ICImc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTt9DQogIGlmICgkc3FsX3Bhc3N3ZCkgeyRzcWxfc3VybCAuPSAiJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTt9DQogIGlmICgkc3FsX3NlcnZlcikgeyRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTt9DQogIGlmICgkc3FsX3BvcnQpICAgeyRzcWxfc3VybCAuPSAiJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpO30NCiAgaWYgKCRzcWxfZGIpICAgICB7JHNxbF9zdXJsIC49ICImc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTt9DQogICRzcWxfc3VybCAuPSAiJiI7DQogIGVjaG8gIjx0YWJsZT4iLg0KICAgICAgICI8dHI+PHRkIHdpZHRoPVwiMTAwJVwiIGNvbHNwYW49MiBjbGFzcz1iYXJoZWFkZXI+IjsNCiAgaWYgKCRzcWxfc2VydmVyKSB7DQogICAgJHNxbF9zb2NrID0gbXlzcWxfY29ubmVjdCgkc3FsX3NlcnZlci4iOiIuJHNxbF9wb3J0LCAkc3FsX2xvZ2luLCAkc3FsX3Bhc3N3ZCk7DQogICAgJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoKTsNCiAgICBAbXlzcWxfc2VsZWN0X2RiKCRzcWxfZGIsJHNxbF9zb2NrKTsNCiAgICBpZiAoJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgeyRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOyAkc3FsX3F1ZXJ5X2Vycm9yID0gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgfQ0KICBlbHNlIHskc3FsX3NvY2sgPSBGQUxTRTt9DQogIGVjaG8gIi46IFNRTCBNYW5hZ2VyIDouPGJyPiI7DQogIGlmICghJHNxbF9zb2NrKSB7DQogICAgaWYgKCEkc3FsX3NlcnZlcikge2VjaG8gIk5PIENPTk5FQ1RJT04iO30NCiAgICBlbHNlIHtlY2hvICJDYW4ndCBjb25uZWN0ISAiLiRlcnI7fQ0KICB9DQogIGVsc2Ugew0KICAgICRzcWxxdWlja2xhdW5jaCA9IGFycmF5KCk7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiSW5kZXgiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiYiKTsNCiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKSk7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyLXN0YXR1cyIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF94PXNlcnZlcnN0YXR1cyIpOw0KICAgICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlciB2YXJpYWJsZXMiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfeD1zZXJ2ZXJ2YXJzIik7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9cHJvY2Vzc2VzIik7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiTG9nb3V0Iiwkc3VybC4ieD1zcWwiKTsNCiAgICBlY2hvICJNeVNRTCAiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIgKHByb3RvIHYuIi5teXNxbF9nZXRfcHJvdG9faW5mbyAoKS4iKSBydW5uaW5nIGluICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIjoiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iIGFzICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iQCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiAocGFzc3dvcmQgLSBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiKTxicj4iOw0KICAgIGlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiBdICI7fX0NCiAgfQ0KICBlY2hvICI8L3RkPjwvdHI+PHRyPiI7DQogIGlmICghJHNxbF9zb2NrKSB7DQogICAgZWNobyAiPHRkIHdpZHRoPVwiMjglXCIgaGVpZ2h0PVwiMTAwXCIgdmFsaWduPVwidG9wXCI+PGxpPklmIGxvZ2luIGlzIG51bGwsIGxvZ2luIGlzIG93bmVyIG9mIHByb2Nlc3MuPGxpPklmIGhvc3QgaXMgbnVsbCwgaG9zdCBpcyBsb2NhbGhvc3Q8L2I+PGxpPklmIHBvcnQgaXMgbnVsbCwgcG9ydCBpcyAzMzA2IChkZWZhdWx0KTwvdGQ+PHRkIHdpZHRoPVwiOTAlXCIgaGVpZ2h0PTEgdmFsaWduPVwidG9wXCI+IjsNCiAgICBlY2hvICI8dGFibGUgd2lkdGg9XCIxMDAlXCIgYm9yZGVyPTA+PHRyPjx0ZD48Yj5QbGVhc2UsIGZpbGwgdGhlIGZvcm06PC9iPjx0YWJsZT48dHI+PHRkPjxiPlVzZXJuYW1lPC9iPjwvdGQ+PHRkPjxiPlBhc3N3b3JkPC9iPjwvdGQ+PHRkPjxiPkRhdGFiYXNlPC9iPjwvdGQ+PC90cj48Zm9ybSBhY3Rpb249XCIgJHN1cmwgXCIgbWV0aG9kPVwiUE9TVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInhcIiB2YWx1ZT1cInNxbFwiPjx0cj48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwicm9vdFwiIG1heGxlbmd0aD1cIjY0XCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCJcIiBtYXhsZW5ndGg9XCI2NFwiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIlwiIG1heGxlbmd0aD1cIjY0XCI+PC90ZD48L3RyPjx0cj48dGQ+PGI+SG9zdDwvYj48L3RkPjx0ZD48Yj5QT1JUPC9iPjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPXJpZ2h0PjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCJsb2NhbGhvc3RcIiBtYXhsZW5ndGg9XCI2NFwiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiMzMwNlwiIG1heGxlbmd0aD1cIjZcIiBzaXplPVwiM1wiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25uZWN0XCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+IjsNCiAgfQ0KICBlbHNlIHsNCiAgICBpZiAoIWVtcHR5KCRzcWxfZGIpKSB7DQogICAgICA/Pjx0ZCB3aWR0aD0iMjUlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiYiOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+DQogICAgICA8P3BocA0KICAgICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfdGFibGVzKCRzcWxfZGIpOw0KICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICAgZWxzZSB7DQogICAgICAgIGVjaG8gIi0tLVsgPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiImXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiI8L2I+PC9hPiBdLS0tPGJyPiI7DQogICAgICAgICRjID0gMDsNCiAgICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRjb3VudCA9IG15c3FsX3F1ZXJ5ICgiU0VMRUNUIENPVU5UKCopIEZST00gIi4kcm93WzBdKTsgJGNvdW50X3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRjb3VudCk7IGVjaG8gIjxiPismbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIiZzcWxfdGJsPSIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiI8L2I+PC9hPiAoIi4kY291bnRfcm93WzBdLiIpPC9icj48L2I+IjsgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsgJGMrKzt9DQogICAgICAgIGlmICghJGMpIHtlY2hvICJObyB0YWJsZXMgZm91bmQgaW4gZGF0YWJhc2UuIjt9DQogICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgPz48dGQgd2lkdGg9IjEiIGhlaWdodD0iMTAwIiB2YWxpZ249InRvcCI+PGEgaHJlZj0iPD9waHAgZWNobyAkc3FsX3N1cmw7ID8+Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT4NCiAgICAgIDw/cGhwDQogICAgICAkcmVzdWx0ID0gbXlzcWxfbGlzdF9kYnMoJHNxbF9zb2NrKTsNCiAgICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgIGVsc2Ugew0KICAgICAgICA/Pjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PHNlbGVjdCBuYW1lPSJzcWxfZGIiPg0KICAgICAgICA8P3BocA0KICAgICAgICAkYyA9IDA7DQogICAgICAgICRkYnMgPSAiIjsNCiAgICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpIHskZGJzIC49ICI8b3B0aW9uIHZhbHVlPVwiIi4kcm93WzBdLiJcIiI7IGlmICgkc3FsX2RiID09ICRyb3dbMF0pIHskZGJzIC49ICIgc2VsZWN0ZWQiO30gJGRicyAuPSAiPiIuJHJvd1swXS4iPC9vcHRpb24+IjsgJGMrKzt9DQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5EYXRhYmFzZXMgKCIuJGMuIik8L29wdGlvbj4iOw0KICAgICAgICBlY2hvICRkYnM7DQogICAgICB9DQogICAgICA/Pjwvc2VsZWN0PjxociBzaXplPSIxIiBub3NoYWRlPlBsZWFzZSwgc2VsZWN0IGRhdGFiYXNlPGhyIHNpemU9IjEiIG5vc2hhZGU+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIj48L2Zvcm0+DQogICAgICA8P3BocA0KICAgIH0NCiAgICBlY2hvICI8L3RkPjx0ZCB3aWR0aD1cIjEwMCVcIj4iOw0KICAgICRkaXBsYXkgPSBUUlVFOw0KICAgIGlmICgkc3FsX2RiKSB7DQogICAgICBpZiAoIWlzX251bWVyaWMoJGMpKSB7JGMgPSAwO30NCiAgICAgIGlmICgkYyA9PSAwKSB7JGMgPSAibm8iO30NCiAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UaGVyZSBhcmUgIi4kYy4iIHRhYmxlKHMpIGluIHRoaXMgREIgKCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iKS48YnI+IjsNCiAgICAgIGlmIChjb3VudCgkZGJxdWlja2xhdW5jaCkgPiAwKSB7Zm9yZWFjaCgkZGJzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkge2VjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiO319DQogICAgICBlY2hvICI8L2I+PC9jZW50ZXI+IjsNCiAgICAgICRhY3RzID0gYXJyYXkoIiIsImR1bXAiKTsNCiAgICAgIGlmICgkc3FsX3ggPT0gInRibGRyb3AiKSB7JHNxbF9xdWVyeSA9ICJEUk9QIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibGVtcHR5IikgeyRzcWxfcXVlcnkgPSAiIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFIEZST00gYCIuJHYuImAgXG4iO30gJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX3ggPSAiZHVtcCI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibGNoZWNrIikgeyRzcWxfcXVlcnkgPSAiQ0hFQ0sgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsb3B0aW1pemUiKSB7JHNxbF9xdWVyeSA9ICJPUFRJTUlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsYW5hbHl6ZSIpIHskc3FsX3F1ZXJ5ID0gIkFOQUxZWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAiZGVsZXRlcm93IikgeyRzcWxfcXVlcnkgPSAiIjsgaWYgKCFlbXB0eSgkYm94cm93X2FsbCkpIHskc3FsX3F1ZXJ5ID0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImA7Ijt9IGVsc2Uge2ZvcmVhY2goJGJveHJvdyBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImAgV0hFUkUiLiR2LiIgTElNSVQgMTtcbiI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSk7fSAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0Iikgew0KICAgICAgICBpZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDEpIHsNCiAgICAgICAgICAka2V5cyA9ICIiOw0KICAgICAgICAgICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsNCiAgICAgICAgICBmb3JlYWNoICgkYWtleXMgYXMgJHYpIHska2V5cyAuPSAiYCIuYWRkc2xhc2hlcygkdikuImAsICI7fQ0KICAgICAgICAgIGlmICghZW1wdHkoJGtleXMpKSB7JGtleXMgPSBzdWJzdHIoJGtleXMsMCxzdHJsZW4oJGtleXMpLTIpO30NCiAgICAgICAgICAkdmFsdWVzID0gIiI7DQogICAgICAgICAgJGkgPSAwOw0KICAgICAgICAgIGZvcmVhY2ggKGFycmF5X3ZhbHVlcygkc3FsX3RibF9pbnNlcnQpIGFzICR2KSB7aWYgKCRmdW5jdCA9ICRzcWxfdGJsX2luc2VydF9mdW5jdHNbJGFrZXlzWyRpXV0pIHskdmFsdWVzIC49ICRmdW5jdC4iICgiO30gJHZhbHVlcyAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOyBpZiAoJGZ1bmN0KSB7JHZhbHVlcyAuPSAiKSI7fSAkdmFsdWVzIC49ICIsICI7ICRpKys7fQ0KICAgICAgICAgIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQ0KICAgICAgICAgICRzcWxfcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJHNxbF90YmwuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyI7DQogICAgICAgICAgJHNxbF94ID0gInF1ZXJ5IjsNCiAgICAgICAgICAkc3FsX3RibF94ID0gImJyb3dzZSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMikgew0KICAgICAgICAgICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOw0KICAgICAgICAgICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOw0KICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7DQogICAgICAgICAgJHNxbF94ID0gInF1ZXJ5IjsNCiAgICAgICAgICAkc3FsX3RibF94ID0gImJyb3dzZSI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgkc3FsX3ggPT0gInF1ZXJ5Iikgew0KICAgICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgICAgIGlmICgoJHN1Ym1pdCkgYW5kICghJHNxbF9xdWVyeV9yZXN1bHQpIGFuZCAoJHNxbF9jb25maXJtKSkge2lmICghJHNxbF9xdWVyeV9lcnJvcikgeyRzcWxfcXVlcnlfZXJyb3IgPSAiUXVlcnkgd2FzIGVtcHR5Ijt9IGVjaG8gIjxiPkVycm9yOjwvYj4gPGJyPiIuJHNxbF9xdWVyeV9lcnJvci4iPGJyPiI7fQ0KICAgICAgICBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF94ID0gJHNxbF9nb3RvO30NCiAgICAgICAgaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfeCkpIHtlY2hvICI8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjFcIj48dHI+PHRkPjxmb3JtIGFjdGlvbj1cIiIuJHNxbF9zdXJsLiJcIiBtZXRob2Q9XCJQT1NUXCI+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0bzoiO30gZWxzZSB7ZWNobyAiU1FMLVF1ZXJ5IDoiO30gZWNobyAiPC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9XCJzcWxfcXVlcnlcIiBjb2xzPVwiMTAwXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3hcIiB2YWx1ZT1cInF1ZXJ5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzcWxfY29uZmlybVwiIHZhbHVlPVwiWWVzXCI+IDxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJOb1wiPjwvZm9ybT48L3RkPjwvdHI+PC90YWJsZT4iO30NCiAgICAgIH0NCiAgICAgIGlmIChpbl9hcnJheSgkc3FsX3gsJGFjdHMpKSB7DQogICAgICAgID8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPg0KICAgICAgICA8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0ibmV3dGJsIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2RiIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3dGJsIiBzaXplPSIyMCI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPg0KICAgICAgICA8L2Zvcm0+PC90ZD4NCiAgICAgICAgPHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+RHVtcCBEQjo8L2I+DQogICAgICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJkdW1wIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2RiIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZHVtcF9maWxlIiBzaXplPSIzMCIgdmFsdWU9Ijw/cGhwIGVjaG8gImR1bXBfIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIl8iLiRzcWxfZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOyA/PiI+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPSJEdW1wIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjwvdHI+PC90YWJsZT4NCiAgICAgICAgPD9waHANCiAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3gpKSB7ZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iO30NCiAgICAgICAgaWYgKCRzcWxfeCA9PSAibmV3dGJsIikgew0KICAgICAgICAgIGVjaG8gIjxiPiI7DQogICAgICAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHsNCiAgICAgICAgICAgIGVjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Uge2VjaG8gIkNhbid0IGNyZWF0ZSBEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIuPGJyPlJlYXNvbjo8L2I+ICIubXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCRzcWxfeCA9PSAiZHVtcCIpIHsNCiAgICAgICAgICBpZiAoZW1wdHkoJHN1Ym1pdCkpIHsNCiAgICAgICAgICAgICRkaXBsYXkgPSBGQUxTRTsNCiAgICAgICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInhcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF94XCIgdmFsdWU9XCJkdW1wXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxiPlNRTC1EdW1wOjwvYj48YnI+PGJyPiI7DQogICAgICAgICAgICBlY2hvICI8Yj5EQjo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7DQogICAgICAgICAgICAkdiA9IGpvaW4gKCI7IiwkZG1wdGJscyk7DQogICAgICAgICAgICBlY2hvICI8Yj5Pbmx5IHRhYmxlcyAoZXhwbG9kZSBcIjtcIikmbmJzcDs8Yj48c3VwPjE8L3N1cD48L2I+OjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZG1wdGJsc1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkdikrNSkuIlwiPjxicj48YnI+IjsNCiAgICAgICAgICAgIGlmICgkZHVtcF9maWxlKSB7JHRtcCA9ICRkdW1wX2ZpbGU7fQ0KICAgICAgICAgICAgZWxzZSB7JHRtcCA9IGh0bWxzcGVjaWFsY2hhcnMoIi4vZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCIpO30NCiAgICAgICAgICAgIGVjaG8gIjxiPkZpbGU6PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZHVtcF9maWxlXCIgdmFsdWU9XCIiLiR0bXAuIlwiIHNpemU9XCIiLihzdHJsZW4oJHRtcCkrc3RybGVuKCR0bXApICUgMzApLiJcIj48YnI+PGJyPiI7DQogICAgICAgICAgICBlY2hvICI8Yj5Eb3dubG9hZDogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsNCiAgICAgICAgICAgIGVjaG8gIjxiPlNhdmUgdG8gZmlsZTogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfc2F2ZXRvZmlsZVwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+IjsNCiAgICAgICAgICAgIGVjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCJEdW1wXCI+PGJyPjxicj48Yj48c3VwPjE8L3N1cD48L2I+IC0gYWxsLCBpZiBlbXB0eSI7DQogICAgICAgICAgICBlY2hvICI8L2Zvcm0+IjsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkZGlwbGF5ID0gVFJVRTsNCiAgICAgICAgICAgICRzZXQgPSBhcnJheSgpOw0KICAgICAgICAgICAgJHNldFsic29jayJdID0gJHNxbF9zb2NrOw0KICAgICAgICAgICAgJHNldFsiZGIiXSA9ICRzcWxfZGI7DQogICAgICAgICAgICAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOw0KICAgICAgICAgICAgJHNldFsicHJpbnQiXSA9IDA7DQogICAgICAgICAgICAkc2V0WyJubDJiciJdID0gMDsNCiAgICAgICAgICAgICRzZXRbIiJdID0gMDsNCiAgICAgICAgICAgICRzZXRbImZpbGUiXSA9ICRkdW1wX2ZpbGU7DQogICAgICAgICAgICAkc2V0WyJhZGRfZHJvcCJdID0gVFJVRTsNCiAgICAgICAgICAgICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOw0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkZG1wdGJscykpIHskc2V0WyJvbmx5dGFicyJdID0gZXhwbG9kZSgiOyIsJGRtcHRibHMpO30NCiAgICAgICAgICAgICRyZXQgPSBteXNxbF9kdW1wKCRzZXQpOw0KICAgICAgICAgICAgaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkgew0KICAgICAgICAgICAgICBAb2JfY2xlYW4oKTsNCiAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkcmV0KSk7DQogICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRzcWxfZHVtcF9maWxlKS4iXCI7Iik7DQogICAgICAgICAgICAgIGVjaG8gJHJldDsNCiAgICAgICAgICAgICAgZXhpdDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2VpZiAoJHNxbF9kdW1wX3NhdmV0b2ZpbGUpIHsNCiAgICAgICAgICAgICAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsNCiAgICAgICAgICAgICAgaWYgKCEkZnApIHtlY2hvICI8Yj5EdW1wIGVycm9yISBDYW4ndCB3cml0ZSB0byBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2R1bXBfZmlsZSkuIlwiISI7fQ0KICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBmd3JpdGUoJGZwLCRyZXQpOw0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgICAgICAgICAgIGVjaG8gIjxiPkR1bXBlZCEgRHVtcCBoYXMgYmVlbiB3cml0ZWQgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMocmVhbHBhdGgoJHNxbF9kdW1wX2ZpbGUpKS4iXCIgKCIudmlld19zaXplKGZpbGVzaXplKCRzcWxfZHVtcF9maWxlKSkuIik8L2I+LiI7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Uge2VjaG8gIjxiPkR1bXA6IG5vdGhpbmcgdG8gZG8hPC9iPiI7fQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGRpcGxheSkgew0KICAgIGlmICghZW1wdHkoJHNxbF90YmwpKSB7DQogICAgICBpZiAoZW1wdHkoJHNxbF90YmxfeCkpIHskc3FsX3RibF94ID0gImJyb3dzZSI7fQ0KICAgICAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOw0KICAgICAgJGNvdW50X3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRjb3VudCk7DQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkY291bnQpOw0KICAgICAgJHRibF9zdHJ1Y3RfcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgRklFTERTIEZST00gYCIuJHNxbF90YmwuImA7Iik7DQogICAgICAkdGJsX3N0cnVjdF9maWVsZHMgPSBhcnJheSgpOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkdGJsX3N0cnVjdF9yZXN1bHQpKSB7JHRibF9zdHJ1Y3RfZmllbGRzW10gPSAkcm93O30NCiAgICAgIGlmICgkc3FsX2xzID4gJHNxbF9sZSkgeyRzcWxfbGUgPSAkc3FsX2xzICsgJHBlcnBhZ2U7fQ0KICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX3BhZ2UpKSB7JHNxbF90YmxfcGFnZSA9IDA7fQ0KICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xzKSkgeyRzcWxfdGJsX2xzID0gMDt9DQogICAgICBpZiAoZW1wdHkoJHNxbF90YmxfbGUpKSB7JHNxbF90YmxfbGUgPSAzMDt9DQogICAgICAkcGVycGFnZSA9ICRzcWxfdGJsX2xlIC0gJHNxbF90YmxfbHM7DQogICAgICBpZiAoIWlzX251bWVyaWMoJHBlcnBhZ2UpKSB7JHBlcnBhZ2UgPSAxMDt9DQogICAgICAkbnVtcGFnZXMgPSAkY291bnRfcm93WzBdLyRwZXJwYWdlOw0KICAgICAgJGUgPSBleHBsb2RlKCIgIiwkc3FsX29yZGVyKTsNCiAgICAgIGlmIChjb3VudCgkZSkgPT0gMikgew0KICAgICAgICBpZiAoJGVbMF0gPT0gImQiKSB7JGFzY19kZXNjID0gIkRFU0MiO30NCiAgICAgICAgZWxzZSB7JGFzY19kZXNjID0gIkFTQyI7fQ0KICAgICAgICAkdiA9ICJPUkRFUiBCWSBgIi4kZVsxXS4iYCAiLiRhc2NfZGVzYy4iICI7DQogICAgICB9DQogICAgICBlbHNlIHskdiA9ICIiO30NCiAgICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgICIuJHYuIkxJTUlUICIuJHNxbF90YmxfbHMuIiAsICIuJHBlcnBhZ2UuIiI7DQogICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Y2VudGVyPjxiPlRhYmxlICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIiAoIi5teXNxbF9udW1fZmllbGRzKCRyZXN1bHQpLiIgY29scyBhbmQgIi4kY291bnRfcm93WzBdLiIgcm93cyk8L2I+PC9jZW50ZXI+IjsNCiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9c3RydWN0dXJlXCI+WzxiPiBTdHJ1Y3R1cmUgPC9iPl08L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9YnJvd3NlXCI+WzxiPiBCcm93c2UgPC9iPl08L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfeD10YmxkdW1wJnRoaXN0Ymw9MVwiPls8Yj4gRHVtcCA8L2I+XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfeD1pbnNlcnRcIj5bJm5ic3A7PGI+SW5zZXJ0PC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgIGlmICgkc3FsX3RibF94ID09ICJzdHJ1Y3R1cmUiKSB7ZWNobyAiPGJyPjxicj48Yj5Db21pbmcgc29vb24hPC9iPiI7fQ0KICAgICAgaWYgKCRzcWxfdGJsX3ggPT0gImluc2VydCIpIHsNCiAgICAgICAgaWYgKCFpc19hcnJheSgkc3FsX3RibF9pbnNlcnQpKSB7JHNxbF90YmxfaW5zZXJ0ID0gYXJyYXkoKTt9DQogICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3JhZGlvKSkgeyAgfSAvL05vdCBSZWFkeQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICBlY2hvICI8YnI+PGJyPjxiPkluc2VydGluZyByb3cgaW50byB0YWJsZTo8L2I+PGJyPiI7DQogICAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHsNCiAgICAgICAgICAgICRzcWxfcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kc3FsX3RibC4iYCI7DQogICAgICAgICAgICAkc3FsX3F1ZXJ5IC49ICIgV0hFUkUiLiRzcWxfdGJsX2luc2VydF9xOw0KICAgICAgICAgICAgJHNxbF9xdWVyeSAuPSAiIExJTUlUIDE7IjsNCiAgICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jaykgb3IgcHJpbnQoIjxicj48YnI+Ii5teXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgICAgICAgJHZhbHVlcyA9IG15c3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpOw0KICAgICAgICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgeyR2YWx1ZXMgPSBhcnJheSgpO30NCiAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PHRhYmxlIHdpZHRoPVwiMSVcIiBib3JkZXI9MT48dHI+PHRkPjxiPkZpZWxkPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+RnVuY3Rpb248L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7DQogICAgICAgICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3RfZmllbGRzIGFzICRmaWVsZCkgew0KICAgICAgICAgICAgJG5hbWUgPSAkZmllbGRbIkZpZWxkIl07DQogICAgICAgICAgICBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7JHYgPSAiIjt9DQogICAgICAgICAgICBlY2hvICI8dHI+PHRkPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIjwvYj48L3RkPjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9XCJzcWxfdGJsX2luc2VydF9mdW5jdHNbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uPlBBU1NXT1JEPC9vcHRpb24+PG9wdGlvbj5NRDU8L29wdGlvbj48b3B0aW9uPkVOQ1JZUFQ8L29wdGlvbj48b3B0aW9uPkFTQ0lJPC9vcHRpb24+PG9wdGlvbj5DSEFSPC9vcHRpb24+PG9wdGlvbj5SQU5EPC9vcHRpb24+PG9wdGlvbj5MQVNUX0lOU0VSVF9JRDwvb3B0aW9uPjxvcHRpb24+Q09VTlQ8L29wdGlvbj48b3B0aW9uPkFWRzwvb3B0aW9uPjxvcHRpb24+U1VNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlwiPi0tLS0tLS0tPC9vcHRpb24+PG9wdGlvbj5TT1VOREVYPC9vcHRpb24+PG9wdGlvbj5MQ0FTRTwvb3B0aW9uPjxvcHRpb24+VUNBU0U8L29wdGlvbj48b3B0aW9uPk5PVzwvb3B0aW9uPjxvcHRpb24+Q1VSREFURTwvb3B0aW9uPjxvcHRpb24+Q1VSVElNRTwvb3B0aW9uPjxvcHRpb24+RlJPTV9EQVlTPC9vcHRpb24+PG9wdGlvbj5GUk9NX1VOSVhUSU1FPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfQUREPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfRElGRjwvb3B0aW9uPjxvcHRpb24+VE9fREFZUzwvb3B0aW9uPjxvcHRpb24+VU5JWF9USU1FU1RBTVA8L29wdGlvbj48b3B0aW9uPlVTRVI8L29wdGlvbj48b3B0aW9uPldFRUtEQVk8L29wdGlvbj48b3B0aW9uPkNPTkNBVDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2luc2VydFsiLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlc1skbmFtZV0pLiJcIiBzaXplPTUwPjwvdGQ+PC90cj4iOw0KICAgICAgICAgICAgJGkrKzsNCiAgICAgICAgICB9DQogICAgICAgICAgZWNobyAiPC90YWJsZT48YnI+IjsNCiAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIxXCIiOyBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjxiPkluc2VydCBhcyBuZXcgcm93PC9iPiI7DQogICAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgb3IgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMlwiIGNoZWNrZWQ+PGI+U2F2ZTwvYj4iOyBlY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9xXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmxfaW5zZXJ0X3EpLiJcIj4iO30NCiAgICAgICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPiI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgkc3FsX3RibF94ID09ICJicm93c2UiKSB7DQogICAgICAgICRzcWxfdGJsX2xzID0gYWJzKCRzcWxfdGJsX2xzKTsNCiAgICAgICAgJHNxbF90YmxfbGUgPSBhYnMoJHNxbF90YmxfbGUpOw0KICAgICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgICAgIGVjaG8gIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPW11bHRpcGFnZVwiIGhlaWdodD1cIjEyXCIgd2lkdGg9XCIxMFwiIGFsdD1cIlBhZ2VzXCI+Jm5ic3A7IjsNCiAgICAgICAgJGIgPSAwOw0KICAgICAgICBmb3IoJGk9MDskaTwkbnVtcGFnZXM7JGkrKykgew0KICAgICAgICAgIGlmICgoJGkqJHBlcnBhZ2UgIT0gJHNxbF90YmxfbHMpIG9yICgkaSokcGVycGFnZSskcGVycGFnZSAhPSAkc3FsX3RibF9sZSkpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX29yZGVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iJnNxbF90YmxfbHM9Ii4oJGkqJHBlcnBhZ2UpLiImc3FsX3RibF9sZT0iLigkaSokcGVycGFnZSskcGVycGFnZSkuIlwiPjx1PiI7fQ0KICAgICAgICAgIGVjaG8gJGk7DQogICAgICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjwvdT48L2E+Ijt9DQogICAgICAgICAgaWYgKCgkaS8zMCA9PSByb3VuZCgkaS8zMCkpIGFuZCAoJGkgPiAwKSkge2VjaG8gIjxicj4iO30NCiAgICAgICAgICBlbHNlIHtlY2hvICImbmJzcDsiO30NCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGkgPT0gMCkge2VjaG8gImVtcHR5Ijt9DQogICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInhcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfb3JkZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbHNcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbHMuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sZVwiIHZhbHVlPVwiIi4kc3FsX3RibF9sZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIlZpZXdcIj48L2Zvcm0+IjsNCiAgICAgICAgZWNobyAiPGJyPjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48VEFCTEUgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMSVcIiBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPiI7DQogICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD4iOw0KICAgICAgICBmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKSB7DQogICAgICAgICAgJHYgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOw0KICAgICAgICAgIGlmICgkZVswXSA9PSAiYSIpIHskcyA9ICJkIjsgJG0gPSAiYXNjIjt9DQogICAgICAgICAgZWxzZSB7JHMgPSAiYSI7ICRtID0gImRlc2MiO30NCiAgICAgICAgICBlY2hvICI8dGQ+IjsNCiAgICAgICAgICBpZiAoZW1wdHkoJGVbMF0pKSB7JGVbMF0gPSAiYSI7fQ0KICAgICAgICAgIGlmICgkZVsxXSAhPSAkdikge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLiRzcWxfdGJsLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX29yZGVyPSIuJGVbMF0uIiUyMCIuJHYuIlwiPjxiPiIuJHYuIjwvYj48L2E+Ijt9DQogICAgICAgICAgZWxzZSB7ZWNobyAiPGI+Ii4kdi4iPC9iPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLiRzcWxfdGJsLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX29yZGVyPSIuJHMuIiUyMCIuJHYuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfIi4kbS4iXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBhbHQ9XCIiLiRtLiJcIj48L2E+Ijt9DQogICAgICAgICAgZWNobyAiPC90ZD4iOw0KICAgICAgICB9DQogICAgICBlY2hvICI8dGQ+PGZvbnQgY29sb3I9XCJsaW1lXCI+PGI+QWN0aW9uPC9iPjwvZm9udD48L3RkPiI7DQogICAgICBlY2hvICI8L3RyPiI7DQogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkgew0KICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgICR3ID0gIiI7DQogICAgICAgJGkgPSAwOw0KICAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJGs9PiR2KSB7JG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOyAkdyAuPSAiIGAiLiRuYW1lLiJgID0gJyIuYWRkc2xhc2hlcygkdikuIicgQU5EIjsgJGkrKzt9DQogICAgICAgaWYgKGNvdW50KCRyb3cpID4gMCkgeyR3ID0gc3Vic3RyKCR3LDAsc3RybGVuKCR3KS0zKTt9DQogICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94cm93W11cIiB2YWx1ZT1cIiIuJHcuIlwiPjwvdGQ+IjsNCiAgICAgICAkaSA9IDA7DQogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpDQogICAgICAgew0KICAgICAgICAkdiA9IGh0bWxzcGVjaWFsY2hhcnMoJHYpOw0KICAgICAgICBpZiAoJHYgPT0gIiIpIHskdiA9ICI8Zm9udCBjb2xvcj1cImxpbWVcIj5OVUxMPC9mb250PiI7fQ0KICAgICAgICBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iOw0KICAgICAgICAkaSsrOw0KICAgICAgIH0NCiAgICAgICBlY2hvICI8dGQ+IjsNCiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF94PXF1ZXJ5JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHcuIiBMSU1JVCAxOyIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEZWxldGVcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyI7DQogICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsX3g9aW5zZXJ0JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9pbnNlcnRfcT0iLnVybGVuY29kZSgkdykuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkVkaXRcIiBoZWlnaHQ9XCIxNFwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyI7DQogICAgICAgZWNobyAiPC90ZD4iOw0KICAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIH0NCiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwibGVmdFwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj48c2VsZWN0IG5hbWU9XCJzcWxfeFwiPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cImRlbGV0ZXJvd1wiPkRlbGV0ZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsNCiAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFIFNUQVRVUyIsICRzcWxfc29jayk7DQogICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdjb2xvcj0jMDAwMDAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94dGJsX2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+PHRkPjxjZW50ZXI+PGI+VGFibGU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGI+Um93czwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkNyZWF0ZWQ8L2I+PC90ZD48dGQ+PGI+TW9kaWZpZWQ8L2I+PC90ZD48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7DQogICAgICAkaSA9IDA7DQogICAgICAkdHNpemUgPSAkdHJvd3MgPSAwOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpDQogICAgICB7DQogICAgICAgJHRzaXplICs9ICRyb3dbIkRhdGFfbGVuZ3RoIl07DQogICAgICAgJHRyb3dzICs9ICRyb3dbIlJvd3MiXTsNCiAgICAgICAkc2l6ZSA9IHZpZXdfc2l6ZSgkcm93WyJEYXRhX2xlbmd0aCJdKTsNCiAgICAgICBlY2hvICI8dHI+IjsNCiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxbXVwiIHZhbHVlPVwiIi4kcm93WyJOYW1lIl0uIlwiPjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRyb3dbIk5hbWUiXSkuIlwiPjxiPiIuJHJvd1siTmFtZSJdLiI8L2I+PC9hPiZuYnNwOzwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJSb3dzIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJUeXBlIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJDcmVhdGVfdGltZSJdLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiIuJHJvd1siVXBkYXRlX3RpbWUiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRzaXplLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c3FsX2J1dHRvbl9lbXB0eVwiIGFsdD1cIkVtcHR5XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF94PXF1ZXJ5JnNxbF9xdWVyeT0iLnVybGVuY29kZSgiRFJPUCBUQUJMRSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c3FsX2J1dHRvbl9kcm9wXCIgYWx0PVwiRHJvcFwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsX3g9aW5zZXJ0JnNxbF90Ymw9Ii4kcm93WyJOYW1lIl0uIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNxbF9idXR0b25faW5zZXJ0XCIgYWx0PVwiSW5zZXJ0XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8L3RkPiI7DQogICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgICRpKys7DQogICAgICB9DQogICAgICBlY2hvICI8dHIgYmdjb2xvcj1cIjAwMDAwMFwiPiI7DQogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj4rPC9iPjwvY2VudGVyPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Y2VudGVyPjxiPiIuJGkuIiB0YWJsZShzKTwvYj48L2NlbnRlcj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PGI+Ii4kdHJvd3MuIjwvYj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzFdLiI8L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzEwXS4iPC90ZD4iOw0KICAgICAgZWNobyAiPHRkPiIuJHJvd1sxMV0uIjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Yj4iLnZpZXdfc2l6ZSgkdHNpemUpLiI8L2I+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cInJpZ2h0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF94XCI+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHJvcFwiPkRyb3A8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGVtcHR5XCI+RW1wdHk8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGR1bXBcIj5EdW1wPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxjaGVja1wiPkNoZWNrIHRhYmxlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxvcHRpbWl6ZVwiPk9wdGltaXplIHRhYmxlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxyZXBhaXJcIj5SZXBhaXIgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGFuYWx5emVcIj5BbmFseXplIHRhYmxlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPjwvcD4iOw0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgIH0NCiAgICB9DQogICB9DQogICB9DQogIH0NCiAgZWxzZSB7DQogICAkYWN0cyA9IGFycmF5KCIiLCJuZXdkYiIsInNlcnZlcnN0YXR1cyIsInNlcnZlcnZhcnMiLCJwcm9jZXNzZXMiLCJnZXRmaWxlIik7DQogICBpZiAoaW5fYXJyYXkoJHNxbF94LCRhY3RzKSkgez8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0ibmV3ZGIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9uZXdkYiIgc2l6ZT0iMjAiPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPlZpZXcgRmlsZTo8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJnZXRmaWxlIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZ2V0ZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nZXRmaWxlKTsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwIH0NCiAgIGlmICghZW1wdHkoJHNxbF94KSkgew0KICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICBpZiAoJHNxbF94ID09ICJuZXdkYiIpIHsNCiAgICAgZWNobyAiPGI+IjsNCiAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHtlY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iO30NCiAgICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQ0KICAgIH0NCiAgICBpZiAoJHNxbF94ID09ICJzZXJ2ZXJzdGF0dXMiKSB7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBTVEFUVVMiLCAkc3FsX3NvY2spOw0KICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlci1zdGF0dXMgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdjb2xvcj0jMDAwMDAwIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQ0KICAgICBlY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF94ID09ICJzZXJ2ZXJ2YXJzIikgew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVkFSSUFCTEVTIiwgJHNxbF9zb2NrKTsNCiAgICAgZWNobyAiPGNlbnRlcj48Yj5TZXJ2ZXIgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdjb2xvcj0jMDAwMDAwIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQ0KICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF94ID09ICJwcm9jZXNzZXMiKSB7DQogICAgIGlmICghZW1wdHkoJGtpbGwpKSB7DQogICAgICAgJHF1ZXJ5ID0gIktJTEwgIi4ka2lsbC4iOyI7DQogICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJHNxbF9zb2NrKTsNCiAgICAgICBlY2hvICI8Yj5Qcm9jZXNzICMiLiRraWxsLiIgd2FzIGtpbGxlZC48L2I+IjsNCiAgICAgfQ0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgUFJPQ0VTU0xJU1QiLCAkc3FsX3NvY2spOw0KICAgICBlY2hvICI8Y2VudGVyPjxiPlByb2Nlc3Nlczo8L2I+PGJyPjxicj4iOw0KICAgICBlY2hvICI8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0yIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+SUQ8L2I+PC90ZD48dGQ+PGI+VVNFUjwvYj48L3RkPjx0ZD48Yj5IT1NUPC9iPjwvdGQ+PHRkPjxiPkRCPC9iPjwvdGQ+PHRkPjxiPkNPTU1BTkQ8L2I+PC90ZD48dGQ+PGI+VElNRTwvYj48L3RkPjx0ZD48Yj5TVEFURTwvYj48L3RkPjx0ZD48Yj5JTkZPPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7IGVjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PHRkPiIuJHJvd1syXS4iPC90ZD48dGQ+Ii4kcm93WzNdLiI8L3RkPjx0ZD4iLiRyb3dbNF0uIjwvdGQ+PHRkPiIuJHJvd1s1XS4iPC90ZD48dGQ+Ii4kcm93WzZdLiI8L3RkPjx0ZD4iLiRyb3dbN10uIjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX3ggPT0gImdldGZpbGUiKQ0KICAgIHsNCiAgICAgJHRtcGRiID0gJHNxbF9sb2dpbi4iX3RtcGRiIjsNCiAgICAgJHNlbGVjdCA9IG15c3FsX3NlbGVjdF9kYigkdG1wZGIpOw0KICAgICBpZiAoISRzZWxlY3QpIHtteXNxbF9jcmVhdGVfZGIoJHRtcGRiKTsgJHNlbGVjdCA9IG15c3FsX3NlbGVjdF9kYigkdG1wZGIpOyAkY3JlYXRlZCA9ICEhJHNlbGVjdDt9DQogICAgIGlmICgkc2VsZWN0KQ0KICAgICB7DQogICAgICAkY3JlYXRlZCA9IEZBTFNFOw0KICAgICAgbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgdG1wX2ZpbGVgICggYFZpZXdpbmcgdGhlIGZpbGUgaW4gc2FmZV9tb2RlK29wZW5fYmFzZWRpcmAgTE9OR0JMT0IgTk9UIE5VTEwgKTsiKTsNCiAgICAgIG15c3FsX3F1ZXJ5KCJMT0FEIERBVEEgSU5GSUxFIFwiIi5hZGRzbGFzaGVzKCRzcWxfZ2V0ZmlsZSkuIlwiIElOVE8gVEFCTEUgdG1wX2ZpbGUiKTsNCiAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSB0bXBfZmlsZTsiKTsNCiAgICAgIGlmICghJHJlc3VsdCkge2VjaG8gIjxiPkVycm9yIGluIHJlYWRpbmcgZmlsZSAocGVybWlzaW9uIGRlbmllZCkhPC9iPiI7fQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgIGZvciAoJGk9MDskaTxteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOyRpKyspIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7fQ0KICAgICAgICRmID0gIiI7DQogICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHskZiAuPSBqb2luICgiXHJcbiIsJHJvdyk7fQ0KICAgICAgIGlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQ0KICAgICAgIGVsc2Uge2VjaG8gIjxiPkZpbGUgXCIiLiRzcWxfZ2V0ZmlsZS4iXCI6PC9iPjxicj4iLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJGYpKS4iPGJyPiI7fQ0KICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgIG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOw0KICAgICAgfQ0KICAgICB9DQogICAgIG15c3FsX2Ryb3BfZGIoJHRtcGRiKTsgDQogICAgfQ0KICAgfQ0KICB9DQp9DQplY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KaWYgKCRzcWxfc29jaykgew0KICAkYWZmZWN0ZWQgPSBAbXlzcWxfYWZmZWN0ZWRfcm93cygkc3FsX3NvY2spOw0KICBpZiAoKCFpc19udW1lcmljKCRhZmZlY3RlZCkpIG9yICgkYWZmZWN0ZWQgPCAwKSl7JGFmZmVjdGVkID0gMDt9DQogIGVjaG8gIjx0cj48dGQ+PGNlbnRlcj48Yj5BZmZlY3RlZCByb3dzIDogIi4kYWZmZWN0ZWQuIjwvY2VudGVyPjwvdGQ+PC90cj4iOw0KfQ0KZWNobyAiPC90YWJsZT4iOw0KfQ0KaWYgKCR4ID09ICJwaHBpbmZvIikge0BvYl9jbGVhbigpOyBwaHBpbmZvKCk7IGJvZ2VsZXhpdCgpO30NCmlmICgkeCA9PSAic2VjdXJpdHkiKSB7DQogIGVjaG8gIjxkaXYgY2xhc3M9YmFyaGVhZGVyPi46IFNlcnZlciBTZWN1cml0eSBJbmZvcm1hdGlvbiA6LjwvZGl2PiIuDQogICAgICAgIjx0YWJsZT4iLg0KICAgICAgICI8dHI+PHRkPk9wZW4gQmFzZSBEaXI8L3RkPjx0ZD4iLiRob3BlbmJhc2VkaXIuIjwvdGQ+PC90cj4iOw0KICBlY2hvICI8dGQ+UGFzc3dvcmQgRmlsZTwvdGQ+PHRkPiI7DQogIGlmICghJHdpbikgew0KICAgIGlmICgkbml4cGFzc3dkKSB7DQogICAgICBpZiAoJG5peHBhc3N3ZCA9PSAxKSB7JG5peHBhc3N3ZCA9IDA7fQ0KICAgICAgZWNobyAiKm5peCAvZXRjL3Bhc3N3ZDo8YnI+IjsNCiAgICAgIGlmICghaXNfbnVtZXJpYygkbml4cHdkX3MpKSB7JG5peHB3ZF9zID0gMDt9DQogICAgICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9lKSkgeyRuaXhwd2RfZSA9ICRuaXhwd2RwZXJwYWdlO30NCiAgICAgIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9XCJzZWN1cml0eVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwibml4cGFzc3dkXCIgdmFsdWU9XCIxXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0PVwiIG5hbWU9XCJuaXhwd2Rfc1wiIHZhbHVlPVwiIi4kbml4cHdkX3MuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibml4cHdkX2VcIiB2YWx1ZT1cIiIuJG5peHB3ZF9lLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJWaWV3XCI+PC9mb3JtPjxicj4iOw0KICAgICAgJGkgPSAkbml4cHdkX3M7DQogICAgICB3aGlsZSAoJGkgPCAkbml4cHdkX2UpIHsNCiAgICAgICAgJHVpZCA9IHBvc2l4X2dldHB3dWlkKCRpKTsNCiAgICAgICAgaWYgKCR1aWQpIHsNCiAgICAgICAgICAkdWlkWyJkaXIiXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1scyZkPSIudXJsZW5jb2RlKCR1aWRbImRpciJdKS4iXCI+Ii4kdWlkWyJkaXIiXS4iPC9hPiI7DQogICAgICAgICAgZWNobyBqb2luKCI6IiwkdWlkKS4iPGJyPiI7DQogICAgICAgIH0NCiAgICAgICAgJGkrKzsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7ZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuIng9c2VjdXJpdHkmbml4cGFzc3dkPTEmZD0iLiR1ZC4iXCI+PGI+PHU+R2V0IC9ldGMvcGFzc3dkPC91PjwvYj48L2E+Ijt9DQogIH0NCiAgZWxzZSB7DQogICAgJHYgPSAkX1NFUlZFUlsiV0lORElSIl0uIlxyZXBhaXJcc2FtIjsNCiAgICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHYpKSB7ZWNobyAiPHRkIGNvbHNwYW49Mj48ZGl2IGNsYXNzPWZ4ZXJybXNnPllvdSBjYW4ndCBjcmFjayBXaW5kb3dzIHBhc3N3b3JkcygiLiR2LiIpPC9kaXY+PC90ZD48L3RyPiI7IH0NCiAgICBlbHNlIHtlY2hvICJZb3UgY2FuIGNyYWNrIFdpbmRvd3MgcGFzc3dvcmRzLiA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9c2FtJmQ9Ii4kX1NFUlZFUlsiV0lORElSIl0uIlxccmVwYWlyJmZ0PWRvd25sb2FkXCI+PHU+PGI+RG93bmxvYWQ8L2I+PC91PjwvYT4sIGFuZCB1c2UgbGNwLmNyYWNrKyA/LjwvdGQ+PC90cj4iO30NCiAgfQ0KICBlY2hvICI8L3RkPjwvdHI+IjsNCiAgZWNobyAiPHRyPjx0ZD5Db25maWcgRmlsZXM8L3RkPjx0ZD4iOw0KICBpZiAoISR3aW4pIHsNCiAgICAkdiA9IGFycmF5KA0KICAgICAgICBhcnJheSgiVXNlciBEb21haW5zIiwiL2V0Yy91c2VyZG9tYWlucyIpLA0KICAgICAgICBhcnJheSgiQ3BhbmVsIENvbmZpZyIsIi92YXIvY3BhbmVsL2FjY291bnRpbmcubG9nIiksDQogICAgICAgIGFycmF5KCJBcGFjaGUgQ29uZmlnIiwiL3Vzci9sb2NhbC9hcGFjaGUvY29uZi9odHRwZC5jb25mIiksDQogICAgICAgIGFycmF5KCJBcGFjaGUgQ29uZmlnIiwiL2V0Yy9odHRwZC5jb25mIiksDQogICAgICAgIGFycmF5KCJTeXNsb2cgQ29uZmlnIiwiL2V0Yy9zeXNsb2cuY29uZiIpLA0KICAgICAgICBhcnJheSgiTWVzc2FnZSBvZiBUaGUgRGF5IiwiL2V0Yy9tb3RkIiksDQogICAgICAgIGFycmF5KCJIb3N0cyIsIi9ldGMvaG9zdHMiKQ0KICAgICk7DQogICAgJHNlcCA9ICIvIjsNCiAgfQ0KICBlbHNlIHsNCiAgICAkd2luZGlyID0gJF9TRVJWRVJbIldJTkRJUiJdOw0KICAgICRldGNkaXIgPSAkd2luZGlyIC4gIlxzeXN0ZW0zMlxkcml2ZXJzXGV0Y1xcIjsNCiAgICAkdiA9IGFycmF5KA0KICAgICAgICBhcnJheSgiSG9zdHMiLCRldGNkaXIuImhvc3RzIiksDQogICAgICAgIGFycmF5KCJMb2NhbCBOZXR3b3JrIE1hcCIsJGV0Y2Rpci4ibmV0d29ya3MiKSwNCiAgICAgICAgYXJyYXkoIkxNIEhvc3RzIiwkZXRjZGlyLiJsbWhvc3RzLnNhbSIpLA0KICAgICk7DQogICAgJHNlcCA9ICJcXCI7DQogIH0NCiAgZm9yZWFjaCAoJHYgYXMgJHNlY19hcnIpIHsNCiAgICAkc2VjX2YgPSBzdWJzdHIoc3RycmNocigkc2VjX2FyclsxXSwgJHNlcCksIDEpOw0KICAgICRzZWNfZCA9IHJ0cmltKCRzZWNfYXJyWzFdLCRzZWNfZik7DQogICAgJHNlY19mdWxsID0gJHNlY19kLiRzZWNfZjsNCiAgICAkc2VjX2QgPSBydHJpbSgkc2VjX2QsJHNlcCk7DQogICAgaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCRzZWNfZnVsbCkpIHsNCiAgICAgIGVjaG8gIiBbIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0kc2VjX2YmZD0iLnVybGVuY29kZSgkc2VjX2QpLiImZnQ9dHh0XCI+PHU+PGI+Ii4kc2VjX2FyclswXS4iPC9iPjwvdT48L2E+IF0gIjsNCiAgICB9DQogIH0NCiAgZWNobyAiPC90ZD48L3RyPiI7DQoNCiAgZnVuY3Rpb24gZGlzcGxheXNlY2luZm8oJG5hbWUsJHZhbHVlKSB7DQogICAgaWYgKCFlbXB0eSgkdmFsdWUpKSB7DQogICAgICBlY2hvICI8dHI+PHRkPiIuJG5hbWUuIjwvdGQ+PHRkPjxwcmU+Ii53b3Jkd3JhcCgkdmFsdWUsMTAwKS4iPC9wcmU+PC90ZD48L3RyPiI7DQogICAgfQ0KICB9DQogIGlmICghJHdpbikgew0KICAgIGRpc3BsYXlzZWNpbmZvKCJPUyBWZXJzaW9uIixteXNoZWxsZXhlYygiY2F0IC9wcm9jL3ZlcnNpb24iKSk7DQogICAgZGlzcGxheXNlY2luZm8oIktlcm5lbCBWZXJzaW9uIixteXNoZWxsZXhlYygic3lzY3RsIC1hIHwgZ3JlcCB2ZXJzaW9uIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJEaXN0cmliIE5hbWUiLG15c2hlbGxleGVjKCJjYXQgL2V0Yy9pc3N1ZSIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiRGlzdHJpYiBOYW1lICgyKSIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2lzc3VlLnJwbW5ldyIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiQ1BVIEluZm8iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvY3B1aW5mbyIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiUkFNIixteXNoZWxsZXhlYygiZnJlZSAtbSIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiSEREIFNwYWNlIixteXNoZWxsZXhlYygiZGYgLWgiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxpc3Qgb2YgQXR0cmlidXRlcyIsbXlzaGVsbGV4ZWMoImxzYXR0ciAtYSIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiTW91bnQgT3B0aW9ucyIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2ZzdGFiIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJjVVJMIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBjdXJsIikpOw0KCWRpc3BsYXlzZWNpbmZvKCJseW54IGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBseW54IikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJsaW5rcyBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggbGlua3MiKSk7DQogICAgZGlzcGxheXNlY2luZm8oImZldGNoIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBmZXRjaCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiR0VUIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBHRVQiKSk7DQogICAgZGlzcGxheXNlY2luZm8oInBlcmwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIHBlcmwiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIldoZXJlIGlzIEFwYWNoZT8iLG15c2hlbGxleGVjKCJ3aGVyZWlzIGFwYWNoZSIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiV2hlcmUgaXMgcGVybD8iLG15c2hlbGxleGVjKCJ3aGVyZWlzIHBlcmwiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBwcm9mdHBkLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHJvZnRwZC5jb25mIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJMb2NhdGUgaHR0cGQuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBodHRwZC5jb25mIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJMb2NhdGUgbXkuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBteS5jb25mIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJMb2NhdGUgcHN5Ym5jLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHN5Ym5jLmNvbmYiKSk7DQogIH0NCiAgZWxzZSB7DQogICAgZGlzcGxheXNlY2luZm8oIk9TIFZlcnNpb24iLG15c2hlbGxleGVjKCJ2ZXIiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkFjY291bnQgU2V0dGluZ3MiLG15c2hlbGxleGVjKCJuZXQgYWNjb3VudHMiKSk7DQogIH0NCiAgZWNobyAiPC90YWJsZT5cbiI7DQp9DQoNCmlmICgkeCA9PSAianVtcCIpIHsNCiRuZ2lwbXVqID0gYmFzZTY0X2RlY29kZSgiQ1Nna2MyMGdQU0JwYm1sZloyVjBLQ2R6WVdabFgyMXZaR1VuS1NBOVBTQXdLU0EvSUNSemJTQTlJQ2R2Wm1Zbk9pQmthV1VvSnp4bWIyNTBJSE5wZW1VOUlqUWlJR052Ykc5eVBTSWpNREF3TURBd0lpQm1ZV05sUFNKRFlXeHBZbkpwSWo0OFlqNUZjbkp2Y2pvZ1UyRm1aVjl0YjJSbElEMGdUMjQ4TDJJK1BDOW1iMjUwUGljcE93MEtjMlYwWDNScGJXVmZiR2x0YVhRb01DazdEUXBBSkhCaGMzTjNaQ0E5SUdadmNHVnVLQ2N2WlhSakwzQmhjM04zWkNjc0ozSW5LVHNOQ21sbUlDZ2hKSEJoYzNOM1pDa2dleUJrYVdVb0p6eG1iMjUwSUhOcGVtVTlJalFpSUdOdmJHOXlQU0lqTURBd01EQXdJaUJtWVdObFBTSkRZV3hwWW5KcElqNDhZajViTFYwZ1JYSnliM0lnT2lCRGIzVmtibUIwSUZKbFlXUWdMMlYwWXk5d1lYTnpkMlE4TDJJK1BDOW1iMjUwUGljcE95QjlEUW9rY0hWaUlEMGdZWEp5WVhrb0tUc05DaVIxYzJWeWN5QTlJR0Z5Y21GNUtDazdEUW9rWTI5dVppQTlJR0Z5Y21GNUtDazdEUW9rYVNBOUlEQTdEUXAzYUdsc1pTZ2habVZ2Wmlna2NHRnpjM2RrS1NrTkNuc05DaVJ6ZEhJZ1BTQm1aMlYwY3lna2NHRnpjM2RrS1RzTkNtbG1JQ2drYVNBK0lERXdNQ2tOQ25zTkNpQWdKSEJ2Y3lBOUlITjBjbkJ2Y3lna2MzUnlMQ2M2SnlrN0RRb2dJQ1IxYzJWeWJtRnRaU0E5SUhOMVluTjBjaWdrYzNSeUxEQXNKSEJ2Y3lrN0RRb2dJQ1JrYVhKNklEMGdKeTlvYjIxbEx5Y3VKSFZ6WlhKdVlXMWxMaWN2Y0hWaWJHbGpYMmgwYld3dkp6c05DaUFnYVdZZ0tDZ2tkWE5sY201aGJXVWdJVDBnSnljcEtRMEtJQ0I3RFFvZ0lDQnBaaUFvYVhOZmNtVmhaR0ZpYkdVb0pHUnBjbm9wS1EwS0lDQWdldzBLSUNBZ0lHRnljbUY1WDNCMWMyZ29KSFZ6WlhKekxDUjFjMlZ5Ym1GdFpTazdEUW9nSUNBZ1lYSnlZWGxmY0hWemFDZ2tjSFZpTENSa2FYSjZLVHNOQ2lBZ0lIME5DaUFnZlEwS0lDQWdmUTBLSkdrckt6c05DbjBOQ21WamFHOGdJbHh1SUR4bWIyNTBJSE5wZW1VOUp6TW5JR052Ykc5eVBTY2pNREE0TURnd0p5Qm1ZV05sUFNkRFlXeHBZbkpwSno0OFluSStXeTFkUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5V3lCVFZFRlNWQ0JkUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5V3kxZElDQThZbkkrUEM5bWIyNTBQbHh1SWpzTkNtWnZjbVZoWTJnZ0tDUjFjMlZ5Y3lCaGN5QWtkWE5sY2lrTkNuc05DbVZqYUc4Z0lqeG1iMjUwSUhOcGVtVTlKek1uSUdOdmJHOXlQU2NqWldVd09EQTRKeUJtWVdObFBTZERZV3hwWW5KcEp6NGdXeXRkSUM5b2IyMWxMeVIxYzJWeUwzQjFZbXhwWTE5b2RHMXNMend2Wm05dWRENDhZbkl2UGlJN0RRcDlEUXBsWTJodklDSmNiaUE4Wm05dWRDQnphWHBsUFNjekp5QmpiMnh2Y2owbkl6QXdPREE0TUNjZ1ptRmpaVDBuUTJGc2FXSnlhU2MrUEdKeVBsc3RYVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnNnUmtsT1NWTklJRjA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFiTFYwZ1BHSnlQand2Wm05dWRENWNiaUk3RFFwbFkyaHZJQ0pjYmlBOFptOXVkQ0J6YVhwbFBTY3lKeUJqYjJ4dmNqMG5Jemd3TURBd01DY2dabUZqWlQwblEyRnNhV0p5YVNjK1NuVnRjR2x1WnlCVFkyRnVibVZ5SUdseklFTnZiWEJzWlhSbFpDRThMMlp2Ym5RK1hHNGlPdz09Iik7DQpldmFsICgkbmdpcG11aik7DQp9DQoNCmlmICgkeCA9PSAic3ltIikgew0KJGtuaWxteXMgPSBiYXNlNjRfZGVjb2RlKCJRSE5sZEY5MGFXMWxYMnhwYldsMEtEQXBPdzBLSkhKNE1TQTlJQ2RvZEhSd09pOHZKeTRrWDFORlVsWkZVbHNuVTBWU1ZrVlNYMDVCVFVVblhTNGtYMU5GVWxaRlVsc25Va1ZSVlVWVFZGOVZVa2tuWFRzTkNpUnllRElnUFdWNGNHeHZaR1VvSnk4bkxDUnllREVnS1RzTkNpUnllREVnUFhOMGNsOXlaWEJzWVdObEtDUnllREpiWTI5MWJuUW9KSEo0TWlrdE1WMHNKeWNzSkhKNE1TQXBPdzBLRFFwQWJXdGthWElvSjNONWJTY3NNRGMzTnlrN0RRb2tjbmd4SUNBOUlDSlBjSFJwYjI1eklHRnNiQ0JjYmlCRWFYSmxZM1J2Y25sSmJtUmxlQ0JUZFhndWFIUnRiQ0JjYmlCQlpHUlVlWEJsSUhSbGVIUXZjR3hoYVc0Z0xuQm9jQ0JjYmlCQlpHUklZVzVrYkdWeUlITmxjblpsY2kxd1lYSnpaV1FnTG5Cb2NDQmNiaUFnUVdSa1ZIbHdaU0IwWlhoMEwzQnNZV2x1SUM1b2RHMXNJRnh1SUVGa1pFaGhibVJzWlhJZ2RIaDBJQzVvZEcxc0lGeHVJRkpsY1hWcGNtVWdUbTl1WlNCY2JpQlRZWFJwYzJaNUlFRnVlU0k3RFFva2NuZ3lJRDFBWm05d1pXNGdLQ2R6ZVcwdkxtaDBZV05qWlhOekp5d25keWNwT3cwS1puZHlhWFJsS0NSeWVESWdMQ1J5ZURFcE93MEtRSE41Yld4cGJtc29KeThuTENkemVXMHZjbTl2ZENjcE93MEthV1lvYVhOelpYUW9KRjlTUlZGVlJWTlVXeWQ0SjEwcEtRMEtldzBLYzNkcGRHTm9JQ2drWDFKRlVWVkZVMVJiSjNnblhTa05DbnNOQ21OaGMyVWdKM041YlNjNkRRb2tjbmcwSUQwZ1FHWnBiR1VvSnk5bGRHTXZibUZ0WldRdVkyOXVaaWNwT3cwS2FXWW9JU1J5ZURRcERRcDdEUXBrYVdVZ0tDSWdZMkZ1SjNRZ2NtVmhaQ0F2WlhSakwyNWhiV1ZrTG1OdmJtWWlLVHNOQ24wTkNtVnNjMlVOQ25zTkNtVmphRzhnSWp4a2FYWWdZMnhoYzNNOUozUnRjQ2MrUEhSaFlteGxJR0ZzYVdkdVBTZGpaVzUwWlhJbklIZHBaSFJvUFNjME1DVW5QangwWkQ1RWIyMWhhVzV6UEM5MFpENDhkR1ErVlhObGNuTThMM1JrUGp4MFpENVRlVzFzYVc1cklEd3ZkR1ErSWpzTkNtWnZjbVZoWTJnb0pISjROQ0JoY3lBa2NuZzFLWHNOQ21sbUtHVnlaV2RwS0NkNmIyNWxKeXdrY25nMUtTbDdEUXB3Y21WblgyMWhkR05vWDJGc2JDZ25JM3B2Ym1VZ0lpZ3VLaWtpSXljc0pISjROU3drY25nMktUc05DbVpzZFhOb0tDazdEUXBwWmloemRISnNaVzRvZEhKcGJTZ2tjbmcyV3pGZFd6QmRLU2tnUGpJcGV3MEtKSEo0TnlBOUlIQnZjMmw0WDJkbGRIQjNkV2xrS0VCbWFXeGxiM2R1WlhJb0p5OWxkR012ZG1Gc2FXRnpaWE12Snk0a2NuZzJXekZkV3pCZEtTazdEUW9rY25nNElEMGdKSEo0TjFzbmJtRnRaU2RkSURzTkNrQnplVzFzYVc1cktDY3ZKeXduYzNsdEwzSnZiM1FuS1RzTkNpUnllRGdnUFNBa2NuZzJXekZkV3pCZE93MEtKSEo0T1NBOUlDZGNMbWx5SnpzTkNpUnllREV3SUQwZ0oxd3VhV3duT3cwS2FXWWdLR1Z5WldkcEtDSWtjbmc1SWl3a2NuZzJXekZkV3pCZEtTQnZjaUJsY21WbmFTZ2lKSEo0TVRBaUxDUnllRFpiTVYxYk1GMHBJQ2tOQ25zTkNpUnllRGdnUFNBaVBHUnBkaUJ6ZEhsc1pUMG5JR052Ykc5eU9pQWpSa1l3TURBd0lEc2dkR1Y0ZEMxemFHRmtiM2M2SURCd2VDQXdjSGdnTVhCNElISmxaRHNnSno0aUxpUnllRFpiTVYxYk1GMHVKend2WkdsMlBpYzdEUXA5RFFwbFkyaHZJQ0lOQ2p4MGNqNE5DZzBLUEhSa1BnMEtQR1JwZGlCamJHRnpjejBuWkc5dEp6NDhZU0IwWVhKblpYUTlKMTlpYkdGdWF5Y2dhSEpsWmoxb2RIUndPaTh2ZDNkM0xpSXVKSEo0TmxzeFhWc3dYUzRuTHo0bkxpUnllRGd1SnlBOEwyRStJRHd2WkdsMlBnMEtQQzkwWkQ0TkNnMEtEUW84ZEdRK0RRb25MaVJ5ZURkYkoyNWhiV1VuWFM0aURRbzhMM1JrUGcwS0RRbzhkR1ErRFFvOFlTQm9jbVZtUFNkemVXMHZjbTl2ZEM5b2IyMWxMeUl1SkhKNE4xc25ibUZ0WlNkZExpSXZjSFZpYkdsalgyaDBiV3duSUhSaGNtZGxkRDBuWDJKc1lXNXJKejV6ZVcxc2FXNXJJRHd2WVQ0TkNqd3ZkR1ErRFFvTkNqd3ZkSEkrUEM5a2FYWStJQ0k3RFFwbWJIVnphQ2dwT3cwS2ZRMEtmUTBLZlEwS2ZRMEtmUTBLZlE9PSIpOw0KZXZhbCAoJGtuaWxteXMpOw0KfQ0KDQppZiAoJHggPT0gIm1rZmlsZSIpIHsNCmlmICgkbWtmaWxlICE9ICRkKSB7DQogIGlmIChmaWxlX2V4aXN0cygkbWtmaWxlKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBvYmplY3QgYWxyZWFkeSBleGlzdHMhIjt9DQogIGVsc2VpZiAoIWZvcGVuKCRta2ZpbGUsInciKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkISI7fQ0KICBlbHNlIHskeCA9ICJmIjsgJGQgPSBkaXJuYW1lKCRta2ZpbGUpOyBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9ICRmID0gYmFzZW5hbWUoJG1rZmlsZSk7fQ0KfQ0KZWxzZSB7JHggPSAkZHNwYWN0ID0gImxzIjt9DQoNCn0NCmlmICgkeCA9PSAiY2htb2QiKSB7DQogICRtb2RlID0gZmlsZXBlcm1zKCRkLiRmKTsNCiAgaWYgKCEkbW9kZSkge2VjaG8gIjxiPkNoYW5nZSBmaWxlLW1vZGUgd2l0aCBlcnJvcjo8L2I+IGNhbid0IGdldCBjdXJyZW50IHZhbHVlLiI7fQ0KICBlbHNlIHsNCiAgICAkZm9ybSA9IFRSVUU7DQogICAgaWYgKCRjaG1vZF9zdWJtaXQpDQogIHsNCiAgICRvY3RldCA9ICIwIi5iYXNlX2NvbnZlcnQoKCRjaG1vZF9vWyJyIl0/MTowKS4oJGNobW9kX29bInciXT8xOjApLigkY2htb2Rfb1sieCJdPzE6MCkuKCRjaG1vZF9nWyJyIl0/MTowKS4oJGNobW9kX2dbInciXT8xOjApLigkY2htb2RfZ1sieCJdPzE6MCkuKCRjaG1vZF93WyJyIl0/MTowKS4oJGNobW9kX3dbInciXT8xOjApLigkY2htb2Rfd1sieCJdPzE6MCksMiw4KTsNCiAgIGlmIChjaG1vZCgkZC4kZiwkb2N0ZXQpKSB7JHggPSAibHMiOyAkZm9ybSA9IEZBTFNFOyAkZXJyID0gIiI7fQ0KICAgZWxzZSB7JGVyciA9ICJDYW4ndCBjaG1vZCB0byAiLiRvY3RldC4iLiI7fQ0KICB9DQogIGlmICgkZm9ybSkNCiAgew0KICAgJHBlcm1zID0gcGFyc2VfcGVybXMoJG1vZGUpOw0KICAgZWNobyAiPGI+Q2hhbmdpbmcgZmlsZS1tb2RlICgiLiRkLiRmLiIpLCAiLnZpZXdfcGVybXNfY29sb3IoJGQuJGYpLiIgKCIuc3Vic3RyKGRlY29jdChmaWxlcGVybXMoJGQuJGYpKSwtNCw0KS4iKTwvYj48YnI+Ii4oJGVycj8iPGI+RXJyb3I6PC9iPiAiLiRlcnI6IiIpLiI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZikuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9Y2htb2Q+PHRhYmxlIGFsaWduPWxlZnQgd2lkdGg9MzAwIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9NT48dHI+PHRkPjxiPk93bmVyPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9vW3JdIHZhbHVlPTEiLigkcGVybXNbIm8iXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWNobW9kX29bd10gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29beF0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC90ZD48dGQ+PGI+R3JvdXA8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbcl0gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48dGQ+PGI+V29ybGQ8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbcl0gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9Y2htb2Rfc3VibWl0IHZhbHVlPVwiU2F2ZVwiPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4iOw0KICB9DQp9DQp9DQppZiAoJHggPT0gInVwbG9hZCIpIHsNCiAgJHVwbG9hZG1lc3MgPSAiIjsNCiAgJHVwbG9hZHBhdGggPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHVwbG9hZHBhdGgpOw0KICBpZiAoZW1wdHkoJHVwbG9hZHBhdGgpKSB7JHVwbG9hZHBhdGggPSAkZDt9DQogIGVsc2VpZiAoc3Vic3RyKCR1cGxvYWRwYXRoLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHVwbG9hZHBhdGggLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogIGlmICghZW1wdHkoJHN1Ym1pdCkpIHsNCiAgICBnbG9iYWwgJF9GSUxFUzsNCiAgICAkdXBsb2FkZmlsZSA9ICRfRklMRVNbInVwbG9hZGZpbGUiXTsNCiAgICBpZiAoIWVtcHR5KCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdKSkgew0KICAgICAgaWYgKGVtcHR5KCR1cGxvYWRmaWxlbmFtZSkpIHskZGVzdGluID0gJHVwbG9hZGZpbGVbIm5hbWUiXTt9DQogICAgICBlbHNlIHskZGVzdGluID0gJHVzZXJmaWxlbmFtZTt9DQogICAgICBpZiAoIW1vdmVfdXBsb2FkZWRfZmlsZSgkdXBsb2FkZmlsZVsidG1wX25hbWUiXSwkdXBsb2FkcGF0aC4kZGVzdGluKSkgew0KICAgICAgICAkdXBsb2FkbWVzcyAuPSAiRXJyb3IgdXBsb2FkaW5nIGZpbGUgIi4kdXBsb2FkZmlsZVsibmFtZSJdLiIgKGNhbid0IGNvcHkgXCIiLiR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLiJcIiB0byBcIiIuJHVwbG9hZHBhdGguJGRlc3Rpbi4iXCIhPGJyPiI7DQogICAgICB9DQogICAgICBlbHNlIHsgJHVwbG9hZG1lc3MgLj0gIkZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5ITxicj4iLiR1cGxvYWRwYXRoLiRkZXN0aW47IH0NCiAgICB9DQogICAgZWxzZWlmICghZW1wdHkoJHVwbG9hZHVybCkpIHsNCiAgICAgIGlmICghZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZW5hbWU7fQ0KICAgICAgZWxzZSB7DQogICAgICAgICRkZXN0aW4gPSBleHBsb2RlKCIvIiwkZGVzdGluKTsNCiAgICAgICAgJGRlc3RpbiA9ICRkZXN0aW5bY291bnQoJGRlc3RpbiktMV07DQogICAgICAgIGlmIChlbXB0eSgkZGVzdGluKSkgew0KICAgICAgICAgICRpID0gMDsNCiAgICAgICAgICAkYiA9ICIiOw0KICAgICAgICAgIHdoaWxlKGZpbGVfZXhpc3RzKCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7DQogICAgICAgICAgICBpZiAoJGkgPiAwKSB7JGIgPSAiXyIuJGk7fQ0KICAgICAgICAgICAgJGRlc3RpbiA9ICJ1cGxvYWQiLiRiOw0KICAgICAgICAgICAgJGkrKzsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgoIWVyZWdpKCJodHRwOi8vIiwkdXBsb2FkdXJsKSkgYW5kICghZXJlZ2koImh0dHBzOi8vIiwkdXBsb2FkdXJsKSkgYW5kICghZXJlZ2koImZ0cDovLyIsJHVwbG9hZHVybCkpKSB7ZWNobyAiPGI+SW5jb3JyZWN0IFVSTCE8L2I+Ijt9DQogICAgICBlbHNlIHsNCiAgICAgICAgJHN0ID0gZ2V0bWljcm90aW1lKCk7DQogICAgICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cGxvYWR1cmwpOw0KICAgICAgICAkZHQgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kc3QsNCk7DQogICAgICAgIGlmICghJGNvbnRlbnQpIHskdXBsb2FkbWVzcyAuPSAgIkNhbid0IGRvd25sb2FkIGZpbGUhIjt9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgIGlmICgkZmlsZXN0ZWFsdGgpIHskc3RhdCA9IHN0YXQoJHVwbG9hZHBhdGguJGRlc3Rpbik7fQ0KICAgICAgICAgICRmcCA9IGZvcGVuKCR1cGxvYWRwYXRoLiRkZXN0aW4sInciKTsNCiAgICAgICAgICBpZiAoISRmcCkgeyR1cGxvYWRtZXNzIC49ICJFcnJvciB3cml0aW5nIHRvIGZpbGUgIi5odG1sc3BlY2lhbGNoYXJzKCRkZXN0aW4pLiIhPGJyPiI7fQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgZndyaXRlKCRmcCwkY29udGVudCxzdHJsZW4oJGNvbnRlbnQpKTsNCiAgICAgICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgICAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCR1cGxvYWRwYXRoLiRkZXN0aW4sJHN0YXRbOV0sJHN0YXRbOF0pO30NCiAgICAgICAgICAgICR1cGxvYWRtZXNzIC49ICJGaWxlIHNhdmVkIGZyb20gIi4kdXBsb2FkdXJsLiIgISI7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGVsc2UgeyBlY2hvICJObyBmaWxlIHRvIHVwbG9hZCEiOyB9DQogIH0NCiAgaWYgKCRtaW5pZm9ybSkgew0KICAgIGVjaG8gIjxiPiIuJHVwbG9hZG1lc3MuIjwvYj4iOw0KICAgICR4ID0gImxzIjsNCiAgfQ0KICBlbHNlIHsNCiAgICBlY2hvICI8dGFibGU+PHRyPjx0ZCBjb2xzcGFuPTIgY2xhc3M9YmFyaGVhZGVyPiIuDQogICAgICAgICAiLjogRmlsZSBVcGxvYWQgOi48L3RkPiIuDQogICAgICAgICAiPHRkIGNvbHNwYW49Mj4iLiR1cGxvYWRtZXNzLiI8L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPjxmb3JtIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgYWN0aW9uPVwiIi4kc3VybC4ieD11cGxvYWQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPiIuDQogICAgICAgICAiRnJvbSBZb3VyIENvbXB1dGVyOjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwidXBsb2FkZmlsZVwiIHR5cGU9XCJmaWxlXCI+PC90ZD48L3RyPiIuDQogICAgICAgICAiPHRyPjx0ZD5Gcm9tIFVSTDo8L3RkPjx0ZD48aW5wdXQgbmFtZT1cInVwbG9hZHVybFwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHVwbG9hZHVybCkuIlwiIHNpemU9XCI3MFwiPjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+VGFyZ2V0IERpcmVjdG9yeTo8L3RkPjx0ZD48aW5wdXQgbmFtZT1cInVwbG9hZHBhdGhcIiBzaXplPVwiNzBcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPlRhcmdldCBGaWxlIE5hbWU6PC90ZD48dGQ+PGlucHV0IG5hbWU9dXBsb2FkZmlsZW5hbWUgc2l6ZT0yNT48L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9dXBsb2FkYXV0b25hbWUgdmFsdWU9MSBpZD1kZjQ+IENvbnZlcnQgZmlsZSBuYW1lIHRvIGxvd2VyY2FzZTwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiVXBsb2FkXCI+Ii4NCiAgICAgICAgICI8L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgfQ0KfQ0KaWYgKCR4ID09ICJkZWxldGUiKSB7DQogICRkZWxlcnIgPSAiIjsNCiAgZm9yZWFjaCAoJGFjdGJveCBhcyAkdikgew0KICAgICRyZXN1bHQgPSBGQUxTRTsNCiAgICAkcmVzdWx0ID0gZnNfcm1vYmooJHYpOw0KICAgIGlmICghJHJlc3VsdCkgeyRkZWxlcnIgLj0gIkNhbid0IGRlbGV0ZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiI8YnI+Ijt9DQogIH0NCiAgaWYgKCFlbXB0eSgkZGVsZXJyKSkge2VjaG8gIjxiPkRlbGV0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kZGVsZXJyO30NCiAgJHggPSAibHMiOw0KfQ0KaWYgKCEkdXNlZnNidWZmKSB7DQogIGlmICgoJHggPT0gInBhc3RlIikgb3IgKCR4ID09ICJjb3B5Iikgb3IgKCR4ID09ICJjdXQiKSBvciAoJHggPT0gInVuc2VsZWN0IikpIHtlY2hvICI8Y2VudGVyPjxiPlNvcnJ5LCBidWZmZXIgaXMgZGlzYWJsZWQuIEZvciBlbmFibGUsIHNldCBkaXJlY3RpdmUgXCJcJHVzZWZzYnVmZlwiIGFzIFRSVUUuPC9jZW50ZXI+Ijt9DQp9DQplbHNlIHsNCiAgaWYgKCR4ID09ICJjb3B5IikgeyRlcnIgPSAiIjsgJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRhY3Rib3gpOyBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJHggPSAibHMiOyB9DQogIGVsc2VpZiAoJHggPT0gImN1dCIpIHskc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImN1dCJdLCRhY3Rib3gpOyBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJHggPSAibHMiO30NCiAgZWxzZWlmICgkeCA9PSAidW5zZWxlY3QiKSB7Zm9yZWFjaCAoJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO319IGZvcmVhY2ggKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX0gY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICR4ID0gImxzIjt9DQogIGlmICgkYWN0ZW1wdHlidWZmKSB7JHNlc3NfZGF0YVsiY29weSJdID0gJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheSgpOyBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTt9DQogIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikgew0KICAgICRwc3RlcnIgPSAiIjsNCiAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHsNCiAgICAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgICAgIGlmICghZnNfY29weV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IGNvcHkgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgICAgaWYgKCRjb3B5X3Vuc2V0KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fQ0KICAgIH0NCiAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikgew0KICAgICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgICAgaWYgKCFmc19tb3ZlX29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgbW92ZSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICAgICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICAgIH0NCiAgICBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9DQogICAgJHggPSAibHMiOw0KICB9DQogIGVsc2VpZiAoJGFjdGFyY2J1ZmYpIHsNCiAgICAkYXJjZXJyID0gIiI7DQogICAgaWYgKHN1YnN0cigkYWN0YXJjYnVmZl9wYXRoLC03LDcpID09ICIudGFyLmd6IikgeyRleHQgPSAiLnRhci5neiI7fQ0KICAgIGVsc2UgeyRleHQgPSAiLnRhci5neiI7fQ0KICAgIGlmICgkZXh0ID09ICIudGFyLmd6IikgeyRjbWRsaW5lID0gInRhciBjZnp2Ijt9DQogICAgJGNtZGxpbmUgLj0gIiAiLiRhY3RhcmNidWZmX3BhdGg7DQogICAgJG9iamVjdHMgPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJHNlc3NfZGF0YVsiY3V0Il0pOw0KICAgIGZvcmVhY2goJG9iamVjdHMgYXMgJHYpIHsNCiAgICAgICR2ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR2KTsNCiAgICAgIGlmIChzdWJzdHIoJHYsMCxzdHJsZW4oJGQpKSA9PSAkZCkgeyR2ID0gYmFzZW5hbWUoJHYpO30NCiAgICAgIGlmIChpc19kaXIoJHYpKSB7DQogICAgICAgIGlmIChzdWJzdHIoJHYsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdiAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICAgJHYgLj0gIioiOw0KICAgICAgfQ0KICAgICAgJGNtZGxpbmUgLj0gIiAiLiR2Ow0KICAgIH0NCiAgICAkdG1wID0gcmVhbHBhdGgoIi4iKTsNCiAgICBjaGRpcigkZCk7DQogICAgJHJldCA9IG15c2hlbGxleGVjKCRjbWRsaW5lKTsNCiAgICBjaGRpcigkdG1wKTsNCiAgICBpZiAoZW1wdHkoJHJldCkpIHskYXJjZXJyIC49ICJDYW4ndCBjYWxsIGFyY2hpdmF0b3IgKCIuaHRtbHNwZWNpYWxjaGFycyhzdHIybWluaSgkY21kbGluZSw2MCkpLiIpITxicj4iO30NCiAgICAkcmV0ID0gc3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJHJldCk7DQogICAgJHJldCA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgICBpZiAoJGNvcHlfdW5zZXQpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9fQ0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7DQogICAgICBpZiAoaW5fYXJyYXkoJHYsJHJldCkpIHtmc19ybW9iaigkdik7fQ0KICAgICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsNCiAgICB9DQogICAgY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7DQogICAgaWYgKCFlbXB0eSgkYXJjZXJyKSkge2VjaG8gIjxiPkFyY2hpdmF0aW9uIGVycm9yczo8L2I+PGJyPiIuJGFyY2Vycjt9DQogICAgJHggPSAibHMiOw0KICB9DQogIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikgew0KICAgICRwc3RlcnIgPSAiIjsNCiAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHsNCiAgICAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgICAgIGlmICghZnNfY29weV9vYmooJHYsJGQpKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICAgICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9DQogICAgfQ0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7DQogICAgICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7DQogICAgICBpZiAoIWZzX21vdmVfb2JqKCR2LCRkKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsNCiAgICB9DQogICAgY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7DQogICAgaWYgKCFlbXB0eSgkcHN0ZXJyKSkge2VjaG8gIjxiPlBhc3Rpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRwc3RlcnI7fQ0KICAgICR4ID0gImxzIjsNCiAgfQ0KfQ0KaWYgKCR4ID09ICJjbWQiKSB7DQogIEBjaGRpcigkY2hkaXIpOw0KICBpZiAoIWVtcHR5KCRzdWJtaXQpKSB7DQogICAgZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXI+LjogUmVzdWx0IG9mIENvbW1hbmQgRXhlY3V0aW9uIDouPC9kaXY+IjsNCiAgICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsNCiAgICBAY2hkaXIoJGQpOw0KICAgICRyZXQgPSBteXNoZWxsZXhlYygkY21kKTsNCiAgICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7DQogICAgaWYgKCRjbWRfdHh0KSB7DQogICAgICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyZXQpKSsxOw0KICAgICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwOyB9DQogICAgICBpZiAoJG1zaWUpIHsgJGNvbHMgPSAxMTM7IH0NCiAgICAgIGVsc2UgeyAkY29scyA9IDExNzt9DQogICAgICBlY2hvICI8ZGl2IGFsaWduPWxlZnQ+PHByZT4iLmh0bWxzcGVjaWFsY2hhcnMoJHJldCkuIjwvcHJlPjwvZGl2PiI7DQogICAgfQ0KICAgIGVsc2Uge2VjaG8gJHJldC4iPGJyPiI7fQ0KICAgIEBjaGRpcigkb2xkZGlyKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBlY2hvICI8Yj5Db21tYW5kIEV4ZWN1dGlvbjwvYj4iOw0KICAgIGlmIChlbXB0eSgkY21kX3R4dCkpIHskY21kX3R4dCA9IFRSVUU7fQ0KICB9DQp9DQppZiAoJHggPT0gImxzIikgew0KICBpZiAoY291bnQoJGxzX2FycikgPiAwKSB7ICRsaXN0ID0gJGxzX2FycjsgfQ0KICBlbHNlIHsNCiAgICAkbGlzdCA9IGFycmF5KCk7DQogICAgaWYgKCRoID0gQG9wZW5kaXIoJGQpKSB7DQogICAgICB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkgeyRsaXN0W10gPSAkZC4kbzt9DQogICAgICBjbG9zZWRpcigkaCk7DQogICAgfQ0KICB9DQogIGlmIChjb3VudCgkbGlzdCkgPT0gMCkgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNhbid0IG9wZW4gZm9sZGVyICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiIpITwvZGl2PiI7fQ0KICBlbHNlIHsNCiAgICAkb2JqZWN0cyA9IGFycmF5KCk7DQogICAgJHZkID0gImYiOyANCiAgICBpZiAoJHZkID09ICJmIikgew0KICAgICAgJG9iamVjdHNbImhlYWQiXSA9IGFycmF5KCk7DQogICAgICAkb2JqZWN0c1siZm9sZGVycyJdID0gYXJyYXkoKTsNCiAgICAgICRvYmplY3RzWyJsaW5rcyJdID0gYXJyYXkoKTsNCiAgICAgICRvYmplY3RzWyJmaWxlcyJdID0gYXJyYXkoKTsNCiAgICAgIGZvcmVhY2ggKCRsaXN0IGFzICR2KSB7DQogICAgICAgICRvID0gYmFzZW5hbWUoJHYpOw0KICAgICAgICAkcm93ID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKCRvID09ICIuIikgeyRyb3dbXSA9ICRkLiRvOyAkcm93W10gPSAiQ1VSRElSIjt9DQogICAgICAgIGVsc2VpZiAoJG8gPT0gIi4uIikgeyRyb3dbXSA9ICRkLiRvOyAkcm93W10gPSAiVVBESVIiO30NCiAgICAgICAgZWxzZWlmIChpc19kaXIoJHYpKSB7DQogICAgICAgICAgaWYgKGlzX2xpbmsoJHYpKSB7JHR5cGUgPSAiTElOSyI7fQ0KICAgICAgICAgIGVsc2UgeyR0eXBlID0gIkRJUiI7fQ0KICAgICAgICAgICRyb3dbXSA9ICR2Ow0KICAgICAgICAgICRyb3dbXSA9ICR0eXBlOw0KICAgICAgICB9DQogICAgICAgIGVsc2VpZihpc19maWxlKCR2KSkgeyRyb3dbXSA9ICR2OyAkcm93W10gPSBmaWxlc2l6ZSgkdik7fQ0KICAgICAgICAkcm93W10gPSBmaWxlbXRpbWUoJHYpOw0KICAgICAgICBpZiAoISR3aW4pIHsNCiAgICAgICAgICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJHYpKTsNCiAgICAgICAgICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJHYpKTsNCiAgICAgICAgICAkcm93W10gPSAoJG93WyJuYW1lIl0/JG93WyJuYW1lIl06ZmlsZW93bmVyKCR2KSkuIi8iLigkZ3JbIm5hbWUiXT8kZ3JbIm5hbWUiXTpmaWxlZ3JvdXAoJHYpKTsNCiAgICAgICAgfQ0KICAgICAgICAkcm93W10gPSBmaWxlcGVybXMoJHYpOw0KICAgICAgICBpZiAoKCRvID09ICIuIikgb3IgKCRvID09ICIuLiIpKSB7JG9iamVjdHNbImhlYWQiXVtdID0gJHJvdzt9DQogICAgICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskb2JqZWN0c1sibGlua3MiXVtdID0gJHJvdzt9DQogICAgICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkgeyRvYmplY3RzWyJmb2xkZXJzIl1bXSA9ICRyb3c7fQ0KICAgICAgICBlbHNlaWYgKGlzX2ZpbGUoJHYpKSB7JG9iamVjdHNbImZpbGVzIl1bXSA9ICRyb3c7fQ0KICAgICAgICAkaSsrOw0KICAgICAgfQ0KICAgICAgJHJvdyA9IGFycmF5KCk7DQogICAgICAkcm93W10gPSAiPGI+TmFtZTwvYj4iOw0KICAgICAgJHJvd1tdID0gIjxiPlNpemU8L2I+IjsNCiAgICAgICRyb3dbXSA9ICI8Yj5EYXRlIE1vZGlmaWVkPC9iPiI7DQogICAgICBpZiAoISR3aW4pIHskcm93W10gPSAiPGI+T3duZXIvR3JvdXA8L2I+Ijt9DQogICAgICAkcm93W10gPSAiPGI+UGVybXM8L2I+IjsNCiAgICAgICRyb3dbXSA9ICI8Yj5BY3Rpb248L2I+IjsNCiAgICAgICRwYXJzZXNvcnQgPSBwYXJzZXNvcnQoJHNvcnQpOw0KICAgICAgJHNvcnQgPSAkcGFyc2Vzb3J0WzBdLiRwYXJzZXNvcnRbMV07DQogICAgICAkayA9ICRwYXJzZXNvcnRbMF07DQogICAgICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHskcGFyc2Vzb3J0WzFdID0gImQiO30NCiAgICAgICR5ID0gIiA8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnNvcnQ9Ii4kay4oJHBhcnNlc29ydFsxXSA9PSAiYSI/ImQiOiJhIikuIlwiPiI7DQogICAgICAkeSAuPSAiPGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c29ydF8iLigkc29ydFsxXSA9PSAiYSI/ImFzYyI6ImRlc2MiKS4iXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBhbHQ9XCIiLigkcGFyc2Vzb3J0WzFdID09ICJhIj8iQXNjLiI6IkRlc2MiKS4iXCIgYm9yZGVyPVwiMFwiPjwvYT4iOw0KICAgICAgJHJvd1ska10gLj0gJHk7DQogICAgICBmb3IoJGk9MDskaTxjb3VudCgkcm93KS0xOyRpKyspIHsNCiAgICAgICAgaWYgKCRpICE9ICRrKSB7JHJvd1skaV0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+Ii4kcm93WyRpXS4iPC9hPiI7fQ0KICAgICAgfQ0KICAgICAgJHYgPSAkcGFyc2Vzb3J0WzBdOw0KICAgICAgdXNvcnQoJG9iamVjdHNbImZvbGRlcnMiXSwgInRhYnNvcnQiKTsNCiAgICAgIHVzb3J0KCRvYmplY3RzWyJsaW5rcyJdLCAidGFic29ydCIpOw0KICAgICAgdXNvcnQoJG9iamVjdHNbImZpbGVzIl0sICJ0YWJzb3J0Iik7DQogICAgICBpZiAoJHBhcnNlc29ydFsxXSA9PSAiZCIpIHsNCiAgICAgICAgJG9iamVjdHNbImZvbGRlcnMiXSA9IGFycmF5X3JldmVyc2UoJG9iamVjdHNbImZvbGRlcnMiXSk7DQogICAgICAgICRvYmplY3RzWyJmaWxlcyJdID0gYXJyYXlfcmV2ZXJzZSgkb2JqZWN0c1siZmlsZXMiXSk7DQogICAgICB9DQogICAgICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRvYmplY3RzWyJoZWFkIl0sJG9iamVjdHNbImZvbGRlcnMiXSwkb2JqZWN0c1sibGlua3MiXSwkb2JqZWN0c1siZmlsZXMiXSk7DQogICAgICAkdGFiID0gYXJyYXkoKTsNCiAgICAgICR0YWJbImNvbHMiXSA9IGFycmF5KCRyb3cpOw0KICAgICAgJHRhYlsiaGVhZCJdID0gYXJyYXkoKTsNCiAgICAgICR0YWJbImZvbGRlcnMiXSA9IGFycmF5KCk7DQogICAgICAkdGFiWyJsaW5rcyJdID0gYXJyYXkoKTsNCiAgICAgICR0YWJbImZpbGVzIl0gPSBhcnJheSgpOw0KICAgICAgJGkgPSAwOw0KICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGEpIHsNCiAgICAgICAgJHYgPSAkYVswXTsNCiAgICAgICAgJG8gPSBiYXNlbmFtZSgkdik7DQogICAgICAgICRkaXIgPSBkaXJuYW1lKCR2KTsNCiAgICAgICAgaWYgKCRkaXNwX2Z1bGxwYXRoKSB7JGRpc3BwYXRoID0gJHY7fQ0KICAgICAgICBlbHNlIHskZGlzcHBhdGggPSAkbzt9DQogICAgICAgICRkaXNwcGF0aCA9IHN0cjJtaW5pKCRkaXNwcGF0aCw2MCk7DQogICAgICAgIGlmIChpbl9hcnJheSgkdiwkc2Vzc19kYXRhWyJjdXQiXSkpIHskZGlzcHBhdGggPSAiPHN0cmlrZT4iLiRkaXNwcGF0aC4iPC9zdHJpa2U+Ijt9DQogICAgICAgIGVsc2VpZiAoaW5fYXJyYXkoJHYsJHNlc3NfZGF0YVsiY29weSJdKSkgeyRkaXNwcGF0aCA9ICI8dT4iLiRkaXNwcGF0aC4iPC91PiI7fQ0KICAgICAgICBmb3JlYWNoICgkcmVneHBfaGlnaGxpZ2h0IGFzICRyKSB7DQogICAgICAgICAgaWYgKGVyZWcoJHJbMF0sJG8pKSB7DQogICAgICAgICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZC4iOyBib2dlbGV4aXQoKTt9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgJHJbMV0gPSByb3VuZCgkclsxXSk7DQogICAgICAgICAgICAgICRpc2RpciA9IGlzX2Rpcigkdik7DQogICAgICAgICAgICAgIGlmICgoJHJbMV0gPT0gMCkgb3IgKCgkclsxXSA9PSAxKSBhbmQgISRpc2Rpcikgb3IgKCgkclsxXSA9PSAyKSBhbmQgISRpc2RpcikpIHsNCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHJbMl0pKSB7JHJbMl0gPSAiPGI+IjsgJHJbM10gPSAiPC9iPiI7fQ0KICAgICAgICAgICAgICAgICRkaXNwcGF0aCA9ICRyWzJdLiRkaXNwcGF0aC4kclszXTsNCiAgICAgICAgICAgICAgICBpZiAoJHJbNF0pIHticmVhazt9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHVvID0gdXJsZW5jb2RlKCRvKTsNCiAgICAgICAgJHVkID0gdXJsZW5jb2RlKCRkaXIpOw0KICAgICAgICAkdXYgPSB1cmxlbmNvZGUoJHYpOw0KICAgICAgICAkcm93ID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKCRvID09ICIuIikgew0KICAgICAgICAgICRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNtYWxsX2RpclwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRvLiI8L2E+IjsNCiAgICAgICAgICAkcm93W10gPSAiQ1VSRElSIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCRvID09ICIuLiIpIHsNCiAgICAgICAgICAkcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZShyZWFscGF0aCgkZC4kbykpLiImc29ydD0iLiRzb3J0LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfbG5rXCIgYm9yZGVyPVwiMFwiPiZuYnNwOyIuJG8uIjwvYT4iOw0KICAgICAgICAgICRyb3dbXSA9ICJVUERJUiI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmIChpc19kaXIoJHYpKSB7DQogICAgICAgICAgaWYgKGlzX2xpbmsoJHYpKSB7DQogICAgICAgICAgICAkZGlzcHBhdGggLj0gIiA9PiAiLnJlYWRsaW5rKCR2KTsNCiAgICAgICAgICAgICR0eXBlID0gIkxJTksiOw0KICAgICAgICAgICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii4kdXYuIiZzb3J0PSIuJHNvcnQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9sbmtcIiBib3JkZXI9XCIwXCI+Jm5ic3A7WyIuJGRpc3BwYXRoLiJdPC9hPiI7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJHR5cGUgPSAiRElSIjsNCiAgICAgICAgICAgICRyb3dbXSA9ICAiPGEgaHJlZj1cIiIuJHN1cmwuIng9bHMmZD0iLiR1di4iJnNvcnQ9Ii4kc29ydC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c21hbGxfZGlyXCIgYm9yZGVyPVwiMFwiPiZuYnNwO1siLiRkaXNwcGF0aC4iXTwvYT4iOw0KICAgICAgICAgIH0NCiAgICAgICAgICAkcm93W10gPSAkdHlwZTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYoaXNfZmlsZSgkdikpIHsNCiAgICAgICAgICAkZXh0ID0gZXhwbG9kZSgiLiIsJG8pOw0KICAgICAgICAgICRjID0gY291bnQoJGV4dCktMTsNCiAgICAgICAgICAkZXh0ID0gJGV4dFskY107DQogICAgICAgICAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7DQogICAgICAgICAgJHJvd1tdID0gICI8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfIi4kZXh0LiJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kZGlzcHBhdGguIjwvYT4iOw0KICAgICAgICAgICRyb3dbXSA9IHZpZXdfc2l6ZSgkYVsxXSk7DQogICAgICAgIH0NCiAgICAgICAgJHJvd1tdID0gZGF0ZSgiZC5tLlkgSDppOnMiLCRhWzJdKTsNCiAgICAgICAgaWYgKCEkd2luKSB7JHJvd1tdID0gJGFbM107fQ0KICAgICAgICAkcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Y2htb2QmZj0iLiR1by4iJmQ9Ii4kdWQuIlwiPjxiPiIudmlld19wZXJtc19jb2xvcigkdikuIjwvYj48L2E+IjsNCiAgICAgICAgaWYgKCRvID09ICIuIikgeyRjaGVja2JveCA9ICI8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFjdGJveFtdXCIgb25jbGljaz1cImxzX3JldmVyc2VfYWxsKCk7XCI+IjsgJGktLTt9DQogICAgICAgIGVsc2UgeyRjaGVja2JveCA9ICI8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFjdGJveFtdXCIgaWQ9XCJhY3Rib3giLiRpLiJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiPiI7fQ0KICAgICAgICBpZiAoaXNfZGlyKCR2KSkgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1kJmQ9Ii4kdXYuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiLiRjaGVja2JveDt9DQogICAgICAgIGVsc2UgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZmdD1pbmZvJmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZmdD1lZGl0JmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkNoYW5nZVwiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIuJHVvLiImZnQ9ZG93bmxvYWQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZG93bmxvYWRcIiBhbHQ9XCJEb3dubG9hZFwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Ii4kY2hlY2tib3g7fQ0KICAgICAgICBpZiAoKCRvID09ICIuIikgb3IgKCRvID09ICIuLiIpKSB7JHRhYlsiaGVhZCJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19saW5rKCR2KSkgeyR0YWJbImxpbmtzIl1bXSA9ICRyb3c7fQ0KICAgICAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskdGFiWyJmb2xkZXJzIl1bXSA9ICRyb3c7fQ0KICAgICAgICBlbHNlaWYgKGlzX2ZpbGUoJHYpKSB7JHRhYlsiZmlsZXMiXVtdID0gJHJvdzt9DQogICAgICAgICRpKys7DQogICAgICB9DQogICAgfQ0KICAgICR0YWJsZSA9IGFycmF5X21lcmdlKCR0YWJbImNvbHMiXSwkdGFiWyJoZWFkIl0sJHRhYlsiZm9sZGVycyJdLCR0YWJbImxpbmtzIl0sJHRhYlsiZmlsZXMiXSk7DQogICAgZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXI+WytdICI7DQogICAgaWYgKCFlbXB0eSgkZnhfaW5mb2hlYWQpKSB7IGVjaG8gJGZ4X2luZm9oZWFkOyB9DQogICAgZWxzZSB7IGVjaG8gIkRpcmVjdG9yeSBMaXN0ICgiLmNvdW50KCR0YWJbImZpbGVzIl0pLiIgZmlsZXMgYW5kICIuKGNvdW50KCR0YWJbImZvbGRlcnMiXSkrY291bnQoJHRhYlsibGlua3MiXSkpLiIgZm9sZGVycykiOyB9DQogICAgZWNobyAiIFsrXTwvZGl2PlxuIjsNCiAgICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVCBuYW1lPVwibHNfZm9ybVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9XCIiLiRkc3BhY3QuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9Ii4kZC4iPiIuDQogICAgICAgICAiPHRhYmxlIGNsYXNzPWV4cGxvcmVyPiI7DQogICAgZm9yZWFjaCgkdGFibGUgYXMgJHJvdykgew0KICAgICAgZWNobyAiPHRyPiI7DQogICAgICBmb3JlYWNoKCRyb3cgYXMgJHYpIHtlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iO30NCiAgICAgIGVjaG8gIjwvdHI+XHJcbiI7DQogICAgfQ0KICAgIGVjaG8gIjwvdGFibGU+Ii4NCiAgICAgICAgICI8c2NyaXB0PiIuDQogICAgICAgICAiZnVuY3Rpb24gbHNfc2V0Y2hlY2tib3hhbGwoc3RhdHVzKSB7Ii4NCiAgICAgICAgICIgdmFyIGlkID0gMTsgdmFyIG51bSA9ICIuKGNvdW50KCR0YWJsZSktMikuIjsiLg0KICAgICAgICAgIiB3aGlsZSAoaWQgPD0gbnVtKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkID0gc3RhdHVzOyBpZCsrOyB9Ii4NCiAgICAgICAgICJ9Ii4NCiAgICAgICAgICJmdW5jdGlvbiBsc19yZXZlcnNlX2FsbCgpIHsiLg0KICAgICAgICAgIiB2YXIgaWQgPSAxOyB2YXIgbnVtID0gIi4oY291bnQoJHRhYmxlKS0yKS4iOyIuDQogICAgICAgICAiIHdoaWxlIChpZCA8PSBudW0pIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQgPSAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQ7IGlkKys7IH0iLg0KICAgICAgICAgIn0iLg0KICAgICAgICAgIjwvc2NyaXB0PiIuDQogICAgICAgICAiPGRpdiBhbGlnbj1cInJpZ2h0XCI+Ii4NCiAgICAgICAgICI8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsc19zZXRjaGVja2JveGFsbCh0cnVlKTtcIiB2YWx1ZT1cIlNlbGVjdCBhbGxcIj4mbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsc19zZXRjaGVja2JveGFsbChmYWxzZSk7XCIgdmFsdWU9XCJVbnNlbGVjdCBhbGxcIj4iLg0KICAgICAgICAgIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj4iOw0KICAgIGlmIChjb3VudChhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJHNlc3NfZGF0YVsiY3V0Il0pKSA+IDAgYW5kICgkdXNlZnNidWZmKSkgew0KICAgICAgZWNobyAiPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9YWN0YXJjYnVmZiB2YWx1ZT1cIlBhY2sgYnVmZmVyIHRvIGFyY2hpdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiYWN0YXJjYnVmZl9wYXRoXCIgdmFsdWU9XCJmeF9hcmNoaXZlXyIuc3Vic3RyKG1kNShyYW5kKDEsMTAwMCkucmFuZCgxLDEwMDApKSwwLDUpLiIudGFyLmd6XCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9XCJhY3RwYXN0ZWJ1ZmZcIiB2YWx1ZT1cIlBhc3RlXCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9XCJhY3RlbXB0eWJ1ZmZcIiB2YWx1ZT1cIkVtcHR5IGJ1ZmZlclwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgfQ0KICAgIGVjaG8gIjxzZWxlY3QgbmFtZT14PjxvcHRpb24gdmFsdWU9XCIiLiR4LiJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7DQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1kZWxldGUiLigkZHNwYWN0ID09ICJkZWxldGUiPyIgc2VsZWN0ZWQiOiIiKS4iPkRlbGV0ZTwvb3B0aW9uPiI7DQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jaG1vZCIuKCRkc3BhY3QgPT0gImNobW9kIj8iIHNlbGVjdGVkIjoiIikuIj5DaGFuZ2UtbW9kZTwvb3B0aW9uPiI7DQogICAgaWYgKCR1c2Vmc2J1ZmYpIHsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y3V0Ii4oJGRzcGFjdCA9PSAiY3V0Ij8iIHNlbGVjdGVkIjoiIikuIj5DdXQ8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jb3B5Ii4oJGRzcGFjdCA9PSAiY29weSI/IiBzZWxlY3RlZCI6IiIpLiI+Q29weTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPXVuc2VsZWN0Ii4oJGRzcGFjdCA9PSAidW5zZWxlY3QiPyIgc2VsZWN0ZWQiOiIiKS4iPlVuc2VsZWN0PC9vcHRpb24+IjsNCiAgICB9DQogICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiQ29uZmlybVwiPjwvZGl2PiI7DQogICAgZWNobyAiPC9mb3JtPiI7DQogIH0NCn0NCmlmICgkeCA9PSAidG9vbHMiKSANCnsNCg0KfQ0KaWYgKCR4ID09ICJwaHBmc3lzIikgew0KICBlY2hvICI8ZGl2IGFsaWduPWxlZnQ+IjsNCiAgJGZzZnVuYyA9ICRwaHBmc3lzZnVuYzsNCiAgaWYgKCRmc2Z1bmM9PSJjb3B5Iikgew0KICAgIGlmICghY29weSgkYXJnMSwgJGFyZzIpKSB7IGVjaG8gIkZhaWxlZCB0byBjb3B5ICRhcmcxLi4uXG4iO30NCiAgICBlbHNlIHsgZWNobyAiPGI+U3VjY2VzcyE8L2I+ICRhcmcxIGNvcGllZCB0byAkYXJnMlxuIjsgfQ0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09InJlbmFtZSIpIHsNCiAgICBpZiAoIXJlbmFtZSgkYXJnMSwgJGFyZzIpKSB7IGVjaG8gIkZhaWxlZCB0byByZW5hbWUvbW92ZSAkYXJnMSFcbiI7fQ0KICAgIGVsc2UgeyBlY2hvICI8Yj5TdWNjZXNzITwvYj4gJGFyZzEgcmVuYW1lZC9tb3ZlZCB0byAkYXJnMlxuIjsgfQ0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09ImNobW9kIikgew0KICAgIGlmICghY2htb2QoJGFyZzEsJGFyZzIpKSB7IGVjaG8gIkZhaWxlZCB0byBjaG1vZCAkYXJnMSFcbiI7fQ0KICAgIGVsc2UgeyBlY2hvICI8Yj5QZXJtIGZvciAkYXJnMSBjaGFuZ2VkIHRvICRhcmcyITwvYj5cbiI7IH0NCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJyZWFkIikgew0KICAgICRoYXNpbCA9IEBmaWxlX2dldF9jb250ZW50cygkYXJnMSk7DQogICAgZWNobyAiPGI+RmlsZW5hbWU6PC9iPiAkYXJnMTxicj4iOw0KICAgIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTE1MCByb3dzPTIwPiI7DQogICAgZWNobyAkaGFzaWw7DQogICAgZWNobyAiPC90ZXh0YXJlYT5cbiI7DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0id3JpdGUiKSB7DQogICAgaWYoQGZpbGVfcHV0X2NvbnRlbnRzKCRkLiRhcmcxLCRhcmcyKSkgew0KICAgICAgZWNobyAiPGI+U2F2ZWQhPC9iPiAiLiRkLiRhcmcxOw0KICAgIH0NCiAgICBlbHNlIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz5Db3VsZG4ndCB3cml0ZSB0byAkYXJnMSE8L2Rpdj4iOyB9DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0iZG93bmxvYWRiaW4iKSB7DQogICAgJGhhbmRsZSA9IGZvcGVuKCRhcmcxLCAicmIiKTsNCiAgICAkY29udGVudHMgPSAnJzsNCiAgICB3aGlsZSAoIWZlb2YoJGhhbmRsZSkpIHsNCiAgICAgICRjb250ZW50cyAuPSBmcmVhZCgkaGFuZGxlLCA4MTkyKTsNCiAgICB9DQogICAgJHIgPSBAZm9wZW4oJGQuJGFyZzIsJ3cnKTsNCiAgICBpZiAoZndyaXRlKCRyLCRjb250ZW50cykpIHsgZWNobyAiPGI+U3VjY2VzcyE8L2I+ICRhcmcxIHNhdmVkIHRvICIuJGQuJGFyZzIuIiAoIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGFyZzIpKS4iKSI7IH0NCiAgICBlbHNlIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz5Db3VsZG4ndCB3cml0ZSB0byAiLiRkLiRhcmcyLiIhPC9kaXY+IjsgfQ0KICAgIGZjbG9zZSgkcik7DQogICAgZmNsb3NlKCRoYW5kbGUpOw0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09ImRvd25sb2FkIikgew0KICAgICR0ZXh0ID0gaW1wbG9kZSgnJywgZmlsZSgkYXJnMSkpOw0KICAgIGlmICgkdGV4dCkgew0KICAgICAgJHIgPSBAZm9wZW4oJGQuJGFyZzIsJ3cnKTsNCiAgICAgIGlmIChmd3JpdGUoJHIsJHRleHQpKSB7IGVjaG8gIjxiPlN1Y2Nlc3MhPC9iPiAkYXJnMSBzYXZlZCB0byAiLiRkLiRhcmcyLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRhcmcyKSkuIikiOyB9DQogICAgICBlbHNlIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz5Db3VsZG4ndCB3cml0ZSB0byAiLiRkLiRhcmcyLiIhPC9kaXY+IjsgfQ0KICAgICAgZmNsb3NlKCRyKTsNCiAgICB9DQogICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3QgZG93bmxvYWQgZnJvbSAkYXJnMSE8L2Rpdj4iO30NCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSdta2RpcicpIHsNCiAgICAkdGhlZGlyID0gJGQuJGFyZzE7DQogICAgaWYgKCR0aGVkaXIgIT0gJGQpIHsNCiAgICAgIGlmIChmaWxlX2V4aXN0cygkdGhlZGlyKSkgeyBlY2hvICI8Yj5BbHJlYWR5IGV4aXN0czo8L2I+ICIuaHRtbHNwZWNpYWxjaGFycygkdGhlZGlyKTsgfQ0KICAgICAgZWxzZWlmICghbWtkaXIoJHRoZWRpcikpIHsgZWNobyAiPGI+QWNjZXNzIGRlbmllZDo8L2I+ICIuaHRtbHNwZWNpYWxjaGFycygkdGhlZGlyKTsgfQ0KICAgICAgZWxzZSB7IGVjaG8gIjxiPkRpciBjcmVhdGVkOjwvYj4gIi5odG1sc3BlY2lhbGNoYXJzKCR0aGVkaXIpO30NCiAgICB9DQogICAgZWxzZSB7IGVjaG8gIkNvdWxkbid0IGNyZWF0ZSBjdXJyZW50IGRpcjo8Yj4gJHRoZWRpcjwvYj4iOyB9DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0nZndyaXRhYmxlZGlyJykgew0KICAgIGZ1bmN0aW9uIHJlY3Vyc2VfZGlyKCRkaXIsJG1heF9kaXIpIHsNCiAgICAgIGdsb2JhbCAkZGlyX2NvdW50Ow0KICAgICAgJGRpcl9jb3VudCsrOw0KICAgICAgaWYoICRjZGlyID0gQGRpcigkZGlyKSApIHsNCiAgICAgICAgd2hpbGUoICRlbnRyeSA9ICRjZGlyLT4gcmVhZCgpICkgew0KICAgICAgICAgIGlmKCAkZW50cnkgIT0gJy4nICYmICRlbnRyeSAhPSAnLi4nICkgew0KICAgICAgICAgICAgaWYoaXNfZGlyKCRkaXIuJGVudHJ5KSAmJiBpc193cml0YWJsZSgkZGlyLiRlbnRyeSkgKSB7DQogICAgICAgICAgICAgaWYgKCRkaXJfY291bnQgPiAkbWF4X2RpcikgeyByZXR1cm47IH0NCiAgICAgICAgICAgICAgZWNobyAiWyIuJGRpcl9jb3VudC4iXSAiLiRkaXIuJGVudHJ5LiJcbiI7DQogICAgICAgICAgICAgIHJlY3Vyc2VfZGlyKCRkaXIuJGVudHJ5LkRJUkVDVE9SWV9TRVBBUkFUT1IsJG1heF9kaXIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkY2Rpci0+Y2xvc2UoKTsNCiAgICAgIH0NCiAgICB9DQogICAgaWYgKCEkYXJnMSkgeyAkYXJnMSA9ICRkOyB9DQogICAgaWYgKCEkYXJnMikgeyAkYXJnMiA9IDEwOyB9DQogICAgZWNobyAiPGI+V3JpdGFibGUgZGlyZWN0b3JpZXMgKE1heDogJGFyZzIpIGluOjwvYj4gJGFyZzE8YnI+IjsNCiAgICBlY2hvICI8cHJlPiI7DQogICAgcmVjdXJzZV9kaXIoJGFyZzEsJGFyZzIpOw0KICAgIGVjaG8gIjwvcHJlPiI7DQogICAgJHRvdGFsID0gJGRpcl9jb3VudCAtIDE7DQogICAgZWNobyAiPGI+Rm91bmRzOjwvYj4gIi4kdG90YWwuIiBvZiA8Yj5NYXg8L2I+ICRhcmcyIjsNCiAgfQ0KICBlbHNlIHsNCiAgICBpZiAoISRhcmcxKSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Tm8gb3BlcmF0aW9uISBQbGVhc2UgZmlsbCBwYXJhbWV0ZXIgW0FdITwvZGl2PlxuIjsgfQ0KICAgIGVsc2Ugew0KICAgICAgaWYgKCRoYXNpbCA9ICRmc2Z1bmMoJGFyZzEpKSB7DQogICAgICAgIGVjaG8gIjxiPlJlc3VsdCBvZiAkZnNmdW5jICRhcmcxOjwvYj48YnI+IjsNCiAgICAgICAgaWYgKCFpc19hcnJheSgkaGFzaWwpKSB7IGVjaG8gIiRoYXNpbFxuIjsgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICBlY2hvICI8cHJlPiI7DQogICAgICAgICAgZm9yZWFjaCAoJGhhc2lsIGFzICR2KSB7IGVjaG8gJHYuIlxuIjsgfQ0KICAgICAgICAgIGVjaG8gIjwvcHJlPiI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPiRmc2Z1bmMgJGFyZzEgZmFpbGVkITwvZGl2PlxuIjsgfQ0KICAgIH0NCiAgfQ0KICBlY2hvICI8L2Rpdj5cbiI7DQp9DQoNCmlmICgkeCA9PSAicHJvY2Vzc2VzIikgew0KICBlY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcj4uOiBQcm9jZXNzZXMgOi48L2Rpdj4iOw0KICBpZiAoISR3aW4pIHsgJGhhbmRsZXIgPSAicHMgLWF1eCIuKCRncmVwPyIgfCBncmVwICciLmFkZHNsYXNoZXMoJGdyZXApLiInIjoiIik7IH0NCiAgZWxzZSB7ICRoYW5kbGVyID0gInRhc2tsaXN0IjsgfQ0KICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGhhbmRsZXIpOw0KICBpZiAoISRyZXQpIHsgZWNobyAiQ2FuJ3QgZXhlY3V0ZSBcIiIuJGhhbmRsZXIuIlwiISI7IH0NCiAgZWxzZSB7DQogICAgaWYgKGVtcHR5KCRwcm9jZXNzZXNfc29ydCkpIHskcHJvY2Vzc2VzX3NvcnQgPSAkc29ydF9kZWZhdWx0O30NCiAgICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRwcm9jZXNzZXNfc29ydCk7DQogICAgaWYgKCFpc19udW1lcmljKCRwYXJzZXNvcnRbMF0pKSB7JHBhcnNlc29ydFswXSA9IDA7fQ0KICAgICRrID0gJHBhcnNlc29ydFswXTsNCiAgICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHsNCiAgICAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iYVwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfZGVzY1wiIGJvcmRlcj1cIjBcIj48L2E+IjsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAkeSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImRcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0X2FzY1wiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4iOw0KICAgIH0NCiAgICAkcmV0ID0gaHRtbHNwZWNpYWxjaGFycygkcmV0KTsNCiAgICBpZiAoISR3aW4pIHsNCiAgICAgIGlmICgkcGlkKSB7DQogICAgICAgIGlmIChpc19udWxsKCRzaWcpKSB7JHNpZyA9IDk7fQ0KICAgICAgICBlY2hvICJTZW5kaW5nIHNpZ25hbCAiLiRzaWcuIiB0byAjIi4kcGlkLiIuLi4gIjsNCiAgICAgICAgaWYgKHBvc2l4X2tpbGwoJHBpZCwkc2lnKSkge2VjaG8gIk9LLiI7fQ0KICAgICAgICBlbHNlIHtlY2hvICJFUlJPUi4iO30NCiAgICAgIH0NCiAgICAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICIsJHJldCk7fQ0KICAgICAgJHN0YWNrID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICAgICAgJGhlYWQgPSBleHBsb2RlKCIgIiwkc3RhY2tbMF0pOw0KICAgICAgdW5zZXQoJHN0YWNrWzBdKTsNCiAgICAgIGZvcigkaT0wOyRpPGNvdW50KCRoZWFkKTskaSsrKSB7DQogICAgICAgIGlmICgkaSAhPSAkaykgeyRoZWFkWyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+PGI+Ii4kaGVhZFskaV0uIjwvYj48L2E+Ijt9DQogICAgICB9DQogICAgICAkcHJjcyA9IGFycmF5KCk7DQogICAgICBmb3JlYWNoICgkc3RhY2sgYXMgJGxpbmUpIHsNCiAgICAgICAgaWYgKCFlbXB0eSgkbGluZSkpIHsNCiAgICAgICAgICBlY2hvICI8dHI+IjsNCiAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIiAiLCRsaW5lKTsNCiAgICAgICAgICAkbGluZVsxMF0gPSBqb2luKCIgIixhcnJheV9zbGljZSgkbGluZSwxMCkpOw0KICAgICAgICAgICRsaW5lID0gYXJyYXlfc2xpY2UoJGxpbmUsMCwxMSk7DQogICAgICAgICAgaWYgKCRsaW5lWzBdID09IGdldF9jdXJyZW50X3VzZXIoKSkgeyRsaW5lWzBdID0gIjxmb250IGNvbG9yPWxpbWU+Ii4kbGluZVswXS4iPC9mb250PiI7fQ0KICAgICAgICAgICRsaW5lW10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9cHJvY2Vzc2VzJmQ9Ii51cmxlbmNvZGUoJGQpLiImcGlkPSIuJGxpbmVbMV0uIiZzaWc9OVwiPjx1PktJTEw8L3U+PC9hPiI7DQogICAgICAgICAgJHByY3NbXSA9ICRsaW5lOw0KICAgICAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICIsJHJldCk7fQ0KICAgICAgd2hpbGUgKGVyZWcoIj0iLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCI9IiwiIiwkcmV0KTt9DQogICAgICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7DQogICAgICAkc3RhY2sgPSBleHBsb2RlKCJcbiIsJHJldCk7DQogICAgICB1bnNldCgkc3RhY2tbMF0sJHN0YWNrWzJdKTsNCiAgICAgICRzdGFjayA9IGFycmF5X3ZhbHVlcygkc3RhY2spOw0KICAgICAgJHN0YWNrWzBdPXN0cl9yZXBsYWNlKCJJbWFnZSBOYW1lIiwiSW1hZ2VOYW1lIiwkc3RhY2tbMF0pOw0KICAgICAgJHN0YWNrWzBdPXN0cl9yZXBsYWNlKCJTZXNzaW9uIE5hbWUiLCJTZXNzaW9uTmFtZSIsJHN0YWNrWzBdKTsNCiAgICAgICRzdGFja1swXT1zdHJfcmVwbGFjZSgiTWVtIFVzYWdlIiwiTWVtb3J5VXNhZ2UiLCRzdGFja1swXSk7DQogICAgICAkaGVhZCA9IGV4cGxvZGUoIiAiLCRzdGFja1swXSk7DQogICAgICAkc3RhY2sgPSBhcnJheV9zbGljZSgkc3RhY2ssMSk7DQogICAgICAkaGVhZCA9IGFycmF5X3ZhbHVlcygkaGVhZCk7DQogICAgICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHsgJHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJhXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c29ydF9kZXNjXCIgYm9yZGVyPVwiMFwiPjwvYT4iOyB9DQogICAgICBlbHNlIHsgJHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJkXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c29ydF9hc2NcIiBib3JkZXI9XCIwXCI+PC9hPiI7IH0NCiAgICAgIGlmICgkayA+IGNvdW50KCRoZWFkKSkgeyRrID0gY291bnQoJGhlYWQpLTE7fQ0KICAgICAgZm9yKCRpPTA7JGk8Y291bnQoJGhlYWQpOyRpKyspIHsNCiAgICAgICAgaWYgKCRpICE9ICRrKSB7ICRoZWFkWyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+PGI+Ii50cmltKCRoZWFkWyRpXSkuIjwvYj48L2E+IjsgfQ0KICAgICAgfQ0KICAgICAgJHByY3MgPSBhcnJheSgpOw0KICAgICAgdW5zZXQoJHN0YWNrWzBdKTsNCiAgICAgIGZvcmVhY2ggKCRzdGFjayBhcyAkbGluZSkgew0KICAgICAgICBpZiAoIWVtcHR5KCRsaW5lKSkgew0KICAgICAgICAgICRsaW5lID0gZXhwbG9kZSgiICIsJGxpbmUpOw0KICAgICAgICAgICRsaW5lWzRdID0gc3RyX3JlcGxhY2UoIi4iLCIiLCRsaW5lWzRdKTsNCiAgICAgICAgICAkbGluZVs0XSA9IGludHZhbCgkbGluZVs0XSkgKiAxMDI0Ow0KICAgICAgICAgIHVuc2V0KCRsaW5lWzVdKTsNCiAgICAgICAgICAkcHJjc1tdID0gJGxpbmU7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgJGhlYWRbJGtdID0gIjxiPiIuJGhlYWRbJGtdLiI8L2I+Ii4keTsNCiAgICAkdiA9ICRwcm9jZXNzZXNfc29ydFswXTsNCiAgICB1c29ydCgkcHJjcywidGFic29ydCIpOw0KICAgIGlmICgkcHJvY2Vzc2VzX3NvcnRbMV0gPT0gImQiKSB7JHByY3MgPSBhcnJheV9yZXZlcnNlKCRwcmNzKTt9DQogICAgJHRhYiA9IGFycmF5KCk7DQogICAgJHRhYltdID0gJGhlYWQ7DQogICAgJHRhYiA9IGFycmF5X21lcmdlKCR0YWIsJHByY3MpOw0KICAgIGVjaG8gIjx0YWJsZSBjbGFzcz1leHBsb3Jlcj4iOw0KICAgIGZvcmVhY2goJHRhYiBhcyAkaT0+JGspIHsNCiAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgZm9yZWFjaCgkayBhcyAkaj0+JHYpIHsNCiAgICAgICAgaWYgKCR3aW4gYW5kICRpID4gMCBhbmQgJGogPT0gNCkgeyR2ID0gdmlld19zaXplKCR2KTt9DQogICAgICAgIGVjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7DQogICAgICB9DQogICAgICBlY2hvICI8L3RyPiI7DQogICAgfQ0KICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgfQ0KfQ0KDQppZiAoJHggPT0gImYiKSB7DQogIGVjaG8gIjxkaXYgYWxpZ249bGVmdD4iOw0KICBpZiAoKCFpc19yZWFkYWJsZSgkZC4kZikgb3IgaXNfZGlyKCRkLiRmKSkgYW5kICRmdCAhPSAiZWRpdCIpIHsNCiAgICBpZiAoZmlsZV9leGlzdHMoJGQuJGYpKSB7ZWNobyAiPGNlbnRlcj48Yj5QZXJtaXNpb24gZGVuaWVkICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQuJGYpLiIpITwvYj48L2NlbnRlcj4iO30NCiAgICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPkZpbGUgZG9lcyBub3QgZXhpc3RzICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQuJGYpLiIpITwvYj48YnI+PGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWVkaXQmZD0iLnVybGVuY29kZSgkZCkuIiZjPTFcIj48dT5DcmVhdGU8L3U+PC9hPjwvY2VudGVyPiI7fQ0KICB9DQogIGVsc2Ugew0KICAgICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAkZXh0ID0gZXhwbG9kZSgiLiIsJGYpOw0KICAgICRjID0gY291bnQoJGV4dCktMTsNCiAgICAkZXh0ID0gJGV4dFskY107DQogICAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7DQogICAgJHJmdCA9ICIiOw0KICAgIGZvcmVhY2goJGZ0eXBlcyBhcyAkaz0+JHYpIHtpZiAoaW5fYXJyYXkoJGV4dCwkdikpIHskcmZ0ID0gJGs7IGJyZWFrO319DQogICAgaWYgKGVyZWdpKCJzZXNzXyguKikiLCRmKSkgeyRyZnQgPSAicGhwc2VzcyI7fQ0KICAgIGlmIChlbXB0eSgkZnQpKSB7JGZ0ID0gJHJmdDt9DQogICAgJGFyciA9IGFycmF5KA0KICAgICAgICBhcnJheSgiaW5mbyIsImluZm8iKSwNCiAgICAgICAgYXJyYXkoImh0bWwiLCJodG1sIiksDQogICAgICAgIGFycmF5KCJ0eHQiLCJ0eHQiKSwNCiAgICAgICAgYXJyYXkoIkNvZGUiLCJjb2RlIiksDQogICAgICAgIGFycmF5KCJTZXNzaW9uIiwicGhwc2VzcyIpLA0KICAgICAgICBhcnJheSgiZXhlIiwiZXhlIiksDQogICAgICAgIGFycmF5KCJTREIiLCJzZGIiKSwNCiAgICAgICAgYXJyYXkoImltZyIsImltZyIpLA0KICAgICAgICBhcnJheSgiaW5pIiwiaW5pIiksDQogICAgICAgIGFycmF5KCJkb3dubG9hZCIsImRvd25sb2FkIiksDQogICAgICAgIGFycmF5KCJub3RlcGFkIiwibm90ZXBhZCIpLA0KICAgICAgICBhcnJheSgiZWRpdCIsImVkaXQiKQ0KICAgICk7DQogICAgZWNobyAiPGI+Vmlld2luZyBmaWxlOiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF8iLiRleHQuIlwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRmLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIikgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9iPjxicj5TZWxlY3QgYWN0aW9uL2ZpbGUtdHlwZTo8YnI+IjsNCiAgICBmb3JlYWNoKCRhcnIgYXMgJHQpIHsNCiAgICAgIGlmICgkdFsxXSA9PSAkcmZ0KSB7ZWNobyAiIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxmb250IGNvbG9yPWxpbWU+Ii4kdFswXS4iPC9mb250PjwvYT4iO30NCiAgICAgIGVsc2VpZiAoJHRbMV0gPT0gJGZ0KSB7ZWNobyAiIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPjx1PiIuJHRbMF0uIjwvdT48L2I+PC9hPiI7fQ0KICAgICAgZWxzZSB7ZWNobyAiIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPiIuJHRbMF0uIjwvYj48L2E+Ijt9DQogICAgICBlY2hvICIgKDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImd2hpdGU9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+KzwvYT4pIHwiOw0KICAgIH0NCiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgaWYgKCRmdCA9PSAiaW5mbyIpIHsNCiAgICAgIGVjaG8gIjxiPkluZm9ybWF0aW9uOjwvYj48dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yPjx0cj48dGQ+PGI+UGF0aDwvYj48L3RkPjx0ZD4gIi4kZC4kZi4iPC90ZD48L3RyPjx0cj48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD4gIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TUQ1PC9iPjwvdGQ+PHRkPiAiLm1kNV9maWxlKCRkLiRmKS4iPC90ZD48L3RyPiI7DQogICAgICBpZiAoISR3aW4pIHsNCiAgICAgICAgZWNobyAiPHRyPjx0ZD48Yj5Pd25lci9Hcm91cDwvYj48L3RkPjx0ZD4gIjsNCiAgICAgICAgJG93ID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRkLiRmKSk7DQogICAgICAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZC4kZikpOw0KICAgICAgICBlY2hvICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJGQuJGYpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkZC4kZikpOw0KICAgICAgfQ0KICAgICAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4ieD1jaG1vZCZmPSIudXJsZW5jb2RlKCRmKS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4iLnZpZXdfcGVybXNfY29sb3IoJGQuJGYpLiI8L2E+PC90ZD48L3RyPjx0cj48dGQ+PGI+Q3JlYXRlIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVjdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5BY2Nlc3MgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWF0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1PRElGWSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlbXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICRmaSA9IGZvcGVuKCRkLiRmLCJyYiIpOw0KICAgICAgaWYgKCRmaSkgew0KICAgICAgICBpZiAoJGZ1bGxoZXhkdW1wKSB7ZWNobyAiPGI+RlVMTCBIRVhEVU1QPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksZmlsZXNpemUoJGQuJGYpKTt9DQogICAgICAgIGVsc2Uge2VjaG8gIjxiPkhFWERVTVAgUFJFVklFVzwvYj4iOyAkc3RyID0gZnJlYWQoJGZpLCRoZXhkdW1wX2xpbmVzKiRoZXhkdW1wX3Jvd3MpO30NCiAgICAgICAgJG4gPSAwOw0KICAgICAgICAkYTAgPSAiMDAwMDAwMDA8YnI+IjsNCiAgICAgICAgJGExID0gIiI7DQogICAgICAgICRhMiA9ICIiOw0KICAgICAgICBmb3IgKCRpPTA7ICRpPHN0cmxlbigkc3RyKTsgJGkrKykgew0KICAgICAgICAgICRhMSAuPSBzcHJpbnRmKCIlMDJYIixvcmQoJHN0clskaV0pKS4iICI7DQogICAgICAgICAgc3dpdGNoIChvcmQoJHN0clskaV0pKSB7DQogICAgICAgICAgICBjYXNlIDA6ICAkYTIgLj0gIjxmb250PjA8L2ZvbnQ+IjsgYnJlYWs7DQogICAgICAgICAgICBjYXNlIDMyOg0KICAgICAgICAgICAgY2FzZSAxMDoNCiAgICAgICAgICAgIGNhc2UgMTM6ICRhMiAuPSAiJm5ic3A7IjsgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0OiAkYTIgLj0gaHRtbHNwZWNpYWxjaGFycygkc3RyWyRpXSk7DQogICAgICAgICAgfQ0KICAgICAgICAgICRuKys7DQogICAgICAgICAgaWYgKCRuID09ICRoZXhkdW1wX3Jvd3MpIHsNCiAgICAgICAgICAgICRuID0gMDsNCiAgICAgICAgICAgIGlmICgkaSsxIDwgc3RybGVuKCRzdHIpKSB7JGEwIC49IHNwcmludGYoIiUwOFgiLCRpKzEpLiI8YnI+Ijt9DQogICAgICAgICAgICAkYTEgLj0gIjxicj4iOw0KICAgICAgICAgICAgJGEyIC49ICI8YnI+IjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWNobyAiPHRhYmxlIGJvcmRlcj0xIGJnY29sb3I9IzY2NjY2Nj4iLg0KICAgICAgICAgICAgICI8dHI+PHRkIGJnY29sb3I9IzY2NjY2Nj4iLiRhMC4iPC90ZD4iLg0KICAgICAgICAgICAgICI8dGQgYmdjb2xvcj0jMDAwMDAwPiIuJGExLiI8L3RkPiIuDQogICAgICAgICAgICAgIjx0ZCBiZ2NvbG9yPSMwMDAwMDA+Ii4kYTIuIjwvdGQ+Ii4NCiAgICAgICAgICAgICAiPC90cj48L3RhYmxlPjxicj4iOw0KICAgICAgfQ0KICAgICAgDQogICBlY2hvICI8Yj5IRVhEVU1QOjwvYj48bm9icj4gWzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmZ1bGxoZXhkdW1wPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkZ1bGw8L2E+XSBbPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZD0iLnVybGVuY29kZSgkZCkuIlwiPlByZXZpZXc8L2E+XTxicj48Yj5CYXNlNjQ6IDwvYj4NCiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5FbmNvZGU8L2E+XSZuYnNwOzwvbm9icj4NCiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0yJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bms8L2E+XSZuYnNwOzwvbm9icj4NCiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0zJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bmsrcXVvdGVzPC9hPl0mbmJzcDs8L25vYnI+DQogICAgICAgIDxub2JyPls8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZiYXNlNjQ9NCZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RGVjb2RlPC9hPl0mbmJzcDs8L25vYnI+DQogICAgICAgIDxQPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImh0bWwiKSB7DQogICBpZiAoJHdoaXRlKSB7QG9iX2NsZWFuKCk7fQ0KICAgZWNobyAkcjsNCiAgIGlmICgkd2hpdGUpIHtib2dlbGV4aXQoKTt9DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gInR4dCIpIHtlY2hvICI8cHJlPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvcHJlPiI7fQ0KICBlbHNlaWYgKCRmdCA9PSAiaW5pIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAocGFyc2VfaW5pX2ZpbGUoJGQuJGYsVFJVRSkpOyBlY2hvICI8L3ByZT4iO30NCiAgZWxzZWlmICgkZnQgPT0gInBocHNlc3MiKSB7DQogICBlY2hvICI8cHJlPiI7DQogICAkdiA9IGV4cGxvZGUoInwiLCRyKTsNCiAgIGVjaG8gJHZbMF0uIjxicj4iOw0KICAgdmFyX2R1bXAodW5zZXJpYWxpemUoJHZbMV0pKTsNCiAgIGVjaG8gIjwvcHJlPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImV4ZSIpIHsNCiAgICRleHQgPSBleHBsb2RlKCIuIiwkZik7DQogICAkYyA9IGNvdW50KCRleHQpLTE7DQogICAkZXh0ID0gJGV4dFskY107DQogICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgICRyZnQgPSAiIjsNCiAgIGZvcmVhY2goJGV4ZWZ0eXBlcyBhcyAkaz0+JHYpDQogICB7DQogICAgaWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9DQogICB9DQogICAkY21kID0gc3RyX3JlcGxhY2UoIiVmJSIsJGYsJHJmdCk7DQogICBlY2hvICI8Yj5FeGVjdXRlIGZpbGU6PC9iPjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9Y21kPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJjbWRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkY21kKS4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkY21kKSsyKS4iXCI+PGJyPkRpc3BsYXkgaW4gdGV4dC1hcmVhPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjbWRfdHh0XCIgdmFsdWU9XCIxXCIgY2hlY2tlZD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZCkuIlwiPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJFeGVjdXRlXCI+PC9mb3JtPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gInNkYiIpIHtlY2hvICI8cHJlPiI7IHZhcl9kdW1wKHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJHIpKSk7IGVjaG8gIjwvcHJlPiI7fQ0KICBlbHNlaWYgKCRmdCA9PSAiY29kZSIpIHsNCiAgICBpZiAoZXJlZygicGhwIi4iQkIgMi4oLiopIGF1dG8tZ2VuZXJhdGVkIGNvbmZpZyBmaWxlIiwkcikpIHsNCiAgICAgICRhcnIgPSBleHBsb2RlKCJcbiIsJHIpOw0KICAgICAgaWYgKGNvdW50KCRhcnIgPT0gMTgpKSB7DQogICAgICAgIGluY2x1ZGUoJGQuJGYpOw0KICAgICAgICBlY2hvICI8Yj5waHBCQiBjb25maWd1cmF0aW9uIGlzIGRldGVjdGVkIGluIHRoaXMgZmlsZSE8YnI+IjsNCiAgICAgICAgaWYgKCRkYm1zID09ICJteXNxbDQiKSB7JGRibXMgPSAibXlzcWwiO30NCiAgICAgICAgaWYgKCRkYm1zID09ICJteXNxbCIpIHtlY2hvICI8YSBocmVmPVwiIi4kc3VybC4ieD1zcWwmc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRiaG9zdCkuIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRkYnVzZXIpLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJGRicGFzc3dkKS4iJnNxbF9wb3J0PTMzMDYmc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkZGJuYW1lKS4iXCI+PGI+PHU+Q29ubmVjdCB0byBEQjwvdT48L2I+PC9hPjxicj48YnI+Ijt9DQogICAgICAgIGVsc2Uge2VjaG8gIkJ1dCwgeW91IGNhbid0IGNvbm5lY3QgdG8gZm9ydW0gc3FsLWJhc2UsIGJlY2F1c2UgZGItc29mdHdhcmU9XCIiLiRkYm1zLiJcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5ICIuJHNoX25hbWUuIi4gUGxlYXNlLCByZXBvcnQgdXMgZm9yIGZpeC4iO30NCiAgICAgICAgZWNobyAiUGFyYW1ldGVycyBmb3IgbWFudWFsIGNvbm5lY3Q6PGJyPiI7DQogICAgICAgICRjZmd2YXJzID0gYXJyYXkoImRibXMiPT4kZGJtcywiZGJob3N0Ij0+JGRiaG9zdCwiZGJuYW1lIj0+JGRibmFtZSwiZGJ1c2VyIj0+JGRidXNlciwiZGJwYXNzd2QiPT4kZGJwYXNzd2QpOw0KICAgICAgICBmb3JlYWNoICgkY2ZndmFycyBhcyAkaz0+JHYpIHtlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGspLiI9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic8YnI+Ijt9DQogICAgICAgIGVjaG8gIjwvYj48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgICB9DQogICAgfQ0KICAgIGVjaG8gIjxkaXYgc3R5bGU9XCJib3JkZXIgOiAwcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMWVtOyBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDFlbTsgbWFyZ2luLXJpZ2h0OiAxZW07IG1hcmdpbi1sZWZ0OiAxZW07IGJhY2tncm91bmQtY29sb3I6ICIuJGhpZ2hsaWdodF9iYWNrZ3JvdW5kIC4iO1wiPiI7DQogICAgaWYgKCFlbXB0eSgkd2hpdGUpKSB7QG9iX2NsZWFuKCk7fQ0KICAgIGhpZ2hsaWdodF9maWxlKCRkLiRmKTsNCiAgICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtib2dlbGV4aXQoKTt9DQogICAgZWNobyAiPC9kaXY+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiZG93bmxvYWQiKSB7DQogICAgQG9iX2NsZWFuKCk7DQogICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KICAgIGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGQuJGYpKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iXCI7Iik7DQogICAgZWNobyAkcjsNCiAgICBleGl0Ow0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJub3RlcGFkIikgew0KICAgIEBvYl9jbGVhbigpOw0KICAgIGhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluIik7DQogICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGYuIi50eHRcIjsiKTsNCiAgICBlY2hvKCRyKTsNCiAgICBleGl0Ow0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJpbWciKSB7DQogICAgJGluZiA9IGdldGltYWdlc2l6ZSgkZC4kZik7DQogICAgaWYgKCEkd2hpdGUpIHsNCiAgICAgIGlmIChlbXB0eSgkaW1nc2l6ZSkpIHskaW1nc2l6ZSA9IDUwO30NCiAgICAgICR3aWR0aCA9ICRpbmZbMF0vMTAwKiRpbWdzaXplOw0KICAgICAgJGhlaWdodCA9ICRpbmZbMV0vMTAwKiRpbWdzaXplOw0KICAgICAgZWNobyAiPGNlbnRlcj48Yj5TaXplOjwvYj4mbmJzcDsiOw0KICAgICAgJHNpemVzID0gYXJyYXkoIjEwMCIpOw0KICAgICAgZm9yZWFjaCAoJHNpemVzIGFzICR2KSB7DQogICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbWcmZD0iLnVybGVuY29kZSgkZCkuIiZpbWdzaXplPSIuJHYuIlwiPiI7DQogICAgICAgIGlmICgkaW1nc2l6ZSAhPSAkdiApIHtlY2hvICR2O30NCiAgICAgICAgZWxzZSB7ZWNobyAiPHU+Ii4kdi4iPC91PiI7fQ0KICAgICAgICBlY2hvICI8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgIH0NCiAgICAgIGVjaG8gIjxicj48YnI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbWcmd2hpdGU9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCIgd2lkdGg9XCIiLiR3aWR0aC4iXCIgaGVpZ2h0PVwiIi4kaGVpZ2h0LiJcIiBib3JkZXI9XCIxXCI+PC9jZW50ZXI+IjsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICBAb2JfY2xlYW4oKTsNCiAgICAgICRleHQgPSBleHBsb2RlKCRmLCIuIik7DQogICAgICAkZXh0ID0gJGV4dFtjb3VudCgkZXh0KS0xXTsNCiAgICAgIGhlYWRlcigiQ29udGVudC10eXBlOiAiLiRpbmZbIm1pbWUiXSk7DQogICAgICByZWFkZmlsZSgkZC4kZik7DQogICAgICBleGl0Ow0KICAgIH0NCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiZWRpdCIpIHsNCiAgIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogICB7DQogICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkZC4kZik7fQ0KICAgICRmcCA9IGZvcGVuKCRkLiRmLCJ3Iik7DQogICAgaWYgKCEkZnApIHtlY2hvICI8Yj5DYW4ndCB3cml0ZSB0byBmaWxlITwvYj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICBlY2hvICI8Yj5TYXZlZCE8L2I+IjsNCiAgICAgZndyaXRlKCRmcCwkZWRpdF90ZXh0KTsNCiAgICAgZmNsb3NlKCRmcCk7DQogICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkZC4kZiwkc3RhdFs5XSwkc3RhdFs4XSk7fQ0KICAgICAkciA9ICRlZGl0X3RleHQ7DQogICAgfQ0KICAgfQ0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcikpOw0KICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30NCiAgIGlmICgkcm93cyA+IDMwKSB7JHJvd3MgPSAzMDt9DQogICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1lZGl0JmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJTYXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJyZXNldFwiIHZhbHVlPVwiUmVzZXRcIj4mbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsb2NhdGlvbi5ocmVmPSciLmFkZHNsYXNoZXMoJHN1cmwuIng9bHMmZD0iLnN1YnN0cigkZCwwLC0xKSkuIic7XCIgdmFsdWU9XCJCYWNrXCI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwiZWRpdF90ZXh0XCIgY29scz1cIjEyMlwiIHJvd3M9XCIiLiRyb3dzLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3RleHRhcmVhPjwvZm9ybT4iOw0KICB9DQogIGVsc2VpZiAoIWVtcHR5KCRmdCkpIHtlY2hvICI8Y2VudGVyPjxiPk1hbnVhbGx5IHNlbGVjdGVkIHR5cGUgaXMgaW5jb3JyZWN0LiBJZiB5b3UgdGhpbmssIGl0IGlzIG1pc3Rha2UsIHBsZWFzZSBzZW5kIHVzIHVybCBhbmQgZHVtcCBvZiBcJEdMT0JBTFMuPC9iPjwvY2VudGVyPiI7fQ0KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPlVua25vd24gZXh0ZW5zaW9uICgiLiRleHQuIiksIHBsZWFzZSwgc2VsZWN0IHR5cGUgbWFudWFsbHkuPC9iPjwvY2VudGVyPiI7fQ0KfQ0KZWNobyAiPC9kaXY+XG4iOw0KfQ0KfQ0KZWxzZSB7DQpAb2JfY2xlYW4oKTsNCiRpbWFnZXMgPSBhcnJheSgNCiJhcnJvd19sdHIiPT4NCiJSMGxHT0RsaEpnQVdBSUFCQVAvLy93QUFBQ0g1QkFIb0F3RUFMQUFBQUFBbUFCWUFBQUl2akkrcHkrMFBGNGkwZ1Z2enVWeFhEbm9RU0lyVVpHWm9lcktmMjhLalBOUE9ha3U1UmZaK3VRc0toOFJpb2dBQU93PT0iLA0KImJhY2siPT4NCiJSMGxHT0RsaEZBQVVBS0lBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4NCiJhTHJjL2pES1NXV3BqVnlzU05pWUo0Q1VPQkpvcWpuaUlMend1ekx0WU4vM3pCU0VyZjZrQlcrZ0tSaVBSZ2hQaCtFRkswbU9VRXF0Ii4NCiJXZzBKQURzPSIsDQoiYnVmZmVyIj0+DQoiUjBsR09EbGhGQUFVQUtJQUFBQUFBUC8vLy9qNCtOM2QzY3pNekxLeXNvYUdodi8vL3lINUJBRUFBQWNBTEFBQUFBQVVBQlFBQUFObyIuDQoiZUxyY3JpYkc5MHk0RjFBbXU1K05oWTJreGwyQ01Ld3JRUlNHdVZqcDRMbXdEQVdxaUFHRlhDaGcreGhuUkIrcHRMT2hhaTFjckVtRCIuDQoiRGx3djRjRUM0Nm1pMllnSlFLYXhzRUdERm5uR3dXRFRFemo5anJQUmRiaHVHOENyLzJJTlpJT0VoWHNiRHdrQU93PT0iLA0KImNoYW5nZSI9Pg0KIlIwbEdPRGxoRkFBVUFNUWZBTDNoajduWCtwcW8xZWp5L2Y3WUFjVGIrOHZoKzZGdEg1NldadHZyL1JBUUVaZWN4OUxsL1BYNi92MysiLg0KIi8zZUh0NnE4OGVIdS9aa2ZIM3lWeUl1UXQrNzIva09tOTlmby9QOEFabTU3cmtHUzRIZXo2cGlsOW9lcDNHWm1adi8vL3lINUJBRUEiLg0KIkFCOEFMQUFBQUFBVUFCUUFBQVdmNENlT1pHbWU2Tm10TE91bFgrYzRUVk5WUTdlOXFGemZnNEhGb25rZEpBNVM1NGNiUkFvRnlFT0MiLg0KIndTaVV0bVlra3Jnd09BZUE1enJxYUxsZEJpTk1JSmVEMjY2WFlUZ1FEbTVSeDhtZEcrb0FiU1lkYUg0R2EzYzhKQk1KYVhRR0JRZ0EiLg0KIkNIa2pFNGFRa1EwQWxTSVRhbitaQVFxa2lpUVBqMUFGQWFNS0VLWWpEMzlRckt3S0FhOG5HUUs4QWd1L0N4VENzQ01leHNmSXhqREwiLg0KInpNc2hBRHM9IiwNCiJkZWxldGUiPT4NCiJSMGxHT0RsaEZBQVVBT1paQVB6OC9OUEZ5TmdITHMwWU92UHo4L2IyOXNhY3BOWFYxZlgxOWN3WE9mRHc4S2VucC9uNStldGdldW5wIi4NCiI2ZGNHTE1NcFJ1cnE2cEtTa3R2YjIrL3Y3KzF3aDNSMGRQblAxN2lBaXB4eWVsOWZYN2RqY3NjU005M2QzWkdSa2VFc1RldmQ0TEN3Ii4NCiJzR1JrWkdwT1UrSWZRK0VRTm9oNmZkSWNQZUhoNFlXRmhiSlFZdkx5OHVpK3htNXVic3hjY094OGtjTTRVdFk5V2VBZFFZbUppZld2Ii4NCiJ2SHg4Zk1uSnljTTNVZjN2OHJSdWU5OE9OYk96czlZRks1U1VsS1lvUCtUazVOMG9TdWZuNTdaR1dzUXJSOWtJTDVDUWtPUGo0MlZsIi4NCiJaZUFQTnVkQVg5c0tNUHY3KzE1UVU1dWJtMzkvZjhlNXU0eGlhdHJhMnViS3o4UER3K3BmZWU5L2xNSzB0ODFyZmQ4QUtmLy8vd0FBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1Ii4NCiJCQUVBQUZrQUxBQUFBQUFVQUJRQUFBZXNnRm1DZzRTRmhvZUloaVVmSUltSU1sZ1FCNDZHTEFsWVFrYUZWVmhTQUlaTFQ1Y2JFWUk0Ii4NCiJTVG81TXhPZmhRd0JBMWdZQ2hja1FCazFPd2lJQUxBQ0xrZ3hKaWxUQkk2OVJGaERGaDRIREpSWlZGZ1BQRkJSMEZrTldEZE1IQThHIi4NCiJCWlRhTUNJU1ZnTUM0SWtWV0NjYVBTaTk2T3FHTkZoS0kwNGRncjBRV0ZjS0RMM0E0dU9JalZaWkFCeFFJV0RCTGtJRVFyUm9Rc0hRIi4NCiJqd1ZGSEJnaUVHUUZJZ1Fhc1lrY1NiSlFJQUE3IiwNCiJkb3dubG9hZCI9Pg0KIlIwbEdPRGxoRkFBVUFMTUlBQUQvQUFDQUFJQUFBTURBd0g5L2YvOEFBUC8vL3dBQUFQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVUFCUUFBQVJPRU1sSnE3MDRVeUdPdmtMaGZWVTRrcE9KU3B4NW5GOVlpQ3RMZjBTdUg3cHUiLg0KIkVZT2djQmdrd0FpR3BIS1p6QjJKeEFEQVNRRkNpZFFKc01mZEdxc0RKbk9RbFhUUDM4cHJ6V2JYM3FnSUFEcz0iLA0KImZvcndhcmQiPT4NCiJSMGxHT0RsaEZBQVVBUElBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4NCiJhTHJjL2pESzJRcDl4VjVXaU41RzUwRlphUkxENkloRTY2THB0M1JEYmQ5Q1FGU0U0UCsrUVc3SGU3VUtQaDBJcVZ3MmwwUlFTRXF0Ii4NCiJXcXNKQURzPSIsDQoiaG9tZSI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8rcnE2dDNkM2N6TXpMS3lzb2FHaG1abVpnUUVCUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIrTU1rNVRUV0k2aXB5TW9PM2NVV1JnZUpvQ0NhTG9LTzBtcTBaeGpOU0JEV1MiLg0KImtycUFzTGZKN1lRQmw0dGlSQ1lGU3BQTWRSUkNvUU9pTDRpOENnWmdrMDlXZldMQllaSEI2VVdqQ2VxdXdFREh1T0VWSzNRdGdOL2oiLg0KIlZ3TXJCRFp2Z0YrQ2hIYUdlWWlDQlFZSENIOFZCSmFXZEFlU2w1WWlXNStnb0JJUkFEcz0iLA0KIm1vZGUiPT4NCiJSMGxHT0RsaEhRQVVBTE1BQUFBQUFQLy8vNkNncE4zZDNjek16SWFHaG1abVpsOWZYLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWdBTEFBQUFBQWRBQlFBQUFTQkVNbEpxNzA0NjFtNi8rQUhaTVVnbkdpcW5pTldISEFzejNGN0ZVR3U3M3hPIi4NCiIyQlpjd0dEb0VYay9VcTRJQ0FDZVE2ZnptWFRsbnMwZGRsZTk5YjdjRnZZcEVSNTVaMTBYeTFsS3Q4d3BvSXNBQ3JkYXFCcFlFWUsvIi4NCiJkSDFMUldpRWUwcFJUWEJ2Vkh3VWQzbzZlRDZPSEFTWG1KbWFtSlVTWTUrZ254dWpwQklSQURzPSIsDQoic2VhcmNoIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLytycTZ0M2QzY3pNek1EQXdMS3lzb2FHaG5kM2QyWm1abDlmWDAxTlRTa3BLUVFFQlAvLyIuDQoiL3dBQUFDSDVCQUVBQUE0QUxBQUFBQUFVQUJRQUFBU24wTWw1cWowejV4cjYrSlpHZVVacEhJcVJOT0lSZklZaXkrYTZ2Y09wSE9hcCIuDQoiczVJS1FjY3o4WGdLNEVHZ1FxV012a3JTc2N5bGhvYUZWbXVaTGdVREFuWnhFQk1PRFNucmtoaVNDWjRDR3JVV01BK0xMRHh1U0hzRCIuDQoiQWtONEMzc2ZCWDEwVkhhQko0UWZBNGVJVTRwaWpRY0ZtQ1ZvTmtGbGdnY01SU2NOU1VDZEp5aG9EYXNOWjVNVERWc1hCd2x2aVJtciIuDQoiQ2JxN0M2c0lycWF3ckt3VHY2OGl5QTZyRGhFQU93PT0iLA0KInNldHVwIj0+DQoiUjBsR09EbGhGQUFVQU1RQUFBQUFBUC8vLy9qNCtPUGo0OTNkM2N6TXpNREF3TEt5c3BhV2xvYUdobmQzZDJabVpsOWZYMDFOVFVKQyIuDQoiUWh3Y0hQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFFQSIuDQoiQUJBQUxBQUFBQUFVQUJRQUFBV1ZJQ1NLaWtLV2FEbXVTaENVYmp6TXdFb0doVnZzZkhFRU5SWU9nZWdsamtlZzBQRjRLQklGUk1JQiIuDQoicUNhQ0o0ZUlHUVZvSVZXc1RmUW9YTWZvVWZtTVpyZ1oyR05EUEdJSTdnSkRMWUVyd0cxdmdXOENDUXR6Z0hpSkFuYUZoeXQyZHdRRSIuDQoiT3djTVpvWjBrSktVbFplT2RRS2JQZ2VkalptaG5BY0pscWFJcVVlc21JaWtwRWl4bnlKaHVsVU1oZzI0YVNPNll5RUFPdz09IiwNCiJzbWFsbF9kaXIiPT4NCiJSMGxHT0RsaEV3QVFBTE1BQUFBQUFQLy8vNXljQU03T1kvLy9uUC8venYvT25QZjM5Ly8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWdBTEFBQUFBQVRBQkFBQUFSUkVNbEpxNzA0NnlwNkJ4c2lIRVZCRUFLWUNVUHJEcDdIbFhSZEVvTXFDZWJwIi4NCiIvNFljaGZmekdRaEg0WVJZUEIyRE9sSFBpS3dxZDFQcTh5clZWZzNRWWVINVJZSzVySmZhRlVVQTN2QjRmQklCQURzPSIsDQoic21hbGxfdW5rIj0+DQoiUjBsR09EbGhFQUFRQUhjQUFDSDVCQUVBQUpVQUxBQUFBQUFRQUJBQWh3QUFBSWVwM0JFOW1sbGljM0I1aVZwamRNdmgvTUxjK3kxVSIuDQoicDlQbS9HVnVmYzdqL016Vi85WG0vRU9tOTlibi9OanAvYTdRK3RUbS9MSFMrZVh3L3Qzci9ObnAvZGpvL05ycS9majcvOXZxL05mbyIuDQoiL01iZSs4cmgvTW5nKzdqVytydlkrcjdaKzdYUjlkRGsvTkhrL05MbC9MVFUrcm5YKzh6aS9MYlYrK2Z4L2U3Mi92SDMvdkw0L3UzMSIuDQoiL2UzMS91RHUvZHpyL09yei9lSHUvZlg2L3ZINC92Ly8vL3YrLzNlejZ2ZjcvL1Q1L2tHUzRQdjkvN1hWK3JIVCtyL2IrcnphK3ZQNCIuDQoiL3V6MC91cnovdTcxL3V2ei9kVG4vTS9rL04zcy9kdnIvY2pnKzhQZCs4SGMrc2ZmKzhUZSsvRDIvclhJOHJIRjhick04N2ZKOG5tUCIuDQoid3IzTjg2L0Q4S3ZCOEY5bmVFRm90RUJudEVOcHRFTnB0U3hVcHgxSW9EbGZyVFJjclplZXlaYWN4cG1oekl1UnRwV1p4SXVPdUtxeiIuDQoiOVpPV3dYNklzM1dJdTVpbTA3cko5SjJ0MlplazBtNTdycHFvMW5LQ3RVVnJ0WWlyM3ZmNi80NnY0WXV1NFdadmZyN1A2c1BTNnNEUSIuDQoiNjZYQjZjalo4YS9LNzkvcy9kYm4vZXp6L2N6ZDltTjBqS1RCNmFpLzc2Vzk3bmlYejJHQ3dWNkF3VWRzdFh5VnlHU0R3bm1ZejRpbyIuDQoiMjRPaTFhM0I0NVN5NGFlOTQ0Q2N6NFNqMW4yR2xnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFqbkFDdFZDa0N3NEp4SkFRUXFGQmpBeG8wTU5HcXNBQlFBaDZDRkEzbmswTUhpUlJFVkRoenNvTFF3QUowZ1Q0VG9lY1NIQVlNeiIuDQoiYVFnb0ROQ0NTQjRFQW5JbUNpU0JqVXlHTG9iZ1hCVHBrQUE1STZwZ21Ta0R6NWN1TVN6OHlXbEF5b0NaRkdiNFNRS2hBU01CWEpwTSIuDQoidVNyUUVRd2tHallrUUNUQXk2QWxVTWhXa2xRQnc0TUVoZ1NBNlhQZ1J4UzVpaTQwS0xGZ2k0QkdURUtBc0NLWGloRVNDenJzZ1NRQyIuDQoieUlrVVYrU3FPWUxDQTRjc0F1cDg2T0dEa053NEJwUTRPYUJGZ0IwVEV5SVVLcUR3VFJzNGE5eU1DU09tREJveVp1NHNKS0Nnd0lEaiIuDQoieUFzb2tCa1FBRHM9IiwNCiJtdWx0aXBhZ2UiPT4iUjBsR09EbGhDZ0FNQUpFREFQLy8vLy8zbVFBQUFBQUFBQ0g1QkFFQUFBTUFMQUFBQUFBS0FBd0FBQUlqM0lSIi4NCiJwSmhDT0Rub3ZpZEFvdkJkTXp6a2l4bFhkbEkyb1pwSldFc1N5d0x6UlVBQUFPdz09IiwNCiJzb3J0X2FzYyI9Pg0KIlIwbEdPRGxoRGdBSkFLSUFBQUFBQVAvLy85VFF5SUNBZ1AvLy93QUFBQUFBQUFBQUFDSDVCQUVBQUFRQUxBQUFBQUFPQUFrQUFBTWEiLg0KIlNMcmNQY0U5R0tVYVFsUTVzTjVQbG9GTEozNU9vSzZxNVNZQU93PT0iLA0KInNvcnRfZGVzYyI9Pg0KIlIwbEdPRGxoRGdBSkFLSUFBQUFBQVAvLy85VFF5SUNBZ1AvLy93QUFBQUFBQUFBQUFDSDVCQUVBQUFRQUxBQUFBQUFPQUFrQUFBTWIiLg0KIlNMcmNPakJDQjRVVklUZ3lMdDVjaDJtZ1NKWkRCaTdwNmhJSkFEcz0iLA0KInNxbF9idXR0b25fZHJvcCI9Pg0KIlIwbEdPRGxoQ1FBTEFQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLg0KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLg0KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLg0KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLg0KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLg0KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLg0KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLg0KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLg0KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLg0KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLg0KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLg0KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBSkFBc0EiLg0KIkFBZzRBUDhKUkVGUTREK0NDQk9pNE1hd0lUZUZDZy9pUWhFUHhjU0JsRkNvUTVGeDRNU0t2MUJnUkdHTW8waUpGQzJlaEhqU29NdC8iLg0KIkFRRUFPdz09IiwNCiJzcWxfYnV0dG9uX2VtcHR5Ij0+DQoiUjBsR09EbGhDUUFLQVBjQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnSUNBZ01EQXdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuDQoiLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNd0FBWmdBQW1RQUF6QUFBL3dBekFBQXpNd0F6WmdBem1RQXp6QUF6L3dCbSIuDQoiQUFCbU13Qm1aZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFELyIuDQoiTXdEL1pnRC9tUUQvekFELy96TUFBRE1BTXpNQVpqTUFtVE1BekRNQS96TXpBRE16TXpNelpqTXptVE16ekRNei96Tm1BRE5tTXpObSIuDQoiWmpObW1UTm16RE5tL3pPWkFET1pNek9aWmpPWm1UT1p6RE9aL3pQTUFEUE1NelBNWmpQTW1UUE16RFBNL3pQL0FEUC9NelAvWmpQLyIuDQoibVRQL3pEUC8vMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabSIuDQoiekdabS8yYVpBR2FaTTJhWlptYVptV2FaekdhWi8yYk1BR2JNTTJiTVptYk1tV2JNekdiTS8yYi9BR2IvTTJiL1ptYi9tV2IvekdiLyIuDQoiLzVrQUFKa0FNNWtBWnBrQW1aa0F6SmtBLzVrekFKa3pNNWt6WnBrem1aa3p6Smt6LzVsbUFKbG1NNWxtWnBsbW1abG16SmxtLzVtWiIuDQoiQUptWk01bVpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QSIuDQoiTTh3QVpzd0FtY3dBek13QS84d3pBTXd6TTh3elpzd3ptY3d6ek13ei84eG1BTXhtTTh4bVpzeG1tY3htek14bS84eVpBTXlaTTh5WiIuDQoiWnN5Wm1jeVp6TXlaLzh6TUFNek1NOHpNWnN6TW1jek16TXpNLzh6L0FNei9NOHovWnN6L21jei96TXovLy84QUFQOEFNLzhBWnY4QSIuDQoibWY4QXpQOEEvLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWiIuDQoielArWi8vL01BUC9NTS8vTVp2L01tZi9NelAvTS8vLy9BUC8vTS8vL1p2Ly9tZi8velAvLy95SDVCQUVBQUJBQUxBQUFBQUFKQUFvQSIuDQoiQUFnakFQOEpSRUZRNEQrQ0NCT2lNTWhRb2NLREVCY3VqRWlSb3NTQkZqRmVuT2h3WVVBQU93PT0iLA0KInNxbF9idXR0b25faW5zZXJ0Ij0+DQoiUjBsR09EbGhEUUFNQVBjQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnSUNBZ01EQXdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuDQoiLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNd0FBWmdBQW1RQUF6QUFBL3dBekFBQXpNd0F6WmdBem1RQXp6QUF6L3dCbSIuDQoiQUFCbU13Qm1aZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFELyIuDQoiTXdEL1pnRC9tUUQvekFELy96TUFBRE1BTXpNQVpqTUFtVE1BekRNQS96TXpBRE16TXpNelpqTXptVE16ekRNei96Tm1BRE5tTXpObSIuDQoiWmpObW1UTm16RE5tL3pPWkFET1pNek9aWmpPWm1UT1p6RE9aL3pQTUFEUE1NelBNWmpQTW1UUE16RFBNL3pQL0FEUC9NelAvWmpQLyIuDQoibVRQL3pEUC8vMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabSIuDQoiekdabS8yYVpBR2FaTTJhWlptYVptV2FaekdhWi8yYk1BR2JNTTJiTVptYk1tV2JNekdiTS8yYi9BR2IvTTJiL1ptYi9tV2IvekdiLyIuDQoiLzVrQUFKa0FNNWtBWnBrQW1aa0F6SmtBLzVrekFKa3pNNWt6WnBrem1aa3p6Smt6LzVsbUFKbG1NNWxtWnBsbW1abG16SmxtLzVtWiIuDQoiQUptWk01bVpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QSIuDQoiTTh3QVpzd0FtY3dBek13QS84d3pBTXd6TTh3elpzd3ptY3d6ek13ei84eG1BTXhtTTh4bVpzeG1tY3htek14bS84eVpBTXlaTTh5WiIuDQoiWnN5Wm1jeVp6TXlaLzh6TUFNek1NOHpNWnN6TW1jek16TXpNLzh6L0FNei9NOHovWnN6L21jei96TXovLy84QUFQOEFNLzhBWnY4QSIuDQoibWY4QXpQOEEvLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWiIuDQoielArWi8vL01BUC9NTS8vTVp2L01tZi9NelAvTS8vLy9BUC8vTS8vL1p2Ly9tZi8velAvLy95SDVCQUVBQUJBQUxBQUFBQUFOQUF3QSIuDQoiQUFnekFGRUlIRWl3b01HRENCSDZXMGd0b1VCLy8xQkVOT2lQMnNLRUN6TmVOSWlxWTBkL0ZCZit5MGpSNDhlUUdVYzZKQmdRQURzPSIsDQoidXAiPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vL2o0K09QajQ5M2QzY3pNekxLeXNvYUdoazFOVGYvLy93QUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSME1NbEpxNzM0bnMxUG5rY2dqZ1h3aGNOUXJJVmhtRm9uenh3UWpuaWUyN2pnIi4NCiIrNFFneTNYZ0JYNElvSERsTWhSdmdnRmlHaVN3V3M1WHlEZnRXcGxFSis5SFFDeXgyYzFZRURSZnd3Znh0b3A0cDUzUHdMS09qdnZWIi4NCiJJWHRkZ3dnZFBHZFlmbmcxSVZlSmFUSUFrcE9VbFpZZkh4RUFPdz09IiwNCiJ3cml0ZSI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy85M2QzY3pNekxLeXNvYUdobVptWmw5Zlh3UUVCUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIwTU1sSnF5ekZhbHFFUUp1R0VRU0NuV2c2Rm9ncGtIQU1GNEhBSnNXaDcvemUiLg0KIkVRWVFMVUFzR2dNMFd3dDNiQ0pmUVNGeDEweXlCbEpuOFJmRU1nTTlYKzNxSFdxNWlFRDV5Q3NNQ2wxMTFrbkRwdVhmWWxzK0lLNjEiLg0KIkxYZCtXV0VITFVkL1RvSkZaUU9PajVDUmppQ0JsWmFYSUJFQU93PT0iLA0KImV4dF9hc3AiPT4NCiJSMGxHT0RkaEVBQVFBTE1BQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdNREF3SUNBZ1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3l3QUFBQUFFQUFRQUFBRVN2RElTYXNGMk42RE1OQVM4QnhmbDFVaU9aWWU5YVV3Z3BEVHE2cVAvSVgwT3o3QVhVLzFlUmdJIi4NCiJENkhQaHpqU2VMWWRZYWJzRENXTVp3aGczV1d0S0s0UXJNSG9oQ0FTK2hBQkFEcz0iLA0KImV4dF9tcDMiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVlBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdJQ0FBUC8vQUFBQUFBQUFBQU5VIi4NCiJhR3JTN2l1S1FHc1lJcXBwNlFpWlJEUVdZQUlMUVFTQTJnMm80UW9BU0hHd3ZCYkFOM0dYMXFYQStyMWFCUUhSWkhNRURTWUN6M2ZjIi4NCiJJR3RHVDh3QVV3bHR6d1dOV1JWM0xEbnhZTTF1YjZHbmVEd0JBRHM9IiwNCiJleHRfYXZpIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3UDhBQUFBQUFBQUFBQUFBQUFOTSIuDQoiV0ZyUzdpdUtRR3NZSXFwcDZRaVoxRkZBQ1lpakI0Uk1xamJZMDFEd1dnNDRnQXNyUDVRRmsyNEh1T2hPREp3U1UvSWhCWVRjanhlNCIuDQoiUFlYQ3lnK1YyaTQ0WGVSbVNmWXFzR2hBQWdBNyIsDQoiZXh0X2NnaSI9Pg0KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFFd0FMQUFBQUFBUUFCQUFoZ0FBQUp0cUNIZDNkN2lOR2ErSE11N2VyOUdpQzYrSU9PdTkiLg0KIkRrSkFQcXlGUXFsL04vRGxoc3l5ZmU2N0FmL1NGUC84a2YvOWxEOUVUdi9QQ3YvY1EvL2VOdi9YSWYvWktQL1JEdi9iTGYvY01haDYiLg0KIkxQUFlSdnpnUit2Z3g3eVZNdi9sVXYvbVR2L2ZPZi9NQXYvbWNmL05BLy9xaWYvTUFQL1RGZi94cDd1WlZmL1dJUC9PQnF0L0h2L1MiLg0KIkV2L2hQKzdPT1AvV0h2L3diSE5mUDRWelY3dVBGdi9wVi8vclhmL3ljZi96ZHYvMGVVTkpXRU5LV3N5a0lrOVJXTXl0UC8vNGlFcFEiLg0KIlh2LzlxZmJwdFAvdVo5M0dpTnE2WFdwUkovL2lRdjd3c3F1RVF2L2pSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFlZWdFeUNnMHdCaEllSEFZcUlqQUV3aG95RUFRUVhCSkNSaFFNdUE1ZVNpb29HSXdhZmk0VU0iLg0KIkJhZ05GQk1jRFI0RlF3d0JBZ0VHU0JCRUZTd3hOaEF5R2c2V0Frd0NCQWd2RmlVaU9CRWdOVWM3dzRJQ05EOFBLQ0ZBT2kwSlBOS0QiLg0KIkFrVW5HVGtSTndNUzM0TUJKQmdkUmtKTENEN3FnZ0VQS3hzSktpWVRCd2VKa2poUWtrN0FoeFE5RnFnTE1HQkdrRzhLRkNnOEpLQWkiLg0KIlJZdE1BZ0VBT3c9PSIsDQoiZXh0X2NtZCI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBY0FMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd0FBQWdJQ0FBUC8vQUFBQUFBTkkiLg0KImVMcmNKekRLQ1llOStBb2dCdmxnK0cyZFNBUUFpcElENVhKRElNKzB6TkpGa2RMM0RCZzZIbXhXTUVBQWhWbFBCaGdZZHJZaERRQ04iLg0KImRtcllBTW4xb25xL1lLcGp2RWdBQURzPSIsDQoiZXh0X2NwcCI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFndi8vL3dBQUFBQUFnSUNBZ01EQXdBQUFBQUFBQUFBQUFBTkMiLg0KIldMUGM5WENBU1NjWjhNbEtpY29iQndSa0VJa1ZZV3FUNEZJQ29KNXY3YzZzM2NxckFyd2luRS8zNDlGaU5vRnc0NHJ0bHFoT0w0UmEiLg0KIkVxN1lyTERFN2E0U0FEcz0iLA0KImV4dF9pbmkiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVlBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vOERBd0lDQWdJQ0FBUC8vQUFBQUFBQUFBQU5MIi4NCiJhQXJCM2lvYU5rSzlNTmJIczZsQktJb0NvSTFvVUo0TjREQ3FxWUJwdU02aHE4UDNod29FZ1UzbWF3RUxCRWFQRmlBVUFNZ1l5M1ZNIi4NCiJTbkVqZ1BWYXJIRUhnckI0M0p2c3pzUUVBRHM9IiwNCiJleHRfZGl6Ij0+DQoiUjBsR09EbGhFQUFRQUhjQUFDSDVCQUVBQUpVQUxBQUFBQUFRQUJBQWh3QUFBUC8vLzE1cGhjZmI2TkxzLzdQYy8rUDAvM0orbDlicyIuDQoiLzUybnVxaks1L24vLy9qLy8vNy8vL3IvLzB0cmxzUG4vOG5uLzhuWjV0cm03OW51LzgvcS85WHQvOXp3Lzkzdy8rajEvOUhyLytEdiIuDQoiL2Q3di83M0gwTWpVMzl6dS85YnIvOG5lOHRYbitLNi96OFhqL0xqVjdkRHAvNks0eThibC81TzQyT3oyLzdIVzlKdTkydS85LzhUMyIuDQoiLytMLy8rNysvK3Y2LysvNi85SDQvK1g2LytYbDVQei8vKy90N2ZYMDh2RC8vKzMvLy9QLy8vSC8vL1A3LzhucS84ZnAvOFRsOTh6ciIuDQoiLysvejl2VDQrK24xL2Ivay9kbnkvOUh2Lyt2NC85LzAvOWZ3LzgvdS84dnQvKy8wOXhVdlhoUXRXNEtUczJWMWt3NG9WVGRZcERaWCIuDQoicFZ4cWhseHFpRXhraW1LQnRNUEwyRnR2ajJPVjZhT3V3cHFsdWx5TjNjbk8xd0FBWFFBQVpTTThqRTVYamdBQWJ3QUFlVVJCWWdBQSIuDQoiZEFBQWR6WkVhRTl3d0RaWXBtVnZpUjQ5akcxMmtDaEZtZ1l1ajYrMXhlTG43TnpqNnBtMjBvZXF5cFMyMTJTSnJhQ3l4Wld5ejdQVyIuDQoiOWMvby84N24vOERYN01IWTdxL0s1TGZYOWFyQjFzcmwvMitmenEyOTBVMTRxN2ZDejZlMnlYdW0zMEZqbENsSGM0ZVhyNmJJK2JUSyIuDQoiNHJmVytOWGU2T2J5LzVTdnpXU0hyK2JyOFd1S3JRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFqZ0FDc0pyRFJIU0lDRFE3SU1YRGdKeDhFdlp1SWNiUEJvb1p3YkJ3T01BZk1tWXdCQ0Eyc0VjTkJqSkNNWUFUTElPTGlva29jbSIuDQoiQzFRc2tBQ2xDeGNHQmo3RXNOSG9RQWNpU0NDMW1OQW1qSmdHR0VCUW9CSGlnS0VOQmpoY0NCQUl6Um9HRmt3UU1OS255Z2dSU1JBZyIuDQoiMkJIcERCVWVld1JWMFBESENwNEJTZ2p3MFpHSHpKUWNFVkQ0SUVISnpZa0JmbzRzZVlHbERCd2dUQ0FBWXZGRTRLRUJKWUk0VXJQRiIuDQoiQ3lJSUsrd29Zak13UVFJNkNvcjhtS0VueFIwbkFoWUtqSEpGUVlFQ2txU2tTYTE2NElNNkxoTFJycjN3d2FCQ3Uza1BGS0NsZGtBQSIuDQoiT3c9PSIsDQoiZXh0X2RvYyI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy84REF3QUFBLzRDQWdBQUFBQUFBQUFBQUFBTlIiLg0KIldFcmNyckNRUUNzbFFBMndPd2RYa0lGV05WQkErbm1lNEFaQ3VvbG5Sd2t3RjlRZ0VPUEFGRzIxQStaNHNRSE85NHIxZUpSVEpWbXEiLg0KIk1JT3JyUFNXV1pSY3phNmthb2xCQ09CMFdveFJ1ZDBKQURzPSIsDQoiZXh0X2V4ZSI9Pg0KIlIwbEdPRGxoRXdBT0FLSUFBQUFBQVAvLy93QUF2Y2JHeG9TRWhQLy8vd0FBQUFBQUFDSDVCQUVBQUFVQUxBQUFBQUFUQUE0QUFBTTciLg0KIldMVGNUaVdTUWF1dEJFUTFoUCtnbDIxVEtBUUFpbzdTOEx4YUc4eDBQYk9jclFmNHROdTl3YThXSE5LS1JsNHNsK3k5WUJ1QWRFcXQiLg0KInhoSUFPdz09IiwNCiJleHRfaCI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFndi8vL3dBQUFBQUFnSUNBZ01EQXdBQUFBQUFBQUFBQUFBTkIiLg0KIldMUGM5WENBU1NjWjhNbEtDY0FSUndWa0VBS0NJQkttTnFWcnE3d3BiTW1iYmJPbnJnSThGK3EzdzlHT1FPTVFHWnlKT3Nwbk1rS28iLg0KIldxL05rbmJiU2dBQU93PT0iLA0KImV4dF9ocHAiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5GIi4NCiJXTFBjOVhDQVNTY1o4TWxLaWNvYkJ3UmtFQUdDSUFLRXFhRnFwYlpubWs0Mi9kNDN5cm9LbUxBRGxQQmlzNkx3S05BRmo3amZhV1ZSIi4NCiJVcVVhZ25iTGRaYStZRmNDQURzPSIsDQoiZXh0X2h0YWNjZXNzIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUDhBQVA4QS93QUFnSUFBZ1AvL0FBQUFBQUFBQUFNNiIuDQoiV0VYVy9rNlJBR3NqbUZvWWdOQmJFd2pEQjI1ZEdaelZDS2dzUjhMaFNucHJQUTQwNnBhZm1rRHdVdW1JdkpCb1JBQUFsRXVERXdwSiIuDQoiQUFBNyIsDQoiZXh0X2h0bWwiPT4NCiJSMGxHT0RsaEV3QVFBTE1BQUFBQUFQLy8vMnRybk0zUC9GQlZoclBPOWw2SXRveXQweWhnaytYeS9XR3A0c1hsL2k2WjRtZmQvSE56Ii4NCiJjLy8vL3lINUJBRUFBQThBTEFBQUFBQVRBQkFBQUFTVDhNbDNxcTFtNm5tQy80R2hiRm9YSkVPMUNBTkRTb2NpR2tiQUNIaTIwVTNQIi4NCiJLSUZHSWpBUU9EU2lCV081TkF4UlJtVGdnRGdrbU03RTZpaXBIWllLQlZOUVNCU2lrdWtTd1c0anltY3VwWUZnSUJxTC9NSzhLQkRrIi4NCiJCa3gyQlhXRGZYOFRERGFGREEwS0JBZDlmbklLSFhZSUJKZ0hCUU9IY2crVkNpa1ZBNXdMcFlnYkJLdXJEcXlzbnhNT3M3UzFzeElSIi4NCiJBRHM9IiwNCiJleHRfanBnIj0+DQoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFrQUxBQUFBQUFRQUJBQWd3QUFBUC8vLzhEQXdJQ0FnSUNBQVA4QUFBRC9BSUFBQUFDQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUmNjTWhKazcwajZLM0Z1RmJHYlVMd0pjVWhqZ0hnQWtVcUVnSk5FRUFneEVjaSIuDQoiQ2k4QUxzQUxhWENHSks1bzFBR1NCc0lBY0FCZ2pnQ0V3QU1FWHAwQkJNTGwvQTZ4NVdadFBmUTJnNiswajhWeCs3YjQvTlpxZ2Z0ZCIuDQoiRnhFQU93PT0iLA0KImV4dF9qcyI9Pg0KIlIwbEdPRGRoRUFBUUFDSUFBQ3dBQUFBQUVBQVFBSUwvLy84QUFBQ0FnSURBd01ELy93Q0FnQUFBQUFBQUFBQURVQ2k2M0NFZ3hpYkgiLg0KImswQVFzRzIwMEFRVUpCZ0FvTWloajVkbUl4bk1KeHRxcTFkZEUwRVdPaHNHMTZtOU1vb0FpU1dFbVRpdUM0VHcyQkIwTDhGZ0lBaHMiLg0KImEwMEFqWVlCYmMvbzlIak5uaVVBQURzPSIsDQoiZXh0X2xuayI9Pg0KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFGQUFMQUFBQUFBUUFCQUFoZ0FBQUFCaUFHUExNbVhNTTB5L0psZkZMRlM2SzFyR0xXak8iLg0KIk5TbXVGVFd6R2tDNUlHM1RPby8xWEU3QUp4Mm9ENVg3WW9UcVVZcndWMy9sVEhUYVFYbmZSbURHTVlYclVqS1FId0FNQUdmTlJIemkiLg0KIlV3dzVDQUFxQURPWkdrYXNMWExZUWdoSUJCTjNEVkcyTlduUFJuRFdSd0JPQUI1d0ZRQkJBQUErQUZHM05BazVCU0dIRVVxd01BQmsiLg0KIkFBQWdBQUF3QUFCZkFEZTBHeGVMQ3haY0RFSzZJVXV4S0ZqRkxFM0FKMkhITVJLaUNRV0NBZ0JtQUJwdERnK0hDQlplREFxRkJXREciLg0KIk15bVVGUXBXQmoyZkpoZHZEUWhPQkM2WEYzZmRSME82SVIyT0R3QVpBSFBaUUNTUkVnQVNBRGFYSHdBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFlWmdGQlFQQUdGaG9jQWdvSTdPZzhKQ2dzRUJRSVdQUUNKZ2tDT2tKS1VQNWVZVUQ2UGtaTTUiLg0KIk5LQ0tVRE15TlRnM0FnZzJTNWVxVUVwSkRnY0RDQXhNVDA2aGdrMjZ2QXdVRlVoRHRZcEN1d1pCeUJNUlJNeUNSd01HUmtVZzB4SWYiLg0KIjFsQWVCaUVBR1JnWEVnMHQ0U3dyb0NZbERSQW40U21wS0NvUUpDL2hxVkF1Tkd6ZzhFOVJLQkVqWUJTMEpTaEdoNFVNb1lBU0JpVVEiLg0KIkFEcz0iLA0KImV4dF9sb2ciPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWdBTEFBQUFBQVFBQkFBZy8vLy93QUFBTURBd0lDQWdJQ0FBQUFBZ0FBQS8vLy9BQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUUVLRXdLNlV5QnpDNDc1Z0VBbHRKa2xMUkFXemJDbFJocks0THk1eWc3L3dOIi4NCiJ6TFVhTEdCUUJWMkVnRkxWNHhFT1NTV3Q5Z1FRQnBScHF4b1ZOYVBLa0ZiNUVoL0xtVUd6RjVxRTMrRU1JZ0lBT3c9PSIsDQoiZXh0X3BocCI9Pg0KIlIwbEdPRGxoRUFBUUFJQUJBQUFBQVAvLy95d0FBQUFBRUFBUUFBQUNKa1Flb011YTF0QnhxTEgzN0hVNmFyeFpZTGRJWk1tZDBPcXBhR2V5WXBxSmxSRy9ybHdBQURzPSIsDQoiZXh0X3BsIj0+DQoiUjBsR09EbGhGQUFVQUtML0FQLzQvOERBd0g5L0FQLzRBTCsvdndBQUFBQUFBQUFBQUNINUJBRUFBQUVBTEFBQUFBQVVBQlFBUUFNbyIuDQoiR0xyYzNnT0FNWVI0T091ZHJlZWdSbEJXU0oxbHFLNXM2NExqV0YzY1FNanBKcERmNi8vQUJBQTciLA0KImV4dF9zd2YiPT4NCiJSMGxHT0RsaEZBQVVBTVFSQVArY25QOVNVczRBQVArY0FQL09BSVFBQVA5akFNNWpuTTZjWTg2Y25LWE85OGJleHB3QUFQOHhBUC9PIi4NCiJuQUFBQVAvLy8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4NCiJBQkVBTEFBQUFBQVVBQlFBQUFWN1lDU09aR21lNlBtc2JNdXFVQ3pQMEFQTHpoQWJ1UG5RQXdlRTUyZzBmREtDTUdnb09tNFFCNEdBIi4NCiJHQmdhVDJnTVFZZ1ZqVWZTVDNZb0ZHS0JSZ0JxUGpnWURFRnhYUnBER0VJQTR4QVFRTlIxTkhvTUVBQUNBQkZoSXo4ckNuY01BR2dDIi4NCiJOeXNMa0RPVFNDc0pOREphblRVcUxxTTJLYWFucUJFaEFEcz0iLA0KImV4dF90YXIiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRXNBTEFBQUFBQVFBQkFBaGdBQUFCbE9BRmdkQUZBQUFJWUNVd0E4WndBOFo5RFk0SklDIi4NCiJXdi8vL3dDSVdCRTJBQUF5VUppY3FJU0hsNENBQVBENC8rRGc4UFg2LzVPWHBMN0gwKy8yL2FHbXNUSXlNdFRjNVAvL3NmTDUvOFhGIi4NCiJIZ0JZcHdCVWxnQlduMUJRQUc4YUlBQlFoUmJmbXdEY2t2K0gxMW5vdUVMbHJpemlwZitWM25QQS80MENVem1tL3dBNFhoVkRBQUdEIi4NCiJVeVdkLzBpdC8xdTEvM056QVA5NTBQOTkwbU81Lzd2MTRZenZ6WExyd29YSS81dlMvN0RrL3dCWG92OXN5dlJqd09oYXRRQ0hWMTdwIi4NCiJ1bzBHVVFCV25QKys4TG01QVArajVRQlVsQUNLV2dBNGJqSlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnQUtDZzRTRlN4WU5FdzRnTWdTT2o0OERGQWNIRVVJWlJFWW9KRFF6UFQ0L0F3Y1FDUWtnIi4NCiJHd2lwcXFrcUF4SWFGUmdYRHdPMXRyY0F1YnE3dkllSkRpd2hCY1BFeEF5VGxTRVpPem81S1RVeE1Dc3ZES09sU1JzY0hEd2VIa01kIi4NCiJIVWNNcjdHekJ1Zm82QXk4N0x1K2lpMGZBZlAwOUF2SUVSOFpOamM0UVNVbVRvZ1lzY0JhQWlWRmtDaFl5QkNJaXdYa1pEMm9SM0ZCIi4NCiJ1NHRMQWdFQU93PT0iLA0KImV4dF90eHQiPT4NCiJSMGxHT0RsaEV3QVFBS0lBQUFBQUFQLy8vOGJHeG9TRWhQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBVEFCQUFBQU5KIi4NCiJTQXJFM2xESkZrYTkxcktwQS9EZ0ozSkJhWjZsc0NrVzZxcWtCNGp6RjhCUzY1NDRXOVpBVzQrZzI2Vld4Rjl3ZG93Wm16bmxFdXA3Ii4NCiJVcFBXRzNJZzZIcS9YbVJqdVp3a0FBQTciLA0KImV4dF93cmkiPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWdBTEFBQUFBQVFBQkFBZy8vLy93QUFBSUNBZ01EQXdJQ0FBQUFBZ0FBQS8vLy9BQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUlVNaEprYjBDNksySHVFaVJjZHNBZktFeGtrRGdCb1Z4c3R3QUF5cGR1b2FvIi4NCiJhNFNYVDBjNEJGMHJVaEZBRUFRUUk5ZG1lYlJFVzh5WEM2TngyUUk3THJZYnRwSlpOc3hnelc2bkxkcTQ5aElCQURzPSIsDQoiZXh0X3htbCI9Pg0KIlIwbEdPRGxoRUFBUUFFUUFBQ0g1QkFFQUFCQUFMQUFBQUFBUUFCQUFoUC8vL3dBQUFQSHg4WWFHaGpObW1hYks4QUFBbVFBQWdBQ0EiLg0KImdET1pBRE5tL3pPWi96UC8vOERBd0RQTS93QUEvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQVZrNENDT3BBaWQwQUNzYk5zTXFOcXVBaUEwQUp6U2RsOEh3TUJPVUtnaEVBcGJFU0JVRlF3QUJJQ3giLg0KIk9BQU14ZWJUaG1BNEVvY2F0Z25ZS2hhSmh4VXJJQk5yaDdqeXQvUFphKzBoWWMvbjAyVjRkelp1ZllWL1BJR0pib0tCUWtHUGtFRVEiLg0KIklRQTciDQopOw0KJGltZ2VxdWFscyA9IGFycmF5KA0KICAiZXh0X3RhciI9PmFycmF5KCJleHRfdGFyIiwiZXh0X3IwMCIsImV4dF9hY2UiLCJleHRfYXJqIiwiZXh0X2J6IiwiZXh0X2J6MiIsImV4dF90YnoiLCJleHRfdGJ6MiIsImV4dF90Z3oiLCJleHRfdXUiLCJleHRfeHhlIiwiZXh0X3ppcCIsImV4dF9jYWIiLCJleHRfZ3oiLCJleHRfaXNvIiwiZXh0X2xoYSIsImV4dF9semgiLCJleHRfcGJrIiwiZXh0X3JhciIsImV4dF91dWYiKSwNCiAgImV4dF9waHAiPT5hcnJheSgiZXh0X3BocCIsImV4dF9waHAzIiwiZXh0X3BocDQiLCJleHRfcGhwNSIsImV4dF9waHRtbCIsImV4dF9zaHRtbCIsImV4dF9odG0iKSwNCiAgImV4dF9qcGciPT5hcnJheSgiZXh0X2pwZyIsImV4dF9naWYiLCJleHRfcG5nIiwiZXh0X2pwZWciLCJleHRfamZpZiIsImV4dF9qcGUiLCJleHRfYm1wIiwiZXh0X2ljbyIsImV4dF90aWYiLCJ0aWZmIiksDQogICJleHRfaHRtbCI9PmFycmF5KCJleHRfaHRtbCIsImV4dF9odG0iKSwNCiAgImV4dF9hdmkiPT5hcnJheSgiZXh0X2F2aSIsImV4dF9tb3YiLCJleHRfbXZpIiwiZXh0X21wZyIsImV4dF9tcGVnIiwiZXh0X3dtdiIsImV4dF9ybSIpLA0KICAiZXh0X2xuayI9PmFycmF5KCJleHRfbG5rIiwiZXh0X3VybCIpLA0KICAiZXh0X2luaSI9PmFycmF5KCJleHRfaW5pIiwiZXh0X2NzcyIsImV4dF9pbmYiKSwNCiAgImV4dF9kb2MiPT5hcnJheSgiZXh0X2RvYyIsImV4dF9kb3QiKSwNCiAgImV4dF9qcyI9PmFycmF5KCJleHRfanMiLCJleHRfdmJzIiksDQogICJleHRfY21kIj0+YXJyYXkoImV4dF9jbWQiLCJleHRfYmF0IiwiZXh0X3BpZiIpLA0KICAiZXh0X3dyaSI9PmFycmF5KCJleHRfd3JpIiwiZXh0X3J0ZiIpLA0KICAiZXh0X3N3ZiI9PmFycmF5KCJleHRfc3dmIiwiZXh0X2ZsYSIpLA0KICAiZXh0X21wMyI9PmFycmF5KCJleHRfbXAzIiwiZXh0X2F1IiwiZXh0X21pZGkiLCJleHRfbWlkIiksDQogICJleHRfaHRhY2Nlc3MiPT5hcnJheSgiZXh0X2h0YWNjZXNzIiwiZXh0X2h0cGFzc3dkIiwiZXh0X2h0IiwiZXh0X2h0YSIsImV4dF9zbyIpDQopOyAgDQoNCmlmICghJGdldGFsbCkgew0KICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogaW1hZ2UvZ2lmIik7DQogIGhlYWRlcigiQ2FjaGUtY29udHJvbDogcHVibGljIik7DQogIGhlYWRlcigiRXhwaXJlczogIi5kYXRlKCJyIixta3RpbWUoMCwwLDAsMSwxLDIwMzApKSk7DQogIGhlYWRlcigiQ2FjaGUtY29udHJvbDogbWF4LWFnZT0iLig2MCo2MCoyNCo3KSk7DQogIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5kYXRlKCJyIixmaWxlbXRpbWUoX19GSUxFX18pKSk7DQogIGZvcmVhY2goJGltZ2VxdWFscyBhcyAkaz0+JHYpIHtpZiAoaW5fYXJyYXkoJGltZywkdikpIHskaW1nID0gJGs7IGJyZWFrO319DQogIGlmIChlbXB0eSgkaW1hZ2VzWyRpbWddKSkgeyRpbWcgPSAic21hbGxfdW5rIjt9DQogIGlmIChpbl9hcnJheSgkaW1nLCRleHRfdGFyKSkgeyRpbWcgPSAiZXh0X3RhciI7fQ0KICBlY2hvIGJhc2U2NF9kZWNvZGUoJGltYWdlc1skaW1nXSk7DQp9DQplbHNlIHsNCiAgZm9yZWFjaCgkaW1nZXF1YWxzIGFzICRhPT4kYikge2ZvcmVhY2ggKCRiIGFzICRkKSB7aWYgKCRhICE9ICRkKSB7aWYgKCFlbXB0eSgkaW1hZ2VzWyRkXSkpIHtlY2hvKCJXYXJuaW5nISBSZW1vdmUgXCRpbWFnZXNbIi4kZC4iXTxicj4iKTt9fX19DQogIG5hdHNvcnQoJGltYWdlcyk7DQogICRrID0gYXJyYXlfa2V5cygkaW1hZ2VzKTsNCiAgZWNobyAgIjxjZW50ZXI+IjsNCiAgZm9yZWFjaCAoJGsgYXMgJHUpIHtlY2hvICR1LiI6PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9Ii4kdS4iXCIgYm9yZGVyPVwiMVwiPjxicj4iO30NCiAgZWNobyAiPC9jZW50ZXI+IjsNCn0NCmV4aXQ7DQp9DQoNCmlmICgkeCA9PSAia29uYWsiKSB7DQogICRpcCA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOw0KICAkbXNnID0gJF9QT1NUWydiYWNrY2Nvbm5tc2cnXTsNCiAgJGVtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXTsNCiAgZWNobygiPGNlbnRlcj48Yj5bJiM4MjI0O10gYjNrLWswbjRrIFsmIzgyMjQ7XTwvYj48L2JyPjwvYnI+PGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPkhvc3Q6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWJhY2tjb25uZWN0aXAgc2l6ZT0xNSB2YWx1ZT0kaXA+IFBvcnQ6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1iYWNrY29ubmVjdHBvcnQgc2l6ZT0xNSB2YWx1ZT0yMTIxMj4gVXNlOiA8c2VsZWN0IHNpemU9MSBuYW1lPXVzZT48b3B0aW9uIHZhbHVlPVBlcmw+UEw8L29wdGlvbj48L3NlbGVjdD4gPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPUNvbm5lY3Q+PC9mb3JtPmthbGFpYW4gcnVuIGRvbG8gZGkgY29uc29sZSBhdHcgc2VydmVyIGthbGFpYW4gPGI+bmMgLWx2cDIxMjEyPC9iPiwgZGFuIG1hc3VrbmEgaXAgc2FtYSBwb3J0bnlhIHBkIGtlZHVhIGtvbG9tIGRpIGF0YXMuIDxiPmJhcnUga2FsaWFuIGtsaWsgY29ubmVjdG55YTwvYj4nPGJyPjxicj48L2NlbnRlcj4iKTsNCiAgZWNobygiJG1zZyIpOw0KICBlY2hvKCIkZW1zZyIpOw0KDQp9DQoNCmlmICgkeCA9PSAiY1AiKXsNCglpZiAoJF9HRVRbJ2dvJ10gPT0gJ2dvJyl7IA0KICAgIHNldF90aW1lX2xpbWl0KDApOw0KCSMjIyMjIyMjIyMjIyMjIyMjIw0KCUAkcGFzc3dkPWZvcGVuKCcvZXRjL3Bhc3N3ZCcsJ3InKTsNCglpZiAoISRwYXNzd2QpIHsNCgkgICBlY2hvICJbLV0gRXJyb3IgOiBjb3Vkbid0IHJlYWQgL2V0Yy9wYXNzd2QiOw0KCSAgIGV4aXQ7DQoJfQ0KCSRwYXRoX3RvX3B1YmxpYz1hcnJheSgpOw0KCSR1c2Vycz1hcnJheSgpOw0KCSRwYXRodG9jb25mPWFycmF5KCk7DQoJJGk9MDsNCgkNCgl3aGlsZSghZmVvZigkcGFzc3dkKSkgew0KCSAgJHN0cj1mZ2V0cygkcGFzc3dkKTsNCgkgIGlmICgkaT4zNSkgew0KCQkkcG9zPXN0cnBvcygkc3RyLCI6Iik7DQoJCSR1c2VybmFtZT1zdWJzdHIoJHN0ciwwLCRwb3MpOw0KCQkkZGlyej0iL2hvbWUvJHVzZXJuYW1lL3B1YmxpY19odG1sLyI7DQoJCWlmICgoJHVzZXJuYW1lIT0iIikpIHsNCgkJCWlmIChpc19yZWFkYWJsZSgkZGlyeikpIHsNCgkJCQlhcnJheV9wdXNoKCR1c2VycywkdXNlcm5hbWUpOw0KCQkJCWFycmF5X3B1c2goJHBhdGhfdG9fcHVibGljLCRkaXJ6KTsNCgkJCX0NCgkJfQ0KCSAgfQ0KCSAgJGkrKzsNCgl9DQoJIyMjIyMjIyMjIyMjIyMjIyMjIw0KCQ0KCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCglmdW5jdGlvbiByZWFkX2RpcigkcGF0aCwkdXNlcm5hbWUpIHsNCgkJaWYgKCRoYW5kbGUgPSBvcGVuZGlyKCRwYXRoKSkgew0KCQkJd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUgPSByZWFkZGlyKCRoYW5kbGUpKSkgew0KCQkJCSAgJGZwYXRoPSIkcGF0aCRmaWxlIjsNCgkJCQkgIGlmICgoJGZpbGUhPScuJykgYW5kICgkZmlsZSE9Jy4uJykpIHsNCgkJCQkJIGlmIChpc19yZWFkYWJsZSgkZnBhdGgpKSB7DQoJCQkJCQkkZHI9IiRmcGF0aC8iOw0KCQkJCQkJaWYgKGlzX2RpcigkZHIpKSB7DQoJCQkJCQkgICByZWFkX2RpcigkZHIsJHVzZXJuYW1lKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2Ugew0KCQkJCQkJCSBpZiAoKCRmaWxlPT0nY29uZmlnLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25maWd1cmF0aW9uLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSd3cC1jb25maWcucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZpZy5pbmMucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RhdGFiYXNlLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25mLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdzZXR0aW5ncy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nc2V0dGluZy5waHAnKQ0KCQkJCQkJb3IgKCRmaWxlPT0naW5jLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb3JuLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25maWdzLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdrb25maWcucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RiY29uZi5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0na29uZWtzaS5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGJjb25maWcucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RiLmluYy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGJfY29ubmVjdC5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGJjb25uZWN0LnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYi1jb25uZWN0LnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25maWd1cmUucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2dsb2JhbC5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29ubmVjdC5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGIucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZfZGIucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RhdGFiYXNlLmluYy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGF0YWJhc2UucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2Nvbm5lY3Rpb24ucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2Nvbm5lY3Rpb25zLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25maWd1cmUuY2xhc3MucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZpZy5jbGFzcy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZmlndXJhdGlvbi5jbGFzcy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGIuY2xhc3MucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2ZpbGVfbWFuYWdlci5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nTG9jYWxTZXR0aW5ncy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZmlsZW1hbmFnZXIucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J21hbmFnZXIucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J21hbmFnZXJzLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25uZWN0LmluYy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGJjb25uZWN0LmluYy5waHAnKSkgDQoJCQkJCQkJCSB7DQoJCQkJCQkJCSRwYXNzPWdldF9wYXNzKCRmcGF0aCk7DQoJCQkJCQkJCWlmICgkcGFzcyE9JycpIHsNCgkJCQkJCQkJICAgZWNobyAiWytdICRmcGF0aFxuJHBhc3NcbiI7DQoJCQkJCQkJCSAgIGZ0cF9jaGVjaygkdXNlcm5hbWUsJHBhc3MpOw0KCQkJCQkJCQl9DQoJCQkJCQkJIH0NCgkJCQkJCX0NCgkJCQkJIH0NCgkJCQkgIH0NCgkJCX0NCgkJfQ0KCX0NCgkNCglmdW5jdGlvbiBnZXRfcGFzcygkbGluaykgew0KCQlAJGNvbmZpZz1mb3BlbigkbGluaywncicpOw0KCQl3aGlsZSghZmVvZigkY29uZmlnKSkgew0KCQkJJGxpbmU9ZmdldHMoJGNvbmZpZyk7DQoJCQlpZiAoc3Ryc3RyKCRsaW5lLCdwYXNzJykgb3Igc3Ryc3RyKCRsaW5lLCdwYXNzd29yZCcpIG9yIHN0cnN0cigkbGluZSwncHdkJykgb3Igc3Ryc3RyKCRsaW5lLCdrb2RlJykgb3Igc3Ryc3RyKCRsaW5lLCdteXBhc3N3b3JkJykgb3Igc3Ryc3RyKCRsaW5lLCdwYXNzd2QnKSkgew0KCQkJCWlmIChzdHJycG9zKCRsaW5lLCciJykpDQoJCQkJICAgJHBhc3M9c3Vic3RyKCRsaW5lLChzdHJwb3MoJGxpbmUsJz0nKSszKSwoc3RycnBvcygkbGluZSwnIicpLShzdHJwb3MoJGxpbmUsJz0nKSszKSkpOw0KCQkJCWVsc2UNCgkJCQkgICAkcGFzcz1zdWJzdHIoJGxpbmUsKHN0cnBvcygkbGluZSwnPScpKzMpLChzdHJycG9zKCRsaW5lLCInIiktKHN0cnBvcygkbGluZSwnPScpKzMpKSk7DQoJCQkJcmV0dXJuICRwYXNzOw0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCWZ1bmN0aW9uIGZ0cF9jaGVjaygkbG9naW4sJHBhc3MpIHsNCgkJIEAkZnRwPWZ0cF9jb25uZWN0KCcxMjcuMC4wLjEnKTsNCgkJIGlmICgkZnRwKSB7DQoJCQlAJHJlcz1mdHBfbG9naW4oJGZ0cCwkbG9naW4sJHBhc3MpOw0KCQkJaWYgKCRyZXMpIHsNCgkJCSAgIGVjaG8gJ1trTmEgZ0FuXSAnLiRsb2dpbi4nOicuJHBhc3MuIiAgVzAwdFxuIjsNCgkJCX0NCgkJCWVsc2UgZnRwX3F1aXQoJGZ0cCk7DQoJCSB9DQoJfQ0KCQ0KCWVjaG8gIjxicj48YnI+IjsNCgllY2hvICI8dGV4dGFyZWEgbmFtZT0nbWFpbl93aW5kb3cnIGNvbHM9MTAwIHJvd3M9MjA+IjsNCgkNCgllY2hvICJbK10gRm91bmQgIi5zaXplb2YoJHVzZXJzKS4iIGVudHJ5cyBpbiAvZXRjL3Bhc3N3ZFxuIjsNCgllY2hvICJbK10gRm91bmQgIi5zaXplb2YoJHBhdGhfdG9fcHVibGljKS4iIHJlYWRhYmxlIHB1YmxpY19odG1sIGRpcmVjdG9yaWVzXG4iOw0KCQ0KCWVjaG8gIlt+XSBTZWFyY2hpbmcgZm9yIHBhc3N3b3JkcyBpbiBjb25maWcuKiBmaWxlcy4uLlxuXG4iOw0KCWZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcikgew0KCQkJJHBhdGg9Ii9ob21lLyR1c2VyL3B1YmxpY19odG1sLyI7DQoJCQlyZWFkX2RpcigkcGF0aCwkdXNlcik7DQoJfQ0KCQ0KCWVjaG8gIlxuWytdIFVkYWhcbiI7DQoJDQoJZWNobyAiPC90ZXh0YXJlYT48YnI+IjsNCgl9ZWxzZQ0KCWVjaG8gJzxjZW50ZXI+Y1BhbmVsIFNjYW48YnI+PGEgaHJlZj0iJy4kc3VybC4neD1jUCZnbz1nbyI+T0tFPC9hPiB8fCA8YSBocmVmPSInLiRzdXJsLiciPkZVQ0s8L2E+PC9jZW50ZXI+JzsNCn0NCg0KaWYgKCR4ID09ICJzbGVlcCIpew0KICAkbXNnID0gJF9QT1NUWydiYWNrY2Nvbm5tc2cnXTsNCiAgJGVtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXTsNCiAgZWNobygiPGNlbnRlcj48Yj5CaW5kIFNoZWxsIEJhY2tkb29yOjwvYj48YnI+PGJyPjxmb3JtIG5hbWU9Zm9ybSBtZXRob2Q9UE9TVD4NCiAgQmluZCBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nYmFja2Nvbm5lY3Rwb3J0JyB2YWx1ZT0nMjEyMTInPg0KICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd1c2UnIHZhbHVlPSdzbGVlcCc+DQogIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdJbnN0YWxsIEJhY2tkb29yJz48L2Zvcm0+Iik7DQogIGVjaG8oIiRtc2ciKTsNCiAgZWNobygiJGVtc2ciKTsNCiAgZWNobygiPC9jZW50ZXI+Iik7DQp9DQoNCmlmICgkeCA9PSAic2tlbiIpew0Kc2V0X3RpbWVfbGltaXQoMCk7IA0KDQooJHgwYiA9IGluaV9nZXQoJ3NhZmVfbW9kZScpID09IDApID8gJHgwYiA9ICdvZmYnOiBkaWUoJzxiPkVycm9yOiBTYWZlIE1vZGUgaXMgT248L2I+Jyk7DQoNCkAkeDBjID0gZm9wZW4oJy9ldGMvcGFzc3dkJywncicpOw0KDQppZiAoISR4MGMpIHsgZGllKCc8Yj4gRXJyb3IgOiBDYW4gTm90IFJlYWQgQ29uZmlnIE9mIFNlcnZlciA8L2I+Jyk7IH0NCg0KLy8gJHgwZCA9IGFycmF5KCk7DQovLyAkeDBlID0gYXJyYXkoKTsNCi8vICR4MGYgPSBhcnJheSgpOw0KLy8gJHgxMCA9IDA7DQoNCndoaWxlKCFmZW9mKCR4MGMpKXsNCiAgICAvLyBiYWNhIGJhcmlzLi4uDQogICAgLy8gJHgxMSA9IGZnZXRzKCR4MGMpOw0KICAgIC8vIGlmICgkeDEwIDwgMzUpeyANCiAgICB3aGlsZSgkeDExID0gZmdldHMoJHgwYykpew0KICAgICAgICANCiAgICAgICAgJHgxMiA9IHN0cnBvcygkeDExLCc6Jyk7DQoNCiAgICAgICAgJHgxMyA9IHN1YnN0cigkeDExLDAsJHgxMik7DQoNCg0KICAgICAgICAkeDE0ID0gJy9ob21lLycuJHgxMy4nL3B1YmxpY19odG1sJzsNCiAgICAgICAgaWYgKCgkeDEzICE9ICcnKSl7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmIChpc19yZWFkYWJsZSgkeDE0KSl7DQoNCiAgICAgICAgICAgICAgICBlY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0yIGNvbG9yPSNjMDAwZmY+WyYjODIyNDtdIG9LIFsmIzgyMjQ7XSAkeDE0PC9mb250PiI7DQogICAgICAgICAgICAgICAgZWNobyAiPGJyLz4iOw0KICAgICAgICAgICAgfSAgICANCiAgICAgICAgfQ0KICAgIH0NCiAgICAvLyAkeDEwKys7DQogfQ0KfQ0KDQplY2hvICI8L3RkPjwvdHI+PC90YWJsZT5cbiI7DQo/Pg0KPGRpdiAgY2xhc3M9YmFyaGVhZGVyMj48Yj4uOjogQ09NTUFORCBQQU5FTCA6Oi48L2I+PC9kaXY+DQo8dGFibGUgY2xhc3M9bWFpbnBhbmVsPg0KPD9waHANCmlmICghJHNhZmVtb2RlKSB7DQo/Pg0KPHRyPjx0ZCBhbGlnbj1yaWdodD5Db21tYW5kOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj4NCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJjbWQiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY21kIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkY21kKTsgPz4iPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+IC0gPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj4NCiAgICA8L2Zvcm0+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIGFsaWduPXJpZ2h0PlF1aWNrIENvbW1hbmRzOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj4NCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJjbWQiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4NCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPg0KICAgIDxzZWxlY3QgbmFtZT0iY21kIj4NCiAgICA8P3BocA0KICAgIGZvcmVhY2ggKCRjbWRhbGlhc2VzIGFzICRhbHMpIHsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1sxXSkuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzBdKS4iPC9vcHRpb24+IjsNCiAgICB9DQogICAgZm9yZWFjaCAoJGNtZGFsaWFzZXMyIGFzICRhbHMpIHsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1sxXSkuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzBdKS4iPC9vcHRpb24+IjsNCiAgICB9DQogICAgPz4NCiAgICA8L3NlbGVjdD4gLQ0KICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iRXhlY3V0ZSI+DQogICAgPC9mb3JtPg0KPC90ZD48L3RyPg0KPD9waHANCn0NCj8+DQo8dHI+PHRkIGFsaWduPXJpZ2h0PlVwbG9hZDo8L3RkPg0KPHRkPjxmb3JtIG1ldGhvZD0iUE9TVCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT0idXBsb2FkIj4NCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ibWluaWZvcm0iIHZhbHVlPSIxIj4NCiAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBsb2FkZmlsZSI+IC0gPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJVcGxvYWQiPiA8P3BocCBlY2hvICR3ZHQ7ID8+DQogICAgPC9mb3JtPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCBhbGlnbj1yaWdodD5NYWtlIEZpbGU6PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9Im1rZmlsZSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJmdCIgdmFsdWU9ImVkaXQiPg0KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJta2ZpbGUiIHNpemU9IjcwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4gLSA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkNyZWF0ZSI+IDw/cGhwIGVjaG8gJHdkdDsgPz4NCiAgICA8L2Zvcm0+PC90ZD48L3RyPg0KPHRyPjx0ZCBhbGlnbj1yaWdodD5WaWV3IEZpbGU6PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9ImdvZmlsZSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPg0KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSI3MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+IC0gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJWaWV3Ij4NCiAgICA8L2Zvcm0+PC90ZD48L3RyPg0KPC90YWJsZT4NCjxkaXYgY2xhc3M9YmFyaGVhZGVyMiBjb2xzcGFuPTI+PGZvbnQgY29sb3I9cmVkPjxmb250IGNvbG9yPXllbGxvdz5bUmVDb2RlZCBCeSBTeW5jaHJvbml6ZXIgLSBTQU5KVU5HQU4gSklXQSBURUFNIHwgR2VuZXJhdGVkOiA8P3BocCBlY2hvIHJvdW5kKGdldG1pY3JvdGltZSgpLXN0YXJ0dGltZSw0KTsgPz4gc2Vjb25kcyBdPC9mb250PjwvZGl2Pg0KPC9ib2R5PjwvaHRtbD4=
Advertisement
Add Comment
Please, Sign In to add comment