Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wbZj3-002fwS-0g for pgsql-www@arkaria.postgresql.org; Mon, 22 Jun 2026 08:09:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wbZj1-0051ch-1p for pgsql-www@arkaria.postgresql.org; Mon, 22 Jun 2026 08:09:47 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wbZj0-0051cY-24 for pgsql-www@lists.postgresql.org; Mon, 22 Jun 2026 08:09:47 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wbZix-00000001Yad-42hz for pgsql-www@postgresql.org; Mon, 22 Jun 2026 08:09:45 +0000 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-5ad0abf1f7bso3172680e87.3 for ; Mon, 22 Jun 2026 01:09:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782115781; cv=none; d=google.com; s=arc-20240605; b=ag7SW1kSc/JvKhB9CdfngWZmiAKKSodHuBe/8X8WuxbwnZ2ugp8IJvjHqDTA8rBEgA zzdXiQ4y+ajdebaGuXtck0RIEiWzbu4LVaSWh3+QjWaceAooSiYEjEZl7FQdaVtPvGZ9 S5nb3XySgMzNE7vUn6HT89pCkGjPi5BDw+pNAmqzF/Alxv9Wd3h4xXG1S+WbbHOAdYTU tVTgGizOt0PkJNvmmvuEUUM2jpPZo9eVTlWbIegNrcXNXZL/2tqORPXkwTCoce8LDQPn zk+tcsqMP/mqUEh4uon3QTYpjL6Ltbl03OBPgbOrSdTbsJKAduyd2GuLk2tlAthLnSkS OAUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=Q9qqSdumY6CZyp5WCjJrNidAbSsMFMH8iWefO7nDt08=; fh=EiFxGWzWr+9yFXeZjwamqjPvene9UNTnzYj9OWMi2Do=; b=KCA4x0DlgRhoC/5rMQ5BD4k19qxGu6I5gs8Htu+3JKNckOY20EdRtchQQNkmaSAiRq V8org78OlJz8xKJXaIMoib2EAe5eEo2oIisH6YEuUISEGVl0RuxDNV0eGEssk3zFjG1J X9JCtV5aZcJKxBygAUvhvM6aomfkEGQxfjT8KEjKcMu1oRub2SvtLNDjS8mYgmI3Vj5Z 5eH+hV2lkGehzqHV2D57BYWonSyR3ODa8WpliuW5Gm1MZeH0BqKZv2Sn9XLNvO5c1aRZ 6WT3vkU4LxjXw5HK/oO1EuDmQnQJKs6N6NQSdBtUgzKSZyBxaTIgD3nTOVLogAwoBSzB 2BiQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgadmin.org; s=google; t=1782115781; x=1782720581; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Q9qqSdumY6CZyp5WCjJrNidAbSsMFMH8iWefO7nDt08=; b=Su51P1Mjt0LwIdhzWpwbkeA1A27HANpsTxFM1S1IkIKnJ6HxAoQ60zHoEgctz26C4g 03Q/Bz5yFj9spX2jUNtkTlU015+/6vK8tre3F1K4AyK/4Lg3N+ljQlrZPS5VoR3zIvqz 9BRbcTDlmFERAkiO9PIL41thCrSMs8RAifPLZYmUu8VUMzk5Gv2DHWpsnCxqWxwzq075 sPkYa6GsQNR0AGu0+ri2tAj9YCoylsf60cfK4jcMxdJB6BjuubLkS2UanGeTaVCX0VGE nUneqNd8asvdmc6hZRBixH7aJjGcO6oON7sxWKPh1klvKKuJO4eLOWiShNr6jOOgEFx8 wJ4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782115781; x=1782720581; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Q9qqSdumY6CZyp5WCjJrNidAbSsMFMH8iWefO7nDt08=; b=O112z0dajTxDWd1hfzzkVWXpH/iNxgrCd/XuqFLjE7GRqU6AZC7yLEJEyDeLWstm8I H24Ymg3LfUdZ/88+YPM9R46Y1lldQMPCZYH2ryBlOdlK97v6DvdWw1LQwkJnhVlKOu4B VFvoeKbG6bGFySmr71b/v4ewIWOzy1Tcsg7ESpk2UKlrKBqC96n0llk/ev0OdeuLaWHH 2kS87JrromeO5IhUp4FmWX/5nHS1B+8wQNdrn1OYQp7AiO0VzL7I2Oll57Eaj5C4IZYH ec2F+OGRQH4S89QlRiNQkqkKM+yiWaCkJuwqWGqxbY3aR0YeJ1R4zlvo0uf17XFBhKY+ leUA== X-Gm-Message-State: AOJu0YzhleEtyZMDCuOM1WZhGF6yb8SB+oi2pOEVZWFUePZF1MyeEE7h dwO/RHq+wqmaOwsMn24UkTlt+91x+x4EyfvAAg1rh5HYp415vNFsUgggV34vNB4viVBPUCD3TcK d3j2C+F/bPckIywpwLAsIYguFwi/zQFG7Gv9I2CBJ4zHAZSdtRIyWRQ== X-Gm-Gg: AfdE7cmz+YkvEm4db7LufGz6b70D7zYW8w1YvhaGyEUAjRw2tJXfJ9H5XmEV8AP/HPt 42/R9vk6Lorz0FzVDkV7XJbwEIgILSgli1Ml+nUiryWbCKO6EXMG+jvE/1GnIcSHrhATMrqHe6W jF9PIi+85ibFsYlc7hQ4MUeTT1A44vEkBzhkvNCIG25mqjSJn13QrvKJbhr86gJZQg5j3dpAnNn 2wShPPSTMDPor41XZK34SGpx2859r1n2Kj8xVboWzzA2FUh931lFRQ3Vk8wZKON7ONnd5c29Sg= X-Received: by 2002:ac2:51c9:0:b0:5ad:4da9:7330 with SMTP id 2adb3069b0e04-5ad576da87cmr4159921e87.11.1782115779920; Mon, 22 Jun 2026 01:09:39 -0700 (PDT) MIME-Version: 1.0 From: Dave Page Date: Mon, 22 Jun 2026 09:09:28 +0100 X-Gm-Features: AVVi8Cdjz956hxO90XETNpIXs5NuYSFJTNOtAG4xMRDvxrPR82UbUZ4olFLu7Ic Message-ID: Subject: Remove unused Bootstrap files To: PostgreSQL WWW Content-Type: multipart/mixed; boundary="00000000000002fd1c0654d32a40" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000002fd1c0654d32a40 Content-Type: multipart/alternative; boundary="00000000000002fd1b0654d32a3e" --00000000000002fd1b0654d32a3e Content-Type: text/plain; charset="UTF-8" In confirming what turned out to be possibly the worst case of an AI slop bug report I've yet to see, I came to learn we have a couple of Bootstrap files in the repo that aren't used anywhere. This patch removes them. -- Dave Page pgAdmin: https://www.pgadmin.org PostgreSQL: https://www.postgresql.org pgEdge: https://www.pgedge.com --00000000000002fd1b0654d32a3e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
In confirming what turned out to be possibly the wors= t case of an AI slop bug report I've yet to see, I came to learn we hav= e a couple of Bootstrap files in the repo that aren't used anywhere. Th= is patch removes them.

--
--00000000000002fd1b0654d32a3e-- --00000000000002fd1c0654d32a40 Content-Type: application/octet-stream; name="remove-unreferenced-bootstrap-js.patch" Content-Disposition: attachment; filename="remove-unreferenced-bootstrap-js.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqoxlexp0 ZGlmZiAtLWdpdCBhL21lZGlhL2pzL2Jvb3RzdHJhcC00LjQuMS5taW4uanMgYi9tZWRpYS9qcy9i b290c3RyYXAtNC40LjEubWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWEy NDI5OS4uMDAwMDAwMDAKLS0tIGEvbWVkaWEvanMvYm9vdHN0cmFwLTQuNC4xLm1pbi5qcworKysg L2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotLyohCi0gICogQm9vdHN0cmFwIHY0LjQuMSAoaHR0 cHM6Ly9nZXRib290c3RyYXAuY29tLykKLSAgKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFRoZSBCb290 c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9j b250cmlidXRvcnMpCi0gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20v dHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKLSAgKi8KLSFmdW5jdGlvbih0LGUp eyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/ZShl eHBvcnRzLHJlcXVpcmUoImpxdWVyeSIpLHJlcXVpcmUoInBvcHBlci5qcyIpKToiZnVuY3Rpb24i PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiLCJqcXVlcnkiLCJw b3BwZXIuanMiXSxlKTplKCh0PXR8fHNlbGYpLmJvb3RzdHJhcD17fSx0LmpRdWVyeSx0LlBvcHBl cil9KHRoaXMsZnVuY3Rpb24odCxnLHUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQsZSl7Zm9y KHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVy YWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxP YmplY3QuZGVmaW5lUHJvcGVydHkodCxpLmtleSxpKX19ZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJu IGUmJmkodC5wcm90b3R5cGUsZSksbiYmaSh0LG4pLHR9ZnVuY3Rpb24gZShlLHQpe3ZhciBuPU9i amVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVj dC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKGk9aS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0 dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpLG4u cHVzaC5hcHBseShuLGkpfXJldHVybiBufWZ1bmN0aW9uIGwobyl7Zm9yKHZhciB0PTE7dDxhcmd1 bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7 fTt0JTI/ZShPYmplY3QociksITApLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUsbixpO2U9byxp PXJbbj10XSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6aSxlbnVtZXJh YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09aX0pOk9iamVjdC5nZXRP d25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG8sT2JqZWN0Lmdl dE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOmUoT2JqZWN0KHIpKS5mb3JFYWNoKGZ1bmN0aW9u KHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp cHRvcihyLHQpKX0pfXJldHVybiBvfWc9ZyYmZy5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP2cu ZGVmYXVsdDpnLHU9dSYmdS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP3UuZGVmYXVsdDp1O3Zh ciBuPSJ0cmFuc2l0aW9uZW5kIjtmdW5jdGlvbiBvKHQpe3ZhciBlPXRoaXMsbj0hMTtyZXR1cm4g Zyh0aGlzKS5vbmUoXy5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe249ITB9KSxzZXRUaW1lb3V0 KGZ1bmN0aW9uKCl7bnx8Xy50cmlnZ2VyVHJhbnNpdGlvbkVuZChlKX0sdCksdGhpc312YXIgXz17 VFJBTlNJVElPTl9FTkQ6ImJzVHJhbnNpdGlvbkVuZCIsZ2V0VUlEOmZ1bmN0aW9uKHQpe2Zvcig7 dCs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpOyk7cmV0 dXJuIHR9LGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRBdHRy aWJ1dGUoImRhdGEtdGFyZ2V0Iik7aWYoIWV8fCIjIj09PWUpe3ZhciBuPXQuZ2V0QXR0cmlidXRl KCJocmVmIik7ZT1uJiYiIyIhPT1uP24udHJpbSgpOiIifXRyeXtyZXR1cm4gZG9jdW1lbnQucXVl cnlTZWxlY3RvcihlKT9lOm51bGx9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSxnZXRUcmFuc2l0aW9u RHVyYXRpb25Gcm9tRWxlbWVudDpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMDt2YXIgZT1nKHQp LmNzcygidHJhbnNpdGlvbi1kdXJhdGlvbiIpLG49Zyh0KS5jc3MoInRyYW5zaXRpb24tZGVsYXki KSxpPXBhcnNlRmxvYXQoZSksbz1wYXJzZUZsb2F0KG4pO3JldHVybiBpfHxvPyhlPWUuc3BsaXQo IiwiKVswXSxuPW4uc3BsaXQoIiwiKVswXSwxZTMqKHBhcnNlRmxvYXQoZSkrcGFyc2VGbG9hdChu KSkpOjB9LHJlZmxvdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZzZXRIZWlnaHR9LHRyaWdnZXJU cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe2codCkudHJpZ2dlcihuKX0sc3VwcG9ydHNUcmFuc2l0 aW9uRW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4obil9LGlzRWxlbWVudDpmdW5jdGlvbih0 KXtyZXR1cm4odFswXXx8dCkubm9kZVR5cGV9LHR5cGVDaGVja0NvbmZpZzpmdW5jdGlvbih0LGUs bil7Zm9yKHZhciBpIGluIG4paWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs KG4saSkpe3ZhciBvPW5baV0scj1lW2ldLHM9ciYmXy5pc0VsZW1lbnQocik/ImVsZW1lbnQiOihh PXIse30udG9TdHJpbmcuY2FsbChhKS5tYXRjaCgvXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2Fz ZSgpKTtpZighbmV3IFJlZ0V4cChvKS50ZXN0KHMpKXRocm93IG5ldyBFcnJvcih0LnRvVXBwZXJD YXNlKCkrJzogT3B0aW9uICInK2krJyIgcHJvdmlkZWQgdHlwZSAiJytzKyciIGJ1dCBleHBlY3Rl ZCB0eXBlICInK28rJyIuJyl9dmFyIGF9LGZpbmRTaGFkb3dSb290OmZ1bmN0aW9uKHQpe2lmKCFk b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KXJldHVybiBudWxsO2lmKCJmdW5j dGlvbiIhPXR5cGVvZiB0LmdldFJvb3ROb2RlKXJldHVybiB0IGluc3RhbmNlb2YgU2hhZG93Um9v dD90OnQucGFyZW50Tm9kZT9fLmZpbmRTaGFkb3dSb290KHQucGFyZW50Tm9kZSk6bnVsbDt2YXIg ZT10LmdldFJvb3ROb2RlKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBTaGFkb3dSb290P2U6bnVsbH0s alF1ZXJ5RGV0ZWN0aW9uOmZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBnKXRocm93 IG5ldyBUeXBlRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBq UXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdC4iKTt2 YXIgdD1nLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYodFswXTwyJiZ0WzFd PDl8fDE9PT10WzBdJiY5PT09dFsxXSYmdFsyXTwxfHw0PD10WzBdKXRocm93IG5ldyBFcnJvcigi Qm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBhdCBsZWFzdCBqUXVlcnkgdjEuOS4xIGJ1 dCBsZXNzIHRoYW4gdjQuMC4wIil9fTtfLmpRdWVyeURldGVjdGlvbigpLGcuZm4uZW11bGF0ZVRy YW5zaXRpb25FbmQ9byxnLmV2ZW50LnNwZWNpYWxbXy5UUkFOU0lUSU9OX0VORF09e2JpbmRUeXBl Om4sZGVsZWdhdGVUeXBlOm4saGFuZGxlOmZ1bmN0aW9uKHQpe2lmKGcodC50YXJnZXQpLmlzKHRo aXMpKXJldHVybiB0LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3Zh ciByPSJhbGVydCIsYT0iYnMuYWxlcnQiLGM9Ii4iK2EsaD1nLmZuW3JdLGY9e0NMT1NFOiJjbG9z ZSIrYyxDTE9TRUQ6ImNsb3NlZCIrYyxDTElDS19EQVRBX0FQSToiY2xpY2siK2MrIi5kYXRhLWFw aSJ9LGQ9ImFsZXJ0IixtPSJmYWRlIixwPSJzaG93Iix2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0 KXt0aGlzLl9lbGVtZW50PXR9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuY2xvc2U9ZnVuY3Rp b24odCl7dmFyIGU9dGhpcy5fZWxlbWVudDt0JiYoZT10aGlzLl9nZXRSb290RWxlbWVudCh0KSks dGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQoZSkuaXNEZWZhdWx0UHJldmVudGVkKCl8fHRoaXMuX3Jl bW92ZUVsZW1lbnQoZSl9LHQuZGlzcG9zZT1mdW5jdGlvbigpe2cucmVtb3ZlRGF0YSh0aGlzLl9l bGVtZW50LGEpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sdC5fZ2V0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24o dCl7dmFyIGU9Xy5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpLG49ITE7cmV0dXJuIGUmJihuPWRv Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSkpLG49bnx8Zyh0KS5jbG9zZXN0KCIuIitkKVswXX0sdC5f dHJpZ2dlckNsb3NlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9Zy5FdmVudChmLkNMT1NFKTtyZXR1 cm4gZyh0KS50cmlnZ2VyKGUpLGV9LHQuX3JlbW92ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIG49 dGhpcztpZihnKGUpLnJlbW92ZUNsYXNzKHApLGcoZSkuaGFzQ2xhc3MobSkpe3ZhciB0PV8uZ2V0 VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoZSk7ZyhlKS5vbmUoXy5UUkFOU0lUSU9OX0VO RCxmdW5jdGlvbih0KXtyZXR1cm4gbi5fZGVzdHJveUVsZW1lbnQoZSx0KX0pLmVtdWxhdGVUcmFu c2l0aW9uRW5kKHQpfWVsc2UgdGhpcy5fZGVzdHJveUVsZW1lbnQoZSl9LHQuX2Rlc3Ryb3lFbGVt ZW50PWZ1bmN0aW9uKHQpe2codCkuZGV0YWNoKCkudHJpZ2dlcihmLkNMT1NFRCkucmVtb3ZlKCl9 LGkuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u KCl7dmFyIHQ9Zyh0aGlzKSxlPXQuZGF0YShhKTtlfHwoZT1uZXcgaSh0aGlzKSx0LmRhdGEoYSxl KSksImNsb3NlIj09PW4mJmVbbl0odGhpcyl9KX0saS5faGFuZGxlRGlzbWlzcz1mdW5jdGlvbihl KXtyZXR1cm4gZnVuY3Rpb24odCl7dCYmdC5wcmV2ZW50RGVmYXVsdCgpLGUuY2xvc2UodGhpcyl9 fSxzKGksbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuNC4xIn19 XSksaX0oKTtnKGRvY3VtZW50KS5vbihmLkNMSUNLX0RBVEFfQVBJLCdbZGF0YS1kaXNtaXNzPSJh bGVydCJdJyx2Ll9oYW5kbGVEaXNtaXNzKG5ldyB2KSksZy5mbltyXT12Ll9qUXVlcnlJbnRlcmZh Y2UsZy5mbltyXS5Db25zdHJ1Y3Rvcj12LGcuZm5bcl0ubm9Db25mbGljdD1mdW5jdGlvbigpe3Jl dHVybiBnLmZuW3JdPWgsdi5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgeT0iYnV0dG9uIixFPSJicy5i dXR0b24iLEM9Ii4iK0UsVD0iLmRhdGEtYXBpIixiPWcuZm5beV0sUz0iYWN0aXZlIixEPSJidG4i LEk9ImZvY3VzIix3PSdbZGF0YS10b2dnbGVePSJidXR0b24iXScsQT0nW2RhdGEtdG9nZ2xlPSJi dXR0b25zIl0nLE49J1tkYXRhLXRvZ2dsZT0iYnV0dG9uIl0nLE89J1tkYXRhLXRvZ2dsZT0iYnV0 dG9ucyJdIC5idG4nLGs9J2lucHV0Om5vdChbdHlwZT0iaGlkZGVuIl0pJyxQPSIuYWN0aXZlIixM PSIuYnRuIixqPXtDTElDS19EQVRBX0FQSToiY2xpY2siK0MrVCxGT0NVU19CTFVSX0RBVEFfQVBJ OiJmb2N1cyIrQytUKyIgYmx1ciIrQytULExPQURfREFUQV9BUEk6ImxvYWQiK0MrVH0sSD1mdW5j dGlvbigpe2Z1bmN0aW9uIG4odCl7dGhpcy5fZWxlbWVudD10fXZhciB0PW4ucHJvdG90eXBlO3Jl dHVybiB0LnRvZ2dsZT1mdW5jdGlvbigpe3ZhciB0PSEwLGU9ITAsbj1nKHRoaXMuX2VsZW1lbnQp LmNsb3Nlc3QoQSlbMF07aWYobil7dmFyIGk9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKGsp O2lmKGkpe2lmKCJyYWRpbyI9PT1pLnR5cGUpaWYoaS5jaGVja2VkJiZ0aGlzLl9lbGVtZW50LmNs YXNzTGlzdC5jb250YWlucyhTKSl0PSExO2Vsc2V7dmFyIG89bi5xdWVyeVNlbGVjdG9yKFApO28m JmcobykucmVtb3ZlQ2xhc3MoUyl9ZWxzZSJjaGVja2JveCI9PT1pLnR5cGU/IkxBQkVMIj09PXRo aXMuX2VsZW1lbnQudGFnTmFtZSYmaS5jaGVja2VkPT09dGhpcy5fZWxlbWVudC5jbGFzc0xpc3Qu Y29udGFpbnMoUykmJih0PSExKTp0PSExO3QmJihpLmNoZWNrZWQ9IXRoaXMuX2VsZW1lbnQuY2xh c3NMaXN0LmNvbnRhaW5zKFMpLGcoaSkudHJpZ2dlcigiY2hhbmdlIikpLGkuZm9jdXMoKSxlPSEx fX10aGlzLl9lbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKXx8dGhpcy5fZWxlbWVudC5j bGFzc0xpc3QuY29udGFpbnMoImRpc2FibGVkIil8fChlJiZ0aGlzLl9lbGVtZW50LnNldEF0dHJp YnV0ZSgiYXJpYS1wcmVzc2VkIiwhdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoUykp LHQmJmcodGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoUykpfSx0LmRpc3Bvc2U9ZnVuY3Rpb24o KXtnLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxFKSx0aGlzLl9lbGVtZW50PW51bGx9LG4uX2pR dWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFy IHQ9Zyh0aGlzKS5kYXRhKEUpO3R8fCh0PW5ldyBuKHRoaXMpLGcodGhpcykuZGF0YShFLHQpKSwi dG9nZ2xlIj09PWUmJnRbZV0oKX0pfSxzKG4sbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0 aW9uKCl7cmV0dXJuIjQuNC4xIn19XSksbn0oKTtnKGRvY3VtZW50KS5vbihqLkNMSUNLX0RBVEFf QVBJLHcsZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7aWYoZyhlKS5oYXNDbGFzcyhEKXx8KGU9 ZyhlKS5jbG9zZXN0KEwpWzBdKSwhZXx8ZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fGUuY2xh c3NMaXN0LmNvbnRhaW5zKCJkaXNhYmxlZCIpKXQucHJldmVudERlZmF1bHQoKTtlbHNle3ZhciBu PWUucXVlcnlTZWxlY3RvcihrKTtpZihuJiYobi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fG4u Y2xhc3NMaXN0LmNvbnRhaW5zKCJkaXNhYmxlZCIpKSlyZXR1cm4gdm9pZCB0LnByZXZlbnREZWZh dWx0KCk7SC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoZyhlKSwidG9nZ2xlIil9fSkub24oai5GT0NV U19CTFVSX0RBVEFfQVBJLHcsZnVuY3Rpb24odCl7dmFyIGU9Zyh0LnRhcmdldCkuY2xvc2VzdChM KVswXTtnKGUpLnRvZ2dsZUNsYXNzKEksL15mb2N1cyhpbik/JC8udGVzdCh0LnR5cGUpKX0pLGco d2luZG93KS5vbihqLkxPQURfREFUQV9BUEksZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10uc2xpY2Uu Y2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKE8pKSxlPTAsbj10Lmxlbmd0aDtlPG47ZSsr KXt2YXIgaT10W2VdLG89aS5xdWVyeVNlbGVjdG9yKGspO28uY2hlY2tlZHx8by5oYXNBdHRyaWJ1 dGUoImNoZWNrZWQiKT9pLmNsYXNzTGlzdC5hZGQoUyk6aS5jbGFzc0xpc3QucmVtb3ZlKFMpfWZv cih2YXIgcj0wLHM9KHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKE4p KSkubGVuZ3RoO3I8cztyKyspe3ZhciBhPXRbcl07InRydWUiPT09YS5nZXRBdHRyaWJ1dGUoImFy aWEtcHJlc3NlZCIpP2EuY2xhc3NMaXN0LmFkZChTKTphLmNsYXNzTGlzdC5yZW1vdmUoUyl9fSks Zy5mblt5XT1ILl9qUXVlcnlJbnRlcmZhY2UsZy5mblt5XS5Db25zdHJ1Y3Rvcj1ILGcuZm5beV0u bm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBnLmZuW3ldPWIsSC5falF1ZXJ5SW50ZXJmYWNl fTt2YXIgUj0iY2Fyb3VzZWwiLHg9ImJzLmNhcm91c2VsIixGPSIuIit4LFU9Ii5kYXRhLWFwaSIs Vz1nLmZuW1JdLHE9e2ludGVydmFsOjVlMyxrZXlib2FyZDohMCxzbGlkZTohMSxwYXVzZToiaG92 ZXIiLHdyYXA6ITAsdG91Y2g6ITB9LE09e2ludGVydmFsOiIobnVtYmVyfGJvb2xlYW4pIixrZXli b2FyZDoiYm9vbGVhbiIsc2xpZGU6Iihib29sZWFufHN0cmluZykiLHBhdXNlOiIoc3RyaW5nfGJv b2xlYW4pIix3cmFwOiJib29sZWFuIix0b3VjaDoiYm9vbGVhbiJ9LEs9Im5leHQiLFE9InByZXYi LEI9ImxlZnQiLFY9InJpZ2h0IixZPXtTTElERToic2xpZGUiK0YsU0xJRDoic2xpZCIrRixLRVlE T1dOOiJrZXlkb3duIitGLE1PVVNFRU5URVI6Im1vdXNlZW50ZXIiK0YsTU9VU0VMRUFWRToibW91 c2VsZWF2ZSIrRixUT1VDSFNUQVJUOiJ0b3VjaHN0YXJ0IitGLFRPVUNITU9WRToidG91Y2htb3Zl IitGLFRPVUNIRU5EOiJ0b3VjaGVuZCIrRixQT0lOVEVSRE9XTjoicG9pbnRlcmRvd24iK0YsUE9J TlRFUlVQOiJwb2ludGVydXAiK0YsRFJBR19TVEFSVDoiZHJhZ3N0YXJ0IitGLExPQURfREFUQV9B UEk6ImxvYWQiK0YrVSxDTElDS19EQVRBX0FQSToiY2xpY2siK0YrVX0sej0iY2Fyb3VzZWwiLFg9 ImFjdGl2ZSIsJD0ic2xpZGUiLEc9ImNhcm91c2VsLWl0ZW0tcmlnaHQiLEo9ImNhcm91c2VsLWl0 ZW0tbGVmdCIsWj0iY2Fyb3VzZWwtaXRlbS1uZXh0Iix0dD0iY2Fyb3VzZWwtaXRlbS1wcmV2Iixl dD0icG9pbnRlci1ldmVudCIsbnQ9Ii5hY3RpdmUiLGl0PSIuYWN0aXZlLmNhcm91c2VsLWl0ZW0i LG90PSIuY2Fyb3VzZWwtaXRlbSIscnQ9Ii5jYXJvdXNlbC1pdGVtIGltZyIsc3Q9Ii5jYXJvdXNl bC1pdGVtLW5leHQsIC5jYXJvdXNlbC1pdGVtLXByZXYiLGF0PSIuY2Fyb3VzZWwtaW5kaWNhdG9y cyIsbHQ9IltkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dIixjdD0nW2RhdGEtcmlkZT0iY2Fy b3VzZWwiXScsaHQ9e1RPVUNIOiJ0b3VjaCIsUEVOOiJwZW4ifSx1dD1mdW5jdGlvbigpe2Z1bmN0 aW9uIHIodCxlKXt0aGlzLl9pdGVtcz1udWxsLHRoaXMuX2ludGVydmFsPW51bGwsdGhpcy5fYWN0 aXZlRWxlbWVudD1udWxsLHRoaXMuX2lzUGF1c2VkPSExLHRoaXMuX2lzU2xpZGluZz0hMSx0aGlz LnRvdWNoVGltZW91dD1udWxsLHRoaXMudG91Y2hTdGFydFg9MCx0aGlzLnRvdWNoRGVsdGFYPTAs dGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5faW5k aWNhdG9yc0VsZW1lbnQ9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKGF0KSx0aGlzLl90b3Vj aFN1cHBvcnRlZD0ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8MDxu YXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsdGhpcy5fcG9pbnRlckV2ZW50PUJvb2xlYW4od2luZG93 LlBvaW50ZXJFdmVudHx8d2luZG93Lk1TUG9pbnRlckV2ZW50KSx0aGlzLl9hZGRFdmVudExpc3Rl bmVycygpfXZhciB0PXIucHJvdG90eXBlO3JldHVybiB0Lm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9p c1NsaWRpbmd8fHRoaXMuX3NsaWRlKEspfSx0Lm5leHRXaGVuVmlzaWJsZT1mdW5jdGlvbigpeyFk b2N1bWVudC5oaWRkZW4mJmcodGhpcy5fZWxlbWVudCkuaXMoIjp2aXNpYmxlIikmJiJoaWRkZW4i IT09Zyh0aGlzLl9lbGVtZW50KS5jc3MoInZpc2liaWxpdHkiKSYmdGhpcy5uZXh0KCl9LHQucHJl dj1mdW5jdGlvbigpe3RoaXMuX2lzU2xpZGluZ3x8dGhpcy5fc2xpZGUoUSl9LHQucGF1c2U9ZnVu Y3Rpb24odCl7dHx8KHRoaXMuX2lzUGF1c2VkPSEwKSx0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0 b3Ioc3QpJiYoXy50cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KSx0aGlzLmN5Y2xl KCEwKSksY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbH0s dC5jeWNsZT1mdW5jdGlvbih0KXt0fHwodGhpcy5faXNQYXVzZWQ9ITEpLHRoaXMuX2ludGVydmFs JiYoY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbCksdGhp cy5fY29uZmlnLmludGVydmFsJiYhdGhpcy5faXNQYXVzZWQmJih0aGlzLl9pbnRlcnZhbD1zZXRJ bnRlcnZhbCgoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlP3RoaXMubmV4dFdoZW5WaXNpYmxlOnRo aXMubmV4dCkuYmluZCh0aGlzKSx0aGlzLl9jb25maWcuaW50ZXJ2YWwpKX0sdC50bz1mdW5jdGlv bih0KXt2YXIgZT10aGlzO3RoaXMuX2FjdGl2ZUVsZW1lbnQ9dGhpcy5fZWxlbWVudC5xdWVyeVNl bGVjdG9yKGl0KTt2YXIgbj10aGlzLl9nZXRJdGVtSW5kZXgodGhpcy5fYWN0aXZlRWxlbWVudCk7 aWYoISh0PnRoaXMuX2l0ZW1zLmxlbmd0aC0xfHx0PDApKWlmKHRoaXMuX2lzU2xpZGluZylnKHRo aXMuX2VsZW1lbnQpLm9uZShZLlNMSUQsZnVuY3Rpb24oKXtyZXR1cm4gZS50byh0KX0pO2Vsc2V7 aWYobj09PXQpcmV0dXJuIHRoaXMucGF1c2UoKSx2b2lkIHRoaXMuY3ljbGUoKTt2YXIgaT1uPHQ/ SzpRO3RoaXMuX3NsaWRlKGksdGhpcy5faXRlbXNbdF0pfX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7 Zyh0aGlzLl9lbGVtZW50KS5vZmYoRiksZy5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQseCksdGhp cy5faXRlbXM9bnVsbCx0aGlzLl9jb25maWc9bnVsbCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5f aW50ZXJ2YWw9bnVsbCx0aGlzLl9pc1BhdXNlZD1udWxsLHRoaXMuX2lzU2xpZGluZz1udWxsLHRo aXMuX2FjdGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9pbmRpY2F0b3JzRWxlbWVudD1udWxsfSx0Ll9n ZXRDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bCh7fSxxLHt9LHQpLF8udHlwZUNoZWNrQ29u ZmlnKFIsdCxNKSx0fSx0Ll9oYW5kbGVTd2lwZT1mdW5jdGlvbigpe3ZhciB0PU1hdGguYWJzKHRo aXMudG91Y2hEZWx0YVgpO2lmKCEodDw9NDApKXt2YXIgZT10L3RoaXMudG91Y2hEZWx0YVg7KHRo aXMudG91Y2hEZWx0YVg9MCk8ZSYmdGhpcy5wcmV2KCksZTwwJiZ0aGlzLm5leHQoKX19LHQuX2Fk ZEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9jb25maWcua2V5Ym9h cmQmJmcodGhpcy5fZWxlbWVudCkub24oWS5LRVlET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9r ZXlkb3duKHQpfSksImhvdmVyIj09PXRoaXMuX2NvbmZpZy5wYXVzZSYmZyh0aGlzLl9lbGVtZW50 KS5vbihZLk1PVVNFRU5URVIsZnVuY3Rpb24odCl7cmV0dXJuIGUucGF1c2UodCl9KS5vbihZLk1P VVNFTEVBVkUsZnVuY3Rpb24odCl7cmV0dXJuIGUuY3ljbGUodCl9KSx0aGlzLl9jb25maWcudG91 Y2gmJnRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKX0sdC5fYWRkVG91Y2hFdmVudExpc3Rl bmVycz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fdG91Y2hTdXBwb3J0ZWQpe3ZhciBu PWZ1bmN0aW9uKHQpe2UuX3BvaW50ZXJFdmVudCYmaHRbdC5vcmlnaW5hbEV2ZW50LnBvaW50ZXJU eXBlLnRvVXBwZXJDYXNlKCldP2UudG91Y2hTdGFydFg9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFg6 ZS5fcG9pbnRlckV2ZW50fHwoZS50b3VjaFN0YXJ0WD10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1sw XS5jbGllbnRYKX0saT1mdW5jdGlvbih0KXtlLl9wb2ludGVyRXZlbnQmJmh0W3Qub3JpZ2luYWxF dmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSYmKGUudG91Y2hEZWx0YVg9dC5vcmlnaW5h bEV2ZW50LmNsaWVudFgtZS50b3VjaFN0YXJ0WCksZS5faGFuZGxlU3dpcGUoKSwiaG92ZXIiPT09 ZS5fY29uZmlnLnBhdXNlJiYoZS5wYXVzZSgpLGUudG91Y2hUaW1lb3V0JiZjbGVhclRpbWVvdXQo ZS50b3VjaFRpbWVvdXQpLGUudG91Y2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24odCl7cmV0 dXJuIGUuY3ljbGUodCl9LDUwMCtlLl9jb25maWcuaW50ZXJ2YWwpKX07Zyh0aGlzLl9lbGVtZW50 LnF1ZXJ5U2VsZWN0b3JBbGwocnQpKS5vbihZLkRSQUdfU1RBUlQsZnVuY3Rpb24odCl7cmV0dXJu IHQucHJldmVudERlZmF1bHQoKX0pLHRoaXMuX3BvaW50ZXJFdmVudD8oZyh0aGlzLl9lbGVtZW50 KS5vbihZLlBPSU5URVJET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSksZyh0aGlzLl9lbGVt ZW50KS5vbihZLlBPSU5URVJVUCxmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pLHRoaXMuX2VsZW1l bnQuY2xhc3NMaXN0LmFkZChldCkpOihnKHRoaXMuX2VsZW1lbnQpLm9uKFkuVE9VQ0hTVEFSVCxm dW5jdGlvbih0KXtyZXR1cm4gbih0KX0pLGcodGhpcy5fZWxlbWVudCkub24oWS5UT1VDSE1PVkUs ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3Qub3JpZ2luYWxFdmVudC50b3VjaGVzJiYx PHQub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aD9lLnRvdWNoRGVsdGFYPTA6ZS50b3VjaERl bHRhWD10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRYLWUudG91Y2hTdGFydFh9KHQp fSksZyh0aGlzLl9lbGVtZW50KS5vbihZLlRPVUNIRU5ELGZ1bmN0aW9uKHQpe3JldHVybiBpKHQp fSkpfX0sdC5fa2V5ZG93bj1mdW5jdGlvbih0KXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdCh0 LnRhcmdldC50YWdOYW1lKSlzd2l0Y2godC53aGljaCl7Y2FzZSAzNzp0LnByZXZlbnREZWZhdWx0 KCksdGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5uZXh0 KCl9fSx0Ll9nZXRJdGVtSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2l0ZW1zPXQmJnQu cGFyZW50Tm9kZT9bXS5zbGljZS5jYWxsKHQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKG90 KSk6W10sdGhpcy5faXRlbXMuaW5kZXhPZih0KX0sdC5fZ2V0SXRlbUJ5RGlyZWN0aW9uPWZ1bmN0 aW9uKHQsZSl7dmFyIG49dD09PUssaT10PT09USxvPXRoaXMuX2dldEl0ZW1JbmRleChlKSxyPXRo aXMuX2l0ZW1zLmxlbmd0aC0xO2lmKChpJiYwPT09b3x8biYmbz09PXIpJiYhdGhpcy5fY29uZmln LndyYXApcmV0dXJuIGU7dmFyIHM9KG8rKHQ9PT1RPy0xOjEpKSV0aGlzLl9pdGVtcy5sZW5ndGg7 cmV0dXJuLTE9PXM/dGhpcy5faXRlbXNbdGhpcy5faXRlbXMubGVuZ3RoLTFdOnRoaXMuX2l0ZW1z W3NdfSx0Ll90cmlnZ2VyU2xpZGVFdmVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2dldEl0 ZW1JbmRleCh0KSxpPXRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0 b3IoaXQpKSxvPWcuRXZlbnQoWS5TTElERSx7cmVsYXRlZFRhcmdldDp0LGRpcmVjdGlvbjplLGZy b206aSx0bzpufSk7cmV0dXJuIGcodGhpcy5fZWxlbWVudCkudHJpZ2dlcihvKSxvfSx0Ll9zZXRB Y3RpdmVJbmRpY2F0b3JFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2luZGljYXRvcnNFbGVt ZW50KXt2YXIgZT1bXS5zbGljZS5jYWxsKHRoaXMuX2luZGljYXRvcnNFbGVtZW50LnF1ZXJ5U2Vs ZWN0b3JBbGwobnQpKTtnKGUpLnJlbW92ZUNsYXNzKFgpO3ZhciBuPXRoaXMuX2luZGljYXRvcnNF bGVtZW50LmNoaWxkcmVuW3RoaXMuX2dldEl0ZW1JbmRleCh0KV07biYmZyhuKS5hZGRDbGFzcyhY KX19LHQuX3NsaWRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvLHI9dGhpcyxzPXRoaXMuX2VsZW1l bnQucXVlcnlTZWxlY3RvcihpdCksYT10aGlzLl9nZXRJdGVtSW5kZXgocyksbD1lfHxzJiZ0aGlz Ll9nZXRJdGVtQnlEaXJlY3Rpb24odCxzKSxjPXRoaXMuX2dldEl0ZW1JbmRleChsKSxoPUJvb2xl YW4odGhpcy5faW50ZXJ2YWwpO2lmKG89dD09PUs/KG49SixpPVosQik6KG49RyxpPXR0LFYpLGwm JmcobCkuaGFzQ2xhc3MoWCkpdGhpcy5faXNTbGlkaW5nPSExO2Vsc2UgaWYoIXRoaXMuX3RyaWdn ZXJTbGlkZUV2ZW50KGwsbykuaXNEZWZhdWx0UHJldmVudGVkKCkmJnMmJmwpe3RoaXMuX2lzU2xp ZGluZz0hMCxoJiZ0aGlzLnBhdXNlKCksdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChs KTt2YXIgdT1nLkV2ZW50KFkuU0xJRCx7cmVsYXRlZFRhcmdldDpsLGRpcmVjdGlvbjpvLGZyb206 YSx0bzpjfSk7aWYoZyh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcygkKSl7ZyhsKS5hZGRDbGFzcyhp KSxfLnJlZmxvdyhsKSxnKHMpLmFkZENsYXNzKG4pLGcobCkuYWRkQ2xhc3Mobik7dmFyIGY9cGFy c2VJbnQobC5nZXRBdHRyaWJ1dGUoImRhdGEtaW50ZXJ2YWwiKSwxMCk7Zj8odGhpcy5fY29uZmln LmRlZmF1bHRJbnRlcnZhbD10aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsfHx0aGlzLl9jb25m aWcuaW50ZXJ2YWwsdGhpcy5fY29uZmlnLmludGVydmFsPWYpOnRoaXMuX2NvbmZpZy5pbnRlcnZh bD10aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsfHx0aGlzLl9jb25maWcuaW50ZXJ2YWw7dmFy IGQ9Xy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChzKTtnKHMpLm9uZShfLlRSQU5T SVRJT05fRU5ELGZ1bmN0aW9uKCl7ZyhsKS5yZW1vdmVDbGFzcyhuKyIgIitpKS5hZGRDbGFzcyhY KSxnKHMpLnJlbW92ZUNsYXNzKFgrIiAiK2krIiAiK24pLHIuX2lzU2xpZGluZz0hMSxzZXRUaW1l b3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGcoci5fZWxlbWVudCkudHJpZ2dlcih1KX0sMCl9KS5lbXVs YXRlVHJhbnNpdGlvbkVuZChkKX1lbHNlIGcocykucmVtb3ZlQ2xhc3MoWCksZyhsKS5hZGRDbGFz cyhYKSx0aGlzLl9pc1NsaWRpbmc9ITEsZyh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHUpO2gmJnRo aXMuY3ljbGUoKX19LHIuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5l YWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Zyh0aGlzKS5kYXRhKHgpLGU9bCh7fSxxLHt9LGcodGhpcyku ZGF0YSgpKTsib2JqZWN0Ij09dHlwZW9mIGkmJihlPWwoe30sZSx7fSxpKSk7dmFyIG49InN0cmlu ZyI9PXR5cGVvZiBpP2k6ZS5zbGlkZTtpZih0fHwodD1uZXcgcih0aGlzLGUpLGcodGhpcykuZGF0 YSh4LHQpKSwibnVtYmVyIj09dHlwZW9mIGkpdC50byhpKTtlbHNlIGlmKCJzdHJpbmciPT10eXBl b2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05v IG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXSgpfWVsc2UgZS5pbnRlcnZhbCYmZS5yaWRlJiYo dC5wYXVzZSgpLHQuY3ljbGUoKSl9KX0sci5fZGF0YUFwaUNsaWNrSGFuZGxlcj1mdW5jdGlvbih0 KXt2YXIgZT1fLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7aWYoZSl7dmFyIG49ZyhlKVsw XTtpZihuJiZnKG4pLmhhc0NsYXNzKHopKXt2YXIgaT1sKHt9LGcobikuZGF0YSgpLHt9LGcodGhp cykuZGF0YSgpKSxvPXRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXNsaWRlLXRvIik7byYmKGkuaW50 ZXJ2YWw9ITEpLHIuX2pRdWVyeUludGVyZmFjZS5jYWxsKGcobiksaSksbyYmZyhuKS5kYXRhKHgp LnRvKG8pLHQucHJldmVudERlZmF1bHQoKX19fSxzKHIsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0 OmZ1bmN0aW9uKCl7cmV0dXJuIjQuNC4xIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigp e3JldHVybiBxfX1dKSxyfSgpO2coZG9jdW1lbnQpLm9uKFkuQ0xJQ0tfREFUQV9BUEksbHQsdXQu X2RhdGFBcGlDbGlja0hhbmRsZXIpLGcod2luZG93KS5vbihZLkxPQURfREFUQV9BUEksZnVuY3Rp b24oKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGN0 KSksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7dmFyIGk9Zyh0W2VdKTt1dC5falF1ZXJ5SW50ZXJm YWNlLmNhbGwoaSxpLmRhdGEoKSl9fSksZy5mbltSXT11dC5falF1ZXJ5SW50ZXJmYWNlLGcuZm5b Ul0uQ29uc3RydWN0b3I9dXQsZy5mbltSXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGcu Zm5bUl09Vyx1dC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgZnQ9ImNvbGxhcHNlIixkdD0iYnMuY29s bGFwc2UiLGd0PSIuIitkdCxfdD1nLmZuW2Z0XSxtdD17dG9nZ2xlOiEwLHBhcmVudDoiIn0scHQ9 e3RvZ2dsZToiYm9vbGVhbiIscGFyZW50OiIoc3RyaW5nfGVsZW1lbnQpIn0sdnQ9e1NIT1c6InNo b3ciK2d0LFNIT1dOOiJzaG93biIrZ3QsSElERToiaGlkZSIrZ3QsSElEREVOOiJoaWRkZW4iK2d0 LENMSUNLX0RBVEFfQVBJOiJjbGljayIrZ3QrIi5kYXRhLWFwaSJ9LHl0PSJzaG93IixFdD0iY29s bGFwc2UiLEN0PSJjb2xsYXBzaW5nIixUdD0iY29sbGFwc2VkIixidD0id2lkdGgiLFN0PSJoZWln aHQiLER0PSIuc2hvdywgLmNvbGxhcHNpbmciLEl0PSdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl0n LHd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlLHQpe3RoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0 aGlzLl9lbGVtZW50PWUsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyh0KSx0aGlzLl90cmln Z2VyQXJyYXk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10 b2dnbGU9ImNvbGxhcHNlIl1baHJlZj0iIycrZS5pZCsnIl0sW2RhdGEtdG9nZ2xlPSJjb2xsYXBz ZSJdW2RhdGEtdGFyZ2V0PSIjJytlLmlkKyciXScpKTtmb3IodmFyIG49W10uc2xpY2UuY2FsbChk b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKEl0KSksaT0wLG89bi5sZW5ndGg7aTxvO2krKyl7dmFy IHI9bltpXSxzPV8uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChyKSxhPVtdLnNsaWNlLmNhbGwoZG9j dW1lbnQucXVlcnlTZWxlY3RvckFsbChzKSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09 ZX0pO251bGwhPT1zJiYwPGEubGVuZ3RoJiYodGhpcy5fc2VsZWN0b3I9cyx0aGlzLl90cmlnZ2Vy QXJyYXkucHVzaChyKSl9dGhpcy5fcGFyZW50PXRoaXMuX2NvbmZpZy5wYXJlbnQ/dGhpcy5fZ2V0 UGFyZW50KCk6bnVsbCx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFw c2VkQ2xhc3ModGhpcy5fZWxlbWVudCx0aGlzLl90cmlnZ2VyQXJyYXkpLHRoaXMuX2NvbmZpZy50 b2dnbGUmJnRoaXMudG9nZ2xlKCl9dmFyIHQ9YS5wcm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlPWZ1 bmN0aW9uKCl7Zyh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyh5dCk/dGhpcy5oaWRlKCk6dGhpcy5z aG93KCl9LHQuc2hvdz1mdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzO2lmKCF0aGlzLl9pc1RyYW5z aXRpb25pbmcmJiFnKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKHl0KSYmKHRoaXMuX3BhcmVudCYm MD09PSh0PVtdLnNsaWNlLmNhbGwodGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoRHQpKS5m aWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuLl9jb25maWcucGFyZW50 P3QuZ2V0QXR0cmlidXRlKCJkYXRhLXBhcmVudCIpPT09bi5fY29uZmlnLnBhcmVudDp0LmNsYXNz TGlzdC5jb250YWlucyhFdCl9KSkubGVuZ3RoJiYodD1udWxsKSwhKHQmJihlPWcodCkubm90KHRo aXMuX3NlbGVjdG9yKS5kYXRhKGR0KSkmJmUuX2lzVHJhbnNpdGlvbmluZykpKXt2YXIgaT1nLkV2 ZW50KHZ0LlNIT1cpO2lmKGcodGhpcy5fZWxlbWVudCkudHJpZ2dlcihpKSwhaS5pc0RlZmF1bHRQ cmV2ZW50ZWQoKSl7dCYmKGEuX2pRdWVyeUludGVyZmFjZS5jYWxsKGcodCkubm90KHRoaXMuX3Nl bGVjdG9yKSwiaGlkZSIpLGV8fGcodCkuZGF0YShkdCxudWxsKSk7dmFyIG89dGhpcy5fZ2V0RGlt ZW5zaW9uKCk7Zyh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhFdCkuYWRkQ2xhc3MoQ3QpLHRo aXMuX2VsZW1lbnQuc3R5bGVbb109MCx0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoJiZnKHRoaXMu X3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3MoVHQpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKSx0 aGlzLnNldFRyYW5zaXRpb25pbmcoITApO3ZhciByPSJzY3JvbGwiKyhvWzBdLnRvVXBwZXJDYXNl KCkrby5zbGljZSgxKSkscz1fLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMu X2VsZW1lbnQpO2codGhpcy5fZWxlbWVudCkub25lKF8uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24o KXtnKG4uX2VsZW1lbnQpLnJlbW92ZUNsYXNzKEN0KS5hZGRDbGFzcyhFdCkuYWRkQ2xhc3MoeXQp LG4uX2VsZW1lbnQuc3R5bGVbb109IiIsbi5zZXRUcmFuc2l0aW9uaW5nKCExKSxnKG4uX2VsZW1l bnQpLnRyaWdnZXIodnQuU0hPV04pfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQocyksdGhpcy5fZWxl bWVudC5zdHlsZVtvXT10aGlzLl9lbGVtZW50W3JdKyJweCJ9fX0sdC5oaWRlPWZ1bmN0aW9uKCl7 dmFyIHQ9dGhpcztpZighdGhpcy5faXNUcmFuc2l0aW9uaW5nJiZnKHRoaXMuX2VsZW1lbnQpLmhh c0NsYXNzKHl0KSl7dmFyIGU9Zy5FdmVudCh2dC5ISURFKTtpZihnKHRoaXMuX2VsZW1lbnQpLnRy aWdnZXIoZSksIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBuPXRoaXMuX2dldERpbWVuc2lv bigpO3RoaXMuX2VsZW1lbnQuc3R5bGVbbl09dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVu dFJlY3QoKVtuXSsicHgiLF8ucmVmbG93KHRoaXMuX2VsZW1lbnQpLGcodGhpcy5fZWxlbWVudCku YWRkQ2xhc3MoQ3QpLnJlbW92ZUNsYXNzKEV0KS5yZW1vdmVDbGFzcyh5dCk7dmFyIGk9dGhpcy5f dHJpZ2dlckFycmF5Lmxlbmd0aDtpZigwPGkpZm9yKHZhciBvPTA7bzxpO28rKyl7dmFyIHI9dGhp cy5fdHJpZ2dlckFycmF5W29dLHM9Xy5nZXRTZWxlY3RvckZyb21FbGVtZW50KHIpO2lmKG51bGwh PT1zKWcoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHMpKSkuaGFzQ2xh c3MoeXQpfHxnKHIpLmFkZENsYXNzKFR0KS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSl9dGhpcy5z ZXRUcmFuc2l0aW9uaW5nKCEwKTt0aGlzLl9lbGVtZW50LnN0eWxlW25dPSIiO3ZhciBhPV8uZ2V0 VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7Zyh0aGlzLl9lbGVt ZW50KS5vbmUoXy5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe3Quc2V0VHJhbnNpdGlvbmluZygh MSksZyh0Ll9lbGVtZW50KS5yZW1vdmVDbGFzcyhDdCkuYWRkQ2xhc3MoRXQpLnRyaWdnZXIodnQu SElEREVOKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGEpfX19LHQuc2V0VHJhbnNpdGlvbmluZz1m dW5jdGlvbih0KXt0aGlzLl9pc1RyYW5zaXRpb25pbmc9dH0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7 Zy5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsZHQpLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX3Bh cmVudD1udWxsLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl90cmlnZ2VyQXJyYXk9bnVsbCx0aGlz Ll9pc1RyYW5zaXRpb25pbmc9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybih0 PWwoe30sbXQse30sdCkpLnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSxfLnR5cGVDaGVja0NvbmZp ZyhmdCx0LHB0KSx0fSx0Ll9nZXREaW1lbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl9l bGVtZW50KS5oYXNDbGFzcyhidCk/YnQ6U3R9LHQuX2dldFBhcmVudD1mdW5jdGlvbigpe3ZhciB0 LG49dGhpcztfLmlzRWxlbWVudCh0aGlzLl9jb25maWcucGFyZW50KT8odD10aGlzLl9jb25maWcu cGFyZW50LCJ1bmRlZmluZWQiIT10eXBlb2YgdGhpcy5fY29uZmlnLnBhcmVudC5qcXVlcnkmJih0 PXRoaXMuX2NvbmZpZy5wYXJlbnRbMF0pKTp0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5f Y29uZmlnLnBhcmVudCk7dmFyIGU9J1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXBhcmVu dD0iJyt0aGlzLl9jb25maWcucGFyZW50KyciXScsaT1bXS5zbGljZS5jYWxsKHQucXVlcnlTZWxl Y3RvckFsbChlKSk7cmV0dXJuIGcoaSkuZWFjaChmdW5jdGlvbih0LGUpe24uX2FkZEFyaWFBbmRD b2xsYXBzZWRDbGFzcyhhLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlKSxbZV0pfSksdH0sdC5fYWRk QXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49Zyh0KS5oYXNDbGFzcyh5 dCk7ZS5sZW5ndGgmJmcoZSkudG9nZ2xlQ2xhc3MoVHQsIW4pLmF0dHIoImFyaWEtZXhwYW5kZWQi LG4pfSxhLl9nZXRUYXJnZXRGcm9tRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1fLmdldFNlbGVj dG9yRnJvbUVsZW1lbnQodCk7cmV0dXJuIGU/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTpudWxs fSxhLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv bigpe3ZhciB0PWcodGhpcyksZT10LmRhdGEoZHQpLG49bCh7fSxtdCx7fSx0LmRhdGEoKSx7fSwi b2JqZWN0Ij09dHlwZW9mIGkmJmk/aTp7fSk7aWYoIWUmJm4udG9nZ2xlJiYvc2hvd3xoaWRlLy50 ZXN0KGkpJiYobi50b2dnbGU9ITEpLGV8fChlPW5ldyBhKHRoaXMsbiksdC5kYXRhKGR0LGUpKSwi c3RyaW5nIj09dHlwZW9mIGkpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgZVtpXSl0aHJvdyBuZXcg VHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicraSsnIicpO2VbaV0oKX19KX0scyhhLG51bGws W3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjQuMSJ9fSx7a2V5OiJEZWZh dWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbXR9fV0pLGF9KCk7Zyhkb2N1bWVudCkub24odnQu Q0xJQ0tfREFUQV9BUEksSXQsZnVuY3Rpb24odCl7IkEiPT09dC5jdXJyZW50VGFyZ2V0LnRhZ05h bWUmJnQucHJldmVudERlZmF1bHQoKTt2YXIgbj1nKHRoaXMpLGU9Xy5nZXRTZWxlY3RvckZyb21F bGVtZW50KHRoaXMpLGk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUp KTtnKGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1nKHRoaXMpLGU9dC5kYXRhKGR0KT8idG9nZ2xl IjpuLmRhdGEoKTt3dC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodCxlKX0pfSksZy5mbltmdF09d3Qu X2pRdWVyeUludGVyZmFjZSxnLmZuW2Z0XS5Db25zdHJ1Y3Rvcj13dCxnLmZuW2Z0XS5ub0NvbmZs aWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGcuZm5bZnRdPV90LHd0Ll9qUXVlcnlJbnRlcmZhY2V9O3Zh ciBBdD0iZHJvcGRvd24iLE50PSJicy5kcm9wZG93biIsT3Q9Ii4iK050LGt0PSIuZGF0YS1hcGki LFB0PWcuZm5bQXRdLEx0PW5ldyBSZWdFeHAoIjM4fDQwfDI3IiksanQ9e0hJREU6ImhpZGUiK090 LEhJRERFTjoiaGlkZGVuIitPdCxTSE9XOiJzaG93IitPdCxTSE9XTjoic2hvd24iK090LENMSUNL OiJjbGljayIrT3QsQ0xJQ0tfREFUQV9BUEk6ImNsaWNrIitPdCtrdCxLRVlET1dOX0RBVEFfQVBJ OiJrZXlkb3duIitPdCtrdCxLRVlVUF9EQVRBX0FQSToia2V5dXAiK090K2t0fSxIdD0iZGlzYWJs ZWQiLFJ0PSJzaG93Iix4dD0iZHJvcHVwIixGdD0iZHJvcHJpZ2h0IixVdD0iZHJvcGxlZnQiLFd0 PSJkcm9wZG93bi1tZW51LXJpZ2h0IixxdD0icG9zaXRpb24tc3RhdGljIixNdD0nW2RhdGEtdG9n Z2xlPSJkcm9wZG93biJdJyxLdD0iLmRyb3Bkb3duIGZvcm0iLFF0PSIuZHJvcGRvd24tbWVudSIs QnQ9Ii5uYXZiYXItbmF2IixWdD0iLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5k aXNhYmxlZCk6bm90KDpkaXNhYmxlZCkiLFl0PSJ0b3Atc3RhcnQiLHp0PSJ0b3AtZW5kIixYdD0i Ym90dG9tLXN0YXJ0IiwkdD0iYm90dG9tLWVuZCIsR3Q9InJpZ2h0LXN0YXJ0IixKdD0ibGVmdC1z dGFydCIsWnQ9e29mZnNldDowLGZsaXA6ITAsYm91bmRhcnk6InNjcm9sbFBhcmVudCIscmVmZXJl bmNlOiJ0b2dnbGUiLGRpc3BsYXk6ImR5bmFtaWMiLHBvcHBlckNvbmZpZzpudWxsfSx0ZT17b2Zm c2V0OiIobnVtYmVyfHN0cmluZ3xmdW5jdGlvbikiLGZsaXA6ImJvb2xlYW4iLGJvdW5kYXJ5OiIo c3RyaW5nfGVsZW1lbnQpIixyZWZlcmVuY2U6IihzdHJpbmd8ZWxlbWVudCkiLGRpc3BsYXk6InN0 cmluZyIscG9wcGVyQ29uZmlnOiIobnVsbHxvYmplY3QpIn0sZWU9ZnVuY3Rpb24oKXtmdW5jdGlv biBjKHQsZSl7dGhpcy5fZWxlbWVudD10LHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuX2NvbmZpZz10 aGlzLl9nZXRDb25maWcoZSksdGhpcy5fbWVudT10aGlzLl9nZXRNZW51RWxlbWVudCgpLHRoaXMu X2luTmF2YmFyPXRoaXMuX2RldGVjdE5hdmJhcigpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCl9 dmFyIHQ9Yy5wcm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Vs ZW1lbnQuZGlzYWJsZWQmJiFnKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKEh0KSl7dmFyIHQ9Zyh0 aGlzLl9tZW51KS5oYXNDbGFzcyhSdCk7Yy5fY2xlYXJNZW51cygpLHR8fHRoaXMuc2hvdyghMCl9 fSx0LnNob3c9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCYmKHQ9ITEpLCEodGhpcy5fZWxlbWVu dC5kaXNhYmxlZHx8Zyh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhIdCl8fGcodGhpcy5fbWVudSku aGFzQ2xhc3MoUnQpKSl7dmFyIGU9e3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0sbj1nLkV2 ZW50KGp0LlNIT1csZSksaT1jLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtp ZihnKGkpLnRyaWdnZXIobiksIW4uaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKCF0aGlzLl9pbk5h dmJhciYmdCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB1KXRocm93IG5ldyBUeXBlRXJyb3IoIkJv b3RzdHJhcCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMu b3JnLykiKTt2YXIgbz10aGlzLl9lbGVtZW50OyJwYXJlbnQiPT09dGhpcy5fY29uZmlnLnJlZmVy ZW5jZT9vPWk6Xy5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkmJihvPXRoaXMuX2Nv bmZpZy5yZWZlcmVuY2UsInVuZGVmaW5lZCIhPXR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNl LmpxdWVyeSYmKG89dGhpcy5fY29uZmlnLnJlZmVyZW5jZVswXSkpLCJzY3JvbGxQYXJlbnQiIT09 dGhpcy5fY29uZmlnLmJvdW5kYXJ5JiZnKGkpLmFkZENsYXNzKHF0KSx0aGlzLl9wb3BwZXI9bmV3 IHUobyx0aGlzLl9tZW51LHRoaXMuX2dldFBvcHBlckNvbmZpZygpKX0ib250b3VjaHN0YXJ0Imlu IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmMD09PWcoaSkuY2xvc2VzdChCdCkubGVuZ3RoJiZn KGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub24oIm1vdXNlb3ZlciIsbnVsbCxnLm5vb3ApLHRo aXMuX2VsZW1lbnQuZm9jdXMoKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBh bmRlZCIsITApLGcodGhpcy5fbWVudSkudG9nZ2xlQ2xhc3MoUnQpLGcoaSkudG9nZ2xlQ2xhc3Mo UnQpLnRyaWdnZXIoZy5FdmVudChqdC5TSE9XTixlKSl9fX0sdC5oaWRlPWZ1bmN0aW9uKCl7aWYo IXRoaXMuX2VsZW1lbnQuZGlzYWJsZWQmJiFnKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKEh0KSYm Zyh0aGlzLl9tZW51KS5oYXNDbGFzcyhSdCkpe3ZhciB0PXtyZWxhdGVkVGFyZ2V0OnRoaXMuX2Vs ZW1lbnR9LGU9Zy5FdmVudChqdC5ISURFLHQpLG49Yy5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhp cy5fZWxlbWVudCk7ZyhuKS50cmlnZ2VyKGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlz Ll9wb3BwZXImJnRoaXMuX3BvcHBlci5kZXN0cm95KCksZyh0aGlzLl9tZW51KS50b2dnbGVDbGFz cyhSdCksZyhuKS50b2dnbGVDbGFzcyhSdCkudHJpZ2dlcihnLkV2ZW50KGp0LkhJRERFTix0KSkp fX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7Zy5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsTnQpLGco dGhpcy5fZWxlbWVudCkub2ZmKE90KSx0aGlzLl9lbGVtZW50PW51bGwsKHRoaXMuX21lbnU9bnVs bCkhPT10aGlzLl9wb3BwZXImJih0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1u dWxsKX0sdC51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl9pbk5hdmJhcj10aGlzLl9kZXRlY3ROYXZi YXIoKSxudWxsIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKX0s dC5fYWRkRXZlbnRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2codGhpcy5fZWxlbWVu dCkub24oanQuQ0xJQ0ssZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3Bh Z2F0aW9uKCksZS50b2dnbGUoKX0pfSx0Ll9nZXRDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9 bCh7fSx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQse30sZyh0aGlzLl9lbGVtZW50KS5kYXRhKCks e30sdCksXy50eXBlQ2hlY2tDb25maWcoQXQsdCx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBl KSx0fSx0Ll9nZXRNZW51RWxlbWVudD1mdW5jdGlvbigpe2lmKCF0aGlzLl9tZW51KXt2YXIgdD1j Ll9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTt0JiYodGhpcy5fbWVudT10LnF1 ZXJ5U2VsZWN0b3IoUXQpKX1yZXR1cm4gdGhpcy5fbWVudX0sdC5fZ2V0UGxhY2VtZW50PWZ1bmN0 aW9uKCl7dmFyIHQ9Zyh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUpLGU9WHQ7cmV0dXJuIHQuaGFz Q2xhc3MoeHQpPyhlPVl0LGcodGhpcy5fbWVudSkuaGFzQ2xhc3MoV3QpJiYoZT16dCkpOnQuaGFz Q2xhc3MoRnQpP2U9R3Q6dC5oYXNDbGFzcyhVdCk/ZT1KdDpnKHRoaXMuX21lbnUpLmhhc0NsYXNz KFd0KSYmKGU9JHQpLGV9LHQuX2RldGVjdE5hdmJhcj1mdW5jdGlvbigpe3JldHVybiAwPGcodGhp cy5fZWxlbWVudCkuY2xvc2VzdCgiLm5hdmJhciIpLmxlbmd0aH0sdC5fZ2V0T2Zmc2V0PWZ1bmN0 aW9uKCl7dmFyIGU9dGhpcyx0PXt9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9jb25m aWcub2Zmc2V0P3QuZm49ZnVuY3Rpb24odCl7cmV0dXJuIHQub2Zmc2V0cz1sKHt9LHQub2Zmc2V0 cyx7fSxlLl9jb25maWcub2Zmc2V0KHQub2Zmc2V0cyxlLl9lbGVtZW50KXx8e30pLHR9OnQub2Zm c2V0PXRoaXMuX2NvbmZpZy5vZmZzZXQsdH0sdC5fZ2V0UG9wcGVyQ29uZmlnPWZ1bmN0aW9uKCl7 dmFyIHQ9e3BsYWNlbWVudDp0aGlzLl9nZXRQbGFjZW1lbnQoKSxtb2RpZmllcnM6e29mZnNldDp0 aGlzLl9nZXRPZmZzZXQoKSxmbGlwOntlbmFibGVkOnRoaXMuX2NvbmZpZy5mbGlwfSxwcmV2ZW50 T3ZlcmZsb3c6e2JvdW5kYXJpZXNFbGVtZW50OnRoaXMuX2NvbmZpZy5ib3VuZGFyeX19fTtyZXR1 cm4ic3RhdGljIj09PXRoaXMuX2NvbmZpZy5kaXNwbGF5JiYodC5tb2RpZmllcnMuYXBwbHlTdHls ZT17ZW5hYmxlZDohMX0pLGwoe30sdCx7fSx0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKX0sYy5f alF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2 YXIgdD1nKHRoaXMpLmRhdGEoTnQpO2lmKHR8fCh0PW5ldyBjKHRoaXMsIm9iamVjdCI9PXR5cGVv ZiBlP2U6bnVsbCksZyh0aGlzKS5kYXRhKE50LHQpKSwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJ1 bmRlZmluZWQiPT10eXBlb2YgdFtlXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFt ZWQgIicrZSsnIicpO3RbZV0oKX19KX0sYy5fY2xlYXJNZW51cz1mdW5jdGlvbih0KXtpZighdHx8 MyE9PXQud2hpY2gmJigia2V5dXAiIT09dC50eXBlfHw5PT09dC53aGljaCkpZm9yKHZhciBlPVtd LnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChNdCkpLG49MCxpPWUubGVuZ3Ro O248aTtuKyspe3ZhciBvPWMuX2dldFBhcmVudEZyb21FbGVtZW50KGVbbl0pLHI9ZyhlW25dKS5k YXRhKE50KSxzPXtyZWxhdGVkVGFyZ2V0OmVbbl19O2lmKHQmJiJjbGljayI9PT10LnR5cGUmJihz LmNsaWNrRXZlbnQ9dCkscil7dmFyIGE9ci5fbWVudTtpZihnKG8pLmhhc0NsYXNzKFJ0KSYmISh0 JiYoImNsaWNrIj09PXQudHlwZSYmL2lucHV0fHRleHRhcmVhL2kudGVzdCh0LnRhcmdldC50YWdO YW1lKXx8ImtleXVwIj09PXQudHlwZSYmOT09PXQud2hpY2gpJiZnLmNvbnRhaW5zKG8sdC50YXJn ZXQpKSl7dmFyIGw9Zy5FdmVudChqdC5ISURFLHMpO2cobykudHJpZ2dlcihsKSxsLmlzRGVmYXVs dFByZXZlbnRlZCgpfHwoIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQm JmcoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoIm1vdXNlb3ZlciIsbnVsbCxnLm5vb3Ap LGVbbl0uc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxyLl9wb3BwZXImJnIu X3BvcHBlci5kZXN0cm95KCksZyhhKS5yZW1vdmVDbGFzcyhSdCksZyhvKS5yZW1vdmVDbGFzcyhS dCkudHJpZ2dlcihnLkV2ZW50KGp0LkhJRERFTixzKSkpfX19fSxjLl9nZXRQYXJlbnRGcm9tRWxl bWVudD1mdW5jdGlvbih0KXt2YXIgZSxuPV8uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KTtyZXR1 cm4gbiYmKGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKSksZXx8dC5wYXJlbnROb2RlfSxjLl9k YXRhQXBpS2V5ZG93bkhhbmRsZXI9ZnVuY3Rpb24odCl7aWYoKC9pbnB1dHx0ZXh0YXJlYS9pLnRl c3QodC50YXJnZXQudGFnTmFtZSk/ISgzMj09PXQud2hpY2h8fDI3IT09dC53aGljaCYmKDQwIT09 dC53aGljaCYmMzghPT10LndoaWNofHxnKHQudGFyZ2V0KS5jbG9zZXN0KFF0KS5sZW5ndGgpKTpM dC50ZXN0KHQud2hpY2gpKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigp LCF0aGlzLmRpc2FibGVkJiYhZyh0aGlzKS5oYXNDbGFzcyhIdCkpKXt2YXIgZT1jLl9nZXRQYXJl bnRGcm9tRWxlbWVudCh0aGlzKSxuPWcoZSkuaGFzQ2xhc3MoUnQpO2lmKG58fDI3IT09dC53aGlj aClpZihuJiYoIW58fDI3IT09dC53aGljaCYmMzIhPT10LndoaWNoKSl7dmFyIGk9W10uc2xpY2Uu Y2FsbChlLnF1ZXJ5U2VsZWN0b3JBbGwoVnQpKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGco dCkuaXMoIjp2aXNpYmxlIil9KTtpZigwIT09aS5sZW5ndGgpe3ZhciBvPWkuaW5kZXhPZih0LnRh cmdldCk7Mzg9PT10LndoaWNoJiYwPG8mJm8tLSw0MD09PXQud2hpY2gmJm88aS5sZW5ndGgtMSYm bysrLG88MCYmKG89MCksaVtvXS5mb2N1cygpfX1lbHNle2lmKDI3PT09dC53aGljaCl7dmFyIHI9 ZS5xdWVyeVNlbGVjdG9yKE10KTtnKHIpLnRyaWdnZXIoImZvY3VzIil9Zyh0aGlzKS50cmlnZ2Vy KCJjbGljayIpfX19LHMoYyxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1 cm4iNC40LjEifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFp0fX0se2tl eToiRGVmYXVsdFR5cGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0ZX19XSksY30oKTtnKGRvY3Vt ZW50KS5vbihqdC5LRVlET1dOX0RBVEFfQVBJLE10LGVlLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXIp Lm9uKGp0LktFWURPV05fREFUQV9BUEksUXQsZWUuX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24o anQuQ0xJQ0tfREFUQV9BUEkrIiAiK2p0LktFWVVQX0RBVEFfQVBJLGVlLl9jbGVhck1lbnVzKS5v bihqdC5DTElDS19EQVRBX0FQSSxNdCxmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5z dG9wUHJvcGFnYXRpb24oKSxlZS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoZyh0aGlzKSwidG9nZ2xl Iil9KS5vbihqdC5DTElDS19EQVRBX0FQSSxLdCxmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlv bigpfSksZy5mbltBdF09ZWUuX2pRdWVyeUludGVyZmFjZSxnLmZuW0F0XS5Db25zdHJ1Y3Rvcj1l ZSxnLmZuW0F0XS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGcuZm5bQXRdPVB0LGVlLl9q UXVlcnlJbnRlcmZhY2V9O3ZhciBuZT0ibW9kYWwiLGllPSJicy5tb2RhbCIsb2U9Ii4iK2llLHJl PWcuZm5bbmVdLHNlPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxmb2N1czohMCxzaG93OiEwfSxh ZT17YmFja2Ryb3A6Iihib29sZWFufHN0cmluZykiLGtleWJvYXJkOiJib29sZWFuIixmb2N1czoi Ym9vbGVhbiIsc2hvdzoiYm9vbGVhbiJ9LGxlPXtISURFOiJoaWRlIitvZSxISURFX1BSRVZFTlRF RDoiaGlkZVByZXZlbnRlZCIrb2UsSElEREVOOiJoaWRkZW4iK29lLFNIT1c6InNob3ciK29lLFNI T1dOOiJzaG93biIrb2UsRk9DVVNJTjoiZm9jdXNpbiIrb2UsUkVTSVpFOiJyZXNpemUiK29lLENM SUNLX0RJU01JU1M6ImNsaWNrLmRpc21pc3MiK29lLEtFWURPV05fRElTTUlTUzoia2V5ZG93bi5k aXNtaXNzIitvZSxNT1VTRVVQX0RJU01JU1M6Im1vdXNldXAuZGlzbWlzcyIrb2UsTU9VU0VET1dO X0RJU01JU1M6Im1vdXNlZG93bi5kaXNtaXNzIitvZSxDTElDS19EQVRBX0FQSToiY2xpY2siK29l KyIuZGF0YS1hcGkifSxjZT0ibW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiLGhlPSJtb2RhbC1zY3Jv bGxiYXItbWVhc3VyZSIsdWU9Im1vZGFsLWJhY2tkcm9wIixmZT0ibW9kYWwtb3BlbiIsZGU9ImZh ZGUiLGdlPSJzaG93IixfZT0ibW9kYWwtc3RhdGljIixtZT0iLm1vZGFsLWRpYWxvZyIscGU9Ii5t b2RhbC1ib2R5Iix2ZT0nW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyx5ZT0nW2RhdGEtZGlzbWlzcz0i bW9kYWwiXScsRWU9Ii5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNr eS10b3AiLENlPSIuc3RpY2t5LXRvcCIsVGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBvKHQsZSl7dGhp cy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5fZGlhbG9n PXQucXVlcnlTZWxlY3RvcihtZSksdGhpcy5fYmFja2Ryb3A9bnVsbCx0aGlzLl9pc1Nob3duPSEx LHRoaXMuX2lzQm9keU92ZXJmbG93aW5nPSExLHRoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITEs dGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX3Njcm9sbGJhcldpZHRoPTB9dmFyIHQ9by5w cm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc1Nob3du P3RoaXMuaGlkZSgpOnRoaXMuc2hvdyh0KX0sdC5zaG93PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7 aWYoIXRoaXMuX2lzU2hvd24mJiF0aGlzLl9pc1RyYW5zaXRpb25pbmcpe2codGhpcy5fZWxlbWVu dCkuaGFzQ2xhc3MoZGUpJiYodGhpcy5faXNUcmFuc2l0aW9uaW5nPSEwKTt2YXIgbj1nLkV2ZW50 KGxlLlNIT1cse3JlbGF0ZWRUYXJnZXQ6dH0pO2codGhpcy5fZWxlbWVudCkudHJpZ2dlcihuKSx0 aGlzLl9pc1Nob3dufHxuLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5faXNTaG93bj0hMCx0 aGlzLl9jaGVja1Njcm9sbGJhcigpLHRoaXMuX3NldFNjcm9sbGJhcigpLHRoaXMuX2FkanVzdERp YWxvZygpLHRoaXMuX3NldEVzY2FwZUV2ZW50KCksdGhpcy5fc2V0UmVzaXplRXZlbnQoKSxnKHRo aXMuX2VsZW1lbnQpLm9uKGxlLkNMSUNLX0RJU01JU1MseWUsZnVuY3Rpb24odCl7cmV0dXJuIGUu aGlkZSh0KX0pLGcodGhpcy5fZGlhbG9nKS5vbihsZS5NT1VTRURPV05fRElTTUlTUyxmdW5jdGlv bigpe2coZS5fZWxlbWVudCkub25lKGxlLk1PVVNFVVBfRElTTUlTUyxmdW5jdGlvbih0KXtnKHQu dGFyZ2V0KS5pcyhlLl9lbGVtZW50KSYmKGUuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITApfSl9KSx0 aGlzLl9zaG93QmFja2Ryb3AoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2hvd0VsZW1lbnQodCl9KSl9 fSx0LmhpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0JiZ0LnByZXZlbnREZWZhdWx0KCks dGhpcy5faXNTaG93biYmIXRoaXMuX2lzVHJhbnNpdGlvbmluZyl7dmFyIG49Zy5FdmVudChsZS5I SURFKTtpZihnKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobiksdGhpcy5faXNTaG93biYmIW4uaXNE ZWZhdWx0UHJldmVudGVkKCkpe3RoaXMuX2lzU2hvd249ITE7dmFyIGk9Zyh0aGlzLl9lbGVtZW50 KS5oYXNDbGFzcyhkZSk7aWYoaSYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCksdGhpcy5fc2V0 RXNjYXBlRXZlbnQoKSx0aGlzLl9zZXRSZXNpemVFdmVudCgpLGcoZG9jdW1lbnQpLm9mZihsZS5G T0NVU0lOKSxnKHRoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKGdlKSxnKHRoaXMuX2VsZW1lbnQp Lm9mZihsZS5DTElDS19ESVNNSVNTKSxnKHRoaXMuX2RpYWxvZykub2ZmKGxlLk1PVVNFRE9XTl9E SVNNSVNTKSxpKXt2YXIgbz1fLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMu X2VsZW1lbnQpO2codGhpcy5fZWxlbWVudCkub25lKF8uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24o dCl7cmV0dXJuIGUuX2hpZGVNb2RhbCh0KX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKG8pfWVsc2Ug dGhpcy5faGlkZU1vZGFsKCl9fX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7W3dpbmRvdyx0aGlzLl9l bGVtZW50LHRoaXMuX2RpYWxvZ10uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZyh0KS5vZmYo b2UpfSksZyhkb2N1bWVudCkub2ZmKGxlLkZPQ1VTSU4pLGcucmVtb3ZlRGF0YSh0aGlzLl9lbGVt ZW50LGllKSx0aGlzLl9jb25maWc9bnVsbCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fZGlhbG9n PW51bGwsdGhpcy5fYmFja2Ryb3A9bnVsbCx0aGlzLl9pc1Nob3duPW51bGwsdGhpcy5faXNCb2R5 T3ZlcmZsb3dpbmc9bnVsbCx0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrPW51bGwsdGhpcy5faXNU cmFuc2l0aW9uaW5nPW51bGwsdGhpcy5fc2Nyb2xsYmFyV2lkdGg9bnVsbH0sdC5oYW5kbGVVcGRh dGU9ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3REaWFsb2coKX0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9u KHQpe3JldHVybiB0PWwoe30sc2Use30sdCksXy50eXBlQ2hlY2tDb25maWcobmUsdCxhZSksdH0s dC5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoInN0 YXRpYyI9PT10aGlzLl9jb25maWcuYmFja2Ryb3Ape3ZhciBlPWcuRXZlbnQobGUuSElERV9QUkVW RU5URUQpO2lmKGcodGhpcy5fZWxlbWVudCkudHJpZ2dlcihlKSxlLmRlZmF1bHRQcmV2ZW50ZWQp cmV0dXJuO3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChfZSk7dmFyIG49Xy5nZXRUcmFuc2l0 aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtnKHRoaXMuX2VsZW1lbnQpLm9u ZShfLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKCl7dC5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3Zl KF9lKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKG4pLHRoaXMuX2VsZW1lbnQuZm9jdXMoKX1lbHNl IHRoaXMuaGlkZSgpfSx0Ll9zaG93RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49Zyh0 aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhkZSksaT10aGlzLl9kaWFsb2c/dGhpcy5fZGlhbG9nLnF1 ZXJ5U2VsZWN0b3IocGUpOm51bGw7dGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVt ZW50LnBhcmVudE5vZGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERXx8ZG9jdW1lbnQuYm9k eS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk9 ImJsb2NrIix0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSx0aGlz Ll9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1tb2RhbCIsITApLGcodGhpcy5fZGlhbG9nKS5o YXNDbGFzcyhjZSkmJmk/aS5zY3JvbGxUb3A9MDp0aGlzLl9lbGVtZW50LnNjcm9sbFRvcD0wLG4m Jl8ucmVmbG93KHRoaXMuX2VsZW1lbnQpLGcodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoZ2UpLHRo aXMuX2NvbmZpZy5mb2N1cyYmdGhpcy5fZW5mb3JjZUZvY3VzKCk7ZnVuY3Rpb24gbygpe2UuX2Nv bmZpZy5mb2N1cyYmZS5fZWxlbWVudC5mb2N1cygpLGUuX2lzVHJhbnNpdGlvbmluZz0hMSxnKGUu X2VsZW1lbnQpLnRyaWdnZXIocil9dmFyIHI9Zy5FdmVudChsZS5TSE9XTix7cmVsYXRlZFRhcmdl dDp0fSk7aWYobil7dmFyIHM9Xy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlz Ll9kaWFsb2cpO2codGhpcy5fZGlhbG9nKS5vbmUoXy5UUkFOU0lUSU9OX0VORCxvKS5lbXVsYXRl VHJhbnNpdGlvbkVuZChzKX1lbHNlIG8oKX0sdC5fZW5mb3JjZUZvY3VzPWZ1bmN0aW9uKCl7dmFy IGU9dGhpcztnKGRvY3VtZW50KS5vZmYobGUuRk9DVVNJTikub24obGUuRk9DVVNJTixmdW5jdGlv bih0KXtkb2N1bWVudCE9PXQudGFyZ2V0JiZlLl9lbGVtZW50IT09dC50YXJnZXQmJjA9PT1nKGUu X2VsZW1lbnQpLmhhcyh0LnRhcmdldCkubGVuZ3RoJiZlLl9lbGVtZW50LmZvY3VzKCl9KX0sdC5f c2V0RXNjYXBlRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2lzU2hvd24mJnRoaXMu X2NvbmZpZy5rZXlib2FyZD9nKHRoaXMuX2VsZW1lbnQpLm9uKGxlLktFWURPV05fRElTTUlTUyxm dW5jdGlvbih0KXsyNz09PXQud2hpY2gmJmUuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKX0p OnRoaXMuX2lzU2hvd258fGcodGhpcy5fZWxlbWVudCkub2ZmKGxlLktFWURPV05fRElTTUlTUyl9 LHQuX3NldFJlc2l6ZUV2ZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9pc1Nob3duP2co d2luZG93KS5vbihsZS5SRVNJWkUsZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFuZGxlVXBkYXRlKHQp fSk6Zyh3aW5kb3cpLm9mZihsZS5SRVNJWkUpfSx0Ll9oaWRlTW9kYWw9ZnVuY3Rpb24oKXt2YXIg dD10aGlzO3RoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fZWxlbWVudC5z ZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1 dGUoImFyaWEtbW9kYWwiKSx0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITEsdGhpcy5fc2hvd0JhY2tk cm9wKGZ1bmN0aW9uKCl7Zyhkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhmZSksdC5fcmVzZXRB ZGp1c3RtZW50cygpLHQuX3Jlc2V0U2Nyb2xsYmFyKCksZyh0Ll9lbGVtZW50KS50cmlnZ2VyKGxl LkhJRERFTil9KX0sdC5fcmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLl9iYWNrZHJvcCYm KGcodGhpcy5fYmFja2Ryb3ApLnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wPW51bGwpfSx0Ll9zaG93 QmFja2Ryb3A9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWcodGhpcy5fZWxlbWVudCkuaGFzQ2xh c3MoZGUpP2RlOiIiO2lmKHRoaXMuX2lzU2hvd24mJnRoaXMuX2NvbmZpZy5iYWNrZHJvcCl7aWYo dGhpcy5fYmFja2Ryb3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ry b3AuY2xhc3NOYW1lPXVlLG4mJnRoaXMuX2JhY2tkcm9wLmNsYXNzTGlzdC5hZGQobiksZyh0aGlz Ll9iYWNrZHJvcCkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSksZyh0aGlzLl9lbGVtZW50KS5vbihs ZS5DTElDS19ESVNNSVNTLGZ1bmN0aW9uKHQpe2UuX2lnbm9yZUJhY2tkcm9wQ2xpY2s/ZS5faWdu b3JlQmFja2Ryb3BDbGljaz0hMTp0LnRhcmdldD09PXQuY3VycmVudFRhcmdldCYmZS5fdHJpZ2dl ckJhY2tkcm9wVHJhbnNpdGlvbigpfSksbiYmXy5yZWZsb3codGhpcy5fYmFja2Ryb3ApLGcodGhp cy5fYmFja2Ryb3ApLmFkZENsYXNzKGdlKSwhdClyZXR1cm47aWYoIW4pcmV0dXJuIHZvaWQgdCgp O3ZhciBpPV8uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3Ap O2codGhpcy5fYmFja2Ryb3ApLm9uZShfLlRSQU5TSVRJT05fRU5ELHQpLmVtdWxhdGVUcmFuc2l0 aW9uRW5kKGkpfWVsc2UgaWYoIXRoaXMuX2lzU2hvd24mJnRoaXMuX2JhY2tkcm9wKXtnKHRoaXMu X2JhY2tkcm9wKS5yZW1vdmVDbGFzcyhnZSk7dmFyIG89ZnVuY3Rpb24oKXtlLl9yZW1vdmVCYWNr ZHJvcCgpLHQmJnQoKX07aWYoZyh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhkZSkpe3ZhciByPV8u Z2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO2codGhpcy5f YmFja2Ryb3ApLm9uZShfLlRSQU5TSVRJT05fRU5ELG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIp fWVsc2UgbygpfWVsc2UgdCYmdCgpfSx0Ll9hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgdD10 aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50 SGVpZ2h0OyF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyYmdCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUu cGFkZGluZ0xlZnQ9dGhpcy5fc2Nyb2xsYmFyV2lkdGgrInB4IiksdGhpcy5faXNCb2R5T3ZlcmZs b3dpbmcmJiF0JiYodGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ9dGhpcy5fc2Nyb2xs YmFyV2lkdGgrInB4Iil9LHQuX3Jlc2V0QWRqdXN0bWVudHM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVt ZW50LnN0eWxlLnBhZGRpbmdMZWZ0PSIiLHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0 PSIifSx0Ll9jaGVja1Njcm9sbGJhcj1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmJvZHkuZ2V0 Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5faXNCb2R5T3ZlcmZsb3dpbmc9dC5sZWZ0K3Qucmln aHQ8d2luZG93LmlubmVyV2lkdGgsdGhpcy5fc2Nyb2xsYmFyV2lkdGg9dGhpcy5fZ2V0U2Nyb2xs YmFyV2lkdGgoKX0sdC5fc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIG89dGhpcztpZih0aGlz Ll9pc0JvZHlPdmVyZmxvd2luZyl7dmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNl bGVjdG9yQWxsKEVlKSksZT1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo Q2UpKTtnKHQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0eWxlLnBhZGRpbmdSaWdodCxp PWcoZSkuY3NzKCJwYWRkaW5nLXJpZ2h0Iik7ZyhlKS5kYXRhKCJwYWRkaW5nLXJpZ2h0IixuKS5j c3MoInBhZGRpbmctcmlnaHQiLHBhcnNlRmxvYXQoaSkrby5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9 KSxnKGUpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0eWxlLm1hcmdpblJpZ2h0LGk9Zyhl KS5jc3MoIm1hcmdpbi1yaWdodCIpO2coZSkuZGF0YSgibWFyZ2luLXJpZ2h0IixuKS5jc3MoIm1h cmdpbi1yaWdodCIscGFyc2VGbG9hdChpKS1vLl9zY3JvbGxiYXJXaWR0aCsicHgiKX0pO3ZhciBu PWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LGk9Zyhkb2N1bWVudC5ib2R5KS5jc3Mo InBhZGRpbmctcmlnaHQiKTtnKGRvY3VtZW50LmJvZHkpLmRhdGEoInBhZGRpbmctcmlnaHQiLG4p LmNzcygicGFkZGluZy1yaWdodCIscGFyc2VGbG9hdChpKSt0aGlzLl9zY3JvbGxiYXJXaWR0aCsi cHgiKX1nKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKGZlKX0sdC5fcmVzZXRTY3JvbGxiYXI9ZnVu Y3Rpb24oKXt2YXIgdD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoRWUp KTtnKHQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1nKGUpLmRhdGEoInBhZGRpbmctcmlnaHQi KTtnKGUpLnJlbW92ZURhdGEoInBhZGRpbmctcmlnaHQiKSxlLnN0eWxlLnBhZGRpbmdSaWdodD1u fHwiIn0pO3ZhciBlPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIitD ZSkpO2coZSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPWcoZSkuZGF0YSgibWFyZ2luLXJpZ2h0 Iik7InVuZGVmaW5lZCIhPXR5cGVvZiBuJiZnKGUpLmNzcygibWFyZ2luLXJpZ2h0IixuKS5yZW1v dmVEYXRhKCJtYXJnaW4tcmlnaHQiKX0pO3ZhciBuPWcoZG9jdW1lbnQuYm9keSkuZGF0YSgicGFk ZGluZy1yaWdodCIpO2coZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgicGFkZGluZy1yaWdodCIp LGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PW58fCIifSx0Ll9nZXRTY3JvbGxiYXJX aWR0aD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xh c3NOYW1lPWhlLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIGU9dC5nZXRCb3VuZGlu Z0NsaWVudFJlY3QoKS53aWR0aC10LmNsaWVudFdpZHRoO3JldHVybiBkb2N1bWVudC5ib2R5LnJl bW92ZUNoaWxkKHQpLGV9LG8uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuLGkpe3JldHVybiB0 aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1nKHRoaXMpLmRhdGEoaWUpLGU9bCh7fSxzZSx7fSxn KHRoaXMpLmRhdGEoKSx7fSwib2JqZWN0Ij09dHlwZW9mIG4mJm4/bjp7fSk7aWYodHx8KHQ9bmV3 IG8odGhpcyxlKSxnKHRoaXMpLmRhdGEoaWUsdCkpLCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVu ZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1l ZCAiJytuKyciJyk7dFtuXShpKX1lbHNlIGUuc2hvdyYmdC5zaG93KGkpfSl9LHMobyxudWxsLFt7 a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC40LjEifX0se2tleToiRGVmYXVs dCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHNlfX1dKSxvfSgpO2coZG9jdW1lbnQpLm9uKGxlLkNM SUNLX0RBVEFfQVBJLHZlLGZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPV8uZ2V0U2VsZWN0b3JG cm9tRWxlbWVudCh0aGlzKTtpJiYoZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpKTt2YXIgbz1n KGUpLmRhdGEoaWUpPyJ0b2dnbGUiOmwoe30sZyhlKS5kYXRhKCkse30sZyh0aGlzKS5kYXRhKCkp OyJBIiE9PXRoaXMudGFnTmFtZSYmIkFSRUEiIT09dGhpcy50YWdOYW1lfHx0LnByZXZlbnREZWZh dWx0KCk7dmFyIHI9ZyhlKS5vbmUobGUuU0hPVyxmdW5jdGlvbih0KXt0LmlzRGVmYXVsdFByZXZl bnRlZCgpfHxyLm9uZShsZS5ISURERU4sZnVuY3Rpb24oKXtnKG4pLmlzKCI6dmlzaWJsZSIpJiZu LmZvY3VzKCl9KX0pO1RlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChnKGUpLG8sdGhpcyl9KSxnLmZu W25lXT1UZS5falF1ZXJ5SW50ZXJmYWNlLGcuZm5bbmVdLkNvbnN0cnVjdG9yPVRlLGcuZm5bbmVd Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZy5mbltuZV09cmUsVGUuX2pRdWVyeUludGVy ZmFjZX07dmFyIGJlPVsiYmFja2dyb3VuZCIsImNpdGUiLCJocmVmIiwiaXRlbXR5cGUiLCJsb25n ZGVzYyIsInBvc3RlciIsInNyYyIsInhsaW5rOmhyZWYiXSxTZT17IioiOlsiY2xhc3MiLCJkaXIi LCJpZCIsImxhbmciLCJyb2xlIiwvXmFyaWEtW1x3LV0qJC9pXSxhOlsidGFyZ2V0IiwiaHJlZiIs InRpdGxlIiwicmVsIl0sYXJlYTpbXSxiOltdLGJyOltdLGNvbDpbXSxjb2RlOltdLGRpdjpbXSxl bTpbXSxocjpbXSxoMTpbXSxoMjpbXSxoMzpbXSxoNDpbXSxoNTpbXSxoNjpbXSxpOltdLGltZzpb InNyYyIsImFsdCIsInRpdGxlIiwid2lkdGgiLCJoZWlnaHQiXSxsaTpbXSxvbDpbXSxwOltdLHBy ZTpbXSxzOltdLHNtYWxsOltdLHNwYW46W10sc3ViOltdLHN1cDpbXSxzdHJvbmc6W10sdTpbXSx1 bDpbXX0sRGU9L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/ OlsvPyNdfCQpKS9naSxJZT0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5n fHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9n YXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05Ky9dKz0qJC9pO2Z1bmN0aW9uIHdlKHQscixlKXtp ZigwPT09dC5sZW5ndGgpcmV0dXJuIHQ7aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJu IGUodCk7Zm9yKHZhciBuPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQs InRleHQvaHRtbCIpLHM9T2JqZWN0LmtleXMociksYT1bXS5zbGljZS5jYWxsKG4uYm9keS5xdWVy eVNlbGVjdG9yQWxsKCIqIikpLGk9ZnVuY3Rpb24odCl7dmFyIGU9YVt0XSxuPWUubm9kZU5hbWUu dG9Mb3dlckNhc2UoKTtpZigtMT09PXMuaW5kZXhPZihlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkp KXJldHVybiBlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksImNvbnRpbnVlIjt2YXIgaT1bXS5z bGljZS5jYWxsKGUuYXR0cmlidXRlcyksbz1bXS5jb25jYXQoclsiKiJdfHxbXSxyW25dfHxbXSk7 aS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe3ZhciBuPXQubm9kZU5hbWUudG9M b3dlckNhc2UoKTtpZigtMSE9PWUuaW5kZXhPZihuKSlyZXR1cm4tMT09PWJlLmluZGV4T2Yobil8 fEJvb2xlYW4odC5ub2RlVmFsdWUubWF0Y2goRGUpfHx0Lm5vZGVWYWx1ZS5tYXRjaChJZSkpO2Zv cih2YXIgaT1lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFJlZ0V4cH0p LG89MCxyPWkubGVuZ3RoO288cjtvKyspaWYobi5tYXRjaChpW29dKSlyZXR1cm4hMDtyZXR1cm4h MX0odCxvKSYmZS5yZW1vdmVBdHRyaWJ1dGUodC5ub2RlTmFtZSl9KX0sbz0wLGw9YS5sZW5ndGg7 bzxsO28rKylpKG8pO3JldHVybiBuLmJvZHkuaW5uZXJIVE1MfXZhciBBZT0idG9vbHRpcCIsTmU9 ImJzLnRvb2x0aXAiLE9lPSIuIitOZSxrZT1nLmZuW0FlXSxQZT0iYnMtdG9vbHRpcCIsTGU9bmV3 IFJlZ0V4cCgiKF58XFxzKSIrUGUrIlxcUysiLCJnIiksamU9WyJzYW5pdGl6ZSIsIndoaXRlTGlz dCIsInNhbml0aXplRm4iXSxIZT17YW5pbWF0aW9uOiJib29sZWFuIix0ZW1wbGF0ZToic3RyaW5n Iix0aXRsZToiKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSIsdHJpZ2dlcjoic3RyaW5nIixkZWxh eToiKG51bWJlcnxvYmplY3QpIixodG1sOiJib29sZWFuIixzZWxlY3RvcjoiKHN0cmluZ3xib29s ZWFuKSIscGxhY2VtZW50OiIoc3RyaW5nfGZ1bmN0aW9uKSIsb2Zmc2V0OiIobnVtYmVyfHN0cmlu Z3xmdW5jdGlvbikiLGNvbnRhaW5lcjoiKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pIixmYWxsYmFj a1BsYWNlbWVudDoiKHN0cmluZ3xhcnJheSkiLGJvdW5kYXJ5OiIoc3RyaW5nfGVsZW1lbnQpIixz YW5pdGl6ZToiYm9vbGVhbiIsc2FuaXRpemVGbjoiKG51bGx8ZnVuY3Rpb24pIix3aGl0ZUxpc3Q6 Im9iamVjdCIscG9wcGVyQ29uZmlnOiIobnVsbHxvYmplY3QpIn0sUmU9e0FVVE86ImF1dG8iLFRP UDoidG9wIixSSUdIVDoicmlnaHQiLEJPVFRPTToiYm90dG9tIixMRUZUOiJsZWZ0In0seGU9e2Fu aW1hdGlvbjohMCx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCIgcm9sZT0idG9vbHRpcCI+ PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2 PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxz ZWxlY3RvcjohMSxwbGFjZW1lbnQ6InRvcCIsb2Zmc2V0OjAsY29udGFpbmVyOiExLGZhbGxiYWNr UGxhY2VtZW50OiJmbGlwIixib3VuZGFyeToic2Nyb2xsUGFyZW50IixzYW5pdGl6ZTohMCxzYW5p dGl6ZUZuOm51bGwsd2hpdGVMaXN0OlNlLHBvcHBlckNvbmZpZzpudWxsfSxGZT0ic2hvdyIsVWU9 Im91dCIsV2U9e0hJREU6ImhpZGUiK09lLEhJRERFTjoiaGlkZGVuIitPZSxTSE9XOiJzaG93IitP ZSxTSE9XTjoic2hvd24iK09lLElOU0VSVEVEOiJpbnNlcnRlZCIrT2UsQ0xJQ0s6ImNsaWNrIitP ZSxGT0NVU0lOOiJmb2N1c2luIitPZSxGT0NVU09VVDoiZm9jdXNvdXQiK09lLE1PVVNFRU5URVI6 Im1vdXNlZW50ZXIiK09lLE1PVVNFTEVBVkU6Im1vdXNlbGVhdmUiK09lfSxxZT0iZmFkZSIsTWU9 InNob3ciLEtlPSIudG9vbHRpcC1pbm5lciIsUWU9Ii5hcnJvdyIsQmU9ImhvdmVyIixWZT0iZm9j dXMiLFllPSJjbGljayIsemU9Im1hbnVhbCIsWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQsZSl7 aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB1KXRocm93IG5ldyBUeXBlRXJyb3IoIkJvb3RzdHJhcCdz IHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyLmpzIChodHRwczovL3BvcHBlci5qcy5vcmcvKSIpO3Ro aXMuX2lzRW5hYmxlZD0hMCx0aGlzLl90aW1lb3V0PTAsdGhpcy5faG92ZXJTdGF0ZT0iIix0aGlz Ll9hY3RpdmVUcmlnZ2VyPXt9LHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD10LHRoaXMu Y29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLnRpcD1udWxsLHRoaXMuX3NldExpc3RlbmVy cygpfXZhciB0PWkucHJvdG90eXBlO3JldHVybiB0LmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2lz RW5hYmxlZD0hMH0sdC5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5faXNFbmFibGVkPSExfSx0LnRv Z2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0VuYWJsZWQ9IXRoaXMuX2lzRW5hYmxlZH0s dC50b2dnbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5faXNFbmFibGVkKWlmKHQpe3ZhciBlPXRoaXMu Y29uc3RydWN0b3IuREFUQV9LRVksbj1nKHQuY3VycmVudFRhcmdldCkuZGF0YShlKTtufHwobj1u ZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25m aWcoKSksZyh0LmN1cnJlbnRUYXJnZXQpLmRhdGEoZSxuKSksbi5fYWN0aXZlVHJpZ2dlci5jbGlj az0hbi5fYWN0aXZlVHJpZ2dlci5jbGljayxuLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCk/bi5fZW50 ZXIobnVsbCxuKTpuLl9sZWF2ZShudWxsLG4pfWVsc2V7aWYoZyh0aGlzLmdldFRpcEVsZW1lbnQo KSkuaGFzQ2xhc3MoTWUpKXJldHVybiB2b2lkIHRoaXMuX2xlYXZlKG51bGwsdGhpcyk7dGhpcy5f ZW50ZXIobnVsbCx0aGlzKX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlz Ll90aW1lb3V0KSxnLnJlbW92ZURhdGEodGhpcy5lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuREFU QV9LRVkpLGcodGhpcy5lbGVtZW50KS5vZmYodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpLGco dGhpcy5lbGVtZW50KS5jbG9zZXN0KCIubW9kYWwiKS5vZmYoImhpZGUuYnMubW9kYWwiLHRoaXMu X2hpZGVNb2RhbEhhbmRsZXIpLHRoaXMudGlwJiZnKHRoaXMudGlwKS5yZW1vdmUoKSx0aGlzLl9p c0VuYWJsZWQ9bnVsbCx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5faG92ZXJTdGF0ZT1udWxsLHRo aXMuX2FjdGl2ZVRyaWdnZXI9bnVsbCx0aGlzLl9wb3BwZXImJnRoaXMuX3BvcHBlci5kZXN0cm95 KCksdGhpcy5fcG9wcGVyPW51bGwsdGhpcy5lbGVtZW50PW51bGwsdGhpcy5jb25maWc9bnVsbCx0 aGlzLnRpcD1udWxsfSx0LnNob3c9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCJub25lIj09PWco dGhpcy5lbGVtZW50KS5jc3MoImRpc3BsYXkiKSl0aHJvdyBuZXcgRXJyb3IoIlBsZWFzZSB1c2Ug c2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzIik7dmFyIHQ9Zy5FdmVudCh0aGlzLmNvbnN0cnVjdG9y LkV2ZW50LlNIT1cpO2lmKHRoaXMuaXNXaXRoQ29udGVudCgpJiZ0aGlzLl9pc0VuYWJsZWQpe2co dGhpcy5lbGVtZW50KS50cmlnZ2VyKHQpO3ZhciBuPV8uZmluZFNoYWRvd1Jvb3QodGhpcy5lbGVt ZW50KSxpPWcuY29udGFpbnMobnVsbCE9PW4/bjp0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5k b2N1bWVudEVsZW1lbnQsdGhpcy5lbGVtZW50KTtpZih0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHwh aSlyZXR1cm47dmFyIG89dGhpcy5nZXRUaXBFbGVtZW50KCkscj1fLmdldFVJRCh0aGlzLmNvbnN0 cnVjdG9yLk5BTUUpO28uc2V0QXR0cmlidXRlKCJpZCIsciksdGhpcy5lbGVtZW50LnNldEF0dHJp YnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsciksdGhpcy5zZXRDb250ZW50KCksdGhpcy5jb25maWcu YW5pbWF0aW9uJiZnKG8pLmFkZENsYXNzKHFlKTt2YXIgcz0iZnVuY3Rpb24iPT10eXBlb2YgdGhp cy5jb25maWcucGxhY2VtZW50P3RoaXMuY29uZmlnLnBsYWNlbWVudC5jYWxsKHRoaXMsbyx0aGlz LmVsZW1lbnQpOnRoaXMuY29uZmlnLnBsYWNlbWVudCxhPXRoaXMuX2dldEF0dGFjaG1lbnQocyk7 dGhpcy5hZGRBdHRhY2htZW50Q2xhc3MoYSk7dmFyIGw9dGhpcy5fZ2V0Q29udGFpbmVyKCk7Zyhv KS5kYXRhKHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksdGhpcyksZy5jb250YWlucyh0aGlzLmVs ZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy50aXApfHxnKG8pLmFwcGVu ZFRvKGwpLGcodGhpcy5lbGVtZW50KS50cmlnZ2VyKHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSU5T RVJURUQpLHRoaXMuX3BvcHBlcj1uZXcgdSh0aGlzLmVsZW1lbnQsbyx0aGlzLl9nZXRQb3BwZXJD b25maWcoYSkpLGcobykuYWRkQ2xhc3MoTWUpLCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9j dW1lbnRFbGVtZW50JiZnKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub24oIm1vdXNlb3ZlciIs bnVsbCxnLm5vb3ApO3ZhciBjPWZ1bmN0aW9uKCl7ZS5jb25maWcuYW5pbWF0aW9uJiZlLl9maXhU cmFuc2l0aW9uKCk7dmFyIHQ9ZS5faG92ZXJTdGF0ZTtlLl9ob3ZlclN0YXRlPW51bGwsZyhlLmVs ZW1lbnQpLnRyaWdnZXIoZS5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTiksdD09PVVlJiZlLl9sZWF2 ZShudWxsLGUpfTtpZihnKHRoaXMudGlwKS5oYXNDbGFzcyhxZSkpe3ZhciBoPV8uZ2V0VHJhbnNp dGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy50aXApO2codGhpcy50aXApLm9uZShfLlRSQU5T SVRJT05fRU5ELGMpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGgpfWVsc2UgYygpfX0sdC5oaWRlPWZ1 bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtuLl9ob3ZlclN0YXRlIT09RmUmJmkucGFyZW50Tm9kZSYm aS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpLG4uX2NsZWFuVGlwQ2xhc3MoKSxuLmVsZW1lbnQu cmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IiksZyhuLmVsZW1lbnQpLnRyaWdnZXIo bi5jb25zdHJ1Y3Rvci5FdmVudC5ISURERU4pLG51bGwhPT1uLl9wb3BwZXImJm4uX3BvcHBlci5k ZXN0cm95KCksdCYmdCgpfXZhciBuPXRoaXMsaT10aGlzLmdldFRpcEVsZW1lbnQoKSxvPWcuRXZl bnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5ISURFKTtpZihnKHRoaXMuZWxlbWVudCkudHJpZ2dl cihvKSwhby5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aWYoZyhpKS5yZW1vdmVDbGFzcyhNZSksIm9u dG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmcoZG9jdW1lbnQuYm9keSku Y2hpbGRyZW4oKS5vZmYoIm1vdXNlb3ZlciIsbnVsbCxnLm5vb3ApLHRoaXMuX2FjdGl2ZVRyaWdn ZXJbWWVdPSExLHRoaXMuX2FjdGl2ZVRyaWdnZXJbVmVdPSExLHRoaXMuX2FjdGl2ZVRyaWdnZXJb QmVdPSExLGcodGhpcy50aXApLmhhc0NsYXNzKHFlKSl7dmFyIHI9Xy5nZXRUcmFuc2l0aW9uRHVy YXRpb25Gcm9tRWxlbWVudChpKTtnKGkpLm9uZShfLlRSQU5TSVRJT05fRU5ELGUpLmVtdWxhdGVU cmFuc2l0aW9uRW5kKHIpfWVsc2UgZSgpO3RoaXMuX2hvdmVyU3RhdGU9IiJ9fSx0LnVwZGF0ZT1m dW5jdGlvbigpe251bGwhPT10aGlzLl9wb3BwZXImJnRoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0 ZSgpfSx0LmlzV2l0aENvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLmdldFRp dGxlKCkpfSx0LmFkZEF0dGFjaG1lbnRDbGFzcz1mdW5jdGlvbih0KXtnKHRoaXMuZ2V0VGlwRWxl bWVudCgpKS5hZGRDbGFzcyhQZSsiLSIrdCl9LHQuZ2V0VGlwRWxlbWVudD1mdW5jdGlvbigpe3Jl dHVybiB0aGlzLnRpcD10aGlzLnRpcHx8Zyh0aGlzLmNvbmZpZy50ZW1wbGF0ZSlbMF0sdGhpcy50 aXB9LHQuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0VGlwRWxlbWVudCgpO3Ro aXMuc2V0RWxlbWVudENvbnRlbnQoZyh0LnF1ZXJ5U2VsZWN0b3JBbGwoS2UpKSx0aGlzLmdldFRp dGxlKCkpLGcodCkucmVtb3ZlQ2xhc3MocWUrIiAiK01lKX0sdC5zZXRFbGVtZW50Q29udGVudD1m dW5jdGlvbih0LGUpeyJvYmplY3QiIT10eXBlb2YgZXx8IWUubm9kZVR5cGUmJiFlLmpxdWVyeT90 aGlzLmNvbmZpZy5odG1sPyh0aGlzLmNvbmZpZy5zYW5pdGl6ZSYmKGU9d2UoZSx0aGlzLmNvbmZp Zy53aGl0ZUxpc3QsdGhpcy5jb25maWcuc2FuaXRpemVGbikpLHQuaHRtbChlKSk6dC50ZXh0KGUp OnRoaXMuY29uZmlnLmh0bWw/ZyhlKS5wYXJlbnQoKS5pcyh0KXx8dC5lbXB0eSgpLmFwcGVuZChl KTp0LnRleHQoZyhlKS50ZXh0KCkpfSx0LmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5l bGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIpO3JldHVybiB0PXR8fCgi ZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb25maWcudGl0bGU/dGhpcy5jb25maWcudGl0bGUuY2Fs bCh0aGlzLmVsZW1lbnQpOnRoaXMuY29uZmlnLnRpdGxlKX0sdC5fZ2V0UG9wcGVyQ29uZmlnPWZ1 bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGwoe30se3BsYWNlbWVudDp0LG1vZGlmaWVyczp7 b2Zmc2V0OnRoaXMuX2dldE9mZnNldCgpLGZsaXA6e2JlaGF2aW9yOnRoaXMuY29uZmlnLmZhbGxi YWNrUGxhY2VtZW50fSxhcnJvdzp7ZWxlbWVudDpRZX0scHJldmVudE92ZXJmbG93Ontib3VuZGFy aWVzRWxlbWVudDp0aGlzLmNvbmZpZy5ib3VuZGFyeX19LG9uQ3JlYXRlOmZ1bmN0aW9uKHQpe3Qu b3JpZ2luYWxQbGFjZW1lbnQhPT10LnBsYWNlbWVudCYmZS5faGFuZGxlUG9wcGVyUGxhY2VtZW50 Q2hhbmdlKHQpfSxvblVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5faGFuZGxlUG9wcGVyUGxh Y2VtZW50Q2hhbmdlKHQpfX0se30sdGhpcy5jb25maWcucG9wcGVyQ29uZmlnKX0sdC5fZ2V0T2Zm c2V0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXt9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0 aGlzLmNvbmZpZy5vZmZzZXQ/dC5mbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZzZXRzPWwoe30s dC5vZmZzZXRzLHt9LGUuY29uZmlnLm9mZnNldCh0Lm9mZnNldHMsZS5lbGVtZW50KXx8e30pLHR9 OnQub2Zmc2V0PXRoaXMuY29uZmlnLm9mZnNldCx0fSx0Ll9nZXRDb250YWluZXI9ZnVuY3Rpb24o KXtyZXR1cm4hMT09PXRoaXMuY29uZmlnLmNvbnRhaW5lcj9kb2N1bWVudC5ib2R5Ol8uaXNFbGVt ZW50KHRoaXMuY29uZmlnLmNvbnRhaW5lcik/Zyh0aGlzLmNvbmZpZy5jb250YWluZXIpOmcoZG9j dW1lbnQpLmZpbmQodGhpcy5jb25maWcuY29udGFpbmVyKX0sdC5fZ2V0QXR0YWNobWVudD1mdW5j dGlvbih0KXtyZXR1cm4gUmVbdC50b1VwcGVyQ2FzZSgpXX0sdC5fc2V0TGlzdGVuZXJzPWZ1bmN0 aW9uKCl7dmFyIGk9dGhpczt0aGlzLmNvbmZpZy50cmlnZ2VyLnNwbGl0KCIgIikuZm9yRWFjaChm dW5jdGlvbih0KXtpZigiY2xpY2siPT09dClnKGkuZWxlbWVudCkub24oaS5jb25zdHJ1Y3Rvci5F dmVudC5DTElDSyxpLmNvbmZpZy5zZWxlY3RvcixmdW5jdGlvbih0KXtyZXR1cm4gaS50b2dnbGUo dCl9KTtlbHNlIGlmKHQhPT16ZSl7dmFyIGU9dD09PUJlP2kuY29uc3RydWN0b3IuRXZlbnQuTU9V U0VFTlRFUjppLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTSU4sbj10PT09QmU/aS5jb25zdHJ1Y3Rv ci5FdmVudC5NT1VTRUxFQVZFOmkuY29uc3RydWN0b3IuRXZlbnQuRk9DVVNPVVQ7ZyhpLmVsZW1l bnQpLm9uKGUsaS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGkuX2VudGVyKHQp fSkub24obixpLmNvbmZpZy5zZWxlY3RvcixmdW5jdGlvbih0KXtyZXR1cm4gaS5fbGVhdmUodCl9 KX19KSx0aGlzLl9oaWRlTW9kYWxIYW5kbGVyPWZ1bmN0aW9uKCl7aS5lbGVtZW50JiZpLmhpZGUo KX0sZyh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9uKCJoaWRlLmJzLm1vZGFsIix0 aGlzLl9oaWRlTW9kYWxIYW5kbGVyKSx0aGlzLmNvbmZpZy5zZWxlY3Rvcj90aGlzLmNvbmZpZz1s KHt9LHRoaXMuY29uZmlnLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5fZml4 VGl0bGUoKX0sdC5fZml4VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10eXBlb2YgdGhpcy5lbGVtZW50 LmdldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIpOyF0aGlzLmVsZW1lbnQuZ2V0QXR0 cmlidXRlKCJ0aXRsZSIpJiYic3RyaW5nIj09dHx8KHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUo ImRhdGEtb3JpZ2luYWwtdGl0bGUiLHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRpdGxlIil8 fCIiKSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIiIpKX0sdC5fZW50ZXI9ZnVu Y3Rpb24odCxlKXt2YXIgbj10aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZOyhlPWV8fGcodC5jdXJy ZW50VGFyZ2V0KS5kYXRhKG4pKXx8KGU9bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFy Z2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpLGcodC5jdXJyZW50VGFyZ2V0KS5kYXRhKG4s ZSkpLHQmJihlLl9hY3RpdmVUcmlnZ2VyWyJmb2N1c2luIj09PXQudHlwZT9WZTpCZV09ITApLGco ZS5nZXRUaXBFbGVtZW50KCkpLmhhc0NsYXNzKE1lKXx8ZS5faG92ZXJTdGF0ZT09PUZlP2UuX2hv dmVyU3RhdGU9RmU6KGNsZWFyVGltZW91dChlLl90aW1lb3V0KSxlLl9ob3ZlclN0YXRlPUZlLGUu Y29uZmlnLmRlbGF5JiZlLmNvbmZpZy5kZWxheS5zaG93P2UuX3RpbWVvdXQ9c2V0VGltZW91dChm dW5jdGlvbigpe2UuX2hvdmVyU3RhdGU9PT1GZSYmZS5zaG93KCl9LGUuY29uZmlnLmRlbGF5LnNo b3cpOmUuc2hvdygpKX0sdC5fbGVhdmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNvbnN0cnVj dG9yLkRBVEFfS0VZOyhlPWV8fGcodC5jdXJyZW50VGFyZ2V0KS5kYXRhKG4pKXx8KGU9bmV3IHRo aXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkp LGcodC5jdXJyZW50VGFyZ2V0KS5kYXRhKG4sZSkpLHQmJihlLl9hY3RpdmVUcmlnZ2VyWyJmb2N1 c291dCI9PT10LnR5cGU/VmU6QmVdPSExKSxlLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCl8fChjbGVh clRpbWVvdXQoZS5fdGltZW91dCksZS5faG92ZXJTdGF0ZT1VZSxlLmNvbmZpZy5kZWxheSYmZS5j b25maWcuZGVsYXkuaGlkZT9lLl90aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9ob3Zl clN0YXRlPT09VWUmJmUuaGlkZSgpfSxlLmNvbmZpZy5kZWxheS5oaWRlKTplLmhpZGUoKSl9LHQu X2lzV2l0aEFjdGl2ZVRyaWdnZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fYWN0aXZl VHJpZ2dlcilpZih0aGlzLl9hY3RpdmVUcmlnZ2VyW3RdKXJldHVybiEwO3JldHVybiExfSx0Ll9n ZXRDb25maWc9ZnVuY3Rpb24odCl7dmFyIGU9Zyh0aGlzLmVsZW1lbnQpLmRhdGEoKTtyZXR1cm4g T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXstMSE9PWplLmluZGV4T2YodCkmJmRl bGV0ZSBlW3RdfSksIm51bWJlciI9PXR5cGVvZih0PWwoe30sdGhpcy5jb25zdHJ1Y3Rvci5EZWZh dWx0LHt9LGUse30sIm9iamVjdCI9PXR5cGVvZiB0JiZ0P3Q6e30pKS5kZWxheSYmKHQuZGVsYXk9 e3Nob3c6dC5kZWxheSxoaWRlOnQuZGVsYXl9KSwibnVtYmVyIj09dHlwZW9mIHQudGl0bGUmJih0 LnRpdGxlPXQudGl0bGUudG9TdHJpbmcoKSksIm51bWJlciI9PXR5cGVvZiB0LmNvbnRlbnQmJih0 LmNvbnRlbnQ9dC5jb250ZW50LnRvU3RyaW5nKCkpLF8udHlwZUNoZWNrQ29uZmlnKEFlLHQsdGhp cy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSksdC5zYW5pdGl6ZSYmKHQudGVtcGxhdGU9d2UodC50 ZW1wbGF0ZSx0LndoaXRlTGlzdCx0LnNhbml0aXplRm4pKSx0fSx0Ll9nZXREZWxlZ2F0ZUNvbmZp Zz1mdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMuY29uZmlnKWZvcih2YXIgZSBpbiB0aGlzLmNv bmZpZyl0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZV0hPT10aGlzLmNvbmZpZ1tlXSYmKHRbZV09 dGhpcy5jb25maWdbZV0pO3JldHVybiB0fSx0Ll9jbGVhblRpcENsYXNzPWZ1bmN0aW9uKCl7dmFy IHQ9Zyh0aGlzLmdldFRpcEVsZW1lbnQoKSksZT10LmF0dHIoImNsYXNzIikubWF0Y2goTGUpO251 bGwhPT1lJiZlLmxlbmd0aCYmdC5yZW1vdmVDbGFzcyhlLmpvaW4oIiIpKX0sdC5faGFuZGxlUG9w cGVyUGxhY2VtZW50Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5zdGFuY2U7dGhpcy50aXA9 ZS5wb3BwZXIsdGhpcy5fY2xlYW5UaXBDbGFzcygpLHRoaXMuYWRkQXR0YWNobWVudENsYXNzKHRo aXMuX2dldEF0dGFjaG1lbnQodC5wbGFjZW1lbnQpKX0sdC5fZml4VHJhbnNpdGlvbj1mdW5jdGlv bigpe3ZhciB0PXRoaXMuZ2V0VGlwRWxlbWVudCgpLGU9dGhpcy5jb25maWcuYW5pbWF0aW9uO251 bGw9PT10LmdldEF0dHJpYnV0ZSgieC1wbGFjZW1lbnQiKSYmKGcodCkucmVtb3ZlQ2xhc3MocWUp LHRoaXMuY29uZmlnLmFuaW1hdGlvbj0hMSx0aGlzLmhpZGUoKSx0aGlzLnNob3coKSx0aGlzLmNv bmZpZy5hbmltYXRpb249ZSl9LGkuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuKXtyZXR1cm4g dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Zyh0aGlzKS5kYXRhKE5lKSxlPSJvYmplY3QiPT10 eXBlb2YgbiYmbjtpZigodHx8IS9kaXNwb3NlfGhpZGUvLnRlc3QobikpJiYodHx8KHQ9bmV3IGko dGhpcyxlKSxnKHRoaXMpLmRhdGEoTmUsdCkpLCJzdHJpbmciPT10eXBlb2Ygbikpe2lmKCJ1bmRl ZmluZWQiPT10eXBlb2YgdFtuXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQg IicrbisnIicpO3Rbbl0oKX19KX0scyhpLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlv bigpe3JldHVybiI0LjQuMSJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g eGV9fSx7a2V5OiJOQU1FIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQWV9fSx7a2V5OiJEQVRBX0tF WSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5lfX0se2tleToiRXZlbnQiLGdldDpmdW5jdGlvbigp e3JldHVybiBXZX19LHtrZXk6IkVWRU5UX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9lfX0s e2tleToiRGVmYXVsdFR5cGUiLGdldDpmdW5jdGlvbigpe3JldHVybiBIZX19XSksaX0oKTtnLmZu W0FlXT1YZS5falF1ZXJ5SW50ZXJmYWNlLGcuZm5bQWVdLkNvbnN0cnVjdG9yPVhlLGcuZm5bQWVd Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZy5mbltBZV09a2UsWGUuX2pRdWVyeUludGVy ZmFjZX07dmFyICRlPSJwb3BvdmVyIixHZT0iYnMucG9wb3ZlciIsSmU9Ii4iK0dlLFplPWcuZm5b JGVdLHRuPSJicy1wb3BvdmVyIixlbj1uZXcgUmVnRXhwKCIoXnxcXHMpIit0bisiXFxTKyIsImci KSxubj1sKHt9LFhlLkRlZmF1bHQse3BsYWNlbWVudDoicmlnaHQiLHRyaWdnZXI6ImNsaWNrIixj b250ZW50OiIiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJwb3BvdmVyIiByb2xlPSJ0b29sdGlwIj48 ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+PGgzIGNsYXNzPSJwb3BvdmVyLWhlYWRlciI+PC9oMz48 ZGl2IGNsYXNzPSJwb3BvdmVyLWJvZHkiPjwvZGl2PjwvZGl2Pid9KSxvbj1sKHt9LFhlLkRlZmF1 bHRUeXBlLHtjb250ZW50OiIoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pIn0pLHJuPSJmYWRlIixz bj0ic2hvdyIsYW49Ii5wb3BvdmVyLWhlYWRlciIsbG49Ii5wb3BvdmVyLWJvZHkiLGNuPXtISURF OiJoaWRlIitKZSxISURERU46ImhpZGRlbiIrSmUsU0hPVzoic2hvdyIrSmUsU0hPV046InNob3du IitKZSxJTlNFUlRFRDoiaW5zZXJ0ZWQiK0plLENMSUNLOiJjbGljayIrSmUsRk9DVVNJTjoiZm9j dXNpbiIrSmUsRk9DVVNPVVQ6ImZvY3Vzb3V0IitKZSxNT1VTRUVOVEVSOiJtb3VzZWVudGVyIitK ZSxNT1VTRUxFQVZFOiJtb3VzZWxlYXZlIitKZX0saG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gaSgp e3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc30hZnVuY3Rpb24odCxlKXt0LnBy b3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSwodC5wcm90b3R5cGUuY29uc3RydWN0 b3I9dCkuX19wcm90b19fPWV9KGksdCk7dmFyIGU9aS5wcm90b3R5cGU7cmV0dXJuIGUuaXNXaXRo Q29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuX2dldENvbnRl bnQoKX0sZS5hZGRBdHRhY2htZW50Q2xhc3M9ZnVuY3Rpb24odCl7Zyh0aGlzLmdldFRpcEVsZW1l bnQoKSkuYWRkQ2xhc3ModG4rIi0iK3QpfSxlLmdldFRpcEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy50aXA9dGhpcy50aXB8fGcodGhpcy5jb25maWcudGVtcGxhdGUpWzBdLHRoaXMudGlw fSxlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD1nKHRoaXMuZ2V0VGlwRWxlbWVudCgpKTt0 aGlzLnNldEVsZW1lbnRDb250ZW50KHQuZmluZChhbiksdGhpcy5nZXRUaXRsZSgpKTt2YXIgZT10 aGlzLl9nZXRDb250ZW50KCk7ImZ1bmN0aW9uIj09dHlwZW9mIGUmJihlPWUuY2FsbCh0aGlzLmVs ZW1lbnQpKSx0aGlzLnNldEVsZW1lbnRDb250ZW50KHQuZmluZChsbiksZSksdC5yZW1vdmVDbGFz cyhybisiICIrc24pfSxlLl9nZXRDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVu dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29udGVudCIpfHx0aGlzLmNvbmZpZy5jb250ZW50fSxlLl9j bGVhblRpcENsYXNzPWZ1bmN0aW9uKCl7dmFyIHQ9Zyh0aGlzLmdldFRpcEVsZW1lbnQoKSksZT10 LmF0dHIoImNsYXNzIikubWF0Y2goZW4pO251bGwhPT1lJiYwPGUubGVuZ3RoJiZ0LnJlbW92ZUNs YXNzKGUuam9pbigiIikpfSxpLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRo aXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PWcodGhpcykuZGF0YShHZSksZT0ib2JqZWN0Ij09dHlw ZW9mIG4/bjpudWxsO2lmKCh0fHwhL2Rpc3Bvc2V8aGlkZS8udGVzdChuKSkmJih0fHwodD1uZXcg aSh0aGlzLGUpLGcodGhpcykuZGF0YShHZSx0KSksInN0cmluZyI9PXR5cGVvZiBuKSl7aWYoInVu ZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1l ZCAiJytuKyciJyk7dFtuXSgpfX0pfSxzKGksbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0 aW9uKCl7cmV0dXJuIjQuNC4xIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVy biBubn19LHtrZXk6Ik5BTUUiLGdldDpmdW5jdGlvbigpe3JldHVybiAkZX19LHtrZXk6IkRBVEFf S0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gR2V9fSx7a2V5OiJFdmVudCIsZ2V0OmZ1bmN0aW9u KCl7cmV0dXJuIGNufX0se2tleToiRVZFTlRfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSmV9 fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG9ufX1dKSxpfShYZSk7 Zy5mblskZV09aG4uX2pRdWVyeUludGVyZmFjZSxnLmZuWyRlXS5Db25zdHJ1Y3Rvcj1obixnLmZu WyRlXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGcuZm5bJGVdPVplLGhuLl9qUXVlcnlJ bnRlcmZhY2V9O3ZhciB1bj0ic2Nyb2xsc3B5Iixmbj0iYnMuc2Nyb2xsc3B5Iixkbj0iLiIrZm4s Z249Zy5mblt1bl0sX249e29mZnNldDoxMCxtZXRob2Q6ImF1dG8iLHRhcmdldDoiIn0sbW49e29m ZnNldDoibnVtYmVyIixtZXRob2Q6InN0cmluZyIsdGFyZ2V0OiIoc3RyaW5nfGVsZW1lbnQpIn0s cG49e0FDVElWQVRFOiJhY3RpdmF0ZSIrZG4sU0NST0xMOiJzY3JvbGwiK2RuLExPQURfREFUQV9B UEk6ImxvYWQiK2RuKyIuZGF0YS1hcGkifSx2bj0iZHJvcGRvd24taXRlbSIseW49ImFjdGl2ZSIs RW49J1tkYXRhLXNweT0ic2Nyb2xsIl0nLENuPSIubmF2LCAubGlzdC1ncm91cCIsVG49Ii5uYXYt bGluayIsYm49Ii5uYXYtaXRlbSIsU249Ii5saXN0LWdyb3VwLWl0ZW0iLERuPSIuZHJvcGRvd24i LEluPSIuZHJvcGRvd24taXRlbSIsd249Ii5kcm9wZG93bi10b2dnbGUiLEFuPSJvZmZzZXQiLE5u PSJwb3NpdGlvbiIsT249ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQsZSl7dmFyIG49dGhpczt0aGlz Ll9lbGVtZW50PXQsdGhpcy5fc2Nyb2xsRWxlbWVudD0iQk9EWSI9PT10LnRhZ05hbWU/d2luZG93 OnQsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9zZWxlY3Rvcj10aGlzLl9j b25maWcudGFyZ2V0KyIgIitUbisiLCIrdGhpcy5fY29uZmlnLnRhcmdldCsiICIrU24rIiwiK3Ro aXMuX2NvbmZpZy50YXJnZXQrIiAiK0luLHRoaXMuX29mZnNldHM9W10sdGhpcy5fdGFyZ2V0cz1b XSx0aGlzLl9hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLl9zY3JvbGxIZWlnaHQ9MCxnKHRoaXMuX3Nj cm9sbEVsZW1lbnQpLm9uKHBuLlNDUk9MTCxmdW5jdGlvbih0KXtyZXR1cm4gbi5fcHJvY2Vzcyh0 KX0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX3Byb2Nlc3MoKX12YXIgdD1uLnByb3RvdHlwZTtyZXR1 cm4gdC5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuX3Njcm9sbEVsZW1lbnQ9 PT10aGlzLl9zY3JvbGxFbGVtZW50LndpbmRvdz9BbjpObixvPSJhdXRvIj09PXRoaXMuX2NvbmZp Zy5tZXRob2Q/dDp0aGlzLl9jb25maWcubWV0aG9kLHI9bz09PU5uP3RoaXMuX2dldFNjcm9sbFRv cCgpOjA7dGhpcy5fb2Zmc2V0cz1bXSx0aGlzLl90YXJnZXRzPVtdLHRoaXMuX3Njcm9sbEhlaWdo dD10aGlzLl9nZXRTY3JvbGxIZWlnaHQoKSxbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2Vs ZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKS5tYXAoZnVuY3Rpb24odCl7dmFyIGUsbj1fLmdldFNl bGVjdG9yRnJvbUVsZW1lbnQodCk7aWYobiYmKGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKSks ZSl7dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihpLndpZHRofHxpLmhlaWdodCly ZXR1cm5bZyhlKVtvXSgpLnRvcCtyLG5dfXJldHVybiBudWxsfSkuZmlsdGVyKGZ1bmN0aW9uKHQp e3JldHVybiB0fSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KS5mb3JFYWNo KGZ1bmN0aW9uKHQpe2UuX29mZnNldHMucHVzaCh0WzBdKSxlLl90YXJnZXRzLnB1c2godFsxXSl9 KX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7Zy5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsZm4pLGco dGhpcy5fc2Nyb2xsRWxlbWVudCkub2ZmKGRuKSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fc2Ny b2xsRWxlbWVudD1udWxsLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX3NlbGVjdG9yPW51bGwsdGhp cy5fb2Zmc2V0cz1udWxsLHRoaXMuX3RhcmdldHM9bnVsbCx0aGlzLl9hY3RpdmVUYXJnZXQ9bnVs bCx0aGlzLl9zY3JvbGxIZWlnaHQ9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2lmKCJz dHJpbmciIT10eXBlb2YodD1sKHt9LF9uLHt9LCJvYmplY3QiPT10eXBlb2YgdCYmdD90Ont9KSku dGFyZ2V0KXt2YXIgZT1nKHQudGFyZ2V0KS5hdHRyKCJpZCIpO2V8fChlPV8uZ2V0VUlEKHVuKSxn KHQudGFyZ2V0KS5hdHRyKCJpZCIsZSkpLHQudGFyZ2V0PSIjIitlfXJldHVybiBfLnR5cGVDaGVj a0NvbmZpZyh1bix0LG1uKSx0fSx0Ll9nZXRTY3JvbGxUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5fc2Nyb2xsRWxlbWVudD09PXdpbmRvdz90aGlzLl9zY3JvbGxFbGVtZW50LnBhZ2VZT2Zmc2V0 OnRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wfSx0Ll9nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KGRv Y3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxI ZWlnaHQpfSx0Ll9nZXRPZmZzZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xs RWxlbWVudD09PXdpbmRvdz93aW5kb3cuaW5uZXJIZWlnaHQ6dGhpcy5fc2Nyb2xsRWxlbWVudC5n ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHR9LHQuX3Byb2Nlc3M9ZnVuY3Rpb24oKXt2YXIg dD10aGlzLl9nZXRTY3JvbGxUb3AoKSt0aGlzLl9jb25maWcub2Zmc2V0LGU9dGhpcy5fZ2V0U2Ny b2xsSGVpZ2h0KCksbj10aGlzLl9jb25maWcub2Zmc2V0K2UtdGhpcy5fZ2V0T2Zmc2V0SGVpZ2h0 KCk7aWYodGhpcy5fc2Nyb2xsSGVpZ2h0IT09ZSYmdGhpcy5yZWZyZXNoKCksbjw9dCl7dmFyIGk9 dGhpcy5fdGFyZ2V0c1t0aGlzLl90YXJnZXRzLmxlbmd0aC0xXTt0aGlzLl9hY3RpdmVUYXJnZXQh PT1pJiZ0aGlzLl9hY3RpdmF0ZShpKX1lbHNle2lmKHRoaXMuX2FjdGl2ZVRhcmdldCYmdDx0aGlz Ll9vZmZzZXRzWzBdJiYwPHRoaXMuX29mZnNldHNbMF0pcmV0dXJuIHRoaXMuX2FjdGl2ZVRhcmdl dD1udWxsLHZvaWQgdGhpcy5fY2xlYXIoKTtmb3IodmFyIG89dGhpcy5fb2Zmc2V0cy5sZW5ndGg7 by0tOyl7dGhpcy5fYWN0aXZlVGFyZ2V0IT09dGhpcy5fdGFyZ2V0c1tvXSYmdD49dGhpcy5fb2Zm c2V0c1tvXSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgdGhpcy5fb2Zmc2V0c1tvKzFdfHx0PHRoaXMu X29mZnNldHNbbysxXSkmJnRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbb10pfX19LHQuX2Fj dGl2YXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2FjdGl2ZVRhcmdldD1lLHRoaXMuX2NsZWFyKCk7dmFy IHQ9dGhpcy5fc2VsZWN0b3Iuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQrJ1tk YXRhLXRhcmdldD0iJytlKyciXSwnK3QrJ1tocmVmPSInK2UrJyJdJ30pLG49ZyhbXS5zbGljZS5j YWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodC5qb2luKCIsIikpKSk7bi5oYXNDbGFzcyh2 bik/KG4uY2xvc2VzdChEbikuZmluZCh3bikuYWRkQ2xhc3MoeW4pLG4uYWRkQ2xhc3MoeW4pKToo bi5hZGRDbGFzcyh5biksbi5wYXJlbnRzKENuKS5wcmV2KFRuKyIsICIrU24pLmFkZENsYXNzKHlu KSxuLnBhcmVudHMoQ24pLnByZXYoYm4pLmNoaWxkcmVuKFRuKS5hZGRDbGFzcyh5bikpLGcodGhp cy5fc2Nyb2xsRWxlbWVudCkudHJpZ2dlcihwbi5BQ1RJVkFURSx7cmVsYXRlZFRhcmdldDplfSl9 LHQuX2NsZWFyPWZ1bmN0aW9uKCl7W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9y QWxsKHRoaXMuX3NlbGVjdG9yKSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTGlz dC5jb250YWlucyh5bil9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTGlzdC5y ZW1vdmUoeW4pfSl9LG4uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5l YWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Zyh0aGlzKS5kYXRhKGZuKTtpZih0fHwodD1uZXcgbih0aGlz LCJvYmplY3QiPT10eXBlb2YgZSYmZSksZyh0aGlzKS5kYXRhKGZuLHQpKSwic3RyaW5nIj09dHlw ZW9mIGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgdFtlXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdO byBtZXRob2QgbmFtZWQgIicrZSsnIicpO3RbZV0oKX19KX0scyhuLG51bGwsW3trZXk6IlZFUlNJ T04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjQuMSJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVu Y3Rpb24oKXtyZXR1cm4gX259fV0pLG59KCk7Zyh3aW5kb3cpLm9uKHBuLkxPQURfREFUQV9BUEks ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9y QWxsKEVuKSksZT10Lmxlbmd0aDtlLS07KXt2YXIgbj1nKHRbZV0pO09uLl9qUXVlcnlJbnRlcmZh Y2UuY2FsbChuLG4uZGF0YSgpKX19KSxnLmZuW3VuXT1Pbi5falF1ZXJ5SW50ZXJmYWNlLGcuZm5b dW5dLkNvbnN0cnVjdG9yPU9uLGcuZm5bdW5dLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4g Zy5mblt1bl09Z24sT24uX2pRdWVyeUludGVyZmFjZX07dmFyIGtuPSJicy50YWIiLFBuPSIuIitr bixMbj1nLmZuLnRhYixqbj17SElERToiaGlkZSIrUG4sSElEREVOOiJoaWRkZW4iK1BuLFNIT1c6 InNob3ciK1BuLFNIT1dOOiJzaG93biIrUG4sQ0xJQ0tfREFUQV9BUEk6ImNsaWNrIitQbisiLmRh dGEtYXBpIn0sSG49ImRyb3Bkb3duLW1lbnUiLFJuPSJhY3RpdmUiLHhuPSJkaXNhYmxlZCIsRm49 ImZhZGUiLFVuPSJzaG93IixXbj0iLmRyb3Bkb3duIixxbj0iLm5hdiwgLmxpc3QtZ3JvdXAiLE1u PSIuYWN0aXZlIixLbj0iPiBsaSA+IC5hY3RpdmUiLFFuPSdbZGF0YS10b2dnbGU9InRhYiJdLCBb ZGF0YS10b2dnbGU9InBpbGwiXSwgW2RhdGEtdG9nZ2xlPSJsaXN0Il0nLEJuPSIuZHJvcGRvd24t dG9nZ2xlIixWbj0iPiAuZHJvcGRvd24tbWVudSAuYWN0aXZlIixZbj1mdW5jdGlvbigpe2Z1bmN0 aW9uIGkodCl7dGhpcy5fZWxlbWVudD10fXZhciB0PWkucHJvdG90eXBlO3JldHVybiB0LnNob3c9 ZnVuY3Rpb24oKXt2YXIgbj10aGlzO2lmKCEodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlz Ll9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmZyh0aGlz Ll9lbGVtZW50KS5oYXNDbGFzcyhSbil8fGcodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoeG4pKSl7 dmFyIHQsaSxlPWcodGhpcy5fZWxlbWVudCkuY2xvc2VzdChxbilbMF0sbz1fLmdldFNlbGVjdG9y RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7aWYoZSl7dmFyIHI9IlVMIj09PWUubm9kZU5hbWV8 fCJPTCI9PT1lLm5vZGVOYW1lP0tuOk1uO2k9KGk9Zy5tYWtlQXJyYXkoZyhlKS5maW5kKHIpKSlb aS5sZW5ndGgtMV19dmFyIHM9Zy5FdmVudChqbi5ISURFLHtyZWxhdGVkVGFyZ2V0OnRoaXMuX2Vs ZW1lbnR9KSxhPWcuRXZlbnQoam4uU0hPVyx7cmVsYXRlZFRhcmdldDppfSk7aWYoaSYmZyhpKS50 cmlnZ2VyKHMpLGcodGhpcy5fZWxlbWVudCkudHJpZ2dlcihhKSwhYS5pc0RlZmF1bHRQcmV2ZW50 ZWQoKSYmIXMuaXNEZWZhdWx0UHJldmVudGVkKCkpe28mJih0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0 b3IobykpLHRoaXMuX2FjdGl2YXRlKHRoaXMuX2VsZW1lbnQsZSk7dmFyIGw9ZnVuY3Rpb24oKXt2 YXIgdD1nLkV2ZW50KGpuLkhJRERFTix7cmVsYXRlZFRhcmdldDpuLl9lbGVtZW50fSksZT1nLkV2 ZW50KGpuLlNIT1dOLHtyZWxhdGVkVGFyZ2V0Oml9KTtnKGkpLnRyaWdnZXIodCksZyhuLl9lbGVt ZW50KS50cmlnZ2VyKGUpfTt0P3RoaXMuX2FjdGl2YXRlKHQsdC5wYXJlbnROb2RlLGwpOmwoKX19 fSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXtnLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxrbiksdGhp cy5fZWxlbWVudD1udWxsfSx0Ll9hY3RpdmF0ZT1mdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gaSgp e3JldHVybiBvLl90cmFuc2l0aW9uQ29tcGxldGUodCxyLG4pfXZhciBvPXRoaXMscj0oIWV8fCJV TCIhPT1lLm5vZGVOYW1lJiYiT0wiIT09ZS5ub2RlTmFtZT9nKGUpLmNoaWxkcmVuKE1uKTpnKGUp LmZpbmQoS24pKVswXSxzPW4mJnImJmcocikuaGFzQ2xhc3MoRm4pO2lmKHImJnMpe3ZhciBhPV8u Z2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQocik7ZyhyKS5yZW1vdmVDbGFzcyhVbiku b25lKF8uVFJBTlNJVElPTl9FTkQsaSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYSl9ZWxzZSBpKCl9 LHQuX3RyYW5zaXRpb25Db21wbGV0ZT1mdW5jdGlvbih0LGUsbil7aWYoZSl7ZyhlKS5yZW1vdmVD bGFzcyhSbik7dmFyIGk9ZyhlLnBhcmVudE5vZGUpLmZpbmQoVm4pWzBdO2kmJmcoaSkucmVtb3Zl Q2xhc3MoUm4pLCJ0YWIiPT09ZS5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmZS5zZXRBdHRyaWJ1dGUo ImFyaWEtc2VsZWN0ZWQiLCExKX1pZihnKHQpLmFkZENsYXNzKFJuKSwidGFiIj09PXQuZ2V0QXR0 cmlidXRlKCJyb2xlIikmJnQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwhMCksXy5yZWZs b3codCksdC5jbGFzc0xpc3QuY29udGFpbnMoRm4pJiZ0LmNsYXNzTGlzdC5hZGQoVW4pLHQucGFy ZW50Tm9kZSYmZyh0LnBhcmVudE5vZGUpLmhhc0NsYXNzKEhuKSl7dmFyIG89Zyh0KS5jbG9zZXN0 KFduKVswXTtpZihvKXt2YXIgcj1bXS5zbGljZS5jYWxsKG8ucXVlcnlTZWxlY3RvckFsbChCbikp O2cocikuYWRkQ2xhc3MoUm4pfXQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwhMCl9biYm bigpfSxpLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5j dGlvbigpe3ZhciB0PWcodGhpcyksZT10LmRhdGEoa24pO2lmKGV8fChlPW5ldyBpKHRoaXMpLHQu ZGF0YShrbixlKSksInN0cmluZyI9PXR5cGVvZiBuKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGVb bl0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkICInK24rJyInKTtlW25dKCl9 fSl9LHMoaSxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC40LjEi fX1dKSxpfSgpO2coZG9jdW1lbnQpLm9uKGpuLkNMSUNLX0RBVEFfQVBJLFFuLGZ1bmN0aW9uKHQp e3QucHJldmVudERlZmF1bHQoKSxZbi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoZyh0aGlzKSwic2hv dyIpfSksZy5mbi50YWI9WW4uX2pRdWVyeUludGVyZmFjZSxnLmZuLnRhYi5Db25zdHJ1Y3Rvcj1Z bixnLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGcuZm4udGFiPUxuLFluLl9q UXVlcnlJbnRlcmZhY2V9O3ZhciB6bj0idG9hc3QiLFhuPSJicy50b2FzdCIsJG49Ii4iK1huLEdu PWcuZm5bem5dLEpuPXtDTElDS19ESVNNSVNTOiJjbGljay5kaXNtaXNzIiskbixISURFOiJoaWRl IiskbixISURERU46ImhpZGRlbiIrJG4sU0hPVzoic2hvdyIrJG4sU0hPV046InNob3duIiskbn0s Wm49ImZhZGUiLHRpPSJoaWRlIixlaT0ic2hvdyIsbmk9InNob3dpbmciLGlpPXthbmltYXRpb246 ImJvb2xlYW4iLGF1dG9oaWRlOiJib29sZWFuIixkZWxheToibnVtYmVyIn0sb2k9e2FuaW1hdGlv bjohMCxhdXRvaGlkZTohMCxkZWxheTo1MDB9LHJpPSdbZGF0YS1kaXNtaXNzPSJ0b2FzdCJdJyxz aT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkodCxlKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY29uZmln PXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5fc2V0TGlzdGVuZXJz KCl9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuc2hvdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMs ZT1nLkV2ZW50KEpuLlNIT1cpO2lmKGcodGhpcy5fZWxlbWVudCkudHJpZ2dlcihlKSwhZS5pc0Rl ZmF1bHRQcmV2ZW50ZWQoKSl7dGhpcy5fY29uZmlnLmFuaW1hdGlvbiYmdGhpcy5fZWxlbWVudC5j bGFzc0xpc3QuYWRkKFpuKTt2YXIgbj1mdW5jdGlvbigpe3QuX2VsZW1lbnQuY2xhc3NMaXN0LnJl bW92ZShuaSksdC5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKGVpKSxnKHQuX2VsZW1lbnQpLnRyaWdn ZXIoSm4uU0hPV04pLHQuX2NvbmZpZy5hdXRvaGlkZSYmKHQuX3RpbWVvdXQ9c2V0VGltZW91dChm dW5jdGlvbigpe3QuaGlkZSgpfSx0Ll9jb25maWcuZGVsYXkpKX07aWYodGhpcy5fZWxlbWVudC5j bGFzc0xpc3QucmVtb3ZlKHRpKSxfLnJlZmxvdyh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50 LmNsYXNzTGlzdC5hZGQobmkpLHRoaXMuX2NvbmZpZy5hbmltYXRpb24pe3ZhciBpPV8uZ2V0VHJh bnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7Zyh0aGlzLl9lbGVtZW50 KS5vbmUoXy5UUkFOU0lUSU9OX0VORCxuKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpKX1lbHNlIG4o KX19LHQuaGlkZT1mdW5jdGlvbigpe2lmKHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5z KGVpKSl7dmFyIHQ9Zy5FdmVudChKbi5ISURFKTtnKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIodCks dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8dGhpcy5fY2xvc2UoKX19LHQuZGlzcG9zZT1mdW5jdGlv bigpe2NsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5f ZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoZWkpJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5y ZW1vdmUoZWkpLGcodGhpcy5fZWxlbWVudCkub2ZmKEpuLkNMSUNLX0RJU01JU1MpLGcucmVtb3Zl RGF0YSh0aGlzLl9lbGVtZW50LFhuKSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fY29uZmlnPW51 bGx9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1sKHt9LG9pLHt9LGcodGhpcy5f ZWxlbWVudCkuZGF0YSgpLHt9LCJvYmplY3QiPT10eXBlb2YgdCYmdD90Ont9KSxfLnR5cGVDaGVj a0NvbmZpZyh6bix0LHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpLHR9LHQuX3NldExpc3Rl bmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7Zyh0aGlzLl9lbGVtZW50KS5vbihKbi5DTElDS19E SVNNSVNTLHJpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGlkZSgpfSl9LHQuX2Nsb3NlPWZ1bmN0aW9u KCl7ZnVuY3Rpb24gdCgpe2UuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aSksZyhlLl9lbGVtZW50 KS50cmlnZ2VyKEpuLkhJRERFTil9dmFyIGU9dGhpcztpZih0aGlzLl9lbGVtZW50LmNsYXNzTGlz dC5yZW1vdmUoZWkpLHRoaXMuX2NvbmZpZy5hbmltYXRpb24pe3ZhciBuPV8uZ2V0VHJhbnNpdGlv bkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7Zyh0aGlzLl9lbGVtZW50KS5vbmUo Xy5UUkFOU0lUSU9OX0VORCx0KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChuKX1lbHNlIHQoKX0saS5f alF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2 YXIgdD1nKHRoaXMpLGU9dC5kYXRhKFhuKTtpZihlfHwoZT1uZXcgaSh0aGlzLCJvYmplY3QiPT10 eXBlb2YgbiYmbiksdC5kYXRhKFhuLGUpKSwic3RyaW5nIj09dHlwZW9mIG4pe2lmKCJ1bmRlZmlu ZWQiPT10eXBlb2YgZVtuXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicr bisnIicpO2Vbbl0odGhpcyl9fSl9LHMoaSxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rp b24oKXtyZXR1cm4iNC40LjEifX0se2tleToiRGVmYXVsdFR5cGUiLGdldDpmdW5jdGlvbigpe3Jl dHVybiBpaX19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBvaX19XSksaX0o KTtnLmZuW3puXT1zaS5falF1ZXJ5SW50ZXJmYWNlLGcuZm5bem5dLkNvbnN0cnVjdG9yPXNpLGcu Zm5bem5dLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZy5mblt6bl09R24sc2kuX2pRdWVy eUludGVyZmFjZX0sdC5BbGVydD12LHQuQnV0dG9uPUgsdC5DYXJvdXNlbD11dCx0LkNvbGxhcHNl PXd0LHQuRHJvcGRvd249ZWUsdC5Nb2RhbD1UZSx0LlBvcG92ZXI9aG4sdC5TY3JvbGxzcHk9T24s dC5UYWI9WW4sdC5Ub2FzdD1zaSx0LlRvb2x0aXA9WGUsdC5VdGlsPV8sT2JqZWN0LmRlZmluZVBy b3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSk7Ci0vLyMgc291cmNlTWFwcGluZ1VS TD1ib290c3RyYXAubWluLmpzLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt LWdpdCBhL21lZGlhL2pzL2Jvb3RzdHJhcC00LjQuMS5taW4uanMubWFwIGIvbWVkaWEvanMvYm9v dHN0cmFwLTQuNC4xLm1pbi5qcy5tYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1 N2RiZjMwLi4wMDAwMDAwMAotLS0gYS9tZWRpYS9qcy9ib290c3RyYXAtNC40LjEubWluLmpzLm1h cAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsidmVyc2lvbiI6Mywic291cmNlcyI6WyIu Li8uLi9qcy9zcmMvdXRpbC5qcyIsIi4uLy4uL2pzL3NyYy9hbGVydC5qcyIsIi4uLy4uL2pzL3Ny Yy9idXR0b24uanMiLCIuLi8uLi9qcy9zcmMvY2Fyb3VzZWwuanMiLCIuLi8uLi9qcy9zcmMvY29s bGFwc2UuanMiLCIuLi8uLi9qcy9zcmMvZHJvcGRvd24uanMiLCIuLi8uLi9qcy9zcmMvbW9kYWwu anMiLCIuLi8uLi9qcy9zcmMvdG9vbHMvc2FuaXRpemVyLmpzIiwiLi4vLi4vanMvc3JjL3Rvb2x0 aXAuanMiLCIuLi8uLi9qcy9zcmMvcG9wb3Zlci5qcyIsIi4uLy4uL2pzL3NyYy9zY3JvbGxzcHku anMiLCIuLi8uLi9qcy9zcmMvdGFiLmpzIiwiLi4vLi4vanMvc3JjL3RvYXN0LmpzIl0sIm5hbWVz IjpbIlRSQU5TSVRJT05fRU5EIiwidHJhbnNpdGlvbkVuZEVtdWxhdG9yIiwiZHVyYXRpb24iLCJf dGhpcyIsInRoaXMiLCJjYWxsZWQiLCIkIiwib25lIiwiVXRpbCIsInNldFRpbWVvdXQiLCJ0cmln Z2VyVHJhbnNpdGlvbkVuZCIsImdldFVJRCIsInByZWZpeCIsIk1hdGgiLCJyYW5kb20iLCJkb2N1 bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCIsImVsZW1lbnQi LCJzZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsImhyZWZBdHRyIiwidHJpbSIsInF1ZXJ5U2VsZWN0 b3IiLCJlcnIiLCJnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCIsInRyYW5zaXRpb25E dXJhdGlvbiIsImNzcyIsInRyYW5zaXRpb25EZWxheSIsImZsb2F0VHJhbnNpdGlvbkR1cmF0aW9u IiwicGFyc2VGbG9hdCIsImZsb2F0VHJhbnNpdGlvbkRlbGF5Iiwic3BsaXQiLCJyZWZsb3ciLCJv ZmZzZXRIZWlnaHQiLCJ0cmlnZ2VyIiwic3VwcG9ydHNUcmFuc2l0aW9uRW5kIiwiQm9vbGVhbiIs ImlzRWxlbWVudCIsIm9iaiIsIm5vZGVUeXBlIiwidHlwZUNoZWNrQ29uZmlnIiwiY29tcG9uZW50 TmFtZSIsImNvbmZpZyIsImNvbmZpZ1R5cGVzIiwicHJvcGVydHkiLCJPYmplY3QiLCJwcm90b3R5 cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJleHBlY3RlZFR5cGVzIiwidmFsdWUiLCJ2YWx1 ZVR5cGUiLCJ0b1N0cmluZyIsIm1hdGNoIiwidG9Mb3dlckNhc2UiLCJSZWdFeHAiLCJ0ZXN0Iiwi RXJyb3IiLCJ0b1VwcGVyQ2FzZSIsImZpbmRTaGFkb3dSb290IiwiZG9jdW1lbnRFbGVtZW50Iiwi YXR0YWNoU2hhZG93IiwiZ2V0Um9vdE5vZGUiLCJTaGFkb3dSb290IiwicGFyZW50Tm9kZSIsInJv b3QiLCJqUXVlcnlEZXRlY3Rpb24iLCJUeXBlRXJyb3IiLCJ2ZXJzaW9uIiwiZm4iLCJqcXVlcnki LCJlbXVsYXRlVHJhbnNpdGlvbkVuZCIsImV2ZW50Iiwic3BlY2lhbCIsImJpbmRUeXBlIiwiZGVs ZWdhdGVUeXBlIiwiaGFuZGxlIiwidGFyZ2V0IiwiaXMiLCJoYW5kbGVPYmoiLCJoYW5kbGVyIiwi YXBwbHkiLCJhcmd1bWVudHMiLCJOQU1FIiwiREFUQV9LRVkiLCJFVkVOVF9LRVkiLCJKUVVFUllf Tk9fQ09ORkxJQ1QiLCJFdmVudCIsIkNMT1NFIiwiQ0xPU0VEIiwiQ0xJQ0tfREFUQV9BUEkiLCJD bGFzc05hbWUiLCJBbGVydCIsIl9lbGVtZW50IiwiY2xvc2UiLCJyb290RWxlbWVudCIsIl9nZXRS b290RWxlbWVudCIsIl90cmlnZ2VyQ2xvc2VFdmVudCIsImlzRGVmYXVsdFByZXZlbnRlZCIsIl9y ZW1vdmVFbGVtZW50IiwiZGlzcG9zZSIsInJlbW92ZURhdGEiLCJwYXJlbnQiLCJjbG9zZXN0Iiwi Y2xvc2VFdmVudCIsInJlbW92ZUNsYXNzIiwiaGFzQ2xhc3MiLCJfZGVzdHJveUVsZW1lbnQiLCJk ZXRhY2giLCJyZW1vdmUiLCJfalF1ZXJ5SW50ZXJmYWNlIiwiZWFjaCIsIiRlbGVtZW50IiwiZGF0 YSIsIl9oYW5kbGVEaXNtaXNzIiwiYWxlcnRJbnN0YW5jZSIsInByZXZlbnREZWZhdWx0Iiwib24i LCJDb25zdHJ1Y3RvciIsIm5vQ29uZmxpY3QiLCJEQVRBX0FQSV9LRVkiLCJTZWxlY3RvciIsIkZP Q1VTX0JMVVJfREFUQV9BUEkiLCJMT0FEX0RBVEFfQVBJIiwiQnV0dG9uIiwidG9nZ2xlIiwidHJp Z2dlckNoYW5nZUV2ZW50IiwiYWRkQXJpYVByZXNzZWQiLCJpbnB1dCIsInR5cGUiLCJjaGVja2Vk IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwidGFnTmFtZSIsImZvY3Vz IiwiaGFzQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwidG9nZ2xlQ2xhc3MiLCJidXR0b24iLCJp bnB1dEJ0biIsIndpbmRvdyIsImJ1dHRvbnMiLCJzbGljZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJp IiwibGVuIiwibGVuZ3RoIiwiYWRkIiwiRGVmYXVsdCIsImludGVydmFsIiwia2V5Ym9hcmQiLCJz bGlkZSIsInBhdXNlIiwid3JhcCIsInRvdWNoIiwiRGVmYXVsdFR5cGUiLCJEaXJlY3Rpb24iLCJT TElERSIsIlNMSUQiLCJLRVlET1dOIiwiTU9VU0VFTlRFUiIsIk1PVVNFTEVBVkUiLCJUT1VDSFNU QVJUIiwiVE9VQ0hNT1ZFIiwiVE9VQ0hFTkQiLCJQT0lOVEVSRE9XTiIsIlBPSU5URVJVUCIsIkRS QUdfU1RBUlQiLCJQb2ludGVyVHlwZSIsIlRPVUNIIiwiUEVOIiwiQ2Fyb3VzZWwiLCJfaXRlbXMi LCJfaW50ZXJ2YWwiLCJfYWN0aXZlRWxlbWVudCIsIl9pc1BhdXNlZCIsIl9pc1NsaWRpbmciLCJ0 b3VjaFRpbWVvdXQiLCJ0b3VjaFN0YXJ0WCIsInRvdWNoRGVsdGFYIiwiX2NvbmZpZyIsIl9nZXRD b25maWciLCJfaW5kaWNhdG9yc0VsZW1lbnQiLCJfdG91Y2hTdXBwb3J0ZWQiLCJuYXZpZ2F0b3Ii LCJtYXhUb3VjaFBvaW50cyIsIl9wb2ludGVyRXZlbnQiLCJQb2ludGVyRXZlbnQiLCJNU1BvaW50 ZXJFdmVudCIsIl9hZGRFdmVudExpc3RlbmVycyIsIm5leHQiLCJfc2xpZGUiLCJuZXh0V2hlblZp c2libGUiLCJoaWRkZW4iLCJwcmV2IiwiY3ljbGUiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2 YWwiLCJ2aXNpYmlsaXR5U3RhdGUiLCJiaW5kIiwidG8iLCJpbmRleCIsImFjdGl2ZUluZGV4Iiwi X2dldEl0ZW1JbmRleCIsImRpcmVjdGlvbiIsIm9mZiIsIl9vYmplY3RTcHJlYWQyIiwiX2hhbmRs ZVN3aXBlIiwiYWJzRGVsdGF4IiwiYWJzIiwiX3RoaXMyIiwiX2tleWRvd24iLCJfYWRkVG91Y2hF dmVudExpc3RlbmVycyIsIl90aGlzMyIsInN0YXJ0Iiwib3JpZ2luYWxFdmVudCIsInBvaW50ZXJU eXBlIiwiY2xpZW50WCIsInRvdWNoZXMiLCJlbmQiLCJjbGVhclRpbWVvdXQiLCJlIiwibW92ZSIs IndoaWNoIiwiaW5kZXhPZiIsIl9nZXRJdGVtQnlEaXJlY3Rpb24iLCJpc05leHREaXJlY3Rpb24i LCJpc1ByZXZEaXJlY3Rpb24iLCJsYXN0SXRlbUluZGV4IiwiaXRlbUluZGV4IiwiX3RyaWdnZXJT bGlkZUV2ZW50IiwicmVsYXRlZFRhcmdldCIsImV2ZW50RGlyZWN0aW9uTmFtZSIsInRhcmdldElu ZGV4IiwiZnJvbUluZGV4Iiwic2xpZGVFdmVudCIsImZyb20iLCJfc2V0QWN0aXZlSW5kaWNhdG9y RWxlbWVudCIsImluZGljYXRvcnMiLCJuZXh0SW5kaWNhdG9yIiwiY2hpbGRyZW4iLCJhZGRDbGFz cyIsImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwib3JkZXJDbGFzc05hbWUiLCJfdGhpczQiLCJhY3Rp dmVFbGVtZW50SW5kZXgiLCJuZXh0RWxlbWVudCIsIm5leHRFbGVtZW50SW5kZXgiLCJpc0N5Y2xp bmciLCJzbGlkRXZlbnQiLCJuZXh0RWxlbWVudEludGVydmFsIiwicGFyc2VJbnQiLCJkZWZhdWx0 SW50ZXJ2YWwiLCJhY3Rpb24iLCJyaWRlIiwiX2RhdGFBcGlDbGlja0hhbmRsZXIiLCJzbGlkZUlu ZGV4IiwiY2Fyb3VzZWxzIiwiJGNhcm91c2VsIiwiU0hPVyIsIlNIT1dOIiwiSElERSIsIkhJRERF TiIsIkRpbWVuc2lvbiIsIkNvbGxhcHNlIiwiX2lzVHJhbnNpdGlvbmluZyIsIl90cmlnZ2VyQXJy YXkiLCJpZCIsInRvZ2dsZUxpc3QiLCJlbGVtIiwiZmlsdGVyRWxlbWVudCIsImZpbHRlciIsImZv dW5kRWxlbSIsIl9zZWxlY3RvciIsInB1c2giLCJfcGFyZW50IiwiX2dldFBhcmVudCIsIl9hZGRB cmlhQW5kQ29sbGFwc2VkQ2xhc3MiLCJoaWRlIiwic2hvdyIsImFjdGl2ZXMiLCJhY3RpdmVzRGF0 YSIsIm5vdCIsInN0YXJ0RXZlbnQiLCJkaW1lbnNpb24iLCJfZ2V0RGltZW5zaW9uIiwic3R5bGUi LCJhdHRyIiwic2V0VHJhbnNpdGlvbmluZyIsInNjcm9sbFNpemUiLCJnZXRCb3VuZGluZ0NsaWVu dFJlY3QiLCJ0cmlnZ2VyQXJyYXlMZW5ndGgiLCJpc1RyYW5zaXRpb25pbmciLCJfZ2V0VGFyZ2V0 RnJvbUVsZW1lbnQiLCJ0cmlnZ2VyQXJyYXkiLCJpc09wZW4iLCIkdGhpcyIsImN1cnJlbnRUYXJn ZXQiLCIkdHJpZ2dlciIsInNlbGVjdG9ycyIsIiR0YXJnZXQiLCJSRUdFWFBfS0VZRE9XTiIsIkFS Uk9XX1VQX0tFWUNPREUiLCJDTElDSyIsIktFWURPV05fREFUQV9BUEkiLCJLRVlVUF9EQVRBX0FQ SSIsIkF0dGFjaG1lbnRNYXAiLCJvZmZzZXQiLCJmbGlwIiwiYm91bmRhcnkiLCJyZWZlcmVuY2Ui LCJkaXNwbGF5IiwicG9wcGVyQ29uZmlnIiwiRHJvcGRvd24iLCJfcG9wcGVyIiwiX21lbnUiLCJf Z2V0TWVudUVsZW1lbnQiLCJfaW5OYXZiYXIiLCJfZGV0ZWN0TmF2YmFyIiwiZGlzYWJsZWQiLCJp c0FjdGl2ZSIsIl9jbGVhck1lbnVzIiwidXNlUG9wcGVyIiwic2hvd0V2ZW50IiwiX2dldFBhcmVu dEZyb21FbGVtZW50IiwiUG9wcGVyIiwicmVmZXJlbmNlRWxlbWVudCIsIl9nZXRQb3BwZXJDb25m aWciLCJib2R5Iiwibm9vcCIsImhpZGVFdmVudCIsImRlc3Ryb3kiLCJ1cGRhdGUiLCJzY2hlZHVs ZVVwZGF0ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNvbnN0cnVjdG9yIiwiX2dldFBsYWNlbWVudCIs IiRwYXJlbnREcm9wZG93biIsInBsYWNlbWVudCIsIl9nZXRPZmZzZXQiLCJvZmZzZXRzIiwibW9k aWZpZXJzIiwiZW5hYmxlZCIsInByZXZlbnRPdmVyZmxvdyIsImJvdW5kYXJpZXNFbGVtZW50Iiwi YXBwbHlTdHlsZSIsInRvZ2dsZXMiLCJjb250ZXh0IiwiY2xpY2tFdmVudCIsImRyb3Bkb3duTWVu dSIsIl9kYXRhQXBpS2V5ZG93bkhhbmRsZXIiLCJpdGVtcyIsIml0ZW0iLCJiYWNrZHJvcCIsIkhJ REVfUFJFVkVOVEVEIiwiRk9DVVNJTiIsIlJFU0laRSIsIkNMSUNLX0RJU01JU1MiLCJLRVlET1dO X0RJU01JU1MiLCJNT1VTRVVQX0RJU01JU1MiLCJNT1VTRURPV05fRElTTUlTUyIsIk1vZGFsIiwi X2RpYWxvZyIsIl9iYWNrZHJvcCIsIl9pc1Nob3duIiwiX2lzQm9keU92ZXJmbG93aW5nIiwiX2ln bm9yZUJhY2tkcm9wQ2xpY2siLCJfc2Nyb2xsYmFyV2lkdGgiLCJfY2hlY2tTY3JvbGxiYXIiLCJf c2V0U2Nyb2xsYmFyIiwiX2FkanVzdERpYWxvZyIsIl9zZXRFc2NhcGVFdmVudCIsIl9zZXRSZXNp emVFdmVudCIsIl9zaG93QmFja2Ryb3AiLCJfc2hvd0VsZW1lbnQiLCJ0cmFuc2l0aW9uIiwiX2hp ZGVNb2RhbCIsImZvckVhY2giLCJodG1sRWxlbWVudCIsImhhbmRsZVVwZGF0ZSIsIl90cmlnZ2Vy QmFja2Ryb3BUcmFuc2l0aW9uIiwiaGlkZUV2ZW50UHJldmVudGVkIiwiZGVmYXVsdFByZXZlbnRl ZCIsIm1vZGFsVHJhbnNpdGlvbkR1cmF0aW9uIiwibW9kYWxCb2R5IiwiTm9kZSIsIkVMRU1FTlRf Tk9ERSIsImFwcGVuZENoaWxkIiwicmVtb3ZlQXR0cmlidXRlIiwic2Nyb2xsVG9wIiwiX2VuZm9y Y2VGb2N1cyIsInRyYW5zaXRpb25Db21wbGV0ZSIsInNob3duRXZlbnQiLCJfdGhpczUiLCJoYXMi LCJfdGhpczYiLCJfdGhpczciLCJfdGhpczgiLCJfcmVzZXRBZGp1c3RtZW50cyIsIl9yZXNldFNj cm9sbGJhciIsIl9yZW1vdmVCYWNrZHJvcCIsImNhbGxiYWNrIiwiX3RoaXM5IiwiYW5pbWF0ZSIs ImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJhcHBlbmRUbyIsImJhY2tkcm9wVHJhbnNpdGlv bkR1cmF0aW9uIiwiY2FsbGJhY2tSZW1vdmUiLCJpc01vZGFsT3ZlcmZsb3dpbmciLCJzY3JvbGxI ZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInJlY3Qi LCJsZWZ0IiwicmlnaHQiLCJpbm5lcldpZHRoIiwiX2dldFNjcm9sbGJhcldpZHRoIiwiX3RoaXMx MCIsImZpeGVkQ29udGVudCIsInN0aWNreUNvbnRlbnQiLCJhY3R1YWxQYWRkaW5nIiwiY2FsY3Vs YXRlZFBhZGRpbmciLCJhY3R1YWxNYXJnaW4iLCJtYXJnaW5SaWdodCIsImNhbGN1bGF0ZWRNYXJn aW4iLCJwYWRkaW5nIiwiZWxlbWVudHMiLCJtYXJnaW4iLCJzY3JvbGxEaXYiLCJzY3JvbGxiYXJX aWR0aCIsIndpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmVDaGlsZCIsIl90aGlzMTEiLCJ1cmlB dHRycyIsIkRlZmF1bHRXaGl0ZWxpc3QiLCIqIiwiYSIsImFyZWEiLCJiIiwiYnIiLCJjb2wiLCJj b2RlIiwiZGl2IiwiZW0iLCJociIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImltZyIs ImxpIiwib2wiLCJwIiwicHJlIiwicyIsInNtYWxsIiwic3BhbiIsInN1YiIsInN1cCIsInN0cm9u ZyIsInUiLCJ1bCIsIlNBRkVfVVJMX1BBVFRFUk4iLCJEQVRBX1VSTF9QQVRURVJOIiwic2FuaXRp emVIdG1sIiwidW5zYWZlSHRtbCIsIndoaXRlTGlzdCIsInNhbml0aXplRm4iLCJjcmVhdGVkRG9j dW1lbnQiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJ3aGl0ZWxpc3RLZXlzIiwia2V5 cyIsIl9sb29wIiwiZWwiLCJlbE5hbWUiLCJub2RlTmFtZSIsImF0dHJpYnV0ZUxpc3QiLCJhdHRy aWJ1dGVzIiwid2hpdGVsaXN0ZWRBdHRyaWJ1dGVzIiwiY29uY2F0IiwiYWxsb3dlZEF0dHJpYnV0 ZUxpc3QiLCJhdHRyTmFtZSIsIm5vZGVWYWx1ZSIsInJlZ0V4cCIsImF0dHJSZWdleCIsImwiLCJh bGxvd2VkQXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiQ0xBU1NfUFJFRklYIiwiQlNDTFNfUFJFRklY X1JFR0VYIiwiRElTQUxMT1dFRF9BVFRSSUJVVEVTIiwiYW5pbWF0aW9uIiwidGVtcGxhdGUiLCJ0 aXRsZSIsImRlbGF5IiwiaHRtbCIsImNvbnRhaW5lciIsImZhbGxiYWNrUGxhY2VtZW50Iiwic2Fu aXRpemUiLCJBVVRPIiwiVE9QIiwiUklHSFQiLCJCT1RUT00iLCJMRUZUIiwiSG92ZXJTdGF0ZSIs IklOU0VSVEVEIiwiRk9DVVNPVVQiLCJUcmlnZ2VyIiwiVG9vbHRpcCIsIl9pc0VuYWJsZWQiLCJf dGltZW91dCIsIl9ob3ZlclN0YXRlIiwiX2FjdGl2ZVRyaWdnZXIiLCJ0aXAiLCJfc2V0TGlzdGVu ZXJzIiwiZW5hYmxlIiwiZGlzYWJsZSIsInRvZ2dsZUVuYWJsZWQiLCJkYXRhS2V5IiwiX2dldERl bGVnYXRlQ29uZmlnIiwiY2xpY2siLCJfaXNXaXRoQWN0aXZlVHJpZ2dlciIsIl9lbnRlciIsIl9s ZWF2ZSIsImdldFRpcEVsZW1lbnQiLCJfaGlkZU1vZGFsSGFuZGxlciIsImlzV2l0aENvbnRlbnQi LCJzaGFkb3dSb290IiwiaXNJblRoZURvbSIsIm93bmVyRG9jdW1lbnQiLCJ0aXBJZCIsInNldENv bnRlbnQiLCJhdHRhY2htZW50IiwiX2dldEF0dGFjaG1lbnQiLCJhZGRBdHRhY2htZW50Q2xhc3Mi LCJfZ2V0Q29udGFpbmVyIiwiY29tcGxldGUiLCJfZml4VHJhbnNpdGlvbiIsInByZXZIb3ZlclN0 YXRlIiwiX2NsZWFuVGlwQ2xhc3MiLCJnZXRUaXRsZSIsInNldEVsZW1lbnRDb250ZW50IiwiY29u dGVudCIsInRleHQiLCJlbXB0eSIsImFwcGVuZCIsImJlaGF2aW9yIiwiYXJyb3ciLCJvbkNyZWF0 ZSIsIm9yaWdpbmFsUGxhY2VtZW50IiwiX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSIsIm9u VXBkYXRlIiwiZmluZCIsImV2ZW50SW4iLCJldmVudE91dCIsIl9maXhUaXRsZSIsInRpdGxlVHlw ZSIsImRhdGFBdHRyaWJ1dGVzIiwiZGF0YUF0dHIiLCJrZXkiLCIkdGlwIiwidGFiQ2xhc3MiLCJq b2luIiwicG9wcGVyRGF0YSIsInBvcHBlckluc3RhbmNlIiwiaW5zdGFuY2UiLCJwb3BwZXIiLCJp bml0Q29uZmlnQW5pbWF0aW9uIiwiUG9wb3ZlciIsIl9nZXRDb250ZW50IiwibWV0aG9kIiwiQUNU SVZBVEUiLCJTQ1JPTEwiLCJPZmZzZXRNZXRob2QiLCJTY3JvbGxTcHkiLCJfc2Nyb2xsRWxlbWVu dCIsIl9vZmZzZXRzIiwiX3RhcmdldHMiLCJfYWN0aXZlVGFyZ2V0IiwiX3Njcm9sbEhlaWdodCIs Il9wcm9jZXNzIiwicmVmcmVzaCIsImF1dG9NZXRob2QiLCJvZmZzZXRNZXRob2QiLCJvZmZzZXRC YXNlIiwiX2dldFNjcm9sbFRvcCIsIl9nZXRTY3JvbGxIZWlnaHQiLCJtYXAiLCJ0YXJnZXRTZWxl Y3RvciIsInRhcmdldEJDUiIsImhlaWdodCIsInRvcCIsInNvcnQiLCJwYWdlWU9mZnNldCIsIm1h eCIsIl9nZXRPZmZzZXRIZWlnaHQiLCJpbm5lckhlaWdodCIsIm1heFNjcm9sbCIsIl9hY3RpdmF0 ZSIsIl9jbGVhciIsInF1ZXJpZXMiLCIkbGluayIsInBhcmVudHMiLCJub2RlIiwic2Nyb2xsU3B5 cyIsIiRzcHkiLCJUYWIiLCJwcmV2aW91cyIsImxpc3RFbGVtZW50IiwiaXRlbVNlbGVjdG9yIiwi bWFrZUFycmF5IiwiaGlkZGVuRXZlbnQiLCJfdHJhbnNpdGlvbkNvbXBsZXRlIiwiYWN0aXZlIiwi ZHJvcGRvd25DaGlsZCIsImRyb3Bkb3duRWxlbWVudCIsImRyb3Bkb3duVG9nZ2xlTGlzdCIsImF1 dG9oaWRlIiwiVG9hc3QiLCJfY2xvc2UiXSwibWFwcGluZ3MiOiI7Ozs7O2t2Q0FlQSxJQUFNQSxF QUFpQixnQkFzQnZCLFNBQVNDLEVBQXNCQyxHQUFVLElBQUFDLEVBQUFDLEtBQ25DQyxHQUFTLEVB WWIsT0FWQUMsRUFBRUYsTUFBTUcsSUFBSUMsRUFBS1IsZUFBZ0IsV0FDL0JLLEdBQVMsSUFHWEks V0FBVyxXQUNKSixHQUNIRyxFQUFLRSxxQkFBcUJQLElBRTNCRCxHQUVJRSxLQWNULElBQU1JLEVB QU8sQ0FFWFIsZUFBZ0Isa0JBRWhCVyxPQUpXLFNBSUpDLEdBQ0wsS0FFRUEsTUF2RFUsSUF1REdD LEtBQUtDLFVBQ1hDLFNBQVNDLGVBQWVKLEtBQ2pDLE9BQU9BLEdBR1RLLHVCQVpXLFNBWVlDLEdB Q3JCLElBQUlDLEVBQVdELEVBQVFFLGFBQWEsZUFFcEMsSUFBS0QsR0FBeUIsTUFBYkEsRUFBa0Is Q0FDakMsSUFBTUUsRUFBV0gsRUFBUUUsYUFBYSxRQUN0Q0QsRUFBV0UsR0FBeUIsTUFBYkEsRUFB bUJBLEVBQVNDLE9BQVMsR0FHOUQsSUFDRSxPQUFPUCxTQUFTUSxjQUFjSixHQUFZQSxFQUFXLEtB Q3JELE1BQU9LLEdBQ1AsT0FBTyxPQUlYQyxpQ0EzQlcsU0EyQnNCUCxHQUMvQixJQUFLQSxFQUNI LE9BQU8sRUFJVCxJQUFJUSxFQUFxQnBCLEVBQUVZLEdBQVNTLElBQUksdUJBQ3BDQyxFQUFrQnRC LEVBQUVZLEdBQVNTLElBQUksb0JBRS9CRSxFQUEwQkMsV0FBV0osR0FDckNLLEVBQXVCRCxXQUFX RixHQUd4QyxPQUFLQyxHQUE0QkUsR0FLakNMLEVBQXFCQSxFQUFtQk0sTUFBTSxLQUFLLEdBQ25E SixFQUFrQkEsRUFBZ0JJLE1BQU0sS0FBSyxHQTdGakIsS0ErRnBCRixXQUFXSixHQUFzQkksV0FB V0YsS0FQM0MsR0FVWEssT0FuRFcsU0FtREpmLEdBQ0wsT0FBT0EsRUFBUWdCLGNBR2pCeEIscUJB dkRXLFNBdURVUSxHQUNuQlosRUFBRVksR0FBU2lCLFFBQVFuQyxJQUlyQm9DLHNCQTVEVyxXQTZE VCxPQUFPQyxRQUFRckMsSUFHakJzQyxVQWhFVyxTQWdFREMsR0FDUixPQUFRQSxFQUFJLElBQU1B LEdBQUtDLFVBR3pCQyxnQkFwRVcsU0FvRUtDLEVBQWVDLEVBQVFDLEdBQ3JDLElBQUssSUFBTUMs S0FBWUQsRUFDckIsR0FBSUUsT0FBT0MsVUFBVUMsZUFBZUMsS0FBS0wsRUFBYUMsR0FBVyxDQUMv RCxJQUFNSyxFQUFnQk4sRUFBWUMsR0FDNUJNLEVBQWdCUixFQUFPRSxHQUN2Qk8sRUFBZ0JELEdB QVMzQyxFQUFLOEIsVUFBVWEsR0FDMUMsV0F0SElaLEVBc0hlWSxFQXJIdEIsR0FBR0UsU0FBU0os S0FBS1YsR0FBS2UsTUFBTSxlQUFlLEdBQUdDLGVBdUgvQyxJQUFLLElBQUlDLE9BQU9OLEdBQWVP LEtBQUtMLEdBQ2xDLE1BQU0sSUFBSU0sTUFDTGhCLEVBQWNpQixjQUFqQixhQUNXZCxFQURYLG9C QUN1Q08sRUFEdkMsd0JBRXNCRixFQUZ0QixNQTFIWixJQUFnQlgsR0FrSWRxQixlQXRGVyxTQXNG STFDLEdBQ2IsSUFBS0gsU0FBUzhDLGdCQUFnQkMsYUFDNUIsT0FBTyxLQUlULEdBQW1DLG1CQUF4 QjVDLEVBQVE2QyxZQUtuQixPQUFJN0MsYUFBbUI4QyxXQUNkOUMsRUFJSkEsRUFBUStDLFdBSU56 RCxFQUFLb0QsZUFBZTFDLEVBQVErQyxZQUgxQixLQVZQLElBQU1DLEVBQU9oRCxFQUFRNkMsY0FD ckIsT0FBT0csYUFBZ0JGLFdBQWFFLEVBQU8sTUFlL0NDLGdCQTdHVyxXQThHVCxHQUFpQixvQkFB TjdELEVBQ1QsTUFBTSxJQUFJOEQsVUFBVSxrR0FHdEIsSUFBTUMsRUFBVS9ELEVBQUVnRSxHQUFH QyxPQUFPdkMsTUFBTSxLQUFLLEdBQUdBLE1BQU0sS0FPaEQsR0FBSXFDLEVBQVEsR0FMSSxHQUtZ QSxFQUFRLEdBSm5CLEdBRkEsSUFNb0NBLEVBQVEsSUFKNUMsSUFJK0RBLEVBQVEsSUFBbUJBLEVB QVEsR0FIbEcsR0FDQSxHQUVtSEEsRUFBUSxHQUMxSSxNQUFNLElBQUlYLE1BQU0saUZBS3RCbEQs RUFBSzJELGtCQXpJSDdELEVBQUVnRSxHQUFHRSxxQkFBdUJ2RSxFQUM1QkssRUFBRW1FLE1BQU1D LFFBQVFsRSxFQUFLUixnQkE5QmQsQ0FDTDJFLFNBQVUzRSxFQUNWNEUsYUFBYzVFLEVBQ2Q2RSxP QUhLLFNBR0VKLEdBQ0wsR0FBSW5FLEVBQUVtRSxFQUFNSyxRQUFRQyxHQUFHM0UsTUFDckIsT0FB T3FFLEVBQU1PLFVBQVVDLFFBQVFDLE1BQU05RSxLQUFNK0UsYUNkbkQsSUFBTUMsRUFBc0IsUUFF dEJDLEVBQXNCLFdBQ3RCQyxFQUFTLElBQWlCRCxFQUUxQkUsRUFBc0JqRixFQUFFZ0UsR0FBR2Ms R0FNM0JJLEVBQVEsQ0FDWkMsTUFBSyxRQUFvQkgsRUFDekJJLE9BQU0sU0FBb0JKLEVBQzFCSyxl QUFjLFFBQVdMLEVBVkMsYUFhdEJNLEVBQ0ksUUFESkEsRUFFSSxPQUZKQSxFQUdJLE9BU0pDLGFB Q0osU0FBQUEsRUFBWTNFLEdBQ1ZkLEtBQUswRixTQUFXNUUsNkJBV2xCNkUsTUFBQSxTQUFNN0Us R0FDSixJQUFJOEUsRUFBYzVGLEtBQUswRixTQUNuQjVFLElBQ0Y4RSxFQUFjNUYsS0FBSzZGLGdC QUFnQi9FLElBR2pCZCxLQUFLOEYsbUJBQW1CRixHQUU1Qkcsc0JBSWhCL0YsS0FBS2dHLGVBQWVK LE1BR3RCSyxRQUFBLFdBQ0UvRixFQUFFZ0csV0FBV2xHLEtBQUswRixTQUFVVCxHQUM1QmpGLEtB QUswRixTQUFXLFFBS2xCRyxnQkFBQSxTQUFnQi9FLEdBQ2QsSUFBTUMsRUFBV1gsRUFBS1MsdUJB QXVCQyxHQUN6Q3FGLEdBQWEsRUFVakIsT0FSSXBGLElBQ0ZvRixFQUFTeEYsU0FBU1EsY0FBY0os SUFJaENvRixFQURHQSxHQUNNakcsRUFBRVksR0FBU3NGLFFBQVgsSUFBdUJaLEdBQW1CLE1BTXZE TSxtQkFBQSxTQUFtQmhGLEdBQ2pCLElBQU11RixFQUFhbkcsRUFBRWtGLE1BQU1BLEVBQU1DLE9B R2pDLE9BREFuRixFQUFFWSxHQUFTaUIsUUFBUXNFLEdBQ1pBLEtBR1RMLGVBQUEsU0FBZWxGLEdB QVMsSUFBQWYsRUFBQUMsS0FHdEIsR0FGQUUsRUFBRVksR0FBU3dGLFlBQVlkLEdBRWxCdEYsRUFB RVksR0FBU3lGLFNBQVNmLEdBQXpCLENBS0EsSUFBTWxFLEVBQXFCbEIsRUFBS2lCLGlDQUFpQ1As R0FFakVaLEVBQUVZLEdBQ0NYLElBQUlDLEVBQUtSLGVBQWdCLFNBQUN5RSxHQUFELE9BQVd0RSxF QUFLeUcsZ0JBQWdCMUYsRUFBU3VELEtBQ2xFRCxxQkFBcUI5QyxRQVJ0QnRCLEtBQUt3RyxnQkFB Z0IxRixNQVd6QjBGLGdCQUFBLFNBQWdCMUYsR0FDZFosRUFBRVksR0FDQzJGLFNBQ0ExRSxRQUFR cUQsRUFBTUUsUUFDZG9CLFlBS0VDLGlCQUFQLFNBQXdCcEUsR0FDdEIsT0FBT3ZDLEtBQUs0RyxL QUFLLFdBQ2YsSUFBTUMsRUFBVzNHLEVBQUVGLE1BQ2Y4RyxFQUFhRCxFQUFTQyxLQUFLN0IsR0FF MUI2QixJQUNIQSxFQUFPLElBQUlyQixFQUFNekYsTUFDakI2RyxFQUFTQyxLQUFLN0IsRUFBVTZC LElBR1gsVUFBWHZFLEdBQ0Z1RSxFQUFLdkUsR0FBUXZDLFdBS1orRyxlQUFQLFNBQXNCQyxHQUNw QixPQUFPLFNBQVUzQyxHQUNYQSxHQUNGQSxFQUFNNEMsaUJBR1JELEVBQWNyQixNQUFNM0YsZ0RB L0Z0QixNQXBDd0IsaUJBOEk1QkUsRUFBRVMsVUFBVXVHLEdBQ1Y5QixFQUFNRyxlQXhJSSx5QkEw SVZFLEVBQU1zQixlQUFlLElBQUl0QixJQVMzQnZGLEVBQUVnRSxHQUFHYyxHQUFvQlMsRUFBTWtC LGlCQUMvQnpHLEVBQUVnRSxHQUFHYyxHQUFNbUMsWUFBYzFCLEVBQ3pCdkYsRUFBRWdFLEdBQUdj LEdBQU1vQyxXQUFjLFdBRXZCLE9BREFsSCxFQUFFZ0UsR0FBR2MsR0FBUUcsRUFDTk0sRUFBTWtC LGtCQ2hLZixJQUFNM0IsRUFBc0IsU0FFdEJDLEVBQXNCLFlBQ3RCQyxFQUFTLElBQWlCRCxFQUMx Qm9DLEVBQXNCLFlBQ3RCbEMsRUFBc0JqRixFQUFFZ0UsR0FBR2MsR0FFM0JRLEVBQ0ssU0FETEEs RUFFSyxNQUZMQSxFQUdLLFFBR0w4QixFQUNtQiwwQkFEbkJBLEVBRW1CLDBCQUZuQkEsRUFHbUIs eUJBSG5CQSxFQUltQiwrQkFKbkJBLEVBS21CLDZCQUxuQkEsRUFNbUIsVUFObkJBLEVBT21CLE9B R25CbEMsRUFBUSxDQUNaRyxlQUFjLFFBQWdCTCxFQUFZbUMsRUFDMUNFLG9CQUFzQixRQUFRckMs RUFBWW1DLEVBQXBCLFFBQ1NuQyxFQUFZbUMsRUFDM0NHLGNBQWEsT0FBZ0J0QyxFQUFZbUMsR0FT ckNJLGFBQ0osU0FBQUEsRUFBWTNHLEdBQ1ZkLEtBQUswRixTQUFXNUUsNkJBV2xCNEcsT0FBQSxX QUNFLElBQUlDLEdBQXFCLEVBQ3JCQyxHQUFpQixFQUNmaEMsRUFBYzFGLEVBQUVGLEtBQUswRixV QUFVVSxRQUNuQ2tCLEdBQ0EsR0FFRixHQUFJMUIsRUFBYSxDQUNmLElBQU1pQyxFQUFRN0gsS0FB SzBGLFNBQVN2RSxjQUFjbUcsR0FFMUMsR0FBSU8sRUFBTyxDQUNULEdBQW1CLFVBQWZBLEVBQU1D LEtBQ1IsR0FBSUQsRUFBTUUsU0FDUi9ILEtBQUswRixTQUFTc0MsVUFBVUMsU0FBU3pDLEdBQ2pD bUMsR0FBcUIsTUFDaEIsQ0FDTCxJQUFNTyxFQUFnQnRDLEVBQVl6RSxjQUFjbUcsR0FFNUNZLEdB Q0ZoSSxFQUFFZ0ksR0FBZTVCLFlBQVlkLE9BR1QsYUFBZnFDLEVBQU1DLEtBQ2UsVUFBMUI5SCxL QUFLMEYsU0FBU3lDLFNBQXVCTixFQUFNRSxVQUFZL0gsS0FBSzBGLFNBQVNzQyxVQUFVQyxTQUFT ekMsS0FDMUZtQyxHQUFxQixHQUl2QkEsR0FBcUIsRUFHbkJBLElBQ0ZFLEVBQU1FLFNBQVcvSCxL QUFLMEYsU0FBU3NDLFVBQVVDLFNBQVN6QyxHQUNsRHRGLEVBQUUySCxHQUFPOUYsUUFBUSxXQUdu QjhGLEVBQU1PLFFBQ05SLEdBQWlCLEdBSWY1SCxLQUFLMEYsU0FBUzJDLGFBQWEsYUFBZXJJLEtB QUswRixTQUFTc0MsVUFBVUMsU0FBUyxjQUMzRUwsR0FDRjVILEtBQUswRixTQUFTNEMsYUFBYSxn QkFDeEJ0SSxLQUFLMEYsU0FBU3NDLFVBQVVDLFNBQVN6QyxJQUdsQ21DLEdBQ0Z6SCxFQUFFRixL QUFLMEYsVUFBVTZDLFlBQVkvQyxPQUtuQ1MsUUFBQSxXQUNFL0YsRUFBRWdHLFdBQVdsRyxLQUFL MEYsU0FBVVQsR0FDNUJqRixLQUFLMEYsU0FBVyxRQUtYaUIsaUJBQVAsU0FBd0JwRSxHQUN0QixP QUFPdkMsS0FBSzRHLEtBQUssV0FDZixJQUFJRSxFQUFPNUcsRUFBRUYsTUFBTThHLEtBQUs3QixH QUVuQjZCLElBQ0hBLEVBQU8sSUFBSVcsRUFBT3pILE1BQ2xCRSxFQUFFRixNQUFNOEcsS0FBSzdC LEVBQVU2QixJQUdWLFdBQVh2RSxHQUNGdUUsRUFBS3ZFLGdEQTNFVCxNQTNDd0IsaUJBa0k1QnJD LEVBQUVTLFVBQ0N1RyxHQUFHOUIsRUFBTUcsZUFBZ0IrQixFQUE2QixTQUFDakQsR0FDdEQsSUFB SW1FLEVBQVNuRSxFQUFNSyxPQU1uQixHQUpLeEUsRUFBRXNJLEdBQVFqQyxTQUFTZixLQUN0QmdE LEVBQVN0SSxFQUFFc0ksR0FBUXBDLFFBQVFrQixHQUFpQixLQUd6Q2tCLEdBQVVBLEVBQU9ILGFB QWEsYUFBZUcsRUFBT1IsVUFBVUMsU0FBUyxZQUMxRTVELEVBQU00QyxxQkFDRCxDQUNMLElBQU13 QixFQUFXRCxFQUFPckgsY0FBY21HLEdBRXRDLEdBQUltQixJQUFhQSxFQUFTSixhQUFhLGFBQWVJ LEVBQVNULFVBQVVDLFNBQVMsYUFFaEYsWUFEQTVELEVBQU00QyxpQkFJUlEsRUFBT2QsaUJBQWlC OUQsS0FBSzNDLEVBQUVzSSxHQUFTLGFBRzNDdEIsR0FBRzlCLEVBQU1tQyxvQkFBcUJELEVBQTZC LFNBQUNqRCxHQUMzRCxJQUFNbUUsRUFBU3RJLEVBQUVtRSxFQUFNSyxRQUFRMEIsUUFBUWtCLEdB QWlCLEdBQ3hEcEgsRUFBRXNJLEdBQVFELFlBQVkvQyxFQUFpQixlQUFlbkMsS0FBS2dCLEVBQU15 RCxTQUdyRTVILEVBQUV3SSxRQUFReEIsR0FBRzlCLEVBQU1vQyxjQUFlLFdBS2hDLElBREEsSUFB SW1CLEVBQVUsR0FBR0MsTUFBTS9GLEtBQUtsQyxTQUFTa0ksaUJBQWlCdkIsSUFDN0N3QixFQUFJ LEVBQUdDLEVBQU1KLEVBQVFLLE9BQVFGLEVBQUlDLEVBQUtELElBQUssQ0FDbEQsSUFBTU4sRUFB U0csRUFBUUcsR0FDakJqQixFQUFRVyxFQUFPckgsY0FBY21HLEdBQy9CTyxFQUFNRSxTQUFXRixF QUFNUSxhQUFhLFdBQ3RDRyxFQUFPUixVQUFVaUIsSUFBSXpELEdBRXJCZ0QsRUFBT1IsVUFBVXRC LE9BQU9sQixHQU01QixJQUFLLElBQUlzRCxFQUFJLEVBQUdDLEdBRGhCSixFQUFVLEdBQUdDLE1B QU0vRixLQUFLbEMsU0FBU2tJLGlCQUFpQnZCLEtBQ3BCMEIsT0FBUUYsRUFBSUMsRUFBS0QsSUFB SyxDQUNsRCxJQUFNTixFQUFTRyxFQUFRRyxHQUNxQixTQUF4Q04sRUFBT3hILGFBQWEsZ0JBQ3RC d0gsRUFBT1IsVUFBVWlCLElBQUl6RCxHQUVyQmdELEVBQU9SLFVBQVV0QixPQUFPbEIsTUFXOUJ0 RixFQUFFZ0UsR0FBR2MsR0FBUXlDLEVBQU9kLGlCQUNwQnpHLEVBQUVnRSxHQUFHYyxHQUFNbUMs WUFBY00sRUFDekJ2SCxFQUFFZ0UsR0FBR2MsR0FBTW9DLFdBQWEsV0FFdEIsT0FEQWxILEVBQUVn RSxHQUFHYyxHQUFRRyxFQUNOc0MsRUFBT2Qsa0JDak1oQixJQUFNM0IsRUFBeUIsV0FFekJDLEVB QXlCLGNBQ3pCQyxFQUFTLElBQW9CRCxFQUM3Qm9DLEVBQXlCLFlBQ3pCbEMsRUFBeUJqRixFQUFF Z0UsR0FBR2MsR0FNOUJrRSxFQUFVLENBQ2RDLFNBQVcsSUFDWEMsVUFBVyxFQUNYQyxPQUFXLEVB Q1hDLE1BQVcsUUFDWEMsTUFBVyxFQUNYQyxPQUFXLEdBR1BDLEVBQWMsQ0FDbEJOLFNBQVcsbUJB Q1hDLFNBQVcsVUFDWEMsTUFBVyxtQkFDWEMsTUFBVyxtQkFDWEMsS0FBVyxVQUNYQyxNQUFXLFdB R1BFLEVBQ08sT0FEUEEsRUFFTyxPQUZQQSxFQUdPLE9BSFBBLEVBSU8sUUFHUHRFLEVBQVEsQ0FD WnVFLE1BQUssUUFBb0J6RSxFQUN6QjBFLEtBQUksT0FBb0IxRSxFQUN4QjJFLFFBQU8sVUFBb0Iz RSxFQUMzQjRFLFdBQVUsYUFBb0I1RSxFQUM5QjZFLFdBQVUsYUFBb0I3RSxFQUM5QjhFLFdBQVUs YUFBb0I5RSxFQUM5QitFLFVBQVMsWUFBb0IvRSxFQUM3QmdGLFNBQVEsV0FBb0JoRixFQUM1QmlG LFlBQVcsY0FBb0JqRixFQUMvQmtGLFVBQVMsWUFBb0JsRixFQUM3Qm1GLFdBQVUsWUFBbUJuRixF QUM3QnNDLGNBQWEsT0FBV3RDLEVBQVltQyxFQUNwQzlCLGVBQWMsUUFBV0wsRUFBWW1DLEdBR2pD N0IsRUFDWSxXQURaQSxFQUVZLFNBRlpBLEVBR1ksUUFIWkEsRUFJWSxzQkFKWkEsRUFLWSxxQkFM WkEsRUFNWSxxQkFOWkEsR0FPWSxxQkFQWkEsR0FTWSxnQkFHWjhCLEdBQ1UsVUFEVkEsR0FFVSx3 QkFGVkEsR0FHVSxpQkFIVkEsR0FJVSxxQkFKVkEsR0FLVSwyQ0FMVkEsR0FNVSx1QkFOVkEsR0FP VSxnQ0FQVkEsR0FRVSx5QkFHVmdELEdBQWMsQ0FDbEJDLE1BQVEsUUFDUkMsSUFBUSxPQVFKQyxj QUNKLFNBQUFBLEVBQVkzSixFQUFTeUIsR0FDbkJ2QyxLQUFLMEssT0FBaUIsS0FDdEIxSyxLQUFL MkssVUFBaUIsS0FDdEIzSyxLQUFLNEssZUFBaUIsS0FDdEI1SyxLQUFLNkssV0FBaUIsRUFDdEI3 SyxLQUFLOEssWUFBaUIsRUFDdEI5SyxLQUFLK0ssYUFBaUIsS0FDdEIvSyxLQUFLZ0wsWUFBaUIs RUFDdEJoTCxLQUFLaUwsWUFBaUIsRUFFdEJqTCxLQUFLa0wsUUFBcUJsTCxLQUFLbUwsV0FBVzVJ LEdBQzFDdkMsS0FBSzBGLFNBQXFCNUUsRUFDMUJkLEtBQUtvTCxtQkFBcUJwTCxLQUFLMEYsU0FB U3ZFLGNBQWNtRyxJQUN0RHRILEtBQUtxTCxnQkFBcUIsaUJBQWtCMUssU0FBUzhDLGlCQUE4QyxF QUEzQjZILFVBQVVDLGVBQ2xGdkwsS0FBS3dMLGNBQXFCdkosUUFBUXlHLE9BQU8rQyxjQUFnQi9D LE9BQU9nRCxnQkFFaEUxTCxLQUFLMkwsZ0RBZVBDLEtBQUEsV0FDTzVMLEtBQUs4SyxZQUNSOUss S0FBSzZMLE9BQU9uQyxNQUloQm9DLGdCQUFBLFlBR09uTCxTQUFTb0wsUUFDWDdMLEVBQUVGLEtB QUswRixVQUFVZixHQUFHLGFBQXNELFdBQXZDekUsRUFBRUYsS0FBSzBGLFVBQVVuRSxJQUFJLGVB Q3pEdkIsS0FBSzRMLFVBSVRJLEtBQUEsV0FDT2hNLEtBQUs4SyxZQUNSOUssS0FBSzZMLE9BQU9u QyxNQUloQkosTUFBQSxTQUFNakYsR0FDQ0EsSUFDSHJFLEtBQUs2SyxXQUFZLEdBR2Y3SyxLQUFL MEYsU0FBU3ZFLGNBQWNtRyxNQUM5QmxILEVBQUtFLHFCQUFxQk4sS0FBSzBGLFVBQy9CMUYsS0FB S2lNLE9BQU0sSUFHYkMsY0FBY2xNLEtBQUsySyxXQUNuQjNLLEtBQUsySyxVQUFZLFFBR25Cc0Is TUFBQSxTQUFNNUgsR0FDQ0EsSUFDSHJFLEtBQUs2SyxXQUFZLEdBR2Y3SyxLQUFLMkssWUFDUHVC LGNBQWNsTSxLQUFLMkssV0FDbkIzSyxLQUFLMkssVUFBWSxNQUdmM0ssS0FBS2tMLFFBQVEvQixX QUFhbkosS0FBSzZLLFlBQ2pDN0ssS0FBSzJLLFVBQVl3QixhQUNkeEwsU0FBU3lMLGdCQUFrQnBN LEtBQUs4TCxnQkFBa0I5TCxLQUFLNEwsTUFBTVMsS0FBS3JNLE1BQ25FQSxLQUFLa0wsUUFBUS9C LGNBS25CbUQsR0FBQSxTQUFHQyxHQUFPLElBQUF4TSxFQUFBQyxLQUNSQSxLQUFLNEssZUFBaUI1 SyxLQUFLMEYsU0FBU3ZFLGNBQWNtRyxJQUVsRCxJQUFNa0YsRUFBY3hNLEtBQUt5TSxjQUFjek0s S0FBSzRLLGdCQUU1QyxLQUFJMkIsRUFBUXZNLEtBQUswSyxPQUFPMUIsT0FBUyxHQUFLdUQsRUFB USxHQUk5QyxHQUFJdk0sS0FBSzhLLFdBQ1A1SyxFQUFFRixLQUFLMEYsVUFBVXZGLElBQUlpRixF QUFNd0UsS0FBTSxXQUFBLE9BQU03SixFQUFLdU0sR0FBR0MsU0FEakQsQ0FLQSxHQUFJQyxJQUFn QkQsRUFHbEIsT0FGQXZNLEtBQUtzSixhQUNMdEosS0FBS2lNLFFBSVAsSUFBTVMsRUFBb0JGLEVB QVJELEVBQ2Q3QyxFQUNBQSxFQUVKMUosS0FBSzZMLE9BQU9hLEVBQVcxTSxLQUFLMEssT0FBTzZC LFFBR3JDdEcsUUFBQSxXQUNFL0YsRUFBRUYsS0FBSzBGLFVBQVVpSCxJQUFJekgsR0FDckJoRixF QUFFZ0csV0FBV2xHLEtBQUswRixTQUFVVCxHQUU1QmpGLEtBQUswSyxPQUFxQixLQUMxQjFLLEtB QUtrTCxRQUFxQixLQUMxQmxMLEtBQUswRixTQUFxQixLQUMxQjFGLEtBQUsySyxVQUFxQixLQUMx QjNLLEtBQUs2SyxVQUFxQixLQUMxQjdLLEtBQUs4SyxXQUFxQixLQUMxQjlLLEtBQUs0SyxlQUFx QixLQUMxQjVLLEtBQUtvTCxtQkFBcUIsUUFLNUJELFdBQUEsU0FBVzVJLEdBTVQsT0FMQUEsRUFB TXFLLEVBQUEsR0FDRDFELEVBREMsR0FFRDNHLEdBRUxuQyxFQUFLaUMsZ0JBQWdCMkMsRUFBTXpD LEVBQVFrSCxHQUM1QmxILEtBR1RzSyxhQUFBLFdBQ0UsSUFBTUMsRUFBWXJNLEtBQUtzTSxJQUFJ L00sS0FBS2lMLGFBRWhDLEtBQUk2QixHQXhOdUIsSUF3TjNCLENBSUEsSUFBTUosRUFBWUksRUFB WTlNLEtBQUtpTCxhQUVuQ2pMLEtBQUtpTCxZQUFjLEdBR2Z5QixHQUNGMU0sS0FBS2dNLE9BSUhV LEVBQVksR0FDZDFNLEtBQUs0TCxXQUlURCxtQkFBQSxXQUFxQixJQUFBcUIsRUFBQWhOLEtBQ2ZB LEtBQUtrTCxRQUFROUIsVUFDZmxKLEVBQUVGLEtBQUswRixVQUNKd0IsR0FBRzlCLEVBQU15RSxR QUFTLFNBQUN4RixHQUFELE9BQVcySSxFQUFLQyxTQUFTNUksS0FHckIsVUFBdkJyRSxLQUFLa0ws UUFBUTVCLE9BQ2ZwSixFQUFFRixLQUFLMEYsVUFDSndCLEdBQUc5QixFQUFNMEUsV0FBWSxTQUFD ekYsR0FBRCxPQUFXMkksRUFBSzFELE1BQU1qRixLQUMzQzZDLEdBQUc5QixFQUFNMkUsV0FBWSxT QUFDMUYsR0FBRCxPQUFXMkksRUFBS2YsTUFBTTVILEtBRzVDckUsS0FBS2tMLFFBQVExQixPQUNm eEosS0FBS2tOLDZCQUlUQSx3QkFBQSxXQUEwQixJQUFBQyxFQUFBbk4sS0FDeEIsR0FBS0EsS0FB S3FMLGdCQUFWLENBSUEsSUFBTStCLEVBQVEsU0FBQy9JLEdBQ1Q4SSxFQUFLM0IsZUFBaUJsQixH QUFZakcsRUFBTWdKLGNBQWNDLFlBQVkvSixlQUNwRTRKLEVBQUtuQyxZQUFjM0csRUFBTWdKLGNB QWNFLFFBQzdCSixFQUFLM0IsZ0JBQ2YyQixFQUFLbkMsWUFBYzNHLEVBQU1nSixjQUFjRyxRQUFR LEdBQUdELFVBYWhERSxFQUFNLFNBQUNwSixHQUNQOEksRUFBSzNCLGVBQWlCbEIsR0FBWWpHLEVB QU1nSixjQUFjQyxZQUFZL0osaUJBQ3BFNEosRUFBS2xDLFlBQWM1RyxFQUFNZ0osY0FBY0UsUUFB VUosRUFBS25DLGFBR3hEbUMsRUFBS04sZUFDc0IsVUFBdkJNLEVBQUtqQyxRQUFRNUIsUUFTZjZE LEVBQUs3RCxRQUNENkQsRUFBS3BDLGNBQ1AyQyxhQUFhUCxFQUFLcEMsY0FFcEJvQyxFQUFLcEMs YUFBZTFLLFdBQVcsU0FBQ2dFLEdBQUQsT0FBVzhJLEVBQUtsQixNQUFNNUgsSUF0UzlCLElBc1Mr RDhJLEVBQUtqQyxRQUFRL0IsWUFJdkdqSixFQUFFRixLQUFLMEYsU0FBU21ELGlCQUFpQnZCLEtB QW9CSixHQUFHOUIsRUFBTWlGLFdBQVksU0FBQ3NELEdBQUQsT0FBT0EsRUFBRTFHLG1CQUMvRWpI LEtBQUt3TCxlQUNQdEwsRUFBRUYsS0FBSzBGLFVBQVV3QixHQUFHOUIsRUFBTStFLFlBQWEsU0FB QzlGLEdBQUQsT0FBVytJLEVBQU0vSSxLQUN4RG5FLEVBQUVGLEtBQUswRixVQUFVd0IsR0FBRzlC LEVBQU1nRixVQUFXLFNBQUMvRixHQUFELE9BQVdvSixFQUFJcEosS0FFcERyRSxLQUFLMEYsU0FB U3NDLFVBQVVpQixJQUFJekQsTUFFNUJ0RixFQUFFRixLQUFLMEYsVUFBVXdCLEdBQUc5QixFQUFN NEUsV0FBWSxTQUFDM0YsR0FBRCxPQUFXK0ksRUFBTS9JLEtBQ3ZEbkUsRUFBRUYsS0FBSzBGLFVB QVV3QixHQUFHOUIsRUFBTTZFLFVBQVcsU0FBQzVGLEdBQUQsT0F4QzFCLFNBQUNBLEdBRVJBLEVB QU1nSixjQUFjRyxTQUFnRCxFQUFyQ25KLEVBQU1nSixjQUFjRyxRQUFReEUsT0FDN0RtRSxFQUFL bEMsWUFBYyxFQUVuQmtDLEVBQUtsQyxZQUFjNUcsRUFBTWdKLGNBQWNHLFFBQVEsR0FBR0QsUUFB VUosRUFBS25DLFlBbUNuQjRDLENBQUt2SixLQUNyRG5FLEVBQUVGLEtBQUswRixVQUFVd0IsR0FB RzlCLEVBQU04RSxTQUFVLFNBQUM3RixHQUFELE9BQVdvSixFQUFJcEosVUFJdkQ0SSxTQUFBLFNB QVM1SSxHQUNQLElBQUksa0JBQWtCaEIsS0FBS2dCLEVBQU1LLE9BQU95RCxTQUl4QyxPQUFROUQs RUFBTXdKLE9BQ1osS0EvVHlCLEdBZ1V2QnhKLEVBQU00QyxpQkFDTmpILEtBQUtnTSxPQUNMLE1B Q0YsS0FsVXlCLEdBbVV2QjNILEVBQU00QyxpQkFDTmpILEtBQUs0TCxXQU1YYSxjQUFBLFNBQWMz TCxHQUlaLE9BSEFkLEtBQUswSyxPQUFTNUosR0FBV0EsRUFBUStDLFdBQzdCLEdBQUcrRSxNQUFN L0YsS0FBSy9CLEVBQVErQyxXQUFXZ0YsaUJBQWlCdkIsS0FDbEQsR0FDR3RILEtBQUswSyxPQUFP b0QsUUFBUWhOLE1BRzdCaU4sb0JBQUEsU0FBb0JyQixFQUFXeEUsR0FDN0IsSUFBTThGLEVBQWtC dEIsSUFBY2hELEVBQ2hDdUUsRUFBa0J2QixJQUFjaEQsRUFDaEM4QyxFQUFrQnhNLEtBQUt5TSxj QUFjdkUsR0FDckNnRyxFQUFrQmxPLEtBQUswSyxPQUFPMUIsT0FBUyxFQUk3QyxJQUh3QmlGLEdB QW1DLElBQWhCekIsR0FDbkJ3QixHQUFtQnhCLElBQWdCMEIsS0FFckNsTyxLQUFLa0wsUUFBUTNC LEtBQ2pDLE9BQU9yQixFQUdULElBQ01pRyxHQUFhM0IsR0FEREUsSUFBY2hELEdBQWtCLEVBQUks SUFDWjFKLEtBQUswSyxPQUFPMUIsT0FFdEQsT0FBc0IsR0FBZm1GLEVBQ0huTyxLQUFLMEssT0FB TzFLLEtBQUswSyxPQUFPMUIsT0FBUyxHQUFLaEosS0FBSzBLLE9BQU95RCxNQUd4REMsbUJBQUEs U0FBbUJDLEVBQWVDLEdBQ2hDLElBQU1DLEVBQWN2TyxLQUFLeU0sY0FBYzRCLEdBQ2pDRyxFQUFZ eE8sS0FBS3lNLGNBQWN6TSxLQUFLMEYsU0FBU3ZFLGNBQWNtRyxLQUMzRG1ILEVBQWF2TyxFQUFF a0YsTUFBTUEsRUFBTXVFLE1BQU8sQ0FDdEMwRSxjQUFBQSxFQUNBM0IsVUFBVzRCLEVBQ1hJLEtB QU1GLEVBQ05sQyxHQUFJaUMsSUFLTixPQUZBck8sRUFBRUYsS0FBSzBGLFVBQVUzRCxRQUFRME0s R0FFbEJBLEtBR1RFLDJCQUFBLFNBQTJCN04sR0FDekIsR0FBSWQsS0FBS29MLG1CQUFvQixDQUMz QixJQUFNd0QsRUFBYSxHQUFHaEcsTUFBTS9GLEtBQUs3QyxLQUFLb0wsbUJBQW1CdkMsaUJBQWlC dkIsS0FDMUVwSCxFQUFFME8sR0FDQ3RJLFlBQVlkLEdBRWYsSUFBTXFKLEVBQWdCN08sS0FBS29M LG1CQUFtQjBELFNBQzVDOU8sS0FBS3lNLGNBQWMzTCxJQUdqQitOLEdBQ0YzTyxFQUFFMk8sR0FB ZUUsU0FBU3ZKLE9BS2hDcUcsT0FBQSxTQUFPYSxFQUFXNUwsR0FBUyxJQVFyQmtPLEVBQ0FDLEVB Q0FYLEVBVnFCWSxFQUFBbFAsS0FDbkJrSSxFQUFnQmxJLEtBQUswRixTQUFTdkUsY0FBY21HLElB QzVDNkgsRUFBcUJuUCxLQUFLeU0sY0FBY3ZFLEdBQ3hDa0gsRUFBZ0J0TyxHQUFXb0gsR0FDL0Js SSxLQUFLK04sb0JBQW9CckIsRUFBV3hFLEdBQ2hDbUgsRUFBbUJyUCxLQUFLeU0sY0FBYzJDLEdB Q3RDRSxFQUFZck4sUUFBUWpDLEtBQUsySyxXQWdCL0IsR0FQRTJELEVBSEU1QixJQUFjaEQsR0FD aEJzRixFQUF1QnhKLEVBQ3ZCeUosRUFBaUJ6SixFQUNJa0UsSUFFckJzRixFQUF1QnhKLEVBQ3ZC eUosRUFBaUJ6SixHQUNJa0UsR0FHbkIwRixHQUFlbFAsRUFBRWtQLEdBQWE3SSxTQUFTZixHQUN6 Q3hGLEtBQUs4SyxZQUFhLE9BS3BCLElBRG1COUssS0FBS29PLG1CQUFtQmdCLEVBQWFkLEdBQ3pD dkksc0JBSVZtQyxHQUFrQmtILEVBQXZCLENBS0FwUCxLQUFLOEssWUFBYSxFQUVkd0UsR0FDRnRQ LEtBQUtzSixRQUdQdEosS0FBSzJPLDJCQUEyQlMsR0FFaEMsSUFBTUcsRUFBWXJQLEVBQUVrRixN QUFNQSxFQUFNd0UsS0FBTSxDQUNwQ3lFLGNBQWVlLEVBQ2YxQyxVQUFXNEIsRUFDWEksS0FBTVMs RUFDTjdDLEdBQUkrQyxJQUdOLEdBQUluUCxFQUFFRixLQUFLMEYsVUFBVWEsU0FBU2YsR0FBa0Is Q0FDOUN0RixFQUFFa1AsR0FBYUwsU0FBU0UsR0FFeEI3TyxFQUFLeUIsT0FBT3VOLEdBRVpsUCxF QUFFZ0ksR0FBZTZHLFNBQVNDLEdBQzFCOU8sRUFBRWtQLEdBQWFMLFNBQVNDLEdBRXhCLElBQU1R LEVBQXNCQyxTQUFTTCxFQUFZcE8sYUFBYSxpQkFBa0IsSUFDNUV3TyxHQUNGeFAsS0FBS2tMLFFB QVF3RSxnQkFBa0IxUCxLQUFLa0wsUUFBUXdFLGlCQUFtQjFQLEtBQUtrTCxRQUFRL0IsU0FDNUVu SixLQUFLa0wsUUFBUS9CLFNBQVdxRyxHQUV4QnhQLEtBQUtrTCxRQUFRL0IsU0FBV25KLEtBQUtr TCxRQUFRd0UsaUJBQW1CMVAsS0FBS2tMLFFBQVEvQixTQUd2RSxJQUFNN0gsRUFBcUJsQixFQUFL aUIsaUNBQWlDNkcsR0FFakVoSSxFQUFFZ0ksR0FDQy9ILElBQUlDLEVBQUtSLGVBQWdCLFdBQ3hC TSxFQUFFa1AsR0FDQzlJLFlBQWUwSSxFQURsQixJQUMwQ0MsR0FDdkNGLFNBQVN2SixHQUVadEYs RUFBRWdJLEdBQWU1QixZQUFlZCxFQUFoQyxJQUFvRHlKLEVBQXBELElBQXNFRCxHQUV0RUUsRUFB S3BFLFlBQWEsRUFFbEJ6SyxXQUFXLFdBQUEsT0FBTUgsRUFBRWdQLEVBQUt4SixVQUFVM0QsUUFB UXdOLElBQVksS0FFdkRuTCxxQkFBcUI5QyxRQUV4QnBCLEVBQUVnSSxHQUFlNUIsWUFBWWQsR0FD N0J0RixFQUFFa1AsR0FBYUwsU0FBU3ZKLEdBRXhCeEYsS0FBSzhLLFlBQWEsRUFDbEI1SyxFQUFF RixLQUFLMEYsVUFBVTNELFFBQVF3TixHQUd2QkQsR0FDRnRQLEtBQUtpTSxZQU1GdEYsaUJBQVAs U0FBd0JwRSxHQUN0QixPQUFPdkMsS0FBSzRHLEtBQUssV0FDZixJQUFJRSxFQUFPNUcsRUFBRUYs TUFBTThHLEtBQUs3QixHQUNwQmlHLEVBQU8wQixFQUFBLEdBQ04xRCxFQURNLEdBRU5oSixFQUFF RixNQUFNOEcsUUFHUyxpQkFBWHZFLElBQ1QySSxFQUFPMEIsRUFBQSxHQUNGMUIsRUFERSxHQUVG M0ksSUFJUCxJQUFNb04sRUFBMkIsaUJBQVhwTixFQUFzQkEsRUFBUzJJLEVBQVE3QixNQU83RCxH QUxLdkMsSUFDSEEsRUFBTyxJQUFJMkQsRUFBU3pLLEtBQU1rTCxHQUMxQmhMLEVBQUVGLE1BQU04 RyxLQUFLN0IsRUFBVTZCLElBR0gsaUJBQVh2RSxFQUNUdUUsRUFBS3dGLEdBQUcvSixRQUNILEdB QXNCLGlCQUFYb04sRUFBcUIsQ0FDckMsR0FBNEIsb0JBQWpCN0ksRUFBSzZJLEdBQ2QsTUFBTSxJ QUFJM0wsVUFBSixvQkFBa0MyTCxFQUFsQyxLQUVSN0ksRUFBSzZJLFVBQ0l6RSxFQUFRL0IsVUFB WStCLEVBQVEwRSxPQUNyQzlJLEVBQUt3QyxRQUNMeEMsRUFBS21GLGNBS0o0RCxxQkFBUCxTQUE0 QnhMLEdBQzFCLElBQU10RCxFQUFXWCxFQUFLUyx1QkFBdUJiLE1BRTdDLEdBQUtlLEVBQUwsQ0FJ QSxJQUFNMkQsRUFBU3hFLEVBQUVhLEdBQVUsR0FFM0IsR0FBSzJELEdBQVd4RSxFQUFFd0UsR0FB UTZCLFNBQVNmLEdBQW5DLENBSUEsSUFBTWpELEVBQU1xSyxFQUFBLEdBQ1AxTSxFQUFFd0UsR0FB UW9DLE9BREgsR0FFUDVHLEVBQUVGLE1BQU04RyxRQUVQZ0osRUFBYTlQLEtBQUtnQixhQUFhLGlC QUVqQzhPLElBQ0Z2TixFQUFPNEcsVUFBVyxHQUdwQnNCLEVBQVM5RCxpQkFBaUI5RCxLQUFLM0Ms RUFBRXdFLEdBQVNuQyxHQUV0Q3VOLEdBQ0Y1UCxFQUFFd0UsR0FBUW9DLEtBQUs3QixHQUFVcUgs R0FBR3dELEdBRzlCekwsRUFBTTRDLDREQWpjTixNQTNHMkIsd0NBK0czQixPQUFPaUMsV0F1Y1ho SixFQUFFUyxVQUNDdUcsR0FBRzlCLEVBQU1HLGVBQWdCK0IsR0FBcUJtRCxHQUFTb0Ysc0JBRTFE M1AsRUFBRXdJLFFBQVF4QixHQUFHOUIsRUFBTW9DLGNBQWUsV0FFaEMsSUFEQSxJQUFNdUksRUFB WSxHQUFHbkgsTUFBTS9GLEtBQUtsQyxTQUFTa0ksaUJBQWlCdkIsS0FDakR3QixFQUFJLEVBQUdD LEVBQU1nSCxFQUFVL0csT0FBUUYsRUFBSUMsRUFBS0QsSUFBSyxDQUNwRCxJQUFNa0gsRUFBWTlQ LEVBQUU2UCxFQUFVakgsSUFDOUIyQixHQUFTOUQsaUJBQWlCOUQsS0FBS21OLEVBQVdBLEVBQVVs SixXQVV4RDVHLEVBQUVnRSxHQUFHYyxHQUFReUYsR0FBUzlELGlCQUN0QnpHLEVBQUVnRSxHQUFH YyxHQUFNbUMsWUFBY3NELEdBQ3pCdkssRUFBRWdFLEdBQUdjLEdBQU1vQyxXQUFhLFdBRXRCLE9B REFsSCxFQUFFZ0UsR0FBR2MsR0FBUUcsRUFDTnNGLEdBQVM5RCxrQkM1a0JsQixJQUFNM0IsR0FB c0IsV0FFdEJDLEdBQXNCLGNBQ3RCQyxHQUFTLElBQWlCRCxHQUUxQkUsR0FBc0JqRixFQUFFZ0Us R0FBR2MsSUFFM0JrRSxHQUFVLENBQ2R4QixRQUFTLEVBQ1R2QixPQUFTLElBR0xzRCxHQUFjLENB Q2xCL0IsT0FBUyxVQUNUdkIsT0FBUyxvQkFHTGYsR0FBUSxDQUNaNkssS0FBSSxPQUFvQi9LLEdB Q3hCZ0wsTUFBSyxRQUFvQmhMLEdBQ3pCaUwsS0FBSSxPQUFvQmpMLEdBQ3hCa0wsT0FBTSxTQUFv QmxMLEdBQzFCSyxlQUFjLFFBQVdMLEdBbEJDLGFBcUJ0Qk0sR0FDUyxPQURUQSxHQUVTLFdBRlRB LEdBR1MsYUFIVEEsR0FJUyxZQUdUNkssR0FDSyxRQURMQSxHQUVLLFNBR0wvSSxHQUNVLHFCQURW QSxHQUVVLDJCQVNWZ0osY0FDSixTQUFBQSxFQUFZeFAsRUFBU3lCLEdBQ25CdkMsS0FBS3VRLGtC QUFtQixFQUN4QnZRLEtBQUswRixTQUFtQjVFLEVBQ3hCZCxLQUFLa0wsUUFBbUJsTCxLQUFLbUws V0FBVzVJLEdBQ3hDdkMsS0FBS3dRLGNBQW1CLEdBQUc1SCxNQUFNL0YsS0FBS2xDLFNBQVNrSSxp QkFDN0MsbUNBQW1DL0gsRUFBUTJQLEdBQTNDLDZDQUMwQzNQLEVBQVEyUCxHQURsRCxPQUtGLElB REEsSUFBTUMsRUFBYSxHQUFHOUgsTUFBTS9GLEtBQUtsQyxTQUFTa0ksaUJBQWlCdkIsS0FDbER3 QixFQUFJLEVBQUdDLEVBQU0ySCxFQUFXMUgsT0FBUUYsRUFBSUMsRUFBS0QsSUFBSyxDQUNyRCxJ QUFNNkgsRUFBT0QsRUFBVzVILEdBQ2xCL0gsRUFBV1gsRUFBS1MsdUJBQXVCOFAsR0FDdkNDLEVB QWdCLEdBQUdoSSxNQUFNL0YsS0FBS2xDLFNBQVNrSSxpQkFBaUI5SCxJQUMzRDhQLE9BQU8sU0FB Q0MsR0FBRCxPQUFlQSxJQUFjaFEsSUFFdEIsT0FBYkMsR0FBNEMsRUFBdkI2UCxFQUFjNUgsU0FD ckNoSixLQUFLK1EsVUFBWWhRLEVBQ2pCZixLQUFLd1EsY0FBY1EsS0FBS0wsSUFJNUIzUSxLQUFL aVIsUUFBVWpSLEtBQUtrTCxRQUFRL0UsT0FBU25HLEtBQUtrUixhQUFlLEtBRXBEbFIsS0FBS2tM LFFBQVEvRSxRQUNoQm5HLEtBQUttUiwwQkFBMEJuUixLQUFLMEYsU0FBVTFGLEtBQUt3USxlQUdq RHhRLEtBQUtrTCxRQUFReEQsUUFDZjFILEtBQUswSCxvQ0FnQlRBLE9BQUEsV0FDTXhILEVBQUVG LEtBQUswRixVQUFVYSxTQUFTZixJQUM1QnhGLEtBQUtvUixPQUVMcFIsS0FBS3FSLFVBSVRBLEtB QUEsV0FBTyxJQU1EQyxFQUNBQyxFQVBDeFIsRUFBQUMsS0FDTCxJQUFJQSxLQUFLdVEsbUJBQ1By USxFQUFFRixLQUFLMEYsVUFBVWEsU0FBU2YsTUFPeEJ4RixLQUFLaVIsU0FVZ0IsS0FUdkJLLEVB QVUsR0FBRzFJLE1BQU0vRixLQUFLN0MsS0FBS2lSLFFBQVFwSSxpQkFBaUJ2QixLQUNuRHVKLE9B QU8sU0FBQ0YsR0FDUCxNQUFtQyxpQkFBeEI1USxFQUFLbUwsUUFBUS9FLE9BQ2Z3SyxFQUFLM1As YUFBYSxpQkFBbUJqQixFQUFLbUwsUUFBUS9FLE9BR3BEd0ssRUFBSzNJLFVBQVVDLFNBQVN6QyxP QUd2QndELFNBQ1ZzSSxFQUFVLFFBSVZBLElBQ0ZDLEVBQWNyUixFQUFFb1IsR0FBU0UsSUFBSXhS LEtBQUsrUSxXQUFXakssS0FBSzdCLE1BQy9Cc00sRUFBWWhCLG1CQUZqQyxDQU9BLElBQU1rQixF QUFhdlIsRUFBRWtGLE1BQU1BLEdBQU02SyxNQUVqQyxHQURBL1AsRUFBRUYsS0FBSzBGLFVBQVUz RCxRQUFRMFAsSUFDckJBLEVBQVcxTCxxQkFBZixDQUlJdUwsSUFDRmhCLEVBQVMzSixpQkFBaUI5 RCxLQUFLM0MsRUFBRW9SLEdBQVNFLElBQUl4UixLQUFLK1EsV0FBWSxRQUMxRFEsR0FDSHJSLEVB QUVvUixHQUFTeEssS0FBSzdCLEdBQVUsT0FJOUIsSUFBTXlNLEVBQVkxUixLQUFLMlIsZ0JBRXZC elIsRUFBRUYsS0FBSzBGLFVBQ0pZLFlBQVlkLElBQ1p1SixTQUFTdkosSUFFWnhGLEtBQUswRixT QUFTa00sTUFBTUYsR0FBYSxFQUU3QjFSLEtBQUt3USxjQUFjeEgsUUFDckI5SSxFQUFFRixLQUFL d1EsZUFDSmxLLFlBQVlkLElBQ1pxTSxLQUFLLGlCQUFpQixHQUczQjdSLEtBQUs4UixrQkFBaUIs R0FFdEIsSUFjTUMsRUFBVSxVQURhTCxFQUFVLEdBQUduTyxjQUFnQm1PLEVBQVU5SSxNQUFNLElB RXBFdEgsRUFBcUJsQixFQUFLaUIsaUNBQWlDckIsS0FBSzBGLFVBRXRFeEYsRUFBRUYsS0FBSzBG LFVBQ0p2RixJQUFJQyxFQUFLUixlQWxCSyxXQUNmTSxFQUFFSCxFQUFLMkYsVUFDSlksWUFBWWQs SUFDWnVKLFNBQVN2SixJQUNUdUosU0FBU3ZKLElBRVp6RixFQUFLMkYsU0FBU2tNLE1BQU1GLEdB QWEsR0FFakMzUixFQUFLK1Isa0JBQWlCLEdBRXRCNVIsRUFBRUgsRUFBSzJGLFVBQVUzRCxRQUFR cUQsR0FBTThLLFNBUzlCOUwscUJBQXFCOUMsR0FFeEJ0QixLQUFLMEYsU0FBU2tNLE1BQU1GLEdB QWdCMVIsS0FBSzBGLFNBQVNxTSxHQUFsRCxVQUdGWCxLQUFBLFdBQU8sSUFBQXBFLEVBQUFoTixL QUNMLElBQUlBLEtBQUt1USxrQkFDTnJRLEVBQUVGLEtBQUswRixVQUFVYSxTQUFTZixJQUQ3QixD QUtBLElBQU1pTSxFQUFhdlIsRUFBRWtGLE1BQU1BLEdBQU0rSyxNQUVqQyxHQURBalEsRUFBRUYs S0FBSzBGLFVBQVUzRCxRQUFRMFAsSUFDckJBLEVBQVcxTCxxQkFBZixDQUlBLElBQU0yTCxFQUFZ MVIsS0FBSzJSLGdCQUV2QjNSLEtBQUswRixTQUFTa00sTUFBTUYsR0FBZ0IxUixLQUFLMEYsU0FB U3NNLHdCQUF3Qk4sR0FBMUUsS0FFQXRSLEVBQUt5QixPQUFPN0IsS0FBSzBGLFVBRWpCeEYsRUFB RUYsS0FBSzBGLFVBQ0pxSixTQUFTdkosSUFDVGMsWUFBWWQsSUFDWmMsWUFBWWQsSUFFZixJQUFN eU0sRUFBcUJqUyxLQUFLd1EsY0FBY3hILE9BQzlDLEdBQXlCLEVBQXJCaUosRUFDRixJQUFLLElB QUluSixFQUFJLEVBQUdBLEVBQUltSixFQUFvQm5KLElBQUssQ0FDM0MsSUFBTS9HLEVBQVUvQixL QUFLd1EsY0FBYzFILEdBQzdCL0gsRUFBV1gsRUFBS1MsdUJBQXVCa0IsR0FFN0MsR0FBaUIsT0FB YmhCLEVBQ1liLEVBQUUsR0FBRzBJLE1BQU0vRixLQUFLbEMsU0FBU2tJLGlCQUFpQjlILEtBQzdD d0YsU0FBU2YsS0FDbEJ0RixFQUFFNkIsR0FBU2dOLFNBQVN2SixJQUNqQnFNLEtBQUssaUJBQWlC LEdBTWpDN1IsS0FBSzhSLGtCQUFpQixHQVV0QjlSLEtBQUswRixTQUFTa00sTUFBTUYsR0FBYSxH QUNqQyxJQUFNcFEsRUFBcUJsQixFQUFLaUIsaUNBQWlDckIsS0FBSzBGLFVBRXRFeEYsRUFBRUYs S0FBSzBGLFVBQ0p2RixJQUFJQyxFQUFLUixlQVpLLFdBQ2ZvTixFQUFLOEUsa0JBQWlCLEdBQ3RC NVIsRUFBRThNLEVBQUt0SCxVQUNKWSxZQUFZZCxJQUNadUosU0FBU3ZKLElBQ1R6RCxRQUFRcUQs R0FBTWdMLFVBUWhCaE0scUJBQXFCOUMsUUFHMUJ3USxpQkFBQSxTQUFpQkksR0FDZmxTLEtBQUt1 USxpQkFBbUIyQixLQUcxQmpNLFFBQUEsV0FDRS9GLEVBQUVnRyxXQUFXbEcsS0FBSzBGLFNBQVVU LElBRTVCakYsS0FBS2tMLFFBQW1CLEtBQ3hCbEwsS0FBS2lSLFFBQW1CLEtBQ3hCalIsS0FBSzBG LFNBQW1CLEtBQ3hCMUYsS0FBS3dRLGNBQW1CLEtBQ3hCeFEsS0FBS3VRLGlCQUFtQixRQUsxQnBG LFdBQUEsU0FBVzVJLEdBT1QsT0FOQUEsRUFBTXFLLEVBQUEsR0FDRDFELEdBREMsR0FFRDNHLElB RUVtRixPQUFTekYsUUFBUU0sRUFBT21GLFFBQy9CdEgsRUFBS2lDLGdCQUFnQjJDLEdBQU16QyxF QUFRa0gsSUFDNUJsSCxLQUdUb1AsY0FBQSxXQUVFLE9BRGlCelIsRUFBRUYsS0FBSzBGLFVBQVVh LFNBQVM4SixJQUN6QkEsR0FBa0JBLE1BR3RDYSxXQUFBLFdBQWEsSUFDUC9LLEVBRE9nSCxFQUFB bk4sS0FHUEksRUFBSzhCLFVBQVVsQyxLQUFLa0wsUUFBUS9FLFNBQzlCQSxFQUFTbkcsS0FBS2tM LFFBQVEvRSxPQUdvQixvQkFBL0JuRyxLQUFLa0wsUUFBUS9FLE9BQU9oQyxTQUM3QmdDLEVBQVNu RyxLQUFLa0wsUUFBUS9FLE9BQU8sS0FHL0JBLEVBQVN4RixTQUFTUSxjQUFjbkIsS0FBS2tMLFFB QVEvRSxRQUcvQyxJQUFNcEYsRUFBUSx5Q0FDNkJmLEtBQUtrTCxRQUFRL0UsT0FEMUMsS0FHUjJJ LEVBQVcsR0FBR2xHLE1BQU0vRixLQUFLc0QsRUFBTzBDLGlCQUFpQjlILElBUXZELE9BUEFiLEVB QUU0TyxHQUFVbEksS0FBSyxTQUFDa0MsRUFBR2hJLEdBQ25CcU0sRUFBS2dFLDBCQUNIYixFQUFT NkIsc0JBQXNCclIsR0FDL0IsQ0FBQ0EsTUFJRXFGLEtBR1RnTCwwQkFBQSxTQUEwQnJRLEVBQVNz UixHQUNqQyxJQUFNQyxFQUFTblMsRUFBRVksR0FBU3lGLFNBQVNmLElBRS9CNE0sRUFBYXBKLFFB Q2Y5SSxFQUFFa1MsR0FDQzdKLFlBQVkvQyxJQUFzQjZNLEdBQ2xDUixLQUFLLGdCQUFpQlEsTUFN dEJGLHNCQUFQLFNBQTZCclIsR0FDM0IsSUFBTUMsRUFBV1gsRUFBS1MsdUJBQXVCQyxHQUM3QyxP QUFPQyxFQUFXSixTQUFTUSxjQUFjSixHQUFZLFFBR2hENEYsaUJBQVAsU0FBd0JwRSxHQUN0QixP QUFPdkMsS0FBSzRHLEtBQUssV0FDZixJQUFNMEwsRUFBVXBTLEVBQUVGLE1BQ2Q4RyxFQUFZd0ws RUFBTXhMLEtBQUs3QixJQUNyQmlHLEVBQU8wQixFQUFBLEdBQ1IxRCxHQURRLEdBRVJvSixFQUFN eEwsT0FGRSxHQUdVLGlCQUFYdkUsR0FBdUJBLEVBQVNBLEVBQVMsSUFZckQsSUFUS3VFLEdBQVFv RSxFQUFReEQsUUFBVSxZQUFZckUsS0FBS2QsS0FDOUMySSxFQUFReEQsUUFBUyxHQUdkWixJQUNI QSxFQUFPLElBQUl3SixFQUFTdFEsS0FBTWtMLEdBQzFCb0gsRUFBTXhMLEtBQUs3QixHQUFVNkIs SUFHRCxpQkFBWHZFLEVBQXFCLENBQzlCLEdBQTRCLG9CQUFqQnVFLEVBQUt2RSxHQUNkLE1BQU0s SUFBSXlCLFVBQUosb0JBQWtDekIsRUFBbEMsS0FFUnVFLEVBQUt2RSxpREFqUVQsTUFwRndCLHdD QXdGeEIsT0FBTzJHLFlBeVFYaEosRUFBRVMsVUFBVXVHLEdBQUc5QixHQUFNRyxlQUFnQitCLEdB QXNCLFNBQVVqRCxHQUUvQixNQUFoQ0EsRUFBTWtPLGNBQWNwSyxTQUN0QjlELEVBQU00QyxpQkFH UixJQUFNdUwsRUFBV3RTLEVBQUVGLE1BQ2JlLEVBQVdYLEVBQUtTLHVCQUF1QmIsTUFDdkN5UyxF QUFZLEdBQUc3SixNQUFNL0YsS0FBS2xDLFNBQVNrSSxpQkFBaUI5SCxJQUUxRGIsRUFBRXVTLEdB QVc3TCxLQUFLLFdBQ2hCLElBQU04TCxFQUFVeFMsRUFBRUYsTUFFWnVDLEVBRFVtUSxFQUFRNUws S0FBSzdCLElBQ04sU0FBV3VOLEVBQVMxTCxPQUMzQ3dKLEdBQVMzSixpQkFBaUI5RCxLQUFLNlAs RUFBU25RLE9BVTVDckMsRUFBRWdFLEdBQUdjLElBQVFzTCxHQUFTM0osaUJBQ3RCekcsRUFBRWdF LEdBQUdjLElBQU1tQyxZQUFjbUosR0FDekJwUSxFQUFFZ0UsR0FBR2MsSUFBTW9DLFdBQWEsV0FF dEIsT0FEQWxILEVBQUVnRSxHQUFHYyxJQUFRRyxHQUNObUwsR0FBUzNKLGtCQzdYbEIsSUFBTTNC LEdBQTJCLFdBRTNCQyxHQUEyQixjQUMzQkMsR0FBUyxJQUFzQkQsR0FDL0JvQyxHQUEyQixZQUMz QmxDLEdBQTJCakYsRUFBRWdFLEdBQUdjLElBT2hDMk4sR0FBMkIsSUFBSXZQLE9BQVV3UCxZQUV6 Q3hOLEdBQVEsQ0FDWitLLEtBQUksT0FBc0JqTCxHQUMxQmtMLE9BQU0sU0FBc0JsTCxHQUM1QitL LEtBQUksT0FBc0IvSyxHQUMxQmdMLE1BQUssUUFBc0JoTCxHQUMzQjJOLE1BQUssUUFBc0IzTixH QUMzQkssZUFBYyxRQUFhTCxHQUFZbUMsR0FDdkN5TCxpQkFBZ0IsVUFBYTVOLEdBQVltQyxHQUN6 QzBMLGVBQWMsUUFBYTdOLEdBQVltQyxJQUduQzdCLEdBQ2MsV0FEZEEsR0FFYyxPQUZkQSxHQUdj LFNBSGRBLEdBSWMsWUFKZEEsR0FLYyxXQUxkQSxHQU1jLHNCQU5kQSxHQVFjLGtCQUdkOEIsR0FD WSwyQkFEWkEsR0FFWSxpQkFGWkEsR0FHWSxpQkFIWkEsR0FJWSxjQUpaQSxHQUtZLDhEQUdaMEws R0FDUSxZQURSQSxHQUVRLFVBRlJBLEdBR1EsZUFIUkEsR0FJUSxhQUpSQSxHQUtRLGNBTFJBLEdB T1EsYUFJUjlKLEdBQVUsQ0FDZCtKLE9BQWUsRUFDZkMsTUFBZSxFQUNmQyxTQUFlLGVBQ2ZDLFVB QWUsU0FDZkMsUUFBZSxVQUNmQyxhQUFlLE1BR1g3SixHQUFjLENBQ2xCd0osT0FBZSwyQkFDZkMs S0FBZSxVQUNmQyxTQUFlLG1CQUNmQyxVQUFlLG1CQUNmQyxRQUFlLFNBQ2ZDLGFBQWUsaUJBU1hD LGNBQ0osU0FBQUEsRUFBWXpTLEVBQVN5QixHQUNuQnZDLEtBQUswRixTQUFZNUUsRUFDakJkLEtB QUt3VCxRQUFZLEtBQ2pCeFQsS0FBS2tMLFFBQVlsTCxLQUFLbUwsV0FBVzVJLEdBQ2pDdkMsS0FB S3lULE1BQVl6VCxLQUFLMFQsa0JBQ3RCMVQsS0FBSzJULFVBQVkzVCxLQUFLNFQsZ0JBRXRCNVQs S0FBSzJMLGdEQW1CUGpFLE9BQUEsV0FDRSxJQUFJMUgsS0FBSzBGLFNBQVNtTyxXQUFZM1QsRUFB RUYsS0FBSzBGLFVBQVVhLFNBQVNmLElBQXhELENBSUEsSUFBTXNPLEVBQVc1VCxFQUFFRixLQUFL eVQsT0FBT2xOLFNBQVNmLElBRXhDK04sRUFBU1EsY0FFTEQsR0FJSjlULEtBQUtxUixNQUFLLE9B R1pBLEtBQUEsU0FBSzJDLEdBQ0gsUUFEc0IsSUFBbkJBLElBQUFBLEdBQVksS0FDWGhVLEtBQUsw RixTQUFTbU8sVUFBWTNULEVBQUVGLEtBQUswRixVQUFVYSxTQUFTZixLQUF1QnRGLEVBQUVGLEtB QUt5VCxPQUFPbE4sU0FBU2YsS0FBdEcsQ0FJQSxJQUFNNkksRUFBZ0IsQ0FDcEJBLGNBQWVyTyxL QUFLMEYsVUFFaEJ1TyxFQUFZL1QsRUFBRWtGLE1BQU1BLEdBQU02SyxLQUFNNUIsR0FDaENsSSxF QUFTb04sRUFBU1csc0JBQXNCbFUsS0FBSzBGLFVBSW5ELEdBRkF4RixFQUFFaUcsR0FBUXBFLFFB QVFrUyxJQUVkQSxFQUFVbE8scUJBQWQsQ0FLQSxJQUFLL0YsS0FBSzJULFdBQWFLLEVBQVcsQ0FL aEMsR0FBc0Isb0JBQVhHLEVBQ1QsTUFBTSxJQUFJblEsVUFBVSxvRUFHdEIsSUFBSW9RLEVBQW1C cFUsS0FBSzBGLFNBRUcsV0FBM0IxRixLQUFLa0wsUUFBUWtJLFVBQ2ZnQixFQUFtQmpPLEVBQ1Yv RixFQUFLOEIsVUFBVWxDLEtBQUtrTCxRQUFRa0ksYUFDckNnQixFQUFtQnBVLEtBQUtrTCxRQUFR a0ksVUFHYSxvQkFBbENwVCxLQUFLa0wsUUFBUWtJLFVBQVVqUCxTQUNoQ2lRLEVBQW1CcFUsS0FB S2tMLFFBQVFrSSxVQUFVLEtBT2hCLGlCQUExQnBULEtBQUtrTCxRQUFRaUksVUFDZmpULEVBQUVp RyxHQUFRNEksU0FBU3ZKLElBRXJCeEYsS0FBS3dULFFBQVUsSUFBSVcsRUFBT0MsRUFBa0JwVSxL QUFLeVQsTUFBT3pULEtBQUtxVSxvQkFPM0QsaUJBQWtCMVQsU0FBUzhDLGlCQUN1QixJQUFsRHZE LEVBQUVpRyxHQUFRQyxRQUFRa0IsSUFBcUIwQixRQUN6QzlJLEVBQUVTLFNBQVMyVCxNQUFNeEYs V0FBVzVILEdBQUcsWUFBYSxLQUFNaEgsRUFBRXFVLE1BR3REdlUsS0FBSzBGLFNBQVMwQyxRQUNk cEksS0FBSzBGLFNBQVM0QyxhQUFhLGlCQUFpQixHQUU1Q3BJLEVBQUVGLEtBQUt5VCxPQUFPbEws WUFBWS9DLElBQzFCdEYsRUFBRWlHLEdBQ0NvQyxZQUFZL0MsSUFDWnpELFFBQVE3QixFQUFFa0Ys TUFBTUEsR0FBTThLLE1BQU83QixTQUdsQytDLEtBQUEsV0FDRSxJQUFJcFIsS0FBSzBGLFNBQVNt TyxXQUFZM1QsRUFBRUYsS0FBSzBGLFVBQVVhLFNBQVNmLEtBQXdCdEYsRUFBRUYsS0FBS3lULE9B QU9sTixTQUFTZixJQUF2RyxDQUlBLElBQU02SSxFQUFnQixDQUNwQkEsY0FBZXJPLEtBQUswRixV QUVoQjhPLEVBQVl0VSxFQUFFa0YsTUFBTUEsR0FBTStLLEtBQU05QixHQUNoQ2xJLEVBQVNvTixF QUFTVyxzQkFBc0JsVSxLQUFLMEYsVUFFbkR4RixFQUFFaUcsR0FBUXBFLFFBQVF5UyxHQUVkQSxF QUFVek8sdUJBSVYvRixLQUFLd1QsU0FDUHhULEtBQUt3VCxRQUFRaUIsVUFHZnZVLEVBQUVGLEtB QUt5VCxPQUFPbEwsWUFBWS9DLElBQzFCdEYsRUFBRWlHLEdBQ0NvQyxZQUFZL0MsSUFDWnpELFFB QVE3QixFQUFFa0YsTUFBTUEsR0FBTWdMLE9BQVEvQixTQUduQ3BJLFFBQUEsV0FDRS9GLEVBQUVn RyxXQUFXbEcsS0FBSzBGLFNBQVVULElBQzVCL0UsRUFBRUYsS0FBSzBGLFVBQVVpSCxJQUFJekgs SUFDckJsRixLQUFLMEYsU0FBVyxNQUNoQjFGLEtBQUt5VCxNQUFRLFFBQ1R6VCxLQUFLd1QsVUFD UHhULEtBQUt3VCxRQUFRaUIsVUFDYnpVLEtBQUt3VCxRQUFVLFNBSW5Ca0IsT0FBQSxXQUNFMVUs S0FBSzJULFVBQVkzVCxLQUFLNFQsZ0JBQ0QsT0FBakI1VCxLQUFLd1QsU0FDUHhULEtBQUt3VCxR QUFRbUIsb0JBTWpCaEosbUJBQUEsV0FBcUIsSUFBQTVMLEVBQUFDLEtBQ25CRSxFQUFFRixLQUFL MEYsVUFBVXdCLEdBQUc5QixHQUFNeU4sTUFBTyxTQUFDeE8sR0FDaENBLEVBQU00QyxpQkFDTjVD LEVBQU11USxrQkFDTjdVLEVBQUsySCxjQUlUeUQsV0FBQSxTQUFXNUksR0FhVCxPQVpBQSxFQUFN cUssRUFBQSxHQUNENU0sS0FBSzZVLFlBQVkzTCxRQURoQixHQUVEaEosRUFBRUYsS0FBSzBGLFVB QVVvQixPQUZoQixHQUdEdkUsR0FHTG5DLEVBQUtpQyxnQkFDSDJDLEdBQ0F6QyxFQUNBdkMsS0FB SzZVLFlBQVlwTCxhQUdabEgsS0FHVG1SLGdCQUFBLFdBQ0UsSUFBSzFULEtBQUt5VCxNQUFPLENB Q2YsSUFBTXROLEVBQVNvTixFQUFTVyxzQkFBc0JsVSxLQUFLMEYsVUFFL0NTLElBQ0ZuRyxLQUFL eVQsTUFBUXROLEVBQU9oRixjQUFjbUcsS0FHdEMsT0FBT3RILEtBQUt5VCxTQUdkcUIsY0FBQSxX QUNFLElBQU1DLEVBQWtCN1UsRUFBRUYsS0FBSzBGLFNBQVM3QixZQUNwQ21SLEVBQVloQyxHQWVo QixPQVpJK0IsRUFBZ0J4TyxTQUFTZixLQUMzQndQLEVBQVloQyxHQUNSOVMsRUFBRUYsS0FBS3lU LE9BQU9sTixTQUFTZixNQUN6QndQLEVBQVloQyxLQUVMK0IsRUFBZ0J4TyxTQUFTZixJQUNsQ3dQ LEVBQVloQyxHQUNIK0IsRUFBZ0J4TyxTQUFTZixJQUNsQ3dQLEVBQVloQyxHQUNIOVMsRUFBRUYs S0FBS3lULE9BQU9sTixTQUFTZixNQUNoQ3dQLEVBQVloQyxJQUVQZ0MsS0FHVHBCLGNBQUEsV0FD RSxPQUFvRCxFQUE3QzFULEVBQUVGLEtBQUswRixVQUFVVSxRQUFRLFdBQVc0QyxVQUc3Q2lNLFdB QUEsV0FBYSxJQUFBakksRUFBQWhOLEtBQ0xpVCxFQUFTLEdBZWYsTUFibUMsbUJBQXhCalQsS0FB S2tMLFFBQVErSCxPQUN0QkEsRUFBTy9PLEdBQUssU0FBQzRDLEdBTVgsT0FMQUEsRUFBS29PLFFB QUx0SSxFQUFBLEdBQ0s5RixFQUFLb08sUUFEVixHQUVLbEksRUFBSzlCLFFBQVErSCxPQUFPbk0s RUFBS29PLFFBQVNsSSxFQUFLdEgsV0FBYSxJQUdsRG9CLEdBR1RtTSxFQUFPQSxPQUFTalQsS0FB S2tMLFFBQVErSCxPQUd4QkEsS0FHVG9CLGlCQUFBLFdBQ0UsSUFBTWYsRUFBZSxDQUNuQjBCLFVB QVdoVixLQUFLOFUsZ0JBQ2hCSyxVQUFXLENBQ1RsQyxPQUFRalQsS0FBS2lWLGFBQ2IvQixLQUFN LENBQ0prQyxRQUFTcFYsS0FBS2tMLFFBQVFnSSxNQUV4Qm1DLGdCQUFpQixDQUNmQyxrQkFBbUJ0 VixLQUFLa0wsUUFBUWlJLFlBWXRDLE1BTjZCLFdBQXpCblQsS0FBS2tMLFFBQVFtSSxVQUNmQyxF QUFhNkIsVUFBVUksV0FBYSxDQUNsQ0gsU0FBUyxJQUlieEksRUFBQSxHQUNLMEcsRUFETCxHQUVL dFQsS0FBS2tMLFFBQVFvSSxpQkFNYjNNLGlCQUFQLFNBQXdCcEUsR0FDdEIsT0FBT3ZDLEtBQUs0 RyxLQUFLLFdBQ2YsSUFBSUUsRUFBTzVHLEVBQUVGLE1BQU04RyxLQUFLN0IsSUFReEIsR0FMSzZC LElBQ0hBLEVBQU8sSUFBSXlNLEVBQVN2VCxLQUhZLGlCQUFYdUMsRUFBc0JBLEVBQVMsTUFJcERy QyxFQUFFRixNQUFNOEcsS0FBSzdCLEdBQVU2QixJQUdILGlCQUFYdkUsRUFBcUIsQ0FDOUIsR0FB NEIsb0JBQWpCdUUsRUFBS3ZFLEdBQ2QsTUFBTSxJQUFJeUIsVUFBSixvQkFBa0N6QixFQUFsQyxL QUVSdUUsRUFBS3ZFLFdBS0p3UixZQUFQLFNBQW1CMVAsR0FDakIsSUFBSUEsR0FoV3lCLElBZ1dm QSxFQUFNd0osUUFDSCxVQUFmeEosRUFBTXlELE1BcFdxQixJQW9XRHpELEVBQU13SixPQU1sQyxJ QUZBLElBQU0ySCxFQUFVLEdBQUc1TSxNQUFNL0YsS0FBS2xDLFNBQVNrSSxpQkFBaUJ2QixLQUUv Q3dCLEVBQUksRUFBR0MsRUFBTXlNLEVBQVF4TSxPQUFRRixFQUFJQyxFQUFLRCxJQUFLLENBQ2xE LElBQU0zQyxFQUFTb04sRUFBU1csc0JBQXNCc0IsRUFBUTFNLElBQ2hEMk0sRUFBVXZWLEVBQUVz VixFQUFRMU0sSUFBSWhDLEtBQUs3QixJQUM3Qm9KLEVBQWdCLENBQ3BCQSxjQUFlbUgsRUFBUTFN LElBT3pCLEdBSkl6RSxHQUF3QixVQUFmQSxFQUFNeUQsT0FDakJ1RyxFQUFjcUgsV0FBYXJSLEdB R3hCb1IsRUFBTCxDQUlBLElBQU1FLEVBQWVGLEVBQVFoQyxNQUM3QixHQUFLdlQsRUFBRWlHLEdB QVFJLFNBQVNmLE9BSXBCbkIsSUFBeUIsVUFBZkEsRUFBTXlELE1BQ2hCLGtCQUFrQnpFLEtBQUtn QixFQUFNSyxPQUFPeUQsVUFBMkIsVUFBZjlELEVBQU15RCxNQS9YL0IsSUErWG1EekQsRUFBTXdK LFFBQ2hGM04sRUFBRStILFNBQVM5QixFQUFROUIsRUFBTUssU0FGN0IsQ0FNQSxJQUFNOFAsRUFB WXRVLEVBQUVrRixNQUFNQSxHQUFNK0ssS0FBTTlCLEdBQ3RDbk8sRUFBRWlHLEdBQVFwRSxRQUFR eVMsR0FDZEEsRUFBVXpPLHVCQU1WLGlCQUFrQnBGLFNBQVM4QyxpQkFDN0J2RCxFQUFFUyxTQUFT MlQsTUFBTXhGLFdBQVduQyxJQUFJLFlBQWEsS0FBTXpNLEVBQUVxVSxNQUd2RGlCLEVBQVExTSxH QUFHUixhQUFhLGdCQUFpQixTQUVyQ21OLEVBQVFqQyxTQUNWaUMsRUFBUWpDLFFBQVFpQixVQUds QnZVLEVBQUV5VixHQUFjclAsWUFBWWQsSUFDNUJ0RixFQUFFaUcsR0FDQ0csWUFBWWQsSUFDWnpE LFFBQVE3QixFQUFFa0YsTUFBTUEsR0FBTWdMLE9BQVEvQixXQUk5QjZGLHNCQUFQLFNBQTZCcFQs R0FDM0IsSUFBSXFGLEVBQ0VwRixFQUFXWCxFQUFLUyx1QkFBdUJDLEdBTTdDLE9BSklDLElBQ0Zv RixFQUFTeEYsU0FBU1EsY0FBY0osSUFHM0JvRixHQUFVckYsRUFBUStDLGNBSXBCK1IsdUJBQVAs U0FBOEJ2UixHQVE1QixJQUFJLGtCQUFrQmhCLEtBQUtnQixFQUFNSyxPQUFPeUQsV0FsYlgsS0Ft YnpCOUQsRUFBTXdKLE9BcGJtQixLQW9iUXhKLEVBQU13SixRQWhiZCxLQWliMUJ4SixFQUFNd0os T0FsYm9CLEtBa2JZeEosRUFBTXdKLE9BQzNDM04sRUFBRW1FLEVBQU1LLFFBQVEwQixRQUFRa0Is SUFBZTBCLFNBQVcySixHQUFldFAsS0FBS2dCLEVBQU13SixVQUloRnhKLEVBQU00QyxpQkFDTjVD LEVBQU11USxtQkFFRjVVLEtBQUs2VCxXQUFZM1QsRUFBRUYsTUFBTXVHLFNBQVNmLEtBQXRDLENB SUEsSUFBTVcsRUFBV29OLEVBQVNXLHNCQUFzQmxVLE1BQzFDOFQsRUFBVzVULEVBQUVpRyxHQUFR SSxTQUFTZixJQUVwQyxHQUFLc08sR0FwY3dCLEtBb2NaelAsRUFBTXdKLE1BSXZCLEdBQUtpRyxL QUFZQSxHQXhjWSxLQXdjQ3pQLEVBQU13SixPQXZjUCxLQXVjbUN4SixFQUFNd0osT0FBdEUsQ0FV QSxJQUFNZ0ksRUFBUSxHQUFHak4sTUFBTS9GLEtBQUtzRCxFQUFPMEMsaUJBQWlCdkIsS0FDakR1 SixPQUFPLFNBQUNpRixHQUFELE9BQVU1VixFQUFFNFYsR0FBTW5SLEdBQUcsY0FFL0IsR0FBcUIs SUFBakJrUixFQUFNN00sT0FBVixDQUlBLElBQUl1RCxFQUFRc0osRUFBTS9ILFFBQVF6SixFQUFN SyxRQXRkSCxLQXdkekJMLEVBQU13SixPQUFzQyxFQUFSdEIsR0FDdENBLElBeGQyQixLQTJkekJs SSxFQUFNd0osT0FBZ0N0QixFQUFRc0osRUFBTTdNLE9BQVMsR0FDL0R1RCxJQUdFQSxFQUFRLElB Q1ZBLEVBQVEsR0FHVnNKLEVBQU10SixHQUFPbkUsYUEvQmIsQ0FDRSxHQXpjMkIsS0F5Y3ZCL0Qs RUFBTXdKLE1BQTBCLENBQ2xDLElBQU1uRyxFQUFTdkIsRUFBT2hGLGNBQWNtRyxJQUNwQ3BILEVB QUV3SCxHQUFRM0YsUUFBUSxTQUdwQjdCLEVBQUVGLE1BQU0rQixRQUFRLG9EQXZYbEIsTUE1RjZC LHdDQWdHN0IsT0FBT21ILHVDQUlQLE9BQU9PLFlBa1pYdkosRUFBRVMsVUFDQ3VHLEdBQUc5QixH QUFNME4saUJBQWtCeEwsR0FBc0JpTSxHQUFTcUMsd0JBQzFEMU8sR0FBRzlCLEdBQU0wTixpQkFB a0J4TCxHQUFlaU0sR0FBU3FDLHdCQUNuRDFPLEdBQU05QixHQUFNRyxlQUhmLElBR2lDSCxHQUFN Mk4sZUFBa0JRLEdBQVNRLGFBQy9EN00sR0FBRzlCLEdBQU1HLGVBQWdCK0IsR0FBc0IsU0FBVWpE LEdBQ3hEQSxFQUFNNEMsaUJBQ041QyxFQUFNdVEsa0JBQ05yQixHQUFTNU0saUJBQWlCOUQsS0FB SzNDLEVBQUVGLE1BQU8sWUFFekNrSCxHQUFHOUIsR0FBTUcsZUFBZ0IrQixHQUFxQixTQUFDcUcs R0FDOUNBLEVBQUVpSCxvQkFTTjFVLEVBQUVnRSxHQUFHYyxJQUFRdU8sR0FBUzVNLGlCQUN0QnpH LEVBQUVnRSxHQUFHYyxJQUFNbUMsWUFBY29NLEdBQ3pCclQsRUFBRWdFLEdBQUdjLElBQU1vQyxX QUFhLFdBRXRCLE9BREFsSCxFQUFFZ0UsR0FBR2MsSUFBUUcsR0FDTm9PLEdBQVM1TSxrQkMvZ0Js QixJQUFNM0IsR0FBcUIsUUFFckJDLEdBQXFCLFdBQ3JCQyxHQUFTLElBQWdCRCxHQUV6QkUsR0FB cUJqRixFQUFFZ0UsR0FBR2MsSUFHMUJrRSxHQUFVLENBQ2Q2TSxVQUFXLEVBQ1gzTSxVQUFXLEVB Q1hoQixPQUFXLEVBQ1hpSixNQUFXLEdBR1A1SCxHQUFjLENBQ2xCc00sU0FBVyxtQkFDWDNNLFNB QVcsVUFDWGhCLE1BQVcsVUFDWGlKLEtBQVcsV0FHUGpNLEdBQVEsQ0FDWitLLEtBQUksT0FBdUJq TCxHQUMzQjhRLGVBQWMsZ0JBQXNCOVEsR0FDcENrTCxPQUFNLFNBQXVCbEwsR0FDN0IrSyxLQUFJ LE9BQXVCL0ssR0FDM0JnTCxNQUFLLFFBQXVCaEwsR0FDNUIrUSxRQUFPLFVBQXVCL1EsR0FDOUJn UixPQUFNLFNBQXVCaFIsR0FDN0JpUixjQUFhLGdCQUF1QmpSLEdBQ3BDa1IsZ0JBQWUsa0JBQXVC bFIsR0FDdENtUixnQkFBZSxrQkFBdUJuUixHQUN0Q29SLGtCQUFpQixvQkFBdUJwUixHQUN4Q0ss ZUFBYyxRQUFjTCxHQTlCSCxhQWlDckJNLEdBQ2lCLDBCQURqQkEsR0FFaUIsMEJBRmpCQSxHQUdp QixpQkFIakJBLEdBSWlCLGFBSmpCQSxHQUtpQixPQUxqQkEsR0FNaUIsT0FOakJBLEdBT2lCLGVB R2pCOEIsR0FDYSxnQkFEYkEsR0FFYSxjQUZiQSxHQUdhLHdCQUhiQSxHQUlhLHlCQUpiQSxHQUth LG9EQUxiQSxHQU1hLGNBU2JpUCxjQUNKLFNBQUFBLEVBQVl6VixFQUFTeUIsR0FDbkJ2QyxLQUFL a0wsUUFBdUJsTCxLQUFLbUwsV0FBVzVJLEdBQzVDdkMsS0FBSzBGLFNBQXVCNUUsRUFDNUJkLEtB QUt3VyxRQUF1QjFWLEVBQVFLLGNBQWNtRyxJQUNsRHRILEtBQUt5VyxVQUF1QixLQUM1QnpXLEtB QUswVyxVQUF1QixFQUM1QjFXLEtBQUsyVyxvQkFBdUIsRUFDNUIzVyxLQUFLNFcsc0JBQXVCLEVB QzVCNVcsS0FBS3VRLGtCQUF1QixFQUM1QnZRLEtBQUs2VyxnQkFBdUIsNkJBZTlCblAsT0FBQSxT QUFPMkcsR0FDTCxPQUFPck8sS0FBSzBXLFNBQVcxVyxLQUFLb1IsT0FBU3BSLEtBQUtxUixLQUFL aEQsTUFHakRnRCxLQUFBLFNBQUtoRCxHQUFlLElBQUF0TyxFQUFBQyxLQUNsQixJQUFJQSxLQUFL MFcsV0FBWTFXLEtBQUt1USxpQkFBMUIsQ0FJSXJRLEVBQUVGLEtBQUswRixVQUFVYSxTQUFTZixN QUM1QnhGLEtBQUt1USxrQkFBbUIsR0FHMUIsSUFBTTBELEVBQVkvVCxFQUFFa0YsTUFBTUEsR0FB TTZLLEtBQU0sQ0FDcEM1QixjQUFBQSxJQUdGbk8sRUFBRUYsS0FBSzBGLFVBQVUzRCxRQUFRa1Ms R0FFckJqVSxLQUFLMFcsVUFBWXpDLEVBQVVsTyx1QkFJL0IvRixLQUFLMFcsVUFBVyxFQUVoQjFX LEtBQUs4VyxrQkFDTDlXLEtBQUsrVyxnQkFFTC9XLEtBQUtnWCxnQkFFTGhYLEtBQUtpWCxrQkFD TGpYLEtBQUtrWCxrQkFFTGhYLEVBQUVGLEtBQUswRixVQUFVd0IsR0FDZjlCLEdBQU0rUSxjQUNO N08sR0FDQSxTQUFDakQsR0FBRCxPQUFXdEUsRUFBS3FSLEtBQUsvTSxLQUd2Qm5FLEVBQUVGLEtB QUt3VyxTQUFTdFAsR0FBRzlCLEdBQU1rUixrQkFBbUIsV0FDMUNwVyxFQUFFSCxFQUFLMkYsVUFB VXZGLElBQUlpRixHQUFNaVIsZ0JBQWlCLFNBQUNoUyxHQUN2Q25FLEVBQUVtRSxFQUFNSyxRQUFR QyxHQUFHNUUsRUFBSzJGLFlBQzFCM0YsRUFBSzZXLHNCQUF1QixPQUtsQzVXLEtBQUttWCxjQUFj LFdBQUEsT0FBTXBYLEVBQUtxWCxhQUFhL0ksVUFHN0MrQyxLQUFBLFNBQUsvTSxHQUFPLElBQUEy SSxFQUFBaE4sS0FLVixHQUpJcUUsR0FDRkEsRUFBTTRDLGlCQUdIakgsS0FBSzBXLFdBQVkxVyxL QUFLdVEsaUJBQTNCLENBSUEsSUFBTWlFLEVBQVl0VSxFQUFFa0YsTUFBTUEsR0FBTStLLE1BSWhD LEdBRkFqUSxFQUFFRixLQUFLMEYsVUFBVTNELFFBQVF5UyxHQUVwQnhVLEtBQUswVyxXQUFZbEMs RUFBVXpPLHFCQUFoQyxDQUlBL0YsS0FBSzBXLFVBQVcsRUFDaEIsSUFBTVcsRUFBYW5YLEVBQUVG LEtBQUswRixVQUFVYSxTQUFTZixJQWlCN0MsR0FmSTZSLElBQ0ZyWCxLQUFLdVEsa0JBQW1CLEdB RzFCdlEsS0FBS2lYLGtCQUNMalgsS0FBS2tYLGtCQUVMaFgsRUFBRVMsVUFBVWdNLElBQUl2SCxH QUFNNlEsU0FFdEIvVixFQUFFRixLQUFLMEYsVUFBVVksWUFBWWQsSUFFN0J0RixFQUFFRixLQUFL MEYsVUFBVWlILElBQUl2SCxHQUFNK1EsZUFDM0JqVyxFQUFFRixLQUFLd1csU0FBUzdKLElBQUl2 SCxHQUFNa1IsbUJBR3RCZSxFQUFZLENBQ2QsSUFBTS9WLEVBQXNCbEIsRUFBS2lCLGlDQUFpQ3JC LEtBQUswRixVQUV2RXhGLEVBQUVGLEtBQUswRixVQUNKdkYsSUFBSUMsRUFBS1IsZUFBZ0IsU0FB Q3lFLEdBQUQsT0FBVzJJLEVBQUtzSyxXQUFXalQsS0FDcERELHFCQUFxQjlDLFFBRXhCdEIsS0FB S3NYLGtCQUlUclIsUUFBQSxXQUNFLENBQUN5QyxPQUFRMUksS0FBSzBGLFNBQVUxRixLQUFLd1cs U0FDMUJlLFFBQVEsU0FBQ0MsR0FBRCxPQUFpQnRYLEVBQUVzWCxHQUFhN0ssSUFBSXpILE1BTy9D aEYsRUFBRVMsVUFBVWdNLElBQUl2SCxHQUFNNlEsU0FFdEIvVixFQUFFZ0csV0FBV2xHLEtBQUsw RixTQUFVVCxJQUU1QmpGLEtBQUtrTCxRQUF1QixLQUM1QmxMLEtBQUswRixTQUF1QixLQUM1QjFG LEtBQUt3VyxRQUF1QixLQUM1QnhXLEtBQUt5VyxVQUF1QixLQUM1QnpXLEtBQUswVyxTQUF1QixL QUM1QjFXLEtBQUsyVyxtQkFBdUIsS0FDNUIzVyxLQUFLNFcscUJBQXVCLEtBQzVCNVcsS0FBS3VR LGlCQUF1QixLQUM1QnZRLEtBQUs2VyxnQkFBdUIsUUFHOUJZLGFBQUEsV0FDRXpYLEtBQUtnWCxt QkFLUDdMLFdBQUEsU0FBVzVJLEdBTVQsT0FMQUEsRUFBTXFLLEVBQUEsR0FDRDFELEdBREMsR0FF RDNHLEdBRUxuQyxFQUFLaUMsZ0JBQWdCMkMsR0FBTXpDLEVBQVFrSCxJQUM1QmxILEtBR1RtViwy QkFBQSxXQUE2QixJQUFBdkssRUFBQW5OLEtBQzNCLEdBQThCLFdBQTFCQSxLQUFLa0wsUUFBUTZL LFNBQXVCLENBQ3RDLElBQU00QixFQUFxQnpYLEVBQUVrRixNQUFNQSxHQUFNNFEsZ0JBR3pDLEdB REE5VixFQUFFRixLQUFLMEYsVUFBVTNELFFBQVE0VixHQUNyQkEsRUFBbUJDLGlCQUNyQixPQUdG NVgsS0FBSzBGLFNBQVNzQyxVQUFVaUIsSUFBSXpELElBRTVCLElBQU1xUyxFQUEwQnpYLEVBQUtp QixpQ0FBaUNyQixLQUFLMEYsVUFFM0V4RixFQUFFRixLQUFLMEYsVUFBVXZGLElBQUlDLEVBQUtS LGVBQWdCLFdBQ3hDdU4sRUFBS3pILFNBQVNzQyxVQUFVdEIsT0FBT2xCLE1BRTlCcEIscUJBQXFC eVQsR0FDeEI3WCxLQUFLMEYsU0FBUzBDLGFBRWRwSSxLQUFLb1IsVUFJVGdHLGFBQUEsU0FBYS9J LEdBQWUsSUFBQWEsRUFBQWxQLEtBQ3BCcVgsRUFBYW5YLEVBQUVGLEtBQUswRixVQUFVYSxTQUFT ZixJQUN2Q3NTLEVBQVk5WCxLQUFLd1csUUFBVXhXLEtBQUt3VyxRQUFRclYsY0FBY21HLElBQXVC LEtBRTlFdEgsS0FBSzBGLFNBQVM3QixZQUNmN0QsS0FBSzBGLFNBQVM3QixXQUFXekIsV0FBYTJW LEtBQUtDLGNBRTdDclgsU0FBUzJULEtBQUsyRCxZQUFZalksS0FBSzBGLFVBR2pDMUYsS0FBSzBG LFNBQVNrTSxNQUFNeUIsUUFBVSxRQUM5QnJULEtBQUswRixTQUFTd1MsZ0JBQWdCLGVBQzlCbFks S0FBSzBGLFNBQVM0QyxhQUFhLGNBQWMsR0FFckNwSSxFQUFFRixLQUFLd1csU0FBU2pRLFNBQVNm LEtBQXlCc1MsRUFDcERBLEVBQVVLLFVBQVksRUFFdEJuWSxLQUFLMEYsU0FBU3lTLFVBQVksRUFH eEJkLEdBQ0ZqWCxFQUFLeUIsT0FBTzdCLEtBQUswRixVQUduQnhGLEVBQUVGLEtBQUswRixVQUFV cUosU0FBU3ZKLElBRXRCeEYsS0FBS2tMLFFBQVE5QyxPQUNmcEksS0FBS29ZLGdCQU9vQixTQUFy QkMsSUFDQW5KLEVBQUtoRSxRQUFROUMsT0FDZjhHLEVBQUt4SixTQUFTMEMsUUFFaEI4RyxFQUFL cUIsa0JBQW1CLEVBQ3hCclEsRUFBRWdQLEVBQUt4SixVQUFVM0QsUUFBUXVXLEdBVDNCLElBQU1B LEVBQWFwWSxFQUFFa0YsTUFBTUEsR0FBTThLLE1BQU8sQ0FDdEM3QixjQUFBQSxJQVdGLEdBQUln SixFQUFZLENBQ2QsSUFBTS9WLEVBQXNCbEIsRUFBS2lCLGlDQUFpQ3JCLEtBQUt3VyxTQUV2RXRX LEVBQUVGLEtBQUt3VyxTQUNKclcsSUFBSUMsRUFBS1IsZUFBZ0J5WSxHQUN6QmpVLHFCQUFxQjlD LFFBRXhCK1csT0FJSkQsY0FBQSxXQUFnQixJQUFBRyxFQUFBdlksS0FDZEUsRUFBRVMsVUFDQ2dN LElBQUl2SCxHQUFNNlEsU0FDVi9PLEdBQUc5QixHQUFNNlEsUUFBUyxTQUFDNVIsR0FDZDFELFdB QWEwRCxFQUFNSyxRQUNuQjZULEVBQUs3UyxXQUFhckIsRUFBTUssUUFDc0IsSUFBOUN4RSxFQUFF cVksRUFBSzdTLFVBQVU4UyxJQUFJblUsRUFBTUssUUFBUXNFLFFBQ3JDdVAsRUFBSzdTLFNBQVMw QyxhQUt0QjZPLGdCQUFBLFdBQWtCLElBQUF3QixFQUFBelksS0FDWkEsS0FBSzBXLFVBQVkxVyxL QUFLa0wsUUFBUTlCLFNBQ2hDbEosRUFBRUYsS0FBSzBGLFVBQVV3QixHQUFHOUIsR0FBTWdSLGdC QUFpQixTQUFDL1IsR0FsVHZCLEtBbVRmQSxFQUFNd0osT0FDUjRLLEVBQUtmLCtCQUdDMVgsS0FB SzBXLFVBQ2Z4VyxFQUFFRixLQUFLMEYsVUFBVWlILElBQUl2SCxHQUFNZ1Isb0JBSS9CYyxnQkFB QSxXQUFrQixJQUFBd0IsRUFBQTFZLEtBQ1pBLEtBQUswVyxTQUNQeFcsRUFBRXdJLFFBQVF4QixH QUFHOUIsR0FBTThRLE9BQVEsU0FBQzdSLEdBQUQsT0FBV3FVLEVBQUtqQixhQUFhcFQsS0FFeERu RSxFQUFFd0ksUUFBUWlFLElBQUl2SCxHQUFNOFEsV0FJeEJvQixXQUFBLFdBQWEsSUFBQXFCLEVB QUEzWSxLQUNYQSxLQUFLMEYsU0FBU2tNLE1BQU15QixRQUFVLE9BQzlCclQsS0FBSzBGLFNBQVM0 QyxhQUFhLGVBQWUsR0FDMUN0SSxLQUFLMEYsU0FBU3dTLGdCQUFnQixjQUM5QmxZLEtBQUt1USxr QkFBbUIsRUFDeEJ2USxLQUFLbVgsY0FBYyxXQUNqQmpYLEVBQUVTLFNBQVMyVCxNQUFNaE8sWUFB WWQsSUFDN0JtVCxFQUFLQyxvQkFDTEQsRUFBS0Usa0JBQ0wzWSxFQUFFeVksRUFBS2pULFVBQVUz RCxRQUFRcUQsR0FBTWdMLGFBSW5DMEksZ0JBQUEsV0FDTTlZLEtBQUt5VyxZQUNQdlcsRUFBRUYs S0FBS3lXLFdBQVcvUCxTQUNsQjFHLEtBQUt5VyxVQUFZLFNBSXJCVSxjQUFBLFNBQWM0QixHQUFV LElBQUFDLEVBQUFoWixLQUNoQmlaLEVBQVUvWSxFQUFFRixLQUFLMEYsVUFBVWEsU0FBU2YsSUFD dENBLEdBQWlCLEdBRXJCLEdBQUl4RixLQUFLMFcsVUFBWTFXLEtBQUtrTCxRQUFRNkssU0FBVSxD QTRCMUMsR0EzQkEvVixLQUFLeVcsVUFBWTlWLFNBQVN1WSxjQUFjLE9BQ3hDbFosS0FBS3lXLFVB QVUwQyxVQUFZM1QsR0FFdkJ5VCxHQUNGalosS0FBS3lXLFVBQVV6TyxVQUFVaUIsSUFBSWdRLEdB Ry9CL1ksRUFBRUYsS0FBS3lXLFdBQVcyQyxTQUFTelksU0FBUzJULE1BRXBDcFUsRUFBRUYsS0FB SzBGLFVBQVV3QixHQUFHOUIsR0FBTStRLGNBQWUsU0FBQzlSLEdBQ3BDMlUsRUFBS3BDLHFCQUNQ b0MsRUFBS3BDLHNCQUF1QixFQUcxQnZTLEVBQU1LLFNBQVdMLEVBQU1rTyxlQUkzQnlHLEVBQUt0 QiwrQkFHSHVCLEdBQ0Y3WSxFQUFLeUIsT0FBTzdCLEtBQUt5VyxXQUduQnZXLEVBQUVGLEtBQUt5 VyxXQUFXMUgsU0FBU3ZKLEtBRXRCdVQsRUFDSCxPQUdGLElBQUtFLEVBRUgsWUFEQUYsSUFJRixJ QUFNTSxFQUE2QmpaLEVBQUtpQixpQ0FBaUNyQixLQUFLeVcsV0FFOUV2VyxFQUFFRixLQUFLeVcs V0FDSnRXLElBQUlDLEVBQUtSLGVBQWdCbVosR0FDekIzVSxxQkFBcUJpVixRQUNuQixJQUFLclos S0FBSzBXLFVBQVkxVyxLQUFLeVcsVUFBVyxDQUMzQ3ZXLEVBQUVGLEtBQUt5VyxXQUFXblEsWUFB WWQsSUFFOUIsSUFBTThULEVBQWlCLFdBQ3JCTixFQUFLRixrQkFDREMsR0FDRkEsS0FJSixHQUFJ N1ksRUFBRUYsS0FBSzBGLFVBQVVhLFNBQVNmLElBQWlCLENBQzdDLElBQU02VCxFQUE2QmpaLEVB QUtpQixpQ0FBaUNyQixLQUFLeVcsV0FFOUV2VyxFQUFFRixLQUFLeVcsV0FDSnRXLElBQUlDLEVB QUtSLGVBQWdCMFosR0FDekJsVixxQkFBcUJpVixRQUV4QkMsU0FFT1AsR0FDVEEsT0FTSi9CLGNB QUEsV0FDRSxJQUFNdUMsRUFDSnZaLEtBQUswRixTQUFTOFQsYUFBZTdZLFNBQVM4QyxnQkFBZ0Jn VyxjQUVuRHpaLEtBQUsyVyxvQkFBc0I0QyxJQUM5QnZaLEtBQUswRixTQUFTa00sTUFBTThILFlB QWlCMVosS0FBSzZXLGdCQUExQyxNQUdFN1csS0FBSzJXLHFCQUF1QjRDLElBQzlCdlosS0FBSzBG LFNBQVNrTSxNQUFNK0gsYUFBa0IzWixLQUFLNlcsZ0JBQTNDLFNBSUorQixrQkFBQSxXQUNFNVks S0FBSzBGLFNBQVNrTSxNQUFNOEgsWUFBYyxHQUNsQzFaLEtBQUswRixTQUFTa00sTUFBTStILGFB QWUsTUFHckM3QyxnQkFBQSxXQUNFLElBQU04QyxFQUFPalosU0FBUzJULEtBQUt0Qyx3QkFDM0Jo UyxLQUFLMlcsbUJBQXFCaUQsRUFBS0MsS0FBT0QsRUFBS0UsTUFBUXBSLE9BQU9xUixXQUMxRC9a LEtBQUs2VyxnQkFBa0I3VyxLQUFLZ2Esd0JBRzlCakQsY0FBQSxXQUFnQixJQUFBa0QsRUFBQWph LEtBQ2QsR0FBSUEsS0FBSzJXLG1CQUFvQixDQUczQixJQUFNdUQsRUFBZSxHQUFHdFIsTUFBTS9G LEtBQUtsQyxTQUFTa0ksaUJBQWlCdkIsS0FDdkQ2UyxFQUFnQixHQUFHdlIsTUFBTS9GLEtBQUts QyxTQUFTa0ksaUJBQWlCdkIsS0FHOURwSCxFQUFFZ2EsR0FBY3RULEtBQUssU0FBQzJGLEVBQU96 TCxHQUMzQixJQUFNc1osRUFBZ0J0WixFQUFROFEsTUFBTStILGFBQzlCVSxFQUFvQm5hLEVBQUVZ LEdBQVNTLElBQUksaUJBQ3pDckIsRUFBRVksR0FDQ2dHLEtBQUssZ0JBQWlCc1QsR0FDdEI3WSxJ QUFJLGdCQUFvQkcsV0FBVzJZLEdBQXFCSixFQUFLcEQsZ0JBRmhFLFFBTUYzVyxFQUFFaWEsR0FB ZXZULEtBQUssU0FBQzJGLEVBQU96TCxHQUM1QixJQUFNd1osRUFBZXhaLEVBQVE4USxNQUFNMkks WUFDN0JDLEVBQW1CdGEsRUFBRVksR0FBU1MsSUFBSSxnQkFDeENyQixFQUFFWSxHQUNDZ0csS0FB SyxlQUFnQndULEdBQ3JCL1ksSUFBSSxlQUFtQkcsV0FBVzhZLEdBQW9CUCxFQUFLcEQsZ0JBRjlE LFFBTUYsSUFBTXVELEVBQWdCelosU0FBUzJULEtBQUsxQyxNQUFNK0gsYUFDcENVLEVBQW9CbmEs RUFBRVMsU0FBUzJULE1BQU0vUyxJQUFJLGlCQUMvQ3JCLEVBQUVTLFNBQVMyVCxNQUNSeE4sS0FB SyxnQkFBaUJzVCxHQUN0QjdZLElBQUksZ0JBQW9CRyxXQUFXMlksR0FBcUJyYSxLQUFLNlcsZ0JB RmhFLE1BS0YzVyxFQUFFUyxTQUFTMlQsTUFBTXZGLFNBQVN2SixPQUc1QnFULGdCQUFBLFdBRUUs SUFBTXFCLEVBQWUsR0FBR3RSLE1BQU0vRixLQUFLbEMsU0FBU2tJLGlCQUFpQnZCLEtBQzdEcEgs RUFBRWdhLEdBQWN0VCxLQUFLLFNBQUMyRixFQUFPekwsR0FDM0IsSUFBTTJaLEVBQVV2YSxFQUFF WSxHQUFTZ0csS0FBSyxpQkFDaEM1RyxFQUFFWSxHQUFTb0YsV0FBVyxpQkFDdEJwRixFQUFROFEs TUFBTStILGFBQWVjLEdBQW9CLEtBSW5ELElBQU1DLEVBQVcsR0FBRzlSLE1BQU0vRixLQUFLbEMs U0FBU2tJLGlCQUFULEdBQTZCdkIsS0FDNURwSCxFQUFFd2EsR0FBVTlULEtBQUssU0FBQzJGLEVB QU96TCxHQUN2QixJQUFNNlosRUFBU3phLEVBQUVZLEdBQVNnRyxLQUFLLGdCQUNULG9CQUFYNlQs R0FDVHphLEVBQUVZLEdBQVNTLElBQUksZUFBZ0JvWixHQUFRelUsV0FBVyxrQkFLdEQsSUFBTXVV LEVBQVV2YSxFQUFFUyxTQUFTMlQsTUFBTXhOLEtBQUssaUJBQ3RDNUcsRUFBRVMsU0FBUzJULE1B QU1wTyxXQUFXLGlCQUM1QnZGLFNBQVMyVCxLQUFLMUMsTUFBTStILGFBQWVjLEdBQW9CLE1BR3pE VCxtQkFBQSxXQUNFLElBQU1ZLEVBQVlqYSxTQUFTdVksY0FBYyxPQUN6QzBCLEVBQVV6QixVQUFZ M1QsR0FDdEI3RSxTQUFTMlQsS0FBSzJELFlBQVkyQyxHQUMxQixJQUFNQyxFQUFpQkQsRUFBVTVJ LHdCQUF3QjhJLE1BQVFGLEVBQVVHLFlBRTNFLE9BREFwYSxTQUFTMlQsS0FBSzBHLFlBQVlKLEdB Q25CQyxLQUtGbFUsaUJBQVAsU0FBd0JwRSxFQUFROEwsR0FDOUIsT0FBT3JPLEtBQUs0RyxLQUFL LFdBQ2YsSUFBSUUsRUFBTzVHLEVBQUVGLE1BQU04RyxLQUFLN0IsSUFDbEJpRyxFQUFPMEIsRUFB QSxHQUNSMUQsR0FEUSxHQUVSaEosRUFBRUYsTUFBTThHLE9BRkEsR0FHVSxpQkFBWHZFLEdBQXVC QSxFQUFTQSxFQUFTLElBUXJELEdBTEt1RSxJQUNIQSxFQUFPLElBQUl5UCxFQUFNdlcsS0FBTWtM LEdBQ3ZCaEwsRUFBRUYsTUFBTThHLEtBQUs3QixHQUFVNkIsSUFHSCxpQkFBWHZFLEVBQXFCLENB QzlCLEdBQTRCLG9CQUFqQnVFLEVBQUt2RSxHQUNkLE1BQU0sSUFBSXlCLFVBQUosb0JBQWtDekIs RUFBbEMsS0FFUnVFLEVBQUt2RSxHQUFROEwsUUFDSm5ELEVBQVFtRyxNQUNqQnZLLEVBQUt1SyxL QUFLaEQsOENBOWNkLE1BN0V1Qix3Q0FpRnZCLE9BQU9uRixZQXNkWGhKLEVBQUVTLFVBQVV1RyxH QUFHOUIsR0FBTUcsZUFBZ0IrQixHQUFzQixTQUFVakQsR0FBTyxJQUN0RUssRUFEc0V1VyxFQUFB amIsS0FFcEVlLEVBQVdYLEVBQUtTLHVCQUF1QmIsTUFFekNlLElBQ0YyRCxFQUFTL0QsU0FBU1Es Y0FBY0osSUFHbEMsSUFBTXdCLEVBQVNyQyxFQUFFd0UsR0FBUW9DLEtBQUs3QixJQUMxQixTQURX MkgsRUFBQSxHQUVSMU0sRUFBRXdFLEdBQVFvQyxPQUZGLEdBR1I1RyxFQUFFRixNQUFNOEcsUUFH TSxNQUFqQjlHLEtBQUttSSxTQUFvQyxTQUFqQm5JLEtBQUttSSxTQUMvQjlELEVBQU00QyxpQkFH UixJQUFNeUwsRUFBVXhTLEVBQUV3RSxHQUFRdkUsSUFBSWlGLEdBQU02SyxLQUFNLFNBQUNnRSxH QUNyQ0EsRUFBVWxPLHNCQUtkMk0sRUFBUXZTLElBQUlpRixHQUFNZ0wsT0FBUSxXQUNwQmxRLEVB QUUrYSxHQUFNdFcsR0FBRyxhQUNic1csRUFBSzdTLFlBS1htTyxHQUFNNVAsaUJBQWlCOUQsS0FB SzNDLEVBQUV3RSxHQUFTbkMsRUFBUXZDLFFBU2pERSxFQUFFZ0UsR0FBR2MsSUFBUXVSLEdBQU01 UCxpQkFDbkJ6RyxFQUFFZ0UsR0FBR2MsSUFBTW1DLFlBQWNvUCxHQUN6QnJXLEVBQUVnRSxHQUFH YyxJQUFNb0MsV0FBYSxXQUV0QixPQURBbEgsRUFBRWdFLEdBQUdjLElBQVFHLEdBQ05vUixHQUFN NVAsa0JDN2xCZixJQUFNdVUsR0FBVyxDQUNmLGFBQ0EsT0FDQSxPQUNBLFdBQ0EsV0FDQSxTQUNB LE1BQ0EsY0FLV0MsR0FBbUIsQ0FFOUJDLElBQUssQ0FBQyxRQUFTLE1BQU8sS0FBTSxPQUFRLE9B SlAsa0JBSzdCQyxFQUFHLENBQUMsU0FBVSxPQUFRLFFBQVMsT0FDL0JDLEtBQU0sR0FDTkMsRUFB RyxHQUNIQyxHQUFJLEdBQ0pDLElBQUssR0FDTEMsS0FBTSxHQUNOQyxJQUFLLEdBQ0xDLEdBQUks R0FDSkMsR0FBSSxHQUNKQyxHQUFJLEdBQ0pDLEdBQUksR0FDSkMsR0FBSSxHQUNKQyxHQUFJLEdB Q0pDLEdBQUksR0FDSkMsR0FBSSxHQUNKclQsRUFBRyxHQUNIc1QsSUFBSyxDQUFDLE1BQU8sTUFB TyxRQUFTLFFBQVMsVUFDdENDLEdBQUksR0FDSkMsR0FBSSxHQUNKQyxFQUFHLEdBQ0hDLElBQUss R0FDTEMsRUFBRyxHQUNIQyxNQUFPLEdBQ1BDLEtBQU0sR0FDTkMsSUFBSyxHQUNMQyxJQUFLLEdB Q0xDLE9BQVEsR0FDUkMsRUFBRyxHQUNIQyxHQUFJLElBUUFDLEdBQW1CLDhEQU9uQkMsR0FBbUIs c0lBeUJsQixTQUFTQyxHQUFhQyxFQUFZQyxFQUFXQyxHQUNsRCxHQUEwQixJQUF0QkYsRUFBV3BV LE9BQ2IsT0FBT29VLEVBR1QsR0FBSUUsR0FBb0MsbUJBQWZBLEVBQ3ZCLE9BQU9BLEVBQVdGLEdB UXBCLElBTEEsSUFDTUcsR0FEWSxJQUFJN1UsT0FBTzhVLFdBQ0tDLGdCQUFnQkwsRUFBWSxhQUN4 RE0sRUFBZ0JoYixPQUFPaWIsS0FBS04sR0FDNUIzQyxFQUFXLEdBQUc5UixNQUFNL0YsS0FBSzBh LEVBQWdCakosS0FBS3pMLGlCQUFpQixNQVpQK1UsRUFBQSxTQWNyRDlVLEdBQ1AsSUFBTStVLEVB QUtuRCxFQUFTNVIsR0FDZGdWLEVBQVNELEVBQUdFLFNBQVM1YSxjQUUzQixJQUEwRCxJQUF0RHVh LEVBQWM1UCxRQUFRK1AsRUFBR0UsU0FBUzVhLGVBR3BDLE9BRkEwYSxFQUFHaGEsV0FBV21YLFlB QVk2QyxHQUUxQixXQUdGLElBQU1HLEVBQWdCLEdBQUdwVixNQUFNL0YsS0FBS2diLEVBQUdJLFlB Q2pDQyxFQUF3QixHQUFHQyxPQUFPZCxFQUFVLE1BQVEsR0FBSUEsRUFBVVMsSUFBVyxJQUVuRkUs RUFBY3pHLFFBQVEsU0FBQzFGLElBbEQzQixTQUEwQkEsRUFBTXVNLEdBQzlCLElBQU1DLEVBQVd4 TSxFQUFLa00sU0FBUzVhLGNBRS9CLElBQWdELElBQTVDaWIsRUFBcUJ0USxRQUFRdVEsR0FDL0Is T0FBb0MsSUFBaENuRCxHQUFTcE4sUUFBUXVRLElBQ1pwYyxRQUFRNFAsRUFBS3lNLFVBQVVwYixN QUFNK1osS0FBcUJwTCxFQUFLeU0sVUFBVXBiLE1BQU1nYSxLQVNsRixJQUhBLElBQU1xQixFQUFT SCxFQUFxQnZOLE9BQU8sU0FBQzJOLEdBQUQsT0FBZUEsYUFBcUJwYixTQUd0RTBGLEVBQUksRUFB RzJWLEVBQUlGLEVBQU92VixPQUFRRixFQUFJMlYsRUFBRzNWLElBQ3hDLEdBQUl1VixFQUFTbmIs TUFBTXFiLEVBQU96VixJQUN4QixPQUFPLEVBSVgsT0FBTyxFQStCRTRWLENBQWlCN00sRUFBTXFN LElBQzFCTCxFQUFHM0YsZ0JBQWdCckcsRUFBS2tNLGFBZnJCalYsRUFBSSxFQUFHQyxFQUFNMlIs RUFBUzFSLE9BQVFGLEVBQUlDLEVBQUtELElBQUs4VSxFQUE1QzlVLEdBb0JULE9BQU95VSxFQUFn QmpKLEtBQUtxSyxVQ3hHOUIsSUFBTTNaLEdBQXdCLFVBRXhCQyxHQUF3QixhQUN4QkMsR0FBUyxJ QUFtQkQsR0FDNUJFLEdBQXdCakYsRUFBRWdFLEdBQUdjLElBQzdCNFosR0FBd0IsYUFDeEJDLEdB QXdCLElBQUl6YixPQUFKLFVBQXFCd2IsR0FBckIsT0FBeUMsS0FDakVFLEdBQXdCLENBQUMsV0FB WSxZQUFhLGNBRWxEclYsR0FBYyxDQUNsQnNWLFVBQW9CLFVBQ3BCQyxTQUFvQixTQUNwQkMsTUFB b0IsNEJBQ3BCbGQsUUFBb0IsU0FDcEJtZCxNQUFvQixrQkFDcEJDLEtBQW9CLFVBQ3BCcGUsU0FB b0IsbUJBQ3BCaVUsVUFBb0Isb0JBQ3BCL0IsT0FBb0IsMkJBQ3BCbU0sVUFBb0IsMkJBQ3BCQyxr QkFBb0IsaUJBQ3BCbE0sU0FBb0IsbUJBQ3BCbU0sU0FBb0IsVUFDcEJoQyxXQUFvQixrQkFDcEJE LFVBQW9CLFNBQ3BCL0osYUFBb0IsaUJBR2hCTixHQUFnQixDQUNwQnVNLEtBQVMsT0FDVEMsSUFB UyxNQUNUQyxNQUFTLFFBQ1RDLE9BQVMsU0FDVEMsS0FBUyxRQUdMelcsR0FBVSxDQUNkNlYsV0FB b0IsRUFDcEJDLFNBQW9CLHVHQUdwQmpkLFFBQW9CLGNBQ3BCa2QsTUFBb0IsR0FDcEJDLE1BQW9C LEVBQ3BCQyxNQUFvQixFQUNwQnBlLFVBQW9CLEVBQ3BCaVUsVUFBb0IsTUFDcEIvQixPQUFvQixF QUNwQm1NLFdBQW9CLEVBQ3BCQyxrQkFBb0IsT0FDcEJsTSxTQUFvQixlQUNwQm1NLFVBQW9CLEVB Q3BCaEMsV0FBb0IsS0FDcEJELFVBQW9CbEMsR0FDcEI3SCxhQUFvQixNQUdoQnNNLEdBQ0csT0FE SEEsR0FFRyxNQUdIeGEsR0FBUSxDQUNaK0ssS0FBSSxPQUFnQmpMLEdBQ3BCa0wsT0FBTSxTQUFn QmxMLEdBQ3RCK0ssS0FBSSxPQUFnQi9LLEdBQ3BCZ0wsTUFBSyxRQUFnQmhMLEdBQ3JCMmEsU0FB USxXQUFnQjNhLEdBQ3hCMk4sTUFBSyxRQUFnQjNOLEdBQ3JCK1EsUUFBTyxVQUFnQi9RLEdBQ3ZC NGEsU0FBUSxXQUFnQjVhLEdBQ3hCNEUsV0FBVSxhQUFnQjVFLEdBQzFCNkUsV0FBVSxhQUFnQjdF LElBR3RCTSxHQUNHLE9BREhBLEdBRUcsT0FHSDhCLEdBRVksaUJBRlpBLEdBR1ksU0FHWnlZLEdB Q0ssUUFETEEsR0FFSyxRQUZMQSxHQUdLLFFBSExBLEdBSUssU0FVTEMsY0FDSixTQUFBQSxFQUFZ bGYsRUFBU3lCLEdBQ25CLEdBQXNCLG9CQUFYNFIsRUFDVCxNQUFNLElBQUluUSxVQUFVLG1FQUl0 QmhFLEtBQUtpZ0IsWUFBaUIsRUFDdEJqZ0IsS0FBS2tnQixTQUFpQixFQUN0QmxnQixLQUFLbWdC LFlBQWlCLEdBQ3RCbmdCLEtBQUtvZ0IsZUFBaUIsR0FDdEJwZ0IsS0FBS3dULFFBQWlCLEtBR3RC eFQsS0FBS2MsUUFBVUEsRUFDZmQsS0FBS3VDLE9BQVV2QyxLQUFLbUwsV0FBVzVJLEdBQy9CdkMs S0FBS3FnQixJQUFVLEtBRWZyZ0IsS0FBS3NnQiwyQ0FtQ1BDLE9BQUEsV0FDRXZnQixLQUFLaWdC LFlBQWEsS0FHcEJPLFFBQUEsV0FDRXhnQixLQUFLaWdCLFlBQWEsS0FHcEJRLGNBQUEsV0FDRXpn QixLQUFLaWdCLFlBQWNqZ0IsS0FBS2lnQixjQUcxQnZZLE9BQUEsU0FBT3JELEdBQ0wsR0FBS3JF LEtBQUtpZ0IsV0FJVixHQUFJNWIsRUFBTyxDQUNULElBQU1xYyxFQUFVMWdCLEtBQUs2VSxZQUFZ NVAsU0FDN0J3USxFQUFVdlYsRUFBRW1FLEVBQU1rTyxlQUFlekwsS0FBSzRaLEdBRXJDakwsSUFD SEEsRUFBVSxJQUFJelYsS0FBSzZVLFlBQ2pCeFEsRUFBTWtPLGNBQ052UyxLQUFLMmdCLHNCQUVQ emdCLEVBQUVtRSxFQUFNa08sZUFBZXpMLEtBQUs0WixFQUFTakwsSUFHdkNBLEVBQVEySyxlQUFl USxPQUFTbkwsRUFBUTJLLGVBQWVRLE1BRW5EbkwsRUFBUW9MLHVCQUNWcEwsRUFBUXFMLE9BQU8s S0FBTXJMLEdBRXJCQSxFQUFRc0wsT0FBTyxLQUFNdEwsT0FFbEIsQ0FDTCxHQUFJdlYsRUFBRUYs S0FBS2doQixpQkFBaUJ6YSxTQUFTZixJQUVuQyxZQURBeEYsS0FBSytnQixPQUFPLEtBQU0vZ0Is TUFJcEJBLEtBQUs4Z0IsT0FBTyxLQUFNOWdCLFVBSXRCaUcsUUFBQSxXQUNFeUgsYUFBYTFOLEtB QUtrZ0IsVUFFbEJoZ0IsRUFBRWdHLFdBQVdsRyxLQUFLYyxRQUFTZCxLQUFLNlUsWUFBWTVQLFVB RTVDL0UsRUFBRUYsS0FBS2MsU0FBUzZMLElBQUkzTSxLQUFLNlUsWUFBWTNQLFdBQ3JDaEYsRUFB RUYsS0FBS2MsU0FBU3NGLFFBQVEsVUFBVXVHLElBQUksZ0JBQWlCM00sS0FBS2loQixtQkFFeERq aEIsS0FBS3FnQixLQUNQbmdCLEVBQUVGLEtBQUtxZ0IsS0FBSzNaLFNBR2QxRyxLQUFLaWdCLFdB QWlCLEtBQ3RCamdCLEtBQUtrZ0IsU0FBaUIsS0FDdEJsZ0IsS0FBS21nQixZQUFpQixLQUN0Qm5n QixLQUFLb2dCLGVBQWlCLEtBQ2xCcGdCLEtBQUt3VCxTQUNQeFQsS0FBS3dULFFBQVFpQixVQUdm elUsS0FBS3dULFFBQVUsS0FDZnhULEtBQUtjLFFBQVUsS0FDZmQsS0FBS3VDLE9BQVUsS0FDZnZD LEtBQUtxZ0IsSUFBVSxRQUdqQmhQLEtBQUEsV0FBTyxJQUFBdFIsRUFBQUMsS0FDTCxHQUF1QyxT QUFuQ0UsRUFBRUYsS0FBS2MsU0FBU1MsSUFBSSxXQUN0QixNQUFNLElBQUkrQixNQUFNLHVDQUds QixJQUFNMlEsRUFBWS9ULEVBQUVrRixNQUFNcEYsS0FBSzZVLFlBQVl6UCxNQUFNNkssTUFDakQs R0FBSWpRLEtBQUtraEIsaUJBQW1CbGhCLEtBQUtpZ0IsV0FBWSxDQUMzQy9mLEVBQUVGLEtBQUtj LFNBQVNpQixRQUFRa1MsR0FFeEIsSUFBTWtOLEVBQWEvZ0IsRUFBS29ELGVBQWV4RCxLQUFLYyxT QUN0Q3NnQixFQUFhbGhCLEVBQUUrSCxTQUNKLE9BQWZrWixFQUFzQkEsRUFBYW5oQixLQUFLYyxR QUFRdWdCLGNBQWM1ZCxnQkFDOUR6RCxLQUFLYyxTQUdQLEdBQUltVCxFQUFVbE8sdUJBQXlCcWIs RUFDckMsT0FHRixJQUFNZixFQUFRcmdCLEtBQUtnaEIsZ0JBQ2JNLEVBQVFsaEIsRUFBS0csT0FB T1AsS0FBSzZVLFlBQVk3UCxNQUUzQ3FiLEVBQUkvWCxhQUFhLEtBQU1nWixHQUN2QnRoQixLQUFL YyxRQUFRd0gsYUFBYSxtQkFBb0JnWixHQUU5Q3RoQixLQUFLdWhCLGFBRUR2aEIsS0FBS3VDLE9B QU93YyxXQUNkN2UsRUFBRW1nQixHQUFLdFIsU0FBU3ZKLElBR2xCLElBQU13UCxFQUE4QyxtQkFB MUJoVixLQUFLdUMsT0FBT3lTLFVBQ2xDaFYsS0FBS3VDLE9BQU95UyxVQUFVblMsS0FBSzdDLEtB QU1xZ0IsRUFBS3JnQixLQUFLYyxTQUMzQ2QsS0FBS3VDLE9BQU95UyxVQUVWd00sRUFBYXhoQixL QUFLeWhCLGVBQWV6TSxHQUN2Q2hWLEtBQUswaEIsbUJBQW1CRixHQUV4QixJQUFNcEMsRUFBWXBm LEtBQUsyaEIsZ0JBQ3ZCemhCLEVBQUVtZ0IsR0FBS3ZaLEtBQUs5RyxLQUFLNlUsWUFBWTVQLFNB QVVqRixNQUVsQ0UsRUFBRStILFNBQVNqSSxLQUFLYyxRQUFRdWdCLGNBQWM1ZCxnQkFBaUJ6RCxL QUFLcWdCLE1BQy9EbmdCLEVBQUVtZ0IsR0FBS2pILFNBQVNnRyxHQUdsQmxmLEVBQUVGLEtBQUtj LFNBQVNpQixRQUFRL0IsS0FBSzZVLFlBQVl6UCxNQUFNeWEsVUFFL0M3ZixLQUFLd1QsUUFBVSxJ QUFJVyxFQUFPblUsS0FBS2MsUUFBU3VmLEVBQUtyZ0IsS0FBS3FVLGlCQUFpQm1OLElBRW5FdGhC LEVBQUVtZ0IsR0FBS3RSLFNBQVN2SixJQU1aLGlCQUFrQjdFLFNBQVM4QyxpQkFDN0J2RCxFQUFF UyxTQUFTMlQsTUFBTXhGLFdBQVc1SCxHQUFHLFlBQWEsS0FBTWhILEVBQUVxVSxNQUd0RCxJQUFN cU4sRUFBVyxXQUNYN2hCLEVBQUt3QyxPQUFPd2MsV0FDZGhmLEVBQUs4aEIsaUJBRVAsSUFBTUMs RUFBaUIvaEIsRUFBS29nQixZQUM1QnBnQixFQUFLb2dCLFlBQWtCLEtBRXZCamdCLEVBQUVILEVB QUtlLFNBQVNpQixRQUFRaEMsRUFBSzhVLFlBQVl6UCxNQUFNOEssT0FFM0M0UixJQUFtQmxDLElB Q3JCN2YsRUFBS2doQixPQUFPLEtBQU1oaEIsSUFJdEIsR0FBSUcsRUFBRUYsS0FBS3FnQixLQUFL OVosU0FBU2YsSUFBaUIsQ0FDeEMsSUFBTWxFLEVBQXFCbEIsRUFBS2lCLGlDQUFpQ3JCLEtBQUtx Z0IsS0FFdEVuZ0IsRUFBRUYsS0FBS3FnQixLQUNKbGdCLElBQUlDLEVBQUtSLGVBQWdCZ2lCLEdB Q3pCeGQscUJBQXFCOUMsUUFFeEJzZ0IsUUFLTnhRLEtBQUEsU0FBSzJILEdBR2MsU0FBWDZJLElB Q0E1VSxFQUFLbVQsY0FBZ0JQLElBQW1CUyxFQUFJeGMsWUFDOUN3YyxFQUFJeGMsV0FBV21YLFlB QVlxRixHQUc3QnJULEVBQUsrVSxpQkFDTC9VLEVBQUtsTSxRQUFRb1gsZ0JBQWdCLG9CQUM3QmhZ LEVBQUU4TSxFQUFLbE0sU0FBU2lCLFFBQVFpTCxFQUFLNkgsWUFBWXpQLE1BQU1nTCxRQUMxQixP QUFqQnBELEVBQUt3RyxTQUNQeEcsRUFBS3dHLFFBQVFpQixVQUdYc0UsR0FDRkEsSUFoQlMsSUFB QS9MLEVBQUFoTixLQUNQcWdCLEVBQVlyZ0IsS0FBS2doQixnQkFDakJ4TSxFQUFZdFUsRUFBRWtG LE1BQU1wRixLQUFLNlUsWUFBWXpQLE1BQU0rSyxNQW9CakQsR0FGQWpRLEVBQUVGLEtBQUtjLFNB QVNpQixRQUFReVMsSUFFcEJBLEVBQVV6TyxxQkFBZCxDQWdCQSxHQVpBN0YsRUFBRW1nQixHQUFL L1osWUFBWWQsSUFJZixpQkFBa0I3RSxTQUFTOEMsaUJBQzdCdkQsRUFBRVMsU0FBUzJULE1BQU14 RixXQUFXbkMsSUFBSSxZQUFhLEtBQU16TSxFQUFFcVUsTUFHdkR2VSxLQUFLb2dCLGVBQWVMLEtB QWlCLEVBQ3JDL2YsS0FBS29nQixlQUFlTCxLQUFpQixFQUNyQy9mLEtBQUtvZ0IsZUFBZUwsS0FB aUIsRUFFakM3ZixFQUFFRixLQUFLcWdCLEtBQUs5WixTQUFTZixJQUFpQixDQUN4QyxJQUFNbEUs RUFBcUJsQixFQUFLaUIsaUNBQWlDZ2YsR0FFakVuZ0IsRUFBRW1nQixHQUNDbGdCLElBQUlDLEVB QUtSLGVBQWdCZ2lCLEdBQ3pCeGQscUJBQXFCOUMsUUFFeEJzZ0IsSUFHRjVoQixLQUFLbWdCLFlB QWMsT0FHckJ6TCxPQUFBLFdBQ3VCLE9BQWpCMVUsS0FBS3dULFNBQ1B4VCxLQUFLd1QsUUFBUW1C LG9CQU1qQnVNLGNBQUEsV0FDRSxPQUFPamYsUUFBUWpDLEtBQUtnaUIsZUFHdEJOLG1CQUFBLFNB QW1CRixHQUNqQnRoQixFQUFFRixLQUFLZ2hCLGlCQUFpQmpTLFNBQVk2UCxHQUFwQyxJQUFvRDRD LE1BR3REUixjQUFBLFdBRUUsT0FEQWhoQixLQUFLcWdCLElBQU1yZ0IsS0FBS3FnQixLQUFPbmdC LEVBQUVGLEtBQUt1QyxPQUFPeWMsVUFBVSxHQUN4Q2hmLEtBQUtxZ0IsT0FHZGtCLFdBQUEsV0FD RSxJQUFNbEIsRUFBTXJnQixLQUFLZ2hCLGdCQUNqQmhoQixLQUFLaWlCLGtCQUFrQi9oQixFQUFF bWdCLEVBQUl4WCxpQkFBaUJ2QixLQUEwQnRILEtBQUtnaUIsWUFDN0U5aEIsRUFBRW1nQixHQUFL L1osWUFBZWQsR0FBdEIsSUFBd0NBLE9BRzFDeWMsa0JBQUEsU0FBa0JwYixFQUFVcWIsR0FDSCxp QkFBWkEsSUFBeUJBLEVBQVE5ZixXQUFZOGYsRUFBUS9kLE9BYTVEbkUsS0FBS3VDLE9BQU80YyxN QUNWbmYsS0FBS3VDLE9BQU8rYyxXQUNkNEMsRUFBVS9FLEdBQWErRSxFQUFTbGlCLEtBQUt1QyxP QUFPOGEsVUFBV3JkLEtBQUt1QyxPQUFPK2EsYUFHckV6VyxFQUFTc1ksS0FBSytDLElBRWRyYixF QUFTc2IsS0FBS0QsR0FsQlZsaUIsS0FBS3VDLE9BQU80YyxLQUNUamYsRUFBRWdpQixHQUFTL2Is U0FBU3hCLEdBQUdrQyxJQUMxQkEsRUFBU3ViLFFBQVFDLE9BQU9ILEdBRzFCcmIsRUFBU3NiLEtB QUtqaUIsRUFBRWdpQixHQUFTQyxXQWlCL0JILFNBQUEsV0FDRSxJQUFJL0MsRUFBUWpmLEtBQUtj LFFBQVFFLGFBQWEsdUJBUXRDLE9BTEVpZSxFQURHQSxJQUNrQyxtQkFBdEJqZixLQUFLdUMsT0FB TzBjLE1BQ3ZCamYsS0FBS3VDLE9BQU8wYyxNQUFNcGMsS0FBSzdDLEtBQUtjLFNBQzVCZCxLQUFL dUMsT0FBTzBjLFVBUXBCNUssaUJBQUEsU0FBaUJtTixHQUFZLElBQUFyVSxFQUFBbk4sS0F1QjNC LE9BQUE0TSxFQUFBLEdBdEJ3QixDQUN0Qm9JLFVBQVd3TSxFQUNYck0sVUFBVyxDQUNUbEMsT0FB UWpULEtBQUtpVixhQUNiL0IsS0FBTSxDQUNKb1AsU0FBVXRpQixLQUFLdUMsT0FBTzhjLG1CQUV4 QmtELE1BQU8sQ0FDTHpoQixRQUFTd0csSUFFWCtOLGdCQUFpQixDQUNmQyxrQkFBbUJ0VixLQUFL dUMsT0FBTzRRLFdBR25DcVAsU0FBVSxTQUFDMWIsR0FDTEEsRUFBSzJiLG9CQUFzQjNiLEVBQUtr TyxXQUNsQzdILEVBQUt1Viw2QkFBNkI1YixJQUd0QzZiLFNBQVUsU0FBQzdiLEdBQUQsT0FBVXFH LEVBQUt1Viw2QkFBNkI1YixLQUd4RCxHQUVLOUcsS0FBS3VDLE9BQU8rUSxpQkFJbkIyQixXQUFB LFdBQWEsSUFBQS9GLEVBQUFsUCxLQUNMaVQsRUFBUyxHQWVmLE1BYmtDLG1CQUF2QmpULEtBQUt1 QyxPQUFPMFEsT0FDckJBLEVBQU8vTyxHQUFLLFNBQUM0QyxHQU1YLE9BTEFBLEVBQUtvTyxRQUFM dEksRUFBQSxHQUNLOUYsRUFBS29PLFFBRFYsR0FFS2hHLEVBQUszTSxPQUFPMFEsT0FBT25NLEVB QUtvTyxRQUFTaEcsRUFBS3BPLFVBQVksSUFHaERnRyxHQUdUbU0sRUFBT0EsT0FBU2pULEtBQUt1 QyxPQUFPMFEsT0FHdkJBLEtBR1QwTyxjQUFBLFdBQ0UsT0FBOEIsSUFBMUIzaEIsS0FBS3VDLE9B QU82YyxVQUNQemUsU0FBUzJULEtBR2RsVSxFQUFLOEIsVUFBVWxDLEtBQUt1QyxPQUFPNmMsV0FD dEJsZixFQUFFRixLQUFLdUMsT0FBTzZjLFdBR2hCbGYsRUFBRVMsVUFBVWlpQixLQUFLNWlCLEtB QUt1QyxPQUFPNmMsY0FHdENxQyxlQUFBLFNBQWV6TSxHQUNiLE9BQU9oQyxHQUFjZ0MsRUFBVXpS LGtCQUdqQytjLGNBQUEsV0FBZ0IsSUFBQS9ILEVBQUF2WSxLQUNHQSxLQUFLdUMsT0FBT1IsUUFB UUgsTUFBTSxLQUVsQzJWLFFBQVEsU0FBQ3hWLEdBQ2hCLEdBQWdCLFVBQVpBLEVBQ0Y3QixFQUFF cVksRUFBS3pYLFNBQVNvRyxHQUNkcVIsRUFBSzFELFlBQVl6UCxNQUFNeU4sTUFDdkIwRixFQUFL aFcsT0FBT3hCLFNBQ1osU0FBQ3NELEdBQUQsT0FBV2tVLEVBQUs3USxPQUFPckQsVUFFcEIsR0FB SXRDLElBQVlnZSxHQUFnQixDQUNyQyxJQUFNOEMsRUFBVTlnQixJQUFZZ2UsR0FDeEJ4SCxFQUFL MUQsWUFBWXpQLE1BQU0wRSxXQUN2QnlPLEVBQUsxRCxZQUFZelAsTUFBTTZRLFFBQ3JCNk0sRUFB Vy9nQixJQUFZZ2UsR0FDekJ4SCxFQUFLMUQsWUFBWXpQLE1BQU0yRSxXQUN2QndPLEVBQUsxRCxZ QUFZelAsTUFBTTBhLFNBRTNCNWYsRUFBRXFZLEVBQUt6WCxTQUNKb0csR0FDQzJiLEVBQ0F0SyxF QUFLaFcsT0FBT3hCLFNBQ1osU0FBQ3NELEdBQUQsT0FBV2tVLEVBQUt1SSxPQUFPemMsS0FFeEI2 QyxHQUNDNGIsRUFDQXZLLEVBQUtoVyxPQUFPeEIsU0FDWixTQUFDc0QsR0FBRCxPQUFXa1UsRUFB S3dJLE9BQU8xYyxRQUsvQnJFLEtBQUtpaEIsa0JBQW9CLFdBQ25CMUksRUFBS3pYLFNBQ1B5WCxF QUFLbkgsUUFJVGxSLEVBQUVGLEtBQUtjLFNBQVNzRixRQUFRLFVBQVVjLEdBQ2hDLGdCQUNBbEgs S0FBS2loQixtQkFHSGpoQixLQUFLdUMsT0FBT3hCLFNBQ2RmLEtBQUt1QyxPQUFMcUssRUFBQSxH QUNLNU0sS0FBS3VDLE9BRFYsQ0FFRVIsUUFBUyxTQUNUaEIsU0FBVSxLQUdaZixLQUFLK2lCLGVB SVRBLFVBQUEsV0FDRSxJQUFNQyxTQUFtQmhqQixLQUFLYyxRQUFRRSxhQUFhLHdCQUUvQ2hCLEtB QUtjLFFBQVFFLGFBQWEsVUFBMEIsVUFBZGdpQixJQUN4Q2hqQixLQUFLYyxRQUFRd0gsYUFDWCxz QkFDQXRJLEtBQUtjLFFBQVFFLGFBQWEsVUFBWSxJQUd4Q2hCLEtBQUtjLFFBQVF3SCxhQUFhLFFB QVMsUUFJdkN3WSxPQUFBLFNBQU96YyxFQUFPb1IsR0FDWixJQUFNaUwsRUFBVTFnQixLQUFLNlUs WUFBWTVQLFVBQ2pDd1EsRUFBVUEsR0FBV3ZWLEVBQUVtRSxFQUFNa08sZUFBZXpMLEtBQUs0WixN QUcvQ2pMLEVBQVUsSUFBSXpWLEtBQUs2VSxZQUNqQnhRLEVBQU1rTyxjQUNOdlMsS0FBSzJnQixz QkFFUHpnQixFQUFFbUUsRUFBTWtPLGVBQWV6TCxLQUFLNFosRUFBU2pMLElBR25DcFIsSUFDRm9S LEVBQVEySyxlQUNTLFlBQWYvYixFQUFNeUQsS0FBcUJpWSxHQUFnQkEsS0FDekMsR0FHRjdmLEVB QUV1VixFQUFRdUwsaUJBQWlCemEsU0FBU2YsS0FBbUJpUSxFQUFRMEssY0FBZ0JQLEdBQ2pGbkss RUFBUTBLLFlBQWNQLElBSXhCbFMsYUFBYStILEVBQVF5SyxVQUVyQnpLLEVBQVEwSyxZQUFjUCxH QUVqQm5LLEVBQVFsVCxPQUFPMmMsT0FBVXpKLEVBQVFsVCxPQUFPMmMsTUFBTTdOLEtBS25Eb0Us RUFBUXlLLFNBQVc3ZixXQUFXLFdBQ3hCb1YsRUFBUTBLLGNBQWdCUCxJQUMxQm5LLEVBQVFwRSxR QUVUb0UsRUFBUWxULE9BQU8yYyxNQUFNN04sTUFSdEJvRSxFQUFRcEUsV0FXWjBQLE9BQUEsU0FB TzFjLEVBQU9vUixHQUNaLElBQU1pTCxFQUFVMWdCLEtBQUs2VSxZQUFZNVAsVUFDakN3USxFQUFV QSxHQUFXdlYsRUFBRW1FLEVBQU1rTyxlQUFlekwsS0FBSzRaLE1BRy9DakwsRUFBVSxJQUFJelYs S0FBSzZVLFlBQ2pCeFEsRUFBTWtPLGNBQ052UyxLQUFLMmdCLHNCQUVQemdCLEVBQUVtRSxFQUFN a08sZUFBZXpMLEtBQUs0WixFQUFTakwsSUFHbkNwUixJQUNGb1IsRUFBUTJLLGVBQ1MsYUFBZi9i LEVBQU15RCxLQUFzQmlZLEdBQWdCQSxLQUMxQyxHQUdGdEssRUFBUW9MLHlCQUlablQsYUFBYStI LEVBQVF5SyxVQUVyQnpLLEVBQVEwSyxZQUFjUCxHQUVqQm5LLEVBQVFsVCxPQUFPMmMsT0FBVXpK LEVBQVFsVCxPQUFPMmMsTUFBTTlOLEtBS25EcUUsRUFBUXlLLFNBQVc3ZixXQUFXLFdBQ3hCb1Ys RUFBUTBLLGNBQWdCUCxJQUMxQm5LLEVBQVFyRSxRQUVUcUUsRUFBUWxULE9BQU8yYyxNQUFNOU4s TUFSdEJxRSxFQUFRckUsV0FXWnlQLHFCQUFBLFdBQ0UsSUFBSyxJQUFNOWUsS0FBVy9CLEtBQUtv Z0IsZUFDekIsR0FBSXBnQixLQUFLb2dCLGVBQWVyZSxHQUN0QixPQUFPLEVBSVgsT0FBTyxLQUdU b0osV0FBQSxTQUFXNUksR0FDVCxJQUFNMGdCLEVBQWlCL2lCLEVBQUVGLEtBQUtjLFNBQVNnRyxP QXdDdkMsT0F0Q0FwRSxPQUFPaWIsS0FBS3NGLEdBQ1QxTCxRQUFRLFNBQUMyTCxJQUN5QyxJQUE3 Q3BFLEdBQXNCaFIsUUFBUW9WLFdBQ3pCRCxFQUFlQyxLQVVBLGlCQU41QjNnQixFQUFNcUssRUFB QSxHQUNENU0sS0FBSzZVLFlBQVkzTCxRQURoQixHQUVEK1osRUFGQyxHQUdpQixpQkFBWDFnQixH QUF1QkEsRUFBU0EsRUFBUyxLQUduQzJjLFFBQ2hCM2MsRUFBTzJjLE1BQVEsQ0FDYjdOLEtBQU05 TyxFQUFPMmMsTUFDYjlOLEtBQU03TyxFQUFPMmMsUUFJVyxpQkFBakIzYyxFQUFPMGMsUUFDaEIx YyxFQUFPMGMsTUFBUTFjLEVBQU8wYyxNQUFNaGMsWUFHQSxpQkFBbkJWLEVBQU8yZixVQUNoQjNm LEVBQU8yZixRQUFVM2YsRUFBTzJmLFFBQVFqZixZQUdsQzdDLEVBQUtpQyxnQkFDSDJDLEdBQ0F6 QyxFQUNBdkMsS0FBSzZVLFlBQVlwTCxhQUdmbEgsRUFBTytjLFdBQ1QvYyxFQUFPeWMsU0FBVzdC LEdBQWE1YSxFQUFPeWMsU0FBVXpjLEVBQU84YSxVQUFXOWEsRUFBTythLGFBR3BFL2EsS0FHVG9l LG1CQUFBLFdBQ0UsSUFBTXBlLEVBQVMsR0FFZixHQUFJdkMsS0FBS3VDLE9BQ1AsSUFBSyxJQUFN NGdCLEtBQU9uakIsS0FBS3VDLE9BQ2pCdkMsS0FBSzZVLFlBQVkzTCxRQUFRaWEsS0FBU25qQixL QUFLdUMsT0FBTzRnQixLQUNoRDVnQixFQUFPNGdCLEdBQU9uakIsS0FBS3VDLE9BQU80Z0IsSUFL aEMsT0FBTzVnQixLQUdUd2YsZUFBQSxXQUNFLElBQU1xQixFQUFPbGpCLEVBQUVGLEtBQUtnaEIs aUJBQ2RxQyxFQUFXRCxFQUFLdlIsS0FBSyxTQUFTM08sTUFBTTJiLElBQ3pCLE9BQWJ3RSxHQUFx QkEsRUFBU3JhLFFBQ2hDb2EsRUFBSzljLFlBQVkrYyxFQUFTQyxLQUFLLFFBSW5DWiw2QkFBQSxT QUE2QmEsR0FDM0IsSUFBTUMsRUFBaUJELEVBQVdFLFNBQ2xDempCLEtBQUtxZ0IsSUFBTW1ELEVB QWVFLE9BQzFCMWpCLEtBQUsraEIsaUJBQ0wvaEIsS0FBSzBoQixtQkFBbUIxaEIsS0FBS3loQixl QUFlOEIsRUFBV3ZPLGVBR3pENk0sZUFBQSxXQUNFLElBQU14QixFQUFNcmdCLEtBQUtnaEIsZ0JB Q1gyQyxFQUFzQjNqQixLQUFLdUMsT0FBT3djLFVBRUEsT0FBcENzQixFQUFJcmYsYUFBYSxpQkFJ ckJkLEVBQUVtZ0IsR0FBSy9aLFlBQVlkLElBQ25CeEYsS0FBS3VDLE9BQU93YyxXQUFZLEVBQ3hC L2UsS0FBS29SLE9BQ0xwUixLQUFLcVIsT0FDTHJSLEtBQUt1QyxPQUFPd2MsVUFBWTRFLE1BS25C aGQsaUJBQVAsU0FBd0JwRSxHQUN0QixPQUFPdkMsS0FBSzRHLEtBQUssV0FDZixJQUFJRSxFQUFP NUcsRUFBRUYsTUFBTThHLEtBQUs3QixJQUNsQmlHLEVBQTRCLGlCQUFYM0ksR0FBdUJBLEVBRTlD LElBQUt1RSxJQUFRLGVBQWV6RCxLQUFLZCxNQUk1QnVFLElBQ0hBLEVBQU8sSUFBSWtaLEVBQVFo Z0IsS0FBTWtMLEdBQ3pCaEwsRUFBRUYsTUFBTThHLEtBQUs3QixHQUFVNkIsSUFHSCxpQkFBWHZF LEdBQXFCLENBQzlCLEdBQTRCLG9CQUFqQnVFLEVBQUt2RSxHQUNkLE1BQU0sSUFBSXlCLFVBQUos b0JBQWtDekIsRUFBbEMsS0FFUnVFLEVBQUt2RSxpREFybkJULE1BM0gwQix3Q0ErSDFCLE9BQU8y RyxnQ0FJUCxPQUFPbEUsb0NBSVAsT0FBT0MsaUNBSVAsT0FBT0cscUNBSVAsT0FBT0YsdUNBSVAs T0FBT3VFLFlBeW1CWHZKLEVBQUVnRSxHQUFHYyxJQUFRZ2IsR0FBUXJaLGlCQUNyQnpHLEVBQUVn RSxHQUFHYyxJQUFNbUMsWUFBYzZZLEdBQ3pCOWYsRUFBRWdFLEdBQUdjLElBQU1vQyxXQUFhLFdB RXRCLE9BREFsSCxFQUFFZ0UsR0FBR2MsSUFBUUcsR0FDTjZhLEdBQVFyWixrQkN0d0JqQixJQUFN M0IsR0FBc0IsVUFFdEJDLEdBQXNCLGFBQ3RCQyxHQUFTLElBQWlCRCxHQUMxQkUsR0FBc0JqRixF QUFFZ0UsR0FBR2MsSUFDM0I0WixHQUFzQixhQUN0QkMsR0FBc0IsSUFBSXpiLE9BQUosVUFBcUJ3 YixHQUFyQixPQUF5QyxLQUUvRDFWLEdBQU8wRCxFQUFBLEdBQ1JvVCxHQUFROVcsUUFEQSxDQUVY OEwsVUFBWSxRQUNaalQsUUFBWSxRQUNabWdCLFFBQVksR0FDWmxELFNBQVksd0lBTVJ2VixHQUFX bUQsRUFBQSxHQUNab1QsR0FBUXZXLFlBREksQ0FFZnlZLFFBQVUsOEJBR04xYyxHQUNHLE9BREhB LEdBRUcsT0FHSDhCLEdBQ00sa0JBRE5BLEdBRU0sZ0JBR05sQyxHQUFRLENBQ1orSyxLQUFJLE9B QWdCakwsR0FDcEJrTCxPQUFNLFNBQWdCbEwsR0FDdEIrSyxLQUFJLE9BQWdCL0ssR0FDcEJnTCxN QUFLLFFBQWdCaEwsR0FDckIyYSxTQUFRLFdBQWdCM2EsR0FDeEIyTixNQUFLLFFBQWdCM04sR0FD ckIrUSxRQUFPLFVBQWdCL1EsR0FDdkI0YSxTQUFRLFdBQWdCNWEsR0FDeEI0RSxXQUFVLGFBQWdC NUUsR0FDMUI2RSxXQUFVLGFBQWdCN0UsSUFTdEIwZSxnTUFpQ0oxQyxjQUFBLFdBQ0UsT0FBT2xo QixLQUFLZ2lCLFlBQWNoaUIsS0FBSzZqQixpQkFHakNuQyxtQkFBQSxTQUFtQkYsR0FDakJ0aEIs RUFBRUYsS0FBS2doQixpQkFBaUJqUyxTQUFZNlAsR0FBcEMsSUFBb0Q0QyxNQUd0RFIsY0FBQSxX QUVFLE9BREFoaEIsS0FBS3FnQixJQUFNcmdCLEtBQUtxZ0IsS0FBT25nQixFQUFFRixLQUFLdUMs T0FBT3ljLFVBQVUsR0FDeENoZixLQUFLcWdCLE9BR2RrQixXQUFBLFdBQ0UsSUFBTTZCLEVBQU9s akIsRUFBRUYsS0FBS2doQixpQkFHcEJoaEIsS0FBS2lpQixrQkFBa0JtQixFQUFLUixLQUFLdGIs SUFBaUJ0SCxLQUFLZ2lCLFlBQ3ZELElBQUlFLEVBQVVsaUIsS0FBSzZqQixjQUNJLG1CQUFaM0Is SUFDVEEsRUFBVUEsRUFBUXJmLEtBQUs3QyxLQUFLYyxVQUU5QmQsS0FBS2lpQixrQkFBa0JtQixF QUFLUixLQUFLdGIsSUFBbUI0YSxHQUVwRGtCLEVBQUs5YyxZQUFlZCxHQUFwQixJQUFzQ0EsT0FL eENxZSxZQUFBLFdBQ0UsT0FBTzdqQixLQUFLYyxRQUFRRSxhQUFhLGlCQUMvQmhCLEtBQUt1QyxP QUFPMmYsV0FHaEJILGVBQUEsV0FDRSxJQUFNcUIsRUFBT2xqQixFQUFFRixLQUFLZ2hCLGlCQUNk cUMsRUFBV0QsRUFBS3ZSLEtBQUssU0FBUzNPLE1BQU0yYixJQUN6QixPQUFid0UsR0FBdUMsRUFB bEJBLEVBQVNyYSxRQUNoQ29hLEVBQUs5YyxZQUFZK2MsRUFBU0MsS0FBSyxRQU01QjNjLGlCQUFQ LFNBQXdCcEUsR0FDdEIsT0FBT3ZDLEtBQUs0RyxLQUFLLFdBQ2YsSUFBSUUsRUFBTzVHLEVBQUVG LE1BQU04RyxLQUFLN0IsSUFDbEJpRyxFQUE0QixpQkFBWDNJLEVBQXNCQSxFQUFTLEtBRXRELElB QUt1RSxJQUFRLGVBQWV6RCxLQUFLZCxNQUk1QnVFLElBQ0hBLEVBQU8sSUFBSThjLEVBQVE1akIs S0FBTWtMLEdBQ3pCaEwsRUFBRUYsTUFBTThHLEtBQUs3QixHQUFVNkIsSUFHSCxpQkFBWHZFLEdB QXFCLENBQzlCLEdBQTRCLG9CQUFqQnVFLEVBQUt2RSxHQUNkLE1BQU0sSUFBSXlCLFVBQUosb0JB QWtDekIsRUFBbEMsS0FFUnVFLEVBQUt2RSxpREEzRlQsTUF4RHdCLHdDQTREeEIsT0FBTzJHLGdD QUlQLE9BQU9sRSxvQ0FJUCxPQUFPQyxpQ0FJUCxPQUFPRyxxQ0FJUCxPQUFPRix1Q0FJUCxPQUFP dUUsVUE1Qld1VyxJQTJHdEI5ZixFQUFFZ0UsR0FBR2MsSUFBUTRlLEdBQVFqZCxpQkFDckJ6RyxF QUFFZ0UsR0FBR2MsSUFBTW1DLFlBQWN5YyxHQUN6QjFqQixFQUFFZ0UsR0FBR2MsSUFBTW9DLFdB QWEsV0FFdEIsT0FEQWxILEVBQUVnRSxHQUFHYyxJQUFRRyxHQUNOeWUsR0FBUWpkLGtCQ3BLakIs SUFBTTNCLEdBQXFCLFlBRXJCQyxHQUFxQixlQUNyQkMsR0FBUyxJQUFnQkQsR0FFekJFLEdBQXFC akYsRUFBRWdFLEdBQUdjLElBRTFCa0UsR0FBVSxDQUNkK0osT0FBUyxHQUNUNlEsT0FBUyxPQUNU cGYsT0FBUyxJQUdMK0UsR0FBYyxDQUNsQndKLE9BQVMsU0FDVDZRLE9BQVMsU0FDVHBmLE9BQVMs b0JBR0xVLEdBQVEsQ0FDWjJlLFNBQVEsV0FBbUI3ZSxHQUMzQjhlLE9BQU0sU0FBbUI5ZSxHQUN6 QnNDLGNBQWEsT0FBVXRDLEdBbEJFLGFBcUJyQk0sR0FDWSxnQkFEWkEsR0FHWSxTQUdaOEIsR0FD YyxzQkFEZEEsR0FHYyxvQkFIZEEsR0FJYyxZQUpkQSxHQUtjLFlBTGRBLEdBTWMsbUJBTmRBLEdB T2MsWUFQZEEsR0FRYyxpQkFSZEEsR0FTYyxtQkFHZDJjLEdBQ08sU0FEUEEsR0FFTyxXQVNQQyxj QUNKLFNBQUFBLEVBQVlwakIsRUFBU3lCLEdBQVEsSUFBQXhDLEVBQUFDLEtBQzNCQSxLQUFLMEYs U0FBaUI1RSxFQUN0QmQsS0FBS21rQixlQUFxQyxTQUFwQnJqQixFQUFRcUgsUUFBcUJPLE9BQVM1 SCxFQUM1RGQsS0FBS2tMLFFBQWlCbEwsS0FBS21MLFdBQVc1SSxHQUN0Q3ZDLEtBQUsrUSxVQUFv Qi9RLEtBQUtrTCxRQUFReEcsT0FBaEIsSUFBMEI0QyxHQUExQixJQUNHdEgsS0FBS2tMLFFBQVF4 RyxPQURoQixJQUMwQjRDLEdBRDFCLElBRUd0SCxLQUFLa0wsUUFBUXhHLE9BRmhCLElBRTBCNEMs R0FDaER0SCxLQUFLb2tCLFNBQWlCLEdBQ3RCcGtCLEtBQUtxa0IsU0FBaUIsR0FDdEJya0IsS0FB S3NrQixjQUFpQixLQUN0QnRrQixLQUFLdWtCLGNBQWlCLEVBRXRCcmtCLEVBQUVGLEtBQUtta0Is Z0JBQWdCamQsR0FBRzlCLEdBQU00ZSxPQUFRLFNBQUMzZixHQUFELE9BQVd0RSxFQUFLeWtCLFNB QVNuZ0IsS0FFakVyRSxLQUFLeWtCLFVBQ0x6a0IsS0FBS3drQixzQ0FlUEMsUUFBQSxXQUFVLElB QUF6WCxFQUFBaE4sS0FDRjBrQixFQUFhMWtCLEtBQUtta0IsaUJBQW1CbmtCLEtBQUtta0IsZUFB ZXpiLE9BQzNEdWIsR0FBc0JBLEdBRXBCVSxFQUF1QyxTQUF4QjNrQixLQUFLa0wsUUFBUTRZLE9B QzlCWSxFQUFhMWtCLEtBQUtrTCxRQUFRNFksT0FFeEJjLEVBQWFELElBQWlCVixHQUNoQ2prQixL QUFLNmtCLGdCQUFrQixFQUUzQjdrQixLQUFLb2tCLFNBQVcsR0FDaEJwa0IsS0FBS3FrQixTQUFX LEdBRWhCcmtCLEtBQUt1a0IsY0FBZ0J2a0IsS0FBSzhrQixtQkFFVixHQUFHbGMsTUFBTS9GLEtB QUtsQyxTQUFTa0ksaUJBQWlCN0ksS0FBSytRLFlBRzFEZ1UsSUFBSSxTQUFDamtCLEdBQ0osSUFB STRELEVBQ0VzZ0IsRUFBaUI1a0IsRUFBS1MsdUJBQXVCQyxHQU1uRCxHQUpJa2tCLElBQ0Z0Z0Is RUFBUy9ELFNBQVNRLGNBQWM2akIsSUFHOUJ0Z0IsRUFBUSxDQUNWLElBQU11Z0IsRUFBWXZnQixF QUFPc04sd0JBQ3pCLEdBQUlpVCxFQUFVbkssT0FBU21LLEVBQVVDLE9BRS9CLE1BQU8sQ0FDTGhs QixFQUFFd0UsR0FBUWlnQixLQUFnQlEsSUFBTVAsRUFDaENJLEdBSU4sT0FBTyxPQUVSblUsT0FB TyxTQUFDaUYsR0FBRCxPQUFVQSxJQUNqQnNQLEtBQUssU0FBQy9KLEVBQUdFLEdBQUosT0FBVUYs RUFBRSxHQUFLRSxFQUFFLEtBQ3hCaEUsUUFBUSxTQUFDekIsR0FDUjlJLEVBQUtvWCxTQUFTcFQs S0FBSzhFLEVBQUssSUFDeEI5SSxFQUFLcVgsU0FBU3JULEtBQUs4RSxFQUFLLFNBSTlCN1AsUUFB QSxXQUNFL0YsRUFBRWdHLFdBQVdsRyxLQUFLMEYsU0FBVVQsSUFDNUIvRSxFQUFFRixLQUFLbWtC LGdCQUFnQnhYLElBQUl6SCxJQUUzQmxGLEtBQUswRixTQUFpQixLQUN0QjFGLEtBQUtta0IsZUFB aUIsS0FDdEJua0IsS0FBS2tMLFFBQWlCLEtBQ3RCbEwsS0FBSytRLFVBQWlCLEtBQ3RCL1EsS0FB S29rQixTQUFpQixLQUN0QnBrQixLQUFLcWtCLFNBQWlCLEtBQ3RCcmtCLEtBQUtza0IsY0FBaUIs S0FDdEJ0a0IsS0FBS3VrQixjQUFpQixRQUt4QnBaLFdBQUEsU0FBVzVJLEdBTVQsR0FBNkIsaUJB TDdCQSxFQUFNcUssRUFBQSxHQUNEMUQsR0FEQyxHQUVpQixpQkFBWDNHLEdBQXVCQSxFQUFTQSxF QUFTLEtBR25DbUMsT0FBcUIsQ0FDckMsSUFBSStMLEVBQUt2USxFQUFFcUMsRUFBT21DLFFBQVFt TixLQUFLLE1BQzFCcEIsSUFDSEEsRUFBS3JRLEVBQUtHLE9BQU95RSxJQUNqQjlFLEVBQUVxQyxF QUFPbUMsUUFBUW1OLEtBQUssS0FBTXBCLElBRTlCbE8sRUFBT21DLE9BQVAsSUFBb0IrTCxFQUt0 QixPQUZBclEsRUFBS2lDLGdCQUFnQjJDLEdBQU16QyxFQUFRa0gsSUFFNUJsSCxLQUdUc2lCLGNB QUEsV0FDRSxPQUFPN2tCLEtBQUtta0IsaUJBQW1CemIsT0FDM0IxSSxLQUFLbWtCLGVBQWVrQixZ QUFjcmxCLEtBQUtta0IsZUFBZWhNLGFBRzVEMk0saUJBQUEsV0FDRSxPQUFPOWtCLEtBQUtta0Is ZUFBZTNLLGNBQWdCL1ksS0FBSzZrQixJQUM5QzNrQixTQUFTMlQsS0FBS2tGLGFBQ2Q3WSxTQUFT OEMsZ0JBQWdCK1YsaUJBSTdCK0wsaUJBQUEsV0FDRSxPQUFPdmxCLEtBQUtta0IsaUJBQW1CemIs T0FDM0JBLE9BQU84YyxZQUFjeGxCLEtBQUtta0IsZUFBZW5TLHdCQUF3QmtULFVBR3ZFVixTQUFB LFdBQ0UsSUFBTXJNLEVBQWVuWSxLQUFLNmtCLGdCQUFrQjdrQixLQUFLa0wsUUFBUStILE9BQ25E dUcsRUFBZXhaLEtBQUs4a0IsbUJBQ3BCVyxFQUFlemxCLEtBQUtrTCxRQUFRK0gsT0FDaEN1RyxF QUNBeFosS0FBS3VsQixtQkFNUCxHQUpJdmxCLEtBQUt1a0IsZ0JBQWtCL0ssR0FDekJ4WixLQUFL eWtCLFVBR1VnQixHQUFidE4sRUFBSixDQUNFLElBQU16VCxFQUFTMUUsS0FBS3FrQixTQUFTcmtC LEtBQUtxa0IsU0FBU3JiLE9BQVMsR0FFaERoSixLQUFLc2tCLGdCQUFrQjVmLEdBQ3pCMUUsS0FB SzBsQixVQUFVaGhCLE9BSm5CLENBU0EsR0FBSTFFLEtBQUtza0IsZUFBaUJuTSxFQUFZblksS0FB S29rQixTQUFTLElBQXlCLEVBQW5CcGtCLEtBQUtva0IsU0FBUyxHQUd0RSxPQUZBcGtCLEtBQUtz a0IsY0FBZ0IsVUFDckJ0a0IsS0FBSzJsQixTQUtQLElBREEsSUFDUzdjLEVBRFk5SSxLQUFLb2tC LFNBQVNwYixPQUNSRixLQUFNLENBQ1I5SSxLQUFLc2tCLGdCQUFrQnRrQixLQUFLcWtCLFNBQVN2 YixJQUN4RHFQLEdBQWFuWSxLQUFLb2tCLFNBQVN0YixLQUNNLG9CQUF6QjlJLEtBQUtva0IsU0FB U3RiLEVBQUksSUFDdEJxUCxFQUFZblksS0FBS29rQixTQUFTdGIsRUFBSSxLQUdwQzlJLEtBQUsw bEIsVUFBVTFsQixLQUFLcWtCLFNBQVN2YixTQUtuQzRjLFVBQUEsU0FBVWhoQixHQUNSMUUsS0FB S3NrQixjQUFnQjVmLEVBRXJCMUUsS0FBSzJsQixTQUVMLElBQU1DLEVBQVU1bEIsS0FBSytRLFVB Q2xCblAsTUFBTSxLQUNObWpCLElBQUksU0FBQ2hrQixHQUFELE9BQWlCQSxFQUFqQixpQkFBMEMy RCxFQUExQyxNQUFzRDNELEVBQXRELFVBQXdFMkQsRUFBeEUsT0FFRG1oQixFQUFRM2xCLEVBQUUs R0FBRzBJLE1BQU0vRixLQUFLbEMsU0FBU2tJLGlCQUFpQitjLEVBQVF0QyxLQUFLLFFBRWpFdUMs RUFBTXRmLFNBQVNmLEtBQ2pCcWdCLEVBQU16ZixRQUFRa0IsSUFBbUJzYixLQUFLdGIsSUFBMEJ5 SCxTQUFTdkosSUFDekVxZ0IsRUFBTTlXLFNBQVN2SixNQUdmcWdCLEVBQU05VyxTQUFTdkosSUFH ZnFnQixFQUFNQyxRQUFReGUsSUFBeUIwRSxLQUFRMUUsR0FBL0MsS0FBc0VBLElBQXVCeUgsU0FB U3ZKLElBRXRHcWdCLEVBQU1DLFFBQVF4ZSxJQUF5QjBFLEtBQUsxRSxJQUFvQndILFNBQVN4SCxJ QUFvQnlILFNBQVN2SixLQUd4R3RGLEVBQUVGLEtBQUtta0IsZ0JBQWdCcGlCLFFBQVFxRCxHQUFN MmUsU0FBVSxDQUM3QzFWLGNBQWUzSixPQUluQmloQixPQUFBLFdBQ0UsR0FBRy9jLE1BQU0vRixL QUFLbEMsU0FBU2tJLGlCQUFpQjdJLEtBQUsrUSxZQUMxQ0YsT0FBTyxTQUFDa1YsR0FBRCxPQUFV QSxFQUFLL2QsVUFBVUMsU0FBU3pDLE1BQ3pDK1IsUUFBUSxTQUFDd08sR0FBRCxPQUFVQSxFQUFL L2QsVUFBVXRCLE9BQU9sQixTQUt0Q21CLGlCQUFQLFNBQXdCcEUsR0FDdEIsT0FBT3ZDLEtBQUs0 RyxLQUFLLFdBQ2YsSUFBSUUsRUFBTzVHLEVBQUVGLE1BQU04RyxLQUFLN0IsSUFReEIsR0FMSzZC LElBQ0hBLEVBQU8sSUFBSW9kLEVBQVVsa0IsS0FIVyxpQkFBWHVDLEdBQXVCQSxHQUk1Q3JDLEVB QUVGLE1BQU04RyxLQUFLN0IsR0FBVTZCLElBR0gsaUJBQVh2RSxFQUFxQixDQUM5QixHQUE0Qixv QkFBakJ1RSxFQUFLdkUsR0FDZCxNQUFNLElBQUl5QixVQUFKLG9CQUFrQ3pCLEVBQWxDLEtBRVJ1 RSxFQUFLdkUsaURBdE1ULE1BM0V1Qix3Q0ErRXZCLE9BQU8yRyxZQThNWGhKLEVBQUV3SSxRQUFR eEIsR0FBRzlCLEdBQU1vQyxjQUFlLFdBSWhDLElBSEEsSUFBTXdlLEVBQWEsR0FBR3BkLE1BQU0v RixLQUFLbEMsU0FBU2tJLGlCQUFpQnZCLEtBR2xEd0IsRUFGZ0JrZCxFQUFXaGQsT0FFTEYsS0FB TSxDQUNuQyxJQUFNbWQsRUFBTy9sQixFQUFFOGxCLEVBQVdsZCxJQUMxQm9iLEdBQVV2ZCxpQkFB aUI5RCxLQUFLb2pCLEVBQU1BLEVBQUtuZixXQVUvQzVHLEVBQUVnRSxHQUFHYyxJQUFRa2YsR0FB VXZkLGlCQUN2QnpHLEVBQUVnRSxHQUFHYyxJQUFNbUMsWUFBYytjLEdBQ3pCaGtCLEVBQUVnRSxH QUFHYyxJQUFNb0MsV0FBYSxXQUV0QixPQURBbEgsRUFBRWdFLEdBQUdjLElBQVFHLEdBQ04rZSxH QUFVdmQsa0JDbFRuQixJQUVNMUIsR0FBcUIsU0FDckJDLEdBQVMsSUFBZ0JELEdBRXpCRSxHQUFx QmpGLEVBQUVnRSxHQUFGLElBRXJCa0IsR0FBUSxDQUNaK0ssS0FBSSxPQUFvQmpMLEdBQ3hCa0ws T0FBTSxTQUFvQmxMLEdBQzFCK0ssS0FBSSxPQUFvQi9LLEdBQ3hCZ0wsTUFBSyxRQUFvQmhMLEdB Q3pCSyxlQUFjLFFBQVdMLEdBUkEsYUFXckJNLEdBQ1ksZ0JBRFpBLEdBRVksU0FGWkEsR0FHWSxX QUhaQSxHQUlZLE9BSlpBLEdBS1ksT0FHWjhCLEdBQ29CLFlBRHBCQSxHQUVvQixvQkFGcEJBLEdB R29CLFVBSHBCQSxHQUlvQixpQkFKcEJBLEdBS29CLGtFQUxwQkEsR0FNb0IsbUJBTnBCQSxHQU9v QiwyQkFTcEI0ZSxjQUNKLFNBQUFBLEVBQVlwbEIsR0FDVmQsS0FBSzBGLFNBQVc1RSw2QkFXbEJ1 USxLQUFBLFdBQU8sSUFBQXRSLEVBQUFDLEtBQ0wsS0FBSUEsS0FBSzBGLFNBQVM3QixZQUNkN0Qs S0FBSzBGLFNBQVM3QixXQUFXekIsV0FBYTJWLEtBQUtDLGNBQzNDOVgsRUFBRUYsS0FBSzBGLFVB QVVhLFNBQVNmLEtBQzFCdEYsRUFBRUYsS0FBSzBGLFVBQVVhLFNBQVNmLEtBSDlCLENBT0EsSUFB SWQsRUFDQXloQixFQUNFQyxFQUFjbG1CLEVBQUVGLEtBQUswRixVQUFVVSxRQUFRa0IsSUFBeUIs R0FDaEV2RyxFQUFXWCxFQUFLUyx1QkFBdUJiLEtBQUswRixVQUVsRCxHQUFJMGdCLEVBQWEsQ0FD ZixJQUFNQyxFQUF3QyxPQUF6QkQsRUFBWXJJLFVBQThDLE9BQXpCcUksRUFBWXJJLFNBQW9Celcs R0FBcUJBLEdBRTNHNmUsR0FEQUEsRUFBV2ptQixFQUFFb21CLFVBQVVwbUIsRUFBRWttQixHQUFh eEQsS0FBS3lELEtBQ3ZCRixFQUFTbmQsT0FBUyxHQUd4QyxJQUFNd0wsRUFBWXRVLEVBQUVrRixN QUFNQSxHQUFNK0ssS0FBTSxDQUNwQzlCLGNBQWVyTyxLQUFLMEYsV0FHaEJ1TyxFQUFZL1QsRUFB RWtGLE1BQU1BLEdBQU02SyxLQUFNLENBQ3BDNUIsY0FBZThYLElBU2pCLEdBTklBLEdBQ0ZqbUIs RUFBRWltQixHQUFVcGtCLFFBQVF5UyxHQUd0QnRVLEVBQUVGLEtBQUswRixVQUFVM0QsUUFBUWtT LElBRXJCQSxFQUFVbE8sdUJBQ1Z5TyxFQUFVek8scUJBRGQsQ0FLSWhGLElBQ0YyRCxFQUFTL0Qs U0FBU1EsY0FBY0osSUFHbENmLEtBQUswbEIsVUFDSDFsQixLQUFLMEYsU0FDTDBnQixHQUdGLElB QU14RSxFQUFXLFdBQ2YsSUFBTTJFLEVBQWNybUIsRUFBRWtGLE1BQU1BLEdBQU1nTCxPQUFRLENB Q3hDL0IsY0FBZXRPLEVBQUsyRixXQUdoQjRTLEVBQWFwWSxFQUFFa0YsTUFBTUEsR0FBTThLLE1B QU8sQ0FDdEM3QixjQUFlOFgsSUFHakJqbUIsRUFBRWltQixHQUFVcGtCLFFBQVF3a0IsR0FDcEJy bUIsRUFBRUgsRUFBSzJGLFVBQVUzRCxRQUFRdVcsSUFHdkI1VCxFQUNGMUUsS0FBSzBsQixVQUFV aGhCLEVBQVFBLEVBQU9iLFdBQVkrZCxHQUUxQ0EsU0FJSjNiLFFBQUEsV0FDRS9GLEVBQUVnRyxX QUFXbEcsS0FBSzBGLFNBQVVULElBQzVCakYsS0FBSzBGLFNBQVcsUUFLbEJnZ0IsVUFBQSxTQUFV NWtCLEVBQVNzZSxFQUFXckcsR0FPWCxTQUFYNkksSUFBVyxPQUFNNVUsRUFBS3daLG9CQUMxQjFs QixFQUNBMmxCLEVBQ0ExTixHQVZvQyxJQUFBL0wsRUFBQWhOLEtBS2hDeW1CLElBSmlCckgsR0FB cUMsT0FBdkJBLEVBQVVyQixVQUE0QyxPQUF2QnFCLEVBQVVyQixTQUUxRTdkLEVBQUVrZixHQUFX dFEsU0FBU3hILElBRHRCcEgsRUFBRWtmLEdBQVd3RCxLQUFLdGIsS0FHUSxHQUN4QjRLLEVBQWtC NkcsR0FBYTBOLEdBQVV2bUIsRUFBRXVtQixHQUFRbGdCLFNBQVNmLElBT2xFLEdBQUlpaEIsR0FB VXZVLEVBQWlCLENBQzdCLElBQU01USxFQUFxQmxCLEVBQUtpQixpQ0FBaUNvbEIsR0FFakV2bUIs RUFBRXVtQixHQUNDbmdCLFlBQVlkLElBQ1pyRixJQUFJQyxFQUFLUixlQUFnQmdpQixHQUN6Qnhk LHFCQUFxQjlDLFFBRXhCc2dCLE9BSUo0RSxvQkFBQSxTQUFvQjFsQixFQUFTMmxCLEVBQVExTixH QUNuQyxHQUFJME4sRUFBUSxDQUNWdm1CLEVBQUV1bUIsR0FBUW5nQixZQUFZZCxJQUV0QixJQUFN a2hCLEVBQWdCeG1CLEVBQUV1bUIsRUFBTzVpQixZQUFZK2UsS0FDekN0YixJQUNBLEdBRUVvZixH QUNGeG1CLEVBQUV3bUIsR0FBZXBnQixZQUFZZCxJQUdLLFFBQWhDaWhCLEVBQU96bEIsYUFBYSxT QUN0QnlsQixFQUFPbmUsYUFBYSxpQkFBaUIsR0FlekMsR0FYQXBJLEVBQUVZLEdBQVNpTyxTQUFT dkosSUFDaUIsUUFBakMxRSxFQUFRRSxhQUFhLFNBQ3ZCRixFQUFRd0gsYUFBYSxpQkFBaUIsR0FH eENsSSxFQUFLeUIsT0FBT2YsR0FFUkEsRUFBUWtILFVBQVVDLFNBQVN6QyxLQUM3QjFFLEVBQVFr SCxVQUFVaUIsSUFBSXpELElBR3BCMUUsRUFBUStDLFlBQWMzRCxFQUFFWSxFQUFRK0MsWUFBWTBD LFNBQVNmLElBQTBCLENBQ2pGLElBQU1taEIsRUFBa0J6bUIsRUFBRVksR0FBU3NGLFFBQVFrQixJ QUFtQixHQUU5RCxHQUFJcWYsRUFBaUIsQ0FDbkIsSUFBTUMsRUFBcUIsR0FBR2hlLE1BQU0vRixL QUFLOGpCLEVBQWdCOWQsaUJBQWlCdkIsS0FFMUVwSCxFQUFFMG1CLEdBQW9CN1gsU0FBU3ZKLElB R2pDMUUsRUFBUXdILGFBQWEsaUJBQWlCLEdBR3BDeVEsR0FDRkEsT0FNR3BTLGlCQUFQLFNBQXdC cEUsR0FDdEIsT0FBT3ZDLEtBQUs0RyxLQUFLLFdBQ2YsSUFBTTBMLEVBQVFwUyxFQUFFRixNQUNa OEcsRUFBT3dMLEVBQU14TCxLQUFLN0IsSUFPdEIsR0FMSzZCLElBQ0hBLEVBQU8sSUFBSW9mLEVB QUlsbUIsTUFDZnNTLEVBQU14TCxLQUFLN0IsR0FBVTZCLElBR0QsaUJBQVh2RSxFQUFxQixDQUM5 QixHQUE0QixvQkFBakJ1RSxFQUFLdkUsR0FDZCxNQUFNLElBQUl5QixVQUFKLG9CQUFrQ3pCLEVB QWxDLEtBRVJ1RSxFQUFLdkUsaURBcktULE1BOUN1QixpQkErTjNCckMsRUFBRVMsVUFDQ3VHLEdB QUc5QixHQUFNRyxlQUFnQitCLEdBQXNCLFNBQVVqRCxHQUN4REEsRUFBTTRDLGlCQUNOaWYsR0FB SXZmLGlCQUFpQjlELEtBQUszQyxFQUFFRixNQUFPLFVBU3ZDRSxFQUFFZ0UsR0FBRixJQUFhZ2lC LEdBQUl2ZixpQkFDakJ6RyxFQUFFZ0UsR0FBRixJQUFXaUQsWUFBYytlLEdBQ3pCaG1CLEVBQUVn RSxHQUFGLElBQVdrRCxXQUFhLFdBRXRCLE9BREFsSCxFQUFFZ0UsR0FBRixJQUFhaUIsR0FDTitn QixHQUFJdmYsa0JDaFBiLElBQU0zQixHQUFxQixRQUVyQkMsR0FBcUIsV0FDckJDLEdBQVMsSUFB Z0JELEdBQ3pCRSxHQUFxQmpGLEVBQUVnRSxHQUFHYyxJQUUxQkksR0FBUSxDQUNaK1EsY0FBYSxn QkFBbUJqUixHQUNoQ2lMLEtBQUksT0FBbUJqTCxHQUN2QmtMLE9BQU0sU0FBbUJsTCxHQUN6QitL LEtBQUksT0FBbUIvSyxHQUN2QmdMLE1BQUssUUFBbUJoTCxJQUdwQk0sR0FDTSxPQUROQSxHQUVN LE9BRk5BLEdBR00sT0FITkEsR0FJTSxVQUdOaUUsR0FBYyxDQUNsQnNWLFVBQVksVUFDWjhILFNB QVksVUFDWjNILE1BQVksVUFHUmhXLEdBQVUsQ0FDZDZWLFdBQVksRUFDWjhILFVBQVksRUFDWjNI LE1BQVksS0FHUjVYLEdBQ1cseUJBU1h3ZixjQUNKLFNBQUFBLEVBQVlobUIsRUFBU3lCLEdBQ25C dkMsS0FBSzBGLFNBQVc1RSxFQUNoQmQsS0FBS2tMLFFBQVdsTCxLQUFLbUwsV0FBVzVJLEdBQ2hD dkMsS0FBS2tnQixTQUFXLEtBQ2hCbGdCLEtBQUtzZ0IsMkNBbUJQalAsS0FBQSxXQUFPLElBQUF0 UixFQUFBQyxLQUNDaVUsRUFBWS9ULEVBQUVrRixNQUFNQSxHQUFNNkssTUFHaEMsR0FEQS9QLEVB QUVGLEtBQUswRixVQUFVM0QsUUFBUWtTLElBQ3JCQSxFQUFVbE8scUJBQWQsQ0FJSS9GLEtBQUtr TCxRQUFRNlQsV0FDZi9lLEtBQUswRixTQUFTc0MsVUFBVWlCLElBQUl6RCxJQUc5QixJQUFNb2Ms RUFBVyxXQUNmN2hCLEVBQUsyRixTQUFTc0MsVUFBVXRCLE9BQU9sQixJQUMvQnpGLEVBQUsyRixT QUFTc0MsVUFBVWlCLElBQUl6RCxJQUU1QnRGLEVBQUVILEVBQUsyRixVQUFVM0QsUUFBUXFELEdB QU04SyxPQUUzQm5RLEVBQUttTCxRQUFRMmIsV0FDZjltQixFQUFLbWdCLFNBQVc3ZixXQUFXLFdB Q3pCTixFQUFLcVIsUUFDSnJSLEVBQUttTCxRQUFRZ1UsU0FPcEIsR0FIQWxmLEtBQUswRixTQUFT c0MsVUFBVXRCLE9BQU9sQixJQUMvQnBGLEVBQUt5QixPQUFPN0IsS0FBSzBGLFVBQ2pCMUYsS0FB SzBGLFNBQVNzQyxVQUFVaUIsSUFBSXpELElBQ3hCeEYsS0FBS2tMLFFBQVE2VCxVQUFXLENBQzFC LElBQU16ZCxFQUFxQmxCLEVBQUtpQixpQ0FBaUNyQixLQUFLMEYsVUFFdEV4RixFQUFFRixLQUFL MEYsVUFDSnZGLElBQUlDLEVBQUtSLGVBQWdCZ2lCLEdBQ3pCeGQscUJBQXFCOUMsUUFFeEJzZ0Is UUFJSnhRLEtBQUEsV0FDRSxHQUFLcFIsS0FBSzBGLFNBQVNzQyxVQUFVQyxTQUFTekMsSUFBdEMs Q0FJQSxJQUFNZ1AsRUFBWXRVLEVBQUVrRixNQUFNQSxHQUFNK0ssTUFFaENqUSxFQUFFRixLQUFL MEYsVUFBVTNELFFBQVF5UyxHQUNyQkEsRUFBVXpPLHNCQUlkL0YsS0FBSyttQixhQUdQOWdCLFFB QUEsV0FDRXlILGFBQWExTixLQUFLa2dCLFVBQ2xCbGdCLEtBQUtrZ0IsU0FBVyxLQUVabGdCLEtB QUswRixTQUFTc0MsVUFBVUMsU0FBU3pDLEtBQ25DeEYsS0FBSzBGLFNBQVNzQyxVQUFVdEIsT0FB T2xCLElBR2pDdEYsRUFBRUYsS0FBSzBGLFVBQVVpSCxJQUFJdkgsR0FBTStRLGVBRTNCalcsRUFB RWdHLFdBQVdsRyxLQUFLMEYsU0FBVVQsSUFDNUJqRixLQUFLMEYsU0FBVyxLQUNoQjFGLEtBQUtr TCxRQUFXLFFBS2xCQyxXQUFBLFNBQVc1SSxHQWFULE9BWkFBLEVBQU1xSyxFQUFBLEdBQ0QxRCxH QURDLEdBRURoSixFQUFFRixLQUFLMEYsVUFBVW9CLE9BRmhCLEdBR2lCLGlCQUFYdkUsR0FBdUJB LEVBQVNBLEVBQVMsSUFHckRuQyxFQUFLaUMsZ0JBQ0gyQyxHQUNBekMsRUFDQXZDLEtBQUs2VSxZ QUFZcEwsYUFHWmxILEtBR1QrZCxjQUFBLFdBQWdCLElBQUF0VCxFQUFBaE4sS0FDZEUsRUFBRUYs S0FBSzBGLFVBQVV3QixHQUNmOUIsR0FBTStRLGNBQ043TyxHQUNBLFdBQUEsT0FBTTBGLEVBQUtv RSxZQUlmMlYsT0FBQSxXQUNtQixTQUFYbkYsSUFDSnpVLEVBQUt6SCxTQUFTc0MsVUFBVWlCLElB QUl6RCxJQUM1QnRGLEVBQUVpTixFQUFLekgsVUFBVTNELFFBQVFxRCxHQUFNZ0wsUUFIMUIsSUFB QWpELEVBQUFuTixLQU9QLEdBREFBLEtBQUswRixTQUFTc0MsVUFBVXRCLE9BQU9sQixJQUMzQnhG LEtBQUtrTCxRQUFRNlQsVUFBVyxDQUMxQixJQUFNemQsRUFBcUJsQixFQUFLaUIsaUNBQWlDckIs S0FBSzBGLFVBRXRFeEYsRUFBRUYsS0FBSzBGLFVBQ0p2RixJQUFJQyxFQUFLUixlQUFnQmdpQixH QUN6QnhkLHFCQUFxQjlDLFFBRXhCc2dCLE9BTUdqYixpQkFBUCxTQUF3QnBFLEdBQ3RCLE9BQU92 QyxLQUFLNEcsS0FBSyxXQUNmLElBQU1DLEVBQVczRyxFQUFFRixNQUNmOEcsRUFBYUQsRUFBU0Ms S0FBSzdCLElBUS9CLEdBTEs2QixJQUNIQSxFQUFPLElBQUlnZ0IsRUFBTTltQixLQUhnQixpQkFB WHVDLEdBQXVCQSxHQUk3Q3NFLEVBQVNDLEtBQUs3QixHQUFVNkIsSUFHSixpQkFBWHZFLEVBQXFC LENBQzlCLEdBQTRCLG9CQUFqQnVFLEVBQUt2RSxHQUNkLE1BQU0sSUFBSXlCLFVBQUosb0JBQWtD ekIsRUFBbEMsS0FHUnVFLEVBQUt2RSxHQUFRdkMsa0RBaEpqQixNQXJEdUIsNENBeUR2QixPQUFP eUosbUNBSVAsT0FBT1AsWUFvSlhoSixFQUFFZ0UsR0FBR2MsSUFBb0I4aEIsR0FBTW5nQixpQkFD L0J6RyxFQUFFZ0UsR0FBR2MsSUFBTW1DLFlBQWMyZixHQUN6QjVtQixFQUFFZ0UsR0FBR2MsSUFB TW9DLFdBQWMsV0FFdkIsT0FEQWxILEVBQUVnRSxHQUFHYyxJQUFRRyxHQUNOMmhCLEdBQU1uZ0Ii LCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3Ry YXAgKHY0LjQuMSk6IHV0aWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRo dWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLVxuICovXG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSdcblxuLyoqXG4gKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS1cbiAqIFByaXZhdGUgVHJhbnNpdGlvbkVuZCBIZWxwZXJzXG4gKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS1cbiAqL1xuXG5jb25zdCBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJ1xuY29u c3QgTUFYX1VJRCA9IDEwMDAwMDBcbmNvbnN0IE1JTExJU0VDT05EU19NVUxUSVBMSUVSID0gMTAw MFxuXG4vLyBTaG91dG91dCBBbmd1c0Nyb2xsIChodHRwczovL2dvby5nbC9weHdRR3ApXG5mdW5j dGlvbiB0b1R5cGUob2JqKSB7XG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2go L1xccyhbYS16XSspL2kpWzFdLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2lh bFRyYW5zaXRpb25FbmRFdmVudCgpIHtcbiAgcmV0dXJuIHtcbiAgICBiaW5kVHlwZTogVFJBTlNJ VElPTl9FTkQsXG4gICAgZGVsZWdhdGVUeXBlOiBUUkFOU0lUSU9OX0VORCxcbiAgICBoYW5kbGUo ZXZlbnQpIHtcbiAgICAgIGlmICgkKGV2ZW50LnRhcmdldCkuaXModGhpcykpIHtcbiAgICAgICAg cmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLy8g ZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgIH1cbiAgICAgIHJl dHVybiB1bmRlZmluZWQgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZmluZWRcbiAgICB9 XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNpdGlvbkVuZEVtdWxhdG9yKGR1cmF0aW9uKSB7XG4g IGxldCBjYWxsZWQgPSBmYWxzZVxuXG4gICQodGhpcykub25lKFV0aWwuVFJBTlNJVElPTl9FTkQs ICgpID0+IHtcbiAgICBjYWxsZWQgPSB0cnVlXG4gIH0pXG5cbiAgc2V0VGltZW91dCgoKSA9PiB7 XG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgIFV0aWwudHJpZ2dlclRyYW5zaXRpb25FbmQodGhp cylcbiAgICB9XG4gIH0sIGR1cmF0aW9uKVxuXG4gIHJldHVybiB0aGlzXG59XG5cbmZ1bmN0aW9u IHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCkge1xuICAkLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5k ID0gdHJhbnNpdGlvbkVuZEVtdWxhdG9yXG4gICQuZXZlbnQuc3BlY2lhbFtVdGlsLlRSQU5TSVRJ T05fRU5EXSA9IGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKVxufVxuXG4vKipcbiAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tXG4gKiBQdWJsaWMgVXRpbCBBcGlcbiAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t XG4gKi9cblxuY29uc3QgVXRpbCA9IHtcblxuICBUUkFOU0lUSU9OX0VORDogJ2JzVHJhbnNpdGlv bkVuZCcsXG5cbiAgZ2V0VUlEKHByZWZpeCkge1xuICAgIGRvIHtcbiAgICAgIC8vIGVzbGludC1k aXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICBwcmVmaXggKz0gfn4oTWF0aC5yYW5k b20oKSAqIE1BWF9VSUQpIC8vIFwifn5cIiBhY3RzIGxpa2UgYSBmYXN0ZXIgTWF0aC5mbG9vcigp IGhlcmVcbiAgICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKVxuICAg IHJldHVybiBwcmVmaXhcbiAgfSxcblxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQp IHtcbiAgICBsZXQgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10YXJnZXQn KVxuXG4gICAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgICBjb25z dCBocmVmQXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJylcbiAgICAgIHNlbGVjdG9y ID0gaHJlZkF0dHIgJiYgaHJlZkF0dHIgIT09ICcjJyA/IGhyZWZBdHRyLnRyaW0oKSA6ICcnXG4g ICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNl bGVjdG9yKSA/IHNlbGVjdG9yIDogbnVsbFxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0 dXJuIG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1l bnQoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIDBcbiAgICB9 XG5cbiAgICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICAgIGxl dCB0cmFuc2l0aW9uRHVyYXRpb24gPSAkKGVsZW1lbnQpLmNzcygndHJhbnNpdGlvbi1kdXJhdGlv bicpXG4gICAgbGV0IHRyYW5zaXRpb25EZWxheSA9ICQoZWxlbWVudCkuY3NzKCd0cmFuc2l0aW9u LWRlbGF5JylcblxuICAgIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gcGFyc2VGbG9h dCh0cmFuc2l0aW9uRHVyYXRpb24pXG4gICAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBw YXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSlcblxuICAgIC8vIFJldHVybiAwIGlmIGVsZW1lbnQg b3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgICBpZiAoIWZsb2F0VHJhbnNp dGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgICAgcmV0dXJuIDBc biAgICB9XG5cbiAgICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2Ug dGhlIGZpcnN0XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNw bGl0KCcsJylbMF1cbiAgICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQo JywnKVswXVxuXG4gICAgcmV0dXJuIChwYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbikgKyBw YXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVJcbiAg fSxcblxuICByZWZsb3coZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdo dFxuICB9LFxuXG4gIHRyaWdnZXJUcmFuc2l0aW9uRW5kKGVsZW1lbnQpIHtcbiAgICAkKGVsZW1l bnQpLnRyaWdnZXIoVFJBTlNJVElPTl9FTkQpXG4gIH0sXG5cbiAgLy8gVE9ETzogUmVtb3ZlIGlu IHY1XG4gIHN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbihUUkFO U0lUSU9OX0VORClcbiAgfSxcblxuICBpc0VsZW1lbnQob2JqKSB7XG4gICAgcmV0dXJuIChvYmpb MF0gfHwgb2JqKS5ub2RlVHlwZVxuICB9LFxuXG4gIHR5cGVDaGVja0NvbmZpZyhjb21wb25lbnRO YW1lLCBjb25maWcsIGNvbmZpZ1R5cGVzKSB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBj b25maWdUeXBlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku Y2FsbChjb25maWdUeXBlcywgcHJvcGVydHkpKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVHlw ZXMgPSBjb25maWdUeXBlc1twcm9wZXJ0eV1cbiAgICAgICAgY29uc3QgdmFsdWUgICAgICAgICA9 IGNvbmZpZ1twcm9wZXJ0eV1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlICAgICA9IHZhbHVlICYm IFV0aWwuaXNFbGVtZW50KHZhbHVlKVxuICAgICAgICAgID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZh bHVlKVxuXG4gICAgICAgIGlmICghbmV3IFJlZ0V4cChleHBlY3RlZFR5cGVzKS50ZXN0KHZhbHVl VHlwZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHtjb21w b25lbnROYW1lLnRvVXBwZXJDYXNlKCl9OiBgICtcbiAgICAgICAgICAgIGBPcHRpb24gXCIke3By b3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBgICtcbiAgICAgICAgICAg IGBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gKVxuICAgICAgICB9XG4g ICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGZpbmRTaGFkb3dSb290KGVsZW1lbnQpIHtcbiAgICBp ZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgIHJldHVy biBudWxsXG4gICAgfVxuXG4gICAgLy8gQ2FuIGZpbmQgdGhlIHNoYWRvdyByb290IG90aGVyd2lz ZSBpdCdsbCByZXR1cm4gdGhlIGRvY3VtZW50XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50LmdldFJv b3ROb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRS b290Tm9kZSgpXG4gICAgICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290 IDogbnVsbFxuICAgIH1cblxuICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkg e1xuICAgICAgcmV0dXJuIGVsZW1lbnRcbiAgICB9XG5cbiAgICAvLyB3aGVuIHdlIGRvbid0IGZp bmQgYSBzaGFkb3cgcm9vdFxuICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICBy ZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBVdGlsLmZpbmRTaGFkb3dSb290KGVsZW1l bnQucGFyZW50Tm9kZSlcbiAgfSxcblxuICBqUXVlcnlEZXRlY3Rpb24oKSB7XG4gICAgaWYgKHR5 cGVvZiAkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9v dHN0cmFwXFwncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeS4galF1ZXJ5IG11c3QgYmUgaW5j bHVkZWQgYmVmb3JlIEJvb3RzdHJhcFxcJ3MgSmF2YVNjcmlwdC4nKVxuICAgIH1cblxuICAgIGNv bnN0IHZlcnNpb24gPSAkLmZuLmpxdWVyeS5zcGxpdCgnICcpWzBdLnNwbGl0KCcuJylcbiAgICBj b25zdCBtaW5NYWpvciA9IDFcbiAgICBjb25zdCBsdE1ham9yID0gMlxuICAgIGNvbnN0IG1pbk1p bm9yID0gOVxuICAgIGNvbnN0IG1pblBhdGNoID0gMVxuICAgIGNvbnN0IG1heE1ham9yID0gNFxu XG4gICAgaWYgKHZlcnNpb25bMF0gPCBsdE1ham9yICYmIHZlcnNpb25bMV0gPCBtaW5NaW5vciB8 fCB2ZXJzaW9uWzBdID09PSBtaW5NYWpvciAmJiB2ZXJzaW9uWzFdID09PSBtaW5NaW5vciAmJiB2 ZXJzaW9uWzJdIDwgbWluUGF0Y2ggfHwgdmVyc2lvblswXSA+PSBtYXhNYWpvcikge1xuICAgICAg dGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgYXQgbGVh c3QgalF1ZXJ5IHYxLjkuMSBidXQgbGVzcyB0aGFuIHY0LjAuMCcpXG4gICAgfVxuICB9XG59XG5c blV0aWwualF1ZXJ5RGV0ZWN0aW9uKClcbnNldFRyYW5zaXRpb25FbmRTdXBwb3J0KClcblxuZXhw b3J0IGRlZmF1bHQgVXRpbFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0 cmFwICh2NC40LjEpOiBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dp dGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5J1xuaW1wb3J0IFV0aWwgZnJv bSAnLi91dGlsJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FICAgICAgICAgICAgICAgID0gJ2FsZXJ0 J1xuY29uc3QgVkVSU0lPTiAgICAgICAgICAgICA9ICc0LjQuMSdcbmNvbnN0IERBVEFfS0VZICAg ICAgICAgICAgPSAnYnMuYWxlcnQnXG5jb25zdCBFVkVOVF9LRVkgICAgICAgICAgID0gYC4ke0RB VEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSAgICAgICAgPSAnLmRhdGEtYXBpJ1xuY29uc3Qg SlFVRVJZX05PX0NPTkZMSUNUICA9ICQuZm5bTkFNRV1cblxuY29uc3QgU2VsZWN0b3IgPSB7XG4g IERJU01JU1MgOiAnW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJ1xufVxuXG5jb25zdCBFdmVudCA9 IHtcbiAgQ0xPU0UgICAgICAgICAgOiBgY2xvc2Uke0VWRU5UX0tFWX1gLFxuICBDTE9TRUQgICAg ICAgICA6IGBjbG9zZWQke0VWRU5UX0tFWX1gLFxuICBDTElDS19EQVRBX0FQSSA6IGBjbGljayR7 RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbn1cblxuY29uc3QgQ2xhc3NOYW1lID0ge1xuICBB TEVSVCA6ICdhbGVydCcsXG4gIEZBREUgIDogJ2ZhZGUnLFxuICBTSE9XICA6ICdzaG93J1xufVxu XG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgQWxlcnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7 XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnRcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBz dGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05cbiAgfVxuXG4gIC8vIFB1 YmxpY1xuXG4gIGNsb3NlKGVsZW1lbnQpIHtcbiAgICBsZXQgcm9vdEVsZW1lbnQgPSB0aGlzLl9l bGVtZW50XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJvb3RFbGVtZW50ID0gdGhpcy5fZ2V0 Um9vdEVsZW1lbnQoZWxlbWVudClcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b21FdmVudCA9IHRo aXMuX3RyaWdnZXJDbG9zZUV2ZW50KHJvb3RFbGVtZW50KVxuXG4gICAgaWYgKGN1c3RvbUV2ZW50 LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlz Ll9yZW1vdmVFbGVtZW50KHJvb3RFbGVtZW50KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICAk LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpXG4gICAgdGhpcy5fZWxlbWVudCA9 IG51bGxcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfZ2V0Um9vdEVsZW1lbnQoZWxlbWVudCkg e1xuICAgIGNvbnN0IHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1l bnQpXG4gICAgbGV0IHBhcmVudCAgICAgPSBmYWxzZVxuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4g ICAgICBwYXJlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKVxuICAgIH1cblxu ICAgIGlmICghcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSAkKGVsZW1lbnQpLmNsb3Nlc3QoYC4k e0NsYXNzTmFtZS5BTEVSVH1gKVswXVxuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRcbiAgfVxu XG4gIF90cmlnZ2VyQ2xvc2VFdmVudChlbGVtZW50KSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9 ICQuRXZlbnQoRXZlbnQuQ0xPU0UpXG5cbiAgICAkKGVsZW1lbnQpLnRyaWdnZXIoY2xvc2VFdmVu dClcbiAgICByZXR1cm4gY2xvc2VFdmVudFxuICB9XG5cbiAgX3JlbW92ZUVsZW1lbnQoZWxlbWVu dCkge1xuICAgICQoZWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpXG5cbiAgICBp ZiAoISQoZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLkZBREUpKSB7XG4gICAgICB0aGlzLl9k ZXN0cm95RWxlbWVudChlbGVtZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qg dHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVu dChlbGVtZW50KVxuXG4gICAgJChlbGVtZW50KVxuICAgICAgLm9uZShVdGlsLlRSQU5TSVRJT05f RU5ELCAoZXZlbnQpID0+IHRoaXMuX2Rlc3Ryb3lFbGVtZW50KGVsZW1lbnQsIGV2ZW50KSlcbiAg ICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pXG4gIH1cblxuICBf ZGVzdHJveUVsZW1lbnQoZWxlbWVudCkge1xuICAgICQoZWxlbWVudClcbiAgICAgIC5kZXRhY2go KVxuICAgICAgLnRyaWdnZXIoRXZlbnQuQ0xPU0VEKVxuICAgICAgLnJlbW92ZSgpXG4gIH1cblxu ICAvLyBTdGF0aWNcblxuICBzdGF0aWMgX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICBy ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0ICRlbGVtZW50ID0gJCh0 aGlzKVxuICAgICAgbGV0IGRhdGEgICAgICAgPSAkZWxlbWVudC5kYXRhKERBVEFfS0VZKVxuXG4g ICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBBbGVydCh0aGlzKVxuICAgICAg ICAkZWxlbWVudC5kYXRhKERBVEFfS0VZLCBkYXRhKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29u ZmlnID09PSAnY2xvc2UnKSB7XG4gICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgICAgfVxu ICAgIH0pXG4gIH1cblxuICBzdGF0aWMgX2hhbmRsZURpc21pc3MoYWxlcnRJbnN0YW5jZSkge1xu ICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAg ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG5cbiAgICAgIGFsZXJ0SW5zdGFuY2Uu Y2xvc2UodGhpcylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAq IERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4kKGRv Y3VtZW50KS5vbihcbiAgRXZlbnQuQ0xJQ0tfREFUQV9BUEksXG4gIFNlbGVjdG9yLkRJU01JU1Ms XG4gIEFsZXJ0Ll9oYW5kbGVEaXNtaXNzKG5ldyBBbGVydCgpKVxuKVxuXG4vKipcbiAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4kLmZuW05B TUVdICAgICAgICAgICAgID0gQWxlcnQuX2pRdWVyeUludGVyZmFjZVxuJC5mbltOQU1FXS5Db25z dHJ1Y3RvciA9IEFsZXJ0XG4kLmZuW05BTUVdLm5vQ29uZmxpY3QgID0gKCkgPT4ge1xuICAkLmZu W05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUXG4gIHJldHVybiBBbGVydC5falF1ZXJ5SW50ZXJm YWNlXG59XG5cbmV4cG9ydCBkZWZhdWx0IEFsZXJ0XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tXG4gKiBCb290c3RyYXAgKHY0LjQuMSk6IGJ1dHRvbi5qc1xuICogTGljZW5zZWQgdW5kZXIg TUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5T RSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5J1xu XG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS1cbiAqL1xuXG5jb25zdCBOQU1FICAgICAgICAgICAgICAgID0gJ2J1dHRvbidcbmNvbnN0IFZF UlNJT04gICAgICAgICAgICAgPSAnNC40LjEnXG5jb25zdCBEQVRBX0tFWSAgICAgICAgICAgID0g J2JzLmJ1dHRvbidcbmNvbnN0IEVWRU5UX0tFWSAgICAgICAgICAgPSBgLiR7REFUQV9LRVl9YFxu Y29uc3QgREFUQV9BUElfS0VZICAgICAgICA9ICcuZGF0YS1hcGknXG5jb25zdCBKUVVFUllfTk9f Q09ORkxJQ1QgID0gJC5mbltOQU1FXVxuXG5jb25zdCBDbGFzc05hbWUgPSB7XG4gIEFDVElWRSA6 ICdhY3RpdmUnLFxuICBCVVRUT04gOiAnYnRuJyxcbiAgRk9DVVMgIDogJ2ZvY3VzJ1xufVxuXG5j b25zdCBTZWxlY3RvciA9IHtcbiAgREFUQV9UT0dHTEVfQ0FSUk9UICAgOiAnW2RhdGEtdG9nZ2xl Xj1cImJ1dHRvblwiXScsXG4gIERBVEFfVE9HR0xFUyAgICAgICAgIDogJ1tkYXRhLXRvZ2dsZT1c ImJ1dHRvbnNcIl0nLFxuICBEQVRBX1RPR0dMRSAgICAgICAgICA6ICdbZGF0YS10b2dnbGU9XCJi dXR0b25cIl0nLFxuICBEQVRBX1RPR0dMRVNfQlVUVE9OUyA6ICdbZGF0YS10b2dnbGU9XCJidXR0 b25zXCJdIC5idG4nLFxuICBJTlBVVCAgICAgICAgICAgICAgICA6ICdpbnB1dDpub3QoW3R5cGU9 XCJoaWRkZW5cIl0pJyxcbiAgQUNUSVZFICAgICAgICAgICAgICAgOiAnLmFjdGl2ZScsXG4gIEJV VFRPTiAgICAgICAgICAgICAgIDogJy5idG4nXG59XG5cbmNvbnN0IEV2ZW50ID0ge1xuICBDTElD S19EQVRBX0FQSSAgICAgIDogYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YCxcbiAg Rk9DVVNfQkxVUl9EQVRBX0FQSSA6IGBmb2N1cyR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfSBg ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGJsdXIke0VWRU5UX0tFWX0ke0RBVEFfQVBJ X0tFWX1gLFxuICBMT0FEX0RBVEFfQVBJICAgICAgIDogYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFf QVBJX0tFWX1gXG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0 aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBCdXR0b24ge1xuICBjb25zdHJ1 Y3RvcihlbGVtZW50KSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnRcbiAgfVxuXG4gIC8v IEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05c biAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHRvZ2dsZSgpIHtcbiAgICBsZXQgdHJpZ2dlckNoYW5n ZUV2ZW50ID0gdHJ1ZVxuICAgIGxldCBhZGRBcmlhUHJlc3NlZCA9IHRydWVcbiAgICBjb25zdCBy b290RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChcbiAgICAgIFNlbGVjdG9yLkRB VEFfVE9HR0xFU1xuICAgIClbMF1cblxuICAgIGlmIChyb290RWxlbWVudCkge1xuICAgICAgY29u c3QgaW5wdXQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuSU5QVVQpXG5c biAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3JhZGlvJykg e1xuICAgICAgICAgIGlmIChpbnB1dC5jaGVja2VkICYmXG4gICAgICAgICAgICB0aGlzLl9lbGVt ZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUuQUNUSVZFKSkge1xuICAgICAgICAgICAg dHJpZ2dlckNoYW5nZUV2ZW50ID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAg ICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0 b3IuQUNUSVZFKVxuXG4gICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAg ICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5BQ1RJVkUpXG4gICAg ICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT09 ICdjaGVja2JveCcpIHtcbiAgICAgICAgICBpZiAodGhpcy5fZWxlbWVudC50YWdOYW1lID09PSAn TEFCRUwnICYmIGlucHV0LmNoZWNrZWQgPT09IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRh aW5zKENsYXNzTmFtZS5BQ1RJVkUpKSB7XG4gICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlRXZlbnQg PSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpZiBp dCdzIG5vdCBhIHJhZGlvIGJ1dHRvbiBvciBjaGVja2JveCBkb24ndCBhZGQgYSBwb2ludGxlc3Mv aW52YWxpZCBjaGVja2VkIHByb3BlcnR5IHRvIHRoZSBpbnB1dFxuICAgICAgICAgIHRyaWdnZXJD aGFuZ2VFdmVudCA9IGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJpZ2dlckNoYW5n ZUV2ZW50KSB7XG4gICAgICAgICAgaW5wdXQuY2hlY2tlZCA9ICF0aGlzLl9lbGVtZW50LmNsYXNz TGlzdC5jb250YWlucyhDbGFzc05hbWUuQUNUSVZFKVxuICAgICAgICAgICQoaW5wdXQpLnRyaWdn ZXIoJ2NoYW5nZScpXG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dC5mb2N1cygpXG4gICAgICAg IGFkZEFyaWFQcmVzc2VkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoISh0aGlz Ll9lbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCB0aGlzLl9lbGVtZW50LmNsYXNz TGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkpIHtcbiAgICAgIGlmIChhZGRBcmlhUHJlc3NlZCkg e1xuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyxcbiAg ICAgICAgICAhdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lLkFDVElW RSkpXG4gICAgICB9XG5cbiAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAg JCh0aGlzLl9lbGVtZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUuQUNUSVZFKVxuICAgICAgfVxu ICAgIH1cbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1l bnQsIERBVEFfS0VZKVxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXG4gIH1cblxuICAvLyBTdGF0 aWNcblxuICBzdGF0aWMgX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhp cy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBkYXRhID0gJCh0aGlzKS5kYXRhKERBVEFf S0VZKVxuXG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBCdXR0b24odGhp cylcbiAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZLCBkYXRhKVxuICAgICAgfVxuXG4gICAg ICBpZiAoY29uZmlnID09PSAndG9nZ2xlJykge1xuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAg ICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEg QXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4kKGRvY3VtZW50 KVxuICAub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfVE9HR0xFX0NBUlJP VCwgKGV2ZW50KSA9PiB7XG4gICAgbGV0IGJ1dHRvbiA9IGV2ZW50LnRhcmdldFxuXG4gICAgaWYg KCEkKGJ1dHRvbikuaGFzQ2xhc3MoQ2xhc3NOYW1lLkJVVFRPTikpIHtcbiAgICAgIGJ1dHRvbiA9 ICQoYnV0dG9uKS5jbG9zZXN0KFNlbGVjdG9yLkJVVFRPTilbMF1cbiAgICB9XG5cbiAgICBpZiAo IWJ1dHRvbiB8fCBidXR0b24uaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IGJ1dHRvbi5jbGFz c0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0 KCkgLy8gd29yayBhcm91bmQgRmlyZWZveCBidWcgIzE1NDA5OTVcbiAgICB9IGVsc2Uge1xuICAg ICAgY29uc3QgaW5wdXRCdG4gPSBidXR0b24ucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5JTlBVVClc blxuICAgICAgaWYgKGlucHV0QnRuICYmIChpbnB1dEJ0bi5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVk JykgfHwgaW5wdXRCdG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSkge1xuICAgICAg ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpIC8vIHdvcmsgYXJvdW5kIEZpcmVmb3ggYnVnICMxNTQw OTk1XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBCdXR0b24uX2pRdWVyeUludGVy ZmFjZS5jYWxsKCQoYnV0dG9uKSwgJ3RvZ2dsZScpXG4gICAgfVxuICB9KVxuICAub24oRXZlbnQu Rk9DVVNfQkxVUl9EQVRBX0FQSSwgU2VsZWN0b3IuREFUQV9UT0dHTEVfQ0FSUk9ULCAoZXZlbnQp ID0+IHtcbiAgICBjb25zdCBidXR0b24gPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChTZWxlY3Rv ci5CVVRUT04pWzBdXG4gICAgJChidXR0b24pLnRvZ2dsZUNsYXNzKENsYXNzTmFtZS5GT0NVUywg L15mb2N1cyhpbik/JC8udGVzdChldmVudC50eXBlKSlcbiAgfSlcblxuJCh3aW5kb3cpLm9uKEV2 ZW50LkxPQURfREFUQV9BUEksICgpID0+IHtcbiAgLy8gZW5zdXJlIGNvcnJlY3QgYWN0aXZlIGNs YXNzIGlzIHNldCB0byBtYXRjaCB0aGUgY29udHJvbHMnIGFjdHVhbCB2YWx1ZXMvc3RhdGVzXG5c biAgLy8gZmluZCBhbGwgY2hlY2tib3hlcy9yZWFkaW8gYnV0dG9ucyBpbnNpZGUgZGF0YS10b2dn bGUgZ3JvdXBzXG4gIGxldCBidXR0b25zID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNl bGVjdG9yQWxsKFNlbGVjdG9yLkRBVEFfVE9HR0xFU19CVVRUT05TKSlcbiAgZm9yIChsZXQgaSA9 IDAsIGxlbiA9IGJ1dHRvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBidXR0 b24gPSBidXR0b25zW2ldXG4gICAgY29uc3QgaW5wdXQgPSBidXR0b24ucXVlcnlTZWxlY3RvcihT ZWxlY3Rvci5JTlBVVClcbiAgICBpZiAoaW5wdXQuY2hlY2tlZCB8fCBpbnB1dC5oYXNBdHRyaWJ1 dGUoJ2NoZWNrZWQnKSkge1xuICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lLkFD VElWRSlcbiAgICB9IGVsc2Uge1xuICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NO YW1lLkFDVElWRSlcbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFsbCBidXR0b24gdG9nZ2xlc1xu ICBidXR0b25zID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVj dG9yLkRBVEFfVE9HR0xFKSlcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGJ1dHRvbnMubGVuZ3Ro OyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25zW2ldXG4gICAgaWYg KGJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcpID09PSAndHJ1ZScpIHtcbiAgICAg IGJ1dHRvbi5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZS5BQ1RJVkUpXG4gICAgfSBlbHNlIHtcbiAg ICAgIGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZS5BQ1RJVkUpXG4gICAgfVxuICB9 XG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS1cbiAqL1xuXG4kLmZuW05BTUVdID0gQnV0dG9uLl9qUXVlcnlJbnRlcmZhY2VcbiQuZm5b TkFNRV0uQ29uc3RydWN0b3IgPSBCdXR0b25cbiQuZm5bTkFNRV0ubm9Db25mbGljdCA9ICgpID0+ IHtcbiAgJC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICByZXR1cm4gQnV0dG9uLl9q UXVlcnlJbnRlcmZhY2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uXG4iLCIvKipcbiAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY0LjQuMSk6IGNhcm91c2VsLmpzXG4gKiBM aWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9i L21hc3Rlci9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgJCBm cm9tICdqcXVlcnknXG5pbXBvcnQgVXRpbCBmcm9tICcuL3V0aWwnXG5cbi8qKlxuICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0 IE5BTUUgICAgICAgICAgICAgICAgICAgPSAnY2Fyb3VzZWwnXG5jb25zdCBWRVJTSU9OICAgICAg ICAgICAgICAgID0gJzQuNC4xJ1xuY29uc3QgREFUQV9LRVkgICAgICAgICAgICAgICA9ICdicy5j YXJvdXNlbCdcbmNvbnN0IEVWRU5UX0tFWSAgICAgICAgICAgICAgPSBgLiR7REFUQV9LRVl9YFxu Y29uc3QgREFUQV9BUElfS0VZICAgICAgICAgICA9ICcuZGF0YS1hcGknXG5jb25zdCBKUVVFUllf Tk9fQ09ORkxJQ1QgICAgID0gJC5mbltOQU1FXVxuY29uc3QgQVJST1dfTEVGVF9LRVlDT0RFICAg ICA9IDM3IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIGxlZnQgYXJyb3cga2V5XG5j b25zdCBBUlJPV19SSUdIVF9LRVlDT0RFICAgID0gMzkgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2 YWx1ZSBmb3IgcmlnaHQgYXJyb3cga2V5XG5jb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0g NTAwIC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxu Y29uc3QgU1dJUEVfVEhSRVNIT0xEICAgICAgICA9IDQwXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4g IGludGVydmFsIDogNTAwMCxcbiAga2V5Ym9hcmQgOiB0cnVlLFxuICBzbGlkZSAgICA6IGZhbHNl LFxuICBwYXVzZSAgICA6ICdob3ZlcicsXG4gIHdyYXAgICAgIDogdHJ1ZSxcbiAgdG91Y2ggICAg OiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBpbnRlcnZhbCA6ICcobnVtYmVy fGJvb2xlYW4pJyxcbiAga2V5Ym9hcmQgOiAnYm9vbGVhbicsXG4gIHNsaWRlICAgIDogJyhib29s ZWFufHN0cmluZyknLFxuICBwYXVzZSAgICA6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgd3JhcCAg ICAgOiAnYm9vbGVhbicsXG4gIHRvdWNoICAgIDogJ2Jvb2xlYW4nXG59XG5cbmNvbnN0IERpcmVj dGlvbiA9IHtcbiAgTkVYVCAgICAgOiAnbmV4dCcsXG4gIFBSRVYgICAgIDogJ3ByZXYnLFxuICBM RUZUICAgICA6ICdsZWZ0JyxcbiAgUklHSFQgICAgOiAncmlnaHQnXG59XG5cbmNvbnN0IEV2ZW50 ID0ge1xuICBTTElERSAgICAgICAgICA6IGBzbGlkZSR7RVZFTlRfS0VZfWAsXG4gIFNMSUQgICAg ICAgICAgIDogYHNsaWQke0VWRU5UX0tFWX1gLFxuICBLRVlET1dOICAgICAgICA6IGBrZXlkb3du JHtFVkVOVF9LRVl9YCxcbiAgTU9VU0VFTlRFUiAgICAgOiBgbW91c2VlbnRlciR7RVZFTlRfS0VZ fWAsXG4gIE1PVVNFTEVBVkUgICAgIDogYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gLFxuICBUT1VD SFNUQVJUICAgICA6IGB0b3VjaHN0YXJ0JHtFVkVOVF9LRVl9YCxcbiAgVE9VQ0hNT1ZFICAgICAg OiBgdG91Y2htb3ZlJHtFVkVOVF9LRVl9YCxcbiAgVE9VQ0hFTkQgICAgICAgOiBgdG91Y2hlbmQk e0VWRU5UX0tFWX1gLFxuICBQT0lOVEVSRE9XTiAgICA6IGBwb2ludGVyZG93biR7RVZFTlRfS0VZ fWAsXG4gIFBPSU5URVJVUCAgICAgIDogYHBvaW50ZXJ1cCR7RVZFTlRfS0VZfWAsXG4gIERSQUdf U1RBUlQgICAgIDogYGRyYWdzdGFydCR7RVZFTlRfS0VZfWAsXG4gIExPQURfREFUQV9BUEkgIDog YGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gLFxuICBDTElDS19EQVRBX0FQSSA6IGBj bGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbn1cblxuY29uc3QgQ2xhc3NOYW1lID0g e1xuICBDQVJPVVNFTCAgICAgIDogJ2Nhcm91c2VsJyxcbiAgQUNUSVZFICAgICAgICA6ICdhY3Rp dmUnLFxuICBTTElERSAgICAgICAgIDogJ3NsaWRlJyxcbiAgUklHSFQgICAgICAgICA6ICdjYXJv dXNlbC1pdGVtLXJpZ2h0JyxcbiAgTEVGVCAgICAgICAgICA6ICdjYXJvdXNlbC1pdGVtLWxlZnQn LFxuICBORVhUICAgICAgICAgIDogJ2Nhcm91c2VsLWl0ZW0tbmV4dCcsXG4gIFBSRVYgICAgICAg ICAgOiAnY2Fyb3VzZWwtaXRlbS1wcmV2JyxcbiAgSVRFTSAgICAgICAgICA6ICdjYXJvdXNlbC1p dGVtJyxcbiAgUE9JTlRFUl9FVkVOVCA6ICdwb2ludGVyLWV2ZW50J1xufVxuXG5jb25zdCBTZWxl Y3RvciA9IHtcbiAgQUNUSVZFICAgICAgOiAnLmFjdGl2ZScsXG4gIEFDVElWRV9JVEVNIDogJy5h Y3RpdmUuY2Fyb3VzZWwtaXRlbScsXG4gIElURU0gICAgICAgIDogJy5jYXJvdXNlbC1pdGVtJyxc biAgSVRFTV9JTUcgICAgOiAnLmNhcm91c2VsLWl0ZW0gaW1nJyxcbiAgTkVYVF9QUkVWICAgOiAn LmNhcm91c2VsLWl0ZW0tbmV4dCwgLmNhcm91c2VsLWl0ZW0tcHJldicsXG4gIElORElDQVRPUlMg IDogJy5jYXJvdXNlbC1pbmRpY2F0b3JzJyxcbiAgREFUQV9TTElERSAgOiAnW2RhdGEtc2xpZGVd LCBbZGF0YS1zbGlkZS10b10nLFxuICBEQVRBX1JJREUgICA6ICdbZGF0YS1yaWRlPVwiY2Fyb3Vz ZWxcIl0nXG59XG5cbmNvbnN0IFBvaW50ZXJUeXBlID0ge1xuICBUT1VDSCA6ICd0b3VjaCcsXG4g IFBFTiAgIDogJ3Blbidcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERl ZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5jbGFzcyBDYXJvdXNlbCB7XG4gIGNv bnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHRoaXMuX2l0ZW1zICAgICAgICAgPSBu dWxsXG4gICAgdGhpcy5faW50ZXJ2YWwgICAgICA9IG51bGxcbiAgICB0aGlzLl9hY3RpdmVFbGVt ZW50ID0gbnVsbFxuICAgIHRoaXMuX2lzUGF1c2VkICAgICAgPSBmYWxzZVxuICAgIHRoaXMuX2lz U2xpZGluZyAgICAgPSBmYWxzZVxuICAgIHRoaXMudG91Y2hUaW1lb3V0ICAgPSBudWxsXG4gICAg dGhpcy50b3VjaFN0YXJ0WCAgICA9IDBcbiAgICB0aGlzLnRvdWNoRGVsdGFYICAgID0gMFxuXG4g ICAgdGhpcy5fY29uZmlnICAgICAgICAgICAgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAg IHRoaXMuX2VsZW1lbnQgICAgICAgICAgID0gZWxlbWVudFxuICAgIHRoaXMuX2luZGljYXRvcnNF bGVtZW50ID0gdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLklORElDQVRPUlMp XG4gICAgdGhpcy5fdG91Y2hTdXBwb3J0ZWQgICAgPSAnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVu dC5kb2N1bWVudEVsZW1lbnQgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMFxuICAgIHRo aXMuX3BvaW50ZXJFdmVudCAgICAgID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50IHx8IHdp bmRvdy5NU1BvaW50ZXJFdmVudClcblxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcbiAg fVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJu IFZFUlNJT05cbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVm YXVsdFxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMuX2lz U2xpZGluZykge1xuICAgICAgdGhpcy5fc2xpZGUoRGlyZWN0aW9uLk5FWFQpXG4gICAgfVxuICB9 XG5cbiAgbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRo ZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAvLyBvciB0aGUgY2Fyb3VzZWwgb3IgaXRzIHBhcmVu dCBpc24ndCB2aXNpYmxlXG4gICAgaWYgKCFkb2N1bWVudC5oaWRkZW4gJiZcbiAgICAgICgkKHRo aXMuX2VsZW1lbnQpLmlzKCc6dmlzaWJsZScpICYmICQodGhpcy5fZWxlbWVudCkuY3NzKCd2aXNp YmlsaXR5JykgIT09ICdoaWRkZW4nKSkge1xuICAgICAgdGhpcy5uZXh0KClcbiAgICB9XG4gIH1c blxuICBwcmV2KCkge1xuICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICB0aGlzLl9z bGlkZShEaXJlY3Rpb24uUFJFVilcbiAgICB9XG4gIH1cblxuICBwYXVzZShldmVudCkge1xuICAg IGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gdHJ1ZVxuICAgIH1cblxuICAg IGlmICh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuTkVYVF9QUkVWKSkge1xu ICAgICAgVXRpbC50cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KVxuICAgICAgdGhp cy5jeWNsZSh0cnVlKVxuICAgIH1cblxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwp XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gIH1cblxuICBjeWNsZShldmVudCkge1xuICAg IGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2VcbiAgICB9XG5cbiAg ICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2 YWwpXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5f Y29uZmlnLmludGVydmFsICYmICF0aGlzLl9pc1BhdXNlZCkge1xuICAgICAgdGhpcy5faW50ZXJ2 YWwgPSBzZXRJbnRlcnZhbChcbiAgICAgICAgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA/IHRo aXMubmV4dFdoZW5WaXNpYmxlIDogdGhpcy5uZXh0KS5iaW5kKHRoaXMpLFxuICAgICAgICB0aGlz Ll9jb25maWcuaW50ZXJ2YWxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICB0byhpbmRleCkge1xu ICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2Vs ZWN0b3IuQUNUSVZFX0lURU0pXG5cbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2dldEl0 ZW1JbmRleCh0aGlzLl9hY3RpdmVFbGVtZW50KVxuXG4gICAgaWYgKGluZGV4ID4gdGhpcy5faXRl bXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAg IGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub25lKEV2ZW50 LlNMSUQsICgpID0+IHRoaXMudG8oaW5kZXgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAg aWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICB0 aGlzLmN5Y2xlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9 IGluZGV4ID4gYWN0aXZlSW5kZXhcbiAgICAgID8gRGlyZWN0aW9uLk5FWFRcbiAgICAgIDogRGly ZWN0aW9uLlBSRVZcblxuICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiwgdGhpcy5faXRlbXNbaW5k ZXhdKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICAkKHRoaXMuX2VsZW1lbnQpLm9mZihFVkVO VF9LRVkpXG4gICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKVxuXG4gICAg dGhpcy5faXRlbXMgICAgICAgICAgICAgPSBudWxsXG4gICAgdGhpcy5fY29uZmlnICAgICAgICAg ICAgPSBudWxsXG4gICAgdGhpcy5fZWxlbWVudCAgICAgICAgICAgPSBudWxsXG4gICAgdGhpcy5f aW50ZXJ2YWwgICAgICAgICAgPSBudWxsXG4gICAgdGhpcy5faXNQYXVzZWQgICAgICAgICAgPSBu dWxsXG4gICAgdGhpcy5faXNTbGlkaW5nICAgICAgICAgPSBudWxsXG4gICAgdGhpcy5fYWN0aXZl RWxlbWVudCAgICAgPSBudWxsXG4gICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBudWxsXG4g IH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcg PSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uY29uZmlnXG4gICAgfVxuICAgIFV0aWwu dHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNv bmZpZ1xuICB9XG5cbiAgX2hhbmRsZVN3aXBlKCkge1xuICAgIGNvbnN0IGFic0RlbHRheCA9IE1h dGguYWJzKHRoaXMudG91Y2hEZWx0YVgpXG5cbiAgICBpZiAoYWJzRGVsdGF4IDw9IFNXSVBFX1RI UkVTSE9MRCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0g YWJzRGVsdGF4IC8gdGhpcy50b3VjaERlbHRhWFxuXG4gICAgdGhpcy50b3VjaERlbHRhWCA9IDBc blxuICAgIC8vIHN3aXBlIGxlZnRcbiAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgdGhp cy5wcmV2KClcbiAgICB9XG5cbiAgICAvLyBzd2lwZSByaWdodFxuICAgIGlmIChkaXJlY3Rpb24g PCAwKSB7XG4gICAgICB0aGlzLm5leHQoKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRFdmVudExpc3Rl bmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAkKHRoaXMu X2VsZW1lbnQpXG4gICAgICAgIC5vbihFdmVudC5LRVlET1dOLCAoZXZlbnQpID0+IHRoaXMuX2tl eWRvd24oZXZlbnQpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdo b3ZlcicpIHtcbiAgICAgICQodGhpcy5fZWxlbWVudClcbiAgICAgICAgLm9uKEV2ZW50Lk1PVVNF RU5URVIsIChldmVudCkgPT4gdGhpcy5wYXVzZShldmVudCkpXG4gICAgICAgIC5vbihFdmVudC5N T1VTRUxFQVZFLCAoZXZlbnQpID0+IHRoaXMuY3ljbGUoZXZlbnQpKVxuICAgIH1cblxuICAgIGlm ICh0aGlzLl9jb25maWcudG91Y2gpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5l cnMoKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlm ICghdGhpcy5fdG91Y2hTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNv bnN0IHN0YXJ0ID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5fcG9pbnRlckV2ZW50ICYm IFBvaW50ZXJUeXBlW2V2ZW50Lm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2Uo KV0pIHtcbiAgICAgICAgdGhpcy50b3VjaFN0YXJ0WCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xp ZW50WFxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fcG9pbnRlckV2ZW50KSB7XG4gICAgICAgIHRo aXMudG91Y2hTdGFydFggPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WFxu ICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1vdmUgPSAoZXZlbnQpID0+IHtcbiAgICAgIC8v IGVuc3VyZSBzd2lwaW5nIHdpdGggb25lIHRvdWNoIGFuZCBub3QgcGluY2hpbmdcbiAgICAgIGlm IChldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3Vj aGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhpcy50b3VjaERlbHRhWCA9IDBcbiAgICAgIH0g ZWxzZSB7XG4gICAgICAgIHRoaXMudG91Y2hEZWx0YVggPSBldmVudC5vcmlnaW5hbEV2ZW50LnRv dWNoZXNbMF0uY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydFhcbiAgICAgIH1cbiAgICB9XG5cbiAg ICBjb25zdCBlbmQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9wb2ludGVyRXZlbnQg JiYgUG9pbnRlclR5cGVbZXZlbnQub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2Fz ZSgpXSkge1xuICAgICAgICB0aGlzLnRvdWNoRGVsdGFYID0gZXZlbnQub3JpZ2luYWxFdmVudC5j bGllbnRYIC0gdGhpcy50b3VjaFN0YXJ0WFxuICAgICAgfVxuXG4gICAgICB0aGlzLl9oYW5kbGVT d2lwZSgpXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAg ICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBh cmUgZmlyZWQgYXNcbiAgICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBl dmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAgIC8vIHdvdWxkIHN0b3Ag Y3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAgIC8vIGhlcmUsIHdl IGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAg ICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50 ZXIgY29tcGF0IGV2ZW50XG4gICAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGlt ZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgICAgLy8gZXZlbnRz IHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG5cbiAgICAgICAgdGhpcy5w YXVzZSgpXG4gICAgICAgIGlmICh0aGlzLnRvdWNoVGltZW91dCkge1xuICAgICAgICAgIGNsZWFy VGltZW91dCh0aGlzLnRvdWNoVGltZW91dClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvdWNo VGltZW91dCA9IHNldFRpbWVvdXQoKGV2ZW50KSA9PiB0aGlzLmN5Y2xlKGV2ZW50KSwgVE9VQ0hF VkVOVF9DT01QQVRfV0FJVCArIHRoaXMuX2NvbmZpZy5pbnRlcnZhbClcbiAgICAgIH1cbiAgICB9 XG5cbiAgICAkKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5JVEVNX0lN RykpLm9uKEV2ZW50LkRSQUdfU1RBUlQsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpXG4gICAg aWYgKHRoaXMuX3BvaW50ZXJFdmVudCkge1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVu dC5QT0lOVEVSRE9XTiwgKGV2ZW50KSA9PiBzdGFydChldmVudCkpXG4gICAgICAkKHRoaXMuX2Vs ZW1lbnQpLm9uKEV2ZW50LlBPSU5URVJVUCwgKGV2ZW50KSA9PiBlbmQoZXZlbnQpKVxuXG4gICAg ICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lLlBPSU5URVJfRVZFTlQpXG4g ICAgfSBlbHNlIHtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQuVE9VQ0hTVEFSVCwg KGV2ZW50KSA9PiBzdGFydChldmVudCkpXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50 LlRPVUNITU9WRSwgKGV2ZW50KSA9PiBtb3ZlKGV2ZW50KSlcbiAgICAgICQodGhpcy5fZWxlbWVu dCkub24oRXZlbnQuVE9VQ0hFTkQsIChldmVudCkgPT4gZW5kKGV2ZW50KSlcbiAgICB9XG4gIH1c blxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2 ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3dpdGNo IChldmVudC53aGljaCkge1xuICAgICAgY2FzZSBBUlJPV19MRUZUX0tFWUNPREU6XG4gICAgICAg IGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgdGhpcy5wcmV2KClcbiAgICAgICAgYnJl YWtcbiAgICAgIGNhc2UgQVJST1dfUklHSFRfS0VZQ09ERTpcbiAgICAgICAgZXZlbnQucHJldmVu dERlZmF1bHQoKVxuICAgICAgICB0aGlzLm5leHQoKVxuICAgICAgICBicmVha1xuICAgICAgZGVm YXVsdDpcbiAgICB9XG4gIH1cblxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICB0aGlz Ll9pdGVtcyA9IGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlXG4gICAgICA/IFtdLnNsaWNl LmNhbGwoZWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuSVRFTSkp XG4gICAgICA6IFtdXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmluZGV4T2YoZWxlbWVudClcbiAg fVxuXG4gIF9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KSB7XG4g ICAgY29uc3QgaXNOZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTkVYVFxu ICAgIGNvbnN0IGlzUHJldkRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLlBSRVZc biAgICBjb25zdCBhY3RpdmVJbmRleCAgICAgPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxl bWVudClcbiAgICBjb25zdCBsYXN0SXRlbUluZGV4ICAgPSB0aGlzLl9pdGVtcy5sZW5ndGggLSAx XG4gICAgY29uc3QgaXNHb2luZ1RvV3JhcCAgID0gaXNQcmV2RGlyZWN0aW9uICYmIGFjdGl2ZUlu ZGV4ID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXh0RGlyZWN0aW9u ICYmIGFjdGl2ZUluZGV4ID09PSBsYXN0SXRlbUluZGV4XG5cbiAgICBpZiAoaXNHb2luZ1RvV3Jh cCAmJiAhdGhpcy5fY29uZmlnLndyYXApIHtcbiAgICAgIHJldHVybiBhY3RpdmVFbGVtZW50XG4g ICAgfVxuXG4gICAgY29uc3QgZGVsdGEgICAgID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJF ViA/IC0xIDogMVxuICAgIGNvbnN0IGl0ZW1JbmRleCA9IChhY3RpdmVJbmRleCArIGRlbHRhKSAl IHRoaXMuX2l0ZW1zLmxlbmd0aFxuXG4gICAgcmV0dXJuIGl0ZW1JbmRleCA9PT0gLTFcbiAgICAg ID8gdGhpcy5faXRlbXNbdGhpcy5faXRlbXMubGVuZ3RoIC0gMV0gOiB0aGlzLl9pdGVtc1tpdGVt SW5kZXhdXG4gIH1cblxuICBfdHJpZ2dlclNsaWRlRXZlbnQocmVsYXRlZFRhcmdldCwgZXZlbnRE aXJlY3Rpb25OYW1lKSB7XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5k ZXgocmVsYXRlZFRhcmdldClcbiAgICBjb25zdCBmcm9tSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5k ZXgodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkFDVElWRV9JVEVNKSlcbiAg ICBjb25zdCBzbGlkZUV2ZW50ID0gJC5FdmVudChFdmVudC5TTElERSwge1xuICAgICAgcmVsYXRl ZFRhcmdldCxcbiAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxuICAgICAgZnJv bTogZnJvbUluZGV4LFxuICAgICAgdG86IHRhcmdldEluZGV4XG4gICAgfSlcblxuICAgICQodGhp cy5fZWxlbWVudCkudHJpZ2dlcihzbGlkZUV2ZW50KVxuXG4gICAgcmV0dXJuIHNsaWRlRXZlbnRc biAgfVxuXG4gIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICBpZiAo dGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGluZGljYXRvcnMgPSBbXS5z bGljZS5jYWxsKHRoaXMuX2luZGljYXRvcnNFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0 b3IuQUNUSVZFKSlcbiAgICAgICQoaW5kaWNhdG9ycylcbiAgICAgICAgLnJlbW92ZUNsYXNzKENs YXNzTmFtZS5BQ1RJVkUpXG5cbiAgICAgIGNvbnN0IG5leHRJbmRpY2F0b3IgPSB0aGlzLl9pbmRp Y2F0b3JzRWxlbWVudC5jaGlsZHJlbltcbiAgICAgICAgdGhpcy5fZ2V0SXRlbUluZGV4KGVsZW1l bnQpXG4gICAgICBdXG5cbiAgICAgIGlmIChuZXh0SW5kaWNhdG9yKSB7XG4gICAgICAgICQobmV4 dEluZGljYXRvcikuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSlcbiAgICAgIH1cbiAgICB9XG4g IH1cblxuICBfc2xpZGUoZGlyZWN0aW9uLCBlbGVtZW50KSB7XG4gICAgY29uc3QgYWN0aXZlRWxl bWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5BQ1RJVkVfSVRFTSlc biAgICBjb25zdCBhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZl RWxlbWVudClcbiAgICBjb25zdCBuZXh0RWxlbWVudCAgID0gZWxlbWVudCB8fCBhY3RpdmVFbGVt ZW50ICYmXG4gICAgICB0aGlzLl9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVF bGVtZW50KVxuICAgIGNvbnN0IG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgo bmV4dEVsZW1lbnQpXG4gICAgY29uc3QgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZh bClcblxuICAgIGxldCBkaXJlY3Rpb25hbENsYXNzTmFtZVxuICAgIGxldCBvcmRlckNsYXNzTmFt ZVxuICAgIGxldCBldmVudERpcmVjdGlvbk5hbWVcblxuICAgIGlmIChkaXJlY3Rpb24gPT09IERp cmVjdGlvbi5ORVhUKSB7XG4gICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZS5M RUZUXG4gICAgICBvcmRlckNsYXNzTmFtZSA9IENsYXNzTmFtZS5ORVhUXG4gICAgICBldmVudERp cmVjdGlvbk5hbWUgPSBEaXJlY3Rpb24uTEVGVFxuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3Rp b25hbENsYXNzTmFtZSA9IENsYXNzTmFtZS5SSUdIVFxuICAgICAgb3JkZXJDbGFzc05hbWUgPSBD bGFzc05hbWUuUFJFVlxuICAgICAgZXZlbnREaXJlY3Rpb25OYW1lID0gRGlyZWN0aW9uLlJJR0hU XG4gICAgfVxuXG4gICAgaWYgKG5leHRFbGVtZW50ICYmICQobmV4dEVsZW1lbnQpLmhhc0NsYXNz KENsYXNzTmFtZS5BQ1RJVkUpKSB7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuICAg ICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2xpZGVFdmVudCA9IHRoaXMuX3RyaWdnZXJT bGlkZUV2ZW50KG5leHRFbGVtZW50LCBldmVudERpcmVjdGlvbk5hbWUpXG4gICAgaWYgKHNsaWRl RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAg IGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIC8vIFNvbWUgd2Vp cmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4g ICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZVxuXG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAg dGhpcy5wYXVzZSgpXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVu dChuZXh0RWxlbWVudClcblxuICAgIGNvbnN0IHNsaWRFdmVudCA9ICQuRXZlbnQoRXZlbnQuU0xJ RCwge1xuICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICBkaXJlY3Rpb246 IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgIGZyb206IGFjdGl2ZUVsZW1lbnRJbmRleCxcbiAg ICAgIHRvOiBuZXh0RWxlbWVudEluZGV4XG4gICAgfSlcblxuICAgIGlmICgkKHRoaXMuX2VsZW1l bnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TTElERSkpIHtcbiAgICAgICQobmV4dEVsZW1lbnQpLmFk ZENsYXNzKG9yZGVyQ2xhc3NOYW1lKVxuXG4gICAgICBVdGlsLnJlZmxvdyhuZXh0RWxlbWVudClc blxuICAgICAgJChhY3RpdmVFbGVtZW50KS5hZGRDbGFzcyhkaXJlY3Rpb25hbENsYXNzTmFtZSlc biAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4g ICAgICBjb25zdCBuZXh0RWxlbWVudEludGVydmFsID0gcGFyc2VJbnQobmV4dEVsZW1lbnQuZ2V0 QXR0cmlidXRlKCdkYXRhLWludGVydmFsJyksIDEwKVxuICAgICAgaWYgKG5leHRFbGVtZW50SW50 ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IHRoaXMuX2Nv bmZpZy5kZWZhdWx0SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsXG4gICAgICAgIHRo aXMuX2NvbmZpZy5pbnRlcnZhbCA9IG5leHRFbGVtZW50SW50ZXJ2YWxcbiAgICAgIH0gZWxzZSB7 XG4gICAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50 ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRy YW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQo YWN0aXZlRWxlbWVudClcblxuICAgICAgJChhY3RpdmVFbGVtZW50KVxuICAgICAgICAub25lKFV0 aWwuVFJBTlNJVElPTl9FTkQsICgpID0+IHtcbiAgICAgICAgICAkKG5leHRFbGVtZW50KVxuICAg ICAgICAgICAgLnJlbW92ZUNsYXNzKGAke2RpcmVjdGlvbmFsQ2xhc3NOYW1lfSAke29yZGVyQ2xh c3NOYW1lfWApXG4gICAgICAgICAgICAuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSlcblxuICAg ICAgICAgICQoYWN0aXZlRWxlbWVudCkucmVtb3ZlQ2xhc3MoYCR7Q2xhc3NOYW1lLkFDVElWRX0g JHtvcmRlckNsYXNzTmFtZX0gJHtkaXJlY3Rpb25hbENsYXNzTmFtZX1gKVxuXG4gICAgICAgICAg dGhpcy5faXNTbGlkaW5nID0gZmFsc2VcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gJCh0 aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRFdmVudCksIDApXG4gICAgICAgIH0pXG4gICAgICAg IC5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pXG4gICAgfSBlbHNlIHtc biAgICAgICQoYWN0aXZlRWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSlcbiAg ICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpXG5cbiAgICAgIHRo aXMuX2lzU2xpZGluZyA9IGZhbHNlXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xp ZEV2ZW50KVxuICAgIH1cblxuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMuY3ljbGUo KVxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBfalF1ZXJ5SW50ZXJmYWNl KGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0 IGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkpXG4gICAgICBsZXQgX2NvbmZpZyA9IHtcbiAg ICAgICAgLi4uRGVmYXVsdCxcbiAgICAgICAgLi4uJCh0aGlzKS5kYXRhKClcbiAgICAgIH1cblxu ICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIF9jb25maWcg PSB7XG4gICAgICAgICAgLi4uX2NvbmZpZyxcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAg fVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3Ry aW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGVcblxuICAgICAgaWYgKCFkYXRhKSB7XG4gICAg ICAgIGRhdGEgPSBuZXcgQ2Fyb3VzZWwodGhpcywgX2NvbmZpZylcbiAgICAgICAgJCh0aGlzKS5k YXRhKERBVEFfS0VZLCBkYXRhKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9 PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0YS50byhjb25maWcpXG4gICAgICB9IGVsc2UgaWYg KHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVth Y3Rpb25dID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io YE5vIG1ldGhvZCBuYW1lZCBcIiR7YWN0aW9ufVwiYClcbiAgICAgICAgfVxuICAgICAgICBkYXRh W2FjdGlvbl0oKVxuICAgICAgfSBlbHNlIGlmIChfY29uZmlnLmludGVydmFsICYmIF9jb25maWcu cmlkZSkge1xuICAgICAgICBkYXRhLnBhdXNlKClcbiAgICAgICAgZGF0YS5jeWNsZSgpXG4gICAg ICB9XG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBfZGF0YUFwaUNsaWNrSGFuZGxlcihldmVudCkg e1xuICAgIGNvbnN0IHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMp XG5cbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25z dCB0YXJnZXQgPSAkKHNlbGVjdG9yKVswXVxuXG4gICAgaWYgKCF0YXJnZXQgfHwgISQodGFyZ2V0 KS5oYXNDbGFzcyhDbGFzc05hbWUuQ0FST1VTRUwpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5c biAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAuLi4kKHRhcmdldCkuZGF0YSgpLFxuICAgICAg Li4uJCh0aGlzKS5kYXRhKClcbiAgICB9XG4gICAgY29uc3Qgc2xpZGVJbmRleCA9IHRoaXMuZ2V0 QXR0cmlidXRlKCdkYXRhLXNsaWRlLXRvJylcblxuICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAg ICBjb25maWcuaW50ZXJ2YWwgPSBmYWxzZVxuICAgIH1cblxuICAgIENhcm91c2VsLl9qUXVlcnlJ bnRlcmZhY2UuY2FsbCgkKHRhcmdldCksIGNvbmZpZylcblxuICAgIGlmIChzbGlkZUluZGV4KSB7 XG4gICAgICAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSkudG8oc2xpZGVJbmRleClcbiAgICB9XG5c biAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAq L1xuXG4kKGRvY3VtZW50KVxuICAub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRB VEFfU0xJREUsIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyKVxuXG4kKHdpbmRvdykub24o RXZlbnQuTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBjb25zdCBjYXJvdXNlbHMgPSBbXS5zbGlj ZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuREFUQV9SSURFKSlcbiAg Zm9yIChsZXQgaSA9IDAsIGxlbiA9IGNhcm91c2Vscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xu ICAgIGNvbnN0ICRjYXJvdXNlbCA9ICQoY2Fyb3VzZWxzW2ldKVxuICAgIENhcm91c2VsLl9qUXVl cnlJbnRlcmZhY2UuY2FsbCgkY2Fyb3VzZWwsICRjYXJvdXNlbC5kYXRhKCkpXG4gIH1cbn0pXG5c bi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu ICovXG5cbiQuZm5bTkFNRV0gPSBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlXG4kLmZuW05BTUVd LkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWxcbiQuZm5bTkFNRV0ubm9Db25mbGljdCA9ICgpID0+IHtc biAgJC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICByZXR1cm4gQ2Fyb3VzZWwuX2pR dWVyeUludGVyZmFjZVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXJvdXNlbFxuIiwiLyoqXG4gKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NC40LjEpOiBjb2xsYXBzZS5qc1xuICog TGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxv Yi9tYXN0ZXIvTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICQg ZnJvbSAnanF1ZXJ5J1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJ1xuXG4vKipcbiAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25z dCBOQU1FICAgICAgICAgICAgICAgID0gJ2NvbGxhcHNlJ1xuY29uc3QgVkVSU0lPTiAgICAgICAg ICAgICA9ICc0LjQuMSdcbmNvbnN0IERBVEFfS0VZICAgICAgICAgICAgPSAnYnMuY29sbGFwc2Un XG5jb25zdCBFVkVOVF9LRVkgICAgICAgICAgID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFf QVBJX0tFWSAgICAgICAgPSAnLmRhdGEtYXBpJ1xuY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUICA9 ICQuZm5bTkFNRV1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgdG9nZ2xlIDogdHJ1ZSxcbiAgcGFy ZW50IDogJydcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIHRvZ2dsZSA6ICdib29sZWFu JyxcbiAgcGFyZW50IDogJyhzdHJpbmd8ZWxlbWVudCknXG59XG5cbmNvbnN0IEV2ZW50ID0ge1xu ICBTSE9XICAgICAgICAgICA6IGBzaG93JHtFVkVOVF9LRVl9YCxcbiAgU0hPV04gICAgICAgICAg OiBgc2hvd24ke0VWRU5UX0tFWX1gLFxuICBISURFICAgICAgICAgICA6IGBoaWRlJHtFVkVOVF9L RVl9YCxcbiAgSElEREVOICAgICAgICAgOiBgaGlkZGVuJHtFVkVOVF9LRVl9YCxcbiAgQ0xJQ0tf REFUQV9BUEkgOiBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG59XG5cbmNvbnN0 IENsYXNzTmFtZSA9IHtcbiAgU0hPVyAgICAgICA6ICdzaG93JyxcbiAgQ09MTEFQU0UgICA6ICdj b2xsYXBzZScsXG4gIENPTExBUFNJTkcgOiAnY29sbGFwc2luZycsXG4gIENPTExBUFNFRCAgOiAn Y29sbGFwc2VkJ1xufVxuXG5jb25zdCBEaW1lbnNpb24gPSB7XG4gIFdJRFRIICA6ICd3aWR0aCcs XG4gIEhFSUdIVCA6ICdoZWlnaHQnXG59XG5cbmNvbnN0IFNlbGVjdG9yID0ge1xuICBBQ1RJVkVT ICAgICA6ICcuc2hvdywgLmNvbGxhcHNpbmcnLFxuICBEQVRBX1RPR0dMRSA6ICdbZGF0YS10b2dn bGU9XCJjb2xsYXBzZVwiXSdcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNz IERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIENvbGxhcHNlIHtc biAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9u aW5nID0gZmFsc2VcbiAgICB0aGlzLl9lbGVtZW50ICAgICAgICAgPSBlbGVtZW50XG4gICAgdGhp cy5fY29uZmlnICAgICAgICAgID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl90 cmlnZ2VyQXJyYXkgICAgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo XG4gICAgICBgW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1baHJlZj1cIiMke2VsZW1lbnQuaWR9 XCJdLGAgK1xuICAgICAgYFtkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtdGFyZ2V0PVwi IyR7ZWxlbWVudC5pZH1cIl1gXG4gICAgKSlcblxuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBbXS5z bGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuREFUQV9UT0dHTEUp KVxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0b2dnbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsg aSsrKSB7XG4gICAgICBjb25zdCBlbGVtID0gdG9nZ2xlTGlzdFtpXVxuICAgICAgY29uc3Qgc2Vs ZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbSlcbiAgICAgIGNvbnN0IGZp bHRlckVsZW1lbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2Vs ZWN0b3IpKVxuICAgICAgICAuZmlsdGVyKChmb3VuZEVsZW0pID0+IGZvdW5kRWxlbSA9PT0gZWxl bWVudClcblxuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVu Z3RoID4gMCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yXG4gICAgICAgIHRo aXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5f cGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudCA/IHRoaXMuX2dldFBhcmVudCgpIDogbnVsbFxu XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICB0aGlzLl9hZGRBcmlhQW5k Q29sbGFwc2VkQ2xhc3ModGhpcy5fZWxlbWVudCwgdGhpcy5fdHJpZ2dlckFycmF5KVxuICAgIH1c blxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpXG4g ICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgVkVSU0lPTigpIHtcbiAg ICByZXR1cm4gVkVSU0lPTlxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJl dHVybiBEZWZhdWx0XG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUoKSB7XG4gICAgaWYg KCQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpKSB7XG4gICAgICB0aGlz LmhpZGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKVxuICAgIH1cbiAgfVxuXG4g IHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fFxuICAgICAgJCh0aGlz Ll9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVykpIHtcbiAgICAgIHJldHVyblxuICAg IH1cblxuICAgIGxldCBhY3RpdmVzXG4gICAgbGV0IGFjdGl2ZXNEYXRhXG5cbiAgICBpZiAodGhp cy5fcGFyZW50KSB7XG4gICAgICBhY3RpdmVzID0gW10uc2xpY2UuY2FsbCh0aGlzLl9wYXJlbnQu cXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5BQ1RJVkVTKSlcbiAgICAgICAgLmZpbHRlcigoZWxl bSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnBhcmVudCA9PT0gJ3N0 cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1wYXJl bnQnKSA9PT0gdGhpcy5fY29uZmlnLnBhcmVudFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJl dHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUuQ09MTEFQU0UpXG4gICAgICAg IH0pXG5cbiAgICAgIGlmIChhY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhY3RpdmVz ID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhY3RpdmVzKSB7XG4gICAgICBhY3Rp dmVzRGF0YSA9ICQoYWN0aXZlcykubm90KHRoaXMuX3NlbGVjdG9yKS5kYXRhKERBVEFfS0VZKVxu ICAgICAgaWYgKGFjdGl2ZXNEYXRhICYmIGFjdGl2ZXNEYXRhLl9pc1RyYW5zaXRpb25pbmcpIHtc biAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRFdmVudCA9 ICQuRXZlbnQoRXZlbnQuU0hPVylcbiAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRF dmVudClcbiAgICBpZiAoc3RhcnRFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAg cmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZXMpIHtcbiAgICAgIENvbGxhcHNlLl9qUXVl cnlJbnRlcmZhY2UuY2FsbCgkKGFjdGl2ZXMpLm5vdCh0aGlzLl9zZWxlY3RvciksICdoaWRlJylc biAgICAgIGlmICghYWN0aXZlc0RhdGEpIHtcbiAgICAgICAgJChhY3RpdmVzKS5kYXRhKERBVEFf S0VZLCBudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMu X2dldERpbWVuc2lvbigpXG5cbiAgICAkKHRoaXMuX2VsZW1lbnQpXG4gICAgICAucmVtb3ZlQ2xh c3MoQ2xhc3NOYW1lLkNPTExBUFNFKVxuICAgICAgLmFkZENsYXNzKENsYXNzTmFtZS5DT0xMQVBT SU5HKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMFxuXG4gICAgaWYg KHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgICQodGhpcy5fdHJpZ2dlckFycmF5 KVxuICAgICAgICAucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNFRClcbiAgICAgICAgLmF0 dHIoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxuICAgIH1cblxuICAgIHRoaXMuc2V0VHJhbnNpdGlv bmluZyh0cnVlKVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAkKHRoaXMu X2VsZW1lbnQpXG4gICAgICAgIC5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0lORylcbiAg ICAgICAgLmFkZENsYXNzKENsYXNzTmFtZS5DT0xMQVBTRSlcbiAgICAgICAgLmFkZENsYXNzKENs YXNzTmFtZS5TSE9XKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAn J1xuXG4gICAgICB0aGlzLnNldFRyYW5zaXRpb25pbmcoZmFsc2UpXG5cbiAgICAgICQodGhpcy5f ZWxlbWVudCkudHJpZ2dlcihFdmVudC5TSE9XTilcbiAgICB9XG5cbiAgICBjb25zdCBjYXBpdGFs aXplZERpbWVuc2lvbiA9IGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNs aWNlKDEpXG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5z aW9ufWBcbiAgICBjb25zdCB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25E dXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpXG5cbiAgICAkKHRoaXMuX2VsZW1lbnQp XG4gICAgICAub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNvbXBsZXRlKVxuICAgICAgLmVtdWxh dGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbilcblxuICAgIHRoaXMuX2VsZW1lbnQu c3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV19cHhgXG4gIH1c blxuICBoaWRlKCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHxcbiAgICAgICEk KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKSkge1xuICAgICAgcmV0dXJu XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRFdmVudCA9ICQuRXZlbnQoRXZlbnQuSElERSlcbiAg ICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudClcbiAgICBpZiAoc3RhcnRFdmVu dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29u c3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKClcblxuICAgIHRoaXMuX2VsZW1lbnQu c3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0 KClbZGltZW5zaW9uXX1weGBcblxuICAgIFV0aWwucmVmbG93KHRoaXMuX2VsZW1lbnQpXG5cbiAg ICAkKHRoaXMuX2VsZW1lbnQpXG4gICAgICAuYWRkQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNJTkcp XG4gICAgICAucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNFKVxuICAgICAgLnJlbW92ZUNs YXNzKENsYXNzTmFtZS5TSE9XKVxuXG4gICAgY29uc3QgdHJpZ2dlckFycmF5TGVuZ3RoID0gdGhp cy5fdHJpZ2dlckFycmF5Lmxlbmd0aFxuICAgIGlmICh0cmlnZ2VyQXJyYXlMZW5ndGggPiAwKSB7 XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyaWdnZXJBcnJheUxlbmd0aDsgaSsrKSB7XG4g ICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLl90cmlnZ2VyQXJyYXlbaV1cbiAgICAgICAgY29u c3Qgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodHJpZ2dlcilcblxuICAg ICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCAkZWxlbSA9ICQo W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpXG4gICAg ICAgICAgaWYgKCEkZWxlbS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVykpIHtcbiAgICAgICAgICAg ICQodHJpZ2dlcikuYWRkQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNFRClcbiAgICAgICAgICAgICAg LmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAg ICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldFRyYW5zaXRpb25pbmcodHJ1ZSlcblxuICAgIGNv bnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXRUcmFuc2l0aW9uaW5nKGZhbHNl KVxuICAgICAgJCh0aGlzLl9lbGVtZW50KVxuICAgICAgICAucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1l LkNPTExBUFNJTkcpXG4gICAgICAgIC5hZGRDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0UpXG4gICAg ICAgIC50cmlnZ2VyKEV2ZW50LkhJRERFTilcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LnN0 eWxlW2RpbWVuc2lvbl0gPSAnJ1xuICAgIGNvbnN0IHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwu Z2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudClcblxuICAgICQo dGhpcy5fZWxlbWVudClcbiAgICAgIC5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUp XG4gICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKVxuICB9XG5c biAgc2V0VHJhbnNpdGlvbmluZyhpc1RyYW5zaXRpb25pbmcpIHtcbiAgICB0aGlzLl9pc1RyYW5z aXRpb25pbmcgPSBpc1RyYW5zaXRpb25pbmdcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgJC5y ZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKVxuXG4gICAgdGhpcy5fY29uZmlnICAg ICAgICAgID0gbnVsbFxuICAgIHRoaXMuX3BhcmVudCAgICAgICAgICA9IG51bGxcbiAgICB0aGlz Ll9lbGVtZW50ICAgICAgICAgPSBudWxsXG4gICAgdGhpcy5fdHJpZ2dlckFycmF5ICAgID0gbnVs bFxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IG51bGxcbiAgfVxuXG4gIC8vIFByaXZhdGVc blxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1 bHQsXG4gICAgICAuLi5jb25maWdcbiAgICB9XG4gICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4o Y29uZmlnLnRvZ2dsZSkgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcbiAgICBVdGlsLnR5cGVDaGVj a0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAg fVxuXG4gIF9nZXREaW1lbnNpb24oKSB7XG4gICAgY29uc3QgaGFzV2lkdGggPSAkKHRoaXMuX2Vs ZW1lbnQpLmhhc0NsYXNzKERpbWVuc2lvbi5XSURUSClcbiAgICByZXR1cm4gaGFzV2lkdGggPyBE aW1lbnNpb24uV0lEVEggOiBEaW1lbnNpb24uSEVJR0hUXG4gIH1cblxuICBfZ2V0UGFyZW50KCkg e1xuICAgIGxldCBwYXJlbnRcblxuICAgIGlmIChVdGlsLmlzRWxlbWVudCh0aGlzLl9jb25maWcu cGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudFxuXG4gICAgICAv LyBJdCdzIGEgalF1ZXJ5IG9iamVjdFxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucGFy ZW50LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcGFyZW50ID0gdGhpcy5fY29u ZmlnLnBhcmVudFswXVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnQgPSBkb2N1 bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuX2NvbmZpZy5wYXJlbnQpXG4gICAgfVxuXG4gICAgY29u c3Qgc2VsZWN0b3IgPVxuICAgICAgYFtkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtcGFy ZW50PVwiJHt0aGlzLl9jb25maWcucGFyZW50fVwiXWBcblxuICAgIGNvbnN0IGNoaWxkcmVuID0g W10uc2xpY2UuY2FsbChwYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpXG4gICAgJChj aGlsZHJlbikuZWFjaCgoaSwgZWxlbWVudCkgPT4ge1xuICAgICAgdGhpcy5fYWRkQXJpYUFuZENv bGxhcHNlZENsYXNzKFxuICAgICAgICBDb2xsYXBzZS5fZ2V0VGFyZ2V0RnJvbUVsZW1lbnQoZWxl bWVudCksXG4gICAgICAgIFtlbGVtZW50XVxuICAgICAgKVxuICAgIH0pXG5cbiAgICByZXR1cm4g cGFyZW50XG4gIH1cblxuICBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGVsZW1lbnQsIHRyaWdn ZXJBcnJheSkge1xuICAgIGNvbnN0IGlzT3BlbiA9ICQoZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NO YW1lLlNIT1cpXG5cbiAgICBpZiAodHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgJCh0cmln Z2VyQXJyYXkpXG4gICAgICAgIC50b2dnbGVDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0VELCAhaXNP cGVuKVxuICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGlzT3BlbilcbiAgICB9XG4gIH1c blxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgX2dldFRhcmdldEZyb21FbGVtZW50KGVsZW1lbnQp IHtcbiAgICBjb25zdCBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVt ZW50KVxuICAgIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0 b3IpIDogbnVsbFxuICB9XG5cbiAgc3RhdGljIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4g ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCAkdGhpcyAgID0g JCh0aGlzKVxuICAgICAgbGV0IGRhdGEgICAgICA9ICR0aGlzLmRhdGEoREFUQV9LRVkpXG4gICAg ICBjb25zdCBfY29uZmlnID0ge1xuICAgICAgICAuLi5EZWZhdWx0LFxuICAgICAgICAuLi4kdGhp cy5kYXRhKCksXG4gICAgICAgIC4uLnR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZp ZyA/IGNvbmZpZyA6IHt9XG4gICAgICB9XG5cbiAgICAgIGlmICghZGF0YSAmJiBfY29uZmlnLnRv Z2dsZSAmJiAvc2hvd3xoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgICAgX2NvbmZpZy50b2dn bGUgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9 IG5ldyBDb2xsYXBzZSh0aGlzLCBfY29uZmlnKVxuICAgICAgICAkdGhpcy5kYXRhKERBVEFfS0VZ LCBkYXRhKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycp IHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4g ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9 XCJgKVxuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlc biAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50 YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbiQoZG9jdW1lbnQpLm9uKEV2ZW50LkNM SUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4g IC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRo ZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgaWYgKGV2ZW50LmN1 cnJlbnRUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQo KVxuICB9XG5cbiAgY29uc3QgJHRyaWdnZXIgPSAkKHRoaXMpXG4gIGNvbnN0IHNlbGVjdG9yID0g VXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpXG4gIGNvbnN0IHNlbGVjdG9ycyA9IFtd LnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpXG5cbiAgJChz ZWxlY3RvcnMpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkKHRoaXMp XG4gICAgY29uc3QgZGF0YSAgICA9ICR0YXJnZXQuZGF0YShEQVRBX0tFWSlcbiAgICBjb25zdCBj b25maWcgID0gZGF0YSA/ICd0b2dnbGUnIDogJHRyaWdnZXIuZGF0YSgpXG4gICAgQ29sbGFwc2Uu X2pRdWVyeUludGVyZmFjZS5jYWxsKCR0YXJnZXQsIGNvbmZpZylcbiAgfSlcbn0pXG5cbi8qKlxu ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5c biQuZm5bTkFNRV0gPSBDb2xsYXBzZS5falF1ZXJ5SW50ZXJmYWNlXG4kLmZuW05BTUVdLkNvbnN0 cnVjdG9yID0gQ29sbGFwc2VcbiQuZm5bTkFNRV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgJC5m bltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICByZXR1cm4gQ29sbGFwc2UuX2pRdWVyeUlu dGVyZmFjZVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xsYXBzZVxuIiwiLyoqXG4gKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NC40LjEpOiBkcm9wZG93bi5qc1xuICogTGljZW5z ZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0 ZXIvTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICQgZnJvbSAn anF1ZXJ5J1xuaW1wb3J0IFBvcHBlciBmcm9tICdwb3BwZXIuanMnXG5pbXBvcnQgVXRpbCBmcm9t ICcuL3V0aWwnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgICAgICAgICAgICAgICAgICAgICA9ICdk cm9wZG93bidcbmNvbnN0IFZFUlNJT04gICAgICAgICAgICAgICAgICA9ICc0LjQuMSdcbmNvbnN0 IERBVEFfS0VZICAgICAgICAgICAgICAgICA9ICdicy5kcm9wZG93bidcbmNvbnN0IEVWRU5UX0tF WSAgICAgICAgICAgICAgICA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgICAg ICAgICAgICAgPSAnLmRhdGEtYXBpJ1xuY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUICAgICAgID0g JC5mbltOQU1FXVxuY29uc3QgRVNDQVBFX0tFWUNPREUgICAgICAgICAgID0gMjcgLy8gS2V5Ym9h cmRFdmVudC53aGljaCB2YWx1ZSBmb3IgRXNjYXBlIChFc2MpIGtleVxuY29uc3QgU1BBQ0VfS0VZ Q09ERSAgICAgICAgICAgID0gMzIgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3Igc3Bh Y2Uga2V5XG5jb25zdCBUQUJfS0VZQ09ERSAgICAgICAgICAgICAgPSA5IC8vIEtleWJvYXJkRXZl bnQud2hpY2ggdmFsdWUgZm9yIHRhYiBrZXlcbmNvbnN0IEFSUk9XX1VQX0tFWUNPREUgICAgICAg ICA9IDM4IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHVwIGFycm93IGtleVxuY29u c3QgQVJST1dfRE9XTl9LRVlDT0RFICAgICAgID0gNDAgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2 YWx1ZSBmb3IgZG93biBhcnJvdyBrZXlcbmNvbnN0IFJJR0hUX01PVVNFX0JVVFRPTl9XSElDSCA9 IDMgLy8gTW91c2VFdmVudC53aGljaCB2YWx1ZSBmb3IgdGhlIHJpZ2h0IGJ1dHRvbiAoYXNzdW1p bmcgYSByaWdodC1oYW5kZWQgbW91c2UpXG5jb25zdCBSRUdFWFBfS0VZRE9XTiAgICAgICAgICAg PSBuZXcgUmVnRXhwKGAke0FSUk9XX1VQX0tFWUNPREV9fCR7QVJST1dfRE9XTl9LRVlDT0RFfXwk e0VTQ0FQRV9LRVlDT0RFfWApXG5cbmNvbnN0IEV2ZW50ID0ge1xuICBISURFICAgICAgICAgICAg IDogYGhpZGUke0VWRU5UX0tFWX1gLFxuICBISURERU4gICAgICAgICAgIDogYGhpZGRlbiR7RVZF TlRfS0VZfWAsXG4gIFNIT1cgICAgICAgICAgICAgOiBgc2hvdyR7RVZFTlRfS0VZfWAsXG4gIFNI T1dOICAgICAgICAgICAgOiBgc2hvd24ke0VWRU5UX0tFWX1gLFxuICBDTElDSyAgICAgICAgICAg IDogYGNsaWNrJHtFVkVOVF9LRVl9YCxcbiAgQ0xJQ0tfREFUQV9BUEkgICA6IGBjbGljayR7RVZF TlRfS0VZfSR7REFUQV9BUElfS0VZfWAsXG4gIEtFWURPV05fREFUQV9BUEkgOiBga2V5ZG93biR7 RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWAsXG4gIEtFWVVQX0RBVEFfQVBJICAgOiBga2V5dXAk e0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG59XG5cbmNvbnN0IENsYXNzTmFtZSA9IHtcbiAg RElTQUJMRUQgICAgICAgIDogJ2Rpc2FibGVkJyxcbiAgU0hPVyAgICAgICAgICAgIDogJ3Nob3cn LFxuICBEUk9QVVAgICAgICAgICAgOiAnZHJvcHVwJyxcbiAgRFJPUFJJR0hUICAgICAgIDogJ2Ry b3ByaWdodCcsXG4gIERST1BMRUZUICAgICAgICA6ICdkcm9wbGVmdCcsXG4gIE1FTlVSSUdIVCAg ICAgICA6ICdkcm9wZG93bi1tZW51LXJpZ2h0JyxcbiAgTUVOVUxFRlQgICAgICAgIDogJ2Ryb3Bk b3duLW1lbnUtbGVmdCcsXG4gIFBPU0lUSU9OX1NUQVRJQyA6ICdwb3NpdGlvbi1zdGF0aWMnXG59 XG5cbmNvbnN0IFNlbGVjdG9yID0ge1xuICBEQVRBX1RPR0dMRSAgIDogJ1tkYXRhLXRvZ2dsZT1c ImRyb3Bkb3duXCJdJyxcbiAgRk9STV9DSElMRCAgICA6ICcuZHJvcGRvd24gZm9ybScsXG4gIE1F TlUgICAgICAgICAgOiAnLmRyb3Bkb3duLW1lbnUnLFxuICBOQVZCQVJfTkFWICAgIDogJy5uYXZi YXItbmF2JyxcbiAgVklTSUJMRV9JVEVNUyA6ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRl bTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSdcbn1cblxuY29uc3QgQXR0YWNobWVudE1h cCA9IHtcbiAgVE9QICAgICAgIDogJ3RvcC1zdGFydCcsXG4gIFRPUEVORCAgICA6ICd0b3AtZW5k JyxcbiAgQk9UVE9NICAgIDogJ2JvdHRvbS1zdGFydCcsXG4gIEJPVFRPTUVORCA6ICdib3R0b20t ZW5kJyxcbiAgUklHSFQgICAgIDogJ3JpZ2h0LXN0YXJ0JyxcbiAgUklHSFRFTkQgIDogJ3JpZ2h0 LWVuZCcsXG4gIExFRlQgICAgICA6ICdsZWZ0LXN0YXJ0JyxcbiAgTEVGVEVORCAgIDogJ2xlZnQt ZW5kJ1xufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBvZmZzZXQgICAgICAgOiAwLFxuICBmbGlw ICAgICAgICAgOiB0cnVlLFxuICBib3VuZGFyeSAgICAgOiAnc2Nyb2xsUGFyZW50JyxcbiAgcmVm ZXJlbmNlICAgIDogJ3RvZ2dsZScsXG4gIGRpc3BsYXkgICAgICA6ICdkeW5hbWljJyxcbiAgcG9w cGVyQ29uZmlnIDogbnVsbFxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgb2Zmc2V0ICAg ICAgIDogJyhudW1iZXJ8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIGZsaXAgICAgICAgICA6ICdib29s ZWFuJyxcbiAgYm91bmRhcnkgICAgIDogJyhzdHJpbmd8ZWxlbWVudCknLFxuICByZWZlcmVuY2Ug ICAgOiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIGRpc3BsYXkgICAgICA6ICdzdHJpbmcnLFxuICBw b3BwZXJDb25maWcgOiAnKG51bGx8b2JqZWN0KSdcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNz IERyb3Bkb3duIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgdGhpcy5f ZWxlbWVudCAgPSBlbGVtZW50XG4gICAgdGhpcy5fcG9wcGVyICAgPSBudWxsXG4gICAgdGhpcy5f Y29uZmlnICAgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX21lbnUgICAgID0g dGhpcy5fZ2V0TWVudUVsZW1lbnQoKVxuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0 TmF2YmFyKClcblxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdl dHRlcnNcblxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05cbiAg fVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5c biAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAg fVxuXG4gIC8vIFB1YmxpY1xuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5k aXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5ESVNBQkxFRCkp IHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGlzQWN0aXZlID0gJCh0aGlzLl9t ZW51KS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVylcblxuICAgIERyb3Bkb3duLl9jbGVhck1lbnVz KClcblxuICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhp cy5zaG93KHRydWUpXG4gIH1cblxuICBzaG93KHVzZVBvcHBlciA9IGZhbHNlKSB7XG4gICAgaWYg KHRoaXMuX2VsZW1lbnQuZGlzYWJsZWQgfHwgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFz c05hbWUuRElTQUJMRUQpIHx8ICQodGhpcy5fbWVudSkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cp KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xu ICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cbiAgICBjb25zdCBzaG93 RXZlbnQgPSAkLkV2ZW50KEV2ZW50LlNIT1csIHJlbGF0ZWRUYXJnZXQpXG4gICAgY29uc3QgcGFy ZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpXG5cbiAg ICAkKHBhcmVudCkudHJpZ2dlcihzaG93RXZlbnQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmlzRGVm YXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBEaXNhYmxl IHRvdGFsbHkgUG9wcGVyLmpzIGZvciBEcm9wZG93biBpbiBOYXZiYXJcbiAgICBpZiAoIXRoaXMu X2luTmF2YmFyICYmIHVzZVBvcHBlcikge1xuICAgICAgLyoqXG4gICAgICAgKiBDaGVjayBmb3Ig UG9wcGVyIGRlcGVuZGVuY3lcbiAgICAgICAqIFBvcHBlciAtIGh0dHBzOi8vcG9wcGVyLmpzLm9y Z1xuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtc biAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVx dWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy8pJylcbiAgICAgIH1cblxuICAg ICAgbGV0IHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50XG5cbiAgICAgIGlmICh0aGlz Ll9jb25maWcucmVmZXJlbmNlID09PSAncGFyZW50Jykge1xuICAgICAgICByZWZlcmVuY2VFbGVt ZW50ID0gcGFyZW50XG4gICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFbGVtZW50KHRoaXMuX2NvbmZp Zy5yZWZlcmVuY2UpKSB7XG4gICAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcu cmVmZXJlbmNlXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBqUXVlcnkgZWxlbWVudFxuICAg ICAgICBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UuanF1ZXJ5ICE9PSAndW5kZWZp bmVkJykge1xuICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJl bmNlWzBdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgYm91bmRhcnkgaXMgbm90 IGBzY3JvbGxQYXJlbnRgLCB0aGVuIHNldCBwb3NpdGlvbiB0byBgc3RhdGljYFxuICAgICAgLy8g dG8gYWxsb3cgdGhlIG1lbnUgdG8gXCJlc2NhcGVcIiB0aGUgc2Nyb2xsIHBhcmVudCdzIGJvdW5k YXJpZXNcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMv MjQyNTFcbiAgICAgIGlmICh0aGlzLl9jb25maWcuYm91bmRhcnkgIT09ICdzY3JvbGxQYXJlbnQn KSB7XG4gICAgICAgICQocGFyZW50KS5hZGRDbGFzcyhDbGFzc05hbWUuUE9TSVRJT05fU1RBVElD KVxuICAgICAgfVxuICAgICAgdGhpcy5fcG9wcGVyID0gbmV3IFBvcHBlcihyZWZlcmVuY2VFbGVt ZW50LCB0aGlzLl9tZW51LCB0aGlzLl9nZXRQb3BwZXJDb25maWcoKSlcbiAgICB9XG5cbiAgICAv LyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8g ZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJl bjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9u IG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMv MjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBk b2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICAgICAgJChwYXJlbnQpLmNsb3Nlc3QoU2Vs ZWN0b3IuTkFWQkFSX05BVikubGVuZ3RoID09PSAwKSB7XG4gICAgICAkKGRvY3VtZW50LmJvZHkp LmNoaWxkcmVuKCkub24oJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcClcbiAgICB9XG5cbiAgICB0 aGlzLl9lbGVtZW50LmZvY3VzKClcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJp YS1leHBhbmRlZCcsIHRydWUpXG5cbiAgICAkKHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKENsYXNz TmFtZS5TSE9XKVxuICAgICQocGFyZW50KVxuICAgICAgLnRvZ2dsZUNsYXNzKENsYXNzTmFtZS5T SE9XKVxuICAgICAgLnRyaWdnZXIoJC5FdmVudChFdmVudC5TSE9XTiwgcmVsYXRlZFRhcmdldCkp XG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICh0aGlzLl9lbGVtZW50LmRpc2FibGVkIHx8ICQo dGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLkRJU0FCTEVEKSB8fCAhJCh0aGlzLl9t ZW51KS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxu ICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9l bGVtZW50XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQuSElERSwg cmVsYXRlZFRhcmdldClcbiAgICBjb25zdCBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJv bUVsZW1lbnQodGhpcy5fZWxlbWVudClcblxuICAgICQocGFyZW50KS50cmlnZ2VyKGhpZGVFdmVu dClcblxuICAgIGlmIChoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgIHJl dHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBl ci5kZXN0cm95KClcbiAgICB9XG5cbiAgICAkKHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKENsYXNz TmFtZS5TSE9XKVxuICAgICQocGFyZW50KVxuICAgICAgLnRvZ2dsZUNsYXNzKENsYXNzTmFtZS5T SE9XKVxuICAgICAgLnRyaWdnZXIoJC5FdmVudChFdmVudC5ISURERU4sIHJlbGF0ZWRUYXJnZXQp KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwg REFUQV9LRVkpXG4gICAgJCh0aGlzLl9lbGVtZW50KS5vZmYoRVZFTlRfS0VZKVxuICAgIHRoaXMu X2VsZW1lbnQgPSBudWxsXG4gICAgdGhpcy5fbWVudSA9IG51bGxcbiAgICBpZiAodGhpcy5fcG9w cGVyICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgICB0aGlz Ll9wb3BwZXIgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMuX2lu TmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKClcbiAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBu dWxsKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKVxuICAgIH1cbiAgfVxu XG4gIC8vIFByaXZhdGVcblxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgJCh0aGlzLl9l bGVtZW50KS5vbihFdmVudC5DTElDSywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50 RGVmYXVsdCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgdGhpcy50b2dn bGUoKVxuICAgIH0pXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9 IHtcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCxcbiAgICAgIC4uLiQodGhpcy5f ZWxlbWVudCkuZGF0YSgpLFxuICAgICAgLi4uY29uZmlnXG4gICAgfVxuXG4gICAgVXRpbC50eXBl Q2hlY2tDb25maWcoXG4gICAgICBOQU1FLFxuICAgICAgY29uZmlnLFxuICAgICAgdGhpcy5jb25z dHJ1Y3Rvci5EZWZhdWx0VHlwZVxuICAgIClcblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4g IF9nZXRNZW51RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX21lbnUpIHtcbiAgICAgIGNvbnN0 IHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KVxu XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHRoaXMuX21lbnUgPSBwYXJlbnQucXVlcnlT ZWxlY3RvcihTZWxlY3Rvci5NRU5VKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5f bWVudVxuICB9XG5cbiAgX2dldFBsYWNlbWVudCgpIHtcbiAgICBjb25zdCAkcGFyZW50RHJvcGRv d24gPSAkKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSlcbiAgICBsZXQgcGxhY2VtZW50ID0gQXR0 YWNobWVudE1hcC5CT1RUT01cblxuICAgIC8vIEhhbmRsZSBkcm9wdXBcbiAgICBpZiAoJHBhcmVu dERyb3Bkb3duLmhhc0NsYXNzKENsYXNzTmFtZS5EUk9QVVApKSB7XG4gICAgICBwbGFjZW1lbnQg PSBBdHRhY2htZW50TWFwLlRPUFxuICAgICAgaWYgKCQodGhpcy5fbWVudSkuaGFzQ2xhc3MoQ2xh c3NOYW1lLk1FTlVSSUdIVCkpIHtcbiAgICAgICAgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5U T1BFTkRcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCRwYXJlbnREcm9wZG93bi5oYXNDbGFzcyhD bGFzc05hbWUuRFJPUFJJR0hUKSkge1xuICAgICAgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5S SUdIVFxuICAgIH0gZWxzZSBpZiAoJHBhcmVudERyb3Bkb3duLmhhc0NsYXNzKENsYXNzTmFtZS5E Uk9QTEVGVCkpIHtcbiAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuTEVGVFxuICAgIH0g ZWxzZSBpZiAoJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUuTUVOVVJJR0hUKSkge1xu ICAgICAgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5CT1RUT01FTkRcbiAgICB9XG4gICAgcmV0 dXJuIHBsYWNlbWVudFxuICB9XG5cbiAgX2RldGVjdE5hdmJhcigpIHtcbiAgICByZXR1cm4gJCh0 aGlzLl9lbGVtZW50KS5jbG9zZXN0KCcubmF2YmFyJykubGVuZ3RoID4gMFxuICB9XG5cbiAgX2dl dE9mZnNldCgpIHtcbiAgICBjb25zdCBvZmZzZXQgPSB7fVxuXG4gICAgaWYgKHR5cGVvZiB0aGlz Ll9jb25maWcub2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvZmZzZXQuZm4gPSAoZGF0 YSkgPT4ge1xuICAgICAgICBkYXRhLm9mZnNldHMgPSB7XG4gICAgICAgICAgLi4uZGF0YS5vZmZz ZXRzLFxuICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZy5vZmZzZXQoZGF0YS5vZmZzZXRzLCB0aGlz Ll9lbGVtZW50KSB8fCB7fVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAg IH1cbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0Lm9mZnNldCA9IHRoaXMuX2NvbmZpZy5vZmZz ZXRcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfZ2V0UG9wcGVyQ29uZmln KCkge1xuICAgIGNvbnN0IHBvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5f Z2V0UGxhY2VtZW50KCksXG4gICAgICBtb2RpZmllcnM6IHtcbiAgICAgICAgb2Zmc2V0OiB0aGlz Ll9nZXRPZmZzZXQoKSxcbiAgICAgICAgZmxpcDoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRoaXMu X2NvbmZpZy5mbGlwXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZlbnRPdmVyZmxvdzoge1xuICAg ICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAg fVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc2FibGUgUG9wcGVyLmpzIGlmIHdlIGhhdmUg YSBzdGF0aWMgZGlzcGxheVxuICAgIGlmICh0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRp YycpIHtcbiAgICAgIHBvcHBlckNvbmZpZy5tb2RpZmllcnMuYXBwbHlTdHlsZSA9IHtcbiAgICAg ICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAg Li4ucG9wcGVyQ29uZmlnLFxuICAgICAgLi4udGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZ1xuICAg IH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZp Zykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGRhdGEg PSAkKHRoaXMpLmRhdGEoREFUQV9LRVkpXG4gICAgICBjb25zdCBfY29uZmlnID0gdHlwZW9mIGNv bmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsXG5cbiAgICAgIGlmICghZGF0YSkge1xu ICAgICAgICBkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMsIF9jb25maWcpXG4gICAgICAgICQodGhp cykuZGF0YShEQVRBX0tFWSwgZGF0YSlcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25m aWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAn dW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBu YW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10oKVxu ICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgX2NsZWFyTWVudXMoZXZlbnQpIHtcbiAg ICBpZiAoZXZlbnQgJiYgKGV2ZW50LndoaWNoID09PSBSSUdIVF9NT1VTRV9CVVRUT05fV0hJQ0gg fHxcbiAgICAgIGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQud2hpY2ggIT09IFRBQl9L RVlDT0RFKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdG9nZ2xlcyA9IFtd LnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5EQVRBX1RPR0dM RSkpXG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdG9nZ2xlcy5sZW5ndGg7IGkgPCBsZW47 IGkrKykge1xuICAgICAgY29uc3QgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVt ZW50KHRvZ2dsZXNbaV0pXG4gICAgICBjb25zdCBjb250ZXh0ID0gJCh0b2dnbGVzW2ldKS5kYXRh KERBVEFfS0VZKVxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgcmVsYXRl ZFRhcmdldDogdG9nZ2xlc1tpXVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQu dHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBl dmVudFxuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGludWVc biAgICAgIH1cblxuICAgICAgY29uc3QgZHJvcGRvd25NZW51ID0gY29udGV4dC5fbWVudVxuICAg ICAgaWYgKCEkKHBhcmVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpKSB7XG4gICAgICAgIGNv bnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2Ns aWNrJyAmJlxuICAgICAgICAgIC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRh Z05hbWUpIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQud2hpY2ggPT09IFRBQl9L RVlDT0RFKSAmJlxuICAgICAgICAgICQuY29udGFpbnMocGFyZW50LCBldmVudC50YXJnZXQpKSB7 XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpZGVFdmVudCA9ICQu RXZlbnQoRXZlbnQuSElERSwgcmVsYXRlZFRhcmdldClcbiAgICAgICQocGFyZW50KS50cmlnZ2Vy KGhpZGVFdmVudClcbiAgICAgIGlmIChoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtc biAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNo LWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAgIC8vIGVtcHR5IG1vdXNl b3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgICBpZiAoJ29udG91 Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICQoZG9jdW1l bnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcClcbiAgICAg IH1cblxuICAgICAgdG9nZ2xlc1tpXS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFs c2UnKVxuXG4gICAgICBpZiAoY29udGV4dC5fcG9wcGVyKSB7XG4gICAgICAgIGNvbnRleHQuX3Bv cHBlci5kZXN0cm95KClcbiAgICAgIH1cblxuICAgICAgJChkcm9wZG93bk1lbnUpLnJlbW92ZUNs YXNzKENsYXNzTmFtZS5TSE9XKVxuICAgICAgJChwYXJlbnQpXG4gICAgICAgIC5yZW1vdmVDbGFz cyhDbGFzc05hbWUuU0hPVylcbiAgICAgICAgLnRyaWdnZXIoJC5FdmVudChFdmVudC5ISURERU4s IHJlbGF0ZWRUYXJnZXQpKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBfZ2V0UGFyZW50RnJvbUVs ZW1lbnQoZWxlbWVudCkge1xuICAgIGxldCBwYXJlbnRcbiAgICBjb25zdCBzZWxlY3RvciA9IFV0 aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KVxuXG4gICAgaWYgKHNlbGVjdG9yKSB7 XG4gICAgICBwYXJlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKVxuICAgIH1c blxuICAgIHJldHVybiBwYXJlbnQgfHwgZWxlbWVudC5wYXJlbnROb2RlXG4gIH1cblxuICAvLyBl c2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBzdGF0aWMgX2RhdGFBcGlLZXlk b3duSGFuZGxlcihldmVudCkge1xuICAgIC8vIElmIG5vdCBpbnB1dC90ZXh0YXJlYTpcbiAgICAv LyAgLSBBbmQgbm90IGEga2V5IGluIFJFR0VYUF9LRVlET1dOID0+IG5vdCBhIGRyb3Bkb3duIGNv bW1hbmRcbiAgICAvLyBJZiBpbnB1dC90ZXh0YXJlYTpcbiAgICAvLyAgLSBJZiBzcGFjZSBrZXkg PT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vICAtIElmIGtleSBpcyBvdGhlciB0aGFu IGVzY2FwZVxuICAgIC8vICAgIC0gSWYga2V5IGlzIG5vdCB1cCBvciBkb3duID0+IG5vdCBhIGRy b3Bkb3duIGNvbW1hbmRcbiAgICAvLyAgICAtIElmIHRyaWdnZXIgaW5zaWRlIHRoZSBtZW51ID0+ IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChl dmVudC50YXJnZXQudGFnTmFtZSlcbiAgICAgID8gZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNP REUgfHwgZXZlbnQud2hpY2ggIT09IEVTQ0FQRV9LRVlDT0RFICYmXG4gICAgICAoZXZlbnQud2hp Y2ggIT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBldmVudC53aGljaCAhPT0gQVJST1dfVVBfS0VZ Q09ERSB8fFxuICAgICAgICAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChTZWxlY3Rvci5NRU5VKS5s ZW5ndGgpIDogIVJFR0VYUF9LRVlET1dOLnRlc3QoZXZlbnQud2hpY2gpKSB7XG4gICAgICByZXR1 cm5cbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZlbnQuc3RvcFBy b3BhZ2F0aW9uKClcblxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICQodGhpcykuaGFzQ2xhc3Mo Q2xhc3NOYW1lLkRJU0FCTEVEKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qg cGFyZW50ICAgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcylcbiAgICBjb25z dCBpc0FjdGl2ZSA9ICQocGFyZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVylcblxuICAgIGlm ICghaXNBY3RpdmUgJiYgZXZlbnQud2hpY2ggPT09IEVTQ0FQRV9LRVlDT0RFKSB7XG4gICAgICBy ZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzQWN0aXZlIHx8IGlzQWN0aXZlICYmIChldmVudC53 aGljaCA9PT0gRVNDQVBFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNPREUp KSB7XG4gICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEVTQ0FQRV9LRVlDT0RFKSB7XG4gICAgICAg IGNvbnN0IHRvZ2dsZSA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkRBVEFfVE9HR0xF KVxuICAgICAgICAkKHRvZ2dsZSkudHJpZ2dlcignZm9jdXMnKVxuICAgICAgfVxuXG4gICAgICAk KHRoaXMpLnRyaWdnZXIoJ2NsaWNrJylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0 IGl0ZW1zID0gW10uc2xpY2UuY2FsbChwYXJlbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5W SVNJQkxFX0lURU1TKSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICQoaXRlbSkuaXMoJzp2aXNp YmxlJykpXG5cbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAg ICB9XG5cbiAgICBsZXQgaW5kZXggPSBpdGVtcy5pbmRleE9mKGV2ZW50LnRhcmdldClcblxuICAg IGlmIChldmVudC53aGljaCA9PT0gQVJST1dfVVBfS0VZQ09ERSAmJiBpbmRleCA+IDApIHsgLy8g VXBcbiAgICAgIGluZGV4LS1cbiAgICB9XG5cbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IEFSUk9X X0RPV05fS0VZQ09ERSAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHsgLy8gRG93blxuICAg ICAgaW5kZXgrK1xuICAgIH1cblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIGluZGV4ID0g MFxuICAgIH1cblxuICAgIGl0ZW1zW2luZGV4XS5mb2N1cygpXG4gIH1cbn1cblxuLyoqXG4gKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS1cbiAqL1xuXG4kKGRvY3VtZW50KVxuICAub24oRXZlbnQuS0VZRE9XTl9EQVRBX0FQSSwg U2VsZWN0b3IuREFUQV9UT0dHTEUsIERyb3Bkb3duLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG4g IC5vbihFdmVudC5LRVlET1dOX0RBVEFfQVBJLCBTZWxlY3Rvci5NRU5VLCBEcm9wZG93bi5fZGF0 YUFwaUtleWRvd25IYW5kbGVyKVxuICAub24oYCR7RXZlbnQuQ0xJQ0tfREFUQV9BUEl9ICR7RXZl bnQuS0VZVVBfREFUQV9BUEl9YCwgRHJvcGRvd24uX2NsZWFyTWVudXMpXG4gIC5vbihFdmVudC5D TElDS19EQVRBX0FQSSwgU2VsZWN0b3IuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xu ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxu ICAgIERyb3Bkb3duLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKHRoaXMpLCAndG9nZ2xlJylcbiAg fSlcbiAgLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5GT1JNX0NISUxELCAoZSkg PT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcblxuLyoqXG4gKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuJC5mbltOQU1FXSA9 IERyb3Bkb3duLl9qUXVlcnlJbnRlcmZhY2VcbiQuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBEcm9w ZG93blxuJC5mbltOQU1FXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAkLmZuW05BTUVdID0gSlFV RVJZX05PX0NPTkZMSUNUXG4gIHJldHVybiBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlXG59XG5c blxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c biAqIEJvb3RzdHJhcCAodjQuNC4xKTogbW9kYWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAo aHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4g KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSdcbmltcG9y dCBVdGlsIGZyb20gJy4vdXRpbCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0 YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSAgICAgICAgICAgICAg ID0gJ21vZGFsJ1xuY29uc3QgVkVSU0lPTiAgICAgICAgICAgID0gJzQuNC4xJ1xuY29uc3QgREFU QV9LRVkgICAgICAgICAgID0gJ2JzLm1vZGFsJ1xuY29uc3QgRVZFTlRfS0VZICAgICAgICAgID0g YC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSAgICAgICA9ICcuZGF0YS1hcGknXG5j b25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW05BTUVdXG5jb25zdCBFU0NBUEVfS0VZQ09E RSAgICAgPSAyNyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBFc2NhcGUgKEVzYykg a2V5XG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGJhY2tkcm9wIDogdHJ1ZSxcbiAga2V5Ym9hcmQg OiB0cnVlLFxuICBmb2N1cyAgICA6IHRydWUsXG4gIHNob3cgICAgIDogdHJ1ZVxufVxuXG5jb25z dCBEZWZhdWx0VHlwZSA9IHtcbiAgYmFja2Ryb3AgOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGtl eWJvYXJkIDogJ2Jvb2xlYW4nLFxuICBmb2N1cyAgICA6ICdib29sZWFuJyxcbiAgc2hvdyAgICAg OiAnYm9vbGVhbidcbn1cblxuY29uc3QgRXZlbnQgPSB7XG4gIEhJREUgICAgICAgICAgICAgIDog YGhpZGUke0VWRU5UX0tFWX1gLFxuICBISURFX1BSRVZFTlRFRCAgICA6IGBoaWRlUHJldmVudGVk JHtFVkVOVF9LRVl9YCxcbiAgSElEREVOICAgICAgICAgICAgOiBgaGlkZGVuJHtFVkVOVF9LRVl9 YCxcbiAgU0hPVyAgICAgICAgICAgICAgOiBgc2hvdyR7RVZFTlRfS0VZfWAsXG4gIFNIT1dOICAg ICAgICAgICAgIDogYHNob3duJHtFVkVOVF9LRVl9YCxcbiAgRk9DVVNJTiAgICAgICAgICAgOiBg Zm9jdXNpbiR7RVZFTlRfS0VZfWAsXG4gIFJFU0laRSAgICAgICAgICAgIDogYHJlc2l6ZSR7RVZF TlRfS0VZfWAsXG4gIENMSUNLX0RJU01JU1MgICAgIDogYGNsaWNrLmRpc21pc3Mke0VWRU5UX0tF WX1gLFxuICBLRVlET1dOX0RJU01JU1MgICA6IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1g LFxuICBNT1VTRVVQX0RJU01JU1MgICA6IGBtb3VzZXVwLmRpc21pc3Mke0VWRU5UX0tFWX1gLFxu ICBNT1VTRURPV05fRElTTUlTUyA6IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWAsXG4g IENMSUNLX0RBVEFfQVBJICAgIDogYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxu fVxuXG5jb25zdCBDbGFzc05hbWUgPSB7XG4gIFNDUk9MTEFCTEUgICAgICAgICA6ICdtb2RhbC1k aWFsb2ctc2Nyb2xsYWJsZScsXG4gIFNDUk9MTEJBUl9NRUFTVVJFUiA6ICdtb2RhbC1zY3JvbGxi YXItbWVhc3VyZScsXG4gIEJBQ0tEUk9QICAgICAgICAgICA6ICdtb2RhbC1iYWNrZHJvcCcsXG4g IE9QRU4gICAgICAgICAgICAgICA6ICdtb2RhbC1vcGVuJyxcbiAgRkFERSAgICAgICAgICAgICAg IDogJ2ZhZGUnLFxuICBTSE9XICAgICAgICAgICAgICAgOiAnc2hvdycsXG4gIFNUQVRJQyAgICAg ICAgICAgICA6ICdtb2RhbC1zdGF0aWMnXG59XG5cbmNvbnN0IFNlbGVjdG9yID0ge1xuICBESUFM T0cgICAgICAgICA6ICcubW9kYWwtZGlhbG9nJyxcbiAgTU9EQUxfQk9EWSAgICAgOiAnLm1vZGFs LWJvZHknLFxuICBEQVRBX1RPR0dMRSAgICA6ICdbZGF0YS10b2dnbGU9XCJtb2RhbFwiXScsXG4g IERBVEFfRElTTUlTUyAgIDogJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsXG4gIEZJWEVEX0NP TlRFTlQgIDogJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10 b3AnLFxuICBTVElDS1lfQ09OVEVOVCA6ICcuc3RpY2t5LXRvcCdcbn1cblxuLyoqXG4gKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICov XG5cbmNsYXNzIE1vZGFsIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAg dGhpcy5fY29uZmlnICAgICAgICAgICAgICA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAg dGhpcy5fZWxlbWVudCAgICAgICAgICAgICA9IGVsZW1lbnRcbiAgICB0aGlzLl9kaWFsb2cgICAg ICAgICAgICAgID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkRJQUxPRylcbiAgICB0 aGlzLl9iYWNrZHJvcCAgICAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuX2lzU2hvd24gICAgICAg ICAgICAgPSBmYWxzZVxuICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nICAgPSBmYWxzZVxuICAg IHRoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZVxuICAgIHRoaXMuX2lzVHJhbnNpdGlv bmluZyAgICAgPSBmYWxzZVxuICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoICAgICAgPSAwXG4gIH1c blxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBW RVJTSU9OXG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1 bHRcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAg cmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFy Z2V0KVxuICB9XG5cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hv d24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAg ICBpZiAoJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSkpIHtcbiAgICAg IHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZl bnQgPSAkLkV2ZW50KEV2ZW50LlNIT1csIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KVxu XG4gICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudClcblxuICAgIGlmICh0aGlz Ll9pc1Nob3duIHx8IHNob3dFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgcmV0 dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcblxuICAgIHRoaXMuX2NoZWNr U2Nyb2xsYmFyKClcbiAgICB0aGlzLl9zZXRTY3JvbGxiYXIoKVxuXG4gICAgdGhpcy5fYWRqdXN0 RGlhbG9nKClcblxuICAgIHRoaXMuX3NldEVzY2FwZUV2ZW50KClcbiAgICB0aGlzLl9zZXRSZXNp emVFdmVudCgpXG5cbiAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKFxuICAgICAgRXZlbnQuQ0xJQ0tf RElTTUlTUyxcbiAgICAgIFNlbGVjdG9yLkRBVEFfRElTTUlTUyxcbiAgICAgIChldmVudCkgPT4g dGhpcy5oaWRlKGV2ZW50KVxuICAgIClcblxuICAgICQodGhpcy5fZGlhbG9nKS5vbihFdmVudC5N T1VTRURPV05fRElTTUlTUywgKCkgPT4ge1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoRXZl bnQuTU9VU0VVUF9ESVNNSVNTLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCQoZXZlbnQudGFy Z2V0KS5pcyh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgICAgIHRoaXMuX2lnbm9yZUJhY2tkcm9w Q2xpY2sgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHRoaXMuX3No b3dCYWNrZHJvcCgoKSA9PiB0aGlzLl9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSlcbiAgfVxu XG4gIGhpZGUoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnRE ZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFu c2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBoaWRlRXZlbnQg PSAkLkV2ZW50KEV2ZW50LkhJREUpXG5cbiAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoaGlk ZUV2ZW50KVxuXG4gICAgaWYgKCF0aGlzLl9pc1Nob3duIHx8IGhpZGVFdmVudC5pc0RlZmF1bHRQ cmV2ZW50ZWQoKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9 IGZhbHNlXG4gICAgY29uc3QgdHJhbnNpdGlvbiA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3Mo Q2xhc3NOYW1lLkZBREUpXG5cbiAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgdGhpcy5faXNU cmFuc2l0aW9uaW5nID0gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMuX3NldEVzY2FwZUV2ZW50KClc biAgICB0aGlzLl9zZXRSZXNpemVFdmVudCgpXG5cbiAgICAkKGRvY3VtZW50KS5vZmYoRXZlbnQu Rk9DVVNJTilcblxuICAgICQodGhpcy5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLlNI T1cpXG5cbiAgICAkKHRoaXMuX2VsZW1lbnQpLm9mZihFdmVudC5DTElDS19ESVNNSVNTKVxuICAg ICQodGhpcy5fZGlhbG9nKS5vZmYoRXZlbnQuTU9VU0VET1dOX0RJU01JU1MpXG5cblxuICAgIGlm ICh0cmFuc2l0aW9uKSB7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uRHVyYXRpb24gID0gVXRpbC5n ZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KVxuXG4gICAgICAk KHRoaXMuX2VsZW1lbnQpXG4gICAgICAgIC5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgKGV2ZW50 KSA9PiB0aGlzLl9oaWRlTW9kYWwoZXZlbnQpKVxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25F bmQodHJhbnNpdGlvbkR1cmF0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9oaWRlTW9k YWwoKVxuICAgIH1cbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgW3dpbmRvdywgdGhpcy5fZWxl bWVudCwgdGhpcy5fZGlhbG9nXVxuICAgICAgLmZvckVhY2goKGh0bWxFbGVtZW50KSA9PiAkKGh0 bWxFbGVtZW50KS5vZmYoRVZFTlRfS0VZKSlcblxuICAgIC8qKlxuICAgICAqIGBkb2N1bWVudGAg aGFzIDIgZXZlbnRzIGBFdmVudC5GT0NVU0lOYCBhbmQgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYFxu ICAgICAqIERvIG5vdCBtb3ZlIGBkb2N1bWVudGAgaW4gYGh0bWxFbGVtZW50c2AgYXJyYXlcbiAg ICAgKiBJdCB3aWxsIHJlbW92ZSBgRXZlbnQuQ0xJQ0tfREFUQV9BUElgIGV2ZW50IHRoYXQgc2hv dWxkIHJlbWFpblxuICAgICAqL1xuICAgICQoZG9jdW1lbnQpLm9mZihFdmVudC5GT0NVU0lOKVxu XG4gICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKVxuXG4gICAgdGhpcy5f Y29uZmlnICAgICAgICAgICAgICA9IG51bGxcbiAgICB0aGlzLl9lbGVtZW50ICAgICAgICAgICAg ID0gbnVsbFxuICAgIHRoaXMuX2RpYWxvZyAgICAgICAgICAgICAgPSBudWxsXG4gICAgdGhpcy5f YmFja2Ryb3AgICAgICAgICAgICA9IG51bGxcbiAgICB0aGlzLl9pc1Nob3duICAgICAgICAgICAg ID0gbnVsbFxuICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nICAgPSBudWxsXG4gICAgdGhpcy5f aWdub3JlQmFja2Ryb3BDbGljayA9IG51bGxcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgICAg ID0gbnVsbFxuICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoICAgICAgPSBudWxsXG4gIH1cblxuICBo YW5kbGVVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKClcbiAgfVxuXG4gIC8vIFBy aXZhdGVcblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4u LkRlZmF1bHQsXG4gICAgICAuLi5jb25maWdcbiAgICB9XG4gICAgVXRpbC50eXBlQ2hlY2tDb25m aWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxu ICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmJh Y2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgY29uc3QgaGlkZUV2ZW50UHJldmVudGVkID0g JC5FdmVudChFdmVudC5ISURFX1BSRVZFTlRFRClcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50 cmlnZ2VyKGhpZGVFdmVudFByZXZlbnRlZClcbiAgICAgIGlmIChoaWRlRXZlbnRQcmV2ZW50ZWQu ZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhp cy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZS5TVEFUSUMpXG5cbiAgICAgIGNvbnN0 IG1vZGFsVHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9t RWxlbWVudCh0aGlzLl9lbGVtZW50KVxuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGls LlRSQU5TSVRJT05fRU5ELCAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0 LnJlbW92ZShDbGFzc05hbWUuU1RBVElDKVxuICAgICAgfSlcbiAgICAgICAgLmVtdWxhdGVUcmFu c2l0aW9uRW5kKG1vZGFsVHJhbnNpdGlvbkR1cmF0aW9uKVxuICAgICAgdGhpcy5fZWxlbWVudC5m b2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfVxuICB9XG5cbiAg X3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uID0gJCh0 aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSlcbiAgICBjb25zdCBtb2RhbEJv ZHkgPSB0aGlzLl9kaWFsb2cgPyB0aGlzLl9kaWFsb2cucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5N T0RBTF9CT0RZKSA6IG51bGxcblxuICAgIGlmICghdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlIHx8 XG4gICAgICAgIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVN RU5UX05PREUpIHtcbiAgICAgIC8vIERvbid0IG1vdmUgbW9kYWwncyBET00gcG9zaXRpb25cbiAg ICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAg ICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgdGhpcy5fZWxlbWVu dC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0 dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpXG5cbiAgICBpZiAoJCh0aGlzLl9kaWFsb2cpLmhh c0NsYXNzKENsYXNzTmFtZS5TQ1JPTExBQkxFKSAmJiBtb2RhbEJvZHkpIHtcbiAgICAgIG1vZGFs Qm9keS5zY3JvbGxUb3AgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2Ny b2xsVG9wID0gMFxuICAgIH1cblxuICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICBVdGlsLnJl Zmxvdyh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xh c3MoQ2xhc3NOYW1lLlNIT1cpXG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAg ICB0aGlzLl9lbmZvcmNlRm9jdXMoKVxuICAgIH1cblxuICAgIGNvbnN0IHNob3duRXZlbnQgPSAk LkV2ZW50KEV2ZW50LlNIT1dOLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSlcblxuICAg IGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25m aWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gICAgICB9XG4gICAg ICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50 cmlnZ2VyKHNob3duRXZlbnQpXG4gICAgfVxuXG4gICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAg IGNvbnN0IHRyYW5zaXRpb25EdXJhdGlvbiAgPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZy b21FbGVtZW50KHRoaXMuX2RpYWxvZylcblxuICAgICAgJCh0aGlzLl9kaWFsb2cpXG4gICAgICAg IC5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgdHJhbnNpdGlvbkNvbXBsZXRlKVxuICAgICAgICAu ZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKVxuICAgIH0gZWxzZSB7XG4g ICAgICB0cmFuc2l0aW9uQ29tcGxldGUoKVxuICAgIH1cbiAgfVxuXG4gIF9lbmZvcmNlRm9jdXMo KSB7XG4gICAgJChkb2N1bWVudClcbiAgICAgIC5vZmYoRXZlbnQuRk9DVVNJTikgLy8gR3VhcmQg YWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgICAub24oRXZlbnQuRk9DVVNJTiwgKGV2 ZW50KSA9PiB7XG4gICAgICAgIGlmIChkb2N1bWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmXG4gICAg ICAgICAgICB0aGlzLl9lbGVtZW50ICE9PSBldmVudC50YXJnZXQgJiZcbiAgICAgICAgICAgICQo dGhpcy5fZWxlbWVudCkuaGFzKGV2ZW50LnRhcmdldCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAg ICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBf c2V0RXNjYXBlRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgdGhpcy5fY29uZmln LmtleWJvYXJkKSB7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50LktFWURPV05fRElT TUlTUywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tF WUNPREUpIHtcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKClcbiAg ICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1Nob3duKSB7XG4gICAg ICAkKHRoaXMuX2VsZW1lbnQpLm9mZihFdmVudC5LRVlET1dOX0RJU01JU1MpXG4gICAgfVxuICB9 XG5cbiAgX3NldFJlc2l6ZUV2ZW50KCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAg ICAkKHdpbmRvdykub24oRXZlbnQuUkVTSVpFLCAoZXZlbnQpID0+IHRoaXMuaGFuZGxlVXBkYXRl KGV2ZW50KSlcbiAgICB9IGVsc2Uge1xuICAgICAgJCh3aW5kb3cpLm9mZihFdmVudC5SRVNJWkUp XG4gICAgfVxuICB9XG5cbiAgX2hpZGVNb2RhbCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxl LmRpc3BsYXkgPSAnbm9uZSdcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1o aWRkZW4nLCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1v ZGFsJylcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX3Nob3dC YWNrZHJvcCgoKSA9PiB7XG4gICAgICAkKGRvY3VtZW50LmJvZHkpLnJlbW92ZUNsYXNzKENsYXNz TmFtZS5PUEVOKVxuICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpXG4gICAgICB0aGlzLl9y ZXNldFNjcm9sbGJhcigpXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQuSElE REVOKVxuICAgIH0pXG4gIH1cblxuICBfcmVtb3ZlQmFja2Ryb3AoKSB7XG4gICAgaWYgKHRoaXMu X2JhY2tkcm9wKSB7XG4gICAgICAkKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmUoKVxuICAgICAgdGhp cy5fYmFja2Ryb3AgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgX3Nob3dCYWNrZHJvcChjYWxsYmFj aykge1xuICAgIGNvbnN0IGFuaW1hdGUgPSAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNz TmFtZS5GQURFKVxuICAgICAgPyBDbGFzc05hbWUuRkFERSA6ICcnXG5cbiAgICBpZiAodGhpcy5f aXNTaG93biAmJiB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgIHRoaXMuX2JhY2tkcm9w ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIHRoaXMuX2JhY2tkcm9wLmNs YXNzTmFtZSA9IENsYXNzTmFtZS5CQUNLRFJPUFxuXG4gICAgICBpZiAoYW5pbWF0ZSkge1xuICAg ICAgICB0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKGFuaW1hdGUpXG4gICAgICB9XG5cbiAg ICAgICQodGhpcy5fYmFja2Ryb3ApLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpXG5cbiAgICAgICQo dGhpcy5fZWxlbWVudCkub24oRXZlbnQuQ0xJQ0tfRElTTUlTUywgKGV2ZW50KSA9PiB7XG4gICAg ICAgIGlmICh0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgdGhpcy5faWdu b3JlQmFja2Ryb3BDbGljayA9IGZhbHNlXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAg ICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAg ICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJh bnNpdGlvbigpXG4gICAgICB9KVxuXG4gICAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgICBVdGls LnJlZmxvdyh0aGlzLl9iYWNrZHJvcClcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9iYWNrZHJv cCkuYWRkQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpXG5cbiAgICAgIGlmICghY2FsbGJhY2spIHtcbiAg ICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghYW5pbWF0ZSkge1xuICAgICAgICBj YWxsYmFjaygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBiYWNrZHJv cFRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1l bnQodGhpcy5fYmFja2Ryb3ApXG5cbiAgICAgICQodGhpcy5fYmFja2Ryb3ApXG4gICAgICAgIC5v bmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY2FsbGJhY2spXG4gICAgICAgIC5lbXVsYXRlVHJhbnNp dGlvbkVuZChiYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbilcbiAgICB9IGVsc2UgaWYgKCF0aGlz Ll9pc1Nob3duICYmIHRoaXMuX2JhY2tkcm9wKSB7XG4gICAgICAkKHRoaXMuX2JhY2tkcm9wKS5y ZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVylcblxuICAgICAgY29uc3QgY2FsbGJhY2tSZW1vdmUg PSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUJhY2tkcm9wKClcbiAgICAgICAgaWYgKGNh bGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAg ICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAg ICAgICBjb25zdCBiYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlv bkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApXG5cbiAgICAgICAgJCh0aGlzLl9i YWNrZHJvcClcbiAgICAgICAgICAub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNhbGxiYWNrUmVt b3ZlKVxuICAgICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChiYWNrZHJvcFRyYW5zaXRpb25E dXJhdGlvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrUmVtb3ZlKClcbiAgICAg IH1cbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxu ICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJl IHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAvLyB0b2RvIChmYXQpOiB0aGVz ZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmYWN0b3JlZCBvdXQgb2YgbW9kYWwuanNcbiAgLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLVxuXG4gIF9hZGp1c3REaWFsb2coKSB7XG4gICAgY29uc3QgaXNNb2RhbE92ZXJm bG93aW5nID1cbiAgICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9j dW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgaWYgKCF0aGlzLl9pc0JvZHlPdmVyZmxv d2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUu cGFkZGluZ0xlZnQgPSBgJHt0aGlzLl9zY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG5cbiAgICBp ZiAodGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAg ICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHt0aGlzLl9zY3JvbGxiYXJX aWR0aH1weGBcbiAgICB9XG4gIH1cblxuICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICB0aGlz Ll9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJydcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxl LnBhZGRpbmdSaWdodCA9ICcnXG4gIH1cblxuICBfY2hlY2tTY3JvbGxiYXIoKSB7XG4gICAgY29u c3QgcmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICB0aGlz Ll9pc0JvZHlPdmVyZmxvd2luZyA9IHJlY3QubGVmdCArIHJlY3QucmlnaHQgPCB3aW5kb3cuaW5u ZXJXaWR0aFxuICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gdGhpcy5fZ2V0U2Nyb2xsYmFyV2lk dGgoKVxuICB9XG5cbiAgX3NldFNjcm9sbGJhcigpIHtcbiAgICBpZiAodGhpcy5faXNCb2R5T3Zl cmZsb3dpbmcpIHtcbiAgICAgIC8vIE5vdGU6IERPTU5vZGUuc3R5bGUucGFkZGluZ1JpZ2h0IHJl dHVybnMgdGhlIGFjdHVhbCB2YWx1ZSBvciAnJyBpZiBub3Qgc2V0XG4gICAgICAvLyAgIHdoaWxl ICQoRE9NTm9kZSkuY3NzKCdwYWRkaW5nLXJpZ2h0JykgcmV0dXJucyB0aGUgY2FsY3VsYXRlZCB2 YWx1ZSBvciAwIGlmIG5vdCBzZXRcbiAgICAgIGNvbnN0IGZpeGVkQ29udGVudCA9IFtdLnNsaWNl LmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5GSVhFRF9DT05URU5UKSlc biAgICAgIGNvbnN0IHN0aWNreUNvbnRlbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5 U2VsZWN0b3JBbGwoU2VsZWN0b3IuU1RJQ0tZX0NPTlRFTlQpKVxuXG4gICAgICAvLyBBZGp1c3Qg Zml4ZWQgY29udGVudCBwYWRkaW5nXG4gICAgICAkKGZpeGVkQ29udGVudCkuZWFjaCgoaW5kZXgs IGVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgYWN0dWFsUGFkZGluZyA9IGVsZW1lbnQuc3R5 bGUucGFkZGluZ1JpZ2h0XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRQYWRkaW5nID0gJChlbGVt ZW50KS5jc3MoJ3BhZGRpbmctcmlnaHQnKVxuICAgICAgICAkKGVsZW1lbnQpXG4gICAgICAgICAg LmRhdGEoJ3BhZGRpbmctcmlnaHQnLCBhY3R1YWxQYWRkaW5nKVxuICAgICAgICAgIC5jc3MoJ3Bh ZGRpbmctcmlnaHQnLCBgJHtwYXJzZUZsb2F0KGNhbGN1bGF0ZWRQYWRkaW5nKSArIHRoaXMuX3Nj cm9sbGJhcldpZHRofXB4YClcbiAgICAgIH0pXG5cbiAgICAgIC8vIEFkanVzdCBzdGlja3kgY29u dGVudCBtYXJnaW5cbiAgICAgICQoc3RpY2t5Q29udGVudCkuZWFjaCgoaW5kZXgsIGVsZW1lbnQp ID0+IHtcbiAgICAgICAgY29uc3QgYWN0dWFsTWFyZ2luID0gZWxlbWVudC5zdHlsZS5tYXJnaW5S aWdodFxuICAgICAgICBjb25zdCBjYWxjdWxhdGVkTWFyZ2luID0gJChlbGVtZW50KS5jc3MoJ21h cmdpbi1yaWdodCcpXG4gICAgICAgICQoZWxlbWVudClcbiAgICAgICAgICAuZGF0YSgnbWFyZ2lu LXJpZ2h0JywgYWN0dWFsTWFyZ2luKVxuICAgICAgICAgIC5jc3MoJ21hcmdpbi1yaWdodCcsIGAk e3BhcnNlRmxvYXQoY2FsY3VsYXRlZE1hcmdpbikgLSB0aGlzLl9zY3JvbGxiYXJXaWR0aH1weGAp XG4gICAgICB9KVxuXG4gICAgICAvLyBBZGp1c3QgYm9keSBwYWRkaW5nXG4gICAgICBjb25zdCBh Y3R1YWxQYWRkaW5nID0gZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHRcbiAgICAgIGNv bnN0IGNhbGN1bGF0ZWRQYWRkaW5nID0gJChkb2N1bWVudC5ib2R5KS5jc3MoJ3BhZGRpbmctcmln aHQnKVxuICAgICAgJChkb2N1bWVudC5ib2R5KVxuICAgICAgICAuZGF0YSgncGFkZGluZy1yaWdo dCcsIGFjdHVhbFBhZGRpbmcpXG4gICAgICAgIC5jc3MoJ3BhZGRpbmctcmlnaHQnLCBgJHtwYXJz ZUZsb2F0KGNhbGN1bGF0ZWRQYWRkaW5nKSArIHRoaXMuX3Njcm9sbGJhcldpZHRofXB4YClcbiAg ICB9XG5cbiAgICAkKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKENsYXNzTmFtZS5PUEVOKVxuICB9 XG5cbiAgX3Jlc2V0U2Nyb2xsYmFyKCkge1xuICAgIC8vIFJlc3RvcmUgZml4ZWQgY29udGVudCBw YWRkaW5nXG4gICAgY29uc3QgZml4ZWRDb250ZW50ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5x dWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkZJWEVEX0NPTlRFTlQpKVxuICAgICQoZml4ZWRDb250 ZW50KS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgcGFkZGluZyA9ICQo ZWxlbWVudCkuZGF0YSgncGFkZGluZy1yaWdodCcpXG4gICAgICAkKGVsZW1lbnQpLnJlbW92ZURh dGEoJ3BhZGRpbmctcmlnaHQnKVxuICAgICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBw YWRkaW5nID8gcGFkZGluZyA6ICcnXG4gICAgfSlcblxuICAgIC8vIFJlc3RvcmUgc3RpY2t5IGNv bnRlbnRcbiAgICBjb25zdCBlbGVtZW50cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlT ZWxlY3RvckFsbChgJHtTZWxlY3Rvci5TVElDS1lfQ09OVEVOVH1gKSlcbiAgICAkKGVsZW1lbnRz KS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbWFyZ2luID0gJChlbGVt ZW50KS5kYXRhKCdtYXJnaW4tcmlnaHQnKVxuICAgICAgaWYgKHR5cGVvZiBtYXJnaW4gIT09ICd1 bmRlZmluZWQnKSB7XG4gICAgICAgICQoZWxlbWVudCkuY3NzKCdtYXJnaW4tcmlnaHQnLCBtYXJn aW4pLnJlbW92ZURhdGEoJ21hcmdpbi1yaWdodCcpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8v IFJlc3RvcmUgYm9keSBwYWRkaW5nXG4gICAgY29uc3QgcGFkZGluZyA9ICQoZG9jdW1lbnQuYm9k eSkuZGF0YSgncGFkZGluZy1yaWdodCcpXG4gICAgJChkb2N1bWVudC5ib2R5KS5yZW1vdmVEYXRh KCdwYWRkaW5nLXJpZ2h0JylcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCA9 IHBhZGRpbmcgPyBwYWRkaW5nIDogJydcbiAgfVxuXG4gIF9nZXRTY3JvbGxiYXJXaWR0aCgpIHsg Ly8gdGh4IGQud2Fsc2hcbiAgICBjb25zdCBzY3JvbGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdkaXYnKVxuICAgIHNjcm9sbERpdi5jbGFzc05hbWUgPSBDbGFzc05hbWUuU0NST0xMQkFS X01FQVNVUkVSXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JvbGxEaXYpXG4gICAg Y29uc3Qgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku d2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGhcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNo aWxkKHNjcm9sbERpdilcbiAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGhcbiAgfVxuXG4gIC8vIFN0 YXRpY1xuXG4gIHN0YXRpYyBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZywgcmVsYXRlZFRhcmdldCkg e1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGRhdGEgPSAk KHRoaXMpLmRhdGEoREFUQV9LRVkpXG4gICAgICBjb25zdCBfY29uZmlnID0ge1xuICAgICAgICAu Li5EZWZhdWx0LFxuICAgICAgICAuLi4kKHRoaXMpLmRhdGEoKSxcbiAgICAgICAgLi4udHlwZW9m IGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge31cbiAgICAgIH1cblxu ICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgTW9kYWwodGhpcywgX2NvbmZp ZylcbiAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZLCBkYXRhKVxuICAgICAgfVxuXG4gICAg ICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBk YXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVF cnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG4gICAgICAg IGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KVxuICAgICAgfSBlbHNlIGlmIChfY29uZmlnLnNo b3cpIHtcbiAgICAgICAgZGF0YS5zaG93KHJlbGF0ZWRUYXJnZXQpXG4gICAgICB9XG4gICAgfSlc biAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50 YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbiQoZG9jdW1lbnQpLm9uKEV2ZW50LkNM SUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4g IGxldCB0YXJnZXRcbiAgY29uc3Qgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1l bnQodGhpcylcblxuICBpZiAoc2VsZWN0b3IpIHtcbiAgICB0YXJnZXQgPSBkb2N1bWVudC5xdWVy eVNlbGVjdG9yKHNlbGVjdG9yKVxuICB9XG5cbiAgY29uc3QgY29uZmlnID0gJCh0YXJnZXQpLmRh dGEoREFUQV9LRVkpXG4gICAgPyAndG9nZ2xlJyA6IHtcbiAgICAgIC4uLiQodGFyZ2V0KS5kYXRh KCksXG4gICAgICAuLi4kKHRoaXMpLmRhdGEoKVxuICAgIH1cblxuICBpZiAodGhpcy50YWdOYW1l ID09PSAnQScgfHwgdGhpcy50YWdOYW1lID09PSAnQVJFQScpIHtcbiAgICBldmVudC5wcmV2ZW50 RGVmYXVsdCgpXG4gIH1cblxuICBjb25zdCAkdGFyZ2V0ID0gJCh0YXJnZXQpLm9uZShFdmVudC5T SE9XLCAoc2hvd0V2ZW50KSA9PiB7XG4gICAgaWYgKHNob3dFdmVudC5pc0RlZmF1bHRQcmV2ZW50 ZWQoKSkge1xuICAgICAgLy8gT25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3 aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgJHRhcmdl dC5vbmUoRXZlbnQuSElEREVOLCAoKSA9PiB7XG4gICAgICBpZiAoJCh0aGlzKS5pcygnOnZpc2li bGUnKSkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4g IE1vZGFsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKHRhcmdldCksIGNvbmZpZywgdGhpcylcbn0p XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LVxuICovXG5cbiQuZm5bTkFNRV0gPSBNb2RhbC5falF1ZXJ5SW50ZXJmYWNlXG4kLmZuW05BTUVd LkNvbnN0cnVjdG9yID0gTW9kYWxcbiQuZm5bTkFNRV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAg JC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICByZXR1cm4gTW9kYWwuX2pRdWVyeUlu dGVyZmFjZVxufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLVxuICogQm9vdHN0cmFwICh2NC40LjEpOiB0b29scy9zYW5pdGl6ZXIuanNcbiAqIExp Y2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2Iv bWFzdGVyL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IHVyaUF0 dHJzID0gW1xuICAnYmFja2dyb3VuZCcsXG4gICdjaXRlJyxcbiAgJ2hyZWYnLFxuICAnaXRlbXR5 cGUnLFxuICAnbG9uZ2Rlc2MnLFxuICAncG9zdGVyJyxcbiAgJ3NyYycsXG4gICd4bGluazpocmVm J1xuXVxuXG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2lc blxuZXhwb3J0IGNvbnN0IERlZmF1bHRXaGl0ZWxpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1 dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFz cycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0s XG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxu ICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGl2OiBbXSxc biAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4g IGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywg J2FsdCcsICd0aXRsZScsICd3aWR0aCcsICdoZWlnaHQnXSxcbiAgbGk6IFtdLFxuICBvbDogW10s XG4gIHA6IFtdLFxuICBwcmU6IFtdLFxuICBzOiBbXSxcbiAgc21hbGw6IFtdLFxuICBzcGFuOiBb XSxcbiAgc3ViOiBbXSxcbiAgc3VwOiBbXSxcbiAgc3Ryb25nOiBbXSxcbiAgdTogW10sXG4gIHVs OiBbXVxufVxuXG4vKipcbiAqIEEgcGF0dGVybiB0aGF0IHJlY29nbml6ZXMgYSBjb21tb25seSB1 c2VmdWwgc3Vic2V0IG9mIFVSTHMgdGhhdCBhcmUgc2FmZS5cbiAqXG4gKiBTaG91dG91dCB0byBB bmd1bGFyIDcgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzcuMi40L3Bh Y2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gKi9cbmNvbnN0 IFNBRkVfVVJMX1BBVFRFUk4gPSAvXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8 W14mOi8/I10qKD86Wy8/I118JCkpL2dpXG5cbi8qKlxuICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hl cyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlw ZXMuXG4gKlxuICogU2hvdXRvdXQgdG8gQW5ndWxhciA3IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1 bGFyL2FuZ3VsYXIvYmxvYi83LjIuNC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJs X3Nhbml0aXplci50c1xuICovXG5jb25zdCBEQVRBX1VSTF9QQVRURVJOID0gL15kYXRhOig/Omlt YWdlXFwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1xcLyg/Om1wZWd8 bXA0fG9nZ3x3ZWJtKXxhdWRpb1xcLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW2EtejAt OSsvXSs9KiQvaVxuXG5mdW5jdGlvbiBhbGxvd2VkQXR0cmlidXRlKGF0dHIsIGFsbG93ZWRBdHRy aWJ1dGVMaXN0KSB7XG4gIGNvbnN0IGF0dHJOYW1lID0gYXR0ci5ub2RlTmFtZS50b0xvd2VyQ2Fz ZSgpXG5cbiAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmluZGV4T2YoYXR0ck5hbWUpICE9PSAt MSkge1xuICAgIGlmICh1cmlBdHRycy5pbmRleE9mKGF0dHJOYW1lKSAhPT0gLTEpIHtcbiAgICAg IHJldHVybiBCb29sZWFuKGF0dHIubm9kZVZhbHVlLm1hdGNoKFNBRkVfVVJMX1BBVFRFUk4pIHx8 IGF0dHIubm9kZVZhbHVlLm1hdGNoKERBVEFfVVJMX1BBVFRFUk4pKVxuICAgIH1cblxuICAgIHJl dHVybiB0cnVlXG4gIH1cblxuICBjb25zdCByZWdFeHAgPSBhbGxvd2VkQXR0cmlidXRlTGlzdC5m aWx0ZXIoKGF0dHJSZWdleCkgPT4gYXR0clJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKVxuXG4gIC8v IENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxu ICBmb3IgKGxldCBpID0gMCwgbCA9IHJlZ0V4cC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBp ZiAoYXR0ck5hbWUubWF0Y2gocmVnRXhwW2ldKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9 XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplSHRt bCh1bnNhZmVIdG1sLCB3aGl0ZUxpc3QsIHNhbml0aXplRm4pIHtcbiAgaWYgKHVuc2FmZUh0bWwu bGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuc2FmZUh0bWxcbiAgfVxuXG4gIGlmIChzYW5p dGl6ZUZuICYmIHR5cGVvZiBzYW5pdGl6ZUZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJu IHNhbml0aXplRm4odW5zYWZlSHRtbClcbiAgfVxuXG4gIGNvbnN0IGRvbVBhcnNlciA9IG5ldyB3 aW5kb3cuRE9NUGFyc2VyKClcbiAgY29uc3QgY3JlYXRlZERvY3VtZW50ID0gZG9tUGFyc2VyLnBh cnNlRnJvbVN0cmluZyh1bnNhZmVIdG1sLCAndGV4dC9odG1sJylcbiAgY29uc3Qgd2hpdGVsaXN0 S2V5cyA9IE9iamVjdC5rZXlzKHdoaXRlTGlzdClcbiAgY29uc3QgZWxlbWVudHMgPSBbXS5zbGlj ZS5jYWxsKGNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSlcblxuICBm b3IgKGxldCBpID0gMCwgbGVuID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAg ICBjb25zdCBlbCA9IGVsZW1lbnRzW2ldXG4gICAgY29uc3QgZWxOYW1lID0gZWwubm9kZU5hbWUu dG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKHdoaXRlbGlzdEtleXMuaW5kZXhPZihlbC5ub2RlTmFt ZS50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hp bGQoZWwpXG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlTGlz dCA9IFtdLnNsaWNlLmNhbGwoZWwuYXR0cmlidXRlcylcbiAgICBjb25zdCB3aGl0ZWxpc3RlZEF0 dHJpYnV0ZXMgPSBbXS5jb25jYXQod2hpdGVMaXN0WycqJ10gfHwgW10sIHdoaXRlTGlzdFtlbE5h bWVdIHx8IFtdKVxuXG4gICAgYXR0cmlidXRlTGlzdC5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAg ICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGUoYXR0ciwgd2hpdGVsaXN0ZWRBdHRyaWJ1dGVzKSkge1xu ICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0ci5ub2RlTmFtZSlcbiAgICAgIH1cbiAgICB9 KVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZWREb2N1bWVudC5ib2R5LmlubmVySFRNTFxufVxuIiwi LyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NC40LjEpOiB0b29sdGlw LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3Rz dHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5p bXBvcnQge1xuICBEZWZhdWx0V2hpdGVsaXN0LFxuICBzYW5pdGl6ZUh0bWxcbn0gZnJvbSAnLi90 b29scy9zYW5pdGl6ZXInXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknXG5pbXBvcnQgUG9wcGVyIGZy b20gJ3BvcHBlci5qcydcbmltcG9ydCBVdGlsIGZyb20gJy4vdXRpbCdcblxuLyoqXG4gKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29u c3QgTkFNRSAgICAgICAgICAgICAgICAgID0gJ3Rvb2x0aXAnXG5jb25zdCBWRVJTSU9OICAgICAg ICAgICAgICAgPSAnNC40LjEnXG5jb25zdCBEQVRBX0tFWSAgICAgICAgICAgICAgPSAnYnMudG9v bHRpcCdcbmNvbnN0IEVWRU5UX0tFWSAgICAgICAgICAgICA9IGAuJHtEQVRBX0tFWX1gXG5jb25z dCBKUVVFUllfTk9fQ09ORkxJQ1QgICAgPSAkLmZuW05BTUVdXG5jb25zdCBDTEFTU19QUkVGSVgg ICAgICAgICAgPSAnYnMtdG9vbHRpcCdcbmNvbnN0IEJTQ0xTX1BSRUZJWF9SRUdFWCAgICA9IG5l dyBSZWdFeHAoYChefFxcXFxzKSR7Q0xBU1NfUFJFRklYfVxcXFxTK2AsICdnJylcbmNvbnN0IERJ U0FMTE9XRURfQVRUUklCVVRFUyA9IFsnc2FuaXRpemUnLCAnd2hpdGVMaXN0JywgJ3Nhbml0aXpl Rm4nXVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYW5pbWF0aW9uICAgICAgICAgOiAnYm9v bGVhbicsXG4gIHRlbXBsYXRlICAgICAgICAgIDogJ3N0cmluZycsXG4gIHRpdGxlICAgICAgICAg ICAgIDogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICB0cmlnZ2VyICAgICAgICAgICA6 ICdzdHJpbmcnLFxuICBkZWxheSAgICAgICAgICAgICA6ICcobnVtYmVyfG9iamVjdCknLFxuICBo dG1sICAgICAgICAgICAgICA6ICdib29sZWFuJyxcbiAgc2VsZWN0b3IgICAgICAgICAgOiAnKHN0 cmluZ3xib29sZWFuKScsXG4gIHBsYWNlbWVudCAgICAgICAgIDogJyhzdHJpbmd8ZnVuY3Rpb24p JyxcbiAgb2Zmc2V0ICAgICAgICAgICAgOiAnKG51bWJlcnxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAg Y29udGFpbmVyICAgICAgICAgOiAnKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pJyxcbiAgZmFsbGJh Y2tQbGFjZW1lbnQgOiAnKHN0cmluZ3xhcnJheSknLFxuICBib3VuZGFyeSAgICAgICAgICA6ICco c3RyaW5nfGVsZW1lbnQpJyxcbiAgc2FuaXRpemUgICAgICAgICAgOiAnYm9vbGVhbicsXG4gIHNh bml0aXplRm4gICAgICAgIDogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHdoaXRlTGlzdCAgICAgICAg IDogJ29iamVjdCcsXG4gIHBvcHBlckNvbmZpZyAgICAgIDogJyhudWxsfG9iamVjdCknXG59XG5c bmNvbnN0IEF0dGFjaG1lbnRNYXAgPSB7XG4gIEFVVE8gICA6ICdhdXRvJyxcbiAgVE9QICAgIDog J3RvcCcsXG4gIFJJR0hUICA6ICdyaWdodCcsXG4gIEJPVFRPTSA6ICdib3R0b20nLFxuICBMRUZU ICAgOiAnbGVmdCdcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uICAgICAgICAg OiB0cnVlLFxuICB0ZW1wbGF0ZSAgICAgICAgICA6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJv bGU9XCJ0b29sdGlwXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYXJy b3dcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0b29sdGlw LWlubmVyXCI+PC9kaXY+PC9kaXY+JyxcbiAgdHJpZ2dlciAgICAgICAgICAgOiAnaG92ZXIgZm9j dXMnLFxuICB0aXRsZSAgICAgICAgICAgICA6ICcnLFxuICBkZWxheSAgICAgICAgICAgICA6IDAs XG4gIGh0bWwgICAgICAgICAgICAgIDogZmFsc2UsXG4gIHNlbGVjdG9yICAgICAgICAgIDogZmFs c2UsXG4gIHBsYWNlbWVudCAgICAgICAgIDogJ3RvcCcsXG4gIG9mZnNldCAgICAgICAgICAgIDog MCxcbiAgY29udGFpbmVyICAgICAgICAgOiBmYWxzZSxcbiAgZmFsbGJhY2tQbGFjZW1lbnQgOiAn ZmxpcCcsXG4gIGJvdW5kYXJ5ICAgICAgICAgIDogJ3Njcm9sbFBhcmVudCcsXG4gIHNhbml0aXpl ICAgICAgICAgIDogdHJ1ZSxcbiAgc2FuaXRpemVGbiAgICAgICAgOiBudWxsLFxuICB3aGl0ZUxp c3QgICAgICAgICA6IERlZmF1bHRXaGl0ZWxpc3QsXG4gIHBvcHBlckNvbmZpZyAgICAgIDogbnVs bFxufVxuXG5jb25zdCBIb3ZlclN0YXRlID0ge1xuICBTSE9XIDogJ3Nob3cnLFxuICBPVVQgIDog J291dCdcbn1cblxuY29uc3QgRXZlbnQgPSB7XG4gIEhJREUgICAgICAgOiBgaGlkZSR7RVZFTlRf S0VZfWAsXG4gIEhJRERFTiAgICAgOiBgaGlkZGVuJHtFVkVOVF9LRVl9YCxcbiAgU0hPVyAgICAg ICA6IGBzaG93JHtFVkVOVF9LRVl9YCxcbiAgU0hPV04gICAgICA6IGBzaG93biR7RVZFTlRfS0VZ fWAsXG4gIElOU0VSVEVEICAgOiBgaW5zZXJ0ZWQke0VWRU5UX0tFWX1gLFxuICBDTElDSyAgICAg IDogYGNsaWNrJHtFVkVOVF9LRVl9YCxcbiAgRk9DVVNJTiAgICA6IGBmb2N1c2luJHtFVkVOVF9L RVl9YCxcbiAgRk9DVVNPVVQgICA6IGBmb2N1c291dCR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFRU5U RVIgOiBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFTEVBVkUgOiBgbW91c2VsZWF2 ZSR7RVZFTlRfS0VZfWBcbn1cblxuY29uc3QgQ2xhc3NOYW1lID0ge1xuICBGQURFIDogJ2ZhZGUn LFxuICBTSE9XIDogJ3Nob3cnXG59XG5cbmNvbnN0IFNlbGVjdG9yID0ge1xuICBUT09MVElQICAg ICAgIDogJy50b29sdGlwJyxcbiAgVE9PTFRJUF9JTk5FUiA6ICcudG9vbHRpcC1pbm5lcicsXG4g IEFSUk9XICAgICAgICAgOiAnLmFycm93J1xufVxuXG5jb25zdCBUcmlnZ2VyID0ge1xuICBIT1ZF UiAgOiAnaG92ZXInLFxuICBGT0NVUyAgOiAnZm9jdXMnLFxuICBDTElDSyAgOiAnY2xpY2snLFxu ICBNQU5VQUwgOiAnbWFudWFsJ1xufVxuXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBD bGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBUb29sdGlw IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBQb3Bw ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3Ry YXBcXCdzIHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyLmpzIChodHRwczovL3BvcHBlci5qcy5vcmcv KScpXG4gICAgfVxuXG4gICAgLy8gcHJpdmF0ZVxuICAgIHRoaXMuX2lzRW5hYmxlZCAgICAgPSB0 cnVlXG4gICAgdGhpcy5fdGltZW91dCAgICAgICA9IDBcbiAgICB0aGlzLl9ob3ZlclN0YXRlICAg ID0gJydcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge31cbiAgICB0aGlzLl9wb3BwZXIgICAg ICAgID0gbnVsbFxuXG4gICAgLy8gUHJvdGVjdGVkXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVu dFxuICAgIHRoaXMuY29uZmlnICA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy50 aXAgICAgID0gbnVsbFxuXG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdl dHRlcnNcblxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05cbiAg fVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5c biAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICBzdGF0aWMg Z2V0IERBVEFfS0VZKCkge1xuICAgIHJldHVybiBEQVRBX0tFWVxuICB9XG5cbiAgc3RhdGljIGdl dCBFdmVudCgpIHtcbiAgICByZXR1cm4gRXZlbnRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRVZFTlRf S0VZKCkge1xuICAgIHJldHVybiBFVkVOVF9LRVlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVs dFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICAvLyBQdWJsaWNcblxu ICBlbmFibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZVxuICB9XG5cbiAgZGlzYWJs ZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZVxuICB9XG5cbiAgdG9nZ2xlRW5hYmxl ZCgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSAhdGhpcy5faXNFbmFibGVkXG4gIH1cblxuICB0 b2dnbGUoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJu XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb25zdCBkYXRhS2V5ID0gdGhpcy5j b25zdHJ1Y3Rvci5EQVRBX0tFWVxuICAgICAgbGV0IGNvbnRleHQgPSAkKGV2ZW50LmN1cnJlbnRU YXJnZXQpLmRhdGEoZGF0YUtleSlcblxuICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIGNv bnRleHQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihcbiAgICAgICAgICBldmVudC5jdXJyZW50VGFy Z2V0LFxuICAgICAgICAgIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKClcbiAgICAgICAgKVxuICAg ICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dClcbiAgICAg IH1cblxuICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljayA9ICFjb250ZXh0Ll9hY3Rp dmVUcmlnZ2VyLmNsaWNrXG5cbiAgICAgIGlmIChjb250ZXh0Ll9pc1dpdGhBY3RpdmVUcmlnZ2Vy KCkpIHtcbiAgICAgICAgY29udGV4dC5fZW50ZXIobnVsbCwgY29udGV4dClcbiAgICAgIH0gZWxz ZSB7XG4gICAgICAgIGNvbnRleHQuX2xlYXZlKG51bGwsIGNvbnRleHQpXG4gICAgICB9XG4gICAg fSBlbHNlIHtcbiAgICAgIGlmICgkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFz c05hbWUuU0hPVykpIHtcbiAgICAgICAgdGhpcy5fbGVhdmUobnVsbCwgdGhpcylcbiAgICAgICAg cmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VudGVyKG51bGwsIHRoaXMpXG4gICAgfVxu ICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dClcblxu ICAgICQucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkp XG5cbiAgICAkKHRoaXMuZWxlbWVudCkub2ZmKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKVxu ICAgICQodGhpcy5lbGVtZW50KS5jbG9zZXN0KCcubW9kYWwnKS5vZmYoJ2hpZGUuYnMubW9kYWwn LCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuXG4gICAgaWYgKHRoaXMudGlwKSB7XG4gICAgICAk KHRoaXMudGlwKS5yZW1vdmUoKVxuICAgIH1cblxuICAgIHRoaXMuX2lzRW5hYmxlZCAgICAgPSBu dWxsXG4gICAgdGhpcy5fdGltZW91dCAgICAgICA9IG51bGxcbiAgICB0aGlzLl9ob3ZlclN0YXRl ICAgID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIgPSBudWxsXG4gICAgaWYgKHRoaXMu X3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRo aXMuX3BvcHBlciA9IG51bGxcbiAgICB0aGlzLmVsZW1lbnQgPSBudWxsXG4gICAgdGhpcy5jb25m aWcgID0gbnVsbFxuICAgIHRoaXMudGlwICAgICA9IG51bGxcbiAgfVxuXG4gIHNob3coKSB7XG4g ICAgaWYgKCQodGhpcy5lbGVtZW50KS5jc3MoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSB7XG4gICAg ICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzJylc biAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSAkLkV2ZW50KHRoaXMuY29uc3RydWN0b3Iu RXZlbnQuU0hPVylcbiAgICBpZiAodGhpcy5pc1dpdGhDb250ZW50KCkgJiYgdGhpcy5faXNFbmFi bGVkKSB7XG4gICAgICAkKHRoaXMuZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpXG5cbiAgICAg IGNvbnN0IHNoYWRvd1Jvb3QgPSBVdGlsLmZpbmRTaGFkb3dSb290KHRoaXMuZWxlbWVudClcbiAg ICAgIGNvbnN0IGlzSW5UaGVEb20gPSAkLmNvbnRhaW5zKFxuICAgICAgICBzaGFkb3dSb290ICE9 PSBudWxsID8gc2hhZG93Um9vdCA6IHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCxcbiAgICAgICAgdGhpcy5lbGVtZW50XG4gICAgICApXG5cbiAgICAgIGlmIChzaG93 RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgICAgcmV0 dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpcCAgID0gdGhpcy5nZXRUaXBFbGVtZW50KClc biAgICAgIGNvbnN0IHRpcElkID0gVXRpbC5nZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKVxu XG4gICAgICB0aXAuc2V0QXR0cmlidXRlKCdpZCcsIHRpcElkKVxuICAgICAgdGhpcy5lbGVtZW50 LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcElkKVxuXG4gICAgICB0aGlzLnNl dENvbnRlbnQoKVxuXG4gICAgICBpZiAodGhpcy5jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICAg ICQodGlwKS5hZGRDbGFzcyhDbGFzc05hbWUuRkFERSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qg cGxhY2VtZW50ICA9IHR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQgPT09ICdmdW5jdGlvbidc biAgICAgICAgPyB0aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLCB0aXAsIHRoaXMuZWxl bWVudClcbiAgICAgICAgOiB0aGlzLmNvbmZpZy5wbGFjZW1lbnRcblxuICAgICAgY29uc3QgYXR0 YWNobWVudCA9IHRoaXMuX2dldEF0dGFjaG1lbnQocGxhY2VtZW50KVxuICAgICAgdGhpcy5hZGRB dHRhY2htZW50Q2xhc3MoYXR0YWNobWVudClcblxuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhp cy5fZ2V0Q29udGFpbmVyKClcbiAgICAgICQodGlwKS5kYXRhKHRoaXMuY29uc3RydWN0b3IuREFU QV9LRVksIHRoaXMpXG5cbiAgICAgIGlmICghJC5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJE b2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMudGlwKSkge1xuICAgICAgICAkKHRpcCkuYXBw ZW5kVG8oY29udGFpbmVyKVxuICAgICAgfVxuXG4gICAgICAkKHRoaXMuZWxlbWVudCkudHJpZ2dl cih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKVxuXG4gICAgICB0aGlzLl9wb3BwZXIg PSBuZXcgUG9wcGVyKHRoaXMuZWxlbWVudCwgdGlwLCB0aGlzLl9nZXRQb3BwZXJDb25maWcoYXR0 YWNobWVudCkpXG5cbiAgICAgICQodGlwKS5hZGRDbGFzcyhDbGFzc05hbWUuU0hPVylcblxuICAg ICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAg ICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBj aGlsZHJlbjtcbiAgICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRl bGVnYXRpb24gb24gaU9TXG4gICAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9n L2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICAgIGlmICgnb250b3Vj aHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgJChkb2N1bWVu dC5ib2R5KS5jaGlsZHJlbigpLm9uKCdtb3VzZW92ZXInLCBudWxsLCAkLm5vb3ApXG4gICAgICB9 XG5cbiAgICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb25m aWcuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5fZml4VHJhbnNpdGlvbigpXG4gICAgICAg IH1cbiAgICAgICAgY29uc3QgcHJldkhvdmVyU3RhdGUgPSB0aGlzLl9ob3ZlclN0YXRlXG4gICAg ICAgIHRoaXMuX2hvdmVyU3RhdGUgICAgID0gbnVsbFxuXG4gICAgICAgICQodGhpcy5lbGVtZW50 KS50cmlnZ2VyKHRoaXMuY29uc3RydWN0b3IuRXZlbnQuU0hPV04pXG5cbiAgICAgICAgaWYgKHBy ZXZIb3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLk9VVCkge1xuICAgICAgICAgIHRoaXMuX2xlYXZl KG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCQodGhpcy50aXAp Lmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICBjb25zdCB0cmFuc2l0aW9uRHVy YXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMudGlwKVxu XG4gICAgICAgICQodGhpcy50aXApXG4gICAgICAgICAgLm9uZShVdGlsLlRSQU5TSVRJT05fRU5E LCBjb21wbGV0ZSlcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1 cmF0aW9uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcGxldGUoKVxuICAgICAgfVxuICAg IH1cbiAgfVxuXG4gIGhpZGUoY2FsbGJhY2spIHtcbiAgICBjb25zdCB0aXAgICAgICAgPSB0aGlz LmdldFRpcEVsZW1lbnQoKVxuICAgIGNvbnN0IGhpZGVFdmVudCA9ICQuRXZlbnQodGhpcy5jb25z dHJ1Y3Rvci5FdmVudC5ISURFKVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAg aWYgKHRoaXMuX2hvdmVyU3RhdGUgIT09IEhvdmVyU3RhdGUuU0hPVyAmJiB0aXAucGFyZW50Tm9k ZSkge1xuICAgICAgICB0aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aXApXG4gICAgICB9XG5c biAgICAgIHRoaXMuX2NsZWFuVGlwQ2xhc3MoKVxuICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0 dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpXG4gICAgICAkKHRoaXMuZWxlbWVudCkudHJpZ2dl cih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkhJRERFTilcbiAgICAgIGlmICh0aGlzLl9wb3BwZXIg IT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgICAgfVxuXG4g ICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuICAgIH1c blxuICAgICQodGhpcy5lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudClcblxuICAgIGlmIChoaWRl RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAg ICQodGlwKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVylcblxuICAgIC8vIElmIHRoaXMgaXMg YSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkg bW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29u dG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAkKGRvY3Vt ZW50LmJvZHkpLmNoaWxkcmVuKCkub2ZmKCdtb3VzZW92ZXInLCBudWxsLCAkLm5vb3ApXG4gICAg fVxuXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUcmlnZ2VyLkNMSUNLXSA9IGZhbHNlXG4gICAg dGhpcy5fYWN0aXZlVHJpZ2dlcltUcmlnZ2VyLkZPQ1VTXSA9IGZhbHNlXG4gICAgdGhpcy5fYWN0 aXZlVHJpZ2dlcltUcmlnZ2VyLkhPVkVSXSA9IGZhbHNlXG5cbiAgICBpZiAoJCh0aGlzLnRpcCku aGFzQ2xhc3MoQ2xhc3NOYW1lLkZBREUpKSB7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uRHVyYXRp b24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRpcClcblxuICAgICAg JCh0aXApXG4gICAgICAgIC5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpXG4gICAg ICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pXG4gICAgfSBlbHNl IHtcbiAgICAgIGNvbXBsZXRlKClcbiAgICB9XG5cbiAgICB0aGlzLl9ob3ZlclN0YXRlID0gJydc biAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4g ICAgICB0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFBy b3RlY3RlZFxuXG4gIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5n ZXRUaXRsZSgpKVxuICB9XG5cbiAgYWRkQXR0YWNobWVudENsYXNzKGF0dGFjaG1lbnQpIHtcbiAg ICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhgJHtDTEFTU19QUkVGSVh9LSR7YXR0 YWNobWVudH1gKVxuICB9XG5cbiAgZ2V0VGlwRWxlbWVudCgpIHtcbiAgICB0aGlzLnRpcCA9IHRo aXMudGlwIHx8ICQodGhpcy5jb25maWcudGVtcGxhdGUpWzBdXG4gICAgcmV0dXJuIHRoaXMudGlw XG4gIH1cblxuICBzZXRDb250ZW50KCkge1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuZ2V0VGlwRWxl bWVudCgpXG4gICAgdGhpcy5zZXRFbGVtZW50Q29udGVudCgkKHRpcC5xdWVyeVNlbGVjdG9yQWxs KFNlbGVjdG9yLlRPT0xUSVBfSU5ORVIpKSwgdGhpcy5nZXRUaXRsZSgpKVxuICAgICQodGlwKS5y ZW1vdmVDbGFzcyhgJHtDbGFzc05hbWUuRkFERX0gJHtDbGFzc05hbWUuU0hPV31gKVxuICB9XG5c biAgc2V0RWxlbWVudENvbnRlbnQoJGVsZW1lbnQsIGNvbnRlbnQpIHtcbiAgICBpZiAodHlwZW9m IGNvbnRlbnQgPT09ICdvYmplY3QnICYmIChjb250ZW50Lm5vZGVUeXBlIHx8IGNvbnRlbnQuanF1 ZXJ5KSkge1xuICAgICAgLy8gQ29udGVudCBpcyBhIERPTSBub2RlIG9yIGEgalF1ZXJ5XG4gICAg ICBpZiAodGhpcy5jb25maWcuaHRtbCkge1xuICAgICAgICBpZiAoISQoY29udGVudCkucGFyZW50 KCkuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgJGVsZW1lbnQuZW1wdHkoKS5hcHBlbmQoY29u dGVudClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGVsZW1lbnQudGV4dCgk KGNvbnRlbnQpLnRleHQoKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAg aWYgKHRoaXMuY29uZmlnLmh0bWwpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zYW5pdGl6ZSkg e1xuICAgICAgICBjb250ZW50ID0gc2FuaXRpemVIdG1sKGNvbnRlbnQsIHRoaXMuY29uZmlnLndo aXRlTGlzdCwgdGhpcy5jb25maWcuc2FuaXRpemVGbilcbiAgICAgIH1cblxuICAgICAgJGVsZW1l bnQuaHRtbChjb250ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICAkZWxlbWVudC50ZXh0KGNvbnRl bnQpXG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGUoKSB7XG4gICAgbGV0IHRpdGxlID0gdGhpcy5l bGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbC10aXRsZScpXG5cbiAgICBpZiAoIXRp dGxlKSB7XG4gICAgICB0aXRsZSA9IHR5cGVvZiB0aGlzLmNvbmZpZy50aXRsZSA9PT0gJ2Z1bmN0 aW9uJ1xuICAgICAgICA/IHRoaXMuY29uZmlnLnRpdGxlLmNhbGwodGhpcy5lbGVtZW50KVxuICAg ICAgICA6IHRoaXMuY29uZmlnLnRpdGxlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRpdGxlXG4gIH1c blxuICAvLyBQcml2YXRlXG5cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAg Y29uc3QgZGVmYXVsdEJzQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxu ICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KCksXG4g ICAgICAgIGZsaXA6IHtcbiAgICAgICAgICBiZWhhdmlvcjogdGhpcy5jb25maWcuZmFsbGJhY2tQ bGFjZW1lbnRcbiAgICAgICAgfSxcbiAgICAgICAgYXJyb3c6IHtcbiAgICAgICAgICBlbGVtZW50 OiBTZWxlY3Rvci5BUlJPV1xuICAgICAgICB9LFxuICAgICAgICBwcmV2ZW50T3ZlcmZsb3c6IHtc biAgICAgICAgICBib3VuZGFyaWVzRWxlbWVudDogdGhpcy5jb25maWcuYm91bmRhcnlcbiAgICAg ICAgfVxuICAgICAgfSxcbiAgICAgIG9uQ3JlYXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAo ZGF0YS5vcmlnaW5hbFBsYWNlbWVudCAhPT0gZGF0YS5wbGFjZW1lbnQpIHtcbiAgICAgICAgICB0 aGlzLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UoZGF0YSlcbiAgICAgICAgfVxuICAgICAg fSxcbiAgICAgIG9uVXBkYXRlOiAoZGF0YSkgPT4gdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50 Q2hhbmdlKGRhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc0Nv bmZpZyxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnBvcHBlckNvbmZpZ1xuICAgIH1cbiAgfVxuXG4g IF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0ge31cblxuICAgIGlmICh0eXBlb2Yg dGhpcy5jb25maWcub2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvZmZzZXQuZm4gPSAo ZGF0YSkgPT4ge1xuICAgICAgICBkYXRhLm9mZnNldHMgPSB7XG4gICAgICAgICAgLi4uZGF0YS5v ZmZzZXRzLFxuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLm9mZnNldChkYXRhLm9mZnNldHMsIHRo aXMuZWxlbWVudCkgfHwge31cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAg ICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLmNvbmZpZy5vZmZz ZXRcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfZ2V0Q29udGFpbmVyKCkg e1xuICAgIGlmICh0aGlzLmNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlKSB7XG4gICAgICByZXR1 cm4gZG9jdW1lbnQuYm9keVxuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRWxlbWVudCh0aGlzLmNv bmZpZy5jb250YWluZXIpKSB7XG4gICAgICByZXR1cm4gJCh0aGlzLmNvbmZpZy5jb250YWluZXIp XG4gICAgfVxuXG4gICAgcmV0dXJuICQoZG9jdW1lbnQpLmZpbmQodGhpcy5jb25maWcuY29udGFp bmVyKVxuICB9XG5cbiAgX2dldEF0dGFjaG1lbnQocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIEF0 dGFjaG1lbnRNYXBbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldXG4gIH1cblxuICBfc2V0TGlzdGVu ZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgn ICcpXG5cbiAgICB0cmlnZ2Vycy5mb3JFYWNoKCh0cmlnZ2VyKSA9PiB7XG4gICAgICBpZiAodHJp Z2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICAkKHRoaXMuZWxlbWVudCkub24oXG4gICAgICAg ICAgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5DTElDSyxcbiAgICAgICAgICB0aGlzLmNvbmZpZy5z ZWxlY3RvcixcbiAgICAgICAgICAoZXZlbnQpID0+IHRoaXMudG9nZ2xlKGV2ZW50KVxuICAgICAg ICApXG4gICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgIT09IFRyaWdnZXIuTUFOVUFMKSB7XG4gICAg ICAgIGNvbnN0IGV2ZW50SW4gPSB0cmlnZ2VyID09PSBUcmlnZ2VyLkhPVkVSXG4gICAgICAgICAg PyB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVJcbiAgICAgICAgICA6IHRoaXMuY29u c3RydWN0b3IuRXZlbnQuRk9DVVNJTlxuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIg PT09IFRyaWdnZXIuSE9WRVJcbiAgICAgICAgICA/IHRoaXMuY29uc3RydWN0b3IuRXZlbnQuTU9V U0VMRUFWRVxuICAgICAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU09VVFxuXG4g ICAgICAgICQodGhpcy5lbGVtZW50KVxuICAgICAgICAgIC5vbihcbiAgICAgICAgICAgIGV2ZW50 SW4sXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5zZWxlY3RvcixcbiAgICAgICAgICAgIChldmVu dCkgPT4gdGhpcy5fZW50ZXIoZXZlbnQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5vbihcbiAg ICAgICAgICAgIGV2ZW50T3V0LFxuICAgICAgICAgICAgdGhpcy5jb25maWcuc2VsZWN0b3IsXG4g ICAgICAgICAgICAoZXZlbnQpID0+IHRoaXMuX2xlYXZlKGV2ZW50KVxuICAgICAgICAgIClcbiAg ICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5faGlkZU1vZGFsSGFuZGxlciA9ICgpID0+IHtcbiAg ICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgIH1cbiAg ICB9XG5cbiAgICAkKHRoaXMuZWxlbWVudCkuY2xvc2VzdCgnLm1vZGFsJykub24oXG4gICAgICAn aGlkZS5icy5tb2RhbCcsXG4gICAgICB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyXG4gICAgKVxuXG4g ICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IHtcbiAg ICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxuICAgICAg ICBzZWxlY3RvcjogJydcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZml4VGl0 bGUoKVxuICAgIH1cbiAgfVxuXG4gIF9maXhUaXRsZSgpIHtcbiAgICBjb25zdCB0aXRsZVR5cGUg PSB0eXBlb2YgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbC10aXRsZScp XG5cbiAgICBpZiAodGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKSB8fCB0aXRsZVR5 cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAg ICAgICAnZGF0YS1vcmlnaW5hbC10aXRsZScsXG4gICAgICAgIHRoaXMuZWxlbWVudC5nZXRBdHRy aWJ1dGUoJ3RpdGxlJykgfHwgJydcbiAgICAgIClcblxuICAgICAgdGhpcy5lbGVtZW50LnNldEF0 dHJpYnV0ZSgndGl0bGUnLCAnJylcbiAgICB9XG4gIH1cblxuICBfZW50ZXIoZXZlbnQsIGNvbnRl eHQpIHtcbiAgICBjb25zdCBkYXRhS2V5ID0gdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWVxuICAg IGNvbnRleHQgPSBjb250ZXh0IHx8ICQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5 KVxuXG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBjb250ZXh0ID0gbmV3IHRoaXMuY29uc3Ry dWN0b3IoXG4gICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgIHRoaXMuX2dldERl bGVnYXRlQ29uZmlnKClcbiAgICAgIClcbiAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0 YShkYXRhS2V5LCBjb250ZXh0KVxuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgY29u dGV4dC5fYWN0aXZlVHJpZ2dlcltcbiAgICAgICAgZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nID8g VHJpZ2dlci5GT0NVUyA6IFRyaWdnZXIuSE9WRVJcbiAgICAgIF0gPSB0cnVlXG4gICAgfVxuXG4g ICAgaWYgKCQoY29udGV4dC5nZXRUaXBFbGVtZW50KCkpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9X KSB8fCBjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLlNIT1cpIHtcbiAgICAgIGNv bnRleHQuX2hvdmVyU3RhdGUgPSBIb3ZlclN0YXRlLlNIT1dcbiAgICAgIHJldHVyblxuICAgIH1c blxuICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KVxuXG4gICAgY29udGV4dC5faG92 ZXJTdGF0ZSA9IEhvdmVyU3RhdGUuU0hPV1xuXG4gICAgaWYgKCFjb250ZXh0LmNvbmZpZy5kZWxh eSB8fCAhY29udGV4dC5jb25maWcuZGVsYXkuc2hvdykge1xuICAgICAgY29udGV4dC5zaG93KClc biAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0 KCgpID0+IHtcbiAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLlNI T1cpIHtcbiAgICAgICAgY29udGV4dC5zaG93KClcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0LmNv bmZpZy5kZWxheS5zaG93KVxuICB9XG5cbiAgX2xlYXZlKGV2ZW50LCBjb250ZXh0KSB7XG4gICAg Y29uc3QgZGF0YUtleSA9IHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVlcbiAgICBjb250ZXh0ID0g Y29udGV4dCB8fCAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSlcblxuICAgIGlm ICghY29udGV4dCkge1xuICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKFxuICAg ICAgICBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZp ZygpXG4gICAgICApXG4gICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwg Y29udGV4dClcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbnRleHQuX2FjdGl2 ZVRyaWdnZXJbXG4gICAgICAgIGV2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUcmlnZ2VyLkZP Q1VTIDogVHJpZ2dlci5IT1ZFUlxuICAgICAgXSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNv bnRleHQuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4g ICAgY2xlYXJUaW1lb3V0KGNvbnRleHQuX3RpbWVvdXQpXG5cbiAgICBjb250ZXh0Ll9ob3ZlclN0 YXRlID0gSG92ZXJTdGF0ZS5PVVRcblxuICAgIGlmICghY29udGV4dC5jb25maWcuZGVsYXkgfHwg IWNvbnRleHQuY29uZmlnLmRlbGF5LmhpZGUpIHtcbiAgICAgIGNvbnRleHQuaGlkZSgpXG4gICAg ICByZXR1cm5cbiAgICB9XG5cbiAgICBjb250ZXh0Ll90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9 PiB7XG4gICAgICBpZiAoY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSG92ZXJTdGF0ZS5PVVQpIHtc biAgICAgICAgY29udGV4dC5oaWRlKClcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0LmNvbmZpZy5k ZWxheS5oaWRlKVxuICB9XG5cbiAgX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSB7XG4gICAgZm9yIChj b25zdCB0cmlnZ2VyIGluIHRoaXMuX2FjdGl2ZVRyaWdnZXIpIHtcbiAgICAgIGlmICh0aGlzLl9h Y3RpdmVUcmlnZ2VyW3RyaWdnZXJdKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4g ICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xu ICAgIGNvbnN0IGRhdGFBdHRyaWJ1dGVzID0gJCh0aGlzLmVsZW1lbnQpLmRhdGEoKVxuXG4gICAg T2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpXG4gICAgICAuZm9yRWFjaCgoZGF0YUF0dHIpID0+ IHtcbiAgICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5pbmRleE9mKGRhdGFBdHRyKSAh PT0gLTEpIHtcbiAgICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJdXG4gICAg ICAgIH1cbiAgICAgIH0pXG5cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbnN0cnVj dG9yLkRlZmF1bHQsXG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLnR5cGVvZiBj b25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9XG4gICAgfVxuXG4gICAg aWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuZGVs YXkgPSB7XG4gICAgICAgIHNob3c6IGNvbmZpZy5kZWxheSxcbiAgICAgICAgaGlkZTogY29uZmln LmRlbGF5XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcudGl0bGUgPT09 ICdudW1iZXInKSB7XG4gICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmco KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvbnRlbnQgPT09ICdudW1iZXInKSB7 XG4gICAgICBjb25maWcuY29udGVudCA9IGNvbmZpZy5jb250ZW50LnRvU3RyaW5nKClcbiAgICB9 XG5cbiAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhcbiAgICAgIE5BTUUsXG4gICAgICBjb25maWcs XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlXG4gICAgKVxuXG4gICAgaWYgKGNv bmZpZy5zYW5pdGl6ZSkge1xuICAgICAgY29uZmlnLnRlbXBsYXRlID0gc2FuaXRpemVIdG1sKGNv bmZpZy50ZW1wbGF0ZSwgY29uZmlnLndoaXRlTGlzdCwgY29uZmlnLnNhbml0aXplRm4pXG4gICAg fVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xu ICAgIGNvbnN0IGNvbmZpZyA9IHt9XG5cbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIGZv ciAoY29uc3Qga2V5IGluIHRoaXMuY29uZmlnKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVj dG9yLkRlZmF1bHRba2V5XSAhPT0gdGhpcy5jb25maWdba2V5XSkge1xuICAgICAgICAgIGNvbmZp Z1trZXldID0gdGhpcy5jb25maWdba2V5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4g ICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgY29uc3Qg JHRpcCA9ICQodGhpcy5nZXRUaXBFbGVtZW50KCkpXG4gICAgY29uc3QgdGFiQ2xhc3MgPSAkdGlw LmF0dHIoJ2NsYXNzJykubWF0Y2goQlNDTFNfUFJFRklYX1JFR0VYKVxuICAgIGlmICh0YWJDbGFz cyAhPT0gbnVsbCAmJiB0YWJDbGFzcy5sZW5ndGgpIHtcbiAgICAgICR0aXAucmVtb3ZlQ2xhc3Mo dGFiQ2xhc3Muam9pbignJykpXG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZVBvcHBlclBsYWNlbWVu dENoYW5nZShwb3BwZXJEYXRhKSB7XG4gICAgY29uc3QgcG9wcGVySW5zdGFuY2UgPSBwb3BwZXJE YXRhLmluc3RhbmNlXG4gICAgdGhpcy50aXAgPSBwb3BwZXJJbnN0YW5jZS5wb3BwZXJcbiAgICB0 aGlzLl9jbGVhblRpcENsYXNzKClcbiAgICB0aGlzLmFkZEF0dGFjaG1lbnRDbGFzcyh0aGlzLl9n ZXRBdHRhY2htZW50KHBvcHBlckRhdGEucGxhY2VtZW50KSlcbiAgfVxuXG4gIF9maXhUcmFuc2l0 aW9uKCkge1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpXG4gICAgY29uc3Qg aW5pdENvbmZpZ0FuaW1hdGlvbiA9IHRoaXMuY29uZmlnLmFuaW1hdGlvblxuXG4gICAgaWYgKHRp cC5nZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JykgIT09IG51bGwpIHtcbiAgICAgIHJldHVyblxu ICAgIH1cblxuICAgICQodGlwKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuRkFERSlcbiAgICB0aGlz LmNvbmZpZy5hbmltYXRpb24gPSBmYWxzZVxuICAgIHRoaXMuaGlkZSgpXG4gICAgdGhpcy5zaG93 KClcbiAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBpbml0Q29uZmlnQW5pbWF0aW9uXG4gIH1c blxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAg ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBkYXRhID0gJCh0aGlz KS5kYXRhKERBVEFfS0VZKVxuICAgICAgY29uc3QgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09 ICdvYmplY3QnICYmIGNvbmZpZ1xuXG4gICAgICBpZiAoIWRhdGEgJiYgL2Rpc3Bvc2V8aGlkZS8u dGVzdChjb25maWcpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoIWRh dGEpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBUb29sdGlwKHRoaXMsIF9jb25maWcpXG4gICAgICAg ICQodGhpcykuZGF0YShEQVRBX0tFWSwgZGF0YSlcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVv ZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWdd ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1l dGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZp Z10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c biAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuJC5mbltOQU1FXSA9IFRvb2x0 aXAuX2pRdWVyeUludGVyZmFjZVxuJC5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IFRvb2x0aXBcbiQu Zm5bTkFNRV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgJC5mbltOQU1FXSA9IEpRVUVSWV9OT19D T05GTElDVFxuICByZXR1cm4gVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlXG59XG5cbmV4cG9ydCBk ZWZhdWx0IFRvb2x0aXBcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJh cCAodjQuNC4xKTogcG9wb3Zlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dp dGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5J1xuaW1wb3J0IFRvb2x0aXAg ZnJvbSAnLi90b29sdGlwJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRz XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FICAgICAgICAgICAgICAgID0g J3BvcG92ZXInXG5jb25zdCBWRVJTSU9OICAgICAgICAgICAgID0gJzQuNC4xJ1xuY29uc3QgREFU QV9LRVkgICAgICAgICAgICA9ICdicy5wb3BvdmVyJ1xuY29uc3QgRVZFTlRfS0VZICAgICAgICAg ICA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgID0gJC5mbltOQU1F XVxuY29uc3QgQ0xBU1NfUFJFRklYICAgICAgICA9ICdicy1wb3BvdmVyJ1xuY29uc3QgQlNDTFNf UFJFRklYX1JFR0VYICA9IG5ldyBSZWdFeHAoYChefFxcXFxzKSR7Q0xBU1NfUFJFRklYfVxcXFxT K2AsICdnJylcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0LFxuICBw bGFjZW1lbnQgOiAncmlnaHQnLFxuICB0cmlnZ2VyICAgOiAnY2xpY2snLFxuICBjb250ZW50ICAg OiAnJyxcbiAgdGVtcGxhdGUgIDogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0 aXBcIj4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PicgK1xu ICAgICAgICAgICAgICAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgK1xuICAg ICAgICAgICAgICAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PjwvZGl2Pidcbn1c blxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdFR5cGUsXG4gIGNv bnRlbnQgOiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn1cblxuY29uc3QgQ2xhc3NOYW1l ID0ge1xuICBGQURFIDogJ2ZhZGUnLFxuICBTSE9XIDogJ3Nob3cnXG59XG5cbmNvbnN0IFNlbGVj dG9yID0ge1xuICBUSVRMRSAgIDogJy5wb3BvdmVyLWhlYWRlcicsXG4gIENPTlRFTlQgOiAnLnBv cG92ZXItYm9keSdcbn1cblxuY29uc3QgRXZlbnQgPSB7XG4gIEhJREUgICAgICAgOiBgaGlkZSR7 RVZFTlRfS0VZfWAsXG4gIEhJRERFTiAgICAgOiBgaGlkZGVuJHtFVkVOVF9LRVl9YCxcbiAgU0hP VyAgICAgICA6IGBzaG93JHtFVkVOVF9LRVl9YCxcbiAgU0hPV04gICAgICA6IGBzaG93biR7RVZF TlRfS0VZfWAsXG4gIElOU0VSVEVEICAgOiBgaW5zZXJ0ZWQke0VWRU5UX0tFWX1gLFxuICBDTElD SyAgICAgIDogYGNsaWNrJHtFVkVOVF9LRVl9YCxcbiAgRk9DVVNJTiAgICA6IGBmb2N1c2luJHtF VkVOVF9LRVl9YCxcbiAgRk9DVVNPVVQgICA6IGBmb2N1c291dCR7RVZFTlRfS0VZfWAsXG4gIE1P VVNFRU5URVIgOiBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFTEVBVkUgOiBgbW91 c2VsZWF2ZSR7RVZFTlRfS0VZfWBcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENs YXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIFBvcG92ZXIg ZXh0ZW5kcyBUb29sdGlwIHtcbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgVkVSU0lPTigp IHtcbiAgICByZXR1cm4gVkVSU0lPTlxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xu ICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0 dXJuIE5BTUVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgREFUQV9LRVkoKSB7XG4gICAgcmV0dXJuIERB VEFfS0VZXG4gIH1cblxuICBzdGF0aWMgZ2V0IEV2ZW50KCkge1xuICAgIHJldHVybiBFdmVudFxu ICB9XG5cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIEVWRU5UX0tFWVxu ICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5 cGVcbiAgfVxuXG4gIC8vIE92ZXJyaWRlc1xuXG4gIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0 dXJuIHRoaXMuZ2V0VGl0bGUoKSB8fCB0aGlzLl9nZXRDb250ZW50KClcbiAgfVxuXG4gIGFkZEF0 dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgJCh0aGlzLmdldFRpcEVsZW1lbnQoKSku YWRkQ2xhc3MoYCR7Q0xBU1NfUFJFRklYfS0ke2F0dGFjaG1lbnR9YClcbiAgfVxuXG4gIGdldFRp cEVsZW1lbnQoKSB7XG4gICAgdGhpcy50aXAgPSB0aGlzLnRpcCB8fCAkKHRoaXMuY29uZmlnLnRl bXBsYXRlKVswXVxuICAgIHJldHVybiB0aGlzLnRpcFxuICB9XG5cbiAgc2V0Q29udGVudCgpIHtc biAgICBjb25zdCAkdGlwID0gJCh0aGlzLmdldFRpcEVsZW1lbnQoKSlcblxuICAgIC8vIFdlIHVz ZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWludGFpbiBqcyBldmVudHNcbiAgICB0aGlz LnNldEVsZW1lbnRDb250ZW50KCR0aXAuZmluZChTZWxlY3Rvci5USVRMRSksIHRoaXMuZ2V0VGl0 bGUoKSlcbiAgICBsZXQgY29udGVudCA9IHRoaXMuX2dldENvbnRlbnQoKVxuICAgIGlmICh0eXBl b2YgY29udGVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29udGVudCA9IGNvbnRlbnQuY2Fs bCh0aGlzLmVsZW1lbnQpXG4gICAgfVxuICAgIHRoaXMuc2V0RWxlbWVudENvbnRlbnQoJHRpcC5m aW5kKFNlbGVjdG9yLkNPTlRFTlQpLCBjb250ZW50KVxuXG4gICAgJHRpcC5yZW1vdmVDbGFzcyhg JHtDbGFzc05hbWUuRkFERX0gJHtDbGFzc05hbWUuU0hPV31gKVxuICB9XG5cbiAgLy8gUHJpdmF0 ZVxuXG4gIF9nZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmli dXRlKCdkYXRhLWNvbnRlbnQnKSB8fFxuICAgICAgdGhpcy5jb25maWcuY29udGVudFxuICB9XG5c biAgX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgY29uc3QgJHRpcCA9ICQodGhpcy5nZXRUaXBFbGVt ZW50KCkpXG4gICAgY29uc3QgdGFiQ2xhc3MgPSAkdGlwLmF0dHIoJ2NsYXNzJykubWF0Y2goQlND TFNfUFJFRklYX1JFR0VYKVxuICAgIGlmICh0YWJDbGFzcyAhPT0gbnVsbCAmJiB0YWJDbGFzcy5s ZW5ndGggPiAwKSB7XG4gICAgICAkdGlwLnJlbW92ZUNsYXNzKHRhYkNsYXNzLmpvaW4oJycpKVxu ICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBfalF1ZXJ5SW50ZXJmYWNlKGNv bmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGRh dGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkpXG4gICAgICBjb25zdCBfY29uZmlnID0gdHlwZW9m IGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsXG5cbiAgICAgIGlmICghZGF0YSAm JiAvZGlzcG9zZXxoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9 XG5cbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gbmV3IFBvcG92ZXIodGhpcywg X2NvbmZpZylcbiAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZLCBkYXRhKVxuICAgICAgfVxu XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5 cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3 IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG4g ICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4k LmZuW05BTUVdID0gUG9wb3Zlci5falF1ZXJ5SW50ZXJmYWNlXG4kLmZuW05BTUVdLkNvbnN0cnVj dG9yID0gUG9wb3ZlclxuJC5mbltOQU1FXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAkLmZuW05B TUVdID0gSlFVRVJZX05PX0NPTkZMSUNUXG4gIHJldHVybiBQb3BvdmVyLl9qUXVlcnlJbnRlcmZh Y2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9wb3ZlclxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLVxuICogQm9vdHN0cmFwICh2NC40LjEpOiBzY3JvbGxzcHkuanNcbiAqIExpY2Vuc2VkIHVu ZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJ Q0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAkIGZyb20gJ2pxdWVy eSdcbmltcG9ydCBVdGlsIGZyb20gJy4vdXRpbCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c biAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSAgICAg ICAgICAgICAgID0gJ3Njcm9sbHNweSdcbmNvbnN0IFZFUlNJT04gICAgICAgICAgICA9ICc0LjQu MSdcbmNvbnN0IERBVEFfS0VZICAgICAgICAgICA9ICdicy5zY3JvbGxzcHknXG5jb25zdCBFVkVO VF9LRVkgICAgICAgICAgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZICAgICAg ID0gJy5kYXRhLWFwaSdcbmNvbnN0IEpRVUVSWV9OT19DT05GTElDVCA9ICQuZm5bTkFNRV1cblxu Y29uc3QgRGVmYXVsdCA9IHtcbiAgb2Zmc2V0IDogMTAsXG4gIG1ldGhvZCA6ICdhdXRvJyxcbiAg dGFyZ2V0IDogJydcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIG9mZnNldCA6ICdudW1i ZXInLFxuICBtZXRob2QgOiAnc3RyaW5nJyxcbiAgdGFyZ2V0IDogJyhzdHJpbmd8ZWxlbWVudCkn XG59XG5cbmNvbnN0IEV2ZW50ID0ge1xuICBBQ1RJVkFURSAgICAgIDogYGFjdGl2YXRlJHtFVkVO VF9LRVl9YCxcbiAgU0NST0xMICAgICAgICA6IGBzY3JvbGwke0VWRU5UX0tFWX1gLFxuICBMT0FE X0RBVEFfQVBJIDogYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG59XG5cbmNvbnN0 IENsYXNzTmFtZSA9IHtcbiAgRFJPUERPV05fSVRFTSA6ICdkcm9wZG93bi1pdGVtJyxcbiAgRFJP UERPV05fTUVOVSA6ICdkcm9wZG93bi1tZW51JyxcbiAgQUNUSVZFICAgICAgICA6ICdhY3RpdmUn XG59XG5cbmNvbnN0IFNlbGVjdG9yID0ge1xuICBEQVRBX1NQWSAgICAgICAgOiAnW2RhdGEtc3B5 PVwic2Nyb2xsXCJdJyxcbiAgQUNUSVZFICAgICAgICAgIDogJy5hY3RpdmUnLFxuICBOQVZfTElT VF9HUk9VUCAgOiAnLm5hdiwgLmxpc3QtZ3JvdXAnLFxuICBOQVZfTElOS1MgICAgICAgOiAnLm5h di1saW5rJyxcbiAgTkFWX0lURU1TICAgICAgIDogJy5uYXYtaXRlbScsXG4gIExJU1RfSVRFTVMg ICAgICA6ICcubGlzdC1ncm91cC1pdGVtJyxcbiAgRFJPUERPV04gICAgICAgIDogJy5kcm9wZG93 bicsXG4gIERST1BET1dOX0lURU1TICA6ICcuZHJvcGRvd24taXRlbScsXG4gIERST1BET1dOX1RP R0dMRSA6ICcuZHJvcGRvd24tdG9nZ2xlJ1xufVxuXG5jb25zdCBPZmZzZXRNZXRob2QgPSB7XG4g IE9GRlNFVCAgIDogJ29mZnNldCcsXG4gIFBPU0lUSU9OIDogJ3Bvc2l0aW9uJ1xufVxuXG4vKipc biAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tXG4gKi9cblxuY2xhc3MgU2Nyb2xsU3B5IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29u ZmlnKSB7XG4gICAgdGhpcy5fZWxlbWVudCAgICAgICA9IGVsZW1lbnRcbiAgICB0aGlzLl9zY3Jv bGxFbGVtZW50ID0gZWxlbWVudC50YWdOYW1lID09PSAnQk9EWScgPyB3aW5kb3cgOiBlbGVtZW50 XG4gICAgdGhpcy5fY29uZmlnICAgICAgICA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAg dGhpcy5fc2VsZWN0b3IgICAgICA9IGAke3RoaXMuX2NvbmZpZy50YXJnZXR9ICR7U2VsZWN0b3Iu TkFWX0xJTktTfSxgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5fY29uZmln LnRhcmdldH0gJHtTZWxlY3Rvci5MSVNUX0lURU1TfSxgICtcbiAgICAgICAgICAgICAgICAgICAg ICAgICAgYCR7dGhpcy5fY29uZmlnLnRhcmdldH0gJHtTZWxlY3Rvci5EUk9QRE9XTl9JVEVNU31g XG4gICAgdGhpcy5fb2Zmc2V0cyAgICAgICA9IFtdXG4gICAgdGhpcy5fdGFyZ2V0cyAgICAgICA9 IFtdXG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ICA9IG51bGxcbiAgICB0aGlzLl9zY3JvbGxIZWln aHQgID0gMFxuXG4gICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vbihFdmVudC5TQ1JPTEwsIChl dmVudCkgPT4gdGhpcy5fcHJvY2VzcyhldmVudCkpXG5cbiAgICB0aGlzLnJlZnJlc2goKVxuICAg IHRoaXMuX3Byb2Nlc3MoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgVkVS U0lPTigpIHtcbiAgICByZXR1cm4gVkVSU0lPTlxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0 KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICAvLyBQdWJsaWNcblxuICByZWZyZXNo KCkge1xuICAgIGNvbnN0IGF1dG9NZXRob2QgPSB0aGlzLl9zY3JvbGxFbGVtZW50ID09PSB0aGlz Ll9zY3JvbGxFbGVtZW50LndpbmRvd1xuICAgICAgPyBPZmZzZXRNZXRob2QuT0ZGU0VUIDogT2Zm c2V0TWV0aG9kLlBPU0lUSU9OXG5cbiAgICBjb25zdCBvZmZzZXRNZXRob2QgPSB0aGlzLl9jb25m aWcubWV0aG9kID09PSAnYXV0bydcbiAgICAgID8gYXV0b01ldGhvZCA6IHRoaXMuX2NvbmZpZy5t ZXRob2RcblxuICAgIGNvbnN0IG9mZnNldEJhc2UgPSBvZmZzZXRNZXRob2QgPT09IE9mZnNldE1l dGhvZC5QT1NJVElPTlxuICAgICAgPyB0aGlzLl9nZXRTY3JvbGxUb3AoKSA6IDBcblxuICAgIHRo aXMuX29mZnNldHMgPSBbXVxuICAgIHRoaXMuX3RhcmdldHMgPSBbXVxuXG4gICAgdGhpcy5fc2Ny b2xsSGVpZ2h0ID0gdGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KClcblxuICAgIGNvbnN0IHRhcmdldHMg PSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3Ip KVxuXG4gICAgdGFyZ2V0c1xuICAgICAgLm1hcCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBsZXQg dGFyZ2V0XG4gICAgICAgIGNvbnN0IHRhcmdldFNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZy b21FbGVtZW50KGVsZW1lbnQpXG5cbiAgICAgICAgaWYgKHRhcmdldFNlbGVjdG9yKSB7XG4gICAg ICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXRTZWxlY3RvcilcbiAg ICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRC Q1IgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICBpZiAodGFyZ2V0 QkNSLndpZHRoIHx8IHRhcmdldEJDUi5oZWlnaHQpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gKGZh dCk6IHJlbW92ZSBza2V0Y2ggcmVsaWFuY2Ugb24galF1ZXJ5IHBvc2l0aW9uL29mZnNldFxuICAg ICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgJCh0YXJnZXQpW29mZnNldE1ldGhvZF0o KS50b3AgKyBvZmZzZXRCYXNlLFxuICAgICAgICAgICAgICB0YXJnZXRTZWxlY3RvclxuICAgICAg ICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbFxuICAg ICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0pXG4gICAgICAuc29ydCgoYSwgYikg PT4gYVswXSAtIGJbMF0pXG4gICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICB0aGlz Ll9vZmZzZXRzLnB1c2goaXRlbVswXSlcbiAgICAgICAgdGhpcy5fdGFyZ2V0cy5wdXNoKGl0ZW1b MV0pXG4gICAgICB9KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICAkLnJlbW92ZURhdGEodGhp cy5fZWxlbWVudCwgREFUQV9LRVkpXG4gICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vZmYoRVZF TlRfS0VZKVxuXG4gICAgdGhpcy5fZWxlbWVudCAgICAgICA9IG51bGxcbiAgICB0aGlzLl9zY3Jv bGxFbGVtZW50ID0gbnVsbFxuICAgIHRoaXMuX2NvbmZpZyAgICAgICAgPSBudWxsXG4gICAgdGhp cy5fc2VsZWN0b3IgICAgICA9IG51bGxcbiAgICB0aGlzLl9vZmZzZXRzICAgICAgID0gbnVsbFxu ICAgIHRoaXMuX3RhcmdldHMgICAgICAgPSBudWxsXG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ICA9 IG51bGxcbiAgICB0aGlzLl9zY3JvbGxIZWlnaHQgID0gbnVsbFxuICB9XG5cbiAgLy8gUHJpdmF0 ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVm YXVsdCxcbiAgICAgIC4uLnR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNv bmZpZyA6IHt9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcudGFyZ2V0ICE9PSAnc3Ry aW5nJykge1xuICAgICAgbGV0IGlkID0gJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcpXG4gICAg ICBpZiAoIWlkKSB7XG4gICAgICAgIGlkID0gVXRpbC5nZXRVSUQoTkFNRSlcbiAgICAgICAgJChj b25maWcudGFyZ2V0KS5hdHRyKCdpZCcsIGlkKVxuICAgICAgfVxuICAgICAgY29uZmlnLnRhcmdl dCA9IGAjJHtpZH1gXG4gICAgfVxuXG4gICAgVXRpbC50eXBlQ2hlY2tDb25maWcoTkFNRSwgY29u ZmlnLCBEZWZhdWx0VHlwZSlcblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9nZXRTY3Jv bGxUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHdpbmRvd1xuICAg ICAgPyB0aGlzLl9zY3JvbGxFbGVtZW50LnBhZ2VZT2Zmc2V0IDogdGhpcy5fc2Nyb2xsRWxlbWVu dC5zY3JvbGxUb3BcbiAgfVxuXG4gIF9nZXRTY3JvbGxIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRo aXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IHx8IE1hdGgubWF4KFxuICAgICAgZG9jdW1l bnQuYm9keS5zY3JvbGxIZWlnaHQsXG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Ny b2xsSGVpZ2h0XG4gICAgKVxuICB9XG5cbiAgX2dldE9mZnNldEhlaWdodCgpIHtcbiAgICByZXR1 cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93XG4gICAgICA/IHdpbmRvdy5pbm5lckhl aWdodCA6IHRoaXMuX3Njcm9sbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0 XG4gIH1cblxuICBfcHJvY2VzcygpIHtcbiAgICBjb25zdCBzY3JvbGxUb3AgICAgPSB0aGlzLl9n ZXRTY3JvbGxUb3AoKSArIHRoaXMuX2NvbmZpZy5vZmZzZXRcbiAgICBjb25zdCBzY3JvbGxIZWln aHQgPSB0aGlzLl9nZXRTY3JvbGxIZWlnaHQoKVxuICAgIGNvbnN0IG1heFNjcm9sbCAgICA9IHRo aXMuX2NvbmZpZy5vZmZzZXQgK1xuICAgICAgc2Nyb2xsSGVpZ2h0IC1cbiAgICAgIHRoaXMuX2dl dE9mZnNldEhlaWdodCgpXG5cbiAgICBpZiAodGhpcy5fc2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxI ZWlnaHQpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpXG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbFRv cCA+PSBtYXhTY3JvbGwpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuX3RhcmdldHNbdGhp cy5fdGFyZ2V0cy5sZW5ndGggLSAxXVxuXG4gICAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ICE9 PSB0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0KVxuICAgICAgfVxuICAg ICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAmJiBzY3JvbGxU b3AgPCB0aGlzLl9vZmZzZXRzWzBdICYmIHRoaXMuX29mZnNldHNbMF0gPiAwKSB7XG4gICAgICB0 aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsXG4gICAgICB0aGlzLl9jbGVhcigpXG4gICAgICByZXR1 cm5cbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXRMZW5ndGggPSB0aGlzLl9vZmZzZXRzLmxlbmd0 aFxuICAgIGZvciAobGV0IGkgPSBvZmZzZXRMZW5ndGg7IGktLTspIHtcbiAgICAgIGNvbnN0IGlz QWN0aXZlVGFyZ2V0ID0gdGhpcy5fYWN0aXZlVGFyZ2V0ICE9PSB0aGlzLl90YXJnZXRzW2ldICYm XG4gICAgICAgICAgc2Nyb2xsVG9wID49IHRoaXMuX29mZnNldHNbaV0gJiZcbiAgICAgICAgICAo dHlwZW9mIHRoaXMuX29mZnNldHNbaSArIDFdID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICAg ICAgICBzY3JvbGxUb3AgPCB0aGlzLl9vZmZzZXRzW2kgKyAxXSlcblxuICAgICAgaWYgKGlzQWN0 aXZlVGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbaV0pXG4g ICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2FjdGl2YXRlKHRhcmdldCkge1xuICAgIHRoaXMuX2Fj dGl2ZVRhcmdldCA9IHRhcmdldFxuXG4gICAgdGhpcy5fY2xlYXIoKVxuXG4gICAgY29uc3QgcXVl cmllcyA9IHRoaXMuX3NlbGVjdG9yXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcCgoc2Vs ZWN0b3IpID0+IGAke3NlbGVjdG9yfVtkYXRhLXRhcmdldD1cIiR7dGFyZ2V0fVwiXSwke3NlbGVj dG9yfVtocmVmPVwiJHt0YXJnZXR9XCJdYClcblxuICAgIGNvbnN0ICRsaW5rID0gJChbXS5zbGlj ZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcmllcy5qb2luKCcsJykpKSlcblxu ICAgIGlmICgkbGluay5oYXNDbGFzcyhDbGFzc05hbWUuRFJPUERPV05fSVRFTSkpIHtcbiAgICAg ICRsaW5rLmNsb3Nlc3QoU2VsZWN0b3IuRFJPUERPV04pLmZpbmQoU2VsZWN0b3IuRFJPUERPV05f VE9HR0xFKS5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKVxuICAgICAgJGxpbmsuYWRkQ2xhc3Mo Q2xhc3NOYW1lLkFDVElWRSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2V0IHRyaWdnZXJlZCBs aW5rIGFzIGFjdGl2ZVxuICAgICAgJGxpbmsuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSlcbiAg ICAgIC8vIFNldCB0cmlnZ2VyZWQgbGlua3MgcGFyZW50cyBhcyBhY3RpdmVcbiAgICAgIC8vIFdp dGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNp Ymxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuICAgICAgJGxpbmsucGFyZW50cyhTZWxlY3Rvci5O QVZfTElTVF9HUk9VUCkucHJldihgJHtTZWxlY3Rvci5OQVZfTElOS1N9LCAke1NlbGVjdG9yLkxJ U1RfSVRFTVN9YCkuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSlcbiAgICAgIC8vIEhhbmRsZSBz cGVjaWFsIGNhc2Ugd2hlbiAubmF2LWxpbmsgaXMgaW5zaWRlIC5uYXYtaXRlbVxuICAgICAgJGxp bmsucGFyZW50cyhTZWxlY3Rvci5OQVZfTElTVF9HUk9VUCkucHJldihTZWxlY3Rvci5OQVZfSVRF TVMpLmNoaWxkcmVuKFNlbGVjdG9yLk5BVl9MSU5LUykuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElW RSlcbiAgICB9XG5cbiAgICAkKHRoaXMuX3Njcm9sbEVsZW1lbnQpLnRyaWdnZXIoRXZlbnQuQUNU SVZBVEUsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRhcmdldFxuICAgIH0pXG4gIH1cblxuICBf Y2xlYXIoKSB7XG4gICAgW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRo aXMuX3NlbGVjdG9yKSlcbiAgICAgIC5maWx0ZXIoKG5vZGUpID0+IG5vZGUuY2xhc3NMaXN0LmNv bnRhaW5zKENsYXNzTmFtZS5BQ1RJVkUpKVxuICAgICAgLmZvckVhY2goKG5vZGUpID0+IG5vZGUu Y2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUuQUNUSVZFKSlcbiAgfVxuXG4gIC8vIFN0YXRpY1xu XG4gIHN0YXRpYyBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVh Y2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkp XG4gICAgICBjb25zdCBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29u ZmlnXG5cbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gbmV3IFNjcm9sbFNweSh0 aGlzLCBfY29uZmlnKVxuICAgICAgICAkKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpXG4gICAg ICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBp ZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJv dyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICAg IH1cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8q KlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tXG4gKi9cblxuJCh3aW5kb3cpLm9uKEV2ZW50LkxPQURfREFUQV9BUEksICgp ID0+IHtcbiAgY29uc3Qgc2Nyb2xsU3B5cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlT ZWxlY3RvckFsbChTZWxlY3Rvci5EQVRBX1NQWSkpXG4gIGNvbnN0IHNjcm9sbFNweXNMZW5ndGgg PSBzY3JvbGxTcHlzLmxlbmd0aFxuXG4gIGZvciAobGV0IGkgPSBzY3JvbGxTcHlzTGVuZ3RoOyBp LS07KSB7XG4gICAgY29uc3QgJHNweSA9ICQoc2Nyb2xsU3B5c1tpXSlcbiAgICBTY3JvbGxTcHku X2pRdWVyeUludGVyZmFjZS5jYWxsKCRzcHksICRzcHkuZGF0YSgpKVxuICB9XG59KVxuXG4vKipc biAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xu XG4kLmZuW05BTUVdID0gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2VcbiQuZm5bTkFNRV0uQ29u c3RydWN0b3IgPSBTY3JvbGxTcHlcbiQuZm5bTkFNRV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAg JC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICByZXR1cm4gU2Nyb2xsU3B5Ll9qUXVl cnlJbnRlcmZhY2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsU3B5XG4iLCIvKipcbiAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY0LjQuMSk6IHRhYi5qc1xuICogTGljZW5z ZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0 ZXIvTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICQgZnJvbSAn anF1ZXJ5J1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1F ICAgICAgICAgICAgICAgPSAndGFiJ1xuY29uc3QgVkVSU0lPTiAgICAgICAgICAgID0gJzQuNC4x J1xuY29uc3QgREFUQV9LRVkgICAgICAgICAgID0gJ2JzLnRhYidcbmNvbnN0IEVWRU5UX0tFWSAg ICAgICAgICA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgICAgICAgPSAnLmRh dGEtYXBpJ1xuY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltOQU1FXVxuXG5jb25zdCBF dmVudCA9IHtcbiAgSElERSAgICAgICAgICAgOiBgaGlkZSR7RVZFTlRfS0VZfWAsXG4gIEhJRERF TiAgICAgICAgIDogYGhpZGRlbiR7RVZFTlRfS0VZfWAsXG4gIFNIT1cgICAgICAgICAgIDogYHNo b3cke0VWRU5UX0tFWX1gLFxuICBTSE9XTiAgICAgICAgICA6IGBzaG93biR7RVZFTlRfS0VZfWAs XG4gIENMSUNLX0RBVEFfQVBJIDogYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxu fVxuXG5jb25zdCBDbGFzc05hbWUgPSB7XG4gIERST1BET1dOX01FTlUgOiAnZHJvcGRvd24tbWVu dScsXG4gIEFDVElWRSAgICAgICAgOiAnYWN0aXZlJyxcbiAgRElTQUJMRUQgICAgICA6ICdkaXNh YmxlZCcsXG4gIEZBREUgICAgICAgICAgOiAnZmFkZScsXG4gIFNIT1cgICAgICAgICAgOiAnc2hv dydcbn1cblxuY29uc3QgU2VsZWN0b3IgPSB7XG4gIERST1BET1dOICAgICAgICAgICAgICA6ICcu ZHJvcGRvd24nLFxuICBOQVZfTElTVF9HUk9VUCAgICAgICAgOiAnLm5hdiwgLmxpc3QtZ3JvdXAn LFxuICBBQ1RJVkUgICAgICAgICAgICAgICAgOiAnLmFjdGl2ZScsXG4gIEFDVElWRV9VTCAgICAg ICAgICAgICA6ICc+IGxpID4gLmFjdGl2ZScsXG4gIERBVEFfVE9HR0xFICAgICAgICAgICA6ICdb ZGF0YS10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLXRvZ2ds ZT1cImxpc3RcIl0nLFxuICBEUk9QRE9XTl9UT0dHTEUgICAgICAgOiAnLmRyb3Bkb3duLXRvZ2ds ZScsXG4gIERST1BET1dOX0FDVElWRV9DSElMRCA6ICc+IC5kcm9wZG93bi1tZW51IC5hY3RpdmUn XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBUYWIge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50 KSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnRcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxu ICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05cbiAgfVxuXG4gIC8v IFB1YmxpY1xuXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSAm JlxuICAgICAgICB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxF TUVOVF9OT0RFICYmXG4gICAgICAgICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1l LkFDVElWRSkgfHxcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUu RElTQUJMRUQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgdGFyZ2V0XG4gICAg bGV0IHByZXZpb3VzXG4gICAgY29uc3QgbGlzdEVsZW1lbnQgPSAkKHRoaXMuX2VsZW1lbnQpLmNs b3Nlc3QoU2VsZWN0b3IuTkFWX0xJU1RfR1JPVVApWzBdXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBV dGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudClcblxuICAgIGlmIChsaXN0 RWxlbWVudCkge1xuICAgICAgY29uc3QgaXRlbVNlbGVjdG9yID0gbGlzdEVsZW1lbnQubm9kZU5h bWUgPT09ICdVTCcgfHwgbGlzdEVsZW1lbnQubm9kZU5hbWUgPT09ICdPTCcgPyBTZWxlY3Rvci5B Q1RJVkVfVUwgOiBTZWxlY3Rvci5BQ1RJVkVcbiAgICAgIHByZXZpb3VzID0gJC5tYWtlQXJyYXko JChsaXN0RWxlbWVudCkuZmluZChpdGVtU2VsZWN0b3IpKVxuICAgICAgcHJldmlvdXMgPSBwcmV2 aW91c1twcmV2aW91cy5sZW5ndGggLSAxXVxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9 ICQuRXZlbnQoRXZlbnQuSElERSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVu dFxuICAgIH0pXG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSAkLkV2ZW50KEV2ZW50LlNIT1csIHtc biAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgfSlcblxuICAgIGlmIChwcmV2aW91 cykge1xuICAgICAgJChwcmV2aW91cykudHJpZ2dlcihoaWRlRXZlbnQpXG4gICAgfVxuXG4gICAg JCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudClcblxuICAgIGlmIChzaG93RXZlbnQu aXNEZWZhdWx0UHJldmVudGVkKCkgfHxcbiAgICAgICAgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZl bnRlZCgpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAg ICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXG4gICAgfVxuXG4g ICAgdGhpcy5fYWN0aXZhdGUoXG4gICAgICB0aGlzLl9lbGVtZW50LFxuICAgICAgbGlzdEVsZW1l bnRcbiAgICApXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGhp ZGRlbkV2ZW50ID0gJC5FdmVudChFdmVudC5ISURERU4sIHtcbiAgICAgICAgcmVsYXRlZFRhcmdl dDogdGhpcy5fZWxlbWVudFxuICAgICAgfSlcblxuICAgICAgY29uc3Qgc2hvd25FdmVudCA9ICQu RXZlbnQoRXZlbnQuU0hPV04sIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAg ICAgIH0pXG5cbiAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZGVuRXZlbnQpXG4gICAgICAk KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2hvd25FdmVudClcbiAgICB9XG5cbiAgICBpZiAodGFy Z2V0KSB7XG4gICAgICB0aGlzLl9hY3RpdmF0ZSh0YXJnZXQsIHRhcmdldC5wYXJlbnROb2RlLCBj b21wbGV0ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcGxldGUoKVxuICAgIH1cbiAgfVxuXG4g IGRpc3Bvc2UoKSB7XG4gICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKVxu ICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2FjdGl2 YXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBhY3RpdmVFbGVt ZW50cyA9IGNvbnRhaW5lciAmJiAoY29udGFpbmVyLm5vZGVOYW1lID09PSAnVUwnIHx8IGNvbnRh aW5lci5ub2RlTmFtZSA9PT0gJ09MJylcbiAgICAgID8gJChjb250YWluZXIpLmZpbmQoU2VsZWN0 b3IuQUNUSVZFX1VMKVxuICAgICAgOiAkKGNvbnRhaW5lcikuY2hpbGRyZW4oU2VsZWN0b3IuQUNU SVZFKVxuXG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlRWxlbWVudHNbMF1cbiAgICBjb25zdCBp c1RyYW5zaXRpb25pbmcgPSBjYWxsYmFjayAmJiAoYWN0aXZlICYmICQoYWN0aXZlKS5oYXNDbGFz cyhDbGFzc05hbWUuRkFERSkpXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB0aGlzLl90cmFu c2l0aW9uQ29tcGxldGUoXG4gICAgICBlbGVtZW50LFxuICAgICAgYWN0aXZlLFxuICAgICAgY2Fs bGJhY2tcbiAgICApXG5cbiAgICBpZiAoYWN0aXZlICYmIGlzVHJhbnNpdGlvbmluZykge1xuICAg ICAgY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25G cm9tRWxlbWVudChhY3RpdmUpXG5cbiAgICAgICQoYWN0aXZlKVxuICAgICAgICAucmVtb3ZlQ2xh c3MoQ2xhc3NOYW1lLlNIT1cpXG4gICAgICAgIC5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29t cGxldGUpXG4gICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24p XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBsZXRlKClcbiAgICB9XG4gIH1cblxuICBfdHJhbnNp dGlvbkNvbXBsZXRlKGVsZW1lbnQsIGFjdGl2ZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoYWN0aXZl KSB7XG4gICAgICAkKGFjdGl2ZSkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSlcblxuICAg ICAgY29uc3QgZHJvcGRvd25DaGlsZCA9ICQoYWN0aXZlLnBhcmVudE5vZGUpLmZpbmQoXG4gICAg ICAgIFNlbGVjdG9yLkRST1BET1dOX0FDVElWRV9DSElMRFxuICAgICAgKVswXVxuXG4gICAgICBp ZiAoZHJvcGRvd25DaGlsZCkge1xuICAgICAgICAkKGRyb3Bkb3duQ2hpbGQpLnJlbW92ZUNsYXNz KENsYXNzTmFtZS5BQ1RJVkUpXG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmUuZ2V0QXR0cmli dXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgIGFjdGl2ZS5zZXRBdHRyaWJ1dGUoJ2Fy aWEtc2VsZWN0ZWQnLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkKGVsZW1lbnQpLmFk ZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpXG4gICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdy b2xlJykgPT09ICd0YWInKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxl Y3RlZCcsIHRydWUpXG4gICAgfVxuXG4gICAgVXRpbC5yZWZsb3coZWxlbWVudClcblxuICAgIGlm IChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUuRkFERSkpIHtcbiAgICAgIGVs ZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWUuU0hPVylcbiAgICB9XG5cbiAgICBpZiAoZWxl bWVudC5wYXJlbnROb2RlICYmICQoZWxlbWVudC5wYXJlbnROb2RlKS5oYXNDbGFzcyhDbGFzc05h bWUuRFJPUERPV05fTUVOVSkpIHtcbiAgICAgIGNvbnN0IGRyb3Bkb3duRWxlbWVudCA9ICQoZWxl bWVudCkuY2xvc2VzdChTZWxlY3Rvci5EUk9QRE9XTilbMF1cblxuICAgICAgaWYgKGRyb3Bkb3du RWxlbWVudCkge1xuICAgICAgICBjb25zdCBkcm9wZG93blRvZ2dsZUxpc3QgPSBbXS5zbGljZS5j YWxsKGRyb3Bkb3duRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkRST1BET1dOX1RP R0dMRSkpXG5cbiAgICAgICAgJChkcm9wZG93blRvZ2dsZUxpc3QpLmFkZENsYXNzKENsYXNzTmFt ZS5BQ1RJVkUpXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4 cGFuZGVkJywgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxi YWNrKClcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgX2pRdWVyeUludGVy ZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAg IGNvbnN0ICR0aGlzID0gJCh0aGlzKVxuICAgICAgbGV0IGRhdGEgPSAkdGhpcy5kYXRhKERBVEFf S0VZKVxuXG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBUYWIodGhpcylc biAgICAgICAgJHRoaXMuZGF0YShEQVRBX0tFWSwgZGF0YSlcbiAgICAgIH1cblxuICAgICAgaWYg KHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtj b25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io YE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuICAgICAgICBkYXRh W2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAq L1xuXG4kKGRvY3VtZW50KVxuICAub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRB VEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgp XG4gICAgVGFiLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKHRoaXMpLCAnc2hvdycpXG4gIH0pXG5c bi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu ICovXG5cbiQuZm5bTkFNRV0gPSBUYWIuX2pRdWVyeUludGVyZmFjZVxuJC5mbltOQU1FXS5Db25z dHJ1Y3RvciA9IFRhYlxuJC5mbltOQU1FXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAkLmZuW05B TUVdID0gSlFVRVJZX05PX0NPTkZMSUNUXG4gIHJldHVybiBUYWIuX2pRdWVyeUludGVyZmFjZVxu fVxuXG5leHBvcnQgZGVmYXVsdCBUYWJcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAq IEJvb3RzdHJhcCAodjQuNC4xKTogdG9hc3QuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0 cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSdcbmltcG9ydCBV dGlsIGZyb20gJy4vdXRpbCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50 c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSAgICAgICAgICAgICAgID0g J3RvYXN0J1xuY29uc3QgVkVSU0lPTiAgICAgICAgICAgID0gJzQuNC4xJ1xuY29uc3QgREFUQV9L RVkgICAgICAgICAgID0gJ2JzLnRvYXN0J1xuY29uc3QgRVZFTlRfS0VZICAgICAgICAgID0gYC4k e0RBVEFfS0VZfWBcbmNvbnN0IEpRVUVSWV9OT19DT05GTElDVCA9ICQuZm5bTkFNRV1cblxuY29u c3QgRXZlbnQgPSB7XG4gIENMSUNLX0RJU01JU1MgOiBgY2xpY2suZGlzbWlzcyR7RVZFTlRfS0VZ fWAsXG4gIEhJREUgICAgICAgICAgOiBgaGlkZSR7RVZFTlRfS0VZfWAsXG4gIEhJRERFTiAgICAg ICAgOiBgaGlkZGVuJHtFVkVOVF9LRVl9YCxcbiAgU0hPVyAgICAgICAgICA6IGBzaG93JHtFVkVO VF9LRVl9YCxcbiAgU0hPV04gICAgICAgICA6IGBzaG93biR7RVZFTlRfS0VZfWBcbn1cblxuY29u c3QgQ2xhc3NOYW1lID0ge1xuICBGQURFICAgIDogJ2ZhZGUnLFxuICBISURFICAgIDogJ2hpZGUn LFxuICBTSE9XICAgIDogJ3Nob3cnLFxuICBTSE9XSU5HIDogJ3Nob3dpbmcnXG59XG5cbmNvbnN0 IERlZmF1bHRUeXBlID0ge1xuICBhbmltYXRpb24gOiAnYm9vbGVhbicsXG4gIGF1dG9oaWRlICA6 ICdib29sZWFuJyxcbiAgZGVsYXkgICAgIDogJ251bWJlcidcbn1cblxuY29uc3QgRGVmYXVsdCA9 IHtcbiAgYW5pbWF0aW9uIDogdHJ1ZSxcbiAgYXV0b2hpZGUgIDogdHJ1ZSxcbiAgZGVsYXkgICAg IDogNTAwXG59XG5cbmNvbnN0IFNlbGVjdG9yID0ge1xuICBEQVRBX0RJU01JU1MgOiAnW2RhdGEt ZGlzbWlzcz1cInRvYXN0XCJdJ1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xh c3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgVG9hc3Qge1xu ICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZWxl bWVudFxuICAgIHRoaXMuX2NvbmZpZyAgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRo aXMuX3RpbWVvdXQgPSBudWxsXG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8v IEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05c biAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRU eXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRc biAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHNob3coKSB7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0g JC5FdmVudChFdmVudC5TSE9XKVxuXG4gICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dF dmVudClcbiAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICBy ZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAg dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZS5GQURFKVxuICAgIH1cblxuICAg IGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3Qu cmVtb3ZlKENsYXNzTmFtZS5TSE9XSU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3Qu YWRkKENsYXNzTmFtZS5TSE9XKVxuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZl bnQuU0hPV04pXG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgICAg dGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGlkZSgp XG4gICAgICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0 aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lLkhJREUpXG4gICAgVXRpbC5y ZWZsb3codGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xh c3NOYW1lLlNIT1dJTkcpXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAg IGNvbnN0IHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJv bUVsZW1lbnQodGhpcy5fZWxlbWVudClcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KVxuICAgICAg ICAub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNvbXBsZXRlKVxuICAgICAgICAuZW11bGF0ZVRy YW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21w bGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQu Y2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZS5TSE9XKSkge1xuICAgICAgcmV0dXJuXG4gICAg fVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gJC5FdmVudChFdmVudC5ISURFKVxuXG4gICAgJCh0 aGlzLl9lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudClcbiAgICBpZiAoaGlkZUV2ZW50LmlzRGVm YXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jbG9z ZSgpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0 KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG5cbiAgICBpZiAodGhpcy5fZWxlbWVudC5jbGFz c0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lLlNIT1cpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNs YXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lLlNIT1cpXG4gICAgfVxuXG4gICAgJCh0aGlzLl9lbGVt ZW50KS5vZmYoRXZlbnQuQ0xJQ0tfRElTTUlTUylcblxuICAgICQucmVtb3ZlRGF0YSh0aGlzLl9l bGVtZW50LCBEQVRBX0tFWSlcbiAgICB0aGlzLl9lbGVtZW50ID0gbnVsbFxuICAgIHRoaXMuX2Nv bmZpZyAgPSBudWxsXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcp IHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uJCh0aGlzLl9l bGVtZW50KS5kYXRhKCksXG4gICAgICAuLi50eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBj b25maWcgPyBjb25maWcgOiB7fVxuICAgIH1cblxuICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKFxu ICAgICAgTkFNRSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIHRoaXMuY29uc3RydWN0b3IuRGVmYXVs dFR5cGVcbiAgICApXG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfc2V0TGlzdGVuZXJz KCkge1xuICAgICQodGhpcy5fZWxlbWVudCkub24oXG4gICAgICBFdmVudC5DTElDS19ESVNNSVNT LFxuICAgICAgU2VsZWN0b3IuREFUQV9ESVNNSVNTLFxuICAgICAgKCkgPT4gdGhpcy5oaWRlKClc biAgICApXG4gIH1cblxuICBfY2xvc2UoKSB7XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7 XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lLkhJREUpXG4gICAg ICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQuSElEREVOKVxuICAgIH1cblxuICAgIHRo aXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUuU0hPVylcbiAgICBpZiAodGhp cy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9uID0g VXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KVxuXG4g ICAgICAkKHRoaXMuX2VsZW1lbnQpXG4gICAgICAgIC5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwg Y29tcGxldGUpXG4gICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRp b24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBsZXRlKClcbiAgICB9XG4gIH1cblxuICAvLyBT dGF0aWNcblxuICBzdGF0aWMgX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4g dGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0ICRlbGVtZW50ID0gJCh0aGlzKVxu ICAgICAgbGV0IGRhdGEgICAgICAgPSAkZWxlbWVudC5kYXRhKERBVEFfS0VZKVxuICAgICAgY29u c3QgX2NvbmZpZyAgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWdcblxuICAg ICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgVG9hc3QodGhpcywgX2NvbmZpZylc biAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0tFWSwgZGF0YSlcbiAgICAgIH1cblxuICAgICAg aWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0 YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy b3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAg IGRhdGFbY29uZmlnXSh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuJC5m bltOQU1FXSAgICAgICAgICAgICA9IFRvYXN0Ll9qUXVlcnlJbnRlcmZhY2VcbiQuZm5bTkFNRV0u Q29uc3RydWN0b3IgPSBUb2FzdFxuJC5mbltOQU1FXS5ub0NvbmZsaWN0ICA9ICgpID0+IHtcbiAg JC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICByZXR1cm4gVG9hc3QuX2pRdWVyeUlu dGVyZmFjZVxufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdFxuIl19ClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQo= --00000000000002fd1c0654d32a40--