Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qJF5O-0005zq-6L for pgadmin-hackers@arkaria.postgresql.org; Tue, 11 Jul 2023 15:15:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qJF5N-0005HD-28 for pgadmin-hackers@arkaria.postgresql.org; Tue, 11 Jul 2023 15:15:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qJF5M-0005H4-MM for pgadmin-hackers@lists.postgresql.org; Tue, 11 Jul 2023 15:15:28 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qJF5J-003UtR-CL for pgadmin-hackers@postgresql.org; Tue, 11 Jul 2023 15:15:28 +0000 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-262e5e71978so3752218a91.1 for ; Tue, 11 Jul 2023 08:15:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689088524; x=1691680524; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=B8/56sbwCd6pRC94WTGfP/7AVenwMbMNm35kUQlCWkw=; b=MMdvPqCCB5TQglGnEmaMBWUvXUqAEBWG6VgTs/OmNGJTS0obwzIB0zltrgmJBdBtzq dHD8bh/ZP4MZRluwmwwc/WnNpomw38u4QVwGD3d0iPmXJTy2uY5wz+27dpwtEkGtf1Bf 6jOzTaeoISyozTXN2+rZK1oURT6YTfSVVCUU9egbCrk6f7ELtwNo7lfKrcGcPR3la+VF JXgbHsT+fTXelN2p+QDbG97EAJL9dDuE6KI9/8gixg8p2HFhXdaWIbNEEG3iKEhGCSYl oY4ReDWqm3wopBf888Zg9LryhcXvNhPQ5KGdnYnqVK/luqORZSDIviLs2M0092C5qSa8 EKLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689088524; x=1691680524; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=B8/56sbwCd6pRC94WTGfP/7AVenwMbMNm35kUQlCWkw=; b=Tq8DnxondS6m9bDepMaLJPzq/njfZa3pyxVMdhtHO69iUPpcflPvGOUvGlw4yvuwtb Jq5B52UkrADLu0qsII0zFuCZ9/aWp2GPmbUK+7a3VynkVO+SyNHQsW3Ua4HL1HJPDUB7 VfGCGOzq64oycV4pKX0O5EkpjBLkkkUmiYbFeVxwtwRhPa97z/hnL4rYE/ZP1S0xbp7S WwWEndbaiIfiT/9DaB3s/7bWPJjRBnqMJuETSfQpCsE7J87ecY6Bl/n114lG1UB4XuS2 ykn+7SHAUZT4RsszpKgjRvX+3JQgoWubUFsCcwV7vlmoI654F67HlM4ySUWpebOnfrjl n9jQ== X-Gm-Message-State: ABy/qLYWhT4/lI2vGaeo6mBT6YdS17umldchuUqcmVChDyNixVmvanZT nKAAK4GJMBNDyyk+US3HeRl5bzfYkia3/FNr49g= X-Google-Smtp-Source: APBJJlEoh/Clq5Bq5ZZwQbdfkDO8E/dgxeY5VP2BOr2i55yrT7mQMb2uDTerZGqycLQGSaViaqg+3kcdZDfc1GZY9BE= X-Received: by 2002:a17:90b:1812:b0:262:f550:6413 with SMTP id lw18-20020a17090b181200b00262f5506413mr27248447pjb.6.1689088523429; Tue, 11 Jul 2023 08:15:23 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Sahil Harpal Date: Tue, 11 Jul 2023 20:45:09 +0530 Message-ID: Subject: Re: Pgadmin4 System Stats Extension Design To: Aditya Toshniwal Cc: Ashesh Vashi , Dave Page , Akshay Joshi , Khushboo Vashi , pgadmin-hackers@postgresql.org Content-Type: multipart/mixed; boundary="0000000000006f072b060037914c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006f072b060037914c Content-Type: multipart/alternative; boundary="0000000000006f072a060037914a" --0000000000006f072a060037914a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jul 11, 2023 at 2:29=E2=80=AFPM Sahil Harpal wrote: > On Tue, 11 Jul 2023 at 12:04, Ashesh Vashi > wrote: > >> Try preloading the extension in the PostgreSQL server. >> e.g. Add this extension in the 'shared_preload_libraries' in >> postgresql.conf. >> >> Reference: https://pgpedia.info/s/shared_preload_libraries.html >> > Thank you, Ashesh! I will try this and provide you with an update. > I tried adding 'system_stats' in the 'shared_preload_libraries', but it doesn't work. On Tue, 11 Jul 2023 at 14:38, Aditya Toshniwal < aditya.toshniwal@enterprisedb.com> wrote: > Disk info doesn't need to be updated live. You can update it once on ever= y > tab change. I feel process info should be a bar chart. The categories are > fixed in number and we can use StreamingChart for bar chart. > Okay sure. Please ignore the previous WIP.patch file. I missed to include few untracked changes. I have attached the new patch file. Sorry for the inconvenience. New patch consist: - Single dashboard with option to toggle between General and System Statistics - Summary tab (except process info details). - CPU Details - Memory Details Thanks, Sahil --0000000000006f072a060037914a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
=3D""
On Tue, Jul 11, 2023 at 2:29=E2=80=AFPM Sahi= l Harpal <sahilharpal1234@gmail.com> wrote:
On Tue, 11 Jul = 2023 at 12:04, Ashesh Vashi <ashesh.vashi@enterprisedb.com> wrote:
3D""
Try preloading the e= xtension in the PostgreSQL server.
e.g.=C2=A0 Add this extension in the = 'shared_preload_libraries' in postgresql.conf.

Reference:=C2= =A0https://pgpedia.info/s/shared_preload_libraries.html
Thank you, Ashesh! I will try this and provide yo= u with an update.
I tried adding &= #39;system_stats' in the 'shared_preload_libraries', but it doe= sn't work.=C2=A0

On Tue, 11 Jul 2023 at 14:38, Aditya Tos= hniwal <aditya.tosh= niwal@enterprisedb.com> wrote:
Disk info do= esn't need to be updated live. You can update it once on every tab chan= ge.=C2=A0I feel process info should be a bar chart. The categories are f= ixed in number and we can use StreamingChart for bar chart.
=C2=A0Okay sure.

Please= ignore the previous WIP.patch file. I missed to include few untracked chan= ges.
I have attached the new patch file. Sorry for the inconvenie= nce.

New patch consist:
  • Single d= ashboard with option to toggle between General and System Statistics
  • Summary tab (except process info details).=C2=A0
  • CPU Details
  • =
  • Memory Details

