Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f19nN-00033S-CZ for pgadmin-hackers@arkaria.postgresql.org; Wed, 28 Mar 2018 12:03:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f19nL-0006X2-Bx for pgadmin-hackers@arkaria.postgresql.org; Wed, 28 Mar 2018 12:03:11 +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.89) (envelope-from ) id 1f19nK-0006Ws-W3 for pgadmin-hackers@lists.postgresql.org; Wed, 28 Mar 2018 12:03:11 +0000 Received: from mail-qt0-x230.google.com ([2607:f8b0:400d:c0d::230]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1f19nG-0002yH-4t for pgadmin-hackers@postgresql.org; Wed, 28 Mar 2018 12:03:10 +0000 Received: by mail-qt0-x230.google.com with SMTP id f16so2227137qth.3 for ; Wed, 28 Mar 2018 05:03:05 -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:from:date:message-id:subject:to :cc; bh=lkueBCJWk5ldI60Lq9zPOVDQkAfa24IAqE0BxMVkoIk=; b=hXD0enDcvXV/tvn4/mqBtYdRdUxdIt2wXBCnYMe66UnIbKLWIp45MRvb0W3joGVpQn 8DW32ODJ8q3PvtDYOmr0v3Vps43ZCLlLLmLFXqTeJbEejRgjvqbEGdRMgjgbmXlAu8mT scqa65avOuBMumTG6dhnhm7c9VyN6RZ/KYKdG0yjFAuhUOBGHbHyUtJS7Iywo9dWP5ZS hC+D2ZAYz9J6Yestht2/+H5Kf/AXnJLLanW186TS78osWwH6RH9AU1y2gK0KlZ0bw4cM BMWaNenvXpZR5iKzyg+cNtUnyTS/3qX0rartosd5emg34qhhCh/nGc8OHulWrM+me9/X ga/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=lkueBCJWk5ldI60Lq9zPOVDQkAfa24IAqE0BxMVkoIk=; b=gZfvYZ4XDFXXIBF/fK4zDCZdoFo1ErUlPKbB0aL7XA4M2KkVsMF8MzgV4WpFVj8D2y CiIVPGkactxlWFeXfY7N+8p3K1gyHVtitKamXYfH85BofsV53QS8PXsL9q49DdM7zrIN 0tYXm1yZLCPdosbVpKv3/62ce01tgklSepoM9Dj8NIZpONF4lDO8UczJk9ixi/ew0FbO 9s/Uost8WjVqXZ8IWOHmnf2cJCoG5YgcPaXvpvQmi/xZZ6oW6WNgecyYaF/xUPzOxCjz 9usi+vWknI6/tc+co2qbZ7/QgsgxrWabkPqwjkIkputBjyNqGxhDKtUqt72vO94B5J3N qdBQ== X-Gm-Message-State: ALQs6tCtt8mVTxQ1smPzxMDg6HZfE8cgor36zepasWIaFuZTEb5m7uQl AVGbhtGcQU1j4FnFdYfISBGRpCFQTTSHx1Jcs45Hgw== X-Google-Smtp-Source: AIpwx4+UjOJHy8fvXmub19VitMQ8G/jkKa6orSFutaf3o50zNIlFaoz1Vwzcn3l3Oz2Cu/y2rkgnscULOk53NfIT1n4= X-Received: by 10.200.66.83 with SMTP id r19mr4819248qtm.126.1522238584031; Wed, 28 Mar 2018 05:03:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.12.182.1 with HTTP; Wed, 28 Mar 2018 05:03:03 -0700 (PDT) In-Reply-To: References: From: Akshay Joshi Date: Wed, 28 Mar 2018 17:33:03 +0530 Message-ID: Subject: Re: Bug #3083 fix To: Joao De Almeida Pereira Cc: Neethu Mariya Joy , pgadmin-hackers Content-Type: multipart/mixed; boundary="f4f5e80910d010d941056877ca19" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --f4f5e80910d010d941056877ca19 Content-Type: multipart/alternative; boundary="f4f5e80910d010d93e056877ca17" --f4f5e80910d010d93e056877ca17 Content-Type: text/plain; charset="UTF-8" Hi On Fri, Mar 2, 2018 at 3:40 AM, Joao De Almeida Pereira < jdealmeidapereira@pivotal.io> wrote: > Hello Neethu, > We passed the patch through our CI pipeline and all tests pass. > The code looks good, but we are trying to decouple files as much as we > can so that we do not end up with files with over 1000 lines, that are hard > to read and to maintain. Also we are trying to create Unit Tests to have > more coverage in our Javascript code. > > Can you split the new implementation code into it's own file and create > some tests to ensure the behavior will not be broken in the future?iYou > have some examples on: pgadmin/browser/server_groups/servers/databases/ > external_tables/* > I have spilt the new implementation into different file. Its' been hard to write jasmine/feature test case as it requires drag event and exact co-ordinate to resize the slickgrid cell. Attached is the modified patch. > > Thanks > Joao > > On Thu, Mar 1, 2018 at 10:37 AM Neethu Mariya Joy < > neethumariyajoy@gmail.com> wrote: > >> Hi, >> I am Neethu Mariya Joy, an undergraduate pursuing BE in Computer Science >> at BITS Pilani. >> >> I've attempted to fix https://redmine.postgresql.org/issues/3083. Since >> the textarea resize feature is the default HTML feature, I have not changed >> it. Instead, I've added draggable borders to the wrapper which expands the >> textarea inside it. >> >> I'm attaching my patch as bug3083.diff below as per the contribution >> guidelines. >> >> Hope this helps. Thank you for your consideration! >> >> Sincerely, >> Neethu Mariya Joy >> GitHub | Linkedin >> >> >> >> -- *Akshay Joshi* *Sr. Software Architect * *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* --f4f5e80910d010d93e056877ca17 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

On Fri, Mar 2, 2018 at 3:40 AM, Joao De Almeida Pereira <jdea= lmeidapereira@pivotal.io> wrote:
Hello Neethu,
We passed the patch through our CI= pipeline and all tests pass.
The code looks good, but we are try= ing to decouple files as much=C2=A0 as we can so that we do not end up with= files with over 1000 lines, that are hard to read and to maintain. Also we= are trying to create Unit Tests to have more coverage in our Javascript co= de.

Can you split the new implementation code into= it's own file and create some tests to ensure the behavior will not be= broken in the future?iYou have some examples on:=C2=A0pgadmin/browser/serv= er_groups/servers/databases/external_tables/*

=C2=A0 =C2=A0 I have spilt the new implementation = into different file. Its' been hard to write jasmine/feature test case = as it requires drag event and exact co-ordinate to resize the slickgrid cel= l.
=C2=A0 =C2=A0 Attached is the modified patch.=C2=A0=C2=A0
=C2=A0 =C2=A0=C2=A0

Thanks
Joao

On Thu, Mar 1, 2018= at 10:37 AM Neethu Mariya Joy <neethumariyajoy@gmail.com> wrote:
Hi,
I am Neethu Mariya Jo= y, an undergraduate pursuing BE in Computer Science at BITS Pilani.

I've attempted to fix=C2=A0https://redmine.postgre= sql.org/issues/3083. Since the textarea=C2=A0resize feature is the defa= ult HTML feature, I have not changed it. Instead, I've added draggable = borders to the wrapper which expands the textarea inside it.
=
I'm attaching my patch as bug3083.diff below as per the = contribution guidelines.

Hope this helps. Thank yo= u for your consideration!

Sincerely,
Nee= thu Mariya Joy
GitHub=C2=A0|=C2=A0<= /span>Linkedin


<= /div>



--
=
Akshay Joshi
Sr. Software Architect
<= /font>

=

Phone: +91 20-3058= -9517
Mobile: +91 976-788-8246
= --f4f5e80910d010d93e056877ca17-- --f4f5e80910d010d941056877ca19 Content-Type: application/octet-stream; name="RM_3083_v2.patch" Content-Disposition: attachment; filename="RM_3083_v2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jfb1jogy0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvZWRpdG9ycy5qcyBi L3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvZWRpdG9ycy5qcwppbmRleCA3NjUyYmYz Li5jY2Q5MTY3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL2Vk aXRvcnMuanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9lZGl0b3JzLmpz CkBAIC0zLDk2MSArMyw5NzAgQEAKICAqIEBtb2R1bGUgRWRpdG9ycwogICogQG5hbWVzcGFjZSBT bGljawogICovCi0KLShmdW5jdGlvbigkKSB7Ci0gIC8vIHJlZ2lzdGVyIG5hbWVzcGFjZQotICAk LmV4dGVuZCh0cnVlLCB3aW5kb3csIHsKLSAgICAnU2xpY2snOiB7Ci0gICAgICAnRWRpdG9ycyc6 IHsKLSAgICAgICAgJ3BnVGV4dCc6IHBnVGV4dEVkaXRvciwKLSAgICAgICAgJ0pzb25UZXh0Jzog SnNvblRleHRFZGl0b3IsCi0gICAgICAgICdDdXN0b21OdW1iZXInOiBDdXN0b21OdW1iZXJFZGl0 b3IsCi0gICAgICAgICdDaGVja2JveCc6IHBnQ2hlY2tib3hFZGl0b3IsCi0gICAgICAgIC8vIEJl bG93IGVkaXRvciB3aWxsIHJlYWQgb25seSBlZGl0b3JzLCBKdXN0IHRvIGRpc3BsYXkgZGF0YQot ICAgICAgICAnUmVhZE9ubHlUZXh0JzogUmVhZE9ubHlUZXh0RWRpdG9yLAotICAgICAgICAnUmVh ZE9ubHlDaGVja2JveCc6IFJlYWRPbmx5Q2hlY2tib3hFZGl0b3IsCi0gICAgICAgICdSZWFkT25s eXBnVGV4dCc6IFJlYWRPbmx5cGdUZXh0RWRpdG9yLAotICAgICAgICAnUmVhZE9ubHlKc29uVGV4 dCc6IFJlYWRPbmx5SnNvblRleHRFZGl0b3IsCitkZWZpbmUoWworICAnc291cmNlcy9zbGlja2dy aWQvcmVzaXplX2VkaXRvcicsCitdLAorZnVuY3Rpb24gKHJlc2l6ZUVkaXRvcikgeworCisgIChm dW5jdGlvbigkKSB7CisgICAgLy8gcmVnaXN0ZXIgbmFtZXNwYWNlCisgICAgJC5leHRlbmQodHJ1 ZSwgd2luZG93LCB7CisgICAgICAnU2xpY2snOiB7CisgICAgICAgICdFZGl0b3JzJzogeworICAg ICAgICAgICdwZ1RleHQnOiBwZ1RleHRFZGl0b3IsCisgICAgICAgICAgJ0pzb25UZXh0JzogSnNv blRleHRFZGl0b3IsCisgICAgICAgICAgJ0N1c3RvbU51bWJlcic6IEN1c3RvbU51bWJlckVkaXRv ciwKKyAgICAgICAgICAnQ2hlY2tib3gnOiBwZ0NoZWNrYm94RWRpdG9yLAorICAgICAgICAgIC8v IEJlbG93IGVkaXRvciB3aWxsIHJlYWQgb25seSBlZGl0b3JzLCBKdXN0IHRvIGRpc3BsYXkgZGF0 YQorICAgICAgICAgICdSZWFkT25seVRleHQnOiBSZWFkT25seVRleHRFZGl0b3IsCisgICAgICAg ICAgJ1JlYWRPbmx5Q2hlY2tib3gnOiBSZWFkT25seUNoZWNrYm94RWRpdG9yLAorICAgICAgICAg ICdSZWFkT25seXBnVGV4dCc6IFJlYWRPbmx5cGdUZXh0RWRpdG9yLAorICAgICAgICAgICdSZWFk T25seUpzb25UZXh0JzogUmVhZE9ubHlKc29uVGV4dEVkaXRvciwKKyAgICAgICAgfSwKICAgICAg IH0sCi0gICAgfSwKLSAgfSk7Ci0KLSAgLy8gcmV0dXJuIHdyYXBwZXIgZWxlbWVudAotICBmdW5j dGlvbiBnZXRXcmFwcGVyKCkgewotICAgIHJldHVybiAkKCc8ZGl2IGNsYXNzPVwncGdfdGV4dF9l ZGl0b3JcJyAvPicpOwotICB9Ci0KLSAgLy8gcmV0dXJuIHRleHRhcmVhIGVsZW1lbnQKLSAgZnVu Y3Rpb24gZ2V0VGV4dEFyZWEoKSB7Ci0gICAgcmV0dXJuICQoJzx0ZXh0YXJlYSBjbGFzcz1cJ3Bn X3RleHRhcmVhIHRleHQtMTJcJyBoaWRlZm9jdXMgcm93cz01XCc+Jyk7Ci0gIH0KLQotICAvLyBH ZW5lcmF0ZSBhbmQgcmV0dXJuIGVkaXRvciBidXR0b25zCi0gIGZ1bmN0aW9uIGdldEJ1dHRvbnMo ZWRpdGFibGUpIHsKLSAgICB2YXIgJGJ1dHRvbnMgPSAkKCc8ZGl2IGNsYXNzPVwncGdfYnV0dG9u c1wnIC8+JyksCi0gICAgICBsYWJlbCA9IGVkaXRhYmxlID8gJ0NhbmNlbCcgOiAnT0snLAotICAg ICAgYnV0dG9uX3R5cGUgPSBlZGl0YWJsZSA/ICdidG4tZGFuZ2VyJyA6ICdidG4tcHJpbWFyeSc7 Ci0KLSAgICBpZiAoZWRpdGFibGUpIHsKLSAgICAgICQoJzxidXR0b24gY2xhc3M9XCdidG4gYnRu LXByaW1hcnkgZmEgZmEtbGcgZmEtc2F2ZSBsb25nX3RleHRfZWRpdG9yIHBnLWFsZXJ0aWZ5LWJ1 dHRvblwnPlNhdmU8L2J1dHRvbj4nKQotICAgICAgICAuYXBwZW5kVG8oJGJ1dHRvbnMpOworICAg IH0pOworCisgICAgLy8gcmV0dXJuIHdyYXBwZXIgZWxlbWVudAorICAgIGZ1bmN0aW9uIGdldFdy YXBwZXIoKSB7CisgICAgICByZXR1cm4gJCgnPGRpdiBjbGFzcz1cJ3BnX3RleHRfZWRpdG9yXCcg Lz4nKTsKICAgICB9CiAKLSAgICAkKCc8YnV0dG9uIGNsYXNzPVwnYnRuICcgKyBidXR0b25fdHlw ZSArICcgZmEgZmEtbGcgZmEtdGltZXMgbG9uZ190ZXh0X2VkaXRvciBwZy1hbGVydGlmeS1idXR0 b25cJz4nICsgbGFiZWwgKyAnPC9idXR0b24+JykKLSAgICAgIC5hcHBlbmRUbygkYnV0dG9ucyk7 Ci0gICAgcmV0dXJuICRidXR0b25zOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNfdmFsaWRfYXJyYXko dmFsKSB7Ci0gICAgdmFsID0gJC50cmltKHZhbCk7Ci0gICAgcmV0dXJuICEodmFsICE9ICcnICYm ICh2YWwuY2hhckF0KDApICE9ICd7JyB8fCB2YWwuY2hhckF0KHZhbC5sZW5ndGggLSAxKSAhPSAn fScpKTsKLSAgfQotICAvKgotICAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIFtkZWZhdWx0 XSBhbmQgW251bGxdIHZhbHVlcyBmb3IgY2VsbHMKLSAgICogaWYgcm93IGlzIGNvcGllZCwgb3Ro ZXJ3aXNlIHJldHVybnMgdGhlIGVkaXRvciB2YWx1ZS4KLSAgICogQHBhcmFtIHthcmdzfSBlZGl0 b3Igb2JqZWN0Ci0gICAqIEBwYXJhbSB7aXRlbX0gcm93IGNlbGwgdmFsdWVzCi0gICAqIEBwYXJh bSB7c3RhdGV9IGVudGVyZWQgdmFsdWUKLSAgICogQHBhcmFtIHtjb2x1bW5fdHlwZX0gdHlwZSBv ZiBjb2x1bW4KLSAgICovCi0gIGZ1bmN0aW9uIHNldFZhbHVlKGFyZ3MsIGl0ZW0sIHN0YXRlLCBj b2x1bW5fdHlwZSkgewotICAgIC8vIGRlY2xhcmUgYSAyLWQgYXJyYXkgd2hpY2ggdHJhY2tzIHRo ZSBzdGF0dXMgb2YgZWFjaCB1cGRhdGVkIGNlbGwKLSAgICAvLyBJZiBhIGNlbGwgaXMgZWRpdGVk IGZvciB0aGUgMXN0IHRpbWUgYW5kIHN0YXRlIGlzIG51bGwsCi0gICAgLy8gc2V0IGNlbGwgdmFs dWUgdG8gW2RlZmF1bHRdIGFuZCB1cGRhdGUgaXRzIHN0YXR1cyBbcm93XVtjZWxsXSB0byAxLgot ICAgIC8vIElmIHNhbWUgY2VsbCBpcyBlZGl0ZWQgYWdhaW4sIGFuZCBrZXB0IGJsYW5rLCBzZXQg Y2VsbCB2YWx1ZSB0byBbbnVsbF0KLQotICAgIC8vIElmIGEgcm93IGlzIGNvcGllZAotICAgIHZh ciBncmlkID0gYXJncy5ncmlkOwotICAgIGlmIChpdGVtLmlzX3Jvd19jb3BpZWQpIHsKLSAgICAg IGlmICghZ3JpZC5jb3BpZWRfcm93cykgewotICAgICAgICBncmlkLmNvcGllZF9yb3dzID0gWwot ICAgICAgICAgIFtdLAotICAgICAgICBdOwotICAgICAgfQorICAgIC8vIHJldHVybiB0ZXh0YXJl YSBlbGVtZW50CisgICAgZnVuY3Rpb24gZ2V0VGV4dEFyZWEoKSB7CisgICAgICByZXR1cm4gJCgn PHRleHRhcmVhIGNsYXNzPVwncGdfdGV4dGFyZWEgdGV4dC0xMlwnIGhpZGVmb2N1cyByb3dzPTVc Jz4nKTsKKyAgICB9CiAKLSAgICAgIHZhciBhY3RpdmVfY2VsbCA9IGdyaWQuZ2V0QWN0aXZlQ2Vs bCgpLAotICAgICAgICByb3cgPSBhY3RpdmVfY2VsbFsncm93J10sCi0gICAgICAgIGNlbGwgPSBh Y3RpdmVfY2VsbFsnY2VsbCddLAotICAgICAgICBsYXN0X3ZhbHVlID0gaXRlbVthcmdzLmNvbHVt bi5wb3NdOwotCi0gICAgICBsYXN0X3ZhbHVlID0gKGNvbHVtbl90eXBlID09PSAnbnVtYmVyJykg PwotICAgICAgICAoXy5pc0VtcHR5KGxhc3RfdmFsdWUpIHx8IGxhc3RfdmFsdWUpIDogbGFzdF92 YWx1ZTsKLQotICAgICAgaXRlbVthcmdzLmNvbHVtbi5maWVsZF0gPSBzdGF0ZTsKLSAgICAgIGlm IChsYXN0X3ZhbHVlICYmIF8uaXNOdWxsKHN0YXRlKSAmJgotICAgICAgICAoXy5pc1VuZGVmaW5l ZChncmlkLmNvcGllZF9yb3dzW3Jvd10pIHx8Ci0gICAgICAgICAgXy5pc1VuZGVmaW5lZChncmlk LmNvcGllZF9yb3dzW3Jvd11bY2VsbF0pKQotICAgICAgKSB7Ci0gICAgICAgIGl0ZW1bYXJncy5j b2x1bW4uZmllbGRdID0gdW5kZWZpbmVkOwotICAgICAgICBpZiAoZ3JpZC5jb3BpZWRfcm93c1ty b3ddID09IHVuZGVmaW5lZCkgZ3JpZC5jb3BpZWRfcm93c1tyb3ddID0gW107Ci0gICAgICAgIGdy aWQuY29waWVkX3Jvd3Nbcm93XVtjZWxsXSA9IDE7CisgICAgLy8gR2VuZXJhdGUgYW5kIHJldHVy biBlZGl0b3IgYnV0dG9ucworICAgIGZ1bmN0aW9uIGdldEJ1dHRvbnMoZWRpdGFibGUpIHsKKyAg ICAgIHZhciAkYnV0dG9ucyA9ICQoJzxkaXYgY2xhc3M9XCdwZ19idXR0b25zXCcgLz4nKSwKKyAg ICAgICAgbGFiZWwgPSBlZGl0YWJsZSA/ICdDYW5jZWwnIDogJ09LJywKKyAgICAgICAgYnV0dG9u X3R5cGUgPSBlZGl0YWJsZSA/ICdidG4tZGFuZ2VyJyA6ICdidG4tcHJpbWFyeSc7CisKKyAgICAg IGlmIChlZGl0YWJsZSkgeworICAgICAgICAkKCc8YnV0dG9uIGNsYXNzPVwnYnRuIGJ0bi1wcmlt YXJ5IGZhIGZhLWxnIGZhLXNhdmUgbG9uZ190ZXh0X2VkaXRvciBwZy1hbGVydGlmeS1idXR0b25c Jz5TYXZlPC9idXR0b24+JykKKyAgICAgICAgICAuYXBwZW5kVG8oJGJ1dHRvbnMpOwogICAgICAg fQotICAgIH0gZWxzZSB7Ci0gICAgICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0YXRlOwor CisgICAgICAkKCc8YnV0dG9uIGNsYXNzPVwnYnRuICcgKyBidXR0b25fdHlwZSArICcgZmEgZmEt bGcgZmEtdGltZXMgbG9uZ190ZXh0X2VkaXRvciBwZy1hbGVydGlmeS1idXR0b25cJz4nICsgbGFi ZWwgKyAnPC9idXR0b24+JykKKyAgICAgICAgLmFwcGVuZFRvKCRidXR0b25zKTsKKyAgICAgIHJl dHVybiAkYnV0dG9uczsKICAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBjYWxjdWxhdGVFZGl0b3JQ b3NpdGlvbihwb3NpdGlvbiwgJHdyYXBwZXIpIHsKLSAgICB2YXIgJGVkaXRfZ3JpZCA9ICR3cmFw cGVyLnBhcmVudCgpLmZpbmQoJyNkYXRhZ3JpZCcpOwotICAgIHZhciBfZWxlbV9oZWlnaHQgPSAk ZWRpdF9ncmlkLmhlaWdodCgpLAotICAgICAgaXNfaGlkZGVuLCBfcG9zaXRpb247Ci0gICAgLy8g V2UgY2Fubm90IGRpc3BsYXkgZWRpdG9yIHBhcnRpYWxseSB2aXNpYmxlIHNvIHdlIHdpbGwgbGlm dCBpdCBhYm92ZSBzZWxlY3QgY29sdW1uCi0gICAgaWYgKHBvc2l0aW9uLnRvcCA+IF9lbGVtX2hl aWdodCkgewotICAgICAgaXNfaGlkZGVuID0gcG9zaXRpb24uYm90dG9tIC0gX2VsZW1faGVpZ2h0 OworCisgICAgZnVuY3Rpb24gaXNfdmFsaWRfYXJyYXkodmFsKSB7CisgICAgICB2YWwgPSAkLnRy aW0odmFsKTsKKyAgICAgIHJldHVybiAhKHZhbCAhPSAnJyAmJiAodmFsLmNoYXJBdCgwKSAhPSAn eycgfHwgdmFsLmNoYXJBdCh2YWwubGVuZ3RoIC0gMSkgIT0gJ30nKSk7CiAgICAgfQorICAgIC8q CisgICAgICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBbZGVmYXVsdF0gYW5kIFtudWxsXSB2 YWx1ZXMgZm9yIGNlbGxzCisgICAgICogaWYgcm93IGlzIGNvcGllZCwgb3RoZXJ3aXNlIHJldHVy bnMgdGhlIGVkaXRvciB2YWx1ZS4KKyAgICAgKiBAcGFyYW0ge2FyZ3N9IGVkaXRvciBvYmplY3QK KyAgICAgKiBAcGFyYW0ge2l0ZW19IHJvdyBjZWxsIHZhbHVlcworICAgICAqIEBwYXJhbSB7c3Rh dGV9IGVudGVyZWQgdmFsdWUKKyAgICAgKiBAcGFyYW0ge2NvbHVtbl90eXBlfSB0eXBlIG9mIGNv bHVtbgorICAgICAqLworICAgIGZ1bmN0aW9uIHNldFZhbHVlKGFyZ3MsIGl0ZW0sIHN0YXRlLCBj b2x1bW5fdHlwZSkgeworICAgICAgLy8gZGVjbGFyZSBhIDItZCBhcnJheSB3aGljaCB0cmFja3Mg dGhlIHN0YXR1cyBvZiBlYWNoIHVwZGF0ZWQgY2VsbAorICAgICAgLy8gSWYgYSBjZWxsIGlzIGVk aXRlZCBmb3IgdGhlIDFzdCB0aW1lIGFuZCBzdGF0ZSBpcyBudWxsLAorICAgICAgLy8gc2V0IGNl bGwgdmFsdWUgdG8gW2RlZmF1bHRdIGFuZCB1cGRhdGUgaXRzIHN0YXR1cyBbcm93XVtjZWxsXSB0 byAxLgorICAgICAgLy8gSWYgc2FtZSBjZWxsIGlzIGVkaXRlZCBhZ2FpbiwgYW5kIGtlcHQgYmxh bmssIHNldCBjZWxsIHZhbHVlIHRvIFtudWxsXQorCisgICAgICAvLyBJZiBhIHJvdyBpcyBjb3Bp ZWQKKyAgICAgIHZhciBncmlkID0gYXJncy5ncmlkOworICAgICAgaWYgKGl0ZW0uaXNfcm93X2Nv cGllZCkgeworICAgICAgICBpZiAoIWdyaWQuY29waWVkX3Jvd3MpIHsKKyAgICAgICAgICBncmlk LmNvcGllZF9yb3dzID0gWworICAgICAgICAgICAgW10sCisgICAgICAgICAgXTsKKyAgICAgICAg fQogCi0gICAgaWYgKGlzX2hpZGRlbikgewotICAgICAgX3Bvc2l0aW9uID0gcG9zaXRpb24udG9w IC0gaXNfaGlkZGVuOwotICAgIH0gZWxzZSB7Ci0gICAgICBfcG9zaXRpb24gPSBwb3NpdGlvbi50 b3AgLSA3OworICAgICAgICB2YXIgYWN0aXZlX2NlbGwgPSBncmlkLmdldEFjdGl2ZUNlbGwoKSwK KyAgICAgICAgICByb3cgPSBhY3RpdmVfY2VsbFsncm93J10sCisgICAgICAgICAgY2VsbCA9IGFj dGl2ZV9jZWxsWydjZWxsJ10sCisgICAgICAgICAgbGFzdF92YWx1ZSA9IGl0ZW1bYXJncy5jb2x1 bW4ucG9zXTsKKworICAgICAgICBsYXN0X3ZhbHVlID0gKGNvbHVtbl90eXBlID09PSAnbnVtYmVy JykgPworICAgICAgICAgIChfLmlzRW1wdHkobGFzdF92YWx1ZSkgfHwgbGFzdF92YWx1ZSkgOiBs YXN0X3ZhbHVlOworCisgICAgICAgIGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID0gc3RhdGU7Cisg ICAgICAgIGlmIChsYXN0X3ZhbHVlICYmIF8uaXNOdWxsKHN0YXRlKSAmJgorICAgICAgICAgIChf LmlzVW5kZWZpbmVkKGdyaWQuY29waWVkX3Jvd3Nbcm93XSkgfHwKKyAgICAgICAgICAgIF8uaXNV bmRlZmluZWQoZ3JpZC5jb3BpZWRfcm93c1tyb3ddW2NlbGxdKSkKKyAgICAgICAgKSB7CisgICAg ICAgICAgaXRlbVthcmdzLmNvbHVtbi5maWVsZF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgaWYg KGdyaWQuY29waWVkX3Jvd3Nbcm93XSA9PSB1bmRlZmluZWQpIGdyaWQuY29waWVkX3Jvd3Nbcm93 XSA9IFtdOworICAgICAgICAgIGdyaWQuY29waWVkX3Jvd3Nbcm93XVtjZWxsXSA9IDE7CisgICAg ICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID0g c3RhdGU7CisgICAgICB9CiAgICAgfQotICAgIHBvc2l0aW9uLnRvcCA9IF9wb3NpdGlvbjsKIAot ICAgIHZhciBncmlkX3dpZHRoID0gJGVkaXRfZ3JpZC53aWR0aCgpLAotICAgICAgcG9wdXBfd2lk dGggPSAkd3JhcHBlci53aWR0aCgpICsgMzI7Ci0gICAgcG9wdXBfd2lkdGggKz0gcG9zaXRpb24u bGVmdDsKKyAgICBmdW5jdGlvbiBjYWxjdWxhdGVFZGl0b3JQb3NpdGlvbihwb3NpdGlvbiwgJHdy YXBwZXIpIHsKKyAgICAgIHZhciAkZWRpdF9ncmlkID0gJHdyYXBwZXIucGFyZW50KCkuZmluZCgn I2RhdGFncmlkJyk7CisgICAgICB2YXIgX2VsZW1faGVpZ2h0ID0gJGVkaXRfZ3JpZC5oZWlnaHQo KSwKKyAgICAgICAgaXNfaGlkZGVuLCBfcG9zaXRpb247CisgICAgICAvLyBXZSBjYW5ub3QgZGlz cGxheSBlZGl0b3IgcGFydGlhbGx5IHZpc2libGUgc28gd2Ugd2lsbCBsaWZ0IGl0IGFib3ZlIHNl bGVjdCBjb2x1bW4KKyAgICAgIGlmIChwb3NpdGlvbi50b3AgPiBfZWxlbV9oZWlnaHQpIHsKKyAg ICAgICAgaXNfaGlkZGVuID0gcG9zaXRpb24uYm90dG9tIC0gX2VsZW1faGVpZ2h0OworICAgICAg fQogCi0gICAgaWYgKHBvcHVwX3dpZHRoID4gZ3JpZF93aWR0aCkgewotICAgICAgcG9zaXRpb24u bGVmdCAtPSAocG9wdXBfd2lkdGggLSBncmlkX3dpZHRoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBv c2l0aW9uOwotICB9Ci0KLSAgLy8gVGV4dCBkYXRhIHR5cGUgZWRpdG9yCi0gIGZ1bmN0aW9uIHBn VGV4dEVkaXRvcihhcmdzKSB7Ci0gICAgdmFyICRpbnB1dCwgJHdyYXBwZXIsICRidXR0b25zOwot ICAgIHZhciBkZWZhdWx0VmFsdWU7Ci0gICAgdmFyIHNjb3BlID0gdGhpczsKLQotICAgIHRoaXMu aW5pdCA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyICRjb250YWluZXIgPSAkKCdib2R5Jyk7Ci0K LSAgICAgICR3cmFwcGVyID0gZ2V0V3JhcHBlcigpLmFwcGVuZFRvKCRjb250YWluZXIpOwotICAg ICAgJGlucHV0ID0gZ2V0VGV4dEFyZWEoKS5hcHBlbmRUbygkd3JhcHBlcik7Ci0gICAgICAkYnV0 dG9ucyA9IGdldEJ1dHRvbnModHJ1ZSkuYXBwZW5kVG8oJHdyYXBwZXIpOwotCi0gICAgICAkYnV0 dG9ucy5maW5kKCdidXR0b246Zmlyc3QnKS5vbignY2xpY2snLCB0aGlzLnNhdmUpOwotICAgICAg JGJ1dHRvbnMuZmluZCgnYnV0dG9uOmxhc3QnKS5vbignY2xpY2snLCB0aGlzLmNhbmNlbCk7Ci0g ICAgICAkaW5wdXQuYmluZCgna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7Ci0KLSAgICAg IHNjb3BlLnBvc2l0aW9uKGFyZ3MucG9zaXRpb24pOwotICAgICAgJGlucHV0LmZvY3VzKCkuc2Vs ZWN0KCk7Ci0gICAgfTsKLQotICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uKGUpIHsK LSAgICAgIGlmIChlLndoaWNoID09ICQudWkua2V5Q29kZS5FTlRFUiAmJiBlLmN0cmxLZXkpIHsK LSAgICAgICAgc2NvcGUuc2F2ZSgpOwotICAgICAgfSBlbHNlIGlmIChlLndoaWNoID09ICQudWku a2V5Q29kZS5FU0NBUEUpIHsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICBz Y29wZS5jYW5jZWwoKTsKLSAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUu VEFCICYmIGUuc2hpZnRLZXkpIHsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAg ICBhcmdzLmdyaWQubmF2aWdhdGVQcmV2KCk7Ci0gICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0g JC51aS5rZXlDb2RlLlRBQikgewotICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAg IGFyZ3MuZ3JpZC5uYXZpZ2F0ZU5leHQoKTsKKyAgICAgIGlmIChpc19oaWRkZW4pIHsKKyAgICAg ICAgX3Bvc2l0aW9uID0gcG9zaXRpb24udG9wIC0gaXNfaGlkZGVuOworICAgICAgfSBlbHNlIHsK KyAgICAgICAgX3Bvc2l0aW9uID0gcG9zaXRpb24udG9wIC0gNzsKICAgICAgIH0KLSAgICB9Owot Ci0gICAgdGhpcy5zYXZlID0gZnVuY3Rpb24oKSB7Ci0gICAgICBhcmdzLmNvbW1pdENoYW5nZXMo KTsKLSAgICB9OwotCi0gICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKLSAgICAgICRpbnB1 dC52YWwoZGVmYXVsdFZhbHVlKTsKLSAgICAgIGFyZ3MuY2FuY2VsQ2hhbmdlcygpOwotICAgIH07 Ci0KLSAgICB0aGlzLmhpZGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICR3cmFwcGVyLmhpZGUoKTsK LSAgICB9OwotCi0gICAgdGhpcy5zaG93ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkd3JhcHBlci5z aG93KCk7Ci0gICAgfTsKLQotICAgIHRoaXMucG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikg ewotICAgICAgY2FsY3VsYXRlRWRpdG9yUG9zaXRpb24ocG9zaXRpb24sICR3cmFwcGVyKTsKLSAg ICAgICR3cmFwcGVyCi0gICAgICAgIC5jc3MoJ3RvcCcsIHBvc2l0aW9uLnRvcCkKLSAgICAgICAg LmNzcygnbGVmdCcsIHBvc2l0aW9uLmxlZnQpOwotICAgIH07Ci0KLSAgICB0aGlzLmRlc3Ryb3kg PSBmdW5jdGlvbigpIHsKLSAgICAgICR3cmFwcGVyLnJlbW92ZSgpOwotICAgIH07Ci0KLSAgICB0 aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkaW5wdXQuZm9jdXMoKTsKLSAgICB9Owot Ci0gICAgLy8gV2hlbiB0ZXh0IGVkaXRvciBvcGVucwotICAgIHRoaXMubG9hZFZhbHVlID0gZnVu Y3Rpb24oaXRlbSkgewotICAgICAgaWYgKAotICAgICAgICBfLmlzVW5kZWZpbmVkKGl0ZW1bYXJn cy5jb2x1bW4uZmllbGRdKSB8fAotICAgICAgICBfLmlzTnVsbChpdGVtW2FyZ3MuY29sdW1uLmZp ZWxkXSkKLSAgICAgICkgewotICAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1ZSA9ICcnKTsK LSAgICAgICAgcmV0dXJuOworICAgICAgcG9zaXRpb24udG9wID0gX3Bvc2l0aW9uOworCisgICAg ICB2YXIgZ3JpZF93aWR0aCA9ICRlZGl0X2dyaWQud2lkdGgoKSwKKyAgICAgICAgcG9wdXBfd2lk dGggPSAkd3JhcHBlci53aWR0aCgpICsgMzI7CisgICAgICBwb3B1cF93aWR0aCArPSBwb3NpdGlv bi5sZWZ0OworCisgICAgICBpZiAocG9wdXBfd2lkdGggPiBncmlkX3dpZHRoKSB7CisgICAgICAg IHBvc2l0aW9uLmxlZnQgLT0gKHBvcHVwX3dpZHRoIC0gZ3JpZF93aWR0aCk7CiAgICAgICB9Cisg ICAgICByZXR1cm4gcG9zaXRpb247CisgICAgfQorCisgICAgLy8gVGV4dCBkYXRhIHR5cGUgZWRp dG9yCisgICAgZnVuY3Rpb24gcGdUZXh0RWRpdG9yKGFyZ3MpIHsKKyAgICAgIHZhciAkaW5wdXQs ICR3cmFwcGVyLCAkYnV0dG9uczsKKyAgICAgIHZhciBkZWZhdWx0VmFsdWU7CisgICAgICB2YXIg c2NvcGUgPSB0aGlzOworCisgICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg dmFyICRjb250YWluZXIgPSAkKCdib2R5Jyk7CisKKyAgICAgICAgJHdyYXBwZXIgPSBnZXRXcmFw cGVyKCkuYXBwZW5kVG8oJGNvbnRhaW5lcik7CisgICAgICAgICRpbnB1dCA9IGdldFRleHRBcmVh KCkuYXBwZW5kVG8oJHdyYXBwZXIpOworICAgICAgICAkYnV0dG9ucyA9IGdldEJ1dHRvbnModHJ1 ZSkuYXBwZW5kVG8oJHdyYXBwZXIpOworCisgICAgICAgICRidXR0b25zLmZpbmQoJ2J1dHRvbjpm aXJzdCcpLm9uKCdjbGljaycsIHRoaXMuc2F2ZSk7CisgICAgICAgICRidXR0b25zLmZpbmQoJ2J1 dHRvbjpsYXN0Jykub24oJ2NsaWNrJywgdGhpcy5jYW5jZWwpOworICAgICAgICAkaW5wdXQuYmlu ZCgna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7CisKKyAgICAgICAgcmVzaXplRWRpdG9y LnJlc2l6ZUNvbnRlbnRPbkRyYWcoJHdyYXBwZXIsICRpbnB1dCk7CisgICAgICAgIHNjb3BlLnBv c2l0aW9uKGFyZ3MucG9zaXRpb24pOworICAgICAgICAkaW5wdXQuZm9jdXMoKS5zZWxlY3QoKTsK KyAgICAgIH07CisKKyAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uKGUpIHsKKyAg ICAgICAgaWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLkVOVEVSICYmIGUuY3RybEtleSkgewor ICAgICAgICAgIHNjb3BlLnNhdmUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChlLndoaWNoID09ICQu dWkua2V5Q29kZS5FU0NBUEUpIHsKKyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAg ICAgICAgc2NvcGUuY2FuY2VsKCk7CisgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSAkLnVp LmtleUNvZGUuVEFCICYmIGUuc2hpZnRLZXkpIHsKKyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0 KCk7CisgICAgICAgICAgYXJncy5ncmlkLm5hdmlnYXRlUHJldigpOworICAgICAgICB9IGVsc2Ug aWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLlRBQikgeworICAgICAgICAgIGUucHJldmVudERl ZmF1bHQoKTsKKyAgICAgICAgICBhcmdzLmdyaWQubmF2aWdhdGVOZXh0KCk7CisgICAgICAgIH0K KyAgICAgIH07CisKKyAgICAgIHRoaXMuc2F2ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBhcmdz LmNvbW1pdENoYW5nZXMoKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuY2FuY2VsID0gZnVuY3Rp b24oKSB7CisgICAgICAgICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgYXJncy5j YW5jZWxDaGFuZ2VzKCk7CisgICAgICB9OworCisgICAgICB0aGlzLmhpZGUgPSBmdW5jdGlvbigp IHsKKyAgICAgICAgJHdyYXBwZXIuaGlkZSgpOworICAgICAgfTsKKworICAgICAgdGhpcy5zaG93 ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICR3cmFwcGVyLnNob3coKTsKKyAgICAgIH07CisKKyAg ICAgIHRoaXMucG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgICAgICBjYWxjdWxh dGVFZGl0b3JQb3NpdGlvbihwb3NpdGlvbiwgJHdyYXBwZXIpOworICAgICAgICAkd3JhcHBlcgor ICAgICAgICAgIC5jc3MoJ3RvcCcsIHBvc2l0aW9uLnRvcCkKKyAgICAgICAgICAuY3NzKCdsZWZ0 JywgcG9zaXRpb24ubGVmdCk7CisgICAgICB9OwogCi0gICAgICBpZiAoIWFyZ3MuY29sdW1uLmlz X2FycmF5KSB7Ci0gICAgICAgIGlmIChpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9PT0gJycpIHsK LSAgICAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1ZSA9ICdcJ1wnJyk7Ci0gICAgICAgIH0g ZWxzZSBpZiAoaXRlbVthcmdzLmNvbHVtbi5maWVsZF0gPT09ICdcJ1wnJykgewotICAgICAgICAg ICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlID0gJ1xcXCdcXFwnJyk7Ci0gICAgICAgIH0gZWxzZSBp ZiAoaXRlbVthcmdzLmNvbHVtbi5maWVsZF0gPT09ICciIicpIHsKLSAgICAgICAgICAkaW5wdXQu dmFsKGRlZmF1bHRWYWx1ZSA9ICdcXCJcXCInKTsKKyAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0 aW9uKCkgeworICAgICAgICAkd3JhcHBlci5yZW1vdmUoKTsKKyAgICAgIH07CisKKyAgICAgIHRo aXMuZm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgJGlucHV0LmZvY3VzKCk7CisgICAgICB9 OworCisgICAgICAvLyBXaGVuIHRleHQgZWRpdG9yIG9wZW5zCisgICAgICB0aGlzLmxvYWRWYWx1 ZSA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAgICAgaWYgKAorICAgICAgICAgIF8uaXNVbmRlZmlu ZWQoaXRlbVthcmdzLmNvbHVtbi5maWVsZF0pIHx8CisgICAgICAgICAgXy5pc051bGwoaXRlbVth cmdzLmNvbHVtbi5maWVsZF0pCisgICAgICAgICkgeworICAgICAgICAgICRpbnB1dC52YWwoZGVm YXVsdFZhbHVlID0gJycpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg IGlmICghYXJncy5jb2x1bW4uaXNfYXJyYXkpIHsKKyAgICAgICAgICBpZiAoaXRlbVthcmdzLmNv bHVtbi5maWVsZF0gPT09ICcnKSB7CisgICAgICAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1 ZSA9ICdcJ1wnJyk7CisgICAgICAgICAgfSBlbHNlIGlmIChpdGVtW2FyZ3MuY29sdW1uLmZpZWxk XSA9PT0gJ1wnXCcnKSB7CisgICAgICAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1ZSA9ICdc XFwnXFxcJycpOworICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVthcmdzLmNvbHVtbi5maWVsZF0g PT09ICciIicpIHsKKyAgICAgICAgICAgICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlID0gJ1xcIlxc IicpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRW YWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdKTsKKyAgICAgICAgICAgICRpbnB1dC5zZWxl Y3QoKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgJGlucHV0LnZh bChkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSk7CiAgICAgICAgICAgJGlu cHV0LnNlbGVjdCgpOwogICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAkaW5wdXQu dmFsKGRlZmF1bHRWYWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdKTsKLSAgICAgICAgJGlu cHV0LnNlbGVjdCgpOwotICAgICAgfQotICAgIH07CisgICAgICB9OwogCi0gICAgdGhpcy5zZXJp YWxpemVWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1 bmN0aW9uKCkgewogCi0gICAgICB2YXIgdmFsdWUgPSAkaW5wdXQudmFsKCk7Ci0gICAgICAvLyBJ ZiBlbXB0eSByZXR1cm4gbnVsbAotICAgICAgaWYgKHZhbHVlID09PSAnJykgewotICAgICAgICBy ZXR1cm4gbnVsbDsKLSAgICAgIH0KKyAgICAgICAgdmFyIHZhbHVlID0gJGlucHV0LnZhbCgpOwor ICAgICAgICAvLyBJZiBlbXB0eSByZXR1cm4gbnVsbAorICAgICAgICBpZiAodmFsdWUgPT09ICcn KSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KIAotICAgICAgaWYgKCFhcmdz LmNvbHVtbi5pc19hcnJheSkgewotICAgICAgICBpZiAodmFsdWUgPT09ICdcJ1wnJyB8fCB2YWx1 ZSA9PT0gJyIiJykgewotICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAgfSBlbHNlIGlmICh2 YWx1ZSA9PT0gJ1xcXCdcXFwnJykgewotICAgICAgICAgIHJldHVybiAnXCdcJyc7Ci0gICAgICAg IH0gZWxzZSBpZiAodmFsdWUgPT09ICdcXCJcXCInKSB7Ci0gICAgICAgICAgcmV0dXJuICciIic7 CisgICAgICAgIGlmICghYXJncy5jb2x1bW4uaXNfYXJyYXkpIHsKKyAgICAgICAgICBpZiAodmFs dWUgPT09ICdcJ1wnJyB8fCB2YWx1ZSA9PT0gJyIiJykgeworICAgICAgICAgICAgcmV0dXJuICcn OworICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdcXFwnXFxcJycpIHsKKyAgICAgICAg ICAgIHJldHVybiAnXCdcJyc7CisgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ1xcIlxc IicpIHsKKyAgICAgICAgICAgIHJldHVybiAnIiInOworICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAg ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICByZXR1cm4gJC50cmltKHZhbHVlKTsKICAg ICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuICQudHJpbSh2YWx1ZSk7Ci0g ICAgICB9Ci0gICAgfTsKKyAgICAgIH07CiAKLSAgICB0aGlzLmFwcGx5VmFsdWUgPSBmdW5jdGlv bihpdGVtLCBzdGF0ZSkgewotICAgICAgc2V0VmFsdWUoYXJncywgaXRlbSwgc3RhdGUsICd0ZXh0 Jyk7Ci0gICAgfTsKKyAgICAgIHRoaXMuYXBwbHlWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0sIHN0YXRl KSB7CisgICAgICAgIHNldFZhbHVlKGFyZ3MsIGl0ZW0sIHN0YXRlLCAndGV4dCcpOworICAgICAg fTsKIAotICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbigpIHsKLSAgICAgIC8vIFVz ZSBfLmlzTnVsbCh2YWx1ZSkgZm9yIGNvbXBhcmlzb24gZm9yIG51bGwgaW5zdGVhZCBvZgotICAg ICAgLy8gZGVmYXVsdFZhbHVlID09IG51bGwsIGJlY2F1c2UgaXQgcmV0dXJucyB0cnVlIGZvciB1 bmRlZmluZWQgdmFsdWUuCi0gICAgICBpZiAoJGlucHV0LnZhbCgpID09ICcnICYmIF8uaXNVbmRl ZmluZWQoZGVmYXVsdFZhbHVlKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9IGVs c2UgewotICAgICAgICByZXR1cm4gKCEoJGlucHV0LnZhbCgpID09ICcnICYmIF8uaXNOdWxsKGRl ZmF1bHRWYWx1ZSkpKSAmJgotICAgICAgICAgICgkaW5wdXQudmFsKCkgIT09IGRlZmF1bHRWYWx1 ZSk7Ci0gICAgICB9Ci0gICAgfTsKKyAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlv bigpIHsKKyAgICAgICAgLy8gVXNlIF8uaXNOdWxsKHZhbHVlKSBmb3IgY29tcGFyaXNvbiBmb3Ig bnVsbCBpbnN0ZWFkIG9mCisgICAgICAgIC8vIGRlZmF1bHRWYWx1ZSA9PSBudWxsLCBiZWNhdXNl IGl0IHJldHVybnMgdHJ1ZSBmb3IgdW5kZWZpbmVkIHZhbHVlLgorICAgICAgICBpZiAoJGlucHV0 LnZhbCgpID09ICcnICYmIF8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkgeworICAgICAgICAg IHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gKCEoJGlu cHV0LnZhbCgpID09ICcnICYmIF8uaXNOdWxsKGRlZmF1bHRWYWx1ZSkpKSAmJgorICAgICAgICAg ICAgKCRpbnB1dC52YWwoKSAhPT0gZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfTsK IAotICAgIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbigpIHsKLSAgICAgIGlmIChhcmdzLmNvbHVt bi52YWxpZGF0b3IpIHsKLSAgICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHRzID0gYXJncy5jb2x1 bW4udmFsaWRhdG9yKCRpbnB1dC52YWwoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGlvblJlc3Vs dHMudmFsaWQpIHsKLSAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdHM7CisgICAgICB0 aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChhcmdzLmNvbHVtbi52YWxp ZGF0b3IpIHsKKyAgICAgICAgICB2YXIgdmFsaWRhdGlvblJlc3VsdHMgPSBhcmdzLmNvbHVtbi52 YWxpZGF0b3IoJGlucHV0LnZhbCgpKTsKKyAgICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHRz LnZhbGlkKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdHM7CisgICAgICAg ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ3MuY29sdW1uLmlzX2FycmF5ICYmICFp c192YWxpZF9hcnJheSgkaW5wdXQudmFsKCkpKSB7CisgICAgICAgICAgcmV0dXJuIHsKKyAgICAg ICAgICAgIHZhbGlkOiBmYWxzZSwKKyAgICAgICAgICAgIG1zZzogJ0FycmF5IG11c3Qgc3RhcnQg d2l0aCBcJ3tcJyBhbmQgZW5kIHdpdGggXCd9XCcnLAorICAgICAgICAgIH07CiAgICAgICAgIH0K LSAgICAgIH0KIAotICAgICAgaWYgKGFyZ3MuY29sdW1uLmlzX2FycmF5ICYmICFpc192YWxpZF9h cnJheSgkaW5wdXQudmFsKCkpKSB7CiAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgdmFsaWQ6 IGZhbHNlLAotICAgICAgICAgIG1zZzogJ0FycmF5IG11c3Qgc3RhcnQgd2l0aCBcJ3tcJyBhbmQg ZW5kIHdpdGggXCd9XCcnLAorICAgICAgICAgIHZhbGlkOiB0cnVlLAorICAgICAgICAgIG1zZzog bnVsbCwKICAgICAgICAgfTsKLSAgICAgIH0KKyAgICAgIH07CiAKLSAgICAgIHJldHVybiB7Ci0g ICAgICAgIHZhbGlkOiB0cnVlLAotICAgICAgICBtc2c6IG51bGwsCi0gICAgICB9OwotICAgIH07 Ci0KLSAgICB0aGlzLmluaXQoKTsKLSAgfQotCi0gIC8vIEpTT04gZGF0YSB0eXBlIGVkaXRvcgot ICBmdW5jdGlvbiBKc29uVGV4dEVkaXRvcihhcmdzKSB7Ci0gICAgdmFyICRpbnB1dCwgJHdyYXBw ZXIsICRidXR0b25zOwotICAgIHZhciBkZWZhdWx0VmFsdWU7Ci0gICAgdmFyIHNjb3BlID0gdGhp czsKLQotICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyICRjb250YWluZXIg PSAkKCdib2R5Jyk7Ci0KLSAgICAgICR3cmFwcGVyID0gZ2V0V3JhcHBlcigpLmFwcGVuZFRvKCRj b250YWluZXIpOwotICAgICAgJGlucHV0ID0gZ2V0VGV4dEFyZWEoKS5hcHBlbmRUbygkd3JhcHBl cik7Ci0gICAgICAkYnV0dG9ucyA9IGdldEJ1dHRvbnModHJ1ZSkuYXBwZW5kVG8oJHdyYXBwZXIp OwotCi0gICAgICAkYnV0dG9ucy5maW5kKCdidXR0b246Zmlyc3QnKS5vbignY2xpY2snLCB0aGlz LnNhdmUpOwotICAgICAgJGJ1dHRvbnMuZmluZCgnYnV0dG9uOmxhc3QnKS5vbignY2xpY2snLCB0 aGlzLmNhbmNlbCk7Ci0gICAgICAkaW5wdXQuYmluZCgna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5 RG93bik7Ci0KLSAgICAgIHNjb3BlLnBvc2l0aW9uKGFyZ3MucG9zaXRpb24pOwotICAgICAgJGlu cHV0LmZvY3VzKCkuc2VsZWN0KCk7Ci0gICAgfTsKLQotICAgIHRoaXMuaGFuZGxlS2V5RG93biA9 IGZ1bmN0aW9uKGUpIHsKLSAgICAgIGlmIChlLndoaWNoID09ICQudWkua2V5Q29kZS5FTlRFUiAm JiBlLmN0cmxLZXkpIHsKLSAgICAgICAgc2NvcGUuc2F2ZSgpOwotICAgICAgfSBlbHNlIGlmIChl LndoaWNoID09ICQudWkua2V5Q29kZS5FU0NBUEUpIHsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVs dCgpOwotICAgICAgICBzY29wZS5jYW5jZWwoKTsKLSAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9 PSAkLnVpLmtleUNvZGUuVEFCICYmIGUuc2hpZnRLZXkpIHsKLSAgICAgICAgZS5wcmV2ZW50RGVm YXVsdCgpOwotICAgICAgICBhcmdzLmdyaWQubmF2aWdhdGVQcmV2KCk7Ci0gICAgICB9IGVsc2Ug aWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLlRBQikgewotICAgICAgICBlLnByZXZlbnREZWZh dWx0KCk7Ci0gICAgICAgIGFyZ3MuZ3JpZC5uYXZpZ2F0ZU5leHQoKTsKLSAgICAgIH0KLSAgICB9 OwotCi0gICAgdGhpcy5zYXZlID0gZnVuY3Rpb24oKSB7Ci0gICAgICBhcmdzLmNvbW1pdENoYW5n ZXMoKTsKLSAgICB9OwotCi0gICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKLSAgICAgICRp bnB1dC52YWwoZGVmYXVsdFZhbHVlKTsKLSAgICAgIGFyZ3MuY2FuY2VsQ2hhbmdlcygpOwotICAg IH07Ci0KLSAgICB0aGlzLmhpZGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICR3cmFwcGVyLmhpZGUo KTsKLSAgICB9OwotCi0gICAgdGhpcy5zaG93ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkd3JhcHBl ci5zaG93KCk7Ci0gICAgfTsKLQotICAgIHRoaXMucG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlv bikgewotICAgICAgY2FsY3VsYXRlRWRpdG9yUG9zaXRpb24ocG9zaXRpb24sICR3cmFwcGVyKTsK LSAgICAgICR3cmFwcGVyCi0gICAgICAgIC5jc3MoJ3RvcCcsIHBvc2l0aW9uLnRvcCkKLSAgICAg ICAgLmNzcygnbGVmdCcsIHBvc2l0aW9uLmxlZnQpOwotICAgIH07Ci0KLSAgICB0aGlzLmRlc3Ry b3kgPSBmdW5jdGlvbigpIHsKLSAgICAgICR3cmFwcGVyLnJlbW92ZSgpOwotICAgIH07Ci0KLSAg ICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkaW5wdXQuZm9jdXMoKTsKLSAgICB9 OwotCi0gICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICB2YXIgZGF0 YSA9IGRlZmF1bHRWYWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdOwotICAgICAgaWYgKGRh dGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7 Ci0gICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCA0KTsKLSAgICAgIH0g ZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgewotICAgICAgICB2YXIgdGVtcCA9IFtdOwot ICAgICAgICAkLmVhY2goZGF0YSwgZnVuY3Rpb24oaSwgdmFsKSB7Ci0gICAgICAgICAgaWYgKHR5 cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgICB0ZW1wLnB1c2goSlNPTi5zdHJp bmdpZnkodmFsLCBudWxsLCA0KSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRl bXAucHVzaCh2YWwpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGRhdGEgPSAn WycgKyB0ZW1wLmpvaW4oKSArICddJzsKLSAgICAgIH0KLSAgICAgICRpbnB1dC52YWwoZGF0YSk7 Ci0gICAgICAkaW5wdXQuc2VsZWN0KCk7Ci0gICAgfTsKKyAgICAgIHRoaXMuaW5pdCgpOworICAg IH0KIAotICAgIHRoaXMuc2VyaWFsaXplVmFsdWUgPSBmdW5jdGlvbigpIHsKLSAgICAgIGlmICgk aW5wdXQudmFsKCkgPT09ICcnKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAg ICAgcmV0dXJuICRpbnB1dC52YWwoKTsKLSAgICB9OworICAgIC8vIEpTT04gZGF0YSB0eXBlIGVk aXRvcgorICAgIGZ1bmN0aW9uIEpzb25UZXh0RWRpdG9yKGFyZ3MpIHsKKyAgICAgIHZhciAkaW5w dXQsICR3cmFwcGVyLCAkYnV0dG9uczsKKyAgICAgIHZhciBkZWZhdWx0VmFsdWU7CisgICAgICB2 YXIgc2NvcGUgPSB0aGlzOwogCi0gICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24oaXRlbSwg c3RhdGUpIHsKLSAgICAgIHNldFZhbHVlKGFyZ3MsIGl0ZW0sIHN0YXRlLCAndGV4dCcpOwotICAg IH07CisgICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyICRjb250YWlu ZXIgPSAkKCdib2R5Jyk7CiAKLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7 Ci0gICAgICBpZiAoJGlucHV0LnZhbCgpID09ICcnICYmIF8uaXNVbmRlZmluZWQoZGVmYXVsdFZh bHVlKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBy ZXR1cm4gKCEoJGlucHV0LnZhbCgpID09ICcnICYmIF8uaXNOdWxsKGRlZmF1bHRWYWx1ZSkpKSAm JiAoJGlucHV0LnZhbCgpICE9IGRlZmF1bHRWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfTsKKyAgICAg ICAgJHdyYXBwZXIgPSBnZXRXcmFwcGVyKCkuYXBwZW5kVG8oJGNvbnRhaW5lcik7CisgICAgICAg ICRpbnB1dCA9IGdldFRleHRBcmVhKCkuYXBwZW5kVG8oJHdyYXBwZXIpOworICAgICAgICAkYnV0 dG9ucyA9IGdldEJ1dHRvbnModHJ1ZSkuYXBwZW5kVG8oJHdyYXBwZXIpOworCisgICAgICAgICRi dXR0b25zLmZpbmQoJ2J1dHRvbjpmaXJzdCcpLm9uKCdjbGljaycsIHRoaXMuc2F2ZSk7CisgICAg ICAgICRidXR0b25zLmZpbmQoJ2J1dHRvbjpsYXN0Jykub24oJ2NsaWNrJywgdGhpcy5jYW5jZWwp OworICAgICAgICAkaW5wdXQuYmluZCgna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7CisK KyAgICAgICAgcmVzaXplRWRpdG9yLnJlc2l6ZUNvbnRlbnRPbkRyYWcoJHdyYXBwZXIsICRpbnB1 dCk7CisgICAgICAgIHNjb3BlLnBvc2l0aW9uKGFyZ3MucG9zaXRpb24pOworICAgICAgICAkaW5w dXQuZm9jdXMoKS5zZWxlY3QoKTsKKyAgICAgIH07CiAKLSAgICB0aGlzLnZhbGlkYXRlID0gZnVu Y3Rpb24oKSB7Ci0gICAgICBpZiAoYXJncy5jb2x1bW4udmFsaWRhdG9yKSB7Ci0gICAgICAgIHZh ciB2YWxpZGF0aW9uUmVzdWx0cyA9IGFyZ3MuY29sdW1uLnZhbGlkYXRvcigkaW5wdXQudmFsKCkp OwotICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHRzLnZhbGlkKSB7Ci0gICAgICAgICAgcmV0 dXJuIHZhbGlkYXRpb25SZXN1bHRzOworICAgICAgdGhpcy5oYW5kbGVLZXlEb3duID0gZnVuY3Rp b24oZSkgeworICAgICAgICBpZiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUuRU5URVIgJiYgZS5j dHJsS2V5KSB7CisgICAgICAgICAgc2NvcGUuc2F2ZSgpOworICAgICAgICB9IGVsc2UgaWYgKGUu d2hpY2ggPT0gJC51aS5rZXlDb2RlLkVTQ0FQRSkgeworICAgICAgICAgIGUucHJldmVudERlZmF1 bHQoKTsKKyAgICAgICAgICBzY29wZS5jYW5jZWwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChlLndo aWNoID09ICQudWkua2V5Q29kZS5UQUIgJiYgZS5zaGlmdEtleSkgeworICAgICAgICAgIGUucHJl dmVudERlZmF1bHQoKTsKKyAgICAgICAgICBhcmdzLmdyaWQubmF2aWdhdGVQcmV2KCk7CisgICAg ICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUuVEFCKSB7CisgICAgICAgICAg ZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgIGFyZ3MuZ3JpZC5uYXZpZ2F0ZU5leHQoKTsK ICAgICAgICAgfQotICAgICAgfQorICAgICAgfTsKIAotICAgICAgcmV0dXJuIHsKLSAgICAgICAg dmFsaWQ6IHRydWUsCi0gICAgICAgIG1zZzogbnVsbCwKLSAgICAgIH07Ci0gICAgfTsKLQotICAg IHRoaXMuaW5pdCgpOwotICB9Ci0KLSAgLy8gVGV4dCBkYXRhIHR5cGUgZWRpdG9yCi0gIGZ1bmN0 aW9uIFJlYWRPbmx5cGdUZXh0RWRpdG9yKGFyZ3MpIHsKLSAgICB2YXIgJGlucHV0LCAkd3JhcHBl ciwgJGJ1dHRvbnM7Ci0gICAgdmFyIGRlZmF1bHRWYWx1ZTsKLSAgICB2YXIgc2NvcGUgPSB0aGlz OwotCi0gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgJGNvbnRhaW5lciA9 ICQoJ2JvZHknKTsKLQotICAgICAgJHdyYXBwZXIgPSBnZXRXcmFwcGVyKCkuYXBwZW5kVG8oJGNv bnRhaW5lcik7Ci0gICAgICAkaW5wdXQgPSBnZXRUZXh0QXJlYSgpLmFwcGVuZFRvKCR3cmFwcGVy KTsKLSAgICAgICRidXR0b25zID0gZ2V0QnV0dG9ucyhmYWxzZSkuYXBwZW5kVG8oJHdyYXBwZXIp OwotCi0gICAgICAkYnV0dG9ucy5maW5kKCdidXR0b246Zmlyc3QnKS5vbignY2xpY2snLCB0aGlz LmNhbmNlbCk7Ci0gICAgICAkaW5wdXQuYmluZCgna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93 bik7Ci0KLSAgICAgIHNjb3BlLnBvc2l0aW9uKGFyZ3MucG9zaXRpb24pOwotICAgICAgJGlucHV0 LmZvY3VzKCkuc2VsZWN0KCk7Ci0gICAgfTsKLQotICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IGZ1 bmN0aW9uKGUpIHsKLSAgICAgIGlmIChlLndoaWNoID09ICQudWkua2V5Q29kZS5FTlRFUiAmJiBl LmN0cmxLZXkpIHsKLSAgICAgICAgc2NvcGUuY2FuY2VsKCk7Ci0gICAgICB9IGVsc2UgaWYgKGUu d2hpY2ggPT0gJC51aS5rZXlDb2RlLkVTQ0FQRSkgewotICAgICAgICBlLnByZXZlbnREZWZhdWx0 KCk7Ci0gICAgICAgIHNjb3BlLmNhbmNlbCgpOwotICAgICAgfSBlbHNlIGlmIChlLndoaWNoID09 ICQudWkua2V5Q29kZS5UQUIgJiYgZS5zaGlmdEtleSkgewotICAgICAgICBzY29wZS5jYW5jZWwo KTsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICBhcmdzLmdyaWQubmF2aWdh dGVQcmV2KCk7Ci0gICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLlRBQikg ewotICAgICAgICBzY29wZS5jYW5jZWwoKTsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwot ICAgICAgICBhcmdzLmdyaWQubmF2aWdhdGVOZXh0KCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAg IHRoaXMuY2FuY2VsID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1 ZSk7Ci0gICAgICBhcmdzLmNhbmNlbENoYW5nZXMoKTsKLSAgICB9OwotCi0gICAgdGhpcy5oaWRl ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkd3JhcHBlci5oaWRlKCk7Ci0gICAgfTsKLQotICAgIHRo aXMuc2hvdyA9IGZ1bmN0aW9uKCkgewotICAgICAgJHdyYXBwZXIuc2hvdygpOwotICAgIH07Ci0K LSAgICB0aGlzLnBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKLSAgICAgIGNhbGN1bGF0 ZUVkaXRvclBvc2l0aW9uKHBvc2l0aW9uLCAkd3JhcHBlcik7Ci0gICAgICAkd3JhcHBlcgotICAg ICAgICAuY3NzKCd0b3AnLCBwb3NpdGlvbi50b3ApCi0gICAgICAgIC5jc3MoJ2xlZnQnLCBwb3Np dGlvbi5sZWZ0KTsKLSAgICB9OwotCi0gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7Ci0g ICAgICAkd3JhcHBlci5yZW1vdmUoKTsKLSAgICB9OwotCi0gICAgdGhpcy5mb2N1cyA9IGZ1bmN0 aW9uKCkgewotICAgICAgJGlucHV0LmZvY3VzKCk7Ci0gICAgfTsKLQotICAgIHRoaXMubG9hZFZh bHVlID0gZnVuY3Rpb24oaXRlbSkgewotICAgICAgJGlucHV0LnZhbChkZWZhdWx0VmFsdWUgPSBp dGVtW2FyZ3MuY29sdW1uLmZpZWxkXSk7Ci0gICAgICAkaW5wdXQuc2VsZWN0KCk7Ci0gICAgfTsK LQotICAgIHRoaXMuc2VyaWFsaXplVmFsdWUgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiAk aW5wdXQudmFsKCk7Ci0gICAgfTsKLQotICAgIHRoaXMuYXBwbHlWYWx1ZSA9IGZ1bmN0aW9uKGl0 ZW0sIHN0YXRlKSB7Ci0gICAgICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0YXRlOwotICAg IH07Ci0KLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1 cm4gKCEoJGlucHV0LnZhbCgpID09ICcnICYmIGRlZmF1bHRWYWx1ZSA9PSBudWxsKSkgJiYgKCRp bnB1dC52YWwoKSAhPSBkZWZhdWx0VmFsdWUpOwotICAgIH07Ci0KLSAgICB0aGlzLnZhbGlkYXRl ID0gZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoYXJncy5jb2x1bW4udmFsaWRhdG9yKSB7Ci0gICAg ICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0cyA9IGFyZ3MuY29sdW1uLnZhbGlkYXRvcigkaW5wdXQu dmFsKCkpOwotICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHRzLnZhbGlkKSB7Ci0gICAgICAg ICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHRzOworICAgICAgdGhpcy5zYXZlID0gZnVuY3Rpb24o KSB7CisgICAgICAgIGFyZ3MuY29tbWl0Q2hhbmdlcygpOworICAgICAgfTsKKworICAgICAgdGhp cy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgJGlucHV0LnZhbChkZWZhdWx0VmFsdWUp OworICAgICAgICBhcmdzLmNhbmNlbENoYW5nZXMoKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMu aGlkZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAkd3JhcHBlci5oaWRlKCk7CisgICAgICB9Owor CisgICAgICB0aGlzLnNob3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgJHdyYXBwZXIuc2hvdygp OworICAgICAgfTsKKworICAgICAgdGhpcy5wb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7 CisgICAgICAgIGNhbGN1bGF0ZUVkaXRvclBvc2l0aW9uKHBvc2l0aW9uLCAkd3JhcHBlcik7Cisg ICAgICAgICR3cmFwcGVyCisgICAgICAgICAgLmNzcygndG9wJywgcG9zaXRpb24udG9wKQorICAg ICAgICAgIC5jc3MoJ2xlZnQnLCBwb3NpdGlvbi5sZWZ0KTsKKyAgICAgIH07CisKKyAgICAgIHRo aXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAkd3JhcHBlci5yZW1vdmUoKTsKKyAg ICAgIH07CisKKyAgICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgJGlucHV0 LmZvY3VzKCk7CisgICAgICB9OworCisgICAgICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uKGl0 ZW0pIHsKKyAgICAgICAgdmFyIGRhdGEgPSBkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1u LmZpZWxkXTsKKyAgICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYm ICFBcnJheS5pc0FycmF5KGRhdGEpKSB7CisgICAgICAgICAgZGF0YSA9IEpTT04uc3RyaW5naWZ5 KGRhdGEsIG51bGwsIDQpOworICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkp IHsKKyAgICAgICAgICB2YXIgdGVtcCA9IFtdOworICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5j dGlvbihpLCB2YWwpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykg eworICAgICAgICAgICAgICB0ZW1wLnB1c2goSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCA0KSk7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICB0ZW1wLnB1c2godmFsKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgICBkYXRhID0gJ1snICsgdGVtcC5q b2luKCkgKyAnXSc7CiAgICAgICAgIH0KLSAgICAgIH0KKyAgICAgICAgJGlucHV0LnZhbChkYXRh KTsKKyAgICAgICAgJGlucHV0LnNlbGVjdCgpOworICAgICAgfTsKIAotICAgICAgcmV0dXJuIHsK LSAgICAgICAgdmFsaWQ6IHRydWUsCi0gICAgICAgIG1zZzogbnVsbCwKLSAgICAgIH07Ci0gICAg fTsKLQotICAgIHRoaXMuaW5pdCgpOwotICB9Ci0KLSAgLy8gSlNPTiBkYXRhIHR5cGUgZWRpdG9y Ci0gIGZ1bmN0aW9uIFJlYWRPbmx5SnNvblRleHRFZGl0b3IoYXJncykgewotICAgIHZhciAkaW5w dXQsICR3cmFwcGVyLCAkYnV0dG9uczsKLSAgICB2YXIgZGVmYXVsdFZhbHVlOwotICAgIHZhciBz Y29wZSA9IHRoaXM7Ci0KLSAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHsKLSAgICAgIHZhciAk Y29udGFpbmVyID0gJCgnYm9keScpOwotCi0gICAgICAkd3JhcHBlciA9IGdldFdyYXBwZXIoKS5h cHBlbmRUbygkY29udGFpbmVyKTsKLSAgICAgICRpbnB1dCA9IGdldFRleHRBcmVhKCkuYXBwZW5k VG8oJHdyYXBwZXIpOwotICAgICAgJGJ1dHRvbnMgPSBnZXRCdXR0b25zKGZhbHNlKS5hcHBlbmRU bygkd3JhcHBlcik7Ci0KLSAgICAgICRidXR0b25zLmZpbmQoJ2J1dHRvbjpmaXJzdCcpLm9uKCdj bGljaycsIHRoaXMuY2FuY2VsKTsKLSAgICAgICRpbnB1dC5iaW5kKCdrZXlkb3duJywgdGhpcy5o YW5kbGVLZXlEb3duKTsKLQotICAgICAgc2NvcGUucG9zaXRpb24oYXJncy5wb3NpdGlvbik7Ci0g ICAgICAkaW5wdXQuZm9jdXMoKS5zZWxlY3QoKTsKLSAgICB9OwotCi0gICAgdGhpcy5oYW5kbGVL ZXlEb3duID0gZnVuY3Rpb24oZSkgewotICAgICAgaWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2Rl LkVOVEVSICYmIGUuY3RybEtleSkgewotICAgICAgICBzY29wZS5jYW5jZWwoKTsKLSAgICAgIH0g ZWxzZSBpZiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUuRVNDQVBFKSB7Ci0gICAgICAgIGUucHJl dmVudERlZmF1bHQoKTsKLSAgICAgICAgc2NvcGUuY2FuY2VsKCk7Ci0gICAgICB9IGVsc2UgaWYg KGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLlRBQiAmJiBlLnNoaWZ0S2V5KSB7Ci0gICAgICAgIHNj b3BlLmNhbmNlbCgpOwotICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIGFyZ3Mu Z3JpZC5uYXZpZ2F0ZVByZXYoKTsKLSAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSAkLnVpLmtl eUNvZGUuVEFCKSB7Ci0gICAgICAgIHNjb3BlLmNhbmNlbCgpOwotICAgICAgICBlLnByZXZlbnRE ZWZhdWx0KCk7Ci0gICAgICAgIGFyZ3MuZ3JpZC5uYXZpZ2F0ZU5leHQoKTsKLSAgICAgIH0KLSAg ICB9OwotCi0gICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKLSAgICAgICRpbnB1dC52YWwo ZGVmYXVsdFZhbHVlKTsKLSAgICAgIGFyZ3MuY2FuY2VsQ2hhbmdlcygpOwotICAgIH07Ci0KLSAg ICB0aGlzLmhpZGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICR3cmFwcGVyLmhpZGUoKTsKLSAgICB9 OwotCi0gICAgdGhpcy5zaG93ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkd3JhcHBlci5zaG93KCk7 Ci0gICAgfTsKLQotICAgIHRoaXMucG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewotICAg ICAgY2FsY3VsYXRlRWRpdG9yUG9zaXRpb24ocG9zaXRpb24sICR3cmFwcGVyKTsKLSAgICAgICR3 cmFwcGVyCi0gICAgICAgIC5jc3MoJ3RvcCcsIHBvc2l0aW9uLnRvcCkKLSAgICAgICAgLmNzcygn bGVmdCcsIHBvc2l0aW9uLmxlZnQpOwotICAgIH07Ci0KLSAgICB0aGlzLmRlc3Ryb3kgPSBmdW5j dGlvbigpIHsKLSAgICAgICR3cmFwcGVyLnJlbW92ZSgpOwotICAgIH07Ci0KLSAgICB0aGlzLmZv Y3VzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkaW5wdXQuZm9jdXMoKTsKLSAgICB9OwotCi0gICAg dGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICB2YXIgZGF0YSA9IGRlZmF1 bHRWYWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdOwotICAgICAgaWYgKHR5cGVvZiBkYXRh ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkgewotICAgICAgICBkYXRhID0g SlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgNCk7Ci0gICAgICB9IGVsc2UgaWYgKEFycmF5Lmlz QXJyYXkoZGF0YSkpIHsKLSAgICAgICAgdmFyIHRlbXAgPSBbXTsKLSAgICAgICAgJC5lYWNoKGRh dGEsIGZ1bmN0aW9uKGksIHZhbCkgewotICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2Jq ZWN0JykgewotICAgICAgICAgICAgdGVtcC5wdXNoKEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwg NCkpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0ZW1wLnB1c2godmFsKTsKKyAg ICAgIHRoaXMuc2VyaWFsaXplVmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCRpbnB1 dC52YWwoKSA9PT0gJycpIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gJGlucHV0LnZhbCgpOworICAgICAgfTsKKworICAgICAgdGhpcy5hcHBseVZh bHVlID0gZnVuY3Rpb24oaXRlbSwgc3RhdGUpIHsKKyAgICAgICAgc2V0VmFsdWUoYXJncywgaXRl bSwgc3RhdGUsICd0ZXh0Jyk7CisgICAgICB9OworCisgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2Vk ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgkaW5wdXQudmFsKCkgPT0gJycgJiYgXy5pc1Vu ZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiAoISgkaW5wdXQudmFsKCkgPT0gJycgJiYgXy5p c051bGwoZGVmYXVsdFZhbHVlKSkpICYmICgkaW5wdXQudmFsKCkgIT0gZGVmYXVsdFZhbHVlKTsK KyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKCkg eworICAgICAgICBpZiAoYXJncy5jb2x1bW4udmFsaWRhdG9yKSB7CisgICAgICAgICAgdmFyIHZh bGlkYXRpb25SZXN1bHRzID0gYXJncy5jb2x1bW4udmFsaWRhdG9yKCRpbnB1dC52YWwoKSk7Cisg ICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0cy52YWxpZCkgeworICAgICAgICAgICAgcmV0 dXJuIHZhbGlkYXRpb25SZXN1bHRzOwogICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAg IGRhdGEgPSAnWycgKyB0ZW1wLmpvaW4oKSArICddJzsKLSAgICAgIH0KLSAgICAgICRpbnB1dC52 YWwoZGF0YSk7Ci0gICAgICAkaW5wdXQuc2VsZWN0KCk7Ci0gICAgfTsKKyAgICAgICAgfQogCi0g ICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuICRpbnB1 dC52YWwoKTsKLSAgICB9OworICAgICAgICByZXR1cm4geworICAgICAgICAgIHZhbGlkOiB0cnVl LAorICAgICAgICAgIG1zZzogbnVsbCwKKyAgICAgICAgfTsKKyAgICAgIH07CiAKLSAgICB0aGlz LmFwcGx5VmFsdWUgPSBmdW5jdGlvbihpdGVtLCBzdGF0ZSkgewotICAgICAgaXRlbVthcmdzLmNv bHVtbi5maWVsZF0gPSBzdGF0ZTsKLSAgICB9OworICAgICAgdGhpcy5pbml0KCk7CisgICAgfQor CisgICAgLy8gVGV4dCBkYXRhIHR5cGUgZWRpdG9yCisgICAgZnVuY3Rpb24gUmVhZE9ubHlwZ1Rl eHRFZGl0b3IoYXJncykgeworICAgICAgdmFyICRpbnB1dCwgJHdyYXBwZXIsICRidXR0b25zOwor ICAgICAgdmFyIGRlZmF1bHRWYWx1ZTsKKyAgICAgIHZhciBzY29wZSA9IHRoaXM7CisKKyAgICAg IHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgJGNvbnRhaW5lciA9ICQoJ2Jv ZHknKTsKIAotICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJl dHVybiAoISgkaW5wdXQudmFsKCkgPT0gJycgJiYgZGVmYXVsdFZhbHVlID09IG51bGwpKSAmJiAo JGlucHV0LnZhbCgpICE9IGRlZmF1bHRWYWx1ZSk7Ci0gICAgfTsKKyAgICAgICAgJHdyYXBwZXIg PSBnZXRXcmFwcGVyKCkuYXBwZW5kVG8oJGNvbnRhaW5lcik7CisgICAgICAgICRpbnB1dCA9IGdl dFRleHRBcmVhKCkuYXBwZW5kVG8oJHdyYXBwZXIpOworICAgICAgICAkYnV0dG9ucyA9IGdldEJ1 dHRvbnMoZmFsc2UpLmFwcGVuZFRvKCR3cmFwcGVyKTsKIAotICAgIHRoaXMudmFsaWRhdGUgPSBm dW5jdGlvbigpIHsKLSAgICAgIGlmIChhcmdzLmNvbHVtbi52YWxpZGF0b3IpIHsKLSAgICAgICAg dmFyIHZhbGlkYXRpb25SZXN1bHRzID0gYXJncy5jb2x1bW4udmFsaWRhdG9yKCRpbnB1dC52YWwo KSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdHMudmFsaWQpIHsKLSAgICAgICAgICBy ZXR1cm4gdmFsaWRhdGlvblJlc3VsdHM7CisgICAgICAgICRidXR0b25zLmZpbmQoJ2J1dHRvbjpm aXJzdCcpLm9uKCdjbGljaycsIHRoaXMuY2FuY2VsKTsKKyAgICAgICAgJGlucHV0LmJpbmQoJ2tl eWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pOworCisgICAgICAgIHJlc2l6ZUVkaXRvci5yZXNp emVDb250ZW50T25EcmFnKCR3cmFwcGVyLCAkaW5wdXQpOworICAgICAgICBzY29wZS5wb3NpdGlv bihhcmdzLnBvc2l0aW9uKTsKKyAgICAgICAgJGlucHV0LmZvY3VzKCkuc2VsZWN0KCk7CisgICAg ICB9OworCisgICAgICB0aGlzLmhhbmRsZUtleURvd24gPSBmdW5jdGlvbihlKSB7CisgICAgICAg IGlmIChlLndoaWNoID09ICQudWkua2V5Q29kZS5FTlRFUiAmJiBlLmN0cmxLZXkpIHsKKyAgICAg ICAgICBzY29wZS5jYW5jZWwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChlLndoaWNoID09ICQudWku a2V5Q29kZS5FU0NBUEUpIHsKKyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg ICAgc2NvcGUuY2FuY2VsKCk7CisgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSAkLnVpLmtl eUNvZGUuVEFCICYmIGUuc2hpZnRLZXkpIHsKKyAgICAgICAgICBzY29wZS5jYW5jZWwoKTsKKyAg ICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgYXJncy5ncmlkLm5hdmlnYXRl UHJldigpOworICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLlRBQikg eworICAgICAgICAgIHNjb3BlLmNhbmNlbCgpOworICAgICAgICAgIGUucHJldmVudERlZmF1bHQo KTsKKyAgICAgICAgICBhcmdzLmdyaWQubmF2aWdhdGVOZXh0KCk7CiAgICAgICAgIH0KLSAgICAg IH0KKyAgICAgIH07CisKKyAgICAgIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24oKSB7CisgICAgICAg ICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgYXJncy5jYW5jZWxDaGFuZ2VzKCk7 CisgICAgICB9OwogCi0gICAgICByZXR1cm4gewotICAgICAgICB2YWxpZDogdHJ1ZSwKLSAgICAg ICAgbXNnOiBudWxsLAorICAgICAgdGhpcy5oaWRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICR3 cmFwcGVyLmhpZGUoKTsKICAgICAgIH07Ci0gICAgfTsKIAotICAgIHRoaXMuaW5pdCgpOwotICB9 CisgICAgICB0aGlzLnNob3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgJHdyYXBwZXIuc2hvdygp OworICAgICAgfTsKIAotICBmdW5jdGlvbiBSZWFkT25seVRleHRFZGl0b3IoYXJncykgewotICAg IHZhciAkaW5wdXQ7Ci0gICAgdmFyIGRlZmF1bHRWYWx1ZTsKKyAgICAgIHRoaXMucG9zaXRpb24g PSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgICAgICBjYWxjdWxhdGVFZGl0b3JQb3NpdGlvbihw b3NpdGlvbiwgJHdyYXBwZXIpOworICAgICAgICAkd3JhcHBlcgorICAgICAgICAgIC5jc3MoJ3Rv cCcsIHBvc2l0aW9uLnRvcCkKKyAgICAgICAgICAuY3NzKCdsZWZ0JywgcG9zaXRpb24ubGVmdCk7 CisgICAgICB9OwogCi0gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkaW5wdXQg PSAkKCc8SU5QVVQgdHlwZT10ZXh0IGNsYXNzPVwnZWRpdG9yLXRleHRcJyByZWFkb25seS8+JykK LSAgICAgICAgLmFwcGVuZFRvKGFyZ3MuY29udGFpbmVyKQotICAgICAgICAuYmluZCgna2V5ZG93 bi5uYXYnLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gJC51aS5r ZXlDb2RlLkxFRlQgfHwgZS5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuUklHSFQpIHsKLSAgICAg ICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAg ICB9KQotICAgICAgICAuZm9jdXMoKQotICAgICAgICAuc2VsZWN0KCk7Ci0gICAgfTsKKyAgICAg IHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAkd3JhcHBlci5yZW1vdmUoKTsK KyAgICAgIH07CiAKLSAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKLSAgICAgICRpbnB1 dC5yZW1vdmUoKTsKLSAgICB9OworICAgICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9uKCkgeworICAg ICAgICAkaW5wdXQuZm9jdXMoKTsKKyAgICAgIH07CiAKLSAgICB0aGlzLmZvY3VzID0gZnVuY3Rp b24oKSB7Ci0gICAgICAkaW5wdXQuZm9jdXMoKTsKLSAgICB9OworICAgICAgdGhpcy5sb2FkVmFs dWUgPSBmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlID0g aXRlbVthcmdzLmNvbHVtbi5maWVsZF0pOworICAgICAgICAkaW5wdXQuc2VsZWN0KCk7CisgICAg ICB9OwogCi0gICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuICRp bnB1dC52YWwoKTsKLSAgICB9OworICAgICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9u KCkgeworICAgICAgICByZXR1cm4gJGlucHV0LnZhbCgpOworICAgICAgfTsKIAotICAgIHRoaXMu bG9hZFZhbHVlID0gZnVuY3Rpb24oaXRlbSkgewotICAgICAgdmFyIHZhbHVlID0gaXRlbVthcmdz LmNvbHVtbi5maWVsZF07CisgICAgICB0aGlzLmFwcGx5VmFsdWUgPSBmdW5jdGlvbihpdGVtLCBz dGF0ZSkgeworICAgICAgICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0YXRlOworICAgICAg fTsKIAotICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQKLSAgICAg IGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcp IHsKLSAgICAgICAgdmFsdWUgPSAnJzsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHRWYWx1ZSA9IHZh bHVlOwotICAgICAgJGlucHV0LnZhbChkZWZhdWx0VmFsdWUpOwotICAgICAgJGlucHV0WzBdLmRl ZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICAgICRpbnB1dC5zZWxlY3QoKTsKLSAgICB9 OwotCi0gICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJu ICRpbnB1dC52YWwoKTsKLSAgICB9OwotCi0gICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24o aXRlbSwgc3RhdGUpIHsKLSAgICAgIGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID0gc3RhdGU7Ci0g ICAgfTsKLQotICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJl dHVybiAoISgkaW5wdXQudmFsKCkgPT0gJycgJiYgZGVmYXVsdFZhbHVlID09IG51bGwpKSAmJiAo JGlucHV0LnZhbCgpICE9IGRlZmF1bHRWYWx1ZSk7Ci0gICAgfTsKLQotICAgIHRoaXMudmFsaWRh dGUgPSBmdW5jdGlvbigpIHsKLSAgICAgIGlmIChhcmdzLmNvbHVtbi52YWxpZGF0b3IpIHsKLSAg ICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHRzID0gYXJncy5jb2x1bW4udmFsaWRhdG9yKCRpbnB1 dC52YWwoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdHMudmFsaWQpIHsKLSAgICAg ICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdHM7CisgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2Vk ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAoISgkaW5wdXQudmFsKCkgPT0gJycgJiYg ZGVmYXVsdFZhbHVlID09IG51bGwpKSAmJiAoJGlucHV0LnZhbCgpICE9IGRlZmF1bHRWYWx1ZSk7 CisgICAgICB9OworCisgICAgICB0aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAg IGlmIChhcmdzLmNvbHVtbi52YWxpZGF0b3IpIHsKKyAgICAgICAgICB2YXIgdmFsaWRhdGlvblJl c3VsdHMgPSBhcmdzLmNvbHVtbi52YWxpZGF0b3IoJGlucHV0LnZhbCgpKTsKKyAgICAgICAgICBp ZiAoIXZhbGlkYXRpb25SZXN1bHRzLnZhbGlkKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsaWRh dGlvblJlc3VsdHM7CisgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9CiAKLSAgICAgIHJl dHVybiB7Ci0gICAgICAgIHZhbGlkOiB0cnVlLAotICAgICAgICBtc2c6IG51bGwsCisgICAgICAg IHJldHVybiB7CisgICAgICAgICAgdmFsaWQ6IHRydWUsCisgICAgICAgICAgbXNnOiBudWxsLAor ICAgICAgICB9OwogICAgICAgfTsKLSAgICB9OwogCi0gICAgdGhpcy5pbml0KCk7Ci0gIH0KKyAg ICAgIHRoaXMuaW5pdCgpOworICAgIH0KIAotICBmdW5jdGlvbiBSZWFkT25seUNoZWNrYm94RWRp dG9yKGFyZ3MpIHsKLSAgICB2YXIgJHNlbGVjdDsKLSAgICB2YXIgZGVmYXVsdFZhbHVlOworICAg IC8vIEpTT04gZGF0YSB0eXBlIGVkaXRvcgorICAgIGZ1bmN0aW9uIFJlYWRPbmx5SnNvblRleHRF ZGl0b3IoYXJncykgeworICAgICAgdmFyICRpbnB1dCwgJHdyYXBwZXIsICRidXR0b25zOworICAg ICAgdmFyIGRlZmF1bHRWYWx1ZTsKKyAgICAgIHZhciBzY29wZSA9IHRoaXM7CiAKLSAgICB0aGlz LmluaXQgPSBmdW5jdGlvbigpIHsKLSAgICAgICRzZWxlY3QgPSAkKCc8SU5QVVQgdHlwZT1jaGVj a2JveCB2YWx1ZT1cJ3RydWVcJyBjbGFzcz1cJ2VkaXRvci1jaGVja2JveFwnIGhpZGVGb2N1cyBk aXNhYmxlZD4nKTsKLSAgICAgICRzZWxlY3QuYXBwZW5kVG8oYXJncy5jb250YWluZXIpOwotICAg ICAgJHNlbGVjdC5mb2N1cygpOwotICAgIH07CisgICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigp IHsKKyAgICAgICAgdmFyICRjb250YWluZXIgPSAkKCdib2R5Jyk7CiAKLSAgICB0aGlzLmRlc3Ry b3kgPSBmdW5jdGlvbigpIHsKLSAgICAgICRzZWxlY3QucmVtb3ZlKCk7Ci0gICAgfTsKKyAgICAg ICAgJHdyYXBwZXIgPSBnZXRXcmFwcGVyKCkuYXBwZW5kVG8oJGNvbnRhaW5lcik7CisgICAgICAg ICRpbnB1dCA9IGdldFRleHRBcmVhKCkuYXBwZW5kVG8oJHdyYXBwZXIpOworICAgICAgICAkYnV0 dG9ucyA9IGdldEJ1dHRvbnMoZmFsc2UpLmFwcGVuZFRvKCR3cmFwcGVyKTsKIAotICAgIHRoaXMu Zm9jdXMgPSBmdW5jdGlvbigpIHsKLSAgICAgICRzZWxlY3QuZm9jdXMoKTsKLSAgICB9OworICAg ICAgICAkYnV0dG9ucy5maW5kKCdidXR0b246Zmlyc3QnKS5vbignY2xpY2snLCB0aGlzLmNhbmNl bCk7CisgICAgICAgICRpbnB1dC5iaW5kKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlEb3duKTsK IAotICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24oaXRlbSkgewotICAgICAgZGVmYXVsdFZh bHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOwotICAgICAgaWYgKF8uaXNOdWxsKGRlZmF1bHRW YWx1ZSkgfHwgXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7Ci0gICAgICAgICRzZWxlY3Qu cHJvcCgnaW5kZXRlcm1pbmF0ZScsIHRydWUpOwotICAgICAgICAkc2VsZWN0LmRhdGEoJ2NoZWNr ZWQnLCAyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlZmF1bHRWYWx1ZSA9ICEhaXRlbVth cmdzLmNvbHVtbi5wb3NdOwotICAgICAgICBpZiAoZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgICAg JHNlbGVjdC5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7Ci0gICAgICAgICAgJHNlbGVjdC5kYXRhKCdj aGVja2VkJywgMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgJHNlbGVjdC5wcm9wKCdj aGVja2VkJywgZmFsc2UpOwotICAgICAgICAgICRzZWxlY3QuZGF0YSgnY2hlY2tlZCcsIDEpOwor ICAgICAgICByZXNpemVFZGl0b3IucmVzaXplQ29udGVudE9uRHJhZygkd3JhcHBlciwgJGlucHV0 KTsKKyAgICAgICAgc2NvcGUucG9zaXRpb24oYXJncy5wb3NpdGlvbik7CisgICAgICAgICRpbnB1 dC5mb2N1cygpLnNlbGVjdCgpOworICAgICAgfTsKKworICAgICAgdGhpcy5oYW5kbGVLZXlEb3du ID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUuRU5U RVIgJiYgZS5jdHJsS2V5KSB7CisgICAgICAgICAgc2NvcGUuY2FuY2VsKCk7CisgICAgICAgIH0g ZWxzZSBpZiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUuRVNDQVBFKSB7CisgICAgICAgICAgZS5w cmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgIHNjb3BlLmNhbmNlbCgpOworICAgICAgICB9IGVs c2UgaWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLlRBQiAmJiBlLnNoaWZ0S2V5KSB7CisgICAg ICAgICAgc2NvcGUuY2FuY2VsKCk7CisgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAg ICAgICAgIGFyZ3MuZ3JpZC5uYXZpZ2F0ZVByZXYoKTsKKyAgICAgICAgfSBlbHNlIGlmIChlLndo aWNoID09ICQudWkua2V5Q29kZS5UQUIpIHsKKyAgICAgICAgICBzY29wZS5jYW5jZWwoKTsKKyAg ICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgYXJncy5ncmlkLm5hdmlnYXRl TmV4dCgpOwogICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKKyAgICAgIH07CiAKLSAgICB0aGlz LnNlcmlhbGl6ZVZhbHVlID0gZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoJHNlbGVjdC5wcm9wKCdp bmRldGVybWluYXRlJykpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBy ZXR1cm4gJHNlbGVjdC5wcm9wKCdjaGVja2VkJyk7Ci0gICAgfTsKKyAgICAgIHRoaXMuY2FuY2Vs ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlKTsKKyAgICAg ICAgYXJncy5jYW5jZWxDaGFuZ2VzKCk7CisgICAgICB9OwogCi0gICAgdGhpcy5hcHBseVZhbHVl ID0gZnVuY3Rpb24oaXRlbSwgc3RhdGUpIHsKLSAgICAgIGl0ZW1bYXJncy5jb2x1bW4ucG9zXSA9 IHN0YXRlOwotICAgIH07CisgICAgICB0aGlzLmhpZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg JHdyYXBwZXIuaGlkZSgpOworICAgICAgfTsKKworICAgICAgdGhpcy5zaG93ID0gZnVuY3Rpb24o KSB7CisgICAgICAgICR3cmFwcGVyLnNob3coKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMucG9z aXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgICAgICBjYWxjdWxhdGVFZGl0b3JQb3Np dGlvbihwb3NpdGlvbiwgJHdyYXBwZXIpOworICAgICAgICAkd3JhcHBlcgorICAgICAgICAgIC5j c3MoJ3RvcCcsIHBvc2l0aW9uLnRvcCkKKyAgICAgICAgICAuY3NzKCdsZWZ0JywgcG9zaXRpb24u bGVmdCk7CisgICAgICB9OworCisgICAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAg ICAgICAgJHdyYXBwZXIucmVtb3ZlKCk7CisgICAgICB9OwogCi0gICAgdGhpcy5pc1ZhbHVlQ2hh bmdlZCA9IGZ1bmN0aW9uKCkgewotICAgICAgLy8gdmFyIHNlbGVjdF92YWx1ZSA9IHRoaXMuc2Vy aWFsaXplVmFsdWUoKTsKLSAgICAgIHZhciBzZWxlY3RfdmFsdWUgPSAkc2VsZWN0LmRhdGEoJ2No ZWNrZWQnKTsKLSAgICAgIHJldHVybiAoIShzZWxlY3RfdmFsdWUgPT09IDIgJiYgKGRlZmF1bHRW YWx1ZSA9PSBudWxsIHx8IGRlZmF1bHRWYWx1ZSA9PSB1bmRlZmluZWQpKSkgJiYKLSAgICAgICAg KHNlbGVjdF92YWx1ZSAhPT0gZGVmYXVsdFZhbHVlKTsKLSAgICB9OworICAgICAgdGhpcy5mb2N1 cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAkaW5wdXQuZm9jdXMoKTsKKyAgICAgIH07CiAKLSAg ICB0aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gewotICAgICAgICB2 YWxpZDogdHJ1ZSwKLSAgICAgICAgbXNnOiBudWxsLAorICAgICAgdGhpcy5sb2FkVmFsdWUgPSBm dW5jdGlvbihpdGVtKSB7CisgICAgICAgIHZhciBkYXRhID0gZGVmYXVsdFZhbHVlID0gaXRlbVth cmdzLmNvbHVtbi5maWVsZF07CisgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcg JiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHsKKyAgICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdp ZnkoZGF0YSwgbnVsbCwgNCk7CisgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRh KSkgeworICAgICAgICAgIHZhciB0ZW1wID0gW107CisgICAgICAgICAgJC5lYWNoKGRhdGEsIGZ1 bmN0aW9uKGksIHZhbCkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3Qn KSB7CisgICAgICAgICAgICAgIHRlbXAucHVzaChKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDQp KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHRlbXAucHVzaCh2YWwpOwor ICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICAgIGRhdGEgPSAnWycgKyB0ZW1w LmpvaW4oKSArICddJzsKKyAgICAgICAgfQorICAgICAgICAkaW5wdXQudmFsKGRhdGEpOworICAg ICAgICAkaW5wdXQuc2VsZWN0KCk7CiAgICAgICB9OwotICAgIH07CiAKLSAgICB0aGlzLmluaXQo KTsKLSAgfQorICAgICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICAg ICByZXR1cm4gJGlucHV0LnZhbCgpOworICAgICAgfTsKIAotICBmdW5jdGlvbiBDdXN0b21OdW1i ZXJFZGl0b3IoYXJncykgewotICAgIHZhciAkaW5wdXQ7Ci0gICAgdmFyIGRlZmF1bHRWYWx1ZTsK KyAgICAgIHRoaXMuYXBwbHlWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0sIHN0YXRlKSB7CisgICAgICAg IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID0gc3RhdGU7CisgICAgICB9OwogCi0gICAgdGhpcy5p bml0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkaW5wdXQgPSAkKCc8SU5QVVQgdHlwZT10ZXh0IGNs YXNzPVwnZWRpdG9yLXRleHRcJyAvPicpOworICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZCA9IGZ1 bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gKCEoJGlucHV0LnZhbCgpID09ICcnICYmIGRlZmF1 bHRWYWx1ZSA9PSBudWxsKSkgJiYgKCRpbnB1dC52YWwoKSAhPSBkZWZhdWx0VmFsdWUpOworICAg ICAgfTsKIAotICAgICAgJGlucHV0LmJpbmQoJ2tleWRvd24ubmF2JywgZnVuY3Rpb24oZSkgewot ICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuTEVGVCB8fCBlLmtleUNvZGUg PT09ICQudWkua2V5Q29kZS5SSUdIVCkgewotICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3Bh Z2F0aW9uKCk7CisgICAgICB0aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm IChhcmdzLmNvbHVtbi52YWxpZGF0b3IpIHsKKyAgICAgICAgICB2YXIgdmFsaWRhdGlvblJlc3Vs dHMgPSBhcmdzLmNvbHVtbi52YWxpZGF0b3IoJGlucHV0LnZhbCgpKTsKKyAgICAgICAgICBpZiAo IXZhbGlkYXRpb25SZXN1bHRzLnZhbGlkKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlv blJlc3VsdHM7CisgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9KTsKIAotICAgICAgJGlu cHV0LmFwcGVuZFRvKGFyZ3MuY29udGFpbmVyKTsKLSAgICAgICRpbnB1dC5mb2N1cygpLnNlbGVj dCgpOwotICAgIH07CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgdmFsaWQ6IHRydWUsCisg ICAgICAgICAgbXNnOiBudWxsLAorICAgICAgICB9OworICAgICAgfTsKIAotICAgIHRoaXMuZGVz dHJveSA9IGZ1bmN0aW9uKCkgewotICAgICAgJGlucHV0LnJlbW92ZSgpOwotICAgIH07CisgICAg ICB0aGlzLmluaXQoKTsKKyAgICB9CiAKLSAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7Ci0g ICAgICAkaW5wdXQuZm9jdXMoKTsKLSAgICB9OworICAgIGZ1bmN0aW9uIFJlYWRPbmx5VGV4dEVk aXRvcihhcmdzKSB7CisgICAgICB2YXIgJGlucHV0OworICAgICAgdmFyIGRlZmF1bHRWYWx1ZTsK KworICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICRpbnB1dCA9ICQoJzxJ TlBVVCB0eXBlPXRleHQgY2xhc3M9XCdlZGl0b3ItdGV4dFwnIHJlYWRvbmx5Lz4nKQorICAgICAg ICAgIC5hcHBlbmRUbyhhcmdzLmNvbnRhaW5lcikKKyAgICAgICAgICAuYmluZCgna2V5ZG93bi5u YXYnLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAkLnVpLmtl eUNvZGUuTEVGVCB8fCBlLmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5SSUdIVCkgeworICAgICAg ICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgfQorICAg ICAgICAgIH0pCisgICAgICAgICAgLmZvY3VzKCkKKyAgICAgICAgICAuc2VsZWN0KCk7CisgICAg ICB9OwogCi0gICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICBkZWZh dWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKKyAgICAgIHRoaXMuZGVzdHJveSA9 IGZ1bmN0aW9uKCkgeworICAgICAgICAkaW5wdXQucmVtb3ZlKCk7CisgICAgICB9OwogCi0gICAg ICBpZiAoYXJncy5jb2x1bW4uaXNfYXJyYXkgJiYgIV8uaXNOdWxsKGRlZmF1bHRWYWx1ZSkgJiYg IV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkgewotICAgICAgICAkaW5wdXQudmFsKCd7JyAr IGRlZmF1bHRWYWx1ZS5qb2luKCkgKyAnfScpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgJGlu cHV0LnZhbChkZWZhdWx0VmFsdWUpOwotICAgICAgfQorICAgICAgdGhpcy5mb2N1cyA9IGZ1bmN0 aW9uKCkgeworICAgICAgICAkaW5wdXQuZm9jdXMoKTsKKyAgICAgIH07CiAKLSAgICAgICRpbnB1 dFswXS5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0gICAgICAkaW5wdXQuc2VsZWN0KCk7 Ci0gICAgfTsKKyAgICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0 dXJuICRpbnB1dC52YWwoKTsKKyAgICAgIH07CiAKLSAgICB0aGlzLnNlcmlhbGl6ZVZhbHVlID0g ZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgdmFsdWUgPSAkaW5wdXQudmFsKCk7CisgICAgICB0aGlz LmxvYWRWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAgICAgdmFyIHZhbHVlID0gaXRlbVth cmdzLmNvbHVtbi5maWVsZF07CiAKLSAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHsKLSAgICAgICAg cmV0dXJuIG51bGw7Ci0gICAgICB9CisgICAgICAgIC8vIENoZWNrIGlmIHZhbHVlIGlzIG51bGwg b3IgdW5kZWZpbmVkCisgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2 YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICB2YWx1ZSA9ICcnOworICAgICAgICB9 CisgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhbHVlOworICAgICAgICAkaW5wdXQudmFsKGRlZmF1 bHRWYWx1ZSk7CisgICAgICAgICRpbnB1dFswXS5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7 CisgICAgICAgICRpbnB1dC5zZWxlY3QoKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuc2VyaWFs aXplVmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICRpbnB1dC52YWwoKTsKKyAg ICAgIH07CiAKLSAgICAgIGlmIChhcmdzLmNvbHVtbi5pc19hcnJheSkgewotICAgICAgICAvLyBS ZW1vdmUgbGVhZGluZyB7IGFuZCB0cmFpbGluZyB9LgotICAgICAgICAvLyBBbHNvIHJlbW92ZSBs ZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KLSAgICAgICAgdmFyIHZhbCA9ICQudHJp bSh2YWx1ZS5zbGljZSgxLCAtMSkpOworICAgICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24o aXRlbSwgc3RhdGUpIHsKKyAgICAgICAgaXRlbVthcmdzLmNvbHVtbi5maWVsZF0gPSBzdGF0ZTsK KyAgICAgIH07CiAKLSAgICAgICAgaWYgKHZhbCA9PSAnJykgewotICAgICAgICAgIHJldHVybiBb XTsKKyAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0 dXJuICghKCRpbnB1dC52YWwoKSA9PSAnJyAmJiBkZWZhdWx0VmFsdWUgPT0gbnVsbCkpICYmICgk aW5wdXQudmFsKCkgIT0gZGVmYXVsdFZhbHVlKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMudmFs aWRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGFyZ3MuY29sdW1uLnZhbGlkYXRvcikg eworICAgICAgICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0cyA9IGFyZ3MuY29sdW1uLnZhbGlkYXRv cigkaW5wdXQudmFsKCkpOworICAgICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdHMudmFsaWQp IHsKKyAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0czsKKyAgICAgICAgICB9CiAg ICAgICAgIH0KLSAgICAgICAgdmFsID0gdmFsLnNwbGl0KCcsJyk7Ci0gICAgICAgIGZvciAodmFy IGsgaW4gdmFsKSB7Ci0gICAgICAgICAgaWYgKHZhbFtrXSA9PSAnJykgewotICAgICAgICAgICAg dmFsW2tdID0gbnVsbDsgLy9lbXB0eSBzdHJpbmcgZnJvbSBlZGl0b3IgaXMgbnVsbCB2YWx1ZS4K KworICAgICAgICByZXR1cm4geworICAgICAgICAgIHZhbGlkOiB0cnVlLAorICAgICAgICAgIG1z ZzogbnVsbCwKKyAgICAgICAgfTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuaW5pdCgpOworICAg IH0KKworICAgIGZ1bmN0aW9uIFJlYWRPbmx5Q2hlY2tib3hFZGl0b3IoYXJncykgeworICAgICAg dmFyICRzZWxlY3Q7CisgICAgICB2YXIgZGVmYXVsdFZhbHVlOworCisgICAgICB0aGlzLmluaXQg PSBmdW5jdGlvbigpIHsKKyAgICAgICAgJHNlbGVjdCA9ICQoJzxJTlBVVCB0eXBlPWNoZWNrYm94 IHZhbHVlPVwndHJ1ZVwnIGNsYXNzPVwnZWRpdG9yLWNoZWNrYm94XCcgaGlkZUZvY3VzIGRpc2Fi bGVkPicpOworICAgICAgICAkc2VsZWN0LmFwcGVuZFRvKGFyZ3MuY29udGFpbmVyKTsKKyAgICAg ICAgJHNlbGVjdC5mb2N1cygpOworICAgICAgfTsKKworICAgICAgdGhpcy5kZXN0cm95ID0gZnVu Y3Rpb24oKSB7CisgICAgICAgICRzZWxlY3QucmVtb3ZlKCk7CisgICAgICB9OworCisgICAgICB0 aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgICRzZWxlY3QuZm9jdXMoKTsKKyAgICAg IH07CisKKyAgICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24oaXRlbSkgeworICAgICAgICBk ZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLnBvc107CisgICAgICAgIGlmIChfLmlzTnVs bChkZWZhdWx0VmFsdWUpIHx8IF8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkgeworICAgICAg ICAgICRzZWxlY3QucHJvcCgnaW5kZXRlcm1pbmF0ZScsIHRydWUpOworICAgICAgICAgICRzZWxl Y3QuZGF0YSgnY2hlY2tlZCcsIDIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGRlZmF1 bHRWYWx1ZSA9ICEhaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAgICAgICAgIGlmIChkZWZhdWx0 VmFsdWUpIHsKKyAgICAgICAgICAgICRzZWxlY3QucHJvcCgnY2hlY2tlZCcsIHRydWUpOworICAg ICAgICAgICAgJHNlbGVjdC5kYXRhKCdjaGVja2VkJywgMCk7CisgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICRzZWxlY3QucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsKKyAgICAgICAgICAg ICRzZWxlY3QuZGF0YSgnY2hlY2tlZCcsIDEpOwogICAgICAgICAgIH0KICAgICAgICAgfQotICAg ICAgICByZXR1cm4gdmFsOwotICAgICAgfQorICAgICAgfTsKIAotICAgICAgcmV0dXJuIHZhbHVl OwotICAgIH07CisgICAgICB0aGlzLnNlcmlhbGl6ZVZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAg ICAgIGlmICgkc2VsZWN0LnByb3AoJ2luZGV0ZXJtaW5hdGUnKSkgeworICAgICAgICAgIHJldHVy biBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiAkc2VsZWN0LnByb3AoJ2NoZWNrZWQn KTsKKyAgICAgIH07CiAKLSAgICB0aGlzLmFwcGx5VmFsdWUgPSBmdW5jdGlvbihpdGVtLCBzdGF0 ZSkgewotICAgICAgc2V0VmFsdWUoYXJncywgaXRlbSwgc3RhdGUsICdudW1iZXInKTsKLSAgICB9 OworICAgICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24oaXRlbSwgc3RhdGUpIHsKKyAgICAg ICAgaXRlbVthcmdzLmNvbHVtbi5wb3NdID0gc3RhdGU7CisgICAgICB9OwogCi0gICAgdGhpcy5p c1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKCRpbnB1dC52YWwoKSA9PSAn JyAmJiBfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl OwotICAgICAgfSBlbHNlIGlmICgkaW5wdXQudmFsKCkgPT0gJycgJiYgZGVmYXVsdFZhbHVlID09 ICcnKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0 dXJuICghKCRpbnB1dC52YWwoKSA9PSAnJyAmJiBfLmlzTnVsbChkZWZhdWx0VmFsdWUpKSkgJiYK LSAgICAgICAgICAoJGlucHV0LnZhbCgpICE9IGRlZmF1bHRWYWx1ZSk7Ci0gICAgICB9Ci0gICAg fTsKKyAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8g dmFyIHNlbGVjdF92YWx1ZSA9IHRoaXMuc2VyaWFsaXplVmFsdWUoKTsKKyAgICAgICAgdmFyIHNl bGVjdF92YWx1ZSA9ICRzZWxlY3QuZGF0YSgnY2hlY2tlZCcpOworICAgICAgICByZXR1cm4gKCEo c2VsZWN0X3ZhbHVlID09PSAyICYmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCB8fCBkZWZhdWx0VmFs dWUgPT0gdW5kZWZpbmVkKSkpICYmCisgICAgICAgICAgKHNlbGVjdF92YWx1ZSAhPT0gZGVmYXVs dFZhbHVlKTsKKyAgICAgIH07CiAKLSAgICB0aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24oKSB7Ci0g ICAgICB2YXIgdmFsdWUgPSAkaW5wdXQudmFsKCk7Ci0gICAgICBpZiAoIWFyZ3MuY29sdW1uLmlz X2FycmF5ICYmIGlzTmFOKHZhbHVlKSkgeworICAgICAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9u KCkgewogICAgICAgICByZXR1cm4gewotICAgICAgICAgIHZhbGlkOiBmYWxzZSwKLSAgICAgICAg ICBtc2c6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXInLAorICAgICAgICAgIHZhbGlkOiB0 cnVlLAorICAgICAgICAgIG1zZzogbnVsbCwKICAgICAgICAgfTsKLSAgICAgIH0KLSAgICAgIGlm IChhcmdzLmNvbHVtbi52YWxpZGF0b3IpIHsKLSAgICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHRz ID0gYXJncy5jb2x1bW4udmFsaWRhdG9yKHZhbHVlKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0aW9u UmVzdWx0cy52YWxpZCkgewotICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0czsKKyAg ICAgIH07CisKKyAgICAgIHRoaXMuaW5pdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIEN1c3Rv bU51bWJlckVkaXRvcihhcmdzKSB7CisgICAgICB2YXIgJGlucHV0OworICAgICAgdmFyIGRlZmF1 bHRWYWx1ZTsKKworICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICRpbnB1 dCA9ICQoJzxJTlBVVCB0eXBlPXRleHQgY2xhc3M9XCdlZGl0b3ItdGV4dFwnIC8+Jyk7CisKKyAg ICAgICAgJGlucHV0LmJpbmQoJ2tleWRvd24ubmF2JywgZnVuY3Rpb24oZSkgeworICAgICAgICAg IGlmIChlLmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5MRUZUIHx8IGUua2V5Q29kZSA9PT0gJC51 aS5rZXlDb2RlLlJJR0hUKSB7CisgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlv bigpOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgJGlucHV0LmFwcGVuZFRv KGFyZ3MuY29udGFpbmVyKTsKKyAgICAgICAgJGlucHV0LmZvY3VzKCkuc2VsZWN0KCk7CisgICAg ICB9OworCisgICAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgJGlucHV0 LnJlbW92ZSgpOworICAgICAgfTsKKworICAgICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9uKCkgewor ICAgICAgICAkaW5wdXQuZm9jdXMoKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMubG9hZFZhbHVl ID0gZnVuY3Rpb24oaXRlbSkgeworICAgICAgICBkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29s dW1uLmZpZWxkXTsKKworICAgICAgICBpZiAoYXJncy5jb2x1bW4uaXNfYXJyYXkgJiYgIV8uaXNO dWxsKGRlZmF1bHRWYWx1ZSkgJiYgIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkgeworICAg ICAgICAgICRpbnB1dC52YWwoJ3snICsgZGVmYXVsdFZhbHVlLmpvaW4oKSArICd9Jyk7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgJGlucHV0LnZhbChkZWZhdWx0VmFsdWUpOwogICAgICAg ICB9Ci0gICAgICB9CiAKLSAgICAgIGlmIChhcmdzLmNvbHVtbi5pc19hcnJheSkgewotICAgICAg ICBpZiAoIWlzX3ZhbGlkX2FycmF5KHZhbHVlKSkgewotICAgICAgICAgIHJldHVybiB7Ci0gICAg ICAgICAgICB2YWxpZDogZmFsc2UsCi0gICAgICAgICAgICBtc2c6ICdBcnJheSBtdXN0IHN0YXJ0 IHdpdGggXCd7XCcgYW5kIGVuZCB3aXRoIFwnfVwnJywKLSAgICAgICAgICB9OworICAgICAgICAk aW5wdXRbMF0uZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlOworICAgICAgICAkaW5wdXQuc2Vs ZWN0KCk7CisgICAgICB9OworCisgICAgICB0aGlzLnNlcmlhbGl6ZVZhbHVlID0gZnVuY3Rpb24o KSB7CisgICAgICAgIHZhciB2YWx1ZSA9ICRpbnB1dC52YWwoKTsKKworICAgICAgICBpZiAodmFs dWUgPT09ICcnKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KIAotICAgICAg ICB2YXIgdmFsID0gJC50cmltKHZhbHVlLnNsaWNlKDEsIC0xKSksCi0gICAgICAgICAgYXJyOwor ICAgICAgICBpZiAoYXJncy5jb2x1bW4uaXNfYXJyYXkpIHsKKyAgICAgICAgICAvLyBSZW1vdmUg bGVhZGluZyB7IGFuZCB0cmFpbGluZyB9LgorICAgICAgICAgIC8vIEFsc28gcmVtb3ZlIGxlYWRp bmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2VzLgorICAgICAgICAgIHZhciB2YWwgPSAkLnRyaW0o dmFsdWUuc2xpY2UoMSwgLTEpKTsKKworICAgICAgICAgIGlmICh2YWwgPT0gJycpIHsKKyAgICAg ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFsID0gdmFsLnNwbGl0 KCcsJyk7CisgICAgICAgICAgZm9yICh2YXIgayBpbiB2YWwpIHsKKyAgICAgICAgICAgIGlmICh2 YWxba10gPT0gJycpIHsKKyAgICAgICAgICAgICAgdmFsW2tdID0gbnVsbDsgLy9lbXB0eSBzdHJp bmcgZnJvbSBlZGl0b3IgaXMgbnVsbCB2YWx1ZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9 CisgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQogCi0gICAgICAgIGlmICh2YWwgPT0g JycpIHsKLSAgICAgICAgICBhcnIgPSBbXTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAg fTsKKworICAgICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24oaXRlbSwgc3RhdGUpIHsKKyAg ICAgICAgc2V0VmFsdWUoYXJncywgaXRlbSwgc3RhdGUsICdudW1iZXInKTsKKyAgICAgIH07CisK KyAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCRp bnB1dC52YWwoKSA9PSAnJyAmJiBfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHsKKyAgICAg ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoJGlucHV0LnZhbCgpID09ICcn ICYmIGRlZmF1bHRWYWx1ZSA9PSAnJykgeworICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg ICB9IGVsc2UgewotICAgICAgICAgIGFyciA9IHZhbC5zcGxpdCgnLCcpOworICAgICAgICAgIHJl dHVybiAoISgkaW5wdXQudmFsKCkgPT0gJycgJiYgXy5pc051bGwoZGVmYXVsdFZhbHVlKSkpICYm CisgICAgICAgICAgICAoJGlucHV0LnZhbCgpICE9IGRlZmF1bHRWYWx1ZSk7CisgICAgICAgIH0K KyAgICAgIH07CisKKyAgICAgIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg dmFyIHZhbHVlID0gJGlucHV0LnZhbCgpOworICAgICAgICBpZiAoIWFyZ3MuY29sdW1uLmlzX2Fy cmF5ICYmIGlzTmFOKHZhbHVlKSkgeworICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB2 YWxpZDogZmFsc2UsCisgICAgICAgICAgICBtc2c6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1i ZXInLAorICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZ3MuY29sdW1uLnZh bGlkYXRvcikgeworICAgICAgICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0cyA9IGFyZ3MuY29sdW1u LnZhbGlkYXRvcih2YWx1ZSk7CisgICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0cy52YWxp ZCkgeworICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHRzOworICAgICAgICAgIH0K ICAgICAgICAgfQogCi0gICAgICAgIGZvciAodmFyIGsgaW4gYXJyKSB7Ci0gICAgICAgICAgaWYg KGlzTmFOKGFycltrXSkpIHsKKyAgICAgICAgaWYgKGFyZ3MuY29sdW1uLmlzX2FycmF5KSB7Cisg ICAgICAgICAgaWYgKCFpc192YWxpZF9hcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgIHJldHVy biB7CiAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSwKLSAgICAgICAgICAgICAgbXNnOiAnUGxl YXNlIGVudGVyIGEgdmFsaWQgbnVtYmVycycsCisgICAgICAgICAgICAgIG1zZzogJ0FycmF5IG11 c3Qgc3RhcnQgd2l0aCBcJ3tcJyBhbmQgZW5kIHdpdGggXCd9XCcnLAogICAgICAgICAgICAgfTsK ICAgICAgICAgICB9CisKKyAgICAgICAgICB2YXIgdmFsID0gJC50cmltKHZhbHVlLnNsaWNlKDEs IC0xKSksCisgICAgICAgICAgICBhcnI7CisKKyAgICAgICAgICBpZiAodmFsID09ICcnKSB7Cisg ICAgICAgICAgICBhcnIgPSBbXTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXJy ID0gdmFsLnNwbGl0KCcsJyk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZm9yICh2YXIgayBp biBhcnIpIHsKKyAgICAgICAgICAgIGlmIChpc05hTihhcnJba10pKSB7CisgICAgICAgICAgICAg IHJldHVybiB7CisgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLAorICAgICAgICAgICAgICAg IG1zZzogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIG51bWJlcnMnLAorICAgICAgICAgICAgICB9Owor ICAgICAgICAgICAgfQorICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgfQogCi0gICAgICBy ZXR1cm4gewotICAgICAgICB2YWxpZDogdHJ1ZSwKLSAgICAgICAgbXNnOiBudWxsLAotICAgICAg fTsKLSAgICB9OwotCi0gICAgdGhpcy5pbml0KCk7Ci0gIH0KLQotICAvLyBDdXN0b20gY2hlY2ti b3ggZWRpdG9yLCBXZSBuZWVkIGl0IGZvciBydW50aW1lIGFzIGl0IGRvZXMgbm90IHJlbmRlcgot ICAvLyBpbmRldGVybWluYXRlIGNoZWNrYm94IHN0YXRlCi0gIGZ1bmN0aW9uIHBnQ2hlY2tib3hF ZGl0b3IoYXJncykgewotICAgIHZhciAkc2VsZWN0LCBlbDsKLSAgICB2YXIgZGVmYXVsdFZhbHVl LCBwcmV2aW91c1N0YXRlOwotCi0gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAk c2VsZWN0ID0gJCgnPGRpdiBjbGFzcz1cJ211bHRpLWNoZWNrYm94XCc+PHNwYW4gY2xhc3M9XCdj aGVja1wnIGhpZGVGb2N1cz48L3NwYW4+PC9kaXY+Jyk7Ci0gICAgICAkc2VsZWN0LmFwcGVuZFRv KGFyZ3MuY29udGFpbmVyKTsKLSAgICAgICRzZWxlY3QuZm9jdXMoKTsKLQotICAgICAgLy8gVGhl IGZvbGxvd2luZyBjb2RlIGlzIHRha2VuIGZyb20gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9pbmRl dGVybWluYXRlLWNoZWNrYm94ZXMvCi0gICAgICAkc2VsZWN0LmJpbmQoJ2NsaWNrJywgZnVuY3Rp b24oKSB7Ci0gICAgICAgIGVsID0gJCh0aGlzKTsKLSAgICAgICAgdmFyIHN0YXRlcyA9IFsndW5j aGVja2VkJywgJ3BhcnRpYWwnLCAnY2hlY2tlZCddOwotICAgICAgICB2YXIgY3VyU3RhdGUgPSBl bC5maW5kKCcuY2hlY2snKS5kYXRhKCdzdGF0ZScpOwotICAgICAgICBjdXJTdGF0ZSsrOwotICAg ICAgICBlbC5maW5kKCcuY2hlY2snKQotICAgICAgICAgIC5yZW1vdmVDbGFzcygndW5jaGVja2Vk IHBhcnRpYWwgY2hlY2tlZCcpCi0gICAgICAgICAgLmFkZENsYXNzKHN0YXRlc1tjdXJTdGF0ZSAl IHN0YXRlcy5sZW5ndGhdKQotICAgICAgICAgIC5kYXRhKCdzdGF0ZScsIGN1clN0YXRlICUgc3Rh dGVzLmxlbmd0aCk7Ci0gICAgICB9KTsKLSAgICB9OwotCi0gICAgdGhpcy5kZXN0cm95ID0gZnVu Y3Rpb24oKSB7Ci0gICAgICAkc2VsZWN0LnJlbW92ZSgpOwotICAgIH07Ci0KLSAgICB0aGlzLmZv Y3VzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkc2VsZWN0LmZvY3VzKCk7Ci0gICAgfTsKLQotICAg IHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24oaXRlbSkgewotICAgICAgZGVmYXVsdFZhbHVlID0g aXRlbVthcmdzLmNvbHVtbi5maWVsZF07Ci0gICAgICBwcmV2aW91c1N0YXRlID0gMTsKLSAgICAg IGlmIChfLmlzTnVsbChkZWZhdWx0VmFsdWUpIHx8IF8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVl KSkgewotICAgICAgICAkc2VsZWN0LmZpbmQoJy5jaGVjaycpLmRhdGEoJ3N0YXRlJywgMSkuYWRk Q2xhc3MoJ3BhcnRpYWwnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlZmF1bHRWYWx1ZSA9 ICEhaXRlbVthcmdzLmNvbHVtbi5maWVsZF07Ci0gICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHsK LSAgICAgICAgICAkc2VsZWN0LmZpbmQoJy5jaGVjaycpLmRhdGEoJ3N0YXRlJywgMikuYWRkQ2xh c3MoJ2NoZWNrZWQnKTsKLSAgICAgICAgICBwcmV2aW91c1N0YXRlID0gMjsKKyAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICB2YWxpZDogdHJ1ZSwKKyAgICAgICAgICBtc2c6IG51bGwsCisgICAg ICAgIH07CisgICAgICB9OworCisgICAgICB0aGlzLmluaXQoKTsKKyAgICB9CisKKyAgICAvLyBD dXN0b20gY2hlY2tib3ggZWRpdG9yLCBXZSBuZWVkIGl0IGZvciBydW50aW1lIGFzIGl0IGRvZXMg bm90IHJlbmRlcgorICAgIC8vIGluZGV0ZXJtaW5hdGUgY2hlY2tib3ggc3RhdGUKKyAgICBmdW5j dGlvbiBwZ0NoZWNrYm94RWRpdG9yKGFyZ3MpIHsKKyAgICAgIHZhciAkc2VsZWN0LCBlbDsKKyAg ICAgIHZhciBkZWZhdWx0VmFsdWUsIHByZXZpb3VzU3RhdGU7CisKKyAgICAgIHRoaXMuaW5pdCA9 IGZ1bmN0aW9uKCkgeworICAgICAgICAkc2VsZWN0ID0gJCgnPGRpdiBjbGFzcz1cJ211bHRpLWNo ZWNrYm94XCc+PHNwYW4gY2xhc3M9XCdjaGVja1wnIGhpZGVGb2N1cz48L3NwYW4+PC9kaXY+Jyk7 CisgICAgICAgICRzZWxlY3QuYXBwZW5kVG8oYXJncy5jb250YWluZXIpOworICAgICAgICAkc2Vs ZWN0LmZvY3VzKCk7CisKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHRha2VuIGZy b20gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9pbmRldGVybWluYXRlLWNoZWNrYm94ZXMvCisgICAg ICAgICRzZWxlY3QuYmluZCgnY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbCA9ICQo dGhpcyk7CisgICAgICAgICAgdmFyIHN0YXRlcyA9IFsndW5jaGVja2VkJywgJ3BhcnRpYWwnLCAn Y2hlY2tlZCddOworICAgICAgICAgIHZhciBjdXJTdGF0ZSA9IGVsLmZpbmQoJy5jaGVjaycpLmRh dGEoJ3N0YXRlJyk7CisgICAgICAgICAgY3VyU3RhdGUrKzsKKyAgICAgICAgICBlbC5maW5kKCcu Y2hlY2snKQorICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCd1bmNoZWNrZWQgcGFydGlhbCBjaGVj a2VkJykKKyAgICAgICAgICAgIC5hZGRDbGFzcyhzdGF0ZXNbY3VyU3RhdGUgJSBzdGF0ZXMubGVu Z3RoXSkKKyAgICAgICAgICAgIC5kYXRhKCdzdGF0ZScsIGN1clN0YXRlICUgc3RhdGVzLmxlbmd0 aCk7CisgICAgICAgIH0pOworICAgICAgfTsKKworICAgICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rp b24oKSB7CisgICAgICAgICRzZWxlY3QucmVtb3ZlKCk7CisgICAgICB9OworCisgICAgICB0aGlz LmZvY3VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgICRzZWxlY3QuZm9jdXMoKTsKKyAgICAgIH07 CisKKyAgICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24oaXRlbSkgeworICAgICAgICBkZWZh dWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKKyAgICAgICAgcHJldmlvdXNTdGF0 ZSA9IDE7CisgICAgICAgIGlmIChfLmlzTnVsbChkZWZhdWx0VmFsdWUpIHx8IF8uaXNVbmRlZmlu ZWQoZGVmYXVsdFZhbHVlKSkgeworICAgICAgICAgICRzZWxlY3QuZmluZCgnLmNoZWNrJykuZGF0 YSgnc3RhdGUnLCAxKS5hZGRDbGFzcygncGFydGlhbCcpOwogICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICRzZWxlY3QuZmluZCgnLmNoZWNrJykuZGF0YSgnc3RhdGUnLCAwKS5hZGRDbGFzcygn dW5jaGVja2VkJyk7Ci0gICAgICAgICAgcHJldmlvdXNTdGF0ZSA9IDA7CisgICAgICAgICAgZGVm YXVsdFZhbHVlID0gISFpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKKyAgICAgICAgICBpZiAoZGVm YXVsdFZhbHVlKSB7CisgICAgICAgICAgICAkc2VsZWN0LmZpbmQoJy5jaGVjaycpLmRhdGEoJ3N0 YXRlJywgMikuYWRkQ2xhc3MoJ2NoZWNrZWQnKTsKKyAgICAgICAgICAgIHByZXZpb3VzU3RhdGUg PSAyOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkc2VsZWN0LmZpbmQoJy5jaGVj aycpLmRhdGEoJ3N0YXRlJywgMCkuYWRkQ2xhc3MoJ3VuY2hlY2tlZCcpOworICAgICAgICAgICAg cHJldmlvdXNTdGF0ZSA9IDA7CisgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9Ci0gICAg fTsKKyAgICAgIH07CiAKLSAgICB0aGlzLnNlcmlhbGl6ZVZhbHVlID0gZnVuY3Rpb24oKSB7Ci0g ICAgICBpZiAoJHNlbGVjdC5maW5kKCcuY2hlY2snKS5kYXRhKCdzdGF0ZScpID09IDEpIHsKLSAg ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gJHNlbGVjdC5maW5kKCcu Y2hlY2snKS5kYXRhKCdzdGF0ZScpID09IDIgPyB0cnVlIDogZmFsc2U7Ci0gICAgfTsKKyAgICAg IHRoaXMuc2VyaWFsaXplVmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCRzZWxlY3Qu ZmluZCgnLmNoZWNrJykuZGF0YSgnc3RhdGUnKSA9PSAxKSB7CisgICAgICAgICAgcmV0dXJuIG51 bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICRzZWxlY3QuZmluZCgnLmNoZWNrJykuZGF0 YSgnc3RhdGUnKSA9PSAyID8gdHJ1ZSA6IGZhbHNlOworICAgICAgfTsKIAotICAgIHRoaXMuYXBw bHlWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0sIHN0YXRlKSB7Ci0gICAgICBpdGVtW2FyZ3MuY29sdW1u LmZpZWxkXSA9IHN0YXRlOwotICAgIH07CisgICAgICB0aGlzLmFwcGx5VmFsdWUgPSBmdW5jdGlv bihpdGVtLCBzdGF0ZSkgeworICAgICAgICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0YXRl OworICAgICAgfTsKIAotICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbigpIHsKLSAg ICAgIHZhciBjdXJyZW50U3RhdGUgPSAkc2VsZWN0LmZpbmQoJy5jaGVjaycpLmRhdGEoJ3N0YXRl Jyk7Ci0gICAgICByZXR1cm4gY3VycmVudFN0YXRlICE9PSBwcmV2aW91c1N0YXRlOwotICAgIH07 CisgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBj dXJyZW50U3RhdGUgPSAkc2VsZWN0LmZpbmQoJy5jaGVjaycpLmRhdGEoJ3N0YXRlJyk7CisgICAg ICAgIHJldHVybiBjdXJyZW50U3RhdGUgIT09IHByZXZpb3VzU3RhdGU7CisgICAgICB9OwogCi0g ICAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGFyZ3MuY29sdW1uLnZh bGlkYXRvcikgewotICAgICAgICB2YXIgdmFsaWRhdGlvblJlc3VsdHMgPSBhcmdzLmNvbHVtbi52 YWxpZGF0b3IodGhpcy5zZXJpYWxpemVWYWx1ZSgpKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0aW9u UmVzdWx0cy52YWxpZCkgewotICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0czsKKyAg ICAgIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGFyZ3MuY29sdW1u LnZhbGlkYXRvcikgeworICAgICAgICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0cyA9IGFyZ3MuY29s dW1uLnZhbGlkYXRvcih0aGlzLnNlcmlhbGl6ZVZhbHVlKCkpOworICAgICAgICAgIGlmICghdmFs aWRhdGlvblJlc3VsdHMudmFsaWQpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVz dWx0czsKKyAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB7Ci0g ICAgICAgIHZhbGlkOiB0cnVlLAotICAgICAgICBtc2c6IG51bGwsCisgICAgICAgIHJldHVybiB7 CisgICAgICAgICAgdmFsaWQ6IHRydWUsCisgICAgICAgICAgbXNnOiBudWxsLAorICAgICAgICB9 OwogICAgICAgfTsKLSAgICB9OwogCi0gICAgdGhpcy5pbml0KCk7Ci0gIH0KKyAgICAgIHRoaXMu aW5pdCgpOworICAgIH0KIAotfSkod2luZG93LmpRdWVyeSk7CisgIH0pKHdpbmRvdy5qUXVlcnkp OworfSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL3Jlc2l6 ZV9lZGl0b3IuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL3Jlc2l6ZV9lZGl0 b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzZWMzNAotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvcmVzaXplX2VkaXRv ci5qcwpAQCAtMCwwICsxLDQ1IEBACitleHBvcnQgZnVuY3Rpb24gcmVzaXplQ29udGVudE9uRHJh Zygkd3JhcHBlciwgJGlucHV0KXsKKyAgLy8gcmlnaHQgYm9yZGVyLCBib3R0b20gYm9yZGVyIGFu ZCByaWdodCBib3R0b20gY29ybmVyIG9mIHRoZSB3cmFwcGVyIGFyZSBkcmFnZ2FibGUKKyAgJHdy YXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPSJkcmFnLWJvcmRlciIgZGF0YT0icmlnaHQiPjwvZGl2 PlwKKyAgICA8ZGl2IGNsYXNzPSJkcmFnLWJvcmRlciIgZGF0YT0iYm90dG9tIj48L2Rpdj5cCisg ICAgPGRpdiBjbGFzcz0iZHJhZy1ib3JkZXIiIGRhdGE9ImJvdGgiPjwvZGl2PicpOworCisgICR3 cmFwcGVyLmZpbmQoJy5kcmFnLWJvcmRlcicpLm9uKCdkcmFnJywgKGV2ZW50KT0+eworICAgIGV2 ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgdmFyIG1vdXNlWCA9IGV2ZW50LmNsaWVudFg7Cisg ICAgdmFyIG1vdXNlWSA9IGV2ZW50LmNsaWVudFk7CisKKyAgICAvLyBtb3VzZVggPT0gMCAmJiBt b3VzZVkgPT0gMCBtb3VzZSB1cCAvIGVuZCBvZiBkcmFnCisgICAgaWYobW91c2VYID09IDAgJiYg bW91c2VZID09IDApcmV0dXJuOworCisgICAgLy8gZGVmYXVsdCBzcGFjaW5nIGJldHdlZW4gJGlu cHV0IGFuZCBjdXJzb3IKKyAgICB2YXIgcGFkZGluZ0JvdHRvbSA9IDMwOworICAgIHZhciBwYWRk aW5nUmlnaHQgPSAxMDsKKyAgICB2YXIgZGlyID0gZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgn ZGF0YScpOworCisgICAgLy8gc2l6ZSBvZiAkaW5wdXQgaXMgY2hhbmdlZCBhY2NvcmRpbmcgdG8g Y3Vyc29yIHBvc2l0aW9uCisgICAgc3dpdGNoKGRpcil7CisgICAgY2FzZSAncmlnaHQnOgorICAg ICAgY2hhbmdlV2lkdGgoJGlucHV0LCBtb3VzZVgsIHBhZGRpbmdSaWdodCk7CisgICAgICBicmVh azsKKyAgICBjYXNlICdib3R0b20nOgorICAgICAgY2hhbmdlSGVpZ2h0KCRpbnB1dCwgbW91c2VZ LCBwYWRkaW5nQm90dG9tKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2JvdGgnOgorICAgICAg Y2hhbmdlSGVpZ2h0KCRpbnB1dCwgbW91c2VZLCBwYWRkaW5nQm90dG9tKTsKKyAgICAgIGNoYW5n ZVdpZHRoKCRpbnB1dCwgbW91c2VYLCBwYWRkaW5nUmlnaHQpOworICAgIH0KKyAgfSk7Cit9CisK K2Z1bmN0aW9uIGNoYW5nZVdpZHRoKCRpbnB1dCwgbW91c2VYLCBwYWRkaW5nKXsKKyAgdmFyIHJl Y3QgPSAkaW5wdXRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgIHZhciBuZXdXaWR0aCA9 IHJlY3Qud2lkdGggKyBtb3VzZVggLSByZWN0LnJpZ2h0IC0gcGFkZGluZzsKKyAgJGlucHV0LmNz cygnd2lkdGgnLCBuZXdXaWR0aC50b1N0cmluZygpICsgJ3B4Jyk7Cit9CisKK2Z1bmN0aW9uIGNo YW5nZUhlaWdodCgkaW5wdXQsIG1vdXNlWSwgcGFkZGluZyl7CisgIHZhciByZWN0ID0gJGlucHV0 WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICB2YXIgbmV3SGVpZ2h0ID0gcmVjdC5oZWln aHQgKyBtb3VzZVkgLSByZWN0LmJvdHRvbSAtIHBhZGRpbmc7CisgICRpbnB1dC5jc3MoJ2hlaWdo dCcsIG5ld0hlaWdodC50b1N0cmluZygpICsgJ3B4Jyk7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0b3IuY3NzIGIvd2ViL3BnYWRt aW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcwppbmRleCA0NjU4OGRj Li4wMzRlNDA1IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGlj L2Nzcy9zcWxlZGl0b3IuY3NzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0 aWMvY3NzL3NxbGVkaXRvci5jc3MKQEAgLTUwNSw2ICs1MDUsMzggQEAgaW5wdXQuZWRpdG9yLWNo ZWNrYm94OmZvY3VzIHsKICAgLW1vei1ib3JkZXItcmFkaXVzOjEwcHg7CiAgIGJvcmRlci1yYWRp dXM6MTBweDsKIH0KKworLmRyYWctYm9yZGVyeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsK KyAgcG9zaXRpb246IGFic29sdXRlOworfQorCisuZHJhZy1ib3JkZXJbZGF0YT1yaWdodF17Cisg IGN1cnNvcjogZXctcmVzaXplOworICB0b3A6IDA7CisgIHJpZ2h0OiAtMTBweDsKKyAgYm90dG9t OiAwOworICB3aWR0aDogMjBweDsKK30KKworLmRyYWctYm9yZGVyW2RhdGE9Ym90dG9tXXsKKyAg Y3Vyc29yOiBucy1yZXNpemU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMDsKKyAg cmlnaHQ6IDA7CisgIGJvdHRvbTogLTEwcHg7CisgIGhlaWdodDogMjBweDsKK30KKworLmRyYWct Ym9yZGVyW2RhdGE9Ym90aF17CisgIGN1cnNvcjogbW92ZTsKKyAgcG9zaXRpb246IGFic29sdXRl OworICBib3R0b206IC0xMHB4OworICByaWdodDogLTEwcHg7CisgIHdpZHRoOiAyMHB4OworICBo ZWlnaHQ6IDIwcHg7Cit9CisKIC5wZ190ZXh0YXJlYSB7CiAgIGJhY2tyb3VuZDojZmZmOwogICB3 aWR0aDoyNTBweDsK --f4f5e80910d010d941056877ca19--