Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hWJHj-00026l-Ma for pgadmin-hackers@arkaria.postgresql.org; Thu, 30 May 2019 11:31:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hWJHh-0002b8-2x for pgadmin-hackers@arkaria.postgresql.org; Thu, 30 May 2019 11:31:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hWJHg-0002b1-95 for pgadmin-hackers@lists.postgresql.org; Thu, 30 May 2019 11:31:48 +0000 Received: from mail-oi1-x236.google.com ([2607:f8b0:4864:20::236]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hWJHc-0003QN-VQ for pgadmin-hackers@postgresql.org; Thu, 30 May 2019 11:31:46 +0000 Received: by mail-oi1-x236.google.com with SMTP id i4so4273230oih.4 for ; Thu, 30 May 2019 04:31:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=fZZ4WZWS7S4+z9LShU4WbqnjYwDGJekGynlb7MgrB7M=; b=L71qzZOYwPPhLJbUzjUfK5EkKaXyOL6smISysFIMVRxuyW1aRBqGUT3Wab96YqCoUE nibiM3Gf9vbreKvu4WJURthCssB+udR0o4IMxBkyzcvVNvAfam13yDN9sRSfmRYuATUo SJUGamNm3SGjqkz5EzK9Sil/OLq/sTRyyQNZ4FWKMWqZ94ULzjsicjxXxmNK+4shu7V7 d3yR0D6MA3nl1WqgGeUxb2RXecZrfRT/MP9BZi+QYs+97f2ME9JiSwishf2sTGvT47F1 Hy+FrgI9BpbuzATywVt4BU9Rgp9/z6ML/NBujbm4pYFb2dLfROwmP1SSBUkEdK7M2PHC JWqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=fZZ4WZWS7S4+z9LShU4WbqnjYwDGJekGynlb7MgrB7M=; b=F72R06ZbP/SmBy/J8DU38zGvDzgaiEpVUx8J2R+D5dyIGT1B7eWFBD/vpfRFQqCkpM uU9/TSTHHJA6WgRWYM+zYEXD5WKj6Kd0UTKoSqx/svv4sd37Xya2GUpHKf+taOg2NJaW 5/nvjxxUSNnXfIS6TpktUvcsYIFyCF5vCPXPbCUB2jg1OomUmIERxXTiQ7vZy25d5C+T cgDsTeswwhAAnDp6AVN2ks53ew5+OODAaCtjUNGYjXhzh4lZ2elnlpG3y5hFtL+QZevi E4wKSOGEfXWygYCofOoyl7R+hvgd+KaZ14W0OQ/z3Mab/51OmG7EGP4fCSANFtRS4aNe p+rA== X-Gm-Message-State: APjAAAWk1FEdWbjjEynxAmSk3VoLXwImfS0b9TBBcwYUT2b3Zq/GsFsp CWpcCbAO2ZuVK4CqhjZ3ZFqrUYtTwhbzcC/1FnkAEA== X-Google-Smtp-Source: APXvYqxrJA+QKDbVNPwRxpz02wYim+cUHtcdbvM98YGayLKHJfkoBYTOUnPoT/Dlpl+u0zEx5JxgXk8OQCnZR3LauFU= X-Received: by 2002:aca:bd04:: with SMTP id n4mr420847oif.37.1559215904048; Thu, 30 May 2019 04:31:44 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Murtuza Zabuawala Date: Thu, 30 May 2019 17:01:32 +0530 Message-ID: Subject: Re: [RM#4307][pgAdmin4] Graphical Explain Plan - Embed images in explain plan only when user try to download it To: Aditya Toshniwal Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary="00000000000017119a058a193ecc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000017119a058a193ecc Content-Type: multipart/alternative; boundary="000000000000171197058a193eca" --000000000000171197058a193eca Content-Type: text/plain; charset="UTF-8" Here is updated patch. On Thu, May 30, 2019 at 4:06 PM Aditya Toshniwal < aditya.toshniwal@enterprisedb.com> wrote: > Hi Murtuza, > > I was just going through code change, and I would suggest one small change. > In the image_mapper.js, export it as default, as it will have only one > export. Then you can use it as imageMapper.default rather than > imageMapper.imageMapper. > Otherwise, looks fine to me. I didn't test though :P > > > On Thu, May 30, 2019 at 2:41 PM Murtuza Zabuawala < > murtuza.zabuawala@enterprisedb.com> wrote: > >> Hi, >> >> Embedding images using *.toDataURL()* method hits the performance of the >> explain plan rendering if the plan is complex because first it downloads >> the images then it will convert each images into base64, to improve the >> performance we will embed the images only when downloading of SVG is called >> and not when displaying the graphical plan. >> >> -- >> Regards, >> Murtuza Zabuawala >> EnterpriseDB: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> >> > > -- > Thanks and Regards, > Aditya Toshniwal > Software Engineer | EnterpriseDB India | Pune > "Don't Complain about Heat, Plant a TREE" > --000000000000171197058a193eca Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Here is updated patch.

On Thu, May 30, 2019= at 4:06 PM Aditya Toshniwal <aditya.toshniwal@enterprisedb.com> wrote:
Hi=C2=A0Murtuza,
I was just going through code change, and I would suggest one small chan= ge.
In= the image_mapper.js, export it as default, as it will have only one export= . Then you can use it as imageMapper.default rather than=C2=A0imageMapper.imageMapper.
Otherwise, looks = fine to me. I didn't test though :P


On Th= u, May 30, 2019 at 2:41 PM Murtuza Zabuawala <murtuza.zabuawala@enterprised= b.com> wrote:
Hi,
=

Embedding images using .t= oDataURL() method hits the performance of the explain plan ren= dering if the plan is complex because first it downloads the images then it= will convert each images into base64, to improve the performance we will e= mbed the images only when downloading of SVG is called and not when display= ing=C2=A0the graphical plan.

= --Regards,=
Murtuza Zabuawala
EnterpriseDB:=C2=A0http://www.enterprisedb.c= om
The Enterprise PostgreSQL Company
<= font size=3D"2">
<= /font>


--
Thanks and Regards,
Aditya Toshniwal
Software Engineer |=C2=A0EnterpriseDB I= ndia |=C2=A0Pune
"Don't Complain about Heat, Plant a TREE"
--000000000000171197058a193eca-- --00000000000017119a058a193ecc Content-Type: application/octet-stream; name="RM_4307_v1.diff" Content-Disposition: attachment; filename="RM_4307_v1.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jwakvrty0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvZXhwbGFpbi5q cyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvZXhwbGFpbi5qcwppbmRleCBh ZjUwYmRkOC4uZTEzZGY0MmUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vanMvZXhwbGFpbi5qcworKysgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2pzL2V4cGxhaW4uanMKQEAgLTEwLDExICsxMCwxMyBAQAogZGVmaW5lKCdwZ2FkbWluLm1pc2Mu ZXhwbGFpbicsIFsKICAgJ3NvdXJjZXMvdXJsX2ZvcicsICdqcXVlcnknLCAndW5kZXJzY29yZScs ICd1bmRlcnNjb3JlLnN0cmluZycsCiAgICdzb3VyY2VzL3BnYWRtaW4nLCAnYmFja2JvbmUnLCAn c25hcHN2ZycsICdleHBsYWluX3N0YXRpc3RpY3MnLAotICAnc3ZnX2Rvd25sb2FkZXInLAotXSwg ZnVuY3Rpb24odXJsX2ZvciwgJCwgXywgUywgcGdBZG1pbiwgQmFja2JvbmUsIFNuYXAsIFN0YXRp c3RpY3NNb2RlbCwgc3ZnRG93bmxvYWRlcikgeworICAnc3ZnX2Rvd25sb2FkZXInLCAnaW1hZ2Vf bWFwZXInLAorXSwgZnVuY3Rpb24odXJsX2ZvciwgJCwgXywgUywgcGdBZG1pbiwgQmFja2JvbmUs IFNuYXAsIFN0YXRpc3RpY3NNb2RlbCwKKyAgc3ZnRG93bmxvYWRlciwgaW1hZ2VNYXBwZXIpIHsK IAogICBwZ0FkbWluID0gcGdBZG1pbiB8fCB3aW5kb3cucGdBZG1pbiB8fCB7fTsKICAgc3ZnRG93 bmxvYWRlciA9IHN2Z0Rvd25sb2FkZXIuZGVmYXVsdDsKKyAgdmFyIHBnQnJvd3NlciA9IHBnQWRt aW4uQnJvd3NlcjsKIAogICAvLyBTbmFwLnN2ZyBwbHVnLWluIHRvIHdyaXRlIG11bHRpdGV4dCBh cyBpbWFnZSBuYW1lCiAgIFNuYXAucGx1Z2luKGZ1bmN0aW9uKFNuYXAsIEVsZW1lbnQsIFBhcGVy KSB7CkBAIC05NywyNzkgKzk5LDkgQEAgZGVmaW5lKCdwZ2FkbWluLm1pc2MuZXhwbGFpbicsIFsK ICAgdmFyIHBnRXhwbGFpbiA9IHBnQWRtaW4uRXhwbGFpbiA9IHsKICAgICAvLyBQcmVmaXggcGF0 aCB3aGVyZSBpbWFnZXMgYXJlIHN0b3JlZAogICAgIHByZWZpeDogdXJsX2ZvcignbWlzYy5pbmRl eCcpICsgJ3N0YXRpYy9leHBsYWluL2ltZy8nLAotICB9OwotCi0gIC8qCi0gICAqIEEgbWFwIHdo aWNoIGlzIHVzZWQgdG8gZmV0Y2ggdGhlIGltYWdlIHRvIGJlIGRyYXduIGFuZAotICAgKiB0ZXh0 IHdoaWNoIHdpbGwgYXBwZWFyIGJlbG93IGl0Ci0gICAqLwotICB2YXIgaW1hZ2VNYXBwZXIgPSB7 Ci0gICAgJ0FnZ3JlZ2F0ZSc6IHsKLSAgICAgICdpbWFnZSc6ICdleF9hZ2dyZWdhdGUuc3ZnJywK LSAgICAgICdpbWFnZV90ZXh0JzogJ0FnZ3JlZ2F0ZScsCi0gICAgfSwKLSAgICAnQXBwZW5kJzog ewotICAgICAgJ2ltYWdlJzogJ2V4X2FwcGVuZC5zdmcnLAotICAgICAgJ2ltYWdlX3RleHQnOiAn QXBwZW5kJywKLSAgICB9LAotICAgICdCaXRtYXAgSW5kZXggU2Nhbic6IGZ1bmN0aW9uKGRhdGEp IHsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgICdpbWFnZSc6ICdleF9ibXBfaW5kZXguc3ZnJywK LSAgICAgICAgJ2ltYWdlX3RleHQnOiBkYXRhWydJbmRleCBOYW1lJ10sCi0gICAgICB9OwotICAg IH0sCi0gICAgJ0JpdG1hcCBIZWFwIFNjYW4nOiBmdW5jdGlvbihkYXRhKSB7Ci0gICAgICByZXR1 cm4gewotICAgICAgICAnaW1hZ2UnOiAnZXhfYm1wX2hlYXAuc3ZnJywKLSAgICAgICAgJ2ltYWdl X3RleHQnOiBkYXRhWydSZWxhdGlvbiBOYW1lJ10sCi0gICAgICB9OwotICAgIH0sCi0gICAgJ0Jp dG1hcEFuZCc6IHsKLSAgICAgICdpbWFnZSc6ICdleF9ibXBfYW5kLnN2ZycsCi0gICAgICAnaW1h Z2VfdGV4dCc6ICdCaXRtYXAgQU5EJywKLSAgICB9LAotICAgICdCaXRtYXBPcic6IHsKLSAgICAg ICdpbWFnZSc6ICdleF9ibXBfb3Iuc3ZnJywKLSAgICAgICdpbWFnZV90ZXh0JzogJ0JpdG1hcCBP UicsCi0gICAgfSwKLSAgICAnQ1RFIFNjYW4nOiB7Ci0gICAgICAnaW1hZ2UnOiAnZXhfY3RlX3Nj YW4uc3ZnJywKLSAgICAgICdpbWFnZV90ZXh0JzogJ0NURSBTY2FuJywKLSAgICB9LAotICAgICdG dW5jdGlvbiBTY2FuJzogewotICAgICAgJ2ltYWdlJzogJ2V4X3Jlc3VsdC5zdmcnLAotICAgICAg J2ltYWdlX3RleHQnOiAnRnVuY3Rpb24gU2NhbicsCi0gICAgfSwKLSAgICAnRm9yZWlnbiBTY2Fu JzogewotICAgICAgJ2ltYWdlJzogJ2V4X2ZvcmVpZ25fc2Nhbi5zdmcnLAotICAgICAgJ2ltYWdl X3RleHQnOiAnRm9yZWlnbiBTY2FuJywKLSAgICB9LAotICAgICdHYXRoZXInOiB7Ci0gICAgICAn aW1hZ2UnOiAnZXhfZ2F0aGVyX21vdGlvbi5zdmcnLAotICAgICAgJ2ltYWdlX3RleHQnOiAnR2F0 aGVyJywKLSAgICB9LAotICAgICdHcm91cCc6IHsKLSAgICAgICdpbWFnZSc6ICdleF9ncm91cC5z dmcnLAotICAgICAgJ2ltYWdlX3RleHQnOiAnR3JvdXAnLAotICAgIH0sCi0gICAgJ0dyb3VwQWdn cmVnYXRlJzogewotICAgICAgJ2ltYWdlJzogJ2V4X2FnZ3JlZ2F0ZS5zdmcnLAotICAgICAgJ2lt YWdlX3RleHQnOiAnR3JvdXAgQWdncmVnYXRlJywKLSAgICB9LAotICAgICdIYXNoJzogewotICAg ICAgJ2ltYWdlJzogJ2V4X2hhc2guc3ZnJywKLSAgICAgICdpbWFnZV90ZXh0JzogJ0hhc2gnLAot ICAgIH0sCi0gICAgJ0hhc2ggSm9pbic6IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIGlmICghZGF0 YVsnSm9pbiBUeXBlJ10pIHJldHVybiB7Ci0gICAgICAgICdpbWFnZSc6ICdleF9qb2luLnN2Zycs Ci0gICAgICAgICdpbWFnZV90ZXh0JzogJ0pvaW4nLAotICAgICAgfTsKLSAgICAgIHN3aXRjaCAo ZGF0YVsnSm9pbiBUeXBlJ10pIHsKLSAgICAgIGNhc2UgJ0FudGknOgotICAgICAgICByZXR1cm4g ewotICAgICAgICAgICdpbWFnZSc6ICdleF9oYXNoX2FudGlfam9pbi5zdmcnLAotICAgICAgICAg ICdpbWFnZV90ZXh0JzogJ0hhc2ggQW50aSBKb2luJywKLSAgICAgICAgfTsKLSAgICAgIGNhc2Ug J1NlbWknOgotICAgICAgICByZXR1cm4gewotICAgICAgICAgICdpbWFnZSc6ICdleF9oYXNoX3Nl bWlfam9pbi5zdmcnLAotICAgICAgICAgICdpbWFnZV90ZXh0JzogJ0hhc2ggU2VtaSBKb2luJywK LSAgICAgICAgfTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg J2ltYWdlJzogJ2V4X2hhc2guc3ZnJywKLSAgICAgICAgICAnaW1hZ2VfdGV4dCc6IFN0cmluZygn SGFzaCAnICsgZGF0YVsnSm9pbiBUeXBlJ10gKyAnIEpvaW4nKSwKLSAgICAgICAgfTsKLSAgICAg IH0KLSAgICB9LAotICAgICdIYXNoQWdncmVnYXRlJzogewotICAgICAgJ2ltYWdlJzogJ2V4X2Fn Z3JlZ2F0ZS5zdmcnLAotICAgICAgJ2ltYWdlX3RleHQnOiAnSGFzaCBBZ2dyZWdhdGUnLAotICAg IH0sCi0gICAgJ0luZGV4IE9ubHkgU2Nhbic6IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHJldHVy biB7Ci0gICAgICAgICdpbWFnZSc6ICdleF9pbmRleF9vbmx5X3NjYW4uc3ZnJywKLSAgICAgICAg J2ltYWdlX3RleHQnOiBkYXRhWydJbmRleCBOYW1lJ10sCi0gICAgICB9OwotICAgIH0sCi0gICAg J0luZGV4IFNjYW4nOiBmdW5jdGlvbihkYXRhKSB7Ci0gICAgICByZXR1cm4gewotICAgICAgICAn aW1hZ2UnOiAnZXhfaW5kZXhfc2Nhbi5zdmcnLAotICAgICAgICAnaW1hZ2VfdGV4dCc6IGRhdGFb J0luZGV4IE5hbWUnXSwKLSAgICAgIH07Ci0gICAgfSwKLSAgICAnSW5kZXggU2NhbiBCYWNrd29y ZCc6IHsKLSAgICAgICdpbWFnZSc6ICdleF9pbmRleF9zY2FuLnN2ZycsCi0gICAgICAnaW1hZ2Vf dGV4dCc6ICdJbmRleCBCYWNrd2FyZCBTY2FuJywKLSAgICB9LAotICAgICdMaW1pdCc6IHsKLSAg ICAgICdpbWFnZSc6ICdleF9saW1pdC5zdmcnLAotICAgICAgJ2ltYWdlX3RleHQnOiAnTGltaXQn LAotICAgIH0sCi0gICAgJ0xvY2tSb3dzJzogewotICAgICAgJ2ltYWdlJzogJ2V4X2xvY2tfcm93 cy5zdmcnLAotICAgICAgJ2ltYWdlX3RleHQnOiAnTG9jayBSb3dzJywKLSAgICB9LAotICAgICdN YXRlcmlhbGl6ZSc6IHsKLSAgICAgICdpbWFnZSc6ICdleF9tYXRlcmlhbGl6ZS5zdmcnLAotICAg ICAgJ2ltYWdlX3RleHQnOiAnTWF0ZXJpYWxpemUnLAotICAgIH0sCi0gICAgJ01lcmdlIEFwcGVu ZCc6IHsKLSAgICAgICdpbWFnZSc6ICdleF9tZXJnZV9hcHBlbmQuc3ZnJywKLSAgICAgICdpbWFn ZV90ZXh0JzogJ01lcmdlIEFwcGVuZCcsCi0gICAgfSwKLSAgICAnTWVyZ2UgSm9pbic6IGZ1bmN0 aW9uKGRhdGEpIHsKLSAgICAgIHN3aXRjaCAoZGF0YVsnSm9pbiBUeXBlJ10pIHsKLSAgICAgIGNh c2UgJ0FudGknOgotICAgICAgICByZXR1cm4gewotICAgICAgICAgICdpbWFnZSc6ICdleF9tZXJn ZV9hbnRpX2pvaW4uc3ZnJywKLSAgICAgICAgICAnaW1hZ2VfdGV4dCc6ICdNZXJnZSBBbnRpIEpv aW4nLAotICAgICAgICB9OwotICAgICAgY2FzZSAnU2VtaSc6Ci0gICAgICAgIHJldHVybiB7Ci0g ICAgICAgICAgJ2ltYWdlJzogJ2V4X21lcmdlX3NlbWlfam9pbi5zdmcnLAotICAgICAgICAgICdp bWFnZV90ZXh0JzogJ01lcmdlIFNlbWkgSm9pbicsCi0gICAgICAgIH07Ci0gICAgICBkZWZhdWx0 OgotICAgICAgICByZXR1cm4gewotICAgICAgICAgICdpbWFnZSc6ICdleF9tZXJnZS5zdmcnLAot ICAgICAgICAgICdpbWFnZV90ZXh0JzogU3RyaW5nKCdNZXJnZSAnICsgZGF0YVsnSm9pbiBUeXBl J10gKyAnIEpvaW4nKSwKLSAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9LAotICAgICdNb2RpZnlU YWJsZSc6IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHN3aXRjaCAoZGF0YVsnT3BlcmF0aW9uJ10p IHsKLSAgICAgIGNhc2UgJ0luc2VydCc6Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgJ2lt YWdlJzogJ2V4X2luc2VydC5zdmcnLAotICAgICAgICAgICdpbWFnZV90ZXh0JzogJ0luc2VydCcs Ci0gICAgICAgIH07Ci0gICAgICBjYXNlICdVcGRhdGUnOgotICAgICAgICByZXR1cm4gewotICAg ICAgICAgICdpbWFnZSc6ICdleF91cGRhdGUuc3ZnJywKLSAgICAgICAgICAnaW1hZ2VfdGV4dCc6 ICdVcGRhdGUnLAotICAgICAgICB9OwotICAgICAgY2FzZSAnRGVsZXRlJzoKLSAgICAgICAgcmV0 dXJuIHsKLSAgICAgICAgICAnaW1hZ2UnOiAnZXhfZGVsZXRlLnN2ZycsCi0gICAgICAgICAgJ2lt YWdlX3RleHQnOiAnRGVsZXRlJywKLSAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9LAotICAgICdO ZXN0ZWQgTG9vcCc6IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHN3aXRjaCAoZGF0YVsnSm9pbiBU eXBlJ10pIHsKLSAgICAgIGNhc2UgJ0FudGknOgotICAgICAgICByZXR1cm4gewotICAgICAgICAg ICdpbWFnZSc6ICdleF9uZXN0ZWRfbG9vcF9hbnRpX2pvaW4uc3ZnJywKLSAgICAgICAgICAnaW1h Z2VfdGV4dCc6ICdOZXN0ZWQgTG9vcCBBbnRpIEpvaW4nLAotICAgICAgICB9OwotICAgICAgY2Fz ZSAnU2VtaSc6Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgJ2ltYWdlJzogJ2V4X25lc3Rl ZF9sb29wX3NlbWlfam9pbi5zdmcnLAotICAgICAgICAgICdpbWFnZV90ZXh0JzogJ05lc3RlZCBM b29wIFNlbWkgSm9pbicsCi0gICAgICAgIH07Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1 cm4gewotICAgICAgICAgICdpbWFnZSc6ICdleF9uZXN0ZWQuc3ZnJywKLSAgICAgICAgICAnaW1h Z2VfdGV4dCc6ICdOZXN0ZWQgTG9vcCAnICsgZGF0YVsnSm9pbiBUeXBlJ10gKyAnIEpvaW4nLAot ICAgICAgICB9OwotICAgICAgfQotICAgIH0sCi0gICAgJ1JlY3Vyc2l2ZSBVbmlvbic6IHsKLSAg ICAgICdpbWFnZSc6ICdleF9yZWN1cnNpdmVfdW5pb24uc3ZnJywKLSAgICAgICdpbWFnZV90ZXh0 JzogJ1JlY3Vyc2l2ZSBVbmlvbicsCi0gICAgfSwKLSAgICAnUmVzdWx0JzogewotICAgICAgJ2lt YWdlJzogJ2V4X3Jlc3VsdC5zdmcnLAotICAgICAgJ2ltYWdlX3RleHQnOiAnUmVzdWx0JywKLSAg ICB9LAotICAgICdTYW1wbGUgU2Nhbic6IHsKLSAgICAgICdpbWFnZSc6ICdleF9zY2FuLnN2Zycs Ci0gICAgICAnaW1hZ2VfdGV4dCc6ICdTYW1wbGUgU2NhbicsCi0gICAgfSwKLSAgICAnU2Nhbic6 IHsKLSAgICAgICdpbWFnZSc6ICdleF9zY2FuLnN2ZycsCi0gICAgICAnaW1hZ2VfdGV4dCc6ICdT Y2FuJywKLSAgICB9LAotICAgICdTZWVrJzogewotICAgICAgJ2ltYWdlJzogJ2V4X3NlZWsuc3Zn JywKLSAgICAgICdpbWFnZV90ZXh0JzogJ1NlZWsnLAotICAgIH0sCi0gICAgJ1NldE9wJzogZnVu Y3Rpb24oZGF0YSkgewotICAgICAgdmFyIHN0cmF0ZWd5ID0gZGF0YVsnU3RyYXRlZ3knXSwKLSAg ICAgICAgY29tbWFuZCA9IGRhdGFbJ0NvbW1hbmQnXTsKLQotICAgICAgaWYgKHN0cmF0ZWd5ID09 ICdIYXNoZWQnKSB7Ci0gICAgICAgIGlmIChTLnN0YXJ0c1dpdGgoY29tbWFuZCwgJ0ludGVyc2Vj dCcpKSB7Ci0gICAgICAgICAgaWYgKGNvbW1hbmQgPT0gJ0ludGVyc2VjdCBBbGwnKQotICAgICAg ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgJ2ltYWdlJzogJ2V4X2hhc2hfc2V0b3BfaW50 ZXJzZWN0X2FsbC5zdmcnLAotICAgICAgICAgICAgICAnaW1hZ2VfdGV4dCc6ICdIYXNoZWQgSW50 ZXJzZWN0IEFsbCcsCi0gICAgICAgICAgICB9OwotICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg ICAgICAnaW1hZ2UnOiAnZXhfaGFzaF9zZXRvcF9pbnRlcnNlY3Quc3ZnJywKLSAgICAgICAgICAg ICdpbWFnZV90ZXh0JzogJ0hhc2hlZCBJbnRlcnNlY3QnLAotICAgICAgICAgIH07Ci0gICAgICAg IH0gZWxzZSBpZiAoUy5zdGFydHNXaXRoKGNvbW1hbmQsICdFeGNlcHQnKSkgewotICAgICAgICAg IGlmIChjb21tYW5kID09ICdFeGNlcHQgQWxsJykKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg ICAgICAgICAgICdpbWFnZSc6ICdleF9oYXNoX3NldG9wX2V4Y2VwdF9hbGwuc3ZnJywKLSAgICAg ICAgICAgICAgJ2ltYWdlX3RleHQnOiAnSGFzaGVkIEV4Y2VwdCBBbGwnLAotICAgICAgICAgICAg fTsKLSAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgJ2ltYWdlJzogJ2V4X2hhc2hfc2V0 b3BfZXhjZXB0LnN2ZycsCi0gICAgICAgICAgICAnaW1hZ2VfdGV4dCc6ICdIYXNoIEV4Y2VwdCcs Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICdp bWFnZSc6ICdleF9oYXNoX3NldG9wX3Vua25vd24uc3ZnJywKLSAgICAgICAgICAnaW1hZ2VfdGV4 dCc6ICdIYXNoZWQgU2V0T3AgVW5rbm93bicsCi0gICAgICAgIH07Ci0gICAgICB9Ci0gICAgICBy ZXR1cm4gewotICAgICAgICAnaW1hZ2UnOiAnZXhfc2V0b3Auc3ZnJywKLSAgICAgICAgJ2ltYWdl X3RleHQnOiAnU2V0T3AnLAotICAgICAgfTsKLSAgICB9LAotICAgICdTZXEgU2Nhbic6IGZ1bmN0 aW9uKGRhdGEpIHsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgICdpbWFnZSc6ICdleF9zY2FuLnN2 ZycsCi0gICAgICAgICdpbWFnZV90ZXh0JzogZGF0YVsnUmVsYXRpb24gTmFtZSddLAotICAgICAg fTsKLSAgICB9LAotICAgICdTdWJxdWVyeSBTY2FuJzogewotICAgICAgJ2ltYWdlJzogJ2V4X3N1 YnBsYW4uc3ZnJywKLSAgICAgICdpbWFnZV90ZXh0JzogJ1N1YlF1ZXJ5IFNjYW4nLAotICAgIH0s Ci0gICAgJ1NvcnQnOiB7Ci0gICAgICAnaW1hZ2UnOiAnZXhfc29ydC5zdmcnLAotICAgICAgJ2lt YWdlX3RleHQnOiAnU29ydCcsCi0gICAgfSwKLSAgICAnVGlkIFNjYW4nOiB7Ci0gICAgICAnaW1h Z2UnOiAnZXhfdGlkX3NjYW4uc3ZnJywKLSAgICAgICdpbWFnZV90ZXh0JzogJ1RpZCBTY2FuJywK LSAgICB9LAotICAgICdVbmlxdWUnOiB7Ci0gICAgICAnaW1hZ2UnOiAnZXhfdW5pcXVlLnN2Zycs Ci0gICAgICAnaW1hZ2VfdGV4dCc6ICdVbmlxdWUnLAotICAgIH0sCi0gICAgJ1ZhbHVlcyBTY2Fu JzogewotICAgICAgJ2ltYWdlJzogJ2V4X3ZhbHVlc19zY2FuLnN2ZycsCi0gICAgICAnaW1hZ2Vf dGV4dCc6ICdWYWx1ZXMgU2NhbicsCi0gICAgfSwKLSAgICAnV2luZG93QWdnJzogewotICAgICAg J2ltYWdlJzogJ2V4X3dpbmRvd19hZ2dyZWdhdGUuc3ZnJywKLSAgICAgICdpbWFnZV90ZXh0Jzog J1dpbmRvdyBBZ2dyZWdhdGUnLAotICAgIH0sCi0gICAgJ1dvcmtUYWJsZSBTY2FuJzogewotICAg ICAgJ2ltYWdlJzogJ2V4X3dvcmt0YWJsZV9zY2FuLnN2ZycsCi0gICAgICAnaW1hZ2VfdGV4dCc6 ICdXb3JrVGFibGUgU2NhbicsCi0gICAgfSwKLSAgICAnVW5kZWZpbmVkJzogewotICAgICAgJ2lt YWdlJzogJ2V4X3Vua25vd24uc3ZnJywKLSAgICAgICdpbWFnZV90ZXh0JzogJ1VuZGVmaW5lZCcs Ci0gICAgfSwKKyAgICB0b3RhbE5vZGVzOiAwLAorICAgIHRvdGFsRG93bmxvYWRlZE5vZGVzOiAw LAorICAgIGlzRG93bmxvYWRlZDogZmFsc2UsCiAgIH07CiAKICAgLy8gU29tZSBwcmVkZWZpbmVk IGNvbnN0YW50cyB1c2VkIHRvIGNhbGN1bGF0ZSBpbWFnZSBsb2NhdGlvbiBhbmQgaXRzIGJvcmRl cgpAQCAtNDMzLDkgKzE2NSwxMCBAQCBkZWZpbmUoJ3BnYWRtaW4ubWlzYy5leHBsYWluJywgWwog ICAgICAgICBub2RlX3R5cGUgPSBub2RlX3R5cGUuc3Vic3RyaW5nKDAsIDcpOwogCiAgICAgICAv LyBHZXQgdGhlIGltYWdlIGluZm9ybWF0aW9uIGZvciBjdXJyZW50IG5vZGUKLSAgICAgIHZhciBt YXBwZWRJbWFnZSA9IChfLmlzRnVuY3Rpb24oaW1hZ2VNYXBwZXJbbm9kZV90eXBlXSkgJiYKLSAg ICAgICAgICBpbWFnZU1hcHBlcltub2RlX3R5cGVdLmFwcGx5KHVuZGVmaW5lZCwgW2RhdGFdKSkg fHwKLSAgICAgICAgaW1hZ2VNYXBwZXJbbm9kZV90eXBlXSB8fCB7CisgICAgICBsZXQgaW1hZ2VT dG9yZSA9IGltYWdlTWFwcGVyLmRlZmF1bHQ7CisgICAgICB2YXIgbWFwcGVkSW1hZ2UgPSAoXy5p c0Z1bmN0aW9uKGltYWdlU3RvcmVbbm9kZV90eXBlXSkgJiYKKyAgICAgICAgICBpbWFnZVN0b3Jl W25vZGVfdHlwZV0uYXBwbHkodW5kZWZpbmVkLCBbZGF0YV0pKSB8fAorICAgICAgICBpbWFnZVN0 b3JlW25vZGVfdHlwZV0gfHwgewogICAgICAgICAnaW1hZ2UnOiAnZXhfdW5rbm93bi5zdmcnLAog ICAgICAgICAnaW1hZ2VfdGV4dCc6IG5vZGVfdHlwZSwKICAgICAgIH07CkBAIC01NzYsMzQgKzMw OSw3IEBAIGRlZmluZSgncGdhZG1pbi5taXNjLmV4cGxhaW4nLCBbCiAgICAgICAgIH0pOwogICAg ICAgfQogCi0gICAgICAvKiBDaGVjayB0aGUgY3VycmVudCBicm93c2VyLCBpZiBpdCBpcyBJbnRl cm5ldCBFeHBsb3JlciB0aGVuIHdlIHdpbGwgbm90Ci0gICAgICAgKiBlbWJlZCB0aGUgU1ZHIGZp bGVzIGZvciBkb3dubG9hZCBmZWF0dXJlIGFzIHdlIGFyZSBub3QgYmFsZSB0byBmaWd1cmUKLSAg ICAgICAqIG91dCB0aGUgc29sdXRpb24gZm9yIElFLgotICAgICAgICovCi0gICAgICB2YXIgY3Vy cmVudF9icm93c2VyID0gcGdBZG1pbi5Ccm93c2VyLmdldF9icm93c2VyKCk7Ci0gICAgICBpZiAo Y3VycmVudF9icm93c2VyLm5hbWUgPT09ICdJRScgfHwKLSAgICAgICAgKGN1cnJlbnRfYnJvd3Nl ci5uYW1lID09PSAnU2FmYXJpJyAmJiBwYXJzZUludChjdXJyZW50X2Jyb3dzZXIudmVyc2lvbikg PCAxMCkpIHsKLSAgICAgICAgdGhpcy5kcmF3X2ltYWdlKGcsIHBnRXhwbGFpbi5wcmVmaXggKyB0 aGlzLmdldCgnaW1hZ2UnKSwgY3VycmVudFhwb3MsIGN1cnJlbnRZcG9zLCBncmFwaENvbnRhaW5l ciwgdG9vbFRpcENvbnRhaW5lcik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBUaGlzIGZ1 bmN0aW9uIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gd2UgbG9hZCBhbnkgc3Zn IGZpbGUKLSAgICAgICAgICogdXNpbmcgU25hcC4gSW4gdGhpcyBmdW5jdGlvbiB3ZSBhcHBlbmQg dGhlIFNWRyBiaW5hcnkgZGF0YSB0byB0aGUgbmV3Ci0gICAgICAgICAqIHRlbXBvcmFyeSBTbmFw IG9iamVjdCBhbmQgdGhlbiBlbWJlZGRlZCBpdCB0byB0aGUgb3JpZ2luYWwgU25hcCgpIG9iamVj dC4KLSAgICAgICAgICovCi0gICAgICAgIHZhciB0aGF0ID0gdGhpczsKLSAgICAgICAgdmFyIG9u U1ZHTG9hZGVkID0gZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgIHZhciBzdmdfaW1hZ2UgPSBT bmFwKCk7Ci0gICAgICAgICAgc3ZnX2ltYWdlLmFwcGVuZChkYXRhKTsKLQotICAgICAgICAgIHRo YXQuZHJhd19pbWFnZShnLCBzdmdfaW1hZ2UudG9EYXRhVVJMKCksIGN1cnJlbnRYcG9zLCBjdXJy ZW50WXBvcywgZ3JhcGhDb250YWluZXIsIHRvb2xUaXBDb250YWluZXIpOwotCi0gICAgICAgICAg Ly8gVGhpcyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgdG8gZG93bmxvYWQgdGhlIGZpbGUgYXMgU1ZH IGltYWdlLgotICAgICAgICAgIHMucGFyZW50KCkuYXR0cih7J3htbG5zOnhsaW5rJzonaHR0cDov L3d3dy53My5vcmcvMTk5OS94bGluayd9KTsKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgc3Zn X2ZpbGUgPSBwZ0V4cGxhaW4ucHJlZml4ICsgdGhpcy5nZXQoJ2ltYWdlJyk7Ci0gICAgICAgIC8v IExvYWQgdGhlIFNWRyBmaWxlIGZvciBleHBsYWluIHBsYW4KLSAgICAgICAgU25hcC5sb2FkKHN2 Z19maWxlLCBvblNWR0xvYWRlZCk7Ci0gICAgICB9CisgICAgICB0aGlzLmRyYXdfaW1hZ2UoZywg cGdFeHBsYWluLnByZWZpeCArIHRoaXMuZ2V0KCdpbWFnZScpLCBjdXJyZW50WHBvcywgY3VycmVu dFlwb3MsIGdyYXBoQ29udGFpbmVyLCB0b29sVGlwQ29udGFpbmVyKTsKIAogICAgICAgLy8gRHJh dyB0ZXh0IGJlbG93IHRoZSBub2RlCiAgICAgICB2YXIgbm9kZV9sYWJlbCA9IHRoaXMuZ2V0KCdT Y2hlbWEnKSA9PSB1bmRlZmluZWQgPwpAQCAtNzYwLDYgKzQ2NiwyMjQgQEAgZGVmaW5lKCdwZ2Fk bWluLm1pc2MuZXhwbGFpbicsIFsKICAgICB9LAogICB9KTsKIAorCisgIC8qCisgICAqIE5PVEU6 IGVtYmVkZGluZyB1c2luZyAudG9EYXRhVVJMKCkgbWV0aG9kIGhpdHMgdGhlIHBlcmZvcm1hbmNl IG9mIHRoZQorICAgKiBwbGFuIHJlbmRlcmluZyBhIGxvdCwgdGhhdCBpcyB3aHkgd2UgaGF2ZSB3 cml0dGVuIHNlcHJhdGUgTW9kZWwgZm9yIHRoZSBzYW1lCisgICAqIHdoaWNoIGlzIHVzZWQgb25s eSB3aGVuIGRvd25sb2FkaW5nIG9mIFNWRyBpcyBjYWxsZWQKKyAgICovCisgIC8vIFdlIG92ZXJy aWRlIHRoZSBQbGFuTW9kZWwncyBkcmF3KCkgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gZW1iYmVk IGFsbCB0aGUKKyAgLy8gc3ZnIGluIHRvIG1haW4gb25lIFNWRyBzbyB0aGF0IHdlIGNhbiBkb3du bG9hZCBpdC4KKyAgbGV0IERvd25sb2FkUGxhbk1vZGVsID0gUGxhbk1vZGVsLmV4dGVuZCh7Cisg ICAgLy8gRHJhdyBpbWFnZSwgaXRzIG5hbWUgYW5kIGl0cyB0b29sdGlwCisgICAgcGFyc2U6IGZ1 bmN0aW9uKGRhdGEpIHsKKyAgICAgIHZhciBpZHggPSAxLAorICAgICAgICBsdmwgPSBkYXRhLmxl dmVsID0gZGF0YS5sZXZlbCB8fCBbaWR4XSwKKyAgICAgICAgcGxhbnMgPSBbXSwKKyAgICAgICAg bm9kZV90eXBlID0gZGF0YVsnTm9kZSBUeXBlJ10sCisgICAgICAgIC8vIENhbGN1bGF0aW5nIHJl bGF0aXZlIHhwb3Mgb2YgY3VycmVudCBub2RlIGZyb20gdG9wIG5vZGUKKyAgICAgICAgeHBvcyA9 IGRhdGEueHBvcyA9IGRhdGEueHBvcyAtIHBXSURUSCwKKyAgICAgICAgLy8gQ2FsY3VsYXRpbmcg cmVsYXRpdmUgeXBvcyBvZiBjdXJyZW50IG5vZGUgZnJvbSB0b3Agbm9kZQorICAgICAgICB5cG9z ID0gZGF0YS55cG9zLAorICAgICAgICBtYXhDaGlsZFdpZHRoID0gMDsKKworICAgICAgZGF0YVsn d2lkdGgnXSA9IHBXSURUSDsKKyAgICAgIGRhdGFbJ2hlaWdodCddID0gcEhFSUdIVDsKKworICAg ICAgLyoKKyAgICAgICAqIGNhbGN1bGF0aW5nIHhwb3MsIHlwb3MsIHdpZHRoIGFuZCBoZWlnaHQg aWYgY3VycmVudCBub2RlIGlzIGEgc3VicGxhbgorICAgICAgICovCisgICAgICBpZiAoZGF0YVsn UGFyZW50IFJlbGF0aW9uc2hpcCddID09PSAnU3ViUGxhbicpIHsKKyAgICAgICAgZGF0YVsnd2lk dGgnXSArPSAoeE1hcmdpbiAqIDIpICsgKHhNYXJnaW4gLyAyKTsKKyAgICAgICAgZGF0YVsnaGVp Z2h0J10gKz0gKHlNYXJnaW4gKiAyKTsKKyAgICAgICAgZGF0YVsneXBvcyddICs9IHlNYXJnaW47 CisgICAgICAgIHhwb3MgLT0geE1hcmdpbjsKKyAgICAgICAgeXBvcyArPSB5TWFyZ2luOworICAg ICAgfQorCisgICAgICBpZiAoUy5zdGFydHNXaXRoKG5vZGVfdHlwZSwgJyhzbGljZScpKQorICAg ICAgICBub2RlX3R5cGUgPSBub2RlX3R5cGUuc3Vic3RyaW5nKDAsIDcpOworICAgICAgLy8gR2V0 IHRoZSBpbWFnZSBpbmZvcm1hdGlvbiBmb3IgY3VycmVudCBub2RlCisgICAgICBsZXQgaW1hZ2VT dG9yZSA9IGltYWdlTWFwcGVyLmRlZmF1bHQ7CisgICAgICB2YXIgbWFwcGVkSW1hZ2UgPSAoXy5p c0Z1bmN0aW9uKGltYWdlU3RvcmVbbm9kZV90eXBlXSkgJiYKKyAgICAgICAgICBpbWFnZVN0b3Jl W25vZGVfdHlwZV0uYXBwbHkodW5kZWZpbmVkLCBbZGF0YV0pKSB8fAorICAgICAgICBpbWFnZVN0 b3JlW25vZGVfdHlwZV0gfHwgeworICAgICAgICAnaW1hZ2UnOiAnZXhfdW5rbm93bi5zdmcnLAor ICAgICAgICAnaW1hZ2VfdGV4dCc6IG5vZGVfdHlwZSwKKyAgICAgIH07CisKKyAgICAgIGRhdGFb J2ltYWdlJ10gPSBtYXBwZWRJbWFnZVsnaW1hZ2UnXTsKKyAgICAgIGRhdGFbJ2ltYWdlX3RleHQn XSA9IG1hcHBlZEltYWdlWydpbWFnZV90ZXh0J107CisgICAgICBwZ0V4cGxhaW4udG90YWxOb2Rl cysrOworCisgICAgICAvLyBTdGFydCBjYWxjdWxhdGluZyB4cG9zLCB5cG9zLCB3aWR0aCBhbmQg aGVpZ2h0IGZvciBjaGlsZCBwbGFucyBpZiBhbnkKKyAgICAgIGlmICgnUGxhbnMnIGluIGRhdGEp IHsKKworICAgICAgICBkYXRhWyd3aWR0aCddICs9IG9mZnNldFg7CisKKyAgICAgICAgXy5lYWNo KGRhdGFbJ1BsYW5zJ10sIGZ1bmN0aW9uKHApIHsKKyAgICAgICAgICB2YXIgbGV2ZWwgPSBfLmNs b25lKGx2bCksCisgICAgICAgICAgICBwbGFuID0gbmV3IERvd25sb2FkUGxhbk1vZGVsKHsgJ3Bh cnNlJzogdHJ1ZSB9KTsKKworICAgICAgICAgIGxldmVsLnB1c2goaWR4KTsKKyAgICAgICAgICBw bGFuLnNldChwbGFuLnBhcnNlKF8uZXh0ZW5kKAorICAgICAgICAgICAgcCwgeworICAgICAgICAg ICAgICAnbGV2ZWwnOiBsZXZlbCwKKyAgICAgICAgICAgICAgeHBvczogeHBvcyAtIG9mZnNldFgs CisgICAgICAgICAgICAgIHlwb3M6IHlwb3MsCisgICAgICAgICAgICB9KSkpOworCisgICAgICAg ICAgaWYgKG1heENoaWxkV2lkdGggPCBwbGFuLmdldCgnd2lkdGgnKSkgeworICAgICAgICAgICAg bWF4Q2hpbGRXaWR0aCA9IHBsYW4uZ2V0KCd3aWR0aCcpOworICAgICAgICAgIH0KKworICAgICAg ICAgIHZhciBjaGlsZEhlaWdodCA9IHBsYW4uZ2V0KCdoZWlnaHQnKTsKKworICAgICAgICAgIGlm IChpZHggIT09IDEpIHsKKyAgICAgICAgICAgIGRhdGFbJ2hlaWdodCddID0gZGF0YVsnaGVpZ2h0 J10gKyBjaGlsZEhlaWdodCArIG9mZnNldFk7CisgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZEhl aWdodCA+IGRhdGFbJ2hlaWdodCddKSB7CisgICAgICAgICAgICBkYXRhWydoZWlnaHQnXSA9IGNo aWxkSGVpZ2h0OworICAgICAgICAgIH0KKyAgICAgICAgICB5cG9zICs9IGNoaWxkSGVpZ2h0ICsg b2Zmc2V0WTsKKworICAgICAgICAgIHBsYW5zLnB1c2gocGxhbik7CisgICAgICAgICAgaWR4Kys7 CisgICAgICAgIH0pOworICAgICAgfQorCisgICAgICAvLyBGaW5hbCBXaWR0aCBhbmQgSGVpZ2h0 IG9mIGN1cnJlbnQgbm9kZQorICAgICAgZGF0YVsnd2lkdGgnXSArPSBtYXhDaGlsZFdpZHRoOwor ICAgICAgZGF0YVsnUGxhbnMnXSA9IHBsYW5zOworCisgICAgICByZXR1cm4gZGF0YTsKKyAgICB9 LAorICAgIGRyYXc6IGZ1bmN0aW9uKHMsIHhwb3MsIHlwb3MsIHBYcG9zLCBwWXBvcywgZ3JhcGhD b250YWluZXIsIHRvb2xUaXBDb250YWluZXIpIHsKKyAgICAgIHZhciBnID0gcy5nKCk7CisgICAg ICB2YXIgY3VycmVudFhwb3MgPSB4cG9zICsgdGhpcy5nZXQoJ3hwb3MnKSwKKyAgICAgICAgY3Vy cmVudFlwb3MgPSB5cG9zICsgdGhpcy5nZXQoJ3lwb3MnKSwKKyAgICAgICAgaXNTdWJQbGFuID0g KHRoaXMuZ2V0KCdQYXJlbnQgUmVsYXRpb25zaGlwJykgPT09ICdTdWJQbGFuJyk7CisKKyAgICAg IC8vIERyYXcgdGhlIHN1YnBsYW4gcmVjdGFuZ2xlCisgICAgICBpZiAoaXNTdWJQbGFuKSB7Cisg ICAgICAgIGcucmVjdCgKKyAgICAgICAgICBjdXJyZW50WHBvcyAtIHRoaXMuZ2V0KCd3aWR0aCcp ICsgcFdJRFRIICsgeE1hcmdpbiwKKyAgICAgICAgICBjdXJyZW50WXBvcyAtIHRoaXMuZ2V0KCdo ZWlnaHQnKSArIHBIRUlHSFQgKyB5TWFyZ2luIC0gVFhUX0FMSUdOLAorICAgICAgICAgIHRoaXMu Z2V0KCd3aWR0aCcpIC0geE1hcmdpbiwKKyAgICAgICAgICB0aGlzLmdldCgnaGVpZ2h0JykgKyAo Y3VycmVudFlwb3MgLSB5TWFyZ2luKSwKKyAgICAgICAgICA1CisgICAgICAgICkuYXR0cih7Cisg ICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsCisgICAgICAgICAgJ3N0cm9rZVdpZHRoJzogMS4y LAorICAgICAgICAgIGZpbGw6ICdncmF5JywKKyAgICAgICAgICBmaWxsT3BhY2l0eTogMC4yLAor ICAgICAgICB9KTsKKworICAgICAgICAvLyBQcm92aWRlIHN1YnBsYW4gbmFtZQorICAgICAgICBn LnRleHQoCisgICAgICAgICAgY3VycmVudFhwb3MgKyBwV0lEVEggLSAodGhpcy5nZXQoJ3dpZHRo JykgLyAyKSAtIHhNYXJnaW4sCisgICAgICAgICAgY3VycmVudFlwb3MgKyBwSEVJR0hUIC0gKHRo aXMuZ2V0KCdoZWlnaHQnKSAvIDIpIC0geU1hcmdpbiwKKyAgICAgICAgICB0aGlzLmdldCgnU3Vi cGxhbiBOYW1lJykKKyAgICAgICAgKS5hdHRyKHsKKyAgICAgICAgICBmb250U2l6ZTogVFhUX1NJ WkUsCisgICAgICAgICAgJ3RleHQtYW5jaG9yJzogJ3N0YXJ0JywKKyAgICAgICAgICBmaWxsOiAn cmVkJywKKyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgIC8qIENoZWNrIHRoZSBjdXJyZW50 IGJyb3dzZXIsIGlmIGl0IGlzIEludGVybmV0IEV4cGxvcmVyIHRoZW4gd2Ugd2lsbCBub3QKKyAg ICAgICAqIGVtYmVkIHRoZSBTVkcgZmlsZXMgZm9yIGRvd25sb2FkIGZlYXR1cmUgYXMgd2UgYXJl IG5vdCBiYWxlIHRvIGZpZ3VyZQorICAgICAgICogb3V0IHRoZSBzb2x1dGlvbiBmb3IgSUUuCisg ICAgICAgKi8KKworICAgICAgdmFyIGN1cnJlbnRfYnJvd3NlciA9IHBnQWRtaW4uQnJvd3Nlci5n ZXRfYnJvd3NlcigpOworICAgICAgaWYgKGN1cnJlbnRfYnJvd3Nlci5uYW1lID09PSAnSUUnIHx8 CisgICAgICAgIChjdXJyZW50X2Jyb3dzZXIubmFtZSA9PT0gJ1NhZmFyaScgJiYgcGFyc2VJbnQo Y3VycmVudF9icm93c2VyLnZlcnNpb24pIDwgMTApKSB7CisgICAgICAgIHRoaXMuZHJhd19pbWFn ZShnLCBwZ0V4cGxhaW4ucHJlZml4ICsgdGhpcy5nZXQoJ2ltYWdlJyksIGN1cnJlbnRYcG9zLCBj dXJyZW50WXBvcywgZ3JhcGhDb250YWluZXIsIHRvb2xUaXBDb250YWluZXIpOworICAgICAgfSBl bHNlIHsKKyAgICAgICAgLyogVGhpcyBmdW5jdGlvbiBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGNh bGxlZCB3aGVuIHdlIGxvYWQgYW55IHN2ZyBmaWxlCisgICAgICAgICAqIHVzaW5nIFNuYXAuIElu IHRoaXMgZnVuY3Rpb24gd2UgYXBwZW5kIHRoZSBTVkcgYmluYXJ5IGRhdGEgdG8gdGhlIG5ldwor ICAgICAgICAgKiB0ZW1wb3JhcnkgU25hcCBvYmplY3QgYW5kIHRoZW4gZW1iZWRkZWQgaXQgdG8g dGhlIG9yaWdpbmFsIFNuYXAoKSBvYmplY3QuCisgICAgICAgICAqLworICAgICAgICB2YXIgdGhh dCA9IHRoaXM7CisgICAgICAgIHZhciBvblNWR0xvYWRlZCA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAg ICAgICAgICB2YXIgc3ZnX2ltYWdlID0gU25hcCgpOworICAgICAgICAgIHN2Z19pbWFnZS5hcHBl bmQoZGF0YSk7CisKKyAgICAgICAgICB0aGF0LmRyYXdfaW1hZ2UoZywgc3ZnX2ltYWdlLnRvRGF0 YVVSTCgpLCBjdXJyZW50WHBvcywgY3VycmVudFlwb3MsIGdyYXBoQ29udGFpbmVyLCB0b29sVGlw Q29udGFpbmVyKTsKKyAgICAgICAgICBwZ0V4cGxhaW4udG90YWxEb3dubG9hZGVkTm9kZXMrKzsK KworICAgICAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIHJlcXVpcmVkIHRvIGRvd25sb2FkIHRo ZSBmaWxlIGFzIFNWRyBpbWFnZS4KKyAgICAgICAgICBzLnBhcmVudCgpLmF0dHIoeyd4bWxuczp4 bGluayc6J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnfSk7CisgICAgICAgICAgc2V0VGlt ZW91dCgoKSA9PiB7CisgICAgICAgICAgICBwZ0Jyb3dzZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYTpl eHBsYWluX3BsYW46bm9kZV9pY29uOmZldGNoZWQnKTsKKyAgICAgICAgICB9LCAxMDApOworICAg ICAgICB9OworCisgICAgICAgIHZhciBzdmdfZmlsZSA9IHBnRXhwbGFpbi5wcmVmaXggKyB0aGlz LmdldCgnaW1hZ2UnKTsKKyAgICAgICAgLy8gTG9hZCB0aGUgU1ZHIGZpbGUgZm9yIGV4cGxhaW4g cGxhbgorICAgICAgICBTbmFwLmxvYWQoc3ZnX2ZpbGUsIG9uU1ZHTG9hZGVkKTsKKyAgICAgIH0K KworICAgICAgLy8gRHJhdyB0ZXh0IGJlbG93IHRoZSBub2RlCisgICAgICB2YXIgbm9kZV9sYWJl bCA9IHRoaXMuZ2V0KCdTY2hlbWEnKSA9PSB1bmRlZmluZWQgPworICAgICAgICB0aGlzLmdldCgn aW1hZ2VfdGV4dCcpIDoKKyAgICAgICAgKHRoaXMuZ2V0KCdTY2hlbWEnKSArICcuJyArIHRoaXMu Z2V0KCdpbWFnZV90ZXh0JykpOworICAgICAgZy5tdWx0aXRleHQoCisgICAgICAgIGN1cnJlbnRY cG9zICsgKHBXSURUSCAvIDIpICsgVFhUX0FMSUdOLAorICAgICAgICBjdXJyZW50WXBvcyArIHBI RUlHSFQgLSBUWFRfQUxJR04sCisgICAgICAgIG5vZGVfbGFiZWwsCisgICAgICAgIDE1MCwgewor ICAgICAgICAgICdmb250LXNpemUnOiBUWFRfU0laRSwKKyAgICAgICAgICAndGV4dC1hbmNob3In OiAnbWlkZGxlJywKKyAgICAgICAgfQorICAgICAgKTsKKworICAgICAgLy8gRHJhdyBBcnJvdyB0 byBwYXJlbnQgb25seSBpdHMgbm90IHRoZSBmaXJzdCBub2RlCisgICAgICBpZiAoIV8uaXNVbmRl ZmluZWQocFlwb3MpKSB7CisgICAgICAgIHZhciBzdGFydHggPSBjdXJyZW50WHBvcyArIHBXSURU SDsKKyAgICAgICAgdmFyIHN0YXJ0eSA9IGN1cnJlbnRZcG9zICsgKHBIRUlHSFQgLyAyKTsKKyAg ICAgICAgdmFyIGVuZHggPSBwWHBvcyAtIEFSUk9XX1dJRFRIOworICAgICAgICB2YXIgZW5keSA9 IHBZcG9zICsgKHBIRUlHSFQgLyAyKTsKKyAgICAgICAgdmFyIHN0YXJ0X2Nvc3QgPSB0aGlzLmdl dCgnU3RhcnR1cCBDb3N0JyksCisgICAgICAgICAgdG90YWxfY29zdCA9IHRoaXMuZ2V0KCdUb3Rh bCBDb3N0Jyk7CisgICAgICAgIHZhciBhcnJvd19zaXplID0gREVGQVVMVF9BUlJPV19TSVpFOwor CisgICAgICAgIC8vIENhbGN1bGF0ZSBhcnJvdyB3aWR0aCBhY2NvcmRpbmcgdG8gY29zdCBvZiBh IHBhcnRpY3VsYXIgcGxhbgorICAgICAgICBpZiAoc3RhcnRfY29zdCAhPSB1bmRlZmluZWQgJiYg dG90YWxfY29zdCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICBhcnJvd19zaXplID0gTWF0aC5y b3VuZChNYXRoLmxvZygoc3RhcnRfY29zdCArIHRvdGFsX2Nvc3QpIC8gMiArIHN0YXJ0X2Nvc3Qp KTsKKyAgICAgICAgICBhcnJvd19zaXplID0gYXJyb3dfc2l6ZSA8IDEgPyAxIDogYXJyb3dfc2l6 ZSA+IDEwID8gMTAgOiBhcnJvd19zaXplOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGFycm93 X3ZpZXdfYm94ID0gWzAsIDAsIDIgKiBBUlJPV19XSURUSCwgMiAqIEFSUk9XX0hFSUdIVF07Cisg ICAgICAgIHZhciBvcHRzID0geworICAgICAgICAgICAgc3Ryb2tlOiAnIzAwMDAwMCcsCisgICAg ICAgICAgICBzdHJva2VXaWR0aDogYXJyb3dfc2l6ZSArIDIsCisgICAgICAgICAgfSwKKyAgICAg ICAgICBzdWJwbGFuT3B0cyA9IHsKKyAgICAgICAgICAgIHN0cm9rZTogJyM4NjY0ODYnLAorICAg ICAgICAgICAgc3Ryb2tlV2lkdGg6IGFycm93X3NpemUgKyAyLAorICAgICAgICAgIH0sCisgICAg ICAgICAgYXJyb3dPcHRzID0geworICAgICAgICAgICAgdmlld0JveDogYXJyb3dfdmlld19ib3gu am9pbignICcpLAorICAgICAgICAgIH07CisKKyAgICAgICAgLy8gRHJhdyBhbiBhcnJvdyBmcm9t IGN1cnJlbnQgbm9kZSB0byBpdHMgcGFyZW50CisgICAgICAgIHRoaXMuZHJhd1BvbHlMaW5lKAor ICAgICAgICAgIGcsIHN0YXJ0eCwgc3RhcnR5LCBlbmR4LCBlbmR5LAorICAgICAgICAgIGlzU3Vi UGxhbiA/IHN1YnBsYW5PcHRzIDogb3B0cywgYXJyb3dPcHRzCisgICAgICAgICk7CisgICAgICB9 CisKKyAgICAgIHZhciBwbGFucyA9IHRoaXMuZ2V0KCdQbGFucycpOworCisgICAgICAvLyBEcmF3 IG5vZGVzIGZvciBjdXJyZW50IHBsYW4ncyBjaGlsZHJlbgorICAgICAgXy5lYWNoKHBsYW5zLCBm dW5jdGlvbihwKSB7CisgICAgICAgIHAuZHJhdyhzLCB4cG9zLCB5cG9zLCBjdXJyZW50WHBvcywg Y3VycmVudFlwb3MsIGdyYXBoQ29udGFpbmVyLCB0b29sVGlwQ29udGFpbmVyKTsKKyAgICAgIH0p OworICAgIH0sCisKKyAgfSk7CisKICAgLy8gTWFpbiBiYWNrYm9uZSBtb2RlbCB0byBzdG9yZSBK U09OIG9iamVjdAogICB2YXIgTWFpblBsYW5Nb2RlbCA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7 CiAgICAgZGVmYXVsdHM6IHsKQEAgLTg0MCw4ICs3NjQsMTIgQEAgZGVmaW5lKCdwZ2FkbWluLm1p c2MuZXhwbGFpbicsIFsKICAgLy8gUGFyc2UgYW5kIGRyYXcgZnVsbCBncmFwaGljYWwgZXhwbGFp bgogICBfLmV4dGVuZChwZ0V4cGxhaW4sIHsKICAgICAvLyBBc3N1bXB0aW9uIGNvbnRhaW5lciBp cyBhIGpRdWVyeSBvYmplY3QKLSAgICBEcmF3SlNPTlBsYW46IGZ1bmN0aW9uKGNvbnRhaW5lciwg cGxhbikgeworICAgIERyYXdKU09OUGxhbjogZnVuY3Rpb24oY29udGFpbmVyLCBwbGFuLCBpc0Rv d25sb2FkKSB7CisgICAgICBwZ0V4cGxhaW4udG90YWxOb2RlcyA9IDA7CisgICAgICBwZ0V4cGxh aW4udG90YWxEb3dubG9hZGVkTm9kZXMgPSAwOworICAgICAgcGdFeHBsYWluLmlzRG93bmxvYWRl ZCA9IGZhbHNlOwogICAgICAgY29udGFpbmVyLmVtcHR5KCk7CisgICAgICB2YXIgb3JpZ25hbFBs YW4gPSAkLmV4dGVuZCh0cnVlLCBbXSwgcGxhbik7CiAgICAgICB2YXIgY3Vycl96b29tX2ZhY3Rv ciA9IDEuMDsKIAogICAgICAgdmFyIHpvb21BcmVhID0gJCgnPGRpdj48L2Rpdj4nLCB7CkBAIC05 MzEsNyArODU5LDIwIEBAIGRlZmluZSgncGdhZG1pbi5taXNjLmV4cGxhaW4nLCBbCiAgICAgICAg IGggPSB5TWFyZ2luOwogCiAgICAgICBfLmVhY2gocGxhbiwgZnVuY3Rpb24ocCkgewotICAgICAg ICB2YXIgbWFpbl9wbGFuID0gbmV3IE1haW5QbGFuTW9kZWwoKTsKKyAgICAgICAgdmFyIG1haW5f cGxhbjsKKyAgICAgICAgaWYoaXNEb3dubG9hZCkgeworICAgICAgICAgIC8vIElmIHVzZXIgb3B0 IHRvIGRvd25sb2FkIHRoZW4gd2Ugd2lsbCB1c2UgdGhlIERvd25sb2FkUGxhbk1vZGVsIG1vZGVs CisgICAgICAgICAgLy8gc28gdGhhdCBpdCB3aWxsIGVtYmVkIHRoZSBpbWFnZXMgd2hpbGUgcmVn ZW5yYXRpbmcgdGhlIHBsYW4KKyAgICAgICAgICBsZXQgRG93bmxvYWRNYWluUGxhbk1vZGVsID0g TWFpblBsYW5Nb2RlbC5leHRlbmQoeworICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgIHRoaXMuc2V0KCdQbGFuJywgbmV3IERvd25sb2FkUGxhbk1vZGVs KHsgcGFyc2U6IHRydWUgfSkpOworICAgICAgICAgICAgICB0aGlzLnNldCgnU3RhdGlzdGljcycs IG5ldyBTdGF0aXN0aWNzTW9kZWwoKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgIH0pOwor ICAgICAgICAgIG1haW5fcGxhbiA9IG5ldyBEb3dubG9hZE1haW5QbGFuTW9kZWwoeyAncGFyc2Un OiB0cnVlIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG1haW5fcGxhbiA9IG5ldyBN YWluUGxhbk1vZGVsKCk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBQYXJzZSBKU09OIGRhdGEg dG8gYmFja2JvbmUgbW9kZWwKICAgICAgICAgbWFpbl9wbGFuLnNldChtYWluX3BsYW4ucGFyc2Uo cCkpOwpAQCAtMTAxOCwxNCArOTU5LDIwIEBAIGRlZmluZSgncGdhZG1pbi5taXNjLmV4cGxhaW4n LCBbCiAgICAgICAgIH0pOwogCiAgICAgICAgIGRvd25sb2FkQnRuLm9uKCdjbGljaycsIGZ1bmN0 aW9uKCkgewotICAgICAgICAgIHZhciBzID0gU25hcCgnLnBnYWRtaW4tZXhwbGFpbi1jb250YWlu ZXIgc3ZnJyk7Ci0gICAgICAgICAgdmFyIHRvZGF5ICA9IG5ldyBEYXRlKCk7Ci0gICAgICAgICAg dmFyIGZpbGVuYW1lID0gJ2V4cGxhaW5fcGxhbl8nICsgdG9kYXkuZ2V0VGltZSgpICsgJy5zdmcn OwotICAgICAgICAgIHN2Z0Rvd25sb2FkZXIuZG93bmxvYWRTVkcocy50b1N0cmluZygpLCBmaWxl bmFtZSk7Ci0gICAgICAgICAgZG93bmxvYWRCdG4udHJpZ2dlcignYmx1cicpOworICAgICAgICAg IC8vIExldHMgcmVnZW5yYXRlIHRoZSBwbGFuIHdpdGggZW1iZWRkZWQgaW1hZ2VzCisgICAgICAg ICAgcGdFeHBsYWluLkRyYXdKU09OUGxhbihjb250YWluZXIsIG9yaWduYWxQbGFuLCB0cnVlKTsK KyAgICAgICAgICBwZ0Jyb3dzZXIuRXZlbnRzLm9uKCdwZ2E6ZXhwbGFpbl9wbGFuOm5vZGVfaWNv bjpmZXRjaGVkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIXBnRXhwbGFpbi5pc0Rv d25sb2FkZWQgJiYgcGdFeHBsYWluLnRvdGFsTm9kZXMgPT09IHBnRXhwbGFpbi50b3RhbERvd25s b2FkZWROb2RlcykgeworICAgICAgICAgICAgICBwZ0V4cGxhaW4uaXNEb3dubG9hZGVkID0gdHJ1 ZTsKKyAgICAgICAgICAgICAgdmFyIHMgPSBTbmFwKCcucGdhZG1pbi1leHBsYWluLWNvbnRhaW5l ciBzdmcnKTsKKyAgICAgICAgICAgICAgdmFyIHRvZGF5ICA9IG5ldyBEYXRlKCk7CisgICAgICAg ICAgICAgIHZhciBmaWxlbmFtZSA9ICdleHBsYWluX3BsYW5fJyArIHRvZGF5LmdldFRpbWUoKSAr ICcuc3ZnJzsKKyAgICAgICAgICAgICAgc3ZnRG93bmxvYWRlci5kb3dubG9hZFNWRyhzLnRvU3Ry aW5nKCksIGZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgZG93bmxvYWRCdG4udHJpZ2dlcignYmx1 cicpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAgICAgIH0p OwotCiAgICAgfSwKICAgfSk7CiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vanMvaW1hZ2VfbWFwZXIuanMgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2pzL2ltYWdlX21hcGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw Li42Y2RjMzZmZgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vanMvaW1hZ2VfbWFwZXIuanMKQEAgLTAsMCArMSwyODUgQEAKKy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBw Z0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0g MjAxOSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyBy ZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworaW1wb3J0 IFMgZnJvbSAndW5kZXJzY29yZS5zdHJpbmcnOworLyoKKyAqIEEgbWFwIHdoaWNoIGlzIHVzZWQg dG8gZmV0Y2ggdGhlIGltYWdlIHRvIGJlIGRyYXduIGFuZAorICogdGV4dCB3aGljaCB3aWxsIGFw cGVhciBiZWxvdyBpdAorICovCisKK2xldCBpbWFnZU1hcHBlciA9IHsKKyAgJ0FnZ3JlZ2F0ZSc6 IHsKKyAgICAnaW1hZ2UnOiAnZXhfYWdncmVnYXRlLnN2ZycsCisgICAgJ2ltYWdlX3RleHQnOiAn QWdncmVnYXRlJywKKyAgfSwKKyAgJ0FwcGVuZCc6IHsKKyAgICAnaW1hZ2UnOiAnZXhfYXBwZW5k LnN2ZycsCisgICAgJ2ltYWdlX3RleHQnOiAnQXBwZW5kJywKKyAgfSwKKyAgJ0JpdG1hcCBJbmRl eCBTY2FuJzogZnVuY3Rpb24oZGF0YSkgeworICAgIHJldHVybiB7CisgICAgICAnaW1hZ2UnOiAn ZXhfYm1wX2luZGV4LnN2ZycsCisgICAgICAnaW1hZ2VfdGV4dCc6IGRhdGFbJ0luZGV4IE5hbWUn XSwKKyAgICB9OworICB9LAorICAnQml0bWFwIEhlYXAgU2Nhbic6IGZ1bmN0aW9uKGRhdGEpIHsK KyAgICByZXR1cm4geworICAgICAgJ2ltYWdlJzogJ2V4X2JtcF9oZWFwLnN2ZycsCisgICAgICAn aW1hZ2VfdGV4dCc6IGRhdGFbJ1JlbGF0aW9uIE5hbWUnXSwKKyAgICB9OworICB9LAorICAnQml0 bWFwQW5kJzogeworICAgICdpbWFnZSc6ICdleF9ibXBfYW5kLnN2ZycsCisgICAgJ2ltYWdlX3Rl eHQnOiAnQml0bWFwIEFORCcsCisgIH0sCisgICdCaXRtYXBPcic6IHsKKyAgICAnaW1hZ2UnOiAn ZXhfYm1wX29yLnN2ZycsCisgICAgJ2ltYWdlX3RleHQnOiAnQml0bWFwIE9SJywKKyAgfSwKKyAg J0NURSBTY2FuJzogeworICAgICdpbWFnZSc6ICdleF9jdGVfc2Nhbi5zdmcnLAorICAgICdpbWFn ZV90ZXh0JzogJ0NURSBTY2FuJywKKyAgfSwKKyAgJ0Z1bmN0aW9uIFNjYW4nOiB7CisgICAgJ2lt YWdlJzogJ2V4X3Jlc3VsdC5zdmcnLAorICAgICdpbWFnZV90ZXh0JzogJ0Z1bmN0aW9uIFNjYW4n LAorICB9LAorICAnRm9yZWlnbiBTY2FuJzogeworICAgICdpbWFnZSc6ICdleF9mb3JlaWduX3Nj YW4uc3ZnJywKKyAgICAnaW1hZ2VfdGV4dCc6ICdGb3JlaWduIFNjYW4nLAorICB9LAorICAnR2F0 aGVyJzogeworICAgICdpbWFnZSc6ICdleF9nYXRoZXJfbW90aW9uLnN2ZycsCisgICAgJ2ltYWdl X3RleHQnOiAnR2F0aGVyJywKKyAgfSwKKyAgJ0dyb3VwJzogeworICAgICdpbWFnZSc6ICdleF9n cm91cC5zdmcnLAorICAgICdpbWFnZV90ZXh0JzogJ0dyb3VwJywKKyAgfSwKKyAgJ0dyb3VwQWdn cmVnYXRlJzogeworICAgICdpbWFnZSc6ICdleF9hZ2dyZWdhdGUuc3ZnJywKKyAgICAnaW1hZ2Vf dGV4dCc6ICdHcm91cCBBZ2dyZWdhdGUnLAorICB9LAorICAnSGFzaCc6IHsKKyAgICAnaW1hZ2Un OiAnZXhfaGFzaC5zdmcnLAorICAgICdpbWFnZV90ZXh0JzogJ0hhc2gnLAorICB9LAorICAnSGFz aCBKb2luJzogZnVuY3Rpb24oZGF0YSkgeworICAgIGlmICghZGF0YVsnSm9pbiBUeXBlJ10pIHJl dHVybiB7CisgICAgICAnaW1hZ2UnOiAnZXhfam9pbi5zdmcnLAorICAgICAgJ2ltYWdlX3RleHQn OiAnSm9pbicsCisgICAgfTsKKyAgICBzd2l0Y2ggKGRhdGFbJ0pvaW4gVHlwZSddKSB7CisgICAg Y2FzZSAnQW50aSc6CisgICAgICByZXR1cm4geworICAgICAgICAnaW1hZ2UnOiAnZXhfaGFzaF9h bnRpX2pvaW4uc3ZnJywKKyAgICAgICAgJ2ltYWdlX3RleHQnOiAnSGFzaCBBbnRpIEpvaW4nLAor ICAgICAgfTsKKyAgICBjYXNlICdTZW1pJzoKKyAgICAgIHJldHVybiB7CisgICAgICAgICdpbWFn ZSc6ICdleF9oYXNoX3NlbWlfam9pbi5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4dCc6ICdIYXNo IFNlbWkgSm9pbicsCisgICAgICB9OworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4geworICAg ICAgICAnaW1hZ2UnOiAnZXhfaGFzaC5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4dCc6IFN0cmlu ZygnSGFzaCAnICsgZGF0YVsnSm9pbiBUeXBlJ10gKyAnIEpvaW4nKSwKKyAgICAgIH07CisgICAg fQorICB9LAorICAnSGFzaEFnZ3JlZ2F0ZSc6IHsKKyAgICAnaW1hZ2UnOiAnZXhfYWdncmVnYXRl LnN2ZycsCisgICAgJ2ltYWdlX3RleHQnOiAnSGFzaCBBZ2dyZWdhdGUnLAorICB9LAorICAnSW5k ZXggT25seSBTY2FuJzogZnVuY3Rpb24oZGF0YSkgeworICAgIHJldHVybiB7CisgICAgICAnaW1h Z2UnOiAnZXhfaW5kZXhfb25seV9zY2FuLnN2ZycsCisgICAgICAnaW1hZ2VfdGV4dCc6IGRhdGFb J0luZGV4IE5hbWUnXSwKKyAgICB9OworICB9LAorICAnSW5kZXggU2Nhbic6IGZ1bmN0aW9uKGRh dGEpIHsKKyAgICByZXR1cm4geworICAgICAgJ2ltYWdlJzogJ2V4X2luZGV4X3NjYW4uc3ZnJywK KyAgICAgICdpbWFnZV90ZXh0JzogZGF0YVsnSW5kZXggTmFtZSddLAorICAgIH07CisgIH0sCisg ICdJbmRleCBTY2FuIEJhY2t3b3JkJzogeworICAgICdpbWFnZSc6ICdleF9pbmRleF9zY2FuLnN2 ZycsCisgICAgJ2ltYWdlX3RleHQnOiAnSW5kZXggQmFja3dhcmQgU2NhbicsCisgIH0sCisgICdM aW1pdCc6IHsKKyAgICAnaW1hZ2UnOiAnZXhfbGltaXQuc3ZnJywKKyAgICAnaW1hZ2VfdGV4dCc6 ICdMaW1pdCcsCisgIH0sCisgICdMb2NrUm93cyc6IHsKKyAgICAnaW1hZ2UnOiAnZXhfbG9ja19y b3dzLnN2ZycsCisgICAgJ2ltYWdlX3RleHQnOiAnTG9jayBSb3dzJywKKyAgfSwKKyAgJ01hdGVy aWFsaXplJzogeworICAgICdpbWFnZSc6ICdleF9tYXRlcmlhbGl6ZS5zdmcnLAorICAgICdpbWFn ZV90ZXh0JzogJ01hdGVyaWFsaXplJywKKyAgfSwKKyAgJ01lcmdlIEFwcGVuZCc6IHsKKyAgICAn aW1hZ2UnOiAnZXhfbWVyZ2VfYXBwZW5kLnN2ZycsCisgICAgJ2ltYWdlX3RleHQnOiAnTWVyZ2Ug QXBwZW5kJywKKyAgfSwKKyAgJ01lcmdlIEpvaW4nOiBmdW5jdGlvbihkYXRhKSB7CisgICAgc3dp dGNoIChkYXRhWydKb2luIFR5cGUnXSkgeworICAgIGNhc2UgJ0FudGknOgorICAgICAgcmV0dXJu IHsKKyAgICAgICAgJ2ltYWdlJzogJ2V4X21lcmdlX2FudGlfam9pbi5zdmcnLAorICAgICAgICAn aW1hZ2VfdGV4dCc6ICdNZXJnZSBBbnRpIEpvaW4nLAorICAgICAgfTsKKyAgICBjYXNlICdTZW1p JzoKKyAgICAgIHJldHVybiB7CisgICAgICAgICdpbWFnZSc6ICdleF9tZXJnZV9zZW1pX2pvaW4u c3ZnJywKKyAgICAgICAgJ2ltYWdlX3RleHQnOiAnTWVyZ2UgU2VtaSBKb2luJywKKyAgICAgIH07 CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiB7CisgICAgICAgICdpbWFnZSc6ICdleF9tZXJn ZS5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4dCc6IFN0cmluZygnTWVyZ2UgJyArIGRhdGFbJ0pv aW4gVHlwZSddICsgJyBKb2luJyksCisgICAgICB9OworICAgIH0KKyAgfSwKKyAgJ01vZGlmeVRh YmxlJzogZnVuY3Rpb24oZGF0YSkgeworICAgIHN3aXRjaCAoZGF0YVsnT3BlcmF0aW9uJ10pIHsK KyAgICBjYXNlICdJbnNlcnQnOgorICAgICAgcmV0dXJuIHsKKyAgICAgICAgJ2ltYWdlJzogJ2V4 X2luc2VydC5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4dCc6ICdJbnNlcnQnLAorICAgICAgfTsK KyAgICBjYXNlICdVcGRhdGUnOgorICAgICAgcmV0dXJuIHsKKyAgICAgICAgJ2ltYWdlJzogJ2V4 X3VwZGF0ZS5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4dCc6ICdVcGRhdGUnLAorICAgICAgfTsK KyAgICBjYXNlICdEZWxldGUnOgorICAgICAgcmV0dXJuIHsKKyAgICAgICAgJ2ltYWdlJzogJ2V4 X2RlbGV0ZS5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4dCc6ICdEZWxldGUnLAorICAgICAgfTsK KyAgICB9CisgIH0sCisgICdOZXN0ZWQgTG9vcCc6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICBzd2l0 Y2ggKGRhdGFbJ0pvaW4gVHlwZSddKSB7CisgICAgY2FzZSAnQW50aSc6CisgICAgICByZXR1cm4g eworICAgICAgICAnaW1hZ2UnOiAnZXhfbmVzdGVkX2xvb3BfYW50aV9qb2luLnN2ZycsCisgICAg ICAgICdpbWFnZV90ZXh0JzogJ05lc3RlZCBMb29wIEFudGkgSm9pbicsCisgICAgICB9OworICAg IGNhc2UgJ1NlbWknOgorICAgICAgcmV0dXJuIHsKKyAgICAgICAgJ2ltYWdlJzogJ2V4X25lc3Rl ZF9sb29wX3NlbWlfam9pbi5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4dCc6ICdOZXN0ZWQgTG9v cCBTZW1pIEpvaW4nLAorICAgICAgfTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIHsKKyAg ICAgICAgJ2ltYWdlJzogJ2V4X25lc3RlZC5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4dCc6ICdO ZXN0ZWQgTG9vcCAnICsgZGF0YVsnSm9pbiBUeXBlJ10gKyAnIEpvaW4nLAorICAgICAgfTsKKyAg ICB9CisgIH0sCisgICdSZWN1cnNpdmUgVW5pb24nOiB7CisgICAgJ2ltYWdlJzogJ2V4X3JlY3Vy c2l2ZV91bmlvbi5zdmcnLAorICAgICdpbWFnZV90ZXh0JzogJ1JlY3Vyc2l2ZSBVbmlvbicsCisg IH0sCisgICdSZXN1bHQnOiB7CisgICAgJ2ltYWdlJzogJ2V4X3Jlc3VsdC5zdmcnLAorICAgICdp bWFnZV90ZXh0JzogJ1Jlc3VsdCcsCisgIH0sCisgICdTYW1wbGUgU2Nhbic6IHsKKyAgICAnaW1h Z2UnOiAnZXhfc2Nhbi5zdmcnLAorICAgICdpbWFnZV90ZXh0JzogJ1NhbXBsZSBTY2FuJywKKyAg fSwKKyAgJ1NjYW4nOiB7CisgICAgJ2ltYWdlJzogJ2V4X3NjYW4uc3ZnJywKKyAgICAnaW1hZ2Vf dGV4dCc6ICdTY2FuJywKKyAgfSwKKyAgJ1NlZWsnOiB7CisgICAgJ2ltYWdlJzogJ2V4X3NlZWsu c3ZnJywKKyAgICAnaW1hZ2VfdGV4dCc6ICdTZWVrJywKKyAgfSwKKyAgJ1NldE9wJzogZnVuY3Rp b24oZGF0YSkgeworICAgIGxldCBzdHJhdGVneSA9IGRhdGFbJ1N0cmF0ZWd5J10sCisgICAgICBj b21tYW5kID0gZGF0YVsnQ29tbWFuZCddOworCisgICAgaWYgKHN0cmF0ZWd5ID09ICdIYXNoZWQn KSB7CisgICAgICBpZiAoUy5zdGFydHNXaXRoKGNvbW1hbmQsICdJbnRlcnNlY3QnKSkgeworICAg ICAgICBpZiAoY29tbWFuZCA9PSAnSW50ZXJzZWN0IEFsbCcpCisgICAgICAgICAgcmV0dXJuIHsK KyAgICAgICAgICAgICdpbWFnZSc6ICdleF9oYXNoX3NldG9wX2ludGVyc2VjdF9hbGwuc3ZnJywK KyAgICAgICAgICAgICdpbWFnZV90ZXh0JzogJ0hhc2hlZCBJbnRlcnNlY3QgQWxsJywKKyAgICAg ICAgICB9OworICAgICAgICByZXR1cm4geworICAgICAgICAgICdpbWFnZSc6ICdleF9oYXNoX3Nl dG9wX2ludGVyc2VjdC5zdmcnLAorICAgICAgICAgICdpbWFnZV90ZXh0JzogJ0hhc2hlZCBJbnRl cnNlY3QnLAorICAgICAgICB9OworICAgICAgfSBlbHNlIGlmIChTLnN0YXJ0c1dpdGgoY29tbWFu ZCwgJ0V4Y2VwdCcpKSB7CisgICAgICAgIGlmIChjb21tYW5kID09ICdFeGNlcHQgQWxsJykKKyAg ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgJ2ltYWdlJzogJ2V4X2hhc2hfc2V0b3BfZXhj ZXB0X2FsbC5zdmcnLAorICAgICAgICAgICAgJ2ltYWdlX3RleHQnOiAnSGFzaGVkIEV4Y2VwdCBB bGwnLAorICAgICAgICAgIH07CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgJ2ltYWdlJzog J2V4X2hhc2hfc2V0b3BfZXhjZXB0LnN2ZycsCisgICAgICAgICAgJ2ltYWdlX3RleHQnOiAnSGFz aCBFeGNlcHQnLAorICAgICAgICB9OworICAgICAgfQorICAgICAgcmV0dXJuIHsKKyAgICAgICAg J2ltYWdlJzogJ2V4X2hhc2hfc2V0b3BfdW5rbm93bi5zdmcnLAorICAgICAgICAnaW1hZ2VfdGV4 dCc6ICdIYXNoZWQgU2V0T3AgVW5rbm93bicsCisgICAgICB9OworICAgIH0KKyAgICByZXR1cm4g eworICAgICAgJ2ltYWdlJzogJ2V4X3NldG9wLnN2ZycsCisgICAgICAnaW1hZ2VfdGV4dCc6ICdT ZXRPcCcsCisgICAgfTsKKyAgfSwKKyAgJ1NlcSBTY2FuJzogZnVuY3Rpb24oZGF0YSkgeworICAg IHJldHVybiB7CisgICAgICAnaW1hZ2UnOiAnZXhfc2Nhbi5zdmcnLAorICAgICAgJ2ltYWdlX3Rl eHQnOiBkYXRhWydSZWxhdGlvbiBOYW1lJ10sCisgICAgfTsKKyAgfSwKKyAgJ1N1YnF1ZXJ5IFNj YW4nOiB7CisgICAgJ2ltYWdlJzogJ2V4X3N1YnBsYW4uc3ZnJywKKyAgICAnaW1hZ2VfdGV4dCc6 ICdTdWJRdWVyeSBTY2FuJywKKyAgfSwKKyAgJ1NvcnQnOiB7CisgICAgJ2ltYWdlJzogJ2V4X3Nv cnQuc3ZnJywKKyAgICAnaW1hZ2VfdGV4dCc6ICdTb3J0JywKKyAgfSwKKyAgJ1RpZCBTY2FuJzog eworICAgICdpbWFnZSc6ICdleF90aWRfc2Nhbi5zdmcnLAorICAgICdpbWFnZV90ZXh0JzogJ1Rp ZCBTY2FuJywKKyAgfSwKKyAgJ1VuaXF1ZSc6IHsKKyAgICAnaW1hZ2UnOiAnZXhfdW5pcXVlLnN2 ZycsCisgICAgJ2ltYWdlX3RleHQnOiAnVW5pcXVlJywKKyAgfSwKKyAgJ1ZhbHVlcyBTY2FuJzog eworICAgICdpbWFnZSc6ICdleF92YWx1ZXNfc2Nhbi5zdmcnLAorICAgICdpbWFnZV90ZXh0Jzog J1ZhbHVlcyBTY2FuJywKKyAgfSwKKyAgJ1dpbmRvd0FnZyc6IHsKKyAgICAnaW1hZ2UnOiAnZXhf d2luZG93X2FnZ3JlZ2F0ZS5zdmcnLAorICAgICdpbWFnZV90ZXh0JzogJ1dpbmRvdyBBZ2dyZWdh dGUnLAorICB9LAorICAnV29ya1RhYmxlIFNjYW4nOiB7CisgICAgJ2ltYWdlJzogJ2V4X3dvcmt0 YWJsZV9zY2FuLnN2ZycsCisgICAgJ2ltYWdlX3RleHQnOiAnV29ya1RhYmxlIFNjYW4nLAorICB9 LAorICAnVW5kZWZpbmVkJzogeworICAgICdpbWFnZSc6ICdleF91bmtub3duLnN2ZycsCisgICAg J2ltYWdlX3RleHQnOiAnVW5kZWZpbmVkJywKKyAgfSwKK307CisKK2V4cG9ydCBkZWZhdWx0IGlt YWdlTWFwcGVyOwo= --00000000000017119a058a193ecc--