Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qToXO-00AlCr-3a for pgadmin-hackers@arkaria.postgresql.org; Wed, 09 Aug 2023 19:08:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qToXM-007u08-F7 for pgadmin-hackers@arkaria.postgresql.org; Wed, 09 Aug 2023 19:08:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qToXM-007u00-2C for pgadmin-hackers@lists.postgresql.org; Wed, 09 Aug 2023 19:08:04 +0000 Received: from mail-oo1-xc36.google.com ([2607:f8b0:4864:20::c36]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qToXF-001XEw-0g for pgadmin-hackers@postgresql.org; Wed, 09 Aug 2023 19:08:03 +0000 Received: by mail-oo1-xc36.google.com with SMTP id 006d021491bc7-5607cdb0959so127952eaf.2 for ; Wed, 09 Aug 2023 12:07:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691608075; x=1692212875; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=sSOEV8UqtNMZe+IJDFuv11JaLnIbKlo7dk9c6CUxKYc=; b=ms8HpDMziVuNOCLYcJZuBDo2nuWE5TFKk+9oHqpMFAenI0qs/1VETAJYmhJ+JtjJYq P8N/XW1QMJH+y/ukPX3lUfY+JvzrNxlkOaRvwrRJBOpCXD5YADFd3bEX/HKIfjvniWAL xj8rerpPDDMBEXLZUmyjAt+cGrvuPYo+DXwr96JGr5dfHQtwCnhYgvhQtnKclesfrLn5 aFwEr+Ve6mZjwB/Qxl017TtEyOkrIQuQrzdQffxOwFK58Gm1je9nfueP6pI8818GZIV3 50FjbPcPnbz9LuppRgWae0eElszVoDIyMfafzjeVTGIbk8SHyv6dz7SjJ69weNMjRWqO YZvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691608075; x=1692212875; 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=sSOEV8UqtNMZe+IJDFuv11JaLnIbKlo7dk9c6CUxKYc=; b=BPt9IPTsCZDzSMq6xGUEH6u8HqqaBaru+OS+1q6ZIlKdA7WiEswzAwEAA0kTWryIG1 VxLx4enr/zfiL1ABWnbR/ckozXQ46abLUFHohVz8ebv85ihX9mADOEwzCDXijo7Sugcf y0c/qwo7gCTWBLT2FSO8YRG8OtoCKGgGeCa+S6OhNE0O3BrgqWhEOSR32RLZO9TonUmf hWaWyPxjO8/qHV6yAGOsF/y22075Pn0PgUtkL0GImJF+zT77LRJQPKlxALJsbLnnLx3z r5WucIZfmfRCFV0BT1Ftk1prvFpX6ZWAHW6itCCRCBiSW/3/HCsqQuqii+lJWSrxomhq O92w== X-Gm-Message-State: AOJu0YxulPABjF+7Xk7L3xFeWMbPnfEZEAJLa3WX26YB0durs8wk81MN d37cbPo0gdBD15QyQXS4Nw2OIzFGKxlWUEyCj7g= X-Google-Smtp-Source: AGHT+IEO8aVDgBBmJMWR0adXehU3iSBYNoCH5n3j3Sjt5Mq4V4XoITquvbqz/IpB0G4DRsphzS+EXP4AIbChzAxk78Q= X-Received: by 2002:a05:6808:130e:b0:3a7:550c:635d with SMTP id y14-20020a056808130e00b003a7550c635dmr213768oiv.56.1691608074912; Wed, 09 Aug 2023 12:07:54 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Sahil Harpal Date: Thu, 10 Aug 2023 00:37:42 +0530 Message-ID: Subject: Re: Pgadmin4 System Stats Extension Design To: Aditya Toshniwal Cc: Khushboo Vashi , pgadmin-hackers@postgresql.org, Ashesh Vashi , Dave Page , Akshay Joshi Content-Type: multipart/mixed; boundary="00000000000068712c0602823205" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000068712c0602823205 Content-Type: multipart/alternative; boundary="0000000000006871290602823203" --0000000000006871290602823203 Content-Type: text/plain; charset="UTF-8" Hi all, I have attached the updated patch with recent changes. New changes: 1. Displayed the appropriate message If the System Stat extension does not exist. 2. Provided option to configure refresh rates for the API calls (Preferences settings > Dashboards > Refresh rates). 3. Added I/O analysis of block devices under the storage tab. 4. Fixed PEP-8 errors. 5. Fixed the linter errors. 6. Moved all the system stats related .jsx files under a seperate folder "dashboard/static/js/SystemStats". 7. Added formatter to convert disk sizes (in bytes) to human readable format. Pending Work: 1. Process information - - Issue: The pg_sys_process_info() query takes much longer (more than 2 mins) to execute and prevents the updation of other graphs and tables. 2. Disk information - - Issue: The pg_sys_disk_info() query returns NULL value for some of the drive letters. 3. StreamingChart - - Issue: Graph shifting glitch. For the first time, graphs start from the opposite side, and after the following API call or a few seconds later, those get adjusted. I need suggestions for labels for different tables and charts. Also, could you please clarify the use of the counterData variable, which is used for some of the charts (tps_stats, ti_stats, to_stats, and bio_stats)? Thank you, Sahil --0000000000006871290602823203 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi all,

I have attached the updated pat= ch with recent=C2=A0changes.

New changes:
  1. Displayed the appropriate message If the System Stat extension do= es not exist.
  2. Provided option to configure refresh rates for the AP= I calls (Preferences settings > Dashboards > Refresh rates).
  3. = Added I/O analysis of block devices under the storage tab.
  4. Fixed PE= P-8 errors.
  5. Fixed the linter errors.
  6. Moved all the system s= tats related .jsx files under a seperate=C2=A0folder "dashboard/static= /js/SystemStats".
  7. Added formatter=C2=A0to convert disk sizes (in bytes) to human readable = format.
Pending Work:
  1. Process information= -
    • Issue: The pg_sys_process_info() query takes much longer (mo= re than 2 mins) to execute and prevents the updation of other graphs and ta= bles.=C2=A0
  2. Disk information -
    • Issue: The=C2=A0pg_= sys_disk_info() query returns NULL value for some of the drive letters.
  3. StreamingChart -=C2=A0
    • Issue: Graph shifting=C2=A0glitch.=C2=A0For the fir= st time, graphs start from the opposite side, and after the following API c= all or a few seconds later, those get adjusted.
I need s= uggestions for labels for different tables and charts. Also, could you plea= se clarify the use of the counterData variable, which is used for some of t= he charts (tps_stats, ti_stats, to_stats, and bio_stats)?

Thank you,
Sahil

3D"" --0000000000006871290602823203-- --00000000000068712c0602823205 Content-Type: application/octet-stream; name="SS_WIP.patch" Content-Disposition: attachment; filename="SS_WIP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ll43nzh40 RnJvbSAzMzk2YmY1ODkyNWEyMDA5OTkyZDc0NjM2YTM5ZTg2NWQzNTFmN2QxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogU2FoaWwgSGFycGFsIDxzYW50b3NoLjJAaWl0ai5hYy5pbj4N CkRhdGU6IFdlZCwgOSBBdWcgMjAyMyAxODowNzo0NyArMDUzMA0KU3ViamVjdDogW1BBVENIXSBT UyBjaGFuZ2VzIHdpdGhvdXQgZGlzayBhbmQgcHJvY2VzcyBpbmZvDQoNCi0tLQ0KIHdlYi9wZ2Fk bWluL2Rhc2hib2FyZC9fX2luaXRfXy5weSAgICAgICAgICAgICB8IDEzMSArKysrKysNCiB3ZWIv cGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL0Rhc2hib2FyZC5qc3ggfCAyMzQgKysrKysrKy0t LQ0KIC4uLi9kYXNoYm9hcmQvc3RhdGljL2pzL1N5c3RlbVN0YXRzL0NQVS5qc3ggICB8IDM2OCAr KysrKysrKysrKysrKysNCiAuLi4vc3RhdGljL2pzL1N5c3RlbVN0YXRzL01lbW9yeS5qc3ggICAg ICAgICAgfCAzNzIgKysrKysrKysrKysrKysrDQogLi4uL3N0YXRpYy9qcy9TeXN0ZW1TdGF0cy9T dG9yYWdlLmpzeCAgICAgICAgIHwgMzI5ICsrKysrKysrKysrKysrDQogLi4uL3N0YXRpYy9qcy9T eXN0ZW1TdGF0cy9TdW1tYXJ5LmpzeCAgICAgICAgIHwgNDIyICsrKysrKysrKysrKysrKysrKw0K IC4uLi9zcWwvZGVmYXVsdC9zeXN0ZW1fc3RhdGlzdGljcy5zcWwgICAgICAgICB8IDEwMCArKysr Kw0KIC4uLi9qcy9jb21wb25lbnRzL1BnQ2hhcnQvRG9udXRDaGFydC5qc3ggICAgICB8ICA3MCAr KysNCiAuLi4vanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWluZ0NoYXJ0LmpzeCAgfCAxNDYg KysrKy0tDQogOSBmaWxlcyBjaGFuZ2VkLCAyMDgxIGluc2VydGlvbnMoKyksIDkxIGRlbGV0aW9u cygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB3ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pz L1N5c3RlbVN0YXRzL0NQVS5qc3gNCiBjcmVhdGUgbW9kZSAxMDA2NDQgd2ViL3BnYWRtaW4vZGFz aGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0cy9NZW1vcnkuanN4DQogY3JlYXRlIG1vZGUgMTAw NjQ0IHdlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvU3lzdGVtU3RhdHMvU3RvcmFnZS5q c3gNCiBjcmVhdGUgbW9kZSAxMDA2NDQgd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9T eXN0ZW1TdGF0cy9TdW1tYXJ5LmpzeA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB3ZWIvcGdhZG1pbi9k YXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC9zeXN0ZW1fc3RhdGlzdGlj cy5zcWwNCiBjcmVhdGUgbW9kZSAxMDA2NDQgd2ViL3BnYWRtaW4vc3RhdGljL2pzL2NvbXBvbmVu dHMvUGdDaGFydC9Eb251dENoYXJ0LmpzeA0KDQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZGFz aGJvYXJkL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL19faW5pdF9fLnB5DQpp bmRleCAxZGFjNTRlNzQuLmMxOGY1ZDNkZSAxMDA2NDQNCi0tLSBhL3dlYi9wZ2FkbWluL2Rhc2hi b2FyZC9fX2luaXRfXy5weQ0KKysrIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL19faW5pdF9fLnB5 DQpAQCAtMTEyLDYgKzExMiw3MiBAQCBjbGFzcyBEYXNoYm9hcmRNb2R1bGUoUGdBZG1pbk1vZHVs ZSk6DQogICAgICAgICAgICAgaGVscF9zdHI9aGVscF9zdHJpbmcNCiAgICAgICAgICkNCiANCisg ICAgICAgIHNlbGYuaHBjX3N0YXRzX3JlZnJlc2ggPSBzZWxmLmRhc2hib2FyZF9wcmVmZXJlbmNl LnJlZ2lzdGVyKA0KKyAgICAgICAgICAgICdkYXNoYm9hcmRzJywgJ2hwY19zdGF0c19yZWZyZXNo JywNCisgICAgICAgICAgICBnZXR0ZXh0KCJIYW5kbGUgJiBQcm9jZXNzIGNvdW50IHN0YXRpc3Rp Y3MgcmVmcmVzaCByYXRlIiksDQorICAgICAgICAgICAgJ2ludGVnZXInLCA1LCBtaW5fdmFsPTEs IG1heF92YWw9OTk5OTk5LA0KKyAgICAgICAgICAgIGNhdGVnb3J5X2xhYmVsPVBSRUZfTEFCRUxf UkVGUkVTSF9SQVRFUywNCisgICAgICAgICAgICBoZWxwX3N0cj1oZWxwX3N0cmluZw0KKyAgICAg ICAgKQ0KKw0KKyAgICAgICAgc2VsZi5jdV9zdGF0c19yZWZyZXNoID0gc2VsZi5kYXNoYm9hcmRf cHJlZmVyZW5jZS5yZWdpc3RlcigNCisgICAgICAgICAgICAnZGFzaGJvYXJkcycsICdjdV9zdGF0 c19yZWZyZXNoJywNCisgICAgICAgICAgICBnZXR0ZXh0KA0KKyAgICAgICAgICAgICAgICAiUGVy Y2VudGFnZSBvZiBDUFUgdGltZSB1c2VkIGJ5IGRpZmZlcmVudCBwcm9jZXNzIFwNCisgICAgICAg ICAgICAgICAgbW9kZXMgc3RhdGlzdGljcyByZWZyZXNoIHJhdGUiDQorICAgICAgICAgICAgKSwg J2ludGVnZXInLCA1LCBtaW5fdmFsPTEsIG1heF92YWw9OTk5OTk5LA0KKyAgICAgICAgICAgIGNh dGVnb3J5X2xhYmVsPVBSRUZfTEFCRUxfUkVGUkVTSF9SQVRFUywNCisgICAgICAgICAgICBoZWxw X3N0cj1oZWxwX3N0cmluZw0KKyAgICAgICAgKQ0KKw0KKyAgICAgICAgc2VsZi5sYV9zdGF0c19y ZWZyZXNoID0gc2VsZi5kYXNoYm9hcmRfcHJlZmVyZW5jZS5yZWdpc3RlcigNCisgICAgICAgICAg ICAnZGFzaGJvYXJkcycsICdsYV9zdGF0c19yZWZyZXNoJywNCisgICAgICAgICAgICBnZXR0ZXh0 KCJBdmVyYWdlIGxvYWQgc3RhdGlzdGljcyByZWZyZXNoIHJhdGUiKSwgJ2ludGVnZXInLA0KKyAg ICAgICAgICAgIDUsIG1pbl92YWw9MSwgbWF4X3ZhbD05OTk5OTksDQorICAgICAgICAgICAgY2F0 ZWdvcnlfbGFiZWw9UFJFRl9MQUJFTF9SRUZSRVNIX1JBVEVTLA0KKyAgICAgICAgICAgIGhlbHBf c3RyPWhlbHBfc3RyaW5nDQorICAgICAgICApDQorDQorICAgICAgICBzZWxmLnBjdV9zdGF0c19y ZWZyZXNoID0gc2VsZi5kYXNoYm9hcmRfcHJlZmVyZW5jZS5yZWdpc3RlcigNCisgICAgICAgICAg ICAnZGFzaGJvYXJkcycsICdwY3Vfc3RhdHNfcmVmcmVzaCcsDQorICAgICAgICAgICAgZ2V0dGV4 dCgiQ1BVIHVzYWdlIHBlciBwcm9jZXNzIHN0YXRpc3RpY3MgcmVmcmVzaCByYXRlIiksDQorICAg ICAgICAgICAgJ2ludGVnZXInLCA1LCBtaW5fdmFsPTEsIG1heF92YWw9OTk5OTk5LA0KKyAgICAg ICAgICAgIGNhdGVnb3J5X2xhYmVsPVBSRUZfTEFCRUxfUkVGUkVTSF9SQVRFUywNCisgICAgICAg ICAgICBoZWxwX3N0cj1oZWxwX3N0cmluZw0KKyAgICAgICAgKQ0KKw0KKyAgICAgICAgc2VsZi5t X3N0YXRzX3JlZnJlc2ggPSBzZWxmLmRhc2hib2FyZF9wcmVmZXJlbmNlLnJlZ2lzdGVyKA0KKyAg ICAgICAgICAgICdkYXNoYm9hcmRzJywgJ21fc3RhdHNfcmVmcmVzaCcsDQorICAgICAgICAgICAg Z2V0dGV4dCgiTWVtb3J5IHVzYWdlIHN0YXRpc3RpY3MgcmVmcmVzaCByYXRlIiksICdpbnRlZ2Vy JywNCisgICAgICAgICAgICA1LCBtaW5fdmFsPTEsIG1heF92YWw9OTk5OTk5LA0KKyAgICAgICAg ICAgIGNhdGVnb3J5X2xhYmVsPVBSRUZfTEFCRUxfUkVGUkVTSF9SQVRFUywNCisgICAgICAgICAg ICBoZWxwX3N0cj1oZWxwX3N0cmluZw0KKyAgICAgICAgKQ0KKw0KKyAgICAgICAgc2VsZi5zbV9z dGF0c19yZWZyZXNoID0gc2VsZi5kYXNoYm9hcmRfcHJlZmVyZW5jZS5yZWdpc3RlcigNCisgICAg ICAgICAgICAnZGFzaGJvYXJkcycsICdzbV9zdGF0c19yZWZyZXNoJywNCisgICAgICAgICAgICBn ZXR0ZXh0KCJTd2FwIG1lbW9yeSB1c2FnZSBzdGF0aXN0aWNzIHJlZnJlc2ggcmF0ZSIpLCAnaW50 ZWdlcicsDQorICAgICAgICAgICAgNSwgbWluX3ZhbD0xLCBtYXhfdmFsPTk5OTk5OSwNCisgICAg ICAgICAgICBjYXRlZ29yeV9sYWJlbD1QUkVGX0xBQkVMX1JFRlJFU0hfUkFURVMsDQorICAgICAg ICAgICAgaGVscF9zdHI9aGVscF9zdHJpbmcNCisgICAgICAgICkNCisNCisgICAgICAgIHNlbGYu cG11X3N0YXRzX3JlZnJlc2ggPSBzZWxmLmRhc2hib2FyZF9wcmVmZXJlbmNlLnJlZ2lzdGVyKA0K KyAgICAgICAgICAgICdkYXNoYm9hcmRzJywgJ3BtdV9zdGF0c19yZWZyZXNoJywNCisgICAgICAg ICAgICBnZXR0ZXh0KCJNZW1vcnkgdXNhZ2UgcGVyIHByb2Nlc3Mgc3RhdGlzdGljcyByZWZyZXNo IHJhdGUiKSwNCisgICAgICAgICAgICAnaW50ZWdlcicsIDUsIG1pbl92YWw9MSwgbWF4X3ZhbD05 OTk5OTksDQorICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9UFJFRl9MQUJFTF9SRUZSRVNIX1JB VEVTLA0KKyAgICAgICAgICAgIGhlbHBfc3RyPWhlbHBfc3RyaW5nDQorICAgICAgICApDQorDQor ICAgICAgICBzZWxmLmlvX3N0YXRzX3JlZnJlc2ggPSBzZWxmLmRhc2hib2FyZF9wcmVmZXJlbmNl LnJlZ2lzdGVyKA0KKyAgICAgICAgICAgICdkYXNoYm9hcmRzJywgJ2lvX3N0YXRzX3JlZnJlc2gn LA0KKyAgICAgICAgICAgIGdldHRleHQoIkkvTyBhbmFseXNpcyBzdGF0aXN0aWNzIHJlZnJlc2gg cmF0ZSIpLCAnaW50ZWdlcicsDQorICAgICAgICAgICAgNSwgbWluX3ZhbD0xLCBtYXhfdmFsPTk5 OTk5OSwNCisgICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1QUkVGX0xBQkVMX1JFRlJFU0hfUkFU RVMsDQorICAgICAgICAgICAgaGVscF9zdHI9aGVscF9zdHJpbmcNCisgICAgICAgICkNCisNCiAg ICAgICAgIHNlbGYuZGlzcGxheV9ncmFwaHMgPSBzZWxmLmRhc2hib2FyZF9wcmVmZXJlbmNlLnJl Z2lzdGVyKA0KICAgICAgICAgICAgICdkaXNwbGF5JywgJ3Nob3dfZ3JhcGhzJywNCiAgICAgICAg ICAgICBnZXR0ZXh0KCJTaG93IGdyYXBocz8iKSwgJ2Jvb2xlYW4nLCBUcnVlLA0KQEAgLTE5Nyw2 ICsyNjMsMTIgQEAgY2xhc3MgRGFzaGJvYXJkTW9kdWxlKFBnQWRtaW5Nb2R1bGUpOg0KICAgICAg ICAgICAgICdkYXNoYm9hcmQuZ2V0X3ByZXBhcmVkX2J5X2RhdGFiYXNlX2lkJywNCiAgICAgICAg ICAgICAnZGFzaGJvYXJkLmNvbmZpZycsDQogICAgICAgICAgICAgJ2Rhc2hib2FyZC5nZXRfY29u ZmlnX2J5X3NlcnZlcl9pZCcsDQorICAgICAgICAgICAgJ2Rhc2hib2FyZC5jaGVja19zeXN0ZW1f c3RhdGlzdGljcycsDQorICAgICAgICAgICAgJ2Rhc2hib2FyZC5jaGVja19zeXN0ZW1fc3RhdGlz dGljc19zaWQnLA0KKyAgICAgICAgICAgICdkYXNoYm9hcmQuY2hlY2tfc3lzdGVtX3N0YXRpc3Rp Y3NfZGlkJywNCisgICAgICAgICAgICAnZGFzaGJvYXJkLnN5c3RlbV9zdGF0aXN0aWNzJywNCisg ICAgICAgICAgICAnZGFzaGJvYXJkLnN5c3RlbV9zdGF0aXN0aWNzX3NpZCcsDQorICAgICAgICAg ICAgJ2Rhc2hib2FyZC5zeXN0ZW1fc3RhdGlzdGljc19kaWQnLA0KICAgICAgICAgXQ0KIA0KIA0K QEAgLTUzNiwzICs2MDgsNjIgQEAgZGVmIHRlcm1pbmF0ZV9zZXNzaW9uKHNpZD1Ob25lLCBkaWQ9 Tm9uZSwgcGlkPU5vbmUpOg0KICAgICAgICAgcmVzcG9uc2U9Z2V0dGV4dCgiU3VjY2VzcyIpIGlm IHJlcyBlbHNlIGdldHRleHQoIkZhaWxlZCIpLA0KICAgICAgICAgc3RhdHVzPTIwMA0KICAgICAp DQorDQorDQorIyBUbyBjaGVjayB3aGV0aGVyIHN5c3RlbSBzdGF0cyBleHRlc2lvbiBpcyBwcmVz ZW50IG9yIG5vdA0KK0BibHVlcHJpbnQucm91dGUoJ2NoZWNrX2V4dGVuc2lvbi9zeXN0ZW1fc3Rh dGlzdGljcycsDQorICAgICAgICAgICAgICAgICBlbmRwb2ludD0nY2hlY2tfc3lzdGVtX3N0YXRp c3RpY3MnLCBtZXRob2RzPVsnR0VUJ10pDQorQGJsdWVwcmludC5yb3V0ZSgnY2hlY2tfZXh0ZW5z aW9uL3N5c3RlbV9zdGF0aXN0aWNzLzxpbnQ6c2lkPicsDQorICAgICAgICAgICAgICAgICBlbmRw b2ludD0nY2hlY2tfc3lzdGVtX3N0YXRpc3RpY3Nfc2lkJywgbWV0aG9kcz1bJ0dFVCddKQ0KK0Bi bHVlcHJpbnQucm91dGUoJ2NoZWNrX2V4dGVuc2lvbi9zeXN0ZW1fc3RhdGlzdGljcy88aW50OnNp ZD4vPGludDpkaWQ+JywNCisgICAgICAgICAgICAgICAgIGVuZHBvaW50PSdjaGVja19zeXN0ZW1f c3RhdGlzdGljc19kaWQnLCBtZXRob2RzPVsnR0VUJ10pDQorQGxvZ2luX3JlcXVpcmVkDQorQGNo ZWNrX3ByZWNvbmRpdGlvbg0KK2RlZiBjaGVja19zeXN0ZW1fc3RhdGlzdGljcyhzaWQ9Tm9uZSwg ZGlkPU5vbmUpOg0KKyAgICBzcWwgPSAiU0VMRUNUICogRlJPTSBwZ19leHRlbnNpb24gV0hFUkUg ZXh0bmFtZSA9ICdzeXN0ZW1fc3RhdHMnOyINCisgICAgc3RhdHVzLCByZXMgPSBnLmNvbm4uZXhl Y3V0ZV9zY2FsYXIoc3FsKQ0KKyAgICBpZiBub3Qgc3RhdHVzOg0KKyAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpDQorICAgIGRhdGEgPSB7fQ0KKyAgICBp ZiByZXMgaXMgbm90IE5vbmU6DQorICAgICAgICBkYXRhWydzc19wcmVzZW50J10gPSBUcnVlDQor ICAgIGVsc2U6DQorICAgICAgICBkYXRhWydzc19wcmVzZW50J10gPSBGYWxzZQ0KKyAgICByZXR1 cm4gYWpheF9yZXNwb25zZSgNCisgICAgICAgIHJlc3BvbnNlPWRhdGEsDQorICAgICAgICBzdGF0 dXM9MjAwDQorICAgICkNCisNCisNCisjIFN5c3RlbSBTdGF0aXN0aWNzIEJhY2tlbmQNCitAYmx1 ZXByaW50LnJvdXRlKCcvc3lzdGVtX3N0YXRpc3RpY3MnLA0KKyAgICAgICAgICAgICAgICAgZW5k cG9pbnQ9J3N5c3RlbV9zdGF0aXN0aWNzJywgbWV0aG9kcz1bJ0dFVCddKQ0KK0BibHVlcHJpbnQu cm91dGUoJy9zeXN0ZW1fc3RhdGlzdGljcy88aW50OnNpZD4nLA0KKyAgICAgICAgICAgICAgICAg ZW5kcG9pbnQ9J3N5c3RlbV9zdGF0aXN0aWNzX3NpZCcsIG1ldGhvZHM9WydHRVQnXSkNCitAYmx1 ZXByaW50LnJvdXRlKCcvc3lzdGVtX3N0YXRpc3RpY3MvPGludDpzaWQ+LzxpbnQ6ZGlkPicsDQor ICAgICAgICAgICAgICAgICBlbmRwb2ludD0nc3lzdGVtX3N0YXRpc3RpY3NfZGlkJywgbWV0aG9k cz1bJ0dFVCddKQ0KK0Bsb2dpbl9yZXF1aXJlZA0KK0BjaGVja19wcmVjb25kaXRpb24NCitkZWYg c3lzdGVtX3N0YXRpc3RpY3Moc2lkPU5vbmUsIGRpZD1Ob25lKToNCisgICAgcmVzcF9kYXRhID0g e30NCisNCisgICAgaWYgcmVxdWVzdC5hcmdzWydjaGFydF9uYW1lcyddICE9ICcnOg0KKyAgICAg ICAgY2hhcnRfbmFtZXMgPSByZXF1ZXN0LmFyZ3NbJ2NoYXJ0X25hbWVzJ10uc3BsaXQoJywnKQ0K Kw0KKyAgICAgICAgaWYgbm90IHNpZDoNCisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPSdTZXJ2ZXIgSUQgbm90IHNwZWNpZmllZC4nKQ0KKw0KKyAgICAg ICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKA0KKyAgICAgICAgICAgICIvIi5qb2luKFtnLnRlbXBs YXRlX3BhdGgsICdzeXN0ZW1fc3RhdGlzdGljcy5zcWwnXSksIGRpZD1kaWQsDQorICAgICAgICAg ICAgY2hhcnRfbmFtZXM9Y2hhcnRfbmFtZXMsDQorICAgICAgICApDQorICAgICAgICBzdGF0dXMs IHJlcyA9IGcuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQ0KKw0KKyAgICAgICAgZm9yIGNoYXJ0X3Jv dyBpbiByZXNbJ3Jvd3MnXToNCisgICAgICAgICAgICByZXNwX2RhdGFbY2hhcnRfcm93WydjaGFy dF9uYW1lJ11dID0ganNvbi5sb2FkcygNCisgICAgICAgICAgICAgICAgY2hhcnRfcm93WydjaGFy dF9kYXRhJ10pDQorDQorICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKA0KKyAgICAgICAgcmVzcG9u c2U9cmVzcF9kYXRhLA0KKyAgICAgICAgc3RhdHVzPTIwMA0KKyAgICApDQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9EYXNoYm9hcmQuanN4IGIvd2ViL3BnYWRt aW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9EYXNoYm9hcmQuanN4DQppbmRleCA3MTk0ZmNjMTAuLmEw MzJmZWRlYyAxMDA2NDQNCi0tLSBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvRGFz aGJvYXJkLmpzeA0KKysrIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9EYXNoYm9h cmQuanN4DQpAQCAtMjksNiArMjksMTAgQEAgaW1wb3J0IF8gZnJvbSAnbG9kYXNoJzsNCiBpbXBv cnQgQ2FjaGVkT3V0bGluZWRJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9DYWNoZWRPdXRs aW5lZCc7DQogaW1wb3J0IEVtcHR5UGFuZWxNZXNzYWdlIGZyb20gJy4uLy4uLy4uL3N0YXRpYy9q cy9jb21wb25lbnRzL0VtcHR5UGFuZWxNZXNzYWdlJzsNCiBpbXBvcnQgVGFiUGFuZWwgZnJvbSAn Li4vLi4vLi4vc3RhdGljL2pzL2NvbXBvbmVudHMvVGFiUGFuZWwnOw0KK2ltcG9ydCBTdW1tYXJ5 IGZyb20gJ1N5c3RlbVN0YXRzL1N1bW1hcnknOw0KK2ltcG9ydCBDUFUgZnJvbSAnU3lzdGVtU3Rh dHMvQ1BVJzsNCitpbXBvcnQgTWVtb3J5IGZyb20gJ1N5c3RlbVN0YXRzL01lbW9yeSc7DQoraW1w b3J0IFN0b3JhZ2UgZnJvbSAnU3lzdGVtU3RhdHMvU3RvcmFnZSc7DQogDQogZnVuY3Rpb24gcGFy c2VEYXRhKGRhdGEpIHsNCiAgIGxldCByZXMgPSBbXTsNCkBAIC0xNDgsMTIgKzE1MiwyMSBAQCBl eHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXNoYm9hcmQoew0KIH0pIHsNCiAgIGNvbnN0IGNsYXNz ZXMgPSB1c2VTdHlsZXMoKTsNCiAgIGxldCB0YWJzID0gW2dldHRleHQoJ1Nlc3Npb25zJyksIGdl dHRleHQoJ0xvY2tzJyksIGdldHRleHQoJ1ByZXBhcmVkIFRyYW5zYWN0aW9ucycpXTsNCisgIGxl dCBtYWluVGFicyA9IFtnZXR0ZXh0KCdHZW5lcmFsJyksIGdldHRleHQoJ1N5c3RlbSBTdGF0aXN0 aWNzJyldOw0KKyAgbGV0IHN5c3RlbVN0YXRzVGFicyA9IFtnZXR0ZXh0KCdTdW1tYXJ5JyksIGdl dHRleHQoJ0NQVScpLCBnZXR0ZXh0KCdNZW1vcnknKSwgZ2V0dGV4dCgnU3RvcmFnZScpXTsNCiAg IGNvbnN0IFtkYXNoRGF0YSwgc2V0ZGFzaERhdGFdID0gdXNlU3RhdGUoW10pOw0KICAgY29uc3Qg W21zZywgc2V0TXNnXSA9IHVzZVN0YXRlKCcnKTsNCisgIGNvbnN0IFtzc01zZywgc2V0U3NNc2dd ID0gdXNlU3RhdGUoJycpOw0KICAgY29uc3QgW3RhYlZhbCwgc2V0VGFiVmFsXSA9IHVzZVN0YXRl KDApOw0KKyAgY29uc3QgW21haW5UYWJWYWwsIHNldG1haW5UYWJWYWxdID0gdXNlU3RhdGUoMCk7 DQogICBjb25zdCBbcmVmcmVzaCwgc2V0UmVmcmVzaF0gPSB1c2VTdGF0ZShmYWxzZSk7DQogICBj b25zdCBbYWN0aXZlT25seSwgc2V0QWN0aXZlT25seV0gPSB1c2VTdGF0ZShmYWxzZSk7DQogICBj b25zdCBbc2NoZW1hRGljdCwgc2V0U2NoZW1hRGljdF0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7DQor ICBjb25zdCBbc3lzdGVtU3RhdHNUYWJWYWwsIHNldFN5c3RlbVN0YXRzVGFiVmFsXSA9IHVzZVN0 YXRlKDApOw0KKyAgICAgIA0KKyAgY29uc3Qgc3lzdGVtU3RhdHNUYWJDaGFuZ2VkID0gKGUsIHRh YlZhbCkgPT4gew0KKyAgICBzZXRTeXN0ZW1TdGF0c1RhYlZhbCh0YWJWYWwpOw0KKyAgfTsNCiAN CiAgIGlmICghZGlkKSB7DQogICAgIHRhYnMucHVzaChnZXR0ZXh0KCdDb25maWd1cmF0aW9uJykp Ow0KQEAgLTE2Myw2ICsxNzYsMTAgQEAgZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGFzaGJvYXJk KHsNCiAgICAgc2V0VGFiVmFsKHRhYlZhbCk7DQogICB9Ow0KIA0KKyAgY29uc3QgbWFpblRhYkNo YW5nZWQgPSAoZSwgdGFiVmFsKSA9PiB7DQorICAgIHNldG1haW5UYWJWYWwodGFiVmFsKTsNCisg IH07DQorDQogICBjb25zdCBzZXJ2ZXJDb25maWdDb2x1bW5zID0gWw0KICAgICB7DQogICAgICAg YWNjZXNzb3I6ICduYW1lJywNCkBAIC03NDUsNiArNzYyLDcgQEAgZXhwb3J0IGRlZmF1bHQgZnVu Y3Rpb24gRGFzaGJvYXJkKHsNCiANCiAgIHVzZUVmZmVjdCgoKSA9PiB7DQogICAgIGxldCB1cmws DQorICAgICAgc3NfZXh0ZW5zaW9uX2NoZWNrX3VybCA9IHVybF9mb3IoJ2Rhc2hib2FyZC5jaGVj a19zeXN0ZW1fc3RhdGlzdGljcycpLA0KICAgICAgIG1lc3NhZ2UgPSBnZXR0ZXh0KA0KICAgICAg ICAgJ1BsZWFzZSBjb25uZWN0IHRvIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgdG8gdmlldyB0aGUgZGFz aGJvYXJkLicNCiAgICAgICApOw0KQEAgLTc3MCw2ICs3ODgsMTAgQEAgZXhwb3J0IGRlZmF1bHQg ZnVuY3Rpb24gRGFzaGJvYXJkKHsNCiAgICAgICBpZiAoZGlkKSB1cmwgKz0gc2lkICsgJy8nICsg ZGlkOw0KICAgICAgIGVsc2UgdXJsICs9IHNpZDsNCiANCisgICAgICBpZiAoZGlkICYmICFwcm9w cy5kYkNvbm5lY3RlZCkgcmV0dXJuOw0KKyAgICAgIGlmIChkaWQpIHNzX2V4dGVuc2lvbl9jaGVj a191cmwgKz0gJy8nICsgc2lkICsgJy8nICsgZGlkOw0KKyAgICAgIGVsc2Ugc3NfZXh0ZW5zaW9u X2NoZWNrX3VybCArPSAnLycgKyBzaWQ7DQorDQogICAgICAgY29uc3QgYXBpID0gZ2V0QXBpSW5z dGFuY2UoKTsNCiAgICAgICBpZiAobm9kZSkgew0KICAgICAgICAgYXBpKHsNCkBAIC03ODcsNiAr ODA5LDIwIEBAIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhc2hib2FyZCh7DQogICAgICAgICAg ICAgLy8gc2hvdyBmYWlsZWQgbWVzc2FnZS4NCiAgICAgICAgICAgICBzZXRNc2coZ2V0dGV4dCgn RmFpbGVkIHRvIHJldHJpZXZlIGRhdGEgZnJvbSB0aGUgc2VydmVyLicpKTsNCiAgICAgICAgICAg fSk7DQorICAgICAgICANCisgICAgICAgIGFwaSh7DQorICAgICAgICAgIHVybDogc3NfZXh0ZW5z aW9uX2NoZWNrX3VybCwNCisgICAgICAgICAgdHlwZTogJ0dFVCcsDQorICAgICAgICB9KQ0KKyAg ICAgICAgICAudGhlbigocmVzKSA9PiB7DQorICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlcy5k YXRhOw0KKyAgICAgICAgICAgIGlmKGRhdGFbJ3NzX3ByZXNlbnQnXSA9PSBmYWxzZSl7DQorICAg ICAgICAgICAgICBzZXRTc01zZyhnZXR0ZXh0KCdTeXN0ZW0gc3RhdHMgZXh0ZW5zaW9uIGlzIG5v dCBpbnN0YWxsZWQuIFlvdSBjYW4gaW5zdGFsbCB0aGUgZXh0ZW5zaW9uIGluIGEgZGF0YWJhc2Ug dXNpbmcgdGhlICJDUkVBVEUgRVhURU5TSU9OIHN5c3RlbV9zdGF0czsiIFNRTCBjb21tYW5kLiBS ZWxvYWQgdGhlIHBnQWRtaW4gb25jZSB5b3UgaW5zdGFsbGVkLicpKTsNCisgICAgICAgICAgICB9 DQorICAgICAgICAgIH0pDQorICAgICAgICAgIC5jYXRjaCgoKSA9PiB7DQorICAgICAgICAgICAg c2V0U3NNc2coZ2V0dGV4dCgnRmFpbGVkIHRvIHZlcmlmeSB0aGUgcHJlc2VuY2Ugb2Ygc3lzdGVt IHN0YXRzIGV4dGVuc2lvbi4nKSk7DQorICAgICAgICAgIH0pOw0KICAgICAgIH0gZWxzZSB7DQog ICAgICAgICBzZXRNc2cobWVzc2FnZSk7DQogICAgICAgfQ0KQEAgLTg2Nyw2OCArOTAzLDE0OCBA QCBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXNoYm9hcmQoew0KICAgICAgIHtzaWQgJiYgcHJv cHMuc2VydmVyQ29ubmVjdGVkID8gKA0KICAgICAgICAgPEJveCBjbGFzc05hbWU9e2NsYXNzZXMu ZGFzaGJvYXJkUGFuZWx9Pg0KICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17Y2xhc3Nlcy5lbXB0 eVBhbmVsfT4NCi0gICAgICAgICAgICB7IV8uaXNVbmRlZmluZWQocHJlZmVyZW5jZXMpICYmIHBy ZWZlcmVuY2VzLnNob3dfZ3JhcGhzICYmICgNCi0gICAgICAgICAgICAgIDxHcmFwaHMNCi0gICAg ICAgICAgICAgICAga2V5PXtzaWQgKyBkaWR9DQotICAgICAgICAgICAgICAgIHByZWZlcmVuY2Vz PXtwcmVmZXJlbmNlc30NCi0gICAgICAgICAgICAgICAgc2lkPXtzaWR9DQotICAgICAgICAgICAg ICAgIGRpZD17ZGlkfQ0KLSAgICAgICAgICAgICAgICBwYWdlVmlzaWJsZT17cHJvcHMucGFuZWxW aXNpYmxlfQ0KLSAgICAgICAgICAgICAgPjwvR3JhcGhzPg0KLSAgICAgICAgICAgICl9DQotICAg ICAgICAgICAgeyFfLmlzVW5kZWZpbmVkKHByZWZlcmVuY2VzKSAmJiBwcmVmZXJlbmNlcy5zaG93 X2FjdGl2aXR5ICYmICgNCi0gICAgICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtjbGFzc2VzLnBh bmVsQ29udGVudH0+DQotICAgICAgICAgICAgICAgIDxCb3gNCi0gICAgICAgICAgICAgICAgICBj bGFzc05hbWU9e2NsYXNzZXMuY2FyZEhlYWRlcn0NCi0gICAgICAgICAgICAgICAgICB0aXRsZT17 cHJvcHMuZGJDb25uZWN0ZWQgPyAgZ2V0dGV4dCgnRGF0YWJhc2UgYWN0aXZpdHknKSA6IGdldHRl eHQoJ1NlcnZlciBhY3Rpdml0eScpfQ0KLSAgICAgICAgICAgICAgICA+DQotICAgICAgICAgICAg ICAgICAge3Byb3BzLmRiQ29ubmVjdGVkID8gIGdldHRleHQoJ0RhdGFiYXNlIGFjdGl2aXR5Jykg OiBnZXR0ZXh0KCdTZXJ2ZXIgYWN0aXZpdHknKX17JyAnfQ0KKyAgICAgICAgICAgIDxCb3ggY2xh c3NOYW1lPXtjbGFzc2VzLnBhbmVsQ29udGVudH0+DQorICAgICAgICAgICAgICA8Qm94IGhlaWdo dD0iMTAwJSIgZGlzcGxheT0iZmxleCIgZmxleERpcmVjdGlvbj0iY29sdW1uIj4NCisgICAgICAg ICAgICAgICAgPEJveD4NCisgICAgICAgICAgICAgICAgICA8VGFicw0KKyAgICAgICAgICAgICAg ICAgICAgdmFsdWU9e21haW5UYWJWYWx9DQorICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17 bWFpblRhYkNoYW5nZWR9DQorICAgICAgICAgICAgICAgICAgPg0KKyAgICAgICAgICAgICAgICAg ICAge21haW5UYWJzLm1hcCgodGFiVmFsdWUpID0+IHsNCisgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIDxUYWIga2V5PXt0YWJWYWx1ZX0gbGFiZWw9e3RhYlZhbHVlfSAvPjsNCisgICAgICAg ICAgICAgICAgICAgIH0pfQ0KKyAgICAgICAgICAgICAgICAgICAgPFJlZnJlc2hCdXR0b24vPg0K KyAgICAgICAgICAgICAgICAgIDwvVGFicz4NCiAgICAgICAgICAgICAgICAgPC9Cb3g+DQotICAg ICAgICAgICAgICAgIDxCb3ggaGVpZ2h0PSIxMDAlIiBkaXNwbGF5PSJmbGV4IiBmbGV4RGlyZWN0 aW9uPSJjb2x1bW4iPg0KLSAgICAgICAgICAgICAgICAgIDxCb3g+DQotICAgICAgICAgICAgICAg ICAgICA8VGFicw0KLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGFiVmFsfQ0KLSAgICAg ICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGFiQ2hhbmdlZH0NCi0gICAgICAgICAgICAgICAg ICAgID4NCi0gICAgICAgICAgICAgICAgICAgICAge3RhYnMubWFwKCh0YWJWYWx1ZSkgPT4gew0K LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8VGFiIGtleT17dGFiVmFsdWV9IGxhYmVs PXt0YWJWYWx1ZX0gLz47DQotICAgICAgICAgICAgICAgICAgICAgIH0pfQ0KLSAgICAgICAgICAg ICAgICAgICAgICA8UmVmcmVzaEJ1dHRvbi8+DQotICAgICAgICAgICAgICAgICAgICA8L1RhYnM+ DQorICAgICAgICAgICAgICAgIHsvKiBHZW5lcmFsIFN0YXRpc3RpY3MgKi99DQorICAgICAgICAg ICAgICAgIDxUYWJQYW5lbCB2YWx1ZT17bWFpblRhYlZhbH0gaW5kZXg9ezB9IGNsYXNzTmFtZVJv b3Q9e2NsYXNzZXMudGFiUGFuZWx9Pg0KKyAgICAgICAgICAgICAgICAgIHshXy5pc1VuZGVmaW5l ZChwcmVmZXJlbmNlcykgJiYgcHJlZmVyZW5jZXMuc2hvd19ncmFwaHMgJiYgKA0KKyAgICAgICAg ICAgICAgICAgICAgPEdyYXBocw0KKyAgICAgICAgICAgICAgICAgICAgICBrZXk9e3NpZCArIGRp ZH0NCisgICAgICAgICAgICAgICAgICAgICAgcHJlZmVyZW5jZXM9e3ByZWZlcmVuY2VzfQ0KKyAg ICAgICAgICAgICAgICAgICAgICBzaWQ9e3NpZH0NCisgICAgICAgICAgICAgICAgICAgICAgZGlk PXtkaWR9DQorICAgICAgICAgICAgICAgICAgICAgIHBhZ2VWaXNpYmxlPXtwcm9wcy5wYW5lbFZp c2libGV9DQorICAgICAgICAgICAgICAgICAgICA+PC9HcmFwaHM+DQorICAgICAgICAgICAgICAg ICAgKX0NCisgICAgICAgICAgICAgICAgICB7IV8uaXNVbmRlZmluZWQocHJlZmVyZW5jZXMpICYm IHByZWZlcmVuY2VzLnNob3dfYWN0aXZpdHkgJiYgKA0KKyAgICAgICAgICAgICAgICAgICAgPEJv eCBjbGFzc05hbWU9e2NsYXNzZXMucGFuZWxDb250ZW50fT4NCisgICAgICAgICAgICAgICAgICAg ICAgPEJveA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5jYXJk SGVhZGVyfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtwcm9wcy5kYkNvbm5lY3Rl ZCA/ICBnZXR0ZXh0KCdEYXRhYmFzZSBhY3Rpdml0eScpIDogZ2V0dGV4dCgnU2VydmVyIGFjdGl2 aXR5Jyl9DQorICAgICAgICAgICAgICAgICAgICAgID4NCisgICAgICAgICAgICAgICAgICAgICAg ICB7cHJvcHMuZGJDb25uZWN0ZWQgPyAgZ2V0dGV4dCgnRGF0YWJhc2UgYWN0aXZpdHknKSA6IGdl dHRleHQoJ1NlcnZlciBhY3Rpdml0eScpfXsnICd9DQorICAgICAgICAgICAgICAgICAgICAgIDwv Qm94Pg0KKyAgICAgICAgICAgICAgICAgICAgICA8Qm94IGhlaWdodD0iMTAwJSIgZGlzcGxheT0i ZmxleCIgZmxleERpcmVjdGlvbj0iY29sdW1uIj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8 Qm94Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYnMNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWU9e3RhYlZhbH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg b25DaGFuZ2U9e3RhYkNoYW5nZWR9DQorICAgICAgICAgICAgICAgICAgICAgICAgICA+DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHt0YWJzLm1hcCgodGFiVmFsdWUpID0+IHsNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPFRhYiBrZXk9e3RhYlZhbHVlfSBsYWJl bD17dGFiVmFsdWV9IC8+Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX0NCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPFJlZnJlc2hCdXR0b24vPg0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgPC9UYWJzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94Pg0KKyAg ICAgICAgICAgICAgICAgICAgICAgIDxUYWJQYW5lbCB2YWx1ZT17dGFiVmFsfSBpbmRleD17MH0g Y2xhc3NOYW1lUm9vdD17Y2xhc3Nlcy50YWJQYW5lbH0+DQorICAgICAgICAgICAgICAgICAgICAg ICAgICA8UGdUYWJsZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXZlVGFibGU9e2Zh bHNlfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21IZWFkZXI9e0N1c3RvbUFj dGl2ZU9ubHlIZWFkZXJ9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e2Fj dGl2aXR5Q29sdW1uc30NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT17ZmlsdGVy ZWREYXNoRGF0YX0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPXtzY2hlbWFE aWN0fQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvUGdUYWJsZT4NCisgICAgICAgICAg ICAgICAgICAgICAgICA8L1RhYlBhbmVsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJQ YW5lbCB2YWx1ZT17dGFiVmFsfSBpbmRleD17MX0gY2xhc3NOYW1lUm9vdD17Y2xhc3Nlcy50YWJQ YW5lbH0+DQorICAgICAgICAgICAgICAgICAgICAgICAgICA8UGdUYWJsZQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXZlVGFibGU9e2ZhbHNlfQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb2x1bW5zPXtkYXRhYmFzZUxvY2tzQ29sdW1uc30NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YT17ZGFzaERhdGF9DQorICAgICAgICAgICAgICAgICAgICAgICAgICA+ PC9QZ1RhYmxlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFiUGFuZWw+DQorICAgICAg ICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXt0YWJWYWx9IGluZGV4PXsyfSBjbGFz c05hbWVSb290PXtjbGFzc2VzLnRhYlBhbmVsfT4NCisgICAgICAgICAgICAgICAgICAgICAgICAg IDxQZ1RhYmxlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdmVUYWJsZT17ZmFsc2V9 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e2RhdGFiYXNlUHJlcGFyZWRD b2x1bW5zfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXtkYXNoRGF0YX0NCisg ICAgICAgICAgICAgICAgICAgICAgICAgID48L1BnVGFibGU+DQorICAgICAgICAgICAgICAgICAg ICAgICAgPC9UYWJQYW5lbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8VGFiUGFuZWwgdmFs dWU9e3RhYlZhbH0gaW5kZXg9ezN9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9Pg0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgPFBnVGFibGUNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2F2ZVRhYmxlPXtmYWxzZX0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29sdW1ucz17c2VydmVyQ29uZmlnQ29sdW1uc30NCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YT17ZGFzaERhdGF9DQorICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9QZ1RhYmxl Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFiUGFuZWw+DQorICAgICAgICAgICAgICAg ICAgICAgIDwvQm94Pg0KKyAgICAgICAgICAgICAgICAgICAgPC9Cb3g+DQorICAgICAgICAgICAg ICAgICAgKX0NCisgICAgICAgICAgICAgICAgPC9UYWJQYW5lbD4NCisgICAgICAgICAgICAgICAg ey8qIFN5c3RlbSBTdGF0aXN0aWNzICovfQ0KKyAgICAgICAgICAgICAgICA8VGFiUGFuZWwgdmFs dWU9e21haW5UYWJWYWx9IGluZGV4PXsxfSBjbGFzc05hbWVSb290PXtjbGFzc2VzLnRhYlBhbmVs fT4NCisgICAgICAgICAgICAgICAgICA8Qm94IGhlaWdodD0iMTAwJSIgZGlzcGxheT0iZmxleCIg ZmxleERpcmVjdGlvbj0iY29sdW1uIj4NCisgICAgICAgICAgICAgICAgICAgIHtzc01zZyA9PT0g JycgPyANCisgICAgICAgICAgICAgICAgICAgICAgPD4gICAgICAgICAgICAgICAgICAgDQorICAg ICAgICAgICAgICAgICAgICAgICAgPEJveD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxU YWJzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzeXN0ZW1TdGF0c1RhYlZh bH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3N5c3RlbVN0YXRzVGFi Q2hhbmdlZH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgID4NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAge3N5c3RlbVN0YXRzVGFicy5tYXAoKHRhYlZhbHVlKSA9PiB7DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxUYWIga2V5PXt0YWJWYWx1ZX0gbGFiZWw9 e3RhYlZhbHVlfSAvPjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9DQorICAgICAg ICAgICAgICAgICAgICAgICAgICA8L1RhYnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9C b3g+DQorICAgICAgICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXtzeXN0ZW1TdGF0 c1RhYlZhbH0gaW5kZXg9ezB9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9Pg0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgPFN1bW1hcnkNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAga2V5PXtzaWQgKyBkaWR9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZl cmVuY2VzPXtwcmVmZXJlbmNlc30NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkPXtz aWR9IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9e2RpZH0NCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGFnZVZpc2libGU9e3Byb3BzLnBhbmVsVmlzaWJsZX0NCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29ubmVjdGVkPXtwcm9wcy5zZXJ2ZXJDb25u ZWN0ZWR9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAvPg0KKyAgICAgICAgICAgICAgICAg ICAgICAgIDwvVGFiUGFuZWw+DQorICAgICAgICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZh bHVlPXtzeXN0ZW1TdGF0c1RhYlZhbH0gaW5kZXg9ezF9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMu dGFiUGFuZWx9Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPENQVQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBrZXk9e3NpZCArIGRpZH0NCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJlZmVyZW5jZXM9e3ByZWZlcmVuY2VzfQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaWQ9e3NpZH0gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD17ZGlkfQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlVmlzaWJsZT17cHJvcHMucGFuZWxWaXNp YmxlfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25uZWN0ZWQ9e3Byb3Bz LnNlcnZlckNvbm5lY3RlZH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8+DQorICAgICAg ICAgICAgICAgICAgICAgICAgPC9UYWJQYW5lbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8 VGFiUGFuZWwgdmFsdWU9e3N5c3RlbVN0YXRzVGFiVmFsfSBpbmRleD17Mn0gY2xhc3NOYW1lUm9v dD17Y2xhc3Nlcy50YWJQYW5lbH0+DQorICAgICAgICAgICAgICAgICAgICAgICAgICA8TWVtb3J5 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17c2lkICsgZGlkfQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmVmZXJlbmNlcz17cHJlZmVyZW5jZXN9DQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpZD17c2lkfSANCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGlkPXtkaWR9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VWaXNpYmxlPXtw cm9wcy5wYW5lbFZpc2libGV9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNv bm5lY3RlZD17cHJvcHMuc2VydmVyQ29ubmVjdGVkfQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgLz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYlBhbmVsPg0KKyAgICAgICAgICAg ICAgICAgICAgICAgIDxUYWJQYW5lbCB2YWx1ZT17c3lzdGVtU3RhdHNUYWJWYWx9IGluZGV4PXsz fSBjbGFzc05hbWVSb290PXtjbGFzc2VzLnRhYlBhbmVsfT4NCisgICAgICAgICAgICAgICAgICAg ICAgICAgIDxTdG9yYWdlIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3NpZCAr IGRpZH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVyZW5jZXM9e3ByZWZlcmVu Y2VzfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWQ9e3NpZH0gDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRpZD17ZGlkfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYWdlVmlzaWJsZT17cHJvcHMucGFuZWxWaXNpYmxlfQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZXJ2ZXJDb25uZWN0ZWQ9e3Byb3BzLnNlcnZlckNvbm5lY3RlZH0NCisgICAgICAg ICAgICAgICAgICAgICAgICAgIC8+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJQYW5l bD4NCisgICAgICAgICAgICAgICAgICAgICAgPC8+IDogDQorICAgICAgICAgICAgICAgICAgICAg IDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmVtcHR5UGFuZWx9Pg0KKyAgICAgICAgICAgICAgICAg ICAgICAgIDxFbXB0eVBhbmVsTWVzc2FnZSB0ZXh0PXtzc01zZ30vPg0KKyAgICAgICAgICAgICAg ICAgICAgICA8L2Rpdj4NCisgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg ICA8L0JveD4NCi0gICAgICAgICAgICAgICAgICA8VGFiUGFuZWwgdmFsdWU9e3RhYlZhbH0gaW5k ZXg9ezB9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9Pg0KLSAgICAgICAgICAgICAg ICAgICAgPFBnVGFibGUNCi0gICAgICAgICAgICAgICAgICAgICAgY2F2ZVRhYmxlPXtmYWxzZX0N Ci0gICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tSGVhZGVyPXtDdXN0b21BY3RpdmVPbmx5SGVh ZGVyfQ0KLSAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zPXthY3Rpdml0eUNvbHVtbnN9DQot ICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e2ZpbHRlcmVkRGFzaERhdGF9DQotICAgICAgICAg ICAgICAgICAgICAgIHNjaGVtYT17c2NoZW1hRGljdH0NCi0gICAgICAgICAgICAgICAgICAgID48 L1BnVGFibGU+DQotICAgICAgICAgICAgICAgICAgPC9UYWJQYW5lbD4NCi0gICAgICAgICAgICAg ICAgICA8VGFiUGFuZWwgdmFsdWU9e3RhYlZhbH0gaW5kZXg9ezF9IGNsYXNzTmFtZVJvb3Q9e2Ns YXNzZXMudGFiUGFuZWx9Pg0KLSAgICAgICAgICAgICAgICAgICAgPFBnVGFibGUNCi0gICAgICAg ICAgICAgICAgICAgICAgY2F2ZVRhYmxlPXtmYWxzZX0NCi0gICAgICAgICAgICAgICAgICAgICAg Y29sdW1ucz17ZGF0YWJhc2VMb2Nrc0NvbHVtbnN9DQotICAgICAgICAgICAgICAgICAgICAgIGRh dGE9e2Rhc2hEYXRhfQ0KLSAgICAgICAgICAgICAgICAgICAgPjwvUGdUYWJsZT4NCi0gICAgICAg ICAgICAgICAgICA8L1RhYlBhbmVsPg0KLSAgICAgICAgICAgICAgICAgIDxUYWJQYW5lbCB2YWx1 ZT17dGFiVmFsfSBpbmRleD17Mn0gY2xhc3NOYW1lUm9vdD17Y2xhc3Nlcy50YWJQYW5lbH0+DQot ICAgICAgICAgICAgICAgICAgICA8UGdUYWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgICBjYXZl VGFibGU9e2ZhbHNlfQ0KLSAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zPXtkYXRhYmFzZVBy ZXBhcmVkQ29sdW1uc30NCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YT17ZGFzaERhdGF9DQot ICAgICAgICAgICAgICAgICAgICA+PC9QZ1RhYmxlPg0KLSAgICAgICAgICAgICAgICAgIDwvVGFi UGFuZWw+DQotICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXt0YWJWYWx9IGluZGV4 PXszfSBjbGFzc05hbWVSb290PXtjbGFzc2VzLnRhYlBhbmVsfT4NCi0gICAgICAgICAgICAgICAg ICAgIDxQZ1RhYmxlDQotICAgICAgICAgICAgICAgICAgICAgIGNhdmVUYWJsZT17ZmFsc2V9DQot ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e3NlcnZlckNvbmZpZ0NvbHVtbnN9DQotICAg ICAgICAgICAgICAgICAgICAgIGRhdGE9e2Rhc2hEYXRhfQ0KLSAgICAgICAgICAgICAgICAgICAg PjwvUGdUYWJsZT4NCi0gICAgICAgICAgICAgICAgICA8L1RhYlBhbmVsPg0KLSAgICAgICAgICAg ICAgICA8L0JveD4NCisgICAgICAgICAgICAgICAgPC9UYWJQYW5lbD4NCiAgICAgICAgICAgICAg IDwvQm94Pg0KLSAgICAgICAgICAgICl9DQorICAgICAgICAgICAgPC9Cb3g+DQogICAgICAgICAg IDwvQm94Pg0KICAgICAgICAgPC9Cb3g+DQogICAgICAgKSA6IHNob3dEZWZhdWx0Q29udGVudHMo KSB9DQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1T dGF0cy9DUFUuanN4IGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0 cy9DUFUuanN4DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwLi5lZGM4Mjdi ZmENCi0tLSAvZGV2L251bGwNCisrKyBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMv U3lzdGVtU3RhdHMvQ1BVLmpzeA0KQEAgLTAsMCArMSwzNjggQEANCitpbXBvcnQgUmVhY3QsIHsg dXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VSZWR1Y2VyLCB1c2VNZW1vIH0gZnJvbSAn cmVhY3QnOw0KK2ltcG9ydCBQZ1RhYmxlIGZyb20gJ3NvdXJjZXMvY29tcG9uZW50cy9QZ1RhYmxl JzsNCitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOw0KK2ltcG9ydCBQcm9w VHlwZXMgZnJvbSAncHJvcC10eXBlcyc7DQoraW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZyb20gJ0Bt YXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7DQoraW1wb3J0IHVybF9mb3IgZnJvbSAnc291cmNlcy91 cmxfZm9yJzsNCitpbXBvcnQge2dldEdDRCwgZ2V0RXBvY2h9IGZyb20gJ3NvdXJjZXMvdXRpbHMn Ow0KK2ltcG9ydCB7Q2hhcnRDb250YWluZXJ9IGZyb20gJy4uL0Rhc2hib2FyZCc7DQoraW1wb3J0 IHsgR3JpZCB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlJzsNCitpbXBvcnQgeyBEQVRBX1BPSU5U X1NJWkUgfSBmcm9tICdzb3VyY2VzL2NoYXJ0anMnOw0KK2ltcG9ydCBTdHJlYW1pbmdDaGFydCBm cm9tICcuLi8uLi8uLi8uLi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWluZ0No YXJ0JzsNCitpbXBvcnQge3VzZUludGVydmFsLCB1c2VQcmV2aW91c30gZnJvbSAnc291cmNlcy9j dXN0b21faG9va3MnOw0KK2ltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7DQorDQorZXhwb3J0IGNv bnN0IFhfQVhJU19MRU5HVEggPSA3NTsNCisNCitjb25zdCB1c2VTdHlsZXMgPSBtYWtlU3R5bGVz KCh0aGVtZSkgPT4gKHsNCisgIGF1dG9SZXNpemVyOiB7DQorICAgIGhlaWdodDogJzEwMCUgIWlt cG9ydGFudCcsDQorICAgIHdpZHRoOiAnMTAwJSAhaW1wb3J0YW50JywNCisgICAgYmFja2dyb3Vu ZDogdGhlbWUucGFsZXR0ZS5ncmV5WzQwMF0sDQorICAgIHBhZGRpbmc6ICc3LjVweCcsDQorICAg IG92ZXJmbG93WDogJ2F1dG8gIWltcG9ydGFudCcsDQorICAgIG92ZXJmbG93WTogJ2hpZGRlbiAh aW1wb3J0YW50JywNCisgICAgbWluSGVpZ2h0OiAnMTAwJScsDQorICAgIG1pbldpZHRoOiAnMTAw JScsDQorICB9LA0KKyAgY29udGFpbmVyOiB7DQorICAgIGhlaWdodDogJ2F1dG8nLA0KKyAgICBi YWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdyZXlbMjAwXSwNCisgICAgcGFkZGluZzogJzEwcHgn LA0KKyAgICBtYXJnaW5Cb3R0b206ICczMHB4JywNCisgIH0sDQorICBmaXhlZENvbnRhaW5lcjog ew0KKyAgICBoZWlnaHQ6ICc1NzdweCcsDQorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUu Z3JleVsyMDBdLA0KKyAgICBwYWRkaW5nOiAnMTBweCcsDQorICAgIG1hcmdpbkJvdHRvbTogJzMw cHgnLA0KKyAgfSwNCisgIGNvbnRhaW5lckhlYWRlcjogew0KKyAgICBmb250U2l6ZTogJzE2cHgn LA0KKyAgICBmb250V2VpZ2h0OiAnYm9sZCcsDQorICAgIG1hcmdpbkJvdHRvbTogJzVweCcsDQor ICB9DQorfSkpOw0KKw0KK2V4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeXRlcyhieXRlcykgew0KKyAg Y29uc3QgdW5pdHMgPSBbIkIiLCAiS0IiLCAiTUIiLCAiR0IiLCAiVEIiXTsNCisgIGxldCB1bml0 SW5kZXggPSAwOw0KKw0KKyAgd2hpbGUgKGJ5dGVzID49IDEwMjQgJiYgdW5pdEluZGV4IDwgdW5p dHMubGVuZ3RoIC0gMSkgew0KKyAgICBieXRlcyAvPSAxMDI0Ow0KKyAgICB1bml0SW5kZXgrKzsN CisgIH0NCisNCisgIHJldHVybiBgJHtieXRlcy50b0ZpeGVkKDIpfSAke3VuaXRzW3VuaXRJbmRl eF19YDsNCit9DQorDQorZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEobGFiZWxzLCByZWZy ZXNoUmF0ZSkgew0KKyAgY29uc3QgY29sb3JzID0gWycjRkY2Mzg0JywnIzM2QTJFQicsJyNGRkNF NTYnLCcjNEJDMEMwJywnIzk5NjZGRicsJyNGRjlGNDAnLCcjOEQ2RTYzJywnIzIxOTZGMycsJyNG RkVCM0InLCcjOUMyN0IwJywnIzAwQkNENCcsJyNDRERDMzknXTsNCisgIGxldCBkYXRhc2V0cyA9 IE9iamVjdC5rZXlzKGxhYmVscykubWFwKChsYWJlbCwgaSk9PnsNCisgICAgcmV0dXJuIHsNCisg ICAgICBsYWJlbDogbGFiZWwsDQorICAgICAgZGF0YTogbGFiZWxzW2xhYmVsXSB8fCBbXSwNCisg ICAgICBib3JkZXJDb2xvcjogY29sb3JzW2ldLA0KKyAgICAgIHBvaW50SGl0UmFkaXVzOiBEQVRB X1BPSU5UX1NJWkUsDQorICAgIH07DQorICB9KSB8fCBbXTsNCisNCisgIHJldHVybiB7DQorICAg IGRhdGFzZXRzOiBkYXRhc2V0cywNCisgICAgcmVmcmVzaFJhdGU6IHJlZnJlc2hSYXRlLA0KKyAg fTsNCit9DQorDQorLyogVVJMIGZvciBmZXRjaGluZyBncmFwaHMgZGF0YSAqLw0KK2V4cG9ydCBm dW5jdGlvbiBnZXRTdGF0c1VybChzaWQ9LTEsIGRpZD0tMSwgY2hhcnRfbmFtZXM9W10pIHsNCisg IGxldCBiYXNlX3VybCA9IHVybF9mb3IoJ2Rhc2hib2FyZC5zeXN0ZW1fc3RhdGlzdGljcycpOw0K KyAgYmFzZV91cmwgKz0gJy8nICsgc2lkOw0KKyAgYmFzZV91cmwgKz0gKGRpZCA+IDApID8gKCcv JyArIGRpZCkgOiAnJzsNCisgIGJhc2VfdXJsICs9ICc/Y2hhcnRfbmFtZXM9JyArIGNoYXJ0X25h bWVzLmpvaW4oJywnKTsNCisgIA0KKyAgcmV0dXJuIGJhc2VfdXJsOw0KK30NCisNCisvKiBUaGlz IHdpbGwgcHJvY2VzcyBpbmNvbWluZyBjaGFydHMgZGF0YSBhZGQgaXQgdGhlIHByZXZpb3VzIGNo YXJ0cw0KKyAqIGRhdGEgdG8gZ2V0IHRoZSBuZXcgc3RhdGUuDQorICovDQorZXhwb3J0IGZ1bmN0 aW9uIHN0YXRzUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7DQorDQorICBpZihhY3Rpb24ucmVzZXQp IHsNCisgICAgcmV0dXJuIGFjdGlvbi5yZXNldDsNCisgIH0NCisNCisgIGlmKCFhY3Rpb24uaW5j b21pbmcpIHsNCisgICAgcmV0dXJuIHN0YXRlOw0KKyAgfQ0KKw0KKyAgaWYoIWFjdGlvbi5jb3Vu dGVyRGF0YSkgew0KKyAgICBhY3Rpb24uY291bnRlckRhdGEgPSBhY3Rpb24uaW5jb21pbmc7DQor ICB9DQorDQorICBsZXQgbmV3U3RhdGUgPSB7fTsNCisgIE9iamVjdC5rZXlzKGFjdGlvbi5pbmNv bWluZykuZm9yRWFjaChsYWJlbCA9PiB7DQorICAgIGlmKHN0YXRlW2xhYmVsXSkgew0KKyAgICAg IG5ld1N0YXRlW2xhYmVsXSA9IFsNCisgICAgICAgIGFjdGlvbi5jb3VudGVyID8gIGFjdGlvbi5p bmNvbWluZ1tsYWJlbF0gLSBhY3Rpb24uY291bnRlckRhdGFbbGFiZWxdIDogYWN0aW9uLmluY29t aW5nW2xhYmVsXSwNCisgICAgICAgIC4uLnN0YXRlW2xhYmVsXS5zbGljZSgwLCBYX0FYSVNfTEVO R1RILTEpLA0KKyAgICAgIF07DQorICAgIH0gZWxzZSB7DQorICAgICAgbmV3U3RhdGVbbGFiZWxd ID0gWw0KKyAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9uLmluY29taW5nW2xhYmVsXSAt IGFjdGlvbi5jb3VudGVyRGF0YVtsYWJlbF0gOiBhY3Rpb24uaW5jb21pbmdbbGFiZWxdLA0KKyAg ICAgIF07DQorICAgIH0NCisgIH0pOw0KKyAgcmV0dXJuIG5ld1N0YXRlOw0KK30NCisNCitjb25z dCBjaGFydHNEZWZhdWx0ID0gew0KKyAgJ2N1X3N0YXRzJzogeydVc2VyIE5vcm1hbCc6IFtdLCAn VXNlciBOaWNlZCc6IFtdLCAnS2VybmVsJzogW10sICdJZGxlJzogW119LA0KKyAgJ2xhX3N0YXRz JzogeycxIG1pbic6IFtdLCAnNSBtaW5zJzogW10sICcxMCBtaW5zJzogW10sICcxNSBtaW5zJzog W119LA0KKyAgJ3BjdV9zdGF0cyc6IHt9LA0KK307DQorDQorZXhwb3J0IGRlZmF1bHQgZnVuY3Rp b24gQ1BVKHtwcmVmZXJlbmNlcywgc2lkLCBkaWQsIHBhZ2VWaXNpYmxlLCBlbmFibGVQb2xsPXRy dWV9KSB7DQorICBjb25zdCByZWZyZXNoT24gPSB1c2VSZWYobnVsbCk7DQorICBjb25zdCBwcmV2 UHJlZmVybmNlcyA9IHVzZVByZXZpb3VzKHByZWZlcmVuY2VzKTsNCisgIA0KKyAgY29uc3QgW2Nw dVVzYWdlSW5mbywgY3B1VXNhZ2VJbmZvUmVkdWNlXSA9IHVzZVJlZHVjZXIoc3RhdHNSZWR1Y2Vy LCBjaGFydHNEZWZhdWx0WydjdV9zdGF0cyddKTsNCisgIGNvbnN0IFtsb2FkQXZnSW5mbywgbG9h ZEF2Z0luZm9SZWR1Y2VdID0gdXNlUmVkdWNlcihzdGF0c1JlZHVjZXIsIGNoYXJ0c0RlZmF1bHRb J2xhX3N0YXRzJ10pOw0KKyAgY29uc3QgW3Byb2Nlc3NDcHVVc2FnZVN0YXRzLCBzZXRQcm9jZXNz Q3B1VXNhZ2VTdGF0c10gPSB1c2VTdGF0ZShbXSk7DQorDQorICBjb25zdCBbY291bnRlckRhdGEs IHNldENvdW50ZXJEYXRhXSA9IHVzZVN0YXRlKHt9KTsNCisNCisgIGNvbnN0IFtwb2xsRGVsYXks IHNldFBvbGxEZWxheV0gPSB1c2VTdGF0ZSg1MDAwKTsNCisNCisgIGNvbnN0IFtlcnJvck1zZywg c2V0RXJyb3JNc2ddID0gdXNlU3RhdGUobnVsbCk7DQorICBjb25zdCBbY2hhcnREcmF3bk9uY2Us IHNldENoYXJ0RHJhd25PbmNlXSA9IHVzZVN0YXRlKGZhbHNlKTsNCisNCisgIGNvbnN0IHRhYmxl SGVhZGVyID0gWw0KKyAgICB7DQorICAgICAgSGVhZGVyOiAnUElEJywNCisgICAgICBhY2Nlc3Nv cjogJ3BpZCcsDQorICAgICAgc29ydGFibGU6IHRydWUsDQorICAgICAgcmVzaXphYmxlOiB0cnVl LA0KKyAgICAgIGRpc2FibGVHbG9iYWxGaWx0ZXI6IGZhbHNlLA0KKyAgICB9LA0KKyAgICB7DQor ICAgICAgSGVhZGVyOiAnTmFtZScsDQorICAgICAgYWNjZXNzb3I6ICduYW1lJywNCisgICAgICBz b3J0YWJsZTogdHJ1ZSwNCisgICAgICByZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUds b2JhbEZpbHRlcjogZmFsc2UsDQorICAgIH0sDQorICAgIHsNCisgICAgICBIZWFkZXI6ICdDUFUg VXNhZ2UnLA0KKyAgICAgIGFjY2Vzc29yOiAnY3B1X3VzYWdlJywNCisgICAgICBzb3J0YWJsZTog dHJ1ZSwNCisgICAgICByZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUdsb2JhbEZpbHRl cjogZmFsc2UsDQorICAgIH0sDQorICBdOw0KKw0KKyAgdXNlRWZmZWN0KCgpPT57DQorICAgIGxl dCBjYWxjUG9sbERlbGF5ID0gZmFsc2U7DQorICAgIGlmKHByZXZQcmVmZXJuY2VzKSB7DQorICAg ICAgaWYocHJldlByZWZlcm5jZXNbJ2N1X3N0YXRzX3JlZnJlc2gnXSAhPSBwcmVmZXJlbmNlc1sn Y3Vfc3RhdHNfcmVmcmVzaCddKSB7DQorICAgICAgICBjcHVVc2FnZUluZm9SZWR1Y2Uoe3Jlc2V0 OiBjaGFydHNEZWZhdWx0WydjdV9zdGF0cyddfSk7DQorICAgICAgICBjYWxjUG9sbERlbGF5ID0g dHJ1ZTsNCisgICAgICB9DQorICAgICAgaWYocHJldlByZWZlcm5jZXNbJ2xhX3N0YXRzX3JlZnJl c2gnXSAhPSBwcmVmZXJlbmNlc1snbGFfc3RhdHNfcmVmcmVzaCddKSB7DQorICAgICAgICBsb2Fk QXZnSW5mb1JlZHVjZSh7cmVzZXQ6IGNoYXJ0c0RlZmF1bHRbJ2xhX3N0YXRzJ119KTsNCisgICAg ICAgIGNhbGNQb2xsRGVsYXkgPSB0cnVlOw0KKyAgICAgIH0NCisgICAgICBpZihwcmV2UHJlZmVy bmNlc1sncGN1X3N0YXRzX3JlZnJlc2gnXSAhPSBwcmVmZXJlbmNlc1sncGN1X3N0YXRzX3JlZnJl c2gnXSkgew0KKyAgICAgICAgc2V0UHJvY2Vzc0NwdVVzYWdlU3RhdHMoe3Jlc2V0OiBjaGFydHNE ZWZhdWx0WydwY3Vfc3RhdHMnXX0pOw0KKyAgICAgICAgY2FsY1BvbGxEZWxheSA9IHRydWU7DQor ICAgICAgfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAgIGNhbGNQb2xsRGVsYXkgPSB0cnVlOw0KKyAg ICB9DQorICAgIGlmKGNhbGNQb2xsRGVsYXkpIHsNCisgICAgICBjb25zdCBrZXlzID0gT2JqZWN0 LmtleXMoY2hhcnRzRGVmYXVsdCk7DQorICAgICAgY29uc3QgbGVuZ3RoID0ga2V5cy5sZW5ndGg7 DQorICAgICAgaWYobGVuZ3RoID09IDEpew0KKyAgICAgICAgc2V0UG9sbERlbGF5KA0KKyAgICAg ICAgICBwcmVmZXJlbmNlc1trZXlzWzBdKydfcmVmcmVzaCddKjEwMDANCisgICAgICAgICk7DQor ICAgICAgfSBlbHNlIHsNCisgICAgICAgIHNldFBvbGxEZWxheSgNCisgICAgICAgICAgZ2V0R0NE KE9iamVjdC5rZXlzKGNoYXJ0c0RlZmF1bHQpLm1hcCgobmFtZSk9PnByZWZlcmVuY2VzW25hbWUr J19yZWZyZXNoJ10pKSoxMDAwDQorICAgICAgICApOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfSwg W3ByZWZlcmVuY2VzXSk7DQorDQorICB1c2VFZmZlY3QoKCk9PnsNCisgICAgLyogQ2hhcnRzIHJl bmRlcmVkIGFyZSBub3QgdmlzaWJsZSB3aGVuLCB0aGUgZGFzaGJvYXJkIGlzIGhpZGRlbiBidXQg bGF0ZXIgdmlzaWJsZSAqLw0KKyAgICBpZihwYWdlVmlzaWJsZSAmJiAhY2hhcnREcmF3bk9uY2Up IHsNCisgICAgICBzZXRDaGFydERyYXduT25jZSh0cnVlKTsNCisgICAgfQ0KKyAgfSwgW3BhZ2VW aXNpYmxlXSk7DQorDQorICB1c2VJbnRlcnZhbCgoKT0+ew0KKyAgICBjb25zdCBjdXJyRXBvY2gg PSBnZXRFcG9jaCgpOw0KKyAgICBpZihyZWZyZXNoT24uY3VycmVudCA9PT0gbnVsbCkgew0KKyAg ICAgIGxldCB0bXBSZWYgPSB7fTsNCisgICAgICBPYmplY3Qua2V5cyhjaGFydHNEZWZhdWx0KS5m b3JFYWNoKChuYW1lKT0+ew0KKyAgICAgICAgdG1wUmVmW25hbWVdID0gY3VyckVwb2NoOw0KKyAg ICAgIH0pOw0KKyAgICAgIHJlZnJlc2hPbi5jdXJyZW50ID0gdG1wUmVmOw0KKyAgICB9DQorDQor ICAgIGxldCBnZXRGb3IgPSBbXTsNCisgICAgT2JqZWN0LmtleXMoY2hhcnRzRGVmYXVsdCkuZm9y RWFjaCgobmFtZSk9PnsNCisgICAgICBpZihjdXJyRXBvY2ggPj0gcmVmcmVzaE9uLmN1cnJlbnRb bmFtZV0pIHsNCisgICAgICAgIGdldEZvci5wdXNoKG5hbWUpOw0KKyAgICAgICAgcmVmcmVzaE9u LmN1cnJlbnRbbmFtZV0gPSBjdXJyRXBvY2ggKyBwcmVmZXJlbmNlc1tuYW1lKydfcmVmcmVzaCdd Ow0KKyAgICAgIH0NCisgICAgfSk7DQorDQorICAgIGxldCBwYXRoID0gZ2V0U3RhdHNVcmwoc2lk LCBkaWQsIGdldEZvcik7DQorICAgIGlmICghcGFnZVZpc2libGUpew0KKyAgICAgIHJldHVybjsN CisgICAgfQ0KKyAgICBheGlvcy5nZXQocGF0aCkNCisgICAgICAudGhlbigocmVzcCk9PnsNCisg ICAgICAgIGxldCBkYXRhID0gcmVzcC5kYXRhOw0KKyAgICAgICAgc2V0RXJyb3JNc2cobnVsbCk7 DQorICAgICAgICBpZihkYXRhLmhhc093blByb3BlcnR5KCdjdV9zdGF0cycpKXsNCisgICAgICAg ICAgbGV0IG5ld19jdV9zdGF0cyA9IHsNCisgICAgICAgICAgICAnVXNlciBOb3JtYWwnOiBkYXRh WydjdV9zdGF0cyddWyd1c2VybW9kZV9ub3JtYWxfcHJvY2Vzc19wZXJjZW50J10/ZGF0YVsnY3Vf c3RhdHMnXVsndXNlcm1vZGVfbm9ybWFsX3Byb2Nlc3NfcGVyY2VudCddOjAsIA0KKyAgICAgICAg ICAgICdVc2VyIE5pY2VkJzogZGF0YVsnY3Vfc3RhdHMnXVsndXNlcm1vZGVfbmljZWRfcHJvY2Vz c19wZXJjZW50J10/ZGF0YVsnY3Vfc3RhdHMnXVsndXNlcm1vZGVfbmljZWRfcHJvY2Vzc19wZXJj ZW50J106MCwgDQorICAgICAgICAgICAgJ0tlcm5lbCc6IGRhdGFbJ2N1X3N0YXRzJ11bJ2tlcm5l bG1vZGVfcHJvY2Vzc19wZXJjZW50J10/ZGF0YVsnY3Vfc3RhdHMnXVsna2VybmVsbW9kZV9wcm9j ZXNzX3BlcmNlbnQnXTowLCANCisgICAgICAgICAgICAnSWRsZSc6IGRhdGFbJ2N1X3N0YXRzJ11b J2lkbGVfbW9kZV9wZXJjZW50J10/ZGF0YVsnY3Vfc3RhdHMnXVsnaWRsZV9tb2RlX3BlcmNlbnQn XTowLA0KKyAgICAgICAgICB9Ow0KKyAgICAgICAgICBjcHVVc2FnZUluZm9SZWR1Y2Uoe2luY29t aW5nOiBuZXdfY3Vfc3RhdHN9KTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgaWYo ZGF0YS5oYXNPd25Qcm9wZXJ0eSgnbGFfc3RhdHMnKSl7DQorICAgICAgICAgIGxldCBuZXdfbGFf c3RhdHMgPSB7DQorICAgICAgICAgICAgJzEgbWluJzogZGF0YVsnbGFfc3RhdHMnXVsnbG9hZF9h dmdfb25lX21pbnV0ZSddP2RhdGFbJ2xhX3N0YXRzJ11bJ2xvYWRfYXZnX29uZV9taW51dGUnXTow LCANCisgICAgICAgICAgICAnNSBtaW5zJzogZGF0YVsnbGFfc3RhdHMnXVsnbG9hZF9hdmdfZml2 ZV9taW51dGVzJ10/ZGF0YVsnbGFfc3RhdHMnXVsnbG9hZF9hdmdfZml2ZV9taW51dGVzJ106MCwg DQorICAgICAgICAgICAgJzEwIG1pbnMnOiBkYXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z190ZW5f bWludXRlcyddP2RhdGFbJ2xhX3N0YXRzJ11bJ2xvYWRfYXZnX3Rlbl9taW51dGVzJ106MCwgDQor ICAgICAgICAgICAgJzE1IG1pbnMnOiBkYXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z19maWZ0ZWVu X21pbnV0ZXMnXT9kYXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z19maWZ0ZWVuX21pbnV0ZXMnXTow LA0KKyAgICAgICAgICB9Ow0KKyAgICAgICAgICBsb2FkQXZnSW5mb1JlZHVjZSh7aW5jb21pbmc6 IG5ld19sYV9zdGF0c30pOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBpZihkYXRh Lmhhc093blByb3BlcnR5KCdwY3Vfc3RhdHMnKSl7DQorICAgICAgICAgIGxldCBwY3VfaW5mb19s aXN0ID0gW107DQorICAgICAgICAgIGNvbnN0IHBjdV9pbmZvX29iaiA9IGRhdGFbJ3BjdV9zdGF0 cyddOw0KKyAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwY3VfaW5mb19vYmopIHsNCisgICAg ICAgICAgICBwY3VfaW5mb19saXN0LnB1c2goeyBpY29uOiAnJywgcGlkOiBwY3VfaW5mb19vYmpb a2V5XVsncGlkJ10sIG5hbWU6IHBjdV9pbmZvX29ialtrZXldWyduYW1lJ10sIGNwdV91c2FnZTog Zm9ybWF0Qnl0ZXMocGN1X2luZm9fb2JqW2tleV1bJ2NwdV91c2FnZSddKSB9KTsNCisgICAgICAg ICAgfQ0KKyAgICAgICAgICANCisgICAgICAgICAgc2V0UHJvY2Vzc0NwdVVzYWdlU3RhdHMocGN1 X2luZm9fbGlzdCk7DQorICAgICAgICB9DQorDQorICAgICAgICBzZXRDb3VudGVyRGF0YSgocHJl dkNvdW50ZXJEYXRhKT0+ew0KKyAgICAgICAgICByZXR1cm4gew0KKyAgICAgICAgICAgIC4uLnBy ZXZDb3VudGVyRGF0YSwNCisgICAgICAgICAgICAuLi5kYXRhLA0KKyAgICAgICAgICB9Ow0KKyAg ICAgICAgfSk7DQorICAgICAgfSkNCisgICAgICAuY2F0Y2goKGVycm9yKT0+ew0KKyAgICAgICAg aWYoIWVycm9yTXNnKSB7DQorICAgICAgICAgIGNwdVVzYWdlSW5mb1JlZHVjZSh7cmVzZXQ6Y2hh cnRzRGVmYXVsdFsnY3Vfc3RhdHMnXX0pOw0KKyAgICAgICAgICBsb2FkQXZnSW5mb1JlZHVjZSh7 cmVzZXQ6Y2hhcnRzRGVmYXVsdFsnbGFfc3RhdHMnXX0pOw0KKyAgICAgICAgICBzZXRDb3VudGVy RGF0YSh7fSk7DQorICAgICAgICAgIGlmKGVycm9yLnJlc3BvbnNlKSB7DQorICAgICAgICAgICAg aWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDI4KSB7DQorICAgICAgICAgICAgICBzZXRF cnJvck1zZyhnZXR0ZXh0KCdQbGVhc2UgY29ubmVjdCB0byB0aGUgc2VsZWN0ZWQgc2VydmVyIHRv IHZpZXcgdGhlIGdyYXBoLicpKTsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAg ICAgc2V0RXJyb3JNc2coZ2V0dGV4dCgnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbHN0IHJlbmRlcmlu ZyB0aGUgZ3JhcGguJykpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgfSBlbHNlIGlmKGVy cm9yLnJlcXVlc3QpIHsNCisgICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdOb3QgY29u bmVjdGVkIHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBoYXMg YmVlbiBjbG9zZWQuJykpOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgfSBlbHNl IHsNCisgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsNCisgICAgICAgICAgfQ0KKyAg ICAgICAgfQ0KKyAgICAgIH0pOw0KKyAgfSwgZW5hYmxlUG9sbCA/IHBvbGxEZWxheSA6IC0xKTsN CisNCisgIHJldHVybiAoDQorICAgIDw+DQorICAgICAgPGRpdiBkYXRhLXRlc3RpZD0nZ3JhcGgt cG9sbC1kZWxheScgc3R5bGU9e3tkaXNwbGF5OiAnbm9uZSd9fT57cG9sbERlbGF5fTwvZGl2Pg0K KyAgICAgIHtjaGFydERyYXduT25jZSAmJg0KKyAgICAgICAgPENQVVdyYXBwZXINCisgICAgICAg ICAgY3B1VXNhZ2VJbmZvPXt0cmFuc2Zvcm1EYXRhKGNwdVVzYWdlSW5mbywgcHJlZmVyZW5jZXNb J2N1X3N0YXRzX3JlZnJlc2gnXSl9DQorICAgICAgICAgIGxvYWRBdmdJbmZvPXt0cmFuc2Zvcm1E YXRhKGxvYWRBdmdJbmZvLCBwcmVmZXJlbmNlc1snbGFfc3RhdHNfcmVmcmVzaCddKX0NCisgICAg ICAgICAgcHJvY2Vzc0NwdVVzYWdlU3RhdHM9e3Byb2Nlc3NDcHVVc2FnZVN0YXRzfQ0KKyAgICAg ICAgICB0YWJsZUhlYWRlcj17dGFibGVIZWFkZXJ9DQorICAgICAgICAgIGVycm9yTXNnPXtlcnJv ck1zZ30NCisgICAgICAgICAgc2hvd1Rvb2x0aXA9e3ByZWZlcmVuY2VzWydncmFwaF9tb3VzZV90 cmFjayddfQ0KKyAgICAgICAgICBzaG93RGF0YVBvaW50cz17cHJlZmVyZW5jZXNbJ2dyYXBoX2Rh dGFfcG9pbnRzJ119DQorICAgICAgICAgIGxpbmVCb3JkZXJXaWR0aD17cHJlZmVyZW5jZXNbJ2dy YXBoX2xpbmVfYm9yZGVyX3dpZHRoJ119DQorICAgICAgICAgIGlzRGF0YWJhc2U9e2RpZCA+IDB9 DQorICAgICAgICAgIGlzVGVzdD17ZmFsc2V9DQorICAgICAgICAvPg0KKyAgICAgIH0NCisgICAg PC8+DQorICApOw0KK30NCisNCitDUFUucHJvcFR5cGVzID0gew0KKyAgcHJlZmVyZW5jZXM6IFBy b3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCwNCisgIHNpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShb UHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRd KSwNCisgIGRpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVp cmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSwNCisgIHBhZ2VWaXNpYmxlOiBQcm9w VHlwZXMuYm9vbCwNCisgIGVuYWJsZVBvbGw6IFByb3BUeXBlcy5ib29sLA0KK307DQorDQorZXhw b3J0IGZ1bmN0aW9uIENQVVdyYXBwZXIocHJvcHMpIHsNCisgIGNvbnN0IGNsYXNzZXMgPSB1c2VT dHlsZXMoKTsNCisgIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpPT4oew0KKyAgICBzaG93RGF0 YVBvaW50czogcHJvcHMuc2hvd0RhdGFQb2ludHMsDQorICAgIHNob3dUb29sdGlwOiBwcm9wcy5z aG93VG9vbHRpcCwNCisgICAgbGluZUJvcmRlcldpZHRoOiBwcm9wcy5saW5lQm9yZGVyV2lkdGgs DQorICB9KSwgW3Byb3BzLnNob3dUb29sdGlwLCBwcm9wcy5zaG93RGF0YVBvaW50cywgcHJvcHMu bGluZUJvcmRlcldpZHRoXSk7DQorICByZXR1cm4gKA0KKyAgICA8Pg0KKyAgICAgIDxHcmlkIGNv bnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9e2NsYXNzZXMuY29udGFpbmVyfT4NCisgICAg ICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9IHNtPXsxMn0+DQorICAgICAgICAgIDxkaXYgY2xhc3NOYW1l PXtjbGFzc2VzLmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQoJ0NQVSBVc2FnZSAoKScpfTwvZGl2 Pg0KKyAgICAgICAgICA8Q2hhcnRDb250YWluZXIgaWQ9J2N1LWdyYXBoJyB0aXRsZT17Z2V0dGV4 dCgnJyl9IGRhdGFzZXRzPXtwcm9wcy5jcHVVc2FnZUluZm8uZGF0YXNldHN9ICBlcnJvck1zZz17 cHJvcHMuZXJyb3JNc2d9IGlzVGVzdD17cHJvcHMuaXNUZXN0fT4NCisgICAgICAgICAgICA8U3Ry ZWFtaW5nQ2hhcnQgZGF0YT17cHJvcHMuY3B1VXNhZ2VJbmZvfSBkYXRhUG9pbnRTaXplPXtEQVRB X1BPSU5UX1NJWkV9IHhSYW5nZT17WF9BWElTX0xFTkdUSH0gb3B0aW9ucz17b3B0aW9uc30gLz4N CisgICAgICAgICAgPC9DaGFydENvbnRhaW5lcj4NCisgICAgICAgIDwvR3JpZD4NCisgICAgICAg IDxHcmlkIGl0ZW0gbWQ9ezZ9IHNtPXsxMn0+DQorICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtj bGFzc2VzLmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQoJ0xvYWQgQXZlcmFnZScpfTwvZGl2Pg0K KyAgICAgICAgICA8Q2hhcnRDb250YWluZXIgaWQ9J2xhLWdyYXBoJyB0aXRsZT17Z2V0dGV4dCgn Jyl9IGRhdGFzZXRzPXtwcm9wcy5sb2FkQXZnSW5mby5kYXRhc2V0c30gIGVycm9yTXNnPXtwcm9w cy5lcnJvck1zZ30gaXNUZXN0PXtwcm9wcy5pc1Rlc3R9Pg0KKyAgICAgICAgICAgIDxTdHJlYW1p bmdDaGFydCBkYXRhPXtwcm9wcy5sb2FkQXZnSW5mb30gZGF0YVBvaW50U2l6ZT17REFUQV9QT0lO VF9TSVpFfSB4UmFuZ2U9e1hfQVhJU19MRU5HVEh9IG9wdGlvbnM9e29wdGlvbnN9IC8+DQorICAg ICAgICAgIDwvQ2hhcnRDb250YWluZXI+DQorICAgICAgICA8L0dyaWQ+DQorICAgICAgPC9Hcmlk Pg0KKyAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9e2NsYXNzZXMu Zml4ZWRDb250YWluZXJ9Pg0KKyAgICAgICAgPFBnVGFibGUNCisgICAgICAgICAgY2xhc3NOYW1l PXtjbGFzc2VzLmF1dG9SZXNpemVyfQ0KKyAgICAgICAgICBjb2x1bW5zPXtwcm9wcy50YWJsZUhl YWRlcn0NCisgICAgICAgICAgZGF0YT17cHJvcHMucHJvY2Vzc0NwdVVzYWdlU3RhdHN9DQorICAg ICAgICAgIG1zZz17cHJvcHMuZXJyb3JNc2d9DQorICAgICAgICAgIHR5cGU9eydwYW5lbCd9DQor ICAgICAgICA+PC9QZ1RhYmxlPg0KKyAgICAgIDwvR3JpZD4NCisgICAgPC8+DQorICApOw0KK30N CisNCitjb25zdCBwcm9wVHlwZVN0YXRzID0gUHJvcFR5cGVzLnNoYXBlKHsNCisgIGRhdGFzZXRz OiBQcm9wVHlwZXMuYXJyYXksDQorICByZWZyZXNoUmF0ZTogUHJvcFR5cGVzLm51bWJlci5pc1Jl cXVpcmVkLA0KK30pOw0KK0NQVVdyYXBwZXIucHJvcFR5cGVzID0gew0KKyAgY3B1VXNhZ2VJbmZv OiBwcm9wVHlwZVN0YXRzLmlzUmVxdWlyZWQsDQorICBsb2FkQXZnSW5mbzogcHJvcFR5cGVTdGF0 cy5pc1JlcXVpcmVkLA0KKyAgcHJvY2Vzc0NwdVVzYWdlU3RhdHM6IFByb3BUeXBlcy5hcnJheS5p c1JlcXVpcmVkLA0KKyAgdGFibGVIZWFkZXI6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLA0K KyAgZXJyb3JNc2c6IFByb3BUeXBlcy5zdHJpbmcsDQorICBzaG93VG9vbHRpcDogUHJvcFR5cGVz LmJvb2wuaXNSZXF1aXJlZCwNCisgIHNob3dEYXRhUG9pbnRzOiBQcm9wVHlwZXMuYm9vbC5pc1Jl cXVpcmVkLA0KKyAgbGluZUJvcmRlcldpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQs DQorICBpc0RhdGFiYXNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLA0KKyAgaXNUZXN0OiBQ cm9wVHlwZXMuYm9vbCwNCit9Ow0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0cy9NZW1vcnku anN4IGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0cy9NZW1vcnku anN4DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwLi43YTVkMDI5Y2INCi0t LSAvZGV2L251bGwNCisrKyBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvU3lzdGVt U3RhdHMvTWVtb3J5LmpzeA0KQEAgLTAsMCArMSwzNzIgQEANCitpbXBvcnQgUmVhY3QsIHsgdXNl U3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VSZWR1Y2VyLCB1c2VNZW1vIH0gZnJvbSAncmVh Y3QnOw0KK2ltcG9ydCBQZ1RhYmxlIGZyb20gJ3NvdXJjZXMvY29tcG9uZW50cy9QZ1RhYmxlJzsN CitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOw0KK2ltcG9ydCBQcm9wVHlw ZXMgZnJvbSAncHJvcC10eXBlcyc7DQoraW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZyb20gJ0BtYXRl cmlhbC11aS9jb3JlL3N0eWxlcyc7DQoraW1wb3J0IHVybF9mb3IgZnJvbSAnc291cmNlcy91cmxf Zm9yJzsNCitpbXBvcnQge2dldEdDRCwgZ2V0RXBvY2h9IGZyb20gJ3NvdXJjZXMvdXRpbHMnOw0K K2ltcG9ydCB7Q2hhcnRDb250YWluZXJ9IGZyb20gJy4uL0Rhc2hib2FyZCc7DQoraW1wb3J0IHsg R3JpZCB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlJzsNCitpbXBvcnQgeyBEQVRBX1BPSU5UX1NJ WkUgfSBmcm9tICdzb3VyY2VzL2NoYXJ0anMnOw0KK2ltcG9ydCBTdHJlYW1pbmdDaGFydCBmcm9t ICcuLi8uLi8uLi8uLi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWluZ0NoYXJ0 JzsNCitpbXBvcnQge3VzZUludGVydmFsLCB1c2VQcmV2aW91c30gZnJvbSAnc291cmNlcy9jdXN0 b21faG9va3MnOw0KK2ltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7DQorDQorZXhwb3J0IGNvbnN0 IFhfQVhJU19MRU5HVEggPSA3NTsNCisNCitjb25zdCB1c2VTdHlsZXMgPSBtYWtlU3R5bGVzKCh0 aGVtZSkgPT4gKHsNCisgIGF1dG9SZXNpemVyOiB7DQorICAgIGhlaWdodDogJzEwMCUgIWltcG9y dGFudCcsDQorICAgIHdpZHRoOiAnMTAwJSAhaW1wb3J0YW50JywNCisgICAgYmFja2dyb3VuZDog dGhlbWUucGFsZXR0ZS5ncmV5WzQwMF0sDQorICAgIHBhZGRpbmc6ICc3LjVweCcsDQorICAgIG92 ZXJmbG93WDogJ2F1dG8gIWltcG9ydGFudCcsDQorICAgIG92ZXJmbG93WTogJ2hpZGRlbiAhaW1w b3J0YW50JywNCisgICAgbWluSGVpZ2h0OiAnMTAwJScsDQorICAgIG1pbldpZHRoOiAnMTAwJScs DQorICB9LA0KKyAgY29udGFpbmVyOiB7DQorICAgIGhlaWdodDogJ2F1dG8nLA0KKyAgICBiYWNr Z3JvdW5kOiB0aGVtZS5wYWxldHRlLmdyZXlbMjAwXSwNCisgICAgcGFkZGluZzogJzEwcHgnLA0K KyAgICBtYXJnaW5Cb3R0b206ICczMHB4JywNCisgIH0sDQorICBmaXhlZENvbnRhaW5lcjogew0K KyAgICBoZWlnaHQ6ICc1NzdweCcsDQorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ3Jl eVsyMDBdLA0KKyAgICBwYWRkaW5nOiAnMTBweCcsDQorICAgIG1hcmdpbkJvdHRvbTogJzMwcHgn LA0KKyAgfSwNCisgIGNvbnRhaW5lckhlYWRlcjogew0KKyAgICBmb250U2l6ZTogJzE2cHgnLA0K KyAgICBmb250V2VpZ2h0OiAnYm9sZCcsDQorICAgIG1hcmdpbkJvdHRvbTogJzVweCcsDQorICB9 DQorfSkpOw0KKw0KK2V4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeXRlcyhieXRlcykgew0KKyAgY29u c3QgdW5pdHMgPSBbIkIiLCAiS0IiLCAiTUIiLCAiR0IiLCAiVEIiXTsNCisgIGxldCB1bml0SW5k ZXggPSAwOw0KKw0KKyAgd2hpbGUgKGJ5dGVzID49IDEwMjQgJiYgdW5pdEluZGV4IDwgdW5pdHMu bGVuZ3RoIC0gMSkgew0KKyAgICBieXRlcyAvPSAxMDI0Ow0KKyAgICB1bml0SW5kZXgrKzsNCisg IH0NCisNCisgIHJldHVybiBgJHtieXRlcy50b0ZpeGVkKDIpfSAke3VuaXRzW3VuaXRJbmRleF19 YDsNCit9DQorDQorZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEobGFiZWxzLCByZWZyZXNo UmF0ZSkgew0KKyAgY29uc3QgY29sb3JzID0gWycjRkY2Mzg0JywnIzM2QTJFQicsJyNGRkNFNTYn LCcjNEJDMEMwJywnIzk5NjZGRicsJyNGRjlGNDAnLCcjOEQ2RTYzJywnIzIxOTZGMycsJyNGRkVC M0InLCcjOUMyN0IwJywnIzAwQkNENCcsJyNDRERDMzknXTsNCisgIGxldCBkYXRhc2V0cyA9IE9i amVjdC5rZXlzKGxhYmVscykubWFwKChsYWJlbCwgaSk9PnsNCisgICAgcmV0dXJuIHsNCisgICAg ICBsYWJlbDogbGFiZWwsDQorICAgICAgZGF0YTogbGFiZWxzW2xhYmVsXSB8fCBbXSwNCisgICAg ICBib3JkZXJDb2xvcjogY29sb3JzW2ldLA0KKyAgICAgIHBvaW50SGl0UmFkaXVzOiBEQVRBX1BP SU5UX1NJWkUsDQorICAgIH07DQorICB9KSB8fCBbXTsNCisNCisgIHJldHVybiB7DQorICAgIGRh dGFzZXRzOiBkYXRhc2V0cywNCisgICAgcmVmcmVzaFJhdGU6IHJlZnJlc2hSYXRlLA0KKyAgfTsN Cit9DQorDQorLyogVVJMIGZvciBmZXRjaGluZyBncmFwaHMgZGF0YSAqLw0KK2V4cG9ydCBmdW5j dGlvbiBnZXRTdGF0c1VybChzaWQ9LTEsIGRpZD0tMSwgY2hhcnRfbmFtZXM9W10pIHsNCisgIGxl dCBiYXNlX3VybCA9IHVybF9mb3IoJ2Rhc2hib2FyZC5zeXN0ZW1fc3RhdGlzdGljcycpOw0KKyAg YmFzZV91cmwgKz0gJy8nICsgc2lkOw0KKyAgYmFzZV91cmwgKz0gKGRpZCA+IDApID8gKCcvJyAr IGRpZCkgOiAnJzsNCisgIGJhc2VfdXJsICs9ICc/Y2hhcnRfbmFtZXM9JyArIGNoYXJ0X25hbWVz LmpvaW4oJywnKTsNCisgIA0KKyAgcmV0dXJuIGJhc2VfdXJsOw0KK30NCisNCisvKiBUaGlzIHdp bGwgcHJvY2VzcyBpbmNvbWluZyBjaGFydHMgZGF0YSBhZGQgaXQgdGhlIHByZXZpb3VzIGNoYXJ0 cw0KKyAqIGRhdGEgdG8gZ2V0IHRoZSBuZXcgc3RhdGUuDQorICovDQorZXhwb3J0IGZ1bmN0aW9u IHN0YXRzUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7DQorDQorICBpZihhY3Rpb24ucmVzZXQpIHsN CisgICAgcmV0dXJuIGFjdGlvbi5yZXNldDsNCisgIH0NCisNCisgIGlmKCFhY3Rpb24uaW5jb21p bmcpIHsNCisgICAgcmV0dXJuIHN0YXRlOw0KKyAgfQ0KKw0KKyAgaWYoIWFjdGlvbi5jb3VudGVy RGF0YSkgew0KKyAgICBhY3Rpb24uY291bnRlckRhdGEgPSBhY3Rpb24uaW5jb21pbmc7DQorICB9 DQorDQorICBsZXQgbmV3U3RhdGUgPSB7fTsNCisgIE9iamVjdC5rZXlzKGFjdGlvbi5pbmNvbWlu ZykuZm9yRWFjaChsYWJlbCA9PiB7DQorICAgIGlmKHN0YXRlW2xhYmVsXSkgew0KKyAgICAgIG5l d1N0YXRlW2xhYmVsXSA9IFsNCisgICAgICAgIGFjdGlvbi5jb3VudGVyID8gIGFjdGlvbi5pbmNv bWluZ1tsYWJlbF0gLSBhY3Rpb24uY291bnRlckRhdGFbbGFiZWxdIDogYWN0aW9uLmluY29taW5n W2xhYmVsXSwNCisgICAgICAgIC4uLnN0YXRlW2xhYmVsXS5zbGljZSgwLCBYX0FYSVNfTEVOR1RI LTEpLA0KKyAgICAgIF07DQorICAgIH0gZWxzZSB7DQorICAgICAgbmV3U3RhdGVbbGFiZWxdID0g Ww0KKyAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9uLmluY29taW5nW2xhYmVsXSAtIGFj dGlvbi5jb3VudGVyRGF0YVtsYWJlbF0gOiBhY3Rpb24uaW5jb21pbmdbbGFiZWxdLA0KKyAgICAg IF07DQorICAgIH0NCisgIH0pOw0KKyAgcmV0dXJuIG5ld1N0YXRlOw0KK30NCisNCitjb25zdCBj aGFydHNEZWZhdWx0ID0gew0KKyAgJ21fc3RhdHMnOiB7J1RvdGFsJzogW10sICdVc2VkJzogW10s ICdGcmVlJzogW119LA0KKyAgJ3NtX3N0YXRzJzogeydUb3RhbCc6IFtdLCAnVXNlZCc6IFtdLCAn RnJlZSc6IFtdfSwNCisgICdwbXVfc3RhdHMnOiB7fSwNCit9Ow0KKw0KK2V4cG9ydCBkZWZhdWx0 IGZ1bmN0aW9uIE1lbW9yeSh7cHJlZmVyZW5jZXMsIHNpZCwgZGlkLCBwYWdlVmlzaWJsZSwgZW5h YmxlUG9sbD10cnVlfSkgew0KKyAgY29uc3QgcmVmcmVzaE9uID0gdXNlUmVmKG51bGwpOw0KKyAg Y29uc3QgcHJldlByZWZlcm5jZXMgPSB1c2VQcmV2aW91cyhwcmVmZXJlbmNlcyk7DQorICANCisg IGNvbnN0IFttZW1vcnlVc2FnZUluZm8sIG1lbW9yeVVzYWdlSW5mb1JlZHVjZV0gPSB1c2VSZWR1 Y2VyKHN0YXRzUmVkdWNlciwgY2hhcnRzRGVmYXVsdFsnbV9zdGF0cyddKTsNCisgIGNvbnN0IFtz d2FwTWVtb3J5VXNhZ2VJbmZvLCBzd2FwTWVtb3J5VXNhZ2VJbmZvUmVkdWNlXSA9IHVzZVJlZHVj ZXIoc3RhdHNSZWR1Y2VyLCBjaGFydHNEZWZhdWx0WydzbV9zdGF0cyddKTsNCisgIGNvbnN0IFtw cm9jZXNzTWVtb3J5VXNhZ2VTdGF0cywgc2V0UHJvY2Vzc01lbW9yeVVzYWdlU3RhdHNdID0gdXNl U3RhdGUoW10pOw0KKw0KKyAgY29uc3QgW2NvdW50ZXJEYXRhLCBzZXRDb3VudGVyRGF0YV0gPSB1 c2VTdGF0ZSh7fSk7DQorDQorICBjb25zdCBbcG9sbERlbGF5LCBzZXRQb2xsRGVsYXldID0gdXNl U3RhdGUoNTAwMCk7DQorICBjb25zdCBbZXJyb3JNc2csIHNldEVycm9yTXNnXSA9IHVzZVN0YXRl KG51bGwpOw0KKyAgY29uc3QgW2NoYXJ0RHJhd25PbmNlLCBzZXRDaGFydERyYXduT25jZV0gPSB1 c2VTdGF0ZShmYWxzZSk7DQorICANCisgIGNvbnN0IHRhYmxlSGVhZGVyID0gWw0KKyAgICB7DQor ICAgICAgSGVhZGVyOiAnUElEJywNCisgICAgICBhY2Nlc3NvcjogJ3BpZCcsDQorICAgICAgc29y dGFibGU6IHRydWUsDQorICAgICAgcmVzaXphYmxlOiB0cnVlLA0KKyAgICAgIGRpc2FibGVHbG9i YWxGaWx0ZXI6IGZhbHNlLA0KKyAgICB9LA0KKyAgICB7DQorICAgICAgSGVhZGVyOiAnTmFtZScs DQorICAgICAgYWNjZXNzb3I6ICduYW1lJywNCisgICAgICBzb3J0YWJsZTogdHJ1ZSwNCisgICAg ICByZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsDQor ICAgIH0sDQorICAgIHsNCisgICAgICBIZWFkZXI6ICdNZW1vcnkgVXNhZ2UnLA0KKyAgICAgIGFj Y2Vzc29yOiAnbWVtb3J5X3VzYWdlJywNCisgICAgICBzb3J0YWJsZTogdHJ1ZSwNCisgICAgICBy ZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsDQorICAg IH0sDQorICAgIHsNCisgICAgICBIZWFkZXI6ICdNZW1vcnkgQnl0ZXMnLA0KKyAgICAgIGFjY2Vz c29yOiAnbWVtb3J5X2J5dGVzJywNCisgICAgICBzb3J0YWJsZTogdHJ1ZSwNCisgICAgICByZXNp emFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsDQorICAgIH0s DQorICBdOw0KKw0KKyAgdXNlRWZmZWN0KCgpPT57DQorICAgIGxldCBjYWxjUG9sbERlbGF5ID0g ZmFsc2U7DQorICAgIGlmKHByZXZQcmVmZXJuY2VzKSB7DQorICAgICAgaWYocHJldlByZWZlcm5j ZXNbJ21fc3RhdHNfcmVmcmVzaCddICE9IHByZWZlcmVuY2VzWydtX3N0YXRzX3JlZnJlc2gnXSkg ew0KKyAgICAgICAgbWVtb3J5VXNhZ2VJbmZvUmVkdWNlKHtyZXNldDogY2hhcnRzRGVmYXVsdFsn bV9zdGF0cyddfSk7DQorICAgICAgICBjYWxjUG9sbERlbGF5ID0gdHJ1ZTsNCisgICAgICB9DQor ICAgICAgaWYocHJldlByZWZlcm5jZXNbJ3NtX3N0YXRzX3JlZnJlc2gnXSAhPSBwcmVmZXJlbmNl c1snc21fc3RhdHNfcmVmcmVzaCddKSB7DQorICAgICAgICBzd2FwTWVtb3J5VXNhZ2VJbmZvUmVk dWNlKHtyZXNldDogY2hhcnRzRGVmYXVsdFsnc21fc3RhdHMnXX0pOw0KKyAgICAgICAgY2FsY1Bv bGxEZWxheSA9IHRydWU7DQorICAgICAgfQ0KKyAgICAgIGlmKHByZXZQcmVmZXJuY2VzWydwbXVf c3RhdHNfcmVmcmVzaCddICE9IHByZWZlcmVuY2VzWydwbXVfc3RhdHNfcmVmcmVzaCddKSB7DQor ICAgICAgICBzZXRQcm9jZXNzTWVtb3J5VXNhZ2VTdGF0cyh7cmVzZXQ6IGNoYXJ0c0RlZmF1bHRb J3BtdV9zdGF0cyddfSk7DQorICAgICAgICBjYWxjUG9sbERlbGF5ID0gdHJ1ZTsNCisgICAgICB9 DQorICAgIH0gZWxzZSB7DQorICAgICAgY2FsY1BvbGxEZWxheSA9IHRydWU7DQorICAgIH0NCisg ICAgaWYoY2FsY1BvbGxEZWxheSkgew0KKyAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhj aGFydHNEZWZhdWx0KTsNCisgICAgICBjb25zdCBsZW5ndGggPSBrZXlzLmxlbmd0aDsNCisgICAg ICBpZihsZW5ndGggPT0gMSl7DQorICAgICAgICBzZXRQb2xsRGVsYXkoDQorICAgICAgICAgIHBy ZWZlcmVuY2VzW2tleXNbMF0rJ19yZWZyZXNoJ10qMTAwMA0KKyAgICAgICAgKTsNCisgICAgICB9 IGVsc2Ugew0KKyAgICAgICAgc2V0UG9sbERlbGF5KA0KKyAgICAgICAgICBnZXRHQ0QoT2JqZWN0 LmtleXMoY2hhcnRzRGVmYXVsdCkubWFwKChuYW1lKT0+cHJlZmVyZW5jZXNbbmFtZSsnX3JlZnJl c2gnXSkpKjEwMDANCisgICAgICAgICk7DQorICAgICAgfQ0KKyAgICB9DQorICB9LCBbcHJlZmVy ZW5jZXNdKTsNCisNCisgIHVzZUVmZmVjdCgoKT0+ew0KKyAgICAvKiBDaGFydHMgcmVuZGVyZWQg YXJlIG5vdCB2aXNpYmxlIHdoZW4sIHRoZSBkYXNoYm9hcmQgaXMgaGlkZGVuIGJ1dCBsYXRlciB2 aXNpYmxlICovDQorICAgIGlmKHBhZ2VWaXNpYmxlICYmICFjaGFydERyYXduT25jZSkgew0KKyAg ICAgIHNldENoYXJ0RHJhd25PbmNlKHRydWUpOw0KKyAgICB9DQorICB9LCBbcGFnZVZpc2libGVd KTsNCisNCisgIHVzZUludGVydmFsKCgpPT57DQorICAgIGNvbnN0IGN1cnJFcG9jaCA9IGdldEVw b2NoKCk7DQorICAgIGlmKHJlZnJlc2hPbi5jdXJyZW50ID09PSBudWxsKSB7DQorICAgICAgbGV0 IHRtcFJlZiA9IHt9Ow0KKyAgICAgIE9iamVjdC5rZXlzKGNoYXJ0c0RlZmF1bHQpLmZvckVhY2go KG5hbWUpPT57DQorICAgICAgICB0bXBSZWZbbmFtZV0gPSBjdXJyRXBvY2g7DQorICAgICAgfSk7 DQorICAgICAgcmVmcmVzaE9uLmN1cnJlbnQgPSB0bXBSZWY7DQorICAgIH0NCisNCisgICAgbGV0 IGdldEZvciA9IFtdOw0KKyAgICBPYmplY3Qua2V5cyhjaGFydHNEZWZhdWx0KS5mb3JFYWNoKChu YW1lKT0+ew0KKyAgICAgIGlmKGN1cnJFcG9jaCA+PSByZWZyZXNoT24uY3VycmVudFtuYW1lXSkg ew0KKyAgICAgICAgZ2V0Rm9yLnB1c2gobmFtZSk7DQorICAgICAgICByZWZyZXNoT24uY3VycmVu dFtuYW1lXSA9IGN1cnJFcG9jaCArIHByZWZlcmVuY2VzW25hbWUrJ19yZWZyZXNoJ107DQorICAg ICAgfQ0KKyAgICB9KTsNCisNCisgICAgbGV0IHBhdGggPSBnZXRTdGF0c1VybChzaWQsIGRpZCwg Z2V0Rm9yKTsNCisgICAgaWYgKCFwYWdlVmlzaWJsZSl7DQorICAgICAgcmV0dXJuOw0KKyAgICB9 DQorICAgIGF4aW9zLmdldChwYXRoKQ0KKyAgICAgIC50aGVuKChyZXNwKT0+ew0KKyAgICAgICAg bGV0IGRhdGEgPSByZXNwLmRhdGE7DQorICAgICAgICBzZXRFcnJvck1zZyhudWxsKTsNCisgICAg ICAgIGlmKGRhdGEuaGFzT3duUHJvcGVydHkoJ21fc3RhdHMnKSl7DQorICAgICAgICAgIGxldCBu ZXdfbV9zdGF0cyA9IHsNCisgICAgICAgICAgICAnVG90YWwnOiBkYXRhWydtX3N0YXRzJ11bJ3Rv dGFsX21lbW9yeSddP2RhdGFbJ21fc3RhdHMnXVsndG90YWxfbWVtb3J5J106MCwgDQorICAgICAg ICAgICAgJ1VzZWQnOiBkYXRhWydtX3N0YXRzJ11bJ3VzZWRfbWVtb3J5J10/ZGF0YVsnbV9zdGF0 cyddWyd1c2VkX21lbW9yeSddOjAsIA0KKyAgICAgICAgICAgICdGcmVlJzogZGF0YVsnbV9zdGF0 cyddWydmcmVlX21lbW9yeSddP2RhdGFbJ21fc3RhdHMnXVsnZnJlZV9tZW1vcnknXTowLCANCisg ICAgICAgICAgfTsNCisgICAgICAgICAgbWVtb3J5VXNhZ2VJbmZvUmVkdWNlKHtpbmNvbWluZzog bmV3X21fc3RhdHN9KTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgaWYoZGF0YS5o YXNPd25Qcm9wZXJ0eSgnc21fc3RhdHMnKSl7DQorICAgICAgICAgIGxldCBuZXdfc21fc3RhdHMg PSB7DQorICAgICAgICAgICAgJ1RvdGFsJzogZGF0YVsnc21fc3RhdHMnXVsnc3dhcF90b3RhbCdd P2RhdGFbJ3NtX3N0YXRzJ11bJ3N3YXBfdG90YWwnXTowLCANCisgICAgICAgICAgICAnVXNlZCc6 IGRhdGFbJ3NtX3N0YXRzJ11bJ3N3YXBfdXNlZCddP2RhdGFbJ3NtX3N0YXRzJ11bJ3N3YXBfdXNl ZCddOjAsIA0KKyAgICAgICAgICAgICdGcmVlJzogZGF0YVsnc21fc3RhdHMnXVsnc3dhcF9mcmVl J10/ZGF0YVsnc21fc3RhdHMnXVsnc3dhcF9mcmVlJ106MCwgDQorICAgICAgICAgIH07DQorICAg ICAgICAgIHN3YXBNZW1vcnlVc2FnZUluZm9SZWR1Y2Uoe2luY29taW5nOiBuZXdfc21fc3RhdHN9 KTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgaWYoZGF0YS5oYXNPd25Qcm9wZXJ0 eSgncG11X3N0YXRzJykpew0KKyAgICAgICAgICBsZXQgcG11X2luZm9fbGlzdCA9IFtdOw0KKyAg ICAgICAgICBjb25zdCBwbXVfaW5mb19vYmogPSBkYXRhWydwbXVfc3RhdHMnXTsNCisgICAgICAg ICAgZm9yIChjb25zdCBrZXkgaW4gcG11X2luZm9fb2JqKSB7DQorICAgICAgICAgICAgcG11X2lu Zm9fbGlzdC5wdXNoKHsgaWNvbjogJycsIHBpZDogcG11X2luZm9fb2JqW2tleV1bJ3BpZCddLCBu YW1lOiBwbXVfaW5mb19vYmpba2V5XVsnbmFtZSddLCBtZW1vcnlfdXNhZ2U6IGZvcm1hdEJ5dGVz KHBtdV9pbmZvX29ialtrZXldWydtZW1vcnlfdXNhZ2UnXSksIG1lbW9yeV9ieXRlczogZm9ybWF0 Qnl0ZXMocG11X2luZm9fb2JqW2tleV1bJ21lbW9yeV9ieXRlcyddKSB9KTsNCisgICAgICAgICAg fQ0KKyAgICAgICAgICANCisgICAgICAgICAgc2V0UHJvY2Vzc01lbW9yeVVzYWdlU3RhdHMocG11 X2luZm9fbGlzdCk7DQorICAgICAgICB9DQorDQorICAgICAgICBzZXRDb3VudGVyRGF0YSgocHJl dkNvdW50ZXJEYXRhKT0+ew0KKyAgICAgICAgICByZXR1cm4gew0KKyAgICAgICAgICAgIC4uLnBy ZXZDb3VudGVyRGF0YSwNCisgICAgICAgICAgICAuLi5kYXRhLA0KKyAgICAgICAgICB9Ow0KKyAg ICAgICAgfSk7DQorICAgICAgfSkNCisgICAgICAuY2F0Y2goKGVycm9yKT0+ew0KKyAgICAgICAg aWYoIWVycm9yTXNnKSB7DQorICAgICAgICAgIG1lbW9yeVVzYWdlSW5mb1JlZHVjZSh7cmVzZXQ6 Y2hhcnRzRGVmYXVsdFsnbV9zdGF0cyddfSk7DQorICAgICAgICAgIHN3YXBNZW1vcnlVc2FnZUlu Zm9SZWR1Y2Uoe3Jlc2V0OmNoYXJ0c0RlZmF1bHRbJ3NtX3N0YXRzJ119KTsNCisgICAgICAgICAg c2V0Q291bnRlckRhdGEoe30pOw0KKyAgICAgICAgICBpZihlcnJvci5yZXNwb25zZSkgew0KKyAg ICAgICAgICAgIGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQyOCkgew0KKyAgICAgICAg ICAgICAgc2V0RXJyb3JNc2coZ2V0dGV4dCgnUGxlYXNlIGNvbm5lY3QgdG8gdGhlIHNlbGVjdGVk IHNlcnZlciB0byB2aWV3IHRoZSBncmFwaC4nKSk7DQorICAgICAgICAgICAgfSBlbHNlIHsNCisg ICAgICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxz dCByZW5kZXJpbmcgdGhlIGdyYXBoLicpKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgIH0g ZWxzZSBpZihlcnJvci5yZXF1ZXN0KSB7DQorICAgICAgICAgICAgc2V0RXJyb3JNc2coZ2V0dGV4 dCgnTm90IGNvbm5lY3RlZCB0byB0aGUgc2VydmVyIG9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBz ZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAg ICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7DQorICAgICAg ICAgIH0NCisgICAgICAgIH0NCisgICAgICB9KTsNCisgIH0sIGVuYWJsZVBvbGwgPyBwb2xsRGVs YXkgOiAtMSk7DQorICByZXR1cm4gKA0KKyAgICA8Pg0KKyAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9 J2dyYXBoLXBvbGwtZGVsYXknIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0+e3BvbGxEZWxheX08 L2Rpdj4NCisgICAgICB7Y2hhcnREcmF3bk9uY2UgJiYNCisgICAgICAgIDxNZW1vcnlXcmFwcGVy DQorICAgICAgICAgIG1lbW9yeVVzYWdlSW5mbz17dHJhbnNmb3JtRGF0YShtZW1vcnlVc2FnZUlu Zm8sIHByZWZlcmVuY2VzWydtX3N0YXRzX3JlZnJlc2gnXSl9DQorICAgICAgICAgIHN3YXBNZW1v cnlVc2FnZUluZm89e3RyYW5zZm9ybURhdGEoc3dhcE1lbW9yeVVzYWdlSW5mbywgcHJlZmVyZW5j ZXNbJ3NtX3N0YXRzX3JlZnJlc2gnXSl9DQorICAgICAgICAgIHByb2Nlc3NNZW1vcnlVc2FnZVN0 YXRzPXtwcm9jZXNzTWVtb3J5VXNhZ2VTdGF0c30NCisgICAgICAgICAgdGFibGVIZWFkZXI9e3Rh YmxlSGVhZGVyfQ0KKyAgICAgICAgICBlcnJvck1zZz17ZXJyb3JNc2d9DQorICAgICAgICAgIHNo b3dUb29sdGlwPXtwcmVmZXJlbmNlc1snZ3JhcGhfbW91c2VfdHJhY2snXX0NCisgICAgICAgICAg c2hvd0RhdGFQb2ludHM9e3ByZWZlcmVuY2VzWydncmFwaF9kYXRhX3BvaW50cyddfQ0KKyAgICAg ICAgICBsaW5lQm9yZGVyV2lkdGg9e3ByZWZlcmVuY2VzWydncmFwaF9saW5lX2JvcmRlcl93aWR0 aCddfQ0KKyAgICAgICAgICBpc0RhdGFiYXNlPXtkaWQgPiAwfQ0KKyAgICAgICAgICBpc1Rlc3Q9 e2ZhbHNlfQ0KKyAgICAgICAgLz4NCisgICAgICB9DQorICAgIDwvPg0KKyAgKTsNCit9DQorDQor TWVtb3J5LnByb3BUeXBlcyA9IHsNCisgIHByZWZlcmVuY2VzOiBQcm9wVHlwZXMub2JqZWN0Lmlz UmVxdWlyZWQsDQorICBzaWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcu aXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksDQorICBkaWQ6IFByb3BU eXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51 bWJlci5pc1JlcXVpcmVkXSksDQorICBwYWdlVmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsDQorICBl bmFibGVQb2xsOiBQcm9wVHlwZXMuYm9vbCwNCit9Ow0KKw0KK2V4cG9ydCBmdW5jdGlvbiBNZW1v cnlXcmFwcGVyKHByb3BzKSB7DQorICBjb25zdCBjbGFzc2VzID0gdXNlU3R5bGVzKCk7DQorICBj b25zdCBvcHRpb25zID0gdXNlTWVtbygoKT0+KHsNCisgICAgc2hvd0RhdGFQb2ludHM6IHByb3Bz LnNob3dEYXRhUG9pbnRzLA0KKyAgICBzaG93VG9vbHRpcDogcHJvcHMuc2hvd1Rvb2x0aXAsDQor ICAgIGxpbmVCb3JkZXJXaWR0aDogcHJvcHMubGluZUJvcmRlcldpZHRoLA0KKyAgfSksIFtwcm9w cy5zaG93VG9vbHRpcCwgcHJvcHMuc2hvd0RhdGFQb2ludHMsIHByb3BzLmxpbmVCb3JkZXJXaWR0 aF0pOw0KKw0KKyAgcmV0dXJuICgNCisgICAgPD4NCisgICAgICA8R3JpZCBjb250YWluZXIgc3Bh Y2luZz17MX0gY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lcn0+DQorICAgICAgICA8R3JpZCBp dGVtIG1kPXs2fSBzbT17MTJ9Pg0KKyAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5j b250YWluZXJIZWFkZXJ9PntnZXR0ZXh0KCdNZW1vcnknKX08L2Rpdj4NCisgICAgICAgICAgPENo YXJ0Q29udGFpbmVyIGlkPSdtLWdyYXBoJyB0aXRsZT17Z2V0dGV4dCgnJyl9IGRhdGFzZXRzPXtw cm9wcy5tZW1vcnlVc2FnZUluZm8uZGF0YXNldHN9ICBlcnJvck1zZz17cHJvcHMuZXJyb3JNc2d9 IGlzVGVzdD17cHJvcHMuaXNUZXN0fT4NCisgICAgICAgICAgICA8U3RyZWFtaW5nQ2hhcnQgZGF0 YT17cHJvcHMubWVtb3J5VXNhZ2VJbmZvfSBkYXRhUG9pbnRTaXplPXtEQVRBX1BPSU5UX1NJWkV9 IHhSYW5nZT17WF9BWElTX0xFTkdUSH0gb3B0aW9ucz17b3B0aW9uc30gLz4NCisgICAgICAgICAg PC9DaGFydENvbnRhaW5lcj4NCisgICAgICAgIDwvR3JpZD4NCisgICAgICAgIDxHcmlkIGl0ZW0g bWQ9ezZ9IHNtPXsxMn0+DQorICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRh aW5lckhlYWRlcn0+e2dldHRleHQoJ1N3YXAgTWVtb3J5Jyl9PC9kaXY+DQorICAgICAgICAgIDxD aGFydENvbnRhaW5lciBpZD0nc20tZ3JhcGgnIHRpdGxlPXtnZXR0ZXh0KCcnKX0gZGF0YXNldHM9 e3Byb3BzLnN3YXBNZW1vcnlVc2FnZUluZm8uZGF0YXNldHN9ICBlcnJvck1zZz17cHJvcHMuZXJy b3JNc2d9IGlzVGVzdD17cHJvcHMuaXNUZXN0fT4NCisgICAgICAgICAgICA8U3RyZWFtaW5nQ2hh cnQgZGF0YT17cHJvcHMuc3dhcE1lbW9yeVVzYWdlSW5mb30gZGF0YVBvaW50U2l6ZT17REFUQV9Q T0lOVF9TSVpFfSB4UmFuZ2U9e1hfQVhJU19MRU5HVEh9IG9wdGlvbnM9e29wdGlvbnN9IC8+DQor ICAgICAgICAgIDwvQ2hhcnRDb250YWluZXI+DQorICAgICAgICA8L0dyaWQ+DQorICAgICAgPC9H cmlkPg0KKyAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9e2NsYXNz ZXMuZml4ZWRDb250YWluZXJ9Pg0KKyAgICAgICAgPFBnVGFibGUNCisgICAgICAgICAgY2xhc3NO YW1lPXtjbGFzc2VzLmF1dG9SZXNpemVyfQ0KKyAgICAgICAgICBjb2x1bW5zPXtwcm9wcy50YWJs ZUhlYWRlcn0NCisgICAgICAgICAgZGF0YT17cHJvcHMucHJvY2Vzc01lbW9yeVVzYWdlU3RhdHN9 DQorICAgICAgICAgIG1zZz17cHJvcHMuZXJyb3JNc2d9DQorICAgICAgICAgIHR5cGU9eydwYW5l bCd9DQorICAgICAgICA+PC9QZ1RhYmxlPg0KKyAgICAgIDwvR3JpZD4NCisgICAgPC8+DQorICAp Ow0KK30NCisNCitjb25zdCBwcm9wVHlwZVN0YXRzID0gUHJvcFR5cGVzLnNoYXBlKHsNCisgIGRh dGFzZXRzOiBQcm9wVHlwZXMuYXJyYXksDQorICByZWZyZXNoUmF0ZTogUHJvcFR5cGVzLm51bWJl ci5pc1JlcXVpcmVkLA0KK30pOw0KK01lbW9yeVdyYXBwZXIucHJvcFR5cGVzID0gew0KKyAgbWVt b3J5VXNhZ2VJbmZvOiBwcm9wVHlwZVN0YXRzLmlzUmVxdWlyZWQsDQorICBzd2FwTWVtb3J5VXNh Z2VJbmZvOiBwcm9wVHlwZVN0YXRzLmlzUmVxdWlyZWQsDQorICBwcm9jZXNzTWVtb3J5VXNhZ2VT dGF0czogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsDQorICB0YWJsZUhlYWRlcjogUHJvcFR5 cGVzLmFycmF5LmlzUmVxdWlyZWQsDQorICBlcnJvck1zZzogUHJvcFR5cGVzLnN0cmluZywNCisg IHNob3dUb29sdGlwOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLA0KKyAgc2hvd0RhdGFQb2lu dHM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsDQorICBsaW5lQm9yZGVyV2lkdGg6IFByb3BU eXBlcy5udW1iZXIuaXNSZXF1aXJlZCwNCisgIGlzRGF0YWJhc2U6IFByb3BUeXBlcy5ib29sLmlz UmVxdWlyZWQsDQorICBpc1Rlc3Q6IFByb3BUeXBlcy5ib29sLA0KK307DQpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUNCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGlj L2pzL1N5c3RlbVN0YXRzL1N0b3JhZ2UuanN4IGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRp Yy9qcy9TeXN0ZW1TdGF0cy9TdG9yYWdlLmpzeA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMC4uZjE2NjNkZjg0DQotLS0gL2Rldi9udWxsDQorKysgYi93ZWIvcGdhZG1pbi9k YXNoYm9hcmQvc3RhdGljL2pzL1N5c3RlbVN0YXRzL1N0b3JhZ2UuanN4DQpAQCAtMCwwICsxLDMy OSBAQA0KK2ltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVJl ZHVjZXIsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7DQoraW1wb3J0IGdldHRleHQgZnJvbSAnc291 cmNlcy9nZXR0ZXh0JzsNCitpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnOw0KK2lt cG9ydCB7IG1ha2VTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnOw0KK2lt cG9ydCB1cmxfZm9yIGZyb20gJ3NvdXJjZXMvdXJsX2Zvcic7DQoraW1wb3J0IHtnZXRHQ0QsIGdl dEVwb2NofSBmcm9tICdzb3VyY2VzL3V0aWxzJzsNCitpbXBvcnQge0NoYXJ0Q29udGFpbmVyfSBm cm9tICcuLi9EYXNoYm9hcmQnOw0KK2ltcG9ydCB7IEdyaWQgfSBmcm9tICdAbWF0ZXJpYWwtdWkv Y29yZSc7DQoraW1wb3J0IHsgREFUQV9QT0lOVF9TSVpFIH0gZnJvbSAnc291cmNlcy9jaGFydGpz JzsNCitpbXBvcnQgU3RyZWFtaW5nQ2hhcnQgZnJvbSAnLi4vLi4vLi4vLi4vc3RhdGljL2pzL2Nv bXBvbmVudHMvUGdDaGFydC9TdHJlYW1pbmdDaGFydCc7DQoraW1wb3J0IHt1c2VJbnRlcnZhbCwg dXNlUHJldmlvdXN9IGZyb20gJ3NvdXJjZXMvY3VzdG9tX2hvb2tzJzsNCitpbXBvcnQgYXhpb3Mg ZnJvbSAnYXhpb3MnOw0KKw0KK2V4cG9ydCBjb25zdCBYX0FYSVNfTEVOR1RIID0gNzU7DQorDQor Y29uc3QgdXNlU3R5bGVzID0gbWFrZVN0eWxlcygodGhlbWUpID0+ICh7DQorICBhdXRvUmVzaXpl cjogew0KKyAgICBoZWlnaHQ6ICcxMDAlICFpbXBvcnRhbnQnLA0KKyAgICB3aWR0aDogJzEwMCUg IWltcG9ydGFudCcsDQorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ3JleVs0MDBdLA0K KyAgICBwYWRkaW5nOiAnNy41cHgnLA0KKyAgICBvdmVyZmxvd1g6ICdhdXRvICFpbXBvcnRhbnQn LA0KKyAgICBvdmVyZmxvd1k6ICdoaWRkZW4gIWltcG9ydGFudCcsDQorICAgIG1pbkhlaWdodDog JzEwMCUnLA0KKyAgICBtaW5XaWR0aDogJzEwMCUnLA0KKyAgfSwNCisgIGNvbnRhaW5lcjogew0K KyAgICBoZWlnaHQ6ICdhdXRvJywNCisgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5ncmV5 WzIwMF0sDQorICAgIHBhZGRpbmc6ICcxMHB4JywNCisgICAgbWFyZ2luQm90dG9tOiAnMzBweCcs DQorICB9LA0KKyAgaW9EaXNrQ29udGFpbmVyOiB7DQorICAgIGhlaWdodDogJ2F1dG8nLA0KKyAg ICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdyZXlbMjAwXSwNCisgICAgcGFkZGluZzogJzEw cHgnLA0KKyAgfSwNCisgIGZpeGVkQ29udGFpbmVyOiB7DQorICAgIGhlaWdodDogJzU3N3B4JywN CisgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5ncmV5WzIwMF0sDQorICAgIHBhZGRpbmc6 ICcxMHB4JywNCisgICAgbWFyZ2luQm90dG9tOiAnMzBweCcsDQorICB9LA0KKyAgY29udGFpbmVy SGVhZGVyOiB7DQorICAgIGZvbnRTaXplOiAnMTZweCcsDQorICAgIGZvbnRXZWlnaHQ6ICdib2xk JywNCisgICAgbWFyZ2luQm90dG9tOiAnNXB4JywNCisgIH0sDQorICBjaGFydEhlYWRlcjogew0K KyAgICBmb250U2l6ZTogJzE0cHgnLA0KKyAgICBmb250V2VpZ2h0OiAnYm9sZCcsDQorICAgIG1h cmdpbkJvdHRvbTogJzVweCcsDQorICB9DQorfSkpOw0KKw0KK2V4cG9ydCBmdW5jdGlvbiB0cmFu c2Zvcm1EYXRhKGxhYmVscywgcmVmcmVzaFJhdGUpIHsNCisgIGNvbnN0IGNvbG9ycyA9IFsnI0ZG NjM4NCcsJyMzNkEyRUInLCcjRkZDRTU2JywnIzRCQzBDMCcsJyM5OTY2RkYnLCcjRkY5RjQwJywn IzhENkU2MycsJyMyMTk2RjMnLCcjRkZFQjNCJywnIzlDMjdCMCcsJyMwMEJDRDQnLCcjQ0REQzM5 J107DQorICBsZXQgZGF0YXNldHMgPSBPYmplY3Qua2V5cyhsYWJlbHMpLm1hcCgobGFiZWwsIGkp PT57DQorICAgIHJldHVybiB7DQorICAgICAgbGFiZWw6IGxhYmVsLA0KKyAgICAgIGRhdGE6IGxh YmVsc1tsYWJlbF0gfHwgW10sDQorICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yc1tpXSwNCisgICAg ICBwb2ludEhpdFJhZGl1czogREFUQV9QT0lOVF9TSVpFLA0KKyAgICB9Ow0KKyAgfSkgfHwgW107 DQorDQorICByZXR1cm4gew0KKyAgICBkYXRhc2V0czogZGF0YXNldHMsDQorICAgIHJlZnJlc2hS YXRlOiByZWZyZXNoUmF0ZSwNCisgIH07DQorfQ0KKw0KKy8qIFVSTCBmb3IgZmV0Y2hpbmcgZ3Jh cGhzIGRhdGEgKi8NCitleHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHNVcmwoc2lkPS0xLCBkaWQ9LTEs IGNoYXJ0X25hbWVzPVtdKSB7DQorICBsZXQgYmFzZV91cmwgPSB1cmxfZm9yKCdkYXNoYm9hcmQu c3lzdGVtX3N0YXRpc3RpY3MnKTsNCisgIGJhc2VfdXJsICs9ICcvJyArIHNpZDsNCisgIGJhc2Vf dXJsICs9IChkaWQgPiAwKSA/ICgnLycgKyBkaWQpIDogJyc7DQorICBiYXNlX3VybCArPSAnP2No YXJ0X25hbWVzPScgKyBjaGFydF9uYW1lcy5qb2luKCcsJyk7DQorICANCisgIHJldHVybiBiYXNl X3VybDsNCit9DQorDQorLyogVGhpcyB3aWxsIHByb2Nlc3MgaW5jb21pbmcgY2hhcnRzIGRhdGEg YWRkIGl0IHRoZSBwcmV2aW91cyBjaGFydHMNCisgKiBkYXRhIHRvIGdldCB0aGUgbmV3IHN0YXRl Lg0KKyAqLw0KK2V4cG9ydCBmdW5jdGlvbiBpb1N0YXRzUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7 DQorDQorICBpZihhY3Rpb24ucmVzZXQpIHsNCisgICAgcmV0dXJuIGFjdGlvbi5yZXNldDsNCisg IH0NCisNCisgIGlmKCFhY3Rpb24uaW5jb21pbmcpIHsNCisgICAgcmV0dXJuIHN0YXRlOw0KKyAg fQ0KKw0KKyAgaWYoIWFjdGlvbi5jb3VudGVyRGF0YSkgew0KKyAgICBhY3Rpb24uY291bnRlckRh dGEgPSBhY3Rpb24uaW5jb21pbmc7DQorICB9DQorDQorICBsZXQgbmV3U3RhdGUgPSB7fTsNCisg IE9iamVjdC5rZXlzKGFjdGlvbi5pbmNvbWluZykuZm9yRWFjaChkaXNrX3N0YXRzID0+IHsNCisg ICAgbmV3U3RhdGVbZGlza19zdGF0c10gPSB7fTsNCisgICAgT2JqZWN0LmtleXMoYWN0aW9uLmlu Y29taW5nW2Rpc2tfc3RhdHNdKS5mb3JFYWNoKGxhYmVsID0+IHsNCisgICAgICBpZihzdGF0ZVtk aXNrX3N0YXRzXVtsYWJlbF0pIHsNCisgICAgICAgIG5ld1N0YXRlW2Rpc2tfc3RhdHNdW2xhYmVs XSA9IFsNCisgICAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9uLmluY29taW5nW2Rpc2tf c3RhdHNdW2xhYmVsXSAtIGFjdGlvbi5jb3VudGVyRGF0YVtkaXNrX3N0YXRzXVtsYWJlbF0gOiBh Y3Rpb24uaW5jb21pbmdbZGlza19zdGF0c11bbGFiZWxdLA0KKyAgICAgICAgICAuLi5zdGF0ZVtk aXNrX3N0YXRzXVtsYWJlbF0uc2xpY2UoMCwgWF9BWElTX0xFTkdUSC0xKSwNCisgICAgICAgIF07 DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIG5ld1N0YXRlW2Rpc2tfc3RhdHNdW2xhYmVsXSA9 IFsNCisgICAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9uLmluY29taW5nW2Rpc2tfc3Rh dHNdW2xhYmVsXSAtIGFjdGlvbi5jb3VudGVyRGF0YVtkaXNrX3N0YXRzXVtsYWJlbF0gOiBhY3Rp b24uaW5jb21pbmdbZGlza19zdGF0c11bbGFiZWxdLA0KKyAgICAgICAgXTsNCisgICAgICB9DQor ICAgIH0pOw0KKyAgfSk7DQorICByZXR1cm4gbmV3U3RhdGU7DQorfQ0KKw0KK2NvbnN0IGNoYXJ0 c0RlZmF1bHQgPSB7DQorICAnaW9fc3RhdHMnOiB7fSwNCit9Ow0KKw0KK2V4cG9ydCBkZWZhdWx0 IGZ1bmN0aW9uIFN0b3JhZ2Uoe3ByZWZlcmVuY2VzLCBzaWQsIGRpZCwgcGFnZVZpc2libGUsIGVu YWJsZVBvbGw9dHJ1ZX0pIHsNCisgIGNvbnN0IHJlZnJlc2hPbiA9IHVzZVJlZihudWxsKTsNCisg IGNvbnN0IHByZXZQcmVmZXJuY2VzID0gdXNlUHJldmlvdXMocHJlZmVyZW5jZXMpOw0KKyAgDQor ICBjb25zdCBbaW9JbmZvLCBpb0luZm9SZWR1Y2VdID0gdXNlUmVkdWNlcihpb1N0YXRzUmVkdWNl ciwgY2hhcnRzRGVmYXVsdFsnaW9fc3RhdHMnXSk7DQorDQorICBjb25zdCBbY291bnRlckRhdGEs IHNldENvdW50ZXJEYXRhXSA9IHVzZVN0YXRlKHt9KTsNCisNCisgIGNvbnN0IFtwb2xsRGVsYXks IHNldFBvbGxEZWxheV0gPSB1c2VTdGF0ZSg1MDAwKTsNCisgIGNvbnN0IFtlcnJvck1zZywgc2V0 RXJyb3JNc2ddID0gdXNlU3RhdGUobnVsbCk7DQorICBjb25zdCBbY2hhcnREcmF3bk9uY2UsIHNl dENoYXJ0RHJhd25PbmNlXSA9IHVzZVN0YXRlKGZhbHNlKTsNCisNCisgIHVzZUVmZmVjdCgoKT0+ ew0KKyAgICBsZXQgY2FsY1BvbGxEZWxheSA9IGZhbHNlOw0KKyAgICBpZihwcmV2UHJlZmVybmNl cykgew0KKyAgICAgIGlmKHByZXZQcmVmZXJuY2VzWydpb19zdGF0c19yZWZyZXNoJ10gIT0gcHJl ZmVyZW5jZXNbJ2lvX3N0YXRzX3JlZnJlc2gnXSkgew0KKyAgICAgICAgaW9JbmZvUmVkdWNlKHty ZXNldDogY2hhcnRzRGVmYXVsdFsnaW9fc3RhdHMnXX0pOw0KKyAgICAgICAgY2FsY1BvbGxEZWxh eSA9IHRydWU7DQorICAgICAgfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAgIGNhbGNQb2xsRGVsYXkg PSB0cnVlOw0KKyAgICB9DQorICAgIGlmKGNhbGNQb2xsRGVsYXkpIHsNCisgICAgICBjb25zdCBr ZXlzID0gT2JqZWN0LmtleXMoY2hhcnRzRGVmYXVsdCk7DQorICAgICAgY29uc3QgbGVuZ3RoID0g a2V5cy5sZW5ndGg7DQorICAgICAgaWYobGVuZ3RoID09IDEpew0KKyAgICAgICAgc2V0UG9sbERl bGF5KA0KKyAgICAgICAgICBwcmVmZXJlbmNlc1trZXlzWzBdKydfcmVmcmVzaCddKjEwMDANCisg ICAgICAgICk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIHNldFBvbGxEZWxheSgNCisgICAg ICAgICAgZ2V0R0NEKE9iamVjdC5rZXlzKGNoYXJ0c0RlZmF1bHQpLm1hcCgobmFtZSk9PnByZWZl cmVuY2VzW25hbWUrJ19yZWZyZXNoJ10pKSoxMDAwDQorICAgICAgICApOw0KKyAgICAgIH0NCisg ICAgfQ0KKyAgfSwgW3ByZWZlcmVuY2VzXSk7DQorDQorICB1c2VFZmZlY3QoKCk9PnsNCisgICAg LyogQ2hhcnRzIHJlbmRlcmVkIGFyZSBub3QgdmlzaWJsZSB3aGVuLCB0aGUgZGFzaGJvYXJkIGlz IGhpZGRlbiBidXQgbGF0ZXIgdmlzaWJsZSAqLw0KKyAgICBpZihwYWdlVmlzaWJsZSAmJiAhY2hh cnREcmF3bk9uY2UpIHsNCisgICAgICBzZXRDaGFydERyYXduT25jZSh0cnVlKTsNCisgICAgfQ0K KyAgfSwgW3BhZ2VWaXNpYmxlXSk7DQorDQorICB1c2VJbnRlcnZhbCgoKT0+ew0KKyAgICBjb25z dCBjdXJyRXBvY2ggPSBnZXRFcG9jaCgpOw0KKyAgICBpZihyZWZyZXNoT24uY3VycmVudCA9PT0g bnVsbCkgew0KKyAgICAgIGxldCB0bXBSZWYgPSB7fTsNCisgICAgICBPYmplY3Qua2V5cyhjaGFy dHNEZWZhdWx0KS5mb3JFYWNoKChuYW1lKT0+ew0KKyAgICAgICAgdG1wUmVmW25hbWVdID0gY3Vy ckVwb2NoOw0KKyAgICAgIH0pOw0KKyAgICAgIHJlZnJlc2hPbi5jdXJyZW50ID0gdG1wUmVmOw0K KyAgICB9DQorDQorICAgIGxldCBnZXRGb3IgPSBbXTsNCisgICAgT2JqZWN0LmtleXMoY2hhcnRz RGVmYXVsdCkuZm9yRWFjaCgobmFtZSk9PnsNCisgICAgICBpZihjdXJyRXBvY2ggPj0gcmVmcmVz aE9uLmN1cnJlbnRbbmFtZV0pIHsNCisgICAgICAgIGdldEZvci5wdXNoKG5hbWUpOw0KKyAgICAg ICAgcmVmcmVzaE9uLmN1cnJlbnRbbmFtZV0gPSBjdXJyRXBvY2ggKyBwcmVmZXJlbmNlc1tuYW1l KydfcmVmcmVzaCddOw0KKyAgICAgIH0NCisgICAgfSk7DQorDQorICAgIGxldCBwYXRoID0gZ2V0 U3RhdHNVcmwoc2lkLCBkaWQsIGdldEZvcik7DQorICAgIGlmICghcGFnZVZpc2libGUpew0KKyAg ICAgIHJldHVybjsNCisgICAgfQ0KKyAgICBheGlvcy5nZXQocGF0aCkNCisgICAgICAudGhlbigo cmVzcCk9PnsNCisgICAgICAgIGxldCBkYXRhID0gcmVzcC5kYXRhOw0KKyAgICAgICAgc2V0RXJy b3JNc2cobnVsbCk7DQorICAgICAgICBpZihkYXRhLmhhc093blByb3BlcnR5KCdpb19zdGF0cycp KXsNCisgICAgICAgICAgY29uc3QgaW9faW5mb19vYmogPSBkYXRhWydpb19zdGF0cyddOw0KKyAg ICAgICAgICBmb3IgKGNvbnN0IGRpc2sgaW4gaW9faW5mb19vYmopIHsNCisgICAgICAgICAgICBp ZighY2hhcnRzRGVmYXVsdC5pb19zdGF0cy5oYXNPd25Qcm9wZXJ0eShgJHtkaXNrfV90b3RhbF9y d2ApKXsNCisgICAgICAgICAgICAgIGNoYXJ0c0RlZmF1bHQuaW9fc3RhdHNbYCR7ZGlza31fdG90 YWxfcndgXSA9IHsnUmVhZCc6IFtdLCAnV3JpdGUnOiBbXX07DQorICAgICAgICAgICAgfQ0KKyAg ICAgICAgICAgIGlmKCFpb0luZm8uaGFzT3duUHJvcGVydHkoYCR7ZGlza31fdG90YWxfcndgKSl7 DQorICAgICAgICAgICAgICBpb0luZm9bYCR7ZGlza31fdG90YWxfcndgXSA9IHsnUmVhZCc6IFtd LCAnV3JpdGUnOiBbXX07DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmKCFjaGFy dHNEZWZhdWx0LmlvX3N0YXRzLmhhc093blByb3BlcnR5KGAke2Rpc2t9X2J5dGVzX3J3YCkpew0K KyAgICAgICAgICAgICAgY2hhcnRzRGVmYXVsdC5pb19zdGF0c1tgJHtkaXNrfV9ieXRlc19yd2Bd ID0geydSZWFkJzogW10sICdXcml0ZSc6IFtdfTsNCisgICAgICAgICAgICB9DQorICAgICAgICAg ICAgaWYoIWlvSW5mby5oYXNPd25Qcm9wZXJ0eShgJHtkaXNrfV9ieXRlc19yd2ApKXsNCisgICAg ICAgICAgICAgIGlvSW5mb1tgJHtkaXNrfV9ieXRlc19yd2BdID0geydSZWFkJzogW10sICdXcml0 ZSc6IFtdfTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYoIWNoYXJ0c0RlZmF1 bHQuaW9fc3RhdHMuaGFzT3duUHJvcGVydHkoYCR7ZGlza31fdGltZV9yd2ApKXsNCisgICAgICAg ICAgICAgIGNoYXJ0c0RlZmF1bHQuaW9fc3RhdHNbYCR7ZGlza31fdGltZV9yd2BdID0geydSZWFk JzogW10sICdXcml0ZSc6IFtdfTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgaWYoIWlv SW5mby5oYXNPd25Qcm9wZXJ0eShgJHtkaXNrfV90aW1lX3J3YCkpew0KKyAgICAgICAgICAgICAg aW9JbmZvW2Ake2Rpc2t9X3RpbWVfcndgXSA9IHsnUmVhZCc6IFtdLCAnV3JpdGUnOiBbXX07DQor ICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9DQorDQorICAgICAgICAgIGxldCBuZXdfaW9fc3Rh dHMgPSB7fTsNCisgICAgICAgICAgZm9yIChjb25zdCBkaXNrIGluIGlvX2luZm9fb2JqKSB7DQor ICAgICAgICAgICAgbmV3X2lvX3N0YXRzW2Ake2Rpc2t9X3RvdGFsX3J3YF0gPSB7J1JlYWQnOiBp b19pbmZvX29ialtgJHtkaXNrfWBdWyd0b3RhbF9yZWFkcyddP2lvX2luZm9fb2JqW2Ake2Rpc2t9 YF1bJ3RvdGFsX3JlYWRzJ106MCwgJ1dyaXRlJzogaW9faW5mb19vYmpbYCR7ZGlza31gXVsndG90 YWxfd3JpdGVzJ10/aW9faW5mb19vYmpbYCR7ZGlza31gXVsndG90YWxfd3JpdGVzJ106MH07DQor ICAgICAgICAgICAgbmV3X2lvX3N0YXRzW2Ake2Rpc2t9X2J5dGVzX3J3YF0gPSB7J1JlYWQnOiBp b19pbmZvX29ialtgJHtkaXNrfWBdWydyZWFkX2J5dGVzJ10/aW9faW5mb19vYmpbYCR7ZGlza31g XVsncmVhZF9ieXRlcyddOjAsICdXcml0ZSc6IGlvX2luZm9fb2JqW2Ake2Rpc2t9YF1bJ3dyaXRl X2J5dGVzJ10/aW9faW5mb19vYmpbYCR7ZGlza31gXVsnd3JpdGVfYnl0ZXMnXTowfTsNCisgICAg ICAgICAgICBuZXdfaW9fc3RhdHNbYCR7ZGlza31fdGltZV9yd2BdID0geydSZWFkJzogaW9faW5m b19vYmpbYCR7ZGlza31gXVsncmVhZF90aW1lX21zJ10/aW9faW5mb19vYmpbYCR7ZGlza31gXVsn cmVhZF90aW1lX21zJ106MCwgJ1dyaXRlJzogaW9faW5mb19vYmpbYCR7ZGlza31gXVsnd3JpdGVf dGltZV9tcyddP2lvX2luZm9fb2JqW2Ake2Rpc2t9YF1bJ3dyaXRlX3RpbWVfbXMnXTowfTsNCisg ICAgICAgICAgfQ0KKyAgICAgICAgICBpb0luZm9SZWR1Y2Uoe2luY29taW5nOiBuZXdfaW9fc3Rh dHN9KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHNldENvdW50ZXJEYXRhKChwcmV2Q291bnRl ckRhdGEpPT57DQorICAgICAgICAgIHJldHVybiB7DQorICAgICAgICAgICAgLi4ucHJldkNvdW50 ZXJEYXRhLA0KKyAgICAgICAgICAgIC4uLmRhdGEsDQorICAgICAgICAgIH07DQorICAgICAgICB9 KTsNCisgICAgICB9KQ0KKyAgICAgIC5jYXRjaCgoZXJyb3IpPT57DQorICAgICAgICBpZighZXJy b3JNc2cpIHsNCisgICAgICAgICAgaW9JbmZvUmVkdWNlKHtyZXNldDpjaGFydHNEZWZhdWx0Wydp b19zdGF0cyddfSk7DQorICAgICAgICAgIHNldENvdW50ZXJEYXRhKHt9KTsNCisgICAgICAgICAg aWYoZXJyb3IucmVzcG9uc2UpIHsNCisgICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2Uuc3Rh dHVzID09PSA0MjgpIHsNCisgICAgICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ1BsZWFz ZSBjb25uZWN0IHRvIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgdG8gdmlldyB0aGUgZ3JhcGguJykpOw0K KyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0 KCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsc3QgcmVuZGVyaW5nIHRoZSBncmFwaC4nKSk7DQorICAg ICAgICAgICAgfQ0KKyAgICAgICAgICB9IGVsc2UgaWYoZXJyb3IucmVxdWVzdCkgew0KKyAgICAg ICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlciBv ciB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKSk7DQorICAg ICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGNvbnNv bGUuZXJyb3IoZXJyb3IpOw0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgfSk7DQor ICB9LCBlbmFibGVQb2xsID8gcG9sbERlbGF5IDogLTEpOw0KKw0KKyAgcmV0dXJuICgNCisgICAg PD4NCisgICAgICA8ZGl2IGRhdGEtdGVzdGlkPSdncmFwaC1wb2xsLWRlbGF5JyBzdHlsZT17e2Rp c3BsYXk6ICdub25lJ319Pntwb2xsRGVsYXl9PC9kaXY+DQorICAgICAge2NoYXJ0RHJhd25PbmNl ICYmDQorICAgICAgICA8U3RvcmFnZVdyYXBwZXINCisgICAgICAgICAgaW9JbmZvPXtpb0luZm99 DQorICAgICAgICAgIGlvUmVmcmVzaFJhdGU9e3ByZWZlcmVuY2VzWydpb19zdGF0c19yZWZyZXNo J119DQorICAgICAgICAgIGVycm9yTXNnPXtlcnJvck1zZ30NCisgICAgICAgICAgc2hvd1Rvb2x0 aXA9e3ByZWZlcmVuY2VzWydncmFwaF9tb3VzZV90cmFjayddfQ0KKyAgICAgICAgICBzaG93RGF0 YVBvaW50cz17cHJlZmVyZW5jZXNbJ2dyYXBoX2RhdGFfcG9pbnRzJ119DQorICAgICAgICAgIGxp bmVCb3JkZXJXaWR0aD17cHJlZmVyZW5jZXNbJ2dyYXBoX2xpbmVfYm9yZGVyX3dpZHRoJ119DQor ICAgICAgICAgIGlzRGF0YWJhc2U9e2RpZCA+IDB9DQorICAgICAgICAgIGlzVGVzdD17ZmFsc2V9 DQorICAgICAgICAvPg0KKyAgICAgIH0NCisgICAgPC8+DQorICApOw0KK30NCisNCitTdG9yYWdl LnByb3BUeXBlcyA9IHsNCisgIHByZWZlcmVuY2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWly ZWQsDQorICBzaWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1 aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksDQorICBkaWQ6IFByb3BUeXBlcy5v bmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5p c1JlcXVpcmVkXSksDQorICBwYWdlVmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsDQorICBlbmFibGVQ b2xsOiBQcm9wVHlwZXMuYm9vbCwNCit9Ow0KKw0KK2V4cG9ydCBmdW5jdGlvbiBTdG9yYWdlV3Jh cHBlcihwcm9wcykgew0KKyAgY29uc3QgY2xhc3NlcyA9IHVzZVN0eWxlcygpOw0KKyAgY29uc3Qg b3B0aW9ucyA9IHVzZU1lbW8oKCk9Pih7DQorICAgIHNob3dEYXRhUG9pbnRzOiBwcm9wcy5zaG93 RGF0YVBvaW50cywNCisgICAgc2hvd1Rvb2x0aXA6IHByb3BzLnNob3dUb29sdGlwLA0KKyAgICBs aW5lQm9yZGVyV2lkdGg6IHByb3BzLmxpbmVCb3JkZXJXaWR0aCwNCisgIH0pLCBbcHJvcHMuc2hv d1Rvb2x0aXAsIHByb3BzLnNob3dEYXRhUG9pbnRzLCBwcm9wcy5saW5lQm9yZGVyV2lkdGhdKTsN CisNCisgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcy5pb0luZm8pOw0KKyAgcmV0dXJu ICgNCisgICAgPD4NCisgICAgICB7a2V5cy5tYXAoKGtleSwgaW5kZXgpID0+ICgNCisgICAgICAg IGluZGV4ICUgMyA9PT0gMCAmJiAoDQorICAgICAgICAgIDxHcmlkIGtleT17YGRpc2stJHtpbmRl eH1gfSBjb250YWluZXIgc3BhY2luZz17MX0gY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lcn0+ DQorICAgICAgICAgICAgPEdyaWQgY29udGFpbmVyIHNwYWNpbmc9ezF9IGNsYXNzTmFtZT17Y2xh c3Nlcy5pb0Rpc2tDb250YWluZXJ9Pg0KKyAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ns YXNzZXMuY29udGFpbmVySGVhZGVyfT57Z2V0dGV4dChgRGlzayAke01hdGguZmxvb3IoaW5kZXgg LyAzKSArIDF9YCl9PC9kaXY+DQorICAgICAgICAgICAgPC9HcmlkPg0KKyAgICAgICAgICAgIDxH cmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9e2NsYXNzZXMuaW9EaXNrQ29udGFp bmVyfT4NCisgICAgICAgICAgICAgIHtrZXlzLnNsaWNlKGluZGV4LCBpbmRleCArIDMpLm1hcCgo aW5uZXJLZXksIGlubmVyS2V5SW5kZXgpID0+ICgNCisgICAgICAgICAgICAgICAgPEdyaWQga2V5 PXtgJHtpbm5lcktleX1gfSBpdGVtIG1kPXs0fSBzbT17Nn0+DQorICAgICAgICAgICAgICAgICAg PGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuY2hhcnRIZWFkZXJ9Pntpbm5lcktleUluZGV4PT0wID8g Z2V0dGV4dCgnSS9PIE9wZXJhdGlvbnMgQ291bnQnKTogaW5uZXJLZXlJbmRleD09MT8gZ2V0dGV4 dCgnRGF0YSBUcmFuc2ZlciAoQnl0ZXMpJyk6Z2V0dGV4dCgnVGltZSBTcGVudCBpbiBJL08gT3Bl cmF0aW9ucyAoTWlsbGlzZWNvbmRzKScpfTwvZGl2Pg0KKyAgICAgICAgICAgICAgICAgIDxDaGFy dENvbnRhaW5lciBpZD17YGlvLWdyYXBoLSR7aW5uZXJLZXl9YH0gdGl0bGU9e2dldHRleHQoJycp fSBkYXRhc2V0cz17dHJhbnNmb3JtRGF0YShwcm9wcy5pb0luZm9baW5uZXJLZXldLCBwcm9wcy5p b1JlZnJlc2hSYXRlKS5kYXRhc2V0c30gIGVycm9yTXNnPXtwcm9wcy5lcnJvck1zZ30gaXNUZXN0 PXtwcm9wcy5pc1Rlc3R9Pg0KKyAgICAgICAgICAgICAgICAgICAgPFN0cmVhbWluZ0NoYXJ0IGRh dGE9e3RyYW5zZm9ybURhdGEocHJvcHMuaW9JbmZvW2lubmVyS2V5XSwgcHJvcHMuaW9SZWZyZXNo UmF0ZSl9IGRhdGFQb2ludFNpemU9e0RBVEFfUE9JTlRfU0laRX0geFJhbmdlPXtYX0FYSVNfTEVO R1RIfSBvcHRpb25zPXtvcHRpb25zfSAvPg0KKyAgICAgICAgICAgICAgICAgIDwvQ2hhcnRDb250 YWluZXI+DQorICAgICAgICAgICAgICAgIDwvR3JpZD4NCisgICAgICAgICAgICAgICkpfQ0KKyAg ICAgICAgICAgIDwvR3JpZD4NCisgICAgICAgICAgPC9HcmlkPg0KKyAgICAgICAgKQ0KKyAgICAg ICkpfQ0KKyAgICA8Lz4NCisgICk7DQorfQ0KKw0KK1N0b3JhZ2VXcmFwcGVyLnByb3BUeXBlcyA9 IHsNCisgIGlvSW5mbzogUHJvcFR5cGVzLm9iamVjdE9mKA0KKyAgICBQcm9wVHlwZXMuc2hhcGUo ew0KKyAgICAgIFJlYWQ6IFByb3BUeXBlcy5hcnJheSwNCisgICAgICBXcml0ZTogUHJvcFR5cGVz LmFycmF5LA0KKyAgICB9KQ0KKyAgKSwNCisgIGlvUmVmcmVzaFJhdGU6IFByb3BUeXBlcy5udW1i ZXIuaXNSZXF1aXJlZCwNCisgIGVycm9yTXNnOiBQcm9wVHlwZXMuc3RyaW5nLA0KKyAgc2hvd1Rv b2x0aXA6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsDQorICBzaG93RGF0YVBvaW50czogUHJv cFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwNCisgIGxpbmVCb3JkZXJXaWR0aDogUHJvcFR5cGVzLm51 bWJlci5pc1JlcXVpcmVkLA0KKyAgaXNEYXRhYmFzZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJl ZCwNCisgIGlzVGVzdDogUHJvcFR5cGVzLmJvb2wsDQorfTsNClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQ0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvU3lz dGVtU3RhdHMvU3VtbWFyeS5qc3ggYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL1N5 c3RlbVN0YXRzL1N1bW1hcnkuanN4DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwLi5iOGE5YTMzYjMNCi0tLSAvZGV2L251bGwNCisrKyBiL3dlYi9wZ2FkbWluL2Rhc2hib2Fy ZC9zdGF0aWMvanMvU3lzdGVtU3RhdHMvU3VtbWFyeS5qc3gNCkBAIC0wLDAgKzEsNDIyIEBADQor aW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlUmVkdWNlciwg dXNlTWVtbyB9IGZyb20gJ3JlYWN0JzsNCitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dl dHRleHQnOw0KK2ltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7DQoraW1wb3J0IHsg bWFrZVN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7DQoraW1wb3J0IHVy bF9mb3IgZnJvbSAnc291cmNlcy91cmxfZm9yJzsNCitpbXBvcnQgZ2V0QXBpSW5zdGFuY2UgZnJv bSAnc291cmNlcy9hcGlfaW5zdGFuY2UnOw0KK2ltcG9ydCB7Z2V0R0NELCBnZXRFcG9jaH0gZnJv bSAnc291cmNlcy91dGlscyc7DQoraW1wb3J0IHtDaGFydENvbnRhaW5lcn0gZnJvbSAnLi4vRGFz aGJvYXJkJzsNCitpbXBvcnQgeyBHcmlkIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnOw0KK2lt cG9ydCB7IERBVEFfUE9JTlRfU0laRSB9IGZyb20gJ3NvdXJjZXMvY2hhcnRqcyc7DQoraW1wb3J0 IFN0cmVhbWluZ0NoYXJ0IGZyb20gJy4uLy4uLy4uLy4uL3N0YXRpYy9qcy9jb21wb25lbnRzL1Bn Q2hhcnQvU3RyZWFtaW5nQ2hhcnQnOw0KK2ltcG9ydCBEb251dENoYXJ0IGZyb20gJy4uLy4uLy4u Ly4uL3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQvRG9udXRDaGFydCc7DQoraW1wb3J0IHt1 c2VJbnRlcnZhbCwgdXNlUHJldmlvdXN9IGZyb20gJ3NvdXJjZXMvY3VzdG9tX2hvb2tzJzsNCitp bXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOw0KKw0KK2V4cG9ydCBjb25zdCBYX0FYSVNfTEVOR1RI ID0gNzU7DQorDQorY29uc3QgdXNlU3R5bGVzID0gbWFrZVN0eWxlcygodGhlbWUpID0+ICh7DQor ICBhdXRvUmVzaXplcjogew0KKyAgICBoZWlnaHQ6ICcxMDAlICFpbXBvcnRhbnQnLA0KKyAgICB3 aWR0aDogJzEwMCUgIWltcG9ydGFudCcsDQorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUu Z3JleVs0MDBdLA0KKyAgICBwYWRkaW5nOiAnNy41cHgnLA0KKyAgICBvdmVyZmxvd1g6ICdhdXRv ICFpbXBvcnRhbnQnLA0KKyAgICBvdmVyZmxvd1k6ICdoaWRkZW4gIWltcG9ydGFudCcsDQorICAg IG1pbkhlaWdodDogJzEwMCUnLA0KKyAgICBtaW5XaWR0aDogJzEwMCUnLA0KKyAgfSwNCisgIHRh YmxlOiB7DQorICAgIHdpZHRoOiAnMTAwJScsDQorICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUu b3RoZXJWYXJzLnRhYmxlQmcsDQorICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2IoMjIxLCAyMjQs IDIzMCknLA0KKyAgfSwNCisgIHRhYmxlVmFsOiB7DQorICAgIGJvcmRlcjogJzFweCBzb2xpZCBy Z2IoMjIxLCAyMjQsIDIzMCkgIWltcG9ydGFudCcsDQorICAgIHBhZGRpbmc6ICcxMHB4ICFpbXBv cnRhbnQnLA0KKyAgfSwNCisgIGNvbnRhaW5lcjogew0KKyAgICBoZWlnaHQ6ICdhdXRvJywNCisg ICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5ncmV5WzIwMF0sDQorICAgIHBhZGRpbmc6ICcx MHB4JywNCisgICAgbWFyZ2luQm90dG9tOiAnMzBweCcsDQorICB9LA0KKyAgY29udGFpbmVySGVh ZGVyOiB7DQorICAgIGZvbnRTaXplOiAnMTZweCcsDQorICAgIGZvbnRXZWlnaHQ6ICdib2xkJywN CisgICAgbWFyZ2luQm90dG9tOiAnNXB4JywNCisgIH0sDQorfSkpOw0KKw0KK2V4cG9ydCBmdW5j dGlvbiB0cmFuc2Zvcm1EYXRhKGxhYmVscywgcmVmcmVzaFJhdGUpIHsNCisgIGNvbnN0IGNvbG9y cyA9IFsnI0ZGNjM4NCcsJyMzNkEyRUInLCcjRkZDRTU2JywnIzRCQzBDMCcsJyM5OTY2RkYnLCcj RkY5RjQwJywnIzhENkU2MycsJyMyMTk2RjMnLCcjRkZFQjNCJywnIzlDMjdCMCcsJyMwMEJDRDQn LCcjQ0REQzM5J107DQorICBsZXQgZGF0YXNldHMgPSBPYmplY3Qua2V5cyhsYWJlbHMpLm1hcCgo bGFiZWwsIGkpPT57DQorICAgIHJldHVybiB7DQorICAgICAgbGFiZWw6IGxhYmVsLA0KKyAgICAg IGRhdGE6IGxhYmVsc1tsYWJlbF0gfHwgW10sDQorICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yc1tp XSwNCisgICAgICBwb2ludEhpdFJhZGl1czogREFUQV9QT0lOVF9TSVpFLA0KKyAgICB9Ow0KKyAg fSkgfHwgW107DQorDQorICByZXR1cm4gew0KKyAgICBkYXRhc2V0czogZGF0YXNldHMsDQorICAg IHJlZnJlc2hSYXRlOiByZWZyZXNoUmF0ZSwNCisgIH07DQorfQ0KKw0KKy8qIFVSTCBmb3IgZmV0 Y2hpbmcgZ3JhcGhzIGRhdGEgKi8NCitleHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHNVcmwoc2lkPS0x LCBkaWQ9LTEsIGNoYXJ0X25hbWVzPVtdKSB7DQorICBsZXQgYmFzZV91cmwgPSB1cmxfZm9yKCdk YXNoYm9hcmQuc3lzdGVtX3N0YXRpc3RpY3MnKTsNCisgIGJhc2VfdXJsICs9ICcvJyArIHNpZDsN CisgIGJhc2VfdXJsICs9IChkaWQgPiAwKSA/ICgnLycgKyBkaWQpIDogJyc7DQorICBiYXNlX3Vy bCArPSAnP2NoYXJ0X25hbWVzPScgKyBjaGFydF9uYW1lcy5qb2luKCcsJyk7DQorICANCisgIHJl dHVybiBiYXNlX3VybDsNCit9DQorDQorLyogVGhpcyB3aWxsIHByb2Nlc3MgaW5jb21pbmcgY2hh cnRzIGRhdGEgYWRkIGl0IHRoZSBwcmV2aW91cyBjaGFydHMNCisgKiBkYXRhIHRvIGdldCB0aGUg bmV3IHN0YXRlLg0KKyAqLw0KK2V4cG9ydCBmdW5jdGlvbiBzdGF0c1JlZHVjZXIoc3RhdGUsIGFj dGlvbikgew0KKw0KKyAgaWYoYWN0aW9uLnJlc2V0KSB7DQorICAgIHJldHVybiBhY3Rpb24ucmVz ZXQ7DQorICB9DQorDQorICBpZighYWN0aW9uLmluY29taW5nKSB7DQorICAgIHJldHVybiBzdGF0 ZTsNCisgIH0NCisNCisgIGlmKCFhY3Rpb24uY291bnRlckRhdGEpIHsNCisgICAgYWN0aW9uLmNv dW50ZXJEYXRhID0gYWN0aW9uLmluY29taW5nOw0KKyAgfQ0KKw0KKyAgbGV0IG5ld1N0YXRlID0g e307DQorICBPYmplY3Qua2V5cyhhY3Rpb24uaW5jb21pbmcpLmZvckVhY2gobGFiZWwgPT4gew0K KyAgICBpZihzdGF0ZVtsYWJlbF0pIHsNCisgICAgICBuZXdTdGF0ZVtsYWJlbF0gPSBbDQorICAg ICAgICBhY3Rpb24uY291bnRlciA/ICBhY3Rpb24uaW5jb21pbmdbbGFiZWxdIC0gYWN0aW9uLmNv dW50ZXJEYXRhW2xhYmVsXSA6IGFjdGlvbi5pbmNvbWluZ1tsYWJlbF0sDQorICAgICAgICAuLi5z dGF0ZVtsYWJlbF0uc2xpY2UoMCwgWF9BWElTX0xFTkdUSC0xKSwNCisgICAgICBdOw0KKyAgICB9 IGVsc2Ugew0KKyAgICAgIG5ld1N0YXRlW2xhYmVsXSA9IFsNCisgICAgICAgIGFjdGlvbi5jb3Vu dGVyID8gIGFjdGlvbi5pbmNvbWluZ1tsYWJlbF0gLSBhY3Rpb24uY291bnRlckRhdGFbbGFiZWxd IDogYWN0aW9uLmluY29taW5nW2xhYmVsXSwNCisgICAgICBdOw0KKyAgICB9DQorICB9KTsNCisg IHJldHVybiBuZXdTdGF0ZTsNCit9DQorDQorY29uc3QgY2hhcnRzRGVmYXVsdCA9IHsNCisgICdo cGNfc3RhdHMnOiB7J0hhbmRsZSc6IG5ldyBBcnJheShYX0FYSVNfTEVOR1RIKS5maWxsKG51bGwp LCAnUHJvY2Vzcyc6IG5ldyBBcnJheShYX0FYSVNfTEVOR1RIKS5maWxsKG51bGwpfSwNCit9Ow0K Kw0KK2NvbnN0IFN1bW1hcnlUYWJsZSA9IChwcm9wcykgPT4gew0KKyAgY29uc3QgY2xhc3NlcyA9 IHVzZVN0eWxlcygpOw0KKyAgY29uc3QgZGF0YSA9IHByb3BzLmRhdGE7DQorICByZXR1cm4gKA0K KyAgICA8dGFibGUgY2xhc3NOYW1lPXtjbGFzc2VzLnRhYmxlfT4NCisgICAgICA8dGhlYWQ+DQor ICAgICAgICA8dHI+DQorICAgICAgICAgIDx0aCBjbGFzc05hbWU9e2NsYXNzZXMudGFibGVWYWx9 PlByb3BlcnR5PC90aD4NCisgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y2xhc3Nlcy50YWJsZVZh bH0+VmFsdWU8L3RoPg0KKyAgICAgICAgPC90cj4NCisgICAgICA8L3RoZWFkPg0KKyAgICAgIDx0 Ym9keT4NCisgICAgICAgIHtkYXRhLm1hcCgoaXRlbSwgaW5kZXgpID0+ICgNCisgICAgICAgICAg PHRyIGNsYXNzTmFtZT17Y2xhc3Nlcy50YWJsZVZhbH0ga2V5PXtpbmRleH0+DQorICAgICAgICAg ICAgPHRkIGNsYXNzTmFtZT17Y2xhc3Nlcy50YWJsZVZhbH0+e2l0ZW0ubmFtZX08L3RkPg0KKyAg ICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2NsYXNzZXMudGFibGVWYWx9PntpdGVtLnZhbHVlfTwv dGQ+DQorICAgICAgICAgIDwvdHI+DQorICAgICAgICApKX0NCisgICAgICA8L3Rib2R5Pg0KKyAg ICA8L3RhYmxlPg0KKyAgKTsNCit9Ow0KKw0KK1N1bW1hcnlUYWJsZS5wcm9wVHlwZXMgPSB7DQor ICBkYXRhOiBQcm9wVHlwZXMuYW55LA0KK307DQorDQorZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24g U3VtbWFyeSh7cHJlZmVyZW5jZXMsIHNpZCwgZGlkLCBwYWdlVmlzaWJsZSwgZW5hYmxlUG9sbD10 cnVlfSkgew0KKyAgY29uc3QgcmVmcmVzaE9uID0gdXNlUmVmKG51bGwpOw0KKyAgY29uc3QgcHJl dlByZWZlcm5jZXMgPSB1c2VQcmV2aW91cyhwcmVmZXJlbmNlcyk7DQorICANCisgIGNvbnN0IFtw cm9jZXNzSGFuZGxlQ291bnQsIHByb2Nlc3NIYW5kbGVDb3VudFJlZHVjZV0gPSB1c2VSZWR1Y2Vy KHN0YXRzUmVkdWNlciwgY2hhcnRzRGVmYXVsdFsnaHBjX3N0YXRzJ10pOw0KKyAgY29uc3QgW29z U3RhdHMsIHNldE9zU3RhdHNdID0gdXNlU3RhdGUoW10pOw0KKyAgY29uc3QgW2NwdVN0YXRzLCBz ZXRDcHVTdGF0c10gPSB1c2VTdGF0ZShbXSk7DQorICBjb25zdCBbcHJvY2Vzc0luZm9TdGF0c10g PSB1c2VTdGF0ZSh7J1J1bm5pbmcnOiA0LCAnU2xlZXBpbmcnOiAyLCAnU3RvcHBlZCc6IDEsICda b21iaWUnOiAyfSk7DQorDQorICBjb25zdCBbY291bnRlckRhdGEsIHNldENvdW50ZXJEYXRhXSA9 IHVzZVN0YXRlKHt9KTsNCisNCisgIGNvbnN0IFtwb2xsRGVsYXksIHNldFBvbGxEZWxheV0gPSB1 c2VTdGF0ZSg1MDAwKTsNCisgIGNvbnN0IFtsb25nUG9sbERlbGF5XSA9IHVzZVN0YXRlKDE4MDAw MCk7DQorICBjb25zdCBbZXJyb3JNc2csIHNldEVycm9yTXNnXSA9IHVzZVN0YXRlKG51bGwpOw0K KyAgY29uc3QgW2NoYXJ0RHJhd25PbmNlLCBzZXRDaGFydERyYXduT25jZV0gPSB1c2VTdGF0ZShm YWxzZSk7DQorDQorICBjb25zdCB0YWJsZUhlYWRlciA9IFsNCisgICAgew0KKyAgICAgIEhlYWRl cjogJ1Byb3BlcnR5JywNCisgICAgICBhY2Nlc3NvcjogJ25hbWUnLA0KKyAgICAgIHNvcnRhYmxl OiB0cnVlLA0KKyAgICAgIHJlc2l6YWJsZTogdHJ1ZSwNCisgICAgICBkaXNhYmxlR2xvYmFsRmls dGVyOiBmYWxzZSwNCisgICAgfSwNCisgICAgew0KKyAgICAgIEhlYWRlcjogJ1ZhbHVlJywNCisg ICAgICBhY2Nlc3NvcjogJ3ZhbHVlJywNCisgICAgICBzb3J0YWJsZTogdHJ1ZSwNCisgICAgICBy ZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsDQorICAg IH0sDQorICBdOw0KKw0KKyAgdXNlRWZmZWN0KCgpPT57DQorICAgIGxldCBjYWxjUG9sbERlbGF5 ID0gZmFsc2U7DQorICAgIGlmKHByZXZQcmVmZXJuY2VzKSB7DQorICAgICAgaWYocHJldlByZWZl cm5jZXNbJ2hwY19zdGF0c19yZWZyZXNoJ10gIT0gcHJlZmVyZW5jZXNbJ2hwY19zdGF0c19yZWZy ZXNoJ10pIHsNCisgICAgICAgIHByb2Nlc3NIYW5kbGVDb3VudFJlZHVjZSh7cmVzZXQ6IGNoYXJ0 c0RlZmF1bHRbJ2hwY19zdGF0cyddfSk7DQorICAgICAgICBjYWxjUG9sbERlbGF5ID0gdHJ1ZTsN CisgICAgICB9DQorICAgIH0gZWxzZSB7DQorICAgICAgY2FsY1BvbGxEZWxheSA9IHRydWU7DQor ICAgIH0NCisgICAgaWYoY2FsY1BvbGxEZWxheSkgew0KKyAgICAgIGNvbnN0IGtleXMgPSBPYmpl Y3Qua2V5cyhjaGFydHNEZWZhdWx0KTsNCisgICAgICBjb25zdCBsZW5ndGggPSBrZXlzLmxlbmd0 aDsNCisgICAgICBpZihsZW5ndGggPT0gMSl7DQorICAgICAgICBzZXRQb2xsRGVsYXkoDQorICAg ICAgICAgIHByZWZlcmVuY2VzW2tleXNbMF0rJ19yZWZyZXNoJ10qMTAwMA0KKyAgICAgICAgKTsN CisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgc2V0UG9sbERlbGF5KA0KKyAgICAgICAgICBnZXRH Q0QoT2JqZWN0LmtleXMoY2hhcnRzRGVmYXVsdCkubWFwKChuYW1lKT0+cHJlZmVyZW5jZXNbbmFt ZSsnX3JlZnJlc2gnXSkpKjEwMDANCisgICAgICAgICk7DQorICAgICAgfQ0KKyAgICB9DQorICB9 LCBbcHJlZmVyZW5jZXNdKTsNCisNCisgIHVzZUVmZmVjdCgoKT0+ew0KKyAgICAvKiBDaGFydHMg cmVuZGVyZWQgYXJlIG5vdCB2aXNpYmxlIHdoZW4sIHRoZSBkYXNoYm9hcmQgaXMgaGlkZGVuIGJ1 dCBsYXRlciB2aXNpYmxlICovDQorICAgIGlmKHBhZ2VWaXNpYmxlICYmICFjaGFydERyYXduT25j ZSkgew0KKyAgICAgIHNldENoYXJ0RHJhd25PbmNlKHRydWUpOw0KKyAgICB9DQorICB9LCBbcGFn ZVZpc2libGVdKTsNCisNCisgIHVzZUVmZmVjdCgoKSA9PiB7DQorICAgIHRyeSB7DQorICAgICAg Ly8gRmV0Y2ggdGhlIGxhdGVzdCBkYXRhIHBvaW50IGZyb20gdGhlIEFQSSBlbmRwb2ludA0KKyAg ICAgIGxldCB1cmw7DQorICAgICAgdXJsID0gdXJsX2ZvcignZGFzaGJvYXJkLnN5c3RlbV9zdGF0 aXN0aWNzJyk7DQorICAgICAgdXJsICs9ICcvJyArIHNpZDsNCisgICAgICB1cmwgKz0gZGlkID4g MCA/ICcvJyArIGRpZCA6ICcnOw0KKyAgICAgIHVybCArPSAnP2NoYXJ0X25hbWVzPScgKyAncGdf c3lzX29zX2luZm8scGdfc3lzX2NwdV9pbmZvJzsNCisgICAgICBjb25zdCBhcGkgPSBnZXRBcGlJ bnN0YW5jZSgpOw0KKyAgICAgIGFwaSh7DQorICAgICAgICB1cmw6IHVybCwNCisgICAgICAgIHR5 cGU6ICdHRVQnLA0KKyAgICAgIH0pDQorICAgICAgICAudGhlbigocmVzKSA9PiB7DQorICAgICAg ICAgIGxldCBkYXRhID0gcmVzLmRhdGE7DQorDQorICAgICAgICAgIGNvbnN0IG9zX2luZm9fb2Jq ID0gZGF0YVsncGdfc3lzX29zX2luZm8nXTsNCisgICAgICAgICAgbGV0IG9zX2luZm9fbGlzdCA9 IFsNCisgICAgICAgICAgICB7IGljb246ICcnLCBuYW1lOiAnTmFtZScsIHZhbHVlOiBvc19pbmZv X29ialsnbmFtZSddIH0sDQorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ1ZlcnNpb24n LCB2YWx1ZTogb3NfaW5mb19vYmpbJ3ZlcnNpb24nXSB9LA0KKyAgICAgICAgICAgIHsgaWNvbjog JycsIG5hbWU6ICdIb3N0IG5hbWUnLCB2YWx1ZTogb3NfaW5mb19vYmpbJ2hvc3RfbmFtZSddIH0s DQorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ0RvbWFpbiBuYW1lJywgdmFsdWU6IG9z X2luZm9fb2JqWydkb21haW5fbmFtZSddIH0sDQorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFt ZTogJ0FyY2hpdGVjdHVyZScsIHZhbHVlOiBvc19pbmZvX29ialsnYXJjaGl0ZWN0dXJlJ10gfSwN CisgICAgICAgICAgICB7IGljb246ICcnLCBuYW1lOiAnT3MgdXAgc2luY2Ugc2Vjb25kcycsIHZh bHVlOiBvc19pbmZvX29ialsnb3NfdXBfc2luY2Vfc2Vjb25kcyddIH0sDQorICAgICAgICAgIF07 DQorICAgICAgICAgIHNldE9zU3RhdHMob3NfaW5mb19saXN0KTsNCisNCisgICAgICAgICAgY29u c3QgY3B1X2luZm9fb2JqID0gZGF0YVsncGdfc3lzX2NwdV9pbmZvJ107DQorICAgICAgICAgIGxl dCBjcHVfaW5mb19saXN0ID0gWw0KKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdWZW5k b3InLCB2YWx1ZTogY3B1X2luZm9fb2JqWyd2ZW5kb3InXSB9LA0KKyAgICAgICAgICAgIHsgaWNv bjogJycsIG5hbWU6ICdEZXNjcmlwdGlvbicsIHZhbHVlOiBjcHVfaW5mb19vYmpbJ2Rlc2NyaXB0 aW9uJ10gfSwNCisgICAgICAgICAgICB7IGljb246ICcnLCBuYW1lOiAnTW9kZWwgbmFtZScsIHZh bHVlOiBjcHVfaW5mb19vYmpbJ21vZGVsX25hbWUnXSB9LA0KKyAgICAgICAgICAgIHsgaWNvbjog JycsIG5hbWU6ICdObyBvZiBjb3JlcycsIHZhbHVlOiBjcHVfaW5mb19vYmpbJ25vX29mX2NvcmVz J10gfSwNCisgICAgICAgICAgICB7IGljb246ICcnLCBuYW1lOiAnQXJjaGl0ZWN0dXJlJywgdmFs dWU6IGNwdV9pbmZvX29ialsnYXJjaGl0ZWN0dXJlJ10gfSwNCisgICAgICAgICAgICB7IGljb246 ICcnLCBuYW1lOiAnQ2xvY2sgc3BlZWQgSHonLCB2YWx1ZTogY3B1X2luZm9fb2JqWydjbG9ja19z cGVlZF9oeiddIH0sDQorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ0wxIGRjYWNoZSBz aXplJywgdmFsdWU6IGNwdV9pbmZvX29ialsnbDFkY2FjaGVfc2l6ZSddIH0sDQorICAgICAgICAg ICAgeyBpY29uOiAnJywgbmFtZTogJ0wxIGljYWNoZSBzaXplJywgdmFsdWU6IGNwdV9pbmZvX29i alsnbDFpY2FjaGVfc2l6ZSddIH0sDQorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ0wy IGNhY2hlIHNpemUnLCB2YWx1ZTogY3B1X2luZm9fb2JqWydsMmNhY2hlX3NpemUnXSB9LA0KKyAg ICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdMMyBjYWNoZSBzaXplJywgdmFsdWU6IGNwdV9p bmZvX29ialsnbDNjYWNoZV9zaXplJ10gfSwNCisgICAgICAgICAgXTsNCisgICAgICAgICAgc2V0 Q3B1U3RhdHMoY3B1X2luZm9fbGlzdCk7DQorDQorICAgICAgICAgIHNldEVycm9yTXNnKG51bGwp Ow0KKyAgICAgICAgfSkNCisgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHsNCisgICAgICAgICAg Y29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YTonLCBlcnJvcik7DQorICAgICAgICB9 KTsNCisgICAgfSBjYXRjaCAoZXJyb3IpIHsNCisgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBm ZXRjaGluZyBkYXRhOicsIGVycm9yKTsNCisgICAgfQ0KKyAgfSwgW3NpZCwgZGlkLCBlbmFibGVQ b2xsLCBwYWdlVmlzaWJsZV0pOw0KKw0KKyAgdXNlSW50ZXJ2YWwoKCk9PnsNCisgICAgY29uc3Qg Y3VyckVwb2NoID0gZ2V0RXBvY2goKTsNCisgICAgaWYocmVmcmVzaE9uLmN1cnJlbnQgPT09IG51 bGwpIHsNCisgICAgICBsZXQgdG1wUmVmID0ge307DQorICAgICAgT2JqZWN0LmtleXMoY2hhcnRz RGVmYXVsdCkuZm9yRWFjaCgobmFtZSk9PnsNCisgICAgICAgIHRtcFJlZltuYW1lXSA9IGN1cnJF cG9jaDsNCisgICAgICB9KTsNCisgICAgICByZWZyZXNoT24uY3VycmVudCA9IHRtcFJlZjsNCisg ICAgfQ0KKw0KKyAgICBsZXQgZ2V0Rm9yID0gW107DQorICAgIE9iamVjdC5rZXlzKGNoYXJ0c0Rl ZmF1bHQpLmZvckVhY2goKG5hbWUpPT57DQorICAgICAgaWYoY3VyckVwb2NoID49IHJlZnJlc2hP bi5jdXJyZW50W25hbWVdKSB7DQorICAgICAgICBnZXRGb3IucHVzaChuYW1lKTsNCisgICAgICAg IHJlZnJlc2hPbi5jdXJyZW50W25hbWVdID0gY3VyckVwb2NoICsgcHJlZmVyZW5jZXNbbmFtZSsn X3JlZnJlc2gnXTsNCisgICAgICB9DQorICAgIH0pOw0KKw0KKyAgICBsZXQgcGF0aCA9IGdldFN0 YXRzVXJsKHNpZCwgZGlkLCBnZXRGb3IpOw0KKyAgICBpZiAoIXBhZ2VWaXNpYmxlKXsNCisgICAg ICByZXR1cm47DQorICAgIH0NCisgICAgYXhpb3MuZ2V0KHBhdGgpDQorICAgICAgLnRoZW4oKHJl c3ApPT57DQorICAgICAgICBsZXQgZGF0YSA9IHJlc3AuZGF0YTsNCisgICAgICAgIHNldEVycm9y TXNnKG51bGwpOw0KKyAgICAgICAgcHJvY2Vzc0hhbmRsZUNvdW50UmVkdWNlKHtpbmNvbWluZzog ZGF0YVsnaHBjX3N0YXRzJ119KTsNCisNCisgICAgICAgIHNldENvdW50ZXJEYXRhKChwcmV2Q291 bnRlckRhdGEpPT57DQorICAgICAgICAgIHJldHVybiB7DQorICAgICAgICAgICAgLi4ucHJldkNv dW50ZXJEYXRhLA0KKyAgICAgICAgICAgIC4uLmRhdGEsDQorICAgICAgICAgIH07DQorICAgICAg ICB9KTsNCisgICAgICB9KQ0KKyAgICAgIC5jYXRjaCgoZXJyb3IpPT57DQorICAgICAgICBpZigh ZXJyb3JNc2cpIHsNCisgICAgICAgICAgcHJvY2Vzc0hhbmRsZUNvdW50UmVkdWNlKHtyZXNldDpj aGFydHNEZWZhdWx0WydocGNfc3RhdHMnXX0pOw0KKyAgICAgICAgICBzZXRDb3VudGVyRGF0YSh7 fSk7DQorICAgICAgICAgIGlmKGVycm9yLnJlc3BvbnNlKSB7DQorICAgICAgICAgICAgaWYgKGVy cm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDI4KSB7DQorICAgICAgICAgICAgICBzZXRFcnJvck1z ZyhnZXR0ZXh0KCdQbGVhc2UgY29ubmVjdCB0byB0aGUgc2VsZWN0ZWQgc2VydmVyIHRvIHZpZXcg dGhlIGdyYXBoLicpKTsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgc2V0 RXJyb3JNc2coZ2V0dGV4dCgnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbHN0IHJlbmRlcmluZyB0aGUg Z3JhcGguJykpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgfSBlbHNlIGlmKGVycm9yLnJl cXVlc3QpIHsNCisgICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdOb3QgY29ubmVjdGVk IHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBoYXMgYmVlbiBj bG9zZWQuJykpOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgfSBlbHNlIHsNCisg ICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsNCisgICAgICAgICAgfQ0KKyAgICAgICAg fQ0KKyAgICAgIH0pOw0KKyAgfSwgZW5hYmxlUG9sbCA/IHBvbGxEZWxheSA6IC0xKTsNCisNCisg IHVzZUludGVydmFsKCgpPT57DQorICAgIC8vIGxldCB1cmw7DQorICAgIC8vIHVybCA9IHVybF9m b3IoJ2Rhc2hib2FyZC5zeXN0ZW1fc3RhdGlzdGljcycpOw0KKyAgICAvLyB1cmwgKz0gJy8nICsg c2lkOw0KKyAgICAvLyB1cmwgKz0gZGlkID4gMCA/ICcvJyArIGRpZCA6ICcnOw0KKyAgICAvLyB1 cmwgKz0gJz9jaGFydF9uYW1lcz0nICsgJ3BpX3N0YXRzJzsNCisgICAgLy8gYXhpb3MuZ2V0KHVy bCkNCisgICAgLy8gICAudGhlbigocmVzcCk9PnsNCisgICAgLy8gICAgIGxldCBkYXRhID0gcmVz cC5kYXRhOw0KKyAgICAvLyAgICAgY29uc29sZS5sb2coInBpIGRhdGE6ICIsIGRhdGEpOw0KKyAg ICAvLyAgIH0pDQorICAgIC8vICAgLmNhdGNoKChlcnJvcik9PnsNCisgICAgLy8gICAgIGlmKCFl cnJvck1zZykgew0KKyAgICAvLyAgICAgICBpZihlcnJvci5yZXNwb25zZSkgew0KKyAgICAvLyAg ICAgICAgIGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQyOCkgew0KKyAgICAvLyAgICAg ICAgICAgc2V0RXJyb3JNc2coZ2V0dGV4dCgnUGxlYXNlIGNvbm5lY3QgdG8gdGhlIHNlbGVjdGVk IHNlcnZlciB0byB2aWV3IHRoZSBncmFwaC4nKSk7DQorICAgIC8vICAgICAgICAgfSBlbHNlIHsN CisgICAgLy8gICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ0FuIGVycm9yIG9jY3VycmVk IHdoaWxzdCByZW5kZXJpbmcgdGhlIGdyYXBoLicpKTsNCisgICAgLy8gICAgICAgICB9DQorICAg IC8vICAgICAgIH0gZWxzZSBpZihlcnJvci5yZXF1ZXN0KSB7DQorICAgIC8vICAgICAgICAgc2V0 RXJyb3JNc2coZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byB0aGUgc2VydmVyIG9yIHRoZSBjb25u ZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpKTsNCisgICAgLy8gICAgICAg ICByZXR1cm47DQorICAgIC8vICAgICAgIH0gZWxzZSB7DQorICAgIC8vICAgICAgICAgY29uc29s ZS5lcnJvcihlcnJvcik7DQorICAgIC8vICAgICAgIH0NCisgICAgLy8gICAgIH0NCisgICAgLy8g ICB9KTsNCisgIH0sIGVuYWJsZVBvbGwgPyBsb25nUG9sbERlbGF5IDogLTEpOw0KKw0KKyAgcmV0 dXJuICgNCisgICAgPD4NCisgICAgICA8ZGl2IGRhdGEtdGVzdGlkPSdncmFwaC1wb2xsLWRlbGF5 JyBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319Pntwb2xsRGVsYXl9PC9kaXY+DQorICAgICAge2No YXJ0RHJhd25PbmNlICYmDQorICAgICAgICA8U3VtbWFyeVdyYXBwZXINCisgICAgICAgICAgcHJv Y2Vzc0hhbmRsZUNvdW50PXt0cmFuc2Zvcm1EYXRhKHByb2Nlc3NIYW5kbGVDb3VudCwgcHJlZmVy ZW5jZXNbJ2hwY19zdGF0c19yZWZyZXNoJ10pfQ0KKyAgICAgICAgICBvc1N0YXRzPXtvc1N0YXRz fQ0KKyAgICAgICAgICBjcHVTdGF0cz17Y3B1U3RhdHN9DQorICAgICAgICAgIHByb2Nlc3NJbmZv U3RhdHM9e3RyYW5zZm9ybURhdGEocHJvY2Vzc0luZm9TdGF0cywgNSl9DQorICAgICAgICAgIHRh YmxlSGVhZGVyPXt0YWJsZUhlYWRlcn0NCisgICAgICAgICAgZXJyb3JNc2c9e2Vycm9yTXNnfQ0K KyAgICAgICAgICBzaG93VG9vbHRpcD17cHJlZmVyZW5jZXNbJ2dyYXBoX21vdXNlX3RyYWNrJ119 DQorICAgICAgICAgIHNob3dEYXRhUG9pbnRzPXtwcmVmZXJlbmNlc1snZ3JhcGhfZGF0YV9wb2lu dHMnXX0NCisgICAgICAgICAgbGluZUJvcmRlcldpZHRoPXtwcmVmZXJlbmNlc1snZ3JhcGhfbGlu ZV9ib3JkZXJfd2lkdGgnXX0NCisgICAgICAgICAgaXNEYXRhYmFzZT17ZGlkID4gMH0NCisgICAg ICAgICAgaXNUZXN0PXtmYWxzZX0NCisgICAgICAgIC8+DQorICAgICAgfQ0KKyAgICA8Lz4NCisg ICk7DQorfQ0KKw0KK1N1bW1hcnkucHJvcFR5cGVzID0gew0KKyAgcHJlZmVyZW5jZXM6IFByb3BU eXBlcy5vYmplY3QuaXNSZXF1aXJlZCwNCisgIHNpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJv cFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSwN CisgIGRpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVk LCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSwNCisgIHBhZ2VWaXNpYmxlOiBQcm9wVHlw ZXMuYm9vbCwNCisgIGVuYWJsZVBvbGw6IFByb3BUeXBlcy5ib29sLA0KK307DQorDQorZXhwb3J0 IGZ1bmN0aW9uIFN1bW1hcnlXcmFwcGVyKHByb3BzKSB7DQorICBjb25zdCBjbGFzc2VzID0gdXNl U3R5bGVzKCk7DQorICBjb25zdCBvcHRpb25zID0gdXNlTWVtbygoKT0+KHsNCisgICAgc2hvd0Rh dGFQb2ludHM6IHByb3BzLnNob3dEYXRhUG9pbnRzLA0KKyAgICBzaG93VG9vbHRpcDogcHJvcHMu c2hvd1Rvb2x0aXAsDQorICAgIGxpbmVCb3JkZXJXaWR0aDogcHJvcHMubGluZUJvcmRlcldpZHRo LA0KKyAgfSksIFtwcm9wcy5zaG93VG9vbHRpcCwgcHJvcHMuc2hvd0RhdGFQb2ludHMsIHByb3Bz LmxpbmVCb3JkZXJXaWR0aF0pOw0KKyAgcmV0dXJuICgNCisgICAgPD4NCisgICAgICA8R3JpZCBj b250YWluZXIgc3BhY2luZz17MX0gY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lcn0+DQorICAg ICAgICA8R3JpZCBpdGVtIG1kPXs2fSBzbT17MTJ9Pg0KKyAgICAgICAgICA8ZGl2IGNsYXNzTmFt ZT17Y2xhc3Nlcy5jb250YWluZXJIZWFkZXJ9PntnZXR0ZXh0KCdPUyBJbmZvcm1hdGlvbicpfTwv ZGl2Pg0KKyAgICAgICAgICA8U3VtbWFyeVRhYmxlIGRhdGE9e3Byb3BzLm9zU3RhdHN9IC8+DQor ICAgICAgICA8L0dyaWQ+DQorICAgICAgICA8R3JpZCBpdGVtIG1kPXs2fSBzbT17MTJ9Pg0KKyAg ICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5jb250YWluZXJIZWFkZXJ9PntnZXR0ZXh0 KCdIYW5kbGUgJiBQcm9jZXNzIENvdW50Jyl9PC9kaXY+DQorICAgICAgICAgIDxDaGFydENvbnRh aW5lciBpZD0naHBjLWdyYXBoJyB0aXRsZT17Z2V0dGV4dCgnJyl9IGRhdGFzZXRzPXtwcm9wcy5w cm9jZXNzSGFuZGxlQ291bnQuZGF0YXNldHN9ICBlcnJvck1zZz17cHJvcHMuZXJyb3JNc2d9IGlz VGVzdD17cHJvcHMuaXNUZXN0fT4NCisgICAgICAgICAgICA8U3RyZWFtaW5nQ2hhcnQgZGF0YT17 cHJvcHMucHJvY2Vzc0hhbmRsZUNvdW50fSBkYXRhUG9pbnRTaXplPXtEQVRBX1BPSU5UX1NJWkV9 IHhSYW5nZT17WF9BWElTX0xFTkdUSH0gb3B0aW9ucz17b3B0aW9uc30gc2hvd1NlY29uZEF4aXM9 e3RydWV9IC8+DQorICAgICAgICAgIDwvQ2hhcnRDb250YWluZXI+DQorICAgICAgICA8L0dyaWQ+ DQorICAgICAgPC9HcmlkPg0KKyAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFz c05hbWU9e2NsYXNzZXMuY29udGFpbmVyfT4NCisgICAgICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9IHNt PXsxMn0+DQorICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lckhlYWRl cn0+e2dldHRleHQoJ0NQVSBJbmZvcm1hdGlvbicpfTwvZGl2Pg0KKyAgICAgICAgICA8U3VtbWFy eVRhYmxlIGRhdGE9e3Byb3BzLmNwdVN0YXRzfSAvPg0KKyAgICAgICAgPC9HcmlkPg0KKyAgICAg ICAgPEdyaWQgaXRlbSBtZD17Nn0gc209ezEyfT4NCisgICAgICAgICAgPGRpdiBjbGFzc05hbWU9 e2NsYXNzZXMuY29udGFpbmVySGVhZGVyfT57Z2V0dGV4dCgnUHJvY2VzcyBJbmZvcm1hdGlvbicp fTwvZGl2Pg0KKyAgICAgICAgICA8Q2hhcnRDb250YWluZXIgaWQ9J3BpLWdyYXBoJyB0aXRsZT17 Z2V0dGV4dCgnJyl9IGRhdGFzZXRzPXtwcm9wcy5wcm9jZXNzSW5mb1N0YXRzLmRhdGFzZXRzfSAg ZXJyb3JNc2c9e3Byb3BzLmVycm9yTXNnfSBpc1Rlc3Q9e3Byb3BzLmlzVGVzdH0+DQorICAgICAg ICAgICAgPERvbnV0Q2hhcnQgZGF0YT17cHJvcHMucHJvY2Vzc0luZm9TdGF0cy5kYXRhc2V0c30g Lz4NCisgICAgICAgICAgPC9DaGFydENvbnRhaW5lcj4NCisgICAgICAgIDwvR3JpZD4NCisgICAg ICA8L0dyaWQ+DQorICAgIDwvPg0KKyAgKTsNCit9DQorDQorU3VtbWFyeVdyYXBwZXIucHJvcFR5 cGVzID0gew0KKyAgcHJvY2Vzc0hhbmRsZUNvdW50OiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQs DQorICBvc1N0YXRzOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsDQorICBjcHVTdGF0czogUHJv cFR5cGVzLmFueS5pc1JlcXVpcmVkLA0KKyAgcHJvY2Vzc0luZm9TdGF0czogUHJvcFR5cGVzLmFu eS5pc1JlcXVpcmVkLA0KKyAgdGFibGVIZWFkZXI6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwN CisgIGVycm9yTXNnOiBQcm9wVHlwZXMuYW55LA0KKyAgc2hvd1Rvb2x0aXA6IFByb3BUeXBlcy5i b29sLA0KKyAgc2hvd0RhdGFQb2ludHM6IFByb3BUeXBlcy5ib29sLA0KKyAgbGluZUJvcmRlcldp ZHRoOiBQcm9wVHlwZXMubnVtYmVyLA0KKyAgaXNEYXRhYmFzZTogUHJvcFR5cGVzLmJvb2wsDQor ICBpc1Rlc3Q6IFByb3BUeXBlcy5ib29sLA0KK307DQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v ZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2RlZmF1bHQvc3lzdGVtX3N0YXRpc3Rp Y3Muc3FsIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2Rl ZmF1bHQvc3lzdGVtX3N0YXRpc3RpY3Muc3FsDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwLi4xMzFiNmEzZGYNCi0tLSAvZGV2L251bGwNCisrKyBiL3dlYi9wZ2FkbWluL2Rh c2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3N5c3RlbV9zdGF0aXN0aWNz LnNxbA0KQEAgLTAsMCArMSwxMDAgQEANCit7JSBzZXQgYWRkX3VuaW9uID0gZmFsc2UgJX0NCit7 JSBpZiAncGdfc3lzX29zX2luZm8nIGluIGNoYXJ0X25hbWVzICV9DQoreyUgc2V0IGFkZF91bmlv biA9IHRydWUgJX0NCisgICAgU0VMRUNUICdwZ19zeXNfb3NfaW5mbycgQVMgY2hhcnRfbmFtZSwg cGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSBBUyBjaGFydF9kYXRhDQorICAgIEZST00gKFNFTEVD VCAqIEZST00gcGdfc3lzX29zX2luZm8oKSkgdA0KK3slIGVuZGlmICV9DQoreyUgaWYgYWRkX3Vu aW9uIGFuZCAncGdfc3lzX2NwdV9pbmZvJyBpbiBjaGFydF9uYW1lcyAlfQ0KKyAgICBVTklPTiBB TEwNCit7JSBlbmRpZiAlfQ0KK3slIGlmICdwZ19zeXNfY3B1X2luZm8nIGluIGNoYXJ0X25hbWVz ICV9DQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0NCisgICAgU0VMRUNUICdwZ19zeXNfY3B1 X2luZm8nIEFTIGNoYXJ0X25hbWUsIHBnX2NhdGFsb2cucm93X3RvX2pzb24odCkgQVMgY2hhcnRf ZGF0YQ0KKyAgICBGUk9NIChTRUxFQ1QgKiBGUk9NIHBnX3N5c19jcHVfaW5mbygpKSB0DQoreyUg ZW5kaWYgJX0NCit7JSBpZiBhZGRfdW5pb24gYW5kICdocGNfc3RhdHMnIGluIGNoYXJ0X25hbWVz ICV9DQorICAgIFVOSU9OIEFMTA0KK3slIGVuZGlmICV9DQoreyUgaWYgJ2hwY19zdGF0cycgaW4g Y2hhcnRfbmFtZXMgJX0NCit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQ0KKyAgICBTRUxFQ1Qg J2hwY19zdGF0cycgQVMgY2hhcnRfbmFtZSwgcGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSBBUyBj aGFydF9kYXRhDQorICAgIEZST00gKFNFTEVDVCANCisgICAgICAgIChTRUxFQ1QgaGFuZGxlX2Nv dW50IEZST00gcGdfc3lzX29zX2luZm8oKSkgIEFTICJ7eyBfKCdIYW5kbGUnKSB9fSIsDQorICAg ICAgICAoU0VMRUNUIHByb2Nlc3NfY291bnQgRlJPTSBwZ19zeXNfb3NfaW5mbygpKSAgQVMgInt7 IF8oJ1Byb2Nlc3MnKSB9fSINCisgICAgKSB0DQoreyUgZW5kaWYgJX0NCit7JSBpZiBhZGRfdW5p b24gYW5kICdjdV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0NCisgICAgVU5JT04gQUxMDQoreyUg ZW5kaWYgJX0NCit7JSBpZiAnY3Vfc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9DQoreyUgc2V0IGFk ZF91bmlvbiA9IHRydWUgJX0NCisgICAgU0VMRUNUICdjdV9zdGF0cycgQVMgY2hhcnRfbmFtZSwg cGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSBBUyBjaGFydF9kYXRhDQorICAgIEZST00gKFNFTEVD VCAqIEZST00gcGdfc3lzX2NwdV91c2FnZV9pbmZvKCkpIHQNCit7JSBlbmRpZiAlfQ0KK3slIGlm IGFkZF91bmlvbiBhbmQgJ2xhX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQ0KKyAgICBVTklPTiBB TEwNCit7JSBlbmRpZiAlfQ0KK3slIGlmICdsYV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0NCit7 JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQ0KKyAgICBTRUxFQ1QgJ2xhX3N0YXRzJyBBUyBjaGFy dF9uYW1lLCBwZ19jYXRhbG9nLnJvd190b19qc29uKHQpIEFTIGNoYXJ0X2RhdGEgRlJPTSAoU0VM RUNUICogRlJPTSBwZ19zeXNfbG9hZF9hdmdfaW5mbygpKSB0DQoreyUgZW5kaWYgJX0NCit7JSBp ZiBhZGRfdW5pb24gYW5kICdwY3Vfc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9DQorICAgIFVOSU9O IEFMTA0KK3slIGVuZGlmICV9DQoreyUgaWYgJ3BjdV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0N Cit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQ0KKyAgICBTRUxFQ1QgJ3BjdV9zdGF0cycgQVMg Y2hhcnRfbmFtZSwgKA0KKyAgICBTRUxFQ1QgdG9fanNvbihwZ19jYXRhbG9nLmpzb25iX29iamVj dF9hZ2coJ3Byb2Nlc3MnfHxyb3dfbnVtYmVyLCBwZ19jYXRhbG9nLnJvd190b19qc29uKHQpKSkN CisgICAgRlJPTSAoDQorICAgICAgICBTRUxFQ1QgcGlkLCBuYW1lLCBjcHVfdXNhZ2UsIFJPV19O VU1CRVIoKSBPVkVSIChPUkRFUiBCWSBwaWQpIEFTIHJvd19udW1iZXINCisgICAgICAgIEZST00g cGdfc3lzX2NwdV9tZW1vcnlfYnlfcHJvY2VzcygpDQorICAgICkgdA0KKyAgICApIEFTIGNoYXJ0 X2RhdGENCit7JSBlbmRpZiAlfQ0KK3slIGlmIGFkZF91bmlvbiBhbmQgJ21fc3RhdHMnIGluIGNo YXJ0X25hbWVzICV9DQorICAgIFVOSU9OIEFMTA0KK3slIGVuZGlmICV9DQoreyUgaWYgJ21fc3Rh dHMnIGluIGNoYXJ0X25hbWVzICV9DQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0NCisgICAg U0VMRUNUICdtX3N0YXRzJyBBUyBjaGFydF9uYW1lLCBwZ19jYXRhbG9nLnJvd190b19qc29uKHQp IEFTIGNoYXJ0X2RhdGEgRlJPTSAoU0VMRUNUIHRvdGFsX21lbW9yeSwgdXNlZF9tZW1vcnksIGZy ZWVfbWVtb3J5IEZST00gcGdfc3lzX21lbW9yeV9pbmZvKCkpIHQNCit7JSBlbmRpZiAlfQ0KK3sl IGlmIGFkZF91bmlvbiBhbmQgJ3NtX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQ0KKyAgICBVTklP TiBBTEwNCit7JSBlbmRpZiAlfQ0KK3slIGlmICdzbV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0N Cit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQ0KKyAgICBTRUxFQ1QgJ3NtX3N0YXRzJyBBUyBj aGFydF9uYW1lLCBwZ19jYXRhbG9nLnJvd190b19qc29uKHQpIEFTIGNoYXJ0X2RhdGEgRlJPTSAo U0VMRUNUIHN3YXBfdG90YWwsIHN3YXBfdXNlZCwgc3dhcF9mcmVlIEZST00gcGdfc3lzX21lbW9y eV9pbmZvKCkpIHQNCit7JSBlbmRpZiAlfQ0KK3slIGlmIGFkZF91bmlvbiBhbmQgJ3BtdV9zdGF0 cycgaW4gY2hhcnRfbmFtZXMgJX0NCisgICAgVU5JT04gQUxMDQoreyUgZW5kaWYgJX0NCit7JSBp ZiAncG11X3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQ0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVl ICV9DQorICAgIFNFTEVDVCAncG11X3N0YXRzJyBBUyBjaGFydF9uYW1lLCAoDQorICAgIFNFTEVD VCB0b19qc29uKHBnX2NhdGFsb2cuanNvbmJfb2JqZWN0X2FnZygncHJvY2Vzcyd8fHJvd19udW1i ZXIsIHBnX2NhdGFsb2cucm93X3RvX2pzb24odCkpKQ0KKyAgICBGUk9NICgNCisgICAgICAgIFNF TEVDVCBwaWQsIG5hbWUsIG1lbW9yeV91c2FnZSwgbWVtb3J5X2J5dGVzLCBST1dfTlVNQkVSKCkg T1ZFUiAoT1JERVIgQlkgcGlkKSBBUyByb3dfbnVtYmVyDQorICAgICAgICBGUk9NIHBnX3N5c19j cHVfbWVtb3J5X2J5X3Byb2Nlc3MoKQ0KKyAgICApIHQNCisgICAgKSBBUyBjaGFydF9kYXRhDQor eyUgZW5kaWYgJX0NCit7JSBpZiBhZGRfdW5pb24gYW5kICdpb19zdGF0cycgaW4gY2hhcnRfbmFt ZXMgJX0NCisgICAgVU5JT04gQUxMDQoreyUgZW5kaWYgJX0NCit7JSBpZiAnaW9fc3RhdHMnIGlu IGNoYXJ0X25hbWVzICV9DQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0NCisgICAgU0VMRUNU ICdpb19zdGF0cycgQVMgY2hhcnRfbmFtZSwgKA0KKyAgICBTRUxFQ1QgdG9fanNvbihwZ19jYXRh bG9nLmpzb25iX29iamVjdF9hZ2coJ2Rpc2snfHxyb3dfbnVtYmVyLCBwZ19jYXRhbG9nLnJvd190 b19qc29uKHQpKSkNCisgICAgRlJPTSAoDQorICAgICAgICBTRUxFQ1QgKiwgUk9XX05VTUJFUigp IE9WRVIgKE9SREVSIEJZIGRldmljZV9uYW1lKSBBUyByb3dfbnVtYmVyDQorICAgICAgICBGUk9N IHBnX3N5c19pb19hbmFseXNpc19pbmZvKCkNCisgICAgKSB0DQorICAgICkgQVMgY2hhcnRfZGF0 YQ0KK3slIGVuZGlmICV9DQoreyUgaWYgYWRkX3VuaW9uIGFuZCAncGlfc3RhdHMnIGluIGNoYXJ0 X25hbWVzICV9DQorICAgIFVOSU9OIEFMTA0KK3slIGVuZGlmICV9DQoreyUgaWYgJ3BpX3N0YXRz JyBpbiBjaGFydF9uYW1lcyAlfQ0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9DQorICAgIFNF TEVDVCAncGlfc3RhdHMnIEFTIGNoYXJ0X25hbWUsIHBnX2NhdGFsb2cucm93X3RvX2pzb24odCkg QVMgY2hhcnRfZGF0YSBGUk9NIChTRUxFQ1QgKiBGUk9NIHBnX3N5c19wcm9jZXNzX2luZm8oKSkg dA0KK3slIGVuZGlmICV9DQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L0RvbnV0Q2hhcnQuanN4 IGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2NvbXBvbmVudHMvUGdDaGFydC9Eb251dENoYXJ0Lmpz eA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMC4uYjI4ZThlNjZkDQotLS0g L2Rldi9udWxsDQorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0 L0RvbnV0Q2hhcnQuanN4DQpAQCAtMCwwICsxLDcwIEBADQoraW1wb3J0IFJlYWN0LCB7IHVzZUVm ZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnOw0KK2ltcG9ydCBDaGFydCBmcm9tICdjaGFydC5q cy9hdXRvJzsNCitpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnOw0KKw0KK2V4cG9y dCBkZWZhdWx0IGZ1bmN0aW9uIERvbnV0Q2hhcnQoeyBkYXRhIH0pIHsNCisgIGNvbnN0IGNoYXJ0 UmVmID0gdXNlUmVmKG51bGwpOw0KKyAgY29uc3QgY2hhcnRJbnN0YW5jZSA9IHVzZVJlZihudWxs KTsNCisNCisgIHVzZUVmZmVjdCgoKSA9PiB7DQorICAgIGlmIChkYXRhICYmIE9iamVjdC5rZXlz KGRhdGEpLmxlbmd0aCA+IDApIHsNCisgICAgICBpZiAoY2hhcnRJbnN0YW5jZS5jdXJyZW50KSB7 DQorICAgICAgICAvLyBJZiBjaGFydCBpbnN0YW5jZSBleGlzdHMsIHVwZGF0ZSB0aGUgZGF0YQ0K KyAgICAgICAgY2hhcnRJbnN0YW5jZS5jdXJyZW50LmRhdGEubGFiZWxzID0gZGF0YS5tYXAoKGl0 ZW0pID0+IGl0ZW0ubGFiZWwpOw0KKyAgICAgICAgY2hhcnRJbnN0YW5jZS5jdXJyZW50LmRhdGEu ZGF0YXNldHNbMF0uZGF0YSA9IGRhdGEubWFwKChpdGVtKSA9PiBpdGVtLmRhdGEpOw0KKyAgICAg ICAgY2hhcnRJbnN0YW5jZS5jdXJyZW50LnVwZGF0ZSgpOw0KKyAgICAgIH0gZWxzZSB7DQorICAg ICAgICAvLyBJZiBjaGFydCBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgYSBuZXcgY2hh cnQNCisgICAgICAgIGNvbnN0IGNoYXJ0T3B0aW9ucyA9IHsNCisgICAgICAgICAgcmVzcG9uc2l2 ZTogdHJ1ZSwNCisgICAgICAgICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogZmFsc2UsDQorICAgICAg ICAgIHBsdWdpbnM6IHsNCisgICAgICAgICAgICBsZWdlbmQ6IHsNCisgICAgICAgICAgICAgIGRp c3BsYXk6IGZhbHNlLCAvLyBIaWRlIHRoZSBsYWJlbHMgYXQgdGhlIHRvcA0KKyAgICAgICAgICAg IH0sDQorICAgICAgICAgIH0sDQorICAgICAgICAgIGFuaW1hdGlvbjogew0KKyAgICAgICAgICAg IGR1cmF0aW9uOiAwLCAvLyBEaXNhYmxlIHRoZSBhbmltYXRpb24NCisgICAgICAgICAgfSwNCisg ICAgICAgICAgdG9vbHRpcHM6IHsNCisgICAgICAgICAgICBjYWxsYmFja3M6IHsNCisgICAgICAg ICAgICAgIGxhYmVsOiBmdW5jdGlvbiAodG9vbHRpcEl0ZW0sIGNoYXJ0RGF0YSkgew0KKyAgICAg ICAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gY2hhcnREYXRhLmRhdGFzZXRzW3Rvb2x0aXBJdGVt LmRhdGFzZXRJbmRleF07DQorICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gZGF0YXNldC5k YXRhLnJlZHVjZSgocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSA9PiBwcmV2aW91c1ZhbHVl ICsgY3VycmVudFZhbHVlKTsNCisgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0g ZGF0YXNldC5kYXRhW3Rvb2x0aXBJdGVtLmluZGV4XTsNCisgICAgICAgICAgICAgICAgY29uc3Qg cGVyY2VudGFnZSA9ICgoY3VycmVudFZhbHVlIC8gdG90YWwpICogMTAwKS50b0ZpeGVkKDIpICsg JyUnOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNldC5sYWJlbCArICc6ICcgKyBjdXJy ZW50VmFsdWUgKyAnICgnICsgcGVyY2VudGFnZSArICcpJzsNCisgICAgICAgICAgICAgIH0sDQor ICAgICAgICAgICAgfSwNCisgICAgICAgICAgfSwNCisgICAgICAgIH07DQorDQorICAgICAgICBj b25zdCBjaGFydERhdGEgPSB7DQorICAgICAgICAgIGxhYmVsczogZGF0YS5tYXAoKGl0ZW0pID0+ IGl0ZW0ubGFiZWwpLA0KKyAgICAgICAgICBkYXRhc2V0czogWw0KKyAgICAgICAgICAgIHsNCisg ICAgICAgICAgICAgIGRhdGE6IGRhdGEubWFwKChpdGVtKSA9PiBpdGVtLmRhdGEpLA0KKyAgICAg ICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkYXRhLm1hcCgoaXRlbSkgPT4gaXRlbS5ib3JkZXJD b2xvciksDQorICAgICAgICAgICAgICBob3ZlckJhY2tncm91bmRDb2xvcjogZGF0YS5tYXAoKGl0 ZW0pID0+IGl0ZW0uYm9yZGVyQ29sb3IpLA0KKyAgICAgICAgICAgIH0sDQorICAgICAgICAgIF0s DQorICAgICAgICB9Ow0KKw0KKyAgICAgICAgY29uc3QgY3R4ID0gY2hhcnRSZWYuY3VycmVudC5n ZXRDb250ZXh0KCcyZCcpOw0KKyAgICAgICAgY2hhcnRJbnN0YW5jZS5jdXJyZW50ID0gbmV3IENo YXJ0KGN0eCwgew0KKyAgICAgICAgICB0eXBlOiAnZG91Z2hudXQnLA0KKyAgICAgICAgICBkYXRh OiBjaGFydERhdGEsDQorICAgICAgICAgIG9wdGlvbnM6IGNoYXJ0T3B0aW9ucywNCisgICAgICAg IH0pOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfSwgW2RhdGFdKTsNCisNCisgIHJldHVybiAoDQor ICAgIDxjYW52YXMgcmVmPXtjaGFydFJlZn0gLz4NCisgICk7DQorfQ0KKyAgDQorRG9udXRDaGFy dC5wcm9wVHlwZXMgPSB7DQorICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCwNCit9 Ow0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v c3RhdGljL2pzL2NvbXBvbmVudHMvUGdDaGFydC9TdHJlYW1pbmdDaGFydC5qc3ggYi93ZWIvcGdh ZG1pbi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWluZ0NoYXJ0LmpzeA0KaW5k ZXggYmQ0NjVlM2RhLi5mYjkwYTM3ZTggMTAwNjQ0DQotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMv anMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWluZ0NoYXJ0LmpzeA0KKysrIGIvd2ViL3BnYWRt aW4vc3RhdGljL2pzL2NvbXBvbmVudHMvUGdDaGFydC9TdHJlYW1pbmdDaGFydC5qc3gNCkBAIC0z Miw3ICszMiw3IEBAIGZ1bmN0aW9uIHRvb2x0aXBQbHVnaW4ocmVmcmVzaFJhdGUpIHsNCiAgICAg c2hvd1Rvb2x0aXAoKTsNCiAgICAgbGV0IHRvb2x0aXBIdG1sPWA8ZGl2PiR7KHUuZGF0YVsxXS5s ZW5ndGgtMS1wYXJzZUludCh1LmxlZ2VuZC52YWx1ZXNbMF1bJ18nXSkpICogcmVmcmVzaFJhdGUg KyBnZXR0ZXh0KCcgc2Vjb25kcyBhZ28nKX08L2Rpdj5gOw0KICAgICBmb3IobGV0IGk9MTsgaTx1 LnNlcmllcy5sZW5ndGg7IGkrKykgew0KLSAgICAgIHRvb2x0aXBIdG1sICs9IGA8ZGl2IGNsYXNz PSJ1cGxvdC10b29sdGlwLWxhYmVsIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MTJweDsgd2lkdGg6MTJw eDsgYmFja2dyb3VuZC1jb2xvcjoke3Uuc2VyaWVzW2ldLnN0cm9rZSgpfSI+PC9kaXY+ICR7dS5z ZXJpZXNbaV0ubGFiZWx9OiAke3UubGVnZW5kLnZhbHVlc1tpXVsnXyddfTwvZGl2PmA7DQorICAg ICAgdG9vbHRpcEh0bWwgKz0gYDxkaXYgY2xhc3M9J3VwbG90LXRvb2x0aXAtbGFiZWwnPjxkaXYg c3R5bGU9J2hlaWdodDoxMnB4OyB3aWR0aDoxMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiR7dS5zZXJp ZXNbaV0uc3Ryb2tlKCl9Jz48L2Rpdj4gJHt1LnNlcmllc1tpXS5sYWJlbH06ICR7dS5sZWdlbmQu dmFsdWVzW2ldWydfJ119PC9kaXY+YDsNCiAgICAgfQ0KICAgICB0b29sdGlwLmlubmVySFRNTCA9 IHRvb2x0aXBIdG1sOw0KIA0KQEAgLTU4LDQ0ICs1OCw4OSBAQCBmdW5jdGlvbiB0b29sdGlwUGx1 Z2luKHJlZnJlc2hSYXRlKSB7DQogICB9Ow0KIH0NCiANCi1leHBvcnQgZGVmYXVsdCBmdW5jdGlv biBTdHJlYW1pbmdDaGFydCh7eFJhbmdlPTc1LCBkYXRhLCBvcHRpb25zfSkgew0KK2V4cG9ydCBk ZWZhdWx0IGZ1bmN0aW9uIFN0cmVhbWluZ0NoYXJ0KHt4UmFuZ2U9NzUsIGRhdGEsIG9wdGlvbnMs IHNob3dTZWNvbmRBeGlzPWZhbHNlfSkgew0KICAgY29uc3QgY2hhcnRSZWYgPSB1c2VSZWYoKTsN CiAgIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTsNCiAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwg cmVmOmNvbnRhaW5lclJlZiB9ID0gdXNlUmVzaXplRGV0ZWN0b3IoKTsNCi0gIGNvbnN0IGRlZmF1 bHRPcHRpb25zID0gdXNlTWVtbygoKT0+KHsNCi0gICAgdGl0bGU6ICcnLA0KLSAgICB3aWR0aDog d2lkdGgsDQotICAgIGhlaWdodDogaGVpZ2h0LA0KLSAgICBwYWRkaW5nOiBbMTAsIDAsIDEwLCAw XSwNCi0gICAgZm9jdXM6IHsNCi0gICAgICBhbHBoYTogMC4zLA0KLSAgICB9LA0KLSAgICBjdXJz b3I6IHsNCi0gICAgICB5OiBmYWxzZSwNCi0gICAgICBkcmFnOiB7DQotICAgICAgICBzZXRTY2Fs ZTogZmFsc2UsDQotICAgICAgfQ0KLSAgICB9LA0KLSAgICBzZXJpZXM6IFsNCisgIGNvbnN0IGRl ZmF1bHRPcHRpb25zID0gdXNlTWVtbygoKT0+IHsNCisgICAgY29uc3Qgc2VyaWVzID0gWw0KICAg ICAgIHt9LA0KLSAgICAgIC4uLihkYXRhLmRhdGFzZXRzPy5tYXAoKGRhdHVtKT0+KHsNCisgICAg ICAuLi4oZGF0YS5kYXRhc2V0cz8ubWFwKChkYXR1bSwgaW5kZXgpID0+ICh7DQogICAgICAgICBs YWJlbDogZGF0dW0ubGFiZWwsDQogICAgICAgICBzdHJva2U6IGRhdHVtLmJvcmRlckNvbG9yLA0K ICAgICAgICAgd2lkdGg6IG9wdGlvbnMubGluZUJvcmRlcldpZHRoID8/IDEsDQotICAgICAgICBw b2ludHM6IHsgc2hvdzogb3B0aW9ucy5zaG93RGF0YVBvaW50cyA/PyBmYWxzZSwgc2l6ZTogZGF0 dW0ucG9pbnRIaXRSYWRpdXMqMiB9DQotICAgICAgfSkpPz97fSkNCi0gICAgXSwNCi0gICAgc2Nh bGVzOiB7DQotICAgICAgeDogew0KLSAgICAgICAgdGltZTogZmFsc2UsDQotICAgICAgfQ0KLSAg ICB9LA0KLSAgICBheGVzOiBbDQorICAgICAgICBzY2FsZTogc2hvd1NlY29uZEF4aXMgJiYgKGlu ZGV4ID09PSAxKSA/ICd5MScgOiAneScsDQorICAgICAgICBwb2ludHM6IHsgc2hvdzogb3B0aW9u cy5zaG93RGF0YVBvaW50cyA/PyBmYWxzZSwgc2l6ZTogZGF0dW0ucG9pbnRIaXRSYWRpdXMgKiAy IH0sDQorICAgICAgfSkpID8/IFtdKSwNCisgICAgXTsNCisNCisgICAgY29uc3QgYXhlcyA9IFsN CiAgICAgICB7DQogICAgICAgICBzaG93OiBmYWxzZSwNCiAgICAgICAgIHN0cm9rZTogdGhlbWUu cGFsZXR0ZS50ZXh0LnByaW1hcnksDQogICAgICAgfSwNCi0gICAgICB7DQorICAgIF07DQorDQor ICAgIGlmKHNob3dTZWNvbmRBeGlzKXsNCisgICAgICBheGVzLnB1c2goew0KKyAgICAgICAgc2Nh bGU6ICd5JywNCisgICAgICAgIGdyaWQ6IHsNCisgICAgICAgICAgc3Ryb2tlOiB0aGVtZS5vdGhl clZhcnMuYm9yZGVyQ29sb3IsDQorICAgICAgICAgIHdpZHRoOiAwLjUsDQorICAgICAgICB9LA0K KyAgICAgICAgc3Ryb2tlOiB0aGVtZS5wYWxldHRlLnRleHQucHJpbWFyeSwNCisgICAgICAgIHNp emU6IGZ1bmN0aW9uKF9vYmosIHZhbHVlcykgew0KKyAgICAgICAgICBsZXQgc2l6ZSA9IDQwOw0K KyAgICAgICAgICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApIHsNCisgICAgICAgICAgICBzaXplID0g dmFsdWVzW3ZhbHVlcy5sZW5ndGgtMV0ubGVuZ3RoKjEyOw0KKyAgICAgICAgICAgIGlmKHNpemUg PCA0MCkgc2l6ZSA9IDQwOw0KKyAgICAgICAgICB9DQorICAgICAgICAgIHJldHVybiBzaXplOw0K KyAgICAgICAgfSwNCisgICAgICAgIC8vIHktYXhpcyBjb25maWd1cmF0aW9uDQorICAgICAgICB2 YWx1ZXM6IChzZWxmLCB0aWNrcykgPT4gew0KKyAgICAgICAgICAvLyBGb3JtYXQgdGhlIGxhYmVs DQorICAgICAgICAgIHJldHVybiB0aWNrcy5tYXAoKHZhbHVlKSA9PiB7DQorICAgICAgICAgICAg aWYodmFsdWUgPCAxKXsNCisgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSsnJzsNCisgICAgICAg ICAgICB9DQorICAgICAgICAgICAgY29uc3Qgc3VmZml4ZXMgPSBbJycsICdrJywgJ00nLCAnQics ICdUJ107DQorICAgICAgICAgICAgY29uc3Qgc3VmZml4TnVtID0gTWF0aC5mbG9vcihNYXRoLmxv ZzEwKHZhbHVlKSAvIDMpOw0KKyAgICAgICAgICAgIGNvbnN0IHNob3J0VmFsdWUgPSAodmFsdWUg LyBNYXRoLnBvdygxMDAwLCBzdWZmaXhOdW0pKS50b0ZpeGVkKDEpOw0KKyAgICAgICAgICAgIHJl dHVybiBzaG9ydFZhbHVlICsgc3VmZml4ZXNbc3VmZml4TnVtXTsNCisgICAgICAgICAgfSk7DQor ICAgICAgICB9DQorICAgICAgfSk7DQorICAgICAgYXhlcy5wdXNoKHsNCisgICAgICAgIHNjYWxl OiAneTEnLA0KKyAgICAgICAgc2lkZTogMSwNCisgICAgICAgIHN0cm9rZTogdGhlbWUucGFsZXR0 ZS50ZXh0LnByaW1hcnksDQorICAgICAgICBncmlkOiB7c2hvdzogZmFsc2V9LA0KKyAgICAgICAg c2l6ZTogZnVuY3Rpb24oX29iaiwgdmFsdWVzKSB7DQorICAgICAgICAgIGxldCBzaXplID0gNDA7 DQorICAgICAgICAgIGlmKHZhbHVlcz8ubGVuZ3RoID4gMCkgew0KKyAgICAgICAgICAgIHNpemUg PSB2YWx1ZXNbdmFsdWVzLmxlbmd0aC0xXS5sZW5ndGgqMTI7DQorICAgICAgICAgICAgaWYoc2l6 ZSA8IDQwKSBzaXplID0gNDA7DQorICAgICAgICAgIH0NCisgICAgICAgICAgcmV0dXJuIHNpemU7 DQorICAgICAgICB9LA0KKyAgICAgICAgLy8geS1heGlzIGNvbmZpZ3VyYXRpb24NCisgICAgICAg IHZhbHVlczogKHNlbGYsIHRpY2tzKSA9PiB7DQorICAgICAgICAgIC8vIEZvcm1hdCB0aGUgbGFi ZWwNCisgICAgICAgICAgcmV0dXJuIHRpY2tzLm1hcCgodmFsdWUpID0+IHsNCisgICAgICAgICAg ICBpZih2YWx1ZSA8IDEpew0KKyAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKycnOw0KKyAgICAg ICAgICAgIH0NCisgICAgICAgICAgICBjb25zdCBzdWZmaXhlcyA9IFsnJywgJ2snLCAnTScsICdC JywgJ1QnXTsNCisgICAgICAgICAgICBjb25zdCBzdWZmaXhOdW0gPSBNYXRoLmZsb29yKE1hdGgu bG9nMTAodmFsdWUpIC8gMyk7DQorICAgICAgICAgICAgY29uc3Qgc2hvcnRWYWx1ZSA9ICh2YWx1 ZSAvIE1hdGgucG93KDEwMDAsIHN1ZmZpeE51bSkpLnRvRml4ZWQoMSk7DQorICAgICAgICAgICAg cmV0dXJuIHNob3J0VmFsdWUgKyBzdWZmaXhlc1tzdWZmaXhOdW1dOw0KKyAgICAgICAgICB9KTsN CisgICAgICAgIH0NCisgICAgICB9KTsNCisgICAgfSBlbHNlew0KKyAgICAgIGF4ZXMucHVzaCh7 DQorICAgICAgICBzY2FsZTogJ3knLA0KICAgICAgICAgZ3JpZDogew0KICAgICAgICAgICBzdHJv a2U6IHRoZW1lLm90aGVyVmFycy5ib3JkZXJDb2xvciwNCiAgICAgICAgICAgd2lkdGg6IDAuNSwN CkBAIC0xMDgsMTEgKzE1Myw0NyBAQCBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHJlYW1pbmdD aGFydCh7eFJhbmdlPTc1LCBkYXRhLCBvcHRpb25zfSkgew0KICAgICAgICAgICAgIGlmKHNpemUg PCA0MCkgc2l6ZSA9IDQwOw0KICAgICAgICAgICB9DQogICAgICAgICAgIHJldHVybiBzaXplOw0K KyAgICAgICAgfSwNCisgICAgICAgIC8vIHktYXhpcyBjb25maWd1cmF0aW9uDQorICAgICAgICB2 YWx1ZXM6IChzZWxmLCB0aWNrcykgPT4gew0KKyAgICAgICAgICAvLyBGb3JtYXQgdGhlIGxhYmVs DQorICAgICAgICAgIHJldHVybiB0aWNrcy5tYXAoKHZhbHVlKSA9PiB7DQorICAgICAgICAgICAg aWYodmFsdWUgPCAxKXsNCisgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSsnJzsNCisgICAgICAg ICAgICB9DQorICAgICAgICAgICAgY29uc3Qgc3VmZml4ZXMgPSBbJycsICdrJywgJ00nLCAnQics ICdUJ107DQorICAgICAgICAgICAgY29uc3Qgc3VmZml4TnVtID0gTWF0aC5mbG9vcihNYXRoLmxv ZzEwKHZhbHVlKSAvIDMpOw0KKyAgICAgICAgICAgIGNvbnN0IHNob3J0VmFsdWUgPSAodmFsdWUg LyBNYXRoLnBvdygxMDAwLCBzdWZmaXhOdW0pKS50b0ZpeGVkKDEpOw0KKyAgICAgICAgICAgIHJl dHVybiBzaG9ydFZhbHVlICsgc3VmZml4ZXNbc3VmZml4TnVtXTsNCisgICAgICAgICAgfSk7DQor ICAgICAgICB9DQorICAgICAgfSk7DQorICAgIH0NCisgIA0KKyAgICByZXR1cm4gew0KKyAgICAg IHRpdGxlOiAnJywNCisgICAgICB3aWR0aDogd2lkdGgsDQorICAgICAgaGVpZ2h0OiBoZWlnaHQs DQorICAgICAgcGFkZGluZzogWzEwLCAwLCAxMCwgMF0sDQorICAgICAgZm9jdXM6IHsNCisgICAg ICAgIGFscGhhOiAwLjMsDQorICAgICAgfSwNCisgICAgICBjdXJzb3I6IHsNCisgICAgICAgIHk6 IGZhbHNlLA0KKyAgICAgICAgZHJhZzogew0KKyAgICAgICAgICBzZXRTY2FsZTogZmFsc2UsDQor ICAgICAgICB9DQorICAgICAgfSwNCisgICAgICBzZXJpZXM6IHNlcmllcywNCisgICAgICBzY2Fs ZXM6IHsNCisgICAgICAgIHg6IHsNCisgICAgICAgICAgdGltZTogZmFsc2UsDQogICAgICAgICB9 DQotICAgICAgfQ0KLSAgICBdLA0KLSAgICBwbHVnaW5zOiBvcHRpb25zLnNob3dUb29sdGlwID8g W3Rvb2x0aXBQbHVnaW4oZGF0YS5yZWZyZXNoUmF0ZSldIDogW10sDQotICB9KSwgW2RhdGEucmVm cmVzaFJhdGUsIGRhdGE/LmRhdGFzZXRzPy5sZW5ndGgsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnNd KTsNCisgICAgICB9LA0KKyAgICAgIGF4ZXM6IGF4ZXMsDQorICAgICAgcGx1Z2luczogb3B0aW9u cy5zaG93VG9vbHRpcCA/IFt0b29sdGlwUGx1Z2luKGRhdGEucmVmcmVzaFJhdGUpXSA6IFtdLA0K KyAgICB9Ow0KKyAgfSwgW2RhdGEucmVmcmVzaFJhdGUsIGRhdGE/LmRhdGFzZXRzPy5sZW5ndGgs IHdpZHRoLCBoZWlnaHQsIG9wdGlvbnNdKTsNCiANCiAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IFsN CiAgICAgQXJyYXkuZnJvbShuZXcgQXJyYXkoeFJhbmdlKS5rZXlzKCkpLA0KQEAgLTE0MCw0ICsy MjEsNSBAQCBTdHJlYW1pbmdDaGFydC5wcm9wVHlwZXMgPSB7DQogICB4UmFuZ2U6IFByb3BUeXBl cy5udW1iZXIuaXNSZXF1aXJlZCwNCiAgIGRhdGE6IHByb3BUeXBlRGF0YS5pc1JlcXVpcmVkLA0K ICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCwNCisgIHNob3dTZWNvbmRBeGlzOiBQcm9wVHlw ZXMuYm9vbCwNCiB9Ow0KLS0gDQoyLjQxLjAud2luZG93cy4xDQoNCg== --00000000000068712c0602823205--