Thanks,
Sahil
--0000000000006f072a060037914a-- --0000000000006f072b060037914c Content-Type: application/octet-stream; name="WIP.patch" Content-Disposition: attachment; filename="WIP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljyfl4mr1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9fX2luaXRfXy5weSBiL3dlYi9wZ2Fk bWluL2Rhc2hib2FyZC9fX2luaXRfXy5weQppbmRleCAxZGFjNTRlNzQuLjEyZjQ5MWVhNiAxMDA2 NDQKLS0tIGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL19faW5pdF9fLnB5CisrKyBiL3dlYi9wZ2Fk bWluL2Rhc2hib2FyZC9fX2luaXRfXy5weQpAQCAtMTk3LDYgKzE5Nyw5IEBAIGNsYXNzIERhc2hi b2FyZE1vZHVsZShQZ0FkbWluTW9kdWxlKToKICAgICAgICAgICAgICdkYXNoYm9hcmQuZ2V0X3By ZXBhcmVkX2J5X2RhdGFiYXNlX2lkJywKICAgICAgICAgICAgICdkYXNoYm9hcmQuY29uZmlnJywK ICAgICAgICAgICAgICdkYXNoYm9hcmQuZ2V0X2NvbmZpZ19ieV9zZXJ2ZXJfaWQnLAorICAgICAg ICAgICAgJ2Rhc2hib2FyZC5zeXN0ZW1fc3RhdGlzdGljcycsCisgICAgICAgICAgICAnZGFzaGJv YXJkLnN5c3RlbV9zdGF0aXN0aWNzX3NpZCcsCisgICAgICAgICAgICAnZGFzaGJvYXJkLnN5c3Rl bV9zdGF0aXN0aWNzX2RpZCcsCiAgICAgICAgIF0KIAogCkBAIC01MzYsMyArNTM5LDM4IEBAIGRl ZiB0ZXJtaW5hdGVfc2Vzc2lvbihzaWQ9Tm9uZSwgZGlkPU5vbmUsIHBpZD1Ob25lKToKICAgICAg ICAgcmVzcG9uc2U9Z2V0dGV4dCgiU3VjY2VzcyIpIGlmIHJlcyBlbHNlIGdldHRleHQoIkZhaWxl ZCIpLAogICAgICAgICBzdGF0dXM9MjAwCiAgICAgKQorCisKKyMgU3lzdGVtIFN0YXRpc3RpY3Mg QmFja2VuZAorQGJsdWVwcmludC5yb3V0ZSgnL3N5c3RlbV9zdGF0aXN0aWNzJywKKyAgICAgICAg ICAgICAgICAgZW5kcG9pbnQ9J3N5c3RlbV9zdGF0aXN0aWNzJywgbWV0aG9kcz1bJ0dFVCddKQor QGJsdWVwcmludC5yb3V0ZSgnL3N5c3RlbV9zdGF0aXN0aWNzLzxpbnQ6c2lkPicsCisgICAgICAg ICAgICAgICAgIGVuZHBvaW50PSdzeXN0ZW1fc3RhdGlzdGljc19zaWQnLCBtZXRob2RzPVsnR0VU J10pCitAYmx1ZXByaW50LnJvdXRlKCcvc3lzdGVtX3N0YXRpc3RpY3MvPGludDpzaWQ+LzxpbnQ6 ZGlkPicsCisgICAgICAgICAgICAgICAgIGVuZHBvaW50PSdzeXN0ZW1fc3RhdGlzdGljc19kaWQn LCBtZXRob2RzPVsnR0VUJ10pCisKK0Bsb2dpbl9yZXF1aXJlZAorQGNoZWNrX3ByZWNvbmRpdGlv bgorZGVmIHN5c3RlbV9zdGF0aXN0aWNzKHNpZD1Ob25lLCBkaWQ9Tm9uZSk6CisgICAgcmVzcF9k YXRhID0ge30KKworICAgIGlmIHJlcXVlc3QuYXJnc1snY2hhcnRfbmFtZXMnXSAhPSAnJzoKKyAg ICAgICAgY2hhcnRfbmFtZXMgPSByZXF1ZXN0LmFyZ3NbJ2NoYXJ0X25hbWVzJ10uc3BsaXQoJywn KQorCisgICAgICAgIGlmIG5vdCBzaWQ6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPSdTZXJ2ZXIgSUQgbm90IHNwZWNpZmllZC4nKQorCisgICAgICAg IHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtnLnRlbXBsYXRl X3BhdGgsICdzeXN0ZW1fc3RhdGlzdGljcy5zcWwnXSksIGRpZD1kaWQsCisgICAgICAgICAgICBj aGFydF9uYW1lcz1jaGFydF9uYW1lcywKKyAgICAgICAgKQorICAgICAgICBzdGF0dXMsIHJlcyA9 IGcuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQorCisgICAgICAgIGZvciBjaGFydF9yb3cgaW4gcmVz Wydyb3dzJ106CisgICAgICAgICAgICByZXNwX2RhdGFbY2hhcnRfcm93WydjaGFydF9uYW1lJ11d ID0ganNvbi5sb2FkcygKKyAgICAgICAgICAgICAgICBjaGFydF9yb3dbJ2NoYXJ0X2RhdGEnXSkK KworICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAgICAgICByZXNwb25zZT1yZXNwX2RhdGEs CisgICAgICAgIHN0YXR1cz0yMDAKKyAgICApCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9kYXNo Ym9hcmQvc3RhdGljL2pzL0NQVS5qc3ggYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pz L0NQVS5qc3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi45NDQyZjQ3NTQK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL0NQVS5q c3gKQEAgLTAsMCArMSwzMjQgQEAKK2ltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0 LCB1c2VSZWYsIHVzZVJlZHVjZXIsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7CitpbXBvcnQgUGdU YWJsZSBmcm9tICdzb3VyY2VzL2NvbXBvbmVudHMvUGdUYWJsZSc7CitpbXBvcnQgZ2V0dGV4dCBm cm9tICdzb3VyY2VzL2dldHRleHQnOworaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVz JzsKK2ltcG9ydCB7IG1ha2VTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMn OworaW1wb3J0IHVybF9mb3IgZnJvbSAnc291cmNlcy91cmxfZm9yJzsKK2ltcG9ydCBnZXRBcGlJ bnN0YW5jZSBmcm9tICdzb3VyY2VzL2FwaV9pbnN0YW5jZSc7CitpbXBvcnQge2dldEVwb2NofSBm cm9tICdzb3VyY2VzL3V0aWxzJzsKK2ltcG9ydCB7Q2hhcnRDb250YWluZXJ9IGZyb20gJy4vRGFz aGJvYXJkJzsKK2ltcG9ydCB7IEdyaWQgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZSc7CitpbXBv cnQgeyBEQVRBX1BPSU5UX1NJWkUgfSBmcm9tICdzb3VyY2VzL2NoYXJ0anMnOworaW1wb3J0IFN0 cmVhbWluZ0NoYXJ0IGZyb20gJy4uLy4uLy4uL3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQv U3RyZWFtaW5nQ2hhcnQnOworaW1wb3J0IHt1c2VJbnRlcnZhbH0gZnJvbSAnc291cmNlcy9jdXN0 b21faG9va3MnOworaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJzsKKworZXhwb3J0IGNvbnN0IFhf QVhJU19MRU5HVEggPSA3NTsKKworY29uc3QgdXNlU3R5bGVzID0gbWFrZVN0eWxlcygodGhlbWUp ID0+ICh7CisgIGF1dG9SZXNpemVyOiB7CisgICAgaGVpZ2h0OiAnMTAwJSAhaW1wb3J0YW50JywK KyAgICB3aWR0aDogJzEwMCUgIWltcG9ydGFudCcsCisgICAgYmFja2dyb3VuZDogdGhlbWUucGFs ZXR0ZS5ncmV5WzQwMF0sCisgICAgcGFkZGluZzogJzcuNXB4JywKKyAgICBvdmVyZmxvd1g6ICdh dXRvICFpbXBvcnRhbnQnLAorICAgIG92ZXJmbG93WTogJ2hpZGRlbiAhaW1wb3J0YW50JywKKyAg ICBtaW5IZWlnaHQ6ICcxMDAlJywKKyAgICBtaW5XaWR0aDogJzEwMCUnLAorICB9LAorICBjb250 YWluZXI6IHsKKyAgICBoZWlnaHQ6ICdhdXRvJywKKyAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxl dHRlLmdyZXlbMjAwXSwKKyAgICBwYWRkaW5nOiAnMTBweCcsCisgICAgbWFyZ2luQm90dG9tOiAn MzBweCcsCisgIH0sCisgIGZpeGVkQ29udGFpbmVyOiB7CisgICAgaGVpZ2h0OiAnNTc3cHgnLAor ICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ3JleVsyMDBdLAorICAgIHBhZGRpbmc6ICcx MHB4JywKKyAgICBtYXJnaW5Cb3R0b206ICczMHB4JywKKyAgfSwKKyAgY29udGFpbmVySGVhZGVy OiB7CisgICAgZm9udFNpemU6ICcxNnB4JywKKyAgICBmb250V2VpZ2h0OiAnYm9sZCcsCisgICAg bWFyZ2luQm90dG9tOiAnNXB4JywKKyAgfQorfSkpOworCitleHBvcnQgZnVuY3Rpb24gdHJhbnNm b3JtRGF0YShsYWJlbHMsIHJlZnJlc2hSYXRlKSB7CisgIGNvbnN0IGNvbG9ycyA9IFsnI0ZGNjM4 NCcsJyMzNkEyRUInLCcjRkZDRTU2JywnIzRCQzBDMCcsJyM5OTY2RkYnLCcjRkY5RjQwJywnIzhE NkU2MycsJyMyMTk2RjMnLCcjRkZFQjNCJywnIzlDMjdCMCcsJyMwMEJDRDQnLCcjQ0REQzM5J107 CisgIGxldCBkYXRhc2V0cyA9IE9iamVjdC5rZXlzKGxhYmVscykubWFwKChsYWJlbCwgaSk9PnsK KyAgICByZXR1cm4geworICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgZGF0YTogbGFiZWxzW2xh YmVsXSB8fCBbXSwKKyAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnNbaV0sCisgICAgICBwb2ludEhp dFJhZGl1czogREFUQV9QT0lOVF9TSVpFLAorICAgIH07CisgIH0pIHx8IFtdOworCisgIHJldHVy biB7CisgICAgZGF0YXNldHM6IGRhdGFzZXRzLAorICAgIHJlZnJlc2hSYXRlOiByZWZyZXNoUmF0 ZSwKKyAgfTsKK30KKworLyogVVJMIGZvciBmZXRjaGluZyBncmFwaHMgZGF0YSAqLworZXhwb3J0 IGZ1bmN0aW9uIGdldFN0YXRzVXJsKHNpZD0tMSwgZGlkPS0xLCBjaGFydF9uYW1lcz1bXSkgewor ICBsZXQgYmFzZV91cmwgPSB1cmxfZm9yKCdkYXNoYm9hcmQuc3lzdGVtX3N0YXRpc3RpY3MnKTsK KyAgYmFzZV91cmwgKz0gJy8nICsgc2lkOworICBiYXNlX3VybCArPSAoZGlkID4gMCkgPyAoJy8n ICsgZGlkKSA6ICcnOworICBiYXNlX3VybCArPSAnP2NoYXJ0X25hbWVzPScgKyBjaGFydF9uYW1l cy5qb2luKCcsJyk7CisgIAorICByZXR1cm4gYmFzZV91cmw7Cit9CisKKy8qIFRoaXMgd2lsbCBw cm9jZXNzIGluY29taW5nIGNoYXJ0cyBkYXRhIGFkZCBpdCB0aGUgcHJldmlvdXMgY2hhcnRzCisg KiBkYXRhIHRvIGdldCB0aGUgbmV3IHN0YXRlLgorICovCitleHBvcnQgZnVuY3Rpb24gc3RhdHNS ZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHsKKworICBpZihhY3Rpb24ucmVzZXQpIHsKKyAgICByZXR1 cm4gYWN0aW9uLnJlc2V0OworICB9CisKKyAgaWYoIWFjdGlvbi5pbmNvbWluZykgeworICAgIHJl dHVybiBzdGF0ZTsKKyAgfQorCisgIGlmKCFhY3Rpb24uY291bnRlckRhdGEpIHsKKyAgICBhY3Rp b24uY291bnRlckRhdGEgPSBhY3Rpb24uaW5jb21pbmc7CisgIH0KKworICBsZXQgbmV3U3RhdGUg PSB7fTsKKyAgT2JqZWN0LmtleXMoYWN0aW9uLmluY29taW5nKS5mb3JFYWNoKGxhYmVsID0+IHsK KyAgICBpZihzdGF0ZVtsYWJlbF0pIHsKKyAgICAgIG5ld1N0YXRlW2xhYmVsXSA9IFsKKyAgICAg ICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9uLmluY29taW5nW2xhYmVsXSAtIGFjdGlvbi5jb3Vu dGVyRGF0YVtsYWJlbF0gOiBhY3Rpb24uaW5jb21pbmdbbGFiZWxdLAorICAgICAgICAuLi5zdGF0 ZVtsYWJlbF0uc2xpY2UoMCwgWF9BWElTX0xFTkdUSC0xKSwKKyAgICAgIF07CisgICAgfSBlbHNl IHsKKyAgICAgIG5ld1N0YXRlW2xhYmVsXSA9IFsKKyAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAg YWN0aW9uLmluY29taW5nW2xhYmVsXSAtIGFjdGlvbi5jb3VudGVyRGF0YVtsYWJlbF0gOiBhY3Rp b24uaW5jb21pbmdbbGFiZWxdLAorICAgICAgXTsKKyAgICB9CisgIH0pOworICByZXR1cm4gbmV3 U3RhdGU7Cit9CisKK2NvbnN0IGNoYXJ0c0RlZmF1bHQgPSB7CisgICdjdV9zdGF0cyc6IHsnVXNl ciBOb3JtYWwnOiBbXSwgJ1VzZXIgTmljZWQnOiBbXSwgJ0tlcm5lbCc6IFtdLCAnSWRsZSc6IFtd fSwKKyAgJ2xhX3N0YXRzJzogeycxIG1pbic6IFtdLCAnNSBtaW5zJzogW10sICcxMCBtaW5zJzog W10sICcxNSBtaW5zJzogW119LAorICAncGN1X3N0YXRzJzoge30sCit9OworCitleHBvcnQgZGVm YXVsdCBmdW5jdGlvbiBDUFUoeyBzaWQsIGRpZCwgc2VydmVyQ29uZW5jdGVkLCBwYWdlVmlzaWJs ZSwgZW5hYmxlUG9sbD10cnVlfSkgeworICBjb25zdCByZWZyZXNoT24gPSB1c2VSZWYobnVsbCk7 CisgIAorICBjb25zdCBbY3B1VXNhZ2VJbmZvLCBjcHVVc2FnZUluZm9SZWR1Y2VdID0gdXNlUmVk dWNlcihzdGF0c1JlZHVjZXIsIGNoYXJ0c0RlZmF1bHRbJ2N1X3N0YXRzJ10pOworICBjb25zdCBb bG9hZEF2Z0luZm8sIGxvYWRBdmdJbmZvUmVkdWNlXSA9IHVzZVJlZHVjZXIoc3RhdHNSZWR1Y2Vy LCBjaGFydHNEZWZhdWx0WydsYV9zdGF0cyddKTsKKyAgY29uc3QgW3Byb2Nlc3NDcHVVc2FnZVN0 YXRzLCBzZXRQcm9jZXNzQ3B1VXNhZ2VTdGF0c10gPSB1c2VTdGF0ZShbXSk7CisKKyAgY29uc3Qg W2NvdW50ZXJEYXRhLCBzZXRDb3VudGVyRGF0YV0gPSB1c2VTdGF0ZSh7fSk7CisKKyAgY29uc3Qg W3BvbGxEZWxheSwgc2V0UG9sbERlbGF5XSA9IHVzZVN0YXRlKDUwMDApOworICBjb25zdCB0YWJs ZUhlYWRlciA9IFsKKyAgICB7CisgICAgICAgIEhlYWRlcjogJ1BJRCcsCisgICAgICAgIGFjY2Vz c29yOiAncGlkJywKKyAgICAgICAgc29ydGFibGU6IHRydWUsCisgICAgICAgIHJlc2l6YWJsZTog dHJ1ZSwKKyAgICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsCisgICAgfSwKKyAgICB7 CisgICAgICAgIEhlYWRlcjogJ05hbWUnLAorICAgICAgICBhY2Nlc3NvcjogJ25hbWUnLAorICAg ICAgICBzb3J0YWJsZTogdHJ1ZSwKKyAgICAgICAgcmVzaXphYmxlOiB0cnVlLAorICAgICAgICBk aXNhYmxlR2xvYmFsRmlsdGVyOiBmYWxzZSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgSGVhZGVy OiAnQ1BVIFVzYWdlJywKKyAgICAgICAgYWNjZXNzb3I6ICdjcHVfdXNhZ2UnLAorICAgICAgICBz b3J0YWJsZTogdHJ1ZSwKKyAgICAgICAgcmVzaXphYmxlOiB0cnVlLAorICAgICAgICBkaXNhYmxl R2xvYmFsRmlsdGVyOiBmYWxzZSwKKyAgICB9LAorICBdOworICBjb25zdCBbZXJyb3JNc2csIHNl dEVycm9yTXNnXSA9IHVzZVN0YXRlKG51bGwpOworICBjb25zdCBbY2hhcnREcmF3bk9uY2UsIHNl dENoYXJ0RHJhd25PbmNlXSA9IHVzZVN0YXRlKGZhbHNlKTsKKworICBjb25zdCBbcmVmcmVzaFBy ZWZlcmVuY2VzLCBzZXRSZWZyZXNoUHJlZmVyZW5jZXNdID0gdXNlU3RhdGUoeydjdV9zdGF0cyc6 IDUsICdsYV9zdGF0cyc6IDYwLCAncGN1X3N0YXRzJzogMTB9KTsKKworICB1c2VFZmZlY3QoKCk9 PnsKKyAgICAvKiBDaGFydHMgcmVuZGVyZWQgYXJlIG5vdCB2aXNpYmxlIHdoZW4sIHRoZSBkYXNo Ym9hcmQgaXMgaGlkZGVuIGJ1dCBsYXRlciB2aXNpYmxlICovCisgICAgaWYocGFnZVZpc2libGUg JiYgIWNoYXJ0RHJhd25PbmNlKSB7CisgICAgICBzZXRDaGFydERyYXduT25jZSh0cnVlKTsKKyAg ICB9CisgIH0sIFtwYWdlVmlzaWJsZV0pOworCisgIHVzZUludGVydmFsKCgpPT57CisgICAgY29u c3QgY3VyckVwb2NoID0gZ2V0RXBvY2goKTsKKyAgICBpZihyZWZyZXNoT24uY3VycmVudCA9PT0g bnVsbCkgeworICAgICAgbGV0IHRtcFJlZiA9IHt9OworICAgICAgT2JqZWN0LmtleXMoY2hhcnRz RGVmYXVsdCkuZm9yRWFjaCgobmFtZSk9PnsKKyAgICAgICAgdG1wUmVmW25hbWVdID0gY3VyckVw b2NoOworICAgICAgfSk7CisgICAgICByZWZyZXNoT24uY3VycmVudCA9IHRtcFJlZjsKKyAgICB9 CisKKyAgICBsZXQgZ2V0Rm9yID0gW107CisgICAgT2JqZWN0LmtleXMoY2hhcnRzRGVmYXVsdCku Zm9yRWFjaCgobmFtZSk9PnsKKyAgICAgIGlmKGN1cnJFcG9jaCA+PSByZWZyZXNoT24uY3VycmVu dFtuYW1lXSkgeworICAgICAgICBnZXRGb3IucHVzaChuYW1lKTsKKyAgICAgICAgcmVmcmVzaE9u LmN1cnJlbnRbbmFtZV0gPSBjdXJyRXBvY2ggKyByZWZyZXNoUHJlZmVyZW5jZXNbbmFtZV07Cisg ICAgICB9CisgICAgfSk7CisKKyAgICBsZXQgcGF0aCA9IGdldFN0YXRzVXJsKHNpZCwgZGlkLCBn ZXRGb3IpOworICAgIGlmICghcGFnZVZpc2libGUpeworICAgICAgcmV0dXJuOworICAgIH0KKyAg ICBheGlvcy5nZXQocGF0aCkKKyAgICAgIC50aGVuKChyZXNwKT0+eworICAgICAgICBsZXQgZGF0 YSA9IHJlc3AuZGF0YTsKKyAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CisgICAgICAgIHNldEVy cm9yTXNnKG51bGwpOworICAgICAgICBpZihkYXRhLmhhc093blByb3BlcnR5KCdjdV9zdGF0cycp KXsKKyAgICAgICAgICBsZXQgbmV3X2N1X3N0YXRzID0geworICAgICAgICAgICAgJ1VzZXIgTm9y bWFsJzogZGF0YVsnY3Vfc3RhdHMnXVsndXNlcm1vZGVfbm9ybWFsX3Byb2Nlc3NfcGVyY2VudCdd P2RhdGFbJ2N1X3N0YXRzJ11bJ3VzZXJtb2RlX25vcm1hbF9wcm9jZXNzX3BlcmNlbnQnXTowLCAK KyAgICAgICAgICAgICdVc2VyIE5pY2VkJzogZGF0YVsnY3Vfc3RhdHMnXVsndXNlcm1vZGVfbmlj ZWRfcHJvY2Vzc19wZXJjZW50J10/ZGF0YVsnY3Vfc3RhdHMnXVsndXNlcm1vZGVfbmljZWRfcHJv Y2Vzc19wZXJjZW50J106MCwgCisgICAgICAgICAgICAnS2VybmVsJzogZGF0YVsnY3Vfc3RhdHMn XVsna2VybmVsbW9kZV9wcm9jZXNzX3BlcmNlbnQnXT9kYXRhWydjdV9zdGF0cyddWydrZXJuZWxt b2RlX3Byb2Nlc3NfcGVyY2VudCddOjAsIAorICAgICAgICAgICAgJ0lkbGUnOiBkYXRhWydjdV9z dGF0cyddWydpZGxlX21vZGVfcGVyY2VudCddP2RhdGFbJ2N1X3N0YXRzJ11bJ2lkbGVfbW9kZV9w ZXJjZW50J106MCwKKyAgICAgICAgICB9OworICAgICAgICAgIGNwdVVzYWdlSW5mb1JlZHVjZSh7 aW5jb21pbmc6IG5ld19jdV9zdGF0c30pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp ZihkYXRhLmhhc093blByb3BlcnR5KCdsYV9zdGF0cycpKXsKKyAgICAgICAgICBsZXQgbmV3X2xh X3N0YXRzID0geworICAgICAgICAgICAgJzEgbWluJzogZGF0YVsnbGFfc3RhdHMnXVsnbG9hZF9h dmdfb25lX21pbnV0ZSddP2RhdGFbJ2xhX3N0YXRzJ11bJ2xvYWRfYXZnX29uZV9taW51dGUnXTow LCAKKyAgICAgICAgICAgICc1IG1pbnMnOiBkYXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z19maXZl X21pbnV0ZXMnXT9kYXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z19maXZlX21pbnV0ZXMnXTowLCAK KyAgICAgICAgICAgICcxMCBtaW5zJzogZGF0YVsnbGFfc3RhdHMnXVsnbG9hZF9hdmdfdGVuX21p bnV0ZXMnXT9kYXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z190ZW5fbWludXRlcyddOjAsIAorICAg ICAgICAgICAgJzE1IG1pbnMnOiBkYXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z19maWZ0ZWVuX21p bnV0ZXMnXT9kYXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z19maWZ0ZWVuX21pbnV0ZXMnXTowLAor ICAgICAgICAgIH07CisgICAgICAgICAgbG9hZEF2Z0luZm9SZWR1Y2Uoe2luY29taW5nOiBuZXdf bGFfc3RhdHN9KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYoZGF0YS5oYXNPd25Q cm9wZXJ0eSgncGN1X3N0YXRzJykpeworICAgICAgICAgIGxldCBwY3VfaW5mb19saXN0ID0gW107 CisgICAgICAgICAgY29uc3QgcGN1X2luZm9fb2JqID0gZGF0YVsncGN1X3N0YXRzJ107CisgICAg ICAgICAgZm9yIChjb25zdCBrZXkgaW4gcGN1X2luZm9fb2JqKSB7CisgICAgICAgICAgICBwY3Vf aW5mb19saXN0LnB1c2goeyBpY29uOiAnJywgcGlkOiBwY3VfaW5mb19vYmpba2V5XVsncGlkJ10s IG5hbWU6IHBjdV9pbmZvX29ialtrZXldWyduYW1lJ10sIGNwdV91c2FnZTogcGN1X2luZm9fb2Jq W2tleV1bJ2NwdV91c2FnZSddIH0pOworICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAg ICBzZXRQcm9jZXNzQ3B1VXNhZ2VTdGF0cyhwY3VfaW5mb19saXN0KTsKKyAgICAgICAgfQorCisg ICAgICAgIHNldENvdW50ZXJEYXRhKChwcmV2Q291bnRlckRhdGEpPT57CisgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgIC4uLnByZXZDb3VudGVyRGF0YSwKKyAgICAgICAgICAgIC4uLmRh dGEsCisgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgICB9KQorICAgICAgLmNhdGNoKChl cnJvcik9PnsKKyAgICAgICAgaWYoIWVycm9yTXNnKSB7CisgICAgICAgICAgY3B1VXNhZ2VJbmZv UmVkdWNlKHtyZXNldDpjaGFydHNEZWZhdWx0WydjdV9zdGF0cyddfSk7CisgICAgICAgICAgbG9h ZEF2Z0luZm9SZWR1Y2Uoe3Jlc2V0OmNoYXJ0c0RlZmF1bHRbJ2xhX3N0YXRzJ119KTsKKyAgICAg ICAgICBzZXRDb3VudGVyRGF0YSh7fSk7CisgICAgICAgICAgaWYoZXJyb3IucmVzcG9uc2UpIHsK KyAgICAgICAgICAgIGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQyOCkgeworICAgICAg ICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdQbGVhc2UgY29ubmVjdCB0byB0aGUgc2VsZWN0 ZWQgc2VydmVyIHRvIHZpZXcgdGhlIGdyYXBoLicpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxz dCByZW5kZXJpbmcgdGhlIGdyYXBoLicpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVs c2UgaWYoZXJyb3IucmVxdWVzdCkgeworICAgICAgICAgICAgc2V0RXJyb3JNc2coZ2V0dGV4dCgn Tm90IGNvbm5lY3RlZCB0byB0aGUgc2VydmVyIG9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2 ZXIgaGFzIGJlZW4gY2xvc2VkLicpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CisgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICB9KTsKKyAgfSwgZW5hYmxlUG9sbCA/IHBvbGxEZWxheSA6IC0xKTsK KworICByZXR1cm4gKAorICAgIDw+CisgICAgICA8ZGl2IGRhdGEtdGVzdGlkPSdncmFwaC1wb2xs LWRlbGF5JyBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319Pntwb2xsRGVsYXl9PC9kaXY+CisgICAg ICB7Y2hhcnREcmF3bk9uY2UgJiYKKyAgICAgICAgPENQVVdyYXBwZXIKKyAgICAgICAgICBjcHVV c2FnZUluZm89e3RyYW5zZm9ybURhdGEoY3B1VXNhZ2VJbmZvLCByZWZyZXNoUHJlZmVyZW5jZXNb J2N1X3N0YXRzJ10pfQorICAgICAgICAgIGxvYWRBdmdJbmZvPXt0cmFuc2Zvcm1EYXRhKGxvYWRB dmdJbmZvLCByZWZyZXNoUHJlZmVyZW5jZXNbJ2xhX3N0YXRzJ10pfQorICAgICAgICAgIHByb2Nl c3NDcHVVc2FnZVN0YXRzPXtwcm9jZXNzQ3B1VXNhZ2VTdGF0c30KKyAgICAgICAgICB0YWJsZUhl YWRlcj17dGFibGVIZWFkZXJ9CisgICAgICAgICAgZXJyb3JNc2c9e2Vycm9yTXNnfQorICAgICAg ICAgIHNob3dUb29sdGlwPXt0cnVlfQorICAgICAgICAgIHNob3dEYXRhUG9pbnRzPXtmYWxzZX0K KyAgICAgICAgICBsaW5lQm9yZGVyV2lkdGg9ezF9CisgICAgICAgICAgaXNEYXRhYmFzZT17ZGlk ID4gMH0KKyAgICAgICAgICBpc1Rlc3Q9e2ZhbHNlfQorICAgICAgICAvPgorICAgICAgfQorICAg IDwvPgorICApOworfQorCitDUFUucHJvcFR5cGVzID0geworICBzaWQ6IFByb3BUeXBlcy5vbmVP ZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1Jl cXVpcmVkXSksCisgIGRpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5p c1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSwKKyAgc2VydmVyQ29ubmVj dGVkOiBQcm9wVHlwZXMuYm9vbCwKKyAgcGFnZVZpc2libGU6IFByb3BUeXBlcy5ib29sLAorICBl bmFibGVQb2xsOiBQcm9wVHlwZXMuYm9vbCwKK307CisKK2V4cG9ydCBmdW5jdGlvbiBDUFVXcmFw cGVyKHByb3BzKSB7CisgIGNvbnN0IGNsYXNzZXMgPSB1c2VTdHlsZXMoKTsKKyAgY29uc3Qgb3B0 aW9ucyA9IHVzZU1lbW8oKCk9Pih7CisgICAgc2hvd0RhdGFQb2ludHM6IHByb3BzLnNob3dEYXRh UG9pbnRzLAorICAgIHNob3dUb29sdGlwOiBwcm9wcy5zaG93VG9vbHRpcCwKKyAgICBsaW5lQm9y ZGVyV2lkdGg6IHByb3BzLmxpbmVCb3JkZXJXaWR0aCwKKyAgfSksIFtwcm9wcy5zaG93VG9vbHRp cCwgcHJvcHMuc2hvd0RhdGFQb2ludHMsIHByb3BzLmxpbmVCb3JkZXJXaWR0aF0pOworICByZXR1 cm4gKAorICAgIDw+CisgICAgICA8R3JpZCBjb250YWluZXIgc3BhY2luZz17MX0gY2xhc3NOYW1l PXtjbGFzc2VzLmNvbnRhaW5lcn0+CisgICAgICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9PgorICAgICAg ICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQoJ0NQ VSBVc2FnZScpfTwvZGl2PgorICAgICAgICAgIDxDaGFydENvbnRhaW5lciBpZD0nY3UtZ3JhcGgn IHRpdGxlPXtnZXR0ZXh0KCcnKX0gZGF0YXNldHM9e3Byb3BzLmNwdVVzYWdlSW5mby5kYXRhc2V0 c30gIGVycm9yTXNnPXtwcm9wcy5lcnJvck1zZ30gaXNUZXN0PXtwcm9wcy5pc1Rlc3R9PgorICAg ICAgICAgICAgPFN0cmVhbWluZ0NoYXJ0IGRhdGE9e3Byb3BzLmNwdVVzYWdlSW5mb30gZGF0YVBv aW50U2l6ZT17REFUQV9QT0lOVF9TSVpFfSB4UmFuZ2U9e1hfQVhJU19MRU5HVEh9IG9wdGlvbnM9 e29wdGlvbnN9IC8+CisgICAgICAgICAgPC9DaGFydENvbnRhaW5lcj4KKyAgICAgICAgPC9Hcmlk PgorICAgICAgICA8R3JpZCBpdGVtIG1kPXs2fT4KKyAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17 Y2xhc3Nlcy5jb250YWluZXJIZWFkZXJ9PntnZXR0ZXh0KCdMb2FkIEF2ZXJhZ2UnKX08L2Rpdj4K KyAgICAgICAgICA8Q2hhcnRDb250YWluZXIgaWQ9J2xhLWdyYXBoJyB0aXRsZT17Z2V0dGV4dCgn Jyl9IGRhdGFzZXRzPXtwcm9wcy5sb2FkQXZnSW5mby5kYXRhc2V0c30gIGVycm9yTXNnPXtwcm9w cy5lcnJvck1zZ30gaXNUZXN0PXtwcm9wcy5pc1Rlc3R9PgorICAgICAgICAgICAgPFN0cmVhbWlu Z0NoYXJ0IGRhdGE9e3Byb3BzLmxvYWRBdmdJbmZvfSBkYXRhUG9pbnRTaXplPXtEQVRBX1BPSU5U X1NJWkV9IHhSYW5nZT17WF9BWElTX0xFTkdUSH0gb3B0aW9ucz17b3B0aW9uc30gLz4KKyAgICAg ICAgICA8L0NoYXJ0Q29udGFpbmVyPgorICAgICAgICA8L0dyaWQ+CisgICAgICA8L0dyaWQ+Cisg ICAgICA8R3JpZCBjb250YWluZXIgc3BhY2luZz17MX0gY2xhc3NOYW1lPXtjbGFzc2VzLmZpeGVk Q29udGFpbmVyfT4KKyAgICAgICAgPFBnVGFibGUKKyAgICAgICAgICBjbGFzc05hbWU9e2NsYXNz ZXMuYXV0b1Jlc2l6ZXJ9CisgICAgICAgICAgY29sdW1ucz17cHJvcHMudGFibGVIZWFkZXJ9Cisg ICAgICAgICAgZGF0YT17cHJvcHMucHJvY2Vzc0NwdVVzYWdlU3RhdHN9CisgICAgICAgICAgbXNn PXtwcm9wcy5lcnJvck1zZ30KKyAgICAgICAgICB0eXBlPXsncGFuZWwnfQorICAgICAgICA+PC9Q Z1RhYmxlPgorICAgICAgPC9HcmlkPgorICAgIDwvPgorICApOworfQorCitjb25zdCBwcm9wVHlw ZVN0YXRzID0gUHJvcFR5cGVzLnNoYXBlKHsKKyAgZGF0YXNldHM6IFByb3BUeXBlcy5hcnJheSwK KyAgcmVmcmVzaFJhdGU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwKK30pOworQ1BVV3Jh cHBlci5wcm9wVHlwZXMgPSB7CisgIGNwdVVzYWdlSW5mbzogcHJvcFR5cGVTdGF0cy5pc1JlcXVp cmVkLAorICBsb2FkQXZnSW5mbzogcHJvcFR5cGVTdGF0cy5pc1JlcXVpcmVkLAorICBwcm9jZXNz Q3B1VXNhZ2VTdGF0czogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsCisgIHRhYmxlSGVhZGVy OiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCwKKyAgZXJyb3JNc2c6IFByb3BUeXBlcy5zdHJp bmcsCisgIHNob3dUb29sdGlwOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLAorICBzaG93RGF0 YVBvaW50czogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwKKyAgbGluZUJvcmRlcldpZHRoOiBQ cm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsCisgIGlzRGF0YWJhc2U6IFByb3BUeXBlcy5ib29s LmlzUmVxdWlyZWQsCisgIGlzVGVzdDogUHJvcFR5cGVzLmJvb2wsCit9OwpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMv anMvRGFzaGJvYXJkLmpzeCBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvRGFzaGJv YXJkLmpzeAppbmRleCA1ODg1ODNlYjMuLjVlODYxNjA5ZSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRt aW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9EYXNoYm9hcmQuanN4CisrKyBiL3dlYi9wZ2FkbWluL2Rh c2hib2FyZC9zdGF0aWMvanMvRGFzaGJvYXJkLmpzeApAQCAtMjksNiArMjksOSBAQCBpbXBvcnQg XyBmcm9tICdsb2Rhc2gnOwogaW1wb3J0IENhY2hlZE91dGxpbmVkSWNvbiBmcm9tICdAbWF0ZXJp YWwtdWkvaWNvbnMvQ2FjaGVkT3V0bGluZWQnOwogaW1wb3J0IEVtcHR5UGFuZWxNZXNzYWdlIGZy b20gJy4uLy4uLy4uL3N0YXRpYy9qcy9jb21wb25lbnRzL0VtcHR5UGFuZWxNZXNzYWdlJzsKIGlt cG9ydCBUYWJQYW5lbCBmcm9tICcuLi8uLi8uLi9zdGF0aWMvanMvY29tcG9uZW50cy9UYWJQYW5l bCc7CitpbXBvcnQgU3VtbWFyeSBmcm9tICcuL1N1bW1hcnknOworaW1wb3J0IENQVSBmcm9tICcu L0NQVSc7CitpbXBvcnQgTWVtb3J5IGZyb20gJy4vTWVtb3J5JzsKIAogZnVuY3Rpb24gcGFyc2VE YXRhKGRhdGEpIHsKICAgbGV0IHJlcyA9IFtdOwpAQCAtMTU0LDEwICsxNTcsMTQgQEAgZXhwb3J0 IGRlZmF1bHQgZnVuY3Rpb24gRGFzaGJvYXJkKHsKICAgY29uc3QgW21zZywgc2V0TXNnXSA9IHVz ZVN0YXRlKCcnKTsKICAgY29uc3QgW3RhYlZhbCwgc2V0VGFiVmFsXSA9IHVzZVN0YXRlKDApOwog ICBjb25zdCBbbWFpblRhYlZhbCwgc2V0bWFpblRhYlZhbF0gPSB1c2VTdGF0ZSgwKTsKLSAgY29u c3QgW3N5c3RlbVN0YXRzVGFiVmFsLCBzZXRTeXN0ZW1TdGF0c1RhYlZhbF0gPSB1c2VTdGF0ZSgw KTsKICAgY29uc3QgW3JlZnJlc2gsIHNldFJlZnJlc2hdID0gdXNlU3RhdGUoZmFsc2UpOwogICBj b25zdCBbYWN0aXZlT25seSwgc2V0QWN0aXZlT25seV0gPSB1c2VTdGF0ZShmYWxzZSk7CiAgIGNv bnN0IFtzY2hlbWFEaWN0LCBzZXRTY2hlbWFEaWN0XSA9IFJlYWN0LnVzZVN0YXRlKHt9KTsKKyAg Y29uc3QgW3N5c3RlbVN0YXRzVGFiVmFsLCBzZXRTeXN0ZW1TdGF0c1RhYlZhbF0gPSB1c2VTdGF0 ZSgwKTsKKyAgICAgIAorICBjb25zdCBzeXN0ZW1TdGF0c1RhYkNoYW5nZWQgPSAoZSwgdGFiVmFs KSA9PiB7CisgICAgICBzZXRTeXN0ZW1TdGF0c1RhYlZhbCh0YWJWYWwpOworICB9OwogCiAgIGlm ICghZGlkKSB7CiAgICAgdGFicy5wdXNoKGdldHRleHQoJ0NvbmZpZ3VyYXRpb24nKSk7CkBAIC0x NzEsMTAgKzE3OCw2IEBAIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhc2hib2FyZCh7CiAgICAg c2V0bWFpblRhYlZhbCh0YWJWYWwpOwogICB9OwogCi0gIGNvbnN0IHN5c3RlbVN0YXRzVGFiQ2hh bmdlZCA9IChlLCB0YWJWYWwpID0+IHsKLSAgICBzZXRTeXN0ZW1TdGF0c1RhYlZhbCh0YWJWYWwp OwotICB9OwotCiAgIGNvbnN0IHNlcnZlckNvbmZpZ0NvbHVtbnMgPSBbCiAgICAgewogICAgICAg YWNjZXNzb3I6ICduYW1lJywKQEAgLTk1OSw4ICs5NjIsOCBAQCBleHBvcnQgZGVmYXVsdCBmdW5j dGlvbiBEYXNoYm9hcmQoewogICAgICAgICAgICAgICAgIDwvVGFiUGFuZWw+CiAgICAgICAgICAg ICAgICAgey8qIFN5c3RlbSBTdGF0aXN0aWNzICovfQogICAgICAgICAgICAgICAgIDxUYWJQYW5l bCB2YWx1ZT17bWFpblRhYlZhbH0gaW5kZXg9ezF9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFi UGFuZWx9PgotICAgICAgICAgICAgICAgICAgPEJveCBoZWlnaHQ9IjEwMCUiIGRpc3BsYXk9ImZs ZXgiIGZsZXhEaXJlY3Rpb249ImNvbHVtbiI+Ci0gICAgICAgICAgICAgICAgICAgIDxCb3g+Cisg ICAgICAgICAgICAgICAgPEJveCBoZWlnaHQ9IjEwMCUiIGRpc3BsYXk9ImZsZXgiIGZsZXhEaXJl Y3Rpb249ImNvbHVtbiI+CisgICAgICAgICAgICAgICAgICA8Qm94PgogICAgICAgICAgICAgICAg ICAgICAgIDxUYWJzCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c3lzdGVtU3RhdHNU YWJWYWx9CiAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c3lzdGVtU3RhdHNUYWJD aGFuZ2VkfQpAQCAtOTY5LDIwICs5NzIsMzggQEAgZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGFz aGJvYXJkKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxUYWIga2V5PXt0YWJW YWx1ZX0gbGFiZWw9e3RhYlZhbHVlfSAvPjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0pfQog ICAgICAgICAgICAgICAgICAgICAgIDwvVGFicz4KLSAgICAgICAgICAgICAgICAgICAgPC9Cb3g+ Ci0gICAgICAgICAgICAgICAgICAgIDxUYWJQYW5lbCB2YWx1ZT17c3lzdGVtU3RhdHNUYWJWYWx9 IGluZGV4PXswfSBjbGFzc05hbWVSb290PXtjbGFzc2VzLnRhYlBhbmVsfT4KLSAgICAgICAgICAg ICAgICAgICAgICBTdW1tYXJ5Ci0gICAgICAgICAgICAgICAgICAgIDwvVGFiUGFuZWw+Ci0gICAg ICAgICAgICAgICAgICAgIDxUYWJQYW5lbCB2YWx1ZT17c3lzdGVtU3RhdHNUYWJWYWx9IGluZGV4 PXsxfSBjbGFzc05hbWVSb290PXtjbGFzc2VzLnRhYlBhbmVsfT4KLSAgICAgICAgICAgICAgICAg ICAgICBDUFUKLSAgICAgICAgICAgICAgICAgICAgPC9UYWJQYW5lbD4KLSAgICAgICAgICAgICAg ICAgICAgPFRhYlBhbmVsIHZhbHVlPXtzeXN0ZW1TdGF0c1RhYlZhbH0gaW5kZXg9ezJ9IGNsYXNz TmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9PgotICAgICAgICAgICAgICAgICAgICAgIE1lbW9y eQotICAgICAgICAgICAgICAgICAgICA8L1RhYlBhbmVsPgotICAgICAgICAgICAgICAgICAgICA8 VGFiUGFuZWwgdmFsdWU9e3N5c3RlbVN0YXRzVGFiVmFsfSBpbmRleD17M30gY2xhc3NOYW1lUm9v dD17Y2xhc3Nlcy50YWJQYW5lbH0+Ci0gICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZQotICAg ICAgICAgICAgICAgICAgICA8L1RhYlBhbmVsPgogICAgICAgICAgICAgICAgICAgPC9Cb3g+Cisg ICAgICAgICAgICAgICAgICA8VGFiUGFuZWwgdmFsdWU9e3N5c3RlbVN0YXRzVGFiVmFsfSBpbmRl eD17MH0gY2xhc3NOYW1lUm9vdD17Y2xhc3Nlcy50YWJQYW5lbH0+CisgICAgICAgICAgICAgICAg ICAgIDxTdW1tYXJ5CisgICAgICAgICAgICAgICAgICAgICAga2V5PXtzaWQgKyBkaWR9CisgICAg ICAgICAgICAgICAgICAgICAgc2lkPXtzaWR9IAorICAgICAgICAgICAgICAgICAgICAgIGRpZD17 ZGlkfQorICAgICAgICAgICAgICAgICAgICAgIHBhZ2VWaXNpYmxlPXtwcm9wcy5wYW5lbFZpc2li bGV9CisgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29ubmVjdGVkPXtwcm9wcy5zZXJ2ZXJD b25uZWN0ZWR9CisgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICA8L1Rh YlBhbmVsPgorICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXtzeXN0ZW1TdGF0c1Rh YlZhbH0gaW5kZXg9ezF9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9PgorICAgICAg ICAgICAgICAgICAgICA8Q1BVCisgICAgICAgICAgICAgICAgICAgICAga2V5PXtzaWQgKyBkaWR9 CisgICAgICAgICAgICAgICAgICAgICAgc2lkPXtzaWR9IAorICAgICAgICAgICAgICAgICAgICAg IGRpZD17ZGlkfQorICAgICAgICAgICAgICAgICAgICAgIHBhZ2VWaXNpYmxlPXtwcm9wcy5wYW5l bFZpc2libGV9CisgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29ubmVjdGVkPXtwcm9wcy5z ZXJ2ZXJDb25uZWN0ZWR9CisgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAg ICA8L1RhYlBhbmVsPgorICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXtzeXN0ZW1T dGF0c1RhYlZhbH0gaW5kZXg9ezJ9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9Pgor ICAgICAgICAgICAgICAgICAgICA8TWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAga2V5PXtz aWQgKyBkaWR9CisgICAgICAgICAgICAgICAgICAgICAgc2lkPXtzaWR9IAorICAgICAgICAgICAg ICAgICAgICAgIGRpZD17ZGlkfQorICAgICAgICAgICAgICAgICAgICAgIHBhZ2VWaXNpYmxlPXtw cm9wcy5wYW5lbFZpc2libGV9CisgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29ubmVjdGVk PXtwcm9wcy5zZXJ2ZXJDb25uZWN0ZWR9CisgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAg ICAgICAgICAgICA8L1RhYlBhbmVsPgorICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVl PXtzeXN0ZW1TdGF0c1RhYlZhbH0gaW5kZXg9ezN9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFi UGFuZWx9PgorICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UKKyAgICAgICAgICAgICAgICAg IDwvVGFiUGFuZWw+CisgICAgICAgICAgICAgIDwvQm94PgogICAgICAgICAgICAgICAgIDwvVGFi UGFuZWw+CiAgICAgICAgICAgICAgIDwvQm94PgogICAgICAgICAgICAgPC9Cb3g+CmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL01lbW9yeS5qc3ggYi93ZWIvcGdh ZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL01lbW9yeS5qc3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi44MjgzMWE5NzYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi9kYXNoYm9hcmQvc3RhdGljL2pzL01lbW9yeS5qc3gKQEAgLTAsMCArMSwzMjkgQEAKK2ltcG9y dCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVJlZHVjZXIsIHVzZU1l bW8gfSBmcm9tICdyZWFjdCc7CitpbXBvcnQgUGdUYWJsZSBmcm9tICdzb3VyY2VzL2NvbXBvbmVu dHMvUGdUYWJsZSc7CitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOworaW1w b3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJzsKK2ltcG9ydCB7IG1ha2VTdHlsZXMgfSBm cm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnOworaW1wb3J0IHVybF9mb3IgZnJvbSAnc291 cmNlcy91cmxfZm9yJzsKK2ltcG9ydCBnZXRBcGlJbnN0YW5jZSBmcm9tICdzb3VyY2VzL2FwaV9p bnN0YW5jZSc7CitpbXBvcnQge2dldEVwb2NofSBmcm9tICdzb3VyY2VzL3V0aWxzJzsKK2ltcG9y dCB7Q2hhcnRDb250YWluZXJ9IGZyb20gJy4vRGFzaGJvYXJkJzsKK2ltcG9ydCB7IEdyaWQgfSBm cm9tICdAbWF0ZXJpYWwtdWkvY29yZSc7CitpbXBvcnQgeyBEQVRBX1BPSU5UX1NJWkUgfSBmcm9t ICdzb3VyY2VzL2NoYXJ0anMnOworaW1wb3J0IFN0cmVhbWluZ0NoYXJ0IGZyb20gJy4uLy4uLy4u L3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQvU3RyZWFtaW5nQ2hhcnQnOworaW1wb3J0IHt1 c2VJbnRlcnZhbH0gZnJvbSAnc291cmNlcy9jdXN0b21faG9va3MnOworaW1wb3J0IGF4aW9zIGZy b20gJ2F4aW9zJzsKKworZXhwb3J0IGNvbnN0IFhfQVhJU19MRU5HVEggPSA3NTsKKworY29uc3Qg dXNlU3R5bGVzID0gbWFrZVN0eWxlcygodGhlbWUpID0+ICh7CisgIGF1dG9SZXNpemVyOiB7Cisg ICAgaGVpZ2h0OiAnMTAwJSAhaW1wb3J0YW50JywKKyAgICB3aWR0aDogJzEwMCUgIWltcG9ydGFu dCcsCisgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5ncmV5WzQwMF0sCisgICAgcGFkZGlu ZzogJzcuNXB4JywKKyAgICBvdmVyZmxvd1g6ICdhdXRvICFpbXBvcnRhbnQnLAorICAgIG92ZXJm bG93WTogJ2hpZGRlbiAhaW1wb3J0YW50JywKKyAgICBtaW5IZWlnaHQ6ICcxMDAlJywKKyAgICBt aW5XaWR0aDogJzEwMCUnLAorICB9LAorICBjb250YWluZXI6IHsKKyAgICBoZWlnaHQ6ICdhdXRv JywKKyAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdyZXlbMjAwXSwKKyAgICBwYWRkaW5n OiAnMTBweCcsCisgICAgbWFyZ2luQm90dG9tOiAnMzBweCcsCisgIH0sCisgIGZpeGVkQ29udGFp bmVyOiB7CisgICAgaGVpZ2h0OiAnNTc3cHgnLAorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0 dGUuZ3JleVsyMDBdLAorICAgIHBhZGRpbmc6ICcxMHB4JywKKyAgICBtYXJnaW5Cb3R0b206ICcz MHB4JywKKyAgfSwKKyAgY29udGFpbmVySGVhZGVyOiB7CisgICAgZm9udFNpemU6ICcxNnB4JywK KyAgICBmb250V2VpZ2h0OiAnYm9sZCcsCisgICAgbWFyZ2luQm90dG9tOiAnNXB4JywKKyAgfQor fSkpOworCitleHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShsYWJlbHMsIHJlZnJlc2hSYXRl KSB7CisgIGNvbnN0IGNvbG9ycyA9IFsnI0ZGNjM4NCcsJyMzNkEyRUInLCcjRkZDRTU2JywnIzRC QzBDMCcsJyM5OTY2RkYnLCcjRkY5RjQwJywnIzhENkU2MycsJyMyMTk2RjMnLCcjRkZFQjNCJywn IzlDMjdCMCcsJyMwMEJDRDQnLCcjQ0REQzM5J107CisgIGxldCBkYXRhc2V0cyA9IE9iamVjdC5r ZXlzKGxhYmVscykubWFwKChsYWJlbCwgaSk9PnsKKyAgICByZXR1cm4geworICAgICAgbGFiZWw6 IGxhYmVsLAorICAgICAgZGF0YTogbGFiZWxzW2xhYmVsXSB8fCBbXSwKKyAgICAgIGJvcmRlckNv bG9yOiBjb2xvcnNbaV0sCisgICAgICBwb2ludEhpdFJhZGl1czogREFUQV9QT0lOVF9TSVpFLAor ICAgIH07CisgIH0pIHx8IFtdOworCisgIHJldHVybiB7CisgICAgZGF0YXNldHM6IGRhdGFzZXRz LAorICAgIHJlZnJlc2hSYXRlOiByZWZyZXNoUmF0ZSwKKyAgfTsKK30KKworLyogVVJMIGZvciBm ZXRjaGluZyBncmFwaHMgZGF0YSAqLworZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRzVXJsKHNpZD0t MSwgZGlkPS0xLCBjaGFydF9uYW1lcz1bXSkgeworICBsZXQgYmFzZV91cmwgPSB1cmxfZm9yKCdk YXNoYm9hcmQuc3lzdGVtX3N0YXRpc3RpY3MnKTsKKyAgYmFzZV91cmwgKz0gJy8nICsgc2lkOwor ICBiYXNlX3VybCArPSAoZGlkID4gMCkgPyAoJy8nICsgZGlkKSA6ICcnOworICBiYXNlX3VybCAr PSAnP2NoYXJ0X25hbWVzPScgKyBjaGFydF9uYW1lcy5qb2luKCcsJyk7CisgIAorICByZXR1cm4g YmFzZV91cmw7Cit9CisKKy8qIFRoaXMgd2lsbCBwcm9jZXNzIGluY29taW5nIGNoYXJ0cyBkYXRh IGFkZCBpdCB0aGUgcHJldmlvdXMgY2hhcnRzCisgKiBkYXRhIHRvIGdldCB0aGUgbmV3IHN0YXRl LgorICovCitleHBvcnQgZnVuY3Rpb24gc3RhdHNSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHsKKwor ICBpZihhY3Rpb24ucmVzZXQpIHsKKyAgICByZXR1cm4gYWN0aW9uLnJlc2V0OworICB9CisKKyAg aWYoIWFjdGlvbi5pbmNvbWluZykgeworICAgIHJldHVybiBzdGF0ZTsKKyAgfQorCisgIGlmKCFh Y3Rpb24uY291bnRlckRhdGEpIHsKKyAgICBhY3Rpb24uY291bnRlckRhdGEgPSBhY3Rpb24uaW5j b21pbmc7CisgIH0KKworICBsZXQgbmV3U3RhdGUgPSB7fTsKKyAgT2JqZWN0LmtleXMoYWN0aW9u LmluY29taW5nKS5mb3JFYWNoKGxhYmVsID0+IHsKKyAgICBpZihzdGF0ZVtsYWJlbF0pIHsKKyAg ICAgIG5ld1N0YXRlW2xhYmVsXSA9IFsKKyAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9u LmluY29taW5nW2xhYmVsXSAtIGFjdGlvbi5jb3VudGVyRGF0YVtsYWJlbF0gOiBhY3Rpb24uaW5j b21pbmdbbGFiZWxdLAorICAgICAgICAuLi5zdGF0ZVtsYWJlbF0uc2xpY2UoMCwgWF9BWElTX0xF TkdUSC0xKSwKKyAgICAgIF07CisgICAgfSBlbHNlIHsKKyAgICAgIG5ld1N0YXRlW2xhYmVsXSA9 IFsKKyAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9uLmluY29taW5nW2xhYmVsXSAtIGFj dGlvbi5jb3VudGVyRGF0YVtsYWJlbF0gOiBhY3Rpb24uaW5jb21pbmdbbGFiZWxdLAorICAgICAg XTsKKyAgICB9CisgIH0pOworICByZXR1cm4gbmV3U3RhdGU7Cit9CisKK2NvbnN0IGNoYXJ0c0Rl ZmF1bHQgPSB7CisgICdtX3N0YXRzJzogeydUb3RhbCc6IFtdLCAnVXNlZCc6IFtdLCAnRnJlZSc6 IFtdfSwKKyAgJ3NtX3N0YXRzJzogeydUb3RhbCc6IFtdLCAnVXNlZCc6IFtdLCAnRnJlZSc6IFtd fSwKKyAgJ3BtdV9zdGF0cyc6IHt9LAorfTsKKworZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWVt b3J5KHsgc2lkLCBkaWQsIHNlcnZlckNvbmVuY3RlZCwgcGFnZVZpc2libGUsIGVuYWJsZVBvbGw9 dHJ1ZX0pIHsKKyAgY29uc3QgcmVmcmVzaE9uID0gdXNlUmVmKG51bGwpOworICAKKyAgY29uc3Qg W21lbW9yeVVzYWdlSW5mbywgbWVtb3J5VXNhZ2VJbmZvUmVkdWNlXSA9IHVzZVJlZHVjZXIoc3Rh dHNSZWR1Y2VyLCBjaGFydHNEZWZhdWx0WydtX3N0YXRzJ10pOworICBjb25zdCBbc3dhcE1lbW9y eVVzYWdlSW5mbywgc3dhcE1lbW9yeVVzYWdlSW5mb1JlZHVjZV0gPSB1c2VSZWR1Y2VyKHN0YXRz UmVkdWNlciwgY2hhcnRzRGVmYXVsdFsnc21fc3RhdHMnXSk7CisgIGNvbnN0IFtwcm9jZXNzTWVt b3J5VXNhZ2VTdGF0cywgc2V0UHJvY2Vzc01lbW9yeVVzYWdlU3RhdHNdID0gdXNlU3RhdGUoW10p OworCisgIGNvbnN0IFtjb3VudGVyRGF0YSwgc2V0Q291bnRlckRhdGFdID0gdXNlU3RhdGUoe30p OworCisgIGNvbnN0IFtwb2xsRGVsYXksIHNldFBvbGxEZWxheV0gPSB1c2VTdGF0ZSg1MDAwKTsK KyAgY29uc3QgdGFibGVIZWFkZXIgPSBbCisgICAgeworICAgICAgICBIZWFkZXI6ICdQSUQnLAor ICAgICAgICBhY2Nlc3NvcjogJ3BpZCcsCisgICAgICAgIHNvcnRhYmxlOiB0cnVlLAorICAgICAg ICByZXNpemFibGU6IHRydWUsCisgICAgICAgIGRpc2FibGVHbG9iYWxGaWx0ZXI6IGZhbHNlLAor ICAgIH0sCisgICAgeworICAgICAgICBIZWFkZXI6ICdOYW1lJywKKyAgICAgICAgYWNjZXNzb3I6 ICduYW1lJywKKyAgICAgICAgc29ydGFibGU6IHRydWUsCisgICAgICAgIHJlc2l6YWJsZTogdHJ1 ZSwKKyAgICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsCisgICAgfSwKKyAgICB7Cisg ICAgICAgIEhlYWRlcjogJ01lbW9yeSBVc2FnZScsCisgICAgICAgIGFjY2Vzc29yOiAnbWVtb3J5 X3VzYWdlJywKKyAgICAgICAgc29ydGFibGU6IHRydWUsCisgICAgICAgIHJlc2l6YWJsZTogdHJ1 ZSwKKyAgICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsCisgICAgfSwKKyAgICB7Cisg ICAgICBIZWFkZXI6ICdNZW1vcnkgQnl0ZXMnLAorICAgICAgYWNjZXNzb3I6ICdtZW1vcnlfYnl0 ZXMnLAorICAgICAgc29ydGFibGU6IHRydWUsCisgICAgICByZXNpemFibGU6IHRydWUsCisgICAg ICBkaXNhYmxlR2xvYmFsRmlsdGVyOiBmYWxzZSwKKyAgICB9LAorICBdOworICBjb25zdCBbZXJy b3JNc2csIHNldEVycm9yTXNnXSA9IHVzZVN0YXRlKG51bGwpOworICBjb25zdCBbY2hhcnREcmF3 bk9uY2UsIHNldENoYXJ0RHJhd25PbmNlXSA9IHVzZVN0YXRlKGZhbHNlKTsKKworICBjb25zdCBb cmVmcmVzaFByZWZlcmVuY2VzLCBzZXRSZWZyZXNoUHJlZmVyZW5jZXNdID0gdXNlU3RhdGUoeydt X3N0YXRzJzogNSwgJ3NtX3N0YXRzJzogNSwgJ3BtdV9zdGF0cyc6IDV9KTsKKworICB1c2VFZmZl Y3QoKCk9PnsKKyAgICAvKiBDaGFydHMgcmVuZGVyZWQgYXJlIG5vdCB2aXNpYmxlIHdoZW4sIHRo ZSBkYXNoYm9hcmQgaXMgaGlkZGVuIGJ1dCBsYXRlciB2aXNpYmxlICovCisgICAgaWYocGFnZVZp c2libGUgJiYgIWNoYXJ0RHJhd25PbmNlKSB7CisgICAgICBzZXRDaGFydERyYXduT25jZSh0cnVl KTsKKyAgICB9CisgIH0sIFtwYWdlVmlzaWJsZV0pOworCisgIHVzZUludGVydmFsKCgpPT57Cisg ICAgY29uc3QgY3VyckVwb2NoID0gZ2V0RXBvY2goKTsKKyAgICBpZihyZWZyZXNoT24uY3VycmVu dCA9PT0gbnVsbCkgeworICAgICAgbGV0IHRtcFJlZiA9IHt9OworICAgICAgT2JqZWN0LmtleXMo Y2hhcnRzRGVmYXVsdCkuZm9yRWFjaCgobmFtZSk9PnsKKyAgICAgICAgdG1wUmVmW25hbWVdID0g Y3VyckVwb2NoOworICAgICAgfSk7CisgICAgICByZWZyZXNoT24uY3VycmVudCA9IHRtcFJlZjsK KyAgICB9CisKKyAgICBsZXQgZ2V0Rm9yID0gW107CisgICAgT2JqZWN0LmtleXMoY2hhcnRzRGVm YXVsdCkuZm9yRWFjaCgobmFtZSk9PnsKKyAgICAgIGlmKGN1cnJFcG9jaCA+PSByZWZyZXNoT24u Y3VycmVudFtuYW1lXSkgeworICAgICAgICBnZXRGb3IucHVzaChuYW1lKTsKKyAgICAgICAgcmVm cmVzaE9uLmN1cnJlbnRbbmFtZV0gPSBjdXJyRXBvY2ggKyByZWZyZXNoUHJlZmVyZW5jZXNbbmFt ZV07CisgICAgICB9CisgICAgfSk7CisKKyAgICBsZXQgcGF0aCA9IGdldFN0YXRzVXJsKHNpZCwg ZGlkLCBnZXRGb3IpOworICAgIGlmICghcGFnZVZpc2libGUpeworICAgICAgcmV0dXJuOworICAg IH0KKyAgICBheGlvcy5nZXQocGF0aCkKKyAgICAgIC50aGVuKChyZXNwKT0+eworICAgICAgICBs ZXQgZGF0YSA9IHJlc3AuZGF0YTsKKyAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CisgICAgICAg IHNldEVycm9yTXNnKG51bGwpOworICAgICAgICBpZihkYXRhLmhhc093blByb3BlcnR5KCdtX3N0 YXRzJykpeworICAgICAgICAgIGxldCBuZXdfbV9zdGF0cyA9IHsKKyAgICAgICAgICAgICdUb3Rh bCc6IGRhdGFbJ21fc3RhdHMnXVsndG90YWxfbWVtb3J5J10/ZGF0YVsnbV9zdGF0cyddWyd0b3Rh bF9tZW1vcnknXTowLCAKKyAgICAgICAgICAgICdVc2VkJzogZGF0YVsnbV9zdGF0cyddWyd1c2Vk X21lbW9yeSddP2RhdGFbJ21fc3RhdHMnXVsndXNlZF9tZW1vcnknXTowLCAKKyAgICAgICAgICAg ICdGcmVlJzogZGF0YVsnbV9zdGF0cyddWydmcmVlX21lbW9yeSddP2RhdGFbJ21fc3RhdHMnXVsn ZnJlZV9tZW1vcnknXTowLCAKKyAgICAgICAgICB9OworICAgICAgICAgIG1lbW9yeVVzYWdlSW5m b1JlZHVjZSh7aW5jb21pbmc6IG5ld19tX3N0YXRzfSk7CisgICAgICAgIH0KKyAgICAgICAgCisg ICAgICAgIGlmKGRhdGEuaGFzT3duUHJvcGVydHkoJ3NtX3N0YXRzJykpeworICAgICAgICAgIGxl dCBuZXdfc21fc3RhdHMgPSB7CisgICAgICAgICAgICAnVG90YWwnOiBkYXRhWydzbV9zdGF0cydd Wydzd2FwX3RvdGFsJ10/ZGF0YVsnc21fc3RhdHMnXVsnc3dhcF90b3RhbCddOjAsIAorICAgICAg ICAgICAgJ1VzZWQnOiBkYXRhWydzbV9zdGF0cyddWydzd2FwX3VzZWQnXT9kYXRhWydzbV9zdGF0 cyddWydzd2FwX3VzZWQnXTowLCAKKyAgICAgICAgICAgICdGcmVlJzogZGF0YVsnc21fc3RhdHMn XVsnc3dhcF9mcmVlJ10/ZGF0YVsnc21fc3RhdHMnXVsnc3dhcF9mcmVlJ106MCwgCisgICAgICAg ICAgfTsKKyAgICAgICAgICBzd2FwTWVtb3J5VXNhZ2VJbmZvUmVkdWNlKHtpbmNvbWluZzogbmV3 X3NtX3N0YXRzfSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmKGRhdGEuaGFzT3du UHJvcGVydHkoJ3BtdV9zdGF0cycpKXsKKyAgICAgICAgICBsZXQgcG11X2luZm9fbGlzdCA9IFtd OworICAgICAgICAgIGNvbnN0IHBtdV9pbmZvX29iaiA9IGRhdGFbJ3BtdV9zdGF0cyddOworICAg ICAgICAgIGZvciAoY29uc3Qga2V5IGluIHBtdV9pbmZvX29iaikgeworICAgICAgICAgICAgcG11 X2luZm9fbGlzdC5wdXNoKHsgaWNvbjogJycsIHBpZDogcG11X2luZm9fb2JqW2tleV1bJ3BpZCdd LCBuYW1lOiBwbXVfaW5mb19vYmpba2V5XVsnbmFtZSddLCBtZW1vcnlfdXNhZ2U6IHBtdV9pbmZv X29ialtrZXldWydtZW1vcnlfdXNhZ2UnXSwgbWVtb3J5X2J5dGVzOiBwbXVfaW5mb19vYmpba2V5 XVsnbWVtb3J5X2J5dGVzJ10gfSk7CisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAg IHNldFByb2Nlc3NNZW1vcnlVc2FnZVN0YXRzKHBtdV9pbmZvX2xpc3QpOworICAgICAgICB9CisK KyAgICAgICAgc2V0Q291bnRlckRhdGEoKHByZXZDb3VudGVyRGF0YSk9PnsKKyAgICAgICAgICBy ZXR1cm4geworICAgICAgICAgICAgLi4ucHJldkNvdW50ZXJEYXRhLAorICAgICAgICAgICAgLi4u ZGF0YSwKKyAgICAgICAgICB9OworICAgICAgICB9KTsKKyAgICAgIH0pCisgICAgICAuY2F0Y2go KGVycm9yKT0+eworICAgICAgICBpZighZXJyb3JNc2cpIHsKKyAgICAgICAgICBtZW1vcnlVc2Fn ZUluZm9SZWR1Y2Uoe3Jlc2V0OmNoYXJ0c0RlZmF1bHRbJ21fc3RhdHMnXX0pOworICAgICAgICAg IHN3YXBNZW1vcnlVc2FnZUluZm9SZWR1Y2Uoe3Jlc2V0OmNoYXJ0c0RlZmF1bHRbJ3NtX3N0YXRz J119KTsKKyAgICAgICAgICBzZXRDb3VudGVyRGF0YSh7fSk7CisgICAgICAgICAgaWYoZXJyb3Iu cmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQy OCkgeworICAgICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdQbGVhc2UgY29ubmVjdCB0 byB0aGUgc2VsZWN0ZWQgc2VydmVyIHRvIHZpZXcgdGhlIGdyYXBoLicpKTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ0FuIGVycm9yIG9j Y3VycmVkIHdoaWxzdCByZW5kZXJpbmcgdGhlIGdyYXBoLicpKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICB9IGVsc2UgaWYoZXJyb3IucmVxdWVzdCkgeworICAgICAgICAgICAgc2V0RXJyb3JN c2coZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byB0aGUgc2VydmVyIG9yIHRoZSBjb25uZWN0aW9u IHRvIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpKTsKKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7Cisg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgfSwgZW5hYmxlUG9sbCA/IHBvbGxE ZWxheSA6IC0xKTsKKworICByZXR1cm4gKAorICAgIDw+CisgICAgICA8ZGl2IGRhdGEtdGVzdGlk PSdncmFwaC1wb2xsLWRlbGF5JyBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319Pntwb2xsRGVsYXl9 PC9kaXY+CisgICAgICB7Y2hhcnREcmF3bk9uY2UgJiYKKyAgICAgICAgPE1lbW9yeVdyYXBwZXIK KyAgICAgICAgICBtZW1vcnlVc2FnZUluZm89e3RyYW5zZm9ybURhdGEobWVtb3J5VXNhZ2VJbmZv LCByZWZyZXNoUHJlZmVyZW5jZXNbJ21fc3RhdHMnXSl9CisgICAgICAgICAgc3dhcE1lbW9yeVVz YWdlSW5mbz17dHJhbnNmb3JtRGF0YShzd2FwTWVtb3J5VXNhZ2VJbmZvLCByZWZyZXNoUHJlZmVy ZW5jZXNbJ3NtX3N0YXRzJ10pfQorICAgICAgICAgIHByb2Nlc3NNZW1vcnlVc2FnZVN0YXRzPXtw cm9jZXNzTWVtb3J5VXNhZ2VTdGF0c30KKyAgICAgICAgICB0YWJsZUhlYWRlcj17dGFibGVIZWFk ZXJ9CisgICAgICAgICAgZXJyb3JNc2c9e2Vycm9yTXNnfQorICAgICAgICAgIHNob3dUb29sdGlw PXt0cnVlfQorICAgICAgICAgIHNob3dEYXRhUG9pbnRzPXtmYWxzZX0KKyAgICAgICAgICBsaW5l Qm9yZGVyV2lkdGg9ezF9CisgICAgICAgICAgaXNEYXRhYmFzZT17ZGlkID4gMH0KKyAgICAgICAg ICBpc1Rlc3Q9e2ZhbHNlfQorICAgICAgICAvPgorICAgICAgfQorICAgIDwvPgorICApOworfQor CitNZW1vcnkucHJvcFR5cGVzID0geworICBzaWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BU eXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksCisg IGRpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQ cm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSwKKyAgc2VydmVyQ29ubmVjdGVkOiBQcm9wVHlw ZXMuYm9vbCwKKyAgcGFnZVZpc2libGU6IFByb3BUeXBlcy5ib29sLAorICBlbmFibGVQb2xsOiBQ cm9wVHlwZXMuYm9vbCwKK307CisKK2V4cG9ydCBmdW5jdGlvbiBNZW1vcnlXcmFwcGVyKHByb3Bz KSB7CisgIGNvbnN0IGNsYXNzZXMgPSB1c2VTdHlsZXMoKTsKKyAgY29uc3Qgb3B0aW9ucyA9IHVz ZU1lbW8oKCk9Pih7CisgICAgc2hvd0RhdGFQb2ludHM6IHByb3BzLnNob3dEYXRhUG9pbnRzLAor ICAgIHNob3dUb29sdGlwOiBwcm9wcy5zaG93VG9vbHRpcCwKKyAgICBsaW5lQm9yZGVyV2lkdGg6 IHByb3BzLmxpbmVCb3JkZXJXaWR0aCwKKyAgfSksIFtwcm9wcy5zaG93VG9vbHRpcCwgcHJvcHMu c2hvd0RhdGFQb2ludHMsIHByb3BzLmxpbmVCb3JkZXJXaWR0aF0pOworICByZXR1cm4gKAorICAg IDw+CisgICAgICA8R3JpZCBjb250YWluZXIgc3BhY2luZz17MX0gY2xhc3NOYW1lPXtjbGFzc2Vz LmNvbnRhaW5lcn0+CisgICAgICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9PgorICAgICAgICAgIDxkaXYg Y2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQoJ01lbW9yeScpfTwv ZGl2PgorICAgICAgICAgIDxDaGFydENvbnRhaW5lciBpZD0nbS1ncmFwaCcgdGl0bGU9e2dldHRl eHQoJycpfSBkYXRhc2V0cz17cHJvcHMubWVtb3J5VXNhZ2VJbmZvLmRhdGFzZXRzfSAgZXJyb3JN c2c9e3Byb3BzLmVycm9yTXNnfSBpc1Rlc3Q9e3Byb3BzLmlzVGVzdH0+CisgICAgICAgICAgICA8 U3RyZWFtaW5nQ2hhcnQgZGF0YT17cHJvcHMubWVtb3J5VXNhZ2VJbmZvfSBkYXRhUG9pbnRTaXpl PXtEQVRBX1BPSU5UX1NJWkV9IHhSYW5nZT17WF9BWElTX0xFTkdUSH0gb3B0aW9ucz17b3B0aW9u c30gLz4KKyAgICAgICAgICA8L0NoYXJ0Q29udGFpbmVyPgorICAgICAgICA8L0dyaWQ+CisgICAg ICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9PgorICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2Vz LmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQoJ1N3YXAgTWVtb3J5Jyl9PC9kaXY+CisgICAgICAg ICAgPENoYXJ0Q29udGFpbmVyIGlkPSdzbS1ncmFwaCcgdGl0bGU9e2dldHRleHQoJycpfSBkYXRh c2V0cz17cHJvcHMuc3dhcE1lbW9yeVVzYWdlSW5mby5kYXRhc2V0c30gIGVycm9yTXNnPXtwcm9w cy5lcnJvck1zZ30gaXNUZXN0PXtwcm9wcy5pc1Rlc3R9PgorICAgICAgICAgICAgPFN0cmVhbWlu Z0NoYXJ0IGRhdGE9e3Byb3BzLnN3YXBNZW1vcnlVc2FnZUluZm99IGRhdGFQb2ludFNpemU9e0RB VEFfUE9JTlRfU0laRX0geFJhbmdlPXtYX0FYSVNfTEVOR1RIfSBvcHRpb25zPXtvcHRpb25zfSAv PgorICAgICAgICAgIDwvQ2hhcnRDb250YWluZXI+CisgICAgICAgIDwvR3JpZD4KKyAgICAgIDwv R3JpZD4KKyAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9e2NsYXNz ZXMuZml4ZWRDb250YWluZXJ9PgorICAgICAgICA8UGdUYWJsZQorICAgICAgICAgIGNsYXNzTmFt ZT17Y2xhc3Nlcy5hdXRvUmVzaXplcn0KKyAgICAgICAgICBjb2x1bW5zPXtwcm9wcy50YWJsZUhl YWRlcn0KKyAgICAgICAgICBkYXRhPXtwcm9wcy5wcm9jZXNzTWVtb3J5VXNhZ2VTdGF0c30KKyAg ICAgICAgICBtc2c9e3Byb3BzLmVycm9yTXNnfQorICAgICAgICAgIHR5cGU9eydwYW5lbCd9Cisg ICAgICAgID48L1BnVGFibGU+CisgICAgICA8L0dyaWQ+CisgICAgPC8+CisgICk7Cit9CisKK2Nv bnN0IHByb3BUeXBlU3RhdHMgPSBQcm9wVHlwZXMuc2hhcGUoeworICBkYXRhc2V0czogUHJvcFR5 cGVzLmFycmF5LAorICByZWZyZXNoUmF0ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLAor fSk7CitNZW1vcnlXcmFwcGVyLnByb3BUeXBlcyA9IHsKKyAgbWVtb3J5VXNhZ2VJbmZvOiBwcm9w VHlwZVN0YXRzLmlzUmVxdWlyZWQsCisgIHN3YXBNZW1vcnlVc2FnZUluZm86IHByb3BUeXBlU3Rh dHMuaXNSZXF1aXJlZCwKKyAgcHJvY2Vzc01lbW9yeVVzYWdlU3RhdHM6IFByb3BUeXBlcy5hcnJh eS5pc1JlcXVpcmVkLAorICB0YWJsZUhlYWRlcjogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQs CisgIGVycm9yTXNnOiBQcm9wVHlwZXMuc3RyaW5nLAorICBzaG93VG9vbHRpcDogUHJvcFR5cGVz LmJvb2wuaXNSZXF1aXJlZCwKKyAgc2hvd0RhdGFQb2ludHM6IFByb3BUeXBlcy5ib29sLmlzUmVx dWlyZWQsCisgIGxpbmVCb3JkZXJXaWR0aDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLAor ICBpc0RhdGFiYXNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLAorICBpc1Rlc3Q6IFByb3BU eXBlcy5ib29sLAorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL1N1bW1hcnkuanN4IGIvd2ViL3BnYWRtaW4v ZGFzaGJvYXJkL3N0YXRpYy9qcy9TdW1tYXJ5LmpzeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAuLmNiZmNlZTRkYgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Rh c2hib2FyZC9zdGF0aWMvanMvU3VtbWFyeS5qc3gKQEAgLTAsMCArMSwzNjYgQEAKK2ltcG9ydCBS ZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVJlZHVjZXIsIHVzZU1lbW8g fSBmcm9tICdyZWFjdCc7CitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOwor aW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJzsKK2ltcG9ydCB7IG1ha2VTdHlsZXMg fSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnOworaW1wb3J0IHVybF9mb3IgZnJvbSAn c291cmNlcy91cmxfZm9yJzsKK2ltcG9ydCBnZXRBcGlJbnN0YW5jZSBmcm9tICdzb3VyY2VzL2Fw aV9pbnN0YW5jZSc7CitpbXBvcnQge2dldEVwb2NofSBmcm9tICdzb3VyY2VzL3V0aWxzJzsKK2lt cG9ydCB7Q2hhcnRDb250YWluZXJ9IGZyb20gJy4vRGFzaGJvYXJkJzsKK2ltcG9ydCB7IEdyaWQg fSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZSc7CitpbXBvcnQgeyBEQVRBX1BPSU5UX1NJWkUgfSBm cm9tICdzb3VyY2VzL2NoYXJ0anMnOworaW1wb3J0IFN0cmVhbWluZ0NoYXJ0IGZyb20gJy4uLy4u Ly4uL3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQvU3RyZWFtaW5nQ2hhcnQnOworaW1wb3J0 IERvbnV0Q2hhcnQgZnJvbSAnLi4vLi4vLi4vc3RhdGljL2pzL2NvbXBvbmVudHMvUGdDaGFydC9E b251dENoYXJ0JzsKK2ltcG9ydCB7dXNlSW50ZXJ2YWx9IGZyb20gJ3NvdXJjZXMvY3VzdG9tX2hv b2tzJzsKK2ltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7CisKK2V4cG9ydCBjb25zdCBYX0FYSVNf TEVOR1RIID0gNzU7CisKK2NvbnN0IHVzZVN0eWxlcyA9IG1ha2VTdHlsZXMoKHRoZW1lKSA9PiAo eworICBhdXRvUmVzaXplcjogeworICAgIGhlaWdodDogJzEwMCUgIWltcG9ydGFudCcsCisgICAg d2lkdGg6ICcxMDAlICFpbXBvcnRhbnQnLAorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUu Z3JleVs0MDBdLAorICAgIHBhZGRpbmc6ICc3LjVweCcsCisgICAgb3ZlcmZsb3dYOiAnYXV0byAh aW1wb3J0YW50JywKKyAgICBvdmVyZmxvd1k6ICdoaWRkZW4gIWltcG9ydGFudCcsCisgICAgbWlu SGVpZ2h0OiAnMTAwJScsCisgICAgbWluV2lkdGg6ICcxMDAlJywKKyAgfSwKKyAgdGFibGU6IHsK KyAgICB3aWR0aDogJzEwMCUnLAorICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUub3RoZXJWYXJz LnRhYmxlQmcsCisgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYigyMjEsIDIyNCwgMjMwKScsCisg IH0sCisgIHRhYmxlVmFsOiB7CisgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYigyMjEsIDIyNCwg MjMwKSAhaW1wb3J0YW50JywKKyAgICBwYWRkaW5nOiAnMTBweCAhaW1wb3J0YW50JywKKyAgfSwK KyAgY29udGFpbmVyOiB7CisgICAgaGVpZ2h0OiAnYXV0bycsCisgICAgYmFja2dyb3VuZDogdGhl bWUucGFsZXR0ZS5ncmV5WzIwMF0sCisgICAgcGFkZGluZzogJzEwcHgnLAorICAgIG1hcmdpbkJv dHRvbTogJzMwcHgnLAorICB9LAorICBjb250YWluZXJIZWFkZXI6IHsKKyAgICBmb250U2l6ZTog JzE2cHgnLAorICAgIGZvbnRXZWlnaHQ6ICdib2xkJywKKyAgICBtYXJnaW5Cb3R0b206ICc1cHgn LAorICB9LAorfSkpOworCitleHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShsYWJlbHMsIHJl ZnJlc2hSYXRlKSB7CisgIGNvbnN0IGNvbG9ycyA9IFsnI0ZGNjM4NCcsJyMzNkEyRUInLCcjRkZD RTU2JywnIzRCQzBDMCcsJyM5OTY2RkYnLCcjRkY5RjQwJywnIzhENkU2MycsJyMyMTk2RjMnLCcj RkZFQjNCJywnIzlDMjdCMCcsJyMwMEJDRDQnLCcjQ0REQzM5J107CisgIGxldCBkYXRhc2V0cyA9 IE9iamVjdC5rZXlzKGxhYmVscykubWFwKChsYWJlbCwgaSk9PnsKKyAgICByZXR1cm4geworICAg ICAgbGFiZWw6IGxhYmVsLAorICAgICAgZGF0YTogbGFiZWxzW2xhYmVsXSB8fCBbXSwKKyAgICAg IGJvcmRlckNvbG9yOiBjb2xvcnNbaV0sCisgICAgICBwb2ludEhpdFJhZGl1czogREFUQV9QT0lO VF9TSVpFLAorICAgIH07CisgIH0pIHx8IFtdOworCisgIHJldHVybiB7CisgICAgZGF0YXNldHM6 IGRhdGFzZXRzLAorICAgIHJlZnJlc2hSYXRlOiByZWZyZXNoUmF0ZSwKKyAgfTsKK30KKworLyog VVJMIGZvciBmZXRjaGluZyBncmFwaHMgZGF0YSAqLworZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRz VXJsKHNpZD0tMSwgZGlkPS0xLCBjaGFydF9uYW1lcz1bXSkgeworICBsZXQgYmFzZV91cmwgPSB1 cmxfZm9yKCdkYXNoYm9hcmQuc3lzdGVtX3N0YXRpc3RpY3MnKTsKKyAgYmFzZV91cmwgKz0gJy8n ICsgc2lkOworICBiYXNlX3VybCArPSAoZGlkID4gMCkgPyAoJy8nICsgZGlkKSA6ICcnOworICBi YXNlX3VybCArPSAnP2NoYXJ0X25hbWVzPScgKyBjaGFydF9uYW1lcy5qb2luKCcsJyk7CisgIAor ICByZXR1cm4gYmFzZV91cmw7Cit9CisKKy8qIFRoaXMgd2lsbCBwcm9jZXNzIGluY29taW5nIGNo YXJ0cyBkYXRhIGFkZCBpdCB0aGUgcHJldmlvdXMgY2hhcnRzCisgKiBkYXRhIHRvIGdldCB0aGUg bmV3IHN0YXRlLgorICovCitleHBvcnQgZnVuY3Rpb24gc3RhdHNSZWR1Y2VyKHN0YXRlLCBhY3Rp b24pIHsKKworICBpZihhY3Rpb24ucmVzZXQpIHsKKyAgICByZXR1cm4gYWN0aW9uLnJlc2V0Owor ICB9CisKKyAgaWYoIWFjdGlvbi5pbmNvbWluZykgeworICAgIHJldHVybiBzdGF0ZTsKKyAgfQor CisgIGlmKCFhY3Rpb24uY291bnRlckRhdGEpIHsKKyAgICBhY3Rpb24uY291bnRlckRhdGEgPSBh Y3Rpb24uaW5jb21pbmc7CisgIH0KKworICBsZXQgbmV3U3RhdGUgPSB7fTsKKyAgT2JqZWN0Lmtl eXMoYWN0aW9uLmluY29taW5nKS5mb3JFYWNoKGxhYmVsID0+IHsKKyAgICBpZihzdGF0ZVtsYWJl bF0pIHsKKyAgICAgIG5ld1N0YXRlW2xhYmVsXSA9IFsKKyAgICAgICAgYWN0aW9uLmNvdW50ZXIg PyAgYWN0aW9uLmluY29taW5nW2xhYmVsXSAtIGFjdGlvbi5jb3VudGVyRGF0YVtsYWJlbF0gOiBh Y3Rpb24uaW5jb21pbmdbbGFiZWxdLAorICAgICAgICAuLi5zdGF0ZVtsYWJlbF0uc2xpY2UoMCwg WF9BWElTX0xFTkdUSC0xKSwKKyAgICAgIF07CisgICAgfSBlbHNlIHsKKyAgICAgIG5ld1N0YXRl W2xhYmVsXSA9IFsKKyAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9uLmluY29taW5nW2xh YmVsXSAtIGFjdGlvbi5jb3VudGVyRGF0YVtsYWJlbF0gOiBhY3Rpb24uaW5jb21pbmdbbGFiZWxd LAorICAgICAgXTsKKyAgICB9CisgIH0pOworICByZXR1cm4gbmV3U3RhdGU7Cit9CisKK2NvbnN0 IGNoYXJ0c0RlZmF1bHQgPSB7CisgICdocGNfc3RhdHMnOiB7J0hhbmRsZSc6IFtdLCAnUHJvY2Vz cyc6IFtdfSwKK307CisKK2NvbnN0IFN1bW1hcnlUYWJsZSA9ICh7IGRhdGEgfSkgPT4geworICBj b25zdCBjbGFzc2VzID0gdXNlU3R5bGVzKCk7CisgIHJldHVybiAoCisgICAgPHRhYmxlIGNsYXNz TmFtZT17Y2xhc3Nlcy50YWJsZX0+CisgICAgICA8dGhlYWQ+CisgICAgICAgIDx0cj4KKyAgICAg ICAgICA8dGggY2xhc3NOYW1lPXtjbGFzc2VzLnRhYmxlVmFsfT5Qcm9wZXJ0eTwvdGg+CisgICAg ICAgICAgPHRoIGNsYXNzTmFtZT17Y2xhc3Nlcy50YWJsZVZhbH0+VmFsdWU8L3RoPgorICAgICAg ICA8L3RyPgorICAgICAgPC90aGVhZD4KKyAgICAgIDx0Ym9keT4KKyAgICAgICAge2RhdGEubWFw KChpdGVtLCBpbmRleCkgPT4gKAorICAgICAgICAgIDx0ciBjbGFzc05hbWU9e2NsYXNzZXMudGFi bGVWYWx9IGtleT17aW5kZXh9PgorICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y2xhc3Nlcy50 YWJsZVZhbH0+e2l0ZW0ubmFtZX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y2xh c3Nlcy50YWJsZVZhbH0+e2l0ZW0udmFsdWV9PC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAg ICApKX0KKyAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKyAgKTsKK30KKworZXhwb3J0IGRl ZmF1bHQgZnVuY3Rpb24gU3VtbWFyeSh7IHNpZCwgZGlkLCBzZXJ2ZXJDb25lbmN0ZWQsIHBhZ2VW aXNpYmxlLCBlbmFibGVQb2xsPXRydWV9KSB7CisgIGNvbnN0IHJlZnJlc2hPbiA9IHVzZVJlZihu dWxsKTsKKyAgCisgIGNvbnN0IFtwcm9jZXNzSGFuZGxlQ291bnQsIHByb2Nlc3NIYW5kbGVDb3Vu dFJlZHVjZV0gPSB1c2VSZWR1Y2VyKHN0YXRzUmVkdWNlciwgY2hhcnRzRGVmYXVsdFsnaHBjX3N0 YXRzJ10pOworICBjb25zdCBbb3NTdGF0cywgc2V0T3NTdGF0c10gPSB1c2VTdGF0ZShbXSk7Cisg IGNvbnN0IFtjcHVTdGF0cywgc2V0Q3B1U3RhdHNdID0gdXNlU3RhdGUoW10pOworICBjb25zdCBb cHJvY2Vzc0luZm9TdGF0cywgc2V0UHJvY2Vzc0luZm9TdGF0c10gPSB1c2VTdGF0ZSh7J1J1bm5p bmcnOiA0LCAnU2xlZXBpbmcnOiAyLCAnU3RvcHBlZCc6IDEsICdab21iaWUnOiAyfSk7CisKKyAg Y29uc3QgW2NvdW50ZXJEYXRhLCBzZXRDb3VudGVyRGF0YV0gPSB1c2VTdGF0ZSh7fSk7CisKKyAg Y29uc3QgW3BvbGxEZWxheSwgc2V0UG9sbERlbGF5XSA9IHVzZVN0YXRlKDUwMDApOworICBjb25z dCBbbG9uZ1BvbGxEZWxheSwgc2V0TG9uZ1BvbGxEZWxheV0gPSB1c2VTdGF0ZSgxODAwMDApOwor ICBjb25zdCBbZXJyb3JNc2csIHNldEVycm9yTXNnXSA9IHVzZVN0YXRlKG51bGwpOworCisgIGNv bnN0IHRhYmxlSGVhZGVyID0gWworICAgIHsKKyAgICAgIEhlYWRlcjogJ1Byb3BlcnR5JywKKyAg ICAgIGFjY2Vzc29yOiAnbmFtZScsCisgICAgICBzb3J0YWJsZTogdHJ1ZSwKKyAgICAgIHJlc2l6 YWJsZTogdHJ1ZSwKKyAgICAgIGRpc2FibGVHbG9iYWxGaWx0ZXI6IGZhbHNlLAorICAgIH0sCisg ICAgeworICAgICAgSGVhZGVyOiAnVmFsdWUnLAorICAgICAgYWNjZXNzb3I6ICd2YWx1ZScsCisg ICAgICBzb3J0YWJsZTogdHJ1ZSwKKyAgICAgIHJlc2l6YWJsZTogdHJ1ZSwKKyAgICAgIGRpc2Fi bGVHbG9iYWxGaWx0ZXI6IGZhbHNlLAorICAgIH0sCisgIF07CisKKyAgdXNlRWZmZWN0KCgpID0+ IHsKKyAgICB0cnkgeworICAgICAgLy8gRmV0Y2ggdGhlIGxhdGVzdCBkYXRhIHBvaW50IGZyb20g dGhlIEFQSSBlbmRwb2ludAorICAgICAgbGV0IHVybDsKKyAgICAgIHVybCA9IHVybF9mb3IoJ2Rh c2hib2FyZC5zeXN0ZW1fc3RhdGlzdGljcycpOworICAgICAgdXJsICs9ICcvJyArIHNpZDsKKyAg ICAgIHVybCArPSBkaWQgPiAwID8gJy8nICsgZGlkIDogJyc7CisgICAgICB1cmwgKz0gJz9jaGFy dF9uYW1lcz0nICsgJ3BnX3N5c19vc19pbmZvLHBnX3N5c19jcHVfaW5mbyc7CisgICAgICBjb25z dCBhcGkgPSBnZXRBcGlJbnN0YW5jZSgpOworICAgICAgYXBpKHsKKyAgICAgICAgdXJsOiB1cmws CisgICAgICAgIHR5cGU6ICdHRVQnLAorICAgICAgfSkKKyAgICAgICAgLnRoZW4oKHJlcykgPT4g eworICAgICAgICAgIGxldCBkYXRhID0gcmVzLmRhdGE7CisKKyAgICAgICAgICBjb25zdCBvc19p bmZvX29iaiA9IGRhdGFbJ3BnX3N5c19vc19pbmZvJ107CisgICAgICAgICAgbGV0IG9zX2luZm9f bGlzdCA9IFsKKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdOYW1lJywgdmFsdWU6IG9z X2luZm9fb2JqWyduYW1lJ10gfSwKKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdWZXJz aW9uJywgdmFsdWU6IG9zX2luZm9fb2JqWyd2ZXJzaW9uJ10gfSwKKyAgICAgICAgICAgIHsgaWNv bjogJycsIG5hbWU6ICdIb3N0IG5hbWUnLCB2YWx1ZTogb3NfaW5mb19vYmpbJ2hvc3RfbmFtZSdd IH0sCisgICAgICAgICAgICB7IGljb246ICcnLCBuYW1lOiAnRG9tYWluIG5hbWUnLCB2YWx1ZTog b3NfaW5mb19vYmpbJ2RvbWFpbl9uYW1lJ10gfSwKKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5h bWU6ICdBcmNoaXRlY3R1cmUnLCB2YWx1ZTogb3NfaW5mb19vYmpbJ2FyY2hpdGVjdHVyZSddIH0s CisgICAgICAgICAgICB7IGljb246ICcnLCBuYW1lOiAnT3MgdXAgc2luY2Ugc2Vjb25kcycsIHZh bHVlOiBvc19pbmZvX29ialsnb3NfdXBfc2luY2Vfc2Vjb25kcyddIH0sCisgICAgICAgICAgXTsK KyAgICAgICAgICBzZXRPc1N0YXRzKG9zX2luZm9fbGlzdCk7CisKKyAgICAgICAgICBjb25zdCBj cHVfaW5mb19vYmogPSBkYXRhWydwZ19zeXNfY3B1X2luZm8nXTsKKyAgICAgICAgICBsZXQgY3B1 X2luZm9fbGlzdCA9IFsKKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdWZW5kb3InLCB2 YWx1ZTogY3B1X2luZm9fb2JqWyd2ZW5kb3InXSB9LAorICAgICAgICAgICAgeyBpY29uOiAnJywg bmFtZTogJ0Rlc2NyaXB0aW9uJywgdmFsdWU6IGNwdV9pbmZvX29ialsnZGVzY3JpcHRpb24nXSB9 LAorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ01vZGVsIG5hbWUnLCB2YWx1ZTogY3B1 X2luZm9fb2JqWydtb2RlbF9uYW1lJ10gfSwKKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6 ICdObyBvZiBjb3JlcycsIHZhbHVlOiBjcHVfaW5mb19vYmpbJ25vX29mX2NvcmVzJ10gfSwKKyAg ICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdBcmNoaXRlY3R1cmUnLCB2YWx1ZTogY3B1X2lu Zm9fb2JqWydhcmNoaXRlY3R1cmUnXSB9LAorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTog J0Nsb2NrIHNwZWVkIEh6JywgdmFsdWU6IGNwdV9pbmZvX29ialsnY2xvY2tfc3BlZWRfaHonXSB9 LAorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ0wxIGRjYWNoZSBzaXplJywgdmFsdWU6 IGNwdV9pbmZvX29ialsnbDFkY2FjaGVfc2l6ZSddIH0sCisgICAgICAgICAgICB7IGljb246ICcn LCBuYW1lOiAnTDEgaWNhY2hlIHNpemUnLCB2YWx1ZTogY3B1X2luZm9fb2JqWydsMWljYWNoZV9z aXplJ10gfSwKKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdMMiBjYWNoZSBzaXplJywg dmFsdWU6IGNwdV9pbmZvX29ialsnbDJjYWNoZV9zaXplJ10gfSwKKyAgICAgICAgICAgIHsgaWNv bjogJycsIG5hbWU6ICdMMyBjYWNoZSBzaXplJywgdmFsdWU6IGNwdV9pbmZvX29ialsnbDNjYWNo ZV9zaXplJ10gfSwKKyAgICAgICAgICBdOworICAgICAgICAgIHNldENwdVN0YXRzKGNwdV9pbmZv X2xpc3QpOworCisgICAgICAgICAgc2V0RXJyb3JNc2cobnVsbCk7CisgICAgICAgIH0pCisgICAg ICAgIC5jYXRjaCgoZXJyb3IpID0+IHsKKyAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBm ZXRjaGluZyBkYXRhOicsIGVycm9yKTsKKyAgICAgICAgfSk7CisgICAgfSBjYXRjaCAoZXJyb3Ip IHsKKyAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRhdGE6JywgZXJyb3IpOwor ICAgIH0KKyAgfSwgW3NpZCwgZGlkLCBlbmFibGVQb2xsLCBwYWdlVmlzaWJsZV0pOworCisgIHVz ZUludGVydmFsKCgpPT57CisgICAgY29uc3QgY3VyckVwb2NoID0gZ2V0RXBvY2goKTsKKyAgICBp ZihyZWZyZXNoT24uY3VycmVudCA9PT0gbnVsbCkgeworICAgICAgbGV0IHRtcFJlZiA9IHt9Owor ICAgICAgT2JqZWN0LmtleXMoY2hhcnRzRGVmYXVsdCkuZm9yRWFjaCgobmFtZSk9PnsKKyAgICAg ICAgdG1wUmVmW25hbWVdID0gY3VyckVwb2NoOworICAgICAgfSk7CisgICAgICByZWZyZXNoT24u Y3VycmVudCA9IHRtcFJlZjsKKyAgICB9CisKKyAgICBsZXQgZ2V0Rm9yID0gW107CisgICAgT2Jq ZWN0LmtleXMoY2hhcnRzRGVmYXVsdCkuZm9yRWFjaCgobmFtZSk9PnsKKyAgICAgIGlmKGN1cnJF cG9jaCA+PSByZWZyZXNoT24uY3VycmVudFtuYW1lXSkgeworICAgICAgICBnZXRGb3IucHVzaChu YW1lKTsKKyAgICAgICAgcmVmcmVzaE9uLmN1cnJlbnRbbmFtZV0gPSBjdXJyRXBvY2ggKyA1Owor ICAgICAgfQorICAgIH0pOworCisgICAgbGV0IHBhdGggPSBnZXRTdGF0c1VybChzaWQsIGRpZCwg Z2V0Rm9yKTsKKyAgICBpZiAoIXBhZ2VWaXNpYmxlKXsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg ICAgYXhpb3MuZ2V0KHBhdGgpCisgICAgICAudGhlbigocmVzcCk9PnsKKyAgICAgICAgbGV0IGRh dGEgPSByZXNwLmRhdGE7CisgICAgICAgIHNldEVycm9yTXNnKG51bGwpOworICAgICAgICBwcm9j ZXNzSGFuZGxlQ291bnRSZWR1Y2Uoe2luY29taW5nOiBkYXRhWydocGNfc3RhdHMnXX0pOworCisg ICAgICAgIHNldENvdW50ZXJEYXRhKChwcmV2Q291bnRlckRhdGEpPT57CisgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgIC4uLnByZXZDb3VudGVyRGF0YSwKKyAgICAgICAgICAgIC4uLmRh dGEsCisgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgICB9KQorICAgICAgLmNhdGNoKChl cnJvcik9PnsKKyAgICAgICAgaWYoIWVycm9yTXNnKSB7CisgICAgICAgICAgcHJvY2Vzc0hhbmRs ZUNvdW50UmVkdWNlKHtyZXNldDpjaGFydHNEZWZhdWx0WydocGNfc3RhdHMnXX0pOworICAgICAg ICAgIHNldENvdW50ZXJEYXRhKHt9KTsKKyAgICAgICAgICBpZihlcnJvci5yZXNwb25zZSkgewor ICAgICAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDI4KSB7CisgICAgICAg ICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ1BsZWFzZSBjb25uZWN0IHRvIHRoZSBzZWxlY3Rl ZCBzZXJ2ZXIgdG8gdmlldyB0aGUgZ3JhcGguJykpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgc2V0RXJyb3JNc2coZ2V0dGV4dCgnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbHN0 IHJlbmRlcmluZyB0aGUgZ3JhcGguJykpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxz ZSBpZihlcnJvci5yZXF1ZXN0KSB7CisgICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdO b3QgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZl ciBoYXMgYmVlbiBjbG9zZWQuJykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKKyAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgIH0pOworICB9LCBlbmFibGVQb2xsID8gcG9sbERlbGF5IDogLTEpOwor CisgIHVzZUludGVydmFsKCgpPT57CisgICAgbGV0IHVybDsKKyAgICB1cmwgPSB1cmxfZm9yKCdk YXNoYm9hcmQuc3lzdGVtX3N0YXRpc3RpY3MnKTsKKyAgICB1cmwgKz0gJy8nICsgc2lkOworICAg IHVybCArPSBkaWQgPiAwID8gJy8nICsgZGlkIDogJyc7CisgICAgdXJsICs9ICc/Y2hhcnRfbmFt ZXM9JyArICdwaV9zdGF0cyc7CisgICAgLy8gYXhpb3MuZ2V0KHVybCkKKyAgICAvLyAgIC50aGVu KChyZXNwKT0+eworICAgIC8vICAgICBsZXQgZGF0YSA9IHJlc3AuZGF0YTsKKyAgICAvLyAgICAg Y29uc29sZS5sb2coInBpIGRhdGE6ICIsIGRhdGEpOworICAgIC8vICAgfSkKKyAgICAvLyAgIC5j YXRjaCgoZXJyb3IpPT57CisgICAgLy8gICAgIGlmKCFlcnJvck1zZykgeworICAgIC8vICAgICAg IGlmKGVycm9yLnJlc3BvbnNlKSB7CisgICAgLy8gICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2Uu c3RhdHVzID09PSA0MjgpIHsKKyAgICAvLyAgICAgICAgICAgc2V0RXJyb3JNc2coZ2V0dGV4dCgn UGxlYXNlIGNvbm5lY3QgdG8gdGhlIHNlbGVjdGVkIHNlcnZlciB0byB2aWV3IHRoZSBncmFwaC4n KSk7CisgICAgLy8gICAgICAgICB9IGVsc2UgeworICAgIC8vICAgICAgICAgICBzZXRFcnJvck1z ZyhnZXR0ZXh0KCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsc3QgcmVuZGVyaW5nIHRoZSBncmFwaC4n KSk7CisgICAgLy8gICAgICAgICB9CisgICAgLy8gICAgICAgfSBlbHNlIGlmKGVycm9yLnJlcXVl c3QpIHsKKyAgICAvLyAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ05vdCBjb25uZWN0ZWQg dG8gdGhlIHNlcnZlciBvciB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhhcyBiZWVuIGNs b3NlZC4nKSk7CisgICAgLy8gICAgICAgICByZXR1cm47CisgICAgLy8gICAgICAgfSBlbHNlIHsK KyAgICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOworICAgIC8vICAgICAgIH0KKyAg ICAvLyAgICAgfQorICAgIC8vICAgfSk7CisgICAgfSwgZW5hYmxlUG9sbCA/IGxvbmdQb2xsRGVs YXkgOiAtMSk7CisKKyAgcmV0dXJuICgKKyAgICA8PgorICAgICAgPFN1bW1hcnlXcmFwcGVyCisg ICAgICAgICAgcHJvY2Vzc0hhbmRsZUNvdW50PXt0cmFuc2Zvcm1EYXRhKHByb2Nlc3NIYW5kbGVD b3VudCwgNSl9CisgICAgICAgICAgb3NTdGF0cz17b3NTdGF0c30KKyAgICAgICAgICBjcHVTdGF0 cz17Y3B1U3RhdHN9CisgICAgICAgICAgcHJvY2Vzc0luZm9TdGF0cz17dHJhbnNmb3JtRGF0YShw cm9jZXNzSW5mb1N0YXRzLCA1KX0KKyAgICAgICAgICB0YWJsZUhlYWRlcj17dGFibGVIZWFkZXJ9 CisgICAgICAgICAgZXJyb3JNc2c9e2Vycm9yTXNnfQorICAgICAgICAgIHNob3dUb29sdGlwPXt0 cnVlfQorICAgICAgICAgIHNob3dEYXRhUG9pbnRzPXtmYWxzZX0KKyAgICAgICAgICBsaW5lQm9y ZGVyV2lkdGg9ezF9CisgICAgICAgICAgaXNEYXRhYmFzZT17ZGlkID4gMH0KKyAgICAgICAgICBp c1Rlc3Q9e2ZhbHNlfQorICAgICAgICAvPgorICAgIDwvPgorICApOworfQorCitTdW1tYXJ5LnBy b3BUeXBlcyA9IHsKKyAgc2lkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5n LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLAorICBkaWQ6IFByb3BU eXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51 bWJlci5pc1JlcXVpcmVkXSksCisgIHNlcnZlckNvbm5lY3RlZDogUHJvcFR5cGVzLmJvb2wsCisg IHBhZ2VWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbCwKKyAgZW5hYmxlUG9sbDogUHJvcFR5cGVzLmJv b2wsCit9OworCitleHBvcnQgZnVuY3Rpb24gU3VtbWFyeVdyYXBwZXIocHJvcHMpIHsKKyAgY29u c3QgY2xhc3NlcyA9IHVzZVN0eWxlcygpOworICBjb25zdCBvcHRpb25zID0gdXNlTWVtbygoKT0+ KHsKKyAgICBzaG93RGF0YVBvaW50czogcHJvcHMuc2hvd0RhdGFQb2ludHMsCisgICAgc2hvd1Rv b2x0aXA6IHByb3BzLnNob3dUb29sdGlwLAorICAgIGxpbmVCb3JkZXJXaWR0aDogcHJvcHMubGlu ZUJvcmRlcldpZHRoLAorICB9KSwgW3Byb3BzLnNob3dUb29sdGlwLCBwcm9wcy5zaG93RGF0YVBv aW50cywgcHJvcHMubGluZUJvcmRlcldpZHRoXSk7CisgIHJldHVybiAoCisgICAgPD4KKyAgICAg IDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9e2NsYXNzZXMuY29udGFpbmVy fT4KKyAgICAgICAgPEdyaWQgaXRlbSBtZD17Nn0+CisgICAgICAgICAgPGRpdiBjbGFzc05hbWU9 e2NsYXNzZXMuY29udGFpbmVySGVhZGVyfT57Z2V0dGV4dCgnT1MgSW5mb3JtYXRpb24nKX08L2Rp dj4KKyAgICAgICAgICA8U3VtbWFyeVRhYmxlIGRhdGE9e3Byb3BzLm9zU3RhdHN9IC8+CisgICAg ICAgIDwvR3JpZD4KKyAgICAgICAgPEdyaWQgaXRlbSBtZD17Nn0+CisgICAgICAgICAgPGRpdiBj bGFzc05hbWU9e2NsYXNzZXMuY29udGFpbmVySGVhZGVyfT57Z2V0dGV4dCgnSGFuZGxlICYgUHJv Y2VzcyBDb3VudCcpfTwvZGl2PgorICAgICAgICAgIDxDaGFydENvbnRhaW5lciBpZD0naHBjLWdy YXBoJyB0aXRsZT17Z2V0dGV4dCgnJyl9IGRhdGFzZXRzPXtwcm9wcy5wcm9jZXNzSGFuZGxlQ291 bnQuZGF0YXNldHN9ICBlcnJvck1zZz17cHJvcHMuZXJyb3JNc2d9IGlzVGVzdD17cHJvcHMuaXNU ZXN0fT4KKyAgICAgICAgICAgIDxTdHJlYW1pbmdDaGFydCBkYXRhPXtwcm9wcy5wcm9jZXNzSGFu ZGxlQ291bnR9IGRhdGFQb2ludFNpemU9e0RBVEFfUE9JTlRfU0laRX0geFJhbmdlPXtYX0FYSVNf TEVOR1RIfSBvcHRpb25zPXtvcHRpb25zfSBzaG93U2Vjb25kQXhpcz17dHJ1ZX0gLz4KKyAgICAg ICAgICA8L0NoYXJ0Q29udGFpbmVyPgorICAgICAgICA8L0dyaWQ+CisgICAgICA8L0dyaWQ+Cisg ICAgICA8R3JpZCBjb250YWluZXIgc3BhY2luZz17MX0gY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRh aW5lcn0+CisgICAgICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9PgorICAgICAgICAgIDxkaXYgY2xhc3NO YW1lPXtjbGFzc2VzLmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQoJ0NQVSBJbmZvcm1hdGlvbicp fTwvZGl2PgorICAgICAgICAgIDxTdW1tYXJ5VGFibGUgZGF0YT17cHJvcHMuY3B1U3RhdHN9IC8+ CisgICAgICAgIDwvR3JpZD4KKyAgICAgICAgPEdyaWQgaXRlbSBtZD17Nn0+CisgICAgICAgICAg PGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuY29udGFpbmVySGVhZGVyfT57Z2V0dGV4dCgnUHJvY2Vz cyBJbmZvcm1hdGlvbicpfTwvZGl2PgorICAgICAgICAgIDxDaGFydENvbnRhaW5lciBpZD0ncGkt Z3JhcGgnIHRpdGxlPXtnZXR0ZXh0KCcnKX0gZGF0YXNldHM9e3Byb3BzLnByb2Nlc3NJbmZvU3Rh dHMuZGF0YXNldHN9ICBlcnJvck1zZz17cHJvcHMuZXJyb3JNc2d9IGlzVGVzdD17cHJvcHMuaXNU ZXN0fT4KKyAgICAgICAgICAgIDxEb251dENoYXJ0IGRhdGE9e3Byb3BzLnByb2Nlc3NJbmZvU3Rh dHMuZGF0YXNldHN9IC8+CisgICAgICAgICAgPC9DaGFydENvbnRhaW5lcj4KKyAgICAgICAgPC9H cmlkPgorICAgICAgPC9HcmlkPgorICAgIDwvPgorICApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFz aGJvYXJkL3NxbC9kZWZhdWx0L3N5c3RlbV9zdGF0aXN0aWNzLnNxbCBiL3dlYi9wZ2FkbWluL2Rh c2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3N5c3RlbV9zdGF0aXN0aWNz LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmQxZmNlZDQzMwotLS0g L2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJk L3NxbC9kZWZhdWx0L3N5c3RlbV9zdGF0aXN0aWNzLnNxbApAQCAtMCwwICsxLDg3IEBACit7JSBz ZXQgYWRkX3VuaW9uID0gZmFsc2UgJX0KK3slIGlmICdwZ19zeXNfb3NfaW5mbycgaW4gY2hhcnRf bmFtZXMgJX0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9CisgICAgU0VMRUNUICdwZ19zeXNf b3NfaW5mbycgQVMgY2hhcnRfbmFtZSwgcGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSBBUyBjaGFy dF9kYXRhCisgICAgRlJPTSAoU0VMRUNUICogRlJPTSBwZ19zeXNfb3NfaW5mbygpKSB0Cit7JSBl bmRpZiAlfQoreyUgaWYgYWRkX3VuaW9uIGFuZCAncGdfc3lzX2NwdV9pbmZvJyBpbiBjaGFydF9u YW1lcyAlfQorICAgIFVOSU9OIEFMTAoreyUgZW5kaWYgJX0KK3slIGlmICdwZ19zeXNfY3B1X2lu Zm8nIGluIGNoYXJ0X25hbWVzICV9Cit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQorICAgIFNF TEVDVCAncGdfc3lzX2NwdV9pbmZvJyBBUyBjaGFydF9uYW1lLCBwZ19jYXRhbG9nLnJvd190b19q c29uKHQpIEFTIGNoYXJ0X2RhdGEKKyAgICBGUk9NIChTRUxFQ1QgKiBGUk9NIHBnX3N5c19jcHVf aW5mbygpKSB0Cit7JSBlbmRpZiAlfQoreyUgaWYgYWRkX3VuaW9uIGFuZCAnaHBjX3N0YXRzJyBp biBjaGFydF9uYW1lcyAlfQorICAgIFVOSU9OIEFMTAoreyUgZW5kaWYgJX0KK3slIGlmICdocGNf c3RhdHMnIGluIGNoYXJ0X25hbWVzICV9Cit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQorICAg IFNFTEVDVCAnaHBjX3N0YXRzJyBBUyBjaGFydF9uYW1lLCBwZ19jYXRhbG9nLnJvd190b19qc29u KHQpIEFTIGNoYXJ0X2RhdGEKKyAgICBGUk9NIChTRUxFQ1QgCisgICAgICAgIChTRUxFQ1QgaGFu ZGxlX2NvdW50IEZST00gcGdfc3lzX29zX2luZm8oKSkgIEFTICJ7eyBfKCdIYW5kbGUnKSB9fSIs CisgICAgICAgIChTRUxFQ1QgcHJvY2Vzc19jb3VudCBGUk9NIHBnX3N5c19vc19pbmZvKCkpICBB UyAie3sgXygnUHJvY2VzcycpIH19IgorICAgICkgdAoreyUgZW5kaWYgJX0KK3slIGlmIGFkZF91 bmlvbiBhbmQgJ2N1X3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQorICAgIFVOSU9OIEFMTAoreyUg ZW5kaWYgJX0KK3slIGlmICdjdV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK3slIHNldCBhZGRf dW5pb24gPSB0cnVlICV9CisgICAgU0VMRUNUICdjdV9zdGF0cycgQVMgY2hhcnRfbmFtZSwgcGdf Y2F0YWxvZy5yb3dfdG9fanNvbih0KSBBUyBjaGFydF9kYXRhCisgICAgRlJPTSAoU0VMRUNUICog RlJPTSBwZ19zeXNfY3B1X3VzYWdlX2luZm8oKSkgdAoreyUgZW5kaWYgJX0KK3slIGlmIGFkZF91 bmlvbiBhbmQgJ2xhX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQorICAgIFVOSU9OIEFMTAoreyUg ZW5kaWYgJX0KK3slIGlmICdsYV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK3slIHNldCBhZGRf dW5pb24gPSB0cnVlICV9CisgICAgU0VMRUNUICdsYV9zdGF0cycgQVMgY2hhcnRfbmFtZSwgcGdf Y2F0YWxvZy5yb3dfdG9fanNvbih0KSBBUyBjaGFydF9kYXRhIEZST00gKFNFTEVDVCAqIEZST00g cGdfc3lzX2xvYWRfYXZnX2luZm8oKSkgdAoreyUgZW5kaWYgJX0KK3slIGlmIGFkZF91bmlvbiBh bmQgJ3BjdV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KKyAgICBVTklPTiBBTEwKK3slIGVuZGlm ICV9Cit7JSBpZiAncGN1X3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQoreyUgc2V0IGFkZF91bmlv biA9IHRydWUgJX0KKyAgICBTRUxFQ1QgJ3BjdV9zdGF0cycgQVMgY2hhcnRfbmFtZSwgKAorICAg IFNFTEVDVCB0b19qc29uKHBnX2NhdGFsb2cuanNvbmJfb2JqZWN0X2FnZygncHJvY2Vzcyd8fHJv d19udW1iZXIsIHBnX2NhdGFsb2cucm93X3RvX2pzb24odCkpKQorICAgIEZST00gKAorICAgICAg ICBTRUxFQ1QgcGlkLCBuYW1lLCBjcHVfdXNhZ2UsIFJPV19OVU1CRVIoKSBPVkVSIChPUkRFUiBC WSBwaWQpIEFTIHJvd19udW1iZXIKKyAgICAgICAgRlJPTSBwZ19zeXNfY3B1X21lbW9yeV9ieV9w cm9jZXNzKCkKKyAgICApIHQKKyAgICApIEFTIGNoYXJ0X2RhdGEKK3slIGVuZGlmICV9Cit7JSBp ZiBhZGRfdW5pb24gYW5kICdtX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQorICAgIFVOSU9OIEFM TAoreyUgZW5kaWYgJX0KK3slIGlmICdtX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQoreyUgc2V0 IGFkZF91bmlvbiA9IHRydWUgJX0KKyAgICBTRUxFQ1QgJ21fc3RhdHMnIEFTIGNoYXJ0X25hbWUs IHBnX2NhdGFsb2cucm93X3RvX2pzb24odCkgQVMgY2hhcnRfZGF0YSBGUk9NIChTRUxFQ1QgdG90 YWxfbWVtb3J5LCB1c2VkX21lbW9yeSwgZnJlZV9tZW1vcnkgRlJPTSBwZ19zeXNfbWVtb3J5X2lu Zm8oKSkgdAoreyUgZW5kaWYgJX0KK3slIGlmIGFkZF91bmlvbiBhbmQgJ3NtX3N0YXRzJyBpbiBj aGFydF9uYW1lcyAlfQorICAgIFVOSU9OIEFMTAoreyUgZW5kaWYgJX0KK3slIGlmICdzbV9zdGF0 cycgaW4gY2hhcnRfbmFtZXMgJX0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9CisgICAgU0VM RUNUICdzbV9zdGF0cycgQVMgY2hhcnRfbmFtZSwgcGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSBB UyBjaGFydF9kYXRhIEZST00gKFNFTEVDVCBzd2FwX3RvdGFsLCBzd2FwX3VzZWQsIHN3YXBfZnJl ZSBGUk9NIHBnX3N5c19tZW1vcnlfaW5mbygpKSB0Cit7JSBlbmRpZiAlfQoreyUgaWYgYWRkX3Vu aW9uIGFuZCAncG11X3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQorICAgIFVOSU9OIEFMTAoreyUg ZW5kaWYgJX0KK3slIGlmICdwbXVfc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9Cit7JSBzZXQgYWRk X3VuaW9uID0gdHJ1ZSAlfQorICAgIFNFTEVDVCAncG11X3N0YXRzJyBBUyBjaGFydF9uYW1lLCAo CisgICAgU0VMRUNUIHRvX2pzb24ocGdfY2F0YWxvZy5qc29uYl9vYmplY3RfYWdnKCdwcm9jZXNz J3x8cm93X251bWJlciwgcGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSkpCisgICAgRlJPTSAoCisg ICAgICAgIFNFTEVDVCBwaWQsIG5hbWUsIG1lbW9yeV91c2FnZSwgbWVtb3J5X2J5dGVzLCBST1df TlVNQkVSKCkgT1ZFUiAoT1JERVIgQlkgcGlkKSBBUyByb3dfbnVtYmVyCisgICAgICAgIEZST00g cGdfc3lzX2NwdV9tZW1vcnlfYnlfcHJvY2VzcygpCisgICAgKSB0CisgICAgKSBBUyBjaGFydF9k YXRhCit7JSBlbmRpZiAlfQoreyUgaWYgYWRkX3VuaW9uIGFuZCAncGlfc3RhdHMnIGluIGNoYXJ0 X25hbWVzICV9CisgICAgVU5JT04gQUxMCit7JSBlbmRpZiAlfQoreyUgaWYgJ3BpX3N0YXRzJyBp biBjaGFydF9uYW1lcyAlfQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0KKyAgICBTRUxFQ1Qg J3BpX3N0YXRzJyBBUyBjaGFydF9uYW1lLCBwZ19jYXRhbG9nLnJvd190b19qc29uKHQpIEFTIGNo YXJ0X2RhdGEgRlJPTSAoU0VMRUNUICogRlJPTSBwZ19zeXNfcHJvY2Vzc19pbmZvKCkpIHQKK3sl IGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vc3RhdGljL2pzL2NvbXBvbmVudHMvUGdDaGFydC9Eb251dENoYXJ0LmpzeCBiL3dlYi9w Z2FkbWluL3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQvRG9udXRDaGFydC5qc3gKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi45YzkxN2NjMjAKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L0RvbnV0Q2hhcnQu anN4CkBAIC0wLDAgKzEsNjggQEAKK2ltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiB9 IGZyb20gJ3JlYWN0JzsKK2ltcG9ydCBDaGFydCBmcm9tICdjaGFydC5qcy9hdXRvJzsKK2ltcG9y dCB7IHVzZVJlc2l6ZURldGVjdG9yIH0gZnJvbSAncmVhY3QtcmVzaXplLWRldGVjdG9yJzsKKwor Y29uc3QgRG9udXRDaGFydCA9ICh7IGRhdGEgfSkgPT4geworICAgIGNvbnN0IGNoYXJ0UmVmID0g dXNlUmVmKG51bGwpOworICAgIGNvbnN0IGNoYXJ0SW5zdGFuY2UgPSB1c2VSZWYobnVsbCk7CisK KyAgICB1c2VFZmZlY3QoKCkgPT4geworICAgICAgICBpZiAoZGF0YSAmJiBPYmplY3Qua2V5cyhk YXRhKS5sZW5ndGggPiAwKSB7CisgICAgICAgIGlmIChjaGFydEluc3RhbmNlLmN1cnJlbnQpIHsK KyAgICAgICAgICAgIC8vIElmIGNoYXJ0IGluc3RhbmNlIGV4aXN0cywgdXBkYXRlIHRoZSBkYXRh CisgICAgICAgICAgICBjaGFydEluc3RhbmNlLmN1cnJlbnQuZGF0YS5sYWJlbHMgPSBkYXRhLm1h cCgoaXRlbSkgPT4gaXRlbS5sYWJlbCk7CisgICAgICAgICAgICBjaGFydEluc3RhbmNlLmN1cnJl bnQuZGF0YS5kYXRhc2V0c1swXS5kYXRhID0gZGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YSk7 CisgICAgICAgICAgICBjaGFydEluc3RhbmNlLmN1cnJlbnQudXBkYXRlKCk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAvLyBJZiBjaGFydCBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LCBj cmVhdGUgYSBuZXcgY2hhcnQKKyAgICAgICAgICAgIGNvbnN0IGNoYXJ0T3B0aW9ucyA9IHsKKyAg ICAgICAgICAgICAgICByZXNwb25zaXZlOiB0cnVlLAorICAgICAgICAgICAgICAgIG1haW50YWlu QXNwZWN0UmF0aW86IGZhbHNlLAorICAgICAgICAgICAgICAgIHBsdWdpbnM6IHsKKyAgICAgICAg ICAgICAgICAgICAgbGVnZW5kOiB7CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNl LCAvLyBIaWRlIHRoZSBsYWJlbHMgYXQgdGhlIHRvcAorICAgICAgICAgICAgICAgICAgICB9LAor ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB7CisgICAgICAg ICAgICAgICAgICAgIGR1cmF0aW9uOiAwLCAvLyBEaXNhYmxlIHRoZSBhbmltYXRpb24KKyAgICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHRvb2x0aXBzOiB7CisgICAgICAgICAgICAg ICAgICAgIGNhbGxiYWNrczogeworICAgICAgICAgICAgICAgICAgICBsYWJlbDogZnVuY3Rpb24g KHRvb2x0aXBJdGVtLCBjaGFydERhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGRhdGFzZXQgPSBjaGFydERhdGEuZGF0YXNldHNbdG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4XTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gZGF0YXNldC5kYXRhLnJlZHVj ZSgocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSA9PiBwcmV2aW91c1ZhbHVlICsgY3VycmVu dFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGRh dGFzZXQuZGF0YVt0b29sdGlwSXRlbS5pbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBwZXJjZW50YWdlID0gKChjdXJyZW50VmFsdWUgLyB0b3RhbCkgKiAxMDApLnRvRml4ZWQo MikgKyAnJSc7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNldC5sYWJlbCAr ICc6ICcgKyBjdXJyZW50VmFsdWUgKyAnICgnICsgcGVyY2VudGFnZSArICcpJzsKKyAgICAgICAg ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgY2hhcnREYXRhID0geworICAg ICAgICAgICAgbGFiZWxzOiBkYXRhLm1hcCgoaXRlbSkgPT4gaXRlbS5sYWJlbCksCisgICAgICAg ICAgICBkYXRhc2V0czogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRh OiBkYXRhLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhKSwKKyAgICAgICAgICAgICAgICBiYWNrZ3Jv dW5kQ29sb3I6IGRhdGEubWFwKChpdGVtKSA9PiBpdGVtLmJvcmRlckNvbG9yKSwKKyAgICAgICAg ICAgICAgICBob3ZlckJhY2tncm91bmRDb2xvcjogZGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW0uYm9y ZGVyQ29sb3IpLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICBdLAorICAgICAgICAg ICAgfTsKKworICAgICAgICAgICAgY29uc3QgY3R4ID0gY2hhcnRSZWYuY3VycmVudC5nZXRDb250 ZXh0KCcyZCcpOworICAgICAgICAgICAgY2hhcnRJbnN0YW5jZS5jdXJyZW50ID0gbmV3IENoYXJ0 KGN0eCwgeworICAgICAgICAgICAgdHlwZTogJ2RvdWdobnV0JywKKyAgICAgICAgICAgIGRhdGE6 IGNoYXJ0RGF0YSwKKyAgICAgICAgICAgIG9wdGlvbnM6IGNoYXJ0T3B0aW9ucywKKyAgICAgICAg ICAgIH0pOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LCBbZGF0YV0pOworCisgICAgcmV0 dXJuICgKKyAgICAgICAgPGNhbnZhcyByZWY9e2NoYXJ0UmVmfSAvPgorICAgICk7Cit9OworCitl eHBvcnQgZGVmYXVsdCBEb251dENoYXJ0OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGlj L2pzL2NvbXBvbmVudHMvUGdDaGFydC9TdHJlYW1pbmdDaGFydC5qc3ggYi93ZWIvcGdhZG1pbi9z dGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWluZ0NoYXJ0LmpzeAppbmRleCBiZDQ2 NWUzZGEuLmViYTMwMWYwNSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2NvbXBv bmVudHMvUGdDaGFydC9TdHJlYW1pbmdDaGFydC5qc3gKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGlj L2pzL2NvbXBvbmVudHMvUGdDaGFydC9TdHJlYW1pbmdDaGFydC5qc3gKQEAgLTU4LDQ0ICs1OCw4 OSBAQCBmdW5jdGlvbiB0b29sdGlwUGx1Z2luKHJlZnJlc2hSYXRlKSB7CiAgIH07CiB9CiAKLWV4 cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN0cmVhbWluZ0NoYXJ0KHt4UmFuZ2U9NzUsIGRhdGEsIG9w dGlvbnN9KSB7CitleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHJlYW1pbmdDaGFydCh7eFJhbmdl PTc1LCBkYXRhLCBvcHRpb25zLCBzaG93U2Vjb25kQXhpcz1mYWxzZX0pIHsKICAgY29uc3QgY2hh cnRSZWYgPSB1c2VSZWYoKTsKICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpOwogICBjb25zdCB7 IHdpZHRoLCBoZWlnaHQsIHJlZjpjb250YWluZXJSZWYgfSA9IHVzZVJlc2l6ZURldGVjdG9yKCk7 Ci0gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gdXNlTWVtbygoKT0+KHsKLSAgICB0aXRsZTogJycs Ci0gICAgd2lkdGg6IHdpZHRoLAotICAgIGhlaWdodDogaGVpZ2h0LAotICAgIHBhZGRpbmc6IFsx MCwgMCwgMTAsIDBdLAotICAgIGZvY3VzOiB7Ci0gICAgICBhbHBoYTogMC4zLAotICAgIH0sCi0g ICAgY3Vyc29yOiB7Ci0gICAgICB5OiBmYWxzZSwKLSAgICAgIGRyYWc6IHsKLSAgICAgICAgc2V0 U2NhbGU6IGZhbHNlLAotICAgICAgfQotICAgIH0sCi0gICAgc2VyaWVzOiBbCisgIGNvbnN0IGRl ZmF1bHRPcHRpb25zID0gdXNlTWVtbygoKT0+IHsKKyAgICBjb25zdCBzZXJpZXMgPSBbCiAgICAg ICB7fSwKLSAgICAgIC4uLihkYXRhLmRhdGFzZXRzPy5tYXAoKGRhdHVtKT0+KHsKKyAgICAgIC4u LihkYXRhLmRhdGFzZXRzPy5tYXAoKGRhdHVtLCBpbmRleCkgPT4gKHsKICAgICAgICAgbGFiZWw6 IGRhdHVtLmxhYmVsLAogICAgICAgICBzdHJva2U6IGRhdHVtLmJvcmRlckNvbG9yLAogICAgICAg ICB3aWR0aDogb3B0aW9ucy5saW5lQm9yZGVyV2lkdGggPz8gMSwKLSAgICAgICAgcG9pbnRzOiB7 IHNob3c6IG9wdGlvbnMuc2hvd0RhdGFQb2ludHMgPz8gZmFsc2UsIHNpemU6IGRhdHVtLnBvaW50 SGl0UmFkaXVzKjIgfQotICAgICAgfSkpPz97fSkKLSAgICBdLAotICAgIHNjYWxlczogewotICAg ICAgeDogewotICAgICAgICB0aW1lOiBmYWxzZSwKLSAgICAgIH0KLSAgICB9LAotICAgIGF4ZXM6 IFsKKyAgICAgICAgc2NhbGU6IHNob3dTZWNvbmRBeGlzICYmIChpbmRleCA9PT0gMSkgPyAneTEn IDogJ3knLAorICAgICAgICBwb2ludHM6IHsgc2hvdzogb3B0aW9ucy5zaG93RGF0YVBvaW50cyA/ PyBmYWxzZSwgc2l6ZTogZGF0dW0ucG9pbnRIaXRSYWRpdXMgKiAyIH0sCisgICAgICB9KSkgPz8g W10pLAorICAgIF07CisKKyAgICBjb25zdCBheGVzID0gWwogICAgICAgewogICAgICAgICBzaG93 OiBmYWxzZSwKICAgICAgICAgc3Ryb2tlOiB0aGVtZS5wYWxldHRlLnRleHQucHJpbWFyeSwKICAg ICAgIH0sCi0gICAgICB7CisgICAgXTsKKworICAgIGlmKHNob3dTZWNvbmRBeGlzKXsKKyAgICAg IGF4ZXMucHVzaCh7CisgICAgICAgIHNjYWxlOiAneScsCisgICAgICAgIGdyaWQ6IHsKKyAgICAg ICAgICBzdHJva2U6IHRoZW1lLm90aGVyVmFycy5ib3JkZXJDb2xvciwKKyAgICAgICAgICB3aWR0 aDogMC41LAorICAgICAgICB9LAorICAgICAgICBzdHJva2U6IHRoZW1lLnBhbGV0dGUudGV4dC5w cmltYXJ5LAorICAgICAgICBzaXplOiBmdW5jdGlvbihfb2JqLCB2YWx1ZXMpIHsKKyAgICAgICAg ICBsZXQgc2l6ZSA9IDQwOworICAgICAgICAgIGlmKHZhbHVlcz8ubGVuZ3RoID4gMCkgeworICAg ICAgICAgICAgc2l6ZSA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoLTFdLmxlbmd0aCoxMjsKKyAgICAg ICAgICAgIGlmKHNpemUgPCA0MCkgc2l6ZSA9IDQwOworICAgICAgICAgIH0KKyAgICAgICAgICBy ZXR1cm4gc2l6ZTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8geS1heGlzIGNvbmZpZ3VyYXRpb24K KyAgICAgICAgdmFsdWVzOiAoc2VsZiwgdGlja3MpID0+IHsKKyAgICAgICAgICAvLyBGb3JtYXQg dGhlIGxhYmVsCisgICAgICAgICAgcmV0dXJuIHRpY2tzLm1hcCgodmFsdWUpID0+IHsKKyAgICAg ICAgICAgIGlmKHZhbHVlIDwgMSl7CisgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSsiIjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IHN1ZmZpeGVzID0gWyIiLCAiayIsICJNIiwg IkIiLCAiVCJdOworICAgICAgICAgICAgY29uc3Qgc3VmZml4TnVtID0gTWF0aC5mbG9vcihNYXRo LmxvZzEwKHZhbHVlKSAvIDMpOworICAgICAgICAgICAgY29uc3Qgc2hvcnRWYWx1ZSA9ICh2YWx1 ZSAvIE1hdGgucG93KDEwMDAsIHN1ZmZpeE51bSkpLnRvRml4ZWQoMSk7CisgICAgICAgICAgICBy ZXR1cm4gc2hvcnRWYWx1ZSArIHN1ZmZpeGVzW3N1ZmZpeE51bV07CisgICAgICAgICAgfSk7Cisg ICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYXhlcy5wdXNoKHsKKyAgICAgICAgc2NhbGU6ICd5 MScsCisgICAgICAgIHNpZGU6IDEsCisgICAgICAgIHN0cm9rZTogdGhlbWUucGFsZXR0ZS50ZXh0 LnByaW1hcnksCisgICAgICAgIGdyaWQ6IHtzaG93OiBmYWxzZX0sCisgICAgICAgIHNpemU6IGZ1 bmN0aW9uKF9vYmosIHZhbHVlcykgeworICAgICAgICAgIGxldCBzaXplID0gNDA7CisgICAgICAg ICAgaWYodmFsdWVzPy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBzaXplID0gdmFsdWVzW3Zh bHVlcy5sZW5ndGgtMV0ubGVuZ3RoKjEyOworICAgICAgICAgICAgaWYoc2l6ZSA8IDQwKSBzaXpl ID0gNDA7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBzaXplOworICAgICAgICB9LAor ICAgICAgICAvLyB5LWF4aXMgY29uZmlndXJhdGlvbgorICAgICAgICB2YWx1ZXM6IChzZWxmLCB0 aWNrcykgPT4geworICAgICAgICAgIC8vIEZvcm1hdCB0aGUgbGFiZWwKKyAgICAgICAgICByZXR1 cm4gdGlja3MubWFwKCh2YWx1ZSkgPT4geworICAgICAgICAgICAgaWYodmFsdWUgPCAxKXsKKyAg ICAgICAgICAgICAgcmV0dXJuIHZhbHVlKyIiOworICAgICAgICAgICAgfQorICAgICAgICAgICAg Y29uc3Qgc3VmZml4ZXMgPSBbIiIsICJrIiwgIk0iLCAiQiIsICJUIl07CisgICAgICAgICAgICBj b25zdCBzdWZmaXhOdW0gPSBNYXRoLmZsb29yKE1hdGgubG9nMTAodmFsdWUpIC8gMyk7CisgICAg ICAgICAgICBjb25zdCBzaG9ydFZhbHVlID0gKHZhbHVlIC8gTWF0aC5wb3coMTAwMCwgc3VmZml4 TnVtKSkudG9GaXhlZCgxKTsKKyAgICAgICAgICAgIHJldHVybiBzaG9ydFZhbHVlICsgc3VmZml4 ZXNbc3VmZml4TnVtXTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAg fSBlbHNleworICAgICAgYXhlcy5wdXNoKHsKKyAgICAgICAgc2NhbGU6ICd5JywKICAgICAgICAg Z3JpZDogewogICAgICAgICAgIHN0cm9rZTogdGhlbWUub3RoZXJWYXJzLmJvcmRlckNvbG9yLAog ICAgICAgICAgIHdpZHRoOiAwLjUsCkBAIC0xMDgsMTEgKzE1Myw0NyBAQCBleHBvcnQgZGVmYXVs dCBmdW5jdGlvbiBTdHJlYW1pbmdDaGFydCh7eFJhbmdlPTc1LCBkYXRhLCBvcHRpb25zfSkgewog ICAgICAgICAgICAgaWYoc2l6ZSA8IDQwKSBzaXplID0gNDA7CiAgICAgICAgICAgfQogICAgICAg ICAgIHJldHVybiBzaXplOworICAgICAgICB9LAorICAgICAgICAvLyB5LWF4aXMgY29uZmlndXJh dGlvbgorICAgICAgICB2YWx1ZXM6IChzZWxmLCB0aWNrcykgPT4geworICAgICAgICAgIC8vIEZv cm1hdCB0aGUgbGFiZWwKKyAgICAgICAgICByZXR1cm4gdGlja3MubWFwKCh2YWx1ZSkgPT4gewor ICAgICAgICAgICAgaWYodmFsdWUgPCAxKXsKKyAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKyIi OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3Qgc3VmZml4ZXMgPSBbIiIsICJrIiwg Ik0iLCAiQiIsICJUIl07CisgICAgICAgICAgICBjb25zdCBzdWZmaXhOdW0gPSBNYXRoLmZsb29y KE1hdGgubG9nMTAodmFsdWUpIC8gMyk7CisgICAgICAgICAgICBjb25zdCBzaG9ydFZhbHVlID0g KHZhbHVlIC8gTWF0aC5wb3coMTAwMCwgc3VmZml4TnVtKSkudG9GaXhlZCgxKTsKKyAgICAgICAg ICAgIHJldHVybiBzaG9ydFZhbHVlICsgc3VmZml4ZXNbc3VmZml4TnVtXTsKKyAgICAgICAgICB9 KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorICAKKyAgICByZXR1cm4geworICAgICAg dGl0bGU6ICcnLAorICAgICAgd2lkdGg6IHdpZHRoLAorICAgICAgaGVpZ2h0OiBoZWlnaHQsCisg ICAgICBwYWRkaW5nOiBbMTAsIDAsIDEwLCAwXSwKKyAgICAgIGZvY3VzOiB7CisgICAgICAgIGFs cGhhOiAwLjMsCisgICAgICB9LAorICAgICAgY3Vyc29yOiB7CisgICAgICAgIHk6IGZhbHNlLAor ICAgICAgICBkcmFnOiB7CisgICAgICAgICAgc2V0U2NhbGU6IGZhbHNlLAorICAgICAgICB9Cisg ICAgICB9LAorICAgICAgc2VyaWVzOiBzZXJpZXMsCisgICAgICBzY2FsZXM6IHsKKyAgICAgICAg eDogeworICAgICAgICAgIHRpbWU6IGZhbHNlLAogICAgICAgICB9Ci0gICAgICB9Ci0gICAgXSwK LSAgICBwbHVnaW5zOiBvcHRpb25zLnNob3dUb29sdGlwID8gW3Rvb2x0aXBQbHVnaW4oZGF0YS5y ZWZyZXNoUmF0ZSldIDogW10sCi0gIH0pLCBbZGF0YS5yZWZyZXNoUmF0ZSwgZGF0YT8uZGF0YXNl dHM/Lmxlbmd0aCwgd2lkdGgsIGhlaWdodCwgb3B0aW9uc10pOworICAgICAgfSwKKyAgICAgIGF4 ZXM6IGF4ZXMsCisgICAgICBwbHVnaW5zOiBvcHRpb25zLnNob3dUb29sdGlwID8gW3Rvb2x0aXBQ bHVnaW4oZGF0YS5yZWZyZXNoUmF0ZSldIDogW10sCisgICAgfTsKKyAgfSwgW2RhdGEucmVmcmVz aFJhdGUsIGRhdGE/LmRhdGFzZXRzPy5sZW5ndGgsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnNdKTsK IAogICBjb25zdCBpbml0aWFsU3RhdGUgPSBbCiAgICAgQXJyYXkuZnJvbShuZXcgQXJyYXkoeFJh bmdlKS5rZXlzKCkpLApAQCAtMTQwLDQgKzIyMSw1IEBAIFN0cmVhbWluZ0NoYXJ0LnByb3BUeXBl cyA9IHsKICAgeFJhbmdlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsCiAgIGRhdGE6IHBy b3BUeXBlRGF0YS5pc1JlcXVpcmVkLAogICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LAorICBz aG93U2Vjb25kQXhpczogUHJvcFR5cGVzLmJvb2wsCiB9Owo= --0000000000006f072b060037914c--