Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1apxq1-0003at-GT for pgadmin-hackers@arkaria.postgresql.org; Tue, 12 Apr 2016 12:54:38 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1apxq1-0006FU-0h for pgadmin-hackers@arkaria.postgresql.org; Tue, 12 Apr 2016 12:54:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1apvhH-0000eS-LY for pgadmin-hackers@postgresql.org; Tue, 12 Apr 2016 10:37:27 +0000 Received: from mail-vk0-x234.google.com ([2607:f8b0:400c:c05::234]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1apvgr-0006yj-9d for pgadmin-hackers@postgresql.org; Tue, 12 Apr 2016 10:37:27 +0000 Received: by mail-vk0-x234.google.com with SMTP id c4so18371985vkb.3 for ; Tue, 12 Apr 2016 03:37:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to; bh=6tKtrGkahNu4ruh4jyxVxlk1kMxZMc/8Goa+QRfWAKw=; b=VgDxBJCyFpABZT+COGIXzjZV2S+BqwcIn6LWMCZg5E8A/H5CdpM1uDjNoNwokCEqXy 33IfvR9wzSBD2N8C5/+D9gvbjFxM5k5AOVbTQNsnaTsQj/m2H4Vy/Ssrv/4cC4DROD0v jE349bPOrd/htBJoPlO9rvBoOOsKJ1c8/AjVb0zd2J5rjE2aqeaibibwgSEX6mD2zcKY mbKMm0pbtQY4b+y95sYMJogAfEdt4OzOYepJtIREdanPzRkkaxURoV0LtMIuj5fKpGYF OWQqW8upBsmCUXERZICwUkgT5swrh/ZoXAcK8KhnG/4+7wQvxgYtmVjRWxxem+rEOj1b 3oWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to; bh=6tKtrGkahNu4ruh4jyxVxlk1kMxZMc/8Goa+QRfWAKw=; b=lcEkI+Zwn4g0GYSwWOAegOm6e159Rx0ODiki4b40bVhH3yzq2iNQJvThsuB32yN3Ms 5ZzfRxUhjv02hKaCQREhv6vil/CHXiSTkz48ibE0zLB5H4tGNylx3M7s8VwoNDePbjTx BCnNayMP6nHgMRuIAZv4ShqoQu5hXIoHJRUeGHc3yU69cz5eNAXwDmxEjw/A4IYDluMx wi3u7aPVSBtEnd2W1sdl1LtiEa2MM3Y752bZvQ1ojFTaqUWNRXYyCT1JPYXD1lvU1QMu yDW6Vqx4kDgNWdHaYMcYBjYPaFmcc7N5cJCHOurwkAgQes9daaiA2se5F59WE4bPiWmx G3uw== X-Gm-Message-State: AOPr4FWOgdBZkxYuLyQLlvIgDiXWEzKpSmDnIQDWif58mYmzQTEkFwbGsN9HRLKdY7ZhNXftsPfvrpJIAIXCSmiq MIME-Version: 1.0 X-Received: by 10.31.170.196 with SMTP id t187mr1260190vke.66.1460457419368; Tue, 12 Apr 2016 03:36:59 -0700 (PDT) Received: by 10.31.164.75 with HTTP; Tue, 12 Apr 2016 03:36:59 -0700 (PDT) In-Reply-To: References: Date: Tue, 12 Apr 2016 16:06:59 +0530 Message-ID: Subject: Re: PATCH: graphical explain From: Sanket Mehta To: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a114325ecb142880530473db8 X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a114325ecb142880530473db8 Content-Type: multipart/alternative; boundary=001a114325ecb142840530473db6 --001a114325ecb142840530473db6 Content-Type: text/plain; charset=UTF-8 Hi, Please do ignore previous patch as it contains trailing whitespaces. PFA the revised patch after resolving this issue. Regards, Sanket Mehta Sr Software engineer Enterprisedb On Mon, Apr 11, 2016 at 10:04 PM, Sanket Mehta < sanket.mehta@enterprisedb.com> wrote: > Hi, > > PFA the patch for graphical explain feature. > > It consists of explain.js, __init__.py and demo_explain.html, snap_svg.js > and snap_svg-min.js file. > > Currently I have placed hard coded JSON data in demo_explain.html file to > display graphical output; which will be replace by actual output user get > from server in JSON format. > > Use below URL to access graphical output: > > *http://localhost:5050/misc/explain > where 5050 is the port your web server is running on* > > To test the patch, user can replace plan data (stored in 'data' variable) > in demo_explain.html with other valid plan data in JSON format and run the > above URL. > > Please review the patch and provide comments for the same. > > TODO: Integration of graphical explain into sql editor > > > Regards, > Sanket Mehta > Sr Software engineer > Enterprisedb > --001a114325ecb142840530473db6 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please do ignore previous patch as = it contains trailing whitespaces.
PFA the revised patch after res= olving this issue.



Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb

On Mon, Apr 11, 2016 at 10:04 PM, Sanket Meh= ta <sanket.mehta@enterprisedb.com> wrote:
Hi,

PFA the= patch for graphical explain feature.

It consists = of explain.js, __init__.py and demo_explain.html, snap_svg.js and snap_svg-= min.js file.

Currently I have placed hard coded JS= ON data in demo_explain.html file to display graphical output; which will b= e replace by actual output user get from server in JSON format.
<= br>
Use below URL to access graphical output:

h= ttp://localhost:5050/misc/explain where 5050 is the port your web serve= r is running on

To test the patch, = user can replace plan data (stored in 'data' variable) in demo_expl= ain.html with other valid plan data in JSON format and run the above URL.

Please review the patch and provide comments for th= e same.

TODO: Integration of graphical explain int= o sql editor


Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb

--001a114325ecb142840530473db6-- --001a114325ecb142880530473db8 Content-Type: text/x-patch; charset=UTF-8; name="graphics_explainv1.patch" Content-Disposition: attachment; filename="graphics_explainv1.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_imxamr071 ZGlmZiAtLWdpdCBhL2xpYnJhcmllcy50eHQgYi9saWJyYXJpZXMudHh0Cmlu ZGV4IGNkMDFjMjQuLmMzMzc4ODEgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy50 eHQKKysrIGIvbGlicmFyaWVzLnR4dApAQCAtMTAsMTQgKzEwLDEzIEBAIE1v ZGVybml6ciAgICAgICAgICAgMi42LjIgICAgICAgTUlUL0JTRCAgICAgIGh0 dHA6Ly9tb2Rlcm5penIuY29tLwogQWxlcnRpZnlKUyAgICAgICAgICAxLjEu MCAgICAgICBNSVQgICAgICAgICAgaHR0cDovL2FsZXJ0aWZ5anMuY29tLwog Q29kZU1pcnJvciAgICAgICAgICA0LjEyICAgICAgICBNSVQgICAgICAgICAg aHR0cDovL2NvZGVtaXJyb3IubmV0LwogYWNpVHJlZSAgICAgICAgICAgICA0 LjUuMC1yYy43ICBNSVQvR1BMICAgICAgaHR0cDovL2Fjb2Rlcmluc2lnaHRz LnJvL2VuL2FjaVRyZWUtdHJlZS12aWV3LXdpdGgtalF1ZXJ5Ci1jb250ZXh0 TWVudSAgICAgICAgIDIuMS4wICAgICAgIE1JVCAgICAgICAgICBodHRwczov L2dpdGh1Yi5jb20vc3dpc25sL2pRdWVyeS1jb250ZXh0TWVudQogd2NEb2Nr ZXIgICAgICAgICAgICAwZjU2OTAzMThjICBNSVQvR1BMICAgICAgaHR0cHM6 Ly9naXRodWIuY29tL1dlYkNhYmluL3djRG9ja2VyCiBSZXF1aXJlLmpzICAg ICAgICAgIDIuMS4xOCAgICAgIEJTRC9NSVQgICAgICBodHRwOi8vcmVxdWly ZWpzLm9yZy8KIFVuZGVyc2NvcmUuanMgICAgICAgMS44LjMgICAgICAgTUlU ICAgICAgICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnLwogVW5kZXJzY29y ZS5zdHJpbmcgICAzODdhYjcyZDQ5ICBNSVQgICAgICAgICAgaHR0cDovL2Vw ZWxpLmdpdGh1Yi5pby91bmRlcnNjb3JlLnN0cmluZy8KIEJhY2tmb3JtLmpz ICAgICAgICAgNTg1OWI0ZjlkYiAgTUlUICAgICAgICAgIGh0dHBzOi8vZ2l0 aHViLmNvbS9BbWlsaWFBcHAvYmFja2Zvcm0KIEJhY2tib25lICAgICAgICAg ICAgMS4xLjIgICAgICAgTUlUICAgICAgICAgIGh0dHA6Ly9iYWNrYm9uZWpz Lm9yZwotZm9udC1Bd2Vzb21lICAgICAgICA0LjUgICAgICAgICBTSUwgT0ZM ICAgICAgaHR0cDovL2ZvcnRhd2Vzb21lLmdpdGh1Yi5pby9Gb250LUF3ZXNv bWUvCitmb250LUF3ZXNvbWUgICAgICAgIDQuMyAgICAgICAgIFNJTCBPRkwg ICAgICBodHRwOi8vZm9ydGF3ZXNvbWUuZ2l0aHViLmlvL0ZvbnQtQXdlc29t ZS8KIGZvbnQtbWZpenogICAgICAgICAgMS4yICAgICAgICAgTUlUICAgICAg ICAgIGh0dHA6Ly9maXp6ZWQuY29tL29zcy9mb250LW1maXp6CiBiYWNrZ3Jp ZC5qcyAgICAgICAgIDAuMy41ICAgICAgIE1JVCAgICAgICAgICBodHRwOi8v YmFja2dyaWRqcy5jb20vCiBiYWNrYm9uZS51bmRvICAgICAgIDAuMiAgICAg ICAgIE1JVCAgICAgICAgICBodHRwOi8vYmFja2JvbmUudW5kb2pzLmNvbS8K QEAgLTI3LDMgKzI2LDQgQEAgYmFja2dyaWQtZmlsdGVyICAgICAwMWIyYjIx ICAgICBNSVQgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3d5dWVuaG8v YmFja2dyaWQKIGJhY2tib25lLnBhZ2luYXRvciAgMi4wLjMgICAgICAgTUlU ICAgICAgICAgIGh0dHA6Ly9naXRodWIuY29tL2JhY2tib25lLXBhZ2luYXRv ci9iYWNrYm9uZS5wYWdpbmF0b3IKIGJhY2tncmlkLXBhZ2luYXRvciAgMDM2 MzJkZiAgICAgTUlUICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS93eXVl bmhvL2JhY2tncmlkLXBhZ2luYXRvcgogYmFja2dyaWQtc2VsZWN0LWFsbCAx YTAwMDUzICAgICBNSVQgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3d5 dWVuaG8vYmFja2dyaWQtc2VsZWN0LWFsbAorU25hcC5zdmcJICAgIDAuNC4x CUFQQUNIRQkgICAgIGh0dHA6Ly9zbmFwc3ZnLmlvLwpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vbWlzYy9fX2luaXRfXy5weSBiL3dlYi9wZ2FkbWluL21p c2MvX19pbml0X18ucHkKaW5kZXggZjQ2MWNiZS4uZDcxNWQwYyAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vbWlzYy9fX2luaXRfXy5weQorKysgYi93ZWIv cGdhZG1pbi9taXNjL19faW5pdF9fLnB5CkBAIC05LDI1ICs5LDQ5IEBACiAK ICIiIkEgYmx1ZXByaW50IG1vZHVsZSBwcm92aWRpbmcgdXRpbGl0eSBmdW5j dGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbi4iIiIKIAotaW1wb3J0IGRhdGV0 aW1lCi1mcm9tIGZsYXNrIGltcG9ydCBzZXNzaW9uLCBjdXJyZW50X2FwcAor ZnJvbSBmbGFzayBpbXBvcnQgdXJsX2ZvciwgcmVuZGVyX3RlbXBsYXRlCiBm cm9tIHBnYWRtaW4udXRpbHMgaW1wb3J0IFBnQWRtaW5Nb2R1bGUKIGltcG9y dCBwZ2FkbWluLnV0aWxzLmRyaXZlciBhcyBkcml2ZXIKK2ltcG9ydCBjb25m aWcKIAogTU9EVUxFX05BTUUgPSAnbWlzYycKIAorY2xhc3MgTWlzY01vZHVs ZShQZ0FkbWluTW9kdWxlKToKKworICAgIGRlZiBnZXRfb3duX2phdmFzY3Jp cHRzKHNlbGYpOgorICAgICAgICBzY3JpcHRzID0gW3sKKyAgICAgICAgICAg ICAgICAnbmFtZSc6ICdwZ2FkbWluLm1pc2MuZXhwbGFpbicsCisgICAgICAg ICAgICAgICAgJ3BhdGgnOiB1cmxfZm9yKCdtaXNjLnN0YXRpYycsIGZpbGVu YW1lPSdleHBsYWluL2pzL2V4cGxhaW4nKSwKKyAgICAgICAgICAgICAgICAn cHJlbG9hZGVkJzogRmFsc2UKKyAgICAgICAgICAgICAgICB9LHsKKyAgICAg ICAgICAgICAgICAnbmFtZSc6ICdzbmFwLnN2ZycsCisgICAgICAgICAgICAg ICAgJ3BhdGgnOiB1cmxfZm9yKAorICAgICAgICAgICAgICAgICAgICAnbWlz Yy5zdGF0aWMnLCBmaWxlbmFtZT0nZXhwbGFpbi9qcy8nICsgKAorICAgICAg ICAgICAgICAgICAgICAgICAgJ3NuYXAuc3ZnJyBpZiAgY29uZmlnLkRFQlVH IGVsc2UgJ3NuYXAuc3ZnLW1pbicKKyAgICAgICAgICAgICAgICAgICAgICAg ICkpLAorICAgICAgICAgICAgICAgICdwcmVsb2FkZWQnOiBGYWxzZQorICAg ICAgICAgICAgICAgICB9XQorICAgICAgICByZXR1cm4gc2NyaXB0cworCiAj IEluaXRpYWxpc2UgdGhlIG1vZHVsZQotYmx1ZXByaW50ID0gUGdBZG1pbk1v ZHVsZShNT0RVTEVfTkFNRSwgX19uYW1lX18sCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIHVybF9wcmVmaXg9JycpCitibHVlcHJpbnQgPSBNaXNjTW9k dWxlKE1PRFVMRV9OQU1FLCBfX25hbWVfXywgc3RhdGljX3VybF9wYXRoPSIv c3RhdGljIikKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMg QSBzcGVjaWFsIFVSTCB1c2VkIHRvICJwaW5nIiB0aGUgc2VydmVyCiAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0KIEBibHVlcHJpbnQucm91 dGUoIi9waW5nIiwgbWV0aG9kcz0oJ2dldCcsICdwb3N0JykpCiBkZWYgcGlu ZygpOgogICAgICIiIkdlbmVyYXRlIGEgIlBJTkciIHJlc3BvbnNlIHRvIGlu ZGljYXRlIHRoYXQgdGhlIHNlcnZlciBpcyBhbGl2ZS4iIiIKICAgICBkcml2 ZXIucGluZygpCiAKICAgICByZXR1cm4gIlBJTkciCisKKyMgVE9ETzo6IFRo aXMgaXMgYSBkZW1vIHVybCwgcmVtb3ZlIGl0IGxhdGVyLgorQGJsdWVwcmlu dC5yb3V0ZSgiL2V4cGxhaW4iKQorZGVmIGRlbW8oKToKKyAgICByZXR1cm4g cmVuZGVyX3RlbXBsYXRlKCdkZW1vX2V4cGxhaW4uaHRtbCcpCisKK0BibHVl cHJpbnQucm91dGUoIi9zYW1wbGUiKQorZGVmIHNhbXBsZSgpOgorICAgIHJl dHVybiByZW5kZXJfdGVtcGxhdGUoJ3NhbXBsZS5odG1sJykKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2Fn Z3JlZ2F0ZS5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9hZ2dyZWdhdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjZiZmU3NWQ5MDlmNTA5MmM0ZDNiYTg5NzhjNzVmYmM1N2Q3ZjYwNmQKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDU3NAp6Y21WLUUwPlMtPlApPGg7M0t8 TGswMDBlMU5KTFRxMDAxJW8wMDEldzFeQHM2OXpUZSYwMDAwNGIzI2N9Mm5Z eFcKemQ8Yk5TMDAwMDlhN2JCbTAwMGZ3MDAwZncwWVdJN2NtTXpaOEZXUWhi Vz85O2JhIUVMV2RMX35jUD9wZVlqYX5eCnphQWh1VWElWT9GSlFASDEwbFBe PUt+IWpnP1VfdyMhIVFzPXBOclI3Nm5jYEpBaUV5ZnlQVXUkRj81bGchOWB0 RQp6clZkb3JqSTZPIypCPU4xUTR+R1RrN3VPREltWiQ3UWhFY3FiYnsyVCEr XkFzTmxudnF6fTB2IU9aQ3BWY2crdSkKelNsMDNvSC15bGNHeSEpRmowOXU9 VU4+JG1NSVgrJkh8YjxhalAhZ3pwe2Y8TjJ0MzhlMSh9T1l6KFgpXlo5U0Rt CnphTCRQYiY7Y1h4ODV0d2MzRCs5fVlZd1d0WChuNjF0Z0xBWlZoQSZBMFpE b3hgbX1mX28mO0xwPTNefFRaQW00Pwp6QjhELXV3MkhrJjc3eEx+R0QrSDhZ aHtMKy1Efm9uUlU2NE4kbUN7ejlaYFo8NCQldXlEbih0VXVCQnFpVEU+QCoK em5lNj5ZRFZWSVRefFl8dSYyJStZS3hRNEghWktOOCtVazBrd0pLUGpXJjwo PkAkUGpBZTRSQ09uU24lTnIwKD1QCnpZaXxmSjA0Vl9obkwkY0gwSzMmJTtz el9WPUJnUUQpY20kKTJ2dmhzNkAqX2lzZHJCZmM4a0R7eWc9N2drdElURgp6 K1BHRnUyITBPZUxXZ3U+NUxGcDNEOXhvdXJMIWJRdSVhP3dke3JScUZJdmkr K3s9USEmPmFhViVLVGF7ZFM7MmMKeiQ1bzNJaEVPVHlUMzd4NjFwSzMwLUpY NEtiQVM3UGs8NTtSX1NSdXM+amJHeUNyRUFqMCEjWD9QV3VyT3k4citICk0w Nypxb002TjwkZj5WVS0kXlpaVwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfYXBwZW5kLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X2FwcGVuZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uMDE3YTIwNjhiNzM1ZjEzY2I4OWEzYmNiMjgzMmU1ODgwZDE3ZGY1NgpH SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTE2Mgp6Y21WOzUxYTxwflApPGg7 M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1z MDAwMVcKenJwR3BqIUVlcChMY1FybnpVZygmP3xJUGdSbEAwcCliTTc9Pn10 dkVaXzRZSSszfGJNP1NqJG1ycno/NyliNWhqCnpAMn16VzEqaFJuIVJaXlc8 NkZoK1YjbiheeDgrZDI9V0VDNGErYWFOazJkdTEkbmZtOUA5TVNoPjlxM2cj cUgmPgp6P2N9aVI8Rk43UyF8Pj9CPikpO0ctbUwxfnRNQkIkPiprO0Q+JGQ2 T24me3R8PyZoPVMrbWAwb2w8ZVdJPEk8MWYKeigyZVFac3B7akw9LXJzKil7 XjFPaXxOXj88a2dZbih+I29Nak9mPjxAOTRBYjtrP0pIYkAxbEU9aFVSOykx Jk8mCnp4IX1yKS1vPUk5IS1VPHpnNjdlby1eaHBNJiFPaGdxVElpTDxqJFko PURfQ0Nxd0NxVzxqdFByJSUwPVJwNCt7RAp6K1BaeSlzYm9AKDhLdWkpc0wq SnUpb2laWGFrQWljd2RIen1tQzxIdihhWCY3eXVSJGR6d09TPl4zbD1xIU5U c3QKeiNQOEc4XlZRWSMkakk9PyQ/P2p8QCE4dC0tcm8xdSpZKUF5X3FASUFy Plcrc3NeYERJP3lheHN1ZChVSCNxWTwrCnpAM3BxO3g0NyVMeCRNLWBedkIy V2lJKD57MDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5D Mwp6WWQhen4wenBZY0t+ellgP1UzdEo1PlhoJj9TekdlcUokTExEPWZHTyVT QiplaygoPllPKWkyVzN2T2sjQ1NZaTQKem5SZlNJWis5bWZ1eVpJSlhabGRq aGotP2tkNEswUSZvZVVlVSNlfihNWn0zaSZgcGhJXmNLM1Upb1JEaypxeXQm CnphV3A9bSpINUMhRFRDbzIhWGdAQChLdzJ4Tyh4VFFedVRPMz4oSW5RdHlZ aHdXQGRCLUd7fE44JnNgcD1lPG5eRwp6MDwjdjJXJWdvUERhcjttYHlCMG5k OGRuVTB+V0QoSlJYWld5K0hZVjN4MlElZjxZRlhwLWA5YGo2QDw8OENoN2cK ejEwOVM7b3hwXnt2R15kdzg7THxIQEdrfWVHX2NWYGteeWNoN1VTe0FqfSNR T3RmWmpUNnBXbjA5cTBLSjdJX1NjCnpoIWdNUF47JjFhPUoocWo7OXl6ajNi Ozhnb2BPXzVveXA9cUNhM1QlVSErSlJMdm81KEVYUEFTemdqNWJrLWxQKwp6 TzBuQD11OVN3JVlOMWRqQSh4QmdPUW4xVSkoVndNNl80MmJfQnB2Rio2Q1c4 UV5lSTJuVDslRCVoaFZfKzhUNHYKekVJU1Y/NDh5cjAjcSgrVHtrM0FiMkRR eilmT2kycDhjbiQ1NmlhR35lMH5GcGx9ZSl1Xj03anY7MU0+RnhLd1BwCnoo cjlkZ0t0X0hvdyVUYU8jey1hY2hVNFV4X19VSXVTWE5UaGxAdjhXNVUjRFV0 N31XI0I1b3cmTnpZYVBNa0ptLQp6YCszI0I1djFIfktOcW5aKE04LUFkdDc9 cXZRT1d1O19wMXZxWmNBXkJZdGh6bDg0ZXVOZkJ9NDVOWVN0P3J1d0oKemNs UCNQT1dwbTBIOzIrO3RLQn01aj1KNkJ3LU9lNGNYSU9uUk8rMGFlZlRKU2B1 eWVWaj9fQnNibFRGbF5aa1M0Cnp6bGpXPTxxRDFjbGxsKFIte2IyZzskKDZG MDAxUilNT2J1WFZSVTZXVnsmQy1iWSVjQ0ZmbE1LRil9U01GO3BAegp6SXk1 c25HJkN6UEg5OWFiSUdINkwwMDAwYmJWWFFuV01Pbj1JJkUpY1g9WnI8R0I3 YlBFaWdHUEZmbWp6R2RlVWgKY0l4c2RYRmZ9P2JGdl4henROO0syMDcqcW9N Nk48JGcxI0FiVWpQNkEKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X2JtcF9hbmQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfYm1wX2FuZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u NjRkNTg2OWRjZmNmOWQ5NGQwMzFmYTA2OGNmZjkzZWE5MjkxODBiMgpHSVQg YmluYXJ5IHBhdGNoCmxpdGVyYWwgMTAwNgp6Y21WPEswfT1kKlApPGg7M0t8 TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0KVApdC1zbUQy a0YKejAwM3JkKFI2ZmxiIy0taWM2TjduY1kxbnlIaSpHe2R3WUMqZTEzakBm UGpGNGZgV3NDZ01AXkhobGh1Vmg9X31lCnppO2F6cWoqZ0NHbUMlb21rQzJk JWsmJSYmaj16JFVsRUlIUW02ZXJgbEhHY3FzaE9GWG9TZEFWb31RYlcjR2p2 Xgp6cmx6SytyPkQ4NmE7VGBOUFFLPjVzJmxLV3RHbGRweVJDTXV0KnUoWT1k UH08eXMmcSN1ZGx0YWQ4QDRHek9zNlcKenghYmFgdlNoe1J4M3s7bXdDWnVv P0FwNzJkZH0/SXlAfWt1ZlZ7b3p5dUl6KyFHZVIpP1pkO3YtTkoqdyFTMlMh CnojKjVWTS1eUGFEJGNLe0VANWFhUDtMM14wJUYyfTNAWi15IzxJSkFxJjdS YFdqcFdYcyUrMng1JmhxOFpxMnwkfAp6KTY+KFktdHkodmxqaFc8KXojSksp dXBaOV5WSFB5PSt+eWAqUWVeKHcmfmlhPkRzQjwrUz0qZHNfTlhUPilXezgK eit9eiNXLVJzYDA/QV5LRS1ybnJzdD9ifmc/Y2NsSi11Q1JgdWlAZTA/QmxU RjteT2IqenZib1NAYURrcT1mVVVhCno9anJMYEAkMUN1Pmd3P0RAYlU1U143 OFdZXllpdWZfNGZBbWAxdHR3YFQ3MCp7cn5efUM5JiVOMDAwMDFiVyU9Sgp6 MDZeeTBXJmkqSDMyO2JSYXt2R2Y2OTUxVTY5RTk0b0VRS0EwcTtwZkt+ellg P1VZJGw2RzBTKGI4fS1EaTNrY1AKeitPbyleaCQ0YndsdG9xdkw/RER7TWpm X25CcUR+TzI/QX55bWl4RHpvKjlhKkdtfSlNQz83WnZ7Y2BLOEd2ez5RCnp2 RHEka29+bzkocz9RRih3TCFONGsqNTJHSnF3YXhAV0pFdGlVdX5Scn1lU2hE PyZWT2NhSypwaiFWdWdiPXNnIwp6Zll7JUBlKURlS2VzO2lxcnFrJnlDUERf RCFyLUNeTms0PEdXTVJseF96MEU9PWB4VkRFX2ZuRmo8T0pDPlB3dUoKelEj IT05bEY4NFRCQmEqTlJqVk9pOUxQMUlBXm5XMi1AQGZLdyoxTDw7OG9wYUdh aXBgaF9sPitNbEIxRzZTRzlTCno9K3UkO0JYfTRVQmsmUm88Tz0+RWBoKyhP MVpFKj48PGZARHZ7SHNFSTxvdSM/blNIYGB8Wk4oU1VSVi0lcj5IdAp6Tlhv bzFxUCsmaFlkZ2w+PGtKe3N0TUhCa3J6b295S3NKXk5nX2NxbFM9I1lBanAz ek8zQGJQaW51SDAodkB4UEcKei10aH4oVCFuMk1TKDw9eCNuZ3BnJVAlIz5l Zjlwb3Q2QTltY3JONUgzKC14aSQ/UntwQWVRZlFCJjhfSXMlY3xICnpHNXZ7 UURjKEp4ezJIVGdPKWlKNDtyLXRWPntQUj8lQ2VsVypjVW5gXn4yOyo3eiRj JHJMa2J6IVE+JSQ2KWJGIwp6Z0RNaFcxXnI8WCE5WEJrdjZVeTQqSClmKDNI YmVDXkVZLUhAJUtYU2pRTGlJNU1OO35HZFlvKlM7OVZfRkk9Uj8KY0Y3ek1p QTA/QHFJanU+OVcmaSpIMDcqcW9NNk48JGY8cWZMTzhAYD4KCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X2JtcF9oZWFwLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2JtcF9oZWFwLnBuZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjU3ZDhjMzkzMjhiZmM4MDc1MWM2 MGRiOWQzYWI0MzQxYzBkZTM1CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAx MTA2CnpjbVYtWTFnLW10UCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3 MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAwMAp6MDAzcmQoTmN7V0hpKkdvbF9G WUBXbmA4KTM4fkB8dEt3dnAmfmMoVVd8cTs3aj0jWj1IaCFVU2tDTlNib35i UmcKejxlUXd0ST1KUEd1NV5+TkhiVEFXTjVBUCN6VUU4Nj19eTd2VEVYWDt5 bStndT12fkM+aU1pV2sjcHEoaj5ZPkQ1CnpZc2N0bCRuMnVWVjYoTDlacC1Y KCVqfEU+P3h4SVRjRnBYaSFRXl8qP0F5Skd5dUl2dShlSCFOP1MjP3B6YF5j Pgp6KTl8ZDtaSHZfSWs9NT4hKSRndl9hbUw1KmwtVGY+KzN+WEFjQ0ZVdyUr MndqK3d0ZXhFOWx4UCZDY0BiK2JabmEKekQoPjRWQDd5WiErJCE/aUQpaWhj eCFkZnc9WTAwdkR5YHIxYFEwaHstNl89Nl5SRDNZYGAjKTEtWU5keERaYndB Cnp4JEEkeC18b1dUP3pgQFM/Yy1xWTw2cCgkQDleWWJ5enFxYjxYYGpUVSZy SXskbTgoeTx6TXZXVSZgYX5fMnBtcAp6PHpNKmFVKDRrMi1ybn4zPTNufmVV KE16NntOYFcmPTNtazBeMyYrXl42SDF3PkdSYS1eemBlOCo2SDsyPnhjTzMK emh1Ny0kYHN8MU8/MXVqQWhULXFgbUVjUVEwMDAwMWJXJT1KMDZeeTBXJmkq SDMyO2JSYXt2R2Y2OTUxVTY5RTk0CnpvRVFLQTAmN1ZgS356WWA/VWRfTig/ QXIoTmZRK0B1QlpzVVFSKkEoM2s3XnVpQV94bHdiNzxYWCRUMldsNDZ6dwp6 M1o8b21mMVRaZ2dkfVk7R1JgPUQ7QyRIMz9CPSY7JmJAY0dye19mZk0xMiVp VSZzQyhZdX5wek43UlJCdU9ffXoKejlTSFNnPTw0O0MpU0hwfWszTGRnI3dJ M3p5OGxwKnVpZD0rd2hKPVUrazVyfkhHRkFjOzMraldKYVRXNmBVe3ReCnpF RWxiUC18OEkyS0VIbmRePl4mKC12bXUzJjxFN1k8I0crd0x7WTRSeCtGPDs7 MzY7MTZQSkhANVBFLX4jej1XOwp6aVlXdDtWTncjMVNlQkpOMj1TMmNBLWxV YSFaM15vIzhqI2E1X0grd0BnUCEpV2kyR19MNHNLdiNHOWZuJVd9Zy0KemBl UnQ5JHkpKkJJbCVJKks5PyhHb09GQHhaUUk0WlV5XjBDRGwzKHlDKENXKDB2 VjUhal9BIXo4aC19fm1UKiQ2CnphMiUpbDVKWEAtNyMkc2RfbGUldnBjaiF5 bU8jUGZiVUxrbzNkZCNDMnA1RG5FOzJeR1JlO0s2Rzh6Y2FmKUpkPQp6UFNI PipDYEQ3JXZ9VH1VWFVLQ2R2Y0NRJjc0IUFRTXNQMmIyRClFV2smQzhQVE1e d3FNNyR9cVklWnJxJS1HdFIKemcoenVVU1QlIUBZQSU8OTVpWUIlN0duMjgm MUFEeHAhPD1JRVgmSWw7IVYrbDVWaiZfWS0jRChHcSRqQj16QEZFCnopT0Zv PFhAXz9JNmhfRV4xX189cExUNzlvQlFyQzw9STBsV01EaiR6aD91Y2JzZiRh Jj4oWUAwQXl5ViRoZmEjTgp6VkhvWCo4Sm45c19LZXd4YjNjUnpifWBNcHU8 b09XWithUihlZ05rNGM/Y2sxSyozRXhENEpuMk1zTGp+bGUxZzIKemg0MnM8 MXdsWWF2RkprckV+UjkkV1ZgVVowU3JNOSVwZWxUbEU1PkQ5JVd5T0o9MkBU dTJfR15HYWdafjZhOVpXClkwTXote0I2I2BDcn5tKX0wNypxb002TjwkZil7 e0pHeW5ocQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYm1wX2lu ZGV4LnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1n L2V4X2JtcF9pbmRleC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjNi OTczM2I1Njc5MjUzM2U0ZGIyNWNhOTg5MGEwYTAxNDBjNmZmOQpHSVQgYmlu YXJ5IHBhdGNoCmxpdGVyYWwgMTE3Mgp6Y21WO0YxWig/PVApPGg7M0t8TGsw MDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0QFApdC1zMDAwe1IK ejAwM3JkKE5je1dIaSpHb2xfRllAV25gOCk0NXtMRGxhXiRhJn5jKFVXfHE7 N2o9I1o9SGghVVNrQ05TYm9+YlJnCno8ZVF3dEk9SlBQdXtNbVpianpZeEwl aXJvenYpaUM9MSMlc1RFWFg7eW0rZ3U9dn5DPmlNaVdrI3BxKGo+WT5ENQp6 WXNjdGwkbjJ1VlY2KEw5WnAtWCglanxFPj94eElUY0ZwWGkhUXxWI2V0T1JB K3I1ZH56SlI+Rj8wZURnLU5BeGAKeihkfnJNPyVsKEt6YF5jPik5fGQ7WlFq TCZpYDRHbCRBXipDPyU+RlhsR1gzNytIdUNtQDhIVWJsLVRnJCUhLSVVCnpA IzQ7bTxJSkEyO0M4TG4+Q0RhWDw8Nmt2KFQ/WlpFNnZYRz1GeT59LVNYdHJr Pj1CK140dSF0KVRGdUY/Nj5FOQp6dD41JDEpYnA8M15YQSE9PSt+ekktWU16 V3JAcjNweCRBJUQrP1QtTD8mO2Q3IXI8PWMtazlzIXg5WiVnP2MtcVkKejw2 cCgkQDlOI0d5enFxYzxYYEZHbzl4fVgkSyZ3RzxNN0prQGEqOE4lakVJaS11 QyhDVShNejY/QmxUaT0zbm1PCnp6M3RfKChkWTgrPUNhZjFeWTcpcV42SDF3 PkdSYS1edyNQMEBhTXRyPjlwN0NfM2BQJHtfS1lHP1opQm5fZz5Nbwp6YnBR WVcwZCFKTVF2ZzhiKmslOSMwMTBxTlMjdG1ZM2xqaFUzbGprVm53JUhfMDBO OWpMX3QoWSRMKkJzUXhaYGEKemhoMjZudmhCXnZPMW9Mby1KbUZ2NXxONVhC QXxfblJ4QjhEN1hjTVI3RkB2IzB7KyRRVksxX2E/QnExbF51aFBUCnoqX3BI WiV4fDdeZXpPQXVDLVlCY2tVJXJvdnd4P3ZGSSZZfCNEezBFcm9SekEyPVFj T2JvMz9oWDhpdTZrSHB1Pgp6PjZzdFdIXmslWEh9QWVaMHZYWTJ3S3NeZE9U KXVZaU9JMz9kbyNwZXIxV3orK3U3Jldpfks2Uyh0TGpYez52fVQKejtrU0J7 KU4+RTByXzw+PXY+U35eOGA+PCh3bjBLKG9YME1JPz9UOWYwfT4lPXVoKk1+ TW4wYyEwR21pZXQ2ZDI4Cno1UilQTWB3RH53SFg0blZSWkAwJFdrQDJ5TE55 dSticzxVQDVmTk5FN1JfP0d5ZUE8OzhaQFd6VE1GYkZweUFpJgp6ezM9Vmlp dEJJKisxWmgkUkk1I0I3S19FYkV8PVRiMXplfVkjVVohME5jNm1kZDlrISRR U3x3SVNzQjYrWGRYO1YKek91aFI9WmY9c3grfjhofSkzMWc/cTJkdlVKY1VF VmxuaiZ3I04kYXBlLXtxblR7NC12VXtUQWFRWj5iaW94I3NaCnokaX5LPm9T NXVoY20oUlhUJkBtIyNjWnwpd054eHRRTXI4cSRwciN8b0x+YGlJMl5QfSRK VzsrcXkkK0hrSiM8Qgp6TzNLPXJnZk5pdSUrQUlqVno9OVpEamkjMD9JNWpF c25tajYzfFVsWW5sN2t4WS1RIXg5YX54d1FXJk5NbH1Mb0gKektwYDBQN3k5 MSpEVE1JMUFJMkVZIXAyenlFZnpEP3dfe1RYblY8aTtqRUF1PjFHTFIlNFQ5 Zm5Sdl98QCNwN0ttCnp3QUVAc2h7OzUkYmN7bmZFKH4odkVlYUd4Qn4/MU14 T25XMkByYW4+cj5GdVgtRU1jWC18Y2ZoelBVTnteOCtSdgp6PUphX0J4Nnhw NV9Vam5BejJJXiFZP0M1Rm5NQGAoeEQ5ZWRrckg+ZzspZn1lJCFQM0I2ZlN6 eUZ9PnUlVE9eJU0KbXJ9RCZ4ZFZiPzdDdzRPYi1+MHcmZ3lYJENSe2o/TjAw MDA8TU5VTW5MU1RZZGV+VkI2CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9ibXBfb3IucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfYm1wX29yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li5jMjJmYzMxZWVlMzJlNTNhYmY2MzQyNzhmOWQ1Nzc1MTE4MWYxNWMwCkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA2ODUKemNtVjtlMCNmfm5QKTxoOzNL fExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwMzBQKXQtczAw MDAwCnowMDNCNlNZflV7SGkqR3dtQyVpanpybHwta0NOU2JvfmZGZW53eS0m eHU8ZVl6VUk1Q2JHeGlgeVJDTHchUk5mTgp6Y2ZHTkJ0RX1rMHZVLVdSK2hv UCl2JFgyRXkxSEA4P0FwNzJkZH0/SXlAfWt1ZlZ7b3p5dUl6KyFHZVIpP2NL dEkKenpgXmN8KWI4S0xoVHE3Q2xHWDNWJE00fEVpSW12ejxJQTRvJSUwQFVw NW9BcjxqJFlXJkdGNjdeM2w9Sjw8T3ojCnooVzBpX141eGMoPUczSTspdXBa OV5WSFB5PSt+eWAqUWVeKHcmfmlhPkRzQzMrXlh1X3NfV2FoPil4I0YtTVFA Rwp6dD9ifmc/Y2NsSi11Q1JgdWs3UW5AOHJNYTxtQis/ITBfazZAJDFDdz9D a0lGQEFVTmF8TnNBcXhBRkc/MDAwNFcKelFjaEM8SzwzekgwMDAwOWE3YkJt MDAwWFUwMDBYVTBSV251N3l0a1BNQGQ5TVI3bDZ8KU5OMEtVPSMqbWokbysw CnpYR3Y7U1J3eHdgNiU+XlNLQHg+OHo1Vn4rbENXNDBeST4kaFk8PStsI0ND Uz0/QSFfckd0WFpwJnhPZlA0PVR+MQp6TEx1RGcmVmhLI1EzaDl7QismKjhT NmZ+ZUJwTUx+cChiJl52bjZAVSQwVDJtI2J7OFo1Y2Q0Jl9+TUVFN09+LTkK emYqPV80R190bnxgKiQmVUUwdTtaM0FVaUBXc19rcGNOdnBzeENTSjdFVy13 IUJ5SihlKnorRG5HKlYjMDZzQWRvCno1N1IoeDg5OXpLcHg/M3BpX319M0hD Vk9qMWgjPXI7MCRjc21pclowdlQlKEpZfEhYei1rNUtpVF8xT2djPi0rJQp6 KkkyZz1FZCNnWnJqPHQwWiFydmBLbDhAPXh+e3ZwX2VEUjFyaUxVPCpoTGE7 TFI0STF1Qk5KUGM0UDA9Pk1PMT4Kel4zJXQ9cy1wQlZmQm4kSlByT294ZE1F UWdNa1hUaTU0STRibFMmZXxrZmJOZWF4YiRuR1U8KVleTjtjZ0BPNHFpClRG ODh1bzAwMDAwTmt2WFh1MG1qZkxiR3dZCgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9icm9hZGNhc3RfbW90aW9uLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2Jyb2FkY2FzdF9tb3Rpb24u cG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5OWY1NzQ3ODg0MmY2MWNm MDU4MjQzM2I2NTlkMzdmMGM1MzJkNWMKR0lUIGJpbmFyeSBwYXRjaApsaXRl cmFsIDMzNAp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXk1qKl9AMz8hMlM2 T0AxeVhNaihMRTA2e1BYSUhuIWU2NCRjRVhJLWAKenpoRE4zWEUpTS05TEBy ZCRZTFB2MG1nMTh2K2FQNDhjIUY7NVJMTyZDdEM5elB+ZFMrSmFNbn1jTDU4 ViZld25ICnpuUyMxbzduaUo+Xj4qVFgqYFF6Z01kRDdQT3pQYVRvK3c8OXV3 cExMKTFGJVcjIUlxZGhvTVN4aHdwfjBAY2YwMgp6aGtNam1ST2ZaY2BFWil3 YFM7fGk8KmVAUXI4Z1FeQDlSMTF8NlJjOHxBUTlJUkxqU21VT0ZlV3RNKSUl Wm96UGgKelJwbCQmISpnP2g/b2NncGpWTVY7RUo/TFdFPW1QYjNgUGNxMkQq a3V4KDA/Sk1nfj9VIyNTYUsrNkphcDFfbDswCnJScG40TDxtUlZqcmQye1Q3 KzhXZWZLKiE8bV9hbjBualgzYXNEWilMKXo0Kn1RJGlCfUA0MEIhCgpsaXRl cmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9jdGVfc2Nhbi5wbmcgYi93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9jdGVfc2Nhbi5w bmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2UxZDc3OTM3MmY3ZmQyMTJk MjA5NmU3NzAxYjBmMWFmMDVhNTI5NwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy YWwgMTk1NQp6Y21WO1UyVkQ0eFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8w MDEldzB7e1IzRGRCajcwMDA5M1ApdC1zMDAwMXEKenghWDJ+IUVlcChMQX5p a3pVZygmP3xJUGdRTnJwfSFzPUpVPlZ3bnBpUGk5QyRuMHYjPn42fkpsLVRp XitWT25PCno/U1JuamdWRjd6LVNNZDJAe1pLKms9NT4jKjYqKzNeOH1+aTIm bSNuenYpZkU9QCtmejlrMWhDI3BgMG4+b2N8Rwp6SUpmMEp4YUQhbj8wQy1Y UGA+OT96fkA9UD1aNFlrWXNjdHMkbXh+Vz9ednA8ck5RSzhtZURyQko9Z1Rm JUo4P3oKekBWM2JCdyQkXjsjX3pWcEAzendPJGtPdTEhdFMtZj96UGJJJElr SmB6VTtLVT82a2I+diZgfHY7cVVqaj56fXBpCnpwMnpSRHZnd18lPjdCI3h3 WE51IXRMTDFtPWJPTG53NUh+b3JSSktYPChqKGV2KUFoTndDYkwtPlljQ1lv di1NZQp6c3BwJWM8KGlgOW5Zcnc8KjZILWJAM3lZIW9UJW9Ucns8Zng/NmFX Y25ZWmgrKGVsVEA/WH1HQyM+KCk7eGErZ1gKekA1UERSam53SiUhfHRgZD9Y PUREJEkwLTt3KDdGQT5hdyl6dmM+UGopOUNaVkAzeURybnc7YTluJlgoNjsr TH1OCnp2Q2AtQnA1Jk9DOytMMT1tJDIhdnVqIW5Qc0QpOG9QQzdhfFI5O2R6 YXl2YWxKI0s/K3RsejRaO2creEl1K1psNgp6ZTArU14qeDNMN3xDV31QXjc4 VmRxb2FlR2dzfHpiIVJeRCY9SkdkfEphMkRyJUY0PU5WUFJUKVRzRkVyJmdK ckEKelloWnF2ZCNsIUBldmYtTmdGTEx2c2E5VEFJQyhxNj8hPkw9dSZuNT8h MHA0Izw/KF42ZFk7SWVRZTlHKCNoOCljCnptNXw/K2tLZEs1PWRhNztAdT1z VVUxP2Z6bTJIJklqZGhLM295Vkd1LTt9QjV1Z2NAX2srRi1VLWx+az1sI0FZ IQp6cns9SDc8TTdNeSMpKmxFPD5scVA/ODMrNkBIdEY2SWFORHFvTlBGYUpi JVo2I15VZEA+OU5HXyNJRVNEc15fcjEKej84Q2g1IT1+bzByUkpgcj1CflQh IW99aDV2RldqcjtGZ0hwbFpNQHNoMWA7KDwqbWN1P3VwKSRoMWA+Yis+KVpA Cnp0LXwyJXcoR0sjO2crUTN0JUJUPXEyI1Q/O08/Jkp1KTZFUXhhK35kLXxu cEV1JmR7PXpVOyVOPUJ9WFJ0KUp3cgp6dyg3eVQrdzZlYmskJjJkcDV2fDU+ R1F0Yz9YQX03am8rMXctO3ttWWs7dm9rPTdCeWEwMDAwMWJXJT1KMDZeeTAK elcmaSpIMGIpeD5NMj48NXZ1XitaMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2 VTAwWWZRTF90KFkkTC1XLVI4d2FkCnoyWE1VMytQYlVPcyYoJn4yTGVRY0xY XlleMjFRWElxN1dCb3N8Kz45dD1GaFFOV3xkNGpVKFdTTDBkOzBpMzJ3VQp6 JWFETWVxNT4rNDNffSEpelZgKEAkdnhxTj1YaVNoIVJOITlGWnJFK3s/QzFM WkVVe0plPzlkR1lVKF8jNXUkI0IKemg3QjdMamhwPD9eaGVeU1gzYmwpQndE cEBeSylDR1VIZX07ezdQNlE0TFd4MClTMzlMT1ZfVTVpMChhbF9VY1hhCno+ RCNhVzBIWGNDZnJBRFUtemE0V3s+Xm9zN1QrRHBVPF5lY1V+NlkqWEE4RFdy bzk2PUlJPnY3VV50dVlHeStDQwp6eUtxSzwxITBVSCY3Zz4jdEUoIyRtfFFO RzJkcHVDeyNhblV4c01ab2ledXAwby17SVhxOFlMMFBWI2FEN0p1Pi0Kekhh Tk1EXkw3VCMxUnF9XmpaQj9kT1N0eUhvOCZjeTElNllleGpCS3JkJThhZDAo XlckR3ByTF5ydX4tfEd1Y2tGCnpQeng2aFhFd3xVNDRlXlVtQ09aZD5PM3ZV eW0+Z3FmeVotMURTcDRSWFRrYDk7RSh3KkQhQH1YMk5uY31nb2U+bAp6N0Iw a3U9UzgoeEdfOXReVmgodXZpY3BKU0BlO3tXOGQ8Z3M2R3lhSUtlU2prY0w2 eTJkeUVlTnAtOGttNyghUF8KelI8NSM2U2JZOSFIbXE0b2xJeEAtSFMwR31y Knh4NENKVSNMT2A5K29NenhTZU05U3JuM09Pfktxb2BBe1d0QjJLCnpubnQj NntqI3hiK3ZQaCpHRDw8bCRSby0xUUV+LUk/JVpXJVc0bXxiNnpXOyoqJiRj Iy1NMnNYMDNydHVWSW49Twp6UXBMczdRalEkS2d0e0s8QklPWkJlU35sZms+ aUsoNH5zZFdLQi1CZGt5RUVJNXFPe1d7fVpNQmI+P2pCeGYoKkgKeiNBITY9 d0tRXyFMTiVHYip5Q2JFYihnKG48a0k9ZUl6NWVDeHFgYGo0a3pITV54QWNf djYkS31jdzxfdks5TlJsCnorJVVVaXV7VE5iKUBfaUl4OTs0PGtIX2w5PyVs JkZ2cHQxQDNtXztZRyR7PUpSKSF9Pkx3cmh0X0NFWlJud0ZrSAp6T0xfMUI2 TGRYOV88QmUoQT4zZTQkM1k1aWsoIW5MRm8jQlJiMT99TkVmPEdDbDRQWSEz Q1VgO0NJeiVRLUo/YFUKemZCZilDOSpzUEdpcGV2dlNleWl6R1RITkZQQFVB RVhRNitUbTZabmhQWU1iT1kyP0tWT29CcF9hRXE2ISs3XmtaCnojVmFWdkQ9 YUxjaz1MKWtgZD9YMUFaJSUtQC1SZkotVzEyZlRkbHElNWk7Xn5AYHw5U3c2 dl87Sk8jYkAtbzJ3PAp6ZXo9N1NzOz52dEF7fXlZaSZDU3AhZW1ZdT8+fCZs ZXQ2SFkwcClYcEs/VEpofEhYXlYlRmMocGYmeWJIbHZQd3oKem5KaU9zRD1U eFVsd15aaVQ/YDRBYi1FSHIlWUtYJlRXQjtJJWZNN3NXbDUwdl5vZT5ZTHYm bm1OPDdAeG0heExFCnp0Q3wqTnM3MU5TV0djN1pTan10dlljfT9NeyRLTU1A SjA3SDhsbns1MDAwMGJiVlhRbldNT249SSU5SFdWUlU1eAp6R0I3YlBFaXAx SkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdUZWQ5c21GVUMzSG50Yll4KzRXamJ3 ZFdOQnUzMDVVSyEKcEZmQX1TRWlmQHVHQll8ZkcmKFJnRD07LVdGZmh1T1Jq ZEYyMDAyb3ZQREhMa1YxaWI/QzVacTQKCmxpdGVyYWwgMApIY21WP2QwMDAw MQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vaW1nL2V4X2RlbGV0ZS5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9kZWxldGUucG5nCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLmNhMDUxY2Q1ZDAxZWUyZjNhYzE3Nzc5YjM2Mjk5OWQ4MmE5Mjg1 YjUKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExMjkKemNtVi12MWVXYFdQ KTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwM15Q KXQtc0tMRF4+CnpUVStRczJsaD04SGkqSTViMF5NeUVENVJOKDE5OzxtWjZm OGxFSUhRKk47Z3V3ZEhsRCRMZiQtTEE+YjhxRkNhZQp6WC1kSDkkRXRQWHFp JFdxPlNNPDBZc2N0bCRuMCoqPn4rb1QrUGkrK3k/QClpaVFLK2ArYG9XKChl Sz5CZmBybFQKei1OUz1+KTl+S0pneDx4NC1vfVFFKWI4S01odV9HRWs9NT90 JCUqMDJpa0kyKDxJQTRuJld6KkNwNSlEKjs/UnhjCnomWXomJEAjRTV1PDxP enoofiMhVHEyfCR8PGtYU28oeFQrbWxJR0srPDxedHQpVEhPdHJMTiVmPUdt MCEqUVYmIwp6cns+ejA+RFpefip7SjgtbSs5SzY+ZTtzRytwNm9AeDlIeFA+ Zk5nQitfPnJCbihOLUk/QV5OUy0+dk40eTZvVnMKej5mQGE0LUBFTUx1ST1F dj5nMWo1OzstJUR5ekp3IT9kN3JXPGk3M1p2aEw9eUA4IVZvPURfZGh2K3dE KEBhViR1Cno+Qjh7cncoO3g0XjZrYSo/WiklKSRZeShjLX5hI3MwZCFKTVF2 ZzhiKmslOSMwMTBxTlMjdG1ZM2xqaFUzbGprVgp6bnclSF8wME9tMUxfdChZ JEwqOGJkbF52XyNmOGJHLVBMTCVuaE1jfnEjYG1RMnFCRDcpRm9tUGdjNjJN UU1kZzYKemszRG5GRmVYTnRoa2pyQ2tvflpwe08wVm5fTSp8ZSVzLWc3bHNI Uk80V1l+aWdKRmwtK2NjUkRzRG4+dF5DQCtACnp4NChaKm9nY1p+VW55MEB1 KWUtLXBmLWAzc0U+TlItYzBRdmU0amVuLVpzMGJ6eDJ2MHl6XjMzTCpRWEo5 Nm42Nwp6LXx2ck1FQ3w4fk1tKjBDZmN5cilJRkFoUD9gd1RZYD90NVpKcklo eVRwUmRnR0Z9QmpPbnc9UzNaI2FTOGJPS3oKejIpU0kyaGh7UTlNWlFsYS0z LVZgemxNS3x3TzFANnFARFlnPGU/c3EjVlFoIyRyITU+a2lGcGpYRCl0Vjd0 SHwtCnpzK0NlI0A/dGY5cEAlYyhKJjNifmIkM3l2P148aTBXZD9OT1k+YXo/ Rm9zZFAmNXZNRXVVNU96PHY2WjB7amg9bwp6b21RKldaT0FUfnFLbkhDYTYh TDZGWWlDY05RaDdAbDM8ZntzS3pjWUlOPHojWis8USYld1RnPDFQOUNHVUBJ NUYKekFPezdubShHR2wkcnhGZmQwQk1QJCFEYEltX0lzTCNpTjRlJjR4SUNO Tm1hPTNmVnpkWHgwYWtifUo9eGkldWIqCno/PzVZXlBCbFE7TUBWTzB1Vnwk R2xgZCVIQjdKaH5WJlBHVDBhZyVGa0g9OWxoO3FUOHpXe2xmcnFocipifnpz LQp6NS0zSm1sOVU5U3JCNjska1o/TWtqNT5uJD1ZQzJteEBhTDZzWUMtQkVX P3lsNXo/Xl9iNH1ZP21ZRG5zI316dGoKel8mVGZQTXZWbF4tYSREVTNFIXdN aFdCNT85YXRxektyUmokaCZiJV9rVUR+a3ArSCNZcCg2QG15V08/fiFJM0h1 Cno9RnM1P0wmJEVrMT1OdkZIaylvS3lwJHU2QEhKZUEwKWd1JTY1R059ZCQt cygpbUtgbjFpQXZ6SkJFcHQ7VSpMYwp6cDtyUHYtPEE0ZXEhPmdRMlg8aS1V SEJ7KCViN1pvYUVaa3I4cFhsTmgoe2VeKEd7WVNNKGlSSXUtUG09STlyYX4K dkY7VFFYKFJta0Y5Kl5oaGlOdG9GXlJJbEZ8N21eJEgwI0Z1cz9rRlUwMDAw ME5rdlhYdTBtamZod1c2MwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfZm9yZWlnbl9zY2FuLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X2ZvcmVpZ25fc2Nhbi5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uYWNiYTQ5YzRmYmZkOWI4NzE0NDRjOWU4ZDUyOGRlZGEz YTM3ZGRhNApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTYwNwp6Y21WLU4y RHRmJlApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcw MDA4blApdC1zRypNSjkKekdjX19qSnU1JiZHKEpCeUtSXy0rTT9YVkZJej5m ME1uKnFNT0VGR1NHRWg9Tk8tQEttUEJsX2hObGl+Z1BmdFpxCnpQKWtveU1w MDV0UWRCIXdUVDUwflBGWSR8VFUkWTJWTmhJTExTU04xVTBxYVFVYEokVVIk KmRTVnE7aWlXSnphZwp6UyE4OGVXb0JEdVhJeTchVnJPWXlYPStieGE5P1Vg Tl5vKmtaRTxGNlpEKHQ0VlFwP3hhZGN2Q1olJVl9VntkUnwKemFCKmRFYSRz fEVXXiF8RmFkY0M4ZHYwPWRYbW9YTmI5UU5VYiEmSGJiYTtEcmQzSkFtZG58 fi1WMUkma2R3eTdoCnppaFh+NGIlQjkqZ00oZyprYSZjSWRXTUYzaGxoTkto PEo7TmV1fDJPaUhyY0s8OUNqZDBJQjdHakUjYmhrQkUocwp6MEl1VlNqKiow cmtwUXNlZ15ga2RsJGVLO2x4PiNKa0NUPihtNm5RQG14N3N7Z1BOWGZwezlo SnBORV44aismY1MKenM7aVFvcE55Y05GfTNCS298fXhMczVIMGRqaWprSXhh cFJydGVLeyFwcnhwcXI+OUUxPVM7b21vfnhgKXpVaW97CnpyJEVCJlRFT059 IXRIfiZ5PDVUT3QqQCtIIXN4RUJ0KzJBTHBTSFY7eCFHVUU+YW54MFZhTSFa JG5JcHhAM3B0SQp6WXNsenEkPzJ1TiFFTVV3WnAtVmN6ckx1eiNjPDgtcXI9 OD4maERrYj01KX5VZWFgVE8oQ29wKHpsUEU2IW88T2MKeigoYl47JGdJcklp cSFETSRIYUAoQHk1dS1rayN6MiYoZz1xIyp4PFQjbWRjKypZMj48KVJmcm92 KHdnPStWUW0xCnoqUnxFeXNATG56KDlFe2grMFc2PXg3WFV4KCRCY3ErcnJu QHJgXzw8KVh9S2tAdyhnSSk3OD90K3Z+Z0ItQE0pNgp6dEtzeSQtcj5hRDts PHRKelRXUUcrU2Ize0A1Yk5ien5KJTY7Ti0jS14ycClsI15VWUM7XilXWD8j a29uJG1IK08KejxtMVdaQFhoN3cte0ljUzw+Yi1rPDxhSHcoJnkmVj1KTWc+ O00zXm0pOTNXcz1qWVZ1XzFveV88bVRobT5Hc158Cno+Z0RJOy1Sa1NzPi1Y TzQ/QkRGfDtPKnw9PyhnZEM+RUgxN0BBMjtPXllIWmReWXs3b2B1ekYpfE5I KmBgfnFoSAp6UFhHVl8wZCFKTVF2ZzhiKmslOSMwMTBxTlMjdG1ZM2xqaFUz bGprVm53JUhfMDBSZH1MX3QoWSRMKkJhUFpMb1QKeiMmTz9KNnIkcDtEREh+ OHFFWFpsNjw1SC00WWxJRml5TWZfYnlwSGBtJTU7V09JJktEZyl+KStHYDUz R2hZKkhSCnpYSU9gWFNTV31uSWUmcSgpWT0pXjJOR2peOzU/anB4eGYzfUA2 MCpKJWN+eytiekg+d0BSOzJwKnpNVDN4TWJ7Wgp6TGMtWmMqd2Uocz51PDJQ X3dKez4kM0NQemZCNlk+aV5ON29NI2ZfJipHNUhNIVY+byNKYWh2fmp6NHVl MXhyZ3gKenk4MFVYT0RlbUNIKyMmSXZyMl9SJCRkfkElZCZNc3UwXiVaWSk1 dmhtOWBAWnFOdU18QENhK01TWGppOEI8WSROCnpXRi1nX0VrbWxTSnRLcV8o SSEoOXFeanlTTFBgO2FBUDhET0ViYkFSaXhTPWlQMWhoQk8+XnEqa2FXYXsk MUZ1RQp6RCtRSFc3WnAzaEZxe2ZhKD43JElDYHp2NEstZ1gzbl55RStlMFgo cWM7NntnRllGQipkaDxad3F+cUk8P1RrXkEKekdOaHRITTB4YGtrMytjQkBG YUJVN0MxMyZJS1lfRW10bE9XQyFgeXxoQyVhMzBuOG91NEEjdE9FREgkKmkw SmpECnp2OHpnc2wkTUhLYH5kY2g0R1JEV1UkX31RJnZed3Mmb30leSpCS3JU Y187VCRUcjVfczRnYXU9RSZ3eXtPb1g0Xwp6Pm1jfnNuSmVGQyE9bE1lRGtk VT1Oe0lKSmV9RSVQQXxTJnoydEdwYUpqZXBTVFYlT1JyS217cyhnUHFHKEV8 YU4KekZMKGo3TXMpbE4oNGpqKCs0Tk1NKylIN2hmR2A2OSkrMVZ8Km5eO3pG fV9EMyFAb30hP0JBeC01aStFcEt0JCVXCnpZOCF5KTlxbjNvWUNtRClIUWgz d2V1S0JKOHMtejBud2pZVnNwMDskMStpUnFIWVkqZzRBLTFFIU1IYDUpbm9i agp6UDhBenNEYXpVVzw9bmlLMnFQZEAkOyVURWVsOTNQPkdnVU5rJE9FPkJ+ cihgQVQqa0VUIXhzPDQjYTRuX2BeSisKeih7VHVxREluP1RvKUMre1U/NjNQ TW5mUm5HczA0JlROaFJ3JEVgOVhIQERkcDZBX24xUUkxTjRgeClWV1BEUSNk Cnp4VyQqOSVgWk99N2xnekd1MiFwek5IV0diVDVTJEQlNnx+Q3VvfDM0KUhw SiFSOG1CI0ZsKTdEUUg4RyhESGN9YQp6eEw8OFRNbWZTVVQqRHxHVWdSJExy RHJpM2prNDl9U21WdjlTV0VuMEBlNDtoPW5IVmhUQWNzQDAwMm92UERITGsK RlYxbSoqT05SZ2UKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2dh dGhlcl9tb3Rpb24ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfZ2F0aGVyX21vdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMDZiNzI4MjY4NjIwOTg5NjY0MTJhOWVkOTMyMGVkNDUxNGZl M2U1YQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMjE4CnpjbWVBU0BOPyhv bEh5YHVWQnEhaWEwdnBeTWoqQHhCcEEkR3cjb28wcmpqN1BVPFFWPSQhOUc8 eWQtYVQ3WTQ/PQp6VUJYTCVKa0ExLSRZTFB2MG1nMTh2K2FOa0sySTBONVEp cGwyQDxUJG9EMislNkJybmUmYzV2bGx1PDJsalZNVjsKekVKP0xXRT1tUGIz YFBjcTJEKmt1eCgwP0pNZ34/VSMjU2FLKzZKYXAxX2w7MFJwbjRMPG1SVmpy ZDJ7VDcrOFdlCmJmSyohPG1fYW4wbmpYM2FzRFopTCl6NCp9USRpQn1hVjlj SQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfZ3JvdXAucG5nIGIv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfZ3JvdXAu cG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkNWRlMzFiYzEyOWE5YWJj ZjRhNzNlMTlhNDg3MzkxMzlmNjYyNzEKR0lUIGJpbmFyeSBwYXRjaApsaXRl cmFsIDEyMjgKemNtVjstMVQqYElQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVv MDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQtczAwMDFXCnpycEdwaiFFVmF6TTdg O0QmaEM1OT9vWXR6UmxAMHApYk03PT8zVVRfZzM7fSEtdHZ5cj92bUU7dWle NnJye05vfQp6PDZGaCtWI24oXng4LVpjPShFQTVmMkNWZWpUd2ZpV09BMEZn dDExVSM5cU9WSHVVaHdAYSh0bT45ejloI3FIJj4Kej9jfWlSPEZON1MhfD4/ Qj9CSzJJLW1MMX50TUJCJGJFRyF3PUFZQHtuJntxYD8maD1SKl9HdGVrbUFz ZT5Ec0M0Cno8REJIeGxIdHNZPkRpfl4mV3p+U3JsUUFTQDk0QWI7az41SVd5 aCpAQGFEa2gpVEhMcXF3TCtlY0J3al53VEl4IQp6aVFkSjktb3UzNSFHaCt8 cTJJYGQ8PEZxMylAfElyZmFKfWRpQHMzcj1EX1JPd3pjSlo8SUpBcCVidlVN Z1c5YCYKemQkZEU5JVVwRyFPbE8hbGopa2pjWXRoV2pAd35xNXpRNjZ5Jite Z0heMXtPSSFeUThAKWJyS1ZedktCWSQ7dDdgCnola2tPVF8xQG4xKlZweW87 ckcwfj81Qztic0gqM2B6d1dAbz95YXhzdWQoVUgjcVk8K0AzcHE7eDQ3JUx4 JE1pIwp6QHleY2p6YF5kKylieio0QFJGNiR5R0xvWDAwMDAxYlclPUowNl55 MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+MCl0NkpLfnpZYD9V WlIoK0NVVkIoKmRgTlFmWGE2Xn56IX0xT3lec0ZeVi12UTZQbmlCNmdXcHV+ bjxLCnoqNGxtaj56eFRwTnJaRkU9e1lfOTtDIzR6O287OG48XyEjVWVnNV5p ZiN+VHZKMFp3b3dPVl5uWihvMV4wMjtWeQp6dT8oV1lVWWwoUTRHcjd2d0Be cEtJeDtlMU1TVHYzPDJKZjhJeSExV0pwe0wqO2p1QWA5c1R1fEBkPWk3R0l6 QioKemNieGBlYSV6ZllWQXx6IU8qZzA4P2U+N2pKSHo+NG1pRyQqJj5ANWZr fWNxeG8xMWVycmFLZjBONUN0SkFga3hnCnpYaklaOD57UVQ2SzNZZ0Q8fGFy dT47K0RZJE5lQmdxbHUmdVZWTzIwTXYrSzNFT05sZDxNUlNZM3lGa21Lbzt2 cgp6JVZMUklhTVojdDVReylrbVF3fn5Td3JwdEp6Wnh6O1M1ZVhuX0p3fDtF Nj1NS0pmODh6WEFiQ05+UiNDREN0JHUKejV6Q3FUYihkSHl2X3ZkS2FmVnBU UTtTMypEfSVET3AzOCZvU3taRSNMeFQ8SmdIMnwkMXFJVVV4dHl4b2w2bGJC CnpAK1ZsbjV2KkomdGZlOEolTjB2SGVQYHhqLU5oNX0mZF9KZ2AhfFMxUW5O QENpJmElRWw/e24pbm9YPlVmUkUkJgp6U3kmTVNERjcqMVI+PCQ/XkoqRSZy TEJyXyVYU14lO2BNcWdYY2xYbE1VaHgrUmpidkM1IXVsPyl+SDhZdXhoYmIK ekVrV2ZuR1Z5NDhoY0B8Z3UlI21YYXRDQ2JGeXdCcUF4SUtRTm1ldXFtMEUw M2kqbHU2YlF5b2x2Z3tNKURXPDNFCnpHYHdQcSVjUG4zKzRKNHFKelUlMGZB SkNAOTNIKG8jPmFjTCs2Z3s2STU+VGM0ZG9CZ2NPU253Sjl+U00tKDZoMQp6 fEEwUyFgdXljOXsmeE8temxNTU9KVWx1ekIzZmZpQWtGZSQ5Y2gqUz5NcEpG fEkoN19JeTtyJEx9SmJJbkBWaFIKeiQ3RXNARzVjSS0ja1Myb2VmcX53d3A9 fjI+K2A+ei0odWUrSjJvJDtMSTN+JkMzSG50Yll4KzRXamJTV1ducHc+Cnow NVVLIUZmQjFNRWlmQHVHQjckY0dkZVVoRD07LVdGZmNmb0JfMDMoMDN+IXFT YWY3emJZKGhpWik5bV5jPnBwbgpxRiklR0tJVn5fVFI1Q0w8RyZETGVIWStl U0l4c05HbXNQOSkwMDAwPE1OVU1uTFNUWEBgR28pZwoKbGl0ZXJhbCAwCkhj bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0 aWMvZXhwbGFpbi9pbWcvZXhfaGFzaC5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoLnBuZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi45ZjM1Yzc2NTM4YzNhNDE5MjBhN2I5M2I5NGJkZjk3NDQz ZGY3YWE3CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTY5CnpjbVY7QzFh QTlAUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAw MDRpUCl0LXMwMDAxbgp6c2JvQCg4RmkrfEhpKkhZIzluWEI/b1l3I1YjZXhz Jmg0aCZAPEZ9bjM4fl5OdipieTw9ODRucFk9cTViWXRoV2oKekB4YTBFIz5l bD8maHA7Z19NXnZQeXVJekt0bXcwfT5lU1RwcnAjcVZ6ditJXz95MXBmaWBE UnYqWUktOD8wbkFjCnpweGcwfCliNWtqQDJ9d1ZPVFghPylAXjBUPnFFUWRQ YD5BRSRMWCV4YWd2cU1hK2FhODtDOGB9SHVVa3lAYShzPQp6PGF6ViUkTTVL fj8maC1iPiV7RWl1PFlUaz9CSzJOPWZVZ2RwMTBfSUA5RE1aLUkoUm9sSH04 bj5mTmxtP1NiYW4Kem1GKGlMPEkjQGsrXlczcmd5UFNRPkRzOTQ7SH5mRiEw ekZfcEcjel43Wj1CPmIlMmZ+YiNeNFJRJEZLa1c5MzZiCnotOWJVUT53dTRa SVBjYFk9K34jYCl9YCM7eU18akEoPl8xbyRjVyNAaFVWMHl1LSRYWDVFMEJn Sm1KaVctbyU5Rgp6KHhTYyY0I2hoPTtLXypIIS1VPHpnNjdlbyV3MWpSKX40 Kjt4I3JRTDw8T3opK3FkeE8hc2dTWTxqJGIjKnx5dWcKemY3LWZ6PElKQWl6 ayVlPHA1eDEmLWkkQEswMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VO QntyO05CfkMzCnpZZCF6fjAhVD9qS356WWA/VVU8VTU8d1duQHBWOEVRdDVe ak47ZlNrWiFaXnR4WmVhPiMzY2lYTUdedWU1bGIqYAp6QkxCTChCbkNATV97 bHphS0ZsKlNgfjAzVz1naDF+YmY/P1o3Pm8maTh6LUVgMk1EbitMbklURShr VWBQaD1teTwKemxpIT0zO1VPSHNHQjxOITQ8X2dgdEtjLXQtdiZWc2t3fGc+ IU5XKDc2JDZOSjJyfkVOPkQ7cXg8Zj1kZERqP2xDCnp6ZnZBVEIobks9RE9t dERKU1EoK04/Kk11UTtVbUJaXiNmdENZUV9La19waGpKMGZ7TXtiN08zT2ZE fWteJiRPUAp6U1FsQnhXa3VMIXdiUiZZY2UmTyVgNUorQkFsLVJxNm1+KGFQ TiZuTjdXODAxIS1tbWxMWC1LVSNmcmpOUC1uQioKemJmXlA2SU1DPkhJP1pU eXghaihBQk0kSncyODtON25gbSpue2VlLUNFaWpfbD1XfCltPE0jKEM5Rz1D JnJlRn5eCnojaWtgPiNxOXReZz9vYDVuJHUycTg5fkhQdXVIUUR7VFZxJGV2 ZHJ9OWdXNUlxViU8ayFRcF43ZHx7QyZaU3tCcAp6MkBFcSNhPStKd2otYE9G eEVGUkleX0JNY2dLUEBzQWYzK2lCT3EyUGxgNTU1dDxrSn1UaTVJRF9QQlFv dmVfSVIKejI8R3opQ2V3JDlnKzY1T3VQJitWX2FtQ2g9WmlfcTkzR2NXYGpC V1ljbDZePTdMKGJgVyRBMiZuVilRbSlBQzg+CnpZPXApKjJ7cCNRbXRVNVVY QiFnfiNle0pgUSFTazBTKj0jOTU0LSk0K3N7NF5EcWxRRVYpZUxHcyRpfHJY cjIjNAp6dThKKmsjZzxGMFJ0K3kyJjFRUVQocHprJClvUnI2eXZhditTclFi KHJLbEZsb2ZIPiF0aGR8a3pBVWBJR1NiYDkKelhwTX5gVVk3cHx4cEB7fFZ8 VGlCVD4+KTRwemNRaEJjfWlXMDN+IXFTYWY3emJZKGhZYSVFdzNXZEpmVEYp JUdMCnpHQSVHTVI1Q0MrRyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1PYnVY VlJVNldaRXN8MFdfYldJRmZsTUtGZ1l6UwpqRjtwQCRJeTV2b0ZnN2JOSDk5 YWIlOW1CRjAwMDAwTmt2WFh1MG1qZnIqfjlXCgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9oYXNoX2FudGlfam9pbi5wbmcgYi93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoX2FudGlfam9pbi5w bmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTJhNGU5MzY5ZmE3OGM2ZmEx OWJmNWM3ODE0ZjhhNTg2YWVkNTU2NQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy YWwgMTU3MQp6Y21WKzsySGczSFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8w MDEldzB7e1IzRGRCajcwMDA4blApdC1zMDAwMSkKenltKFRMOEh1XnVIaSpI WSM5blhCP29HaHlWYURyciZGclMkQDw2PWw2MDcxWXYqYnY7PTg0bnBiY0B3 eVl0aFdqCnpAeGEwRSM+ZWw/JmhwO2dfTV52UHl1SXdKdG13MH0+YiQrfSlZ UzgoJVZiIWIlUnt+Q041QVB5enYrOT8/fVhGdgp6c0wqSmErM30jO0ByS2d3 ak1WT3MpJFhwfl44fX5pMzh+QF9zXlU8Pj5SaVJedEpRM0UmRnEyRD9Pd3le V3lSPWcKeiRMTiZTQDI9VyRyS3NlM29+ZzNuYzRDVTchSCtpZEB5WVApeEFn R0heWUY7RTwkQ2smI2A1Z04/ZEd4VjxnbzFICnp1PGAxez4qazs5PCh9e0J3 KHNlK3hhb2ZHPUNrZVB2RkY7Qj1HbTN6KnAlJHl1SkcpKD5nMWozPERLdjd3 ZVJWKQp6eTZ1N0cqT1RTZWxJITJDPmZAYTA7KypkMXYlSyh4PGtnWW4ofiM9 anRHfFhad31nUE9VT3V1KTZTUUdKI0VedD0KelgxTWUzJE01S35eNmthKD5C STJuIVJwPHI9Z19JUVU+bkl6OHJNLUc7WiFHPVI4c1ptO2lwcTxzVFVYOXlA YE8xCnpDNFlEPHk8MH1RWSREPVJERjZUZStOTyVgV0BoTF9NQzN3NC0kNnAq VnFAOyt2YnBQa2w2XlZ2PGlGfExzX0VMUAp6PkRqMmlZQmEtZUwrMys4aShE OUtjXlFSVDdTbGRJO213UVQlWmxMMmlMKi0pdmBpRz9MUERhKFUhPSltcl9F LW4KeihyVF5PWj9ONVN2KkxLUj1YfF5HZ1UlOFgjfUUrQUpVcj55cntLd20t XmhvKVhEezE4SyFqUXIjU2FqXjRpM2dVCnpKTHVQQC1eWWdEI2Y4bX1UaWp0 YCZwa2NMSlVxb2FKSXF+T0BhViRxO0h+VDZ0JjRqJT9jY2xSKVRITHFxfl9B Mgp6PDt0VkFrOHExeGEtbU4tdXQqWjhvWFBPISEwT3pwPyZINGc7a0BWOHJS VVk4P0IyVFUtTVF3YHFVRih7PDxGdCgKeitQQzcqanBFTFg7bW5LYSpyKF4j cnIqYmgtb31SQiNEKFYzcTE/Y00rYG9YXnpKVFA7cFhiITEtb3UzNSFoX3R0 CnpmWk0lKStxezB7JjdTN2RxdXMtVS1OSigwej1HUGxlZEVpWD1oZGE8KDRw bmVwekdQVDxJSkF3KnRXSHFlcWI7cAp6SXsqTHgwZCFKTVF2ZzhiKmslOSMw MENsNE0/YC19emo1VU4wMDBTYU5MaDBMMDAyazswMDJrO00jKmJGMDAwN1gK ek5rbDxaTlhLSmY3ekcwZzc/fkp4JH16S20wNWdVVFJAezE2Knd7SFp4bVls Q3U7U0xrIXArMFckQig4M3F5d21qCnpHK1RmVSEpYzN2QVA1TWMzcDMlZ2dN bVIlTkxXTnZPYnxuaEkzNnQkbDJYeiNhNHBhUFdNUHRKVnU3JmJGb0cwSwp6 M2sjZFBmfSM/T0dMczZFRHZPJUJoTmMjI1hWSkJBWXdQSWh2Rkl9eUZkNEVL OEpuMXpWRm9GaFUqTld3PEY+XkQKejlBWHdRdHxpI3ptTWx6R09lXyQjSEFh eDQqPHhkQlhKPTxgPEd8I3w8WWVSUTtfQnZaZ0F0QD9lekNGaEBidlZ1CnpA bi1VMl4wbzJ2NCtzcGhLfjtjN09SIzUxWHFaaG5RdntRcmpheSkzUjVXMk5V TGk1RDtXbHdoQGwwK3VLflZ7Ygp6TnkjYXhZM1VpNmM+SSMoOWlFK0k7fCRj MlltKm45bHdWTC1SOXNTQVI5YzQ2UWVGVzk8dUdvZ2pnM3RlUSp7TVUKek9H T1FrWkJ0dVJTNjUkT1NKWiZlUXFrRGQrfHBWQng1WCowamo1ZmYxRXs2N3FP K15Kcj88RWNxXkd6S05sWDYoCnpDVW5wcSE4RE8rKCZVUW5ETzBDU0ZSMklW RFZjJCFXaE44ckViLWEwYjUhT1Ulcmw+RndaTChxUGtZMjdyb35IXgp6UnhG I2dlOHRNKmRYT0Z6VFVNPmNYM09kfFl1OG4qVSRKNTFyWHJBNlEybnhiJWhx ayU1cXthUmF+SUdyeVRPOGMKel9VX3clZmFua2QwZFI9Zjk2V1VSJGwqZ3JA eDtycXF+bCNEWSktQn1iXjQ2Vyo+bVNGVHFLO3ZqJGdXYjwqTG9LCno+bzsh aHg0Q3V1JmZSOzI2QVVPfCpXMjlSX343OSFuK3VOfktZMj02M24qYWsrZE87 ejteaFVLZHlrKklkV31VMwp6bnFOKntkJFNrbGkoN0JzVTlAQHM7bHR+WG4w YFVhbTZoTzdMTUFfPERxejRfal5QNz43KX44NVQxZlljMXhBMzMKemYmbTVx UDIlZ21GSW5PSDAwMDBiYlZYUW5XTU9uPUklOUhXVlJVNXhHQjdiUEVpcDFK RmZtanpGZ2kzZEl5NXZaCnpGZn0/YkZnVGVkOXNtRlVDM0hudGJZeCs0V2pi d2RXTkJ1MzA1VUshRmZBfVNFaWZAdUdCWXxmRyYoUmdEPTstVwpWRmZodU9S amRGMjAwMm92UERITGtWMWtneFEocGk4CgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9oYXNoX3NlbWlfam9pbi5wbmcgYi93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoX3NlbWlfam9pbi5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA1MWY5OTY3ODM4NzNhNGEyN2Ri NGI5NzExMzVlOTVjYWM4ZDc0NApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg MTQ1Mgp6Y21ZK0NTeH1QKTZvbiY8aWxDOXdEV1l9ajFFVz09Vkcmc15NeU1j PlZFX2RJV3NmMiVPT1E+VlBeM2E+I2V6YmkKelEkV2ZwTi07b1cyXmImPWte bCpXQj9KaUJfd2BUeUtWWT9PdmA/S209Ym4zSz8pUEBlZiZ3cT52Zk83MGdU WiRCCnpgfXFXJCgoJDckJXVWeGFVVW80SVc+eW5+NClyeWl3Uz9eOHBaQXN4 dGhraHBKfGtVRW5PMHZTJTM+KnMleFBzUwp6Mms8N3lZJiFXVGRXMyFpYVQh eWNRTkRtbG99SFQzNWw3WE8zQzs4anp+TWxET3ZEbX5tN09vN0otdT9tdXhm ckAKenBXNForOHxTdnI1PWc3NipKN3hoYWRUS3w5Ri1abjF6P1c9I0VVP2hh KVlrZzc/Vk98ODhqaD43QiFtPFlsaEIrCnoraWhJS09GbWU9dGdCLUtee2M/ MzckaSFkRX1rQzgqWV5xWmxYN0RoSkZUVCVtfE5lR3s8Tk11UUhTR1omTkIh Xgp6O3YlazNJIUttfVI9NX4rbFVuOEwlPyk5bkQwa0IrKm58V3x7VzQ/e3p9 ZihMQkpzdkw3dmMreVYpMkdye1oxaW4KekZvTnVVUyVKfjh0WEVJeilpa3x8 MkktZDhJTi12OWV0RnJqIyhgd0FPfDI0ZEdfVkklTVMydyNQKk9xZGwwc0Iz Cno3eWhvMV4lQXJYME9jZzBtO15QODhVPGI+QDYkK28wM35ANzslXnZ1TW1A Sko8YVdvTkp1QWF5Z14lcD5HbW5zeQp6dUcxKlhiNDtCWWdPVTM5MnZPKFAm IUtwNkBwPV9TRXlrJlktMjtsayU2dkNheTxqaiZIRS0wZE9WMGIwTjcqSWkK ej5AQTZ+V3VFOztDIzdnNTZzPyRTUCU/UWFSMStuLWNgfmtUOHVOVmEqMnxA bz9sbyk9S05+Tn04YDJjZCp3ez4xCnpUVGdqPFlERlp5ZzFPQER7VUV9WXl4 ViNONHlTbHs3P2tyYDVtX1Q1WEB1aT9gUF4hM0VaeGhDPmdoQExAUispRwp6 TyhQaFF2ZjNuekUjPiNtS3cxdXtTeU9UYiNqe04hI3h2bmVnSkt5RVkxYmds OFglaG1xenE4S3g7aiQwTE1VSmwKejxxSyVfOFgtdnw3KzNRfiltKVFeZlB9 I3dEcXMpaFl4clpUYnNgfDl0NCN+JWpaUkZMdiskc0w0VW89KXN1aTdoCnoj LUw7fnlIaXloKCRUbDVRZDJkeldDUkM+emBWc1FqT29+cz5VUn11TzIxRzNi fjU+X3NsO2YxcEwzeXA2WSgqMgp6VGd8UVBZVkZkZjRuMmkxcnl0LX5SJiZF eUVIfkdJYUFaYXxle3A8bGRZbT48KFltJFN5IzFrYldGZFMhc2w0IzgKemcr LSY0NlIpP3A9djxJcnhLQWtCYGgyPFRMNC18WkBTSX5SO3hYKlcpQS02OGxf OEpLdztVfnR3MzwpOzVxJUwmCnpPK1dWaG1WOTQmVD9FXkdGZz81MSticFFV emhUbVFoVmhtfjNaMG8rOWg8WkN3UiNAUyNmSjs8PFpiKW9UIyNKfAp6KX5R U2c0TSMoZHB1PTNAUFAzRSFjaGNAKnYkQz9WVTx7QXw7RWEkQylNdnBoYzNR JklENV5iU01nfTcmWVlFdyEKeitHPXJze2NYRntQUXZRbmM7SkpJc0VuJHI0 Z05KeGBKcEw8SWFmQVlgQWhCQWBPMGJHallDentSbGh5LXdIa35ECnp0U3Js OyU4TWYyc3stY3F6KHQxLSFCXm1CaU85UHBvdD8/e0EoITJQMCYtNWZsNVA+ ZHg+RFpVTGcqVEtfTnJ0NQp6LTJpT0JAc0tZPUpjMHMzYSp7Nkcyc19oPzVQ MSF3ckh6UF5qKjU9JlAmcEVrZV5wenx5T3o5VHBEVWJvR1FqQngKek1vITFv dEJAMWV5VjtSYyYoPSpWK3Y9PUteQE4pYXd1cGYweFNtOEFQSVIwYSkpZ15+ TEQoVmBpeiUlQjlsVjw5CnpOVzlxeCteIVMtYDhzeD1NPTlMRm4pcFNXUkVO VlpzbEQhQjh3dn0mTn13MH5RKUlxPF9oKjZlTCVSPlQ8eGJ0Qgp6SFZLWF92 SmJpRCRQSWhQYzN8a3NTam5TLWxoPzhRX2ducmRaYVdwIz8teCNjZyp9VyZy Ym9OeUYjZXRAcTFGNnAKejlUKj4wYWxqKlUwYn5+YHd4X1Z4YF9uflkxb307 Kj13ZVhteiN3UGEhLVdIVSlLN01XOytre0tCXmhyVE9JU3prCnpRZW0qfTd1 dj9sKjNFZ1FnNHQqSWhHIShpVytifURyemVeTT03QEFhQXstbk1OUVkySXFg Unx8eVItOWc8WXsqIwp0KHpWdzk7UXhSLURHNW9Lb2N7byUrYjdgVHc+IzQx S1kmX3VgR3BDOWBUR1g/YmZJRnR7fSlFKExeJUtlCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9oYXNoX3NldG9wX2V4Y2VwdC5wbmcgYi93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoX3NldG9w X2V4Y2VwdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZjNTQ2YTRk YWRkN2ZkYWUzMTBkYWZjZWMyZWNkZWY5NjQ5ZDRjNQpHSVQgYmluYXJ5IHBh dGNoCmxpdGVyYWwgMTM3Nwp6Y21WLW4xKWxuZVApPGg7M0t8TGswMDBlMU5K TFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA2PlApdC1zMDAwMXEKenghWDJ+ IUVlcChPfkMxNCNfTSo/PzU1dUdLKW1TXnRLdXhQPFZke2NpUFA/Nm1DJEJ1 KGFnPjl6YF5kdSRNNE9+CnpeNHtMfHl1SXdKdG13MH0+YiQrfSlZUzgoc05f WXk9fWZAc1FeTStuKWJOenBAT3NZZGdWRjdhKWI2ZHteTz9NTwp6UWpIbXF3 cnRxdCVMbDA5NVViKUV1SCMrQj52N0JNUFFLPF4hUktWZj0jdGclcH5QTjx1 dGpwQ0hGfTxAWUxCTUQKemsyZHUyJD8pdkFAYShxbD4kZGFuJEQrcXo+ZzFq MzxEQlc+bihwU2Fxez9JTz5iQnxPbzlOJH09aVFnPTxGS2RBCnpYN0F7Oz0t IXk7K21gMG9sPGVUR20lRFhfd249dVhKTXJ0cD9CSzVKLW1MSEJ6cS0rKnVH KD5VdTBHcW5pTTUlMgp6d0J2ZDM9RF9MUHNfRUxPPSt+JDEtQEFJVExGd0E1 O0xEMk4kY05zPWgzMyhzamxvbXMqUVZkYmhUZy0zLU5BejgKeiYhRCNGZUNF YG8tTkorMXo9N01uZjhAPWN4JEElSCtxbVY8cHlTTSo+ZSNscj90Ki1ATCVp XldtZHN1Mj1BWX4zCnpwNn1fal42MXYhJEN9V3FYdkxSQSRGIXhhc25tPisr O01mKHZiRV5vO3I4JDl3ZXN4Nj1GK2F3dFpKeWRGUFBhWQp6anFXRzZ2QzQm a3ptfHVqIW5MXmFeWlY0KkB+TiFsaio7RUwhfGMrblk/e185aTFzRld6SDUo Py1PJG5UP0EqY2cKej9aKW9ydmhDIXM/QmNLUj1mUSM2TiR1c2E9R20zeSl8 Mkdaa219czNjZCZmaXo+ZShWdUhAQmA8STwxZiZXITJVCnpyfHNYeTs/Unha JjVQajVpUmFhJmB1NlZjPEckJEZye350Qz9BXktTLW4hK2BxMiRoPT4pRSM0 ekpTfWplJWlaegp6PElBNGZ5TUVmYmVRUkt6OXs+T1YwZCFKTVF2ZzhiKmsl OSMwMTBxTlMjdG1ZMDd3NzswN3c4diQhazZVMDBLYCoKekxfdChZJDc1aDE4 ISQzfjAzI197bjMhMnUrMVF5IyghIztYI216JlM3U2U2dTFeYjFVNmZKIUcw KWolcWQ/YVpSCno1ZnV9Yzc+cnMtX2xxUFMydUtiPGgoWGdHdUdFSzMzbHA9 SHcyVW0xb1Y8ZGY1KShjeCR8QD9WWTdpfFA+S2Q5Xwp6T3hpbFNkaXZQMyEy UDBQVXw8TipMJTxlOWgkKldXMHJofnlqS1JKeiFJaz11THJtR29LbXxtYm53 ZVd6VEFBVnMKek9CQztgU1ZPZCErdH1MS284bjNyczlHRSNTeyQ5NlUwakxP O3MoKjs/JjBhPmphdih7aSt6MGtsdEVoalQ+fUR4CnphUVghJGpScElLZ2FZ LTFuU3d3I2FqOCFeR3k+PX0pNXhna217P1B5UWVTWHJMPiRsLSlBKXFNcS0z MGFLfW1jKgp6RFJFJUdxXjZ+M1dhODk8UVlmaXBLfChBJENwUngydy0pNTBQ byk1JnJMWlcheENFelBQO0RzJVlhdEx+a1IpZ2YKejM5cXRwNismVWswOFdE RD00UGZLNEp1e2o2e15IJkZ8Vnd3RyZjcGkzYUNTa1NTPVAxVFUzYkIwbiQ9 c1EqRFlRCnpRZDMpM1V0aWJJKndvekkpWTZMOEZQM2ZZP01QWldJPWl9aWRW MmYlQ3JxMztZNFZoKm18N3FLOGl2cEBaVGdIRQp6R2lKYDNKIWVgNmtVTSk4 clhKSXxeWDR5RDIpQ3VDNlFwQyZsLVVkbmIyQDg0ZFp1OHcmMjtnU3JPVEdY d2JYVjIKemI8OXtYOE5eOyQzbkN9Q1V9I3lqZGQ9RShhNG1KK0FUM1JrSzx4 RShBYVlVQGhMKnEkOCNpcitZcEwlNlg9JERhCnpWc0VKamtyU0lTdn4xbkJK JG5hOVRGXnBfRDJNRyMtbkR4VlkyTSRwY2k7WDRxeV9Uc2dORl93dj05fVEy TShjVgp6QXRKJDttSy0+NnBvRkFraUpyISYzam1+fS1AWDBJOSh3PSkwM34h cVNhZjd6YlkoaFlhJUV3M1dkSmZURiklR0wKekdBJUdNUjVDQytHJjRGaEcl R01RSXhzTGVuSSM/bzAwMVIpTU9idVhWUlU2V1pFc3wwV19iV0lGZmxNS0Zn WXpTCmpGO3BAJEl5NXZvRmc3Yk5IOTlhYiU5bUJGMDAwMDBOa3ZYWHUwbWpm aCNCWFEKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfc2V0 b3BfZXhjZXB0X2FsbC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9oYXNoX3NldG9wX2V4Y2VwdF9hbGwucG5nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLmJhMjRlZDE2YWViMGQ5M2JkMTMzOTAyYjBi MjIxOGU2NzRmODQ1MjgKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDE0MDIK emNtVi09MSU+KkZQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tS M0RkQmo3MDAwNl5QKXQtczAwMDFxCnp4IVgyfiFFZXAoT35DMTQjX00qPz81 NXVHSyltU150S3V4UDxWZHtjaVBQPzZtQyRCdShhZz45emBeZHUkTTRPfgp6 XjR7THx5dUl3SnRtdzB9PmIkK30pWVM2OzAwNTxePFZDKmVPdSo/PSFzPjw4 QFJab19kZH0+Rihkfj1XP3ljWVIKem5ZPyZYalR3LShZfW48PzJkTHJAdEt1 NTI8Nlh0O2FtKHlaelVFck49VlptYGxHWDJfIzlvQjNNUktEeGRZLTlqCnpr RVgkb0h1VWt5QGEodG4/NiZYZ3cpNX1EcVFfd0I8ZWxve29heH0yPyZoPGsl NDZeOXcmfiVVPS0tKj0tSXdnKwp6dSYyI3RAOTRBVy1rOWd4bWdkLSQ/Qksx SnlMRT1QTnBgOWBAJDFDdztJOFo1dG5jSyV5M3dQcStIcldVS0hJJkMKendW OGdqPDlZRHIhMEZ0bz5EczkxKlFmMkB5THohZj5Ec0JfJVpsSH5odSsxNz1G eV4hIUJnbmhycipZZi1vdTM1CnohR2goX3B0azNIPUczSSEhaF90dmYhbj0q PGp0UEI+d29McHhhSDJFPElKQXcqdFdYdmZfJF8/eXpxcFUldzZsfAp6cFg9 cUdAOURKaT0rQHhKbiRXOWcjZ3wwS3c1Nj02KVFwaGFhZHAoUHdkbW1DX1Y0 UG9eNmJVdCh5cjAwWU4pJn4Kem5BdDBoP2tCZ2clN3VaeW1XUU9td1ljKjBg XyRGKXNqVElXaz0/PD0/OSMxbG4kfDBiXzlsQTFZbWJ1TSg5IVlpCnorYDtx aCNfcn5fP2N9aVI7Oy09TSFHWVJJP2Q3ck4qX0d3aWxqUEhvPmZFWSN1emNM V2pfbCZEPGtnWW0odlJaSwp6ak9vfj8/Y2NgWSgyZTJFaXtRJE09aGRiOV9V YFpGelViSmU9aG1ney1NUUBFeTUtUUo8aiRZIyp8eXhpZlpNISYKeitQaShA JWJ3YzFlJWlXeUhrY35uMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdV TkJ7cjtOQn5DM1lkIXp+CnowJWJgPUt+ellgVl8rWn5GZnhHdkJQbSojbXww bGEqcUtQdSFva1ZLJXxuX04ocndgZGAtUFZqRXF3ZH1mPG5UNAp6Qnh3OzU2 JSZeamo5T3JSayg4OFZrWW9UTUxPX1pTMWYpUH1pUGJgZUVwV2VwWjI9PSN5 MkYrRnV6ODx9U3oxT2AKemohOWxZUUF3RXpwQjVFV1JXKV5wNzdoKGZFb34r cFR8SXBSWStCJjR1V0QjJDFrcHBsN0k9c09aN35NdzBnMEpfCnplUE4wI14m ekoqNj1PcUg1TiYyfFZRRlA7aEFaYDxjd2Z+OXFRJTEyJmZkV2NTR3F2ZTt0 MHs9PG19Pz1NeCsqWgp6aCF6aHxGSy17KlQ5OTRyPip1Y20oaH1lbjchLWB0 Rk5oRVdmKU19RUZyYzFyR1oyVkNtY2IyRiFYa2xBR21EQ2oKemlIJFFPRCEr ej1NYUJiZEYtdTVITj4wSik3bkg+M247SC1IT0ltdEhXKUBCQEQyMC0wSFlD SnlhYFc7RmFCRCM+CnpgY3ctY1Q4ZkdiTj1rQTExPVdAXnVvZU8jMjEkWUBr bmskNlAkZCttNEIjWWFWUFMzdCh4NiZpUUs/M1o3S15IPwp6RGhvNVB0QUlN eGlQZDVXdXw8X0E5VXZ7JHdsIXUqQkRIbig0R3J+O1AwY01XJjg9LSV7YkpT YihTZjk7diNZek8Kengze2w8IW8qM0ZDUXEzPDRPMHN3SypKRl9ycTdyO2JM T25zYkxMTCgxYWp4aCM/KWdyWn5sVVhpe1E0QGM3YiMoCnpvO3J0dFZReUN+ Tlk3TFp4MHgranhAYEZoeFIkelpwcEthPHItMGIyPk9rYV9SdHpueCpRe04p OTxIVW4yYylIVwp6R0tqc1E5ejslViM/VFY5YW50NTRhNGlrSkFUMkdFSzx1 cHpBYVlVKmhMJnlIY2pXOU9OZWZ6dDUjX0w1RFpCVVYKekNDJlQwX3c3RyRr aERQRmJMakE0Z2NoUXJeNTlfPEVrcTwzdihrZUg1MDtYWUVZWl4jYnBaZXQ4 e0BvfTMycjMtCnowMDFSKU1PYnVYVlJVNldWeyZDLWJZJWNDRmZsTUtGKX1T TUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkwwMDAwYgp6YlZYUW5XTU9uPUkm RSljWD1acjxHQjdiUEVpZ0dQRmZtanpHZGVVaEl4c2RYRmZ9P2JGdl4henRO O0syMDcqcW8KSU02TjwkZjxEKmxXQj5wRgoKbGl0ZXJhbCAwCkhjbVY/ZDAw MDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9pbnRlcnNlY3QucG5nIGIvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9p bnRlcnNlY3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiNTM2YjEx YjY4ZmNhNmMyZmVkYTE0YTgwMTEwMDM2NzgyMDRkNjIKR0lUIGJpbmFyeSBw YXRjaApsaXRlcmFsIDEzODkKemNtVi16MShOIVNQKTxoOzNLfExrMDAwZTFO SkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNn5QKXQtczAwMDFxCnp4IVgy fiFFZXAoT35DMTQjX00qPz81NXVHSyltU150S3V4UDxWZHtjaVBQPzZtQyRC dShhZz45emBeZHUkTTRPfgp6XjR7THx5dUl3SnRtdzB9PmIkK30pWVM4KHNO X1l5PX1mQHNRXk0rbiliTnpwQE9zWWRnVkY3YSliNmR7Xk8/TU8KelFqSG1x d3J0cXQlTGwwOTVVYilFdUgjK0I+djdCTVBRSzxeIVJLVmY9I3RnJXB+UE48 dXRqcENIRn08QFlMQk1ECnprMmR1MiQ/KXZBQGEocWw+JGRhbiREK3F6Pmcx ajM8REJXPm4ocFNhcXs/SU8+YkJ8T285TiR9PWlRZz08RktkQQp6WDdBezs9 LSF5OyttYDBvbDxlVEdtJURYX3duPXVYSk1ydHA/Qks1Si1tTEhCenEtKyp1 Ryg+VXUwR3FuaU01JTIKendCdmQzPURfTFBzX0VMTz0rfiQxLUBBSVRMRndB NTtMRDJOJGNOcz1oMzMoc2psb21zKlFWZGJoVGctMy1OQXo4CnomIUQjRmVD RWBvLU5KKzF6PTdNbmY4QD1jeCRBJUgrcW1WPHB5U00qPmUjbHI/dCotQEwl aV5XbWRzdTI9QVl+Mwp6cDZ9X2peNjF2ISRDfVdxWHZMUkEkRiF4YXNubT4r KztNZih2YkVebztyOCQ5d2VzeDY9Rithd3RaTGxBal91I1oKemB1NlUodkM0 T1ZyLXo0JiFuTF5hXlpWNCpAfk4hbGoqO0VMIXxjK25aMHl7QGtDTlNlJVVo YihFNn55TF5YPG0mCno9Q2JZTnU8WVdtQGFNc1pfOXBHK3ZGNiM4PDxedHIo fiM9aXMmJU1fc0p0KWk7OyFWP2s+az5qOz85aWUqciRIYQp6UishbDw7P1J4 WiY1UGo1aVJhYSZoM2hucD9rRGYjelViSmU9aG1ney1NUUBFeTUtUUo8aiRZ Iyp8eXhpZlpNISYKeitQaShAJWJ3YzFlJWlXeWdATTE4aG9zVHE0Z0xUQzAw REdUUEUhQ3Q9R2JOYzAwMFNhTkxoMEwwMDJrOzAwMms7CnpNIypiRjAwMDZ+ TmtsPFpOWEtKZkFSOTA7ZmRDXlpUOX13d1NsUVRfTlljVz0kO0hoPm5pa1Mr O1JYQUptbFEzMAp6YH5yZVAhaDlyWTVmSyM9bWwldiVOY1cyKjl8JVllSyFg IXA5aj9AZU8kIXNWbChkWDJsYnBQUXE3b0I2RXleaz8KenMlajd8OU9AZEhU MT90SHhfYks5dzd+dE1WcWpuaChMPXglTTJJUD83eTxRdyNFaWtkRnV8NGpr Vjh6XyRVcEB8CnpvMF4kaFNYIUNsM1FIOTR0NWAje25BX09lKl8rfUA3cFBo c0FYKiVxb0x5WHIpWnp4dztfbCg7PCY5ZWx2V3RDdQp6e2dncGt7OU9ZQWdL K3U8QzU7OTlnQGdrMmdxZWFzSUJ9XkBJV3orM0d9RmthPSRLZWpxRWNVUVho YTspN1NzNUkKeiNIM2BMZW5DbG1KfUdmdnpvZSQ2WEpxMmtmPkoxe1dJO2tL SjB+fFVBR2EzZHFFRHAmcU5UN1h6cWthYVVyPW8rCnoxIzJNP1Z2cjxnMzw8 QllhdXFeaCReY0crPUhfT21BUHAqSTxyUypMWGZkeT50VFo8VHk5JWc3amFW JWY1TDtBOwp6KGdEJl5XbTlkNkJ2TW1iUzZeUygoQWQ9Nit8PCZGKWkwSzk/ KElsZ0l5JD8kZHdQMk5gWEB9QklCRHtmc2hDPEkKejBVQ3pURj5OfUtvSH1G WHRaNXhVI19Tb0dkUTlpY29pfjMwKz9KWTdrZEQ/VkdaIXdMKW1hMTVHWD13 S3JpJklZCnpTLUszYXJNMyUxd2slJT0xU0BKbT84eit7VDJgKUZ5PUU8M09J PGdKWSs0Nz52YzMrKXA0NWIpQzIrJldPYEc5Ygp6PlUlKEJeQT9ibnRAUi1H I0FYYUYrcVVuPi1icz1jdj1BZjhWWWB4ZEA3WVY1X2ptOHhmOFpjI2Z4UEY/ O2xsX20KekxgQ0puIXpmeHszRmdSQW9DKElYPGx3PUJCX3QoRl5mWDNZMDA3 TiorO2xmcVgqQj08MDN+IXFTYWY3emJZKGhZCnphJUV3M1dkSmZURiklR0xH QSVHTVI1Q0MrRyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1PYnVYVlJVNlda RXN8MAp2V19iV0lGZmxNS0ZnWXpTRjtwQCRJeTV2b0ZnN2JOSDk5YWIlOW1C RjAwMDAwTmt2WFh1MG1qZnVJMkpOCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEK CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9oYXNoX3NldG9wX2ludGVyc2VjdF9hbGwucG5nIGIvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9p bnRlcnNlY3RfYWxsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDE4 MTU3ZjY0YTVhZTYwMWEyZGIwOGZiMWU0YTU1MzM4NWMzM2I5CkdJVCBiaW5h cnkgcGF0Y2gKbGl0ZXJhbCAxNDE3CnpjbVY7NDEkTyQwUCk8aDszS3xMazAw MGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDcyUCl0LXMwMDAxcQp6 eCFYMn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8VmR7Y2lQUD82 bUMkQnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcwfT5iJCt9KVlT NjswMDU8XjxWQyplT3UqPz0hcz48OEBSWm9fZGR9PkYoZH49Vz95Y1lSCnpu WT8mWGpUdy0oWX1uPD8yZExyQHRLdTUyPDZYdDthbSh5WnpVRXJOPVZabWBs R1gyXyM5b0IzTVJLRHhkWS05agp6a0VYJG9IdVVreUBhKHRuPzYmWGd3KTV9 RHFRX3dCPGVsb3tvYXh9Mj8maDxrJTQ2Xjl3Jn4lVT0tLSo9LUl3ZysKenUm MiN0QDk0QVctazlneG1nZC0kP0JLMUp5TEU9UE5wYDlgQCQxQ3c7SThaNXRu Y0sleTN3UHErSHJXVUtISSZDCnp3Vjhnajw5WURyITBGdG8+RHM5MSpRZjJA eUx6IWY+RHNCXyVabEh+aHUrMTc9RnleISFCZ25ocnIqWWYtb3UzNQp6IUdo KF9wdGszSD1HM0khIWhfdHZmIW49KjxqdFBCPndvTHB4YUgyRTxJSkF3KnRX WHZmXyRfP3l6cXBVJXc2bHwKenBYPXFHQDlESmk9K0B4Sm4kVzlnI2d8MEt3 NTY9NilRcGhhYWRwKFB3ZG1tQ19WNFBvXjZiVXQoeXIwMFlUVXElCno/Y2Ng d19VXlpfJTZFWExobGgqOHdZYyowYF8kRilzalRJV2s9Pzw9PzkjMWw/QSpi UmxIR21GVGJrQUAoOSFZcAp6P1opb3J2aEMhcz9CY0tSPWZRfmZDaGdfMT1H bTN5KXwyR1prbX1zM2IqUDRAeWY1dEh1SEBCYDxJPDFmJlchMlUKenIrJns/ bkF0MWgoMmUyRWl7USRNPWhkWiE+b2txLUMtMzlGPS04KnspfWAjLXgkTkck PDxPenomWSRicXclb3BlCnorcXswLXlNNSEhcDR6KjkrUFp5KGZ4bmlBcXl1 RTBgMllYXzBkIUpNUXZnOGIqayU5IzAxMHFOUyN0bVkwN3c3Owp6MDd3OHYk IWs2VTAwTGBDTF90KFkkNzVoMTghJDN+MDMjX3tuMyEydSsxUXkjKCEjO1gj bXomUzdTZTZ1MV5iMVUKejZmSiFHMClqJXFkP2FaUjVmdX1jNz5ydEFldnk9 dldSUFM0QXdvY2s0K053QFlLaGZDaEFuV3ZmTmNSSVNoflpOCnpgbWxNUWlD SjFrUipwJHRLfllKVzM3LX1mUmFHXjBoIXplRk8pWUlFOWJHK3IxOGlGMHY5 REBxWGF2eml6IXJGagp6MGN8a2A+SCYkRmZQRzwjRUE9NiNGJUBHJlJTPDF2 WmVlTDxaSDZvTHA/RmBfMkJPOG4qM1JDKzN8RzI5KSMzPXoKejteZ2UmPlBE bSVjWmUxYlBjTHNEKyoqKWI/Q2E7UjBANCFUNzhuJGEoPVVoKzFBLTkkJkBp QiRhNUU1eUskZ0pgCnpSS2c7R1BCViomail7I2tCUHpkIWdoaj4hWjgxd29P aUU2ez1AKnA1PWJJVzJfRGZvTk1ySWFIRWh2U09ZQm5VcQp6YSZxKFgzdmc+ ZUY4V2pwQXpGJXgzcmIzSGBVVGFOR08haWBBcUdpO0NYbnpkdVRVaXZyVlFY RFhrbFMpMkdYRWYKelVRd3c9ajI0VGtzd3hYSnUmYVBOKVFReiUzOSZfJEM+ PGF6KXdWVGVORnVkJF4kaVg2alpNdWhFelBaTVNwOHp2Cno/JExweXJMKEtN cj88RFNmNU9CYGxPfDdASXReMGBCdFhMdkk7UEo2bEdBMytubXhTfSRlMSR8 UTsqcilkR2ktNgp6Z3hnWnYxPTcocmI9SU9xdiU2fFJkWnVFeSYxfl9Lck9U R1h3YlhUayRrcjgkZk04YEVoJmBuaEwoOGh3WXUydVYKellwTCU2azxJSHRT fms+ISpwcih2djs9TTN3MFIzJE9HN1YrWX1wRlp2YUpFY3A0NVYmVyY0aHVJ bEQ7R2YpLSojCnpJYyNeenAxdTM5ZGNQWiZfeEoyU2FQU2FtZnhQJGRrc31C I0xgQ0pIQlBkIzYzRmhjQW9DKElQXnc2UDByNmVVdwp6XmZYM1kwMDBVezs3 IX4zTHQ2ajwwM34hcVNhZjd6YlkoaFlhJUV3M1dkSmZURiklR0xHQSVHTVI1 Q0MrRyY0RmgKekclR01RSXhzTGVuSSM/bzAwMVIpTU9idVhWUlU2V1pFc3ww V19iV0lGZmxNS0ZnWXpTRjtwQCRJeTV2b0ZnN2JOClhIOTlhYiU5bUJGMDAw MDBOa3ZYWHUwbWpmQ1p6VWwKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1n L2V4X2hhc2hfc2V0b3BfdW5rbm93bi5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoX3NldG9wX3Vua25vd24ucG5n Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhNzhmYTZhMWQzNWQ4YjI2NjZl ZTNmZmE1NTgzZGI5NjYyYTY3ZTQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs IDE0OTAKemNtVjtAMXVnb0NQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAx JXcwe3tSM0RkQmo3MDAwN2ZQKXQtczAwMDFxCnp4IVgyfiFFZXAoT35DMTQj X00qPz81NXVHSyltU150S3V4UDxWZHtjaVBQPzZtQyRCdShhZz45emBeZHUk TTRPfgp6XjR7THx5dUl3SnRtdzB9PmIkK30pWVM4KHNOX1l5PX1mQHNRXk0r biliTnpwQE9zWWRnVkY3YSliNmR7Xk8/TU8KelFqSG1xd3J0cXQlTGwwOTVV YilFdUgjK0I+djdCTVBRSzxeIVJLVmY9I3RnJXB+UE48dXRqcENIRn08QFlM Qk1ECnprMmR1MiQ/KXZBQGEocWw+JGRhbiREK3F6PmcxajM8REJXPm4ocFNh cXs/SU8+YkJ8T285TiR9PWlRZz08RktkQQp6WDdBezs9LSF5OyttYDBvbDxl VEdtJURYX3duPXVYSk1ydHA/Qks1Si1tTEhCenEtKyp1Ryg+VXUwR3FuaU01 JTIKendCdmQzPURfTFBzX0VMTz0rfiQxLUBBSVRMRndBNTtMRDJOJGNOcz1o MzMoc2psb21zKlFWZGJoVGctMy1OQXo4CnomIUQjRmVDRWBvLU5KKzF6PTdN bmY4QD1jeCRBJUgrcW1WPHB5U00qPmUjbHI/dCotQEwlaV5XbWRzdTI9QVl+ Mwp6cDZ9X2pfVV8+NSl3QTVkam51Sm8peUtUU3p1JjI9PCY+RDsjbURhRz09 a3NJd2VzeDY/QV5sTCFIP3o4dE1jZDYKemB9cCQ5diVScn5vVnRwUSh6VVZt X1dhLUFefW9VRnM7JVlHKCgmRUdrQDRsd190PyhYUCU3NnY0QmNpdHtQT1NJ CnotU24laj1KVn53PyZoLVg8Z28xR3VraCE9PEdRKW1RWSskY1AxO0V1LSls d2Y8KzB9M21GM294PGtPSnErXldkNgp6KDhpdnkrKlR+Pzs7IVY/az5rPmo7 PzlpZSpyKHJQSj1hN1A7P1J4WiY1UGo1aVJhYSZAM0VmTWRQREV5elViSmUK ej1obWd7LU1SRzN6VXJXZD80KndSPD1eYnl5NS1RSjxqJFkjKnx5eGlmWk0h JitQaShAJWJ3YzFlJWlXeSVVZWQ8CnpvXjh9JkxlcnZgdlpFRE0wMDAwMWJX JT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzWWQhen4wKnkmVAp6 S356WWBWXytafkZmeEd2QlBtKiNtfDBsYSpxS1B1IW9rVkslfG5fTihyd2Bk YC1QVmpFcXdkfWY8blQ0Qnh3OzUKejYlJl5qajlOKGRpekZXaU5EZUBWTERM PHMpUTMkQTZTSWBHajRZRiF5bj48PDZGeDE8RGtgZEs1R0A/KThrJDs2Cnor QiYqPWBxO0Y8e2kwJUVVPGxEZXohcFNeRFhTTyhePzx+VCFNLXJUbUhMb0ZP eGVnbDF3QDtnbk9qJnxuY0BtZAp6Nnp7ODhMJHNMTip4SzJmO3p9MiZTe3h1 KzlHI3E5VCMzfTsyR1FjfjtweWQjVE1NI19lU0gwdEwwYkc+MHxKOV4KemBV Tkc4MV5iMUIwYC1LTWY8UVFOc1pUakgwX1pmOyRmKVI7U1d9YD5Vdk93ZDlN QmZpXz1Mb3lXU285TU5xanlqCnphYlVsc3Jsbl9POz8jbXRENSsjWUxNJUhj SCFtTno3VVpIJnIyd0wodXFlTnsxZ0JxNlo3QnQ3QXJOQWFCeG5vPwp6dWQ7 RiNMU2YxUFBKLXM8V35Md3dEck15cnM+RW45dWRKKnpId0MqMnM2JmxkRWZ4 QDRSRVd8NihvJHRwWkhncFAKelEoSVNHVSlSdnMpWkU8RSh1Jm5EbVRtNnNO TG81TnlTalVOZGkoayhPcUA3ckB8M0JWU3w5LSRoUmB1PklzP091CnpuWGBh a184Yk89eCRgamZuOWc2WWFNNUQ4RWo2NyQ5U2xvbUVuVCpKKX5wcGs9Ry1Z NVpabG9FWVcxNDZhNG9mNgp6QWFkUCQyOEtCc1gzWVl6QyUwZnwqfD0lKm1h VDl0Yj1AR2NYJWRqd0hmdVlHSipmI3BPVz07M3lMUTkxKWMxaE0Kej03fGdw ZHVHa3IzdH5AZiM/WjJGfEFGai03K01aKG4+RmlqSiQ1WjxBcUkyVWt5KjJq Y0d1eD4qczxpfUNyK1l5Cnp6aHlFfDNxd35lNCh9ZzdiXjZSJXZfTmoxR005 bTJkUz94ZUt0Nkhxe0NSe0hOS2BVUnkpYkxtI1NSNz5RRi08fQp6aVdYPnN4 aW85bVduMmx5d0IrcEJ2bjM9WU9ZfTVHVD50PGxlJWlqM0NBZzNQMDAxUilN T2J1WFZSVTZXVnsmQy0KemJZJWNDRmZsTUtGKX1TTUY7cEB6SXk1c25HJkN6 UEg5OWFiSUdINkwwMDAwYmJWWFFuV01Pbj1JJkUpY1g9WnI8CnNHQjdiUEVp Z0dQRmZtanpHZGVVaEl4c2RYRmZ9P2JGdl4henROO0syMDcqcW9NNk48JGZe LWB6LTJlYXAKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2luZGV4 X29ubHlfc2Nhbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9pbmRleF9vbmx5X3NjYW4ucG5nCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjc3NjRiNzRmNWU1ZTVhZjFhMjA1YjJlY2VlOWVkMTg0NzI3 ZTFmZTAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDQ5OAp6Y21WPE8wUyoz JVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDAx TlApdC1zfE5zQVYKemJhWGF8IURnMXghSCtoMm9+Y2QxPjR+fTlWYURyayZG KiYxPzdoOWNyTlFMZXlAez5YPjg5VEReVn0tRC1SPU0wCnpEWnQ8RSFyPD0z O3FTLWVAV3x1diVIIzBNPG5qNkRVKE16NnxLP3hPPWtuOSZeVkkzfCo2SD4z PnhjZ0FoVC1xYAp6IU5AZDswMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2 R2Y2OTUxVTY5RTk0b0VRS0EwVXQ/M0t+ellgP2JPPjIKemYtbnBROzdPO1Yw P05iXyZKKD08SjM1TF5VRHFqekNkU3lTV3l1IzxgKUAtMD4qczQyVkdUUXdY ZiVsOUBpY2xMCnpOZE9YZXVpeVN5cENNNCE7T0B5Jlh7d1NPSVVYcX5YUXMt fTZRdllTNGhLckFATDQ9MGx+XmY5X0lwQV5aejlCYAp6JEJoa2tKTWY4c0Bz TCpWaExXcGI0USNpLTIrcklRKzktZVA/bm9RMGxZQk5IKmxkOCFpN1pWRGx5 PUVfLUk9VWIKejBpd05SeGRpc2xXdTtBI3ZuJj4hSjlaPEBPeCNKKG9rdjJg PSo9ZS0xK1ohSz1rckVyOGt1fjtkPUI9WVg+ajJYCnozYF41Wj5+eT1oXncl IXohPFhtSDxBLUJ4cmljVF9nfXpNREYwTUJ9JiQ4VXlldGM5YyhFKllgayEx eWJNWkhMagpvRiZSc09Ne3YkIXBZYmpvYGA1U0M4UyE1cGk0Wis7JmowYGIw Nypxb002TjwkZzUjST1fNWM2PwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfaW5kZXhfc2Nhbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9pbmRleF9zY2FuLnBuZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5kNDRlZmY0MjlmYTlhMzQwOTc3NmVhODhhMTE0MjE1ODJm NmY0NTk4CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjk4CnpjbVYrdDE/ fkVZUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAw MDRpUCl0LXMwMDAxcQp6eCFYMn4hRWVwKE03YDtDJmhMNTk/XlZMLWhTY3o4 JG4wdiM+fkc1Sm1mNylwJmgzS0g/V1clSGpAMGd3KjYqKzMKel45ODVqT35M Nkt1SCMkOT50ZV8ySUpmMGN6VU9QbD15YTJvZFktQUohUV5JXihaUD40QCM9 QHw8NiFnZiRuZm04CnpAOURNaj9aeGlxdis/VzE/QmxUVD5COGFmX3ZoTHg+ ZzFqMzxEQlc+bih5ZWQ9LSEjPCs/VmE7dkY2Izc8PF50egp6O0h9b19fM1l4 Vz1HdkMqO2paTT5sSSEyQz9kRyFVLW1MS0V6fGBzViVjNUFAeUB+NEdzXyoy ISk5Q1okKVJFKVQKemtLKWpjPkRzQiQ9a255IWttQW1hQDhlKFQrcDZLcmlz eyo/X1VuaTM7az9ifF43R19oPSt+I3sqUVZ7QHlZQWE2CnpeVn0tbiQlKV57 aH5MTUQ9RzNJaTxuajZEVSo1KXMlSCMwbyl1cmFzcXNaZyV7X0tZRDwtcUxT eTJzPTIjb19QJgp6PTNuZ0l5NWBjTj1GeV8mKFZeX3p4Y31aTS1vJTk2IS1M JHhnNX1WbStgZlJxO09ed2twWD1KVXp+QW9WJjdTSm4KenchR2MjK1BpK14l JH17Kj5FcHx1NUJkYUEwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VO QntyO05CfkMzCnpZZCF6fjA/QTI0S356WWA/VWRQRDU+WGgzWktBTjtRX0Mj Kkt3dWJMU3RUVH0xX2ZMSWt3czdoOEEoTXpXbU4+Pgp6VS0hKEMhZzFuPm8x UU5HRSlGLW0meVYtXzlacH4wJWx6d2tNWD5ZN1F3JCtxT0MqdnYjOU9JVStF NFZxZHB8SHAKejM9Unpzan1SbEhWYENvKFFBOUY2SzBaTkFPaW9VSUJ0QV98 TyRgdTNwUVh9YVZzdl9YVjJ0Uk5HViU4KlUlMjFRCnpwSUBKITlwOWFpJCE1 PzgkUTI1TzlBPWVEPHQpc3FSNE8mN05zYG9uaE4zN2ZiUmU/MUlUPyM2PUk3 QFhwaj1wMwp6UkRvKH5YPXhjcW9uQ0pNJTRqczFGPVM8PjE2a3d8OVNOamZ1 Y3lGYkc8OFEqaSE4Rk4oOz52NXw3TjdYWUZiXmoKemk2ZXJgWjtTN29nKyZX bXYoNF9ua2hMYHlgMnA8az1nO1MtNyRUJm9tcX02JDhpUnEtZll4ZEBKSFNF SHY9ZDhOCnpVdkcxSHZhcWxnOCtNPndabnA8UkhhRlc0UW01bUtIQ247RXkw SndBP1JJWj5MM1ZePERYdilDbWRpemhjWUU5Qwp6N2YwbFpvdDwzfjMjWjVM NGA5Z05VZUFzMzIqYHVNQVdFU3VSeExQZWNDLXRwKlcrPFFBUVRFbUx7bEtS emFJQF4KejdDdk1WaVg5eHJHMzRrLUslJnRFRCVPT3Eya21tWHoyTmNyZD81 JVE5NDJ3KF8/U25jRVcjRlI3bURAIVZ6RHIhCnpsRjF+NEF0eHNzdllTWEco eVJzamk/YXdJaSpQQ2VrdlBNZ1Yjd0s5JnlBZypiMUNVV0NYOzQmO1lHWGZg JEdZVQp6cX5oQGxJTCtxcm1tckV7dUNBXiF4V3pSQ3hrOW02PlcxKndCTlU0 cnEjJk5XRUBVQkpFUzdQa1FmV2dUaSQlTCYKenRfeWBjbCMxbllSVUFvWVNl RmlxVHJQaERIPkdPejIxOU9kZHYxKEpncEAheWc/NGVsRnhnWU1FUnsrcXJD T2BxCnp3V3B3bXVVPTsjS2YjNSs5ISFDPUQ2PHh8TXgkfXhqPnkqUCYxTjBf YHZvTCokWDxedVNMX3FnPlApRkxvMFhATwp6SU5DKVBhenolWW1kbE1BK35X dmgmPmZxM2JoJSklbjhqVkkpdz02IU9uQW43WTN5Ykd1WHpCcjZiMzN4PXc2 fSMKejAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NGZmxNS0YpfVNNRjtwQHpJ eTVzbkcmQ3pQSDk5YWJJR0g2TDAwMDBiCnpiVlhRbldNT249SSZFKWNYPVpy PEdCN2JQRWlnR1BGZm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6dE47SzIwNypx bwpJTTZOPCRmQGo+S1NwV2I0CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9pbnNlcnQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfaW5zZXJ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li44NjJkODM3Mjc3Yzk5ZTE3ZDJiNjYyMzJkZTc5ZmNlMDEwNzUyZTdjCkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMDY1CnpjbVYrXjFsSWVCUCk8aDsz S3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDN5UCl0LXNC bWdLfAp6VFUkMVchM25BMmErYVp6bDlJdVhIbWFGOG91NEB9d2RIbEQkM2VY NCVjNThrO31RenRNb1BmeCRFdE4qI09oPGwKej5UQWQ3WHZwbFQjZCZWYT5f X1kldmMhQTkhR0x3bT9BeUo2K3I1ZTB6SlQxbmZQMnlKK2Apb2AoZUI7RGdN YCFZCnotbyU5NyNmOUYraEskdGktXllqRiRjVH5FPyU+SVo7bW5HYys0MTdl ak47SVo8aiRYPCt3dFNsa0xBI3o8a09KbQp6KFZeemlxVTYrKD1GKzAlKXNw N1pxdmg2PD1HM0k7KXVwY0JeWEEhPD0rfnlgKlFlJiVtZyg1MT5EajJ+Kz9W T3YKenNwO0ZRPilOO0kta0l2JXNfZmpqPkVOMnstbUw4MXk2Zk1xP0IyVFU7 SH5ROG9iQkpjP0JUQk07SmZQTm8kVFZUCno/Y3UhYTxGTWBKdkczJSo/ZEch WD1Da2tSITBfaDRAOTRBZD45ejNhIXRtK0JAYShxbj4le1d5I3E7Z1BeWUYr TQp6IUxucmwwMDA0V1FjaEM8SzwzekgwMDAwOWE3YkJtMDAwWFUwMDBYVTBS V251N3l0a1FoZTw/MVI3bDZ8bTBOU3QKelAhdlhLJmBsQkIyQ0phT1RBKWF8 cShHcmkydGtPMVRqV3ZAM0lRVl54Qm1aTTs3UUttNSkzMkdJSE0yVTU5QCkr CnpPN3sxaUdsUmtLSDIreztQfEVEMm88aTl5N1J3b1JhYm1TelFrU283d3Js Rzghc1dXNVptdDQ+UG41MT1GJmQyKQp6PklCaEJ5KXY4NEh0RyFORjYhI14p RTEhcihwUjNUSk1XflAwKn0rX15sezFZY3N6JT5FWHk7UE5zPUBIezBzb1MK enNaMVhwVDRUYS13T1NwNFRxelgjQVo0QFpDU1lVbmdRaGh+T0kyRH1zbUxH fjNJeiRlKzROSFJ4PnlZSnV2VyRgCnpePGtCeE4oQ3dYIXNvMDY/UXw7REFX QStASHk1elpxVkImK0BsOCQ5b3hyNW9zMH5STDJtTyhtdUFHO2slPT12PQp6 P3smMDN0UjB3LVdPK19GPi1WSkBPeG4lbjVRZF5DNHdmKDBJQXM1SWltc0M0 dF9FVD45NEBaKy0qOForNjt2ckUKekRtTDRPWDZvKSUxVGg+QTYqcD45OVdA LU82ak1AKlpRTXFxQjl1WlFNZ1c3PnAqaSNtKzVndVJnUTZoeFZEciR5Cnpw JlRtZypWeGlRN0soI1RxMSZEaTRqVk9lN0syaTtJRGo2ez1RXk9oa0hGYGo5 fmo4fis3dHsqITNYXzU0en0odgp6enlWVSk9YF58K218YD48RTx1ckQ3Iz96 ZHBMYmchcUVjeSU1RW07aiFDKCREVWF5emNTSjN8QWNTMHBhNTJlVXUKekk/ Ji0qd3l2eEVMMVhLJGgrPTYjSTFtS0IyYn5QWi05dFRAaD0wKnY0RFl7eyFv eHpzP1IzV1U2P2AhO2BDIW5XCnowblkxakNuNF4xcDZeZ19yS0A3bVMrRXxy SX1TMURgRlRXTiFUVzFjQm9nczVsdyotZGBMflV8R2J5OD8/cEohYgp6M18x bXNyWHl0emtDaD9SUnEofTdYKiNtbz9NT2o5Q2UmM2pLSUxNbCsqamV5RElf dVhScW9ranZXfmZEbWQoY0EKajk0aG02bFRVeTF8TGduJnhnQGBFbV5BOTEw MDAwME5rdlhYdTBtamZTJDtlQgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfam9pbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9qb2luLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j MzkxMjMzYzQ0OWJkYzVhMGQ1MmQ1MGY1MjJiZDNlMzVjNjQ5YzM2CkdJVCBi aW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMDkwCnpjbVYtSTFpa3gtUCk8aDszS3xM azAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAx Vwp6cnBHcGohRWVwKE1aVzF3ITBBKU0+Vj8kc2wtVGZrJmdfSEg/VGdnenQ+ NSFOeXkqdzE7dDtGaThte0FBI3BgaikKej5gdVBzVEVYWEojcHNnTj9fNzxA V14yKlImR0Vnej9aM2g4IW91IzspYnJUY152PSluKGI0a00pYiF4c19pfm5A CnpUWmcjM3ozaXV7PWM9c2R1Q005RSNfITlfQHhIKDkjbTRafio3VSlUSHVV a3lAYSh0MSFTMlMjQDZGRWctcm59Pgp6PUFXeXE9KER1eXl1SXp6KWJvOyso VDFzSFFqSG1ackNZUFhybEdgTWd8YkcrcyYkVHF0OCR8P3FRX3dIPzYjKU4K elckV2RoPmcxajg+OXBfYncoc2IoXjZiVGdzQTZgaUpEIzxOdUcoPlV1MEhl YiNfcn5fP2Q3clQ7Oy09TSFMe1VpCno9R3ZDISpPVFBha219czNkJFU2MSlz ZkBVa0spZ2I+RFpAQCFCZ3dydG00cCk7bXdRUyU4QlJIcjAoTHE9K355fgp6 LU1QOHpmNGM2MTw8WCghJlkkWW93KFI0dXl6cXFGekpTfWplJWlXeTxJQTR2 PERCVz9vMGlPNz0tLSpfO0h+TX0KenNxcEUtQDgtYlgjZjlDJGc1PUdmd0x8 WGEwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZ ZCF6fjByXlFwS356WWA/VVVKQyg/QXIoVl5CYnBSbURNMmwtMmIlRT4kJDYx K2dxO0RKP0FweD5fKThIRUYzMAp6MXF2PHlJIVFZNjVpPGg9Sm4rSk9uM3NJ TmR2ZVpxdHtffmBNZHBUUjR0ZTx5dkVrO2Ujd019KGNGVWMrQkh1RXgKendY TUNRUXwhOFR8M1NDTnd+VmRBVD12aXNDTkd9fj5VcUBMX1pVNnRmQkl8eSpe b2hOJjUmfiQ4WGcmYXtzTyZ4CnopJVdfMTlSWmdsTmlOaiRfVEJwcmghY19B Wm51UG5LWWtrZmR9KU5+Z143R1k9OCN0cVdRQE9sSklqayoxJCNXPgp6Z3Fa K3l6Vy1hc15kalIpZ0U/bm5AfXZpIUghPUw8MW1mak4ze00+Kyg9KVNZQ3cz QlhgRndOcDZmZSRNNys7aTYKelAwVHN8I2lmQUJLeVd6fVVnMSZePFVxdnlI MytTKXR3JCtkb2FnRWZMfUhkb0lHI3dSRDJWZnI3SmdjVTBPXmcqCnpVa1ZM em9HWHJ5IzRAUkBsQjBOV3NeSClGXnA0ZmZtQXJOMjReaGRmcytPbXk4MEdX JmYtb057Z2pjfUlFNEQ9dAp6d2ZNS0JRQG50OFgxaEZSMXt6TzsrMnEqUDRy I0poRCR4PCZjNm9PaDNUeUYxNndKUmVpMkEqTiZPJkMoeVE+QSoKelRUZGhf Vjg2PHx1SXA0VU1sQX5hYTFnRGVHR0hxS0dxTCZ5XjRidSMlNkBuK2VFXnhQ cVU3dTxZJWZOV0hZJCorCnpSJTxGUmwxP055diFHT0tISHthRUNYTW9lU31Q VjB8M2pFd3RueHVsKCs9fk9QVjlRRld7dj48V1ZnQnNvMFdrOAp6MDAxUilN T2J1WFZSVTZXVnsmQy1iWSVjQ0ZmbE1LRil9U01GO3BAekl5NXNuRyZDelBI OTlhYklHSDZMMDAwMGIKemJWWFFuV01Pbj1JJkUpY1g9WnI8R0I3YlBFaWdH UEZmbWp6R2RlVWhJeHNkWEZmfT9iRnZeIXp0TjtLMjA3KnFvCklNNk48JGY/ ZXhER3luaHEKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2xpbWl0 LnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X2xpbWl0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzNlZmQ1OWQ3 MDQzNjM0OWU1NDEzZjhjNWQyNjczMjAwY2Q3NGYwCkdJVCBiaW5hcnkgcGF0 Y2gKbGl0ZXJhbCAxMjM3CnpjbVY7YDFTPFE5UCk8aDszS3xMazAwMGUxTkpM VHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAxVwp6cnBHcGoh RWVwKE03YDtDJmhMNTk/Xk1GLWhTY3o4JG4wdiM+fkc1Sm1mNylwJmgzS0g/ V1clSGpAMGd3KjYqKzMKel45ODVqT35MNkt1SCMkOT50ZV8ySUpmMGN6VU5p ST1VS3QkWXNjdWhWYEhmbzd3fmQmP1F3REdhQiR+dWFPSDFyCno7Y2psLVpF ZXxYWX0wRk5oTil5eWpUeW1ASHVVa3hAYSh0bT4kZGFuJE01TzFeWDxtKz84 V1pwditkQHg/ZDdyWQp6PiV7RWh1azdLaj9CSzJOPSkkN0xWQyZfYz5mQGE2 PmIyP01uJjtlPz1pOFItPEZNdHxsallUdD4pKS1XJXdfMV8Kem5kYUcqPGtY U20ofiM9anNfKkV0PS1ycysqcCViYWtFK3ZhQDgtYm88aUQ9amFMMX4zdkVG czw8Z259QnRtKWdUCno+RHM5NztrfnJ1ZEE4PyN4YXhvNiZXeiNBaXxOPj54 JEEpQSgybjVCaVJqbSs9aG1qQCl1cnY8eVVsNTc/QV5OTgp6KHhjfGxxVV93 Yi1eaHBHIylqdDlxfXtAVS1OQXo4KDRwU01oMXxlXy1OU18yekpUUDtwWVA/ cz4pTjtHKTEmNm0KenEyJGU7PElKQXcqfHlyZGVkRWlYMzd3SlgwMDAwMWJX JT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjAqcHlT S356WWA/VVVfTzU+WFYhWGBgQEUpUjN9TmZ8TypCJG0pdWBCeVM0QHhRSXo5 RlBhZGJDV3kjXwp6NVF4SVItZCh0MDs5XmVwcD1Od08rfVdLdXpkODNnJiQl TWVnWl56akI2dGx2ZyVJTWdTUylAKkplNWMhTCZWVXQKej1oOShmY3RqPX1C fVRgXyQ2cFlGaComT3tpLWAkXkxoK0ojSDkwdmNCfVFKcW5VV0Q+KTY+IyU7 PGhkbWxCcWolCnpuTmkrTkd1TWRuWkokJnNtMEcxJXpuaCglb3R2QX1YZipH VT1JNTM3PllecEpBYHZYO2JoLXVwVC0xWX1xTnBXVQp6cmRKSEJ1eGQxIUVy Nj4hQjByRF8oWEZrbT5Da0RsK0pMZyM/S0lGMXI7YERyJWtCMDZ1SWVIbXVh UU5vKWstMTYKej4hcmNxXiFiY25jS2c+XnoqUnpzdCVVQDwtVkZtVkszfnVU WDgtITtQMj5+Vl9SQDl7OzlWSEhGMUE+ZjRGUnN8CnpCQT9PRTd2TUdVIzhz Vm5rPXJEeDFedUZwKCEpfUtyazchTGhoWiNXRj8rJlc1UTs+akZ+Qyl3OV4x UW5VckZBRAp6b2RPIVcyKWZNSk1QeHI3UFhNbSFibEtoZWhQcUh6eUZDRSho UXFsN093aT52THdHWnBqNmdJVlBvKTdAYiNLT2gKel5JNCQ1dH5pYE4yMjN1 dUtNWlZnZT9KT3xSNFIxPHhULWdPPzFKZmM1bGJIJjlgJmRIQyEyaDhYXzND KShFVD5LCnpDRWtUbSRpO0NjbFJXe1VobTVvRXRaeWIrZXo1VTA5T088PF5O PXwhNmdYa1Q9eUlWWVhLQHhPbCpRcGB2Nno4dQp6cDtRYHhuQXw7QzxQSVRV RVNfaDlFMHhMPlZaYERJdnAqbWR7bmJTbHh1fGxMTj52Y34/SXNJIUxHTDBH Zj48SioKeks3eWxzeklGXko3YVVpR1lOZFg4QzQ4fTc3dzI2VV4rdSE3Nmhf KWhwM2RkYVV+QWBSZyR2LXlXclNQfk0lcWhgCnp2TUFSMEVZTSZwPCNNQmI4 YDklfllxX1pORjBQdSo9R0VWdCpufEZhe1JHYTgxN0hSaipQajNZMDN+IXFT YWY3egp6YlkoaFlhJUV3M1dkSmZURiklR0xHQSVHTVI1Q0MrRyY0RmhHJUdN UUl4c0xlbkkjP28wMDFSKU1PYnVYVlJVNlcKelpFc3wwV19iV0lGZmxNS0Zn WXpTRjtwQCRJeTV2b0ZnN2JOSDk5YWIlOW1CRjAwMDAwTmt2WFh1MG1qZi0r R0hDCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9sb2NrX3Jvd3Mu cG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf bG9ja19yb3dzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MWMxMTQ4 YmIxODVjODc4OThiM2ZkZGFhNzZiZTM2YTE1NzAzMzM2CkdJVCBiaW5hcnkg cGF0Y2gKbGl0ZXJhbCAxNTIwCnpjbVY8TTFyUGQoUCk8aDszS3xMazAwMGUx TkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDc4UCl0LXMxcHJLTAp6WWlu PDlaRTxkSGIjaWpJV0tvMjNUKTFVWHhNeHdnWDtGSzRjKURzKXhAJUUzaHsz dlVRR1JAVXheWW99ZXR4YGoKelFHPFloeW1lODlmYFl3eFFIWHx5ekk7KU5o PXsqe1FIK1g7Mzh+YDBmPkRpKGpFOzxxej1UbmJqKmZEY3BeJVN7Cnp6PSU9 OGgqNlN+bDlROEAhSCtoWW0zK2RFUUkoYUltNm4jNG16UzVBbjhjRCUjRiRZ c3dkSTxnb3x+U1liKjlJaAp6cGBwVF9RTzJIOG99OzZscUA+NUFROS09dSVj NUF4ciV9bk1RQSl0KyVCeFk9czd9aFFRT0I9UyUmJD9XdjlaanUKelFtQ2BE VUJ2NEJ0cFRkRndXX3daVzUoKnV3cERBIz14RTY3JmJuQnd5MUxHflMrQmdq WnAtWWp6UEAkTT9BcDcyCnp3OEZ5TXlAfSghYktKZ3d8R2hBSyhlSmp6I041 R3hnd2dLWiEtSXM9QFpROVAtb31RRSliOEtNaHVfR0VrPTU/dAp6JCUqMDJp a0kyKDxJQTRuJld6KkNwNSlEKjs/UnhjJll6JiRAI0U1dTw8T3p6KH4jIVRx MnwkfDxrWFNvKHhUK20KemxJR0srPDxedHQpVEhPdHJMTiVmPUdtMCEqUVYm I3J7PnowPkRqMn4rP1ZPdnNwe0ZiPkQjTDcrUENRNW5kO3JECno/QSpCTjtG e34rdG4lSGE/QV5OUy0+dmZBcnxqT2teeG1vTDtIflE4b2I9elI/QlRCTTtK ZlBObyRUVlQ/Y3UhaQp6O2l+Tjh1PUx9dD9kN3JiPGdmNEt6VX02Kz8maD1h PC1xcGt2aGUxPmBRQD9pPShHMGN2LWFuLUA5RE1xPWQ8d1gKeiF1YVU2QGEo cXM+Ym0mcXhiZkA2e3B6Oyg/N0gmcCNyZl5OYFI+MkA/IzEpKSRwNyFaYFNI TntAeGxBPyF+Z05WCnp8TUFsT152KGJDKWNeRit8TXRpS19SMFZEK1crPzN8 TTw8U3lVezhEMDAwNFdRY2hDPEs8M3pIMDAwMDlhN2JCbQp6MDAwWFUwMDBY VTBSV251N3l0a1JFPWZjfFI3bDZ8bGomQ3lRNWVSeGVIK19OJVdTdXMqPCFt PSpgQnU4QjhpSEkKekN+bWxjcG9qd20xZ01OX2hOMDRBR15Ia3lNcDtfZnpX aUM7eHB4I2lqLUprYGJMeFpkaGk3S2FuY3NRZT1laDM8CnozWXd7WlB6TU9N cmNeJEo1REVsPlIzYS1PRilAZTh4Z3IhNjZVQUJDKiVkQFpVU1opYWYpXjEp TF9gUlAxZ01GYAp6clAkYjVBKDBDNFkkN2k/U3kpSz9MNl9ZLXFxYW5iPE0r Kkk8fCZtVWNBWmJWblJlflNPN3NDbjFfbE8zIz88NVMKejQxcG5yVlNLPHgp M2dfMEF8flpSJSkwUSV4VlN8SzhSK2I2X2kqWklZOzVjVWpOTk1PMkRIKHJi OHlKbml5UFItCnoodFg9R3EjWXNjN19sPmV2MEFNKD1yWmNZa2ZAWHhqNHQw bG4/KmVCPXgzeVRifntBNnQrJE9kYU8hR21TfjBUZQp6MjR7VEUhQz5TQyV8 R3RxNXB2UHgxenR5TVF4OEl9P152Xz9ecUNYSzt0JE9Wbyk7WXliUH0rWWZp ISl4dmRHbzwKenFvMk5me1BGJHNATCslY1JAZnp6RWlseF9GaGp1Qy1BKCZ8 KlhlTmRmRjZwWCteRWF0Y2NhNT40RyNBOUszVUhxCnpObDhoVzBXUHsmN3U4 TEdRWWpRUmdxKFlXa1dtKFM3JmVZRGJ+X0glPW1kX00+UGlZdzNQbVlLUFFD VWM0P19KMgp6M1lKRX13cE9aQzZzUmpMbTBKKlV7Rk5XTXpoZDBXV0VYQ20j b3xJcHswbCNGSHtgYnhKTiVxUU1pRnZuRzM/QF8KenlQUkg1ZHM+XnxTLTko TEhhQnBZJjg4MDJXJCk4eEZGJDwhYFIjNCp6MkBjeDVXKHxMYlJtWj4ldFp6 SGRXN3RXCnotbk1hVlNtPiV7QXhqcHtwOT5NRVA2cm5RRTJVQj8+VlFveW16 I205QVlZfmpkeyshYitRY2FpKSo+JHxHNjkyMwp6Q0x7Un5JNnc4NlFgVXRH eC1jMCFLIT1fclRYPlA5MGZ9V3lQTElDfU1iKXt2KTR8JGQoQ2dia2kmaihC eiZ7d0MKekFNWEhHPXB2VHs4bVVDMD0xMV5pMVJ7RF91MmMpRUJvZ3J5MiN6 IW1BIzxoRER4ajgjI1klcH1aTHllTDZUR3gmCnpHKiRKV1VhZUh0fEZ5KGlD SWRWTHRaZ0t6WjI9OHh3SGtJJm1ZM0peNH43PjVEPTlAVCNIQD5Ra3d7ZD1q fk1kVgp6I2xXZ1ghVE9PQmVuYnlYTENkS3whWGlxc1NYMihtcmJnT0dFdTBA fnBvYGopbDlKa0s1PSk9JVI/Z0pfU2liO30KV3VpY3l5bVglUWUwMDAwPE1O VU1uTFNUWUdyQWIybwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf bWF0ZXJpYWxpemUucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfbWF0ZXJpYWxpemUucG5nCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLmMzYmQwYmI5MGRkMmVmMWNjMWJhZjdmOTMyODE3ZDFiNmJkZjQ2 M2IKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEyMjEKemNtVjskMVVtYlBQ KTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQ KXQtczAwMDFeCnp5VWNeRSRhU1gySGkqSFYmRUFhMS1JS31Qcz95LUgpWm5H aC1tVEsjelMhYiQlPFYoSD19b2ByUV5NK24pYk56cAp6QE9zWWRodHV3QC19 N3N7Kj5rP3k1VWIqMyNwcW5hPjV8cCZwUktIYW8xJGAtcH4kYTs7XjUyUi1v d0Y8SHVVaHcKekBhKHRWK3FkMT93JjJ+dT4qazs4PGV1Ozh3ZCYpWS1QeUoy O2hYUjF2KjZzcF42a2FVeWAjc2ZiPkd7OztvWnZhCno9Q2JrWCNONX1rK3x7 JCorUThAQm0qJn0mP0JsVEEqdE9mI3ZGWUhOPS0tKl87SH09K3pVMC1CO00+ VENzYm9AKAp6OFN2KTd0Skd9VyoxaDFgJEZKTFJ2KkNCfT0pJnNWdExmYVQ/ JjdgTChYWkxodUchQTVxUXpnTyVWZTxKYkdQU3cKenhhKXU4KFUwUUpqT3Ay XitTMEp4KVZzUnVmI0otRz0rfiMlJSZncWd5NVAhKj1obWoqKnYwSkt5NCV2 YSt0SWtACnopVEhMcXF1MHIpLV5ocEYjZjlDJGc2N2VvKnZ6WmclZDZKTXNN Xm9CPGokYm56SlQ3PCF8VTAkK1JuR3kmOX4mdQp6cDV4NCg8SUE0YSNpclcy ZWNRYyUmPWdjJTAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7 TkJ+QzMKellkIXp+MCg/bkNLfnpZYD9iNnAqOGJLNVhVX3d3I2pHQUkxclZY dDBBfD95VU4+UGc3OGJnczdMa3FwUEN8eUFRCnpefn1oYzt8eUB9eiZTYTJA SUtzXio+Q1J0P2s8bl9RMihlTkBsa09kSjkjV1gjcjY5S3tEczl1O1MmR0op MX5FUwp6ZTJmVElSQGFgdDVXSVl+elchUShrO09MfjgkdCskMyhFdnE2XlRU ZmZ8YSRtbzlfZzNQST48VTcxdUhIQGlxbjUKej87aWxNTD9SSiQ5VjY3MVI0 VSEjSXp9V2luTXtKWlR0TmAyUW1LQHB1Mk40V2FgYE54UWZYIW90IyRee1ht cn4rCno7aiQ8Y2BXYWMmPmdecWpkOytNcmoqLXQ0RHl8YiM2YmQqK1B0JTVw RFFmaT13UFEzSWNabj04ZyZ4cCpDS0UkdQp6KGRifGI8Tm0oY2YpajwtWU5Z e2ZHVEJJPykqVCFnQXUqZm4xaEhFOFh1ejBrSFV+KSM0azU5YSV9Iz1kWF9V Z2kKekkyXjchYV55WmpXU25CeFpudH4+eC1zYExHUDVea1U+TD4pVHJBNjsw Q0BqeGVMMDFPK089M0xVbiE1Kj4rfEM7CnojQEo4X0hnRmJYMG5oI0l7UVVV JWB7fjZHSDsrcjw0VFp4SWwwPjV7VjkkY1YqcTxwRUtoWUdzKTlMaDV6SG1J QQp6ej08T28ydFgxe0NSMkN1LUFFdTMzaStyPUplfChxV1NrLSFPUW97SiN5 bm1oT3lOJnRHUCR8YHVAamIhV2tFS2QKekZKeV5OPjRgKVZla3haaW1HQ0tD aWhRfFRFKVdFIXNBUTtPd058VStCJG9Wam5Gb2IoYEttI1hNN21OZlF1U0pg CnoqMkdFYkApRikoeFZvQWtuTSQ9PGZ+M19WMnVqZmc/TTk9fkNKMFBYJnJ6 TGJ2KVAkQFc3JEZoLXJ3JGFkbE9VWQp6YiRFYTB4PEEwRGE0RVhPO2psLUxk SkNvSy1gdn5gYU1GT0ozd2wjWHZvI3VCUS1pNGxLMEs5LU0pMlYmV1NwWWkK ej5yR19vXmloaD1VQCh8X1YtTk1lKW8ranQoZVB1NUFLP0gxMDN+IXFTYWY3 emJZKGhZYSVFdzNXZEpmVEYpJUdMCnpHQSVHTVI1Q0MrRyY0RmhHJUdNUUl4 c0xlbkkjP28wMDFSKU1PYnVYVlJVNldaRXN8MFdfYldJRmZsTUtGZ1l6Uwpq RjtwQCRJeTV2b0ZnN2JOSDk5YWIlOW1CRjAwMDAwTmt2WFh1MG1qZlZKM3Qq CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9tZXJnZS5wbmcgYi93 ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9tZXJnZS5w bmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZkODI5OWZkY2I3MjYwNGQw Yzk3ODE2ZDM4ZWUyNWVjNTE2OTlmZgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy YWwgMTEyNwp6Y21WLXQxZXA3WVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8w MDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMXoKem1DPEh2KGFwfkN5dUl3 ZCEwcGt8XjMmQXckSD8hOyRuZVVfQCFRKz0qNE9wbjtyRkpmPUJjYWEhTlRz diNxWUpZCno+JCRxQCFeSDIhI18pIXpXS3hZOHB+UE53cnBHcGohRWVwKExB PlpuITBDSUA/fVhGdlc1KCllJG4wKio/M2RaYAp6cHhnMDsoZTh9WT92ZDUq dUhmP3RzcDRKND5OMihFYjxPTiskTE9RU1ZSRHdDIUgraWNAV31BJncoc2Uq Xlg8bSYKej1DYllPdkdNRH4+ZzFqMjtGezskbSo/QS0/QmxTZSV3Xzgxb2Fv K309R20zKDs7LW80bkM5Nyg8PTJ6ITtIez82CnpYWUFtdkBhViRGcyYlVz9a MHB+eD5mRWFEPC1wXzhrS0BwZT5Ec0FibGBtZUhDQmV3TDxrZ2FKb2tnMDtV M2ppTwp6cDAkVSU/U2JVZWttMWRZaT5xdml5aUp8WlZ8dVZheXpxcVk8aUZ8 SXJ8I210enNJKyQtZl82PWZBSHFPPSt+I2AKeil9YCY9eVd6fT07SysjSSRB eytCcX42N2E9Rl85IyQlKT4/aDI2dTA9RnlfOy1NWiR8cVVfd2I9Rnk/JCYh T3d1Cnp4N0AjZytyNTl9Jlk8MUZnNSU3ZEk/O29fMDAwMDFiVyU9SjA2Xnkw VyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wdjxfM0t+ellgP2JH WDUocl8zRGFHRG5+RXpRYytmLT1odD9lZjRGX1pUMXV3RiVSKExiXj1XV2ZL TjAKekZxQCRLPjsxLW9iNjk3YC1fJHB+QE9rbVBgPCY8WntxREAreEUjazch V2glVzVuXm43VnElaFRVWSl1Jk8td3RUCnpHdUhfJDhOVj8qSjRmN3twVDlM bU95MGdUSFNAb2F2dThPK1Y7N2hPYV5iOW15aH5uKStAcCohWjUqTlF5V0gq dgp6KVdnTGBPT0w1MSVUSElIUUNRO2djc3k9dWIjMll7b0xYTDhlNmZOal9P ODRmQStQJUhIKkZqTnVnflo2ZnxzVWcKektsbTlZNUNrbW9nK2RgMz14e2o5 MDI3SHVXMHZJZ0tPfUF0bVNyRmlPKGM+d05JWkBSIT9MTFcjMWlaMmozd0RI CnpXZmBPaHBjS0ptSGp+NFdIKC1vdVRhbVk7U050QD9fI3FnSkMzQkdESURR a2Jna2UoPWx3dilOUWdIY3ZMOWlsUQp6OHs2KzMhKyF2blIwSXs5T3M5KCtA UCZkayo/SXJyQlFqKmtGc1JybERtR2d6PygmRn4lYS1LUj1QekhrTnM9c3kK eiRjJmBlZ0ZRajBOTEooPEdUKG9jTn0/IXxIWEIxYFhBNH5zYCZWKz00RUda QGN8bmpzbDRXSno+ZExTPHY3YVQ9CnpQYSV9YyllNldwUmpyPncyOTBzTWBH UF5KUlQmaHUoUCpBUjJIJUN4OF5zRCRPO2UhV198PENUJHVOYjJRWERqWQp6 dy0yJHpXQER4K2wyRE4pKnNzQHsyWE9kRCpOXlpJdDd1d25tX3FNI3kycDRU WWMqN0N2KC1BJDUkU2UmYyVyQigKekR6QERePkY5OVd3TTdPZ2JSKSU0dWgr dzhJWShvY1Y+eTJUV25yWkFDbWFEQjAwMDBiYlZYUW5XTU9uPUklOUhXCnpW UlU1eEdCN2JQRWlwMUpGZm1qekZnaTNkSXk1dlpGZn0/YkZnVGVkOXNtRlVD M0hudGJZeCs0V2pid2RXTkJ1Mwp0MDVVSyFGZkF9U0VpZkB1R0JZfGZHJihS Z0Q9Oy1XRmZodU9SamRGMjAwMm92UERITGtWMW4mT1B5WVlfCgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9tZXJnZV9hbnRpX2pvaW4ucG5nIGIv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbWVyZ2Vf YW50aV9qb2luLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTlhYTUx ZmNlOWQ3NzVmMTY5ZjcwZDExNTc2MWU5ODE3NTQxYzQ4CkdJVCBiaW5hcnkg cGF0Y2gKbGl0ZXJhbCAxNTk5CnpjbVYtRjJFaDQ9UCk8aDszS3xMazAwMGUx TkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDkzUCl0LXMwMDAxYAp6c05g bUEoYWc+OXl1UiRkendOKWw/YTxOayk3MTBGJG5WST5AWE8yYisxbUJvLTFY QWFeVkhQeil6PFhrO3JHMH4Kej81MyNac0gqM3h0bW5iUD8jMEZMdzYqSEN4 OWhwTz85STtkKGI0azUjUDd3JUBXO3NUKlZweCN5bShUTDhLSn5wCnppTWlX MGh7MEgjJVd1dUBNWlcxdyEwQSlNPlY/JHNsLVRmayZnX0hIP1RnZ3p0PjUh YSEwQlBlPnZxbFRycno+RQp6eXkqdzE7dDtGaThte0FBI3Bgaik+YHVQc1RF WFhKI3BzZ04/LUh4eEVWSlpEeXlsNzE/eE16RGRZLTliaWxjT2sKeil1WUVA IUgraWRAeVlQKXhBZ0dIXllGOzs+YkNGY3dlUlYpXlh8c0whUzJTI0A3fl9f cXsoOUk9QVl+M3A2fjBuCnpAOU1TYjsreUg9bzlXPTE/JnFfc3RtdzB9PmIk K30pWVM4KCVWZ14wbyNAfTA9LSEjYD1DWT5FWDdLRWA+ZkBkMgp6OysqZzN2 Kl9LSj1pSGE9PGdscEVYIUdzSF42YlUhPUNiWU92RitvcUAjQDI9KHJWa2lp TTUlMnRKUTR0PyNKPSMKeiNPJmoqP0JjSE07SH5pSSFNfXp2emw/Km1WbjRK PzZTIXFTJCg0cTFYMUp9X1p8TDViP0JjS0cqT1RTZGxIfUJwCno8amFgMVU+ bkl6OHJNLUc7WiFHPVI4c1ptO2Ipc1FxdFJ3d20/aTQqPExCRiE9R3Y5eSh+ I3JSa0kkN307IzRVQQp6fE5xKmlpaEhPfm4jeF54dTBGY2FxcSojVz1HdkMj Kl9Hd2tsPFZLRTxJPDRoKFQ/S0tqbE82dyEqRH5Pej00T2wKek9xfFlQZGF5 dmM/dDs3VGdZNG4xQDgtYmorXlhyQHNfRUxQdmBpR3xAODV7TVBNKjxadEtN PEE+d21pSmZ4UGc5Cnp3TzFERS1LXkB9dE1CQiQ/JkgxYip7QTUmcnw4JEYo VXhjSC1tSyEhanBeOEA7TEN+TiRjVyNeaHYzNEk+Zk5nMQp6Jld6I0JqTml6 SS1eUGFDI2Y5ZTZxcWxeQnV3RmowTil5RDhneUdESz1oZGEmI2ZJTCpoMjZ1 MT1GeV8pKX40Oz4KenlYQFkmPUZ5PysrcW11RXl5biFUPUZfQz8tTVp9RHhh SDhIPDxGdHomWTxoc3g5OE5QLW8lOTV6SlN9a2Y4QD1kCnotTkorMiFHaCRA cHhlQkQrUGkrXiUlMHI5ZiF4MT0rUFp6PyVidylVcFglQVJzR09jJDAwMDAx YlclPUowNl55MAp6VyZpKkgwYil4Pk00YmteXjA1RV8wMTBxTlMjdG1ZMDd3 NzswN3c4diQhazZVMDBMPUFMX3QoWSQ3NWdeMSZtQX0KemZJPD98IW88d04l RXIjYiFPNndWIV5GJFNGQ2ZUN1A+WWJUaF5RRW94UCt2WEc/Uj8xb1Y+emQo TCVhayRPdGhDCnpmVEVIanNhbGtqbF89N3BxNnp7S1FWcWY7cSh4Ty1Mc0xz elJZekEoLSN9SH0oOCQ8Q203bz89R2pqX3xSViE7Nwp6VFJULSNkazA0KyFk aSY0I1RpTTkzKXVZLShpSSQ4WnJIVEFCV2R5UV56IW9aX1ZEcmJeQUdTfjRo KWhHIytEP00KekxYZnExZ0AlVE9kcWhNPU1hT3N1I20yPWFWQVlhe3E5clVX RFo7fSlJeW9nM2tDcnJLRSRLLWFuZkBNRyQ9TnglCnpjKG1qcFl3P05qXlV3 RHZDQGQ7MiFRKz13QnJSbmdBT0lvRGFWQnIyM1M/VTx2dG0tS0pXOHItWVV9 RDc4az9HMQp6VENyKHFMKUhAMG99RStkKGIzdH0tUDdDR0tjVDtHO3ZgSGhs YyE5YiNzSkYkOTtyRmdYTE5ZZmNGbWtNeUtsfiUKenhwVXxBJkJOMyhmNUV+ PEtzYCF9TDMldUxtbj5hWT4jPTtyJTJsaVQ9WWFJfHVmZiFeY0hSMDdRPGFw SUhme3B5CnpAaEl1b1R3Q1h7VyRVKT5PJXZ2Vl5pMEArc2IlTmRVQXk8fS1N NFlte3syZUdBJEZqREU9VWhIVFkhNHpQWF5pbwp6KUImYG1adSFBT2hkcXVR SiRDIz1BSUt8TXtRP1dQe2IwWUdvVkR1SWM4fTklJlluQXVKSCgmPjhlJGh0 VUElUEsKejxNYHooU0ZoRHl6ajNxaVJ4MU1tO0lad30/SzgoYz8lY2gxe3tp a2FoTnxWcj4wPUtjY3w1LU07S0BfbVgkJURyCnptJlE8U2QzTlhkaTxjZytV Y1koIWohMFdQLWUzSzJ8QjEoJmtEb3EkQ2V8PDQ/dGw2RStUK2AmPz5+TUx0 TDRHaAp6VSUlZ2FlRSRDOSZ0R0QtSmJtLV8tI2ReMEttWSN5UHJERXMxPXMt cUNnVC1SIXw9cT8wMDAwYmJWWFFuV01Pbj0KekklOUhXVlJVNXhHQjdiUEVp cDFKRmZtanpGZ2kzZEl5NXZaRmZ9P2JGZ1RlZDlzbUZVQzNIbnRiWXgrNFdq YndkCnhXTkJ1MzA1VUshRmZBfVNFaWZAdUdCWXxmRyYoUmdEPTstV0ZmaHVP UmpkRjIwMDJvdlBESExrVjFuNXZyRntTWgoKbGl0ZXJhbCAwCkhjbVY/ZDAw MDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfbWVyZ2VfYXBwZW5kLnBuZyBiL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21lcmdlX2FwcGVuZC5wbmcKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJmYzU1ZDc2ZjUwNDE0MDkzNWQ1ZmE0 MjJmOWE1MDc1NDMxYmJjMwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgOTgw CnpjbVY7XzExdFFBUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7 UjNEZEJqNzAwMDVKUCl0LXMwMDAwMAp6MDAzcmQoTmN7V0hpKkZvc054Vy07 JClUM2EtJWdHdUgoVXZIZz44emRZLTl4dTBGTXlldE5NJWdzPz8/dl9wb3IK ek5rRnttTVpXMmZ3cm96bT0xam9wcktzZW1zcG5JfD5SUTMpamxvbHd5TEZr b2MmZT1EaU1pV2QjcGA2bj0mckJuCnpwflBPSSQ2JUpzVTIpNm9xez9HJiZG LWhvV19yJS0rckVGPnlAfFpOP0EqVkIrYHhnb3p3TiVpP2NLcUdnVkY4WAp6 IWheclQ/Y1QoTSFvdSFfKWJRVExnfkcke2lgNEdsJEEqJkNANVJSTnkzd1A+ I18rRCVhZ15CYjttbkhTJnlDQj4KekAjTXsoPGokWVcmR0ZeVnB5U2J3PDxG cXcodlF5MV4wZWM1PGtPSmwoVl50ams+PTgpPGtnYlYoZW1jaHIwM002Cnp3 JiM1MSpPVFlmckxFdWQpNzEwUyliIX1ycnMmdEY9R3Y5JSpyKFJrXnR0UFE+ RGoyfis/Vk92c3B7RmIqeEJeRAp6P3Q8eXVzX05YVD0tLSpeK3FtaUFuIU5D WT4peCNDO2hYSDt5NmZNcT9CMlRTOysqV0B0P2MyaD5nMWkrPDsoMmkKenVr R1F5P0JsUU88Rk1gSHU7QWVMPyY3YGU8Z3hES3pVfTMpPyZoLVo8LWhPZCEw K2dAQDlESmc9KXYmbCF0ZCZ+CnpAOVZibD5jakJ0dygjdD9eNmJVKT9aKSUo JE1vXloxVnE9MjAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHZgp6Njk1 MVU2OUU5NG9FUUtBMGtLSSRLfnpZYD9VUGtnISQxXjt2KUtVVUxVRVUxI29n V0FvdVYhNz95a2loe3hDXyUKejA4UDh1enpvOSs9aSRFV2R+QCNFdiYlNjVg ak5zcFFTI0o9YVBkQz1MSFMlfFZwaD1ycnhFZFhhQ0RCflYqUD82CnpPU29U aWFndEtWUShIKjNLMFQqIWtlelBuOXkoJlIqfFJCdUQ1e2pMJDtjfW9Xd25K UUJqMHgraEUhKFpHNHxiMgp6NTZKfHVxVTZhaSprSkhAWE5kTjtFO0Btc0FT b3llZUxkbEkySy1IZyFPPlZmaXliNlJMZmstPEpTcHd0MVBPdUgKeiRBe1km Y3NlYFd5I309IzZCTyNAIWkmaG1IZD91YXYqRXQzV3VRRk5HTTVVeXpgKSVH bnp6N3lVcXx5UzRQa2hGCnp0RlJoZUV1eDc3KmxjVTg5O2RxS1RpciNNWFVv YUs0UDRBa2pfZCpEP312dG5ndnlRQ0szTHBLPkJhVjI7NHk1IQp6RmNwXj4z Z1JsSWtmKEhDbz1YJSZROEpHYG10dVU/dm5XYyZHWGsrPXw1PHo+KStLLWJP MVIoTVR0MF9tYkFRak8KemJ1WXd7VkdBeypOaVk9YFdWYjYyUXB2RH1zKnhG dHghR3dBKT0wOGN1Uk5gZ0lhRyFFcCkpZnpzYUR9YVN7WTc5CnpPdlpJc1hz V0I3UVhyKDJpU3taaDZHZEtgajFYNVFpb0VpX3t6UHhoem4hSCU0dz4lJjAw MDA8TU5VTW5MU1RZUApDZ0VneEYKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X21lcmdlX3NlbWlfam9pbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9tZXJnZV9zZW1pX2pvaW4ucG5nCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjZTQ4MzllMDJmZDNmMTdiNWZkOGUz NThmZjIwNDA0NmMzOGQyNmYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEz NDQKemNtWStDU3h7MzQ3PT1UcUVuOzFZYilrelJ3dk81czh4VFMxPXBkcEVC UVNfczZ7OykoUj8jQkpTajRKcTNSSkJYCnpRRGtZUGghX0BBUjBJcnhrZFRF QzU9Y1Q0dldGfn1FSH1BWD9vQnwkT3J0KmE7cndVTCU9dz1GUTxhJFQ8Nns1 TQp6ezgxPj47I2gxPGxHajd1JUZvdyhIJSU5b3AtfHtNaUUjKF9jO2pRZEU8 MS1lIzw3ekkhOWxXeE90RFB4OUQrJEYKemF8OVk7KzFQQm1NMmc3ZTJ3Jml3 b1A+b1Vjelc3UjhVUzFJMEtSPnV5Pm9eX3diSlFPX2UpYnh1bFdAYjxadkI0 CnpvQDFCPihIUz04aClwYTs+UFVyMncqdnA2OWp8Jk4zJExWez5rIWxydDcm cGVGMkA9X1dLM3Q2RkwxekNySzE7Ywp6SDdudUFEITVHelE7bHd4Ki1aaXZp b3IhVXg8dEBpNnYtSVNxNTFCRzRvZD42MWxFVE54SitRSDVaWjJ2Pjt3KGMK enIkOyl+JlN4NnVoe0BmfE5HLXkoPD0/fXBuZWBLbHtedV9aTTdycV9HbzVs ZjlKYUc7VkRIP2wmVypfUXpecUVgCnoockRjUEZsKThHWmVlQVpmcnA0PVQl a21TTFo/SW1FMGl2eWFxY2xZdnozI0xBT0VGfGVfQSRCQ0ZuWFE5VjdEdgp6 XzczNDA4YHVNeGR6PXV7alkjTCorTmFgTmxrUlZtdyRaNHJ3Km9JPEl+VFRk VX0oKGNrZXFEVGBpUGYodG9DYkAKelQ/PzZkak1FSlVSbyNyRDdTd2pSVkpV M21JSDU3OG01dGNObSsqPThxc0l5ZkpCaHFVdWZTcitAV1A7Y0ZlQUdVCnpP eDF3dXIqNWFqWCZINXhTcUxPKjhZLXpFI3gtKSZpQEt0WUtVaHorbWk5d3Ni fjZvQjZVQHBeTkpwTVVyVio+cQp6WkNBfWVzPio9YDk1MXMmbmImOCZOKDQo dHdzSVJWV1IkbFhyRmV0KmlBQn0jY0JvKj5CbiUzaVdgUFMqN15RNyQKel84 K1F8M01Lcy16LXh4Vk5rfnRGdzhLXm4pblMtMGgrOT5SPiZvR0IxKktGIS1z Q2olQXF+fCFPfGh6bjk1ZHM8CnpXUSY0WUNMYiExNFA0YzZhMUpCU3Mtez59 TGwhMDM0c2d3fkswVVdkSkJCayZeJmwzUjB+b2pLeHYqS1BXI2dwOAp6JWI8 Sl44Wk09SE45anxMbHlDcVExeCNnbyFAX2dlcXZ5U2plVyQmd29Tb2hSNUY0 fVdBZU1PfFpTe2hXWl5vQEgKemp0PH5jWD1CdDsyQTQpKihLKjkzSHVMK25C UWMzTHtfM2o0dWZFJD8tY2wyR19oeDQhaUpIY1hDWj4rfmg0PmRZCnpTRmRZ SnVCb31Waz5BfHhrM01aJCt2RjNwQFlIX2NCd3hma0Jvc3RvIWpkQXdMJCs9 P3lhNytBQDwqazZnKDl3IQp6dlJAR15tZUI4WXQ8Oz4hK3MpVDNhb3dvYzs4 JUZEdGF4ZDdARXx0WDxNQm5LSkBlP1kobyp6fXZmYV9jKVBaTkcKenMtaT56 JUtgJWYpdkc+VHYwe1pUQFhPXyZ1ZXlDYEFLSTg0NUckXlpBKk5RfT4yOEBW aVRZKzZqWHhCMHxJaGUrCnpBR1FiQTloRjMtPG1jenhyPlpNN3dWcVB5SSZ6 YnluamIyXnZndSFaWEdYRSFoaXN+czV7dDshOExoeGRkMitIJAp6YGFeTTFQ MntkMzUwUUFPPSNBJWYhLWx4VkApV2ppKH01QFBobShAKEx6ZCYyeGopVD0r dDFHZkZYUVVUc05VMy0KejNDRnQmU15UVW0qXyVAZEZgMVA8TmNWbDt2cHkh Ml5tJkg5VTZ8dCQ1bUx6TVU7VWJyPUZ8SEhTUjNFYWRxeDVECnpVU0BLU18y PDE9O05LTH5hfXBZeXxIIWpzUDJ9Jm9qa3wmOzNiJFlJJnt6a3FKUTs3P0Bm Kz8pQFQkIT9WdTF1Mgp6Nip8Uik8P3h+cG1JWT5QP0Q9XnhQc18rNm81aDRy JmZaWW5ZS1h7SCtXSWU7TU5lflJ1ZG5TKSM8fns7MjhIYH4KenA7N3kwZVY2 Kl8qJTk4P3VQQGtocSMhZkJBUz8xamV3Tm96cF9tWCVhN2J0e0NnZmwhQ05n WUdXTFZnQG41fmYqCnQlKGxBcVl5Sm5FJkNOV09lZXBlais1UWZBK202Sjl6 WHdLWjR8UkcwUlAzSUY3KCNTZj4zPG9wRFMtZTAKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X25lc3RlZC5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9uZXN0ZWQucG5nCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLjE1YzQ3MzE2ZDVkNDE2M2Q5N2I5NWNkYTk5YjJlM2Ey MDQ5MzQxYzUKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExMDgKemNtVi1h MWdyYXJQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3 MDAwNGlQKXQtczAwMDJOCnohcUFxUChTTCl7YjlkMlpZdGY+bTxoOGZ6eVQw dGgjUDdodD9aQ25BIU5Uc3MhfHVlekA1UlJOIz5lbCskblZJPgp6QFd7Jlcl RkZTfiU8O180XjNCZmomZCV9OSYrXmRGXjN2MXUpWVM5VSklNGZiXntjTXR1 Q2VIK3NeLTdJP1lYPF8KenY5c3h0bUVVeEUpfGl7JiFOVHBQc0w7ZDIoN2U5 disxZDVJendGMXd4MnZVV29zPm5EaSFZNlY4TjxTSykhQzhYCno9QTdwOXJ7 d1hXPE01IzRAU2Z1Q3A1cEREO3EwOEA/Mz5gfm84UmJ9LXNoTyQ9JF9mIW1D QDNUenIxa0wqbykyNgp6ZWJVOzgrVHhTYytLUn1eY0ZvVSUmQ2M8JnV3MG1x RVV+T3YmZC1GJCRhQnhuaUlTRGt3WGxjQyM9Njx4ak5SZ3kKeitUVzdlLWpV aGVrTHZUYyRqUkBpcUdafEprRkJvZyp4UWYyendPdUJqSkxTIXhWaGBzKm9A YHd0bUVzVyp5TW9MCnoqTmZ9JnozSzB8KXpeeU09YUpSY2lQaERMLXNQNm0p UUZkakU3O3FVJSp9blRzOCFMPWlPOXJ4IW9GP0ckYnswPgp6aFMlRFR5dFpy SDtne0ZlakBIKW5MIUsoNjAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZH VU5Ce3I7TkJ+QzMKellkIXp+MHQtbipLfnpZYD9iWWozK0NVSGhhMEVeU20w Qy0hZmBVVEQyYkZ7Y0E4OVJNTWR9ayYjNDVfOFhgQDZECnpNRGNDd3pwbW1x IXpGaG9eMG5QQm5jVTI4X0lCPVdTRUtuSzU3REk2PUBCI1pJJkJqIW5oaDtS USlecFd5VX1jWgp6KUE2P1JveUdGTD5xQj5zKW9RaWJkVkJscS1EVUA3dzlX a2t7UlM1NGJoPUNxWjRKPkcyMGprRFNeSUppNFpGO2AKejhscmJPMjFpQyYj ZzJ7KW5SQGchMyZgbmxHc1N+KFRSeCMkO18pRU8zeFZ0a0dXUFdBPCMtPGAh cEMjb0R6VEdACnptLTdlNENubCFeTEhQVi1gZkQmNDQyNVVEJXw7IyNnPmU0 ND09WFV7Z2NxV1ZPQSReQG1ZMXUpZD59ZnY2MnRjdQp6aT82UCZeRDJAK0RE bjcoMzFNWDtpSTwoK2g7Uk0/Nj9xUHI2azx1YFZsdVk1I1V3eWotRFomfkdE IWl3bVlwM0UKek52VE4hP2UxMWg4WCEjfjg2YD1lX0g1U3BsIXB8TSR0ZWw0 ZDl2QWBlYmllOUlaPlNqe3JaZzxTd3M9MjdsdS1jCnpDe2Fsb19WeCR7QnF+ WTZlbT1qaUhYejl+MHRkbC1LNkkhJDhJVEx+RU8yeTBzMElvfWRpZjl2bFRO PV9Wdno3TAp6aUltRj5HSlpfQnszbTZaUEpFfTh4Y1o1bWBPa2UrIXB8PFEj dVgzdzxtfT98aWw/YFcka0pObmRUVHFDJD0hJk8KekIrRz9qc3A3eDl4YUFt NERZNzI7Z05mNExeUSY3JVEraWVGdEUwaSo7aVI1NmV1d3FzeGB1QGw4eHs/ V3F5YDNHCnoxTEwpVUFeeHclSiNDJGxHLWNScUVDMnVpQzNIbnRiWXgrNFdq YlNXV25wdz4wNVVLIUZmQjFNRWlmQHVHQjckYwp6R2RlVWhEPTstV0ZmY2Zv Ql8wMygwM34hcVNhZjd6YlkoaGlaKTltXmM+cHBuRiklR0tJVn5fVFI1Q0w8 RyZETGUKYUhZK2VTSXhzTkdtc1A5KTAwMDA8TU5VTW5MU1RZKSFjMUBnCgps aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9uZXN0ZWRfbG9vcF9hbnRp X2pvaW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfbmVzdGVkX2xvb3BfYW50aV9qb2luLnBuZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5jMWMwNzYzMzM3NjE3ZjlmZmU4Y2YxM2JhMGY0N2Y0Y2Jj MjI4YzVlCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNzQxCnpjbVY7OzF+ VTFIUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAw MDkzUCl0LXMwMDAyJAp6Pi1ucCQ9OEtOcGQ0MVByWXRmPm08aFF1JHl9I19t I196KyNANUlJTCRIPyE8JD8oZHtAWE81YyUrMiE3JmhwUkQKel4zbD1xKTY/ X1MqN1ZLSUB4I1JLdEY3aip2Z29MKT1ERTQrelE2NmJ4JE04ZD9UTllESGkq SHN4OVlPQT41YFY7CnpiYT5UdWREZlZsO2xSUHx4VnIxYSNxTXYtP25TPW9P dSo/PSFzPjw4QFJab19kZH0+Rihkfj1XP3ljWVJ5MWVWRwp6dUlJd1U/ZDxM T0spbVMoc054Vy07dUB+d1VCJkJoJWp7MFI9MzJxJFdYMCVgKSRoUTs/IUNZ NWI5bUt0ZGUrSXgKekBZJmgqKjRGZ2IqWSZCT2RjbHUycF5rVFNpYERQJC1A ditvc0dtQHFrVHMyZzhUOWVWQGEodEQmR0UqXkA2RkVnCnotcm59WSFna2Yk bC19bz49SmNsTF5yX1heazsxYHM+KmstbHozaSozPShEdXl5dUl6eilickVY aV9YPTYpNyp5Ugp6QH0xKUZuI3xMQihia0U8ejt3O2RAeV5maiZEREk9K0tz ZlpUJSgqbiVGJWgjKXMzYTc8bUJfNShhb2RmOz4pd0kKelRpQCFIO185TDFe ck0tTkUlRVQ8O09VdiR5QHxEJWUmekZgPG5mXjI9JFBkNHEyMSt7Pi00d1g8 Q1hDMnchZWxrCnp3fWdQT1VPdXgrNlNaUEwjRV50PVgxS2h5Yy0hSFYtcztx c3lMR3pKcXdEM0s+ZzFqMCl0fFJ1OF83KT8qSEkkagp6UjQxMklRdVhOSiFv JSpadWokM2JAN212emZ2IVN4cjhrK3BjPDx9QkA5NEFCb05WRyRERjZUZStO TyVVelU8bEUKemtmK2FRY0I/ekpSfkV4P0wpaEdwdS0kWjBqVCFVcCNfcn5f P2Q3clQ7Oyt9KmprNGYmZGEqJn4qX0d3aWxIfThuCnp6aTJTej5aI1kqakV1 bGk8STwxZiZXejVJVURlKXYpWkJYQjxlYiptaXRGQzI7P1J4WiY1UGo1aVF2 UE0+Rj5KSQp6K0laJmF3YmoqJEA4aURjKnIoXiFyUj82aXpsPypwV2tBVzVo Uz1ZVipXOEhJKVFpOzlodm0/cjxqJFkjKnx5bCoKempubVNHK2BmUkB5bmZv ZGUmZnJZKzEtPHZqViMpX2VhRlVodSZHd0JyJll6bWFMfjwmJkM3P3d6OzRP TGV4UjItCnokaTtmWHpISDBMZ3pESX55dGkhNyZ3dE8oZTgwUEIkSFJFbSlz RCk+ZllzSVhDaTc5QjAwMDAxYlclPUowNl55MAp6VyZpKkgwYil4Pk02MWFH WEQ5I3cwMTBxTlMjdG1ZMDd3NzswN3c4diQhazZVMDBRPyhMX3QoWSQ3NWde QHFtJHUKem5TflZ2dXJNPCo7QDgyKCZjVnNXJkI/PmQkMWZsI0JyR0ItQ042 PGo0LT1jRGwlekRXNzlKVHtJU0Q0WDAoa2B4CnpmUmJQbFc8QENfV2ZmJDFz ajhgS1hmbmdLQ30/VHg9O3xyeDh5RmZIRH1ZNTxPaVkheyUjck9pSCZjQG5X STxATAp6dShZemFRTHdlTWNXe0pnVlJkcUxGLUxXKXh2UUh5RDtgQHxvdDtA MyY7WUI0Q3FtNTI4dzdtN1p1Vygwa3BXQmwKemAzRDNCMXFKeH5wPTxGRDRo YWJmXzZ+SWwzeSl3JCo1YzxNODVKRTk4eTY0S2dRX0pZQXQ1MmVKMjVGYUJe NT1CCnplYEgjRU1yS3hhUE9kKjtFcVZETU1uR0lhVk5yMldQRHlEMUtgbXZo dFl0dGREN0woKXFPemlAeCthTEFVIVdrVQp6SG5YbXRwfXd4VjBiTlRZSUst TzNBeSRUPnJNVj50TTcyZn1aJVozUU9MVGg+KFNHVVowQmRSUSNIeXZNeVFq Q1cKemY1SnFGNHFpOHFvPUhKTGxSI1FKQyZSVCZuS30pc1clYFZudnU0a2tK N0BPMWA1K3cmN0F7PGJASyhefCNjKFpDCnptbj5aZF9SSTMrRF58ezR3UUJZ MVJrUE9zQn1MWFFUcXF8QmNTZ3xTYiNOYHltYWdCaDM+c25ePWQxJGhuWD9K KAp6NklsKFV6emJUcDhSM15AOEA2bCgrT2xvP2otN3BUU0ErRC0/TCRnMUZ1 IWN4Z3xLREE/bWErVHltIyF+eEJ0TUwKeilnVjB9VFZQcnkxc3l5SChpNjFu NVcrOHFfa2pKZmJLakFwJDdYfVAwYD8xMyVjUCoxPDBubzZeI21Pe2clTSg+ CnomendEWDl1Wjx0RWtQSUJQaDREbERUcEVIKU1ibyN4cE1XfHdkPnRDYHVs RiluI2gxO09WSTUqQW0wUkN6RHFjYgp6TEE/KE5VNTIyJF9iX2FeZSpnWjFo Z2ZvRCg3SCFwRXNxfiNYdTFGNz45Z2xwYSVJcXFMb2IxZXxLKCMwaGp+QUUK el9VYVdqRXJGJTQtdkcxTitqczgrKFh+OChnPFZVKWhtVzckZXQhR3E+bzwm eXtRZGQhPWlqbVQjczl+YnVrVXtUCnpgdSpwSktkflhePWx8b3xgQDRWdHts Rn1nYU1eO1Y9KT5Ye0VDdVg7ezkzUlQ8Tnd8OVh+OX1xJFJKZX5uMF9IeAp6 QzFIamIhSE4kUGtXc3lvUUhoVWEwMDg8MmktJUdhWXxRYHcwM34hcVNhZjd6 YlkoaFlhJUV3M1dkSmZURiklR0wKekdBJUdNUjVDQytHJjRGaEclR01RSXhz TGVuSSM/bzAwMVIpTU9idVhWUlU2V1pFc3wwV19iV0lGZmxNS0ZnWXpTCmpG O3BAJEl5NXZvRmc3Yk5IOTlhYiU5bUJGMDAwMDBOa3ZYWHUwbWpmX2AkYFAK CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X25lc3RlZF9sb29wX3Nl bWlfam9pbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9uZXN0ZWRfbG9vcF9zZW1pX2pvaW4ucG5nCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLmQwZThhMTdkNDA5MzQzZWE5MzdlNDNlYmI3NmU4ZWJj ZTNjYmVlNDkKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDE2NzkKemNtVjtB MjV8WF9QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3 MDAwOTNQKXQtczAwMDIkCno+LW5wJD04S05wZDQxUHJZdGY+bTxoUXUkeX0j X20jX3orI0A1SUlMJEg/ITwkPyhke0BYTzVjJSsyITcmaHBSRAp6XjNsPXEp Nj9fUyo3VktJQHgjUkt0RjdqKnZnb0wpPURFNCp6UTY2YngkRDJjPzF7UENI aSpHK3RKOWpwO0tiYlIKendZVGNCd0NSJFQtKmtBQGIkUW05bzhpRjA/WU8k QCNLckQhJkYpUlc+MCFwfWNGcFhqLXR4RVJfTkwkVHU7VFQpCno9Sm5GPF9g MUM3dGdoJDYjTz5fdWBNPCNKSyltU150S3V4UDxWZHtjaVBQPyUtU21qbkBS aXh8cXV1aHY+R3JfRQp6PyFDWTViOW1LdGRlK0l4QFkmaCoqNEZnYipZJkJP ZGNsdTJvfEFVNndka24zPG5Ral56YEI4YHBIUTJTSEkwRTgKel56cTU/PzY+ OVNffX0zNjteWChgPUpAWEpgb2g5PykhVVRiPWJoJkNyc3dwailZeT4xIUZC OEFwV1dXfCl6JE9hCnorNFNBc19VWTtRKTdndjgpcXZDN2hVNDtgO18jWngo fFhhP2lOVX5oJkNjPTgmKyptVGs8SGI3KVleQC11dzB7QAp6S2chWDApNzZj b3NPMDRIb1lCcHI8PkplO3VVcF5pbDtaMjU9SmNiUGsxZ0A9PEtPOSg7T1V2 JHlAfC1IZ1ZOTFMKejxAMktDQHUxKTZuQk0xQDxucDIyPChCTDh4ODM4RkBh KHB7d1JxZCVsaXVwb20lRFlrKFdDMy1wNmNZQ0A5REl7CnohfHR1Rz5CWXRH K1RXNmF1MG5JQUg8YFM2QDlWYmo+YjM5YXYtOW83eXVSJCYtSEBseFhMaFNR eFZofXUrPmZ4YAp6YlcpOE8/JmgtWDwrMUdJdWtoIT0qVj5KOztDNmJrTEZV PCY8PF50cih+Iz1pc15zZ2I8TFJpXipvPSg4UXNtVzwKejxJPDFmJlchMlVy e1U/SykhdXk2KzxNO1JvWXZRaD4peCM1KDJlMkVpe1EkTT1obWdeQDRDfDNj O0BNfil6eWpiCno8RyR3OXIwbXxoKnghb1IrPSRmRmlQWTFGPUZ5XyUoNHBr Y3BYPUdTKnhRWk0odVVsPWZaTSEmK1BpKEAlYndaWQp6bGJEU3hteUlqYilR ajQ/ZSVpV3kkSHNLOXNhQ0oyUm1IK14oOU1YPSVaSjBqWnBwQGVwcUQkeSNk XldMWXM8KWwKej5lI2x1d2B7X3taUDNxdSYoM19teUoqTTVjKVlmMio0Mio2 Iyg+cTted2ArLSs8ZSh9MDAwMDFiVyU9SjA2XnkwCnpXJmkqSDMyO2JSYXt2 R1VOQntyO05CfkMzWWQhen4wPigqMUt+ellgVl8rQnNqNy1jZHRTRXFtblRa ajw0bU5mVQp6UEErYXY5JHIzdjBZTT5RNW03TzUzQX1vaypkKFBTcklFR3Ak akhoYEZ1QGhiRH1hRWE1KHBAUk1WTThqUk1wZ3gKei1LQythckxEc1oqUEBg U3IqQn1XVX1TNyFZTmlBaFZLS0sqdiRSNkMqVUQxVVQ5NV55I20zZ28tYSow OSQ9U3NmCnpxSmBEWC1OT3BpdHlaMzEtbUd8UlZSZChCV2szVjBLRTRQc0tZ dEppMm4yeTNzMV9OcGJafCYkU2FeNzdOSERxPAp6fEFAJVEkTyErYT0kUDJK S3g4ZSFBQEs9YE55I2F4QVUmdkJCR2J+K0JLXn1kR1BBTiN3MW1YeDxtVGxV NmMhYlMKejVZfCNzM1glPmpFM2NAbXN3fUZtMl8+a2RtWCk7QE5RRWNZUm58 QXVII1JrZzZaOHVkZ3R6M2t3bFREfHdzKVh3Cno9PiYmWjdkWFZhUU1Cfipo SiZjU2UmVEpKME1YSnZGYFFfPk9xdkFOR0kyNmlFbU0lUilVeHQ9ZiVIcmI1 MSRJcwp6R0k8KFklayZ2RHA7fjZtb2BjWColUXw9N3khbHt6QW51I0MwSXBA bSFiT1kwZXAjfH4qPlokbVNWZE9NbmBiUXcKemNTaVZ2bTJmUkg3cCs+bzcm Rjl4SzNTdjlpZSRebXdGdGl+VWNHS1QoM2EmSkhnNExDQzVeJVN2VVVyP21l cElnCnowZDRXJHhQOGFZVTZeVFhZV1ZJd0FVKXcqXzlGYlVaeVZTem9Bd18j Y25Dd3cpYlBWY2p2ZlEqM0V6N2hCZzlVZQp6SmF6Z0VoTC1UTjZPVyEtYTZY KE57UCtjb2MpNTchJSUjZzFlZ1hSQSUya2tXIVleRFNvV2BLdWhsRE9lX19n YTgKendwX2soXlZWJUZBcmAqITRwX19HeUJKei0tbjsrY0EobVZqeyVHJUdW QiZ2cl9iRzshVGhFPzkkRUdFJD1FWH4zCno3Sksjak8mR2VDaHRJS1YzNFF6 U3tpX2VKSzdSVSlrJihZVmVFOUdTN1Fjaml7cksobV9hOHJoe1NGfkUjRFlW PAp6ZXR6QHgmKT9zZWclVTFYQER6UG17RFAlYHtmQSEqd3FwRj5lfCVjN1J1 KGN5bD9BMz4ydiRqJEF4NXlgIXZ0aGgKenVWaHI+Qk56WXhgS09KcCh3Qn1h MDAwMGJiVlhRbldNT249SSU5SFdWUlU1eEdCN2JQRWlwMUpGZm1qekZnaTNk CnpJeTV2WkZmfT9iRmdUZWQ5c21GVUMzSG50Yll4KzRXamJ3ZFdOQnUzMDVV SyFGZkF9U0VpZkB1R0JZfGZHJihSZwpaRD07LVdGZmh1T1JqZEYyMDAyb3ZQ REhMa1YxZytFKEcmbXgKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X3JlY3Vyc2l2ZV91bmlvbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9yZWN1cnNpdmVfdW5pb24ucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjY2OTUyZWE0NTRlMzcwM2RjYjA4MjUxYmQyMjcz MTkzYWFjYWViMjgKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEyMjQKemNt VjsoMVVMSk1QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0Rk Qmo3MDAwNT9QKXQtczAwMDFxCnp4IVgyfiFFZXAoTVpXMXchMEEpTT5WPyRz bC1UZmsmZ19ISD9UZ2d6dD41IU55eSp3MTt0O0ZpOG17QUEjcGBqKQp6PmB1 UHNURVhYSiNwc2dOP19gekctcztxc3lMR3pKcWhAUS0lKzJ3PXp3TilsP1pV KEYpNzEwVys0Um9PXjNsPXEKeilZU0NnO1AtKjlMVU5AeG5ZPyhzejNpdXs9 Yz1zZHVDTTlFI18hOV9AeEgoOSFvdSN3I18tbkdebUM7KnJfWDEwCnpzeWNT N0pGd2shUWpIbVJ0MzB5Y2M2elp1aktFVFF1fGNKJTxkQyooKnlZUWkjOW9C M01SS0R4cVFfdlElNDRVXgp6V2A/IyZjQih0QitIcldVS0Q2VWB3Vjhnd2sy YTBMUX1wcjRAYSh0bj82Jlhmdyk1fUReNmJVITwrMUpLdTxZV20KekBhVnl8 PVh+bnFvJEJNOT5FV0MyPShGYjltRjNyeTxrZ2J2LW1KT25mQTh6ST5mKVR9 LTxqXl92aDNycDxrWFNsCnoodlJ1ZnMoUE5PeTYlR1M+OXB6S24me3F7PWlI YTw8Rk1ARHQ+bns/PEkjQGQmeURIWHNDPXxUeXpxcWM/Wilsbwp6dkdDfV5A OC1iaiteWHI/c3A7Nks/Y3V6WiV3NX5QaVNnPmdAOCFTbDs9U25Dcnt+cUI9 RzNJQC1NWn1JdUhAQmAKejs/UiFoKlFWZGNoVGdANi1OSitBKFZePyN0PmUq Ozttd1FaKVRHfFRneHRWXjw8Nmt1Jld6I0Fpcn5xSz1GKzN4CnohR2hlc2Yh bkArPGp0UCQ8RyQ/UHk2ZkF4PDxGcXgmWSRZcHdwY2MrMXBvajUwZCFKTVF2 ZzhiKmslOSMwMTBxTgp6UyN0bVkwN3c3OzA3dzh2JCFrNlUwMEloMExfdChZ JDc1Z14xPl54bkNKPXk8I0EjdC1XP15NeFhYND1HO150dUAKelFWVEMxemtu YzxrZyRsVDdfbk1Odz8hUTYzbilwKml4UUdqS3ZHJnBSISZ8KVQyVjxeTU9C KVI8JnRYWjhiQj9ZCnpUR34zZyh0NyNeaERPTCp1ekZGLSp1KyE9cnh4czkp RyN4KnpALUpkN297dyV0VGt9PzEtcjFNalY7aEdjRzRnSwp6Ql5majxFYkpZ P1RDaUc8RXlPR3c5aTZ+PmFKWktOKD5NKGFYUF9SRXY7ZjF6KzBnPWJiWWEh UFZCckdOZzZjJnkKekUkR0hzeE1KREBAaXEpIzctISpUZm5obCRxMkw2UD9q OUtGMiRFMjYweDF0cUZOfH5xUEFJczZoTF5WbW5xTUZaCnoxIXU7UF43MDB6 M0xqcShmUmZPSmYtfWlWYGhsYzx7UjBBbmZfKzBtIUA/dGMoTHhMKFZefkNq VDxzZWU2Jih9bgp6OHlYaiVrbSFyJWF0dkU2bEU3TSRRKHt1bmVBREFJR1BC VU5XUF5QSENCYSY5eio9KGlAKFQpbWk7N0UxJWgwdTsKekl2TjtXPHJRRXBt MSRMbCl4SV5nYkBkR2hFZjdEVUkkRmJgeXJMMTVsQUZMYDF0ayZEM3tDfjhq PCgxRj5IeV56CnoteyRiNSMxYE15dylUIXJnZXtPJWZhKyo/dUpyQmQmZ2Bs ND9kfEtJRmNIWnc7OGNMIShHMCRtQ1lNZldeUE1fdgp6IXRAelB3dCFPc2Mx SlYjKjNPKFl5V014cis8RWdDQWhiWUkwZF98LV8lNXZQb3d+PyhAc2d6cm1T S2IjYzFQb3wKejlGTD4lMF89eyl1TFl+NEBkQTh+OXRIRlYwN0Y+WTliX05A Yz5uK2FDM0hudGJZeCs0V2piU1dXbnB3PjA1VUshCnpGZkIxTUVpZkB1R0I3 JGNHZGVVaEQ9Oy1XRmZjZm9CXzAzKDAzfiFxU2FmN3piWShoaVopOW1eYz5w cG5GKSVHSwptSVZ+X1RSNUNMPEcmRExlSFkrZVNJeHNOR21zUDkpMDAwMDxN TlVNbkxTVFl0ckh4N2UKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X3JlZGlzdHJpYnV0ZV9tb3Rpb24ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfcmVkaXN0cmlidXRlX21vdGlvbi5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZiNzI4MjY4NjIwOTg5NjY0MTJh OWVkOTMyMGVkNDUxNGZlM2U1YQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg MjE4CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeTWoqQHhCcEEkR3cjb28w cmpqN1BVPFFWPSQhOUc8eWQtYVQ3WTQ/PQp6VUJYTCVKa0ExLSRZTFB2MG1n MTh2K2FOa0sySTBONVEpcGwyQDxUJG9EMislNkJybmUmYzV2bGx1PDJsalZN VjsKekVKP0xXRT1tUGIzYFBjcTJEKmt1eCgwP0pNZ34/VSMjU2FLKzZKYXAx X2w7MFJwbjRMPG1SVmpyZDJ7VDcrOFdlCmJmSyohPG1fYW4wbmpYM2FzRFop TCl6NCp9USRpQn1hVjljSQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfcmVzdWx0LnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vaW1nL2V4X3Jlc3VsdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u YmZkN2I1OTA0ZjliMzA0NzA5YWM2YWFiMzdlMjRkY2MwNmQyMzNjNwpHSVQg YmluYXJ5IHBhdGNoCmxpdGVyYWwgMTMyMAp6Y21WK0AxPXNxQ1ApPGg7M0t8 TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAw MkwKeiQ8VVUjKDY3U0tlWGh+NCFfYkFYKE9zcTBabkB4KHdiOC1LJn1ncE9q bXFlZCVJSVhPKnZRUyRZUDg7bCliTWU+Cno8YnUhYVZYNEArIz9ZUjsmfV5z Q2Y1NzlCJkZFbUopfUdZdWZ4aDgldEk/PnkmfFJxNFlSY195ejJzJWM+fnB4 Xwp6U2ZTSUEoZD5vODx5eFpDbSh1SzZxU0oxez0yNX13amtWRXJ5eUsxMz9x I2pvaj9MK34jP1lWSUBMSHdTVGNGV2AKeiNeIVVoLUlkdHlram0kOHlXJTt5 PVV2MzxjRG1xbyZGeWB7PGROMHhXVGVxdiFSUnUjPTVAO0lacC1YI3UtY04t Cno/UDA5aUspbVJCen5wKyQ+VndlamlwSiQqejJ6Z2E8VUczUFJsKD9nJmdf KWM/cTsmeFZaaTRjdWpEbmo9VmlDeAp6VEVwcGgjcHJkIz12PSh6RVZib0R5 WEpxJD16eiVSV1g5YD0oZHxDRDwhczY4UT1RUnEkPzJ4USZ9NlhPYUpKcmoK enghLWxmPVNqWmxkJlRFU3oyfDwtPnkqeXdSLXd+TyEwTEktPlNAMmBZcSNL S3p2ZS1ePXhlZ3ZiKytEViRtP2pqCno8Qlo3V2czYXJDeVd5cVVASzNrbkVv K0x3MDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6 WWQhen4wXmRuUUt+ellgP04jWWgrQ1VUIUElc0xNc2FHaC1MTV9PWmwhOCNh cGR3S0xtQlJ5eTdGd2tVUno9MDUKel57RE4/LWYjcVZMdipISkl7bzBBVlRR TjZ6eFVxblVCUiR0YFMrczJhVFRQaDJAUiRaZUBfVWhyNj9eZVgjPSF3Cnpr aWR1K2RZcE0yQHA2Yjc5dkt+TFlwbWd3KElrNCZrREd6ejVyb0QxZFYoQiZX NWU0QmA9cTF3bHkjMX4rXmpNTAp6Y3NMI1oqODVKflI1VyY8JitUdTYtQlR7 N0F8WHxQO3txeF4qeTYkdj99emt+WCp4N0xMbiFnI1hYb2FGbDB0X2cKekFJ UDQ2PEFSeDFmSjdIIzk/PCNrKjl1RUliJnV0O2NnNXVJQ20mRERRTWk9NTxv cyRCSGFFR3BQUmFsKlgtSzZyCnphbEJtdW0zQXFjZ3JBVj44PUVFLWlyNTw3 al4qK25EYXppJkBYMmghMkltendrQnBkYzFPaiQ7S05XSyYmKnZ7Swp6SGNf RnAyVD42X1hMKDw2TUc9U3YwREM1IzAtI21BdkMrTnEqOXZea0lLMmw4dmRG TSVFdDhrbnZ4bkpvMWM2fGMKeiY0Y31LdktIV31WeTBIQEx+aTNzTSp6OHdQ Nn4xfG18Ozc4OU8hcmtDLXdSWDNJVCh7PV4xKiZvSHVmZDU8aFRNCno+Vng8 JEV7eTFyTkZ7d3F7MXBWaEQjcDZDMlJuNW9oJTdMMG9sZUIxTnw0RnBgak1R PSNwdyl6OTkwQFF1QTVkbwp6JXpZUHYkaTJaUSZ6TCUlJHo2QnRSKH0tQU9a fDFac2lJVjMjYVhfYUtLcEk/UnR3ajxTJCRid0BeezYjVEY7MUsKenJ7M1JW WDlrcEFEJVlfME13TEEqNnZBLWlWa2ZXM2llRzdAdzs+fnBVQzFXa3sxRXBX bkAoaTwkRT15KzY+TmtLCnomcXBBeVNhNC11SHZIXlh6VDAzT0g+PGF7b3tl aEF5TWo4dyRoLVd0dFEmTlpwVjk2a1Y0TXk/TDBBQmJNR01EcQp6KiR5U2NZ WSk9JikxZkhgdjxXb1UtN1ZKMlU3fTlKJmA4SSR6OHlZbWBnS25aSylMV0ZR cER3K3dRb2BUJCVtPWQKenpRaiVBNGlhOHM8VjUwa0RwRkl9ZyQlODgtTE45 e1VtPDx+Rj9LJVRwI248VnYkXn5xYUl1UFIqI0xfSDBBN1ZECnozbk9rcT03 fHJ8di1+Jm0yUDkyPEpPQXNuNiN4SkxDM0hudGJZeCs0V2piU1dXbnB3PjA1 VUshRmZCMU1FaWZAdQp6R0I3JGNHZGVVaEQ9Oy1XRmZjZm9CXzAzKDAzfiFx U2FmN3piWShoaVopOW1eYz5wcG5GKSVHS0lWfl9UUjVDTDwKZUcmRExlSFkr ZVNJeHNOR21zUDkpMDAwMDxNTlVNbkxTVFh0T3J0Pm4KCmxpdGVyYWwgMApI Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X3NjYW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfc2Nhbi5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uMzk2ZGZiNGZlYWJkZDg1ZTA4MWJmODMzNjMwNDEyOTA1 ODYzM2M1YwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTMyMAp6Y21ZK0NY OzQhSzZvciNFNDNVKCZPaVg3RzBUbXRkNURYWW1nUiZGQGFjV1p4aXYmd3dM PjNoZ3JCb3F+bHJAaXQKekxKXmR1QVpXcTVmdyZaa0M9aGBYNzc+STNXJnNu akZKdmRJKHh8XldiSSY8KkA3KFgjejA0cVRwc2tJYTRHYWRlCnpKdyFUNHY4 MmFHQS19WFpSKjskdmdUWFVgNHU9cGVFd2hFfG5hNF9jSj4mT01QSGRDXkdO PyUjKGdlTHlnbW8maQp6TjNfZzt3Sn5oZj4wVlYqcFE+YStTSSpJMDk4X2x3 dDg0a1h5T2E4WShWMSZ3bm53YkkpdD5AVnlMPn4jXnMjUWAKei1leiU3bj40 Z1ROQFluSSF8TTFSU3JTYCplT3lEb2Q5UktvaW9HJCtEKWlKVEFvVm5EV30y b35LbjRZKm5GY2k/CnooNGQ1ak49UGRMYnQySERnIUNlQ1J0WDYtVyt9JS1f T1NwMzdmXkE1ODdgcFYwdFBXU3R9d3x0ZlJZUVNFZlhHfgp6PHBELTlJM19u NUVWdmpuRTFAfGgjQ14jZWxeYldwO0UycWk7e2tkZVZCaTV9RipxI004K3BL LTcmS1gyMD9zUjsKejFyOzxYKEdRQ0NeQWQxVCNUWEZsT25rdTEyaj0rTDFx cytNKCNgVUxNRzRxOXQpMXMlKiVudHBPRGFhc3dEdXBOCnpXPVI0cnN+RnRe JkVoMD5YJWYzRTBuSFlRa05xRzRVJWo3TXAyVTdvRio+R1pURFluWWxoX3By STRVPV5PeyhrMQp6PFJIOCh6O1hrNDNXWGREXk9hMSpUQUVkN056fFYkTiYy TEstZ3N7cT8yRDtHMm1MfXdKP2F1fUZ2a31TQ0VsLVoKem4hUX49N0lFPSR5 fWUoeUdoKmtEWGRJfn5Ve2pWSyhGKll4dXFueH4+MSZfbD1ZJnNXVEVgTnF5 aSotK2VBOU1kCnpLM3pJNll1ckVELVZsZ3hEMlZnUXE0VClvPHtVYzUyZEJN NF9uczRxVEA8RHZ0IypTIyY2ZGYkP3pfSkFeN05kJgp6c2M+fDNUPUJJZkEz cHF8bWZAWWd1I3tfOFViKGJ6Yj5YfG53ZyohQFVCYk1rZ29WcFpyKlRmPSQk eU1RUzdjSHYKekpsfHlJOXVHJV8/PDt1ZmhsKG56LWIzczl5Um5nbTchZUJC KipAYytpT1Y+KipXVWd0eGlyNHFIIVE1OHNCWV5YCnordF5scUNycWlPdU42 aiFGQ21eWi1Qd31BNGNFZHl2I2FjWSEpakZKeEtoO2QjXyhkdXExPCEjdXxf aW5VaFJiNwp6WnVXczQ/Um1QTTNMYjQ4Q183MlZOQ3YoLTBZfitwM3V+TSZ5 I3otaHZxPE9QTyN+SFBMfEhlVC1KQm5EYXwtUT8KeiU8V3Y0blVIdTdzY3oh Rj9uciRgdDgoKzFvQktXfFBlNXwhej5tYlMyPT1FTjgkdW5DenUpPXxOcFhK Uys4ayh5CnpzZi1vMEhzPXZ6KGplZFM3aDFeKU5rNkVnaiNJfWojfGZHUmle RHN6WmFhNj0wdDxTfk9nQyQ1O1B4WFpmOTFzRQp6T1dVKDZOelRFRDxkb1Y/ OVFzM3tYKDtQQCk5TWtBdUh4UWtoSHBWKEQ4Zm9QbiFXeSZBUDxwRHNMSnlQ JTNvaCYKel9jQVlzP2AhdnxJWXkhdzwyckAtO0AtLTI/MDN8MFc+eGlyJE9Q fXxINW9OZG0pLU12USEhcm0oOWMpISNyPV9NCnpCSGVhfCl9fGU+ISUhMjdg bFlEdVM+KUg0TyR2R3E/YmtZfFYlT195REJJRUtGUi1QJW96WFY9XnV8Xjgz M295Twp6YVpVTDQ1UTNCNmsmPX1CPCEkKlc7KmtjVlh5TGlDM3krQVJnYWth ej5qfiFVNytVVSooJUNleS1ESEIrN0ZIcUgKelBqfH1TLSpuZHJSVG9ofFI8 WDhJOXItZi1MY0VOe3g/P2kyT1o0LWIoSnFOYVNwU3h2YzIydGA2TipSej5V KX5PCnozWGlJeilCezBWKV5eb3deZV4te2J4VmRoYGQ3cU4obkg7cTMmail1 JWI7bGs/Y0dNSHNQKmxYPD4kQWk1V2BjVgp6a0VnXkNQOSg9ejBfSzVwJEdO KER4Wj5QSEphN2QzRSY/OSFnNDwyTjtyNW5xYkAoNVVtPXR7fkh0alFqK3hI M2gKYXhKfCUkZWdedFZMbXlmSSpkWmVNVjhnZXh0cDVRMHlSaiQkCgpsaXRl cmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zZWVrLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3NlZWsucG5nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjEzMGZiZDhmNTNmZjVjMmM3NTdjODE3M2Vi NjJhMWI2MDQ1NTVmMzQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEzMjYK emNtVit9MT0wRzZQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tS M0RkQmo3MDAwNGlQKXQtczAwMDFXCnpycEdwaiFFVmF6TTdgO0QmaEM1OT9v WXR6UmxAMHApYk03PT8zVVRfZzM7fSEtdHZ5cj92bUU7dWleNnJye05vfQp6 PDZGaCtWI24oXng4LVpjPXlIfiFoTil5eWpUeW1ASHVVaHdAYSh0bT4kZGFu JE01TzFeNmthJD1Da3FZI08maisKenB+UFA2PCh9JX1vYlQkaj5FTjMwPShG aEZuZGpWPj9kN3JOKnAlJHh0P2M1ajxrZ2J3O2paaTd0P2xOckBhViR0Cno9 RF4zUWJAMWxFPmZFYUQ8RyRuNGtLKWpjPkRqMnsofiNvTWpOIzBTPS04KzI7 aztnI0IqRG5LI0Z8ajAldyUrQAp6SUcoa0t1R3crJT5XQSYpVkQ5NXheWFAt YDs5MndNZmJpZn1AWlZKUT02I1JBUT9jSDMwMDAyeitBOFNUREN5V0cKej5l ZUZiKUVzQFhMI3h6bXYqTEheKWdTRUI4MW1nd2FHZ2JBbGByKz1kZyN9dD1o VVJeK19+bl9xVHREaS1eWWdECnojRChWNXF9e2BXK2B4azAkY1dzKGZhSzFn c29ITHkoUFhedmchMGBeXlY+fUs8OTc3Z05RPGolcHcoeVkmPWxeXgp6NWJ3 P29eViYtQSU/clFCeDEhZit6Qnh1VjAwMDAxYlclPUowNl55MFcmaSpIMzI7 YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+MF85MFdLfnpZYD9iNnYoK0U1ZStV Pms2JlRlYTFpMUJpaE4kUjwqKCRSY1gxTUtGUkdLJEp4VmYrJEtXCnpoeX1G JT4lRi13aUI5NS1HbzROIXlidCMmLSN6KUFiOSNEUyYlWnghMjx9TVVWdVg7 JTw/PiNsdVlYYCprUWpVYAp6bE1OOT1lWiN7ZSNLYEVfKmdIYSQkajhVVzx3 WEMpI0tlMnohe3A/b2pPYXl0bT44WCFsOHE2NnNtZSRFJnlzaWgKenQ3JnFZ QyFrTyZsP3Zgd0RQVHNlUj9vc0xNTnR+aVh0aTFtdzcoKWhrcGlOZW8xMFVE UW01MURMMldQPz03QlByCnpPbEh0cEVFZWw/TTFfYyZCU3MxK2xnWHJvMSZo VkAze2ltfGxYO15ONXdwbzsoWlp0NVgwd1lFZztKJU87WnVDWgp6REhhXnl1 LWZmUXFUfnkzTkFlYzBxU3ZjWW0zZkxuUm1eNzhDQyNHTT5WUmRaKTQzeDRW PD80elBoc2glYUp0LVgKemsycTI1VDglWmY4QG1Xcm82WU00cmB4P01NYklv ZGpjdmBzP3NkNWtTQHJvTyRTaDh3ITZfVnE2ZX1MaitCIzEqCnp6SU9OSzh9 NXdjLTY1TT4tO3A4eG9QcTU/QWg2eE5nVFdveHA9byp0YzAtfT9VYm82LVdO VSpZTiZofUY1TVpLQQp6MDBQbHlHeXVVXkVGSns8O05YQ1VQJEgyQ15XLXFI ZEYxIStDekIqMVE2YEU+RUN8N1BKV2VCJE5gKVl0TlQpTUEKekEmKlpgNihz bTd1fj5fc192dXMkeSZwfnMkcjBgdG5HfExUSzI1UWckeilFU2tRYTUjRlB3 fFJZUEIhSlFoT0ZfCnoqPnphWTwjS3Qqdm4tbmpRNmdMcWtGUVkzTGhoX3NK T31vb1JBUmVpVXI2ajtGSjZ5VHY+dz8pO1c3dWdWKTIzbgp6d3A2KypPQXdk Sz9MX2JVZH4xLXNKVWgkNWRHUHwxRCo7SWdpQnlWd3htQG1NSXI7Sjg5WHRN Y2g8RUg3JnhNPUMKekY2QFRHdHl4cX47an4oPC1vUTwqUj1lcGB4c0NpZjxh WD91R2U5I2JDZSlzRnJlM2RDcHhTNlFAMVM7bmVfIWo2CnotP3gjNjxUWEJN JExKSyhVNWBxPS1sKVB8dilRYVlDZGw5JllnR3ZgMl9fN2diaUl5OXFrIyRj QG5oMCVUcXtjXwp6TVd2UEV1OU08WG1pQm9gJDZuOT5jbTRuZjByd3Z6YjFM MmQwMDFSKU1PYnVYVlJVNldWeyZDLWJZJWNDRmZsTUsKekYpfVNNRjtwQHpJ eTVzbkcmQ3pQSDk5YWJJR0g2TDAwMDBiYlZYUW5XTU9uPUkmRSljWD1acjxH QjdiUEVpZ0dQCmtGZm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6dE47SzIwNypx b002TjwkZl9rUXtmQiptaAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfc2V0b3AucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfc2V0b3AucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYz YTliMTk4M2I1YjQ3Yzk2YWU5MTBlNzNhYjQyNjBhZTljMjhiNzMKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDExNDMKemNtVi0tMWM+e0lQKTxoOzNLfExr MDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQtczAwMDJF Cnp4ekxgVigxP3JDYzYhbGpaXyYtY3Q7dz5CIy13TSVuTkdyekpkPjV0ZX1t YllvI0M7dz5iPGAwJGpJPSkhdFMpUwp6PllrJEZmcloofXMmPnF5U0p9TE08 azZieS1LZyM2dipYUWBxTkxFTHNwcUBBP1lPej94NDclQnU8Nzgpal9sPkQK ej4qSiY4O2hXNk0lYW9Wand6dW9Cdmd4dzM+YmtxXnpRT0tvbmJUO0N3JUY2 RT0tIXk7Kz9WUnpyUkxQNSpTQzFCCnp1anFRRSpKUTJOV3N8Pz0rTHF8c255 cyRyczt1YVFzb0drcSk/ZFd3WDIkN3VuNzhLSG1GQyEjPD0yenQpe0BxPgp6 YilVMjJOdFZofXoyLUh5PTFSVGhiOyMmYm96MTRPcnt2WD08a1hTbyl8ak5I PGZ5OVdUZVJMT3YqYkZzPCNvNSoKelV5aS14KH4jclJrS013RUFoNl90JkZi VU9qPGRBdDdfSDt0Jld6I0FpPmpeV1ZWVGIhdTtoZnA7IT12aDttZUJPCnoj KmVrTz5XdDBsSyEoRUwlOEJMQXBnTWBlNTNBI2wpOW0yTWh+TFBHLV5ZakUj ZjlSX24lPX5QLW9sUkUhaF9xcgp6Z3h0Vl87SyE1R3V5NH1EcFdlbGFDcVRx UTAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzMKellk IXp+MHhuNUpLfnpZYD9iS15pK0NVVHJWRDdod1RwOXV+M0smNGVmUTE1NURw am00Zn5jKWsmYEx7JS1uMT4pCno4Vm0lbXsmaEQla3xtZktyISh5KiZOcFV3 PURmUShkbFpVRVAza3xFUWwte3R3SG1jYklyeSM5ODttQkMoVipBSwp6MGM2 VE5aTHdOeV9EM2lKa2p7WlFVSEhybFBCPH5neT1XR2x2JCNFOHVnN0F1VEli UE9KeDJPYGV0I2VrQGNWRVEKeih+cDQjV08yem05YkMzQWNfPXFQcTQzSU1B TlQpMkJvY3s2cDJYc2cxcW5nU1I0XzVtbFRjX2luUzlFRlhmJjAyCnpoQzNh U1JFeU1GZFFCd0gqRWNmQk8lNEUmZGE/RUwpZlMhfCQpLWZAaThNc0ViTlFY Wj8ld3tPMXQocz1JZEVhewp6OVV5Tyk0YEM4TSs5e1NZJDByZDF5Z05OVENf fllkUT1UK1R3c1ZFfCNadnltLWFZX0JRSz9qN1AjY3hgO35ZI0AKeipOYlB4 UWVwUmFHYk1tKHdkUlY4ciVgYE9qRjhWcVVwU0thYGZacXIxR1JKRiFYT2FN X3cpJEs8PEkpJCQ0e3xFCno/WXYlVjd6THRyQUhzeVhFZDFpZyNfdm45TWc1 QVZWPHRKYDdEKnBlYD1IcnVMUFFkYiRgJHh2ZTVOWV51NCVeagp6ZmFDTC0w SnZfRVpObWREUyF+Zl9TcHBndmBBPUNOd3JCeS1WJkk5OTNgfmUwbV56PHsx eDBxP1MoWTJpPHslUiUKenk1LSk7U2pyNFBFd3QhJVM+e0lhRmVPalMyQTxk bmV7MkF7V2hOX21WcSp7NDU/PVgzKDhFayFfTSYkKV9LK3AoCnpCRWhZVFBK PHdDIUE7JXZuOWU9eHFROF8tYjh2Smkjb0o3eSFMK2s3T0cpdDt0OFlAMWBY X1k8ZEVuaVpwIVY3YQp6MDAwMGJiVlhRbldNT249SSU5SFdWUlU1eEdCN2JQ RWlwMUpGZm1qekZnaTNkSXk1dlpGZn0/YkZnVGVkOXNtRlUKekMzSG50Yll4 KzRXamJ3ZFdOQnUzMDVVSyFGZkF9U0VpZkB1R0JZfGZHJihSZ0Q9Oy1XRmZo dU9SamRGMjAwMm92CkpQREhMa1Yxal5xTmBMP1cKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X3NvcnQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfc29ydC5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMWQ0NmZkMzRiZWVlMDk4Zjk5NzUyOWJmMGI3NzE0YzUyMjMy YTJkZgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTE1Nwp6Y21ZK0NlPmw/ IzlMS2tHRDBKR2IhPHxiT1ErTWVgUElCc0BYMTMxdWJtKngkbXZYYWFiOyp5 QUNiNUpePHlVQ1UKej0/RzZmbmZ6IXU8aX0qaGtZeTd4VzN8blhqaU9SX0B3 c3BIU0FUcHlAOHx0X0tDalI3Y3xPbDRlSUwhb1oxcCMqCnpRN0R1ZGctckJB KWNIZGc4ejZifUw+dzF8TFo5MmA4e20hRFF7fG5tWGA9QW4qKiM1RHpPN1VL WlBVTXRYUDZJbAp6NWZXV3xwTj1jbFhVSnYrJF8xbUZzJiNeQWooNjJ3NFFn N21DUXpoaGgkbk84YkNMUFF6KyE8YDN1OXlDTEclYmIKej8xNVU0JCZrcSlt QlEjfjZCSVRBdU85THFMSXNTQilJa3BQXzZpe3JSSTEwJjJzP0xEd2RoN1o4 ZkpATkNKbTshCnpGZDR0M0lUZkQ/UStrLXRmS20rIzZ7eDJIbypqVmtVcURG JiY5T2xSJGV4MDk4MlNjNUI3PFFpZldpJmJqUDMhcgp6YUVzeDAkPzhjQmBu SyNpSVRUc3RWaWx5e2NeWCtlNWVyPmk8cSVnNGslaG82ZlJKMVc1JipZRTk5 JC0wUkU8V30KelgqdTx9YjA4SyZReG53SmdIVSkwe0JPWm81USVzWVlBU30t N2Y/UDBNVXptZGc/cUQqcUpxUzY7M3kkeDREdk0pCnpzZXFDeCRXPXFkMz5k WFRNP2JYcExSJH1yQnY4ZTMpWEJyOTl5OHg0cXBGKWgmO1RQMzRsSXNHT0It bXtURnolOAp6bXFKSlQoZm09S25qdDEpUi1HaSVxWXgjMzN7dXl6VGAxSEY0 K195TWZaVkFjbV5weSl2VFU4bSkxOCVgc0tuaGoKeio8dWtzWVVpMWVWT2ZK S1BzPl98QUh1VXp2Vz59Jj5YdEZuRCMxMj01alNELWx9TzJYeTZBRUFzdl93 fjwtYX49CnpSPGE5KmU5S0MrO0ZnR21MSCpDTWJCZ1QqMUZHcVJGRyhibGtJ azw1X3M9KGJ6cnJWME9OTFR7SnZ2TlhqJndSKQp6PjdYWkRJI0JvS2w5R0x8 X01Xcm9xO0NxVERRUlUzVSZjN0wqe2JeT1QjSTdhPTQqWnxfX2BXQjdmdCho PCNsbUwKendWVTxqdXVIVz0pRUpxbTduM2ZlQy0rIyVIQ3h3PXVEfG17eVlP eWxgRSh8S0woKTt2VmRIZ2NRWX1gamVBJEt6CnpkXkdVfGFURGZaTX5IYzlT eXtVP2dfSDBDbFk/Qyk0dkZ4XkI8OEh8JDM/OCVQK2Z6dVBkRUF0aG9SdGVH al5xdgp6cDJ5LSVDYjUjNkVFaShkezw7eDFAVWw5WGooXmBILUN3ZmVZPmQr ZUZ1ek52eTMoKGc4Iz9SbTQpK3VYUlp7MFMKemVrJkxqMiZ8dnFUWD5oOHo0 cCtZdTU9KldiKiVYLSVmWDs2WkNlQjk3RntWSmR2SGVZSUwhZ2VPKHF6WSNm ZH40CnpnUHxMJXUxZ1l6TlRtVlktI14qaXgqfVYjKXc3aDBJZkpofnY8Y2ct dUF0Z0JaU1FkSi0rV1N4XkQkVE9PQjRUVgp6Jm91Z0haPCpndEVINFNLNjBO bHNJbE1JdVdARHhOYWohKXU+dHA3PD4ySE4jZDNncUBxXjBKdWdATCFfKTMz dTMKelNENDBqPTwmPzt5ZW5sRG1SdTlLTUZqS1N5cjx1eFkwdk9DbXtEPig0 ZTl5NlZSdndDbWdLZnd4OXF3S0BialVSCnppczlxME9DSFZGLVhJb3ZGU2N8 UioyKCpMeDBqIXRNWE5eI1UkZSZmMmEkKWVrTT0kbyV7VVNyPmkkUCRDP1k2 bAp6ZilsfmYkPVErTTZ5UXY3Y2lIQ2Q7Xz9JR0N3QnREamMzMzlHdkxvfk1p fSQtQ3hFY3lCay1aeW8jNlRqPXF9aF8KUGZkRDlxSDtxYGlgKjhDQWJANXxG CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zdWJwbGFuLnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3N1YnBs YW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxM2Q3Nzk0ZTkxZmMw ODQyNzAyYjBiMzRjMWE5YjYxNjA3ZGNmOTIKR0lUIGJpbmFyeSBwYXRjaAps aXRlcmFsIDEyODMKemNtVitlMV5vSm5QKTxoOzNLfExrMDAwZTFOSkxUcTAw MSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQtczAwMDJPCnohX2J6UShTTCl7 YmE+TmRZdGY+bTxoSG8jeX0jX2wjcVl3ej8jOVVQJGpJPT8lSjlwfkB5Kldp JihRTUcoZWwmTgp6XlZpcSl0Z2gmPHZGTkYqPUQ0fSp6UTY2aiFSQGxOPjVg VjtuNDk2Y3l6OGNAKEFuRGMkSGxqK3JFSHkpTVZFfigKemplIX1HbUM/bjti PUJDQit1QGJ2P3kySkpweUJHQShiMD4qeT5ZXzhacShPYCZDenwqKm9XNUhq bWdWKSZDUF9xCnp5bH1Dc1NuQmUpd1hsY0MjPTYrdWo7VyQjKnlEbE07ZVk3 dXhYUXxYKGJJKnp3cnF4fVdLeFk4Yio5SFFoezM0Twp6WGw9e3ZMJXIhdXp2 eCVQPlY/JHNsLVRmayZnX1ROP3ljWVI1VWIqbikkZ2ooWUkyc0x0ay1WQWsy ZHUyJD8pdjkKekA5REpqP1opbG92RnpjbEBhZStwOysqSChtZ0xvdj4peCF2 JGh1dlpCKEI8Vj0tLSorKFQ/aWVzLUNybmMmJENTCno+My0/anNoWWBNb3o3 eXE/dDxeOyEwRmhoPyY3X055Rz9KTEwmdkloaT5xd0UkRzdPI3JzbVY1Piln NUMjZjlDJQp6Z1c9NEorYHhoNSZZO2BBZjhAPWM0UFYxNDAwMDAxYlclPUow Nl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+MD1oez1LfnpZ YCY2TWQ9K0NVaF9JVDhoYFFYemBlcVh3MmtMeTtuKWc0WEptZGJHOGF2VEIz S3AodjwkCnopcH1lMV8zcC0/NVp1N25uTkZWJW8wKWY/LUBNMX1NeCopWCgo M2RLc30hVHhYO3B9cFIpZilHRzgkakJ3UmQhdwp6JWBaRFVFbXBJTXFjZ2dl dUk/X0kwJV9+OSoqUDV6KFlKUUw+UXo/OF54MTdESnE9O3t4IXdVfjRjZFZ8 JVdJWn4KenUkXlh4NVFEdEszNWM4eWVvJilqRUxKTXdWcCozJnhJTnlYO2JC NFdgcmNyTXdiQnQ7eW5pSXspKy0xP0ZmYlkjCno8NWR3a2leQ0hiMzZzajQ7 Z0NEelAoeGc3VFJVT0VfO2AzPzUoZyRIIVZ4Yn1MMHFoZjxCWFZ6MHVhM3FP KiRoSAp6SEg1Vm9JTD08WDMpQihaaU90NT1XV2gpZnNKNzE8ZGhsS3AzPUxI bjVOcm1DZzVqeFlMMXZtbXpfPjZxP1JeTEMKeithR0J6M3k2JHtyN1U+Slps QU0+VU5qRWhYaD1URjhOZDJiUnVGekg7R1RJTzI/aiVNems4TiVmRWRXJEFW MjJ3CnpMQD9zPGc9UU9FT1YtfT08bUk+MC13Vy1EKzA2X01wKmBlJkJsUklh PDlHM2xwVkJqYWVTZkpySTdpPzc1Rj9WOwp6aGJhNkE+NWthXiFzNjFXKnlr X0glVUAkcEI2V19+TE9kUXtpcD8pQiYzfiZ4NT48JU9MQ0tPKCQ/eyNRUUM9 VUIKejxSZW4mS3I1QE9ZYilyN0Q1bG9ZbFNyS2R0KXxvSUg2KDZpR0ZlbV5a IVcpPyZzOWRQYlZ6fE01czheaFZIKihfCnpvPmd3QW1ATXcoR19YViVnIyFv SHd6Zjd6bCs2P2h5TkQxODI9bTNne3J6R2QhY3JNQ3dHTSpkOHBVO1Z1KVRZ RAp6Z3okTUo2M09KfC10byF0ZXlMT3ttJjtKJCExe0BaPFB+UjBCcTQrK3JA dX41QFY4OHwpSCtDKF47OVoqZlI0YDIKeiZNJX4xcyU4YnRRWkthKjk3c3R1 OSRzRXZvaioqaD01aV8+OGs4Kip1RnVmPDw8LXNZPEdFQzsmVmpiQ3VTd3dR Cno9Snk+MVE5OTdrQSp1MT1fVihfQWYrIXR6XlFjb30kTiEtfW5icjFFOV9V Mm8wMDAwYmJWWFFuV01Pbj1JJTlIVwp6VlJVNXhHQjdiUEVpcDFKRmZtanpG Z2kzZEl5NXZaRmZ9P2JGZ1RlZDlzbUZVQzNIbnRiWXgrNFdqYndkV05CdTMK dDA1VUshRmZBfVNFaWZAdUdCWXxmRyYoUmdEPTstV0ZmaHVPUmpkRjIwMDJv dlBESExrVjFvQT5vb29PQQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfdGlkX3NjYW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfdGlkX3NjYW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjBhNjA2M2ExYWYwMzFjNjI2ODAyOTExZmRjYTU5ODk4M2FmZjdkNTIK R0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEwNzQKemNtVi0yMWtMLTJQKTxo OzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQt czAwMDJkCno7UEkyVC1ATWY4e3tIe0wqNm8/UTtpYmFsPmhieVReIW5ONV52 QnJsKzNXU0kjXiNLJS1PQWhWPEx2aV50PW5+Pgp6KX4zYmUlakVJUjw/KzRQ P1F4I2UpI0xONyQ+KUVrKzBmP2wqNlFAZDtxYnhWQDUkcnZZbmpyYyF7b3gr P3Q3LSMKendiMUZYJTs9JVA8SGd8YSNvcTR0YHUoSEQ8YXdtbT5FenFoJEY5 aDtraU1qS3h8KDNQa3hSc3RKQio1bWZxe1hDCnpobGhAaWorVH58cHJEfHZ0 Z083ZXl2QHpjK316eW9AYktaYDtsYVBWdERsTz1vSX1wMVB1UjZ3LW9hPyQl NHpEOwp6WVZGb347TF5KNT5FITAtPUdvY1YoJGRuJSRqSEZKel9oZnFzO2E3 KW5WRi1icW4/fFc+KXdVJj4zO1g7WTRQRyEKel8yRVlLLVo7c29YeTQhOCo0 RWIwKDlwYHQlRWlVUz9kfFIxKXhneGJpT0haPykybVlaPTMzQ2FuOWsxNSM+ VTNPCnohXjY2fHh7O0JRPmd3djwmYT08UXh4VCk+eFZYNXR4M31LZypVWWtu JWUkYnh5fWpoKjxlWiRHPTstTDFvMTN0KAp6dSVEbHd1ZGxEQXJLTj8xZ19N Kyg7XntUKDAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+ QzMKellkIXp+MHFJRlpLfnpZYD9VWSRsK0U1c1ZtMXEhWjBzJmQwNUVYSCRP Snp3JmY+OUp2Vi1+PHh0enByJm1KKTMjCnp0XjR9ZEo7Q3dINWEzUXtjclA+ T25mSjswQH07TXpufEc2NTZWJXJzVihOI0AxRHlhQz5qJT55ZzQpX1ZadHBp Xgp6NCRSfm5hPUFUNz4qSVoxQUxAc0ZaaFV3Yzl8OzVwaUJgWT5MfH4mM2pe a3JhYmxlalA0MmAjRnY0azlPJG1JJDsKekYlTjsqPj1XVDJZJklycjlAcmg2 TEApeUpURDByK1ZwRCRPWXFwYEc1cUg9VHdvYm8xZiY3cWgyfE4qKWBSTUN0 Cno1Pl41PStkQmIzcnJWdWNsZyFTfEZNTHtEajZgRnhTZSZGMUd7WXZCNDk7 YFFFMi03Ql5tLTw8NSF1fTB4b3RzfAp6PFpPPTJPUG9IeSVSNzxQXnllP1Rk OzRHYUdZM2t0UCQoQUprfD5He1AwNzN0cC18PCt0KXArPkJSfHJhPEt4fTYK enA5UF4oYGM7KH1SYUs/M2U0QE5ZdmgzbGhtZjdEOFkkTnJENzBYZ2h7YWNy MXhoXnI7PUV5MH1iTn1aNEFEbjUjCnpgN19aMzVyTFFuQGZWITNUQGN1M3NZ WFJaT3c/KHEoVSs9bDFyWUchTElxVFM0d2IxJSl2YCljKkVqbE4jcmlGSQp6 T1JMcFZNRyVDZENkU243P3NITXtJJV49N1dZNiNOeHMmSnY4MEFBZU48UVdp X2N2WCFfYSZ5WjVZemVpIUhPQSgKej44PTxFQypeZztubDVyOU9HJWNZNkJI UzVeTE5xQitzRzRVbWhHPSVCSiU/UDAwMVIpTU9idVhWUlU2V1Z7JkMtCnpi WSVjQ0ZmbE1LRil9U01GO3BAekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGJi VlhRbldNT249SSZFKWNYPVpyPApzR0I3YlBFaWdHUEZmbWp6R2RlVWhJeHNk WEZmfT9iRnZeIXp0TjtLMjA3KnFvTTZOPCRnOG1zb3F5UFdfCgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF91bmlxdWUucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdW5pcXVlLnBuZwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5jYjcwNDgwYmU4YTRmNDkzNjlkOWE5NzRj ZTk0NjEyODRkMWE0NjU0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjM4 CnpjbVY7ezFTJEs4UCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7 UjNEZEJqNzAwMDRpUCl0LXMwMDAyWgp6I0tnVUtjZ0kzUHN+UUB+dSZ9byZE ZGM1bCg5WGBzcyYmRFNIbnZxSyV0bDdkTj1tYXlCITtQRVFqSG1ackNZUFgK enJ1NmEyQGEodG0+YjB+dUY1PHRScH5ZVD52UFNGV3A2Y1M5PkVXQih3dCUp U0VBOGE1YS0laXEtSSZMQVJQNWxiCnotRFBGKDwtZXhQVyVCRjl2THorcHo/ SklVcyY9WTc+RFpfMitffm8xbC04cW8pTGROUiZ5QWs3aHB5VWpjJjxMPQp6 KVJFeEhofkxNQz1GeV9SVHRtVj9LakYtWj0rfnlUPGEqdH5nNSU3ZHVPVDZP dnFJejFrSzRVfXhHXiFmTUwzUFkKelF8SHZBPGokYklKM0deNlgxVktzKDM1 UytSYUx3MWdUX3V5bWRzdGFIOHJ0NEEtR35IJXd1R19NQHpiOFdzO1RBCnpX XjIpaUwzNH5lWHdBOz95fSN8aCFSXkFyPyMwSU4kalJgXyU8LS08SHFeRHF5 dUl0RXNwcVAhPWRRMm12OXMjNwp6eDloeH16cE59Vyl6JFIwV18hUz0lQzkj KTtOYlZnI08lcXAqM3JAT3dUckV+eVg/TmQ/Vzw4e3Z2WkVRdGt8elYKek58 SDVMZ0dQWD1leTY5VDtEMVl0bEZFVFIwMDAwMWJXJT1KMDZeeTBXJmkqSDMy O2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjAqeSZUS356WWAmNk45RihvaCkz aHMrVSF4c15hRG0mdlVaYWV7JU16PnQ2ZDZOcE5nVndnb1lGSWgoMwp6eTc7 ZW13c1QtV1BvRDhaJipTP2VYUD4/QWB7bkZJNVFDKX4oLTktcW40VFB3OEso Xjc5Y187cVg7PnlSR2hya00Kem1nRFo7IXl4cGUjVlZLMEs7NVNhZzB0SkZh MTNwa2J+djApN2lEbnN3QV5JfEZjYCF0NkNTVkc/RGYmfDVBMk1jCnoheXkz aGMtKCU8MXJhYkM0dz5Zd0pueTNYSGVVY0M0PUBOIVk9WTY3WHhpQTFiZmM4 WklOMFNPJit8VWdLUlh2aAp6VUQmQzQ3RGoyWWZCfTVMJjttVihAUFomTHky R3xlQm1fXkU8e3cyX0NDWGBzTX5GcTE8QjFgfUMmWGVhJSZJcTsKek9yYUF0 biZ1UzVzU3UpPThBZjhVMjxjeVFDNl5KaDZpc0pZQn0kTCpJMmprayslT1Vk MXtkPztMTW9MKUJlUEdrCnpFTDsrLVFCMElGblcwXmJOP3Y3PzhWcn1sQl5D JUskbn58a1ZsamJVI3khUlRtNyhORHpFVGlEcDx1V3c0b1NzVgp6WUd0cENs OzlvOTt0YFF0Q3RZR0xtbiRoWklhX14oeVU3YjFeLTNYOER3VUxBeEdFcXAt OzByY1VhUDw4MSo3R3cKekJ5e0E8a3YlY0h4aXVPQW41fVc4K2IjMjBMeFF6 IVdfQjlkNXxmJnt1VWRQcl91bSsod357dUdOJHEjPEtZYVhqCnpLcDc1P0J5 QW87JGckYWNFRilTeGhMQSUpXiUpe35rSEs5SURGNGFQN2xoekUxezIkMV54 S2x1PXRzSXklR0xQMAp6JVU5c0IoezJ+IXYySypqWnszNHxUe2BhWU5veD03 ZjtAKG57Qz9JdTcobVhNKWVIM21kSkthQWs2byU9cHZQYE4Kem4hQnd8Szc2 SClqNkMtNVVGMllYKVhHMkFWMzVhZE82O3IrSmEoJFM0Q15zNEB+P2Q1cyY4 Ymgje2hDKERfXkp4CnotZVhleEh9S2VIN3QhSnxYfV49TloxI2ZEOzt7ekV0 QTU9SjxgI1BGfEl7Qk0jSlhMdEV+XnYoMDAxUilNT2J1WAp6VlJVNldWeyZD LWJZJWNDRmZsTUtGKX1TTUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkwwMDAw YmJWWFFuV01Pbj0KekkmRSljWD1acjxHQjdiUEVpZ0dQRmZtanpHZGVVaEl4 c2RYRmZ9P2JGdl4henROO0syMDcqcW9NNk48JGYoQUBuCkFAQmpiKwoKbGl0 ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdW5rbm93bi5wbmcgYi93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF91bmtub3duLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWQ1NGY1YzdiMjUzOTc4Yjk2 OTkzZWEyNjA4MjhhMTQ0Mzk1MDk1CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCAxMDg4CnpjbVYtRzFpJC08UCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAw MSV3MHt7UjNEZEJqNzAwMDRmUCl0LXMwMDAyNQp6IXFBcXUoMmxqeWJnUipZ dkMqYyMoOCRmdXhXPj5eb3pZe2crSCQkemFKfVBxI3ByZCE9WGt+RWVhN2N+ IXNMMG4KejtCVHxzUyl0UnglRnRTKilvI0EhVGdCXjJ6VVZAez1zPiZZS2Yy fmF5WFF1fD11Vz1wUztGYUwjXzRVej5WP3FsCnpnVG14I3VHKml4Jn1ec0Na bilyMCEwOWl3PHsrQC1BRnR5aXZFKFZVPFMoQDNHYDhoQnhhQn4oPHdkKlpP VEZlJAp6elVPUGw9fjwlRlNFMThyIXt7Mlc7fXh2cVJsdygzIVJMOSo+eXBt dVRCNmZ2eXlHZ2c8YEp2blUmSDg/KENjS2IKeis2fTdXVzVub3kmK0xpQTxZ YzdMUj4wXjlzcDJ4VjxWTCphWFU2RG8kP0JIWj9gRSp2RnRfR2wjX01weD0z ZDM+CnpRTlpZZnpUdGhZKFA2I2kxKnFYJHB3Vn18OyhwSFNkQ0JVKCQ8UzU4 PV5lMS02MEdCNHNAU2xAJn1wPlpVWiZQQAp6JWp8b3s+NVM5dWIrK0RqJTw1 O1cqbWw2PWlwdUQxIXwxNU0mfHQ7c2RkfV4yeTVLPig9eEU2NllRV316JExN fkAKej13aXB+WFVPYnAlSXRqND9LVjN7e3tSMzAwZCFKTVF2ZzhiKmslOSMw MTBxTlMjdG1ZMDd3NzswN3c4diQhazZVCnowMEhfKkxfdChZJEwtVm9TSkZA ejJrPiNabSQmJjY2SHlTeUhlZkpKZ3ckeihmUmRJMTg2bVAlT2VqT2MpR1Uw LQp6PlRocCZjVFVHbldBX0xCanFpXjtfakM1Iz1Yb3dnXzQ1RVIwVyh5Q2ZX PUM1LWlHV0JkU0d5OV89JUdsYVVxaS0KejcpOT19YWdUU3hIXzdAclVJK3cz WHRjS3cheDFTdV4+akttNkhoI3dvdHgrNkt5WDNxUz04ZTVYZmw9ak9WVWV4 CnpDWSRTSihERig/ZjFrWUlHcGpsTStRMz5PfE1GaypOP3pZVXh9O0R7bHtF NiZ3Pmhoa0h8NGlFeT1JRyp0cjh9Jgp6aVIkKUh4dSMkdTJpXmY0dmFfNHF5 Q2MpPWZENkw8S0NmVyVVYm5La1JLZ0Bhd3FzTEFSNSZQTmxGN3BWaS14PVQK ekFAI0FfRzApK3I/Z3UhYDhJc29XWmMkPnItZzVvIVlEZFJ1T3g4RWRJKXlh PWYoODRjcXRmYzAwSXRzKnpQYHt0Cnp2R20qLXRJNSl4dyl5YVleSkRVNUhC MUBEaVh5VXE2VkY5eHBOaHU5aFVuVSlIaHNDeG1gVEswR29kWXY5QUo+Swp6 cHdPOFYkMit6cHdAKFRGcClRVVIjY1A9cyZLRjFvNzUqQj5uPjtUQjtSVDZN dzsrYmVIeiVAQDIrQzRuQHEzeGUKenhYMShyQjBmeC1QTGZfPlFrOWVAU0w0 NGtmUkhyWWp4e3gqUTBTO1pOR0s2I0E9bmQ1dj80VDNjUkMmQmd3KCk2Cnom bjQ/b1oqejRITnkrc0w/d0U0WkN1SFF1P1JmUn09ZGFgNlN5Rk5WP09NbmxP RnhnMEtTPXcyMCM+WiteWik8PQp6QzNIbnRiWXgrNFdqYlNXV25wdz4wNVVL IUZmQjFNRWlmQHVHQjckY0dkZVVoRD07LVdGZmNmb0JfMDMoMDN+IXEKelNh Zjd6YlkoaGlaKTltXmM+cHBuRiklR0tJVn5fVFI1Q0w8RyZETGVIWStlU0l4 c05HbXNQOSkwMDAwPE1OVU1uCkdMU1RZMW5KQGJRCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF91cGRhdGUucG5nIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdXBkYXRlLnBuZwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi5hNDVjNTNmODNhMDU5MzcwNDg1NWJiODQ4ODg3MWU4 ZThjOWJlNzAxCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMDkwCnpjbVYt STFpa3gtUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJq NzAwMDMjUCl0LXMwMDAxNgp6VFUkMVchM25BMmErYVp6bDlJdVhIWnJ5NGIq OUhieXkobEtTVzNYQCpRaWQlcyYhcSY+aXcrJlc1KCloJExNSXQKej5+NzJL YjxPUEJ5TUVpZmY3YHVAPEdwai16SlQxbmZkOVFQZChyUlEhR2VVKj8lbChL Z3d5Y2UjRHcwKGgyRi03CnpqTVZQbSRBe21AaD5fTHE7S187TSUhLSVVQCNE KiQ7PzlpWSUlMEBVcDVvQXI8aiRYPCt3dFNsa0xBI3o8a09KbQp6KFZeemlx VTYrKD1GKzAlKXNwN1pxdmg2PD1HM0k7KXVwY0JeWEEhPD0rfnlgKlFlJiVt Zyg1MT5EajJ+Kz9WT3YKenNwe0ZiPkQjTDcrUENRNW5kO3JEP0EqQk47Rnt+ K3RuQSZvPikpO0gtbiM3SXQ/SntQP2NjbFg7alpvQXlYeGVmCno/QmNLTztr QGtRdTxobHNAOHJKaT1DYmJRdit3MT1AYURrcD0oRiRYd2VhWXxAYWUrdj82 JmRpI1BhUk1eWDxtLQp6QFd8TTtxamRsUDAwREdUUEUhQ3Q9R2JOYzAwMFNh TkxoMEwwMUZjVTAxRmNWMEdnWl8wMDA3PU5rbDxaTlhQQXkKei1CI0xBNVFR PGVMI2FoOzV0UztVTWJ3QV81PHYpfGZJeHNtMFlnQ3VHKTJtdkBCYWNsSXAr WERMemZxPiltfUlrCnpgemx8dV9ud0t4QDszaXFKfX4rJFI1T0hlKmxlfjlX X00rRWIpVlYpOyY3WllyQE1RNTd0Rj1zQCRxLVk2dE9LWQp6RldaPEVxXnJ6 bHRKVWdZSFcwcVk5SW1mQmorc35iJH4pfE5wXyhEXkkyYTViQykoQHZNbGpN ZVozc2hFUnJeNG0KejBrOWo5IVRvKSRONDBsKmQ7MCpJbCtVKzhPe0VlRjVN dW4+Wmw2UEg3Xng5TihtPjFTXkN+bmBpMyMjIUpubSo7CnpoVipMcVZYUDA1 Z3BoWHJJO0JFQTVzejBYbEZpemNHMGRgSHxJLXZkYWYpVWlgYnhGanJDQiFa LWBLJkZgMl9sRwp6VzhIZUxedTMkNHVRTFhBXm51WlhyajIwT1ptVUQrKkE9 QTtVMEllcGxOWmwxdShQKGR3cXI9cSlLZ3JRS0BKQ2wKejs+XkUrcEA9Mylx fVdzKWw9Iyk5NDAxNGRDS190TzM9VEl6YUlxPmJ3dDUqMyVUUFEhVns+NGNY WTJ3QHZwaTRICno1cCVmfjc/JSM0YGNtTyNqWkdMdHAqVXlAJjNkMHx3Xn5O Sz1vQ2U8MUZjTFotR0tSZmdpUUFSbDc7JThQcjslVAp6blVmPSowOGVmaFU8 bzFoTDtAV0tROF5xQTdDfmZMSFVzRytwWjYoM0xBfXk0Ulo/dEBKdm04Mygo Q298PF9QakgKenxEdmo9WHJVRDhXQ0khayZzUio1a0F9diFwU05mSjY8SUVK PXlyJVVsN2VzdGx+Xj0jVntWTjJDcFNQOHI4d1hyCno+VCRhe2JBJWoqNWZR dXhvKXw+alpyMXtZUkJBLXsxQ0oqSG9aSUNKbklvTkNGNExPSlFpKDwqQmA5 JkJRMGRoZwp6WW8oS0QzcTxkREszMEpual5vZipMVi1aUishIzN3cVB6I0Vh T28pbVBOKHpTOTcrMjAheXA+TiNtKjRGSVU9QWYKeiNIZEV5SXVkZlpvQj1w cmpOSWB0PGUjVzlNWnhkKTd5aT1OKT1VMSV4QX52dTRgfUpRQU93JEx4JlF6 RzA3KnFvCklNNk48JGc0el5DMU9OYTQKCmxpdGVyYWwgMApIY21WP2QwMDAw MQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vaW1nL2V4X3ZhbHVlc19zY2FuLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3ZhbHVlc19zY2FuLnBuZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi4xNWI1YWI0MDc5Y2I4ZTJjMDE1YjRmNWYxMGEz ZGJmOGFhNjQxMGQzCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA5MTMKemNt VjtDMTgpM0BQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0Rk Qmo3MDAwNGZQKXQtc2lNaVcwCnpoezEybz9tQGxqTVpXMkUmaEw1OT9AKz8o Uj5TSXApOXtKYUBNWHlDWVJUK3glSXVXYkB0TkIzZChRMkcoZTAkJgp6QHU9 U05qQDBndyo2KiszXjk4NWpOV2JZRHVIIyQ5Pm9+WE5QYD45P3p+QD1QPVo0 WWtZc2N0cyRteH5XP3xQbzgKenJOUUs4bWVJa0ZIdTM2Kj9jLXFYPDYhZFlo eDYpKEA4ZShaPFhgamFoeEZAKkBaP3xkPFhgcGNod3xpS19Vbmg/CnpAQXYy MEU5bHhRPS1NamsrYlpuYUQoPjRWQDdwVCM8ekx0OF8zN0Z3PilSXnIrYlp3 ZUQpOEpZXnlPZEg+R2JwRAp6VS1qaSpfdj9yRj54YkxEaVBZKXpfVF52Rz09 MVUxRClRVmFeVn0tOzx6TGF+XjdQeSlffmw+cSskIzl5VS18MlkKemBzfDAh PUpMK3ZeNy1hcGB8TzZ5PD87MzFEKS0kZ199d1lgPTNtUj9AJUcmK2B7ck5E PE04PzJEYWhtU2BSc0BNCno/MXNuVkBXJGZye05gVyU/MXNoUkBCN3s8e041 QDM9M24+U0RmLTxoe15ubzg7T19uMkRnTncren5Bbjwrd0Ffewp6RGdXa1Ep YW1vUy10RGN7PWA+YXAwc3NJMjBkIUpNUXZnOGIqayU5IzAxMHFOUyN0bVkz bGpoVTNsamtWbnclSF8KejAwRkhATF90KFkkTC1iMGEpTGsqMjRFaz9uRm9t UldfZ0dVS35YXno3aEZJUXFvUFB5VHVPUU5VfWd7OyNZan51CnpobT9KcSVo eXdNfDF+NU0mLSQtYmZ+UDlRQUBDKVlEISMmNEIkZGhKXjYtSFJsSz48VURa YkAkKUhpfGU2aCthSQp6N2xMI2VBZD01anRDJiNMVDgpWGs1TTtCTTFnIy1l Vl82T3pYQD11a21sdUxVMGd3fWU2d0M2TWFDfnpoTTNDPyMKelhwVT1xVkEz M25BMFhpaWg0RllPNX5OJVBfZVMzcU02cE1aTihJRXMxZ09fUiUpcCFwcSQh NEohQn5XMGRBeypUCnpVX2h0aTZQfENQYWwpMSQyPF87PWJpMEBZOHdnR0k9 SThoT207fGslRmRUbCQ9LThISldrdzhuR2BiRnFJRnV2Pgp6NW17QUxnJj5w M2J6cGt1KT0qSlJsTylzVy1NfWNPWD0oKFMmK2k2aXJmQXhkQWQ1eHB6XnFv VzFMRzZlN0RjKUQKelArKTh1NkgpUmZgJV9AZk0zKCN3YztCb2olam0jdHc/ MHUteW4pa1hidUJ0RFhBLXBiaF5geXh4SEpyNzExfSVHCnotM35vfDtyKGcp ZFgwJihie3MyQXp+U2grI3s7cE1RKV9GM2k5P1ZpdXdCPjJQd2RVV1NrOFdi S3xKR1NFT3twfApuOF9UamJAYil3UVlrIT8qe2MoSyh3U0ppbVNkSjYoMDAw MDBOa3ZYWHUwbWpmaWgla3kKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1n L2V4X3dpbmRvd19hZ2dyZWdhdGUucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfd2luZG93X2FnZ3JlZ2F0ZS5wbmcKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY4NThiZTFjZWUzZjVkOGYyYjY3ZjU1 ZDczMGU2ZDNmNDNlOWI0MgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMjAy MQp6Y21ZK0VYO2psXjdSQ2M4M1d9bzhJSE4qVXEtWnM0TFJDYkk0eiM5TkxA RVdNQVAoUlZ0V19KUjdQVkdOUlJrUWgKem5uPFomKzRsJjlvZyN2UGdhaV5v Mm5tNCVMZGMlfm1WZCQpPlpJK2JJcD98ZUlycDZCY2ZZKm55OzxSNXBFfXJZ Cnp3I1EmRjQqMjgyNWY9Q1R2c1QrIWB0SXJMS1ZtUjhuRDcmKUxvOCF5aX5L XzdAVzJlam9gcntJVlhndzxzfF8zXwp6IWtCXmo8WTJFSD0jbEFyV0kocX18 MzxFVkdZai02XnR+IzV1TnQ2aGZQTzk1cnZ2LS1BT2lySUFUKGVSMWhGNysK ejVRZ1lka1VrQnY8UGNBZDNAS295OU9fajd7ZCN+MmZDQ21tO09qfCF3Kj1e czA9LWl9cDl+YWVQX2B3ZWZFY3IyCnpwQXdgaWZ3dmxmMzQqTzZaVHE7a1U5 OVZ6Jn5ZdVJSNF97azRYN1pkM1NfOURlbF4lUXJsQVFuZTY0fH1Le3koaQp6 dCR+PFk9b01kR0ZIa3AmR19OSzRGKWhsfkIxMmt1UHpNZEBLISF5aSRiYFVa b35tfDRNZGhvNkkjaSVEak9xPE0KejlXdHprSWVOSGlTVjxqS0g7aWZLbVhf enUlTTBkWnJWZ3MpRChtPWF5PWpyalZtKkhSX30zUk4zSk1FditgTzRnCnpC b1lYTyRqSGQzPTslfFlCOTB6QyVGO3M+VHhJMzN2WC14VUJ+YUhsKChZdHJx QHxAJVUpOXFZNDA9RHEtYH5IUwp6cXBhZDcmITBhWmNrYk45aShoSHk3OGFK NXh4QTVwZlBqZ3FES1RPazFtSlJ4cUpwYnY5b0lzME9UNXVoSlJVeXwKenFG TEc1SiNYbnMpQkYkc212SSMzVHQhdClPPj1BODtfQEhrNUlQUFNNRyFoYG9T IXJwKiNKfk1xTipFSj5wJSNjCnpVenxjc0JPdD1EUCh6QiFWWnt0Rzdha3Jp TVR8bFM2K25oVDAyJTxHeD4xI0IkdDtHOVYjX0tSPCRfNHolYUAqPgp6bypv X15MS3ROTVEwYjdPWWY+KTtqb1lfeGhabU9rQVRwKm1KYkMpYD9LQ0p3T2Q9 UXM0UU43UXE3REVuaDgxO3UKelJlNUVsVmJNSGlIczhLfGRqY3w2QGw+NSVU fHhrckReKzkpV3BSMCNJO3Q4M0E+KlJpI2w/alMhWW1NfjxTQlUmCnohVWlE O1kjZjc4SzRjaHo7alNzWSM5LW49RmI5RlQyOzNwajRYUi1RZlFuKGBGcExa JSRPd1dvMi1RNWpmc1lzagp6MV9SYWRgczNReE52K1U7M0puR2tpcWdoNCVA Yk9RKEt2d2BkKmxGOTRNfE5WKX1jSnFAJn5MXkJmYEdHMVN5MFUKekVROCZa PDFyK1FBT0VYOVZPfjZmIUt+UGQ0P2NTT2N6OzZ0S1VPQU1lZSVIJGpOMWUz Mk4kLSpwSEU4b2sxfkUqCnpFPmxkOyZkZXdgSVhYSVQjOX13Uj1SfHEqXmE9 VEsoeWBHVTkkc0Q/Vz0oZnJUfTg9REhsNk5ab3NzZTNIciRTWAp6JWNAY3w1 dTFJSjM0Wj9tT3wtUHNfWVI9VyZycFo4NGkwVE9JWFN0eEEoQH41S3NYKWcm T2hOcGQhQ25uQ09SY1cKeitwdFRzbi1IQHtCb3FxQSQzQH5wX3dRcHw/IzU7 cDdaP0FXX2Z6UmQ8cl9OKzhuY1VASiRxSk5vdThsSShOVkY+Cno2WCl2Y1RK U0pWQXdsZFBxI3FkeW52JSkxVENNVlo0QnUoakl7cnJJbm1jOWdKTl45RkJU UlAweWBPKFA5MmpXNQp6ZFdWfV5hWnlvJXdZQnh0PFNZan15V0gkSz4tTjNk ZWVBM0BJeXU9cXh0Zmc2JTV9Z1NReWFLcHAmU04jZkhBfXoKeldOYCl1YWwy MEI/MmQ0dmJlRU8zbWgzRXt2NEBYXj8qQT5ZcXAwRC0tYG1VRCtYSmQhVkpr e2tjYVltPHZQSkhKCnpONyV4KnkxUlg0Ql5NbCVpSSo7ZHM9WDF0UmkpSigy UH5vZkduQ1I2PmchaUhIPV59dytLRkhOek94VXstaSpiNAp6UUp6SyNZUHp5 Qmo5T2QhIWlVc1RCTylvOW4+cVF1PVZCYz8kVkIld1NuRFE2PENXSChVLUFX NVBlUn5EUV9WcFYKeldwQXU0ZUA5amIzI2xYU2k2PU5tY0Bqbmk8YjVSbmFN bXdQcF9KTSl8MkBPOWVTfUBQRTx+QUlkI1J9QFp7UGspCno1XkhgI2xUISla YDV5TFUxXklyLXI2JXo7VDl8fkU8Wit6a1N3cn50VXJvOUAkKWZ6fHd1RXlG LSM7U1QxZzlLKQp6P25qalZtWTJVZSNtPFUmYUlLKT5fNkZ8S3IjfSFMWm1k cTR0KUUlJl8rfGVGOXh1JlR7PE01a2JtKD1TK1Q2Ny0KenpuaD5haCF3WW14 fEVZNlVTZUk2LTA1I29sMFdfaXIqS3RELWI3cCl3ckhoV1IwaSFWQ2RFcU92 eiUkbCQ7TU4qCno1ZVV0dENrdzNrTUdyJCpyeXIzSWMqTUlOQX10SXdtdCtR ZXd+a0FzNGJDTVlfQVNeb0FUOG1hJnFuVU5HfE5peAp6bzdOa3RESSl0NWwh JUNrPXE1ZlRqLSkjXmFvdjtaYDIxeyZjcm5WQEdXeng5dVZUX357byVQZ298 cUxHczthekIKei1Rc2l5cENsZDNVb3o+MVJ6PlN5I0hNUShfMkwkdkhOeDIt UCNTfC1vQWh3WTdOO09ye0FWZXxKaThTKm11cl99CnpVdGE/WWFgdHxVREBf VkpPenUydWBgTVNDTCN3PCM3cEM0ZWNILTglZSpPRlJ2OE1KS29tJm16Nz9w a19DZVQoPgp6VTtqPGtnQjY7WDwmcCZEYypuYFlCazhEMEx9SCh7PDJBZSlz Wl8zdj03ZFRzNypTNGZBTG90MVFgM3xDRkgxVWEKekV2PnNwWmtVUztJdmhC MCpWWmZjKjJrUiQ4JHFNViZHRmA5PUJiYGtZUTtJbmJQY0k8Z2hLVWxIQyFj JCNPKF9xCnpGM31fUGlFO2ZjcHROZ3c5PTIpUnh+QzA4bjxiZi0zU1M0TSYk czMzQ2RAX2F4ODc9eSYlTihHcEJ2WHJlIy1hUwp6Z197aHc5ayU4aHFVZnJe R2krWHlPRE5mRm9BS2A1eVcqN1gjcHkwOWdLYVJhcn1uTCl7WnpLaWF4bU9l TCF3Zz8KeiYhOzhAQnolKShGXnNSYmsybFc4N3c3R0IrU2ZiNFoobzMpLXlV IU8wQmBSRGRHNDxOMlZBPEdOV0FkZi0rPWVRCmN6a29sfTBwMV98NEdkNXNZ YipjOzl9KlReY1B1e1JmN3N4b195N09eCgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF93b3JrdGFibGVfc2Nhbi5wbmcgYi93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF93b3JrdGFibGVfc2Nhbi5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjUxZTBiM2Y0YzYxYmExNjZiNjli ZDdmMzJjYjIzZGM4NDI4NDI5ZQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg MTk2NQp6Y21WO2UyVTdUblApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEl dzB7e1IzRGRCajcwMDA5M1ApdC1zMDAwMXEKenghWDJ+IUVlcChMQX5pa3pV ZygmP3xJUGdRTnJwfSFzPUpVPlZ3bnBpUGk5QyRuMHYjPn42fkpsLVRpXitW T25PCno/U1JuamdWRjd6LVNNZDJAe1pLKms9NT4jKjYqKzNeOH1+aTImbSNu enYpZkU9QCtmejlrMWhDI3BgMG4+b2N8Rwp6SUpmMEp4YUQhbj8wQy1YUGA+ OT96fkA9UD1aNFlrWXNjdHMkbXh+Vz98cUI0ck5RSzhtZUo1ZVclUzl9QFZD dEcKencjKU8hKlkyfig/eXxANiNNSkR0I3E2KWQ/NUBNYCFPYCEpKENWd2U+ OGlpKHpSdXpBX3ZAZCM+WWNqa29Wbj9uCnp4YkwqZD0kVzxXbjYmNFl2Km5i cDxkVXhJdC18N3Rzb3sqTD0lfkVjPmg8Wkl4YXBkPT05YVNLayp3cDh0S2Y+ SQp6KjZILWB3OTRxMncoWVVUPTlSSktsKDY1NHF+RDA2PUIycmRLVCVVblBl d3lUbHlyV0RaRlZ8M0koSSV5I0c8WnQKeldOTChLYmNBdHVMXzBsUVFCfGpi ailHYCN6P2BVVEp4R0NPWmZSVSNwZ350cU1vSCE2PD97MEtpSFY4LXxOcFND Cnp1KVYjI1I4JjtoKnd8clZWVjBKYloqT25QJUYxVV5TSmRoQnFvYm9vTUBR ND5eT1puVWUwK1NRZXYzc3dLfllGYwp6KCZ6S01MdG4zamxVeih0YjZzUmxM cjJiJXEpfHlzZWAwRlQ9Skwrd141Yz1EVm0oRUdLVGdpJkBAWk9Nd1UoZ0IK em04RkFqYikkUVMmeT1Sajw/Kzs8dVlGeCtXPX5oQ0wwVns2VHl0RHdke3xA SGUzc2Rtcz58ZkBqQmE8aFppQUM8CnpjKE91ViVIIzBKPE03SSl2QT4zdW1V QERXYShUeiZAUUdxPCNeVWN6SjN6KFpANVBhISNkVkNyO089bHpUZSpqcAp6 aURgMSNlVjFgc1V9alRUPzdHUzFwfCRGXiNwMGZeOys/U0pvVWlEIyF8MVpY LTxZZjRtI1hIbHp2aXlJLUliQF4KemwmOVUzcnNTPT08ZzI+ZGspKyNAcVN9 dzU8RXl5OS18cCtVJEsjKX48RFJuTW8zN3hSdD5Ccmc9ZCFAd21aeyNBCnpz TjltSStLLXt5ai1he1E/QlNmUylfOVdEY2FZVX5rSkVDRChyfTU7WkhDV21n d0piKCYxaXdtWE1mcEBwNDkyewp6elRXTXYqNkctTG1EaFRkKU8zIX5aLX54 bmczTS1xJlNgP3FYQFN+fnEyajV3ZUJrU2owMDAwMWJXJT1KMDZeeTAKelcm aSpIMGIpeD5NMHVneSlYKUZgMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VTAw WS1hTF90KFkkTCpBUFI4Pl9KCnojXzZVX0hjeDZjKmdSU0JIYXI9YEFUY1VK KEh0O3NhTyU3aUckRmU4P2w7YGB1SEdqdkhLOU4pUDFIPTJ0azZuUgp6Z09V bXxxcmQ/dEw/bDI+QW1rfHVZVC1GMkRETGdpVENVfTReQHNiOWVjIXc1e01O VT57b1FyXntMYV5aVF45KGYKeklfJG0+O2xmVXhKNnxNUmU5NUprYnJDTVY7 PnhTODdPdUpXeTZiTmNadFU4dmAlUXZScSpJUmBIe1QtTWRSeHopCnp3K25h TmREcT9kMj4wSDF7e3MmU1UzPkw8PXdhYTtzWFc0Rz95JjM1YGtQR3ReWkB+ WmZxPy1LVV5iaDNMK194Vgp6OzFDRTI/R3g0KTl1MUYoY25veGlzYjQ9Nkxq b2ZzQmg2cyR8OUkzQjVjSzN6KFZAYGk+Nm4tUzVJIShBYzh+IVgKekpoKG1i T3deRGQyIyReKDhWWEBDIS1qYExMfkxBfjVnOVJ9NGU0KSZYUVBJVTQyRHJk cEw7JEcxYEhjTUZhaWR9Cnp6M30yX3BVOVo4PEhvOzRFSDYoVzZYTyNJbktV X2AoMFhNYEIxdVhqdU98Q0tVSzZEUjhMZiNudnxBLWFob1RAWQp6QztoTHVQ QFNxcnJjR21yI2ZvKyhzJCllX012ZDR9UnA+KVJIJEB6eCtuX1JpSXp2KXFe ciRHZ0M5NHpWKkpucikKek41cSpuUjhieXBAR0AlX0wqQjVYUSZpRHx2V0F9 N3NTYiReQ01zeiorVFZRM0NqI2pkYTdpaX51VDRjbW5JYm1TCnpHN1FMXklV ST8lTzQyeDA2NE8wQGQ2X0FTK3pZeD1edksrfjQ0RnNHc0JiJmJZTyVDIU9u YitKRG4lNEByMFM5Ugp6XlNNZ01NNiUjcjNyU2tJRnE3cjdEM2ZGXiZMOWdD TmsjXmxXS2RiTWdmRSNUTT1iOXhDR1hFKG1QVVVyUHlUP2MKeiRvaTFLSCtv c1FrfEw2dUM1UEhhOG1ofV9lbl9YSkdreUd0bGY3MjVefmtES2YydF5HQmJJ Y0xYMlQtNHFOXjJnCnp7IT9aM1lWUEd6aWNERE1WI3pVdGVtSnkkX0JsZ2x0 VDc7SypZYl5KUXpZPlY0ZWdSVGxAR0BEbj5+Z05DTUM/JQp6QmtSYHZ0K0hO WkMpfDlxKXthIytZfmFZMzZpSVdAMTJXMz11IWtjZ20zdndHRk5tVnFiS0lL RDJlWSY4QFZUK3YKelQjayVoTEI5R3JkdCoqcyZjPjgpWGNwZmx2ITJSeEZ7 LXA4LXt0NCQ3ZUstSG58e35+S05jNExeZk1Ge1pgcnlICnp3d0xWS3h5eWo7 LXB3fSN0VUJ6ejVaRl4leTAtdX1tK2RSeDVCbj5BREszSmQlRjJATXUmYik3 VEJreFV6NUByPwp6PHAtc0NkMDdYYz85aWA9MyEkUT53c3RGMio4TnQkNlJN NkpZNEVtM09oPUQzSFhiYF9AYEpydSQ0YF8mYFFmSWYKejNNajVeWm14dXFg dWRZcVB+RmdRJUJ4cSZaRVZiQ0R3fmQ8STgrWFdPKkoqZXUlKUBLdF57X1JK cEZxJE1OYTd2CnolRnU3anBMJUtVVnEyPz1LZE1geCNxMEk5PXJgN1NqaTFm TiZlIzh8Jkh4Z1EyYXZ4YlVpdHQ0MDN+IXFTYWY3egp6YlkoaFlhJUV3M1dk SmZURiklR0xHQSVHTVI1Q0MrRyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1P YnVYVlJVNlcKelpFc3wwV19iV0lGZmxNS0ZnWXpTRjtwQCRJeTV2b0ZnN2JO SDk5YWIlOW1CRjAwMDAwTmt2WFh1MG1qZm9tdmNjCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leGNsdWRlLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4Y2x1ZGUucG5nCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLmJkNjJlZWY2NDEwZDkzMTU4NTdkMmU2ZDI0Njc3MGU4YjY1 YjhmNDcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDcyNQp6Y21lQVNATj8o b2xIeWB1VkJxIWlhMHZwXjB3QiE2Mz93eWxgR1hsNDd5fC0pTFJeOHx3aX08 eW1UdlZ3X1FyWTEKekxDMz9kXipVRGhGV0xBMXw5YCl3TWBLUkVidlhRNUEt PSg2JTlmUjlaaFVfNl40XnB3UzI4bExXTXdePUhTNT49CnpfaXNMWlAxPEAl d1FgUWprPUslKm5OZ0cwOUpxQW5ZK35abSgkZCRkc1pUMl5FfktRfmUpP0xz ZDZ7SjFMYGtvIwp6OFFZSF5YemhBWlNvclZQdVArLW1kfHRCVC1gfkhGWWlm PjZua0pQdU51cXA/WUlPRDU2SWJeOGByVjYrZF5LPDAKenprbVBVdFhRIXBH RnFaIWhHZzNzd2UqZzRYSyF3SWF6NXFlX0hmRlNyd2JRdV5BQ2AwU3xLQFFr N1VrLSp+aFBNCnpFaHNxPDgyST0xPztCSTZVaFYxbV92Zz5TQGJJbSpqZ2t8 ME5HPzJPZjlSIVReQDdDcHIlem5Fd2M1flZtJXNseQp6VUVRNU5LQzVsKmMz cnFGeDhRezJucm43QDk/QTQ8dyU+NSYmY2AzYFp7Rk9Pb1Y7OUhkeGZzPCFK TTRPeDk/Nm0KemVuV2ZCVyRBNFhZP2h6WVVVSF48YEJ2NTRQWGhXRHFASF9j d2VneC1hbzZGN0EwNUNqV2hARXUzdWJWNWJ8VmVNCnpOJUQ0ZztiXi16d0Y9 MUxFYnhkZDJHU20yPn49RVM0Iy0mVj5FYWs3YVhDNVIwN0gqWTJHYmR4NDVs P1haK0xpUQp6V01tWX4pV3MofWM9cXQ9VntyaXlBdSZOdztwcSZWOSR1Y09Q bjxlPVFkPmh5diQmWmhCO0BLOVE8SlMqTj12P2UKekltcEQ7PTV8Yk4qfE19 XyYlfnhCRmx1S0BNX1VJNlM0WHFFdDhaeDcrYFc0Qz8pSyU9eEEoNz9fYyZt JFY0ens0CnpWcSY2V3FoIVJUQXxOWClFazF3M2o0NSpfJjY+dDFibUJ3YGkq LS00cVBEV00lN24/Pjx0MlZ7PUNqTntVMVYpdwp6VjMtanRVSFVhaXt4czAo c3dKKXdCYEp2fHNhREJGc1gmVXMkaVVFMCo4cXIyTGt1bWYzQG9qVGprRkVT dFBCaX0KaGNiSylJWHZvYl4keE4lbnR6cH5NSn1hT0cyMldRJW12djRGTyNx ODlKdiNzWgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0ZW5zaW9u LXNtLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1n L2V4dGVuc2lvbi1zbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDMy ZDJmNDQyMzFjMWY4OGU3ODcwOTEwNjBlZmM1MTI1ZDgwZWY2NApHSVQgYmlu YXJ5IHBhdGNoCmxpdGVyYWwgNDIzCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEw dnBeMHdCITYzP3d5bGBHYkt9UUdpY35FMEJKRHYrY3A1JFF2NnF6clZrNwp6 VzMmOUB2ekJpa2BHNUhvfEstKXVUaWNjMi0xR2tOR3lVMHglb28/M2ZCZWRQ YWsxZ25IbHJgXjsoenxpek9+S2IKeiVsbXwxempJJCtiTn5IMnxNbXttY01w Ujl7MypKKlM+ZjNeYDtTaX1lfF5wUWA9e2pFVERkRSQjUXl5KWR2PjwkCnp8 S0FHc3d5b2NRd2xiQ2tgMnttTEppQ3p3PFp1PnZMPjI+UzQ9e0UrblFhR1Q8 YW9MYGhEY29RP2Yyd3NQIU0ybwp6N2x7ZURRK34oY3w5QEJFODReMUt4MzYx Yll8QnVgcVFiLUo2MkRCeFpfPHA1QkVgcHduYX02d3hwYTElPmUhVnoKemFo ZFU9KlgmRVNGT3BKRSomO2UpYHFkMypEcGFUNXU5SkRMUyUzUCgoaylAPFpi YUx6VitoIU9mND0/YEtLOTJxCno9M2ZFQGw0Xi0tTGBoMHdOdmMoSFE3VnZQ RmZ1U1MmXjB2REg4MmJAR08jaSt3bFhvKkhaWmpeRnFycEZaeHhEJApvLTI5 Wnh2YFVCdTE1Mjw1cGxUQjwxMmMkKlFgMUEmMDV2ZHB5ODV9U2I0cTllMDF9 azIhMmtkTgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0ZW5zaW9u LnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 dGVuc2lvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNjNTMzMzQ3 ODgzZmMxZGVjNzNiY2IyMWIzMmZjNTRlM2MzMTczMgpHSVQgYmluYXJ5IHBh dGNoCmxpdGVyYWwgOTk2CnpjbVY8QTB+YEVfUCk8aDszS3xMazAwMGUxTkpM VHEwMDBtRzAwMG1PMHt7UjNDQGx8RDAwMDAxYjVjaF8wSXRwKQp6PT5QeCVg Y088JU1RMnpMZl82STYmOXx6ZGQ5OT4tQGEqMm0hSnVuaDdOKXxiUmZ8LWJ4 fHpWYm9TS2hhX3cobEcKejttYy1MNFhWVmNRamIpUiFJb04+VVRtNmNkVGxQ Kyk0OGFlWV9GKCshcXZoKWZJcSRJJGFrQFFNMURlbWIycC15CnpaTklwZyUq VT9aK3wwZVVtUj9RKUAjQHlMdEEzdTlYRmh2OG1kdjB0Yn5DIU9rKTR4Y2tj M1dzYTQ/KmFVRD9wSAp6QGFmWC08O3N8Z1AtPEhlY3hXTElUTW4re3llKURx e1FMTCZgMTFNbz9EZz5BXlglRXs7bGsrTXk1YHhrPEpHQykKeihWP0peUGEw cXI5JVVSVVpZWEp9YUhgfEVYc2Q3PVY7TWt2S0hiY2lzRnpuWVk5KmVAcXNp XmtxMHArYztrfiEjCnohPzVNUHF2NWxpLT4jNj9wPzFOQWFsZTNuKTBOdURr Z2J8bk1RJHZFd3VyOykmWChQJWtsTGUoKnF3c2JuMChaZQp6JiVscUJnKyoz UzFaWT9kbnV0VEltcntHTmZweVoyZXRrTTlYQ05xVEN0cjl3aWhWT0FWO2lO X3U2RChUSyN4Y2YKelRuYHYhNyhiT3R3NGBiPVhDUT5MaHQ9YGl0PHwoI210 U0Y/VzxRUWNtJDtUPm0xQlo7RzAqU1V4OCVXR3Q3JjRCCnpWM0QrdGI4Ukl3 Z0YzTHV1I2JOXjdHNHY9PSp5VlJwLV9Aa2ptZW9TZG9hRyF6U3pXdiFLYFVI VUtDIU1WdVpTagp6YUlBSlZkcEF5Rjl2eHlDbGgmZytqWThHR2UkdTtrbFl1 b3VUQCppVkQ/dyk+WTs3RXNla1ZDP0RSUjFnWl90UVoKenlLdjk5Wk95WX56 QH04NGhCS3tfSkhuKCFsNmZMVmJUbmhGWmZNU2ZWJDZMdWwwcWhHQzIqWj9O UDxUdmhCTH5xCnpVQnwwYyNpdmNjcGcpUm85OEcjV1QqYFA+JGE2fShXOzI+ YUk7bH1Xeit0fGZJZWxqbFNjRlNmcmVhWFdaJWYyIwp6TVojdH56Zz9rXk9P QVVwaEkxKjRjcjNWfVFuczgmaWdZMUBZI0RAWTdIP2IkVDhVQ3RzYm5fMlMl aTIhcmshKWgKeiE+RWFNQ2N2YW15Uj8oVyFLSzgkcUY8Mys5QkNhQVVKKTg8 OVg2TG1Fc3MxRFYtPlpUTDNlMj04RVA5KWhmYXVtCnpMeT53WEVSc0Vkc0RF bygzem1FJGV4YGpzeUltRyY3PUxPT2ZvbH5UY08qJUlORW1KJTdpfUJ8WVJu MSUwMDA0Vwp6UWNoQzxLPDN6SDAwMDAxVm9PSXYwRWgpME5Ce3I7MzI7YlJh e3ZHZjY5NTFVNjlFOTRvRVFLQTAwKHFRTyteUlcKejB+LXhHNCEmSEJGOH19 bFIhS3hiUjJiN15VPzNqMnhTO1Z2TFhidHdUen4+MFc9UWhWQSl5SF9Ga0x7 fTE7aHVrCnpwYUtDUUt6QD03c2B7aTk3aTBAdmwyVFM4dzFDNz9SJkc3eTsp MU5tPDxPWmtDe0EtaDw2fUE8Q2piRGFQOHFEZQpTUl80ZTYwMDAwPE1OVU1u TFNUYVgtXkwzNwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0ZW5z aW9ucy5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leHRlbnNpb25zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZWQ3 Y2E5N2EzM2VmNTk1ZjQ0OGI4NjIxMTY4ZDUzMWY4NmQ1MWQ1CkdJVCBiaW5h cnkgcGF0Y2gKbGl0ZXJhbCAxMDE3CnpjbVY8VjB8eHd3UCk8aDszS3xMazAw MGUxTkpMVHEwMDBtRzAwMG1PMHt7UjNDQGx8RDAwMDAxYjVjaF8wSXRwKQp6 PT5QeCVfZlNrIU1TXnhaKCNeTjNwP1ImT2QrX1l1JGliaiVUXjZSb3JCI2Jt biExXzV4fTJKaVVIOXxtPWkkcHsKelJ0Pjdlc1p4KHJrSE1CJm18a3B9WWtG LWkrUzlxSG9OVFlDZnhefG9LN2M+SD5CeDduZU1FampmTzl2Wm5RZ3pnCnpu YXN6by1gdmMtd3c3S18wckJlQXd5Uz1nbTFqUENKZUpJJEdqPW4mdnlxKlhW fn5WU2VRKz9Ha3pMdSl2KyhLQwp6PyZacHVpJUBEPzVfbzdLNUwqdGU8R2R8 JEUmVGlVYH1wJHRfVSFmVztQZFIrPioyIWEtTVolNHZnNmdNO0wpTD0Kems1 M3c0NzlNM0JEUStsZnNCbyZ8eG9FMyE4KUYkamRfTFhHbjVkVW1IRUpjRSQp bX5iKHhLMyp2KkVxQj1ma2smCnp6TjZ1QG8hX3BJKlAoWDdnPms9dGY3NnhQ JGRJaj9TVmU5dWdTTHBuPiZ9K2xzRjIjRGlQKVdqKXxoPE1saDQ0OQp6bTQh dUNQeX1kTDRWczhVdEN2IUh2NE01Y2plZFBQQ30kdWpaNnt4TkpCb2NYQng0 KDspdms4TWhkX0A9NW5LLSMKeldmKHR8TzA9WUVGPXJyenZ4bjkzK155QkxU JGYqQW9AUEllTjArI2tXUit1cmNRTWNKKlNGLXNUJnJuZmxWRmp3CnprYUtN JUc9bjtAJCpfLXFJVGxfTSFzeUdHJjdufHxSRV4xKkR8O30kKTR0Zm1ocno2 QUliSVpBbnFxe3lpKlQlVgp6SGhWV3RWOyZ1MThJI3RkSUVfTnB6a2JyWWM5 VmZNTHRQWDxaWXgxJkI1WjlPbTN9OFZaN0ZpUGVzOW8tVER4JTEKend7Nlh7 V3glRlhvcld7NWt+X2tyTXZ7M1ZNc3plfHQhYCt9Z0pSNW1IaitYblk5KC07 WmIqVmhDeCRjMXVVKkhoCnpSbUc9R3pAUl5oYXZWKjFKWTMzblI+KlRveWs7 fCtNTE1aYkspXytYb2pIQUg1bTx5dlI7RlQ1IyYxaStZREwwawp6SkhLNl9r NHVod0dscHwxaStDKSFwaTtKK01+WllJZkB+UnRaNUQ0XzMwakYjUjtncSp5 OysyS0oqSiY9JGl0fEsKemJ0Yl4xUHJJfn0jPSloO3pNQH18VF53bTA1PyZE K1k4XkowTUo8bSE2a2A+Jm5MJjRIQz5kJVNQPWAqNGRfJDNYCnpDb0dhWmZU KHxLU19fdFpCN1VaUUtEJThPWGMmS0w3SitMTzgrUm0wZj1DIXs5VCNtSjdV REZFMDAwMDFiVyU9Sgp6MDZeeTBXJmkqSDBiKXg+TDsjMmQ5WV9FRzAxMHFO UyN0bVkzbGpoVTNsamtWbnclSF8wMDBNY05saXJ1K1hFWEIKejZDcChSYmNw fX0wQiVWe0t+eHlpVTY4UjJ6I3QzK25TKHR0ITN+aFledkdnNDJGTD1gRUVO Tm0we00hNi15MTspCnpReEZhenZMX2NLKmI8X29rRmcwZDhIYyNWPUVoYClo K3labXBsZWhubE5aRWR0Z1FAaFgwQ05lSVdFcHh3IW95TgpuZGN+dHNwOVRs aWRPek9DJi0pKnxLSCkzcEQybmdyMDAwMDBOa3ZYWHUwbWpmPEtOVXoKCmxp dGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlLXNtLnBuZyBiL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlLXNt LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2Q0M2NiOGFiYWI2ZWYz OGRhZjM0ZmY2ZDc1NDQxNTNhMTFkYWNmCkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCA2MTIKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjM/d3ls YEdYbDQ3YFgje0xSXjdkI2lgR2AmaSRLbXteIzFPCnpwSEFJKmI/QD0+WFYw SE1kLW0rO2pifiokVWxgMUooUSk9KV5YWSQ4JEEwR0BfP2YpKFRpQi0wb351 OURFYDRoXwp6QDNzMk9tKDhkRGRJN21oLWZHTno4SnhKJChSdUNsPiRtVVN5 TGJRb3tZUUA7SiUwUm4+OVQ5KW1LQTllKkJ2LTsKeiFxOWsqeTdzfWNeNjN2 QUpPSWtPZDh8PkAqcUBmKGNsWWt5V3lfWERNMFRyYm9ePG5Bc2NVZGhTIzNz cGBeNUZACnoqU351OERsdkpOeTdweGlee3FSMDkpSjFyPD9HazQmITR8LVdW JXNOVyMheT9ZYV5vOHNBP1c3RUwheU88SHhzZQp6LX1YPH5zLX02PSg3MWQ0 e0RuYFNLNWNBVHM7KyVWVTk8YmRpTDslWjZJKXRWSiRkcnYmNl90NTk9dnc8 K0VyVEMKelF3e1JoNH4+fkdjJUpKXzAwc3dSTnN3UEtnVHUyTVgrUkVWZmsk TDlrb0V2JHgwQmcrSypqYDU3c244WiVnRzR9CnpPYUBBZjlTcCs4K31oSUM/ Q2syfDx9TUJHKUJFRWMwejR2SUx7PkdxXlFiODNESnBTX1BNOT1wOz8mOUUw VTwkYwp6VHF7PHJUQTdgWm1IRTJCZndrbzg3aGF5OzkkJWxjM3ojKyk2K0lL MTdJclBvRVAmQjYrUGEkRVR8SGVxZF99fFQKei1SO1kjWns2TyVVT3djMnl+ Mmc9ISloODlEazlKTD9ya1g4VjY3ejRgQjk2KFcyKWV9aTYwdlJmTm9QUWFn OFdSCnpOaTBkVk4tanpUUVZkMjBoNmNLWk0hRSl1QXd+dlBDZE83S0NmV3cz UnQ1JFpHZ2FrS0gwMCl8V1RzVUBHI0ZUZApjSEdvdUc4Skl5ZG9TR2lHMkI/ OS0pNzgmcW9sYDsrMExWUUg/RW5BKAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx CgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXh0dGFibGUucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMv ZXhwbGFpbi9pbWcvZXh0dGFibGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjVkODQwMzVmZWVhNjJkNTNkNDU3NDgxMTc4YjFiY2JlOTYyMmY4NTYK R0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDc5Mwp6Y21lQVNATj8ob2xIeWB1 VkJxIWlhMHZwXjB3QiE2Mz93eWxgR1hsNDc7NkszTFJeN2QjaWBHR0ZaYGMk e2BhRUcKelV3N1NqZC00OXVgO1ZWTGVmSXA+dnVDIytLMyNMfWRHZns9ZGIz fTJwYTApXz0zbXszS2MkQyU8P1E+QnhaXypjCnpycUFBTUp+JTlZWFRJUSM/ d25VQEdoVml5YEoyNyhodlR3JFcoKGl3JlVfWX4pMUh5RntxRWhuX3dMPWhm QippMgp6Mk0tPVRlRThfbXFzTmFROHlYaVY+aVclfXpkPjFUVl5HTCRCallM XntTKFdVOW9WdCtwclhubVNORlprbSM9KkMKejxqTH5vJWs+VEZeb0A+UHla LXZzdDUqe3pQTGZsY1V8X1FVPmF8QiN1VT1KRj9iSjJjemlpcFlfM1BLYWUq T0ImCnptOCUtc0VxYUVCKWlrRz9tPjs9dz1sUHBBWntFSXJgfHs8PnpQPF5I RGpQSmt1U31ZPl81Sih6QTNsOGVeeSQ7UAp6Y2tmb05UKUJHbj5OI2BmRFhQ cUliVUFFZW8zRWpCczwmX0pyY0lsa0tZelk9Py02Q1N3Y2Z0X1UlITZpPzJA Z2EKemJBSCtLJERjb2N7YCZSbnpJYFdEKUhqNUxBS2tjZCk3R3Q5bFQjWWl3 Tjc7Ui11bXxLK3d2OUxtRE0oVGN5MFJsCnpAI0Q1Xyt1ez1uUlctSkRjMylB THs4VVl8SHpWdWRxKUJyb1BnJHJpQCRtd0lPO2Rtb3oqckxHN3RHLUI+XyFA cAp6ISYlQEZTcSE4LXp9VzMld2pHZGgrMChAX01CO0xDTFZebjs0LVpkfCZs I09ISWQ1ZDwlISM+VXZxeW9edTh6QEIKekY7T3RrdSNuU3AxREJtOXFoc2NS aE1xTXRFKUg+eWZ1NTFCcH13KTYmY1pxaW1hYmpRQEBWeW9TMSs0Y01SPDk3 CnpkIz9LVW9JUnRmYkNBaHZTPWNxUlpEcnMxYHV4ciVGZk9QUTQ+dkY4X3hJ TSUtX1gkMi1Aa1BJe0NiQ2tmQzcjUAp6MlU4T3I4em16eEQ+WEFTNHhJeSU7 YDFsV2Nyc19zcSo+R1cjNXp1JklDRn1SXlZHPytyfVlgUU1aYHFZa0YhbUUK ekdHKkctQENGdkcpdk5ZOEgrZU4oelFtb0NieGBZN3ojZXt2RkJZMFRlJlRF N2YhPFJzYWc4V1JOaTBkVk4tanpUCnpRVmQyMGg2Y0taTSFFKXVBd352UENk TzdLQ2ZXdzNSdDUkWkdnYWtLSDAwKXxXVHNVQEcjRlRkSEdvdUc4Skl5ZApV b1NHaUcyQj85LSk3OCZxb2xgOyswUXs8TyReWlpXCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leHR0YWJsZXMucG5nIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0dGFibGVzLnBuZwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi5jNWRmYmQ0NTRlZDMzNzI3YmQxZGVlYjg3YzYyZjg2 NzFmNmE1YTAzCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA2NjIKemNtZUFT QE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjM/d3lsYEdYbDQ3Xk1QeUxSXjdk I2lgR2AmaSRLbXteIzFPCnpwSEFJKmI/QD0+WFYwSE1kLW0rO2pifiokVWxg MUooUSk9KSgxdVQmdWZEeHxfaXBwKWVedGtSPU82Zil5el5Wdwp6cnE3PE1L aURwUFlkRyg8YHBsUjI/JWl1WHtucmE5dmdFRGRqRiVjU1UqNWxlLXp7Kkhq b3F2KFNGUyZMXnl1OzkKeiRCQ2g1NFlWKVNZYHBzNSFHb2htRlBUfHZQfUFJ QVVPd3M2QHExPnZYQUhFP14+d1UmYFNSdCVoWXkhNlROVipECnpUfXx0PnY7 OVVMP1c/QW10N2dvWXdTTjhqU0ZjYDhJUTd9aD1BZWY1SEJIVCg9UHo3KXty ZEkoLVBldEUmS3FmKwp6VEM/Sj94OT5fZHRARGt8SjNmQj1gMWJBRit+blFi K1NlUlNIPl9CKDtfMV87Um47PzhIRmdgQkVXVVFfeko9YmcKenJpJEg5bzst UTs9Rk91PVB3WDkrWXdQVzwyS254WGE+SXFqZ01FdkRwfkZ9YjxRTDR+QGEj cSFraSVLdjVtXmtSCnpKOzIhUVdWUmlVdkR3cWJGK30yVz8wSHdRTGs8RzI3 eGhkVzhYbUI0ell+alRWa3N9YmBRUGs/OForT0BodH1tRQp6eERVUitAWkRp eSRWJF93dTFoYUBnQkpBdVhVbXckSVFkTE5XTG0rMnd2Nz9GVyRsLXJ2YSNx RyRfZWVVdDdsOzYKellmc1FQUSMzSXtYV2p3RFBHN0NMQylKOTdJISEjaig4 WHRHKEF1bGdYVHppP0M8cStoSTUlKG9gUiVUb2RTQElnCnpGcSE5KnsrWDVZ aEVEa0Z2KHhVczwjJkpTWSV5MHErSDIzZmNsPz9oQ1pCNjIlQzBsN1ZjX3gt ZHVnV31laUc8Pgp6KWVfZjtsOWFAZlJJQjhvUjNPRCpXTUY4WllpT2l2VT5J VSNVfWEpI1duIVhqVX18TXhVQD1vdzRuOyQ1ZW9BSXEKaUJ9OVhQQzBHTVV3 VXZQeE04bTErcD0qRXw3KDhBNVQtR0B5R3l3b1pIWnN1dwoKbGl0ZXJhbCAw CkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9qcy9leHBsYWluLmpzIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9qcy9leHBsYWluLmpzCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzFkOTEKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2pzL2V4cGxh aW4uanMKQEAgLTAsMCArMSw2MzggQEAKK2RlZmluZSAoCisgICdwZ2FkbWlu Lm1pc2MuZXhwbGFpbicsCisgIFsnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAn cGdhZG1pbicsICdiYWNrYm9uZScsICdzbmFwLnN2ZyddLAorICBmdW5jdGlv bigkLCBfLCBwZ0FkbWluLCBCYWNrYm9uZSwgU25hcCkgeworCitwZ0FkbWlu ID0gcGdBZG1pbiB8fCB3aW5kb3cucGdBZG1pbiB8fCB7fTsKK3ZhciBwZ0V4 cGxhaW4gPSBwZ0FkbWluLkV4cGxhaW47CisKKy8vIFNuYXAuc3ZnIHBsdWct aW4gdG8gd3JpdGUgbXVsdGl0ZXh0IGFzIGltYWdlIG5hbWUKK1NuYXAucGx1 Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYikgewor ICBQYXBlci5wcm90b3R5cGUubXVsdGl0ZXh0ID0gZnVuY3Rpb24gKHgsIHks IHR4dCwgbWF4X3dpZHRoLCBhdHRyaWJ1dGVzKSB7CisgICAgdmFyIHN2ZyA9 IFNuYXAoKSwKKyAgICAgICAgYWJjID0gImFiY2RlZmdoaWprbG1ub3BxcnN0 dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLAorICAgICAgICBp c1dvcmRCcm9rZW4gPSBmYWxzZSwKKyAgICAgICAgdGVtcCA9IHN2Zy50ZXh0 KDAsIDAsIGFiYyk7CisKKyAgICB0ZW1wLmF0dHIoYXR0cmlidXRlcyk7CisK KyAgICAvKgorICAgICAqIEZpbmQgbGV0dGVyIHdpZHRoIGluIHBpeGVscyBh bmQKKyAgICAgKiBpbmRleCBmcm9tIHdoZXJlIHRoZSB0ZXh0IHNob3VsZCBi ZSBicm9rZW4KKyAgICAgKi8KKyAgICB2YXIgbGV0dGVyX3dpZHRoID0gdGVt cC5nZXRCQm94KCkud2lkdGggLyBhYmMubGVuZ3RoLAorICAgICAgICB3b3Jk X2JyZWFrX2luZGV4ID0gTWF0aC5yb3VuZCgobWF4X3dpZHRoIC8gbGV0dGVy X3dpZHRoKSkgLSAxOworCisgICAgc3ZnLnJlbW92ZSgpOworCisgICAgdmFy IHdvcmRzID0gdHh0LnNwbGl0KCIgIiksCisgICAgICAgIHdpZHRoX3NvX2Zh ciA9IDAsCisgICAgICAgIGxpbmVzPVtdLCBjdXJyX2xpbmUgPSAnJywKKyAg ICAgICAgLyoKKyAgICAgICAgICogRnVuY3Rpb24gdG8gZGl2aWRlIHN0cmlu ZyBpbnRvIG11bHRpcGxlIGxpbmVzCisgICAgICAgICAqIGFuZCBzdG9yZSB0 aGVtIGluIGFuIGFycmF5IGlmIGl0IHNpemUgY3Jvc3NlcworICAgICAgICAg KiB0aGUgbWF4LXdpZHRoIGJvdW5kYXJ5LgorICAgICAgICAgKi8KKyAgICAg ICAgc3BsaXRUZXh0SW5NdWx0aUxpbmUgPSBmdW5jdGlvbihsZWFkaW5nLCBz b19mYXIsIGxpbmUpIHsKKyAgICAgICAgICB2YXIgbCA9IGxpbmUubGVuZ3Ro LAorICAgICAgICAgICAgICByZXMgPSBbXTsKKworICAgICAgICAgIGlmIChs ID09IDApCisgICAgICAgICAgICByZXR1cm4gcmVzOworCisgICAgICAgICAg aWYgKHNvX2ZhciAmJiAoc29fZmFyICsgKGwgKiBsZXR0ZXJfd2lkdGgpID4g bWF4X3dpZHRoKSkgeworICAgICAgICAgICAgcmVzLnB1c2gobGVhZGluZyk7 CisgICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KHNwbGl0VGV4dEluTXVs dGlMaW5lKCcnLCAwLCBsaW5lKSk7CisgICAgICAgICAgfSBlbHNlIGlmIChz b19mYXIpIHsKKyAgICAgICAgICAgIHJlcy5wdXNoKGxlYWRpbmcgKyAnICcg KyBsaW5lKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg KGxlYWRpbmcpCisgICAgICAgICAgICAgICAgcmVzLnB1c2gobGVhZGluZyk7 CisgICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPiB3b3JkX2JyZWFrX2lu ZGV4ICsgMSkKKyAgICAgICAgICAgICAgICByZXMucHVzaChsaW5lLnNsaWNl KDAsIHdvcmRfYnJlYWtfaW5kZXgpICsgJy0nKTsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICByZXMucHVzaChsaW5lKTsKKyAgICAgICAg ICAgIHJlcyA9IHJlcy5jb25jYXQoc3BsaXRUZXh0SW5NdWx0aUxpbmUoJycs IDAsIGxpbmUuc2xpY2Uod29yZF9icmVha19pbmRleCkpKTsKKyAgICAgICAg ICB9CisKKyAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9OworCisg ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkrKykgewor ICAgICAgdmFyIHRtcEFyciA9IHNwbGl0VGV4dEluTXVsdGlMaW5lKAorICAg ICAgICAgICAgY3Vycl9saW5lLCB3aWR0aF9zb19mYXIsIHdvcmRzW2ldCisg ICAgICAgICAgKTsKKworICAgICAgaWYgKGN1cnJfbGluZSkgeworICAgICAg ICBsaW5lcyA9IGxpbmVzLnNsaWNlKDAsIGxpbmVzLmxlbmd0aCAtIDIpOwor ICAgICAgfQorICAgICAgbGluZXMgPSBsaW5lcy5jb25jYXQodG1wQXJyKTsK KyAgICAgIGN1cnJfbGluZSA9IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdOwor ICAgICAgd2lkdGhfc29fZmFyID0gKGN1cnJfbGluZS5sZW5ndGggKiBsZXR0 ZXJfd2lkdGgpOworICAgIH0KKworICAgIC8vIENyZWF0ZSBtdWx0aXBsZSB0 c3BhbiBmb3IgZWFjaCBzdHJpbmcgaW4gYXJyYXkKKyAgICB2YXIgdCA9IHRo aXMudGV4dCh4LHksbGluZXMpLmF0dHIoYXR0cmlidXRlcyk7CisgICAgdC5z ZWxlY3RBbGwoInRzcGFuOm50aC1jaGlsZChuKzIpIikuYXR0cih7CisgICAg ICBkeTogIjEuMmVtIiwKKyAgICAgIHg6IHgKKyAgICB9KTsKKyAgICByZXR1 cm4gdDsKKyAgfTsKK30pOworCitpZiAocGdBZG1pbi5FeHBsYWluKQorICAg IHJldHVybiBwZ0FkbWluLkV4cGxhaW47CisKK3ZhciBwZ0V4cGxhaW4gPSBw Z0FkbWluLkV4cGxhaW4gPSB7CisgICAvLyBQcmVmaXggcGF0aCB3aGVyZSBp bWFnZXMgYXJlIHN0b3JlZAorICAgcHJlZml4OiAnc3RhdGljL2V4cGxhaW4v aW1nLycKK307CisKKy8qCisgKiBBIG1hcCB3aGljaCBpcyB1c2VkIHRvIGZl dGNoIHRoZSBpbWFnZSB0byBiZSBkcmF3biBhbmQKKyAqIHRleHQgd2hpY2gg d2lsbCBhcHBlYXIgYmVsb3cgaXQKKyAqLwordmFyIGltYWdlTWFwcGVyID0g eworICAgICJBZ2dyZWdhdGUiIDogeworICAgICAgICAiaW1hZ2UiOiJleF9h Z2dyZWdhdGUucG5nIiwgImltYWdlX3RleHQiOiJBZ2dyZWdhdGUiCisgICAg fSwKKyAgICAnQXBwZW5kJyA6IHsKKyAgICAgICAgImltYWdlIjoiZXhfYXBw ZW5kLnBuZyIsImltYWdlX3RleHQiOiJBcHBlbmQiCisgICAgfSwKKyAgICAi Qml0bWFwIEluZGV4IFNjYW4iIDogZnVuY3Rpb24oZGF0YSkgeworICAgICAg ICByZXR1cm4geworICAgICAgICAgICAgImltYWdlIjoiZXhfYm1wX2luZGV4 LnBuZyIsICJpbWFnZV90ZXh0IjpkYXRhWydJbmRleCBOYW1lJ10KKyAgICAg ICAgfTsKKyAgICB9LAorICAgICJCaXRtYXAgSGVhcCBTY2FuIiA6IGZ1bmN0 aW9uKGRhdGEpIHsKKyAgcmV0dXJuIHsiaW1hZ2UiOiJleF9ibXBfaGVhcC5w bmciLCJpbWFnZV90ZXh0IjpkYXRhWydSZWxhdGlvbiBOYW1lJ119OworfSwK KyJCaXRtYXBBbmQiIDogeyJpbWFnZSI6ImV4X2JtcF9hbmQucG5nIiwiaW1h Z2VfdGV4dCI6IkJpdG1hcCBBTkQifSwKKyJCaXRtYXBPciIgOiB7ImltYWdl IjoiZXhfYm1wX29yLnBuZyIsImltYWdlX3RleHQiOiJCaXRtYXAgT1IifSwK KyJDVEUgU2NhbiIgOiB7ImltYWdlIjoiZXhfY3RlX3NjYW4ucG5nIiwiaW1h Z2VfdGV4dCI6IkNURSBTY2FuIn0sCisiRnVuY3Rpb24gU2NhbiIgOiB7Imlt YWdlIjoiZXhfcmVzdWx0LnBuZyIsImltYWdlX3RleHQiOiJGdW5jdGlvbiBT Y2FuIn0sCisiRm9yZWlnbiBTY2FuIiA6IHsiaW1hZ2UiOiJleF9mb3JlaWdu X3NjYW4ucG5nIiwiaW1hZ2VfdGV4dCI6IkZvcmVpZ24gU2NhbiJ9LAorIkdh dGhlciIgOiB7ImltYWdlIjoiZXhfZ2F0aGVyX21vdGlvbi5wbmciLCJpbWFn ZV90ZXh0IjoiR2F0aGVyIn0sCisiR3JvdXAiIDogeyJpbWFnZSI6ImV4X2dy b3VwLnBuZyIsImltYWdlX3RleHQiOiJHcm91cCJ9LAorIkdyb3VwQWdncmVn YXRlIjogeyJpbWFnZSI6ImV4X2FnZ3JlZ2F0ZS5wbmciLCJpbWFnZV90ZXh0 IjoiR3JvdXAgQWdncmVnYXRlIn0sCisiSGFzaCIgOiB7ImltYWdlIjoiZXhf aGFzaC5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCJ9LAorIkhhc2ggSm9pbiI6 IGZ1bmN0aW9uKGRhdGEpIHsKKyAgaWYgKCFkYXRhWydKb2luIFR5cGUnXSkg cmV0dXJuIHsiaW1hZ2UiOiJleF9qb2luLnBuZyIsImltYWdlX3RleHQiOiJK b2luIn07CisgIHN3aXRjaChkYXRhWydKb2luIFR5cGUnXSkgeworICAgIGNh c2UgJ0FudGknOiByZXR1cm4geyJpbWFnZSI6ImV4X2hhc2hfYW50aV9qb2lu LnBuZyIsImltYWdlX3RleHQiOiJIYXNoIEFudGkgSm9pbiJ9OworICAgIGNh c2UgJ1NlbWknOiByZXR1cm4geyJpbWFnZSI6ImV4X2hhc2hfc2VtaV9qb2lu LnBuZyIsImltYWdlX3RleHQiOiJIYXNoIFNlbWkgSm9pbiJ9OworICAgIGRl ZmF1bHQ6IHJldHVybiB7ImltYWdlIjoiZXhfaGFzaC5wbmciLCJpbWFnZV90 ZXh0IjpTdHJpbmcoIkhhc2ggIiArIGRhdGFbJ0pvaW4gVHlwZSddICsgIiBK b2luIiApfTsKKyAgfQorfSwKKyJIYXNoQWdncmVnYXRlIiA6IHsiaW1hZ2Ui OiJleF9hZ2dyZWdhdGUucG5nIiwiaW1hZ2VfdGV4dCI6Ikhhc2ggQWdncmVn YXRlIn0sCisiSW5kZXggT25seSBTY2FuIiA6IGZ1bmN0aW9uKGRhdGEpIHsK KyAgcmV0dXJuIHsiaW1hZ2UiOiJleF9pbmRleF9vbmx5X3NjYW4ucG5nIiwi aW1hZ2VfdGV4dCI6ZGF0YVsnSW5kZXggTmFtZSddfTsKK30sCisiSW5kZXgg U2NhbiIgOiBmdW5jdGlvbihkYXRhKSB7CisgIHJldHVybiB7ImltYWdlIjoi ZXhfaW5kZXhfc2Nhbi5wbmciLCJpbWFnZV90ZXh0IjpkYXRhWydJbmRleCBO YW1lJ119OworfSwKKyJJbmRleCBTY2FuIEJhY2t3b3JkIiA6IHsiaW1hZ2Ui OiJleF9pbmRleF9zY2FuLnBuZyIsImltYWdlX3RleHQiOiJJbmRleCBCYWNr d2FyZCBTY2FuIn0sCisiTGltaXQiIDogeyJpbWFnZSI6ImV4X2xpbWl0LnBu ZyIsImltYWdlX3RleHQiOiJMaW1pdCJ9LAorIkxvY2tSb3dzIiA6IHsiaW1h Z2UiOiJleF9sb2NrX3Jvd3MucG5nIiwiaW1hZ2VfdGV4dCI6IkxvY2sgUm93 cyJ9LAorIk1hdGVyaWFsaXplIiA6IHsiaW1hZ2UiOiJleF9tYXRlcmlhbGl6 ZS5wbmciLCJpbWFnZV90ZXh0IjoiTWF0ZXJpYWxpemUifSwKKyJNZXJnZSBB cHBlbmQiOiB7ImltYWdlIjoiZXhfbWVyZ2VfYXBwZW5kLnBuZyIsImltYWdl X3RleHQiOiJNZXJnZSBBcHBlbmQifSwKKyJNZXJnZSBKb2luIjogZnVuY3Rp b24oZGF0YSkgeworICBzd2l0Y2goZGF0YVsnSm9pbiBUeXBlJ10pIHsKKyAg ICBjYXNlICdBbnRpJzogcmV0dXJuIHsiaW1hZ2UiOiJleF9tZXJnZV9hbnRp X2pvaW4ucG5nIiwiaW1hZ2VfdGV4dCI6Ik1lcmdlIEFudGkgSm9pbiJ9Owor ICAgIGNhc2UgJ1NlbWknOiByZXR1cm4geyJpbWFnZSI6ImV4X21lcmdlX3Nl bWlfam9pbi5wbmciLCJpbWFnZV90ZXh0IjoiTWVyZ2UgU2VtaSBKb2luIn07 CisgICAgZGVmYXVsdDogcmV0dXJuIHsiaW1hZ2UiOiJleF9tZXJnZS5wbmci LCJpbWFnZV90ZXh0IjpTdHJpbmcoIk1lcmdlICIgKyBkYXRhWydKb2luIFR5 cGUnXSArICIgSm9pbiIgKX07CisgIH0KK30sCisiTW9kaWZ5VGFibGUiIDog ZnVuY3Rpb24oZGF0YSkgeworICBzd2l0Y2ggKGRhdGFbJ09wZXJhdG9uJ10p IHsKKyAgICBjYXNlICJpbnNlcnQiOiByZXR1cm4geyAiaW1hZ2UiOiJleF9p bnNlcnQucG5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1h Z2VfdGV4dCI6Ikluc2VydCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IH07CisgICAgY2FzZSAidXBkYXRlIjogcmV0dXJuIHsiaW1hZ2UiOiJleF91 cGRhdGUucG5nIiwiaW1hZ2VfdGV4dCI6IlVwZGF0ZSJ9OworICAgIGNhc2Ug IkRlbGV0ZSI6IHJldHVybiB7ImltYWdlIjoiZXhfZGVsZXRlLnBuZyIsImlt YWdlX3RleHQiOiJEZWxldGUifTsKKyAgfQorfSwKKydOZXN0ZWQgTG9vcCcg OiBmdW5jdGlvbihkYXRhKSB7CisgIHN3aXRjaChkYXRhWydKb2luIFR5cGUn XSkgeworICAgIGNhc2UgJ0FudGknOiByZXR1cm4geyJpbWFnZSI6ImV4X25l c3RlZF9sb29wX2FudGlfam9pbi5wbmciLCJpbWFnZV90ZXh0IjoiTmVzdGVk IExvb3AgQW50aSBKb2luIn07CisgICAgY2FzZSAnU2VtaSc6IHJldHVybiB7 ImltYWdlIjoiZXhfbmVzdGVkX2xvb3Bfc2VtaV9qb2luLnBuZyIsImltYWdl X3RleHQiOiJOZXN0ZWQgTG9vcCBTZW1pIEpvaW4ifTsKKyAgICBkZWZhdWx0 OiByZXR1cm4geyJpbWFnZSI6ImV4X25lc3RlZC5wbmciLCJpbWFnZV90ZXh0 IjoiTmVzdGVkIExvb3AgIiArIGRhdGFbJ0pvaW4gVHlwZSddICsgIiBKb2lu In07CisgIH0KK30sCisiUmVjdXJzaXZlIFVuaW9uIiA6IHsiaW1hZ2UiOiJl eF9yZWN1cnNpdmVfdW5pb24ucG5nIiwiaW1hZ2VfdGV4dCI6IlJlY3Vyc2l2 ZSBVbmlvbiJ9LAorIlJlc3VsdCIgOiB7ImltYWdlIjoiZXhfcmVzdWx0LnBu ZyIsImltYWdlX3RleHQiOiJSZXN1bHQifSwKKyJTYW1wbGUgU2NhbiIgOiB7 ImltYWdlIjoiZXhfc2Nhbi5wbmciLCJpbWFnZV90ZXh0IjoiU2FtcGxlIFNj YW4ifSwKKyJTY2FuIiA6IHsiaW1hZ2UiOiJleF9zY2FuLnBuZyIsImltYWdl X3RleHQiOiJTY2FuIn0sCisiU2VlayIgOiB7ImltYWdlIjoiZXhfc2Vlay5w bmciLCJpbWFnZV90ZXh0IjoiU2VlayJ9LAorIlNldE9wIiA6IGZ1bmN0aW9u KGRhdGEpIHsKKyAgdmFyIHN0cmF0ZWd5ID0gZGF0YVsnU3RyYXRlZ3knXSwK KyAgICAgIGNvbW1hbmQgPSBkYXRhWydDb21tYW5kJ107CisKKyAgaWYoc3Ry YXRlZ3kgPT0gIkhhc2hlZCIpIHsKKyAgICBpZihjb21tYW5kLnN0YXJ0c1dp dGgoIkludGVyc2VjdCIpKSB7CisgICAgICBpZihjb21tYW5kID09ICJJbnRl cnNlY3QgQWxsIikKKyAgICAgICAgcmV0dXJuIHsiaW1hZ2UiOiJleF9oYXNo X3NldG9wX2ludGVyc2VjdF9hbGwucG5nIiwiaW1hZ2VfdGV4dCI6Ikhhc2hl ZCBJbnRlcnNlY3QgQWxsIn07CisgICAgICByZXR1cm4geyJpbWFnZSI6ImV4 X2hhc2hfc2V0b3BfaW50ZXJzZWN0LnBuZyIsImltYWdlX3RleHQiOiJIYXNo ZWQgSW50ZXJzZWN0In07CisgICAgfQorICAgIGVsc2UgaWYgKGNvbW1hbmQu c3RhcnRzV2l0aCgiRXhjZXB0IikpIHsKKyAgICAgIGlmKGNvbW1hbmQgPT0g IkV4Y2VwdCBBbGwiKQorICAgICAgICByZXR1cm4geyJpbWFnZSI6ImV4X2hh c2hfc2V0b3BfZXhjZXB0X2FsbC5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaGVk IEV4Y2VwdCBBbGwifTsKKyAgICAgIHJldHVybiB7ImltYWdlIjoiZXhfaGFz aF9zZXRvcF9leGNlcHQucG5nIiwiaW1hZ2VfdGV4dCI6Ikhhc2ggRXhjZXB0 In07CisgICAgfQorICAgIHJldHVybiB7ImltYWdlIjoiZXhfaGFzaF9zZXRv cF91bmtub3duLnBuZyIsImltYWdlX3RleHQiOiJIYXNoZWQgU2V0T3AgVW5r bm93biJ9OworICB9CisgIHJldHVybiB7ImltYWdlIjoiZXhfc2V0b3AucG5n IiwiaW1hZ2VfdGV4dCI6IlNldE9wIn07Cit9LAorIlNlcSBTY2FuIjogZnVu Y3Rpb24oZGF0YSkgeworICByZXR1cm4geyJpbWFnZSI6ImV4X3NjYW4ucG5n IiwiaW1hZ2VfdGV4dCI6ZGF0YVsnUmVsYXRpb24gTmFtZSddfTsKK30sCisi U3VicXVlcnkgU2NhbiIgOiB7ImltYWdlIjoiZXhfc3VicGxhbi5wbmciLCJp bWFnZV90ZXh0IjoiU3ViUXVlcnkgU2NhbiJ9LAorIlNvcnQiIDogeyJpbWFn ZSI6ImV4X3NvcnQucG5nIiwiaW1hZ2VfdGV4dCI6IlNvcnQifSwKKyJUaWQg U2NhbiIgOiB7ImltYWdlIjoiZXhfdGlkX3NjYW4ucG5nIiwiaW1hZ2VfdGV4 dCI6IlRpZCBTY2FuIn0sCisiVW5pcXVlIiA6IHsiaW1hZ2UiOiJleF91bmlx dWUucG5nIiwiaW1hZ2VfdGV4dCI6IlVuaXF1ZSJ9LAorIlZhbHVlcyBTY2Fu IiA6IHsiaW1hZ2UiOiJleF92YWx1ZXNfc2Nhbi5wbmciLCJpbWFnZV90ZXh0 IjoiVmFsdWVzIFNjYW4ifSwKKyJXaW5kb3dBZ2ciIDogeyJpbWFnZSI6ImV4 X3dpbmRvd19hZ2dyZWdhdGUucG5nIiwiaW1hZ2VfdGV4dCI6IldpbmRvdyBB Z2dyZWdhdGUifSwKKyJXb3JrVGFibGUgU2NhbiIgOiB7ImltYWdlIjoiZXhf d29ya3RhYmxlX3NjYW4ucG5nIiwiaW1hZ2VfdGV4dCI6IldvcmtUYWJsZSBT Y2FuIn0sCisiVW5kZWZpbmVkIiA6IHsiaW1hZ2UiOiJleF91bmtub3duLnBu ZyIsImltYWdlX3RleHQiOiJVbmRlZmluZWQifSwKK30KKworLy8gU29tZSBw cmVkZWZpbmVkIGNvbnN0YW50cyB1c2VkIHRvIGNhbGN1bGF0ZSBpbWFnZSBs b2NhdGlvbiBhbmQgaXRzIGJvcmRlcgordmFyIHBXSURUSCA9IHBIRUlHSFQg PSAxMDAuCisgICAgSU1BR0VfV0lEVEggPSBJTUFHRV9IRUlHSFQgPSA1MDsK K3ZhciBvZmZzZXRYID0gMjAwLAorICAgIG9mZnNldFkgPSA2MDsKK3ZhciBB UlJPV19XSURUSCA9IDEwLAorICAgIEFSUk9XX0hFSUdIVCA9IDEwOwordmFy IFRYVF9BTExJR04gPSA1LAorICAgIFRYVF9TSVpFID0gIjE1cHgiOwordmFy IFRPVEFMX1dJRFRIID0gdW5kZWZpbmVkLAorICAgIFRPVEFMX0hFSUdIVCA9 IHVuZGVmaW5lZDsKK3ZhciB4TWFyZ2luID0gMjUsCisgICAgeU1hcmdpbiA9 IDI1OworCisvLyBCYWNrYm9uZSBtb2RlbCBmb3IgZWFjaCBwbGFuIHByb3Bl cnR5IG9mIGlucHV0IEpTT04gb2JqZWN0Cit2YXIgUGxhbk1vZGVsID0gQmFj a2JvbmUuTW9kZWwuZXh0ZW5kKHsKKyAgICBkZWZhdWx0czogeworICAgICAg ICAiTm9kZSBUeXBlIjogdW5kZWZpbmVkLAorICAgICAgICAiU3RhcnR1cCBD b3N0IjogdW5kZWZpbmVkLAorICAgICAgICAiVG90YWwgQ29zdCI6IHVuZGVm aW5lZCwKKyAgICAgICAgIlBsYW4gUm93cyI6IHVuZGVmaW5lZCwKKyAgICAg ICAgIlBsYW4gV2lkdGgiOiB1bmRlZmluZWQsCisgICAgICAgICJQbGFucyI6 IFtdLAorICAgICAgICBsZXZlbDogW10sCisgICAgICAgICJpbWFnZSI6IHVu ZGVmaW5lZCwKKyAgICAgICAgImltYWdlX3RleHQiOiB1bmRlZmluZWQsCisg ICAgICAgIHhwb3M6IHVuZGVmaW5lZCwKKyAgICAgICAgeXBvczogdW5kZWZp bmVkLAorICAgICAgICB3aWR0aDogcFdJRFRILAorICAgICAgICBoZWlnaHQ6 IHBIRUlHSFQKKyAgICB9LAorICAgIHBhcnNlOiBmdW5jdGlvbihkYXRhKSB7 CisgICAgICAgIHZhciBpZHggPSAxLAorICAgICAgICAgICAgbHZsID0gZGF0 YS5sZXZlbCA9IGRhdGEubGV2ZWwgfHwgW2lkeF0sCisgICAgICAgICAgICBw bGFucyA9IFtdLAorICAgICAgICAgICAgbm9kZV90eXBlID0gZGF0YVsnTm9k ZSBUeXBlJ10sCisgICAgICAgICAgICAvLyBDYWxjdWxhdGluZyByZWxhdGl2 ZSB4cG9zIG9mIGN1cnJlbnQgbm9kZSBmcm9tIHRvcCBub2RlCisgICAgICAg ICAgICB4cG9zID0gZGF0YS54cG9zID0gZGF0YS54cG9zIC0gcFdJRFRILAor ICAgICAgICAgICAgLy8gQ2FsY3VsYXRpbmcgcmVsYXRpdmUgeXBvcyBvZiBj dXJyZW50IG5vZGUgZnJvbSB0b3Agbm9kZQorICAgICAgICAgICAgeXBvcyA9 IGRhdGEueXBvcywKKyAgICAgICAgICAgIG1heENoaWxkV2lkdGggPSAwOwor CisgICAgICAgIGRhdGFbJ3dpZHRoJ10gPSBwV0lEVEg7CisgICAgICAgIGRh dGFbJ2hlaWdodCddID0gcEhFSUdIVDsKKworICAgICAgICAvKgorICAgICAg ICAgKiBjYWxjdWxhdGluZyB4cG9zLCB5cG9zLCB3aWR0aCBhbmQgaGVpZ2h0 IGlmIGN1cnJlbnQgbm9kZSBpcyBhIHN1YnBsYW4KKyAgICAgICAgICovCisg ICAgICAgIGlmIChkYXRhWydQYXJlbnQgUmVsYXRpb25zaGlwJ10gPT09ICJT dWJQbGFuIikgeworICAgICAgICAgICAgZGF0YVsnd2lkdGgnXSArPSAoeE1h cmdpbiAqIDIpICsgKHhNYXJnaW4gLyAyKTsKKyAgICAgICAgICAgIGRhdGFb J2hlaWdodCddICs9ICh5TWFyZ2luICogMik7CisgICAgICAgICAgICBkYXRh Wyd5cG9zJ10gKz0geU1hcmdpbjsKKyAgICAgICAgICAgIHhwb3MgLT0geE1h cmdpbjsKKyAgICAgICAgICAgIHlwb3MgKz0geU1hcmdpbjsKKyAgICAgICAg fQorCisgICAgICAgIGlmKG5vZGVfdHlwZS5zdGFydHNXaXRoKCIoc2xpY2Ui KSkKKyAgICAgICAgICAgIG5vZGVfdHlwZSA9IG5vZGVfdHlwZS5zdWJzdHJp bmcoMCw3KTsKKworICAgICAgICAvLyBHZXQgdGhlIGltYWdlIGluZm9ybWF0 aW9uIGZvciBjdXJyZW50IG5vZGUKKyAgICAgICAgdmFyIG1hcHBlck9iaiA9 IChfLmlzRnVuY3Rpb24oaW1hZ2VNYXBwZXJbbm9kZV90eXBlXSkgJiYKKyAg ICAgICAgICAgICAgICBpbWFnZU1hcHBlcltub2RlX3R5cGVdLmFwcGx5KHVu ZGVmaW5lZCwgW2RhdGFdKSkgfHwKKyAgICAgICAgICAgICAgICBpbWFnZU1h cHBlcltub2RlX3R5cGVdIHx8ICdVbmRlZmluZWQnOworCisgICAgICAgIGRh dGFbImltYWdlIl0gPSBtYXBwZXJPYmpbImltYWdlIl07CisgICAgICAgIGRh dGFbImltYWdlX3RleHQiXSA9IG1hcHBlck9ialsiaW1hZ2VfdGV4dCJdOwor CisgICAgICAgIC8vIFN0YXJ0IGNhbGN1bGF0aW5nIHhwb3MsIHlwb3MsIHdp ZHRoIGFuZCBoZWlnaHQgZm9yIGNoaWxkIHBsYW5zIGlmIGFueQorICAgICAg ICBpZiAoJ1BsYW5zJyBpbiBkYXRhKSB7CisKKyAgICAgICAgICAgIGRhdGFb J3dpZHRoJ10gKz0gb2Zmc2V0WDsKKworICAgICAgICAgICAgXy5lYWNoKGRh dGFbJ1BsYW5zJ10sIGZ1bmN0aW9uKHApIHsKKyAgICAgICAgICAgICAgICB2 YXIgbGV2ZWwgPSBfLmNsb25lKGx2bCksCisgICAgICAgICAgICAgICAgICAg IHBsYW4gPSBuZXcgUGxhbk1vZGVsKCk7CisKKyAgICAgICAgICAgICAgICBs ZXZlbC5wdXNoKGlkeCk7CisgICAgICAgICAgICAgICAgcGxhbi5zZXQocGxh bi5wYXJzZShfLmV4dGVuZCgKKyAgICAgICAgICAgICAgICAgICAgcCwgewor ICAgICAgICAgICAgICAgICAgICAgICAgImxldmVsIjogbGV2ZWwsCisgICAg ICAgICAgICAgICAgICAgICAgICB4cG9zOiB4cG9zIC0gb2Zmc2V0WCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHlwb3M6IHlwb3MKKyAgICAgICAgICAg ICAgICAgICAgfSkpKTsKKworICAgICAgICAgICAgICAgIGlmIChtYXhDaGls ZFdpZHRoIDwgcGxhbi5nZXQoJ3dpZHRoJykpIHsKKyAgICAgICAgICAgICAg ICAgICAgbWF4Q2hpbGRXaWR0aCA9IHBsYW4uZ2V0KCd3aWR0aCcpOworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBjaGlsZEhl aWdodCA9IHBsYW4uZ2V0KCdoZWlnaHQnKTsKKworICAgICAgICAgICAgICAg IGlmIChpZHggIT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsn aGVpZ2h0J10gPSBkYXRhWydoZWlnaHQnXSArIGNoaWxkSGVpZ2h0ICsgb2Zm c2V0WTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSGVpZ2h0 ID4gZGF0YVsnaGVpZ2h0J10pIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0 YVsnaGVpZ2h0J10gPSBjaGlsZEhlaWdodDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgeXBvcyArPSBjaGlsZEhlaWdodCArIG9mZnNl dFk7CisKKyAgICAgICAgICAgICAgICBwbGFucy5wdXNoKHBsYW4pOworICAg ICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgfSk7CisgICAgICAg IH0KKworICAgICAgICAvLyBGaW5hbCBXaWR0aCBhbmQgSGVpZ2h0IG9mIGN1 cnJlbnQgbm9kZQorICAgICAgICBkYXRhWyd3aWR0aCddICs9IG1heENoaWxk V2lkdGg7CisgICAgICAgIGRhdGFbJ1BsYW5zJ10gPSBwbGFuczsKKworICAg ICAgICByZXR1cm4gZGF0YTsKKyAgICB9LAorCisgICAgLyoKKyAgICAgKiBS ZXF1aXJlZCB0byBwYXJzZSBhbmQgaW5jbHVkZSBub24tZGVmYXVsdCBwYXJh bXMgb2YKKyAgICAgKiBwbGFuIGludG8gYmFja2JvbmUgbW9kZWwKKyAgICAg Ki8KKyAgICB0b0pTT046IGZ1bmN0aW9uKG5vbl9yZWN1cnNpdmUpIHsKKyAg ICAgIHZhciByZXMgPSBCYWNrYm9uZS5Nb2RlbC5wcm90b3R5cGUudG9KU09O LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAgIGlmIChub25fcmVj dXJzaXZlKSB7CisgICAgICAgICAgICBkZWxldGUgcmVzWydQbGFucyddOwor ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwbGFucyA9IFtdOwor ICAgICAgICAgICAgXy5lYWNoKHJlc1snUGxhbnMnXSwgZnVuY3Rpb24ocCkg eworICAgICAgICAgICAgICBwbGFucy5wdXNoKHAudG9KU09OKCkpOworICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICByZXNbJ1BsYW5zJ10gPSBwbGFu czsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZXM7CisgICAgfSwKKworICAg IC8vIERyYXcgYW4gYXJyb3cgdG8gcGFyZW50IG5vZGUKKyAgICBkcmF3UG9s eUxpbmU6IGZ1bmN0aW9uKGcsIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZ LCBvcHRzLCBhcnJvd09wdHMpIHsKKyAgICAgIC8vIENhbGN1bGF0ZSBlbmQg cG9pbnQgb2YgZmlyc3Qgc3RhcnRpbmcgc3RyYWlnaHQgbGluZSAoc3RhcnR4 MSwgc3RhcnR5MSkKKyAgICAgIC8vIENhbGN1bGF0ZSBzdGFydCBwb2ludCBv ZiAybmQgc3RyYWlnaHQgbGluZSAoZW5keDEsIGVuZHkxKQorICAgICAgdmFy IG1pZFgxID0gc3RhcnRYICsgKChlbmRYIC0gc3RhcnRYKSAvIDMpLAorICAg ICAgICAgIG1pZFgyID0gc3RhcnRYICsgKDIgKiAoKGVuZFggLSBzdGFydFgp IC8gMykpOworCisgICAgICAvL2NyZWF0ZSBhcnJvdyBoZWFkCisgICAgICB2 YXIgYXJyb3cgPSBnLnBvbHlnb24oCisgICAgICAgICAgICAgICAgICAgIFsw LCBBUlJPV19IRUlHSFQsCisgICAgICAgICAgICAgICAgICAgIChBUlJPV19X SURUSCAvIDIpLEFSUk9XX0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAg KEFSUk9XX0hFSUdIVCAvIDQpLCAwLAorICAgICAgICAgICAgICAgICAgICAw LCBBUlJPV19XSURUSF0KKyAgICAgICAgICAgICAgICAgICAgKS50cmFuc2Zv cm0oInI5MCIpOworICAgICAgdmFyIG1hcmtlciA9IGFycm93Lm1hcmtlcigK KyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBBUlJPV19XSURUSCwg QVJST1dfSEVJR0hULCAwLCAoQVJST1dfV0lEVEggLyAyKQorICAgICAgICAg ICAgICAgICAgICAgICAgICkuYXR0cihhcnJvd09wdHMpOworCisgICAgICAv LyBGaXJzdCBzdHJhaWdodCBsaW5lCisgICAgICBnLmxpbmUoCisgICAgICAg IHN0YXJ0WCwgc3RhcnRZLCBtaWRYMSwgc3RhcnRZCisgICAgICAgICkuYXR0 cihvcHRzKTsKKworICAgICAgLy8gRGlhZ29uYWwgbGluZQorICAgICAgZy5s aW5lKAorICAgICAgICBtaWRYMS0xLCBzdGFydFkrMSwgbWlkWDIrMSwgZW5k WQorICAgICAgICApLmF0dHIob3B0cyk7CisKKyAgICAgIC8vIExhc3Qgc3Ry YWlnaHQgbGluZQorICAgICAgdmFyIGxpbmUgPSBnLmxpbmUoCisgICAgICAg ICAgICAgICAgICAgbWlkWDIsIGVuZFksIGVuZFgsIGVuZFkKKyAgICAgICAg ICAgICAgICAgICApLmF0dHIob3B0cyk7CisgICAgICBsaW5lLmF0dHIoe21h cmtlckVuZDogbWFya2VyfSkKKyAgICB9LAorCisgICAgLy8gRHJhdyBpbWFn ZSwgaXRzIG5hbWUgYW5kIGl0cyB0b29sdGlwCisgICAgZHJhdzogZnVuY3Rp b24ocywgeHBvcywgeXBvcywgcFhwb3MsIHBZcG9zLCBncmFwaENvbnRhaW5l ciwgdG9vbFRpcENvbnRhaW5lcikgeworICAgICAgICB2YXIgZyA9IHMuZygp OworICAgICAgICB2YXIgdG9vbFRpcFRhYmxlID0ge307CisgICAgICAgIHZh ciBjdXJyZW50WHBvcyA9IHhwb3MgKyB0aGlzLmdldCgneHBvcycpICwKKyAg ICAgICAgICAgIGN1cnJlbnRZcG9zID0geXBvcyArIHRoaXMuZ2V0KCd5cG9z JyksCisgICAgICAgICAgICBpc1N1YlBsYW4gPSAodGhpcy5nZXQoJ1BhcmVu dCBSZWxhdGlvbnNoaXAnKSA9PT0gIlN1YlBsYW4iKTsKKworICAgICAgICAv LyBEcmF3IHRoZSBzdWJwbGFuIHJlY3RhbmdsZQorICAgICAgICBpZiAoaXNT dWJQbGFuKSB7CisgICAgICAgICAgZy5yZWN0KAorICAgICAgICAgICAgY3Vy cmVudFhwb3MgLSB0aGlzLmdldCgnd2lkdGgnKSArIHBXSURUSCArIHhNYXJn aW4sCisgICAgICAgICAgICBjdXJyZW50WXBvcyAtIHlNYXJnaW4sCisgICAg ICAgICAgICB0aGlzLmdldCgnd2lkdGgnKSAtIHhNYXJnaW4sCisgICAgICAg ICAgICB0aGlzLmdldCgnaGVpZ2h0JyksIDUKKyAgICAgICAgICApLmF0dHIo eworICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JywKKyAgICAgICAg ICAgICAgJ3N0cm9rZVdpZHRoJzogMS4yLAorICAgICAgICAgICAgICBmaWxs OiAnZ3JheScsCisgICAgICAgICAgICAgIGZpbGxPcGFjaXR5OiAwLjIKKyAg ICAgICAgICB9KTsKKworICAgICAgICAgIC8vcHJvdmlkZSBzdWJwbGFuIG5h bWUKKyAgICAgICAgICB2YXIgdGV4dCA9IGcudGV4dCgKKyAgICAgICAgICAg IGN1cnJlbnRYcG9zICArIHBXSURUSCAtICggdGhpcy5nZXQoJ3dpZHRoJykg LyAyKSAtIHhNYXJnaW4sCisgICAgICAgICAgICBjdXJyZW50WXBvcyArIHBI RUlHSFQgIC0gKHRoaXMuZ2V0KCdoZWlnaHQnKSAvIDIpIC0geU1hcmdpbiwK KyAgICAgICAgICAgIHRoaXMuZ2V0KCdTdWJwbGFuIE5hbWUnKQorICAgICAg ICAgICkuYXR0cih7CisgICAgICAgICAgICBmb250U2l6ZTogVFhUX1NJWkUs ICJ0ZXh0LWFuY2hvciI6InN0YXJ0IiwKKyAgICAgICAgICAgIGZpbGw6ICdy ZWQnCisgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBE cmF3IHRoZSBhY3R1YWwgaW1hZ2UgZm9yIGN1cnJlbnQgbm9kZQorICAgICAg ICB2YXIgaW1hZ2UgPSBnLmltYWdlKAorICAgICAgICAgICAgcGdFeHBsYWlu LnByZWZpeCArIHRoaXMuZ2V0KCdpbWFnZScpLAorICAgICAgICAgICAgY3Vy cmVudFhwb3MgKyAocFdJRFRIIC0gSU1BR0VfV0lEVEgpIC8gMiwKKyAgICAg ICAgICAgIGN1cnJlbnRZcG9zICsgKHBIRUlHSFQgLSBJTUFHRV9IRUlHSFQp IC8gMiwKKyAgICAgICAgICAgIElNQUdFX1dJRFRILAorICAgICAgICAgICAg SU1BR0VfSEVJR0hUCisgICAgICAgICk7CisKKyAgICAgICAgLy8gRHJhdyB0 b29sdGlwCisgICAgICAgIHZhciBpbWFnZV9kYXRhID0gdGhpcy50b0pTT04o KTsKKyAgICAgICAgaW1hZ2UubW91c2VvdmVyKGZ1bmN0aW9uKGV2dCl7CisK KyAgICAgICAgICAvLyBFbXB0eSB0aGUgdG9vbHRpcCBjb250ZW50IGlmIGl0 IGhhcyBhbnkgYW5kIGFkZCBuZXcgZGF0YQorICAgICAgICAgIHRvb2xUaXBD b250YWluZXIuZW1wdHkoKTsKKyAgICAgICAgICB2YXIgdG9vbHRpcCA9ICQo Jzx0YWJsZT48L3RhYmxlPicsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiAicGdh ZG1pbi10b29sdGlwLXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3R5bGU6ICJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBib3Jk ZXItc3BhY2luZzogMXB4OyB0b3A6IGF1dG87IGxlZnQ6IGF1dG87IgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICkuYXBwZW5kVG8odG9vbFRpcENvbnRhaW5lcik7CisgICAgICAg ICAgXy5lYWNoKGltYWdlX2RhdGEsIGZ1bmN0aW9uKHZhbHVlLGtleSkgewor ICAgICAgICAgICAgaWYoa2V5ICE9PSAnaW1hZ2UnICYmIGtleSAhPT0gJ1Bs YW5zJyAmJgorICAgICAgICAgICAgICAga2V5ICE9PSAnbGV2ZWwnICYmIGtl eSAhPT0gJ2ltYWdlJyAmJgorICAgICAgICAgICAgICAga2V5ICE9PSAnaW1h Z2VfdGV4dCcgJiYga2V5ICE9PSAneHBvcycgJiYKKyAgICAgICAgICAgICAg IGtleSAhPT0gJ3lwb3MnICYmIGtleSAhPT0gJ3dpZHRoJyAmJgorICAgICAg ICAgICAgICAga2V5ICE9PSAnaGVpZ2h0JykgeworICAgICAgICAgICAgICB0 b29sdGlwLmFwcGVuZCggJzx0cj48dGQgY2xhc3M9ImxhYmVsIj4nICsga2V5 ICsgJzwvdGQ+PHRkIGNsYXNzPSJsYWJlbCI+JyArIHZhbHVlICsgJzwvdGQ+ PC90cj4nICk7CisgICAgICAgICAgICB9OworICAgICAgICAgIH0pOworCisg ICAgICAgICAgdmFyIHpvb21GYWN0b3IgPSBncmFwaENvbnRhaW5lci5kYXRh KCd6b29tLWZhY3RvcicpOworCisgICAgICAgICAgLy8gQ2FsY3VsYXRlIGNv LW9yZGluYXRlcyBmb3IgdG9vbHRpcAorICAgICAgICAgIHZhciB0b29sVGlw WCA9ICgoY3VycmVudFhwb3MgKyBwV0lEVEgpKnpvb21GYWN0b3IgLSBncmFw aENvbnRhaW5lci5zY3JvbGxMZWZ0KCkpOworICAgICAgICAgIHZhciB0b29s VGlwWSA9ICgoY3VycmVudFlwb3MgKyBwSEVJR0hUKSp6b29tRmFjdG9yIC0g Z3JhcGhDb250YWluZXIuc2Nyb2xsVG9wKCkpOworCisgICAgICAgICAgLy8g UmVjYWxjdWxhdGUgeC55IGlmIHRvb2x0aXAgaXMgZ29pbmcgb3V0IG9mIHNj cmVlbgorICAgICAgICAgIGlmKGRvY3VtZW50LmNoaWxkcmVuWzBdLmNsaWVu dFdpZHRoIDwgKHRvb2xUaXBYICsgdG9vbFRpcENvbnRhaW5lclswXS5jbGll bnRXaWR0aCkpCisgICAgICAgICAgICB0b29sVGlwWCAtPSAodG9vbFRpcENv bnRhaW5lclswXS5jbGllbnRXaWR0aCArIChwV0lEVEgqem9vbUZhY3Rvcikp OworICAgICAgICAgIGlmKGRvY3VtZW50LmNoaWxkcmVuWzBdLmNsaWVudEhl aWdodCA8ICh0b29sVGlwWSArIHRvb2xUaXBDb250YWluZXJbMF0uY2xpZW50 SGVpZ2h0KSkKKyAgICAgICAgICAgIHRvb2xUaXBZIC09ICh0b29sVGlwQ29u dGFpbmVyWzBdLmNsaWVudEhlaWdodCArICgocEhFSUdIVC8yKSp6b29tRmFj dG9yKSk7CisKKyAgICAgICAgICB0b29sVGlwWCA9IHRvb2xUaXBYIDwgMCA/ IDAgOiAodG9vbFRpcFgpOworICAgICAgICAgIHRvb2xUaXBZID0gdG9vbFRp cFkgPCAwID8gMCA6ICh0b29sVGlwWSk7CisKKyAgICAgICAgICAvLyBTaG93 IHRvb2xUaXAgYXQgcmVzcGVjdGl2ZSB4LHkgY29vcmRpbmF0ZXMKKyAgICAg ICAgICB0b29sVGlwQ29udGFpbmVyLmNzcyh7J29wYWNpdHknOiAnMC44J30p OworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuY3NzKCdsZWZ0JywgdG9v bFRpcFgpOworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuY3NzKCAndG9w JywgdG9vbFRpcFkpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBSZW1v dmUgdG9vbHRpcCB3aGVuIG1vdXNlIGlzIG91dCBmcm9tIG5vZGUncyBhcmVh CisgICAgICAgIGltYWdlLm1vdXNlb3V0KGZ1bmN0aW9uKCkgeworICAgICAg ICAgIHRvb2xUaXBDb250YWluZXIuZW1wdHkoKTsKKyAgICAgICAgICB0b29s VGlwQ29udGFpbmVyLmNzcyh7J29wYWNpdHknOiAnMCd9KTsKKyAgICAgICAg ICB0b29sVGlwQ29udGFpbmVyLmNzcygnbGVmdCcsIDApOworICAgICAgICAg IHRvb2xUaXBDb250YWluZXIuY3NzKCAndG9wJywgMCk7CisgICAgICAgIH0p OworCisgICAgICAgIC8vIERyYXcgdGV4dCBiZWxvdyB0aGUgbm9kZQorICAg ICAgICB2YXIgbGFiZWwgPSBnLmcoKTsKKyAgICAgICAgZy5tdWx0aXRleHQo CisgICAgICAgICAgY3VycmVudFhwb3MgKyAocFdJRFRIIC8gMiksCisgICAg ICAgICAgY3VycmVudFlwb3MgKyBwSEVJR0hUIC0gVFhUX0FMTElHTiwKKyAg ICAgICAgICB0aGlzLmdldCgnaW1hZ2VfdGV4dCcpLAorICAgICAgICAgIDE1 MCwKKyAgICAgICAgICB7ImZvbnQtc2l6ZSI6IFRYVF9TSVpFICwidGV4dC1h bmNob3IiOiJtaWRkbGUifQorICAgICAgICApOworCisgICAgICAgIC8vIERy YXcgQXJyb3cgdG8gcGFyZW50IG9ubHkgaXRzIG5vdCB0aGUgZmlyc3Qgbm9k ZQorICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQocFlwb3MpKSB7CisgICAg ICAgICAgICB2YXIgc3RhcnR4ID0gY3VycmVudFhwb3MgKyBwV0lEVEg7Cisg ICAgICAgICAgICB2YXIgc3RhcnR5ID0gY3VycmVudFlwb3MgKyAocEhFSUdI VCAvIDIpOworICAgICAgICAgICAgdmFyIGVuZHggPSBwWHBvcyAtIEFSUk9X X1dJRFRIOworICAgICAgICAgICAgdmFyIGVuZHkgPSBwWXBvcyArIChwSEVJ R0hUIC8gMik7CisgICAgICAgICAgICB2YXIgc3RhcnRfY29zdCA9IHRoaXMu Z2V0KCJTdGFydHVwIENvc3QiKSwKKyAgICAgICAgICAgICAgICB0b3RhbF9j b3N0ID0gdGhpcy5nZXQoIlRvdGFsIENvc3QiKTsKKworICAgICAgICAgICAg Ly8gQ2FsY3VsYXRlIGFycm93IHdpZHRoIGFjY29yZGluZyB0byBjb3N0IG9m IGEgcGFydGljdWxhciBwbGFuCisgICAgICAgICAgICB2YXIgYXJyb3dfc2l6 ZSA9IE1hdGgucm91bmQoTWF0aC5sb2coKHN0YXJ0X2Nvc3QrdG90YWxfY29z dCkvMiArIHN0YXJ0X2Nvc3QpKTsKKyAgICAgICAgICAgIGFycm93X3NpemUg PSBhcnJvd19zaXplIDwgMSA/IDEgOiBhcnJvd19zaXplID4gMTAgPyAxMCA6 IGFycm93X3NpemU7CisKKyAgICAgICAgICAgIHZhciBhcnJvd192aWV3X2Jv eCA9IFswLCAwLCAyKkFSUk9XX1dJRFRILCAyKkFSUk9XX0hFSUdIVF07Cisg ICAgICAgICAgICB2YXIgb3B0cyA9IHtzdHJva2U6ICIjMDAwMDAwIiwgc3Ry b2tlV2lkdGg6IGFycm93X3NpemUgKyAxfSwKKyAgICAgICAgICAgICAgICBz dWJwbGFuT3B0cyA9IHtzdHJva2U6ICIjODY2NDg2Iiwgc3Ryb2tlV2lkdGg6 IGFycm93X3NpemUgKyAxfSwKKyAgICAgICAgICAgICAgICBhcnJvd09wdHMg PSB7dmlld0JveDogYXJyb3dfdmlld19ib3guam9pbigiICIpfTsKKworICAg ICAgICAgICAgLy8gRHJhdyBhbiBhcnJvdyBmcm9tIGN1cnJlbnQgbm9kZSB0 byBpdHMgcGFyZW50CisgICAgICAgICAgICB0aGlzLmRyYXdQb2x5TGluZSgK KyAgICAgICAgICAgICAgZywgc3RhcnR4LCBzdGFydHksIGVuZHgsIGVuZHks CisgICAgICAgICAgICAgIGlzU3ViUGxhbiA/IHN1YnBsYW5PcHRzIDogb3B0 cywgYXJyb3dPcHRzCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAg ICAgICAgdmFyIHBsYW5zID0gdGhpcy5nZXQoJ1BsYW5zJyk7CisKKyAgICAg ICAgLy8gRHJhdyBub2RlcyBmb3IgY3VycmVudCBwbGFuJ3MgY2hpbGRyZW4K KyAgICAgICAgXy5lYWNoKHBsYW5zLCBmdW5jdGlvbihwKSB7CisgICAgICAg ICAgICBwLmRyYXcocywgeHBvcywgeXBvcywgY3VycmVudFhwb3MsIGN1cnJl bnRZcG9zLCBncmFwaENvbnRhaW5lciwgdG9vbFRpcENvbnRhaW5lcik7Cisg ICAgICAgIH0pOworICAgIH0KK30pOworCisvLyBNYWluIGJhY2tib25lIG1v ZGVsIHRvIHN0b3JlIEpTT04gb2JqZWN0Cit2YXIgTWFpblBsYW5Nb2RlbCA9 IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7CisgICAgZGVmYXVsdHM6IHsKKyAg ICAgICAgIlBsYW4iOiB1bmRlZmluZWQsCisgICAgICAgIHhwb3M6IDAsCisg ICAgICAgIHlwb3M6IDAsCisgICAgfSwKKyAgICBpbml0aWFsaXplOiBmdW5j dGlvbigpIHsKKyAgICAgICAgdGhpcy5zZXQoIlBsYW4iLCBuZXcgUGxhbk1v ZGVsKCkpOworICAgIH0sCisKKyAgICAvLyBQYXJzZSB0aGUgSlNPTiBkYXRh IGFuZCBmZXRjaCBpdHMgY2hpbGRyZW4gcGxhbnMKKyAgICBwYXJzZTogZnVu Y3Rpb24oZGF0YSkgeworICAgICAgIGlmIChkYXRhICYmICdQbGFuJyBpbiBk YXRhKSB7CisgICAgICAgICAgICB2YXIgcGxhbiA9IHRoaXMuZ2V0KCJQbGFu Iik7CisgICAgICAgICAgICBwbGFuLnNldCgKKyAgICAgICAgICAgICAgcGxh bi5wYXJzZSgKKyAgICAgICAgICAgICAgICBfLmV4dGVuZCgKKyAgICAgICAg ICAgICAgICAgIGRhdGFbJ1BsYW4nXSwgeworICAgICAgICAgICAgICAgICAg ICB4cG9zOiAwLAorICAgICAgICAgICAgICAgICAgICB5cG9zOiAwCisgICAg ICAgICAgICAgICAgICB9KSkpOworCisgICAgICAgICAgICBkYXRhWyd4cG9z J10gPSAwOworICAgICAgICAgICAgZGF0YVsneXBvcyddID0gMDsKKyAgICAg ICAgICAgIGRhdGFbJ3dpZHRoJ10gPSBwbGFuLmdldCgnd2lkdGgnKSArICh4 TWFyZ2luICogMik7CisgICAgICAgICAgICBkYXRhWydoZWlnaHQnXSA9IHBs YW4uZ2V0KCdoZWlnaHQnKSArICh5TWFyZ2luICogMik7CisKKyAgICAgICAg ICAgIGRlbGV0ZSBkYXRhWydQbGFuJ107CisgICAgICAgIH0KKworICAgICAg ICByZXR1cm4gZGF0YTsKKyAgICB9LAorICAgIHRvSlNPTjogZnVuY3Rpb24o KSB7CisgICAgICB2YXIgcmVzID0gQmFja2JvbmUuTW9kZWwucHJvdG90eXBl LnRvSlNPTi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCisgICAgICBpZiAo cmVzLlBsYW4pIHsKKyAgICAgICAgcmVzLlBsYW4gPSByZXMuUGxhbi50b0pT T04oKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJlczsKKyAgICB9LAor ICAgIGRyYXc6IGZ1bmN0aW9uKHMsIHhwb3MsIHlwb3MsIGdyYXBoQ29udGFp bmVyLCB0b29sVGlwQ29udGFpbmVyKSB7CisgICAgICAgIHZhciBnID0gcy5n KCk7CisKKyAgICAgICAgLy9kcmF3IHRoZSBib3JkZXIKKyAgICAgICAgZy5y ZWN0KAorCSAgICAgICAgMTAsIDEwLCB0aGlzLmdldCgnd2lkdGgnKSAtIDEw LCB0aGlzLmdldCgnaGVpZ2h0JykgLSAxMCwgNQorCSAgICApLmF0dHIoewor ICAgICAgICAgICAgc3Ryb2tlOiAnI0ZGRUJDRCcsICdzdHJva2VXaWR0aCc6 IDEuMiwKKyAgICAgICAgICAgIGZpbGw6ICcjRkZGOERDJywgZmlsbE9wYWNp dHk6IDAuNQorICAgICAgICB9KTsKKworICAgICAgICAvL0ZldGNoIHRvdGFs IHdpZHRoLCBoZWlnaHQKKyAgICAgICAgVE9UQUxfV0lEVEggPSB0aGlzLmdl dCgnd2lkdGgnKTsKKyAgICAgICAgVE9UQUxfSEVJR0hUID0gdGhpcy5nZXQo J2hlaWdodCcpOworICAgICAgICB2YXIgcGxhbiA9IHRoaXMuZ2V0KCdQbGFu Jyk7CisKKyAgICAgICAgLy9EcmF3IGV4cGxhaW4gZ3JhcGgKKyAgICAgICAg cGxhbi5kcmF3KGcsIHhwb3MsIHlwb3MsIHVuZGVmaW5lZCwgdW5kZWZpbmVk LCBncmFwaENvbnRhaW5lciwgdG9vbFRpcENvbnRhaW5lcik7CisgICAgfQor fSk7CisKKy8vIFBhcnNlIGFuZCBkcmF3IGZ1bGwgZ3JhcGhpY2FsIGV4cGxh aW4KK18uZXh0ZW5kKAorICAgIHBnRXhwbGFpbiwgeworICAgICAgICAvLyBB c3N1bXB0aW9uIGNvbnRhaW5lciBpcyBhIGpRdWVyeSBvYmplY3QKKyAgICAg ICAgRHJhd0pTT05QbGFuOiBmdW5jdGlvbihjb250YWluZXIsIHBsYW4pIHsK KyAgICAgICAgICB2YXIgbXlfcGxhbnMgPSBbXTsKKyAgICAgICAgICBjb250 YWluZXIuZW1wdHkoKTsKKyAgICAgICAgICB2YXIgY3Vycl96b29tX2ZhY3Rv ciA9IDEuMDsKKworICAgICAgICAgIHZhciB6b29tSW5CdG4gPSAkKCc8c3Bh bj48L3NwYW4+JywgeworICAgICAgICAgICAgICAgIGNsYXNzOiAnZXhwbGFp bi16b29tLWJ0biBleHBsYWluLXpvb20taW4gYmFkZ2UnLAorICAgICAgICAg ICAgICAgIHN0eWxlOiAncHVsbC1sZWZ0JworICAgICAgICAgICAgICAgIH0p LnRleHQoJysnKS5hcHBlbmRUbyhjb250YWluZXIpLAorICAgICAgICAgICAg ICB6b29tT3V0QnRuID0gJCgnPHNwYW4+PC9zcGFuPicsIHsKKyAgICAgICAg ICAgICAgICBjbGFzczogJ2V4cGxhaW4tem9vbS1idG4gZXhwbGFpbi16b29t LW91dCBiYWRnZScsCisgICAgICAgICAgICAgICAgc3R5bGU6ICdwdWxsLWxl ZnQnCisgICAgICAgICAgICAgICAgfSkudGV4dCgnLScpLmFwcGVuZFRvKGNv bnRhaW5lcik7CisKKyAgICAgICAgICAvLyBNYWluIGRpdiB0byBiZSBkcmF3 biBhbGwgaW1hZ2VzIG9uCisgICAgICAgICAgdmFyIHBsYW5EaXYgPSAkKCc8 ZGl2PjwvZGl2PicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xh c3M6ICJwZ2FkbWluLWV4cGxhaW4tY29udGFpbmVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0eWxlOiAib3ZlcmZsb3c6IGF1dG87IG1heC1o ZWlnaHQ6IDY1MHB4OyB3aWR0aDogOTklOyJ9CisgICAgICAgICAgICAgICAg ICAgICAgICAgKS5hcHBlbmRUbyhjb250YWluZXIpOworCisgICAgICAgICAg ICBwbGFuRGl2LmRhdGEoJ3pvb20tZmFjdG9yJywgY3Vycl96b29tX2ZhY3Rv cik7CisKKyAgICAgICAgICAvLyBEaXYgdG8gZHJhdyB0b29sLXRpcCBvbgor ICAgICAgICAgIHZhciB0b29sVGlwID0gJCgnPGRpdj48L2Rpdj4nLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAge2lkOiAidG9vbFRpcCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogInBnYWRtaW4tZXhwbGFp bi10b29sVGlwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl OiAicG9zaXRpb246IGFic29sdXRlO3BhZGRpbmc6NXB4OyBib3JkZXI6IDFw eCBzb2xpZCB3aGl0ZTtvcGFjaXR5OjA7Y29sb3I6IGNvcm5zaWxrO2JhY2tn cm91bmQtY29sb3I6ICMwMTAxMjU7IgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICkuYXBwZW5kVG8o Y29udGFpbmVyKTsKKyAgICAgICAgICB0b29sVGlwLmVtcHR5KCk7CisgICAg ICAgICAgdmFyIHcgPSAwLCBoID0gMCwKKyAgICAgICAgICAgICAgeCA9IHhN YXJnaW4sIGggPSB5TWFyZ2luOworCisgICAgICAgICAgXy5lYWNoKHBsYW4s IGZ1bmN0aW9uKHApIHsKKyAgICAgICAgICAgIHZhciBtYWluX3BsYW4gPSBu ZXcgTWFpblBsYW5Nb2RlbCgpOworCisgICAgICAgICAgICAvLyBQYXJzZSBK U09OIGRhdGEgdG8gYmFja2JvbmUgbW9kZWwKKyAgICAgICAgICAgIG1haW5f cGxhbi5zZXQobWFpbl9wbGFuLnBhcnNlKHApKTsKKyAgICAgICAgICAgIHcg PSBtYWluX3BsYW4uZ2V0KCd3aWR0aCcpOworICAgICAgICAgICAgaCA9IG1h aW5fcGxhbi5nZXQoJ2hlaWdodCcpOworCisgICAgICAgICAgICB2YXIgcyA9 IFNuYXAodywgaCksCisgICAgICAgICAgICAgICAgJHN2ZyA9ICQocy5ub2Rl KS5kZXRhY2goKTsKKyAgICAgICAgICAgIHBsYW5EaXYuYXBwZW5kKCRzdmcp OworCisgICAgICAgICAgICBtYWluX3BsYW4uZHJhdyhzLCB3IC0geE1hcmdp biwgeU1hcmdpbiwgJCgnLnBnYWRtaW4tZXhwbGFpbi1jb250YWluZXInKSwg JCgnLnBnYWRtaW4tZXhwbGFpbi10b29sVGlwJykpOworCisgICAgICAgICAg ICB6b29tSW5CdG4ub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CisgICAgICAg ICAgICAgIGN1cnJfem9vbV9mYWN0b3IgPSAoY3Vycl96b29tX2ZhY3RvciA+ IDIpID8gMiA6IChjdXJyX3pvb21fZmFjdG9yICsgMC4xMCk7CisgICAgICAg ICAgICAgIHZhciB6b29tSW5NYXRyaXggPSBuZXcgU25hcC5tYXRyaXgoKTsK KyAgICAgICAgICAgICAgem9vbUluTWF0cml4LnNjYWxlKGN1cnJfem9vbV9m YWN0b3IsIGN1cnJfem9vbV9mYWN0b3IpOworCisgICAgICAgICAgICAgICRz dmcuZmluZCgnZycpLmZpcnN0KCkuYXR0cih7dHJhbnNmb3JtOiB6b29tSW5N YXRyaXh9KTsKKyAgICAgICAgICAgICAgJHN2Zy5hdHRyKHsnd2lkdGgnOiB3 ICogY3Vycl96b29tX2ZhY3RvciwgJ2hlaWdodCc6IGggKiBjdXJyX3pvb21f ZmFjdG9yfSk7CisgICAgICAgICAgICAgIHBsYW5EaXYuZGF0YSgnem9vbS1m YWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsKKyAgICAgICAgICAgIH0pLAor CisgICAgICAgICAgICB6b29tT3V0QnRuLm9uKCdjbGljaycsIGZ1bmN0aW9u KGUpIHsKKyAgICAgICAgICAgICAgY3Vycl96b29tX2ZhY3RvciA9IChjdXJy X3pvb21fZmFjdG9yIDwgMC4xMCkgPyAwLjEwIDogKGN1cnJfem9vbV9mYWN0 b3IgLSAwLjEwKTsKKyAgICAgICAgICAgICAgdmFyIHpvb21Jbk1hdHJpeCA9 IG5ldyBTbmFwLm1hdHJpeCgpOworICAgICAgICAgICAgICB6b29tSW5NYXRy aXguc2NhbGUoY3Vycl96b29tX2ZhY3RvciwgY3Vycl96b29tX2ZhY3Rvcik7 CisKKyAgICAgICAgICAgICAgJHN2Zy5maW5kKCdnJykuZmlyc3QoKS5hdHRy KHt0cmFuc2Zvcm06IHpvb21Jbk1hdHJpeH0pOworICAgICAgICAgICAgICAk c3ZnLmF0dHIoeyd3aWR0aCc6IHcgKiBjdXJyX3pvb21fZmFjdG9yLCAnaGVp Z2h0JzogaCAqIGN1cnJfem9vbV9mYWN0b3J9KTsKKyAgICAgICAgICAgICAg cGxhbkRpdi5kYXRhKCd6b29tLWZhY3RvcicsIGN1cnJfem9vbV9mYWN0b3Ip OworICAgICAgICAgICAgfSkKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQor ICAgIH0pOworCisgICAgcmV0dXJuIHBnRXhwbGFpbjsKK30pOwpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9qcy9zbmFw LnN2Zy1taW4uanMgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2pzL3NuYXAuc3ZnLW1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42NTY3ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9qcy9zbmFwLnN2Zy1taW4uanMK QEAgLTAsMCArMSwyMSBAQAorLy8gU25hcC5zdmcgMC40LjEKKy8vCisvLyBD b3B5cmlnaHQgKGMpIDIwMTMg4oCTIDIwMTUgQWRvYmUgU3lzdGVtcyBJbmNv cnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5z ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl ICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4 Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3Ug bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBo dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8v CisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1 bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi IEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBT ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl cm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0 aGUgTGljZW5zZS4KKy8vCisvLyBidWlsZDogMjAxNS0wNC0xMworCishZnVu Y3Rpb24oYSl7dmFyIGIsYyxkPSIwLjQuMiIsZT0iaGFzT3duUHJvcGVydHki LGY9L1tcLlwvXS8sZz0vXHMqLFxzKi8saD0iKiIsaT1mdW5jdGlvbihhLGIp e3JldHVybiBhLWJ9LGo9e246e319LGs9ZnVuY3Rpb24oKXtmb3IodmFyIGE9 MCxiPXRoaXMubGVuZ3RoO2I+YTthKyspaWYoInVuZGVmaW5lZCIhPXR5cGVv ZiB0aGlzW2FdKXJldHVybiB0aGlzW2FdfSxsPWZ1bmN0aW9uKCl7Zm9yKHZh ciBhPXRoaXMubGVuZ3RoOy0tYTspaWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0 aGlzW2FdKXJldHVybiB0aGlzW2FdfSxtPWZ1bmN0aW9uKGEsZCl7YT1TdHJp bmcoYSk7dmFyIGUsZj1jLGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo YXJndW1lbnRzLDIpLGg9bS5saXN0ZW5lcnMoYSksaj0wLG49W10sbz17fSxw PVtdLHE9YjtwLmZpcnN0RGVmaW5lZD1rLHAubGFzdERlZmluZWQ9bCxiPWEs Yz0wO2Zvcih2YXIgcj0wLHM9aC5sZW5ndGg7cz5yO3IrKykiekluZGV4Imlu IGhbcl0mJihuLnB1c2goaFtyXS56SW5kZXgpLGhbcl0uekluZGV4PDAmJihv W2hbcl0uekluZGV4XT1oW3JdKSk7Zm9yKG4uc29ydChpKTtuW2pdPDA7KWlm KGU9b1tuW2orK11dLHAucHVzaChlLmFwcGx5KGQsZykpLGMpcmV0dXJuIGM9 ZixwO2ZvcihyPTA7cz5yO3IrKylpZihlPWhbcl0sInpJbmRleCJpbiBlKWlm KGUuekluZGV4PT1uW2pdKXtpZihwLnB1c2goZS5hcHBseShkLGcpKSxjKWJy ZWFrO2RvIGlmKGorKyxlPW9bbltqXV0sZSYmcC5wdXNoKGUuYXBwbHkoZCxn KSksYylicmVhazt3aGlsZShlKX1lbHNlIG9bZS56SW5kZXhdPWU7ZWxzZSBp ZihwLnB1c2goZS5hcHBseShkLGcpKSxjKWJyZWFrO3JldHVybiBjPWYsYj1x LHB9O20uX2V2ZW50cz1qLG0ubGlzdGVuZXJzPWZ1bmN0aW9uKGEpe3ZhciBi LGMsZCxlLGcsaSxrLGwsbT1hLnNwbGl0KGYpLG49aixvPVtuXSxwPVtdO2Zv cihlPTAsZz1tLmxlbmd0aDtnPmU7ZSsrKXtmb3IobD1bXSxpPTAsaz1vLmxl bmd0aDtrPmk7aSsrKWZvcihuPW9baV0ubixjPVtuW21bZV1dLG5baF1dLGQ9 MjtkLS07KWI9Y1tkXSxiJiYobC5wdXNoKGIpLHA9cC5jb25jYXQoYi5mfHxb XSkpO289bH1yZXR1cm4gcH0sbS5vbj1mdW5jdGlvbihhLGIpe2lmKGE9U3Ry aW5nKGEpLCJmdW5jdGlvbiIhPXR5cGVvZiBiKXJldHVybiBmdW5jdGlvbigp e307Zm9yKHZhciBjPWEuc3BsaXQoZyksZD0wLGU9Yy5sZW5ndGg7ZT5kO2Qr KykhZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9YS5zcGxpdChmKSxlPWosZz0w LGg9ZC5sZW5ndGg7aD5nO2crKyllPWUubixlPWUuaGFzT3duUHJvcGVydHko ZFtnXSkmJmVbZFtnXV18fChlW2RbZ11dPXtuOnt9fSk7Zm9yKGUuZj1lLmZ8 fFtdLGc9MCxoPWUuZi5sZW5ndGg7aD5nO2crKylpZihlLmZbZ109PWIpe2M9 ITA7YnJlYWt9IWMmJmUuZi5wdXNoKGIpfShjW2RdKTtyZXR1cm4gZnVuY3Rp b24oYSl7K2E9PSthJiYoYi56SW5kZXg9K2EpfX0sbS5mPWZ1bmN0aW9uKGEp e3ZhciBiPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5j dGlvbigpe20uYXBwbHkobnVsbCxbYSxudWxsXS5jb25jYXQoYikuY29uY2F0 KFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKSl9fSxtLnN0b3A9ZnVuY3Rp b24oKXtjPTF9LG0ubnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bmV3IFJlZ0V4 cCgiKD86XFwufFxcL3xeKSIrYSsiKD86XFwufFxcL3wkKSIpLnRlc3QoYik6 Yn0sbS5udHM9ZnVuY3Rpb24oKXtyZXR1cm4gYi5zcGxpdChmKX0sbS5vZmY9 bS51bmJpbmQ9ZnVuY3Rpb24oYSxiKXtpZighYSlyZXR1cm4gdm9pZChtLl9l dmVudHM9aj17bjp7fX0pO3ZhciBjPWEuc3BsaXQoZyk7aWYoYy5sZW5ndGg+ MSlmb3IodmFyIGQ9MCxpPWMubGVuZ3RoO2k+ZDtkKyspbS5vZmYoY1tkXSxi KTtlbHNle2M9YS5zcGxpdChmKTt2YXIgayxsLG4sZCxpLG8scCxxPVtqXTtm b3IoZD0wLGk9Yy5sZW5ndGg7aT5kO2QrKylmb3Iobz0wO288cS5sZW5ndGg7 bys9bi5sZW5ndGgtMil7aWYobj1bbywxXSxrPXFbb10ubixjW2RdIT1oKWtb Y1tkXV0mJm4ucHVzaChrW2NbZF1dKTtlbHNlIGZvcihsIGluIGspa1tlXShs KSYmbi5wdXNoKGtbbF0pO3Euc3BsaWNlLmFwcGx5KHEsbil9Zm9yKGQ9MCxp PXEubGVuZ3RoO2k+ZDtkKyspZm9yKGs9cVtkXTtrLm47KXtpZihiKXtpZihr LmYpe2ZvcihvPTAscD1rLmYubGVuZ3RoO3A+bztvKyspaWYoay5mW29dPT1i KXtrLmYuc3BsaWNlKG8sMSk7YnJlYWt9IWsuZi5sZW5ndGgmJmRlbGV0ZSBr LmZ9Zm9yKGwgaW4gay5uKWlmKGsubltlXShsKSYmay5uW2xdLmYpe3ZhciBy PWsubltsXS5mO2ZvcihvPTAscD1yLmxlbmd0aDtwPm87bysrKWlmKHJbb109 PWIpe3Iuc3BsaWNlKG8sMSk7YnJlYWt9IXIubGVuZ3RoJiZkZWxldGUgay5u W2xdLmZ9fWVsc2V7ZGVsZXRlIGsuZjtmb3IobCBpbiBrLm4pay5uW2VdKGwp JiZrLm5bbF0uZiYmZGVsZXRlIGsubltsXS5mfWs9ay5ufX19LG0ub25jZT1m dW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKCl7cmV0dXJuIG0udW5iaW5k KGEsYyksYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBtLm9uKGEs Yyl9LG0udmVyc2lvbj1kLG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4i WW91IGFyZSBydW5uaW5nIEV2ZSAiK2R9LCJ1bmRlZmluZWQiIT10eXBlb2Yg bW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1tOiJmdW5j dGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJldmUi LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG19KTphLmV2ZT1tfSh0aGlzKSxmdW5j dGlvbihhLGIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmlu ZS5hbWQpZGVmaW5lKFsiZXZlIl0sZnVuY3Rpb24oYyl7cmV0dXJuIGIoYSxj KX0pO2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBleHBvcnRzKXt2YXIg Yz1yZXF1aXJlKCJldmUiKTttb2R1bGUuZXhwb3J0cz1iKGEsYyl9ZWxzZSBi KGEsYS5ldmUpfSh3aW5kb3d8fHRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1m dW5jdGlvbihiKXt2YXIgYz17fSxkPWEucmVxdWVzdEFuaW1hdGlvbkZyYW1l fHxhLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8YS5tb3pSZXF1ZXN0 QW5pbWF0aW9uRnJhbWV8fGEub1JlcXVlc3RBbmltYXRpb25GcmFtZXx8YS5t c1JlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oYSl7c2V0VGltZW91 dChhLDE2KX0sZT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4g YSBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT1PYmplY3Qu cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9LGY9MCxnPSJNIisoK25ldyBE YXRlKS50b1N0cmluZygzNiksaD1mdW5jdGlvbigpe3JldHVybiBnKyhmKysp LnRvU3RyaW5nKDM2KX0saT1EYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4r bmV3IERhdGV9LGo9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZihudWxsPT1h KXJldHVybiBiLnM7dmFyIGM9Yi5zLWE7Yi5iKz1iLmR1cipjLGIuQis9Yi5k dXIqYyxiLnM9YX0saz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3JldHVybiBu dWxsPT1hP2Iuc3BkOnZvaWQoYi5zcGQ9YSl9LGw9ZnVuY3Rpb24oYSl7dmFy IGI9dGhpcztyZXR1cm4gbnVsbD09YT9iLmR1cjooYi5zPWIucyphL2IuZHVy LHZvaWQoYi5kdXI9YSkpfSxtPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztkZWxl dGUgY1thLmlkXSxhLnVwZGF0ZSgpLGIoIm1pbmEuc3RvcC4iK2EuaWQsYSl9 LG49ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EucGRpZnx8KGRlbGV0ZSBjW2Eu aWRdLGEudXBkYXRlKCksYS5wZGlmPWEuZ2V0KCktYS5iKX0sbz1mdW5jdGlv bigpe3ZhciBhPXRoaXM7YS5wZGlmJiYoYS5iPWEuZ2V0KCktYS5wZGlmLGRl bGV0ZSBhLnBkaWYsY1thLmlkXT1hKX0scD1mdW5jdGlvbigpe3ZhciBhLGI9 dGhpcztpZihlKGIuc3RhcnQpKXthPVtdO2Zvcih2YXIgYz0wLGQ9Yi5zdGFy dC5sZW5ndGg7ZD5jO2MrKylhW2NdPStiLnN0YXJ0W2NdKyhiLmVuZFtjXS1i LnN0YXJ0W2NdKSpiLmVhc2luZyhiLnMpfWVsc2UgYT0rYi5zdGFydCsoYi5l bmQtYi5zdGFydCkqYi5lYXNpbmcoYi5zKTtiLnNldChhKX0scT1mdW5jdGlv bigpe3ZhciBhPTA7Zm9yKHZhciBlIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0 eShlKSl7dmFyIGY9Y1tlXSxnPWYuZ2V0KCk7YSsrLGYucz0oZy1mLmIpLyhm LmR1ci9mLnNwZCksZi5zPj0xJiYoZGVsZXRlIGNbZV0sZi5zPTEsYS0tLGZ1 bmN0aW9uKGEpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtiKCJtaW5hLmZpbmlz aC4iK2EuaWQsYSl9KX0oZikpLGYudXBkYXRlKCl9YSYmZChxKX0scj1mdW5j dGlvbihhLGIsZSxmLGcsaSxzKXt2YXIgdD17aWQ6aCgpLHN0YXJ0OmEsZW5k OmIsYjplLHM6MCxkdXI6Zi1lLHNwZDoxLGdldDpnLHNldDppLGVhc2luZzpz fHxyLmxpbmVhcixzdGF0dXM6aixzcGVlZDprLGR1cmF0aW9uOmwsc3RvcDpt LHBhdXNlOm4scmVzdW1lOm8sdXBkYXRlOnB9O2NbdC5pZF09dDt2YXIgdSx2 PTA7Zm9yKHUgaW4gYylpZihjLmhhc093blByb3BlcnR5KHUpJiYodisrLDI9 PXYpKWJyZWFrO3JldHVybiAxPT12JiZkKHEpLHR9O3JldHVybiByLnRpbWU9 aSxyLmdldEJ5SWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV18fG51bGx9LHIu bGluZWFyPWZ1bmN0aW9uKGEpe3JldHVybiBhfSxyLmVhc2VvdXQ9ZnVuY3Rp b24oYSl7cmV0dXJuIE1hdGgucG93KGEsMS43KX0sci5lYXNlaW49ZnVuY3Rp b24oYSl7cmV0dXJuIE1hdGgucG93KGEsLjQ4KX0sci5lYXNlaW5vdXQ9ZnVu Y3Rpb24oYSl7aWYoMT09YSlyZXR1cm4gMTtpZigwPT1hKXJldHVybiAwO3Zh ciBiPS40OC1hLzEuMDQsYz1NYXRoLnNxcnQoLjE3MzQrYipiKSxkPWMtYixl PU1hdGgucG93KE1hdGguYWJzKGQpLDEvMykqKDA+ZD8tMToxKSxmPS1jLWIs Zz1NYXRoLnBvdyhNYXRoLmFicyhmKSwxLzMpKigwPmY/LTE6MSksaD1lK2cr LjU7cmV0dXJuIDMqKDEtaCkqaCpoK2gqaCpofSxyLmJhY2tpbj1mdW5jdGlv bihhKXtpZigxPT1hKXJldHVybiAxO3ZhciBiPTEuNzAxNTg7cmV0dXJuIGEq YSooKGIrMSkqYS1iKX0sci5iYWNrb3V0PWZ1bmN0aW9uKGEpe2lmKDA9PWEp cmV0dXJuIDA7YS09MTt2YXIgYj0xLjcwMTU4O3JldHVybiBhKmEqKChiKzEp KmErYikrMX0sci5lbGFzdGljPWZ1bmN0aW9uKGEpe3JldHVybiBhPT0hIWE/ YTpNYXRoLnBvdygyLC0xMCphKSpNYXRoLnNpbigyKihhLS4wNzUpKk1hdGgu UEkvLjMpKzF9LHIuYm91bmNlPWZ1bmN0aW9uKGEpe3ZhciBiLGM9Ny41NjI1 LGQ9Mi43NTtyZXR1cm4gMS9kPmE/Yj1jKmEqYToyL2Q+YT8oYS09MS41L2Qs Yj1jKmEqYSsuNzUpOjIuNS9kPmE/KGEtPTIuMjUvZCxiPWMqYSphKy45Mzc1 KTooYS09Mi42MjUvZCxiPWMqYSphKy45ODQzNzUpLGJ9LGEubWluYT1yLHJ9 KCJ1bmRlZmluZWQiPT10eXBlb2YgYj9mdW5jdGlvbigpe306YiksZD1mdW5j dGlvbihhKXtmdW5jdGlvbiBjKGEsYil7aWYoYSl7aWYoYS5ub2RlVHlwZSly ZXR1cm4gdyhhKTtpZihlKGEsImFycmF5IikmJmMuc2V0KXJldHVybiBjLnNl dC5hcHBseShjLGEpO2lmKGEgaW5zdGFuY2VvZiBzKXJldHVybiBhO2lmKG51 bGw9PWIpcmV0dXJuIGE9eS5kb2MucXVlcnlTZWxlY3RvcihTdHJpbmcoYSkp LHcoYSl9cmV0dXJuIGE9bnVsbD09YT8iMTAwJSI6YSxiPW51bGw9PWI/IjEw MCUiOmIsbmV3IHYoYSxiKX1mdW5jdGlvbiBkKGEsYil7aWYoYil7aWYoIiN0 ZXh0Ij09YSYmKGE9eS5kb2MuY3JlYXRlVGV4dE5vZGUoYi50ZXh0fHxiWyIj dGV4dCJdfHwiIikpLCIjY29tbWVudCI9PWEmJihhPXkuZG9jLmNyZWF0ZUNv bW1lbnQoYi50ZXh0fHxiWyIjdGV4dCJdfHwiIikpLCJzdHJpbmciPT10eXBl b2YgYSYmKGE9ZChhKSksInN0cmluZyI9PXR5cGVvZiBiKXJldHVybiAxPT1h Lm5vZGVUeXBlPyJ4bGluazoiPT1iLnN1YnN0cmluZygwLDYpP2EuZ2V0QXR0 cmlidXRlTlMoVCxiLnN1YnN0cmluZyg2KSk6InhtbDoiPT1iLnN1YnN0cmlu ZygwLDQpP2EuZ2V0QXR0cmlidXRlTlMoVSxiLnN1YnN0cmluZyg0KSk6YS5n ZXRBdHRyaWJ1dGUoYik6InRleHQiPT1iP2Eubm9kZVZhbHVlOm51bGw7aWYo MT09YS5ub2RlVHlwZSl7Zm9yKHZhciBjIGluIGIpaWYoYlt6XShjKSl7dmFy IGU9QShiW2NdKTtlPyJ4bGluazoiPT1jLnN1YnN0cmluZygwLDYpP2Euc2V0 QXR0cmlidXRlTlMoVCxjLnN1YnN0cmluZyg2KSxlKToieG1sOiI9PWMuc3Vi c3RyaW5nKDAsNCk/YS5zZXRBdHRyaWJ1dGVOUyhVLGMuc3Vic3RyaW5nKDQp LGUpOmEuc2V0QXR0cmlidXRlKGMsZSk6YS5yZW1vdmVBdHRyaWJ1dGUoYyl9 fWVsc2UidGV4dCJpbiBiJiYoYS5ub2RlVmFsdWU9Yi50ZXh0KX1lbHNlIGE9 eS5kb2MuY3JlYXRlRWxlbWVudE5TKFUsYSk7cmV0dXJuIGF9ZnVuY3Rpb24g ZShhLGIpe3JldHVybiBiPUEucHJvdG90eXBlLnRvTG93ZXJDYXNlLmNhbGwo YiksImZpbml0ZSI9PWI/aXNGaW5pdGUoYSk6ImFycmF5Ij09YiYmKGEgaW5z dGFuY2VvZiBBcnJheXx8QXJyYXkuaXNBcnJheSYmQXJyYXkuaXNBcnJheShh KSk/ITA6Im51bGwiPT1iJiZudWxsPT09YXx8Yj09dHlwZW9mIGEmJm51bGwh PT1hfHwib2JqZWN0Ij09YiYmYT09PU9iamVjdChhKXx8Si5jYWxsKGEpLnNs aWNlKDgsLTEpLnRvTG93ZXJDYXNlKCk9PWJ9ZnVuY3Rpb24gZihhKXtpZigi ZnVuY3Rpb24iPT10eXBlb2YgYXx8T2JqZWN0KGEpIT09YSlyZXR1cm4gYTt2 YXIgYj1uZXcgYS5jb25zdHJ1Y3Rvcjtmb3IodmFyIGMgaW4gYSlhW3pdKGMp JiYoYltjXT1mKGFbY10pKTtyZXR1cm4gYn1mdW5jdGlvbiBoKGEsYil7Zm9y KHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVy biBhLnB1c2goYS5zcGxpY2UoYywxKVswXSl9ZnVuY3Rpb24gaShhLGIsYyl7 ZnVuY3Rpb24gZCgpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs KGFyZ3VtZW50cywwKSxmPWUuam9pbigi4pCAIiksZz1kLmNhY2hlPWQuY2Fj aGV8fHt9LGk9ZC5jb3VudD1kLmNvdW50fHxbXTtyZXR1cm4gZ1t6XShmKT8o aChpLGYpLGM/YyhnW2ZdKTpnW2ZdKTooaS5sZW5ndGg+PTFlMyYmZGVsZXRl IGdbaS5zaGlmdCgpXSxpLnB1c2goZiksZ1tmXT1hLmFwcGx5KGIsZSksYz9j KGdbZl0pOmdbZl0pfXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlLGYp e2lmKG51bGw9PWUpe3ZhciBnPWEtYyxoPWItZDtyZXR1cm4gZ3x8aD8oMTgw KzE4MCpELmF0YW4yKC1oLC1nKS9IKzM2MCklMzYwOjB9cmV0dXJuIGooYSxi LGUsZiktaihjLGQsZSxmKX1mdW5jdGlvbiBrKGEpe3JldHVybiBhJTM2MCpI LzE4MH1mdW5jdGlvbiBsKGEpe3JldHVybiAxODAqYS9IJTM2MH1mdW5jdGlv biBtKGEpe3ZhciBiPVtdO3JldHVybiBhPWEucmVwbGFjZSgvKD86Xnxccyko XHcrKVwoKFteKV0rKVwpL2csZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkPWQu c3BsaXQoL1xzKixccyp8XHMrLyksInJvdGF0ZSI9PWMmJjE9PWQubGVuZ3Ro JiZkLnB1c2goMCwwKSwic2NhbGUiPT1jJiYoZC5sZW5ndGg+Mj9kPWQuc2xp Y2UoMCwyKToyPT1kLmxlbmd0aCYmZC5wdXNoKDAsMCksMT09ZC5sZW5ndGgm JmQucHVzaChkWzBdLDAsMCkpLGIucHVzaCgic2tld1giPT1jP1sibSIsMSww LEQudGFuKGsoZFswXSkpLDEsMCwwXToic2tld1kiPT1jP1sibSIsMSxELnRh bihrKGRbMF0pKSwwLDEsMCwwXTpbYy5jaGFyQXQoMCldLmNvbmNhdChkKSks YX0pLGJ9ZnVuY3Rpb24gbihhLGIpe3ZhciBkPWFiKGEpLGU9bmV3IGMuTWF0 cml4O2lmKGQpZm9yKHZhciBmPTAsZz1kLmxlbmd0aDtnPmY7ZisrKXt2YXIg aCxpLGosayxsLG09ZFtmXSxuPW0ubGVuZ3RoLG89QShtWzBdKS50b0xvd2Vy Q2FzZSgpLHA9bVswXSE9byxxPXA/ZS5pbnZlcnQoKTowOyJ0Ij09byYmMj09 bj9lLnRyYW5zbGF0ZShtWzFdLDApOiJ0Ij09byYmMz09bj9wPyhoPXEueCgw LDApLGk9cS55KDAsMCksaj1xLngobVsxXSxtWzJdKSxrPXEueShtWzFdLG1b Ml0pLGUudHJhbnNsYXRlKGotaCxrLWkpKTplLnRyYW5zbGF0ZShtWzFdLG1b Ml0pOiJyIj09bz8yPT1uPyhsPWx8fGIsZS5yb3RhdGUobVsxXSxsLngrbC53 aWR0aC8yLGwueStsLmhlaWdodC8yKSk6ND09biYmKHA/KGo9cS54KG1bMl0s bVszXSksaz1xLnkobVsyXSxtWzNdKSxlLnJvdGF0ZShtWzFdLGosaykpOmUu cm90YXRlKG1bMV0sbVsyXSxtWzNdKSk6InMiPT1vPzI9PW58fDM9PW4/KGw9 bHx8YixlLnNjYWxlKG1bMV0sbVtuLTFdLGwueCtsLndpZHRoLzIsbC55K2wu aGVpZ2h0LzIpKTo0PT1uP3A/KGo9cS54KG1bMl0sbVszXSksaz1xLnkobVsy XSxtWzNdKSxlLnNjYWxlKG1bMV0sbVsxXSxqLGspKTplLnNjYWxlKG1bMV0s bVsxXSxtWzJdLG1bM10pOjU9PW4mJihwPyhqPXEueChtWzNdLG1bNF0pLGs9 cS55KG1bM10sbVs0XSksZS5zY2FsZShtWzFdLG1bMl0saixrKSk6ZS5zY2Fs ZShtWzFdLG1bMl0sbVszXSxtWzRdKSk6Im0iPT1vJiY3PT1uJiZlLmFkZCht WzFdLG1bMl0sbVszXSxtWzRdLG1bNV0sbVs2XSl9cmV0dXJuIGV9ZnVuY3Rp b24gbyhhKXt2YXIgYj1hLm5vZGUub3duZXJTVkdFbGVtZW50JiZ3KGEubm9k ZS5vd25lclNWR0VsZW1lbnQpfHxhLm5vZGUucGFyZW50Tm9kZSYmdyhhLm5v ZGUucGFyZW50Tm9kZSl8fGMuc2VsZWN0KCJzdmciKXx8YygwLDApLGQ9Yi5z ZWxlY3QoImRlZnMiKSxlPW51bGw9PWQ/ITE6ZC5ub2RlO3JldHVybiBlfHwo ZT11KCJkZWZzIixiLm5vZGUpLm5vZGUpLGV9ZnVuY3Rpb24gcChhKXtyZXR1 cm4gYS5ub2RlLm93bmVyU1ZHRWxlbWVudCYmdyhhLm5vZGUub3duZXJTVkdF bGVtZW50KXx8Yy5zZWxlY3QoInN2ZyIpfWZ1bmN0aW9uIHEoYSxiLGMpe2Z1 bmN0aW9uIGUoYSl7aWYobnVsbD09YSlyZXR1cm4gSTtpZihhPT0rYSlyZXR1 cm4gYTtkKGose3dpZHRoOmF9KTt0cnl7cmV0dXJuIGouZ2V0QkJveCgpLndp ZHRofWNhdGNoKGIpe3JldHVybiAwfX1mdW5jdGlvbiBmKGEpe2lmKG51bGw9 PWEpcmV0dXJuIEk7aWYoYT09K2EpcmV0dXJuIGE7ZChqLHtoZWlnaHQ6YX0p O3RyeXtyZXR1cm4gai5nZXRCQm94KCkuaGVpZ2h0fWNhdGNoKGIpe3JldHVy biAwfX1mdW5jdGlvbiBnKGQsZSl7bnVsbD09Yj9pW2RdPWUoYS5hdHRyKGQp fHwwKTpkPT1iJiYoaT1lKG51bGw9PWM/YS5hdHRyKGQpfHwwOmMpKX12YXIg aD1wKGEpLm5vZGUsaT17fSxqPWgucXVlcnlTZWxlY3RvcigiLnN2Zy0tLW1n ciIpO3N3aXRjaChqfHwoaj1kKCJyZWN0IiksZChqLHt4Oi05ZTkseTotOWU5 LHdpZHRoOjEwLGhlaWdodDoxMCwiY2xhc3MiOiJzdmctLS1tZ3IiLGZpbGw6 Im5vbmUifSksaC5hcHBlbmRDaGlsZChqKSksYS50eXBlKXtjYXNlInJlY3Qi OmcoInJ4IixlKSxnKCJyeSIsZik7Y2FzZSJpbWFnZSI6Zygid2lkdGgiLGUp LGcoImhlaWdodCIsZik7Y2FzZSJ0ZXh0IjpnKCJ4IixlKSxnKCJ5IixmKTti cmVhaztjYXNlImNpcmNsZSI6ZygiY3giLGUpLGcoImN5IixmKSxnKCJyIixl KTticmVhaztjYXNlImVsbGlwc2UiOmcoImN4IixlKSxnKCJjeSIsZiksZygi cngiLGUpLGcoInJ5IixmKTticmVhaztjYXNlImxpbmUiOmcoIngxIixlKSxn KCJ4MiIsZSksZygieTEiLGYpLGcoInkyIixmKTticmVhaztjYXNlIm1hcmtl ciI6ZygicmVmWCIsZSksZygibWFya2VyV2lkdGgiLGUpLGcoInJlZlkiLGYp LGcoIm1hcmtlckhlaWdodCIsZik7YnJlYWs7Y2FzZSJyYWRpYWxHcmFkaWVu dCI6ZygiZngiLGUpLGcoImZ5IixmKTticmVhaztjYXNlInRzcGFuIjpnKCJk eCIsZSksZygiZHkiLGYpO2JyZWFrO2RlZmF1bHQ6ZyhiLGUpfXJldHVybiBo LnJlbW92ZUNoaWxkKGopLGl9ZnVuY3Rpb24gcihhKXtlKGEsImFycmF5Iil8 fChhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk7 Zm9yKHZhciBiPTAsYz0wLGQ9dGhpcy5ub2RlO3RoaXNbYl07KWRlbGV0ZSB0 aGlzW2IrK107Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKykic2V0Ij09YVtiXS50 eXBlP2FbYl0uZm9yRWFjaChmdW5jdGlvbihhKXtkLmFwcGVuZENoaWxkKGEu bm9kZSl9KTpkLmFwcGVuZENoaWxkKGFbYl0ubm9kZSk7dmFyIGY9ZC5jaGls ZE5vZGVzO2ZvcihiPTA7YjxmLmxlbmd0aDtiKyspdGhpc1tjKytdPXcoZlti XSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gcyhhKXtpZihhLnNuYXAgaW4gVily ZXR1cm4gVlthLnNuYXBdO3ZhciBiO3RyeXtiPWEub3duZXJTVkdFbGVtZW50 fWNhdGNoKGMpe310aGlzLm5vZGU9YSxiJiYodGhpcy5wYXBlcj1uZXcgdihi KSksdGhpcy50eXBlPWEudGFnTmFtZXx8YS5ub2RlTmFtZTt2YXIgZD10aGlz LmlkPVModGhpcyk7aWYodGhpcy5hbmltcz17fSx0aGlzLl89e3RyYW5zZm9y bTpbXX0sYS5zbmFwPWQsVltkXT10aGlzLCJnIj09dGhpcy50eXBlJiYodGhp cy5hZGQ9ciksdGhpcy50eXBlIGlue2c6MSxtYXNrOjEscGF0dGVybjoxLHN5 bWJvbDoxfSlmb3IodmFyIGUgaW4gdi5wcm90b3R5cGUpdi5wcm90b3R5cGVb el0oZSkmJih0aGlzW2VdPXYucHJvdG90eXBlW2VdKX1mdW5jdGlvbiB0KGEp e3RoaXMubm9kZT1hfWZ1bmN0aW9uIHUoYSxiKXt2YXIgYz1kKGEpO2IuYXBw ZW5kQ2hpbGQoYyk7dmFyIGU9dyhjKTtyZXR1cm4gZX1mdW5jdGlvbiB2KGEs Yil7dmFyIGMsZSxmLGc9di5wcm90b3R5cGU7aWYoYSYmInN2ZyI9PWEudGFn TmFtZSl7aWYoYS5zbmFwIGluIFYpcmV0dXJuIFZbYS5zbmFwXTt2YXIgaD1h Lm93bmVyRG9jdW1lbnQ7Yz1uZXcgcyhhKSxlPWEuZ2V0RWxlbWVudHNCeVRh Z05hbWUoImRlc2MiKVswXSxmPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRl ZnMiKVswXSxlfHwoZT1kKCJkZXNjIiksZS5hcHBlbmRDaGlsZChoLmNyZWF0 ZVRleHROb2RlKCJDcmVhdGVkIHdpdGggU25hcCIpKSxjLm5vZGUuYXBwZW5k Q2hpbGQoZSkpLGZ8fChmPWQoImRlZnMiKSxjLm5vZGUuYXBwZW5kQ2hpbGQo ZikpLGMuZGVmcz1mO2Zvcih2YXIgaSBpbiBnKWdbel0oaSkmJihjW2ldPWdb aV0pO2MucGFwZXI9Yy5yb290PWN9ZWxzZSBjPXUoInN2ZyIseS5kb2MuYm9k eSksZChjLm5vZGUse2hlaWdodDpiLHZlcnNpb246MS4xLHdpZHRoOmEseG1s bnM6VX0pO3JldHVybiBjfWZ1bmN0aW9uIHcoYSl7cmV0dXJuIGE/YSBpbnN0 YW5jZW9mIHN8fGEgaW5zdGFuY2VvZiB0P2E6YS50YWdOYW1lJiYic3ZnIj09 YS50YWdOYW1lLnRvTG93ZXJDYXNlKCk/bmV3IHYoYSk6YS50YWdOYW1lJiYi b2JqZWN0Ij09YS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiJpbWFnZS9zdmcr eG1sIj09YS50eXBlP25ldyB2KGEuY29udGVudERvY3VtZW50LmdldEVsZW1l bnRzQnlUYWdOYW1lKCJzdmciKVswXSk6bmV3IHMoYSk6YX1mdW5jdGlvbiB4 KGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKXt2YXIgZT17 dHlwZTphW2NdLnR5cGUsYXR0cjphW2NdLmF0dHIoKX0sZj1hW2NdLmNoaWxk cmVuKCk7Yi5wdXNoKGUpLGYubGVuZ3RoJiZ4KGYsZS5jaGlsZE5vZGVzPVtd KX19Yy52ZXJzaW9uPSIwLjQuMCIsYy50b1N0cmluZz1mdW5jdGlvbigpe3Jl dHVybiJTbmFwIHYiK3RoaXMudmVyc2lvbn0sYy5fPXt9O3ZhciB5PXt3aW46 YS53aW5kb3csZG9jOmEud2luZG93LmRvY3VtZW50fTtjLl8uZ2xvYj15O3t2 YXIgej0iaGFzT3duUHJvcGVydHkiLEE9U3RyaW5nLEI9cGFyc2VGbG9hdCxD PXBhcnNlSW50LEQ9TWF0aCxFPUQubWF4LEY9RC5taW4sRz1ELmFicyxIPShE LnBvdyxELlBJKSxJPShELnJvdW5kLCIiKSxKPU9iamVjdC5wcm90b3R5cGUu dG9TdHJpbmcsSz0vXlxzKigoI1thLWZcZF17Nn0pfCgjW2EtZlxkXXszfSl8 cmdiYT9cKFxzKihbXGRcLl0rJT9ccyosXHMqW1xkXC5dKyU/XHMqLFxzKltc ZFwuXSslPyg/OlxzKixccypbXGRcLl0rJT8pPylccypcKXxoc2JhP1woXHMq KFtcZFwuXSsoPzpkZWd8XHhiMHwlKT9ccyosXHMqW1xkXC5dKyU/XHMqLFxz KltcZFwuXSsoPzolP1xzKixccypbXGRcLl0rKT8lPylccypcKXxoc2xhP1wo XHMqKFtcZFwuXSsoPzpkZWd8XHhiMHwlKT9ccyosXHMqW1xkXC5dKyU/XHMq LFxzKltcZFwuXSsoPzolP1xzKixccypbXGRcLl0rKT8lPylccypcKSlccyok L2ksTD0oYy5fLnNlcGFyYXRvcj0vWyxcc10rLywvW1xzXSosW1xzXSovKSxN PXtoczoxLHJnOjF9LE49LyhbYS16XSlbXHMsXSooKC0/XGQqXC4/XGQqKD86 ZVtcLStdP1xkKyk/W1xzXSosP1tcc10qKSspL2dpLE89LyhbcnN0bV0pW1xz LF0qKCgtP1xkKlwuP1xkKig/OmVbXC0rXT9cZCspP1tcc10qLD9bXHNdKikr KS9naSxQPS8oLT9cZCpcLj9cZCooPzplW1wtK10/XFxkKyk/KVtcc10qLD9b XHNdKi9naSxRPTAsUj0iUyIrKCtuZXcgRGF0ZSkudG9TdHJpbmcoMzYpLFM9 ZnVuY3Rpb24oYSl7cmV0dXJuKGEmJmEudHlwZT9hLnR5cGU6SSkrUisoUSsr KS50b1N0cmluZygzNil9LFQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp bmsiLFU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixWPXt9O2MudXJs PWZ1bmN0aW9uKGEpe3JldHVybiJ1cmwoJyMiK2ErIicpIn19Yy5fLiQ9ZCxj Ll8uaWQ9UyxjLmZvcm1hdD1mdW5jdGlvbigpe3ZhciBhPS9ceyhbXlx9XSsp XH0vZyxiPS8oPzooPzpefFwuKSguKz8pKD89XFt8XC58JHxcKCl8XFsoJ3wi KSguKz8pXDJcXSkoXChcKSk/L2csYz1mdW5jdGlvbihhLGMsZCl7dmFyIGU9 ZDtyZXR1cm4gYy5yZXBsYWNlKGIsZnVuY3Rpb24oYSxiLGMsZCxmKXtiPWJ8 fGQsZSYmKGIgaW4gZSYmKGU9ZVtiXSksImZ1bmN0aW9uIj09dHlwZW9mIGUm JmYmJihlPWUoKSkpfSksZT0obnVsbD09ZXx8ZT09ZD9hOmUpKyIifTtyZXR1 cm4gZnVuY3Rpb24oYixkKXtyZXR1cm4gQShiKS5yZXBsYWNlKGEsZnVuY3Rp b24oYSxiKXtyZXR1cm4gYyhhLGIsZCl9KX19KCksYy5fLmNsb25lPWYsYy5f LmNhY2hlcj1pLGMucmFkPWssYy5kZWc9bCxjLnNpbj1mdW5jdGlvbihhKXty ZXR1cm4gRC5zaW4oYy5yYWQoYSkpfSxjLnRhbj1mdW5jdGlvbihhKXtyZXR1 cm4gRC50YW4oYy5yYWQoYSkpfSxjLmNvcz1mdW5jdGlvbihhKXtyZXR1cm4g RC5jb3MoYy5yYWQoYSkpfSxjLmFzaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGMu ZGVnKEQuYXNpbihhKSl9LGMuYWNvcz1mdW5jdGlvbihhKXtyZXR1cm4gYy5k ZWcoRC5hY29zKGEpKX0sYy5hdGFuPWZ1bmN0aW9uKGEpe3JldHVybiBjLmRl ZyhELmF0YW4oYSkpfSxjLmF0YW4yPWZ1bmN0aW9uKGEpe3JldHVybiBjLmRl ZyhELmF0YW4yKGEpKX0sYy5hbmdsZT1qLGMubGVuPWZ1bmN0aW9uKGEsYixk LGUpe3JldHVybiBNYXRoLnNxcnQoYy5sZW4yKGEsYixkLGUpKX0sYy5sZW4y PWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihhLWMpKihhLWMpKyhiLWQpKihi LWQpfSxjLmNsb3Nlc3RQb2ludD1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24g ZChhKXt2YXIgZD1hLngtYixlPWEueS1jO3JldHVybiBkKmQrZSplfWZvcih2 YXIgZSxmLGcsaCxpPWEubm9kZSxqPWkuZ2V0VG90YWxMZW5ndGgoKSxrPWov aS5wYXRoU2VnTGlzdC5udW1iZXJPZkl0ZW1zKi4xMjUsbD0xLzAsbT0wO2o+ PW07bSs9aykoaD1kKGc9aS5nZXRQb2ludEF0TGVuZ3RoKG0pKSk8bCYmKGU9 ZyxmPW0sbD1oKTtmb3Ioayo9LjU7az4uNTspe3ZhciBuLG8scCxxLHIsczso cD1mLWspPj0wJiYocj1kKG49aS5nZXRQb2ludEF0TGVuZ3RoKHApKSk8bD8o ZT1uLGY9cCxsPXIpOihxPWYrayk8PWomJihzPWQobz1pLmdldFBvaW50QXRM ZW5ndGgocSkpKTxsPyhlPW8sZj1xLGw9cyk6ayo9LjV9cmV0dXJuIGU9e3g6 ZS54LHk6ZS55LGxlbmd0aDpmLGRpc3RhbmNlOk1hdGguc3FydChsKX19LGMu aXM9ZSxjLnNuYXBUbz1mdW5jdGlvbihhLGIsYyl7aWYoYz1lKGMsImZpbml0 ZSIpP2M6MTAsZShhLCJhcnJheSIpKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZC0t OylpZihHKGFbZF0tYik8PWMpcmV0dXJuIGFbZF19ZWxzZXthPSthO3ZhciBm PWIlYTtpZihjPmYpcmV0dXJuIGItZjtpZihmPmEtYylyZXR1cm4gYi1mK2F9 cmV0dXJuIGJ9LGMuZ2V0UkdCPWkoZnVuY3Rpb24oYSl7aWYoIWF8fChhPUEo YSkpLmluZGV4T2YoIi0iKSsxKXJldHVybntyOi0xLGc6LTEsYjotMSxoZXg6 Im5vbmUiLGVycm9yOjEsdG9TdHJpbmc6Wn07aWYoIm5vbmUiPT1hKXJldHVy bntyOi0xLGc6LTEsYjotMSxoZXg6Im5vbmUiLHRvU3RyaW5nOlp9O2lmKCEo TVt6XShhLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDAsMikpfHwiIyI9PWEu Y2hhckF0KCkpJiYoYT1XKGEpKSwhYSlyZXR1cm57cjotMSxnOi0xLGI6LTEs aGV4OiJub25lIixlcnJvcjoxLHRvU3RyaW5nOlp9O3ZhciBiLGQsZixnLGgs aSxqPWEubWF0Y2goSyk7cmV0dXJuIGo/KGpbMl0mJihmPUMoalsyXS5zdWJz dHJpbmcoNSksMTYpLGQ9QyhqWzJdLnN1YnN0cmluZygzLDUpLDE2KSxiPUMo alsyXS5zdWJzdHJpbmcoMSwzKSwxNikpLGpbM10mJihmPUMoKGg9alszXS5j aGFyQXQoMykpK2gsMTYpLGQ9QygoaD1qWzNdLmNoYXJBdCgyKSkraCwxNiks Yj1DKChoPWpbM10uY2hhckF0KDEpKStoLDE2KSksals0XSYmKGk9als0XS5z cGxpdChMKSxiPUIoaVswXSksIiUiPT1pWzBdLnNsaWNlKC0xKSYmKGIqPTIu NTUpLGQ9QihpWzFdKSwiJSI9PWlbMV0uc2xpY2UoLTEpJiYoZCo9Mi41NSks Zj1CKGlbMl0pLCIlIj09aVsyXS5zbGljZSgtMSkmJihmKj0yLjU1KSwicmdi YSI9PWpbMV0udG9Mb3dlckNhc2UoKS5zbGljZSgwLDQpJiYoZz1CKGlbM10p KSxpWzNdJiYiJSI9PWlbM10uc2xpY2UoLTEpJiYoZy89MTAwKSksals1XT8o aT1qWzVdLnNwbGl0KEwpLGI9QihpWzBdKSwiJSI9PWlbMF0uc2xpY2UoLTEp JiYoYi89MTAwKSxkPUIoaVsxXSksIiUiPT1pWzFdLnNsaWNlKC0xKSYmKGQv PTEwMCksZj1CKGlbMl0pLCIlIj09aVsyXS5zbGljZSgtMSkmJihmLz0xMDAp LCgiZGVnIj09aVswXS5zbGljZSgtMyl8fCLCsCI9PWlbMF0uc2xpY2UoLTEp KSYmKGIvPTM2MCksImhzYmEiPT1qWzFdLnRvTG93ZXJDYXNlKCkuc2xpY2Uo MCw0KSYmKGc9QihpWzNdKSksaVszXSYmIiUiPT1pWzNdLnNsaWNlKC0xKSYm KGcvPTEwMCksYy5oc2IycmdiKGIsZCxmLGcpKTpqWzZdPyhpPWpbNl0uc3Bs aXQoTCksYj1CKGlbMF0pLCIlIj09aVswXS5zbGljZSgtMSkmJihiLz0xMDAp LGQ9QihpWzFdKSwiJSI9PWlbMV0uc2xpY2UoLTEpJiYoZC89MTAwKSxmPUIo aVsyXSksIiUiPT1pWzJdLnNsaWNlKC0xKSYmKGYvPTEwMCksKCJkZWciPT1p WzBdLnNsaWNlKC0zKXx8IsKwIj09aVswXS5zbGljZSgtMSkpJiYoYi89MzYw KSwiaHNsYSI9PWpbMV0udG9Mb3dlckNhc2UoKS5zbGljZSgwLDQpJiYoZz1C KGlbM10pKSxpWzNdJiYiJSI9PWlbM10uc2xpY2UoLTEpJiYoZy89MTAwKSxj LmhzbDJyZ2IoYixkLGYsZykpOihiPUYoRC5yb3VuZChiKSwyNTUpLGQ9RihE LnJvdW5kKGQpLDI1NSksZj1GKEQucm91bmQoZiksMjU1KSxnPUYoRShnLDAp LDEpLGo9e3I6YixnOmQsYjpmLHRvU3RyaW5nOlp9LGouaGV4PSIjIisoMTY3 NzcyMTZ8ZnxkPDw4fGI8PDE2KS50b1N0cmluZygxNikuc2xpY2UoMSksai5v cGFjaXR5PWUoZywiZmluaXRlIik/ZzoxLGopKTp7cjotMSxnOi0xLGI6LTEs aGV4OiJub25lIixlcnJvcjoxLHRvU3RyaW5nOlp9fSxjKSxjLmhzYj1pKGZ1 bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5oc2IycmdiKGEsYixkKS5oZXh9KSxj LmhzbD1pKGZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5oc2wycmdiKGEsYixk KS5oZXh9KSxjLnJnYj1pKGZ1bmN0aW9uKGEsYixjLGQpe2lmKGUoZCwiZmlu aXRlIikpe3ZhciBmPUQucm91bmQ7cmV0dXJuInJnYmEoIitbZihhKSxmKGIp LGYoYyksK2QudG9GaXhlZCgyKV0rIikifXJldHVybiIjIisoMTY3NzcyMTZ8 Y3xiPDw4fGE8PDE2KS50b1N0cmluZygxNikuc2xpY2UoMSl9KTt2YXIgVz1m dW5jdGlvbihhKXt2YXIgYj15LmRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgi aGVhZCIpWzBdfHx5LmRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilb MF0sYz0icmdiKDI1NSwgMCwgMCkiO3JldHVybihXPWkoZnVuY3Rpb24oYSl7 aWYoInJlZCI9PWEudG9Mb3dlckNhc2UoKSlyZXR1cm4gYztiLnN0eWxlLmNv bG9yPWMsYi5zdHlsZS5jb2xvcj1hO3ZhciBkPXkuZG9jLmRlZmF1bHRWaWV3 LmdldENvbXB1dGVkU3R5bGUoYixJKS5nZXRQcm9wZXJ0eVZhbHVlKCJjb2xv ciIpO3JldHVybiBkPT1jP251bGw6ZH0pKShhKX0sWD1mdW5jdGlvbigpe3Jl dHVybiJoc2IoIitbdGhpcy5oLHRoaXMucyx0aGlzLmJdKyIpIn0sWT1mdW5j dGlvbigpe3JldHVybiJoc2woIitbdGhpcy5oLHRoaXMucyx0aGlzLmxdKyIp In0sWj1mdW5jdGlvbigpe3JldHVybiAxPT10aGlzLm9wYWNpdHl8fG51bGw9 PXRoaXMub3BhY2l0eT90aGlzLmhleDoicmdiYSgiK1t0aGlzLnIsdGhpcy5n LHRoaXMuYix0aGlzLm9wYWNpdHldKyIpIn0sJD1mdW5jdGlvbihhLGIsZCl7 aWYobnVsbD09YiYmZShhLCJvYmplY3QiKSYmInIiaW4gYSYmImciaW4gYSYm ImIiaW4gYSYmKGQ9YS5iLGI9YS5nLGE9YS5yKSxudWxsPT1iJiZlKGEsc3Ry aW5nKSl7dmFyIGY9Yy5nZXRSR0IoYSk7YT1mLnIsYj1mLmcsZD1mLmJ9cmV0 dXJuKGE+MXx8Yj4xfHxkPjEpJiYoYS89MjU1LGIvPTI1NSxkLz0yNTUpLFth LGIsZF19LF89ZnVuY3Rpb24oYSxiLGQsZil7YT1ELnJvdW5kKDI1NSphKSxi PUQucm91bmQoMjU1KmIpLGQ9RC5yb3VuZCgyNTUqZCk7dmFyIGc9e3I6YSxn OmIsYjpkLG9wYWNpdHk6ZShmLCJmaW5pdGUiKT9mOjEsaGV4OmMucmdiKGEs YixkKSx0b1N0cmluZzpafTtyZXR1cm4gZShmLCJmaW5pdGUiKSYmKGcub3Bh Y2l0eT1mKSxnfTtjLmNvbG9yPWZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBl KGEsIm9iamVjdCIpJiYiaCJpbiBhJiYicyJpbiBhJiYiYiJpbiBhPyhiPWMu aHNiMnJnYihhKSxhLnI9Yi5yLGEuZz1iLmcsYS5iPWIuYixhLm9wYWNpdHk9 MSxhLmhleD1iLmhleCk6ZShhLCJvYmplY3QiKSYmImgiaW4gYSYmInMiaW4g YSYmImwiaW4gYT8oYj1jLmhzbDJyZ2IoYSksYS5yPWIucixhLmc9Yi5nLGEu Yj1iLmIsYS5vcGFjaXR5PTEsYS5oZXg9Yi5oZXgpOihlKGEsInN0cmluZyIp JiYoYT1jLmdldFJHQihhKSksZShhLCJvYmplY3QiKSYmInIiaW4gYSYmImci aW4gYSYmImIiaW4gYSYmISgiZXJyb3IiaW4gYSk/KGI9Yy5yZ2IyaHNsKGEp LGEuaD1iLmgsYS5zPWIucyxhLmw9Yi5sLGI9Yy5yZ2IyaHNiKGEpLGEudj1i LmIpOihhPXtoZXg6Im5vbmUifSxhLnI9YS5nPWEuYj1hLmg9YS5zPWEudj1h Lmw9LTEsYS5lcnJvcj0xKSksYS50b1N0cmluZz1aLGF9LGMuaHNiMnJnYj1m dW5jdGlvbihhLGIsYyxkKXtlKGEsIm9iamVjdCIpJiYiaCJpbiBhJiYicyJp biBhJiYiYiJpbiBhJiYoYz1hLmIsYj1hLnMsZD1hLm8sYT1hLmgpLGEqPTM2 MDt2YXIgZixnLGgsaSxqO3JldHVybiBhPWElMzYwLzYwLGo9YypiLGk9aioo MS1HKGElMi0xKSksZj1nPWg9Yy1qLGE9fn5hLGYrPVtqLGksMCwwLGksal1b YV0sZys9W2ksaixqLGksMCwwXVthXSxoKz1bMCwwLGksaixqLGldW2FdLF8o ZixnLGgsZCl9LGMuaHNsMnJnYj1mdW5jdGlvbihhLGIsYyxkKXtlKGEsIm9i amVjdCIpJiYiaCJpbiBhJiYicyJpbiBhJiYibCJpbiBhJiYoYz1hLmwsYj1h LnMsYT1hLmgpLChhPjF8fGI+MXx8Yz4xKSYmKGEvPTM2MCxiLz0xMDAsYy89 MTAwKSxhKj0zNjA7dmFyIGYsZyxoLGksajtyZXR1cm4gYT1hJTM2MC82MCxq PTIqYiooLjU+Yz9jOjEtYyksaT1qKigxLUcoYSUyLTEpKSxmPWc9aD1jLWov MixhPX5+YSxmKz1baixpLDAsMCxpLGpdW2FdLGcrPVtpLGosaixpLDAsMF1b YV0saCs9WzAsMCxpLGosaixpXVthXSxfKGYsZyxoLGQpfSxjLnJnYjJoc2I9 ZnVuY3Rpb24oYSxiLGMpe2M9JChhLGIsYyksYT1jWzBdLGI9Y1sxXSxjPWNb Ml07dmFyIGQsZSxmLGc7cmV0dXJuIGY9RShhLGIsYyksZz1mLUYoYSxiLGMp LGQ9MD09Zz9udWxsOmY9PWE/KGItYykvZzpmPT1iPyhjLWEpL2crMjooYS1i KS9nKzQsZD0oZCszNjApJTYqNjAvMzYwLGU9MD09Zz8wOmcvZix7aDpkLHM6 ZSxiOmYsdG9TdHJpbmc6WH19LGMucmdiMmhzbD1mdW5jdGlvbihhLGIsYyl7 Yz0kKGEsYixjKSxhPWNbMF0sYj1jWzFdLGM9Y1syXTt2YXIgZCxlLGYsZyxo LGk7cmV0dXJuIGc9RShhLGIsYyksaD1GKGEsYixjKSxpPWctaCxkPTA9PWk/ bnVsbDpnPT1hPyhiLWMpL2k6Zz09Yj8oYy1hKS9pKzI6KGEtYikvaSs0LGQ9 KGQrMzYwKSU2KjYwLzM2MCxmPShnK2gpLzIsZT0wPT1pPzA6LjU+Zj9pLygy KmYpOmkvKDItMipmKSx7aDpkLHM6ZSxsOmYsdG9TdHJpbmc6WX19LGMucGFy c2VQYXRoU3RyaW5nPWZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiBudWxsO3Zh ciBiPWMucGF0aChhKTtpZihiLmFycilyZXR1cm4gYy5wYXRoLmNsb25lKGIu YXJyKTt2YXIgZD17YTo3LGM6NixvOjIsaDoxLGw6MixtOjIscjo0LHE6NCxz OjQsdDoyLHY6MSx1OjMsejowfSxmPVtdO3JldHVybiBlKGEsImFycmF5Iikm JmUoYVswXSwiYXJyYXkiKSYmKGY9Yy5wYXRoLmNsb25lKGEpKSxmLmxlbmd0 aHx8QShhKS5yZXBsYWNlKE4sZnVuY3Rpb24oYSxiLGMpe3ZhciBlPVtdLGc9 Yi50b0xvd2VyQ2FzZSgpO2lmKGMucmVwbGFjZShQLGZ1bmN0aW9uKGEsYil7 YiYmZS5wdXNoKCtiKX0pLCJtIj09ZyYmZS5sZW5ndGg+MiYmKGYucHVzaChb Yl0uY29uY2F0KGUuc3BsaWNlKDAsMikpKSxnPSJsIixiPSJtIj09Yj8ibCI6 IkwiKSwibyI9PWcmJjE9PWUubGVuZ3RoJiZmLnB1c2goW2IsZVswXV0pLCJy Ij09ZylmLnB1c2goW2JdLmNvbmNhdChlKSk7ZWxzZSBmb3IoO2UubGVuZ3Ro Pj1kW2ddJiYoZi5wdXNoKFtiXS5jb25jYXQoZS5zcGxpY2UoMCxkW2ddKSkp LGRbZ10pOyk7fSksZi50b1N0cmluZz1jLnBhdGgudG9TdHJpbmcsYi5hcnI9 Yy5wYXRoLmNsb25lKGYpLGZ9O3ZhciBhYj1jLnBhcnNlVHJhbnNmb3JtU3Ry aW5nPWZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiBudWxsO3ZhciBiPVtdO3Jl dHVybiBlKGEsImFycmF5IikmJmUoYVswXSwiYXJyYXkiKSYmKGI9Yy5wYXRo LmNsb25lKGEpKSxiLmxlbmd0aHx8QShhKS5yZXBsYWNlKE8sZnVuY3Rpb24o YSxjLGQpe3t2YXIgZT1bXTtjLnRvTG93ZXJDYXNlKCl9ZC5yZXBsYWNlKFAs ZnVuY3Rpb24oYSxiKXtiJiZlLnB1c2goK2IpfSksYi5wdXNoKFtjXS5jb25j YXQoZSkpfSksYi50b1N0cmluZz1jLnBhdGgudG9TdHJpbmcsYn07Yy5fLnN2 Z1RyYW5zZm9ybTJzdHJpbmc9bSxjLl8ucmdUcmFuc2Zvcm09L15bYS16XVtc c10qLT9cLj9cZC9pLGMuXy50cmFuc2Zvcm0ybWF0cml4PW4sYy5fdW5pdDJw eD1xO3kuZG9jLmNvbnRhaW5zfHx5LmRvYy5jb21wYXJlRG9jdW1lbnRQb3Np dGlvbj9mdW5jdGlvbihhLGIpe3ZhciBjPTk9PWEubm9kZVR5cGU/YS5kb2N1 bWVudEVsZW1lbnQ6YSxkPWImJmIucGFyZW50Tm9kZTtyZXR1cm4gYT09ZHx8 ISghZHx8MSE9ZC5ub2RlVHlwZXx8IShjLmNvbnRhaW5zP2MuY29udGFpbnMo ZCk6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmYS5jb21wYXJlRG9j dW1lbnRQb3NpdGlvbihkKSkpfTpmdW5jdGlvbihhLGIpe2lmKGIpZm9yKDti OylpZihiPWIucGFyZW50Tm9kZSxiPT1hKXJldHVybiEwO3JldHVybiExfTtj Ll8uZ2V0U29tZURlZnM9byxjLl8uZ2V0U29tZVNWRz1wLGMuc2VsZWN0PWZ1 bmN0aW9uKGEpe3JldHVybiBhPUEoYSkucmVwbGFjZSgvKFteXFxdKTovZywi JDFcXDoiKSx3KHkuZG9jLnF1ZXJ5U2VsZWN0b3IoYSkpfSxjLnNlbGVjdEFs bD1mdW5jdGlvbihhKXtmb3IodmFyIGI9eS5kb2MucXVlcnlTZWxlY3RvckFs bChhKSxkPShjLnNldHx8QXJyYXkpKCksZT0wO2U8Yi5sZW5ndGg7ZSsrKWQu cHVzaCh3KGJbZV0pKTtyZXR1cm4gZH0sc2V0SW50ZXJ2YWwoZnVuY3Rpb24o KXtmb3IodmFyIGEgaW4gVilpZihWW3pdKGEpKXt2YXIgYj1WW2FdLGM9Yi5u b2RlOygic3ZnIiE9Yi50eXBlJiYhYy5vd25lclNWR0VsZW1lbnR8fCJzdmci PT1iLnR5cGUmJighYy5wYXJlbnROb2RlfHwib3duZXJTVkdFbGVtZW50Imlu IGMucGFyZW50Tm9kZSYmIWMub3duZXJTVkdFbGVtZW50KSkmJmRlbGV0ZSBW W2FdfX0sMWU0KSxzLnByb3RvdHlwZS5hdHRyPWZ1bmN0aW9uKGEsYyl7dmFy IGQ9dGhpcyxmPWQubm9kZTtpZighYSl7aWYoMSE9Zi5ub2RlVHlwZSlyZXR1 cm57dGV4dDpmLm5vZGVWYWx1ZX07Zm9yKHZhciBnPWYuYXR0cmlidXRlcyxo PXt9LGk9MCxqPWcubGVuZ3RoO2o+aTtpKyspaFtnW2ldLm5vZGVOYW1lXT1n W2ldLm5vZGVWYWx1ZTtyZXR1cm4gaH1pZihlKGEsInN0cmluZyIpKXtpZigh KGFyZ3VtZW50cy5sZW5ndGg+MSkpcmV0dXJuIGIoInNuYXAudXRpbC5nZXRh dHRyLiIrYSxkKS5maXJzdERlZmluZWQoKTt2YXIgaz17fTtrW2FdPWMsYT1r fWZvcih2YXIgbCBpbiBhKWFbel0obCkmJmIoInNuYXAudXRpbC5hdHRyLiIr bCxkLGFbbF0pO3JldHVybiBkfSxjLnBhcnNlPWZ1bmN0aW9uKGEpe3ZhciBi PXkuZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxjPSEwLGQ9eS5kb2Mu Y3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoYT1BKGEpLGEubWF0Y2goL15ccyo8 XHMqc3ZnKD86XHN8PikvKXx8KGE9Ijxzdmc+IithKyI8L3N2Zz4iLGM9ITEp LGQuaW5uZXJIVE1MPWEsYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmci KVswXSlpZihjKWI9YTtlbHNlIGZvcig7YS5maXJzdENoaWxkOyliLmFwcGVu ZENoaWxkKGEuZmlyc3RDaGlsZCk7cmV0dXJuIG5ldyB0KGIpfSxjLmZyYWdt ZW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPUFycmF5LnByb3RvdHlwZS5zbGlj ZS5jYWxsKGFyZ3VtZW50cywwKSxiPXkuZG9jLmNyZWF0ZURvY3VtZW50RnJh Z21lbnQoKSxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKXt2YXIgZj1hW2RdO2Yu bm9kZSYmZi5ub2RlLm5vZGVUeXBlJiZiLmFwcGVuZENoaWxkKGYubm9kZSks Zi5ub2RlVHlwZSYmYi5hcHBlbmRDaGlsZChmKSwic3RyaW5nIj09dHlwZW9m IGYmJmIuYXBwZW5kQ2hpbGQoYy5wYXJzZShmKS5ub2RlKX1yZXR1cm4gbmV3 IHQoYil9LGMuXy5tYWtlPXUsYy5fLndyYXA9dyx2LnByb3RvdHlwZS5lbD1m dW5jdGlvbihhLGIpe3ZhciBjPXUoYSx0aGlzLm5vZGUpO3JldHVybiBiJiZj LmF0dHIoYiksY30scy5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oKXtm b3IodmFyIGE9W10sYj10aGlzLm5vZGUuY2hpbGROb2RlcyxkPTAsZT1iLmxl bmd0aDtlPmQ7ZCsrKWFbZF09YyhiW2RdKTtyZXR1cm4gYX0scy5wcm90b3R5 cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHgoW3RoaXNd LGEpLGFbMF19LGIub24oInNuYXAudXRpbC5nZXRhdHRyIixmdW5jdGlvbigp e3ZhciBhPWIubnQoKTthPWEuc3Vic3RyaW5nKGEubGFzdEluZGV4T2YoIi4i KSsxKTt2YXIgYz1hLnJlcGxhY2UoL1tBLVpdL2csZnVuY3Rpb24oYSl7cmV0 dXJuIi0iK2EudG9Mb3dlckNhc2UoKX0pO3JldHVybiBiYlt6XShjKT90aGlz Lm5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0 eWxlKHRoaXMubm9kZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGMpOmQodGhp cy5ub2RlLGEpfSk7dmFyIGJiPXsiYWxpZ25tZW50LWJhc2VsaW5lIjowLCJi YXNlbGluZS1zaGlmdCI6MCxjbGlwOjAsImNsaXAtcGF0aCI6MCwiY2xpcC1y dWxlIjowLGNvbG9yOjAsImNvbG9yLWludGVycG9sYXRpb24iOjAsImNvbG9y LWludGVycG9sYXRpb24tZmlsdGVycyI6MCwiY29sb3ItcHJvZmlsZSI6MCwi Y29sb3ItcmVuZGVyaW5nIjowLGN1cnNvcjowLGRpcmVjdGlvbjowLGRpc3Bs YXk6MCwiZG9taW5hbnQtYmFzZWxpbmUiOjAsImVuYWJsZS1iYWNrZ3JvdW5k IjowLGZpbGw6MCwiZmlsbC1vcGFjaXR5IjowLCJmaWxsLXJ1bGUiOjAsZmls dGVyOjAsImZsb29kLWNvbG9yIjowLCJmbG9vZC1vcGFjaXR5IjowLGZvbnQ6 MCwiZm9udC1mYW1pbHkiOjAsImZvbnQtc2l6ZSI6MCwiZm9udC1zaXplLWFk anVzdCI6MCwiZm9udC1zdHJldGNoIjowLCJmb250LXN0eWxlIjowLCJmb250 LXZhcmlhbnQiOjAsImZvbnQtd2VpZ2h0IjowLCJnbHlwaC1vcmllbnRhdGlv bi1ob3Jpem9udGFsIjowLCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCI6 MCwiaW1hZ2UtcmVuZGVyaW5nIjowLGtlcm5pbmc6MCwibGV0dGVyLXNwYWNp bmciOjAsImxpZ2h0aW5nLWNvbG9yIjowLG1hcmtlcjowLCJtYXJrZXItZW5k IjowLCJtYXJrZXItbWlkIjowLCJtYXJrZXItc3RhcnQiOjAsbWFzazowLG9w YWNpdHk6MCxvdmVyZmxvdzowLCJwb2ludGVyLWV2ZW50cyI6MCwic2hhcGUt cmVuZGVyaW5nIjowLCJzdG9wLWNvbG9yIjowLCJzdG9wLW9wYWNpdHkiOjAs c3Ryb2tlOjAsInN0cm9rZS1kYXNoYXJyYXkiOjAsInN0cm9rZS1kYXNob2Zm c2V0IjowLCJzdHJva2UtbGluZWNhcCI6MCwic3Ryb2tlLWxpbmVqb2luIjow LCJzdHJva2UtbWl0ZXJsaW1pdCI6MCwic3Ryb2tlLW9wYWNpdHkiOjAsInN0 cm9rZS13aWR0aCI6MCwidGV4dC1hbmNob3IiOjAsInRleHQtZGVjb3JhdGlv biI6MCwidGV4dC1yZW5kZXJpbmciOjAsInVuaWNvZGUtYmlkaSI6MCx2aXNp YmlsaXR5OjAsIndvcmQtc3BhY2luZyI6MCwid3JpdGluZy1tb2RlIjowfTti Lm9uKCJzbmFwLnV0aWwuYXR0ciIsZnVuY3Rpb24oYSl7dmFyIGM9Yi5udCgp LGU9e307Yz1jLnN1YnN0cmluZyhjLmxhc3RJbmRleE9mKCIuIikrMSksZVtj XT1hO3ZhciBmPWMucmVwbGFjZSgvLShcdykvZ2ksZnVuY3Rpb24oYSxiKXty ZXR1cm4gYi50b1VwcGVyQ2FzZSgpfSksZz1jLnJlcGxhY2UoL1tBLVpdL2cs ZnVuY3Rpb24oYSl7cmV0dXJuIi0iK2EudG9Mb3dlckNhc2UoKX0pO2JiW3pd KGcpP3RoaXMubm9kZS5zdHlsZVtmXT1udWxsPT1hP0k6YTpkKHRoaXMubm9k ZSxlKX0pLGZ1bmN0aW9uKCl7fSh2LnByb3RvdHlwZSksYy5hamF4PWZ1bmN0 aW9uKGEsYyxkLGYpe3ZhciBnPW5ldyBYTUxIdHRwUmVxdWVzdCxoPVMoKTtp ZihnKXtpZihlKGMsImZ1bmN0aW9uIikpZj1kLGQ9YyxjPW51bGw7ZWxzZSBp ZihlKGMsIm9iamVjdCIpKXt2YXIgaT1bXTtmb3IodmFyIGogaW4gYyljLmhh c093blByb3BlcnR5KGopJiZpLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGop KyI9IitlbmNvZGVVUklDb21wb25lbnQoY1tqXSkpO2M9aS5qb2luKCImIil9 cmV0dXJuIGcub3BlbihjPyJQT1NUIjoiR0VUIixhLCEwKSxjJiYoZy5zZXRS ZXF1ZXN0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVl c3QiKSxnLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxp Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpKSxkJiYoYi5vbmNlKCJz bmFwLmFqYXguIitoKyIuMCIsZCksYi5vbmNlKCJzbmFwLmFqYXguIitoKyIu MjAwIixkKSxiLm9uY2UoInNuYXAuYWpheC4iK2grIi4zMDQiLGQpKSxnLm9u cmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PWcucmVhZHlTdGF0ZSYm Yigic25hcC5hamF4LiIraCsiLiIrZy5zdGF0dXMsZixnKX0sND09Zy5yZWFk eVN0YXRlP2c6KGcuc2VuZChjKSxnKX19LGMubG9hZD1mdW5jdGlvbihhLGIs ZCl7Yy5hamF4KGEsZnVuY3Rpb24oYSl7dmFyIGU9Yy5wYXJzZShhLnJlc3Bv bnNlVGV4dCk7ZD9iLmNhbGwoZCxlKTpiKGUpfSl9O3ZhciBjYj1mdW5jdGlv bihhKXt2YXIgYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9YS5vd25l ckRvY3VtZW50LGQ9Yy5ib2R5LGU9Yy5kb2N1bWVudEVsZW1lbnQsZj1lLmNs aWVudFRvcHx8ZC5jbGllbnRUb3B8fDAsaD1lLmNsaWVudExlZnR8fGQuY2xp ZW50TGVmdHx8MCxpPWIudG9wKyhnLndpbi5wYWdlWU9mZnNldHx8ZS5zY3Jv bGxUb3B8fGQuc2Nyb2xsVG9wKS1mLGo9Yi5sZWZ0KyhnLndpbi5wYWdlWE9m ZnNldHx8ZS5zY3JvbGxMZWZ0fHxkLnNjcm9sbExlZnQpLWg7cmV0dXJue3k6 aSx4Omp9fTtyZXR1cm4gYy5nZXRFbGVtZW50QnlQb2ludD1mdW5jdGlvbihh LGIpe3ZhciBjPXRoaXMsZD0oYy5jYW52YXMseS5kb2MuZWxlbWVudEZyb21Q b2ludChhLGIpKTtpZih5Lndpbi5vcGVyYSYmInN2ZyI9PWQudGFnTmFtZSl7 dmFyIGU9Y2IoZCksZj1kLmNyZWF0ZVNWR1JlY3QoKTtmLng9YS1lLngsZi55 PWItZS55LGYud2lkdGg9Zi5oZWlnaHQ9MTt2YXIgZz1kLmdldEludGVyc2Vj dGlvbkxpc3QoZixudWxsKTtnLmxlbmd0aCYmKGQ9Z1tnLmxlbmd0aC0xXSl9 cmV0dXJuIGQ/dyhkKTpudWxsfSxjLnBsdWdpbj1mdW5jdGlvbihhKXthKGMs cyx2LHksdCl9LHkud2luLlNuYXA9YyxjfShhfHx0aGlzKTtyZXR1cm4gZC5w bHVnaW4oZnVuY3Rpb24oZCxlLGYsZyxoKXtmdW5jdGlvbiBpKGEsYil7aWYo bnVsbD09Yil7dmFyIGM9ITA7aWYoYj1hLm5vZGUuZ2V0QXR0cmlidXRlKCJs aW5lYXJHcmFkaWVudCI9PWEudHlwZXx8InJhZGlhbEdyYWRpZW50Ij09YS50 eXBlPyJncmFkaWVudFRyYW5zZm9ybSI6InBhdHRlcm4iPT1hLnR5cGU/InBh dHRlcm5UcmFuc2Zvcm0iOiJ0cmFuc2Zvcm0iKSwhYilyZXR1cm4gbmV3IGQu TWF0cml4O2I9ZC5fLnN2Z1RyYW5zZm9ybTJzdHJpbmcoYil9ZWxzZSBiPWQu Xy5yZ1RyYW5zZm9ybS50ZXN0KGIpP28oYikucmVwbGFjZSgvXC57M318XHUy MDI2L2csYS5fLnRyYW5zZm9ybXx8IiIpOmQuXy5zdmdUcmFuc2Zvcm0yc3Ry aW5nKGIpLG4oYiwiYXJyYXkiKSYmKGI9ZC5wYXRoP2QucGF0aC50b1N0cmlu Zy5jYWxsKGIpOm8oYikpLGEuXy50cmFuc2Zvcm09Yjt2YXIgZT1kLl8udHJh bnNmb3JtMm1hdHJpeChiLGEuZ2V0QkJveCgxKSk7cmV0dXJuIGM/ZTp2b2lk KGEubWF0cml4PWUpfWZ1bmN0aW9uIGooYSl7ZnVuY3Rpb24gYihhLGIpe3Zh ciBjPXEoYS5ub2RlLGIpO2M9YyYmYy5tYXRjaChmKSxjPWMmJmNbMl0sYyYm IiMiPT1jLmNoYXJBdCgpJiYoYz1jLnN1YnN0cmluZygxKSxjJiYoaFtjXT0o aFtjXXx8W10pLmNvbmNhdChmdW5jdGlvbihjKXt2YXIgZD17fTtkW2JdPVVS TChjKSxxKGEubm9kZSxkKX0pKSl9ZnVuY3Rpb24gYyhhKXt2YXIgYj1xKGEu bm9kZSwieGxpbms6aHJlZiIpO2ImJiIjIj09Yi5jaGFyQXQoKSYmKGI9Yi5z dWJzdHJpbmcoMSksYiYmKGhbYl09KGhbYl18fFtdKS5jb25jYXQoZnVuY3Rp b24oYil7YS5hdHRyKCJ4bGluazpocmVmIiwiIyIrYil9KSkpfWZvcih2YXIg ZCxlPWEuc2VsZWN0QWxsKCIqIiksZj0vXlxzKnVybFwoKCJ8J3wpKC4qKVwx XClccyokLyxnPVtdLGg9e30saT0wLGo9ZS5sZW5ndGg7aj5pO2krKyl7ZD1l W2ldLGIoZCwiZmlsbCIpLGIoZCwic3Ryb2tlIiksYihkLCJmaWx0ZXIiKSxi KGQsIm1hc2siKSxiKGQsImNsaXAtcGF0aCIpLGMoZCk7dmFyIGs9cShkLm5v ZGUsImlkIik7ayYmKHEoZC5ub2RlLHtpZDpkLmlkfSksZy5wdXNoKHtvbGQ6 ayxpZDpkLmlkfSkpfWZvcihpPTAsaj1nLmxlbmd0aDtqPmk7aSsrKXt2YXIg bD1oW2dbaV0ub2xkXTtpZihsKWZvcih2YXIgbT0wLG49bC5sZW5ndGg7bj5t O20rKylsW21dKGdbaV0uaWQpfX1mdW5jdGlvbiBrKGEsYixjKXtyZXR1cm4g ZnVuY3Rpb24oZCl7dmFyIGU9ZC5zbGljZShhLGIpO3JldHVybiAxPT1lLmxl bmd0aCYmKGU9ZVswXSksYz9jKGUpOmV9fWZ1bmN0aW9uIGwoYSl7cmV0dXJu IGZ1bmN0aW9uKCl7dmFyIGI9YT8iPCIrdGhpcy50eXBlOiIiLGM9dGhpcy5u b2RlLmF0dHJpYnV0ZXMsZD10aGlzLm5vZGUuY2hpbGROb2RlcztpZihhKWZv cih2YXIgZT0wLGY9Yy5sZW5ndGg7Zj5lO2UrKyliKz0iICIrY1tlXS5uYW1l Kyc9IicrY1tlXS52YWx1ZS5yZXBsYWNlKC8iL2csJ1xcIicpKyciJztpZihk Lmxlbmd0aCl7Zm9yKGEmJihiKz0iPiIpLGU9MCxmPWQubGVuZ3RoO2Y+ZTtl KyspMz09ZFtlXS5ub2RlVHlwZT9iKz1kW2VdLm5vZGVWYWx1ZToxPT1kW2Vd Lm5vZGVUeXBlJiYoYis9dShkW2VdKS50b1N0cmluZygpKTthJiYoYis9Ijwv Iit0aGlzLnR5cGUrIj4iKX1lbHNlIGEmJihiKz0iLz4iKTtyZXR1cm4gYn19 dmFyIG09ZS5wcm90b3R5cGUsbj1kLmlzLG89U3RyaW5nLHA9ZC5fdW5pdDJw eCxxPWQuXy4kLHI9ZC5fLm1ha2Uscz1kLl8uZ2V0U29tZURlZnMsdD0iaGFz T3duUHJvcGVydHkiLHU9ZC5fLndyYXA7bS5nZXRCQm94PWZ1bmN0aW9uKGEp e2lmKCFkLk1hdHJpeHx8IWQucGF0aClyZXR1cm4gdGhpcy5ub2RlLmdldEJC b3goKTt2YXIgYj10aGlzLGM9bmV3IGQuTWF0cml4O2lmKGIucmVtb3ZlZCly ZXR1cm4gZC5fLmJveCgpO2Zvcig7InVzZSI9PWIudHlwZTspaWYoYXx8KGM9 Yy5hZGQoYi50cmFuc2Zvcm0oKS5sb2NhbE1hdHJpeC50cmFuc2xhdGUoYi5h dHRyKCJ4Iil8fDAsYi5hdHRyKCJ5Iil8fDApKSksYi5vcmlnaW5hbCliPWIu b3JpZ2luYWw7ZWxzZXt2YXIgZT1iLmF0dHIoInhsaW5rOmhyZWYiKTtiPWIu b3JpZ2luYWw9Yi5ub2RlLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo ZS5zdWJzdHJpbmcoZS5pbmRleE9mKCIjIikrMSkpfXZhciBmPWIuXyxnPWQu cGF0aC5nZXRbYi50eXBlXXx8ZC5wYXRoLmdldC5kZWZsdDt0cnl7cmV0dXJu IGE/KGYuYmJveHd0PWc/ZC5wYXRoLmdldEJCb3goYi5yZWFsUGF0aD1nKGIp KTpkLl8uYm94KGIubm9kZS5nZXRCQm94KCkpLGQuXy5ib3goZi5iYm94d3Qp KTooYi5yZWFsUGF0aD1nKGIpLGIubWF0cml4PWIudHJhbnNmb3JtKCkubG9j YWxNYXRyaXgsZi5iYm94PWQucGF0aC5nZXRCQm94KGQucGF0aC5tYXAoYi5y ZWFsUGF0aCxjLmFkZChiLm1hdHJpeCkpKSxkLl8uYm94KGYuYmJveCkpfWNh dGNoKGgpe3JldHVybiBkLl8uYm94KCl9fTt2YXIgdj1mdW5jdGlvbigpe3Jl dHVybiB0aGlzLnN0cmluZ307bS50cmFuc2Zvcm09ZnVuY3Rpb24oYSl7dmFy IGI9dGhpcy5fO2lmKG51bGw9PWEpe2Zvcih2YXIgYyxlPXRoaXMsZj1uZXcg ZC5NYXRyaXgodGhpcy5ub2RlLmdldENUTSgpKSxnPWkodGhpcyksaD1bZ10s aj1uZXcgZC5NYXRyaXgsaz1nLnRvVHJhbnNmb3JtU3RyaW5nKCksbD1vKGcp PT1vKHRoaXMubWF0cml4KT9vKGIudHJhbnNmb3JtKTprOyJzdmciIT1lLnR5 cGUmJihlPWUucGFyZW50KCkpOyloLnB1c2goaShlKSk7Zm9yKGM9aC5sZW5n dGg7Yy0tOylqLmFkZChoW2NdKTtyZXR1cm57c3RyaW5nOmwsZ2xvYmFsTWF0 cml4OmYsdG90YWxNYXRyaXg6aixsb2NhbE1hdHJpeDpnLGRpZmZNYXRyaXg6 Zi5jbG9uZSgpLmFkZChnLmludmVydCgpKSxnbG9iYWw6Zi50b1RyYW5zZm9y bVN0cmluZygpLHRvdGFsOmoudG9UcmFuc2Zvcm1TdHJpbmcoKSxsb2NhbDpr LHRvU3RyaW5nOnZ9fXJldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KHRo aXMubWF0cml4PWEsdGhpcy5fLnRyYW5zZm9ybT1hLnRvVHJhbnNmb3JtU3Ry aW5nKCkpOmkodGhpcyxhKSx0aGlzLm5vZGUmJigibGluZWFyR3JhZGllbnQi PT10aGlzLnR5cGV8fCJyYWRpYWxHcmFkaWVudCI9PXRoaXMudHlwZT9xKHRo aXMubm9kZSx7Z3JhZGllbnRUcmFuc2Zvcm06dGhpcy5tYXRyaXh9KToicGF0 dGVybiI9PXRoaXMudHlwZT9xKHRoaXMubm9kZSx7cGF0dGVyblRyYW5zZm9y bTp0aGlzLm1hdHJpeH0pOnEodGhpcy5ub2RlLHt0cmFuc2Zvcm06dGhpcy5t YXRyaXh9KSksdGhpc30sbS5wYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0 aGlzLm5vZGUucGFyZW50Tm9kZSl9LG0uYXBwZW5kPW0uYWRkPWZ1bmN0aW9u KGEpe2lmKGEpe2lmKCJzZXQiPT1hLnR5cGUpe3ZhciBiPXRoaXM7cmV0dXJu IGEuZm9yRWFjaChmdW5jdGlvbihhKXtiLmFkZChhKX0pLHRoaXN9YT11KGEp LHRoaXMubm9kZS5hcHBlbmRDaGlsZChhLm5vZGUpLGEucGFwZXI9dGhpcy5w YXBlcn1yZXR1cm4gdGhpc30sbS5hcHBlbmRUbz1mdW5jdGlvbihhKXtyZXR1 cm4gYSYmKGE9dShhKSxhLmFwcGVuZCh0aGlzKSksdGhpc30sbS5wcmVwZW5k PWZ1bmN0aW9uKGEpe2lmKGEpe2lmKCJzZXQiPT1hLnR5cGUpe3ZhciBiLGM9 dGhpcztyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2I/Yi5hZnRlcihh KTpjLnByZXBlbmQoYSksYj1hfSksdGhpc31hPXUoYSk7dmFyIGQ9YS5wYXJl bnQoKTt0aGlzLm5vZGUuaW5zZXJ0QmVmb3JlKGEubm9kZSx0aGlzLm5vZGUu Zmlyc3RDaGlsZCksdGhpcy5hZGQmJnRoaXMuYWRkKCksYS5wYXBlcj10aGlz LnBhcGVyLHRoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkuYWRkKCksZCYm ZC5hZGQoKX1yZXR1cm4gdGhpc30sbS5wcmVwZW5kVG89ZnVuY3Rpb24oYSl7 cmV0dXJuIGE9dShhKSxhLnByZXBlbmQodGhpcyksdGhpc30sbS5iZWZvcmU9 ZnVuY3Rpb24oYSl7aWYoInNldCI9PWEudHlwZSl7dmFyIGI9dGhpcztyZXR1 cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPWEucGFyZW50KCk7Yi5u b2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEubm9kZSxiLm5vZGUpLGMm JmMuYWRkKCl9KSx0aGlzLnBhcmVudCgpLmFkZCgpLHRoaXN9YT11KGEpO3Zh ciBjPWEucGFyZW50KCk7cmV0dXJuIHRoaXMubm9kZS5wYXJlbnROb2RlLmlu c2VydEJlZm9yZShhLm5vZGUsdGhpcy5ub2RlKSx0aGlzLnBhcmVudCgpJiZ0 aGlzLnBhcmVudCgpLmFkZCgpLGMmJmMuYWRkKCksYS5wYXBlcj10aGlzLnBh cGVyLHRoaXN9LG0uYWZ0ZXI9ZnVuY3Rpb24oYSl7YT11KGEpO3ZhciBiPWEu cGFyZW50KCk7cmV0dXJuIHRoaXMubm9kZS5uZXh0U2libGluZz90aGlzLm5v ZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYS5ub2RlLHRoaXMubm9kZS5u ZXh0U2libGluZyk6dGhpcy5ub2RlLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQo YS5ub2RlKSx0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLmFkZCgpLGIm JmIuYWRkKCksYS5wYXBlcj10aGlzLnBhcGVyLHRoaXN9LG0uaW5zZXJ0QmVm b3JlPWZ1bmN0aW9uKGEpe2E9dShhKTt2YXIgYj10aGlzLnBhcmVudCgpO3Jl dHVybiBhLm5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5ub2Rl LGEubm9kZSksdGhpcy5wYXBlcj1hLnBhcGVyLGImJmIuYWRkKCksYS5wYXJl bnQoKSYmYS5wYXJlbnQoKS5hZGQoKSx0aGlzfSxtLmluc2VydEFmdGVyPWZ1 bmN0aW9uKGEpe2E9dShhKTt2YXIgYj10aGlzLnBhcmVudCgpO3JldHVybiBh Lm5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5ub2RlLGEubm9k ZS5uZXh0U2libGluZyksdGhpcy5wYXBlcj1hLnBhcGVyLGImJmIuYWRkKCks YS5wYXJlbnQoKSYmYS5wYXJlbnQoKS5hZGQoKSx0aGlzfSxtLnJlbW92ZT1m dW5jdGlvbigpe3ZhciBhPXRoaXMucGFyZW50KCk7cmV0dXJuIHRoaXMubm9k ZS5wYXJlbnROb2RlJiZ0aGlzLm5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGls ZCh0aGlzLm5vZGUpLGRlbGV0ZSB0aGlzLnBhcGVyLHRoaXMucmVtb3ZlZD0h MCxhJiZhLmFkZCgpLHRoaXN9LG0uc2VsZWN0PWZ1bmN0aW9uKGEpe3JldHVy biB1KHRoaXMubm9kZS5xdWVyeVNlbGVjdG9yKGEpKX0sbS5zZWxlY3RBbGw9 ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMubm9kZS5xdWVyeVNlbGVjdG9y QWxsKGEpLGM9KGQuc2V0fHxBcnJheSkoKSxlPTA7ZTxiLmxlbmd0aDtlKysp Yy5wdXNoKHUoYltlXSkpO3JldHVybiBjfSxtLmFzUFg9ZnVuY3Rpb24oYSxi KXtyZXR1cm4gbnVsbD09YiYmKGI9dGhpcy5hdHRyKGEpKSwrcCh0aGlzLGEs Yil9LG0udXNlPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLm5vZGUuaWQ7cmV0 dXJuIGJ8fChiPXRoaXMuaWQscSh0aGlzLm5vZGUse2lkOmJ9KSksYT0ibGlu ZWFyR3JhZGllbnQiPT10aGlzLnR5cGV8fCJyYWRpYWxHcmFkaWVudCI9PXRo aXMudHlwZXx8InBhdHRlcm4iPT10aGlzLnR5cGU/cih0aGlzLnR5cGUsdGhp cy5ub2RlLnBhcmVudE5vZGUpOnIoInVzZSIsdGhpcy5ub2RlLnBhcmVudE5v ZGUpLHEoYS5ub2RlLHsieGxpbms6aHJlZiI6IiMiK2J9KSxhLm9yaWdpbmFs PXRoaXMsYX0sbS5jbG9uZT1mdW5jdGlvbigpe3ZhciBhPXUodGhpcy5ub2Rl LmNsb25lTm9kZSghMCkpO3JldHVybiBxKGEubm9kZSwiaWQiKSYmcShhLm5v ZGUse2lkOmEuaWR9KSxqKGEpLGEuaW5zZXJ0QWZ0ZXIodGhpcyksYX0sbS50 b0RlZnM9ZnVuY3Rpb24oKXt2YXIgYT1zKHRoaXMpO3JldHVybiBhLmFwcGVu ZENoaWxkKHRoaXMubm9kZSksdGhpc30sbS5wYXR0ZXJuPW0udG9QYXR0ZXJu PWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXIoInBhdHRlcm4iLHModGhpcykp O3JldHVybiBudWxsPT1hJiYoYT10aGlzLmdldEJCb3goKSksbihhLCJvYmpl Y3QiKSYmIngiaW4gYSYmKGI9YS55LGM9YS53aWR0aCxkPWEuaGVpZ2h0LGE9 YS54KSxxKGUubm9kZSx7eDphLHk6Yix3aWR0aDpjLGhlaWdodDpkLHBhdHRl cm5Vbml0czoidXNlclNwYWNlT25Vc2UiLGlkOmUuaWQsdmlld0JveDpbYSxi LGMsZF0uam9pbigiICIpfSksZS5ub2RlLmFwcGVuZENoaWxkKHRoaXMubm9k ZSksZX0sbS5tYXJrZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXIo Im1hcmtlciIscyh0aGlzKSk7cmV0dXJuIG51bGw9PWEmJihhPXRoaXMuZ2V0 QkJveCgpKSxuKGEsIm9iamVjdCIpJiYieCJpbiBhJiYoYj1hLnksYz1hLndp ZHRoLGQ9YS5oZWlnaHQsZT1hLnJlZlh8fGEuY3gsZj1hLnJlZll8fGEuY3ks YT1hLngpLHEoZy5ub2RlLHt2aWV3Qm94OlthLGIsYyxkXS5qb2luKCIgIiks bWFya2VyV2lkdGg6YyxtYXJrZXJIZWlnaHQ6ZCxvcmllbnQ6ImF1dG8iLHJl Zlg6ZXx8MCxyZWZZOmZ8fDAsaWQ6Zy5pZH0pLGcubm9kZS5hcHBlbmRDaGls ZCh0aGlzLm5vZGUpLGd9O3ZhciB3PWZ1bmN0aW9uKGEsYixkLGUpeyJmdW5j dGlvbiIhPXR5cGVvZiBkfHxkLmxlbmd0aHx8KGU9ZCxkPWMubGluZWFyKSx0 aGlzLmF0dHI9YSx0aGlzLmR1cj1iLGQmJih0aGlzLmVhc2luZz1kKSxlJiYo dGhpcy5jYWxsYmFjaz1lKX07ZC5fLkFuaW1hdGlvbj13LGQuYW5pbWF0aW9u PWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBuZXcgdyhhLGIsYyxkKX0sbS5p bkFuaW09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9W107Zm9yKHZhciBjIGlu IGEuYW5pbXMpYS5hbmltc1t0XShjKSYmIWZ1bmN0aW9uKGEpe2IucHVzaCh7 YW5pbTpuZXcgdyhhLl9hdHRycyxhLmR1cixhLmVhc2luZyxhLl9jYWxsYmFj ayksbWluYTphLGN1clN0YXR1czphLnN0YXR1cygpLHN0YXR1czpmdW5jdGlv bihiKXtyZXR1cm4gYS5zdGF0dXMoYil9LHN0b3A6ZnVuY3Rpb24oKXthLnN0 b3AoKX19KX0oYS5hbmltc1tjXSk7cmV0dXJuIGJ9LGQuYW5pbWF0ZT1mdW5j dGlvbihhLGQsZSxmLGcsaCl7ImZ1bmN0aW9uIiE9dHlwZW9mIGd8fGcubGVu Z3RofHwoaD1nLGc9Yy5saW5lYXIpO3ZhciBpPWMudGltZSgpLGo9YyhhLGQs aSxpK2YsYy50aW1lLGUsZyk7cmV0dXJuIGgmJmIub25jZSgibWluYS5maW5p c2guIitqLmlkLGgpLGp9LG0uc3RvcD1mdW5jdGlvbigpe2Zvcih2YXIgYT10 aGlzLmluQW5pbSgpLGI9MCxjPWEubGVuZ3RoO2M+YjtiKyspYVtiXS5zdG9w KCk7cmV0dXJuIHRoaXN9LG0uYW5pbWF0ZT1mdW5jdGlvbihhLGQsZSxmKXsi ZnVuY3Rpb24iIT10eXBlb2YgZXx8ZS5sZW5ndGh8fChmPWUsZT1jLmxpbmVh ciksYSBpbnN0YW5jZW9mIHcmJihmPWEuY2FsbGJhY2ssZT1hLmVhc2luZyxk PWEuZHVyLGE9YS5hdHRyKTt2YXIgZyxoLGksaixsPVtdLG09W10scD17fSxx PXRoaXM7Zm9yKHZhciByIGluIGEpaWYoYVt0XShyKSl7cS5lcXVhbD8oaj1x LmVxdWFsKHIsbyhhW3JdKSksZz1qLmZyb20saD1qLnRvLGk9ai5mKTooZz0r cS5hdHRyKHIpLGg9K2Fbcl0pO3ZhciBzPW4oZywiYXJyYXkiKT9nLmxlbmd0 aDoxO3Bbcl09ayhsLmxlbmd0aCxsLmxlbmd0aCtzLGkpLGw9bC5jb25jYXQo ZyksbT1tLmNvbmNhdChoKX12YXIgdT1jLnRpbWUoKSx2PWMobCxtLHUsdStk LGMudGltZSxmdW5jdGlvbihhKXt2YXIgYj17fTtmb3IodmFyIGMgaW4gcClw W3RdKGMpJiYoYltjXT1wW2NdKGEpKTtxLmF0dHIoYil9LGUpO3JldHVybiBx LmFuaW1zW3YuaWRdPXYsdi5fYXR0cnM9YSx2Ll9jYWxsYmFjaz1mLGIoInNu YXAuYW5pbWNyZWF0ZWQuIitxLmlkLHYpLGIub25jZSgibWluYS5maW5pc2gu Iit2LmlkLGZ1bmN0aW9uKCl7ZGVsZXRlIHEuYW5pbXNbdi5pZF0sZiYmZi5j YWxsKHEpfSksYi5vbmNlKCJtaW5hLnN0b3AuIit2LmlkLGZ1bmN0aW9uKCl7 ZGVsZXRlIHEuYW5pbXNbdi5pZF19KSxxfTt2YXIgeD17fTttLmRhdGE9ZnVu Y3Rpb24oYSxjKXt2YXIgZT14W3RoaXMuaWRdPXhbdGhpcy5pZF18fHt9O2lm KDA9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGIoInNuYXAuZGF0YS5nZXQu Iit0aGlzLmlkLHRoaXMsZSxudWxsKSxlOworaWYoMT09YXJndW1lbnRzLmxl bmd0aCl7aWYoZC5pcyhhLCJvYmplY3QiKSl7Zm9yKHZhciBmIGluIGEpYVt0 XShmKSYmdGhpcy5kYXRhKGYsYVtmXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGIo InNuYXAuZGF0YS5nZXQuIit0aGlzLmlkLHRoaXMsZVthXSxhKSxlW2FdfXJl dHVybiBlW2FdPWMsYigic25hcC5kYXRhLnNldC4iK3RoaXMuaWQsdGhpcyxj LGEpLHRoaXN9LG0ucmVtb3ZlRGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gbnVs bD09YT94W3RoaXMuaWRdPXt9OnhbdGhpcy5pZF0mJmRlbGV0ZSB4W3RoaXMu aWRdW2FdLHRoaXN9LG0ub3V0ZXJTVkc9bS50b1N0cmluZz1sKDEpLG0uaW5u ZXJTVkc9bCgpLG0udG9EYXRhVVJMPWZ1bmN0aW9uKCl7aWYoYSYmYS5idG9h KXt2YXIgYj10aGlzLmdldEJCb3goKSxjPWQuZm9ybWF0KCc8c3ZnIHZlcnNp b249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4 bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lk dGg9Int3aWR0aH0iIGhlaWdodD0ie2hlaWdodH0iIHZpZXdCb3g9Int4fSB7 eX0ge3dpZHRofSB7aGVpZ2h0fSI+e2NvbnRlbnRzfTwvc3ZnPicse3g6K2Iu eC50b0ZpeGVkKDMpLHk6K2IueS50b0ZpeGVkKDMpLHdpZHRoOitiLndpZHRo LnRvRml4ZWQoMyksaGVpZ2h0OitiLmhlaWdodC50b0ZpeGVkKDMpLGNvbnRl bnRzOnRoaXMub3V0ZXJTVkcoKX0pO3JldHVybiJkYXRhOmltYWdlL3N2Zyt4 bWw7YmFzZTY0LCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQo YykpKX19LGgucHJvdG90eXBlLnNlbGVjdD1tLnNlbGVjdCxoLnByb3RvdHlw ZS5zZWxlY3RBbGw9bS5zZWxlY3RBbGx9KSxkLnBsdWdpbihmdW5jdGlvbihh KXtmdW5jdGlvbiBiKGEsYixkLGUsZixnKXtyZXR1cm4gbnVsbD09YiYmIltv YmplY3QgU1ZHTWF0cml4XSI9PWMuY2FsbChhKT8odGhpcy5hPWEuYSx0aGlz LmI9YS5iLHRoaXMuYz1hLmMsdGhpcy5kPWEuZCx0aGlzLmU9YS5lLHZvaWQo dGhpcy5mPWEuZikpOnZvaWQobnVsbCE9YT8odGhpcy5hPSthLHRoaXMuYj0r Yix0aGlzLmM9K2QsdGhpcy5kPStlLHRoaXMuZT0rZix0aGlzLmY9K2cpOih0 aGlzLmE9MSx0aGlzLmI9MCx0aGlzLmM9MCx0aGlzLmQ9MSx0aGlzLmU9MCx0 aGlzLmY9MCkpfXZhciBjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZD1T dHJpbmcsZT1NYXRoLGY9IiI7IWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGcoYSl7 cmV0dXJuIGFbMF0qYVswXSthWzFdKmFbMV19ZnVuY3Rpb24gaChhKXt2YXIg Yj1lLnNxcnQoZyhhKSk7YVswXSYmKGFbMF0vPWIpLGFbMV0mJihhWzFdLz1i KX1jLmFkZD1mdW5jdGlvbihhLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbD1b W10sW10sW11dLG09W1t0aGlzLmEsdGhpcy5jLHRoaXMuZV0sW3RoaXMuYix0 aGlzLmQsdGhpcy5mXSxbMCwwLDFdXSxuPVtbYSxkLGZdLFtjLGUsZ10sWzAs MCwxXV07Zm9yKGEmJmEgaW5zdGFuY2VvZiBiJiYobj1bW2EuYSxhLmMsYS5l XSxbYS5iLGEuZCxhLmZdLFswLDAsMV1dKSxoPTA7Mz5oO2grKylmb3IoaT0w OzM+aTtpKyspe2ZvcihrPTAsaj0wOzM+ajtqKyspays9bVtoXVtqXSpuW2pd W2ldO2xbaF1baV09a31yZXR1cm4gdGhpcy5hPWxbMF1bMF0sdGhpcy5iPWxb MV1bMF0sdGhpcy5jPWxbMF1bMV0sdGhpcy5kPWxbMV1bMV0sdGhpcy5lPWxb MF1bMl0sdGhpcy5mPWxbMV1bMl0sdGhpc30sYy5pbnZlcnQ9ZnVuY3Rpb24o KXt2YXIgYT10aGlzLGM9YS5hKmEuZC1hLmIqYS5jO3JldHVybiBuZXcgYihh LmQvYywtYS5iL2MsLWEuYy9jLGEuYS9jLChhLmMqYS5mLWEuZCphLmUpL2Ms KGEuYiphLmUtYS5hKmEuZikvYyl9LGMuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1 cm4gbmV3IGIodGhpcy5hLHRoaXMuYix0aGlzLmMsdGhpcy5kLHRoaXMuZSx0 aGlzLmYpfSxjLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlz LmFkZCgxLDAsMCwxLGEsYil9LGMuc2NhbGU9ZnVuY3Rpb24oYSxiLGMsZCl7 cmV0dXJuIG51bGw9PWImJihiPWEpLChjfHxkKSYmdGhpcy5hZGQoMSwwLDAs MSxjLGQpLHRoaXMuYWRkKGEsMCwwLGIsMCwwKSwoY3x8ZCkmJnRoaXMuYWRk KDEsMCwwLDEsLWMsLWQpLHRoaXN9LGMucm90YXRlPWZ1bmN0aW9uKGIsYyxk KXtiPWEucmFkKGIpLGM9Y3x8MCxkPWR8fDA7dmFyIGY9K2UuY29zKGIpLnRv Rml4ZWQoOSksZz0rZS5zaW4oYikudG9GaXhlZCg5KTtyZXR1cm4gdGhpcy5h ZGQoZixnLC1nLGYsYyxkKSx0aGlzLmFkZCgxLDAsMCwxLC1jLC1kKX0sYy54 PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEqdGhpcy5hK2IqdGhpcy5jK3RoaXMu ZX0sYy55PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEqdGhpcy5iK2IqdGhpcy5k K3RoaXMuZn0sYy5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuK3RoaXNbZC5mcm9t Q2hhckNvZGUoOTcrYSldLnRvRml4ZWQoNCl9LGMudG9TdHJpbmc9ZnVuY3Rp b24oKXtyZXR1cm4ibWF0cml4KCIrW3RoaXMuZ2V0KDApLHRoaXMuZ2V0KDEp LHRoaXMuZ2V0KDIpLHRoaXMuZ2V0KDMpLHRoaXMuZ2V0KDQpLHRoaXMuZ2V0 KDUpXS5qb2luKCkrIikifSxjLm9mZnNldD1mdW5jdGlvbigpe3JldHVyblt0 aGlzLmUudG9GaXhlZCg0KSx0aGlzLmYudG9GaXhlZCg0KV19LGMuZGV0ZXJt aW5hbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKnRoaXMuZC10aGlzLmIq dGhpcy5jfSxjLnNwbGl0PWZ1bmN0aW9uKCl7dmFyIGI9e307Yi5keD10aGlz LmUsYi5keT10aGlzLmY7dmFyIGM9W1t0aGlzLmEsdGhpcy5jXSxbdGhpcy5i LHRoaXMuZF1dO2Iuc2NhbGV4PWUuc3FydChnKGNbMF0pKSxoKGNbMF0pLGIu c2hlYXI9Y1swXVswXSpjWzFdWzBdK2NbMF1bMV0qY1sxXVsxXSxjWzFdPVtj WzFdWzBdLWNbMF1bMF0qYi5zaGVhcixjWzFdWzFdLWNbMF1bMV0qYi5zaGVh cl0sYi5zY2FsZXk9ZS5zcXJ0KGcoY1sxXSkpLGgoY1sxXSksYi5zaGVhci89 Yi5zY2FsZXksdGhpcy5kZXRlcm1pbmFudCgpPDAmJihiLnNjYWxleD0tYi5z Y2FsZXgpO3ZhciBkPS1jWzBdWzFdLGY9Y1sxXVsxXTtyZXR1cm4gMD5mPyhi LnJvdGF0ZT1hLmRlZyhlLmFjb3MoZikpLDA+ZCYmKGIucm90YXRlPTM2MC1i LnJvdGF0ZSkpOmIucm90YXRlPWEuZGVnKGUuYXNpbihkKSksYi5pc1NpbXBs ZT0hKCtiLnNoZWFyLnRvRml4ZWQoOSl8fGIuc2NhbGV4LnRvRml4ZWQoOSkh PWIuc2NhbGV5LnRvRml4ZWQoOSkmJmIucm90YXRlKSxiLmlzU3VwZXJTaW1w bGU9IStiLnNoZWFyLnRvRml4ZWQoOSkmJmIuc2NhbGV4LnRvRml4ZWQoOSk9 PWIuc2NhbGV5LnRvRml4ZWQoOSkmJiFiLnJvdGF0ZSxiLm5vUm90YXRpb249 IStiLnNoZWFyLnRvRml4ZWQoOSkmJiFiLnJvdGF0ZSxifSxjLnRvVHJhbnNm b3JtU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPWF8fHRoaXMuc3BsaXQoKTty ZXR1cm4rYi5zaGVhci50b0ZpeGVkKDkpPyJtIitbdGhpcy5nZXQoMCksdGhp cy5nZXQoMSksdGhpcy5nZXQoMiksdGhpcy5nZXQoMyksdGhpcy5nZXQoNCks dGhpcy5nZXQoNSldOihiLnNjYWxleD0rYi5zY2FsZXgudG9GaXhlZCg0KSxi LnNjYWxleT0rYi5zY2FsZXkudG9GaXhlZCg0KSxiLnJvdGF0ZT0rYi5yb3Rh dGUudG9GaXhlZCg0KSwoYi5keHx8Yi5keT8idCIrWytiLmR4LnRvRml4ZWQo NCksK2IuZHkudG9GaXhlZCg0KV06ZikrKDEhPWIuc2NhbGV4fHwxIT1iLnNj YWxleT8icyIrW2Iuc2NhbGV4LGIuc2NhbGV5LDAsMF06ZikrKGIucm90YXRl PyJyIitbK2Iucm90YXRlLnRvRml4ZWQoNCksMCwwXTpmKSl9fShiLnByb3Rv dHlwZSksYS5NYXRyaXg9YixhLm1hdHJpeD1mdW5jdGlvbihhLGMsZCxlLGYs Zyl7cmV0dXJuIG5ldyBiKGEsYyxkLGUsZixnKX19KSxkLnBsdWdpbihmdW5j dGlvbihhLGMsZCxlLGYpe2Z1bmN0aW9uIGcoZCl7cmV0dXJuIGZ1bmN0aW9u KGUpe2lmKGIuc3RvcCgpLGUgaW5zdGFuY2VvZiBmJiYxPT1lLm5vZGUuY2hp bGROb2Rlcy5sZW5ndGgmJigicmFkaWFsR3JhZGllbnQiPT1lLm5vZGUuZmly c3RDaGlsZC50YWdOYW1lfHwibGluZWFyR3JhZGllbnQiPT1lLm5vZGUuZmly c3RDaGlsZC50YWdOYW1lfHwicGF0dGVybiI9PWUubm9kZS5maXJzdENoaWxk LnRhZ05hbWUpJiYoZT1lLm5vZGUuZmlyc3RDaGlsZCxuKHRoaXMpLmFwcGVu ZENoaWxkKGUpLGU9bChlKSksZSBpbnN0YW5jZW9mIGMpaWYoInJhZGlhbEdy YWRpZW50Ij09ZS50eXBlfHwibGluZWFyR3JhZGllbnQiPT1lLnR5cGV8fCJw YXR0ZXJuIj09ZS50eXBlKXtlLm5vZGUuaWR8fHAoZS5ub2RlLHtpZDplLmlk fSk7dmFyIGc9cShlLm5vZGUuaWQpfWVsc2UgZz1lLmF0dHIoZCk7ZWxzZSBp ZihnPWEuY29sb3IoZSksZy5lcnJvcil7dmFyIGg9YShuKHRoaXMpLm93bmVy U1ZHRWxlbWVudCkuZ3JhZGllbnQoZSk7aD8oaC5ub2RlLmlkfHxwKGgubm9k ZSx7aWQ6aC5pZH0pLGc9cShoLm5vZGUuaWQpKTpnPWV9ZWxzZSBnPXIoZyk7 dmFyIGk9e307aVtkXT1nLHAodGhpcy5ub2RlLGkpLHRoaXMubm9kZS5zdHls ZVtkXT10fX1mdW5jdGlvbiBoKGEpe2Iuc3RvcCgpLGE9PSthJiYoYSs9InB4 IiksdGhpcy5ub2RlLnN0eWxlLmZvbnRTaXplPWF9ZnVuY3Rpb24gaShhKXtm b3IodmFyIGI9W10sYz1hLmNoaWxkTm9kZXMsZD0wLGU9Yy5sZW5ndGg7ZT5k O2QrKyl7dmFyIGY9Y1tkXTszPT1mLm5vZGVUeXBlJiZiLnB1c2goZi5ub2Rl VmFsdWUpLCJ0c3BhbiI9PWYudGFnTmFtZSYmYi5wdXNoKDE9PWYuY2hpbGRO b2Rlcy5sZW5ndGgmJjM9PWYuZmlyc3RDaGlsZC5ub2RlVHlwZT9mLmZpcnN0 Q2hpbGQubm9kZVZhbHVlOmkoZikpfXJldHVybiBifWZ1bmN0aW9uIGooKXty ZXR1cm4gYi5zdG9wKCksdGhpcy5ub2RlLnN0eWxlLmZvbnRTaXplfXZhciBr PWEuXy5tYWtlLGw9YS5fLndyYXAsbT1hLmlzLG49YS5fLmdldFNvbWVEZWZz LG89L151cmxcKCM/KFteKV0rKVwpJC8scD1hLl8uJCxxPWEudXJsLHI9U3Ry aW5nLHM9YS5fLnNlcGFyYXRvcix0PSIiO2Iub24oInNuYXAudXRpbC5hdHRy Lm1hc2siLGZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBjfHxhIGluc3Rh bmNlb2YgZil7aWYoYi5zdG9wKCksYSBpbnN0YW5jZW9mIGYmJjE9PWEubm9k ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGE9YS5ub2RlLmZpcnN0Q2hpbGQsbih0 aGlzKS5hcHBlbmRDaGlsZChhKSxhPWwoYSkpLCJtYXNrIj09YS50eXBlKXZh ciBkPWE7ZWxzZSBkPWsoIm1hc2siLG4odGhpcykpLGQubm9kZS5hcHBlbmRD aGlsZChhLm5vZGUpOyFkLm5vZGUuaWQmJnAoZC5ub2RlLHtpZDpkLmlkfSks cCh0aGlzLm5vZGUse21hc2s6cShkLmlkKX0pfX0pLGZ1bmN0aW9uKGEpe2Iu b24oInNuYXAudXRpbC5hdHRyLmNsaXAiLGEpLGIub24oInNuYXAudXRpbC5h dHRyLmNsaXAtcGF0aCIsYSksYi5vbigic25hcC51dGlsLmF0dHIuY2xpcFBh dGgiLGEpfShmdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgY3x8YSBpbnN0 YW5jZW9mIGYpe2lmKGIuc3RvcCgpLCJjbGlwUGF0aCI9PWEudHlwZSl2YXIg ZD1hO2Vsc2UgZD1rKCJjbGlwUGF0aCIsbih0aGlzKSksZC5ub2RlLmFwcGVu ZENoaWxkKGEubm9kZSksIWQubm9kZS5pZCYmcChkLm5vZGUse2lkOmQuaWR9 KTtwKHRoaXMubm9kZSx7ImNsaXAtcGF0aCI6cShkLm5vZGUuaWR8fGQuaWQp fSl9fSksYi5vbigic25hcC51dGlsLmF0dHIuZmlsbCIsZygiZmlsbCIpKSxi Lm9uKCJzbmFwLnV0aWwuYXR0ci5zdHJva2UiLGcoInN0cm9rZSIpKTt2YXIg dT0vXihbbHJdKSg/OlwoKFteKV0qKVwpKT8oLiopJC9pO2Iub24oInNuYXAu dXRpbC5ncmFkLnBhcnNlIixmdW5jdGlvbihhKXthPXIoYSk7dmFyIGI9YS5t YXRjaCh1KTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz1iWzFdLGQ9YlsyXSxl PWJbM107cmV0dXJuIGQ9ZC5zcGxpdCgvXHMqLFxzKi8pLm1hcChmdW5jdGlv bihhKXtyZXR1cm4rYT09YT8rYTphfSksMT09ZC5sZW5ndGgmJjA9PWRbMF0m JihkPVtdKSxlPWUuc3BsaXQoIi0iKSxlPWUubWFwKGZ1bmN0aW9uKGEpe2E9 YS5zcGxpdCgiOiIpO3ZhciBiPXtjb2xvcjphWzBdfTtyZXR1cm4gYVsxXSYm KGIub2Zmc2V0PXBhcnNlRmxvYXQoYVsxXSkpLGJ9KSx7dHlwZTpjLHBhcmFt czpkLHN0b3BzOmV9fSksYi5vbigic25hcC51dGlsLmF0dHIuZCIsZnVuY3Rp b24oYyl7Yi5zdG9wKCksbShjLCJhcnJheSIpJiZtKGNbMF0sImFycmF5Iikm JihjPWEucGF0aC50b1N0cmluZy5jYWxsKGMpKSxjPXIoYyksYy5tYXRjaCgv W3J1b10vaSkmJihjPWEucGF0aC50b0Fic29sdXRlKGMpKSxwKHRoaXMubm9k ZSx7ZDpjfSl9KSgtMSksYi5vbigic25hcC51dGlsLmF0dHIuI3RleHQiLGZ1 bmN0aW9uKGEpe2Iuc3RvcCgpLGE9cihhKTtmb3IodmFyIGM9ZS5kb2MuY3Jl YXRlVGV4dE5vZGUoYSk7dGhpcy5ub2RlLmZpcnN0Q2hpbGQ7KXRoaXMubm9k ZS5yZW1vdmVDaGlsZCh0aGlzLm5vZGUuZmlyc3RDaGlsZCk7dGhpcy5ub2Rl LmFwcGVuZENoaWxkKGMpfSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLnBh dGgiLGZ1bmN0aW9uKGEpe2Iuc3RvcCgpLHRoaXMuYXR0cih7ZDphfSl9KSgt MSksYi5vbigic25hcC51dGlsLmF0dHIuY2xhc3MiLGZ1bmN0aW9uKGEpe2Iu c3RvcCgpLHRoaXMubm9kZS5jbGFzc05hbWUuYmFzZVZhbD1hfSkoLTEpLGIu b24oInNuYXAudXRpbC5hdHRyLnZpZXdCb3giLGZ1bmN0aW9uKGEpe3ZhciBj O2M9bShhLCJvYmplY3QiKSYmIngiaW4gYT9bYS54LGEueSxhLndpZHRoLGEu aGVpZ2h0XS5qb2luKCIgIik6bShhLCJhcnJheSIpP2Euam9pbigiICIpOmEs cCh0aGlzLm5vZGUse3ZpZXdCb3g6Y30pLGIuc3RvcCgpfSkoLTEpLGIub24o InNuYXAudXRpbC5hdHRyLnRyYW5zZm9ybSIsZnVuY3Rpb24oYSl7dGhpcy50 cmFuc2Zvcm0oYSksYi5zdG9wKCl9KSgtMSksYi5vbigic25hcC51dGlsLmF0 dHIuciIsZnVuY3Rpb24oYSl7InJlY3QiPT10aGlzLnR5cGUmJihiLnN0b3Ao KSxwKHRoaXMubm9kZSx7cng6YSxyeTphfSkpfSkoLTEpLGIub24oInNuYXAu dXRpbC5hdHRyLnRleHRwYXRoIixmdW5jdGlvbihhKXtpZihiLnN0b3AoKSwi dGV4dCI9PXRoaXMudHlwZSl7dmFyIGQsZSxmO2lmKCFhJiZ0aGlzLnRleHRQ YXRoKXtmb3IoZT10aGlzLnRleHRQYXRoO2Uubm9kZS5maXJzdENoaWxkOyl0 aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZS5ub2RlLmZpcnN0Q2hpbGQpO3JldHVy biBlLnJlbW92ZSgpLHZvaWQgZGVsZXRlIHRoaXMudGV4dFBhdGh9aWYobShh LCJzdHJpbmciKSl7dmFyIGc9bih0aGlzKSxoPWwoZy5wYXJlbnROb2RlKS5w YXRoKGEpO2cuYXBwZW5kQ2hpbGQoaC5ub2RlKSxkPWguaWQsaC5hdHRyKHtp ZDpkfSl9ZWxzZSBhPWwoYSksYSBpbnN0YW5jZW9mIGMmJihkPWEuYXR0cigi aWQiKSxkfHwoZD1hLmlkLGEuYXR0cih7aWQ6ZH0pKSk7aWYoZClpZihlPXRo aXMudGV4dFBhdGgsZj10aGlzLm5vZGUsZSllLmF0dHIoeyJ4bGluazpocmVm IjoiIyIrZH0pO2Vsc2V7Zm9yKGU9cCgidGV4dFBhdGgiLHsieGxpbms6aHJl ZiI6IiMiK2R9KTtmLmZpcnN0Q2hpbGQ7KWUuYXBwZW5kQ2hpbGQoZi5maXJz dENoaWxkKTtmLmFwcGVuZENoaWxkKGUpLHRoaXMudGV4dFBhdGg9bChlKX19 fSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLnRleHQiLGZ1bmN0aW9uKGEp e2lmKCJ0ZXh0Ij09dGhpcy50eXBlKXtmb3IodmFyIGM9dGhpcy5ub2RlLGQ9 ZnVuY3Rpb24oYSl7dmFyIGI9cCgidHNwYW4iKTtpZihtKGEsImFycmF5Iikp Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspYi5hcHBlbmRDaGlsZChkKGFb Y10pKTtlbHNlIGIuYXBwZW5kQ2hpbGQoZS5kb2MuY3JlYXRlVGV4dE5vZGUo YSkpO3JldHVybiBiLm5vcm1hbGl6ZSYmYi5ub3JtYWxpemUoKSxifTtjLmZp cnN0Q2hpbGQ7KWMucmVtb3ZlQ2hpbGQoYy5maXJzdENoaWxkKTtmb3IodmFy IGY9ZChhKTtmLmZpcnN0Q2hpbGQ7KWMuYXBwZW5kQ2hpbGQoZi5maXJzdENo aWxkKX1iLnN0b3AoKX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5mb250 U2l6ZSIsaCkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLmZvbnQtc2l6ZSIs aCkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLnRyYW5zZm9ybSIsZnVu Y3Rpb24oKXtyZXR1cm4gYi5zdG9wKCksdGhpcy50cmFuc2Zvcm0oKX0pKC0x KSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci50ZXh0cGF0aCIsZnVuY3Rpb24o KXtyZXR1cm4gYi5zdG9wKCksdGhpcy50ZXh0UGF0aH0pKC0xKSxmdW5jdGlv bigpe2Z1bmN0aW9uIGMoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7Yi5zdG9wKCk7 dmFyIGQ9ZS5kb2MuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlz Lm5vZGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgibWFya2VyLSIrYyk7cmV0 dXJuIm5vbmUiPT1kP2Q6YShlLmRvYy5nZXRFbGVtZW50QnlJZChkLm1hdGNo KG8pWzFdKSl9fWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe2Iu c3RvcCgpO3ZhciBkPSJtYXJrZXIiK2EuY2hhckF0KDApLnRvVXBwZXJDYXNl KCkrYS5zdWJzdHJpbmcoMSk7aWYoIiI9PWN8fCFjKXJldHVybiB2b2lkKHRo aXMubm9kZS5zdHlsZVtkXT0ibm9uZSIpO2lmKCJtYXJrZXIiPT1jLnR5cGUp e3ZhciBlPWMubm9kZS5pZDtyZXR1cm4gZXx8cChjLm5vZGUse2lkOmMuaWR9 KSx2b2lkKHRoaXMubm9kZS5zdHlsZVtkXT1xKGUpKX19fWIub24oInNuYXAu dXRpbC5nZXRhdHRyLm1hcmtlci1lbmQiLGMoImVuZCIpKSgtMSksYi5vbigi c25hcC51dGlsLmdldGF0dHIubWFya2VyRW5kIixjKCJlbmQiKSkoLTEpLGIu b24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlci1zdGFydCIsYygic3RhcnQi KSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlclN0YXJ0Iixj KCJzdGFydCIpKSgtMSksYi5vbigic25hcC51dGlsLmdldGF0dHIubWFya2Vy LW1pZCIsYygibWlkIikpKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5t YXJrZXJNaWQiLGMoIm1pZCIpKSgtMSksYi5vbigic25hcC51dGlsLmF0dHIu bWFya2VyLWVuZCIsZCgiZW5kIikpKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0 ci5tYXJrZXJFbmQiLGQoImVuZCIpKSgtMSksYi5vbigic25hcC51dGlsLmF0 dHIubWFya2VyLXN0YXJ0IixkKCJzdGFydCIpKSgtMSksYi5vbigic25hcC51 dGlsLmF0dHIubWFya2VyU3RhcnQiLGQoInN0YXJ0IikpKC0xKSxiLm9uKCJz bmFwLnV0aWwuYXR0ci5tYXJrZXItbWlkIixkKCJtaWQiKSkoLTEpLGIub24o InNuYXAudXRpbC5hdHRyLm1hcmtlck1pZCIsZCgibWlkIikpKC0xKX0oKSxi Lm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5yIixmdW5jdGlvbigpe3JldHVybiJy ZWN0Ij09dGhpcy50eXBlJiZwKHRoaXMubm9kZSwicngiKT09cCh0aGlzLm5v ZGUsInJ5Iik/KGIuc3RvcCgpLHAodGhpcy5ub2RlLCJyeCIpKTp2b2lkIDB9 KSgtMSksYi5vbigic25hcC51dGlsLmdldGF0dHIudGV4dCIsZnVuY3Rpb24o KXtpZigidGV4dCI9PXRoaXMudHlwZXx8InRzcGFuIj09dGhpcy50eXBlKXti LnN0b3AoKTt2YXIgYT1pKHRoaXMubm9kZSk7cmV0dXJuIDE9PWEubGVuZ3Ro P2FbMF06YX19KSgtMSksYi5vbigic25hcC51dGlsLmdldGF0dHIuI3RleHQi LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS50ZXh0Q29udGVudH0pKC0x KSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci52aWV3Qm94IixmdW5jdGlvbigp e2Iuc3RvcCgpO3ZhciBjPXAodGhpcy5ub2RlLCJ2aWV3Qm94Iik7cmV0dXJu IGM/KGM9Yy5zcGxpdChzKSxhLl8uYm94KCtjWzBdLCtjWzFdLCtjWzJdLCtj WzNdKSk6dm9pZCAwfSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLnBv aW50cyIsZnVuY3Rpb24oKXt2YXIgYT1wKHRoaXMubm9kZSwicG9pbnRzIik7 cmV0dXJuIGIuc3RvcCgpLGE/YS5zcGxpdChzKTp2b2lkIDB9KSgtMSksYi5v bigic25hcC51dGlsLmdldGF0dHIucGF0aCIsZnVuY3Rpb24oKXt2YXIgYT1w KHRoaXMubm9kZSwiZCIpO3JldHVybiBiLnN0b3AoKSxhfSkoLTEpLGIub24o InNuYXAudXRpbC5nZXRhdHRyLmNsYXNzIixmdW5jdGlvbigpe3JldHVybiB0 aGlzLm5vZGUuY2xhc3NOYW1lLmJhc2VWYWx9KSgtMSksYi5vbigic25hcC51 dGlsLmdldGF0dHIuZm9udFNpemUiLGopKC0xKSxiLm9uKCJzbmFwLnV0aWwu Z2V0YXR0ci5mb250LXNpemUiLGopKC0xKX0pLGQucGx1Z2luKGZ1bmN0aW9u KGEsYil7dmFyIGM9L1xTKy9nLGQ9U3RyaW5nLGU9Yi5wcm90b3R5cGU7ZS5h ZGRDbGFzcz1mdW5jdGlvbihhKXt2YXIgYixlLGYsZyxoPWQoYXx8IiIpLm1h dGNoKGMpfHxbXSxpPXRoaXMubm9kZSxqPWkuY2xhc3NOYW1lLmJhc2VWYWws az1qLm1hdGNoKGMpfHxbXTtpZihoLmxlbmd0aCl7Zm9yKGI9MDtmPWhbYisr XTspZT1rLmluZGV4T2YoZiksfmV8fGsucHVzaChmKTtnPWsuam9pbigiICIp LGohPWcmJihpLmNsYXNzTmFtZS5iYXNlVmFsPWcpfXJldHVybiB0aGlzfSxl LnJlbW92ZUNsYXNzPWZ1bmN0aW9uKGEpe3ZhciBiLGUsZixnLGg9ZChhfHwi IikubWF0Y2goYyl8fFtdLGk9dGhpcy5ub2RlLGo9aS5jbGFzc05hbWUuYmFz ZVZhbCxrPWoubWF0Y2goYyl8fFtdO2lmKGsubGVuZ3RoKXtmb3IoYj0wO2Y9 aFtiKytdOyllPWsuaW5kZXhPZihmKSx+ZSYmay5zcGxpY2UoZSwxKTtnPWsu am9pbigiICIpLGohPWcmJihpLmNsYXNzTmFtZS5iYXNlVmFsPWcpfXJldHVy biB0aGlzfSxlLmhhc0NsYXNzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubm9k ZSxkPWIuY2xhc3NOYW1lLmJhc2VWYWwsZT1kLm1hdGNoKGMpfHxbXTtyZXR1 cm4hIX5lLmluZGV4T2YoYSl9LGUudG9nZ2xlQ2xhc3M9ZnVuY3Rpb24oYSxi KXtpZihudWxsIT1iKXJldHVybiBiP3RoaXMuYWRkQ2xhc3MoYSk6dGhpcy5y ZW1vdmVDbGFzcyhhKTt2YXIgZCxlLGYsZyxoPShhfHwiIikubWF0Y2goYyl8 fFtdLGk9dGhpcy5ub2RlLGo9aS5jbGFzc05hbWUuYmFzZVZhbCxrPWoubWF0 Y2goYyl8fFtdO2ZvcihkPTA7Zj1oW2QrK107KWU9ay5pbmRleE9mKGYpLH5l P2suc3BsaWNlKGUsMSk6ay5wdXNoKGYpO3JldHVybiBnPWsuam9pbigiICIp LGohPWcmJihpLmNsYXNzTmFtZS5iYXNlVmFsPWcpLHRoaXN9fSksZC5wbHVn aW4oZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiBhfWZ1bmN0aW9u IGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybitiLnRvRml4ZWQoMykr YX19dmFyIGQ9eyIrIjpmdW5jdGlvbihhLGIpe3JldHVybiBhK2J9LCItIjpm dW5jdGlvbihhLGIpe3JldHVybiBhLWJ9LCIvIjpmdW5jdGlvbihhLGIpe3Jl dHVybiBhL2J9LCIqIjpmdW5jdGlvbihhLGIpe3JldHVybiBhKmJ9fSxlPVN0 cmluZyxmPS9bYS16XSskL2ksZz0vXlxzKihbK1wtXC8qXSlccyo9XHMqKFtc ZC5lRStcLV0rKVxzKihbXlxkXHNdKyk/XHMqJC87Yi5vbigic25hcC51dGls LmF0dHIiLGZ1bmN0aW9uKGEpe3ZhciBjPWUoYSkubWF0Y2goZyk7aWYoYyl7 dmFyIGg9Yi5udCgpLGk9aC5zdWJzdHJpbmcoaC5sYXN0SW5kZXhPZigiLiIp KzEpLGo9dGhpcy5hdHRyKGkpLGs9e307Yi5zdG9wKCk7dmFyIGw9Y1szXXx8 IiIsbT1qLm1hdGNoKGYpLG49ZFtjWzFdXTtpZihtJiZtPT1sP2E9bihwYXJz ZUZsb2F0KGopLCtjWzJdKTooaj10aGlzLmFzUFgoaSksYT1uKHRoaXMuYXNQ WChpKSx0aGlzLmFzUFgoaSxjWzJdK2wpKSksaXNOYU4oail8fGlzTmFOKGEp KXJldHVybjtrW2ldPWEsdGhpcy5hdHRyKGspfX0pKC0xMCksYi5vbigic25h cC51dGlsLmVxdWFsIixmdW5jdGlvbihoLGkpe3ZhciBqPWUodGhpcy5hdHRy KGgpfHwiIiksaz1lKGkpLm1hdGNoKGcpO2lmKGspe2Iuc3RvcCgpO3ZhciBs PWtbM118fCIiLG09ai5tYXRjaChmKSxuPWRba1sxXV07cmV0dXJuIG0mJm09 PWw/e2Zyb206cGFyc2VGbG9hdChqKSx0bzpuKHBhcnNlRmxvYXQoaiksK2tb Ml0pLGY6YyhtKX06KGo9dGhpcy5hc1BYKGgpLHtmcm9tOmosdG86bihqLHRo aXMuYXNQWChoLGtbMl0rbCkpLGY6YX0pfX0pKC0xMCl9KSxkLnBsdWdpbihm dW5jdGlvbihjLGQsZSxmKXt2YXIgZz1lLnByb3RvdHlwZSxoPWMuaXM7Zy5y ZWN0PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZztyZXR1cm4gbnVsbD09 ZiYmKGY9ZSksaChhLCJvYmplY3QiKSYmIltvYmplY3QgT2JqZWN0XSI9PWE/ Zz1hOm51bGwhPWEmJihnPXt4OmEseTpiLHdpZHRoOmMsaGVpZ2h0OmR9LG51 bGwhPWUmJihnLnJ4PWUsZy5yeT1mKSksdGhpcy5lbCgicmVjdCIsZyl9LGcu Y2lyY2xlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gaChhLCJvYmpl Y3QiKSYmIltvYmplY3QgT2JqZWN0XSI9PWE/ZD1hOm51bGwhPWEmJihkPXtj eDphLGN5OmIscjpjfSksdGhpcy5lbCgiY2lyY2xlIixkKX07dmFyIGk9ZnVu Y3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5wYXJlbnROb2RlLnJlbW92ZUNo aWxkKHRoaXMpfXJldHVybiBmdW5jdGlvbihiLGMpe3ZhciBkPWYuZG9jLmNy ZWF0ZUVsZW1lbnQoImltZyIpLGU9Zi5kb2MuYm9keTtkLnN0eWxlLmNzc1Rl eHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTk5OTllbTt0b3A6LTk5OTll bSIsZC5vbmxvYWQ9ZnVuY3Rpb24oKXtjLmNhbGwoZCksZC5vbmxvYWQ9ZC5v bmVycm9yPW51bGwsZS5yZW1vdmVDaGlsZChkKX0sZC5vbmVycm9yPWEsZS5h cHBlbmRDaGlsZChkKSxkLnNyYz1ifX0oKTtnLmltYWdlPWZ1bmN0aW9uKGEs YixkLGUsZil7dmFyIGc9dGhpcy5lbCgiaW1hZ2UiKTtpZihoKGEsIm9iamVj dCIpJiYic3JjImluIGEpZy5hdHRyKGEpO2Vsc2UgaWYobnVsbCE9YSl7dmFy IGo9eyJ4bGluazpocmVmIjphLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUi fTtudWxsIT1iJiZudWxsIT1kJiYoai54PWIsai55PWQpLG51bGwhPWUmJm51 bGwhPWY/KGoud2lkdGg9ZSxqLmhlaWdodD1mKTppKGEsZnVuY3Rpb24oKXtj Ll8uJChnLm5vZGUse3dpZHRoOnRoaXMub2Zmc2V0V2lkdGgsaGVpZ2h0OnRo aXMub2Zmc2V0SGVpZ2h0fSl9KSxjLl8uJChnLm5vZGUsail9cmV0dXJuIGd9 LGcuZWxsaXBzZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtyZXR1cm4gaChh LCJvYmplY3QiKSYmIltvYmplY3QgT2JqZWN0XSI9PWE/ZT1hOm51bGwhPWEm JihlPXtjeDphLGN5OmIscng6YyxyeTpkfSksdGhpcy5lbCgiZWxsaXBzZSIs ZSl9LGcucGF0aD1mdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gaChhLCJvYmpl Y3QiKSYmIWgoYSwiYXJyYXkiKT9iPWE6YSYmKGI9e2Q6YX0pLHRoaXMuZWwo InBhdGgiLGIpfSxnLmdyb3VwPWcuZz1mdW5jdGlvbihhKXt2YXIgYj10aGlz LmVsKCJnIik7cmV0dXJuIDE9PWFyZ3VtZW50cy5sZW5ndGgmJmEmJiFhLnR5 cGU/Yi5hdHRyKGEpOmFyZ3VtZW50cy5sZW5ndGgmJmIuYWRkKEFycmF5LnBy b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSksYn0sZy5zdmc9ZnVu Y3Rpb24oYSxiLGMsZCxlLGYsZyxpKXt2YXIgaj17fTtyZXR1cm4gaChhLCJv YmplY3QiKSYmbnVsbD09Yj9qPWE6KG51bGwhPWEmJihqLng9YSksbnVsbCE9 YiYmKGoueT1iKSxudWxsIT1jJiYoai53aWR0aD1jKSxudWxsIT1kJiYoai5o ZWlnaHQ9ZCksbnVsbCE9ZSYmbnVsbCE9ZiYmbnVsbCE9ZyYmbnVsbCE9aSYm KGoudmlld0JveD1bZSxmLGcsaV0pKSx0aGlzLmVsKCJzdmciLGopfSxnLm1h c2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbCgibWFzayIpO3JldHVybiAx PT1hcmd1bWVudHMubGVuZ3RoJiZhJiYhYS50eXBlP2IuYXR0cihhKTphcmd1 bWVudHMubGVuZ3RoJiZiLmFkZChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs bChhcmd1bWVudHMsMCkpLGJ9LGcucHRybj1mdW5jdGlvbihhLGIsYyxkLGUs ZixnLGkpe2lmKGgoYSwib2JqZWN0IikpdmFyIGo9YTtlbHNlIGo9e3BhdHRl cm5Vbml0czoidXNlclNwYWNlT25Vc2UifSxhJiYoai54PWEpLGImJihqLnk9 YiksbnVsbCE9YyYmKGoud2lkdGg9YyksbnVsbCE9ZCYmKGouaGVpZ2h0PWQp LGoudmlld0JveD1udWxsIT1lJiZudWxsIT1mJiZudWxsIT1nJiZudWxsIT1p P1tlLGYsZyxpXTpbYXx8MCxifHwwLGN8fDAsZHx8MF07cmV0dXJuIHRoaXMu ZWwoInBhdHRlcm4iLGopfSxnLnVzZT1mdW5jdGlvbihhKXtyZXR1cm4gbnVs bCE9YT8oYSBpbnN0YW5jZW9mIGQmJihhLmF0dHIoImlkIil8fGEuYXR0cih7 aWQ6Yy5fLmlkKGEpfSksYT1hLmF0dHIoImlkIikpLCIjIj09U3RyaW5nKGEp LmNoYXJBdCgpJiYoYT1hLnN1YnN0cmluZygxKSksdGhpcy5lbCgidXNlIix7 InhsaW5rOmhyZWYiOiIjIithfSkpOmQucHJvdG90eXBlLnVzZS5jYWxsKHRo aXMpfSxnLnN5bWJvbD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT17fTtyZXR1 cm4gbnVsbCE9YSYmbnVsbCE9YiYmbnVsbCE9YyYmbnVsbCE9ZCYmKGUudmll d0JveD1bYSxiLGMsZF0pLHRoaXMuZWwoInN5bWJvbCIsZSl9LGcudGV4dD1m dW5jdGlvbihhLGIsYyl7dmFyIGQ9e307cmV0dXJuIGgoYSwib2JqZWN0Iik/ ZD1hOm51bGwhPWEmJihkPXt4OmEseTpiLHRleHQ6Y3x8IiJ9KSx0aGlzLmVs KCJ0ZXh0IixkKX0sZy5saW5lPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXt9 O3JldHVybiBoKGEsIm9iamVjdCIpP2U9YTpudWxsIT1hJiYoZT17eDE6YSx4 MjpjLHkxOmIseTI6ZH0pLHRoaXMuZWwoImxpbmUiLGUpfSxnLnBvbHlsaW5l PWZ1bmN0aW9uKGEpe2FyZ3VtZW50cy5sZW5ndGg+MSYmKGE9QXJyYXkucHJv dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKTt2YXIgYj17fTtyZXR1 cm4gaChhLCJvYmplY3QiKSYmIWgoYSwiYXJyYXkiKT9iPWE6bnVsbCE9YSYm KGI9e3BvaW50czphfSksdGhpcy5lbCgicG9seWxpbmUiLGIpfSxnLnBvbHln b249ZnVuY3Rpb24oYSl7YXJndW1lbnRzLmxlbmd0aD4xJiYoYT1BcnJheS5w cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpO3ZhciBiPXt9O3Jl dHVybiBoKGEsIm9iamVjdCIpJiYhaChhLCJhcnJheSIpP2I9YTpudWxsIT1h JiYoYj17cG9pbnRzOmF9KSx0aGlzLmVsKCJwb2x5Z29uIixiKX0sZnVuY3Rp b24oKXtmdW5jdGlvbiBkKCl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKCJzdG9w Iil9ZnVuY3Rpb24gZShhLGIpe3ZhciBkPWsoInN0b3AiKSxlPXtvZmZzZXQ6 K2IrIiUifTtyZXR1cm4gYT1jLmNvbG9yKGEpLGVbInN0b3AtY29sb3IiXT1h LmhleCxhLm9wYWNpdHk8MSYmKGVbInN0b3Atb3BhY2l0eSJdPWEub3BhY2l0 eSksayhkLGUpLHRoaXMubm9kZS5hcHBlbmRDaGlsZChkKSx0aGlzfWZ1bmN0 aW9uIGYoKXtpZigibGluZWFyR3JhZGllbnQiPT10aGlzLnR5cGUpe3ZhciBh PWsodGhpcy5ub2RlLCJ4MSIpfHwwLGI9ayh0aGlzLm5vZGUsIngyIil8fDEs ZD1rKHRoaXMubm9kZSwieTEiKXx8MCxlPWsodGhpcy5ub2RlLCJ5MiIpfHww O3JldHVybiBjLl8uYm94KGEsZCxtYXRoLmFicyhiLWEpLG1hdGguYWJzKGUt ZCkpfXZhciBmPXRoaXMubm9kZS5jeHx8LjUsZz10aGlzLm5vZGUuY3l8fC41 LGg9dGhpcy5ub2RlLnJ8fDA7cmV0dXJuIGMuXy5ib3goZi1oLGctaCwyKmgs MipoKX1mdW5jdGlvbiBoKGEsYyl7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIg Yz0oYi1sKS8oYS1tKSxkPW07YT5kO2QrKylnW2RdLm9mZnNldD0rKCtsK2Mq KGQtbSkpLnRvRml4ZWQoMik7bT1hLGw9Yn12YXIgZSxmPWIoInNuYXAudXRp bC5ncmFkLnBhcnNlIixudWxsLGMpLmZpcnN0RGVmaW5lZCgpO2lmKCFmKXJl dHVybiBudWxsO2YucGFyYW1zLnVuc2hpZnQoYSksZT0ibCI9PWYudHlwZS50 b0xvd2VyQ2FzZSgpP2kuYXBwbHkoMCxmLnBhcmFtcyk6ai5hcHBseSgwLGYu cGFyYW1zKSxmLnR5cGUhPWYudHlwZS50b0xvd2VyQ2FzZSgpJiZrKGUubm9k ZSx7Z3JhZGllbnRVbml0czoidXNlclNwYWNlT25Vc2UifSk7dmFyIGc9Zi5z dG9wcyxoPWcubGVuZ3RoLGw9MCxtPTA7aC0tO2Zvcih2YXIgbj0wO2g+bjtu KyspIm9mZnNldCJpbiBnW25dJiZkKG4sZ1tuXS5vZmZzZXQpO2ZvcihnW2hd Lm9mZnNldD1nW2hdLm9mZnNldHx8MTAwLGQoaCxnW2hdLm9mZnNldCksbj0w O2g+PW47bisrKXt2YXIgbz1nW25dO2UuYWRkU3RvcChvLmNvbG9yLG8ub2Zm c2V0KX1yZXR1cm4gZX1mdW5jdGlvbiBpKGEsYixnLGgsaSl7dmFyIGo9Yy5f Lm1ha2UoImxpbmVhckdyYWRpZW50IixhKTtyZXR1cm4gai5zdG9wcz1kLGou YWRkU3RvcD1lLGouZ2V0QkJveD1mLG51bGwhPWImJmsoai5ub2RlLHt4MTpi LHkxOmcseDI6aCx5MjppfSksan1mdW5jdGlvbiBqKGEsYixnLGgsaSxqKXt2 YXIgbD1jLl8ubWFrZSgicmFkaWFsR3JhZGllbnQiLGEpO3JldHVybiBsLnN0 b3BzPWQsbC5hZGRTdG9wPWUsbC5nZXRCQm94PWYsbnVsbCE9YiYmayhsLm5v ZGUse2N4OmIsY3k6ZyxyOmh9KSxudWxsIT1pJiZudWxsIT1qJiZrKGwubm9k ZSx7Zng6aSxmeTpqfSksbH12YXIgaz1jLl8uJDtnLmdyYWRpZW50PWZ1bmN0 aW9uKGEpe3JldHVybiBoKHRoaXMuZGVmcyxhKX0sZy5ncmFkaWVudExpbmVh cj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gaSh0aGlzLmRlZnMsYSxiLGMs ZCl9LGcuZ3JhZGllbnRSYWRpYWw9ZnVuY3Rpb24oYSxiLGMsZCxlKXtyZXR1 cm4gaih0aGlzLmRlZnMsYSxiLGMsZCxlKX0sZy50b1N0cmluZz1mdW5jdGlv bigpe3ZhciBhLGI9dGhpcy5ub2RlLm93bmVyRG9jdW1lbnQsZD1iLmNyZWF0 ZURvY3VtZW50RnJhZ21lbnQoKSxlPWIuY3JlYXRlRWxlbWVudCgiZGl2Iiks Zj10aGlzLm5vZGUuY2xvbmVOb2RlKCEwKTtyZXR1cm4gZC5hcHBlbmRDaGls ZChlKSxlLmFwcGVuZENoaWxkKGYpLGMuXy4kKGYse3htbG5zOiJodHRwOi8v d3d3LnczLm9yZy8yMDAwL3N2ZyJ9KSxhPWUuaW5uZXJIVE1MLGQucmVtb3Zl Q2hpbGQoZC5maXJzdENoaWxkKSxhfSxnLnRvRGF0YVVSTD1mdW5jdGlvbigp e3JldHVybiBhJiZhLmJ0b2E/ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQs IitidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0aGlzKSkpOnZv aWQgMH0sZy5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgYSxiPXRoaXMubm9k ZS5maXJzdENoaWxkO2I7KWE9Yi5uZXh0U2libGluZywiZGVmcyIhPWIudGFn TmFtZT9iLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYik6Zy5jbGVhci5jYWxs KHtub2RlOmJ9KSxiPWF9fSgpfSksZC5wbHVnaW4oZnVuY3Rpb24oYSxiKXtm dW5jdGlvbiBjKGEpe3ZhciBiPWMucHM9Yy5wc3x8e307cmV0dXJuIGJbYV0/ YlthXS5zbGVlcD0xMDA6YlthXT17c2xlZXA6MTAwfSxzZXRUaW1lb3V0KGZ1 bmN0aW9uKCl7Zm9yKHZhciBjIGluIGIpYltLXShjKSYmYyE9YSYmKGJbY10u c2xlZXAtLSwhYltjXS5zbGVlcCYmZGVsZXRlIGJbY10pfSksYlthXX1mdW5j dGlvbiBkKGEsYixjLGQpe3JldHVybiBudWxsPT1hJiYoYT1iPWM9ZD0wKSxu dWxsPT1iJiYoYj1hLnksYz1hLndpZHRoLGQ9YS5oZWlnaHQsYT1hLngpLHt4 OmEseTpiLHdpZHRoOmMsdzpjLGhlaWdodDpkLGg6ZCx4MjphK2MseTI6Yitk LGN4OmErYy8yLGN5OmIrZC8yLHIxOk4ubWluKGMsZCkvMixyMjpOLm1heChj LGQpLzIscjA6Ti5zcXJ0KGMqYytkKmQpLzIscGF0aDp3KGEsYixjLGQpLHZi OlthLGIsYyxkXS5qb2luKCIgIil9fWZ1bmN0aW9uIGUoKXtyZXR1cm4gdGhp cy5qb2luKCIsIikucmVwbGFjZShMLCIkMSIpfWZ1bmN0aW9uIGYoYSl7dmFy IGI9SihhKTtyZXR1cm4gYi50b1N0cmluZz1lLGJ9ZnVuY3Rpb24gZyhhLGIs YyxkLGUsZixnLGgsail7cmV0dXJuIG51bGw9PWo/bihhLGIsYyxkLGUsZixn LGgpOmkoYSxiLGMsZCxlLGYsZyxoLG8oYSxiLGMsZCxlLGYsZyxoLGopKX1m dW5jdGlvbiBoKGMsZCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4rKCthKS50b0Zp eGVkKDMpfXJldHVybiBhLl8uY2FjaGVyKGZ1bmN0aW9uKGEsZixoKXthIGlu c3RhbmNlb2YgYiYmKGE9YS5hdHRyKCJkIikpLGE9RShhKTtmb3IodmFyIGos ayxsLG0sbixvPSIiLHA9e30scT0wLHI9MCxzPWEubGVuZ3RoO3M+cjtyKysp e2lmKGw9YVtyXSwiTSI9PWxbMF0paj0rbFsxXSxrPStsWzJdO2Vsc2V7aWYo bT1nKGosayxsWzFdLGxbMl0sbFszXSxsWzRdLGxbNV0sbFs2XSkscSttPmYp e2lmKGQmJiFwLnN0YXJ0KXtpZihuPWcoaixrLGxbMV0sbFsyXSxsWzNdLGxb NF0sbFs1XSxsWzZdLGYtcSksbys9WyJDIitlKG4uc3RhcnQueCksZShuLnN0 YXJ0LnkpLGUobi5tLngpLGUobi5tLnkpLGUobi54KSxlKG4ueSldLGgpcmV0 dXJuIG87cC5zdGFydD1vLG89WyJNIitlKG4ueCksZShuLnkpKyJDIitlKG4u bi54KSxlKG4ubi55KSxlKG4uZW5kLngpLGUobi5lbmQueSksZShsWzVdKSxl KGxbNl0pXS5qb2luKCkscSs9bSxqPStsWzVdLGs9K2xbNl07Y29udGludWV9 aWYoIWMmJiFkKXJldHVybiBuPWcoaixrLGxbMV0sbFsyXSxsWzNdLGxbNF0s bFs1XSxsWzZdLGYtcSl9cSs9bSxqPStsWzVdLGs9K2xbNl19bys9bC5zaGlm dCgpK2x9cmV0dXJuIHAuZW5kPW8sbj1jP3E6ZD9wOmkoaixrLGxbMF0sbFsx XSxsWzJdLGxbM10sbFs0XSxsWzVdLDEpfSxudWxsLGEuXy5jbG9uZSl9ZnVu Y3Rpb24gaShhLGIsYyxkLGUsZixnLGgsaSl7dmFyIGo9MS1pLGs9UihqLDMp LGw9UihqLDIpLG09aSppLG49bSppLG89ayphKzMqbCppKmMrMypqKmkqaSpl K24qZyxwPWsqYiszKmwqaSpkKzMqaippKmkqZituKmgscT1hKzIqaSooYy1h KSttKihlLTIqYythKSxyPWIrMippKihkLWIpK20qKGYtMipkK2IpLHM9Yysy KmkqKGUtYykrbSooZy0yKmUrYyksdD1kKzIqaSooZi1kKSttKihoLTIqZitk KSx1PWoqYStpKmMsdj1qKmIraSpkLHc9aiplK2kqZyx4PWoqZitpKmgseT05 MC0xODAqTi5hdGFuMihxLXMsci10KS9PO3JldHVybnt4Om8seTpwLG06e3g6 cSx5OnJ9LG46e3g6cyx5OnR9LHN0YXJ0Ont4OnUseTp2fSxlbmQ6e3g6dyx5 Onh9LGFscGhhOnl9fWZ1bmN0aW9uIGooYixjLGUsZixnLGgsaSxqKXthLmlz KGIsImFycmF5Iil8fChiPVtiLGMsZSxmLGcsaCxpLGpdKTt2YXIgaz1ELmFw cGx5KG51bGwsYik7cmV0dXJuIGQoay5taW4ueCxrLm1pbi55LGsubWF4Lngt ay5taW4ueCxrLm1heC55LWsubWluLnkpfWZ1bmN0aW9uIGsoYSxiLGMpe3Jl dHVybiBiPj1hLngmJmI8PWEueCthLndpZHRoJiZjPj1hLnkmJmM8PWEueSth LmhlaWdodH1mdW5jdGlvbiBsKGEsYil7cmV0dXJuIGE9ZChhKSxiPWQoYiks ayhiLGEueCxhLnkpfHxrKGIsYS54MixhLnkpfHxrKGIsYS54LGEueTIpfHxr KGIsYS54MixhLnkyKXx8ayhhLGIueCxiLnkpfHxrKGEsYi54MixiLnkpfHxr KGEsYi54LGIueTIpfHxrKGEsYi54MixiLnkyKXx8KGEueDxiLngyJiZhLng+ Yi54fHxiLng8YS54MiYmYi54PmEueCkmJihhLnk8Yi55MiYmYS55PmIueXx8 Yi55PGEueTImJmIueT5hLnkpfWZ1bmN0aW9uIG0oYSxiLGMsZCxlKXt2YXIg Zj0tMypiKzkqYy05KmQrMyplLGc9YSpmKzYqYi0xMipjKzYqZDtyZXR1cm4g YSpnLTMqYiszKmN9ZnVuY3Rpb24gbihhLGIsYyxkLGUsZixnLGgsaSl7bnVs bD09aSYmKGk9MSksaT1pPjE/MTowPmk/MDppO2Zvcih2YXIgaj1pLzIsaz0x MixsPVstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3Mywt Ljc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sbj1bLjI0 OTEsLjI0OTEsLjIzMzUsLjIzMzUsLjIwMzIsLjIwMzIsLjE2MDEsLjE2MDEs LjEwNjksLjEwNjksLjA0NzIsLjA0NzJdLG89MCxwPTA7az5wO3ArKyl7dmFy IHE9aipsW3BdK2oscj1tKHEsYSxjLGUsZykscz1tKHEsYixkLGYsaCksdD1y KnIrcypzO28rPW5bcF0qTi5zcXJ0KHQpfXJldHVybiBqKm99ZnVuY3Rpb24g byhhLGIsYyxkLGUsZixnLGgsaSl7aWYoISgwPml8fG4oYSxiLGMsZCxlLGYs ZyxoKTxpKSl7dmFyIGosaz0xLGw9ay8yLG09ay1sLG89LjAxO2ZvcihqPW4o YSxiLGMsZCxlLGYsZyxoLG0pO1Moai1pKT5vOylsLz0yLG0rPShpPmo/MTot MSkqbCxqPW4oYSxiLGMsZCxlLGYsZyxoLG0pO3JldHVybiBtfX1mdW5jdGlv biBwKGEsYixjLGQsZSxmLGcsaCl7aWYoIShRKGEsYyk8UChlLGcpfHxQKGEs Yyk+UShlLGcpfHxRKGIsZCk8UChmLGgpfHxQKGIsZCk+UShmLGgpKSl7dmFy IGk9KGEqZC1iKmMpKihlLWcpLShhLWMpKihlKmgtZipnKSxqPShhKmQtYipj KSooZi1oKS0oYi1kKSooZSpoLWYqZyksaz0oYS1jKSooZi1oKS0oYi1kKSoo ZS1nKTtpZihrKXt2YXIgbD1pL2ssbT1qL2ssbj0rbC50b0ZpeGVkKDIpLG89 K20udG9GaXhlZCgyKTtpZighKG48K1AoYSxjKS50b0ZpeGVkKDIpfHxuPitR KGEsYykudG9GaXhlZCgyKXx8bjwrUChlLGcpLnRvRml4ZWQoMil8fG4+K1Eo ZSxnKS50b0ZpeGVkKDIpfHxvPCtQKGIsZCkudG9GaXhlZCgyKXx8bz4rUShi LGQpLnRvRml4ZWQoMil8fG88K1AoZixoKS50b0ZpeGVkKDIpfHxvPitRKGYs aCkudG9GaXhlZCgyKSkpcmV0dXJue3g6bCx5Om19fX19ZnVuY3Rpb24gcShh LGIsYyl7dmFyIGQ9aihhKSxlPWooYik7aWYoIWwoZCxlKSlyZXR1cm4gYz8w OltdO2Zvcih2YXIgZj1uLmFwcGx5KDAsYSksZz1uLmFwcGx5KDAsYiksaD1+ fihmLzgpLGs9fn4oZy84KSxtPVtdLG89W10scT17fSxyPWM/MDpbXSxzPTA7 aCsxPnM7cysrKXt2YXIgdD1pLmFwcGx5KDAsYS5jb25jYXQocy9oKSk7bS5w dXNoKHt4OnQueCx5OnQueSx0OnMvaH0pfWZvcihzPTA7aysxPnM7cysrKXQ9 aS5hcHBseSgwLGIuY29uY2F0KHMvaykpLG8ucHVzaCh7eDp0LngseTp0Lnks dDpzL2t9KTtmb3Iocz0wO2g+cztzKyspZm9yKHZhciB1PTA7az51O3UrKyl7 dmFyIHY9bVtzXSx3PW1bcysxXSx4PW9bdV0seT1vW3UrMV0sej1TKHcueC12 LngpPC4wMDE/InkiOiJ4IixBPVMoeS54LXgueCk8LjAwMT8ieSI6IngiLEI9 cCh2Lngsdi55LHcueCx3LnkseC54LHgueSx5LngseS55KTtpZihCKXtpZihx W0IueC50b0ZpeGVkKDQpXT09Qi55LnRvRml4ZWQoNCkpY29udGludWU7cVtC LngudG9GaXhlZCg0KV09Qi55LnRvRml4ZWQoNCk7dmFyIEM9di50K1MoKEJb el0tdlt6XSkvKHdbel0tdlt6XSkpKih3LnQtdi50KSxEPXgudCtTKChCW0Fd LXhbQV0pLyh5W0FdLXhbQV0pKSooeS50LXgudCk7Qz49MCYmMT49QyYmRD49 MCYmMT49RCYmKGM/cisrOnIucHVzaCh7eDpCLngseTpCLnksdDE6Qyx0MjpE fSkpfX1yZXR1cm4gcn1mdW5jdGlvbiByKGEsYil7cmV0dXJuIHQoYSxiKX1m dW5jdGlvbiBzKGEsYil7cmV0dXJuIHQoYSxiLDEpfWZ1bmN0aW9uIHQoYSxi LGMpe2E9RShhKSxiPUUoYik7Zm9yKHZhciBkLGUsZixnLGgsaSxqLGssbCxt LG49Yz8wOltdLG89MCxwPWEubGVuZ3RoO3A+bztvKyspe3ZhciByPWFbb107 aWYoIk0iPT1yWzBdKWQ9aD1yWzFdLGU9aT1yWzJdO2Vsc2V7IkMiPT1yWzBd PyhsPVtkLGVdLmNvbmNhdChyLnNsaWNlKDEpKSxkPWxbNl0sZT1sWzddKToo bD1bZCxlLGQsZSxoLGksaCxpXSxkPWgsZT1pKTtmb3IodmFyIHM9MCx0PWIu bGVuZ3RoO3Q+cztzKyspe3ZhciB1PWJbc107aWYoIk0iPT11WzBdKWY9aj11 WzFdLGc9az11WzJdO2Vsc2V7IkMiPT11WzBdPyhtPVtmLGddLmNvbmNhdCh1 LnNsaWNlKDEpKSxmPW1bNl0sZz1tWzddKToobT1bZixnLGYsZyxqLGssaixr XSxmPWosZz1rKTt2YXIgdj1xKGwsbSxjKTtpZihjKW4rPXY7ZWxzZXtmb3Io dmFyIHc9MCx4PXYubGVuZ3RoO3g+dzt3Kyspdlt3XS5zZWdtZW50MT1vLHZb d10uc2VnbWVudDI9cyx2W3ddLmJlejE9bCx2W3ddLmJlejI9bTtuPW4uY29u Y2F0KHYpfX19fX1yZXR1cm4gbn1mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD12 KGEpO3JldHVybiBrKGQsYixjKSYmdChhLFtbIk0iLGIsY10sWyJIIixkLngy KzEwXV0sMSklMj09MX1mdW5jdGlvbiB2KGEpe3ZhciBiPWMoYSk7aWYoYi5i Ym94KXJldHVybiBKKGIuYmJveCk7aWYoIWEpcmV0dXJuIGQoKTthPUUoYSk7 Zm9yKHZhciBlLGY9MCxnPTAsaD1bXSxpPVtdLGo9MCxrPWEubGVuZ3RoO2s+ ajtqKyspaWYoZT1hW2pdLCJNIj09ZVswXSlmPWVbMV0sZz1lWzJdLGgucHVz aChmKSxpLnB1c2goZyk7ZWxzZXt2YXIgbD1EKGYsZyxlWzFdLGVbMl0sZVsz XSxlWzRdLGVbNV0sZVs2XSk7aD1oLmNvbmNhdChsLm1pbi54LGwubWF4Lngp LGk9aS5jb25jYXQobC5taW4ueSxsLm1heC55KSxmPWVbNV0sZz1lWzZdfXZh ciBtPVAuYXBwbHkoMCxoKSxuPVAuYXBwbHkoMCxpKSxvPVEuYXBwbHkoMCxo KSxwPVEuYXBwbHkoMCxpKSxxPWQobSxuLG8tbSxwLW4pO3JldHVybiBiLmJi b3g9SihxKSxxfWZ1bmN0aW9uIHcoYSxiLGMsZCxmKXtpZihmKXJldHVybltb Ik0iLCthKyArZixiXSxbImwiLGMtMipmLDBdLFsiYSIsZixmLDAsMCwxLGYs Zl0sWyJsIiwwLGQtMipmXSxbImEiLGYsZiwwLDAsMSwtZixmXSxbImwiLDIq Zi1jLDBdLFsiYSIsZixmLDAsMCwxLC1mLC1mXSxbImwiLDAsMipmLWRdLFsi YSIsZixmLDAsMCwxLGYsLWZdLFsieiJdXTt2YXIgZz1bWyJNIixhLGJdLFsi bCIsYywwXSxbImwiLDAsZF0sWyJsIiwtYywwXSxbInoiXV07cmV0dXJuIGcu dG9TdHJpbmc9ZSxnfWZ1bmN0aW9uIHgoYSxiLGMsZCxmKXtpZihudWxsPT1m JiZudWxsPT1kJiYoZD1jKSxhPSthLGI9K2IsYz0rYyxkPStkLG51bGwhPWYp dmFyIGc9TWF0aC5QSS8xODAsaD1hK2MqTWF0aC5jb3MoLWQqZyksaT1hK2Mq TWF0aC5jb3MoLWYqZyksaj1iK2MqTWF0aC5zaW4oLWQqZyksaz1iK2MqTWF0 aC5zaW4oLWYqZyksbD1bWyJNIixoLGpdLFsiQSIsYyxjLDAsKyhmLWQ+MTgw KSwwLGksa11dO2Vsc2UgbD1bWyJNIixhLGJdLFsibSIsMCwtZF0sWyJhIixj LGQsMCwxLDEsMCwyKmRdLFsiYSIsYyxkLDAsMSwxLDAsLTIqZF0sWyJ6Il1d O3JldHVybiBsLnRvU3RyaW5nPWUsbH1mdW5jdGlvbiB5KGIpe3ZhciBkPWMo YiksZz1TdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlO2lmKGQucmVsKXJl dHVybiBmKGQucmVsKTthLmlzKGIsImFycmF5IikmJmEuaXMoYiYmYlswXSwi YXJyYXkiKXx8KGI9YS5wYXJzZVBhdGhTdHJpbmcoYikpO3ZhciBoPVtdLGk9 MCxqPTAsaz0wLGw9MCxtPTA7Ik0iPT1iWzBdWzBdJiYoaT1iWzBdWzFdLGo9 YlswXVsyXSxrPWksbD1qLG0rKyxoLnB1c2goWyJNIixpLGpdKSk7Zm9yKHZh ciBuPW0sbz1iLmxlbmd0aDtvPm47bisrKXt2YXIgcD1oW25dPVtdLHE9Yltu XTtpZihxWzBdIT1nLmNhbGwocVswXSkpc3dpdGNoKHBbMF09Zy5jYWxsKHFb MF0pLHBbMF0pe2Nhc2UiYSI6cFsxXT1xWzFdLHBbMl09cVsyXSxwWzNdPXFb M10scFs0XT1xWzRdLHBbNV09cVs1XSxwWzZdPSsocVs2XS1pKS50b0ZpeGVk KDMpLHBbN109KyhxWzddLWopLnRvRml4ZWQoMyk7YnJlYWs7Y2FzZSJ2Ijpw WzFdPSsocVsxXS1qKS50b0ZpeGVkKDMpO2JyZWFrO2Nhc2UibSI6az1xWzFd LGw9cVsyXTtkZWZhdWx0OmZvcih2YXIgcj0xLHM9cS5sZW5ndGg7cz5yO3Ir KylwW3JdPSsocVtyXS0ociUyP2k6aikpLnRvRml4ZWQoMyl9ZWxzZXtwPWhb bl09W10sIm0iPT1xWzBdJiYoaz1xWzFdK2ksbD1xWzJdK2opO2Zvcih2YXIg dD0wLHU9cS5sZW5ndGg7dT50O3QrKyloW25dW3RdPXFbdF19dmFyIHY9aFtu XS5sZW5ndGg7c3dpdGNoKGhbbl1bMF0pe2Nhc2UieiI6aT1rLGo9bDticmVh aztjYXNlImgiOmkrPStoW25dW3YtMV07YnJlYWs7Y2FzZSJ2IjpqKz0raFtu XVt2LTFdO2JyZWFrO2RlZmF1bHQ6aSs9K2hbbl1bdi0yXSxqKz0raFtuXVt2 LTFdfX1yZXR1cm4gaC50b1N0cmluZz1lLGQucmVsPWYoaCksaH1mdW5jdGlv biB6KGIpe3ZhciBkPWMoYik7aWYoZC5hYnMpcmV0dXJuIGYoZC5hYnMpO2lm KEkoYiwiYXJyYXkiKSYmSShiJiZiWzBdLCJhcnJheSIpfHwoYj1hLnBhcnNl UGF0aFN0cmluZyhiKSksIWJ8fCFiLmxlbmd0aClyZXR1cm5bWyJNIiwwLDBd XTt2YXIgZyxoPVtdLGk9MCxqPTAsaz0wLGw9MCxtPTA7Ik0iPT1iWzBdWzBd JiYoaT0rYlswXVsxXSxqPStiWzBdWzJdLGs9aSxsPWosbSsrLGhbMF09WyJN IixpLGpdKTtmb3IodmFyIG4sbyxwPTM9PWIubGVuZ3RoJiYiTSI9PWJbMF1b MF0mJiJSIj09YlsxXVswXS50b1VwcGVyQ2FzZSgpJiYiWiI9PWJbMl1bMF0u dG9VcHBlckNhc2UoKSxxPW0scj1iLmxlbmd0aDtyPnE7cSsrKXtpZihoLnB1 c2gobj1bXSksbz1iW3FdLGc9b1swXSxnIT1nLnRvVXBwZXJDYXNlKCkpc3dp dGNoKG5bMF09Zy50b1VwcGVyQ2FzZSgpLG5bMF0pe2Nhc2UiQSI6blsxXT1v WzFdLG5bMl09b1syXSxuWzNdPW9bM10sbls0XT1vWzRdLG5bNV09b1s1XSxu WzZdPStvWzZdK2ksbls3XT0rb1s3XStqO2JyZWFrO2Nhc2UiViI6blsxXT0r b1sxXStqO2JyZWFrO2Nhc2UiSCI6blsxXT0rb1sxXStpO2JyZWFrO2Nhc2Ui UiI6Zm9yKHZhciBzPVtpLGpdLmNvbmNhdChvLnNsaWNlKDEpKSx0PTIsdT1z Lmxlbmd0aDt1PnQ7dCsrKXNbdF09K3NbdF0raSxzWysrdF09K3NbdF0rajto LnBvcCgpLGg9aC5jb25jYXQoRyhzLHApKTticmVhaztjYXNlIk8iOmgucG9w KCkscz14KGksaixvWzFdLG9bMl0pLHMucHVzaChzWzBdKSxoPWguY29uY2F0 KHMpO2JyZWFrO2Nhc2UiVSI6aC5wb3AoKSxoPWguY29uY2F0KHgoaSxqLG9b MV0sb1syXSxvWzNdKSksbj1bIlUiXS5jb25jYXQoaFtoLmxlbmd0aC0xXS5z bGljZSgtMikpO2JyZWFrO2Nhc2UiTSI6az0rb1sxXStpLGw9K29bMl0rajtk ZWZhdWx0OmZvcih0PTEsdT1vLmxlbmd0aDt1PnQ7dCsrKW5bdF09K29bdF0r KHQlMj9pOmopfWVsc2UgaWYoIlIiPT1nKXM9W2ksal0uY29uY2F0KG8uc2xp Y2UoMSkpLGgucG9wKCksaD1oLmNvbmNhdChHKHMscCkpLG49WyJSIl0uY29u Y2F0KG8uc2xpY2UoLTIpKTtlbHNlIGlmKCJPIj09ZyloLnBvcCgpLHM9eChp LGosb1sxXSxvWzJdKSxzLnB1c2goc1swXSksaD1oLmNvbmNhdChzKTtlbHNl IGlmKCJVIj09ZyloLnBvcCgpLGg9aC5jb25jYXQoeChpLGosb1sxXSxvWzJd LG9bM10pKSxuPVsiVSJdLmNvbmNhdChoW2gubGVuZ3RoLTFdLnNsaWNlKC0y KSk7ZWxzZSBmb3IodmFyIHY9MCx3PW8ubGVuZ3RoO3c+djt2Kyspblt2XT1v W3ZdO2lmKGc9Zy50b1VwcGVyQ2FzZSgpLCJPIiE9Zylzd2l0Y2goblswXSl7 Y2FzZSJaIjppPStrLGo9K2w7YnJlYWs7Y2FzZSJIIjppPW5bMV07YnJlYWs7 Y2FzZSJWIjpqPW5bMV07YnJlYWs7Y2FzZSJNIjprPW5bbi5sZW5ndGgtMl0s bD1uW24ubGVuZ3RoLTFdO2RlZmF1bHQ6aT1uW24ubGVuZ3RoLTJdLGo9bltu Lmxlbmd0aC0xXX19cmV0dXJuIGgudG9TdHJpbmc9ZSxkLmFicz1mKGgpLGh9 ZnVuY3Rpb24gQShhLGIsYyxkKXtyZXR1cm5bYSxiLGMsZCxjLGRdfWZ1bmN0 aW9uIEIoYSxiLGMsZCxlLGYpe3ZhciBnPTEvMyxoPTIvMztyZXR1cm5bZyph K2gqYyxnKmIraCpkLGcqZStoKmMsZypmK2gqZCxlLGZdfWZ1bmN0aW9uIEMo YixjLGQsZSxmLGcsaCxpLGosayl7dmFyIGwsbT0xMjAqTy8xODAsbj1PLzE4 MCooK2Z8fDApLG89W10scD1hLl8uY2FjaGVyKGZ1bmN0aW9uKGEsYixjKXt2 YXIgZD1hKk4uY29zKGMpLWIqTi5zaW4oYyksZT1hKk4uc2luKGMpK2IqTi5j b3MoYyk7cmV0dXJue3g6ZCx5OmV9fSk7aWYoayl5PWtbMF0sej1rWzFdLHc9 a1syXSx4PWtbM107ZWxzZXtsPXAoYixjLC1uKSxiPWwueCxjPWwueSxsPXAo aSxqLC1uKSxpPWwueCxqPWwueTt2YXIgcT0oTi5jb3MoTy8xODAqZiksTi5z aW4oTy8xODAqZiksKGItaSkvMikscj0oYy1qKS8yLHM9cSpxLyhkKmQpK3Iq ci8oZSplKTtzPjEmJihzPU4uc3FydChzKSxkPXMqZCxlPXMqZSk7dmFyIHQ9 ZCpkLHU9ZSplLHY9KGc9PWg/LTE6MSkqTi5zcXJ0KFMoKHQqdS10KnIqci11 KnEqcSkvKHQqcipyK3UqcSpxKSkpLHc9dipkKnIvZSsoYitpKS8yLHg9diot ZSpxL2QrKGMraikvMix5PU4uYXNpbigoKGMteCkvZSkudG9GaXhlZCg5KSks ej1OLmFzaW4oKChqLXgpL2UpLnRvRml4ZWQoOSkpO3k9dz5iP08teTp5LHo9 dz5pP08tejp6LDA+eSYmKHk9MipPK3kpLDA+eiYmKHo9MipPK3opLGgmJnk+ eiYmKHktPTIqTyksIWgmJno+eSYmKHotPTIqTyl9dmFyIEE9ei15O2lmKFMo QSk+bSl7dmFyIEI9eixEPWksRT1qO3o9eSttKihoJiZ6Pnk/MTotMSksaT13 K2QqTi5jb3Moeiksaj14K2UqTi5zaW4oeiksbz1DKGksaixkLGUsZiwwLGgs RCxFLFt6LEIsdyx4XSl9QT16LXk7dmFyIEY9Ti5jb3MoeSksRz1OLnNpbih5 KSxIPU4uY29zKHopLEk9Ti5zaW4oeiksSj1OLnRhbihBLzQpLEs9NC8zKmQq SixMPTQvMyplKkosTT1bYixjXSxQPVtiK0sqRyxjLUwqRl0sUT1baStLKkks ai1MKkhdLFI9W2ksal07aWYoUFswXT0yKk1bMF0tUFswXSxQWzFdPTIqTVsx XS1QWzFdLGspcmV0dXJuW1AsUSxSXS5jb25jYXQobyk7bz1bUCxRLFJdLmNv bmNhdChvKS5qb2luKCkuc3BsaXQoIiwiKTtmb3IodmFyIFQ9W10sVT0wLFY9 by5sZW5ndGg7Vj5VO1UrKylUW1VdPVUlMj9wKG9bVS0xXSxvW1VdLG4pLnk6 cChvW1VdLG9bVSsxXSxuKS54O3JldHVybiBUfWZ1bmN0aW9uIEQoYSxiLGMs ZCxlLGYsZyxoKXtmb3IodmFyIGksaixrLGwsbSxuLG8scCxxPVtdLHI9W1td LFtdXSxzPTA7Mj5zOysrcylpZigwPT1zPyhqPTYqYS0xMipjKzYqZSxpPS0z KmErOSpjLTkqZSszKmcsaz0zKmMtMyphKTooaj02KmItMTIqZCs2KmYsaT0t MypiKzkqZC05KmYrMypoLGs9MypkLTMqYiksUyhpKTwxZS0xMil7aWYoUyhq KTwxZS0xMiljb250aW51ZTtsPS1rL2osbD4wJiYxPmwmJnEucHVzaChsKX1l bHNlIG89aipqLTQqayppLHA9Ti5zcXJ0KG8pLDA+b3x8KG09KC1qK3ApLygy KmkpLG0+MCYmMT5tJiZxLnB1c2gobSksbj0oLWotcCkvKDIqaSksbj4wJiYx Pm4mJnEucHVzaChuKSk7Zm9yKHZhciB0LHU9cS5sZW5ndGgsdj11O3UtLTsp bD1xW3VdLHQ9MS1sLHJbMF1bdV09dCp0KnQqYSszKnQqdCpsKmMrMyp0Kmwq bCplK2wqbCpsKmcsclsxXVt1XT10KnQqdCpiKzMqdCp0KmwqZCszKnQqbCps KmYrbCpsKmwqaDtyZXR1cm4gclswXVt2XT1hLHJbMV1bdl09YixyWzBdW3Yr MV09ZyxyWzFdW3YrMV09aCxyWzBdLmxlbmd0aD1yWzFdLmxlbmd0aD12KzIs e21pbjp7eDpQLmFwcGx5KDAsclswXSkseTpQLmFwcGx5KDAsclsxXSl9LG1h eDp7eDpRLmFwcGx5KDAsclswXSkseTpRLmFwcGx5KDAsclsxXSl9fX1mdW5j dGlvbiBFKGEsYil7dmFyIGQ9IWImJmMoYSk7aWYoIWImJmQuY3VydmUpcmV0 dXJuIGYoZC5jdXJ2ZSk7Zm9yKHZhciBlPXooYSksZz1iJiZ6KGIpLGg9e3g6 MCx5OjAsYng6MCxieTowLFg6MCxZOjAscXg6bnVsbCxxeTpudWxsfSxpPXt4 OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0saj0o ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoIWEpcmV0dXJuWyJDIixiLngs Yi55LGIueCxiLnksYi54LGIueV07c3dpdGNoKCEoYVswXWlue1Q6MSxROjF9 KSYmKGIucXg9Yi5xeT1udWxsKSxhWzBdKXtjYXNlIk0iOmIuWD1hWzFdLGIu WT1hWzJdO2JyZWFrO2Nhc2UiQSI6YT1bIkMiXS5jb25jYXQoQy5hcHBseSgw LFtiLngsYi55XS5jb25jYXQoYS5zbGljZSgxKSkpKTticmVhaztjYXNlIlMi OiJDIj09Y3x8IlMiPT1jPyhkPTIqYi54LWIuYngsZT0yKmIueS1iLmJ5KToo ZD1iLngsZT1iLnkpLGE9WyJDIixkLGVdLmNvbmNhdChhLnNsaWNlKDEpKTti cmVhaztjYXNlIlQiOiJRIj09Y3x8IlQiPT1jPyhiLnF4PTIqYi54LWIucXgs Yi5xeT0yKmIueS1iLnF5KTooYi5xeD1iLngsYi5xeT1iLnkpLGE9WyJDIl0u Y29uY2F0KEIoYi54LGIueSxiLnF4LGIucXksYVsxXSxhWzJdKSk7YnJlYWs7 Y2FzZSJRIjpiLnF4PWFbMV0sYi5xeT1hWzJdLGE9WyJDIl0uY29uY2F0KEIo Yi54LGIueSxhWzFdLGFbMl0sYVszXSxhWzRdKSk7YnJlYWs7Y2FzZSJMIjph PVsiQyJdLmNvbmNhdChBKGIueCxiLnksYVsxXSxhWzJdKSk7YnJlYWs7Y2Fz ZSJIIjphPVsiQyJdLmNvbmNhdChBKGIueCxiLnksYVsxXSxiLnkpKTticmVh aztjYXNlIlYiOmE9WyJDIl0uY29uY2F0KEEoYi54LGIueSxiLngsYVsxXSkp O2JyZWFrO2Nhc2UiWiI6YT1bIkMiXS5jb25jYXQoQShiLngsYi55LGIuWCxi LlkpKX1yZXR1cm4gYX0pLGs9ZnVuY3Rpb24oYSxiKXtpZihhW2JdLmxlbmd0 aD43KXthW2JdLnNoaWZ0KCk7Zm9yKHZhciBjPWFbYl07Yy5sZW5ndGg7KW1b Yl09IkEiLGcmJihuW2JdPSJBIiksYS5zcGxpY2UoYisrLDAsWyJDIl0uY29u Y2F0KGMuc3BsaWNlKDAsNikpKTthLnNwbGljZShiLDEpLHI9UShlLmxlbmd0 aCxnJiZnLmxlbmd0aHx8MCl9fSxsPWZ1bmN0aW9uKGEsYixjLGQsZil7YSYm YiYmIk0iPT1hW2ZdWzBdJiYiTSIhPWJbZl1bMF0mJihiLnNwbGljZShmLDAs WyJNIixkLngsZC55XSksYy5ieD0wLGMuYnk9MCxjLng9YVtmXVsxXSxjLnk9 YVtmXVsyXSxyPVEoZS5sZW5ndGgsZyYmZy5sZW5ndGh8fDApKX0sbT1bXSxu PVtdLG89IiIscD0iIixxPTAscj1RKGUubGVuZ3RoLGcmJmcubGVuZ3RofHww KTtyPnE7cSsrKXtlW3FdJiYobz1lW3FdWzBdKSwiQyIhPW8mJihtW3FdPW8s cSYmKHA9bVtxLTFdKSksZVtxXT1qKGVbcV0saCxwKSwiQSIhPW1bcV0mJiJD Ij09byYmKG1bcV09IkMiKSxrKGUscSksZyYmKGdbcV0mJihvPWdbcV1bMF0p LCJDIiE9byYmKG5bcV09byxxJiYocD1uW3EtMV0pKSxnW3FdPWooZ1txXSxp LHApLCJBIiE9bltxXSYmIkMiPT1vJiYobltxXT0iQyIpLGsoZyxxKSksbChl LGcsaCxpLHEpLGwoZyxlLGksaCxxKTt2YXIgcz1lW3FdLHQ9ZyYmZ1txXSx1 PXMubGVuZ3RoLHY9ZyYmdC5sZW5ndGg7aC54PXNbdS0yXSxoLnk9c1t1LTFd LGguYng9TShzW3UtNF0pfHxoLngsaC5ieT1NKHNbdS0zXSl8fGgueSxpLmJ4 PWcmJihNKHRbdi00XSl8fGkueCksaS5ieT1nJiYoTSh0W3YtM10pfHxpLnkp LGkueD1nJiZ0W3YtMl0saS55PWcmJnRbdi0xXX1yZXR1cm4gZ3x8KGQuY3Vy dmU9ZihlKSksZz9bZSxnXTplfWZ1bmN0aW9uIEYoYSxiKXtpZighYilyZXR1 cm4gYTt2YXIgYyxkLGUsZixnLGgsaTtmb3IoYT1FKGEpLGU9MCxnPWEubGVu Z3RoO2c+ZTtlKyspZm9yKGk9YVtlXSxmPTEsaD1pLmxlbmd0aDtoPmY7Zis9 MiljPWIueChpW2ZdLGlbZisxXSksZD1iLnkoaVtmXSxpW2YrMV0pLGlbZl09 YyxpW2YrMV09ZDtyZXR1cm4gYX1mdW5jdGlvbiBHKGEsYil7Zm9yKHZhciBj PVtdLGQ9MCxlPWEubGVuZ3RoO2UtMiohYj5kO2QrPTIpe3ZhciBmPVt7eDor YVtkLTJdLHk6K2FbZC0xXX0se3g6K2FbZF0seTorYVtkKzFdfSx7eDorYVtk KzJdLHk6K2FbZCszXX0se3g6K2FbZCs0XSx5OithW2QrNV19XTtiP2Q/ZS00 PT1kP2ZbM109e3g6K2FbMF0seTorYVsxXX06ZS0yPT1kJiYoZlsyXT17eDor YVswXSx5OithWzFdfSxmWzNdPXt4OithWzJdLHk6K2FbM119KTpmWzBdPXt4 OithW2UtMl0seTorYVtlLTFdfTplLTQ9PWQ/ZlszXT1mWzJdOmR8fChmWzBd PXt4OithW2RdLHk6K2FbZCsxXX0pLGMucHVzaChbIkMiLCgtZlswXS54KzYq ZlsxXS54K2ZbMl0ueCkvNiwoLWZbMF0ueSs2KmZbMV0ueStmWzJdLnkpLzYs KGZbMV0ueCs2KmZbMl0ueC1mWzNdLngpLzYsKGZbMV0ueSs2KmZbMl0ueS1m WzNdLnkpLzYsZlsyXS54LGZbMl0ueV0pfXJldHVybiBjfXZhciBIPWIucHJv dG90eXBlLEk9YS5pcyxKPWEuXy5jbG9uZSxLPSJoYXNPd25Qcm9wZXJ0eSIs TD0vLD8oW2Etel0pLD8vZ2ksTT1wYXJzZUZsb2F0LE49TWF0aCxPPU4uUEks UD1OLm1pbixRPU4ubWF4LFI9Ti5wb3csUz1OLmFicyxUPWgoMSksVT1oKCks Vj1oKDAsMSksVz1hLl91bml0MnB4LFg9e3BhdGg6ZnVuY3Rpb24oYSl7cmV0 dXJuIGEuYXR0cigicGF0aCIpfSxjaXJjbGU6ZnVuY3Rpb24oYSl7dmFyIGI9 VyhhKTtyZXR1cm4geChiLmN4LGIuY3ksYi5yKX0sZWxsaXBzZTpmdW5jdGlv bihhKXt2YXIgYj1XKGEpO3JldHVybiB4KGIuY3h8fDAsYi5jeXx8MCxiLnJ4 LGIucnkpfSxyZWN0OmZ1bmN0aW9uKGEpe3ZhciBiPVcoYSk7cmV0dXJuIHco Yi54fHwwLGIueXx8MCxiLndpZHRoLGIuaGVpZ2h0LGIucngsYi5yeSl9LGlt YWdlOmZ1bmN0aW9uKGEpe3ZhciBiPVcoYSk7cmV0dXJuIHcoYi54fHwwLGIu eXx8MCxiLndpZHRoLGIuaGVpZ2h0KX0sbGluZTpmdW5jdGlvbihhKXtyZXR1 cm4iTSIrW2EuYXR0cigieDEiKXx8MCxhLmF0dHIoInkxIil8fDAsYS5hdHRy KCJ4MiIpLGEuYXR0cigieTIiKV19LHBvbHlsaW5lOmZ1bmN0aW9uKGEpe3Jl dHVybiJNIithLmF0dHIoInBvaW50cyIpfSxwb2x5Z29uOmZ1bmN0aW9uKGEp e3JldHVybiJNIithLmF0dHIoInBvaW50cyIpKyJ6In0sZGVmbHQ6ZnVuY3Rp b24oYSl7dmFyIGI9YS5ub2RlLmdldEJCb3goKTtyZXR1cm4gdyhiLngsYi55 LGIud2lkdGgsYi5oZWlnaHQpfX07YS5wYXRoPWMsYS5wYXRoLmdldFRvdGFs TGVuZ3RoPVQsYS5wYXRoLmdldFBvaW50QXRMZW5ndGg9VSxhLnBhdGguZ2V0 U3VicGF0aD1mdW5jdGlvbihhLGIsYyl7aWYodGhpcy5nZXRUb3RhbExlbmd0 aChhKS1jPDFlLTYpcmV0dXJuIFYoYSxiKS5lbmQ7dmFyIGQ9VihhLGMsMSk7 cmV0dXJuIGI/VihkLGIpLmVuZDpkfSxILmdldFRvdGFsTGVuZ3RoPWZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5nZXRUb3RhbExlbmd0aD90aGlzLm5v ZGUuZ2V0VG90YWxMZW5ndGgoKTp2b2lkIDB9LEguZ2V0UG9pbnRBdExlbmd0 aD1mdW5jdGlvbihhKXtyZXR1cm4gVSh0aGlzLmF0dHIoImQiKSxhKX0sSC5n ZXRTdWJwYXRoPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEucGF0aC5nZXRTdWJw YXRoKHRoaXMuYXR0cigiZCIpLGIsYyl9LGEuXy5ib3g9ZCxhLnBhdGguZmlu ZERvdHNBdFNlZ21lbnQ9aSxhLnBhdGguYmV6aWVyQkJveD1qLGEucGF0aC5p c1BvaW50SW5zaWRlQkJveD1rLGEuY2xvc2VzdD1mdW5jdGlvbihiLGMsZSxm KXtmb3IodmFyIGc9MTAwLGg9ZChiLWcvMixjLWcvMixnLGcpLGk9W10saj1l WzBdLmhhc093blByb3BlcnR5KCJ4Iik/ZnVuY3Rpb24oYSl7cmV0dXJue3g6 ZVthXS54LHk6ZVthXS55fX06ZnVuY3Rpb24oYSl7cmV0dXJue3g6ZVthXSx5 OmZbYV19fSxsPTA7MWU2Pj1nJiYhbDspe2Zvcih2YXIgbT0wLG49ZS5sZW5n dGg7bj5tO20rKyl7dmFyIG89aihtKTtpZihrKGgsby54LG8ueSkpe2wrKyxp LnB1c2gobyk7YnJlYWt9fWx8fChnKj0yLGg9ZChiLWcvMixjLWcvMixnLGcp KX1pZigxZTYhPWcpe3ZhciBwLHE9MS8wO2ZvcihtPTAsbj1pLmxlbmd0aDtu Pm07bSsrKXt2YXIgcj1hLmxlbihiLGMsaVttXS54LGlbbV0ueSk7cT5yJiYo cT1yLGlbbV0ubGVuPXIscD1pW21dKX1yZXR1cm4gcH19LGEucGF0aC5pc0JC b3hJbnRlcnNlY3Q9bCxhLnBhdGguaW50ZXJzZWN0aW9uPXIsYS5wYXRoLmlu dGVyc2VjdGlvbk51bWJlcj1zLGEucGF0aC5pc1BvaW50SW5zaWRlPXUsYS5w YXRoLmdldEJCb3g9dixhLnBhdGguZ2V0PVgsYS5wYXRoLnRvUmVsYXRpdmU9 eSxhLnBhdGgudG9BYnNvbHV0ZT16LGEucGF0aC50b0N1YmljPUUsYS5wYXRo Lm1hcD1GLGEucGF0aC50b1N0cmluZz1lLGEucGF0aC5jbG9uZT1mfSksZC5w bHVnaW4oZnVuY3Rpb24oYSl7dmFyIGQ9TWF0aC5tYXgsZT1NYXRoLm1pbixm PWZ1bmN0aW9uKGEpe2lmKHRoaXMuaXRlbXM9W10sdGhpcy5iaW5kaW5ncz17 fSx0aGlzLmxlbmd0aD0wLHRoaXMudHlwZT0ic2V0IixhKWZvcih2YXIgYj0w LGM9YS5sZW5ndGg7Yz5iO2IrKylhW2JdJiYodGhpc1t0aGlzLml0ZW1zLmxl bmd0aF09dGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aF09YVtiXSx0aGlz Lmxlbmd0aCsrKX0sZz1mLnByb3RvdHlwZTtnLnB1c2g9ZnVuY3Rpb24oKXtm b3IodmFyIGEsYixjPTAsZD1hcmd1bWVudHMubGVuZ3RoO2Q+YztjKyspYT1h cmd1bWVudHNbY10sYSYmKGI9dGhpcy5pdGVtcy5sZW5ndGgsdGhpc1tiXT10 aGlzLml0ZW1zW2JdPWEsdGhpcy5sZW5ndGgrKyk7cmV0dXJuIHRoaXN9LGcu cG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoJiZkZWxldGUgdGhp c1t0aGlzLmxlbmd0aC0tXSx0aGlzLml0ZW1zLnBvcCgpfSxnLmZvckVhY2g9 ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPXRoaXMuaXRlbXMubGVuZ3Ro O2Q+YztjKyspaWYoYS5jYWxsKGIsdGhpcy5pdGVtc1tjXSxjKT09PSExKXJl dHVybiB0aGlzO3JldHVybiB0aGlzfSxnLmFuaW1hdGU9ZnVuY3Rpb24oZCxl LGYsZyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGZ8fGYubGVuZ3RofHwoZz1mLGY9 Yy5saW5lYXIpLGQgaW5zdGFuY2VvZiBhLl8uQW5pbWF0aW9uJiYoZz1kLmNh bGxiYWNrLGY9ZC5lYXNpbmcsZT1mLmR1cixkPWQuYXR0cik7dmFyIGg9YXJn dW1lbnRzO2lmKGEuaXMoZCwiYXJyYXkiKSYmYS5pcyhoW2gubGVuZ3RoLTFd LCJhcnJheSIpKXZhciBpPSEwO3ZhciBqLGs9ZnVuY3Rpb24oKXtqP3RoaXMu Yj1qOmo9dGhpcy5ifSxsPTAsbT10aGlzLG49ZyYmZnVuY3Rpb24oKXsrK2w9 PW0ubGVuZ3RoJiZnLmNhbGwodGhpcykKK307cmV0dXJuIHRoaXMuZm9yRWFj aChmdW5jdGlvbihhLGMpe2Iub25jZSgic25hcC5hbmltY3JlYXRlZC4iK2Eu aWQsayksaT9oW2NdJiZhLmFuaW1hdGUuYXBwbHkoYSxoW2NdKTphLmFuaW1h dGUoZCxlLGYsbil9KX0sZy5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IoO3RoaXMu bGVuZ3RoOyl0aGlzLnBvcCgpLnJlbW92ZSgpO3JldHVybiB0aGlzfSxnLmJp bmQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2lmKCJmdW5jdGlvbiI9PXR5 cGVvZiBiKXRoaXMuYmluZGluZ3NbYV09YjtlbHNle3ZhciBlPWN8fGE7dGhp cy5iaW5kaW5nc1thXT1mdW5jdGlvbihhKXtkW2VdPWEsYi5hdHRyKGQpfX1y ZXR1cm4gdGhpc30sZy5hdHRyPWZ1bmN0aW9uKGEpe3ZhciBiPXt9O2Zvcih2 YXIgYyBpbiBhKXRoaXMuYmluZGluZ3NbY10/dGhpcy5iaW5kaW5nc1tjXShh W2NdKTpiW2NdPWFbY107Zm9yKHZhciBkPTAsZT10aGlzLml0ZW1zLmxlbmd0 aDtlPmQ7ZCsrKXRoaXMuaXRlbXNbZF0uYXR0cihiKTtyZXR1cm4gdGhpc30s Zy5jbGVhcj1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg7KXRoaXMucG9w KCl9LGcuc3BsaWNlPWZ1bmN0aW9uKGEsYil7YT0wPmE/ZCh0aGlzLmxlbmd0 aCthLDApOmEsYj1kKDAsZSh0aGlzLmxlbmd0aC1hLGIpKTt2YXIgYyxnPVtd LGg9W10saT1bXTtmb3IoYz0yO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspaS5w dXNoKGFyZ3VtZW50c1tjXSk7Zm9yKGM9MDtiPmM7YysrKWgucHVzaCh0aGlz W2ErY10pO2Zvcig7Yzx0aGlzLmxlbmd0aC1hO2MrKylnLnB1c2godGhpc1th K2NdKTt2YXIgaj1pLmxlbmd0aDtmb3IoYz0wO2M8aitnLmxlbmd0aDtjKysp dGhpcy5pdGVtc1thK2NdPXRoaXNbYStjXT1qPmM/aVtjXTpnW2Mtal07Zm9y KGM9dGhpcy5pdGVtcy5sZW5ndGg9dGhpcy5sZW5ndGgtPWItajt0aGlzW2Nd OylkZWxldGUgdGhpc1tjKytdO3JldHVybiBuZXcgZihoKX0sZy5leGNsdWRl PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9dGhpcy5sZW5ndGg7Yz5iO2Ir KylpZih0aGlzW2JdPT1hKXJldHVybiB0aGlzLnNwbGljZShiLDEpLCEwO3Jl dHVybiExfSxnLmluc2VydEFmdGVyPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10 aGlzLml0ZW1zLmxlbmd0aDtiLS07KXRoaXMuaXRlbXNbYl0uaW5zZXJ0QWZ0 ZXIoYSk7cmV0dXJuIHRoaXN9LGcuZ2V0QkJveD1mdW5jdGlvbigpe2Zvcih2 YXIgYT1bXSxiPVtdLGM9W10sZj1bXSxnPXRoaXMuaXRlbXMubGVuZ3RoO2ct LTspaWYoIXRoaXMuaXRlbXNbZ10ucmVtb3ZlZCl7dmFyIGg9dGhpcy5pdGVt c1tnXS5nZXRCQm94KCk7YS5wdXNoKGgueCksYi5wdXNoKGgueSksYy5wdXNo KGgueCtoLndpZHRoKSxmLnB1c2goaC55K2guaGVpZ2h0KX1yZXR1cm4gYT1l LmFwcGx5KDAsYSksYj1lLmFwcGx5KDAsYiksYz1kLmFwcGx5KDAsYyksZj1k LmFwcGx5KDAsZikse3g6YSx5OmIseDI6Yyx5MjpmLHdpZHRoOmMtYSxoZWln aHQ6Zi1iLGN4OmErKGMtYSkvMixjeTpiKyhmLWIpLzJ9fSxnLmNsb25lPWZ1 bmN0aW9uKGEpe2E9bmV3IGY7Zm9yKHZhciBiPTAsYz10aGlzLml0ZW1zLmxl bmd0aDtjPmI7YisrKWEucHVzaCh0aGlzLml0ZW1zW2JdLmNsb25lKCkpO3Jl dHVybiBhfSxnLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNuYXDigJhz IHNldCJ9LGcudHlwZT0ic2V0IixhLlNldD1mLGEuc2V0PWZ1bmN0aW9uKCl7 dmFyIGE9bmV3IGY7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJmEucHVzaC5h cHBseShhLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyww KSksYX19KSxkLnBsdWdpbihmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIGQoYSl7 dmFyIGI9YVswXTtzd2l0Y2goYi50b0xvd2VyQ2FzZSgpKXtjYXNlInQiOnJl dHVybltiLDAsMF07Y2FzZSJtIjpyZXR1cm5bYiwxLDAsMCwxLDAsMF07Y2Fz ZSJyIjpyZXR1cm4gND09YS5sZW5ndGg/W2IsMCxhWzJdLGFbM11dOltiLDBd O2Nhc2UicyI6cmV0dXJuIDU9PWEubGVuZ3RoP1tiLDEsMSxhWzNdLGFbNF1d OjM9PWEubGVuZ3RoP1tiLDEsMV06W2IsMV19fWZ1bmN0aW9uIGUoYixjLGUp e2M9cChjKS5yZXBsYWNlKC9cLnszfXxcdTIwMjYvZyxiKSxiPWEucGFyc2VU cmFuc2Zvcm1TdHJpbmcoYil8fFtdLGM9YS5wYXJzZVRyYW5zZm9ybVN0cmlu ZyhjKXx8W107Zm9yKHZhciBmLGcsaCxpLGw9TWF0aC5tYXgoYi5sZW5ndGgs Yy5sZW5ndGgpLG09W10sbj1bXSxvPTA7bD5vO28rKyl7aWYoaD1iW29dfHxk KGNbb10pLGk9Y1tvXXx8ZChoKSxoWzBdIT1pWzBdfHwiciI9PWhbMF0udG9M b3dlckNhc2UoKSYmKGhbMl0hPWlbMl18fGhbM10hPWlbM10pfHwicyI9PWhb MF0udG9Mb3dlckNhc2UoKSYmKGhbM10hPWlbM118fGhbNF0hPWlbNF0pKXti PWEuXy50cmFuc2Zvcm0ybWF0cml4KGIsZSgpKSxjPWEuXy50cmFuc2Zvcm0y bWF0cml4KGMsZSgpKSxtPVtbIm0iLGIuYSxiLmIsYi5jLGIuZCxiLmUsYi5m XV0sbj1bWyJtIixjLmEsYy5iLGMuYyxjLmQsYy5lLGMuZl1dO2JyZWFrfWZv cihtW29dPVtdLG5bb109W10sZj0wLGc9TWF0aC5tYXgoaC5sZW5ndGgsaS5s ZW5ndGgpO2c+ZjtmKyspZiBpbiBoJiYobVtvXVtmXT1oW2ZdKSxmIGluIGkm JihuW29dW2ZdPWlbZl0pfXJldHVybntmcm9tOmsobSksdG86ayhuKSxmOmoo bSl9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gZyhhKXtyZXR1 cm4gZnVuY3Rpb24oYil7cmV0dXJuK2IudG9GaXhlZCgzKSthfX1mdW5jdGlv biBoKGEpe3JldHVybiBhLmpvaW4oIiAiKX1mdW5jdGlvbiBpKGIpe3JldHVy biBhLnJnYihiWzBdLGJbMV0sYlsyXSl9ZnVuY3Rpb24gaihhKXt2YXIgYixj LGQsZSxmLGcsaD0wLGk9W107Zm9yKGI9MCxjPWEubGVuZ3RoO2M+YjtiKysp e2ZvcihmPSJbIixnPVsnIicrYVtiXVswXSsnIiddLGQ9MSxlPWFbYl0ubGVu Z3RoO2U+ZDtkKyspZ1tkXT0idmFsWyIraCsrICsiXSI7Zis9ZysiXSIsaVti XT1mfXJldHVybiBGdW5jdGlvbigidmFsIiwicmV0dXJuIFNuYXAucGF0aC50 b1N0cmluZy5jYWxsKFsiK2krIl0pIil9ZnVuY3Rpb24gayhhKXtmb3IodmFy IGI9W10sYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKylmb3IodmFyIGU9MSxmPWFb Y10ubGVuZ3RoO2Y+ZTtlKyspYi5wdXNoKGFbY11bZV0pO3JldHVybiBifWZ1 bmN0aW9uIGwoYSl7cmV0dXJuIGlzRmluaXRlKHBhcnNlRmxvYXQoYSkpfWZ1 bmN0aW9uIG0oYixjKXtyZXR1cm4gYS5pcyhiLCJhcnJheSIpJiZhLmlzKGMs ImFycmF5Iik/Yi50b1N0cmluZygpPT1jLnRvU3RyaW5nKCk6ITF9dmFyIG49 e30sbz0vW2Etel0rJC9pLHA9U3RyaW5nO24uc3Ryb2tlPW4uZmlsbD0iY29s b3VyIixjLnByb3RvdHlwZS5lcXVhbD1mdW5jdGlvbihhLGMpe3JldHVybiBi KCJzbmFwLnV0aWwuZXF1YWwiLHRoaXMsYSxjKS5maXJzdERlZmluZWQoKX0s Yi5vbigic25hcC51dGlsLmVxdWFsIixmdW5jdGlvbihiLGMpe3ZhciBkLHEs cj1wKHRoaXMuYXR0cihiKXx8IiIpLHM9dGhpcztpZihsKHIpJiZsKGMpKXJl dHVybntmcm9tOnBhcnNlRmxvYXQociksdG86cGFyc2VGbG9hdChjKSxmOmZ9 O2lmKCJjb2xvdXIiPT1uW2JdKXJldHVybiBkPWEuY29sb3IocikscT1hLmNv bG9yKGMpLHtmcm9tOltkLnIsZC5nLGQuYixkLm9wYWNpdHldLHRvOltxLnIs cS5nLHEuYixxLm9wYWNpdHldLGY6aX07aWYoInZpZXdCb3giPT1iKXJldHVy biBkPXRoaXMuYXR0cihiKS52Yi5zcGxpdCgiICIpLm1hcChOdW1iZXIpLHE9 Yy5zcGxpdCgiICIpLm1hcChOdW1iZXIpLHtmcm9tOmQsdG86cSxmOmh9O2lm KCJ0cmFuc2Zvcm0iPT1ifHwiZ3JhZGllbnRUcmFuc2Zvcm0iPT1ifHwicGF0 dGVyblRyYW5zZm9ybSI9PWIpcmV0dXJuIGMgaW5zdGFuY2VvZiBhLk1hdHJp eCYmKGM9Yy50b1RyYW5zZm9ybVN0cmluZygpKSxhLl8ucmdUcmFuc2Zvcm0u dGVzdChjKXx8KGM9YS5fLnN2Z1RyYW5zZm9ybTJzdHJpbmcoYykpLGUocixj LGZ1bmN0aW9uKCl7cmV0dXJuIHMuZ2V0QkJveCgxKX0pO2lmKCJkIj09Ynx8 InBhdGgiPT1iKXJldHVybiBkPWEucGF0aC50b0N1YmljKHIsYykse2Zyb206 ayhkWzBdKSx0bzprKGRbMV0pLGY6aihkWzBdKX07aWYoInBvaW50cyI9PWIp cmV0dXJuIGQ9cChyKS5zcGxpdChhLl8uc2VwYXJhdG9yKSxxPXAoYykuc3Bs aXQoYS5fLnNlcGFyYXRvcikse2Zyb206ZCx0bzpxLGY6ZnVuY3Rpb24oYSl7 cmV0dXJuIGF9fTt2YXIgdD1yLm1hdGNoKG8pLHU9cChjKS5tYXRjaChvKTty ZXR1cm4gdCYmbSh0LHUpP3tmcm9tOnBhcnNlRmxvYXQociksdG86cGFyc2VG bG9hdChjKSxmOmcodCl9Ontmcm9tOnRoaXMuYXNQWChiKSx0bzp0aGlzLmFz UFgoYixjKSxmOmZ9fSl9KSxkLnBsdWdpbihmdW5jdGlvbihhLGMsZCxlKXtm b3IodmFyIGY9Yy5wcm90b3R5cGUsZz0iaGFzT3duUHJvcGVydHkiLGg9KCJj cmVhdGVUb3VjaCJpbiBlLmRvYyksaT1bImNsaWNrIiwiZGJsY2xpY2siLCJt b3VzZWRvd24iLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNlb3ZlciIs Im1vdXNldXAiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQi LCJ0b3VjaGNhbmNlbCJdLGo9e21vdXNlZG93bjoidG91Y2hzdGFydCIsbW91 c2Vtb3ZlOiJ0b3VjaG1vdmUiLG1vdXNldXA6InRvdWNoZW5kIn0saz0oZnVu Y3Rpb24oYSxiKXt2YXIgYz0ieSI9PWE/InNjcm9sbFRvcCI6InNjcm9sbExl ZnQiLGQ9YiYmYi5ub2RlP2Iubm9kZS5vd25lckRvY3VtZW50OmUuZG9jO3Jl dHVybiBkW2MgaW4gZC5kb2N1bWVudEVsZW1lbnQ/ImRvY3VtZW50RWxlbWVu dCI6ImJvZHkiXVtjXX0pLGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcmln aW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LG09ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSxuPWZ1 bmN0aW9uKGEsYixjLGQpe3ZhciBlPWgmJmpbYl0/altiXTpiLGY9ZnVuY3Rp b24oZSl7dmFyIGY9aygieSIsZCksaT1rKCJ4IixkKTtpZihoJiZqW2ddKGIp KWZvcih2YXIgbj0wLG89ZS50YXJnZXRUb3VjaGVzJiZlLnRhcmdldFRvdWNo ZXMubGVuZ3RoO28+bjtuKyspaWYoZS50YXJnZXRUb3VjaGVzW25dLnRhcmdl dD09YXx8YS5jb250YWlucyhlLnRhcmdldFRvdWNoZXNbbl0udGFyZ2V0KSl7 dmFyIHA9ZTtlPWUudGFyZ2V0VG91Y2hlc1tuXSxlLm9yaWdpbmFsRXZlbnQ9 cCxlLnByZXZlbnREZWZhdWx0PWwsZS5zdG9wUHJvcGFnYXRpb249bTticmVh a312YXIgcT1lLmNsaWVudFgraSxyPWUuY2xpZW50WStmO3JldHVybiBjLmNh bGwoZCxlLHEscil9O3JldHVybiBiIT09ZSYmYS5hZGRFdmVudExpc3RlbmVy KGIsZiwhMSksYS5hZGRFdmVudExpc3RlbmVyKGUsZiwhMSksZnVuY3Rpb24o KXtyZXR1cm4gYiE9PWUmJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGYsITEp LGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGYsITEpLCEwfX0sbz1bXSxwPWZ1 bmN0aW9uKGEpe2Zvcih2YXIgYyxkPWEuY2xpZW50WCxlPWEuY2xpZW50WSxm PWsoInkiKSxnPWsoIngiKSxpPW8ubGVuZ3RoO2ktLTspe2lmKGM9b1tpXSxo KXtmb3IodmFyIGosbD1hLnRvdWNoZXMmJmEudG91Y2hlcy5sZW5ndGg7bC0t OylpZihqPWEudG91Y2hlc1tsXSxqLmlkZW50aWZpZXI9PWMuZWwuX2RyYWcu aWR8fGMuZWwubm9kZS5jb250YWlucyhqLnRhcmdldCkpe2Q9ai5jbGllbnRY LGU9ai5jbGllbnRZLChhLm9yaWdpbmFsRXZlbnQ/YS5vcmlnaW5hbEV2ZW50 OmEpLnByZXZlbnREZWZhdWx0KCk7YnJlYWt9fWVsc2UgYS5wcmV2ZW50RGVm YXVsdCgpO3t2YXIgbT1jLmVsLm5vZGU7bS5uZXh0U2libGluZyxtLnBhcmVu dE5vZGUsbS5zdHlsZS5kaXNwbGF5fWQrPWcsZSs9ZixiKCJzbmFwLmRyYWcu bW92ZS4iK2MuZWwuaWQsYy5tb3ZlX3Njb3BlfHxjLmVsLGQtYy5lbC5fZHJh Zy54LGUtYy5lbC5fZHJhZy55LGQsZSxhKX19LHE9ZnVuY3Rpb24oYyl7YS51 bm1vdXNlbW92ZShwKS51bm1vdXNldXAocSk7Zm9yKHZhciBkLGU9by5sZW5n dGg7ZS0tOylkPW9bZV0sZC5lbC5fZHJhZz17fSxiKCJzbmFwLmRyYWcuZW5k LiIrZC5lbC5pZCxkLmVuZF9zY29wZXx8ZC5zdGFydF9zY29wZXx8ZC5tb3Zl X3Njb3BlfHxkLmVsLGMpLGIub2ZmKCJzbmFwLmRyYWcuKi4iK2QuZWwuaWQp O289W119LHI9aS5sZW5ndGg7ci0tOykhZnVuY3Rpb24oYil7YVtiXT1mW2Jd PWZ1bmN0aW9uKGMsZCl7aWYoYS5pcyhjLCJmdW5jdGlvbiIpKXRoaXMuZXZl bnRzPXRoaXMuZXZlbnRzfHxbXSx0aGlzLmV2ZW50cy5wdXNoKHtuYW1lOmIs ZjpjLHVuYmluZDpuKHRoaXMubm9kZXx8ZG9jdW1lbnQsYixjLGR8fHRoaXMp fSk7ZWxzZSBmb3IodmFyIGU9MCxmPXRoaXMuZXZlbnRzLmxlbmd0aDtmPmU7 ZSsrKWlmKHRoaXMuZXZlbnRzW2VdLm5hbWU9PWIpdHJ5e3RoaXMuZXZlbnRz W2VdLmYuY2FsbCh0aGlzKX1jYXRjaChnKXt9cmV0dXJuIHRoaXN9LGFbInVu IitiXT1mWyJ1biIrYl09ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPXRoaXMuZXZl bnRzfHxbXSxkPWMubGVuZ3RoO2QtLTspaWYoY1tkXS5uYW1lPT1iJiYoY1tk XS5mPT1hfHwhYSkpcmV0dXJuIGNbZF0udW5iaW5kKCksYy5zcGxpY2UoZCwx KSwhYy5sZW5ndGgmJmRlbGV0ZSB0aGlzLmV2ZW50cyx0aGlzO3JldHVybiB0 aGlzfX0oaVtyXSk7Zi5ob3Zlcj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4g dGhpcy5tb3VzZW92ZXIoYSxjKS5tb3VzZW91dChiLGR8fGMpfSxmLnVuaG92 ZXI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy51bm1vdXNlb3ZlcihhKS51 bm1vdXNlb3V0KGIpfTt2YXIgcz1bXTtmLmRyYWc9ZnVuY3Rpb24oYyxkLGUs ZixnLGgpe2Z1bmN0aW9uIGkoaSxqLGwpeyhpLm9yaWdpbmFsRXZlbnR8fGkp LnByZXZlbnREZWZhdWx0KCksay5fZHJhZy54PWosay5fZHJhZy55PWwsay5f ZHJhZy5pZD1pLmlkZW50aWZpZXIsIW8ubGVuZ3RoJiZhLm1vdXNlbW92ZShw KS5tb3VzZXVwKHEpLG8ucHVzaCh7ZWw6ayxtb3ZlX3Njb3BlOmYsc3RhcnRf c2NvcGU6ZyxlbmRfc2NvcGU6aH0pLGQmJmIub24oInNuYXAuZHJhZy5zdGFy dC4iK2suaWQsZCksYyYmYi5vbigic25hcC5kcmFnLm1vdmUuIitrLmlkLGMp LGUmJmIub24oInNuYXAuZHJhZy5lbmQuIitrLmlkLGUpLGIoInNuYXAuZHJh Zy5zdGFydC4iK2suaWQsZ3x8Znx8ayxqLGwsaSl9ZnVuY3Rpb24gaihhLGMs ZCl7Yigic25hcC5kcmFnaW5pdC4iK2suaWQsayxhLGMsZCl9dmFyIGs9dGhp cztpZighYXJndW1lbnRzLmxlbmd0aCl7dmFyIGw7cmV0dXJuIGsuZHJhZyhm dW5jdGlvbihhLGIpe3RoaXMuYXR0cih7dHJhbnNmb3JtOmwrKGw/IlQiOiJ0 IikrW2EsYl19KX0sZnVuY3Rpb24oKXtsPXRoaXMudHJhbnNmb3JtKCkubG9j YWx9KX1yZXR1cm4gYi5vbigic25hcC5kcmFnaW5pdC4iK2suaWQsaSksay5f ZHJhZz17fSxzLnB1c2goe2VsOmssc3RhcnQ6aSxpbml0Omp9KSxrLm1vdXNl ZG93bihqKSxrfSxmLnVuZHJhZz1mdW5jdGlvbigpe2Zvcih2YXIgYz1zLmxl bmd0aDtjLS07KXNbY10uZWw9PXRoaXMmJih0aGlzLnVubW91c2Vkb3duKHNb Y10uaW5pdCkscy5zcGxpY2UoYywxKSxiLnVuYmluZCgic25hcC5kcmFnLiou Iit0aGlzLmlkKSxiLnVuYmluZCgic25hcC5kcmFnaW5pdC4iK3RoaXMuaWQp KTtyZXR1cm4hcy5sZW5ndGgmJmEudW5tb3VzZW1vdmUocCkudW5tb3VzZXVw KHEpLHRoaXN9fSksZC5wbHVnaW4oZnVuY3Rpb24oYSxjLGQpe3ZhciBlPShj LnByb3RvdHlwZSxkLnByb3RvdHlwZSksZj0vXlxzKnVybFwoKC4rKVwpLyxn PVN0cmluZyxoPWEuXy4kO2EuZmlsdGVyPXt9LGUuZmlsdGVyPWZ1bmN0aW9u KGIpe3ZhciBkPXRoaXM7InN2ZyIhPWQudHlwZSYmKGQ9ZC5wYXBlcik7dmFy IGU9YS5wYXJzZShnKGIpKSxmPWEuXy5pZCgpLGk9KGQubm9kZS5vZmZzZXRX aWR0aCxkLm5vZGUub2Zmc2V0SGVpZ2h0LGgoImZpbHRlciIpKTtyZXR1cm4g aChpLHtpZDpmLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSJ9KSxpLmFw cGVuZENoaWxkKGUubm9kZSksZC5kZWZzLmFwcGVuZENoaWxkKGkpLG5ldyBj KGkpfSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5maWx0ZXIiLGZ1bmN0aW9u KCl7Yi5zdG9wKCk7dmFyIGM9aCh0aGlzLm5vZGUsImZpbHRlciIpO2lmKGMp e3ZhciBkPWcoYykubWF0Y2goZik7cmV0dXJuIGQmJmEuc2VsZWN0KGRbMV0p fX0pLGIub24oInNuYXAudXRpbC5hdHRyLmZpbHRlciIsZnVuY3Rpb24oZCl7 aWYoZCBpbnN0YW5jZW9mIGMmJiJmaWx0ZXIiPT1kLnR5cGUpe2Iuc3RvcCgp O3ZhciBlPWQubm9kZS5pZDtlfHwoaChkLm5vZGUse2lkOmQuaWR9KSxlPWQu aWQpLGgodGhpcy5ub2RlLHtmaWx0ZXI6YS51cmwoZSl9KX1kJiYibm9uZSIh PWR8fChiLnN0b3AoKSx0aGlzLm5vZGUucmVtb3ZlQXR0cmlidXRlKCJmaWx0 ZXIiKSl9KSxhLmZpbHRlci5ibHVyPWZ1bmN0aW9uKGIsYyl7bnVsbD09YiYm KGI9Mik7dmFyIGQ9bnVsbD09Yz9iOltiLGNdO3JldHVybiBhLmZvcm1hdCgn PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0ie2RlZn0iLz4nLHtkZWY6 ZH0pfSxhLmZpbHRlci5ibHVyLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMoKX0sYS5maWx0ZXIuc2hhZG93PWZ1bmN0aW9uKGIsYyxkLGUsZil7 cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZT1kLGY9ZSxkPTQpLCJzdHJp bmciIT10eXBlb2YgZSYmKGY9ZSxlPSIjMDAwIiksZT1lfHwiIzAwMCIsbnVs bD09ZCYmKGQ9NCksbnVsbD09ZiYmKGY9MSksbnVsbD09YiYmKGI9MCxjPTIp LG51bGw9PWMmJihjPWIpLGU9YS5jb2xvcihlKSxhLmZvcm1hdCgnPGZlR2F1 c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSJ7Ymx1 cn0iLz48ZmVPZmZzZXQgZHg9IntkeH0iIGR5PSJ7ZHl9IiByZXN1bHQ9Im9m ZnNldGJsdXIiLz48ZmVGbG9vZCBmbG9vZC1jb2xvcj0ie2NvbG9yfSIvPjxm ZUNvbXBvc2l0ZSBpbjI9Im9mZnNldGJsdXIiIG9wZXJhdG9yPSJpbiIvPjxm ZUNvbXBvbmVudFRyYW5zZmVyPjxmZUZ1bmNBIHR5cGU9ImxpbmVhciIgc2xv cGU9IntvcGFjaXR5fSIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJn ZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhp YyIvPjwvZmVNZXJnZT4nLHtjb2xvcjplLGR4OmIsZHk6YyxibHVyOmQsb3Bh Y2l0eTpmfSl9LGEuZmlsdGVyLnNoYWRvdy50b1N0cmluZz1mdW5jdGlvbigp e3JldHVybiB0aGlzKCl9LGEuZmlsdGVyLmdyYXlzY2FsZT1mdW5jdGlvbihi KXtyZXR1cm4gbnVsbD09YiYmKGI9MSksYS5mb3JtYXQoJzxmZUNvbG9yTWF0 cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSJ7YX0ge2J9IHtjfSAwIDAge2R9 IHtlfSB7Zn0gMCAwIHtnfSB7Yn0ge2h9IDAgMCAwIDAgMCAxIDAiLz4nLHth Oi4yMTI2Ky43ODc0KigxLWIpLGI6LjcxNTItLjcxNTIqKDEtYiksYzouMDcy Mi0uMDcyMiooMS1iKSxkOi4yMTI2LS4yMTI2KigxLWIpLGU6LjcxNTIrLjI4 NDgqKDEtYiksZjouMDcyMi0uMDcyMiooMS1iKSxnOi4yMTI2LS4yMTI2Kigx LWIpLGg6LjA3MjIrLjkyNzgqKDEtYil9KX0sYS5maWx0ZXIuZ3JheXNjYWxl LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoKX0sYS5maWx0ZXIu c2VwaWE9ZnVuY3Rpb24oYil7cmV0dXJuIG51bGw9PWImJihiPTEpLGEuZm9y bWF0KCc8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0ie2F9 IHtifSB7Y30gMCAwIHtkfSB7ZX0ge2Z9IDAgMCB7Z30ge2h9IHtpfSAwIDAg MCAwIDAgMSAwIi8+Jyx7YTouMzkzKy42MDcqKDEtYiksYjouNzY5LS43Njkq KDEtYiksYzouMTg5LS4xODkqKDEtYiksZDouMzQ5LS4zNDkqKDEtYiksZTou Njg2Ky4zMTQqKDEtYiksZjouMTY4LS4xNjgqKDEtYiksZzouMjcyLS4yNzIq KDEtYiksaDouNTM0LS41MzQqKDEtYiksaTouMTMxKy44NjkqKDEtYil9KX0s YS5maWx0ZXIuc2VwaWEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cygpfSxhLmZpbHRlci5zYXR1cmF0ZT1mdW5jdGlvbihiKXtyZXR1cm4gbnVs bD09YiYmKGI9MSksYS5mb3JtYXQoJzxmZUNvbG9yTWF0cml4IHR5cGU9InNh dHVyYXRlIiB2YWx1ZXM9InthbW91bnR9Ii8+Jyx7YW1vdW50OjEtYn0pfSxh LmZpbHRlci5zYXR1cmF0ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0 aGlzKCl9LGEuZmlsdGVyLmh1ZVJvdGF0ZT1mdW5jdGlvbihiKXtyZXR1cm4g Yj1ifHwwLGEuZm9ybWF0KCc8ZmVDb2xvck1hdHJpeCB0eXBlPSJodWVSb3Rh dGUiIHZhbHVlcz0ie2FuZ2xlfSIvPicse2FuZ2xlOmJ9KX0sYS5maWx0ZXIu aHVlUm90YXRlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoKX0s YS5maWx0ZXIuaW52ZXJ0PWZ1bmN0aW9uKGIpe3JldHVybiBudWxsPT1iJiYo Yj0xKSxhLmZvcm1hdCgnPGZlQ29tcG9uZW50VHJhbnNmZXI+PGZlRnVuY1Ig dHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSJ7YW1vdW50fSB7YW1vdW50Mn0i Lz48ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9InthbW91bnR9 IHthbW91bnQyfSIvPjxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVl cz0ie2Ftb3VudH0ge2Ftb3VudDJ9Ii8+PC9mZUNvbXBvbmVudFRyYW5zZmVy Picse2Ftb3VudDpiLGFtb3VudDI6MS1ifSl9LGEuZmlsdGVyLmludmVydC50 b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzKCl9LGEuZmlsdGVyLmJy aWdodG5lc3M9ZnVuY3Rpb24oYil7cmV0dXJuIG51bGw9PWImJihiPTEpLGEu Zm9ybWF0KCc8ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jUiB0eXBlPSJs aW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIvPjxmZUZ1bmNHIHR5cGU9ImxpbmVh ciIgc2xvcGU9InthbW91bnR9Ii8+PGZlRnVuY0IgdHlwZT0ibGluZWFyIiBz bG9wZT0ie2Ftb3VudH0iLz48L2ZlQ29tcG9uZW50VHJhbnNmZXI+Jyx7YW1v dW50OmJ9KX0sYS5maWx0ZXIuYnJpZ2h0bmVzcy50b1N0cmluZz1mdW5jdGlv bigpe3JldHVybiB0aGlzKCl9LGEuZmlsdGVyLmNvbnRyYXN0PWZ1bmN0aW9u KGIpe3JldHVybiBudWxsPT1iJiYoYj0xKSxhLmZvcm1hdCgnPGZlQ29tcG9u ZW50VHJhbnNmZXI+PGZlRnVuY1IgdHlwZT0ibGluZWFyIiBzbG9wZT0ie2Ft b3VudH0iIGludGVyY2VwdD0ie2Ftb3VudDJ9Ii8+PGZlRnVuY0cgdHlwZT0i bGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iIGludGVyY2VwdD0ie2Ftb3VudDJ9 Ii8+PGZlRnVuY0IgdHlwZT0ibGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iIGlu dGVyY2VwdD0ie2Ftb3VudDJ9Ii8+PC9mZUNvbXBvbmVudFRyYW5zZmVyPics e2Ftb3VudDpiLGFtb3VudDI6LjUtYi8yfSl9LGEuZmlsdGVyLmNvbnRyYXN0 LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoKX19KSxkLnBsdWdp bihmdW5jdGlvbihhLGIpe3ZhciBjPWEuXy5ib3gsZD1hLmlzLGU9L15bXmEt el0qKFt0Ym1scmNdKS9pLGY9ZnVuY3Rpb24oKXtyZXR1cm4iVCIrdGhpcy5k eCsiLCIrdGhpcy5keX07Yi5wcm90b3R5cGUuZ2V0QWxpZ249ZnVuY3Rpb24o YSxiKXtudWxsPT1iJiZkKGEsInN0cmluZyIpJiYoYj1hLGE9bnVsbCksYT1h fHx0aGlzLnBhcGVyO3ZhciBnPWEuZ2V0QkJveD9hLmdldEJCb3goKTpjKGEp LGg9dGhpcy5nZXRCQm94KCksaT17fTtzd2l0Y2goYj1iJiZiLm1hdGNoKGUp LGI9Yj9iWzFdLnRvTG93ZXJDYXNlKCk6ImMiKXtjYXNlInQiOmkuZHg9MCxp LmR5PWcueS1oLnk7YnJlYWs7Y2FzZSJiIjppLmR4PTAsaS5keT1nLnkyLWgu eTI7YnJlYWs7Y2FzZSJtIjppLmR4PTAsaS5keT1nLmN5LWguY3k7YnJlYWs7 Y2FzZSJsIjppLmR4PWcueC1oLngsaS5keT0wO2JyZWFrO2Nhc2UiciI6aS5k eD1nLngyLWgueDIsaS5keT0wO2JyZWFrO2RlZmF1bHQ6aS5keD1nLmN4LWgu Y3gsaS5keT0wfXJldHVybiBpLnRvU3RyaW5nPWYsaX0sYi5wcm90b3R5cGUu YWxpZ249ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0oIi4u LiIrdGhpcy5nZXRBbGlnbihhLGIpKX19KSxkfSk7CmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2pzL3NuYXAuc3ZnLmpz IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9qcy9zbmFwLnN2 Zy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjBm YjZkCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0 aWMvZXhwbGFpbi9qcy9zbmFwLnN2Zy5qcwpAQCAtMCwwICsxLDgxNDkgQEAK Ky8vIFNuYXAuc3ZnIDAuNC4xCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg4oCT IDIwMTUgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkg bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0 aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg TGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz L0xJQ0VOU0UtMi4wCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBk aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv biBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9S IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt cGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0 aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIGJ1aWxkOiAyMDE1LTA0LTEz CisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBv cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBMaWNlbnNlZCB1bmRl ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu c2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0 YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93 d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVu bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g aW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRo ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs CisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUg TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw ZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl bnNlLgorLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSQIFxcCisvLyDilIIgRXZlIDAuNC4yIC0gSmF2YVNj cmlwdCBFdmVudHMgTGlicmFyeSAgICAgICAgICAgICAgICAgICAgICDilIIg XFwKKy8vIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUpCBcXAorLy8g4pSCIEF1dGhvciBEbWl0cnkgQmFyYW5v dnNraXkgKGh0dHA6Ly9kbWl0cnkuYmFyYW5vdnNraXkuY29tLykg4pSCIFxc CisvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilJggXFwKKyhmdW5jdGlvbiAoZ2xvYikgeworICAgIHZhciB2 ZXJzaW9uID0gIjAuNC4yIiwKKyAgICAgICAgaGFzID0gImhhc093blByb3Bl cnR5IiwKKyAgICAgICAgc2VwYXJhdG9yID0gL1tcLlwvXS8sCisgICAgICAg IGNvbWFzZXBhcmF0b3IgPSAvXHMqLFxzKi8sCisgICAgICAgIHdpbGRjYXJk ID0gIioiLAorICAgICAgICBmdW4gPSBmdW5jdGlvbiAoKSB7fSwKKyAgICAg ICAgbnVtc29ydCA9IGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBy ZXR1cm4gYSAtIGI7CisgICAgICAgIH0sCisgICAgICAgIGN1cnJlbnRfZXZl bnQsCisgICAgICAgIHN0b3AsCisgICAgICAgIGV2ZW50cyA9IHtuOiB7fX0s CisgICAgICAgIGZpcnN0RGVmaW5lZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMubGVuZ3RoOyBpIDwg aWk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpc1tp XSAhPSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgICAgICByZXR1 cm4gdGhpc1tpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0sCisgICAgICAgIGxhc3REZWZpbmVkID0gZnVuY3Rpb24g KCkgeworICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmxlbmd0aDsKKyAgICAg ICAgICAgIHdoaWxlICgtLWkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlw ZW9mIHRoaXNbaV0gIT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHRoaXNbaV07CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICB9LAorICAgIC8qXAorICAgICAqIGV2ZQor ICAgICBbIG1ldGhvZCBdCisgICAgICogRmlyZXMgZXZlbnQgd2l0aCBnaXZl biBgbmFtZWAsIGdpdmVuIHNjb3BlIGFuZCBvdGhlciBwYXJhbWV0ZXJzLgor ICAgICA+IEFyZ3VtZW50cworICAgICAtIG5hbWUgKHN0cmluZykgbmFtZSBv ZiB0aGUgKmV2ZW50KiwgZG90IChgLmApIG9yIHNsYXNoIChgL2ApIHNlcGFy YXRlZAorICAgICAtIHNjb3BlIChvYmplY3QpIGNvbnRleHQgZm9yIHRoZSBl dmVudCBoYW5kbGVycworICAgICAtIHZhcmFyZ3MgKC4uLikgdGhlIHJlc3Qg b2YgYXJndW1lbnRzIHdpbGwgYmUgc2VudCB0byBldmVudCBoYW5kbGVycwor ICAgICA9IChvYmplY3QpIGFycmF5IG9mIHJldHVybmVkIHZhbHVlcyBmcm9t IHRoZSBsaXN0ZW5lcnMuIEFycmF5IGhhcyB0d28gbWV0aG9kcyBgLmZpcnN0 RGVmaW5lZCgpYCBhbmQgYC5sYXN0RGVmaW5lZCgpYCB0byBnZXQgZmlyc3Qg b3IgbGFzdCBub3QgYHVuZGVmaW5lZGAgdmFsdWUuCisgICAgXCovCisgICAg ICAgIGV2ZSA9IGZ1bmN0aW9uIChuYW1lLCBzY29wZSkgeworICAgICAgICAg ICAgbmFtZSA9IFN0cmluZyhuYW1lKTsKKyAgICAgICAgICAgIHZhciBlID0g ZXZlbnRzLAorICAgICAgICAgICAgICAgIG9sZHN0b3AgPSBzdG9wLAorICAg ICAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs bChhcmd1bWVudHMsIDIpLAorICAgICAgICAgICAgICAgIGxpc3RlbmVycyA9 IGV2ZS5saXN0ZW5lcnMobmFtZSksCisgICAgICAgICAgICAgICAgeiA9IDAs CisgICAgICAgICAgICAgICAgZiA9IGZhbHNlLAorICAgICAgICAgICAgICAg IGwsCisgICAgICAgICAgICAgICAgaW5kZXhlZCA9IFtdLAorICAgICAgICAg ICAgICAgIHF1ZXVlID0ge30sCisgICAgICAgICAgICAgICAgb3V0ID0gW10s CisgICAgICAgICAgICAgICAgY2UgPSBjdXJyZW50X2V2ZW50LAorICAgICAg ICAgICAgICAgIGVycm9ycyA9IFtdOworICAgICAgICAgICAgb3V0LmZpcnN0 RGVmaW5lZCA9IGZpcnN0RGVmaW5lZDsKKyAgICAgICAgICAgIG91dC5sYXN0 RGVmaW5lZCA9IGxhc3REZWZpbmVkOworICAgICAgICAgICAgY3VycmVudF9l dmVudCA9IG5hbWU7CisgICAgICAgICAgICBzdG9wID0gMDsKKyAgICAgICAg ICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGxpc3RlbmVycy5sZW5ndGg7IGkg PCBpaTsgaSsrKSBpZiAoInpJbmRleCIgaW4gbGlzdGVuZXJzW2ldKSB7Cisg ICAgICAgICAgICAgICAgaW5kZXhlZC5wdXNoKGxpc3RlbmVyc1tpXS56SW5k ZXgpOworICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0uekluZGV4 IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBxdWV1ZVtsaXN0ZW5lcnNb aV0uekluZGV4XSA9IGxpc3RlbmVyc1tpXTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleGVkLnNvcnQobnVt c29ydCk7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXhlZFt6XSA8IDApIHsK KyAgICAgICAgICAgICAgICBsID0gcXVldWVbaW5kZXhlZFt6KytdXTsKKyAg ICAgICAgICAgICAgICBvdXQucHVzaChsLmFwcGx5KHNjb3BlLCBhcmdzKSk7 CisgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKKyAgICAgICAgICAgICAg ICAgICAgc3RvcCA9IG9sZHN0b3A7CisgICAgICAgICAgICAgICAgICAgIHJl dHVybiBvdXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgICAgICAgICBsID0gbGlzdGVuZXJzW2ldOworICAgICAgICAgICAgICAg IGlmICgiekluZGV4IiBpbiBsKSB7CisgICAgICAgICAgICAgICAgICAgIGlm IChsLnpJbmRleCA9PSBpbmRleGVkW3pdKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBvdXQucHVzaChsLmFwcGx5KHNjb3BlLCBhcmdzKSk7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHorKzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsID0gcXVldWVbaW5kZXhlZFt6XV07CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbCAmJiBvdXQucHVzaChsLmFwcGx5KHNjb3BlLCBh cmdzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3Ap IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgfSB3aGlsZSAobCkKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlW2wuekluZGV4 XSA9IGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvdXQucHVzaChsLmFw cGx5KHNjb3BlLCBhcmdzKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChz dG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHN0b3AgPSBvbGRzdG9wOworICAgICAgICAg ICAgY3VycmVudF9ldmVudCA9IGNlOworICAgICAgICAgICAgcmV0dXJuIG91 dDsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gVW5kb2N1bWVudGVkLiBEZWJ1 ZyBvbmx5LgorICAgICAgICBldmUuX2V2ZW50cyA9IGV2ZW50czsKKyAgICAv KlwKKyAgICAgKiBldmUubGlzdGVuZXJzCisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKiBJbnRlcm5hbCBtZXRob2Qgd2hpY2ggZ2l2ZXMgeW91IGFycmF5IG9m IGFsbCBldmVudCBoYW5kbGVycyB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIGJ5 IHRoZSBnaXZlbiBgbmFtZWAuCisgICAgID4gQXJndW1lbnRzCisgICAgIC0g bmFtZSAoc3RyaW5nKSBuYW1lIG9mIHRoZSBldmVudCwgZG90IChgLmApIG9y IHNsYXNoIChgL2ApIHNlcGFyYXRlZAorICAgICA9IChhcnJheSkgYXJyYXkg b2YgZXZlbnQgaGFuZGxlcnMKKyAgICBcKi8KKyAgICBldmUubGlzdGVuZXJz ID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIG5hbWVzID0gbmFt ZS5zcGxpdChzZXBhcmF0b3IpLAorICAgICAgICAgICAgZSA9IGV2ZW50cywK KyAgICAgICAgICAgIGl0ZW0sCisgICAgICAgICAgICBpdGVtcywKKyAgICAg ICAgICAgIGssCisgICAgICAgICAgICBpLAorICAgICAgICAgICAgaWksCisg ICAgICAgICAgICBqLAorICAgICAgICAgICAgamosCisgICAgICAgICAgICBu ZXMsCisgICAgICAgICAgICBlcyA9IFtlXSwKKyAgICAgICAgICAgIG91dCA9 IFtdOworICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IG5hbWVzLmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIG5lcyA9IFtdOworICAgICAg ICAgICAgZm9yIChqID0gMCwgamogPSBlcy5sZW5ndGg7IGogPCBqajsgaisr KSB7CisgICAgICAgICAgICAgICAgZSA9IGVzW2pdLm47CisgICAgICAgICAg ICAgICAgaXRlbXMgPSBbZVtuYW1lc1tpXV0sIGVbd2lsZGNhcmRdXTsKKyAg ICAgICAgICAgICAgICBrID0gMjsKKyAgICAgICAgICAgICAgICB3aGlsZSAo ay0tKSB7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1trXTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIG5lcy5wdXNoKGl0ZW0pOworICAgICAgICAgICAgICAg ICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdChpdGVtLmYgfHwgW10pOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgZXMgPSBuZXM7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIG91dDsKKyAgICB9OworICAgIC8qXAorICAgICAqIGV2 ZS5vbgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQmluZHMg Z2l2ZW4gZXZlbnQgaGFuZGxlciB3aXRoIGEgZ2l2ZW4gbmFtZS4gWW91IGNh biB1c2Ugd2lsZGNhcmRzIOKAnGAqYOKAnSBmb3IgdGhlIG5hbWVzOgorICAg ICB8IGV2ZS5vbigiKi51bmRlci4qIiwgZik7CisgICAgIHwgZXZlKCJtb3Vz ZS51bmRlci5mbG9vciIpOyAvLyB0cmlnZ2VycyBmCisgICAgICogVXNlIEBl dmUgdG8gdHJpZ2dlciB0aGUgbGlzdGVuZXIuCisgICAgICoqCisgICAgID4g QXJndW1lbnRzCisgICAgICoqCisgICAgIC0gbmFtZSAoc3RyaW5nKSBuYW1l IG9mIHRoZSBldmVudCwgZG90IChgLmApIG9yIHNsYXNoIChgL2ApIHNlcGFy YXRlZCwgd2l0aCBvcHRpb25hbCB3aWxkY2FyZHMKKyAgICAgLSBmIChmdW5j dGlvbikgZXZlbnQgaGFuZGxlciBmdW5jdGlvbgorICAgICAqKgorICAgICA9 IChmdW5jdGlvbikgcmV0dXJuZWQgZnVuY3Rpb24gYWNjZXB0cyBhIHNpbmds ZSBudW1lcmljIHBhcmFtZXRlciB0aGF0IHJlcHJlc2VudHMgei1pbmRleCBv ZiB0aGUgaGFuZGxlci4gSXQgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZSBhbmQg b25seSB1c2VkIHdoZW4geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgc29tZSBz dWJzZXQgb2YgaGFuZGxlcnMgd2lsbCBiZSBpbnZva2VkIGluIGEgZ2l2ZW4g b3JkZXIsIGRlc3BpdGUgb2YgdGhlIG9yZGVyIG9mIGFzc2lnbm1lbnQuCisg ICAgID4gRXhhbXBsZToKKyAgICAgfCBldmUub24oIm1vdXNlIiwgZWF0SXQp KDIpOworICAgICB8IGV2ZS5vbigibW91c2UiLCBzY3JlYW0pOworICAgICB8 IGV2ZS5vbigibW91c2UiLCBjYXRjaEl0KSgxKTsKKyAgICAgKiBUaGlzIHdp bGwgZW5zdXJlIHRoYXQgYGNhdGNoSXRgIGZ1bmN0aW9uIHdpbGwgYmUgY2Fs bGVkIGJlZm9yZSBgZWF0SXRgLgorICAgICAqCisgICAgICogSWYgeW91IHdh bnQgdG8gcHV0IHlvdXIgaGFuZGxlciBiZWZvcmUgbm9uLWluZGV4ZWQgaGFu ZGxlcnMsIHNwZWNpZnkgYSBuZWdhdGl2ZSB2YWx1ZS4KKyAgICAgKiBOb3Rl OiBJIGFzc3VtZSBtb3N0IG9mIHRoZSB0aW1lIHlvdSBkb27igJl0IG5lZWQg dG8gd29ycnkgYWJvdXQgei1pbmRleCwgYnV0IGl04oCZcyBuaWNlIHRvIGhh dmUgdGhpcyBmZWF0dXJlIOKAnGp1c3QgaW4gY2FzZeKAnS4KKyAgICBcKi8K KyAgICBldmUub24gPSBmdW5jdGlvbiAobmFtZSwgZikgeworICAgICAgICBu YW1lID0gU3RyaW5nKG5hbWUpOworICAgICAgICBpZiAodHlwZW9mIGYgIT0g ImZ1bmN0aW9uIikgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgp IHt9OworICAgICAgICB9CisgICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3Bs aXQoY29tYXNlcGFyYXRvcik7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBp aSA9IG5hbWVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAg IChmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgICAgIHZhciBuYW1l cyA9IG5hbWUuc3BsaXQoc2VwYXJhdG9yKSwKKyAgICAgICAgICAgICAgICAg ICAgZSA9IGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgZXhpc3Q7Cisg ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbmFtZXMubGVu Z3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBlID0g ZS5uOworICAgICAgICAgICAgICAgICAgICBlID0gZS5oYXNPd25Qcm9wZXJ0 eShuYW1lc1tpXSkgJiYgZVtuYW1lc1tpXV0gfHwgKGVbbmFtZXNbaV1dID0g e246IHt9fSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGUuZiA9IGUuZiB8fCBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw LCBpaSA9IGUuZi5sZW5ndGg7IGkgPCBpaTsgaSsrKSBpZiAoZS5mW2ldID09 IGYpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhpc3QgPSB0cnVlOworICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgIWV4aXN0ICYmIGUuZi5wdXNoKGYpOworICAgICAg ICAgICAgfShuYW1lc1tpXSkpOworICAgICAgICB9CisgICAgICAgIHJldHVy biBmdW5jdGlvbiAoekluZGV4KSB7CisgICAgICAgICAgICBpZiAoK3pJbmRl eCA9PSArekluZGV4KSB7CisgICAgICAgICAgICAgICAgZi56SW5kZXggPSAr ekluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH07Cisg ICAgLypcCisgICAgICogZXZlLmYKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIFJldHVybnMgZnVuY3Rpb24gdGhhdCB3aWxsIGZpcmUgZ2l2 ZW4gZXZlbnQgd2l0aCBvcHRpb25hbCBhcmd1bWVudHMuCisgICAgICogQXJn dW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHJlc3VsdCBmdW5j dGlvbiB3aWxsIGJlIGFsc28KKyAgICAgKiBjb25jYXRlZCB0byB0aGUgbGlz dCBvZiBmaW5hbCBhcmd1bWVudHMuCisgICAgIHwgZWwub25jbGljayA9IGV2 ZS5mKCJjbGljayIsIDEsIDIpOworICAgICB8IGV2ZS5vbigiY2xpY2siLCBm dW5jdGlvbiAoYSwgYiwgYykgeworICAgICB8ICAgICBjb25zb2xlLmxvZyhh LCBiLCBjKTsgLy8gMSwgMiwgW2V2ZW50IG9iamVjdF0KKyAgICAgfCB9KTsK KyAgICAgPiBBcmd1bWVudHMKKyAgICAgLSBldmVudCAoc3RyaW5nKSBldmVu dCBuYW1lCisgICAgIC0gdmFyYXJncyAo4oCmKSBhbmQgYW55IG90aGVyIGFy Z3VtZW50cworICAgICA9IChmdW5jdGlvbikgcG9zc2libGUgZXZlbnQgaGFu ZGxlciBmdW5jdGlvbgorICAgIFwqLworICAgIGV2ZS5mID0gZnVuY3Rpb24g KGV2ZW50KSB7CisgICAgICAgIHZhciBhdHRycyA9IFtdLnNsaWNlLmNhbGwo YXJndW1lbnRzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIGV2ZS5hcHBseShudWxsLCBbZXZlbnQsIG51bGxdLmNv bmNhdChhdHRycykuY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAw KSkpOworICAgICAgICB9OworICAgIH07CisgICAgLypcCisgICAgICogZXZl LnN0b3AKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIElzIHVz ZWQgaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXIgdG8gc3RvcCB0aGUgZXZlbnQs IHByZXZlbnRpbmcgYW55IHN1YnNlcXVlbnQgbGlzdGVuZXJzIGZyb20gZmly aW5nLgorICAgIFwqLworICAgIGV2ZS5zdG9wID0gZnVuY3Rpb24gKCkgewor ICAgICAgICBzdG9wID0gMTsKKyAgICB9OworICAgIC8qXAorICAgICAqIGV2 ZS5udAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ291bGQg YmUgdXNlZCBpbnNpZGUgZXZlbnQgaGFuZGxlciB0byBmaWd1cmUgb3V0IGFj dHVhbCBuYW1lIG9mIHRoZSBldmVudC4KKyAgICAgKioKKyAgICAgPiBBcmd1 bWVudHMKKyAgICAgKioKKyAgICAgLSBzdWJuYW1lIChzdHJpbmcpICNvcHRp b25hbCBzdWJuYW1lIG9mIHRoZSBldmVudAorICAgICAqKgorICAgICA9IChz dHJpbmcpIG5hbWUgb2YgdGhlIGV2ZW50LCBpZiBgc3VibmFtZWAgaXMgbm90 IHNwZWNpZmllZAorICAgICAqIG9yCisgICAgID0gKGJvb2xlYW4pIGB0cnVl YCwgaWYgY3VycmVudCBldmVudOKAmXMgbmFtZSBjb250YWlucyBgc3VibmFt ZWAKKyAgICBcKi8KKyAgICBldmUubnQgPSBmdW5jdGlvbiAoc3VibmFtZSkg eworICAgICAgICBpZiAoc3VibmFtZSkgeworICAgICAgICAgICAgcmV0dXJu IG5ldyBSZWdFeHAoIig/OlxcLnxcXC98XikiICsgc3VibmFtZSArICIoPzpc XC58XFwvfCQpIikudGVzdChjdXJyZW50X2V2ZW50KTsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gY3VycmVudF9ldmVudDsKKyAgICB9OworICAgIC8q XAorICAgICAqIGV2ZS5udHMKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIENvdWxkIGJlIHVzZWQgaW5zaWRlIGV2ZW50IGhhbmRsZXIgdG8g ZmlndXJlIG91dCBhY3R1YWwgbmFtZSBvZiB0aGUgZXZlbnQuCisgICAgICoq CisgICAgICoqCisgICAgID0gKGFycmF5KSBuYW1lcyBvZiB0aGUgZXZlbnQK KyAgICBcKi8KKyAgICBldmUubnRzID0gZnVuY3Rpb24gKCkgeworICAgICAg ICByZXR1cm4gY3VycmVudF9ldmVudC5zcGxpdChzZXBhcmF0b3IpOworICAg IH07CisgICAgLypcCisgICAgICogZXZlLm9mZgorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogUmVtb3ZlcyBnaXZlbiBmdW5jdGlvbiBmcm9t IHRoZSBsaXN0IG9mIGV2ZW50IGxpc3RlbmVycyBhc3NpZ25lZCB0byBnaXZl biBuYW1lLgorICAgICAqIElmIG5vIGFyZ3VtZW50cyBzcGVjaWZpZWQgYWxs IHRoZSBldmVudHMgd2lsbCBiZSBjbGVhcmVkLgorICAgICAqKgorICAgICA+ IEFyZ3VtZW50cworICAgICAqKgorICAgICAtIG5hbWUgKHN0cmluZykgbmFt ZSBvZiB0aGUgZXZlbnQsIGRvdCAoYC5gKSBvciBzbGFzaCAoYC9gKSBzZXBh cmF0ZWQsIHdpdGggb3B0aW9uYWwgd2lsZGNhcmRzCisgICAgIC0gZiAoZnVu Y3Rpb24pIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24KKyAgICBcKi8KKyAgICAv KlwKKyAgICAgKiBldmUudW5iaW5kCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBTZWUgQGV2ZS5vZmYKKyAgICBcKi8KKyAgICBldmUub2Zm ID0gZXZlLnVuYmluZCA9IGZ1bmN0aW9uIChuYW1lLCBmKSB7CisgICAgICAg IGlmICghbmFtZSkgeworICAgICAgICAgICAgZXZlLl9ldmVudHMgPSBldmVu dHMgPSB7bjoge319OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3BsaXQoY29tYXNlcGFyYXRv cik7CisgICAgICAgIGlmIChuYW1lcy5sZW5ndGggPiAxKSB7CisgICAgICAg ICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBp aTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZXZlLm9mZihuYW1lc1tpXSwg Zik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAg ICAgIH0KKyAgICAgICAgbmFtZXMgPSBuYW1lLnNwbGl0KHNlcGFyYXRvcik7 CisgICAgICAgIHZhciBlLAorICAgICAgICAgICAga2V5LAorICAgICAgICAg ICAgc3BsaWNlLAorICAgICAgICAgICAgaSwgaWksIGosIGpqLAorICAgICAg ICAgICAgY3VyID0gW2V2ZW50c107CisgICAgICAgIGZvciAoaSA9IDAsIGlp ID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg Zm9yIChqID0gMDsgaiA8IGN1ci5sZW5ndGg7IGogKz0gc3BsaWNlLmxlbmd0 aCAtIDIpIHsKKyAgICAgICAgICAgICAgICBzcGxpY2UgPSBbaiwgMV07Cisg ICAgICAgICAgICAgICAgZSA9IGN1cltqXS5uOworICAgICAgICAgICAgICAg IGlmIChuYW1lc1tpXSAhPSB3aWxkY2FyZCkgeworICAgICAgICAgICAgICAg ICAgICBpZiAoZVtuYW1lc1tpXV0pIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHNwbGljZS5wdXNoKGVbbmFtZXNbaV1dKTsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGZvciAoa2V5IGluIGUpIGlmIChlW2hhc10oa2V5KSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlLnB1c2goZVtrZXldKTsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBjdXIuc3BsaWNlLmFwcGx5KGN1ciwgc3BsaWNlKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAw LCBpaSA9IGN1ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICBlID0gY3VyW2ldOworICAgICAgICAgICAgd2hpbGUgKGUubikgeworICAg ICAgICAgICAgICAgIGlmIChmKSB7CisgICAgICAgICAgICAgICAgICAgIGlm IChlLmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAs IGpqID0gZS5mLmxlbmd0aDsgaiA8IGpqOyBqKyspIGlmIChlLmZbal0gPT0g ZikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZi5zcGxpY2Uo aiwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICAhZS5mLmxlbmd0aCAmJiBkZWxldGUgZS5mOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGUu bikgaWYgKGUubltoYXNdKGtleSkgJiYgZS5uW2tleV0uZikgeworICAgICAg ICAgICAgICAgICAgICAgICAgdmFyIGZ1bmNzID0gZS5uW2tleV0uZjsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gZnVuY3Mu bGVuZ3RoOyBqIDwgamo7IGorKykgaWYgKGZ1bmNzW2pdID09IGYpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jcy5zcGxpY2UoaiwgMSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAh ZnVuY3MubGVuZ3RoICYmIGRlbGV0ZSBlLm5ba2V5XS5mOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgZGVsZXRlIGUuZjsKKyAgICAgICAgICAgICAgICAg ICAgZm9yIChrZXkgaW4gZS5uKSBpZiAoZS5uW2hhc10oa2V5KSAmJiBlLm5b a2V5XS5mKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZS5u W2tleV0uZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBlID0gZS5uOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBldmUub25j ZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQmluZHMgZ2l2 ZW4gZXZlbnQgaGFuZGxlciB3aXRoIGEgZ2l2ZW4gbmFtZSB0byBvbmx5IHJ1 biBvbmNlIHRoZW4gdW5iaW5kIGl0c2VsZi4KKyAgICAgfCBldmUub25jZSgi bG9naW4iLCBmKTsKKyAgICAgfCBldmUoImxvZ2luIik7IC8vIHRyaWdnZXJz IGYKKyAgICAgfCBldmUoImxvZ2luIik7IC8vIG5vIGxpc3RlbmVycworICAg ICAqIFVzZSBAZXZlIHRvIHRyaWdnZXIgdGhlIGxpc3RlbmVyLgorICAgICAq KgorICAgICA+IEFyZ3VtZW50cworICAgICAqKgorICAgICAtIG5hbWUgKHN0 cmluZykgbmFtZSBvZiB0aGUgZXZlbnQsIGRvdCAoYC5gKSBvciBzbGFzaCAo YC9gKSBzZXBhcmF0ZWQsIHdpdGggb3B0aW9uYWwgd2lsZGNhcmRzCisgICAg IC0gZiAoZnVuY3Rpb24pIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24KKyAgICAg KioKKyAgICAgPSAoZnVuY3Rpb24pIHNhbWUgcmV0dXJuIGZ1bmN0aW9uIGFz IEBldmUub24KKyAgICBcKi8KKyAgICBldmUub25jZSA9IGZ1bmN0aW9uIChu YW1lLCBmKSB7CisgICAgICAgIHZhciBmMiA9IGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgICAgIGV2ZS51bmJpbmQobmFtZSwgZjIpOworICAgICAgICAgICAg cmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgfTsK KyAgICAgICAgcmV0dXJuIGV2ZS5vbihuYW1lLCBmMik7CisgICAgfTsKKyAg ICAvKlwKKyAgICAgKiBldmUudmVyc2lvbgorICAgICBbIHByb3BlcnR5IChz dHJpbmcpIF0KKyAgICAgKioKKyAgICAgKiBDdXJyZW50IHZlcnNpb24gb2Yg dGhlIGxpYnJhcnkuCisgICAgXCovCisgICAgZXZlLnZlcnNpb24gPSB2ZXJz aW9uOworICAgIGV2ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgcmV0dXJuICJZb3UgYXJlIHJ1bm5pbmcgRXZlICIgKyB2ZXJzaW9uOwor ICAgIH07CisgICAgKHR5cGVvZiBtb2R1bGUgIT0gInVuZGVmaW5lZCIgJiYg bW9kdWxlLmV4cG9ydHMpID8gKG1vZHVsZS5leHBvcnRzID0gZXZlKSA6ICh0 eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgPyAo ZGVmaW5lKCJldmUiLCBbXSwgZnVuY3Rpb24oKSB7IHJldHVybiBldmU7IH0p KSA6IChnbG9iLmV2ZSA9IGV2ZSkpOworfSkodGhpcyk7CisKKyhmdW5jdGlv biAoZ2xvYiwgZmFjdG9yeSkgeworICAgIC8vIEFNRCBzdXBwb3J0CisgICAg aWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1k KSB7CisgICAgICAgIC8vIERlZmluZSBhcyBhbiBhbm9ueW1vdXMgbW9kdWxl CisgICAgICAgIGRlZmluZShbImV2ZSJdLCBmdW5jdGlvbiAoZXZlKSB7Cisg ICAgICAgICAgICByZXR1cm4gZmFjdG9yeShnbG9iLCBldmUpOworICAgICAg ICB9KTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9ICd1bmRl ZmluZWQnKSB7CisgICAgICAgIC8vIE5leHQgZm9yIE5vZGUuanMgb3IgQ29t bW9uSlMKKyAgICAgICAgdmFyIGV2ZSA9IHJlcXVpcmUoJ2V2ZScpOworICAg ICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoZ2xvYiwgZXZlKTsKKyAg ICB9IGVsc2UgeworICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHMgKGdsb2Ig aXMgd2luZG93KQorICAgICAgICAvLyBTbmFwIGFkZHMgaXRzZWxmIHRvIHdp bmRvdworICAgICAgICBmYWN0b3J5KGdsb2IsIGdsb2IuZXZlKTsKKyAgICB9 Cit9KHdpbmRvdyB8fCB0aGlzLCBmdW5jdGlvbiAod2luZG93LCBldmUpIHsK Ky8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9y YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIExpY2Vuc2VkIHVuZGVy IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z ZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRh aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLyBodHRwOi8vd3d3LmFw YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vIFVubGVzcyByZXF1 aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu Zywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRI T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0 aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBm b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u cyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgordmFy IG1pbmEgPSAoZnVuY3Rpb24gKGV2ZSkgeworICAgIHZhciBhbmltYXRpb25z ID0ge30sCisgICAgcmVxdWVzdEFuaW1GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0 QW5pbWF0aW9uRnJhbWUgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAg ICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAorICAg ICAgICAgICAgICAgICAgICAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlv bkZyYW1lICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5v UmVxdWVzdEFuaW1hdGlvbkZyYW1lICAgICAgfHwKKyAgICAgICAgICAgICAg ICAgICAgICAgd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lICAgICB8 fAorICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoY2FsbGJhY2sp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2Fs bGJhY2ssIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICBp c0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYSkgeworICAg ICAgICByZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5IHx8CisgICAgICAgICAg ICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPT0gIltvYmpl Y3QgQXJyYXldIjsKKyAgICB9LAorICAgIGlkZ2VuID0gMCwKKyAgICBpZHBy ZWZpeCA9ICJNIiArICgrbmV3IERhdGUpLnRvU3RyaW5nKDM2KSwKKyAgICBJ RCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGlkcHJlZml4ICsg KGlkZ2VuKyspLnRvU3RyaW5nKDM2KTsKKyAgICB9LAorICAgIGRpZmYgPSBm dW5jdGlvbiAoYSwgYiwgQSwgQikgeworICAgICAgICBpZiAoaXNBcnJheShh KSkgeworICAgICAgICAgICAgcmVzID0gW107CisgICAgICAgICAgICBmb3Ig KHZhciBpID0gMCwgaWkgPSBhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAg ICAgICAgICAgICAgICByZXNbaV0gPSBkaWZmKGFbaV0sIGIsIEFbaV0sIEIp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAg ICAgICAgfQorICAgICAgICB2YXIgZGlmID0gKEEgLSBhKSAvIChCIC0gYik7 CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYmIpIHsKKyAgICAgICAgICAg IHJldHVybiBhICsgZGlmICogKGJiIC0gYik7CisgICAgICAgIH07CisgICAg fSwKKyAgICB0aW1lciA9IERhdGUubm93IHx8IGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgcmV0dXJuICtuZXcgRGF0ZTsKKyAgICB9LAorICAgIHN0YSA9IGZ1 bmN0aW9uICh2YWwpIHsKKyAgICAgICAgdmFyIGEgPSB0aGlzOworICAgICAg ICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBhLnM7 CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRzID0gYS5zIC0gdmFsOworICAg ICAgICBhLmIgKz0gYS5kdXIgKiBkczsKKyAgICAgICAgYS5CICs9IGEuZHVy ICogZHM7CisgICAgICAgIGEucyA9IHZhbDsKKyAgICB9LAorICAgIHNwZWVk ID0gZnVuY3Rpb24gKHZhbCkgeworICAgICAgICB2YXIgYSA9IHRoaXM7Cisg ICAgICAgIGlmICh2YWwgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJu IGEuc3BkOworICAgICAgICB9CisgICAgICAgIGEuc3BkID0gdmFsOworICAg IH0sCisgICAgZHVyYXRpb24gPSBmdW5jdGlvbiAodmFsKSB7CisgICAgICAg IHZhciBhID0gdGhpczsKKyAgICAgICAgaWYgKHZhbCA9PSBudWxsKSB7Cisg ICAgICAgICAgICByZXR1cm4gYS5kdXI7CisgICAgICAgIH0KKyAgICAgICAg YS5zID0gYS5zICogdmFsIC8gYS5kdXI7CisgICAgICAgIGEuZHVyID0gdmFs OworICAgIH0sCisgICAgc3RvcGl0ID0gZnVuY3Rpb24gKCkgeworICAgICAg ICB2YXIgYSA9IHRoaXM7CisgICAgICAgIGRlbGV0ZSBhbmltYXRpb25zW2Eu aWRdOworICAgICAgICBhLnVwZGF0ZSgpOworICAgICAgICBldmUoIm1pbmEu c3RvcC4iICsgYS5pZCwgYSk7CisgICAgfSwKKyAgICBwYXVzZSA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdmFyIGEgPSB0aGlzOworICAgICAgICBpZiAo YS5wZGlmKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg ICAgICAgZGVsZXRlIGFuaW1hdGlvbnNbYS5pZF07CisgICAgICAgIGEudXBk YXRlKCk7CisgICAgICAgIGEucGRpZiA9IGEuZ2V0KCkgLSBhLmI7CisgICAg fSwKKyAgICByZXN1bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBh ID0gdGhpczsKKyAgICAgICAgaWYgKCFhLnBkaWYpIHsKKyAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhLmIgPSBhLmdldCgpIC0g YS5wZGlmOworICAgICAgICBkZWxldGUgYS5wZGlmOworICAgICAgICBhbmlt YXRpb25zW2EuaWRdID0gYTsKKyAgICB9LAorICAgIHVwZGF0ZSA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdmFyIGEgPSB0aGlzLAorICAgICAgICAgICAg cmVzOworICAgICAgICBpZiAoaXNBcnJheShhLnN0YXJ0KSkgeworICAgICAg ICAgICAgcmVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwg amogPSBhLnN0YXJ0Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAg ICAgICAgICByZXNbal0gPSArYS5zdGFydFtqXSArCisgICAgICAgICAgICAg ICAgICAgIChhLmVuZFtqXSAtIGEuc3RhcnRbal0pICogYS5lYXNpbmcoYS5z KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHJlcyA9ICthLnN0YXJ0ICsgKGEuZW5kIC0gYS5zdGFydCkgKiBhLmVh c2luZyhhLnMpOworICAgICAgICB9CisgICAgICAgIGEuc2V0KHJlcyk7Cisg ICAgfSwKKyAgICBmcmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy IGxlbiA9IDA7CisgICAgICAgIGZvciAodmFyIGkgaW4gYW5pbWF0aW9ucykg aWYgKGFuaW1hdGlvbnMuaGFzT3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAg ICAgIHZhciBhID0gYW5pbWF0aW9uc1tpXSwKKyAgICAgICAgICAgICAgICBi ID0gYS5nZXQoKSwKKyAgICAgICAgICAgICAgICByZXM7CisgICAgICAgICAg ICBsZW4rKzsKKyAgICAgICAgICAgIGEucyA9IChiIC0gYS5iKSAvIChhLmR1 ciAvIGEuc3BkKTsKKyAgICAgICAgICAgIGlmIChhLnMgPj0gMSkgeworICAg ICAgICAgICAgICAgIGRlbGV0ZSBhbmltYXRpb25zW2ldOworICAgICAgICAg ICAgICAgIGEucyA9IDE7CisgICAgICAgICAgICAgICAgbGVuLS07CisgICAg ICAgICAgICAgICAgKGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAg ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgZXZlKCJtaW5hLmZpbmlzaC4iICsgYS5pZCwgYSk7CisgICAg ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0oYSkpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgYS51cGRhdGUoKTsKKyAgICAg ICAgfQorICAgICAgICBsZW4gJiYgcmVxdWVzdEFuaW1GcmFtZShmcmFtZSk7 CisgICAgfSwKKyAgICAvKlwKKyAgICAgKiBtaW5hCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBHZW5lcmljIGFuaW1hdGlvbiBvZiBudW1i ZXJzCisgICAgICoqCisgICAgIC0gYSAobnVtYmVyKSBzdGFydCBfc2xhdmVf IG51bWJlcgorICAgICAtIEEgKG51bWJlcikgZW5kIF9zbGF2ZV8gbnVtYmVy CisgICAgIC0gYiAobnVtYmVyKSBzdGFydCBfbWFzdGVyXyBudW1iZXIgKHN0 YXJ0IHRpbWUgaW4gZ2VuZXJhbCBjYXNlKQorICAgICAtIEIgKG51bWJlcikg ZW5kIF9tYXN0ZXJfIG51bWJlciAoZW5kIHRpbWUgaW4gZ2VyZWFsIGNhc2Up CisgICAgIC0gZ2V0IChmdW5jdGlvbikgZ2V0dGVyIG9mIF9tYXN0ZXJfIG51 bWJlciAoc2VlIEBtaW5hLnRpbWUpCisgICAgIC0gc2V0IChmdW5jdGlvbikg c2V0dGVyIG9mIF9zbGF2ZV8gbnVtYmVyCisgICAgIC0gZWFzaW5nIChmdW5j dGlvbikgI29wdGlvbmFsIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVsdCBpcyBA bWluYS5saW5lYXIKKyAgICAgPSAob2JqZWN0KSBhbmltYXRpb24gZGVzY3Jp cHRvcgorICAgICBvIHsKKyAgICAgbyAgICAgICAgIGlkIChzdHJpbmcpIGFu aW1hdGlvbiBpZCwKKyAgICAgbyAgICAgICAgIHN0YXJ0IChudW1iZXIpIHN0 YXJ0IF9zbGF2ZV8gbnVtYmVyLAorICAgICBvICAgICAgICAgZW5kIChudW1i ZXIpIGVuZCBfc2xhdmVfIG51bWJlciwKKyAgICAgbyAgICAgICAgIGIgKG51 bWJlcikgc3RhcnQgX21hc3Rlcl8gbnVtYmVyLAorICAgICBvICAgICAgICAg cyAobnVtYmVyKSBhbmltYXRpb24gc3RhdHVzICgwLi4xKSwKKyAgICAgbyAg ICAgICAgIGR1ciAobnVtYmVyKSBhbmltYXRpb24gZHVyYXRpb24sCisgICAg IG8gICAgICAgICBzcGQgKG51bWJlcikgYW5pbWF0aW9uIHNwZWVkLAorICAg ICBvICAgICAgICAgZ2V0IChmdW5jdGlvbikgZ2V0dGVyIG9mIF9tYXN0ZXJf IG51bWJlciAoc2VlIEBtaW5hLnRpbWUpLAorICAgICBvICAgICAgICAgc2V0 IChmdW5jdGlvbikgc2V0dGVyIG9mIF9zbGF2ZV8gbnVtYmVyLAorICAgICBv ICAgICAgICAgZWFzaW5nIChmdW5jdGlvbikgZWFzaW5nIGZ1bmN0aW9uLCBk ZWZhdWx0IGlzIEBtaW5hLmxpbmVhciwKKyAgICAgbyAgICAgICAgIHN0YXR1 cyAoZnVuY3Rpb24pIHN0YXR1cyBnZXR0ZXIvc2V0dGVyLAorICAgICBvICAg ICAgICAgc3BlZWQgKGZ1bmN0aW9uKSBzcGVlZCBnZXR0ZXIvc2V0dGVyLAor ICAgICBvICAgICAgICAgZHVyYXRpb24gKGZ1bmN0aW9uKSBkdXJhdGlvbiBn ZXR0ZXIvc2V0dGVyLAorICAgICBvICAgICAgICAgc3RvcCAoZnVuY3Rpb24p IGFuaW1hdGlvbiBzdG9wcGVyCisgICAgIG8gICAgICAgICBwYXVzZSAoZnVu Y3Rpb24pIHBhdXNlcyB0aGUgYW5pbWF0aW9uCisgICAgIG8gICAgICAgICBy ZXN1bWUgKGZ1bmN0aW9uKSByZXN1bWVzIHRoZSBhbmltYXRpb24KKyAgICAg byAgICAgICAgIHVwZGF0ZSAoZnVuY3Rpb24pIGNhbGxlcyBzZXR0ZXIgd2l0 aCB0aGUgcmlnaHQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbgorICAgICBvIH0K KyAgICBcKi8KKyAgICBtaW5hID0gZnVuY3Rpb24gKGEsIEEsIGIsIEIsIGdl dCwgc2V0LCBlYXNpbmcpIHsKKyAgICAgICAgdmFyIGFuaW0gPSB7CisgICAg ICAgICAgICBpZDogSUQoKSwKKyAgICAgICAgICAgIHN0YXJ0OiBhLAorICAg ICAgICAgICAgZW5kOiBBLAorICAgICAgICAgICAgYjogYiwKKyAgICAgICAg ICAgIHM6IDAsCisgICAgICAgICAgICBkdXI6IEIgLSBiLAorICAgICAgICAg ICAgc3BkOiAxLAorICAgICAgICAgICAgZ2V0OiBnZXQsCisgICAgICAgICAg ICBzZXQ6IHNldCwKKyAgICAgICAgICAgIGVhc2luZzogZWFzaW5nIHx8IG1p bmEubGluZWFyLAorICAgICAgICAgICAgc3RhdHVzOiBzdGEsCisgICAgICAg ICAgICBzcGVlZDogc3BlZWQsCisgICAgICAgICAgICBkdXJhdGlvbjogZHVy YXRpb24sCisgICAgICAgICAgICBzdG9wOiBzdG9waXQsCisgICAgICAgICAg ICBwYXVzZTogcGF1c2UsCisgICAgICAgICAgICByZXN1bWU6IHJlc3VtZSwK KyAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlCisgICAgICAgIH07CisgICAg ICAgIGFuaW1hdGlvbnNbYW5pbS5pZF0gPSBhbmltOworICAgICAgICB2YXIg bGVuID0gMCwgaTsKKyAgICAgICAgZm9yIChpIGluIGFuaW1hdGlvbnMpIGlm IChhbmltYXRpb25zLmhhc093blByb3BlcnR5KGkpKSB7CisgICAgICAgICAg ICBsZW4rKzsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gMikgeworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGxlbiA9PSAxICYmIHJlcXVlc3RBbmltRnJhbWUoZnJhbWUpOwor ICAgICAgICByZXR1cm4gYW5pbTsKKyAgICB9OworICAgIC8qXAorICAgICAq IG1pbmEudGltZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog UmV0dXJucyB0aGUgY3VycmVudCB0aW1lLiBFcXVpdmFsZW50IHRvOgorICAg ICB8IGZ1bmN0aW9uICgpIHsKKyAgICAgfCAgICAgcmV0dXJuIChuZXcgRGF0 ZSkuZ2V0VGltZSgpOworICAgICB8IH0KKyAgICBcKi8KKyAgICBtaW5hLnRp bWUgPSB0aW1lcjsKKyAgICAvKlwKKyAgICAgKiBtaW5hLmdldEJ5SWQKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4gYW5p bWF0aW9uIGJ5IGl0cyBpZAorICAgICAtIGlkIChzdHJpbmcpIGFuaW1hdGlv bidzIGlkCisgICAgID0gKG9iamVjdCkgU2VlIEBtaW5hCisgICAgXCovCisg ICAgbWluYS5nZXRCeUlkID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIHJl dHVybiBhbmltYXRpb25zW2lkXSB8fCBudWxsOworICAgIH07CisKKyAgICAv KlwKKyAgICAgKiBtaW5hLmxpbmVhcgorICAgICBbIG1ldGhvZCBdCisgICAg ICoqCisgICAgICogRGVmYXVsdCBsaW5lYXIgZWFzaW5nCisgICAgIC0gbiAo bnVtYmVyKSBpbnB1dCAwLi4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAu LjEKKyAgICBcKi8KKyAgICBtaW5hLmxpbmVhciA9IGZ1bmN0aW9uIChuKSB7 CisgICAgICAgIHJldHVybiBuOworICAgIH07CisgICAgLypcCisgICAgICog bWluYS5lYXNlb3V0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBFYXNlb3V0IGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4u MQorICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisgICAg bWluYS5lYXNlb3V0ID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgcmV0dXJu IE1hdGgucG93KG4sIDEuNyk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBt aW5hLmVhc2VpbgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog RWFzZWluIGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4uMQor ICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisgICAgbWlu YS5lYXNlaW4gPSBmdW5jdGlvbiAobikgeworICAgICAgICByZXR1cm4gTWF0 aC5wb3cobiwgLjQ4KTsKKyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEu ZWFzZWlub3V0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBF YXNlaW5vdXQgZWFzaW5nCisgICAgIC0gbiAobnVtYmVyKSBpbnB1dCAwLi4x CisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEKKyAgICBcKi8KKyAgICBt aW5hLmVhc2Vpbm91dCA9IGZ1bmN0aW9uIChuKSB7CisgICAgICAgIGlmIChu ID09IDEpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9Cisg ICAgICAgIGlmIChuID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOwor ICAgICAgICB9CisgICAgICAgIHZhciBxID0gLjQ4IC0gbiAvIDEuMDQsCisg ICAgICAgICAgICBRID0gTWF0aC5zcXJ0KC4xNzM0ICsgcSAqIHEpLAorICAg ICAgICAgICAgeCA9IFEgLSBxLAorICAgICAgICAgICAgWCA9IE1hdGgucG93 KE1hdGguYWJzKHgpLCAxIC8gMykgKiAoeCA8IDAgPyAtMSA6IDEpLAorICAg ICAgICAgICAgeSA9IC1RIC0gcSwKKyAgICAgICAgICAgIFkgPSBNYXRoLnBv dyhNYXRoLmFicyh5KSwgMSAvIDMpICogKHkgPCAwID8gLTEgOiAxKSwKKyAg ICAgICAgICAgIHQgPSBYICsgWSArIC41OworICAgICAgICByZXR1cm4gKDEg LSB0KSAqIDMgKiB0ICogdCArIHQgKiB0ICogdDsKKyAgICB9OworICAgIC8q XAorICAgICAqIG1pbmEuYmFja2luCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBCYWNraW4gZWFzaW5nCisgICAgIC0gbiAobnVtYmVyKSBp bnB1dCAwLi4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEKKyAgICBc Ki8KKyAgICBtaW5hLmJhY2tpbiA9IGZ1bmN0aW9uIChuKSB7CisgICAgICAg IGlmIChuID09IDEpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAg ICB9CisgICAgICAgIHZhciBzID0gMS43MDE1ODsKKyAgICAgICAgcmV0dXJu IG4gKiBuICogKChzICsgMSkgKiBuIC0gcyk7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBtaW5hLmJhY2tvdXQKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIEJhY2tvdXQgZWFzaW5nCisgICAgIC0gbiAobnVtYmVyKSBp bnB1dCAwLi4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEKKyAgICBc Ki8KKyAgICBtaW5hLmJhY2tvdXQgPSBmdW5jdGlvbiAobikgeworICAgICAg ICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg ICAgfQorICAgICAgICBuID0gbiAtIDE7CisgICAgICAgIHZhciBzID0gMS43 MDE1ODsKKyAgICAgICAgcmV0dXJuIG4gKiBuICogKChzICsgMSkgKiBuICsg cykgKyAxOworICAgIH07CisgICAgLypcCisgICAgICogbWluYS5lbGFzdGlj CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBFbGFzdGljIGVh c2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4uMQorICAgICA9IChu dW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisgICAgbWluYS5lbGFzdGlj ID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgaWYgKG4gPT0gISFuKSB7Cisg ICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgfQorICAgICAgICByZXR1 cm4gTWF0aC5wb3coMiwgLTEwICogbikgKiBNYXRoLnNpbigobiAtIC4wNzUp ICoKKyAgICAgICAgICAgICgyICogTWF0aC5QSSkgLyAuMykgKyAxOworICAg IH07CisgICAgLypcCisgICAgICogbWluYS5ib3VuY2UKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIEJvdW5jZSBlYXNpbmcKKyAgICAgLSBu IChudW1iZXIpIGlucHV0IDAuLjEKKyAgICAgPSAobnVtYmVyKSBvdXRwdXQg MC4uMQorICAgIFwqLworICAgIG1pbmEuYm91bmNlID0gZnVuY3Rpb24gKG4p IHsKKyAgICAgICAgdmFyIHMgPSA3LjU2MjUsCisgICAgICAgICAgICBwID0g Mi43NSwKKyAgICAgICAgICAgIGw7CisgICAgICAgIGlmIChuIDwgKDEgLyBw KSkgeworICAgICAgICAgICAgbCA9IHMgKiBuICogbjsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGlmIChuIDwgKDIgLyBwKSkgeworICAgICAg ICAgICAgICAgIG4gLT0gKDEuNSAvIHApOworICAgICAgICAgICAgICAgIGwg PSBzICogbiAqIG4gKyAuNzU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGlmIChuIDwgKDIuNSAvIHApKSB7CisgICAgICAgICAg ICAgICAgICAgIG4gLT0gKDIuMjUgLyBwKTsKKyAgICAgICAgICAgICAgICAg ICAgbCA9IHMgKiBuICogbiArIC45Mzc1OworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4gLT0gKDIuNjI1IC8gcCk7 CisgICAgICAgICAgICAgICAgICAgIGwgPSBzICogbiAqIG4gKyAuOTg0Mzc1 OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICByZXR1cm4gbDsKKyAgICB9OworICAgIHdpbmRvdy5taW5h ID0gbWluYTsKKyAgICByZXR1cm4gbWluYTsKK30pKHR5cGVvZiBldmUgPT0g InVuZGVmaW5lZCIgPyBmdW5jdGlvbiAoKSB7fSA6IGV2ZSk7CisvLyBDb3B5 cmlnaHQgKGMpIDIwMTMgLSAyMDE1IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVu ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDov L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8g VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ UywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRo ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp Y2Vuc2UuCisKK3ZhciBTbmFwID0gKGZ1bmN0aW9uKHJvb3QpIHsKK1NuYXAu dmVyc2lvbiA9ICIwLjQuMCI7CisvKlwKKyAqIFNuYXAKKyBbIG1ldGhvZCBd CisgKioKKyAqIENyZWF0ZXMgYSBkcmF3aW5nIHN1cmZhY2Ugb3Igd3JhcHMg ZXhpc3RpbmcgU1ZHIGVsZW1lbnQuCisgKioKKyAtIHdpZHRoIChudW1iZXJ8 c3RyaW5nKSB3aWR0aCBvZiBzdXJmYWNlCisgLSBoZWlnaHQgKG51bWJlcnxz dHJpbmcpIGhlaWdodCBvZiBzdXJmYWNlCisgKiBvcgorIC0gRE9NIChTVkdF bGVtZW50KSBlbGVtZW50IHRvIGJlIHdyYXBwZWQgaW50byBTbmFwIHN0cnVj dHVyZQorICogb3IKKyAtIGFycmF5IChhcnJheSkgYXJyYXkgb2YgZWxlbWVu dHMgKHdpbGwgcmV0dXJuIHNldCBvZiBlbGVtZW50cykKKyAqIG9yCisgLSBx dWVyeSAoc3RyaW5nKSBDU1MgcXVlcnkgc2VsZWN0b3IKKyA9IChvYmplY3Qp IEBFbGVtZW50CitcKi8KK2Z1bmN0aW9uIFNuYXAodywgaCkgeworICAgIGlm ICh3KSB7CisgICAgICAgIGlmICh3Lm5vZGVUeXBlKSB7CisgICAgICAgICAg ICByZXR1cm4gd3JhcCh3KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXMo dywgImFycmF5IikgJiYgU25hcC5zZXQpIHsKKyAgICAgICAgICAgIHJldHVy biBTbmFwLnNldC5hcHBseShTbmFwLCB3KTsKKyAgICAgICAgfQorICAgICAg ICBpZiAodyBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJl dHVybiB3OworICAgICAgICB9CisgICAgICAgIGlmIChoID09IG51bGwpIHsK KyAgICAgICAgICAgIHcgPSBnbG9iLmRvYy5xdWVyeVNlbGVjdG9yKFN0cmlu Zyh3KSk7CisgICAgICAgICAgICByZXR1cm4gd3JhcCh3KTsKKyAgICAgICAg fQorICAgIH0KKyAgICB3ID0gdyA9PSBudWxsID8gIjEwMCUiIDogdzsKKyAg ICBoID0gaCA9PSBudWxsID8gIjEwMCUiIDogaDsKKyAgICByZXR1cm4gbmV3 IFBhcGVyKHcsIGgpOworfQorU25hcC50b1N0cmluZyA9IGZ1bmN0aW9uICgp IHsKKyAgICByZXR1cm4gIlNuYXAgdiIgKyB0aGlzLnZlcnNpb247Cit9Owor U25hcC5fID0ge307Cit2YXIgZ2xvYiA9IHsKKyAgICB3aW46IHJvb3Qud2lu ZG93LAorICAgIGRvYzogcm9vdC53aW5kb3cuZG9jdW1lbnQKK307CitTbmFw Ll8uZ2xvYiA9IGdsb2I7Cit2YXIgaGFzID0gImhhc093blByb3BlcnR5IiwK KyAgICBTdHIgPSBTdHJpbmcsCisgICAgdG9GbG9hdCA9IHBhcnNlRmxvYXQs CisgICAgdG9JbnQgPSBwYXJzZUludCwKKyAgICBtYXRoID0gTWF0aCwKKyAg ICBtbWF4ID0gbWF0aC5tYXgsCisgICAgbW1pbiA9IG1hdGgubWluLAorICAg IGFicyA9IG1hdGguYWJzLAorICAgIHBvdyA9IG1hdGgucG93LAorICAgIFBJ ID0gbWF0aC5QSSwKKyAgICByb3VuZCA9IG1hdGgucm91bmQsCisgICAgRSA9 ICIiLAorICAgIFMgPSAiICIsCisgICAgb2JqZWN0VG9TdHJpbmcgPSBPYmpl Y3QucHJvdG90eXBlLnRvU3RyaW5nLAorICAgIElTVVJMID0gL151cmxcKFsn Il0/KFteXCldKz8pWyciXT9cKSQvaSwKKyAgICBjb2xvdXJSZWdFeHAgPSAv XlxzKigoI1thLWZcZF17Nn0pfCgjW2EtZlxkXXszfSl8cmdiYT9cKFxzKihb XGRcLl0rJT9ccyosXHMqW1xkXC5dKyU/XHMqLFxzKltcZFwuXSslPyg/Olxz KixccypbXGRcLl0rJT8pPylccypcKXxoc2JhP1woXHMqKFtcZFwuXSsoPzpk ZWd8XHhiMHwlKT9ccyosXHMqW1xkXC5dKyU/XHMqLFxzKltcZFwuXSsoPzol P1xzKixccypbXGRcLl0rKT8lPylccypcKXxoc2xhP1woXHMqKFtcZFwuXSso PzpkZWd8XHhiMHwlKT9ccyosXHMqW1xkXC5dKyU/XHMqLFxzKltcZFwuXSso PzolP1xzKixccypbXGRcLl0rKT8lPylccypcKSlccyokL2ksCisgICAgYmV6 aWVycmcgPSAvXig/OmN1YmljLSk/YmV6aWVyXCgoW14sXSspLChbXixdKyks KFteLF0rKSwoW15cKV0rKVwpLywKKyAgICByZVVSTFZhbHVlID0gL151cmxc KCM/KFteKV0rKVwpJC8sCisgICAgc2VwYXJhdG9yID0gU25hcC5fLnNlcGFy YXRvciA9IC9bLFxzXSsvLAorICAgIHdoaXRlc3BhY2UgPSAvW1xzXS9nLAor ICAgIGNvbW1hU3BhY2VzID0gL1tcc10qLFtcc10qLywKKyAgICBoc3JnID0g e2hzOiAxLCByZzogMX0sCisgICAgcGF0aENvbW1hbmQgPSAvKFthLXpdKVtc cyxdKigoLT9cZCpcLj9cZCooPzplW1wtK10/XGQrKT9bXHNdKiw/W1xzXSop KykvaWcsCisgICAgdENvbW1hbmQgPSAvKFtyc3RtXSlbXHMsXSooKC0/XGQq XC4/XGQqKD86ZVtcLStdP1xkKyk/W1xzXSosP1tcc10qKSspL2lnLAorICAg IHBhdGhWYWx1ZXMgPSAvKC0/XGQqXC4/XGQqKD86ZVtcLStdP1xcZCspPylb XHNdKiw/W1xzXSovaWcsCisgICAgaWRnZW4gPSAwLAorICAgIGlkcHJlZml4 ID0gIlMiICsgKCtuZXcgRGF0ZSkudG9TdHJpbmcoMzYpLAorICAgIElEID0g ZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIHJldHVybiAoZWwgJiYgZWwudHlw ZSA/IGVsLnR5cGUgOiBFKSArIGlkcHJlZml4ICsgKGlkZ2VuKyspLnRvU3Ry aW5nKDM2KTsKKyAgICB9LAorICAgIHhsaW5rID0gImh0dHA6Ly93d3cudzMu b3JnLzE5OTkveGxpbmsiLAorICAgIHhtbG5zID0gImh0dHA6Ly93d3cudzMu b3JnLzIwMDAvc3ZnIiwKKyAgICBodWIgPSB7fSwKKyAgICBVUkwgPSBTbmFw LnVybCA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgICAgcmV0dXJuICJ1cmwo JyMiICsgdXJsICsgIicpIjsKKyAgICB9OworCitmdW5jdGlvbiAkKGVsLCBh dHRyKSB7CisgICAgaWYgKGF0dHIpIHsKKyAgICAgICAgaWYgKGVsID09ICIj dGV4dCIpIHsKKyAgICAgICAgICAgIGVsID0gZ2xvYi5kb2MuY3JlYXRlVGV4 dE5vZGUoYXR0ci50ZXh0IHx8IGF0dHJbIiN0ZXh0Il0gfHwgIiIpOworICAg ICAgICB9CisgICAgICAgIGlmIChlbCA9PSAiI2NvbW1lbnQiKSB7CisgICAg ICAgICAgICBlbCA9IGdsb2IuZG9jLmNyZWF0ZUNvbW1lbnQoYXR0ci50ZXh0 IHx8IGF0dHJbIiN0ZXh0Il0gfHwgIiIpOworICAgICAgICB9CisgICAgICAg IGlmICh0eXBlb2YgZWwgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIGVs ID0gJChlbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBhdHRy ID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBpZiAoZWwubm9kZVR5cGUg PT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChhdHRyLnN1YnN0cmluZygw LCA2KSA9PSAieGxpbms6IikgeworICAgICAgICAgICAgICAgICAgICByZXR1 cm4gZWwuZ2V0QXR0cmlidXRlTlMoeGxpbmssIGF0dHIuc3Vic3RyaW5nKDYp KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF0 dHIuc3Vic3RyaW5nKDAsIDQpID09ICJ4bWw6IikgeworICAgICAgICAgICAg ICAgICAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlTlMoeG1sbnMsIGF0dHIu c3Vic3RyaW5nKDQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoYXR0ciA9PSAidGV4dCIpIHsKKyAgICAgICAgICAg ICAgICByZXR1cm4gZWwubm9kZVZhbHVlOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZWwubm9kZVR5cGUgPT0gMSkg eworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGF0dHIpIGlmIChhdHRy W2hhc10oa2V5KSkgeworICAgICAgICAgICAgICAgIHZhciB2YWwgPSBTdHIo YXR0cltrZXldKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmIChrZXkuc3Vic3RyaW5nKDAsIDYpID09ICJ4 bGluazoiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRy aWJ1dGVOUyh4bGluaywga2V5LnN1YnN0cmluZyg2KSwgdmFsKTsKKyAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuc3Vic3RyaW5nKDAsIDQp ID09ICJ4bWw6IikgeworICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0 QXR0cmlidXRlTlMoeG1sbnMsIGtleS5zdWJzdHJpbmcoNCksIHZhbCk7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWwpOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug aWYgKCJ0ZXh0IiBpbiBhdHRyKSB7CisgICAgICAgICAgICBlbC5ub2RlVmFs dWUgPSBhdHRyLnRleHQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg ICAgICBlbCA9IGdsb2IuZG9jLmNyZWF0ZUVsZW1lbnROUyh4bWxucywgZWwp OworICAgIH0KKyAgICByZXR1cm4gZWw7Cit9CitTbmFwLl8uJCA9ICQ7CitT bmFwLl8uaWQgPSBJRDsKK2Z1bmN0aW9uIGdldEF0dHJzKGVsKSB7CisgICAg dmFyIGF0dHJzID0gZWwuYXR0cmlidXRlcywKKyAgICAgICAgbmFtZSwKKyAg ICAgICAgb3V0ID0ge307CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRy cy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZXNw YWNlVVJJID09IHhsaW5rKSB7CisgICAgICAgICAgICBuYW1lID0gInhsaW5r OiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuYW1lID0gIiI7 CisgICAgICAgIH0KKyAgICAgICAgbmFtZSArPSBhdHRyc1tpXS5uYW1lOwor ICAgICAgICBvdXRbbmFtZV0gPSBhdHRyc1tpXS50ZXh0Q29udGVudDsKKyAg ICB9CisgICAgcmV0dXJuIG91dDsKK30KK2Z1bmN0aW9uIGlzKG8sIHR5cGUp IHsKKyAgICB0eXBlID0gU3RyLnByb3RvdHlwZS50b0xvd2VyQ2FzZS5jYWxs KHR5cGUpOworICAgIGlmICh0eXBlID09ICJmaW5pdGUiKSB7CisgICAgICAg IHJldHVybiBpc0Zpbml0ZShvKTsKKyAgICB9CisgICAgaWYgKHR5cGUgPT0g ImFycmF5IiAmJgorICAgICAgICAobyBpbnN0YW5jZW9mIEFycmF5IHx8IEFy cmF5LmlzQXJyYXkgJiYgQXJyYXkuaXNBcnJheShvKSkpIHsKKyAgICAgICAg cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiAgKHR5cGUgPT0gIm51 bGwiICYmIG8gPT09IG51bGwpIHx8CisgICAgICAgICAgICAodHlwZSA9PSB0 eXBlb2YgbyAmJiBvICE9PSBudWxsKSB8fAorICAgICAgICAgICAgKHR5cGUg PT0gIm9iamVjdCIgJiYgbyA9PT0gT2JqZWN0KG8pKSB8fAorICAgICAgICAg ICAgb2JqZWN0VG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSkudG9Mb3dl ckNhc2UoKSA9PSB0eXBlOworfQorLypcCisgKiBTbmFwLmZvcm1hdAorIFsg bWV0aG9kIF0KKyAqKgorICogUmVwbGFjZXMgY29uc3RydWN0aW9uIG9mIHR5 cGUgYHs8bmFtZT59YCB0byB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudAor ICoqCisgLSB0b2tlbiAoc3RyaW5nKSBzdHJpbmcgdG8gZm9ybWF0CisgLSBq c29uIChvYmplY3QpIG9iamVjdCB3aGljaCBwcm9wZXJ0aWVzIGFyZSB1c2Vk IGFzIGEgcmVwbGFjZW1lbnQKKyA9IChzdHJpbmcpIGZvcm1hdHRlZCBzdHJp bmcKKyA+IFVzYWdlCisgfCAvLyB0aGlzIGRyYXdzIGEgcmVjdGFuZ3VsYXIg c2hhcGUgZXF1aXZhbGVudCB0byAiTTEwLDIwaDQwdjUwaC00MHoiCisgfCBw YXBlci5wYXRoKFNuYXAuZm9ybWF0KCJNe3h9LHt5fWh7ZGltLndpZHRofXZ7 ZGltLmhlaWdodH1oe2RpbVsnbmVnYXRpdmUgd2lkdGgnXX16IiwgeworIHwg ICAgIHg6IDEwLAorIHwgICAgIHk6IDIwLAorIHwgICAgIGRpbTogeworIHwg ICAgICAgICB3aWR0aDogNDAsCisgfCAgICAgICAgIGhlaWdodDogNTAsCisg fCAgICAgICAgICJuZWdhdGl2ZSB3aWR0aCI6IC00MAorIHwgICAgIH0KKyB8 IH0pKTsKK1wqLworU25hcC5mb3JtYXQgPSAoZnVuY3Rpb24gKCkgeworICAg IHZhciB0b2tlblJlZ2V4ID0gL1x7KFteXH1dKylcfS9nLAorICAgICAgICBv YmpOb3RhdGlvblJlZ2V4ID0gLyg/Oig/Ol58XC4pKC4rPykoPz1cW3xcLnwk fFwoKXxcWygnfCIpKC4rPylcMlxdKShcKFwpKT8vZywgLy8gbWF0Y2hlcyAu eHh4eHggb3IgWyJ4eHh4eCJdIHRvIHJ1biBvdmVyIG9iamVjdCBwcm9wZXJ0 aWVzCisgICAgICAgIHJlcGxhY2VyID0gZnVuY3Rpb24gKGFsbCwga2V5LCBv YmopIHsKKyAgICAgICAgICAgIHZhciByZXMgPSBvYmo7CisgICAgICAgICAg ICBrZXkucmVwbGFjZShvYmpOb3RhdGlvblJlZ2V4LCBmdW5jdGlvbiAoYWxs LCBuYW1lLCBxdW90ZSwgcXVvdGVkTmFtZSwgaXNGdW5jKSB7CisgICAgICAg ICAgICAgICAgbmFtZSA9IG5hbWUgfHwgcXVvdGVkTmFtZTsKKyAgICAgICAg ICAgICAgICBpZiAocmVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChu YW1lIGluIHJlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0g cmVzW25hbWVdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIHR5cGVvZiByZXMgPT0gImZ1bmN0aW9uIiAmJiBpc0Z1bmMg JiYgKHJlcyA9IHJlcygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgIHJlcyA9IChyZXMgPT0gbnVsbCB8fCBy ZXMgPT0gb2JqID8gYWxsIDogcmVzKSArICIiOworICAgICAgICAgICAgcmV0 dXJuIHJlczsKKyAgICAgICAgfTsKKyAgICByZXR1cm4gZnVuY3Rpb24gKHN0 ciwgb2JqKSB7CisgICAgICAgIHJldHVybiBTdHIoc3RyKS5yZXBsYWNlKHRv a2VuUmVnZXgsIGZ1bmN0aW9uIChhbGwsIGtleSkgeworICAgICAgICAgICAg cmV0dXJuIHJlcGxhY2VyKGFsbCwga2V5LCBvYmopOworICAgICAgICB9KTsK KyAgICB9OworfSkoKTsKK2Z1bmN0aW9uIGNsb25lKG9iaikgeworICAgIGlm ICh0eXBlb2Ygb2JqID09ICJmdW5jdGlvbiIgfHwgT2JqZWN0KG9iaikgIT09 IG9iaikgeworICAgICAgICByZXR1cm4gb2JqOworICAgIH0KKyAgICB2YXIg cmVzID0gbmV3IG9iai5jb25zdHJ1Y3RvcjsKKyAgICBmb3IgKHZhciBrZXkg aW4gb2JqKSBpZiAob2JqW2hhc10oa2V5KSkgeworICAgICAgICByZXNba2V5 XSA9IGNsb25lKG9ialtrZXldKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsK K30KK1NuYXAuXy5jbG9uZSA9IGNsb25lOworZnVuY3Rpb24gcmVwdXNoKGFy cmF5LCBpdGVtKSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJyYXku bGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKGFycmF5W2ldID09PSBpdGVtKSB7 CisgICAgICAgIHJldHVybiBhcnJheS5wdXNoKGFycmF5LnNwbGljZShpLCAx KVswXSk7CisgICAgfQorfQorZnVuY3Rpb24gY2FjaGVyKGYsIHNjb3BlLCBw b3N0cHJvY2Vzc29yKSB7CisgICAgZnVuY3Rpb24gbmV3ZigpIHsKKyAgICAg ICAgdmFyIGFyZyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMCksCisgICAgICAgICAgICBhcmdzID0gYXJnLmpvaW4oIlx1MjQw MCIpLAorICAgICAgICAgICAgY2FjaGUgPSBuZXdmLmNhY2hlID0gbmV3Zi5j YWNoZSB8fCB7fSwKKyAgICAgICAgICAgIGNvdW50ID0gbmV3Zi5jb3VudCA9 IG5ld2YuY291bnQgfHwgW107CisgICAgICAgIGlmIChjYWNoZVtoYXNdKGFy Z3MpKSB7CisgICAgICAgICAgICByZXB1c2goY291bnQsIGFyZ3MpOworICAg ICAgICAgICAgcmV0dXJuIHBvc3Rwcm9jZXNzb3IgPyBwb3N0cHJvY2Vzc29y KGNhY2hlW2FyZ3NdKSA6IGNhY2hlW2FyZ3NdOworICAgICAgICB9CisgICAg ICAgIGNvdW50Lmxlbmd0aCA+PSAxZTMgJiYgZGVsZXRlIGNhY2hlW2NvdW50 LnNoaWZ0KCldOworICAgICAgICBjb3VudC5wdXNoKGFyZ3MpOworICAgICAg ICBjYWNoZVthcmdzXSA9IGYuYXBwbHkoc2NvcGUsIGFyZyk7CisgICAgICAg IHJldHVybiBwb3N0cHJvY2Vzc29yID8gcG9zdHByb2Nlc3NvcihjYWNoZVth cmdzXSkgOiBjYWNoZVthcmdzXTsKKyAgICB9CisgICAgcmV0dXJuIG5ld2Y7 Cit9CitTbmFwLl8uY2FjaGVyID0gY2FjaGVyOworZnVuY3Rpb24gYW5nbGUo eDEsIHkxLCB4MiwgeTIsIHgzLCB5MykgeworICAgIGlmICh4MyA9PSBudWxs KSB7CisgICAgICAgIHZhciB4ID0geDEgLSB4MiwKKyAgICAgICAgICAgIHkg PSB5MSAtIHkyOworICAgICAgICBpZiAoIXggJiYgIXkpIHsKKyAgICAgICAg ICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoMTgw ICsgbWF0aC5hdGFuMigteSwgLXgpICogMTgwIC8gUEkgKyAzNjApICUgMzYw OworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBhbmdsZSh4MSwgeTEs IHgzLCB5MykgLSBhbmdsZSh4MiwgeTIsIHgzLCB5Myk7CisgICAgfQorfQor ZnVuY3Rpb24gcmFkKGRlZykgeworICAgIHJldHVybiBkZWcgJSAzNjAgKiBQ SSAvIDE4MDsKK30KK2Z1bmN0aW9uIGRlZyhyYWQpIHsKKyAgICByZXR1cm4g cmFkICogMTgwIC8gUEkgJSAzNjA7Cit9CitmdW5jdGlvbiB4X3koKSB7Cisg ICAgcmV0dXJuIHRoaXMueCArIFMgKyB0aGlzLnk7Cit9CitmdW5jdGlvbiB4 X3lfd19oKCkgeworICAgIHJldHVybiB0aGlzLnggKyBTICsgdGhpcy55ICsg UyArIHRoaXMud2lkdGggKyAiIFx4ZDcgIiArIHRoaXMuaGVpZ2h0OworfQor CisvKlwKKyAqIFNuYXAucmFkCisgWyBtZXRob2QgXQorICoqCisgKiBUcmFu c2Zvcm0gYW5nbGUgdG8gcmFkaWFucworIC0gZGVnIChudW1iZXIpIGFuZ2xl IGluIGRlZ3JlZXMKKyA9IChudW1iZXIpIGFuZ2xlIGluIHJhZGlhbnMKK1wq LworU25hcC5yYWQgPSByYWQ7CisvKlwKKyAqIFNuYXAuZGVnCisgWyBtZXRo b2QgXQorICoqCisgKiBUcmFuc2Zvcm0gYW5nbGUgdG8gZGVncmVlcworIC0g cmFkIChudW1iZXIpIGFuZ2xlIGluIHJhZGlhbnMKKyA9IChudW1iZXIpIGFu Z2xlIGluIGRlZ3JlZXMKK1wqLworU25hcC5kZWcgPSBkZWc7CisvKlwKKyAq IFNuYXAuc2luCisgWyBtZXRob2QgXQorICoqCisgKiBFcXVpdmFsZW50IHRv IGBNYXRoLnNpbigpYCBvbmx5IHdvcmtzIHdpdGggZGVncmVlcywgbm90IHJh ZGlhbnMuCisgLSBhbmdsZSAobnVtYmVyKSBhbmdsZSBpbiBkZWdyZWVzCisg PSAobnVtYmVyKSBzaW4KK1wqLworU25hcC5zaW4gPSBmdW5jdGlvbiAoYW5n bGUpIHsKKyAgICByZXR1cm4gbWF0aC5zaW4oU25hcC5yYWQoYW5nbGUpKTsK K307CisvKlwKKyAqIFNuYXAudGFuCisgWyBtZXRob2QgXQorICoqCisgKiBF cXVpdmFsZW50IHRvIGBNYXRoLnRhbigpYCBvbmx5IHdvcmtzIHdpdGggZGVn cmVlcywgbm90IHJhZGlhbnMuCisgLSBhbmdsZSAobnVtYmVyKSBhbmdsZSBp biBkZWdyZWVzCisgPSAobnVtYmVyKSB0YW4KK1wqLworU25hcC50YW4gPSBm dW5jdGlvbiAoYW5nbGUpIHsKKyAgICByZXR1cm4gbWF0aC50YW4oU25hcC5y YWQoYW5nbGUpKTsKK307CisvKlwKKyAqIFNuYXAuY29zCisgWyBtZXRob2Qg XQorICoqCisgKiBFcXVpdmFsZW50IHRvIGBNYXRoLmNvcygpYCBvbmx5IHdv cmtzIHdpdGggZGVncmVlcywgbm90IHJhZGlhbnMuCisgLSBhbmdsZSAobnVt YmVyKSBhbmdsZSBpbiBkZWdyZWVzCisgPSAobnVtYmVyKSBjb3MKK1wqLwor U25hcC5jb3MgPSBmdW5jdGlvbiAoYW5nbGUpIHsKKyAgICByZXR1cm4gbWF0 aC5jb3MoU25hcC5yYWQoYW5nbGUpKTsKK307CisvKlwKKyAqIFNuYXAuYXNp bgorIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZhbGVudCB0byBgTWF0aC5h c2luKClgIG9ubHkgd29ya3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFkaWFucy4K KyAtIG51bSAobnVtYmVyKSB2YWx1ZQorID0gKG51bWJlcikgYXNpbiBpbiBk ZWdyZWVzCitcKi8KK1NuYXAuYXNpbiA9IGZ1bmN0aW9uIChudW0pIHsKKyAg ICByZXR1cm4gU25hcC5kZWcobWF0aC5hc2luKG51bSkpOworfTsKKy8qXAor ICogU25hcC5hY29zCisgWyBtZXRob2QgXQorICoqCisgKiBFcXVpdmFsZW50 IHRvIGBNYXRoLmFjb3MoKWAgb25seSB3b3JrcyB3aXRoIGRlZ3JlZXMsIG5v dCByYWRpYW5zLgorIC0gbnVtIChudW1iZXIpIHZhbHVlCisgPSAobnVtYmVy KSBhY29zIGluIGRlZ3JlZXMKK1wqLworU25hcC5hY29zID0gZnVuY3Rpb24g KG51bSkgeworICAgIHJldHVybiBTbmFwLmRlZyhtYXRoLmFjb3MobnVtKSk7 Cit9OworLypcCisgKiBTbmFwLmF0YW4KKyBbIG1ldGhvZCBdCisgKioKKyAq IEVxdWl2YWxlbnQgdG8gYE1hdGguYXRhbigpYCBvbmx5IHdvcmtzIHdpdGgg ZGVncmVlcywgbm90IHJhZGlhbnMuCisgLSBudW0gKG51bWJlcikgdmFsdWUK KyA9IChudW1iZXIpIGF0YW4gaW4gZGVncmVlcworXCovCitTbmFwLmF0YW4g PSBmdW5jdGlvbiAobnVtKSB7CisgICAgcmV0dXJuIFNuYXAuZGVnKG1hdGgu YXRhbihudW0pKTsKK307CisvKlwKKyAqIFNuYXAuYXRhbjIKKyBbIG1ldGhv ZCBdCisgKioKKyAqIEVxdWl2YWxlbnQgdG8gYE1hdGguYXRhbjIoKWAgb25s eSB3b3JrcyB3aXRoIGRlZ3JlZXMsIG5vdCByYWRpYW5zLgorIC0gbnVtIChu dW1iZXIpIHZhbHVlCisgPSAobnVtYmVyKSBhdGFuMiBpbiBkZWdyZWVzCitc Ki8KK1NuYXAuYXRhbjIgPSBmdW5jdGlvbiAobnVtKSB7CisgICAgcmV0dXJu IFNuYXAuZGVnKG1hdGguYXRhbjIobnVtKSk7Cit9OworLypcCisgKiBTbmFw LmFuZ2xlCisgWyBtZXRob2QgXQorICoqCisgKiBSZXR1cm5zIGFuIGFuZ2xl IGJldHdlZW4gdHdvIG9yIHRocmVlIHBvaW50cworID4gUGFyYW1ldGVycwor IC0geDEgKG51bWJlcikgeCBjb29yZCBvZiBmaXJzdCBwb2ludAorIC0geTEg KG51bWJlcikgeSBjb29yZCBvZiBmaXJzdCBwb2ludAorIC0geDIgKG51bWJl cikgeCBjb29yZCBvZiBzZWNvbmQgcG9pbnQKKyAtIHkyIChudW1iZXIpIHkg Y29vcmQgb2Ygc2Vjb25kIHBvaW50CisgLSB4MyAobnVtYmVyKSAjb3B0aW9u YWwgeCBjb29yZCBvZiB0aGlyZCBwb2ludAorIC0geTMgKG51bWJlcikgI29w dGlvbmFsIHkgY29vcmQgb2YgdGhpcmQgcG9pbnQKKyA9IChudW1iZXIpIGFu Z2xlIGluIGRlZ3JlZXMKK1wqLworU25hcC5hbmdsZSA9IGFuZ2xlOworLypc CisgKiBTbmFwLmxlbgorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0dXJucyBk aXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMKKyA+IFBhcmFtZXRlcnMKKyAt IHgxIChudW1iZXIpIHggY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHkxIChu dW1iZXIpIHkgY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHgyIChudW1iZXIp IHggY29vcmQgb2Ygc2Vjb25kIHBvaW50CisgLSB5MiAobnVtYmVyKSB5IGNv b3JkIG9mIHNlY29uZCBwb2ludAorID0gKG51bWJlcikgZGlzdGFuY2UKK1wq LworU25hcC5sZW4gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIpIHsKKyAg ICByZXR1cm4gTWF0aC5zcXJ0KFNuYXAubGVuMih4MSwgeTEsIHgyLCB5Mikp OworfTsKKy8qXAorICogU25hcC5sZW4yCisgWyBtZXRob2QgXQorICoqCisg KiBSZXR1cm5zIHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRz CisgPiBQYXJhbWV0ZXJzCisgLSB4MSAobnVtYmVyKSB4IGNvb3JkIG9mIGZp cnN0IHBvaW50CisgLSB5MSAobnVtYmVyKSB5IGNvb3JkIG9mIGZpcnN0IHBv aW50CisgLSB4MiAobnVtYmVyKSB4IGNvb3JkIG9mIHNlY29uZCBwb2ludAor IC0geTIgKG51bWJlcikgeSBjb29yZCBvZiBzZWNvbmQgcG9pbnQKKyA9IChu dW1iZXIpIGRpc3RhbmNlCitcKi8KK1NuYXAubGVuMiA9IGZ1bmN0aW9uICh4 MSwgeTEsIHgyLCB5MikgeworICAgIHJldHVybiAoeDEgLSB4MikgKiAoeDEg LSB4MikgKyAoeTEgLSB5MikgKiAoeTEgLSB5Mik7Cit9OworLypcCisgKiBT bmFwLmNsb3Nlc3RQb2ludAorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0dXJu cyBjbG9zZXN0IHBvaW50IHRvIGEgZ2l2ZW4gb25lIG9uIGEgZ2l2ZW4gcGF0 aC4KKyA+IFBhcmFtZXRlcnMKKyAtIHBhdGggKEVsZW1lbnQpIHBhdGggZWxl bWVudAorIC0geCAobnVtYmVyKSB4IGNvb3JkIG9mIGEgcG9pbnQKKyAtIHkg KG51bWJlcikgeSBjb29yZCBvZiBhIHBvaW50CisgPSAob2JqZWN0KSBpbiBm b3JtYXQKKyB7CisgICAgeCAobnVtYmVyKSB4IGNvb3JkIG9mIHRoZSBwb2lu dCBvbiB0aGUgcGF0aAorICAgIHkgKG51bWJlcikgeSBjb29yZCBvZiB0aGUg cG9pbnQgb24gdGhlIHBhdGgKKyAgICBsZW5ndGggKG51bWJlcikgbGVuZ3Ro IG9mIHRoZSBwYXRoIHRvIHRoZSBwb2ludAorICAgIGRpc3RhbmNlIChudW1i ZXIpIGRpc3RhbmNlIGZyb20gdGhlIGdpdmVuIHBvaW50IHRvIHRoZSBwYXRo CisgfQorXCovCisvLyBDb3BpZWQgZnJvbSBodHRwOi8vYmwub2Nrcy5vcmcv bWJvc3RvY2svODAyNzYzNworU25hcC5jbG9zZXN0UG9pbnQgPSBmdW5jdGlv biAocGF0aCwgeCwgeSkgeworICAgIGZ1bmN0aW9uIGRpc3RhbmNlMihwKSB7 CisgICAgICAgIHZhciBkeCA9IHAueCAtIHgsCisgICAgICAgICAgICBkeSA9 IHAueSAtIHk7CisgICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTsK KyAgICB9CisgICAgdmFyIHBhdGhOb2RlID0gcGF0aC5ub2RlLAorICAgICAg ICBwYXRoTGVuZ3RoID0gcGF0aE5vZGUuZ2V0VG90YWxMZW5ndGgoKSwKKyAg ICAgICAgcHJlY2lzaW9uID0gcGF0aExlbmd0aCAvIHBhdGhOb2RlLnBhdGhT ZWdMaXN0Lm51bWJlck9mSXRlbXMgKiAuMTI1LAorICAgICAgICBiZXN0LAor ICAgICAgICBiZXN0TGVuZ3RoLAorICAgICAgICBiZXN0RGlzdGFuY2UgPSBJ bmZpbml0eTsKKworICAgIC8vIGxpbmVhciBzY2FuIGZvciBjb2Fyc2UgYXBw cm94aW1hdGlvbgorICAgIGZvciAodmFyIHNjYW4sIHNjYW5MZW5ndGggPSAw LCBzY2FuRGlzdGFuY2U7IHNjYW5MZW5ndGggPD0gcGF0aExlbmd0aDsgc2Nh bkxlbmd0aCArPSBwcmVjaXNpb24pIHsKKyAgICAgICAgaWYgKChzY2FuRGlz dGFuY2UgPSBkaXN0YW5jZTIoc2NhbiA9IHBhdGhOb2RlLmdldFBvaW50QXRM ZW5ndGgoc2Nhbkxlbmd0aCkpKSA8IGJlc3REaXN0YW5jZSkgeworICAgICAg ICAgICAgYmVzdCA9IHNjYW4sIGJlc3RMZW5ndGggPSBzY2FuTGVuZ3RoLCBi ZXN0RGlzdGFuY2UgPSBzY2FuRGlzdGFuY2U7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICAvLyBiaW5hcnkgc2VhcmNoIGZvciBwcmVjaXNlIGVzdGltYXRl CisgICAgcHJlY2lzaW9uICo9IC41OworICAgIHdoaWxlIChwcmVjaXNpb24g PiAuNSkgeworICAgICAgICB2YXIgYmVmb3JlLAorICAgICAgICAgICAgYWZ0 ZXIsCisgICAgICAgICAgICBiZWZvcmVMZW5ndGgsCisgICAgICAgICAgICBh ZnRlckxlbmd0aCwKKyAgICAgICAgICAgIGJlZm9yZURpc3RhbmNlLAorICAg ICAgICAgICAgYWZ0ZXJEaXN0YW5jZTsKKyAgICAgICAgaWYgKChiZWZvcmVM ZW5ndGggPSBiZXN0TGVuZ3RoIC0gcHJlY2lzaW9uKSA+PSAwICYmIChiZWZv cmVEaXN0YW5jZSA9IGRpc3RhbmNlMihiZWZvcmUgPSBwYXRoTm9kZS5nZXRQ b2ludEF0TGVuZ3RoKGJlZm9yZUxlbmd0aCkpKSA8IGJlc3REaXN0YW5jZSkg eworICAgICAgICAgICAgYmVzdCA9IGJlZm9yZSwgYmVzdExlbmd0aCA9IGJl Zm9yZUxlbmd0aCwgYmVzdERpc3RhbmNlID0gYmVmb3JlRGlzdGFuY2U7Cisg ICAgICAgIH0gZWxzZSBpZiAoKGFmdGVyTGVuZ3RoID0gYmVzdExlbmd0aCAr IHByZWNpc2lvbikgPD0gcGF0aExlbmd0aCAmJiAoYWZ0ZXJEaXN0YW5jZSA9 IGRpc3RhbmNlMihhZnRlciA9IHBhdGhOb2RlLmdldFBvaW50QXRMZW5ndGgo YWZ0ZXJMZW5ndGgpKSkgPCBiZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAg IGJlc3QgPSBhZnRlciwgYmVzdExlbmd0aCA9IGFmdGVyTGVuZ3RoLCBiZXN0 RGlzdGFuY2UgPSBhZnRlckRpc3RhbmNlOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgcHJlY2lzaW9uICo9IC41OworICAgICAgICB9CisgICAg fQorCisgICAgYmVzdCA9IHsKKyAgICAgICAgeDogYmVzdC54LAorICAgICAg ICB5OiBiZXN0LnksCisgICAgICAgIGxlbmd0aDogYmVzdExlbmd0aCwKKyAg ICAgICAgZGlzdGFuY2U6IE1hdGguc3FydChiZXN0RGlzdGFuY2UpCisgICAg fTsKKyAgICByZXR1cm4gYmVzdDsKK30KKy8qXAorICogU25hcC5pcworIFsg bWV0aG9kIF0KKyAqKgorICogSGFuZHkgcmVwbGFjZW1lbnQgZm9yIHRoZSBg dHlwZW9mYCBvcGVyYXRvcgorIC0gbyAo4oCmKSBhbnkgb2JqZWN0IG9yIHBy aW1pdGl2ZQorIC0gdHlwZSAoc3RyaW5nKSBuYW1lIG9mIHRoZSB0eXBlLCBl LmcuLCBgc3RyaW5nYCwgYGZ1bmN0aW9uYCwgYG51bWJlcmAsIGV0Yy4KKyA9 IChib29sZWFuKSBgdHJ1ZWAgaWYgZ2l2ZW4gdmFsdWUgaXMgb2YgZ2l2ZW4g dHlwZQorXCovCitTbmFwLmlzID0gaXM7CisvKlwKKyAqIFNuYXAuc25hcFRv CisgWyBtZXRob2QgXQorICoqCisgKiBTbmFwcyBnaXZlbiB2YWx1ZSB0byBn aXZlbiBncmlkCisgLSB2YWx1ZXMgKGFycmF5fG51bWJlcikgZ2l2ZW4gYXJy YXkgb2YgdmFsdWVzIG9yIHN0ZXAgb2YgdGhlIGdyaWQKKyAtIHZhbHVlIChu dW1iZXIpIHZhbHVlIHRvIGFkanVzdAorIC0gdG9sZXJhbmNlIChudW1iZXIp ICNvcHRpb25hbCBtYXhpbXVtIGRpc3RhbmNlIHRvIHRoZSB0YXJnZXQgdmFs dWUgdGhhdCB3b3VsZCB0cmlnZ2VyIHRoZSBzbmFwLiBEZWZhdWx0IGlzIGAx MGAuCisgPSAobnVtYmVyKSBhZGp1c3RlZCB2YWx1ZQorXCovCitTbmFwLnNu YXBUbyA9IGZ1bmN0aW9uICh2YWx1ZXMsIHZhbHVlLCB0b2xlcmFuY2UpIHsK KyAgICB0b2xlcmFuY2UgPSBpcyh0b2xlcmFuY2UsICJmaW5pdGUiKSA/IHRv bGVyYW5jZSA6IDEwOworICAgIGlmIChpcyh2YWx1ZXMsICJhcnJheSIpKSB7 CisgICAgICAgIHZhciBpID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgd2hp bGUgKGktLSkgaWYgKGFicyh2YWx1ZXNbaV0gLSB2YWx1ZSkgPD0gdG9sZXJh bmNlKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldOworICAgICAg ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVzID0gK3ZhbHVlczsK KyAgICAgICAgdmFyIHJlbSA9IHZhbHVlICUgdmFsdWVzOworICAgICAgICBp ZiAocmVtIDwgdG9sZXJhbmNlKSB7CisgICAgICAgICAgICByZXR1cm4gdmFs dWUgLSByZW07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlbSA+IHZhbHVl cyAtIHRvbGVyYW5jZSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlIC0g cmVtICsgdmFsdWVzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB2 YWx1ZTsKK307CisvLyBDb2xvdXIKKy8qXAorICogU25hcC5nZXRSR0IKKyBb IG1ldGhvZCBdCisgKioKKyAqIFBhcnNlcyBjb2xvciBzdHJpbmcgYXMgUkdC IG9iamVjdAorIC0gY29sb3IgKHN0cmluZykgY29sb3Igc3RyaW5nIGluIG9u ZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisgIyA8dWw+CisgIyAgICAg PGxpPkNvbG9yIG5hbWUgKDxjb2RlPnJlZDwvY29kZT4sIDxjb2RlPmdyZWVu PC9jb2RlPiwgPGNvZGU+Y29ybmZsb3dlcmJsdWU8L2NvZGU+LCBldGMpPC9s aT4KKyAjICAgICA8bGk+I+KAouKAouKAoiDigJQgc2hvcnRlbmVkIEhUTUwg Y29sb3I6ICg8Y29kZT4jMDAwPC9jb2RlPiwgPGNvZGU+I2ZjMDwvY29kZT4s IGV0Yy4pPC9saT4KKyAjICAgICA8bGk+I+KAouKAouKAouKAouKAouKAoiDi gJQgZnVsbCBsZW5ndGggSFRNTCBjb2xvcjogKDxjb2RlPiMwMDAwMDA8L2Nv ZGU+LCA8Y29kZT4jYmQyMzAwPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5y Z2Io4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKAoikg4oCUIHJlZCwg Z3JlZW4gYW5kIGJsdWUgY2hhbm5lbHMgdmFsdWVzOiAoPGNvZGU+cmdiKDIw MCwmbmJzcDsxMDAsJm5ic3A7MCk8L2NvZGU+KTwvbGk+CisgIyAgICAgPGxp PnJnYmEo4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKAoiwg4oCi4oCi 4oCiKSDigJQgYWxzbyB3aXRoIG9wYWNpdHk8L2xpPgorICMgICAgIDxsaT5y Z2Io4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSkg4oCUIHNh bWUgYXMgYWJvdmUsIGJ1dCBpbiAlOiAoPGNvZGU+cmdiKDEwMCUsJm5ic3A7 MTc1JSwmbmJzcDswJSk8L2NvZGU+KTwvbGk+CisgIyAgICAgPGxpPnJnYmEo 4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCi JSkg4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+aHNi KOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIpIOKAlCBodWUsIHNh dHVyYXRpb24gYW5kIGJyaWdodG5lc3MgdmFsdWVzOiAoPGNvZGU+aHNiKDAu NSwmbmJzcDswLjI1LCZuYnNwOzEpPC9jb2RlPik8L2xpPgorICMgICAgIDxs aT5oc2JhKOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKA ouKAoikg4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+ aHNiKOKAouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKAlCBz YW1lIGFzIGFib3ZlLCBidXQgaW4gJTwvbGk+CisgIyAgICAgPGxpPmhzYmEo 4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCi JSkg4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+aHNs KOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIpIOKAlCBodWUsIHNh dHVyYXRpb24gYW5kIGx1bWlub3NpdHkgdmFsdWVzOiAoPGNvZGU+aHNiKDAu NSwmbmJzcDswLjI1LCZuYnNwOzAuNSk8L2NvZGU+KTwvbGk+CisgIyAgICAg PGxpPmhzbGEo4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKAoiwg4oCi 4oCi4oCiKSDigJQgYWxzbyB3aXRoIG9wYWNpdHk8L2xpPgorICMgICAgIDxs aT5oc2wo4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSkg4oCU IHNhbWUgYXMgYWJvdmUsIGJ1dCBpbiAlPC9saT4KKyAjICAgICA8bGk+aHNs YSjigKLigKLigKIlLCDigKLigKLigKIlLCDigKLigKLigKIlLCDigKLigKLi gKIlKSDigJQgYWxzbyB3aXRoIG9wYWNpdHk8L2xpPgorICMgPC91bD4KKyAq IE5vdGUgdGhhdCBgJWAgY2FuIGJlIHVzZWQgYW55IHRpbWU6IGByZ2IoMjAl LCAyNTUsIDUwJSlgLgorID0gKG9iamVjdCkgUkdCIG9iamVjdCBpbiB0aGUg Zm9sbG93aW5nIGZvcm1hdDoKKyBvIHsKKyBvICAgICByIChudW1iZXIpIHJl ZCwKKyBvICAgICBnIChudW1iZXIpIGdyZWVuLAorIG8gICAgIGIgKG51bWJl cikgYmx1ZSwKKyBvICAgICBoZXggKHN0cmluZykgY29sb3IgaW4gSFRNTC9D U1MgZm9ybWF0OiAj4oCi4oCi4oCi4oCi4oCi4oCiLAorIG8gICAgIGVycm9y IChib29sZWFuKSB0cnVlIGlmIHN0cmluZyBjYW4ndCBiZSBwYXJzZWQKKyBv IH0KK1wqLworU25hcC5nZXRSR0IgPSBjYWNoZXIoZnVuY3Rpb24gKGNvbG91 cikgeworICAgIGlmICghY29sb3VyIHx8ICEhKChjb2xvdXIgPSBTdHIoY29s b3VyKSkuaW5kZXhPZigiLSIpICsgMSkpIHsKKyAgICAgICAgcmV0dXJuIHty OiAtMSwgZzogLTEsIGI6IC0xLCBoZXg6ICJub25lIiwgZXJyb3I6IDEsIHRv U3RyaW5nOiByZ2J0b1N0cmluZ307CisgICAgfQorICAgIGlmIChjb2xvdXIg PT0gIm5vbmUiKSB7CisgICAgICAgIHJldHVybiB7cjogLTEsIGc6IC0xLCBi OiAtMSwgaGV4OiAibm9uZSIsIHRvU3RyaW5nOiByZ2J0b1N0cmluZ307Cisg ICAgfQorICAgICEoaHNyZ1toYXNdKGNvbG91ci50b0xvd2VyQ2FzZSgpLnN1 YnN0cmluZygwLCAyKSkgfHwgY29sb3VyLmNoYXJBdCgpID09ICIjIikgJiYg KGNvbG91ciA9IHRvSGV4KGNvbG91cikpOworICAgIGlmICghY29sb3VyKSB7 CisgICAgICAgIHJldHVybiB7cjogLTEsIGc6IC0xLCBiOiAtMSwgaGV4OiAi bm9uZSIsIGVycm9yOiAxLCB0b1N0cmluZzogcmdidG9TdHJpbmd9OworICAg IH0KKyAgICB2YXIgcmVzLAorICAgICAgICByZWQsCisgICAgICAgIGdyZWVu LAorICAgICAgICBibHVlLAorICAgICAgICBvcGFjaXR5LAorICAgICAgICB0 LAorICAgICAgICB2YWx1ZXMsCisgICAgICAgIHJnYiA9IGNvbG91ci5tYXRj aChjb2xvdXJSZWdFeHApOworICAgIGlmIChyZ2IpIHsKKyAgICAgICAgaWYg KHJnYlsyXSkgeworICAgICAgICAgICAgYmx1ZSA9IHRvSW50KHJnYlsyXS5z dWJzdHJpbmcoNSksIDE2KTsKKyAgICAgICAgICAgIGdyZWVuID0gdG9JbnQo cmdiWzJdLnN1YnN0cmluZygzLCA1KSwgMTYpOworICAgICAgICAgICAgcmVk ID0gdG9JbnQocmdiWzJdLnN1YnN0cmluZygxLCAzKSwgMTYpOworICAgICAg ICB9CisgICAgICAgIGlmIChyZ2JbM10pIHsKKyAgICAgICAgICAgIGJsdWUg PSB0b0ludCgodCA9IHJnYlszXS5jaGFyQXQoMykpICsgdCwgMTYpOworICAg ICAgICAgICAgZ3JlZW4gPSB0b0ludCgodCA9IHJnYlszXS5jaGFyQXQoMikp ICsgdCwgMTYpOworICAgICAgICAgICAgcmVkID0gdG9JbnQoKHQgPSByZ2Jb M10uY2hhckF0KDEpKSArIHQsIDE2KTsKKyAgICAgICAgfQorICAgICAgICBp ZiAocmdiWzRdKSB7CisgICAgICAgICAgICB2YWx1ZXMgPSByZ2JbNF0uc3Bs aXQoY29tbWFTcGFjZXMpOworICAgICAgICAgICAgcmVkID0gdG9GbG9hdCh2 YWx1ZXNbMF0pOworICAgICAgICAgICAgdmFsdWVzWzBdLnNsaWNlKC0xKSA9 PSAiJSIgJiYgKHJlZCAqPSAyLjU1KTsKKyAgICAgICAgICAgIGdyZWVuID0g dG9GbG9hdCh2YWx1ZXNbMV0pOworICAgICAgICAgICAgdmFsdWVzWzFdLnNs aWNlKC0xKSA9PSAiJSIgJiYgKGdyZWVuICo9IDIuNTUpOworICAgICAgICAg ICAgYmx1ZSA9IHRvRmxvYXQodmFsdWVzWzJdKTsKKyAgICAgICAgICAgIHZh bHVlc1syXS5zbGljZSgtMSkgPT0gIiUiICYmIChibHVlICo9IDIuNTUpOwor ICAgICAgICAgICAgcmdiWzFdLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNCkg PT0gInJnYmEiICYmIChvcGFjaXR5ID0gdG9GbG9hdCh2YWx1ZXNbM10pKTsK KyAgICAgICAgICAgIHZhbHVlc1szXSAmJiB2YWx1ZXNbM10uc2xpY2UoLTEp ID09ICIlIiAmJiAob3BhY2l0eSAvPSAxMDApOworICAgICAgICB9CisgICAg ICAgIGlmIChyZ2JbNV0pIHsKKyAgICAgICAgICAgIHZhbHVlcyA9IHJnYls1 XS5zcGxpdChjb21tYVNwYWNlcyk7CisgICAgICAgICAgICByZWQgPSB0b0Zs b2F0KHZhbHVlc1swXSk7CisgICAgICAgICAgICB2YWx1ZXNbMF0uc2xpY2Uo LTEpID09ICIlIiAmJiAocmVkIC89IDEwMCk7CisgICAgICAgICAgICBncmVl biA9IHRvRmxvYXQodmFsdWVzWzFdKTsKKyAgICAgICAgICAgIHZhbHVlc1sx XS5zbGljZSgtMSkgPT0gIiUiICYmIChncmVlbiAvPSAxMDApOworICAgICAg ICAgICAgYmx1ZSA9IHRvRmxvYXQodmFsdWVzWzJdKTsKKyAgICAgICAgICAg IHZhbHVlc1syXS5zbGljZSgtMSkgPT0gIiUiICYmIChibHVlIC89IDEwMCk7 CisgICAgICAgICAgICAodmFsdWVzWzBdLnNsaWNlKC0zKSA9PSAiZGVnIiB8 fCB2YWx1ZXNbMF0uc2xpY2UoLTEpID09ICJceGIwIikgJiYgKHJlZCAvPSAz NjApOworICAgICAgICAgICAgcmdiWzFdLnRvTG93ZXJDYXNlKCkuc2xpY2Uo MCwgNCkgPT0gImhzYmEiICYmIChvcGFjaXR5ID0gdG9GbG9hdCh2YWx1ZXNb M10pKTsKKyAgICAgICAgICAgIHZhbHVlc1szXSAmJiB2YWx1ZXNbM10uc2xp Y2UoLTEpID09ICIlIiAmJiAob3BhY2l0eSAvPSAxMDApOworICAgICAgICAg ICAgcmV0dXJuIFNuYXAuaHNiMnJnYihyZWQsIGdyZWVuLCBibHVlLCBvcGFj aXR5KTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmdiWzZdKSB7CisgICAg ICAgICAgICB2YWx1ZXMgPSByZ2JbNl0uc3BsaXQoY29tbWFTcGFjZXMpOwor ICAgICAgICAgICAgcmVkID0gdG9GbG9hdCh2YWx1ZXNbMF0pOworICAgICAg ICAgICAgdmFsdWVzWzBdLnNsaWNlKC0xKSA9PSAiJSIgJiYgKHJlZCAvPSAx MDApOworICAgICAgICAgICAgZ3JlZW4gPSB0b0Zsb2F0KHZhbHVlc1sxXSk7 CisgICAgICAgICAgICB2YWx1ZXNbMV0uc2xpY2UoLTEpID09ICIlIiAmJiAo Z3JlZW4gLz0gMTAwKTsKKyAgICAgICAgICAgIGJsdWUgPSB0b0Zsb2F0KHZh bHVlc1syXSk7CisgICAgICAgICAgICB2YWx1ZXNbMl0uc2xpY2UoLTEpID09 ICIlIiAmJiAoYmx1ZSAvPSAxMDApOworICAgICAgICAgICAgKHZhbHVlc1sw XS5zbGljZSgtMykgPT0gImRlZyIgfHwgdmFsdWVzWzBdLnNsaWNlKC0xKSA9 PSAiXHhiMCIpICYmIChyZWQgLz0gMzYwKTsKKyAgICAgICAgICAgIHJnYlsx XS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDQpID09ICJoc2xhIiAmJiAob3Bh Y2l0eSA9IHRvRmxvYXQodmFsdWVzWzNdKSk7CisgICAgICAgICAgICB2YWx1 ZXNbM10gJiYgdmFsdWVzWzNdLnNsaWNlKC0xKSA9PSAiJSIgJiYgKG9wYWNp dHkgLz0gMTAwKTsKKyAgICAgICAgICAgIHJldHVybiBTbmFwLmhzbDJyZ2Io cmVkLCBncmVlbiwgYmx1ZSwgb3BhY2l0eSk7CisgICAgICAgIH0KKyAgICAg ICAgcmVkID0gbW1pbihtYXRoLnJvdW5kKHJlZCksIDI1NSk7CisgICAgICAg IGdyZWVuID0gbW1pbihtYXRoLnJvdW5kKGdyZWVuKSwgMjU1KTsKKyAgICAg ICAgYmx1ZSA9IG1taW4obWF0aC5yb3VuZChibHVlKSwgMjU1KTsKKyAgICAg ICAgb3BhY2l0eSA9IG1taW4obW1heChvcGFjaXR5LCAwKSwgMSk7CisgICAg ICAgIHJnYiA9IHtyOiByZWQsIGc6IGdyZWVuLCBiOiBibHVlLCB0b1N0cmlu ZzogcmdidG9TdHJpbmd9OworICAgICAgICByZ2IuaGV4ID0gIiMiICsgKDE2 Nzc3MjE2IHwgYmx1ZSB8IChncmVlbiA8PCA4KSB8IChyZWQgPDwgMTYpKS50 b1N0cmluZygxNikuc2xpY2UoMSk7CisgICAgICAgIHJnYi5vcGFjaXR5ID0g aXMob3BhY2l0eSwgImZpbml0ZSIpID8gb3BhY2l0eSA6IDE7CisgICAgICAg IHJldHVybiByZ2I7CisgICAgfQorICAgIHJldHVybiB7cjogLTEsIGc6IC0x LCBiOiAtMSwgaGV4OiAibm9uZSIsIGVycm9yOiAxLCB0b1N0cmluZzogcmdi dG9TdHJpbmd9OworfSwgU25hcCk7CisvKlwKKyAqIFNuYXAuaHNiCisgWyBt ZXRob2QgXQorICoqCisgKiBDb252ZXJ0cyBIU0IgdmFsdWVzIHRvIGEgaGV4 IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb2xvcgorIC0gaCAobnVtYmVyKSBo dWUKKyAtIHMgKG51bWJlcikgc2F0dXJhdGlvbgorIC0gYiAobnVtYmVyKSB2 YWx1ZSBvciBicmlnaHRuZXNzCisgPSAoc3RyaW5nKSBoZXggcmVwcmVzZW50 YXRpb24gb2YgdGhlIGNvbG9yCitcKi8KK1NuYXAuaHNiID0gY2FjaGVyKGZ1 bmN0aW9uIChoLCBzLCBiKSB7CisgICAgcmV0dXJuIFNuYXAuaHNiMnJnYiho LCBzLCBiKS5oZXg7Cit9KTsKKy8qXAorICogU25hcC5oc2wKKyBbIG1ldGhv ZCBdCisgKioKKyAqIENvbnZlcnRzIEhTTCB2YWx1ZXMgdG8gYSBoZXggcmVw cmVzZW50YXRpb24gb2YgdGhlIGNvbG9yCisgLSBoIChudW1iZXIpIGh1ZQor IC0gcyAobnVtYmVyKSBzYXR1cmF0aW9uCisgLSBsIChudW1iZXIpIGx1bWlu b3NpdHkKKyA9IChzdHJpbmcpIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUg Y29sb3IKK1wqLworU25hcC5oc2wgPSBjYWNoZXIoZnVuY3Rpb24gKGgsIHMs IGwpIHsKKyAgICByZXR1cm4gU25hcC5oc2wycmdiKGgsIHMsIGwpLmhleDsK K30pOworLypcCisgKiBTbmFwLnJnYgorIFsgbWV0aG9kIF0KKyAqKgorICog Q29udmVydHMgUkdCIHZhbHVlcyB0byBhIGhleCByZXByZXNlbnRhdGlvbiBv ZiB0aGUgY29sb3IKKyAtIHIgKG51bWJlcikgcmVkCisgLSBnIChudW1iZXIp IGdyZWVuCisgLSBiIChudW1iZXIpIGJsdWUKKyA9IChzdHJpbmcpIGhleCBy ZXByZXNlbnRhdGlvbiBvZiB0aGUgY29sb3IKK1wqLworU25hcC5yZ2IgPSBj YWNoZXIoZnVuY3Rpb24gKHIsIGcsIGIsIG8pIHsKKyAgICBpZiAoaXMobywg ImZpbml0ZSIpKSB7CisgICAgICAgIHZhciByb3VuZCA9IG1hdGgucm91bmQ7 CisgICAgICAgIHJldHVybiAicmdiYSgiICsgW3JvdW5kKHIpLCByb3VuZChn KSwgcm91bmQoYiksICtvLnRvRml4ZWQoMildICsgIikiOworICAgIH0KKyAg ICByZXR1cm4gIiMiICsgKDE2Nzc3MjE2IHwgYiB8IChnIDw8IDgpIHwgKHIg PDwgMTYpKS50b1N0cmluZygxNikuc2xpY2UoMSk7Cit9KTsKK3ZhciB0b0hl eCA9IGZ1bmN0aW9uIChjb2xvcikgeworICAgIHZhciBpID0gZ2xvYi5kb2Mu Z2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSB8fCBnbG9iLmRvYy5n ZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0sCisgICAgICAgIHJlZCA9 ICJyZ2IoMjU1LCAwLCAwKSI7CisgICAgdG9IZXggPSBjYWNoZXIoZnVuY3Rp b24gKGNvbG9yKSB7CisgICAgICAgIGlmIChjb2xvci50b0xvd2VyQ2FzZSgp ID09ICJyZWQiKSB7CisgICAgICAgICAgICByZXR1cm4gcmVkOworICAgICAg ICB9CisgICAgICAgIGkuc3R5bGUuY29sb3IgPSByZWQ7CisgICAgICAgIGku c3R5bGUuY29sb3IgPSBjb2xvcjsKKyAgICAgICAgdmFyIG91dCA9IGdsb2Iu ZG9jLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaSwgRSkuZ2V0UHJv cGVydHlWYWx1ZSgiY29sb3IiKTsKKyAgICAgICAgcmV0dXJuIG91dCA9PSBy ZWQgPyBudWxsIDogb3V0OworICAgIH0pOworICAgIHJldHVybiB0b0hleChj b2xvcik7Cit9LAoraHNidG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAg cmV0dXJuICJoc2IoIiArIFt0aGlzLmgsIHRoaXMucywgdGhpcy5iXSArICIp IjsKK30sCitoc2x0b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1 cm4gImhzbCgiICsgW3RoaXMuaCwgdGhpcy5zLCB0aGlzLmxdICsgIikiOwor fSwKK3JnYnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0 aGlzLm9wYWNpdHkgPT0gMSB8fCB0aGlzLm9wYWNpdHkgPT0gbnVsbCA/Cisg ICAgICAgICAgICB0aGlzLmhleCA6CisgICAgICAgICAgICAicmdiYSgiICsg W3RoaXMuciwgdGhpcy5nLCB0aGlzLmIsIHRoaXMub3BhY2l0eV0gKyAiKSI7 Cit9LAorcHJlcGFyZVJHQiA9IGZ1bmN0aW9uIChyLCBnLCBiKSB7CisgICAg aWYgKGcgPT0gbnVsbCAmJiBpcyhyLCAib2JqZWN0IikgJiYgInIiIGluIHIg JiYgImciIGluIHIgJiYgImIiIGluIHIpIHsKKyAgICAgICAgYiA9IHIuYjsK KyAgICAgICAgZyA9IHIuZzsKKyAgICAgICAgciA9IHIucjsKKyAgICB9Cisg ICAgaWYgKGcgPT0gbnVsbCAmJiBpcyhyLCBzdHJpbmcpKSB7CisgICAgICAg IHZhciBjbHIgPSBTbmFwLmdldFJHQihyKTsKKyAgICAgICAgciA9IGNsci5y OworICAgICAgICBnID0gY2xyLmc7CisgICAgICAgIGIgPSBjbHIuYjsKKyAg ICB9CisgICAgaWYgKHIgPiAxIHx8IGcgPiAxIHx8IGIgPiAxKSB7CisgICAg ICAgIHIgLz0gMjU1OworICAgICAgICBnIC89IDI1NTsKKyAgICAgICAgYiAv PSAyNTU7CisgICAgfQorCisgICAgcmV0dXJuIFtyLCBnLCBiXTsKK30sCitw YWNrYWdlUkdCID0gZnVuY3Rpb24gKHIsIGcsIGIsIG8pIHsKKyAgICByID0g bWF0aC5yb3VuZChyICogMjU1KTsKKyAgICBnID0gbWF0aC5yb3VuZChnICog MjU1KTsKKyAgICBiID0gbWF0aC5yb3VuZChiICogMjU1KTsKKyAgICB2YXIg cmdiID0geworICAgICAgICByOiByLAorICAgICAgICBnOiBnLAorICAgICAg ICBiOiBiLAorICAgICAgICBvcGFjaXR5OiBpcyhvLCAiZmluaXRlIikgPyBv IDogMSwKKyAgICAgICAgaGV4OiBTbmFwLnJnYihyLCBnLCBiKSwKKyAgICAg ICAgdG9TdHJpbmc6IHJnYnRvU3RyaW5nCisgICAgfTsKKyAgICBpcyhvLCAi ZmluaXRlIikgJiYgKHJnYi5vcGFjaXR5ID0gbyk7CisgICAgcmV0dXJuIHJn YjsKK307CisvKlwKKyAqIFNuYXAuY29sb3IKKyBbIG1ldGhvZCBdCisgKioK KyAqIFBhcnNlcyB0aGUgY29sb3Igc3RyaW5nIGFuZCByZXR1cm5zIGFuIG9i amVjdCBmZWF0dXJpbmcgdGhlIGNvbG9yJ3MgY29tcG9uZW50IHZhbHVlcwor IC0gY2xyIChzdHJpbmcpIGNvbG9yIHN0cmluZyBpbiBvbmUgb2YgdGhlIHN1 cHBvcnRlZCBmb3JtYXRzIChzZWUgQFNuYXAuZ2V0UkdCKQorID0gKG9iamVj dCkgQ29tYmluZWQgUkdCL0hTQiBvYmplY3QgaW4gdGhlIGZvbGxvd2luZyBm b3JtYXQ6CisgbyB7CisgbyAgICAgciAobnVtYmVyKSByZWQsCisgbyAgICAg ZyAobnVtYmVyKSBncmVlbiwKKyBvICAgICBiIChudW1iZXIpIGJsdWUsCisg byAgICAgaGV4IChzdHJpbmcpIGNvbG9yIGluIEhUTUwvQ1NTIGZvcm1hdDog I+KAouKAouKAouKAouKAouKAoiwKKyBvICAgICBlcnJvciAoYm9vbGVhbikg YHRydWVgIGlmIHN0cmluZyBjYW4ndCBiZSBwYXJzZWQsCisgbyAgICAgaCAo bnVtYmVyKSBodWUsCisgbyAgICAgcyAobnVtYmVyKSBzYXR1cmF0aW9uLAor IG8gICAgIHYgKG51bWJlcikgdmFsdWUgKGJyaWdodG5lc3MpLAorIG8gICAg IGwgKG51bWJlcikgbGlnaHRuZXNzCisgbyB9CitcKi8KK1NuYXAuY29sb3Ig PSBmdW5jdGlvbiAoY2xyKSB7CisgICAgdmFyIHJnYjsKKyAgICBpZiAoaXMo Y2xyLCAib2JqZWN0IikgJiYgImgiIGluIGNsciAmJiAicyIgaW4gY2xyICYm ICJiIiBpbiBjbHIpIHsKKyAgICAgICAgcmdiID0gU25hcC5oc2IycmdiKGNs cik7CisgICAgICAgIGNsci5yID0gcmdiLnI7CisgICAgICAgIGNsci5nID0g cmdiLmc7CisgICAgICAgIGNsci5iID0gcmdiLmI7CisgICAgICAgIGNsci5v cGFjaXR5ID0gMTsKKyAgICAgICAgY2xyLmhleCA9IHJnYi5oZXg7CisgICAg fSBlbHNlIGlmIChpcyhjbHIsICJvYmplY3QiKSAmJiAiaCIgaW4gY2xyICYm ICJzIiBpbiBjbHIgJiYgImwiIGluIGNscikgeworICAgICAgICByZ2IgPSBT bmFwLmhzbDJyZ2IoY2xyKTsKKyAgICAgICAgY2xyLnIgPSByZ2IucjsKKyAg ICAgICAgY2xyLmcgPSByZ2IuZzsKKyAgICAgICAgY2xyLmIgPSByZ2IuYjsK KyAgICAgICAgY2xyLm9wYWNpdHkgPSAxOworICAgICAgICBjbHIuaGV4ID0g cmdiLmhleDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoaXMoY2xyLCAi c3RyaW5nIikpIHsKKyAgICAgICAgICAgIGNsciA9IFNuYXAuZ2V0UkdCKGNs cik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzKGNsciwgIm9iamVjdCIp ICYmICJyIiBpbiBjbHIgJiYgImciIGluIGNsciAmJiAiYiIgaW4gY2xyICYm ICEoImVycm9yIiBpbiBjbHIpKSB7CisgICAgICAgICAgICByZ2IgPSBTbmFw LnJnYjJoc2woY2xyKTsKKyAgICAgICAgICAgIGNsci5oID0gcmdiLmg7Cisg ICAgICAgICAgICBjbHIucyA9IHJnYi5zOworICAgICAgICAgICAgY2xyLmwg PSByZ2IubDsKKyAgICAgICAgICAgIHJnYiA9IFNuYXAucmdiMmhzYihjbHIp OworICAgICAgICAgICAgY2xyLnYgPSByZ2IuYjsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIGNsciA9IHtoZXg6ICJub25lIn07CisgICAgICAg ICAgICBjbHIuciA9IGNsci5nID0gY2xyLmIgPSBjbHIuaCA9IGNsci5zID0g Y2xyLnYgPSBjbHIubCA9IC0xOworICAgICAgICAgICAgY2xyLmVycm9yID0g MTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbHIudG9TdHJpbmcgPSByZ2J0 b1N0cmluZzsKKyAgICByZXR1cm4gY2xyOworfTsKKy8qXAorICogU25hcC5o c2IycmdiCisgWyBtZXRob2QgXQorICoqCisgKiBDb252ZXJ0cyBIU0IgdmFs dWVzIHRvIGFuIFJHQiBvYmplY3QKKyAtIGggKG51bWJlcikgaHVlCisgLSBz IChudW1iZXIpIHNhdHVyYXRpb24KKyAtIHYgKG51bWJlcikgdmFsdWUgb3Ig YnJpZ2h0bmVzcworID0gKG9iamVjdCkgUkdCIG9iamVjdCBpbiB0aGUgZm9s bG93aW5nIGZvcm1hdDoKKyBvIHsKKyBvICAgICByIChudW1iZXIpIHJlZCwK KyBvICAgICBnIChudW1iZXIpIGdyZWVuLAorIG8gICAgIGIgKG51bWJlcikg Ymx1ZSwKKyBvICAgICBoZXggKHN0cmluZykgY29sb3IgaW4gSFRNTC9DU1Mg Zm9ybWF0OiAj4oCi4oCi4oCi4oCi4oCi4oCiCisgbyB9CitcKi8KK1NuYXAu aHNiMnJnYiA9IGZ1bmN0aW9uIChoLCBzLCB2LCBvKSB7CisgICAgaWYgKGlz KGgsICJvYmplY3QiKSAmJiAiaCIgaW4gaCAmJiAicyIgaW4gaCAmJiAiYiIg aW4gaCkgeworICAgICAgICB2ID0gaC5iOworICAgICAgICBzID0gaC5zOwor ICAgICAgICBvID0gaC5vOworICAgICAgICBoID0gaC5oOworICAgIH0KKyAg ICBoICo9IDM2MDsKKyAgICB2YXIgUiwgRywgQiwgWCwgQzsKKyAgICBoID0g KGggJSAzNjApIC8gNjA7CisgICAgQyA9IHYgKiBzOworICAgIFggPSBDICog KDEgLSBhYnMoaCAlIDIgLSAxKSk7CisgICAgUiA9IEcgPSBCID0gdiAtIEM7 CisKKyAgICBoID0gfn5oOworICAgIFIgKz0gW0MsIFgsIDAsIDAsIFgsIENd W2hdOworICAgIEcgKz0gW1gsIEMsIEMsIFgsIDAsIDBdW2hdOworICAgIEIg Kz0gWzAsIDAsIFgsIEMsIEMsIFhdW2hdOworICAgIHJldHVybiBwYWNrYWdl UkdCKFIsIEcsIEIsIG8pOworfTsKKy8qXAorICogU25hcC5oc2wycmdiCisg WyBtZXRob2QgXQorICoqCisgKiBDb252ZXJ0cyBIU0wgdmFsdWVzIHRvIGFu IFJHQiBvYmplY3QKKyAtIGggKG51bWJlcikgaHVlCisgLSBzIChudW1iZXIp IHNhdHVyYXRpb24KKyAtIGwgKG51bWJlcikgbHVtaW5vc2l0eQorID0gKG9i amVjdCkgUkdCIG9iamVjdCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyBv IHsKKyBvICAgICByIChudW1iZXIpIHJlZCwKKyBvICAgICBnIChudW1iZXIp IGdyZWVuLAorIG8gICAgIGIgKG51bWJlcikgYmx1ZSwKKyBvICAgICBoZXgg KHN0cmluZykgY29sb3IgaW4gSFRNTC9DU1MgZm9ybWF0OiAj4oCi4oCi4oCi 4oCi4oCi4oCiCisgbyB9CitcKi8KK1NuYXAuaHNsMnJnYiA9IGZ1bmN0aW9u IChoLCBzLCBsLCBvKSB7CisgICAgaWYgKGlzKGgsICJvYmplY3QiKSAmJiAi aCIgaW4gaCAmJiAicyIgaW4gaCAmJiAibCIgaW4gaCkgeworICAgICAgICBs ID0gaC5sOworICAgICAgICBzID0gaC5zOworICAgICAgICBoID0gaC5oOwor ICAgIH0KKyAgICBpZiAoaCA+IDEgfHwgcyA+IDEgfHwgbCA+IDEpIHsKKyAg ICAgICAgaCAvPSAzNjA7CisgICAgICAgIHMgLz0gMTAwOworICAgICAgICBs IC89IDEwMDsKKyAgICB9CisgICAgaCAqPSAzNjA7CisgICAgdmFyIFIsIEcs IEIsIFgsIEM7CisgICAgaCA9IChoICUgMzYwKSAvIDYwOworICAgIEMgPSAy ICogcyAqIChsIDwgLjUgPyBsIDogMSAtIGwpOworICAgIFggPSBDICogKDEg LSBhYnMoaCAlIDIgLSAxKSk7CisgICAgUiA9IEcgPSBCID0gbCAtIEMgLyAy OworCisgICAgaCA9IH5+aDsKKyAgICBSICs9IFtDLCBYLCAwLCAwLCBYLCBD XVtoXTsKKyAgICBHICs9IFtYLCBDLCBDLCBYLCAwLCAwXVtoXTsKKyAgICBC ICs9IFswLCAwLCBYLCBDLCBDLCBYXVtoXTsKKyAgICByZXR1cm4gcGFja2Fn ZVJHQihSLCBHLCBCLCBvKTsKK307CisvKlwKKyAqIFNuYXAucmdiMmhzYgor IFsgbWV0aG9kIF0KKyAqKgorICogQ29udmVydHMgUkdCIHZhbHVlcyB0byBh biBIU0Igb2JqZWN0CisgLSByIChudW1iZXIpIHJlZAorIC0gZyAobnVtYmVy KSBncmVlbgorIC0gYiAobnVtYmVyKSBibHVlCisgPSAob2JqZWN0KSBIU0Ig b2JqZWN0IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIG8geworIG8gICAg IGggKG51bWJlcikgaHVlLAorIG8gICAgIHMgKG51bWJlcikgc2F0dXJhdGlv biwKKyBvICAgICBiIChudW1iZXIpIGJyaWdodG5lc3MKKyBvIH0KK1wqLwor U25hcC5yZ2IyaHNiID0gZnVuY3Rpb24gKHIsIGcsIGIpIHsKKyAgICBiID0g cHJlcGFyZVJHQihyLCBnLCBiKTsKKyAgICByID0gYlswXTsKKyAgICBnID0g YlsxXTsKKyAgICBiID0gYlsyXTsKKworICAgIHZhciBILCBTLCBWLCBDOwor ICAgIFYgPSBtbWF4KHIsIGcsIGIpOworICAgIEMgPSBWIC0gbW1pbihyLCBn LCBiKTsKKyAgICBIID0gKEMgPT0gMCA/IG51bGwgOgorICAgICAgICAgViA9 PSByID8gKGcgLSBiKSAvIEMgOgorICAgICAgICAgViA9PSBnID8gKGIgLSBy KSAvIEMgKyAyIDoKKyAgICAgICAgICAgICAgICAgIChyIC0gZykgLyBDICsg NAorICAgICAgICApOworICAgIEggPSAoKEggKyAzNjApICUgNikgKiA2MCAv IDM2MDsKKyAgICBTID0gQyA9PSAwID8gMCA6IEMgLyBWOworICAgIHJldHVy biB7aDogSCwgczogUywgYjogViwgdG9TdHJpbmc6IGhzYnRvU3RyaW5nfTsK K307CisvKlwKKyAqIFNuYXAucmdiMmhzbAorIFsgbWV0aG9kIF0KKyAqKgor ICogQ29udmVydHMgUkdCIHZhbHVlcyB0byBhbiBIU0wgb2JqZWN0CisgLSBy IChudW1iZXIpIHJlZAorIC0gZyAobnVtYmVyKSBncmVlbgorIC0gYiAobnVt YmVyKSBibHVlCisgPSAob2JqZWN0KSBIU0wgb2JqZWN0IGluIHRoZSBmb2xs b3dpbmcgZm9ybWF0OgorIG8geworIG8gICAgIGggKG51bWJlcikgaHVlLAor IG8gICAgIHMgKG51bWJlcikgc2F0dXJhdGlvbiwKKyBvICAgICBsIChudW1i ZXIpIGx1bWlub3NpdHkKKyBvIH0KK1wqLworU25hcC5yZ2IyaHNsID0gZnVu Y3Rpb24gKHIsIGcsIGIpIHsKKyAgICBiID0gcHJlcGFyZVJHQihyLCBnLCBi KTsKKyAgICByID0gYlswXTsKKyAgICBnID0gYlsxXTsKKyAgICBiID0gYlsy XTsKKworICAgIHZhciBILCBTLCBMLCBNLCBtLCBDOworICAgIE0gPSBtbWF4 KHIsIGcsIGIpOworICAgIG0gPSBtbWluKHIsIGcsIGIpOworICAgIEMgPSBN IC0gbTsKKyAgICBIID0gKEMgPT0gMCA/IG51bGwgOgorICAgICAgICAgTSA9 PSByID8gKGcgLSBiKSAvIEMgOgorICAgICAgICAgTSA9PSBnID8gKGIgLSBy KSAvIEMgKyAyIDoKKyAgICAgICAgICAgICAgICAgIChyIC0gZykgLyBDICsg NCk7CisgICAgSCA9ICgoSCArIDM2MCkgJSA2KSAqIDYwIC8gMzYwOworICAg IEwgPSAoTSArIG0pIC8gMjsKKyAgICBTID0gKEMgPT0gMCA/IDAgOgorICAg ICAgICAgTCA8IC41ID8gQyAvICgyICogTCkgOgorICAgICAgICAgICAgICAg ICAgQyAvICgyIC0gMiAqIEwpKTsKKyAgICByZXR1cm4ge2g6IEgsIHM6IFMs IGw6IEwsIHRvU3RyaW5nOiBoc2x0b1N0cmluZ307Cit9OworCisvLyBUcmFu c2Zvcm1hdGlvbnMKKy8qXAorICogU25hcC5wYXJzZVBhdGhTdHJpbmcKKyBb IG1ldGhvZCBdCisgKioKKyAqIFV0aWxpdHkgbWV0aG9kCisgKioKKyAqIFBh cnNlcyBnaXZlbiBwYXRoIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIGFycmF5 cyBvZiBwYXRoIHNlZ21lbnRzCisgLSBwYXRoU3RyaW5nIChzdHJpbmd8YXJy YXkpIHBhdGggc3RyaW5nIG9yIGFycmF5IG9mIHNlZ21lbnRzIChpbiB0aGUg bGFzdCBjYXNlIGl0IGlzIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkpCisgPSAo YXJyYXkpIGFycmF5IG9mIHNlZ21lbnRzCitcKi8KK1NuYXAucGFyc2VQYXRo U3RyaW5nID0gZnVuY3Rpb24gKHBhdGhTdHJpbmcpIHsKKyAgICBpZiAoIXBh dGhTdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAg IHZhciBwdGggPSBTbmFwLnBhdGgocGF0aFN0cmluZyk7CisgICAgaWYgKHB0 aC5hcnIpIHsKKyAgICAgICAgcmV0dXJuIFNuYXAucGF0aC5jbG9uZShwdGgu YXJyKTsKKyAgICB9CisKKyAgICB2YXIgcGFyYW1Db3VudHMgPSB7YTogNywg YzogNiwgbzogMiwgaDogMSwgbDogMiwgbTogMiwgcjogNCwgcTogNCwgczog NCwgdDogMiwgdjogMSwgdTogMywgejogMH0sCisgICAgICAgIGRhdGEgPSBb XTsKKyAgICBpZiAoaXMocGF0aFN0cmluZywgImFycmF5IikgJiYgaXMocGF0 aFN0cmluZ1swXSwgImFycmF5IikpIHsgLy8gcm91Z2ggYXNzdW1wdGlvbgor ICAgICAgICBkYXRhID0gU25hcC5wYXRoLmNsb25lKHBhdGhTdHJpbmcpOwor ICAgIH0KKyAgICBpZiAoIWRhdGEubGVuZ3RoKSB7CisgICAgICAgIFN0cihw YXRoU3RyaW5nKS5yZXBsYWNlKHBhdGhDb21tYW5kLCBmdW5jdGlvbiAoYSwg YiwgYykgeworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdLAorICAgICAg ICAgICAgICAgIG5hbWUgPSBiLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAg ICBjLnJlcGxhY2UocGF0aFZhbHVlcywgZnVuY3Rpb24gKGEsIGIpIHsKKyAg ICAgICAgICAgICAgICBiICYmIHBhcmFtcy5wdXNoKCtiKTsKKyAgICAgICAg ICAgIH0pOworICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm0iICYmIHBhcmFt cy5sZW5ndGggPiAyKSB7CisgICAgICAgICAgICAgICAgZGF0YS5wdXNoKFti XS5jb25jYXQocGFyYW1zLnNwbGljZSgwLCAyKSkpOworICAgICAgICAgICAg ICAgIG5hbWUgPSAibCI7CisgICAgICAgICAgICAgICAgYiA9IGIgPT0gIm0i ID8gImwiIDogIkwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KG5hbWUgPT0gIm8iICYmIHBhcmFtcy5sZW5ndGggPT0gMSkgeworICAgICAg ICAgICAgICAgIGRhdGEucHVzaChbYiwgcGFyYW1zWzBdXSk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAobmFtZSA9PSAiciIpIHsKKyAgICAg ICAgICAgICAgICBkYXRhLnB1c2goW2JdLmNvbmNhdChwYXJhbXMpKTsKKyAg ICAgICAgICAgIH0gZWxzZSB3aGlsZSAocGFyYW1zLmxlbmd0aCA+PSBwYXJh bUNvdW50c1tuYW1lXSkgeworICAgICAgICAgICAgICAgIGRhdGEucHVzaChb Yl0uY29uY2F0KHBhcmFtcy5zcGxpY2UoMCwgcGFyYW1Db3VudHNbbmFtZV0p KSk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJhbUNvdW50c1tuYW1lXSkg eworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICBk YXRhLnRvU3RyaW5nID0gU25hcC5wYXRoLnRvU3RyaW5nOworICAgIHB0aC5h cnIgPSBTbmFwLnBhdGguY2xvbmUoZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7 Cit9OworLypcCisgKiBTbmFwLnBhcnNlVHJhbnNmb3JtU3RyaW5nCisgWyBt ZXRob2QgXQorICoqCisgKiBVdGlsaXR5IG1ldGhvZAorICoqCisgKiBQYXJz ZXMgZ2l2ZW4gdHJhbnNmb3JtIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHRy YW5zZm9ybWF0aW9ucworIC0gVFN0cmluZyAoc3RyaW5nfGFycmF5KSB0cmFu c2Zvcm0gc3RyaW5nIG9yIGFycmF5IG9mIHRyYW5zZm9ybWF0aW9ucyAoaW4g dGhlIGxhc3QgY2FzZSBpdCBpcyByZXR1cm5lZCBzdHJhaWdodCBhd2F5KQor ID0gKGFycmF5KSBhcnJheSBvZiB0cmFuc2Zvcm1hdGlvbnMKK1wqLwordmFy IHBhcnNlVHJhbnNmb3JtU3RyaW5nID0gU25hcC5wYXJzZVRyYW5zZm9ybVN0 cmluZyA9IGZ1bmN0aW9uIChUU3RyaW5nKSB7CisgICAgaWYgKCFUU3RyaW5n KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2YXIgcGFy YW1Db3VudHMgPSB7cjogMywgczogNCwgdDogMiwgbTogNn0sCisgICAgICAg IGRhdGEgPSBbXTsKKyAgICBpZiAoaXMoVFN0cmluZywgImFycmF5IikgJiYg aXMoVFN0cmluZ1swXSwgImFycmF5IikpIHsgLy8gcm91Z2ggYXNzdW1wdGlv bgorICAgICAgICBkYXRhID0gU25hcC5wYXRoLmNsb25lKFRTdHJpbmcpOwor ICAgIH0KKyAgICBpZiAoIWRhdGEubGVuZ3RoKSB7CisgICAgICAgIFN0cihU U3RyaW5nKS5yZXBsYWNlKHRDb21tYW5kLCBmdW5jdGlvbiAoYSwgYiwgYykg eworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdLAorICAgICAgICAgICAg ICAgIG5hbWUgPSBiLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICBjLnJl cGxhY2UocGF0aFZhbHVlcywgZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAg ICAgICAgICBiICYmIHBhcmFtcy5wdXNoKCtiKTsKKyAgICAgICAgICAgIH0p OworICAgICAgICAgICAgZGF0YS5wdXNoKFtiXS5jb25jYXQocGFyYW1zKSk7 CisgICAgICAgIH0pOworICAgIH0KKyAgICBkYXRhLnRvU3RyaW5nID0gU25h cC5wYXRoLnRvU3RyaW5nOworICAgIHJldHVybiBkYXRhOworfTsKK2Z1bmN0 aW9uIHN2Z1RyYW5zZm9ybTJzdHJpbmcodHN0cikgeworICAgIHZhciByZXMg PSBbXTsKKyAgICB0c3RyID0gdHN0ci5yZXBsYWNlKC8oPzpefFxzKShcdysp XCgoW14pXSspXCkvZywgZnVuY3Rpb24gKGFsbCwgbmFtZSwgcGFyYW1zKSB7 CisgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zcGxpdCgvXHMqLFxzKnxccysv KTsKKyAgICAgICAgaWYgKG5hbWUgPT0gInJvdGF0ZSIgJiYgcGFyYW1zLmxl bmd0aCA9PSAxKSB7CisgICAgICAgICAgICBwYXJhbXMucHVzaCgwLCAwKTsK KyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSA9PSAic2NhbGUiKSB7Cisg ICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDIpIHsKKyAgICAgICAg ICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2xpY2UoMCwgMik7CisgICAgICAg ICAgICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT0gMikgeworICAgICAg ICAgICAgICAgIHBhcmFtcy5wdXNoKDAsIDApOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT0gMSkgeworICAgICAg ICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtc1swXSwgMCwgMCk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWUgPT0gInNr ZXdYIikgeworICAgICAgICAgICAgcmVzLnB1c2goWyJtIiwgMSwgMCwgbWF0 aC50YW4ocmFkKHBhcmFtc1swXSkpLCAxLCAwLCAwXSk7CisgICAgICAgIH0g ZWxzZSBpZiAobmFtZSA9PSAic2tld1kiKSB7CisgICAgICAgICAgICByZXMu cHVzaChbIm0iLCAxLCBtYXRoLnRhbihyYWQocGFyYW1zWzBdKSksIDAsIDEs IDAsIDBdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcy5w dXNoKFtuYW1lLmNoYXJBdCgwKV0uY29uY2F0KHBhcmFtcykpOworICAgICAg ICB9CisgICAgICAgIHJldHVybiBhbGw7CisgICAgfSk7CisgICAgcmV0dXJu IHJlczsKK30KK1NuYXAuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nID0gc3ZnVHJh bnNmb3JtMnN0cmluZzsKK1NuYXAuXy5yZ1RyYW5zZm9ybSA9IC9eW2Etel1b XHNdKi0/XC4/XGQvaTsKK2Z1bmN0aW9uIHRyYW5zZm9ybTJtYXRyaXgodHN0 ciwgYmJveCkgeworICAgIHZhciB0ZGF0YSA9IHBhcnNlVHJhbnNmb3JtU3Ry aW5nKHRzdHIpLAorICAgICAgICBtID0gbmV3IFNuYXAuTWF0cml4OworICAg IGlmICh0ZGF0YSkgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0 ZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICB2YXIg dCA9IHRkYXRhW2ldLAorICAgICAgICAgICAgICAgIHRsZW4gPSB0Lmxlbmd0 aCwKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gU3RyKHRbMF0pLnRvTG93 ZXJDYXNlKCksCisgICAgICAgICAgICAgICAgYWJzb2x1dGUgPSB0WzBdICE9 IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgaW52ZXIgPSBhYnNvbHV0ZSA/ IG0uaW52ZXJ0KCkgOiAwLAorICAgICAgICAgICAgICAgIHgxLAorICAgICAg ICAgICAgICAgIHkxLAorICAgICAgICAgICAgICAgIHgyLAorICAgICAgICAg ICAgICAgIHkyLAorICAgICAgICAgICAgICAgIGJiOworICAgICAgICAgICAg aWYgKGNvbW1hbmQgPT0gInQiICYmIHRsZW4gPT0gMil7CisgICAgICAgICAg ICAgICAgbS50cmFuc2xhdGUodFsxXSwgMCk7CisgICAgICAgICAgICB9IGVs c2UgaWYgKGNvbW1hbmQgPT0gInQiICYmIHRsZW4gPT0gMykgeworICAgICAg ICAgICAgICAgIGlmIChhYnNvbHV0ZSkgeworICAgICAgICAgICAgICAgICAg ICB4MSA9IGludmVyLngoMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIHkx ID0gaW52ZXIueSgwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgeDIgPSBp bnZlci54KHRbMV0sIHRbMl0pOworICAgICAgICAgICAgICAgICAgICB5MiA9 IGludmVyLnkodFsxXSwgdFsyXSk7CisgICAgICAgICAgICAgICAgICAgIG0u dHJhbnNsYXRlKHgyIC0geDEsIHkyIC0geTEpOworICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG0udHJhbnNsYXRlKHRb MV0sIHRbMl0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g ZWxzZSBpZiAoY29tbWFuZCA9PSAiciIpIHsKKyAgICAgICAgICAgICAgICBp ZiAodGxlbiA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIGJiID0gYmIg fHwgYmJveDsKKyAgICAgICAgICAgICAgICAgICAgbS5yb3RhdGUodFsxXSwg YmIueCArIGJiLndpZHRoIC8gMiwgYmIueSArIGJiLmhlaWdodCAvIDIpOwor ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGxlbiA9PSA0KSB7CisgICAg ICAgICAgICAgICAgICAgIGlmIChhYnNvbHV0ZSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgeDIgPSBpbnZlci54KHRbMl0sIHRbM10pOworICAgICAg ICAgICAgICAgICAgICAgICAgeTIgPSBpbnZlci55KHRbMl0sIHRbM10pOwor ICAgICAgICAgICAgICAgICAgICAgICAgbS5yb3RhdGUodFsxXSwgeDIsIHky KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIG0ucm90YXRlKHRbMV0sIHRbMl0sIHRbM10pOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09ICJzIikgeworICAgICAgICAg ICAgICAgIGlmICh0bGVuID09IDIgfHwgdGxlbiA9PSAzKSB7CisgICAgICAg ICAgICAgICAgICAgIGJiID0gYmIgfHwgYmJveDsKKyAgICAgICAgICAgICAg ICAgICAgbS5zY2FsZSh0WzFdLCB0W3RsZW4gLSAxXSwgYmIueCArIGJiLndp ZHRoIC8gMiwgYmIueSArIGJiLmhlaWdodCAvIDIpOworICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAodGxlbiA9PSA0KSB7CisgICAgICAgICAgICAgICAg ICAgIGlmIChhYnNvbHV0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg eDIgPSBpbnZlci54KHRbMl0sIHRbM10pOworICAgICAgICAgICAgICAgICAg ICAgICAgeTIgPSBpbnZlci55KHRbMl0sIHRbM10pOworICAgICAgICAgICAg ICAgICAgICAgICAgbS5zY2FsZSh0WzFdLCB0WzFdLCB4MiwgeTIpOworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICAgICAgbS5zY2FsZSh0WzFdLCB0WzFdLCB0WzJdLCB0WzNdKTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo dGxlbiA9PSA1KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhYnNvbHV0 ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSBpbnZlci54KHRb M10sIHRbNF0pOworICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSBpbnZl ci55KHRbM10sIHRbNF0pOworICAgICAgICAgICAgICAgICAgICAgICAgbS5z Y2FsZSh0WzFdLCB0WzJdLCB4MiwgeTIpOworICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbS5zY2FsZSh0 WzFdLCB0WzJdLCB0WzNdLCB0WzRdKTsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo Y29tbWFuZCA9PSAibSIgJiYgdGxlbiA9PSA3KSB7CisgICAgICAgICAgICAg ICAgbS5hZGQodFsxXSwgdFsyXSwgdFszXSwgdFs0XSwgdFs1XSwgdFs2XSk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu IG07Cit9CitTbmFwLl8udHJhbnNmb3JtMm1hdHJpeCA9IHRyYW5zZm9ybTJt YXRyaXg7CitTbmFwLl91bml0MnB4ID0gdW5pdDJweDsKK3ZhciBjb250YWlu cyA9IGdsb2IuZG9jLmNvbnRhaW5zIHx8IGdsb2IuZG9jLmNvbXBhcmVEb2N1 bWVudFBvc2l0aW9uID8KKyAgICBmdW5jdGlvbiAoYSwgYikgeworICAgICAg ICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09IDkgPyBhLmRvY3VtZW50RWxl bWVudCA6IGEsCisgICAgICAgICAgICBidXAgPSBiICYmIGIucGFyZW50Tm9k ZTsKKyAgICAgICAgICAgIHJldHVybiBhID09IGJ1cCB8fCAhIShidXAgJiYg YnVwLm5vZGVUeXBlID09IDEgJiYgKAorICAgICAgICAgICAgICAgIGFkb3du LmNvbnRhaW5zID8KKyAgICAgICAgICAgICAgICAgICAgYWRvd24uY29udGFp bnMoYnVwKSA6CisgICAgICAgICAgICAgICAgICAgIGEuY29tcGFyZURvY3Vt ZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihidXAp ICYgMTYKKyAgICAgICAgICAgICkpOworICAgIH0gOgorICAgIGZ1bmN0aW9u IChhLCBiKSB7CisgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICB3aGls ZSAoYikgeworICAgICAgICAgICAgICAgIGIgPSBiLnBhcmVudE5vZGU7Cisg ICAgICAgICAgICAgICAgaWYgKGIgPT0gYSkgeworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg IH07CitmdW5jdGlvbiBnZXRTb21lRGVmcyhlbCkgeworICAgIHZhciBwID0g KGVsLm5vZGUub3duZXJTVkdFbGVtZW50ICYmIHdyYXAoZWwubm9kZS5vd25l clNWR0VsZW1lbnQpKSB8fAorICAgICAgICAgICAgKGVsLm5vZGUucGFyZW50 Tm9kZSAmJiB3cmFwKGVsLm5vZGUucGFyZW50Tm9kZSkpIHx8CisgICAgICAg ICAgICBTbmFwLnNlbGVjdCgic3ZnIikgfHwKKyAgICAgICAgICAgIFNuYXAo MCwgMCksCisgICAgICAgIHBkZWZzID0gcC5zZWxlY3QoImRlZnMiKSwKKyAg ICAgICAgZGVmcyAgPSBwZGVmcyA9PSBudWxsID8gZmFsc2UgOiBwZGVmcy5u b2RlOworICAgIGlmICghZGVmcykgeworICAgICAgICBkZWZzID0gbWFrZSgi ZGVmcyIsIHAubm9kZSkubm9kZTsKKyAgICB9CisgICAgcmV0dXJuIGRlZnM7 Cit9CitmdW5jdGlvbiBnZXRTb21lU1ZHKGVsKSB7CisgICAgcmV0dXJuIGVs Lm5vZGUub3duZXJTVkdFbGVtZW50ICYmIHdyYXAoZWwubm9kZS5vd25lclNW R0VsZW1lbnQpIHx8IFNuYXAuc2VsZWN0KCJzdmciKTsKK30KK1NuYXAuXy5n ZXRTb21lRGVmcyA9IGdldFNvbWVEZWZzOworU25hcC5fLmdldFNvbWVTVkcg PSBnZXRTb21lU1ZHOworZnVuY3Rpb24gdW5pdDJweChlbCwgbmFtZSwgdmFs dWUpIHsKKyAgICB2YXIgc3ZnID0gZ2V0U29tZVNWRyhlbCkubm9kZSwKKyAg ICAgICAgb3V0ID0ge30sCisgICAgICAgIG1nciA9IHN2Zy5xdWVyeVNlbGVj dG9yKCIuc3ZnLS0tbWdyIik7CisgICAgaWYgKCFtZ3IpIHsKKyAgICAgICAg bWdyID0gJCgicmVjdCIpOworICAgICAgICAkKG1nciwge3g6IC05ZTksIHk6 IC05ZTksIHdpZHRoOiAxMCwgaGVpZ2h0OiAxMCwgImNsYXNzIjogInN2Zy0t LW1nciIsIGZpbGw6ICJub25lIn0pOworICAgICAgICBzdmcuYXBwZW5kQ2hp bGQobWdyKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0Vyh2YWwpIHsKKyAg ICAgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4g RTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsID09ICt2YWwpIHsKKyAg ICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgJCht Z3IsIHt3aWR0aDogdmFsfSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg ICByZXR1cm4gbWdyLmdldEJCb3goKS53aWR0aDsKKyAgICAgICAgfSBjYXRj aCAoZSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg ICB9CisgICAgZnVuY3Rpb24gZ2V0SCh2YWwpIHsKKyAgICAgICAgaWYgKHZh bCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gRTsKKyAgICAgICAg fQorICAgICAgICBpZiAodmFsID09ICt2YWwpIHsKKyAgICAgICAgICAgIHJl dHVybiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgJChtZ3IsIHtoZWlnaHQ6 IHZhbH0pOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1n ci5nZXRCQm94KCkuaGVpZ2h0OworICAgICAgICB9IGNhdGNoIChlKSB7Cisg ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBm dW5jdGlvbiBzZXQobmFtLCBmKSB7CisgICAgICAgIGlmIChuYW1lID09IG51 bGwpIHsKKyAgICAgICAgICAgIG91dFtuYW1dID0gZihlbC5hdHRyKG5hbSkg fHwgMCk7CisgICAgICAgIH0gZWxzZSBpZiAobmFtID09IG5hbWUpIHsKKyAg ICAgICAgICAgIG91dCA9IGYodmFsdWUgPT0gbnVsbCA/IGVsLmF0dHIobmFt KSB8fCAwIDogdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIHN3aXRj aCAoZWwudHlwZSkgeworICAgICAgICBjYXNlICJyZWN0IjoKKyAgICAgICAg ICAgIHNldCgicngiLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgicnkiLCBn ZXRIKTsKKyAgICAgICAgY2FzZSAiaW1hZ2UiOgorICAgICAgICAgICAgc2V0 KCJ3aWR0aCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJoZWlnaHQiLCBn ZXRIKTsKKyAgICAgICAgY2FzZSAidGV4dCI6CisgICAgICAgICAgICBzZXQo IngiLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgieSIsIGdldEgpOworICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiY2lyY2xlIjoKKyAgICAgICAg ICAgIHNldCgiY3giLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgiY3kiLCBn ZXRIKTsKKyAgICAgICAgICAgIHNldCgiciIsIGdldFcpOworICAgICAgICBi cmVhazsKKyAgICAgICAgY2FzZSAiZWxsaXBzZSI6CisgICAgICAgICAgICBz ZXQoImN4IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoImN5IiwgZ2V0SCk7 CisgICAgICAgICAgICBzZXQoInJ4IiwgZ2V0Vyk7CisgICAgICAgICAgICBz ZXQoInJ5IiwgZ2V0SCk7CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl ICJsaW5lIjoKKyAgICAgICAgICAgIHNldCgieDEiLCBnZXRXKTsKKyAgICAg ICAgICAgIHNldCgieDIiLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgieTEi LCBnZXRIKTsKKyAgICAgICAgICAgIHNldCgieTIiLCBnZXRIKTsKKyAgICAg ICAgYnJlYWs7CisgICAgICAgIGNhc2UgIm1hcmtlciI6CisgICAgICAgICAg ICBzZXQoInJlZlgiLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgibWFya2Vy V2lkdGgiLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgicmVmWSIsIGdldEgp OworICAgICAgICAgICAgc2V0KCJtYXJrZXJIZWlnaHQiLCBnZXRIKTsKKyAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgInJhZGlhbEdyYWRpZW50IjoK KyAgICAgICAgICAgIHNldCgiZngiLCBnZXRXKTsKKyAgICAgICAgICAgIHNl dCgiZnkiLCBnZXRIKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug InRzcGFuIjoKKyAgICAgICAgICAgIHNldCgiZHgiLCBnZXRXKTsKKyAgICAg ICAgICAgIHNldCgiZHkiLCBnZXRIKTsKKyAgICAgICAgYnJlYWs7CisgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZXQobmFtZSwgZ2V0Vyk7Cisg ICAgfQorICAgIHN2Zy5yZW1vdmVDaGlsZChtZ3IpOworICAgIHJldHVybiBv dXQ7Cit9CisvKlwKKyAqIFNuYXAuc2VsZWN0CisgWyBtZXRob2QgXQorICoq CisgKiBXcmFwcyBhIERPTSBlbGVtZW50IHNwZWNpZmllZCBieSBDU1Mgc2Vs ZWN0b3IgYXMgQEVsZW1lbnQKKyAtIHF1ZXJ5IChzdHJpbmcpIENTUyBzZWxl Y3RvciBvZiB0aGUgZWxlbWVudAorID0gKEVsZW1lbnQpIHRoZSBjdXJyZW50 IGVsZW1lbnQKK1wqLworU25hcC5zZWxlY3QgPSBmdW5jdGlvbiAocXVlcnkp IHsKKyAgICBxdWVyeSA9IFN0cihxdWVyeSkucmVwbGFjZSgvKFteXFxdKTov ZywgIiQxXFw6Iik7CisgICAgcmV0dXJuIHdyYXAoZ2xvYi5kb2MucXVlcnlT ZWxlY3RvcihxdWVyeSkpOworfTsKKy8qXAorICogU25hcC5zZWxlY3RBbGwK KyBbIG1ldGhvZCBdCisgKioKKyAqIFdyYXBzIERPTSBlbGVtZW50cyBzcGVj aWZpZWQgYnkgQ1NTIHNlbGVjdG9yIGFzIHNldCBvciBhcnJheSBvZiBARWxl bWVudAorIC0gcXVlcnkgKHN0cmluZykgQ1NTIHNlbGVjdG9yIG9mIHRoZSBl bGVtZW50CisgPSAoRWxlbWVudCkgdGhlIGN1cnJlbnQgZWxlbWVudAorXCov CitTbmFwLnNlbGVjdEFsbCA9IGZ1bmN0aW9uIChxdWVyeSkgeworICAgIHZh ciBub2RlbGlzdCA9IGdsb2IuZG9jLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkp LAorICAgICAgICBzZXQgPSAoU25hcC5zZXQgfHwgQXJyYXkpKCk7CisgICAg Zm9yICh2YXIgaSA9IDA7IGkgPCBub2RlbGlzdC5sZW5ndGg7IGkrKykgewor ICAgICAgICBzZXQucHVzaCh3cmFwKG5vZGVsaXN0W2ldKSk7CisgICAgfQor ICAgIHJldHVybiBzZXQ7Cit9OworCitmdW5jdGlvbiBhZGQyZ3JvdXAobGlz dCkgeworICAgIGlmICghaXMobGlzdCwgImFycmF5IikpIHsKKyAgICAgICAg bGlzdCA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywg MCk7CisgICAgfQorICAgIHZhciBpID0gMCwKKyAgICAgICAgaiA9IDAsCisg ICAgICAgIG5vZGUgPSB0aGlzLm5vZGU7CisgICAgd2hpbGUgKHRoaXNbaV0p IGRlbGV0ZSB0aGlzW2krK107CisgICAgZm9yIChpID0gMDsgaSA8IGxpc3Qu bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGxpc3RbaV0udHlwZSA9PSAi c2V0IikgeworICAgICAgICAgICAgbGlzdFtpXS5mb3JFYWNoKGZ1bmN0aW9u IChlbCkgeworICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoZWwu bm9kZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQobGlzdFtpXS5ub2RlKTsKKyAg ICAgICAgfQorICAgIH0KKyAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxk Tm9kZXM7CisgICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsg aSsrKSB7CisgICAgICAgIHRoaXNbaisrXSA9IHdyYXAoY2hpbGRyZW5baV0p OworICAgIH0KKyAgICByZXR1cm4gdGhpczsKK30KKy8vIEh1YiBnYXJiYWdl IGNvbGxlY3RvciBldmVyeSAxMHMKK3NldEludGVydmFsKGZ1bmN0aW9uICgp IHsKKyAgICBmb3IgKHZhciBrZXkgaW4gaHViKSBpZiAoaHViW2hhc10oa2V5 KSkgeworICAgICAgICB2YXIgZWwgPSBodWJba2V5XSwKKyAgICAgICAgICAg IG5vZGUgPSBlbC5ub2RlOworICAgICAgICBpZiAoZWwudHlwZSAhPSAic3Zn IiAmJiAhbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgZWwudHlwZSA9PSAic3Zn IiAmJiAoIW5vZGUucGFyZW50Tm9kZSB8fCAib3duZXJTVkdFbGVtZW50IiBp biBub2RlLnBhcmVudE5vZGUgJiYgIW5vZGUub3duZXJTVkdFbGVtZW50KSkg eworICAgICAgICAgICAgZGVsZXRlIGh1YltrZXldOworICAgICAgICB9Cisg ICAgfQorfSwgMWU0KTsKK2Z1bmN0aW9uIEVsZW1lbnQoZWwpIHsKKyAgICBp ZiAoZWwuc25hcCBpbiBodWIpIHsKKyAgICAgICAgcmV0dXJuIGh1YltlbC5z bmFwXTsKKyAgICB9CisgICAgdmFyIHN2ZzsKKyAgICB0cnkgeworICAgICAg ICBzdmcgPSBlbC5vd25lclNWR0VsZW1lbnQ7CisgICAgfSBjYXRjaChlKSB7 fQorICAgIC8qXAorICAgICAqIEVsZW1lbnQubm9kZQorICAgICBbIHByb3Bl cnR5IChvYmplY3QpIF0KKyAgICAgKioKKyAgICAgKiBHaXZlcyB5b3UgYSBy ZWZlcmVuY2UgdG8gdGhlIERPTSBvYmplY3QsIHNvIHlvdSBjYW4gYXNzaWdu IGV2ZW50IGhhbmRsZXJzIG9yIGp1c3QgbWVzcyBhcm91bmQuCisgICAgID4g VXNhZ2UKKyAgICAgfCAvLyBkcmF3IGEgY2lyY2xlIGF0IGNvb3JkaW5hdGUg MTAsMTAgd2l0aCByYWRpdXMgb2YgMTAKKyAgICAgfCB2YXIgYyA9IHBhcGVy LmNpcmNsZSgxMCwgMTAsIDEwKTsKKyAgICAgfCBjLm5vZGUub25jbGljayA9 IGZ1bmN0aW9uICgpIHsKKyAgICAgfCAgICAgYy5hdHRyKCJmaWxsIiwgInJl ZCIpOworICAgICB8IH07CisgICAgXCovCisgICAgdGhpcy5ub2RlID0gZWw7 CisgICAgaWYgKHN2ZykgeworICAgICAgICB0aGlzLnBhcGVyID0gbmV3IFBh cGVyKHN2Zyk7CisgICAgfQorICAgIC8qXAorICAgICAqIEVsZW1lbnQudHlw ZQorICAgICBbIHByb3BlcnR5IChzdHJpbmcpIF0KKyAgICAgKioKKyAgICAg KiBTVkcgdGFnIG5hbWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuCisgICAgXCov CisgICAgdGhpcy50eXBlID0gZWwudGFnTmFtZSB8fCBlbC5ub2RlTmFtZTsK KyAgICB2YXIgaWQgPSB0aGlzLmlkID0gSUQodGhpcyk7CisgICAgdGhpcy5h bmltcyA9IHt9OworICAgIHRoaXMuXyA9IHsKKyAgICAgICAgdHJhbnNmb3Jt OiBbXQorICAgIH07CisgICAgZWwuc25hcCA9IGlkOworICAgIGh1YltpZF0g PSB0aGlzOworICAgIGlmICh0aGlzLnR5cGUgPT0gImciKSB7CisgICAgICAg IHRoaXMuYWRkID0gYWRkMmdyb3VwOworICAgIH0KKyAgICBpZiAodGhpcy50 eXBlIGluIHtnOiAxLCBtYXNrOiAxLCBwYXR0ZXJuOiAxLCBzeW1ib2w6IDF9 KSB7CisgICAgICAgIGZvciAodmFyIG1ldGhvZCBpbiBQYXBlci5wcm90b3R5 cGUpIGlmIChQYXBlci5wcm90b3R5cGVbaGFzXShtZXRob2QpKSB7CisgICAg ICAgICAgICB0aGlzW21ldGhvZF0gPSBQYXBlci5wcm90b3R5cGVbbWV0aG9k XTsKKyAgICAgICAgfQorICAgIH0KK30KKyAgIC8qXAorICAgICAqIEVsZW1l bnQuYXR0cgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogR2V0 cyBvciBzZXRzIGdpdmVuIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnQuCisg ICAgICoqCisgICAgIC0gcGFyYW1zIChvYmplY3QpIGNvbnRhaW5zIGtleS12 YWx1ZSBwYWlycyBvZiBhdHRyaWJ1dGVzIHlvdSB3YW50IHRvIHNldAorICAg ICAqIG9yCisgICAgIC0gcGFyYW0gKHN0cmluZykgbmFtZSBvZiB0aGUgYXR0 cmlidXRlCisgICAgID0gKEVsZW1lbnQpIHRoZSBjdXJyZW50IGVsZW1lbnQK KyAgICAgKiBvcgorICAgICA9IChzdHJpbmcpIHZhbHVlIG9mIGF0dHJpYnV0 ZQorICAgICA+IFVzYWdlCisgICAgIHwgZWwuYXR0cih7CisgICAgIHwgICAg IGZpbGw6ICIjZmMwIiwKKyAgICAgfCAgICAgc3Ryb2tlOiAiIzAwMCIsCisg ICAgIHwgICAgIHN0cm9rZVdpZHRoOiAyLCAvLyBDYW1lbENhc2UuLi4KKyAg ICAgfCAgICAgImZpbGwtb3BhY2l0eSI6IDAuNSwgLy8gb3IgZGFzaC1zZXBh cmF0ZWQgbmFtZXMKKyAgICAgfCAgICAgd2lkdGg6ICIqPTIiIC8vIHByZWZp eGVkIHZhbHVlcworICAgICB8IH0pOworICAgICB8IGNvbnNvbGUubG9nKGVs LmF0dHIoImZpbGwiKSk7IC8vICNmYzAKKyAgICAgKiBQcmVmaXhlZCB2YWx1 ZXMgaW4gZm9ybWF0IGAiKz0xMCJgIHN1cHBvcnRlZC4gQWxsIGZvdXIgb3Bl cmF0aW9ucworICAgICAqIChgK2AsIGAtYCwgYCpgIGFuZCBgL2ApIGNvdWxk IGJlIHVzZWQuIE9wdGlvbmFsbHkgeW91IGNhbiB1c2UgdW5pdHMgZm9yIGAr YAorICAgICAqIGFuZCBgLWA6IGAiKz0yZW0iYC4KKyAgICBcKi8KKyAgICBF bGVtZW50LnByb3RvdHlwZS5hdHRyID0gZnVuY3Rpb24gKHBhcmFtcywgdmFs dWUpIHsKKyAgICAgICAgdmFyIGVsID0gdGhpcywKKyAgICAgICAgICAgIG5v ZGUgPSBlbC5ub2RlOworICAgICAgICBpZiAoIXBhcmFtcykgeworICAgICAg ICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgeworICAgICAgICAgICAg ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6IG5vZGUu bm9kZVZhbHVlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHZhciBhdHRyID0gbm9kZS5hdHRyaWJ1dGVzLAorICAg ICAgICAgICAgICAgIG91dCA9IHt9OworICAgICAgICAgICAgZm9yICh2YXIg aSA9IDAsIGlpID0gYXR0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAg ICAgICAgICAgICAgb3V0W2F0dHJbaV0ubm9kZU5hbWVdID0gYXR0cltpXS5u b2RlVmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g b3V0OworICAgICAgICB9CisgICAgICAgIGlmIChpcyhwYXJhbXMsICJzdHJp bmciKSkgeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAx KSB7CisgICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7fTsKKyAgICAgICAg ICAgICAgICBqc29uW3BhcmFtc10gPSB2YWx1ZTsKKyAgICAgICAgICAgICAg ICBwYXJhbXMgPSBqc29uOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICByZXR1cm4gZXZlKCJzbmFwLnV0aWwuZ2V0YXR0ci4iICsg cGFyYW1zLCBlbCkuZmlyc3REZWZpbmVkKCk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgYXR0IGluIHBhcmFtcykgewor ICAgICAgICAgICAgaWYgKHBhcmFtc1toYXNdKGF0dCkpIHsKKyAgICAgICAg ICAgICAgICBldmUoInNuYXAudXRpbC5hdHRyLiIgKyBhdHQsIGVsLCBwYXJh bXNbYXR0XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIGVsOworICAgIH07CisvKlwKKyAqIFNuYXAucGFyc2UKKyBbIG1l dGhvZCBdCisgKioKKyAqIFBhcnNlcyBTVkcgZnJhZ21lbnQgYW5kIGNvbnZl cnRzIGl0IGludG8gYSBARnJhZ21lbnQKKyAqKgorIC0gc3ZnIChzdHJpbmcp IFNWRyBzdHJpbmcKKyA9IChGcmFnbWVudCkgdGhlIEBGcmFnbWVudAorXCov CitTbmFwLnBhcnNlID0gZnVuY3Rpb24gKHN2ZykgeworICAgIHZhciBmID0g Z2xvYi5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAorICAgICAgICBm dWxsID0gdHJ1ZSwKKyAgICAgICAgZGl2ID0gZ2xvYi5kb2MuY3JlYXRlRWxl bWVudCgiZGl2Iik7CisgICAgc3ZnID0gU3RyKHN2Zyk7CisgICAgaWYgKCFz dmcubWF0Y2goL15ccyo8XHMqc3ZnKD86XHN8PikvKSkgeworICAgICAgICBz dmcgPSAiPHN2Zz4iICsgc3ZnICsgIjwvc3ZnPiI7CisgICAgICAgIGZ1bGwg PSBmYWxzZTsKKyAgICB9CisgICAgZGl2LmlubmVySFRNTCA9IHN2ZzsKKyAg ICBzdmcgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdOwor ICAgIGlmIChzdmcpIHsKKyAgICAgICAgaWYgKGZ1bGwpIHsKKyAgICAgICAg ICAgIGYgPSBzdmc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3 aGlsZSAoc3ZnLmZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAgICAgICBmLmFw cGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmV3IEZyYWdtZW50KGYpOwor fTsKK2Z1bmN0aW9uIEZyYWdtZW50KGZyYWcpIHsKKyAgICB0aGlzLm5vZGUg PSBmcmFnOworfQorLypcCisgKiBTbmFwLmZyYWdtZW50CisgWyBtZXRob2Qg XQorICoqCisgKiBDcmVhdGVzIGEgRE9NIGZyYWdtZW50IGZyb20gYSBnaXZl biBsaXN0IG9mIGVsZW1lbnRzIG9yIHN0cmluZ3MKKyAqKgorIC0gdmFyYXJn cyAo4oCmKSBTVkcgc3RyaW5nCisgPSAoRnJhZ21lbnQpIHRoZSBARnJhZ21l bnQKK1wqLworU25hcC5mcmFnbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICB2 YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50 cywgMCksCisgICAgICAgIGYgPSBnbG9iLmRvYy5jcmVhdGVEb2N1bWVudEZy YWdtZW50KCk7CisgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJncy5sZW5n dGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgIHZhciBpdGVtID0gYXJnc1tp XTsKKyAgICAgICAgaWYgKGl0ZW0ubm9kZSAmJiBpdGVtLm5vZGUubm9kZVR5 cGUpIHsKKyAgICAgICAgICAgIGYuYXBwZW5kQ2hpbGQoaXRlbS5ub2RlKTsK KyAgICAgICAgfQorICAgICAgICBpZiAoaXRlbS5ub2RlVHlwZSkgeworICAg ICAgICAgICAgZi5hcHBlbmRDaGlsZChpdGVtKTsKKyAgICAgICAgfQorICAg ICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gInN0cmluZyIpIHsKKyAgICAgICAg ICAgIGYuYXBwZW5kQ2hpbGQoU25hcC5wYXJzZShpdGVtKS5ub2RlKTsKKyAg ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmV3IEZyYWdtZW50KGYpOwor fTsKKworZnVuY3Rpb24gbWFrZShuYW1lLCBwYXJlbnQpIHsKKyAgICB2YXIg cmVzID0gJChuYW1lKTsKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQocmVzKTsK KyAgICB2YXIgZWwgPSB3cmFwKHJlcyk7CisgICAgcmV0dXJuIGVsOworfQor ZnVuY3Rpb24gUGFwZXIodywgaCkgeworICAgIHZhciByZXMsCisgICAgICAg IGRlc2MsCisgICAgICAgIGRlZnMsCisgICAgICAgIHByb3RvID0gUGFwZXIu cHJvdG90eXBlOworICAgIGlmICh3ICYmIHcudGFnTmFtZSA9PSAic3ZnIikg eworICAgICAgICBpZiAody5zbmFwIGluIGh1YikgeworICAgICAgICAgICAg cmV0dXJuIGh1Ylt3LnNuYXBdOworICAgICAgICB9CisgICAgICAgIHZhciBk b2MgPSB3Lm93bmVyRG9jdW1lbnQ7CisgICAgICAgIHJlcyA9IG5ldyBFbGVt ZW50KHcpOworICAgICAgICBkZXNjID0gdy5nZXRFbGVtZW50c0J5VGFnTmFt ZSgiZGVzYyIpWzBdOworICAgICAgICBkZWZzID0gdy5nZXRFbGVtZW50c0J5 VGFnTmFtZSgiZGVmcyIpWzBdOworICAgICAgICBpZiAoIWRlc2MpIHsKKyAg ICAgICAgICAgIGRlc2MgPSAkKCJkZXNjIik7CisgICAgICAgICAgICBkZXNj LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiQ3JlYXRlZCB3aXRo IFNuYXAiKSk7CisgICAgICAgICAgICByZXMubm9kZS5hcHBlbmRDaGlsZChk ZXNjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRlZnMpIHsKKyAgICAg ICAgICAgIGRlZnMgPSAkKCJkZWZzIik7CisgICAgICAgICAgICByZXMubm9k ZS5hcHBlbmRDaGlsZChkZWZzKTsKKyAgICAgICAgfQorICAgICAgICByZXMu ZGVmcyA9IGRlZnM7CisgICAgICAgIGZvciAodmFyIGtleSBpbiBwcm90bykg aWYgKHByb3RvW2hhc10oa2V5KSkgeworICAgICAgICAgICAgcmVzW2tleV0g PSBwcm90b1trZXldOworICAgICAgICB9CisgICAgICAgIHJlcy5wYXBlciA9 IHJlcy5yb290ID0gcmVzOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcyA9 IG1ha2UoInN2ZyIsIGdsb2IuZG9jLmJvZHkpOworICAgICAgICAkKHJlcy5u b2RlLCB7CisgICAgICAgICAgICBoZWlnaHQ6IGgsCisgICAgICAgICAgICB2 ZXJzaW9uOiAxLjEsCisgICAgICAgICAgICB3aWR0aDogdywKKyAgICAgICAg ICAgIHhtbG5zOiB4bWxucworICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0 dXJuIHJlczsKK30KK2Z1bmN0aW9uIHdyYXAoZG9tKSB7CisgICAgaWYgKCFk b20pIHsKKyAgICAgICAgcmV0dXJuIGRvbTsKKyAgICB9CisgICAgaWYgKGRv bSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgZG9tIGluc3RhbmNlb2YgRnJhZ21l bnQpIHsKKyAgICAgICAgcmV0dXJuIGRvbTsKKyAgICB9CisgICAgaWYgKGRv bS50YWdOYW1lICYmIGRvbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gInN2 ZyIpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQYXBlcihkb20pOworICAgIH0K KyAgICBpZiAoZG9tLnRhZ05hbWUgJiYgZG9tLnRhZ05hbWUudG9Mb3dlckNh c2UoKSA9PSAib2JqZWN0IiAmJiBkb20udHlwZSA9PSAiaW1hZ2Uvc3ZnK3ht bCIpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQYXBlcihkb20uY29udGVudERv Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXSk7CisgICAg fQorICAgIHJldHVybiBuZXcgRWxlbWVudChkb20pOworfQorCitTbmFwLl8u bWFrZSA9IG1ha2U7CitTbmFwLl8ud3JhcCA9IHdyYXA7CisvKlwKKyAqIFBh cGVyLmVsCisgWyBtZXRob2QgXQorICoqCisgKiBDcmVhdGVzIGFuIGVsZW1l bnQgb24gcGFwZXIgd2l0aCBhIGdpdmVuIG5hbWUgYW5kIG5vIGF0dHJpYnV0 ZXMKKyAqKgorIC0gbmFtZSAoc3RyaW5nKSB0YWcgbmFtZQorIC0gYXR0ciAo b2JqZWN0KSBhdHRyaWJ1dGVzCisgPSAoRWxlbWVudCkgdGhlIGN1cnJlbnQg ZWxlbWVudAorID4gVXNhZ2UKKyB8IHZhciBjID0gcGFwZXIuY2lyY2xlKDEw LCAxMCwgMTApOyAvLyBpcyB0aGUgc2FtZSBhcy4uLgorIHwgdmFyIGMgPSBw YXBlci5lbCgiY2lyY2xlIikuYXR0cih7CisgfCAgICAgY3g6IDEwLAorIHwg ICAgIGN5OiAxMCwKKyB8ICAgICByOiAxMAorIHwgfSk7CisgfCAvLyBhbmQg dGhlIHNhbWUgYXMKKyB8IHZhciBjID0gcGFwZXIuZWwoImNpcmNsZSIsIHsK KyB8ICAgICBjeDogMTAsCisgfCAgICAgY3k6IDEwLAorIHwgICAgIHI6IDEw CisgfCB9KTsKK1wqLworUGFwZXIucHJvdG90eXBlLmVsID0gZnVuY3Rpb24g KG5hbWUsIGF0dHIpIHsKKyAgICB2YXIgZWwgPSBtYWtlKG5hbWUsIHRoaXMu bm9kZSk7CisgICAgYXR0ciAmJiBlbC5hdHRyKGF0dHIpOworICAgIHJldHVy biBlbDsKK307CisvKlwKKyAqIEVsZW1lbnQuY2hpbGRyZW4KKyBbIG1ldGhv ZCBdCisgKioKKyAqIFJldHVybnMgYXJyYXkgb2YgYWxsIHRoZSBjaGlsZHJl biBvZiB0aGUgZWxlbWVudC4KKyA9IChhcnJheSkgYXJyYXkgb2YgRWxlbWVu dHMKK1wqLworRWxlbWVudC5wcm90b3R5cGUuY2hpbGRyZW4gPSBmdW5jdGlv biAoKSB7CisgICAgdmFyIG91dCA9IFtdLAorICAgICAgICBjaCA9IHRoaXMu bm9kZS5jaGlsZE5vZGVzOworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNo Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgb3V0W2ldID0gU25h cChjaFtpXSk7CisgICAgfQorICAgIHJldHVybiBvdXQ7Cit9OworZnVuY3Rp b24ganNvbkZpbGxlcihyb290LCBvKSB7CisgICAgZm9yICh2YXIgaSA9IDAs IGlpID0gcm9vdC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgIHZh ciBpdGVtID0geworICAgICAgICAgICAgICAgIHR5cGU6IHJvb3RbaV0udHlw ZSwKKyAgICAgICAgICAgICAgICBhdHRyOiByb290W2ldLmF0dHIoKQorICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIGNoaWxkcmVuID0gcm9vdFtpXS5j aGlsZHJlbigpOworICAgICAgICBvLnB1c2goaXRlbSk7CisgICAgICAgIGlm IChjaGlsZHJlbi5sZW5ndGgpIHsKKyAgICAgICAgICAgIGpzb25GaWxsZXIo Y2hpbGRyZW4sIGl0ZW0uY2hpbGROb2RlcyA9IFtdKTsKKyAgICAgICAgfQor ICAgIH0KK30KKy8qXAorICogRWxlbWVudC50b0pTT04KKyBbIG1ldGhvZCBd CisgKioKKyAqIFJldHVybnMgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRo ZSBnaXZlbiBlbGVtZW50IGFuZCBhbGwgaXRzIGNoaWxkcmVuLgorID0gKG9i amVjdCkgaW4gZm9ybWF0CisgbyB7CisgbyAgICAgdHlwZSAoc3RyaW5nKSB0 aGlzLnR5cGUsCisgbyAgICAgYXR0ciAob2JqZWN0KSBhdHRyaWJ1dGVzIG1h cCwKKyBvICAgICBjaGlsZE5vZGVzIChhcnJheSkgb3B0aW9uYWwgYXJyYXkg b2YgY2hpbGRyZW4gaW4gdGhlIHNhbWUgZm9ybWF0CisgbyB9CitcKi8KK0Vs ZW1lbnQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKKyAgICB2 YXIgb3V0ID0gW107CisgICAganNvbkZpbGxlcihbdGhpc10sIG91dCk7Cisg ICAgcmV0dXJuIG91dFswXTsKK307CisvLyBkZWZhdWx0CitldmUub24oInNu YXAudXRpbC5nZXRhdHRyIiwgZnVuY3Rpb24gKCkgeworICAgIHZhciBhdHQg PSBldmUubnQoKTsKKyAgICBhdHQgPSBhdHQuc3Vic3RyaW5nKGF0dC5sYXN0 SW5kZXhPZigiLiIpICsgMSk7CisgICAgdmFyIGNzcyA9IGF0dC5yZXBsYWNl KC9bQS1aXS9nLCBmdW5jdGlvbiAobGV0dGVyKSB7CisgICAgICAgIHJldHVy biAiLSIgKyBsZXR0ZXIudG9Mb3dlckNhc2UoKTsKKyAgICB9KTsKKyAgICBp ZiAoY3NzQXR0cltoYXNdKGNzcykpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu bm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5 bGUodGhpcy5ub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGNzcyk7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICQodGhpcy5ub2RlLCBhdHQp OworICAgIH0KK30pOwordmFyIGNzc0F0dHIgPSB7CisgICAgImFsaWdubWVu dC1iYXNlbGluZSI6IDAsCisgICAgImJhc2VsaW5lLXNoaWZ0IjogMCwKKyAg ICAiY2xpcCI6IDAsCisgICAgImNsaXAtcGF0aCI6IDAsCisgICAgImNsaXAt cnVsZSI6IDAsCisgICAgImNvbG9yIjogMCwKKyAgICAiY29sb3ItaW50ZXJw b2xhdGlvbiI6IDAsCisgICAgImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVy cyI6IDAsCisgICAgImNvbG9yLXByb2ZpbGUiOiAwLAorICAgICJjb2xvci1y ZW5kZXJpbmciOiAwLAorICAgICJjdXJzb3IiOiAwLAorICAgICJkaXJlY3Rp b24iOiAwLAorICAgICJkaXNwbGF5IjogMCwKKyAgICAiZG9taW5hbnQtYmFz ZWxpbmUiOiAwLAorICAgICJlbmFibGUtYmFja2dyb3VuZCI6IDAsCisgICAg ImZpbGwiOiAwLAorICAgICJmaWxsLW9wYWNpdHkiOiAwLAorICAgICJmaWxs LXJ1bGUiOiAwLAorICAgICJmaWx0ZXIiOiAwLAorICAgICJmbG9vZC1jb2xv ciI6IDAsCisgICAgImZsb29kLW9wYWNpdHkiOiAwLAorICAgICJmb250Ijog MCwKKyAgICAiZm9udC1mYW1pbHkiOiAwLAorICAgICJmb250LXNpemUiOiAw LAorICAgICJmb250LXNpemUtYWRqdXN0IjogMCwKKyAgICAiZm9udC1zdHJl dGNoIjogMCwKKyAgICAiZm9udC1zdHlsZSI6IDAsCisgICAgImZvbnQtdmFy aWFudCI6IDAsCisgICAgImZvbnQtd2VpZ2h0IjogMCwKKyAgICAiZ2x5cGgt b3JpZW50YXRpb24taG9yaXpvbnRhbCI6IDAsCisgICAgImdseXBoLW9yaWVu dGF0aW9uLXZlcnRpY2FsIjogMCwKKyAgICAiaW1hZ2UtcmVuZGVyaW5nIjog MCwKKyAgICAia2VybmluZyI6IDAsCisgICAgImxldHRlci1zcGFjaW5nIjog MCwKKyAgICAibGlnaHRpbmctY29sb3IiOiAwLAorICAgICJtYXJrZXIiOiAw LAorICAgICJtYXJrZXItZW5kIjogMCwKKyAgICAibWFya2VyLW1pZCI6IDAs CisgICAgIm1hcmtlci1zdGFydCI6IDAsCisgICAgIm1hc2siOiAwLAorICAg ICJvcGFjaXR5IjogMCwKKyAgICAib3ZlcmZsb3ciOiAwLAorICAgICJwb2lu dGVyLWV2ZW50cyI6IDAsCisgICAgInNoYXBlLXJlbmRlcmluZyI6IDAsCisg ICAgInN0b3AtY29sb3IiOiAwLAorICAgICJzdG9wLW9wYWNpdHkiOiAwLAor ICAgICJzdHJva2UiOiAwLAorICAgICJzdHJva2UtZGFzaGFycmF5IjogMCwK KyAgICAic3Ryb2tlLWRhc2hvZmZzZXQiOiAwLAorICAgICJzdHJva2UtbGlu ZWNhcCI6IDAsCisgICAgInN0cm9rZS1saW5lam9pbiI6IDAsCisgICAgInN0 cm9rZS1taXRlcmxpbWl0IjogMCwKKyAgICAic3Ryb2tlLW9wYWNpdHkiOiAw LAorICAgICJzdHJva2Utd2lkdGgiOiAwLAorICAgICJ0ZXh0LWFuY2hvciI6 IDAsCisgICAgInRleHQtZGVjb3JhdGlvbiI6IDAsCisgICAgInRleHQtcmVu ZGVyaW5nIjogMCwKKyAgICAidW5pY29kZS1iaWRpIjogMCwKKyAgICAidmlz aWJpbGl0eSI6IDAsCisgICAgIndvcmQtc3BhY2luZyI6IDAsCisgICAgIndy aXRpbmctbW9kZSI6IDAKK307CisKK2V2ZS5vbigic25hcC51dGlsLmF0dHIi LCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICB2YXIgYXR0ID0gZXZlLm50KCks CisgICAgICAgIGF0dHIgPSB7fTsKKyAgICBhdHQgPSBhdHQuc3Vic3RyaW5n KGF0dC5sYXN0SW5kZXhPZigiLiIpICsgMSk7CisgICAgYXR0clthdHRdID0g dmFsdWU7CisgICAgdmFyIHN0eWxlID0gYXR0LnJlcGxhY2UoLy0oXHcpL2dp LCBmdW5jdGlvbiAoYWxsLCBsZXR0ZXIpIHsKKyAgICAgICAgICAgIHJldHVy biBsZXR0ZXIudG9VcHBlckNhc2UoKTsKKyAgICAgICAgfSksCisgICAgICAg IGNzcyA9IGF0dC5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbiAobGV0dGVy KSB7CisgICAgICAgICAgICByZXR1cm4gIi0iICsgbGV0dGVyLnRvTG93ZXJD YXNlKCk7CisgICAgICAgIH0pOworICAgIGlmIChjc3NBdHRyW2hhc10oY3Nz KSkgeworICAgICAgICB0aGlzLm5vZGUuc3R5bGVbc3R5bGVdID0gdmFsdWUg PT0gbnVsbCA/IEUgOiB2YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICAk KHRoaXMubm9kZSwgYXR0cik7CisgICAgfQorfSk7CisoZnVuY3Rpb24gKHBy b3RvKSB7fShQYXBlci5wcm90b3R5cGUpKTsKKworLy8gc2ltcGxlIGFqYXgK Ky8qXAorICogU25hcC5hamF4CisgWyBtZXRob2QgXQorICoqCisgKiBTaW1w bGUgaW1wbGVtZW50YXRpb24gb2YgQWpheAorICoqCisgLSB1cmwgKHN0cmlu ZykgVVJMCisgLSBwb3N0RGF0YSAob2JqZWN0fHN0cmluZykgZGF0YSBmb3Ig cG9zdCByZXF1ZXN0CisgLSBjYWxsYmFjayAoZnVuY3Rpb24pIGNhbGxiYWNr CisgLSBzY29wZSAob2JqZWN0KSAjb3B0aW9uYWwgc2NvcGUgb2YgY2FsbGJh Y2sKKyAqIG9yCisgLSB1cmwgKHN0cmluZykgVVJMCisgLSBjYWxsYmFjayAo ZnVuY3Rpb24pIGNhbGxiYWNrCisgLSBzY29wZSAob2JqZWN0KSAjb3B0aW9u YWwgc2NvcGUgb2YgY2FsbGJhY2sKKyA9IChYTUxIdHRwUmVxdWVzdCkgdGhl IFhNTEh0dHBSZXF1ZXN0IG9iamVjdCwganVzdCBpbiBjYXNlCitcKi8KK1Nu YXAuYWpheCA9IGZ1bmN0aW9uICh1cmwsIHBvc3REYXRhLCBjYWxsYmFjaywg c2NvcGUpeworICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QsCisg ICAgICAgIGlkID0gSUQoKTsKKyAgICBpZiAocmVxKSB7CisgICAgICAgIGlm IChpcyhwb3N0RGF0YSwgImZ1bmN0aW9uIikpIHsKKyAgICAgICAgICAgIHNj b3BlID0gY2FsbGJhY2s7CisgICAgICAgICAgICBjYWxsYmFjayA9IHBvc3RE YXRhOworICAgICAgICAgICAgcG9zdERhdGEgPSBudWxsOworICAgICAgICB9 IGVsc2UgaWYgKGlzKHBvc3REYXRhLCAib2JqZWN0IikpIHsKKyAgICAgICAg ICAgIHZhciBwZCA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIga2V5IGlu IHBvc3REYXRhKSBpZiAocG9zdERhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkg eworICAgICAgICAgICAgICAgIHBkLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50 KGtleSkgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQocG9zdERhdGFba2V5 XSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9zdERhdGEgPSBw ZC5qb2luKCImIik7CisgICAgICAgIH0KKyAgICAgICAgcmVxLm9wZW4oKHBv c3REYXRhID8gIlBPU1QiIDogIkdFVCIpLCB1cmwsIHRydWUpOworICAgICAg ICBpZiAocG9zdERhdGEpIHsKKyAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0 SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwgIlhNTEh0dHBSZXF1ZXN0Iik7 CisgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10 eXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwor ICAgICAgICB9CisgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAg ICAgZXZlLm9uY2UoInNuYXAuYWpheC4iICsgaWQgKyAiLjAiLCBjYWxsYmFj ayk7CisgICAgICAgICAgICBldmUub25jZSgic25hcC5hamF4LiIgKyBpZCAr ICIuMjAwIiwgY2FsbGJhY2spOworICAgICAgICAgICAgZXZlLm9uY2UoInNu YXAuYWpheC4iICsgaWQgKyAiLjMwNCIsIGNhbGxiYWNrKTsKKyAgICAgICAg fQorICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24o KSB7CisgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgIT0gNCkgcmV0 dXJuOworICAgICAgICAgICAgZXZlKCJzbmFwLmFqYXguIiArIGlkICsgIi4i ICsgcmVxLnN0YXR1cywgc2NvcGUsIHJlcSk7CisgICAgICAgIH07CisgICAg ICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgICBy ZXR1cm4gcmVxOworICAgICAgICB9CisgICAgICAgIHJlcS5zZW5kKHBvc3RE YXRhKTsKKyAgICAgICAgcmV0dXJuIHJlcTsKKyAgICB9Cit9OworLypcCisg KiBTbmFwLmxvYWQKKyBbIG1ldGhvZCBdCisgKioKKyAqIExvYWRzIGV4dGVy bmFsIFNWRyBmaWxlIGFzIGEgQEZyYWdtZW50IChzZWUgQFNuYXAuYWpheCBm b3IgbW9yZSBhZHZhbmNlZCBBSkFYKQorICoqCisgLSB1cmwgKHN0cmluZykg VVJMCisgLSBjYWxsYmFjayAoZnVuY3Rpb24pIGNhbGxiYWNrCisgLSBzY29w ZSAob2JqZWN0KSAjb3B0aW9uYWwgc2NvcGUgb2YgY2FsbGJhY2sKK1wqLwor U25hcC5sb2FkID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2ssIHNjb3BlKSB7 CisgICAgU25hcC5hamF4KHVybCwgZnVuY3Rpb24gKHJlcSkgeworICAgICAg ICB2YXIgZiA9IFNuYXAucGFyc2UocmVxLnJlc3BvbnNlVGV4dCk7CisgICAg ICAgIHNjb3BlID8gY2FsbGJhY2suY2FsbChzY29wZSwgZikgOiBjYWxsYmFj ayhmKTsKKyAgICB9KTsKK307Cit2YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24g KGVsZW0pIHsKKyAgICB2YXIgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVu dFJlY3QoKSwKKyAgICAgICAgZG9jID0gZWxlbS5vd25lckRvY3VtZW50LAor ICAgICAgICBib2R5ID0gZG9jLmJvZHksCisgICAgICAgIGRvY0VsZW0gPSBk b2MuZG9jdW1lbnRFbGVtZW50LAorICAgICAgICBjbGllbnRUb3AgPSBkb2NF bGVtLmNsaWVudFRvcCB8fCBib2R5LmNsaWVudFRvcCB8fCAwLCBjbGllbnRM ZWZ0ID0gZG9jRWxlbS5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8 fCAwLAorICAgICAgICB0b3AgID0gYm94LnRvcCAgKyAoZy53aW4ucGFnZVlP ZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxUb3AgfHwgYm9keS5zY3JvbGxUb3Ag KSAtIGNsaWVudFRvcCwKKyAgICAgICAgbGVmdCA9IGJveC5sZWZ0ICsgKGcu d2luLnBhZ2VYT2Zmc2V0IHx8IGRvY0VsZW0uc2Nyb2xsTGVmdCB8fCBib2R5 LnNjcm9sbExlZnQpIC0gY2xpZW50TGVmdDsKKyAgICByZXR1cm4geworICAg ICAgICB5OiB0b3AsCisgICAgICAgIHg6IGxlZnQKKyAgICB9OworfTsKKy8q XAorICogU25hcC5nZXRFbGVtZW50QnlQb2ludAorIFsgbWV0aG9kIF0KKyAq KgorICogUmV0dXJucyB5b3UgdG9wbW9zdCBlbGVtZW50IHVuZGVyIGdpdmVu IHBvaW50LgorICoqCisgPSAob2JqZWN0KSBTbmFwIGVsZW1lbnQgb2JqZWN0 CisgLSB4IChudW1iZXIpIHggY29vcmRpbmF0ZSBmcm9tIHRoZSB0b3AgbGVm dCBjb3JuZXIgb2YgdGhlIHdpbmRvdworIC0geSAobnVtYmVyKSB5IGNvb3Jk aW5hdGUgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSB3aW5kb3cK KyA+IFVzYWdlCisgfCBTbmFwLmdldEVsZW1lbnRCeVBvaW50KG1vdXNlWCwg bW91c2VZKS5hdHRyKHtzdHJva2U6ICIjZjAwIn0pOworXCovCitTbmFwLmdl dEVsZW1lbnRCeVBvaW50ID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICB2YXIg cGFwZXIgPSB0aGlzLAorICAgICAgICBzdmcgPSBwYXBlci5jYW52YXMsCisg ICAgICAgIHRhcmdldCA9IGdsb2IuZG9jLmVsZW1lbnRGcm9tUG9pbnQoeCwg eSk7CisgICAgaWYgKGdsb2Iud2luLm9wZXJhICYmIHRhcmdldC50YWdOYW1l ID09ICJzdmciKSB7CisgICAgICAgIHZhciBzbyA9IGdldE9mZnNldCh0YXJn ZXQpLAorICAgICAgICAgICAgc3IgPSB0YXJnZXQuY3JlYXRlU1ZHUmVjdCgp OworICAgICAgICBzci54ID0geCAtIHNvLng7CisgICAgICAgIHNyLnkgPSB5 IC0gc28ueTsKKyAgICAgICAgc3Iud2lkdGggPSBzci5oZWlnaHQgPSAxOwor ICAgICAgICB2YXIgaGl0cyA9IHRhcmdldC5nZXRJbnRlcnNlY3Rpb25MaXN0 KHNyLCBudWxsKTsKKyAgICAgICAgaWYgKGhpdHMubGVuZ3RoKSB7CisgICAg ICAgICAgICB0YXJnZXQgPSBoaXRzW2hpdHMubGVuZ3RoIC0gMV07CisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKCF0YXJnZXQpIHsKKyAgICAgICAgcmV0 dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiB3cmFwKHRhcmdldCk7Cit9 OworLypcCisgKiBTbmFwLnBsdWdpbgorIFsgbWV0aG9kIF0KKyAqKgorICog TGV0IHlvdSB3cml0ZSBwbHVnaW5zLiBZb3UgcGFzcyBpbiBhIGZ1bmN0aW9u IHdpdGggZml2ZSBhcmd1bWVudHMsIGxpa2UgdGhpczoKKyB8IFNuYXAucGx1 Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYmFsLCBG cmFnbWVudCkgeworIHwgICAgIFNuYXAubmV3bWV0aG9kID0gZnVuY3Rpb24g KCkge307CisgfCAgICAgRWxlbWVudC5wcm90b3R5cGUubmV3bWV0aG9kID0g ZnVuY3Rpb24gKCkge307CisgfCAgICAgUGFwZXIucHJvdG90eXBlLm5ld21l dGhvZCA9IGZ1bmN0aW9uICgpIHt9OworIHwgfSk7CisgKiBJbnNpZGUgdGhl IGZ1bmN0aW9uIHlvdSBoYXZlIGFjY2VzcyB0byBhbGwgbWFpbiBvYmplY3Rz IChhbmQgdGhlaXIKKyAqIHByb3RvdHlwZXMpLiBUaGlzIGFsbG93IHlvdSB0 byBleHRlbmQgYW55dGhpbmcgeW91IHdhbnQuCisgKioKKyAtIGYgKGZ1bmN0 aW9uKSB5b3VyIHBsdWdpbiBib2R5CitcKi8KK1NuYXAucGx1Z2luID0gZnVu Y3Rpb24gKGYpIHsKKyAgICBmKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9i LCBGcmFnbWVudCk7Cit9OworZ2xvYi53aW4uU25hcCA9IFNuYXA7CityZXR1 cm4gU25hcDsKK30od2luZG93IHx8IHRoaXMpKTsKKworLy8gQ29weXJpZ2h0 IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln aHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFj aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8g eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j ZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5 IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUu b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVp cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n LCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhP VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZv ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z IGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFw LnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2Is IEZyYWdtZW50KSB7CisgICAgdmFyIGVscHJvdG8gPSBFbGVtZW50LnByb3Rv dHlwZSwKKyAgICAgICAgaXMgPSBTbmFwLmlzLAorICAgICAgICBTdHIgPSBT dHJpbmcsCisgICAgICAgIHVuaXQycHggPSBTbmFwLl91bml0MnB4LAorICAg ICAgICAkID0gU25hcC5fLiQsCisgICAgICAgIG1ha2UgPSBTbmFwLl8ubWFr ZSwKKyAgICAgICAgZ2V0U29tZURlZnMgPSBTbmFwLl8uZ2V0U29tZURlZnMs CisgICAgICAgIGhhcyA9ICJoYXNPd25Qcm9wZXJ0eSIsCisgICAgICAgIHdy YXAgPSBTbmFwLl8ud3JhcDsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lmdl dEJCb3gKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVy bnMgdGhlIGJvdW5kaW5nIGJveCBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4g ZWxlbWVudAorICAgICAqKgorICAgICA9IChvYmplY3QpIGJvdW5kaW5nIGJv eCBkZXNjcmlwdG9yOgorICAgICBvIHsKKyAgICAgbyAgICAgY3g6IChudW1i ZXIpIHggb2YgdGhlIGNlbnRlciwKKyAgICAgbyAgICAgY3k6IChudW1iZXIp IHggb2YgdGhlIGNlbnRlciwKKyAgICAgbyAgICAgaDogKG51bWJlcikgaGVp Z2h0LAorICAgICBvICAgICBoZWlnaHQ6IChudW1iZXIpIGhlaWdodCwKKyAg ICAgbyAgICAgcGF0aDogKHN0cmluZykgcGF0aCBjb21tYW5kIGZvciB0aGUg Ym94LAorICAgICBvICAgICByMDogKG51bWJlcikgcmFkaXVzIG9mIGEgY2ly Y2xlIHRoYXQgZnVsbHkgZW5jbG9zZXMgdGhlIGJveCwKKyAgICAgbyAgICAg cjE6IChudW1iZXIpIHJhZGl1cyBvZiB0aGUgc21hbGxlc3QgY2lyY2xlIHRo YXQgY2FuIGJlIGVuY2xvc2VkLAorICAgICBvICAgICByMjogKG51bWJlcikg cmFkaXVzIG9mIHRoZSBsYXJnZXN0IGNpcmNsZSB0aGF0IGNhbiBiZSBlbmNs b3NlZCwKKyAgICAgbyAgICAgdmI6IChzdHJpbmcpIGJveCBhcyBhIHZpZXdi b3ggY29tbWFuZCwKKyAgICAgbyAgICAgdzogKG51bWJlcikgd2lkdGgsCisg ICAgIG8gICAgIHdpZHRoOiAobnVtYmVyKSB3aWR0aCwKKyAgICAgbyAgICAg eDI6IChudW1iZXIpIHggb2YgdGhlIHJpZ2h0IHNpZGUsCisgICAgIG8gICAg IHg6IChudW1iZXIpIHggb2YgdGhlIGxlZnQgc2lkZSwKKyAgICAgbyAgICAg eTI6IChudW1iZXIpIHkgb2YgdGhlIGJvdHRvbSBlZGdlLAorICAgICBvICAg ICB5OiAobnVtYmVyKSB5IG9mIHRoZSB0b3AgZWRnZQorICAgICBvIH0KKyAg ICBcKi8KKyAgICBlbHByb3RvLmdldEJCb3ggPSBmdW5jdGlvbiAoaXNXaXRo b3V0VHJhbnNmb3JtKSB7CisgICAgICAgIGlmICghU25hcC5NYXRyaXggfHwg IVNuYXAucGF0aCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5n ZXRCQm94KCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVsID0gdGhpcywK KyAgICAgICAgICAgIG0gPSBuZXcgU25hcC5NYXRyaXg7CisgICAgICAgIGlm IChlbC5yZW1vdmVkKSB7CisgICAgICAgICAgICByZXR1cm4gU25hcC5fLmJv eCgpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChlbC50eXBlID09ICJ1 c2UiKSB7CisgICAgICAgICAgICBpZiAoIWlzV2l0aG91dFRyYW5zZm9ybSkg eworICAgICAgICAgICAgICAgIG0gPSBtLmFkZChlbC50cmFuc2Zvcm0oKS5s b2NhbE1hdHJpeC50cmFuc2xhdGUoZWwuYXR0cigieCIpIHx8IDAsIGVsLmF0 dHIoInkiKSB8fCAwKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoZWwub3JpZ2luYWwpIHsKKyAgICAgICAgICAgICAgICBlbCA9IGVsLm9y aWdpbmFsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICB2YXIgaHJlZiA9IGVsLmF0dHIoInhsaW5rOmhyZWYiKTsKKyAgICAgICAg ICAgICAgICBlbCA9IGVsLm9yaWdpbmFsID0gZWwubm9kZS5vd25lckRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKGhyZWYuc3Vic3RyaW5nKGhyZWYuaW5kZXhP ZigiIyIpICsgMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIHZhciBfID0gZWwuXywKKyAgICAgICAgICAgIHBhdGhmaW5kZXIgPSBT bmFwLnBhdGguZ2V0W2VsLnR5cGVdIHx8IFNuYXAucGF0aC5nZXQuZGVmbHQ7 CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoaXNXaXRob3V0VHJh bnNmb3JtKSB7CisgICAgICAgICAgICAgICAgXy5iYm94d3QgPSBwYXRoZmlu ZGVyID8gU25hcC5wYXRoLmdldEJCb3goZWwucmVhbFBhdGggPSBwYXRoZmlu ZGVyKGVsKSkgOiBTbmFwLl8uYm94KGVsLm5vZGUuZ2V0QkJveCgpKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4gU25hcC5fLmJveChfLmJib3h3dCk7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsLnJlYWxQ YXRoID0gcGF0aGZpbmRlcihlbCk7CisgICAgICAgICAgICAgICAgZWwubWF0 cml4ID0gZWwudHJhbnNmb3JtKCkubG9jYWxNYXRyaXg7CisgICAgICAgICAg ICAgICAgXy5iYm94ID0gU25hcC5wYXRoLmdldEJCb3goU25hcC5wYXRoLm1h cChlbC5yZWFsUGF0aCwgbS5hZGQoZWwubWF0cml4KSkpOworICAgICAgICAg ICAgICAgIHJldHVybiBTbmFwLl8uYm94KF8uYmJveCk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIEZp cmVmb3ggZG9lc27igJl0IGdpdmUgeW91IGJib3ggb2YgaGlkZGVuIGVsZW1l bnQKKyAgICAgICAgICAgIHJldHVybiBTbmFwLl8uYm94KCk7CisgICAgICAg IH0KKyAgICB9OworICAgIHZhciBwcm9wU3RyaW5nID0gZnVuY3Rpb24gKCkg eworICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmc7CisgICAgfTsKKyAgICBm dW5jdGlvbiBleHRyYWN0VHJhbnNmb3JtKGVsLCB0c3RyKSB7CisgICAgICAg IGlmICh0c3RyID09IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBkb1JldHVy biA9IHRydWU7CisgICAgICAgICAgICBpZiAoZWwudHlwZSA9PSAibGluZWFy R3JhZGllbnQiIHx8IGVsLnR5cGUgPT0gInJhZGlhbEdyYWRpZW50Iikgewor ICAgICAgICAgICAgICAgIHRzdHIgPSBlbC5ub2RlLmdldEF0dHJpYnV0ZSgi Z3JhZGllbnRUcmFuc2Zvcm0iKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo ZWwudHlwZSA9PSAicGF0dGVybiIpIHsKKyAgICAgICAgICAgICAgICB0c3Ry ID0gZWwubm9kZS5nZXRBdHRyaWJ1dGUoInBhdHRlcm5UcmFuc2Zvcm0iKTsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHN0ciA9 IGVsLm5vZGUuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICghdHN0cikgeworICAgICAgICAgICAg ICAgIHJldHVybiBuZXcgU25hcC5NYXRyaXg7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICB0c3RyID0gU25hcC5fLnN2Z1RyYW5zZm9ybTJzdHJpbmco dHN0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIVNu YXAuXy5yZ1RyYW5zZm9ybS50ZXN0KHRzdHIpKSB7CisgICAgICAgICAgICAg ICAgdHN0ciA9IFNuYXAuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nKHRzdHIpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0c3RyID0g U3RyKHRzdHIpLnJlcGxhY2UoL1wuezN9fFx1MjAyNi9nLCBlbC5fLnRyYW5z Zm9ybSB8fCAiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo aXModHN0ciwgImFycmF5IikpIHsKKyAgICAgICAgICAgICAgICB0c3RyID0g U25hcC5wYXRoID8gU25hcC5wYXRoLnRvU3RyaW5nLmNhbGwodHN0cikgOiBT dHIodHN0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbC5fLnRy YW5zZm9ybSA9IHRzdHI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG0gPSBT bmFwLl8udHJhbnNmb3JtMm1hdHJpeCh0c3RyLCBlbC5nZXRCQm94KDEpKTsK KyAgICAgICAgaWYgKGRvUmV0dXJuKSB7CisgICAgICAgICAgICByZXR1cm4g bTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVsLm1hdHJpeCA9 IG07CisgICAgICAgIH0KKyAgICB9CisgICAgLypcCisgICAgICogRWxlbWVu dC50cmFuc2Zvcm0KKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IEdldHMgb3Igc2V0cyB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgZWxlbWVudAor ICAgICAqKgorICAgICAtIHRzdHIgKHN0cmluZykgdHJhbnNmb3JtIHN0cmlu ZyBpbiBTbmFwIG9yIFNWRyBmb3JtYXQKKyAgICAgPSAoRWxlbWVudCkgdGhl IGN1cnJlbnQgZWxlbWVudAorICAgICAqIG9yCisgICAgID0gKG9iamVjdCkg dHJhbnNmb3JtYXRpb24gZGVzY3JpcHRvcjoKKyAgICAgbyB7CisgICAgIG8g ICAgIHN0cmluZyAoc3RyaW5nKSB0cmFuc2Zvcm0gc3RyaW5nLAorICAgICBv ICAgICBnbG9iYWxNYXRyaXggKE1hdHJpeCkgbWF0cml4IG9mIGFsbCB0cmFu c2Zvcm1hdGlvbnMgYXBwbGllZCB0byBlbGVtZW50IG9yIGl0cyBwYXJlbnRz LAorICAgICBvICAgICBsb2NhbE1hdHJpeCAoTWF0cml4KSBtYXRyaXggb2Yg dHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgb25seSB0byB0aGUgZWxlbWVudCwK KyAgICAgbyAgICAgZGlmZk1hdHJpeCAoTWF0cml4KSBtYXRyaXggb2YgZGlm ZmVyZW5jZSBiZXR3ZWVuIGdsb2JhbCBhbmQgbG9jYWwgdHJhbnNmb3JtYXRp b25zLAorICAgICBvICAgICBnbG9iYWwgKHN0cmluZykgZ2xvYmFsIHRyYW5z Zm9ybWF0aW9uIGFzIHN0cmluZywKKyAgICAgbyAgICAgbG9jYWwgKHN0cmlu ZykgbG9jYWwgdHJhbnNmb3JtYXRpb24gYXMgc3RyaW5nLAorICAgICBvICAg ICB0b1N0cmluZyAoZnVuY3Rpb24pIHJldHVybnMgYHN0cmluZ2AgcHJvcGVy dHkKKyAgICAgbyB9CisgICAgXCovCisgICAgZWxwcm90by50cmFuc2Zvcm0g PSBmdW5jdGlvbiAodHN0cikgeworICAgICAgICB2YXIgXyA9IHRoaXMuXzsK KyAgICAgICAgaWYgKHRzdHIgPT0gbnVsbCkgeworICAgICAgICAgICAgdmFy IHBhcGEgPSB0aGlzLAorICAgICAgICAgICAgICAgIGdsb2JhbCA9IG5ldyBT bmFwLk1hdHJpeCh0aGlzLm5vZGUuZ2V0Q1RNKCkpLAorICAgICAgICAgICAg ICAgIGxvY2FsID0gZXh0cmFjdFRyYW5zZm9ybSh0aGlzKSwKKyAgICAgICAg ICAgICAgICBtcyA9IFtsb2NhbF0sCisgICAgICAgICAgICAgICAgbSA9IG5l dyBTbmFwLk1hdHJpeCwKKyAgICAgICAgICAgICAgICBpLAorICAgICAgICAg ICAgICAgIGxvY2FsU3RyaW5nID0gbG9jYWwudG9UcmFuc2Zvcm1TdHJpbmco KSwKKyAgICAgICAgICAgICAgICBzdHJpbmcgPSBTdHIobG9jYWwpID09IFN0 cih0aGlzLm1hdHJpeCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0cihfLnRyYW5zZm9ybSkgOiBsb2NhbFN0cmluZzsKKyAgICAgICAgICAg IHdoaWxlIChwYXBhLnR5cGUgIT0gInN2ZyIgJiYgKHBhcGEgPSBwYXBhLnBh cmVudCgpKSkgeworICAgICAgICAgICAgICAgIG1zLnB1c2goZXh0cmFjdFRy YW5zZm9ybShwYXBhKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ID0gbXMubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKGktLSkgeworICAg ICAgICAgICAgICAgIG0uYWRkKG1zW2ldKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgc3RyaW5nOiBz dHJpbmcsCisgICAgICAgICAgICAgICAgZ2xvYmFsTWF0cml4OiBnbG9iYWws CisgICAgICAgICAgICAgICAgdG90YWxNYXRyaXg6IG0sCisgICAgICAgICAg ICAgICAgbG9jYWxNYXRyaXg6IGxvY2FsLAorICAgICAgICAgICAgICAgIGRp ZmZNYXRyaXg6IGdsb2JhbC5jbG9uZSgpLmFkZChsb2NhbC5pbnZlcnQoKSks CisgICAgICAgICAgICAgICAgZ2xvYmFsOiBnbG9iYWwudG9UcmFuc2Zvcm1T dHJpbmcoKSwKKyAgICAgICAgICAgICAgICB0b3RhbDogbS50b1RyYW5zZm9y bVN0cmluZygpLAorICAgICAgICAgICAgICAgIGxvY2FsOiBsb2NhbFN0cmlu ZywKKyAgICAgICAgICAgICAgICB0b1N0cmluZzogcHJvcFN0cmluZworICAg ICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHN0ciBpbnN0 YW5jZW9mIFNuYXAuTWF0cml4KSB7CisgICAgICAgICAgICB0aGlzLm1hdHJp eCA9IHRzdHI7CisgICAgICAgICAgICB0aGlzLl8udHJhbnNmb3JtID0gdHN0 ci50b1RyYW5zZm9ybVN0cmluZygpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgZXh0cmFjdFRyYW5zZm9ybSh0aGlzLCB0c3RyKTsKKyAgICAg ICAgfQorCisgICAgICAgIGlmICh0aGlzLm5vZGUpIHsKKyAgICAgICAgICAg IGlmICh0aGlzLnR5cGUgPT0gImxpbmVhckdyYWRpZW50IiB8fCB0aGlzLnR5 cGUgPT0gInJhZGlhbEdyYWRpZW50IikgeworICAgICAgICAgICAgICAgICQo dGhpcy5ub2RlLCB7Z3JhZGllbnRUcmFuc2Zvcm06IHRoaXMubWF0cml4fSk7 CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PSAicGF0dGVy biIpIHsKKyAgICAgICAgICAgICAgICAkKHRoaXMubm9kZSwge3BhdHRlcm5U cmFuc2Zvcm06IHRoaXMubWF0cml4fSk7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICQodGhpcy5ub2RlLCB7dHJhbnNmb3JtOiB0 aGlzLm1hdHJpeH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LnBhcmVudAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogUmV0dXJucyB0aGUgZWxlbWVudCdzIHBhcmVudAorICAgICAqKgorICAg ICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICBcKi8KKyAg ICBlbHByb3RvLnBhcmVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0 dXJuIHdyYXAodGhpcy5ub2RlLnBhcmVudE5vZGUpOworICAgIH07CisgICAg LypcCisgICAgICogRWxlbWVudC5hcHBlbmQKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIEFwcGVuZHMgdGhlIGdpdmVuIGVsZW1lbnQgdG8g Y3VycmVudCBvbmUKKyAgICAgKioKKyAgICAgLSBlbCAoRWxlbWVudHxTZXQp IGVsZW1lbnQgdG8gYXBwZW5kCisgICAgID0gKEVsZW1lbnQpIHRoZSBwYXJl bnQgZWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQu YWRkCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBTZWUgQEVs ZW1lbnQuYXBwZW5kCisgICAgXCovCisgICAgZWxwcm90by5hcHBlbmQgPSBl bHByb3RvLmFkZCA9IGZ1bmN0aW9uIChlbCkgeworICAgICAgICBpZiAoZWwp IHsKKyAgICAgICAgICAgIGlmIChlbC50eXBlID09ICJzZXQiKSB7CisgICAg ICAgICAgICAgICAgdmFyIGl0ID0gdGhpczsKKyAgICAgICAgICAgICAgICBl bC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeworICAgICAgICAgICAgICAgICAg ICBpdC5hZGQoZWwpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgZWwgPSB3cmFwKGVsKTsKKyAgICAgICAgICAgIHRoaXMubm9kZS5hcHBl bmRDaGlsZChlbC5ub2RlKTsKKyAgICAgICAgICAgIGVsLnBhcGVyID0gdGhp cy5wYXBlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg ICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuYXBwZW5kVG8KKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFwcGVuZHMgdGhlIGN1cnJl bnQgZWxlbWVudCB0byB0aGUgZ2l2ZW4gb25lCisgICAgICoqCisgICAgIC0g ZWwgKEVsZW1lbnQpIHBhcmVudCBlbGVtZW50IHRvIGFwcGVuZCB0bworICAg ICA9IChFbGVtZW50KSB0aGUgY2hpbGQgZWxlbWVudAorICAgIFwqLworICAg IGVscHJvdG8uYXBwZW5kVG8gPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAg aWYgKGVsKSB7CisgICAgICAgICAgICBlbCA9IHdyYXAoZWwpOworICAgICAg ICAgICAgZWwuYXBwZW5kKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJl dHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5w cmVwZW5kCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBQcmVw ZW5kcyB0aGUgZ2l2ZW4gZWxlbWVudCB0byB0aGUgY3VycmVudCBvbmUKKyAg ICAgKioKKyAgICAgLSBlbCAoRWxlbWVudCkgZWxlbWVudCB0byBwcmVwZW5k CisgICAgID0gKEVsZW1lbnQpIHRoZSBwYXJlbnQgZWxlbWVudAorICAgIFwq LworICAgIGVscHJvdG8ucHJlcGVuZCA9IGZ1bmN0aW9uIChlbCkgeworICAg ICAgICBpZiAoZWwpIHsKKyAgICAgICAgICAgIGlmIChlbC50eXBlID09ICJz ZXQiKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ID0gdGhpcywKKyAgICAg ICAgICAgICAgICAgICAgZmlyc3Q7CisgICAgICAgICAgICAgICAgZWwuZm9y RWFjaChmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KGZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdC5hZnRl cihlbCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBpdC5wcmVwZW5kKGVsKTsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGVsOwor ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiB0 aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWwgPSB3cmFwKGVs KTsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQoKTsKKyAg ICAgICAgICAgIHRoaXMubm9kZS5pbnNlcnRCZWZvcmUoZWwubm9kZSwgdGhp cy5ub2RlLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgdGhpcy5hZGQgJiYg dGhpcy5hZGQoKTsKKyAgICAgICAgICAgIGVsLnBhcGVyID0gdGhpcy5wYXBl cjsKKyAgICAgICAgICAgIHRoaXMucGFyZW50KCkgJiYgdGhpcy5wYXJlbnQo KS5hZGQoKTsKKyAgICAgICAgICAgIHBhcmVudCAmJiBwYXJlbnQuYWRkKCk7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg ICAvKlwKKyAgICAgKiBFbGVtZW50LnByZXBlbmRUbworICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUHJlcGVuZHMgdGhlIGN1cnJlbnQgZWxl bWVudCB0byB0aGUgZ2l2ZW4gb25lCisgICAgICoqCisgICAgIC0gZWwgKEVs ZW1lbnQpIHBhcmVudCBlbGVtZW50IHRvIHByZXBlbmQgdG8KKyAgICAgPSAo RWxlbWVudCkgdGhlIGNoaWxkIGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHBy b3RvLnByZXBlbmRUbyA9IGZ1bmN0aW9uIChlbCkgeworICAgICAgICBlbCA9 IHdyYXAoZWwpOworICAgICAgICBlbC5wcmVwZW5kKHRoaXMpOworICAgICAg ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1l bnQuYmVmb3JlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBJ bnNlcnRzIGdpdmVuIGVsZW1lbnQgYmVmb3JlIHRoZSBjdXJyZW50IG9uZQor ICAgICAqKgorICAgICAtIGVsIChFbGVtZW50KSBlbGVtZW50IHRvIGluc2Vy dAorICAgICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICBc Ki8KKyAgICBlbHByb3RvLmJlZm9yZSA9IGZ1bmN0aW9uIChlbCkgeworICAg ICAgICBpZiAoZWwudHlwZSA9PSAic2V0IikgeworICAgICAgICAgICAgdmFy IGl0ID0gdGhpczsKKyAgICAgICAgICAgIGVsLmZvckVhY2goZnVuY3Rpb24g KGVsKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVu dCgpOworICAgICAgICAgICAgICAgIGl0Lm5vZGUucGFyZW50Tm9kZS5pbnNl cnRCZWZvcmUoZWwubm9kZSwgaXQubm9kZSk7CisgICAgICAgICAgICAgICAg cGFyZW50ICYmIHBhcmVudC5hZGQoKTsKKyAgICAgICAgICAgIH0pOworICAg ICAgICAgICAgdGhpcy5wYXJlbnQoKS5hZGQoKTsKKyAgICAgICAgICAgIHJl dHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGVsID0gd3JhcChlbCk7 CisgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQoKTsKKyAgICAgICAg dGhpcy5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLm5vZGUsIHRo aXMubm9kZSk7CisgICAgICAgIHRoaXMucGFyZW50KCkgJiYgdGhpcy5wYXJl bnQoKS5hZGQoKTsKKyAgICAgICAgcGFyZW50ICYmIHBhcmVudC5hZGQoKTsK KyAgICAgICAgZWwucGFwZXIgPSB0aGlzLnBhcGVyOworICAgICAgICByZXR1 cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuYWZ0 ZXIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEluc2VydHMg Z2l2ZW4gZWxlbWVudCBhZnRlciB0aGUgY3VycmVudCBvbmUKKyAgICAgKioK KyAgICAgLSBlbCAoRWxlbWVudCkgZWxlbWVudCB0byBpbnNlcnQKKyAgICAg PSAoRWxlbWVudCkgdGhlIHBhcmVudCBlbGVtZW50CisgICAgXCovCisgICAg ZWxwcm90by5hZnRlciA9IGZ1bmN0aW9uIChlbCkgeworICAgICAgICBlbCA9 IHdyYXAoZWwpOworICAgICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50KCk7 CisgICAgICAgIGlmICh0aGlzLm5vZGUubmV4dFNpYmxpbmcpIHsKKyAgICAg ICAgICAgIHRoaXMubm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbC5u b2RlLCB0aGlzLm5vZGUubmV4dFNpYmxpbmcpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgdGhpcy5ub2RlLnBhcmVudE5vZGUuYXBwZW5kQ2hp bGQoZWwubm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5wYXJlbnQo KSAmJiB0aGlzLnBhcmVudCgpLmFkZCgpOworICAgICAgICBwYXJlbnQgJiYg cGFyZW50LmFkZCgpOworICAgICAgICBlbC5wYXBlciA9IHRoaXMucGFwZXI7 CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAg ICogRWxlbWVudC5pbnNlcnRCZWZvcmUKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIEluc2VydHMgdGhlIGVsZW1lbnQgYWZ0ZXIgdGhlIGdp dmVuIG9uZQorICAgICAqKgorICAgICAtIGVsIChFbGVtZW50KSBlbGVtZW50 IG5leHQgdG8gd2hvbSBpbnNlcnQgdG8KKyAgICAgPSAoRWxlbWVudCkgdGhl IHBhcmVudCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90by5pbnNlcnRC ZWZvcmUgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgZWwgPSB3cmFwKGVs KTsKKyAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50KCk7CisgICAg ICAgIGVsLm5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5ub2Rl LCBlbC5ub2RlKTsKKyAgICAgICAgdGhpcy5wYXBlciA9IGVsLnBhcGVyOwor ICAgICAgICBwYXJlbnQgJiYgcGFyZW50LmFkZCgpOworICAgICAgICBlbC5w YXJlbnQoKSAmJiBlbC5wYXJlbnQoKS5hZGQoKTsKKyAgICAgICAgcmV0dXJu IHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lmluc2Vy dEFmdGVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBJbnNl cnRzIHRoZSBlbGVtZW50IGFmdGVyIHRoZSBnaXZlbiBvbmUKKyAgICAgKioK KyAgICAgLSBlbCAoRWxlbWVudCkgZWxlbWVudCBuZXh0IHRvIHdob20gaW5z ZXJ0IHRvCisgICAgID0gKEVsZW1lbnQpIHRoZSBwYXJlbnQgZWxlbWVudAor ICAgIFwqLworICAgIGVscHJvdG8uaW5zZXJ0QWZ0ZXIgPSBmdW5jdGlvbiAo ZWwpIHsKKyAgICAgICAgZWwgPSB3cmFwKGVsKTsKKyAgICAgICAgdmFyIHBh cmVudCA9IHRoaXMucGFyZW50KCk7CisgICAgICAgIGVsLm5vZGUucGFyZW50 Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5ub2RlLCBlbC5ub2RlLm5leHRTaWJs aW5nKTsKKyAgICAgICAgdGhpcy5wYXBlciA9IGVsLnBhcGVyOworICAgICAg ICBwYXJlbnQgJiYgcGFyZW50LmFkZCgpOworICAgICAgICBlbC5wYXJlbnQo KSAmJiBlbC5wYXJlbnQoKS5hZGQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7 CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnJlbW92ZQorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBlbGVtZW50 IGZyb20gdGhlIERPTQorICAgICA9IChFbGVtZW50KSB0aGUgZGV0YWNoZWQg ZWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8ucmVtb3ZlID0gZnVuY3Rp b24gKCkgeworICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQoKTsK KyAgICAgICAgdGhpcy5ub2RlLnBhcmVudE5vZGUgJiYgdGhpcy5ub2RlLnBh cmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5ub2RlKTsKKyAgICAgICAgZGVs ZXRlIHRoaXMucGFwZXI7CisgICAgICAgIHRoaXMucmVtb3ZlZCA9IHRydWU7 CisgICAgICAgIHBhcmVudCAmJiBwYXJlbnQuYWRkKCk7CisgICAgICAgIHJl dHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5z ZWxlY3QKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEdhdGhl cnMgdGhlIG5lc3RlZCBARWxlbWVudCBtYXRjaGluZyB0aGUgZ2l2ZW4gc2V0 IG9mIENTUyBzZWxlY3RvcnMKKyAgICAgKioKKyAgICAgLSBxdWVyeSAoc3Ry aW5nKSBDU1Mgc2VsZWN0b3IKKyAgICAgPSAoRWxlbWVudCkgcmVzdWx0IG9m IHF1ZXJ5IHNlbGVjdGlvbgorICAgIFwqLworICAgIGVscHJvdG8uc2VsZWN0 ID0gZnVuY3Rpb24gKHF1ZXJ5KSB7CisgICAgICAgIHJldHVybiB3cmFwKHRo aXMubm9kZS5xdWVyeVNlbGVjdG9yKHF1ZXJ5KSk7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBFbGVtZW50LnNlbGVjdEFsbAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogR2F0aGVycyBuZXN0ZWQgQEVsZW1lbnQgb2Jq ZWN0cyBtYXRjaGluZyB0aGUgZ2l2ZW4gc2V0IG9mIENTUyBzZWxlY3RvcnMK KyAgICAgKioKKyAgICAgLSBxdWVyeSAoc3RyaW5nKSBDU1Mgc2VsZWN0b3IK KyAgICAgPSAoU2V0fGFycmF5KSByZXN1bHQgb2YgcXVlcnkgc2VsZWN0aW9u CisgICAgXCovCisgICAgZWxwcm90by5zZWxlY3RBbGwgPSBmdW5jdGlvbiAo cXVlcnkpIHsKKyAgICAgICAgdmFyIG5vZGVsaXN0ID0gdGhpcy5ub2RlLnF1 ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLAorICAgICAgICAgICAgc2V0ID0gKFNu YXAuc2V0IHx8IEFycmF5KSgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsg aSA8IG5vZGVsaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBzZXQu cHVzaCh3cmFwKG5vZGVsaXN0W2ldKSk7CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIHNldDsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQu YXNQWAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJu cyBnaXZlbiBhdHRyaWJ1dGUgb2YgdGhlIGVsZW1lbnQgYXMgYSBgcHhgIHZh bHVlIChub3QgJSwgZW0sIGV0Yy4pCisgICAgICoqCisgICAgIC0gYXR0ciAo c3RyaW5nKSBhdHRyaWJ1dGUgbmFtZQorICAgICAtIHZhbHVlIChzdHJpbmcp ICNvcHRpb25hbCBhdHRyaWJ1dGUgdmFsdWUKKyAgICAgPSAoRWxlbWVudCkg cmVzdWx0IG9mIHF1ZXJ5IHNlbGVjdGlvbgorICAgIFwqLworICAgIGVscHJv dG8uYXNQWCA9IGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSkgeworICAgICAgICBp ZiAodmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgdmFsdWUgPSB0aGlz LmF0dHIoYXR0cik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICt1bml0 MnB4KHRoaXMsIGF0dHIsIHZhbHVlKTsKKyAgICB9OworICAgIC8vIFNJRVJS QSBFbGVtZW50LnVzZSgpOiBJIHN1Z2dlc3QgYWRkaW5nIGEgbm90ZSBhYm91 dCBob3cgdG8gYWNjZXNzIHRoZSBvcmlnaW5hbCBlbGVtZW50IHRoZSByZXR1 cm5lZCA8dXNlPiBpbnN0YW50aWF0ZXMuIEl0J3MgYSBwYXJ0IG9mIFNWRyB3 aXRoIHdoaWNoIG9yZGluYXJ5IHdlYiBkZXZlbG9wZXJzIG1heSBiZSBsZWFz dCBmYW1pbGlhci4KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnVzZQorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ3JlYXRlcyBhIGA8dXNl PmAgZWxlbWVudCBsaW5rZWQgdG8gdGhlIGN1cnJlbnQgZWxlbWVudAorICAg ICAqKgorICAgICA9IChFbGVtZW50KSB0aGUgYDx1c2U+YCBlbGVtZW50Cisg ICAgXCovCisgICAgZWxwcm90by51c2UgPSBmdW5jdGlvbiAoKSB7CisgICAg ICAgIHZhciB1c2UsCisgICAgICAgICAgICBpZCA9IHRoaXMubm9kZS5pZDsK KyAgICAgICAgaWYgKCFpZCkgeworICAgICAgICAgICAgaWQgPSB0aGlzLmlk OworICAgICAgICAgICAgJCh0aGlzLm5vZGUsIHsKKyAgICAgICAgICAgICAg ICBpZDogaWQKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAg IGlmICh0aGlzLnR5cGUgPT0gImxpbmVhckdyYWRpZW50IiB8fCB0aGlzLnR5 cGUgPT0gInJhZGlhbEdyYWRpZW50IiB8fAorICAgICAgICAgICAgdGhpcy50 eXBlID09ICJwYXR0ZXJuIikgeworICAgICAgICAgICAgdXNlID0gbWFrZSh0 aGlzLnR5cGUsIHRoaXMubm9kZS5wYXJlbnROb2RlKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIHVzZSA9IG1ha2UoInVzZSIsIHRoaXMubm9k ZS5wYXJlbnROb2RlKTsKKyAgICAgICAgfQorICAgICAgICAkKHVzZS5ub2Rl LCB7CisgICAgICAgICAgICAieGxpbms6aHJlZiI6ICIjIiArIGlkCisgICAg ICAgIH0pOworICAgICAgICB1c2Uub3JpZ2luYWwgPSB0aGlzOworICAgICAg ICByZXR1cm4gdXNlOworICAgIH07CisgICAgZnVuY3Rpb24gZml4aWRzKGVs KSB7CisgICAgICAgIHZhciBlbHMgPSBlbC5zZWxlY3RBbGwoIioiKSwKKyAg ICAgICAgICAgIGl0LAorICAgICAgICAgICAgdXJsID0gL15ccyp1cmxcKCgi fCd8KSguKilcMVwpXHMqJC8sCisgICAgICAgICAgICBpZHMgPSBbXSwKKyAg ICAgICAgICAgIHVzZXMgPSB7fTsKKyAgICAgICAgZnVuY3Rpb24gdXJsdGVz dChpdCwgbmFtZSkgeworICAgICAgICAgICAgdmFyIHZhbCA9ICQoaXQubm9k ZSwgbmFtZSk7CisgICAgICAgICAgICB2YWwgPSB2YWwgJiYgdmFsLm1hdGNo KHVybCk7CisgICAgICAgICAgICB2YWwgPSB2YWwgJiYgdmFsWzJdOworICAg ICAgICAgICAgaWYgKHZhbCAmJiB2YWwuY2hhckF0KCkgPT0gIiMiKSB7Cisg ICAgICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbCkgeworICAgICAgICAg ICAgICAgIHVzZXNbdmFsXSA9ICh1c2VzW3ZhbF0gfHwgW10pLmNvbmNhdChm dW5jdGlvbiAoaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIg PSB7fTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cltuYW1lXSA9IFVSTChp ZCk7CisgICAgICAgICAgICAgICAgICAgICQoaXQubm9kZSwgYXR0cik7Cisg ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgZnVuY3Rpb24gbGlua3Rlc3QoaXQpIHsKKyAgICAgICAgICAg IHZhciB2YWwgPSAkKGl0Lm5vZGUsICJ4bGluazpocmVmIik7CisgICAgICAg ICAgICBpZiAodmFsICYmIHZhbC5jaGFyQXQoKSA9PSAiIyIpIHsKKyAgICAg ICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDEpOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICAg ICAgdXNlc1t2YWxdID0gKHVzZXNbdmFsXSB8fCBbXSkuY29uY2F0KGZ1bmN0 aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICBpdC5hdHRyKCJ4bGlu azpocmVmIiwgIiMiICsgaWQpOworICAgICAgICAgICAgICAgIH0pOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAw LCBpaSA9IGVscy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICBpdCA9IGVsc1tpXTsKKyAgICAgICAgICAgIHVybHRlc3QoaXQsICJmaWxs Iik7CisgICAgICAgICAgICB1cmx0ZXN0KGl0LCAic3Ryb2tlIik7CisgICAg ICAgICAgICB1cmx0ZXN0KGl0LCAiZmlsdGVyIik7CisgICAgICAgICAgICB1 cmx0ZXN0KGl0LCAibWFzayIpOworICAgICAgICAgICAgdXJsdGVzdChpdCwg ImNsaXAtcGF0aCIpOworICAgICAgICAgICAgbGlua3Rlc3QoaXQpOworICAg ICAgICAgICAgdmFyIG9sZGlkID0gJChpdC5ub2RlLCAiaWQiKTsKKyAgICAg ICAgICAgIGlmIChvbGRpZCkgeworICAgICAgICAgICAgICAgICQoaXQubm9k ZSwge2lkOiBpdC5pZH0pOworICAgICAgICAgICAgICAgIGlkcy5wdXNoKHsK KyAgICAgICAgICAgICAgICAgICAgb2xkOiBvbGRpZCwKKyAgICAgICAgICAg ICAgICAgICAgaWQ6IGl0LmlkCisgICAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMCwgaWkg PSBpZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFy IGZzID0gdXNlc1tpZHNbaV0ub2xkXTsKKyAgICAgICAgICAgIGlmIChmcykg eworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGZzLmxl bmd0aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZnNb al0oaWRzW2ldLmlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLypcCisgICAgICogRWxlbWVu dC5jbG9uZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ3Jl YXRlcyBhIGNsb25lIG9mIHRoZSBlbGVtZW50IGFuZCBpbnNlcnRzIGl0IGFm dGVyIHRoZSBlbGVtZW50CisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIHRo ZSBjbG9uZQorICAgIFwqLworICAgIGVscHJvdG8uY2xvbmUgPSBmdW5jdGlv biAoKSB7CisgICAgICAgIHZhciBjbG9uZSA9IHdyYXAodGhpcy5ub2RlLmNs b25lTm9kZSh0cnVlKSk7CisgICAgICAgIGlmICgkKGNsb25lLm5vZGUsICJp ZCIpKSB7CisgICAgICAgICAgICAkKGNsb25lLm5vZGUsIHtpZDogY2xvbmUu aWR9KTsKKyAgICAgICAgfQorICAgICAgICBmaXhpZHMoY2xvbmUpOworICAg ICAgICBjbG9uZS5pbnNlcnRBZnRlcih0aGlzKTsKKyAgICAgICAgcmV0dXJu IGNsb25lOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC50b0Rl ZnMKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIE1vdmVzIGVs ZW1lbnQgdG8gdGhlIHNoYXJlZCBgPGRlZnM+YCBhcmVhCisgICAgICoqCisg ICAgID0gKEVsZW1lbnQpIHRoZSBlbGVtZW50CisgICAgXCovCisgICAgZWxw cm90by50b0RlZnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBkZWZz ID0gZ2V0U29tZURlZnModGhpcyk7CisgICAgICAgIGRlZnMuYXBwZW5kQ2hp bGQodGhpcy5ub2RlKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnRvUGF0dGVybgorICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogQ3JlYXRlcyBhIGA8cGF0dGVybj5g IGVsZW1lbnQgZnJvbSB0aGUgY3VycmVudCBlbGVtZW50CisgICAgICoqCisg ICAgICogVG8gY3JlYXRlIGEgcGF0dGVybiB5b3UgaGF2ZSB0byBzcGVjaWZ5 IHRoZSBwYXR0ZXJuIHJlY3Q6CisgICAgIC0geCAoc3RyaW5nfG51bWJlcikK KyAgICAgLSB5IChzdHJpbmd8bnVtYmVyKQorICAgICAtIHdpZHRoIChzdHJp bmd8bnVtYmVyKQorICAgICAtIGhlaWdodCAoc3RyaW5nfG51bWJlcikKKyAg ICAgPSAoRWxlbWVudCkgdGhlIGA8cGF0dGVybj5gIGVsZW1lbnQKKyAgICAg KiBZb3UgY2FuIHVzZSBwYXR0ZXJuIGxhdGVyIG9uIGFzIGFuIGFyZ3VtZW50 IGZvciBgZmlsbGAgYXR0cmlidXRlOgorICAgICB8IHZhciBwID0gcGFwZXIu cGF0aCgiTTEwLTUtMTAsMTVNMTUsMCwwLDE1TTAtNS0yMCwxNSIpLmF0dHIo eworICAgICB8ICAgICAgICAgZmlsbDogIm5vbmUiLAorICAgICB8ICAgICAg ICAgc3Ryb2tlOiAiI2JhZGE1NSIsCisgICAgIHwgICAgICAgICBzdHJva2VX aWR0aDogNQorICAgICB8ICAgICB9KS5wYXR0ZXJuKDAsIDAsIDEwLCAxMCks CisgICAgIHwgICAgIGMgPSBwYXBlci5jaXJjbGUoMjAwLCAyMDAsIDEwMCk7 CisgICAgIHwgYy5hdHRyKHsKKyAgICAgfCAgICAgZmlsbDogcAorICAgICB8 IH0pOworICAgIFwqLworICAgIGVscHJvdG8ucGF0dGVybiA9IGVscHJvdG8u dG9QYXR0ZXJuID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpIHsK KyAgICAgICAgdmFyIHAgPSBtYWtlKCJwYXR0ZXJuIiwgZ2V0U29tZURlZnMo dGhpcykpOworICAgICAgICBpZiAoeCA9PSBudWxsKSB7CisgICAgICAgICAg ICB4ID0gdGhpcy5nZXRCQm94KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGlzKHgsICJvYmplY3QiKSAmJiAieCIgaW4geCkgeworICAgICAgICAgICAg eSA9IHgueTsKKyAgICAgICAgICAgIHdpZHRoID0geC53aWR0aDsKKyAgICAg ICAgICAgIGhlaWdodCA9IHguaGVpZ2h0OworICAgICAgICAgICAgeCA9IHgu eDsKKyAgICAgICAgfQorICAgICAgICAkKHAubm9kZSwgeworICAgICAgICAg ICAgeDogeCwKKyAgICAgICAgICAgIHk6IHksCisgICAgICAgICAgICB3aWR0 aDogd2lkdGgsCisgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAgICAg ICAgICAgIHBhdHRlcm5Vbml0czogInVzZXJTcGFjZU9uVXNlIiwKKyAgICAg ICAgICAgIGlkOiBwLmlkLAorICAgICAgICAgICAgdmlld0JveDogW3gsIHks IHdpZHRoLCBoZWlnaHRdLmpvaW4oIiAiKQorICAgICAgICB9KTsKKyAgICAg ICAgcC5ub2RlLmFwcGVuZENoaWxkKHRoaXMubm9kZSk7CisgICAgICAgIHJl dHVybiBwOworICAgIH07CisvLyBTSUVSUkEgRWxlbWVudC5tYXJrZXIoKTog Y2xhcmlmeSB3aGF0IGEgcmVmZXJlbmNlIHBvaW50IGlzLiBFLmcuLCBoZWxw cyB5b3Ugb2Zmc2V0IHRoZSBvYmplY3QgZnJvbSBpdHMgZWRnZSBzdWNoIGFz IHdoZW4gY2VudGVyaW5nIGl0IG92ZXIgYSBwYXRoLgorLy8gU0lFUlJBIEVs ZW1lbnQubWFya2VyKCk6IEkgc3VnZ2VzdCB0aGUgbWV0aG9kIHNob3VsZCBh Y2NlcHQgZGVmYXVsdCByZWZlcmVuY2UgcG9pbnQgdmFsdWVzLiAgUGVyaGFw cyBjZW50ZXJlZCB3aXRoIChyZWZYID0gd2lkdGgvMikgYW5kIChyZWZZID0g aGVpZ2h0LzIpPyBBbHNvLCBjb3VsZG4ndCBpdCBhc3N1bWUgdGhlIGVsZW1l bnQncyBjdXJyZW50IF93aWR0aF8gYW5kIF9oZWlnaHRfPyBBbmQgcGxlYXNl IHNwZWNpZnkgd2hhdCBfeF8gYW5kIF95XyBtZWFuOiBvZmZzZXRzPyBJZiBz bywgZnJvbSB3aGVyZT8gIENvdWxkbid0IHRoZXkgYWxzbyBiZSBhc3NpZ25l ZCBkZWZhdWx0IHZhbHVlcz8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm1h cmtlcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ3JlYXRl cyBhIGA8bWFya2VyPmAgZWxlbWVudCBmcm9tIHRoZSBjdXJyZW50IGVsZW1l bnQKKyAgICAgKioKKyAgICAgKiBUbyBjcmVhdGUgYSBtYXJrZXIgeW91IGhh dmUgdG8gc3BlY2lmeSB0aGUgYm91bmRpbmcgcmVjdCBhbmQgcmVmZXJlbmNl IHBvaW50OgorICAgICAtIHggKG51bWJlcikKKyAgICAgLSB5IChudW1iZXIp CisgICAgIC0gd2lkdGggKG51bWJlcikKKyAgICAgLSBoZWlnaHQgKG51bWJl cikKKyAgICAgLSByZWZYIChudW1iZXIpCisgICAgIC0gcmVmWSAobnVtYmVy KQorICAgICA9IChFbGVtZW50KSB0aGUgYDxtYXJrZXI+YCBlbGVtZW50Cisg ICAgICogWW91IGNhbiBzcGVjaWZ5IHRoZSBtYXJrZXIgbGF0ZXIgYXMgYW4g YXJndW1lbnQgZm9yIGBtYXJrZXItc3RhcnRgLCBgbWFya2VyLWVuZGAsIGBt YXJrZXItbWlkYCwgYW5kIGBtYXJrZXJgIGF0dHJpYnV0ZXMuIFRoZSBgbWFy a2VyYCBhdHRyaWJ1dGUgcGxhY2VzIHRoZSBtYXJrZXIgYXQgZXZlcnkgcG9p bnQgYWxvbmcgdGhlIHBhdGgsIGFuZCBgbWFya2VyLW1pZGAgcGxhY2VzIHRo ZW0gYXQgZXZlcnkgcG9pbnQgZXhjZXB0IHRoZSBzdGFydCBhbmQgZW5kLgor ICAgIFwqLworICAgIC8vIFRPRE8gYWRkIHVzYWdlIGZvciBtYXJrZXJzCisg ICAgZWxwcm90by5tYXJrZXIgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhl aWdodCwgcmVmWCwgcmVmWSkgeworICAgICAgICB2YXIgcCA9IG1ha2UoIm1h cmtlciIsIGdldFNvbWVEZWZzKHRoaXMpKTsKKyAgICAgICAgaWYgKHggPT0g bnVsbCkgeworICAgICAgICAgICAgeCA9IHRoaXMuZ2V0QkJveCgpOworICAg ICAgICB9CisgICAgICAgIGlmIChpcyh4LCAib2JqZWN0IikgJiYgIngiIGlu IHgpIHsKKyAgICAgICAgICAgIHkgPSB4Lnk7CisgICAgICAgICAgICB3aWR0 aCA9IHgud2lkdGg7CisgICAgICAgICAgICBoZWlnaHQgPSB4LmhlaWdodDsK KyAgICAgICAgICAgIHJlZlggPSB4LnJlZlggfHwgeC5jeDsKKyAgICAgICAg ICAgIHJlZlkgPSB4LnJlZlkgfHwgeC5jeTsKKyAgICAgICAgICAgIHggPSB4 Lng7CisgICAgICAgIH0KKyAgICAgICAgJChwLm5vZGUsIHsKKyAgICAgICAg ICAgIHZpZXdCb3g6IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XS5qb2luKCIgIiks CisgICAgICAgICAgICBtYXJrZXJXaWR0aDogd2lkdGgsCisgICAgICAgICAg ICBtYXJrZXJIZWlnaHQ6IGhlaWdodCwKKyAgICAgICAgICAgIG9yaWVudDog ImF1dG8iLAorICAgICAgICAgICAgcmVmWDogcmVmWCB8fCAwLAorICAgICAg ICAgICAgcmVmWTogcmVmWSB8fCAwLAorICAgICAgICAgICAgaWQ6IHAuaWQK KyAgICAgICAgfSk7CisgICAgICAgIHAubm9kZS5hcHBlbmRDaGlsZCh0aGlz Lm5vZGUpOworICAgICAgICByZXR1cm4gcDsKKyAgICB9OworICAgIC8vIGFu aW1hdGlvbgorICAgIGZ1bmN0aW9uIHNsaWNlKGZyb20sIHRvLCBmKSB7Cisg ICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyKSB7CisgICAgICAgICAgICB2 YXIgcmVzID0gYXJyLnNsaWNlKGZyb20sIHRvKTsKKyAgICAgICAgICAgIGlm IChyZXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXMgPSBy ZXNbMF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZiA/ IGYocmVzKSA6IHJlczsKKyAgICAgICAgfTsKKyAgICB9CisgICAgdmFyIEFu aW1hdGlvbiA9IGZ1bmN0aW9uIChhdHRyLCBtcywgZWFzaW5nLCBjYWxsYmFj aykgeworICAgICAgICBpZiAodHlwZW9mIGVhc2luZyA9PSAiZnVuY3Rpb24i ICYmICFlYXNpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9 IGVhc2luZzsKKyAgICAgICAgICAgIGVhc2luZyA9IG1pbmEubGluZWFyOwor ICAgICAgICB9CisgICAgICAgIHRoaXMuYXR0ciA9IGF0dHI7CisgICAgICAg IHRoaXMuZHVyID0gbXM7CisgICAgICAgIGVhc2luZyAmJiAodGhpcy5lYXNp bmcgPSBlYXNpbmcpOworICAgICAgICBjYWxsYmFjayAmJiAodGhpcy5jYWxs YmFjayA9IGNhbGxiYWNrKTsKKyAgICB9OworICAgIFNuYXAuXy5BbmltYXRp b24gPSBBbmltYXRpb247CisgICAgLypcCisgICAgICogU25hcC5hbmltYXRp b24KKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMg YW4gYW5pbWF0aW9uIG9iamVjdAorICAgICAqKgorICAgICAtIGF0dHIgKG9i amVjdCkgYXR0cmlidXRlcyBvZiBmaW5hbCBkZXN0aW5hdGlvbgorICAgICAt IGR1cmF0aW9uIChudW1iZXIpIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24s IGluIG1pbGxpc2Vjb25kcworICAgICAtIGVhc2luZyAoZnVuY3Rpb24pICNv cHRpb25hbCBvbmUgb2YgZWFzaW5nIGZ1bmN0aW9ucyBvZiBAbWluYSBvciBj dXN0b20gb25lCisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSAjb3B0aW9u YWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBmaXJlcyB3aGVuIGFuaW1hdGlv biBlbmRzCisgICAgID0gKG9iamVjdCkgYW5pbWF0aW9uIG9iamVjdAorICAg IFwqLworICAgIFNuYXAuYW5pbWF0aW9uID0gZnVuY3Rpb24gKGF0dHIsIG1z LCBlYXNpbmcsIGNhbGxiYWNrKSB7CisgICAgICAgIHJldHVybiBuZXcgQW5p bWF0aW9uKGF0dHIsIG1zLCBlYXNpbmcsIGNhbGxiYWNrKTsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIEVsZW1lbnQuaW5BbmltCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGEgc2V0IG9mIGFuaW1hdGlv bnMgdGhhdCBtYXkgYmUgYWJsZSB0byBtYW5pcHVsYXRlIHRoZSBjdXJyZW50 IGVsZW1lbnQKKyAgICAgKioKKyAgICAgPSAob2JqZWN0KSBpbiBmb3JtYXQ6 CisgICAgIG8geworICAgICBvICAgICBhbmltIChvYmplY3QpIGFuaW1hdGlv biBvYmplY3QsCisgICAgIG8gICAgIG1pbmEgKG9iamVjdCkgQG1pbmEgb2Jq ZWN0LAorICAgICBvICAgICBjdXJTdGF0dXMgKG51bWJlcikgMC4uMSDigJQg c3RhdHVzIG9mIHRoZSBhbmltYXRpb246IDAg4oCUIGp1c3Qgc3RhcnRlZCwg MSDigJQganVzdCBmaW5pc2hlZCwKKyAgICAgbyAgICAgc3RhdHVzIChmdW5j dGlvbikgZ2V0cyBvciBzZXRzIHRoZSBzdGF0dXMgb2YgdGhlIGFuaW1hdGlv biwKKyAgICAgbyAgICAgc3RvcCAoZnVuY3Rpb24pIHN0b3BzIHRoZSBhbmlt YXRpb24KKyAgICAgbyB9CisgICAgXCovCisgICAgZWxwcm90by5pbkFuaW0g PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBlbCA9IHRoaXMsCisgICAg ICAgICAgICByZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gZWwu YW5pbXMpIGlmIChlbC5hbmltc1toYXNdKGlkKSkgeworICAgICAgICAgICAg KGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAgcmVzLnB1c2goewor ICAgICAgICAgICAgICAgICAgICBhbmltOiBuZXcgQW5pbWF0aW9uKGEuX2F0 dHJzLCBhLmR1ciwgYS5lYXNpbmcsIGEuX2NhbGxiYWNrKSwKKyAgICAgICAg ICAgICAgICAgICAgbWluYTogYSwKKyAgICAgICAgICAgICAgICAgICAgY3Vy U3RhdHVzOiBhLnN0YXR1cygpLAorICAgICAgICAgICAgICAgICAgICBzdGF0 dXM6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBhLnN0YXR1cyh2YWwpOworICAgICAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiAoKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBhLnN0b3AoKTsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg fShlbC5hbmltc1tpZF0pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g cmVzOworICAgIH07CisgICAgLypcCisgICAgICogU25hcC5hbmltYXRlCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSdW5zIGdlbmVyaWMg YW5pbWF0aW9uIG9mIG9uZSBudW1iZXIgaW50byBhbm90aGVyIHdpdGggYSBj YXJpbmcgZnVuY3Rpb24KKyAgICAgKioKKyAgICAgLSBmcm9tIChudW1iZXJ8 YXJyYXkpIG51bWJlciBvciBhcnJheSBvZiBudW1iZXJzCisgICAgIC0gdG8g KG51bWJlcnxhcnJheSkgbnVtYmVyIG9yIGFycmF5IG9mIG51bWJlcnMKKyAg ICAgLSBzZXR0ZXIgKGZ1bmN0aW9uKSBjYXJpbmcgZnVuY3Rpb24gdGhhdCBh Y2NlcHRzIG9uZSBudW1iZXIgYXJndW1lbnQKKyAgICAgLSBkdXJhdGlvbiAo bnVtYmVyKSBkdXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzCisgICAgIC0gZWFz aW5nIChmdW5jdGlvbikgI29wdGlvbmFsIGVhc2luZyBmdW5jdGlvbiBmcm9t IEBtaW5hIG9yIGN1c3RvbQorICAgICAtIGNhbGxiYWNrIChmdW5jdGlvbikg I29wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiBh bmltYXRpb24gZW5kcworICAgICA9IChvYmplY3QpIGFuaW1hdGlvbiBvYmpl Y3QgaW4gQG1pbmEgZm9ybWF0CisgICAgIG8geworICAgICBvICAgICBpZCAo c3RyaW5nKSBhbmltYXRpb24gaWQsIGNvbnNpZGVyIGl0IHJlYWQtb25seSwK KyAgICAgbyAgICAgZHVyYXRpb24gKGZ1bmN0aW9uKSBnZXRzIG9yIHNldHMg dGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24sCisgICAgIG8gICAgIGVh c2luZyAoZnVuY3Rpb24pIGVhc2luZywKKyAgICAgbyAgICAgc3BlZWQgKGZ1 bmN0aW9uKSBnZXRzIG9yIHNldHMgdGhlIHNwZWVkIG9mIHRoZSBhbmltYXRp b24sCisgICAgIG8gICAgIHN0YXR1cyAoZnVuY3Rpb24pIGdldHMgb3Igc2V0 cyB0aGUgc3RhdHVzIG9mIHRoZSBhbmltYXRpb24sCisgICAgIG8gICAgIHN0 b3AgKGZ1bmN0aW9uKSBzdG9wcyB0aGUgYW5pbWF0aW9uCisgICAgIG8gfQor ICAgICB8IHZhciByZWN0ID0gU25hcCgpLnJlY3QoMCwgMCwgMTAsIDEwKTsK KyAgICAgfCBTbmFwLmFuaW1hdGUoMCwgMTAsIGZ1bmN0aW9uICh2YWwpIHsK KyAgICAgfCAgICAgcmVjdC5hdHRyKHsKKyAgICAgfCAgICAgICAgIHg6IHZh bAorICAgICB8ICAgICB9KTsKKyAgICAgfCB9LCAxMDAwKTsKKyAgICAgfCAv LyBpbiBnaXZlbiBjb250ZXh0IGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgfCBy ZWN0LmFuaW1hdGUoe3g6IDEwfSwgMTAwMCk7CisgICAgXCovCisgICAgU25h cC5hbmltYXRlID0gZnVuY3Rpb24gKGZyb20sIHRvLCBzZXR0ZXIsIG1zLCBl YXNpbmcsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICh0eXBlb2YgZWFzaW5n ID09ICJmdW5jdGlvbiIgJiYgIWVhc2luZy5sZW5ndGgpIHsKKyAgICAgICAg ICAgIGNhbGxiYWNrID0gZWFzaW5nOworICAgICAgICAgICAgZWFzaW5nID0g bWluYS5saW5lYXI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG5vdyA9IG1p bmEudGltZSgpLAorICAgICAgICAgICAgYW5pbSA9IG1pbmEoZnJvbSwgdG8s IG5vdywgbm93ICsgbXMsIG1pbmEudGltZSwgc2V0dGVyLCBlYXNpbmcpOwor ICAgICAgICBjYWxsYmFjayAmJiBldmUub25jZSgibWluYS5maW5pc2guIiAr IGFuaW0uaWQsIGNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuIGFuaW07Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnN0b3AKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIFN0b3BzIGFsbCB0aGUgYW5pbWF0 aW9ucyBmb3IgdGhlIGN1cnJlbnQgZWxlbWVudAorICAgICAqKgorICAgICA9 IChFbGVtZW50KSB0aGUgY3VycmVudCBlbGVtZW50CisgICAgXCovCisgICAg ZWxwcm90by5zdG9wID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYW5p bXMgPSB0aGlzLmluQW5pbSgpOworICAgICAgICBmb3IgKHZhciBpID0gMCwg aWkgPSBhbmltcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICBhbmltc1tpXS5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFuaW1h dGUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFuaW1hdGVz IHRoZSBnaXZlbiBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50CisgICAgICoq CisgICAgIC0gYXR0cnMgKG9iamVjdCkga2V5LXZhbHVlIHBhaXJzIG9mIGRl c3RpbmF0aW9uIGF0dHJpYnV0ZXMKKyAgICAgLSBkdXJhdGlvbiAobnVtYmVy KSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGluIG1pbGxpc2Vjb25kcwor ICAgICAtIGVhc2luZyAoZnVuY3Rpb24pICNvcHRpb25hbCBlYXNpbmcgZnVu Y3Rpb24gZnJvbSBAbWluYSBvciBjdXN0b20KKyAgICAgLSBjYWxsYmFjayAo ZnVuY3Rpb24pICNvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGV4 ZWN1dGVzIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzCisgICAgID0gKEVsZW1l bnQpIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3Rv LmFuaW1hdGUgPSBmdW5jdGlvbiAoYXR0cnMsIG1zLCBlYXNpbmcsIGNhbGxi YWNrKSB7CisgICAgICAgIGlmICh0eXBlb2YgZWFzaW5nID09ICJmdW5jdGlv biIgJiYgIWVhc2luZy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGNhbGxiYWNr ID0gZWFzaW5nOworICAgICAgICAgICAgZWFzaW5nID0gbWluYS5saW5lYXI7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF0dHJzIGluc3RhbmNlb2YgQW5p bWF0aW9uKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IGF0dHJzLmNhbGxi YWNrOworICAgICAgICAgICAgZWFzaW5nID0gYXR0cnMuZWFzaW5nOworICAg ICAgICAgICAgbXMgPSBhdHRycy5kdXI7CisgICAgICAgICAgICBhdHRycyA9 IGF0dHJzLmF0dHI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGZrZXlzID0g W10sIHRrZXlzID0gW10sIGtleXMgPSB7fSwgZnJvbSwgdG8sIGYsIGVxLAor ICAgICAgICAgICAgZWwgPSB0aGlzOworICAgICAgICBmb3IgKHZhciBrZXkg aW4gYXR0cnMpIGlmIChhdHRyc1toYXNdKGtleSkpIHsKKyAgICAgICAgICAg IGlmIChlbC5lcXVhbCkgeworICAgICAgICAgICAgICAgIGVxID0gZWwuZXF1 YWwoa2V5LCBTdHIoYXR0cnNba2V5XSkpOworICAgICAgICAgICAgICAgIGZy b20gPSBlcS5mcm9tOworICAgICAgICAgICAgICAgIHRvID0gZXEudG87Cisg ICAgICAgICAgICAgICAgZiA9IGVxLmY7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIGZyb20gPSArZWwuYXR0cihrZXkpOworICAg ICAgICAgICAgICAgIHRvID0gK2F0dHJzW2tleV07CisgICAgICAgICAgICB9 CisgICAgICAgICAgICB2YXIgbGVuID0gaXMoZnJvbSwgImFycmF5IikgPyBm cm9tLmxlbmd0aCA6IDE7CisgICAgICAgICAgICBrZXlzW2tleV0gPSBzbGlj ZShma2V5cy5sZW5ndGgsIGZrZXlzLmxlbmd0aCArIGxlbiwgZik7CisgICAg ICAgICAgICBma2V5cyA9IGZrZXlzLmNvbmNhdChmcm9tKTsKKyAgICAgICAg ICAgIHRrZXlzID0gdGtleXMuY29uY2F0KHRvKTsKKyAgICAgICAgfQorICAg ICAgICB2YXIgbm93ID0gbWluYS50aW1lKCksCisgICAgICAgICAgICBhbmlt ID0gbWluYShma2V5cywgdGtleXMsIG5vdywgbm93ICsgbXMsIG1pbmEudGlt ZSwgZnVuY3Rpb24gKHZhbCkgeworICAgICAgICAgICAgICAgIHZhciBhdHRy ID0ge307CisgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGtleXMp IGlmIChrZXlzW2hhc10oa2V5KSkgeworICAgICAgICAgICAgICAgICAgICBh dHRyW2tleV0gPSBrZXlzW2tleV0odmFsKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgZWwuYXR0cihhdHRyKTsKKyAgICAgICAgICAg IH0sIGVhc2luZyk7CisgICAgICAgIGVsLmFuaW1zW2FuaW0uaWRdID0gYW5p bTsKKyAgICAgICAgYW5pbS5fYXR0cnMgPSBhdHRyczsKKyAgICAgICAgYW5p bS5fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgZXZlKCJzbmFwLmFu aW1jcmVhdGVkLiIgKyBlbC5pZCwgYW5pbSk7CisgICAgICAgIGV2ZS5vbmNl KCJtaW5hLmZpbmlzaC4iICsgYW5pbS5pZCwgZnVuY3Rpb24gKCkgeworICAg ICAgICAgICAgZGVsZXRlIGVsLmFuaW1zW2FuaW0uaWRdOworICAgICAgICAg ICAgY2FsbGJhY2sgJiYgY2FsbGJhY2suY2FsbChlbCk7CisgICAgICAgIH0p OworICAgICAgICBldmUub25jZSgibWluYS5zdG9wLiIgKyBhbmltLmlkLCBm dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBkZWxldGUgZWwuYW5pbXNbYW5p bS5pZF07CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gZWw7CisgICAg fTsKKyAgICB2YXIgZWxkYXRhID0ge307CisgICAgLypcCisgICAgICogRWxl bWVudC5kYXRhCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBB ZGRzIG9yIHJldHJpZXZlcyBnaXZlbiB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgg Z2l2ZW4ga2V5LiAoRG9u4oCZdCBjb25mdXNlCisgICAgICogd2l0aCBgZGF0 YS1gIGF0dHJpYnV0ZXMpCisgICAgICoKKyAgICAgKiBTZWUgYWxzbyBARWxl bWVudC5yZW1vdmVEYXRhCisgICAgIC0ga2V5IChzdHJpbmcpIGtleSB0byBz dG9yZSBkYXRhCisgICAgIC0gdmFsdWUgKGFueSkgI29wdGlvbmFsIHZhbHVl IHRvIHN0b3JlCisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICAgKiBv ciwgaWYgdmFsdWUgaXMgbm90IHNwZWNpZmllZDoKKyAgICAgPSAoYW55KSB2 YWx1ZQorICAgICA+IFVzYWdlCisgICAgIHwgZm9yICh2YXIgaSA9IDAsIGkg PCA1LCBpKyspIHsKKyAgICAgfCAgICAgcGFwZXIuY2lyY2xlKDEwICsgMTUg KiBpLCAxMCwgMTApCisgICAgIHwgICAgICAgICAgLmF0dHIoe2ZpbGw6ICIj MDAwIn0pCisgICAgIHwgICAgICAgICAgLmRhdGEoImkiLCBpKQorICAgICB8 ICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgIHwgICAgICAg ICAgICAgYWxlcnQodGhpcy5kYXRhKCJpIikpOworICAgICB8ICAgICAgICAg IH0pOworICAgICB8IH0KKyAgICBcKi8KKyAgICBlbHByb3RvLmRhdGEgPSBm dW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAgICAgICB2YXIgZGF0YSA9IGVs ZGF0YVt0aGlzLmlkXSA9IGVsZGF0YVt0aGlzLmlkXSB8fCB7fTsKKyAgICAg ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMCl7CisgICAgICAgICAgICBl dmUoInNuYXAuZGF0YS5nZXQuIiArIHRoaXMuaWQsIHRoaXMsIGRhdGEsIG51 bGwpOworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgeworICAgICAgICAg ICAgaWYgKFNuYXAuaXMoa2V5LCAib2JqZWN0IikpIHsKKyAgICAgICAgICAg ICAgICBmb3IgKHZhciBpIGluIGtleSkgaWYgKGtleVtoYXNdKGkpKSB7Cisg ICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YShpLCBrZXlbaV0pOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV2ZSgic25hcC5kYXRhLmdl dC4iICsgdGhpcy5pZCwgdGhpcywgZGF0YVtrZXldLCBrZXkpOworICAgICAg ICAgICAgcmV0dXJuIGRhdGFba2V5XTsKKyAgICAgICAgfQorICAgICAgICBk YXRhW2tleV0gPSB2YWx1ZTsKKyAgICAgICAgZXZlKCJzbmFwLmRhdGEuc2V0 LiIgKyB0aGlzLmlkLCB0aGlzLCB2YWx1ZSwga2V5KTsKKyAgICAgICAgcmV0 dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnJl bW92ZURhdGEKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJl bW92ZXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQgYnkgZ2l2 ZW4ga2V5LgorICAgICAqIElmIGtleSBpcyBub3QgcHJvdmlkZWQsIHJlbW92 ZXMgYWxsIHRoZSBkYXRhIG9mIHRoZSBlbGVtZW50LgorICAgICAtIGtleSAo c3RyaW5nKSAjb3B0aW9uYWwga2V5CisgICAgID0gKG9iamVjdCkgQEVsZW1l bnQKKyAgICBcKi8KKyAgICBlbHByb3RvLnJlbW92ZURhdGEgPSBmdW5jdGlv biAoa2V5KSB7CisgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgeworICAgICAg ICAgICAgZWxkYXRhW3RoaXMuaWRdID0ge307CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBlbGRhdGFbdGhpcy5pZF0gJiYgZGVsZXRlIGVsZGF0 YVt0aGlzLmlkXVtrZXldOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0 aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5vdXRlclNW RworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBT VkcgY29kZSBmb3IgdGhlIGVsZW1lbnQsIGVxdWl2YWxlbnQgdG8gSFRNTCdz IGBvdXRlckhUTUxgLgorICAgICAqCisgICAgICogU2VlIGFsc28gQEVsZW1l bnQuaW5uZXJTVkcKKyAgICAgPSAoc3RyaW5nKSBTVkcgY29kZSBmb3IgdGhl IGVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnRv U3RyaW5nCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBTZWUg QEVsZW1lbnQub3V0ZXJTVkcKKyAgICBcKi8KKyAgICBlbHByb3RvLm91dGVy U1ZHID0gZWxwcm90by50b1N0cmluZyA9IHRvU3RyaW5nKDEpOworICAgIC8q XAorICAgICAqIEVsZW1lbnQuaW5uZXJTVkcKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIFJldHVybnMgU1ZHIGNvZGUgZm9yIHRoZSBlbGVt ZW50J3MgY29udGVudHMsIGVxdWl2YWxlbnQgdG8gSFRNTCdzIGBpbm5lckhU TUxgCisgICAgID0gKHN0cmluZykgU1ZHIGNvZGUgZm9yIHRoZSBlbGVtZW50 CisgICAgXCovCisgICAgZWxwcm90by5pbm5lclNWRyA9IHRvU3RyaW5nKCk7 CisgICAgZnVuY3Rpb24gdG9TdHJpbmcodHlwZSkgeworICAgICAgICByZXR1 cm4gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHJlcyA9IHR5cGUg PyAiPCIgKyB0aGlzLnR5cGUgOiAiIiwKKyAgICAgICAgICAgICAgICBhdHRy ID0gdGhpcy5ub2RlLmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgY2hs ZCA9IHRoaXMubm9kZS5jaGlsZE5vZGVzOworICAgICAgICAgICAgaWYgKHR5 cGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBh dHRyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg ICAgcmVzICs9ICIgIiArIGF0dHJbaV0ubmFtZSArICc9IicgKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGF0dHJbaV0udmFsdWUucmVwbGFjZSgv Ii9nLCAnXFwiJykgKyAnIic7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKGNobGQubGVuZ3RoKSB7CisgICAg ICAgICAgICAgICAgdHlwZSAmJiAocmVzICs9ICI+Iik7CisgICAgICAgICAg ICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGxkLmxlbmd0aDsgaSA8IGlpOyBp KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNobGRbaV0ubm9kZVR5 cGUgPT0gMykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IGNo bGRbaV0ubm9kZVZhbHVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKGNobGRbaV0ubm9kZVR5cGUgPT0gMSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgcmVzICs9IHdyYXAoY2hsZFtpXSkudG9TdHJpbmcoKTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB0eXBlICYmIChyZXMgKz0gIjwvIiArIHRoaXMudHlwZSAr ICI+Iik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IHR5cGUgJiYgKHJlcyArPSAiLz4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH07CisgICAgfQorICAgIGVs cHJvdG8udG9EYXRhVVJMID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo d2luZG93ICYmIHdpbmRvdy5idG9hKSB7CisgICAgICAgICAgICB2YXIgYmIg PSB0aGlzLmdldEJCb3goKSwKKyAgICAgICAgICAgICAgICBzdmcgPSBTbmFw LmZvcm1hdCgnPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3 LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMu b3JnLzE5OTkveGxpbmsiIHdpZHRoPSJ7d2lkdGh9IiBoZWlnaHQ9IntoZWln aHR9IiB2aWV3Qm94PSJ7eH0ge3l9IHt3aWR0aH0ge2hlaWdodH0iPntjb250 ZW50c308L3N2Zz4nLCB7CisgICAgICAgICAgICAgICAgeDogK2JiLngudG9G aXhlZCgzKSwKKyAgICAgICAgICAgICAgICB5OiArYmIueS50b0ZpeGVkKDMp LAorICAgICAgICAgICAgICAgIHdpZHRoOiArYmIud2lkdGgudG9GaXhlZCgz KSwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6ICtiYi5oZWlnaHQudG9GaXhl ZCgzKSwKKyAgICAgICAgICAgICAgICBjb250ZW50czogdGhpcy5vdXRlclNW RygpCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiAiZGF0 YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiICsgYnRvYSh1bmVzY2FwZShlbmNv ZGVVUklDb21wb25lbnQoc3ZnKSkpOworICAgICAgICB9CisgICAgfTsKKyAg ICAvKlwKKyAgICAgKiBGcmFnbWVudC5zZWxlY3QKKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIFNlZSBARWxlbWVudC5zZWxlY3QKKyAgICBc Ki8KKyAgICBGcmFnbWVudC5wcm90b3R5cGUuc2VsZWN0ID0gZWxwcm90by5z ZWxlY3Q7CisgICAgLypcCisgICAgICogRnJhZ21lbnQuc2VsZWN0QWxsCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBTZWUgQEVsZW1lbnQu c2VsZWN0QWxsCisgICAgXCovCisgICAgRnJhZ21lbnQucHJvdG90eXBlLnNl bGVjdEFsbCA9IGVscHJvdG8uc2VsZWN0QWxsOworfSk7CisKKy8vIENvcHly aWdodCAoYykgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUg QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK Ky8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEg Y29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBh Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyBy ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp dGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBX SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5z ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz aW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor U25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBn bG9iLCBGcmFnbWVudCkgeworICAgIHZhciBvYmplY3RUb1N0cmluZyA9IE9i amVjdC5wcm90b3R5cGUudG9TdHJpbmcsCisgICAgICAgIFN0ciA9IFN0cmlu ZywKKyAgICAgICAgbWF0aCA9IE1hdGgsCisgICAgICAgIEUgPSAiIjsKKyAg ICBmdW5jdGlvbiBNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikgeworICAgICAg ICBpZiAoYiA9PSBudWxsICYmIG9iamVjdFRvU3RyaW5nLmNhbGwoYSkgPT0g IltvYmplY3QgU1ZHTWF0cml4XSIpIHsKKyAgICAgICAgICAgIHRoaXMuYSA9 IGEuYTsKKyAgICAgICAgICAgIHRoaXMuYiA9IGEuYjsKKyAgICAgICAgICAg IHRoaXMuYyA9IGEuYzsKKyAgICAgICAgICAgIHRoaXMuZCA9IGEuZDsKKyAg ICAgICAgICAgIHRoaXMuZSA9IGEuZTsKKyAgICAgICAgICAgIHRoaXMuZiA9 IGEuZjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg ICBpZiAoYSAhPSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmEgPSArYTsK KyAgICAgICAgICAgIHRoaXMuYiA9ICtiOworICAgICAgICAgICAgdGhpcy5j ID0gK2M7CisgICAgICAgICAgICB0aGlzLmQgPSArZDsKKyAgICAgICAgICAg IHRoaXMuZSA9ICtlOworICAgICAgICAgICAgdGhpcy5mID0gK2Y7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmEgPSAxOworICAgICAg ICAgICAgdGhpcy5iID0gMDsKKyAgICAgICAgICAgIHRoaXMuYyA9IDA7Cisg ICAgICAgICAgICB0aGlzLmQgPSAxOworICAgICAgICAgICAgdGhpcy5lID0g MDsKKyAgICAgICAgICAgIHRoaXMuZiA9IDA7CisgICAgICAgIH0KKyAgICB9 CisgICAgKGZ1bmN0aW9uIChtYXRyaXhwcm90bykgeworICAgICAgICAvKlwK KyAgICAgICAgICogTWF0cml4LmFkZAorICAgICAgICAgWyBtZXRob2QgXQor ICAgICAgICAgKioKKyAgICAgICAgICogQWRkcyB0aGUgZ2l2ZW4gbWF0cml4 IHRvIGV4aXN0aW5nIG9uZQorICAgICAgICAgLSBhIChudW1iZXIpCisgICAg ICAgICAtIGIgKG51bWJlcikKKyAgICAgICAgIC0gYyAobnVtYmVyKQorICAg ICAgICAgLSBkIChudW1iZXIpCisgICAgICAgICAtIGUgKG51bWJlcikKKyAg ICAgICAgIC0gZiAobnVtYmVyKQorICAgICAgICAgKiBvcgorICAgICAgICAg LSBtYXRyaXggKG9iamVjdCkgQE1hdHJpeAorICAgICAgICBcKi8KKyAgICAg ICAgbWF0cml4cHJvdG8uYWRkID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUs IGYpIHsKKyAgICAgICAgICAgIHZhciBvdXQgPSBbW10sIFtdLCBbXV0sCisg ICAgICAgICAgICAgICAgbSA9IFtbdGhpcy5hLCB0aGlzLmMsIHRoaXMuZV0s IFt0aGlzLmIsIHRoaXMuZCwgdGhpcy5mXSwgWzAsIDAsIDFdXSwKKyAgICAg ICAgICAgICAgICBtYXRyaXggPSBbW2EsIGMsIGVdLCBbYiwgZCwgZl0sIFsw LCAwLCAxXV0sCisgICAgICAgICAgICAgICAgeCwgeSwgeiwgcmVzOworCisg ICAgICAgICAgICBpZiAoYSAmJiBhIGluc3RhbmNlb2YgTWF0cml4KSB7Cisg ICAgICAgICAgICAgICAgbWF0cml4ID0gW1thLmEsIGEuYywgYS5lXSwgW2Eu YiwgYS5kLCBhLmZdLCBbMCwgMCwgMV1dOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgMzsgeCsrKSB7CisgICAgICAg ICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDM7IHkrKykgeworICAgICAgICAg ICAgICAgICAgICByZXMgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3Ig KHogPSAwOyB6IDwgMzsgeisrKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICByZXMgKz0gbVt4XVt6XSAqIG1hdHJpeFt6XVt5XTsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRbeF1beV0gPSBy ZXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgdGhpcy5hID0gb3V0WzBdWzBdOworICAgICAgICAgICAgdGhpcy5i ID0gb3V0WzFdWzBdOworICAgICAgICAgICAgdGhpcy5jID0gb3V0WzBdWzFd OworICAgICAgICAgICAgdGhpcy5kID0gb3V0WzFdWzFdOworICAgICAgICAg ICAgdGhpcy5lID0gb3V0WzBdWzJdOworICAgICAgICAgICAgdGhpcy5mID0g b3V0WzFdWzJdOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg IH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBNYXRyaXguaW52ZXJ0Cisg ICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBS ZXR1cm5zIGFuIGludmVydGVkIHZlcnNpb24gb2YgdGhlIG1hdHJpeAorICAg ICAgICAgPSAob2JqZWN0KSBATWF0cml4CisgICAgICAgIFwqLworICAgICAg ICBtYXRyaXhwcm90by5pbnZlcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg ICAgICB2YXIgbWUgPSB0aGlzLAorICAgICAgICAgICAgICAgIHggPSBtZS5h ICogbWUuZCAtIG1lLmIgKiBtZS5jOworICAgICAgICAgICAgcmV0dXJuIG5l dyBNYXRyaXgobWUuZCAvIHgsIC1tZS5iIC8geCwgLW1lLmMgLyB4LCBtZS5h IC8geCwgKG1lLmMgKiBtZS5mIC0gbWUuZCAqIG1lLmUpIC8geCwgKG1lLmIg KiBtZS5lIC0gbWUuYSAqIG1lLmYpIC8geCk7CisgICAgICAgIH07CisgICAg ICAgIC8qXAorICAgICAgICAgKiBNYXRyaXguY2xvbmUKKyAgICAgICAgIFsg bWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAqIFJldHVybnMgYSBj b3B5IG9mIHRoZSBtYXRyaXgKKyAgICAgICAgID0gKG9iamVjdCkgQE1hdHJp eAorICAgICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8uY2xvbmUgPSBm dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IE1hdHJpeCh0 aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCB0aGlzLmQsIHRoaXMuZSwgdGhpcy5m KTsKKyAgICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAqIE1hdHJp eC50cmFuc2xhdGUKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoq CisgICAgICAgICAqIFRyYW5zbGF0ZSB0aGUgbWF0cml4CisgICAgICAgICAt IHggKG51bWJlcikgaG9yaXpvbnRhbCBvZmZzZXQgZGlzdGFuY2UKKyAgICAg ICAgIC0geSAobnVtYmVyKSB2ZXJ0aWNhbCBvZmZzZXQgZGlzdGFuY2UKKyAg ICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLnRyYW5zbGF0ZSA9IGZ1 bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQo MSwgMCwgMCwgMSwgeCwgeSk7CisgICAgICAgIH07CisgICAgICAgIC8qXAor ICAgICAgICAgKiBNYXRyaXguc2NhbGUKKyAgICAgICAgIFsgbWV0aG9kIF0K KyAgICAgICAgICoqCisgICAgICAgICAqIFNjYWxlcyB0aGUgbWF0cml4Cisg ICAgICAgICAtIHggKG51bWJlcikgYW1vdW50IHRvIGJlIHNjYWxlZCwgd2l0 aCBgMWAgcmVzdWx0aW5nIGluIG5vIGNoYW5nZQorICAgICAgICAgLSB5IChu dW1iZXIpICNvcHRpb25hbCBhbW91bnQgdG8gc2NhbGUgYWxvbmcgdGhlIHZl cnRpY2FsIGF4aXMuIChPdGhlcndpc2UgYHhgIGFwcGxpZXMgdG8gYm90aCBh eGVzLikKKyAgICAgICAgIC0gY3ggKG51bWJlcikgI29wdGlvbmFsIGhvcml6 b250YWwgb3JpZ2luIHBvaW50IGZyb20gd2hpY2ggdG8gc2NhbGUKKyAgICAg ICAgIC0gY3kgKG51bWJlcikgI29wdGlvbmFsIHZlcnRpY2FsIG9yaWdpbiBw b2ludCBmcm9tIHdoaWNoIHRvIHNjYWxlCisgICAgICAgICAqIERlZmF1bHQg Y3gsIGN5IGlzIHRoZSBtaWRkbGUgcG9pbnQgb2YgdGhlIGVsZW1lbnQuCisg ICAgICAgIFwqLworICAgICAgICBtYXRyaXhwcm90by5zY2FsZSA9IGZ1bmN0 aW9uICh4LCB5LCBjeCwgY3kpIHsKKyAgICAgICAgICAgIHkgPT0gbnVsbCAm JiAoeSA9IHgpOworICAgICAgICAgICAgKGN4IHx8IGN5KSAmJiB0aGlzLmFk ZCgxLCAwLCAwLCAxLCBjeCwgY3kpOworICAgICAgICAgICAgdGhpcy5hZGQo eCwgMCwgMCwgeSwgMCwgMCk7CisgICAgICAgICAgICAoY3ggfHwgY3kpICYm IHRoaXMuYWRkKDEsIDAsIDAsIDEsIC1jeCwgLWN5KTsKKyAgICAgICAgICAg IHJldHVybiB0aGlzOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAg ICAgICogTWF0cml4LnJvdGF0ZQorICAgICAgICAgWyBtZXRob2QgXQorICAg ICAgICAgKioKKyAgICAgICAgICogUm90YXRlcyB0aGUgbWF0cml4CisgICAg ICAgICAtIGEgKG51bWJlcikgYW5nbGUgb2Ygcm90YXRpb24sIGluIGRlZ3Jl ZXMKKyAgICAgICAgIC0geCAobnVtYmVyKSBob3Jpem9udGFsIG9yaWdpbiBw b2ludCBmcm9tIHdoaWNoIHRvIHJvdGF0ZQorICAgICAgICAgLSB5IChudW1i ZXIpIHZlcnRpY2FsIG9yaWdpbiBwb2ludCBmcm9tIHdoaWNoIHRvIHJvdGF0 ZQorICAgICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8ucm90YXRlID0g ZnVuY3Rpb24gKGEsIHgsIHkpIHsKKyAgICAgICAgICAgIGEgPSBTbmFwLnJh ZChhKTsKKyAgICAgICAgICAgIHggPSB4IHx8IDA7CisgICAgICAgICAgICB5 ID0geSB8fCAwOworICAgICAgICAgICAgdmFyIGNvcyA9ICttYXRoLmNvcyhh KS50b0ZpeGVkKDkpLAorICAgICAgICAgICAgICAgIHNpbiA9ICttYXRoLnNp bihhKS50b0ZpeGVkKDkpOworICAgICAgICAgICAgdGhpcy5hZGQoY29zLCBz aW4sIC1zaW4sIGNvcywgeCwgeSk7CisgICAgICAgICAgICByZXR1cm4gdGhp cy5hZGQoMSwgMCwgMCwgMSwgLXgsIC15KTsKKyAgICAgICAgfTsKKyAgICAg ICAgLypcCisgICAgICAgICAqIE1hdHJpeC54CisgICAgICAgICBbIG1ldGhv ZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBSZXR1cm5zIHggY29vcmRp bmF0ZSBmb3IgZ2l2ZW4gcG9pbnQgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gZGVz Y3JpYmVkIGJ5IHRoZSBtYXRyaXguIFNlZSBhbHNvIEBNYXRyaXgueQorICAg ICAgICAgLSB4IChudW1iZXIpCisgICAgICAgICAtIHkgKG51bWJlcikKKyAg ICAgICAgID0gKG51bWJlcikgeAorICAgICAgICBcKi8KKyAgICAgICAgbWF0 cml4cHJvdG8ueCA9IGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICBy ZXR1cm4geCAqIHRoaXMuYSArIHkgKiB0aGlzLmMgKyB0aGlzLmU7CisgICAg ICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBNYXRyaXgueQorICAg ICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogUmV0 dXJucyB5IGNvb3JkaW5hdGUgZm9yIGdpdmVuIHBvaW50IGFmdGVyIHRyYW5z Zm9ybWF0aW9uIGRlc2NyaWJlZCBieSB0aGUgbWF0cml4LiBTZWUgYWxzbyBA TWF0cml4LngKKyAgICAgICAgIC0geCAobnVtYmVyKQorICAgICAgICAgLSB5 IChudW1iZXIpCisgICAgICAgICA9IChudW1iZXIpIHkKKyAgICAgICAgXCov CisgICAgICAgIG1hdHJpeHByb3RvLnkgPSBmdW5jdGlvbiAoeCwgeSkgewor ICAgICAgICAgICAgcmV0dXJuIHggKiB0aGlzLmIgKyB5ICogdGhpcy5kICsg dGhpcy5mOworICAgICAgICB9OworICAgICAgICBtYXRyaXhwcm90by5nZXQg PSBmdW5jdGlvbiAoaSkgeworICAgICAgICAgICAgcmV0dXJuICt0aGlzW1N0 ci5mcm9tQ2hhckNvZGUoOTcgKyBpKV0udG9GaXhlZCg0KTsKKyAgICAgICAg fTsKKyAgICAgICAgbWF0cml4cHJvdG8udG9TdHJpbmcgPSBmdW5jdGlvbiAo KSB7CisgICAgICAgICAgICByZXR1cm4gIm1hdHJpeCgiICsgW3RoaXMuZ2V0 KDApLCB0aGlzLmdldCgxKSwgdGhpcy5nZXQoMiksIHRoaXMuZ2V0KDMpLCB0 aGlzLmdldCg0KSwgdGhpcy5nZXQoNSldLmpvaW4oKSArICIpIjsKKyAgICAg ICAgfTsKKyAgICAgICAgbWF0cml4cHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24g KCkgeworICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmUudG9GaXhlZCg0KSwg dGhpcy5mLnRvRml4ZWQoNCldOworICAgICAgICB9OworICAgICAgICBmdW5j dGlvbiBub3JtKGEpIHsKKyAgICAgICAgICAgIHJldHVybiBhWzBdICogYVsw XSArIGFbMV0gKiBhWzFdOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9u IG5vcm1hbGl6ZShhKSB7CisgICAgICAgICAgICB2YXIgbWFnID0gbWF0aC5z cXJ0KG5vcm0oYSkpOworICAgICAgICAgICAgYVswXSAmJiAoYVswXSAvPSBt YWcpOworICAgICAgICAgICAgYVsxXSAmJiAoYVsxXSAvPSBtYWcpOworICAg ICAgICB9CisgICAgICAgIC8qXAorICAgICAgICAgKiBNYXRyaXguZGV0ZXJt aW5hbnQKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAg ICAgICAqIEZpbmRzIGRldGVybWluYW50IG9mIHRoZSBnaXZlbiBtYXRyaXgu CisgICAgICAgICA9IChudW1iZXIpIGRldGVybWluYW50CisgICAgICAgIFwq LworICAgICAgICBtYXRyaXhwcm90by5kZXRlcm1pbmFudCA9IGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmEgKiB0aGlzLmQgLSB0 aGlzLmIgKiB0aGlzLmM7CisgICAgICAgIH07CisgICAgICAgIC8qXAorICAg ICAgICAgKiBNYXRyaXguc3BsaXQKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAg ICAgICAgICoqCisgICAgICAgICAqIFNwbGl0cyBtYXRyaXggaW50byBwcmlt aXRpdmUgdHJhbnNmb3JtYXRpb25zCisgICAgICAgICA9IChvYmplY3QpIGlu IGZvcm1hdDoKKyAgICAgICAgIG8gZHggKG51bWJlcikgdHJhbnNsYXRpb24g YnkgeAorICAgICAgICAgbyBkeSAobnVtYmVyKSB0cmFuc2xhdGlvbiBieSB5 CisgICAgICAgICBvIHNjYWxleCAobnVtYmVyKSBzY2FsZSBieSB4CisgICAg ICAgICBvIHNjYWxleSAobnVtYmVyKSBzY2FsZSBieSB5CisgICAgICAgICBv IHNoZWFyIChudW1iZXIpIHNoZWFyCisgICAgICAgICBvIHJvdGF0ZSAobnVt YmVyKSByb3RhdGlvbiBpbiBkZWcKKyAgICAgICAgIG8gaXNTaW1wbGUgKGJv b2xlYW4pIGNvdWxkIGl0IGJlIHJlcHJlc2VudGVkIHZpYSBzaW1wbGUgdHJh bnNmb3JtYXRpb25zCisgICAgICAgIFwqLworICAgICAgICBtYXRyaXhwcm90 by5zcGxpdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBvdXQg PSB7fTsKKyAgICAgICAgICAgIC8vIHRyYW5zbGF0aW9uCisgICAgICAgICAg ICBvdXQuZHggPSB0aGlzLmU7CisgICAgICAgICAgICBvdXQuZHkgPSB0aGlz LmY7CisKKyAgICAgICAgICAgIC8vIHNjYWxlIGFuZCBzaGVhcgorICAgICAg ICAgICAgdmFyIHJvdyA9IFtbdGhpcy5hLCB0aGlzLmNdLCBbdGhpcy5iLCB0 aGlzLmRdXTsKKyAgICAgICAgICAgIG91dC5zY2FsZXggPSBtYXRoLnNxcnQo bm9ybShyb3dbMF0pKTsKKyAgICAgICAgICAgIG5vcm1hbGl6ZShyb3dbMF0p OworCisgICAgICAgICAgICBvdXQuc2hlYXIgPSByb3dbMF1bMF0gKiByb3db MV1bMF0gKyByb3dbMF1bMV0gKiByb3dbMV1bMV07CisgICAgICAgICAgICBy b3dbMV0gPSBbcm93WzFdWzBdIC0gcm93WzBdWzBdICogb3V0LnNoZWFyLCBy b3dbMV1bMV0gLSByb3dbMF1bMV0gKiBvdXQuc2hlYXJdOworCisgICAgICAg ICAgICBvdXQuc2NhbGV5ID0gbWF0aC5zcXJ0KG5vcm0ocm93WzFdKSk7Cisg ICAgICAgICAgICBub3JtYWxpemUocm93WzFdKTsKKyAgICAgICAgICAgIG91 dC5zaGVhciAvPSBvdXQuc2NhbGV5OworCisgICAgICAgICAgICBpZiAodGhp cy5kZXRlcm1pbmFudCgpIDwgMCkgeworICAgICAgICAgICAgICAgIG91dC5z Y2FsZXggPSAtb3V0LnNjYWxleDsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgLy8gcm90YXRpb24KKyAgICAgICAgICAgIHZhciBzaW4gPSAtcm93 WzBdWzFdLAorICAgICAgICAgICAgICAgIGNvcyA9IHJvd1sxXVsxXTsKKyAg ICAgICAgICAgIGlmIChjb3MgPCAwKSB7CisgICAgICAgICAgICAgICAgb3V0 LnJvdGF0ZSA9IFNuYXAuZGVnKG1hdGguYWNvcyhjb3MpKTsKKyAgICAgICAg ICAgICAgICBpZiAoc2luIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBv dXQucm90YXRlID0gMzYwIC0gb3V0LnJvdGF0ZTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG91 dC5yb3RhdGUgPSBTbmFwLmRlZyhtYXRoLmFzaW4oc2luKSk7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIG91dC5pc1NpbXBsZSA9ICErb3V0LnNo ZWFyLnRvRml4ZWQoOSkgJiYgKG91dC5zY2FsZXgudG9GaXhlZCg5KSA9PSBv dXQuc2NhbGV5LnRvRml4ZWQoOSkgfHwgIW91dC5yb3RhdGUpOworICAgICAg ICAgICAgb3V0LmlzU3VwZXJTaW1wbGUgPSAhK291dC5zaGVhci50b0ZpeGVk KDkpICYmIG91dC5zY2FsZXgudG9GaXhlZCg5KSA9PSBvdXQuc2NhbGV5LnRv Rml4ZWQoOSkgJiYgIW91dC5yb3RhdGU7CisgICAgICAgICAgICBvdXQubm9S b3RhdGlvbiA9ICErb3V0LnNoZWFyLnRvRml4ZWQoOSkgJiYgIW91dC5yb3Rh dGU7CisgICAgICAgICAgICByZXR1cm4gb3V0OworICAgICAgICB9OworICAg ICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LnRvVHJhbnNmb3JtU3RyaW5n CisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAgICAgICAg KiBSZXR1cm5zIHRyYW5zZm9ybSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGdp dmVuIG1hdHJpeAorICAgICAgICAgPSAoc3RyaW5nKSB0cmFuc2Zvcm0gc3Ry aW5nCisgICAgICAgIFwqLworICAgICAgICBtYXRyaXhwcm90by50b1RyYW5z Zm9ybVN0cmluZyA9IGZ1bmN0aW9uIChzaG9ydGVyKSB7CisgICAgICAgICAg ICB2YXIgcyA9IHNob3J0ZXIgfHwgdGhpcy5zcGxpdCgpOworICAgICAgICAg ICAgaWYgKCErcy5zaGVhci50b0ZpeGVkKDkpKSB7CisgICAgICAgICAgICAg ICAgcy5zY2FsZXggPSArcy5zY2FsZXgudG9GaXhlZCg0KTsKKyAgICAgICAg ICAgICAgICBzLnNjYWxleSA9ICtzLnNjYWxleS50b0ZpeGVkKDQpOworICAg ICAgICAgICAgICAgIHMucm90YXRlID0gK3Mucm90YXRlLnRvRml4ZWQoNCk7 CisgICAgICAgICAgICAgICAgcmV0dXJuICAocy5keCB8fCBzLmR5ID8gInQi ICsgWytzLmR4LnRvRml4ZWQoNCksICtzLmR5LnRvRml4ZWQoNCldIDogRSkg KworICAgICAgICAgICAgICAgICAgICAgICAgKHMuc2NhbGV4ICE9IDEgfHwg cy5zY2FsZXkgIT0gMSA/ICJzIiArIFtzLnNjYWxleCwgcy5zY2FsZXksIDAs IDBdIDogRSkgKworICAgICAgICAgICAgICAgICAgICAgICAgKHMucm90YXRl ID8gInIiICsgWytzLnJvdGF0ZS50b0ZpeGVkKDQpLCAwLCAwXSA6IEUpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g Im0iICsgW3RoaXMuZ2V0KDApLCB0aGlzLmdldCgxKSwgdGhpcy5nZXQoMiks IHRoaXMuZ2V0KDMpLCB0aGlzLmdldCg0KSwgdGhpcy5nZXQoNSldOworICAg ICAgICAgICAgfQorICAgICAgICB9OworICAgIH0pKE1hdHJpeC5wcm90b3R5 cGUpOworICAgIC8qXAorICAgICAqIFNuYXAuTWF0cml4CisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBNYXRyaXggY29uc3RydWN0b3IsIGV4 dGVuZCBvbiB5b3VyIG93biByaXNrLgorICAgICAqIFRvIGNyZWF0ZSBtYXRy aWNlcyB1c2UgQFNuYXAubWF0cml4LgorICAgIFwqLworICAgIFNuYXAuTWF0 cml4ID0gTWF0cml4OworICAgIC8qXAorICAgICAqIFNuYXAubWF0cml4Cisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBVdGlsaXR5IG1ldGhv ZAorICAgICAqKgorICAgICAqIFJldHVybnMgYSBtYXRyaXggYmFzZWQgb24g dGhlIGdpdmVuIHBhcmFtZXRlcnMKKyAgICAgLSBhIChudW1iZXIpCisgICAg IC0gYiAobnVtYmVyKQorICAgICAtIGMgKG51bWJlcikKKyAgICAgLSBkIChu dW1iZXIpCisgICAgIC0gZSAobnVtYmVyKQorICAgICAtIGYgKG51bWJlcikK KyAgICAgKiBvcgorICAgICAtIHN2Z01hdHJpeCAoU1ZHTWF0cml4KQorICAg ICA9IChvYmplY3QpIEBNYXRyaXgKKyAgICBcKi8KKyAgICBTbmFwLm1hdHJp eCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmKSB7CisgICAgICAgIHJl dHVybiBuZXcgTWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpOworICAgIH07Cit9 KTsKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29y cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNl ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg IkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBt YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0 dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8K Ky8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVu ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg QkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNl ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy bmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRo ZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1l bnQsIFBhcGVyLCBnbG9iLCBGcmFnbWVudCkgeworICAgIHZhciBoYXMgPSAi aGFzT3duUHJvcGVydHkiLAorICAgICAgICBtYWtlID0gU25hcC5fLm1ha2Us CisgICAgICAgIHdyYXAgPSBTbmFwLl8ud3JhcCwKKyAgICAgICAgaXMgPSBT bmFwLmlzLAorICAgICAgICBnZXRTb21lRGVmcyA9IFNuYXAuXy5nZXRTb21l RGVmcywKKyAgICAgICAgcmVVUkxWYWx1ZSA9IC9edXJsXCgjPyhbXildKylc KSQvLAorICAgICAgICAkID0gU25hcC5fLiQsCisgICAgICAgIFVSTCA9IFNu YXAudXJsLAorICAgICAgICBTdHIgPSBTdHJpbmcsCisgICAgICAgIHNlcGFy YXRvciA9IFNuYXAuXy5zZXBhcmF0b3IsCisgICAgICAgIEUgPSAiIjsKKyAg ICAvLyBBdHRyaWJ1dGVzIGV2ZW50IGhhbmRsZXJzCisgICAgZXZlLm9uKCJz bmFwLnV0aWwuYXR0ci5tYXNrIiwgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg ICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5z dGFuY2VvZiBGcmFnbWVudCkgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsK KyAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZyYWdtZW50ICYm IHZhbHVlLm5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSkgeworICAgICAg ICAgICAgICAgIHZhbHVlID0gdmFsdWUubm9kZS5maXJzdENoaWxkOworICAg ICAgICAgICAgICAgIGdldFNvbWVEZWZzKHRoaXMpLmFwcGVuZENoaWxkKHZh bHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXAodmFsdWUpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT0g Im1hc2siKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSB2YWx1ZTsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWFzayA9 IG1ha2UoIm1hc2siLCBnZXRTb21lRGVmcyh0aGlzKSk7CisgICAgICAgICAg ICAgICAgbWFzay5ub2RlLmFwcGVuZENoaWxkKHZhbHVlLm5vZGUpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgIW1hc2subm9kZS5pZCAmJiAkKG1h c2subm9kZSwgeworICAgICAgICAgICAgICAgIGlkOiBtYXNrLmlkCisgICAg ICAgICAgICB9KTsKKyAgICAgICAgICAgICQodGhpcy5ub2RlLCB7CisgICAg ICAgICAgICAgICAgbWFzazogVVJMKG1hc2suaWQpCisgICAgICAgICAgICB9 KTsKKyAgICAgICAgfQorICAgIH0pOworICAgIChmdW5jdGlvbiAoY2xpcEl0 KSB7CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuY2xpcCIsIGNs aXBJdCk7CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuY2xpcC1w YXRoIiwgY2xpcEl0KTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0 ci5jbGlwUGF0aCIsIGNsaXBJdCk7CisgICAgfShmdW5jdGlvbiAodmFsdWUp IHsKKyAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2 YWx1ZSBpbnN0YW5jZW9mIEZyYWdtZW50KSB7CisgICAgICAgICAgICBldmUu c3RvcCgpOworICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT0gImNsaXBQ YXRoIikgeworICAgICAgICAgICAgICAgIHZhciBjbGlwID0gdmFsdWU7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNsaXAgPSBt YWtlKCJjbGlwUGF0aCIsIGdldFNvbWVEZWZzKHRoaXMpKTsKKyAgICAgICAg ICAgICAgICBjbGlwLm5vZGUuYXBwZW5kQ2hpbGQodmFsdWUubm9kZSk7Cisg ICAgICAgICAgICAgICAgIWNsaXAubm9kZS5pZCAmJiAkKGNsaXAubm9kZSwg eworICAgICAgICAgICAgICAgICAgICBpZDogY2xpcC5pZAorICAgICAgICAg ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCh0aGlz Lm5vZGUsIHsKKyAgICAgICAgICAgICAgICAiY2xpcC1wYXRoIjogVVJMKGNs aXAubm9kZS5pZCB8fCBjbGlwLmlkKQorICAgICAgICAgICAgfSk7CisgICAg ICAgIH0KKyAgICB9KSk7CisgICAgZnVuY3Rpb24gZmlsbFN0cm9rZShuYW1l KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg ICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICBpZiAodmFsdWUgaW5z dGFuY2VvZiBGcmFnbWVudCAmJiB2YWx1ZS5ub2RlLmNoaWxkTm9kZXMubGVu Z3RoID09IDEgJiYKKyAgICAgICAgICAgICAgICAodmFsdWUubm9kZS5maXJz dENoaWxkLnRhZ05hbWUgPT0gInJhZGlhbEdyYWRpZW50IiB8fAorICAgICAg ICAgICAgICAgIHZhbHVlLm5vZGUuZmlyc3RDaGlsZC50YWdOYW1lID09ICJs aW5lYXJHcmFkaWVudCIgfHwKKyAgICAgICAgICAgICAgICB2YWx1ZS5ub2Rl LmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAicGF0dGVybiIpKSB7CisgICAgICAg ICAgICAgICAgdmFsdWUgPSB2YWx1ZS5ub2RlLmZpcnN0Q2hpbGQ7CisgICAg ICAgICAgICAgICAgZ2V0U29tZURlZnModGhpcykuYXBwZW5kQ2hpbGQodmFs dWUpOworICAgICAgICAgICAgICAgIHZhbHVlID0gd3JhcCh2YWx1ZSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2Vv ZiBFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUg PT0gInJhZGlhbEdyYWRpZW50IiB8fCB2YWx1ZS50eXBlID09ICJsaW5lYXJH cmFkaWVudCIKKyAgICAgICAgICAgICAgICAgICB8fCB2YWx1ZS50eXBlID09 ICJwYXR0ZXJuIikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVl Lm5vZGUuaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQodmFsdWUu bm9kZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB2YWx1 ZS5pZAorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGwgPSBV UkwodmFsdWUubm9kZS5pZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgZmlsbCA9IHZhbHVlLmF0dHIobmFtZSk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBmaWxsID0gU25hcC5jb2xvcih2YWx1ZSk7CisgICAg ICAgICAgICAgICAgaWYgKGZpbGwuZXJyb3IpIHsKKyAgICAgICAgICAgICAg ICAgICAgdmFyIGdyYWQgPSBTbmFwKGdldFNvbWVEZWZzKHRoaXMpLm93bmVy U1ZHRWxlbWVudCkuZ3JhZGllbnQodmFsdWUpOworICAgICAgICAgICAgICAg ICAgICBpZiAoZ3JhZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCFncmFkLm5vZGUuaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAkKGdyYWQubm9kZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZDogZ3JhZC5pZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgZmlsbCA9IFVSTChncmFkLm5vZGUuaWQpOworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgZmlsbCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZmls bCA9IFN0cihmaWxsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgICB2YXIgYXR0cnMgPSB7fTsKKyAgICAgICAgICAg IGF0dHJzW25hbWVdID0gZmlsbDsKKyAgICAgICAgICAgICQodGhpcy5ub2Rl LCBhdHRycyk7CisgICAgICAgICAgICB0aGlzLm5vZGUuc3R5bGVbbmFtZV0g PSBFOworICAgICAgICB9OworICAgIH0KKyAgICBldmUub24oInNuYXAudXRp bC5hdHRyLmZpbGwiLCBmaWxsU3Ryb2tlKCJmaWxsIikpOworICAgIGV2ZS5v bigic25hcC51dGlsLmF0dHIuc3Ryb2tlIiwgZmlsbFN0cm9rZSgic3Ryb2tl IikpOworICAgIHZhciBncmFkcmcgPSAvXihbbHJdKSg/OlwoKFteKV0qKVwp KT8oLiopJC9pOworICAgIGV2ZS5vbigic25hcC51dGlsLmdyYWQucGFyc2Ui LCBmdW5jdGlvbiBwYXJzZUdyYWQoc3RyaW5nKSB7CisgICAgICAgIHN0cmlu ZyA9IFN0cihzdHJpbmcpOworICAgICAgICB2YXIgdG9rZW5zID0gc3RyaW5n Lm1hdGNoKGdyYWRyZyk7CisgICAgICAgIGlmICghdG9rZW5zKSB7CisgICAg ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB2YXIg dHlwZSA9IHRva2Vuc1sxXSwKKyAgICAgICAgICAgIHBhcmFtcyA9IHRva2Vu c1syXSwKKyAgICAgICAgICAgIHN0b3BzID0gdG9rZW5zWzNdOworICAgICAg ICBwYXJhbXMgPSBwYXJhbXMuc3BsaXQoL1xzKixccyovKS5tYXAoZnVuY3Rp b24gKGVsKSB7CisgICAgICAgICAgICByZXR1cm4gK2VsID09IGVsID8gK2Vs IDogZWw7CisgICAgICAgIH0pOworICAgICAgICBpZiAocGFyYW1zLmxlbmd0 aCA9PSAxICYmIHBhcmFtc1swXSA9PSAwKSB7CisgICAgICAgICAgICBwYXJh bXMgPSBbXTsKKyAgICAgICAgfQorICAgICAgICBzdG9wcyA9IHN0b3BzLnNw bGl0KCItIik7CisgICAgICAgIHN0b3BzID0gc3RvcHMubWFwKGZ1bmN0aW9u IChlbCkgeworICAgICAgICAgICAgZWwgPSBlbC5zcGxpdCgiOiIpOworICAg ICAgICAgICAgdmFyIG91dCA9IHsKKyAgICAgICAgICAgICAgICBjb2xvcjog ZWxbMF0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoZWxbMV0p IHsKKyAgICAgICAgICAgICAgICBvdXQub2Zmc2V0ID0gcGFyc2VGbG9hdChl bFsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb3V0 OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg IHR5cGU6IHR5cGUsCisgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAg ICAgICAgICAgIHN0b3BzOiBzdG9wcworICAgICAgICB9OworICAgIH0pOwor CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5kIiwgZnVuY3Rpb24gKHZh bHVlKSB7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIGlmIChpcyh2 YWx1ZSwgImFycmF5IikgJiYgaXModmFsdWVbMF0sICJhcnJheSIpKSB7Cisg ICAgICAgICAgICB2YWx1ZSA9IFNuYXAucGF0aC50b1N0cmluZy5jYWxsKHZh bHVlKTsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZSA9IFN0cih2YWx1ZSk7 CisgICAgICAgIGlmICh2YWx1ZS5tYXRjaCgvW3J1b10vaSkpIHsKKyAgICAg ICAgICAgIHZhbHVlID0gU25hcC5wYXRoLnRvQWJzb2x1dGUodmFsdWUpOwor ICAgICAgICB9CisgICAgICAgICQodGhpcy5ub2RlLCB7ZDogdmFsdWV9KTsK KyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci4jdGV4 dCIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBldmUuc3RvcCgpOwor ICAgICAgICB2YWx1ZSA9IFN0cih2YWx1ZSk7CisgICAgICAgIHZhciB0eHQg PSBnbG9iLmRvYy5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7CisgICAgICAgIHdo aWxlICh0aGlzLm5vZGUuZmlyc3RDaGlsZCkgeworICAgICAgICAgICAgdGhp cy5ub2RlLnJlbW92ZUNoaWxkKHRoaXMubm9kZS5maXJzdENoaWxkKTsKKyAg ICAgICAgfQorICAgICAgICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQodHh0KTsK KyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5wYXRo IiwgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGV2ZS5zdG9wKCk7Cisg ICAgICAgIHRoaXMuYXR0cih7ZDogdmFsdWV9KTsKKyAgICB9KSgtMSk7Cisg ICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5jbGFzcyIsIGZ1bmN0aW9uICh2 YWx1ZSkgeworICAgICAgICBldmUuc3RvcCgpOworICAgICAgICB0aGlzLm5v ZGUuY2xhc3NOYW1lLmJhc2VWYWwgPSB2YWx1ZTsKKyAgICB9KSgtMSk7Cisg ICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci52aWV3Qm94IiwgZnVuY3Rpb24g KHZhbHVlKSB7CisgICAgICAgIHZhciB2YjsKKyAgICAgICAgaWYgKGlzKHZh bHVlLCAib2JqZWN0IikgJiYgIngiIGluIHZhbHVlKSB7CisgICAgICAgICAg ICB2YiA9IFt2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS53aWR0aCwgdmFsdWUu aGVpZ2h0XS5qb2luKCIgIik7CisgICAgICAgIH0gZWxzZSBpZiAoaXModmFs dWUsICJhcnJheSIpKSB7CisgICAgICAgICAgICB2YiA9IHZhbHVlLmpvaW4o IiAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZiID0gdmFs dWU7CisgICAgICAgIH0KKyAgICAgICAgJCh0aGlzLm5vZGUsIHsKKyAgICAg ICAgICAgIHZpZXdCb3g6IHZiCisgICAgICAgIH0pOworICAgICAgICBldmUu c3RvcCgpOworICAgIH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5h dHRyLnRyYW5zZm9ybSIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB0 aGlzLnRyYW5zZm9ybSh2YWx1ZSk7CisgICAgICAgIGV2ZS5zdG9wKCk7Cisg ICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuciIsIGZ1 bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodGhpcy50eXBlID09ICJy ZWN0IikgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgICAg ICQodGhpcy5ub2RlLCB7CisgICAgICAgICAgICAgICAgcng6IHZhbHVlLAor ICAgICAgICAgICAgICAgIHJ5OiB2YWx1ZQorICAgICAgICAgICAgfSk7Cisg ICAgICAgIH0KKyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwu YXR0ci50ZXh0cGF0aCIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBl dmUuc3RvcCgpOworICAgICAgICBpZiAodGhpcy50eXBlID09ICJ0ZXh0Iikg eworICAgICAgICAgICAgdmFyIGlkLCB0cCwgbm9kZTsKKyAgICAgICAgICAg IGlmICghdmFsdWUgJiYgdGhpcy50ZXh0UGF0aCkgeworICAgICAgICAgICAg ICAgIHRwID0gdGhpcy50ZXh0UGF0aDsKKyAgICAgICAgICAgICAgICB3aGls ZSAodHAubm9kZS5maXJzdENoaWxkKSB7CisgICAgICAgICAgICAgICAgICAg IHRoaXMubm9kZS5hcHBlbmRDaGlsZCh0cC5ub2RlLmZpcnN0Q2hpbGQpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cC5yZW1vdmUo KTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50ZXh0UGF0aDsKKyAg ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoaXModmFsdWUsICJzdHJpbmciKSkgeworICAgICAgICAgICAg ICAgIHZhciBkZWZzID0gZ2V0U29tZURlZnModGhpcyksCisgICAgICAgICAg ICAgICAgICAgIHBhdGggPSB3cmFwKGRlZnMucGFyZW50Tm9kZSkucGF0aCh2 YWx1ZSk7CisgICAgICAgICAgICAgICAgZGVmcy5hcHBlbmRDaGlsZChwYXRo Lm5vZGUpOworICAgICAgICAgICAgICAgIGlkID0gcGF0aC5pZDsKKyAgICAg ICAgICAgICAgICBwYXRoLmF0dHIoe2lkOiBpZH0pOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXAodmFsdWUp OworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1l bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWQgPSB2YWx1ZS5hdHRyKCJp ZCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlkKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZCA9IHZhbHVlLmlkOworICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUuYXR0cih7aWQ6IGlkfSk7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoaWQpIHsKKyAgICAgICAgICAgICAgICB0cCA9 IHRoaXMudGV4dFBhdGg7CisgICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMu bm9kZTsKKyAgICAgICAgICAgICAgICBpZiAodHApIHsKKyAgICAgICAgICAg ICAgICAgICAgdHAuYXR0cih7InhsaW5rOmhyZWYiOiAiIyIgKyBpZH0pOwor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg IHRwID0gJCgidGV4dFBhdGgiLCB7CisgICAgICAgICAgICAgICAgICAgICAg ICAieGxpbms6aHJlZiI6ICIjIiArIGlkCisgICAgICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZS5maXJzdENo aWxkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cC5hcHBlbmRDaGls ZChub2RlLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodHApOworICAg ICAgICAgICAgICAgICAgICB0aGlzLnRleHRQYXRoID0gd3JhcCh0cCk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIudGV4dCIs IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodGhpcy50eXBlID09 ICJ0ZXh0IikgeworICAgICAgICAgICAgdmFyIGkgPSAwLAorICAgICAgICAg ICAgICAgIG5vZGUgPSB0aGlzLm5vZGUsCisgICAgICAgICAgICAgICAgdHVu ZXIgPSBmdW5jdGlvbiAoY2h1bmspIHsKKyAgICAgICAgICAgICAgICAgICAg dmFyIG91dCA9ICQoInRzcGFuIik7CisgICAgICAgICAgICAgICAgICAgIGlm IChpcyhjaHVuaywgImFycmF5IikpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGVuZ3RoOyBpKyspIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kQ2hpbGQo dHVuZXIoY2h1bmtbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIG91dC5hcHBlbmRDaGlsZChnbG9iLmRvYy5jcmVhdGVUZXh0 Tm9kZShjaHVuaykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIG91dC5ub3JtYWxpemUgJiYgb3V0Lm5vcm1hbGl6ZSgp OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0OworICAgICAgICAg ICAgICAgIH07CisgICAgICAgICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxk KSB7CisgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZp cnN0Q2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHR1 bmVkID0gdHVuZXIodmFsdWUpOworICAgICAgICAgICAgd2hpbGUgKHR1bmVk LmZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAgICAgICBub2RlLmFwcGVuZENo aWxkKHR1bmVkLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgfSkoLTEpOworICAgIGZ1 bmN0aW9uIHNldEZvbnRTaXplKHZhbHVlKSB7CisgICAgICAgIGV2ZS5zdG9w KCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSArdmFsdWUpIHsKKyAgICAgICAg ICAgIHZhbHVlICs9ICJweCI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5u b2RlLnN0eWxlLmZvbnRTaXplID0gdmFsdWU7CisgICAgfQorICAgIGV2ZS5v bigic25hcC51dGlsLmF0dHIuZm9udFNpemUiLCBzZXRGb250U2l6ZSkoLTEp OworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuZm9udC1zaXplIiwgc2V0 Rm9udFNpemUpKC0xKTsKKworCisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0 YXR0ci50cmFuc2Zvcm0iLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV2ZS5z dG9wKCk7CisgICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSgpOworICAg IH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLnRleHRw YXRoIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBldmUuc3RvcCgpOworICAg ICAgICByZXR1cm4gdGhpcy50ZXh0UGF0aDsKKyAgICB9KSgtMSk7CisgICAg Ly8gTWFya2VycworICAgIChmdW5jdGlvbiAoKSB7CisgICAgICAgIGZ1bmN0 aW9uIGdldHRlcihlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlv biAoKSB7CisgICAgICAgICAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAg ICAgICAgICB2YXIgc3R5bGUgPSBnbG9iLmRvYy5kZWZhdWx0Vmlldy5nZXRD b21wdXRlZFN0eWxlKHRoaXMubm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1 ZSgibWFya2VyLSIgKyBlbmQpOworICAgICAgICAgICAgICAgIGlmIChzdHls ZSA9PSAibm9uZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0 eWxlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgIHJldHVybiBTbmFwKGdsb2IuZG9jLmdldEVsZW1lbnRCeUlkKHN0 eWxlLm1hdGNoKHJlVVJMVmFsdWUpWzFdKSk7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlv biBzZXR0ZXIoZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAg ICAgICAgICAgICB2YXIgbmFtZSA9ICJtYXJrZXIiICsgZW5kLmNoYXJBdCgw KS50b1VwcGVyQ2FzZSgpICsgZW5kLnN1YnN0cmluZygxKTsKKyAgICAgICAg ICAgICAgICBpZiAodmFsdWUgPT0gIiIgfHwgIXZhbHVlKSB7CisgICAgICAg ICAgICAgICAgICAgIHRoaXMubm9kZS5zdHlsZVtuYW1lXSA9ICJub25lIjsK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PSAibWFya2Vy IikgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSB2YWx1ZS5ub2Rl LmlkOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlkKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAkKHZhbHVlLm5vZGUsIHtpZDogdmFsdWUuaWR9 KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB0aGlzLm5vZGUuc3R5bGVbbmFtZV0gPSBVUkwoaWQpOworICAgICAgICAg ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBldmUub24oInNuYXAudXRp bC5nZXRhdHRyLm1hcmtlci1lbmQiLCBnZXR0ZXIoImVuZCIpKSgtMSk7Cisg ICAgICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIubWFya2VyRW5kIiwg Z2V0dGVyKCJlbmQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAudXRp bC5nZXRhdHRyLm1hcmtlci1zdGFydCIsIGdldHRlcigic3RhcnQiKSkoLTEp OworICAgICAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlclN0 YXJ0IiwgZ2V0dGVyKCJzdGFydCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigi c25hcC51dGlsLmdldGF0dHIubWFya2VyLW1pZCIsIGdldHRlcigibWlkIikp KC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5tYXJr ZXJNaWQiLCBnZXR0ZXIoIm1pZCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigi c25hcC51dGlsLmF0dHIubWFya2VyLWVuZCIsIHNldHRlcigiZW5kIikpKC0x KTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXJFbmQi LCBzZXR0ZXIoImVuZCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigic25hcC51 dGlsLmF0dHIubWFya2VyLXN0YXJ0Iiwgc2V0dGVyKCJzdGFydCIpKSgtMSk7 CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIubWFya2VyU3RhcnQi LCBzZXR0ZXIoInN0YXJ0IikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFw LnV0aWwuYXR0ci5tYXJrZXItbWlkIiwgc2V0dGVyKCJtaWQiKSkoLTEpOwor ICAgICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLm1hcmtlck1pZCIsIHNl dHRlcigibWlkIikpKC0xKTsKKyAgICB9KCkpOworICAgIGV2ZS5vbigic25h cC51dGlsLmdldGF0dHIuciIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg KHRoaXMudHlwZSA9PSAicmVjdCIgJiYgJCh0aGlzLm5vZGUsICJyeCIpID09 ICQodGhpcy5ub2RlLCAicnkiKSkgeworICAgICAgICAgICAgZXZlLnN0b3Ao KTsKKyAgICAgICAgICAgIHJldHVybiAkKHRoaXMubm9kZSwgInJ4Iik7Cisg ICAgICAgIH0KKyAgICB9KSgtMSk7CisgICAgZnVuY3Rpb24gdGV4dEV4dHJh Y3Qobm9kZSkgeworICAgICAgICB2YXIgb3V0ID0gW107CisgICAgICAgIHZh ciBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlczsKKyAgICAgICAgZm9yICh2 YXIgaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7IGkrKykg eworICAgICAgICAgICAgdmFyIGNoaSA9IGNoaWxkcmVuW2ldOworICAgICAg ICAgICAgaWYgKGNoaS5ub2RlVHlwZSA9PSAzKSB7CisgICAgICAgICAgICAg ICAgb3V0LnB1c2goY2hpLm5vZGVWYWx1ZSk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAoY2hpLnRhZ05hbWUgPT0gInRzcGFuIikgeworICAg ICAgICAgICAgICAgIGlmIChjaGkuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSAm JiBjaGkuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7CisgICAgICAgICAg ICAgICAgICAgIG91dC5wdXNoKGNoaS5maXJzdENoaWxkLm5vZGVWYWx1ZSk7 CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgb3V0LnB1c2godGV4dEV4dHJhY3QoY2hpKSk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy biBvdXQ7CisgICAgfQorICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIu dGV4dCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9 PSAidGV4dCIgfHwgdGhpcy50eXBlID09ICJ0c3BhbiIpIHsKKyAgICAgICAg ICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICB2YXIgb3V0ID0gdGV4dEV4 dHJhY3QodGhpcy5ub2RlKTsKKyAgICAgICAgICAgIHJldHVybiBvdXQubGVu Z3RoID09IDEgPyBvdXRbMF0gOiBvdXQ7CisgICAgICAgIH0KKyAgICB9KSgt MSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci4jdGV4dCIsIGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubm9kZS50ZXh0Q29u dGVudDsKKyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0 YXR0ci52aWV3Qm94IiwgZnVuY3Rpb24gKCkgeworICAgICAgICBldmUuc3Rv cCgpOworICAgICAgICB2YXIgdmIgPSAkKHRoaXMubm9kZSwgInZpZXdCb3gi KTsKKyAgICAgICAgaWYgKHZiKSB7CisgICAgICAgICAgICB2YiA9IHZiLnNw bGl0KHNlcGFyYXRvcik7CisgICAgICAgICAgICByZXR1cm4gU25hcC5fLmJv eCgrdmJbMF0sICt2YlsxXSwgK3ZiWzJdLCArdmJbM10pOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg fSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIucG9pbnRz IiwgZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcCA9ICQodGhpcy5ub2Rl LCAicG9pbnRzIik7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIGlm IChwKSB7CisgICAgICAgICAgICByZXR1cm4gcC5zcGxpdChzZXBhcmF0b3Ip OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICB9CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmdl dGF0dHIucGF0aCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHAgPSAk KHRoaXMubm9kZSwgImQiKTsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAg ICAgcmV0dXJuIHA7CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51 dGlsLmdldGF0dHIuY2xhc3MiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl dHVybiB0aGlzLm5vZGUuY2xhc3NOYW1lLmJhc2VWYWw7CisgICAgfSkoLTEp OworICAgIGZ1bmN0aW9uIGdldEZvbnRTaXplKCkgeworICAgICAgICBldmUu c3RvcCgpOworICAgICAgICByZXR1cm4gdGhpcy5ub2RlLnN0eWxlLmZvbnRT aXplOworICAgIH0KKyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLmZv bnRTaXplIiwgZ2V0Rm9udFNpemUpKC0xKTsKKyAgICBldmUub24oInNuYXAu dXRpbC5nZXRhdHRyLmZvbnQtc2l6ZSIsIGdldEZvbnRTaXplKSgtMSk7Cit9 KTsKKworLy8gQ29weXJpZ2h0IChjKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5j b3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vu c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo ZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91 IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8g aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisv LworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQg dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT IiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8g U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292 ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIg dGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxl bWVudCwgUGFwZXIsIGdsb2IsIEZyYWdtZW50KSB7CisgICAgdmFyIHJnTm90 U3BhY2UgPSAvXFMrL2csCisgICAgICAgIHJnQmFkU3BhY2UgPSAvW1x0XHJc blxmXS9nLAorICAgICAgICByZ1RyaW0gPSAvKF5ccyt8XHMrJCkvZywKKyAg ICAgICAgU3RyID0gU3RyaW5nLAorICAgICAgICBlbHByb3RvID0gRWxlbWVu dC5wcm90b3R5cGU7CisgICAgLypcCisgICAgICogRWxlbWVudC5hZGRDbGFz cworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBnaXZl biBjbGFzcyBuYW1lIG9yIGxpc3Qgb2YgY2xhc3MgbmFtZXMgdG8gdGhlIGVs ZW1lbnQuCisgICAgIC0gdmFsdWUgKHN0cmluZykgY2xhc3MgbmFtZSBvciBz cGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzcyBuYW1lcworICAgICAqKgor ICAgICA9IChFbGVtZW50KSBvcmlnaW5hbCBlbGVtZW50LgorICAgIFwqLwor ICAgIGVscHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAg ICAgICAgdmFyIGNsYXNzZXMgPSBTdHIodmFsdWUgfHwgIiIpLm1hdGNoKHJn Tm90U3BhY2UpIHx8IFtdLAorICAgICAgICAgICAgZWxlbSA9IHRoaXMubm9k ZSwKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lLmJh c2VWYWwsCisgICAgICAgICAgICBjdXJDbGFzc2VzID0gY2xhc3NOYW1lLm1h dGNoKHJnTm90U3BhY2UpIHx8IFtdLAorICAgICAgICAgICAgaiwKKyAgICAg ICAgICAgIHBvcywKKyAgICAgICAgICAgIGNsYXp6LAorICAgICAgICAgICAg ZmluYWxWYWx1ZTsKKworICAgICAgICBpZiAoY2xhc3Nlcy5sZW5ndGgpIHsK KyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgd2hpbGUgKChjbGF6 eiA9IGNsYXNzZXNbaisrXSkpIHsKKyAgICAgICAgICAgICAgICBwb3MgPSBj dXJDbGFzc2VzLmluZGV4T2YoY2xhenopOworICAgICAgICAgICAgICAgIGlm ICghfnBvcykgeworICAgICAgICAgICAgICAgICAgICBjdXJDbGFzc2VzLnB1 c2goY2xhenopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgZmluYWxWYWx1ZSA9IGN1ckNsYXNzZXMuam9pbigi ICIpOworICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBmaW5hbFZhbHVl KSB7CisgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUuYmFzZVZhbCA9 IGZpbmFsVmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnJlbW92ZUNsYXNzCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZW1vdmVzIGdpdmVuIGNsYXNzIG5hbWUgb3IgbGlzdCBvZiBjbGFz cyBuYW1lcyBmcm9tIHRoZSBlbGVtZW50LgorICAgICAtIHZhbHVlIChzdHJp bmcpIGNsYXNzIG5hbWUgb3Igc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xh c3MgbmFtZXMKKyAgICAgKioKKyAgICAgPSAoRWxlbWVudCkgb3JpZ2luYWwg ZWxlbWVudC4KKyAgICBcKi8KKyAgICBlbHByb3RvLnJlbW92ZUNsYXNzID0g ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciBjbGFzc2VzID0gU3Ry KHZhbHVlIHx8ICIiKS5tYXRjaChyZ05vdFNwYWNlKSB8fCBbXSwKKyAgICAg ICAgICAgIGVsZW0gPSB0aGlzLm5vZGUsCisgICAgICAgICAgICBjbGFzc05h bWUgPSBlbGVtLmNsYXNzTmFtZS5iYXNlVmFsLAorICAgICAgICAgICAgY3Vy Q2xhc3NlcyA9IGNsYXNzTmFtZS5tYXRjaChyZ05vdFNwYWNlKSB8fCBbXSwK KyAgICAgICAgICAgIGosCisgICAgICAgICAgICBwb3MsCisgICAgICAgICAg ICBjbGF6eiwKKyAgICAgICAgICAgIGZpbmFsVmFsdWU7CisgICAgICAgIGlm IChjdXJDbGFzc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgaiA9IDA7Cisg ICAgICAgICAgICB3aGlsZSAoKGNsYXp6ID0gY2xhc3Nlc1tqKytdKSkgewor ICAgICAgICAgICAgICAgIHBvcyA9IGN1ckNsYXNzZXMuaW5kZXhPZihjbGF6 eik7CisgICAgICAgICAgICAgICAgaWYgKH5wb3MpIHsKKyAgICAgICAgICAg ICAgICAgICAgY3VyQ2xhc3Nlcy5zcGxpY2UocG9zLCAxKTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFs VmFsdWUgPSBjdXJDbGFzc2VzLmpvaW4oIiAiKTsKKyAgICAgICAgICAgIGlm IChjbGFzc05hbWUgIT0gZmluYWxWYWx1ZSkgeworICAgICAgICAgICAgICAg IGVsZW0uY2xhc3NOYW1lLmJhc2VWYWwgPSBmaW5hbFZhbHVlOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg IH07CisgICAgLypcCisgICAgICogRWxlbWVudC5oYXNDbGFzcworICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBlbGVt ZW50IGhhcyBhIGdpdmVuIGNsYXNzIG5hbWUgaW4gdGhlIGxpc3Qgb2YgY2xh c3MgbmFtZXMgYXBwbGllZCB0byBpdC4KKyAgICAgLSB2YWx1ZSAoc3RyaW5n KSBjbGFzcyBuYW1lCisgICAgICoqCisgICAgID0gKGJvb2xlYW4pIGB0cnVl YCBpZiB0aGUgZWxlbWVudCBoYXMgZ2l2ZW4gY2xhc3MKKyAgICBcKi8KKyAg ICBlbHByb3RvLmhhc0NsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg ICAgIHZhciBlbGVtID0gdGhpcy5ub2RlLAorICAgICAgICAgICAgY2xhc3NO YW1lID0gZWxlbS5jbGFzc05hbWUuYmFzZVZhbCwKKyAgICAgICAgICAgIGN1 ckNsYXNzZXMgPSBjbGFzc05hbWUubWF0Y2gocmdOb3RTcGFjZSkgfHwgW107 CisgICAgICAgIHJldHVybiAhIX5jdXJDbGFzc2VzLmluZGV4T2YodmFsdWUp OworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC50b2dnbGVDbGFz cworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkIG9yIHJl bW92ZSBvbmUgb3IgbW9yZSBjbGFzc2VzIGZyb20gdGhlIGVsZW1lbnQsIGRl cGVuZGluZyBvbiBlaXRoZXIKKyAgICAgKiB0aGUgY2xhc3PigJlzIHByZXNl bmNlIG9yIHRoZSB2YWx1ZSBvZiB0aGUgYGZsYWdgIGFyZ3VtZW50LgorICAg ICAtIHZhbHVlIChzdHJpbmcpIGNsYXNzIG5hbWUgb3Igc3BhY2Ugc2VwYXJh dGVkIGxpc3Qgb2YgY2xhc3MgbmFtZXMKKyAgICAgLSBmbGFnIChib29sZWFu KSB2YWx1ZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2xhc3Mgc2hvdWxk IGJlIGFkZGVkIG9yIHJlbW92ZWQKKyAgICAgKioKKyAgICAgPSAoRWxlbWVu dCkgb3JpZ2luYWwgZWxlbWVudC4KKyAgICBcKi8KKyAgICBlbHByb3RvLnRv Z2dsZUNsYXNzID0gZnVuY3Rpb24gKHZhbHVlLCBmbGFnKSB7CisgICAgICAg IGlmIChmbGFnICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChmbGFnKSB7 CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ2xhc3ModmFsdWUp OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1 cm4gdGhpcy5yZW1vdmVDbGFzcyh2YWx1ZSk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgdmFyIGNsYXNzZXMgPSAodmFsdWUgfHwgIiIp Lm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdLAorICAgICAgICAgICAgZWxlbSA9 IHRoaXMubm9kZSwKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGVsZW0uY2xh c3NOYW1lLmJhc2VWYWwsCisgICAgICAgICAgICBjdXJDbGFzc2VzID0gY2xh c3NOYW1lLm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdLAorICAgICAgICAgICAg aiwKKyAgICAgICAgICAgIHBvcywKKyAgICAgICAgICAgIGNsYXp6LAorICAg ICAgICAgICAgZmluYWxWYWx1ZTsKKyAgICAgICAgaiA9IDA7CisgICAgICAg IHdoaWxlICgoY2xhenogPSBjbGFzc2VzW2orK10pKSB7CisgICAgICAgICAg ICBwb3MgPSBjdXJDbGFzc2VzLmluZGV4T2YoY2xhenopOworICAgICAgICAg ICAgaWYgKH5wb3MpIHsKKyAgICAgICAgICAgICAgICBjdXJDbGFzc2VzLnNw bGljZShwb3MsIDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICBjdXJDbGFzc2VzLnB1c2goY2xhenopOworICAgICAgICAgICAg fQorICAgICAgICB9CisKKyAgICAgICAgZmluYWxWYWx1ZSA9IGN1ckNsYXNz ZXMuam9pbigiICIpOworICAgICAgICBpZiAoY2xhc3NOYW1lICE9IGZpbmFs VmFsdWUpIHsKKyAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lLmJhc2VWYWwg PSBmaW5hbFZhbHVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz OworICAgIH07Cit9KTsKKworLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2Jl IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor Ly8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNl IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl bnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl IGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ Q0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8g ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg b24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp bXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRh dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlv biAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IsIEZyYWdtZW50KSB7Cisg ICAgdmFyIG9wZXJhdG9ycyA9IHsKKyAgICAgICAgICAgICIrIjogZnVuY3Rp b24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB5 OworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiLSI6IGZ1bmN0 aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4IC0g eTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgIi8iOiBmdW5j dGlvbiAoeCwgeSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAv IHk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICIqIjogZnVu Y3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgg KiB5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAg U3RyID0gU3RyaW5nLAorICAgICAgICByZVVuaXQgPSAvW2Etel0rJC9pLAor ICAgICAgICByZUFkZG9uID0gL15ccyooWytcLVwvKl0pXHMqPVxzKihbXGQu ZUUrXC1dKylccyooW15cZFxzXSspP1xzKiQvOworICAgIGZ1bmN0aW9uIGdl dE51bWJlcih2YWwpIHsKKyAgICAgICAgcmV0dXJuIHZhbDsKKyAgICB9Cisg ICAgZnVuY3Rpb24gZ2V0VW5pdCh1bml0KSB7CisgICAgICAgIHJldHVybiBm dW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICByZXR1cm4gK3ZhbC50b0Zp eGVkKDMpICsgdW5pdDsKKyAgICAgICAgfTsKKyAgICB9CisgICAgZXZlLm9u KCJzbmFwLnV0aWwuYXR0ciIsIGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAg dmFyIHBsdXMgPSBTdHIodmFsKS5tYXRjaChyZUFkZG9uKTsKKyAgICAgICAg aWYgKHBsdXMpIHsKKyAgICAgICAgICAgIHZhciBldm50ID0gZXZlLm50KCks CisgICAgICAgICAgICAgICAgbmFtZSA9IGV2bnQuc3Vic3RyaW5nKGV2bnQu bGFzdEluZGV4T2YoIi4iKSArIDEpLAorICAgICAgICAgICAgICAgIGEgPSB0 aGlzLmF0dHIobmFtZSksCisgICAgICAgICAgICAgICAgYXRyID0ge307Cisg ICAgICAgICAgICBldmUuc3RvcCgpOworICAgICAgICAgICAgdmFyIHVuaXQg PSBwbHVzWzNdIHx8ICIiLAorICAgICAgICAgICAgICAgIGFVbml0ID0gYS5t YXRjaChyZVVuaXQpLAorICAgICAgICAgICAgICAgIG9wID0gb3BlcmF0b3Jz W3BsdXNbMV1dOworICAgICAgICAgICAgaWYgKGFVbml0ICYmIGFVbml0ID09 IHVuaXQpIHsKKyAgICAgICAgICAgICAgICB2YWwgPSBvcChwYXJzZUZsb2F0 KGEpLCArcGx1c1syXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIGEgPSB0aGlzLmFzUFgobmFtZSk7CisgICAgICAgICAgICAg ICAgdmFsID0gb3AodGhpcy5hc1BYKG5hbWUpLCB0aGlzLmFzUFgobmFtZSwg cGx1c1syXSArIHVuaXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmIChpc05hTihhKSB8fCBpc05hTih2YWwpKSB7CisgICAgICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXRyW25h bWVdID0gdmFsOworICAgICAgICAgICAgdGhpcy5hdHRyKGF0cik7CisgICAg ICAgIH0KKyAgICB9KSgtMTApOworICAgIGV2ZS5vbigic25hcC51dGlsLmVx dWFsIiwgZnVuY3Rpb24gKG5hbWUsIGIpIHsKKyAgICAgICAgdmFyIEEsIEIs IGEgPSBTdHIodGhpcy5hdHRyKG5hbWUpIHx8ICIiKSwKKyAgICAgICAgICAg IGVsID0gdGhpcywKKyAgICAgICAgICAgIGJwbHVzID0gU3RyKGIpLm1hdGNo KHJlQWRkb24pOworICAgICAgICBpZiAoYnBsdXMpIHsKKyAgICAgICAgICAg IGV2ZS5zdG9wKCk7CisgICAgICAgICAgICB2YXIgdW5pdCA9IGJwbHVzWzNd IHx8ICIiLAorICAgICAgICAgICAgICAgIGFVbml0ID0gYS5tYXRjaChyZVVu aXQpLAorICAgICAgICAgICAgICAgIG9wID0gb3BlcmF0b3JzW2JwbHVzWzFd XTsKKyAgICAgICAgICAgIGlmIChhVW5pdCAmJiBhVW5pdCA9PSB1bml0KSB7 CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg ICAgZnJvbTogcGFyc2VGbG9hdChhKSwKKyAgICAgICAgICAgICAgICAgICAg dG86IG9wKHBhcnNlRmxvYXQoYSksICticGx1c1syXSksCisgICAgICAgICAg ICAgICAgICAgIGY6IGdldFVuaXQoYVVuaXQpCisgICAgICAgICAgICAgICAg fTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYSA9 IHRoaXMuYXNQWChuYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor ICAgICAgICAgICAgICAgICAgICBmcm9tOiBhLAorICAgICAgICAgICAgICAg ICAgICB0bzogb3AoYSwgdGhpcy5hc1BYKG5hbWUsIGJwbHVzWzJdICsgdW5p dCkpLAorICAgICAgICAgICAgICAgICAgICBmOiBnZXROdW1iZXIKKyAgICAg ICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fSkoLTEwKTsKK30pOworLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5 c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8K Ky8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv biAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRo aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl LgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0 CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO U0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlz dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g YW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs aWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlv bnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAo U25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IsIEZyYWdtZW50KSB7CisgICAg dmFyIHByb3RvID0gUGFwZXIucHJvdG90eXBlLAorICAgICAgICBpcyA9IFNu YXAuaXM7CisgICAgLypcCisgICAgICogUGFwZXIucmVjdAorICAgICBbIG1l dGhvZCBdCisgICAgICoKKyAgICAgKiBEcmF3cyBhIHJlY3RhbmdsZQorICAg ICAqKgorICAgICAtIHggKG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSB0 b3AgbGVmdCBjb3JuZXIKKyAgICAgLSB5IChudW1iZXIpIHkgY29vcmRpbmF0 ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyCisgICAgIC0gd2lkdGggKG51bWJl cikgd2lkdGgKKyAgICAgLSBoZWlnaHQgKG51bWJlcikgaGVpZ2h0CisgICAg IC0gcnggKG51bWJlcikgI29wdGlvbmFsIGhvcml6b250YWwgcmFkaXVzIGZv ciByb3VuZGVkIGNvcm5lcnMsIGRlZmF1bHQgaXMgMAorICAgICAtIHJ5IChu dW1iZXIpICNvcHRpb25hbCB2ZXJ0aWNhbCByYWRpdXMgZm9yIHJvdW5kZWQg Y29ybmVycywgZGVmYXVsdCBpcyByeCBvciAwCisgICAgID0gKG9iamVjdCkg dGhlIGByZWN0YCBlbGVtZW50CisgICAgICoqCisgICAgID4gVXNhZ2UKKyAg ICAgfCAvLyByZWd1bGFyIHJlY3RhbmdsZQorICAgICB8IHZhciBjID0gcGFw ZXIucmVjdCgxMCwgMTAsIDUwLCA1MCk7CisgICAgIHwgLy8gcmVjdGFuZ2xl IHdpdGggcm91bmRlZCBjb3JuZXJzCisgICAgIHwgdmFyIGMgPSBwYXBlci5y ZWN0KDQwLCA0MCwgNTAsIDUwLCAxMCk7CisgICAgXCovCisgICAgcHJvdG8u cmVjdCA9IGZ1bmN0aW9uICh4LCB5LCB3LCBoLCByeCwgcnkpIHsKKyAgICAg ICAgdmFyIGF0dHI7CisgICAgICAgIGlmIChyeSA9PSBudWxsKSB7CisgICAg ICAgICAgICByeSA9IHJ4OworICAgICAgICB9CisgICAgICAgIGlmIChpcyh4 LCAib2JqZWN0IikgJiYgeCA9PSAiW29iamVjdCBPYmplY3RdIikgeworICAg ICAgICAgICAgYXR0ciA9IHg7CisgICAgICAgIH0gZWxzZSBpZiAoeCAhPSBu dWxsKSB7CisgICAgICAgICAgICBhdHRyID0geworICAgICAgICAgICAgICAg IHg6IHgsCisgICAgICAgICAgICAgICAgeTogeSwKKyAgICAgICAgICAgICAg ICB3aWR0aDogdywKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGgKKyAgICAg ICAgICAgIH07CisgICAgICAgICAgICBpZiAocnggIT0gbnVsbCkgeworICAg ICAgICAgICAgICAgIGF0dHIucnggPSByeDsKKyAgICAgICAgICAgICAgICBh dHRyLnJ5ID0gcnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIHRoaXMuZWwoInJlY3QiLCBhdHRyKTsKKyAgICB9OworICAg IC8qXAorICAgICAqIFBhcGVyLmNpcmNsZQorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogRHJhd3MgYSBjaXJjbGUKKyAgICAgKioKKyAgICAg LSB4IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgY2VudHJlCisgICAg IC0geSAobnVtYmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRyZQorICAg ICAtIHIgKG51bWJlcikgcmFkaXVzCisgICAgID0gKG9iamVjdCkgdGhlIGBj aXJjbGVgIGVsZW1lbnQKKyAgICAgKioKKyAgICAgPiBVc2FnZQorICAgICB8 IHZhciBjID0gcGFwZXIuY2lyY2xlKDUwLCA1MCwgNDApOworICAgIFwqLwor ICAgIHByb3RvLmNpcmNsZSA9IGZ1bmN0aW9uIChjeCwgY3ksIHIpIHsKKyAg ICAgICAgdmFyIGF0dHI7CisgICAgICAgIGlmIChpcyhjeCwgIm9iamVjdCIp ICYmIGN4ID09ICJbb2JqZWN0IE9iamVjdF0iKSB7CisgICAgICAgICAgICBh dHRyID0gY3g7CisgICAgICAgIH0gZWxzZSBpZiAoY3ggIT0gbnVsbCkgewor ICAgICAgICAgICAgYXR0ciA9IHsKKyAgICAgICAgICAgICAgICBjeDogY3gs CisgICAgICAgICAgICAgICAgY3k6IGN5LAorICAgICAgICAgICAgICAgIHI6 IHIKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IHRoaXMuZWwoImNpcmNsZSIsIGF0dHIpOworICAgIH07CisKKyAgICB2YXIg cHJlbG9hZCA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIGZ1bmN0aW9uIG9u ZXJyb3IoKSB7CisgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUucmVtb3Zl Q2hpbGQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZ1bmN0 aW9uIChzcmMsIGYpIHsKKyAgICAgICAgICAgIHZhciBpbWcgPSBnbG9iLmRv Yy5jcmVhdGVFbGVtZW50KCJpbWciKSwKKyAgICAgICAgICAgICAgICBib2R5 ID0gZ2xvYi5kb2MuYm9keTsKKyAgICAgICAgICAgIGltZy5zdHlsZS5jc3NU ZXh0ID0gInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTk5OTllbTt0b3A6LTk5 OTllbSI7CisgICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkg eworICAgICAgICAgICAgICAgIGYuY2FsbChpbWcpOworICAgICAgICAgICAg ICAgIGltZy5vbmxvYWQgPSBpbWcub25lcnJvciA9IG51bGw7CisgICAgICAg ICAgICAgICAgYm9keS5yZW1vdmVDaGlsZChpbWcpOworICAgICAgICAgICAg fTsKKyAgICAgICAgICAgIGltZy5vbmVycm9yID0gb25lcnJvcjsKKyAgICAg ICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgICAgICAgICAgIGlt Zy5zcmMgPSBzcmM7CisgICAgICAgIH07CisgICAgfSgpKTsKKworICAgIC8q XAorICAgICAqIFBhcGVyLmltYWdlCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBQbGFjZXMgYW4gaW1hZ2Ugb24gdGhlIHN1cmZhY2UKKyAg ICAgKioKKyAgICAgLSBzcmMgKHN0cmluZykgVVJJIG9mIHRoZSBzb3VyY2Ug aW1hZ2UKKyAgICAgLSB4IChudW1iZXIpIHggb2Zmc2V0IHBvc2l0aW9uCisg ICAgIC0geSAobnVtYmVyKSB5IG9mZnNldCBwb3NpdGlvbgorICAgICAtIHdp ZHRoIChudW1iZXIpIHdpZHRoIG9mIHRoZSBpbWFnZQorICAgICAtIGhlaWdo dCAobnVtYmVyKSBoZWlnaHQgb2YgdGhlIGltYWdlCisgICAgID0gKG9iamVj dCkgdGhlIGBpbWFnZWAgZWxlbWVudAorICAgICAqIG9yCisgICAgID0gKG9i amVjdCkgU25hcCBlbGVtZW50IG9iamVjdCB3aXRoIHR5cGUgYGltYWdlYAor ICAgICAqKgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIGMgPSBwYXBlci5p bWFnZSgiYXBwbGUucG5nIiwgMTAsIDEwLCA4MCwgODApOworICAgIFwqLwor ICAgIHByb3RvLmltYWdlID0gZnVuY3Rpb24gKHNyYywgeCwgeSwgd2lkdGgs IGhlaWdodCkgeworICAgICAgICB2YXIgZWwgPSB0aGlzLmVsKCJpbWFnZSIp OworICAgICAgICBpZiAoaXMoc3JjLCAib2JqZWN0IikgJiYgInNyYyIgaW4g c3JjKSB7CisgICAgICAgICAgICBlbC5hdHRyKHNyYyk7CisgICAgICAgIH0g ZWxzZSBpZiAoc3JjICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBzZXQg PSB7CisgICAgICAgICAgICAgICAgInhsaW5rOmhyZWYiOiBzcmMsCisgICAg ICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogIm5vbmUiCisgICAg ICAgICAgICB9OworICAgICAgICAgICAgaWYgKHggIT0gbnVsbCAmJiB5ICE9 IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXQueCA9IHg7CisgICAgICAg ICAgICAgICAgc2V0LnkgPSB5OworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKHdpZHRoICE9IG51bGwgJiYgaGVpZ2h0ICE9IG51bGwpIHsKKyAg ICAgICAgICAgICAgICBzZXQud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAg ICAgICBzZXQuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBwcmVsb2FkKHNyYywgZnVuY3Rpb24gKCkg eworICAgICAgICAgICAgICAgICAgICBTbmFwLl8uJChlbC5ub2RlLCB7Cisg ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5vZmZzZXRXaWR0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5vZmZz ZXRIZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTbmFwLl8u JChlbC5ub2RlLCBzZXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBl bDsKKyAgICB9OworICAgIC8qXAorICAgICAqIFBhcGVyLmVsbGlwc2UKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIERyYXdzIGFuIGVsbGlw c2UKKyAgICAgKioKKyAgICAgLSB4IChudW1iZXIpIHggY29vcmRpbmF0ZSBv ZiB0aGUgY2VudHJlCisgICAgIC0geSAobnVtYmVyKSB5IGNvb3JkaW5hdGUg b2YgdGhlIGNlbnRyZQorICAgICAtIHJ4IChudW1iZXIpIGhvcml6b250YWwg cmFkaXVzCisgICAgIC0gcnkgKG51bWJlcikgdmVydGljYWwgcmFkaXVzCisg ICAgID0gKG9iamVjdCkgdGhlIGBlbGxpcHNlYCBlbGVtZW50CisgICAgICoq CisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIgYyA9IHBhcGVyLmVsbGlwc2Uo NTAsIDUwLCA0MCwgMjApOworICAgIFwqLworICAgIHByb3RvLmVsbGlwc2Ug PSBmdW5jdGlvbiAoY3gsIGN5LCByeCwgcnkpIHsKKyAgICAgICAgdmFyIGF0 dHI7CisgICAgICAgIGlmIChpcyhjeCwgIm9iamVjdCIpICYmIGN4ID09ICJb b2JqZWN0IE9iamVjdF0iKSB7CisgICAgICAgICAgICBhdHRyID0gY3g7Cisg ICAgICAgIH0gZWxzZSBpZiAoY3ggIT0gbnVsbCkgeworICAgICAgICAgICAg YXR0ciA9eworICAgICAgICAgICAgICAgIGN4OiBjeCwKKyAgICAgICAgICAg ICAgICBjeTogY3ksCisgICAgICAgICAgICAgICAgcng6IHJ4LAorICAgICAg ICAgICAgICAgIHJ5OiByeQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gdGhpcy5lbCgiZWxsaXBzZSIsIGF0dHIpOworICAg IH07CisgICAgLy8gU0lFUlJBIFBhcGVyLnBhdGgoKTogVW5jbGVhciBmcm9t IHRoZSBsaW5rIHdoYXQgYSBDYXRtdWxsLVJvbSBjdXJ2ZXRvIGlzLCBhbmQg d2h5IGl0IHdvdWxkIG1ha2UgbGlmZSBhbnkgZWFzaWVyLgorICAgIC8qXAor ICAgICAqIFBhcGVyLnBhdGgKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIENyZWF0ZXMgYSBgPHBhdGg+YCBlbGVtZW50IHVzaW5nIHRoZSBn aXZlbiBzdHJpbmcgYXMgdGhlIHBhdGgncyBkZWZpbml0aW9uCisgICAgIC0g cGF0aFN0cmluZyAoc3RyaW5nKSAjb3B0aW9uYWwgcGF0aCBzdHJpbmcgaW4g U1ZHIGZvcm1hdAorICAgICAqIFBhdGggc3RyaW5nIGNvbnNpc3RzIG9mIG9u ZS1sZXR0ZXIgY29tbWFuZHMsIGZvbGxvd2VkIGJ5IGNvbW1hIHNlcHJhcmF0 ZWQgYXJndW1lbnRzIGluIG51bWVyaWNhbCBmb3JtLiBFeGFtcGxlOgorICAg ICB8ICJNMTAsMjBMMzAsNDAiCisgICAgICogVGhpcyBleGFtcGxlIGZlYXR1 cmVzIHR3byBjb21tYW5kczogYE1gLCB3aXRoIGFyZ3VtZW50cyBgKDEwLCAy MClgIGFuZCBgTGAgd2l0aCBhcmd1bWVudHMgYCgzMCwgNDApYC4gVXBwZXJj YXNlIGxldHRlciBjb21tYW5kcyBleHByZXNzIGNvb3JkaW5hdGVzIGluIGFi c29sdXRlIHRlcm1zLCB3aGlsZSBsb3dlcmNhc2UgY29tbWFuZHMgZXhwcmVz cyB0aGVtIGluIHJlbGF0aXZlIHRlcm1zIGZyb20gdGhlIG1vc3QgcmVjZW50 bHkgZGVjbGFyZWQgY29vcmRpbmF0ZXMuCisgICAgICoKKyAgICAgIyA8cD5I ZXJlIGlzIHNob3J0IGxpc3Qgb2YgY29tbWFuZHMgYXZhaWxhYmxlLCBmb3Ig bW9yZSBkZXRhaWxzIHNlZSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9U Ui9TVkcvcGF0aHMuaHRtbCNQYXRoRGF0YSIgdGl0bGU9IkRldGFpbHMgb2Yg YSBwYXRoJ3MgZGF0YSBhdHRyaWJ1dGUncyBmb3JtYXQgYXJlIGRlc2NyaWJl ZCBpbiB0aGUgU1ZHIHNwZWNpZmljYXRpb24uIj5TVkcgcGF0aCBzdHJpbmcg Zm9ybWF0PC9hPiBvciA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5tb3pp bGxhLm9yZy9lbi9TVkcvVHV0b3JpYWwvUGF0aHMiPmFydGljbGUgYWJvdXQg cGF0aCBzdHJpbmdzIGF0IE1ETjwvYT4uPC9wPgorICAgICAjIDx0YWJsZT48 dGhlYWQ+PHRyPjx0aD5Db21tYW5kPC90aD48dGg+TmFtZTwvdGg+PHRoPlBh cmFtZXRlcnM8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+CisgICAgICMgPHRy Pjx0ZD5NPC90ZD48dGQ+bW92ZXRvPC90ZD48dGQ+KHggeSkrPC90ZD48L3Ry PgorICAgICAjIDx0cj48dGQ+WjwvdGQ+PHRkPmNsb3NlcGF0aDwvdGQ+PHRk Pihub25lKTwvdGQ+PC90cj4KKyAgICAgIyA8dHI+PHRkPkw8L3RkPjx0ZD5s aW5ldG88L3RkPjx0ZD4oeCB5KSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0 ZD5IPC90ZD48dGQ+aG9yaXpvbnRhbCBsaW5ldG88L3RkPjx0ZD54KzwvdGQ+ PC90cj4KKyAgICAgIyA8dHI+PHRkPlY8L3RkPjx0ZD52ZXJ0aWNhbCBsaW5l dG88L3RkPjx0ZD55KzwvdGQ+PC90cj4KKyAgICAgIyA8dHI+PHRkPkM8L3Rk Pjx0ZD5jdXJ2ZXRvPC90ZD48dGQ+KHgxIHkxIHgyIHkyIHggeSkrPC90ZD48 L3RyPgorICAgICAjIDx0cj48dGQ+UzwvdGQ+PHRkPnNtb290aCBjdXJ2ZXRv PC90ZD48dGQ+KHgyIHkyIHggeSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48 dGQ+UTwvdGQ+PHRkPnF1YWRyYXRpYyBCw6l6aWVyIGN1cnZldG88L3RkPjx0 ZD4oeDEgeTEgeCB5KSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5UPC90 ZD48dGQ+c21vb3RoIHF1YWRyYXRpYyBCw6l6aWVyIGN1cnZldG88L3RkPjx0 ZD4oeCB5KSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5BPC90ZD48dGQ+ ZWxsaXB0aWNhbCBhcmM8L3RkPjx0ZD4ocnggcnkgeC1heGlzLXJvdGF0aW9u IGxhcmdlLWFyYy1mbGFnIHN3ZWVwLWZsYWcgeCB5KSs8L3RkPjwvdHI+Cisg ICAgICMgPHRyPjx0ZD5SPC90ZD48dGQ+PGEgaHJlZj0iaHR0cDovL2VuLndp a2lwZWRpYS5vcmcvd2lraS9DYXRtdWxs4oCTUm9tX3NwbGluZSNDYXRtdWxs LkUyLjgwLjkzUm9tX3NwbGluZSI+Q2F0bXVsbC1Sb20gY3VydmV0bzwvYT4q PC90ZD48dGQ+eDEgeTEgKHggeSkrPC90ZD48L3RyPjwvdGJvZHk+PC90YWJs ZT4KKyAgICAgKiAqIF9DYXRtdWxsLVJvbSBjdXJ2ZXRvXyBpcyBhIG5vdCBz dGFuZGFyZCBTVkcgY29tbWFuZCBhbmQgYWRkZWQgdG8gbWFrZSBsaWZlIGVh c2llci4KKyAgICAgKiBOb3RlOiB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSB3 aGVuIGEgcGF0aCBjb25zaXN0cyBvZiBvbmx5IHRocmVlIGNvbW1hbmRzOiBg TTEwLDEwUuKApnpgLiBJbiB0aGlzIGNhc2UgdGhlIHBhdGggY29ubmVjdHMg YmFjayB0byBpdHMgc3RhcnRpbmcgcG9pbnQuCisgICAgID4gVXNhZ2UKKyAg ICAgfCB2YXIgYyA9IHBhcGVyLnBhdGgoIk0xMCAxMEw5MCA5MCIpOworICAg ICB8IC8vIGRyYXcgYSBkaWFnb25hbCBsaW5lOgorICAgICB8IC8vIG1vdmUg dG8gMTAsMTAsIGxpbmUgdG8gOTAsOTAKKyAgICBcKi8KKyAgICBwcm90by5w YXRoID0gZnVuY3Rpb24gKGQpIHsKKyAgICAgICAgdmFyIGF0dHI7CisgICAg ICAgIGlmIChpcyhkLCAib2JqZWN0IikgJiYgIWlzKGQsICJhcnJheSIpKSB7 CisgICAgICAgICAgICBhdHRyID0gZDsKKyAgICAgICAgfSBlbHNlIGlmIChk KSB7CisgICAgICAgICAgICBhdHRyID0ge2Q6IGR9OworICAgICAgICB9Cisg ICAgICAgIHJldHVybiB0aGlzLmVsKCJwYXRoIiwgYXR0cik7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBQYXBlci5nCisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKioKKyAgICAgKiBDcmVhdGVzIGEgZ3JvdXAgZWxlbWVudAorICAgICAq KgorICAgICAtIHZhcmFyZ3MgKOKApikgI29wdGlvbmFsIGVsZW1lbnRzIHRv IG5lc3Qgd2l0aGluIHRoZSBncm91cAorICAgICA9IChvYmplY3QpIHRoZSBg Z2AgZWxlbWVudAorICAgICAqKgorICAgICA+IFVzYWdlCisgICAgIHwgdmFy IGMxID0gcGFwZXIuY2lyY2xlKCksCisgICAgIHwgICAgIGMyID0gcGFwZXIu cmVjdCgpLAorICAgICB8ICAgICBnID0gcGFwZXIuZyhjMiwgYzEpOyAvLyBu b3RlIHRoYXQgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGlzIGRpZmZlcmVudAor ICAgICAqIG9yCisgICAgIHwgdmFyIGMxID0gcGFwZXIuY2lyY2xlKCksCisg ICAgIHwgICAgIGMyID0gcGFwZXIucmVjdCgpLAorICAgICB8ICAgICBnID0g cGFwZXIuZygpOworICAgICB8IGcuYWRkKGMyLCBjMSk7CisgICAgXCovCisg ICAgLypcCisgICAgICogUGFwZXIuZ3JvdXAKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIFNlZSBAUGFwZXIuZworICAgIFwqLworICAgIHBy b3RvLmdyb3VwID0gcHJvdG8uZyA9IGZ1bmN0aW9uIChmaXJzdCkgeworICAg ICAgICB2YXIgYXR0ciwKKyAgICAgICAgICAgIGVsID0gdGhpcy5lbCgiZyIp OworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxICYmIGZpcnN0 ICYmICFmaXJzdC50eXBlKSB7CisgICAgICAgICAgICBlbC5hdHRyKGZpcnN0 KTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7Cisg ICAgICAgICAgICBlbC5hZGQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo YXJndW1lbnRzLCAwKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVs OworICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIuc3ZnCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEgbmVzdGVkIFNW RyBlbGVtZW50LgorICAgICAtIHggKG51bWJlcikgQG9wdGlvbmFsIFggb2Yg dGhlIGVsZW1lbnQKKyAgICAgLSB5IChudW1iZXIpIEBvcHRpb25hbCBZIG9m IHRoZSBlbGVtZW50CisgICAgIC0gd2lkdGggKG51bWJlcikgQG9wdGlvbmFs IHdpZHRoIG9mIHRoZSBlbGVtZW50CisgICAgIC0gaGVpZ2h0IChudW1iZXIp IEBvcHRpb25hbCBoZWlnaHQgb2YgdGhlIGVsZW1lbnQKKyAgICAgLSB2Yngg KG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3ggWAorICAgICAtIHZieSAobnVt YmVyKSBAb3B0aW9uYWwgdmlld2JveCBZCisgICAgIC0gdmJ3IChudW1iZXIp IEBvcHRpb25hbCB2aWV3Ym94IHdpZHRoCisgICAgIC0gdmJoIChudW1iZXIp IEBvcHRpb25hbCB2aWV3Ym94IGhlaWdodAorICAgICAqKgorICAgICA9IChv YmplY3QpIHRoZSBgc3ZnYCBlbGVtZW50CisgICAgICoqCisgICAgXCovCisg ICAgcHJvdG8uc3ZnID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQs IHZieCwgdmJ5LCB2YncsIHZiaCkgeworICAgICAgICB2YXIgYXR0cnMgPSB7 fTsKKyAgICAgICAgaWYgKGlzKHgsICJvYmplY3QiKSAmJiB5ID09IG51bGwp IHsKKyAgICAgICAgICAgIGF0dHJzID0geDsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGlmICh4ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAg ICBhdHRycy54ID0geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm ICh5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdHRycy55ID0geTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBudWxs KSB7CisgICAgICAgICAgICAgICAgYXR0cnMud2lkdGggPSB3aWR0aDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoZWlnaHQgIT0gbnVsbCkg eworICAgICAgICAgICAgICAgIGF0dHJzLmhlaWdodCA9IGhlaWdodDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YnggIT0gbnVsbCAmJiB2 YnkgIT0gbnVsbCAmJiB2YncgIT0gbnVsbCAmJiB2YmggIT0gbnVsbCkgewor ICAgICAgICAgICAgICAgIGF0dHJzLnZpZXdCb3ggPSBbdmJ4LCB2YnksIHZi dywgdmJoXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy ZXR1cm4gdGhpcy5lbCgic3ZnIiwgYXR0cnMpOworICAgIH07CisgICAgLypc CisgICAgICogUGFwZXIubWFzaworICAgICBbIG1ldGhvZCBdCisgICAgICoq CisgICAgICogRXF1aXZhbGVudCBpbiBiZWhhdmlvdXIgdG8gQFBhcGVyLmcs IGV4Y2VwdCBpdOKAmXMgYSBtYXNrLgorICAgICAqKgorICAgICA9IChvYmpl Y3QpIHRoZSBgbWFza2AgZWxlbWVudAorICAgICAqKgorICAgIFwqLworICAg IHByb3RvLm1hc2sgPSBmdW5jdGlvbiAoZmlyc3QpIHsKKyAgICAgICAgdmFy IGF0dHIsCisgICAgICAgICAgICBlbCA9IHRoaXMuZWwoIm1hc2siKTsKKyAg ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSAmJiBmaXJzdCAmJiAh Zmlyc3QudHlwZSkgeworICAgICAgICAgICAgZWwuYXR0cihmaXJzdCk7Cisg ICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAg ICAgICAgZWwuYWRkKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBlbDsKKyAg ICB9OworICAgIC8qXAorICAgICAqIFBhcGVyLnB0cm4KKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIEVxdWl2YWxlbnQgaW4gYmVoYXZpb3Vy IHRvIEBQYXBlci5nLCBleGNlcHQgaXTigJlzIGEgcGF0dGVybi4KKyAgICAg LSB4IChudW1iZXIpIEBvcHRpb25hbCBYIG9mIHRoZSBlbGVtZW50CisgICAg IC0geSAobnVtYmVyKSBAb3B0aW9uYWwgWSBvZiB0aGUgZWxlbWVudAorICAg ICAtIHdpZHRoIChudW1iZXIpIEBvcHRpb25hbCB3aWR0aCBvZiB0aGUgZWxl bWVudAorICAgICAtIGhlaWdodCAobnVtYmVyKSBAb3B0aW9uYWwgaGVpZ2h0 IG9mIHRoZSBlbGVtZW50CisgICAgIC0gdmJ4IChudW1iZXIpIEBvcHRpb25h bCB2aWV3Ym94IFgKKyAgICAgLSB2YnkgKG51bWJlcikgQG9wdGlvbmFsIHZp ZXdib3ggWQorICAgICAtIHZidyAobnVtYmVyKSBAb3B0aW9uYWwgdmlld2Jv eCB3aWR0aAorICAgICAtIHZiaCAobnVtYmVyKSBAb3B0aW9uYWwgdmlld2Jv eCBoZWlnaHQKKyAgICAgKioKKyAgICAgPSAob2JqZWN0KSB0aGUgYHBhdHRl cm5gIGVsZW1lbnQKKyAgICAgKioKKyAgICBcKi8KKyAgICBwcm90by5wdHJu ID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIHZ4LCB2eSwgdncs IHZoKSB7CisgICAgICAgIGlmIChpcyh4LCAib2JqZWN0IikpIHsKKyAgICAg ICAgICAgIHZhciBhdHRyID0geDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGF0dHIgPSB7cGF0dGVyblVuaXRzOiAidXNlclNwYWNlT25Vc2Ui fTsKKyAgICAgICAgICAgIGlmICh4KSB7CisgICAgICAgICAgICAgICAgYXR0 ci54ID0geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh5KSB7 CisgICAgICAgICAgICAgICAgYXR0ci55ID0geTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBudWxsKSB7CisgICAgICAgICAg ICAgICAgYXR0ci53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKGhlaWdodCAhPSBudWxsKSB7CisgICAgICAgICAgICAg ICAgYXR0ci5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAodnggIT0gbnVsbCAmJiB2eSAhPSBudWxsICYmIHZ3ICE9 IG51bGwgJiYgdmggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGF0dHIu dmlld0JveCA9IFt2eCwgdnksIHZ3LCB2aF07CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIGF0dHIudmlld0JveCA9IFt4IHx8IDAs IHkgfHwgMCwgd2lkdGggfHwgMCwgaGVpZ2h0IHx8IDBdOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVsKCJwYXR0 ZXJuIiwgYXR0cik7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci51 c2UKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMg YSA8dXNlPiBlbGVtZW50LgorICAgICAtIGlkIChzdHJpbmcpIEBvcHRpb25h bCBpZCBvZiBlbGVtZW50IHRvIGxpbmsKKyAgICAgKiBvcgorICAgICAtIGlk IChFbGVtZW50KSBAb3B0aW9uYWwgZWxlbWVudCB0byBsaW5rCisgICAgICoq CisgICAgID0gKG9iamVjdCkgdGhlIGB1c2VgIGVsZW1lbnQKKyAgICAgKioK KyAgICBcKi8KKyAgICBwcm90by51c2UgPSBmdW5jdGlvbiAoaWQpIHsKKyAg ICAgICAgaWYgKGlkICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChpZCBp bnN0YW5jZW9mIEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlk LmF0dHIoImlkIikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWQuYXR0cih7 aWQ6IFNuYXAuXy5pZChpZCl9KTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgaWQgPSBpZC5hdHRyKCJpZCIpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKFN0cmluZyhpZCkuY2hhckF0KCkgPT0gIiMi KSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHJpbmcoMSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lbCgidXNl IiwgeyJ4bGluazpocmVmIjogIiMiICsgaWR9KTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHJldHVybiBFbGVtZW50LnByb3RvdHlwZS51c2Uu Y2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLypcCisgICAg ICogUGFwZXIuc3ltYm9sCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBDcmVhdGVzIGEgPHN5bWJvbD4gZWxlbWVudC4KKyAgICAgLSB2Yngg KG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3ggWAorICAgICAtIHZieSAobnVt YmVyKSBAb3B0aW9uYWwgdmlld2JveCBZCisgICAgIC0gdmJ3IChudW1iZXIp IEBvcHRpb25hbCB2aWV3Ym94IHdpZHRoCisgICAgIC0gdmJoIChudW1iZXIp IEBvcHRpb25hbCB2aWV3Ym94IGhlaWdodAorICAgICA9IChvYmplY3QpIHRo ZSBgc3ltYm9sYCBlbGVtZW50CisgICAgICoqCisgICAgXCovCisgICAgcHJv dG8uc3ltYm9sID0gZnVuY3Rpb24gKHZ4LCB2eSwgdncsIHZoKSB7CisgICAg ICAgIHZhciBhdHRyID0ge307CisgICAgICAgIGlmICh2eCAhPSBudWxsICYm IHZ5ICE9IG51bGwgJiYgdncgIT0gbnVsbCAmJiB2aCAhPSBudWxsKSB7Cisg ICAgICAgICAgICBhdHRyLnZpZXdCb3ggPSBbdngsIHZ5LCB2dywgdmhdOwor ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWwoInN5bWJvbCIs IGF0dHIpOworICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIudGV4dAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRHJhd3MgYSB0ZXh0 IHN0cmluZworICAgICAqKgorICAgICAtIHggKG51bWJlcikgeCBjb29yZGlu YXRlIHBvc2l0aW9uCisgICAgIC0geSAobnVtYmVyKSB5IGNvb3JkaW5hdGUg cG9zaXRpb24KKyAgICAgLSB0ZXh0IChzdHJpbmd8YXJyYXkpIFRoZSB0ZXh0 IHN0cmluZyB0byBkcmF3IG9yIGFycmF5IG9mIHN0cmluZ3MgdG8gbmVzdCB3 aXRoaW4gc2VwYXJhdGUgYDx0c3Bhbj5gIGVsZW1lbnRzCisgICAgID0gKG9i amVjdCkgdGhlIGB0ZXh0YCBlbGVtZW50CisgICAgICoqCisgICAgID4gVXNh Z2UKKyAgICAgfCB2YXIgdDEgPSBwYXBlci50ZXh0KDUwLCA1MCwgIlNuYXAi KTsKKyAgICAgfCB2YXIgdDIgPSBwYXBlci50ZXh0KDUwLCA1MCwgWyJTIiwi biIsImEiLCJwIl0pOworICAgICB8IC8vIFRleHQgcGF0aCB1c2FnZQorICAg ICB8IHQxLmF0dHIoe3RleHRwYXRoOiAiTTEwLDEwTDEwMCwxMDAifSk7Cisg ICAgIHwgLy8gb3IKKyAgICAgfCB2YXIgcHRoID0gcGFwZXIucGF0aCgiTTEw LDEwTDEwMCwxMDAiKTsKKyAgICAgfCB0MS5hdHRyKHt0ZXh0cGF0aDogcHRo fSk7CisgICAgXCovCisgICAgcHJvdG8udGV4dCA9IGZ1bmN0aW9uICh4LCB5 LCB0ZXh0KSB7CisgICAgICAgIHZhciBhdHRyID0ge307CisgICAgICAgIGlm IChpcyh4LCAib2JqZWN0IikpIHsKKyAgICAgICAgICAgIGF0dHIgPSB4Owor ICAgICAgICB9IGVsc2UgaWYgKHggIT0gbnVsbCkgeworICAgICAgICAgICAg YXR0ciA9IHsKKyAgICAgICAgICAgICAgICB4OiB4LAorICAgICAgICAgICAg ICAgIHk6IHksCisgICAgICAgICAgICAgICAgdGV4dDogdGV4dCB8fCAiIgor ICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp cy5lbCgidGV4dCIsIGF0dHIpOworICAgIH07CisgICAgLypcCisgICAgICog UGFwZXIubGluZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog RHJhd3MgYSBsaW5lCisgICAgICoqCisgICAgIC0geDEgKG51bWJlcikgeCBj b29yZGluYXRlIHBvc2l0aW9uIG9mIHRoZSBzdGFydAorICAgICAtIHkxIChu dW1iZXIpIHkgY29vcmRpbmF0ZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQKKyAg ICAgLSB4MiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgcG9zaXRpb24gb2YgdGhl IGVuZAorICAgICAtIHkyIChudW1iZXIpIHkgY29vcmRpbmF0ZSBwb3NpdGlv biBvZiB0aGUgZW5kCisgICAgID0gKG9iamVjdCkgdGhlIGBsaW5lYCBlbGVt ZW50CisgICAgICoqCisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIgdDEgPSBw YXBlci5saW5lKDUwLCA1MCwgMTAwLCAxMDApOworICAgIFwqLworICAgIHBy b3RvLmxpbmUgPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIpIHsKKyAgICAg ICAgdmFyIGF0dHIgPSB7fTsKKyAgICAgICAgaWYgKGlzKHgxLCAib2JqZWN0 IikpIHsKKyAgICAgICAgICAgIGF0dHIgPSB4MTsKKyAgICAgICAgfSBlbHNl IGlmICh4MSAhPSBudWxsKSB7CisgICAgICAgICAgICBhdHRyID0geworICAg ICAgICAgICAgICAgIHgxOiB4MSwKKyAgICAgICAgICAgICAgICB4MjogeDIs CisgICAgICAgICAgICAgICAgeTE6IHkxLAorICAgICAgICAgICAgICAgIHky OiB5MgorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1 cm4gdGhpcy5lbCgibGluZSIsIGF0dHIpOworICAgIH07CisgICAgLypcCisg ICAgICogUGFwZXIucG9seWxpbmUKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIERyYXdzIGEgcG9seWxpbmUKKyAgICAgKioKKyAgICAgLSBw b2ludHMgKGFycmF5KSBhcnJheSBvZiBwb2ludHMKKyAgICAgKiBvcgorICAg ICAtIHZhcmFyZ3MgKOKApikgcG9pbnRzCisgICAgID0gKG9iamVjdCkgdGhl IGBwb2x5bGluZWAgZWxlbWVudAorICAgICAqKgorICAgICA+IFVzYWdlCisg ICAgIHwgdmFyIHAxID0gcGFwZXIucG9seWxpbmUoWzEwLCAxMCwgMTAwLCAx MDBdKTsKKyAgICAgfCB2YXIgcDIgPSBwYXBlci5wb2x5bGluZSgxMCwgMTAs IDEwMCwgMTAwKTsKKyAgICBcKi8KKyAgICBwcm90by5wb2x5bGluZSA9IGZ1 bmN0aW9uIChwb2ludHMpIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5n dGggPiAxKSB7CisgICAgICAgICAgICBwb2ludHMgPSBBcnJheS5wcm90b3R5 cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOworICAgICAgICB9CisgICAg ICAgIHZhciBhdHRyID0ge307CisgICAgICAgIGlmIChpcyhwb2ludHMsICJv YmplY3QiKSAmJiAhaXMocG9pbnRzLCAiYXJyYXkiKSkgeworICAgICAgICAg ICAgYXR0ciA9IHBvaW50czsKKyAgICAgICAgfSBlbHNlIGlmIChwb2ludHMg IT0gbnVsbCkgeworICAgICAgICAgICAgYXR0ciA9IHtwb2ludHM6IHBvaW50 c307CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWwoInBvbHls aW5lIiwgYXR0cik7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci5w b2x5Z29uCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBEcmF3 cyBhIHBvbHlnb24uIFNlZSBAUGFwZXIucG9seWxpbmUKKyAgICBcKi8KKyAg ICBwcm90by5wb2x5Z29uID0gZnVuY3Rpb24gKHBvaW50cykgeworICAgICAg ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIHBv aW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywg MCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF0dHIgPSB7fTsKKyAgICAg ICAgaWYgKGlzKHBvaW50cywgIm9iamVjdCIpICYmICFpcyhwb2ludHMsICJh cnJheSIpKSB7CisgICAgICAgICAgICBhdHRyID0gcG9pbnRzOworICAgICAg ICB9IGVsc2UgaWYgKHBvaW50cyAhPSBudWxsKSB7CisgICAgICAgICAgICBh dHRyID0ge3BvaW50czogcG9pbnRzfTsKKyAgICAgICAgfQorICAgICAgICBy ZXR1cm4gdGhpcy5lbCgicG9seWdvbiIsIGF0dHIpOworICAgIH07CisgICAg Ly8gZ3JhZGllbnRzCisgICAgKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy ICQgPSBTbmFwLl8uJDsKKyAgICAgICAgLy8gZ3JhZGllbnRzJyBoZWxwZXJz CisgICAgICAgIGZ1bmN0aW9uIEdzdG9wcygpIHsKKyAgICAgICAgICAgIHJl dHVybiB0aGlzLnNlbGVjdEFsbCgic3RvcCIpOworICAgICAgICB9CisgICAg ICAgIGZ1bmN0aW9uIEdhZGRTdG9wKGNvbG9yLCBvZmZzZXQpIHsKKyAgICAg ICAgICAgIHZhciBzdG9wID0gJCgic3RvcCIpLAorICAgICAgICAgICAgICAg IGF0dHIgPSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldDogK29mZnNl dCArICIlIgorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb2xv ciA9IFNuYXAuY29sb3IoY29sb3IpOworICAgICAgICAgICAgYXR0clsic3Rv cC1jb2xvciJdID0gY29sb3IuaGV4OworICAgICAgICAgICAgaWYgKGNvbG9y Lm9wYWNpdHkgPCAxKSB7CisgICAgICAgICAgICAgICAgYXR0clsic3RvcC1v cGFjaXR5Il0gPSBjb2xvci5vcGFjaXR5OworICAgICAgICAgICAgfQorICAg ICAgICAgICAgJChzdG9wLCBhdHRyKTsKKyAgICAgICAgICAgIHRoaXMubm9k ZS5hcHBlbmRDaGlsZChzdG9wKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz OworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIEdnZXRCQm94KCkgewor ICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAibGluZWFyR3JhZGllbnQi KSB7CisgICAgICAgICAgICAgICAgdmFyIHgxID0gJCh0aGlzLm5vZGUsICJ4 MSIpIHx8IDAsCisgICAgICAgICAgICAgICAgICAgIHgyID0gJCh0aGlzLm5v ZGUsICJ4MiIpIHx8IDEsCisgICAgICAgICAgICAgICAgICAgIHkxID0gJCh0 aGlzLm5vZGUsICJ5MSIpIHx8IDAsCisgICAgICAgICAgICAgICAgICAgIHky ID0gJCh0aGlzLm5vZGUsICJ5MiIpIHx8IDA7CisgICAgICAgICAgICAgICAg cmV0dXJuIFNuYXAuXy5ib3goeDEsIHkxLCBtYXRoLmFicyh4MiAtIHgxKSwg bWF0aC5hYnMoeTIgLSB5MSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICB2YXIgY3ggPSB0aGlzLm5vZGUuY3ggfHwgLjUsCisg ICAgICAgICAgICAgICAgICAgIGN5ID0gdGhpcy5ub2RlLmN5IHx8IC41LAor ICAgICAgICAgICAgICAgICAgICByID0gdGhpcy5ub2RlLnIgfHwgMDsKKyAg ICAgICAgICAgICAgICByZXR1cm4gU25hcC5fLmJveChjeCAtIHIsIGN5IC0g ciwgciAqIDIsIHIgKiAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBmdW5jdGlvbiBncmFkaWVudChkZWZzLCBzdHIpIHsKKyAgICAg ICAgICAgIHZhciBncmFkID0gZXZlKCJzbmFwLnV0aWwuZ3JhZC5wYXJzZSIs IG51bGwsIHN0cikuZmlyc3REZWZpbmVkKCksCisgICAgICAgICAgICAgICAg ZWw7CisgICAgICAgICAgICBpZiAoIWdyYWQpIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdy YWQucGFyYW1zLnVuc2hpZnQoZGVmcyk7CisgICAgICAgICAgICBpZiAoZ3Jh ZC50eXBlLnRvTG93ZXJDYXNlKCkgPT0gImwiKSB7CisgICAgICAgICAgICAg ICAgZWwgPSBncmFkaWVudExpbmVhci5hcHBseSgwLCBncmFkLnBhcmFtcyk7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsID0g Z3JhZGllbnRSYWRpYWwuYXBwbHkoMCwgZ3JhZC5wYXJhbXMpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKGdyYWQudHlwZSAhPSBncmFkLnR5 cGUudG9Mb3dlckNhc2UoKSkgeworICAgICAgICAgICAgICAgICQoZWwubm9k ZSwgeworICAgICAgICAgICAgICAgICAgICBncmFkaWVudFVuaXRzOiAidXNl clNwYWNlT25Vc2UiCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICB2YXIgc3RvcHMgPSBncmFkLnN0b3BzLAorICAg ICAgICAgICAgICAgIGxlbiA9IHN0b3BzLmxlbmd0aCwKKyAgICAgICAgICAg ICAgICBzdGFydCA9IDAsCisgICAgICAgICAgICAgICAgaiA9IDA7CisgICAg ICAgICAgICBmdW5jdGlvbiBzZWVkKGksIGVuZCkgeworICAgICAgICAgICAg ICAgIHZhciBzdGVwID0gKGVuZCAtIHN0YXJ0KSAvIChpIC0gaik7CisgICAg ICAgICAgICAgICAgZm9yICh2YXIgayA9IGo7IGsgPCBpOyBrKyspIHsKKyAg ICAgICAgICAgICAgICAgICAgc3RvcHNba10ub2Zmc2V0ID0gKygrc3RhcnQg KyBzdGVwICogKGsgLSBqKSkudG9GaXhlZCgyKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgaiA9IGk7CisgICAgICAgICAgICAgICAg c3RhcnQgPSBlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW4t LTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKysp IGlmICgib2Zmc2V0IiBpbiBzdG9wc1tpXSkgeworICAgICAgICAgICAgICAg IHNlZWQoaSwgc3RvcHNbaV0ub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHN0b3BzW2xlbl0ub2Zmc2V0ID0gc3RvcHNbbGVuXS5vZmZz ZXQgfHwgMTAwOworICAgICAgICAgICAgc2VlZChsZW4sIHN0b3BzW2xlbl0u b2Zmc2V0KTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuOyBp KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgc3RvcCA9IHN0b3BzW2ldOwor ICAgICAgICAgICAgICAgIGVsLmFkZFN0b3Aoc3RvcC5jb2xvciwgc3RvcC5v ZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVs OworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGdyYWRpZW50TGluZWFy KGRlZnMsIHgxLCB5MSwgeDIsIHkyKSB7CisgICAgICAgICAgICB2YXIgZWwg PSBTbmFwLl8ubWFrZSgibGluZWFyR3JhZGllbnQiLCBkZWZzKTsKKyAgICAg ICAgICAgIGVsLnN0b3BzID0gR3N0b3BzOworICAgICAgICAgICAgZWwuYWRk U3RvcCA9IEdhZGRTdG9wOworICAgICAgICAgICAgZWwuZ2V0QkJveCA9IEdn ZXRCQm94OworICAgICAgICAgICAgaWYgKHgxICE9IG51bGwpIHsKKyAgICAg ICAgICAgICAgICAkKGVsLm5vZGUsIHsKKyAgICAgICAgICAgICAgICAgICAg eDE6IHgxLAorICAgICAgICAgICAgICAgICAgICB5MTogeTEsCisgICAgICAg ICAgICAgICAgICAgIHgyOiB4MiwKKyAgICAgICAgICAgICAgICAgICAgeTI6 IHkyCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICByZXR1cm4gZWw7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rp b24gZ3JhZGllbnRSYWRpYWwoZGVmcywgY3gsIGN5LCByLCBmeCwgZnkpIHsK KyAgICAgICAgICAgIHZhciBlbCA9IFNuYXAuXy5tYWtlKCJyYWRpYWxHcmFk aWVudCIsIGRlZnMpOworICAgICAgICAgICAgZWwuc3RvcHMgPSBHc3RvcHM7 CisgICAgICAgICAgICBlbC5hZGRTdG9wID0gR2FkZFN0b3A7CisgICAgICAg ICAgICBlbC5nZXRCQm94ID0gR2dldEJCb3g7CisgICAgICAgICAgICBpZiAo Y3ggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICQoZWwubm9kZSwgewor ICAgICAgICAgICAgICAgICAgICBjeDogY3gsCisgICAgICAgICAgICAgICAg ICAgIGN5OiBjeSwKKyAgICAgICAgICAgICAgICAgICAgcjogcgorICAgICAg ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KGZ4ICE9IG51bGwgJiYgZnkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAg ICQoZWwubm9kZSwgeworICAgICAgICAgICAgICAgICAgICBmeDogZngsCisg ICAgICAgICAgICAgICAgICAgIGZ5OiBmeQorICAgICAgICAgICAgICAgIH0p OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVsOworICAg ICAgICB9CisgICAgICAgIC8qXAorICAgICAgICAgKiBQYXBlci5ncmFkaWVu dAorICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAg ICogQ3JlYXRlcyBhIGdyYWRpZW50IGVsZW1lbnQKKyAgICAgICAgICoqCisg ICAgICAgICAtIGdyYWRpZW50IChzdHJpbmcpIGdyYWRpZW50IGRlc2NyaXB0 b3IKKyAgICAgICAgID4gR3JhZGllbnQgRGVzY3JpcHRvcgorICAgICAgICAg KiBUaGUgZ3JhZGllbnQgZGVzY3JpcHRvciBpcyBhbiBleHByZXNzaW9uIGZv cm1hdHRlZCBhcworICAgICAgICAgKiBmb2xsb3dzOiBgPHR5cGU+KDxjb29y ZHM+KTxjb2xvcnM+YC4gIFRoZSBgPHR5cGU+YCBjYW4gYmUKKyAgICAgICAg ICogZWl0aGVyIGxpbmVhciBvciByYWRpYWwuICBUaGUgdXBwZXJjYXNlIGBM YCBvciBgUmAgbGV0dGVycworICAgICAgICAgKiBpbmRpY2F0ZSBhYnNvbHV0 ZSBjb29yZGluYXRlcyBvZmZzZXQgZnJvbSB0aGUgU1ZHIHN1cmZhY2UuCisg ICAgICAgICAqIExvd2VyY2FzZSBgbGAgb3IgYHJgIGxldHRlcnMgaW5kaWNh dGUgY29vcmRpbmF0ZXMKKyAgICAgICAgICogY2FsY3VsYXRlZCByZWxhdGl2 ZSB0byB0aGUgZWxlbWVudCB0byB3aGljaCB0aGUgZ3JhZGllbnQgaXMKKyAg ICAgICAgICogYXBwbGllZC4gIENvb3JkaW5hdGVzIHNwZWNpZnkgYSBsaW5l YXIgZ3JhZGllbnQgdmVjdG9yIGFzCisgICAgICAgICAqIGB4MWAsIGB5MWAs IGB4MmAsIGB5MmAsIG9yIGEgcmFkaWFsIGdyYWRpZW50IGFzIGBjeGAsIGBj eWAsCisgICAgICAgICAqIGByYCBhbmQgb3B0aW9uYWwgYGZ4YCwgYGZ5YCBz cGVjaWZ5aW5nIGEgZm9jYWwgcG9pbnQgYXdheQorICAgICAgICAgKiBmcm9t IHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS4gU3BlY2lmeSBgPGNvbG9ycz5g IGFzIGEgbGlzdAorICAgICAgICAgKiBvZiBkYXNoLXNlcGFyYXRlZCBDU1Mg Y29sb3IgdmFsdWVzLiAgRWFjaCBjb2xvciBtYXkgYmUKKyAgICAgICAgICog Zm9sbG93ZWQgYnkgYSBjdXN0b20gb2Zmc2V0IHZhbHVlLCBzZXBhcmF0ZWQg d2l0aCBhIGNvbG9uCisgICAgICAgICAqIGNoYXJhY3Rlci4KKyAgICAgICAg ID4gRXhhbXBsZXMKKyAgICAgICAgICogTGluZWFyIGdyYWRpZW50LCByZWxh dGl2ZSBmcm9tIHRvcC1sZWZ0IGNvcm5lciB0byBib3R0b20tcmlnaHQKKyAg ICAgICAgICogY29ybmVyLCBmcm9tIGJsYWNrIHRocm91Z2ggcmVkIHRvIHdo aXRlOgorICAgICAgICAgfCB2YXIgZyA9IHBhcGVyLmdyYWRpZW50KCJsKDAs IDAsIDEsIDEpIzAwMC0jZjAwLSNmZmYiKTsKKyAgICAgICAgICogTGluZWFy IGdyYWRpZW50LCBhYnNvbHV0ZSBmcm9tICgwLCAwKSB0byAoMTAwLCAxMDAp LCBmcm9tIGJsYWNrCisgICAgICAgICAqIHRocm91Z2ggcmVkIGF0IDI1JSB0 byB3aGl0ZToKKyAgICAgICAgIHwgdmFyIGcgPSBwYXBlci5ncmFkaWVudCgi TCgwLCAwLCAxMDAsIDEwMCkjMDAwLSNmMDA6MjUtI2ZmZiIpOworICAgICAg ICAgKiBSYWRpYWwgZ3JhZGllbnQsIHJlbGF0aXZlIGZyb20gdGhlIGNlbnRl ciBvZiB0aGUgZWxlbWVudCB3aXRoIHJhZGl1cworICAgICAgICAgKiBoYWxm IHRoZSB3aWR0aCwgZnJvbSBibGFjayB0byB3aGl0ZToKKyAgICAgICAgIHwg dmFyIGcgPSBwYXBlci5ncmFkaWVudCgicigwLjUsIDAuNSwgMC41KSMwMDAt I2ZmZiIpOworICAgICAgICAgKiBUbyBhcHBseSB0aGUgZ3JhZGllbnQ6Cisg ICAgICAgICB8IHBhcGVyLmNpcmNsZSg1MCwgNTAsIDQwKS5hdHRyKHsKKyAg ICAgICAgIHwgICAgIGZpbGw6IGcKKyAgICAgICAgIHwgfSk7CisgICAgICAg ICA9IChvYmplY3QpIHRoZSBgZ3JhZGllbnRgIGVsZW1lbnQKKyAgICAgICAg XCovCisgICAgICAgIHByb3RvLmdyYWRpZW50ID0gZnVuY3Rpb24gKHN0cikg eworICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50KHRoaXMuZGVmcywgc3Ry KTsKKyAgICAgICAgfTsKKyAgICAgICAgcHJvdG8uZ3JhZGllbnRMaW5lYXIg PSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIpIHsKKyAgICAgICAgICAgIHJl dHVybiBncmFkaWVudExpbmVhcih0aGlzLmRlZnMsIHgxLCB5MSwgeDIsIHky KTsKKyAgICAgICAgfTsKKyAgICAgICAgcHJvdG8uZ3JhZGllbnRSYWRpYWwg PSBmdW5jdGlvbiAoY3gsIGN5LCByLCBmeCwgZnkpIHsKKyAgICAgICAgICAg IHJldHVybiBncmFkaWVudFJhZGlhbCh0aGlzLmRlZnMsIGN4LCBjeSwgciwg ZngsIGZ5KTsKKyAgICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAq IFBhcGVyLnRvU3RyaW5nCisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAg ICAqKgorICAgICAgICAgKiBSZXR1cm5zIFNWRyBjb2RlIGZvciB0aGUgQFBh cGVyCisgICAgICAgICA9IChzdHJpbmcpIFNWRyBjb2RlIGZvciB0aGUgQFBh cGVyCisgICAgICAgIFwqLworICAgICAgICBwcm90by50b1N0cmluZyA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBkb2MgPSB0aGlzLm5vZGUu b3duZXJEb2N1bWVudCwKKyAgICAgICAgICAgICAgICBmID0gZG9jLmNyZWF0 ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAgICAgICAgICAgICBkID0gZG9j LmNyZWF0ZUVsZW1lbnQoImRpdiIpLAorICAgICAgICAgICAgICAgIHN2ZyA9 IHRoaXMubm9kZS5jbG9uZU5vZGUodHJ1ZSksCisgICAgICAgICAgICAgICAg cmVzOworICAgICAgICAgICAgZi5hcHBlbmRDaGlsZChkKTsKKyAgICAgICAg ICAgIGQuYXBwZW5kQ2hpbGQoc3ZnKTsKKyAgICAgICAgICAgIFNuYXAuXy4k KHN2Zywge3htbG5zOiAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSk7 CisgICAgICAgICAgICByZXMgPSBkLmlubmVySFRNTDsKKyAgICAgICAgICAg IGYucmVtb3ZlQ2hpbGQoZi5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIHJl dHVybiByZXM7CisgICAgICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAg KiBQYXBlci50b0RhdGFVUkwKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAg ICAgICoqCisgICAgICAgICAqIFJldHVybnMgU1ZHIGNvZGUgZm9yIHRoZSBA UGFwZXIgYXMgRGF0YSBVUkkgc3RyaW5nLgorICAgICAgICAgPSAoc3RyaW5n KSBEYXRhIFVSSSBzdHJpbmcKKyAgICAgICAgXCovCisgICAgICAgIHByb3Rv LnRvRGF0YVVSTCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh3 aW5kb3cgJiYgd2luZG93LmJ0b2EpIHsKKyAgICAgICAgICAgICAgICByZXR1 cm4gImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsIiArIGJ0b2EodW5lc2Nh cGUoZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMpKSk7CisgICAgICAgICAgICB9 CisgICAgICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBQYXBlci5j bGVhcgorICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAg ICAgICogUmVtb3ZlcyBhbGwgY2hpbGQgbm9kZXMgb2YgdGhlIHBhcGVyLCBl eGNlcHQgPGRlZnM+LgorICAgICAgICBcKi8KKyAgICAgICAgcHJvdG8uY2xl YXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRo aXMubm9kZS5maXJzdENoaWxkLAorICAgICAgICAgICAgICAgIG5leHQ7Cisg ICAgICAgICAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAgICAgICAgIG5l eHQgPSBub2RlLm5leHRTaWJsaW5nOworICAgICAgICAgICAgICAgIGlmIChu b2RlLnRhZ05hbWUgIT0gImRlZnMiKSB7CisgICAgICAgICAgICAgICAgICAg IG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwcm90by5j bGVhci5jYWxsKHtub2RlOiBub2RlfSk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0OworICAgICAgICAgICAgfQor ICAgICAgICB9OworICAgIH0oKSk7Cit9KTsKKworLy8gQ29weXJpZ2h0IChj KSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91 IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3 aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m IHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3Jn L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVk IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz b2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQg V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg ZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0 aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu ZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBs dWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IpIHsK KyAgICB2YXIgZWxwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLAorICAgICAg ICBpcyA9IFNuYXAuaXMsCisgICAgICAgIGNsb25lID0gU25hcC5fLmNsb25l LAorICAgICAgICBoYXMgPSAiaGFzT3duUHJvcGVydHkiLAorICAgICAgICBw MnMgPSAvLD8oW2Etel0pLD8vZ2ksCisgICAgICAgIHRvRmxvYXQgPSBwYXJz ZUZsb2F0LAorICAgICAgICBtYXRoID0gTWF0aCwKKyAgICAgICAgUEkgPSBt YXRoLlBJLAorICAgICAgICBtbWluID0gbWF0aC5taW4sCisgICAgICAgIG1t YXggPSBtYXRoLm1heCwKKyAgICAgICAgcG93ID0gbWF0aC5wb3csCisgICAg ICAgIGFicyA9IG1hdGguYWJzOworICAgIGZ1bmN0aW9uIHBhdGhzKHBzKSB7 CisgICAgICAgIHZhciBwID0gcGF0aHMucHMgPSBwYXRocy5wcyB8fCB7fTsK KyAgICAgICAgaWYgKHBbcHNdKSB7CisgICAgICAgICAgICBwW3BzXS5zbGVl cCA9IDEwMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBbcHNd ID0geworICAgICAgICAgICAgICAgIHNsZWVwOiAxMDAKKyAgICAgICAgICAg IH07CisgICAgICAgIH0KKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAo KSB7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcCkgaWYgKHBbaGFz XShrZXkpICYmIGtleSAhPSBwcykgeworICAgICAgICAgICAgICAgIHBba2V5 XS5zbGVlcC0tOworICAgICAgICAgICAgICAgICFwW2tleV0uc2xlZXAgJiYg ZGVsZXRlIHBba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg ICAgICAgIHJldHVybiBwW3BzXTsKKyAgICB9CisgICAgZnVuY3Rpb24gYm94 KHgsIHksIHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgaWYgKHggPT0gbnVs bCkgeworICAgICAgICAgICAgeCA9IHkgPSB3aWR0aCA9IGhlaWdodCA9IDA7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPT0gbnVsbCkgeworICAgICAg ICAgICAgeSA9IHgueTsKKyAgICAgICAgICAgIHdpZHRoID0geC53aWR0aDsK KyAgICAgICAgICAgIGhlaWdodCA9IHguaGVpZ2h0OworICAgICAgICAgICAg eCA9IHgueDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAg ICAgICAgeDogeCwKKyAgICAgICAgICAgIHk6IHksCisgICAgICAgICAgICB3 aWR0aDogd2lkdGgsCisgICAgICAgICAgICB3OiB3aWR0aCwKKyAgICAgICAg ICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAgICAgICAgaDogaGVpZ2h0LAor ICAgICAgICAgICAgeDI6IHggKyB3aWR0aCwKKyAgICAgICAgICAgIHkyOiB5 ICsgaGVpZ2h0LAorICAgICAgICAgICAgY3g6IHggKyB3aWR0aCAvIDIsCisg ICAgICAgICAgICBjeTogeSArIGhlaWdodCAvIDIsCisgICAgICAgICAgICBy MTogbWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyLAorICAgICAgICAgICAg cjI6IG1hdGgubWF4KHdpZHRoLCBoZWlnaHQpIC8gMiwKKyAgICAgICAgICAg IHIwOiBtYXRoLnNxcnQod2lkdGggKiB3aWR0aCArIGhlaWdodCAqIGhlaWdo dCkgLyAyLAorICAgICAgICAgICAgcGF0aDogcmVjdFBhdGgoeCwgeSwgd2lk dGgsIGhlaWdodCksCisgICAgICAgICAgICB2YjogW3gsIHksIHdpZHRoLCBo ZWlnaHRdLmpvaW4oIiAiKQorICAgICAgICB9OworICAgIH0KKyAgICBmdW5j dGlvbiB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuam9pbigi LCIpLnJlcGxhY2UocDJzLCAiJDEiKTsKKyAgICB9CisgICAgZnVuY3Rpb24g cGF0aENsb25lKHBhdGhBcnJheSkgeworICAgICAgICB2YXIgcmVzID0gY2xv bmUocGF0aEFycmF5KTsKKyAgICAgICAgcmVzLnRvU3RyaW5nID0gdG9TdHJp bmc7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGZ1bmN0aW9u IGdldFBvaW50QXRTZWdtZW50TGVuZ3RoKHAxeCwgcDF5LCBjMXgsIGMxeSwg YzJ4LCBjMnksIHAyeCwgcDJ5LCBsZW5ndGgpIHsKKyAgICAgICAgaWYgKGxl bmd0aCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gYmV6bGVuKHAx eCwgcDF5LCBjMXgsIGMxeSwgYzJ4LCBjMnksIHAyeCwgcDJ5KTsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmaW5kRG90c0F0U2Vn bWVudChwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAyeSwK KyAgICAgICAgICAgICAgICBnZXRUb3RMZW4ocDF4LCBwMXksIGMxeCwgYzF5 LCBjMngsIGMyeSwgcDJ4LCBwMnksIGxlbmd0aCkpOworICAgICAgICB9Cisg ICAgfQorICAgIGZ1bmN0aW9uIGdldExlbmd0aEZhY3RvcnkoaXN0b3RhbCwg c3VicGF0aCkgeworICAgICAgICBmdW5jdGlvbiBPKHZhbCkgeworICAgICAg ICAgICAgcmV0dXJuICsoK3ZhbCkudG9GaXhlZCgzKTsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gU25hcC5fLmNhY2hlcihmdW5jdGlvbiAocGF0aCwg bGVuZ3RoLCBvbmx5c3RhcnQpIHsKKyAgICAgICAgICAgIGlmIChwYXRoIGlu c3RhbmNlb2YgRWxlbWVudCkgeworICAgICAgICAgICAgICAgIHBhdGggPSBw YXRoLmF0dHIoImQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBh dGggPSBwYXRoMmN1cnZlKHBhdGgpOworICAgICAgICAgICAgdmFyIHgsIHks IHAsIGwsIHNwID0gIiIsIHN1YnBhdGhzID0ge30sIHBvaW50LAorICAgICAg ICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g MCwgaWkgPSBwYXRoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAg ICAgICAgICBwID0gcGF0aFtpXTsKKyAgICAgICAgICAgICAgICBpZiAocFsw XSA9PSAiTSIpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9ICtwWzFdOwor ICAgICAgICAgICAgICAgICAgICB5ID0gK3BbMl07CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbCA9IGdldFBvaW50 QXRTZWdtZW50TGVuZ3RoKHgsIHksIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0s IHBbNV0sIHBbNl0pOworICAgICAgICAgICAgICAgICAgICBpZiAobGVuICsg bCA+IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1 YnBhdGggJiYgIXN1YnBhdGhzLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcG9pbnQgPSBnZXRQb2ludEF0U2VnbWVudExlbmd0aCh4 LCB5LCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVdLCBwWzZdLCBsZW5n dGggLSBsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwICs9 IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkMiICsgTyhw b2ludC5zdGFydC54KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTyhwb2ludC5zdGFydC55KSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTyhwb2ludC5tLngpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPKHBvaW50Lm0ueSksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE8ocG9pbnQueCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE8ocG9pbnQueSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChv bmx5c3RhcnQpIHtyZXR1cm4gc3A7fQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN1YnBhdGhzLnN0YXJ0ID0gc3A7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3AgPSBbCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJNIiArIE8ocG9pbnQueCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE8ocG9pbnQueSkgKyAiQyIgKyBPKHBvaW50Lm4ueCks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8ocG9pbnQubi55 KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwb2ludC5l bmQueCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8ocG9p bnQuZW5kLnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP KHBbNV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKHBb Nl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5qb2luKCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuICs9IGw7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeCA9ICtwWzVdOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHkgPSArcFs2XTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXN0b3RhbCAmJiAh c3VicGF0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50 ID0gZ2V0UG9pbnRBdFNlZ21lbnRMZW5ndGgoeCwgeSwgcFsxXSwgcFsyXSwg cFszXSwgcFs0XSwgcFs1XSwgcFs2XSwgbGVuZ3RoIC0gbGVuKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgbGVuICs9IGw7CisgICAgICAgICAgICAgICAg ICAgIHggPSArcFs1XTsKKyAgICAgICAgICAgICAgICAgICAgeSA9ICtwWzZd OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcCArPSBw LnNoaWZ0KCkgKyBwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Vi cGF0aHMuZW5kID0gc3A7CisgICAgICAgICAgICBwb2ludCA9IGlzdG90YWwg PyBsZW4gOiBzdWJwYXRoID8gc3VicGF0aHMgOiBmaW5kRG90c0F0U2VnbWVu dCh4LCB5LCBwWzBdLCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVdLCAx KTsKKyAgICAgICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgfSwgbnVs bCwgU25hcC5fLmNsb25lKTsKKyAgICB9CisgICAgdmFyIGdldFRvdGFsTGVu Z3RoID0gZ2V0TGVuZ3RoRmFjdG9yeSgxKSwKKyAgICAgICAgZ2V0UG9pbnRB dExlbmd0aCA9IGdldExlbmd0aEZhY3RvcnkoKSwKKyAgICAgICAgZ2V0U3Vi cGF0aHNBdExlbmd0aCA9IGdldExlbmd0aEZhY3RvcnkoMCwgMSk7CisgICAg ZnVuY3Rpb24gZmluZERvdHNBdFNlZ21lbnQocDF4LCBwMXksIGMxeCwgYzF5 LCBjMngsIGMyeSwgcDJ4LCBwMnksIHQpIHsKKyAgICAgICAgdmFyIHQxID0g MSAtIHQsCisgICAgICAgICAgICB0MTMgPSBwb3codDEsIDMpLAorICAgICAg ICAgICAgdDEyID0gcG93KHQxLCAyKSwKKyAgICAgICAgICAgIHQyID0gdCAq IHQsCisgICAgICAgICAgICB0MyA9IHQyICogdCwKKyAgICAgICAgICAgIHgg PSB0MTMgKiBwMXggKyB0MTIgKiAzICogdCAqIGMxeCArIHQxICogMyAqIHQg KiB0ICogYzJ4ICsgdDMgKiBwMngsCisgICAgICAgICAgICB5ID0gdDEzICog cDF5ICsgdDEyICogMyAqIHQgKiBjMXkgKyB0MSAqIDMgKiB0ICogdCAqIGMy eSArIHQzICogcDJ5LAorICAgICAgICAgICAgbXggPSBwMXggKyAyICogdCAq IChjMXggLSBwMXgpICsgdDIgKiAoYzJ4IC0gMiAqIGMxeCArIHAxeCksCisg ICAgICAgICAgICBteSA9IHAxeSArIDIgKiB0ICogKGMxeSAtIHAxeSkgKyB0 MiAqIChjMnkgLSAyICogYzF5ICsgcDF5KSwKKyAgICAgICAgICAgIG54ID0g YzF4ICsgMiAqIHQgKiAoYzJ4IC0gYzF4KSArIHQyICogKHAyeCAtIDIgKiBj MnggKyBjMXgpLAorICAgICAgICAgICAgbnkgPSBjMXkgKyAyICogdCAqIChj MnkgLSBjMXkpICsgdDIgKiAocDJ5IC0gMiAqIGMyeSArIGMxeSksCisgICAg ICAgICAgICBheCA9IHQxICogcDF4ICsgdCAqIGMxeCwKKyAgICAgICAgICAg IGF5ID0gdDEgKiBwMXkgKyB0ICogYzF5LAorICAgICAgICAgICAgY3ggPSB0 MSAqIGMyeCArIHQgKiBwMngsCisgICAgICAgICAgICBjeSA9IHQxICogYzJ5 ICsgdCAqIHAyeSwKKyAgICAgICAgICAgIGFscGhhID0gKDkwIC0gbWF0aC5h dGFuMihteCAtIG54LCBteSAtIG55KSAqIDE4MCAvIFBJKTsKKyAgICAgICAg Ly8gKG14ID4gbnggfHwgbXkgPCBueSkgJiYgKGFscGhhICs9IDE4MCk7Cisg ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB4OiB4LAorICAgICAgICAg ICAgeTogeSwKKyAgICAgICAgICAgIG06IHt4OiBteCwgeTogbXl9LAorICAg ICAgICAgICAgbjoge3g6IG54LCB5OiBueX0sCisgICAgICAgICAgICBzdGFy dDoge3g6IGF4LCB5OiBheX0sCisgICAgICAgICAgICBlbmQ6IHt4OiBjeCwg eTogY3l9LAorICAgICAgICAgICAgYWxwaGE6IGFscGhhCisgICAgICAgIH07 CisgICAgfQorICAgIGZ1bmN0aW9uIGJlemllckJCb3gocDF4LCBwMXksIGMx eCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnkpIHsKKyAgICAgICAgaWYgKCFT bmFwLmlzKHAxeCwgImFycmF5IikpIHsKKyAgICAgICAgICAgIHAxeCA9IFtw MXgsIHAxeSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAyeV07CisgICAg ICAgIH0KKyAgICAgICAgdmFyIGJib3ggPSBjdXJ2ZURpbS5hcHBseShudWxs LCBwMXgpOworICAgICAgICByZXR1cm4gYm94KAorICAgICAgICAgICAgYmJv eC5taW4ueCwKKyAgICAgICAgICAgIGJib3gubWluLnksCisgICAgICAgICAg ICBiYm94Lm1heC54IC0gYmJveC5taW4ueCwKKyAgICAgICAgICAgIGJib3gu bWF4LnkgLSBiYm94Lm1pbi55CisgICAgICAgICk7CisgICAgfQorICAgIGZ1 bmN0aW9uIGlzUG9pbnRJbnNpZGVCQm94KGJib3gsIHgsIHkpIHsKKyAgICAg ICAgcmV0dXJuICB4ID49IGJib3gueCAmJgorICAgICAgICAgICAgICAgIHgg PD0gYmJveC54ICsgYmJveC53aWR0aCAmJgorICAgICAgICAgICAgICAgIHkg Pj0gYmJveC55ICYmCisgICAgICAgICAgICAgICAgeSA8PSBiYm94LnkgKyBi Ym94LmhlaWdodDsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNCQm94SW50ZXJz ZWN0KGJib3gxLCBiYm94MikgeworICAgICAgICBiYm94MSA9IGJveChiYm94 MSk7CisgICAgICAgIGJib3gyID0gYm94KGJib3gyKTsKKyAgICAgICAgcmV0 dXJuIGlzUG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54LCBiYm94MS55 KQorICAgICAgICAgICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDIsIGJi b3gxLngyLCBiYm94MS55KQorICAgICAgICAgICAgfHwgaXNQb2ludEluc2lk ZUJCb3goYmJveDIsIGJib3gxLngsIGJib3gxLnkyKQorICAgICAgICAgICAg fHwgaXNQb2ludEluc2lkZUJCb3goYmJveDIsIGJib3gxLngyLCBiYm94MS55 MikKKyAgICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gxLCBi Ym94Mi54LCBiYm94Mi55KQorICAgICAgICAgICAgfHwgaXNQb2ludEluc2lk ZUJCb3goYmJveDEsIGJib3gyLngyLCBiYm94Mi55KQorICAgICAgICAgICAg fHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngsIGJib3gyLnky KQorICAgICAgICAgICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJi b3gyLngyLCBiYm94Mi55MikKKyAgICAgICAgICAgIHx8IChiYm94MS54IDwg YmJveDIueDIgJiYgYmJveDEueCA+IGJib3gyLngKKyAgICAgICAgICAgICAg ICB8fCBiYm94Mi54IDwgYmJveDEueDIgJiYgYmJveDIueCA+IGJib3gxLngp CisgICAgICAgICAgICAmJiAoYmJveDEueSA8IGJib3gyLnkyICYmIGJib3gx LnkgPiBiYm94Mi55CisgICAgICAgICAgICAgICAgfHwgYmJveDIueSA8IGJi b3gxLnkyICYmIGJib3gyLnkgPiBiYm94MS55KTsKKyAgICB9CisgICAgZnVu Y3Rpb24gYmFzZTModCwgcDEsIHAyLCBwMywgcDQpIHsKKyAgICAgICAgdmFy IHQxID0gLTMgKiBwMSArIDkgKiBwMiAtIDkgKiBwMyArIDMgKiBwNCwKKyAg ICAgICAgICAgIHQyID0gdCAqIHQxICsgNiAqIHAxIC0gMTIgKiBwMiArIDYg KiBwMzsKKyAgICAgICAgcmV0dXJuIHQgKiB0MiAtIDMgKiBwMSArIDMgKiBw MjsKKyAgICB9CisgICAgZnVuY3Rpb24gYmV6bGVuKHgxLCB5MSwgeDIsIHky LCB4MywgeTMsIHg0LCB5NCwgeikgeworICAgICAgICBpZiAoeiA9PSBudWxs KSB7CisgICAgICAgICAgICB6ID0gMTsKKyAgICAgICAgfQorICAgICAgICB6 ID0geiA+IDEgPyAxIDogeiA8IDAgPyAwIDogejsKKyAgICAgICAgdmFyIHoy ID0geiAvIDIsCisgICAgICAgICAgICBuID0gMTIsCisgICAgICAgICAgICBU dmFsdWVzID0gWy0uMTI1MiwuMTI1MiwtLjM2NzgsLjM2NzgsLS41ODczLC41 ODczLC0uNzY5OSwuNzY5OSwtLjkwNDEsLjkwNDEsLS45ODE2LC45ODE2XSwK KyAgICAgICAgICAgIEN2YWx1ZXMgPSBbMC4yNDkxLDAuMjQ5MSwwLjIzMzUs MC4yMzM1LDAuMjAzMiwwLjIwMzIsMC4xNjAxLDAuMTYwMSwwLjEwNjksMC4x MDY5LDAuMDQ3MiwwLjA0NzJdLAorICAgICAgICAgICAgc3VtID0gMDsKKyAg ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAg ICAgIHZhciBjdCA9IHoyICogVHZhbHVlc1tpXSArIHoyLAorICAgICAgICAg ICAgICAgIHhiYXNlID0gYmFzZTMoY3QsIHgxLCB4MiwgeDMsIHg0KSwKKyAg ICAgICAgICAgICAgICB5YmFzZSA9IGJhc2UzKGN0LCB5MSwgeTIsIHkzLCB5 NCksCisgICAgICAgICAgICAgICAgY29tYiA9IHhiYXNlICogeGJhc2UgKyB5 YmFzZSAqIHliYXNlOworICAgICAgICAgICAgc3VtICs9IEN2YWx1ZXNbaV0g KiBtYXRoLnNxcnQoY29tYik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IHoyICogc3VtOworICAgIH0KKyAgICBmdW5jdGlvbiBnZXRUb3RMZW4oeDEs IHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBsbCkgeworICAgICAgICBp ZiAobGwgPCAwIHx8IGJlemxlbih4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4 NCwgeTQpIDwgbGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg fQorICAgICAgICB2YXIgdCA9IDEsCisgICAgICAgICAgICBzdGVwID0gdCAv IDIsCisgICAgICAgICAgICB0MiA9IHQgLSBzdGVwLAorICAgICAgICAgICAg bCwKKyAgICAgICAgICAgIGUgPSAuMDE7CisgICAgICAgIGwgPSBiZXpsZW4o eDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCB0Mik7CisgICAgICAg IHdoaWxlIChhYnMobCAtIGxsKSA+IGUpIHsKKyAgICAgICAgICAgIHN0ZXAg Lz0gMjsKKyAgICAgICAgICAgIHQyICs9IChsIDwgbGwgPyAxIDogLTEpICog c3RlcDsKKyAgICAgICAgICAgIGwgPSBiZXpsZW4oeDEsIHkxLCB4MiwgeTIs IHgzLCB5MywgeDQsIHk0LCB0Mik7CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIHQyOworICAgIH0KKyAgICBmdW5jdGlvbiBpbnRlcnNlY3QoeDEsIHkx LCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0KSB7CisgICAgICAgIGlmICgKKyAg ICAgICAgICAgIG1tYXgoeDEsIHgyKSA8IG1taW4oeDMsIHg0KSB8fAorICAg ICAgICAgICAgbW1pbih4MSwgeDIpID4gbW1heCh4MywgeDQpIHx8CisgICAg ICAgICAgICBtbWF4KHkxLCB5MikgPCBtbWluKHkzLCB5NCkgfHwKKyAgICAg ICAgICAgIG1taW4oeTEsIHkyKSA+IG1tYXgoeTMsIHk0KQorICAgICAgICAp IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2 YXIgbnggPSAoeDEgKiB5MiAtIHkxICogeDIpICogKHgzIC0geDQpIC0gKHgx IC0geDIpICogKHgzICogeTQgLSB5MyAqIHg0KSwKKyAgICAgICAgICAgIG55 ID0gKHgxICogeTIgLSB5MSAqIHgyKSAqICh5MyAtIHk0KSAtICh5MSAtIHky KSAqICh4MyAqIHk0IC0geTMgKiB4NCksCisgICAgICAgICAgICBkZW5vbWlu YXRvciA9ICh4MSAtIHgyKSAqICh5MyAtIHk0KSAtICh5MSAtIHkyKSAqICh4 MyAtIHg0KTsKKworICAgICAgICBpZiAoIWRlbm9taW5hdG9yKSB7CisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHB4ID0g bnggLyBkZW5vbWluYXRvciwKKyAgICAgICAgICAgIHB5ID0gbnkgLyBkZW5v bWluYXRvciwKKyAgICAgICAgICAgIHB4MiA9ICtweC50b0ZpeGVkKDIpLAor ICAgICAgICAgICAgcHkyID0gK3B5LnRvRml4ZWQoMik7CisgICAgICAgIGlm ICgKKyAgICAgICAgICAgIHB4MiA8ICttbWluKHgxLCB4MikudG9GaXhlZCgy KSB8fAorICAgICAgICAgICAgcHgyID4gK21tYXgoeDEsIHgyKS50b0ZpeGVk KDIpIHx8CisgICAgICAgICAgICBweDIgPCArbW1pbih4MywgeDQpLnRvRml4 ZWQoMikgfHwKKyAgICAgICAgICAgIHB4MiA+ICttbWF4KHgzLCB4NCkudG9G aXhlZCgyKSB8fAorICAgICAgICAgICAgcHkyIDwgK21taW4oeTEsIHkyKS50 b0ZpeGVkKDIpIHx8CisgICAgICAgICAgICBweTIgPiArbW1heCh5MSwgeTIp LnRvRml4ZWQoMikgfHwKKyAgICAgICAgICAgIHB5MiA8ICttbWluKHkzLCB5 NCkudG9GaXhlZCgyKSB8fAorICAgICAgICAgICAgcHkyID4gK21tYXgoeTMs IHk0KS50b0ZpeGVkKDIpCisgICAgICAgICkgeworICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7eDogcHgsIHk6IHB5 fTsKKyAgICB9CisgICAgZnVuY3Rpb24gaW50ZXIoYmV6MSwgYmV6Mikgewor ICAgICAgICByZXR1cm4gaW50ZXJIZWxwZXIoYmV6MSwgYmV6Mik7CisgICAg fQorICAgIGZ1bmN0aW9uIGludGVyQ291bnQoYmV6MSwgYmV6MikgeworICAg ICAgICByZXR1cm4gaW50ZXJIZWxwZXIoYmV6MSwgYmV6MiwgMSk7CisgICAg fQorICAgIGZ1bmN0aW9uIGludGVySGVscGVyKGJlejEsIGJlejIsIGp1c3RD b3VudCkgeworICAgICAgICB2YXIgYmJveDEgPSBiZXppZXJCQm94KGJlejEp LAorICAgICAgICAgICAgYmJveDIgPSBiZXppZXJCQm94KGJlejIpOworICAg ICAgICBpZiAoIWlzQkJveEludGVyc2VjdChiYm94MSwgYmJveDIpKSB7Cisg ICAgICAgICAgICByZXR1cm4ganVzdENvdW50ID8gMCA6IFtdOworICAgICAg ICB9CisgICAgICAgIHZhciBsMSA9IGJlemxlbi5hcHBseSgwLCBiZXoxKSwK KyAgICAgICAgICAgIGwyID0gYmV6bGVuLmFwcGx5KDAsIGJlejIpLAorICAg ICAgICAgICAgbjEgPSB+fihsMSAvIDgpLAorICAgICAgICAgICAgbjIgPSB+ fihsMiAvIDgpLAorICAgICAgICAgICAgZG90czEgPSBbXSwKKyAgICAgICAg ICAgIGRvdHMyID0gW10sCisgICAgICAgICAgICB4eSA9IHt9LAorICAgICAg ICAgICAgcmVzID0ganVzdENvdW50ID8gMCA6IFtdOworICAgICAgICBmb3Ig KHZhciBpID0gMDsgaSA8IG4xICsgMTsgaSsrKSB7CisgICAgICAgICAgICB2 YXIgcCA9IGZpbmREb3RzQXRTZWdtZW50LmFwcGx5KDAsIGJlejEuY29uY2F0 KGkgLyBuMSkpOworICAgICAgICAgICAgZG90czEucHVzaCh7eDogcC54LCB5 OiBwLnksIHQ6IGkgLyBuMX0pOworICAgICAgICB9CisgICAgICAgIGZvciAo aSA9IDA7IGkgPCBuMiArIDE7IGkrKykgeworICAgICAgICAgICAgcCA9IGZp bmREb3RzQXRTZWdtZW50LmFwcGx5KDAsIGJlejIuY29uY2F0KGkgLyBuMikp OworICAgICAgICAgICAgZG90czIucHVzaCh7eDogcC54LCB5OiBwLnksIHQ6 IGkgLyBuMn0pOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkg PCBuMTsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8 IG4yOyBqKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZGkgPSBkb3RzMVtp XSwKKyAgICAgICAgICAgICAgICAgICAgZGkxID0gZG90czFbaSArIDFdLAor ICAgICAgICAgICAgICAgICAgICBkaiA9IGRvdHMyW2pdLAorICAgICAgICAg ICAgICAgICAgICBkajEgPSBkb3RzMltqICsgMV0sCisgICAgICAgICAgICAg ICAgICAgIGNpID0gYWJzKGRpMS54IC0gZGkueCkgPCAuMDAxID8gInkiIDog IngiLAorICAgICAgICAgICAgICAgICAgICBjaiA9IGFicyhkajEueCAtIGRq LngpIDwgLjAwMSA/ICJ5IiA6ICJ4IiwKKyAgICAgICAgICAgICAgICAgICAg aXMgPSBpbnRlcnNlY3QoZGkueCwgZGkueSwgZGkxLngsIGRpMS55LCBkai54 LCBkai55LCBkajEueCwgZGoxLnkpOworICAgICAgICAgICAgICAgIGlmIChp cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoeHlbaXMueC50b0ZpeGVk KDQpXSA9PSBpcy55LnRvRml4ZWQoNCkpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIHh5W2lzLngudG9GaXhlZCg0KV0gPSBpcy55LnRv Rml4ZWQoNCk7CisgICAgICAgICAgICAgICAgICAgIHZhciB0MSA9IGRpLnQg KyBhYnMoKGlzW2NpXSAtIGRpW2NpXSkgLyAoZGkxW2NpXSAtIGRpW2NpXSkp ICogKGRpMS50IC0gZGkudCksCisgICAgICAgICAgICAgICAgICAgICAgICB0 MiA9IGRqLnQgKyBhYnMoKGlzW2NqXSAtIGRqW2NqXSkgLyAoZGoxW2NqXSAt IGRqW2NqXSkpICogKGRqMS50IC0gZGoudCk7CisgICAgICAgICAgICAgICAg ICAgIGlmICh0MSA+PSAwICYmIHQxIDw9IDEgJiYgdDIgPj0gMCAmJiB0MiA8 PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanVzdENvdW50 KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKys7CisgICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeDogaXMueCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeTogaXMueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdDE6IHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0MjogdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmdW5jdGlvbiBw YXRoSW50ZXJzZWN0aW9uKHBhdGgxLCBwYXRoMikgeworICAgICAgICByZXR1 cm4gaW50ZXJQYXRoSGVscGVyKHBhdGgxLCBwYXRoMik7CisgICAgfQorICAg IGZ1bmN0aW9uIHBhdGhJbnRlcnNlY3Rpb25OdW1iZXIocGF0aDEsIHBhdGgy KSB7CisgICAgICAgIHJldHVybiBpbnRlclBhdGhIZWxwZXIocGF0aDEsIHBh dGgyLCAxKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaW50ZXJQYXRoSGVscGVy KHBhdGgxLCBwYXRoMiwganVzdENvdW50KSB7CisgICAgICAgIHBhdGgxID0g cGF0aDJjdXJ2ZShwYXRoMSk7CisgICAgICAgIHBhdGgyID0gcGF0aDJjdXJ2 ZShwYXRoMik7CisgICAgICAgIHZhciB4MSwgeTEsIHgyLCB5MiwgeDFtLCB5 MW0sIHgybSwgeTJtLCBiZXoxLCBiZXoyLAorICAgICAgICAgICAgcmVzID0g anVzdENvdW50ID8gMCA6IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMCwg aWkgPSBwYXRoMS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICB2YXIgcGkgPSBwYXRoMVtpXTsKKyAgICAgICAgICAgIGlmIChwaVswXSA9 PSAiTSIpIHsKKyAgICAgICAgICAgICAgICB4MSA9IHgxbSA9IHBpWzFdOwor ICAgICAgICAgICAgICAgIHkxID0geTFtID0gcGlbMl07CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwaVswXSA9PSAiQyIp IHsKKyAgICAgICAgICAgICAgICAgICAgYmV6MSA9IFt4MSwgeTFdLmNvbmNh dChwaS5zbGljZSgxKSk7CisgICAgICAgICAgICAgICAgICAgIHgxID0gYmV6 MVs2XTsKKyAgICAgICAgICAgICAgICAgICAgeTEgPSBiZXoxWzddOworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJl ejEgPSBbeDEsIHkxLCB4MSwgeTEsIHgxbSwgeTFtLCB4MW0sIHkxbV07Cisg ICAgICAgICAgICAgICAgICAgIHgxID0geDFtOworICAgICAgICAgICAgICAg ICAgICB5MSA9IHkxbTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcGF0aDIubGVuZ3RoOyBqIDwg amo7IGorKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgcGogPSBwYXRo MltqXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBqWzBdID09ICJNIikg eworICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSB4Mm0gPSBwalsxXTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHkyID0geTJtID0gcGpbMl07Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAocGpbMF0gPT0gIkMiKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmV6MiA9IFt4MiwgeTJdLmNvbmNhdChwai5zbGljZSgx KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSBiZXoyWzZd OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyID0gYmV6Mls3XTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYmV6MiA9IFt4MiwgeTIsIHgyLCB5MiwgeDJt LCB5Mm0sIHgybSwgeTJtXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4MiA9IHgybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MiA9 IHkybTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgIHZhciBpbnRyID0gaW50ZXJIZWxwZXIoYmV6MSwgYmV6 MiwganVzdENvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChq dXN0Q291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMg Kz0gaW50cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDAsIGtr ID0gaW50ci5sZW5ndGg7IGsgPCBrazsgaysrKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludHJba10uc2VnbWVudDEgPSBpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyW2tdLnNlZ21lbnQy ID0gajsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cltr XS5iZXoxID0gYmV6MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50cltrXS5iZXoyID0gYmV6MjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0g cmVzLmNvbmNhdChpbnRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOwor ICAgIH0KKyAgICBmdW5jdGlvbiBpc1BvaW50SW5zaWRlUGF0aChwYXRoLCB4 LCB5KSB7CisgICAgICAgIHZhciBiYm94ID0gcGF0aEJCb3gocGF0aCk7Cisg ICAgICAgIHJldHVybiBpc1BvaW50SW5zaWRlQkJveChiYm94LCB4LCB5KSAm JgorICAgICAgICAgICAgICAgaW50ZXJQYXRoSGVscGVyKHBhdGgsIFtbIk0i LCB4LCB5XSwgWyJIIiwgYmJveC54MiArIDEwXV0sIDEpICUgMiA9PSAxOwor ICAgIH0KKyAgICBmdW5jdGlvbiBwYXRoQkJveChwYXRoKSB7CisgICAgICAg IHZhciBwdGggPSBwYXRocyhwYXRoKTsKKyAgICAgICAgaWYgKHB0aC5iYm94 KSB7CisgICAgICAgICAgICByZXR1cm4gY2xvbmUocHRoLmJib3gpOworICAg ICAgICB9CisgICAgICAgIGlmICghcGF0aCkgeworICAgICAgICAgICAgcmV0 dXJuIGJveCgpOworICAgICAgICB9CisgICAgICAgIHBhdGggPSBwYXRoMmN1 cnZlKHBhdGgpOworICAgICAgICB2YXIgeCA9IDAsCisgICAgICAgICAgICB5 ID0gMCwKKyAgICAgICAgICAgIFggPSBbXSwKKyAgICAgICAgICAgIFkgPSBb XSwKKyAgICAgICAgICAgIHA7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBp aSA9IHBhdGgubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg cCA9IHBhdGhbaV07CisgICAgICAgICAgICBpZiAocFswXSA9PSAiTSIpIHsK KyAgICAgICAgICAgICAgICB4ID0gcFsxXTsKKyAgICAgICAgICAgICAgICB5 ID0gcFsyXTsKKyAgICAgICAgICAgICAgICBYLnB1c2goeCk7CisgICAgICAg ICAgICAgICAgWS5wdXNoKHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICB2YXIgZGltID0gY3VydmVEaW0oeCwgeSwgcFsxXSwg cFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSk7CisgICAgICAgICAgICAg ICAgWCA9IFguY29uY2F0KGRpbS5taW4ueCwgZGltLm1heC54KTsKKyAgICAg ICAgICAgICAgICBZID0gWS5jb25jYXQoZGltLm1pbi55LCBkaW0ubWF4Lnkp OworICAgICAgICAgICAgICAgIHggPSBwWzVdOworICAgICAgICAgICAgICAg IHkgPSBwWzZdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IHZhciB4bWluID0gbW1pbi5hcHBseSgwLCBYKSwKKyAgICAgICAgICAgIHlt aW4gPSBtbWluLmFwcGx5KDAsIFkpLAorICAgICAgICAgICAgeG1heCA9IG1t YXguYXBwbHkoMCwgWCksCisgICAgICAgICAgICB5bWF4ID0gbW1heC5hcHBs eSgwLCBZKSwKKyAgICAgICAgICAgIGJiID0gYm94KHhtaW4sIHltaW4sIHht YXggLSB4bWluLCB5bWF4IC0geW1pbik7CisgICAgICAgIHB0aC5iYm94ID0g Y2xvbmUoYmIpOworICAgICAgICByZXR1cm4gYmI7CisgICAgfQorICAgIGZ1 bmN0aW9uIHJlY3RQYXRoKHgsIHksIHcsIGgsIHIpIHsKKyAgICAgICAgaWYg KHIpIHsKKyAgICAgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAgICAg WyJNIiwgK3ggKyAoK3IpLCB5XSwKKyAgICAgICAgICAgICAgICBbImwiLCB3 IC0gciAqIDIsIDBdLAorICAgICAgICAgICAgICAgIFsiYSIsIHIsIHIsIDAs IDAsIDEsIHIsIHJdLAorICAgICAgICAgICAgICAgIFsibCIsIDAsIGggLSBy ICogMl0sCisgICAgICAgICAgICAgICAgWyJhIiwgciwgciwgMCwgMCwgMSwg LXIsIHJdLAorICAgICAgICAgICAgICAgIFsibCIsIHIgKiAyIC0gdywgMF0s CisgICAgICAgICAgICAgICAgWyJhIiwgciwgciwgMCwgMCwgMSwgLXIsIC1y XSwKKyAgICAgICAgICAgICAgICBbImwiLCAwLCByICogMiAtIGhdLAorICAg ICAgICAgICAgICAgIFsiYSIsIHIsIHIsIDAsIDAsIDEsIHIsIC1yXSwKKyAg ICAgICAgICAgICAgICBbInoiXQorICAgICAgICAgICAgXTsKKyAgICAgICAg fQorICAgICAgICB2YXIgcmVzID0gW1siTSIsIHgsIHldLCBbImwiLCB3LCAw XSwgWyJsIiwgMCwgaF0sIFsibCIsIC13LCAwXSwgWyJ6Il1dOworICAgICAg ICByZXMudG9TdHJpbmcgPSB0b1N0cmluZzsKKyAgICAgICAgcmV0dXJuIHJl czsKKyAgICB9CisgICAgZnVuY3Rpb24gZWxsaXBzZVBhdGgoeCwgeSwgcngs IHJ5LCBhKSB7CisgICAgICAgIGlmIChhID09IG51bGwgJiYgcnkgPT0gbnVs bCkgeworICAgICAgICAgICAgcnkgPSByeDsKKyAgICAgICAgfQorICAgICAg ICB4ID0gK3g7CisgICAgICAgIHkgPSAreTsKKyAgICAgICAgcnggPSArcng7 CisgICAgICAgIHJ5ID0gK3J5OworICAgICAgICBpZiAoYSAhPSBudWxsKSB7 CisgICAgICAgICAgICB2YXIgcmFkID0gTWF0aC5QSSAvIDE4MCwKKyAgICAg ICAgICAgICAgICB4MSA9IHggKyByeCAqIE1hdGguY29zKC1yeSAqIHJhZCks CisgICAgICAgICAgICAgICAgeDIgPSB4ICsgcnggKiBNYXRoLmNvcygtYSAq IHJhZCksCisgICAgICAgICAgICAgICAgeTEgPSB5ICsgcnggKiBNYXRoLnNp bigtcnkgKiByYWQpLAorICAgICAgICAgICAgICAgIHkyID0geSArIHJ4ICog TWF0aC5zaW4oLWEgKiByYWQpLAorICAgICAgICAgICAgICAgIHJlcyA9IFtb Ik0iLCB4MSwgeTFdLCBbIkEiLCByeCwgcngsIDAsICsoYSAtIHJ5ID4gMTgw KSwgMCwgeDIsIHkyXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICByZXMgPSBbCisgICAgICAgICAgICAgICAgWyJNIiwgeCwgeV0sCisgICAg ICAgICAgICAgICAgWyJtIiwgMCwgLXJ5XSwKKyAgICAgICAgICAgICAgICBb ImEiLCByeCwgcnksIDAsIDEsIDEsIDAsIDIgKiByeV0sCisgICAgICAgICAg ICAgICAgWyJhIiwgcngsIHJ5LCAwLCAxLCAxLCAwLCAtMiAqIHJ5XSwKKyAg ICAgICAgICAgICAgICBbInoiXQorICAgICAgICAgICAgXTsKKyAgICAgICAg fQorICAgICAgICByZXMudG9TdHJpbmcgPSB0b1N0cmluZzsKKyAgICAgICAg cmV0dXJuIHJlczsKKyAgICB9CisgICAgdmFyIHVuaXQycHggPSBTbmFwLl91 bml0MnB4LAorICAgICAgICBnZXRQYXRoID0geworICAgICAgICBwYXRoOiBm dW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHJldHVybiBlbC5hdHRyKCJw YXRoIik7CisgICAgICAgIH0sCisgICAgICAgIGNpcmNsZTogZnVuY3Rpb24g KGVsKSB7CisgICAgICAgICAgICB2YXIgYXR0ciA9IHVuaXQycHgoZWwpOwor ICAgICAgICAgICAgcmV0dXJuIGVsbGlwc2VQYXRoKGF0dHIuY3gsIGF0dHIu Y3ksIGF0dHIucik7CisgICAgICAgIH0sCisgICAgICAgIGVsbGlwc2U6IGZ1 bmN0aW9uIChlbCkgeworICAgICAgICAgICAgdmFyIGF0dHIgPSB1bml0MnB4 KGVsKTsKKyAgICAgICAgICAgIHJldHVybiBlbGxpcHNlUGF0aChhdHRyLmN4 IHx8IDAsIGF0dHIuY3kgfHwgMCwgYXR0ci5yeCwgYXR0ci5yeSk7CisgICAg ICAgIH0sCisgICAgICAgIHJlY3Q6IGZ1bmN0aW9uIChlbCkgeworICAgICAg ICAgICAgdmFyIGF0dHIgPSB1bml0MnB4KGVsKTsKKyAgICAgICAgICAgIHJl dHVybiByZWN0UGF0aChhdHRyLnggfHwgMCwgYXR0ci55IHx8IDAsIGF0dHIu d2lkdGgsIGF0dHIuaGVpZ2h0LCBhdHRyLnJ4LCBhdHRyLnJ5KTsKKyAgICAg ICAgfSwKKyAgICAgICAgaW1hZ2U6IGZ1bmN0aW9uIChlbCkgeworICAgICAg ICAgICAgdmFyIGF0dHIgPSB1bml0MnB4KGVsKTsKKyAgICAgICAgICAgIHJl dHVybiByZWN0UGF0aChhdHRyLnggfHwgMCwgYXR0ci55IHx8IDAsIGF0dHIu d2lkdGgsIGF0dHIuaGVpZ2h0KTsKKyAgICAgICAgfSwKKyAgICAgICAgbGlu ZTogZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICByZXR1cm4gIk0iICsg W2VsLmF0dHIoIngxIikgfHwgMCwgZWwuYXR0cigieTEiKSB8fCAwLCBlbC5h dHRyKCJ4MiIpLCBlbC5hdHRyKCJ5MiIpXTsKKyAgICAgICAgfSwKKyAgICAg ICAgcG9seWxpbmU6IGZ1bmN0aW9uIChlbCkgeworICAgICAgICAgICAgcmV0 dXJuICJNIiArIGVsLmF0dHIoInBvaW50cyIpOworICAgICAgICB9LAorICAg ICAgICBwb2x5Z29uOiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHJl dHVybiAiTSIgKyBlbC5hdHRyKCJwb2ludHMiKSArICJ6IjsKKyAgICAgICAg fSwKKyAgICAgICAgZGVmbHQ6IGZ1bmN0aW9uIChlbCkgeworICAgICAgICAg ICAgdmFyIGJib3ggPSBlbC5ub2RlLmdldEJCb3goKTsKKyAgICAgICAgICAg IHJldHVybiByZWN0UGF0aChiYm94LngsIGJib3gueSwgYmJveC53aWR0aCwg YmJveC5oZWlnaHQpOworICAgICAgICB9CisgICAgfTsKKyAgICBmdW5jdGlv biBwYXRoVG9SZWxhdGl2ZShwYXRoQXJyYXkpIHsKKyAgICAgICAgdmFyIHB0 aCA9IHBhdGhzKHBhdGhBcnJheSksCisgICAgICAgICAgICBsb3dlckNhc2Ug PSBTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlOworICAgICAgICBpZiAo cHRoLnJlbCkgeworICAgICAgICAgICAgcmV0dXJuIHBhdGhDbG9uZShwdGgu cmVsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVNuYXAuaXMocGF0aEFy cmF5LCAiYXJyYXkiKSB8fCAhU25hcC5pcyhwYXRoQXJyYXkgJiYgcGF0aEFy cmF5WzBdLCAiYXJyYXkiKSkgeworICAgICAgICAgICAgcGF0aEFycmF5ID0g U25hcC5wYXJzZVBhdGhTdHJpbmcocGF0aEFycmF5KTsKKyAgICAgICAgfQor ICAgICAgICB2YXIgcmVzID0gW10sCisgICAgICAgICAgICB4ID0gMCwKKyAg ICAgICAgICAgIHkgPSAwLAorICAgICAgICAgICAgbXggPSAwLAorICAgICAg ICAgICAgbXkgPSAwLAorICAgICAgICAgICAgc3RhcnQgPSAwOworICAgICAg ICBpZiAocGF0aEFycmF5WzBdWzBdID09ICJNIikgeworICAgICAgICAgICAg eCA9IHBhdGhBcnJheVswXVsxXTsKKyAgICAgICAgICAgIHkgPSBwYXRoQXJy YXlbMF1bMl07CisgICAgICAgICAgICBteCA9IHg7CisgICAgICAgICAgICBt eSA9IHk7CisgICAgICAgICAgICBzdGFydCsrOworICAgICAgICAgICAgcmVz LnB1c2goWyJNIiwgeCwgeV0pOworICAgICAgICB9CisgICAgICAgIGZvciAo dmFyIGkgPSBzdGFydCwgaWkgPSBwYXRoQXJyYXkubGVuZ3RoOyBpIDwgaWk7 IGkrKykgeworICAgICAgICAgICAgdmFyIHIgPSByZXNbaV0gPSBbXSwKKyAg ICAgICAgICAgICAgICBwYSA9IHBhdGhBcnJheVtpXTsKKyAgICAgICAgICAg IGlmIChwYVswXSAhPSBsb3dlckNhc2UuY2FsbChwYVswXSkpIHsKKyAgICAg ICAgICAgICAgICByWzBdID0gbG93ZXJDYXNlLmNhbGwocGFbMF0pOworICAg ICAgICAgICAgICAgIHN3aXRjaCAoclswXSkgeworICAgICAgICAgICAgICAg ICAgICBjYXNlICJhIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbMV0g PSBwYVsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbMl0gPSBwYVsy XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbM10gPSBwYVszXTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJbNF0gPSBwYVs0XTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHJbNV0gPSBwYVs1XTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJbNl0gPSArKHBhWzZdIC0geCkudG9GaXhlZCgzKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJbN10gPSArKHBhWzddIC0geSkudG9G aXhlZCgzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICBjYXNlICJ2IjoKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJbMV0gPSArKHBhWzFdIC0geSkudG9GaXhlZCgzKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICBjYXNlICJtIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG14ID0gcGFb MV07CisgICAgICAgICAgICAgICAgICAgICAgICBteSA9IHBhWzJdOworICAg ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg ICAgICAgZm9yICh2YXIgaiA9IDEsIGpqID0gcGEubGVuZ3RoOyBqIDwgamo7 IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbal0gPSAr KHBhW2pdIC0gKChqICUgMikgPyB4IDogeSkpLnRvRml4ZWQoMyk7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByID0gcmVzW2ld ID0gW107CisgICAgICAgICAgICAgICAgaWYgKHBhWzBdID09ICJtIikgewor ICAgICAgICAgICAgICAgICAgICBteCA9IHBhWzFdICsgeDsKKyAgICAgICAg ICAgICAgICAgICAgbXkgPSBwYVsyXSArIHk7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IHBhLmxl bmd0aDsgayA8IGtrOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcmVz W2ldW2tdID0gcGFba107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgdmFyIGxlbiA9IHJlc1tpXS5sZW5ndGg7Cisg ICAgICAgICAgICBzd2l0Y2ggKHJlc1tpXVswXSkgeworICAgICAgICAgICAg ICAgIGNhc2UgInoiOgorICAgICAgICAgICAgICAgICAgICB4ID0gbXg7Cisg ICAgICAgICAgICAgICAgICAgIHkgPSBteTsKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiaCI6CisgICAgICAg ICAgICAgICAgICAgIHggKz0gK3Jlc1tpXVtsZW4gLSAxXTsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAidiI6 CisgICAgICAgICAgICAgICAgICAgIHkgKz0gK3Jlc1tpXVtsZW4gLSAxXTsK KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgeCArPSArcmVzW2ldW2xl biAtIDJdOworICAgICAgICAgICAgICAgICAgICB5ICs9ICtyZXNbaV1bbGVu IC0gMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVz LnRvU3RyaW5nID0gdG9TdHJpbmc7CisgICAgICAgIHB0aC5yZWwgPSBwYXRo Q2xvbmUocmVzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAg ZnVuY3Rpb24gcGF0aFRvQWJzb2x1dGUocGF0aEFycmF5KSB7CisgICAgICAg IHZhciBwdGggPSBwYXRocyhwYXRoQXJyYXkpOworICAgICAgICBpZiAocHRo LmFicykgeworICAgICAgICAgICAgcmV0dXJuIHBhdGhDbG9uZShwdGguYWJz KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzKHBhdGhBcnJheSwgImFy cmF5IikgfHwgIWlzKHBhdGhBcnJheSAmJiBwYXRoQXJyYXlbMF0sICJhcnJh eSIpKSB7IC8vIHJvdWdoIGFzc3VtcHRpb24KKyAgICAgICAgICAgIHBhdGhB cnJheSA9IFNuYXAucGFyc2VQYXRoU3RyaW5nKHBhdGhBcnJheSk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCFwYXRoQXJyYXkgfHwgIXBhdGhBcnJheS5s ZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiBbWyJNIiwgMCwgMF1dOwor ICAgICAgICB9CisgICAgICAgIHZhciByZXMgPSBbXSwKKyAgICAgICAgICAg IHggPSAwLAorICAgICAgICAgICAgeSA9IDAsCisgICAgICAgICAgICBteCA9 IDAsCisgICAgICAgICAgICBteSA9IDAsCisgICAgICAgICAgICBzdGFydCA9 IDAsCisgICAgICAgICAgICBwYTA7CisgICAgICAgIGlmIChwYXRoQXJyYXlb MF1bMF0gPT0gIk0iKSB7CisgICAgICAgICAgICB4ID0gK3BhdGhBcnJheVsw XVsxXTsKKyAgICAgICAgICAgIHkgPSArcGF0aEFycmF5WzBdWzJdOworICAg ICAgICAgICAgbXggPSB4OworICAgICAgICAgICAgbXkgPSB5OworICAgICAg ICAgICAgc3RhcnQrKzsKKyAgICAgICAgICAgIHJlc1swXSA9IFsiTSIsIHgs IHldOworICAgICAgICB9CisgICAgICAgIHZhciBjcnogPSBwYXRoQXJyYXku bGVuZ3RoID09IDMgJiYKKyAgICAgICAgICAgIHBhdGhBcnJheVswXVswXSA9 PSAiTSIgJiYKKyAgICAgICAgICAgIHBhdGhBcnJheVsxXVswXS50b1VwcGVy Q2FzZSgpID09ICJSIiAmJgorICAgICAgICAgICAgcGF0aEFycmF5WzJdWzBd LnRvVXBwZXJDYXNlKCkgPT0gIloiOworICAgICAgICBmb3IgKHZhciByLCBw YSwgaSA9IHN0YXJ0LCBpaSA9IHBhdGhBcnJheS5sZW5ndGg7IGkgPCBpaTsg aSsrKSB7CisgICAgICAgICAgICByZXMucHVzaChyID0gW10pOworICAgICAg ICAgICAgcGEgPSBwYXRoQXJyYXlbaV07CisgICAgICAgICAgICBwYTAgPSBw YVswXTsKKyAgICAgICAgICAgIGlmIChwYTAgIT0gcGEwLnRvVXBwZXJDYXNl KCkpIHsKKyAgICAgICAgICAgICAgICByWzBdID0gcGEwLnRvVXBwZXJDYXNl KCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyWzBdKSB7CisgICAgICAg ICAgICAgICAgICAgIGNhc2UgIkEiOgorICAgICAgICAgICAgICAgICAgICAg ICAgclsxXSA9IHBhWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgclsy XSA9IHBhWzJdOworICAgICAgICAgICAgICAgICAgICAgICAgclszXSA9IHBh WzNdOworICAgICAgICAgICAgICAgICAgICAgICAgcls0XSA9IHBhWzRdOwor ICAgICAgICAgICAgICAgICAgICAgICAgcls1XSA9IHBhWzVdOworICAgICAg ICAgICAgICAgICAgICAgICAgcls2XSA9ICtwYVs2XSArIHg7CisgICAgICAg ICAgICAgICAgICAgICAgICByWzddID0gK3BhWzddICsgeTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj YXNlICJWIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbMV0gPSArcGFb MV0gKyB5OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIGNhc2UgIkgiOgorICAgICAgICAgICAgICAgICAg ICAgICAgclsxXSA9ICtwYVsxXSArIHg7CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiUiI6Cisg ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG90cyA9IFt4LCB5XS5jb25j YXQocGEuc2xpY2UoMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y ICh2YXIgaiA9IDIsIGpqID0gZG90cy5sZW5ndGg7IGogPCBqajsgaisrKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1tqXSA9ICtkb3Rz W2pdICsgeDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3RzWysr al0gPSArZG90c1tqXSArIHk7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICByZXMucG9wKCk7CisgICAgICAg ICAgICAgICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KGNhdG11bGxSb20y YmV6aWVyKGRvdHMsIGNyeikpOworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIk8iOgorICAgICAg ICAgICAgICAgICAgICAgICAgcmVzLnBvcCgpOworICAgICAgICAgICAgICAg ICAgICAgICAgZG90cyA9IGVsbGlwc2VQYXRoKHgsIHksIHBhWzFdLCBwYVsy XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3RzLnB1c2goZG90c1sw XSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMuY29uY2F0 KGRvdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIGNhc2UgIlUiOgorICAgICAgICAgICAgICAgICAg ICAgICAgcmVzLnBvcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVz ID0gcmVzLmNvbmNhdChlbGxpcHNlUGF0aCh4LCB5LCBwYVsxXSwgcGFbMl0s IHBhWzNdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByID0gWyJVIl0u Y29uY2F0KHJlc1tyZXMubGVuZ3RoIC0gMV0uc2xpY2UoLTIpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICBjYXNlICJNIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG14ID0gK3Bh WzFdICsgeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ID0gK3BhWzJd ICsgeTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAoaiA9IDEsIGpqID0gcGEubGVuZ3RoOyBq IDwgamo7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJb al0gPSArcGFbal0gKyAoKGogJSAyKSA/IHggOiB5KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9IGVsc2UgaWYgKHBhMCA9PSAiUiIpIHsKKyAgICAgICAgICAgICAgICBk b3RzID0gW3gsIHldLmNvbmNhdChwYS5zbGljZSgxKSk7CisgICAgICAgICAg ICAgICAgcmVzLnBvcCgpOworICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5j b25jYXQoY2F0bXVsbFJvbTJiZXppZXIoZG90cywgY3J6KSk7CisgICAgICAg ICAgICAgICAgciA9IFsiUiJdLmNvbmNhdChwYS5zbGljZSgtMikpOworICAg ICAgICAgICAgfSBlbHNlIGlmIChwYTAgPT0gIk8iKSB7CisgICAgICAgICAg ICAgICAgcmVzLnBvcCgpOworICAgICAgICAgICAgICAgIGRvdHMgPSBlbGxp cHNlUGF0aCh4LCB5LCBwYVsxXSwgcGFbMl0pOworICAgICAgICAgICAgICAg IGRvdHMucHVzaChkb3RzWzBdKTsKKyAgICAgICAgICAgICAgICByZXMgPSBy ZXMuY29uY2F0KGRvdHMpOworICAgICAgICAgICAgfSBlbHNlIGlmIChwYTAg PT0gIlUiKSB7CisgICAgICAgICAgICAgICAgcmVzLnBvcCgpOworICAgICAg ICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoZWxsaXBzZVBhdGgoeCwgeSwg cGFbMV0sIHBhWzJdLCBwYVszXSkpOworICAgICAgICAgICAgICAgIHIgPSBb IlUiXS5jb25jYXQocmVzW3Jlcy5sZW5ndGggLSAxXS5zbGljZSgtMikpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZh ciBrID0gMCwga2sgPSBwYS5sZW5ndGg7IGsgPCBrazsgaysrKSB7CisgICAg ICAgICAgICAgICAgICAgIHJba10gPSBwYVtrXTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYTAgPSBwYTAudG9V cHBlckNhc2UoKTsKKyAgICAgICAgICAgIGlmIChwYTAgIT0gIk8iKSB7Cisg ICAgICAgICAgICAgICAgc3dpdGNoIChyWzBdKSB7CisgICAgICAgICAgICAg ICAgICAgIGNhc2UgIloiOgorICAgICAgICAgICAgICAgICAgICAgICAgeCA9 ICtteDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgPSArbXk7CisgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgY2FzZSAiSCI6CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gclsx XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICBjYXNlICJWIjoKKyAgICAgICAgICAgICAgICAgICAgICAg IHkgPSByWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgIGNhc2UgIk0iOgorICAgICAgICAgICAgICAg ICAgICAgICAgbXggPSByW3IubGVuZ3RoIC0gMl07CisgICAgICAgICAgICAg ICAgICAgICAgICBteSA9IHJbci5sZW5ndGggLSAxXTsKKyAgICAgICAgICAg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHgg PSByW3IubGVuZ3RoIC0gMl07CisgICAgICAgICAgICAgICAgICAgICAgICB5 ID0gcltyLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXMudG9TdHJpbmcgPSB0 b1N0cmluZzsKKyAgICAgICAgcHRoLmFicyA9IHBhdGhDbG9uZShyZXMpOwor ICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmdW5jdGlvbiBsMmMo eDEsIHkxLCB4MiwgeTIpIHsKKyAgICAgICAgcmV0dXJuIFt4MSwgeTEsIHgy LCB5MiwgeDIsIHkyXTsKKyAgICB9CisgICAgZnVuY3Rpb24gcTJjKHgxLCB5 MSwgYXgsIGF5LCB4MiwgeTIpIHsKKyAgICAgICAgdmFyIF8xMyA9IDEgLyAz LAorICAgICAgICAgICAgXzIzID0gMiAvIDM7CisgICAgICAgIHJldHVybiBb CisgICAgICAgICAgICAgICAgXzEzICogeDEgKyBfMjMgKiBheCwKKyAgICAg ICAgICAgICAgICBfMTMgKiB5MSArIF8yMyAqIGF5LAorICAgICAgICAgICAg ICAgIF8xMyAqIHgyICsgXzIzICogYXgsCisgICAgICAgICAgICAgICAgXzEz ICogeTIgKyBfMjMgKiBheSwKKyAgICAgICAgICAgICAgICB4MiwKKyAgICAg ICAgICAgICAgICB5MgorICAgICAgICAgICAgXTsKKyAgICB9CisgICAgZnVu Y3Rpb24gYTJjKHgxLCB5MSwgcngsIHJ5LCBhbmdsZSwgbGFyZ2VfYXJjX2Zs YWcsIHN3ZWVwX2ZsYWcsIHgyLCB5MiwgcmVjdXJzaXZlKSB7CisgICAgICAg IC8vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9mIHdoZXJlIHRoaXMgbWF0aCBj YW1lIGZyb20gdmlzaXQ6CisgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn L1RSL1NWRzExL2ltcGxub3RlLmh0bWwjQXJjSW1wbGVtZW50YXRpb25Ob3Rl cworICAgICAgICB2YXIgXzEyMCA9IFBJICogMTIwIC8gMTgwLAorICAgICAg ICAgICAgcmFkID0gUEkgLyAxODAgKiAoK2FuZ2xlIHx8IDApLAorICAgICAg ICAgICAgcmVzID0gW10sCisgICAgICAgICAgICB4eSwKKyAgICAgICAgICAg IHJvdGF0ZSA9IFNuYXAuXy5jYWNoZXIoZnVuY3Rpb24gKHgsIHksIHJhZCkg eworICAgICAgICAgICAgICAgIHZhciBYID0geCAqIG1hdGguY29zKHJhZCkg LSB5ICogbWF0aC5zaW4ocmFkKSwKKyAgICAgICAgICAgICAgICAgICAgWSA9 IHggKiBtYXRoLnNpbihyYWQpICsgeSAqIG1hdGguY29zKHJhZCk7CisgICAg ICAgICAgICAgICAgcmV0dXJuIHt4OiBYLCB5OiBZfTsKKyAgICAgICAgICAg IH0pOworICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkgeworICAgICAgICAgICAg eHkgPSByb3RhdGUoeDEsIHkxLCAtcmFkKTsKKyAgICAgICAgICAgIHgxID0g eHkueDsKKyAgICAgICAgICAgIHkxID0geHkueTsKKyAgICAgICAgICAgIHh5 ID0gcm90YXRlKHgyLCB5MiwgLXJhZCk7CisgICAgICAgICAgICB4MiA9IHh5 Lng7CisgICAgICAgICAgICB5MiA9IHh5Lnk7CisgICAgICAgICAgICB2YXIg Y29zID0gbWF0aC5jb3MoUEkgLyAxODAgKiBhbmdsZSksCisgICAgICAgICAg ICAgICAgc2luID0gbWF0aC5zaW4oUEkgLyAxODAgKiBhbmdsZSksCisgICAg ICAgICAgICAgICAgeCA9ICh4MSAtIHgyKSAvIDIsCisgICAgICAgICAgICAg ICAgeSA9ICh5MSAtIHkyKSAvIDI7CisgICAgICAgICAgICB2YXIgaCA9ICh4 ICogeCkgLyAocnggKiByeCkgKyAoeSAqIHkpIC8gKHJ5ICogcnkpOworICAg ICAgICAgICAgaWYgKGggPiAxKSB7CisgICAgICAgICAgICAgICAgaCA9IG1h dGguc3FydChoKTsKKyAgICAgICAgICAgICAgICByeCA9IGggKiByeDsKKyAg ICAgICAgICAgICAgICByeSA9IGggKiByeTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHZhciByeDIgPSByeCAqIHJ4LAorICAgICAgICAgICAgICAg IHJ5MiA9IHJ5ICogcnksCisgICAgICAgICAgICAgICAgayA9IChsYXJnZV9h cmNfZmxhZyA9PSBzd2VlcF9mbGFnID8gLTEgOiAxKSAqCisgICAgICAgICAg ICAgICAgICAgIG1hdGguc3FydChhYnMoKHJ4MiAqIHJ5MiAtIHJ4MiAqIHkg KiB5IC0gcnkyICogeCAqIHgpIC8gKHJ4MiAqIHkgKiB5ICsgcnkyICogeCAq IHgpKSksCisgICAgICAgICAgICAgICAgY3ggPSBrICogcnggKiB5IC8gcnkg KyAoeDEgKyB4MikgLyAyLAorICAgICAgICAgICAgICAgIGN5ID0gayAqIC1y eSAqIHggLyByeCArICh5MSArIHkyKSAvIDIsCisgICAgICAgICAgICAgICAg ZjEgPSBtYXRoLmFzaW4oKCh5MSAtIGN5KSAvIHJ5KS50b0ZpeGVkKDkpKSwK KyAgICAgICAgICAgICAgICBmMiA9IG1hdGguYXNpbigoKHkyIC0gY3kpIC8g cnkpLnRvRml4ZWQoOSkpOworCisgICAgICAgICAgICBmMSA9IHgxIDwgY3gg PyBQSSAtIGYxIDogZjE7CisgICAgICAgICAgICBmMiA9IHgyIDwgY3ggPyBQ SSAtIGYyIDogZjI7CisgICAgICAgICAgICBmMSA8IDAgJiYgKGYxID0gUEkg KiAyICsgZjEpOworICAgICAgICAgICAgZjIgPCAwICYmIChmMiA9IFBJICog MiArIGYyKTsKKyAgICAgICAgICAgIGlmIChzd2VlcF9mbGFnICYmIGYxID4g ZjIpIHsKKyAgICAgICAgICAgICAgICBmMSA9IGYxIC0gUEkgKiAyOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzd2VlcF9mbGFnICYmIGYy ID4gZjEpIHsKKyAgICAgICAgICAgICAgICBmMiA9IGYyIC0gUEkgKiAyOwor ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ZjEgPSByZWN1cnNpdmVbMF07CisgICAgICAgICAgICBmMiA9IHJlY3Vyc2l2 ZVsxXTsKKyAgICAgICAgICAgIGN4ID0gcmVjdXJzaXZlWzJdOworICAgICAg ICAgICAgY3kgPSByZWN1cnNpdmVbM107CisgICAgICAgIH0KKyAgICAgICAg dmFyIGRmID0gZjIgLSBmMTsKKyAgICAgICAgaWYgKGFicyhkZikgPiBfMTIw KSB7CisgICAgICAgICAgICB2YXIgZjJvbGQgPSBmMiwKKyAgICAgICAgICAg ICAgICB4Mm9sZCA9IHgyLAorICAgICAgICAgICAgICAgIHkyb2xkID0geTI7 CisgICAgICAgICAgICBmMiA9IGYxICsgXzEyMCAqIChzd2VlcF9mbGFnICYm IGYyID4gZjEgPyAxIDogLTEpOworICAgICAgICAgICAgeDIgPSBjeCArIHJ4 ICogbWF0aC5jb3MoZjIpOworICAgICAgICAgICAgeTIgPSBjeSArIHJ5ICog bWF0aC5zaW4oZjIpOworICAgICAgICAgICAgcmVzID0gYTJjKHgyLCB5Miwg cngsIHJ5LCBhbmdsZSwgMCwgc3dlZXBfZmxhZywgeDJvbGQsIHkyb2xkLCBb ZjIsIGYyb2xkLCBjeCwgY3ldKTsKKyAgICAgICAgfQorICAgICAgICBkZiA9 IGYyIC0gZjE7CisgICAgICAgIHZhciBjMSA9IG1hdGguY29zKGYxKSwKKyAg ICAgICAgICAgIHMxID0gbWF0aC5zaW4oZjEpLAorICAgICAgICAgICAgYzIg PSBtYXRoLmNvcyhmMiksCisgICAgICAgICAgICBzMiA9IG1hdGguc2luKGYy KSwKKyAgICAgICAgICAgIHQgPSBtYXRoLnRhbihkZiAvIDQpLAorICAgICAg ICAgICAgaHggPSA0IC8gMyAqIHJ4ICogdCwKKyAgICAgICAgICAgIGh5ID0g NCAvIDMgKiByeSAqIHQsCisgICAgICAgICAgICBtMSA9IFt4MSwgeTFdLAor ICAgICAgICAgICAgbTIgPSBbeDEgKyBoeCAqIHMxLCB5MSAtIGh5ICogYzFd LAorICAgICAgICAgICAgbTMgPSBbeDIgKyBoeCAqIHMyLCB5MiAtIGh5ICog YzJdLAorICAgICAgICAgICAgbTQgPSBbeDIsIHkyXTsKKyAgICAgICAgbTJb MF0gPSAyICogbTFbMF0gLSBtMlswXTsKKyAgICAgICAgbTJbMV0gPSAyICog bTFbMV0gLSBtMlsxXTsKKyAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgeworICAg ICAgICAgICAgcmV0dXJuIFttMiwgbTMsIG00XS5jb25jYXQocmVzKTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IFttMiwgbTMsIG00 XS5jb25jYXQocmVzKS5qb2luKCkuc3BsaXQoIiwiKTsKKyAgICAgICAgICAg IHZhciBuZXdyZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw LCBpaSA9IHJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICAgICAgbmV3cmVzW2ldID0gaSAlIDIgPyByb3RhdGUocmVzW2kgLSAxXSwg cmVzW2ldLCByYWQpLnkgOiByb3RhdGUocmVzW2ldLCByZXNbaSArIDFdLCBy YWQpLng7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3 cmVzOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGZpbmREb3RB dFNlZ21lbnQocDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBw MnksIHQpIHsKKyAgICAgICAgdmFyIHQxID0gMSAtIHQ7CisgICAgICAgIHJl dHVybiB7CisgICAgICAgICAgICB4OiBwb3codDEsIDMpICogcDF4ICsgcG93 KHQxLCAyKSAqIDMgKiB0ICogYzF4ICsgdDEgKiAzICogdCAqIHQgKiBjMngg KyBwb3codCwgMykgKiBwMngsCisgICAgICAgICAgICB5OiBwb3codDEsIDMp ICogcDF5ICsgcG93KHQxLCAyKSAqIDMgKiB0ICogYzF5ICsgdDEgKiAzICog dCAqIHQgKiBjMnkgKyBwb3codCwgMykgKiBwMnkKKyAgICAgICAgfTsKKyAg ICB9CisKKyAgICAvLyBSZXR1cm5zIGJvdW5kaW5nIGJveCBvZiBjdWJpYyBi ZXppZXIgY3VydmUuCisgICAgLy8gU291cmNlOiBodHRwOi8vYmxvZy5oYWNr ZXJzLWNhZmUubmV0LzIwMDkvMDYvaG93LXRvLWNhbGN1bGF0ZS1iZXppZXIt Y3VydmVzLWJvdW5kaW5nLmh0bWwKKyAgICAvLyBPcmlnaW5hbCB2ZXJzaW9u OiBOSVNISU8gSGlyb2thenUKKyAgICAvLyBNb2RpZmljYXRpb25zOiBodHRw czovL2dpdGh1Yi5jb20vdGltbzIyMzQ1CisgICAgZnVuY3Rpb24gY3VydmVE aW0oeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7CisgICAgICAg IHZhciB0dmFsdWVzID0gW10sCisgICAgICAgICAgICBib3VuZHMgPSBbW10s IFtdXSwKKyAgICAgICAgICAgIGEsIGIsIGMsIHQsIHQxLCB0MiwgYjJhYywg c3FydGIyYWM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjsgKytp KSB7CisgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAg ICAgYiA9IDYgKiB4MCAtIDEyICogeDEgKyA2ICogeDI7CisgICAgICAgICAg ICAgICAgYSA9IC0zICogeDAgKyA5ICogeDEgLSA5ICogeDIgKyAzICogeDM7 CisgICAgICAgICAgICAgICAgYyA9IDMgKiB4MSAtIDMgKiB4MDsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYiA9IDYgKiB5MCAt IDEyICogeTEgKyA2ICogeTI7CisgICAgICAgICAgICAgICAgYSA9IC0zICog eTAgKyA5ICogeTEgLSA5ICogeTIgKyAzICogeTM7CisgICAgICAgICAgICAg ICAgYyA9IDMgKiB5MSAtIDMgKiB5MDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmIChhYnMoYSkgPCAxZS0xMikgeworICAgICAgICAgICAgICAg IGlmIChhYnMoYikgPCAxZS0xMikgeworICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg dCA9IC1jIC8gYjsKKyAgICAgICAgICAgICAgICBpZiAoMCA8IHQgJiYgdCA8 IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdHZhbHVlcy5wdXNoKHQpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGIyYWMgPSBiICogYiAtIDQg KiBjICogYTsKKyAgICAgICAgICAgIHNxcnRiMmFjID0gbWF0aC5zcXJ0KGIy YWMpOworICAgICAgICAgICAgaWYgKGIyYWMgPCAwKSB7CisgICAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0 MSA9ICgtYiArIHNxcnRiMmFjKSAvICgyICogYSk7CisgICAgICAgICAgICBp ZiAoMCA8IHQxICYmIHQxIDwgMSkgeworICAgICAgICAgICAgICAgIHR2YWx1 ZXMucHVzaCh0MSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0MiA9 ICgtYiAtIHNxcnRiMmFjKSAvICgyICogYSk7CisgICAgICAgICAgICBpZiAo MCA8IHQyICYmIHQyIDwgMSkgeworICAgICAgICAgICAgICAgIHR2YWx1ZXMu cHVzaCh0Mik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg ICB2YXIgeCwgeSwgaiA9IHR2YWx1ZXMubGVuZ3RoLAorICAgICAgICAgICAg amxlbiA9IGosCisgICAgICAgICAgICBtdDsKKyAgICAgICAgd2hpbGUgKGot LSkgeworICAgICAgICAgICAgdCA9IHR2YWx1ZXNbal07CisgICAgICAgICAg ICBtdCA9IDEgLSB0OworICAgICAgICAgICAgYm91bmRzWzBdW2pdID0gKG10 ICogbXQgKiBtdCAqIHgwKSArICgzICogbXQgKiBtdCAqIHQgKiB4MSkgKyAo MyAqIG10ICogdCAqIHQgKiB4MikgKyAodCAqIHQgKiB0ICogeDMpOworICAg ICAgICAgICAgYm91bmRzWzFdW2pdID0gKG10ICogbXQgKiBtdCAqIHkwKSAr ICgzICogbXQgKiBtdCAqIHQgKiB5MSkgKyAoMyAqIG10ICogdCAqIHQgKiB5 MikgKyAodCAqIHQgKiB0ICogeTMpOworICAgICAgICB9CisKKyAgICAgICAg Ym91bmRzWzBdW2psZW5dID0geDA7CisgICAgICAgIGJvdW5kc1sxXVtqbGVu XSA9IHkwOworICAgICAgICBib3VuZHNbMF1bamxlbiArIDFdID0geDM7Cisg ICAgICAgIGJvdW5kc1sxXVtqbGVuICsgMV0gPSB5MzsKKyAgICAgICAgYm91 bmRzWzBdLmxlbmd0aCA9IGJvdW5kc1sxXS5sZW5ndGggPSBqbGVuICsgMjsK KworCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgbWluOiB7eDogbW1p bi5hcHBseSgwLCBib3VuZHNbMF0pLCB5OiBtbWluLmFwcGx5KDAsIGJvdW5k c1sxXSl9LAorICAgICAgICAgIG1heDoge3g6IG1tYXguYXBwbHkoMCwgYm91 bmRzWzBdKSwgeTogbW1heC5hcHBseSgwLCBib3VuZHNbMV0pfQorICAgICAg ICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhdGgyY3VydmUocGF0aCwg cGF0aDIpIHsKKyAgICAgICAgdmFyIHB0aCA9ICFwYXRoMiAmJiBwYXRocyhw YXRoKTsKKyAgICAgICAgaWYgKCFwYXRoMiAmJiBwdGguY3VydmUpIHsKKyAg ICAgICAgICAgIHJldHVybiBwYXRoQ2xvbmUocHRoLmN1cnZlKTsKKyAgICAg ICAgfQorICAgICAgICB2YXIgcCA9IHBhdGhUb0Fic29sdXRlKHBhdGgpLAor ICAgICAgICAgICAgcDIgPSBwYXRoMiAmJiBwYXRoVG9BYnNvbHV0ZShwYXRo MiksCisgICAgICAgICAgICBhdHRycyA9IHt4OiAwLCB5OiAwLCBieDogMCwg Ynk6IDAsIFg6IDAsIFk6IDAsIHF4OiBudWxsLCBxeTogbnVsbH0sCisgICAg ICAgICAgICBhdHRyczIgPSB7eDogMCwgeTogMCwgYng6IDAsIGJ5OiAwLCBY OiAwLCBZOiAwLCBxeDogbnVsbCwgcXk6IG51bGx9LAorICAgICAgICAgICAg cHJvY2Vzc1BhdGggPSBmdW5jdGlvbiAocGF0aCwgZCwgcGNvbSkgeworICAg ICAgICAgICAgICAgIHZhciBueCwgbnk7CisgICAgICAgICAgICAgICAgaWYg KCFwYXRoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbIkMiLCBk LngsIGQueSwgZC54LCBkLnksIGQueCwgZC55XTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgIShwYXRoWzBdIGluIHtUOiAxLCBROiAx fSkgJiYgKGQucXggPSBkLnF5ID0gbnVsbCk7CisgICAgICAgICAgICAgICAg c3dpdGNoIChwYXRoWzBdKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug Ik0iOgorICAgICAgICAgICAgICAgICAgICAgICAgZC5YID0gcGF0aFsxXTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGQuWSA9IHBhdGhbMl07CisgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgY2FzZSAiQSI6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0g WyJDIl0uY29uY2F0KGEyYy5hcHBseSgwLCBbZC54LCBkLnldLmNvbmNhdChw YXRoLnNsaWNlKDEpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIlMiOgorICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHBjb20gPT0gIkMiIHx8IHBjb20gPT0gIlMi KSB7IC8vIEluICJTIiBjYXNlIHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291 bnQsIGlmIHRoZSBwcmV2aW91cyBjb21tYW5kIGlzIEMvUy4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBueCA9IGQueCAqIDIgLSBkLmJ4OyAgICAg ICAgICAvLyBBbmQgcmVmbGVjdCB0aGUgcHJldmlvdXMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBueSA9IGQueSAqIDIgLSBkLmJ5OyAgICAgICAg ICAvLyBjb21tYW5kJ3MgY29udHJvbCBwb2ludCByZWxhdGl2ZSB0byB0aGUg Y3VycmVudCBwb2ludC4KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBvciBzb21lIGVsc2Ugb3Igbm90aGluZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG54ID0gZC54OworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG55ID0gZC55OworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFsiQyIs IG54LCBueV0uY29uY2F0KHBhdGguc2xpY2UoMSkpOworICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug IlQiOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBjb20gPT0gIlEi IHx8IHBjb20gPT0gIlQiKSB7IC8vIEluICJUIiBjYXNlIHdlIGhhdmUgdG8g dGFrZSBpbnRvIGFjY291bnQsIGlmIHRoZSBwcmV2aW91cyBjb21tYW5kIGlz IFEvVC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnF4ID0gZC54 ICogMiAtIGQucXg7ICAgICAgICAvLyBBbmQgbWFrZSBhIHJlZmxlY3Rpb24g c2ltaWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucXkgPSBk LnkgKiAyIC0gZC5xeTsgICAgICAgIC8vIHRvIGNhc2UgIlMiLgorICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHNvbWV0 aGluZyBlbHNlIG9yIG5vdGhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkLnF4ID0gZC54OworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGQucXkgPSBkLnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICBwYXRoID0gWyJDIl0uY29uY2F0KHEyYyhk LngsIGQueSwgZC5xeCwgZC5xeSwgcGF0aFsxXSwgcGF0aFsyXSkpOworICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIGNhc2UgIlEiOgorICAgICAgICAgICAgICAgICAgICAgICAgZC5xeCA9 IHBhdGhbMV07CisgICAgICAgICAgICAgICAgICAgICAgICBkLnF5ID0gcGF0 aFsyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5j b25jYXQocTJjKGQueCwgZC55LCBwYXRoWzFdLCBwYXRoWzJdLCBwYXRoWzNd LCBwYXRoWzRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiTCI6CisgICAgICAgICAgICAg ICAgICAgICAgICBwYXRoID0gWyJDIl0uY29uY2F0KGwyYyhkLngsIGQueSwg cGF0aFsxXSwgcGF0aFsyXSkpOworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIkgiOgorICAgICAg ICAgICAgICAgICAgICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChsMmMoZC54 LCBkLnksIHBhdGhbMV0sIGQueSkpOworICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIlYiOgorICAg ICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChsMmMo ZC54LCBkLnksIGQueCwgcGF0aFsxXSkpOworICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIloiOgor ICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChs MmMoZC54LCBkLnksIGQuWCwgZC5ZKSk7CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgcmV0dXJuIHBhdGg7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg Zml4QXJjID0gZnVuY3Rpb24gKHBwLCBpKSB7CisgICAgICAgICAgICAgICAg aWYgKHBwW2ldLmxlbmd0aCA+IDcpIHsKKyAgICAgICAgICAgICAgICAgICAg cHBbaV0uc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBpID0g cHBbaV07CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwaS5sZW5ndGgp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBjb21zMVtpXSA9ICJBIjsg Ly8gaWYgY3JlYXRlZCBtdWx0aXBsZSBDOnMsIHRoZWlyIG9yaWdpbmFsIHNl ZyBpcyBzYXZlZAorICAgICAgICAgICAgICAgICAgICAgICAgcDIgJiYgKHBj b21zMltpXSA9ICJBIik7IC8vIHRoZSBzYW1lIGFzIGFib3ZlCisgICAgICAg ICAgICAgICAgICAgICAgICBwcC5zcGxpY2UoaSsrLCAwLCBbIkMiXS5jb25j YXQocGkuc3BsaWNlKDAsIDYpKSk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgcHAuc3BsaWNlKGksIDEpOworICAgICAg ICAgICAgICAgICAgICBpaSA9IG1tYXgocC5sZW5ndGgsIHAyICYmIHAyLmxl bmd0aCB8fCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 LAorICAgICAgICAgICAgZml4TSA9IGZ1bmN0aW9uIChwYXRoMSwgcGF0aDIs IGExLCBhMiwgaSkgeworICAgICAgICAgICAgICAgIGlmIChwYXRoMSAmJiBw YXRoMiAmJiBwYXRoMVtpXVswXSA9PSAiTSIgJiYgcGF0aDJbaV1bMF0gIT0g Ik0iKSB7CisgICAgICAgICAgICAgICAgICAgIHBhdGgyLnNwbGljZShpLCAw LCBbIk0iLCBhMi54LCBhMi55XSk7CisgICAgICAgICAgICAgICAgICAgIGEx LmJ4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYTEuYnkgPSAwOworICAg ICAgICAgICAgICAgICAgICBhMS54ID0gcGF0aDFbaV1bMV07CisgICAgICAg ICAgICAgICAgICAgIGExLnkgPSBwYXRoMVtpXVsyXTsKKyAgICAgICAgICAg ICAgICAgICAgaWkgPSBtbWF4KHAubGVuZ3RoLCBwMiAmJiBwMi5sZW5ndGgg fHwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIHBjb21zMSA9IFtdLCAvLyBwYXRoIGNvbW1hbmRzIG9mIG9y aWdpbmFsIHBhdGggcAorICAgICAgICAgICAgcGNvbXMyID0gW10sIC8vIHBh dGggY29tbWFuZHMgb2Ygb3JpZ2luYWwgcGF0aCBwMgorICAgICAgICAgICAg cGZpcnN0ID0gIiIsIC8vIHRlbXBvcmFyeSBob2xkZXIgZm9yIG9yaWdpbmFs IHBhdGggY29tbWFuZAorICAgICAgICAgICAgcGNvbSA9ICIiOyAvLyBob2xk ZXIgZm9yIHByZXZpb3VzIHBhdGggY29tbWFuZCBvZiBvcmlnaW5hbCBwYXRo CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG1tYXgocC5sZW5ndGgs IHAyICYmIHAyLmxlbmd0aCB8fCAwKTsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgICAgIHBbaV0gJiYgKHBmaXJzdCA9IHBbaV1bMF0pOyAvLyBzYXZlIGN1 cnJlbnQgcGF0aCBjb21tYW5kCisKKyAgICAgICAgICAgIGlmIChwZmlyc3Qg IT0gIkMiKSAvLyBDIGlzIG5vdCBzYXZlZCB5ZXQsIGJlY2F1c2UgaXQgbWF5 IGJlIHJlc3VsdCBvZiBjb252ZXJzaW9uCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgcGNvbXMxW2ldID0gcGZpcnN0OyAvLyBTYXZlIGN1cnJl bnQgcGF0aCBjb21tYW5kCisgICAgICAgICAgICAgICAgaSAmJiAoIHBjb20g PSBwY29tczFbaSAtIDFdKTsgLy8gR2V0IHByZXZpb3VzIHBhdGggY29tbWFu ZCBwY29tCisgICAgICAgICAgICB9CisgICAgICAgICAgICBwW2ldID0gcHJv Y2Vzc1BhdGgocFtpXSwgYXR0cnMsIHBjb20pOyAvLyBQcmV2aW91cyBwYXRo IGNvbW1hbmQgaXMgaW5wdXR0ZWQgdG8gcHJvY2Vzc1BhdGgKKworICAgICAg ICAgICAgaWYgKHBjb21zMVtpXSAhPSAiQSIgJiYgcGZpcnN0ID09ICJDIikg cGNvbXMxW2ldID0gIkMiOyAvLyBBIGlzIHRoZSBvbmx5IGNvbW1hbmQKKyAg ICAgICAgICAgIC8vIHdoaWNoIG1heSBwcm9kdWNlIG11bHRpcGxlIEM6cwor ICAgICAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBD IGlzIGFsc28gQyBpbiBvcmlnaW5hbCBwYXRoCisKKyAgICAgICAgICAgIGZp eEFyYyhwLCBpKTsgLy8gZml4QXJjIGFkZHMgYWxzbyB0aGUgcmlnaHQgYW1v dW50IG9mIEE6cyB0byBwY29tczEKKworICAgICAgICAgICAgaWYgKHAyKSB7 IC8vIHRoZSBzYW1lIHByb2NlZHVyZXMgaXMgZG9uZSB0byBwMgorICAgICAg ICAgICAgICAgIHAyW2ldICYmIChwZmlyc3QgPSBwMltpXVswXSk7CisgICAg ICAgICAgICAgICAgaWYgKHBmaXJzdCAhPSAiQyIpIHsKKyAgICAgICAgICAg ICAgICAgICAgcGNvbXMyW2ldID0gcGZpcnN0OworICAgICAgICAgICAgICAg ICAgICBpICYmIChwY29tID0gcGNvbXMyW2kgLSAxXSk7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIHAyW2ldID0gcHJvY2Vzc1BhdGgo cDJbaV0sIGF0dHJzMiwgcGNvbSk7CisKKyAgICAgICAgICAgICAgICBpZiAo cGNvbXMyW2ldICE9ICJBIiAmJiBwZmlyc3QgPT0gIkMiKSB7CisgICAgICAg ICAgICAgICAgICAgIHBjb21zMltpXSA9ICJDIjsKKyAgICAgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgICAgICBmaXhBcmMocDIsIGkpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgZml4TShwLCBwMiwgYXR0cnMsIGF0dHJz MiwgaSk7CisgICAgICAgICAgICBmaXhNKHAyLCBwLCBhdHRyczIsIGF0dHJz LCBpKTsKKyAgICAgICAgICAgIHZhciBzZWcgPSBwW2ldLAorICAgICAgICAg ICAgICAgIHNlZzIgPSBwMiAmJiBwMltpXSwKKyAgICAgICAgICAgICAgICBz ZWdsZW4gPSBzZWcubGVuZ3RoLAorICAgICAgICAgICAgICAgIHNlZzJsZW4g PSBwMiAmJiBzZWcyLmxlbmd0aDsKKyAgICAgICAgICAgIGF0dHJzLnggPSBz ZWdbc2VnbGVuIC0gMl07CisgICAgICAgICAgICBhdHRycy55ID0gc2VnW3Nl Z2xlbiAtIDFdOworICAgICAgICAgICAgYXR0cnMuYnggPSB0b0Zsb2F0KHNl Z1tzZWdsZW4gLSA0XSkgfHwgYXR0cnMueDsKKyAgICAgICAgICAgIGF0dHJz LmJ5ID0gdG9GbG9hdChzZWdbc2VnbGVuIC0gM10pIHx8IGF0dHJzLnk7Cisg ICAgICAgICAgICBhdHRyczIuYnggPSBwMiAmJiAodG9GbG9hdChzZWcyW3Nl ZzJsZW4gLSA0XSkgfHwgYXR0cnMyLngpOworICAgICAgICAgICAgYXR0cnMy LmJ5ID0gcDIgJiYgKHRvRmxvYXQoc2VnMltzZWcybGVuIC0gM10pIHx8IGF0 dHJzMi55KTsKKyAgICAgICAgICAgIGF0dHJzMi54ID0gcDIgJiYgc2VnMltz ZWcybGVuIC0gMl07CisgICAgICAgICAgICBhdHRyczIueSA9IHAyICYmIHNl ZzJbc2VnMmxlbiAtIDFdOworICAgICAgICB9CisgICAgICAgIGlmICghcDIp IHsKKyAgICAgICAgICAgIHB0aC5jdXJ2ZSA9IHBhdGhDbG9uZShwKTsKKyAg ICAgICAgfQorICAgICAgICByZXR1cm4gcDIgPyBbcCwgcDJdIDogcDsKKyAg ICB9CisgICAgZnVuY3Rpb24gbWFwUGF0aChwYXRoLCBtYXRyaXgpIHsKKyAg ICAgICAgaWYgKCFtYXRyaXgpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXRo OworICAgICAgICB9CisgICAgICAgIHZhciB4LCB5LCBpLCBqLCBpaSwgamos IHBhdGhpOworICAgICAgICBwYXRoID0gcGF0aDJjdXJ2ZShwYXRoKTsKKyAg ICAgICAgZm9yIChpID0gMCwgaWkgPSBwYXRoLmxlbmd0aDsgaSA8IGlpOyBp KyspIHsKKyAgICAgICAgICAgIHBhdGhpID0gcGF0aFtpXTsKKyAgICAgICAg ICAgIGZvciAoaiA9IDEsIGpqID0gcGF0aGkubGVuZ3RoOyBqIDwgamo7IGog Kz0gMikgeworICAgICAgICAgICAgICAgIHggPSBtYXRyaXgueChwYXRoaVtq XSwgcGF0aGlbaiArIDFdKTsKKyAgICAgICAgICAgICAgICB5ID0gbWF0cml4 LnkocGF0aGlbal0sIHBhdGhpW2ogKyAxXSk7CisgICAgICAgICAgICAgICAg cGF0aGlbal0gPSB4OworICAgICAgICAgICAgICAgIHBhdGhpW2ogKyAxXSA9 IHk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IHBhdGg7CisgICAgfQorCisgICAgLy8gaHR0cDovL3NjaGVwZXJzLmNjL2dl dHRpbmctdG8tdGhlLXBvaW50CisgICAgZnVuY3Rpb24gY2F0bXVsbFJvbTJi ZXppZXIoY3JwLCB6KSB7CisgICAgICAgIHZhciBkID0gW107CisgICAgICAg IGZvciAodmFyIGkgPSAwLCBpTGVuID0gY3JwLmxlbmd0aDsgaUxlbiAtIDIg KiAheiA+IGk7IGkgKz0gMikgeworICAgICAgICAgICAgdmFyIHAgPSBbCisg ICAgICAgICAgICAgICAgICAgICAgICB7eDogK2NycFtpIC0gMl0sIHk6ICtj cnBbaSAtIDFdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHt4OiArY3Jw W2ldLCAgICAgeTogK2NycFtpICsgMV19LAorICAgICAgICAgICAgICAgICAg ICAgICAge3g6ICtjcnBbaSArIDJdLCB5OiArY3JwW2kgKyAzXX0sCisgICAg ICAgICAgICAgICAgICAgICAgICB7eDogK2NycFtpICsgNF0sIHk6ICtjcnBb aSArIDVdfQorICAgICAgICAgICAgICAgICAgICBdOworICAgICAgICAgICAg aWYgKHopIHsKKyAgICAgICAgICAgICAgICBpZiAoIWkpIHsKKyAgICAgICAg ICAgICAgICAgICAgcFswXSA9IHt4OiArY3JwW2lMZW4gLSAyXSwgeTogK2Ny cFtpTGVuIC0gMV19OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaUxl biAtIDQgPT0gaSkgeworICAgICAgICAgICAgICAgICAgICBwWzNdID0ge3g6 ICtjcnBbMF0sIHk6ICtjcnBbMV19OworICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoaUxlbiAtIDIgPT0gaSkgeworICAgICAgICAgICAgICAgICAgICBw WzJdID0ge3g6ICtjcnBbMF0sIHk6ICtjcnBbMV19OworICAgICAgICAgICAg ICAgICAgICBwWzNdID0ge3g6ICtjcnBbMl0sIHk6ICtjcnBbM119OworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgaWYgKGlMZW4gLSA0ID09IGkpIHsKKyAgICAgICAgICAgICAg ICAgICAgcFszXSA9IHBbMl07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm ICghaSkgeworICAgICAgICAgICAgICAgICAgICBwWzBdID0ge3g6ICtjcnBb aV0sIHk6ICtjcnBbaSArIDFdfTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBkLnB1c2goWyJDIiwKKyAgICAgICAg ICAgICAgICAgICgtcFswXS54ICsgNiAqIHBbMV0ueCArIHBbMl0ueCkgLyA2 LAorICAgICAgICAgICAgICAgICAgKC1wWzBdLnkgKyA2ICogcFsxXS55ICsg cFsyXS55KSAvIDYsCisgICAgICAgICAgICAgICAgICAocFsxXS54ICsgNiAq IHBbMl0ueCAtIHBbM10ueCkgLyA2LAorICAgICAgICAgICAgICAgICAgKHBb MV0ueSArIDYqcFsyXS55IC0gcFszXS55KSAvIDYsCisgICAgICAgICAgICAg ICAgICBwWzJdLngsCisgICAgICAgICAgICAgICAgICBwWzJdLnkKKyAgICAg ICAgICAgIF0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGQ7Cisg ICAgfQorCisgICAgLy8gZXhwb3J0CisgICAgU25hcC5wYXRoID0gcGF0aHM7 CisKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguZ2V0VG90YWxMZW5ndGgK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgdGhl IGxlbmd0aCBvZiB0aGUgZ2l2ZW4gcGF0aCBpbiBwaXhlbHMKKyAgICAgKioK KyAgICAgLSBwYXRoIChzdHJpbmcpIFNWRyBwYXRoIHN0cmluZworICAgICAq KgorICAgICA9IChudW1iZXIpIGxlbmd0aAorICAgIFwqLworICAgIFNuYXAu cGF0aC5nZXRUb3RhbExlbmd0aCA9IGdldFRvdGFsTGVuZ3RoOworICAgIC8q XAorICAgICAqIFNuYXAucGF0aC5nZXRQb2ludEF0TGVuZ3RoCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjb29yZGlu YXRlcyBvZiB0aGUgcG9pbnQgbG9jYXRlZCBhdCB0aGUgZ2l2ZW4gbGVuZ3Ro IGFsb25nIHRoZSBnaXZlbiBwYXRoCisgICAgICoqCisgICAgIC0gcGF0aCAo c3RyaW5nKSBTVkcgcGF0aCBzdHJpbmcKKyAgICAgLSBsZW5ndGggKG51bWJl cikgbGVuZ3RoLCBpbiBwaXhlbHMsIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBw YXRoLCBleGNsdWRpbmcgbm9uLXJlbmRlcmluZyBqdW1wcworICAgICAqKgor ICAgICA9IChvYmplY3QpIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwb2ludDoK KyAgICAgbyB7CisgICAgIG8gICAgIHg6IChudW1iZXIpIHggY29vcmRpbmF0 ZSwKKyAgICAgbyAgICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlLAorICAg ICBvICAgICBhbHBoYTogKG51bWJlcikgYW5nbGUgb2YgZGVyaXZhdGl2ZQor ICAgICBvIH0KKyAgICBcKi8KKyAgICBTbmFwLnBhdGguZ2V0UG9pbnRBdExl bmd0aCA9IGdldFBvaW50QXRMZW5ndGg7CisgICAgLypcCisgICAgICogU25h cC5wYXRoLmdldFN1YnBhdGgKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIFJldHVybnMgdGhlIHN1YnBhdGggb2YgYSBnaXZlbiBwYXRoIGJl dHdlZW4gZ2l2ZW4gc3RhcnQgYW5kIGVuZCBsZW5ndGhzCisgICAgICoqCisg ICAgIC0gcGF0aCAoc3RyaW5nKSBTVkcgcGF0aCBzdHJpbmcKKyAgICAgLSBm cm9tIChudW1iZXIpIGxlbmd0aCwgaW4gcGl4ZWxzLCBmcm9tIHRoZSBzdGFy dCBvZiB0aGUgcGF0aCB0byB0aGUgc3RhcnQgb2YgdGhlIHNlZ21lbnQKKyAg ICAgLSB0byAobnVtYmVyKSBsZW5ndGgsIGluIHBpeGVscywgZnJvbSB0aGUg c3RhcnQgb2YgdGhlIHBhdGggdG8gdGhlIGVuZCBvZiB0aGUgc2VnbWVudAor ICAgICAqKgorICAgICA9IChzdHJpbmcpIHBhdGggc3RyaW5nIGRlZmluaXRp b24gZm9yIHRoZSBzZWdtZW50CisgICAgXCovCisgICAgU25hcC5wYXRoLmdl dFN1YnBhdGggPSBmdW5jdGlvbiAocGF0aCwgZnJvbSwgdG8pIHsKKyAgICAg ICAgaWYgKHRoaXMuZ2V0VG90YWxMZW5ndGgocGF0aCkgLSB0byA8IDFlLTYp IHsKKyAgICAgICAgICAgIHJldHVybiBnZXRTdWJwYXRoc0F0TGVuZ3RoKHBh dGgsIGZyb20pLmVuZDsKKyAgICAgICAgfQorICAgICAgICB2YXIgYSA9IGdl dFN1YnBhdGhzQXRMZW5ndGgocGF0aCwgdG8sIDEpOworICAgICAgICByZXR1 cm4gZnJvbSA/IGdldFN1YnBhdGhzQXRMZW5ndGgoYSwgZnJvbSkuZW5kIDog YTsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuZ2V0VG90YWxM ZW5ndGgKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVy bnMgdGhlIGxlbmd0aCBvZiB0aGUgcGF0aCBpbiBwaXhlbHMgKG9ubHkgd29y a3MgZm9yIGBwYXRoYCBlbGVtZW50cykKKyAgICAgPSAobnVtYmVyKSBsZW5n dGgKKyAgICBcKi8KKyAgICBlbHByb3RvLmdldFRvdGFsTGVuZ3RoID0gZnVu Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5ub2RlLmdldFRvdGFsTGVu Z3RoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlLmdldFRvdGFs TGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIFNJRVJSQSBF bGVtZW50LmdldFBvaW50QXRMZW5ndGgoKS9FbGVtZW50LmdldFRvdGFsTGVu Z3RoKCk6IElmIGEgPHBhdGg+IGlzIGJyb2tlbiBpbnRvIGRpZmZlcmVudCBz ZWdtZW50cywgaXMgdGhlIGp1bXAgZGlzdGFuY2UgdG8gdGhlIG5ldyBjb29y ZGluYXRlcyBzZXQgYnkgdGhlIF9NXyBvciBfbV8gY29tbWFuZHMgY2FsY3Vs YXRlZCBhcyBwYXJ0IG9mIHRoZSBwYXRoJ3MgdG90YWwgbGVuZ3RoPworICAg IC8qXAorICAgICAqIEVsZW1lbnQuZ2V0UG9pbnRBdExlbmd0aAorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBjb29yZGluYXRl cyBvZiB0aGUgcG9pbnQgbG9jYXRlZCBhdCB0aGUgZ2l2ZW4gbGVuZ3RoIG9u IHRoZSBnaXZlbiBwYXRoIChvbmx5IHdvcmtzIGZvciBgcGF0aGAgZWxlbWVu dHMpCisgICAgICoqCisgICAgIC0gbGVuZ3RoIChudW1iZXIpIGxlbmd0aCwg aW4gcGl4ZWxzLCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCwgZXhjbHVk aW5nIG5vbi1yZW5kZXJpbmcganVtcHMKKyAgICAgKioKKyAgICAgPSAob2Jq ZWN0KSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9pbnQ6CisgICAgIG8gewor ICAgICBvICAgICB4OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUsCisgICAgIG8g ICAgIHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSwKKyAgICAgbyAgICAgYWxw aGE6IChudW1iZXIpIGFuZ2xlIG9mIGRlcml2YXRpdmUKKyAgICAgbyB9Cisg ICAgXCovCisgICAgZWxwcm90by5nZXRQb2ludEF0TGVuZ3RoID0gZnVuY3Rp b24gKGxlbmd0aCkgeworICAgICAgICByZXR1cm4gZ2V0UG9pbnRBdExlbmd0 aCh0aGlzLmF0dHIoImQiKSwgbGVuZ3RoKTsKKyAgICB9OworICAgIC8vIFNJ RVJSQSBFbGVtZW50LmdldFN1YnBhdGgoKTogU2ltaWxhciB0byB0aGUgcHJv YmxlbSBmb3IgRWxlbWVudC5nZXRQb2ludEF0TGVuZ3RoKCkuIFVuY2xlYXIg aG93IHRoaXMgd291bGQgd29yayBmb3IgYSBzZWdtZW50ZWQgcGF0aC4gT3Zl cmFsbCwgdGhlIGNvbmNlcHQgb2YgX3N1YnBhdGhfIGFuZCB3aGF0IEknbSBj YWxsaW5nIGEgX3NlZ21lbnRfIChzZXJpZXMgb2Ygbm9uLV9NXyBvciBfWl8g Y29tbWFuZHMpIGlzIHVuY2xlYXIuCisgICAgLypcCisgICAgICogRWxlbWVu dC5nZXRTdWJwYXRoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBSZXR1cm5zIHN1YnBhdGggb2YgYSBnaXZlbiBlbGVtZW50IGZyb20gZ2l2 ZW4gc3RhcnQgYW5kIGVuZCBsZW5ndGhzIChvbmx5IHdvcmtzIGZvciBgcGF0 aGAgZWxlbWVudHMpCisgICAgICoqCisgICAgIC0gZnJvbSAobnVtYmVyKSBs ZW5ndGgsIGluIHBpeGVscywgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhdGgg dG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWdtZW50CisgICAgIC0gdG8gKG51bWJl cikgbGVuZ3RoLCBpbiBwaXhlbHMsIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBw YXRoIHRvIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQKKyAgICAgKioKKyAgICAg PSAoc3RyaW5nKSBwYXRoIHN0cmluZyBkZWZpbml0aW9uIGZvciB0aGUgc2Vn bWVudAorICAgIFwqLworICAgIGVscHJvdG8uZ2V0U3VicGF0aCA9IGZ1bmN0 aW9uIChmcm9tLCB0bykgeworICAgICAgICByZXR1cm4gU25hcC5wYXRoLmdl dFN1YnBhdGgodGhpcy5hdHRyKCJkIiksIGZyb20sIHRvKTsKKyAgICB9Owor ICAgIFNuYXAuXy5ib3ggPSBib3g7CisgICAgLypcCisgICAgICogU25hcC5w YXRoLmZpbmREb3RzQXRTZWdtZW50CisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIEZp bmRzIGRvdCBjb29yZGluYXRlcyBvbiB0aGUgZ2l2ZW4gY3ViaWMgYmV6acOp ciBjdXJ2ZSBhdCB0aGUgZ2l2ZW4gdAorICAgICAtIHAxeCAobnVtYmVyKSB4 IG9mIHRoZSBmaXJzdCBwb2ludCBvZiB0aGUgY3VydmUKKyAgICAgLSBwMXkg KG51bWJlcikgeSBvZiB0aGUgZmlyc3QgcG9pbnQgb2YgdGhlIGN1cnZlCisg ICAgIC0gYzF4IChudW1iZXIpIHggb2YgdGhlIGZpcnN0IGFuY2hvciBvZiB0 aGUgY3VydmUKKyAgICAgLSBjMXkgKG51bWJlcikgeSBvZiB0aGUgZmlyc3Qg YW5jaG9yIG9mIHRoZSBjdXJ2ZQorICAgICAtIGMyeCAobnVtYmVyKSB4IG9m IHRoZSBzZWNvbmQgYW5jaG9yIG9mIHRoZSBjdXJ2ZQorICAgICAtIGMyeSAo bnVtYmVyKSB5IG9mIHRoZSBzZWNvbmQgYW5jaG9yIG9mIHRoZSBjdXJ2ZQor ICAgICAtIHAyeCAobnVtYmVyKSB4IG9mIHRoZSBzZWNvbmQgcG9pbnQgb2Yg dGhlIGN1cnZlCisgICAgIC0gcDJ5IChudW1iZXIpIHkgb2YgdGhlIHNlY29u ZCBwb2ludCBvZiB0aGUgY3VydmUKKyAgICAgLSB0IChudW1iZXIpIHBvc2l0 aW9uIG9uIHRoZSBjdXJ2ZSAoMC4uMSkKKyAgICAgPSAob2JqZWN0KSBwb2lu dCBpbmZvcm1hdGlvbiBpbiBmb3JtYXQ6CisgICAgIG8geworICAgICBvICAg ICB4OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50LAorICAg ICBvICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50 LAorICAgICBvICAgICBtOiB7CisgICAgIG8gICAgICAgICB4OiAobnVtYmVy KSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgYW5jaG9yLAorICAgICBvICAg ICAgICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IGFu Y2hvcgorICAgICBvICAgICB9LAorICAgICBvICAgICBuOiB7CisgICAgIG8g ICAgICAgICB4OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0 IGFuY2hvciwKKyAgICAgbyAgICAgICAgIHk6IChudW1iZXIpIHkgY29vcmRp bmF0ZSBvZiB0aGUgcmlnaHQgYW5jaG9yCisgICAgIG8gICAgIH0sCisgICAg IG8gICAgIHN0YXJ0OiB7CisgICAgIG8gICAgICAgICB4OiAobnVtYmVyKSB4 IGNvb3JkaW5hdGUgb2YgdGhlIHN0YXJ0IG9mIHRoZSBjdXJ2ZSwKKyAgICAg byAgICAgICAgIHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgc3Rh cnQgb2YgdGhlIGN1cnZlCisgICAgIG8gICAgIH0sCisgICAgIG8gICAgIGVu ZDogeworICAgICBvICAgICAgICAgeDogKG51bWJlcikgeCBjb29yZGluYXRl IG9mIHRoZSBlbmQgb2YgdGhlIGN1cnZlLAorICAgICBvICAgICAgICAgeTog KG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGN1cnZl CisgICAgIG8gICAgIH0sCisgICAgIG8gICAgIGFscGhhOiAobnVtYmVyKSBh bmdsZSBvZiB0aGUgY3VydmUgZGVyaXZhdGl2ZSBhdCB0aGUgcG9pbnQKKyAg ICAgbyB9CisgICAgXCovCisgICAgU25hcC5wYXRoLmZpbmREb3RzQXRTZWdt ZW50ID0gZmluZERvdHNBdFNlZ21lbnQ7CisgICAgLypcCisgICAgICogU25h cC5wYXRoLmJlemllckJCb3gKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAgICogUmV0dXJu cyB0aGUgYm91bmRpbmcgYm94IG9mIGEgZ2l2ZW4gY3ViaWMgYmV6acOpciBj dXJ2ZQorICAgICAtIHAxeCAobnVtYmVyKSB4IG9mIHRoZSBmaXJzdCBwb2lu dCBvZiB0aGUgY3VydmUKKyAgICAgLSBwMXkgKG51bWJlcikgeSBvZiB0aGUg Zmlyc3QgcG9pbnQgb2YgdGhlIGN1cnZlCisgICAgIC0gYzF4IChudW1iZXIp IHggb2YgdGhlIGZpcnN0IGFuY2hvciBvZiB0aGUgY3VydmUKKyAgICAgLSBj MXkgKG51bWJlcikgeSBvZiB0aGUgZmlyc3QgYW5jaG9yIG9mIHRoZSBjdXJ2 ZQorICAgICAtIGMyeCAobnVtYmVyKSB4IG9mIHRoZSBzZWNvbmQgYW5jaG9y IG9mIHRoZSBjdXJ2ZQorICAgICAtIGMyeSAobnVtYmVyKSB5IG9mIHRoZSBz ZWNvbmQgYW5jaG9yIG9mIHRoZSBjdXJ2ZQorICAgICAtIHAyeCAobnVtYmVy KSB4IG9mIHRoZSBzZWNvbmQgcG9pbnQgb2YgdGhlIGN1cnZlCisgICAgIC0g cDJ5IChudW1iZXIpIHkgb2YgdGhlIHNlY29uZCBwb2ludCBvZiB0aGUgY3Vy dmUKKyAgICAgKiBvcgorICAgICAtIGJleiAoYXJyYXkpIGFycmF5IG9mIHNp eCBwb2ludHMgZm9yIGJlemnDqXIgY3VydmUKKyAgICAgPSAob2JqZWN0KSBi b3VuZGluZyBib3gKKyAgICAgbyB7CisgICAgIG8gICAgIHg6IChudW1iZXIp IHggY29vcmRpbmF0ZSBvZiB0aGUgbGVmdCB0b3AgcG9pbnQgb2YgdGhlIGJv eCwKKyAgICAgbyAgICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRo ZSBsZWZ0IHRvcCBwb2ludCBvZiB0aGUgYm94LAorICAgICBvICAgICB4Mjog KG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSByaWdodCBib3R0b20gcG9p bnQgb2YgdGhlIGJveCwKKyAgICAgbyAgICAgeTI6IChudW1iZXIpIHkgY29v cmRpbmF0ZSBvZiB0aGUgcmlnaHQgYm90dG9tIHBvaW50IG9mIHRoZSBib3gs CisgICAgIG8gICAgIHdpZHRoOiAobnVtYmVyKSB3aWR0aCBvZiB0aGUgYm94 LAorICAgICBvICAgICBoZWlnaHQ6IChudW1iZXIpIGhlaWdodCBvZiB0aGUg Ym94CisgICAgIG8gfQorICAgIFwqLworICAgIFNuYXAucGF0aC5iZXppZXJC Qm94ID0gYmV6aWVyQkJveDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGgu aXNQb2ludEluc2lkZUJCb3gKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAgICogUmV0dXJu cyBgdHJ1ZWAgaWYgZ2l2ZW4gcG9pbnQgaXMgaW5zaWRlIGJvdW5kaW5nIGJv eAorICAgICAtIGJib3ggKHN0cmluZykgYm91bmRpbmcgYm94CisgICAgIC0g eCAoc3RyaW5nKSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50CisgICAgIC0g eSAoc3RyaW5nKSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50CisgICAgID0g KGJvb2xlYW4pIGB0cnVlYCBpZiBwb2ludCBpcyBpbnNpZGUKKyAgICBcKi8K KyAgICBTbmFwLnBhdGguaXNQb2ludEluc2lkZUJCb3ggPSBpc1BvaW50SW5z aWRlQkJveDsKKyAgICBTbmFwLmNsb3Nlc3QgPSBmdW5jdGlvbiAoeCwgeSwg WCwgWSkgeworICAgICAgICB2YXIgciA9IDEwMCwKKyAgICAgICAgICAgIGIg PSBib3goeCAtIHIgLyAyLCB5IC0gciAvIDIsIHIsIHIpLAorICAgICAgICAg ICAgaW5zaWRlID0gW10sCisgICAgICAgICAgICBnZXR0ZXIgPSBYWzBdLmhh c093blByb3BlcnR5KCJ4IikgPyBmdW5jdGlvbiAoaSkgeworICAgICAgICAg ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHg6IFhbaV0u eCwKKyAgICAgICAgICAgICAgICAgICAgeTogWFtpXS55CisgICAgICAgICAg ICAgICAgfTsKKyAgICAgICAgICAgIH0gOiBmdW5jdGlvbiAoaSkgeworICAg ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHg6 IFhbaV0sCisgICAgICAgICAgICAgICAgICAgIHk6IFlbaV0KKyAgICAgICAg ICAgICAgICB9OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGZvdW5k ID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPD0gMWU2ICYmICFmb3VuZCkgewor ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gWC5sZW5ndGg7IGkg PCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHh5ID0gZ2V0dGVy KGkpOworICAgICAgICAgICAgICAgIGlmIChpc1BvaW50SW5zaWRlQkJveChi LCB4eS54LCB4eS55KSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZCsr OworICAgICAgICAgICAgICAgICAgICBpbnNpZGUucHVzaCh4eSk7CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAg ICAgICAgICAgICByICo9IDI7CisgICAgICAgICAgICAgICAgYiA9IGJveCh4 IC0gciAvIDIsIHkgLSByIC8gMiwgciwgcikKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBpZiAociA9PSAxZTYpIHsKKyAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgbGVuID0gSW5maW5p dHksCisgICAgICAgICAgICByZXM7CisgICAgICAgIGZvciAoaSA9IDAsIGlp ID0gaW5zaWRlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAg IHZhciBsID0gU25hcC5sZW4oeCwgeSwgaW5zaWRlW2ldLngsIGluc2lkZVtp XS55KTsKKyAgICAgICAgICAgIGlmIChsZW4gPiBsKSB7CisgICAgICAgICAg ICAgICAgbGVuID0gbDsKKyAgICAgICAgICAgICAgICBpbnNpZGVbaV0ubGVu ID0gbDsKKyAgICAgICAgICAgICAgICByZXMgPSBpbnNpZGVbaV07CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAg ICB9OworICAgIC8qXAorICAgICAqIFNuYXAucGF0aC5pc0JCb3hJbnRlcnNl Y3QKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFV0aWxpdHkg bWV0aG9kCisgICAgICoqCisgICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdHdv IGJvdW5kaW5nIGJveGVzIGludGVyc2VjdAorICAgICAtIGJib3gxIChzdHJp bmcpIGZpcnN0IGJvdW5kaW5nIGJveAorICAgICAtIGJib3gyIChzdHJpbmcp IHNlY29uZCBib3VuZGluZyBib3gKKyAgICAgPSAoYm9vbGVhbikgYHRydWVg IGlmIGJvdW5kaW5nIGJveGVzIGludGVyc2VjdAorICAgIFwqLworICAgIFNu YXAucGF0aC5pc0JCb3hJbnRlcnNlY3QgPSBpc0JCb3hJbnRlcnNlY3Q7Cisg ICAgLypcCisgICAgICogU25hcC5wYXRoLmludGVyc2VjdGlvbgorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAg ICAgKioKKyAgICAgKiBGaW5kcyBpbnRlcnNlY3Rpb25zIG9mIHR3byBwYXRo cworICAgICAtIHBhdGgxIChzdHJpbmcpIHBhdGggc3RyaW5nCisgICAgIC0g cGF0aDIgKHN0cmluZykgcGF0aCBzdHJpbmcKKyAgICAgPSAoYXJyYXkpIGRv dHMgb2YgaW50ZXJzZWN0aW9uCisgICAgIG8gWworICAgICBvICAgICB7Cisg ICAgIG8gICAgICAgICB4OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhl IHBvaW50LAorICAgICBvICAgICAgICAgeTogKG51bWJlcikgeSBjb29yZGlu YXRlIG9mIHRoZSBwb2ludCwKKyAgICAgbyAgICAgICAgIHQxOiAobnVtYmVy KSB0IHZhbHVlIGZvciBzZWdtZW50IG9mIHBhdGgxLAorICAgICBvICAgICAg ICAgdDI6IChudW1iZXIpIHQgdmFsdWUgZm9yIHNlZ21lbnQgb2YgcGF0aDIs CisgICAgIG8gICAgICAgICBzZWdtZW50MTogKG51bWJlcikgb3JkZXIgbnVt YmVyIGZvciBzZWdtZW50IG9mIHBhdGgxLAorICAgICBvICAgICAgICAgc2Vn bWVudDI6IChudW1iZXIpIG9yZGVyIG51bWJlciBmb3Igc2VnbWVudCBvZiBw YXRoMiwKKyAgICAgbyAgICAgICAgIGJlejE6IChhcnJheSkgZWlnaHQgY29v cmRpbmF0ZXMgcmVwcmVzZW50aW5nIGJlemnDqXIgY3VydmUgZm9yIHRoZSBz ZWdtZW50IG9mIHBhdGgxLAorICAgICBvICAgICAgICAgYmV6MjogKGFycmF5 KSBlaWdodCBjb29yZGluYXRlcyByZXByZXNlbnRpbmcgYmV6acOpciBjdXJ2 ZSBmb3IgdGhlIHNlZ21lbnQgb2YgcGF0aDIKKyAgICAgbyAgICAgfQorICAg ICBvIF0KKyAgICBcKi8KKyAgICBTbmFwLnBhdGguaW50ZXJzZWN0aW9uID0g cGF0aEludGVyc2VjdGlvbjsKKyAgICBTbmFwLnBhdGguaW50ZXJzZWN0aW9u TnVtYmVyID0gcGF0aEludGVyc2VjdGlvbk51bWJlcjsKKyAgICAvKlwKKyAg ICAgKiBTbmFwLnBhdGguaXNQb2ludEluc2lkZQorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBnaXZlbiBwb2ludCBpcyBpbnNpZGUg YSBnaXZlbiBjbG9zZWQgcGF0aC4KKyAgICAgKgorICAgICAqIE5vdGU6IGZp bGwgbW9kZSBkb2VzbuKAmXQgYWZmZWN0IHRoZSByZXN1bHQgb2YgdGhpcyBt ZXRob2QuCisgICAgIC0gcGF0aCAoc3RyaW5nKSBwYXRoIHN0cmluZworICAg ICAtIHggKG51bWJlcikgeCBvZiB0aGUgcG9pbnQKKyAgICAgLSB5IChudW1i ZXIpIHkgb2YgdGhlIHBvaW50CisgICAgID0gKGJvb2xlYW4pIGB0cnVlYCBp ZiBwb2ludCBpcyBpbnNpZGUgdGhlIHBhdGgKKyAgICBcKi8KKyAgICBTbmFw LnBhdGguaXNQb2ludEluc2lkZSA9IGlzUG9pbnRJbnNpZGVQYXRoOworICAg IC8qXAorICAgICAqIFNuYXAucGF0aC5nZXRCQm94CisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgor ICAgICAqIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBvZiBhIGdpdmVuIHBh dGgKKyAgICAgLSBwYXRoIChzdHJpbmcpIHBhdGggc3RyaW5nCisgICAgID0g KG9iamVjdCkgYm91bmRpbmcgYm94CisgICAgIG8geworICAgICBvICAgICB4 OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgdG9wIHBvaW50 IG9mIHRoZSBib3gsCisgICAgIG8gICAgIHk6IChudW1iZXIpIHkgY29vcmRp bmF0ZSBvZiB0aGUgbGVmdCB0b3AgcG9pbnQgb2YgdGhlIGJveCwKKyAgICAg byAgICAgeDI6IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQg Ym90dG9tIHBvaW50IG9mIHRoZSBib3gsCisgICAgIG8gICAgIHkyOiAobnVt YmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IGJvdHRvbSBwb2ludCBv ZiB0aGUgYm94LAorICAgICBvICAgICB3aWR0aDogKG51bWJlcikgd2lkdGgg b2YgdGhlIGJveCwKKyAgICAgbyAgICAgaGVpZ2h0OiAobnVtYmVyKSBoZWln aHQgb2YgdGhlIGJveAorICAgICBvIH0KKyAgICBcKi8KKyAgICBTbmFwLnBh dGguZ2V0QkJveCA9IHBhdGhCQm94OworICAgIFNuYXAucGF0aC5nZXQgPSBn ZXRQYXRoOworICAgIC8qXAorICAgICAqIFNuYXAucGF0aC50b1JlbGF0aXZl CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBVdGlsaXR5IG1l dGhvZAorICAgICAqKgorICAgICAqIENvbnZlcnRzIHBhdGggY29vcmRpbmF0 ZXMgaW50byByZWxhdGl2ZSB2YWx1ZXMKKyAgICAgLSBwYXRoIChzdHJpbmcp IHBhdGggc3RyaW5nCisgICAgID0gKGFycmF5KSBwYXRoIHN0cmluZworICAg IFwqLworICAgIFNuYXAucGF0aC50b1JlbGF0aXZlID0gcGF0aFRvUmVsYXRp dmU7CisgICAgLypcCisgICAgICogU25hcC5wYXRoLnRvQWJzb2x1dGUKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9k CisgICAgICoqCisgICAgICogQ29udmVydHMgcGF0aCBjb29yZGluYXRlcyBp bnRvIGFic29sdXRlIHZhbHVlcworICAgICAtIHBhdGggKHN0cmluZykgcGF0 aCBzdHJpbmcKKyAgICAgPSAoYXJyYXkpIHBhdGggc3RyaW5nCisgICAgXCov CisgICAgU25hcC5wYXRoLnRvQWJzb2x1dGUgPSBwYXRoVG9BYnNvbHV0ZTsK KyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGgudG9DdWJpYworICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAg KioKKyAgICAgKiBDb252ZXJ0cyBwYXRoIHRvIGEgbmV3IHBhdGggd2hlcmUg YWxsIHNlZ21lbnRzIGFyZSBjdWJpYyBiZXppw6lyIGN1cnZlcworICAgICAt IHBhdGhTdHJpbmcgKHN0cmluZ3xhcnJheSkgcGF0aCBzdHJpbmcgb3IgYXJy YXkgb2Ygc2VnbWVudHMKKyAgICAgPSAoYXJyYXkpIGFycmF5IG9mIHNlZ21l bnRzCisgICAgXCovCisgICAgU25hcC5wYXRoLnRvQ3ViaWMgPSBwYXRoMmN1 cnZlOworICAgIC8qXAorICAgICAqIFNuYXAucGF0aC5tYXAKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIFRyYW5zZm9ybSB0aGUgcGF0aCBz dHJpbmcgd2l0aCB0aGUgZ2l2ZW4gbWF0cml4CisgICAgIC0gcGF0aCAoc3Ry aW5nKSBwYXRoIHN0cmluZworICAgICAtIG1hdHJpeCAob2JqZWN0KSBzZWUg QE1hdHJpeAorICAgICA9IChzdHJpbmcpIHRyYW5zZm9ybWVkIHBhdGggc3Ry aW5nCisgICAgXCovCisgICAgU25hcC5wYXRoLm1hcCA9IG1hcFBhdGg7Cisg ICAgU25hcC5wYXRoLnRvU3RyaW5nID0gdG9TdHJpbmc7CisgICAgU25hcC5w YXRoLmNsb25lID0gcGF0aENsb25lOworfSk7CisKKy8vIENvcHlyaWdodCAo YykgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBv ZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9y Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJl ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg c29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy IGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3Ig dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh bmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5w bHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iKSB7 CisgICAgdmFyIG1tYXggPSBNYXRoLm1heCwKKyAgICAgICAgbW1pbiA9IE1h dGgubWluOworCisgICAgLy8gU2V0CisgICAgdmFyIFNldCA9IGZ1bmN0aW9u IChpdGVtcykgeworICAgICAgICB0aGlzLml0ZW1zID0gW107CisJdGhpcy5i aW5kaW5ncyA9IHt9OworICAgICAgICB0aGlzLmxlbmd0aCA9IDA7CisgICAg ICAgIHRoaXMudHlwZSA9ICJzZXQiOworICAgICAgICBpZiAoaXRlbXMpIHsK KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGl0ZW1zLmxlbmd0 aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbXNb aV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpc1t0aGlzLml0ZW1zLmxl bmd0aF0gPSB0aGlzLml0ZW1zW3RoaXMuaXRlbXMubGVuZ3RoXSA9IGl0ZW1z W2ldOworICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCsrOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0sCisgICAgc2V0cHJvdG8gPSBTZXQucHJvdG90eXBlOworICAgIC8qXAor ICAgICAqIFNldC5wdXNoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBBZGRzIGVhY2ggYXJndW1lbnQgdG8gdGhlIGN1cnJlbnQgc2V0Cisg ICAgID0gKG9iamVjdCkgb3JpZ2luYWwgZWxlbWVudAorICAgIFwqLworICAg IHNldHByb3RvLnB1c2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBp dGVtLAorICAgICAgICAgICAgbGVuOworICAgICAgICBmb3IgKHZhciBpID0g MCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAg ICAgICAgICAgaXRlbSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgICAgIGlm IChpdGVtKSB7CisgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5pdGVtcy5s ZW5ndGg7CisgICAgICAgICAgICAgICAgdGhpc1tsZW5dID0gdGhpcy5pdGVt c1tsZW5dID0gaXRlbTsKKyAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCsr OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0 aGlzOworICAgIH07CisgICAgLypcCisgICAgICogU2V0LnBvcAorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBsYXN0IGVsZW1l bnQgYW5kIHJldHVybnMgaXQKKyAgICAgPSAob2JqZWN0KSBlbGVtZW50Cisg ICAgXCovCisgICAgc2V0cHJvdG8ucG9wID0gZnVuY3Rpb24gKCkgeworICAg ICAgICB0aGlzLmxlbmd0aCAmJiBkZWxldGUgdGhpc1t0aGlzLmxlbmd0aC0t XTsKKyAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMucG9wKCk7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBTZXQuZm9yRWFjaAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogRXhlY3V0ZXMgZ2l2ZW4gZnVuY3Rpb24gZm9y IGVhY2ggZWxlbWVudCBpbiB0aGUgc2V0CisgICAgICoKKyAgICAgKiBJZiB0 aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgLCB0aGUgbG9vcCBzdG9wcyBy dW5uaW5nLgorICAgICAqKgorICAgICAtIGNhbGxiYWNrIChmdW5jdGlvbikg ZnVuY3Rpb24gdG8gcnVuCisgICAgIC0gdGhpc0FyZyAob2JqZWN0KSBjb250 ZXh0IG9iamVjdCBmb3IgdGhlIGNhbGxiYWNrCisgICAgID0gKG9iamVjdCkg U2V0IG9iamVjdAorICAgIFwqLworICAgIHNldHByb3RvLmZvckVhY2ggPSBm dW5jdGlvbiAoY2FsbGJhY2ssIHRoaXNBcmcpIHsKKyAgICAgICAgZm9yICh2 YXIgaSA9IDAsIGlpID0gdGhpcy5pdGVtcy5sZW5ndGg7IGkgPCBpaTsgaSsr KSB7CisgICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0 aGlzLml0ZW1zW2ldLCBpKSA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIFNl dC5hbmltYXRlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBB bmltYXRlcyBlYWNoIGVsZW1lbnQgaW4gc2V0IGluIHN5bmMuCisgICAgICoK KyAgICAgKioKKyAgICAgLSBhdHRycyAob2JqZWN0KSBrZXktdmFsdWUgcGFp cnMgb2YgZGVzdGluYXRpb24gYXR0cmlidXRlcworICAgICAtIGR1cmF0aW9u IChudW1iZXIpIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gaW4gbWlsbGlz ZWNvbmRzCisgICAgIC0gZWFzaW5nIChmdW5jdGlvbikgI29wdGlvbmFsIGVh c2luZyBmdW5jdGlvbiBmcm9tIEBtaW5hIG9yIGN1c3RvbQorICAgICAtIGNh bGxiYWNrIChmdW5jdGlvbikgI29wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9u IHRoYXQgZXhlY3V0ZXMgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMKKyAgICAg KiBvcgorICAgICAtIGFuaW1hdGlvbiAoYXJyYXkpIGFycmF5IG9mIGFuaW1h dGlvbiBwYXJhbWV0ZXIgZm9yIGVhY2ggZWxlbWVudCBpbiBzZXQgaW4gZm9y bWF0IGBbYXR0cnMsIGR1cmF0aW9uLCBlYXNpbmcsIGNhbGxiYWNrXWAKKyAg ICAgPiBVc2FnZQorICAgICB8IC8vIGFuaW1hdGUgYWxsIGVsZW1lbnRzIGlu IHNldCB0byByYWRpdXMgMTAKKyAgICAgfCBzZXQuYW5pbWF0ZSh7cjogMTB9 LCA1MDAsIG1pbmEuZWFzZWluKTsKKyAgICAgfCAvLyBvcgorICAgICB8IC8v IGFuaW1hdGUgZmlyc3QgZWxlbWVudCB0byByYWRpdXMgMTAsIGJ1dCBzZWNv bmQgdG8gcmFkaXVzIDIwIGFuZCBpbiBkaWZmZXJlbnQgdGltZQorICAgICB8 IHNldC5hbmltYXRlKFt7cjogMTB9LCA1MDAsIG1pbmEuZWFzZWluXSwgW3ty OiAyMH0sIDE1MDAsIG1pbmEuZWFzZWluXSk7CisgICAgID0gKEVsZW1lbnQp IHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICBcKi8KKyAgICBzZXRwcm90by5h bmltYXRlID0gZnVuY3Rpb24gKGF0dHJzLCBtcywgZWFzaW5nLCBjYWxsYmFj aykgeworICAgICAgICBpZiAodHlwZW9mIGVhc2luZyA9PSAiZnVuY3Rpb24i ICYmICFlYXNpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9 IGVhc2luZzsKKyAgICAgICAgICAgIGVhc2luZyA9IG1pbmEubGluZWFyOwor ICAgICAgICB9CisgICAgICAgIGlmIChhdHRycyBpbnN0YW5jZW9mIFNuYXAu Xy5BbmltYXRpb24pIHsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gYXR0cnMu Y2FsbGJhY2s7CisgICAgICAgICAgICBlYXNpbmcgPSBhdHRycy5lYXNpbmc7 CisgICAgICAgICAgICBtcyA9IGVhc2luZy5kdXI7CisgICAgICAgICAgICBh dHRycyA9IGF0dHJzLmF0dHI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFy Z3MgPSBhcmd1bWVudHM7CisgICAgICAgIGlmIChTbmFwLmlzKGF0dHJzLCAi YXJyYXkiKSAmJiBTbmFwLmlzKGFyZ3NbYXJncy5sZW5ndGggLSAxXSwgImFy cmF5IikpIHsKKyAgICAgICAgICAgIHZhciBlYWNoID0gdHJ1ZTsKKyAgICAg ICAgfQorICAgICAgICB2YXIgYmVnaW4sCisgICAgICAgICAgICBoYW5kbGVy ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmIChiZWdpbikg eworICAgICAgICAgICAgICAgICAgICB0aGlzLmIgPSBiZWdpbjsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiZWdp biA9IHRoaXMuYjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 LAorICAgICAgICAgICAgY2IgPSAwLAorICAgICAgICAgICAgc2V0ID0gdGhp cywKKyAgICAgICAgICAgIGNhbGxiYWNrZXIgPSBjYWxsYmFjayAmJiBmdW5j dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrY2IgPT0gc2V0Lmxl bmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRo aXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAg ICAgIHJldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsLCBpKSB7Cisg ICAgICAgICAgICBldmUub25jZSgic25hcC5hbmltY3JlYXRlZC4iICsgZWwu aWQsIGhhbmRsZXIpOworICAgICAgICAgICAgaWYgKGVhY2gpIHsKKyAgICAg ICAgICAgICAgICBhcmdzW2ldICYmIGVsLmFuaW1hdGUuYXBwbHkoZWwsIGFy Z3NbaV0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBlbC5hbmltYXRlKGF0dHJzLCBtcywgZWFzaW5nLCBjYWxsYmFja2VyKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBzZXRw cm90by5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHdoaWxlICh0 aGlzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5wb3AoKS5yZW1vdmUo KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIFNldC5iaW5kCisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKioKKyAgICAgKiBTcGVjaWZpZXMgaG93IHRvIGhhbmRsZSBhIHNwZWNp ZmljIGF0dHJpYnV0ZSB3aGVuIGFwcGxpZWQKKyAgICAgKiB0byBhIHNldC4K KyAgICAgKgorICAgICAqKgorICAgICAtIGF0dHIgKHN0cmluZykgYXR0cmli dXRlIG5hbWUKKyAgICAgLSBjYWxsYmFjayAoZnVuY3Rpb24pIGZ1bmN0aW9u IHRvIHJ1bgorICAgICAqIG9yCisgICAgIC0gYXR0ciAoc3RyaW5nKSBhdHRy aWJ1dGUgbmFtZQorICAgICAtIGVsZW1lbnQgKEVsZW1lbnQpIHNwZWNpZmlj IGVsZW1lbnQgaW4gdGhlIHNldCB0byBhcHBseSB0aGUgYXR0cmlidXRlIHRv CisgICAgICogb3IKKyAgICAgLSBhdHRyIChzdHJpbmcpIGF0dHJpYnV0ZSBu YW1lCisgICAgIC0gZWxlbWVudCAoRWxlbWVudCkgc3BlY2lmaWMgZWxlbWVu dCBpbiB0aGUgc2V0IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGUgdG8KKyAgICAg LSBlYXR0ciAoc3RyaW5nKSBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgdG8g YmluZCB0aGUgYXR0cmlidXRlIHRvCisgICAgID0gKG9iamVjdCkgU2V0IG9i amVjdAorICAgIFwqLworICAgIHNldHByb3RvLmJpbmQgPSBmdW5jdGlvbiAo YXR0ciwgYSwgYikgeworICAgICAgICB2YXIgZGF0YSA9IHt9OworICAgICAg ICBpZiAodHlwZW9mIGEgPT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAg dGhpcy5iaW5kaW5nc1thdHRyXSA9IGE7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICB2YXIgYW5hbWUgPSBiIHx8IGF0dHI7CisgICAgICAgICAg ICB0aGlzLmJpbmRpbmdzW2F0dHJdID0gZnVuY3Rpb24gKHYpIHsKKyAgICAg ICAgICAgICAgICBkYXRhW2FuYW1lXSA9IHY7CisgICAgICAgICAgICAgICAg YS5hdHRyKGRhdGEpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHNldHByb3RvLmF0dHIg PSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgdmFyIHVuYm91bmQgPSB7 fTsKKyAgICAgICAgZm9yICh2YXIgayBpbiB2YWx1ZSkgeworICAgICAgICAg ICAgaWYgKHRoaXMuYmluZGluZ3Nba10pIHsKKyAgICAgICAgICAgICAgICB0 aGlzLmJpbmRpbmdzW2tdKHZhbHVlW2tdKTsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgdW5ib3VuZFtrXSA9IHZhbHVlW2tdOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkg PSAwLCBpaSA9IHRoaXMuaXRlbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewor ICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hdHRyKHVuYm91bmQpOworICAg ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLypc CisgICAgICogU2V0LmNsZWFyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIHRoZSBzZXQKKyAg ICBcKi8KKyAgICBzZXRwcm90by5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgd2hpbGUgKHRoaXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlz LnBvcCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBT ZXQuc3BsaWNlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBS ZW1vdmVzIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gdGhlIHNldAorICAgICAq KgorICAgICAtIGluZGV4IChudW1iZXIpIHBvc2l0aW9uIG9mIHRoZSBkZWxl dGlvbgorICAgICAtIGNvdW50IChudW1iZXIpIG51bWJlciBvZiBlbGVtZW50 IHRvIHJlbW92ZQorICAgICAtIGluc2VydGlvbuKApiAob2JqZWN0KSAjb3B0 aW9uYWwgZWxlbWVudHMgdG8gaW5zZXJ0CisgICAgID0gKG9iamVjdCkgc2V0 IGVsZW1lbnRzIHRoYXQgd2VyZSBkZWxldGVkCisgICAgXCovCisgICAgc2V0 cHJvdG8uc3BsaWNlID0gZnVuY3Rpb24gKGluZGV4LCBjb3VudCwgaW5zZXJ0 aW9uKSB7CisgICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gbW1heCh0aGlz Lmxlbmd0aCArIGluZGV4LCAwKSA6IGluZGV4OworICAgICAgICBjb3VudCA9 IG1tYXgoMCwgbW1pbih0aGlzLmxlbmd0aCAtIGluZGV4LCBjb3VudCkpOwor ICAgICAgICB2YXIgdGFpbCA9IFtdLAorICAgICAgICAgICAgdG9kZWwgPSBb XSwKKyAgICAgICAgICAgIGFyZ3MgPSBbXSwKKyAgICAgICAgICAgIGk7Cisg ICAgICAgIGZvciAoaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysp IHsKKyAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pOworICAg ICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7 CisgICAgICAgICAgICB0b2RlbC5wdXNoKHRoaXNbaW5kZXggKyBpXSk7Cisg ICAgICAgIH0KKyAgICAgICAgZm9yICg7IGkgPCB0aGlzLmxlbmd0aCAtIGlu ZGV4OyBpKyspIHsKKyAgICAgICAgICAgIHRhaWwucHVzaCh0aGlzW2luZGV4 ICsgaV0pOworICAgICAgICB9CisgICAgICAgIHZhciBhcmdsZW4gPSBhcmdz Lmxlbmd0aDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2xlbiArIHRh aWwubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuaXRlbXNbaW5k ZXggKyBpXSA9IHRoaXNbaW5kZXggKyBpXSA9IGkgPCBhcmdsZW4gPyBhcmdz W2ldIDogdGFpbFtpIC0gYXJnbGVuXTsKKyAgICAgICAgfQorICAgICAgICBp ID0gdGhpcy5pdGVtcy5sZW5ndGggPSB0aGlzLmxlbmd0aCAtPSBjb3VudCAt IGFyZ2xlbjsKKyAgICAgICAgd2hpbGUgKHRoaXNbaV0pIHsKKyAgICAgICAg ICAgIGRlbGV0ZSB0aGlzW2krK107CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIG5ldyBTZXQodG9kZWwpOworICAgIH07CisgICAgLypcCisgICAgICog U2V0LmV4Y2x1ZGUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IFJlbW92ZXMgZ2l2ZW4gZWxlbWVudCBmcm9tIHRoZSBzZXQKKyAgICAgKioK KyAgICAgLSBlbGVtZW50IChvYmplY3QpIGVsZW1lbnQgdG8gcmVtb3ZlCisg ICAgID0gKGJvb2xlYW4pIGB0cnVlYCBpZiBvYmplY3Qgd2FzIGZvdW5kIGFu ZCByZW1vdmVkIGZyb20gdGhlIHNldAorICAgIFwqLworICAgIHNldHByb3Rv LmV4Y2x1ZGUgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgZm9yICh2YXIg aSA9IDAsIGlpID0gdGhpcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSBpZiAodGhp c1tpXSA9PSBlbCkgeworICAgICAgICAgICAgdGhpcy5zcGxpY2UoaSwgMSk7 CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICBzZXRwcm90by5pbnNlcnRB ZnRlciA9IGZ1bmN0aW9uIChlbCkgeworICAgICAgICB2YXIgaSA9IHRoaXMu aXRlbXMubGVuZ3RoOworICAgICAgICB3aGlsZSAoaS0tKSB7CisgICAgICAg ICAgICB0aGlzLml0ZW1zW2ldLmluc2VydEFmdGVyKGVsKTsKKyAgICAgICAg fQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHNldHByb3Rv LmdldEJCb3ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB4ID0gW10s CisgICAgICAgICAgICB5ID0gW10sCisgICAgICAgICAgICB4MiA9IFtdLAor ICAgICAgICAgICAgeTIgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRo aXMuaXRlbXMubGVuZ3RoOyBpLS07KSBpZiAoIXRoaXMuaXRlbXNbaV0ucmVt b3ZlZCkgeworICAgICAgICAgICAgdmFyIGJveCA9IHRoaXMuaXRlbXNbaV0u Z2V0QkJveCgpOworICAgICAgICAgICAgeC5wdXNoKGJveC54KTsKKyAgICAg ICAgICAgIHkucHVzaChib3gueSk7CisgICAgICAgICAgICB4Mi5wdXNoKGJv eC54ICsgYm94LndpZHRoKTsKKyAgICAgICAgICAgIHkyLnB1c2goYm94Lnkg KyBib3guaGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICB4ID0gbW1pbi5h cHBseSgwLCB4KTsKKyAgICAgICAgeSA9IG1taW4uYXBwbHkoMCwgeSk7Cisg ICAgICAgIHgyID0gbW1heC5hcHBseSgwLCB4Mik7CisgICAgICAgIHkyID0g bW1heC5hcHBseSgwLCB5Mik7CisgICAgICAgIHJldHVybiB7CisgICAgICAg ICAgICB4OiB4LAorICAgICAgICAgICAgeTogeSwKKyAgICAgICAgICAgIHgy OiB4MiwKKyAgICAgICAgICAgIHkyOiB5MiwKKyAgICAgICAgICAgIHdpZHRo OiB4MiAtIHgsCisgICAgICAgICAgICBoZWlnaHQ6IHkyIC0geSwKKyAgICAg ICAgICAgIGN4OiB4ICsgKHgyIC0geCkgLyAyLAorICAgICAgICAgICAgY3k6 IHkgKyAoeTIgLSB5KSAvIDIKKyAgICAgICAgfTsKKyAgICB9OworICAgIHNl dHByb3RvLmNsb25lID0gZnVuY3Rpb24gKHMpIHsKKyAgICAgICAgcyA9IG5l dyBTZXQ7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuaXRl bXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgcy5wdXNo KHRoaXMuaXRlbXNbaV0uY2xvbmUoKSk7CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIHM7CisgICAgfTsKKyAgICBzZXRwcm90by50b1N0cmluZyA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTbmFwXHUyMDE4cyBzZXQi OworICAgIH07CisgICAgc2V0cHJvdG8udHlwZSA9ICJzZXQiOworICAgIC8v IGV4cG9ydAorICAgIFNuYXAuU2V0ID0gU2V0OworICAgIFNuYXAuc2V0ID0g ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2V0ID0gbmV3IFNldDsKKyAg ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNl dC5wdXNoLmFwcGx5KHNldCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo YXJndW1lbnRzLCAwKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNl dDsKKyAgICB9OworfSk7CisKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9i ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K Ky8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVz ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj ZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z ZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M SUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8v IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk IG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMg T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig aW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0 YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rp b24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iKSB7CisgICAgdmFyIG5h bWVzID0ge30sCisgICAgICAgIHJlVW5pdCA9IC9bYS16XSskL2ksCisgICAg ICAgIFN0ciA9IFN0cmluZzsKKyAgICBuYW1lcy5zdHJva2UgPSBuYW1lcy5m aWxsID0gImNvbG91ciI7CisgICAgZnVuY3Rpb24gZ2V0RW1wdHkoaXRlbSkg eworICAgICAgICB2YXIgbCA9IGl0ZW1bMF07CisgICAgICAgIHN3aXRjaCAo bC50b0xvd2VyQ2FzZSgpKSB7CisgICAgICAgICAgICBjYXNlICJ0IjogcmV0 dXJuIFtsLCAwLCAwXTsKKyAgICAgICAgICAgIGNhc2UgIm0iOiByZXR1cm4g W2wsIDEsIDAsIDAsIDEsIDAsIDBdOworICAgICAgICAgICAgY2FzZSAiciI6 IGlmIChpdGVtLmxlbmd0aCA9PSA0KSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIFtsLCAwLCBpdGVtWzJdLCBpdGVtWzNdXTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFtsLCAwXTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgInMiOiBpZiAoaXRlbS5sZW5n dGggPT0gNSkgeworICAgICAgICAgICAgICAgIHJldHVybiBbbCwgMSwgMSwg aXRlbVszXSwgaXRlbVs0XV07CisgICAgICAgICAgICB9IGVsc2UgaWYgKGl0 ZW0ubGVuZ3RoID09IDMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW2ws IDEsIDFdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4gW2wsIDFdOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorICAgIGZ1bmN0aW9uIGVxdWFsaXNlVHJhbnNmb3JtKHQxLCB0Miwg Z2V0QkJveCkgeworICAgICAgICB0MiA9IFN0cih0MikucmVwbGFjZSgvXC57 M318XHUyMDI2L2csIHQxKTsKKyAgICAgICAgdDEgPSBTbmFwLnBhcnNlVHJh bnNmb3JtU3RyaW5nKHQxKSB8fCBbXTsKKyAgICAgICAgdDIgPSBTbmFwLnBh cnNlVHJhbnNmb3JtU3RyaW5nKHQyKSB8fCBbXTsKKyAgICAgICAgdmFyIG1h eGxlbmd0aCA9IE1hdGgubWF4KHQxLmxlbmd0aCwgdDIubGVuZ3RoKSwKKyAg ICAgICAgICAgIGZyb20gPSBbXSwKKyAgICAgICAgICAgIHRvID0gW10sCisg ICAgICAgICAgICBpID0gMCwgaiwgamosCisgICAgICAgICAgICB0dDEsIHR0 MjsKKyAgICAgICAgZm9yICg7IGkgPCBtYXhsZW5ndGg7IGkrKykgeworICAg ICAgICAgICAgdHQxID0gdDFbaV0gfHwgZ2V0RW1wdHkodDJbaV0pOworICAg ICAgICAgICAgdHQyID0gdDJbaV0gfHwgZ2V0RW1wdHkodHQxKTsKKyAgICAg ICAgICAgIGlmICgodHQxWzBdICE9IHR0MlswXSkgfHwKKyAgICAgICAgICAg ICAgICAodHQxWzBdLnRvTG93ZXJDYXNlKCkgPT0gInIiICYmICh0dDFbMl0g IT0gdHQyWzJdIHx8IHR0MVszXSAhPSB0dDJbM10pKSB8fAorICAgICAgICAg ICAgICAgICh0dDFbMF0udG9Mb3dlckNhc2UoKSA9PSAicyIgJiYgKHR0MVsz XSAhPSB0dDJbM10gfHwgdHQxWzRdICE9IHR0Mls0XSkpCisgICAgICAgICAg ICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIHQxID0gU25hcC5fLnRy YW5zZm9ybTJtYXRyaXgodDEsIGdldEJCb3goKSk7CisgICAgICAgICAgICAg ICAgICAgIHQyID0gU25hcC5fLnRyYW5zZm9ybTJtYXRyaXgodDIsIGdldEJC b3goKSk7CisgICAgICAgICAgICAgICAgICAgIGZyb20gPSBbWyJtIiwgdDEu YSwgdDEuYiwgdDEuYywgdDEuZCwgdDEuZSwgdDEuZl1dOworICAgICAgICAg ICAgICAgICAgICB0byA9IFtbIm0iLCB0Mi5hLCB0Mi5iLCB0Mi5jLCB0Mi5k LCB0Mi5lLCB0Mi5mXV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJvbVtpXSA9IFtdOworICAg ICAgICAgICAgdG9baV0gPSBbXTsKKyAgICAgICAgICAgIGZvciAoaiA9IDAs IGpqID0gTWF0aC5tYXgodHQxLmxlbmd0aCwgdHQyLmxlbmd0aCk7IGogPCBq ajsgaisrKSB7CisgICAgICAgICAgICAgICAgaiBpbiB0dDEgJiYgKGZyb21b aV1bal0gPSB0dDFbal0pOworICAgICAgICAgICAgICAgIGogaW4gdHQyICYm ICh0b1tpXVtqXSA9IHR0MltqXSk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGZyb206IHBhdGgy YXJyYXkoZnJvbSksCisgICAgICAgICAgICB0bzogcGF0aDJhcnJheSh0byks CisgICAgICAgICAgICBmOiBnZXRQYXRoKGZyb20pCisgICAgICAgIH07Cisg ICAgfQorICAgIGZ1bmN0aW9uIGdldE51bWJlcih2YWwpIHsKKyAgICAgICAg cmV0dXJuIHZhbDsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0VW5pdCh1bml0 KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7CisgICAgICAg ICAgICByZXR1cm4gK3ZhbC50b0ZpeGVkKDMpICsgdW5pdDsKKyAgICAgICAg fTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0Vmlld0JveCh2YWwpIHsKKyAg ICAgICAgcmV0dXJuIHZhbC5qb2luKCIgIik7CisgICAgfQorICAgIGZ1bmN0 aW9uIGdldENvbG91cihjbHIpIHsKKyAgICAgICAgcmV0dXJuIFNuYXAucmdi KGNsclswXSwgY2xyWzFdLCBjbHJbMl0pOworICAgIH0KKyAgICBmdW5jdGlv biBnZXRQYXRoKHBhdGgpIHsKKyAgICAgICAgdmFyIGsgPSAwLCBpLCBpaSwg aiwgamosIG91dCwgYSwgYiA9IFtdOworICAgICAgICBmb3IgKGkgPSAwLCBp aSA9IHBhdGgubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg b3V0ID0gIlsiOworICAgICAgICAgICAgYSA9IFsnIicgKyBwYXRoW2ldWzBd ICsgJyInXTsKKyAgICAgICAgICAgIGZvciAoaiA9IDEsIGpqID0gcGF0aFtp XS5sZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAgICAgICAgICAgICAgYVtq XSA9ICJ2YWxbIiArIChrKyspICsgIl0iOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgb3V0ICs9IGEgKyAiXSI7CisgICAgICAgICAgICBiW2ldID0g b3V0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBGdW5jdGlvbigidmFs IiwgInJldHVybiBTbmFwLnBhdGgudG9TdHJpbmcuY2FsbChbIiArIGIgKyAi XSkiKTsKKyAgICB9CisgICAgZnVuY3Rpb24gcGF0aDJhcnJheShwYXRoKSB7 CisgICAgICAgIHZhciBvdXQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9 IDAsIGlpID0gcGF0aC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAg ICAgICBmb3IgKHZhciBqID0gMSwgamogPSBwYXRoW2ldLmxlbmd0aDsgaiA8 IGpqOyBqKyspIHsKKyAgICAgICAgICAgICAgICBvdXQucHVzaChwYXRoW2ld W2pdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1 cm4gb3V0OworICAgIH0KKyAgICBmdW5jdGlvbiBpc051bWVyaWMob2JqKSB7 CisgICAgICAgIHJldHVybiBpc0Zpbml0ZShwYXJzZUZsb2F0KG9iaikpOwor ICAgIH0KKyAgICBmdW5jdGlvbiBhcnJheUVxdWFsKGFycjEsIGFycjIpIHsK KyAgICAgICAgaWYgKCFTbmFwLmlzKGFycjEsICJhcnJheSIpIHx8ICFTbmFw LmlzKGFycjIsICJhcnJheSIpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFs c2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycjEudG9TdHJpbmco KSA9PSBhcnIyLnRvU3RyaW5nKCk7CisgICAgfQorICAgIEVsZW1lbnQucHJv dG90eXBlLmVxdWFsID0gZnVuY3Rpb24gKG5hbWUsIGIpIHsKKyAgICAgICAg cmV0dXJuIGV2ZSgic25hcC51dGlsLmVxdWFsIiwgdGhpcywgbmFtZSwgYiku Zmlyc3REZWZpbmVkKCk7CisgICAgfTsKKyAgICBldmUub24oInNuYXAudXRp bC5lcXVhbCIsIGZ1bmN0aW9uIChuYW1lLCBiKSB7CisgICAgICAgIHZhciBB LCBCLCBhID0gU3RyKHRoaXMuYXR0cihuYW1lKSB8fCAiIiksCisgICAgICAg ICAgICBlbCA9IHRoaXM7CisgICAgICAgIGlmIChpc051bWVyaWMoYSkgJiYg aXNOdW1lcmljKGIpKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg ICAgICAgICAgIGZyb206IHBhcnNlRmxvYXQoYSksCisgICAgICAgICAgICAg ICAgdG86IHBhcnNlRmxvYXQoYiksCisgICAgICAgICAgICAgICAgZjogZ2V0 TnVtYmVyCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGlm IChuYW1lc1tuYW1lXSA9PSAiY29sb3VyIikgeworICAgICAgICAgICAgQSA9 IFNuYXAuY29sb3IoYSk7CisgICAgICAgICAgICBCID0gU25hcC5jb2xvcihi KTsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZnJv bTogW0EuciwgQS5nLCBBLmIsIEEub3BhY2l0eV0sCisgICAgICAgICAgICAg ICAgdG86IFtCLnIsIEIuZywgQi5iLCBCLm9wYWNpdHldLAorICAgICAgICAg ICAgICAgIGY6IGdldENvbG91cgorICAgICAgICAgICAgfTsKKyAgICAgICAg fQorICAgICAgICBpZiAobmFtZSA9PSAidmlld0JveCIpIHsKKyAgICAgICAg ICAgIEEgPSB0aGlzLmF0dHIobmFtZSkudmIuc3BsaXQoIiAiKS5tYXAoTnVt YmVyKTsKKyAgICAgICAgICAgIEIgPSBiLnNwbGl0KCIgIikubWFwKE51bWJl cik7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGZy b206IEEsCisgICAgICAgICAgICAgICAgdG86IEIsCisgICAgICAgICAgICAg ICAgZjogZ2V0Vmlld0JveAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQor ICAgICAgICBpZiAobmFtZSA9PSAidHJhbnNmb3JtIiB8fCBuYW1lID09ICJn cmFkaWVudFRyYW5zZm9ybSIgfHwgbmFtZSA9PSAicGF0dGVyblRyYW5zZm9y bSIpIHsKKyAgICAgICAgICAgIGlmIChiIGluc3RhbmNlb2YgU25hcC5NYXRy aXgpIHsKKyAgICAgICAgICAgICAgICBiID0gYi50b1RyYW5zZm9ybVN0cmlu ZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFTbmFwLl8u cmdUcmFuc2Zvcm0udGVzdChiKSkgeworICAgICAgICAgICAgICAgIGIgPSBT bmFwLl8uc3ZnVHJhbnNmb3JtMnN0cmluZyhiKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHJldHVybiBlcXVhbGlzZVRyYW5zZm9ybShhLCBiLCBm dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsLmdldEJC b3goMSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBp ZiAobmFtZSA9PSAiZCIgfHwgbmFtZSA9PSAicGF0aCIpIHsKKyAgICAgICAg ICAgIEEgPSBTbmFwLnBhdGgudG9DdWJpYyhhLCBiKTsKKyAgICAgICAgICAg IHJldHVybiB7CisgICAgICAgICAgICAgICAgZnJvbTogcGF0aDJhcnJheShB WzBdKSwKKyAgICAgICAgICAgICAgICB0bzogcGF0aDJhcnJheShBWzFdKSwK KyAgICAgICAgICAgICAgICBmOiBnZXRQYXRoKEFbMF0pCisgICAgICAgICAg ICB9OworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09ICJwb2ludHMi KSB7CisgICAgICAgICAgICBBID0gU3RyKGEpLnNwbGl0KFNuYXAuXy5zZXBh cmF0b3IpOworICAgICAgICAgICAgQiA9IFN0cihiKS5zcGxpdChTbmFwLl8u c2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg ICAgICAgZnJvbTogQSwKKyAgICAgICAgICAgICAgICB0bzogQiwKKyAgICAg ICAgICAgICAgICBmOiBmdW5jdGlvbiAodmFsKSB7IHJldHVybiB2YWw7IH0K KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFVbml0 ID0gYS5tYXRjaChyZVVuaXQpLAorICAgICAgICAgICAgYlVuaXQgPSBTdHIo YikubWF0Y2gocmVVbml0KTsKKyAgICAgICAgaWYgKGFVbml0ICYmIGFycmF5 RXF1YWwoYVVuaXQsIGJVbml0KSkgeworICAgICAgICAgICAgcmV0dXJuIHsK KyAgICAgICAgICAgICAgICBmcm9tOiBwYXJzZUZsb2F0KGEpLAorICAgICAg ICAgICAgICAgIHRvOiBwYXJzZUZsb2F0KGIpLAorICAgICAgICAgICAgICAg IGY6IGdldFVuaXQoYVVuaXQpCisgICAgICAgICAgICB9OworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg ICBmcm9tOiB0aGlzLmFzUFgobmFtZSksCisgICAgICAgICAgICAgICAgdG86 IHRoaXMuYXNQWChuYW1lLCBiKSwKKyAgICAgICAgICAgICAgICBmOiBnZXRO dW1iZXIKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9KTsKK30p OworCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNv cnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5z ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl ICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4 Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3Ug bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBo dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8v CisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1 bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi IEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBT ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl cm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0 aGUgTGljZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVt ZW50LCBQYXBlciwgZ2xvYikgeworICAgIHZhciBlbHByb3RvID0gRWxlbWVu dC5wcm90b3R5cGUsCisgICAgaGFzID0gImhhc093blByb3BlcnR5IiwKKyAg ICBzdXBwb3J0c1RvdWNoID0gImNyZWF0ZVRvdWNoIiBpbiBnbG9iLmRvYywK KyAgICBldmVudHMgPSBbCisgICAgICAgICJjbGljayIsICJkYmxjbGljayIs ICJtb3VzZWRvd24iLCAibW91c2Vtb3ZlIiwgIm1vdXNlb3V0IiwKKyAgICAg ICAgIm1vdXNlb3ZlciIsICJtb3VzZXVwIiwgInRvdWNoc3RhcnQiLCAidG91 Y2htb3ZlIiwgInRvdWNoZW5kIiwKKyAgICAgICAgInRvdWNoY2FuY2VsIgor ICAgIF0sCisgICAgdG91Y2hNYXAgPSB7CisgICAgICAgIG1vdXNlZG93bjog InRvdWNoc3RhcnQiLAorICAgICAgICBtb3VzZW1vdmU6ICJ0b3VjaG1vdmUi LAorICAgICAgICBtb3VzZXVwOiAidG91Y2hlbmQiCisgICAgfSwKKyAgICBn ZXRTY3JvbGwgPSBmdW5jdGlvbiAoeHksIGVsKSB7CisgICAgICAgIHZhciBu YW1lID0geHkgPT0gInkiID8gInNjcm9sbFRvcCIgOiAic2Nyb2xsTGVmdCIs CisgICAgICAgICAgICBkb2MgPSBlbCAmJiBlbC5ub2RlID8gZWwubm9kZS5v d25lckRvY3VtZW50IDogZ2xvYi5kb2M7CisgICAgICAgIHJldHVybiBkb2Nb bmFtZSBpbiBkb2MuZG9jdW1lbnRFbGVtZW50ID8gImRvY3VtZW50RWxlbWVu dCIgOiAiYm9keSJdW25hbWVdOworICAgIH0sCisgICAgcHJldmVudERlZmF1 bHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMucmV0dXJuVmFsdWUg PSBmYWxzZTsKKyAgICB9LAorICAgIHByZXZlbnRUb3VjaCA9IGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudC5wcmV2 ZW50RGVmYXVsdCgpOworICAgIH0sCisgICAgc3RvcFByb3BhZ2F0aW9uID0g ZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRy dWU7CisgICAgfSwKKyAgICBzdG9wVG91Y2ggPSBmdW5jdGlvbiAoKSB7Cisg ICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0 aW9uKCk7CisgICAgfSwKKyAgICBhZGRFdmVudCA9IGZ1bmN0aW9uIChvYmos IHR5cGUsIGZuLCBlbGVtZW50KSB7CisgICAgICAgIHZhciByZWFsTmFtZSA9 IHN1cHBvcnRzVG91Y2ggJiYgdG91Y2hNYXBbdHlwZV0gPyB0b3VjaE1hcFt0 eXBlXSA6IHR5cGUsCisgICAgICAgICAgICBmID0gZnVuY3Rpb24gKGUpIHsK KyAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsWSA9IGdldFNjcm9sbCgieSIs IGVsZW1lbnQpLAorICAgICAgICAgICAgICAgICAgICBzY3JvbGxYID0gZ2V0 U2Nyb2xsKCJ4IiwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHN1 cHBvcnRzVG91Y2ggJiYgdG91Y2hNYXBbaGFzXSh0eXBlKSkgeworICAgICAg ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBlLnRhcmdldFRv dWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aDsgaSA8IGlpOyBpKysp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldFRvdWNo ZXNbaV0udGFyZ2V0ID09IG9iaiB8fCBvYmouY29udGFpbnMoZS50YXJnZXRU b3VjaGVzW2ldLnRhcmdldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2YXIgb2xkZSA9IGU7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZSA9IGUudGFyZ2V0VG91Y2hlc1tpXTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQgPSBvbGRlOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50 VG91Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJv cGFnYXRpb24gPSBzdG9wVG91Y2g7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgdmFyIHggPSBlLmNsaWVudFggKyBzY3JvbGxYLAorICAgICAg ICAgICAgICAgICAgICB5ID0gZS5jbGllbnRZICsgc2Nyb2xsWTsKKyAgICAg ICAgICAgICAgICByZXR1cm4gZm4uY2FsbChlbGVtZW50LCBlLCB4LCB5KTsK KyAgICAgICAgICAgIH07CisKKyAgICAgICAgaWYgKHR5cGUgIT09IHJlYWxO YW1lKSB7CisgICAgICAgICAgICBvYmouYWRkRXZlbnRMaXN0ZW5lcih0eXBl LCBmLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBvYmouYWRkRXZl bnRMaXN0ZW5lcihyZWFsTmFtZSwgZiwgZmFsc2UpOworCisgICAgICAgIHJl dHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodHlwZSAhPT0g cmVhbE5hbWUpIHsKKyAgICAgICAgICAgICAgICBvYmoucmVtb3ZlRXZlbnRM aXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIG9iai5yZW1vdmVFdmVudExpc3RlbmVyKHJlYWxOYW1lLCBm LCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg fTsKKyAgICB9LAorICAgIGRyYWcgPSBbXSwKKyAgICBkcmFnTW92ZSA9IGZ1 bmN0aW9uIChlKSB7CisgICAgICAgIHZhciB4ID0gZS5jbGllbnRYLAorICAg ICAgICAgICAgeSA9IGUuY2xpZW50WSwKKyAgICAgICAgICAgIHNjcm9sbFkg PSBnZXRTY3JvbGwoInkiKSwKKyAgICAgICAgICAgIHNjcm9sbFggPSBnZXRT Y3JvbGwoIngiKSwKKyAgICAgICAgICAgIGRyYWdpLAorICAgICAgICAgICAg aiA9IGRyYWcubGVuZ3RoOworICAgICAgICB3aGlsZSAoai0tKSB7CisgICAg ICAgICAgICBkcmFnaSA9IGRyYWdbal07CisgICAgICAgICAgICBpZiAoc3Vw cG9ydHNUb3VjaCkgeworICAgICAgICAgICAgICAgIHZhciBpID0gZS50b3Vj aGVzICYmIGUudG91Y2hlcy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAg IHRvdWNoOworICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pIHsKKyAgICAg ICAgICAgICAgICAgICAgdG91Y2ggPSBlLnRvdWNoZXNbaV07CisgICAgICAg ICAgICAgICAgICAgIGlmICh0b3VjaC5pZGVudGlmaWVyID09IGRyYWdpLmVs Ll9kcmFnLmlkIHx8IGRyYWdpLmVsLm5vZGUuY29udGFpbnModG91Y2gudGFy Z2V0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHRvdWNoLmNs aWVudFg7CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gdG91Y2guY2xp ZW50WTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLm9yaWdpbmFsRXZl bnQgPyBlLm9yaWdpbmFsRXZlbnQgOiBlKS5wcmV2ZW50RGVmYXVsdCgpOwor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBub2RlID0gZHJhZ2kuZWwu bm9kZSwKKyAgICAgICAgICAgICAgICBvLAorICAgICAgICAgICAgICAgIG5l eHQgPSBub2RlLm5leHRTaWJsaW5nLAorICAgICAgICAgICAgICAgIHBhcmVu dCA9IG5vZGUucGFyZW50Tm9kZSwKKyAgICAgICAgICAgICAgICBkaXNwbGF5 ID0gbm9kZS5zdHlsZS5kaXNwbGF5OworICAgICAgICAgICAgLy8gZ2xvYi53 aW4ub3BlcmEgJiYgcGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpOworICAgICAg ICAgICAgLy8gbm9kZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAg ICAgICAgLy8gbyA9IGRyYWdpLmVsLnBhcGVyLmdldEVsZW1lbnRCeVBvaW50 KHgsIHkpOworICAgICAgICAgICAgLy8gbm9kZS5zdHlsZS5kaXNwbGF5ID0g ZGlzcGxheTsKKyAgICAgICAgICAgIC8vIGdsb2Iud2luLm9wZXJhICYmIChu ZXh0ID8gcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBuZXh0KSA6IHBhcmVu dC5hcHBlbmRDaGlsZChub2RlKSk7CisgICAgICAgICAgICAvLyBvICYmIGV2 ZSgic25hcC5kcmFnLm92ZXIuIiArIGRyYWdpLmVsLmlkLCBkcmFnaS5lbCwg byk7CisgICAgICAgICAgICB4ICs9IHNjcm9sbFg7CisgICAgICAgICAgICB5 ICs9IHNjcm9sbFk7CisgICAgICAgICAgICBldmUoInNuYXAuZHJhZy5tb3Zl LiIgKyBkcmFnaS5lbC5pZCwgZHJhZ2kubW92ZV9zY29wZSB8fCBkcmFnaS5l bCwgeCAtIGRyYWdpLmVsLl9kcmFnLngsIHkgLSBkcmFnaS5lbC5fZHJhZy55 LCB4LCB5LCBlKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgZHJhZ1VwID0g ZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgU25hcC51bm1vdXNlbW92ZShkcmFn TW92ZSkudW5tb3VzZXVwKGRyYWdVcCk7CisgICAgICAgIHZhciBpID0gZHJh Zy5sZW5ndGgsCisgICAgICAgICAgICBkcmFnaTsKKyAgICAgICAgd2hpbGUg KGktLSkgeworICAgICAgICAgICAgZHJhZ2kgPSBkcmFnW2ldOworICAgICAg ICAgICAgZHJhZ2kuZWwuX2RyYWcgPSB7fTsKKyAgICAgICAgICAgIGV2ZSgi c25hcC5kcmFnLmVuZC4iICsgZHJhZ2kuZWwuaWQsIGRyYWdpLmVuZF9zY29w ZSB8fCBkcmFnaS5zdGFydF9zY29wZSB8fCBkcmFnaS5tb3ZlX3Njb3BlIHx8 IGRyYWdpLmVsLCBlKTsKKyAgICAgICAgICAgIGV2ZS5vZmYoInNuYXAuZHJh Zy4qLiIgKyBkcmFnaS5lbC5pZCk7CisgICAgICAgIH0KKyAgICAgICAgZHJh ZyA9IFtdOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5jbGlj aworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIGNs aWNrIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5k bGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0g KG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LnVuY2xpY2sKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIFJlbW92ZXMgYSBjbGljayBldmVudCBoYW5kbGVyIGZyb20gdGhlIGVs ZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3Ig dGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8K KworICAgIC8qXAorICAgICAqIEVsZW1lbnQuZGJsY2xpY2sKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSBkb3VibGUgY2xpY2sg ZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIg KGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2Jq ZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1l bnQudW5kYmxjbGljaworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogUmVtb3ZlcyBhIGRvdWJsZSBjbGljayBldmVudCBoYW5kbGVyIGZyb20g dGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxl ciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAg ICBcKi8KKworICAgIC8qXAorICAgICAqIEVsZW1lbnQubW91c2Vkb3duCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgbW91c2Vk b3duIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5k bGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0g KG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LnVubW91c2Vkb3duCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZW1vdmVzIGEgbW91c2Vkb3duIGV2ZW50IGhhbmRsZXIgZnJv bSB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAor ICAgIFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC5tb3VzZW1vdmUK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSBtb3Vz ZW1vdmUgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhh bmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAg PSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAq IEVsZW1lbnQudW5tb3VzZW1vdmUKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIFJlbW92ZXMgYSBtb3VzZW1vdmUgZXZlbnQgaGFuZGxlciBm cm9tIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhh bmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50 CisgICAgXCovCisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm1vdXNlb3V0 CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgbW91 c2VvdXQgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhh bmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAg PSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAq IEVsZW1lbnQudW5tb3VzZW91dAorICAgICBbIG1ldGhvZCBdCisgICAgICoq CisgICAgICogUmVtb3ZlcyBhIG1vdXNlb3V0IGV2ZW50IGhhbmRsZXIgZnJv bSB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAor ICAgIFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC5tb3VzZW92ZXIK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSBtb3Vz ZW92ZXIgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhh bmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAg PSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAq IEVsZW1lbnQudW5tb3VzZW92ZXIKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIFJlbW92ZXMgYSBtb3VzZW92ZXIgZXZlbnQgaGFuZGxlciBm cm9tIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhh bmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50 CisgICAgXCovCisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm1vdXNldXAK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSBtb3Vz ZXVwIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5k bGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0g KG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LnVubW91c2V1cAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogUmVtb3ZlcyBhIG1vdXNldXAgZXZlbnQgaGFuZGxlciBmcm9tIHRo ZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIg Zm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAg XCovCisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnRvdWNoc3RhcnQKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSB0b3VjaHN0 YXJ0IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5k bGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0g KG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LnVudG91Y2hzdGFydAorICAgICBbIG1ldGhvZCBdCisgICAgICoq CisgICAgICogUmVtb3ZlcyBhIHRvdWNoc3RhcnQgZXZlbnQgaGFuZGxlciBm cm9tIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhh bmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50 CisgICAgXCovCisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnRvdWNobW92 ZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIHRv dWNobW92ZSBldmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0g aGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAg ICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAg ICogRWxlbWVudC51bnRvdWNobW92ZQorICAgICBbIG1ldGhvZCBdCisgICAg ICoqCisgICAgICogUmVtb3ZlcyBhIHRvdWNobW92ZSBldmVudCBoYW5kbGVy IGZyb20gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikg aGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1l bnQKKyAgICBcKi8KKworICAgIC8qXAorICAgICAqIEVsZW1lbnQudG91Y2hl bmQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSB0 b3VjaGVuZCBldmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0g aGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAg ICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAg ICogRWxlbWVudC51bnRvdWNoZW5kCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBSZW1vdmVzIGEgdG91Y2hlbmQgZXZlbnQgaGFuZGxlciBm cm9tIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhh bmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50 CisgICAgXCovCisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnRvdWNoY2Fu Y2VsCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEg dG91Y2hjYW5jZWwgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAg ICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQK KyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAor ICAgICAqIEVsZW1lbnQudW50b3VjaGNhbmNlbAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogUmVtb3ZlcyBhIHRvdWNoY2FuY2VsIGV2ZW50 IGhhbmRsZXIgZnJvbSB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1 bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0 KSBARWxlbWVudAorICAgIFwqLworICAgIGZvciAodmFyIGkgPSBldmVudHMu bGVuZ3RoOyBpLS07KSB7CisgICAgICAgIChmdW5jdGlvbiAoZXZlbnROYW1l KSB7CisgICAgICAgICAgICBTbmFwW2V2ZW50TmFtZV0gPSBlbHByb3RvW2V2 ZW50TmFtZV0gPSBmdW5jdGlvbiAoZm4sIHNjb3BlKSB7CisgICAgICAgICAg ICAgICAgaWYgKFNuYXAuaXMoZm4sICJmdW5jdGlvbiIpKSB7CisgICAgICAg ICAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gdGhpcy5ldmVudHMgfHwgW107 CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzLnB1c2goeworICAg ICAgICAgICAgICAgICAgICAgICAgbmFtZTogZXZlbnROYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgZjogZm4sCisgICAgICAgICAgICAgICAgICAg ICAgICB1bmJpbmQ6IGFkZEV2ZW50KHRoaXMubm9kZSB8fCBkb2N1bWVudCwg ZXZlbnROYW1lLCBmbiwgc2NvcGUgfHwgdGhpcykKKyAgICAgICAgICAgICAg ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5ldmVudHMu bGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKHRoaXMuZXZlbnRzW2ldLm5hbWUg PT0gZXZlbnROYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW2ld LmYuY2FsbCh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0 Y2ggKGUpIHt9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg ICAgICB9OworICAgICAgICAgICAgU25hcFsidW4iICsgZXZlbnROYW1lXSA9 CisgICAgICAgICAgICBlbHByb3RvWyJ1biIgKyBldmVudE5hbWVdID0gZnVu Y3Rpb24gKGZuKSB7CisgICAgICAgICAgICAgICAgdmFyIGV2ZW50cyA9IHRo aXMuZXZlbnRzIHx8IFtdLAorICAgICAgICAgICAgICAgICAgICBsID0gZXZl bnRzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB3aGlsZSAobC0tKSBpZiAo ZXZlbnRzW2xdLm5hbWUgPT0gZXZlbnROYW1lICYmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGV2ZW50c1tsXS5mID09IGZuIHx8ICFmbikp IHsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzW2xdLnVuYmluZCgpOwor ICAgICAgICAgICAgICAgICAgICBldmVudHMuc3BsaWNlKGwsIDEpOworICAg ICAgICAgICAgICAgICAgICAhZXZlbnRzLmxlbmd0aCAmJiBkZWxldGUgdGhp cy5ldmVudHM7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp czsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pKGV2ZW50c1tpXSk7Cisg ICAgfQorICAgIC8qXAorICAgICAqIEVsZW1lbnQuaG92ZXIKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgaG92ZXIgZXZlbnQgaGFu ZGxlcnMgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBmX2luIChmdW5jdGlvbikg aGFuZGxlciBmb3IgaG92ZXIgaW4KKyAgICAgLSBmX291dCAoZnVuY3Rpb24p IGhhbmRsZXIgZm9yIGhvdmVyIG91dAorICAgICAtIGljb250ZXh0IChvYmpl Y3QpICNvcHRpb25hbCBjb250ZXh0IGZvciBob3ZlciBpbiBoYW5kbGVyCisg ICAgIC0gb2NvbnRleHQgKG9iamVjdCkgI29wdGlvbmFsIGNvbnRleHQgZm9y IGhvdmVyIG91dCBoYW5kbGVyCisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQK KyAgICBcKi8KKyAgICBlbHByb3RvLmhvdmVyID0gZnVuY3Rpb24gKGZfaW4s IGZfb3V0LCBzY29wZV9pbiwgc2NvcGVfb3V0KSB7CisgICAgICAgIHJldHVy biB0aGlzLm1vdXNlb3ZlcihmX2luLCBzY29wZV9pbikubW91c2VvdXQoZl9v dXQsIHNjb3BlX291dCB8fCBzY29wZV9pbik7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBFbGVtZW50LnVuaG92ZXIKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFJlbW92ZXMgaG92ZXIgZXZlbnQgaGFuZGxlcnMgZnJv bSB0aGUgZWxlbWVudAorICAgICAtIGZfaW4gKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciBob3ZlciBpbgorICAgICAtIGZfb3V0IChmdW5jdGlvbikgaGFuZGxl ciBmb3IgaG92ZXIgb3V0CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAg ICBcKi8KKyAgICBlbHByb3RvLnVuaG92ZXIgPSBmdW5jdGlvbiAoZl9pbiwg Zl9vdXQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudW5tb3VzZW92ZXIoZl9p bikudW5tb3VzZW91dChmX291dCk7CisgICAgfTsKKyAgICB2YXIgZHJhZ2dh YmxlID0gW107CisgICAgLy8gU0lFUlJBIHVuY2xlYXIgd2hhdCBfY29udGV4 dF8gcmVmZXJzIHRvIGZvciBzdGFydGluZywgZW5kaW5nLCBtb3ZpbmcgdGhl IGRyYWcgZ2VzdHVyZS4KKyAgICAvLyBTSUVSUkEgRWxlbWVudC5kcmFnKCk6 IF94IHBvc2l0aW9uIG9mIHRoZSBtb3VzZV86IFdoZXJlIGFyZSB0aGUgeC95 IHZhbHVlcyBvZmZzZXQgZnJvbT8KKyAgICAvLyBTSUVSUkEgRWxlbWVudC5k cmFnKCk6IG11Y2ggb2YgdGhpcyBtZW1iZXIncyBkb2MgYXBwZWFycyB0byBi ZSBkdXBsaWNhdGVkIGZvciBzb21lIHJlYXNvbi4KKyAgICAvLyBTSUVSUkEg VW5jbGVhciBhYm91dCB0aGlzIHNlbnRlbmNlOiBfQWRkaXRpb25hbGx5IGZv bGxvd2luZyBkcmFnIGV2ZW50cyB3aWxsIGJlIHRyaWdnZXJlZDogZHJhZy5z dGFydC48aWQ+IG9uIHN0YXJ0LCBkcmFnLmVuZC48aWQ+IG9uIGVuZCBhbmQg ZHJhZy5tb3ZlLjxpZD4gb24gZXZlcnkgbW92ZS5fIElzIHRoZXJlIGEgZ2xv YmFsIF9kcmFnXyBvYmplY3QgdG8gd2hpY2ggeW91IGNhbiBhc3NpZ24gaGFu ZGxlcnMga2V5ZWQgYnkgYW4gZWxlbWVudCdzIElEPworICAgIC8qXAorICAg ICAqIEVsZW1lbnQuZHJhZworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgYW4gZWxlbWVudCdzIGRy YWcgZ2VzdHVyZQorICAgICAqKgorICAgICAtIG9ubW92ZSAoZnVuY3Rpb24p IGhhbmRsZXIgZm9yIG1vdmluZworICAgICAtIG9uc3RhcnQgKGZ1bmN0aW9u KSBoYW5kbGVyIGZvciBkcmFnIHN0YXJ0CisgICAgIC0gb25lbmQgKGZ1bmN0 aW9uKSBoYW5kbGVyIGZvciBkcmFnIGVuZAorICAgICAtIG1jb250ZXh0IChv YmplY3QpICNvcHRpb25hbCBjb250ZXh0IGZvciBtb3ZpbmcgaGFuZGxlcgor ICAgICAtIHNjb250ZXh0IChvYmplY3QpICNvcHRpb25hbCBjb250ZXh0IGZv ciBkcmFnIHN0YXJ0IGhhbmRsZXIKKyAgICAgLSBlY29udGV4dCAob2JqZWN0 KSAjb3B0aW9uYWwgY29udGV4dCBmb3IgZHJhZyBlbmQgaGFuZGxlcgorICAg ICAqIEFkZGl0aW9uYWx5IGZvbGxvd2luZyBgZHJhZ2AgZXZlbnRzIGFyZSB0 cmlnZ2VyZWQ6IGBkcmFnLnN0YXJ0LjxpZD5gIG9uIHN0YXJ0LAorICAgICAq IGBkcmFnLmVuZC48aWQ+YCBvbiBlbmQgYW5kIGBkcmFnLm1vdmUuPGlkPmAg b24gZXZlcnkgbW92ZS4gV2hlbiBlbGVtZW50IGlzIGRyYWdnZWQgb3ZlciBh bm90aGVyIGVsZW1lbnQKKyAgICAgKiBgZHJhZy5vdmVyLjxpZD5gIGZpcmVz IGFzIHdlbGwuCisgICAgICoKKyAgICAgKiBTdGFydCBldmVudCBhbmQgc3Rh cnQgaGFuZGxlciBhcmUgY2FsbGVkIGluIHNwZWNpZmllZCBjb250ZXh0IG9y IGluIGNvbnRleHQgb2YgdGhlIGVsZW1lbnQgd2l0aCBmb2xsb3dpbmcgcGFy YW1ldGVyczoKKyAgICAgbyB4IChudW1iZXIpIHggcG9zaXRpb24gb2YgdGhl IG1vdXNlCisgICAgIG8geSAobnVtYmVyKSB5IHBvc2l0aW9uIG9mIHRoZSBt b3VzZQorICAgICBvIGV2ZW50IChvYmplY3QpIERPTSBldmVudCBvYmplY3QK KyAgICAgKiBNb3ZlIGV2ZW50IGFuZCBtb3ZlIGhhbmRsZXIgYXJlIGNhbGxl ZCBpbiBzcGVjaWZpZWQgY29udGV4dCBvciBpbiBjb250ZXh0IG9mIHRoZSBl bGVtZW50IHdpdGggZm9sbG93aW5nIHBhcmFtZXRlcnM6CisgICAgIG8gZHgg KG51bWJlcikgc2hpZnQgYnkgeCBmcm9tIHRoZSBzdGFydCBwb2ludAorICAg ICBvIGR5IChudW1iZXIpIHNoaWZ0IGJ5IHkgZnJvbSB0aGUgc3RhcnQgcG9p bnQKKyAgICAgbyB4IChudW1iZXIpIHggcG9zaXRpb24gb2YgdGhlIG1vdXNl CisgICAgIG8geSAobnVtYmVyKSB5IHBvc2l0aW9uIG9mIHRoZSBtb3VzZQor ICAgICBvIGV2ZW50IChvYmplY3QpIERPTSBldmVudCBvYmplY3QKKyAgICAg KiBFbmQgZXZlbnQgYW5kIGVuZCBoYW5kbGVyIGFyZSBjYWxsZWQgaW4gc3Bl Y2lmaWVkIGNvbnRleHQgb3IgaW4gY29udGV4dCBvZiB0aGUgZWxlbWVudCB3 aXRoIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICAgICBvIGV2ZW50IChvYmpl Y3QpIERPTSBldmVudCBvYmplY3QKKyAgICAgPSAob2JqZWN0KSBARWxlbWVu dAorICAgIFwqLworICAgIGVscHJvdG8uZHJhZyA9IGZ1bmN0aW9uIChvbm1v dmUsIG9uc3RhcnQsIG9uZW5kLCBtb3ZlX3Njb3BlLCBzdGFydF9zY29wZSwg ZW5kX3Njb3BlKSB7CisgICAgICAgIHZhciBlbCA9IHRoaXM7CisgICAgICAg IGlmICghYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIG9y aWdUcmFuc2Zvcm07CisgICAgICAgICAgICByZXR1cm4gZWwuZHJhZyhmdW5j dGlvbiAoZHgsIGR5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5hdHRyKHsK KyAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBvcmlnVHJhbnNmb3Jt ICsgKG9yaWdUcmFuc2Zvcm0gPyAiVCIgOiAidCIpICsgW2R4LCBkeV0KKyAg ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgp IHsKKyAgICAgICAgICAgICAgICBvcmlnVHJhbnNmb3JtID0gdGhpcy50cmFu c2Zvcm0oKS5sb2NhbDsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg ICAgICAgIGZ1bmN0aW9uIHN0YXJ0KGUsIHgsIHkpIHsKKyAgICAgICAgICAg IChlLm9yaWdpbmFsRXZlbnQgfHwgZSkucHJldmVudERlZmF1bHQoKTsKKyAg ICAgICAgICAgIGVsLl9kcmFnLnggPSB4OworICAgICAgICAgICAgZWwuX2Ry YWcueSA9IHk7CisgICAgICAgICAgICBlbC5fZHJhZy5pZCA9IGUuaWRlbnRp ZmllcjsKKyAgICAgICAgICAgICFkcmFnLmxlbmd0aCAmJiBTbmFwLm1vdXNl bW92ZShkcmFnTW92ZSkubW91c2V1cChkcmFnVXApOworICAgICAgICAgICAg ZHJhZy5wdXNoKHtlbDogZWwsIG1vdmVfc2NvcGU6IG1vdmVfc2NvcGUsIHN0 YXJ0X3Njb3BlOiBzdGFydF9zY29wZSwgZW5kX3Njb3BlOiBlbmRfc2NvcGV9 KTsKKyAgICAgICAgICAgIG9uc3RhcnQgJiYgZXZlLm9uKCJzbmFwLmRyYWcu c3RhcnQuIiArIGVsLmlkLCBvbnN0YXJ0KTsKKyAgICAgICAgICAgIG9ubW92 ZSAmJiBldmUub24oInNuYXAuZHJhZy5tb3ZlLiIgKyBlbC5pZCwgb25tb3Zl KTsKKyAgICAgICAgICAgIG9uZW5kICYmIGV2ZS5vbigic25hcC5kcmFnLmVu ZC4iICsgZWwuaWQsIG9uZW5kKTsKKyAgICAgICAgICAgIGV2ZSgic25hcC5k cmFnLnN0YXJ0LiIgKyBlbC5pZCwgc3RhcnRfc2NvcGUgfHwgbW92ZV9zY29w ZSB8fCBlbCwgeCwgeSwgZSk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rp b24gaW5pdChlLCB4LCB5KSB7CisgICAgICAgICAgICBldmUoInNuYXAuZHJh Z2luaXQuIiArIGVsLmlkLCBlbCwgZSwgeCwgeSk7CisgICAgICAgIH0KKyAg ICAgICAgZXZlLm9uKCJzbmFwLmRyYWdpbml0LiIgKyBlbC5pZCwgc3RhcnQp OworICAgICAgICBlbC5fZHJhZyA9IHt9OworICAgICAgICBkcmFnZ2FibGUu cHVzaCh7ZWw6IGVsLCBzdGFydDogc3RhcnQsIGluaXQ6IGluaXR9KTsKKyAg ICAgICAgZWwubW91c2Vkb3duKGluaXQpOworICAgICAgICByZXR1cm4gZWw7 CisgICAgfTsKKyAgICAvKgorICAgICAqIEVsZW1lbnQub25EcmFnT3Zlcgor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2hvcnRjdXQgdG8g YXNzaWduIGV2ZW50IGhhbmRsZXIgZm9yIGBkcmFnLm92ZXIuPGlkPmAgZXZl bnQsIHdoZXJlIGBpZGAgaXMgdGhlIGVsZW1lbnQncyBgaWRgIChzZWUgQEVs ZW1lbnQuaWQpCisgICAgIC0gZiAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIGV2 ZW50LCBmaXJzdCBhcmd1bWVudCB3b3VsZCBiZSB0aGUgZWxlbWVudCB5b3Ug YXJlIGRyYWdnaW5nIG92ZXIKKyAgICBcKi8KKyAgICAvLyBlbHByb3RvLm9u RHJhZ092ZXIgPSBmdW5jdGlvbiAoZikgeworICAgIC8vICAgICBmID8gZXZl Lm9uKCJzbmFwLmRyYWcub3Zlci4iICsgdGhpcy5pZCwgZikgOiBldmUudW5i aW5kKCJzbmFwLmRyYWcub3Zlci4iICsgdGhpcy5pZCk7CisgICAgLy8gfTsK KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnVuZHJhZworICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBhbGwgZHJhZyBldmVudCBo YW5kbGVycyBmcm9tIHRoZSBnaXZlbiBlbGVtZW50CisgICAgXCovCisgICAg ZWxwcm90by51bmRyYWcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBp ID0gZHJhZ2dhYmxlLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGktLSkgaWYg KGRyYWdnYWJsZVtpXS5lbCA9PSB0aGlzKSB7CisgICAgICAgICAgICB0aGlz LnVubW91c2Vkb3duKGRyYWdnYWJsZVtpXS5pbml0KTsKKyAgICAgICAgICAg IGRyYWdnYWJsZS5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICBldmUudW5i aW5kKCJzbmFwLmRyYWcuKi4iICsgdGhpcy5pZCk7CisgICAgICAgICAgICBl dmUudW5iaW5kKCJzbmFwLmRyYWdpbml0LiIgKyB0aGlzLmlkKTsKKyAgICAg ICAgfQorICAgICAgICAhZHJhZ2dhYmxlLmxlbmd0aCAmJiBTbmFwLnVubW91 c2Vtb3ZlKGRyYWdNb3ZlKS51bm1vdXNldXAoZHJhZ1VwKTsKKyAgICAgICAg cmV0dXJuIHRoaXM7CisgICAgfTsKK30pOworCisvLyBDb3B5cmlnaHQgKGMp IDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3Ug bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp dGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg dGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcv bGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQg YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv ZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBX QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl eHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k CisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAucGx1 Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYikgewor ICAgIHZhciBlbHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUsCisgICAgICAg IHBwcm90byA9IFBhcGVyLnByb3RvdHlwZSwKKyAgICAgICAgcmd1cmwgPSAv XlxzKnVybFwoKC4rKVwpLywKKyAgICAgICAgU3RyID0gU3RyaW5nLAorICAg ICAgICAkID0gU25hcC5fLiQ7CisgICAgU25hcC5maWx0ZXIgPSB7fTsKKyAg ICAvKlwKKyAgICAgKiBQYXBlci5maWx0ZXIKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIENyZWF0ZXMgYSBgPGZpbHRlcj5gIGVsZW1lbnQK KyAgICAgKioKKyAgICAgLSBmaWxzdHIgKHN0cmluZykgU1ZHIGZyYWdtZW50 IG9mIGZpbHRlciBwcm92aWRlZCBhcyBhIHN0cmluZworICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgICogTm90ZTogSXQgaXMgcmVjb21tZW5kZWQg dG8gdXNlIGZpbHRlcnMgZW1iZWRkZWQgaW50byB0aGUgcGFnZSBpbnNpZGUg YW4gZW1wdHkgU1ZHIGVsZW1lbnQuCisgICAgID4gVXNhZ2UKKyAgICAgfCB2 YXIgZiA9IHBhcGVyLmZpbHRlcignPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlh dGlvbj0iMiIvPicpLAorICAgICB8ICAgICBjID0gcGFwZXIuY2lyY2xlKDEw LCAxMCwgMTApLmF0dHIoeworICAgICB8ICAgICAgICAgZmlsdGVyOiBmCisg ICAgIHwgICAgIH0pOworICAgIFwqLworICAgIHBwcm90by5maWx0ZXIgPSBm dW5jdGlvbiAoZmlsc3RyKSB7CisgICAgICAgIHZhciBwYXBlciA9IHRoaXM7 CisgICAgICAgIGlmIChwYXBlci50eXBlICE9ICJzdmciKSB7CisgICAgICAg ICAgICBwYXBlciA9IHBhcGVyLnBhcGVyOworICAgICAgICB9CisgICAgICAg IHZhciBmID0gU25hcC5wYXJzZShTdHIoZmlsc3RyKSksCisgICAgICAgICAg ICBpZCA9IFNuYXAuXy5pZCgpLAorICAgICAgICAgICAgd2lkdGggPSBwYXBl ci5ub2RlLm9mZnNldFdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0ID0gcGFw ZXIubm9kZS5vZmZzZXRIZWlnaHQsCisgICAgICAgICAgICBmaWx0ZXIgPSAk KCJmaWx0ZXIiKTsKKyAgICAgICAgJChmaWx0ZXIsIHsKKyAgICAgICAgICAg IGlkOiBpZCwKKyAgICAgICAgICAgIGZpbHRlclVuaXRzOiAidXNlclNwYWNl T25Vc2UiCisgICAgICAgIH0pOworICAgICAgICBmaWx0ZXIuYXBwZW5kQ2hp bGQoZi5ub2RlKTsKKyAgICAgICAgcGFwZXIuZGVmcy5hcHBlbmRDaGlsZChm aWx0ZXIpOworICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnQoZmlsdGVyKTsK KyAgICB9OworCisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5maWx0 ZXIiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAg ICAgIHZhciBwID0gJCh0aGlzLm5vZGUsICJmaWx0ZXIiKTsKKyAgICAgICAg aWYgKHApIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IFN0cihwKS5tYXRj aChyZ3VybCk7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2ggJiYgU25hcC5z ZWxlY3QobWF0Y2hbMV0pOworICAgICAgICB9CisgICAgfSk7CisgICAgZXZl Lm9uKCJzbmFwLnV0aWwuYXR0ci5maWx0ZXIiLCBmdW5jdGlvbiAodmFsdWUp IHsKKyAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCAmJiB2 YWx1ZS50eXBlID09ICJmaWx0ZXIiKSB7CisgICAgICAgICAgICBldmUuc3Rv cCgpOworICAgICAgICAgICAgdmFyIGlkID0gdmFsdWUubm9kZS5pZDsKKyAg ICAgICAgICAgIGlmICghaWQpIHsKKyAgICAgICAgICAgICAgICAkKHZhbHVl Lm5vZGUsIHtpZDogdmFsdWUuaWR9KTsKKyAgICAgICAgICAgICAgICBpZCA9 IHZhbHVlLmlkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCh0aGlz Lm5vZGUsIHsKKyAgICAgICAgICAgICAgICBmaWx0ZXI6IFNuYXAudXJsKGlk KQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF2 YWx1ZSB8fCB2YWx1ZSA9PSAibm9uZSIpIHsKKyAgICAgICAgICAgIGV2ZS5z dG9wKCk7CisgICAgICAgICAgICB0aGlzLm5vZGUucmVtb3ZlQXR0cmlidXRl KCJmaWx0ZXIiKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIC8qXAorICAg ICAqIFNuYXAuZmlsdGVyLmJsdXIKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIFJldHVybnMgYW4gU1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRo ZSBibHVyIGZpbHRlcgorICAgICAqKgorICAgICAtIHggKG51bWJlcikgYW1v dW50IG9mIGhvcml6b250YWwgYmx1ciwgaW4gcGl4ZWxzCisgICAgIC0geSAo bnVtYmVyKSAjb3B0aW9uYWwgYW1vdW50IG9mIHZlcnRpY2FsIGJsdXIsIGlu IHBpeGVscworICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlv bgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIGYgPSBwYXBlci5maWx0ZXIo U25hcC5maWx0ZXIuYmx1cig1LCAxMCkpLAorICAgICB8ICAgICBjID0gcGFw ZXIuY2lyY2xlKDEwLCAxMCwgMTApLmF0dHIoeworICAgICB8ICAgICAgICAg ZmlsdGVyOiBmCisgICAgIHwgICAgIH0pOworICAgIFwqLworICAgIFNuYXAu ZmlsdGVyLmJsdXIgPSBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICBpZiAo eCA9PSBudWxsKSB7CisgICAgICAgICAgICB4ID0gMjsKKyAgICAgICAgfQor ICAgICAgICB2YXIgZGVmID0geSA9PSBudWxsID8geCA6IFt4LCB5XTsKKyAg ICAgICAgcmV0dXJuIFNuYXAuZm9ybWF0KCdcPGZlR2F1c3NpYW5CbHVyIHN0 ZERldmlhdGlvbj0ie2RlZn0iLz4nLCB7CisgICAgICAgICAgICBkZWY6IGRl ZgorICAgICAgICB9KTsKKyAgICB9OworICAgIFNuYXAuZmlsdGVyLmJsdXIu dG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz KCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRlci5zaGFk b3cKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMg YW4gU1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBzaGFkb3cgZmlsdGVyCisg ICAgICoqCisgICAgIC0gZHggKG51bWJlcikgI29wdGlvbmFsIGhvcml6b250 YWwgc2hpZnQgb2YgdGhlIHNoYWRvdywgaW4gcGl4ZWxzCisgICAgIC0gZHkg KG51bWJlcikgI29wdGlvbmFsIHZlcnRpY2FsIHNoaWZ0IG9mIHRoZSBzaGFk b3csIGluIHBpeGVscworICAgICAtIGJsdXIgKG51bWJlcikgI29wdGlvbmFs IGFtb3VudCBvZiBibHVyCisgICAgIC0gY29sb3IgKHN0cmluZykgI29wdGlv bmFsIGNvbG9yIG9mIHRoZSBzaGFkb3cKKyAgICAgLSBvcGFjaXR5IChudW1i ZXIpICNvcHRpb25hbCBgMC4uMWAgb3BhY2l0eSBvZiB0aGUgc2hhZG93Cisg ICAgICogb3IKKyAgICAgLSBkeCAobnVtYmVyKSAjb3B0aW9uYWwgaG9yaXpv bnRhbCBzaGlmdCBvZiB0aGUgc2hhZG93LCBpbiBwaXhlbHMKKyAgICAgLSBk eSAobnVtYmVyKSAjb3B0aW9uYWwgdmVydGljYWwgc2hpZnQgb2YgdGhlIHNo YWRvdywgaW4gcGl4ZWxzCisgICAgIC0gY29sb3IgKHN0cmluZykgI29wdGlv bmFsIGNvbG9yIG9mIHRoZSBzaGFkb3cKKyAgICAgLSBvcGFjaXR5IChudW1i ZXIpICNvcHRpb25hbCBgMC4uMWAgb3BhY2l0eSBvZiB0aGUgc2hhZG93Cisg ICAgICogd2hpY2ggbWFrZXMgYmx1ciBkZWZhdWx0IHRvIGA0YC4gT3IKKyAg ICAgLSBkeCAobnVtYmVyKSAjb3B0aW9uYWwgaG9yaXpvbnRhbCBzaGlmdCBv ZiB0aGUgc2hhZG93LCBpbiBwaXhlbHMKKyAgICAgLSBkeSAobnVtYmVyKSAj b3B0aW9uYWwgdmVydGljYWwgc2hpZnQgb2YgdGhlIHNoYWRvdywgaW4gcGl4 ZWxzCisgICAgIC0gb3BhY2l0eSAobnVtYmVyKSAjb3B0aW9uYWwgYDAuLjFg IG9wYWNpdHkgb2YgdGhlIHNoYWRvdworICAgICA9IChzdHJpbmcpIGZpbHRl ciByZXByZXNlbnRhdGlvbgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIGYg PSBwYXBlci5maWx0ZXIoU25hcC5maWx0ZXIuc2hhZG93KDAsIDIsIDMpKSwK KyAgICAgfCAgICAgYyA9IHBhcGVyLmNpcmNsZSgxMCwgMTAsIDEwKS5hdHRy KHsKKyAgICAgfCAgICAgICAgIGZpbHRlcjogZgorICAgICB8ICAgICB9KTsK KyAgICBcKi8KKyAgICBTbmFwLmZpbHRlci5zaGFkb3cgPSBmdW5jdGlvbiAo ZHgsIGR5LCBibHVyLCBjb2xvciwgb3BhY2l0eSkgeworICAgICAgICBpZiAo dHlwZW9mIGJsdXIgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIGNvbG9y ID0gYmx1cjsKKyAgICAgICAgICAgIG9wYWNpdHkgPSBjb2xvcjsKKyAgICAg ICAgICAgIGJsdXIgPSA0OworICAgICAgICB9CisgICAgICAgIGlmICh0eXBl b2YgY29sb3IgIT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIG9wYWNpdHkg PSBjb2xvcjsKKyAgICAgICAgICAgIGNvbG9yID0gIiMwMDAiOworICAgICAg ICB9CisgICAgICAgIGNvbG9yID0gY29sb3IgfHwgIiMwMDAiOworICAgICAg ICBpZiAoYmx1ciA9PSBudWxsKSB7CisgICAgICAgICAgICBibHVyID0gNDsK KyAgICAgICAgfQorICAgICAgICBpZiAob3BhY2l0eSA9PSBudWxsKSB7Cisg ICAgICAgICAgICBvcGFjaXR5ID0gMTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoZHggPT0gbnVsbCkgeworICAgICAgICAgICAgZHggPSAwOworICAgICAg ICAgICAgZHkgPSAyOworICAgICAgICB9CisgICAgICAgIGlmIChkeSA9PSBu dWxsKSB7CisgICAgICAgICAgICBkeSA9IGR4OworICAgICAgICB9CisgICAg ICAgIGNvbG9yID0gU25hcC5jb2xvcihjb2xvcik7CisgICAgICAgIHJldHVy biBTbmFwLmZvcm1hdCgnPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBo YSIgc3RkRGV2aWF0aW9uPSJ7Ymx1cn0iLz48ZmVPZmZzZXQgZHg9IntkeH0i IGR5PSJ7ZHl9IiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVGbG9vZCBmbG9v ZC1jb2xvcj0ie2NvbG9yfSIvPjxmZUNvbXBvc2l0ZSBpbjI9Im9mZnNldGJs dXIiIG9wZXJhdG9yPSJpbiIvPjxmZUNvbXBvbmVudFRyYW5zZmVyPjxmZUZ1 bmNBIHR5cGU9ImxpbmVhciIgc2xvcGU9IntvcGFjaXR5fSIvPjwvZmVDb21w b25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdl Tm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT4nLCB7CisgICAg ICAgICAgICBjb2xvcjogY29sb3IsCisgICAgICAgICAgICBkeDogZHgsCisg ICAgICAgICAgICBkeTogZHksCisgICAgICAgICAgICBibHVyOiBibHVyLAor ICAgICAgICAgICAgb3BhY2l0eTogb3BhY2l0eQorICAgICAgICB9KTsKKyAg ICB9OworICAgIFNuYXAuZmlsdGVyLnNoYWRvdy50b1N0cmluZyA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworICAg IC8qXAorICAgICAqIFNuYXAuZmlsdGVyLmdyYXlzY2FsZQorICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3Vw IHN0cmluZyBmb3IgdGhlIGdyYXlzY2FsZSBmaWx0ZXIKKyAgICAgKioKKyAg ICAgLSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRlciAoYDAuLjFg KQorICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlvbgorICAg IFwqLworICAgIFNuYXAuZmlsdGVyLmdyYXlzY2FsZSA9IGZ1bmN0aW9uIChh bW91bnQpIHsKKyAgICAgICAgaWYgKGFtb3VudCA9PSBudWxsKSB7CisgICAg ICAgICAgICBhbW91bnQgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVy biBTbmFwLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2 YWx1ZXM9InthfSB7Yn0ge2N9IDAgMCB7ZH0ge2V9IHtmfSAwIDAge2d9IHti fSB7aH0gMCAwIDAgMCAwIDEgMCIvPicsIHsKKyAgICAgICAgICAgIGE6IDAu MjEyNiArIDAuNzg3NCAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAgIGI6 IDAuNzE1MiAtIDAuNzE1MiAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAg IGM6IDAuMDcyMiAtIDAuMDcyMiAqICgxIC0gYW1vdW50KSwKKyAgICAgICAg ICAgIGQ6IDAuMjEyNiAtIDAuMjEyNiAqICgxIC0gYW1vdW50KSwKKyAgICAg ICAgICAgIGU6IDAuNzE1MiArIDAuMjg0OCAqICgxIC0gYW1vdW50KSwKKyAg ICAgICAgICAgIGY6IDAuMDcyMiAtIDAuMDcyMiAqICgxIC0gYW1vdW50KSwK KyAgICAgICAgICAgIGc6IDAuMjEyNiAtIDAuMjEyNiAqICgxIC0gYW1vdW50 KSwKKyAgICAgICAgICAgIGg6IDAuMDcyMiArIDAuOTI3OCAqICgxIC0gYW1v dW50KQorICAgICAgICB9KTsKKyAgICB9OworICAgIFNuYXAuZmlsdGVyLmdy YXlzY2FsZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0 dXJuIHRoaXMoKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFNuYXAuZmls dGVyLnNlcGlhCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBS ZXR1cm5zIGFuIFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgc2VwaWEgZmls dGVyCisgICAgICoqCisgICAgIC0gYW1vdW50IChudW1iZXIpIGFtb3VudCBv ZiBmaWx0ZXIgKGAwLi4xYCkKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVw cmVzZW50YXRpb24KKyAgICBcKi8KKyAgICBTbmFwLmZpbHRlci5zZXBpYSA9 IGZ1bmN0aW9uIChhbW91bnQpIHsKKyAgICAgICAgaWYgKGFtb3VudCA9PSBu dWxsKSB7CisgICAgICAgICAgICBhbW91bnQgPSAxOworICAgICAgICB9Cisg ICAgICAgIHJldHVybiBTbmFwLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlw ZT0ibWF0cml4IiB2YWx1ZXM9InthfSB7Yn0ge2N9IDAgMCB7ZH0ge2V9IHtm fSAwIDAge2d9IHtofSB7aX0gMCAwIDAgMCAwIDEgMCIvPicsIHsKKyAgICAg ICAgICAgIGE6IDAuMzkzICsgMC42MDcgKiAoMSAtIGFtb3VudCksCisgICAg ICAgICAgICBiOiAwLjc2OSAtIDAuNzY5ICogKDEgLSBhbW91bnQpLAorICAg ICAgICAgICAgYzogMC4xODkgLSAwLjE4OSAqICgxIC0gYW1vdW50KSwKKyAg ICAgICAgICAgIGQ6IDAuMzQ5IC0gMC4zNDkgKiAoMSAtIGFtb3VudCksCisg ICAgICAgICAgICBlOiAwLjY4NiArIDAuMzE0ICogKDEgLSBhbW91bnQpLAor ICAgICAgICAgICAgZjogMC4xNjggLSAwLjE2OCAqICgxIC0gYW1vdW50KSwK KyAgICAgICAgICAgIGc6IDAuMjcyIC0gMC4yNzIgKiAoMSAtIGFtb3VudCks CisgICAgICAgICAgICBoOiAwLjUzNCAtIDAuNTM0ICogKDEgLSBhbW91bnQp LAorICAgICAgICAgICAgaTogMC4xMzEgKyAwLjg2OSAqICgxIC0gYW1vdW50 KQorICAgICAgICB9KTsKKyAgICB9OworICAgIFNuYXAuZmlsdGVyLnNlcGlh LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp cygpOworICAgIH07CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuc2F0 dXJhdGUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVy bnMgYW4gU1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBzYXR1cmF0ZSBmaWx0 ZXIKKyAgICAgKioKKyAgICAgLSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9m IGZpbHRlciAoYDAuLjFgKQorICAgICA9IChzdHJpbmcpIGZpbHRlciByZXBy ZXNlbnRhdGlvbgorICAgIFwqLworICAgIFNuYXAuZmlsdGVyLnNhdHVyYXRl ID0gZnVuY3Rpb24gKGFtb3VudCkgeworICAgICAgICBpZiAoYW1vdW50ID09 IG51bGwpIHsKKyAgICAgICAgICAgIGFtb3VudCA9IDE7CisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb2xvck1hdHJpeCB0 eXBlPSJzYXR1cmF0ZSIgdmFsdWVzPSJ7YW1vdW50fSIvPicsIHsKKyAgICAg ICAgICAgIGFtb3VudDogMSAtIGFtb3VudAorICAgICAgICB9KTsKKyAgICB9 OworICAgIFNuYXAuZmlsdGVyLnNhdHVyYXRlLnRvU3RyaW5nID0gZnVuY3Rp b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOworICAgIH07CisgICAg LypcCisgICAgICogU25hcC5maWx0ZXIuaHVlUm90YXRlCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIFNWRyBtYXJrdXAg c3RyaW5nIGZvciB0aGUgaHVlLXJvdGF0ZSBmaWx0ZXIKKyAgICAgKioKKyAg ICAgLSBhbmdsZSAobnVtYmVyKSBhbmdsZSBvZiByb3RhdGlvbgorICAgICA9 IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlvbgorICAgIFwqLworICAg IFNuYXAuZmlsdGVyLmh1ZVJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSkgewor ICAgICAgICBhbmdsZSA9IGFuZ2xlIHx8IDA7CisgICAgICAgIHJldHVybiBT bmFwLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0iaHVlUm90YXRlIiB2 YWx1ZXM9InthbmdsZX0iLz4nLCB7CisgICAgICAgICAgICBhbmdsZTogYW5n bGUKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5odWVS b3RhdGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy biB0aGlzKCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRl ci5pbnZlcnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJl dHVybnMgYW4gU1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBpbnZlcnQgZmls dGVyCisgICAgICoqCisgICAgIC0gYW1vdW50IChudW1iZXIpIGFtb3VudCBv ZiBmaWx0ZXIgKGAwLi4xYCkKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVw cmVzZW50YXRpb24KKyAgICBcKi8KKyAgICBTbmFwLmZpbHRlci5pbnZlcnQg PSBmdW5jdGlvbiAoYW1vdW50KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0g bnVsbCkgeworICAgICAgICAgICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQor Ly8gICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVz PSItMSAwIDAgMCAxICAwIC0xIDAgMCAxICAwIDAgLTEgMCAxICAwIDAgMCAx IDAiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIvPgorICAg ICAgICByZXR1cm4gU25hcC5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5zZmVy PjxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0ie2Ftb3VudH0g e2Ftb3VudDJ9Ii8+PGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVz PSJ7YW1vdW50fSB7YW1vdW50Mn0iLz48ZmVGdW5jQiB0eXBlPSJ0YWJsZSIg dGFibGVWYWx1ZXM9InthbW91bnR9IHthbW91bnQyfSIvPjwvZmVDb21wb25l bnRUcmFuc2Zlcj4nLCB7CisgICAgICAgICAgICBhbW91bnQ6IGFtb3VudCwK KyAgICAgICAgICAgIGFtb3VudDI6IDEgLSBhbW91bnQKKyAgICAgICAgfSk7 CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5pbnZlcnQudG9TdHJpbmcgPSBm dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzKCk7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRlci5icmlnaHRuZXNzCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIFNWRyBt YXJrdXAgc3RyaW5nIGZvciB0aGUgYnJpZ2h0bmVzcyBmaWx0ZXIKKyAgICAg KioKKyAgICAgLSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRlciAo YDAuLjFgKQorICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlv bgorICAgIFwqLworICAgIFNuYXAuZmlsdGVyLmJyaWdodG5lc3MgPSBmdW5j dGlvbiAoYW1vdW50KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkg eworICAgICAgICAgICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gU25hcC5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5zZmVyPjxm ZUZ1bmNSIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9Ii8+PGZlRnVu Y0cgdHlwZT0ibGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iLz48ZmVGdW5jQiB0 eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIvPjwvZmVDb21wb25lbnRU cmFuc2Zlcj4nLCB7CisgICAgICAgICAgICBhbW91bnQ6IGFtb3VudAorICAg ICAgICB9KTsKKyAgICB9OworICAgIFNuYXAuZmlsdGVyLmJyaWdodG5lc3Mu dG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz KCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRlci5jb250 cmFzdAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJu cyBhbiBTVkcgbWFya3VwIHN0cmluZyBmb3IgdGhlIGNvbnRyYXN0IGZpbHRl cgorICAgICAqKgorICAgICAtIGFtb3VudCAobnVtYmVyKSBhbW91bnQgb2Yg ZmlsdGVyIChgMC4uMWApCisgICAgID0gKHN0cmluZykgZmlsdGVyIHJlcHJl c2VudGF0aW9uCisgICAgXCovCisgICAgU25hcC5maWx0ZXIuY29udHJhc3Qg PSBmdW5jdGlvbiAoYW1vdW50KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0g bnVsbCkgeworICAgICAgICAgICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gU25hcC5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5z ZmVyPjxmZUZ1bmNSIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9IiBp bnRlcmNlcHQ9InthbW91bnQyfSIvPjxmZUZ1bmNHIHR5cGU9ImxpbmVhciIg c2xvcGU9InthbW91bnR9IiBpbnRlcmNlcHQ9InthbW91bnQyfSIvPjxmZUZ1 bmNCIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNlcHQ9 InthbW91bnQyfSIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj4nLCB7CisgICAg ICAgICAgICBhbW91bnQ6IGFtb3VudCwKKyAgICAgICAgICAgIGFtb3VudDI6 IC41IC0gYW1vdW50IC8gMgorICAgICAgICB9KTsKKyAgICB9OworICAgIFNu YXAuZmlsdGVyLmNvbnRyYXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewor ICAgICAgICByZXR1cm4gdGhpcygpOworICAgIH07Cit9KTsKKworLy8gQ29w eXJpZ2h0IChjKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBB bGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRo ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp OworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4g YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5h cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNz IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3 cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8v IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNl bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p c3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu CitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIs IGdsb2IsIEZyYWdtZW50KSB7CisgICAgdmFyIGJveCA9IFNuYXAuXy5ib3gs CisgICAgICAgIGlzID0gU25hcC5pcywKKyAgICAgICAgZmlyc3RMZXR0ZXIg PSAvXlteYS16XSooW3RibWxyY10pL2ksCisgICAgICAgIHRvU3RyaW5nID0g ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuICJUIiArIHRoaXMu ZHggKyAiLCIgKyB0aGlzLmR5OworICAgICAgICB9OworICAgIC8qXAorICAg ICAqIEVsZW1lbnQuZ2V0QWxpZ24KKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIFJldHVybnMgc2hpZnQgbmVlZGVkIHRvIGFsaWduIHRoZSBl bGVtZW50IHJlbGF0aXZlbHkgdG8gZ2l2ZW4gZWxlbWVudC4KKyAgICAgKiBJ ZiBubyBlbGVtZW50cyBzcGVjaWZpZWQsIHBhcmVudCBgPHN2Zz5gIGNvbnRh aW5lciB3aWxsIGJlIHVzZWQuCisgICAgIC0gZWwgKG9iamVjdCkgQG9wdGlv bmFsIGFsaWdubWVudCBlbGVtZW50CisgICAgIC0gd2F5IChzdHJpbmcpIG9u ZSBvZiBzaXggdmFsdWVzOiBgInRvcCJgLCBgIm1pZGRsZSJgLCBgImJvdHRv bSJgLCBgImxlZnQiYCwgYCJjZW50ZXIiYCwgYCJyaWdodCJgCisgICAgID0g KG9iamVjdHxzdHJpbmcpIE9iamVjdCBpbiBmb3JtYXQgYHtkeDogLCBkeTog fWAgYWxzbyBoYXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMgYSB0cmFu c2Zvcm1hdGlvbiBzdHJpbmcKKyAgICAgPiBVc2FnZQorICAgICB8IGVsLnRy YW5zZm9ybShlbC5nZXRBbGlnbihlbDIsICJ0b3AiKSk7CisgICAgICogb3IK KyAgICAgfCB2YXIgZHkgPSBlbC5nZXRBbGlnbihlbDIsICJ0b3AiKS5keTsK KyAgICBcKi8KKyAgICBFbGVtZW50LnByb3RvdHlwZS5nZXRBbGlnbiA9IGZ1 bmN0aW9uIChlbCwgd2F5KSB7CisgICAgICAgIGlmICh3YXkgPT0gbnVsbCAm JiBpcyhlbCwgInN0cmluZyIpKSB7CisgICAgICAgICAgICB3YXkgPSBlbDsK KyAgICAgICAgICAgIGVsID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBl bCA9IGVsIHx8IHRoaXMucGFwZXI7CisgICAgICAgIHZhciBieCA9IGVsLmdl dEJCb3ggPyBlbC5nZXRCQm94KCkgOiBib3goZWwpLAorICAgICAgICAgICAg YmIgPSB0aGlzLmdldEJCb3goKSwKKyAgICAgICAgICAgIG91dCA9IHt9Owor ICAgICAgICB3YXkgPSB3YXkgJiYgd2F5Lm1hdGNoKGZpcnN0TGV0dGVyKTsK KyAgICAgICAgd2F5ID0gd2F5ID8gd2F5WzFdLnRvTG93ZXJDYXNlKCkgOiAi YyI7CisgICAgICAgIHN3aXRjaCAod2F5KSB7CisgICAgICAgICAgICBjYXNl ICJ0IjoKKyAgICAgICAgICAgICAgICBvdXQuZHggPSAwOworICAgICAgICAg ICAgICAgIG91dC5keSA9IGJ4LnkgLSBiYi55OworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBjYXNlICJiIjoKKyAgICAgICAgICAgICAgICBv dXQuZHggPSAwOworICAgICAgICAgICAgICAgIG91dC5keSA9IGJ4LnkyIC0g YmIueTI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug Im0iOgorICAgICAgICAgICAgICAgIG91dC5keCA9IDA7CisgICAgICAgICAg ICAgICAgb3V0LmR5ID0gYnguY3kgLSBiYi5jeTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgY2FzZSAibCI6CisgICAgICAgICAgICAgICAg b3V0LmR4ID0gYngueCAtIGJiLng7CisgICAgICAgICAgICAgICAgb3V0LmR5 ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAi ciI6CisgICAgICAgICAgICAgICAgb3V0LmR4ID0gYngueDIgLSBiYi54MjsK KyAgICAgICAgICAgICAgICBvdXQuZHkgPSAwOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG91 dC5keCA9IGJ4LmN4IC0gYmIuY3g7CisgICAgICAgICAgICAgICAgb3V0LmR5 ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg IG91dC50b1N0cmluZyA9IHRvU3RyaW5nOworICAgICAgICByZXR1cm4gb3V0 OworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5hbGlnbgorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWxpZ25zIHRoZSBlbGVt ZW50IHJlbGF0aXZlbHkgdG8gZ2l2ZW4gb25lIHZpYSB0cmFuc2Zvcm1hdGlv bi4KKyAgICAgKiBJZiBubyBlbGVtZW50cyBzcGVjaWZpZWQsIHBhcmVudCBg PHN2Zz5gIGNvbnRhaW5lciB3aWxsIGJlIHVzZWQuCisgICAgIC0gZWwgKG9i amVjdCkgQG9wdGlvbmFsIGFsaWdubWVudCBlbGVtZW50CisgICAgIC0gd2F5 IChzdHJpbmcpIG9uZSBvZiBzaXggdmFsdWVzOiBgInRvcCJgLCBgIm1pZGRs ZSJgLCBgImJvdHRvbSJgLCBgImxlZnQiYCwgYCJjZW50ZXIiYCwgYCJyaWdo dCJgCisgICAgID0gKG9iamVjdCkgdGhpcyBlbGVtZW50CisgICAgID4gVXNh Z2UKKyAgICAgfCBlbC5hbGlnbihlbDIsICJ0b3AiKTsKKyAgICAgKiBvcgor ICAgICB8IGVsLmFsaWduKCJtaWRkbGUiKTsKKyAgICBcKi8KKyAgICBFbGVt ZW50LnByb3RvdHlwZS5hbGlnbiA9IGZ1bmN0aW9uIChlbCwgd2F5KSB7Cisg ICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSgiLi4uIiArIHRoaXMuZ2V0 QWxpZ24oZWwsIHdheSkpOworICAgIH07Cit9KTsKKworcmV0dXJuIFNuYXA7 Cit9KSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3RlbXBsYXRl cy9kZW1vX2V4cGxhaW4uaHRtbCBiL3dlYi9wZ2FkbWluL21pc2MvdGVtcGxh dGVzL2RlbW9fZXhwbGFpbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjk5YjQ5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIv cGdhZG1pbi9taXNjL3RlbXBsYXRlcy9kZW1vX2V4cGxhaW4uaHRtbApAQCAt MCwwICsxLDE4MzYgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3sl IGJsb2NrIHRpdGxlICV9e3sgY29uZmlnLkFQUF9OQU1FIH19eyUgZW5kYmxv Y2sgJX0KK3slIGJsb2NrIGluaXRfc2NyaXB0ICV9Cit0cnkgeworICByZXF1 aXJlKAorICAgIFsncGdhZG1pbicsICdwZ2FkbWluLm1pc2MuZXhwbGFpbidd LAorICAgIGZ1bmN0aW9uKHBnQWRtaW4sIHBnRXhwbGFpbikgewordmFyIGRh dGEgPSBbCisgIHsKKyAgICAiUGxhbiI6IHsKKyAgICAgICJOb2RlIFR5cGUi OiAiQXBwZW5kIiwKKyAgICAgICJTdGFydHVwIENvc3QiOiAzMTQuNTgsCisg ICAgICAiVG90YWwgQ29zdCI6IDU0MzEuMzYsCisgICAgICAiUGxhbiBSb3dz IjogMTU3MTAsCisgICAgICAiUGxhbiBXaWR0aCI6IDI4NywKKyAgICAgICJQ bGFucyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJOb2RlIFR5cGUiOiAi SGFzaCBKb2luIiwKKyAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJNZW1iZXIiLAorICAgICAgICAgICJKb2luIFR5cGUiOiAiUmlnaHQiLAor ICAgICAgICAgICJTdGFydHVwIENvc3QiOiAzMTQuNTgsCisgICAgICAgICAg IlRvdGFsIENvc3QiOiA0MDguNTIsCisgICAgICAgICAgIlBsYW4gUm93cyI6 IDM2NTUsCisgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNDQsCisgICAgICAg ICAgIkhhc2ggQ29uZCI6ICIoKGMucHJvYmVfaWQgPSBwLmlkKSBBTkQgKGMu YWdlbnRfaWQgPSBhLmlkKSkiLAorICAgICAgICAgICJQbGFucyI6IFsKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEg U2NhbiIsCisgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjog Ik91dGVyIiwKKyAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJv YmVfY29uZmlnX2FnZW50IiwKKyAgICAgICAgICAgICAgIkFsaWFzIjogImMi LAorICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAg ICAgICAgICAgIlRvdGFsIENvc3QiOiAyNy4zMCwKKyAgICAgICAgICAgICAg IlBsYW4gUm93cyI6IDE3MzAsCisgICAgICAgICAgICAgICJQbGFuIFdpZHRo IjogMTcKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICJOb2RlIFR5cGUiOiAiSGFzaCIsCisgICAgICAgICAgICAgICJQ YXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDI1OS43NiwKKyAgICAgICAgICAgICAgIlRvdGFs IENvc3QiOiAyNTkuNzYsCisgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAz NjU1LAorICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDMzNSwKKyAgICAg ICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIi LAorICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisg ICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAg ICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMjU5Ljc2LAorICAgICAgICAg ICAgICAgICAgIlBsYW4gUm93cyI6IDM2NTUsCisgICAgICAgICAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDMzNSwKKyAgICAgICAgICAgICAgICAgICJKb2lu IEZpbHRlciI6ICIoKChwLmFnZW50X2NhcGFiaWxpdHkgSVMgTlVMTCkgT1Ig KHAuYWdlbnRfY2FwYWJpbGl0eSA9IEFOWSAoYS5hZ2VudF9jYXBhYmlsaXR5 X2xpc3QpKSkgQU5EICgocC5jb2xsZWN0aW9uX21ldGhvZCA8PiBBTEwgKCd7 Yix3fSc6OmJwY2hhcltdKSkgT1IgKChwLmNvbGxlY3Rpb25fbWV0aG9kID0g J2InOjpicGNoYXIpIEFORCAoYS5hZ2VudF9jYXBhYmlsaXR5X2xpc3QgQD4g J3thbGxvd19iYXRjaF9wcm9iZXN9Jzo6dGV4dFtdKSBBTkQgKChzdHJwb3Mo YS5wbGF0Zm9ybSwgcC5wbGF0Zm9ybSkgPD4gMCkgT1IgKChhLnBsYXRmb3Jt ICF+ICd3aW5kb3dzJzo6dGV4dCkgQU5EIChwLnBsYXRmb3JtID0gJ3VuaXgn Ojp0ZXh0KSkpKSBPUiAoKHAuY29sbGVjdGlvbl9tZXRob2QgPSAndyc6OmJw Y2hhcikgQU5EIChzdHJwb3MoYS5wbGF0Zm9ybSwgJ3dpbmRvd3MnOjp0ZXh0 KSA8PiAwKSkpKSIsCisgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAi Tm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAg ICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnQiLAorICAgICAg ICAgICAgICAgICAgICAgICJBbGlhcyI6ICJhIiwKKyAgICAgICAgICAgICAg ICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAg ICAgICAgICAiVG90YWwgQ29zdCI6IDE0LjAwLAorICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFJvd3MiOiA0MDAsCisgICAgICAgICAgICAgICAgICAg ICAgIlBsYW4gV2lkdGgiOiA2OQorICAgICAgICAgICAgICAgICAgICB9LAor ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg Ik5vZGUgVHlwZSI6ICJNYXRlcmlhbGl6ZSIsCisgICAgICAgICAgICAgICAg ICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAg ICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAg ICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogNS43OCwKKyAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMTIsCisgICAgICAgICAgICAg ICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNzcsCisgICAgICAgICAgICAgICAg ICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBT Y2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAiUmVsYXRpb24gTmFtZSI6ICJwcm9iZSIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICJBbGlhcyI6ICJwIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICJUb3RhbCBDb3N0IjogNS43MiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM3NywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIkZpbHRlciI6ICIoKE5PVCBkZWxldGVkKSBBTkQgKHRh cmdldF90eXBlX2lkID0gMTAwKSkiCisgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgICAg XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIk5vZGUgVHlw ZSI6ICJIYXNoIEpvaW4iLAorICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25z aGlwIjogIk1lbWJlciIsCisgICAgICAgICAgIkpvaW4gVHlwZSI6ICJMZWZ0 IiwKKyAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMjgzMy43NSwKKyAgICAg ICAgICAiVG90YWwgQ29zdCI6IDMxMzIuNjIsCisgICAgICAgICAgIlBsYW4g Um93cyI6IDM5NjAsCisgICAgICAgICAgIlBsYW4gV2lkdGgiOiA5MTMsCisg ICAgICAgICAgIkhhc2ggQ29uZCI6ICIoKHBfMS5pZCA9IHBzdi5wcm9iZV9p ZCkgQU5EIChzZC5zZXJ2ZXJfdmVyc2lvbl9pZCA9IHBzdi5zZXJ2ZXJfdmVy c2lvbl9pZCkpIiwKKyAgICAgICAgICAiRmlsdGVyIjogIihwXzEuYW55X3Nl cnZlcl92ZXJzaW9uIE9SIChwc3YucHJvYmVfaWQgSVMgTk9UIE5VTEwpKSIs CisgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgeworICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIk1lcmdlIEpvaW4iLAorICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAg ICAgICAgICJKb2luIFR5cGUiOiAiUmlnaHQiLAorICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMjgyMi4xOCwKKyAgICAgICAgICAgICAgIlRvdGFs IENvc3QiOiAyOTMyLjE5LAorICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog Mzk2MCwKKyAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzODUsCisgICAg ICAgICAgICAgICJNZXJnZSBDb25kIjogIigoY18xLnByb2JlX2lkID0gcF8x LmlkKSBBTkQgKGNfMS5zZXJ2ZXJfaWQgPSBiLnNlcnZlcl9pZCkpIiwKKyAg ICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisg ICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRl ciIsCisgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9y d2FyZCIsCisgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJwcm9i ZV9jb25maWdfc2VydmVyX3BrZXkiLAorICAgICAgICAgICAgICAgICAgIlJl bGF0aW9uIE5hbWUiOiAicHJvYmVfY29uZmlnX3NlcnZlciIsCisgICAgICAg ICAgICAgICAgICAiQWxpYXMiOiAiY18xIiwKKyAgICAgICAgICAgICAgICAg ICJTdGFydHVwIENvc3QiOiAwLjE1LAorICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiA3MC4xMCwKKyAgICAgICAgICAgICAgICAgICJQbGFuIFJv d3MiOiAxNzMwLAorICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAx NworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTb3J0IiwKKyAgICAgICAg ICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAg ICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAyODIyLjAzLAorICAg ICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAyODMxLjkzLAorICAgICAg ICAgICAgICAgICAgIlBsYW4gUm93cyI6IDM5NjAsCisgICAgICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDM3NiwKKyAgICAgICAgICAgICAgICAgICJT b3J0IEtleSI6IFsicF8xLmlkIiwgImIuc2VydmVyX2lkIl0sCisgICAgICAg ICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2ggSm9p biIsCisgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJKb2luIFR5 cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVw IENvc3QiOiAyMzQ0Ljg5LAorICAgICAgICAgICAgICAgICAgICAgICJUb3Rh bCBDb3N0IjogMjU4NS4zOSwKKyAgICAgICAgICAgICAgICAgICAgICAiUGxh biBSb3dzIjogMzk2MCwKKyAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDM3NiwKKyAgICAgICAgICAgICAgICAgICAgICAiSGFzaCBDb25k IjogIihiLnNlcnZlcl9pZCA9IHMuaWQpIiwKKyAgICAgICAgICAgICAgICAg ICAgICAiSm9pbiBGaWx0ZXIiOiAiKCgocF8xLmFnZW50X2NhcGFiaWxpdHkg SVMgTlVMTCkgT1IgKHBfMS5hZ2VudF9jYXBhYmlsaXR5ID0gQU5ZIChhXzEu YWdlbnRfY2FwYWJpbGl0eV9saXN0KSkpIEFORCAoKHBfMS5jb2xsZWN0aW9u X21ldGhvZCA8PiAnYic6OmJwY2hhcikgT1IgKChwXzEuY29sbGVjdGlvbl9t ZXRob2QgPSAnYic6OmJwY2hhcikgQU5EIChhXzEuYWdlbnRfY2FwYWJpbGl0 eV9saXN0IEA+ICd7YWxsb3dfYmF0Y2hfcHJvYmVzfSc6OnRleHRbXSkgQU5E ICgoc3RycG9zKGFfMS5wbGF0Zm9ybSwgcF8xLnBsYXRmb3JtKSA8PiAwKSBP UiAoKGFfMS5wbGF0Zm9ybSAhfiAnd2luZG93cyc6OnRleHQpIEFORCAocF8x LnBsYXRmb3JtID0gJ3VuaXgnOjp0ZXh0KSkpKSkpIiwKKyAgICAgICAgICAg ICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAi SGFzaCBKb2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVu dCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAiSm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMzguOTAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogNjMuOTAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA0MDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTA5LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAiSGFzaCBDb25kIjogIihiLnNlcnZlcl9p ZCA9IHNkLnNlcnZlcl9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJI YXNoIEpvaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMTkuMDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDM4LjUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ bGFuIFdpZHRoIjogMTA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkhhc2ggQ29uZCI6ICIoYi5hZ2VudF9pZCA9IGFfMS5pZCkiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogImFnZW50X3NlcnZlcl9iaW5k aW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxp YXMiOiAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxNC4wMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjog NDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSGFzaCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlv bnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJTdGFydHVwIENvc3QiOiAxNC4wMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDE0LjAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA0 MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g V2lkdGgiOiA2OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJP dXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJSZWxhdGlvbiBOYW1lIjogImFnZW50IiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogImFfMSIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVG90YWwgQ29zdCI6IDE0LjAwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDY5 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2giLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi SW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0 dXAgQ29zdCI6IDE0LjQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiAxNC40MCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFuIFJvd3MiOiA0NDAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlJlbGF0aW9uIE5hbWUiOiAic2VydmVyX2luZm8iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJzZCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAu MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFs IENvc3QiOiAxNC40MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBSb3dzIjogNDQwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogOAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAg ICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2giLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5l ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiAyMjcwLjI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDIyNzAuMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQ bGFuIFJvd3MiOiAyODYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDM4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVz dGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0Ijog MjI3MC4yNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFJvd3MiOiAyODYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gV2lkdGgiOiAzODIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiSm9pbiBGaWx0ZXIiOiAiKE5PVCAoU3ViUGxhbiAxKSkiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogInNlcnZlciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInMiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJU b3RhbCBDb3N0IjogMTIuMjAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlBsYW4gUm93cyI6IDIyMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiTWF0ZXJpYWxpemUiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjog IklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiVG90YWwgQ29zdCI6IDUuODUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDI2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzc4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6 IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlw ZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9u IE5hbWUiOiAicHJvYmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiQWxpYXMiOiAicF8xIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBD b3N0IjogNS43MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDI2LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciI6ICIoKE5P VCBkZWxldGVkKSBBTkQgKHRhcmdldF90eXBlX2lkID0gMjAwKSkiCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5v ZGUgVHlwZSI6ICJSZXN1bHQiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIlN1YlBsYW4iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdWJwbGFuIE5h bWUiOiAiU3ViUGxhbiAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDAuNTEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEw MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg XQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgXQor ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg Ik5vZGUgVHlwZSI6ICJIYXNoIiwKKyAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAiU3RhcnR1 cCBDb3N0IjogOC4yMywKKyAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA4 LjIzLAorICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMjIzLAorICAgICAg ICAgICAgICAiUGxhbiBXaWR0aCI6IDU0MSwKKyAgICAgICAgICAgICAgIlBs YW5zIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAg IlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAg ICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmVfc2VydmVyX3ZlcnNpb24i LAorICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInBzdiIsCisgICAgICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAg ICAgICAgICJUb3RhbCBDb3N0IjogOC4yMywKKyAgICAgICAgICAgICAgICAg ICJQbGFuIFJvd3MiOiAyMjMsCisgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDU0MQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg XQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAg ICAgICAgeworICAgICAgICAgICJOb2RlIFR5cGUiOiAiSGFzaCBKb2luIiwK KyAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJNZW1iZXIiLAor ICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAgIlN0 YXJ0dXAgQ29zdCI6IDE3My4wOCwKKyAgICAgICAgICAiVG90YWwgQ29zdCI6 IDEwMzIuODYsCisgICAgICAgICAgIlBsYW4gUm93cyI6IDc5OTcsCisgICAg ICAgICAgIlBsYW4gV2lkdGgiOiA5MTMsCisgICAgICAgICAgIkhhc2ggQ29u ZCI6ICIoKHBfMi5pZCA9IHBzdl8xLnByb2JlX2lkKSBBTkQgKHNkXzEuc2Vy dmVyX3ZlcnNpb25faWQgPSBwc3ZfMS5zZXJ2ZXJfdmVyc2lvbl9pZCkpIiwK KyAgICAgICAgICAiRmlsdGVyIjogIihwXzIuYW55X3NlcnZlcl92ZXJzaW9u IE9SIChwc3ZfMS5wcm9iZV9pZCBJUyBOT1QgTlVMTCkpIiwKKyAgICAgICAg ICAiUGxhbnMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJO b2RlIFR5cGUiOiAiTWVyZ2UgSm9pbiIsCisgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgIkpv aW4gVHlwZSI6ICJMZWZ0IiwKKyAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29z dCI6IDE2MS41MCwKKyAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA2Mzku ODksCisgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA3OTk3LAorICAgICAg ICAgICAgICAiUGxhbiBXaWR0aCI6IDM4NSwKKyAgICAgICAgICAgICAgIk1l cmdlIENvbmQiOiAiKChiXzEuc2VydmVyX2lkID0gY18yLnNlcnZlcl9pZCkg QU5EIChvY2QuZGF0YWJhc2VfbmFtZSA9IChjXzIuZGF0YWJhc2VfbmFtZSk6 OnRleHQpKSIsCisgICAgICAgICAgICAgICJKb2luIEZpbHRlciI6ICIocF8y LmlkID0gY18yLnByb2JlX2lkKSIsCisgICAgICAgICAgICAgICJQbGFucyI6 IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiTm9k ZSBUeXBlIjogIk1lcmdlIEpvaW4iLAorICAgICAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAg ICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogODkuNjYsCisgICAgICAgICAgICAgICAgICAiVG90 YWwgQ29zdCI6IDUxNy43NiwKKyAgICAgICAgICAgICAgICAgICJQbGFuIFJv d3MiOiA3OTk3LAorICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAz NzYsCisgICAgICAgICAgICAgICAgICAiTWVyZ2UgQ29uZCI6ICIob2NkLnNl cnZlcl9pZCA9IGJfMS5zZXJ2ZXJfaWQpIiwKKyAgICAgICAgICAgICAgICAg ICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAg ICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0 ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJTY2FuIERpcmVjdGlvbiI6 ICJGb3J3YXJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAiSW5kZXggTmFt ZSI6ICJvY19kYXRhYmFzZV9wa2V5IiwKKyAgICAgICAgICAgICAgICAgICAg ICAiUmVsYXRpb24gTmFtZSI6ICJvY19kYXRhYmFzZSIsCisgICAgICAgICAg ICAgICAgICAgICAgIkFsaWFzIjogIm9jZCIsCisgICAgICAgICAgICAgICAg ICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICAg ICAgICAgIlRvdGFsIENvc3QiOiA1NS40MCwKKyAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBSb3dzIjogMzc1LAorICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFdpZHRoIjogMzYsCisgICAgICAgICAgICAgICAgICAgICAgIkZp bHRlciI6ICJjb25uZWN0aW9uc19hbGxvd2VkIgorICAgICAgICAgICAgICAg ICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJNYXRlcmlhbGl6ZSIsCisgICAgICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIi LAorICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA4OS41 MSwKKyAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDM1Mi4x MywKKyAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDI2NSwK KyAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM0NCwKKyAg ICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogODkuNTEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMzQx LjQ3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog NDI2NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgi OiAzNDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJKb2luIEZpbHRl ciI6ICIoKChwXzIuYWdlbnRfY2FwYWJpbGl0eSBJUyBOVUxMKSBPUiAocF8y LmFnZW50X2NhcGFiaWxpdHkgPSBBTlkgKGFfMi5hZ2VudF9jYXBhYmlsaXR5 X2xpc3QpKSkgQU5EICgocF8yLmNvbGxlY3Rpb25fbWV0aG9kIDw+ICdiJzo6 YnBjaGFyKSBPUiAoKHBfMi5jb2xsZWN0aW9uX21ldGhvZCA9ICdiJzo6YnBj aGFyKSBBTkQgKGFfMi5hZ2VudF9jYXBhYmlsaXR5X2xpc3QgQD4gJ3thbGxv d19iYXRjaF9wcm9iZXN9Jzo6dGV4dFtdKSBBTkQgKChzdHJwb3MoYV8yLnBs YXRmb3JtLCBwXzIucGxhdGZvcm0pIDw+IDApIE9SICgoYV8yLnBsYXRmb3Jt ICF+ICd3aW5kb3dzJzo6dGV4dCkgQU5EIChwXzIucGxhdGZvcm0gPSAndW5p eCc6OnRleHQpKSkpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJNZXJn ZSBKb2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogODkuNTEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDk3 LjcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFdpZHRoIjogNzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi TWVyZ2UgQ29uZCI6ICIoYl8xLnNlcnZlcl9pZCA9IHNkXzEuc2VydmVyX2lk KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBb CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNvcnQi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQg UmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogNTUuNzksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA1Ni43 OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFdpZHRoIjogNzMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlNvcnQgS2V5IjogWyJiXzEuc2VydmVyX2lkIl0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkhh c2ggSm9pbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJ bm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJTdGFydHVwIENvc3QiOiAxOS4wMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAzOC41MCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gV2lkdGgiOiA3MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkhhc2ggQ29uZCI6ICIoYl8xLmFnZW50X2lkID0gYV8y LmlkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRp b25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogImFnZW50X3NlcnZl cl9iaW5kaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJBbGlhcyI6ICJiXzEiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDE0LjAwLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDQwMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRo IjogOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ik5vZGUgVHlwZSI6ICJIYXNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklu bmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJTdGFydHVwIENvc3QiOiAxNC4wMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTQuMDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA2OSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25z aGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJhZ2VudCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkFsaWFzIjogImFfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAxNC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDAwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFdpZHRoIjogNjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi SW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJT dGFydHVwIENvc3QiOiAzMy43MiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiVG90YWwgQ29zdCI6IDM0LjgyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA0NDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3J0IEtl eSI6IFsic2RfMS5zZXJ2ZXJfaWQiXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0 aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogInNlcnZlcl9pbmZvIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFz IjogInNkXzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxNC40MCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDQ0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlBsYW4gV2lkdGgiOiA4CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjog Ik1hdGVyaWFsaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA1Ljc5 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiAzNzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh bnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjog IlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJv YmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlh cyI6ICJwXzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogNS43MiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMTQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAz NzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRl ciI6ICIoKE5PVCBkZWxldGVkKSBBTkQgKHRhcmdldF90eXBlX2lkID0gMzAw KSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICBdCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg IF0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAg ICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisg ICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogNzEuODQsCisgICAg ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDc0LjQyLAorICAgICAgICAg ICAgICAgICAgIlBsYW4gUm93cyI6IDEwMzAsCisgICAgICAgICAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDQ5LAorICAgICAgICAgICAgICAgICAgIlNvcnQg S2V5IjogWyJjXzIuc2VydmVyX2lkIiwgImNfMi5kYXRhYmFzZV9uYW1lIl0s CisgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjog IlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJl bGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAg IlJlbGF0aW9uIE5hbWUiOiAicHJvYmVfY29uZmlnX2RhdGFiYXNlIiwKKyAg ICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAiY18yIiwKKyAgICAgICAg ICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAg ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDIwLjMwLAorICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAxMDMwLAorICAgICAgICAgICAg ICAgICAgICAgICJQbGFuIFdpZHRoIjogNDkKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIiwKKyAgICAg ICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogOC4yMywKKyAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiA4LjIzLAorICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogMjIzLAorICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDU0MSwK KyAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAor ICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0 ZXIiLAorICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJv YmVfc2VydmVyX3ZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgIkFsaWFz IjogInBzdl8xIiwKKyAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiAwLjAwLAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA4LjIz LAorICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDIyMywKKyAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNTQxCisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAg ICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIk5vZGUg VHlwZSI6ICJIYXNoIEpvaW4iLAorICAgICAgICAgICJQYXJlbnQgUmVsYXRp b25zaGlwIjogIk1lbWJlciIsCisgICAgICAgICAgIkpvaW4gVHlwZSI6ICJM ZWZ0IiwKKyAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMTQxLjkxLAorICAg ICAgICAgICJUb3RhbCBDb3N0IjogMTk1LjIyLAorICAgICAgICAgICJQbGFu IFJvd3MiOiA2NiwKKyAgICAgICAgICAiUGxhbiBXaWR0aCI6IDk0NSwKKyAg ICAgICAgICAiSGFzaCBDb25kIjogIigocF8zLmlkID0gcHN2XzIucHJvYmVf aWQpIEFORCAoc2RfMi5zZXJ2ZXJfdmVyc2lvbl9pZCA9IHBzdl8yLnNlcnZl cl92ZXJzaW9uX2lkKSkiLAorICAgICAgICAgICJGaWx0ZXIiOiAiKHBfMy5h bnlfc2VydmVyX3ZlcnNpb24gT1IgKHBzdl8yLnByb2JlX2lkIElTIE5PVCBO VUxMKSkiLAorICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIEpvaW4iLAorICAg ICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisg ICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiUmlnaHQiLAorICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMTMwLjM0LAorICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDE4MC41MCwKKyAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDY2LAorICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDQxNywKKyAg ICAgICAgICAgICAgIkhhc2ggQ29uZCI6ICIoKGNfMy5wcm9iZV9pZCA9IHBf My5pZCkgQU5EIChjXzMuc2VydmVyX2lkID0gYl8yLnNlcnZlcl9pZCkgQU5E ICgoY18zLmRhdGFiYXNlX25hbWUpOjp0ZXh0ID0gb2MuZGF0YWJhc2VfbmFt ZSkgQU5EICgoY18zLnNjaGVtYV9uYW1lKTo6dGV4dCA9IG9jLnNjaGVtYV9u YW1lKSkiLAorICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEg U2NhbiIsCisgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFt ZSI6ICJwcm9iZV9jb25maWdfc2NoZW1hIiwKKyAgICAgICAgICAgICAgICAg ICJBbGlhcyI6ICJjXzMiLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAg Q29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDE3LjMwLAorICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDczMCwK KyAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogODEKKyAgICAgICAg ICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiSGFzaCIsCisgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMTI5LjAyLAorICAgICAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiAxMjkuMDIsCisgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogNjYsCisgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0 aCI6IDQwOCwKKyAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAiSm9pbiBUeXBlIjogIklubmVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogOTYuMzUsCisgICAgICAgICAg ICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxMjkuMDIsCisgICAgICAgICAg ICAgICAgICAgICAgIlBsYW4gUm93cyI6IDY2LAorICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogNDA4LAorICAgICAgICAgICAgICAgICAg ICAgICJKb2luIEZpbHRlciI6ICIoKChwXzMuYWdlbnRfY2FwYWJpbGl0eSBJ UyBOVUxMKSBPUiAocF8zLmFnZW50X2NhcGFiaWxpdHkgPSBBTlkgKGFfMy5h Z2VudF9jYXBhYmlsaXR5X2xpc3QpKSkgQU5EICgocF8zLmNvbGxlY3Rpb25f bWV0aG9kIDw+ICdiJzo6YnBjaGFyKSBPUiAoKHBfMy5jb2xsZWN0aW9uX21l dGhvZCA9ICdiJzo6YnBjaGFyKSBBTkQgKGFfMy5hZ2VudF9jYXBhYmlsaXR5 X2xpc3QgQD4gJ3thbGxvd19iYXRjaF9wcm9iZXN9Jzo6dGV4dFtdKSBBTkQg KChzdHJwb3MoYV8zLnBsYXRmb3JtLCBwXzMucGxhdGZvcm0pIDw+IDApIE9S ICgoYV8zLnBsYXRmb3JtICF+ICd3aW5kb3dzJzo6dGV4dCkgQU5EIChwXzMu cGxhdGZvcm0gPSAndW5peCc6OnRleHQpKSkpKSkiLAorICAgICAgICAgICAg ICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJO ZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIkpvaW4gVHlwZSI6ICJMZWZ0IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDk2LjM1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDExOS43MSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDE0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDE0MSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0 ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlw ZSI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogOTYuMjAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiVG90YWwgQ29zdCI6IDExNS43MiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAxNCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTM3LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIEpvaW4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRp b25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiSm9pbiBUeXBlIjogIklubmVyIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogOTYuMDUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3Qi OiAxMTEuNjksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gUm93cyI6IDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogNzIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkhhc2ggQ29uZCI6ICIoYl8yLnNlcnZlcl9pZCA9 IG9jZF8xLnNlcnZlcl9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25z aGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnRfc2VydmVyX2JpbmRp bmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi QWxpYXMiOiAiYl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTQuMDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFJvd3MiOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogOAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi SW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiU3RhcnR1cCBDb3N0IjogOTUuOTcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogOTUuOTcsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3Mi OiA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJNZXJnZSBKb2luIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ YXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiSW5u ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlN0YXJ0dXAgQ29zdCI6IDMzLjY4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA5NS45NywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ bGFuIFJvd3MiOiA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA3MiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXJnZSBDb25kIjogIigo b2Muc2VydmVyX2lkID0gb2NkXzEuc2VydmVyX2lkKSBBTkQgKG9jLmRhdGFi YXNlX25hbWUgPSBvY2RfMS5kYXRhYmFzZV9uYW1lKSkiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIk5vZGUgVHlwZSI6ICJJbmRleCBPbmx5IFNjYW4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQg UmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAi Rm9yd2FyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAib2Nfc2NoZW1hX3BrZXkiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJSZWxhdGlvbiBOYW1lIjogIm9jX3NjaGVtYSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogIm9j IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDU1 LjcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFJvd3MiOiA3NzAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA2OAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIk5vZGUgVHlwZSI6ICJTb3J0IiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9u c2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDMzLjUzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJU b3RhbCBDb3N0IjogMzQuNDcsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDM3NSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBXaWR0aCI6IDM2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJTb3J0IEtleSI6IFsib2NkXzEuc2VydmVyX2lk IiwgIm9jZF8xLmRhdGFiYXNlX25hbWUiXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50 IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1l IjogIm9jX2RhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogIm9jZF8xIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0Ijog MTcuNTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAzNzUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdp ZHRoIjogMzYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJGaWx0ZXIiOiAiY29ubmVjdGlvbnNfYWxsb3dl ZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25z aGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAiYWdlbnRf cGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJl bGF0aW9uIE5hbWUiOiAiYWdlbnQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJBbGlhcyI6ICJhXzMiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE1LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0Ijog MC4yOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBSb3dzIjogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDY5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJJbmRleCBDb25kIjogIihpZCA9IGJfMi5hZ2VudF9pZCki CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5k ZXggU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFy ZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJz ZXJ2ZXJfaW5mb19wa2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJSZWxhdGlvbiBOYW1lIjogInNlcnZlcl9pbmZvIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJzZF8yIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE1 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3Qi OiAwLjI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBXaWR0aCI6IDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi SW5kZXggQ29uZCI6ICIoYl8yLnNlcnZlcl9pZCA9IHNlcnZlcl9pZCkiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAiTm9kZSBUeXBlIjogIk1hdGVyaWFsaXplIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0Ijog MC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3Qi OiA1Ljc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dz IjogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgi OiAzNzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25z aGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJSZWxhdGlvbiBOYW1lIjogInByb2JlIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJBbGlhcyI6ICJwXzMiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDUuNzIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjog Mzc4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciI6 ICIoKE5PVCBkZWxldGVkKSBBTkQgKHRhcmdldF90eXBlX2lkID0gNDAwKSki CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2giLAorICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICJTdGFydHVwIENvc3QiOiA4LjIzLAorICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDguMjMsCisgICAgICAgICAgICAgICJQbGFuIFJvd3Mi OiAyMjMsCisgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNTQxLAorICAg ICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAg ICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIs CisgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJwcm9iZV9z ZXJ2ZXJfdmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAi cHN2XzIiLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAu MDAsCisgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDguMjMsCisg ICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMjIzLAorICAgICAgICAg ICAgICAgICAgIlBsYW4gV2lkdGgiOiA1NDEKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBd CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiTm9kZSBUeXBl IjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAiUGFyZW50IFJlbGF0aW9u c2hpcCI6ICJNZW1iZXIiLAorICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVm dCIsCisgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDc2LjY5LAorICAgICAg ICAgICJUb3RhbCBDb3N0IjogMTE1LjQ2LAorICAgICAgICAgICJQbGFuIFJv d3MiOiA4LAorICAgICAgICAgICJQbGFuIFdpZHRoIjogOTc3LAorICAgICAg ICAgICJKb2luIEZpbHRlciI6ICIoYl8zLnNlcnZlcl9pZCA9IGNfNC5zZXJ2 ZXJfaWQpIiwKKyAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAor ICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIs CisgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAg ICAgICAgICJTdGFydHVwIENvc3QiOiA3Ni41NCwKKyAgICAgICAgICAgICAg IlRvdGFsIENvc3QiOiAxMTMuMDgsCisgICAgICAgICAgICAgICJQbGFuIFJv d3MiOiA4LAorICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDk2OCwKKyAg ICAgICAgICAgICAgIkZpbHRlciI6ICIocF80LmFueV9zZXJ2ZXJfdmVyc2lv biBPUiAocHN2XzMucHJvYmVfaWQgSVMgTk9UIE5VTEwpKSIsCisgICAgICAg ICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAg ICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwK KyAgICAgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAg ICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogNzYuNDAsCisgICAgICAg ICAgICAgICAgICAiVG90YWwgQ29zdCI6IDExMS4xMCwKKyAgICAgICAgICAg ICAgICAgICJQbGFuIFJvd3MiOiA4LAorICAgICAgICAgICAgICAgICAgIlBs YW4gV2lkdGgiOiA0NDAsCisgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBb CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAgICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAg ICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAg ICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDc2LjI1LAorICAg ICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTA4LjgyLAorICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA4LAorICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNDM2LAorICAgICAgICAgICAg ICAgICAgICAgICJKb2luIEZpbHRlciI6ICIoKChwXzQuYWdlbnRfY2FwYWJp bGl0eSBJUyBOVUxMKSBPUiAocF80LmFnZW50X2NhcGFiaWxpdHkgPSBBTlkg KGFfNC5hZ2VudF9jYXBhYmlsaXR5X2xpc3QpKSkgQU5EICgocF80LmNvbGxl Y3Rpb25fbWV0aG9kIDw+ICdiJzo6YnBjaGFyKSBPUiAoKHBfNC5jb2xsZWN0 aW9uX21ldGhvZCA9ICdiJzo6YnBjaGFyKSBBTkQgKGFfNC5hZ2VudF9jYXBh YmlsaXR5X2xpc3QgQD4gJ3thbGxvd19iYXRjaF9wcm9iZXN9Jzo6dGV4dFtd KSBBTkQgKChzdHJwb3MoYV80LnBsYXRmb3JtLCBwXzQucGxhdGZvcm0pIDw+ IDApIE9SICgoYV80LnBsYXRmb3JtICF+ICd3aW5kb3dzJzo6dGV4dCkgQU5E IChwXzQucGxhdGZvcm0gPSAndW5peCc6OnRleHQpKSkpKSkiLAorICAgICAg ICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlw ZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA3Ni4xMCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxMDUuMzIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAxMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA0ODIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICJKb2luIEZpbHRlciI6ICIo b2NkXzIuc2VydmVyX2lkID0gYl8zLnNlcnZlcl9pZCkiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ik5vZGUgVHlwZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBUeXBlIjog IklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFy dHVwIENvc3QiOiA3NS45NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJUb3RhbCBDb3N0IjogODguOTYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBSb3dzIjogNSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNDgyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJNZXJnZSBKb2luIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDc1Ljk1LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogODMu MTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gV2lkdGgiOiAxMDQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIk1lcmdlIENvbmQiOiAiKChvY2RfMi5zZXJ2ZXJfaWQgPSBv Y18xLnNlcnZlcl9pZCkgQU5EIChvY2RfMi5kYXRhYmFzZV9uYW1lID0gb2Nf MS5kYXRhYmFzZV9uYW1lKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJTb3J0IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAi OiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMzMuNTMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMzQuNDcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJv d3MiOiAzNzUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFdpZHRoIjogMzYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJTb3J0IEtleSI6IFsib2NkXzIuc2VydmVyX2lk IiwgIm9jZF8yLmRhdGFiYXNlX25hbWUiXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2Vx IFNjYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9u IE5hbWUiOiAib2NfZGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogIm9jZF8yIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVw IENvc3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxNy41MCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAz NzUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDM2LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkZpbHRlciI6ICJjb25uZWN0aW9uc19hbGxv d2VkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTb3J0 IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogNDIuNDIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3Rh bCBDb3N0IjogNDMuODcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFuIFJvd3MiOiA1ODAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ydCBLZXki OiBbIm9jXzEuc2VydmVyX2lkIiwgIm9jXzEuZGF0YWJhc2VfbmFtZSJdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMi OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ik5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJvY190YWJsZSIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAi b2NfMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTUuODAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogNTgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAxMDAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIk1h dGVyaWFsaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiA1LjczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogMzc4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmUiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAi cF80IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogNS43MiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFdpZHRoIjogMzc4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiRmlsdGVyIjogIigoTk9UIGRlbGV0ZWQpIEFORCAodGFyZ2V0 X3R5cGVfaWQgPSA1MDApKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAi SW5kZXggT25seSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3 YXJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBO YW1lIjogImFnZW50X3NlcnZlcl9iaW5kaW5nX3BrZXkiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnRf c2VydmVyX2JpbmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkFsaWFzIjogImJfMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMy4yNSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IENvbmQiOiAiKHNlcnZl cl9pZCA9IG9jXzEuc2VydmVyX2lkKSIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAg ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAi SW5kZXggU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIlNjYW4gRGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJhZ2VudF9wa2V5 IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUi OiAiYWdlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMi OiAiYV80IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAg Q29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3Rh bCBDb3N0IjogMC4yOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gUm93cyI6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFdpZHRoIjogNjksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmRl eCBDb25kIjogIihpZCA9IGJfMy5hZ2VudF9pZCkiCisgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwK KyAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgIlNjYW4gRGlyZWN0 aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAgICAgICAgICAgICJJbmRl eCBOYW1lIjogInNlcnZlcl9pbmZvX3BrZXkiLAorICAgICAgICAgICAgICAg ICAgICAgICJSZWxhdGlvbiBOYW1lIjogInNlcnZlcl9pbmZvIiwKKyAgICAg ICAgICAgICAgICAgICAgICAiQWxpYXMiOiAic2RfMyIsCisgICAgICAgICAg ICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAg ICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAwLjI4LAorICAgICAgICAgICAg ICAgICAgICAgICJQbGFuIFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFdpZHRoIjogOCwKKyAgICAgICAgICAgICAgICAgICAgICAi SW5kZXggQ29uZCI6ICIoYl8zLnNlcnZlcl9pZCA9IHNlcnZlcl9pZCkiCisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIF0KKyAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAg ICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisg ICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIs CisgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJwcm9iZV9zZXJ2 ZXJfdmVyc2lvbl91bmlxdWUiLAorICAgICAgICAgICAgICAgICAgIlJlbGF0 aW9uIE5hbWUiOiAicHJvYmVfc2VydmVyX3ZlcnNpb24iLAorICAgICAgICAg ICAgICAgICAgIkFsaWFzIjogInBzdl8zIiwKKyAgICAgICAgICAgICAgICAg ICJTdGFydHVwIENvc3QiOiAwLjE0LAorICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAwLjI0LAorICAgICAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDEsCisgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDU0MSwK KyAgICAgICAgICAgICAgICAgICJJbmRleCBDb25kIjogIigocF80LmlkID0g cHJvYmVfaWQpIEFORCAoc2RfMy5zZXJ2ZXJfdmVyc2lvbl9pZCA9IHNlcnZl cl92ZXJzaW9uX2lkKSkiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAgICAgICAg ICAgICAgIkluZGV4IE5hbWUiOiAicHJvYmVfY29uZmlnX3RhYmxlX3BrZXki LAorICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJwcm9iZV9jb25m aWdfdGFibGUiLAorICAgICAgICAgICAgICAiQWxpYXMiOiAiY180IiwKKyAg ICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAg ICAgICJUb3RhbCBDb3N0IjogMC4yOCwKKyAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDEsCisgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTEzLAor ICAgICAgICAgICAgICAiSW5kZXggQ29uZCI6ICIoKHBfNC5pZCA9IHByb2Jl X2lkKSBBTkQgKG9jXzEuZGF0YWJhc2VfbmFtZSA9IChkYXRhYmFzZV9uYW1l KTo6dGV4dCkgQU5EIChvY18xLnNjaGVtYV9uYW1lID0gKHNjaGVtYV9uYW1l KTo6dGV4dCkgQU5EIChvY18xLnRhYmxlX25hbWUgPSAodGFibGVfbmFtZSk6 OnRleHQpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAg IH0sCisgICAgICAgIHsKKyAgICAgICAgICAiTm9kZSBUeXBlIjogIk5lc3Rl ZCBMb29wIiwKKyAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJN ZW1iZXIiLAorICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAg ICAgICAgIlN0YXJ0dXAgQ29zdCI6IDY1LjU2LAorICAgICAgICAgICJUb3Rh bCBDb3N0IjogOTcuMjMsCisgICAgICAgICAgIlBsYW4gUm93cyI6IDYsCisg ICAgICAgICAgIlBsYW4gV2lkdGgiOiA5NzcsCisgICAgICAgICAgIkpvaW4g RmlsdGVyIjogIigob2NfMi5kYXRhYmFzZV9uYW1lID0gKGNfNS5kYXRhYmFz ZV9uYW1lKTo6dGV4dCkgQU5EIChvY18yLnNjaGVtYV9uYW1lID0gKGNfNS5z Y2hlbWFfbmFtZSk6OnRleHQpIEFORCAob2NfMi5pbmRleF9uYW1lID0gKGNf NS5pbmRleF9uYW1lKTo6dGV4dCkpIiwKKyAgICAgICAgICAiUGxhbnMiOiBb CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAi TmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9u c2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAi TGVmdCIsCisgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2NS40MSwK KyAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA5NS40MiwKKyAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDYsCisgICAgICAgICAgICAgICJQbGFuIFdp ZHRoIjogOTY4LAorICAgICAgICAgICAgICAiRmlsdGVyIjogIihwXzUuYW55 X3NlcnZlcl92ZXJzaW9uIE9SIChwc3ZfNC5wcm9iZV9pZCBJUyBOT1QgTlVM TCkpIiwKKyAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVk IExvb3AiLAorICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6 ICJMZWZ0IiwKKyAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2 NS4yNiwKKyAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogOTMuOTMs CisgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNiwKKyAgICAgICAg ICAgICAgICAgICJQbGFuIFdpZHRoIjogNDQwLAorICAgICAgICAgICAgICAg ICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJOZXN0ZWQgTG9vcCIsCisg ICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi T3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAi SW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiA2NS4xMiwKKyAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDkyLjIyLAorICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA2 LAorICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNDM2LAor ICAgICAgICAgICAgICAgICAgICAgICJKb2luIEZpbHRlciI6ICIoKChwXzUu YWdlbnRfY2FwYWJpbGl0eSBJUyBOVUxMKSBPUiAocF81LmFnZW50X2NhcGFi aWxpdHkgPSBBTlkgKGFfNS5hZ2VudF9jYXBhYmlsaXR5X2xpc3QpKSkgQU5E ICgocF81LmNvbGxlY3Rpb25fbWV0aG9kIDw+ICdiJzo6YnBjaGFyKSBPUiAo KHBfNS5jb2xsZWN0aW9uX21ldGhvZCA9ICdiJzo6YnBjaGFyKSBBTkQgKGFf NS5hZ2VudF9jYXBhYmlsaXR5X2xpc3QgQD4gJ3thbGxvd19iYXRjaF9wcm9i ZXN9Jzo6dGV4dFtdKSBBTkQgKChzdHJwb3MoYV81LnBsYXRmb3JtLCBwXzUu cGxhdGZvcm0pIDw+IDApIE9SICgoYV81LnBsYXRmb3JtICF+ICd3aW5kb3dz Jzo6dGV4dCkgQU5EIChwXzUucGxhdGZvcm0gPSAndW5peCc6OnRleHQpKSkp KSkiLAorICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIk5vZGUgVHlwZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5l ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiA2NC45NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiA4OS42OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdp ZHRoIjogNDgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBG aWx0ZXIiOiAiKG9jZF8zLnNlcnZlcl9pZCA9IGJfNC5zZXJ2ZXJfaWQpIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAi OiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpv aW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogNjQuODIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDc2LjQ1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDQ4MiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTWVyZ2UgSm9pbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2NC44 MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDcwLjY3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFJvd3MiOiA0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFuIFdpZHRoIjogMTA0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJNZXJnZSBDb25kIjogIigob2NkXzMuc2Vy dmVyX2lkID0gb2NfMi5zZXJ2ZXJfaWQpIEFORCAob2NkXzMuZGF0YWJhc2Vf bmFtZSA9IG9jXzIuZGF0YWJhc2VfbmFtZSkpIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDMzLjUzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDM0LjQ3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbiBSb3dzIjogMzc1LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM2LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ydCBLZXkiOiBbIm9jZF8z LnNlcnZlcl9pZCIsICJvY2RfMy5kYXRhYmFzZV9uYW1lIl0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBU eXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVy IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJSZWxhdGlvbiBOYW1lIjogIm9jX2RhdGFiYXNlIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJvY2Rf MyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTcuNTAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBSb3dzIjogMzc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIiOiAiY29ubmVj dGlvbnNfYWxsb3dlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5 cGUiOiAiU29ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29z dCI6IDMxLjI5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiVG90YWwgQ29zdCI6IDMyLjI5LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDAwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6 IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlNvcnQgS2V5IjogWyJvY18yLnNlcnZlcl9pZCIsICJvY18yLmRhdGFiYXNl X25hbWUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAib2NfaW5kZXgi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkFsaWFzIjogIm9jXzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29z dCI6IDE0LjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlBsYW4gUm93cyI6IDQwMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTAwCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUg VHlwZSI6ICJNYXRlcmlhbGl6ZSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENv c3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJUb3RhbCBDb3N0IjogNS43MywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNj YW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogInBy b2JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkFsaWFzIjogInBfNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDUuNzIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkZpbHRlciI6ICIoKE5PVCBkZWxldGVkKSBB TkQgKHRhcmdldF90eXBlX2lkID0gNjAwKSkiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9k ZSBUeXBlIjogIkluZGV4IE9ubHkgU2NhbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rp b24iOiAiRm9yd2FyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiSW5kZXggTmFtZSI6ICJhZ2VudF9zZXJ2ZXJfYmluZGluZ19wa2V5IiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1l IjogImFnZW50X3NlcnZlcl9iaW5kaW5nIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJBbGlhcyI6ICJiXzQiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDMuMjgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjog OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25k IjogIihzZXJ2ZXJfaWQgPSBvY18yLnNlcnZlcl9pZCkiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICBdCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9k ZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3YXJk IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAi YWdlbnRfcGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxh dGlvbiBOYW1lIjogImFnZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIkFsaWFzIjogImFfNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICJTdGFydHVwIENvc3QiOiAwLjE1LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiVG90YWwgQ29zdCI6IDAuMjgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDY5LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiSW5kZXggQ29uZCI6ICIoaWQgPSBiXzQuYWdlbnRfaWQpIgorICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg IF0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5k ZXggU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJT Y2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAgICAgICAgICAgICAgICAg ICAgICAiSW5kZXggTmFtZSI6ICJzZXJ2ZXJfaW5mb19wa2V5IiwKKyAgICAg ICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJzZXJ2ZXJfaW5m byIsCisgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInNkXzQiLAor ICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE1LAor ICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMC4yOCwKKyAg ICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDgsCisgICAgICAgICAgICAg ICAgICAgICAgIkluZGV4IENvbmQiOiAiKGJfNC5zZXJ2ZXJfaWQgPSBzZXJ2 ZXJfaWQpIgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICBdCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4i LAorICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi SW5uZXIiLAorICAgICAgICAgICAgICAgICAgIlNjYW4gRGlyZWN0aW9uIjog IkZvcndhcmQiLAorICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAi cHJvYmVfc2VydmVyX3ZlcnNpb25fdW5pcXVlIiwKKyAgICAgICAgICAgICAg ICAgICJSZWxhdGlvbiBOYW1lIjogInByb2JlX3NlcnZlcl92ZXJzaW9uIiwK KyAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJwc3ZfNCIsCisgICAgICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4xNCwKKyAgICAgICAgICAg ICAgICAgICJUb3RhbCBDb3N0IjogMC4yNCwKKyAgICAgICAgICAgICAgICAg ICJQbGFuIFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiA1NDEsCisgICAgICAgICAgICAgICAgICAiSW5kZXggQ29uZCI6ICIo KHBfNS5pZCA9IHByb2JlX2lkKSBBTkQgKHNkXzQuc2VydmVyX3ZlcnNpb25f aWQgPSBzZXJ2ZXJfdmVyc2lvbl9pZCkpIgorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwK KyAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIi LAorICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIs CisgICAgICAgICAgICAgICJJbmRleCBOYW1lIjogInByb2JlX2NvbmZpZ19p bmRleF9wa2V5IiwKKyAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAi cHJvYmVfY29uZmlnX2luZGV4IiwKKyAgICAgICAgICAgICAgIkFsaWFzIjog ImNfNSIsCisgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE1LAor ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDAuMjgsCisgICAgICAgICAg ICAgICJQbGFuIFJvd3MiOiAxLAorICAgICAgICAgICAgICAiUGxhbiBXaWR0 aCI6IDExMywKKyAgICAgICAgICAgICAgIkluZGV4IENvbmQiOiAiKChwXzUu aWQgPSBwcm9iZV9pZCkgQU5EIChiXzQuc2VydmVyX2lkID0gc2VydmVyX2lk KSkiCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9LAor ICAgICAgICB7CisgICAgICAgICAgIk5vZGUgVHlwZSI6ICJOZXN0ZWQgTG9v cCIsCisgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiTWVtYmVy IiwKKyAgICAgICAgICAiSm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAg ICJTdGFydHVwIENvc3QiOiA4NC41NSwKKyAgICAgICAgICAiVG90YWwgQ29z dCI6IDExNS41NCwKKyAgICAgICAgICAiUGxhbiBSb3dzIjogOCwKKyAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDk3NywKKyAgICAgICAgICAiSm9pbiBGaWx0 ZXIiOiAiKGJfNS5zZXJ2ZXJfaWQgPSBjXzYuc2VydmVyX2lkKSIsCisgICAg ICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAg ICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAgICAg IlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAg ICAiSm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAiU3RhcnR1 cCBDb3N0IjogODQuNDAsCisgICAgICAgICAgICAgICJUb3RhbCBDb3N0Ijog MTEzLjE3LAorICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogOCwKKyAgICAg ICAgICAgICAgIlBsYW4gV2lkdGgiOiA5NjgsCisgICAgICAgICAgICAgICJG aWx0ZXIiOiAiKHBfNi5hbnlfc2VydmVyX3ZlcnNpb24gT1IgKHBzdl81LnBy b2JlX2lkIElTIE5PVCBOVUxMKSkiLAorICAgICAgICAgICAgICAiUGxhbnMi OiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIk5v ZGUgVHlwZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAg ICAgICAiSm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDg0LjI1LAorICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAxMTEuMTksCisgICAgICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogOCwKKyAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNDQw LAorICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6 ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAgICAgIlBhcmVu dCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAg ICAgICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAg ICAgICJTdGFydHVwIENvc3QiOiA4NC4xMSwKKyAgICAgICAgICAgICAgICAg ICAgICAiVG90YWwgQ29zdCI6IDEwOC45MSwKKyAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBSb3dzIjogOCwKKyAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDQzNiwKKyAgICAgICAgICAgICAgICAgICAgICAiSm9p biBGaWx0ZXIiOiAiKCgocF82LmFnZW50X2NhcGFiaWxpdHkgSVMgTlVMTCkg T1IgKHBfNi5hZ2VudF9jYXBhYmlsaXR5ID0gQU5ZIChhXzYuYWdlbnRfY2Fw YWJpbGl0eV9saXN0KSkpIEFORCAoKHBfNi5jb2xsZWN0aW9uX21ldGhvZCA8 PiAnYic6OmJwY2hhcikgT1IgKChwXzYuY29sbGVjdGlvbl9tZXRob2QgPSAn Yic6OmJwY2hhcikgQU5EIChhXzYuYWdlbnRfY2FwYWJpbGl0eV9saXN0IEA+ ICd7YWxsb3dfYmF0Y2hfcHJvYmVzfSc6OnRleHRbXSkgQU5EICgoc3RycG9z KGFfNi5wbGF0Zm9ybSwgcF82LnBsYXRmb3JtKSA8PiAwKSBPUiAoKGFfNi5w bGF0Zm9ybSAhfiAnd2luZG93cyc6OnRleHQpIEFORCAocF82LnBsYXRmb3Jt ID0gJ3VuaXgnOjp0ZXh0KSkpKSkpIiwKKyAgICAgICAgICAgICAgICAgICAg ICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExv b3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0 aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogODMuOTYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICJUb3RhbCBDb3N0IjogMTA1LjQxLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMTEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNDgyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5v ZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJw cm9iZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMi OiAicF82IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFy dHVwIENvc3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiA1LjcyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJGaWx0ZXIiOiAiKChOT1QgZGVsZXRlZCkgQU5E ICh0YXJnZXRfdHlwZV9pZCA9IDcwMCkpIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJI YXNoIEpvaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogODMuOTYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDk5LjU4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gV2lkdGgiOiAxMDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiSGFzaCBDb25kIjogIihiXzUuc2VydmVyX2lkID0gb2NkXzQuc2VydmVy X2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMi OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNl cSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnRf c2VydmVyX2JpbmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJBbGlhcyI6ICJiXzUiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTQuMDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAi SGFzaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA4My44OCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDgzLjg4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ bGFuIFJvd3MiOiA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFdpZHRoIjogMTA0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJNZXJnZSBKb2luIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiSm9pbiBUeXBlIjogIklubmVyIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6 IDc2LjU5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVG90YWwgQ29zdCI6IDgzLjg4LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAxMDQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXJn ZSBDb25kIjogIigob2NkXzQuc2VydmVyX2lkID0gb2NfMy5zZXJ2ZXJfaWQp IEFORCAob2NkXzQuZGF0YWJhc2VfbmFtZSA9IG9jXzMuZGF0YWJhc2VfbmFt ZSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMzMuNTMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDM0LjQ3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDM3NSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ydCBL ZXkiOiBbIm9jZF80LnNlcnZlcl9pZCIsICJvY2RfNC5kYXRhYmFzZV9uYW1l Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5h bWUiOiAib2NfZGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJvY2RfNCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0 YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxNy41MCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogMzc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRl ciI6ICJjb25uZWN0aW9uc19hbGxvd2VkIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNvcnQiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDQz LjA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiA0NC41MywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA1OTAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJTb3J0IEtleSI6IFsib2NfMy5zZXJ2ZXJfaWQiLCAib2Nf My5kYXRhYmFzZV9uYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjog IlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlJlbGF0aW9uIE5hbWUiOiAib2Nfc2VxdWVuY2UiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6 ICJvY18zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29z dCI6IDE1LjkwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA1OTAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgi OiAxMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiU2Nh biBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICJJbmRleCBOYW1lIjogImFnZW50X3BrZXkiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJhZ2VudCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJhXzYiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4xNSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAwLjI4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA2OSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IENvbmQiOiAiKGlk ID0gYl81LmFnZW50X2lkKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAgICAgICAgICAg ICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAg ICAgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2Fy ZCIsCisgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAic2Vy dmVyX2luZm9fcGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0 aW9uIE5hbWUiOiAic2VydmVyX2luZm8iLAorICAgICAgICAgICAgICAgICAg ICAgICJBbGlhcyI6ICJzZF81IiwKKyAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDAuMjgsCisgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gUm93cyI6IDEsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiA4LAorICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25kIjog IihiXzUuc2VydmVyX2lkID0gc2VydmVyX2lkKSIKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIk5v ZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICJQ YXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAg ICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAgICAgICAgICAg ICAgICAgICJJbmRleCBOYW1lIjogInByb2JlX3NlcnZlcl92ZXJzaW9uX3Vu aXF1ZSIsCisgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJw cm9iZV9zZXJ2ZXJfdmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAiQWxp YXMiOiAicHN2XzUiLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29z dCI6IDAuMTQsCisgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDAu MjQsCisgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNTQxLAorICAgICAgICAgICAg ICAgICAgIkluZGV4IENvbmQiOiAiKChwXzYuaWQgPSBwcm9iZV9pZCkgQU5E IChzZF81LnNlcnZlcl92ZXJzaW9uX2lkID0gc2VydmVyX3ZlcnNpb25faWQp KSIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIF0KKyAgICAg ICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAgICAgICAgICJQYXJlbnQg UmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgIlNjYW4g RGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAgICAiSW5kZXgg TmFtZSI6ICJwcm9iZV9jb25maWdfc2VxdWVuY2VfcGtleSIsCisgICAgICAg ICAgICAgICJSZWxhdGlvbiBOYW1lIjogInByb2JlX2NvbmZpZ19zZXF1ZW5j ZSIsCisgICAgICAgICAgICAgICJBbGlhcyI6ICJjXzYiLAorICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAwLjI4LAorICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog MSwKKyAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAxMTMsCisgICAgICAg ICAgICAgICJJbmRleCBDb25kIjogIigocF82LmlkID0gcHJvYmVfaWQpIEFO RCAob2NfMy5kYXRhYmFzZV9uYW1lID0gKGRhdGFiYXNlX25hbWUpOjp0ZXh0 KSBBTkQgKG9jXzMuc2NoZW1hX25hbWUgPSAoc2NoZW1hX25hbWUpOjp0ZXh0 KSBBTkQgKG9jXzMuc2VxdWVuY2VfbmFtZSA9IChzZXF1ZW5jZV9uYW1lKTo6 dGV4dCkpIgorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAg fSwKKyAgICAgICAgeworICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVk IExvb3AiLAorICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk1l bWJlciIsCisgICAgICAgICAgIkpvaW4gVHlwZSI6ICJMZWZ0IiwKKyAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogNjEuOTcsCisgICAgICAgICAgIlRvdGFs IENvc3QiOiA4OC40MCwKKyAgICAgICAgICAiUGxhbiBSb3dzIjogNSwKKyAg ICAgICAgICAiUGxhbiBXaWR0aCI6IDk3NywKKyAgICAgICAgICAiSm9pbiBG aWx0ZXIiOiAiKChvY180LmRhdGFiYXNlX25hbWUgPSAoY183LmRhdGFiYXNl X25hbWUpOjp0ZXh0KSBBTkQgKG9jXzQuc2NoZW1hX25hbWUgPSAoY183LnNj aGVtYV9uYW1lKTo6dGV4dCkgQU5EIChvY180LmZ1bmN0aW9uX25hbWUgPSAo Y183LmZ1bmN0aW9uX25hbWUpOjp0ZXh0KSkiLAorICAgICAgICAgICJQbGFu cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIk5vZGUgVHlw ZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgIkpvaW4gVHlw ZSI6ICJMZWZ0IiwKKyAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDYx LjgyLAorICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDg2Ljg4LAorICAg ICAgICAgICAgICAiUGxhbiBSb3dzIjogNSwKKyAgICAgICAgICAgICAgIlBs YW4gV2lkdGgiOiA5NjgsCisgICAgICAgICAgICAgICJGaWx0ZXIiOiAiKHBf Ny5hbnlfc2VydmVyX3ZlcnNpb24gT1IgKHBzdl82LnByb2JlX2lkIElTIE5P VCBOVUxMKSkiLAorICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJO ZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0 aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAiSm9pbiBU eXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29z dCI6IDYxLjY3LAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA4 NS42NSwKKyAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA1LAorICAg ICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA0NDAsCisgICAgICAgICAg ICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29w IiwKKyAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlw ZSI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAg Q29zdCI6IDYxLjUyLAorICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBD b3N0IjogODQuMjIsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDUsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA0 MzYsCisgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gRmlsdGVyIjogIigo KHBfNy5hZ2VudF9jYXBhYmlsaXR5IElTIE5VTEwpIE9SIChwXzcuYWdlbnRf Y2FwYWJpbGl0eSA9IEFOWSAoYV83LmFnZW50X2NhcGFiaWxpdHlfbGlzdCkp KSBBTkQgKChwXzcuY29sbGVjdGlvbl9tZXRob2QgPD4gJ2InOjpicGNoYXIp IE9SICgocF83LmNvbGxlY3Rpb25fbWV0aG9kID0gJ2InOjpicGNoYXIpIEFO RCAoYV83LmFnZW50X2NhcGFiaWxpdHlfbGlzdCBAPiAne2FsbG93X2JhdGNo X3Byb2Jlc30nOjp0ZXh0W10pIEFORCAoKHN0cnBvcyhhXzcucGxhdGZvcm0s IHBfNy5wbGF0Zm9ybSkgPD4gMCkgT1IgKChhXzcucGxhdGZvcm0gIX4gJ3dp bmRvd3MnOjp0ZXh0KSBBTkQgKHBfNy5wbGF0Zm9ybSA9ICd1bml4Jzo6dGV4 dCkpKSkpKSIsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWwor ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0 ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBUeXBlIjog IklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAg Q29zdCI6IDYxLjM4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90 YWwgQ29zdCI6IDgyLjMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gV2lkdGgiOiA0ODIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQ bGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIk5lc3Rl ZCBMb29wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDYxLjIzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA3 Mi4zOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJv d3MiOiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g V2lkdGgiOiA0ODIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBl IjogIk1lcmdlIEpvaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBUeXBlIjogIklu bmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3Rh cnR1cCBDb3N0IjogNjEuMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlRvdGFsIENvc3QiOiA2Ni42MiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDEwNCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyZ2UgQ29u ZCI6ICIoKG9jZF81LnNlcnZlcl9pZCA9IG9jXzQuc2VydmVyX2lkKSBBTkQg KG9jZF81LmRhdGFiYXNlX25hbWUgPSBvY180LmRhdGFiYXNlX25hbWUpKSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjog WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBl IjogIlNvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiAzMy41MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiAzNC40NywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDM3NSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAz NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNv cnQgS2V5IjogWyJvY2RfNS5zZXJ2ZXJfaWQiLCAib2NkXzUuZGF0YWJhc2Vf bmFtZSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0 aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJvY19kYXRhYmFz ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiQWxpYXMiOiAib2NkXzUiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDE3LjUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBsYW4gUm93cyI6IDM3NSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi RmlsdGVyIjogImNvbm5lY3Rpb25zX2FsbG93ZWQiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIlNvcnQiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJTdGFydHVwIENvc3QiOiAyNy43MCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAyOC41NSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDM0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlBsYW4gV2lkdGgiOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJTb3J0IEtleSI6IFsib2NfNC5zZXJ2ZXJfaWQi LCAib2NfNC5kYXRhYmFzZV9uYW1lIl0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBT Y2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBO YW1lIjogIm9jX2Z1bmN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJvY180IiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENv c3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlRvdGFsIENvc3QiOiAxMy40MCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAzNDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDEwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTWF0ZXJpYWxpemUiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRp b25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDUuNzMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiAzNzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Tm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0 ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UmVsYXRpb24gTmFtZSI6ICJwcm9iZSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJwXzciLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0Ijog MC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlRvdGFsIENvc3QiOiA1LjcyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNzgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIi OiAiKChOT1QgZGVsZXRlZCkgQU5EICh0YXJnZXRfdHlwZV9pZCA9IDgwMCkp IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBPbmx5IFNjYW4i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlNjYW4gRGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAiYWdlbnRfc2Vy dmVyX2JpbmRpbmdfcGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUmVsYXRpb24gTmFtZSI6ICJhZ2VudF9zZXJ2ZXJfYmluZGluZyIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAiYl82 IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENv c3QiOiAwLjE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAzLjI5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlBsYW4gUm93cyI6IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiSW5kZXggQ29uZCI6ICIoc2VydmVyX2lkID0gb2NkXzUuc2Vy dmVyX2lkKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlw IjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlNjYW4g RGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiSW5kZXggTmFtZSI6ICJhZ2VudF9wa2V5IiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnQiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAiYV83IiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMC4yOCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNjksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25kIjogIihpZCA9 IGJfNi5hZ2VudF9pZCkiCisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAg ICAgICAgICAgICAgICAgICAgIlNjYW4gRGlyZWN0aW9uIjogIkZvcndhcmQi LAorICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBOYW1lIjogInNlcnZl cl9pbmZvX3BrZXkiLAorICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlv biBOYW1lIjogInNlcnZlcl9pbmZvIiwKKyAgICAgICAgICAgICAgICAgICAg ICAiQWxpYXMiOiAic2RfNiIsCisgICAgICAgICAgICAgICAgICAgICAgIlN0 YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAwLjI4LAorICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRo IjogOCwKKyAgICAgICAgICAgICAgICAgICAgICAiSW5kZXggQ29uZCI6ICIo Yl82LnNlcnZlcl9pZCA9IHNlcnZlcl9pZCkiCisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAgICAgICAgICAgICAiUGFy ZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAg ICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAgICAgICAg ICAgICAiSW5kZXggTmFtZSI6ICJwcm9iZV9zZXJ2ZXJfdmVyc2lvbl91bmlx dWUiLAorICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJv YmVfc2VydmVyX3ZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgIkFsaWFz IjogInBzdl82IiwKKyAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiAwLjE0LAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAwLjI0 LAorICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisgICAgICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDU0MSwKKyAgICAgICAgICAgICAg ICAgICJJbmRleCBDb25kIjogIigocF83LmlkID0gcHJvYmVfaWQpIEFORCAo c2RfNi5zZXJ2ZXJfdmVyc2lvbl9pZCA9IHNlcnZlcl92ZXJzaW9uX2lkKSki CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBdCisgICAgICAg ICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiTm9kZSBU eXBlIjogIkluZGV4IFNjYW4iLAorICAgICAgICAgICAgICAiUGFyZW50IFJl bGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICJTY2FuIERp cmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAgICAgICAgICAgICAgIkluZGV4IE5h bWUiOiAicHJvYmVfY29uZmlnX2Z1bmN0aW9uX3BrZXkiLAorICAgICAgICAg ICAgICAiUmVsYXRpb24gTmFtZSI6ICJwcm9iZV9jb25maWdfZnVuY3Rpb24i LAorICAgICAgICAgICAgICAiQWxpYXMiOiAiY183IiwKKyAgICAgICAgICAg ICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICJUb3Rh bCBDb3N0IjogMC4yOCwKKyAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEs CisgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTEzLAorICAgICAgICAg ICAgICAiSW5kZXggQ29uZCI6ICIoKHBfNy5pZCA9IHByb2JlX2lkKSBBTkQg KGJfNi5zZXJ2ZXJfaWQgPSBzZXJ2ZXJfaWQpKSIKKyAgICAgICAgICAgIH0K KyAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg ICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAiUGFy ZW50IFJlbGF0aW9uc2hpcCI6ICJNZW1iZXIiLAorICAgICAgICAgICJKb2lu IFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDYx Ljk3LAorICAgICAgICAgICJUb3RhbCBDb3N0IjogODguNDAsCisgICAgICAg ICAgIlBsYW4gUm93cyI6IDUsCisgICAgICAgICAgIlBsYW4gV2lkdGgiOiA5 NzcsCisgICAgICAgICAgIkpvaW4gRmlsdGVyIjogIigob2NfNS5kYXRhYmFz ZV9uYW1lID0gKGNfOC5kYXRhYmFzZV9uYW1lKTo6dGV4dCkgQU5EIChvY181 LnNjaGVtYV9uYW1lID0gKGNfOC5zY2hlbWFfbmFtZSk6OnRleHQpIEFORCAo b2NfNS52aWV3X25hbWUgPSAoY184LnZpZXdfbmFtZSk6OnRleHQpKSIsCisg ICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgeworICAgICAgICAg ICAgICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAg ICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAg ICAgICAiSm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAiU3Rh cnR1cCBDb3N0IjogNjEuODIsCisgICAgICAgICAgICAgICJUb3RhbCBDb3N0 IjogODYuODgsCisgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA1LAorICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDk2OCwKKyAgICAgICAgICAgICAg IkZpbHRlciI6ICIocF84LmFueV9zZXJ2ZXJfdmVyc2lvbiBPUiAocHN2Xzcu cHJvYmVfaWQgSVMgTk9UIE5VTEwpKSIsCisgICAgICAgICAgICAgICJQbGFu cyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAi Tm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAg ICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAgICAgICAg ICAiU3RhcnR1cCBDb3N0IjogNjEuNjcsCisgICAgICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDg1LjY1LAorICAgICAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDUsCisgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDQ0 MCwKKyAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUi OiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAiSm9pbiBUeXBlIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogNjEuNTIsCisgICAgICAgICAgICAgICAg ICAgICAgIlRvdGFsIENvc3QiOiA4NC4yMiwKKyAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBSb3dzIjogNSwKKyAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDQzNiwKKyAgICAgICAgICAgICAgICAgICAgICAiSm9p biBGaWx0ZXIiOiAiKCgocF84LmFnZW50X2NhcGFiaWxpdHkgSVMgTlVMTCkg T1IgKHBfOC5hZ2VudF9jYXBhYmlsaXR5ID0gQU5ZIChhXzguYWdlbnRfY2Fw YWJpbGl0eV9saXN0KSkpIEFORCAoKHBfOC5jb2xsZWN0aW9uX21ldGhvZCA8 PiAnYic6OmJwY2hhcikgT1IgKChwXzguY29sbGVjdGlvbl9tZXRob2QgPSAn Yic6OmJwY2hhcikgQU5EIChhXzguYWdlbnRfY2FwYWJpbGl0eV9saXN0IEA+ ICd7YWxsb3dfYmF0Y2hfcHJvYmVzfSc6OnRleHRbXSkgQU5EICgoc3RycG9z KGFfOC5wbGF0Zm9ybSwgcF84LnBsYXRmb3JtKSA8PiAwKSBPUiAoKGFfOC5w bGF0Zm9ybSAhfiAnd2luZG93cyc6OnRleHQpIEFORCAocF84LnBsYXRmb3Jt ID0gJ3VuaXgnOjp0ZXh0KSkpKSkpIiwKKyAgICAgICAgICAgICAgICAgICAg ICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExv b3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0 aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogNjEuMzgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICJUb3RhbCBDb3N0IjogODIuMzIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA2LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDQ4MiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5l ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBD b3N0IjogNjEuMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDcyLjM5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGxhbiBXaWR0aCI6IDQ4MiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiTWVyZ2UgSm9pbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi T3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJK b2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2MS4yMywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDY2LjYyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3Mi OiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFdpZHRoIjogMTA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJNZXJnZSBDb25kIjogIigob2NkXzYuc2VydmVyX2lkID0gb2NfNS5z ZXJ2ZXJfaWQpIEFORCAob2NkXzYuZGF0YWJhc2VfbmFtZSA9IG9jXzUuZGF0 YWJhc2VfbmFtZSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91 dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDMzLjUzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDM0LjQ3LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog Mzc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDM2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiU29ydCBLZXkiOiBbIm9jZF82LnNlcnZlcl9pZCIsICJv Y2RfNi5kYXRhYmFzZV9uYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2Fu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1l IjogIm9jX2RhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJBbGlhcyI6ICJvY2RfNiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0 IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJUb3RhbCBDb3N0IjogMTcuNTAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMzc1LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gV2lkdGgiOiAzNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJGaWx0ZXIiOiAiY29ubmVjdGlvbnNfYWxsb3dlZCIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQg UmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDI3LjcwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29z dCI6IDI4LjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBSb3dzIjogMzQwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDEwMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnQgS2V5IjogWyJv Y181LnNlcnZlcl9pZCIsICJvY181LmRhdGFiYXNlX25hbWUiXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0 ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlJlbGF0aW9uIE5hbWUiOiAib2Nfdmlld3MiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogIm9jXzUi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDEzLjQwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDM0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFuIFdpZHRoIjogMTAwCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJNYXRlcmlh bGl6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0Ijog NS43MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBSb3dzIjogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9u c2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogInByb2JlIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInBfOCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFy dHVwIENvc3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiVG90YWwgQ29zdCI6IDUuNzIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0 aCI6IDM3OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkZpbHRlciI6ICIoKE5PVCBkZWxldGVkKSBBTkQgKHRhcmdldF90eXBl X2lkID0gOTAwKSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkluZGV4 IE9ubHkgU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6 ICJhZ2VudF9zZXJ2ZXJfYmluZGluZ19wa2V5IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogImFnZW50X3NlcnZl cl9iaW5kaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJB bGlhcyI6ICJiXzciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiVG90YWwgQ29zdCI6IDMuMjksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogOCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25kIjogIihzZXJ2ZXJfaWQg PSBvY2RfNi5zZXJ2ZXJfaWQpIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAg ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRl eCBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICJJbmRleCBOYW1lIjogImFnZW50X3BrZXkiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJh Z2VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJh XzgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0 IjogMC4xNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiAwLjI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiA2OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IENv bmQiOiAiKGlkID0gYl83LmFnZW50X2lkKSIKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAg ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAg ICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklu bmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24i OiAiRm9yd2FyZCIsCisgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IE5h bWUiOiAic2VydmVyX2luZm9fcGtleSIsCisgICAgICAgICAgICAgICAgICAg ICAgIlJlbGF0aW9uIE5hbWUiOiAic2VydmVyX2luZm8iLAorICAgICAgICAg ICAgICAgICAgICAgICJBbGlhcyI6ICJzZF83IiwKKyAgICAgICAgICAgICAg ICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAg ICAgICAgICAiVG90YWwgQ29zdCI6IDAuMjgsCisgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDEsCisgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gV2lkdGgiOiA4LAorICAgICAgICAgICAgICAgICAgICAgICJJbmRl eCBDb25kIjogIihiXzcuc2VydmVyX2lkID0gc2VydmVyX2lkKSIKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgXQorICAgICAg ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwKKyAgICAgICAgICAg ICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAg ICAgICAgICAgICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAg ICAgICAgICAgICAgICAgICJJbmRleCBOYW1lIjogInByb2JlX3NlcnZlcl92 ZXJzaW9uX3VuaXF1ZSIsCisgICAgICAgICAgICAgICAgICAiUmVsYXRpb24g TmFtZSI6ICJwcm9iZV9zZXJ2ZXJfdmVyc2lvbiIsCisgICAgICAgICAgICAg ICAgICAiQWxpYXMiOiAicHN2XzciLAorICAgICAgICAgICAgICAgICAgIlN0 YXJ0dXAgQ29zdCI6IDAuMTQsCisgICAgICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDAuMjQsCisgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog MSwKKyAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNTQxLAorICAg ICAgICAgICAgICAgICAgIkluZGV4IENvbmQiOiAiKChwXzguaWQgPSBwcm9i ZV9pZCkgQU5EIChzZF83LnNlcnZlcl92ZXJzaW9uX2lkID0gc2VydmVyX3Zl cnNpb25faWQpKSIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAg ICAgIlNjYW4gRGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAg ICAiSW5kZXggTmFtZSI6ICJwcm9iZV9jb25maWdfdmlld19wa2V5IiwKKyAg ICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmVfY29uZmlnX3Zp ZXciLAorICAgICAgICAgICAgICAiQWxpYXMiOiAiY184IiwKKyAgICAgICAg ICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICJU b3RhbCBDb3N0IjogMC4yOCwKKyAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDEsCisgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTEzLAorICAgICAg ICAgICAgICAiSW5kZXggQ29uZCI6ICIoKHBfOC5pZCA9IHByb2JlX2lkKSBB TkQgKGJfNy5zZXJ2ZXJfaWQgPSBzZXJ2ZXJfaWQpKSIKKyAgICAgICAgICAg IH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9Cisg IH0KK107CisgICAgICBwZ0V4cGxhaW4uRHJhd0pTT05QbGFuKCQoJyNleHBs YWluLWNvbnRhaW5lcicpLCBkYXRhKTsKKyAgICB9LAorICAgIGZ1bmN0aW9u KCkgeworICAgICAgLyogVE9ETzo6IFNob3cgcHJvcGVyIGVycm9yIGRpYWxv ZyAqLworICAgICAgY29uc29sZS5sb2coYXJndW1lbnRzKTsKKyAgICB9KTsK K30gY2F0Y2ggKGVycikgeworICAvKiBTaG93IHByb3BlciBlcnJvciBkaWFs b2cgKi8KKyAgY29uc29sZS5sb2coZXJyKTsKK30KK3slIGVuZGJsb2NrICV9 Cit7JSBibG9jayBib2R5ICV9Cis8ZGl2IGlkPSJleHBsYWluLWNvbnRhaW5l ciI+PC9kaXY+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBjc3NfbGlu ayAlfQorPHN0eWxlPgorYm9keSB7CisgIHBhZGRpbmctdG9wOiAyMHB4Owor ICBvdmVyZmxvdzogYXV0bzsKK30KKworLmxhYmVsIHsKKyAgZGlzcGxheTog dGFibGUtY2VsbDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgd2hpdGUtc3Bh Y2U6IGluaGVyaXQ7Cit9Cis8L3N0eWxlPgoreyUgZW5kYmxvY2sgJX0K --001a114325ecb142880530473db8 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a114325ecb142880530473db8--