KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdGEoYixjLGEsZSl7Yj8oYj1kLkxJTkVBUixjPWM_ZC5MSU5FQVJfTUlQTUFQX0xJTkVBUjpkLkxJTkVBUik6KGI9ZC5ORUFSRVNULGM9Yz9kLk5FQVJFU1RfTUlQTUFQX0xJTkVBUjpkLk5FQVJFU1QpO2QudGV4UGFyYW1ldGVyaShkLlRFWFRVUkVfMkQsZC5URVhUVVJFX01BR19GSUxURVIsYik7ZC50ZXhQYXJhbWV0ZXJpKGQuVEVYVFVSRV8yRCxkLlRFWFRVUkVfTUlOX0ZJTFRFUixjKTtkLnRleFBhcmFtZXRlcmkoZC5URVhUVVJFXzJELGQuVEVYVFVSRV9XUkFQX1MsYT9kLlJFUEVBVDpkLkNMQU1QX1RPX0VER0UpO2QudGV4UGFyYW1ldGVyaShkLlRFWFRVUkVfMkQsZC5URVhUVVJFX1dSQVBfVCxlP2QuUkVQRUFUOmQuQ0xBTVBfVE9fRURHRSl9ZnVuY3Rpb24gUShiLGMsYSxlLGYsZyxsKXt0aGlzLkc9bD9udWxsOmQuY3JlYXRlRnJhbWVidWZmZXIoKTt0aGlzLmo9bD9udWxsOmQuY3JlYXRlVGV4dHVyZSgpO3RoaXMubz1udWxsO3RoaXMud2lkdGg9CmI7dGhpcy5oZWlnaHQ9Yzt0aGlzLmNhPWE7dGhpcy5kYT1lO3RoaXMudHlwZT1mO2x8fChkLmJpbmRUZXh0dXJlKGQuVEVYVFVSRV8yRCx0aGlzLmopLGQudGV4SW1hZ2UyRChkLlRFWFRVUkVfMkQsMCxhLGIsYywwLGUsZixudWxsKSx0YSghMSwhMSwhMSwhMSksZC5iaW5kRnJhbWVidWZmZXIoZC5GUkFNRUJVRkZFUix0aGlzLkcpLGQuZnJhbWVidWZmZXJUZXh0dXJlMkQoZC5GUkFNRUJVRkZFUixkLkNPTE9SX0FUVEFDSE1FTlQwLGQuVEVYVFVSRV8yRCx0aGlzLmosMCksdWE9dGhpcyx2YT13YT0wLHhhPWIseWE9YyxnJiYodGhpcy5vPWQuY3JlYXRlUmVuZGVyYnVmZmVyKCksZC5iaW5kUmVuZGVyYnVmZmVyKGQuUkVOREVSQlVGRkVSLHRoaXMubyksZC5yZW5kZXJidWZmZXJTdG9yYWdlKGQuUkVOREVSQlVGRkVSLGQuREVQVEhfQ09NUE9ORU5ULGIsYyksZC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihkLkZSQU1FQlVGRkVSLGQuREVQVEhfQVRUQUNITUVOVCxkLlJFTkRFUkJVRkZFUiwKdGhpcy5vKSkpfWZ1bmN0aW9uIGxiKCl7cC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGZ1bmN0aW9uKGMpezA9PT1jLmJ1dHRvbj8ociYmUmEoKSxFPTEpOjI9PT1jLmJ1dHRvbiYmKFI9MSxjLnByZXZlbnREZWZhdWx0KCkpfSk7cC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixmdW5jdGlvbihjKXswPT09Yy5idXR0b24_RT0wOjI9PT1jLmJ1dHRvbiYmKFI9MCxjLnByZXZlbnREZWZhdWx0KCkpfSk7cC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpfSk7cC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGMpe3I_KHQrPWMubW92ZW1lbnRYKnoqSyx1Kz1jLm1vdmVtZW50WSoteipLKToodD1NYXRoLmZsb29yKGMuY2xpZW50WCp6KSx1PU1hdGguZmxvb3Iodi5oZWlnaHQtMS1jLmNsaWVudFkqeikpfSk7cC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihjKXtkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCE9PQpwJiZwLnJlcXVlc3RGdWxsc2NyZWVuKCk7aWYoQil7dmFyIGE9Yy5jaGFuZ2VkVG91Y2hlc1swXTtyPyh1PXQ9MCxXPWEuaWRlbnRpZmllcix6YT1NYXRoLmZsb29yKGEuY2xpZW50WCp6KSxBYT1NYXRoLmZsb29yKHYuaGVpZ2h0LTEtYS5jbGllbnRZKnopKToodD1NYXRoLmZsb29yKGEuY2xpZW50WCp6KSx1PU1hdGguZmxvb3Iodi5oZWlnaHQtMS1hLmNsaWVudFkqeikpO0U9MTtjLnByZXZlbnREZWZhdWx0KCk7Yy5zdG9wUHJvcGFnYXRpb24oKX19KTtwLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZnVuY3Rpb24oYyl7aWYoQil7dmFyIGE9Yy5jaGFuZ2VkVG91Y2hlc1swXTtyPyhhLmlkZW50aWZpZXI9PT1XPyh0Kz0oYS5jbGllbnRYLXphKSp6KkssdSs9KGEuY2xpZW50WS1BYSkqLXoqSyk6KHU9dD0wLFc9YS5pZGVudGlmaWVyKSx6YT1hLmNsaWVudFgsQWE9YS5jbGllbnRZKToodD1NYXRoLmZsb29yKGEuY2xpZW50WCp6KSx1PU1hdGguZmxvb3Iodi5oZWlnaHQtMS0KYS5jbGllbnRZKnopKTtFPTE7Yy5wcmV2ZW50RGVmYXVsdCgpO2Muc3RvcFByb3BhZ2F0aW9uKCl9fSk7cC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24oYyl7aWYoQil7dmFyIGE9Yy5jaGFuZ2VkVG91Y2hlc1swXTtyJiZhLmlkZW50aWZpZXI9PT1XJiYodT10PTApOzA9PT1jLnRhcmdldFRvdWNoZXMubGVuZ3RoJiYoRT0wKTtjLnByZXZlbnREZWZhdWx0KCk7Yy5zdG9wUHJvcGFnYXRpb24oKX19KTtwLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIixmdW5jdGlvbihjKXtpZihCKXt2YXIgYT1jLmNoYW5nZWRUb3VjaGVzWzBdO3ImJmEuaWRlbnRpZmllcj09PVcmJih1PXQ9MCk7MD09PWMudGFyZ2V0VG91Y2hlcy5sZW5ndGgmJihFPTApO2MucHJldmVudERlZmF1bHQoKTtjLnN0b3BQcm9wYWdhdGlvbigpfX0pO2Zvcih2YXIgYj0wO2I8SS5sZW5ndGg7YisrKUJhW0lbYl1dPWI7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKGMpe2lmKEIpaWYoYy5rZXk9PT0KQ2EpaWEoIWphKSxjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKTtlbHNle3ZhciBhPUJhW2MuY29kZV07dm9pZCAwIT09YSYmKEZbTWF0aC5mbG9vcihhLzMyKV18PTE8PGElMzIsYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZnVuY3Rpb24oYyl7aWYoQilpZihjLmtleT09PUNhKWMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2V7dmFyIGE9QmFbYy5jb2RlXTt2b2lkIDAhPT1hJiYoRltNYXRoLmZsb29yKGEvMzIpXSY9figxPDxhJTMyKSxjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSl9fSl9ZnVuY3Rpb24gUmEoKXtkb2N1bWVudC5wb2ludGVyTG9ja0VsZW1lbnQhPT1wJiZwLnJlcXVlc3RQb2ludGVyTG9jayh7dW5hZGp1c3RlZE1vdmVtZW50OiEwfSl9ZnVuY3Rpb24gbWIoKXtEYT1xLkdhbWVwYWRNb3VzZTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZ2FtZXBhZGNvbm5lY3RlZCIsCmZ1bmN0aW9uKGIpe0c9Yi5vO0VhPUx9KX1mdW5jdGlvbiBTYSgpe3ZhciBiPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO2J8fChiPTEpO3Aud2lkdGg9di53aWR0aD1NYXRoLmNlaWwod2luZG93LmlubmVyV2lkdGgqYik7cC5oZWlnaHQ9di5oZWlnaHQ9TWF0aC5jZWlsKHdpbmRvdy5pbm5lckhlaWdodCpiKTsxPT09Yj8xIT09eiYmKHAuc3R5bGUucmVtb3ZlUHJvcGVydHkoIndpZHRoIikscC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiaGVpZ2h0IikpOihwLnN0eWxlLndpZHRoPU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCkrInB4IixwLnN0eWxlLmhlaWdodD13aW5kb3cuaW5uZXJIZWlnaHQrInB4Iik7ej1iO1RhKCl9ZnVuY3Rpb24gVWEoYixjKXt0aGlzLmFhPWI7dGhpcy5BPWN9ZnVuY3Rpb24gVmEoYixjKXtXYSgiRXJyb3I6IFNoYWRlciBlcnJvciAnIitiLm5hbWUrIic6ICIrYyl9ZnVuY3Rpb24gbmIoYil7Yj1iLnRhcmdldC5iYTtiLndpZHRoPWIuaW1hZ2UubmF0dXJhbFdpZHRoOwpiLmhlaWdodD1iLmltYWdlLm5hdHVyYWxIZWlnaHQ7ZC5iaW5kVGV4dHVyZShkLlRFWFRVUkVfMkQsYi5qKTt0YShiLlgsYi5TLGIuWixiLiQpO2QudGV4SW1hZ2UyRChkLlRFWFRVUkVfMkQsMCxkLlJHQkEsZC5SR0JBLGQuVU5TSUdORURfQllURSxiLmltYWdlKTtiLlMmJmQuZ2VuZXJhdGVNaXBtYXAoZC5URVhUVVJFXzJEKTtGYS0tfWZ1bmN0aW9uIEdhKGIsYyl7cmV0dXJuIFhhP25ldyBRKGIsYyxkLlJHQkEzMkYsZC5SR0JBLGQuRkxPQVQpOm5ldyBRKGIsYyxkLlJHQkEsZC5SR0JBLGQuVU5TSUdORURfQllURSl9ZnVuY3Rpb24gVGEoKXtpZihKKXt2YXIgYj1vYjtiLmxlbmd0aD1tLmxlbmd0aDtiLmZpbGwoITEpO2Zvcih2YXIgYz0wO2M8bS5sZW5ndGg7YysrKXt2YXIgYT1tW2NdO2lmKGEudHlwZT09PUMpaWYoYS5OLmxlbmd0aD0wLGEuTD0hMSxhLk89PT1ZYSlhLndpZHRoPXYud2lkdGgsYS5oZWlnaHQ9di5oZWlnaHQ7ZWxzZSBpZihhLk89PT1wYilhLndpZHRoPWEuRiwKYS5oZWlnaHQ9YS5EO2Vsc2V7dmFyIGU9bVthLk8tMl07YS53aWR0aD1lLndpZHRoO2EuaGVpZ2h0PWUuaGVpZ2h0fX1mb3IoYz0wO2M8bS5sZW5ndGg7YysrKWlmKGE9bVtjXSxhLnR5cGU9PT1DKWZvcihlPTA7ZTxhLkgubGVuZ3RoO2UrKyl7dmFyIGY9YS5IW2VdO2lmKGYuQT49Yyl7dmFyIGc9bVtmLkFdO2cudHlwZT09PUMmJihtW2YuQV0uTD0hMCl9fWZvcihjPW0ubGVuZ3RoLTE7LTE8YztjLS0paWYoYT1tW2NdLGEudHlwZT09PUMpe2lmKGEuTClpZihhLkope2lmKGc9YS5mLGcud2lkdGghPT1hLndpZHRofHxnLmhlaWdodCE9PWEuaGVpZ2h0KWcuTShhLndpZHRoLGEuaGVpZ2h0KSxhLkIuTShhLndpZHRoLGEuaGVpZ2h0KX1lbHNlIGEuZj1HYShhLndpZHRoLGEuaGVpZ2h0KSxhLkI9R2EoYS53aWR0aCxhLmhlaWdodCksYS5KPSEwO2Vsc2UgYS5KJiYoYS5mLnYoKSxhLkIudigpLGEuSj0hMSk7Zm9yKGU9MDtlPGEuSC5sZW5ndGg7ZSsrKWY9YS5IW2VdLGc9bVtmLkFdLGcudHlwZSE9PQpDfHxiW2YuQV18fChnLkx8fGEuTi5wdXNoKGYuQSksYltmLkFdPSEwKX1lPUhhO2Y9d1t3Lmxlbmd0aC0xXTtIYT1aYTtaYT1lO2ZvcihjPTA7YzxtLmxlbmd0aDtjKyspaWYoYT1tW2NdLGEudHlwZT09PUMmJiFhLkwpe2lmKGE9PT1mKWEuZj12O2Vsc2UgaWYoYltjXSl7dmFyIGw9TS5sZW5ndGgseD1hLndpZHRoLG49YS5oZWlnaHQ7Zm9yKGc9MDtnPGw7ZysrKXt2YXIgaD1NW2ddO2lmKGgud2lkdGg9PT14JiZoLmhlaWdodD09PW4pe2EuZj1oO2wtLTtnIT09bCYmKE1bZ109TVtsXSk7TS5sZW5ndGg9bDtnPS0xO2JyZWFrfX1pZihnPj1sKXtsPWUubGVuZ3RoO2ZvcihnPTA7ZzxsO2crKylpZihoPWVbZ10saC53aWR0aD09PXgmJmguaGVpZ2h0PT09bil7YS5mPWg7bC0tO2chPT1sJiYoZVtnXT1lW2xdKTtlLmxlbmd0aD1sO2c9LTE7YnJlYWt9Zz49bCYmKGc9R2EoeCxuKSxIYS5wdXNoKGcpLGEuZj1nKX19ZWxzZSBhLmY9bnVsbDtmb3IoZz0wO2c8YS5OLmxlbmd0aDtnKyspTS5wdXNoKG1bYS5OW2ddXS5mKX1mb3IoYz0KMDtjPGUubGVuZ3RoO2MrKyllW2NdLnYoKTtlLmxlbmd0aD0wO00ubGVuZ3RoPTB9fWZ1bmN0aW9uIElhKGIpe2lmKGIuaSYmYi5mKXtiLmYuVigpO2QudXNlUHJvZ3JhbShiLmkpO2IuVSYmZC51bmlmb3JtNGYoYi5VLHYud2lkdGgsdi5oZWlnaHQsTixKYSk7Yi5UJiZkLnVuaWZvcm00ZihiLlQsdCx1LEUsUik7Yi5QJiZkLnVuaWZvcm00dWl2KGIuUCxGKTtmb3IodmFyIGM9Yi5ILGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGU9Y1thXSxmPW1bZS5BXSxnPW51bGw7c3dpdGNoKGYudHlwZSl7Y2FzZSBDOmc9Zi5KP2YuQi5qOmYuZi5qO2JyZWFrO2Nhc2UgWDpnPWYuajticmVhaztjYXNlIEthOmc9Zi5qfWcmJihlPWUuYWEsZj1nLGc9WS5pbmRleE9mKGQuSU5WQUxJRF9WQUxVRSksLTE9PT1nP2c9WS5wdXNoKGUpLTE6WVtnXT1lLGQuYWN0aXZlVGV4dHVyZShkLlRFWFRVUkUwK2cpLGQuYmluZFRleHR1cmUoZC5URVhUVVJFXzJELGYpLGQudW5pZm9ybTFpKGUsZykpfWI9Yi5SO2ZvcihhPQowO2E8Yi5sZW5ndGg7YSsrKWU9YlthXSxmPW1bZS5BXSxmLnR5cGUhPT1rYSYmZC51bmlmb3JtNGYoZS5hYSxmLndpZHRoLGYuaGVpZ2h0LDEvZi53aWR0aCwxL2YuaGVpZ2h0KTtkLmRyYXdBcnJheXMoZC5UUklBTkdMRVMsMCwzKTtmb3IoYT0wO2E8WS5sZW5ndGg7YSsrKVlbYV09ZC5JTlZBTElEX1ZBTFVFfX1mdW5jdGlvbiAkYSgpe2Zvcih2YXIgYj0wLGM9dy5sZW5ndGgtMTtiPGM7YisrKUlhKHdbYl0pfWZ1bmN0aW9uIGFiKCl7Zm9yKHZhciBiPTAsYz13Lmxlbmd0aC0xO2I8YztiKyspe3ZhciBhPXdbYl07aWYoYS5KKXt2YXIgZT1hLmY7YS5mPWEuQjthLkI9ZX19fWZ1bmN0aW9uIFdhKGIpe2RvY3VtZW50LmJvZHkuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdGYXRhbENyYXNoJz4iK2IrIjwvZGl2PiJ9ZnVuY3Rpb24gTGEoYil7Yj1iLkMoIi0iLCIrIikuQygiXyIsIi8iKTt2YXIgYz1iLmxlbmd0aCU0O2lmKGMpe2M9NC1jO2Zvcih2YXIgYT0wO2E8YzthKyspYis9Ij0ifXJldHVybiBhdG9iKGIpfQpmdW5jdGlvbiBxYihiKXtpZigoYj1iLnRhcmdldC5maWxlcykmJmIubGVuZ3RoKXt2YXIgYz1uZXcgRmlsZVJlYWRlcjtjLm9ubG9hZD1yYjtjLnJlYWRBc0FycmF5QnVmZmVyKGJbMF0pfX1mdW5jdGlvbiByYihiKXtpZighQil7Yj1uZXcgRmxvYXQzMkFycmF5KGIudGFyZ2V0LnJlc3VsdCk7MTxPLmxlbmd0aCYmKFouc2VsZWN0ZWRJbmRleD0obmV3IFVpbnQzMkFycmF5KGIuYnVmZmVyKSlbMF0pO2Zvcih2YXIgYz0wO2M8QS5sZW5ndGg7YysrKUFbY10uZWxlbWVudC52YWx1ZT1iWzIrY107YWE9YjtiYigpfX1mdW5jdGlvbiBjYigpe3ZhciBiPSIiOzE8Ty5sZW5ndGgmJihsYT1NYXRoLm1heCgwLFouc2VsZWN0ZWRJbmRleCksYis9IiNkZWZpbmUgQlVJTERfTU9ERV9JRCAiK2xhKyJcbiIpO2Zvcih2YXIgYz0wO2M8QS5sZW5ndGg7YysrKXt2YXIgYT1BW2NdLGU9TWF0aC5yb3VuZChhLmVsZW1lbnQudmFsdWUpO2IrPSIjZGVmaW5lICIrYS5uYW1lLnRvVXBwZXJDYXNlKCkuQygiICIsCiJfIikuQygiLSIsIl8iKS5DKCIsIiwiXyIpKyIgIitlKyJcbiJ9Zm9yKGM9MDtjPG0ubGVuZ3RoO2MrKylhPW1bY10sYS50eXBlPT09a2EmJihiKz1hLkkrIlxuXG4iKTtmb3IoYz0wO2M8bS5sZW5ndGg7YysrKWlmKGE9bVtjXSxhLnR5cGU9PT1DKXthLlc9bWErYithLkk7YS5pJiZkLmRlbGV0ZVByb2dyYW0oYS5pKTtkLnNoYWRlclNvdXJjZShhLkssYS5XKTtkLmNvbXBpbGVTaGFkZXIoYS5LKTtpZihkLmdldFNoYWRlclBhcmFtZXRlcihhLkssZC5DT01QSUxFX1NUQVRVUykpaWYoYS5pPWQuY3JlYXRlUHJvZ3JhbSgpLGQuYXR0YWNoU2hhZGVyKGEuaSxNYSksZC5hdHRhY2hTaGFkZXIoYS5pLGEuSyksZC5iaW5kQXR0cmliTG9jYXRpb24oYS5pLDAsInZlcnRleFBvc2l0aW9uIiksZC5saW5rUHJvZ3JhbShhLmkpLGQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihhLmksZC5MSU5LX1NUQVRVUykpe2EuVT1kLmdldFVuaWZvcm1Mb2NhdGlvbihhLmksIkdsc2xQYXNzUGFyYW1zIik7YS5UPQpkLmdldFVuaWZvcm1Mb2NhdGlvbihhLmksIk1vdXNlU3RhdGUiKTthLlA9ZC5nZXRVbmlmb3JtTG9jYXRpb24oYS5pLCJLZXlib2FyZFN0YXRlIik7ZT13W3cubGVuZ3RoLTFdO2EuSC5sZW5ndGg9MDtmb3IodmFyIGY9YS5SLmxlbmd0aD0wO2Y8bS5sZW5ndGg7ZisrKWlmKG1bZl0hPT1lKXt2YXIgZz1kLmdldFVuaWZvcm1Mb2NhdGlvbihhLmksIkxheWVyIitmKTtnJiZhLkgucHVzaChuZXcgVWEoZyxmKSk7KGc9ZC5nZXRVbmlmb3JtTG9jYXRpb24oYS5pLCJMYXllclNpemUiK2YpKSYmYS5SLnB1c2gobmV3IFVhKGcsZikpfWE9ITB9ZWxzZSBWYShhLGQuZ2V0UHJvZ3JhbUluZm9Mb2coYS5pKSksYT0hMTtlbHNlIFZhKGEsZC5nZXRTaGFkZXJJbmZvTG9nKGEuSykpLGE9ITE7aWYoIWEpcmV0dXJuITF9VGEoKTtpZihhYSl7Yj0yK0EubGVuZ3RoO049YWFbMV07Zm9yKGM9MDtjPFAubGVuZ3RoO2MrKylhPW1bUFtjXV0sZT1hLkYqYS5EKjQsYS5mJiYoZj1hYS5zdWJhcnJheShiLGIrCmUpLGEuZi5NKGEuRixhLkQsZiksYS5CJiZhLkIuTShhLkYsYS5ELGYpKSxiKz1lO2FhPW51bGx9cmV0dXJuITB9ZnVuY3Rpb24gaWEoYil7KGphPWIpPyhxLkJ1aWxkUGF1c2UmJihuYS5zdHlsZS5kaXNwbGF5PSJub25lIixTLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixyJiYoVD1iYS52YWx1ZSxLPU1hdGgucG93KDEwLHBhcnNlRmxvYXQoVCkpKSksZGIobGEpLFU9MD09PWNhP0RhdGUubm93KCktMUUzKk46MCxOYT1EYXRlLm5vdygpKToocS5CdWlsZFBhdXNlJiYoUy5zdHlsZS5kaXNwbGF5PSJub25lIixuYS5zdHlsZS5kaXNwbGF5PSJibG9jayIsciYmKGJhLnZhbHVlPVQpLHImJmRvY3VtZW50LmV4aXRQb2ludGVyTG9jaygpKSxkYigtMSkpfWZ1bmN0aW9uIGViKCl7RmE_c2V0VGltZW91dChlYiwyMCk6ZmIoKX1mdW5jdGlvbiBmYigpe2lmKHEuQnVpbGRMYXVuY2gpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMYXVuY2hDb250ZW50Iik7Yi5pbm5lckhUTUw9IjxzcGFuIGNsYXNzPSdUaXQnPiIrCkouUHJvamVjdE5hbWUrIjwvc3Bhbj48L2JyPiIrcS5CdWlsZExhdW5jaFRleHQrIjwvYnI-IjsxPE8ubGVuZ3RoJiZiLmFwcGVuZENoaWxkKFopO2Zvcih2YXIgYz0wO2M8QS5sZW5ndGg7YysrKXt2YXIgYT1BW2NdO2IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Yi5hcHBlbmRDaGlsZChkYShhLmVsZW1lbnQsYS5uYW1lKSl9ciYmKG9hPWVhKCEwLCItMyIsIjMiLCIwIiksYi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKSxiLmFwcGVuZENoaWxkKGRhKG9hLCJNb3VzZSBTZW5zaXRpdml0eSIpKSk7RCYmKHBhPWVhKCEwLCIwIiwiMSIsIjAuNSIpLHBhLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixmdW5jdGlvbigpe0Qudm9sdW1lPXBhcnNlRmxvYXQocGEudmFsdWUpfSksYi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKSxiLmFwcGVuZENoaWxkKGRhKHBhLCJBdWRpbyBWb2x1bWUiKSkpO3FhLnN0eWxlLmRpc3BsYXk9CiJibG9jayI7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxhdW5jaCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixiYil9ZWxzZXtpZighY2IoKSlyZXR1cm47Uy5zdHlsZS5kaXNwbGF5PSJibG9jayI7aWEoITApO0I9ITB9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlNwbGFzaFBhbmVsIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Z2IoKX1mdW5jdGlvbiBiYigpe049MDtjYigpJiYocWEuc3R5bGUuZGlzcGxheT0ibm9uZSIsUy5zdHlsZS5kaXNwbGF5PSJibG9jayIsaWEoITApLHImJihUPW9hLnZhbHVlLEs9TWF0aC5wb3coMTAscGFyc2VGbG9hdChUKSksUmEoKSksQj0hMCl9ZnVuY3Rpb24gZWEoYixjLGEsZSl7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiP2YudHlwZT0icmFuZ2UiOihmLnNpemU9IjEwIixmLnR5cGU9Im51bWJlciIpOzA8Yy5sZW5ndGgmJjA8YS5sZW5ndGgmJihmLm1pbj1jLGYubWF4PWEpO2YudmFsdWU9ZTtmLnN0ZXA9ImFueSI7cmV0dXJuIGZ9CmZ1bmN0aW9uIGRhKGIsYyl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTthLmlubmVyVGV4dD1jKyIgIjthLmFwcGVuZENoaWxkKGIpO3JldHVybiBhfWZ1bmN0aW9uIGRiKGIpe2lmKEQpe3ZhciBjPXEuQnVpbGRBdWRpbzstMTxiJiYoYj1PW2JdLmF1ZGlvLDA8Yi5sZW5ndGgmJihjPWIpKTswPGMubGVuZ3RoPyhjIT09RC5zcmMmJihELnNyYz1jKSxELnBsYXkoKSk6RC5wYXVzZSgpfX1mdW5jdGlvbiBIKGIsYyl7dGhpcy5uYW1lPWI7dGhpcy50eXBlPWM7dGhpcy5JPSIifWZ1bmN0aW9uIE9hKGIsYyl7SC5jYWxsKHRoaXMsYixDKTt0aGlzLkk9Yzt0aGlzLk89WWE7dGhpcy5EPXRoaXMuRj01MTI7dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0xO3RoaXMuVz0iIjt0aGlzLmY9djt0aGlzLks9ZC5jcmVhdGVTaGFkZXIoZC5GUkFHTUVOVF9TSEFERVIpO3RoaXMuUD10aGlzLlQ9dGhpcy5VPXRoaXMuaT1udWxsO3RoaXMuSD1bXTt0aGlzLlI9W107dGhpcy5OPVtdOwp0aGlzLko9dGhpcy5MPSExO3RoaXMuQj1udWxsfWZ1bmN0aW9uIFBhKGIpe0guY2FsbCh0aGlzLGIsWCk7dGhpcy5pbWFnZT1uZXcgSW1hZ2U7dGhpcy5pbWFnZS5jbGFzc05hbWUrPSJMYXlJbWciO3RoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MTt0aGlzLmo9ZC5jcmVhdGVUZXh0dXJlKCk7dGhpcy5TPXRoaXMuWD10aGlzLiQ9dGhpcy5aPSExfWZ1bmN0aW9uIGhiKGIsYyl7SC5jYWxsKHRoaXMsYixrYSk7dGhpcy5JPWN9ZnVuY3Rpb24gUWEoYil7SC5jYWxsKHRoaXMsYixLYSk7dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wO3RoaXMuaj1kLmNyZWF0ZVRleHR1cmUoKTt0aGlzLmNoYW5uZWxzPTB9ZnVuY3Rpb24gc2IoYil7dGhpcy5uYW1lPWIubjt0aGlzLmF1ZGlvPWIuYX1mdW5jdGlvbiB0YihiKXt0aGlzLm5hbWU9Yi5uO3RoaXMuRz1iLnM7dGhpcy5taW49Yi5tO3RoaXMubWF4PWIudTt0aGlzLm89Yi5kO3RoaXMuZWxlbWVudD1lYSh0aGlzLkcsdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5vKX0KZnVuY3Rpb24gdWIoYil7c3dpdGNoKGIudCl7Y2FzZSBDOnZhciBjPW5ldyBPYShiLm4sYi5nKTtjLk89Yi5yO2MuRj1iLnc7Yy5EPWIuaDticmVhaztjYXNlIFg6Yz1uZXcgUGEoYi5uKTtjLlo9Yi54O2MuJD1iLnk7Yy5YPWIubDtjLlM9Yi5tO2MuST1iLmc7YnJlYWs7Y2FzZSBrYTpjPW5ldyBoYihiLm4sYi5nKTticmVhaztjYXNlIEthOmM9bmV3IFFhKGIubiksYy5jaGFubmVscz1iLmMsYy5JPWIuZ31yZXR1cm4gY31mdW5jdGlvbiB2YihiKXt2YXIgYz1iLmw7bS5sZW5ndGg9Yy5sZW5ndGg7Zm9yKHZhciBhPXcubGVuZ3RoPTA7YTxtLmxlbmd0aDthKyspe3ZhciBlPXViKGNbYV0pO21bYV09ZTtlLnR5cGU9PT1DJiZ3LnB1c2goZSl9Sj1iLmM7Y2E9Si5Mb2NrRlBTO0NhPUouUGxheUhvdGtleTtyPUouQ2FwdHVyZU1vdXNlO3E9Yi5iO3EuQnVpbGRMYXVuY2hUZXh0PUxhKHEuQnVpbGRMYXVuY2hUZXh0KTtxLkJ1aWxkUGF1c2VUZXh0PUxhKHEuQnVpbGRQYXVzZVRleHQpO089CmIuYm07QT1iLmJvO1A9Yi5iYztmYT1iLmdwOyhxLkdhbWVwYWRNb3VzZXx8ZmEpJiZtYigpO2M9MDxxLkJ1aWxkQXVkaW8ubGVuZ3RoO2U9Yi5ibTtaPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO08ubGVuZ3RoPWUubGVuZ3RoO2ZvcihhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBmPU9bYV09bmV3IHNiKGVbYV0pLGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7MDxmLmF1ZGlvLmxlbmd0aCYmKGM9ITApO2cuaW5uZXJUZXh0PWYubmFtZTtaLmFwcGVuZENoaWxkKGcpfWMmJihEPW5ldyBBdWRpbyxELmxvb3A9ITApO2I9Yi5ibztBLmxlbmd0aD1iLmxlbmd0aDtmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKUFbYV09bmV3IHRiKGJbYV0pO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlNhdmUiKTtiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2FkIik7cS5CdWlsZFNhdmVMb2FkPyhhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe2Zvcih2YXIgbj0KMitBLmxlbmd0aCxoPTA7aDxQLmxlbmd0aDtoKyspe3ZhciBrPW1bUFtoXV07bis9ay5GKmsuRCo0fW49bmV3IEZsb2F0MzJBcnJheShuKTt2YXIgeT0yOyhuZXcgVWludDMyQXJyYXkobi5idWZmZXIpKVswXT1sYTtuWzFdPU47Zm9yKGg9MDtoPEEubGVuZ3RoO2grKyluW3krK109cGFyc2VGbG9hdChBW2hdLmVsZW1lbnQudmFsdWUpO2ZvcihoPTA7aDxQLmxlbmd0aDtoKyspaz1tW1BbaF1dLGsuZiYmKGsuZi5WKCksZC5yZWFkUGl4ZWxzKDAsMCxrLkYsay5ELGQuUkdCQSxkLkZMT0FULG4seSkpLHkrPWsuRiprLkQqNDtyYSYmVVJMLnJldm9rZU9iamVjdFVSTChyYSk7cmE9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbl0pKTtoPW5ldyBEYXRlO2g9aC5nZXRGdWxsWWVhcigpKyJfIisoaC5nZXRNb250aCgpKzEpKyJfIitoLmdldERhdGUoKSsiXyIrTWF0aC5mbG9vcihoLmdldFRpbWUoKS8xRTMpJTg2NDAwO2g9Si5Qcm9qZWN0TmFtZS5DKCIgIiwiXyIpK2grIi5zYXZlc3RhdGUiOwprPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtrLmhyZWY9cmE7ay5kb3dubG9hZD1oO2suY2xpY2soKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtuLnR5cGU9ImZpbGUiO24uYWNjZXB0PSIuc2F2ZXN0YXRlIjtuLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIscWIpO24uY2xpY2soKX0pKTphLnN0eWxlLmRpc3BsYXk9Yi5zdHlsZS5kaXNwbGF5PSJub25lIjthPXEuQnVpbGRMYXVuY2g7Yj1xLkJ1aWxkUGF1c2U7aWYoYXx8Yil7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2lmKChlPXEuQnVpbGRDU1MpJiYyPGUubGVuZ3RoKWMuaW5uZXJIVE1MPWU7ZWxzZXt2YXIgbD1xLkJ1aWxkRkdDb2xvcix4PXEuQnVpbGRCR0NvbG9yO2U9ZnVuY3Rpb24obil7dmFyIGg9MS1uLGs9TWF0aC5taW4oMjU1LE1hdGguZmxvb3IobC5yKmgreC5yKm4pKS50b1N0cmluZygxNik7dmFyIHk9CiIjIisoMT09PWsubGVuZ3RoPyIwIitrOmspO2s9TWF0aC5taW4oMjU1LE1hdGguZmxvb3IobC5nKmgreC5nKm4pKS50b1N0cmluZygxNik7eSs9MT09PWsubGVuZ3RoPyIwIitrOms7az1NYXRoLm1pbigyNTUsTWF0aC5mbG9vcihsLmIqaCt4LmIqbikpLnRvU3RyaW5nKDE2KTtyZXR1cm4geSsoMT09PWsubGVuZ3RoPyIwIitrOmspfTtmPSJ7YmFja2dyb3VuZC1jb2xvcjoiK2UoLjEpKyI7Ym9yZGVyOiAwLjI1dncgc29saWQgIitlKC4yNSkrIjt9IjtjLmlubmVySFRNTD0iZGl2LlBhbmVsIHtjb2xvcjoiK2UoMCkrIjsgYmFja2dyb3VuZC1jb2xvcjoiK2UoMSkrIjt9c3Bhbi5UaXQge2NvbG9yOiIrZSguNSkrIjsgdGV4dC1zaGFkb3c6IDBweCAwcHggMC40dncgIitlKDApKyI7fXNwYW4uQnRuIHtjb2xvcjoiK2UoLjEpKyI7YmFja2dyb3VuZC1jb2xvcjoiK2UoLjgpKyI7Ym9yZGVyOiAwLjN2dyBzb2xpZCAiK2UoLjYpKyI7fXNwYW4uQnRuOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiIrCmUoLjUpKyI7fWlucHV0LCBzZWxlY3Qge2NvbG9yOiIrZSguMDUpKyI7YmFja2dyb3VuZC1jb2xvcjoiK2UoLjkyKSsiO2JvcmRlcjogMC4xdncgc29saWQgIitlKC40KSsiO31pbnB1dFt0eXBlPSdyYW5nZSddOjotd2Via2l0LXNsaWRlci10aHVtYiAiK2YrImlucHV0W3R5cGU9J3JhbmdlJ106Oi1tb3otcmFuZ2UtdGh1bWIgIitmfWRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYyl9YiYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlBhdXNlQ29udGVudCIpLGIuaW5uZXJIVE1MPSI8c3BhbiBjbGFzcz0nVGl0Jz4iK0ouUHJvamVjdE5hbWUrIiBQYXVzZWQ8L3NwYW4-PC9icj4iK3EuQnVpbGRQYXVzZVRleHQsZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlJlc3VtZSIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe2lhKCEwKX0pLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJHb0Z1bGxzY3JlZW4iKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudD8KZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5ib2R5LnJlcXVlc3RGdWxsc2NyZWVuKCl9KSxjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJRdWl0IiksYT9jLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe2phPUI9ITE7ciYmKG9hLnZhbHVlPVQ9YmEudmFsdWUpO1Muc3R5bGUuZGlzcGxheT1uYS5zdHlsZS5kaXNwbGF5PSJub25lIjtxYS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KTpjLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHImJihiYT1lYSghMCwiLTMiLCIzIiwiMCIpLGIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSksYi5hcHBlbmRDaGlsZChkYShiYSwiTW91c2UgU2Vuc2l0aXZpdHkiKSkpLEQmJihzYT1lYSghMCwiMCIsIjEiLCIwLjUiKSxzYS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZnVuY3Rpb24oKXtELnZvbHVtZT1wYXJzZUZsb2F0KHNhLnZhbHVlKX0pLGIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSksCmIuYXBwZW5kQ2hpbGQoZGEoc2EsIkF1ZGlvIFZvbHVtZSIpKSkpfWZ1bmN0aW9uIGdiKCl7aWYoQiYmamEpe0w9RGF0ZS5ub3coKTt2YXIgYj1MLU5hO2E6e3ZhciBjPWI7aWYoRyYmRy5jb25uZWN0ZWQpe2lmKEcudGltZXN0YW1wIT1pYilpYj1HLnRpbWVzdGFtcCxFYT1MO2Vsc2UgaWYoM0UzPEwtRWEpYnJlYWsgYTtjLz0xRTM7aWYoRGEpe3ZhciBhPTIqKERhLTEpLGU9Ry5heGVzW2FdO2E9Ry5heGVzW2ErMV07Yyo9di5oZWlnaHQqSztlPWUqZSpNYXRoLnNpZ24oZSk7YT1hKmEqTWF0aC5zaWduKGEpO3I_KHQ9ZSpjLHU9LWEqYyk6KGMqPS4yNSx0PU1hdGgubWluKE1hdGgubWF4KHQrZSpjLDApLHYud2lkdGgpLHU9TWF0aC5taW4oTWF0aC5tYXgodSthKmMsMCksdi5oZWlnaHQpKX1pZihmYSl7Ri5maWxsKDApO2ZvcihlPUU9Uj0wOzE3PmU7ZSsrKShjPWZhW2VdKSYmRy5idXR0b25zW2VdLnByZXNzZWQmJihjLS0sYz49SS5sZW5ndGg_Yz09PUkubGVuZ3RoP0U9MTpSPTE6KGE9Ck1hdGguZmxvb3IoYy8zMiksYyU9MzIsRlthXXw9MTw8YykpO2ZvcihlPTE3OzI1PmU7ZSsrKWlmKGM9ZmFbZV0pe2E9ZS0xNzt2YXIgZj1NYXRoLmZsb29yKGEvMik7YT0oYStmKSUyKjItMTsuNTxHLmF4ZXNbZl0qYSYmKGMtLSxjPj1JLmxlbmd0aD9jPT09SS5sZW5ndGg_RT0xOlI9MTooYT1NYXRoLmZsb29yKGMvMzIpLGMlPTMyLEZbYV18PTE8PGMpKX19fX1pZigwPT09Y2EpSmE9MUUzL01hdGgubWF4KDEsYiksTj0oTC1VKS8xRTMsJGEoKSxJYSh3W3cubGVuZ3RoLTFdKSxhYigpLHImJih0PXU9MCk7ZWxzZSBmb3IoZT0xRTMvY2EsYz1lLzFFMyxKYT1jYSxVKz1iLGI9VT49ZTtiOylOKz1jLFUtPWUsYj1VPj1lLCRhKCksciYmKHQ9dT0wKSxifHxJYSh3W3cubGVuZ3RoLTFdKSxhYigpO05hPUx9ZWxzZSByJiYodD11PTApO3JlcXVlc3RBbmltYXRpb25GcmFtZShnYil9dmFyIGQscCxZPVtdLHYsdWE9bnVsbCx2YSx3YSx4YSx5YTtRLnByb3RvdHlwZS5NPWZ1bmN0aW9uKGIsYywKYSl7dGhpcy53aWR0aD1iO3RoaXMuaGVpZ2h0PWM7dGhpcy5HJiYoZC5iaW5kVGV4dHVyZShkLlRFWFRVUkVfMkQsdGhpcy5qKSxkLnRleEltYWdlMkQoZC5URVhUVVJFXzJELDAsdGhpcy5jYSxiLGMsMCx0aGlzLmRhLHRoaXMudHlwZSxhKSx0aGlzLm8mJihkLmJpbmRSZW5kZXJidWZmZXIoZC5SRU5ERVJCVUZGRVIsdGhpcy5vKSxkLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZC5SRU5ERVJCVUZGRVIsZC5ERVBUSF9DT01QT05FTlQsYixjKSkpfTtRLnByb3RvdHlwZS5WPWZ1bmN0aW9uKGIsYyxhLGUpezQ-YXJndW1lbnRzLmxlbmd0aCYmKGI9Yz0wLGE9dGhpcy53aWR0aCxlPXRoaXMuaGVpZ2h0KTtpZih1YSE9PXRoaXN8fHZhIT09Ynx8d2EhPT1jfHx4YSE9PWF8fHlhIT09ZSl1YT10aGlzLHZhPWIsd2E9Yyx4YT1hLHlhPWUsZC5iaW5kRnJhbWVidWZmZXIoZC5GUkFNRUJVRkZFUix0aGlzLkcpLGQudmlld3BvcnQoYixjLGEsZSksZC5zY2lzc29yKGIsYyxhLGUpfTtRLnByb3RvdHlwZS52PQpmdW5jdGlvbigpe3RoaXMuRyYmKGQuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5HKSxkLmRlbGV0ZVRleHR1cmUodGhpcy5qKSx0aGlzLm8mJmQuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMubykpfTt2YXIgamIsdD0wLHU9MCxFPTAsUj0wLHphPTAsQWE9MCxXPS0xLEs9MSxHPW51bGwsRWE9LTEsaWI9MCxEYT0wLEJhPXt9LEY9bmV3IFVpbnQzMkFycmF5KDQpLEk9IkVzY2FwZSBEaWdpdDEgRGlnaXQyIERpZ2l0MyBEaWdpdDQgRGlnaXQ1IERpZ2l0NiBEaWdpdDcgRGlnaXQ4IERpZ2l0OSBEaWdpdDAgTWludXMgRXF1YWwgQmFja3NwYWNlIFRhYiBLZXlRIEtleVcgS2V5RSBLZXlSIEtleVQgS2V5WSBLZXlVIEtleUkgS2V5TyBLZXlQIEJyYWNrZXRMZWZ0IEJyYWNrZXRSaWdodCBFbnRlciBDb250cm9sTGVmdCBLZXlBIEtleVMgS2V5RCBLZXlGIEtleUcgS2V5SCBLZXlKIEtleUsgS2V5TCBTZW1pY29sb24gUXVvdGUgQmFja3F1b3RlIFNoaWZ0TGVmdCBCYWNrc2xhc2ggS2V5WiBLZXlYIEtleUMgS2V5ViBLZXlCIEtleU4gS2V5TSBDb21tYSBQZXJpb2QgU2xhc2ggU2hpZnRSaWdodCBOdW1wYWRNdWx0aXBseSBBbHRMZWZ0IFNwYWNlIENhcHNMb2NrIEYxIEYyIEYzIEY0IEY1IEY2IEY3IEY4IEY5IEYxMCBTY3JvbGxMb2NrIE51bXBhZDcgTnVtcGFkOCBOdW1wYWQ5IE51bXBhZFN1YnRyYWN0IE51bXBhZDQgTnVtcGFkNSBOdW1wYWQ2IE51bXBhZEFkZCBOdW1wYWQxIE51bXBhZDIgTnVtcGFkMyBOdW1wYWQwIE51bXBhZERlY2ltYWwgSW50bEJhY2tzbGFzaCBGMTEgRjEyIE51bXBhZEVxdWFsIE51bXBhZENvbW1hIE51bXBhZEVudGVyIENvbnRyb2xSaWdodCBOdW1wYWREaXZpZGUgQWx0UmlnaHQgTnVtTG9jayBIb21lIEFycm93VXAgUGFnZVVwIEFycm93TGVmdCBBcnJvd1JpZ2h0IEVuZCBBcnJvd0Rvd24gUGFnZURvd24gSW5zZXJ0IERlbGV0ZSIuc3BsaXQoIiAiKSwKej0xLFhhPSExLFY9NCxNYSxtYSxvYj1bXSxIYT1bXSxaYT1bXSxNPVtdLEI9ITEsamE9ITEsQ2Escj0hMSxjYT0wLE49MCxVPTAsTmE9MCxMPTAsSmE9MCxKPW51bGwsbT1bXSx3PVtdLEZhPTAscSxPPVtdLEE9W10sUD1bXSxEPW51bGwsZmE9bnVsbCxxYSxuYSxTLFQ9MCxsYT0tMSxyYT1udWxsLGFhPW51bGwsWixwYSxvYSxzYSxiYSxDPTAsa2E9MSxYPTIsS2E9MyxZYT0wLHBiPTE7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZnVuY3Rpb24oKXtwPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJjYW52YXMiKVswXTtwLndpZHRoPXAuaGVpZ2h0PTE7aWYoZD1wLmdldENvbnRleHQoIndlYmdsMiIse2FscGhhOiExLGFudGlhbGlhczohMSxkZXB0aDohMSxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMX0pKXt2PW5ldyBRKDQsNCxkLlJHQkEsZC5SR0JBLGQuVU5TSUdORURfQllURSwhMSwKITApO2QuZW5hYmxlKGQuU0NJU1NPUl9URVNUKTtkLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApO3ZhciBiPVsyLDEsLTIsMSwwLC0zXTt2YXIgYz1kLmNyZWF0ZUJ1ZmZlcigpO2QuYmluZEJ1ZmZlcihkLkFSUkFZX0JVRkZFUixjKTtkLmJ1ZmZlckRhdGEoZC5BUlJBWV9CVUZGRVIsIkZsb2F0MzJBcnJheSI9PT1jLmNvbnN0cnVjdG9yLm5hbWU_YjpuZXcgRmxvYXQzMkFycmF5KGIpLGQuU1RBVElDX0RSQVcpO2MuWT0yO2MuZWE9Yi5sZW5ndGgvMjtqYj1jO2I9ITB9ZWxzZSBiPSExO2lmKGIpe1hhPWQuZ2V0RXh0ZW5zaW9uKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik_ITA6ITE7Vj1kLmdldFBhcmFtZXRlcihkLk1BWF9URVhUVVJFX1NJWkUpO2QuZW5hYmxlKGQuQ1VMTF9GQUNFKTtkLmN1bGxGYWNlKGQuQkFDSyk7ZC5kaXNhYmxlKGQuREVQVEhfVEVTVCk7ZC5kZXB0aE1hc2soITEpO2QuY2xlYXJEZXB0aCgxKTtkLmRpc2FibGUoZC5TVEVOQ0lMX1RFU1QpO2QuZGlzYWJsZShkLkJMRU5EKTsKZC5lbmFibGUoZC5TQ0lTU09SX1RFU1QpO2QuY29sb3JNYXNrKCEwLCEwLCEwLCEwKTtiPWQuY3JlYXRlU2hhZGVyKGQuVkVSVEVYX1NIQURFUik7ZC5zaGFkZXJTb3VyY2UoYiwiI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7cHJlY2lzaW9uIGhpZ2hwIGludDtpbiB2ZWMyIHZlcnRleFBvc2l0aW9uO291dCB2ZWM0IHBpeGVsUG9zaXRpb247dW5pZm9ybSB2ZWM0IEdsc2xQYXNzUGFyYW1zO3ZvaWQgbWFpbigpIHtcdHBpeGVsUG9zaXRpb24gPSB2ZWM0KHZlcnRleFBvc2l0aW9uLCB2ZXJ0ZXhQb3NpdGlvbiouNSsuNSk7XHRnbF9Qb3NpdGlvbiA9IHZlYzQodmVydGV4UG9zaXRpb24sMSwxKTt9Iik7ZC5jb21waWxlU2hhZGVyKGIpO2QuZ2V0U2hhZGVyUGFyYW1ldGVyKGIsZC5DT01QSUxFX1NUQVRVUyk_TWE9YjooY29uc29sZS5lcnJvcigiRXJyb3IgY29tcGlsaW5nIEdMU0wgc2hhZGVyOiAiK2QuZ2V0U2hhZGVySW5mb0xvZyhiKSsiXG5Gcm9tIHNoYWRlcjoiKSwKY29uc29sZS5sb2coIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O3ByZWNpc2lvbiBoaWdocCBpbnQ7aW4gdmVjMiB2ZXJ0ZXhQb3NpdGlvbjtvdXQgdmVjNCBwaXhlbFBvc2l0aW9uO3VuaWZvcm0gdmVjNCBHbHNsUGFzc1BhcmFtczt2b2lkIG1haW4oKSB7XHRwaXhlbFBvc2l0aW9uID0gdmVjNCh2ZXJ0ZXhQb3NpdGlvbiwgdmVydGV4UG9zaXRpb24qLjUrLjUpO1x0Z2xfUG9zaXRpb24gPSB2ZWM0KHZlcnRleFBvc2l0aW9uLDEsMSk7fSIpLGQuZGVsZXRlU2hhZGVyKGIpLE1hPW51bGwpO21hPSIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtwcmVjaXNpb24gaGlnaHAgaW50O1xuXG5pbiB2ZWM0IHBpeGVsUG9zaXRpb247XG5cbnVuaWZvcm0gdmVjNCBHbHNsUGFzc1BhcmFtcztcbiNkZWZpbmUgUkVTT0xVVElPTiAoR2xzbFBhc3NQYXJhbXMueHkpXG4jZGVmaW5lIFRJTUUgKEdsc2xQYXNzUGFyYW1zLnopXG4jZGVmaW5lIEZSQU1FUkFURSAoR2xzbFBhc3NQYXJhbXMudylcblxudW5pZm9ybSB2ZWM0IE1vdXNlU3RhdGU7XG4jZGVmaW5lIE1PVVNFX1BPU0lUSU9OIChNb3VzZVN0YXRlLnh5KVxuI2RlZmluZSBNT1VTRV9MRUZUIGJvb2woTW91c2VTdGF0ZS56KVxuI2RlZmluZSBNT1VTRV9SSUdIVCBib29sKE1vdXNlU3RhdGUudylcblxudW5pZm9ybSB1dmVjNCBLZXlib2FyZFN0YXRlO1xuIjsKZm9yKGI9MDtiPEkubGVuZ3RoO2IrKyl7Yz1JW2JdLkMoIktleSIsIiIpLkMoIkRpZ2l0IiwiIikudG9VcHBlckNhc2UoKTt2YXIgYT1iJTMyO21hKz0iI2RlZmluZSBLRVlfIitjKyIgYm9vbCgoS2V5Ym9hcmRTdGF0ZVsiK01hdGguZmxvb3IoYi8zMikrIl0iKyhhPyI-PiIrYToiIikrIikmMXUpXG4ifW1hKz0iXG5vdXQgdmVjNCBwaXhlbENvbG9yO1xuXG4iO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFNhKTtTYSgpO2I9amI7ZC5iaW5kQnVmZmVyKGQuQVJSQVlfQlVGRkVSLGIpO2QudmVydGV4QXR0cmliUG9pbnRlcigwLGIuWSxkLkZMT0FULCExLDQqYi5ZLDApO2I9ITB9ZWxzZSBXYSgiRmF0YWwgRXJyb3I6IFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkdMIDIuIFRyeSBhZ2FpbiBvbiBhIG1vZGVybiBicm93c2VyIHN1Y2ggYXMgRmlyZWZveCBvciBDaHJvbWUgYW5kIHdpdGggYSBkZXZpY2UgY2FwYWJsZSBvZiBhdCBsZWFzdCBPcGVuR0wgRVMgMy4wIG9yIENvcmUgMy4yLiIpLApiPSExO2lmKGImJihsYigpLFM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk1haW5QYW5lbCIpLHFhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMYXVuY2hQYW5lbCIpLG5hPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJQYXVzZVBhbmVsIiksYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiR0NQSlMiKSkpe2M9bnVsbDt0cnl7Yz1KU09OLnBhcnNlKGIudGV4dENvbnRlbnQpfWNhdGNoKHdiKXt9aWYoYyl7dmIoYyk7Yj0hMTtmb3IoYz0wO2M8bS5sZW5ndGg7YysrKWlmKGE9bVtjXSxhLnR5cGU-PVgpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMQVlFUiIrYyk7aWYoZSlpZihhLnR5cGU9PT1YKUZhKyssYS5pbWFnZS5iYT1hLGEuaW1hZ2Uub25sb2FkPW5iLGEuaW1hZ2Uuc3JjPWUudGV4dENvbnRlbnQsYj0hMDtlbHNle3ZhciBmPW51bGw7dHJ5e2Y9SlNPTi5wYXJzZShMYShlLnRleHRDb250ZW50KSl9Y2F0Y2god2Ipe31pZihmKXtlPWY7dmFyIGc9YS5jaGFubmVscysKMSxsPU1hdGguY2VpbChlLmxlbmd0aC9nKSx4PWwsbj0xO2lmKCEoeD5WKlYpKXtpZih4PlYpe3ZhciBoPU1hdGgubWluKFYrMSxNYXRoLmNlaWwobC8yKSk7Zm9yKGY9TWF0aC5tYXgoMixNYXRoLmZsb29yKGwvVikpO2Y8aDtmKyspaWYoMD09PWwlZil7eD1mO249bC9mO2JyZWFrfWY-PWgmJih4PW49TWF0aC5jZWlsKE1hdGguc3FydChsKSkpfWw9eCpuKmc7YS53aWR0aD14O2EuaGVpZ2h0PW47aD1uZXcgRmxvYXQzMkFycmF5KHgqbio0KTt2YXIgaz0wO3N3aXRjaChnKXtjYXNlIDE6Zm9yKGY9MDtmPGw7ZisrKWc9ZVtmXSxpc05hTihnKSYmKGc9MCksaFtrKytdPWcsaFtrKytdPWcsaFtrKytdPWcsaFtrKytdPTE7YnJlYWs7Y2FzZSAyOmZvcihmPTA7ZjxsO2YrKyl7Zz1lW2YrK107dmFyIHk9ZVtmXTtoW2srK109aXNOYU4oZyk_MDpnO2hbaysrXT1pc05hTih5KT8wOnk7aFtrKytdPTA7aFtrKytdPTF9YnJlYWs7Y2FzZSAzOmZvcihmPTA7ZjxsO2YrKyl7Zz1lW2YrK107eT1lW2YrK107CnZhciBoYT1lW2ZdO2hbaysrXT1pc05hTihnKT8wOmc7aFtrKytdPWlzTmFOKHkpPzA6eTtoW2srK109aXNOYU4oaGEpPzA6aGE7aFtrKytdPTF9YnJlYWs7Y2FzZSA0OmZvcihmPTA7ZjxsO2YrKyl7Zz1lW2YrK107eT1lW2YrK107aGE9ZVtmKytdO3ZhciBrYj1lW2YrK107aFtrKytdPWlzTmFOKGcpPzA6ZztoW2srK109aXNOYU4oeSk_MDp5O2hbaysrXT1pc05hTihoYSk_MDpoYTtoW2srK109aXNOYU4oa2IpPzA6a2J9fWQuYmluZFRleHR1cmUoZC5URVhUVVJFXzJELGEuaik7dGEoITEsITEsITEsITEpO2QudGV4SW1hZ2UyRChkLlRFWFRVUkVfMkQsMCxkLlJHQkEzMkYseCxuLDAsZC5SR0JBLGQuRkxPQVQsaCl9fX19Yj9lYigpOmZiKCl9fX0pO1N0cmluZy5wcm90b3R5cGUuQ3x8KFN0cmluZy5wcm90b3R5cGUuQz1mdW5jdGlvbihiLGMpe3JldHVybiB0aGlzLnJlcGxhY2UobmV3IFJlZ0V4cChiLCJnIiksYyl9KTtILnByb3RvdHlwZS52PWZ1bmN0aW9uKCl7fTtPYS5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUoSC5wcm90b3R5cGUpO09hLnByb3RvdHlwZS52PWZ1bmN0aW9uKCl7ZC5kZWxldGVTaGFkZXIodGhpcy5LKTt0aGlzLmkmJmQuZGVsZXRlUHJvZ3JhbSh0aGlzLmkpO3RoaXMuTCYmKHRoaXMuZi52KCksdGhpcy5CLnYoKSk7dy5zcGxpY2Uody5pbmRleE9mKHRoaXMpLDEpfTtQYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShILnByb3RvdHlwZSk7UGEucHJvdG90eXBlLnY9ZnVuY3Rpb24oKXtkLmRlbGV0ZVRleHR1cmUodGhpcy5qKX07aGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSC5wcm90b3R5cGUpO1FhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEgucHJvdG90eXBlKTtRYS5wcm90b3R5cGUudj1mdW5jdGlvbigpe2QuZGVsZXRlVGV4dHVyZSh0aGlzLmopfX0pKCk7Cjwvc2NyaXB0PgoKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEuMCxtYXhpbXVtLXNjYWxlPTEuMCx1c2VyLXNjYWxhYmxlPW5vIj4KCjxzdHlsZT4KYm9keSxodG1sIHsKCW1hcmdpbjogMHB4OwoJcGFkZGluZzogMHB4OwoJdGV4dC1hbGlnbjogY2VudGVyOwp9Cmh0bWwsIGlucHV0LCBzZWxlY3QgewoJZm9udC1zaXplOiAyLjJ2dzsKCWZvbnQtZmFtaWx5OiAiQXJpYWwiLCBzYW5zLXNlcmlmOwoJdmVydGljYWwtYWxpZ246IHRvcDsKfQoKZGl2LkZhdGFsQ3Jhc2ggewoJd2lkdGg6IDEwMCU7CgloZWlnaHQ6IDEwMCU7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMTYxNjE2OwoJY29sb3I6ICNmZmFmNDA7Cglmb250LXNpemU6IDV2dzsKCWZvbnQtd2VpZ2h0OiBib2xkOwp9CgpkaXYuUGFuZWwgewoJd2lkdGg6IDEwMCU7CgloZWlnaHQ6IDEwMCU7CglvdmVyZmxvdzogYXV0bzsKfQkKCiNTcGxhc2hQYW5lbCB7CgliYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM0ZGVnLCMxZTIxNTAgMCUsICMyMjYzOWEgMTAwJSk7Cn0KCnNwYW4uVGl0IHsKCWZvbnQtc2l6ZTogNXZ3OwoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cglmb250LXdlaWdodDogYm9sZDsKfQoKY2FudmFzIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCWxlZnQ6IDBweDsKCXRvcDogMHB4Owp9CgojTGF1bmNoQ29udGVudCB7Cgl3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Cn0KCnNwYW4uQnRuIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCW1hcmdpbjogMC4zdnc7CglwYWRkaW5nOiAwLjN2dzsKCWZvbnQtc2l6ZTogM3Z3OwoJY3Vyc29yOiBwb2ludGVyOwoJdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCgpsYWJlbCB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgltYXJnaW4tdG9wOiAxdnc7Cn0KCmlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7Cgktd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CgltYXJnaW46IDBweDsKfQppbnB1dFt0eXBlPSJudW1iZXIiXSB7CgktbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsKfQoKaW5wdXRbdHlwZT0icmFuZ2UiXSB7Cgktd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CglhcHBlYXJhbmNlOiBub25lOwoJd2lkdGg6IDIwdnc7CgloZWlnaHQ6IDJ2dzsKfQppbnB1dFt0eXBlPSJyYW5nZSJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7Cgktd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CglhcHBlYXJhbmNlOiBub25lOwoJY3Vyc29yOiBwb2ludGVyOwoJYm9yZGVyLXJhZGl1czogMC4wNXZ3OwoJd2lkdGg6IDEuOHZ3OwoJaGVpZ2h0OiAxLjh2dzsKfQppbnB1dFt0eXBlPSJyYW5nZSJdOjotbW96LXJhbmdlLXRodW1iIHsKCWN1cnNvcjogcG9pbnRlcjsKCWJvcmRlci1yYWRpdXM6IDAuMDV2dzsKCXdpZHRoOiAxLjh2dzsKCWhlaWdodDogMS44dnc7Cn0KPC9zdHlsZT4KPC9oZWFkPgoKCgo8Ym9keT4KPGRpdiBpZD0iU3BsYXNoUGFuZWwiIGNsYXNzPSJQYW5lbCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KPHNwYW4gY2xhc3M9IlRpdCI-TG9hZGluZy4uLjwvc3Bhbj4KPC9kaXY-Cgo8ZGl2IGlkPSJMYXVuY2hQYW5lbCIgY2xhc3M9IlBhbmVsIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgo8ZGl2IGlkPSJMYXVuY2hDb250ZW50Ij48L2Rpdj4KPC9icj4KPHNwYW4gaWQ9IkxvYWQiIGNsYXNzPSJCdG4iPkxvYWQgU3RhdGU8L3NwYW4-ICZuYnNwOwo8c3BhbiBpZD0iTGF1bmNoIiBjbGFzcz0iQnRuIj5MYXVuY2g8L3NwYW4-CjwvZGl2PgoKPGRpdiBpZD0iUGF1c2VQYW5lbCIgY2xhc3M9IlBhbmVsIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgo8ZGl2IGlkPSJQYXVzZUNvbnRlbnQiPjwvZGl2Pgo8L2JyPgo8c3BhbiBpZD0iU2F2ZSIgY2xhc3M9IkJ0biI-U2F2ZSBTdGF0ZTwvc3Bhbj4gJm5ic3A7Jm5ic3A7CjxzcGFuIGlkPSJHb0Z1bGxzY3JlZW4iIGNsYXNzPSJCdG4iPlRvZ2dsZSBGdWxsc2NyZWVuPC9zcGFuPgo8L2JyPgo8c3BhbiBpZD0iUXVpdCIgY2xhc3M9IkJ0biI-UXVpdCB0byBNYWluIE1lbnU8L3NwYW4-ICZuYnNwOyZuYnNwOwo8c3BhbiBpZD0iUmVzdW1lIiBjbGFzcz0iQnRuIj5SZXN1bWUgYW5kIENvbnRpbnVlPC9zcGFuPgo8L2Rpdj4KCjxkaXYgaWQ9Ik1haW5QYW5lbCIgY2xhc3M9IlBhbmVsIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgYmFja2dyb3VuZDogbm9uZTsiPgo8Y2FudmFzIHRhYmluZGV4PSIwIj48L2NhbnZhcz4KPC9kaXY-CjwvYm9keT4KPC9odG1sPgo